{"version":3,"file":"chunk.31994.d963a0b72fd2b2a9a691.js","names":["l","directions","N","NE","E","SE","S","SW","W","NW","SlightRight","Right","SharpRight","SlightLeft","Left","SharpLeft","Uturn","instructions","Head","Continue","TurnAround","WaypointReached","Roundabout","DestinationReached","Fork","Merge","OnRamp","OffRamp","EndOfRoad","Onto","formatOrder","t","ui","startPlaceholder","viaPlaceholder","endPlaceholder","units","meters","kilometers","yards","miles","hours","minutes","seconds","d","L","Class","extend","initialize","this","_langs","Util","isArray","slice","e","i","length","n","exec","Error","localize","o","r","a","h","en","de","sv","es","sp","nl","fr","it","pt","sk","el","ca","ru","pl","uk","u","options","unitNames","language","roundingSensitivity","distanceTemplate","setOptions","_localization","formatDistance","s","bind","_round","value","unit","toFixed","template","Math","pow","floor","round","formatTime","formatInstruction","text","capitalize","_getInstructionTemplate","exitStr","exit","dir","direction","modifier","getIconName","type","charAt","toUpperCase","substring","road","c","containerClassName","createContainer","DomUtil","create","createStepsContainer","createStep","appendChild","document","createTextNode","p","Control","includes","Evented","prototype","Mixin","Events","pointMarkerStyle","radius","color","fillColor","opacity","fillOpacity","summaryTemplate","timeTemplate","alternativeClassName","minimizedClassName","itineraryClassName","totalDistanceRoundingSensitivity","show","collapsible","collapseBtn","collapseBtnClass","DomEvent","on","_toggle","_container","insertBefore","firstChild","_formatter","formatter","_itineraryBuilder","itineraryBuilder","onAdd","getSize","x","_altContainer","createAlternativesContainer","disableClickPropagation","addListener","stopPropagation","onRemove","setAlternatives","_clearAlts","_routes","_createAlternative","_altElements","push","_selectRoute","route","alternatives","removeClass","hide","addClass","hasClass","name","distance","summary","totalDistance","time","totalTime","innerHTML","_onAltClicked","_selectAlt","_createItineraryContainer","removeChild","index","_addRowListeners","coordinates","_marker","circleMarker","addTo","_map","removeLayer","panTo","target","window","event","srcElement","parentElement","indexOf","splice","fire","routesIndex","scrollTop","stop","m","LayerGroup","styles","weight","missingRouteStyles","dashArray","addWaypoints","extendToWaypoints","missingRouteTolerance","call","_route","_extendToWaypoints","_addSegment","getBounds","latLngBounds","_findWaypointIndices","inputWaypoints","_findClosestRoutePoint","latLng","Number","MAX_VALUE","distanceTo","_getWaypointIndices","polyline","addLayer","_onLineTouched","_findNearestWpBefore","latlng","afterIndex","_wpIndices","waypointIndices","f","timeout","blurTimeout","noResultsMessage","_elem","_resultFn","resultFn","resultContext","_autocomplete","autocompleteFn","autocompleteContext","_selectFn","_resultTable","_keyPressed","_keyDown","_isOpen","close","_open","getBoundingClientRect","pageXOffset","documentElement","body","parentNode","scrollLeft","pageYOffset","style","left","top","bottom","width","right","_setResults","_selection","_results","setAttribute","formatGeocoderResult","preventDefault","_createClickListener","_select","_resultSelected","blur","_lastCompletedText","keyCode","parseInt","getAttribute","_complete","activeElement","_timer","clearTimeout","setTimeout","_unselect","g","setSelectionRange","select","_","createGeocoder","disabled","container","input","closeButton","geocoderPlaceholder","viaNumber","geocoderClass","waypointNameFallback","lat","lng","abs","toString","maxGeocoderTolerance","autocompleteOptions","className","_element","_waypoint","update","waypoint","center","geocoder","geocode","suggest","getContainer","setValue","reverse","_update","focus","v","allowUTurn","y","Layer","dragStyles","draggableWaypoints","routeWhileDragging","reverseWaypoints","addButtonClassName","markerOptions","createGeocoderElement","createMarker","draggable","marker","geocodersClassName","_waypoints","setWaypoints","isReady","getWaypoints","concat","spliceWaypoints","apply","arguments","hasOwnProperty","_updateMarkers","_fireChanged","_removeMarkers","_newWp","lines","createGeocoders","_geocoderContainer","_geocoderElems","_updateGeocoders","_createGeocoder","_focusGeocoder","waypointIndex","_markers","_hookWaypointEvents","waypoints","Array","shift","nRemoved","added","getLatLng","setLatLng","dragging","enable","off","disable","dragNewWaypoint","_dragNewWaypoint","enabled","getLatLngs","setLatLngs","default","w","serviceUrl","profile","routingOptions","steps","polylinePrecision","useHints","suppressDemoServerWarning","_hints","locations","console","warn","buildRouteUrl","requestParameters","getParamString","status","message","abort","statusText","responseText","JSON","parse","url","_routeDone","requiresMoreDetail","properties","isSimplified","contains","code","_toWaypoints","routes","_convertRoute","geometryOnly","simplifyGeometry","_saveHintData","duration","legs","stepToText","compile","_decodePolyline","geometry","_maneuverToInstructionType","maneuver","_maneuverToModifier","legCount","legIndex","_bearingToDirection","bearing_after","mode","join","_camelCase","_leftOrRight","split","decode","location","_locationKey","allowUTurns","hint","R","fitSelectedRoutes","routeLine","autoRoute","routeDragInterval","waypointMode","showAlternatives","defaultErrorHandler","error","_router","router","_plan","plan","_requestCount","_routeSelected","_onWaypointsChanged","_setupRouteDragging","_onZoomEnd","_selectedRoute","getZoom","callback","_updateLineCallback","_line","_alternatives","getPlan","getRouter","_waypointsVisible","_updateLines","fitBounds","latLngToLayerPoint","bounds","_waypointsInViewport","_clearLines","forEach","isAlternative","altLineOptions","lineOptions","_hookAltEvents","_hookEvents","_pendingRequest","useZoomParameter","z","b","Routing","OSRMv1","access_token","C","header","formatMessage","children","visibility","k","control","itinerary","line","osrmv1","localization","geocoderElement","mapbox","errorControl","autocomplete","Itinerary","Line","Plan","Waypoint","Autocomplete","Formatter","GeocoderElement","Localization","ItineraryBuilder","arrow","Ee","autoPlacement","Se","autoUpdate","we","computePosition","De","detectOverflow","ke","flip","Ce","getOverflowAncestors","ie","Me","inline","Te","limitShift","Pe","offset","_e","platform","ye","xe","size","Ae","sides","alignments","placements","reduce","acc","side","min","max","createCoords","oppositeSideMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","reference","floating","getOppositePlacement","getOppositeAlignmentPlacement","replace","lrPlacement","rlPlacement","tbPlacement","btPlacement","getPaddingObject","padding","_padding$top","_padding$right","_padding$bottom","_padding$left","rectToClientRect","rect","height","computeCoordsFromPlacement","_ref","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","async","state","_await$platform$isEle","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getSideOffsets","overflow","isAnySideFullyClipped","some","getBoundingRect","minX","map","minY","originSides","Set","hasWindow","getNodeName","node","isNode","nodeName","toLowerCase","getWindow","_node$ownerDocument","ownerDocument","defaultView","Node","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","test","isTableElement","isTopLayer","matches","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","transform","translate","scale","rotate","perspective","isWebKit","backdropFilter","filter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollX","scrollY","getParentNode","result","assignedSlot","host","getNearestOverflowAncestor","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","visualViewport","parent","Object","getPrototypeOf","getCssDimensions","getComputedStyle$1","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","domElement","isFinite","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","visualOffsets","isFixed","floatingOffsetParent","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getWindowScrollBarX","leftScroll","getHTMLOffset","scroll","htmlRect","getClientRectFromClippingAncestor","clippingAncestor","isLayoutViewport","html","clientWidth","clientHeight","layoutRelativeClientCoords","doc","bodyStyles","bodyMarginInline","compatMode","marginLeft","marginRight","reservedWidth","gutter","scrollbarGutter","scrollWidth","scrollHeight","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","htmlOffset","isStaticPositioned","position","getTrueOffsetParent","polyfill","rawOffsetParent","svgOffsetParent","currentNode","topLayer","clippingAncestors","cache","cachedResult","get","lastKeptComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","lastPosition","ancestor","set","_c","firstRect","getElementRects","data","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","from","isRTL","rectsAreEqual","ancestorScroll","ancestorResize","elementResize","ResizeObserver","layoutShift","IntersectionObserver","animationFrame","referenceEl","ancestors","addEventListener","cleanupIo","onMove","timeoutId","io","root","cleanup","_io","disconnect","refresh","skip","threshold","elementRectForRootMargin","rootMargin","isFirstUpdate","handleObserve","entries","ratio","intersectionRatio","observe","handleResize","removeEventListener","frameId","reobserveFrame","resizeObserver","firstEntry","unobserve","cancelAnimationFrame","requestAnimationFrame","_resizeObserver","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","detectOverflow$1","fn","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","has","crossAxisMulti","rawValue","mainAxis","crossAxis","alignmentOffset","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","allowedPlacements","autoAlignment","detectOverflowOptions","placements$1","undefined","currentIndex","currentPlacement","reset","alignmentSides","currentOverflows","allOverflows","overflows","nextPlacement","placementsSortedByMostSpace","sort","resetPlacement","every","checkMainAxis","checkCrossAxis","limiter","mainAxisCoord","crossAxisCoord","clampCoord","coord","limitedCoords","_middlewareData$flip","initialPlacement","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","initialSideAxis","isBasePlacement","oppositePlacement","hasFallbackAxisSideDirection","isStart","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","_overflowsData$filter2","currentSideAxis","isYAxis","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","shiftData","noShift","availableHeight","availableWidth","nextDimensions","referenceHiddenOffsets","referenceHidden","escapedOffsets","escaped","arrowDimensions","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","shouldAddOffset","centerOffset","nativeClientRects","clientRects","sortedRects","groups","prevRect","fallback","resetRects","find","lastRect","isTop","isLeftSide","maxRight","minLeft","measureRects","_rawOffset$mainAxis","_rawOffset$crossAxis","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","Map","mergedOptions","platformWithCache","config","middleware","platformWithDetectOverflow","statefulPlacement","resetCount","currentMiddleware","nextX","nextY","memoize","cacheDefault","serializer","serializerDefault","strategyDefault","monadic","arg","cacheKey","computedValue","variadic","args","assemble","context","serialize","B","stringify","ObjectWithoutPrototypeCache","key","strategies","SKELETON_TYPE","TYPE","_Parser","he","createLiteralElement","createNumberElement","isArgumentElement","isDateElement","isDateTimeSkeleton","isLiteralElement","isNumberElement","isNumberSkeleton","isPluralElement","isPoundElement","isSelectElement","isStructurallySame","ue","isTagElement","isTimeElement","ErrorKind","literal","argument","number","date","plural","pound","tag","dateTime","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","MALFORMED_ARGUMENT","EXPECT_ARGUMENT_TYPE","INVALID_ARGUMENT_TYPE","EXPECT_ARGUMENT_STYLE","INVALID_NUMBER_SKELETON","INVALID_DATE_TIME_SKELETON","EXPECT_NUMBER_SKELETON","EXPECT_DATE_TIME_SKELETON","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","EXPECT_SELECT_ARGUMENT_OPTIONS","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","EXPECT_SELECT_ARGUMENT_SELECTOR","EXPECT_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","INVALID_TAG","INVALID_TAG_NAME","UNMATCHED_CLOSING_TAG","UNCLOSED_TAG","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","match","era","year","RangeError","month","day","weekday","hour12","hourCycle","hour","minute","second","timeZoneName","WHITE_SPACE_REGEX","icuUnitToEcma","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","str","roundingPriority","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","minimumIntegerDigits","parseNotationOptions","opt","parseNumberSkeleton","tokens","_i","tokens_1","token","currency","useGrouping","maximumFractionDigits","compactDisplay","__assign","all","currencyDisplay","unitDisplay","roundingMode","g3","g4","g5","minimumFractionDigits","trailingZeroDisplay","signOpts","conciseScientificAndEngineeringOpts","_a","timeData","AC","AD","AE","AF","AG","AI","AL","AM","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CP","CR","CU","CV","CW","CX","CY","CZ","DE","DG","DJ","DK","DM","DO","DZ","EA","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GT","GU","GW","GY","HK","HN","HR","HU","IC","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TA","TC","TD","TF","TG","TH","TJ","TL","TM","TN","TO","TR","TT","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","getDefaultHourSymbolFromLocale","locale","hourCycles","regionTag","languageTag","maximize","region","SPACE_SEPARATOR_START_REGEX","RegExp","source","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","String","startsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","fromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","trimStart","hasTrimEnd","trimEnd","isSafeInteger","REGEX_SUPPORTS_U_AND_Y","matchIdentifierAtIndex","search","codePoints","fromCharCode","obj","entries_1","first","charCodeAt","flag","IDENTIFIER_PREFIX_RE_1","lastIndex","_isWhiteSpace","_isPatternSyntax","Parser","column","ignoreTag","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","char","parseArgument","err","val","peek","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","tagName","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","closingTagNameStartPosition","startOffset","_isPotentialElementNameChar","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","ch","openingBracePosition","parseIdentifierIfPossible","parseArgumentOptions","startingPosition","endOffset","bumpTo","typeStartPosition","argType","typeEndPosition","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","dateTimePattern","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","hourChar","pattern","parsedOptions","typeEndPosition_1","identifierAndLocation","pluralOffset","tryParseDecimalInteger","optionsResult","tryParsePluralOrSelectOptions","location_2","pluralType","nestedBraces","apostrophePosition","bumpUntil","stringTokens_1","stemAndOptions","options_1","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selector","selectorLocation","fragmentResult","add","expectNumberError","invalidNumberError","sign","hasDigits","decimal","kind","prefix","currentOffset","targetOffset","nextCode","collectVariables","ast","vars","keys","aVars","bVars","success","bType","pruneLocation","els","opts","SyntaxError","originalMessage","captureLocation","exports","Intl","DateTimeFormat","formatToParts","dateStyle","format","Date","resolvedOptions","locales","supportedLocalesOf","intl_localematcher_1","supported_locales_generated_1","supportedLocales","require","BestAvailableLocale","availableLocales","candidate","pos","lastIndexOf","q","LookupSupportedLocales","requestedLocales","subset","requestedLocales_1","noExtensionLocale","UNICODE_EXTENSION_SEQUENCE_REGEX","availableLocale","CanonicalizeUnicodeLocaleId","getCanonicalLocales","ResolveLocale","relevantExtensionKeys","localeData","getDefaultLocale","localeMatcher","extension","foundLocale","noExtensionLocales","noExtensionLocaleMap","findBestMatch","matchedSupportedLocale","matchedDesiredLocale","components","keywords","foundLocaleData","dataLocale","invariant","keyword","attributes","subtag","supportedKeywords","_loop_1","keyLocaleData","supportedKeyword","entry","requestedValue","ukey","lowerValue","optionsValue","relevantExtensionKeys_1","attributes_1","keywords_1","kw","privateIndex","KB","B4","V1","PROCESSED_DATA","supplemental","languageMatching","paradigmLocales","_locales","$enUS","_value","$cnsar","$americas","$maghreb","no","_desired","_distance","bs","hr","sr","aa","_oneway","nb","ur","hi","zh","fil","ar","da","id","tr","az","et","ff","gn","iu","kln","kok","kpe","luy","lv","mg","mn","ms","ne","om","or","ps","qu","sc","sq","syr","uz","yi","regions","EU","EZ","QO","UN","condition","Err","isMatched","languageMatchInfoLocale","matchVariables","script","shouldInclude","expandedMatchedRegions","__spreadArray","serializeLSR","lsr","Boolean","findMatchingDistanceForLSR","desired","supported","oneway","lowestDistance","Infinity","distances","desiredLocale","Locale","supportedLocale","desiredLSR","supportedLSR","matchingDistance","_b","jsonData","defaultLocale","algorithm","NumberFormat","polyfilled","PluralRules","RelativeTimeFormat","numeric","DEFAULT_INTL_CONFIG","je","IntlError","IntlErrorCode","IntlFormatError","Oe","InvalidConfigError","MessageFormatError","Ne","MissingDataError","MissingTranslationError","ze","UnsupportedFormatterError","createFormatters","Fe","createIntl","ht","createIntlCache","Re","defineMessage","mt","defineMessages","ft","filterProps","Ie","formatDate","qe","formatDateToParts","Xe","formatDisplayName","Qe","formatList","nt","$e","formatNumber","ct","formatNumberToParts","dt","formatPlural","rt","formatRelativeTime","st","Ke","formatTimeToParts","Ze","getNamedFormat","He","ErrorCode","MISSING_VALUE","INVALID_VALUE","MISSING_INTL_API","PART_TYPE","FormatError","_super","msg","_this","__extends","InvalidValueError","variableId","InvalidValueTypeError","MissingValueError","isFormatXMLElementFn","formatters","formats","values","currentPluralValue","els_1","getNumberFormat","varName","object","getDateTimeFormat","medium","value_1","formatFn","chunks","other","rule","getPluralRules","parts","part","lastPart","createFastMemoizeCache","store","IntlMessageFormat","overrideFormats","defaultConfig","configs","formatterCache","pluralRules","resolvedLocale","getAst","resolveLocale","__parse","TypeError","parseOpts","__rest","c1","c2","defineProperty","memoizedDefaultLocale","enumerable","configurable","integer","percent","short","long","full","FORMAT_ERROR","UNSUPPORTED_FORMATTER","INVALID_CONFIG","MISSING_DATA","MISSING_TRANSLATION","exception","stack","captureStackTrace","descriptor","defaultMessage","description","props","allowlist","defaults","filtered","messages","timeZone","defaultFormats","fallbackOnEmptyString","onError","onWarn","warning","relativeTime","displayNames","ListFormat","DisplayNames","getMessageFormat","getRelativeTimeFormat","getListFormat","getDisplayNames","formatType","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","f1","mfFormats","messageDescriptor","defaultRichTextElements","msgId","DATE_TIME_FORMAT_OPTIONS","getFormatter","filteredOptions","timeStyle","formatDateTimeRange","to","formatRange","DISPLAY_NAMES_OPTONS","of","LIST_FORMAT_OPTIONS","now","results","formatListToParts","richValues_1","serializedValues","PLURAL_FORMAT_OPTIONS","RELATIVE_TIME_FORMAT_OPTIONS","NUMBER_FORMAT_OPTIONS","resolvedConfig","$t","msgs","faMonero","iconName","icon","faHooli","faYelp","faCcVisa","faLastfm","faShopware","faCreativeCommonsNc","faAws","faRedhat","faYoast","faCloudflare","faUps","faWpexplorer","faDyalog","faBity","faStackpath","faBuysellads","faFirstOrder","faModx","faGuilded","faVnv","faSquareJs","faJsSquare","faMicrosoft","faQq","faOrcid","faJava","faInvision","faCreativeCommonsPdAlt","faCentercode","faGlideG","faDrupal","faHireAHelper","faCreativeCommonsBy","faUnity","faWhmcs","faRocketchat","faVk","faUntappd","faMailchimp","faCss3Alt","faSquareReddit","faRedditSquare","faVimeoV","faContao","faSquareFontAwesome","faDeskpro","faSistrix","faSquareInstagram","faInstagramSquare","faBattleNet","faTheRedYeti","faSquareHackerNews","faHackerNewsSquare","faEdge","faNapster","faSquareSnapchat","faSnapchatSquare","faGooglePlusG","faArtstation","faMarkdown","faSourcetree","faGooglePlus","faDiaspora","faFoursquare","faStackOverflow","faGithubAlt","faPhoenixSquadron","faPagelines","faAlgolia","faRedRiver","faCreativeCommonsSa","faSafari","faGoogle","faSquareFontAwesomeStroke","faFontAwesomeAlt","faAtlassian","faLinkedinIn","faDigitalOcean","faNimblr","faChromecast","faEvernote","faHackerNews","faCreativeCommonsSampling","faAdversal","faCreativeCommons","faWatchmanMonitoring","faFonticons","faWeixin","faShirtsinbulk","faCodepen","faGitAlt","faLyft","faRev","faWindows","faWizardsOfTheCoast","faSquareViadeo","faViadeoSquare","faMeetup","faCentos","faAdn","faCloudsmith","faPiedPiperAlt","faSquareDribbble","faDribbbleSquare","faCodiepie","faNode","faMix","faSteam","faCcApplePay","faScribd","faOpenid","faInstalod","faExpeditedssl","faSellcast","faSquareTwitter","faTwitterSquare","faRProject","faDelicious","faFreebsd","faVuejs","faAccusoft","faIoxhost","faFonticonsFi","faAppStore","faCcMastercard","faItunesNote","faGolang","faKickstarter","faGrav","faWeibo","faUncharted","faFirstdraft","faSquareYoutube","faYoutubeSquare","faWikipediaW","faWpressr","faRendact","faAngellist","faGalacticRepublic","faNfcDirectional","faSkype","faJoget","faFedora","faStripeS","faMeta","faLaravel","faHotjar","faBluetoothB","faStickerMule","faCreativeCommonsZero","faHips","faBehance","faReddit","faDiscord","faChrome","faAppStoreIos","faCcDiscover","faWpbeginner","faConfluence","faMdb","faDochub","faAccessibleIcon","faEbay","faAmazon","faUnsplash","faYarn","faSquareSteam","faSteamSquare","fa500px","faSquareVimeo","faVimeoSquare","faAsymmetrik","faFontAwesome","faFontAwesomeFlag","faFontAwesomeLogoFull","faGratipay","faApple","faHive","faGitkraken","faKeybase","faApplePay","faPadlet","faAmazonPay","faSquareGithub","faGithubSquare","faStumbleupon","faFedex","faPhoenixFramework","faShopify","faNeos","faHackerrank","faResearchgate","faSwift","faAngular","faSpeakap","faAngrycreative","faYCombinator","faEmpire","faEnvira","faSquareGitlab","faGitlabSquare","faStudiovinari","faPiedPiper","faWordpress","faProductHunt","faFirefox","faLinode","faGoodreads","faSquareOdnoklassniki","faOdnoklassnikiSquare","faJsfiddle","faSith","faThemeisle","faPage4","faHashnode","faReact","faCcPaypal","faSquarespace","faCcStripe","faCreativeCommonsShare","faBitcoin","faKeycdn","faOpera","faItchIo","faUmbraco","faGalacticSenate","faUbuntu","faDraft2digital","faStripe","faHouzz","faGg","faDhl","faSquarePinterest","faPinterestSquare","faXing","faBlackberry","faCreativeCommonsPd","faPlaystation","faQuinscape","faLess","faBloggerB","faOpencart","faVine","faPaypal","faGitlab","faTypo3","faRedditAlien","faYahoo","faDailymotion","faAffiliatetheme","faPiedPiperPp","faBootstrap","faOdnoklassniki","faNfcSymbol","faEthereum","faSpeakerDeck","faCreativeCommonsNcEu","faPatreon","faAvianex","faEllo","faGofore","faBimobject","faFacebookF","faSquareGooglePlus","faGooglePlusSquare","faMandalorian","faFirstOrderAlt","faOsi","faGoogleWallet","faDAndDBeyond","faPeriscope","faFulcrum","faCloudscale","faForumbee","faMizuni","faSchlix","faSquareXing","faXingSquare","faBandcamp","faWpforms","faCloudversify","faUsps","faMegaport","faMagento","faSpotify","faOptinMonster","faFly","faAviato","faItunes","faCuttlefish","faBlogger","faFlickr","faViber","faSoundcloud","faDigg","faTencentWeibo","faSymfony","faMaxcdn","faEtsy","faFacebookMessenger","faAudible","faThinkPeaks","faBilibili","faErlang","faCottonBureau","faDashcube","fa42Group","faInnosoft","faStackExchange","faElementor","faSquarePiedPiper","faPiedPiperSquare","faCreativeCommonsNd","faPalfed","faSuperpowers","faResolving","faXbox","faSearchengin","faTiktok","faSquareFacebook","faFacebookSquare","faRenren","faLinux","faGlide","faLinkedin","faHubspot","faDeploydog","faTwitch","faRavelry","faMixer","faSquareLastfm","faLastfmSquare","faVimeo","faMendeley","faUniregistry","faFigma","faCreativeCommonsRemix","faCcAmazonPay","faDropbox","faInstagram","faCmplid","faFacebook","faGripfire","faJediOrder","faUikit","faFortAwesomeAlt","faPhabricator","faUssunnah","faEarlybirds","faTradeFederation","faAutoprefixer","faWhatsapp","faSlideshare","faGooglePlay","faViadeo","faLine","faGoogleDrive","faServicestack","faSimplybuilt","faBitbucket","faImdb","faDeezer","faRaspberryPi","faJira","faDocker","faScreenpal","faBluetooth","faGitter","faDAndD","faMicroblog","faCcDinersClub","faGgCircle","faPiedPiperHat","faKickstarterK","faYandex","faReadme","faHtml5","faSellsy","faSass","faWirsindhandwerk","faWsh","faBuromobelexperte","faSalesforce","faOctopusDeploy","faMedapps","faNs8","faPinterestP","faApper","faFortAwesome","faWaze","faCcJcb","faSnapchat","faSnapchatGhost","faFantasyFlightGames","faRust","faWix","faSquareBehance","faBehanceSquare","faSupple","faRebel","faCss3","faStaylinked","faKaggle","faSpaceAwesome","faDeviantart","faCpanel","faGoodreadsG","faSquareGit","faGitSquare","faSquareTumblr","faTumblrSquare","faTrello","faCreativeCommonsNcJp","faGetPocket","faPerbyte","faGrunt","faWeebly","faConnectdevelop","faLeanpub","faBlackTie","faThemeco","faPython","faAndroid","faBots","faFreeCodeCamp","faHornbill","faJs","faIdeal","faGit","faDev","faSketch","faYandexInternational","faCcAmex","faUber","faGithub","faPhp","faAlipay","faYoutube","faSkyatlas","faFirefoxBrowser","faReplyd","faSuse","faJenkins","faTwitter","faRockrms","faPinterest","faBuffer","faNpm","faYammer","faBtc","faDribbble","faStumbleuponCircle","faInternetExplorer","faStubber","faTelegram","faTelegramPlane","faOldRepublic","faOdysee","faSquareWhatsapp","faWhatsappSquare","faNodeJs","faEdgeLegacy","faSlack","faSlackHash","faMedrt","faUsb","faTumblr","faVaadin","faQuora","faReacteurope","faMedium","faMediumM","faAmilia","faMixcloud","faFlipboard","faViacoin","faCriticalRole","faSitrox","faDiscourse","faJoomla","faMastodon","faAirbnb","faWolfPackBattalion","faBuyNLarge","faGulp","faCreativeCommonsSamplingPlus","faStrava","faEmber","faCanadianMapleLeaf","faTeamspeak","faPushed","faWordpressSimple","faNutritionix","faWodu","faGooglePay","faIntercom","faZhihu","faKorvue","faPix","faSteamSymbol","icons","fab","module","cors","sent","XMLHttpRequest","protocol","hostname","port","XDomainRequest","original","that","loaded","onload","onreadystatechange","readyState","onerror","evt","onprogress","ontimeout","onabort","open","send","py2_round","encode","current","previous","factor","coordinate","output","flipped","precision","latitude_change","byte","fromGeoJSON","geojson","toGeoJSON","connectElementTagNames","ConnectElementCommonMethodConfig","setOnLoadError","_listener","setOnLoaderStart","ConnectElementCustomMethodConfig","setFullTermsOfServiceUrl","_termOfServiceUrl","setRecipientTermsOfServiceUrl","_recipientTermsOfServiceUrl","setPrivacyPolicyUrl","_privacyPolicyUrl","setSkipTermsOfServiceCollection","_skipTermsOfServiceCollection","setCollectionOptions","_collectionOptions","setOnExit","setOnStepChange","setOnSectionOpen","setOnNotificationsChange","setOnInstantPayoutsPromotionLoaded","setOnInstantPayoutCreated","setDefaultCard","_defaultCard","setCardSwitching","_cardSwitching","setFetchEphemeralKey","_fetchEphemeralKey","setShowSpendControls","_showSpendControls","setIssuingProgram","_issuingProgram","setFinancialAccount","_financialAccount","payments","setDefaultFilters","_filters","setPayment","_payment","setOnClose","setOnDisputesLoaded","setHideProductTaxCodeSelector","_hidden","setDisplayHeadOfficeCountries","_countries","setOnTaxSettingsUpdated","setOnAfterTaxRegistrationAdded","setDisplayCountries","setOnAfterTaxRegistrationExpired","setPayout","_payout","setOnReportAvailabilityLoaded","EXISTING_SCRIPT_MESSAGE","V1_URL","componentNameMapping","stripePromise$1","isWindowStripeConnectDefined","stripeConnect","init","initStripeConnect","stripePromise","initParams","eagerClientSecretPromise","fetchClientSecret","Promise","reject","metaOptions","stripeConnectInstance","then","wrapper","assign","htmlName","createElement","customMethods","methods","method","instance","isConnected","setConnector","oldDisplay","connect","updateOptions","debugInstance","logout","createWrapper","StripeConnect","optimizedLoading","params","sdk","sdkOptions","sdkVersion","resolve","querySelectorAll","injectScript","src","head","loadCalled","catch","days","months","years","eventChangeViewDate","eventChangeCurrentView","eventChangeFocusDate","eventChangeSelectedDate","eventChangeTime","eventChangeLastSelectedDate","actionSelectDate","actionUnselectDate","cssClassWeekend","classes","daysShort","daysMin","monthsShort","today","clear","dateFormat","timeFormat","firstDay","startDate","weekends","altField","altFieldDateFormat","toggleSelected","keyboardNav","selectedDates","isMobile","visible","view","minView","showOtherMonths","selectOtherMonths","moveToOtherMonthsOnSelect","showOtherYears","selectOtherYears","moveToOtherYearsOnSelect","minDate","maxDate","disableNavWhenOutOfRange","multipleDates","multipleDatesSeparator","range","dynamicRange","buttons","monthsField","showEvent","autoClose","fixedHeight","prevHtml","nextHtml","navTitles","timepicker","onlyTimepicker","dateTimeSeparator","minHours","maxHours","minMinutes","maxMinutes","hoursStep","minutesStep","onSelect","onChangeViewDate","onChangeView","onRenderCell","onShow","onHide","onClickDayName","querySelector","innerHtml","attrs","classList","getFullYear","getMonth","getDate","getHours","dayPeriod","fullMonth","fullDate","getDay","fullHours","hours12","fullHours12","getMinutes","fullMinutes","getTime","setHours","D","DocumentFragment","isNaN","log","Symbol","toPrimitive","writable","constructor","dp","$cell","focused","remove","selected","isDisabled","_handleSelectedStatus","_handleRangeStatus","removeFocus","_getHtml","_handleClasses","singleType","customData","cellType","datepicker","_createElement","_bindDatepickerEvents","disableDate","enableDate","onChangeSelectedDate","onChangeFocusDate","unbindDatepickerEvents","adpCell","_getClassName","isDateDisabled","_isOutOfMinMaxRange","isWeekend","isOtherMonth","isOtherDecade","destroy","focusDate","rangeDateTo","rangeDateFrom","_checkIfDateIsSelected","removeSelect","_handleInitialFocusStatus","hasSelectedDates","M","T","closest","isMinViewReached","down","_handleAlreadySelectedDates","selectDate","dayIndex","render","setFocusDate","handleClick","handleDayNameClick","pressed","rangeFromFocused","rangeToFocused","setMinutes","replaceDate","isVisible","currentView","destroyCells","_generateCells","cells","$cells","$el","_buildBaseHtml","renderDayNames","_bindEvents","onMouseOverCell","onMouseOutCell","onClickBody","onMouseDown","onMouseMove","onMouseUp","onChangeCurrentView","$names","_getDayNamesHtml","_generateCell","getDatesFunction","getDaysDates","viewDate","getMonthsDates","parsedViewDate","getYearsDates","F","V","dataset","action","_resetNavStatus","handleNavStatus","isFinalView","up","$prev","$next","$title","_getTitle","_defineDOM","onClickNav","onClickNavTitle","isNavIsFunction","renderDelay","_disableNav","content","onClick","setViewDate","H","clearHtml","generateButtons","createButton","attachEventToButton","timepickerIsActive","updateTime","setMinMaxTime","setCurrentTime","addTimeToDate","setTime","updateText","trigger","$minutesText","$hoursText","toggle","toggleTimepickerIsActive","ampm","lastSelectedDate","buildHtml","defineDOM","bindDatepickerEvents","bindDOMEvents","onChangeLastSelectedDate","navigator","userAgent","$ranges","onChangeInputRange","onMouseEnterLeave","onFocus","onBlur","displayHours","$hours","$minutes","$ampm","setMinMaxTimeFromOptions","setMinTimeFromMinDate","setMaxTimeFromMaxDate","updateSliders","_hours","A","O","hotKeys","getInitialFocusDate","getClampedDate","viewDateTransition","pressedKeys","treatAsInline","which","registerKey","isHotKeyPressed","handleHotKey","isArrow","focusNextCell","removeKey","bindKeyboardEvents","onKeyDown","onKeyUp","delete","__events","removeAllEvents","I","P","j","buildGlobalContainer","hideAnimation","_destroyComponents","$container","$datepicker","customHide","$target","$pointer","isViewChange","done","_finishHide","cssText","$altField","_getInputValue","dispatchEvent","Event","_cancelScheduledCall","_onTransitionEnd","once","decade","curDecade","viewIndexes","elIsInput","setPosition","views","shouldUpdateDOM","$content","silent","isDestroyed","_onFocus","_onBlur","_onResize","_removeMobileAttributes","nav","$customContainer","_createMinMaxDates","_limitViewDateByMaxMinDates","_handleLocale","setCurrentView","_setInputValue","$timepicker","_addTimepicker","_addButtons","$buttons","_createMobileOverlay","_addMobileAttributes","_showMobileOverlay","disabledDates","getCell","currentViewSingular","_triggerOnSelect","isOtherYear","inFocus","inited","initialReadonly","defaultGlobalContainerId","_bindSubEvents","_createComponents","_setPositionClasses","$nav","_onClickOverlay","removeAttribute","_onChangeSelectedDate","_onChangeFocusedDate","_onChangeTime","nextSibling","_onMouseDown","_onMouseUp","replacer","mm","hh","HH","AA","EEEE","dd","MMM","MMMM","yy","yyyy","yyyy1","yyyy2","_handleUpDownActions","onBeforeSelect","_updateLastSelectedDate","unselectDate","_scheduleCallAfterTransition","_hasTransition","formattedDate","viewIndex","getPropertyValue","K","__WEBPACK_DEFAULT_EXPORT__","factory","__webpack_require__","allowedTagList","freeze","fromCharCodeKeyCode","keyName","Unidentified","AndroidDefault","Alt","AltGr","CapsLock","Ctrl","Fn","FnLock","Hyper","Meta","OSLeft","OSRight","Command","NumLock","ScrollLock","Shift","Super","SymbolLock","Enter","Tab","Space","LeftArrow","UpArrow","RightArrow","DownArrow","End","Home","PageUp","PageDown","Backspace","Clear","Copy","CrSel","Cut","Delete","EraseEof","ExSel","Insert","Paste","Redo","Undo","Accept","Again","Attn","Cancel","ContextMenu","Esc","Execute","Find","Finish","Help","Pause","Play","Props","Select","ZoomIn","ZoomOut","BrightnessDown","BrightnessUp","Eject","LogOff","Power","PowerOff","PrintScreen","Hibernate","Standby","WakeUp","Compose","Dead","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Print","num0","num1","num2","num3","num4","num5","num6","num7","num8","num9","G","J","Q","U","X","Y","Z","Semicolon","Equal","Comma","Hyphen","Minus","Plus","Dot","Slash","Backquote","LeftParenthesis","RightParenthesis","LeftBracket","RightBracket","Backslash","Quote","numpad0","numpad1","numpad2","numpad3","numpad4","numpad5","numpad6","numpad7","numpad8","numpad9","NumpadDot","NumpadDotAlt","NumpadMultiply","NumpadPlus","NumpadMinus","NumpadSubtract","NumpadSlash","NumpadDotObsoleteBrowsers","NumpadMultiplyObsoleteBrowsers","NumpadPlusObsoleteBrowsers","NumpadMinusObsoleteBrowsers","NumpadSlashObsoleteBrowsers","_allFnKeys","_someNonPrintableKeys","_directionKeys","arabicToLatinNumbers","isNumber","isString","isUndefined","isSeleniumBot","keyCodeNumber","isUndefinedOrNullOrEmpty","version","appName","appVersion","webdriver","isNegativeStrict","substr","minimumValue","maximumValue","selectionStart","getSelection","getRangeAt","selectionEnd","isInputElement","isNull","createRange","setStart","setEnd","removeAllRanges","addRange","WheelEvent","isWheelEvent","deltaY","throwError","forceDecimalPlaces","indexFirstNonZeroDecimalPlace","roundToNearest","modifyAndRoundToNearestAuto","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","random","textContent","setCustomValidity","nodeType","ELEMENT_NODE","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","TEXT_NODE","nodeValue","isInArray","NaN","insertAt","repeat","iterator","symbol","textLength","_skipSpaces","isDigit","_getNumber","decimalCharacter","lexer","getNextToken","_exp","_term","_moreExp","createNode","createLeaf","_factor","_moreTerms","createUnaryNode","_match","getIndex","next","return","_setArgumentsValues","initialValue","userOptions","defaultRawValue","_setSettings","_checkElement","savedCancellableValue","historyTable","historyTableIndex","onGoingRedo","parentForm","_getParentForm","runOnce","settings","formatOnPageLoad","_formatDefaultValueOnPageLoad","emptyInputBehavior","zero","press","always","null","_setElementAndRawValue","hasEventListeners","isContentEditable","noEventListeners","_createEventListeners","_setWritePermissions","_saveInitialValues","storageNamePrefix","_setPersistentStorageName","validState","isFocused","isDropEvent","isEditing","rawValueOnFocus","internalModification","attributeToWatch","_getAttributeToWatch","getterSetter","getOwnPropertyDescriptor","__proto__","_addWatcher","createLocalList","_createLocalList","_addToGlobalList","global","autoNumericLocalList","setUnformatted","_executeCallback","getNumericString","getFormatted","getNumber","getLocalized","reformat","unformat","unformatLocalized","isPristine","wipe","nuke","addObject","getAutoNumericElement","_hasLocalList","_getLocalList","mergeMaps","_addToLocalList","_setLocalList","removeObject","empty","getList","defaultSettings","allowDecimalPadding","alwaysAllowDecimalCharacter","caretPositionOnFocus","_deleteLocalList","currencySymbol","currencySymbolPlacement","decimalCharacterAlternative","decimalPlaces","showWarnings","decimalPlacesRawValue","decimalPlacesShownOnBlur","decimalPlacesShownOnFocus","defaultValueOverride","digitalGroupSpacing","digitGroupSeparator","divisorWhenUnfocused","eventBubbles","eventIsCancelable","failOnUnknownOption","formulaMode","historySize","invalidClass","isCancellable","leadingZero","modifyValueOnUpDownArrow","modifyValueOnWheel","negativeBracketsTypeOnBlur","negativePositiveSignPlacement","negativeSignCharacter","negativePositiveSignBehavior","noEvents","addEvents","_removeEventListeners","onInvalidPaste","outputFormat","overrideMinMaxLimits","positiveSignCharacter","rawValueDivisor","readOnly","roundingMethod","saveValueToSessionStorage","symbolWhenUnfocused","selectNumberOnly","selectOnFocus","serializeSpaces","showOnlyNumbersOnFocus","showPositiveSign","styleRules","suffixText","unformatOnHover","unformatOnSubmit","upDownStep","valuesToStrings","watchExternalChanges","wheelOn","wheelStep","_triggerEvent","events","initialized","newValue","getElementValue","newRawValue","aNElement","initialValueHtmlAttribute","scientificToDecimal","compositioning","_onFocusInFunc","_onFocusIn","_onFocusInAndMouseEnterFunc","_onFocusInAndMouseEnter","_onFocusFunc","_onKeydownFunc","_onKeydown","_onKeypressFunc","_onKeypress","_onKeyupFunc","_onKeyup","_onFocusOutAndMouseLeaveFunc","_onFocusOutAndMouseLeave","_onPasteFunc","_onPaste","_onWheelFunc","_onWheel","_onDropFunc","_onDrop","_onKeydownGlobalFunc","_onKeydownGlobal","_onKeyupGlobalFunc","_onKeyupGlobal","_onCompositionstartFunc","_onCompositionstart","_onCompositionendFunc","_onCompositionend","_setupFormListener","_doesGlobalListExists","_removeFormListener","_onFormSubmitFunc","_onFormSubmit","_onFormResetFunc","_onFormReset","_hasParentFormCounter","_incrementParentFormCounter","_initializeFormCounterToOne","_storeFormHandlerFunction","_getParentFormCounter","_getFormHandlerFunction","submitFn","resetFn","_removeFormDataSetInfo","_decrementParentFormCounter","anCount","_getFormElement","_doesFormHandlerListExists","_createFormHandlerList","randomString","anFormHandler","aNFormHandlerMap","_hasFormHandlerFunction","_getFormHandlerKey","_setReadOnly","_setReadWrite","_historyTableCurrentValueUsed","arrayTrim","getElementSelection","_historyTableForget","setElementSelection","_historyTableUndoOrRedo","positive","_addCSSClass","_removeCSSClass","negative","ranges","class","userDefined","isFunction","isInt","cloneObject","_isPreDefinedOptionValid","_getOptionObject","_updateEventListeners","_saveValueToPersistentStorage","_toNumericValue","_checkIfInRangeWithOverrideOption","_checkValuesToStrings","isZeroOrHasNoValue","_roundRawValue","_trimLeadingAndTrailingZeros","_getRawValueToFormat","_roundFormattedValueShownOnFocus","_roundFormattedValueShownOnBlur","_modifyNegativeSignAndDecimalCharacterForFormattedValue","_addGroupSeparators","_setValidOrInvalidState","_triggerRangeEvents","_removeValueFromPersistentStorage","_removeBrackets","_stripAllNonNumberCharacters","_isWithinRangeWithOverrideOption","_isUserManuallyEditingTheValue","rawValueModified","oldRawValue","_parseStyleRules","_historyTableAdd","setElementValue","formatted","oldValue","isBoolean","_setElementValue","_setRawValue","_checkValuesToStringsArray","valuesToStringsKeys","triggerEvent","trimPaddedZerosFromDecimalPlaces","_toLocale","isEmptyString","keep","selectNumber","_defaultSelectAll","isNegative","suffix","none","_removeFromLocalList","_formatOrUnformatOther","_cloneAndMergeSettings","_removeWatcher","_removeFromGlobalList","_getFormAutoNumericChildren","_getContenteditableElements","arrayUnique","isManagedByAutoNumeric","hasAttribute","form","_serializeNumericString","_serializeFormatted","_serializeLocalized","_serializeNumericStringArray","_serializeFormattedArray","_serializeLocalizedArray","formArrayNumericString","formArrayFormatted","formArrayLocalized","_getChildANInputElement","formUnformat","submit","formReformat","formNumericString","formFormatted","formUnformatLocalized","formLocalized","formJsonNumericString","formJsonFormatted","formJsonLocalized","_mergeSettings","_updatePredefinedOptions","getPredefinedOptions","French","NorthAmerican","British","Swiss","Japanese","Spanish","Chinese","Brazilian","camelize","isTrailingNegative","isNegativeSignAllowed","doNotSelect","decimalLeft","decimalRight","minRangeExceeded","maxRangeExceeded","setInvalidState","invalidValue","setValidState","correctedValue","invalid","_isMinimumRangeRespected","_isMaximumRangeRespected","_setValidState","_setInvalidState","originalDigitGroupSeparator","originalCurrencySymbol","originalSuffixText","rawValueStorageName","decodeURIComponent","sessionStorage","setItem","getItem","removeItem","altKey","_unformatAltHovered","hoveredWithAlt","_reformatAltHovered","_roundFormattedValueShownOnFocusOrBlur","onlyNumbers","valueOnFocus","lastVal","_isElementValueEmptyOrOnlyTheNegativeSign","_orderValueCurrencySymbolAndSuffixText","_saveCancellableValue","_initialCaretPosition","invalidFormula","formula","validFormula","eventKey","getHoveredElement","_updateEventKeyInfo","keydownEventCounter","initialValueOnFirstKeydown","initialRawValueOnFirstKeydown","_exitFormulaMode","_acceptNonPrintableKeysInFormulaMode","_enterFormulaMode","upDownArrowAction","processed","native","change","_updateInternalProperties","_processNonPrintableKeysAndShortcuts","_processCharacterDeletion","_formatValue","throwInput","formulaChars","_processCharacterInsertion","ctrlKey","shiftKey","_historyTableRedo","_historyTableUndo","metaKey","_setCaretPosition","valuePartsBeforePaste","_saveRawValueForAndroid","_stripAllNonNumberCharactersExceptCustomDecimalChar","_convertToNumericString","_roundValue","_modifyNegativeSignAndDecimalCharacterForRawValue","never","floats","clipboardData","getData","explicitOriginalTarget","_preparePastedText","setRawNegativeSign","convertCharacterCountToIndexPosition","countNumberCharactersOnTheCaretLeftSide","truncate","parseStr","_checkIfInRange","replaceCharAt","ignore","countCharInText","clampToRangeLimits","findCaretPositionInFormattedNumber","addAndRoundToNearestAuto","subtractAndRoundToNearestAuto","_setSelection","_wheelAndUpDownActions","wheelAction","hover","scrollBy","isWheelUpEvent","isWheelDownEvent","isWheelEventWithZeroDeltaY","dataTransfer","unformatOther","_unformatOnSubmit","_getDefaultValue","character","KeyboardEvent","_isElementTagSupported","_isInputElement","_isInputTypeSupported","_isContentEditable","trim","_getValueFromPersistentStorage","mIntPos","mIntNeg","_convertOldOptionsToNewOnes","originalDecimalPlacesRawValue","originalDecimalPlaces","_calculateDecimalPlacesOnUpdate","getDefaultConfig","caretFix","_transformOptionsValuesToDefaultTypes","_runCallbacksFoundInTheSettingsObject","_correctNegativePositiveSignPlacementOption","_correctCaretPositionOnFocusAndSelectOnFocusOptions","_setNegativePositiveSignPermissions","_calculateDecimalPlacesOnInit","_calculateVMinAndVMaxIntegerSizes","_setTrailingNegativeSignInfo","regex","_cachesUsualRegularExpressions","_setBrackets","_calculateValuesToStringsKeys","isEmptyObj","validate","_keepAnOriginalSettingsCopy","selection","_getLeftAndRightPartAroundTheSelection","deny","aNegRegAutoStrip","_normalizeParts","_truncateDecimalPlaces","_getSignPosition","_setValueParts","_checkPaste","_shouldSkipEventKey","_expandSelectionOnSign","_getUnformattedLeftAndRightPartAroundTheSelection","_processCharacterDeletionIfTrailingNegativeSign","_isDecimalCharacterInsertionAllowed","isObject","isNumberOrArabic","mergeOptions","predefinedOptions","getElementsByTagName","_isInGlobalList","WeakMap","autoNumericGlobalListName","_createWeakMap","_createGlobalList","_getFromGlobalList","getSettings","isTrueOrFalseString","doNoForceCaretPosition","comma","dot","normalSpace","thinSpace","narrowNoBreakSpace","noBreakSpace","noSeparator","apostrophe","arabicThousandsSeparator","dotAbove","privateUseTwo","two","twoThree","twoScaled","three","four","middleDot","arabicDecimalSeparator","decimalSeparatorKeySymbol","ceiling","_validateDecimalPlacesRawValue","halfUpSymmetric","halfUpAsymmetric","halfDownSymmetric","halfDownAsymmetric","halfEvenBankersRounding","upRoundAwayFromZero","downRoundTowardZero","toCeilingTowardPositiveInfinity","toFloorTowardNegativeInfinity","toNearest05","toNearest05Alt","upToNext05","downToNext05","parentheses","brackets","chevrons","curlyBraces","angleBrackets","japaneseQuotationMarks","halfBrackets","whiteSquareBrackets","quotationMarks","guillemets","allow","string","negativeDot","negativeComma","dotNegative","commaNegative","plus","_generateOptionsObjectFromOptionsArray","isPositiveSignAllowed","_checkValuesToStringsSettings","isNumberStrict","_checkStringsToValuesSettings","objectKeyLookup","firstBracket","lastBracket","_get","_normalizeCurrencySuffixAndNegativeSignCharacters","allowedAutoStrip","numRegAutoStrip","stripReg","_addBrackets","_mergeCurrencySignNegativePositiveSignAndValue","hyphen","isNegativeWithBrackets","_toggleNegativeBracket","_roundCloseTo05","_prepareValueForRounding","_truncateZeros","_shouldRoundUp","ceil","testMinMax","_cleanValueForRangeParse","useDefault","aSep","nSep","dGroup","aDec","altDec","aSign","pSign","pNeg","aSuffix","oLimits","vMax","vMin","mDec","eDec","scaleDecimal","aStor","mRound","aPad","nBracket","wEmpty","lZero","aForm","sNumber","anDefault","unSetOnSubmit","outputType","debug","encodeURIComponent","checked","_serialize","multiple","rootElement","exclude","filterOut","alwaysAllow","doNotAllow","createList","doNotCreateList","austral","australCentavo","baht","cedi","cent","colon","cruzeiro","dollar","dong","drachma","dram","european","euro","florin","franc","guarani","hryvnia","kip","att","lepton","lira","liraOld","lari","mark","mill","naira","peseta","peso","pfennig","real","riel","ruble","rupee","rupeeOld","shekel","shekelAlt","taka","tenge","togrog","won","yen","one","five","six","doNotOverride","percentage","permille","basisPoint","doesNotBubble","isCancelable","isNotCancelable","fail","doNotFormat","verySmall","small","large","veryLarge","insane","MAX_SAFE_INTEGER","cancellable","notCancellable","tenTrillions","oneBillion","modifyValue","doNothing","minus","heavyMinus","fullWidthHyphen","circledMinus","squaredMinus","triangleMinus","plusMinus","minusPlus","dotMinus","minusTilde","not","doNotToggle","fullWidthPlus","heavyPlus","doublePlus","triplePlus","circledPlus","squaredPlus","trianglePlus","dotPlus","altHebrewPlus","readWrite","save","doNotSave","selectNumbersOnly","selectAll","showAll","positiveNegative","range0To100With4Steps","evenOdd","rangeSmallAndZero","doNotUnformat","keepCurrentValue","progressive","zeroDash","oneAroundZero","watch","doNotWatch","getOwnPropertyNames","ee","te","ae","re","oe","se","le","euroPos","euroNeg","euroSpace","euroSpacePos","euroSpaceNeg","percentageEU2dec","percentageEU2decPos","percentageEU2decNeg","percentageEU3dec","percentageEU3decPos","percentageEU3decNeg","dollarPos","dollarNeg","dollarNegBrackets","percentageUS2dec","percentageUS2decPos","percentageUS2decNeg","percentageUS3dec","percentageUS3decPos","percentageUS3decNeg","Turkish","dotDecimalCharCommaSeparator","commaDecimalCharDotSeparator","integerPos","integerNeg","float","floatPos","floatNeg","numericPos","numericNeg","sort_key","preserve_nan","error_on_nan","preserve_infinite","error_on_infinite","mem","memory_1","makeInMemoryMemory","addValue","memToValues","debug_1","encode_1","number_1","decodeKey","throwUnknownDataType","vs","s_to_num","xs","decodeStr","num","num_to_s","s_to_int","trimUndefinedRecursivelyLoop","tracks","core_1","compress","decompress","core_2","helpers_1","trimUndefined","trimUndefinedRecursively","config_1","toArray","makeInMemoryStore","makeInMemoryCache","keyCount","getValueKey","key_id","schema","hasSchema","getSchema","setSchema","encodeBool","throwUnsupportedData","POSITIVE_INFINITY","NEGATIVE_INFINITY","encodeNum","encodeStr","cb","valueMem","schemaMem","getValue","forEachValue","forEachSchema","hasValue","int_to_s","a1","a2","int_str_to_s","s_to_int_str","neg","i_to_s","s_to_i","int","int_str","BigInt","addLeadingZeros","targetLength","defaultOptions","getDefaultOptions","setDefaultOptions","newOptions","signedYear","getUTCFullYear","getUTCMonth","getUTCDate","dayPeriodEnumValue","getUTCHours","getUTCMinutes","getUTCSeconds","numberOfDigits","milliseconds","getUTCMilliseconds","fractionalSeconds","dateLongFormatter","formatLong","timeLongFormatter","dateTimeFormat","matchResult","datePattern","timePattern","getTimezoneOffsetInMilliseconds","utcDate","UTC","getSeconds","getMilliseconds","setUTCFullYear","getUTCISOWeek","dirtyDate","requiredArgs","toDate","diff","startOfUTCISOWeek","getUTCISOWeekYear","fourthOfJanuary","setUTCHours","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","getUTCWeek","startOfUTCWeek","_ref2","_ref3","_options$firstWeekCon","_options$locale","_options$locale$optio","_defaultOptions$local","_defaultOptions$local2","firstWeekContainsDate","toInteger","getUTCWeekYear","firstWeek","firstWeekOfNextYear","firstWeekOfThisYear","ef","lJ","xM","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","required","getUTCDay","setUTCDate","_options$weekStartsOn","weekStartsOn","dirtyNumber","addDays","dirtyAmount","amount","setDate","addMilliseconds","timestamp","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","setFullYear","addWeeks","differenceInMilliseconds","dateLeft","dateRight","endOfDay","endOfISOWeek","endOfWeek","endOfMonth","ordinalNumber","lightFormatters","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","quarter","week","isoWeek","dayOfYear","setUTCMonth","difference","dayOfWeek","localDayOfWeek","isoDayOfWeek","_localize","timezoneOffset","_originalDate","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","originalDate","dirtyDelimiter","absOffset","delimiter","format_formatters","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","_ref4","_options$locale2","_options$locale2$opti","_ref5","_ref6","_ref7","_options$locale3","_options$locale3$opti","_defaultOptions$local3","_defaultOptions$local4","formatStr","isValid","subMilliseconds","formatterOptions","firstCharacter","longFormatters","matched","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","getISODay","addBusinessDays","addHours","addISOWeekYears","addMinutes","addQuarters","addSeconds","addYears","areIntervalsOverlapping","closestIndexTo","closestTo","compareAsc","compareDesc","daysInWeek","daysInYear","daysToWeeks","differenceInBusinessDays","differenceInCalendarDays","differenceInCalendarISOWeekYears","differenceInCalendarISOWeeks","differenceInCalendarMonths","differenceInCalendarQuarters","differenceInCalendarWeeks","differenceInCalendarYears","differenceInDays","me","differenceInHours","differenceInISOWeekYears","pe","differenceInMinutes","differenceInMonths","differenceInQuarters","differenceInSeconds","differenceInWeeks","differenceInYears","eachDayOfInterval","eachHourOfInterval","eachMinuteOfInterval","eachMonthOfInterval","eachQuarterOfInterval","eachWeekOfInterval","eachWeekendOfInterval","Le","eachWeekendOfMonth","eachWeekendOfYear","Ve","eachYearOfInterval","endOfDecade","Ue","endOfHour","Ge","endOfISOWeekYear","endOfMinute","Ye","endOfQuarter","endOfSecond","endOfToday","Je","endOfTomorrow","endOfYear","We","endOfYesterday","tt","lt","formatDistanceStrict","formatDistanceToNow","formatDistanceToNowStrict","formatDuration","formatISO","gt","formatISO9075","vt","formatISODuration","yt","formatRFC3339","bt","formatRFC7231","_t","formatRelative","xt","fromUnixTime","Ct","At","Mt","getDayOfYear","Et","getDaysInMonth","Tt","getDaysInYear","Dt","getDecade","Ot","Nt","zt","It","getISOWeek","jt","getISOWeekYear","getISOWeeksInYear","Rt","Lt","Ft","Ht","getOverlappingDaysInIntervals","Wt","getQuarter","Bt","Vt","getUnixTime","getWeek","qt","getWeekOfMonth","Kt","getWeekYear","Ut","getWeeksInMonth","Xt","getYear","Zt","hoursToMilliseconds","Jt","hoursToMinutes","Qt","hoursToSeconds","intervalToDuration","tn","intlFormat","nn","intlFormatDistance","an","isAfter","rn","isBefore","isDate","sn","isEqual","ln","isExists","un","isFirstDayOfMonth","cn","isFriday","dn","isFuture","hn","isLastDayOfMonth","isLeapYear","Pt","isMatch","isMonday","ra","isPast","oa","isSameDay","isSameHour","la","isSameISOWeek","isSameISOWeekYear","isSameMinute","ha","isSameMonth","fa","isSameQuarter","ma","isSameSecond","ga","isSameWeek","ua","isSameYear","va","isSaturday","isSunday","isThisHour","ya","isThisISOWeek","ba","isThisMinute","wa","isThisMonth","ka","isThisQuarter","isThisSecond","Sa","isThisWeek","xa","isThisYear","Ca","isThursday","Aa","isToday","Ma","isTomorrow","Ea","isTuesday","Ta","isWednesday","Pa","isWithinInterval","Da","isYesterday","Na","lastDayOfDecade","za","lastDayOfISOWeek","ja","lastDayOfISOWeekYear","Ra","lastDayOfMonth","Yt","lastDayOfQuarter","La","lastDayOfWeek","Ia","lastDayOfYear","Fa","lightFormat","Ua","maxTime","Ga","millisecondsInHour","millisecondsInMinute","millisecondsInSecond","millisecondsToHours","qa","millisecondsToMinutes","Ka","millisecondsToSeconds","Ya","minTime","minutesInHour","minutesToHours","Xa","minutesToMilliseconds","Za","minutesToSeconds","Ja","monthsInQuarter","monthsInYear","monthsToQuarters","Qa","monthsToYears","er","nextDay","nextFriday","nr","nextMonday","ir","nextSaturday","nextSunday","rr","nextThursday","nextTuesday","nextWednesday","lr","ia","parseISO","parseJSON","yr","previousDay","br","previousFriday","wr","previousMonday","kr","previousSaturday","_r","previousSunday","Sr","previousThursday","xr","previousTuesday","Cr","previousWednesday","Ar","quartersInYear","quartersToMonths","Mr","quartersToYears","Er","roundToNearestMinutes","Tr","secondsInDay","secondsInHour","secondsInMinute","secondsInMonth","secondsInQuarter","secondsInWeek","secondsInYear","secondsToHours","Pr","secondsToMilliseconds","Dr","secondsToMinutes","Or","zr","Ir","setDay","jr","setDayOfYear","Rr","Lr","Fr","setISODay","Hr","setISOWeek","Wr","setISOWeekYear","setMilliseconds","Br","Vr","Nr","setQuarter","$r","setSeconds","Ur","setWeek","Gr","setWeekYear","qr","setYear","Kr","startOfDay","startOfDecade","Yr","startOfHour","sa","startOfISOWeek","startOfISOWeekYear","startOfMinute","startOfMonth","startOfQuarter","startOfSecond","pa","startOfToday","Xr","startOfTomorrow","Zr","startOfWeek","ce","startOfWeekYear","Gt","startOfYear","Be","startOfYesterday","Jr","sub","eo","subBusinessDays","subDays","Oa","subHours","subISOWeekYears","be","St","subMinutes","subMonths","Qr","subQuarters","ao","subSeconds","ro","subWeeks","oo","subYears","so","weeksToDays","lo","yearsToMonths","uo","yearsToQuarters","co","_typeof","weeks","dateWithMonths","dateWithDays","msToAdd","startedOnWeekend","fullWeeks","restDays","dirtyDateLeft","dirtyDateRight","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","dirtyISOWeekYear","intervalLeft","intervalRight","leftStartTime","leftEndTime","rightStartTime","rightEndTime","inclusive","dirtyDatesArray","datesArray","currentDate","dirtyDateToCompare","dateToCompare","minDistance","timeToCompare","calendarDifference","startOfISOWeekLeft","startOfISOWeekRight","startOfWeekLeft","startOfWeekRight","compareLocalAsc","roundingMap","trunc","getRoundingMethod","isLastMonthNotFull","isLastYearNotFull","dirtyInterval","_options$step","interval","endTime","dates","step","endDate","startTime","currentMonth","startDateQuarter","quarters","currentQuarter","startDateWeek","endDateWeek","currentWeek","dateInterval","cleanDate","at","property","MINUTES_IN_MONTH","dirtyBaseDate","comparison","localizeOptions","addSuffix","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","MINUTES_IN_YEAR","MINUTES_IN_DAY","_options$roundingMeth","roundingMethodFn","dstNormalizedMinutes","defaultUnit","roundedMinutes","distanceInWords","defaultFormat","_options$format","_options$zero","_options$delimiter","_options$representati","representation","tzOffset","dateDelimiter","timeDelimiter","absoluteOffset","hourOffset","minuteOffset","separator","_duration$years","_duration$months","_duration$days","_duration$hours","_duration$minutes","_duration$seconds","_options$fractionDigi","fractionDigits","fractionalSecond","dayName","monthName","baseDate","utcBaseDate","dirtyUnixTime","unixTime","monthIndex","getInternalDefaultOptions","thisYear","valueOf","dirtyIntervalLeft","dirtyIntervalRight","differenceInMs","currentDayOfMonth","lastDayOfFirstWeek","remainingDaysAfterFirstWeek","remainingMonths","remainingDays","remainingHours","remainingMinutes","remainingSeconds","formatOrLocale","localeOptions","_localeOptions","formatOptions","diffInSeconds","dirtyLeftDate","dirtyRightDate","_arrayLikeToArray","_createForOfIteratorHelper","arrayLikeToArray","_n","pn","_assertThisInitialized","ReferenceError","_setPrototypeOf","setPrototypeOf","_inherits","_getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","_createSuper","isNativeReflectConstruct","assertThisInitialized","_classCallCheck","toPropertyKey","_defineProperties","_createClass","_defineProperty","Setter","_utcDate","_options","ValueSetter","_Setter","validateValue","priority","subPriority","flags","DateToSystemTimezoneSetter","_Setter2","_super2","_this2","_len","_key","timestampIsSet","convertedDate","dateString","setter","rest","EraParser","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","isLeapYearIndex","YearParser","valueCallback","isTwoDigitYear","_date","normalizedTwoDigitYear","LocalWeekYearParser","ISOWeekYearParser","_flags","firstWeekOfYear","ExtendedYearParser","QuarterParser","StandAloneQuarterParser","MonthParser","StandAloneMonthParser","LocalWeekParser","dirtyWeek","ISOWeekParser","dirtyISOWeek","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","DateParser","DayOfYearParser","setUTCDay","dirtyDay","DayParser","LocalDayParser","wholeWeekDays","StandAloneLocalDayParser","ISODayParser","AMPMParser","AMPMMidnightParser","DayPeriodParser","Hour1to12Parser","isPM","Hour0to23Parser","Hour0To11Parser","Hour1To24Parser","MinuteParser","setUTCMinutes","SecondParser","setUTCSeconds","FractionOfSecondParser","setUTCMilliseconds","ISOTimezoneWithZParser","ISOTimezoneParser","TimestampSecondsParser","TimestampMillisecondsParser","parsers","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","formatString","_step","subFnOptions","setters","usedTokens","_iterator","_loop","parser","incompatibleTokens","incompatibleToken","usedToken","fullToken","parseResult","run","_ret","uniquePrioritySetters","array","setterArray","_step2","_iterator2","dateLeftStartOfHour","dateRightStartOfHour","dateLeftStartOfWeek","dateRightStartOfWeek","dateLeftStartOfYear","dateRightStartOfYear","dateLeftStartOfMinute","dateRightStartOfMinute","dateLeftStartOfQuarter","dateRightStartOfQuarter","dateLeftStartOfSecond","dateRightStartOfSecond","Ha","totalDays","totalSeconds","delta","_options$additionalDi","additionalDigits","dateStrings","timeString","patterns","dateTimeDelimiter","timeZoneDelimiter","timezone","parseYearResult","captures","restDateString","century","dateRegex","isWeekDate","parseDateUnit","_year","daysInMonths","timeRegex","parseTimeUnit","timezoneString","timezoneRegex","_options$nearestTo","nearestTo","remainderMinutes","addedMinutes","dirtyMonth","dateWithDesiredMonth","daysInMonth","dirtyDayOfMonth","currentDay","dirtyDayOfYear","_property","setInternalDefaultOptions","dirtyHours","dirtyMilliseconds","dirtyMinutes","dirtyQuarter","dirtySeconds","dirtyWeekYear","dirtyYear","dateWithoutDays","mstoSub","dateLeftStartOfDay","dateRightStartOfDay","buildFormatLongFn","defaultWidth","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","predicate","buildMatchPatternFn","parsePattern","formatDistanceLocale","lessThanXSeconds","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","count","tokenValue","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","_baseDate","rem100","narrow","abbreviated","wide","am","pm","midnight","noon","morning","afternoon","evening","night","any","_lib_formatLong","en_US","af","arDZ","arEG","arMA","arSA","arTN","beTarask","bg","fe","bn","cs","cy","deAT","enAU","enCA","enGB","enIE","enIN","enNZ","wt","enUS","kt","enZA","eu","faIR","fi","frCA","vn","frCH","wn","fy","xn","gd","En","gl","Nn","gu","Rn","Vn","Xn","ei","ai","hu","hy","gi","wi","is","xi","zi","itCH","Ii","Fi","jaHira","Vi","qi","kk","ta","km","kn","ko","lb","mk","dr","nlBE","pr","oc","ptBR","sl","mo","yo","_o","srLatn","Ao","Do","Io","Fo","th","Vo","qo","ug","Zo","rs","us","uzCyrl","fs","vi","zhCN","_s","zhHK","As","zhTW","Ps","_lib_localize","threeToTen","usageGroup","ar_DZ","ar_EG","ar_MA","ar_SA","ar_TN","suffixes","declension","scheme","rem10","singularNominative","singularGenitive","pluralGenitive","buildLocalizeTokenFn","future","regular","past","be_lib_formatLong","isSameUTCWeek","accusativeWeekdays","thisWeek","be_tarask","weekdays","numberWithSuffix","masculine","feminine","neuter","numberValues","numberToLocale","enNumber","bn_lib_localize","localeNumber","standalone","withPrepositionAgo","withPrepositionIn","dual","eleven","formatRelativeLocalePlural","few","many","pluralResult","suffixExist","withPreposition","de_lib_formatDistance","de_lib_formatLong","de_lib_formatRelative","monthValues","formattingMonthValues","de_lib_localize","de_lib_match","de_AT","ot","en_AU_lib_formatLong","ut","en_AU","en_CA","en_GB_lib_formatLong","en_GB","en_IE","en_IN_lib_formatLong","en_IN","en_NZ_lib_formatLong","en_NZ","en_ZA_lib_formatLong","en_ZA","dayValues","fa_IR","futureSeconds","futureMinutes","futureHours","futureWeeks","futureMonths","futureYears","futureTense","_text","formattingDayValues","fr_lib_formatDistance","fr_lib_formatLong","fr_lib_formatRelative","fr_lib_localize","fr_lib_match","fr_CA","fr_CH","yn","twenty","An","Pn","In","he_lib_formatLong","ordinalName","Wn","hi_lib_localize","hi_lib_formatLong","Jn","ni","translations","about","over","almost","lessthan","withoutSuffixes","xseconds","halfaminute","xminutes","xhours","xdays","xweeks","xmonths","xyears","withSuffixes","hu_lib_formatLong","adverb","translated","adv","mi","it_lib_formatDistance","it_lib_formatLong","it_lib_formatRelative","it_lib_localize","it_lib_match","it_CH","oneWithSuffix","otherWithSuffix","Ri","ja_Hira","Wi","present","Ui","Xi","getResultByTense","parentToken","EXCEPTION_CONSONANTS","VOWELS","DIGITS_SPOKEN_N_NEEDED","FIRST_TWO_DIGITS_SPOKEN_NO_N_NEEDED","isFinalNNeeded","nextWords","firstLetter","firstWord","xseconds_other","xminutes_one","xminutes_other","xhours_one","xhours_other","xdays_one","xdays_other","xweeks_one","xweeks_other","xmonths_one","xmonths_other","xyears_one","xyears_other","translateSeconds","_number","translateSingular","forms","special","_key2","rem","_count","Wa","words","lastword","pop","nl_BE","wordMapping","onlyNumeric","ordinal","twoFour","group","adjectivesLastWeek","adjectivesThisWeek","adjectivesNextWeek","dayGrammaticalGender","dayAndTimeWithAdjective","adjectives","adjective","pt_BR","prefixPreposition","preposition","translation","suffixPreposition","tense","ho","go","wo","sr_Latn","xo","To","in","ago","No","Ro","Wo","Uo","Yo","ts","ss","uz_Cyrl","ds","checkWeek","baseFormat","zh_CN","zh_HK","zh_TW","Es","argStr","lookupClass","cached","rm","emitter","crossvent","touchy","op","pointerEnabled","mouseup","mousedown","mousemove","msPointerEnabled","whichMouseButton","touches","button","getScroll","scrollProp","offsetProp","getElementBehindPoint","point","elementFromPoint","getRectWidth","getRectHeight","getParent","isInput","isEditable","contentEditable","nextEl","nextElementSibling","sibling","getCoord","targetTouches","changedTouches","missMap","pageX","pageY","initialContainers","_mirror","_source","_item","_offsetX","_offsetY","_moveX","_moveY","_initialSibling","_currentSibling","_copy","_renderTimer","_grabbed","_lastDropTarget","moves","accepts","containers","isContainer","copy","copySortSource","revertOnSpill","removeOnSpill","ignoreInputTextSelection","mirrorContainer","drake","item","canStart","cancel","release","canMove","grab","eventualMovements","startBecauseMouseMoved","movements","preventGrabbed","clientX","clientY","slideFactorX","slideFactorY","grabbed","cloneNode","drag","emit","handle","drop","ungrab","dropTarget","findDropTarget","isInitialPlacement","revert","reverts","initial","elementBehindCursor","accepted","immediate","getImmediateChild","getReference","changed","moved","horizontal","self","ticky","ctx","atoa","debounce","thing","_once","emitterSnapshot","throws","listen","customEvent","eventmap","addEvent","capturing","removeEvent","hardCache","unwrap","attachEvent","originalEvent","returnValue","cancelBubble","listener","detachEvent","fabricate","model","initEvent","createEventObject","fireEvent","eventname","ron","NativeCustomEvent","foo","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","Item","noop","nextTick","title","browser","env","argv","versions","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","tick","setImmediate","Function","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","timers","Tz","W5","mZ","mf","tP","vd","getOrCreate","_getOrCreate","frameState","nextFrame","nextFrameWaiters","currentFrameClock","cancellation","registerCancellation","promise","handler","fireCancellation","rAF","rAFDidFire","removeWaiter","clock","waiters","waiter","pair","microwait","afterRender","ticket","schedule","allSettled","promises","getViewBounds","Ember","componentNodes","firstNode","lastNode","keyForArray","keyPath","identity","guidFor","_W","task","taskFn","tp","cp","proto","setup","computed","propertyName","Task","TaskProperty","BaseTaskProperty","handlerCounter","super","restartable","_bufferPolicy","cancelAllButLast","observes","deps","_observes","taskName","handlerName","scheduleOnce","addObserver","priv","getPriv","implementation","taskProperty","instances","perform","privSelf","policy","owner","willDestroy","__ember_processes_destroyers__","oldWillDestroy","disposers","disposer","cancelAll","spawn","DEBUG","logErrors","_addInstance","maybeWait","generator","threw","nextValue","fulfilled","throw","_removeInstance","concurrency","_safePerform","_task","privTask","bridges","continueMotions","oldElement","newElement","continuedFromElement","partition","truthy","falsy","cH","genFn","MicroRoutine","spawnChild","microRoutinePromise","microRoutine","microRoutines","ensureCurrent","errorLogger","cur","getCurrent","childrenSettled","linked","child","isTaskCancelationError","withCurrent","onStack","routines","prior","routine","unshift","microroutine","restore","label","loggedErrors","WeakSet","linkToParent","res","rej","wake","stopped","reason","for","getOwnPropertySymbols","emberAnimatedSingleton","Transform","tx","ty","isIdentity","mult","matrixPattern","cumulativeTransform","elt","accumulator","ownTransform","eltStyles","matrix","matrixString","origin","originX","originY","collapsedChildren","isBlock","block","childCS","nonEnumerable","propertyKey","DOMRectPolyfill","_class","fromRect","DOMRect","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","toJSON","_applyDecoratedDescriptor","initializer","shiftedBounds","dx","dy","resizedBounds","relativeBounds","emptyBounds","inFlight","Sprite","offsetParentStartingAt","getEffectiveOffsetParent","offsetParentEndingAt","positionedStartingAt","offsetSprite","initialBounds","positionedEndingAt","finalBounds","sizedStartingAt","sizedEndingAt","sprite","_initialBounds","_initialComputedStyle","_finalComputedStyle","_initialPosition","_finalPosition","_originalInitialBounds","_initialCumulativeTransform","_finalCumulativeTransform","inInitialPosition","lockMode","_offsetSprite","_lockedToInitialPosition","measureInitialBounds","measureFinalBounds","predecessor","_styleCache","_revealed","_imposedStyle","_collapsingChildren","_lockMode","_rememberPosition","_cacheOriginalStyles","_rememberSize","seal","absoluteInitialBounds","_finalBounds","absoluteFinalBounds","initialComputedStyle","finalComputedStyle","getInitialDimension","getFinalDimension","initialCumulativeTransform","finalCumulativeTransform","originalInitialBounds","originalFinalBounds","_originalFinalBounds","getCurrentBounds","_getCurrentPosition","isSVG","getSVGLength","cx","_reapplyPosition","setSVGLength","attrName","cls","_inInitialPosition","copyComputedStyle","assertHasInitialBounds","assertHasOwner","assertHasFinalBounds","otherSprite","otherWhich","__element","_transform","_cumulativeTransform","revealed","_lazyOffsets","effectiveOffsetParent","ownBounds","eopComputedStyle","eopBounds","borderLeftWidth","borderTopWidth","eopTransform","lock","applyStyles","_handleMarginCollapse","unlock","stillInFlight","setStyle","_clearMarginCollapse","reveal","scaleX","scaleY","rehome","newOffsetSprite","newRelativeBounds","initialAmbientTransform","finalAmbientTransform","startAtSprite","startTranslatedBy","startAtPixel","priorInitialBounds","offsetX","offsetY","moveToFinalPosition","final","endAtSprite","endTranslatedBy","endAtPixel","endRelativeTo","SVGNamespace","namespaceURI","cursor","baseVal","setProperty","CopiedCSS","COPIED_CSS_PROPERTIES","spriteContext","runToCompletion","transition","TransitionContext","forSprite","_duration","_insertedSprites","_keptSprites","_removedSprites","_sentSprites","_receivedSprites","_beacons","onMotionStart","onMotionEnd","insertedSprites","_prepareSprites","keptSprites","removedSprites","sentSprites","receivedSprites","beacons","sprites","prepareSprite","_prepared","TEMPLATE","createTemplateFactory","moduleName","isStrictMode","AnimatedBeacon","_dec","inject","_dec2","motionService","hasBeacon","_firstChildElement","staticMeasurement","addBeacon","Component","didInsertElement","_inserted","animationStarting","observeAnimations","willDestroyElement","unobserveAnimations","participate","setComponentTemplate","motions","Motion","_setupMotionList","_run","interrupted","_otherMotions","animate","others","_motionList","_inheritedMotionList","_clearMotionList","motionList","inheritedMotions","easeInAndOut","cos","PI","currentCurves","Tween","finalValue","easing","curve","MotionCurve","findOrCreate","currentValue","spaceProgress","otherTween","DerivedTween","inputs","combinator","_finalValue","accum","shared","created","_tick","_lastTick","_runTime","_timeProgress","_spaceProgress","_doneFrames","runTime","timeProgress","Resize","widthTween","heightTween","AnimatedContainerComponent","alias","_dec3","animationTask","_startingUp","useMotion","service","_ownElement","onInitialRender","motion","register","observeDescendantAnimations","maybeAnimate","unregister","unobserveDescendantAnimations","beginStaticMeasurement","endStaticMeasurement","useElementHelper","errorMessageOrNoThrow","Child","removalBlockers","removalCycle","cycle","unblock","flagForRemoval","shouldRemove","clone","AnimatedEach","_dec4","_dec5","_dec6","_dec7","firstTime","currentSprites","startAnimation","matchingAnimatorsFinished","runAnimation","finalizeAnimation","_dec8","animateTask","_lastTransition","_findCurrentSprites","willAnimate","durationWithDefault","component","_renderedChildren","_dec9","_partitionKeptAndRemovedSprites","_ownElements","_elementToChild","farMatches","unmatchedRemovedSprites","unmatchedInsertedSprites","matchedKeptSprites","unmatchedKeptSprites","initialInsertion","_renderedChildrenStartedMoving","_motionStarted","_motionEnded","_cycleCounter","_dec10","notifyPropertyChange","_class2","_descriptor5","_descriptor6","maybeReanimate","observeAncestorAnimations","ancestorIsAnimating","_installObservers","_invalidateRenderedChildren","_deps","dep","_identitySignature","items","getKey","signature","renderedChildren","_firstTime","keyGetter","oldChildren","oldItems","_prevItems","oldSignature","_prevSignature","newItems","newSignature","oldIndices","newIndices","newChildren","listIndex","FastBoot","before","after","_transitionFor","isRunning","ourState","_ancestorWillDestroyUs","_letSpritesEscape","matchDestroyed","finalRemoval","unobserveAncestorAnimations","assertNever","rules","use","AnimatedIfComponent","realGroup","AnimatedOrphans","ownSprite","activeSprites","activeIds","_newOrphanTransitions","_groupActiveSprites","_onMotionStart","_onMotionEnd","shouldAnimateRemoved","_sprite","_childToTransition","_onFirstMotionStart","_prepareSprite","classNames","observeOrphans","animateOrphans","reanimate","unobserveOrphans","_findActiveSprites","AnimatedValueComponent","EaListElement","didRender","mapping","elementToChild","_forEachElement","CharacterData","DocumentType","klass","MotionService","isAnimatingSync","beacon","runAnimationTask","inserted","kept","removed","longWait","mine","otherTasks","_rendezvous","farMatch","performMatches","Service","animator","_animators","pushObject","_orphanObserver","_animationObservers","_descendantObservers","ancestorComponent","ancestorsOf","observers","_ancestorObservers","isAnimating","observingComponent","measurement","resolved","_measurements","animators","sink","mySprite","pointer","parentView","assign$1","buildHelper","scrollLineHeight","getScrollDeltas","deltaX","deltaMode","iframe","border","iframeDocument","contentWindow","write","firstElementChild","getScrollLineHeight","calculateScrollDistribution","scrollInformation","scrollLeftMax","scrollTopMax","availableScroll","elementStyle","distributeScroll","scrollInfos","info","BasicDropdownContent","transitioningInClass","transitionedInClass","transitioningOutClass","isTouchDevice","dropdown","uniqueId","_classPrivateFieldInitSpec","_contentWormhole","_animationClass","dropdownContentWormhole","dropdownElement","actions","registerDropdownElement","triggerElement","getTriggerElement","handleRootMouseDown","composedPath","hasMoved","touchMoveEvent","dropdownIsValidParent","dropdownId","rootEventType","getRootNode","runloopAwareReposition","touchStartHandler","scrollableAncestors","nextScrollable","getScrollParent","nextParent","addScrollHandling","removeGlobalEvents","removeScrollHandling","eager","reposition","animationEnabled","waitForAnimations","animationClass","destinationElement","renderInPlace","mutationObserver","MutationObserver","mutations","shouldReposition","record","containsRelevantMutation","addedNodes","removedNodes","childList","subtree","destination","getElementById","animationEnabledArg","positionStyles","touchMoveHandler","runTask","preventScroll","wheelHandler","deltaXNegative","deltaXPositive","deltaYNegative","deltaYPositive","defaultPrevented","capture","passive","addScrollEvents","removeScrollEvents","nodeList","closestContent","animationName","animationPlayState","eventCallback","closestDropdown","parentDropdown","parentAttrs","_BasicDropdownContent","tracked","BasicDropdownTrigger","disableDocumentTextSelect","_BasicDropdownTrigger","BasicDropdownWormholeComponent","getDestinationId","getOwner","resolveRegistration","UNINITIALIZED","IGNORED_STYLES","_hPosition","_vPosition","_top","_left","_right","_height","_otherStyles","_renderInPlace","BasicDropdown","horizontalPosition","verticalPosition","_getDestinationId","newVal","_previousDisabled","scheduleTask","publicAPI","isOpen","registerAPI","_uid","_actions","registerTriggerElement","onInit","onOpen","_getTriggerElement","_dropdownId","skipFocus","onClose","hPosition","vPosition","previousVerticalPosition","previousHorizontalPosition","tabIndex","_getDropdownElement","matchTriggerWidth","positionData","calculatePosition","applyReposition","_trigger","positions","changes","otherStyles","prop","environment","APP","_BasicDropdown","initiallyOpened","DropdownTriggerModifier","Modifier","registerDestructor","modify","positional","named","assert","desiredEventType","eventType","didSetup","handleMouseEvent","handleKeyDown","handleTouchStart","handleTouchEnd","_positional","notLeftClick","toggleIsBeingHandledByTouchEvents","_touchMoveHandler","initMouseEvent","_DropdownTriggerModifier","calculateWormholedPosition","triggerLeft","triggerTop","triggerWidth","triggerHeight","dropdownHeight","dropdownWidth","viewportWidth","innerWidth","anchorElement","anchorPosition","isBodyPositionRelative","triggerLeftWithScroll","leftVisible","rightVisible","triggerTopWithScroll","enoughRoomBelow","innerHeight","enoughRoomAbove","calculateInPlacePosition","_destination","dropdownRect","triggerRect","viewportRight","excludeStaticParent","overflowRegex","endEvent","moveEvent","touchType","horizontalDistance","verticalDistance","CanHelper","Helper","_abilities","compute","abilityString","abilities","can","_CanHelper","CannotHelper","cannot","_CannotHelper","EmberObjectAbility","EmberObject","parseProperty","getAbility","abilityValue","Resolver","pluralizedTypes","ability","setupEmberCan","stopWords","AbilitiesService","abilityName","singularize","last","abilityFor","AbilityFactory","factoryFor","possibleAbilityClass","abilityClass","valueFor","deprecationCollector","detectWorkflow","flushDeprecations","handleDeprecationWorkflow","setupDeprecationWorkflow","deprecationWorkflow","deprecationLog","registerDeprecationHandler","matchesWorkflow","matcher","workflow","idMatcher","matchMessage","matchId","existing","collected","mergedConfig","matchingWorkflow","logCounts","throwOnUnhandled","ecnIconClose","templateOnly","ecnIconError","ecnIconInfo","ecnIconSuccess","ecnIconWarning","_notifications","NotificationContainerComponent","positionClass","inlineStyle","htmlSafe","zindex","_NotificationContainerComponent","availableTypes","NotificationMessage","dismissClass","notification","dismiss","clickableClass","validType","isInfo","isSuccess","isWarning","isError","notificationClearDuration","clearDuration","paused","handleOnClick","removeNotification","notifications","handleMouseEnter","autoClear","pauseAutoClear","handleMouseLeave","setupAutoClear","_NotificationMessage","NotificationsService","globals","addNotification","htmlContent","cssClasses","later","timer","remaining","elapsed","clearAll","setDefaultAutoClear","setDefaultClearDuration","EmberEnvironment","Environment","reportUncaughtRejection","defer","globalDebuggingEnabled","DEBUG_TASKS","EMBER_ENVIRONMENT","deferable","DEFAULT_ENVIRONMENT","BoundedPolicy","maxConcurrency","CANCELLED","makeCancelState","DropReducer","remainingSlots","STARTED","DropPolicy","makeReducer","EnqueuedReducer","QUEUED","EnqueuedPolicy","TYPE_CANCELLED","TYPE_STARTED","KeepLatestReducer","numToCancel","KeepLatestPolicy","numRunning","numQueued","totalRunning","RestartableReducer","RestartablePolicy","LAST_APPLIED_TAGS","Refresh","schedulerPolicy","stateTracker","taskInstances","initialTaskInstances","startingInstances","filterFinishedTaskInstances","reducer","finalTaskInstances","taskInstance","setTaskInstanceExecutionState","computeFinalStates","applyState","taskState","stateFor","executorState","executor","isFinished","onCompletion","hasStarted","desiredState","counted","onPerformed","onStart","onRunning","TYPE_QUEUED","onQueued","taskable","onState","guid","numPerformedInc","RefreshState","completionState","lastRunning","lastComplete","COMPLETION_SUCCESS","lastSuccessful","COMPLETION_ERROR","lastErrored","COMPLETION_CANCEL","lastCanceled","lastIncomplete","lastPerformed","recurseTaskGroups","applyStateFrom","CURRENT_REFRESH_TAGS","StateTracker","states","currentTag","computeRecursiveState","forEachState","lastState","taskGroup","NULL_STATE","NullStateTracker","Scheduler","stateTrackingEnabled","cancelRequest","cancelations","guids","cancelation","onFinalize","scheduleRefresh","SchedulerRefresh","Ag","U6","mp","Zm","SINGLETON_REDUCER","UnboundedPolicy","MODIFIER_REGISTRY","enqueue","setBufferPolicy","evented","setEvented","setDebug","groupName","setGroup","keepLatest","setMaxConcurrency","onStateCallback","setOnState","registerModifier","getModifier","hasModifier","taskDefinition","setState","UnboundedSchedulerPolicy","_processModifierOptions","createTask","getTaskOptions","generatorFactory","createTaskGroup","TaskGroup","getOptions","getScheduler","scheduler","_onStateCallback","_taskGroupPath","_schedulerPolicyClass","_maxConcurrency","_debug","hasEnabledEvents","_hasEnabledEvents","enabledModifiers","_enabledModifiers","modifierOptions","_hasSetBufferPolicy","_hasSetConcurrencyConstraint","setName","setTaskDefinition","iw","qs","TASK_CANCELATION_NAME","didCancel","CancelRequest","finalize","Ni","B0","wA","_p","Px","GeneratorStepResult","errored","GeneratorState","resolvedValue","iteratorMethod","getIterator","PERFORM_TYPE_DEFAULT","PERFORM_TYPE_UNLINKED","PERFORM_TYPE_LINKED","CANCEL_RETURN_VALUE_SENTINEL","TASK_INSTANCE_STACK","getRunningInstance","TaskInstanceExecutor","generatorState","INITIAL_STATE","finalizeCallbacks","proceedSync","YIELDABLE_CONTINUE","onStarted","requestCancel","proceedWithCancelAsync","finalizeWithCancel","proceedChecked","yieldResumeType","advanceIndex","YIELDABLE_CANCEL","CANCEL_KIND_YIELDABLE_CANCEL","proceedAsync","YIELDABLE_RETURN","dispose","handleResolvedReturnedValue","handleResolvedContinueValue","resumeValue","beforeIndex","stepResult","generatorStep","handleYieldedValue","YIELDABLE_THROW","handleYieldedUnknownThenable","thenable","resumeIndex","yieldedValue","addDisposer","cancelableSymbol","yieldableSymbol","invokeYieldable","proceedWithSimpleValue","maybeDisposer","_expectsLinkedYield","performType","maybeResolveDefer","runFinalizeCallbacks","maybeThrowUnhandledTaskErrorLater","asyncErrorsHandled","request","isSuccessful","finalizeShared","cancelReason","formatCancelReason","debugEnabled","isCanceled","dispatchFinalizeEvents","onSuccess","onCancel","onYielded","proceed","getPerformType","detectSelfCancelLoop","CANCEL_KIND_PARENT_CANCEL","parentCancelRequest","CANCEL_KIND_LIFESPAN_END","selfCancelLoopWarning","COMPLETION_PENDING","DEFAULT_STATE","performCount","Taskable","TaskLinkProxy","linkedObject","_performShared","_perform","unlinked","_clone","_curry","_curryArgs","fullArgs","_taskInstanceFactory","_isAlive","_taskInstanceOptions","_linkedObject","guidId","cancelRequestKind","resetState","CANCEL_KIND_EXPLICIT","_resetState","isQueued","isIdle","G$","Oc","_d","YieldableState","_taskInstance","_resumeIndex","getTaskInstance","Yieldable","onYield","_deferable","def","_toPromise","thinInstance","_index","resumeType","finally","AnimationFrameYieldable","timerId","RawTimeoutYieldable","forever","rawTimeout","taskHelperClosure","helperName","taskMethod","_args","hash","outerArgs","innerArgs","EmberScheduler","registerOnPrototype","addListenerOrObserver","names","makeTaskCallback","ensureArray","possibleArr","eventNames","addCancelEvents","propertyPaths","addObserverKeys","addPerformEvents","TaskFactory","TaskFactory$1","EncapsulatedTask","taskObj","deprecate","since","until","cancelEventNames","_cancelEventNames","_eventNames","_setupEmberKVO","TaskGroup$1","TRACKED_INITIAL_TASK_STATE","defineProperties","TASKABLE_MIXIN","BaseTaskInstance","parentTaskInstance","isDropped","TaskInstance","_recomputeState","getName","parentName","childName","allArgs","eventNamespace","TRACKED_INITIAL_INSTANCE_STATE","taskFactorySymbol","propertyModifiers","RestartableSchedulerPolicy","EnqueueSchedulerPolicy","DropSchedulerPolicy","KeepLatestSchedulerPolicy","taskGroupPath","TaskGroupProperty","callSuperSetup","cancelOn","setDecorator","taskComputed","Task$1","isDestroying","currentTaskInstanceSymbol","_encapsulatedTaskStates","_encapsulatedTaskInstanceProxies","_getEncapsulatedTaskClass","encapsulatedTaskImplClass","_encapsulatedTaskImplClass","unknownProperty","currentInstance","taskInstanceProxy","encapsulatedTaskImpl","setOwner","_wrappedEncapsulatedTaskInstance","proxy","Proxy","ownKeys","_performCount","derivedState","applyTracked","propDesc","desc","INITIAL_TASK_STATE","INITIAL_INSTANCE_STATE","cancelHelper","helper","maybeReportError","performHelper","ah","dropTask","dropTaskGroup","enqueueTask","enqueueTaskGroup","i4","hashSettled","keepLatestTask","keepLatestTaskGroup","lastValue","race","restartableTask","restartableTaskGroup","waitForEvent","waitForProperty","waitForQueue","EmberYieldable","TimeoutYieldable","taskFromPropertyDescriptor","factoryClass","displayName","tasks","taskGroupPropertyDescriptor","_target","taskGroups","decoratorWithParams","descriptorFn","possibleDesc","createDecorator","baseOptions","createTaskDecorator","createTaskGroupDecorator","lastInstance","lastValue$1","taskFnOrProtoOrDecoratorOptions","isDecoratorOptions","taskDecorator","possibleDecoratorOptions","taskGroupDecorator","possibleOptions","taskAwareVariantOf","RSVP","Promise$1","getValues","castForPromiseHelper","castable","getItems","awaitable","awaitables","arrOrHash","hasCancelled","WaitForQueueYieldable","queueName","WaitForEventYieldable","eventName","usesDOMEvents","WaitForPropertyYieldable","predicateCallback","observerBound","observerFn","removeObserver","DEFAULTS","raw","CookiesService","_fastBoot","lookup","_getDocumentCookies","_document","cookie","_filterDocumentCookies","isEmpty","_getFastBootCookies","cookies","fastBootCookies","fastBootCookiesCache","_fastBootCookiesCache","mergedFastBootCookies","_filterCachedFastBootCookies","read","domain","expires","maxAge","path","_isFastBoot","_decodeValue","signed","_encodeValue","_isCookieSizeAcceptable","_writeFastBootCookie","httpOnly","_normalizedDefaultPath","_writeDocumentCookie","exists","serializedCookie","_serializeCookie","responseHeaders","response","headers","_cacheFastBootCookie","replaced","getAll","append","fastBootCache","cachedOptions","requestPath","optionsPath","isNone","unfilteredCookies","separatorIndex","isPresent","serializeCookie","typeOf","toUTCString","secure","sameSite","partitioned","_byteCount","pathname","isFastBoot","ElementHelper","componentClass","EmberComponent","runInDebug","getDataSupport","DataTransferWrapper","itemDetails","filesOrItems","files","DragListener","_class$1","dropzone","_dropzone","beginListening","dragenter","dragleave","dragover","_handlersAttached","endListening","addEventListeners","handlers","_listeners","removeEventListeners","findListener","getEventSource","types","areSomeTypesFiles","getDataTransferItemDetails","lastListener","_stack","scheduleEvent","isDuplicate","_events","queuedEvent","cancelledEvent","_scheduled","sendEvents","DragListenerModifier","FileDropzoneComponent","fileQueue","DEFAULT_QUEUE","dataTransferWrapper","isAllowed","allowUploadsFromWebsites","didEnterDropzone","dropEffect","onDragEnter","didLeaveDropzone","onDragLeave","didDragOver","didDrop","addedFiles","addFiles","onDrop","file","File","uploadFile","UploadFile","FileSource","DragAndDrop","_name$1","_size","_classPrivateFieldSet","_classPrivateFieldGet","rate","estimatedRate","rates","uploadBinary","contentType","upload","uploadStarted","FormData","fileKey","readAsArrayBuffer","UploadFileReader","readAsDataURL","readAsBinaryString","readAsText","fromBlob","blob","Blob","fromDataURL","dataURL","DataUrl","typeInfo","base64String","mimeType","binaryString","atob","binaryData","Uint8Array","FileState","Queued","Queue","_name","_distinctFiles","Uploading","progress","TrackedSet","onFilesSelected","changeHandler","fileList","selectedFiles","Browse","onFileAdded","onFileRemoved","onUploadStarted","uploadSucceeded","onUploadSucceeded","uploadFailed","onUploadFailed","flush","Uploaded","Aborted","_queues","FileQueueService","TrackedMap","queues","FileQueueHelper","uploadHandler","network","parseResponse","Response","headerString","getAllResponseHeaders","Headers","HTTPRequest","aborted","withCredentials","newPromise","onloadstart","onloadend","_async","usename","password","setRequestHeader","TimedOut","Failed","Web","updateRate","updatedTime","timestampWhenProgressLastUpdated","timeElapsedSinceLastUpdate","bytesWhenProgressLastUpdated","uploadFn","lengthComputable","total","isUploadComplete","waitForPromise","reader","FileReader","cancellablePromise","THRESHOLDS","proportion","allRates","CALCULATE_FROM_LAST","weights","totalRates","proportions","proportionTotal","candidateSelectors","candidateSelector","NoElement","msMatchesSelector","webkitMatchesSelector","_element$getRootNode","_isInert","lookUp","_node$getAttribute","inertAtt","getCandidates","includeContainer","isInert","candidates","_getCandidatesIteratively","elementsToCheck","assigned","assignedElements","nestedCandidates","flatten","scopeParent","shadowRoot","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","hasTabIndex","getTabIndex","_node$getAttribute2","attValue","sortOrderedTabbables","documentOrder","isZeroArea","_node$getBoundingClie","isNodeMatchingSelectorFocusable","displayCheck","checkVisibility","checkOpacity","opacityProperty","contentVisibilityAuto","visibilityProperty","checkVisibilityCSS","nodeUnderDetails","originalNode","rootNode","_nodeRoot","_nodeRootHost","_nodeRootHost$ownerDo","nodeRoot","nodeRootHost","attached","_nodeRoot2","_nodeRootHost2","_nodeRootHost2$ownerD","isNodeMatchingSelectorTabbable","radioSet","radioScope","queryRadios","escape","nodes","isShadowRootTabbable","shadowHostNode","_sortByOrder","regularTabbables","orderedTabbables","isScope","candidateTabindex","sortable","isTabbable","focusableCandidateSelector","isFocusable","getOwnPropertyDescriptors","activeFocusTraps","getActiveTrap","trapStack","activateTrap","trap","pauseTrap","trapIndex","deactivateTrap","unpauseTrap","activeTrap","_setPausedState","_isManuallyPaused","isTabEvent","isKeyForward","isKeyBackward","delay","valueOrHandler","getActualTarget","internalTrapStack","createFocusTrap","_objectSpread2","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","isolateSubtrees","containerGroups","tabbableGroups","adjacentElements","alreadySilent","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","manuallyPaused","delayInitialFocusTimer","recentNavEvent","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","findIndex","tabbableNodes","getNodeForOption","_ref2$hasFallback","hasFallback","_ref2$params","optionValue","getInitialFocusNode","tabbableOptions","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","getCandidatesIteratively","sortByOrder","focusableNodes","lastTabbableNode","firstDomTabbableNode","lastDomTabbableNode","posTabIndexesFound","nextTabbableNode","forward","nodeIdx","_getActiveElement","getActiveElement","_tryFocus","tryFocus","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref3$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_destinationGroupIndex","_destinationGroup","checkPointerDown","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","checkFocusIn","targetContained","Document","nextNode","stopImmediatePropagation","navAcrossContainers","mruContainerIdx","mruTabIdx","checkTabKey","checkEscapeKey","checkClick","addListeners","removeListeners","mutation","updateObservedNodes","activate","activateOptions","_preexistingTrap$_set","onActivate","onPostActivate","checkCanFocusTrap","preexistingTrap","revertState","_setSubtreeIsolation","finishActivation","_preexistingTrap$_set2","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","pause","pauseOptions","unpause","unpauseOptions","updateContainerElements","containerElements","elementsAsArray","containerAncestors","insideShadowRoot","siblings","onPause","onPostPause","onUnpause","onPostUnpause","isEnabled","_el$getAttribute","ariaHidden","inert","cap","capabilities","focusTrapModifier","setModifierManager","createModifier","focusTrapOptions","isActive","isPaused","shouldSelfFocus","focusTrap","installModifier","additionalElements","_createFocusTrap","initialFocus","updateModifier","destroyModifier","getTask","taskOrName","registeredTimers","getTimers","destroyable","cancelId","NULL_TIMER_ID","taskWrapper","taskArgs","ClassBasedModifierManager","modifierClass","createdState","installedState","ClassBasedModifier","MANAGER","teardown","getDebugName","getDebugInstance","PageTitle","tokenId","scheduleTitleUpdate","RouterEvent","configKeys","PageTitleService","prepend","_updateTitle","_validateExistingTitleElement","fromEnv","pageTitle","configValue","_defaultConfig","applyTokenDefaults","defaultSeparator","defaultPrepend","defaultReplace","inheritFromPrevious","tokenForId","_findTokenById","visibleTokens","sortedTokens","appending","frontGroups","front","lastToken","toBeTitle","updateFastbootTitle","titleDidUpdate","headElement","headChildNodes","childNodes","titleEl","titleContents","_title","PowerSelectMultipleComponent","computedTabIndex","triggerComponent","searchEnabled","tabindex","handleOpen","focusInput","handleFocus","handleKeydown","onKeydown","highlighted","choose","defaultBuildSelection","option","newSelection","idx","_PowerSelectMultipleComponent","isIE","PowerSelectMultipleInputComponent","maybePlaceholder","isDefaultPlaceholder","placeholder","handleInput","onInput","isBlank","lastSelection","buildSelection","searchField","_PowerSelectMultipleInputComponent","TriggerComponent","_openChanged","openChanged","available","chooseOption","selectedIndex","numericIndex","selectedObject","_el","_lastIsOpen","objectAt","_TriggerComponent","isPromiseLike","isPromiseProxyLike","isCancellablePromise","_resolvedOptions","_resolvedSelected","_repeatingChar","_expirableSearchText","_searchResult","_isActive","_loading","_searchText","_lastSearchedText","_highlighted","PowerSelectComponent","_search","highlight","_highlight","_choose","scrollTo","_scrollTo","labelClick","_labelClick","searchText","__updateOptions","__updateSelected","__registerAPI","term","__performSearch","contextFn","bufferPolicyName","optionsWithBufferPolicy","searchStartOffset","repeatingChar","charCode","isNumpadKeyEvent","storedAPI","indexOfOption","findWithOffset","onChange","_lastSelectedPromise","_selectedObserverCallback","highlightOnHover","labelClickAction","highlightedIndex","pathForOption","searchMessage","noMatchesMessage","resultCountMessage","resultsCount","mustShowSearchMessage","loading","mustShowNoMessages","lastSearchedText","toPlainArray","_filterResultsCache","_filter","countOptions","ariaMultiSelectable","triggerId","labelId","ariaLabelledBy","labelText","labelComponent","searchFieldPosition","_resetHighlighted","handleClose","correctedTerm","_publicAPIActions","_routeKeydown","handleTriggerKeydown","triggerTypingTask","_handleKeySpace","_updateIsActive","handleBlur","_updateOptions","_updateHighlighted","_updateSelected","closeOnSelect","optionsList","optionElement","optionTopScroll","optionBottomScroll","_registerAPI","_performSearch","_lastOptionsPromise","currentOptionsPromise","currentSelectedPromise","resolvedSelected","_lastSearchPromise","searchResult","_defaultBuildSelection","_handleKeyUpDown","_handleKeyEnter","_handleKeyTab","_handleKeyESC","newHighlighted","advanceSelectableOption","defHighlighted","defaultHighlighted","skipDisabled","optionMatcher","getOptionMatcher","defaultMatcher","filterOptions","typeAheadOptionMatcher","defaultTypeAheadMatcher","findOptionWithOffset","_PowerSelectComponent","collection","coll","PowerSelectBeforeOptionsComponent","_focusInput","clearSearch","autofocus","_PowerSelectBeforeOptionsComponent","PowerSelectInput","_PowerSelectInput","PowerSelectLabelComponent","onLabelClick","_PowerSelectLabelComponent","ElementProto","mozMatchesSelector","PowerSelectOptionsComponent","extra","_isTouchDevice","_didHandlerSetup","_listElement","_addHandlers","_removeHandlers","addHandlers","removeHandlers","_optionFromIndex","_hasMoved","changedTouch","findOptionAndPerform","optionItem","optionIndex","mouseUpHandler","mouseOverHandler","touchEndHandler","_PowerSelectOptionsComponent","PowerSelectGroupComponent","PowerSelectTriggerComponent","_PowerSelectTriggerComponent","emberPowerSelectIsEqual","isEmberArray","emberPowerSelectIsEqual$1","emberPowerSelectIsGroup","maybeGroup","isGroup","emberPowerSelectIsGroup$1","emberPowerSelectIsSelectedPresent","emberPowerSelectIsSelectedPresent$1","counter","walk","optionAtIndex","originalCollection","ancestorIsDisabled","localCounter","found","copyGroup","suboptions","groupCopy","foundBeforeOffset","foundAfterOffset","canStop","entryIsDisabled","currentOption","resultsLength","startIndex","DIACRITICS","Ａ","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ｂ","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ｃ","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ｄ","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","Ǳ","Ǆ","ǲ","ǅ","Ｅ","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ｆ","Ḟ","Ƒ","Ꝼ","Ｇ","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ｈ","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ｉ","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ｊ","Ĵ","Ɉ","Ｋ","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ｌ","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","Ǉ","ǈ","Ｍ","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ｎ","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","Ǌ","ǋ","Ｏ","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ｐ","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ｑ","Ꝗ","Ꝙ","Ɋ","Ｒ","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ｓ","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ｔ","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ｕ","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ｖ","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ｗ","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ｘ","Ẋ","Ẍ","Ｙ","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ｚ","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ａ","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ｂ","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ｃ","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ｄ","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","ǳ","ǆ","ｅ","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ｆ","ḟ","ƒ","ꝼ","ｇ","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ｈ","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ｉ","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ｊ","ĵ","ǰ","ɉ","ｋ","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ｌ","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","ǉ","ｍ","ḿ","ṁ","ṃ","ɱ","ɯ","ｎ","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ŉ","ꞑ","ꞥ","ǌ","ｏ","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ｐ","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ｑ","ɋ","ꝗ","ꝙ","ｒ","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ｓ","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ｔ","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ｕ","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ｖ","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ｗ","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ｘ","ẋ","ẍ","ｙ","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ｚ","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","stripDiacritics","BaseAuthenticator","authenticate","invalidate","Configuration","rootURL","routeAfterAuthentication","load","InternalSession","BaseStore","persist","_data","ObjectProxy","authenticator","isAuthenticated","attemptedTransition","authenticated","_busy","_bindToStoreEvents","authenticatorFactory","_lookupAuthenticator","_setup","rejectWithError","_clear","_onSessionDataUpdated","restoredContent","_clearWithContent","authenticatedContent","setProperties","_bindToAuthenticatorEvents","_updateStore","setUnknownProperty","_onSessionDataInvalidated","authenticatorName","LocalStorage","_boundHandler","_handleStorageEvent","_lastData","localStorage","objectsAreEqual","persistingProperty","beforeSet","rewriteCookie","Cookie","_syncDataTimeout","_renewExpirationTimeout","_cookieDomain","cookieDomain","_sameSite","_cookieName","cookieName","_oldCookieName","_cookiePath","cookiePath","_cookieExpirationTime","cookieExpirationTime","_cookies","_secureCookies","_isPageVisible","visibilityState","_fastboot","cachedExpirationTime","_read","_renew","_syncData","_renewExpiration","expiration","_calculateExpirationTime","_write","cookieOptions","oldCookie","expirationCookieName","emberSimpleAuth","registry","ENV","baseURL","Adaptive","SESSION_DATA_KEY_PREFIX","assertSetupHasBeenCalled","isSetupCalled","session","sessionDataKey","_setupHandlers","handleAuthentication","handleInvalidation","requireAuthentication","routeOrCallback","_setupIsCalled","sessionService","fastbootService","intent","authenticationRoute","transitionTo","prohibitAuthentication","routeIfAlreadyAuthenticated","cookiesService","redirectTarget","routerService","retry","handleSessionAuthenticated","routeAfterInvalidation","handleSessionInvalidated","LOCAL_STORAGE_TEST_KEY","proxyToInternalStore","_store","Base","localStorageKey","_isLocalStorageAvailable","cookieStorage","getProperties","_setupStoreEvents","factoryNameOrType","injectionName","injection","fastboot","compare","DASHERIZE_REGEX","StyleModifier","setStyles","newStyles","existingStyles","rulesToRemove","removeProperty","flat","AndHelper","truthConvert","eq","forceNumber","gte","lte","notEq","OrHelper","xor","isTruthy","_eventsCount","clearEvent","EventEmitter","listenerCount","a3","a4","a5","prefixed","_eventRegister","_disabled","DDDraggable","dd_manager_1","utils_1","dd_base_impl_1","dd_touch_1","DDBaseImplement","handleName","dragEl","_mouseDown","_mouseMove","_mouseUp","isTouch","touchstart","pointerdown","forDestroy","dragTimeout","mouseDownEvent","updateOption","DDManager","mouseHandled","dragElement","dropElement","touchmove","touchend","_callDrag","ev","Utils","_dragFollow","pauseDrag","isInteger","grid","gridstackNode","ddElement","ddDroppable","_createHelper","_setupHelperContainmentStyle","dragOffset","_getDragOffset","helperContainment","_setupHelperStyle","parentOriginStylePosition","_removeHelperStyle","appendTo","dragElementOriginStyle","originStyleProp","pointerEvents","_isAboutToRemove","xformOffsetX","xformOffsetY","testEl","addElStyles","zIndex","testElPosition","containmentRect","DDDroppable","_mouseEnter","_mouseLeave","_setupAccept","pointerenter","pointerleave","_canDrop","_ui","out","parentDrop","accept","dd_resizable_1","dd_draggable_1","dd_droppable_1","DDElement","ddDraggable","ddResizable","setupDraggable","cleanDraggable","setupResizable","DDResizable","cleanResizable","setupDroppable","cleanDroppable","dd_element_1","resizable","_getDDElements","dEl","handles","autoHide","alwaysShowResizeHandle","resize","dragIn","droppable","_accept","isDroppable","isDraggable","isResizable","hosts","getElements","DDResizableHandle","moving","_init","userSelect","dd_resizable_handle_1","newRect","originalRect","scrolled","temporalRect","_mouseOver","_mouseOut","_setupAutoHide","updateHandles","updateAutoHide","auto","overResizeElement","handlerDirection","_resizeStart","_resizeStop","move","_resizing","scrollEl","getScrollElement","startEvent","_setupHelper","_applyChange","_getChange","_cleanHelper","elOriginStyleVal","_originStyleProp","oEvent","constrain","_constrainSize","oWidth","oHeight","maxWidth","minWidth","maxHeight","minHeight","containmentEl","DocumentTouch","maxTouchPoints","msMaxTouchPoints","DDTouch","simulateMouseEvent","simulatedType","touch","simulatedEvent","screenX","screenY","simulatePointerMouseEvent","touchHandled","pointerLeaveTimeout","wasDragging","releasePointerCapture","pointerId","GridStackEngine","maxRow","_float","batchUpdate","batchMode","_prevFloat","saveInitial","_packNodes","_notify","_useEntireRowArea","_hasLocked","_moving","_skipDown","_fixCollisions","collide","sortNodes","nested","swap","area","didMove","newOpt","pack","locked","moveNode","copyPos","skip2","isIntercepted","collideAll","directionCollideCoverage","collides","_rect","r0","r2","yOver","xOver","overMax","cacheRects","_doSwap","_dirty","touching","isTouching","isAreaEmpty","compact","copyNodes","autoPosition","addNode","_updating","_orig","newY","prepareNode","resizing","_idSeq","noResize","noMove","nodeBoundFix","maxW","maxH","minW","minH","_inColumnResize","findCacheLayout","cacheOneLayout","samePos","getDirtyNodes","verify","dirtyNodes","cleanNodes","_lastTried","restoreInitial","findEmptyPosition","box","triggerAddEvent","_temporaryRemoved","_removeDOM","removeNode","removeDOM","removeAll","_layouts","moveNodeCheck","changedPosConstrain","clonedNode","getRow","willItFit","_willFitPos","cleanupNode","wasUndefinedPack","prevPos","needToMove","activeDrag","subGridDynamic","_isTemp","areaIntercept","makeSubGrid","row","beginUpdate","endUpdate","saveElement","layout","wl","removeInternalForSave","layoutsNodesChange","updateNodeWidths","prevColumn","cacheLayout","newNodes","domOrder","cacheNodes","cacheNode","__createBinding","__exportStar","GridStack","gridstack_engine_1","types_1","dd_gridstack_1","DDGridStack","_gsEventHandler","_extraDragRow","minRow","rowAttr","toNumber","anyOpts","oneColumnSize","_alwaysShowResizeHandle","cloneDeep","gridDefaults","staticGrid","toBool","handleClass","removableOptions","itemClass","_initMargin","disableOneColumnMode","_widthOrContainer","_prevColumn","getColumn","parentGridItem","closestUpByClass","subGrid","_isAutoCellHeight","cellHeight","cellHeightUnit","_styleSheetClass","_setStaticClass","engineClass","engine","cbNodes","_writePosAttr","_updateStyles","getGridItems","_prepareElement","setAnimation","setupDragIn","dragInOptions","_setupRemoveDrop","_setupAcceptWidget","_updateWindowResizeEvent","elOrString","getGridElement","gridstack","initAll","grids","getGridElements","addGrid","addRemoveCB","createHTMLDocument","registerEngine","_placeholder","placeholderChild","placeholderText","placeholderClass","addWidget","domAttr","_readAttr","_writeAttr","_insertNotAppend","_updateContainerHeight","_ignoreLayoutsNodeChange","_triggerAddEvent","_triggerChangeEvent","ops","nodeToAdd","saveContent","subGridTemplate","makeWidget","autoColumn","newItem","newItemOpt","_removeDD","_prepareDragDropByNode","_autoColumn","_event","removeAsSubGrid","nodeThatRemoved","pGrid","removeWidget","saveGridOpt","listOrOpt","marginBottom","marginTop","margin","origShow","removeInternalAndSame","addRemove","prevCB","_triggerRemoveEvent","getCellHeight","forcePixel","rows","marginDiff","cellWidth","parseHeight","domNodes","oldColumn","oneColumnModeDomSort","setStatic","_removeStylesheet","getFloat","getCellFromPixel","useDocRelative","containerPos","relativeLeft","relativeTop","columnWidth","rowHeight","getElement","noData","doAnimate","updateClass","recurse","ddChanged","marginUnit","getMargin","_styles","removeStylesheet","forceUpdate","styleInHead","createStylesheet","nonce","_max","addCSSRule","getHeight","same","onParentResize","changedColumn","oneColumn","cellHeightThrottle","_cellHeightThrottle","throttle","forceRemove","workTodo","_windowResizeBind","margins","getDD","dragInDefaultOptions","movable","enableMove","enableResize","doEnable","disableDrag","disableResize","_initDD","acceptWidgets","removable","onDrag","_onStartMoving","_dragOrResize","canAccept","_leave","_isExternal","_gridstackNodeOrig","_itemRemoving","wasAdded","origNode","oGrid","removePositioningStyles","dropped","trashEl","onStartMoving","dragOrResize","onEndMoving","gridToNotify","_lastUiPosition","_prevYPix","mLeft","mRight","mTop","mBottom","mHeight","mWidth","updateScrollPosition","prev","updateScrollResize","commit","obsolete","Engine","GDRev","obsoleteAttr","obsoleteOptsDel","obsoleteOpts","oldName","newName","rev","oldAttr","x0","x1","y0","y1","col","styleSheet","sheet","addRule","insertRule","sources","doMinMax","removeEl","func","isWaiting","scrollingElement","innerHeightOrClientHeight","offsetDiffDown","offsetDiffUp","prevScroll","pointerPosY","behavior","skipFields","ret","_objectWithoutPropertiesLoose","excluded","sourceKeys","IMask","InputMask","ChangeDetails","HTMLContenteditableMaskElement","HTMLMaskElement","MaskElement","Masked","MaskedDate","MaskedDynamic","MaskedEnum","MaskedFunction","MaskedNumber","MaskedPattern","MaskedRange","MaskedRegExp","PIPE_TYPE","createMask","createPipe","pipe","details","rawInserted","tailShift","aggregate","DIRECTION","escapeRegExp","normalizePrepare","prep","objectIncludes","arrA","arrB","dateA","dateB","regexpA","regexpB","ActionDetails","cursorPos","oldSelection","startChangePos","insertedCount","removedCount","tail","removeDirection","ContinuousTailDetails","masked","_appendPlaceholder","beforePos","shiftChar","isInitialized","withValueRefresh","doCommit","unmaskedValue","typedValue","doParse","doFormat","rawInputValue","extractInput","displayValue","isComplete","isFilled","nearestInputPos","totalInputPositions","fromPos","toPos","extractTail","appendTail","_appendCharRaw","_appendChar","checkTail","consistentState","doPrepare","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","_appendEager","_beforeTailState","ci","doSkipInvalid","_refreshing","rawInput","runIsolated","_isolated","skipInvalid","prepare","deleteCount","tailPos","eagerRemove","valLength","maskEquals","mask","typedValueEquals","tval","EMPTY_VALUES","maskedClass","MaskedClass","_excluded","DEFAULT_INPUT_DEFINITIONS","PatternInputDefinition","isOptional","placeholderChar","displayChar","lazy","maskOpts","maxPos","boundPos","PatternFixedDefinition","isUnmasking","_isRawInput","appendEager","isResolved","ChunksTailDetails","tailChunk","lastChunk","extendLast","firstTailChunk","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","_stops","phDetails","_blocks","remainChars","cstate","chunkShiftPos","PatternCursor","_log","ok","_blockStartPos","pushState","popState","bindBlock","_pushLeft","_this$block","_pushRight","pushLeftBeforeFilled","pushLeftBeforeInput","pushLeftBeforeRequired","pushRightBeforeFilled","pushRightBeforeInput","pushRightBeforeRequired","definitions","_rebuildMask","defs","_maskedBlocks","unmaskingBlock","optionalBlock","_defs$char","_defs$char2","blocks","bNames","bName","maskedBlock","STOP_CHAR","ESCAPE_CHAR","maskedState","bi","_this$_mapPosToBlock","startBlockIndex","blockIter","_flags$_beforeTailSta","_flags$_beforeTailSta2","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","bDetails","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","maskedBlocks","indices","InputDefinition","FixedDefinition","_matchFrom","maxLength","fromStr","padStart","toStr","sameCharsCount","boundaries","minstr","maxstr","padEnd","autofix","nextVal","GET_DEFAULT_BLOCKS","bk","isDateExist","_unsafeSelectionStart","_unsafeSelectionEnd","_unsafeSelect","bindEvents","unbindEvents","_handlers","_this$input$getRootNo","_this$input$getRootNo2","_this$input","_toggleEventHandler","EVENTS_MAP","selectionChange","click","anchorOffset","focusOffset","lastChild","_unmaskedValue","_saveSelection","_onInput","_onChange","_onClick","alignCursor","alignCursorFriendly","updateValue","_this$masked","updateControl","_unbindEvents","_fireEvent","_cursorChanging","_changingCursorPos","newUnmaskedValue","newDisplayValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","updateCursor","_delayUpdateCursor","_abortUpdateCursor","_inputEvent","hIndex","enum","_updateRegExps","allowNegative","radix","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","_insertThousandsSeparators","prepCh","_separatorsCount","extendOnSeparators","_separatorsCountFromSlice","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","appendDetails","beforeTailValue","beforeTailSeparatorsCount","_findSeparatorAround","searchFrom","separatorPos","separatorAroundFromPos","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","valid","validnum","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","zeros","dropFractional","UNMASKED_RADIX","toLocaleString","_excluded2","currentMask","compiledMasks","_applyDispatch","currentMaskFlags","prevValueBeforeTail","inputValue","insertValue","_rawInputValue","tailValue","prevMask","prevMaskState","doDispatch","currentMaskRef","dispatch","currentDetails","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","_mask$mi","oldMask","_this$currentMask5","isCurrent","startInputPos","i1","i2","MASKED","UNMASKED","TYPED","pipeArgs","globalThis","nmd","sham","Window","wrap","interaction","prepared","page","client","velocity","iEvent","install","Interactable","methodDict","interactable","pointerIsDown","pointerType","mouseButtons","lockAxis","startAxis","setPerAction","setOnEvents","beforeMove","getCursor","filterEventType","SVGElement","SVGSVGElement","SVGElementInstance","Touch","PointerEvent","MSPointerEvent","supportsTouch","supportsPointerEvent","isIOS","isIOS7","isIe9","isOperaMobile","prefixedMatchesSelector","pEventTypes","wheelEvent","correspondingUseElement","getRect","sqrt","__set","timeStamp","identifier","atan2","currentTarget","immediatePropagationStopped","propagationStopped","_interaction","_proxy","dragEvent","relatedTarget","dropState","rejected","enter","activeDrops","interactables","draggableElement","getAllElements","dropCheck","ownerSVGElement","previousSibling","leave","dragLeave","prevDropzone","dragEnter","dynamicDrop","interactStatic","usePlugin","ondrop","ondropactivate","ondropdeactivate","ondragenter","ondragleave","ondropmove","overlap","checker","phaselessTypes","dropactivate","dropdeactivate","dropmove","getActiveDrops","getDrop","getDropEvents","fireDropEvents","phase","pointers","deltaSource","angle","gesture","startDistance","startAngle","prevEvent","gesturable","resizeAxes","square","axes","cursors","xy","topleft","bottomright","topright","bottomleft","defaultMargin","preserveAspectRatio","edges","_rects","corrected","deltaRect","invert","_latestPointer","eventTarget","speed","isScrolling","prevTime","autoScroll","check","onInteractionMove","interacting","simulation","autoscroll","perAction","styleCursor","actionChecker","getAction","ignoreFrom","_backCompatOption","allowFrom","testIgnoreAllow","forEachMatch","manualStart","maxPerElement","autoStart","maxInteractions","interactions","cursorElement","cursorChecker","_interacting","base","withinInteractionLimit","pointerWasMoved","validateAction","downPointer","downEvent","hold","autoStartHoldTimer","duplicate","getHoldDuration","checkAndPreventDefault","supportsPassive","getDocOptions","docEvents","ve","phases","ge","startDelta","endResult","startEdges","modifiers","_methods","prepareStates","fillArg","pageCoords","preEnd","startAll","setAll","skipModifiers","shouldDo","eventProps","rectDelta","modifiedCoords","applyToInteraction","beforeEnd","modification","endOnly","_defaults","setAndApply","restoreInteractionCoords","t0","clientX0","clientY0","swipe","downTime","getSwipe","velocityY","velocityX","downTarget","scopeFire","_scopeFire","_ending","_stopped","doMove","updatePointer","pointerIndex","pointerInfo","_doPhase","pointerMoveTolerance","getPointerIndex","curEventTarget","removePointer","_now","_updateLatestPointer","_createPreparedEvent","pending","offsetBy","Interaction","isModified","smoothEnd","allowResume","modifierCount","modifierArg","startCoords","v0","modifiedOffset","lambda_v0","one_ve_v0","copyFrom","minSpeed","endSpeed","startInertia","startSmoothEnd","resistance","onNextFrame","inertiaTick","smoothEndTick","exp","smoothEndDuration","inertia","inertiastart","resume","addDelegate","removeDelegate","delegateListener","delegateUseCapture","delegatedEvents","documents","targets","supportsOptions","methodOrder","simulationResume","scope","mouseOrPen","hasPointer","idle","prevTouchTime","searchDetails","new","pointerDown","pointerMove","pointerUp","documentBlur","onDocSignal","doOnInteractions","methodNames","On","Off","_context","_win","_doc","_scopeEvents","onstart","onmove","onend","oninertiastart","_onOff","updatePerActionListeners","testIgnore","testAllow","rectChecker","selectorMap","addDocument","inContext","listenerMaps","Eventable","getExisting","globalEvents","getPointerAverage","getTouchBBox","getTouchDistance","getTouchAngle","getElementRect","getElementClientRect","matchesSelector","isSet","removeDocument","InteractEvent","_plugins","onWindowUnload","pluginIsInstalled","getDocIndex","edgeTarget","limits","coordFields","snappers","createSnapGrid","equalDelta","startRect","linkedEdges","xIsPrimaryAxis","edgeSign","subModification","prevCoords","elementRect","restriction","Tn","Sn","noInner","noOuter","inner","outer","Dn","Mn","zn","offsetWithOrigin","relativePoints","relativePoint","inRange","Cn","jn","targetFields","aspectRatio","restrictEdges","restrict","restrictRect","restrictSize","snapEdges","snap","snapSize","spring","avoid","rubberband","Yn","Ln","qn","tapTime","double","prevTap","Bn","Gn","eventable","holdDuration","collectEventTargets","tap","doubletap","pointerEvent","_subtractOrigin","_addOrigin","Un","holdIntervalHandle","Hn","holdRepeatInterval","holdrepeat","Kn","$n","Qn","Zn","reflow","_reflowPromise","_reflowResolve","intl_messageformat_lib","__defProp","__getOwnPropDesc","__getOwnPropNames","__hasOwnProp","intl_tel_input_exports","__export","Iti","intl_tel_input_default","rawCountryData","allCountries","iso2","dialCode","areaCodes","nodeById","mod","data_default","en_default","ax","al","dz","as","ad","aq","ag","aw","au","bh","bd","bb","by","bz","bj","bm","bo","bw","bv","vg","bf","kh","cm","cv","bq","ky","cf","td","cl","cc","cg","cd","ck","cr","cu","cw","cz","dk","dj","dm","do","ec","eg","gq","sz","fk","fo","fj","gf","pf","tf","gm","gh","gr","gp","gg","gw","gy","hm","hk","iq","im","il","jm","jp","jo","kz","ki","kg","ls","ly","li","lu","mw","my","mv","ml","mh","mq","mr","mu","mx","fm","md","mc","mz","na","np","nc","nz","ng","nu","nf","kp","pk","pw","pg","py","ph","rw","ws","sm","sg","sx","sb","gs","lk","bl","sh","lc","vc","sd","sj","sy","tw","tj","tz","tl","tg","tk","tm","tc","tv","um","gb","uy","vu","wf","eh","zm","zw","selectedCountryAriaLabel","noCountrySelected","countryListAriaLabel","searchPlaceholder","zeroSearchResults","oneSearchResult","multipleSearchResults","ac","xk","allowDropdown","autoPlaceholder","containerClass","countryOrder","customPlaceholder","dropdownContainer","excludeCountries","fixDropdownWidth","formatAsYouType","formatOnDisplay","geoIpLookup","hiddenInput","i18n","initialCountry","nationalMode","onlyCountries","placeholderNumberType","showFlags","separateDialCode","strictMode","useFullscreenPopup","utilsScript","regionlessNanpNumbers","getNumeric","normaliseString","normalize","isRegionlessNanp","areaCode","createEl","forEachInstance","intlTelInput","customOptions","telInput","highlightedItem","hadInitialPlaceholder","autoCountryPromise","resolveAutoCountryPromise","rejectAutoCountryPromise","utilsScriptPromise","resolveUtilsScriptPromise","rejectUtilsScriptPromise","selectedCountryData","_processCountryData","_generateMarkup","_setInitialState","_initListeners","_initRequests","_processAllCountries","_processDialCodes","_translateCountryNames","country","_sortCountries","countries","aIndex","bIndex","aIndexExists","bIndexExists","_addToDialCodeMap","dialCodeMaxLen","dialCodeToIso2Map","lowerCaseOnlyCountries","lowerCaseExcludeCountries","dialCodes","rootIso2Code","partialDialCode","parentClass","countryContainer","selectedCountry","role","selectedCountryPrimary","selectedCountryInner","selectedCountryA11yText","dropdownArrow","selectedDialCode","extraClasses","dropdownContent","searchInput","searchResultsA11yText","countryList","_appendListItems","_updateSearchResultsText","dropdownClasses","phone","hiddenInputCountry","listItem","insertAdjacentHTML","overrideAutoCountry","attributeValue","_getDialCode","isRegionlessNanpNumber","_updateCountryFromNumber","lowerInitialCountry","_getCountryData","_setCountry","_updateValFromNumber","_initTelInputListeners","_initDropdownListeners","_initHiddenInputListener","_handleHiddenInputSubmit","getSelectedCountryData","_handleLabelClick","_handleClickSelectedCountry","_openDropdown","_handleCountryContainerKeydown","_closeDropdown","utils","documentReady","loadUtils","_loadAutoCountry","autoCountry","handleAutoCountry","startedLoadingAutoCountry","iso2Lower","userOverrideFormatting","_handleInputEvent","_triggerCountryChange","isFormattingChar","isPaste","inputType","currentCaretPos","relevantCharsBeforeCaret","isDeleteForwards","formattedValue","_formatNumberAsYouType","newCaretPos","translateCursorPosition","relevantChars","prevCaretPos","_handleKeydownEvent","_filterCountries","isInitialPlus","isNumeric","isAllowedChar","fullNumber","_getFullNumber","coreNumber","getCoreNumber","hasReachedMaxLength","maxCoreNumberLength","_cap","_setDropdownPosition","firstCountryItem","_highlightListItem","_bindDropdownListeners","inputPosRelativeToVP","inputHeight","_handleWindowScroll","_handleMouseoverCountryList","_handleClickCountryList","_selectListItem","isOpening","_handleClickOffToClose","_handleKeydownOnDropdown","_handleUpDownKey","_handleEnterKey","doFilter","inputQuery","keyupTimer","_handleSearchChange","query","isReset","noCountriesAddedYet","normalisedQuery","normalisedCountryName","fullDialCode","childElementCount","previousElementSibling","lastElementChild","useNational","NATIONAL","INTERNATIONAL","numberFormat","_beforeSetNumber","plusIndex","iso2Codes","alreadySelected","defaultCountry","shouldFocus","prevItem","activeDescendant","allowFail","prevCountry","flagClass","a11yText","_setSelectedCountryTitleAttribute","inputPadding","_getHiddenSelectedCountryWidth","paddingRight","_updatePlaceholder","_updateMaxLength","numberType","exampleNumber","getExampleNumber","validNumber","isPossibleNumber","containerClone","countryContainerClone","selectedCountryClone","shouldSetPlaceholder","countryChanged","_updateDialCode","containerHeight","containerTop","containerBottom","elementHeight","elementTop","elementBottom","newScrollTop","heightDifference","newDialCodeBare","inputVal","newDialCode","newNumber","prevDialCode","includeAreaCode","numericChars","numericVal","formatNumberAsYouType","setCountry","handleUtils","getExtension","getNumberType","getValidationError","isValidNumber","mobileOnly","isValidNumberPrecise","setNumber","setPlaceholderNumberType","iti","getCountryData","getInstance","id2","startedLoadingUtilsScript","injectUtilsScriptTag","handleSuccess","handleFailure","intlTelInputUtils","intlTelInputUtilsBackup","__copyProps","except","languages","grammars","abbreviations","capitalizeFirstLetter","toLocaleUpperCase","ordinalize","constants","directionFromDegree","degree","north","northeast","east","southeast","south","southwest","west","northwest","laneConfig","intersections","lanes","currentLaneValidity","lane","getWayName","wayName","wayMotorway","phrase","tokenize","formatToken","supportedCodes","instructionObject","laneInstruction","driving_side","modes","omitSide","no_lanes","rotary_name","name_exit","instruction","destinations","exits","exit_destination","waypointName","firstDestination","destinationRef","nthWaypoint","replaceTokens","way_name","exit_number","lane_instruction","nth","waypoint_name","grammarize","grammar","meta","regExpFlags","startedWithToken","__b","__r","diffed","__c","unmount","__h","__H","__","__V","__N","shouldComponentUpdate","__s","useDebugValue","componentDidCatch","__v","__m","__P","__e","isReactComponent","__f","isPureReactComponent","$$typeof","only","__k","__d","__u","__a","__R","__O","componentWillUnmount","revealOrder","getChildContext","containerInfo","componentDidUpdate","componentDidMount","isPropagationStopped","isDefaultPrevented","nativeEvent","vnode","defaultValue","ReactCurrentDispatcher","readContext","__n","useState","useId","useReducer","useEffect","useLayoutEffect","useInsertionEffect","useTransition","useDeferredValue","useSyncExternalStore","startTransition","useRef","useImperativeHandle","useMemo","useCallback","useContext","Children","hydrate","unmountComponentAtNode","createPortal","createContext","createFactory","cloneElement","createRef","Fragment","isValidElement","findDOMNode","PureComponent","memo","forwardRef","flushSync","unstable_batchedUpdates","StrictMode","Suspense","SuspenseList","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","defaultProps","debounceRendering","contextType","__E","_sb","getDerivedStateFromProps","componentWillMount","componentWillReceiveProps","componentWillUpdate","getSnapshotBeforeUpdate","localName","createElementNS","dangerouslySetInnerHTML","__html","Consumer","Provider","getDerivedStateFromError","RemotePromise","_status","toStringTag","_promise","_resolve","_reject","assertPending","readStorageFor","storages","storage","createStorage","dirtyStorageFor","vals","TrackedWeakMap","storageFor","set_defineProperty","TrackedWeakSet","ARRAY_GETTER_METHODS","ARRAY_WRITE_THEN_READ_METHODS","convertToInt","_collection","_storages","_TrackedArray_brand","TrackedArray","iterable","mapfn","thisArg","arr","boundFns","nativelyAccessingLengthFromPushOrUnshift","_readStorageFor","_dirtyStorageFor","_dirtyCollection","TrackedObjectImplementation","TrackedObject","_TrackedObjectImplementation_brand","descs","deleteProperty","glimmerTracked","BufferedChangeset","CHANGESET","Change","Changeset","ValidatedChangeset","ValidationChangeset","ValidationChangesetFactory","arrayToObject","buildOldValues","changeset","getChangeValue","getDeep","getKeyValues","isArrayObject","isChange","isChangeset","isPromise","keyInObject","lookupValidator","mergeDeep","mergeNested","normalizeObject","objectToArray","objectWithout","propertyIsUnsafe","pureAssign","setDeep","take","EMPTY","serialize_toString","PRIMITIVE","asString","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","shouldSkip","esm","structuredClone","deserialize","serialized","json","lossy","strict","BIGINT","toISOString","deserializer","unpair","VALUE","maybeChange","validation","keysUpToValue","getKeyErrorValues","handleValidationsAsync","validations","maybeFailed","getSubObject","validationMap","validator","validators","Notifier","notifierForEvent","_eventedNotifiers","notifier","hasKey","safeGet","pathInChanges","isObj","hasChanges","objects","validatorMap","keysUpToFunction","flattenValidations","__changeset__","baseKey","findSiblings","leafKey","isValidKey","safeSet","orig","isComplex","changeValue","isArrayLike","nestedKeys","validated_changeset_es5_keys","finalObj","getKeys","propertyIsEnumerable","propertyIsOnObject","buildPathToValue","kv","possibleKeys","possible","mergeTargetAndSource","stringValue","sourceIsArray","targetIsArray","sourceIsArrayLike","objectProxyHandler","childValue","childNode","childContent","ObjectTreeNode","nodeContent","defaultSafeGet","isObject$1","excludedKeys","originalObj","keysToTake","newObj","keys$1","CONTENT","PREVIOUS_CONTENT","CHANGES","ERRORS","ERRORS_CACHE","OPTIONS","maybeUnwrapProxy","newFormat","errors","validationKeys","userChangesetKeys","changesetKeys","isInvalid","isDirty","chKey","_setProperty","execute","oldContent","unexecute","rollback","_rollbackKeys","_notifyVirtualProperties","rollbackInvalid","errorKeys","_deleteKey","errKey","addError","newError","removeError","removeErrors","pushErrors","newErrors","existingError","snapshot","getChangesForSnapshot","newChanges","getChangesFromSnapshot","getChangeForProp","v2","v1","objName","previousNode","currentKey","curr","changesValue","baseChanges","normalizedBaseChanges","baseContent","subContent","subChanges","targetBuffer","keys$2","VALIDATOR","RUNNING_VALIDATIONS","AFTER_VALIDATION_EVENT","defaultValidatorFn","skipValidate","validateFn","maybeUnwrapProxy$1","CONTENT$1","PREVIOUS_CONTENT$1","CHANGES$1","OPTIONS$1","validatorMapKeys","initValidate","_collectErrors","ERRORS$1","ERRORS_CACHE$1","_bareChanges","_handleValidation","_validateKey","prepareChangesFn","preparedChanges","savePromise","maybePromise","merge","e1","e2","newChangeset","ValidatedChangeset$1","mergedErrors","mergedChanges","rollbackProperty","cast","allowed","casted","isValidating","runningValidations","ks","_validate","_setIsValidating","running","resolvedValidation","_isValidResult","validationResult","validationError","changeset$1","Changeset$1","internalCommon","preact","globalLocales","MINIMAL_RAW_EN_LOCALE","dow","doy","buttonText","prevYear","nextYear","weekText","weekTextLong","closeHint","timeHint","eventHint","allDayText","moreLinkText","noEventsText","RAW_EN_LOCALE","buttonHints","viewHint","navLinkHint","moreLinkHint","eventCnt","organizeRawLocales","explicitRawLocales","defaultCode","allRawLocales","rawLocaleMap","rawLocale","buildLocale","inputSingular","codeArg","codes","toLocaleLowerCase","simpleId","parseLocale","merged","mergeProps","simpleNumberFormat","createPlugin","premiumReleaseDate","reducers","isLoadingFuncs","contextInit","eventRefiners","eventDefMemberAdders","eventSourceRefiners","isDraggableTransformers","eventDragMutationMassagers","eventDefMutationAppliers","dateSelectionTransformers","datePointTransforms","dateSpanTransforms","viewPropsTransformers","isPropsValid","externalDefTransforms","viewContainerAppends","eventDropTransformers","componentInteractions","calendarInteractions","themeClasses","eventSourceDefs","cmdFormatter","recurringTypes","namedTimeZonedImpl","initialView","elementDraggingImpl","optionChangeHandlers","scrollGridImpl","listenerRefiners","optionRefiners","propSetHandlers","combineHooks","hooks0","hooks1","date0","date1","StandardTheme","Theme","ensureViewDef","viewType","defaultConfigs","overrideConfigs","viewDef","overrideConfig","queryProp","theComponent","superType","superDef","rawOptions","overrides","parseViewConfigs","mapHash","parseViewConfig","createViewHookComponent","BaseComponent","viewProps","ViewContextType","ContentContainer","elTag","elClasses","buildViewClassNames","viewSpec","renderProps","nextDayThreshold","generatorName","customGenerator","classNameGenerator","didMount","willUnmount","buildViewSpecs","defaultInputs","optionOverrides","dynamicOptionOverrides","localeDefaults","viewDefs","durationInput","durationUnit","singleUnit","singleUnitOverrides","durationInputMap","createDuration","denom","greatestDurationDenominator","queryButtonText","optionsSubset","buttonTextMap","buttonTextKey","queryButtonTitle","buttonKey","optionDefaults","buttonTextOverride","buttonTextDefault","BASE_OPTION_DEFAULTS","buttonTitleOverride","buttonHint","buttonTitleDefault","tableCellShaded","buttonGroup","buttonActive","baseIconClass","iconClasses","rtlIconClasses","iconOverrideOption","iconOverrideCustomButtonOption","iconOverridePrefix","computeEventSourcesLoading","eventSources","sourceId","isFetching","addSources","eventSourceHash","fetchRange","fetchDirtySources","sourceHash","fetchSourcesByIds","filterHash","eventSource","doesSourceNeedRange","lazyFetching","latestFetchId","prevSources","sourceIdHash","isRefetch","nextSources","fetchSource","calendarApi","sourceDef","pluginHooks","sourceDefId","fetchId","fetch","rawEvents","eventSourceSuccess","errorHandled","eventSourceFailure","failure","excludeStaticSources","ignoreRange","reduceDateSelection","currentSelection","reduceSelectedEvent","currentInstanceId","eventInstanceId","reduceEventDrag","currentDrag","newDrag","affectedEvents","mutatedEvents","isEvent","reduceEventResize","currentResize","newResize","parseToolbars","calendarOptions","calendarOptionOverrides","theme","viewSpecs","headerToolbar","parseToolbar","footer","footerToolbar","sectionStrHash","sectionWidgets","viewsWithButtons","hasTitle","sectionName","sectionRes","parseSection","widgets","sectionStr","isRtl","calendarCustomButtons","customButtons","calendarButtonTextOverrides","calendarButtonText","calendarButtonHintOverrides","calendarButtonHints","sectionSubstrs","buttonGroupStr","buttonName","customButtonProps","buttonClick","buttonIcon","getCustomButtonIconClass","getIconClass","changeView","textFallback","formatWithOrdinals","prevOrNext","navUnit","ViewImpl","getCurrentData","dateEnv","calendar","viewTitle","activeStart","dateProfile","activeRange","activeEnd","currentStart","currentRange","currentEnd","arrayEventSourcePlugin","parseMeta","refined","successCallback","funcEventSourcePlugin","errorCallback","unpromisify","buildRangeApiWithTimeZone","jsonFeedEventSourcePlugin","extraParams","startParam","endParam","timeZoneParam","requestParams","customRequestParams","formatIso","requestJson","SIMPLE_RECURRING_REFINERS","daysOfWeek","startRecur","endRecur","handleEventSources","unfoundSources","hashValuesToArray","_raw","newInputs","inputFound","unfoundSource","newInput","addEventSource","globalPlugins","recurringData","subtractDurations","allDayGuess","typeData","expand","framingRange","clippedFramingRange","intersectRanges","eventDateEnv","calendarDateEnv","dowHash","arrayToHash","dayMarker","endMarker","instanceStarts","instanceStart","viewApi","eventStore","hasHandlers","buildEventApis","TaskRunner","runTaskOption","drainedOption","delayedRunner","DelayedRunner","drain","force","completedTasks","drained","buildTitle","viewOptions","currentRangeUnit","createFormatter","titleFormat","diffWholeDays","isEndExclusive","isRangeAllDay","titleRangeSeparator","CalendarNowManager","resetListeners","nowInput","oldDateEnv","nowFn","nowAnchorDate","createNowMarker","nowAnchorQueried","resetListener","getDateMarker","timestampToMarker","addResetListener","removeResetListener","CalendarDataManager","computeCurrentViewData","_computeCurrentViewData","buildPluginHooks","currentHooks","currentOverrideDefs","currentGlobalDefs","overrideDefs","globalDefs","isArraysEqual","pluginDefs","currentPluginIds","hooks","addDefs","pluginName","currentId","buildDateEnv","buildDateEnv$1","buildTheme","buildDateProfileGenerator","memoizeObjArg","buildViewApi","buildViewUiProps","buildEventUiBySource","isPropsEqual","buildEventUiBases","parseContextBusinessHours","nowManager","Emitter","actionRunner","_handleAction","updateData","currentCalendarOptionsInput","currentCalendarOptionsRefined","currentViewOptionsInput","currentViewOptionsRefined","currentCalendarOptionsRefiners","optionsForRefining","optionsForHandling","optionsData","computeOptionsData","currentViewType","currentViewData","currentDataManager","setThisContext","calendarContext","initialDateInput","initialDate","dateProfileGenerator","build","rangeContainsMarker","refiners","buildEventSourceRefiners","rawSources","initialEvents","rawSource","parseEventSource","initialState","businessHours","eventUiBases","createEmptyEventStore","renderableEventStore","dateSelection","eventSelection","eventDrag","eventResize","selectionConfig","contextAndState","computeIsLoading","resetOptions","changedOptionNames","rawOptionValue","dateMarker","currentDateProfile","buildPrev","buildNext","sourceIds","reduceEventStore","progressiveEventRendering","eventUiSingleBase","eventUiBySource","newState","wasLoading","isLoading","onAction","oldData","changeHandlers","oldCalendarOptions","newCalendarOptions","rezoneEventStoreDates","onData","stableOptionOverrides","stableDynamicOptionOverrides","stableCalendarOptionsData","refinedOptions","availableLocaleData","processRawCalendarOptions","warnUnknownOptions","weekNumberCalculation","defaultRangeSeparator","toolbarConfig","availableRawLocales","mergeRawOptions","plugins","BASE_OPTION_REFINERS","CALENDAR_LISTENER_REFINERS","CALENDAR_OPTION_REFINERS","currentRaw","currentRefined","anyChanges","COMPLEX_OPTION_COMPARATORS","processRawViewOptions","dateProfileGeneratorClass","usesMinMaxTime","slotMinTime","slotMaxTime","showNonCurrentDates","dayCount","dateAlignment","dateIncrement","hiddenDays","validRangeInput","validRange","visibleRangeInput","visibleRange","fixedWeekCount","VIEW_OPTION_REFINERS","explicitLocale","DateEnv","calendarSystem","namedTimeZoneImpl","themeSystem","DateProfileGenerator","eventDefs","defId","createEventUi","eventDisplay","editable","startEditable","eventStartEditable","durationEditable","eventDurationEditable","constraint","eventConstraint","eventOverlap","eventAllow","backgroundColor","eventBackgroundColor","borderColor","eventBorderColor","textColor","eventTextColor","eventColor","selectConstraint","selectOverlap","selectAllow","isLoadingFunc","parseBusinessHours","viewName","ToolbarSection","widgetGroups","widgetGroup","renderWidgetGroup","isOnlyButtons","widget","titleId","isPressed","activeButton","isTodayEnabled","isPrevEnabled","isNextEnabled","buttonClasses","getClass","groupClassName","Toolbar","startContent","endContent","extraClassName","forceLtr","centerContent","renderSection","ViewHarness","handleEl","setRef","elRef","updateAvailableWidth","liquid","paddingBottom","labeledById","addResizeHandler","removeResizeHandler","EventClicking","handleSegClick","segEl","seg","getElSeg","isValidSegDownEl","hasUrlContainer","elementClosest","href","EventImpl","eventRange","jsEvent","listenBySelector","EventHovering","handleEventElRemove","currentSegEl","handleSegLeave","handleSegEnter","removeHoverListeners","listenToHoverBySelector","publicEvName","CalendarContent","buildViewContext","buildViewPropTransformers","buildToolbarProps","headerRef","footerRef","interactionsStore","viewLabelId","getUniqueDomId","registerInteractiveComponent","settingsInput","parseInteractionSettings","TheInteractionClass","uid","interactionSettingsStore","unregisterInteractiveComponent","resizeRunner","handleWindowResize","windowResizeDelay","viewAspectRatio","viewVGrow","viewHeight","isHeightAuto","forPrint","contentHeight","viewContext","NowTimer","nowDate","toolbarProps","renderView","buildAppendContent","CalendarInteractionClass","propName","prevProps","transformers","transformer","ViewComponent","todayInfo","prevInfo","nextInfo","theClasses","TheClass","Calendar","CalendarImpl","isRendering","isRendered","currentClassNames","customContentRenderId","handleAction","renderRunner","tryDrain","handleData","currentData","rerenderDelay","handleRenderRequest","CalendarRoot","setClassNames","setHeight","RenderId","ensureElHasStyles","wasRendering","updateSize","batchRendering","pauseRendering","resumeRendering","applyStyleProp","JsonRequestError","dateInput","dateMeta","createMarkerMeta","forcedTzo","startInput","endInput","startMeta","endMeta","forcedStartTzo","forcedEndTzo","sliceEvents","allDay","sliceEventStore","fg","compat","preact__namespace","__esModule","_interopNamespace","styleTexts","styleEls","injectStyles","styleText","styleEl","appendStylesTo","registerStylesRoot","queriedNonceValue","metaWithNonce","elWithNonce","parentEl","ruleCnt","cssRules","styleStr","removeElement","elementMatches","findElements","allMatches","PIXEL_PROP_RE","applyStyle","getEventTargetViaRoot","guid$1","attachedHandler","matchedChild","transitionEventNames","createAriaClickAttrs","createAriaKeyboardAttrs","guidNumber","parseFieldSpecs","specs","field","order","compareByFieldSpecs","obj0","obj1","fieldSpecs","cmp","compareByFieldSpec","fieldSpec","flexibleCompare","localeCompare","fallbackText","computeSmallestCellWidth","cellEl","allWidthEl","contentWidthEl","INTERNAL_UNITS","PARSE_RE","parseObject","millisecond","specifiedWeeks","asRoughDays","dur","asRoughMs","a0","equalityFunc","DAY_IDS","dateToUtcArray","arrayToUtcDate","addMs","diffDays","m0","m1","diffDayAndTime","m0day","m1day","diffWholeWeeks","timeAsMs","weekOfGivenYear","firstWeekStart","firstWeekOffset","dayStart","fwd","dateToLocalArray","arrayToLocalDate","isValidDate","buildIsoString","timeZoneOffset","stripZeroTime","formatTimeZoneOffset","formatDayString","doIso","mins","workerFunc","resEquality","teardownFunc","currentArgs","currentRes","newArgs","currentArg","newArg","EXTENDED_SETTINGS_AND_SEVERITIES","omitZeroMinute","meridiem","omitCommas","STANDARD_DATE_PROP_SEVERITIES","MERIDIEM_RE","COMMA_RE","MULTI_SPACE_RE","LTR_RE","UTC_RE","NativeFormatter","formatSettings","standardDateProps","extendedSettings","smallestUnitNum","buildFormattingFunc","betterDefaultSeparator","diffSeverity","d0","d1","getMarkerYear","getMarkerMonth","getMarkerDay","biggestUnitForPartial","full0","full1","partialFormattingFunc","biggestUnit","partialOptions","partial0","partial1","insertion","i0","found0","before0","after0","found1","before1","after1","getSmallestUnit","standardDatePropCnt","computeWeekNumber","zeroFormat","normalFormat","zeroProps","tzoStr","expandZonedMarker","dateInfo","markerToArray","createVerboseFormattingArg","startInfo","localeCodes","CmdFormatter","cmdStr","FuncFormatter","navLinkDayClick","navLinkWeekClick","bootstrapFontAwesome","buttonIcons","defaultAllDayEventDuration","defaultTimedEventDuration","scrollTime","scrollTimeReset","dayPopoverFormat","slotDuration","snapDuration","forceEventDuration","dayHeaders","dayHeaderFormat","dayHeaderClassNames","dayHeaderContent","dayHeaderDidMount","dayHeaderWillUnmount","dayCellClassNames","dayCellContent","dayCellDidMount","dayCellWillUnmount","weekNumbers","weekNumberClassNames","weekNumberContent","weekNumberDidMount","weekNumberWillUnmount","viewClassNames","viewDidMount","viewWillUnmount","nowIndicator","nowIndicatorSnap","nowIndicatorClassNames","nowIndicatorContent","nowIndicatorDidMount","nowIndicatorWillUnmount","dragRevertDuration","dragScroll","allDayMaintainDuration","unselectAuto","dropAccept","eventOrder","eventOrderStrict","longPressDelay","eventDragMinDistance","expandRows","weekNumberFormat","eventResizableFromStart","displayEventTime","displayEventEnd","eventDataTransform","stickyHeaderDates","stickyFooterScrollbar","defaultAllDay","eventClassNames","eventContent","eventDidMount","eventWillUnmount","unselectCancel","slotLabelFormat","slotLaneClassNames","slotLaneContent","slotLaneDidMount","slotLaneWillUnmount","slotLabelClassNames","slotLabelContent","slotLabelDidMount","slotLabelWillUnmount","dayMaxEvents","dayMaxEventRows","dayMinWidth","slotLabelInterval","allDayClassNames","allDayContent","allDayDidMount","allDayWillUnmount","slotMinWidth","navLinks","eventTimeFormat","selectMinDistance","selectable","selectLongPressDelay","eventLongPressDelay","selectMirror","eventMaxStack","eventMinHeight","eventMinWidth","eventShortHeight","slotEventOverlap","eventInteractive","moreLinkClick","moreLinkClassNames","moreLinkContent","moreLinkDidMount","moreLinkWillUnmount","monthStartFormat","handleCustomRendering","customRenderingMetaMap","customRenderingReplaces","datesSet","eventsSet","eventAdd","eventChange","eventRemove","windowResize","eventClick","eventMouseEnter","eventMouseLeave","unselect","_unmount","_beforeprint","_afterprint","_noEventDrop","_noEventResize","_resize","_scrollRequest","isMaybeObjectsEqual","isMaybeArraysEqual","resources","refineProps","propObjs","complexPropsMap","dest","complexObjs","newHash","HANDLER_RE","compareObjs","oldProps","newProps","equalityFuncs","isObjValsEqual","val0","val1","comparator","collectFromHash","endIndex","calendarSystemClassMap","theClass","arrayToMarker","gregory","ISO_RE","isTimeUnspecified","setIconOverride","iconOverrideHash","iconClassesCopy","applyIconOverridePrefix","runBeforeFlush","oldDebounceRendering","callbackQ","FakeComponent","ContextType","origProvider","isNew","subs","_props","old","ScrollResponder","execFunc","handleScrollRequest","queuedRequest","fireInitialScroll","detach","isDatesNew","nextProps","nextState","propEquality","stateEquality","safeSetState","addPropsEquality","addStateEquality","ContentInjector","queuedDomNodes","currentDomNodes","hasCustomRenderingHandler","updateElRef","defaultGenerator","buildElAttrs","innerContent","currentGeneratorMeta","customGeneratorRes","applyQueueudDomNodes","triggerCustomRendering","generatorMeta","containerEl","reportNewContainerEl","newNode","extraClassNames","elAttrs","elStyle","InnerContent","InnerContentInjector","didMountMisfire","generatedClassNames","renderId","containerComponent","parentProps","invertRanges","constraintRange","dateRange","invertedRanges","compareRanges","range0","range1","newRange","rangesEqual","rangesIntersect","rangeContainsRange","outerRange","innerRange","computeAlignedDayRange","timedRange","dayCnt","computeVisibleDayRange","startDay","endDay","endTimeMS","diffDates","largeUnit","diffWholeYears","diffWholeMonths","createEventInstance","instanceId","expandRecurring","recurringDef","starts","expandRecurringRanges","eventDef","markers","typeId","subtract","EVENT_NON_DATE_REFINERS","groupId","interactive","EVENT_DATE_REFINERS","EVENT_REFINERS","extendedProps","parseEvent","allowOpenRange","buildEventRefiners","defIdMap","instanceIdMap","refineEventDef","recurringRes","parsed","parseEventDef","singleRes","startMarker","hasEnd","publicId","EVENT_UI_REFINERS","memberAdder","parseEvents","rawEvent","tuple","eventTupleToStore","getRelevantEvents","newStore","filterEventStoreDefs","lookDef","isEventDefsGrouped","def0","def1","mergeEventStores","store0","store1","filterFunc","parseClassNames","EMPTY_EVENT_UI","constraints","allows","combineEventUis","uis","combineTwoEventUis","item0","item1","EVENT_SOURCE_REFINERS","rawObj","metaRes","transformRawEvents","calEachTransform","sourceEachTransform","transformEachRawEvent","refinedEvents","refinedEvent","excludeEventsBySourceId","thisContext","attachedHandlers","optionHandler","DEF_DEFAULTS","triggerDateSelect","pev","buildDateSpanApiWithContext","origEvent","dateSpan","span","buildRangeApi","getDefaultEventEnd","applyMutationToEventStore","eventConfigBase","eventConfigs","compileEventUis","applyMutationToEventDef","applyMutationToEventInstance","eventConfig","standardProps","endDelta","applier","eventInstance","forceAllDay","clearEnd","datesDelta","EventSourceImpl","internalEventSource","refetch","_def","_instance","setProp","mutate","setExtendedProp","granularity","maintainDuration","setDates","instanceRange","moveStart","deltaInput","moveEnd","moveDates","setAllDay","formatInput","relevantEvents","oldEvent","relatedEvents","asStore","eventApiToStore","startStr","omitTime","endStr","toPlainObject","collapseColor","collapseExtendedProps","eventApi","excludeInstance","eventApis","excludeInstanceId","inverseBgByGroupId","inverseBgByDefId","defByGroupId","bgRanges","fgRanges","eventUis","origRange","normalRange","slicedRange","isEnd","invertedRange","setElSeg","fcSeg","compileEventUi","buildSegCompareObj","_seg","computeSegDraggable","computeSegStartResizable","computeSegEndResizable","buildSegTimeText","defaultDisplayEventTime","defaultDisplayEventEnd","startOverride","endOverride","wholeEventStart","wholeEventEnd","segStart","segEnd","isStartDay","isEndDay","getEventClassNames","isMirror","isStartResizable","isEndResizable","isDragging","isResizing","isSelected","getSegAnchorAttrs","STANDARD_PROPS","canVGrowWithinCell","getCanVGrowWithinCell","handleRefresh","timing","computeTiming","waitMs","handleVisibilityChange","hidden","todayRange","unroundedNow","unitValue","startOf","buildDayRange","intersectRects","rect1","rect2","EMPTY_EVENT_STORE","buildEventUiForKey","allUi","eventUiForKey","individualUi","baseParts","stuff","getDateMeta","isOther","getDayClassNames","DAY_FORMAT","WEEK_FORMAT","buildNavLinkAttrs","dateStr","zonedDate","handleInteraction","customAction","zoomTo","_scrollbarWidths","_isRtlScrollbarOnLeft","getIsRtlScrollbarOnLeft","outerEl","getScrollbarWidths","computeScrollbarWidthsForEl","computeEdges","getPadding","borderLeft","borderRight","borderRightWidth","borderTop","borderBottom","borderBottomWidth","badScrollbarWidths","scrollbarLeftRight","scrollbarBottom","scrollbarLeft","scrollbarRight","computeRect","getClippingParents","parents","similarNumArrays","ScrollController","getMaxScrollTop","getScrollHeight","getClientHeight","getMaxScrollLeft","getScrollWidth","getClientWidth","canScrollVertically","canScrollHorizontally","canScrollUp","getScrollTop","canScrollDown","canScrollLeft","getScrollLeft","canScrollRight","DateComponent","prepareHits","queryHit","positionLeft","positionTop","elWidth","elHeight","isValidDateDownEl","getEntrySpanEnd","buildEntryKey","joinSpans","span0","span1","intersectSpans","binarySearch","searchVal","getItemVal","middleIndex","middleVal","DRAG_META_REFINERS","computeFallbackHeaderFormat","datesRepDistinctDays","CLASS_NAME","renderInner$1","TableDateCell","dayMeta","navLinkAttrs","colCnt","publicDate","extraRenderProps","colSpan","extraDataAttrs","InnerContainer","isSticky","WEEKDAY_FORMAT","TableDowCell","createDayHeaderFormatter","explicitFormat","dateCnt","computeActiveRange","isComponentAllDay","isNewPropsValid","calendarState","dateSpanMeta","filterConfig","currentState","subjectEventStore","subjectDefs","subjectInstances","subjectConfigs","otherEventStore","removals","otherDefs","otherInstances","otherConfigs","subjectInstanceId","subjectInstance","subjectRange","subjectConfig","subjectDef","allConstraintsPass","eventOverlapFunc","otherInstanceId","otherInstance","calendarEventStore","subjectAllow","subjectDateSpan","origDef","origInstance","relevantEventStore","relevantDefs","relevantInstances","selectionRange","selectOverlapFunc","relevantInstanceId","relevantInstance","selectionAllow","businessHoursUnexpanded","anyRangesContainRange","constraintToRanges","eventStoreToRanges","outerRanges","VISIBLE_HIDDEN_RE","Scroller","liquidIsAbsolute","isAbsolute","overcomeLeft","overcomeRight","overcomeBottom","needsXScrolling","realClientWidth","getYScrollbarWidth","needsYScrolling","realClientHeight","getXScrollbarWidth","RefMap","masterCallback","currentMap","depths","callbackMap","handleValue","refCallback","collect","computeShrinkWidth","chunkEls","shrinkCells","largestWidth","shrinkCell","getSectionHasLiquidHeight","sectionConfig","getAllowYScrolling","renderChunkContent","chunkConfig","isHeader","tableClassName","syncRowHeights","tableMinWidth","tableColGroupNode","rowContent","isColPropsEqual","cols0","cols1","renderMicroColGroup","cols","shrinkWidth","colNodes","colProps","sanitizeShrinkWidth","hasShrinkWidth","getScrollGridClassNames","getSectionClassNames","wholeTableVGrow","SimpleScrollGrid","processCols","scrollerRefs","scrollerElRefs","_handleScrollerEl","forceYScrollbars","scrollerClientWidths","scrollerClientHeights","handleSizing","computeScrollerDims","sectionConfigs","sections","microColGroupNode","collapsibleWidth","currentConfig","configCnt","configI","headSectionNodes","bodySectionNodes","footSectionNodes","isBuggy","roleAttrs","outerContent","renderChunkTd","isLiquid","sectionKey","rowSyncHeights","reportRowHeightChange","scrollerEl","section","scrollerElRef","scrollbarWidth","scroller","harnessEl","EventContainer","buildPublicEvent","timeText","disableDragging","disableResizing","isDateSelecting","StandardEvent","defaultTimeFormat","renderInnerContent$1","eventContentArg","innerProps","DAY_NUM_FORMAT","DayCellContainer","refineRenderProps","isMonthStart","showDayNumber","hasCustomDayCellContent","dayNumberText","renderInnerContent","renderInner","Popover","handleRootEl","rootEl","handleDocumentMouseDown","handleCloseClick","handleDocumentKeyDown","extraAttrs","alignmentEl","alignGridTop","alignmentRect","clippingParents","clippingParent","intersection","popoverDims","popoverTop","popoverLeft","MorePopover","useEventCenter","forceTimed","extraDateSpan","dayEl","layer","renderMoreLinkInner","computeRange","allDayDate","hiddenSegs","computeEarliestSegStart","segs","pickLatestEnd","pickEarliestStart","seg0","seg1","Store","subscribe","BgEvent","setOption","getAvailableLocaleCodes","dateOrRange","spec","getUnitViewSpec","viewTypes","gotoDate","zonedDateInput","incrementDate","dateOrObj","selectionInput","defaultDuration","eventInput","sourceInput","triggerEventAdd","sourceApi","getEventSourceById","newEventApi","getEventById","getEvents","getEventSources","sourceApis","internalId","removeAllEventSources","refetchEvents","scrollToTime","timeInput","handleBeforePrint","handleAfterPrint","CustomRenderingStore","customRendering","updated","isNamedTimeZone","canComputeOffset","weekDow","weekDoy","weekNumberFunc","greatestWholeUnit","countDurationsBetween","nextW","dateOptions","offsetForMarker","extraOptions","omitTimeZoneOffset","timestampToArray","offsetForArray","initHiddenDays","forceToValid","prevDate","nextDate","currentInfo","renderRange","buildValidRange","trimHiddenDays","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","buildDateIncrement","simpleInput","refineRange","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","getFallbackDuration","computeRes","isHiddenDay","skipHiddenDays","runningCount","customAlignment","rangeInput","isHiddenDayHash","inc","isExclusive","DayHeader","renderIntro","DaySeriesModel","cnt","sliceRange","firstIndex","getDateDayIndex","clippedFirstIndex","clippedLastIndex","dayOffset","DayTableModel","daySeries","breakOnWeeks","daysPerRow","rowCnt","buildCells","headerDates","buildHeaderDates","buildCell","seriesSeg","firstCol","lastCol","pauseDepths","ElementDragging","setMirrorIsVisible","bool","setMirrorNeedsRevert","setAutoScrollEnabled","ElementScrollController","setScrollTop","setScrollLeft","isHitComboAllowed","MoreLinkContainer","isPopoverOpen","popoverId","handleLinkEl","linkEl","buildPublicSeg","allSegs","handlePopoverClose","moreCnt","shortText","alignmentElRef","popoverContent","updateParentEl","NamedTimeZoneImpl","NowIndicatorContainer","isAxis","PositionCache","originEl","isHorizontal","originClientRect","buildElHorizontals","buildElVerticals","originClientLeft","lefts","rights","originClientTop","tops","bottoms","leftToIndex","leftPosition","topToIndex","topPosition","getWidth","leftIndex","topIndex","similarTo","otherCache","SegHierarchy","getEntryThickness","thickness","strictOrder","allowReslicing","maxCoord","maxStackCnt","levelCoords","entriesByLevel","stackCnts","addSegs","hiddenEntries","insertEntry","findInsertion","isInsertionValid","insertEntryAt","handleInvalidInsertion","levelCoord","stackCnt","touchingEntry","hiddenEntry","splitEntry","barrier","entrySpan","barrierSpan","lateral","level","newEntry","levelCnt","candidateCoord","touchingLevel","touchingLateral","trackingLevel","trackingCoord","trackingEntry","trackingEntries","searchRes","lateralIndex","trackingEntryBottom","destLevel","destLateral","toRects","Slicer","sliceBusinessHours","_sliceBusinessHours","sliceDateSelection","_sliceDateSpan","_sliceEventStore","sliceEventDrag","_sliceInteraction","sliceEventResize","forceDayIfListItem","sliceProps","extraArgs","eventSegs","dateSelectionSegs","businessHourSegs","fgEventSegs","bgEventSegs","sliceNowDate","rangeRes","sliceEventRanges","affectedInstances","activeDateSpanRange","eventRanges","sliceEventRange","Splitter","getKeysForEventDefs","_getKeysForEventDefs","splitDateSelection","_splitDateSpan","splitEventStore","_splitEventStore","splitIndividualUi","_splitIndividualUi","splitEventDrag","_splitInteraction","splitEventResize","eventUiBuilders","splitProps","keyInfos","getKeyInfo","defKeys","dateSelections","eventStores","eventDrags","eventResizes","keyInfo","buildEventUi","dateSpans","getKeysForDateSpan","getKeysForEventDef","splitStores","splitHashes","splitStates","affectedStores","mutatedKeysByDefId","mutatedStores","populate","ViewContainer","WeekNumberContainer","WindowScrollController","addDurations","allowContextMenu","allowSelection","webkitUserSelect","asCleanDays","asRoughMinutes","asRoughSeconds","buildEventRangeKey","createScrollResponder","compareNumbers","computeInnerRect","goWithinPadding","doFromWindowViewport","outerRect","constrainPoint","diffPoints","point1","point2","diffWeeks","disableCursor","enableCursor","findDirectChildren","formatIsoMonthStr","formatIsoTimeString","getRectCenter","getSegMeta","segRange","getSlotClassNames","getStickyFooterScrollbar","getStickyHeaderDates","groupIntersectingEntries","merges","filteredMerges","hungryMerge","hasBgRendering","interactionSettingsToStore","isDateSelectionValid","isDateSpansEqual","isInteractionValid","isMultiDayRange","onMouseEnter","onMouseLeave","currentMatchedChild","mouseOverEv","realOnMouseLeave","mouseLeaveEv","memoizeArraylike","currentArgSets","currentResults","newArgSets","currentLen","newLen","memoizeHashlike","currentArgHash","currentResHash","newArgHash","newResHash","optionSets","multiplyDuration","rawDefs","rawDef","parseDragMeta","leftoverProps","pointInsideRect","preventContextMenu","preventSelection","existingEventStore","expandRange","master","filteredDefs","filteredInstances","removeExact","exactVal","removeCnt","renderFill","fillType","renderScrollShim","fetchOptions","URLSearchParams","fetchRes","parsedResponse","newDateEnv","sortEventSegs","eventOrderSpecs","objs","translateRect","normalizedSuccessCallback","normalizedFailureCallback","wrappedSuccess","wrappedFailure","whenTransitionDone","realCallback","wholeDivideDurations","numerator","denominator","localRes","parseMarker","index_cjs","dayGrid","DayGridView","TableDateProfileGenerator","dayGridDay","dayGridWeek","dayGridMonth","dayGridYear","internal_cjs","preact_cjs","TableView","headerElRef","renderSimpleLayout","headerRowContent","bodyContent","renderHScrollLayout","ScrollGrid","colGroups","splitSegsByRow","byRow","splitSegsByFirstCol","byCol","splitInteractionByRow","DEFAULT_TABLE_EVENT_TIME_FORMAT","hasListItemDisplay","TableBlockEvent","TableListItemEvent","TableCellMoreLink","compileSegs","invisibleSegs","singlePlacements","isForcedInvisible","DEFAULT_WEEK_NUM_FORMAT","TableCell","rootElRef","dayNumberId","currentEndIncl","currentFirstYear","currentFirstMonth","currentLastYear","currentLastMonth","renderTopInner","innerElRef","showWeekNumber","forceDayTop","fgContentElRef","fgContent","moreMarginTop","bgContent","generateSegKey","generateSegUid","resliceSeg","spanStart","spanEnd","DayGridSegHierarchy","hiddenConsumes","forceHidden","segInputs","excludeHidden","touchingEntryId","TableRow","cellElRefs","frameElRefs","fgElRefs","segHarnessRefs","framePositions","maxContentHeight","segHeights","isForced","updateSizing","businessHoursByCol","bgEventSegsByCol","highlightSegsByCol","getHighlightSegs","mirrorSegsByCol","getMirrorSegs","singleColPlacements","multiColPlacements","moreCnts","moreMarginTops","hierarchy","segEntry","segUid","unknownHeightSegs","segRects","leftoverMargins","allRects","rectsByEachCol","currentHeight","currentMarginTop","absoluteTop","multiPlacements","isFirstCol","hiddenSpan","cell","normalFgNodes","renderFgSegs","mirrorFgNodes","mirrorSegs","colPlacements","topsByInstanceId","showDayNumbers","showWeekNumbers","renderFillSegs","cellMinHeight","prevState","currentProps","segPlacements","leftRightCss","isExternalSizingChange","frameEls","newPositionCache","oldSegHeights","newSegHeights","querySegHeights","limitByContentHeight","computeMaxContentHeight","segElMap","firstKey","fcContainerEl","getCellEls","elMap","TableRows","splitBusinessHourSegs","splitBgEventSegs","splitAllDaySegsByRow","splitFgEventSegs","splitDateSelectionSegs","rowRefs","businessHourSegsByRow","bgEventSegsByRow","fgEventSegsByRow","dateSelectionSegsByRow","eventDragByRow","eventResizeByRow","renderRowIntro","firstCellEl","rowPositions","rowObj","colPositions","getCellRange","getCellEl","isSegAllDay","Table","needsScrollReset","limitViaBalanced","colGroupNode","requestScrollReset","flushScrollReset","subjectEl","DayTableSlicer","dayTableModel","DayTable","slicer","tableRef","headerAlignElRef","buildDayTableModel","buildDayTableRenderRange","snapToWeek","lastMonthRenderStart","headerContent","contentArg","touchMouseIgnoreWait","ignoreMouseDepth","listenerCnt","isWindowTouchMoveCancelled","PointerDragging","handleSelector","shouldIgnoreMove","shouldWatchScroll","isTouchDragging","wasTouchScroll","handleMouseDown","shouldIgnoreMouse","tryStart","createEventFromMouse","initScrollWatch","handleMouseMove","handleMouseUp","recordCoords","createEventFromTouch","targetEl","handleTouchMove","handleTouchScroll","handleScroll","prevScrollX","prevPageX","prevScrollY","prevPageY","origPageX","origPageY","onWindowTouchMove","querySubjectEl","downEl","destroyScrollWatch","cancelTouchScroll","isFirst","ElementMirror","sourceEl","mirrorEl","sourceElRect","revertDuration","origScreenX","origScreenY","updateElPosition","handleMove","setIsVisible","needsRevertAnimation","doRevertAnimation","finalSourceElRect","getMirrorEl","boxSizing","ScrollGeomCache","scrollController","doesListening","handleScrollChange","origScrollTop","origScrollLeft","computeClientRect","getEventTarget","ElementScrollGeomCache","WindowScrollGeomCache","performance","AutoScroller","scrollQuery","edgeThreshold","maxVelocity","pointerScreenX","pointerScreenY","scrollCaches","everMovedUp","everMovedDown","everMovedLeft","everMovedRight","edge","computeBestEdge","handleSide","msSinceRequest","requestAnimation","scrollStartEl","buildCaches","yDelta","xDelta","scrollCache","invDistance","bestSide","leftDist","rightDist","topDist","bottomDist","queryScrollEls","FeaturefulElementDragging","touchScrollAllowed","mirrorNeedsRevert","isInteracting","isDelayEnded","isDistanceSurpassed","delayTimeoutId","onPointerDown","mirror","startDelay","handleDistanceSurpassed","onPointerMove","distanceSq","autoScroller","onPointerUp","tryStopDrag","handleDelayEnd","tryStartDrag","stopDrag","setIgnoreMove","OffsetTracker","origRect","computeLeft","computeTop","isWithinClipping","isIgnoredClipping","HitDragging","droppableStore","useSubjectCenter","requireInitial","disablePointCheck","initialHit","movingHit","finalHit","handlePointerDown","processFirstCoord","handleDragStart","handleDragMove","handlePointerUp","releaseHits","handleDragEnd","subjectRect","origPoint","adjustedPoint","queryHitForOffset","slicedSubjectRect","coordAdjust","forceHandle","hit","isHitsEqual","offsetTrackers","interactionSettings","bestHit","offsetTracker","originLeft","originTop","componentId","hit0","hit1","buildDatePointApiWithContext","DateClicking","hitDragging","DateSelecting","dragSelection","canSelect","handleHitUpdate","isFinal","dateSpan0","dateSpan1","EventDragging","subjectSeg","receivingContext","validMutation","mutatedRelevantEvents","origTarget","initialContext","fixedMirrorParent","receivingOptions","eventInstanceStart","massagers","massager","displayDrag","clearDrag","updatedEventApi","eventChangeArg","transformed","eventRemoveArg","draggedEl","addedEventDef","addedEventInstance","addedEventApi","eventAddArg","SELECTOR","nextContext","prevContext","initialCalendar","EventResizing","draggingSegEl","draggingSeg","querySegEl","isFromStart","OPTION_REFINERS","LISTENER_REFINERS","dateClick","eventDragStart","eventDragStop","eventDrop","eventResizeStart","eventResizeStop","eventReceive","eventLeave","ExternalElementDragging","suppliedDragMeta","droppableEvent","dragMeta","buildDragMeta","canDropElOnCalendar","defProps","finalView","addingEvents","dataAttrPrefix","prefixedName","InferredElementDragging","mirrorSelector","currentMirrorEl","handlePointerMove","isRecentPointerDateSelect","matchesCancel","matchesEvent","selectInfo","onDocumentPointerDown","onDocumentPointerUp","documentPointer","Draggable","itemSelector","eventData","ThirdPartyDraggable","containerOrSettings","lim","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","hexParse","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","deg","hslString","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","unpacked","tkeys","nk","transparent","RGB_RE","rgbParse","rgbString","modHSL","tmp","fromObject","Color","_rgb","_valid","mix","w2","w1","interpolate","rgb1","rgb2","alpha","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","index_esm","b2p","keymap","commands$1","schemaList","createChainableState","transaction","storedMarks","applyTransaction","reconfigure","CommandManager","editor","rawCommands","extensionManager","commands","customState","hasCustomState","buildProps","command","getMeta","chain","createChain","createCan","startTr","shouldDispatch","callbacks","hasStartTransaction","onceFn","getExtensionField","splitExtensions","extensions","baseExtensions","nodeExtensions","markExtensions","getAttributesFromExtensions","extensionAttributes","nodeAndMarkExtensions","defaultAttribute","rendered","renderHTML","parseHTML","keepOnSplit","isRequired","addGlobalAttributes","globalAttribute","attribute","addAttributes","mergedAttr","getNodeType","nameOrType","mergeAttributes","mergedAttributes","valueClasses","existingClasses","insertClasses","valueClass","styleMap","getRenderedAttributes","nodeOrMark","callOrReturn","isEmptyObject","fromString","injectExtensionAttributesToParseRule","parseRule","getAttrs","oldAttributes","newAttributes","cleanUpSchemaItem","getSchemaByResolvedExtensions","allAttributes","topNode","fields","extendNodeSchema","marks","atom","whitespace","linebreakReplacement","defining","isolating","extensionAttribute","parseDOM","toDOM","HTMLAttributes","renderText","toText","extendMarkSchema","excludes","spanning","Schema","getSchemaTypeByName","isExtensionRulesEnabled","enabledExtension","getHTMLFromFragment","fragment","documentFragment","DOMSerializer","fromSchema","serializeFragment","getTextContentFromNodes","$from","maxMatch","textBefore","sliceEndPos","parentOffset","nodesBetween","isAtom","isText","isRegExp","InputRule","run$1","plugin","composing","nodeBefore","nodeAfter","inputRuleMatch","replaceWith","setMeta","inputRulesPlugin","Plugin","stored","simulatedInputMeta","selectionSet","docChanged","handleTextInput","handleDOMEvents","compositionend","$cursor","isInputRules","isPlainObject","Mark","addOptions","configure","extendedConfig","handleExit","currentPos","currentMarks","removeMark","removeStoredMark","insertText","PasteRule","tiptapDragFromOtherEditor","pasteRulesPlugin","dropEvent","dragSourceElement","isPastedFromProseMirror","isDroppedFromProseMirror","pasteEvent","ClipboardEvent","DragEvent","processEvent","pasteEvt","chainableState","isTextblock","resolvedFrom","resolvedTo","matchAll","pasteRuleMatch","textBetween","handleDragstart","dom","handleDragend","dragFromOtherEditor","deleteRange","paste","_view","appendTransaction","transactions","oldState","isDrop","simulatedPasteMeta","isSimulatedPaste","DataTransfer","setData","findDiffStart","findDiffEnd","findDuplicates","ExtensionManager","splittableMarks","setupExtensions","resolvedExtensions","duplicatedNames","addExtensions","priorityA","priorityB","addCommands","inputRules","pasteRules","allPlugins","addKeyboardShortcuts","defaultBindings","ArrowRight","bindings","shortcut","keyMapPlugin","addInputRules","enableInputRules","addPasteRules","enablePasteRules","addProseMirrorPlugins","proseMirrorPlugins","nodeViews","addNodeView","getPos","decorations","innerDecorations","extensionStorage","onBeforeCreate","onCreate","onUpdate","onSelectionUpdate","onTransaction","onDestroy","Extension","getTextBetween","startNode","blockSeparator","textSerializers","textSerializer","getTextSerializersFromSchema","ClipboardTextSerializer","PluginKey","clipboardTextSerializer","$to","object1","object2","findMarkInSet","isMarkInSet","getMarkRange","$pos","childAfter","childBefore","startPos","endPos","nodeSize","childCount","getMarkType","isTextSelection","TextSelection","minMax","resolveFocusPosition","selectionAtStart","Selection","atStart","selectionAtEnd","atEnd","minPos","isAndroid","isiOS","isSafari","removeWhitespaces","elementFromString","wrappedValue","DOMParser","parseFromString","createNodeFromContent","parseOptions","isTextContent","fromArray","nodeFromJSON","errorOnInvalidContent","cause","hasInvalidContent","invalidContent","contentCheckSchema","__tiptap__private__unknown__catch__all__node","outerHTML","parseSlice","selectionToInsertionEnd","startLen","bias","ReplaceStep","ReplaceAroundStep","maps","_from","_to","_newFrom","newTo","setSelection","near","isMacOS","isNodeActive","typeOrName","nodeRanges","relativeFrom","relativeTo","matchedNodeRanges","nodeRange","sum","getSchemaTypeNameByName","deleteProps","propOrProps","createDocument","getMarkAttributes","$head","markItem","defaultBlockAt","edgeCount","hasRequiredAttrs","findParentNodeClosestToPos","depth","findParentNode","getText","getNodeAttributes","nodeItem","getAttributes","schemaType","removeDuplicates","seen","getMarksBetween","getSplittedAttributes","typeName","isMarkActive","markRanges","matchedRange","markRange","excludedRange","isList","isNodeEmpty","checkChildren","ignoreWhitespace","isLeaf","isContentEmpty","rewriteUnknownContentInner","validMarks","validNodes","rewrittenContent","unsupported","fallbackToParagraph","ensureMarks","filteredMarks","joinListBackwards","listType","nodeAt","canJoin","joinListForwards","clearContent","emitUpdate","setContent","clearNodes","$mappedFrom","$mappedTo","blockRange","targetLiftDepth","liftTarget","defaultType","contentMatchAt","setNodeMarkup","lift","createParagraphNear","cut","originRange","targetPos","state$1","contentSlice","newPos","insert","deleteCurrentNode","$anchor","scrollIntoView","deleteNode","deleteSelection","keyboardShortcut","exitCode","extendMarkRange","delayedFocus","hasFocus","isSameSelection","setStoredMarks","insertContent","insertContentAt","emitContentError","disableCollaboration","collaboration","preserveWhitespace","updateSelection","applyInputRules","applyPasteRules","enableContentCheck","newContent","isOnlyTextContent","isOnlyBlockContent","joinBackward","joinDown","joinForward","joinItemBackward","joinPoint","joinItemForward","joinTextblockBackward","joinTextblockForward","joinUp","alt","ctrl","capturedTransaction","captureTransaction","someProp","newStep","maybeStep","liftEmptyBlock","liftListItem","newlineInCode","resetAttributes","markType","addMark","AllSelection","selectNodeBackward","selectNodeForward","selectParentNode","selectTextblockEnd","selectTextblockStart","setMark","addStoredMark","trimmedFrom","trimmedTo","newMarkType","isInSet","someNodeSupportsMark","inlineContent","allowsMarkType","_pos","isInline","parentAllowsMarkType","currentMarksAllowMarkType","otherMark","setNode","attributesToCopy","sameParent","setBlockType","updatedState","setNodeSelection","NodeSelection","setTextSelection","resolvedEnd","sinkListItem","splitBlock","keepMarks","canSplit","deflt","indexAfter","$first","canReplaceWith","splitListItem","overrideAttrs","grandParent","depthBefore","depthAfter","newNextTypeAttributes","nextType","contentMatch","createAndFill","Slice","sel","newTypeAttributes","toggleList","listTypeOrName","itemTypeOrName","itemType","parentList","validContent","canWrapInList","wrapInList","toggleMark","extendEmptyMarkRange","unsetMark","toggleNode","toggleTypeOrName","toggleType","toggleWrap","wrapIn","undoInputRule","undoable","getState","toUndo","docs","unsetAllMarks","updateAttributes","lastPos","trimmedFrom2","trimmedTo2","Commands","Drop","handleDrop","Editable","focusEventsPluginKey","FocusEvents","Keymap","handleBackspace","$parentPos","parentIsIsolating","parentPos","isAtStart","handleDelete","baseKeymap","pcKeymap","macKeymap","docChanges","ignoreTr","allFrom","allEnd","handlePaste","Tabindex","NodePos","actualDepth","resolvedPos","domAtPos","isNonTextAtom","childNodePos","nodeAttributes","attrKeys","firstItemOnly","childPos","createStyleTag","tiptapStyleTag","styleNode","Editor","injectCSS","injectNonce","editorProps","coreExtensionOptions","enableCoreExtensions","onContentError","onPaste","isCapturingTransaction","createExtensionManager","createCommandManager","createSchema","createView","commandManager","setProps","updateState","setEditable","registerPlugin","handlePlugins","unregisterPlugin","nameOrPluginKeyToRemove","prevPlugins","nameOrPluginKey","allExtensions","ext","EditorView","dispatchTransaction","EditorState","createNodeViews","prependClass","selectionHasChanged","nameOrAttributes","attributesOrUndefined","getJSON","getHTML","getCharacterCount","docView","$node","$doc","$nodes","NodeView","stopEvent","ignoreMutation","mount","contentDOM","onDragStart","_f","_g","dragHandle","domBox","handleBox","setDragImage","isDragEvent","isSelectable","isCopyEvent","isPasteEvent","isCutEvent","isClickEvent","Tracker","currentStep","deleted","newPosition","mapResult","getMap","canInsertNode","matchType","combineTransactionSteps","oldDoc","transform$1","escapeForRegEx","findChildren","nodesWithPos","descendants","findChildrenInRange","generateHTML","fromJSON","generateJSON","generateText","getChangedRanges","stepMap","newStart","newEnd","oldStart","oldEnd","oldRange","uniqueChanges","otherChange","getDebugJSON","increment","topNodeType","getNodeAtPosition","maxDepth","currentDepth","isAtEndOfNode","isAtStartOfNode","isNodeSelection","markInputRule","captureGroup","fullMatch","startSpaces","textStart","textEnd","markEnd","markPasteRule","nodeInputRule","matchStart","lastChar","insertionStart","nodePasteRule","getContent","posToDOMRect","coordsAtPos","rewriteUnknownContent","textInputRule","cutOff","textPasteRule","textblockTypeInputRule","$start","wrappingInputRule","wrapping","findWrapping","keepAttributes","joinPredicate","core","inputRegex","Blockquote","setBlockquote","toggleBlockquote","unsetBlockquote","starInputRegex","starPasteRegex","underscoreInputRegex","underscorePasteRegex","Bold","fontWeight","clearMark","setBold","toggleBold","unsetBold","TextStyleName","BulletList","itemTypeName","toggleBulletList","inputRule","backtickInputRegex","tildeInputRegex","CodeBlock","languageClassPrefix","exitOnTripleEnter","exitOnArrowDown","defaultLanguage","setCodeBlock","toggleCodeBlock","isAtEnd","endsWithDoubleNewline","endsWith","ArrowDown","vscode","vscodeData","textNode","replaceSelectionWith","pasteRegex","Code","exitable","setCode","toggleCode","unsetCode","setColor","unsetColor","removeEmptyTextStyle","dropcursor","Dropcursor","dropCursor","FontFamily","fontFamily","setFontFamily","unsetFontFamily","gapcursor","Gapcursor","gapCursor","allowGapCursor","HardBreak","setHardBreak","Heading","levels","setHeading","toggleHeading","history","History","newGroupDelay","undo","redo","HorizontalRule","setHorizontalRule","$originFrom","$originTo","currentChain","posAfter","Image","allowBase64","setImage","Italic","fontStyle","setItalic","toggleItalic","unsetItalic","ListItem","bulletListTypeName","orderedListTypeName","OrderedList","attributesWithoutStart","toggleOrderedList","Paragraph","setParagraph","Placeholder","emptyEditorClass","emptyNodeClass","showOnlyWhenEditable","showOnlyCurrent","includeChildren","anchor","isEmptyDoc","hasAnchor","decoration","Decoration","DecorationSet","Strike","consuming","setStrike","toggleStrike","unsetStrike","Subscript","setSubscript","toggleSubscript","unsetSubscript","Superscript","setSuperscript","toggleSuperscript","unsetSuperscript","colspan","rowspan","colwidth","tableRole","TableHeader","tables","getColStyleDeclaration","updateColumns","colgroup","table","cellMinWidth","overrideCol","overrideValue","totalWidth","fixedWidth","nextDOM","hasWidth","cssWidth","propertyValue","colElement","createColGroup","tableWidth","createCell","cellContent","createChecked","createTable","rowsCount","colsCount","withHeaderRow","tableNodeTypes","roles","headerCells","headerCell","header_cell","deleteTableWhenAllCellsSelected","CellSelection","cellCount","deleteTable","renderWrapper","handleWidth","View","lastColumnResizable","allowTableNodeSelection","insertTable","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","mergeCells","splitCell","toggleHeaderColumn","toggleHeader","toggleHeaderRow","toggleHeaderCell","mergeOrSplit","setCellAttribute","setCellAttr","goToNextCell","goToPreviousCell","fixTables","setCellSelection","anchorCell","headCell","columnResizing","defaultCellMinWidth","tableEditing","TextAlign","defaultAlignment","textAlign","setTextAlign","unsetTextAlign","toggleTextAlign","TextStyle","mergeNestedSpanStyles","childSpans","childSpan","childStyle","closestParentSpanStyleOfChild","Text","Underline","setUnderline","toggleUnderline","unsetUnderline","YOUTUBE_REGEX","YOUTUBE_REGEX_GLOBAL","isValidYoutubeUrl","Youtube","addPasteHandler","allowFullscreen","autoplay","ccLanguage","ccLoadPolicy","controls","disableKBcontrols","enableIFrameApi","interfaceLanguage","ivLoadPolicy","loop","modestBranding","nocookie","playlist","progressBarColor","rel","setYoutubeVideo","embedUrl","startAt","urlObject","URL","isPlaylist","searchParams","replaceAll","allowfullscreen","_prosemirrorcommands","_prosemirrordropcursor","_prosemirrorgapcursor","_prosemirrorhistory","_prosemirrorkeymap","_prosemirrormodel","_prosemirrorschemalist","_prosemirrorstate","_prosemirrortables","_prosemirrortransform","_prosemirrorview","extensionBlockquote","extensionBold","extensionBulletList","extensionCode","extensionCodeBlock","extensionDocument","extensionDropcursor","extensionGapcursor","extensionHardBreak","extensionHeading","extensionHistory","extensionHorizontalRule","extensionItalic","extensionListItem","extensionOrderedList","extensionParagraph","extensionStrike","extensionText","StarterKit","bold","blockquote","bulletList","codeBlock","hardBreak","heading","horizontalRule","italic","orderedList","paragraph","strike","_pointinpolygonhao2","_invariant","booleanPointInPolygon","polygon","geom","getGeom","bbox","polys","polyResult","ignoreBoundary","index_default","earthRadius","factors","centimeters","centimetres","degrees","feet","inches","kilometres","metres","millimeters","millimetres","nauticalmiles","nmi","radians","rad","yd","areaFactors","acres","hectares","feature","feat","ring","lineString","featureCollection","features","fc","multiLineString","multiPoint","multiPolygon","radiansToLength","lengthToRadians","radiansToDegrees","azimuthToBearing","bearingToAzimuth","bearing","convertArea","originalUnit","finalUnit","startFactor","finalFactor","convertLength","degreesToRadians","geometryCollection","geometries","lengthToDegrees","lineStrings","points","polygons","removeBbox","multiplier","validateBBox","validateId","_helpers","collectionOf","containsNumber","featureOf","geojsonType","getCoords","getType","chartjs","Chart","registerables","helpers_dataset","_request","_charts","_running","_lastDate","chart","anims","numSteps","_refresh","requestAnimFrame","draw","_active","_total","_getAnims","charts","complete","interpolators","boolean","c0","Animation","cfg","_fn","_easing","effects","linear","_start","_prop","_promises","remain","wait","Animations","_chart","_properties","animationOptions","animation","animatedProps","_animateOptions","$shared","$animations","animations","_createAnimations","anim","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","ilen","applyStack","dsIndex","singleMode","datasetIndex","otherValue","isNumberFinite","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iScale","iAxis","vAxis","indexScale","valueScale","_bottom","_visualValues","getFirstScaleId","scales","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","DatasetController","static","_ctx","_cachedDataOpts","_type","_parsing","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","fill","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","valueOrDefault","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","datasets","getDatasetMeta","scaleID","_getOtherScale","_destroy","unlistenArrayEvents","_dataCheck","iAxisKey","vAxisKey","adata","isExtensible","listenArrayEvents","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","resolveObjectKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","clip","chartArea","drawActiveElementsOnTop","getStyle","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","_resolveElementOptions","elementType","sharing","defined","datasetElementScopeKeys","prefixes","resolveNamedOptions","_resolveAnimations","datasetAnimationScopeKeys","_cacheable","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","updateElements","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","_arrayUnique","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","borderSkipped","enableBorderRadius","parseEdge","startEnd","setInflateAmount","inflateAmount","BarController","categoryPercentage","barPercentage","grouped","numbers","_index_","_value_","beginAtZero","bars","getBasePixel","ruler","_getRuler","vpixels","isNullOrUndef","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","currentParsed","iScaleValue","skipNull","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","baseValue","minBarLength","actualBase","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","axisCount","axisID","axisNumber","stackIndex","BubbleController","iPixel","vPixel","DoughnutController","animateRotate","animateScale","cutout","rotation","circumference","spacing","_scriptable","_indexable","legend","generateLabels","pointStyle","useBorderRadius","borderRadius","fillStyle","fontColor","lineDash","borderDash","lineDashOffset","borderDashOffset","lineJoin","borderJoinStyle","lineWidth","borderWidth","strokeStyle","legendItem","toggleDataVisibility","innerRadius","outerRadius","getter","_getRotation","toRadians","_getCircumference","_getRotationExtents","TAU","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","toPercentage","chartWeight","_getRingWeight","ratioX","ratioY","endAngle","startX","startY","sin","endX","endY","calcMax","_angleBetween","calcMin","maxX","maxY","HALF_PI","maxRadius","toDimension","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","arc","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","LineController","showLine","spanGaps","_dataset","animationsDisabled","_getStartAndCountOfVisiblePoints","_scaleRangesChanged","_datasetIndex","_decimated","segment","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","firstPoint","lastPoint","updateControlPoints","PolarAreaController","angleLines","circular","pointLabels","_parseObjectDataRadialScale","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","controllers","abstract","DateAdapterBase","override","members","endOf","adapters","metaset","intersect","lookupMethod","_reversePixels","_rlookupByKey","_lookupByKey","distanceToDefinedLo","distanceToDefinedHi","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","includeInvisible","isPointInArea","_isPointInArea","getNearestItems","distanceMetric","useX","useY","pt1","pt2","getCenterPoint","getProps","getAngleFromPoint","getAxisItems","rangeMethod","intersectsItem","getRelativePosition","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","updateMaxPadding","boxPadding","updateDims","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","getMargins","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","placed","stackWeight","layouts","addBox","_layers","removeBox","layoutItem","toPadding","layoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","verticalBoxes","horizontalBoxes","each","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","updatePos","BasePlatform","acquireContext","canvas","releaseContext","getDevicePixelRatio","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","pointermove","pointerup","pointerout","isNullOrEmpty","eventListenerOptions","supportsEventListenerOptions","nodeListContains","createAttachObserver","observer","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","currentDevicePixelRatio","createResizeObserver","_getParentNode","throttled","contentRect","releaseObserver","createProxyAndListen","DomPlatform","renderHeight","renderWidth","displayWidth","readUsedSize","displayHeight","proxies","$proxies","attach","_detectPlatform","_isDomSupported","OffscreenCanvas","tooltipPosition","newTicks","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","getTickMarkLength","drawTicks","tickLength","getTitleHeight","font","toFont","lineHeight","titleAlign","align","_toLeftRightCenter","Scale","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","finiteOrDefault","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","grace","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","autoSkip","determinedMaxTicks","_tickSize","maxScale","maxChart","ticksLimit","majorIndices","major","numMajorIndices","evenMajorSpacing","_factorize","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","minRotation","maxRotation","tickWidth","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","_limitValue","toDegrees","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","jlen","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","gc","_measureText","gcLen","valueAt","pixel","_int16Range","_alignPixel","getDecimalForPixel","getBaseValue","optionTicks","rot","autoSkipPadding","_computeGridLineItems","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x2","y2","positionAxisID","limit","optsAtIndex","optsAtIndexBorder","lineColor","dash","dashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","tickAndPadding","hTickAndPadding","lineCount","textOffset","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","labelOffset","halfCount","strokeColor","textStrokeColor","strokeWidth","textStrokeWidth","backdrop","tickTextAlign","showLabelBackdrop","labelPadding","backdropPadding","backdropColor","_computeLabelArea","drawBackground","fillRect","drawGrid","drawLine","setLineDash","beginPath","moveTo","lineTo","stroke","drawOnChartArea","drawBorder","lastLineWidth","drawLabels","clipArea","renderTextOptions","unclipArea","drawTitle","titleX","titleY","_alignStartEnd","gz","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","itemDefaults","defaultRoutes","propertyParts","sourceName","sourceScope","targetName","targetScope","descriptors","describe","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","getPlugin","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","_capitalize","PluginService","notify","hook","_createDescriptors","_descriptors","_oldCache","_notifyStateChanges","localIds","local","getOpts","pluginOpts","previousDescriptors","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","initOptions","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","defaultId","defaultScaleOptions","mergeIf","defaultID","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","resolver","subPrefixes","getResolver","isScriptable","isIndexable","hasFunction","subResolver","_attachContext","descriptorDefaults","resolverCache","_createResolver","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getChart","moveNumericKeys","intKey","invalidatePlugins","userConfig","initialCanvas","existingChart","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_hiddenIndices","_doResize","resizeDelay","_initialize","maintainAspectRatio","responsive","retinaScale","clearCanvas","_resizeBeforeDraw","newSize","newRatio","onResize","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","autoPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","setsEqual","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getDatasetClipArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","_elementsEqual","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","onHover","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","_readValueToProps","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","closePath","ArcElement","selfJoin","fullCircles","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","_isBetween","halfAngle","halfRadius","radiusOffset","angleMargin","outerAngleClip","_normalizeAngle","innerAngleClip","clipWidth","lineCap","borderCapStyle","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","_steppedLineTo","tension","cubicInterpolationMode","_bezierCurveTo","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","capBezierPoints","_path","_points","_segments","_pointsUpdated","_updateBezierControlPoints","segments","_computeSegments","_boundSegments","_interpolate","_steppedInterpolation","_bezierInterpolation","_pointInLine","interpolated","segmentMethod","inRange$1","hitRadius","PointElement","hoverRadius","mouseX","mouseY","inXRange","inYRange","drawPoint","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","toTRBL","toTRBLCorners","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","addRectPath","addRoundedRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","containsColorsDefinitions","plugin_colors","forceOverride","chartOptions","containsColorDefenition","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","beforeElementsUpdate","xAxis","decimated","pointCount","samples","bucketWidth","sampledIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minIndex","maxIndex","xMin","intermediateIndex1","intermediateIndex2","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","linePoints","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","firstCh","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","simpleArc","_drawfill","sourcePoints","below","lineOpts","above","clipVertical","clipHorizontal","clipY","lineLoop","clipX","tpoints","targetSegments","tgt","subBounds","fillSources","_boundSegment","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","itemWidth","measureText","_itemHeight","heightLimit","currentColWidth","currentColHeight","legendItemText","fontLineHeight","calculateLegendItemHeight","adjustHitBoxes","rtlHelper","getRtlAdapter","hitbox","leftForLtr","_draw","defaultColor","halfFontSize","overrideTextDirection","textDirection","textWidth","setWidth","drawOptions","SQRT2","xPlus","drawPointLegend","yBoxTop","xBoxLeft","_textX","strikethrough","restoreTextDirection","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","hoveredItem","sameItem","plugin_legend","afterEvent","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","plugin_subtitle","positioners","average","xSet","eventPosition","nearestElement","distanceBetweenPoints","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","determineAlignment","getBackgroundPoint","cornerRadius","paddingAndSize","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","fillText","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","_fallback","Colors","Decimation","Filler","SubTitle","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","addedLabels","relativeLabelSize","minSpacing","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","niceNum","almostWhole","almostEquals","_decimalPlaces","tickValue","_setMinAndMaxByKey","LinearScale","Ticks","log10Floor","log10","changeExponent","isMajor","tickVal","rangeExp","rangeStep","LogarithmicScale","logarithmic","_zero","minExp","significand","lastTick","getTickBackdropHeight","measureLabelSize","_longestText","determineLimits","updateLimits","hLimits","vLimits","createPointLabelItem","itemOpts","outerDistance","drawingArea","additionalAngle","pointLabelPosition","getPointPosition","isNotOverlapped","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","centerPointLabels","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","getPointLabelContext","plFont","setCenterPoint","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","gridLineOpts","INTERVALS","common","UNITS","sorter","adapter","_adapter","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","addTick","timestamps","_lookup","ticksFromTimestamps","majorUnit","TimeScale","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","minor","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","_adapters","color$1","dimension","klen","_merger","sval","merger","_mergerIf","keyResolvers","_splitKey","PITAU","INFINITY","RAD_PER_DEG","QUARTER_PI","TWO_THIRDS_PI","_angleDiff","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","mid","ti","arrayEvents","atEdge","elasticIn","elasticOut","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","colors","intlCache","maxTick","logDelta","numDecimal","getScope$1","_appliers","family","hoverBackgroundColor","hoverBorderColor","hoverColor","scopeObject","targetScopeObject","privateName","appliers","toFontString","longest","xOffset","yOffset","xOffsetW","yOffsetW","drawImage","ellipse","SQRT1_2","decorateText","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","drawBackdrop","oldColor","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","objProps","parentContext","rootScopes","getTarget","finalRootScopes","_scopes","_rootScopes","_getTarget","_keys","_cached","readKey","needsSubResolver","createSubResolver","getKeysFromAllScopes","_storage","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","EPSILON","getPoint","getValueAxis","splineCurve","middlePoint","afterPoint","d01","d12","s01","s12","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","capControlPoint","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getPositionedStyle","round1","passiveSupported","propertyFn","between","normalizeSegment","startBound","endBound","prevValue","inside","subStart","shouldStart","shouldStop","readStyle","styleChanged","prevStyle","getSizeForArea","minmax","keepZero","halfWidth","subProxy","_subProxy","receiver","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","cp1","cp2","segmentOptions","chartContext","baseStyle","addStyle","p0","p0DataIndex","p1DataIndex","_deprecated","arrayOfThings","garbageCollect","nestedThing","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","midpoint","controlPoints","inArea","inAreaPrev","inAreaNext","rounded","resetTransform","clearRect","loopable","pixelSize","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","bbWidth","bbHeight","containerSize","containerStyle","containerBorder","containerPadding","borders","paddings","borderBox","rectX","_itemWidth","_chartjs","roundedRange","niceRange","fraction","getPropertyPriority","prevTextDirection","strokeText","cacheable","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","argsToUse","ticking","stub","OrderedMap","newKey","addToStart","addToEnd","addBefore","place","without","toObject","splitter","resulterrbound","elen","flen","Qnew","bvirt","enow","fnow","eindex","findex","hindex","vec","Float64Array","C1","C2","orient2d","ay","bx","detleft","detright","det","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","_0","s1","s0","t1","u3","acx","bcx","acy","bcy","errbound","C1len","C2len","Dlen","ii","u1","u2","currentP","nextP","numContours","contour","contourLen","prosemirrorTransform","prosemirrorModel","prosemirrorState","atBlockStart","endOfTextblock","$cut","findCutBefore","deleteBarrier","textblockAt","delStep","replaceStep","findFrom","joinTextblocksAround","beforeText","afterText","afterPos","_child","scan","_state$selection","atBlockEnd","findCutAfter","_state$selection2","_state$selection4","_state$selection5","splitBlockAs","splitNode","_$from","splitDepth","mapFrom","splitType","splitPos","conn","isolated","compatibleContent","canReplace","canDelAfter","validEnd","$joinAt","selAfter","_wrap","afterDepth","_end","selectTextblockSide","chainCommands","backspace","del","pcBaseKeymap","macBaseKeymap","os","autoJoin","isJoinable","isGeneric","joinable","_i3","sharedDepth","maybeChild","_i4","nodeSel","_state$selection3","_state$selection6","applicable","_state$selection$rang","hasMarkup","_i2","_state$selection$rang2","splitBlockKeepMarks","removeWhenPresent","enterAtoms","enterInlineAtoms","dropSpace","includeWhitespace","_state$selection8","_ranges$i","_loop2","_ranges$i2","SelectionRange","rangeHasMark","missing","_ranges$i3","spaceStart","spaceEnd","_state$selection7","_toPropertyKey","prim","DropCursorView","editorView","Constructor","lastDragEvent","protoProps","computeTarget","updateOverlay","setCursor","editorDOM","editorRect","nodeDOM","nodeRect","_halfWidth","parentLeft","parentTop","parentScaleX","parentScaleY","_this3","posAtCoords","disableDropCursor","dropPoint","scheduleRemoval","staticProps","prosemirrorKeymap","prosemirrorView","GapCursor","_prosemirrorState$Sel","subClass","superClass","Derived","hasNativeReflectConstruct","NewTarget","GapBookmark","needsGap","mustMove","$cur","_$cur","findGapCursorFrom","jsonID","createGapCursor","keydownHandler","ArrowLeft","ArrowUp","dirStr","$found","clickPos","beforeinput","frag","drawGapCursor","createSelectionBetween","RopeSequence","Branch","eventCount","preserveItems","remap","remapping","addAfter","appendMap","histOptions","lastItem","cutPoint","DEPTH_OVERFLOW","Mapping","mirrorPos","mirrorOffset","rebasedTransform","rebasedCount","rebasedItems","newUntil","iRebased","getMirror","newMaps","branch","emptyItemCount","upto","HistoryState","undone","prevRanges","prevComposition","rangesFor","mapRanges","cachedPreserveItems","cachedPreserveItemsPlugins","mustPreserveItems","historyPreserveItems","historyKey","closeHistoryKey","buildCommand","hist","popEvent","addTransform","getBookmark","newHist","historyState","undoNoScroll","redoNoScroll","closeHistory","rebased","historyTr","addMaps","composition","newGroup","adjacent","isHistoryTransaction","redoDepth","undoDepth","w3cKeyname","mac","windows","normalizeKeyName","baseName","direct","fromCode","arr2","_wrapNativeSuper","Wrapper","_construct","Parent","_findDiffStart","childA","childB","sameMarkup","tA","tB","surrogateHigh","surrogateLow","_findDiffEnd","posA","posB","iA","iB","_iA","_iB","nodeStart","leafText","nodeText","withText","retIndex","curPos","toStringInner","joined","compareDeep","rank","checkAttrs","ReplaceError","_Error","openStart","openEnd","insertInto","removeRange","openIsolating","_content$findIndex","_content$findIndex2","indexTo","offsetTo","replaceChild","dist","_content$findIndex3","_replace","replaceOuter","_prepareSliceForRepla","$along","resolveNoCache","replaceThreeWay","replaceTwoWay","checkJoin","main","$before","$after","$end","ResolvedPos","resolveDepth","dOff","removeFromSet","pred","NodeRange","_node$content$findInd","resolveCache","elts","ResolveCache","resolveCacheSize","emptyAttrs","defaultAttrs","sameSet","includeParents","_node$content$findInd2","_this$content$findInd","_this$content$findInd2","resolveCached","toDebugString","wrapMarks","matchFragment","replacement","allowsMarks","checkContent","addToSet","markFromJSON","TextNode","_Node","ContentMatch","wrapCache","toEnd","finished","_match$next$i","_found","computeWrapping","via","_match$next$i2","nodeTypes","stream","TokenStream","expr","parseExpr","nfa","labeled","explore","nullFrom","_states","dfa","exprs","_next","_next2","work","dead","_state$next$j","tok","parseExprSeq","eat","parseExprSubscript","isInGroup","parseExprRange","parseNum","_edges$i","attr","hasDefault","_computeAttrs","built","given","_checkAttrs","_attr","initAttrs","Attribute","NodeType","markSet","compatible","computeAttrs","setFrom","fillBefore","topType","MarkType","instanceSpec","contentExprCache","contentExpr","markExpr","gatherMarks","_prop2","_type2","excl","wrappings","_mark","tags","matchedStyles","normalizeLists","ParseContext","addAll","finish","maxOpen","namespace","matchesContext","_loop3","domParser","schemaRules","blockTags","address","article","aside","div","dl","fieldset","figcaption","figure","h3","h4","h5","h6","hgroup","noscript","ol","pre","tfoot","ul","ignoreTags","listTags","wsOptionsFor","OPT_PRESERVE_WS","NodeContext","solid","activeMarks","localPreserveWS","topContext","topOptions","topMatch","findPositions","needsBlock","addTextNode","addElement","preserveWS","inlineContext","insertNode","domNodeBefore","findInText","findInside","matchAfter","outerWS","whiteSpace","ruleID","ruleFromNode","matchTag","ignoreFallback","closeParent","sync","oldNeedsBlock","leafFallback","innerMarks","readStyles","_innerMarks","addElementByRule","findPlace","_this4","_loop4","_after","matchStyle","continueAfter","_this5","startIn","contentElement","findAround","findAtPoint","addDOM","cautious","penalty","_found2","enterInner","textblockFromContext","closeExtra","nodeMarks","minLen","normalCompletion","didErr","_e2","markMayApply","applyMarks","topOpen","compareDocumentPosition","_this6","useRoot","minDepth","_ret2","_loop5","_match$edge","_this7","createDocumentFragment","markDOM","serializeMark","serializeNodeInner","_renderSpec2","_renderSpec","structure","xmlNS","blockArraysIn","domSerializer","nodesFromSchema","marksFromSchema","gatherToDOM","suspiciousAttributeCache","suspicious","space","_space","setAttributeNS","_renderSpec3","olDOM","ulDOM","liDOM","wrapRangeInList","doJoin","$insert","wrappers","joinBefore","itemAttrs","_tr","addListNodes","itemContent","listGroup","ordered_list","bullet_list","list_item","endOfList","indexBefore","nestedBefore","splitListItemKeepMarks","classesById","lastParent","_ranges$_i","replaceRange","replaceRangeWith","textOnly","findSelectionIn","selectionClass","warnedAboutTextSelection","checkTextSelection","_Selection","marksAcross","TextBookmark","dPos","_Selection2","_mapping$mapResult","NodeBookmark","_mapping$mapResult2","_Selection3","_super3","AllBookmark","Transaction","_prosemirrorTransform","_super4","curSelectionFor","curSelection","inheritMarks","FieldDesc","baseFields","_marks","_old","scrolledIntoView","pluginsByKey","filterTransaction","rootTr","trs","applyInner","haveNew","newInstance","$config","pluginFields","bindProps","createKey","readFromCache","addToCache","prosemirror_state","prosemirror_model","prosemirror_view","prosemirror_keymap","prosemirror_transform","cacheSize","cachePos","TableMap","problems","findCell","colCount","nextCell","rectBetween","leftA","rightA","topA","bottomA","leftB","rightB","topB","bottomB","cellsInRect","positionAt","rowStart","rowEnd","rowEndIndex","hasRowSpan","rowNode","rowWidth","prevRow","mapPos","colWidths","cellNode","colW","widthIndex","expectedPos","tableMap","badWidths","colWidth","freshColWidth","getCellAttrs","widthAttr","getFromDOM","setCellAttrs","setDOMAttr","validateColwidth","tableEditingKey","cellAround","isInTable","selectionCell","$anchorCell","$headCell","cellNear","pointsAtCell","moveCellForward","inSameTable","$cellA","$cellB","tableStart","removeColSpan","addColSpan","columnIsHeader","tableChanged","isRowSelection","rowSelection","isColSelection","colSelection","cellRect","extraLeft","extraRight","forEachCell","anchorTop","headTop","anchorBottom","headBottom","anchorRect","headRect","anchorLeft","headLeft","anchorRight","headRight","CellBookmark","drawCellSelection","fixTablesKey","changedDescendants","oldSize","curSize","tablePos","mustAdd","prob","convertTableNodeToArrayOfRows","tableNode","rowCount","colCount$1","rowIndex","colIndex","cellIndex","cellPos","topCellIndex","leftCellIndex","convertArrayOfRowsToTableNode","arrayOfNodes","newRows","oldRow","newCells","oldCell","newCell","newRow","moveRowInArrayOfRows","indexesOrigin","indexesTarget","directionOverride","rowsExtracted","positionOffset","findTable","findCellPos","getCellsInColumn","columnIndex","nodePos","getCellsInRow","getSelectionRangeInColumn","startColIndex","endColIndex","maybeEndIndex","indexes","maybeCells","firstSelectedColumnCells","firstRowCells","columnCells","getSelectionRangeInRow","startRowIndex","endRowIndex","firstSelectedRowCells","firstColumnCells","rowCells","transpose","selectedRect","addColumn","refColumn","removeColumn","mapStart","rowIsHeader","_table$nodeAt","addRow","rowPos","refRow","_table$nodeAt2","removeRow","nextRow","splitCellWithType","getCellType","_cellAround","baseAttrs","lastCell","isHeaderEnabledByType","cellPositions","useDeprecatedLogic","isHeaderRowEnabled","isHeaderColumnEnabled","selectionStartsAt","cellsRect","newType","relativeCellPos","deleteCellSelection","pastedCells","fitSlice","clipCells","isolateHorizontal","cellTop","cellLeft","isolateVertical","insertCells","recomp","emptyHead","start$1","emptyRow","shiftArrow","maybeSetSelection","atEndOfCell","newSel","cellSel","handleTripleClick","handleMouseDown$1","_cellUnderMouse","startDOMCell","domInCell","cellUnderMouse","$anchor$1","starting","mousePos","updateColumnsOnResize","col$1","_nextDOM$parentNode","columnResizingPluginKey","ResizeState","activeHandle","setHandle","setDragging","edgeCell","draggedWidth","resizeMinWidth","startWidth","updateHandle","displayColumnWidth","zeroes","__clipCells","__insertCells","__pastedCells","_plugin$spec","tableName","pluginState","mouseleave","_view$dom$ownerDocume","domWidth","event$1","pluginState$1","mapIndex","dragged","_columnResizingPlugin","findCellRange","anchorHit","headHit","indexTop","indexLeft","indexBottom","indexRight","mergedPos","mergedCell","mapped","moveTableColumn","originIndex","targetIndex","moveColParams","_getSelectionRangeInC","_getSelectionRangeInC2","indexesOriginColumn","indexesTargetColumn","newTable","$lastCell","firstCell","$firstCell","moveTableRow","moveRowParams","_getSelectionRangeInR","_getSelectionRangeInR2","indexesOriginRow","indexesTargetRow","afterFrom","beforeTo","fromCellBoundaryNode","toCellBoundaryNode","tableNodes","cellAttributes","cellAttrs","tableGroup","table_row","table_cell","table_header","factor16","makeRecover","recoverIndex","MapResult","delInfo","recover","StepMap","inverted","assoc","simple","oldIndex","newIndex","_maps","ownData","mirrors","setMirror","startSize","mirr","totalSize","inverse","appendMappingInverted","corr","stepsByID","Step","stepType","stepClass","StepResult","failed","mapFragment","AddMarkStep","_Step","oldSlice","fromReplace","RemoveMarkStep","_Step2","AddNodeMarkStep","_Step3","newSet","RemoveNodeMarkStep","deletedAfter","_Step4","_Step5","_super5","contentBetween","MAP_BIAS","deletedAcross","_slice","_Step6","_super6","gapFrom","gapTo","_this8","gap","removeBetween","_clearIncompatible","parentType","clearNewlines","replSteps","newline","allowedMarks","canCut","withAttrs","replaceNewlines","replaceLinebreaks","insertPoint","_d2","_index2","fitsTrivially","Fitter","unplaced","frontier","findFittable","placeNodes","openMore","dropNode","moveInline","mustMoveInline","placedSize","startDepth","pass","sliceDepth","contentAt","frontierDepth","_this$frontier$fronti","_this$unplaced","_this$unplaced2","openAtEnd","dropFromFragment","closeFrontierNode","openFrontierNode","taken","_this$frontier$fronti2","openEndCount","closeNodeStart","addToFragment","contentAfterFits","findCloseLevel","_this$frontier$i","dropInner","_this$frontier$d","cutByIndex","definesContent","definingForContent","closeFragment","oldOpen","newOpen","coveredDepths","AttrStep","_Step7","_super7","_this9","DocAttrStep","_Step8","_super8","_this10","TransformError","_super9","addStep","fromB","toB","targetDepths","preferredTarget","definingAsContext","preferredTargetIndex","leftNodes","preferredDepth","_d3","leftNode","openDepth","_i5","targetDepth","startSteps","_i6","_d4","_d5","_d6","covered","_d7","gapStart","gapEnd","splitting","_splitting","convertNewlines","beforeType","supportLinebreak","$full","attrsHere","startM","endM","typesAfter","typeAfter","removing","adding","toRemove","innerType","overrideChild","baseType","insertPos","fits","around","innerMatch","contentBefore","contentAfter","_slicedToArray","_unsupportedIterableToArray","allowArrayLike","domIndex","reusedRange","textRange","isEquivalentPosition","targetNode","targetOff","scanFor","atomElements","hasBlockDesc","pmViewDesc","ignoreForSelection","selectionCollapsed","domSel","focusNode","anchorNode","keyEvent","agent","ie_edge","ie_upto10","ie_11up","ie_version","documentMode","gecko","_chrome","chrome","chrome_version","safari","vendor","ios","android","webkit","webkit_version","windowRect","vp","scrollRectIntoView","startDOM","nonZero","scrollThreshold","scrollMargin","atTop","bounding","moveX","moveY","dX","dY","scrollStack","restoreScrollStack","dTop","_stack$i","preventScrollSupported","findOffsetInNode","coordsClosest","firstBelow","coordsBelow","dxClosest","rowBot","rowTop","childIndex","singleRect","inRect","startI","_posAtCoords","caretPositionFromPoint","offsetNode","caretRangeFromPoint","startContainer","_box","outsideBlock","sawBlock","nearestDesc","posBefore","posFromDOM","_findOffsetInNode","posAtStart","BIDI","_coordsAtPos","_view$docView$domFrom","domFromPos","supportEmptyRange","takeSide","flattenV","rectBefore","rectAfter","flattenH","_before","ignoreForCoords","withFlushedState","viewState","maybeRTL","cachedState","cachedDir","ViewDesc","dirty","outerDeco","innerDeco","posBeforeChild","domBefore","domAfter","_desc","posAtEnd","onlyNodes","getDesc","localPosFromDOM","descAt","TrailingHackViewDesc","WidgetViewDesc","_prev","domAtom","_enter","fromOffset","toOffset","childBase","parseRange","emptyChildAt","_this$domFromPos","anchorDOM","headDOM","selRange","domSelectionRange","brKludge","_anchorDOM","_offset","_after2","domSelExtended","collapse","startInside","endInside","contentLost","markDirty","_ViewDesc","ignoreSelection","relaxedSide","CompositionViewDesc","_ViewDesc2","textDOM","mut","MarkViewDesc","_ViewDesc3","reparseInView","replaceNodes","renderSpec","NodeViewDesc","_ViewDesc4","sameOuterDeco","localCompositionInfo","localComposition","compositionInChild","updater","ViewTreeUpdater","deco","onWidget","onNode","locals","decoIndex","restNode","parentIndex","compareSide","cutAt","forChild","insideNode","syncToMarks","placeWidget","compIndex","findNodeMatch","findIndexWithChild","updateNodeAt","updateNextNode","addTextblockHacks","destroyRest","protectLocalComposition","renderDescs","oldCSS","listStyle","_view$state$selection","compositionNode","textPos","childStart","compositionNodes","updateInner","updateOuterDeco","updateChildren","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","descObj","_spec","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","docViewDesc","_NodeViewDesc","pmIsDeco","inParent","trackWrites","parentDOM","_ViewDesc5","_NodeViewDesc2","multiType","selectNode","deselectNode","written","childDOM","OuterDecoLevel","noDeco","outerDOM","prevComputed","curComputed","curDOM","patchAttributes","prevList","curList","preMatch","parentDesc","curDesc","descI","fI","destroyBetween","maxKeep","matchesMark","scanTo","isLocked","markDesc","targetDesc","matchesNode","_preMatch","recreateWrapper","matchesWidget","requiresGeckoHackNode","addHackNode","matchesHack","hack","selectionFromDOM","inWidget","nearestDescNode","rangeCount","endContainer","selectionBetween","editorOwnsSelection","hasSelection","selectionToDOM","syncNodeSelection","mouseDown","curSel","domObserver","delaySelUpdate","setCurSelection","disconnectSelection","cursorWrapper","domSelection","img","resetEditableFrom","resetEditableTo","brokenSelectBetweenUneditable","temporarilyEditableNear","resetEditable","hideSelectionGuard","connectSelection","_view$docView$domFrom3","wasDraggable","lastSelectedViewDesc","clearNodeSelection","hasFocusAndSelection","moveSelectionBlock","$side","selectHorizontally","mods","$newHead","_$head","_node","nodeLen","isIgnorable","skipIgnoredNodes","moveOffset","isBlockNode","setSelFocus","findDirection","_mid","selectVertically","beyond","stopNativeHorizontalDelete","_view$state$selection2","switchEditable","_serializeForClipboard","detachedDoc","wrapMap","parseFromClipboard","plainText","inCode","asText","serializeNode","firstTag","trustedTypes","_policy","defaultPolicy","createPolicy","createHTML","styleSheets","CSSStyleRule","selectorText","contextNode","sliceData","inlineParents","closeSlice","lastWrap","inLast","addToSibling","closeRight","wrapped","withWrappers","_node2","closeRange","thead","tbody","caption","editHandlers","passiveHandlers","InputState","lastKeyCode","lastKeyCodeTime","lastClick","lastSelectionOrigin","lastSelectionTime","lastIOSEnter","lastIOSEnterFallbackTimeout","lastFocus","lastTouch","lastChromeDelete","composingTimeout","compositionEndedAt","compositionID","badSafariComposition","compositionPendingChanges","domChangeCount","eventHandlers","setSelectionOrigin","ensureListeners","currentHandlers","runCustomHandler","eventCoords","runHandlerOnContext","handleDoubleClick","selectionForTripleClick","TripleClickDrag","selectNodes","forceDOMFlush","endComposition","keydown","inOrNearComposition","forceFlush","_dir","_view$domSelectionRan3","keyup","keypress","selectNodeModifier","flushed","LeftMouseDown","MouseDown","mightDrag","_MouseDown","delayedSelectionSync","startDoc","allowDefault","addAttr","setUneditable","updateAllowDefault","selectedNode","selectAt","_MouseDown2","startSelection","contextmenu","timeoutComposition","scheduleComposeEnd","clearComposition","markParentsDirty","restarting","flushingSoon","markCursor","compositionstart","compositionupdate","_view$domSelectionRan4","_sel","pendingRecords","brokenClipboardAPI","doPaste","preferPlain","singleNode","replaceSelection","uris","_serializeForClipboar","clearData","selectNodeContents","plain","Dragging","dragCopyModifier","dragMoves","dragstart","_serializeForClipboar2","effectAllowed","dragend","eventPos","$mouse","beforeInsert","flushSoon","WidgetType","noSpec","oldOffset","InlineType","inclusiveStart","inclusiveEnd","findInner","_i7","childOff","mapInner","newLocal","_baseOffset","dSize","_i14","baseOffset","mustRebuild","_i11","fromLocal","toLocal","childOffset","gather","_i15","buildTree","_i12","_i13","_from2","byPos","mapChildren","addInner","_this11","takeSpansForNode","moveSpans","withoutNulls","removeInner","_span","_i8","_j2","_i9","dec","localSet","DecorationGroup","_i10","removeOverlap","localsInner","mappedDecos","member","forEachSet","spans","hasNulls","localStart","working","insertAhead","viewDecorations","observeOptions","characterData","characterDataOldValue","attributeOldValue","useCharData","SelectionState","DOMObserver","handleDOMChange","_this12","onCharData","suppressingSelectionUpdates","lastChangedTextNode","onSelectionChange","_this13","takeRecords","_this14","_this15","_scan","ignoreSelectionChange","typeOver","registerMutation","_step3","_iterator3","brs","_brs","_step4","_iterator4","blockParent","readSel","scrollToSelection","cssChecked","cssCheckWarned","_step5","_view$domSelectionRan5","_iterator5","attributeName","_i16","_mut$addedNodes$_i","rangeToSelectionRange","currentAnchor","resolveSelection","parsedSel","skipClosingAndOpening","fromEnd","mayOpen","__parseFromClipboard","__endComposition","_this16","_root","mounted","prevDirectPlugins","pluginViews","directPlugins","checkStateComponent","getEditable","updateCursorWrapper","buildNodeViews","computeDocDeco","preferredPos","preferredSide","from_","to_","_view$docView$parseRa","_anchor","lenA","lenB","_a$findDiffEnd","endA","endB","_sel2","$fromA","inlineChange","$newStart","$newEnd","suppressSelectionUpdates","markChange","chFrom","chTo","mkTr","_sel3","_tr2","curMarks","prevMarks","_i17","_i18","_tr3","updatePluginViews","updateStateInner","_name2","redraw","updateSel","pluginsChanged","nA","nB","_prop4","updateDoc","sel1","sel2","refDOM","refTop","newRefTop","oldScrollPos","overflowAnchor","localRect","forceSelUpdate","chromeKludge","textAfter","descAfter","lastChanged","descBefore","updateDraggedNode","_this17","domAfterPos","_i20","pluginView","destroyPluginViews","_i19","_plugin","movedPos","_i21","setActive","_this18","_ret3","_view$domSelectionRan","oldNode","oldOff","oldBidiLevel","caretBidiLevel","_view$domSelectionRan2","newOff","getComposedRanges","getTargetRanges","execCommand","contenteditable","_prop3","GOOD_LEAF_SIZE","leafAppend","leafPrepend","appendInner","Append","sliceInner","getInner","forEachInner","forEachInvertedInner","Leaf","prototypeAccessors","leftLen","DayGrid","_u","Iu","List","Bu","ResourceTimeGrid","ResourceTimeline","Dc","TimeGrid","Ic","createCalendar","Rc","destroyCalendar","Lc","is_array","index_of","array_from","object_keys","define_property","get_descriptor","get_descriptors","object_prototype","array_prototype","get_prototype_of","is_extensible","deferred","DESTROYING","EFFECT_OFFSCREEN","REACTION_IS_UPDATING","ERROR_VALUE","STATE_SYMBOL","LEGACY_PROPS","LOADING_ATTR_SYMBOL","ATTRIBUTES_CACHE","CLASS_CACHE","STYLE_CACHE","TEXT_CACHE","STALE_REACTION","IS_XHTML","HYDRATION_ERROR","NAMESPACE_HTML","hydration_mismatch","hydrate_node","hydrating","set_hydrating","set_hydrate_node","hydrate_next","get_next_sibling","skip_nodes","COMMENT_NODE","HYDRATION_END","HYDRATION_START","HYDRATION_START_ELSE","read_hydration_instruction","equals","safe_equals","lifecycle_outside_component","component_context","set_component_context","get_or_init_context_map","runes","create_user_effect","context_map","micro_tasks","run_micro_tasks","queue_micro_task","is_flushing_sync","queueMicrotask","flush_tasks","handle_error","effect","active_effect","active_reaction","REACTION_RAN","EFFECT","invoke_error_boundary","DESTROYED","BOUNDARY_EFFECT","set_signal_status","signal","update_derived_status","derived","CONNECTED","CLEAN","MAYBE_DIRTY","clear_marked","DERIVED","WAS_MARKED","defer_effect","dirty_effects","maybe_dirty_effects","DIRTY","is_store_binding","without_reactive_context","previous_reaction","previous_effect","set_active_reaction","set_active_effect","_hydrate_open","_children","_effect","_main_effect","_pending_effect","_failed_effect","_offscreen_fragment","_local_pending_count","_pending_count","_pending_count_update_queued","_dirty_effects","_maybe_dirty_effects","_effect_pending","_effect_pending_subscriber","_Boundary_brand","Boundary","transform_error","boundary_defineProperty","subscribers","effect_tracking","render_effect","untrack","comment","server_rendered_pending","HYDRATION_START_FAILED","serialized_error","_assertClassBrand","_hydrate_failed_content","_hydrate_pending_content","_hydrate_resolved_content","_render","EFFECT_TRANSPARENT","is_rendered","is_pending","has_pending_snippet","update_pending_count","batch","_update_pending_count","internal_set","get_effect_pending","current_batch","is_fork","skip_effect","oncommit","_handle_error","invoke_onerror","_create_reset","did_reset","calling_on_error","pause_effect","create_text","move_effect","transfer_effects","previous_ctx","Batch","ensure","_this$parent","destroy_effect","handle_error_result","transformed_error","unset_context","deactivate_batch","increment_pending","blocking","decrement","EFFECT_PRESERVED","reactions","rv","wv","OBSOLETE","user_derived","push_reaction_value","derived_safe_equal","execute_derived","prev_active_effect","is_destroying_effect","update_reaction","update_derived","increment_write_version","previous_batch","batch_values","unfreeze_derived_effects","update_effect","first_batch","last_batch","last_scheduled_effect","is_processing","collected_effects","legacy_updates","flush_count","_started","_commit_callbacks","_discard_callbacks","_pending","_blocking_pending","_deferred","_roots","_new_effects","_skipped_branches","_unskipped_branches","_decrement_queued","_Batch_brand","batch_defineProperty","unskip_effect","is_derived","_process","old_values","discard","async_deriveds","_unlink","register_created_effect","blocking_pending_count","ondiscard","settled","_is_deferred","skipped","roots","render_effects","updates","_traverse","reset_all","_defer_effects","reset_branch","_current_batch","earlier_batch","_find_earlier_batch","_merge","flush_queued_effects","_next_batch","next_batch","is_branch","INERT","is_dirty","BLOCK_EFFECT","reaction","was_flushing_sync","_Batch","eager_block_effects","unlink_effect","ordered_effects","schedule_effect","BRANCH_EFFECT","eager_effects","eager_effects_deferred","mutable_source","initial_value","immutable","trackable","should_proxy","untracking","EAGER_EFFECT","current_sources","updated_during_traversal","mark_reactions","untracked_writes","not_dirty","is_proxied_array","parent_version","update_version","with_parent","set_update_version","other_s","own_keys","$window","is_firefox","first_child_getter","next_sibling_getter","init_operations","element_prototype","node_prototype","text_prototype","get_first_child","is_text","merge_text_nodes","first_child","Comment","next_sibling","last_sibling","clear_text_content","create_element","validate_effect","rune","create_effect","parent_effect","parent_last","ROOT_EFFECT","RENDER_EFFECT","user_effect","user_pre_effect","template_effect","blockers","deriveds","previous_component_context","activate_batch","blocker_promise","decrement_pending","expression","should_suspend","deferreds","ASYNC","fulfil","execute_effect_teardown","previously_destroying_effect","set_is_destroying_effect","destroy_effect_children","remove_dom","HEAD_EFFECT","remove_reactions","transitions","pause_children","is_global","resume_effect","resume_children","is_updating_effect","new_deps","skipped_deps","write_version","read_version","dependencies","dependency","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_sources","previous_untracking","previous_update_version","remove_reaction","new_length","start_index","was_updating_effect","depends_on_old_values","should_connect","is_new","reconnect","PASSIVE_EVENTS","is_passive_event","event_symbol","all_registered_events","root_event_handles","event_name","target_handler","handle_event_propagation","HTMLMediaElement","delegated","delegate","last_propagated_event","handler_element","owner_document","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","assign_nodes","from_html","is_fragment","TEMPLATE_FRAGMENT","use_import_node","TEMPLATE_USE_IMPORT_NODE","has_start","elem","importNode","createComment","should_intro","set_text","_mount","intro","was_hydrating","previous_hydrate_node","transformError","anchor_node","$$events","registered_events","event_handle","counts","outro","mounted_components","Hi","Bi","offscreen_anchor","_batches","_onscreen","_offscreen","_outroing","_transition","_commit","_discard","BranchManager","onscreen","offscreen","on_destroy","if_block","elseif","branches","update_branch","has_branch","destroy_effects","to_destroy","preserved_effects","get_collection","get_key","render_fn","fallback_fn","EACH_IS_CONTROLLED","parent_node","each_array","first_run","to_animate","is_animated","EACH_IS_ANIMATED","skip_to_branch","stashed","measure","outrogroups","unfix","link","destroy_length","controlled_anchor","fix","fast_path","mismatch","create_item","EACH_ITEM_REACTIVE","EACH_ITEM_IMMUTABLE","EACH_INDEX_REACTIVE","next_node","snippet","get_snippet","get_component","hydration_start_node","get_fn","clsx","append_styles","important","to_css_name","set_class","is_html","prev_classes","next_classes","next_class_name","directives","classname","is_present","update_styles","set_style","prev_styles","next_styles","next_style_attr","normal_styles","important_styles","new_style","in_str","in_apo","in_comment","reserved_names","name_index","IS_CUSTOM_ELEMENT","IS_HTML","LINK_TAG","set_attribute","skip_warning","cache_key","setters_cache","element_proto","_observer","_ResizeObserverSingleton_brand","ResizeObserverSingleton","_getObserver","_ResizeObserverSingleton","resize_observer_border_box","bind_element_size","unsub","is_bound_this","bound_value","element_or_component","bind_this","get_value","get_parts","component_effect","old_parts","original_teardown","rest_props_handler","bindable","PROPS_IS_BINDABLE","PROPS_IS_LAZY_INITIAL","fallback_value","fallback_dirty","fallback_signal","get_fallback","is_entry_props","is_store_sub","previous_is_store_binding","PROPS_IS_UPDATED","legacy_parent","$$legacy","overridden","PROPS_IS_IMMUTABLE","new_value","Va","Ba","Svelte4Component","add_source","$$host","$set","$destroy","$on","SvelteElement","get_custom_element_value","props_definition","getAbortSignal","AbortController","onMount","$$componentCtor","$$slots","shadow_root_init","$$ctor","$$s","$$shadowRoot","attachShadow","$$l","$$c","$$l_u","connectedCallback","$$cn","create_slot","slot","existing_slots","$$d","$$g_p","$$p_d","$$me","$$r","reflect","attribute_value","attributeChangedCallback","_oldValue","disconnectedCallback","attribute_name","__svelte","PUBLIC_VERSION","_time","_deriveds","_reaction","_SvelteDate_brand","SvelteDate","date_proto","_SvelteDate","read_methods","set_like_methods","_sources","_version","_update_version","_SvelteSet_brand","SvelteSet","set_proto","_SvelteSet","po","vo","So","Co","Mo","Eo","Po","Oo","zo","_SvelteMap_brand","SvelteMap","callbackfn","this_arg","_read_all","prev_res","v_reactions","needs_version_increase","_SvelteMap","Lo","Ho","Bo","$o","keyEnter","contentFrom","innerText","replaceChildren","intersectionObserver","hasOwn","undefinedOr","createContent","DAY_IN_SECONDS","createDate","applyOffsetDiff","setOffset","inputOffset","parseOffset","inWeeks","cloneDate","getOffset","addDuration","subtractDay","subtractDuration","addDay","setMidnight","toLocalDate","datesEqual","dates2","date2","nextClosestDay","prevClosestDay","noTimePart","copyTime","fromDate","toSeconds","_skipHiddenDays","getWeekNumber","yearStart","createWeekNumberContent","offsetDiff","offsetSymbol","dateFn","payloadProp","setPayload","payload","hasPayload","getPayload","getElementWithPayload","elementsFromPoint","shadowEl","toViewWithLocalDates","eventId","createEvents","resourceIds","toArrayProp","createEventSources","createTimeElement","eventTime","toEventWithLocalDates","_cloneEvent","cloneEvent","runReposition","refs","eventIntersects","resource","helperEvent","bgEvent","createEventChunk","zeroDuration","createAllDayChunks","withId","lastEnd","gridColumn","gridRow","dayResource","dayEnd","assignChunkId","prepareAllDayChunks","prevChunks","longChunks","repositionEvent$1","longChunk","ids","idCounter","intl","mainState","intlRange","formatRangeToParts","_getParts","btnTextDay","btnText","btnTextWeek","btnTextMonth","btnTextYear","period","themeView","createDateRange","outsideRange","createResources","_createResources","createResource","expanded","findFirstResource","createSlots","slotLabelPeriodicity","slotTimeLimits","intlSlotLabel","slots","createSlotTimeLimits","flexibleSlotTimeLimits","viewDates","filteredEvents","min$1","max$1","minMin","maxMax","minStart","maxEnd","arrayProxy","setDependency","hasEffect","invokeEffect","specialOptions","extractOption","extracted","mergeOpts","defaultResult","applyResult","fetchedRange","refetchOnNavigate","credentials","State","_auxComponents","_currentRange2","_activeRange2","_fetchedRange","_filteredEvents","_mainEl","_resources","_scrollDate","_today","_intlEventTime2","_intlDayHeader","_intlDayHeaderAL","_intlTitle","_viewDates","_viewTitle2","_view2","_viewComponent","_extensions","_features","_iClasses","_iClass","_Class_brand","auxComponents","mainEl","scrollDate","intlEventTime","intlDayHeader","intlDayHeaderAL","intlTitle","viewComponent","iClasses","iClass","_classPrivateMethodInitSpec","dist_defineProperty","setViewOptions","defOptions","customScrollbars","dayHeaderAriaLabelFormat","eventAllUpdated","eventGap","filterEventsWithResources","highlightedDates","refetchResourcesOnNavigate","bgEvents","colHead","dayHead","endClipped","eventBody","eventTitle","noBeb","noIeb","startClipped","toolbar","weekNumber","createOptions","createParsers","defViews","userViews","viewComponents","userViewOptions","defOpts","events2","viewObj","_viewTitle","_currentRange","_activeRange","snippets","iEvents","initState","_initEffects","invoke","initComponent","dateOffset","loadingInvoker","root$21","root_1$9","root_2$5","root_3$1","Buttons","$$anchor","$$props","prevDisabled","nextDisabled","todayDisabled","setToday","fragment_1","node_1","consequent","consequent_1","button_1","consequent_2","button_2","i_1","consequent_3","button_3","consequent_4","button_4","$$args","consequent_5","button_5","text_1","$$render","root$20","root_1$8","root_2$4","rest_excludes","root$19","prevOptions","$$exports","refetchResources","updateEvent","removeEventById","getView","dateFromPoint","div_1","alternate","View_1","AuxComponent","AuxComponent_1","$0","createDROptions","ViewState$4","_colsCount","_grid","_gridEl","_chunks","_bgChunks","_iChunks","_intlDayCell","_intlDayPopover","_popupDay","gridEl","bgChunks","iChunks","intlDayCell","intlDayPopover","popupDay","hiddenChunks","root$18","BaseDay","defaultContent","$$d_1","dayCell","onpointerdown","$$value","root$17","root_1$7","BaseEvent","eventBackgroundColor$1","eventTextColor$1","bgColor","txtColor","end1","end2","_intlEventTime","createHandler","onclick","onkeydown","onmouseenter","onmouseleave","defaultBody","root$16","ColHead","cssSpan","root$15","alPrefix","$1","InteractableEvent","Resizer","resizer","forceDate","forceMargin","noAction","fragment_2","Resizer_1","$$slotProps","fragment_3","fragment_4","root$14","root_1$6","root_2$3","Event$3","inPopup","_margin","_gridRow","root$13","root$12","root_1$5","View$3","$$item","div_2","div_3","otherMonth","dayHiddenChunks","moreLink","showMore","node_3","event_handler","event_handler_1","event_handler_2","dayFoot","div_4","node_2","node_5","popupChunks","popupRect","dayRect","gridRect","dialog","a_1","outsideEvent","popup","noClick","uniform","day_grid_default","dayCellFormat","initMonthViewComponent$1","eventDraggable","$eventStartEditable","$editable","busy","minLimit","maxLimit","AuxState","_Class3_brand","_setupEffects","Action","newDate","newResource","fromX","fromY","toX","toY","allDaySlot","minResize","selectStep","noDateClick","viewport","extraDuration","dragConstraint","resizeConstraint","selectFn","selectBackgroundColor","unselectFn","calcViewport","selecting","findPayload","newAllDay","copyIEventData","constraintFn","resizingStart","createSelectCallbackInfo","createCallbackInfo","updateIEvent","thresholdY","thresholdX","complexAction","handlePointerCancel","mainRect","destroyIEvent","oldResource","validJsEvent","isPrimary","createPreventDefaultHandler","eventToDrag","eventRef","stops","root$11","root_1$4","$eventDurationEditable","createResizeHandler","root$10","Auxiliary","interaction_default","ghost","preview","resizingY","resizingX","ViewState$3","_intlListDay","_intlListDaySide","intlListDay","intlListDaySide","root$9","root$8","root$7","root_1$3","View$2","noEventsClick","noEventsContent","time_1","styles_1","eventTag","daySide","list_default","listDayFormat","listDaySideFormat","listDay","listWeek","listMonth","listYear","initViewComponent$3","createChunks$1","setExtensions","start2","createTRROptions","slotHeight","sidebar","createTROptions","createTRRParsers","createRROptions","filterResourcesWithEvents","resourceLabelContent","resourceLabelDidMount","colGroup","TRRState","_intlSlotLabel","_slotLabelPeriodicity","_sidebarWidth","_snap","sidebarWidth","periodicity","TRState","_slotTimeLimits","_slots","_chunks2","_bgChunks2","_allDayChunks","_allDayBgChunks","_iChunks2","_allDayIChunks","allDayChunks","allDayBgChunks","allDayIChunks","columns","groupColumn","ViewState$2","_grid2","RRState","_viewResources","viewResources","ViewState$1","_grid3","datesAboveResources","root$6","Label","setLabel","ariaLabel","Day$1","Event$1","groupColumns","AllDayEvent","root$5","NowIndicator$1","$$d_2","observerOptions","onIntersect","isIntersecting","root$4","root_1$2","root_2$2","View$1","showNowIndicator","headerHeight","header_1","node_4","aside_1","fragment_5","node_7","node_8","aside_2","div_5","div_6","fragment_10","div_7","node_11","node_12","node_14","fragment_15","node_15","fragment_16","alternate_1","root$3","scrolledTo","resourceLabels","computed_const","$2","$3","$4","fragment_6","fragment_7","computed_const_1","fragment_9","fragment_12","node_6","alternate_3","fragment_14","d_1","alternate_2","resource_time_grid_default","resourceTimeGridDay","resourceTimeGridWeek","initViewComponent$2","createChunks","monthView","firstStart","getSlotTimeLimits","dayTimeLimits","ViewState","_dayTimeLimits","_daySlots","_grid4","_extraHeads","_intlMonthHeader","_monthView","_chunks3","_bgChunks3","_iChunks3","_nestedResources","daySlots","extraHeads","intlMonthHeader","nestedResources","dayChunks","slotWidth","dayChunk","root$2","root_1$1","root_2$1","Expander","resourceExpand","expander","span_1","root$1","root_1","root_2","root_3","root_4","targetOutOfView","node_10","rowHead","fragment_11","node_13","node_16","d_2","resource_timeline_default","monthHeaderFormat","resourceTimelineDay","resourceTimelineWeek","resourceTimelineMonth","resourceTimelineYear","initViewComponent$1","initMonthViewComponent","_initViewComponent","extraFeatures","time_grid_default","timeGridDay","timeGridWeek","initViewComponent","enumerableOnly","symbols","sym","_arr","_toConsumableArray","iter","api","findIconDefinition","library","noAuto","toHtml","_WINDOW","_DOCUMENT","_MUTATION_OBSERVER","_PERFORMANCE","_familyProxy","_familyProxy2","_familyProxy3","_familyProxy4","_familyProxy5","_ref$userAgent","WINDOW","DOCUMENT","MUTATION_OBSERVER","PERFORMANCE","IS_DOM","IS_IE","NAMESPACE_IDENTIFIER","DEFAULT_REPLACEMENT_CLASS","DATA_FA_I2SVG","DATA_FA_PSEUDO_ELEMENT","DATA_PREFIX","DATA_ICON","HTML_CLASS_I2SVG_BASE_CLASS","TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS","PRODUCTION","FAMILY_CLASSIC","FAMILY_SHARP","FAMILIES","familyProxy","PREFIX_TO_STYLE","fas","far","fal","fat","fad","fak","fass","fasr","fasl","STYLE_TO_PREFIX","light","thin","duotone","brands","kit","PREFIX_TO_LONG_STYLE","LONG_STYLE_TO_PREFIX","ICON_SELECTION_SYNTAX_PATTERN","LAYERS_TEXT_CLASSNAME","FONT_FAMILY_PATTERN","FONT_WEIGHT_TO_PREFIX","normal","oneToTen","oneToTwenty","ATTRIBUTES_WATCHED_FOR_MUTATION","DUOTONE_CLASSES","RESERVED_CLASSES","FontAwesomeConfig","_default","styleDefault","familyDefault","cssPrefix","replacementClass","autoReplaceSvg","autoAddCss","autoA11y","searchPseudoElements","observeMutations","mutateApproach","keepOriginalSource","measurePerformance","showMissingIcons","familyPrefix","_onChangeCb","meaninglessTransform","flipX","flipY","nextUniqueId","classArray","htmlEscape","joinStyles","styleName","transformIsMeaningful","dcp","drc","fp","rc","dPatt","customPropPatt","rPatt","_cssInserted","ensureCss","headChildren","beforeChild","InjectCSS","mixout","insertCss","beforeDOMElementCreation","beforeI2svg","shims","functions","abstractNodes","_abstractNodes$attrib","_abstractNodes$childr","iconFromMapping","doScroll","subject","toHex","unicode","decoded","normalizeIcons","defineIcons","_params$skipHooks","skipHooks","addPack","_LONG_STYLE","_PREFIXES","_PREFIXES_FOR_FAMILY","LONG_STYLE","_defaultUsablePrefix","_byUnicode","_byLigature","_byOldName","_byOldUnicode","_byAlias","PREFIXES","aliases","hasRegular","autoFetchSvg","shimLookups","shim","maybeNameMaybeUnicode","unicodes","getCanonicalPrefix","byUnicode","byAlias","byOldName","getDefaultUsablePrefix","styleOrPrefix","_params$family","PREFIXES_FOR_FAMILY","getCanonicalIcon","_famProps","_params$skipLookups","skipLookups","famProps","givenPrefix","canonical","aliasIconName","Library","additions","_pullDefinitions","longPrefix","definition","_normalized$key","_hooks","providers","defaultProviderKeys","chainHooks","hookFn","callHooks","_len2","callProvided","iconLookup","i2svg","autoReplaceSvgRoot","autoReplace","_icon","canonicalIcon","_prefix","_params$autoReplaceSv","domVariants","abstractCreator","makeInlineSvgAbstract","_params$icons","maskId","_params$watchable","watchable","isUploadedIcon","attrClass","xmlns","viewBox","uploadedIconWidthStyle","makeLayersTextAbstract","_params$watchable2","_ref2$width","_ref2$height","_ref2$startCentered","startCentered","styleString","styles$1","asFoundIcon","vectorData","missingIconResolutionMixin","findIcon","noop$1","preamble","perf","noop$2","isWatched","convertSVG","abstractObj","_params$ceFn","ceFn","mutators","_abstract","nest","_abstract2","forSvg","splitClasses","toSvg","toNode","newInnerHTML","performOperationSync","callbackFunction","frame","mutator","disableObservation","enableObservation","_options$treeCallback","treeCallback","_options$nodeCallback","nodeCallback","_options$pseudoElemen","pseudoElementsCallback","_options$observeMutat","observeMutationsRoot","defaultPrefix","mutationRecord","_getCanonicalIcon","styleParser","_classParser","ligature","existingPrefix","existingIconName","extraAttributes","focusable","pluginMeta","extraStyles","styles$2","generateMutation","nodeMeta","knownPrefixes","onTree","htmlClassList","hclAdd","hclRemove","prefixesDomQuery","resolvedMutations","iconDefinition","_params$transform","_params$symbol","_params$mask","_params$maskId","_params$title","_params$titleId","_params$classes","_params$attributes","_params$styles","ReplaceElements","maybeIconDefinition","mutationObserverCallbacks","provides","providers$$1","_params$node","_params$callback","generateSvgReplacementMutation","generateAbstractIcon","nextChild","containerWidth","iconWidth","Layers","assembler","LayersCounter","LayersText","generateLayersText","computedFontSize","boundingClientRect","CLEAN_CONTENT_PATTERN","SECONDARY_UNICODE_RANGE","replaceForPosition","pendingAttribute","oldUnicode","newUnicode","alreadyProcessedPseudoElement","_content","_hexValueFromContent","cleaned","codePoint","isPrependTen","isDoubled","isSecondary","hexValue","isV4","iconIdentifier","iconName4","processable","operations","_unwatched","parseTransformString","transformString","PowerTransforms","parseNodeAttributes","generateAbstractTransformGrouping","innerTranslate","innerScale","innerRotate","ALL_SPACE","fillBlack","Masks","maskData","generateAbstractMask","explicitMaskId","mainWidth","mainPath","maskWidth","maskPath","trans","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","maskUnits","maskContentUnits","MissingIconIndicator","reduceMotion","matchMedia","missingIconAbstract","gChildren","FILL","ANIMATION_BASE","attributeType","repeatCount","OPACITY_ANIMATE","mixoutsTo","pseudoElements2svg","unwatch","bootstrap","symbolData","noAuto$1","config$1","library$1","dom$1","parse$1","findIconDefinition$1","toHtml$1","decorateFieldV2","decorators","decorator","decorateMethodV2","initializeDeferredDecorator","either","punctuation","lookbehind","builtin","operator","function","greedy","constant","variable","mustache","markup","glimmer","lookahead","optional","extendStatics","__decorate","decorate","__param","paramIndex","__esDecorate","ctor","descriptorIn","contextIn","initializers","extraInitializers","access","addInitializer","__runInitializers","useValue","__propKey","__setFunctionName","__metadata","metadataKey","metadataValue","metadata","__awaiter","_arguments","__generator","trys","Iterator","verb","k2","__values","__read","__spread","__spreadArrays","jl","__await","__asyncGenerator","asyncIterator","AsyncIterator","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","__setModuleDefault","__importStar","__importDefault","__classPrivateFieldGet","__classPrivateFieldSet","__classPrivateFieldIn","__addDisposableResource","asyncDispose","_SuppressedError","SuppressedError","suppressed","__disposeResources","hasError","__rewriteRelativeImportExtension","preserveJsx","tsx","XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","set_ansi","set_cp","reset_cp","char_codes","utf16beread","$cptable","debom","_getchar","_getansi","set_cptable","cptable","cpdoit","Base64_map","Base64_encode","c3","e3","e4","Base64_decode","has_buf","Buffer","Buffer_from","nbfs","buf","enc","new_raw_buf","alloc","new_unsafe_buf","allocUnsafe","s2a","s2ab","ArrayBuffer","a2s","ab2a","bconcat","bufs","isBuffer","maxlen","chr0","chr1","_strrev","pad0","pad_","rpad_","p2_32","pad0r","SSF_isgeneral","table_fmt","SSF_default_map","SSF_default_str","SSF_frac","mixed","sgn","P_2","P_1","Q_2","Q_1","SSF_parse_date_code","b2","dout","date1904","SSFbasedate","SSFdnthresh","SSFbase1904","datenum_local","epoch","SSF_strip_decimal","SSF_general_num","LOG10E","toPrecision","toExponential","SSF_general","SSF_format","SSF_write_date","ss0","outl","commaify","pct1","write_num_exp","fakee","$$","frac1","dec1","closeparen","hashq","rnd","_frac","write_num_flt","ffmt","write_num","sfmt","mul","ri","aval","den","myn","myd","lres","rres","write_num_exp2","write_num_int","SSF_abstime","fmt_is_date","cfregex2","chkcond","thresh","dateNF","m2","lst","ssm","jj","nstr","myv","ostr","vv","decpt","lasti","retval","SSF_load","SSF_load_table","tbl","make_ssf","SSF","load_table","parse_date_code","is_date","get_table","SSFImplicit","dateNFregex","CRC32","T0","Int32Array","subarray","T1","T2","T3","T4","T5","T6","T7","T8","T9","Tb","Tc","Td","Tf","bstr","seed","CFB","dirname","filename","write_dos_date","hms","write_shift","ymd","parse_extra_field","prep_blob","read_shift","mtime","atime","ctime","get_fs","parse_zip","di","mboundary","FileIndex","FullPaths","init_cfb","start_di","fcnt","parse_mime","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","chk","HEADER_SIGNATURE","dir_cnt","sectors","nsectors","sleuth_fat","sector_list","chkd","buf_chain","modulus","addr","__readInt32LE","__toBuffer","ENDOFCHAIN","Paths","mini","minifat_store","sector","namelen","__utf16le","clsid","read_date","get_sector_list","get_mfat_entry","FP","dad","MSSZ","new_buf","__readUInt32LE","cfb","CLSID","nm","rebuild_cfb","_file","fullPaths","HEADER_CLSID","_opts","fileType","cstr","dispcnt","csl","qp","get_content_type","write_quoted_printable","write_base64_76","cdirs","compression","start_cd","crcs","sz_cd","namebuf","outbuf","_deflateRawSync","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","read_bits_2","read_bits_3","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","DST_LN_RE","LEN_LN_RE","boff","addrs","mlen","len_eb","dst_eb","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","next_code","hcodes","_inflate","usz","woff","OL","max_len_1","max_len_2","bits","dst","warn_or_throw","wrn","csz","efsz","fcsz","EF","parse_local_file","meth","_csz","_usz","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","cfb_add","unsafe","ContentTypeMap","htm","xml","gif","jpg","png","mso","thmx","sh33tj5","ctype","encoded","fdata","fname","cte","oi","fpath","cfb_gc","UCFullPaths","UCPaths","UCPath","readFileSync","writeFileSync","writeFile","cfb_new","cfb_del","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","_inflateRaw","_fs","set_fs","blobify","write_dl","Deno","TextEncoder","utf8write","IE_SaveFile","msSaveBlob","saveAs","createObjectURL","downloads","download","revokeObjectURL","Folder","encoding","o2","evert_key","evert","evert_num","basedate","datenum","refdate","dnthresh","refoffset","numdate","parse_isodur","sec","good_pd_date_1","good_pd_date","good_pd","parseDate","fixdate","cc2str","debomit","TextDecoder","dup","fuzzynum","lower_months","fuzzydate","lower","split_regex","safe_split_regex","getdatastr","asNodeBuffer","asBinary","getdatabin","safegetzipfile","zip","getzipfile","getzipdata","safe","getzipstr","getzipbin","zipentries","zip_add_file","widx","ridx","zip_new","zip_read","resolve_path","XML_HEADER","attregexg","tagregex1","tagregex","nsregex","nsregex2","parsexmltag","skip_root","skip_LC","quot","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","parsexmlbool","utf8reada","utf8readb","ww","utf8readc","utf8corpus","utf8read","matchtag","mtcache","htmldecode","entities","vtregex","vt_cache","vtvregex","vtmregex","parseVector","WTF","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","xlml_normalize","xlmlregex","XMLNS","XMLNS_main","XLMLNS","___toBuffer","___utf16le","__readUInt16LE","___hexlify","__hexlify","___utf8","__readUInt8","__utf8","___lpstr","__lpstr","___cpstr","__cpstr","___lpwstr","__lpwstr","___lpp4","__lpp4","___8lpp4","__8lpp4","___double","__double","is_buf","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","lens","__writeUInt16LE","WriteShift","cppayload","av","LN2","hexstr","fld","parsenoop","recordhopper","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","_bufs","write_record","shift_cell_xls","cRel","rRel","biff","shift_range_xls","encode_cell_xls","encode_cell","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","decode_cell","decode_range","encode_range","safe_decode_range","format_cell","BErr","XF","numFmtId","sheet_to_workbook","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","_R","_C","_origin","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBShortCell","write_XLSBShortCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","nTS","tint","parse_ClipboardFormatOrString","VT_STRING","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","CountryEnum","XLSFillPattern","XLSIcv","rgbify","RBErr","ct2type","CT_LIST","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","dialogs","macros","write_ct","type2ct","ContentType","PartName","bookType","f2","f3","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","CORE_PROPS","EXT_PROPS","CUST_PROPS","SST","STY","THEME","CHART","CHARTEX","CS","DS","IMG","DRAW","XLMETA","TCMNT","PEOPLE","VBA","get_rels_path","parse_rels","currentFilePath","rels","Type","Target","Id","TargetMode","canonictarget","write_rels","add_rels","rId","relobj","targetmode","write_rdf_type","write_rdf_has","write_meta_ods","CORE_PROPS_REGEX","parse_core_props","cp_doit","write_core_props","CreatedDate","ModifiedDate","PseudoPropsPairs","load_props_pairs","HP","TOP","hp","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","write_ext_props","Application","custregex","write_cust_props","pid","fmtid","evert_XLMLDPM","XLMLDocPropsMap","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","xlml_set_prop","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","parse_dictionary","CodePage","dict","parse_BLOB","bytes","Size","cElements","write_TypedPropertyValue","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","hdr","piao","pio","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writebool","parseuint16","writeuint16","parseuint16a","write_Bes","parse_ShortXLUnicodeString","cch","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","cRun","write_XLUnicodeRichExtendedString","xlstr","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_HyperlinkString","write_HyperlinkString","write_Hyperlink","hl","hashidx","Pretarget","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","write_XLSCell","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","parse_FtSkip","FtTab","fSharedNote","parse_BOF","BIFFVer","write_BOF","wb","write_BoundSheet8","hs","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","write_Format","b5","parse_BIFF2Format","parse_Dimensions","write_XF","ixfeP","parse_BoolErr","parse_XLHeaderFooter","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","Name","XLSLblBuiltIn","parse_Lbl","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_ExternSheet","parse_Array","parse_ArrayParsedFormula","parse_BIFF5OT","cchName","write_HLink","write_HLinkTooltip","parse_ColInfo","cellStyles","colFirst","colLast","coldx","parse_Blank","parse_Scl","parse_String","DBF_SUPPORTED_VERSIONS","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","vfp","l7","nrow","fpos","rlen","current_cp","codepage","hend","sheetRows","wch","_RLEN","to_workbook","to_sheet","from_sheet","aoa","sheet_to_json","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","hb","rout","SYLK","sylk_escapes","DA","HA","JA","CE","HE","HI","HO","BU","Ai","Ci","Au","Cu","Hu","KC","Kc","DN","Hy","sylk_char_regex","sylk_char_fn","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","next_cell_format","sht","rowinfo","colinfo","Mval","rstr","C_seen_K","C_seen_X","C_seen_S","C_seen_E","rc_to_a1","shrbase","shift_formula_str","F_seen","process_col","hpt","hpx","pt2px","sylk_to_sheet","aoasht","write_ws_cell_sylk","a1_to_rc","rec","wpx","width2px","px2char","px2pt","DIF","dif_to_aoa_str","dif_to_sheet","push_field","topic","push_value","ETH","eth_to_sheet","sep","sheet_to_eth_data","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","finish_cell","datestr","timestr","cellText","cellNF","prn_to_sheet","firstbyte","WK_","lotushopper","Enum","WK1Enum","lotus_to_workbook_buf","next_n","sidx","snames","realnames","refguess","vers","qpro","tmpcell","WK3Enum","osheets","rnames","parse_cell","parse_LABEL","write_LABEL","write_INTEGER","write_NUMBER","wk1_parse_rc","FuncTab","BinOpTab","parse_cell_3","write_LABEL_16","wsidx","parse_NUMBER_17","write_NUMBER_17","log2","parse_NUMBER_27","parse_SHEETNAMECS","write_XFORMAT_SHEETNAME","argc","argL","argR","sheet_to_wk1","write_biff_rec","max_R","book_to_wk3","wscnt","parse_rs","tregex","rpregex","parse_r","rpr","shadow","outline","uval","valign","rregex","rend","rs_to_html","nlregex","r_to_html","terms","sitregex","sirregex","sirphregex","parse_si","cellHTML","sstr0","sstr1","sstr2","straywsregex","write_sst_xml","sst","bookSST","Count","uniqueCount","Unique","sitag","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_EncryptionHeader","Flags","AlgID","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","XorRor","byte1","byte2","Byte","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","Index","ObfuscationArray","RTF","rtf_to_sheet","rtf_to_sheet_str","rowtf","rtfre","last_index","rgb2Hex","rgb_tint","hsl","H6","L2","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","_MDW","customWidth","XLMLPatternTypeMap","None","Solid","Gray50","Gray75","Gray25","HorzStripe","VertStripe","ReverseDiagStripe","DiagStripe","DiagCross","ThickDiagCross","ThinHorzStripe","ThinVertStripe","ThinReverseDiagStripe","ThinHorzCross","cellXF_uint","cellXF_bool","parse_sty_xml","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","themes","NumberFmt","formatCode","Fonts","condense","vertAlign","indexed","icv","themeElements","clrScheme","Fills","patternType","fgColor","Borders","diagonalUp","diagonalDown","xf","CellXf","textRotation","indent","wrapText","write_sty_xml","cellXfs","write_BrtFmt","rev_XLSBFillPTNames","XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","write_BrtXF","write_Blxf","parse_BrtBorder","write_sty_bin","grbit","sss","charset","fontId","fillId","borderId","xfId","builtinId","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","themeltregex","parse_theme_xml","write_theme","Themes","themeXLSX","parse_ExtProp","extType","xclrType","nTintShade","xclrValue","update_xfext","xfext","xfe","write_xlmeta_bin","mdb","write_xlmeta_xml","_shapeid","write_comments_vml","csize","joinstyle","gradientshapeok","coordsize","fillopts","color2","fillparm","fillxml","fillcolor","strokecolor","obscured","sheet_insert_comments","threaded","people","author","write_comments_xml","iauthor","lastauthor","write_tcmnt_xml","carr","rootid","tcopts","tcid","parentId","personId","parse_BrtCommentAuthor","write_comments_bin","VBAFMTS","rcregex","rcbase","rcfunc","fstr","crefregex","$5","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceElfLoc","fQuoted","parse_PtgAttrBaxcel","bitSemi","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfLel","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","Cetab","nameindex","rl","ixti","PtgDupes","Ptg18","coltype","Ptg19","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","sname","stringify_formula","nameidx","last_sp","fflen","lbl","xlfn","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","parse_SharedParsedFormula","parse_Formula","cbf","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","csf_to_ods_formula","ods_to_csf_3D","csf_to_ods_3D","_ssfopts","browser_has_Map","get_sst_id","revarr","col_obj_w","outlineLevel","default_margins","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fillid","raw_rgb","check_ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","sheetprregex2","svsregex","parse_ws_xml_sheetpr","sheetPr","codeName","CodeName","sheetprot_deffalse","sheetprot_deftrue","sviewregex","write_ws_xml_cell","oldt","oldv","Strings","revStrings","parse_ws_xml_data","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","rstarti","outa","rslice","cellFormula","___f","_tag","xlmeta","Cell","write_ws_xml","rdata","_drawing","needed","vbaraw","cname","Workbook","outlineprops","summaryBelow","summaryRight","sview","workbookViewId","Views","rightToLeft","RTL","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","_cell","customHeight","Names","Sheet","Ref","relc","ignoreEC","numberStoredAsText","sqref","write_row_header","ncolspan","lcs","caddr","parse_BrtWsDim","write_BrtWsDim","parse_BrtShortReal","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","last_seen","ncell","write_ws_bin","locidx","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","badchars","check_ws_name","_good","check_wb","wbnsregex","write_wb_xml","write_names","workbookPr","Hidden","sheetId","localSheetId","write_BrtBundleSh","iTabID","strRelID","parse_BrtFRTArchID$","ArchID","write_wb_bin","filterPrivacy","vistab","write_ws","write_cmnt","XLMLFormatMap","attregexg2","attregex2","xlml_parsexmltag","xlml_parsexmltagobj","xlml_set_custprop","Custprops","oval","process_style_xlml","stag","Interior","Pattern","parse_xlml_data","csty","sid","StyleID","interiors","Formula","ArrayRange","xlml_clean_comment","parse_xlml_xml","opening","ishtml","mtch","html_to_sheet","book_append_sheet","Currency","Fixed","Standard","Percent","Scientific","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","seencol","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_name_xlml","write_ws_xlml_cell","_v","write_ws_xlml_row","write_ws_xlml","scenarios","selectLockedCells","selectUnlockedCells","CONTINUE_RT","slurp","RecordType","insitu","nextrt","XLSRecordEnum","ll","safe_format_xf","make_cell","PSCLSID","parse_xlscfb","CompObj","WorkbookP","AnsiUserType","AnsiClipboardFormat","Reserved1","UnicodeClipboardFormat","Reserved2","lastcell","cmnt","rngC","rngR","temp_val","Directory","last_formula","cur_sheet","Preamble","last_cell","XFs","palette","get_rgb","addcell","file_depth","xfd","icvFore","icvBack","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_RT","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","Date1904","WriteProtect","cpval","RefreshAll","CalcCount","CalcDelta","CalcIter","CalcMode","CalcPrecision","CalcSaveRecalc","CalcRefMode","FullCalc","fDialog","fBelow","fRight","ExternCount","tmpri","biffguess","fakebs8","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","Sheet1","Encryption","Metadata","Country","bookVBA","newcfb","newpath","DSI","DocSummary","Summary","HeadingPairs","TitlesOfParts","bookFiles","Ptg","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","bCharSet","xColorType","bR","bG","bB","ixfeParent","ifmt","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","rfx","fAlwaysCalc","relId","idObj","stAuthor","Info","Data","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","EncryptionHeader","EncryptionVerifier","XorArrayIndex","XorArray","verificationBytes","verifier","Value","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","ccv","rkrecs","lastcol","ixfes","fStyle","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","fsxButton","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","cchText","hlink","sVer","targetFrameName","moniker","oleMoniker","fileTime","Loc","cAnti","ansiPath","xnum","cUse","wzTooltip","cxfs","crc","cexts","cchComment","themeXML","lcb","write_BIFF2Cell","write_ws_biff2_cell","write_ws_biff8_cell","o1","o3","b8","write_ws_biff8","guts","_WB","_sheet","MAX_ROWS","HL","write_biff_buf","fix_write_opts","General","_sheets","_wb","blen","write_biff8_global","mtch2","hd","midx","make_html_row","HTML_BEGIN","HTML_END","make_html_preamble","sheet_to_html","sheet_add_dom","or_R","or_C","is_dom_element_hidden","Aelts","Aelti","parse_dom_table","get_computed_style","parse_text_p","fixed","number_formats_ods","parse_content_xml","sheetag","rowtag","NFtag","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","parse_ods","FEtag","write_styles_ods","master_styles","write_content_ods","write_text_p","null_cell_xml","ods","ROWS","_Fref","text_p","_tgt","fods","cidx","colobj","write_ods","manifest","rdf","u8_to_dataview","DataView","buffer","byteOffset","byteLength","u8str","u8","stru8","u8concat","u8a","popcnt","parse_varint49","ptr","varint","write_varint49","varint_to_i32","i32","parse_shallow","write_shallow","mappa","parse_iwa_file","write_iwa_file","ias","midata","aipayload","parse_snappy_chunk","decompress_iwa_file","compress_iwa_file","write_new_storage","dv","mantissa","setFloat64","setUint32","write_old_storage","parse_TSP_Reference","parse_TST_TableDataList","pb","rtp","rtpref","mtype","tswpsa","parse_TST_TableInfoArchive","tableref","rsst","tile","_tile","_h","_k","_l","_m","used_storage_u8","used_storage","wide_offsets","used_storage_offsets","getUint16","nrows","getUint32","data_offset","ieee","getFloat64","d128","parse_cell_storage","parse_numbers_iwa","packets","packet","docroot","iwam","root2","write_tile_row","tri","last_offset","cell_storage","_dv","_last_offset","_cell_storage","celload","_celload","setUint16","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","vm","RR","aii","Rel","tmpref","data1","data2","svs","zoomScale","zoom","coli","colm","colM","afilter","rng","parse_ws","dfile","drelsp","chartp","crelsp","csheet","tcomments","authors","commentList","authtag","cmnttag","authorId","textMatch","tidx","strip_front_slash","_zip","binname","threadedcomments","links","coreprops","extprops","custprops","calcchains","vba","drawings","TODO","ctext","calcchain","dname","dnstart","propdata","toks","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","Types","metatype","lastmeta","displayname","nmode","wsloop","snjseen","snj","Deps","Styles","bin","write_zip","dependents","packet2","indices_varint","ivi","mess","sheetrootref","cruidsref","oldbucket","_x","cruids","uuid","row_header_ref","base_bucket","_bucket","col_header_ref","sstref","sstroot","sentry","sxi","sstdata","newsst","raw32","tileref","tileroot","tentry","tiledata","rowload","R2","tilerow","raw3","vbafmt","_sn","wsrels","need_vml","rId1","write_zip_xlsx","needtc","person","userId","providerId","read_plaintext","read_prn","readSync","infile","ab","dsm","seds","ename","cmode","einfo","decrypt_agile","decrypt_std76","parse_xlsxcfb","OLD_WTF","write_cfb_ctr","write_zip_denouement","oopts","ftype","nodebuffer","encrypt_agile","write_string_type","bom","write_binary_type","writeSyncXLSX","writeSync","BLACKLIST","write_xlml","sheet_to_txt","sheet_to_csv","wbpath","Keys","DSEntries","SEntries","CEntries","DocSummaryRE","SummaryRE","CEntries2","resolve_book_type","xls","slk","socialcalc","Sh33tJS","writeFileSyncXLSX","writeFileAsync","_cb","make_json_row","defval","isempty","__rowNum__","rawNumbers","outi","header_cnt","skipHidden","blankrows","qreg","make_csv_row","txt","forceQuotes","endregex","strip","sheet_add_json","js","skipHeader","JS","ws_get_cell_stub","RC","roll","cell_set_hyperlink","_Readable","split_cell","json_to_sheet","table_to_sheet","table_to_book","sheet_to_formulae","cmds","sheet_to_row_object_array","sheet_get_cell","book_new","book_set_sheet_visibility","vis","cell_set_number_format","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","dynamic","rngstr","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN","__stream","to_json","objectMode","to_html","to_csv","BOM","set_readable"],"sources":["webpack://__ember_auto_import__/src/localization.js","webpack://__ember_auto_import__/src/formatter.js","webpack://__ember_auto_import__/src/itinerary-builder.js","webpack://__ember_auto_import__/src/itinerary.js","webpack://__ember_auto_import__/src/line.js","webpack://__ember_auto_import__/src/autocomplete.js","webpack://__ember_auto_import__/src/geocoder-element.js","webpack://__ember_auto_import__/src/waypoint.js","webpack://__ember_auto_import__/src/plan.js","webpack://__ember_auto_import__/src/osrm-v1.js","webpack://__ember_auto_import__/src/control.js","webpack://__ember_auto_import__/src/mapbox.js","webpack://__ember_auto_import__/src/error-control.js","webpack://__ember_auto_import__/src/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+fast-memoize@2.2.7/node_modules/@formatjs/fast-memoize/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.16/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.16/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.16/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-datetimeformat@6.18.2/node_modules/@formatjs/intl-datetimeformat/should-polyfill.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-datetimeformat@6.18.2/node_modules/@formatjs/intl-datetimeformat/supported-locales.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeUnicodeLocaleId.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionComponents.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeUValue.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/InsertUnicodeExtensionAndCanonicalize.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/languageMatching.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/regions.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-localematcher@0.6.2/node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-numberformat@8.15.6/node_modules/@formatjs/intl-numberformat/should-polyfill.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-numberformat@8.15.6/node_modules/@formatjs/intl-numberformat/supported-locales.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-pluralrules@5.4.6/node_modules/@formatjs/intl-pluralrules/should-polyfill.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-pluralrules@5.4.6/node_modules/@formatjs/intl-pluralrules/supported-locales.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-relativetimeformat@11.4.13/node_modules/@formatjs/intl-relativetimeformat/should-polyfill.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl-relativetimeformat@11.4.13/node_modules/@formatjs/intl-relativetimeformat/supported-locales.generated.js","webpack://__ember_auto_import__/index.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.8/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.8/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.8/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.7/node_modules/intl-messageformat/lib/src/error.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.9.4/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.7/node_modules/intl-messageformat/lib/src/formatters.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.7/node_modules/intl-messageformat/lib/src/core.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/error.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/message.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+ecma402-abstract@2.2.4/node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/dateTime.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/displayName.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/list.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/plural.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/relativeTime.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/number.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/src/create-intl.js","webpack://__ember_auto_import__/node_modules/.pnpm/@formatjs+intl@2.10.15/node_modules/@formatjs/intl/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@fortawesome+free-brands-svg-icons@6.4.0/node_modules/@fortawesome/free-brands-svg-icons/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@mapbox+corslite@0.0.7/node_modules/@mapbox/corslite/corslite.js","webpack://__ember_auto_import__/node_modules/.pnpm/@mapbox+polyline@0.2.0/node_modules/@mapbox/polyline/src/polyline.js","webpack://__ember_auto_import__/node_modules/.pnpm/@stripe+connect-js@3.4.6/node_modules/@stripe/connect-js/dist/connect.esm.js","webpack://__ember_auto_import__/node_modules/.pnpm/air-datepicker@3.6.0/node_modules/air-datepicker/air-datepicker.js","webpack://__ember_auto_import__/node_modules/.pnpm/air-datepicker@3.6.0/node_modules/air-datepicker/index.es.js","webpack://__ember_auto_import__/node_modules/.pnpm/air-datepicker@3.6.0/node_modules/air-datepicker/locale/en.js","webpack://__ember_auto_import__/AutoNumeric/webpack/universalModuleDefinition","webpack://__ember_auto_import__/AutoNumeric/webpack/bootstrap","webpack://__ember_auto_import__/AutoNumeric/webpack/runtime/define property getters","webpack://__ember_auto_import__/AutoNumeric/webpack/runtime/hasOwnProperty shorthand","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumericEnum.js","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumericHelper.js","webpack://__ember_auto_import__/AutoNumeric/src/maths/Evaluator.js","webpack://__ember_auto_import__/AutoNumeric/src/maths/ASTNode.js","webpack://__ember_auto_import__/AutoNumeric/src/maths/Token.js","webpack://__ember_auto_import__/AutoNumeric/src/maths/Lexer.js","webpack://__ember_auto_import__/AutoNumeric/src/maths/Parser.js","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumeric.js","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumericOptions.js","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumericEvents.js","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumericDefaultSettings.js","webpack://__ember_auto_import__/AutoNumeric/src/AutoNumericPredefinedOptions.js","webpack://__ember_auto_import__/AutoNumeric/src/main.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/config.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/core.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/debug.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/encode.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/helpers.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/memory.js","webpack://__ember_auto_import__/node_modules/.pnpm/compress-json@3.4.0/node_modules/compress-json/dist/number.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/defaultLocale/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/defaultOptions/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/toInteger/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addMonths/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addWeeks/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/format/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getISODay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/add/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isWeekend/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSunday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSaturday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addBusinessDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addISOWeekYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addQuarters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/addYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/areIntervalsOverlapping/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/max/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/min/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/clamp/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/closestIndexTo/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/closestTo/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/compareAsc/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/compareDesc/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/constants/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/daysToWeeks/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInBusinessDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarISOWeekYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarISOWeeks/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarQuarters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/roundingMethods/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subISOWeekYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInISOWeekYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInMonths/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInQuarters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInWeeks/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/differenceInYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachHourOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfMinute/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachMinuteOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachMonthOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachQuarterOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachWeekOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachWeekendOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachWeekendOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachWeekendOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/eachYearOfInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfDecade/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfHour/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfMinute/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfSecond/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfToday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfTomorrow/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/endOfYesterday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/assign/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatDistanceToNow/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatDistanceToNowStrict/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatDuration/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatISO/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatISO9075/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatISODuration/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatRFC3339/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatRFC7231/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/fromUnixTime/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDate/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDayOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDaysInMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isLeapYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDaysInYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDecade/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getDefaultOptions/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getISOWeeksInYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getOverlappingDaysInIntervals/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getTime/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getUnixTime/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getWeekOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getWeeksInMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/getYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/hoursToMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/hoursToMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/hoursToSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/intervalToDuration/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/intlFormat/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/intlFormatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isEqual/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isExists/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isFirstDayOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isFriday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isFuture/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/Setter.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/Parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/constants.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parse/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isMatch/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isMonday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isPast/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfHour/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameHour/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameMinute/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfSecond/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameSecond/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisHour/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisMinute/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisSecond/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThisYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isThursday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isToday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isTomorrow/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isTuesday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isWednesday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isWithinInterval/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isYesterday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfDecade/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfISOWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lastDayOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/lightFormat/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/milliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/millisecondsToHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/millisecondsToMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/millisecondsToSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/minutesToHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/minutesToMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/minutesToSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/monthsToQuarters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/monthsToYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextFriday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextMonday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextSaturday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextSunday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextThursday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextTuesday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/nextWednesday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parseISO/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/parseJSON/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousFriday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousMonday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousSaturday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousSunday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousThursday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousTuesday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/previousWednesday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/quartersToMonths/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/quartersToYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/roundToNearestMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/secondsToHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/secondsToMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/secondsToMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/set/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setDate/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setDayOfYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setDefaultOptions/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setISODay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setQuarter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setWeekYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/setYear/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfDecade/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfToday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfTomorrow/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfYesterday/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subMonths/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/sub/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subBusinessDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subHours/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subMinutes/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subQuarters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subSeconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subWeeks/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subYears/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/weeksToDays/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/yearsToMonths/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/yearsToQuarters/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isAfter/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isBefore/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isDate/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isSameDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/isValid/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-US/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/af/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/af/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/af/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/af/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/af/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/af/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-DZ/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-DZ/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-DZ/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-DZ/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-DZ/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-DZ/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-EG/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-EG/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-EG/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-EG/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-EG/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-EG/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-MA/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-MA/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-MA/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-MA/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-MA/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-MA/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-SA/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-SA/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-SA/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-SA/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-SA/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-SA/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-TN/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-TN/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-TN/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-TN/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-TN/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ar-TN/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/az/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/az/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/az/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/az/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/az/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/az/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/_lib/isSameUTCWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be-tarask/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be-tarask/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be-tarask/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be-tarask/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be-tarask/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/be-tarask/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bg/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bg/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bg/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bg/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bg/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bg/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bn/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bn/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bn/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bn/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bn/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bs/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bs/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bs/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bs/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bs/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/bs/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ca/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ca/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ca/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ca/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ca/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ca/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cs/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cs/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cs/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cs/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cs/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cs/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cy/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cy/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cy/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cy/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cy/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/cy/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/da/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/da/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/da/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/da/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/da/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/da/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de-AT/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/de-AT/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/el/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/el/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/el/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/el/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/el/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/el/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-AU/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-AU/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-CA/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-CA/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-CA/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-GB/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-IE/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-IN/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-IN/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-NZ/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-NZ/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-ZA/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/en-ZA/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eo/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eo/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eo/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eo/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eo/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eo/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/es/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/es/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/es/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/et/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/et/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/et/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/et/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/et/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/et/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eu/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eu/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eu/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eu/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eu/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/eu/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fa-IR/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fa-IR/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fa-IR/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fa-IR/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fa-IR/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fa-IR/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fi/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fi/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fi/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fi/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fi/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fi/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr-CA/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr-CA/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr-CH/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr-CH/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fr-CH/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fy/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fy/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fy/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fy/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fy/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/fy/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gd/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gd/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gd/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gd/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gd/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gd/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gl/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gl/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gl/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gl/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gl/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gl/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gu/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gu/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gu/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gu/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gu/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/gu/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/he/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/he/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/he/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/he/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/he/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/he/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hi/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hi/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hi/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hi/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hi/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hi/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hr/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hr/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hr/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hr/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hr/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hr/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ht/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ht/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ht/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ht/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ht/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ht/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hu/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hu/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hu/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hu/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hu/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hu/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hy/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hy/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hy/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hy/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hy/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/hy/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/id/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/id/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/id/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/id/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/id/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/id/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/is/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/is/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/is/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/is/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/is/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/is/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it-CH/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/it-CH/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja-Hira/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja-Hira/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja-Hira/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja-Hira/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja-Hira/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ja-Hira/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ka/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ka/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ka/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ka/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ka/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ka/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kk/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kk/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kk/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kk/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kk/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kk/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/km/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/km/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/km/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/km/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/km/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/km/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kn/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kn/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kn/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kn/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/kn/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ko/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ko/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ko/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ko/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ko/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ko/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lb/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lb/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lb/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lb/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lb/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lb/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lt/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lt/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lt/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lt/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lt/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lt/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lv/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lv/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lv/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lv/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lv/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/lv/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mk/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mk/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mk/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mk/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mk/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mk/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mn/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mn/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mn/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mn/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mn/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ms/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ms/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ms/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ms/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ms/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ms/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mt/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mt/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mt/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mt/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mt/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/mt/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nb/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nb/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nb/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nb/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nb/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nb/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl-BE/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl-BE/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl-BE/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl-BE/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl-BE/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nl-BE/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nn/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nn/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nn/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nn/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/nn/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/oc/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/oc/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/oc/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/oc/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/oc/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/oc/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pl/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pl/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pl/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pl/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pl/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pl/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt-BR/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt-BR/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt-BR/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt-BR/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt-BR/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/pt-BR/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ro/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ro/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ro/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ro/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ro/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ro/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ru/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ru/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ru/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ru/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ru/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ru/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sk/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sk/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sk/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sk/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sk/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sk/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sl/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sl/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sl/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sl/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sl/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sl/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sq/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sq/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sq/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sq/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sq/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sq/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr-Latn/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr-Latn/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr-Latn/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr-Latn/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr-Latn/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sr-Latn/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sv/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sv/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sv/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sv/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sv/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/sv/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ta/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ta/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ta/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ta/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ta/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ta/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/te/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/te/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/te/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/te/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/te/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/te/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/th/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/th/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/th/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/th/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/th/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/th/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/tr/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/tr/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/tr/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/tr/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/tr/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/tr/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ug/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ug/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ug/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ug/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ug/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/ug/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uk/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uk/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uk/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uk/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uk/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uk/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz-Cyrl/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz-Cyrl/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz-Cyrl/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz-Cyrl/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz-Cyrl/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/uz-Cyrl/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/vi/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/vi/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/vi/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/vi/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/vi/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/vi/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-CN/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-CN/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-CN/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-CN/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-CN/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-CN/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-HK/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-HK/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-HK/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-HK/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-HK/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-HK/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-TW/_lib/formatDistance/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-TW/_lib/formatLong/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-TW/_lib/formatRelative/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-TW/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-TW/_lib/localize/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/locale/zh-TW/_lib/match/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfDay/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfISOWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfMonth/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/startOfWeek/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/subMilliseconds/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/esm/toDate/index.js","webpack://__ember_auto_import__/node_modules/browser-pack/_prelude.js","webpack://__ember_auto_import__/classes.js/","webpack://__ember_auto_import__/dragula.js/","webpack://__ember_auto_import__/node_modules/atoa/atoa.js","webpack://__ember_auto_import__/node_modules/contra/debounce.js","webpack://__ember_auto_import__/node_modules/contra/emitter.js","webpack://__ember_auto_import__/node_modules/crossvent/src/crossvent.js","webpack://__ember_auto_import__/node_modules/crossvent/src/eventmap.js","webpack://__ember_auto_import__/node_modules/custom-event/index.js","webpack://__ember_auto_import__/node_modules/process/browser.js","webpack://__ember_auto_import__/node_modules/ticky/ticky-browser.js","webpack://__ember_auto_import__/node_modules/timers-browserify/main.js","webpack://__ember_auto_import__/src/-private/concurrency-helpers.ts","webpack://__ember_auto_import__/src/-private/ember-internals.ts","webpack://__ember_auto_import__/src/-private/ember-scheduler.ts","webpack://__ember_auto_import__/src/-private/motion-bridge.ts","webpack://__ember_auto_import__/src/-private/partition.ts","webpack://__ember_auto_import__/src/-private/scheduler.ts","webpack://__ember_auto_import__/src/-private/singleton.ts","webpack://__ember_auto_import__/src/-private/transform.ts","webpack://__ember_auto_import__/src/-private/margin-collapse.ts","webpack://__ember_auto_import__/src/domrect-polyfill.ts","webpack://__ember_auto_import__/src/-private/bounds.ts","webpack://__ember_auto_import__/src/-private/sprite.ts","webpack://__ember_auto_import__/src/-private/transition-context.ts","webpack://__ember_auto_import__/src/components/animated-beacon.hbs","webpack://__ember_auto_import__/src/components/animated-beacon.ts","webpack://__ember_auto_import__/src/-private/motion.ts","webpack://__ember_auto_import__/src/easings/cosine.ts","webpack://__ember_auto_import__/src/-private/tween.ts","webpack://__ember_auto_import__/src/motions/resize.ts","webpack://__ember_auto_import__/src/components/animated-container.hbs","webpack://__ember_auto_import__/src/components/animated-container.ts","webpack://__ember_auto_import__/node_modules/.pnpm/assert-never@1.4.0/node_modules/assert-never/index.js","webpack://__ember_auto_import__/src/-private/child.ts","webpack://__ember_auto_import__/src/components/animated-each.hbs","webpack://__ember_auto_import__/src/components/animated-each.ts","webpack://__ember_auto_import__/src/components/animated-if.hbs","webpack://__ember_auto_import__/src/components/animated-if.ts","webpack://__ember_auto_import__/src/components/animated-orphans.hbs","webpack://__ember_auto_import__/src/components/animated-orphans.ts","webpack://__ember_auto_import__/src/components/animated-value.hbs","webpack://__ember_auto_import__/src/components/animated-value.ts","webpack://__ember_auto_import__/src/components/ea-list-element.ts","webpack://__ember_auto_import__/src/element-remove.ts","webpack://__ember_auto_import__/src/services/-ea-motion.ts","webpack://__ember_auto_import__/src/helpers/assign.js","webpack://__ember_auto_import__/src/utils/scroll-helpers.ts","webpack://__ember_auto_import__/src/components/basic-dropdown-content.ts","webpack://__ember_auto_import__/src/components/basic-dropdown-trigger.ts","webpack://__ember_auto_import__/src/components/basic-dropdown-wormhole.ts","webpack://__ember_auto_import__/src/components/basic-dropdown.ts","webpack://__ember_auto_import__/src/modifiers/basic-dropdown-trigger.ts","webpack://__ember_auto_import__/src/utils/calculate-position.ts","webpack://__ember_auto_import__/src/utils/has-moved.ts","webpack://__ember_auto_import__/src/helpers/can.ts","webpack://__ember_auto_import__/src/helpers/cannot.ts","webpack://__ember_auto_import__/src/ability.ts","webpack://__ember_auto_import__/src/initializers/setup-ember-can.js","webpack://__ember_auto_import__/src/-private/normalize.ts","webpack://__ember_auto_import__/src/services/abilities.ts","webpack://__ember_auto_import__/node_modules/.pnpm/ember-cli-deprecation-workflow@4.0.1_@babel+core@7.29.7/node_modules/ember-cli-deprecation-workflow/src/index.js","webpack://__ember_auto_import__/src/components/ecn-icon-close.js","webpack://__ember_auto_import__/src/components/ecn-icon-error.js","webpack://__ember_auto_import__/src/components/ecn-icon-info.js","webpack://__ember_auto_import__/src/components/ecn-icon-success.js","webpack://__ember_auto_import__/src/components/ecn-icon-warning.js","webpack://__ember_auto_import__/src/components/notification-container.js","webpack://__ember_auto_import__/src/components/notification-message.js","webpack://__ember_auto_import__/src/services/notifications.js","webpack://__ember_auto_import__/src/-private/ember-environment.js","webpack://__ember_auto_import__/src/-private/external/environment.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/bounded-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/drop-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/enqueued-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/execution-states.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/keep-latest-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/restartable-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/refresh.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/state.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/state-tracker.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/null-state-tracker.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/null-state.js","webpack://__ember_auto_import__/src/-private/external/scheduler/scheduler.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/unbounded-policy.js","webpack://__ember_auto_import__/src/-private/external/task-factory.js","webpack://__ember_auto_import__/src/-private/external/task-instance/cancelation.js","webpack://__ember_auto_import__/src/-private/external/generator-state.js","webpack://__ember_auto_import__/src/-private/external/task-instance/executor.js","webpack://__ember_auto_import__/src/-private/external/task-instance/initial-state.js","webpack://__ember_auto_import__/src/-private/external/task/default-state.js","webpack://__ember_auto_import__/src/-private/external/task/task-group.js","webpack://__ember_auto_import__/src/-private/external/task/task.js","webpack://__ember_auto_import__/src/-private/external/task/taskable.js","webpack://__ember_auto_import__/src/-private/external/yieldables.js","webpack://__ember_auto_import__/src/-private/helpers.js","webpack://__ember_auto_import__/src/-private/scheduler/ember-scheduler.js","webpack://__ember_auto_import__/src/-private/task-factory.js","webpack://__ember_auto_import__/src/-private/task-group.js","webpack://__ember_auto_import__/src/-private/external/task-instance/base.js","webpack://__ember_auto_import__/src/-private/task-instance.js","webpack://__ember_auto_import__/src/-private/task-properties.js","webpack://__ember_auto_import__/src/-private/task.js","webpack://__ember_auto_import__/src/-private/taskable-mixin.js","webpack://__ember_auto_import__/src/-private/tracked-state.js","webpack://__ember_auto_import__/src/helpers/cancel-all.ts","webpack://__ember_auto_import__/src/helpers/perform.ts","webpack://__ember_auto_import__/src/helpers/task.ts","webpack://__ember_auto_import__/src/-private/utils.js","webpack://__ember_auto_import__/src/-private/external/task-decorators.js","webpack://__ember_auto_import__/src/-private/task-decorators.js","webpack://__ember_auto_import__/src/-private/task-public-api.js","webpack://__ember_auto_import__/src/-private/cancelable-promise-helpers.js","webpack://__ember_auto_import__/src/-private/wait-for.js","webpack://__ember_auto_import__/src/services/cookies.ts","webpack://__ember_auto_import__/src/utils/serialize-cookie.ts","webpack://__ember_auto_import__/src/helpers/element.ts","webpack://__ember_auto_import__/src/system/data-transfer-wrapper.ts","webpack://__ember_auto_import__/src/system/drag-listener.ts","webpack://__ember_auto_import__/src/system/drag-listener-modifier.ts","webpack://__ember_auto_import__/src/components/file-dropzone.hbs","webpack://__ember_auto_import__/src/components/file-dropzone.ts","webpack://__ember_auto_import__/src/upload-file.ts","webpack://__ember_auto_import__/src/queue.ts","webpack://__ember_auto_import__/src/services/file-queue.ts","webpack://__ember_auto_import__/src/helpers/file-queue.ts","webpack://__ember_auto_import__/src/mirage/upload-handler.ts","webpack://__ember_auto_import__/src/system/http-request.ts","webpack://__ember_auto_import__/src/interfaces.ts","webpack://__ember_auto_import__/src/system/upload.ts","webpack://__ember_auto_import__/src/system/upload-file-reader.ts","webpack://__ember_auto_import__/src/system/rate.ts","webpack://__ember_auto_import__/index.js","webpack://__ember_auto_import__/src/modifiers/focus-trap.ts","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@3.3.1_@babel+core@7.29.7_ember-source@5.4.1_@b_3fe01214d70e85af5cc8c9fc852f2044/node_modules/ember-lifeline/dist/utils/get-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@3.3.1_@babel+core@7.29.7_ember-source@5.4.1_@b_3fe01214d70e85af5cc8c9fc852f2044/node_modules/ember-lifeline/dist/cancel-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@3.3.1_@babel+core@7.29.7_ember-source@5.4.1_@b_3fe01214d70e85af5cc8c9fc852f2044/node_modules/ember-lifeline/dist/run-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@3.3.1_@babel+core@7.29.7_ember-source@5.4.1_@b_3fe01214d70e85af5cc8c9fc852f2044/node_modules/ember-lifeline/dist/schedule-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@3.3.1_@babel+core@7.29.7_ember-source@5.4.1_@b_3fe01214d70e85af5cc8c9fc852f2044/node_modules/ember-lifeline/dist/poll-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@3.3.1_@babel+core@7.29.7_ember-source@5.4.1_@b_3fe01214d70e85af5cc8c9fc852f2044/node_modules/ember-lifeline/dist/debounce-task.js","webpack://__ember_auto_import__/src/-private/class-based/modifier-manager.ts","webpack://__ember_auto_import__/src/-private/class-based/modifier.ts","webpack://__ember_auto_import__/src/-private/function-based/modifier.ts","webpack://__ember_auto_import__/src/-private/function-based/modifier-manager.ts","webpack://__ember_auto_import__/src/helpers/page-title.ts","webpack://__ember_auto_import__/src/services/page-title.ts","webpack://__ember_auto_import__/src/components/power-select-multiple.ts","webpack://__ember_auto_import__/src/components/power-select-multiple/input.ts","webpack://__ember_auto_import__/src/components/power-select-multiple/trigger.ts","webpack://__ember_auto_import__/src/components/power-select.ts","webpack://__ember_auto_import__/src/-private/async-arrow-runtime.js","webpack://__ember_auto_import__/src/components/power-select/before-options.ts","webpack://__ember_auto_import__/src/components/power-select/input.ts","webpack://__ember_auto_import__/src/components/power-select/label.ts","webpack://__ember_auto_import__/src/components/power-select/no-matches-message.ts","webpack://__ember_auto_import__/src/components/power-select/options.ts","webpack://__ember_auto_import__/src/components/power-select/placeholder.ts","webpack://__ember_auto_import__/src/components/power-select/power-select-group.ts","webpack://__ember_auto_import__/src/components/power-select/search-message.ts","webpack://__ember_auto_import__/src/components/power-select/trigger.ts","webpack://__ember_auto_import__/src/helpers/ember-power-select-is-equal.ts","webpack://__ember_auto_import__/src/helpers/ember-power-select-is-group.ts","webpack://__ember_auto_import__/src/helpers/ember-power-select-is-selected-present.ts","webpack://__ember_auto_import__/src/utils/group-utils.ts","webpack://__ember_auto_import__/src/authenticators/base.js","webpack://__ember_auto_import__/src/configuration.js","webpack://__ember_auto_import__/src/internal-session.js","webpack://__ember_auto_import__/src/session-stores/ephemeral.js","webpack://__ember_auto_import__/src/session-stores/local-storage.js","webpack://__ember_auto_import__/src/session-stores/cookie.js","webpack://__ember_auto_import__/src/initializers/ember-simple-auth.js","webpack://__ember_auto_import__/src/initializers/setup-session.js","webpack://__ember_auto_import__/src/services/session.js","webpack://__ember_auto_import__/src/-internals/routing.js","webpack://__ember_auto_import__/src/session-stores/adaptive.js","webpack://__ember_auto_import__/src/session-stores/base.js","webpack://__ember_auto_import__/src/utils/inject.js","webpack://__ember_auto_import__/src/utils/is-fastboot.js","webpack://__ember_auto_import__/src/utils/location.js","webpack://__ember_auto_import__/src/utils/objects-are-equal.js","webpack://__ember_auto_import__/src/modifiers/style.ts","webpack://__ember_auto_import__/src/helpers/and.ts","webpack://__ember_auto_import__/src/helpers/eq.ts","webpack://__ember_auto_import__/src/helpers/gt.ts","webpack://__ember_auto_import__/src/helpers/gte.ts","webpack://__ember_auto_import__/src/helpers/lt.ts","webpack://__ember_auto_import__/src/helpers/lte.ts","webpack://__ember_auto_import__/src/helpers/not-eq.ts","webpack://__ember_auto_import__/src/helpers/not.ts","webpack://__ember_auto_import__/src/helpers/or.ts","webpack://__ember_auto_import__/src/helpers/xor.ts","webpack://__ember_auto_import__/src/utils/truth-convert.ts","webpack://__ember_auto_import__/node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","webpack://__ember_auto_import__/src/dd-base-impl.ts","webpack://__ember_auto_import__/src/dd-draggable.ts","webpack://__ember_auto_import__/src/dd-droppable.ts","webpack://__ember_auto_import__/src/dd-element.ts","webpack://__ember_auto_import__/src/dd-gridstack.ts","webpack://__ember_auto_import__/src/dd-manager.ts","webpack://__ember_auto_import__/src/dd-resizable-handle.ts","webpack://__ember_auto_import__/src/dd-resizable.ts","webpack://__ember_auto_import__/src/dd-touch.ts","webpack://__ember_auto_import__/src/gridstack-engine.ts","webpack://__ember_auto_import__/src/gridstack.ts","webpack://__ember_auto_import__/src/types.ts","webpack://__ember_auto_import__/src/utils.ts","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/_rollupPluginBabelHelpers-6b3bd404.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/core/holder.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/core/change-details.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/core/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/core/action-details.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/core/continuous-tail-details.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/base.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/factory.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/pattern/input-definition.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/pattern/fixed-definition.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/pattern/chunk-tail-details.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/pattern/cursor.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/regexp.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/pattern.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/range.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/date.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/controls/mask-element.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/controls/html-mask-element.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/controls/html-contenteditable-mask-element.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/controls/input.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/enum.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/number.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/function.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/dynamic.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/masked/pipe.js","webpack://__ember_auto_import__/node_modules/.pnpm/imask@6.6.3/node_modules/imask/esm/index.js","webpack://__ember_auto_import__/@interactjs/utils/isWindow.ts","webpack://__ember_auto_import__/@interactjs/utils/window.ts","webpack://__ember_auto_import__/@interactjs/utils/is.ts","webpack://__ember_auto_import__/@interactjs/actions/drag/plugin.ts","webpack://__ember_auto_import__/@interactjs/utils/domObjects.ts","webpack://__ember_auto_import__/@interactjs/utils/browser.ts","webpack://__ember_auto_import__/@interactjs/utils/domUtils.ts","webpack://__ember_auto_import__/@interactjs/utils/extend.ts","webpack://__ember_auto_import__/@interactjs/utils/rect.ts","webpack://__ember_auto_import__/@interactjs/utils/getOriginXY.ts","webpack://__ember_auto_import__/@interactjs/utils/normalizeListeners.ts","webpack://__ember_auto_import__/@interactjs/utils/hypot.ts","webpack://__ember_auto_import__/@interactjs/utils/pointerExtend.ts","webpack://__ember_auto_import__/@interactjs/utils/pointerUtils.ts","webpack://__ember_auto_import__/@interactjs/core/BaseEvent.ts","webpack://__ember_auto_import__/@interactjs/utils/arr.ts","webpack://__ember_auto_import__/@interactjs/actions/drop/DropEvent.ts","webpack://__ember_auto_import__/@interactjs/actions/drop/plugin.ts","webpack://__ember_auto_import__/@interactjs/actions/gesture/plugin.ts","webpack://__ember_auto_import__/@interactjs/actions/resize/plugin.ts","webpack://__ember_auto_import__/@interactjs/utils/raf.ts","webpack://__ember_auto_import__/@interactjs/actions/plugin.ts","webpack://__ember_auto_import__/@interactjs/auto-scroll/plugin.ts","webpack://__ember_auto_import__/@interactjs/utils/misc.ts","webpack://__ember_auto_import__/@interactjs/auto-start/InteractableMethods.ts","webpack://__ember_auto_import__/@interactjs/auto-start/base.ts","webpack://__ember_auto_import__/@interactjs/auto-start/dragAxis.ts","webpack://__ember_auto_import__/@interactjs/auto-start/hold.ts","webpack://__ember_auto_import__/@interactjs/auto-start/plugin.ts","webpack://__ember_auto_import__/@interactjs/core/interactablePreventDefault.ts","webpack://__ember_auto_import__/@interactjs/utils/isNonNativeEvent.ts","webpack://__ember_auto_import__/@interactjs/utils/clone.ts","webpack://__ember_auto_import__/@interactjs/modifiers/Modification.ts","webpack://__ember_auto_import__/@interactjs/modifiers/base.ts","webpack://__ember_auto_import__/@interactjs/core/options.ts","webpack://__ember_auto_import__/@interactjs/core/InteractEvent.ts","webpack://__ember_auto_import__/@interactjs/core/PointerInfo.ts","webpack://__ember_auto_import__/@interactjs/core/Interaction.ts","webpack://__ember_auto_import__/@interactjs/offset/plugin.ts","webpack://__ember_auto_import__/@interactjs/inertia/plugin.ts","webpack://__ember_auto_import__/@interactjs/core/Eventable.ts","webpack://__ember_auto_import__/@interactjs/core/events.ts","webpack://__ember_auto_import__/@interactjs/core/interactionFinder.ts","webpack://__ember_auto_import__/@interactjs/core/interactions.ts","webpack://__ember_auto_import__/@interactjs/core/Interactable.ts","webpack://__ember_auto_import__/@interactjs/core/InteractableSet.ts","webpack://__ember_auto_import__/@interactjs/core/scope.ts","webpack://__ember_auto_import__/@interactjs/core/InteractStatic.ts","webpack://__ember_auto_import__/@interactjs/interact/index.ts","webpack://__ember_auto_import__/@interactjs/snappers/edgeTarget.ts","webpack://__ember_auto_import__/@interactjs/snappers/elements.ts","webpack://__ember_auto_import__/@interactjs/snappers/grid.ts","webpack://__ember_auto_import__/@interactjs/snappers/plugin.ts","webpack://__ember_auto_import__/@interactjs/modifiers/aspectRatio.ts","webpack://__ember_auto_import__/@interactjs/modifiers/noop.ts","webpack://__ember_auto_import__/@interactjs/modifiers/restrict/pointer.ts","webpack://__ember_auto_import__/@interactjs/modifiers/restrict/edges.ts","webpack://__ember_auto_import__/@interactjs/modifiers/restrict/rect.ts","webpack://__ember_auto_import__/@interactjs/modifiers/restrict/size.ts","webpack://__ember_auto_import__/@interactjs/modifiers/snap/pointer.ts","webpack://__ember_auto_import__/@interactjs/modifiers/snap/size.ts","webpack://__ember_auto_import__/@interactjs/modifiers/all.ts","webpack://__ember_auto_import__/@interactjs/modifiers/snap/edges.ts","webpack://__ember_auto_import__/@interactjs/modifiers/plugin.ts","webpack://__ember_auto_import__/@interactjs/pointer-events/PointerEvent.ts","webpack://__ember_auto_import__/@interactjs/pointer-events/base.ts","webpack://__ember_auto_import__/@interactjs/pointer-events/holdRepeat.ts","webpack://__ember_auto_import__/@interactjs/pointer-events/interactableTargets.ts","webpack://__ember_auto_import__/@interactjs/pointer-events/plugin.ts","webpack://__ember_auto_import__/@interactjs/reflow/plugin.ts","webpack://__ember_auto_import__/@interactjs/interactjs/index.ts","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/src/error.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/src/formatters.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/src/core.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/intl-tel-input@22.0.2/node_modules/intl-tel-input/build/js/intlTelInput.js","webpack://__ember_auto_import__/node_modules/.pnpm/osrm-text-instructions@0.13.4/node_modules/osrm-text-instructions/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/osrm-text-instructions@0.13.4/node_modules/osrm-text-instructions/languages.js","webpack://__ember_auto_import__/src/util.js","webpack://__ember_auto_import__/src/PureComponent.js","webpack://__ember_auto_import__/src/memo.js","webpack://__ember_auto_import__/src/forwardRef.js","webpack://__ember_auto_import__/src/Children.js","webpack://__ember_auto_import__/src/suspense.js","webpack://__ember_auto_import__/src/suspense-list.js","webpack://__ember_auto_import__/src/portals.js","webpack://__ember_auto_import__/src/render.js","webpack://__ember_auto_import__/src/options.js","webpack://__ember_auto_import__/src/create-element.js","webpack://__ember_auto_import__/src/diff/props.js","webpack://__ember_auto_import__/src/component.js","webpack://__ember_auto_import__/src/create-context.js","webpack://__ember_auto_import__/src/constants.js","webpack://__ember_auto_import__/src/diff/children.js","webpack://__ember_auto_import__/src/diff/index.js","webpack://__ember_auto_import__/src/clone-element.js","webpack://__ember_auto_import__/src/diff/catch-error.js","webpack://__ember_auto_import__/node_modules/.pnpm/remote-promises@1.0.0/node_modules/remote-promises/dist/index.js","webpack://__ember_auto_import__/src/-private/map.ts","webpack://__ember_auto_import__/src/-private/set.ts","webpack://__ember_auto_import__/src/-private/array.ts","webpack://__ember_auto_import__/src/-private/object.ts","webpack://__ember_auto_import__/src/-private/decorator.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/deserialize.js","webpack://__ember_auto_import__/node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/serialize.js","webpack://__ember_auto_import__/node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/index.js","webpack://__ember_auto_import__/src/utils/is-object.ts","webpack://__ember_auto_import__/src/-private/change.ts","webpack://__ember_auto_import__/src/-private/err.ts","webpack://__ember_auto_import__/src/utils/get-key-values.ts","webpack://__ember_auto_import__/src/utils/is-promise.ts","webpack://__ember_auto_import__/src/utils/handle-multiple-validations.ts","webpack://__ember_auto_import__/src/utils/get-deep.ts","webpack://__ember_auto_import__/src/utils/validator-lookup.ts","webpack://__ember_auto_import__/src/-private/notifier.ts","webpack://__ember_auto_import__/src/-private/evented.ts","webpack://__ember_auto_import__/src/utils/has-key.ts","webpack://__ember_auto_import__/src/utils/normalize-object.ts","webpack://__ember_auto_import__/src/utils/has-changes.ts","webpack://__ember_auto_import__/src/utils/assign.ts","webpack://__ember_auto_import__/src/utils/flatten-validations.ts","webpack://__ember_auto_import__/src/utils/is-changeset.ts","webpack://__ember_auto_import__/src/utils/key-in-object.ts","webpack://__ember_auto_import__/src/utils/array-object.ts","webpack://__ember_auto_import__/src/utils/set-deep.ts","webpack://__ember_auto_import__/src/utils/merge-nested.ts","webpack://__ember_auto_import__/src/utils/build-old-values.ts","webpack://__ember_auto_import__/src/utils/merge-deep.ts","webpack://__ember_auto_import__/src/utils/object-tree-node.ts","webpack://__ember_auto_import__/src/utils/object-without.ts","webpack://__ember_auto_import__/src/utils/take.ts","webpack://__ember_auto_import__/src/validated.ts","webpack://__ember_auto_import__/src/index.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+core@6.1.21/node_modules/@fullcalendar/core/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+core@6.1.21/node_modules/@fullcalendar/core/internal-common.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+core@6.1.21/node_modules/@fullcalendar/core/internal.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+core@6.1.21/node_modules/@fullcalendar/core/preact.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+daygrid@6.1.21_@fullcalendar+core@6.1.21/node_modules/@fullcalendar/daygrid/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+daygrid@6.1.21_@fullcalendar+core@6.1.21/node_modules/@fullcalendar/daygrid/internal.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@fullcalendar+interaction@6.1.21_@fullcalendar+core@6.1.21/node_modules/@fullcalendar/interaction/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@kurkle+color@0.3.4/node_modules/@kurkle/color/dist/color.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+core@2.27.2_@tiptap+pm@2.27.2/node_modules/@tiptap/core/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-blockquote@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-blockquote/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-bold@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-bold/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-bullet-list@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-bullet-list/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-code-block@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-code-block/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-code@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-code/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-color@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+extension_d961dd9deb201d60742e19b1ccb4e80a/node_modules/@tiptap/extension-color/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-document@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-document/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-dropcursor@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-dropcursor/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-font-family@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+ext_c475e5fed543894a4787177c7111f93b/node_modules/@tiptap/extension-font-family/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-gapcursor@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-gapcursor/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-hard-break@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-hard-break/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-heading@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-heading/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-history@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-history/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-horizontal-rule@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-horizontal-rule/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-image@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-image/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-italic@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-italic/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-list-item@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-list-item/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-ordered-list@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-ordered-list/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-paragraph@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-paragraph/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-placeholder@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-placeholder/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-strike@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-strike/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-subscript@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-subscript/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-superscript@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-superscript/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-table-cell@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-table-cell/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-table-header@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-table-header/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-table-row@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-table-row/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-table@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2__@tiptap+pm@2.27.2/node_modules/@tiptap/extension-table/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-text-align@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-text-align/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-text-style@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-text-style/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-text@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-text/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-underline@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-underline/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+extension-youtube@2.27.2_@tiptap+core@2.27.2_@tiptap+pm@2.27.2_/node_modules/@tiptap/extension-youtube/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/commands/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/dropcursor/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/gapcursor/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/history/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/keymap/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/model/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/schema-list/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/state/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/tables/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/transform/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+pm@2.27.2/node_modules/@tiptap/pm/view/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@tiptap+starter-kit@2.27.2/node_modules/@tiptap/starter-kit/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@turf+boolean-point-in-polygon@7.4.0/node_modules/@turf/boolean-point-in-polygon/dist/cjs/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@turf+helpers@7.4.0/node_modules/@turf/helpers/dist/cjs/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@turf+invariant@7.4.0/node_modules/@turf/invariant/dist/cjs/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/auto/auto.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/orderedmap@2.1.1/node_modules/orderedmap/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/point-in-polygon-hao@1.2.4/node_modules/point-in-polygon-hao/dist/cjs/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-commands@1.7.2/node_modules/prosemirror-commands/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-dropcursor@1.8.3/node_modules/prosemirror-dropcursor/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-gapcursor@1.4.1/node_modules/prosemirror-gapcursor/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-history@1.5.0/node_modules/prosemirror-history/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-model@1.25.11/node_modules/prosemirror-model/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-schema-list@1.5.1/node_modules/prosemirror-schema-list/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-state@1.4.4/node_modules/prosemirror-state/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-tables@1.8.5/node_modules/prosemirror-tables/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-transform@1.12.0/node_modules/prosemirror-transform/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/prosemirror-view@1.42.2/node_modules/prosemirror-view/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/rope-sequence@1.3.4/node_modules/rope-sequence/dist/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/shared/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/constants.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/constants.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/warnings.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/hydration.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/equality.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/shared/errors.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/context.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/task.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/error-handling.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/status.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/store.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/boundary.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/create-subscriber.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/errors.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/async.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/deriveds.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/batch.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/sources.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/runtime.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/proxy.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/operations.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/effects.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/legacy.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/utils.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dev/css.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/events.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/reconciler.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/template.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/render.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/branches.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/each.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/if.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/snippet.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/svelte-component.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/attachments.js","webpack://__ember_auto_import__/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/shared/attributes.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/blocks/key.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/timing.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/class.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/style.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/attributes.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/bindings/size.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/reactivity/props.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/legacy/legacy-client.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/custom-element.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/index-client.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/disclose-version.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/date.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/set.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/map.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/url-search-params.js","webpack://__ember_auto_import__/node_modules/.pnpm/@event-calendar+core@5.12.0/node_modules/@event-calendar/core/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/url.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/reactivity/media-query.js","webpack://__ember_auto_import__/node_modules/.pnpm/svelte@5.56.8/node_modules/svelte/src/internal/client/dom/elements/misc.js","webpack://__ember_auto_import__/node_modules/.pnpm/@fortawesome+fontawesome-svg-core@6.4.0/node_modules/@fortawesome/fontawesome-svg-core/index.mjs","webpack://__ember_auto_import__/src/runtime.ts","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs-glimmer@1.1.1_prismjs@1.30.0/node_modules/prismjs-glimmer/dist/glimmer.esm.min.js","webpack://__ember_auto_import__/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/xlsx@0.18.5/node_modules/xlsx/xlsx.mjs"],"sourcesContent":["/* \n   NOTICE\n   Since version 3.2.5, the functionality in this file is by\n   default NOT used for localizing OSRM instructions.\n   Instead, we rely on the module osrm-text-instructions (https://github.com/Project-OSRM/osrm-text-instructions/).\n   \n   This file can still be used for other routing backends, or if you specify the\n   stepToText option in the OSRMv1 class.\n*/\n\nconst spanish = {\n    directions: {\n        N: 'norte',\n        NE: 'noreste',\n        E: 'este',\n        SE: 'sureste',\n        S: 'sur',\n        SW: 'suroeste',\n        W: 'oeste',\n        NW: 'noroeste',\n        SlightRight: 'leve giro a la derecha',\n        Right: 'derecha',\n        SharpRight: 'giro pronunciado a la derecha',\n        SlightLeft: 'leve giro a la izquierda',\n        Left: 'izquierda',\n        SharpLeft: 'giro pronunciado a la izquierda',\n        Uturn: 'media vuelta',\n    },\n    instructions: {\n        // instruction, postfix if the road is named\n        Head: ['Derecho {dir}', ' sobre {road}'],\n        Continue: ['Continuar {dir}', ' en {road}'],\n        TurnAround: ['Dar vuelta'],\n        WaypointReached: ['Llegó a un punto del camino'],\n        Roundabout: ['Tomar {exitStr} salida en la rotonda', ' en {road}'],\n        DestinationReached: ['Llegada a destino'],\n        Fork: ['En el cruce gira a {modifier}', ' hacia {road}'],\n        Merge: ['Incorpórate {modifier}', ' hacia {road}'],\n        OnRamp: ['Gira {modifier} en la salida', ' hacia {road}'],\n        OffRamp: ['Toma la salida {modifier}', ' hacia {road}'],\n        EndOfRoad: ['Gira {modifier} al final de la carretera', ' hacia {road}'],\n        Onto: 'hacia {road}',\n    },\n    formatOrder: function (n) {\n        return n + 'º';\n    },\n    ui: {\n        startPlaceholder: 'Inicio',\n        viaPlaceholder: 'Via {viaNumber}',\n        endPlaceholder: 'Destino',\n    },\n    units: {\n        meters: 'm',\n        kilometers: 'km',\n        yards: 'yd',\n        miles: 'mi',\n        hours: 'h',\n        minutes: 'min',\n        seconds: 's',\n    },\n};\n\nconst Localization = L.Class.extend({\n    initialize: function (langs) {\n        this._langs = L.Util.isArray(langs) ? langs.slice() : [langs, 'en'];\n\n        for (var i = 0, l = this._langs.length; i < l; i++) {\n            var generalizedCode = /([A-Za-z]+)/.exec(this._langs[i])[1];\n            if (!Localization[this._langs[i]]) {\n                if (Localization[generalizedCode]) {\n                    this._langs[i] = generalizedCode;\n                } else {\n                    throw new Error('No localization for language \"' + this._langs[i] + '\".');\n                }\n            }\n        }\n    },\n\n    localize: function (keys) {\n        var dict, key, value;\n\n        keys = L.Util.isArray(keys) ? keys : [keys];\n\n        for (var i = 0, l = this._langs.length; i < l; i++) {\n            dict = Localization[this._langs[i]];\n            for (var j = 0, nKeys = keys.length; dict && j < nKeys; j++) {\n                key = keys[j];\n                value = dict[key];\n                dict = value;\n            }\n\n            if (value) {\n                return value;\n            }\n        }\n    },\n});\n\nexport { spanish, Localization as BaseLocalization };\n\nexport default L.extend(Localization, {\n    en: {\n        directions: {\n            N: 'north',\n            NE: 'northeast',\n            E: 'east',\n            SE: 'southeast',\n            S: 'south',\n            SW: 'southwest',\n            W: 'west',\n            NW: 'northwest',\n            SlightRight: 'slight right',\n            Right: 'right',\n            SharpRight: 'sharp right',\n            SlightLeft: 'slight left',\n            Left: 'left',\n            SharpLeft: 'sharp left',\n            Uturn: 'Turn around',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Head {dir}', ' on {road}'],\n            Continue: ['Continue {dir}'],\n            TurnAround: ['Turn around'],\n            WaypointReached: ['Waypoint reached'],\n            Roundabout: ['Take the {exitStr} exit in the roundabout', ' onto {road}'],\n            DestinationReached: ['Destination reached'],\n            Fork: ['At the fork, turn {modifier}', ' onto {road}'],\n            Merge: ['Merge {modifier}', ' onto {road}'],\n            OnRamp: ['Turn {modifier} on the ramp', ' onto {road}'],\n            OffRamp: ['Take the ramp on the {modifier}', ' onto {road}'],\n            EndOfRoad: ['Turn {modifier} at the end of the road', ' onto {road}'],\n            Onto: 'onto {road}',\n        },\n        formatOrder: function (n) {\n            var i = (n % 10) - 1,\n                suffix = ['st', 'nd', 'rd'];\n\n            return suffix[i] ? n + suffix[i] : n + 'th';\n        },\n        ui: {\n            startPlaceholder: 'Start',\n            viaPlaceholder: 'Via {viaNumber}',\n            endPlaceholder: 'End',\n        },\n        units: {\n            meters: 'm',\n            kilometers: 'km',\n            yards: 'yd',\n            miles: 'mi',\n            hours: 'h',\n            minutes: 'min',\n            seconds: 's',\n        },\n    },\n\n    de: {\n        directions: {\n            N: 'Norden',\n            NE: 'Nordosten',\n            E: 'Osten',\n            SE: 'Südosten',\n            S: 'Süden',\n            SW: 'Südwesten',\n            W: 'Westen',\n            NW: 'Nordwesten',\n            SlightRight: 'leicht rechts',\n            Right: 'rechts',\n            SharpRight: 'scharf rechts',\n            SlightLeft: 'leicht links',\n            Left: 'links',\n            SharpLeft: 'scharf links',\n            Uturn: 'Wenden',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Richtung {dir}', ' auf {road}'],\n            Continue: ['Geradeaus Richtung {dir}', ' auf {road}'],\n            SlightRight: ['Leicht rechts abbiegen', ' auf {road}'],\n            Right: ['Rechts abbiegen', ' auf {road}'],\n            SharpRight: ['Scharf rechts abbiegen', ' auf {road}'],\n            TurnAround: ['Wenden'],\n            SharpLeft: ['Scharf links abbiegen', ' auf {road}'],\n            Left: ['Links abbiegen', ' auf {road}'],\n            SlightLeft: ['Leicht links abbiegen', ' auf {road}'],\n            WaypointReached: ['Zwischenhalt erreicht'],\n            Roundabout: ['Nehmen Sie die {exitStr} Ausfahrt im Kreisverkehr', ' auf {road}'],\n            DestinationReached: ['Sie haben ihr Ziel erreicht'],\n            Fork: ['An der Kreuzung {modifier}', ' auf {road}'],\n            Merge: ['Fahren Sie {modifier} weiter', ' auf {road}'],\n            OnRamp: ['Fahren Sie {modifier} auf die Auffahrt', ' auf {road}'],\n            OffRamp: ['Nehmen Sie die Ausfahrt {modifier}', ' auf {road}'],\n            EndOfRoad: ['Fahren Sie {modifier} am Ende der Straße', ' auf {road}'],\n            Onto: 'auf {road}',\n        },\n        formatOrder: function (n) {\n            return n + '.';\n        },\n        ui: {\n            startPlaceholder: 'Start',\n            viaPlaceholder: 'Via {viaNumber}',\n            endPlaceholder: 'Ziel',\n        },\n    },\n\n    sv: {\n        directions: {\n            N: 'norr',\n            NE: 'nordost',\n            E: 'öst',\n            SE: 'sydost',\n            S: 'syd',\n            SW: 'sydväst',\n            W: 'väst',\n            NW: 'nordväst',\n            SlightRight: 'svagt höger',\n            Right: 'höger',\n            SharpRight: 'skarpt höger',\n            SlightLeft: 'svagt vänster',\n            Left: 'vänster',\n            SharpLeft: 'skarpt vänster',\n            Uturn: 'Vänd',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Åk åt {dir}', ' till {road}'],\n            Continue: ['Fortsätt {dir}'],\n            SlightRight: ['Svagt höger', ' till {road}'],\n            Right: ['Sväng höger', ' till {road}'],\n            SharpRight: ['Skarpt höger', ' till {road}'],\n            TurnAround: ['Vänd'],\n            SharpLeft: ['Skarpt vänster', ' till {road}'],\n            Left: ['Sväng vänster', ' till {road}'],\n            SlightLeft: ['Svagt vänster', ' till {road}'],\n            WaypointReached: ['Viapunkt nådd'],\n            Roundabout: ['Tag {exitStr} avfarten i rondellen', ' till {road}'],\n            DestinationReached: ['Framme vid resans mål'],\n            Fork: ['Tag av {modifier}', ' till {road}'],\n            Merge: ['Anslut {modifier} ', ' till {road}'],\n            OnRamp: ['Tag påfarten {modifier}', ' till {road}'],\n            OffRamp: ['Tag avfarten {modifier}', ' till {road}'],\n            EndOfRoad: ['Sväng {modifier} vid vägens slut', ' till {road}'],\n            Onto: 'till {road}',\n        },\n        formatOrder: function (n) {\n            return [\n                'första',\n                'andra',\n                'tredje',\n                'fjärde',\n                'femte',\n                'sjätte',\n                'sjunde',\n                'åttonde',\n                'nionde',\n                'tionde',\n                /* Can't possibly be more than ten exits, can there? */\n            ][n - 1];\n        },\n        ui: {\n            startPlaceholder: 'Från',\n            viaPlaceholder: 'Via {viaNumber}',\n            endPlaceholder: 'Till',\n        },\n    },\n\n    es: spanish,\n    sp: spanish,\n\n    nl: {\n        directions: {\n            N: 'noordelijke',\n            NE: 'noordoostelijke',\n            E: 'oostelijke',\n            SE: 'zuidoostelijke',\n            S: 'zuidelijke',\n            SW: 'zuidewestelijke',\n            W: 'westelijke',\n            NW: 'noordwestelijke',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Vertrek in {dir} richting', ' de {road} op'],\n            Continue: ['Ga in {dir} richting', ' de {road} op'],\n            SlightRight: ['Volg de weg naar rechts', ' de {road} op'],\n            Right: ['Ga rechtsaf', ' de {road} op'],\n            SharpRight: ['Ga scherpe bocht naar rechts', ' de {road} op'],\n            TurnAround: ['Keer om'],\n            SharpLeft: ['Ga scherpe bocht naar links', ' de {road} op'],\n            Left: ['Ga linksaf', ' de {road} op'],\n            SlightLeft: ['Volg de weg naar links', ' de {road} op'],\n            WaypointReached: ['Aangekomen bij tussenpunt'],\n            Roundabout: ['Neem de {exitStr} afslag op de rotonde', ' de {road} op'],\n            DestinationReached: ['Aangekomen op eindpunt'],\n        },\n        formatOrder: function (n) {\n            if (n === 1 || n >= 20) {\n                return n + 'ste';\n            } else {\n                return n + 'de';\n            }\n        },\n        ui: {\n            startPlaceholder: 'Vertrekpunt',\n            viaPlaceholder: 'Via {viaNumber}',\n            endPlaceholder: 'Bestemming',\n        },\n    },\n    fr: {\n        directions: {\n            N: 'nord',\n            NE: 'nord-est',\n            E: 'est',\n            SE: 'sud-est',\n            S: 'sud',\n            SW: 'sud-ouest',\n            W: 'ouest',\n            NW: 'nord-ouest',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Tout droit au {dir}', ' sur {road}'],\n            Continue: ['Continuer au {dir}', ' sur {road}'],\n            SlightRight: ['Légèrement à droite', ' sur {road}'],\n            Right: ['A droite', ' sur {road}'],\n            SharpRight: ['Complètement à droite', ' sur {road}'],\n            TurnAround: ['Faire demi-tour'],\n            SharpLeft: ['Complètement à gauche', ' sur {road}'],\n            Left: ['A gauche', ' sur {road}'],\n            SlightLeft: ['Légèrement à gauche', ' sur {road}'],\n            WaypointReached: [\"Point d'étape atteint\"],\n            Roundabout: ['Au rond-point, prenez la {exitStr} sortie', ' sur {road}'],\n            DestinationReached: ['Destination atteinte'],\n        },\n        formatOrder: function (n) {\n            return n + 'º';\n        },\n        ui: {\n            startPlaceholder: 'Départ',\n            viaPlaceholder: 'Intermédiaire {viaNumber}',\n            endPlaceholder: 'Arrivée',\n        },\n    },\n    it: {\n        directions: {\n            N: 'nord',\n            NE: 'nord-est',\n            E: 'est',\n            SE: 'sud-est',\n            S: 'sud',\n            SW: 'sud-ovest',\n            W: 'ovest',\n            NW: 'nord-ovest',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Dritto verso {dir}', ' su {road}'],\n            Continue: ['Continuare verso {dir}', ' su {road}'],\n            SlightRight: ['Mantenere la destra', ' su {road}'],\n            Right: ['A destra', ' su {road}'],\n            SharpRight: ['Strettamente a destra', ' su {road}'],\n            TurnAround: ['Fare inversione di marcia'],\n            SharpLeft: ['Strettamente a sinistra', ' su {road}'],\n            Left: ['A sinistra', ' sur {road}'],\n            SlightLeft: ['Mantenere la sinistra', ' su {road}'],\n            WaypointReached: ['Punto di passaggio raggiunto'],\n            Roundabout: ['Alla rotonda, prendere la {exitStr} uscita'],\n            DestinationReached: ['Destinazione raggiunta'],\n        },\n        formatOrder: function (n) {\n            return n + 'º';\n        },\n        ui: {\n            startPlaceholder: 'Partenza',\n            viaPlaceholder: 'Intermedia {viaNumber}',\n            endPlaceholder: 'Destinazione',\n        },\n    },\n    pt: {\n        directions: {\n            N: 'norte',\n            NE: 'nordeste',\n            E: 'leste',\n            SE: 'sudeste',\n            S: 'sul',\n            SW: 'sudoeste',\n            W: 'oeste',\n            NW: 'noroeste',\n            SlightRight: 'curva ligeira a direita',\n            Right: 'direita',\n            SharpRight: 'curva fechada a direita',\n            SlightLeft: 'ligeira a esquerda',\n            Left: 'esquerda',\n            SharpLeft: 'curva fechada a esquerda',\n            Uturn: 'Meia volta',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Siga {dir}', ' na {road}'],\n            Continue: ['Continue {dir}', ' na {road}'],\n            SlightRight: ['Curva ligeira a direita', ' na {road}'],\n            Right: ['Curva a direita', ' na {road}'],\n            SharpRight: ['Curva fechada a direita', ' na {road}'],\n            TurnAround: ['Retorne'],\n            SharpLeft: ['Curva fechada a esquerda', ' na {road}'],\n            Left: ['Curva a esquerda', ' na {road}'],\n            SlightLeft: ['Curva ligueira a esquerda', ' na {road}'],\n            WaypointReached: ['Ponto de interesse atingido'],\n            Roundabout: ['Pegue a {exitStr} saída na rotatória', ' na {road}'],\n            DestinationReached: ['Destino atingido'],\n            Fork: ['Na encruzilhada, vire a {modifier}', ' na {road}'],\n            Merge: ['Entre à {modifier}', ' na {road}'],\n            OnRamp: ['Vire {modifier} na rampa', ' na {road}'],\n            OffRamp: ['Entre na rampa na {modifier}', ' na {road}'],\n            EndOfRoad: ['Vire {modifier} no fim da rua', ' na {road}'],\n            Onto: 'na {road}',\n        },\n        formatOrder: function (n) {\n            return n + 'º';\n        },\n        ui: {\n            startPlaceholder: 'Origem',\n            viaPlaceholder: 'Intermédio {viaNumber}',\n            endPlaceholder: 'Destino',\n        },\n    },\n    sk: {\n        directions: {\n            N: 'sever',\n            NE: 'serverovýchod',\n            E: 'východ',\n            SE: 'juhovýchod',\n            S: 'juh',\n            SW: 'juhozápad',\n            W: 'západ',\n            NW: 'serverozápad',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Mierte na {dir}', ' na {road}'],\n            Continue: ['Pokračujte na {dir}', ' na {road}'],\n            SlightRight: ['Mierne doprava', ' na {road}'],\n            Right: ['Doprava', ' na {road}'],\n            SharpRight: ['Prudko doprava', ' na {road}'],\n            TurnAround: ['Otočte sa'],\n            SharpLeft: ['Prudko doľava', ' na {road}'],\n            Left: ['Doľava', ' na {road}'],\n            SlightLeft: ['Mierne doľava', ' na {road}'],\n            WaypointReached: ['Ste v prejazdovom bode.'],\n            Roundabout: ['Odbočte na {exitStr} výjazde', ' na {road}'],\n            DestinationReached: ['Prišli ste do cieľa.'],\n        },\n        formatOrder: function (n) {\n            var i = (n % 10) - 1,\n                suffix = ['.', '.', '.'];\n\n            return suffix[i] ? n + suffix[i] : n + '.';\n        },\n        ui: {\n            startPlaceholder: 'Začiatok',\n            viaPlaceholder: 'Cez {viaNumber}',\n            endPlaceholder: 'Koniec',\n        },\n    },\n    el: {\n        directions: {\n            N: 'βόρεια',\n            NE: 'βορειοανατολικά',\n            E: 'ανατολικά',\n            SE: 'νοτιοανατολικά',\n            S: 'νότια',\n            SW: 'νοτιοδυτικά',\n            W: 'δυτικά',\n            NW: 'βορειοδυτικά',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Κατευθυνθείτε {dir}', ' στην {road}'],\n            Continue: ['Συνεχίστε {dir}', ' στην {road}'],\n            SlightRight: ['Ελαφρώς δεξιά', ' στην {road}'],\n            Right: ['Δεξιά', ' στην {road}'],\n            SharpRight: ['Απότομη δεξιά στροφή', ' στην {road}'],\n            TurnAround: ['Κάντε αναστροφή'],\n            SharpLeft: ['Απότομη αριστερή στροφή', ' στην {road}'],\n            Left: ['Αριστερά', ' στην {road}'],\n            SlightLeft: ['Ελαφρώς αριστερά', ' στην {road}'],\n            WaypointReached: ['Φτάσατε στο σημείο αναφοράς'],\n            Roundabout: ['Ακολουθήστε την {exitStr} έξοδο στο κυκλικό κόμβο', ' στην {road}'],\n            DestinationReached: ['Φτάσατε στον προορισμό σας'],\n        },\n        formatOrder: function (n) {\n            return n + 'º';\n        },\n        ui: {\n            startPlaceholder: 'Αφετηρία',\n            viaPlaceholder: 'μέσω {viaNumber}',\n            endPlaceholder: 'Προορισμός',\n        },\n    },\n    ca: {\n        directions: {\n            N: 'nord',\n            NE: 'nord-est',\n            E: 'est',\n            SE: 'sud-est',\n            S: 'sud',\n            SW: 'sud-oest',\n            W: 'oest',\n            NW: 'nord-oest',\n            SlightRight: 'lleu gir a la dreta',\n            Right: 'dreta',\n            SharpRight: 'gir pronunciat a la dreta',\n            SlightLeft: \"gir pronunciat a l'esquerra\",\n            Left: 'esquerra',\n            SharpLeft: \"lleu gir a l'esquerra\",\n            Uturn: 'mitja volta',\n        },\n        instructions: {\n            Head: ['Recte {dir}', ' sobre {road}'],\n            Continue: ['Continuar {dir}'],\n            TurnAround: ['Donar la volta'],\n            WaypointReached: ['Ha arribat a un punt del camí'],\n            Roundabout: ['Agafar {exitStr} sortida a la rotonda', ' a {road}'],\n            DestinationReached: ['Arribada al destí'],\n            Fork: ['A la cruïlla gira a la {modifier}', ' cap a {road}'],\n            Merge: [\"Incorpora't {modifier}\", ' a {road}'],\n            OnRamp: ['Gira {modifier} a la sortida', ' cap a {road}'],\n            OffRamp: ['Pren la sortida {modifier}', ' cap a {road}'],\n            EndOfRoad: ['Gira {modifier} al final de la carretera', ' cap a {road}'],\n            Onto: 'cap a {road}',\n        },\n        formatOrder: function (n) {\n            return n + 'º';\n        },\n        ui: {\n            startPlaceholder: 'Origen',\n            viaPlaceholder: 'Via {viaNumber}',\n            endPlaceholder: 'Destí',\n        },\n        units: {\n            meters: 'm',\n            kilometers: 'km',\n            yards: 'yd',\n            miles: 'mi',\n            hours: 'h',\n            minutes: 'min',\n            seconds: 's',\n        },\n    },\n    ru: {\n        directions: {\n            N: 'север',\n            NE: 'северовосток',\n            E: 'восток',\n            SE: 'юговосток',\n            S: 'юг',\n            SW: 'югозапад',\n            W: 'запад',\n            NW: 'северозапад',\n            SlightRight: 'плавно направо',\n            Right: 'направо',\n            SharpRight: 'резко направо',\n            SlightLeft: 'плавно налево',\n            Left: 'налево',\n            SharpLeft: 'резко налево',\n            Uturn: 'развернуться',\n        },\n        instructions: {\n            Head: ['Начать движение на {dir}', ' по {road}'],\n            Continue: ['Продолжать движение на {dir}', ' по {road}'],\n            SlightRight: ['Плавный поворот направо', ' на {road}'],\n            Right: ['Направо', ' на {road}'],\n            SharpRight: ['Резкий поворот направо', ' на {road}'],\n            TurnAround: ['Развернуться'],\n            SharpLeft: ['Резкий поворот налево', ' на {road}'],\n            Left: ['Поворот налево', ' на {road}'],\n            SlightLeft: ['Плавный поворот налево', ' на {road}'],\n            WaypointReached: ['Точка достигнута'],\n            Roundabout: ['{exitStr} съезд с кольца', ' на {road}'],\n            DestinationReached: ['Окончание маршрута'],\n            Fork: ['На развилке поверните {modifier}', ' на {road}'],\n            Merge: ['Перестройтесь {modifier}', ' на {road}'],\n            OnRamp: ['Поверните {modifier} на съезд', ' на {road}'],\n            OffRamp: ['Съезжайте на {modifier}', ' на {road}'],\n            EndOfRoad: ['Поверните {modifier} в конце дороги', ' на {road}'],\n            Onto: 'на {road}',\n        },\n        formatOrder: function (n) {\n            return n + '-й';\n        },\n        ui: {\n            startPlaceholder: 'Начало',\n            viaPlaceholder: 'Через {viaNumber}',\n            endPlaceholder: 'Конец',\n        },\n        units: {\n            meters: 'м',\n            kilometers: 'км',\n            yards: 'ярд',\n            miles: 'ми',\n            hours: 'ч',\n            minutes: 'м',\n            seconds: 'с',\n        },\n    },\n\n    pl: {\n        directions: {\n            N: 'północ',\n            NE: 'północny wschód',\n            E: 'wschód',\n            SE: 'południowy wschód',\n            S: 'południe',\n            SW: 'południowy zachód',\n            W: 'zachód',\n            NW: 'północny zachód',\n            SlightRight: 'lekko w prawo',\n            Right: 'w prawo',\n            SharpRight: 'ostro w prawo',\n            SlightLeft: 'lekko w lewo',\n            Left: 'w lewo',\n            SharpLeft: 'ostro w lewo',\n            Uturn: 'zawróć',\n        },\n        instructions: {\n            // instruction, postfix if the road is named\n            Head: ['Kieruj się na {dir}', ' na {road}'],\n            Continue: ['Jedź dalej przez {dir}'],\n            TurnAround: ['Zawróć'],\n            WaypointReached: ['Punkt pośredni'],\n            Roundabout: ['Wyjedź {exitStr} zjazdem na rondzie', ' na {road}'],\n            DestinationReached: ['Dojechano do miejsca docelowego'],\n            Fork: ['Na rozwidleniu {modifier}', ' na {road}'],\n            Merge: ['Zjedź {modifier}', ' na {road}'],\n            OnRamp: ['Wjazd {modifier}', ' na {road}'],\n            OffRamp: ['Zjazd {modifier}', ' na {road}'],\n            EndOfRoad: ['Skręć {modifier} na końcu drogi', ' na {road}'],\n            Onto: 'na {road}',\n        },\n        formatOrder: function (n) {\n            return n + '.';\n        },\n        ui: {\n            startPlaceholder: 'Początek',\n            viaPlaceholder: 'Przez {viaNumber}',\n            endPlaceholder: 'Koniec',\n        },\n        units: {\n            meters: 'm',\n            kilometers: 'km',\n            yards: 'yd',\n            miles: 'mi',\n            hours: 'godz',\n            minutes: 'min',\n            seconds: 's',\n        },\n    },\n    uk: {\n        directions: {\n            N: 'північ',\n            NE: 'північний схід',\n            E: 'схід',\n            SE: 'південний схід',\n            S: 'південь',\n            SW: 'південний захід',\n            W: 'захід',\n            NW: 'північний захід',\n            SlightRight: 'плавно направо',\n            Right: 'направо',\n            SharpRight: 'різко направо',\n            SlightLeft: 'плавно наліво',\n            Left: 'наліво',\n            SharpLeft: 'різко наліво',\n            Uturn: 'розвернутися',\n        },\n        instructions: {\n            Head: ['Почати рух на {dir}', 'по {road}'],\n            Continue: ['Продовжувати рух на {dir}', 'по {road}'],\n            SlightRight: ['Плавний поворот направо', 'на {road}'],\n            Right: ['Направо', 'на {road}'],\n            SharpRight: ['Різкий поворот направо', 'на {road}'],\n            TurnAround: ['Розгорнутися'],\n            SharpLeft: ['Різкий поворот наліво', 'на {road}'],\n            Left: ['Поворот наліво', 'на {road}'],\n            SlightLeft: ['Плавний поворот наліво', 'на {road}'],\n            WaypointReached: ['Точка досягнута'],\n            Roundabout: [\"{ExitStr} з'їзд з кільця\", 'на {road}'],\n            DestinationReached: ['Закінчення маршруту'],\n            Fork: ['На розвилці поверніть {modifier}', 'на {road}'],\n            Merge: ['Візьміть {modifier}', 'на {road}'],\n            OnRamp: [\"Поверніть {modifier} на з'їзд\", 'на {road}'],\n            OffRamp: [\"З'їжджайте на {modifier}\", 'на {road}'],\n            EndOfRoad: ['Поверніть {modifier} в кінці дороги', 'на {road}'],\n            Onto: 'на {road}',\n        },\n        formatOrder: function (n) {\n            return n + '-й';\n        },\n        ui: {\n            startPlaceholder: 'Початок',\n            viaPlaceholder: 'Через {viaNumber}',\n            endPlaceholder: 'Кінець',\n        },\n        units: {\n            meters: 'м',\n            kilometers: 'км',\n            yards: 'ярд',\n            miles: 'ми',\n            hours: 'г',\n            minutes: 'хв',\n            seconds: 'сек',\n        },\n    },\n});\n","import Localization from './localization';\n\nexport default L.Class.extend({\n    options: {\n        units: 'metric',\n        unitNames: null,\n        language: 'en',\n        roundingSensitivity: 1,\n        distanceTemplate: '{value} {unit}',\n    },\n\n    initialize: function (options) {\n        L.setOptions(this, options);\n\n        var langs = L.Util.isArray(this.options.language) ? this.options.language : [this.options.language, 'en'];\n        this._localization = new Localization(langs);\n    },\n\n    formatDistance: function (d /* Number (meters) */, sensitivity) {\n        var un = this.options.unitNames || this._localization.localize('units'),\n            simpleRounding = sensitivity <= 0,\n            round = simpleRounding\n                ? function (v) {\n                      return v;\n                  }\n                : L.bind(this._round, this),\n            v,\n            yards,\n            data,\n            pow10;\n\n        if (this.options.units === 'imperial') {\n            yards = d / 0.9144;\n            if (yards >= 1000) {\n                data = {\n                    value: round(d / 1609.344, sensitivity),\n                    unit: un.miles,\n                };\n            } else {\n                data = {\n                    value: round(yards, sensitivity),\n                    unit: un.yards,\n                };\n            }\n        } else {\n            v = round(d, sensitivity);\n            data = {\n                value: v >= 1000 ? v / 1000 : v,\n                unit: v >= 1000 ? un.kilometers : un.meters,\n            };\n        }\n\n        if (simpleRounding) {\n            data.value = data.value.toFixed(-sensitivity);\n        }\n\n        return L.Util.template(this.options.distanceTemplate, data);\n    },\n\n    _round: function (d, sensitivity) {\n        var s = sensitivity || this.options.roundingSensitivity,\n            pow10 = Math.pow(10, (Math.floor(d / s) + '').length - 1),\n            r = Math.floor(d / pow10),\n            p = r > 5 ? pow10 : pow10 / 2;\n\n        return Math.round(d / p) * p;\n    },\n\n    formatTime: function (t /* Number (seconds) */) {\n        var un = this.options.unitNames || this._localization.localize('units');\n        // More than 30 seconds precision looks ridiculous\n        t = Math.round(t / 30) * 30;\n\n        if (t > 86400) {\n            return Math.round(t / 3600) + ' ' + un.hours;\n        } else if (t > 3600) {\n            return Math.floor(t / 3600) + ' ' + un.hours + ' ' + Math.round((t % 3600) / 60) + ' ' + un.minutes;\n        } else if (t > 300) {\n            return Math.round(t / 60) + ' ' + un.minutes;\n        } else if (t > 60) {\n            return Math.floor(t / 60) + ' ' + un.minutes + (t % 60 !== 0 ? ' ' + (t % 60) + ' ' + un.seconds : '');\n        } else {\n            return t + ' ' + un.seconds;\n        }\n    },\n\n    formatInstruction: function (instr, i) {\n        if (instr.text === undefined) {\n            return this.capitalize(\n                L.Util.template(\n                    this._getInstructionTemplate(instr, i),\n                    L.extend({}, instr, {\n                        exitStr: instr.exit ? this._localization.localize('formatOrder')(instr.exit) : '',\n                        dir: this._localization.localize(['directions', instr.direction]),\n                        modifier: this._localization.localize(['directions', instr.modifier]),\n                    })\n                )\n            );\n        } else {\n            return instr.text;\n        }\n    },\n\n    getIconName: function (instr, i) {\n        switch (instr.type) {\n            case 'Head':\n                if (i === 0) {\n                    return 'depart';\n                }\n                break;\n            case 'WaypointReached':\n                return 'via';\n            case 'Roundabout':\n                return 'enter-roundabout';\n            case 'DestinationReached':\n                return 'arrive';\n        }\n\n        switch (instr.modifier) {\n            case 'Straight':\n                return 'continue';\n            case 'SlightRight':\n                return 'bear-right';\n            case 'Right':\n                return 'turn-right';\n            case 'SharpRight':\n                return 'sharp-right';\n            case 'TurnAround':\n            case 'Uturn':\n                return 'u-turn';\n            case 'SharpLeft':\n                return 'sharp-left';\n            case 'Left':\n                return 'turn-left';\n            case 'SlightLeft':\n                return 'bear-left';\n        }\n    },\n\n    capitalize: function (s) {\n        return s.charAt(0).toUpperCase() + s.substring(1);\n    },\n\n    _getInstructionTemplate: function (instr, i) {\n        var type = instr.type === 'Straight' ? (i === 0 ? 'Head' : 'Continue') : instr.type,\n            strings = this._localization.localize(['instructions', type]);\n\n        if (!strings) {\n            strings = [this._localization.localize(['directions', type]), ' ' + this._localization.localize(['instructions', 'Onto'])];\n        }\n\n        return strings[0] + (strings.length > 1 && instr.road ? strings[1] : '');\n    },\n});\n","export default L.Class.extend({\n    options: {\n        containerClassName: '',\n    },\n\n    initialize: function (options) {\n        L.setOptions(this, options);\n    },\n\n    createContainer: function (className) {\n        var table = L.DomUtil.create('table', (className || '') + ' ' + this.options.containerClassName),\n            colgroup = L.DomUtil.create('colgroup', '', table);\n\n        L.DomUtil.create('col', 'leaflet-routing-instruction-icon', colgroup);\n        L.DomUtil.create('col', 'leaflet-routing-instruction-text', colgroup);\n        L.DomUtil.create('col', 'leaflet-routing-instruction-distance', colgroup);\n\n        return table;\n    },\n\n    createStepsContainer: function () {\n        return L.DomUtil.create('tbody', '');\n    },\n\n    createStep: function (text, distance, icon, steps) {\n        var row = L.DomUtil.create('tr', '', steps),\n            span,\n            td;\n        td = L.DomUtil.create('td', '', row);\n        span = L.DomUtil.create('span', 'leaflet-routing-icon leaflet-routing-icon-' + icon, td);\n        td.appendChild(span);\n        td = L.DomUtil.create('td', '', row);\n        td.appendChild(document.createTextNode(text));\n        td = L.DomUtil.create('td', '', row);\n        td.appendChild(document.createTextNode(distance));\n        return row;\n    },\n});\n","import Formatter from './formatter';\nimport ItineraryBuilder from './itinerary-builder';\n\nexport default L.Control.extend({\n    includes: (typeof L.Evented !== 'undefined' && L.Evented.prototype) || L.Mixin.Events,\n\n    options: {\n        pointMarkerStyle: {\n            radius: 5,\n            color: '#03f',\n            fillColor: 'white',\n            opacity: 1,\n            fillOpacity: 0.7,\n        },\n        summaryTemplate: '<h2>{name}</h2><h3>{distance}, {time}</h3>',\n        timeTemplate: '{time}',\n        containerClassName: '',\n        alternativeClassName: '',\n        minimizedClassName: '',\n        itineraryClassName: '',\n        totalDistanceRoundingSensitivity: -1,\n        show: true,\n        collapsible: undefined,\n        collapseBtn: function (itinerary) {\n            var collapseBtn = L.DomUtil.create('span', itinerary.options.collapseBtnClass);\n            L.DomEvent.on(collapseBtn, 'click', itinerary._toggle, itinerary);\n            itinerary._container.insertBefore(collapseBtn, itinerary._container.firstChild);\n        },\n        collapseBtnClass: 'leaflet-routing-collapse-btn',\n    },\n\n    initialize: function (options) {\n        L.setOptions(this, options);\n        this._formatter = this.options.formatter || new Formatter(this.options);\n        this._itineraryBuilder =\n            this.options.itineraryBuilder ||\n            new ItineraryBuilder({\n                containerClassName: this.options.itineraryClassName,\n            });\n    },\n\n    onAdd: function (map) {\n        var collapsible = this.options.collapsible;\n\n        collapsible = collapsible || (collapsible === undefined && map.getSize().x <= 640);\n\n        this._container = L.DomUtil.create(\n            'div',\n            'leaflet-routing-container leaflet-bar ' +\n                (!this.options.show ? 'leaflet-routing-container-hide ' : '') +\n                (collapsible ? 'leaflet-routing-collapsible ' : '') +\n                this.options.containerClassName\n        );\n        this._altContainer = this.createAlternativesContainer();\n        this._container.appendChild(this._altContainer);\n        L.DomEvent.disableClickPropagation(this._container);\n        L.DomEvent.addListener(this._container, 'mousewheel', function (e) {\n            L.DomEvent.stopPropagation(e);\n        });\n\n        if (collapsible) {\n            this.options.collapseBtn(this);\n        }\n\n        return this._container;\n    },\n\n    onRemove: function () {},\n\n    createAlternativesContainer: function () {\n        return L.DomUtil.create('div', 'leaflet-routing-alternatives-container');\n    },\n\n    setAlternatives: function (routes) {\n        var i, alt, altDiv;\n\n        this._clearAlts();\n\n        this._routes = routes;\n\n        for (i = 0; i < this._routes.length; i++) {\n            alt = this._routes[i];\n            altDiv = this._createAlternative(alt, i);\n            this._altContainer.appendChild(altDiv);\n            this._altElements.push(altDiv);\n        }\n\n        this._selectRoute({ route: this._routes[0], alternatives: this._routes.slice(1) });\n\n        return this;\n    },\n\n    show: function () {\n        L.DomUtil.removeClass(this._container, 'leaflet-routing-container-hide');\n    },\n\n    hide: function () {\n        L.DomUtil.addClass(this._container, 'leaflet-routing-container-hide');\n    },\n\n    _toggle: function () {\n        var collapsed = L.DomUtil.hasClass(this._container, 'leaflet-routing-container-hide');\n        this[collapsed ? 'show' : 'hide']();\n    },\n\n    _createAlternative: function (alt, i) {\n        var altDiv = L.DomUtil.create('div', 'leaflet-routing-alt ' + this.options.alternativeClassName + (i > 0 ? ' leaflet-routing-alt-minimized ' + this.options.minimizedClassName : '')),\n            template = this.options.summaryTemplate,\n            data = L.extend(\n                {\n                    name: alt.name,\n                    distance: this._formatter.formatDistance(alt.summary.totalDistance, this.options.totalDistanceRoundingSensitivity),\n                    time: this._formatter.formatTime(alt.summary.totalTime),\n                },\n                alt\n            );\n        altDiv.innerHTML = typeof template === 'function' ? template(data) : L.Util.template(template, data);\n        L.DomEvent.addListener(altDiv, 'click', this._onAltClicked, this);\n        this.on('routeselected', this._selectAlt, this);\n\n        altDiv.appendChild(this._createItineraryContainer(alt));\n        return altDiv;\n    },\n\n    _clearAlts: function () {\n        var el = this._altContainer;\n        while (el && el.firstChild) {\n            el.removeChild(el.firstChild);\n        }\n\n        this._altElements = [];\n    },\n\n    _createItineraryContainer: function (r) {\n        var container = this._itineraryBuilder.createContainer(),\n            steps = this._itineraryBuilder.createStepsContainer(),\n            i,\n            instr,\n            step,\n            distance,\n            text,\n            icon;\n\n        container.appendChild(steps);\n\n        for (i = 0; i < r.instructions.length; i++) {\n            instr = r.instructions[i];\n            text = this._formatter.formatInstruction(instr, i);\n            distance = this._formatter.formatDistance(instr.distance);\n            icon = this._formatter.getIconName(instr, i);\n            step = this._itineraryBuilder.createStep(text, distance, icon, steps);\n\n            if (instr.index) {\n                this._addRowListeners(step, r.coordinates[instr.index]);\n            }\n        }\n\n        return container;\n    },\n\n    _addRowListeners: function (row, coordinate) {\n        L.DomEvent.addListener(\n            row,\n            'mouseover',\n            function () {\n                this._marker = L.circleMarker(coordinate, this.options.pointMarkerStyle).addTo(this._map);\n            },\n            this\n        );\n        L.DomEvent.addListener(\n            row,\n            'mouseout',\n            function () {\n                if (this._marker) {\n                    this._map.removeLayer(this._marker);\n                    delete this._marker;\n                }\n            },\n            this\n        );\n        L.DomEvent.addListener(\n            row,\n            'click',\n            function (e) {\n                this._map.panTo(coordinate);\n                L.DomEvent.stopPropagation(e);\n            },\n            this\n        );\n    },\n\n    _onAltClicked: function (e) {\n        var altElem = e.target || window.event.srcElement;\n        while (!L.DomUtil.hasClass(altElem, 'leaflet-routing-alt')) {\n            altElem = altElem.parentElement;\n        }\n\n        var j = this._altElements.indexOf(altElem);\n        var alts = this._routes.slice();\n        var route = alts.splice(j, 1)[0];\n\n        this.fire('routeselected', {\n            route: route,\n            alternatives: alts,\n        });\n    },\n\n    _selectAlt: function (e) {\n        var altElem, j, n, classFn;\n\n        altElem = this._altElements[e.route.routesIndex];\n\n        if (L.DomUtil.hasClass(altElem, 'leaflet-routing-alt-minimized')) {\n            for (j = 0; j < this._altElements.length; j++) {\n                n = this._altElements[j];\n                classFn = j === e.route.routesIndex ? 'removeClass' : 'addClass';\n                L.DomUtil[classFn](n, 'leaflet-routing-alt-minimized');\n                if (this.options.minimizedClassName) {\n                    L.DomUtil[classFn](n, this.options.minimizedClassName);\n                }\n\n                if (j !== e.route.routesIndex) n.scrollTop = 0;\n            }\n        }\n\n        L.DomEvent.stop(e);\n    },\n\n    _selectRoute: function (routes) {\n        if (this._marker) {\n            this._map.removeLayer(this._marker);\n            delete this._marker;\n        }\n        this.fire('routeselected', routes);\n    },\n});\n","export default L.LayerGroup.extend({\n    includes: (typeof L.Evented !== 'undefined' && L.Evented.prototype) || L.Mixin.Events,\n\n    options: {\n        styles: [\n            { color: 'black', opacity: 0.15, weight: 9 },\n            { color: 'white', opacity: 0.8, weight: 6 },\n            { color: 'red', opacity: 1, weight: 2 },\n        ],\n        missingRouteStyles: [\n            { color: 'black', opacity: 0.15, weight: 7 },\n            { color: 'white', opacity: 0.6, weight: 4 },\n            { color: 'gray', opacity: 0.8, weight: 2, dashArray: '7,12' },\n        ],\n        addWaypoints: true,\n        extendToWaypoints: true,\n        missingRouteTolerance: 10,\n    },\n\n    initialize: function (route, options) {\n        L.setOptions(this, options);\n        L.LayerGroup.prototype.initialize.call(this, options);\n        this._route = route;\n\n        if (this.options.extendToWaypoints) {\n            this._extendToWaypoints();\n        }\n\n        this._addSegment(route.coordinates, this.options.styles, this.options.addWaypoints);\n    },\n\n    getBounds: function () {\n        return L.latLngBounds(this._route.coordinates);\n    },\n\n    _findWaypointIndices: function () {\n        var wps = this._route.inputWaypoints,\n            indices = [],\n            i;\n        for (i = 0; i < wps.length; i++) {\n            indices.push(this._findClosestRoutePoint(wps[i].latLng));\n        }\n\n        return indices;\n    },\n\n    _findClosestRoutePoint: function (latlng) {\n        var minDist = Number.MAX_VALUE,\n            minIndex,\n            i,\n            d;\n\n        for (i = this._route.coordinates.length - 1; i >= 0; i--) {\n            // TODO: maybe do this in pixel space instead?\n            d = latlng.distanceTo(this._route.coordinates[i]);\n            if (d < minDist) {\n                minIndex = i;\n                minDist = d;\n            }\n        }\n\n        return minIndex;\n    },\n\n    _extendToWaypoints: function () {\n        var wps = this._route.inputWaypoints,\n            wpIndices = this._getWaypointIndices(),\n            i,\n            wpLatLng,\n            routeCoord;\n\n        for (i = 0; i < wps.length; i++) {\n            wpLatLng = wps[i].latLng;\n            routeCoord = L.latLng(this._route.coordinates[wpIndices[i]]);\n            if (wpLatLng.distanceTo(routeCoord) > this.options.missingRouteTolerance) {\n                this._addSegment([wpLatLng, routeCoord], this.options.missingRouteStyles);\n            }\n        }\n    },\n\n    _addSegment: function (coords, styles, mouselistener) {\n        var i, pl;\n\n        for (i = 0; i < styles.length; i++) {\n            pl = L.polyline(coords, styles[i]);\n            this.addLayer(pl);\n            if (mouselistener) {\n                pl.on('mousedown', this._onLineTouched, this);\n            }\n        }\n    },\n\n    _findNearestWpBefore: function (i) {\n        var wpIndices = this._getWaypointIndices(),\n            j = wpIndices.length - 1;\n        while (j >= 0 && wpIndices[j] > i) {\n            j--;\n        }\n\n        return j;\n    },\n\n    _onLineTouched: function (e) {\n        var afterIndex = this._findNearestWpBefore(this._findClosestRoutePoint(e.latlng));\n        this.fire('linetouched', {\n            afterIndex: afterIndex,\n            latlng: e.latlng,\n        });\n        L.DomEvent.stop(e);\n    },\n\n    _getWaypointIndices: function () {\n        if (!this._wpIndices) {\n            this._wpIndices = this._route.waypointIndices || this._findWaypointIndices();\n        }\n\n        return this._wpIndices;\n    },\n});\n","export default L.Class.extend({\n    options: {\n        timeout: 500,\n        blurTimeout: 100,\n        noResultsMessage: 'No results found.',\n    },\n\n    initialize: function (elem, callback, context, options) {\n        L.setOptions(this, options);\n\n        this._elem = elem;\n        this._resultFn = options.resultFn ? L.Util.bind(options.resultFn, options.resultContext) : null;\n        this._autocomplete = options.autocompleteFn ? L.Util.bind(options.autocompleteFn, options.autocompleteContext) : null;\n        this._selectFn = L.Util.bind(callback, context);\n        this._container = L.DomUtil.create('div', 'leaflet-routing-geocoder-result');\n        this._resultTable = L.DomUtil.create('table', '', this._container);\n\n        // TODO: looks a bit like a kludge to register same for input and keypress -\n        // browsers supporting both will get duplicate events; just registering\n        // input will not catch enter, though.\n        L.DomEvent.addListener(this._elem, 'input', this._keyPressed, this);\n        L.DomEvent.addListener(this._elem, 'keypress', this._keyPressed, this);\n        L.DomEvent.addListener(this._elem, 'keydown', this._keyDown, this);\n        L.DomEvent.addListener(\n            this._elem,\n            'blur',\n            function () {\n                if (this._isOpen) {\n                    this.close();\n                }\n            },\n            this\n        );\n    },\n\n    close: function () {\n        L.DomUtil.removeClass(this._container, 'leaflet-routing-geocoder-result-open');\n        this._isOpen = false;\n    },\n\n    _open: function () {\n        var rect = this._elem.getBoundingClientRect();\n        if (!this._container.parentElement) {\n            // See notes section under https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollX\n            // This abomination is required to support all flavors of IE\n            var scrollX = window.pageXOffset !== undefined ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;\n            var scrollY = window.pageYOffset !== undefined ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n            this._container.style.left = rect.left + scrollX + 'px';\n            this._container.style.top = rect.bottom + scrollY + 'px';\n            this._container.style.width = rect.right - rect.left + 'px';\n            document.body.appendChild(this._container);\n        }\n\n        L.DomUtil.addClass(this._container, 'leaflet-routing-geocoder-result-open');\n        this._isOpen = true;\n    },\n\n    _setResults: function (results) {\n        var i, tr, td, text;\n\n        delete this._selection;\n        this._results = results;\n\n        while (this._resultTable.firstChild) {\n            this._resultTable.removeChild(this._resultTable.firstChild);\n        }\n\n        for (i = 0; i < results.length; i++) {\n            tr = L.DomUtil.create('tr', '', this._resultTable);\n            tr.setAttribute('data-result-index', i);\n            td = L.DomUtil.create('td', '', tr);\n\n            if (this.options.formatGeocoderResult) {\n                text = this.options.formatGeocoderResult(results[i]);\n            } else {\n                text = document.createTextNode(results[i].name);\n            }\n\n            td.appendChild(text);\n            // mousedown + click because:\n            // http://stackoverflow.com/questions/10652852/jquery-fire-click-before-blur-event\n            L.DomEvent.addListener(td, 'mousedown', L.DomEvent.preventDefault);\n            L.DomEvent.addListener(td, 'click', this._createClickListener(results[i]));\n        }\n\n        if (!i) {\n            tr = L.DomUtil.create('tr', '', this._resultTable);\n            td = L.DomUtil.create('td', 'leaflet-routing-geocoder-no-results', tr);\n            td.innerHTML = this.options.noResultsMessage;\n        }\n\n        this._open();\n\n        if (results.length > 0) {\n            // Select the first entry\n            this._select(1);\n        }\n    },\n\n    _createClickListener: function (r) {\n        var resultSelected = this._resultSelected(r);\n        return L.bind(function () {\n            this._elem.blur();\n            resultSelected();\n        }, this);\n    },\n\n    _resultSelected: function (r) {\n        return L.bind(function () {\n            this.close();\n            this._elem.value = r.name;\n            this._lastCompletedText = r.name;\n            this._selectFn(r);\n        }, this);\n    },\n\n    _keyPressed: function (e) {\n        var index;\n\n        if (this._isOpen && e.keyCode === 13 && this._selection) {\n            index = parseInt(this._selection.getAttribute('data-result-index'), 10);\n            this._resultSelected(this._results[index])();\n            L.DomEvent.preventDefault(e);\n            return;\n        }\n\n        if (e.keyCode === 13) {\n            L.DomEvent.preventDefault(e);\n            this._complete(this._resultFn, true);\n            return;\n        }\n\n        if (this._autocomplete && document.activeElement === this._elem) {\n            if (this._timer) {\n                clearTimeout(this._timer);\n            }\n            this._timer = setTimeout(\n                L.Util.bind(function () {\n                    this._complete(this._autocomplete);\n                }, this),\n                this.options.timeout\n            );\n            return;\n        }\n\n        this._unselect();\n    },\n\n    _select: function (dir) {\n        var sel = this._selection;\n        if (sel) {\n            L.DomUtil.removeClass(sel.firstChild, 'leaflet-routing-geocoder-selected');\n            sel = sel[dir > 0 ? 'nextSibling' : 'previousSibling'];\n        }\n        if (!sel) {\n            sel = this._resultTable[dir > 0 ? 'firstChild' : 'lastChild'];\n        }\n\n        if (sel) {\n            L.DomUtil.addClass(sel.firstChild, 'leaflet-routing-geocoder-selected');\n            this._selection = sel;\n        }\n    },\n\n    _unselect: function () {\n        if (this._selection) {\n            L.DomUtil.removeClass(this._selection.firstChild, 'leaflet-routing-geocoder-selected');\n        }\n        delete this._selection;\n    },\n\n    _keyDown: function (e) {\n        if (this._isOpen) {\n            switch (e.keyCode) {\n                // Escape\n                case 27:\n                    this.close();\n                    L.DomEvent.preventDefault(e);\n                    return;\n                // Up\n                case 38:\n                    this._select(-1);\n                    L.DomEvent.preventDefault(e);\n                    return;\n                // Down\n                case 40:\n                    this._select(1);\n                    L.DomEvent.preventDefault(e);\n                    return;\n            }\n        }\n    },\n\n    _complete: function (completeFn, trySelect) {\n        var v = this._elem.value;\n        function completeResults(results) {\n            this._lastCompletedText = v;\n            if (trySelect && results.length === 1) {\n                this._resultSelected(results[0])();\n            } else {\n                this._setResults(results);\n            }\n        }\n\n        if (!v) {\n            return;\n        }\n\n        if (v !== this._lastCompletedText) {\n            completeFn(v, completeResults, this);\n        } else if (trySelect) {\n            completeResults.call(this, this._results);\n        }\n    },\n});\n","import Autocomplete from './autocomplete';\nimport Localization from './localization';\n\nconst selectInputText = (input) => {\n    if (input.setSelectionRange) {\n        // On iOS, select() doesn't work\n        input.setSelectionRange(0, 9999);\n    } else {\n        // On at least IE8, setSeleectionRange doesn't exist\n        input.select();\n    }\n};\n\nexport default L.Class.extend({\n    includes: (typeof L.Evented !== 'undefined' && L.Evented.prototype) || L.Mixin.Events,\n\n    options: {\n        createGeocoder: function (i, nWps, options) {\n            var container = L.DomUtil.create('div', 'leaflet-routing-geocoder'),\n                input = L.DomUtil.create('input', '', container),\n                remove = options.addWaypoints ? L.DomUtil.create('span', 'leaflet-routing-remove-waypoint', container) : undefined;\n\n            input.disabled = !options.addWaypoints;\n\n            return {\n                container: container,\n                input: input,\n                closeButton: remove,\n            };\n        },\n        geocoderPlaceholder: function (i, numberWaypoints, geocoderElement) {\n            var l = new Localization(geocoderElement.options.language).localize('ui');\n            return i === 0 ? l.startPlaceholder : i < numberWaypoints - 1 ? L.Util.template(l.viaPlaceholder, { viaNumber: i }) : l.endPlaceholder;\n        },\n\n        geocoderClass: function () {\n            return '';\n        },\n\n        waypointNameFallback: function (latLng) {\n            var ns = latLng.lat < 0 ? 'S' : 'N',\n                ew = latLng.lng < 0 ? 'W' : 'E',\n                lat = (Math.round(Math.abs(latLng.lat) * 10000) / 10000).toString(),\n                lng = (Math.round(Math.abs(latLng.lng) * 10000) / 10000).toString();\n            return ns + lat + ', ' + ew + lng;\n        },\n        maxGeocoderTolerance: 200,\n        autocompleteOptions: {},\n        language: 'en',\n    },\n\n    initialize: function (wp, i, nWps, options) {\n        L.setOptions(this, options);\n\n        var g = this.options.createGeocoder(i, nWps, this.options),\n            closeButton = g.closeButton,\n            geocoderInput = g.input;\n        geocoderInput.setAttribute('placeholder', this.options.geocoderPlaceholder(i, nWps, this));\n        geocoderInput.className = this.options.geocoderClass(i, nWps);\n\n        this._element = g;\n        this._waypoint = wp;\n\n        this.update();\n        // This has to be here, or geocoder's value will not be properly\n        // initialized.\n        // TODO: look into why and make _updateWaypointName fix this.\n        geocoderInput.value = wp.name;\n\n        L.DomEvent.addListener(\n            geocoderInput,\n            'click',\n            function () {\n                selectInputText(this);\n            },\n            geocoderInput\n        );\n\n        if (closeButton) {\n            L.DomEvent.addListener(\n                closeButton,\n                'click',\n                function () {\n                    this.fire('delete', { waypoint: this._waypoint });\n                },\n                this\n            );\n        }\n\n        if (typeof this.options.formatGeocoderResult == 'function') {\n            this.options.autocompleteOptions.formatGeocoderResult = this.options.formatGeocoderResult;\n        }\n\n        new Autocomplete(\n            geocoderInput,\n            function (r) {\n                geocoderInput.value = r.name;\n                wp.name = r.name;\n                wp.latLng = r.center;\n                this.fire('geocoded', { waypoint: wp, value: r });\n            },\n            this,\n            L.extend(\n                {\n                    resultFn: this.options.geocoder.geocode,\n                    resultContext: this.options.geocoder,\n                    autocompleteFn: this.options.geocoder.suggest,\n                    autocompleteContext: this.options.geocoder,\n                },\n                this.options.autocompleteOptions\n            )\n        );\n    },\n\n    getContainer: function () {\n        return this._element.container;\n    },\n\n    setValue: function (v) {\n        this._element.input.value = v;\n    },\n\n    update: function (force) {\n        var wp = this._waypoint,\n            wpCoords;\n\n        wp.name = wp.name || '';\n\n        if (wp.latLng && (force || !wp.name)) {\n            wpCoords = this.options.waypointNameFallback(wp.latLng);\n            if (this.options.geocoder && this.options.geocoder.reverse) {\n                this.options.geocoder.reverse(\n                    wp.latLng,\n                    67108864 /* zoom 18 */,\n                    function (rs) {\n                        if (rs.length > 0 && rs[0].center.distanceTo(wp.latLng) < this.options.maxGeocoderTolerance) {\n                            wp.name = rs[0].name;\n                        } else {\n                            wp.name = wpCoords;\n                        }\n                        this._update();\n                    },\n                    this\n                );\n            } else {\n                wp.name = wpCoords;\n                this._update();\n            }\n        }\n    },\n\n    focus: function () {\n        var input = this._element.input;\n        input.focus();\n        selectInputText(input);\n    },\n\n    _update: function () {\n        var wp = this._waypoint,\n            value = wp && wp.name ? wp.name : '';\n        this.setValue(value);\n        this.fire('reversegeocoded', { waypoint: wp, value: value });\n    },\n});\n","export default L.Class.extend({\n    options: {\n        allowUTurn: false,\n    },\n    initialize: function (latLng, name, options) {\n        L.Util.setOptions(this, options);\n        this.latLng = L.latLng(latLng);\n        this.name = name;\n    },\n});\n","import GeocoderElement from './geocoder-element';\nimport Waypoint from './waypoint';\n\nconst BaseClass = L.Layer || L.Class;\n\nexport default BaseClass.extend({\n    includes: (typeof L.Evented !== 'undefined' && L.Evented.prototype) || L.Mixin.Events,\n\n    options: {\n        dragStyles: [\n            { color: 'black', opacity: 0.15, weight: 9 },\n            { color: 'white', opacity: 0.8, weight: 6 },\n            { color: 'red', opacity: 1, weight: 2, dashArray: '7,12' },\n        ],\n        draggableWaypoints: true,\n        routeWhileDragging: false,\n        addWaypoints: true,\n        reverseWaypoints: false,\n        addButtonClassName: '',\n        language: 'en',\n        markerOptions: {},\n        createGeocoderElement: function (wp, i, nWps, plan) {\n            return new GeocoderElement(wp, i, nWps, plan);\n        },\n        createMarker: function (i, wp, waypointIndex, markerOptions = {}) {\n            const options = {\n                draggable: this.draggableWaypoints,\n                ...markerOptions,\n            };\n            const marker = L.marker(wp.latLng, options);\n\n            return marker;\n        },\n        geocodersClassName: '',\n    },\n\n    initialize: function (waypoints, options) {\n        L.Util.setOptions(this, options);\n        this._waypoints = [];\n        this.setWaypoints(waypoints);\n    },\n\n    isReady: function () {\n        var i;\n        for (i = 0; i < this._waypoints.length; i++) {\n            if (!this._waypoints[i].latLng) {\n                return false;\n            }\n        }\n\n        return true;\n    },\n\n    getWaypoints: function () {\n        var i,\n            wps = [];\n\n        for (i = 0; i < this._waypoints.length; i++) {\n            wps.push(this._waypoints[i]);\n        }\n\n        return wps;\n    },\n\n    setWaypoints: function (waypoints) {\n        var args = [0, this._waypoints.length].concat(waypoints);\n        this.spliceWaypoints.apply(this, args);\n        return this;\n    },\n\n    spliceWaypoints: function () {\n        var args = [arguments[0], arguments[1]],\n            i;\n\n        for (i = 2; i < arguments.length; i++) {\n            args.push(arguments[i] && arguments[i].hasOwnProperty('latLng') ? arguments[i] : new Waypoint(arguments[i]));\n        }\n\n        [].splice.apply(this._waypoints, args);\n\n        // Make sure there's always at least two waypoints\n        while (this._waypoints.length < 2) {\n            this.spliceWaypoints(this._waypoints.length, 0, null);\n        }\n\n        this._updateMarkers();\n        this._fireChanged.apply(this, args);\n    },\n\n    onAdd: function (map) {\n        this._map = map;\n        this._updateMarkers();\n    },\n\n    onRemove: function () {\n        var i;\n        this._removeMarkers();\n\n        if (this._newWp) {\n            for (i = 0; i < this._newWp.lines.length; i++) {\n                this._map.removeLayer(this._newWp.lines[i]);\n            }\n        }\n\n        delete this._map;\n    },\n\n    createGeocoders: function () {\n        var container = L.DomUtil.create('div', 'leaflet-routing-geocoders ' + this.options.geocodersClassName),\n            waypoints = this._waypoints,\n            addWpBtn,\n            reverseBtn;\n\n        this._geocoderContainer = container;\n        this._geocoderElems = [];\n\n        if (this.options.addWaypoints) {\n            addWpBtn = L.DomUtil.create('button', 'leaflet-routing-add-waypoint ' + this.options.addButtonClassName, container);\n            addWpBtn.setAttribute('type', 'button');\n            L.DomEvent.addListener(\n                addWpBtn,\n                'click',\n                function () {\n                    this.spliceWaypoints(waypoints.length, 0, null);\n                },\n                this\n            );\n        }\n\n        if (this.options.reverseWaypoints) {\n            reverseBtn = L.DomUtil.create('button', 'leaflet-routing-reverse-waypoints', container);\n            reverseBtn.setAttribute('type', 'button');\n            L.DomEvent.addListener(\n                reverseBtn,\n                'click',\n                function () {\n                    this._waypoints.reverse();\n                    this.setWaypoints(this._waypoints);\n                },\n                this\n            );\n        }\n\n        this._updateGeocoders();\n        this.on('waypointsspliced', this._updateGeocoders);\n\n        return container;\n    },\n\n    _createGeocoder: function (i) {\n        var geocoder = this.options.createGeocoderElement(this._waypoints[i], i, this._waypoints.length, this.options);\n        geocoder\n            .on(\n                'delete',\n                function () {\n                    if (i > 0 || this._waypoints.length > 2) {\n                        this.spliceWaypoints(i, 1);\n                    } else {\n                        this.spliceWaypoints(i, 1, new Waypoint());\n                    }\n                },\n                this\n            )\n            .on(\n                'geocoded',\n                function (e) {\n                    this._updateMarkers();\n                    this._fireChanged();\n                    this._focusGeocoder(i + 1);\n                    this.fire('waypointgeocoded', {\n                        waypointIndex: i,\n                        waypoint: e.waypoint,\n                    });\n                },\n                this\n            )\n            .on(\n                'reversegeocoded',\n                function (e) {\n                    this.fire('waypointgeocoded', {\n                        waypointIndex: i,\n                        waypoint: e.waypoint,\n                    });\n                },\n                this\n            );\n\n        return geocoder;\n    },\n\n    _updateGeocoders: function () {\n        var elems = [],\n            i,\n            geocoderElem;\n\n        for (i = 0; i < this._geocoderElems.length; i++) {\n            this._geocoderContainer.removeChild(this._geocoderElems[i].getContainer());\n        }\n\n        for (i = this._waypoints.length - 1; i >= 0; i--) {\n            geocoderElem = this._createGeocoder(i);\n            this._geocoderContainer.insertBefore(geocoderElem.getContainer(), this._geocoderContainer.firstChild);\n            elems.push(geocoderElem);\n        }\n\n        this._geocoderElems = elems.reverse();\n    },\n\n    _removeMarkers: function () {\n        var i;\n        if (this._markers) {\n            for (i = 0; i < this._markers.length; i++) {\n                if (this._markers[i]) {\n                    this._map.removeLayer(this._markers[i]);\n                }\n            }\n        }\n        this._markers = [];\n    },\n\n    _updateMarkers: function () {\n        var i, m;\n\n        if (!this._map) {\n            return;\n        }\n\n        this._removeMarkers();\n\n        for (i = 0; i < this._waypoints.length; i++) {\n            if (this._waypoints[i].latLng) {\n                m = this.options.createMarker(i, this._waypoints[i], this._waypoints.length, this.options.markerOptions);\n                if (m) {\n                    m.addTo(this._map);\n                    if (this.options.draggableWaypoints) {\n                        this._hookWaypointEvents(m, i);\n                    }\n                }\n            } else {\n                m = null;\n            }\n            this._markers.push(m);\n        }\n    },\n\n    _fireChanged: function () {\n        this.fire('waypointschanged', { waypoints: this.getWaypoints() });\n\n        if (arguments.length >= 2) {\n            this.fire('waypointsspliced', {\n                index: Array.prototype.shift.call(arguments),\n                nRemoved: Array.prototype.shift.call(arguments),\n                added: arguments,\n            });\n        }\n    },\n\n    _hookWaypointEvents: function (m, i, trackMouseMove) {\n        var eventLatLng = function (e) {\n                return trackMouseMove ? e.latlng : e.target.getLatLng();\n            },\n            dragStart = L.bind(function (e) {\n                this.fire('waypointdragstart', { index: i, latlng: eventLatLng(e) });\n            }, this),\n            drag = L.bind(function (e) {\n                this._waypoints[i].latLng = eventLatLng(e);\n                this.fire('waypointdrag', { index: i, latlng: eventLatLng(e) });\n            }, this),\n            dragEnd = L.bind(function (e) {\n                this._waypoints[i].latLng = eventLatLng(e);\n                this._waypoints[i].name = '';\n                if (this._geocoderElems) {\n                    this._geocoderElems[i].update(true);\n                }\n                this.fire('waypointdragend', { index: i, latlng: eventLatLng(e) });\n                this._fireChanged();\n            }, this),\n            mouseMove,\n            mouseUp;\n\n        if (trackMouseMove) {\n            mouseMove = L.bind(function (e) {\n                this._markers[i].setLatLng(e.latlng);\n                drag(e);\n            }, this);\n            mouseUp = L.bind(function (e) {\n                this._map.dragging.enable();\n                this._map.off('mouseup', mouseUp);\n                this._map.off('mousemove', mouseMove);\n                dragEnd(e);\n            }, this);\n            this._map.dragging.disable();\n            this._map.on('mousemove', mouseMove);\n            this._map.on('mouseup', mouseUp);\n            dragStart({ latlng: this._waypoints[i].latLng });\n        } else {\n            m.on('dragstart', dragStart);\n            m.on('drag', drag);\n            m.on('dragend', dragEnd);\n        }\n    },\n\n    dragNewWaypoint: function (e) {\n        var newWpIndex = e.afterIndex + 1;\n        if (this.options.routeWhileDragging) {\n            this.spliceWaypoints(newWpIndex, 0, e.latlng);\n            this._hookWaypointEvents(this._markers[newWpIndex], newWpIndex, true);\n        } else {\n            this._dragNewWaypoint(newWpIndex, e.latlng);\n        }\n    },\n\n    _dragNewWaypoint: function (newWpIndex, initialLatLng) {\n        var wp = new Waypoint(initialLatLng),\n            prevWp = this._waypoints[newWpIndex - 1],\n            nextWp = this._waypoints[newWpIndex],\n            marker = this.options.createMarker(newWpIndex, wp, this._waypoints.length + 1, this.options.markerOptions),\n            lines = [],\n            draggingEnabled = this._map.dragging.enabled(),\n            mouseMove = L.bind(function (e) {\n                var i, latLngs;\n                if (marker) {\n                    marker.setLatLng(e.latlng);\n                }\n                for (i = 0; i < lines.length; i++) {\n                    latLngs = lines[i].getLatLngs();\n                    latLngs.splice(1, 1, e.latlng);\n                    lines[i].setLatLngs(latLngs);\n                }\n\n                L.DomEvent.stop(e);\n            }, this),\n            mouseUp = L.bind(function (e) {\n                var i;\n                if (marker) {\n                    this._map.removeLayer(marker);\n                }\n                for (i = 0; i < lines.length; i++) {\n                    this._map.removeLayer(lines[i]);\n                }\n                this._map.off('mousemove', mouseMove);\n                this._map.off('mouseup', mouseUp);\n                this.spliceWaypoints(newWpIndex, 0, e.latlng);\n                if (draggingEnabled) {\n                    this._map.dragging.enable();\n                }\n\n                L.DomEvent.stop(e);\n            }, this),\n            i;\n\n        if (marker) {\n            marker.addTo(this._map);\n        }\n\n        for (i = 0; i < this.options.dragStyles.length; i++) {\n            lines.push(L.polyline([prevWp.latLng, initialLatLng, nextWp.latLng], this.options.dragStyles[i]).addTo(this._map));\n        }\n\n        if (draggingEnabled) {\n            this._map.dragging.disable();\n        }\n\n        this._map.on('mousemove', mouseMove);\n        this._map.on('mouseup', mouseUp);\n    },\n\n    _focusGeocoder: function (i) {\n        if (this._geocoderElems[i]) {\n            this._geocoderElems[i].focus();\n        } else {\n            document.activeElement.blur();\n        }\n    },\n});\n","import corslite from '@mapbox/corslite';\nimport polyline from '@mapbox/polyline';\nimport getOsrmTextInstructions from 'osrm-text-instructions';\nimport Waypoint from './waypoint';\n\nconst osrmTextInstructions = getOsrmTextInstructions('v5');\n\n/**\n * Works against OSRM's new API in version 5.0; this has\n * the API version v1.\n */\nexport default L.Class.extend({\n    options: {\n        serviceUrl: 'https://router.project-osrm.org/route/v1',\n        profile: 'driving',\n        timeout: 30 * 1000,\n        routingOptions: {\n            alternatives: true,\n            steps: true,\n        },\n        polylinePrecision: 5,\n        useHints: true,\n        suppressDemoServerWarning: false,\n        language: 'en',\n    },\n\n    initialize: function (options) {\n        L.Util.setOptions(this, options);\n        this._hints = {\n            locations: {},\n        };\n\n        if (!this.options.suppressDemoServerWarning && this.options.serviceUrl.indexOf('//router.project-osrm.org') >= 0) {\n            console.warn(\n                \"You are using OSRM's demo server. \" +\n                    'Please note that it is **NOT SUITABLE FOR PRODUCTION USE**.\\n' +\n                    \"Refer to the demo server's usage policy: \" +\n                    'https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy\\n\\n' +\n                    'To change, set the serviceUrl option.\\n\\n' +\n                    'Please do not report issues with this server to neither ' +\n                    \"Leaflet Routing Machine or OSRM - it's for\\n\" +\n                    'demo only, and will sometimes not be available, or work in ' +\n                    'unexpected ways.\\n\\n' +\n                    'Please set up your own OSRM server, or use a paid service ' +\n                    'provider for production.'\n            );\n        }\n    },\n\n    route: function (waypoints, callback, context, options) {\n        var timedOut = false,\n            wps = [],\n            url,\n            timer,\n            wp,\n            i,\n            xhr;\n\n        options = L.extend({}, this.options.routingOptions, options);\n        url = this.buildRouteUrl(waypoints, options);\n        if (this.options.requestParameters) {\n            url += L.Util.getParamString(this.options.requestParameters, url);\n        }\n\n        timer = setTimeout(function () {\n            timedOut = true;\n            callback.call(context || callback, {\n                status: -1,\n                message: 'OSRM request timed out.',\n            });\n        }, this.options.timeout);\n\n        // Create a copy of the waypoints, since they\n        // might otherwise be asynchronously modified while\n        // the request is being processed.\n        for (i = 0; i < waypoints.length; i++) {\n            wp = waypoints[i];\n            wps.push(new Waypoint(wp.latLng, wp.name, wp.options));\n        }\n\n        return (xhr = corslite(\n            url,\n            L.bind(function (err, resp) {\n                var data,\n                    error = {};\n\n                clearTimeout(timer);\n                if (!timedOut) {\n                    if (!err) {\n                        try {\n                            data = JSON.parse(resp.responseText);\n                            try {\n                                return this._routeDone(data, wps, options, callback, context);\n                            } catch (ex) {\n                                error.status = -3;\n                                error.message = ex.toString();\n                            }\n                        } catch (ex) {\n                            error.status = -2;\n                            error.message = 'Error parsing OSRM response: ' + ex.toString();\n                        }\n                    } else {\n                        var message = err.type + (err.target && err.target.status ? ' HTTP ' + err.target.status + ': ' + err.target.statusText : '');\n                        if (err.responseText) {\n                            try {\n                                data = JSON.parse(err.responseText);\n                                if (data.message) message = data.message;\n                            } catch (ex) {}\n                        }\n                        error.message = 'HTTP request failed: ' + message;\n                        error.url = url;\n                        error.status = -1;\n                        error.target = err;\n                    }\n\n                    callback.call(context || callback, error);\n                } else {\n                    xhr.abort();\n                }\n            }, this)\n        ));\n    },\n\n    requiresMoreDetail: function (route, zoom, bounds) {\n        if (!route.properties.isSimplified) {\n            return false;\n        }\n\n        var waypoints = route.inputWaypoints,\n            i;\n        for (i = 0; i < waypoints.length; ++i) {\n            if (!bounds.contains(waypoints[i].latLng)) {\n                return true;\n            }\n        }\n\n        return false;\n    },\n\n    _routeDone: function (response, inputWaypoints, options, callback, context) {\n        var alts = [],\n            actualWaypoints,\n            i,\n            route;\n\n        context = context || callback;\n        if (response.code !== 'Ok') {\n            callback.call(context, {\n                status: response.code,\n            });\n            return;\n        }\n\n        actualWaypoints = this._toWaypoints(inputWaypoints, response.waypoints);\n\n        for (i = 0; i < response.routes.length; i++) {\n            route = this._convertRoute(response.routes[i]);\n            route.inputWaypoints = inputWaypoints;\n            route.waypoints = actualWaypoints;\n            route.properties = { isSimplified: !options || !options.geometryOnly || options.simplifyGeometry };\n            alts.push(route);\n        }\n\n        this._saveHintData(response.waypoints, inputWaypoints);\n\n        callback.call(context, null, alts);\n    },\n\n    _convertRoute: function (responseRoute) {\n        var result = {\n                name: '',\n                coordinates: [],\n                instructions: [],\n                summary: {\n                    totalDistance: responseRoute.distance,\n                    totalTime: responseRoute.duration,\n                },\n            },\n            legNames = [],\n            waypointIndices = [],\n            index = 0,\n            legCount = responseRoute.legs.length,\n            hasSteps = responseRoute.legs[0].steps.length > 0,\n            i,\n            j,\n            leg,\n            step,\n            geometry,\n            type,\n            modifier,\n            text,\n            stepToText;\n\n        if (this.options.stepToText) {\n            stepToText = this.options.stepToText;\n        } else {\n            stepToText = L.bind(osrmTextInstructions.compile, osrmTextInstructions, this.options.language);\n        }\n\n        for (i = 0; i < legCount; i++) {\n            leg = responseRoute.legs[i];\n            legNames.push(leg.summary && leg.summary.charAt(0).toUpperCase() + leg.summary.substring(1));\n            for (j = 0; j < leg.steps.length; j++) {\n                step = leg.steps[j];\n                geometry = this._decodePolyline(step.geometry);\n                result.coordinates.push.apply(result.coordinates, geometry);\n                type = this._maneuverToInstructionType(step.maneuver, i === legCount - 1);\n                modifier = this._maneuverToModifier(step.maneuver);\n                text = stepToText(step, { legCount: legCount, legIndex: i });\n\n                if (type) {\n                    if ((i == 0 && step.maneuver.type == 'depart') || step.maneuver.type == 'arrive') {\n                        waypointIndices.push(index);\n                    }\n\n                    result.instructions.push({\n                        type: type,\n                        distance: step.distance,\n                        time: step.duration,\n                        road: step.name,\n                        direction: this._bearingToDirection(step.maneuver.bearing_after),\n                        exit: step.maneuver.exit,\n                        index: index,\n                        mode: step.mode,\n                        modifier: modifier,\n                        text: text,\n                    });\n                }\n\n                index += geometry.length;\n            }\n        }\n\n        result.name = legNames.join(', ');\n        if (!hasSteps) {\n            result.coordinates = this._decodePolyline(responseRoute.geometry);\n        } else {\n            result.waypointIndices = waypointIndices;\n        }\n\n        return result;\n    },\n\n    _bearingToDirection: function (bearing) {\n        var oct = Math.round(bearing / 45) % 8;\n        return ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'][oct];\n    },\n\n    _maneuverToInstructionType: function (maneuver, lastLeg) {\n        switch (maneuver.type) {\n            case 'new name':\n                return 'Continue';\n            case 'depart':\n                return 'Head';\n            case 'arrive':\n                return lastLeg ? 'DestinationReached' : 'WaypointReached';\n            case 'roundabout':\n            case 'rotary':\n                return 'Roundabout';\n            case 'merge':\n            case 'fork':\n            case 'on ramp':\n            case 'off ramp':\n            case 'end of road':\n                return this._camelCase(maneuver.type);\n            // These are all reduced to the same instruction in the current model\n            //case 'turn':\n            //case 'ramp': // deprecated in v5.1\n            default:\n                return this._camelCase(maneuver.modifier);\n        }\n    },\n\n    _maneuverToModifier: function (maneuver) {\n        var modifier = maneuver.modifier;\n\n        switch (maneuver.type) {\n            case 'merge':\n            case 'fork':\n            case 'on ramp':\n            case 'off ramp':\n            case 'end of road':\n                modifier = this._leftOrRight(modifier);\n        }\n\n        return modifier && this._camelCase(modifier);\n    },\n\n    _camelCase: function (s) {\n        var words = s.split(' '),\n            result = '';\n        for (var i = 0, l = words.length; i < l; i++) {\n            result += words[i].charAt(0).toUpperCase() + words[i].substring(1);\n        }\n\n        return result;\n    },\n\n    _leftOrRight: function (d) {\n        return d.indexOf('left') >= 0 ? 'Left' : 'Right';\n    },\n\n    _decodePolyline: function (routeGeometry) {\n        var cs = polyline.decode(routeGeometry, this.options.polylinePrecision),\n            result = new Array(cs.length),\n            i;\n        for (i = cs.length - 1; i >= 0; i--) {\n            result[i] = L.latLng(cs[i]);\n        }\n\n        return result;\n    },\n\n    _toWaypoints: function (inputWaypoints, vias) {\n        var wps = [],\n            i,\n            viaLoc;\n        for (i = 0; i < vias.length; i++) {\n            viaLoc = vias[i].location;\n            wps.push(new Waypoint(L.latLng(viaLoc[1], viaLoc[0]), inputWaypoints[i].name, inputWaypoints[i].options));\n        }\n\n        return wps;\n    },\n\n    buildRouteUrl: function (waypoints, options) {\n        var locs = [],\n            hints = [],\n            wp,\n            latLng,\n            computeInstructions,\n            computeAlternative = true;\n\n        for (var i = 0; i < waypoints.length; i++) {\n            wp = waypoints[i];\n            latLng = wp.latLng;\n            locs.push(latLng.lng + ',' + latLng.lat);\n            hints.push(this._hints.locations[this._locationKey(latLng)] || '');\n        }\n\n        computeInstructions = true;\n\n        return (\n            this.options.serviceUrl +\n            '/' +\n            this.options.profile +\n            '/' +\n            locs.join(';') +\n            '?' +\n            (options.geometryOnly ? (options.simplifyGeometry ? '' : 'overview=full') : 'overview=false') +\n            '&alternatives=' +\n            computeAlternative.toString() +\n            '&steps=' +\n            computeInstructions.toString() +\n            (this.options.useHints ? '&hints=' + hints.join(';') : '') +\n            (options.allowUTurns ? '&continue_straight=' + !options.allowUTurns : '')\n        );\n    },\n\n    _locationKey: function (location) {\n        return location.lat + ',' + location.lng;\n    },\n\n    _saveHintData: function (actualWaypoints, waypoints) {\n        var loc;\n        this._hints = {\n            locations: {},\n        };\n        for (var i = actualWaypoints.length - 1; i >= 0; i--) {\n            loc = waypoints[i].latLng;\n            this._hints.locations[this._locationKey(loc)] = actualWaypoints[i].hint;\n        }\n    },\n});\n","import Itinerary from './itinerary';\nimport Line from './line';\nimport Plan from './plan';\nimport OSRMv1 from './osrm-v1';\n\nexport default Itinerary.extend({\n    options: {\n        fitSelectedRoutes: 'smart',\n        routeLine: function (route, options) {\n            return new Line(route, options);\n        },\n        autoRoute: true,\n        routeWhileDragging: false,\n        routeDragInterval: 500,\n        waypointMode: 'connect',\n        showAlternatives: false,\n        markerOptions: {},\n        defaultErrorHandler: function (e) {\n            console.error('Routing error:', e.error);\n        },\n    },\n\n    initialize: function (options) {\n        L.Util.setOptions(this, options);\n\n        this._router = this.options.router || new OSRMv1(options);\n        this._plan = this.options.plan || new Plan(this.options.waypoints, options);\n        this._requestCount = 0;\n\n        Itinerary.prototype.initialize.call(this, options);\n\n        this.on('routeselected', this._routeSelected, this);\n        if (this.options.defaultErrorHandler) {\n            this.on('routingerror', this.options.defaultErrorHandler);\n        }\n        this._plan.on('waypointschanged', this._onWaypointsChanged, this);\n        if (options.routeWhileDragging) {\n            this._setupRouteDragging();\n        }\n    },\n\n    _onZoomEnd: function () {\n        if (!this._selectedRoute || !this._router.requiresMoreDetail) {\n            return;\n        }\n\n        var map = this._map;\n        if (this._router.requiresMoreDetail(this._selectedRoute, map.getZoom(), map.getBounds())) {\n            this.route({\n                callback: L.bind(function (err, routes) {\n                    var i;\n                    if (!err) {\n                        for (i = 0; i < routes.length; i++) {\n                            this._routes[i].properties = routes[i].properties;\n                        }\n                        this._updateLineCallback(err, routes);\n                    }\n                }, this),\n                simplifyGeometry: false,\n                geometryOnly: true,\n            });\n        }\n    },\n\n    onAdd: function (map) {\n        if (this.options.autoRoute) {\n            this.route();\n        }\n\n        var container = Itinerary.prototype.onAdd.call(this, map);\n\n        this._map = map;\n        this._map.addLayer(this._plan);\n\n        this._map.on('zoomend', this._onZoomEnd, this);\n\n        if (this._plan.options.geocoder) {\n            container.insertBefore(this._plan.createGeocoders(), container.firstChild);\n        }\n\n        return container;\n    },\n\n    onRemove: function (map) {\n        map.off('zoomend', this._onZoomEnd, this);\n        if (this._line) {\n            map.removeLayer(this._line);\n        }\n        map.removeLayer(this._plan);\n        if (this._alternatives && this._alternatives.length > 0) {\n            for (var i = 0, len = this._alternatives.length; i < len; i++) {\n                map.removeLayer(this._alternatives[i]);\n            }\n        }\n        return Itinerary.prototype.onRemove.call(this, map);\n    },\n\n    getWaypoints: function () {\n        return this._plan.getWaypoints();\n    },\n\n    setWaypoints: function (waypoints) {\n        this._plan.setWaypoints(waypoints);\n        return this;\n    },\n\n    spliceWaypoints: function () {\n        var removed = this._plan.spliceWaypoints.apply(this._plan, arguments);\n        return removed;\n    },\n\n    getPlan: function () {\n        return this._plan;\n    },\n\n    getRouter: function () {\n        return this._router;\n    },\n\n    _routeSelected: function (e) {\n        var route = (this._selectedRoute = e.route),\n            alternatives = this.options.showAlternatives && e.alternatives,\n            fitMode = this.options.fitSelectedRoutes,\n            fitBounds = (fitMode === 'smart' && !this._waypointsVisible()) || (fitMode !== 'smart' && fitMode);\n\n        this._updateLines({ route: route, alternatives: alternatives });\n\n        if (fitBounds) {\n            this._map.fitBounds(this._line.getBounds());\n        }\n\n        if (this.options.waypointMode === 'snap') {\n            this._plan.off('waypointschanged', this._onWaypointsChanged, this);\n            this.setWaypoints(route.waypoints);\n            this._plan.on('waypointschanged', this._onWaypointsChanged, this);\n        }\n    },\n\n    _waypointsVisible: function () {\n        var wps = this.getWaypoints(),\n            mapSize,\n            bounds,\n            boundsSize,\n            i,\n            p;\n\n        try {\n            mapSize = this._map.getSize();\n\n            for (i = 0; i < wps.length; i++) {\n                p = this._map.latLngToLayerPoint(wps[i].latLng);\n\n                if (bounds) {\n                    bounds.extend(p);\n                } else {\n                    bounds = L.bounds([p]);\n                }\n            }\n\n            boundsSize = bounds.getSize();\n            return (boundsSize.x > mapSize.x / 5 || boundsSize.y > mapSize.y / 5) && this._waypointsInViewport();\n        } catch (e) {\n            return false;\n        }\n    },\n\n    _waypointsInViewport: function () {\n        var wps = this.getWaypoints(),\n            mapBounds,\n            i;\n\n        try {\n            mapBounds = this._map.getBounds();\n        } catch (e) {\n            return false;\n        }\n\n        for (i = 0; i < wps.length; i++) {\n            if (mapBounds.contains(wps[i].latLng)) {\n                return true;\n            }\n        }\n\n        return false;\n    },\n\n    _updateLines: function (routes) {\n        var addWaypoints = this.options.addWaypoints !== undefined ? this.options.addWaypoints : true;\n        this._clearLines();\n\n        // add alternatives first so they lie below the main route\n        this._alternatives = [];\n        if (routes.alternatives)\n            routes.alternatives.forEach(function (alt, i) {\n                this._alternatives[i] = this.options.routeLine(\n                    alt,\n                    L.extend(\n                        {\n                            isAlternative: true,\n                        },\n                        this.options.altLineOptions || this.options.lineOptions\n                    )\n                );\n                this._alternatives[i].addTo(this._map);\n                this._hookAltEvents(this._alternatives[i]);\n            }, this);\n\n        this._line = this.options.routeLine(\n            routes.route,\n            L.extend(\n                {\n                    addWaypoints: addWaypoints,\n                    extendToWaypoints: this.options.waypointMode === 'connect',\n                },\n                this.options.lineOptions\n            )\n        );\n        this._line.addTo(this._map);\n        this._hookEvents(this._line);\n    },\n\n    _hookEvents: function (l) {\n        l.on(\n            'linetouched',\n            function (e) {\n                if (e.afterIndex < this.getWaypoints().length - 1) {\n                    this._plan.dragNewWaypoint(e);\n                }\n            },\n            this\n        );\n    },\n\n    _hookAltEvents: function (l) {\n        l.on(\n            'linetouched',\n            function (e) {\n                var alts = this._routes.slice();\n                var selected = alts.splice(e.target._route.routesIndex, 1)[0];\n                this.fire('routeselected', { route: selected, alternatives: alts });\n            },\n            this\n        );\n    },\n\n    _onWaypointsChanged: function (e) {\n        if (this.options.autoRoute) {\n            this.route({});\n        }\n        if (!this._plan.isReady()) {\n            this._clearLines();\n            this._clearAlts();\n        }\n        this.fire('waypointschanged', { waypoints: e.waypoints });\n    },\n\n    _setupRouteDragging: function () {\n        var timer = 0,\n            waypoints;\n\n        this._plan.on(\n            'waypointdrag',\n            L.bind(function (e) {\n                waypoints = e.waypoints;\n\n                if (!timer) {\n                    timer = setTimeout(\n                        L.bind(function () {\n                            this.route({\n                                waypoints: waypoints,\n                                geometryOnly: true,\n                                callback: L.bind(this._updateLineCallback, this),\n                            });\n                            timer = undefined;\n                        }, this),\n                        this.options.routeDragInterval\n                    );\n                }\n            }, this)\n        );\n        this._plan.on(\n            'waypointdragend',\n            function () {\n                if (timer) {\n                    clearTimeout(timer);\n                    timer = undefined;\n                }\n                this.route();\n            },\n            this\n        );\n    },\n\n    _updateLineCallback: function (err, routes) {\n        if (!err) {\n            routes = routes.slice();\n            var selected = routes.splice(this._selectedRoute.routesIndex, 1)[0];\n            this._updateLines({\n                route: selected,\n                alternatives: this.options.showAlternatives ? routes : [],\n            });\n        } else if (err.type !== 'abort') {\n            this._clearLines();\n        }\n    },\n\n    route: function (options) {\n        var ts = ++this._requestCount,\n            wps;\n\n        if (this._pendingRequest && this._pendingRequest.abort) {\n            this._pendingRequest.abort();\n            this._pendingRequest = null;\n        }\n\n        options = options || {};\n\n        if (this._plan.isReady()) {\n            if (this.options.useZoomParameter) {\n                options.z = this._map && this._map.getZoom();\n            }\n\n            wps = (options && options.waypoints) || this._plan.getWaypoints();\n            this.fire('routingstart', { waypoints: wps });\n            this._pendingRequest = this._router.route(\n                wps,\n                function (err, routes) {\n                    this._pendingRequest = null;\n\n                    if (options.callback) {\n                        return options.callback.call(this, err, routes);\n                    }\n\n                    // Prevent race among multiple requests,\n                    // by checking the current request's count\n                    // against the last request's; ignore result if\n                    // this isn't the last request.\n                    if (ts === this._requestCount) {\n                        this._clearLines();\n                        this._clearAlts();\n                        if (err && err.type !== 'abort') {\n                            this.fire('routingerror', { error: err });\n                            return;\n                        }\n\n                        routes.forEach(function (route, i) {\n                            route.routesIndex = i;\n                        });\n\n                        if (!options.geometryOnly) {\n                            this.fire('routesfound', { waypoints: wps, routes: routes });\n                            this.setAlternatives(routes);\n                        } else {\n                            var selectedRoute = routes.splice(0, 1)[0];\n                            this._routeSelected({ route: selectedRoute, alternatives: routes });\n                        }\n                    }\n                },\n                this,\n                options\n            );\n        }\n    },\n\n    _clearLines: function () {\n        if (this._line && this._map) {\n            this._map.removeLayer(this._line);\n            delete this._line;\n        }\n        if (this._alternatives && this._alternatives.length) {\n            for (var i in this._alternatives) {\n                this._map.removeLayer(this._alternatives[i]);\n            }\n            this._alternatives = [];\n        }\n    },\n});\n","import OSRMv1 from './osrm-v1';\n\n/**\n * Works against OSRM's new API in version 5.0; this has\n * the API version v1.\n */\nexport default OSRMv1.extend({\n    options: {\n        serviceUrl: 'https://api.mapbox.com/directions/v5',\n        profile: 'mapbox/driving',\n        useHints: false,\n    },\n\n    initialize: function (accessToken, options) {\n        L.Routing.OSRMv1.prototype.initialize.call(this, options);\n        this.options.requestParameters = this.options.requestParameters || {};\n        /* jshint camelcase: false */\n        this.options.requestParameters.access_token = accessToken;\n        /* jshint camelcase: true */\n    },\n});\n","export default L.Control.extend({\n    options: {\n        header: 'Routing error',\n        formatMessage: function (error) {\n            if (error.status < 0) {\n                return 'Calculating the route caused an error. Technical description follows: <code><pre>' + error.message + '</pre></code';\n            } else {\n                return 'The route could not be calculated. ' + error.message;\n            }\n        },\n    },\n\n    initialize: function (routingControl, options) {\n        L.Control.prototype.initialize.call(this, options);\n        routingControl\n            .on(\n                'routingerror',\n                L.bind(function (e) {\n                    if (this._element) {\n                        this._element.children[1].innerHTML = this.options.formatMessage(e.error);\n                        this._element.style.visibility = 'visible';\n                    }\n                }, this)\n            )\n            .on(\n                'routingstart',\n                L.bind(function () {\n                    if (this._element) {\n                        this._element.style.visibility = 'hidden';\n                    }\n                }, this)\n            );\n    },\n\n    onAdd: function () {\n        var header, message;\n\n        this._element = L.DomUtil.create('div', 'leaflet-bar leaflet-routing-error');\n        this._element.style.visibility = 'hidden';\n\n        header = L.DomUtil.create('h3', null, this._element);\n        message = L.DomUtil.create('span', null, this._element);\n\n        header.innerHTML = this.options.header;\n\n        return this._element;\n    },\n\n    onRemove: function () {\n        delete this._element;\n    },\n});\n","// NOTE: separate `:not()` selectors has broader browser support than the newer\n//  `:not([inert], [inert] *)` (Feb 2023)\nconst candidateSelectors = [\n  'input:not([inert]):not([inert] *)',\n  'select:not([inert]):not([inert] *)',\n  'textarea:not([inert]):not([inert] *)',\n  'a[href]:not([inert]):not([inert] *)',\n  'area[href]:not([inert]):not([inert] *)',\n  'button:not([inert]):not([inert] *)',\n  '[tabindex]:not(slot):not([inert]):not([inert] *)',\n  'audio[controls]:not([inert]):not([inert] *)',\n  'video[controls]:not([inert]):not([inert] *)',\n  '[contenteditable]:not([contenteditable=\"false\"]):not([inert]):not([inert] *)',\n  'details>summary:first-of-type:not([inert]):not([inert] *)',\n  'details:not([inert]):not([inert] *)',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n  ? function () {}\n  : Element.prototype.matches ||\n    Element.prototype.msMatchesSelector ||\n    Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n  !NoElement && Element.prototype.getRootNode\n    ? (element) => element?.getRootNode?.()\n    : (element) => element?.ownerDocument;\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Node} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n *  see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n *  False if `node` is falsy.\n */\nconst isInert = function (node, lookUp = true) {\n  // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n  //  JS API property; we have to check the attribute, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's an active element\n  const inertAtt = node?.getAttribute?.('inert');\n  const inert = inertAtt === '' || inertAtt === 'true';\n\n  // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n  //  if it weren't for `matches()` not being a function on shadow roots; the following\n  //  code works for any kind of node\n  const result =\n    inert ||\n    (lookUp &&\n      node &&\n      // closest does not exist on shadow roots, so we fall back to a manual\n      // lookup upward, in case it is not defined.\n      (typeof node.closest === 'function'\n        ? node.closest('[inert]')\n        : isInert(node.parentNode)));\n\n  return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nconst isContentEditable = function (node) {\n  // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n  //  to use the attribute directly to check for this, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's a non-editable element\n  const attValue = node?.getAttribute?.('contenteditable');\n  return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n  // even if `includeContainer=false`, we still have to check it for inertness because\n  //  if it's inert (either by itself or via its parent), then all its children are inert\n  if (isInert(el)) {\n    return [];\n  }\n\n  let candidates = Array.prototype.slice.apply(\n    el.querySelectorAll(candidateSelector)\n  );\n  if (includeContainer && matches.call(el, candidateSelector)) {\n    candidates.unshift(el);\n  }\n  candidates = candidates.filter(filter);\n  return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n *  if a function, implies shadow support is enabled and either returns the shadow root of an element\n *  or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nconst getCandidatesIteratively = function (\n  elements,\n  includeContainer,\n  options\n) {\n  const candidates = [];\n  const elementsToCheck = Array.from(elements);\n  while (elementsToCheck.length) {\n    const element = elementsToCheck.shift();\n    if (isInert(element, false)) {\n      // no need to look up since we're drilling down\n      // anything inside this container will also be inert\n      continue;\n    }\n\n    if (element.tagName === 'SLOT') {\n      // add shadow dom slot scope (slot itself cannot be focusable)\n      const assigned = element.assignedElements();\n      const content = assigned.length ? assigned : element.children;\n      const nestedCandidates = getCandidatesIteratively(content, true, options);\n      if (options.flatten) {\n        candidates.push(...nestedCandidates);\n      } else {\n        candidates.push({\n          scopeParent: element,\n          candidates: nestedCandidates,\n        });\n      }\n    } else {\n      // check candidate element\n      const validCandidate = matches.call(element, candidateSelector);\n      if (\n        validCandidate &&\n        options.filter(element) &&\n        (includeContainer || !elements.includes(element))\n      ) {\n        candidates.push(element);\n      }\n\n      // iterate over shadow content if possible\n      const shadowRoot =\n        element.shadowRoot ||\n        // check for an undisclosed shadow\n        (typeof options.getShadowRoot === 'function' &&\n          options.getShadowRoot(element));\n\n      // no inert look up because we're already drilling down and checking for inertness\n      //  on the way down, so all containers to this root node should have already been\n      //  vetted as non-inert\n      const validShadowRoot =\n        !isInert(shadowRoot, false) &&\n        (!options.shadowRootFilter || options.shadowRootFilter(element));\n\n      if (shadowRoot && validShadowRoot) {\n        // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n        //  shadow exists, so look at light dom children as fallback BUT create a scope for any\n        //  child candidates found because they're likely slotted elements (elements that are\n        //  children of the web component element (which has the shadow), in the light dom, but\n        //  slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n        //  _after_ we return from this recursive call\n        const nestedCandidates = getCandidatesIteratively(\n          shadowRoot === true ? element.children : shadowRoot.children,\n          true,\n          options\n        );\n\n        if (options.flatten) {\n          candidates.push(...nestedCandidates);\n        } else {\n          candidates.push({\n            scopeParent: element,\n            candidates: nestedCandidates,\n          });\n        }\n      } else {\n        // there's not shadow so just dig into the element's (light dom) children\n        //  __without__ giving the element special scope treatment\n        elementsToCheck.unshift(...element.children);\n      }\n    }\n  }\n  return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nconst hasTabIndex = function (node) {\n  return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nconst getTabIndex = function (node) {\n  if (!node) {\n    throw new Error('No node provided');\n  }\n\n  if (node.tabIndex < 0) {\n    // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n    // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n    // yet they are still part of the regular tab order; in FF, they get a default\n    // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n    // order, consider their tab index to be 0.\n    // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n    // so if they don't have a tabindex attribute specifically set, assume it's 0.\n    if (\n      (/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) ||\n        isContentEditable(node)) &&\n      !hasTabIndex(node)\n    ) {\n      return 0;\n    }\n  }\n\n  return node.tabIndex;\n};\n\n/**\n * Determine the tab index of a given node __for sort order purposes__.\n * @param {HTMLElement} node\n * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,\n *  has tabIndex -1, but needs to be sorted by document order in order for its content to be\n *  inserted into the correct sort position.\n * @returns {number} Tab order (negative, 0, or positive number).\n */\nconst getSortOrderTabIndex = function (node, isScope) {\n  const tabIndex = getTabIndex(node);\n\n  if (tabIndex < 0 && isScope && !hasTabIndex(node)) {\n    return 0;\n  }\n\n  return tabIndex;\n};\n\nconst sortOrderedTabbables = function (a, b) {\n  return a.tabIndex === b.tabIndex\n    ? a.documentOrder - b.documentOrder\n    : a.tabIndex - b.tabIndex;\n};\n\nconst isInput = function (node) {\n  return node.tagName === 'INPUT';\n};\n\nconst isHiddenInput = function (node) {\n  return isInput(node) && node.type === 'hidden';\n};\n\nconst isDetailsWithSummary = function (node) {\n  const r =\n    node.tagName === 'DETAILS' &&\n    Array.prototype.slice\n      .apply(node.children)\n      .some((child) => child.tagName === 'SUMMARY');\n  return r;\n};\n\nconst getCheckedRadio = function (nodes, form) {\n  for (let i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked && nodes[i].form === form) {\n      return nodes[i];\n    }\n  }\n};\n\nconst isTabbableRadio = function (node) {\n  if (!node.name) {\n    return true;\n  }\n  const radioScope = node.form || getRootNode(node);\n  const queryRadios = function (name) {\n    return radioScope.querySelectorAll(\n      'input[type=\"radio\"][name=\"' + name + '\"]'\n    );\n  };\n\n  let radioSet;\n  if (\n    typeof window !== 'undefined' &&\n    typeof window.CSS !== 'undefined' &&\n    typeof window.CSS.escape === 'function'\n  ) {\n    radioSet = queryRadios(window.CSS.escape(node.name));\n  } else {\n    try {\n      radioSet = queryRadios(node.name);\n    } catch (err) {\n      // eslint-disable-next-line no-console\n      console.error(\n        'Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s',\n        err.message\n      );\n      return false;\n    }\n  }\n\n  const checked = getCheckedRadio(radioSet, node.form);\n  return !checked || checked === node;\n};\n\nconst isRadio = function (node) {\n  return isInput(node) && node.type === 'radio';\n};\n\nconst isNonTabbableRadio = function (node) {\n  return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nconst isNodeAttached = function (node) {\n  // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n  //  (but NOT _the_ document; see second 'If' comment below for more).\n  // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n  //  is attached, and the one we need to check if it's in the document or not (because the\n  //  shadow, and all nodes it contains, is never considered in the document since shadows\n  //  behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n  //  is hidden, or is not in the document itself but is detached, it will affect the shadow's\n  //  visibility, including all the nodes it contains). The host could be any normal node,\n  //  or a custom element (i.e. web component). Either way, that's the one that is considered\n  //  part of the document, not the shadow root, nor any of its children (i.e. the node being\n  //  tested).\n  // To further complicate things, we have to look all the way up until we find a shadow HOST\n  //  that is attached (or find none) because the node might be in nested shadows...\n  // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n  //  document (per the docs) and while it's a Document-type object, that document does not\n  //  appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n  //  to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n  //  using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n  //  node is actually detached.\n  // NOTE: If `nodeRootHost` or `node` happens to be the `document` itself (which is possible\n  //  if a tabbable/focusable node was quickly added to the DOM, focused, and then removed\n  //  from the DOM as in https://github.com/focus-trap/focus-trap-react/issues/905), then\n  //  `ownerDocument` will be `null`, hence the optional chaining on it.\n  let nodeRoot = node && getRootNode(node);\n  let nodeRootHost = nodeRoot?.host;\n\n  // in some cases, a detached node will return itself as the root instead of a document or\n  //  shadow root object, in which case, we shouldn't try to look further up the host chain\n  let attached = false;\n  if (nodeRoot && nodeRoot !== node) {\n    attached = !!(\n      nodeRootHost?.ownerDocument?.contains(nodeRootHost) ||\n      node?.ownerDocument?.contains(node)\n    );\n\n    while (!attached && nodeRootHost) {\n      // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n      //  which means we need to get the host's host and check if that parent host is contained\n      //  in (i.e. attached to) the document\n      nodeRoot = getRootNode(nodeRootHost);\n      nodeRootHost = nodeRoot?.host;\n      attached = !!nodeRootHost?.ownerDocument?.contains(nodeRootHost);\n    }\n  }\n\n  return attached;\n};\n\nconst isZeroArea = function (node) {\n  const { width, height } = node.getBoundingClientRect();\n  return width === 0 && height === 0;\n};\nconst isHidden = function (node, { displayCheck, getShadowRoot }) {\n  if (displayCheck === 'full-native') {\n    if ('checkVisibility' in node) {\n      // Chrome >= 105, Edge >= 105, Firefox >= 106, Safari >= 17.4\n      // @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility#browser_compatibility\n      const visible = node.checkVisibility({\n        // Checking opacity might be desirable for some use cases, but natively,\n        // opacity zero elements _are_ focusable and tabbable.\n        checkOpacity: false,\n        opacityProperty: false,\n\n        contentVisibilityAuto: true,\n        visibilityProperty: true,\n        // This is an alias for `visibilityProperty`. Contemporary browsers\n        // support both. However, this alias has wider browser support (Chrome\n        // >= 105 and Firefox >= 106, vs. Chrome >= 121 and Firefox >= 122), so\n        // we include it anyway.\n        checkVisibilityCSS: true,\n      });\n      return !visible;\n    }\n    // Fall through to manual visibility checks\n  }\n\n  // NOTE: visibility will be `undefined` if node is detached from the document\n  //  (see notes about this further down), which means we will consider it visible\n  //  (this is legacy behavior from a very long way back)\n  // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n  //  _visibility_ check, not a _display_ check\n  const { visibility } = getComputedStyle(node);\n  if (visibility === 'hidden' || visibility === 'collapse') {\n    return true;\n  }\n\n  const isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n  const nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n  if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n    return true;\n  }\n\n  if (\n    !displayCheck ||\n    displayCheck === 'full' ||\n    // full-native can run this branch when it falls through in case\n    // Element#checkVisibility is unsupported\n    displayCheck === 'full-native' ||\n    displayCheck === 'legacy-full'\n  ) {\n    if (typeof getShadowRoot === 'function') {\n      // figure out if we should consider the node to be in an undisclosed shadow and use the\n      //  'non-zero-area' fallback\n      const originalNode = node;\n      while (node) {\n        const parentElement = node.parentElement;\n        const rootNode = getRootNode(node);\n        if (\n          parentElement &&\n          !parentElement.shadowRoot &&\n          getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n        ) {\n          // node has an undisclosed shadow which means we can only treat it as a black box, so we\n          //  fall back to a non-zero-area test\n          return isZeroArea(node);\n        } else if (node.assignedSlot) {\n          // iterate up slot\n          node = node.assignedSlot;\n        } else if (!parentElement && rootNode !== node.ownerDocument) {\n          // cross shadow boundary\n          node = rootNode.host;\n        } else {\n          // iterate up normal dom\n          node = parentElement;\n        }\n      }\n\n      node = originalNode;\n    }\n    // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n    //  (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n    //  it might be a falsy value, which means shadow DOM support is disabled\n\n    // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n    //  now we can just test to see if it would normally be visible or not, provided it's\n    //  attached to the main document.\n    // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n    //  `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n    if (isNodeAttached(node)) {\n      // this works wherever the node is: if there's at least one client rect, it's\n      //  somehow displayed; it also covers the CSS 'display: contents' case where the\n      //  node itself is hidden in place of its contents; and there's no need to search\n      //  up the hierarchy either\n      return !node.getClientRects().length;\n    }\n\n    // Else, the node isn't attached to the document, which means the `getClientRects()`\n    //  API will __always__ return zero rects (this can happen, for example, if React\n    //  is used to render nodes onto a detached tree, as confirmed in this thread:\n    //  https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n    //\n    // It also means that even window.getComputedStyle(node).display will return `undefined`\n    //  because styles are only computed for nodes that are in the document.\n    //\n    // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n    //  somehow. Though it was never stated officially, anyone who has ever used tabbable\n    //  APIs on nodes in detached containers has actually implicitly used tabbable in what\n    //  was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n    //  considering __everything__ to be visible because of the innability to determine styles.\n    //\n    // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n    //  nodes as visible with the 'none' fallback.__\n    if (displayCheck !== 'legacy-full') {\n      return true; // hidden\n    }\n    // else, fallback to 'none' mode and consider the node visible\n  } else if (displayCheck === 'non-zero-area') {\n    // NOTE: Even though this tests that the node's client rect is non-zero to determine\n    //  whether it's displayed, and that a detached node will __always__ have a zero-area\n    //  client rect, we don't special-case for whether the node is attached or not. In\n    //  this mode, we do want to consider nodes that have a zero area to be hidden at all\n    //  times, and that includes attached or not.\n    return isZeroArea(node);\n  }\n\n  // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n  //  it's visible\n  return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n//  unless they are in the _first_ <legend> element of the top-most disabled\n//  fieldset\nconst isDisabledFromFieldset = function (node) {\n  if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n    let parentNode = node.parentElement;\n    // check if `node` is contained in a disabled <fieldset>\n    while (parentNode) {\n      if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n        // look for the first <legend> among the children of the disabled <fieldset>\n        for (let i = 0; i < parentNode.children.length; i++) {\n          const child = parentNode.children.item(i);\n          // when the first <legend> (in document order) is found\n          if (child.tagName === 'LEGEND') {\n            // if its parent <fieldset> is not nested in another disabled <fieldset>,\n            // return whether `node` is a descendant of its first <legend>\n            return matches.call(parentNode, 'fieldset[disabled] *')\n              ? true\n              : !child.contains(node);\n          }\n        }\n        // the disabled <fieldset> containing `node` has no <legend>\n        return true;\n      }\n      parentNode = parentNode.parentElement;\n    }\n  }\n\n  // else, node's tabbable/focusable state should not be affected by a fieldset's\n  //  enabled/disabled state\n  return false;\n};\n\nconst isNodeMatchingSelectorFocusable = function (options, node) {\n  if (\n    node.disabled ||\n    isHiddenInput(node) ||\n    isHidden(node, options) ||\n    // For a details element with a summary, the summary element gets the focus\n    isDetailsWithSummary(node) ||\n    isDisabledFromFieldset(node)\n  ) {\n    return false;\n  }\n  return true;\n};\n\nconst isNodeMatchingSelectorTabbable = function (options, node) {\n  if (\n    isNonTabbableRadio(node) ||\n    getTabIndex(node) < 0 ||\n    !isNodeMatchingSelectorFocusable(options, node)\n  ) {\n    return false;\n  }\n  return true;\n};\n\nconst isShadowRootTabbable = function (shadowHostNode) {\n  const tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n  if (isNaN(tabIndex) || tabIndex >= 0) {\n    return true;\n  }\n  // If a custom element has an explicit negative tabindex,\n  // browsers will not allow tab targeting said element's children.\n  return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nconst sortByOrder = function (candidates) {\n  const regularTabbables = [];\n  const orderedTabbables = [];\n  candidates.forEach(function (item, i) {\n    const isScope = !!item.scopeParent;\n    const element = isScope ? item.scopeParent : item;\n    const candidateTabindex = getSortOrderTabIndex(element, isScope);\n    const elements = isScope ? sortByOrder(item.candidates) : element;\n    if (candidateTabindex === 0) {\n      isScope\n        ? regularTabbables.push(...elements)\n        : regularTabbables.push(element);\n    } else {\n      orderedTabbables.push({\n        documentOrder: i,\n        tabIndex: candidateTabindex,\n        item: item,\n        isScope: isScope,\n        content: elements,\n      });\n    }\n  });\n\n  return orderedTabbables\n    .sort(sortOrderedTabbables)\n    .reduce((acc, sortable) => {\n      sortable.isScope\n        ? acc.push(...sortable.content)\n        : acc.push(sortable.content);\n      return acc;\n    }, [])\n    .concat(regularTabbables);\n};\n\nconst tabbable = function (container, options) {\n  options = options || {};\n\n  let candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively(\n      [container],\n      options.includeContainer,\n      {\n        filter: isNodeMatchingSelectorTabbable.bind(null, options),\n        flatten: false,\n        getShadowRoot: options.getShadowRoot,\n        shadowRootFilter: isShadowRootTabbable,\n      }\n    );\n  } else {\n    candidates = getCandidates(\n      container,\n      options.includeContainer,\n      isNodeMatchingSelectorTabbable.bind(null, options)\n    );\n  }\n  return sortByOrder(candidates);\n};\n\nconst focusable = function (container, options) {\n  options = options || {};\n\n  let candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively(\n      [container],\n      options.includeContainer,\n      {\n        filter: isNodeMatchingSelectorFocusable.bind(null, options),\n        flatten: true,\n        getShadowRoot: options.getShadowRoot,\n      }\n    );\n  } else {\n    candidates = getCandidates(\n      container,\n      options.includeContainer,\n      isNodeMatchingSelectorFocusable.bind(null, options)\n    );\n  }\n\n  return candidates;\n};\n\nconst isTabbable = function (node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, candidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorTabbable(options, node);\n};\n\nconst focusableCandidateSelector = /* #__PURE__ */ candidateSelectors\n  .concat('iframe:not([inert]):not([inert] *)')\n  .join(',');\n\nconst isFocusable = function (node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, focusableCandidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { tabbable, focusable, isTabbable, isFocusable, getTabIndex };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  const firstChar = placement[0];\n  return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  const side = getSide(placement);\n  return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n  var _padding$top, _padding$right, _padding$bottom, _padding$left;\n  return {\n    top: (_padding$top = padding.top) != null ? _padding$top : 0,\n    right: (_padding$right = padding.right) != null ? _padding$right : 0,\n    bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,\n    left: (_padding$left = padding.left) != null ? _padding$left : 0\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  const alignment = getAlignment(placement);\n  if (alignment) {\n    coords[alignmentAxis] += commonAlign * (alignment === 'end' ? 1 : -1) * (rtl && isVertical ? -1 : 1);\n  }\n  return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) && (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n    ...platform,\n    detectOverflow\n  };\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let resetCount = 0;\n  const middlewareData = {};\n  for (let i = 0; i < middleware.length; i++) {\n    const currentMiddleware = middleware[i];\n    if (!currentMiddleware) {\n      continue;\n    }\n    const {\n      name,\n      fn\n    } = currentMiddleware;\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform: platformWithDetectOverflow,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData[name] = {\n      ...middlewareData[name],\n      ...data\n    };\n    if (reset && resetCount < MAX_RESET_COUNT) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(minPadding, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < minPadding ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < minPadding ? center - minPadding : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects,\n        platform\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n\n      // No rects (e.g. a hidden or detached reference, or a collapsed range) —\n      // keep the existing reference rect rather than resetting to an invalid\n      // one with non-finite values.\n      if (!nativeClientRects.length) {\n        return {};\n      }\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && (clientRects[0].left > clientRects[1].right || clientRects[1].left > clientRects[0].right) && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            return rectToClientRect({\n              x: left,\n              y: top,\n              width: right - left,\n              height: bottom - top\n            });\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          return rectToClientRect({\n            x: minLeft,\n            y: top,\n            width: maxRight - minLeft,\n            height: bottom - top\n          });\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        platform\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const clampCoord = (axis, coord) => clamp(coord + overflow[axis === 'y' ? 'top' : 'left'], coord, coord - overflow[axis === 'y' ? 'bottom' : 'right']);\n      if (checkMainAxis) {\n        mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);\n      }\n      if (checkCrossAxis) {\n        crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      var _rawOffset$mainAxis, _rawOffset$crossAxis;\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,\n        crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n// Method syntax keeps callback parameters bivariant, but expressing the\n// explicit `| undefined` required by `exactOptionalPropertyTypes` needs\n// property syntax, which is contravariant under `strictFunctionTypes`.\n// Extracting the function from a method position restores that bivariance so\n// consumers can still assign callbacks with narrower parameter types.\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const shiftData = state.middlewareData.shift;\n      const noShift = !shiftData;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (shiftData != null && shiftData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if (shiftData != null && shiftData.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        if (isYAxis) {\n          availableWidth = width - 2 * max(overflow.left, overflow.right);\n        } else {\n          availableHeight = height - 2 * max(overflow.top, overflow.bottom);\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n  return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  try {\n    if (element.matches(':popover-open')) {\n      return true;\n    }\n  } catch (_e) {\n    // no-op\n  }\n  try {\n    return element.matches(':modal');\n  } catch (_e) {\n    return false;\n  }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (isWebKitValue == null) {\n    isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n  }\n  return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n  return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return (node.ownerDocument || node).body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  } else {\n    return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n  }\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement && offsetParent) {\n    const win = getWindow(domElement);\n    const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return element.getClientRects ? Array.from(element.getClientRects()) : [];\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(html) {\n  const scroll = getNodeScroll(html);\n  const body = html.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(html);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy, rootBoundary) {\n  if (rootBoundary === void 0) {\n    rootBoundary = 'viewport';\n  }\n  const isLayoutViewport = rootBoundary === 'layoutViewport';\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    // Client coordinates are relative to the layout viewport, except in\n    // WebKit with an `absolute` strategy, where they are relative to the\n    // visual viewport.\n    const layoutRelativeClientCoords = !isWebKit() || strategy === 'fixed';\n    if (isLayoutViewport) {\n      if (!layoutRelativeClientCoords) {\n        x = -visualViewport.offsetLeft;\n        y = -visualViewport.offsetTop;\n      }\n    } else {\n      width = visualViewport.width;\n      height = visualViewport.height;\n      if (layoutRelativeClientCoords) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // `scrollbar-gutter: stable` on the <html> reserves gutter space that shrinks\n  // the visual width but isn't reflected in `html.clientWidth`, so subtract it.\n  // Only the inline-end (right) gutter can hold the scrollbar; `both-edges` also\n  // reserves an empty inline-start gutter that clips nothing, so exclude just\n  // the one scrollbar-side gutter — halve the measured (two-gutter) total. A\n  // left-side scrollbar (`windowScrollbarX > 0`) is already handled by\n  // `getHTMLOffset`/`visualViewport.width`; skip it here.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    const gutter = getComputedStyle(html).scrollbarGutter === 'stable both-edges' ? reservedWidth / 2 : reservedWidth;\n    if (gutter <= SCROLLBAR_MAX) {\n      width -= gutter;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = getScale(element);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport' || clippingAncestor === 'layoutViewport') {\n    rect = getViewportRect(element, strategy, clippingAncestor);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let lastKeptComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    // Position of the containing block chain below the current node. A fixed\n    // element whose containing block hasn't been found yet is a fixed chain.\n    const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? 'fixed' : '';\n\n    // A non-containing ancestor does not clip the element when the chain\n    // below it escapes it: a fixed chain escapes all ancestors up to the\n    // next containing block, an absolute chain escapes static ancestors.\n    const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === 'fixed' || lastPosition === 'absolute' && computedStyle.position === 'static');\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // The kept node carries the chain position for the next iteration.\n      lastKeptComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n  let top = firstRect.top;\n  let right = firstRect.right;\n  let bottom = firstRect.bottom;\n  let left = firstRect.left;\n  for (let i = 1; i < clippingAncestors.length; i++) {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n    top = max(rect.top, top);\n    right = min(rect.right, right);\n    bottom = min(rect.bottom, bottom);\n    left = max(rect.left, left);\n  }\n  return {\n    width: right - left,\n    height: bottom - top,\n    x: left,\n    y: top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  if (!isOffsetParentAnElement && documentElement) {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove, ancestorResize) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n\n      // The entry is a snapshot, so the reference may have moved since the\n      // intersection was computed (under performance constraints, or between\n      // consecutive frames of a multi-frame layout shift). The reported ratio\n      // and the observed area are stale in that case and cannot be trusted to\n      // detect subsequent movement, so refresh regardless of the ratio.\n      if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        return refresh();\n      }\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped in place, the ratio is 0. Throttle\n          // the refresh to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  const win = getWindow(element);\n  // The window is a resize ancestor, so when `ancestorResize` is enabled its\n  // listener already runs the update on resize. Here we only need to rebuild\n  // the `IntersectionObserver` for the new root size, skipping a redundant\n  // update. When `ancestorResize` is disabled, this becomes the sole update.\n  const handleResize = () => refresh(ancestorResize);\n  win.addEventListener('resize', handleResize);\n  refresh(true);\n  return () => {\n    win.removeEventListener('resize', handleResize);\n    cleanup();\n  };\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update);\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update, ancestorResize) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    if (floating) {\n      resizeObserver.observe(floating);\n    }\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = options != null ? options : {};\n  const platformWithCache = {\n    ...platform,\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","//\n// Main\n//\nexport function memoize(fn, options) {\n    var cache = options && options.cache ? options.cache : cacheDefault;\n    var serializer = options && options.serializer ? options.serializer : serializerDefault;\n    var strategy = options && options.strategy ? options.strategy : strategyDefault;\n    return strategy(fn, {\n        cache: cache,\n        serializer: serializer,\n    });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n    return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n    var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.call(this, arg);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n    var args = Array.prototype.slice.call(arguments, 3);\n    var cacheKey = serializer(args);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.apply(this, args);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n    return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n    var strategy = fn.length === 1 ? monadic : variadic;\n    return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n    return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n    return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n    return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nvar ObjectWithoutPrototypeCache = /** @class */ (function () {\n    function ObjectWithoutPrototypeCache() {\n        this.cache = Object.create(null);\n    }\n    ObjectWithoutPrototypeCache.prototype.get = function (key) {\n        return this.cache[key];\n    };\n    ObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n        this.cache[key] = value;\n    };\n    return ObjectWithoutPrototypeCache;\n}());\nvar cacheDefault = {\n    create: function create() {\n        return new ObjectWithoutPrototypeCache();\n    },\n};\nexport var strategies = {\n    variadic: strategyVariadic,\n    monadic: strategyMonadic,\n};\n","export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: milliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            case 'rounding-mode-floor':\n                result.roundingMode = 'floor';\n                continue;\n            case 'rounding-mode-ceiling':\n                result.roundingMode = 'ceil';\n                continue;\n            case 'rounding-mode-down':\n                result.roundingMode = 'trunc';\n                continue;\n            case 'rounding-mode-up':\n                result.roundingMode = 'expand';\n                continue;\n            case 'rounding-mode-half-even':\n                result.roundingMode = 'halfEven';\n                continue;\n            case 'rounding-mode-half-down':\n                result.roundingMode = 'halfTrunc';\n                continue;\n            case 'rounding-mode-half-up':\n                result.roundingMode = 'halfExpand';\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"419\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AX\": [\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BI\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"BO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BY\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CL\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GT\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HN\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"K\",\n        \"h\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MG\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MT\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MV\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MX\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NI\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"RW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SV\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TH\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TJ\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TM\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VN\": [\n        \"H\",\n        \"h\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-HK\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-IL\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"en-MY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","import { __spreadArray } from \"tslib\";\nimport { isArgumentElement, isDateElement, isNumberElement, isPluralElement, isSelectElement, isTagElement, isTimeElement, TYPE, } from './types';\nfunction cloneDeep(obj) {\n    if (Array.isArray(obj)) {\n        // @ts-expect-error meh\n        return __spreadArray([], obj.map(cloneDeep), true);\n    }\n    if (obj !== null && typeof obj === 'object') {\n        // @ts-expect-error meh\n        return Object.keys(obj).reduce(function (cloned, k) {\n            // @ts-expect-error meh\n            cloned[k] = cloneDeep(obj[k]);\n            return cloned;\n        }, {});\n    }\n    return obj;\n}\nfunction hoistPluralOrSelectElement(ast, el, positionToInject) {\n    // pull this out of the ast and move it to the top\n    var cloned = cloneDeep(el);\n    var options = cloned.options;\n    cloned.options = Object.keys(options).reduce(function (all, k) {\n        var newValue = hoistSelectors(__spreadArray(__spreadArray(__spreadArray([], ast.slice(0, positionToInject), true), options[k].value, true), ast.slice(positionToInject + 1), true));\n        all[k] = {\n            value: newValue,\n        };\n        return all;\n    }, {});\n    return cloned;\n}\nfunction isPluralOrSelectElement(el) {\n    return isPluralElement(el) || isSelectElement(el);\n}\nfunction findPluralOrSelectElement(ast) {\n    return !!ast.find(function (el) {\n        if (isPluralOrSelectElement(el)) {\n            return true;\n        }\n        if (isTagElement(el)) {\n            return findPluralOrSelectElement(el.children);\n        }\n        return false;\n    });\n}\n/**\n * Hoist all selectors to the beginning of the AST & flatten the\n * resulting options. E.g:\n * \"I have {count, plural, one{a dog} other{many dogs}}\"\n * becomes \"{count, plural, one{I have a dog} other{I have many dogs}}\".\n * If there are multiple selectors, the order of which one is hoisted 1st\n * is non-deterministic.\n * The goal is to provide as many full sentences as possible since fragmented\n * sentences are not translator-friendly\n * @param ast AST\n */\nexport function hoistSelectors(ast) {\n    for (var i = 0; i < ast.length; i++) {\n        var el = ast[i];\n        if (isPluralOrSelectElement(el)) {\n            return [hoistPluralOrSelectElement(ast, el, i)];\n        }\n        if (isTagElement(el) && findPluralOrSelectElement([el])) {\n            throw new Error('Cannot hoist plural/select within a tag element. Please put the tag element inside each plural/select option');\n        }\n    }\n    return ast;\n}\n/**\n * Collect all variables in an AST to Record<string, TYPE>\n * @param ast AST to collect variables from\n * @param vars Record of variable name to variable type\n */\nfunction collectVariables(ast, vars) {\n    if (vars === void 0) { vars = new Map(); }\n    ast.forEach(function (el) {\n        if (isArgumentElement(el) ||\n            isDateElement(el) ||\n            isTimeElement(el) ||\n            isNumberElement(el)) {\n            if (el.value in vars && vars.get(el.value) !== el.type) {\n                throw new Error(\"Variable \".concat(el.value, \" has conflicting types\"));\n            }\n            vars.set(el.value, el.type);\n        }\n        if (isPluralElement(el) || isSelectElement(el)) {\n            vars.set(el.value, el.type);\n            Object.keys(el.options).forEach(function (k) {\n                collectVariables(el.options[k].value, vars);\n            });\n        }\n        if (isTagElement(el)) {\n            vars.set(el.value, el.type);\n            collectVariables(el.children, vars);\n        }\n    });\n}\n/**\n * Check if 2 ASTs are structurally the same. This primarily means that\n * they have the same variables with the same type\n * @param a\n * @param b\n * @returns\n */\nexport function isStructurallySame(a, b) {\n    var aVars = new Map();\n    var bVars = new Map();\n    collectVariables(a, aVars);\n    collectVariables(b, bVars);\n    if (aVars.size !== bVars.size) {\n        return {\n            success: false,\n            error: new Error(\"Different number of variables: [\".concat(Array.from(aVars.keys()).join(', '), \"] vs [\").concat(Array.from(bVars.keys()).join(', '), \"]\")),\n        };\n    }\n    return Array.from(aVars.entries()).reduce(function (result, _a) {\n        var key = _a[0], type = _a[1];\n        if (!result.success) {\n            return result;\n        }\n        var bType = bVars.get(key);\n        if (bType == null) {\n            return {\n                success: false,\n                error: new Error(\"Missing variable \".concat(key, \" in message\")),\n            };\n        }\n        if (bType !== type) {\n            return {\n                success: false,\n                error: new Error(\"Variable \".concat(key, \" has conflicting types: \").concat(TYPE[type], \" vs \").concat(TYPE[bType])),\n            };\n        }\n        return result;\n    }, { success: true });\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\nexport { isStructurallySame } from './manipulator';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = shouldPolyfill;\nvar intl_localematcher_1 = require(\"@formatjs/intl-localematcher\");\nvar supported_locales_generated_1 = require(\"./supported-locales.generated\");\nfunction supportsDateStyle() {\n    try {\n        return !!new Intl.DateTimeFormat(undefined, {\n            dateStyle: 'short',\n        }).resolvedOptions().dateStyle;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * https://bugs.chromium.org/p/chromium/issues/detail?id=865351\n */\nfunction hasChromeLt71Bug() {\n    try {\n        return (new Intl.DateTimeFormat('en', {\n            hourCycle: 'h11',\n            hour: 'numeric',\n        }).formatToParts(0)[2].type !== 'dayPeriod');\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Node 14's version of Intl.DateTimeFormat does not throw\n * when dateStyle/timeStyle is used with other options.\n * This was fixed in newer V8 versions\n */\nfunction hasUnthrownDateTimeStyleBug() {\n    try {\n        return !!new Intl.DateTimeFormat('en', {\n            dateStyle: 'short',\n            hour: 'numeric',\n        }).format(new Date(0));\n    }\n    catch (e) {\n        return false;\n    }\n}\nfunction supportedLocalesOf(locale) {\n    if (!locale) {\n        return true;\n    }\n    var locales = Array.isArray(locale) ? locale : [locale];\n    return (Intl.DateTimeFormat.supportedLocalesOf(locales).length === locales.length);\n}\nfunction shouldPolyfill(locale) {\n    if (locale === void 0) { locale = 'en'; }\n    if (!('DateTimeFormat' in Intl) ||\n        !('formatToParts' in Intl.DateTimeFormat.prototype) ||\n        !('formatRange' in Intl.DateTimeFormat.prototype) ||\n        hasChromeLt71Bug() ||\n        hasUnthrownDateTimeStyleBug() ||\n        !supportsDateStyle() ||\n        !supportedLocalesOf(locale)) {\n        return locale ? (0, intl_localematcher_1.match)([locale], supported_locales_generated_1.supportedLocales, 'en') : undefined;\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportedLocales = void 0;\nexports.supportedLocales = [\"af\", \"af-NA\", \"agq\", \"ak\", \"am\", \"ar\", \"ar-AE\", \"ar-BH\", \"ar-DJ\", \"ar-DZ\", \"ar-EG\", \"ar-EH\", \"ar-ER\", \"ar-IL\", \"ar-IQ\", \"ar-JO\", \"ar-KM\", \"ar-KW\", \"ar-LB\", \"ar-LY\", \"ar-MA\", \"ar-MR\", \"ar-OM\", \"ar-PS\", \"ar-QA\", \"ar-SA\", \"ar-SD\", \"ar-SO\", \"ar-SS\", \"ar-SY\", \"ar-TD\", \"ar-TN\", \"ar-YE\", \"as\", \"asa\", \"ast\", \"az\", \"az-Cyrl\", \"az-Latn\", \"bas\", \"be\", \"be-tarask\", \"bem\", \"bez\", \"bg\", \"bm\", \"bn\", \"bn-IN\", \"bo\", \"bo-IN\", \"br\", \"brx\", \"bs\", \"bs-Cyrl\", \"bs-Latn\", \"ca\", \"ca-AD\", \"ca-ES-valencia\", \"ca-FR\", \"ca-IT\", \"ccp\", \"ccp-IN\", \"ce\", \"ceb\", \"cgg\", \"chr\", \"ckb\", \"ckb-IR\", \"cs\", \"cy\", \"da\", \"da-GL\", \"dav\", \"de\", \"de-AT\", \"de-BE\", \"de-CH\", \"de-IT\", \"de-LI\", \"de-LU\", \"dje\", \"doi\", \"dsb\", \"dua\", \"dyo\", \"dz\", \"ebu\", \"ee\", \"ee-TG\", \"el\", \"el-CY\", \"en\", \"en-001\", \"en-150\", \"en-AE\", \"en-AG\", \"en-AI\", \"en-AS\", \"en-AT\", \"en-AU\", \"en-BB\", \"en-BE\", \"en-BI\", \"en-BM\", \"en-BS\", \"en-BW\", \"en-BZ\", \"en-CA\", \"en-CC\", \"en-CH\", \"en-CK\", \"en-CM\", \"en-CX\", \"en-CY\", \"en-DE\", \"en-DG\", \"en-DK\", \"en-DM\", \"en-ER\", \"en-FI\", \"en-FJ\", \"en-FK\", \"en-FM\", \"en-GB\", \"en-GD\", \"en-GG\", \"en-GH\", \"en-GI\", \"en-GM\", \"en-GU\", \"en-GY\", \"en-HK\", \"en-IE\", \"en-IL\", \"en-IM\", \"en-IN\", \"en-IO\", \"en-JE\", \"en-JM\", \"en-KE\", \"en-KI\", \"en-KN\", \"en-KY\", \"en-LC\", \"en-LR\", \"en-LS\", \"en-MG\", \"en-MH\", \"en-MO\", \"en-MP\", \"en-MS\", \"en-MT\", \"en-MU\", \"en-MW\", \"en-MY\", \"en-NA\", \"en-NF\", \"en-NG\", \"en-NL\", \"en-NR\", \"en-NU\", \"en-NZ\", \"en-PG\", \"en-PH\", \"en-PK\", \"en-PN\", \"en-PR\", \"en-PW\", \"en-RW\", \"en-SB\", \"en-SC\", \"en-SD\", \"en-SE\", \"en-SG\", \"en-SH\", \"en-SI\", \"en-SL\", \"en-SS\", \"en-SX\", \"en-SZ\", \"en-TC\", \"en-TK\", \"en-TO\", \"en-TT\", \"en-TV\", \"en-TZ\", \"en-UG\", \"en-UM\", \"en-VC\", \"en-VG\", \"en-VI\", \"en-VU\", \"en-WS\", \"en-ZA\", \"en-ZM\", \"en-ZW\", \"eo\", \"es\", \"es-419\", \"es-AR\", \"es-BO\", \"es-BR\", \"es-BZ\", \"es-CL\", \"es-CO\", \"es-CR\", \"es-CU\", \"es-DO\", \"es-EA\", \"es-EC\", \"es-GQ\", \"es-GT\", \"es-HN\", \"es-IC\", \"es-MX\", \"es-NI\", \"es-PA\", \"es-PE\", \"es-PH\", \"es-PR\", \"es-PY\", \"es-SV\", \"es-US\", \"es-UY\", \"es-VE\", \"et\", \"eu\", \"ewo\", \"fa\", \"fa-AF\", \"ff\", \"ff-Adlm\", \"ff-Adlm-BF\", \"ff-Adlm-CM\", \"ff-Adlm-GH\", \"ff-Adlm-GM\", \"ff-Adlm-GW\", \"ff-Adlm-LR\", \"ff-Adlm-MR\", \"ff-Adlm-NE\", \"ff-Adlm-NG\", \"ff-Adlm-SL\", \"ff-Adlm-SN\", \"ff-Latn\", \"ff-Latn-BF\", \"ff-Latn-CM\", \"ff-Latn-GH\", \"ff-Latn-GM\", \"ff-Latn-GN\", \"ff-Latn-GW\", \"ff-Latn-LR\", \"ff-Latn-MR\", \"ff-Latn-NE\", \"ff-Latn-NG\", \"ff-Latn-SL\", \"fi\", \"fil\", \"fo\", \"fo-DK\", \"fr\", \"fr-BE\", \"fr-BF\", \"fr-BI\", \"fr-BJ\", \"fr-BL\", \"fr-CA\", \"fr-CD\", \"fr-CF\", \"fr-CG\", \"fr-CH\", \"fr-CI\", \"fr-CM\", \"fr-DJ\", \"fr-DZ\", \"fr-GA\", \"fr-GF\", \"fr-GN\", \"fr-GP\", \"fr-GQ\", \"fr-HT\", \"fr-KM\", \"fr-LU\", \"fr-MA\", \"fr-MC\", \"fr-MF\", \"fr-MG\", \"fr-ML\", \"fr-MQ\", \"fr-MR\", \"fr-MU\", \"fr-NC\", \"fr-NE\", \"fr-PF\", \"fr-PM\", \"fr-RE\", \"fr-RW\", \"fr-SC\", \"fr-SN\", \"fr-SY\", \"fr-TD\", \"fr-TG\", \"fr-TN\", \"fr-VU\", \"fr-WF\", \"fr-YT\", \"fur\", \"fy\", \"ga\", \"ga-GB\", \"gd\", \"gl\", \"gsw\", \"gsw-FR\", \"gsw-LI\", \"gu\", \"guz\", \"gv\", \"ha\", \"ha-GH\", \"ha-NE\", \"haw\", \"he\", \"hi\", \"hr\", \"hr-BA\", \"hsb\", \"hu\", \"hy\", \"ia\", \"id\", \"ig\", \"ii\", \"is\", \"it\", \"it-CH\", \"it-SM\", \"it-VA\", \"ja\", \"jgo\", \"jmc\", \"jv\", \"ka\", \"kab\", \"kam\", \"kde\", \"kea\", \"kgp\", \"khq\", \"ki\", \"kk\", \"kkj\", \"kl\", \"kln\", \"km\", \"kn\", \"ko\", \"ko-KP\", \"kok\", \"ks\", \"ks-Arab\", \"ksb\", \"ksf\", \"ksh\", \"ku\", \"kw\", \"ky\", \"lag\", \"lb\", \"lg\", \"lkt\", \"ln\", \"ln-AO\", \"ln-CF\", \"ln-CG\", \"lo\", \"lrc\", \"lrc-IQ\", \"lt\", \"lu\", \"luo\", \"luy\", \"lv\", \"mai\", \"mas\", \"mas-TZ\", \"mer\", \"mfe\", \"mg\", \"mgh\", \"mgo\", \"mi\", \"mk\", \"ml\", \"mn\", \"mni\", \"mni-Beng\", \"mr\", \"ms\", \"ms-BN\", \"ms-ID\", \"ms-SG\", \"mt\", \"mua\", \"my\", \"mzn\", \"naq\", \"nb\", \"nb-SJ\", \"nd\", \"nds\", \"nds-NL\", \"ne\", \"ne-IN\", \"nl\", \"nl-AW\", \"nl-BE\", \"nl-BQ\", \"nl-CW\", \"nl-SR\", \"nl-SX\", \"nmg\", \"nn\", \"nnh\", \"no\", \"nus\", \"nyn\", \"om\", \"om-KE\", \"or\", \"os\", \"os-RU\", \"pa\", \"pa-Arab\", \"pa-Guru\", \"pcm\", \"pl\", \"ps\", \"ps-PK\", \"pt\", \"pt-AO\", \"pt-CH\", \"pt-CV\", \"pt-GQ\", \"pt-GW\", \"pt-LU\", \"pt-MO\", \"pt-MZ\", \"pt-PT\", \"pt-ST\", \"pt-TL\", \"qu\", \"qu-BO\", \"qu-EC\", \"rm\", \"rn\", \"ro\", \"ro-MD\", \"rof\", \"ru\", \"ru-BY\", \"ru-KG\", \"ru-KZ\", \"ru-MD\", \"ru-UA\", \"rw\", \"rwk\", \"sa\", \"sah\", \"saq\", \"sat\", \"sat-Olck\", \"sbp\", \"sc\", \"sd\", \"sd-Arab\", \"sd-Deva\", \"se\", \"se-FI\", \"se-SE\", \"seh\", \"ses\", \"sg\", \"shi\", \"shi-Latn\", \"shi-Tfng\", \"si\", \"sk\", \"sl\", \"smn\", \"sn\", \"so\", \"so-DJ\", \"so-ET\", \"so-KE\", \"sq\", \"sq-MK\", \"sq-XK\", \"sr\", \"sr-Cyrl\", \"sr-Cyrl-BA\", \"sr-Cyrl-ME\", \"sr-Cyrl-XK\", \"sr-Latn\", \"sr-Latn-BA\", \"sr-Latn-ME\", \"sr-Latn-XK\", \"su\", \"su-Latn\", \"sv\", \"sv-AX\", \"sv-FI\", \"sw\", \"sw-CD\", \"sw-KE\", \"sw-UG\", \"ta\", \"ta-LK\", \"ta-MY\", \"ta-SG\", \"te\", \"teo\", \"teo-KE\", \"tg\", \"th\", \"ti\", \"ti-ER\", \"tk\", \"to\", \"tr\", \"tr-CY\", \"tt\", \"twq\", \"tzm\", \"ug\", \"uk\", \"und\", \"ur\", \"ur-IN\", \"uz\", \"uz-Arab\", \"uz-Cyrl\", \"uz-Latn\", \"vai\", \"vai-Latn\", \"vai-Vaii\", \"vi\", \"vun\", \"wae\", \"wo\", \"xh\", \"xog\", \"yav\", \"yi\", \"yo\", \"yo-BJ\", \"yrl\", \"yrl-CO\", \"yrl-VE\", \"yue\", \"yue-Hans\", \"yue-Hant\", \"zgh\", \"zh\", \"zh-Hans\", \"zh-Hans-HK\", \"zh-Hans-MO\", \"zh-Hans-SG\", \"zh-Hant\", \"zh-Hant-HK\", \"zh-Hant-MO\", \"zu\"];\n","/**\n * https://tc39.es/ecma402/#sec-bestavailablelocale\n * @param availableLocales\n * @param locale\n */\nexport function BestAvailableLocale(availableLocales, locale) {\n    var candidate = locale;\n    while (true) {\n        if (availableLocales.indexOf(candidate) > -1) {\n            return candidate;\n        }\n        var pos = candidate.lastIndexOf('-');\n        if (!~pos) {\n            return undefined;\n        }\n        if (pos >= 2 && candidate[pos - 2] === '-') {\n            pos -= 2;\n        }\n        candidate = candidate.slice(0, pos);\n    }\n}\n","import { BestAvailableLocale } from './BestAvailableLocale';\nimport { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-lookupsupportedlocales\n * @param availableLocales\n * @param requestedLocales\n */\nexport function LookupSupportedLocales(availableLocales, requestedLocales) {\n    var subset = [];\n    for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n        var locale = requestedLocales_1[_i];\n        var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n        var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);\n        if (availableLocale) {\n            subset.push(availableLocale);\n        }\n    }\n    return subset;\n}\n","export function CanonicalizeUnicodeLocaleId(locale) {\n    return Intl.getCanonicalLocales(locale)[0];\n}\n","import { BestFitMatcher } from './BestFitMatcher';\nimport { CanonicalizeUValue } from './CanonicalizeUValue';\nimport { InsertUnicodeExtensionAndCanonicalize } from './InsertUnicodeExtensionAndCanonicalize';\nimport { LookupMatcher } from './LookupMatcher';\nimport { UnicodeExtensionComponents } from './UnicodeExtensionComponents';\nimport { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-resolvelocale\n */\nexport function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {\n    var _a;\n    var matcher = options.localeMatcher;\n    var r;\n    if (matcher === 'lookup') {\n        r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);\n    }\n    else {\n        r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);\n    }\n    if (r == null) {\n        r = {\n            locale: getDefaultLocale(),\n            extension: '',\n        };\n    }\n    var foundLocale = r.locale;\n    var foundLocaleData = localeData[foundLocale];\n    // TODO: We can't really guarantee that the locale data is available\n    // invariant(\n    //   foundLocaleData !== undefined,\n    //   `Missing locale data for ${foundLocale}`\n    // )\n    var result = { locale: 'en', dataLocale: foundLocale };\n    var components;\n    var keywords;\n    if (r.extension) {\n        components = UnicodeExtensionComponents(r.extension);\n        keywords = components.keywords;\n    }\n    else {\n        keywords = [];\n    }\n    var supportedKeywords = [];\n    var _loop_1 = function (key) {\n        // TODO: Shouldn't default to empty array, see TODO above\n        var keyLocaleData = (_a = foundLocaleData === null || foundLocaleData === void 0 ? void 0 : foundLocaleData[key]) !== null && _a !== void 0 ? _a : [];\n        invariant(Array.isArray(keyLocaleData), \"keyLocaleData for \".concat(key, \" must be an array\"));\n        var value = keyLocaleData[0];\n        invariant(value === undefined || typeof value === 'string', \"value must be a string or undefined\");\n        var supportedKeyword = void 0;\n        var entry = keywords.find(function (k) { return k.key === key; });\n        if (entry) {\n            var requestedValue = entry.value;\n            if (requestedValue !== '') {\n                if (keyLocaleData.indexOf(requestedValue) > -1) {\n                    value = requestedValue;\n                    supportedKeyword = {\n                        key: key,\n                        value: value,\n                    };\n                }\n            }\n            else if (keyLocaleData.indexOf('true') > -1) {\n                value = 'true';\n                supportedKeyword = {\n                    key: key,\n                    value: value,\n                };\n            }\n        }\n        var optionsValue = options[key];\n        invariant(optionsValue == null || typeof optionsValue === 'string', \"optionsValue must be a string or undefined\");\n        if (typeof optionsValue === 'string') {\n            var ukey = key.toLowerCase();\n            optionsValue = CanonicalizeUValue(ukey, optionsValue);\n            if (optionsValue === '') {\n                optionsValue = 'true';\n            }\n        }\n        if (optionsValue !== value && keyLocaleData.indexOf(optionsValue) > -1) {\n            value = optionsValue;\n            supportedKeyword = undefined;\n        }\n        if (supportedKeyword) {\n            supportedKeywords.push(supportedKeyword);\n        }\n        result[key] = value;\n    };\n    for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {\n        var key = relevantExtensionKeys_1[_i];\n        _loop_1(key);\n    }\n    var supportedAttributes = [];\n    if (supportedKeywords.length > 0) {\n        supportedAttributes = [];\n        foundLocale = InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedAttributes, supportedKeywords);\n    }\n    result.locale = foundLocale;\n    return result;\n}\n","import { BestAvailableLocale } from './BestAvailableLocale';\nimport { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-lookupmatcher\n * @param availableLocales\n * @param requestedLocales\n * @param getDefaultLocale\n */\nexport function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {\n    var result = { locale: '' };\n    for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n        var locale = requestedLocales_1[_i];\n        var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n        var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);\n        if (availableLocale) {\n            result.locale = availableLocale;\n            if (locale !== noExtensionLocale) {\n                result.extension = locale.slice(noExtensionLocale.length, locale.length);\n            }\n            return result;\n        }\n    }\n    result.locale = getDefaultLocale();\n    return result;\n}\n","import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-bestfitmatcher\n * @param availableLocales\n * @param requestedLocales\n * @param getDefaultLocale\n */\nexport function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {\n    var foundLocale;\n    var extension;\n    var noExtensionLocales = [];\n    var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) {\n        var noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n        noExtensionLocales.push(noExtensionLocale);\n        all[noExtensionLocale] = l;\n        return all;\n    }, {});\n    var result = findBestMatch(noExtensionLocales, availableLocales);\n    if (result.matchedSupportedLocale && result.matchedDesiredLocale) {\n        foundLocale = result.matchedSupportedLocale;\n        extension =\n            noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined;\n    }\n    if (!foundLocale) {\n        return { locale: getDefaultLocale() };\n    }\n    return {\n        locale: foundLocale,\n        extension: extension,\n    };\n}\n","import { invariant } from './utils';\nexport function UnicodeExtensionComponents(extension) {\n    invariant(extension === extension.toLowerCase(), 'Expected extension to be lowercase');\n    invariant(extension.slice(0, 3) === '-u-', 'Expected extension to be a Unicode locale extension');\n    var attributes = [];\n    var keywords = [];\n    var keyword;\n    var size = extension.length;\n    var k = 3;\n    while (k < size) {\n        var e = extension.indexOf('-', k);\n        var len = void 0;\n        if (e === -1) {\n            len = size - k;\n        }\n        else {\n            len = e - k;\n        }\n        var subtag = extension.slice(k, k + len);\n        invariant(len >= 2, 'Expected a subtag to have at least 2 characters');\n        if (keyword === undefined && len != 2) {\n            if (attributes.indexOf(subtag) === -1) {\n                attributes.push(subtag);\n            }\n        }\n        else if (len === 2) {\n            keyword = { key: subtag, value: '' };\n            if (keywords.find(function (k) { return k.key === (keyword === null || keyword === void 0 ? void 0 : keyword.key); }) === undefined) {\n                keywords.push(keyword);\n            }\n        }\n        else if ((keyword === null || keyword === void 0 ? void 0 : keyword.value) === '') {\n            keyword.value = subtag;\n        }\n        else {\n            invariant(keyword !== undefined, 'Expected keyword to be defined');\n            keyword.value += '-' + subtag;\n        }\n        k += len + 1;\n    }\n    return { attributes: attributes, keywords: keywords };\n}\n","import { invariant } from './utils';\nexport function CanonicalizeUValue(ukey, uvalue) {\n    // TODO: Implement algorithm for CanonicalizeUValue per https://tc39.es/ecma402/#sec-canonicalizeuvalue\n    var lowerValue = uvalue.toLowerCase();\n    invariant(ukey !== undefined, \"ukey must be defined\");\n    var canonicalized = lowerValue;\n    return canonicalized;\n}\n","import { CanonicalizeUnicodeLocaleId } from './CanonicalizeUnicodeLocaleId';\nimport { invariant } from './utils';\nexport function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {\n    invariant(locale.indexOf('-u-') === -1, 'Expected locale to not have a Unicode locale extension');\n    var extension = '-u';\n    for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n        var attr = attributes_1[_i];\n        extension += \"-\".concat(attr);\n    }\n    for (var _a = 0, keywords_1 = keywords; _a < keywords_1.length; _a++) {\n        var kw = keywords_1[_a];\n        var key = kw.key, value = kw.value;\n        extension += \"-\".concat(key);\n        if (value !== '') {\n            extension += \"-\".concat(value);\n        }\n    }\n    if (extension === '-u') {\n        return CanonicalizeUnicodeLocaleId(locale);\n    }\n    var privateIndex = locale.indexOf('-x-');\n    var newLocale;\n    if (privateIndex === -1) {\n        newLocale = locale + extension;\n    }\n    else {\n        var preExtension = locale.slice(0, privateIndex);\n        var postExtension = locale.slice(privateIndex);\n        newLocale = preExtension + extension + postExtension;\n    }\n    return CanonicalizeUnicodeLocaleId(newLocale);\n}\n","import { __spreadArray } from \"tslib\";\nimport { data as jsonData } from './languageMatching';\nimport { regions } from './regions.generated';\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n    if (Err === void 0) { Err = Error; }\n    if (!condition) {\n        throw new Err(message);\n    }\n}\n// This is effectively 2 languages in 2 different regions in the same cluster\nvar DEFAULT_MATCHING_THRESHOLD = 838;\nvar PROCESSED_DATA;\nfunction processData() {\n    var _a, _b;\n    if (!PROCESSED_DATA) {\n        var paradigmLocales = (_b = (_a = jsonData.supplemental.languageMatching['written-new'][0]) === null || _a === void 0 ? void 0 : _a.paradigmLocales) === null || _b === void 0 ? void 0 : _b._locales.split(' ');\n        var matchVariables = jsonData.supplemental.languageMatching['written-new'].slice(1, 5);\n        var data = jsonData.supplemental.languageMatching['written-new'].slice(5);\n        var matches = data.map(function (d) {\n            var key = Object.keys(d)[0];\n            var value = d[key];\n            return {\n                supported: key,\n                desired: value._desired,\n                distance: +value._distance,\n                oneway: value.oneway === 'true' ? true : false,\n            };\n        }, {});\n        PROCESSED_DATA = {\n            matches: matches,\n            matchVariables: matchVariables.reduce(function (all, d) {\n                var key = Object.keys(d)[0];\n                var value = d[key];\n                all[key.slice(1)] = value._value.split('+');\n                return all;\n            }, {}),\n            paradigmLocales: __spreadArray(__spreadArray([], paradigmLocales, true), paradigmLocales.map(function (l) {\n                return new Intl.Locale(l.replace(/_/g, '-')).maximize().toString();\n            }), true),\n        };\n    }\n    return PROCESSED_DATA;\n}\nfunction isMatched(locale, languageMatchInfoLocale, matchVariables) {\n    var _a = languageMatchInfoLocale.split('-'), language = _a[0], script = _a[1], region = _a[2];\n    var matches = true;\n    if (region && region[0] === '$') {\n        var shouldInclude = region[1] !== '!';\n        var matchRegions = shouldInclude\n            ? matchVariables[region.slice(1)]\n            : matchVariables[region.slice(2)];\n        var expandedMatchedRegions = matchRegions\n            .map(function (r) { return regions[r] || [r]; })\n            .reduce(function (all, list) { return __spreadArray(__spreadArray([], all, true), list, true); }, []);\n        matches && (matches = !(expandedMatchedRegions.indexOf(locale.region || '') > -1 !=\n            shouldInclude));\n    }\n    else {\n        matches && (matches = locale.region\n            ? region === '*' || region === locale.region\n            : true);\n    }\n    matches && (matches = locale.script ? script === '*' || script === locale.script : true);\n    matches && (matches = locale.language\n        ? language === '*' || language === locale.language\n        : true);\n    return matches;\n}\nfunction serializeLSR(lsr) {\n    return [lsr.language, lsr.script, lsr.region].filter(Boolean).join('-');\n}\nfunction findMatchingDistanceForLSR(desired, supported, data) {\n    for (var _i = 0, _a = data.matches; _i < _a.length; _i++) {\n        var d = _a[_i];\n        var matches = isMatched(desired, d.desired, data.matchVariables) &&\n            isMatched(supported, d.supported, data.matchVariables);\n        if (!d.oneway && !matches) {\n            matches =\n                isMatched(desired, d.supported, data.matchVariables) &&\n                    isMatched(supported, d.desired, data.matchVariables);\n        }\n        if (matches) {\n            var distance = d.distance * 10;\n            if (data.paradigmLocales.indexOf(serializeLSR(desired)) > -1 !=\n                data.paradigmLocales.indexOf(serializeLSR(supported)) > -1) {\n                return distance - 1;\n            }\n            return distance;\n        }\n    }\n    throw new Error('No matching distance found');\n}\nexport function findMatchingDistance(desired, supported) {\n    var desiredLocale = new Intl.Locale(desired).maximize();\n    var supportedLocale = new Intl.Locale(supported).maximize();\n    var desiredLSR = {\n        language: desiredLocale.language,\n        script: desiredLocale.script || '',\n        region: desiredLocale.region || '',\n    };\n    var supportedLSR = {\n        language: supportedLocale.language,\n        script: supportedLocale.script || '',\n        region: supportedLocale.region || '',\n    };\n    var matchingDistance = 0;\n    var data = processData();\n    if (desiredLSR.language !== supportedLSR.language) {\n        matchingDistance += findMatchingDistanceForLSR({\n            language: desiredLocale.language,\n            script: '',\n            region: '',\n        }, {\n            language: supportedLocale.language,\n            script: '',\n            region: '',\n        }, data);\n    }\n    if (desiredLSR.script !== supportedLSR.script) {\n        matchingDistance += findMatchingDistanceForLSR({\n            language: desiredLocale.language,\n            script: desiredLSR.script,\n            region: '',\n        }, {\n            language: supportedLocale.language,\n            script: supportedLSR.script,\n            region: '',\n        }, data);\n    }\n    if (desiredLSR.region !== supportedLSR.region) {\n        matchingDistance += findMatchingDistanceForLSR(desiredLSR, supportedLSR, data);\n    }\n    return matchingDistance;\n}\nexport function findBestMatch(requestedLocales, supportedLocales, threshold) {\n    if (threshold === void 0) { threshold = DEFAULT_MATCHING_THRESHOLD; }\n    var lowestDistance = Infinity;\n    var result = {\n        matchedDesiredLocale: '',\n        distances: {},\n    };\n    requestedLocales.forEach(function (desired, i) {\n        if (!result.distances[desired]) {\n            result.distances[desired] = {};\n        }\n        supportedLocales.forEach(function (supported) {\n            // Add some weight to the distance based on the order of the supported locales\n            // Add penalty for the order of the requested locales, which currently is 0 since ECMA-402\n            // doesn't really have room for weighted locales like `en; q=0.1`\n            var distance = findMatchingDistance(desired, supported) + 0 + i * 40;\n            result.distances[desired][supported] = distance;\n            if (distance < lowestDistance) {\n                lowestDistance = distance;\n                result.matchedDesiredLocale = desired;\n                result.matchedSupportedLocale = supported;\n            }\n        });\n    });\n    if (lowestDistance >= threshold) {\n        result.matchedDesiredLocale = undefined;\n        result.matchedSupportedLocale = undefined;\n    }\n    return result;\n}\n","export var data = {\n    supplemental: {\n        languageMatching: {\n            'written-new': [\n                {\n                    paradigmLocales: {\n                        _locales: 'en en_GB es es_419 pt_BR pt_PT',\n                    },\n                },\n                {\n                    $enUS: {\n                        _value: 'AS+CA+GU+MH+MP+PH+PR+UM+US+VI',\n                    },\n                },\n                {\n                    $cnsar: {\n                        _value: 'HK+MO',\n                    },\n                },\n                {\n                    $americas: {\n                        _value: '019',\n                    },\n                },\n                {\n                    $maghreb: {\n                        _value: 'MA+DZ+TN+LY+MR+EH',\n                    },\n                },\n                {\n                    no: {\n                        _desired: 'nb',\n                        _distance: '1',\n                    },\n                },\n                {\n                    bs: {\n                        _desired: 'hr',\n                        _distance: '4',\n                    },\n                },\n                {\n                    bs: {\n                        _desired: 'sh',\n                        _distance: '4',\n                    },\n                },\n                {\n                    hr: {\n                        _desired: 'sh',\n                        _distance: '4',\n                    },\n                },\n                {\n                    sr: {\n                        _desired: 'sh',\n                        _distance: '4',\n                    },\n                },\n                {\n                    aa: {\n                        _desired: 'ssy',\n                        _distance: '4',\n                    },\n                },\n                {\n                    de: {\n                        _desired: 'gsw',\n                        _distance: '4',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    de: {\n                        _desired: 'lb',\n                        _distance: '4',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    no: {\n                        _desired: 'da',\n                        _distance: '8',\n                    },\n                },\n                {\n                    nb: {\n                        _desired: 'da',\n                        _distance: '8',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'ab',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ach',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    nl: {\n                        _desired: 'af',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ak',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'am',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    es: {\n                        _desired: 'ay',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'az',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ur: {\n                        _desired: 'bal',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'be',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'bem',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    hi: {\n                        _desired: 'bh',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'bn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'bo',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'br',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    es: {\n                        _desired: 'ca',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fil: {\n                        _desired: 'ceb',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'chr',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ckb',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'co',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'crs',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sk: {\n                        _desired: 'cs',\n                        _distance: '20',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'cy',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ee',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'eo',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    es: {\n                        _desired: 'eu',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    da: {\n                        _desired: 'fo',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    nl: {\n                        _desired: 'fy',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ga',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'gaa',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'gd',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    es: {\n                        _desired: 'gl',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    es: {\n                        _desired: 'gn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    hi: {\n                        _desired: 'gu',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ha',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'haw',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'ht',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'hy',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ia',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ig',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'is',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    id: {\n                        _desired: 'jv',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ka',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'kg',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'kk',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'km',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'kn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'kri',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    tr: {\n                        _desired: 'ku',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'ky',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    it: {\n                        _desired: 'la',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'lg',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'ln',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'lo',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'loz',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'lua',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    hi: {\n                        _desired: 'mai',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'mfe',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'mg',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'mi',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ml',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'mn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    hi: {\n                        _desired: 'mr',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    id: {\n                        _desired: 'ms',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'mt',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'my',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ne',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    nb: {\n                        _desired: 'nn',\n                        _distance: '20',\n                    },\n                },\n                {\n                    no: {\n                        _desired: 'nn',\n                        _distance: '20',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'nso',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ny',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'nyn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'oc',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'om',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'or',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'pa',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'pcm',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ps',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    es: {\n                        _desired: 'qu',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    de: {\n                        _desired: 'rm',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'rn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'rw',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    hi: {\n                        _desired: 'sa',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'sd',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'si',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'sn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'so',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'sq',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'st',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    id: {\n                        _desired: 'su',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'sw',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ta',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'te',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'tg',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ti',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'tk',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'tlh',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'tn',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'to',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'tt',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'tum',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'ug',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'uk',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'ur',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ru: {\n                        _desired: 'uz',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    fr: {\n                        _desired: 'wo',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'xh',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'yi',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'yo',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'za',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    en: {\n                        _desired: 'zu',\n                        _distance: '30',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'aao',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'abh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'abv',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'acm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'acq',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'acw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'acx',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'acy',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'adf',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'aeb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'aec',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'afb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ajp',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'apc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'apd',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'arq',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ars',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ary',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'arz',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'auz',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'avl',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ayh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ayl',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ayn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ayp',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'bbz',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'pga',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'shu',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ar: {\n                        _desired: 'ssh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    az: {\n                        _desired: 'azb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    et: {\n                        _desired: 'vro',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'ffm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fub',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fue',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fuf',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fuh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fui',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fuq',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ff: {\n                        _desired: 'fuv',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    gn: {\n                        _desired: 'gnw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    gn: {\n                        _desired: 'gui',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    gn: {\n                        _desired: 'gun',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    gn: {\n                        _desired: 'nhd',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    iu: {\n                        _desired: 'ikt',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'enb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'eyo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'niq',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'oki',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'pko',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'sgc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'tec',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kln: {\n                        _desired: 'tuy',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kok: {\n                        _desired: 'gom',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    kpe: {\n                        _desired: 'gkp',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'ida',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lkb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lko',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lks',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lri',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lrm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lsm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lto',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lts',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'lwg',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'nle',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'nyd',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    luy: {\n                        _desired: 'rag',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    lv: {\n                        _desired: 'ltg',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'bhr',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'bjq',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'bmm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'bzc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'msh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'skg',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'tdx',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'tkg',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'txy',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'xmv',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mg: {\n                        _desired: 'xmw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    mn: {\n                        _desired: 'mvf',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'bjn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'btj',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'bve',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'bvu',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'coa',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'dup',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'hji',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'id',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'jak',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'jax',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'kvb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'kvr',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'kxd',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'lce',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'lcf',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'liw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'max',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'meo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'mfa',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'mfb',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'min',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'mqg',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'msi',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'mui',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'orn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'ors',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'pel',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'pse',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'tmw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'urk',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'vkk',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'vkt',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'xmm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'zlm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ms: {\n                        _desired: 'zmi',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ne: {\n                        _desired: 'dty',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    om: {\n                        _desired: 'gax',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    om: {\n                        _desired: 'hae',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    om: {\n                        _desired: 'orc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    or: {\n                        _desired: 'spv',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ps: {\n                        _desired: 'pbt',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    ps: {\n                        _desired: 'pst',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qub',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qud',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'quf',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qug',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'quh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'quk',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qul',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qup',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qur',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qus',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'quw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qux',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'quy',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qva',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qve',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvi',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvj',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvl',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvm',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvp',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvs',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qvz',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qwa',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qwc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qwh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qws',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxa',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxl',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxp',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxr',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxt',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxu',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    qu: {\n                        _desired: 'qxw',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sc: {\n                        _desired: 'sdc',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sc: {\n                        _desired: 'sdn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sc: {\n                        _desired: 'sro',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sq: {\n                        _desired: 'aae',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sq: {\n                        _desired: 'aat',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    sq: {\n                        _desired: 'aln',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    syr: {\n                        _desired: 'aii',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    uz: {\n                        _desired: 'uzs',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    yi: {\n                        _desired: 'yih',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'cdo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'cjy',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'cpx',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'czh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'czo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'gan',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'hak',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'hsn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'lzh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'mnp',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'nan',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'wuu',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    zh: {\n                        _desired: 'yue',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    '*': {\n                        _desired: '*',\n                        _distance: '80',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'am-Ethi',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ru-Cyrl': {\n                        _desired: 'az-Latn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'bn-Beng',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'zh-Hans': {\n                        _desired: 'bo-Tibt',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ru-Cyrl': {\n                        _desired: 'hy-Armn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ka-Geor',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'km-Khmr',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'kn-Knda',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'lo-Laoo',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ml-Mlym',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'my-Mymr',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ne-Deva',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'or-Orya',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'pa-Guru',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ps-Arab',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'sd-Arab',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'si-Sinh',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ta-Taml',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'te-Telu',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ti-Ethi',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ru-Cyrl': {\n                        _desired: 'tk-Latn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'ur-Arab',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ru-Cyrl': {\n                        _desired: 'uz-Latn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'en-Latn': {\n                        _desired: 'yi-Hebr',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'sr-Cyrl': {\n                        _desired: 'sr-Latn',\n                        _distance: '5',\n                    },\n                },\n                {\n                    'zh-Hans': {\n                        _desired: 'za-Latn',\n                        _distance: '10',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'zh-Hans': {\n                        _desired: 'zh-Hani',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'zh-Hant': {\n                        _desired: 'zh-Hani',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ar-Arab': {\n                        _desired: 'ar-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'bn-Beng': {\n                        _desired: 'bn-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'gu-Gujr': {\n                        _desired: 'gu-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'hi-Deva': {\n                        _desired: 'hi-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'kn-Knda': {\n                        _desired: 'kn-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ml-Mlym': {\n                        _desired: 'ml-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'mr-Deva': {\n                        _desired: 'mr-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ta-Taml': {\n                        _desired: 'ta-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'te-Telu': {\n                        _desired: 'te-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'zh-Hans': {\n                        _desired: 'zh-Latn',\n                        _distance: '20',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Jpan': {\n                        _desired: 'ja-Latn',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Jpan': {\n                        _desired: 'ja-Hani',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Jpan': {\n                        _desired: 'ja-Hira',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Jpan': {\n                        _desired: 'ja-Kana',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Jpan': {\n                        _desired: 'ja-Hrkt',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Hrkt': {\n                        _desired: 'ja-Hira',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ja-Hrkt': {\n                        _desired: 'ja-Kana',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ko-Kore': {\n                        _desired: 'ko-Hani',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ko-Kore': {\n                        _desired: 'ko-Hang',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ko-Kore': {\n                        _desired: 'ko-Jamo',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    'ko-Hang': {\n                        _desired: 'ko-Jamo',\n                        _distance: '5',\n                        _oneway: 'true',\n                    },\n                },\n                {\n                    '*-*': {\n                        _desired: '*-*',\n                        _distance: '50',\n                    },\n                },\n                {\n                    'ar-*-$maghreb': {\n                        _desired: 'ar-*-$maghreb',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'ar-*-$!maghreb': {\n                        _desired: 'ar-*-$!maghreb',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'ar-*-*': {\n                        _desired: 'ar-*-*',\n                        _distance: '5',\n                    },\n                },\n                {\n                    'en-*-$enUS': {\n                        _desired: 'en-*-$enUS',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'en-*-GB': {\n                        _desired: 'en-*-$!enUS',\n                        _distance: '3',\n                    },\n                },\n                {\n                    'en-*-$!enUS': {\n                        _desired: 'en-*-$!enUS',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'en-*-*': {\n                        _desired: 'en-*-*',\n                        _distance: '5',\n                    },\n                },\n                {\n                    'es-*-$americas': {\n                        _desired: 'es-*-$americas',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'es-*-$!americas': {\n                        _desired: 'es-*-$!americas',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'es-*-*': {\n                        _desired: 'es-*-*',\n                        _distance: '5',\n                    },\n                },\n                {\n                    'pt-*-$americas': {\n                        _desired: 'pt-*-$americas',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'pt-*-$!americas': {\n                        _desired: 'pt-*-$!americas',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'pt-*-*': {\n                        _desired: 'pt-*-*',\n                        _distance: '5',\n                    },\n                },\n                {\n                    'zh-Hant-$cnsar': {\n                        _desired: 'zh-Hant-$cnsar',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'zh-Hant-$!cnsar': {\n                        _desired: 'zh-Hant-$!cnsar',\n                        _distance: '4',\n                    },\n                },\n                {\n                    'zh-Hant-*': {\n                        _desired: 'zh-Hant-*',\n                        _distance: '5',\n                    },\n                },\n                {\n                    '*-*-*': {\n                        _desired: '*-*-*',\n                        _distance: '4',\n                    },\n                },\n            ],\n        },\n    },\n};\n","// This file is generated from regions-gen.ts\nexport var regions = {\n    \"001\": [\n        \"001\",\n        \"001-status-grouping\",\n        \"002\",\n        \"005\",\n        \"009\",\n        \"011\",\n        \"013\",\n        \"014\",\n        \"015\",\n        \"017\",\n        \"018\",\n        \"019\",\n        \"021\",\n        \"029\",\n        \"030\",\n        \"034\",\n        \"035\",\n        \"039\",\n        \"053\",\n        \"054\",\n        \"057\",\n        \"061\",\n        \"142\",\n        \"143\",\n        \"145\",\n        \"150\",\n        \"151\",\n        \"154\",\n        \"155\",\n        \"AC\",\n        \"AD\",\n        \"AE\",\n        \"AF\",\n        \"AG\",\n        \"AI\",\n        \"AL\",\n        \"AM\",\n        \"AO\",\n        \"AQ\",\n        \"AR\",\n        \"AS\",\n        \"AT\",\n        \"AU\",\n        \"AW\",\n        \"AX\",\n        \"AZ\",\n        \"BA\",\n        \"BB\",\n        \"BD\",\n        \"BE\",\n        \"BF\",\n        \"BG\",\n        \"BH\",\n        \"BI\",\n        \"BJ\",\n        \"BL\",\n        \"BM\",\n        \"BN\",\n        \"BO\",\n        \"BQ\",\n        \"BR\",\n        \"BS\",\n        \"BT\",\n        \"BV\",\n        \"BW\",\n        \"BY\",\n        \"BZ\",\n        \"CA\",\n        \"CC\",\n        \"CD\",\n        \"CF\",\n        \"CG\",\n        \"CH\",\n        \"CI\",\n        \"CK\",\n        \"CL\",\n        \"CM\",\n        \"CN\",\n        \"CO\",\n        \"CP\",\n        \"CQ\",\n        \"CR\",\n        \"CU\",\n        \"CV\",\n        \"CW\",\n        \"CX\",\n        \"CY\",\n        \"CZ\",\n        \"DE\",\n        \"DG\",\n        \"DJ\",\n        \"DK\",\n        \"DM\",\n        \"DO\",\n        \"DZ\",\n        \"EA\",\n        \"EC\",\n        \"EE\",\n        \"EG\",\n        \"EH\",\n        \"ER\",\n        \"ES\",\n        \"ET\",\n        \"EU\",\n        \"EZ\",\n        \"FI\",\n        \"FJ\",\n        \"FK\",\n        \"FM\",\n        \"FO\",\n        \"FR\",\n        \"GA\",\n        \"GB\",\n        \"GD\",\n        \"GE\",\n        \"GF\",\n        \"GG\",\n        \"GH\",\n        \"GI\",\n        \"GL\",\n        \"GM\",\n        \"GN\",\n        \"GP\",\n        \"GQ\",\n        \"GR\",\n        \"GS\",\n        \"GT\",\n        \"GU\",\n        \"GW\",\n        \"GY\",\n        \"HK\",\n        \"HM\",\n        \"HN\",\n        \"HR\",\n        \"HT\",\n        \"HU\",\n        \"IC\",\n        \"ID\",\n        \"IE\",\n        \"IL\",\n        \"IM\",\n        \"IN\",\n        \"IO\",\n        \"IQ\",\n        \"IR\",\n        \"IS\",\n        \"IT\",\n        \"JE\",\n        \"JM\",\n        \"JO\",\n        \"JP\",\n        \"KE\",\n        \"KG\",\n        \"KH\",\n        \"KI\",\n        \"KM\",\n        \"KN\",\n        \"KP\",\n        \"KR\",\n        \"KW\",\n        \"KY\",\n        \"KZ\",\n        \"LA\",\n        \"LB\",\n        \"LC\",\n        \"LI\",\n        \"LK\",\n        \"LR\",\n        \"LS\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"LY\",\n        \"MA\",\n        \"MC\",\n        \"MD\",\n        \"ME\",\n        \"MF\",\n        \"MG\",\n        \"MH\",\n        \"MK\",\n        \"ML\",\n        \"MM\",\n        \"MN\",\n        \"MO\",\n        \"MP\",\n        \"MQ\",\n        \"MR\",\n        \"MS\",\n        \"MT\",\n        \"MU\",\n        \"MV\",\n        \"MW\",\n        \"MX\",\n        \"MY\",\n        \"MZ\",\n        \"NA\",\n        \"NC\",\n        \"NE\",\n        \"NF\",\n        \"NG\",\n        \"NI\",\n        \"NL\",\n        \"NO\",\n        \"NP\",\n        \"NR\",\n        \"NU\",\n        \"NZ\",\n        \"OM\",\n        \"PA\",\n        \"PE\",\n        \"PF\",\n        \"PG\",\n        \"PH\",\n        \"PK\",\n        \"PL\",\n        \"PM\",\n        \"PN\",\n        \"PR\",\n        \"PS\",\n        \"PT\",\n        \"PW\",\n        \"PY\",\n        \"QA\",\n        \"QO\",\n        \"RE\",\n        \"RO\",\n        \"RS\",\n        \"RU\",\n        \"RW\",\n        \"SA\",\n        \"SB\",\n        \"SC\",\n        \"SD\",\n        \"SE\",\n        \"SG\",\n        \"SH\",\n        \"SI\",\n        \"SJ\",\n        \"SK\",\n        \"SL\",\n        \"SM\",\n        \"SN\",\n        \"SO\",\n        \"SR\",\n        \"SS\",\n        \"ST\",\n        \"SV\",\n        \"SX\",\n        \"SY\",\n        \"SZ\",\n        \"TA\",\n        \"TC\",\n        \"TD\",\n        \"TF\",\n        \"TG\",\n        \"TH\",\n        \"TJ\",\n        \"TK\",\n        \"TL\",\n        \"TM\",\n        \"TN\",\n        \"TO\",\n        \"TR\",\n        \"TT\",\n        \"TV\",\n        \"TW\",\n        \"TZ\",\n        \"UA\",\n        \"UG\",\n        \"UM\",\n        \"UN\",\n        \"US\",\n        \"UY\",\n        \"UZ\",\n        \"VA\",\n        \"VC\",\n        \"VE\",\n        \"VG\",\n        \"VI\",\n        \"VN\",\n        \"VU\",\n        \"WF\",\n        \"WS\",\n        \"XK\",\n        \"YE\",\n        \"YT\",\n        \"ZA\",\n        \"ZM\",\n        \"ZW\"\n    ],\n    \"002\": [\n        \"002\",\n        \"002-status-grouping\",\n        \"011\",\n        \"014\",\n        \"015\",\n        \"017\",\n        \"018\",\n        \"202\",\n        \"AO\",\n        \"BF\",\n        \"BI\",\n        \"BJ\",\n        \"BW\",\n        \"CD\",\n        \"CF\",\n        \"CG\",\n        \"CI\",\n        \"CM\",\n        \"CV\",\n        \"DJ\",\n        \"DZ\",\n        \"EA\",\n        \"EG\",\n        \"EH\",\n        \"ER\",\n        \"ET\",\n        \"GA\",\n        \"GH\",\n        \"GM\",\n        \"GN\",\n        \"GQ\",\n        \"GW\",\n        \"IC\",\n        \"IO\",\n        \"KE\",\n        \"KM\",\n        \"LR\",\n        \"LS\",\n        \"LY\",\n        \"MA\",\n        \"MG\",\n        \"ML\",\n        \"MR\",\n        \"MU\",\n        \"MW\",\n        \"MZ\",\n        \"NA\",\n        \"NE\",\n        \"NG\",\n        \"RE\",\n        \"RW\",\n        \"SC\",\n        \"SD\",\n        \"SH\",\n        \"SL\",\n        \"SN\",\n        \"SO\",\n        \"SS\",\n        \"ST\",\n        \"SZ\",\n        \"TD\",\n        \"TF\",\n        \"TG\",\n        \"TN\",\n        \"TZ\",\n        \"UG\",\n        \"YT\",\n        \"ZA\",\n        \"ZM\",\n        \"ZW\"\n    ],\n    \"003\": [\n        \"003\",\n        \"013\",\n        \"021\",\n        \"029\",\n        \"AG\",\n        \"AI\",\n        \"AW\",\n        \"BB\",\n        \"BL\",\n        \"BM\",\n        \"BQ\",\n        \"BS\",\n        \"BZ\",\n        \"CA\",\n        \"CR\",\n        \"CU\",\n        \"CW\",\n        \"DM\",\n        \"DO\",\n        \"GD\",\n        \"GL\",\n        \"GP\",\n        \"GT\",\n        \"HN\",\n        \"HT\",\n        \"JM\",\n        \"KN\",\n        \"KY\",\n        \"LC\",\n        \"MF\",\n        \"MQ\",\n        \"MS\",\n        \"MX\",\n        \"NI\",\n        \"PA\",\n        \"PM\",\n        \"PR\",\n        \"SV\",\n        \"SX\",\n        \"TC\",\n        \"TT\",\n        \"US\",\n        \"VC\",\n        \"VG\",\n        \"VI\"\n    ],\n    \"005\": [\n        \"005\",\n        \"AR\",\n        \"BO\",\n        \"BR\",\n        \"BV\",\n        \"CL\",\n        \"CO\",\n        \"EC\",\n        \"FK\",\n        \"GF\",\n        \"GS\",\n        \"GY\",\n        \"PE\",\n        \"PY\",\n        \"SR\",\n        \"UY\",\n        \"VE\"\n    ],\n    \"009\": [\n        \"009\",\n        \"053\",\n        \"054\",\n        \"057\",\n        \"061\",\n        \"AC\",\n        \"AQ\",\n        \"AS\",\n        \"AU\",\n        \"CC\",\n        \"CK\",\n        \"CP\",\n        \"CX\",\n        \"DG\",\n        \"FJ\",\n        \"FM\",\n        \"GU\",\n        \"HM\",\n        \"KI\",\n        \"MH\",\n        \"MP\",\n        \"NC\",\n        \"NF\",\n        \"NR\",\n        \"NU\",\n        \"NZ\",\n        \"PF\",\n        \"PG\",\n        \"PN\",\n        \"PW\",\n        \"QO\",\n        \"SB\",\n        \"TA\",\n        \"TK\",\n        \"TO\",\n        \"TV\",\n        \"UM\",\n        \"VU\",\n        \"WF\",\n        \"WS\"\n    ],\n    \"011\": [\n        \"011\",\n        \"BF\",\n        \"BJ\",\n        \"CI\",\n        \"CV\",\n        \"GH\",\n        \"GM\",\n        \"GN\",\n        \"GW\",\n        \"LR\",\n        \"ML\",\n        \"MR\",\n        \"NE\",\n        \"NG\",\n        \"SH\",\n        \"SL\",\n        \"SN\",\n        \"TG\"\n    ],\n    \"013\": [\n        \"013\",\n        \"BZ\",\n        \"CR\",\n        \"GT\",\n        \"HN\",\n        \"MX\",\n        \"NI\",\n        \"PA\",\n        \"SV\"\n    ],\n    \"014\": [\n        \"014\",\n        \"BI\",\n        \"DJ\",\n        \"ER\",\n        \"ET\",\n        \"IO\",\n        \"KE\",\n        \"KM\",\n        \"MG\",\n        \"MU\",\n        \"MW\",\n        \"MZ\",\n        \"RE\",\n        \"RW\",\n        \"SC\",\n        \"SO\",\n        \"SS\",\n        \"TF\",\n        \"TZ\",\n        \"UG\",\n        \"YT\",\n        \"ZM\",\n        \"ZW\"\n    ],\n    \"015\": [\n        \"015\",\n        \"DZ\",\n        \"EA\",\n        \"EG\",\n        \"EH\",\n        \"IC\",\n        \"LY\",\n        \"MA\",\n        \"SD\",\n        \"TN\"\n    ],\n    \"017\": [\n        \"017\",\n        \"AO\",\n        \"CD\",\n        \"CF\",\n        \"CG\",\n        \"CM\",\n        \"GA\",\n        \"GQ\",\n        \"ST\",\n        \"TD\"\n    ],\n    \"018\": [\n        \"018\",\n        \"BW\",\n        \"LS\",\n        \"NA\",\n        \"SZ\",\n        \"ZA\"\n    ],\n    \"019\": [\n        \"003\",\n        \"005\",\n        \"013\",\n        \"019\",\n        \"019-status-grouping\",\n        \"021\",\n        \"029\",\n        \"419\",\n        \"AG\",\n        \"AI\",\n        \"AR\",\n        \"AW\",\n        \"BB\",\n        \"BL\",\n        \"BM\",\n        \"BO\",\n        \"BQ\",\n        \"BR\",\n        \"BS\",\n        \"BV\",\n        \"BZ\",\n        \"CA\",\n        \"CL\",\n        \"CO\",\n        \"CR\",\n        \"CU\",\n        \"CW\",\n        \"DM\",\n        \"DO\",\n        \"EC\",\n        \"FK\",\n        \"GD\",\n        \"GF\",\n        \"GL\",\n        \"GP\",\n        \"GS\",\n        \"GT\",\n        \"GY\",\n        \"HN\",\n        \"HT\",\n        \"JM\",\n        \"KN\",\n        \"KY\",\n        \"LC\",\n        \"MF\",\n        \"MQ\",\n        \"MS\",\n        \"MX\",\n        \"NI\",\n        \"PA\",\n        \"PE\",\n        \"PM\",\n        \"PR\",\n        \"PY\",\n        \"SR\",\n        \"SV\",\n        \"SX\",\n        \"TC\",\n        \"TT\",\n        \"US\",\n        \"UY\",\n        \"VC\",\n        \"VE\",\n        \"VG\",\n        \"VI\"\n    ],\n    \"021\": [\n        \"021\",\n        \"BM\",\n        \"CA\",\n        \"GL\",\n        \"PM\",\n        \"US\"\n    ],\n    \"029\": [\n        \"029\",\n        \"AG\",\n        \"AI\",\n        \"AW\",\n        \"BB\",\n        \"BL\",\n        \"BQ\",\n        \"BS\",\n        \"CU\",\n        \"CW\",\n        \"DM\",\n        \"DO\",\n        \"GD\",\n        \"GP\",\n        \"HT\",\n        \"JM\",\n        \"KN\",\n        \"KY\",\n        \"LC\",\n        \"MF\",\n        \"MQ\",\n        \"MS\",\n        \"PR\",\n        \"SX\",\n        \"TC\",\n        \"TT\",\n        \"VC\",\n        \"VG\",\n        \"VI\"\n    ],\n    \"030\": [\n        \"030\",\n        \"CN\",\n        \"HK\",\n        \"JP\",\n        \"KP\",\n        \"KR\",\n        \"MN\",\n        \"MO\",\n        \"TW\"\n    ],\n    \"034\": [\n        \"034\",\n        \"AF\",\n        \"BD\",\n        \"BT\",\n        \"IN\",\n        \"IR\",\n        \"LK\",\n        \"MV\",\n        \"NP\",\n        \"PK\"\n    ],\n    \"035\": [\n        \"035\",\n        \"BN\",\n        \"ID\",\n        \"KH\",\n        \"LA\",\n        \"MM\",\n        \"MY\",\n        \"PH\",\n        \"SG\",\n        \"TH\",\n        \"TL\",\n        \"VN\"\n    ],\n    \"039\": [\n        \"039\",\n        \"AD\",\n        \"AL\",\n        \"BA\",\n        \"ES\",\n        \"GI\",\n        \"GR\",\n        \"HR\",\n        \"IT\",\n        \"ME\",\n        \"MK\",\n        \"MT\",\n        \"PT\",\n        \"RS\",\n        \"SI\",\n        \"SM\",\n        \"VA\",\n        \"XK\"\n    ],\n    \"053\": [\n        \"053\",\n        \"AU\",\n        \"CC\",\n        \"CX\",\n        \"HM\",\n        \"NF\",\n        \"NZ\"\n    ],\n    \"054\": [\n        \"054\",\n        \"FJ\",\n        \"NC\",\n        \"PG\",\n        \"SB\",\n        \"VU\"\n    ],\n    \"057\": [\n        \"057\",\n        \"FM\",\n        \"GU\",\n        \"KI\",\n        \"MH\",\n        \"MP\",\n        \"NR\",\n        \"PW\",\n        \"UM\"\n    ],\n    \"061\": [\n        \"061\",\n        \"AS\",\n        \"CK\",\n        \"NU\",\n        \"PF\",\n        \"PN\",\n        \"TK\",\n        \"TO\",\n        \"TV\",\n        \"WF\",\n        \"WS\"\n    ],\n    \"142\": [\n        \"030\",\n        \"034\",\n        \"035\",\n        \"142\",\n        \"143\",\n        \"145\",\n        \"AE\",\n        \"AF\",\n        \"AM\",\n        \"AZ\",\n        \"BD\",\n        \"BH\",\n        \"BN\",\n        \"BT\",\n        \"CN\",\n        \"CY\",\n        \"GE\",\n        \"HK\",\n        \"ID\",\n        \"IL\",\n        \"IN\",\n        \"IQ\",\n        \"IR\",\n        \"JO\",\n        \"JP\",\n        \"KG\",\n        \"KH\",\n        \"KP\",\n        \"KR\",\n        \"KW\",\n        \"KZ\",\n        \"LA\",\n        \"LB\",\n        \"LK\",\n        \"MM\",\n        \"MN\",\n        \"MO\",\n        \"MV\",\n        \"MY\",\n        \"NP\",\n        \"OM\",\n        \"PH\",\n        \"PK\",\n        \"PS\",\n        \"QA\",\n        \"SA\",\n        \"SG\",\n        \"SY\",\n        \"TH\",\n        \"TJ\",\n        \"TL\",\n        \"TM\",\n        \"TR\",\n        \"TW\",\n        \"UZ\",\n        \"VN\",\n        \"YE\"\n    ],\n    \"143\": [\n        \"143\",\n        \"KG\",\n        \"KZ\",\n        \"TJ\",\n        \"TM\",\n        \"UZ\"\n    ],\n    \"145\": [\n        \"145\",\n        \"AE\",\n        \"AM\",\n        \"AZ\",\n        \"BH\",\n        \"CY\",\n        \"GE\",\n        \"IL\",\n        \"IQ\",\n        \"JO\",\n        \"KW\",\n        \"LB\",\n        \"OM\",\n        \"PS\",\n        \"QA\",\n        \"SA\",\n        \"SY\",\n        \"TR\",\n        \"YE\"\n    ],\n    \"150\": [\n        \"039\",\n        \"150\",\n        \"151\",\n        \"154\",\n        \"155\",\n        \"AD\",\n        \"AL\",\n        \"AT\",\n        \"AX\",\n        \"BA\",\n        \"BE\",\n        \"BG\",\n        \"BY\",\n        \"CH\",\n        \"CQ\",\n        \"CZ\",\n        \"DE\",\n        \"DK\",\n        \"EE\",\n        \"ES\",\n        \"FI\",\n        \"FO\",\n        \"FR\",\n        \"GB\",\n        \"GG\",\n        \"GI\",\n        \"GR\",\n        \"HR\",\n        \"HU\",\n        \"IE\",\n        \"IM\",\n        \"IS\",\n        \"IT\",\n        \"JE\",\n        \"LI\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"MC\",\n        \"MD\",\n        \"ME\",\n        \"MK\",\n        \"MT\",\n        \"NL\",\n        \"NO\",\n        \"PL\",\n        \"PT\",\n        \"RO\",\n        \"RS\",\n        \"RU\",\n        \"SE\",\n        \"SI\",\n        \"SJ\",\n        \"SK\",\n        \"SM\",\n        \"UA\",\n        \"VA\",\n        \"XK\"\n    ],\n    \"151\": [\n        \"151\",\n        \"BG\",\n        \"BY\",\n        \"CZ\",\n        \"HU\",\n        \"MD\",\n        \"PL\",\n        \"RO\",\n        \"RU\",\n        \"SK\",\n        \"UA\"\n    ],\n    \"154\": [\n        \"154\",\n        \"AX\",\n        \"CQ\",\n        \"DK\",\n        \"EE\",\n        \"FI\",\n        \"FO\",\n        \"GB\",\n        \"GG\",\n        \"IE\",\n        \"IM\",\n        \"IS\",\n        \"JE\",\n        \"LT\",\n        \"LV\",\n        \"NO\",\n        \"SE\",\n        \"SJ\"\n    ],\n    \"155\": [\n        \"155\",\n        \"AT\",\n        \"BE\",\n        \"CH\",\n        \"DE\",\n        \"FR\",\n        \"LI\",\n        \"LU\",\n        \"MC\",\n        \"NL\"\n    ],\n    \"202\": [\n        \"011\",\n        \"014\",\n        \"017\",\n        \"018\",\n        \"202\",\n        \"AO\",\n        \"BF\",\n        \"BI\",\n        \"BJ\",\n        \"BW\",\n        \"CD\",\n        \"CF\",\n        \"CG\",\n        \"CI\",\n        \"CM\",\n        \"CV\",\n        \"DJ\",\n        \"ER\",\n        \"ET\",\n        \"GA\",\n        \"GH\",\n        \"GM\",\n        \"GN\",\n        \"GQ\",\n        \"GW\",\n        \"IO\",\n        \"KE\",\n        \"KM\",\n        \"LR\",\n        \"LS\",\n        \"MG\",\n        \"ML\",\n        \"MR\",\n        \"MU\",\n        \"MW\",\n        \"MZ\",\n        \"NA\",\n        \"NE\",\n        \"NG\",\n        \"RE\",\n        \"RW\",\n        \"SC\",\n        \"SH\",\n        \"SL\",\n        \"SN\",\n        \"SO\",\n        \"SS\",\n        \"ST\",\n        \"SZ\",\n        \"TD\",\n        \"TF\",\n        \"TG\",\n        \"TZ\",\n        \"UG\",\n        \"YT\",\n        \"ZA\",\n        \"ZM\",\n        \"ZW\"\n    ],\n    \"419\": [\n        \"005\",\n        \"013\",\n        \"029\",\n        \"419\",\n        \"AG\",\n        \"AI\",\n        \"AR\",\n        \"AW\",\n        \"BB\",\n        \"BL\",\n        \"BO\",\n        \"BQ\",\n        \"BR\",\n        \"BS\",\n        \"BV\",\n        \"BZ\",\n        \"CL\",\n        \"CO\",\n        \"CR\",\n        \"CU\",\n        \"CW\",\n        \"DM\",\n        \"DO\",\n        \"EC\",\n        \"FK\",\n        \"GD\",\n        \"GF\",\n        \"GP\",\n        \"GS\",\n        \"GT\",\n        \"GY\",\n        \"HN\",\n        \"HT\",\n        \"JM\",\n        \"KN\",\n        \"KY\",\n        \"LC\",\n        \"MF\",\n        \"MQ\",\n        \"MS\",\n        \"MX\",\n        \"NI\",\n        \"PA\",\n        \"PE\",\n        \"PR\",\n        \"PY\",\n        \"SR\",\n        \"SV\",\n        \"SX\",\n        \"TC\",\n        \"TT\",\n        \"UY\",\n        \"VC\",\n        \"VE\",\n        \"VG\",\n        \"VI\"\n    ],\n    \"EU\": [\n        \"AT\",\n        \"BE\",\n        \"BG\",\n        \"CY\",\n        \"CZ\",\n        \"DE\",\n        \"DK\",\n        \"EE\",\n        \"ES\",\n        \"EU\",\n        \"FI\",\n        \"FR\",\n        \"GR\",\n        \"HR\",\n        \"HU\",\n        \"IE\",\n        \"IT\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"MT\",\n        \"NL\",\n        \"PL\",\n        \"PT\",\n        \"RO\",\n        \"SE\",\n        \"SI\",\n        \"SK\"\n    ],\n    \"EZ\": [\n        \"AT\",\n        \"BE\",\n        \"CY\",\n        \"DE\",\n        \"EE\",\n        \"ES\",\n        \"EZ\",\n        \"FI\",\n        \"FR\",\n        \"GR\",\n        \"IE\",\n        \"IT\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"MT\",\n        \"NL\",\n        \"PT\",\n        \"SI\",\n        \"SK\"\n    ],\n    \"QO\": [\n        \"AC\",\n        \"AQ\",\n        \"CP\",\n        \"DG\",\n        \"QO\",\n        \"TA\"\n    ],\n    \"UN\": [\n        \"AD\",\n        \"AE\",\n        \"AF\",\n        \"AG\",\n        \"AL\",\n        \"AM\",\n        \"AO\",\n        \"AR\",\n        \"AT\",\n        \"AU\",\n        \"AZ\",\n        \"BA\",\n        \"BB\",\n        \"BD\",\n        \"BE\",\n        \"BF\",\n        \"BG\",\n        \"BH\",\n        \"BI\",\n        \"BJ\",\n        \"BN\",\n        \"BO\",\n        \"BR\",\n        \"BS\",\n        \"BT\",\n        \"BW\",\n        \"BY\",\n        \"BZ\",\n        \"CA\",\n        \"CD\",\n        \"CF\",\n        \"CG\",\n        \"CH\",\n        \"CI\",\n        \"CL\",\n        \"CM\",\n        \"CN\",\n        \"CO\",\n        \"CR\",\n        \"CU\",\n        \"CV\",\n        \"CY\",\n        \"CZ\",\n        \"DE\",\n        \"DJ\",\n        \"DK\",\n        \"DM\",\n        \"DO\",\n        \"DZ\",\n        \"EC\",\n        \"EE\",\n        \"EG\",\n        \"ER\",\n        \"ES\",\n        \"ET\",\n        \"FI\",\n        \"FJ\",\n        \"FM\",\n        \"FR\",\n        \"GA\",\n        \"GB\",\n        \"GD\",\n        \"GE\",\n        \"GH\",\n        \"GM\",\n        \"GN\",\n        \"GQ\",\n        \"GR\",\n        \"GT\",\n        \"GW\",\n        \"GY\",\n        \"HN\",\n        \"HR\",\n        \"HT\",\n        \"HU\",\n        \"ID\",\n        \"IE\",\n        \"IL\",\n        \"IN\",\n        \"IQ\",\n        \"IR\",\n        \"IS\",\n        \"IT\",\n        \"JM\",\n        \"JO\",\n        \"JP\",\n        \"KE\",\n        \"KG\",\n        \"KH\",\n        \"KI\",\n        \"KM\",\n        \"KN\",\n        \"KP\",\n        \"KR\",\n        \"KW\",\n        \"KZ\",\n        \"LA\",\n        \"LB\",\n        \"LC\",\n        \"LI\",\n        \"LK\",\n        \"LR\",\n        \"LS\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"LY\",\n        \"MA\",\n        \"MC\",\n        \"MD\",\n        \"ME\",\n        \"MG\",\n        \"MH\",\n        \"MK\",\n        \"ML\",\n        \"MM\",\n        \"MN\",\n        \"MR\",\n        \"MT\",\n        \"MU\",\n        \"MV\",\n        \"MW\",\n        \"MX\",\n        \"MY\",\n        \"MZ\",\n        \"NA\",\n        \"NE\",\n        \"NG\",\n        \"NI\",\n        \"NL\",\n        \"NO\",\n        \"NP\",\n        \"NR\",\n        \"NZ\",\n        \"OM\",\n        \"PA\",\n        \"PE\",\n        \"PG\",\n        \"PH\",\n        \"PK\",\n        \"PL\",\n        \"PT\",\n        \"PW\",\n        \"PY\",\n        \"QA\",\n        \"RO\",\n        \"RS\",\n        \"RU\",\n        \"RW\",\n        \"SA\",\n        \"SB\",\n        \"SC\",\n        \"SD\",\n        \"SE\",\n        \"SG\",\n        \"SI\",\n        \"SK\",\n        \"SL\",\n        \"SM\",\n        \"SN\",\n        \"SO\",\n        \"SR\",\n        \"SS\",\n        \"ST\",\n        \"SV\",\n        \"SY\",\n        \"SZ\",\n        \"TD\",\n        \"TG\",\n        \"TH\",\n        \"TJ\",\n        \"TL\",\n        \"TM\",\n        \"TN\",\n        \"TO\",\n        \"TR\",\n        \"TT\",\n        \"TV\",\n        \"TZ\",\n        \"UA\",\n        \"UG\",\n        \"UN\",\n        \"US\",\n        \"UY\",\n        \"UZ\",\n        \"VC\",\n        \"VE\",\n        \"VN\",\n        \"VU\",\n        \"WS\",\n        \"YE\",\n        \"ZA\",\n        \"ZM\",\n        \"ZW\"\n    ]\n};\n","import { CanonicalizeLocaleList } from './abstract/CanonicalizeLocaleList';\nimport { ResolveLocale } from './abstract/ResolveLocale';\nexport function match(requestedLocales, availableLocales, defaultLocale, opts) {\n    return ResolveLocale(availableLocales, CanonicalizeLocaleList(requestedLocales), {\n        localeMatcher: (opts === null || opts === void 0 ? void 0 : opts.algorithm) || 'best fit',\n    }, [], {}, function () { return defaultLocale; }).locale;\n}\nexport { LookupSupportedLocales } from './abstract/LookupSupportedLocales';\nexport { ResolveLocale } from './abstract/ResolveLocale';\n","/**\n * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist\n * @param locales\n */\nexport function CanonicalizeLocaleList(locales) {\n    return Intl.getCanonicalLocales(locales);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = shouldPolyfill;\nvar intl_localematcher_1 = require(\"@formatjs/intl-localematcher\");\nvar supported_locales_generated_1 = require(\"./supported-locales.generated\");\n/**\n * Check if this is old Node that only supports en\n * @returns\n */\nfunction onlySupportsEn() {\n    return (!Intl.NumberFormat.polyfilled &&\n        !Intl.NumberFormat.supportedLocalesOf(['es']).length);\n}\n/**\n * Check if Intl.NumberFormat is ES2020 compatible.\n * Caveat: we are not checking `toLocaleString`.\n *\n * @public\n * @param unit unit to check\n */\nfunction supportsES2020() {\n    try {\n        var s = new Intl.NumberFormat('en', {\n            style: 'unit',\n            unit: 'bit',\n            unitDisplay: 'long',\n            notation: 'scientific',\n        }).format(10000);\n        // Check for a plurality bug in environment that uses the older versions of ICU:\n        // https://unicode-org.atlassian.net/browse/ICU-13836\n        if (s !== '1E4 bits') {\n            return false;\n        }\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}\n/**\n * Check if Intl.NumberFormat is ES2020 compatible.\n * Caveat: we are not checking `toLocaleString`.\n *\n * @public\n * @param unit unit to check\n */\nfunction supportsES2023() {\n    try {\n        var s = new Intl.NumberFormat('en', {\n            notation: 'compact',\n            minimumSignificantDigits: 3,\n            maximumSignificantDigits: 3,\n            minimumFractionDigits: 2,\n            maximumFractionDigits: 2,\n            // @ts-ignore TS types are old\n            roundingPriority: 'morePrecision',\n        }).format(1e8);\n        return s === '100.00M';\n    }\n    catch (e) {\n        return false;\n    }\n}\nfunction supportedLocalesOf(locale) {\n    if (!locale) {\n        return true;\n    }\n    var locales = Array.isArray(locale) ? locale : [locale];\n    return Intl.NumberFormat.supportedLocalesOf(locales).length === locales.length;\n}\nfunction shouldPolyfill(locale) {\n    if (locale === void 0) { locale = 'en'; }\n    if (typeof Intl === 'undefined' ||\n        !('NumberFormat' in Intl) ||\n        !supportsES2020() ||\n        !supportsES2023() ||\n        onlySupportsEn() ||\n        !supportedLocalesOf(locale)) {\n        return locale ? (0, intl_localematcher_1.match)([locale], supported_locales_generated_1.supportedLocales, 'en') : undefined;\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportedLocales = void 0;\nexports.supportedLocales = [\"af\", \"af-NA\", \"agq\", \"ak\", \"am\", \"ar\", \"ar-AE\", \"ar-BH\", \"ar-DJ\", \"ar-DZ\", \"ar-EG\", \"ar-EH\", \"ar-ER\", \"ar-IL\", \"ar-IQ\", \"ar-JO\", \"ar-KM\", \"ar-KW\", \"ar-LB\", \"ar-LY\", \"ar-MA\", \"ar-MR\", \"ar-OM\", \"ar-PS\", \"ar-QA\", \"ar-SA\", \"ar-SD\", \"ar-SO\", \"ar-SS\", \"ar-SY\", \"ar-TD\", \"ar-TN\", \"ar-YE\", \"as\", \"asa\", \"ast\", \"az\", \"az-Cyrl\", \"az-Latn\", \"bas\", \"be\", \"be-tarask\", \"bem\", \"bez\", \"bg\", \"bm\", \"bn\", \"bn-IN\", \"bo\", \"bo-IN\", \"br\", \"brx\", \"bs\", \"bs-Cyrl\", \"bs-Latn\", \"ca\", \"ca-AD\", \"ca-ES-valencia\", \"ca-FR\", \"ca-IT\", \"ccp\", \"ccp-IN\", \"ce\", \"ceb\", \"cgg\", \"chr\", \"ckb\", \"ckb-IR\", \"cs\", \"cy\", \"da\", \"da-GL\", \"dav\", \"de\", \"de-AT\", \"de-BE\", \"de-CH\", \"de-IT\", \"de-LI\", \"de-LU\", \"dje\", \"doi\", \"dsb\", \"dua\", \"dyo\", \"dz\", \"ebu\", \"ee\", \"ee-TG\", \"el\", \"el-CY\", \"en\", \"en-001\", \"en-150\", \"en-AE\", \"en-AG\", \"en-AI\", \"en-AS\", \"en-AT\", \"en-AU\", \"en-BB\", \"en-BE\", \"en-BI\", \"en-BM\", \"en-BS\", \"en-BW\", \"en-BZ\", \"en-CA\", \"en-CC\", \"en-CH\", \"en-CK\", \"en-CM\", \"en-CX\", \"en-CY\", \"en-DE\", \"en-DG\", \"en-DK\", \"en-DM\", \"en-ER\", \"en-FI\", \"en-FJ\", \"en-FK\", \"en-FM\", \"en-GB\", \"en-GD\", \"en-GG\", \"en-GH\", \"en-GI\", \"en-GM\", \"en-GU\", \"en-GY\", \"en-HK\", \"en-IE\", \"en-IL\", \"en-IM\", \"en-IN\", \"en-IO\", \"en-JE\", \"en-JM\", \"en-KE\", \"en-KI\", \"en-KN\", \"en-KY\", \"en-LC\", \"en-LR\", \"en-LS\", \"en-MG\", \"en-MH\", \"en-MO\", \"en-MP\", \"en-MS\", \"en-MT\", \"en-MU\", \"en-MW\", \"en-MY\", \"en-NA\", \"en-NF\", \"en-NG\", \"en-NL\", \"en-NR\", \"en-NU\", \"en-NZ\", \"en-PG\", \"en-PH\", \"en-PK\", \"en-PN\", \"en-PR\", \"en-PW\", \"en-RW\", \"en-SB\", \"en-SC\", \"en-SD\", \"en-SE\", \"en-SG\", \"en-SH\", \"en-SI\", \"en-SL\", \"en-SS\", \"en-SX\", \"en-SZ\", \"en-TC\", \"en-TK\", \"en-TO\", \"en-TT\", \"en-TV\", \"en-TZ\", \"en-UG\", \"en-UM\", \"en-VC\", \"en-VG\", \"en-VI\", \"en-VU\", \"en-WS\", \"en-ZA\", \"en-ZM\", \"en-ZW\", \"eo\", \"es\", \"es-419\", \"es-AR\", \"es-BO\", \"es-BR\", \"es-BZ\", \"es-CL\", \"es-CO\", \"es-CR\", \"es-CU\", \"es-DO\", \"es-EA\", \"es-EC\", \"es-GQ\", \"es-GT\", \"es-HN\", \"es-IC\", \"es-MX\", \"es-NI\", \"es-PA\", \"es-PE\", \"es-PH\", \"es-PR\", \"es-PY\", \"es-SV\", \"es-US\", \"es-UY\", \"es-VE\", \"et\", \"eu\", \"ewo\", \"fa\", \"fa-AF\", \"ff\", \"ff-Adlm\", \"ff-Adlm-BF\", \"ff-Adlm-CM\", \"ff-Adlm-GH\", \"ff-Adlm-GM\", \"ff-Adlm-GW\", \"ff-Adlm-LR\", \"ff-Adlm-MR\", \"ff-Adlm-NE\", \"ff-Adlm-NG\", \"ff-Adlm-SL\", \"ff-Adlm-SN\", \"ff-Latn\", \"ff-Latn-BF\", \"ff-Latn-CM\", \"ff-Latn-GH\", \"ff-Latn-GM\", \"ff-Latn-GN\", \"ff-Latn-GW\", \"ff-Latn-LR\", \"ff-Latn-MR\", \"ff-Latn-NE\", \"ff-Latn-NG\", \"ff-Latn-SL\", \"fi\", \"fil\", \"fo\", \"fo-DK\", \"fr\", \"fr-BE\", \"fr-BF\", \"fr-BI\", \"fr-BJ\", \"fr-BL\", \"fr-CA\", \"fr-CD\", \"fr-CF\", \"fr-CG\", \"fr-CH\", \"fr-CI\", \"fr-CM\", \"fr-DJ\", \"fr-DZ\", \"fr-GA\", \"fr-GF\", \"fr-GN\", \"fr-GP\", \"fr-GQ\", \"fr-HT\", \"fr-KM\", \"fr-LU\", \"fr-MA\", \"fr-MC\", \"fr-MF\", \"fr-MG\", \"fr-ML\", \"fr-MQ\", \"fr-MR\", \"fr-MU\", \"fr-NC\", \"fr-NE\", \"fr-PF\", \"fr-PM\", \"fr-RE\", \"fr-RW\", \"fr-SC\", \"fr-SN\", \"fr-SY\", \"fr-TD\", \"fr-TG\", \"fr-TN\", \"fr-VU\", \"fr-WF\", \"fr-YT\", \"fur\", \"fy\", \"ga\", \"ga-GB\", \"gd\", \"gl\", \"gsw\", \"gsw-FR\", \"gsw-LI\", \"gu\", \"guz\", \"gv\", \"ha\", \"ha-GH\", \"ha-NE\", \"haw\", \"he\", \"hi\", \"hr\", \"hr-BA\", \"hsb\", \"hu\", \"hy\", \"ia\", \"id\", \"ig\", \"ii\", \"is\", \"it\", \"it-CH\", \"it-SM\", \"it-VA\", \"ja\", \"jgo\", \"jmc\", \"jv\", \"ka\", \"kab\", \"kam\", \"kde\", \"kea\", \"kgp\", \"khq\", \"ki\", \"kk\", \"kkj\", \"kl\", \"kln\", \"km\", \"kn\", \"ko\", \"ko-KP\", \"kok\", \"ks\", \"ks-Arab\", \"ksb\", \"ksf\", \"ksh\", \"ku\", \"kw\", \"ky\", \"lag\", \"lb\", \"lg\", \"lkt\", \"ln\", \"ln-AO\", \"ln-CF\", \"ln-CG\", \"lo\", \"lrc\", \"lrc-IQ\", \"lt\", \"lu\", \"luo\", \"luy\", \"lv\", \"mai\", \"mas\", \"mas-TZ\", \"mer\", \"mfe\", \"mg\", \"mgh\", \"mgo\", \"mi\", \"mk\", \"ml\", \"mn\", \"mni\", \"mni-Beng\", \"mr\", \"ms\", \"ms-BN\", \"ms-ID\", \"ms-SG\", \"mt\", \"mua\", \"my\", \"mzn\", \"naq\", \"nb\", \"nb-SJ\", \"nd\", \"nds\", \"nds-NL\", \"ne\", \"ne-IN\", \"nl\", \"nl-AW\", \"nl-BE\", \"nl-BQ\", \"nl-CW\", \"nl-SR\", \"nl-SX\", \"nmg\", \"nn\", \"nnh\", \"no\", \"nus\", \"nyn\", \"om\", \"om-KE\", \"or\", \"os\", \"os-RU\", \"pa\", \"pa-Arab\", \"pa-Guru\", \"pcm\", \"pl\", \"ps\", \"ps-PK\", \"pt\", \"pt-AO\", \"pt-CH\", \"pt-CV\", \"pt-GQ\", \"pt-GW\", \"pt-LU\", \"pt-MO\", \"pt-MZ\", \"pt-PT\", \"pt-ST\", \"pt-TL\", \"qu\", \"qu-BO\", \"qu-EC\", \"rm\", \"rn\", \"ro\", \"ro-MD\", \"rof\", \"ru\", \"ru-BY\", \"ru-KG\", \"ru-KZ\", \"ru-MD\", \"ru-UA\", \"rw\", \"rwk\", \"sa\", \"sah\", \"saq\", \"sat\", \"sat-Olck\", \"sbp\", \"sc\", \"sd\", \"sd-Arab\", \"sd-Deva\", \"se\", \"se-FI\", \"se-SE\", \"seh\", \"ses\", \"sg\", \"shi\", \"shi-Latn\", \"shi-Tfng\", \"si\", \"sk\", \"sl\", \"smn\", \"sn\", \"so\", \"so-DJ\", \"so-ET\", \"so-KE\", \"sq\", \"sq-MK\", \"sq-XK\", \"sr\", \"sr-Cyrl\", \"sr-Cyrl-BA\", \"sr-Cyrl-ME\", \"sr-Cyrl-XK\", \"sr-Latn\", \"sr-Latn-BA\", \"sr-Latn-ME\", \"sr-Latn-XK\", \"su\", \"su-Latn\", \"sv\", \"sv-AX\", \"sv-FI\", \"sw\", \"sw-CD\", \"sw-KE\", \"sw-UG\", \"ta\", \"ta-LK\", \"ta-MY\", \"ta-SG\", \"te\", \"teo\", \"teo-KE\", \"tg\", \"th\", \"ti\", \"ti-ER\", \"tk\", \"to\", \"tr\", \"tr-CY\", \"tt\", \"twq\", \"tzm\", \"ug\", \"uk\", \"und\", \"ur\", \"ur-IN\", \"uz\", \"uz-Arab\", \"uz-Cyrl\", \"uz-Latn\", \"vai\", \"vai-Latn\", \"vai-Vaii\", \"vi\", \"vun\", \"wae\", \"wo\", \"xh\", \"xog\", \"yav\", \"yi\", \"yo\", \"yo-BJ\", \"yrl\", \"yrl-CO\", \"yrl-VE\", \"yue\", \"yue-Hans\", \"yue-Hant\", \"zgh\", \"zh\", \"zh-Hans\", \"zh-Hans-HK\", \"zh-Hans-MO\", \"zh-Hans-SG\", \"zh-Hant\", \"zh-Hant-HK\", \"zh-Hant-MO\", \"zu\"];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = shouldPolyfill;\nvar intl_localematcher_1 = require(\"@formatjs/intl-localematcher\");\nvar supported_locales_generated_1 = require(\"./supported-locales.generated\");\nfunction supportedLocalesOf(locale) {\n    if (!locale) {\n        return true;\n    }\n    var locales = Array.isArray(locale) ? locale : [locale];\n    return Intl.PluralRules.supportedLocalesOf(locales).length === locales.length;\n}\nfunction shouldPolyfill(locale) {\n    if (locale === void 0) { locale = 'en'; }\n    if (!('PluralRules' in Intl) ||\n        new Intl.PluralRules('en', { minimumFractionDigits: 2 }).select(1) ===\n            'one' ||\n        !supportedLocalesOf(locale)) {\n        return locale ? (0, intl_localematcher_1.match)([locale], supported_locales_generated_1.supportedLocales, 'en') : undefined;\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportedLocales = void 0;\nexports.supportedLocales = [\"af\", \"ak\", \"am\", \"an\", \"ar\", \"ars\", \"as\", \"asa\", \"ast\", \"az\", \"bal\", \"be\", \"bem\", \"bez\", \"bg\", \"bho\", \"bm\", \"bn\", \"bo\", \"br\", \"brx\", \"bs\", \"ca\", \"ce\", \"ceb\", \"cgg\", \"chr\", \"ckb\", \"cs\", \"cy\", \"da\", \"de\", \"doi\", \"dsb\", \"dv\", \"dz\", \"ee\", \"el\", \"en\", \"eo\", \"es\", \"et\", \"eu\", \"fa\", \"ff\", \"fi\", \"fil\", \"fo\", \"fr\", \"fur\", \"fy\", \"ga\", \"gd\", \"gl\", \"gsw\", \"gu\", \"guw\", \"gv\", \"ha\", \"haw\", \"he\", \"hi\", \"hnj\", \"hr\", \"hsb\", \"hu\", \"hy\", \"ia\", \"id\", \"ig\", \"ii\", \"io\", \"is\", \"it\", \"iu\", \"ja\", \"jbo\", \"jgo\", \"jmc\", \"jv\", \"jw\", \"ka\", \"kab\", \"kaj\", \"kcg\", \"kde\", \"kea\", \"kk\", \"kkj\", \"kl\", \"km\", \"kn\", \"ko\", \"ks\", \"ksb\", \"ksh\", \"ku\", \"kw\", \"ky\", \"lag\", \"lb\", \"lg\", \"lij\", \"lkt\", \"ln\", \"lo\", \"lt\", \"lv\", \"mas\", \"mg\", \"mgo\", \"mk\", \"ml\", \"mn\", \"mo\", \"mr\", \"ms\", \"mt\", \"my\", \"nah\", \"naq\", \"nb\", \"nd\", \"ne\", \"nl\", \"nn\", \"nnh\", \"no\", \"nqo\", \"nr\", \"nso\", \"ny\", \"nyn\", \"om\", \"or\", \"os\", \"osa\", \"pa\", \"pap\", \"pcm\", \"pl\", \"prg\", \"ps\", \"pt\", \"pt-PT\", \"rm\", \"ro\", \"rof\", \"ru\", \"rwk\", \"sah\", \"saq\", \"sat\", \"sc\", \"scn\", \"sd\", \"sdh\", \"se\", \"seh\", \"ses\", \"sg\", \"sh\", \"shi\", \"si\", \"sk\", \"sl\", \"sma\", \"smi\", \"smj\", \"smn\", \"sms\", \"sn\", \"so\", \"sq\", \"sr\", \"ss\", \"ssy\", \"st\", \"su\", \"sv\", \"sw\", \"syr\", \"ta\", \"te\", \"teo\", \"th\", \"ti\", \"tig\", \"tk\", \"tl\", \"tn\", \"to\", \"tpi\", \"tr\", \"ts\", \"tzm\", \"ug\", \"uk\", \"und\", \"ur\", \"uz\", \"ve\", \"vi\", \"vo\", \"vun\", \"wa\", \"wae\", \"wo\", \"xh\", \"xog\", \"yi\", \"yo\", \"yue\", \"zh\", \"zu\"];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = shouldPolyfill;\nvar intl_localematcher_1 = require(\"@formatjs/intl-localematcher\");\nvar supported_locales_generated_1 = require(\"./supported-locales.generated\");\nfunction supportedLocalesOf(locale) {\n    if (!locale) {\n        return true;\n    }\n    var locales = Array.isArray(locale) ? locale : [locale];\n    return (Intl.RelativeTimeFormat.supportedLocalesOf(locales).length ===\n        locales.length);\n}\nfunction hasResolvedOptionsNumberingSystem(locale) {\n    try {\n        return ('numberingSystem' in\n            new Intl.RelativeTimeFormat(locale || 'en', {\n                numeric: 'auto',\n            }).resolvedOptions());\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction shouldPolyfill(locale) {\n    if (locale === void 0) { locale = 'en'; }\n    if (!('RelativeTimeFormat' in Intl) ||\n        !supportedLocalesOf(locale) ||\n        !hasResolvedOptionsNumberingSystem(locale)) {\n        return (0, intl_localematcher_1.match)([locale], supported_locales_generated_1.supportedLocales, 'en');\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportedLocales = void 0;\nexports.supportedLocales = [\"af\", \"af-NA\", \"agq\", \"ak\", \"am\", \"ar\", \"ar-AE\", \"ar-BH\", \"ar-DJ\", \"ar-DZ\", \"ar-EG\", \"ar-EH\", \"ar-ER\", \"ar-IL\", \"ar-IQ\", \"ar-JO\", \"ar-KM\", \"ar-KW\", \"ar-LB\", \"ar-LY\", \"ar-MA\", \"ar-MR\", \"ar-OM\", \"ar-PS\", \"ar-QA\", \"ar-SA\", \"ar-SD\", \"ar-SO\", \"ar-SS\", \"ar-SY\", \"ar-TD\", \"ar-TN\", \"ar-YE\", \"as\", \"asa\", \"ast\", \"az\", \"az-Cyrl\", \"az-Latn\", \"bas\", \"be\", \"be-tarask\", \"bem\", \"bez\", \"bg\", \"bm\", \"bn\", \"bn-IN\", \"bo\", \"bo-IN\", \"br\", \"brx\", \"bs\", \"bs-Cyrl\", \"bs-Latn\", \"ca\", \"ca-AD\", \"ca-ES-valencia\", \"ca-FR\", \"ca-IT\", \"ccp\", \"ccp-IN\", \"ce\", \"ceb\", \"cgg\", \"chr\", \"ckb\", \"ckb-IR\", \"cs\", \"cy\", \"da\", \"da-GL\", \"dav\", \"de\", \"de-AT\", \"de-BE\", \"de-CH\", \"de-IT\", \"de-LI\", \"de-LU\", \"dje\", \"doi\", \"dsb\", \"dua\", \"dyo\", \"dz\", \"ebu\", \"ee\", \"ee-TG\", \"el\", \"el-CY\", \"en\", \"en-001\", \"en-150\", \"en-AE\", \"en-AG\", \"en-AI\", \"en-AS\", \"en-AT\", \"en-AU\", \"en-BB\", \"en-BE\", \"en-BI\", \"en-BM\", \"en-BS\", \"en-BW\", \"en-BZ\", \"en-CA\", \"en-CC\", \"en-CH\", \"en-CK\", \"en-CM\", \"en-CX\", \"en-CY\", \"en-DE\", \"en-DG\", \"en-DK\", \"en-DM\", \"en-ER\", \"en-FI\", \"en-FJ\", \"en-FK\", \"en-FM\", \"en-GB\", \"en-GD\", \"en-GG\", \"en-GH\", \"en-GI\", \"en-GM\", \"en-GU\", \"en-GY\", \"en-HK\", \"en-IE\", \"en-IL\", \"en-IM\", \"en-IN\", \"en-IO\", \"en-JE\", \"en-JM\", \"en-KE\", \"en-KI\", \"en-KN\", \"en-KY\", \"en-LC\", \"en-LR\", \"en-LS\", \"en-MG\", \"en-MH\", \"en-MO\", \"en-MP\", \"en-MS\", \"en-MT\", \"en-MU\", \"en-MW\", \"en-MY\", \"en-NA\", \"en-NF\", \"en-NG\", \"en-NL\", \"en-NR\", \"en-NU\", \"en-NZ\", \"en-PG\", \"en-PH\", \"en-PK\", \"en-PN\", \"en-PR\", \"en-PW\", \"en-RW\", \"en-SB\", \"en-SC\", \"en-SD\", \"en-SE\", \"en-SG\", \"en-SH\", \"en-SI\", \"en-SL\", \"en-SS\", \"en-SX\", \"en-SZ\", \"en-TC\", \"en-TK\", \"en-TO\", \"en-TT\", \"en-TV\", \"en-TZ\", \"en-UG\", \"en-UM\", \"en-VC\", \"en-VG\", \"en-VI\", \"en-VU\", \"en-WS\", \"en-ZA\", \"en-ZM\", \"en-ZW\", \"eo\", \"es\", \"es-419\", \"es-AR\", \"es-BO\", \"es-BR\", \"es-BZ\", \"es-CL\", \"es-CO\", \"es-CR\", \"es-CU\", \"es-DO\", \"es-EA\", \"es-EC\", \"es-GQ\", \"es-GT\", \"es-HN\", \"es-IC\", \"es-MX\", \"es-NI\", \"es-PA\", \"es-PE\", \"es-PH\", \"es-PR\", \"es-PY\", \"es-SV\", \"es-US\", \"es-UY\", \"es-VE\", \"et\", \"eu\", \"ewo\", \"fa\", \"fa-AF\", \"ff\", \"ff-Adlm\", \"ff-Adlm-BF\", \"ff-Adlm-CM\", \"ff-Adlm-GH\", \"ff-Adlm-GM\", \"ff-Adlm-GW\", \"ff-Adlm-LR\", \"ff-Adlm-MR\", \"ff-Adlm-NE\", \"ff-Adlm-NG\", \"ff-Adlm-SL\", \"ff-Adlm-SN\", \"ff-Latn\", \"ff-Latn-BF\", \"ff-Latn-CM\", \"ff-Latn-GH\", \"ff-Latn-GM\", \"ff-Latn-GN\", \"ff-Latn-GW\", \"ff-Latn-LR\", \"ff-Latn-MR\", \"ff-Latn-NE\", \"ff-Latn-NG\", \"ff-Latn-SL\", \"fi\", \"fil\", \"fo\", \"fo-DK\", \"fr\", \"fr-BE\", \"fr-BF\", \"fr-BI\", \"fr-BJ\", \"fr-BL\", \"fr-CA\", \"fr-CD\", \"fr-CF\", \"fr-CG\", \"fr-CH\", \"fr-CI\", \"fr-CM\", \"fr-DJ\", \"fr-DZ\", \"fr-GA\", \"fr-GF\", \"fr-GN\", \"fr-GP\", \"fr-GQ\", \"fr-HT\", \"fr-KM\", \"fr-LU\", \"fr-MA\", \"fr-MC\", \"fr-MF\", \"fr-MG\", \"fr-ML\", \"fr-MQ\", \"fr-MR\", \"fr-MU\", \"fr-NC\", \"fr-NE\", \"fr-PF\", \"fr-PM\", \"fr-RE\", \"fr-RW\", \"fr-SC\", \"fr-SN\", \"fr-SY\", \"fr-TD\", \"fr-TG\", \"fr-TN\", \"fr-VU\", \"fr-WF\", \"fr-YT\", \"fur\", \"fy\", \"ga\", \"ga-GB\", \"gd\", \"gl\", \"gsw\", \"gsw-FR\", \"gsw-LI\", \"gu\", \"guz\", \"gv\", \"ha\", \"ha-GH\", \"ha-NE\", \"haw\", \"he\", \"hi\", \"hr\", \"hr-BA\", \"hsb\", \"hu\", \"hy\", \"ia\", \"id\", \"ig\", \"ii\", \"is\", \"it\", \"it-CH\", \"it-SM\", \"it-VA\", \"ja\", \"jgo\", \"jmc\", \"jv\", \"ka\", \"kab\", \"kam\", \"kde\", \"kea\", \"kgp\", \"khq\", \"ki\", \"kk\", \"kkj\", \"kl\", \"kln\", \"km\", \"kn\", \"ko\", \"ko-KP\", \"kok\", \"ks\", \"ks-Arab\", \"ksb\", \"ksf\", \"ksh\", \"ku\", \"kw\", \"ky\", \"lag\", \"lb\", \"lg\", \"lkt\", \"ln\", \"ln-AO\", \"ln-CF\", \"ln-CG\", \"lo\", \"lrc\", \"lrc-IQ\", \"lt\", \"lu\", \"luo\", \"luy\", \"lv\", \"mai\", \"mas\", \"mas-TZ\", \"mer\", \"mfe\", \"mg\", \"mgh\", \"mgo\", \"mi\", \"mk\", \"ml\", \"mn\", \"mni\", \"mni-Beng\", \"mr\", \"ms\", \"ms-BN\", \"ms-ID\", \"ms-SG\", \"mt\", \"mua\", \"my\", \"mzn\", \"naq\", \"nb\", \"nb-SJ\", \"nd\", \"nds\", \"nds-NL\", \"ne\", \"ne-IN\", \"nl\", \"nl-AW\", \"nl-BE\", \"nl-BQ\", \"nl-CW\", \"nl-SR\", \"nl-SX\", \"nmg\", \"nn\", \"nnh\", \"no\", \"nus\", \"nyn\", \"om\", \"om-KE\", \"or\", \"os\", \"os-RU\", \"pa\", \"pa-Arab\", \"pa-Guru\", \"pcm\", \"pl\", \"ps\", \"ps-PK\", \"pt\", \"pt-AO\", \"pt-CH\", \"pt-CV\", \"pt-GQ\", \"pt-GW\", \"pt-LU\", \"pt-MO\", \"pt-MZ\", \"pt-PT\", \"pt-ST\", \"pt-TL\", \"qu\", \"qu-BO\", \"qu-EC\", \"rm\", \"rn\", \"ro\", \"ro-MD\", \"rof\", \"ru\", \"ru-BY\", \"ru-KG\", \"ru-KZ\", \"ru-MD\", \"ru-UA\", \"rw\", \"rwk\", \"sa\", \"sah\", \"saq\", \"sat\", \"sat-Olck\", \"sbp\", \"sc\", \"sd\", \"sd-Arab\", \"sd-Deva\", \"se\", \"se-FI\", \"se-SE\", \"seh\", \"ses\", \"sg\", \"shi\", \"shi-Latn\", \"shi-Tfng\", \"si\", \"sk\", \"sl\", \"smn\", \"sn\", \"so\", \"so-DJ\", \"so-ET\", \"so-KE\", \"sq\", \"sq-MK\", \"sq-XK\", \"sr\", \"sr-Cyrl\", \"sr-Cyrl-BA\", \"sr-Cyrl-ME\", \"sr-Cyrl-XK\", \"sr-Latn\", \"sr-Latn-BA\", \"sr-Latn-ME\", \"sr-Latn-XK\", \"su\", \"su-Latn\", \"sv\", \"sv-AX\", \"sv-FI\", \"sw\", \"sw-CD\", \"sw-KE\", \"sw-UG\", \"ta\", \"ta-LK\", \"ta-MY\", \"ta-SG\", \"te\", \"teo\", \"teo-KE\", \"tg\", \"th\", \"ti\", \"ti-ER\", \"tk\", \"to\", \"tr\", \"tr-CY\", \"tt\", \"twq\", \"tzm\", \"ug\", \"uk\", \"und\", \"ur\", \"ur-IN\", \"uz\", \"uz-Arab\", \"uz-Cyrl\", \"uz-Latn\", \"vai\", \"vai-Latn\", \"vai-Vaii\", \"vi\", \"vun\", \"wae\", \"wo\", \"xh\", \"xog\", \"yav\", \"yi\", \"yo\", \"yo-BJ\", \"yrl\", \"yrl-CO\", \"yrl-VE\", \"yue\", \"yue-Hans\", \"yue-Hant\", \"zgh\", \"zh\", \"zh-Hans\", \"zh-Hans-HK\", \"zh-Hans-MO\", \"zh-Hans-SG\", \"zh-Hant\", \"zh-Hant-HK\", \"zh-Hant-MO\", \"zu\"];\n",null,"export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: milliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            case 'rounding-mode-floor':\n                result.roundingMode = 'floor';\n                continue;\n            case 'rounding-mode-ceiling':\n                result.roundingMode = 'ceil';\n                continue;\n            case 'rounding-mode-down':\n                result.roundingMode = 'trunc';\n                continue;\n            case 'rounding-mode-up':\n                result.roundingMode = 'expand';\n                continue;\n            case 'rounding-mode-half-even':\n                result.roundingMode = 'halfEven';\n                continue;\n            case 'rounding-mode-half-down':\n                result.roundingMode = 'halfTrunc';\n                continue;\n            case 'rounding-mode-half-up':\n                result.roundingMode = 'halfExpand';\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"419\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AX\": [\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BI\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"BO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BY\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CL\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GT\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HN\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"K\",\n        \"h\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MG\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MT\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MV\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MX\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NI\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"RW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SV\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TH\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TJ\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TM\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VN\": [\n        \"H\",\n        \"h\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-HK\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-IL\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"en-MY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, } from '@formatjs/icu-messageformat-parser';\nimport { ErrorCode, FormatError, InvalidValueError, InvalidValueTypeError, MissingValueError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        var _this = this;\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () {\n            var _a;\n            return ({\n                locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n                    Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n            });\n        };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        if (typeof Intl.Locale === 'undefined') {\n            return;\n        }\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { __extends } from \"tslib\";\nexport var IntlErrorCode;\n(function (IntlErrorCode) {\n    IntlErrorCode[\"FORMAT_ERROR\"] = \"FORMAT_ERROR\";\n    IntlErrorCode[\"UNSUPPORTED_FORMATTER\"] = \"UNSUPPORTED_FORMATTER\";\n    IntlErrorCode[\"INVALID_CONFIG\"] = \"INVALID_CONFIG\";\n    IntlErrorCode[\"MISSING_DATA\"] = \"MISSING_DATA\";\n    IntlErrorCode[\"MISSING_TRANSLATION\"] = \"MISSING_TRANSLATION\";\n})(IntlErrorCode || (IntlErrorCode = {}));\nvar IntlError = /** @class */ (function (_super) {\n    __extends(IntlError, _super);\n    function IntlError(code, message, exception) {\n        var _this = this;\n        var err = exception\n            ? exception instanceof Error\n                ? exception\n                : new Error(String(exception))\n            : undefined;\n        _this = _super.call(this, \"[@formatjs/intl Error \".concat(code, \"] \").concat(message, \"\\n\").concat(err ? \"\\n\".concat(err.message, \"\\n\").concat(err.stack) : '')) || this;\n        _this.code = code;\n        // @ts-ignore just so we don't need to declare dep on @types/node\n        if (typeof Error.captureStackTrace === 'function') {\n            // @ts-ignore just so we don't need to declare dep on @types/node\n            Error.captureStackTrace(_this, IntlError);\n        }\n        return _this;\n    }\n    return IntlError;\n}(Error));\nexport { IntlError };\nvar UnsupportedFormatterError = /** @class */ (function (_super) {\n    __extends(UnsupportedFormatterError, _super);\n    function UnsupportedFormatterError(message, exception) {\n        return _super.call(this, IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception) || this;\n    }\n    return UnsupportedFormatterError;\n}(IntlError));\nexport { UnsupportedFormatterError };\nvar InvalidConfigError = /** @class */ (function (_super) {\n    __extends(InvalidConfigError, _super);\n    function InvalidConfigError(message, exception) {\n        return _super.call(this, IntlErrorCode.INVALID_CONFIG, message, exception) || this;\n    }\n    return InvalidConfigError;\n}(IntlError));\nexport { InvalidConfigError };\nvar MissingDataError = /** @class */ (function (_super) {\n    __extends(MissingDataError, _super);\n    function MissingDataError(message, exception) {\n        return _super.call(this, IntlErrorCode.MISSING_DATA, message, exception) || this;\n    }\n    return MissingDataError;\n}(IntlError));\nexport { MissingDataError };\nvar IntlFormatError = /** @class */ (function (_super) {\n    __extends(IntlFormatError, _super);\n    function IntlFormatError(message, locale, exception) {\n        var _this = _super.call(this, IntlErrorCode.FORMAT_ERROR, \"\".concat(message, \"\\nLocale: \").concat(locale, \"\\n\"), exception) || this;\n        _this.locale = locale;\n        return _this;\n    }\n    return IntlFormatError;\n}(IntlError));\nexport { IntlFormatError };\nvar MessageFormatError = /** @class */ (function (_super) {\n    __extends(MessageFormatError, _super);\n    function MessageFormatError(message, locale, descriptor, exception) {\n        var _this = _super.call(this, \"\".concat(message, \"\\nMessageID: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.id, \"\\nDefault Message: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.defaultMessage, \"\\nDescription: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.description, \"\\n\"), locale, exception) || this;\n        _this.descriptor = descriptor;\n        _this.locale = locale;\n        return _this;\n    }\n    return MessageFormatError;\n}(IntlFormatError));\nexport { MessageFormatError };\nvar MissingTranslationError = /** @class */ (function (_super) {\n    __extends(MissingTranslationError, _super);\n    function MissingTranslationError(descriptor, locale) {\n        var _this = _super.call(this, IntlErrorCode.MISSING_TRANSLATION, \"Missing message: \\\"\".concat(descriptor.id, \"\\\" for locale \\\"\").concat(locale, \"\\\", using \").concat(descriptor.defaultMessage\n            ? \"default message (\".concat(typeof descriptor.defaultMessage === 'string'\n                ? descriptor.defaultMessage\n                : descriptor.defaultMessage\n                    .map(function (e) { var _a; return (_a = e.value) !== null && _a !== void 0 ? _a : JSON.stringify(e); })\n                    .join(), \")\")\n            : 'id', \" as fallback.\")) || this;\n        _this.descriptor = descriptor;\n        return _this;\n    }\n    return MissingTranslationError;\n}(IntlError));\nexport { MissingTranslationError };\n","import { __assign, __spreadArray } from \"tslib\";\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { UnsupportedFormatterError } from './error';\nexport function filterProps(props, allowlist, defaults) {\n    if (defaults === void 0) { defaults = {}; }\n    return allowlist.reduce(function (filtered, name) {\n        if (name in props) {\n            filtered[name] = props[name];\n        }\n        else if (name in defaults) {\n            filtered[name] = defaults[name];\n        }\n        return filtered;\n    }, {});\n}\nvar defaultErrorHandler = function (error) {\n    // @ts-ignore just so we don't need to declare dep on @types/node\n    if (process.env.NODE_ENV !== 'production') {\n        console.error(error);\n    }\n};\nvar defaultWarnHandler = function (warning) {\n    // @ts-ignore just so we don't need to declare dep on @types/node\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn(warning);\n    }\n};\nexport var DEFAULT_INTL_CONFIG = {\n    formats: {},\n    messages: {},\n    timeZone: undefined,\n    defaultLocale: 'en',\n    defaultFormats: {},\n    fallbackOnEmptyString: true,\n    onError: defaultErrorHandler,\n    onWarn: defaultWarnHandler,\n};\nexport function createIntlCache() {\n    return {\n        dateTime: {},\n        number: {},\n        message: {},\n        relativeTime: {},\n        pluralRules: {},\n        list: {},\n        displayNames: {},\n    };\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(cache) {\n    if (cache === void 0) { cache = createIntlCache(); }\n    var RelativeTimeFormat = Intl.RelativeTimeFormat;\n    var ListFormat = Intl.ListFormat;\n    var DisplayNames = Intl.DisplayNames;\n    var getDateTimeFormat = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.dateTime),\n        strategy: strategies.variadic,\n    });\n    var getNumberFormat = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.number),\n        strategy: strategies.variadic,\n    });\n    var getPluralRules = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.pluralRules),\n        strategy: strategies.variadic,\n    });\n    return {\n        getDateTimeFormat: getDateTimeFormat,\n        getNumberFormat: getNumberFormat,\n        getMessageFormat: memoize(function (message, locales, overrideFormats, opts) {\n            return new IntlMessageFormat(message, locales, overrideFormats, __assign({ formatters: {\n                    getNumberFormat: getNumberFormat,\n                    getDateTimeFormat: getDateTimeFormat,\n                    getPluralRules: getPluralRules,\n                } }, (opts || {})));\n        }, {\n            cache: createFastMemoizeCache(cache.message),\n            strategy: strategies.variadic,\n        }),\n        getRelativeTimeFormat: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (RelativeTimeFormat.bind.apply(RelativeTimeFormat, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.relativeTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: getPluralRules,\n        getListFormat: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (ListFormat.bind.apply(ListFormat, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.list),\n            strategy: strategies.variadic,\n        }),\n        getDisplayNames: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (DisplayNames.bind.apply(DisplayNames, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.displayNames),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nexport function getNamedFormat(formats, type, name, onError) {\n    var formatType = formats && formats[type];\n    var format;\n    if (formatType) {\n        format = formatType[name];\n    }\n    if (format) {\n        return format;\n    }\n    onError(new UnsupportedFormatterError(\"No \".concat(type, \" format named: \").concat(name)));\n}\n","import { __assign } from \"tslib\";\nimport { invariant } from '@formatjs/ecma402-abstract';\nimport { IntlMessageFormat, } from 'intl-messageformat';\nimport { MissingTranslationError, MessageFormatError } from './error';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nfunction setTimeZoneInOptions(opts, timeZone) {\n    return Object.keys(opts).reduce(function (all, k) {\n        all[k] = __assign({ timeZone: timeZone }, opts[k]);\n        return all;\n    }, {});\n}\nfunction deepMergeOptions(opts1, opts2) {\n    var keys = Object.keys(__assign(__assign({}, opts1), opts2));\n    return keys.reduce(function (all, k) {\n        all[k] = __assign(__assign({}, (opts1[k] || {})), (opts2[k] || {}));\n        return all;\n    }, {});\n}\nfunction deepMergeFormatsAndSetTimeZone(f1, timeZone) {\n    if (!timeZone) {\n        return f1;\n    }\n    var mfFormats = IntlMessageFormat.formats;\n    return __assign(__assign(__assign({}, mfFormats), f1), { date: deepMergeOptions(setTimeZoneInOptions(mfFormats.date, timeZone), setTimeZoneInOptions(f1.date || {}, timeZone)), time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone)) });\n}\nexport var formatMessage = function (_a, state, messageDescriptor, values, opts) {\n    var locale = _a.locale, formats = _a.formats, messages = _a.messages, defaultLocale = _a.defaultLocale, defaultFormats = _a.defaultFormats, fallbackOnEmptyString = _a.fallbackOnEmptyString, onError = _a.onError, timeZone = _a.timeZone, defaultRichTextElements = _a.defaultRichTextElements;\n    if (messageDescriptor === void 0) { messageDescriptor = { id: '' }; }\n    var msgId = messageDescriptor.id, defaultMessage = messageDescriptor.defaultMessage;\n    // `id` is a required field of a Message Descriptor.\n    invariant(!!msgId, \"[@formatjs/intl] An `id` must be provided to format a message. You can either:\\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\\nto autofix this issue\");\n    var id = String(msgId);\n    var message = \n    // In case messages is Object.create(null)\n    // e.g import('foo.json') from webpack)\n    // See https://github.com/formatjs/formatjs/issues/1914\n    messages &&\n        Object.prototype.hasOwnProperty.call(messages, id) &&\n        messages[id];\n    // IMPORTANT: Hot path if `message` is AST with a single literal node\n    if (Array.isArray(message) &&\n        message.length === 1 &&\n        message[0].type === TYPE.literal) {\n        return message[0].value;\n    }\n    // IMPORTANT: Hot path straight lookup for performance\n    if (!values &&\n        message &&\n        typeof message === 'string' &&\n        !defaultRichTextElements) {\n        return message.replace(/'\\{(.*?)\\}'/gi, \"{$1}\");\n    }\n    values = __assign(__assign({}, defaultRichTextElements), (values || {}));\n    formats = deepMergeFormatsAndSetTimeZone(formats, timeZone);\n    defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone);\n    if (!message) {\n        if (fallbackOnEmptyString === false && message === '') {\n            return message;\n        }\n        if (!defaultMessage ||\n            (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())) {\n            // This prevents warnings from littering the console in development\n            // when no `messages` are passed into the <IntlProvider> for the\n            // default locale.\n            onError(new MissingTranslationError(messageDescriptor, locale));\n        }\n        if (defaultMessage) {\n            try {\n                var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n                return formatter.format(values);\n            }\n            catch (e) {\n                onError(new MessageFormatError(\"Error formatting default message for: \\\"\".concat(id, \"\\\", rendering default message verbatim\"), locale, messageDescriptor, e));\n                return typeof defaultMessage === 'string' ? defaultMessage : id;\n            }\n        }\n        return id;\n    }\n    // We have the translated message\n    try {\n        var formatter = state.getMessageFormat(message, locale, formats, __assign({ formatters: state }, (opts || {})));\n        return formatter.format(values);\n    }\n    catch (e) {\n        onError(new MessageFormatError(\"Error formatting message: \\\"\".concat(id, \"\\\", using \").concat(defaultMessage ? 'default message' : 'id', \" as fallback.\"), locale, messageDescriptor, e));\n    }\n    if (defaultMessage) {\n        try {\n            var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n            return formatter.format(values);\n        }\n        catch (e) {\n            onError(new MessageFormatError(\"Error formatting the default message for: \\\"\".concat(id, \"\\\", rendering message verbatim\"), locale, messageDescriptor, e));\n        }\n    }\n    if (typeof message === 'string') {\n        return message;\n    }\n    if (typeof defaultMessage === 'string') {\n        return defaultMessage;\n    }\n    return id;\n};\n","import { __spreadArray } from \"tslib\";\nimport { memoize, strategies } from '@formatjs/fast-memoize';\n/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n    // Cannot count string length via Number.toString because it may use scientific notation\n    // for very small or very large numbers.\n    return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n    if (typeof s.repeat === 'function') {\n        return s.repeat(times);\n    }\n    var arr = new Array(times);\n    for (var i = 0; i < arr.length; i++) {\n        arr[i] = s;\n    }\n    return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n    if (!map.get(pl)) {\n        map.set(pl, Object.create(null));\n    }\n    var slots = map.get(pl);\n    slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n        var k = _a[_i];\n        setInternalSlot(map, pl, k, props[k]);\n    }\n}\nexport function getInternalSlot(map, pl, field) {\n    return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n    var fields = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        fields[_i - 2] = arguments[_i];\n    }\n    var slots = map.get(pl);\n    if (!slots) {\n        throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n    }\n    return fields.reduce(function (all, f) {\n        all[f] = slots[f];\n        return all;\n    }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n    return patternPart.type === 'literal';\n}\n/*\n  17 ECMAScript Standard Built-in Objects:\n    Every built-in Function object, including constructors, that is not\n    identified as an anonymous function has a name property whose value\n    is a String.\n\n    Unless otherwise specified, the name property of a built-in Function\n    object, if it exists, has the attributes { [[Writable]]: false,\n    [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n    var value = _a.value;\n    Object.defineProperty(target, name, {\n        configurable: true,\n        enumerable: false,\n        writable: true,\n        value: value,\n    });\n}\n/**\n * 7.3.5 CreateDataProperty\n * @param target\n * @param name\n * @param value\n */\nexport function createDataProperty(target, name, value) {\n    Object.defineProperty(target, name, {\n        configurable: true,\n        enumerable: true,\n        writable: true,\n        value: value,\n    });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n    if (Err === void 0) { Err = Error; }\n    if (!condition) {\n        throw new Err(message);\n    }\n}\nexport var createMemoizedNumberFormat = memoize(function () {\n    var _a;\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n}, {\n    strategy: strategies.variadic,\n});\nexport var createMemoizedDateTimeFormat = memoize(function () {\n    var _a;\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n}, {\n    strategy: strategies.variadic,\n});\nexport var createMemoizedPluralRules = memoize(function () {\n    var _a;\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n}, {\n    strategy: strategies.variadic,\n});\nexport var createMemoizedLocale = memoize(function () {\n    var _a;\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return new ((_a = Intl.Locale).bind.apply(_a, __spreadArray([void 0], args, false)))();\n}, {\n    strategy: strategies.variadic,\n});\nexport var createMemoizedListFormat = memoize(function () {\n    var _a;\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return new ((_a = Intl.ListFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n}, {\n    strategy: strategies.variadic,\n});\n","import { __assign } from \"tslib\";\nimport { filterProps, getNamedFormat } from './utils';\nimport { IntlFormatError } from './error';\nvar DATE_TIME_FORMAT_OPTIONS = [\n    'formatMatcher',\n    'timeZone',\n    'hour12',\n    'weekday',\n    'era',\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'timeZoneName',\n    'hourCycle',\n    'dateStyle',\n    'timeStyle',\n    'calendar',\n    // 'dayPeriod',\n    'numberingSystem',\n    'fractionalSecondDigits',\n];\nexport function getFormatter(_a, type, getDateTimeFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError, timeZone = _a.timeZone;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = __assign(__assign({}, (timeZone && { timeZone: timeZone })), (format && getNamedFormat(formats, type, format, onError)));\n    var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults);\n    if (type === 'time' &&\n        !filteredOptions.hour &&\n        !filteredOptions.minute &&\n        !filteredOptions.second &&\n        !filteredOptions.timeStyle &&\n        !filteredOptions.dateStyle) {\n        // Add default formatting options if hour, minute, or second isn't defined.\n        filteredOptions = __assign(__assign({}, filteredOptions), { hour: 'numeric', minute: 'numeric' });\n    }\n    return getDateTimeFormat(locale, filteredOptions);\n}\nexport function formatDate(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'date', getDateTimeFormat, options).format(date);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n    }\n    return String(date);\n}\nexport function formatTime(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'time', getDateTimeFormat, options).format(date);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n    }\n    return String(date);\n}\nexport function formatDateTimeRange(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var from = _a[0], to = _a[1], _b = _a[2], options = _b === void 0 ? {} : _b;\n    var timeZone = config.timeZone, locale = config.locale, onError = config.onError;\n    var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, timeZone ? { timeZone: timeZone } : {});\n    try {\n        return getDateTimeFormat(locale, filteredOptions).formatRange(from, to);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting date time range.', config.locale, e));\n    }\n    return String(from);\n}\nexport function formatDateToParts(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'date', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n    }\n    return [];\n}\nexport function formatTimeToParts(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'time', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n    }\n    return [];\n}\n","import { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar DISPLAY_NAMES_OPTONS = [\n    'style',\n    'type',\n    'fallback',\n    'languageDisplay',\n];\nexport function formatDisplayName(_a, getDisplayNames, value, options) {\n    var locale = _a.locale, onError = _a.onError;\n    var DisplayNames = Intl.DisplayNames;\n    if (!DisplayNames) {\n        onError(new FormatError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, DISPLAY_NAMES_OPTONS);\n    try {\n        return getDisplayNames(locale, filteredOptions).of(value);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting display name.', locale, e));\n    }\n}\n","import { __assign } from \"tslib\";\nimport { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar LIST_FORMAT_OPTIONS = [\n    'type',\n    'style',\n];\nvar now = Date.now();\nfunction generateToken(i) {\n    return \"\".concat(now, \"_\").concat(i, \"_\").concat(now);\n}\nexport function formatList(opts, getListFormat, values, options) {\n    if (options === void 0) { options = {}; }\n    var results = formatListToParts(opts, getListFormat, values, options).reduce(function (all, el) {\n        var val = el.value;\n        if (typeof val !== 'string') {\n            all.push(val);\n        }\n        else if (typeof all[all.length - 1] === 'string') {\n            all[all.length - 1] += val;\n        }\n        else {\n            all.push(val);\n        }\n        return all;\n    }, []);\n    return results.length === 1 ? results[0] : results.length === 0 ? '' : results;\n}\nexport function formatListToParts(_a, getListFormat, values, options) {\n    var locale = _a.locale, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var ListFormat = Intl.ListFormat;\n    if (!ListFormat) {\n        onError(new FormatError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, LIST_FORMAT_OPTIONS);\n    try {\n        var richValues_1 = {};\n        var serializedValues = values.map(function (v, i) {\n            if (typeof v === 'object') {\n                var id = generateToken(i);\n                richValues_1[id] = v;\n                return id;\n            }\n            return String(v);\n        });\n        return getListFormat(locale, filteredOptions)\n            .formatToParts(serializedValues)\n            .map(function (part) {\n            return part.type === 'literal'\n                ? part\n                : __assign(__assign({}, part), { value: richValues_1[part.value] || part.value });\n        });\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting list.', locale, e));\n    }\n    // @ts-ignore\n    return values;\n}\n","import { filterProps } from './utils';\nimport { IntlFormatError } from './error';\nimport { ErrorCode, FormatError } from 'intl-messageformat';\nvar PLURAL_FORMAT_OPTIONS = ['type'];\nexport function formatPlural(_a, getPluralRules, value, options) {\n    var locale = _a.locale, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    if (!Intl.PluralRules) {\n        onError(new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n    try {\n        return getPluralRules(locale, filteredOptions).select(value);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting plural.', locale, e));\n    }\n    return 'other';\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];\nfunction getFormatter(_a, getRelativeTimeFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};\n    var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);\n    return getRelativeTimeFormat(locale, filteredOptions);\n}\nexport function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {\n    if (options === void 0) { options = {}; }\n    if (!unit) {\n        unit = 'second';\n    }\n    var RelativeTimeFormat = Intl.RelativeTimeFormat;\n    if (!RelativeTimeFormat) {\n        config.onError(new FormatError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    try {\n        return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));\n    }\n    return String(value);\n}\n","import { IntlFormatError } from './error';\nimport { filterProps, getNamedFormat } from './utils';\nvar NUMBER_FORMAT_OPTIONS = [\n    'style',\n    'currency',\n    'unit',\n    'unitDisplay',\n    'useGrouping',\n    'minimumIntegerDigits',\n    'minimumFractionDigits',\n    'maximumFractionDigits',\n    'minimumSignificantDigits',\n    'maximumSignificantDigits',\n    // ES2020 NumberFormat\n    'compactDisplay',\n    'currencyDisplay',\n    'currencySign',\n    'notation',\n    'signDisplay',\n    'unit',\n    'unitDisplay',\n    'numberingSystem',\n    // ES2023 NumberFormat\n    'trailingZeroDisplay',\n    'roundingPriority',\n    'roundingIncrement',\n    'roundingMode',\n];\nexport function getFormatter(_a, getNumberFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = ((format &&\n        getNamedFormat(formats, 'number', format, onError)) ||\n        {});\n    var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults);\n    return getNumberFormat(locale, filteredOptions);\n}\nexport function formatNumber(config, getNumberFormat, value, options) {\n    if (options === void 0) { options = {}; }\n    try {\n        return getFormatter(config, getNumberFormat, options).format(value);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n    }\n    return String(value);\n}\nexport function formatNumberToParts(config, getNumberFormat, value, options) {\n    if (options === void 0) { options = {}; }\n    try {\n        return getFormatter(config, getNumberFormat, options).formatToParts(value);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n    }\n    return [];\n}\n","import { __assign } from \"tslib\";\nimport { createFormatters, DEFAULT_INTL_CONFIG } from './utils';\nimport { InvalidConfigError, MissingDataError } from './error';\nimport { formatNumber, formatNumberToParts } from './number';\nimport { formatRelativeTime } from './relativeTime';\nimport { formatDate, formatDateToParts, formatTime, formatTimeToParts, formatDateTimeRange, } from './dateTime';\nimport { formatPlural } from './plural';\nimport { formatMessage } from './message';\nimport { formatList, formatListToParts } from './list';\nimport { formatDisplayName } from './displayName';\nfunction messagesContainString(messages) {\n    var firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined;\n    return typeof firstMessage === 'string';\n}\nfunction verifyConfigMessages(config) {\n    if (config.onWarn &&\n        config.defaultRichTextElements &&\n        messagesContainString(config.messages || {})) {\n        config.onWarn(\"[@formatjs/intl] \\\"defaultRichTextElements\\\" was specified but \\\"message\\\" was not pre-compiled. \\nPlease consider using \\\"@formatjs/cli\\\" to pre-compile your messages for performance.\\nFor more details see https://formatjs.io/docs/getting-started/message-distribution\");\n    }\n}\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl(config, cache) {\n    var formatters = createFormatters(cache);\n    var resolvedConfig = __assign(__assign({}, DEFAULT_INTL_CONFIG), config);\n    var locale = resolvedConfig.locale, defaultLocale = resolvedConfig.defaultLocale, onError = resolvedConfig.onError;\n    if (!locale) {\n        if (onError) {\n            onError(new InvalidConfigError(\"\\\"locale\\\" was not configured, using \\\"\".concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details\")));\n        }\n        // Since there's no registered locale data for `locale`, this will\n        // fallback to the `defaultLocale` to make sure things can render.\n        // The `messages` are overridden to the `defaultProps` empty object\n        // to maintain referential equality across re-renders. It's assumed\n        // each <FormattedMessage> contains a `defaultMessage` prop.\n        resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n    }\n    else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n        onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n    }\n    else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n        onError) {\n        onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n    }\n    verifyConfigMessages(resolvedConfig);\n    return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), \n        // @ts-expect-error TODO: will get to this later\n        formatMessage: formatMessage.bind(null, resolvedConfig, formatters), \n        // @ts-expect-error TODO: will get to this later\n        $t: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n","export * from './src/types';\nexport function defineMessages(msgs) {\n    return msgs;\n}\nexport function defineMessage(msg) {\n    return msg;\n}\nexport { createIntlCache, filterProps, DEFAULT_INTL_CONFIG, createFormatters, getNamedFormat, } from './src/utils';\nexport * from './src/error';\nexport { formatMessage } from './src/message';\nexport { formatDate, formatDateToParts, formatTime, formatTimeToParts, } from './src/dateTime';\nexport { formatDisplayName } from './src/displayName';\nexport { formatList } from './src/list';\nexport { formatPlural } from './src/plural';\nexport { formatRelativeTime } from './src/relativeTime';\nexport { formatNumber, formatNumberToParts } from './src/number';\nexport { createIntl } from './src/create-intl';\n","/*!\n * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2023 Fonticons, Inc.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global['free-brands-svg-icons'] = {})));\n}(this, (function (exports) { 'use strict';\n\n  var prefix = \"fab\";\n  var faMonero = {\n    prefix: 'fab',\n    iconName: 'monero',\n    icon: [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"]\n  };\n  var faHooli = {\n    prefix: 'fab',\n    iconName: 'hooli',\n    icon: [640, 512, [], \"f427\", \"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"]\n  };\n  var faYelp = {\n    prefix: 'fab',\n    iconName: 'yelp',\n    icon: [384, 512, [], \"f1e9\", \"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\"]\n  };\n  var faCcVisa = {\n    prefix: 'fab',\n    iconName: 'cc-visa',\n    icon: [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"]\n  };\n  var faLastfm = {\n    prefix: 'fab',\n    iconName: 'lastfm',\n    icon: [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"]\n  };\n  var faShopware = {\n    prefix: 'fab',\n    iconName: 'shopware',\n    icon: [512, 512, [], \"f5b5\", \"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\"]\n  };\n  var faCreativeCommonsNc = {\n    prefix: 'fab',\n    iconName: 'creative-commons-nc',\n    icon: [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"]\n  };\n  var faAws = {\n    prefix: 'fab',\n    iconName: 'aws',\n    icon: [640, 512, [], \"f375\", \"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"]\n  };\n  var faRedhat = {\n    prefix: 'fab',\n    iconName: 'redhat',\n    icon: [512, 512, [], \"f7bc\", \"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\"]\n  };\n  var faYoast = {\n    prefix: 'fab',\n    iconName: 'yoast',\n    icon: [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"]\n  };\n  var faCloudflare = {\n    prefix: 'fab',\n    iconName: 'cloudflare',\n    icon: [640, 512, [], \"e07d\", \"M407.906,319.913l-230.8-2.928a4.58,4.58,0,0,1-3.632-1.926,4.648,4.648,0,0,1-.494-4.147,6.143,6.143,0,0,1,5.361-4.076L411.281,303.9c27.631-1.26,57.546-23.574,68.022-50.784l13.286-34.542a7.944,7.944,0,0,0,.524-2.936,7.735,7.735,0,0,0-.164-1.631A151.91,151.91,0,0,0,201.257,198.4,68.12,68.12,0,0,0,94.2,269.59C41.924,271.106,0,313.728,0,366.12a96.054,96.054,0,0,0,1.029,13.958,4.508,4.508,0,0,0,4.445,3.871l426.1.051c.043,0,.08-.019.122-.02a5.606,5.606,0,0,0,5.271-4l3.273-11.265c3.9-13.4,2.448-25.8-4.1-34.9C430.124,325.423,420.09,320.487,407.906,319.913ZM513.856,221.1c-2.141,0-4.271.062-6.391.164a3.771,3.771,0,0,0-3.324,2.653l-9.077,31.193c-3.9,13.4-2.449,25.786,4.1,34.89,6.02,8.4,16.054,13.323,28.238,13.9l49.2,2.939a4.491,4.491,0,0,1,3.51,1.894,4.64,4.64,0,0,1,.514,4.169,6.153,6.153,0,0,1-5.351,4.075l-51.125,2.939c-27.754,1.27-57.669,23.574-68.145,50.784l-3.695,9.606a2.716,2.716,0,0,0,2.427,3.68c.046,0,.088.017.136.017h175.91a4.69,4.69,0,0,0,4.539-3.37,124.807,124.807,0,0,0,4.682-34C640,277.3,583.524,221.1,513.856,221.1Z\"]\n  };\n  var faUps = {\n    prefix: 'fab',\n    iconName: 'ups',\n    icon: [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"]\n  };\n  var faWpexplorer = {\n    prefix: 'fab',\n    iconName: 'wpexplorer',\n    icon: [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"]\n  };\n  var faDyalog = {\n    prefix: 'fab',\n    iconName: 'dyalog',\n    icon: [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"]\n  };\n  var faBity = {\n    prefix: 'fab',\n    iconName: 'bity',\n    icon: [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"]\n  };\n  var faStackpath = {\n    prefix: 'fab',\n    iconName: 'stackpath',\n    icon: [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\"]\n  };\n  var faBuysellads = {\n    prefix: 'fab',\n    iconName: 'buysellads',\n    icon: [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"]\n  };\n  var faFirstOrder = {\n    prefix: 'fab',\n    iconName: 'first-order',\n    icon: [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"]\n  };\n  var faModx = {\n    prefix: 'fab',\n    iconName: 'modx',\n    icon: [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"]\n  };\n  var faGuilded = {\n    prefix: 'fab',\n    iconName: 'guilded',\n    icon: [448, 512, [], \"e07e\", \"M443.427,64H4.571c0,103.26,22.192,180.06,43.418,222.358C112.046,414.135,224,448,225.256,448a312.824,312.824,0,0,0,140.55-103.477c25.907-33.923,53.1-87.19,65.916-145.761H171.833c4.14,36.429,22.177,67.946,45.1,86.944h88.589c-17.012,28.213-48.186,54.4-80.456,69.482-31.232-13.259-69.09-46.544-96.548-98.362-26.726-53.833-27.092-105.883-27.092-105.883H437.573A625.91,625.91,0,0,0,443.427,64Z\"]\n  };\n  var faVnv = {\n    prefix: 'fab',\n    iconName: 'vnv',\n    icon: [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"]\n  };\n  var faSquareJs = {\n    prefix: 'fab',\n    iconName: 'square-js',\n    icon: [448, 512, [\"js-square\"], \"f3b9\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n  };\n  var faJsSquare = faSquareJs;\n  var faMicrosoft = {\n    prefix: 'fab',\n    iconName: 'microsoft',\n    icon: [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"]\n  };\n  var faQq = {\n    prefix: 'fab',\n    iconName: 'qq',\n    icon: [448, 512, [], \"f1d6\", \"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"]\n  };\n  var faOrcid = {\n    prefix: 'fab',\n    iconName: 'orcid',\n    icon: [512, 512, [], \"f8d2\", \"M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z\"]\n  };\n  var faJava = {\n    prefix: 'fab',\n    iconName: 'java',\n    icon: [384, 512, [], \"f4e4\", \"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\"]\n  };\n  var faInvision = {\n    prefix: 'fab',\n    iconName: 'invision',\n    icon: [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"]\n  };\n  var faCreativeCommonsPdAlt = {\n    prefix: 'fab',\n    iconName: 'creative-commons-pd-alt',\n    icon: [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\"]\n  };\n  var faCentercode = {\n    prefix: 'fab',\n    iconName: 'centercode',\n    icon: [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"]\n  };\n  var faGlideG = {\n    prefix: 'fab',\n    iconName: 'glide-g',\n    icon: [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"]\n  };\n  var faDrupal = {\n    prefix: 'fab',\n    iconName: 'drupal',\n    icon: [448, 512, [], \"f1a9\", \"M303.973,108.136C268.2,72.459,234.187,38.35,224.047,0c-9.957,38.35-44.25,72.459-80.019,108.136C90.467,161.7,29.716,222.356,29.716,313.436c-2.337,107.3,82.752,196.18,190.053,198.517S415.948,429.2,418.285,321.9q.091-4.231,0-8.464C418.285,222.356,357.534,161.7,303.973,108.136Zm-174.326,223a130.282,130.282,0,0,0-15.211,24.153,4.978,4.978,0,0,1-3.319,2.766h-1.659c-4.333,0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.247-25.72-1.475-62.318-1.475-62.318h0a160.585,160.585,0,0,1,23.231-49.873A290.8,290.8,0,0,1,138.5,201.613l9.219,9.219,43.512,44.434a4.979,4.979,0,0,1,0,6.638L145.78,312.33h0Zm96.612,127.311a67.2,67.2,0,0,1-49.781-111.915c14.2-16.871,31.528-33.464,50.334-55.313,22.309,23.785,36.875,40.1,51.164,57.986a28.413,28.413,0,0,1,2.95,4.425,65.905,65.905,0,0,1,11.984,37.981,66.651,66.651,0,0,1-66.466,66.836ZM352.371,351.6h0a7.743,7.743,0,0,1-6.176,5.347H344.9a11.249,11.249,0,0,1-6.269-5.07h0a348.21,348.21,0,0,0-39.456-48.952L281.387,284.49,222.3,223.185a497.888,497.888,0,0,1-35.4-36.322,12.033,12.033,0,0,0-.922-1.382,35.4,35.4,0,0,1-4.7-9.219V174.51a31.346,31.346,0,0,1,9.218-27.656c11.432-11.431,22.955-22.954,33.833-34.939,11.984,13.275,24.8,26,37.428,38.627h0a530.991,530.991,0,0,1,69.6,79.1,147.494,147.494,0,0,1,27.011,83.8A134.109,134.109,0,0,1,352.371,351.6Z\"]\n  };\n  var faHireAHelper = {\n    prefix: 'fab',\n    iconName: 'hire-a-helper',\n    icon: [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"]\n  };\n  var faCreativeCommonsBy = {\n    prefix: 'fab',\n    iconName: 'creative-commons-by',\n    icon: [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"]\n  };\n  var faUnity = {\n    prefix: 'fab',\n    iconName: 'unity',\n    icon: [448, 512, [], \"e049\", \"M243.583 91.6027L323.695 138.384C326.575 140.026 326.68 144.583 323.695 146.225L228.503 201.854C225.623 203.55 222.22 203.444 219.549 201.854L124.357 146.225C121.425 144.636 121.373 139.973 124.357 138.384L204.417 91.6027V0L0 119.417V358.252L78.3843 312.477V218.914C78.3319 215.576 82.2066 213.192 85.0865 214.993L180.279 270.622C183.159 272.318 184.782 275.338 184.782 278.464V389.669C184.834 393.007 180.959 395.391 178.079 393.589L97.9673 346.808L19.583 392.583L224 512L428.417 392.583L350.033 346.808L269.921 393.589C267.093 395.338 263.114 393.06 263.218 389.669V278.464C263.218 275.126 265.051 272.159 267.721 270.622L362.914 214.993C365.741 213.245 369.72 215.47 369.616 218.914V312.477L448 358.252V119.417L243.583 0V91.6027Z\"]\n  };\n  var faWhmcs = {\n    prefix: 'fab',\n    iconName: 'whmcs',\n    icon: [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"]\n  };\n  var faRocketchat = {\n    prefix: 'fab',\n    iconName: 'rocketchat',\n    icon: [576, 512, [], \"f3e8\", \"M284.046,224.8a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,284.046,224.8Zm-110.45,0a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,173.6,224.8Zm220.923,0a34.114,34.114,0,1,0,34.317,34.113A34.215,34.215,0,0,0,394.519,224.8Zm153.807-55.319c-15.535-24.172-37.31-45.57-64.681-63.618-52.886-34.817-122.374-54-195.666-54a405.975,405.975,0,0,0-72.032,6.357,238.524,238.524,0,0,0-49.51-36.588C99.684-11.7,40.859.711,11.135,11.421A14.291,14.291,0,0,0,5.58,34.782C26.542,56.458,61.222,99.3,52.7,138.252c-33.142,33.9-51.112,74.776-51.112,117.337,0,43.372,17.97,84.248,51.112,118.148,8.526,38.956-26.154,81.816-47.116,103.491a14.284,14.284,0,0,0,5.555,23.34c29.724,10.709,88.549,23.147,155.324-10.2a238.679,238.679,0,0,0,49.51-36.589A405.972,405.972,0,0,0,288,460.14c73.313,0,142.8-19.159,195.667-53.975,27.371-18.049,49.145-39.426,64.679-63.619,17.309-26.923,26.07-55.916,26.07-86.125C574.394,225.4,565.634,196.43,548.326,169.485ZM284.987,409.9a345.65,345.65,0,0,1-89.446-11.5l-20.129,19.393a184.366,184.366,0,0,1-37.138,27.585,145.767,145.767,0,0,1-52.522,14.87c.983-1.771,1.881-3.563,2.842-5.356q30.258-55.68,16.325-100.078c-32.992-25.962-52.778-59.2-52.778-95.4,0-83.1,104.254-150.469,232.846-150.469s232.867,67.373,232.867,150.469C517.854,342.525,413.6,409.9,284.987,409.9Z\"]\n  };\n  var faVk = {\n    prefix: 'fab',\n    iconName: 'vk',\n    icon: [448, 512, [], \"f189\", \"M31.4907 63.4907C0 94.9813 0 145.671 0 247.04V264.96C0 366.329 0 417.019 31.4907 448.509C62.9813 480 113.671 480 215.04 480H232.96C334.329 480 385.019 480 416.509 448.509C448 417.019 448 366.329 448 264.96V247.04C448 145.671 448 94.9813 416.509 63.4907C385.019 32 334.329 32 232.96 32H215.04C113.671 32 62.9813 32 31.4907 63.4907ZM75.6 168.267H126.747C128.427 253.76 166.133 289.973 196 297.44V168.267H244.16V242C273.653 238.827 304.64 205.227 315.093 168.267H363.253C359.313 187.435 351.46 205.583 340.186 221.579C328.913 237.574 314.461 251.071 297.733 261.227C316.41 270.499 332.907 283.63 346.132 299.751C359.357 315.873 369.01 334.618 374.453 354.747H321.44C316.555 337.262 306.614 321.61 292.865 309.754C279.117 297.899 262.173 290.368 244.16 288.107V354.747H238.373C136.267 354.747 78.0267 284.747 75.6 168.267Z\"]\n  };\n  var faUntappd = {\n    prefix: 'fab',\n    iconName: 'untappd',\n    icon: [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"]\n  };\n  var faMailchimp = {\n    prefix: 'fab',\n    iconName: 'mailchimp',\n    icon: [448, 512, [], \"f59e\", \"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\"]\n  };\n  var faCss3Alt = {\n    prefix: 'fab',\n    iconName: 'css3-alt',\n    icon: [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"]\n  };\n  var faSquareReddit = {\n    prefix: 'fab',\n    iconName: 'square-reddit',\n    icon: [448, 512, [\"reddit-square\"], \"f1a2\", \"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\"]\n  };\n  var faRedditSquare = faSquareReddit;\n  var faVimeoV = {\n    prefix: 'fab',\n    iconName: 'vimeo-v',\n    icon: [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"]\n  };\n  var faContao = {\n    prefix: 'fab',\n    iconName: 'contao',\n    icon: [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"]\n  };\n  var faSquareFontAwesome = {\n    prefix: 'fab',\n    iconName: 'square-font-awesome',\n    icon: [448, 512, [], \"e5ad\", \"M384.5,32.5h-320c-35.3,0-64,28.7-64,64v320c0,35.3,28.7,64,64,64h320c35.3,0,64-28.7,64-64v-320 C448.5,61.2,419.8,32.5,384.5,32.5z M336.5,312.5c-31.6,11.2-41.2,16-59.8,16c-31.4,0-43.2-16-74.6-16c-10.2,0-18.2,1.6-25.6,4v-32 c7.4-2.2,15.4-4,25.6-4c31.2,0,43.2,16,74.6,16c10.2,0,17.8-1.4,27.8-4.6v-96c-10,3.2-17.6,4.6-27.8,4.6c-31.4,0-43.2-16-74.6-16 c-25.4,0-37.4,10.4-57.6,14.4v153.6c0,8.8-7.2,16-16,16c-8.8,0-16-7.2-16-16v-192c0-8.8,7.2-16,16-16c8.8,0,16,7.2,16,16v6.4 c20.2-4,32.2-14.4,57.6-14.4c31.2,0,43.2,16,74.6,16c18.6,0,28.2-4.8,59.8-16V312.5z\"]\n  };\n  var faDeskpro = {\n    prefix: 'fab',\n    iconName: 'deskpro',\n    icon: [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"]\n  };\n  var faSistrix = {\n    prefix: 'fab',\n    iconName: 'sistrix',\n    icon: [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"]\n  };\n  var faSquareInstagram = {\n    prefix: 'fab',\n    iconName: 'square-instagram',\n    icon: [448, 512, [\"instagram-square\"], \"e055\", \"M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z\"]\n  };\n  var faInstagramSquare = faSquareInstagram;\n  var faBattleNet = {\n    prefix: 'fab',\n    iconName: 'battle-net',\n    icon: [512, 512, [], \"f835\", \"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\"]\n  };\n  var faTheRedYeti = {\n    prefix: 'fab',\n    iconName: 'the-red-yeti',\n    icon: [512, 512, [], \"f69d\", \"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\"]\n  };\n  var faSquareHackerNews = {\n    prefix: 'fab',\n    iconName: 'square-hacker-news',\n    icon: [448, 512, [\"hacker-news-square\"], \"f3af\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"]\n  };\n  var faHackerNewsSquare = faSquareHackerNews;\n  var faEdge = {\n    prefix: 'fab',\n    iconName: 'edge',\n    icon: [512, 512, [], \"f282\", \"M120.1 37.44C161.1 12.23 207.7-.7753 255 .0016C423 .0016 512 123.8 512 219.5C511.9 252.2 499 283.4 476.1 306.7C453.2 329.9 422.1 343.2 389.4 343.7C314.2 343.7 297.9 320.6 297.9 311.7C297.9 307.9 299.1 305.5 302.7 302.3L303.7 301.1L304.1 299.5C314.6 288 320 273.3 320 257.9C320 179.2 237.8 115.2 136 115.2C98.46 114.9 61.46 124.1 28.48 142.1C55.48 84.58 111.2 44.5 119.8 38.28C120.6 37.73 120.1 37.44 120.1 37.44V37.44zM135.7 355.5C134.3 385.5 140.3 415.5 152.1 442.7C165.7 469.1 184.8 493.7 208.6 512C149.1 500.5 97.11 468.1 59.2 422.7C21.12 376.3 0 318.4 0 257.9C0 206.7 62.4 163.5 136 163.5C172.6 162.9 208.4 174.4 237.8 196.2L234.2 197.4C182.7 215 135.7 288.1 135.7 355.5V355.5zM469.8 400L469.1 400.1C457.3 418.9 443.2 435.2 426.9 449.6C396.1 477.6 358.8 495.1 318.1 499.5C299.5 499.8 281.3 496.3 264.3 488.1C238.7 477.8 217.2 458.1 202.7 435.1C188.3 411.2 181.6 383.4 183.7 355.5C183.1 335.4 189.1 315.2 198.7 297.3C212.6 330.4 236.2 358.6 266.3 378.1C296.4 397.6 331.8 407.6 367.7 406.7C398.7 407 429.8 400 457.9 386.2L459.8 385.3C463.7 383 467.5 381.4 471.4 385.3C475.9 390.2 473.2 394.5 470.2 399.3C470 399.5 469.9 399.8 469.8 400V400z\"]\n  };\n  var faNapster = {\n    prefix: 'fab',\n    iconName: 'napster',\n    icon: [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"]\n  };\n  var faSquareSnapchat = {\n    prefix: 'fab',\n    iconName: 'square-snapchat',\n    icon: [448, 512, [\"snapchat-square\"], \"f2ad\", \"M384,32H64A64,64,0,0,0,0,96V416a64,64,0,0,0,64,64H384a64,64,0,0,0,64-64V96A64,64,0,0,0,384,32Zm-3.907,319.309-.083.1a32.364,32.364,0,0,1-8.717,6.823,90.26,90.26,0,0,1-20.586,8.2,12.694,12.694,0,0,0-3.852,1.76c-2.158,1.909-2.1,4.64-4.4,8.55a23.137,23.137,0,0,1-6.84,7.471c-6.707,4.632-14.244,4.923-22.23,5.23-7.214.274-15.39.581-24.729,3.669-3.761,1.245-7.753,3.694-12.377,6.533-11.265,6.9-26.68,16.353-52.3,16.353s-40.925-9.4-52.106-16.279c-4.657-2.888-8.675-5.362-12.543-6.64-9.339-3.08-17.516-3.4-24.729-3.67-7.986-.307-15.523-.6-22.231-5.229a23.085,23.085,0,0,1-6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.428,13.428,0,0,0-4.1-1.834,89.986,89.986,0,0,1-20.313-8.127,32.905,32.905,0,0,1-8.3-6.284c-6.583-6.757-8.276-14.776-5.686-21.824,3.436-9.338,11.571-12.111,19.4-16.262,14.776-8.027,26.348-18.055,34.433-29.884a68.236,68.236,0,0,0,5.985-10.567c.789-2.158.772-3.329.241-4.416a7.386,7.386,0,0,0-2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.245a28.4,28.4,0,0,1-1.369-23.584c4.134-10.924,14.469-17.706,26.978-17.706a37.141,37.141,0,0,1,7.845.83c.689.15,1.37.307,2.042.482-.108-7.43.058-15.357.722-23.119,2.358-27.261,11.912-41.589,21.874-52.994a86.836,86.836,0,0,1,22.28-17.931C188.254,100.383,205.312,96,224,96s35.828,4.383,50.944,13.016a87.169,87.169,0,0,1,22.239,17.9c9.961,11.406,19.516,25.709,21.874,52.995a231.194,231.194,0,0,1,.713,23.118c.673-.174,1.362-.332,2.051-.481a37.131,37.131,0,0,1,7.844-.83c12.5,0,22.82,6.782,26.971,17.706a28.37,28.37,0,0,1-1.4,23.559c-2.74,5.2-7.123,9.861-13.39,14.244-1.668,1.187-4.258,2.864-7.529,4.981-1.835,1.187-4.541,2.947-7.164,4.682a6.856,6.856,0,0,0-1.951,2.034c-.506,1.046-.539,2.191.166,4.208a69.015,69.015,0,0,0,6.085,10.792c8.268,12.1,20.188,22.313,35.454,30.407,1.486.772,2.98,1.5,4.441,2.258.722.332,1.569.763,2.491,1.3,4.9,2.723,9.2,6.01,11.455,12.153C387.821,336.915,386.269,344.7,380.093,351.309Zm-16.719-18.461c-50.313-24.314-58.332-61.918-58.689-64.749-.431-3.379-.921-6.035,2.806-9.472,3.594-3.328,19.541-13.19,23.965-16.278,7.33-5.114,10.534-10.219,8.16-16.495-1.66-4.316-5.686-5.976-9.961-5.976a18.5,18.5,0,0,0-3.993.448c-8.035,1.743-15.838,5.769-20.354,6.857a7.1,7.1,0,0,1-1.66.224c-2.408,0-3.279-1.071-3.088-3.968.564-8.783,1.759-25.925.373-41.937-1.884-22.032-8.99-32.948-17.432-42.6-4.051-4.624-23.135-24.654-59.536-24.654S168.53,134.359,164.479,139c-8.434,9.654-15.531,20.57-17.432,42.6-1.386,16.013-.141,33.147.373,41.937.166,2.756-.68,3.968-3.088,3.968a7.1,7.1,0,0,1-1.66-.224c-4.507-1.087-12.31-5.113-20.346-6.856a18.494,18.494,0,0,0-3.993-.449c-4.25,0-8.3,1.636-9.961,5.977-2.374,6.276.847,11.381,8.168,16.494,4.425,3.088,20.371,12.958,23.966,16.279,3.719,3.437,3.237,6.093,2.805,9.471-.356,2.79-8.384,40.394-58.689,64.749-2.946,1.428-7.96,4.45.88,9.331,13.88,7.628,23.111,6.807,30.3,11.43,6.093,3.927,2.5,12.394,6.923,15.449,5.454,3.76,21.583-.266,42.335,6.6,17.433,5.744,28.116,22.015,58.963,22.015s41.788-16.3,58.938-21.973c20.795-6.865,36.89-2.839,42.336-6.6,4.433-3.055.822-11.522,6.923-15.448,7.181-4.624,16.411-3.8,30.3-11.472C371.36,337.355,366.346,334.333,363.374,332.848Z\"]\n  };\n  var faSnapchatSquare = faSquareSnapchat;\n  var faGooglePlusG = {\n    prefix: 'fab',\n    iconName: 'google-plus-g',\n    icon: [640, 512, [], \"f0d5\", \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"]\n  };\n  var faArtstation = {\n    prefix: 'fab',\n    iconName: 'artstation',\n    icon: [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"]\n  };\n  var faMarkdown = {\n    prefix: 'fab',\n    iconName: 'markdown',\n    icon: [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"]\n  };\n  var faSourcetree = {\n    prefix: 'fab',\n    iconName: 'sourcetree',\n    icon: [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"]\n  };\n  var faGooglePlus = {\n    prefix: 'fab',\n    iconName: 'google-plus',\n    icon: [512, 512, [], \"f2b3\", \"M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z\"]\n  };\n  var faDiaspora = {\n    prefix: 'fab',\n    iconName: 'diaspora',\n    icon: [512, 512, [], \"f791\", \"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"]\n  };\n  var faFoursquare = {\n    prefix: 'fab',\n    iconName: 'foursquare',\n    icon: [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"]\n  };\n  var faStackOverflow = {\n    prefix: 'fab',\n    iconName: 'stack-overflow',\n    icon: [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"]\n  };\n  var faGithubAlt = {\n    prefix: 'fab',\n    iconName: 'github-alt',\n    icon: [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"]\n  };\n  var faPhoenixSquadron = {\n    prefix: 'fab',\n    iconName: 'phoenix-squadron',\n    icon: [512, 512, [], \"f511\", \"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"]\n  };\n  var faPagelines = {\n    prefix: 'fab',\n    iconName: 'pagelines',\n    icon: [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"]\n  };\n  var faAlgolia = {\n    prefix: 'fab',\n    iconName: 'algolia',\n    icon: [512, 512, [], \"f36c\", \"M256 0C116.1 0 2 112.7 0 252.1C-2 393.6 112.9 510.8 254.5 511.6c43.7 .3 85.9-10.4 123.3-30.7c3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3c-26.1 11.1-54.5 16.8-83.7 16.4C139 461.9 46.5 366.8 48.3 252.4C50.1 139.5 142.6 48.2 256 48.2H463.7V417.2L345.9 312.5c-3.8-3.4-9.7-2.7-12.7 1.3c-18.9 25-49.7 40.6-83.9 38.2c-47.5-3.3-85.9-41.5-89.5-88.9c-4.2-56.6 40.6-103.9 96.3-103.9c50.4 0 91.9 38.8 96.2 88c.4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4c2.2-11.8 3-24.2 2.1-36.8c-4.9-72-63.3-130-135.4-134.4c-82.7-5.1-151.8 59.5-154 140.6c-2.1 78.9 62.6 147 141.6 148.7c33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7V9.7c0-5.4-4.4-9.7-9.7-9.7H256z\"]\n  };\n  var faRedRiver = {\n    prefix: 'fab',\n    iconName: 'red-river',\n    icon: [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"]\n  };\n  var faCreativeCommonsSa = {\n    prefix: 'fab',\n    iconName: 'creative-commons-sa',\n    icon: [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"]\n  };\n  var faSafari = {\n    prefix: 'fab',\n    iconName: 'safari',\n    icon: [512, 512, [], \"f267\", \"M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z\"]\n  };\n  var faGoogle = {\n    prefix: 'fab',\n    iconName: 'google',\n    icon: [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"]\n  };\n  var faSquareFontAwesomeStroke = {\n    prefix: 'fab',\n    iconName: 'square-font-awesome-stroke',\n    icon: [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M201.6,152c-25.4,0-37.4,10.4-57.6,14.4V160c0-8.8-7.2-16-16-16s-16,7.2-16,16v192c0,0.8,0.1,1.6,0.2,2.4 c0.1,0.4,0.1,0.8,0.2,1.2c1.6,7.1,8,12.4,15.6,12.4s14-5.3,15.6-12.4c0.1-0.4,0.2-0.8,0.2-1.2c0.1-0.8,0.2-1.6,0.2-2.4V198.4 c4-0.8,7.7-1.8,11.2-3c14.3-4.7,26-11.4,46.4-11.4c31.4,0,43.2,16,74.6,16c8.9,0,15.9-1.1,24.2-3.5c1.2-0.3,2.4-0.7,3.6-1.1v96 c-10,3.2-17.6,4.6-27.8,4.6c-31.4,0-43.4-16-74.6-16c-10.2,0-18.2,1.8-25.6,4v32c7.4-2.4,15.4-4,25.6-4c31.4,0,43.2,16,74.6,16 c18.6,0,28.2-4.8,59.8-16V152c-31.6,11.2-41.2,16-59.8,16C244.8,168,232.8,152,201.6,152z M384,32H64C28.7,32,0,60.7,0,96v320 c0,35.3,28.7,64,64,64h320c35.3,0,64-28.7,64-64V96C448,60.7,419.3,32,384,32z M416,416c0,17.6-14.4,32-32,32H64 c-17.6,0-32-14.4-32-32V96c0-17.6,14.4-32,32-32h320c17.6,0,32,14.4,32,32V416z\"]\n  };\n  var faFontAwesomeAlt = faSquareFontAwesomeStroke;\n  var faAtlassian = {\n    prefix: 'fab',\n    iconName: 'atlassian',\n    icon: [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\"]\n  };\n  var faLinkedinIn = {\n    prefix: 'fab',\n    iconName: 'linkedin-in',\n    icon: [448, 512, [], \"f0e1\", \"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"]\n  };\n  var faDigitalOcean = {\n    prefix: 'fab',\n    iconName: 'digital-ocean',\n    icon: [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"]\n  };\n  var faNimblr = {\n    prefix: 'fab',\n    iconName: 'nimblr',\n    icon: [384, 512, [], \"f5a8\", \"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\"]\n  };\n  var faChromecast = {\n    prefix: 'fab',\n    iconName: 'chromecast',\n    icon: [512, 512, [], \"f838\", \"M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z\"]\n  };\n  var faEvernote = {\n    prefix: 'fab',\n    iconName: 'evernote',\n    icon: [384, 512, [], \"f839\", \"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"]\n  };\n  var faHackerNews = {\n    prefix: 'fab',\n    iconName: 'hacker-news',\n    icon: [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"]\n  };\n  var faCreativeCommonsSampling = {\n    prefix: 'fab',\n    iconName: 'creative-commons-sampling',\n    icon: [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"]\n  };\n  var faAdversal = {\n    prefix: 'fab',\n    iconName: 'adversal',\n    icon: [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"]\n  };\n  var faCreativeCommons = {\n    prefix: 'fab',\n    iconName: 'creative-commons',\n    icon: [496, 512, [], \"f25e\", \"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"]\n  };\n  var faWatchmanMonitoring = {\n    prefix: 'fab',\n    iconName: 'watchman-monitoring',\n    icon: [512, 512, [], \"e087\", \"M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16ZM121.69,429.122C70.056,388.972,36.741,326.322,36.741,256a218.519,218.519,0,0,1,9.587-64.122l102.9-17.895-.121,10.967-13.943,2.013s-.144,12.5-.144,19.549a12.778,12.778,0,0,0,4.887,10.349l9.468,7.4Zm105.692-283.27,8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46,0,0,0-32.342,30.474-39.529,34.5-7.078,3.964-.144,9.344-.144,9.344l8.481,7.618-.048,4.369L75.982,131.045c39.644-56.938,105.532-94.3,180.018-94.3A218.754,218.754,0,0,1,420.934,111.77l-193.512,37.7Zm34.063,329.269-33.9-250.857,9.467-7.4a12.778,12.778,0,0,0,4.888-10.349c0-7.044-.144-19.549-.144-19.549l-13.943-2.013-.116-10.474,241.711,31.391A218.872,218.872,0,0,1,475.259,256C475.259,375.074,379.831,472.212,261.445,475.121Z\"]\n  };\n  var faFonticons = {\n    prefix: 'fab',\n    iconName: 'fonticons',\n    icon: [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"]\n  };\n  var faWeixin = {\n    prefix: 'fab',\n    iconName: 'weixin',\n    icon: [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"]\n  };\n  var faShirtsinbulk = {\n    prefix: 'fab',\n    iconName: 'shirtsinbulk',\n    icon: [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"]\n  };\n  var faCodepen = {\n    prefix: 'fab',\n    iconName: 'codepen',\n    icon: [512, 512, [], \"f1cb\", \"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"]\n  };\n  var faGitAlt = {\n    prefix: 'fab',\n    iconName: 'git-alt',\n    icon: [448, 512, [], \"f841\", \"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\"]\n  };\n  var faLyft = {\n    prefix: 'fab',\n    iconName: 'lyft',\n    icon: [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"]\n  };\n  var faRev = {\n    prefix: 'fab',\n    iconName: 'rev',\n    icon: [448, 512, [], \"f5b2\", \"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\"]\n  };\n  var faWindows = {\n    prefix: 'fab',\n    iconName: 'windows',\n    icon: [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"]\n  };\n  var faWizardsOfTheCoast = {\n    prefix: 'fab',\n    iconName: 'wizards-of-the-coast',\n    icon: [640, 512, [], \"f730\", \"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"]\n  };\n  var faSquareViadeo = {\n    prefix: 'fab',\n    iconName: 'square-viadeo',\n    icon: [448, 512, [\"viadeo-square\"], \"f2aa\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\"]\n  };\n  var faViadeoSquare = faSquareViadeo;\n  var faMeetup = {\n    prefix: 'fab',\n    iconName: 'meetup',\n    icon: [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"]\n  };\n  var faCentos = {\n    prefix: 'fab',\n    iconName: 'centos',\n    icon: [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"]\n  };\n  var faAdn = {\n    prefix: 'fab',\n    iconName: 'adn',\n    icon: [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"]\n  };\n  var faCloudsmith = {\n    prefix: 'fab',\n    iconName: 'cloudsmith',\n    icon: [332, 512, [], \"f384\", \"M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z\"]\n  };\n  var faPiedPiperAlt = {\n    prefix: 'fab',\n    iconName: 'pied-piper-alt',\n    icon: [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"]\n  };\n  var faSquareDribbble = {\n    prefix: 'fab',\n    iconName: 'square-dribbble',\n    icon: [448, 512, [\"dribbble-square\"], \"f397\", \"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\"]\n  };\n  var faDribbbleSquare = faSquareDribbble;\n  var faCodiepie = {\n    prefix: 'fab',\n    iconName: 'codiepie',\n    icon: [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"]\n  };\n  var faNode = {\n    prefix: 'fab',\n    iconName: 'node',\n    icon: [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"]\n  };\n  var faMix = {\n    prefix: 'fab',\n    iconName: 'mix',\n    icon: [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"]\n  };\n  var faSteam = {\n    prefix: 'fab',\n    iconName: 'steam',\n    icon: [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"]\n  };\n  var faCcApplePay = {\n    prefix: 'fab',\n    iconName: 'cc-apple-pay',\n    icon: [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"]\n  };\n  var faScribd = {\n    prefix: 'fab',\n    iconName: 'scribd',\n    icon: [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"]\n  };\n  var faOpenid = {\n    prefix: 'fab',\n    iconName: 'openid',\n    icon: [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"]\n  };\n  var faInstalod = {\n    prefix: 'fab',\n    iconName: 'instalod',\n    icon: [512, 512, [], \"e081\", \"M153.384,480H387.113L502.554,275.765,204.229,333.211ZM504.726,240.078,387.113,32H155.669L360.23,267.9ZM124.386,48.809,7.274,256,123.236,461.154,225.627,165.561Z\"]\n  };\n  var faExpeditedssl = {\n    prefix: 'fab',\n    iconName: 'expeditedssl',\n    icon: [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"]\n  };\n  var faSellcast = {\n    prefix: 'fab',\n    iconName: 'sellcast',\n    icon: [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"]\n  };\n  var faSquareTwitter = {\n    prefix: 'fab',\n    iconName: 'square-twitter',\n    icon: [448, 512, [\"twitter-square\"], \"f081\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z\"]\n  };\n  var faTwitterSquare = faSquareTwitter;\n  var faRProject = {\n    prefix: 'fab',\n    iconName: 'r-project',\n    icon: [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"]\n  };\n  var faDelicious = {\n    prefix: 'fab',\n    iconName: 'delicious',\n    icon: [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"]\n  };\n  var faFreebsd = {\n    prefix: 'fab',\n    iconName: 'freebsd',\n    icon: [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"]\n  };\n  var faVuejs = {\n    prefix: 'fab',\n    iconName: 'vuejs',\n    icon: [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"]\n  };\n  var faAccusoft = {\n    prefix: 'fab',\n    iconName: 'accusoft',\n    icon: [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"]\n  };\n  var faIoxhost = {\n    prefix: 'fab',\n    iconName: 'ioxhost',\n    icon: [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"]\n  };\n  var faFonticonsFi = {\n    prefix: 'fab',\n    iconName: 'fonticons-fi',\n    icon: [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"]\n  };\n  var faAppStore = {\n    prefix: 'fab',\n    iconName: 'app-store',\n    icon: [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"]\n  };\n  var faCcMastercard = {\n    prefix: 'fab',\n    iconName: 'cc-mastercard',\n    icon: [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"]\n  };\n  var faItunesNote = {\n    prefix: 'fab',\n    iconName: 'itunes-note',\n    icon: [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"]\n  };\n  var faGolang = {\n    prefix: 'fab',\n    iconName: 'golang',\n    icon: [640, 512, [], \"e40f\", \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"]\n  };\n  var faKickstarter = {\n    prefix: 'fab',\n    iconName: 'kickstarter',\n    icon: [448, 512, [], \"f3bb\", \"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\"]\n  };\n  var faGrav = {\n    prefix: 'fab',\n    iconName: 'grav',\n    icon: [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"]\n  };\n  var faWeibo = {\n    prefix: 'fab',\n    iconName: 'weibo',\n    icon: [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"]\n  };\n  var faUncharted = {\n    prefix: 'fab',\n    iconName: 'uncharted',\n    icon: [448, 512, [], \"e084\", \"M171.73,232.813A5.381,5.381,0,0,0,176.7,229.5,48.081,48.081,0,0,1,191.6,204.244c1.243-.828,1.657-2.484,1.657-4.141a4.22,4.22,0,0,0-2.071-3.312L74.429,128.473,148.958,85a9.941,9.941,0,0,0,4.968-8.281,9.108,9.108,0,0,0-4.968-8.281L126.6,55.6a9.748,9.748,0,0,0-9.523,0l-100.2,57.966a9.943,9.943,0,0,0-4.969,8.281V236.954a9.109,9.109,0,0,0,4.969,8.281L39.235,258.07a8.829,8.829,0,0,0,4.968,1.242,9.4,9.4,0,0,0,6.625-2.484,10.8,10.8,0,0,0,2.9-7.039V164.5L169.66,232.4A4.5,4.5,0,0,0,171.73,232.813ZM323.272,377.73a12.478,12.478,0,0,0-4.969,1.242l-74.528,43.062V287.882c0-2.9-2.9-5.8-6.211-4.555a53.036,53.036,0,0,1-28.984.414,4.86,4.86,0,0,0-6.21,4.555V421.619l-74.529-43.061a8.83,8.83,0,0,0-4.969-1.242,9.631,9.631,0,0,0-9.523,9.523v26.085a9.107,9.107,0,0,0,4.969,8.281l100.2,57.553A8.829,8.829,0,0,0,223.486,480a11.027,11.027,0,0,0,4.969-1.242l100.2-57.553a9.941,9.941,0,0,0,4.968-8.281V386.839C332.8,382.285,328.24,377.73,323.272,377.73ZM286.007,78a23,23,0,1,0-23-23A23,23,0,0,0,286.007,78Zm63.627-10.086a23,23,0,1,0,23,23A23,23,0,0,0,349.634,67.914ZM412.816,151.6a23,23,0,1,0-23-23A23,23,0,0,0,412.816,151.6Zm-63.182-9.2a23,23,0,1,0,23,23A23,23,0,0,0,349.634,142.4Zm-63.627,83.244a23,23,0,1,0-23-23A23,23,0,0,0,286.007,225.648Zm-62.074,36.358a23,23,0,1,0-23-23A23,23,0,0,0,223.933,262.006Zm188.883-82.358a23,23,0,1,0,23,23A23,23,0,0,0,412.816,179.648Zm0,72.272a23,23,0,1,0,23,23A23,23,0,0,0,412.816,251.92Z\"]\n  };\n  var faFirstdraft = {\n    prefix: 'fab',\n    iconName: 'firstdraft',\n    icon: [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"]\n  };\n  var faSquareYoutube = {\n    prefix: 'fab',\n    iconName: 'square-youtube',\n    icon: [448, 512, [61798, \"youtube-square\"], \"f431\", \"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\"]\n  };\n  var faYoutubeSquare = faSquareYoutube;\n  var faWikipediaW = {\n    prefix: 'fab',\n    iconName: 'wikipedia-w',\n    icon: [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"]\n  };\n  var faWpressr = {\n    prefix: 'fab',\n    iconName: 'wpressr',\n    icon: [496, 512, [\"rendact\"], \"f3e4\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\"]\n  };\n  var faRendact = faWpressr;\n  var faAngellist = {\n    prefix: 'fab',\n    iconName: 'angellist',\n    icon: [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"]\n  };\n  var faGalacticRepublic = {\n    prefix: 'fab',\n    iconName: 'galactic-republic',\n    icon: [496, 512, [], \"f50c\", \"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"]\n  };\n  var faNfcDirectional = {\n    prefix: 'fab',\n    iconName: 'nfc-directional',\n    icon: [512, 512, [], \"e530\", \"M211.8 488.6C213.4 491.1 213.9 494.2 213.2 497.1C212.6 500 210.8 502.6 208.3 504.2C205.7 505.8 202.7 506.3 199.7 505.7C138.3 491.8 84.1 455.8 47.53 404.5C10.97 353.2-5.395 290.3 1.57 227.7C8.536 165 38.34 107.2 85.29 65.21C132.2 23.2 193-.0131 256 0C257.5 0 258.1 .2931 260.3 .8627C261.7 1.432 262.1 2.267 264 3.319C265.1 4.371 265.9 5.619 266.5 6.993C267 8.367 267.3 9.839 267.3 11.32V112.3L291.8 86.39C292.8 85.31 294 84.44 295.4 83.84C296.7 83.23 298.2 82.9 299.7 82.86C301.2 82.81 302.6 83.06 304 83.59C305.4 84.12 306.7 84.92 307.8 85.94C308.8 86.96 309.7 88.18 310.3 89.54C310.9 90.89 311.3 92.35 311.3 93.84C311.3 95.32 311.1 96.8 310.6 98.18C310 99.57 309.2 100.8 308.2 101.9L264.2 148.5C263.1 149.6 261.9 150.5 260.5 151.1C259 151.7 257.5 152 255.1 152C254.5 152 252.9 151.7 251.5 151.1C250.1 150.5 248.8 149.6 247.8 148.5L203.7 101.9C201.7 99.74 200.6 96.83 200.7 93.84C200.7 90.84 202 87.1 204.2 85.94C206.4 83.88 209.3 82.77 212.3 82.86C215.3 82.94 218.1 84.21 220.2 86.39L244.7 112.4V22.89C188.3 25.64 134.9 48.73 94.23 87.87C53.58 127 28.49 179.6 23.61 235.8C18.73 292 34.38 348.1 67.68 393.7C100.1 439.2 149.7 471.2 204.7 483.6C207.6 484.3 210.2 486.1 211.8 488.6L211.8 488.6zM171.4 126.1C170.6 127.4 169.5 128.5 168.3 129.3C147.8 143.2 131.1 161.9 119.5 183.8C107.9 205.7 101.8 230.1 101.8 254.9C101.8 279.7 107.9 304.1 119.5 325.1C131.1 347.9 147.8 366.6 168.3 380.5C170.8 382.2 172.5 384.8 173 387.8C173.6 390.7 172.1 393.8 171.3 396.2C169.6 398.7 166.1 400.4 164 400.1C161.1 401.5 158 400.9 155.6 399.2C132 383.2 112.8 361.7 99.46 336.5C86.15 311.4 79.19 283.4 79.19 254.9C79.19 226.5 86.15 198.4 99.46 173.3C112.8 148.1 132 126.6 155.6 110.6C156.8 109.8 158.2 109.2 159.6 108.8C161.1 108.5 162.6 108.5 164.1 108.8C165.5 109 166.9 109.6 168.2 110.4C169.5 111.2 170.5 112.3 171.4 113.5C172.2 114.7 172.8 116.1 173.1 117.6C173.4 119.1 173.4 120.6 173.1 122C172.8 123.5 172.3 124.9 171.4 126.1H171.4zM340.9 383.5C341.7 382.3 342.8 381.2 343.1 380.4V380.3C364.4 366.3 381.1 347.6 392.7 325.7C404.2 303.9 410.2 279.5 410.2 254.8C410.2 230.1 404.2 205.7 392.7 183.8C381.1 161.1 364.4 143.3 343.1 129.3C342.8 128.5 341.7 127.4 340.9 126.2C340.1 124.9 339.5 123.5 339.3 122.1C338.1 120.6 339 119.1 339.3 117.7C339.6 116.2 340.2 114.8 341 113.6C341.9 112.4 342.1 111.3 344.2 110.5C345.4 109.7 346.8 109.2 348.3 108.9C349.8 108.6 351.2 108.6 352.7 108.9C354.2 109.2 355.5 109.8 356.8 110.7C380.2 126.7 399.5 148.2 412.7 173.3C426 198.4 432.1 226.4 432.1 254.8C432.1 283.3 426 311.3 412.7 336.4C399.5 361.5 380.2 383 356.8 399C355.5 399.9 354.2 400.5 352.7 400.8C351.2 401.1 349.8 401.1 348.3 400.8C346.8 400.5 345.4 399.1 344.2 399.2C342.1 398.4 341.9 397.3 341 396.1C340.2 394.9 339.6 393.5 339.3 392C339 390.6 338.1 389.1 339.3 387.6C339.5 386.2 340.1 384.8 340.9 383.5V383.5zM312.3 6.307C368.5 19.04 418.7 50.28 455 95.01C485.4 132.6 504.6 178 510.3 226C515.9 274 507.9 322.7 487.1 366.3C466.2 409.9 433.5 446.8 392.6 472.6C351.7 498.3 304.4 512 256 512C254.5 512 253.1 511.7 251.7 511.1C250.3 510.6 249.1 509.7 248 508.7C246.1 507.6 246.1 506.4 245.6 505C245 503.6 244.7 502.2 244.7 500.7V401.5L220.2 427.5C218.1 429.7 215.3 430.1 212.3 431.1C209.3 431.2 206.4 430 204.2 427.1C202 425.9 200.7 423.1 200.7 420.1C200.6 417.1 201.7 414.2 203.7 412L247.8 365.4C249.1 363.2 252.9 362 255.1 362C259.1 362 262 363.2 264.2 365.4L308.2 412C310.3 414.2 311.4 417.1 311.3 420.1C311.2 423.1 309.9 425.9 307.8 427.1C305.6 430 302.7 431.2 299.7 431.1C296.7 430.1 293.8 429.7 291.8 427.5L267.3 401.6V489.1C323.7 486.3 377.1 463.3 417.8 424.1C458.5 384.1 483.6 332.4 488.5 276.2C493.3 219.1 477.7 163.9 444.4 118.3C411.1 72.75 362.4 40.79 307.4 28.36C305.9 28.03 304.6 27.42 303.3 26.57C302.1 25.71 301.1 24.63 300.3 23.37C299.5 22.12 298.1 20.72 298.7 19.26C298.5 17.8 298.5 16.3 298.8 14.85C299.2 13.41 299.8 12.04 300.6 10.82C301.5 9.61 302.6 8.577 303.8 7.784C305.1 6.99 306.5 6.451 307.9 6.198C309.4 5.945 310.9 5.982 312.3 6.307L312.3 6.307zM353.1 256.1C353.1 287.5 335.6 317.2 303.8 339.6C301.7 341.1 299 341.9 296.4 341.6C293.7 341.4 291.2 340.3 289.4 338.4L219.3 268.6C217.1 266.5 215.1 263.6 215.9 260.6C215.9 257.6 217.1 254.7 219.2 252.6C221.4 250.5 224.2 249.3 227.2 249.3C230.2 249.3 233.1 250.5 235.2 252.6L298.3 315.4C319.1 298.3 330.5 277.5 330.5 256.1C330.5 232.2 316.4 209.1 290.8 191C288.3 189.3 286.7 186.7 286.2 183.7C285.7 180.8 286.3 177.7 288.1 175.3C289.8 172.8 292.4 171.2 295.4 170.7C298.3 170.2 301.4 170.8 303.8 172.6C335.6 195 353.1 224.7 353.1 256.1V256.1zM216.7 341.5C213.7 342 210.7 341.3 208.2 339.6C176.5 317.2 158.1 287.5 158.1 256.1C158.1 224.7 176.5 195 208.2 172.6C210.4 171 213.1 170.3 215.7 170.5C218.4 170.8 220.8 171.9 222.7 173.8L292.8 243.6C294.9 245.7 296.1 248.6 296.1 251.6C296.1 254.6 294.1 257.4 292.8 259.6C290.7 261.7 287.8 262.9 284.9 262.9C281.9 262.9 278.1 261.7 276.9 259.6L213.8 196.7C192.9 214 181.6 234.7 181.6 256.1C181.6 279.1 195.7 303.1 221.3 321.1C223.7 322.9 225.4 325.5 225.9 328.5C226.4 331.4 225.7 334.4 224 336.9C222.3 339.3 219.6 341 216.7 341.5L216.7 341.5z\"]\n  };\n  var faSkype = {\n    prefix: 'fab',\n    iconName: 'skype',\n    icon: [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"]\n  };\n  var faJoget = {\n    prefix: 'fab',\n    iconName: 'joget',\n    icon: [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"]\n  };\n  var faFedora = {\n    prefix: 'fab',\n    iconName: 'fedora',\n    icon: [448, 512, [], \"f798\", \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"]\n  };\n  var faStripeS = {\n    prefix: 'fab',\n    iconName: 'stripe-s',\n    icon: [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"]\n  };\n  var faMeta = {\n    prefix: 'fab',\n    iconName: 'meta',\n    icon: [640, 512, [], \"e49b\", \"M640 317.9C640 409.2 600.6 466.4 529.7 466.4C467.1 466.4 433.9 431.8 372.8 329.8L341.4 277.2C333.1 264.7 326.9 253 320.2 242.2C300.1 276 273.1 325.2 273.1 325.2C206.1 441.8 168.5 466.4 116.2 466.4C43.42 466.4 0 409.1 0 320.5C0 177.5 79.78 42.4 183.9 42.4C234.1 42.4 277.7 67.08 328.7 131.9C365.8 81.8 406.8 42.4 459.3 42.4C558.4 42.4 640 168.1 640 317.9H640zM287.4 192.2C244.5 130.1 216.5 111.7 183 111.7C121.1 111.7 69.22 217.8 69.22 321.7C69.22 370.2 87.7 397.4 118.8 397.4C149 397.4 167.8 378.4 222 293.6C222 293.6 246.7 254.5 287.4 192.2V192.2zM531.2 397.4C563.4 397.4 578.1 369.9 578.1 322.5C578.1 198.3 523.8 97.08 454.9 97.08C421.7 97.08 393.8 123 360 175.1C369.4 188.9 379.1 204.1 389.3 220.5L426.8 282.9C485.5 377 500.3 397.4 531.2 397.4L531.2 397.4z\"]\n  };\n  var faLaravel = {\n    prefix: 'fab',\n    iconName: 'laravel',\n    icon: [512, 512, [], \"f3bd\", \"M504.4,115.83a5.72,5.72,0,0,0-.28-.68,8.52,8.52,0,0,0-.53-1.25,6,6,0,0,0-.54-.71,9.36,9.36,0,0,0-.72-.94c-.23-.22-.52-.4-.77-.6a8.84,8.84,0,0,0-.9-.68L404.4,55.55a8,8,0,0,0-8,0L300.12,111h0a8.07,8.07,0,0,0-.88.69,7.68,7.68,0,0,0-.78.6,8.23,8.23,0,0,0-.72.93c-.17.24-.39.45-.54.71a9.7,9.7,0,0,0-.52,1.25c-.08.23-.21.44-.28.68a8.08,8.08,0,0,0-.28,2.08V223.18l-80.22,46.19V63.44a7.8,7.8,0,0,0-.28-2.09c-.06-.24-.2-.45-.28-.68a8.35,8.35,0,0,0-.52-1.24c-.14-.26-.37-.47-.54-.72a9.36,9.36,0,0,0-.72-.94,9.46,9.46,0,0,0-.78-.6,9.8,9.8,0,0,0-.88-.68h0L115.61,1.07a8,8,0,0,0-8,0L11.34,56.49h0a6.52,6.52,0,0,0-.88.69,7.81,7.81,0,0,0-.79.6,8.15,8.15,0,0,0-.71.93c-.18.25-.4.46-.55.72a7.88,7.88,0,0,0-.51,1.24,6.46,6.46,0,0,0-.29.67,8.18,8.18,0,0,0-.28,2.1v329.7a8,8,0,0,0,4,6.95l192.5,110.84a8.83,8.83,0,0,0,1.33.54c.21.08.41.2.63.26a7.92,7.92,0,0,0,4.1,0c.2-.05.37-.16.55-.22a8.6,8.6,0,0,0,1.4-.58L404.4,400.09a8,8,0,0,0,4-6.95V287.88l92.24-53.11a8,8,0,0,0,4-7V117.92A8.63,8.63,0,0,0,504.4,115.83ZM111.6,17.28h0l80.19,46.15-80.2,46.18L31.41,63.44Zm88.25,60V278.6l-46.53,26.79-33.69,19.4V123.5l46.53-26.79Zm0,412.78L23.37,388.5V77.32L57.06,96.7l46.52,26.8V338.68a6.94,6.94,0,0,0,.12.9,8,8,0,0,0,.16,1.18h0a5.92,5.92,0,0,0,.38.9,6.38,6.38,0,0,0,.42,1v0a8.54,8.54,0,0,0,.6.78,7.62,7.62,0,0,0,.66.84l0,0c.23.22.52.38.77.58a8.93,8.93,0,0,0,.86.66l0,0,0,0,92.19,52.18Zm8-106.17-80.06-45.32,84.09-48.41,92.26-53.11,80.13,46.13-58.8,33.56Zm184.52,4.57L215.88,490.11V397.8L346.6,323.2l45.77-26.15Zm0-119.13L358.68,250l-46.53-26.79V131.79l33.69,19.4L392.37,178Zm8-105.28-80.2-46.17,80.2-46.16,80.18,46.15Zm8,105.28V178L455,151.19l33.68-19.4v91.39h0Z\"]\n  };\n  var faHotjar = {\n    prefix: 'fab',\n    iconName: 'hotjar',\n    icon: [448, 512, [], \"f3b1\", \"M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z\"]\n  };\n  var faBluetoothB = {\n    prefix: 'fab',\n    iconName: 'bluetooth-b',\n    icon: [320, 512, [], \"f294\", \"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"]\n  };\n  var faStickerMule = {\n    prefix: 'fab',\n    iconName: 'sticker-mule',\n    icon: [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"]\n  };\n  var faCreativeCommonsZero = {\n    prefix: 'fab',\n    iconName: 'creative-commons-zero',\n    icon: [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"]\n  };\n  var faHips = {\n    prefix: 'fab',\n    iconName: 'hips',\n    icon: [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"]\n  };\n  var faBehance = {\n    prefix: 'fab',\n    iconName: 'behance',\n    icon: [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"]\n  };\n  var faReddit = {\n    prefix: 'fab',\n    iconName: 'reddit',\n    icon: [512, 512, [], \"f1a1\", \"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\"]\n  };\n  var faDiscord = {\n    prefix: 'fab',\n    iconName: 'discord',\n    icon: [640, 512, [], \"f392\", \"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z\"]\n  };\n  var faChrome = {\n    prefix: 'fab',\n    iconName: 'chrome',\n    icon: [512, 512, [], \"f268\", \"M0 256C0 209.4 12.47 165.6 34.27 127.1L144.1 318.3C166 357.5 207.9 384 256 384C270.3 384 283.1 381.7 296.8 377.4L220.5 509.6C95.9 492.3 0 385.3 0 256zM365.1 321.6C377.4 302.4 384 279.1 384 256C384 217.8 367.2 183.5 340.7 160H493.4C505.4 189.6 512 222.1 512 256C512 397.4 397.4 511.1 256 512L365.1 321.6zM477.8 128H256C193.1 128 142.3 172.1 130.5 230.7L54.19 98.47C101 38.53 174 0 256 0C350.8 0 433.5 51.48 477.8 128V128zM168 256C168 207.4 207.4 168 256 168C304.6 168 344 207.4 344 256C344 304.6 304.6 344 256 344C207.4 344 168 304.6 168 256z\"]\n  };\n  var faAppStoreIos = {\n    prefix: 'fab',\n    iconName: 'app-store-ios',\n    icon: [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"]\n  };\n  var faCcDiscover = {\n    prefix: 'fab',\n    iconName: 'cc-discover',\n    icon: [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"]\n  };\n  var faWpbeginner = {\n    prefix: 'fab',\n    iconName: 'wpbeginner',\n    icon: [512, 512, [], \"f297\", \"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"]\n  };\n  var faConfluence = {\n    prefix: 'fab',\n    iconName: 'confluence',\n    icon: [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"]\n  };\n  var faMdb = {\n    prefix: 'fab',\n    iconName: 'mdb',\n    icon: [576, 512, [], \"f8ca\", \"M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"]\n  };\n  var faDochub = {\n    prefix: 'fab',\n    iconName: 'dochub',\n    icon: [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"]\n  };\n  var faAccessibleIcon = {\n    prefix: 'fab',\n    iconName: 'accessible-icon',\n    icon: [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"]\n  };\n  var faEbay = {\n    prefix: 'fab',\n    iconName: 'ebay',\n    icon: [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"]\n  };\n  var faAmazon = {\n    prefix: 'fab',\n    iconName: 'amazon',\n    icon: [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"]\n  };\n  var faUnsplash = {\n    prefix: 'fab',\n    iconName: 'unsplash',\n    icon: [448, 512, [], \"e07c\", \"M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z\"]\n  };\n  var faYarn = {\n    prefix: 'fab',\n    iconName: 'yarn',\n    icon: [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"]\n  };\n  var faSquareSteam = {\n    prefix: 'fab',\n    iconName: 'square-steam',\n    icon: [448, 512, [\"steam-square\"], \"f1b7\", \"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\"]\n  };\n  var faSteamSquare = faSquareSteam;\n  var fa500px = {\n    prefix: 'fab',\n    iconName: '500px',\n    icon: [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"]\n  };\n  var faSquareVimeo = {\n    prefix: 'fab',\n    iconName: 'square-vimeo',\n    icon: [448, 512, [\"vimeo-square\"], \"f194\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\"]\n  };\n  var faVimeoSquare = faSquareVimeo;\n  var faAsymmetrik = {\n    prefix: 'fab',\n    iconName: 'asymmetrik',\n    icon: [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"]\n  };\n  var faFontAwesome = {\n    prefix: 'fab',\n    iconName: 'font-awesome',\n    icon: [448, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384C385 407 366 416 329 416C266 416 242 384 179 384C159 384 143 388 128 392V328C143 324 159 320 179 320C242 320 266 352 329 352C349 352 364 349 384 343V135C364 141 349 144 329 144C266 144 242 112 179 112C128 112 104 133 64 141V448C64 466 50 480 32 480S0 466 0 448V64C0 46 14 32 32 32S64 46 64 64V77C104 69 128 48 179 48C242 48 266 80 329 80C366 80 385 71 448 48Z\"]\n  };\n  var faFontAwesomeFlag = faFontAwesome;\n  var faFontAwesomeLogoFull = faFontAwesome;\n  var faGratipay = {\n    prefix: 'fab',\n    iconName: 'gratipay',\n    icon: [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"]\n  };\n  var faApple = {\n    prefix: 'fab',\n    iconName: 'apple',\n    icon: [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"]\n  };\n  var faHive = {\n    prefix: 'fab',\n    iconName: 'hive',\n    icon: [512, 512, [], \"e07f\", \"M260.353,254.878,131.538,33.1a2.208,2.208,0,0,0-3.829.009L.3,254.887A2.234,2.234,0,0,0,.3,257.122L129.116,478.9a2.208,2.208,0,0,0,3.83-.009L260.358,257.113A2.239,2.239,0,0,0,260.353,254.878Zm39.078-25.713a2.19,2.19,0,0,0,1.9,1.111h66.509a2.226,2.226,0,0,0,1.9-3.341L259.115,33.111a2.187,2.187,0,0,0-1.9-1.111H190.707a2.226,2.226,0,0,0-1.9,3.341ZM511.7,254.886,384.9,33.112A2.2,2.2,0,0,0,382.99,32h-66.6a2.226,2.226,0,0,0-1.906,3.34L440.652,256,314.481,476.66a2.226,2.226,0,0,0,1.906,3.34h66.6a2.2,2.2,0,0,0,1.906-1.112L511.7,257.114A2.243,2.243,0,0,0,511.7,254.886ZM366.016,284.917H299.508a2.187,2.187,0,0,0-1.9,1.111l-108.8,190.631a2.226,2.226,0,0,0,1.9,3.341h66.509a2.187,2.187,0,0,0,1.9-1.111l108.8-190.631A2.226,2.226,0,0,0,366.016,284.917Z\"]\n  };\n  var faGitkraken = {\n    prefix: 'fab',\n    iconName: 'gitkraken',\n    icon: [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"]\n  };\n  var faKeybase = {\n    prefix: 'fab',\n    iconName: 'keybase',\n    icon: [448, 512, [], \"f4f5\", \"M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z\"]\n  };\n  var faApplePay = {\n    prefix: 'fab',\n    iconName: 'apple-pay',\n    icon: [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"]\n  };\n  var faPadlet = {\n    prefix: 'fab',\n    iconName: 'padlet',\n    icon: [640, 512, [], \"e4a0\", \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"]\n  };\n  var faAmazonPay = {\n    prefix: 'fab',\n    iconName: 'amazon-pay',\n    icon: [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"]\n  };\n  var faSquareGithub = {\n    prefix: 'fab',\n    iconName: 'square-github',\n    icon: [448, 512, [\"github-square\"], \"f092\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z\"]\n  };\n  var faGithubSquare = faSquareGithub;\n  var faStumbleupon = {\n    prefix: 'fab',\n    iconName: 'stumbleupon',\n    icon: [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"]\n  };\n  var faFedex = {\n    prefix: 'fab',\n    iconName: 'fedex',\n    icon: [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"]\n  };\n  var faPhoenixFramework = {\n    prefix: 'fab',\n    iconName: 'phoenix-framework',\n    icon: [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"]\n  };\n  var faShopify = {\n    prefix: 'fab',\n    iconName: 'shopify',\n    icon: [448, 512, [], \"e057\", \"M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z\"]\n  };\n  var faNeos = {\n    prefix: 'fab',\n    iconName: 'neos',\n    icon: [512, 512, [], \"f612\", \"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\"]\n  };\n  var faHackerrank = {\n    prefix: 'fab',\n    iconName: 'hackerrank',\n    icon: [512, 512, [], \"f5f7\", \"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"]\n  };\n  var faResearchgate = {\n    prefix: 'fab',\n    iconName: 'researchgate',\n    icon: [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"]\n  };\n  var faSwift = {\n    prefix: 'fab',\n    iconName: 'swift',\n    icon: [448, 512, [], \"f8e1\", \"M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"]\n  };\n  var faAngular = {\n    prefix: 'fab',\n    iconName: 'angular',\n    icon: [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"]\n  };\n  var faSpeakap = {\n    prefix: 'fab',\n    iconName: 'speakap',\n    icon: [448, 512, [], \"f3f3\", \"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\"]\n  };\n  var faAngrycreative = {\n    prefix: 'fab',\n    iconName: 'angrycreative',\n    icon: [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"]\n  };\n  var faYCombinator = {\n    prefix: 'fab',\n    iconName: 'y-combinator',\n    icon: [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"]\n  };\n  var faEmpire = {\n    prefix: 'fab',\n    iconName: 'empire',\n    icon: [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"]\n  };\n  var faEnvira = {\n    prefix: 'fab',\n    iconName: 'envira',\n    icon: [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"]\n  };\n  var faSquareGitlab = {\n    prefix: 'fab',\n    iconName: 'square-gitlab',\n    icon: [448, 512, [\"gitlab-square\"], \"e5ae\", \"M48 32H400C426.5 32 448 53.5 448 80V432C448 458.5 426.5 480 400 480H48C21.5 480 0 458.5 0 432V80C0 53.5 21.5 32 48 32zM382.1 224.9L337.5 108.5C336.6 106.2 334.9 104.2 332.9 102.9C331.3 101.9 329.5 101.3 327.7 101.1C325.9 100.9 324 101.2 322.3 101.8C320.6 102.5 319 103.5 317.8 104.9C316.6 106.3 315.7 107.9 315.2 109.7L285 201.9H162.1L132.9 109.7C132.4 107.9 131.4 106.3 130.2 104.9C128.1 103.6 127.4 102.5 125.7 101.9C123.1 101.2 122.1 100.1 120.3 101.1C118.5 101.3 116.7 101.9 115.1 102.9C113.1 104.2 111.5 106.2 110.6 108.5L65.94 224.9L65.47 226.1C59.05 242.9 58.26 261.3 63.22 278.6C68.18 295.9 78.62 311.1 92.97 321.9L93.14 322L93.52 322.3L161.4 373.2L215.6 414.1C217.1 415.1 220.9 416.9 223.9 416.9C226.9 416.9 229.9 415.1 232.3 414.1L286.4 373.2L354.8 322L355 321.9C369.4 311 379.8 295.8 384.8 278.6C389.7 261.3 388.1 242.9 382.5 226.1L382.1 224.9z\"]\n  };\n  var faGitlabSquare = faSquareGitlab;\n  var faStudiovinari = {\n    prefix: 'fab',\n    iconName: 'studiovinari',\n    icon: [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"]\n  };\n  var faPiedPiper = {\n    prefix: 'fab',\n    iconName: 'pied-piper',\n    icon: [480, 512, [], \"f2ae\", \"M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z\"]\n  };\n  var faWordpress = {\n    prefix: 'fab',\n    iconName: 'wordpress',\n    icon: [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"]\n  };\n  var faProductHunt = {\n    prefix: 'fab',\n    iconName: 'product-hunt',\n    icon: [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"]\n  };\n  var faFirefox = {\n    prefix: 'fab',\n    iconName: 'firefox',\n    icon: [512, 512, [], \"f269\", \"M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z\"]\n  };\n  var faLinode = {\n    prefix: 'fab',\n    iconName: 'linode',\n    icon: [448, 512, [], \"f2b8\", \"M366.036,186.867l-59.5,36.871-.838,36.871-29.329-19.273-39.384,24.3c2.238,55.211,2.483,59.271,2.51,59.5l-97.2,65.359L127.214,285.748l108.1-62.01L195.09,197.761l-75.417,38.547L98.723,93.015,227.771,43.574,136.432,0,10.737,39.385,38.39,174.3l41.9,32.681L48.445,222.062,69.394,323.457,98.723,351.11,77.774,363.679l16.76,78.769L160.733,512c-10.8-74.842-11.658-78.641-11.725-78.773l77.925-55.3c16.759-12.57,15.083-10.894,15.083-10.894l.838,24.3,33.519,28.491-.838-77.093,46.927-33.519,26.815-18.435-2.514,36.033,25.139,17.6,6.7-74.579,58.657-43.575Z\"]\n  };\n  var faGoodreads = {\n    prefix: 'fab',\n    iconName: 'goodreads',\n    icon: [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"]\n  };\n  var faSquareOdnoklassniki = {\n    prefix: 'fab',\n    iconName: 'square-odnoklassniki',\n    icon: [448, 512, [\"odnoklassniki-square\"], \"f264\", \"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\"]\n  };\n  var faOdnoklassnikiSquare = faSquareOdnoklassniki;\n  var faJsfiddle = {\n    prefix: 'fab',\n    iconName: 'jsfiddle',\n    icon: [576, 512, [], \"f1cc\", \"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"]\n  };\n  var faSith = {\n    prefix: 'fab',\n    iconName: 'sith',\n    icon: [448, 512, [], \"f512\", \"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"]\n  };\n  var faThemeisle = {\n    prefix: 'fab',\n    iconName: 'themeisle',\n    icon: [512, 512, [], \"f2b2\", \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"]\n  };\n  var faPage4 = {\n    prefix: 'fab',\n    iconName: 'page4',\n    icon: [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"]\n  };\n  var faHashnode = {\n    prefix: 'fab',\n    iconName: 'hashnode',\n    icon: [512, 512, [], \"e499\", \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"]\n  };\n  var faReact = {\n    prefix: 'fab',\n    iconName: 'react',\n    icon: [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"]\n  };\n  var faCcPaypal = {\n    prefix: 'fab',\n    iconName: 'cc-paypal',\n    icon: [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"]\n  };\n  var faSquarespace = {\n    prefix: 'fab',\n    iconName: 'squarespace',\n    icon: [512, 512, [], \"f5be\", \"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"]\n  };\n  var faCcStripe = {\n    prefix: 'fab',\n    iconName: 'cc-stripe',\n    icon: [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"]\n  };\n  var faCreativeCommonsShare = {\n    prefix: 'fab',\n    iconName: 'creative-commons-share',\n    icon: [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"]\n  };\n  var faBitcoin = {\n    prefix: 'fab',\n    iconName: 'bitcoin',\n    icon: [512, 512, [], \"f379\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"]\n  };\n  var faKeycdn = {\n    prefix: 'fab',\n    iconName: 'keycdn',\n    icon: [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"]\n  };\n  var faOpera = {\n    prefix: 'fab',\n    iconName: 'opera',\n    icon: [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"]\n  };\n  var faItchIo = {\n    prefix: 'fab',\n    iconName: 'itch-io',\n    icon: [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"]\n  };\n  var faUmbraco = {\n    prefix: 'fab',\n    iconName: 'umbraco',\n    icon: [510, 512, [], \"f8e8\", \"M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z\"]\n  };\n  var faGalacticSenate = {\n    prefix: 'fab',\n    iconName: 'galactic-senate',\n    icon: [512, 512, [], \"f50d\", \"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"]\n  };\n  var faUbuntu = {\n    prefix: 'fab',\n    iconName: 'ubuntu',\n    icon: [496, 512, [], \"f7df\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1.7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z\"]\n  };\n  var faDraft2digital = {\n    prefix: 'fab',\n    iconName: 'draft2digital',\n    icon: [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"]\n  };\n  var faStripe = {\n    prefix: 'fab',\n    iconName: 'stripe',\n    icon: [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"]\n  };\n  var faHouzz = {\n    prefix: 'fab',\n    iconName: 'houzz',\n    icon: [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"]\n  };\n  var faGg = {\n    prefix: 'fab',\n    iconName: 'gg',\n    icon: [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"]\n  };\n  var faDhl = {\n    prefix: 'fab',\n    iconName: 'dhl',\n    icon: [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"]\n  };\n  var faSquarePinterest = {\n    prefix: 'fab',\n    iconName: 'square-pinterest',\n    icon: [448, 512, [\"pinterest-square\"], \"f0d3\", \"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"]\n  };\n  var faPinterestSquare = faSquarePinterest;\n  var faXing = {\n    prefix: 'fab',\n    iconName: 'xing',\n    icon: [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"]\n  };\n  var faBlackberry = {\n    prefix: 'fab',\n    iconName: 'blackberry',\n    icon: [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"]\n  };\n  var faCreativeCommonsPd = {\n    prefix: 'fab',\n    iconName: 'creative-commons-pd',\n    icon: [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"]\n  };\n  var faPlaystation = {\n    prefix: 'fab',\n    iconName: 'playstation',\n    icon: [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"]\n  };\n  var faQuinscape = {\n    prefix: 'fab',\n    iconName: 'quinscape',\n    icon: [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\"]\n  };\n  var faLess = {\n    prefix: 'fab',\n    iconName: 'less',\n    icon: [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"]\n  };\n  var faBloggerB = {\n    prefix: 'fab',\n    iconName: 'blogger-b',\n    icon: [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"]\n  };\n  var faOpencart = {\n    prefix: 'fab',\n    iconName: 'opencart',\n    icon: [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"]\n  };\n  var faVine = {\n    prefix: 'fab',\n    iconName: 'vine',\n    icon: [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"]\n  };\n  var faPaypal = {\n    prefix: 'fab',\n    iconName: 'paypal',\n    icon: [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"]\n  };\n  var faGitlab = {\n    prefix: 'fab',\n    iconName: 'gitlab',\n    icon: [512, 512, [], \"f296\", \"M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z\"]\n  };\n  var faTypo3 = {\n    prefix: 'fab',\n    iconName: 'typo3',\n    icon: [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"]\n  };\n  var faRedditAlien = {\n    prefix: 'fab',\n    iconName: 'reddit-alien',\n    icon: [512, 512, [], \"f281\", \"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\"]\n  };\n  var faYahoo = {\n    prefix: 'fab',\n    iconName: 'yahoo',\n    icon: [512, 512, [], \"f19e\", \"M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z\"]\n  };\n  var faDailymotion = {\n    prefix: 'fab',\n    iconName: 'dailymotion',\n    icon: [448, 512, [], \"e052\", \"M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z\"]\n  };\n  var faAffiliatetheme = {\n    prefix: 'fab',\n    iconName: 'affiliatetheme',\n    icon: [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"]\n  };\n  var faPiedPiperPp = {\n    prefix: 'fab',\n    iconName: 'pied-piper-pp',\n    icon: [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"]\n  };\n  var faBootstrap = {\n    prefix: 'fab',\n    iconName: 'bootstrap',\n    icon: [576, 512, [], \"f836\", \"M333.5,201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4,238.2,333.5,225,333.5,201.4z M517,188.6 c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1,0-55.8,28.1-54.7,58.5c1,29.3-0.3,67.2-9.8,98.1 c-9.6,31-25.7,50.6-52.2,53.1v28.5c26.4,2.5,42.6,22.1,52.2,53.1c9.5,30.9,10.9,68.8,9.8,98.1c-1.1,30.5,22.7,58.5,54.7,58.5h328.7 c32.1,0,55.8-28.1,54.7-58.5c-1-29.3,0.3-67.2,9.8-98.1c9.6-31,25.7-50.6,52.1-53.1v-28.5C542.7,239.2,526.5,219.6,517,188.6z M300.2,375.1h-97.9V136.8h97.4c43.3,0,71.7,23.4,71.7,59.4c0,25.3-19.1,47.9-43.5,51.8v1.3c33.2,3.6,55.5,26.6,55.5,58.3 C383.4,349.7,352.1,375.1,300.2,375.1z M290.2,266.4h-50.1v78.4h52.3c34.2,0,52.3-13.7,52.3-39.5 C344.7,279.6,326.1,266.4,290.2,266.4z\"]\n  };\n  var faOdnoklassniki = {\n    prefix: 'fab',\n    iconName: 'odnoklassniki',\n    icon: [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"]\n  };\n  var faNfcSymbol = {\n    prefix: 'fab',\n    iconName: 'nfc-symbol',\n    icon: [576, 512, [], \"e531\", \"M392.9 32.43C400.6 31.1 408.6 32.89 414.1 37.41C498.2 96.14 544 173.7 544 255.1C544 338.2 498.2 415.9 414.1 474.6C409.3 478.6 402.4 480.5 395.5 479.9C388.5 479.3 382 476.3 377.1 471.4L193.7 288.7C188.1 283.2 185 275.7 184.1 267.8C184.1 260 188.1 252.5 193.6 246.9C199.2 241.4 206.7 238.2 214.5 238.2C222.4 238.2 229.9 241.3 235.4 246.8L400.5 411.2C455.1 366.5 484.8 312 484.8 255.1C484.8 193.5 447.9 132.9 380.9 85.76C374.5 81.24 370.1 74.35 368.8 66.62C367.4 58.89 369.2 50.94 373.8 44.53C378.3 38.12 385.2 33.77 392.9 32.43V32.43zM186.9 479.6C179.2 480.9 171.3 479.1 164.8 474.6C81.67 415.9 35.84 338.2 35.84 255.1C35.84 173.7 81.67 96.14 164.8 37.41C170.5 33.4 177.4 31.53 184.4 32.12C191.3 32.71 197.8 35.72 202.7 40.63L386.1 223.3C391.7 228.8 394.8 236.3 394.8 244.2C394.9 251.1 391.8 259.5 386.2 265.1C380.7 270.6 373.2 273.8 365.3 273.8C357.5 273.8 349.1 270.7 344.4 265.2L179.3 100.7C124.7 145.9 95.03 199.9 95.03 255.1C95.03 318.5 131.9 379.1 198.1 426.2C205.4 430.8 209.7 437.6 211.1 445.4C212.4 453.1 210.6 461.1 206.1 467.5C201.6 473.9 194.7 478.2 186.9 479.6V479.6z\"]\n  };\n  var faEthereum = {\n    prefix: 'fab',\n    iconName: 'ethereum',\n    icon: [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"]\n  };\n  var faSpeakerDeck = {\n    prefix: 'fab',\n    iconName: 'speaker-deck',\n    icon: [512, 512, [], \"f83c\", \"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"]\n  };\n  var faCreativeCommonsNcEu = {\n    prefix: 'fab',\n    iconName: 'creative-commons-nc-eu',\n    icon: [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"]\n  };\n  var faPatreon = {\n    prefix: 'fab',\n    iconName: 'patreon',\n    icon: [512, 512, [], \"f3d9\", \"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\"]\n  };\n  var faAvianex = {\n    prefix: 'fab',\n    iconName: 'avianex',\n    icon: [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"]\n  };\n  var faEllo = {\n    prefix: 'fab',\n    iconName: 'ello',\n    icon: [496, 512, [], \"f5f1\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"]\n  };\n  var faGofore = {\n    prefix: 'fab',\n    iconName: 'gofore',\n    icon: [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"]\n  };\n  var faBimobject = {\n    prefix: 'fab',\n    iconName: 'bimobject',\n    icon: [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"]\n  };\n  var faFacebookF = {\n    prefix: 'fab',\n    iconName: 'facebook-f',\n    icon: [320, 512, [], \"f39e\", \"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z\"]\n  };\n  var faSquareGooglePlus = {\n    prefix: 'fab',\n    iconName: 'square-google-plus',\n    icon: [448, 512, [\"google-plus-square\"], \"f0d4\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\"]\n  };\n  var faGooglePlusSquare = faSquareGooglePlus;\n  var faMandalorian = {\n    prefix: 'fab',\n    iconName: 'mandalorian',\n    icon: [448, 512, [], \"f50f\", \"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\"]\n  };\n  var faFirstOrderAlt = {\n    prefix: 'fab',\n    iconName: 'first-order-alt',\n    icon: [496, 512, [], \"f50a\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"]\n  };\n  var faOsi = {\n    prefix: 'fab',\n    iconName: 'osi',\n    icon: [512, 512, [], \"f41a\", \"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"]\n  };\n  var faGoogleWallet = {\n    prefix: 'fab',\n    iconName: 'google-wallet',\n    icon: [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"]\n  };\n  var faDAndDBeyond = {\n    prefix: 'fab',\n    iconName: 'd-and-d-beyond',\n    icon: [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"]\n  };\n  var faPeriscope = {\n    prefix: 'fab',\n    iconName: 'periscope',\n    icon: [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"]\n  };\n  var faFulcrum = {\n    prefix: 'fab',\n    iconName: 'fulcrum',\n    icon: [320, 512, [], \"f50b\", \"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\"]\n  };\n  var faCloudscale = {\n    prefix: 'fab',\n    iconName: 'cloudscale',\n    icon: [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"]\n  };\n  var faForumbee = {\n    prefix: 'fab',\n    iconName: 'forumbee',\n    icon: [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"]\n  };\n  var faMizuni = {\n    prefix: 'fab',\n    iconName: 'mizuni',\n    icon: [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"]\n  };\n  var faSchlix = {\n    prefix: 'fab',\n    iconName: 'schlix',\n    icon: [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"]\n  };\n  var faSquareXing = {\n    prefix: 'fab',\n    iconName: 'square-xing',\n    icon: [448, 512, [\"xing-square\"], \"f169\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\"]\n  };\n  var faXingSquare = faSquareXing;\n  var faBandcamp = {\n    prefix: 'fab',\n    iconName: 'bandcamp',\n    icon: [512, 512, [], \"f2d5\", \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z\"]\n  };\n  var faWpforms = {\n    prefix: 'fab',\n    iconName: 'wpforms',\n    icon: [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"]\n  };\n  var faCloudversify = {\n    prefix: 'fab',\n    iconName: 'cloudversify',\n    icon: [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"]\n  };\n  var faUsps = {\n    prefix: 'fab',\n    iconName: 'usps',\n    icon: [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"]\n  };\n  var faMegaport = {\n    prefix: 'fab',\n    iconName: 'megaport',\n    icon: [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"]\n  };\n  var faMagento = {\n    prefix: 'fab',\n    iconName: 'magento',\n    icon: [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"]\n  };\n  var faSpotify = {\n    prefix: 'fab',\n    iconName: 'spotify',\n    icon: [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"]\n  };\n  var faOptinMonster = {\n    prefix: 'fab',\n    iconName: 'optin-monster',\n    icon: [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\"]\n  };\n  var faFly = {\n    prefix: 'fab',\n    iconName: 'fly',\n    icon: [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"]\n  };\n  var faAviato = {\n    prefix: 'fab',\n    iconName: 'aviato',\n    icon: [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"]\n  };\n  var faItunes = {\n    prefix: 'fab',\n    iconName: 'itunes',\n    icon: [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"]\n  };\n  var faCuttlefish = {\n    prefix: 'fab',\n    iconName: 'cuttlefish',\n    icon: [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"]\n  };\n  var faBlogger = {\n    prefix: 'fab',\n    iconName: 'blogger',\n    icon: [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"]\n  };\n  var faFlickr = {\n    prefix: 'fab',\n    iconName: 'flickr',\n    icon: [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"]\n  };\n  var faViber = {\n    prefix: 'fab',\n    iconName: 'viber',\n    icon: [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"]\n  };\n  var faSoundcloud = {\n    prefix: 'fab',\n    iconName: 'soundcloud',\n    icon: [640, 512, [], \"f1be\", \"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\"]\n  };\n  var faDigg = {\n    prefix: 'fab',\n    iconName: 'digg',\n    icon: [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"]\n  };\n  var faTencentWeibo = {\n    prefix: 'fab',\n    iconName: 'tencent-weibo',\n    icon: [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"]\n  };\n  var faSymfony = {\n    prefix: 'fab',\n    iconName: 'symfony',\n    icon: [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\"]\n  };\n  var faMaxcdn = {\n    prefix: 'fab',\n    iconName: 'maxcdn',\n    icon: [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"]\n  };\n  var faEtsy = {\n    prefix: 'fab',\n    iconName: 'etsy',\n    icon: [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"]\n  };\n  var faFacebookMessenger = {\n    prefix: 'fab',\n    iconName: 'facebook-messenger',\n    icon: [512, 512, [], \"f39f\", \"M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"]\n  };\n  var faAudible = {\n    prefix: 'fab',\n    iconName: 'audible',\n    icon: [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"]\n  };\n  var faThinkPeaks = {\n    prefix: 'fab',\n    iconName: 'think-peaks',\n    icon: [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\"]\n  };\n  var faBilibili = {\n    prefix: 'fab',\n    iconName: 'bilibili',\n    icon: [512, 512, [], \"e3d9\", \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"]\n  };\n  var faErlang = {\n    prefix: 'fab',\n    iconName: 'erlang',\n    icon: [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"]\n  };\n  var faCottonBureau = {\n    prefix: 'fab',\n    iconName: 'cotton-bureau',\n    icon: [512, 512, [], \"f89e\", \"M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"]\n  };\n  var faDashcube = {\n    prefix: 'fab',\n    iconName: 'dashcube',\n    icon: [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"]\n  };\n  var fa42Group = {\n    prefix: 'fab',\n    iconName: '42-group',\n    icon: [640, 512, [\"innosoft\"], \"e080\", \"M320 96V416C341.011 416 361.818 411.861 381.23 403.821C400.641 395.78 418.28 383.995 433.138 369.138C447.995 354.28 459.78 336.641 467.821 317.23C475.861 297.818 480 277.011 480 256C480 234.989 475.861 214.182 467.821 194.771C459.78 175.359 447.995 157.72 433.138 142.863C418.28 128.005 400.641 116.22 381.23 108.179C361.818 100.139 341.011 96 320 96ZM0 256L160.002 416L320.003 256L160.002 96L0 256ZM480 256C480 277.011 484.138 297.818 492.179 317.23C500.219 336.643 512.005 354.28 526.862 369.138C541.72 383.995 559.357 395.781 578.77 403.821C598.182 411.862 618.989 416 640 416V96C597.565 96 556.869 112.858 526.862 142.863C496.857 172.869 480 213.565 480 256Z\"]\n  };\n  var faInnosoft = fa42Group;\n  var faStackExchange = {\n    prefix: 'fab',\n    iconName: 'stack-exchange',\n    icon: [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"]\n  };\n  var faElementor = {\n    prefix: 'fab',\n    iconName: 'elementor',\n    icon: [512, 512, [], \"f430\", \"M.361 256C.361 397 114 511 255 511C397 511 511 397 511 256C511 116 397 2.05 255 2.05C114 2.05 .361 116 .361 256zM192 150V363H149V150H192zM234 150H362V193H234V150zM362 235V278H234V235H362zM234 320H362V363H234V320z\"]\n  };\n  var faSquarePiedPiper = {\n    prefix: 'fab',\n    iconName: 'square-pied-piper',\n    icon: [448, 512, [\"pied-piper-square\"], \"e01e\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"]\n  };\n  var faPiedPiperSquare = faSquarePiedPiper;\n  var faCreativeCommonsNd = {\n    prefix: 'fab',\n    iconName: 'creative-commons-nd',\n    icon: [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"]\n  };\n  var faPalfed = {\n    prefix: 'fab',\n    iconName: 'palfed',\n    icon: [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"]\n  };\n  var faSuperpowers = {\n    prefix: 'fab',\n    iconName: 'superpowers',\n    icon: [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"]\n  };\n  var faResolving = {\n    prefix: 'fab',\n    iconName: 'resolving',\n    icon: [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"]\n  };\n  var faXbox = {\n    prefix: 'fab',\n    iconName: 'xbox',\n    icon: [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"]\n  };\n  var faSearchengin = {\n    prefix: 'fab',\n    iconName: 'searchengin',\n    icon: [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"]\n  };\n  var faTiktok = {\n    prefix: 'fab',\n    iconName: 'tiktok',\n    icon: [448, 512, [], \"e07b\", \"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\"]\n  };\n  var faSquareFacebook = {\n    prefix: 'fab',\n    iconName: 'square-facebook',\n    icon: [448, 512, [\"facebook-square\"], \"f082\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z\"]\n  };\n  var faFacebookSquare = faSquareFacebook;\n  var faRenren = {\n    prefix: 'fab',\n    iconName: 'renren',\n    icon: [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"]\n  };\n  var faLinux = {\n    prefix: 'fab',\n    iconName: 'linux',\n    icon: [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"]\n  };\n  var faGlide = {\n    prefix: 'fab',\n    iconName: 'glide',\n    icon: [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"]\n  };\n  var faLinkedin = {\n    prefix: 'fab',\n    iconName: 'linkedin',\n    icon: [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"]\n  };\n  var faHubspot = {\n    prefix: 'fab',\n    iconName: 'hubspot',\n    icon: [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"]\n  };\n  var faDeploydog = {\n    prefix: 'fab',\n    iconName: 'deploydog',\n    icon: [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"]\n  };\n  var faTwitch = {\n    prefix: 'fab',\n    iconName: 'twitch',\n    icon: [512, 512, [], \"f1e8\", \"M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z\"]\n  };\n  var faRavelry = {\n    prefix: 'fab',\n    iconName: 'ravelry',\n    icon: [512, 512, [], \"f2d9\", \"M498.252,234.223c-1.208-10.34-1.7-20.826-3.746-31a310.306,310.306,0,0,0-9.622-36.6,184.068,184.068,0,0,0-30.874-57.5,251.154,251.154,0,0,0-18.818-21.689,237.362,237.362,0,0,0-47.113-36.116A240.8,240.8,0,0,0,331.356,26.65c-11.018-3.1-22.272-5.431-33.515-7.615-6.78-1.314-13.749-1.667-20.627-2.482-.316-.036-.6-.358-.9-.553q-16.143.009-32.288.006c-2.41.389-4.808.925-7.236,1.15a179.331,179.331,0,0,0-34.256,7.1,221.5,221.5,0,0,0-39.768,16.355,281.385,281.385,0,0,0-38.08,24.158c-6.167,4.61-12.268,9.36-17.974,14.518C96.539,88.494,86.34,97.72,76.785,107.555a243.878,243.878,0,0,0-33.648,43.95,206.488,206.488,0,0,0-20.494,44.6,198.2,198.2,0,0,0-7.691,34.759A201.13,201.13,0,0,0,13.4,266.385a299.716,299.716,0,0,0,4.425,40.24,226.865,226.865,0,0,0,16.73,53.3,210.543,210.543,0,0,0,24,39.528,213.589,213.589,0,0,0,26.358,28.416A251.313,251.313,0,0,0,126.7,458.455a287.831,287.831,0,0,0,55.9,25.277,269.5,269.5,0,0,0,40.641,9.835c6.071,1.01,12.275,1.253,18.412,1.873a4.149,4.149,0,0,1,1.19.56h32.289c2.507-.389,5-.937,7.527-1.143,16.336-1.332,32.107-5.335,47.489-10.717A219.992,219.992,0,0,0,379.1,460.322c9.749-6.447,19.395-13.077,28.737-20.1,5.785-4.348,10.988-9.5,16.3-14.457,3.964-3.7,7.764-7.578,11.51-11.5a232.162,232.162,0,0,0,31.427-41.639c9.542-16.045,17.355-32.905,22.3-50.926,2.859-10.413,4.947-21.045,7.017-31.652,1.032-5.279,1.251-10.723,1.87-16.087.036-.317.358-.6.552-.9V236.005A9.757,9.757,0,0,1,498.252,234.223Zm-161.117-1.15s-16.572-2.98-28.47-2.98c-27.2,0-33.57,14.9-33.57,37.04V360.8H201.582V170.062H275.1v31.931c8.924-26.822,26.771-36.189,62.04-36.189Z\"]\n  };\n  var faMixer = {\n    prefix: 'fab',\n    iconName: 'mixer',\n    icon: [512, 512, [], \"e056\", \"M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z\"]\n  };\n  var faSquareLastfm = {\n    prefix: 'fab',\n    iconName: 'square-lastfm',\n    icon: [448, 512, [\"lastfm-square\"], \"f203\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z\"]\n  };\n  var faLastfmSquare = faSquareLastfm;\n  var faVimeo = {\n    prefix: 'fab',\n    iconName: 'vimeo',\n    icon: [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"]\n  };\n  var faMendeley = {\n    prefix: 'fab',\n    iconName: 'mendeley',\n    icon: [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"]\n  };\n  var faUniregistry = {\n    prefix: 'fab',\n    iconName: 'uniregistry',\n    icon: [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"]\n  };\n  var faFigma = {\n    prefix: 'fab',\n    iconName: 'figma',\n    icon: [384, 512, [], \"f799\", \"M14 95.7924C14 42.8877 56.8878 0 109.793 0H274.161C327.066 0 369.954 42.8877 369.954 95.7924C369.954 129.292 352.758 158.776 326.711 175.897C352.758 193.019 369.954 222.502 369.954 256.002C369.954 308.907 327.066 351.795 274.161 351.795H272.081C247.279 351.795 224.678 342.369 207.666 326.904V415.167C207.666 468.777 163.657 512 110.309 512C57.5361 512 14 469.243 14 416.207C14 382.709 31.1945 353.227 57.2392 336.105C31.1945 318.983 14 289.5 14 256.002C14 222.502 31.196 193.019 57.2425 175.897C31.196 158.776 14 129.292 14 95.7924ZM176.288 191.587H109.793C74.2172 191.587 45.3778 220.427 45.3778 256.002C45.3778 291.44 73.9948 320.194 109.381 320.416C109.518 320.415 109.655 320.415 109.793 320.415H176.288V191.587ZM207.666 256.002C207.666 291.577 236.505 320.417 272.081 320.417H274.161C309.737 320.417 338.576 291.577 338.576 256.002C338.576 220.427 309.737 191.587 274.161 191.587H272.081C236.505 191.587 207.666 220.427 207.666 256.002ZM109.793 351.795C109.655 351.795 109.518 351.794 109.381 351.794C73.9948 352.015 45.3778 380.769 45.3778 416.207C45.3778 451.652 74.6025 480.622 110.309 480.622C146.591 480.622 176.288 451.186 176.288 415.167V351.795H109.793ZM109.793 31.3778C74.2172 31.3778 45.3778 60.2173 45.3778 95.7924C45.3778 131.368 74.2172 160.207 109.793 160.207H176.288V31.3778H109.793ZM207.666 160.207H274.161C309.737 160.207 338.576 131.368 338.576 95.7924C338.576 60.2173 309.737 31.3778 274.161 31.3778H207.666V160.207Z\"]\n  };\n  var faCreativeCommonsRemix = {\n    prefix: 'fab',\n    iconName: 'creative-commons-remix',\n    icon: [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"]\n  };\n  var faCcAmazonPay = {\n    prefix: 'fab',\n    iconName: 'cc-amazon-pay',\n    icon: [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"]\n  };\n  var faDropbox = {\n    prefix: 'fab',\n    iconName: 'dropbox',\n    icon: [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"]\n  };\n  var faInstagram = {\n    prefix: 'fab',\n    iconName: 'instagram',\n    icon: [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"]\n  };\n  var faCmplid = {\n    prefix: 'fab',\n    iconName: 'cmplid',\n    icon: [640, 512, [], \"e360\", \"M226.119,388.165a3.816,3.816,0,0,0-2.294-3.5,3.946,3.946,0,0,0-1.629-.385L72.6,384.3a19.243,19.243,0,0,1-17.924-26.025L81.585,255.692a35.72,35.72,0,0,1,32.373-26H262.525a7.07,7.07,0,0,0,6.392-5.194l10.769-41.131a3.849,3.849,0,0,0-2.237-4.937,3.755,3.755,0,0,0-1.377-.261c-.063,0-.126,0-.189.005H127.38a106.8,106.8,0,0,0-96.99,77.1L3.483,358.824A57.469,57.469,0,0,0,57.314,436q1.43,0,2.86-.072H208.742a7.131,7.131,0,0,0,6.391-5.193L225.839,389.6A3.82,3.82,0,0,0,226.119,388.165ZM306.658,81.2a3.861,3.861,0,0,0,.251-1.367A3.813,3.813,0,0,0,303.079,76c-.064,0-.128,0-.192,0h-41A7.034,7.034,0,0,0,255.5,81.2l-21.347,80.915h51.131ZM180.364,368.249H231.5L263.452,245.69H212.321ZM511.853,79.723a3.809,3.809,0,0,0-3.8-3.661c-.058,0-.137,0-.23.007h-41a7.1,7.1,0,0,0-6.584,5.129L368.91,430.634a3.54,3.54,0,0,0-.262,1.335,3.873,3.873,0,0,0,3.864,3.863c.056,0,.112,0,.169,0h41a7.068,7.068,0,0,0,6.392-5.193L511.533,81.2A3.624,3.624,0,0,0,511.853,79.723ZM324.649,384.47h-41a7.2,7.2,0,0,0-6.392,5.194L266.52,430.8a3.662,3.662,0,0,0-.268,1.374A3.783,3.783,0,0,0,270.023,436c.06,0,.166,0,.3-.012h40.905a7.036,7.036,0,0,0,6.391-5.193l10.769-41.131a3.75,3.75,0,0,0-3.445-5.208c-.108,0-.217,0-.326.014Zm311.324-308.4h-41a7.066,7.066,0,0,0-6.392,5.129l-91.46,349.436a4.073,4.073,0,0,0-.229,1.347,3.872,3.872,0,0,0,3.863,3.851c.056,0,.112,0,.169,0h40.968a7.1,7.1,0,0,0,6.392-5.193L639.68,81.2a3.624,3.624,0,0,0,.32-1.475,3.841,3.841,0,0,0-3.821-3.564c-.068,0-.137,0-.206.006ZM371.562,225.236l10.8-41.1a4.369,4.369,0,0,0,.227-1.388,3.869,3.869,0,0,0-3.861-3.842c-.057,0-.113,0-.169,0h-41.1a7.292,7.292,0,0,0-6.391,5.226l-10.834,41.1a4.417,4.417,0,0,0-.26,1.493c0,.069,0,.138,0,.206a3.776,3.776,0,0,0,3.757,3.507c.076,0,.18,0,.3-.012h41.129A7.034,7.034,0,0,0,371.562,225.236Z\"]\n  };\n  var faFacebook = {\n    prefix: 'fab',\n    iconName: 'facebook',\n    icon: [512, 512, [62000], \"f09a\", \"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\"]\n  };\n  var faGripfire = {\n    prefix: 'fab',\n    iconName: 'gripfire',\n    icon: [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"]\n  };\n  var faJediOrder = {\n    prefix: 'fab',\n    iconName: 'jedi-order',\n    icon: [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"]\n  };\n  var faUikit = {\n    prefix: 'fab',\n    iconName: 'uikit',\n    icon: [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"]\n  };\n  var faFortAwesomeAlt = {\n    prefix: 'fab',\n    iconName: 'fort-awesome-alt',\n    icon: [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"]\n  };\n  var faPhabricator = {\n    prefix: 'fab',\n    iconName: 'phabricator',\n    icon: [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"]\n  };\n  var faUssunnah = {\n    prefix: 'fab',\n    iconName: 'ussunnah',\n    icon: [482, 512, [], \"f407\", \"M481.9 268.1A240.9 240.9 0 1 1 .1 268a240.9 240.9 0 1 1 481.9 0zM24.5 268a216.5 216.5 0 1 0 432.9 0A216.5 216.5 0 1 0 24.5 268zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9c-5.5-4.3-8.2-12.3-8.2-23.8V205.1c0-6.5-5.2-20.2-15.7-41.2c7 0 17-9.1 30-27.2V284.5c0 11 2.4 19.4 7 25.3c3.7 4.7 10.1 8.9 19 12.6c1.2 .4 2.6 .9 4.1 1.4c2.9 .9 6.3 2.1 10.3 3.5c-1.8 2.7-8.3 4-19.9 4zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4h-8.3H53.6c3.3-5.3 4.9-8.8 4.9-10.8c0-2-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4c0-7.4 2.1-13.9 6.3-19.3L80 253.4l-7.1-17.7L89 215.9l6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7c0 4.2 2.8 13.3 8.3 27.3l16.2 40.7H135h8 .3c2.8 .4 7.7 5 14.6 13.9c1.8 2.4 4.3 5.8 7.7 10.2c1.4 1.9 2.9 3.9 4.6 6.1c1.3-2.3 2-4.6 2-7.1c0-2-1.3-6.6-4-13.4L163 304.1c-4-10.6-6.1-17.7-6.1-21.3c0-6.3 1.9-12.3 5.8-17.9c.5-.6 1-1.3 1.5-1.9c4.4-5.6 8.8-11.1 13.3-16.5c-1.1 4.6-1.7 8.7-1.7 12c0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3h17.6 8.3l-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32h13.4L245 292.2c-1.5-3.9-4-7-7.7-9.3L253 262.8 270.3 308h13.4l-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20L302.6 308h10.3 8.3 7.6c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3V205.1c0-6.5-4.5-20.3-13.7-41.2c5.4 0 14.1-9.1 26.2-27.2V300.2c0 7.2 .6 12 1.7 14.6c1.6 3.4 5.3 6.2 11.1 8.2c-3.9 5.6-8.7 8.5-14.5 8.5H321.1h-8.3H210.5h-19zM93.4 287.3c-2.7-6.7-4-11.7-4-15c-.6 1.2-2.4 3.7-5.4 7.6c-1.4 1.9-2.2 3.7-2.2 5.3c0 2.6 .8 5.7 2.2 9.3l5.6 13.9h0c5 0 9 0 11.9-.1l-8.2-20.9zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm-27.6 0c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm87 27.5c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3z\"]\n  };\n  var faEarlybirds = {\n    prefix: 'fab',\n    iconName: 'earlybirds',\n    icon: [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"]\n  };\n  var faTradeFederation = {\n    prefix: 'fab',\n    iconName: 'trade-federation',\n    icon: [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"]\n  };\n  var faAutoprefixer = {\n    prefix: 'fab',\n    iconName: 'autoprefixer',\n    icon: [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"]\n  };\n  var faWhatsapp = {\n    prefix: 'fab',\n    iconName: 'whatsapp',\n    icon: [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"]\n  };\n  var faSlideshare = {\n    prefix: 'fab',\n    iconName: 'slideshare',\n    icon: [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"]\n  };\n  var faGooglePlay = {\n    prefix: 'fab',\n    iconName: 'google-play',\n    icon: [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"]\n  };\n  var faViadeo = {\n    prefix: 'fab',\n    iconName: 'viadeo',\n    icon: [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"]\n  };\n  var faLine = {\n    prefix: 'fab',\n    iconName: 'line',\n    icon: [512, 512, [], \"f3c0\", \"M311 196.8v81.3c0 2.1-1.6 3.7-3.7 3.7h-13c-1.3 0-2.4-.7-3-1.5l-37.3-50.3v48.2c0 2.1-1.6 3.7-3.7 3.7h-13c-2.1 0-3.7-1.6-3.7-3.7V196.9c0-2.1 1.6-3.7 3.7-3.7h12.9c1.1 0 2.4 .6 3 1.6l37.3 50.3V196.9c0-2.1 1.6-3.7 3.7-3.7h13c2.1-.1 3.8 1.6 3.8 3.5zm-93.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 2.1 1.6 3.7 3.7 3.7h13c2.1 0 3.7-1.6 3.7-3.7V196.8c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1H150.3V196.8c0-2.1-1.6-3.7-3.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 1 .3 1.8 1 2.5c.7 .6 1.5 1 2.5 1h52.2c2.1 0 3.7-1.6 3.7-3.7v-13c0-1.9-1.6-3.7-3.5-3.7zm193.7-68.1H327.3c-1.9 0-3.7 1.6-3.7 3.7v81.3c0 1.9 1.6 3.7 3.7 3.7h52.2c2.1 0 3.7-1.6 3.7-3.7V265c0-2.1-1.6-3.7-3.7-3.7H344V247.7h35.5c2.1 0 3.7-1.6 3.7-3.7V230.9c0-2.1-1.6-3.7-3.7-3.7H344V213.5h35.5c2.1 0 3.7-1.6 3.7-3.7v-13c-.1-1.9-1.7-3.7-3.7-3.7zM512 93.4V419.4c-.1 51.2-42.1 92.7-93.4 92.6H92.6C41.4 511.9-.1 469.8 0 418.6V92.6C.1 41.4 42.2-.1 93.4 0H419.4c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3s-186.4 67.9-186.4 151.3c0 74.7 66.3 137.4 155.9 149.3c21.8 4.7 19.3 12.7 14.4 42.1c-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1z\"]\n  };\n  var faGoogleDrive = {\n    prefix: 'fab',\n    iconName: 'google-drive',\n    icon: [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"]\n  };\n  var faServicestack = {\n    prefix: 'fab',\n    iconName: 'servicestack',\n    icon: [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"]\n  };\n  var faSimplybuilt = {\n    prefix: 'fab',\n    iconName: 'simplybuilt',\n    icon: [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"]\n  };\n  var faBitbucket = {\n    prefix: 'fab',\n    iconName: 'bitbucket',\n    icon: [512, 512, [61810], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"]\n  };\n  var faImdb = {\n    prefix: 'fab',\n    iconName: 'imdb',\n    icon: [448, 512, [], \"f2d8\", \"M89.5 323.6H53.93V186.2H89.5V323.6zM156.1 250.5L165.2 186.2H211.5V323.6H180.5V230.9L167.1 323.6H145.8L132.8 232.9L132.7 323.6H101.5V186.2H147.6C148.1 194.5 150.4 204.3 151.9 215.6L156.1 250.5zM223.7 323.6V186.2H250.3C267.3 186.2 277.3 187.1 283.3 188.6C289.4 190.3 294 192.8 297.2 196.5C300.3 199.8 302.3 203.1 303 208.5C303.9 212.9 304.4 221.6 304.4 234.7V282.9C304.4 295.2 303.7 303.4 302.5 307.6C301.4 311.7 299.4 315 296.5 317.3C293.7 319.7 290.1 321.4 285.8 322.3C281.6 323.1 275.2 323.6 266.7 323.6H223.7zM259.2 209.7V299.1C264.3 299.1 267.5 298.1 268.6 296.8C269.7 294.8 270.4 289.2 270.4 280.1V226.8C270.4 220.6 270.3 216.6 269.7 214.8C269.4 213 268.5 211.8 267.1 210.1C265.7 210.1 263 209.7 259.2 209.7V209.7zM316.5 323.6V186.2H350.6V230.1C353.5 227.7 356.7 225.2 360.1 223.5C363.7 222 368.9 221.1 372.9 221.1C377.7 221.1 381.8 221.9 385.2 223.3C388.6 224.8 391.2 226.8 393.2 229.5C394.9 232.1 395.9 234.8 396.3 237.3C396.7 239.9 396.1 245.3 396.1 253.5V292.1C396.1 300.3 396.3 306.4 395.3 310.5C394.2 314.5 391.5 318.1 387.5 320.1C383.4 324 378.6 325.4 372.9 325.4C368.9 325.4 363.7 324.5 360.2 322.9C356.7 321.1 353.5 318.4 350.6 314.9L348.5 323.6L316.5 323.6zM361.6 302.9C362.3 301.1 362.6 296.9 362.6 290.4V255C362.6 249.4 362.3 245.5 361.5 243.8C360.8 241.9 357.8 241.1 355.7 241.1C353.7 241.1 352.3 241.9 351.6 243.4C351 244.9 350.6 248.8 350.6 255V291.4C350.6 297.5 351 301.4 351.8 303C352.4 304.7 353.9 305.5 355.9 305.5C358.1 305.5 360.1 304.7 361.6 302.9L361.6 302.9zM418.4 32.04C434.1 33.27 447.1 47.28 447.1 63.92V448.1C447.1 464.5 435.2 478.5 418.9 479.1C418.6 479.1 418.4 480 418.1 480H29.88C29.6 480 29.32 479.1 29.04 479.9C13.31 478.5 1.093 466.1 0 449.7L.0186 61.78C1.081 45.88 13.82 33.09 30.26 31.1H417.7C417.9 31.1 418.2 32.01 418.4 32.04L418.4 32.04zM30.27 41.26C19 42.01 10.02 51.01 9.257 62.4V449.7C9.63 455.1 11.91 460.2 15.7 464C19.48 467.9 24.51 470.3 29.89 470.7H418.1C429.6 469.7 438.7 459.1 438.7 448.1V63.91C438.7 58.17 436.6 52.65 432.7 48.45C428.8 44.24 423.4 41.67 417.7 41.26L30.27 41.26z\"]\n  };\n  var faDeezer = {\n    prefix: 'fab',\n    iconName: 'deezer',\n    icon: [576, 512, [], \"e077\", \"M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z\"]\n  };\n  var faRaspberryPi = {\n    prefix: 'fab',\n    iconName: 'raspberry-pi',\n    icon: [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"]\n  };\n  var faJira = {\n    prefix: 'fab',\n    iconName: 'jira',\n    icon: [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"]\n  };\n  var faDocker = {\n    prefix: 'fab',\n    iconName: 'docker',\n    icon: [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"]\n  };\n  var faScreenpal = {\n    prefix: 'fab',\n    iconName: 'screenpal',\n    icon: [512, 512, [], \"e570\", \"M233.5 22.49C233.5 10.07 243.6 0 256 0C268.4 0 278.5 10.07 278.5 22.49C278.5 34.91 268.4 44.98 256 44.98C243.6 44.98 233.5 34.91 233.5 22.49zM313.4 259C313.4 290.7 287.7 316.4 256 316.4C224.3 316.4 198.6 290.7 198.6 259C198.6 227.3 224.3 201.6 256 201.6C287.7 201.6 313.4 227.3 313.4 259zM337.2 350C359.5 330.1 373.7 302.7 377.1 273H496.6C493.1 334.4 466.2 392.2 421.4 434.4C376.7 476.6 317.5 500.2 256 500.2C194.5 500.2 135.3 476.6 90.56 434.4C45.83 392.2 18.94 334.4 15.39 273H135.1C138.5 302.7 152.7 330.1 175 350C197.3 369.9 226.2 380.9 256.1 380.9C285.1 380.9 314.8 369.9 337.2 350zM73.14 140.3C73.54 152.7 63.81 163.1 51.39 163.5C38.97 163.9 28.59 154.2 28.18 141.8C27.78 129.3 37.52 118.9 49.94 118.5C62.35 118.1 72.74 127.9 73.14 140.3zM438.9 141C438.9 128.6 448.9 118.5 461.4 118.5C473.8 118.5 483.8 128.6 483.8 141C483.8 153.5 473.8 163.5 461.4 163.5C448.9 163.5 438.9 153.5 438.9 141zM317.9 95.27C300.6 109.1 278.7 118.1 256 118.1C233.3 118.1 211.4 109.1 194.1 95.27C176.8 80.55 165.3 60.18 161.7 37.78C176.8 31.37 192.5 26.52 208.6 23.31C208.6 35.88 213.6 47.93 222.5 56.82C231.4 65.7 243.4 70.7 256 70.7C268.6 70.7 280.6 65.7 289.5 56.82C298.4 47.93 303.4 35.88 303.4 23.31C319.5 26.52 335.2 31.37 350.3 37.78C346.7 60.18 335.2 80.55 317.9 95.27H317.9zM82.78 231C61.42 238.6 38.06 238.4 16.86 230.4C18.82 214.1 22.46 198.1 27.71 182.5C33.1 185.6 39.05 187.6 45.22 188.5C51.39 189.3 57.67 188.9 63.68 187.3C69.69 185.6 75.33 182.9 80.27 179.1C85.21 175.3 89.36 170.6 92.47 165.2C95.58 159.8 97.61 153.8 98.42 147.7C99.23 141.5 98.83 135.2 97.22 129.2C95.61 123.2 92.83 117.6 89.04 112.6C85.25 107.7 80.53 103.5 75.14 100.4C85.96 88.11 98.01 76.94 111.1 67.07C128.7 81.42 140.6 101.6 144.7 123.9C148.8 146.2 144.8 169.3 133.5 188.9C122.1 208.5 104.1 223.4 82.78 231V231zM429.2 231.1C407.9 223.5 389.9 208.5 378.5 188.9C367.2 169.3 363.3 146.2 367.4 123.9C371.5 101.7 383.4 81.54 400.9 67.19C414 77.04 426.1 88.21 436.9 100.5C426.2 106.9 418.5 117.2 415.4 129.3C412.2 141.3 413.1 154.1 420.2 164.9C426.4 175.7 436.6 183.6 448.6 186.9C460.6 190.2 473.5 188.6 484.3 182.6C489.6 198.1 493.2 214.2 495.2 230.4C473.1 238.5 450.6 238.7 429.2 231.1L429.2 231.1z\"]\n  };\n  var faBluetooth = {\n    prefix: 'fab',\n    iconName: 'bluetooth',\n    icon: [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"]\n  };\n  var faGitter = {\n    prefix: 'fab',\n    iconName: 'gitter',\n    icon: [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"]\n  };\n  var faDAndD = {\n    prefix: 'fab',\n    iconName: 'd-and-d',\n    icon: [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"]\n  };\n  var faMicroblog = {\n    prefix: 'fab',\n    iconName: 'microblog',\n    icon: [448, 512, [], \"e01a\", \"M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z\"]\n  };\n  var faCcDinersClub = {\n    prefix: 'fab',\n    iconName: 'cc-diners-club',\n    icon: [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"]\n  };\n  var faGgCircle = {\n    prefix: 'fab',\n    iconName: 'gg-circle',\n    icon: [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"]\n  };\n  var faPiedPiperHat = {\n    prefix: 'fab',\n    iconName: 'pied-piper-hat',\n    icon: [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"]\n  };\n  var faKickstarterK = {\n    prefix: 'fab',\n    iconName: 'kickstarter-k',\n    icon: [384, 512, [], \"f3bc\", \"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\"]\n  };\n  var faYandex = {\n    prefix: 'fab',\n    iconName: 'yandex',\n    icon: [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"]\n  };\n  var faReadme = {\n    prefix: 'fab',\n    iconName: 'readme',\n    icon: [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"]\n  };\n  var faHtml5 = {\n    prefix: 'fab',\n    iconName: 'html5',\n    icon: [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"]\n  };\n  var faSellsy = {\n    prefix: 'fab',\n    iconName: 'sellsy',\n    icon: [640, 512, [], \"f213\", \"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"]\n  };\n  var faSass = {\n    prefix: 'fab',\n    iconName: 'sass',\n    icon: [640, 512, [], \"f41e\", \"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"]\n  };\n  var faWirsindhandwerk = {\n    prefix: 'fab',\n    iconName: 'wirsindhandwerk',\n    icon: [512, 512, [\"wsh\"], \"e2d0\", \"M50.77161,479.81213h83.36071V367.84741l-83.36071,47.009Zm329.04675,0h82.35022V414.85645l-82.35022-47.009Zm.00568-448V251.568L256.1759,179.1861,134.50378,251.568V31.81213H50.77161V392.60565L256.1759,270.31909,462.16858,392.60565V31.81213Z\"]\n  };\n  var faWsh = faWirsindhandwerk;\n  var faBuromobelexperte = {\n    prefix: 'fab',\n    iconName: 'buromobelexperte',\n    icon: [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"]\n  };\n  var faSalesforce = {\n    prefix: 'fab',\n    iconName: 'salesforce',\n    icon: [640, 512, [], \"f83b\", \"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"]\n  };\n  var faOctopusDeploy = {\n    prefix: 'fab',\n    iconName: 'octopus-deploy',\n    icon: [512, 512, [], \"e082\", \"M455.6,349.2c-45.891-39.09-36.67-77.877-16.095-128.11C475.16,134.04,415.967,34.14,329.93,8.3,237.04-19.6,134.252,24.341,99.677,117.147a180.862,180.862,0,0,0-10.988,73.544c1.733,29.543,14.717,52.97,24.09,80.3,17.2,50.161-28.1,92.743-66.662,117.582-46.806,30.2-36.319,39.857-8.428,41.858,23.378,1.68,44.478-4.548,65.265-15.045,9.2-4.647,40.687-18.931,45.13-28.588C135.9,413.388,111.122,459.5,126.621,488.9c19.1,36.229,67.112-31.77,76.709-45.812,8.591-12.572,42.963-81.279,63.627-46.926,18.865,31.361,8.6,76.391,35.738,104.622,32.854,34.2,51.155-18.312,51.412-44.221.163-16.411-6.1-95.852,29.9-59.944C405.428,418,436.912,467.8,472.568,463.642c38.736-4.516-22.123-67.967-28.262-78.695,5.393,4.279,53.665,34.128,53.818,9.52C498.234,375.678,468.039,359.8,455.6,349.2Z\"]\n  };\n  var faMedapps = {\n    prefix: 'fab',\n    iconName: 'medapps',\n    icon: [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"]\n  };\n  var faNs8 = {\n    prefix: 'fab',\n    iconName: 'ns8',\n    icon: [640, 512, [], \"f3d5\", \"M104.324,269.172h26.067V242.994H104.324Zm52.466-26.178-.055-26.178v-.941a39.325,39.325,0,0,0-78.644.941v.166h26.4v-.166a12.98,12.98,0,0,1,25.956,0v26.178Zm52.356,25.846a91.1,91.1,0,0,1-91.1,91.1h-.609a91.1,91.1,0,0,1-91.1-91.1H0v.166A117.33,117.33,0,0,0,117.44,386.28h.775A117.331,117.331,0,0,0,235.49,268.84V242.828H209.146Zm-157.233,0a65.362,65.362,0,0,0,130.723,0H156.292a39.023,39.023,0,0,1-78.035,0V242.883H51.968v-26.62A65.42,65.42,0,0,1,182.8,217.48v25.293h26.344V217.48a91.761,91.761,0,0,0-183.522,0v25.4H51.913Zm418.4-71.173c13.67,0,24.573,6.642,30.052,18.264l.719,1.549,23.245-11.511-.609-1.439c-8.025-19.26-28.5-31.27-53.407-31.27-23.134,0-43.611,11.4-50.972,28.447-.123,26.876-.158,23.9,0,24.85,4.7,11.013,14.555,19.37,28.668,24.241a102.033,102.033,0,0,0,19.813,3.984c5.479.72,10.626,1.384,15.829,3.1,6.364,2.1,10.46,5.257,12.84,9.851v9.851c-3.708,7.527-13.781,12.342-25.791,12.342-14.334,0-25.956-6.918-31.933-19.039l-.72-1.494L415.026,280.9l.553,1.439c7.915,19.426,29.609,32.044,55.289,32.044,23.632,0,44.608-11.4,52.3-28.447l.166-25.9-.166-.664c-4.87-11.014-15.219-19.647-28.944-24.241-7.693-2.712-14.335-3.6-20.7-4.427a83.777,83.777,0,0,1-14.832-2.878c-6.31-1.937-10.4-5.092-12.619-9.63v-8.412C449.45,202.427,458.969,197.667,470.315,197.667ZM287.568,311.344h26.067v-68.4H287.568Zm352.266-53.3c-2.933-6.254-8.3-12.01-15.441-16.714A37.99,37.99,0,0,0,637.4,226l.166-25.347-.166-.664C630.038,184,610.667,173.26,589.25,173.26S548.461,184,541.1,199.992l-.166,25.347.166.664a39.643,39.643,0,0,0,13.006,15.331c-7.2,4.7-12.508,10.46-15.441,16.714l-.166,28.889.166.72c7.582,15.994,27.893,26.731,50.585,26.731s43.057-10.737,50.584-26.731l.166-28.89Zm-73.22-50.806c3.6-6.31,12.563-10.516,22.58-10.516s19.038,4.206,22.636,10.516v13.725c-3.542,6.2-12.563,10.349-22.636,10.349s-19.094-4.15-22.58-10.349Zm47.319,72.169c-3.764,6.641-13.338,10.9-24.683,10.9-11.125,0-20.976-4.372-24.684-10.9V263.25c3.708-6.309,13.5-10.515,24.684-10.515,11.345,0,20.919,4.15,24.683,10.515ZM376.4,265.962l-59.827-89.713h-29v40.623h26.51v.387l62.539,94.085H402.3V176.249H376.4Z\"]\n  };\n  var faPinterestP = {\n    prefix: 'fab',\n    iconName: 'pinterest-p',\n    icon: [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"]\n  };\n  var faApper = {\n    prefix: 'fab',\n    iconName: 'apper',\n    icon: [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"]\n  };\n  var faFortAwesome = {\n    prefix: 'fab',\n    iconName: 'fort-awesome',\n    icon: [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"]\n  };\n  var faWaze = {\n    prefix: 'fab',\n    iconName: 'waze',\n    icon: [512, 512, [], \"f83f\", \"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"]\n  };\n  var faCcJcb = {\n    prefix: 'fab',\n    iconName: 'cc-jcb',\n    icon: [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"]\n  };\n  var faSnapchat = {\n    prefix: 'fab',\n    iconName: 'snapchat',\n    icon: [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z\"]\n  };\n  var faSnapchatGhost = faSnapchat;\n  var faFantasyFlightGames = {\n    prefix: 'fab',\n    iconName: 'fantasy-flight-games',\n    icon: [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"]\n  };\n  var faRust = {\n    prefix: 'fab',\n    iconName: 'rust',\n    icon: [512, 512, [], \"e07a\", \"M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z\"]\n  };\n  var faWix = {\n    prefix: 'fab',\n    iconName: 'wix',\n    icon: [640, 512, [], \"f5cf\", \"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"]\n  };\n  var faSquareBehance = {\n    prefix: 'fab',\n    iconName: 'square-behance',\n    icon: [448, 512, [\"behance-square\"], \"f1b5\", \"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z\"]\n  };\n  var faBehanceSquare = faSquareBehance;\n  var faSupple = {\n    prefix: 'fab',\n    iconName: 'supple',\n    icon: [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"]\n  };\n  var faRebel = {\n    prefix: 'fab',\n    iconName: 'rebel',\n    icon: [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"]\n  };\n  var faCss3 = {\n    prefix: 'fab',\n    iconName: 'css3',\n    icon: [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"]\n  };\n  var faStaylinked = {\n    prefix: 'fab',\n    iconName: 'staylinked',\n    icon: [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\"]\n  };\n  var faKaggle = {\n    prefix: 'fab',\n    iconName: 'kaggle',\n    icon: [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"]\n  };\n  var faSpaceAwesome = {\n    prefix: 'fab',\n    iconName: 'space-awesome',\n    icon: [512, 512, [], \"e5ac\", \"M96 256H128V512H0V352H32V320H64V288H96V256zM512 352V512H384V256H416V288H448V320H480V352H512zM320 64H352V448H320V416H192V448H160V64H192V32H224V0H288V32H320V64zM288 128H224V192H288V128z\"]\n  };\n  var faDeviantart = {\n    prefix: 'fab',\n    iconName: 'deviantart',\n    icon: [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"]\n  };\n  var faCpanel = {\n    prefix: 'fab',\n    iconName: 'cpanel',\n    icon: [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"]\n  };\n  var faGoodreadsG = {\n    prefix: 'fab',\n    iconName: 'goodreads-g',\n    icon: [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"]\n  };\n  var faSquareGit = {\n    prefix: 'fab',\n    iconName: 'square-git',\n    icon: [448, 512, [\"git-square\"], \"f1d2\", \"M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z\"]\n  };\n  var faGitSquare = faSquareGit;\n  var faSquareTumblr = {\n    prefix: 'fab',\n    iconName: 'square-tumblr',\n    icon: [448, 512, [\"tumblr-square\"], \"f174\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\"]\n  };\n  var faTumblrSquare = faSquareTumblr;\n  var faTrello = {\n    prefix: 'fab',\n    iconName: 'trello',\n    icon: [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"]\n  };\n  var faCreativeCommonsNcJp = {\n    prefix: 'fab',\n    iconName: 'creative-commons-nc-jp',\n    icon: [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"]\n  };\n  var faGetPocket = {\n    prefix: 'fab',\n    iconName: 'get-pocket',\n    icon: [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"]\n  };\n  var faPerbyte = {\n    prefix: 'fab',\n    iconName: 'perbyte',\n    icon: [448, 512, [], \"e083\", \"M305.314,284.578H246.6V383.3h58.711q24.423,0,38.193-13.77t13.77-36.11q0-21.826-14.032-35.335T305.314,284.578ZM149.435,128.7H90.724v98.723h58.711q24.42,0,38.19-13.773t13.77-36.107q0-21.826-14.029-35.338T149.435,128.7ZM366.647,32H81.353A81.445,81.445,0,0,0,0,113.352V398.647A81.445,81.445,0,0,0,81.353,480H366.647A81.445,81.445,0,0,0,448,398.647V113.352A81.445,81.445,0,0,0,366.647,32Zm63.635,366.647a63.706,63.706,0,0,1-63.635,63.635H81.353a63.706,63.706,0,0,1-63.635-63.635V113.352A63.706,63.706,0,0,1,81.353,49.718H366.647a63.706,63.706,0,0,1,63.635,63.634ZM305.314,128.7H246.6v98.723h58.711q24.423,0,38.193-13.773t13.77-36.107q0-21.826-14.032-35.338T305.314,128.7Z\"]\n  };\n  var faGrunt = {\n    prefix: 'fab',\n    iconName: 'grunt',\n    icon: [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"]\n  };\n  var faWeebly = {\n    prefix: 'fab',\n    iconName: 'weebly',\n    icon: [512, 512, [], \"f5cc\", \"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"]\n  };\n  var faConnectdevelop = {\n    prefix: 'fab',\n    iconName: 'connectdevelop',\n    icon: [576, 512, [], \"f20e\", \"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"]\n  };\n  var faLeanpub = {\n    prefix: 'fab',\n    iconName: 'leanpub',\n    icon: [576, 512, [], \"f212\", \"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"]\n  };\n  var faBlackTie = {\n    prefix: 'fab',\n    iconName: 'black-tie',\n    icon: [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"]\n  };\n  var faThemeco = {\n    prefix: 'fab',\n    iconName: 'themeco',\n    icon: [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"]\n  };\n  var faPython = {\n    prefix: 'fab',\n    iconName: 'python',\n    icon: [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"]\n  };\n  var faAndroid = {\n    prefix: 'fab',\n    iconName: 'android',\n    icon: [576, 512, [], \"f17b\", \"M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55\"]\n  };\n  var faBots = {\n    prefix: 'fab',\n    iconName: 'bots',\n    icon: [640, 512, [], \"e340\", \"M86.344,197.834a51.767,51.767,0,0,0-41.57,20.058V156.018a8.19,8.19,0,0,0-8.19-8.19H8.19A8.19,8.19,0,0,0,0,156.018V333.551a8.189,8.189,0,0,0,8.19,8.189H36.584a8.189,8.189,0,0,0,8.19-8.189v-8.088c11.628,13.373,25.874,19.769,41.573,19.769,34.6,0,61.922-26.164,61.922-73.843C148.266,225.452,121.229,197.834,86.344,197.834ZM71.516,305.691c-9.593,0-21.221-4.942-26.745-12.5V250.164c5.528-7.558,17.152-12.791,26.745-12.791,17.734,0,31.107,13.082,31.107,34.013C102.623,292.609,89.25,305.691,71.516,305.691Zm156.372-59.032a17.4,17.4,0,1,0,17.4,17.4A17.4,17.4,0,0,0,227.888,246.659ZM273.956,156.7V112.039a13.308,13.308,0,1,0-10.237,0V156.7a107.49,107.49,0,1,0,10.237,0Zm85.993,107.367c0,30.531-40.792,55.281-91.112,55.281s-91.111-24.75-91.111-55.281,40.792-55.281,91.111-55.281S359.949,233.532,359.949,264.062Zm-50.163,17.4a17.4,17.4,0,1,0-17.4-17.4h0A17.4,17.4,0,0,0,309.786,281.466ZM580.7,250.455c-14.828-2.617-22.387-3.78-22.387-9.885,0-5.523,7.268-9.884,17.735-9.884a65.56,65.56,0,0,1,34.484,10.1,8.171,8.171,0,0,0,11.288-2.468c.07-.11.138-.221.2-.333l8.611-14.886a8.2,8.2,0,0,0-2.867-11.123,99.863,99.863,0,0,0-52.014-14.138c-38.956,0-60.179,21.514-60.179,46.225,0,36.342,33.725,41.864,57.563,45.642,13.373,2.326,24.13,4.361,24.13,11.048,0,6.4-5.523,10.757-18.9,10.757-13.552,0-30.994-6.222-42.623-13.579a8.206,8.206,0,0,0-11.335,2.491c-.035.054-.069.108-.1.164l-10.2,16.891a8.222,8.222,0,0,0,2.491,11.066c15.224,10.3,37.663,16.692,59.441,16.692,40.409,0,63.957-19.769,63.957-46.515C640,260.63,604.537,254.816,580.7,250.455Zm-95.928,60.787a8.211,8.211,0,0,0-9.521-5.938,23.168,23.168,0,0,1-4.155.387c-7.849,0-12.5-6.106-12.5-14.245V240.28h20.349a8.143,8.143,0,0,0,8.141-8.143V209.466a8.143,8.143,0,0,0-8.141-8.143H458.594V171.091a8.143,8.143,0,0,0-8.143-8.143H422.257a8.143,8.143,0,0,0-8.143,8.143h0v30.232H399a8.143,8.143,0,0,0-8.143,8.143h0v22.671A8.143,8.143,0,0,0,399,240.28h15.115v63.667c0,27.037,15.408,41.282,43.9,41.282,12.183,0,21.383-2.2,27.6-5.446a8.161,8.161,0,0,0,4.145-9.278Z\"]\n  };\n  var faFreeCodeCamp = {\n    prefix: 'fab',\n    iconName: 'free-code-camp',\n    icon: [576, 512, [], \"f2c5\", \"M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z\"]\n  };\n  var faHornbill = {\n    prefix: 'fab',\n    iconName: 'hornbill',\n    icon: [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"]\n  };\n  var faJs = {\n    prefix: 'fab',\n    iconName: 'js',\n    icon: [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n  };\n  var faIdeal = {\n    prefix: 'fab',\n    iconName: 'ideal',\n    icon: [576, 512, [], \"e013\", \"M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z\"]\n  };\n  var faGit = {\n    prefix: 'fab',\n    iconName: 'git',\n    icon: [512, 512, [], \"f1d3\", \"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"]\n  };\n  var faDev = {\n    prefix: 'fab',\n    iconName: 'dev',\n    icon: [448, 512, [], \"f6cc\", \"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\"]\n  };\n  var faSketch = {\n    prefix: 'fab',\n    iconName: 'sketch',\n    icon: [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"]\n  };\n  var faYandexInternational = {\n    prefix: 'fab',\n    iconName: 'yandex-international',\n    icon: [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"]\n  };\n  var faCcAmex = {\n    prefix: 'fab',\n    iconName: 'cc-amex',\n    icon: [576, 512, [], \"f1f3\", \"M48 480C21.49 480 0 458.5 0 432V80C0 53.49 21.49 32 48 32H528C554.5 32 576 53.49 576 80V82.43H500.5L483.5 130L466.6 82.43H369.4V145.6L341.3 82.43H262.7L181 267.1H246.8V430.9H450.5L482.4 395.8L514.3 430.9H576V432C576 458.5 554.5 480 528 480H48zM482.6 364L440.4 410.3H390.5L458 338.6L390.5 266.1H441.9L483.4 312.8L525.4 266.1H576L508 338.2L576 410.3H524.6L482.6 364zM576 296.9V380.2L536.7 338.3L576 296.9zM307.6 377.1H390.6V410.3H268.6V267.1H390.6V300.2H307.6V322.6H388.5V354.9H307.6V377.2V377.1zM537.3 145.7L500.4 246.3H466L429.2 146V246.3H390.5V103H451.7L483.6 192.3L515.8 103H576V246.3H537.3V145.7zM334.5 217.6H268.6L256.7 246.3H213.7L276.1 103H327.3L390.6 246.3H346.5L334.5 217.6zM301.5 138.5L282 185.4H320.9L301.5 138.5z\"]\n  };\n  var faUber = {\n    prefix: 'fab',\n    iconName: 'uber',\n    icon: [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"]\n  };\n  var faGithub = {\n    prefix: 'fab',\n    iconName: 'github',\n    icon: [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"]\n  };\n  var faPhp = {\n    prefix: 'fab',\n    iconName: 'php',\n    icon: [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"]\n  };\n  var faAlipay = {\n    prefix: 'fab',\n    iconName: 'alipay',\n    icon: [448, 512, [], \"f642\", \"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\"]\n  };\n  var faYoutube = {\n    prefix: 'fab',\n    iconName: 'youtube',\n    icon: [576, 512, [61802], \"f167\", \"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"]\n  };\n  var faSkyatlas = {\n    prefix: 'fab',\n    iconName: 'skyatlas',\n    icon: [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"]\n  };\n  var faFirefoxBrowser = {\n    prefix: 'fab',\n    iconName: 'firefox-browser',\n    icon: [512, 512, [], \"e007\", \"M130.22 127.548C130.38 127.558 130.3 127.558 130.22 127.548V127.548ZM481.64 172.898C471.03 147.398 449.56 119.898 432.7 111.168C446.42 138.058 454.37 165.048 457.4 185.168C457.405 185.306 457.422 185.443 457.45 185.578C429.87 116.828 383.098 89.1089 344.9 28.7479C329.908 5.05792 333.976 3.51792 331.82 4.08792L331.7 4.15792C284.99 30.1109 256.365 82.5289 249.12 126.898C232.503 127.771 216.219 131.895 201.19 139.035C199.838 139.649 198.736 140.706 198.066 142.031C197.396 143.356 197.199 144.87 197.506 146.323C197.7 147.162 198.068 147.951 198.586 148.639C199.103 149.327 199.76 149.899 200.512 150.318C201.264 150.737 202.096 150.993 202.954 151.071C203.811 151.148 204.676 151.045 205.491 150.768L206.011 150.558C221.511 143.255 238.408 139.393 255.541 139.238C318.369 138.669 352.698 183.262 363.161 201.528C350.161 192.378 326.811 183.338 304.341 187.248C392.081 231.108 368.541 381.784 246.951 376.448C187.487 373.838 149.881 325.467 146.421 285.648C146.421 285.648 157.671 243.698 227.041 243.698C234.541 243.698 255.971 222.778 256.371 216.698C256.281 214.698 213.836 197.822 197.281 181.518C188.434 172.805 184.229 168.611 180.511 165.458C178.499 163.75 176.392 162.158 174.201 160.688C168.638 141.231 168.399 120.638 173.51 101.058C148.45 112.468 128.96 130.508 114.8 146.428H114.68C105.01 134.178 105.68 93.7779 106.25 85.3479C106.13 84.8179 99.022 89.0159 98.1 89.6579C89.5342 95.7103 81.5528 102.55 74.26 110.088C57.969 126.688 30.128 160.242 18.76 211.318C14.224 231.701 12 255.739 12 263.618C12 398.318 121.21 507.508 255.92 507.508C376.56 507.508 478.939 420.281 496.35 304.888C507.922 228.192 481.64 173.82 481.64 172.898Z\"]\n  };\n  var faReplyd = {\n    prefix: 'fab',\n    iconName: 'replyd',\n    icon: [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"]\n  };\n  var faSuse = {\n    prefix: 'fab',\n    iconName: 'suse',\n    icon: [640, 512, [], \"f7d6\", \"M471.08 102.66s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.06a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2.3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9.5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5.4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3.5-76.2-25.4-81.6-28.2-.3-.4.1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7.8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3.1-.1-.9-.3-.9.7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0-25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z\"]\n  };\n  var faJenkins = {\n    prefix: 'fab',\n    iconName: 'jenkins',\n    icon: [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"]\n  };\n  var faTwitter = {\n    prefix: 'fab',\n    iconName: 'twitter',\n    icon: [512, 512, [], \"f099\", \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"]\n  };\n  var faRockrms = {\n    prefix: 'fab',\n    iconName: 'rockrms',\n    icon: [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"]\n  };\n  var faPinterest = {\n    prefix: 'fab',\n    iconName: 'pinterest',\n    icon: [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"]\n  };\n  var faBuffer = {\n    prefix: 'fab',\n    iconName: 'buffer',\n    icon: [448, 512, [], \"f837\", \"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"]\n  };\n  var faNpm = {\n    prefix: 'fab',\n    iconName: 'npm',\n    icon: [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"]\n  };\n  var faYammer = {\n    prefix: 'fab',\n    iconName: 'yammer',\n    icon: [512, 512, [], \"f840\", \"M500.676,159.486a12.779,12.779,0,0,0-6.4-8.282,13.954,13.954,0,0,0-10.078-1.125L457.8,156.7l-.043-.2-22.3,5.785-1.243.333-.608-2.17A369.037,369.037,0,0,0,347.538,4.289a14.1,14.1,0,0,0-19.784-.463l-102.9,102.747H24.947A24.9,24.9,0,0,0,0,131.417V380.38a24.963,24.963,0,0,0,24.918,24.9H224.986L328.072,508a13.667,13.667,0,0,0,19.327,0c.126-.126.249-.255.37-.385a368.025,368.025,0,0,0,69.577-107.374,403.45,403.45,0,0,0,17.3-50.8v-.028l20.406,5.336.029-.073L483.345,362a20.253,20.253,0,0,0,2.619.5,13.359,13.359,0,0,0,4.139-.072,13.5,13.5,0,0,0,10.515-9.924,415.855,415.855,0,0,0,.058-193.013ZM337.125,24.65l.013.014h-.013Zm-110.2,165.161L174.311,281.1a11.338,11.338,0,0,0-1.489,5.655v46.189a22.04,22.04,0,0,1-22.041,22h-3.4A22.068,22.068,0,0,1,125.3,332.962V287.294a11.532,11.532,0,0,0-1.388-5.51l-51.6-92.2a21.988,21.988,0,0,1,19.264-32.726h3.268a22.059,22.059,0,0,1,19.611,11.916l36.357,70.281,37.515-70.512a22.066,22.066,0,0,1,38.556-.695,21.7,21.7,0,0,1,0,21.967ZM337.145,24.673a348.147,348.147,0,0,1,75.8,141.335l.564,1.952-114.134,29.6V131.417a25.006,25.006,0,0,0-24.947-24.9H255.067Zm60.5,367.305v-.043l-.014.014a347.19,347.19,0,0,1-60.177,95.227l-82.2-81.893h19.177a24.978,24.978,0,0,0,24.947-24.9v-66.2l114.6,29.862A385.191,385.191,0,0,1,397.648,391.978Zm84-52.45.015.014-50.618-13.131L299.379,292.1V219.572l119.746-30.99,4.468-1.157,39.54-10.253,18.511-4.816A393,393,0,0,1,481.644,339.528Z\"]\n  };\n  var faBtc = {\n    prefix: 'fab',\n    iconName: 'btc',\n    icon: [384, 512, [], \"f15a\", \"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"]\n  };\n  var faDribbble = {\n    prefix: 'fab',\n    iconName: 'dribbble',\n    icon: [512, 512, [], \"f17d\", \"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"]\n  };\n  var faStumbleuponCircle = {\n    prefix: 'fab',\n    iconName: 'stumbleupon-circle',\n    icon: [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"]\n  };\n  var faInternetExplorer = {\n    prefix: 'fab',\n    iconName: 'internet-explorer',\n    icon: [512, 512, [], \"f26b\", \"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"]\n  };\n  var faStubber = {\n    prefix: 'fab',\n    iconName: 'stubber',\n    icon: [448, 512, [], \"e5c7\", \"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1c49.4 0 71.4 63.6 142.4 63.6c15.6 0 35.9-2.8 55.3-13.3V368c0 61.8-50.4 112-112.3 112H0l41.8-56L0 368l41.7-56L0 256.1l41.8-56L0 144.1 41.8 88 0 32H335.7C397.6 32 448 82.3 448 144.1v51.3c-9.2 36.3-25.9 60.6-55 60.6c-49.6 0-71.6-63.5-142.4-63.5c-35.9 0-95.2 14.6-114.1 101.6h0z\"]\n  };\n  var faTelegram = {\n    prefix: 'fab',\n    iconName: 'telegram',\n    icon: [496, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z\"]\n  };\n  var faTelegramPlane = faTelegram;\n  var faOldRepublic = {\n    prefix: 'fab',\n    iconName: 'old-republic',\n    icon: [496, 512, [], \"f510\", \"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"]\n  };\n  var faOdysee = {\n    prefix: 'fab',\n    iconName: 'odysee',\n    icon: [512, 512, [], \"e5c6\", \"M406.7 463c-42.3 30.8-94.4 49-150.7 49C144.9 512 50.3 441.2 14.9 342.2c2.4 1.7 5.9 3.6 7.9 4.4c16.3 7.4 40.1-5.4 62.9-28.7c6.9-6.9 14.4-12.4 22.8-17.3c18.3-11.9 37.6-20.8 58.4-27.2c0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1c-11-.5-70-3-56 51.1c14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4c.8 4.6 1.1 9.9 1.4 15.5c1.1 21.2 2.3 45.6 35.3 46.4c5.3 0 10.6-.8 15.5-2zm-95.3-23.7c-2-.5-3.5-2.5-3-5c1-2.5 3-3.5 5-3s3.5 3 3 5s-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3c0 2-1 4-3 4c-1.5 .5-3.5-1-4-3c-.5-1.5 1-3.5 3-4zM451.8 421C489.3 376.4 512 318.8 512 256c0-67.5-26.1-128.9-68.8-174.7c-.1 23.5-6.1 48.2-16.8 69.2c-11.9 20.3-49 58.9-69.8 78.7c-.7 .3-1.1 .9-1.5 1.4c-.2 .2-.3 .4-.5 .6c-5 6.9-4 16.8 3 21.8c21.3 15.8 56.4 45.6 59.4 72.8c3.5 34.9 27.9 75.6 34.2 86.2l0 0c.8 1.3 1.3 2.1 1.4 2.4c0 2.2-.4 4.3-.8 6.5zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4s-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4l0 0c-.3 1.4-.7 2.8-1 4.2c-9.5 38.5-30.6 37.6-41.7 37.2c-1.1 0-2-.1-2.9-.1c-5.1 0-6-4-8.9-17.1c-2.6-12.1-6.9-32-17.9-63.6C271.4-2.5 211.4 13.9 165.9 41.1C110.6 74.2 131.5 143 146.1 190.5c.7 2.2 1.4 4.4 2 6.6c-4 4-13.8 7.5-26 11.9c-12.1 4.3-26.6 9.5-40.3 16.9C47.9 243.9 11.5 274.9 2 288.5C.7 277.8 0 267 0 256C0 114.6 114.6 0 256 0c51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4s4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5c1.5 2.5 1 5.4-1.5 6.4c-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3c1.5 .5 3-.5 3-2c.5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54c44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9s-61.9-4.5-64.9-42.6zm89.6 14.9h1c2.5 0 5-2 5-5c2-6.9 1-14.4-2-20.8c-1.5-2-4-3.5-6.4-2.5c-3 1-4.5 4-3.5 6.9c2 4.5 3 9.9 1.5 14.9c-.5 3 1.5 5.9 4.5 6.4zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3c-.2 .1-.4 .2-.6 .2z\"]\n  };\n  var faSquareWhatsapp = {\n    prefix: 'fab',\n    iconName: 'square-whatsapp',\n    icon: [448, 512, [\"whatsapp-square\"], \"f40c\", \"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\"]\n  };\n  var faWhatsappSquare = faSquareWhatsapp;\n  var faNodeJs = {\n    prefix: 'fab',\n    iconName: 'node-js',\n    icon: [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"]\n  };\n  var faEdgeLegacy = {\n    prefix: 'fab',\n    iconName: 'edge-legacy',\n    icon: [512, 512, [], \"e078\", \"M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z\"]\n  };\n  var faSlack = {\n    prefix: 'fab',\n    iconName: 'slack',\n    icon: [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"]\n  };\n  var faSlackHash = faSlack;\n  var faMedrt = {\n    prefix: 'fab',\n    iconName: 'medrt',\n    icon: [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"]\n  };\n  var faUsb = {\n    prefix: 'fab',\n    iconName: 'usb',\n    icon: [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"]\n  };\n  var faTumblr = {\n    prefix: 'fab',\n    iconName: 'tumblr',\n    icon: [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"]\n  };\n  var faVaadin = {\n    prefix: 'fab',\n    iconName: 'vaadin',\n    icon: [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"]\n  };\n  var faQuora = {\n    prefix: 'fab',\n    iconName: 'quora',\n    icon: [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"]\n  };\n  var faReacteurope = {\n    prefix: 'fab',\n    iconName: 'reacteurope',\n    icon: [576, 512, [], \"f75d\", \"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"]\n  };\n  var faMedium = {\n    prefix: 'fab',\n    iconName: 'medium',\n    icon: [640, 512, [62407, \"medium-m\"], \"f23a\", \"M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z\"]\n  };\n  var faMediumM = faMedium;\n  var faAmilia = {\n    prefix: 'fab',\n    iconName: 'amilia',\n    icon: [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"]\n  };\n  var faMixcloud = {\n    prefix: 'fab',\n    iconName: 'mixcloud',\n    icon: [640, 512, [], \"f289\", \"M212.98 346.566H179.789V195.114L185.973 173.47H175.262L137.127 346.566H76.1069L37.7323 173.47H27.276L33.1913 195.114V346.566H0V165H65.6506L102.248 338.096H110.747L147.329 165H212.98L212.98 346.566ZM544.459 283.589L458.434 345.655V307.534L531.329 255.776L458.434 204.017V165.896L544.459 228.231H553.721L640 165.896V204.017L566.866 255.776L640 307.549V345.655L553.721 283.589H544.459ZM430.157 272.311H248.113V239.255H430.157V272.311Z\"]\n  };\n  var faFlipboard = {\n    prefix: 'fab',\n    iconName: 'flipboard',\n    icon: [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"]\n  };\n  var faViacoin = {\n    prefix: 'fab',\n    iconName: 'viacoin',\n    icon: [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"]\n  };\n  var faCriticalRole = {\n    prefix: 'fab',\n    iconName: 'critical-role',\n    icon: [448, 512, [], \"f6c9\", \"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"]\n  };\n  var faSitrox = {\n    prefix: 'fab',\n    iconName: 'sitrox',\n    icon: [448, 512, [], \"e44a\", \"M212.439 0.00846128V0H448V128H64C64 57.6008 141.755 0.475338 212.439 0.00846128ZM237.256 192V192.007C307.135 192.475 384 249.6 384 320H210.809V319.995C140.915 319.563 64 262.424 64 192H237.256ZM235.565 511.993C306.251 511.521 384 454.399 384 384H0V512H235.565V511.993Z\"]\n  };\n  var faDiscourse = {\n    prefix: 'fab',\n    iconName: 'discourse',\n    icon: [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"]\n  };\n  var faJoomla = {\n    prefix: 'fab',\n    iconName: 'joomla',\n    icon: [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"]\n  };\n  var faMastodon = {\n    prefix: 'fab',\n    iconName: 'mastodon',\n    icon: [448, 512, [], \"f4f6\", \"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\"]\n  };\n  var faAirbnb = {\n    prefix: 'fab',\n    iconName: 'airbnb',\n    icon: [448, 512, [], \"f834\", \"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\"]\n  };\n  var faWolfPackBattalion = {\n    prefix: 'fab',\n    iconName: 'wolf-pack-battalion',\n    icon: [512, 512, [], \"f514\", \"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"]\n  };\n  var faBuyNLarge = {\n    prefix: 'fab',\n    iconName: 'buy-n-large',\n    icon: [576, 512, [], \"f8a6\", \"M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z\"]\n  };\n  var faGulp = {\n    prefix: 'fab',\n    iconName: 'gulp',\n    icon: [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"]\n  };\n  var faCreativeCommonsSamplingPlus = {\n    prefix: 'fab',\n    iconName: 'creative-commons-sampling-plus',\n    icon: [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"]\n  };\n  var faStrava = {\n    prefix: 'fab',\n    iconName: 'strava',\n    icon: [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"]\n  };\n  var faEmber = {\n    prefix: 'fab',\n    iconName: 'ember',\n    icon: [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"]\n  };\n  var faCanadianMapleLeaf = {\n    prefix: 'fab',\n    iconName: 'canadian-maple-leaf',\n    icon: [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"]\n  };\n  var faTeamspeak = {\n    prefix: 'fab',\n    iconName: 'teamspeak',\n    icon: [576, 512, [], \"f4f9\", \"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z\"]\n  };\n  var faPushed = {\n    prefix: 'fab',\n    iconName: 'pushed',\n    icon: [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"]\n  };\n  var faWordpressSimple = {\n    prefix: 'fab',\n    iconName: 'wordpress-simple',\n    icon: [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"]\n  };\n  var faNutritionix = {\n    prefix: 'fab',\n    iconName: 'nutritionix',\n    icon: [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"]\n  };\n  var faWodu = {\n    prefix: 'fab',\n    iconName: 'wodu',\n    icon: [640, 512, [], \"e088\", \"M178.414 339.706H141.1L112.166 223.475h-.478L83.228 339.706H45.2L0 168.946H37.548L64.574 285.177h.478L94.707 168.946h35.157l29.178 117.667h.479L187.5 168.946h36.831zM271.4 212.713c38.984 0 64.1 25.828 64.1 65.291 0 39.222-25.111 65.05-64.1 65.05-38.743 0-63.855-25.828-63.855-65.05C207.547 238.541 232.659 212.713 271.4 212.713zm0 104.753c23.2 0 30.133-19.852 30.133-39.462 0-19.852-6.934-39.7-30.133-39.7-27.7 0-29.894 19.85-29.894 39.7C241.508 297.614 248.443 317.466 271.4 317.466zM435.084 323.922h-.478c-7.893 13.392-21.765 19.132-37.548 19.132-37.31 0-55.485-32.045-55.485-66.246 0-33.243 18.415-64.095 54.767-64.095 14.589 0 28.938 6.218 36.831 18.416h.24V168.946h33.96v170.76H435.084zM405.428 238.3c-22.24 0-29.894 19.134-29.894 39.463 0 19.371 8.848 39.7 29.894 39.7 22.482 0 29.178-19.613 29.178-39.94C434.606 257.436 427.432 238.3 405.428 238.3zM592.96 339.706H560.673V322.487h-.718c-8.609 13.87-23.436 20.567-37.786 20.567-36.113 0-45.2-20.328-45.2-50.941V216.061h33.959V285.9c0 20.329 5.979 30.372 21.765 30.372 18.415 0 26.306-10.283 26.306-35.393V216.061H592.96zM602.453 302.876H640v36.83H602.453z\"]\n  };\n  var faGooglePay = {\n    prefix: 'fab',\n    iconName: 'google-pay',\n    icon: [640, 512, [], \"e079\", \"M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z\"]\n  };\n  var faIntercom = {\n    prefix: 'fab',\n    iconName: 'intercom',\n    icon: [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"]\n  };\n  var faZhihu = {\n    prefix: 'fab',\n    iconName: 'zhihu',\n    icon: [640, 512, [], \"f63f\", \"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"]\n  };\n  var faKorvue = {\n    prefix: 'fab',\n    iconName: 'korvue',\n    icon: [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"]\n  };\n  var faPix = {\n    prefix: 'fab',\n    iconName: 'pix',\n    icon: [512, 512, [], \"e43a\", \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"]\n  };\n  var faSteamSymbol = {\n    prefix: 'fab',\n    iconName: 'steam-symbol',\n    icon: [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"]\n  };\n  var icons = {\n    faMonero: faMonero,\n    faHooli: faHooli,\n    faYelp: faYelp,\n    faCcVisa: faCcVisa,\n    faLastfm: faLastfm,\n    faShopware: faShopware,\n    faCreativeCommonsNc: faCreativeCommonsNc,\n    faAws: faAws,\n    faRedhat: faRedhat,\n    faYoast: faYoast,\n    faCloudflare: faCloudflare,\n    faUps: faUps,\n    faWpexplorer: faWpexplorer,\n    faDyalog: faDyalog,\n    faBity: faBity,\n    faStackpath: faStackpath,\n    faBuysellads: faBuysellads,\n    faFirstOrder: faFirstOrder,\n    faModx: faModx,\n    faGuilded: faGuilded,\n    faVnv: faVnv,\n    faSquareJs: faSquareJs,\n    faJsSquare: faJsSquare,\n    faMicrosoft: faMicrosoft,\n    faQq: faQq,\n    faOrcid: faOrcid,\n    faJava: faJava,\n    faInvision: faInvision,\n    faCreativeCommonsPdAlt: faCreativeCommonsPdAlt,\n    faCentercode: faCentercode,\n    faGlideG: faGlideG,\n    faDrupal: faDrupal,\n    faHireAHelper: faHireAHelper,\n    faCreativeCommonsBy: faCreativeCommonsBy,\n    faUnity: faUnity,\n    faWhmcs: faWhmcs,\n    faRocketchat: faRocketchat,\n    faVk: faVk,\n    faUntappd: faUntappd,\n    faMailchimp: faMailchimp,\n    faCss3Alt: faCss3Alt,\n    faSquareReddit: faSquareReddit,\n    faRedditSquare: faRedditSquare,\n    faVimeoV: faVimeoV,\n    faContao: faContao,\n    faSquareFontAwesome: faSquareFontAwesome,\n    faDeskpro: faDeskpro,\n    faSistrix: faSistrix,\n    faSquareInstagram: faSquareInstagram,\n    faInstagramSquare: faInstagramSquare,\n    faBattleNet: faBattleNet,\n    faTheRedYeti: faTheRedYeti,\n    faSquareHackerNews: faSquareHackerNews,\n    faHackerNewsSquare: faHackerNewsSquare,\n    faEdge: faEdge,\n    faNapster: faNapster,\n    faSquareSnapchat: faSquareSnapchat,\n    faSnapchatSquare: faSnapchatSquare,\n    faGooglePlusG: faGooglePlusG,\n    faArtstation: faArtstation,\n    faMarkdown: faMarkdown,\n    faSourcetree: faSourcetree,\n    faGooglePlus: faGooglePlus,\n    faDiaspora: faDiaspora,\n    faFoursquare: faFoursquare,\n    faStackOverflow: faStackOverflow,\n    faGithubAlt: faGithubAlt,\n    faPhoenixSquadron: faPhoenixSquadron,\n    faPagelines: faPagelines,\n    faAlgolia: faAlgolia,\n    faRedRiver: faRedRiver,\n    faCreativeCommonsSa: faCreativeCommonsSa,\n    faSafari: faSafari,\n    faGoogle: faGoogle,\n    faSquareFontAwesomeStroke: faSquareFontAwesomeStroke,\n    faFontAwesomeAlt: faFontAwesomeAlt,\n    faAtlassian: faAtlassian,\n    faLinkedinIn: faLinkedinIn,\n    faDigitalOcean: faDigitalOcean,\n    faNimblr: faNimblr,\n    faChromecast: faChromecast,\n    faEvernote: faEvernote,\n    faHackerNews: faHackerNews,\n    faCreativeCommonsSampling: faCreativeCommonsSampling,\n    faAdversal: faAdversal,\n    faCreativeCommons: faCreativeCommons,\n    faWatchmanMonitoring: faWatchmanMonitoring,\n    faFonticons: faFonticons,\n    faWeixin: faWeixin,\n    faShirtsinbulk: faShirtsinbulk,\n    faCodepen: faCodepen,\n    faGitAlt: faGitAlt,\n    faLyft: faLyft,\n    faRev: faRev,\n    faWindows: faWindows,\n    faWizardsOfTheCoast: faWizardsOfTheCoast,\n    faSquareViadeo: faSquareViadeo,\n    faViadeoSquare: faViadeoSquare,\n    faMeetup: faMeetup,\n    faCentos: faCentos,\n    faAdn: faAdn,\n    faCloudsmith: faCloudsmith,\n    faPiedPiperAlt: faPiedPiperAlt,\n    faSquareDribbble: faSquareDribbble,\n    faDribbbleSquare: faDribbbleSquare,\n    faCodiepie: faCodiepie,\n    faNode: faNode,\n    faMix: faMix,\n    faSteam: faSteam,\n    faCcApplePay: faCcApplePay,\n    faScribd: faScribd,\n    faOpenid: faOpenid,\n    faInstalod: faInstalod,\n    faExpeditedssl: faExpeditedssl,\n    faSellcast: faSellcast,\n    faSquareTwitter: faSquareTwitter,\n    faTwitterSquare: faTwitterSquare,\n    faRProject: faRProject,\n    faDelicious: faDelicious,\n    faFreebsd: faFreebsd,\n    faVuejs: faVuejs,\n    faAccusoft: faAccusoft,\n    faIoxhost: faIoxhost,\n    faFonticonsFi: faFonticonsFi,\n    faAppStore: faAppStore,\n    faCcMastercard: faCcMastercard,\n    faItunesNote: faItunesNote,\n    faGolang: faGolang,\n    faKickstarter: faKickstarter,\n    faGrav: faGrav,\n    faWeibo: faWeibo,\n    faUncharted: faUncharted,\n    faFirstdraft: faFirstdraft,\n    faSquareYoutube: faSquareYoutube,\n    faYoutubeSquare: faYoutubeSquare,\n    faWikipediaW: faWikipediaW,\n    faWpressr: faWpressr,\n    faRendact: faRendact,\n    faAngellist: faAngellist,\n    faGalacticRepublic: faGalacticRepublic,\n    faNfcDirectional: faNfcDirectional,\n    faSkype: faSkype,\n    faJoget: faJoget,\n    faFedora: faFedora,\n    faStripeS: faStripeS,\n    faMeta: faMeta,\n    faLaravel: faLaravel,\n    faHotjar: faHotjar,\n    faBluetoothB: faBluetoothB,\n    faStickerMule: faStickerMule,\n    faCreativeCommonsZero: faCreativeCommonsZero,\n    faHips: faHips,\n    faBehance: faBehance,\n    faReddit: faReddit,\n    faDiscord: faDiscord,\n    faChrome: faChrome,\n    faAppStoreIos: faAppStoreIos,\n    faCcDiscover: faCcDiscover,\n    faWpbeginner: faWpbeginner,\n    faConfluence: faConfluence,\n    faMdb: faMdb,\n    faDochub: faDochub,\n    faAccessibleIcon: faAccessibleIcon,\n    faEbay: faEbay,\n    faAmazon: faAmazon,\n    faUnsplash: faUnsplash,\n    faYarn: faYarn,\n    faSquareSteam: faSquareSteam,\n    faSteamSquare: faSteamSquare,\n    fa500px: fa500px,\n    faSquareVimeo: faSquareVimeo,\n    faVimeoSquare: faVimeoSquare,\n    faAsymmetrik: faAsymmetrik,\n    faFontAwesome: faFontAwesome,\n    faFontAwesomeFlag: faFontAwesomeFlag,\n    faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n    faGratipay: faGratipay,\n    faApple: faApple,\n    faHive: faHive,\n    faGitkraken: faGitkraken,\n    faKeybase: faKeybase,\n    faApplePay: faApplePay,\n    faPadlet: faPadlet,\n    faAmazonPay: faAmazonPay,\n    faSquareGithub: faSquareGithub,\n    faGithubSquare: faGithubSquare,\n    faStumbleupon: faStumbleupon,\n    faFedex: faFedex,\n    faPhoenixFramework: faPhoenixFramework,\n    faShopify: faShopify,\n    faNeos: faNeos,\n    faHackerrank: faHackerrank,\n    faResearchgate: faResearchgate,\n    faSwift: faSwift,\n    faAngular: faAngular,\n    faSpeakap: faSpeakap,\n    faAngrycreative: faAngrycreative,\n    faYCombinator: faYCombinator,\n    faEmpire: faEmpire,\n    faEnvira: faEnvira,\n    faSquareGitlab: faSquareGitlab,\n    faGitlabSquare: faGitlabSquare,\n    faStudiovinari: faStudiovinari,\n    faPiedPiper: faPiedPiper,\n    faWordpress: faWordpress,\n    faProductHunt: faProductHunt,\n    faFirefox: faFirefox,\n    faLinode: faLinode,\n    faGoodreads: faGoodreads,\n    faSquareOdnoklassniki: faSquareOdnoklassniki,\n    faOdnoklassnikiSquare: faOdnoklassnikiSquare,\n    faJsfiddle: faJsfiddle,\n    faSith: faSith,\n    faThemeisle: faThemeisle,\n    faPage4: faPage4,\n    faHashnode: faHashnode,\n    faReact: faReact,\n    faCcPaypal: faCcPaypal,\n    faSquarespace: faSquarespace,\n    faCcStripe: faCcStripe,\n    faCreativeCommonsShare: faCreativeCommonsShare,\n    faBitcoin: faBitcoin,\n    faKeycdn: faKeycdn,\n    faOpera: faOpera,\n    faItchIo: faItchIo,\n    faUmbraco: faUmbraco,\n    faGalacticSenate: faGalacticSenate,\n    faUbuntu: faUbuntu,\n    faDraft2digital: faDraft2digital,\n    faStripe: faStripe,\n    faHouzz: faHouzz,\n    faGg: faGg,\n    faDhl: faDhl,\n    faSquarePinterest: faSquarePinterest,\n    faPinterestSquare: faPinterestSquare,\n    faXing: faXing,\n    faBlackberry: faBlackberry,\n    faCreativeCommonsPd: faCreativeCommonsPd,\n    faPlaystation: faPlaystation,\n    faQuinscape: faQuinscape,\n    faLess: faLess,\n    faBloggerB: faBloggerB,\n    faOpencart: faOpencart,\n    faVine: faVine,\n    faPaypal: faPaypal,\n    faGitlab: faGitlab,\n    faTypo3: faTypo3,\n    faRedditAlien: faRedditAlien,\n    faYahoo: faYahoo,\n    faDailymotion: faDailymotion,\n    faAffiliatetheme: faAffiliatetheme,\n    faPiedPiperPp: faPiedPiperPp,\n    faBootstrap: faBootstrap,\n    faOdnoklassniki: faOdnoklassniki,\n    faNfcSymbol: faNfcSymbol,\n    faEthereum: faEthereum,\n    faSpeakerDeck: faSpeakerDeck,\n    faCreativeCommonsNcEu: faCreativeCommonsNcEu,\n    faPatreon: faPatreon,\n    faAvianex: faAvianex,\n    faEllo: faEllo,\n    faGofore: faGofore,\n    faBimobject: faBimobject,\n    faFacebookF: faFacebookF,\n    faSquareGooglePlus: faSquareGooglePlus,\n    faGooglePlusSquare: faGooglePlusSquare,\n    faMandalorian: faMandalorian,\n    faFirstOrderAlt: faFirstOrderAlt,\n    faOsi: faOsi,\n    faGoogleWallet: faGoogleWallet,\n    faDAndDBeyond: faDAndDBeyond,\n    faPeriscope: faPeriscope,\n    faFulcrum: faFulcrum,\n    faCloudscale: faCloudscale,\n    faForumbee: faForumbee,\n    faMizuni: faMizuni,\n    faSchlix: faSchlix,\n    faSquareXing: faSquareXing,\n    faXingSquare: faXingSquare,\n    faBandcamp: faBandcamp,\n    faWpforms: faWpforms,\n    faCloudversify: faCloudversify,\n    faUsps: faUsps,\n    faMegaport: faMegaport,\n    faMagento: faMagento,\n    faSpotify: faSpotify,\n    faOptinMonster: faOptinMonster,\n    faFly: faFly,\n    faAviato: faAviato,\n    faItunes: faItunes,\n    faCuttlefish: faCuttlefish,\n    faBlogger: faBlogger,\n    faFlickr: faFlickr,\n    faViber: faViber,\n    faSoundcloud: faSoundcloud,\n    faDigg: faDigg,\n    faTencentWeibo: faTencentWeibo,\n    faSymfony: faSymfony,\n    faMaxcdn: faMaxcdn,\n    faEtsy: faEtsy,\n    faFacebookMessenger: faFacebookMessenger,\n    faAudible: faAudible,\n    faThinkPeaks: faThinkPeaks,\n    faBilibili: faBilibili,\n    faErlang: faErlang,\n    faCottonBureau: faCottonBureau,\n    faDashcube: faDashcube,\n    fa42Group: fa42Group,\n    faInnosoft: faInnosoft,\n    faStackExchange: faStackExchange,\n    faElementor: faElementor,\n    faSquarePiedPiper: faSquarePiedPiper,\n    faPiedPiperSquare: faPiedPiperSquare,\n    faCreativeCommonsNd: faCreativeCommonsNd,\n    faPalfed: faPalfed,\n    faSuperpowers: faSuperpowers,\n    faResolving: faResolving,\n    faXbox: faXbox,\n    faSearchengin: faSearchengin,\n    faTiktok: faTiktok,\n    faSquareFacebook: faSquareFacebook,\n    faFacebookSquare: faFacebookSquare,\n    faRenren: faRenren,\n    faLinux: faLinux,\n    faGlide: faGlide,\n    faLinkedin: faLinkedin,\n    faHubspot: faHubspot,\n    faDeploydog: faDeploydog,\n    faTwitch: faTwitch,\n    faRavelry: faRavelry,\n    faMixer: faMixer,\n    faSquareLastfm: faSquareLastfm,\n    faLastfmSquare: faLastfmSquare,\n    faVimeo: faVimeo,\n    faMendeley: faMendeley,\n    faUniregistry: faUniregistry,\n    faFigma: faFigma,\n    faCreativeCommonsRemix: faCreativeCommonsRemix,\n    faCcAmazonPay: faCcAmazonPay,\n    faDropbox: faDropbox,\n    faInstagram: faInstagram,\n    faCmplid: faCmplid,\n    faFacebook: faFacebook,\n    faGripfire: faGripfire,\n    faJediOrder: faJediOrder,\n    faUikit: faUikit,\n    faFortAwesomeAlt: faFortAwesomeAlt,\n    faPhabricator: faPhabricator,\n    faUssunnah: faUssunnah,\n    faEarlybirds: faEarlybirds,\n    faTradeFederation: faTradeFederation,\n    faAutoprefixer: faAutoprefixer,\n    faWhatsapp: faWhatsapp,\n    faSlideshare: faSlideshare,\n    faGooglePlay: faGooglePlay,\n    faViadeo: faViadeo,\n    faLine: faLine,\n    faGoogleDrive: faGoogleDrive,\n    faServicestack: faServicestack,\n    faSimplybuilt: faSimplybuilt,\n    faBitbucket: faBitbucket,\n    faImdb: faImdb,\n    faDeezer: faDeezer,\n    faRaspberryPi: faRaspberryPi,\n    faJira: faJira,\n    faDocker: faDocker,\n    faScreenpal: faScreenpal,\n    faBluetooth: faBluetooth,\n    faGitter: faGitter,\n    faDAndD: faDAndD,\n    faMicroblog: faMicroblog,\n    faCcDinersClub: faCcDinersClub,\n    faGgCircle: faGgCircle,\n    faPiedPiperHat: faPiedPiperHat,\n    faKickstarterK: faKickstarterK,\n    faYandex: faYandex,\n    faReadme: faReadme,\n    faHtml5: faHtml5,\n    faSellsy: faSellsy,\n    faSass: faSass,\n    faWirsindhandwerk: faWirsindhandwerk,\n    faWsh: faWsh,\n    faBuromobelexperte: faBuromobelexperte,\n    faSalesforce: faSalesforce,\n    faOctopusDeploy: faOctopusDeploy,\n    faMedapps: faMedapps,\n    faNs8: faNs8,\n    faPinterestP: faPinterestP,\n    faApper: faApper,\n    faFortAwesome: faFortAwesome,\n    faWaze: faWaze,\n    faCcJcb: faCcJcb,\n    faSnapchat: faSnapchat,\n    faSnapchatGhost: faSnapchatGhost,\n    faFantasyFlightGames: faFantasyFlightGames,\n    faRust: faRust,\n    faWix: faWix,\n    faSquareBehance: faSquareBehance,\n    faBehanceSquare: faBehanceSquare,\n    faSupple: faSupple,\n    faRebel: faRebel,\n    faCss3: faCss3,\n    faStaylinked: faStaylinked,\n    faKaggle: faKaggle,\n    faSpaceAwesome: faSpaceAwesome,\n    faDeviantart: faDeviantart,\n    faCpanel: faCpanel,\n    faGoodreadsG: faGoodreadsG,\n    faSquareGit: faSquareGit,\n    faGitSquare: faGitSquare,\n    faSquareTumblr: faSquareTumblr,\n    faTumblrSquare: faTumblrSquare,\n    faTrello: faTrello,\n    faCreativeCommonsNcJp: faCreativeCommonsNcJp,\n    faGetPocket: faGetPocket,\n    faPerbyte: faPerbyte,\n    faGrunt: faGrunt,\n    faWeebly: faWeebly,\n    faConnectdevelop: faConnectdevelop,\n    faLeanpub: faLeanpub,\n    faBlackTie: faBlackTie,\n    faThemeco: faThemeco,\n    faPython: faPython,\n    faAndroid: faAndroid,\n    faBots: faBots,\n    faFreeCodeCamp: faFreeCodeCamp,\n    faHornbill: faHornbill,\n    faJs: faJs,\n    faIdeal: faIdeal,\n    faGit: faGit,\n    faDev: faDev,\n    faSketch: faSketch,\n    faYandexInternational: faYandexInternational,\n    faCcAmex: faCcAmex,\n    faUber: faUber,\n    faGithub: faGithub,\n    faPhp: faPhp,\n    faAlipay: faAlipay,\n    faYoutube: faYoutube,\n    faSkyatlas: faSkyatlas,\n    faFirefoxBrowser: faFirefoxBrowser,\n    faReplyd: faReplyd,\n    faSuse: faSuse,\n    faJenkins: faJenkins,\n    faTwitter: faTwitter,\n    faRockrms: faRockrms,\n    faPinterest: faPinterest,\n    faBuffer: faBuffer,\n    faNpm: faNpm,\n    faYammer: faYammer,\n    faBtc: faBtc,\n    faDribbble: faDribbble,\n    faStumbleuponCircle: faStumbleuponCircle,\n    faInternetExplorer: faInternetExplorer,\n    faStubber: faStubber,\n    faTelegram: faTelegram,\n    faTelegramPlane: faTelegramPlane,\n    faOldRepublic: faOldRepublic,\n    faOdysee: faOdysee,\n    faSquareWhatsapp: faSquareWhatsapp,\n    faWhatsappSquare: faWhatsappSquare,\n    faNodeJs: faNodeJs,\n    faEdgeLegacy: faEdgeLegacy,\n    faSlack: faSlack,\n    faSlackHash: faSlackHash,\n    faMedrt: faMedrt,\n    faUsb: faUsb,\n    faTumblr: faTumblr,\n    faVaadin: faVaadin,\n    faQuora: faQuora,\n    faReacteurope: faReacteurope,\n    faMedium: faMedium,\n    faMediumM: faMediumM,\n    faAmilia: faAmilia,\n    faMixcloud: faMixcloud,\n    faFlipboard: faFlipboard,\n    faViacoin: faViacoin,\n    faCriticalRole: faCriticalRole,\n    faSitrox: faSitrox,\n    faDiscourse: faDiscourse,\n    faJoomla: faJoomla,\n    faMastodon: faMastodon,\n    faAirbnb: faAirbnb,\n    faWolfPackBattalion: faWolfPackBattalion,\n    faBuyNLarge: faBuyNLarge,\n    faGulp: faGulp,\n    faCreativeCommonsSamplingPlus: faCreativeCommonsSamplingPlus,\n    faStrava: faStrava,\n    faEmber: faEmber,\n    faCanadianMapleLeaf: faCanadianMapleLeaf,\n    faTeamspeak: faTeamspeak,\n    faPushed: faPushed,\n    faWordpressSimple: faWordpressSimple,\n    faNutritionix: faNutritionix,\n    faWodu: faWodu,\n    faGooglePay: faGooglePay,\n    faIntercom: faIntercom,\n    faZhihu: faZhihu,\n    faKorvue: faKorvue,\n    faPix: faPix,\n    faSteamSymbol: faSteamSymbol\n  };\n\n  exports.fab = icons;\n  exports.prefix = prefix;\n  exports.faMonero = faMonero;\n  exports.faHooli = faHooli;\n  exports.faYelp = faYelp;\n  exports.faCcVisa = faCcVisa;\n  exports.faLastfm = faLastfm;\n  exports.faShopware = faShopware;\n  exports.faCreativeCommonsNc = faCreativeCommonsNc;\n  exports.faAws = faAws;\n  exports.faRedhat = faRedhat;\n  exports.faYoast = faYoast;\n  exports.faCloudflare = faCloudflare;\n  exports.faUps = faUps;\n  exports.faWpexplorer = faWpexplorer;\n  exports.faDyalog = faDyalog;\n  exports.faBity = faBity;\n  exports.faStackpath = faStackpath;\n  exports.faBuysellads = faBuysellads;\n  exports.faFirstOrder = faFirstOrder;\n  exports.faModx = faModx;\n  exports.faGuilded = faGuilded;\n  exports.faVnv = faVnv;\n  exports.faSquareJs = faSquareJs;\n  exports.faJsSquare = faJsSquare;\n  exports.faMicrosoft = faMicrosoft;\n  exports.faQq = faQq;\n  exports.faOrcid = faOrcid;\n  exports.faJava = faJava;\n  exports.faInvision = faInvision;\n  exports.faCreativeCommonsPdAlt = faCreativeCommonsPdAlt;\n  exports.faCentercode = faCentercode;\n  exports.faGlideG = faGlideG;\n  exports.faDrupal = faDrupal;\n  exports.faHireAHelper = faHireAHelper;\n  exports.faCreativeCommonsBy = faCreativeCommonsBy;\n  exports.faUnity = faUnity;\n  exports.faWhmcs = faWhmcs;\n  exports.faRocketchat = faRocketchat;\n  exports.faVk = faVk;\n  exports.faUntappd = faUntappd;\n  exports.faMailchimp = faMailchimp;\n  exports.faCss3Alt = faCss3Alt;\n  exports.faSquareReddit = faSquareReddit;\n  exports.faRedditSquare = faRedditSquare;\n  exports.faVimeoV = faVimeoV;\n  exports.faContao = faContao;\n  exports.faSquareFontAwesome = faSquareFontAwesome;\n  exports.faDeskpro = faDeskpro;\n  exports.faSistrix = faSistrix;\n  exports.faSquareInstagram = faSquareInstagram;\n  exports.faInstagramSquare = faInstagramSquare;\n  exports.faBattleNet = faBattleNet;\n  exports.faTheRedYeti = faTheRedYeti;\n  exports.faSquareHackerNews = faSquareHackerNews;\n  exports.faHackerNewsSquare = faHackerNewsSquare;\n  exports.faEdge = faEdge;\n  exports.faNapster = faNapster;\n  exports.faSquareSnapchat = faSquareSnapchat;\n  exports.faSnapchatSquare = faSnapchatSquare;\n  exports.faGooglePlusG = faGooglePlusG;\n  exports.faArtstation = faArtstation;\n  exports.faMarkdown = faMarkdown;\n  exports.faSourcetree = faSourcetree;\n  exports.faGooglePlus = faGooglePlus;\n  exports.faDiaspora = faDiaspora;\n  exports.faFoursquare = faFoursquare;\n  exports.faStackOverflow = faStackOverflow;\n  exports.faGithubAlt = faGithubAlt;\n  exports.faPhoenixSquadron = faPhoenixSquadron;\n  exports.faPagelines = faPagelines;\n  exports.faAlgolia = faAlgolia;\n  exports.faRedRiver = faRedRiver;\n  exports.faCreativeCommonsSa = faCreativeCommonsSa;\n  exports.faSafari = faSafari;\n  exports.faGoogle = faGoogle;\n  exports.faSquareFontAwesomeStroke = faSquareFontAwesomeStroke;\n  exports.faFontAwesomeAlt = faFontAwesomeAlt;\n  exports.faAtlassian = faAtlassian;\n  exports.faLinkedinIn = faLinkedinIn;\n  exports.faDigitalOcean = faDigitalOcean;\n  exports.faNimblr = faNimblr;\n  exports.faChromecast = faChromecast;\n  exports.faEvernote = faEvernote;\n  exports.faHackerNews = faHackerNews;\n  exports.faCreativeCommonsSampling = faCreativeCommonsSampling;\n  exports.faAdversal = faAdversal;\n  exports.faCreativeCommons = faCreativeCommons;\n  exports.faWatchmanMonitoring = faWatchmanMonitoring;\n  exports.faFonticons = faFonticons;\n  exports.faWeixin = faWeixin;\n  exports.faShirtsinbulk = faShirtsinbulk;\n  exports.faCodepen = faCodepen;\n  exports.faGitAlt = faGitAlt;\n  exports.faLyft = faLyft;\n  exports.faRev = faRev;\n  exports.faWindows = faWindows;\n  exports.faWizardsOfTheCoast = faWizardsOfTheCoast;\n  exports.faSquareViadeo = faSquareViadeo;\n  exports.faViadeoSquare = faViadeoSquare;\n  exports.faMeetup = faMeetup;\n  exports.faCentos = faCentos;\n  exports.faAdn = faAdn;\n  exports.faCloudsmith = faCloudsmith;\n  exports.faPiedPiperAlt = faPiedPiperAlt;\n  exports.faSquareDribbble = faSquareDribbble;\n  exports.faDribbbleSquare = faDribbbleSquare;\n  exports.faCodiepie = faCodiepie;\n  exports.faNode = faNode;\n  exports.faMix = faMix;\n  exports.faSteam = faSteam;\n  exports.faCcApplePay = faCcApplePay;\n  exports.faScribd = faScribd;\n  exports.faOpenid = faOpenid;\n  exports.faInstalod = faInstalod;\n  exports.faExpeditedssl = faExpeditedssl;\n  exports.faSellcast = faSellcast;\n  exports.faSquareTwitter = faSquareTwitter;\n  exports.faTwitterSquare = faTwitterSquare;\n  exports.faRProject = faRProject;\n  exports.faDelicious = faDelicious;\n  exports.faFreebsd = faFreebsd;\n  exports.faVuejs = faVuejs;\n  exports.faAccusoft = faAccusoft;\n  exports.faIoxhost = faIoxhost;\n  exports.faFonticonsFi = faFonticonsFi;\n  exports.faAppStore = faAppStore;\n  exports.faCcMastercard = faCcMastercard;\n  exports.faItunesNote = faItunesNote;\n  exports.faGolang = faGolang;\n  exports.faKickstarter = faKickstarter;\n  exports.faGrav = faGrav;\n  exports.faWeibo = faWeibo;\n  exports.faUncharted = faUncharted;\n  exports.faFirstdraft = faFirstdraft;\n  exports.faSquareYoutube = faSquareYoutube;\n  exports.faYoutubeSquare = faYoutubeSquare;\n  exports.faWikipediaW = faWikipediaW;\n  exports.faWpressr = faWpressr;\n  exports.faRendact = faRendact;\n  exports.faAngellist = faAngellist;\n  exports.faGalacticRepublic = faGalacticRepublic;\n  exports.faNfcDirectional = faNfcDirectional;\n  exports.faSkype = faSkype;\n  exports.faJoget = faJoget;\n  exports.faFedora = faFedora;\n  exports.faStripeS = faStripeS;\n  exports.faMeta = faMeta;\n  exports.faLaravel = faLaravel;\n  exports.faHotjar = faHotjar;\n  exports.faBluetoothB = faBluetoothB;\n  exports.faStickerMule = faStickerMule;\n  exports.faCreativeCommonsZero = faCreativeCommonsZero;\n  exports.faHips = faHips;\n  exports.faBehance = faBehance;\n  exports.faReddit = faReddit;\n  exports.faDiscord = faDiscord;\n  exports.faChrome = faChrome;\n  exports.faAppStoreIos = faAppStoreIos;\n  exports.faCcDiscover = faCcDiscover;\n  exports.faWpbeginner = faWpbeginner;\n  exports.faConfluence = faConfluence;\n  exports.faMdb = faMdb;\n  exports.faDochub = faDochub;\n  exports.faAccessibleIcon = faAccessibleIcon;\n  exports.faEbay = faEbay;\n  exports.faAmazon = faAmazon;\n  exports.faUnsplash = faUnsplash;\n  exports.faYarn = faYarn;\n  exports.faSquareSteam = faSquareSteam;\n  exports.faSteamSquare = faSteamSquare;\n  exports.fa500px = fa500px;\n  exports.faSquareVimeo = faSquareVimeo;\n  exports.faVimeoSquare = faVimeoSquare;\n  exports.faAsymmetrik = faAsymmetrik;\n  exports.faFontAwesome = faFontAwesome;\n  exports.faFontAwesomeFlag = faFontAwesomeFlag;\n  exports.faFontAwesomeLogoFull = faFontAwesomeLogoFull;\n  exports.faGratipay = faGratipay;\n  exports.faApple = faApple;\n  exports.faHive = faHive;\n  exports.faGitkraken = faGitkraken;\n  exports.faKeybase = faKeybase;\n  exports.faApplePay = faApplePay;\n  exports.faPadlet = faPadlet;\n  exports.faAmazonPay = faAmazonPay;\n  exports.faSquareGithub = faSquareGithub;\n  exports.faGithubSquare = faGithubSquare;\n  exports.faStumbleupon = faStumbleupon;\n  exports.faFedex = faFedex;\n  exports.faPhoenixFramework = faPhoenixFramework;\n  exports.faShopify = faShopify;\n  exports.faNeos = faNeos;\n  exports.faHackerrank = faHackerrank;\n  exports.faResearchgate = faResearchgate;\n  exports.faSwift = faSwift;\n  exports.faAngular = faAngular;\n  exports.faSpeakap = faSpeakap;\n  exports.faAngrycreative = faAngrycreative;\n  exports.faYCombinator = faYCombinator;\n  exports.faEmpire = faEmpire;\n  exports.faEnvira = faEnvira;\n  exports.faSquareGitlab = faSquareGitlab;\n  exports.faGitlabSquare = faGitlabSquare;\n  exports.faStudiovinari = faStudiovinari;\n  exports.faPiedPiper = faPiedPiper;\n  exports.faWordpress = faWordpress;\n  exports.faProductHunt = faProductHunt;\n  exports.faFirefox = faFirefox;\n  exports.faLinode = faLinode;\n  exports.faGoodreads = faGoodreads;\n  exports.faSquareOdnoklassniki = faSquareOdnoklassniki;\n  exports.faOdnoklassnikiSquare = faOdnoklassnikiSquare;\n  exports.faJsfiddle = faJsfiddle;\n  exports.faSith = faSith;\n  exports.faThemeisle = faThemeisle;\n  exports.faPage4 = faPage4;\n  exports.faHashnode = faHashnode;\n  exports.faReact = faReact;\n  exports.faCcPaypal = faCcPaypal;\n  exports.faSquarespace = faSquarespace;\n  exports.faCcStripe = faCcStripe;\n  exports.faCreativeCommonsShare = faCreativeCommonsShare;\n  exports.faBitcoin = faBitcoin;\n  exports.faKeycdn = faKeycdn;\n  exports.faOpera = faOpera;\n  exports.faItchIo = faItchIo;\n  exports.faUmbraco = faUmbraco;\n  exports.faGalacticSenate = faGalacticSenate;\n  exports.faUbuntu = faUbuntu;\n  exports.faDraft2digital = faDraft2digital;\n  exports.faStripe = faStripe;\n  exports.faHouzz = faHouzz;\n  exports.faGg = faGg;\n  exports.faDhl = faDhl;\n  exports.faSquarePinterest = faSquarePinterest;\n  exports.faPinterestSquare = faPinterestSquare;\n  exports.faXing = faXing;\n  exports.faBlackberry = faBlackberry;\n  exports.faCreativeCommonsPd = faCreativeCommonsPd;\n  exports.faPlaystation = faPlaystation;\n  exports.faQuinscape = faQuinscape;\n  exports.faLess = faLess;\n  exports.faBloggerB = faBloggerB;\n  exports.faOpencart = faOpencart;\n  exports.faVine = faVine;\n  exports.faPaypal = faPaypal;\n  exports.faGitlab = faGitlab;\n  exports.faTypo3 = faTypo3;\n  exports.faRedditAlien = faRedditAlien;\n  exports.faYahoo = faYahoo;\n  exports.faDailymotion = faDailymotion;\n  exports.faAffiliatetheme = faAffiliatetheme;\n  exports.faPiedPiperPp = faPiedPiperPp;\n  exports.faBootstrap = faBootstrap;\n  exports.faOdnoklassniki = faOdnoklassniki;\n  exports.faNfcSymbol = faNfcSymbol;\n  exports.faEthereum = faEthereum;\n  exports.faSpeakerDeck = faSpeakerDeck;\n  exports.faCreativeCommonsNcEu = faCreativeCommonsNcEu;\n  exports.faPatreon = faPatreon;\n  exports.faAvianex = faAvianex;\n  exports.faEllo = faEllo;\n  exports.faGofore = faGofore;\n  exports.faBimobject = faBimobject;\n  exports.faFacebookF = faFacebookF;\n  exports.faSquareGooglePlus = faSquareGooglePlus;\n  exports.faGooglePlusSquare = faGooglePlusSquare;\n  exports.faMandalorian = faMandalorian;\n  exports.faFirstOrderAlt = faFirstOrderAlt;\n  exports.faOsi = faOsi;\n  exports.faGoogleWallet = faGoogleWallet;\n  exports.faDAndDBeyond = faDAndDBeyond;\n  exports.faPeriscope = faPeriscope;\n  exports.faFulcrum = faFulcrum;\n  exports.faCloudscale = faCloudscale;\n  exports.faForumbee = faForumbee;\n  exports.faMizuni = faMizuni;\n  exports.faSchlix = faSchlix;\n  exports.faSquareXing = faSquareXing;\n  exports.faXingSquare = faXingSquare;\n  exports.faBandcamp = faBandcamp;\n  exports.faWpforms = faWpforms;\n  exports.faCloudversify = faCloudversify;\n  exports.faUsps = faUsps;\n  exports.faMegaport = faMegaport;\n  exports.faMagento = faMagento;\n  exports.faSpotify = faSpotify;\n  exports.faOptinMonster = faOptinMonster;\n  exports.faFly = faFly;\n  exports.faAviato = faAviato;\n  exports.faItunes = faItunes;\n  exports.faCuttlefish = faCuttlefish;\n  exports.faBlogger = faBlogger;\n  exports.faFlickr = faFlickr;\n  exports.faViber = faViber;\n  exports.faSoundcloud = faSoundcloud;\n  exports.faDigg = faDigg;\n  exports.faTencentWeibo = faTencentWeibo;\n  exports.faSymfony = faSymfony;\n  exports.faMaxcdn = faMaxcdn;\n  exports.faEtsy = faEtsy;\n  exports.faFacebookMessenger = faFacebookMessenger;\n  exports.faAudible = faAudible;\n  exports.faThinkPeaks = faThinkPeaks;\n  exports.faBilibili = faBilibili;\n  exports.faErlang = faErlang;\n  exports.faCottonBureau = faCottonBureau;\n  exports.faDashcube = faDashcube;\n  exports.fa42Group = fa42Group;\n  exports.faInnosoft = faInnosoft;\n  exports.faStackExchange = faStackExchange;\n  exports.faElementor = faElementor;\n  exports.faSquarePiedPiper = faSquarePiedPiper;\n  exports.faPiedPiperSquare = faPiedPiperSquare;\n  exports.faCreativeCommonsNd = faCreativeCommonsNd;\n  exports.faPalfed = faPalfed;\n  exports.faSuperpowers = faSuperpowers;\n  exports.faResolving = faResolving;\n  exports.faXbox = faXbox;\n  exports.faSearchengin = faSearchengin;\n  exports.faTiktok = faTiktok;\n  exports.faSquareFacebook = faSquareFacebook;\n  exports.faFacebookSquare = faFacebookSquare;\n  exports.faRenren = faRenren;\n  exports.faLinux = faLinux;\n  exports.faGlide = faGlide;\n  exports.faLinkedin = faLinkedin;\n  exports.faHubspot = faHubspot;\n  exports.faDeploydog = faDeploydog;\n  exports.faTwitch = faTwitch;\n  exports.faRavelry = faRavelry;\n  exports.faMixer = faMixer;\n  exports.faSquareLastfm = faSquareLastfm;\n  exports.faLastfmSquare = faLastfmSquare;\n  exports.faVimeo = faVimeo;\n  exports.faMendeley = faMendeley;\n  exports.faUniregistry = faUniregistry;\n  exports.faFigma = faFigma;\n  exports.faCreativeCommonsRemix = faCreativeCommonsRemix;\n  exports.faCcAmazonPay = faCcAmazonPay;\n  exports.faDropbox = faDropbox;\n  exports.faInstagram = faInstagram;\n  exports.faCmplid = faCmplid;\n  exports.faFacebook = faFacebook;\n  exports.faGripfire = faGripfire;\n  exports.faJediOrder = faJediOrder;\n  exports.faUikit = faUikit;\n  exports.faFortAwesomeAlt = faFortAwesomeAlt;\n  exports.faPhabricator = faPhabricator;\n  exports.faUssunnah = faUssunnah;\n  exports.faEarlybirds = faEarlybirds;\n  exports.faTradeFederation = faTradeFederation;\n  exports.faAutoprefixer = faAutoprefixer;\n  exports.faWhatsapp = faWhatsapp;\n  exports.faSlideshare = faSlideshare;\n  exports.faGooglePlay = faGooglePlay;\n  exports.faViadeo = faViadeo;\n  exports.faLine = faLine;\n  exports.faGoogleDrive = faGoogleDrive;\n  exports.faServicestack = faServicestack;\n  exports.faSimplybuilt = faSimplybuilt;\n  exports.faBitbucket = faBitbucket;\n  exports.faImdb = faImdb;\n  exports.faDeezer = faDeezer;\n  exports.faRaspberryPi = faRaspberryPi;\n  exports.faJira = faJira;\n  exports.faDocker = faDocker;\n  exports.faScreenpal = faScreenpal;\n  exports.faBluetooth = faBluetooth;\n  exports.faGitter = faGitter;\n  exports.faDAndD = faDAndD;\n  exports.faMicroblog = faMicroblog;\n  exports.faCcDinersClub = faCcDinersClub;\n  exports.faGgCircle = faGgCircle;\n  exports.faPiedPiperHat = faPiedPiperHat;\n  exports.faKickstarterK = faKickstarterK;\n  exports.faYandex = faYandex;\n  exports.faReadme = faReadme;\n  exports.faHtml5 = faHtml5;\n  exports.faSellsy = faSellsy;\n  exports.faSass = faSass;\n  exports.faWirsindhandwerk = faWirsindhandwerk;\n  exports.faWsh = faWsh;\n  exports.faBuromobelexperte = faBuromobelexperte;\n  exports.faSalesforce = faSalesforce;\n  exports.faOctopusDeploy = faOctopusDeploy;\n  exports.faMedapps = faMedapps;\n  exports.faNs8 = faNs8;\n  exports.faPinterestP = faPinterestP;\n  exports.faApper = faApper;\n  exports.faFortAwesome = faFortAwesome;\n  exports.faWaze = faWaze;\n  exports.faCcJcb = faCcJcb;\n  exports.faSnapchat = faSnapchat;\n  exports.faSnapchatGhost = faSnapchatGhost;\n  exports.faFantasyFlightGames = faFantasyFlightGames;\n  exports.faRust = faRust;\n  exports.faWix = faWix;\n  exports.faSquareBehance = faSquareBehance;\n  exports.faBehanceSquare = faBehanceSquare;\n  exports.faSupple = faSupple;\n  exports.faRebel = faRebel;\n  exports.faCss3 = faCss3;\n  exports.faStaylinked = faStaylinked;\n  exports.faKaggle = faKaggle;\n  exports.faSpaceAwesome = faSpaceAwesome;\n  exports.faDeviantart = faDeviantart;\n  exports.faCpanel = faCpanel;\n  exports.faGoodreadsG = faGoodreadsG;\n  exports.faSquareGit = faSquareGit;\n  exports.faGitSquare = faGitSquare;\n  exports.faSquareTumblr = faSquareTumblr;\n  exports.faTumblrSquare = faTumblrSquare;\n  exports.faTrello = faTrello;\n  exports.faCreativeCommonsNcJp = faCreativeCommonsNcJp;\n  exports.faGetPocket = faGetPocket;\n  exports.faPerbyte = faPerbyte;\n  exports.faGrunt = faGrunt;\n  exports.faWeebly = faWeebly;\n  exports.faConnectdevelop = faConnectdevelop;\n  exports.faLeanpub = faLeanpub;\n  exports.faBlackTie = faBlackTie;\n  exports.faThemeco = faThemeco;\n  exports.faPython = faPython;\n  exports.faAndroid = faAndroid;\n  exports.faBots = faBots;\n  exports.faFreeCodeCamp = faFreeCodeCamp;\n  exports.faHornbill = faHornbill;\n  exports.faJs = faJs;\n  exports.faIdeal = faIdeal;\n  exports.faGit = faGit;\n  exports.faDev = faDev;\n  exports.faSketch = faSketch;\n  exports.faYandexInternational = faYandexInternational;\n  exports.faCcAmex = faCcAmex;\n  exports.faUber = faUber;\n  exports.faGithub = faGithub;\n  exports.faPhp = faPhp;\n  exports.faAlipay = faAlipay;\n  exports.faYoutube = faYoutube;\n  exports.faSkyatlas = faSkyatlas;\n  exports.faFirefoxBrowser = faFirefoxBrowser;\n  exports.faReplyd = faReplyd;\n  exports.faSuse = faSuse;\n  exports.faJenkins = faJenkins;\n  exports.faTwitter = faTwitter;\n  exports.faRockrms = faRockrms;\n  exports.faPinterest = faPinterest;\n  exports.faBuffer = faBuffer;\n  exports.faNpm = faNpm;\n  exports.faYammer = faYammer;\n  exports.faBtc = faBtc;\n  exports.faDribbble = faDribbble;\n  exports.faStumbleuponCircle = faStumbleuponCircle;\n  exports.faInternetExplorer = faInternetExplorer;\n  exports.faStubber = faStubber;\n  exports.faTelegram = faTelegram;\n  exports.faTelegramPlane = faTelegramPlane;\n  exports.faOldRepublic = faOldRepublic;\n  exports.faOdysee = faOdysee;\n  exports.faSquareWhatsapp = faSquareWhatsapp;\n  exports.faWhatsappSquare = faWhatsappSquare;\n  exports.faNodeJs = faNodeJs;\n  exports.faEdgeLegacy = faEdgeLegacy;\n  exports.faSlack = faSlack;\n  exports.faSlackHash = faSlackHash;\n  exports.faMedrt = faMedrt;\n  exports.faUsb = faUsb;\n  exports.faTumblr = faTumblr;\n  exports.faVaadin = faVaadin;\n  exports.faQuora = faQuora;\n  exports.faReacteurope = faReacteurope;\n  exports.faMedium = faMedium;\n  exports.faMediumM = faMediumM;\n  exports.faAmilia = faAmilia;\n  exports.faMixcloud = faMixcloud;\n  exports.faFlipboard = faFlipboard;\n  exports.faViacoin = faViacoin;\n  exports.faCriticalRole = faCriticalRole;\n  exports.faSitrox = faSitrox;\n  exports.faDiscourse = faDiscourse;\n  exports.faJoomla = faJoomla;\n  exports.faMastodon = faMastodon;\n  exports.faAirbnb = faAirbnb;\n  exports.faWolfPackBattalion = faWolfPackBattalion;\n  exports.faBuyNLarge = faBuyNLarge;\n  exports.faGulp = faGulp;\n  exports.faCreativeCommonsSamplingPlus = faCreativeCommonsSamplingPlus;\n  exports.faStrava = faStrava;\n  exports.faEmber = faEmber;\n  exports.faCanadianMapleLeaf = faCanadianMapleLeaf;\n  exports.faTeamspeak = faTeamspeak;\n  exports.faPushed = faPushed;\n  exports.faWordpressSimple = faWordpressSimple;\n  exports.faNutritionix = faNutritionix;\n  exports.faWodu = faWodu;\n  exports.faGooglePay = faGooglePay;\n  exports.faIntercom = faIntercom;\n  exports.faZhihu = faZhihu;\n  exports.faKorvue = faKorvue;\n  exports.faPix = faPix;\n  exports.faSteamSymbol = faSteamSymbol;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","function corslite(url, callback, cors) {\n    var sent = false;\n\n    if (typeof window.XMLHttpRequest === 'undefined') {\n        return callback(Error('Browser not supported'));\n    }\n\n    if (typeof cors === 'undefined') {\n        var m = url.match(/^\\s*https?:\\/\\/[^\\/]*/);\n        cors = m && (m[0] !== location.protocol + '//' + location.hostname +\n                (location.port ? ':' + location.port : ''));\n    }\n\n    var x = new window.XMLHttpRequest();\n\n    function isSuccessful(status) {\n        return status >= 200 && status < 300 || status === 304;\n    }\n\n    if (cors && !('withCredentials' in x)) {\n        // IE8-9\n        x = new window.XDomainRequest();\n\n        // Ensure callback is never called synchronously, i.e., before\n        // x.send() returns (this has been observed in the wild).\n        // See https://github.com/mapbox/mapbox.js/issues/472\n        var original = callback;\n        callback = function() {\n            if (sent) {\n                original.apply(this, arguments);\n            } else {\n                var that = this, args = arguments;\n                setTimeout(function() {\n                    original.apply(that, args);\n                }, 0);\n            }\n        }\n    }\n\n    function loaded() {\n        if (\n            // XDomainRequest\n            x.status === undefined ||\n            // modern browsers\n            isSuccessful(x.status)) callback.call(x, null, x);\n        else callback.call(x, x, null);\n    }\n\n    // Both `onreadystatechange` and `onload` can fire. `onreadystatechange`\n    // has [been supported for longer](http://stackoverflow.com/a/9181508/229001).\n    if ('onload' in x) {\n        x.onload = loaded;\n    } else {\n        x.onreadystatechange = function readystate() {\n            if (x.readyState === 4) {\n                loaded();\n            }\n        };\n    }\n\n    // Call the callback with the XMLHttpRequest object as an error and prevent\n    // it from ever being called again by reassigning it to `noop`\n    x.onerror = function error(evt) {\n        // XDomainRequest provides no evt parameter\n        callback.call(this, evt || true, null);\n        callback = function() { };\n    };\n\n    // IE9 must have onprogress be set to a unique function.\n    x.onprogress = function() { };\n\n    x.ontimeout = function(evt) {\n        callback.call(this, evt, null);\n        callback = function() { };\n    };\n\n    x.onabort = function(evt) {\n        callback.call(this, evt, null);\n        callback = function() { };\n    };\n\n    // GET is the only supported HTTP Verb by XDomainRequest and is the\n    // only one supported here.\n    x.open('GET', url, true);\n\n    // Send the request. Sending data is not supported.\n    x.send(null);\n    sent = true;\n\n    return x;\n}\n\nif (typeof module !== 'undefined') module.exports = corslite;\n","'use strict';\n\n/**\n * Based off of [the offical Google document](https://developers.google.com/maps/documentation/utilities/polylinealgorithm)\n *\n * Some parts from [this implementation](http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/PolylineEncoder.js)\n * by [Mark McClure](http://facstaff.unca.edu/mcmcclur/)\n *\n * @module polyline\n */\n\nvar polyline = {};\n\nfunction py2_round(value) {\n    // Google's polyline algorithm uses the same rounding strategy as Python 2, which is different from JS for negative values\n    return Math.floor(Math.abs(value) + 0.5) * Math.sign(value);\n}\n\nfunction encode(current, previous, factor) {\n    current = py2_round(current * factor);\n    previous = py2_round(previous * factor);\n    var coordinate = current - previous;\n    coordinate <<= 1;\n    if (current - previous < 0) {\n        coordinate = ~coordinate;\n    }\n    var output = '';\n    while (coordinate >= 0x20) {\n        output += String.fromCharCode((0x20 | (coordinate & 0x1f)) + 63);\n        coordinate >>= 5;\n    }\n    output += String.fromCharCode(coordinate + 63);\n    return output;\n}\n\n/**\n * Decodes to a [latitude, longitude] coordinates array.\n *\n * This is adapted from the implementation in Project-OSRM.\n *\n * @param {String} str\n * @param {Number} precision\n * @returns {Array}\n *\n * @see https://github.com/Project-OSRM/osrm-frontend/blob/master/WebContent/routing/OSRM.RoutingGeometry.js\n */\npolyline.decode = function(str, precision) {\n    var index = 0,\n        lat = 0,\n        lng = 0,\n        coordinates = [],\n        shift = 0,\n        result = 0,\n        byte = null,\n        latitude_change,\n        longitude_change,\n        factor = Math.pow(10, precision || 5);\n\n    // Coordinates have variable length when encoded, so just keep\n    // track of whether we've hit the end of the string. In each\n    // loop iteration, a single coordinate is decoded.\n    while (index < str.length) {\n\n        // Reset shift, result, and byte\n        byte = null;\n        shift = 0;\n        result = 0;\n\n        do {\n            byte = str.charCodeAt(index++) - 63;\n            result |= (byte & 0x1f) << shift;\n            shift += 5;\n        } while (byte >= 0x20);\n\n        latitude_change = ((result & 1) ? ~(result >> 1) : (result >> 1));\n\n        shift = result = 0;\n\n        do {\n            byte = str.charCodeAt(index++) - 63;\n            result |= (byte & 0x1f) << shift;\n            shift += 5;\n        } while (byte >= 0x20);\n\n        longitude_change = ((result & 1) ? ~(result >> 1) : (result >> 1));\n\n        lat += latitude_change;\n        lng += longitude_change;\n\n        coordinates.push([lat / factor, lng / factor]);\n    }\n\n    return coordinates;\n};\n\n/**\n * Encodes the given [latitude, longitude] coordinates array.\n *\n * @param {Array.<Array.<Number>>} coordinates\n * @param {Number} precision\n * @returns {String}\n */\npolyline.encode = function(coordinates, precision) {\n    if (!coordinates.length) { return ''; }\n\n    var factor = Math.pow(10, precision || 5),\n        output = encode(coordinates[0][0], 0, factor) + encode(coordinates[0][1], 0, factor);\n\n    for (var i = 1; i < coordinates.length; i++) {\n        var a = coordinates[i], b = coordinates[i - 1];\n        output += encode(a[0], b[0], factor);\n        output += encode(a[1], b[1], factor);\n    }\n\n    return output;\n};\n\nfunction flipped(coords) {\n    var flipped = [];\n    for (var i = 0; i < coords.length; i++) {\n        flipped.push(coords[i].slice().reverse());\n    }\n    return flipped;\n}\n\n/**\n * Encodes a GeoJSON LineString feature/geometry.\n *\n * @param {Object} geojson\n * @param {Number} precision\n * @returns {String}\n */\npolyline.fromGeoJSON = function(geojson, precision) {\n    if (geojson && geojson.type === 'Feature') {\n        geojson = geojson.geometry;\n    }\n    if (!geojson || geojson.type !== 'LineString') {\n        throw new Error('Input must be a GeoJSON LineString');\n    }\n    return polyline.encode(flipped(geojson.coordinates), precision);\n};\n\n/**\n * Decodes to a GeoJSON LineString geometry.\n *\n * @param {String} str\n * @param {Number} precision\n * @returns {Object}\n */\npolyline.toGeoJSON = function(str, precision) {\n    var coords = polyline.decode(str, precision);\n    return {\n        type: 'LineString',\n        coordinates: flipped(coords)\n    };\n};\n\nif (typeof module === 'object' && module.exports) {\n    module.exports = polyline;\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n// Source of truth for the entire list of components. When you add a new component, it should be added here.\nconst connectElementTagNames = [\"account-onboarding\", \"disputes-list\", \"payments\", \"payment-details\", \"payment-disputes\", \"payouts\", \"payouts-list\", \"payout-details\", \"balances\", \"account-management\", \"notification-banner\", \"instant-payouts-promotion\", \"issuing-card\", \"issuing-cards-list\", \"financial-account\", \"financial-account-transactions\", \"documents\", \"tax-registrations\", \"tax-settings\", \"balance-report\", \"payout-reconciliation-report\"];\nconst ConnectElementCommonMethodConfig = {\n  setOnLoadError: _listener => {},\n  setOnLoaderStart: _listener => {}\n};\nconst ConnectElementCustomMethodConfig = {\n  \"account-onboarding\": {\n    setFullTermsOfServiceUrl: _termOfServiceUrl => {},\n    setRecipientTermsOfServiceUrl: _recipientTermsOfServiceUrl => {},\n    setPrivacyPolicyUrl: _privacyPolicyUrl => {},\n    setSkipTermsOfServiceCollection: _skipTermsOfServiceCollection => {},\n    setCollectionOptions: _collectionOptions => {},\n    setOnExit: _listener => {},\n    setOnStepChange: _listener => {}\n  },\n  \"account-management\": {\n    setCollectionOptions: _collectionOptions => {},\n    setOnSectionOpen: _listener => {}\n  },\n  \"notification-banner\": {\n    setCollectionOptions: _collectionOptions => {},\n    setOnNotificationsChange: _listener => {}\n  },\n  \"instant-payouts-promotion\": {\n    setOnInstantPayoutsPromotionLoaded: _listener => {},\n    setOnInstantPayoutCreated: _listener => {}\n  },\n  \"issuing-card\": {\n    setDefaultCard: _defaultCard => {},\n    setCardSwitching: _cardSwitching => {},\n    setFetchEphemeralKey: _fetchEphemeralKey => {},\n    setShowSpendControls: _showSpendControls => {}\n  },\n  \"issuing-cards-list\": {\n    setFetchEphemeralKey: _fetchEphemeralKey => {},\n    setShowSpendControls: _showSpendControls => {},\n    setIssuingProgram: _issuingProgram => {}\n  },\n  \"financial-account\": {\n    setFinancialAccount: _financialAccount => {}\n  },\n  \"financial-account-transactions\": {\n    setFinancialAccount: _financialAccount => {}\n  },\n  payments: {\n    setDefaultFilters: _filters => {}\n  },\n  \"payment-details\": {\n    setPayment: _payment => {},\n    setOnClose: _listener => {}\n  },\n  \"payment-disputes\": {\n    setPayment: _payment => {},\n    setOnDisputesLoaded: _listener => {}\n  },\n  \"tax-settings\": {\n    setHideProductTaxCodeSelector: _hidden => {},\n    setDisplayHeadOfficeCountries: _countries => {},\n    setOnTaxSettingsUpdated: _listener => {}\n  },\n  \"tax-registrations\": {\n    setOnAfterTaxRegistrationAdded: _listener => {},\n    setDisplayCountries: _countries => {},\n    setOnAfterTaxRegistrationExpired: _listener => {}\n  },\n  \"payout-details\": {\n    setPayout: _payout => {},\n    setOnClose: _listener => {}\n  },\n  \"payout-reconciliation-report\": {\n    setOnReportAvailabilityLoaded: _listener => {}\n  }\n};\n\nconst EXISTING_SCRIPT_MESSAGE = \"loadConnect was called but an existing Connect.js script already exists in the document; existing script parameters will be used\";\nconst V0_URL = \"https://connect-js.stripe.com/v0.1/connect.js\";\nconst V1_URL = \"https://connect-js.stripe.com/v1.0/connect.js\";\nconst findScript = () => {\n  return document.querySelectorAll(`script[src=\"${V1_URL}\"]`)[0] || document.querySelectorAll(`script[src=\"${V0_URL}\"]`)[0] || null;\n};\nconst injectScript = () => {\n  const script = document.createElement(\"script\");\n  script.src = V1_URL;\n  const head = document.head;\n  if (!head) {\n    throw new Error(\"Expected document.head not to be null. Connect.js requires a <head> element.\");\n  }\n  document.head.appendChild(script);\n  return script;\n};\n\nconst componentNameMapping = connectElementTagNames.reduce((acc, name) => {\n  acc[name] = `stripe-connect-${name}`;\n  return acc;\n}, {});\nlet stripePromise$1 = null;\nconst isWindowStripeConnectDefined = stripeConnect => {\n  // We only consider `StripeConnect` defined if `init` is a function\n  // Why? HTML markup like:\n  // <a id=\"StripeConnect\"><a id=\"StripeConnect\" name=\"init\" href=\"stripe\"></a></a> in the <head> of the page\n  // can end up \"contaminating\" the window.StripeConnect object and cause issues in connect.js initialization\n  return !!(stripeConnect && typeof stripeConnect === \"object\" && \"init\" in stripeConnect && typeof stripeConnect.init === \"function\");\n};\nconst loadScript = () => {\n  // Ensure that we only attempt to load Connect.js at most once\n  if (stripePromise$1 !== null) {\n    return stripePromise$1;\n  }\n  stripePromise$1 = new Promise((resolve, reject) => {\n    if (typeof window === \"undefined\") {\n      reject(\"ConnectJS won't load when rendering code in the server - it can only be loaded on a browser. This error is expected when loading ConnectJS in SSR environments, like NextJS. It will have no impact in the UI, however if you wish to avoid it, you can switch to the `pure` version of the connect.js loader: https://github.com/stripe/connect-js#importing-loadconnect-without-side-effects.\");\n      return;\n    }\n    if (isWindowStripeConnectDefined(window.StripeConnect)) {\n      console.warn(EXISTING_SCRIPT_MESSAGE);\n      const wrapper = createWrapper(window.StripeConnect);\n      resolve(wrapper);\n      return;\n    }\n    try {\n      let script = findScript();\n      if (script) {\n        console.warn(EXISTING_SCRIPT_MESSAGE);\n      } else if (!script) {\n        script = injectScript();\n      }\n      script.addEventListener(\"load\", () => {\n        if (isWindowStripeConnectDefined(window.StripeConnect)) {\n          const wrapper = createWrapper(window.StripeConnect);\n          resolve(wrapper);\n        } else {\n          reject(new Error(\"Connect.js did not load the necessary objects\"));\n        }\n      });\n      script.addEventListener(\"error\", () => {\n        reject(new Error(\"Failed to load Connect.js\"));\n      });\n    } catch (error) {\n      reject(error);\n    }\n  });\n  return stripePromise$1;\n};\nconst hasCustomMethod = tagName => {\n  return tagName in ConnectElementCustomMethodConfig;\n};\nconst initStripeConnect = (stripePromise, initParams) => {\n  var _a;\n  const eagerClientSecretPromise = (() => {\n    try {\n      return initParams.fetchClientSecret();\n    } catch (error) {\n      return Promise.reject(error);\n    }\n  })();\n  const metaOptions = (_a = initParams.metaOptions) !== null && _a !== void 0 ? _a : {};\n  const stripeConnectInstance = stripePromise.then(wrapper => wrapper.initialize(Object.assign(Object.assign({}, initParams), {\n    metaOptions: Object.assign(Object.assign({}, metaOptions), {\n      eagerClientSecretPromise\n    })\n  })));\n  return {\n    create: tagName => {\n      let htmlName = componentNameMapping[tagName];\n      if (!htmlName) {\n        htmlName = tagName;\n      }\n      const element = document.createElement(htmlName);\n      const customMethods = hasCustomMethod(tagName) ? ConnectElementCustomMethodConfig[tagName] : {};\n      const methods = Object.assign(Object.assign({}, customMethods), ConnectElementCommonMethodConfig);\n      for (const method in methods) {\n        element[method] = function (value) {\n          stripeConnectInstance.then(() => {\n            if (!this[`${method}InternalOnly`]) {\n              throw new Error(`Method ${method} is not available in the ${tagName} HTML element. Are you using a supported version of the \"@stripe/connect-js\" package? Using version: 3.4.6`);\n            }\n            this[`${method}InternalOnly`](value);\n          });\n        };\n      }\n      stripeConnectInstance.then(instance => {\n        if (!element.isConnected && !element.setConnector) {\n          // If the element is not connected to the DOM and the `setConnector` method is not\n          // defined, this indicates the element was created before connect.js was loaded, and has\n          // not been transformed into a custom element yet\n          // To load the custom element code on it, we need to connect and disconnect it to the DOM\n          // This isn't a problem, as the element will be invisible, and we know the element is already\n          // not currently connected to the DOM\n          const oldDisplay = element.style.display;\n          element.style.display = \"none\";\n          document.body.appendChild(element);\n          document.body.removeChild(element);\n          element.style.display = oldDisplay;\n        }\n        if (!element || !element.setConnector) {\n          throw new Error(`Element ${tagName} was not transformed into a custom element. Are you using a documented component? See https://docs.stripe.com/connect/supported-embedded-components for a list of supported components`);\n        }\n        element.setConnector(instance.connect);\n      });\n      return element;\n    },\n    update: updateOptions => {\n      stripeConnectInstance.then(instance => {\n        instance.update(updateOptions);\n      });\n    },\n    debugInstance: () => {\n      return stripeConnectInstance;\n    },\n    logout: () => {\n      return stripeConnectInstance.then(instance => {\n        return instance.logout();\n      });\n    }\n  };\n};\nconst createWrapper = stripeConnect => {\n  window.StripeConnect = window.StripeConnect || {};\n  window.StripeConnect.optimizedLoading = true;\n  const wrapper = {\n    initialize: params => {\n      var _a;\n      const metaOptions = (_a = params.metaOptions) !== null && _a !== void 0 ? _a : {};\n      const stripeConnectInstance = stripeConnect.init(Object.assign(Object.assign({}, params), {\n        metaOptions: Object.assign(Object.assign({}, metaOptions), {\n          sdk: true,\n          sdkOptions: {\n            // This will be replaced by the npm package version when bundling\n            sdkVersion: \"3.4.6\"\n          }\n        })\n      }));\n      return stripeConnectInstance;\n    }\n  };\n  return wrapper;\n};\n\n// Execute our own script injection after a tick to give users time to do their\n// own script injection.\nconst stripePromise = Promise.resolve().then(() => loadScript());\nlet loadCalled = false;\nstripePromise.catch(err => {\n  if (!loadCalled) {\n    console.warn(err);\n  }\n});\nconst loadConnectAndInitialize = initParams => {\n  loadCalled = true;\n  return initStripeConnect(stripePromise, initParams);\n};\n\nexport { ConnectElementCommonMethodConfig, ConnectElementCustomMethodConfig, connectElementTagNames, loadConnectAndInitialize };\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AirDatepicker=t():e.AirDatepicker=t()}(this,(function(){return function(){\"use strict\";var e={d:function(t,i){for(var s in i)e.o(i,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:i[s]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return R}});var i={days:\"days\",months:\"months\",years:\"years\",day:\"day\",month:\"month\",year:\"year\",eventChangeViewDate:\"changeViewDate\",eventChangeCurrentView:\"changeCurrentView\",eventChangeFocusDate:\"changeFocusDate\",eventChangeSelectedDate:\"changeSelectedDate\",eventChangeTime:\"changeTime\",eventChangeLastSelectedDate:\"changeLastSelectedDate\",actionSelectDate:\"selectDate\",actionUnselectDate:\"unselectDate\",cssClassWeekend:\"-weekend-\"},s={classes:\"\",inline:!1,locale:{days:[\"Воскресенье\",\"Понедельник\",\"Вторник\",\"Среда\",\"Четверг\",\"Пятница\",\"Суббота\"],daysShort:[\"Вос\",\"Пон\",\"Вто\",\"Сре\",\"Чет\",\"Пят\",\"Суб\"],daysMin:[\"Вс\",\"Пн\",\"Вт\",\"Ср\",\"Чт\",\"Пт\",\"Сб\"],months:[\"Январь\",\"Февраль\",\"Март\",\"Апрель\",\"Май\",\"Июнь\",\"Июль\",\"Август\",\"Сентябрь\",\"Октябрь\",\"Ноябрь\",\"Декабрь\"],monthsShort:[\"Янв\",\"Фев\",\"Мар\",\"Апр\",\"Май\",\"Июн\",\"Июл\",\"Авг\",\"Сен\",\"Окт\",\"Ноя\",\"Дек\"],today:\"Сегодня\",clear:\"Очистить\",dateFormat:\"dd.MM.yyyy\",timeFormat:\"HH:mm\",firstDay:1},startDate:new Date,firstDay:\"\",weekends:[6,0],dateFormat:\"\",altField:\"\",altFieldDateFormat:\"T\",toggleSelected:!0,keyboardNav:!0,selectedDates:!1,container:\"\",isMobile:!1,visible:!1,position:\"bottom left\",offset:12,view:i.days,minView:i.days,showOtherMonths:!0,selectOtherMonths:!0,moveToOtherMonthsOnSelect:!0,showOtherYears:!0,selectOtherYears:!0,moveToOtherYearsOnSelect:!0,minDate:\"\",maxDate:\"\",disableNavWhenOutOfRange:!0,multipleDates:!1,multipleDatesSeparator:\", \",range:!1,dynamicRange:!0,buttons:!1,monthsField:\"monthsShort\",showEvent:\"focus\",autoClose:!1,fixedHeight:!1,prevHtml:'<svg><path d=\"M 17,12 l -5,5 l 5,5\"></path></svg>',nextHtml:'<svg><path d=\"M 14,12 l 5,5 l -5,5\"></path></svg>',navTitles:{days:\"MMMM, <i>yyyy</i>\",months:\"yyyy\",years:\"yyyy1 - yyyy2\"},timepicker:!1,onlyTimepicker:!1,dateTimeSeparator:\" \",timeFormat:\"\",minHours:0,maxHours:24,minMinutes:0,maxMinutes:59,hoursStep:1,minutesStep:1,onSelect:!1,onChangeViewDate:!1,onChangeView:!1,onRenderCell:!1,onShow:!1,onHide:!1,onClickDayName:!1};function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;return\"string\"==typeof e?t.querySelector(e):e}function n(){let{tagName:e=\"div\",className:t=\"\",innerHtml:i=\"\",id:s=\"\",attrs:a={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=document.createElement(e);return t&&n.classList.add(...t.split(\" \")),s&&(n.id=s),i&&(n.innerHTML=i),a&&r(n,a),n}function r(e,t){for(let[i,s]of Object.entries(t))void 0!==s&&e.setAttribute(i,s);return e}function h(e){return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()}function o(e){let t=e.getHours(),{hours:i,dayPeriod:s}=l(t);return{year:e.getFullYear(),month:e.getMonth(),fullMonth:e.getMonth()+1<10?\"0\"+(e.getMonth()+1):e.getMonth()+1,date:e.getDate(),fullDate:e.getDate()<10?\"0\"+e.getDate():e.getDate(),day:e.getDay(),hours:t,fullHours:d(t),hours12:i,dayPeriod:s,fullHours12:d(i),minutes:e.getMinutes(),fullMinutes:e.getMinutes()<10?\"0\"+e.getMinutes():e.getMinutes()}}function l(e){return{dayPeriod:e>11?\"pm\":\"am\",hours:e%12==0?12:e%12}}function d(e){return e<10?\"0\"+e:e}function c(e){let t=10*Math.floor(e.getFullYear()/10);return[t,t+9]}function u(){let e=[];for(var t=arguments.length,i=new Array(t),s=0;s<t;s++)i[s]=arguments[s];return i.forEach((t=>{if(\"object\"==typeof t)for(let i in t)t[i]&&e.push(i);else t&&e.push(t)})),e.join(\" \")}function p(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.days;if(!e||!t)return!1;let a=o(e),n=o(t);return{[i.days]:a.date===n.date&&a.month===n.month&&a.year===n.year,[i.months]:a.month===n.month&&a.year===n.year,[i.years]:a.year===n.year}[s]}function m(e,t,i){let s=g(e,!1).getTime(),a=g(t,!1).getTime();return i?s>=a:s>a}function v(e,t){return!m(e,t,!0)}function g(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=new Date(e.getTime());return\"boolean\"!=typeof t||t||function(e){e.setHours(0,0,0,0)}(i),i}function D(e,t,i){e.length?e.forEach((e=>{e.addEventListener(t,i)})):e.addEventListener(t,i)}function y(e,t){return!(!e||e===document||e instanceof DocumentFragment)&&(e.matches(t)?e:y(e.parentNode,t))}function f(e,t,i){return e>i?i:e<t?t:e}function w(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];return i.filter((e=>e)).forEach((t=>{for(let[i,s]of Object.entries(t))if(void 0!==s&&\"[object Object]\"===s.toString()){let t=void 0!==e[i]?e[i].toString():void 0,a=s.toString(),n=Array.isArray(s)?[]:{};e[i]=e[i]?t!==a?n:e[i]:n,w(e[i],s)}else e[i]=s})),e}function b(e){let t=e;return e instanceof Date||(\"string\"==typeof e&&/^\\d{4}-\\d{2}-\\d{2}$/.test(e)&&(e+=\"T00:00:00\"),t=new Date(e)),isNaN(t.getTime())&&(console.log(`Unable to convert value \"${e}\" to Date object`),t=!1),t}function $(e){let t=\"\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;\";return new RegExp(\"(^|>|\"+t+\")(\"+e+\")($|<|\"+t+\")\",\"g\")}function k(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,\"string\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class C{constructor(){let{type:e,date:t,dp:i,opts:s,body:a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};k(this,\"focus\",(()=>{this.$cell.classList.add(\"-focus-\"),this.focused=!0})),k(this,\"removeFocus\",(()=>{this.$cell.classList.remove(\"-focus-\"),this.focused=!1})),k(this,\"select\",(()=>{this.$cell.classList.add(\"-selected-\"),this.selected=!0})),k(this,\"removeSelect\",(()=>{this.$cell.classList.remove(\"-selected-\",\"-range-from-\",\"-range-to-\"),this.selected=!1})),k(this,\"onChangeSelectedDate\",(()=>{this.isDisabled||(this._handleSelectedStatus(),this.opts.range&&this._handleRangeStatus())})),k(this,\"onChangeFocusDate\",(e=>{if(!e)return void(this.focused&&this.removeFocus());let t=p(e,this.date,this.type);t?this.focus():!t&&this.focused&&this.removeFocus(),this.opts.range&&this._handleRangeStatus()})),k(this,\"render\",(()=>(this.$cell.innerHTML=this._getHtml(),this._handleClasses(),this.$cell))),this.type=e,this.singleType=this.type.slice(0,-1),this.date=t,this.dp=i,this.opts=s,this.body=a,this.customData=!1,this.init()}init(){var e,t;let{onRenderCell:i}=this.opts;i&&(this.customData=i({date:this.date,cellType:this.singleType,datepicker:this.dp})),this._createElement(),this._bindDatepickerEvents(),null!==(e=this.customData)&&void 0!==e&&e.disabled?this.dp.disableDate(this.date):!1===(null===(t=this.customData)||void 0===t?void 0:t.disabled)&&this.dp.enableDate(this.date)}_bindDatepickerEvents(){this.dp.on(i.eventChangeSelectedDate,this.onChangeSelectedDate),this.dp.on(i.eventChangeFocusDate,this.onChangeFocusDate)}unbindDatepickerEvents(){this.dp.off(i.eventChangeSelectedDate,this.onChangeSelectedDate),this.dp.off(i.eventChangeFocusDate,this.onChangeFocusDate)}_createElement(){var e;let{year:t,month:i,fullMonth:s,date:a,fullDate:r}=o(this.date),h=(null===(e=this.customData)||void 0===e?void 0:e.attrs)||{};this.$cell=n({attrs:{\"data-year\":t,\"data-month\":i,\"data-date\":a,\"data-iso-date\":`${t}-${s}-${r}`,...h}}),this.$cell.adpCell=this}_getClassName(){var e;let t=new Date,{selectOtherMonths:s,selectOtherYears:a}=this.opts,{minDate:n,maxDate:r,isDateDisabled:h}=this.dp,{day:l}=o(this.date),d=this._isOutOfMinMaxRange(),c=h(this.date),m=u(\"air-datepicker-cell\",`-${this.singleType}-`,{\"-current-\":p(t,this.date,this.type),\"-min-date-\":n&&p(n,this.date,this.type),\"-max-date-\":r&&p(r,this.date,this.type)}),v=\"\";switch(this.type){case i.days:v=u({\"-weekend-\":this.dp.isWeekend(l),\"-other-month-\":this.isOtherMonth,\"-disabled-\":this.isOtherMonth&&!s||d||c});break;case i.months:v=u({\"-disabled-\":d});break;case i.years:v=u({\"-other-decade-\":this.isOtherDecade,\"-disabled-\":d||this.isOtherDecade&&!a})}return u(m,v,null===(e=this.customData)||void 0===e?void 0:e.classes).split(\" \")}_getHtml(){var e;let{year:t,month:s,date:a}=o(this.date),{showOtherMonths:n,showOtherYears:r}=this.opts;if(null!==(e=this.customData)&&void 0!==e&&e.html)return this.customData.html;switch(this.type){case i.days:return!n&&this.isOtherMonth?\"\":a;case i.months:return this.dp.locale[this.opts.monthsField][s];case i.years:return!r&&this.isOtherDecade?\"\":t}}_isOutOfMinMaxRange(){let{minDate:e,maxDate:t}=this.dp,{type:s,date:a}=this,{month:n,year:r,date:h}=o(a),l=s===i.days,d=s===i.years,c=!!e&&new Date(r,d?e.getMonth():n,l?h:e.getDate()),u=!!t&&new Date(r,d?t.getMonth():n,l?h:t.getDate());return e&&t?v(c,e)||m(u,t):e?v(c,e):t?m(u,t):void 0}destroy(){this.unbindDatepickerEvents()}_handleRangeStatus(){const{selectedDates:e,focusDate:t,rangeDateTo:i,rangeDateFrom:s}=this.dp,a=e.length;if(this.$cell.classList.remove(\"-range-from-\",\"-range-to-\",\"-in-range-\"),!a)return;let n=s,r=i;if(1===a&&t){const i=m(t,e[0]);n=i?e[0]:t,r=i?t:e[0]}let h=u({\"-in-range-\":n&&r&&(o=this.date,l=n,d=r,m(o,l)&&v(o,d)),\"-range-from-\":n&&p(this.date,n,this.type),\"-range-to-\":r&&p(this.date,r,this.type)});var o,l,d;h&&this.$cell.classList.add(...h.split(\" \"))}_handleSelectedStatus(){let e=this.dp._checkIfDateIsSelected(this.date,this.type);e?this.select():!e&&this.selected&&this.removeSelect()}_handleInitialFocusStatus(){p(this.dp.focusDate,this.date,this.type)&&this.focus()}_handleClasses(){this.$cell.setAttribute(\"class\",\"\"),this._handleInitialFocusStatus(),this.dp.hasSelectedDates&&(this._handleSelectedStatus(),this.dp.opts.range&&this._handleRangeStatus()),this.$cell.classList.add(...this._getClassName())}get isDisabled(){return this.$cell.matches(\".-disabled-\")}get isOtherMonth(){return this.dp.isOtherMonth(this.date)}get isOtherDecade(){return this.dp.isOtherDecade(this.date)}}function _(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,\"string\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}let M={[i.days]:`<div class=\"air-datepicker-body--day-names\"></div><div class=\"air-datepicker-body--cells -${i.days}-\"></div>`,[i.months]:`<div class=\"air-datepicker-body--cells -${i.months}-\"></div>`,[i.years]:`<div class=\"air-datepicker-body--cells -${i.years}-\"></div>`};const S=\".air-datepicker-cell\";class T{constructor(e){let{dp:t,type:s,opts:a}=e;_(this,\"handleClick\",(e=>{let t=e.target.closest(S).adpCell;if(t.isDisabled)return;if(!this.dp.isMinViewReached)return void this.dp.down();let i=this.dp._checkIfDateIsSelected(t.date,t.type);i?this.dp._handleAlreadySelectedDates(i,t.date):this.dp.selectDate(t.date)})),_(this,\"handleDayNameClick\",(e=>{let t=e.target.getAttribute(\"data-day-index\");this.opts.onClickDayName({dayIndex:Number(t),datepicker:this.dp})})),_(this,\"onChangeCurrentView\",(e=>{e!==this.type?this.hide():(this.show(),this.render())})),_(this,\"onMouseOverCell\",(e=>{let t=y(e.target,S);this.dp.setFocusDate(!!t&&t.adpCell.date)})),_(this,\"onMouseOutCell\",(()=>{this.dp.setFocusDate(!1)})),_(this,\"onClickBody\",(e=>{let{onClickDayName:t}=this.opts,i=e.target;i.closest(S)&&this.handleClick(e),t&&i.closest(\".air-datepicker-body--day-name\")&&this.handleDayNameClick(e)})),_(this,\"onMouseDown\",(e=>{this.pressed=!0;let t=y(e.target,S),i=t&&t.adpCell;p(i.date,this.dp.rangeDateFrom)&&(this.rangeFromFocused=!0),p(i.date,this.dp.rangeDateTo)&&(this.rangeToFocused=!0)})),_(this,\"onMouseMove\",(e=>{if(!this.pressed||!this.dp.isMinViewReached)return;e.preventDefault();let t=y(e.target,S),i=t&&t.adpCell,{selectedDates:s,rangeDateTo:a,rangeDateFrom:n}=this.dp;if(!i||i.isDisabled)return;let{date:r}=i;if(2===s.length){if(this.rangeFromFocused&&!m(r,a)){let{hours:e,minutes:t}=o(n);r.setHours(e),r.setMinutes(t),this.dp.rangeDateFrom=r,this.dp.replaceDate(n,r)}if(this.rangeToFocused&&!v(r,n)){let{hours:e,minutes:t}=o(a);r.setHours(e),r.setMinutes(t),this.dp.rangeDateTo=r,this.dp.replaceDate(a,r)}}})),_(this,\"onMouseUp\",(()=>{this.pressed=!1,this.rangeFromFocused=!1,this.rangeToFocused=!1})),_(this,\"onChangeViewDate\",((e,t)=>{if(!this.isVisible)return;let s=c(e),a=c(t);switch(this.dp.currentView){case i.days:if(p(e,t,i.months))return;break;case i.months:if(p(e,t,i.years))return;break;case i.years:if(s[0]===a[0]&&s[1]===a[1])return}this.render()})),_(this,\"render\",(()=>{this.destroyCells(),this._generateCells(),this.cells.forEach((e=>{this.$cells.appendChild(e.render())}))})),this.dp=t,this.type=s,this.opts=a,this.cells=[],this.$el=\"\",this.pressed=!1,this.isVisible=!0,this.init()}init(){this._buildBaseHtml(),this.type===i.days&&this.renderDayNames(),this.render(),this._bindEvents(),this._bindDatepickerEvents()}_bindEvents(){let{range:e,dynamicRange:t}=this.opts;D(this.$el,\"mouseover\",this.onMouseOverCell),D(this.$el,\"mouseout\",this.onMouseOutCell),D(this.$el,\"click\",this.onClickBody),e&&t&&(D(this.$el,\"mousedown\",this.onMouseDown),D(this.$el,\"mousemove\",this.onMouseMove),D(window.document,\"mouseup\",this.onMouseUp))}_bindDatepickerEvents(){this.dp.on(i.eventChangeViewDate,this.onChangeViewDate),this.dp.on(i.eventChangeCurrentView,this.onChangeCurrentView)}_buildBaseHtml(){this.$el=n({className:`air-datepicker-body -${this.type}-`,innerHtml:M[this.type]}),this.$names=a(\".air-datepicker-body--day-names\",this.$el),this.$cells=a(\".air-datepicker-body--cells\",this.$el)}_getDayNamesHtml(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.dp.locale.firstDay,t=\"\",s=this.dp.isWeekend,{onClickDayName:a}=this.opts,n=e,r=0;for(;r<7;){let e=n%7;t+=`<div class=\"${u(\"air-datepicker-body--day-name\",{[i.cssClassWeekend]:s(e),\"-clickable-\":!!a})}\" data-day-index='${e}'>${this.dp.locale.daysMin[e]}</div>`,r++,n++}return t}renderDayNames(){this.$names.innerHTML=this._getDayNamesHtml()}_generateCell(e){let{type:t,dp:i,opts:s}=this;return new C({type:t,dp:i,opts:s,date:e,body:this})}_generateCells(){T.getDatesFunction(this.type)(this.dp,(e=>{this.cells.push(this._generateCell(e))}))}show(){this.isVisible=!0,this.$el.classList.remove(\"-hidden-\")}hide(){this.isVisible=!1,this.$el.classList.add(\"-hidden-\")}destroyCells(){this.cells.forEach((e=>e.destroy())),this.cells=[],this.$cells.innerHTML=\"\"}destroy(){this.destroyCells(),this.dp.off(i.eventChangeViewDate,this.onChangeViewDate),this.dp.off(i.eventChangeCurrentView,this.onChangeCurrentView)}static getDaysDates(e,t){let{viewDate:i,opts:{fixedHeight:s},locale:{firstDay:a}}=e,n=h(i),{year:r,month:l}=o(i),d=new Date(r,l,1),c=new Date(r,l,n),u=d.getDay()-a,p=6-c.getDay()+a;u=u<0?u+7:u,p=p>6?p-7:p;let m=function(e,t){let{year:i,month:s,date:a}=o(e);return new Date(i,s,a-t)}(d,u),v=n+u+p,g=m.getDate(),{year:D,month:y}=o(m),f=0;s&&(v=42);const w=[];for(;f<v;){let e=new Date(D,y,g+f);t&&t(e),w.push(e),f++}return w}static getMonthsDates(e,t){let{year:i}=e.parsedViewDate,s=0,a=[];for(;s<12;){const e=new Date(i,s);a.push(e),t&&t(e),s++}return a}static getYearsDates(e,t){let i=c(e.viewDate),s=i[0]-1,a=i[1]+1,n=s,r=[];for(;n<=a;){const e=new Date(n,0);r.push(e),t&&t(e),n++}return r}static getDatesFunction(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.days;return{[i.days]:T.getDaysDates,[i.months]:T.getMonthsDates,[i.years]:T.getYearsDates}[e]}}function F(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,\"string\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class V{constructor(e){let{dp:t,opts:i}=e;F(this,\"onClickNav\",(e=>{let t=y(e.target,\".air-datepicker-nav--action\");if(!t)return;let i=t.dataset.action;this.dp[i]()})),F(this,\"onChangeViewDate\",(()=>{this.render(),this._resetNavStatus(),this.handleNavStatus()})),F(this,\"onChangeCurrentView\",(()=>{this.render(),this._resetNavStatus(),this.handleNavStatus()})),F(this,\"onClickNavTitle\",(()=>{this.dp.isFinalView||this.dp.up()})),F(this,\"update\",(()=>{let{prevHtml:e,nextHtml:t}=this.opts;this.$prev.innerHTML=e,this.$next.innerHTML=t,this._resetNavStatus(),this.render(),this.handleNavStatus()})),F(this,\"renderDelay\",(()=>{setTimeout(this.render)})),F(this,\"render\",(()=>{this.$title.innerHTML=this._getTitle(),function(e,t){for(let i in t)t[i]?e.classList.add(i):e.classList.remove(i)}(this.$title,{\"-disabled-\":this.dp.isFinalView})})),this.dp=t,this.opts=i,this.init()}init(){this._createElement(),this._buildBaseHtml(),this._defineDOM(),this.render(),this.handleNavStatus(),this._bindEvents(),this._bindDatepickerEvents()}_defineDOM(){this.$title=a(\".air-datepicker-nav--title\",this.$el),this.$prev=a('[data-action=\"prev\"]',this.$el),this.$next=a('[data-action=\"next\"]',this.$el)}_bindEvents(){this.$el.addEventListener(\"click\",this.onClickNav),this.$title.addEventListener(\"click\",this.onClickNavTitle)}_bindDatepickerEvents(){this.dp.on(i.eventChangeViewDate,this.onChangeViewDate),this.dp.on(i.eventChangeCurrentView,this.onChangeCurrentView),this.isNavIsFunction&&(this.dp.on(i.eventChangeSelectedDate,this.renderDelay),this.dp.opts.timepicker&&this.dp.on(i.eventChangeTime,this.render))}destroy(){this.dp.off(i.eventChangeViewDate,this.onChangeViewDate),this.dp.off(i.eventChangeCurrentView,this.onChangeCurrentView),this.isNavIsFunction&&(this.dp.off(i.eventChangeSelectedDate,this.renderDelay),this.dp.opts.timepicker&&this.dp.off(i.eventChangeTime,this.render))}_createElement(){this.$el=n({tagName:\"nav\",className:\"air-datepicker-nav\"})}_getTitle(){let{dp:e,opts:t}=this,i=t.navTitles[e.currentView];return\"function\"==typeof i?i(e):e.formatDate(e.viewDate,i)}handleNavStatus(){let{disableNavWhenOutOfRange:e}=this.opts,{minDate:t,maxDate:s}=this.dp;if(!t&&!s||!e)return;let{year:a,month:n}=this.dp.parsedViewDate,r=!!t&&o(t),h=!!s&&o(s);switch(this.dp.currentView){case i.days:t&&r.month>=n&&r.year>=a&&this._disableNav(\"prev\"),s&&h.month<=n&&h.year<=a&&this._disableNav(\"next\");break;case i.months:t&&r.year>=a&&this._disableNav(\"prev\"),s&&h.year<=a&&this._disableNav(\"next\");break;case i.years:{let e=c(this.dp.viewDate);t&&r.year>=e[0]&&this._disableNav(\"prev\"),s&&h.year<=e[1]&&this._disableNav(\"next\");break}}}_disableNav(e){a('[data-action=\"'+e+'\"]',this.$el).classList.add(\"-disabled-\")}_resetNavStatus(){!function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];e.length?e.forEach((e=>{e.classList.remove(...i)})):e.classList.remove(...i)}(this.$el.querySelectorAll(\".air-datepicker-nav--action\"),\"-disabled-\")}_buildBaseHtml(){let{prevHtml:e,nextHtml:t}=this.opts;this.$el.innerHTML=`<div class=\"air-datepicker-nav--action\" data-action=\"prev\">${e}</div><div class=\"air-datepicker-nav--title\"></div><div class=\"air-datepicker-nav--action\" data-action=\"next\">${t}</div>`}get isNavIsFunction(){let{navTitles:e}=this.opts;return Object.keys(e).find((t=>\"function\"==typeof e[t]))}}var x={today:{content:e=>e.locale.today,onClick:e=>e.setViewDate(new Date)},clear:{content:e=>e.locale.clear,onClick:e=>e.clear()}};class H{constructor(e){let{dp:t,opts:i}=e;this.dp=t,this.opts=i,this.init()}init(){this.createElement(),this.render()}createElement(){this.$el=n({className:\"air-datepicker-buttons\"})}destroy(){this.$el.parentNode.removeChild(this.$el)}clearHtml(){return this.$el.innerHTML=\"\",this}generateButtons(){let{buttons:e}=this.opts;Array.isArray(e)||(e=[e]),e.forEach((e=>{let t=e;\"string\"==typeof e&&x[e]&&(t=x[e]);let i=this.createButton(t);t.onClick&&this.attachEventToButton(i,t.onClick),this.$el.appendChild(i)}))}attachEventToButton(e,t){e.addEventListener(\"click\",(()=>{t(this.dp)}))}createButton(e){let{content:t,className:i,tagName:s=\"button\",attrs:a={}}=e;return n({tagName:s,innerHtml:`<span tabindex='-1'>${\"function\"==typeof t?t(this.dp):t}</span>`,className:u(\"air-datepicker-button\",i),attrs:a})}render(){this.generateButtons()}}function E(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,\"string\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class L{constructor(){let{opts:e,dp:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};E(this,\"toggleTimepickerIsActive\",(e=>{this.dp.timepickerIsActive=e})),E(this,\"onChangeSelectedDate\",(e=>{let{date:t,updateTime:i=!1}=e;t&&(this.setMinMaxTime(t),this.setCurrentTime(!!i&&t),this.addTimeToDate(t))})),E(this,\"onChangeLastSelectedDate\",(e=>{e&&(this.setTime(e),this.render())})),E(this,\"onChangeInputRange\",(e=>{let t=e.target;this[t.getAttribute(\"name\")]=t.value,this.updateText(),this.dp.trigger(i.eventChangeTime,{hours:this.hours,minutes:this.minutes})})),E(this,\"onMouseEnterLeave\",(e=>{let t=e.target.getAttribute(\"name\"),i=this.$minutesText;\"hours\"===t&&(i=this.$hoursText),i.classList.toggle(\"-focus-\")})),E(this,\"onFocus\",(()=>{this.toggleTimepickerIsActive(!0)})),E(this,\"onBlur\",(()=>{this.toggleTimepickerIsActive(!1)})),this.opts=e,this.dp=t;let{timeFormat:s}=this.dp.locale;s&&(s.match($(\"h\"))||s.match($(\"hh\")))&&(this.ampm=!0),this.init()}init(){this.setTime(this.dp.lastSelectedDate||this.dp.viewDate),this.createElement(),this.buildHtml(),this.defineDOM(),this.render(),this.bindDatepickerEvents(),this.bindDOMEvents()}bindDatepickerEvents(){this.dp.on(i.eventChangeSelectedDate,this.onChangeSelectedDate),this.dp.on(i.eventChangeLastSelectedDate,this.onChangeLastSelectedDate)}bindDOMEvents(){let e=\"input\";navigator.userAgent.match(/trident/gi)&&(e=\"change\"),D(this.$ranges,e,this.onChangeInputRange),D(this.$ranges,\"mouseenter\",this.onMouseEnterLeave),D(this.$ranges,\"mouseleave\",this.onMouseEnterLeave),D(this.$ranges,\"focus\",this.onFocus),D(this.$ranges,\"mousedown\",this.onFocus),D(this.$ranges,\"blur\",this.onBlur)}createElement(){this.$el=n({className:u(\"air-datepicker-time\",{\"-am-pm-\":this.dp.ampm})})}destroy(){this.dp.off(i.eventChangeSelectedDate,this.onChangeSelectedDate),this.dp.off(i.eventChangeLastSelectedDate,this.onChangeLastSelectedDate),this.$el.parentNode.removeChild(this.$el)}buildHtml(){let{ampm:e,hours:t,displayHours:i,minutes:s,minHours:a,minMinutes:n,maxHours:r,maxMinutes:h,dayPeriod:o,opts:{hoursStep:l,minutesStep:c}}=this;this.$el.innerHTML=`<div class=\"air-datepicker-time--current\">   <span class=\"air-datepicker-time--current-hours\">${d(i)}</span>   <span class=\"air-datepicker-time--current-colon\">:</span>   <span class=\"air-datepicker-time--current-minutes\">${d(s)}</span>   `+(e?`<span class='air-datepicker-time--current-ampm'>${o}</span>`:\"\")+'</div><div class=\"air-datepicker-time--sliders\">   <div class=\"air-datepicker-time--row\">'+`      <input type=\"range\" name=\"hours\" value=\"${t}\" min=\"${a}\" max=\"${r}\" step=\"${l}\"/>   </div>   <div class=\"air-datepicker-time--row\">`+`      <input type=\"range\" name=\"minutes\" value=\"${s}\" min=\"${n}\" max=\"${h}\" step=\"${c}\"/>   </div></div>`}defineDOM(){let e=e=>a(e,this.$el);this.$ranges=this.$el.querySelectorAll('[type=\"range\"]'),this.$hours=e('[name=\"hours\"]'),this.$minutes=e('[name=\"minutes\"]'),this.$hoursText=e(\".air-datepicker-time--current-hours\"),this.$minutesText=e(\".air-datepicker-time--current-minutes\"),this.$ampm=e(\".air-datepicker-time--current-ampm\")}setTime(e){this.setMinMaxTime(e),this.setCurrentTime(e)}addTimeToDate(e){e&&(e.setHours(this.hours),e.setMinutes(this.minutes))}setMinMaxTime(e){if(this.setMinMaxTimeFromOptions(),e){let{minDate:t,maxDate:i}=this.dp;t&&p(e,t)&&this.setMinTimeFromMinDate(t),i&&p(e,i)&&this.setMaxTimeFromMaxDate(i)}}setCurrentTime(e){let{hours:t,minutes:i}=e?o(e):this;this.hours=f(t,this.minHours,this.maxHours),this.minutes=f(i,this.minMinutes,this.maxMinutes)}setMinMaxTimeFromOptions(){let{minHours:e,minMinutes:t,maxHours:i,maxMinutes:s}=this.opts;this.minHours=f(e,0,23),this.minMinutes=f(t,0,59),this.maxHours=f(i,0,23),this.maxMinutes=f(s,0,59)}setMinTimeFromMinDate(e){let{lastSelectedDate:t}=this.dp;this.minHours=e.getHours(),t&&t.getHours()>e.getHours()?this.minMinutes=this.opts.minMinutes:this.minMinutes=e.getMinutes()}setMaxTimeFromMaxDate(e){let{lastSelectedDate:t}=this.dp;this.maxHours=e.getHours(),t&&t.getHours()<e.getHours()?this.maxMinutes=this.opts.maxMinutes:this.maxMinutes=e.getMinutes()}updateSliders(){r(this.$hours,{min:this.minHours,max:this.maxHours}).value=this.hours,r(this.$minutes,{min:this.minMinutes,max:this.maxMinutes}).value=this.minutes}updateText(){this.$hoursText.innerHTML=d(this.displayHours),this.$minutesText.innerHTML=d(this.minutes),this.ampm&&(this.$ampm.innerHTML=this.dayPeriod)}set hours(e){this._hours=e;let{hours:t,dayPeriod:i}=l(e);this.displayHours=this.ampm?t:e,this.dayPeriod=i}get hours(){return this._hours}render(){this.updateSliders(),this.updateText()}}function A(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,\"string\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class O{constructor(e){let{dp:t,opts:i}=e;A(this,\"pressedKeys\",new Set),A(this,\"hotKeys\",new Map([[[[\"Control\",\"ArrowRight\"],[\"Control\",\"ArrowUp\"]],e=>e.month++],[[[\"Control\",\"ArrowLeft\"],[\"Control\",\"ArrowDown\"]],e=>e.month--],[[[\"Shift\",\"ArrowRight\"],[\"Shift\",\"ArrowUp\"]],e=>e.year++],[[[\"Shift\",\"ArrowLeft\"],[\"Shift\",\"ArrowDown\"]],e=>e.year--],[[[\"Alt\",\"ArrowRight\"],[\"Alt\",\"ArrowUp\"]],e=>e.year+=10],[[[\"Alt\",\"ArrowLeft\"],[\"Alt\",\"ArrowDown\"]],e=>e.year-=10],[[\"Control\",\"Shift\",\"ArrowUp\"],(e,t)=>t.up()]])),A(this,\"handleHotKey\",(e=>{let t=this.hotKeys.get(e),i=o(this.getInitialFocusDate());t(i,this.dp);let{year:s,month:a,date:n}=i,r=h(new Date(s,a));r<n&&(n=r);let l=this.dp.getClampedDate(new Date(s,a,n));this.dp.setFocusDate(l,{viewDateTransition:!0})})),A(this,\"isHotKeyPressed\",(()=>{let e=!1,t=this.pressedKeys.size,i=e=>this.pressedKeys.has(e);for(let[s]of this.hotKeys){if(e)break;if(Array.isArray(s[0]))s.forEach((a=>{e||t!==a.length||(e=a.every(i)&&s)}));else{if(t!==s.length)continue;e=s.every(i)&&s}}return e})),A(this,\"isArrow\",(e=>e>=37&&e<=40)),A(this,\"onKeyDown\",(e=>{if(!this.dp.visible&&!this.dp.treatAsInline)return;let{key:t,which:i}=e,{dp:s,dp:{focusDate:a},opts:n}=this;this.registerKey(t);let r=this.isHotKeyPressed();if(r)return e.preventDefault(),void this.handleHotKey(r);if(this.isArrow(i))return e.preventDefault(),void this.focusNextCell(t);if(\"Enter\"===t){if(s.currentView!==n.minView)return void s.down();if(a){let e=s._checkIfDateIsSelected(a);return void(e?s._handleAlreadySelectedDates(e,a):s.selectDate(a))}}\"Escape\"===t&&this.dp.hide()})),A(this,\"onKeyUp\",(e=>{this.removeKey(e.key)})),this.dp=t,this.opts=i,this.init()}init(){this.bindKeyboardEvents()}bindKeyboardEvents(){let{$el:e}=this.dp;e.addEventListener(\"keydown\",this.onKeyDown),e.addEventListener(\"keyup\",this.onKeyUp)}destroy(){let{$el:e}=this.dp;e.removeEventListener(\"keydown\",this.onKeyDown),e.removeEventListener(\"keyup\",this.onKeyUp),this.hotKeys=null,this.pressedKeys=null}getInitialFocusDate(){let{focusDate:e,currentView:t,selectedDates:s,parsedViewDate:{year:a,month:n}}=this.dp,r=e||s[s.length-1];if(!r)switch(t){case i.days:r=new Date(a,n,(new Date).getDate());break;case i.months:r=new Date(a,n,1);break;case i.years:r=new Date(a,0,1)}return r}focusNextCell(e){let t=this.getInitialFocusDate(),{currentView:s}=this.dp,{days:a,months:n,years:r}=i,h=o(t),l=h.year,d=h.month,c=h.date;switch(e){case\"ArrowLeft\":s===a&&(c-=1),s===n&&(d-=1),s===r&&(l-=1);break;case\"ArrowUp\":s===a&&(c-=7),s===n&&(d-=3),s===r&&(l-=4);break;case\"ArrowRight\":s===a&&(c+=1),s===n&&(d+=1),s===r&&(l+=1);break;case\"ArrowDown\":s===a&&(c+=7),s===n&&(d+=3),s===r&&(l+=4)}let u=this.dp.getClampedDate(new Date(l,d,c));this.dp.setFocusDate(u,{viewDateTransition:!0})}registerKey(e){this.pressedKeys.add(e)}removeKey(e){this.pressedKeys.delete(e)}}let N={on(e,t){this.__events||(this.__events={}),this.__events[e]?this.__events[e].push(t):this.__events[e]=[t]},off(e,t){this.__events&&this.__events[e]&&(this.__events[e]=this.__events[e].filter((e=>e!==t)))},removeAllEvents(){this.__events={}},trigger(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];this.__events&&this.__events[e]&&this.__events[e].forEach((e=>{e(...i)}))}};function I(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,\"string\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}let P=\"\",j=\"\",B=!1;class R{static buildGlobalContainer(e){B=!0,P=n({className:e,id:e}),a(\"body\").appendChild(P)}constructor(e,t){var r=this;if(I(this,\"viewIndexes\",[i.days,i.months,i.years]),I(this,\"next\",(()=>{let{year:e,month:t}=this.parsedViewDate;switch(this.currentView){case i.days:this.setViewDate(new Date(e,t+1,1));break;case i.months:this.setViewDate(new Date(e+1,t,1));break;case i.years:this.setViewDate(new Date(e+10,0,1))}})),I(this,\"prev\",(()=>{let{year:e,month:t}=this.parsedViewDate;switch(this.currentView){case i.days:this.setViewDate(new Date(e,t-1,1));break;case i.months:this.setViewDate(new Date(e-1,t,1));break;case i.years:this.setViewDate(new Date(e-10,0,1))}})),I(this,\"_finishHide\",(()=>{this.hideAnimation=!1,this._destroyComponents(),this.$container.removeChild(this.$datepicker)})),I(this,\"setPosition\",(function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(\"function\"==typeof(e=e||r.opts.position))return void(r.customHide=e({$datepicker:r.$datepicker,$target:r.$el,$pointer:r.$pointer,isViewChange:t,done:r._finishHide}));let i,s,{isMobile:a}=r.opts,n=r.$el.getBoundingClientRect(),h=r.$el.getBoundingClientRect(),o=r.$datepicker.offsetParent,l=r.$el.offsetParent,d=r.$datepicker.getBoundingClientRect(),c=e.split(\" \"),u=window.scrollY,p=window.scrollX,m=r.opts.offset,v=c[0],g=c[1];if(a)r.$datepicker.style.cssText=\"left: 50%; top: 50%\";else{if(o===l&&o!==document.body&&(h={top:r.$el.offsetTop,left:r.$el.offsetLeft,width:n.width,height:r.$el.offsetHeight},u=0,p=0),o!==l&&o!==document.body){let e=o.getBoundingClientRect();h={top:n.top-e.top,left:n.left-e.left,width:n.width,height:n.height},u=0,p=0}switch(v){case\"top\":i=h.top-d.height-m;break;case\"right\":s=h.left+h.width+m;break;case\"bottom\":i=h.top+h.height+m;break;case\"left\":s=h.left-d.width-m}switch(g){case\"top\":i=h.top;break;case\"right\":s=h.left+h.width-d.width;break;case\"bottom\":i=h.top+h.height-d.height;break;case\"left\":s=h.left;break;case\"center\":/left|right/.test(v)?i=h.top+h.height/2-d.height/2:s=h.left+h.width/2-d.width/2}r.$datepicker.style.cssText=`left: ${s+p}px; top: ${i+u}px`}})),I(this,\"_setInputValue\",(()=>{let{opts:e,$altField:t,locale:{dateFormat:i}}=this,{altFieldDateFormat:s,altField:a}=e;a&&t&&(t.value=this._getInputValue(s)),this.$el.value=this._getInputValue(i),this.$el.dispatchEvent(new Event(\"change\"))})),I(this,\"_getInputValue\",(e=>{let{selectedDates:t,opts:i}=this,{multipleDates:s,multipleDatesSeparator:a}=i;if(!t.length)return\"\";let n=\"function\"==typeof e,r=n?e(s?t:t[0]):t.map((t=>this.formatDate(t,e)));return r=n?r:r.join(a),r})),I(this,\"_checkIfDateIsSelected\",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.days,s=!1;return r.selectedDates.some((i=>{let a=p(e,i,t);return s=a&&i,a})),s})),I(this,\"_scheduleCallAfterTransition\",(e=>{this._cancelScheduledCall(),e&&e(!1),this._onTransitionEnd=()=>{e&&e(!0)},this.$datepicker.addEventListener(\"transitionend\",this._onTransitionEnd,{once:!0})})),I(this,\"_cancelScheduledCall\",(()=>{this.$datepicker.removeEventListener(\"transitionend\",this._onTransitionEnd)})),I(this,\"setViewDate\",(e=>{if(!((e=b(e))instanceof Date))return;if(p(e,this.viewDate))return;let t=this.viewDate;this.viewDate=e;let{onChangeViewDate:s}=this.opts;if(s){let{month:e,year:t}=this.parsedViewDate;s({month:e,year:t,decade:this.curDecade})}this.trigger(i.eventChangeViewDate,e,t)})),I(this,\"setFocusDate\",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(!e||(e=b(e))instanceof Date)&&(r.focusDate=e,r.trigger(i.eventChangeFocusDate,e,t))})),I(this,\"setCurrentView\",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r.viewIndexes.includes(e)){if(r.currentView=e,r.elIsInput&&r.visible&&r.setPosition(void 0,!0),r.trigger(i.eventChangeCurrentView,e),!r.views[e]){let t=r.views[e]=new T({dp:r,opts:r.opts,type:e});r.shouldUpdateDOM&&r.$content.appendChild(t.$el)}r.opts.onChangeView&&!t.silent&&r.opts.onChangeView(e)}})),I(this,\"_updateLastSelectedDate\",(e=>{this.lastSelectedDate=e,this.trigger(i.eventChangeLastSelectedDate,e)})),I(this,\"destroy\",(()=>{if(this.isDestroyed)return;let{showEvent:e,isMobile:t}=this.opts,i=this.$datepicker.parentNode;i&&i.removeChild(this.$datepicker),this.$el.removeEventListener(e,this._onFocus),this.$el.removeEventListener(\"blur\",this._onBlur),window.removeEventListener(\"resize\",this._onResize),t&&this._removeMobileAttributes(),this.keyboardNav&&this.keyboardNav.destroy(),this.views=null,this.nav=null,this.$datepicker=null,this.opts={},this.$customContainer=null,this.viewDate=null,this.focusDate=null,this.selectedDates=[],this.rangeDateFrom=null,this.rangeDateTo=null,this.isDestroyed=!0})),I(this,\"update\",(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=w({},r.opts),{silent:a}=t;w(r.opts,e);let{timepicker:n,buttons:h,range:o,selectedDates:l,isMobile:d}=r.opts,c=r.visible||r.treatAsInline;r._createMinMaxDates(),r._limitViewDateByMaxMinDates(),r._handleLocale(),l&&(r.selectedDates=[],r.selectDate(l,{silent:a})),e.view&&r.setCurrentView(e.view,{silent:a}),r._setInputValue(),s.range&&!o?(r.rangeDateTo=!1,r.rangeDateFrom=!1):!s.range&&o&&r.selectedDates.length&&(r.rangeDateFrom=r.selectedDates[0],r.rangeDateTo=r.selectedDates[1]),s.timepicker&&!n?(c&&r.timepicker.destroy(),r.timepicker=!1,r.$timepicker.parentNode.removeChild(r.$timepicker)):!s.timepicker&&n&&r._addTimepicker(),!s.buttons&&h?r._addButtons():s.buttons&&!h?(r.buttons.destroy(),r.$buttons.parentNode.removeChild(r.$buttons)):c&&s.buttons&&h&&r.buttons.clearHtml().render(),!s.isMobile&&d?(r.treatAsInline||j||r._createMobileOverlay(),r._addMobileAttributes(),r.visible&&r._showMobileOverlay()):s.isMobile&&!d&&(r._removeMobileAttributes(),r.visible&&(j.classList.remove(\"-active-\"),\"function\"!=typeof r.opts.position&&r.setPosition())),c&&(r.nav.update(),r.views[r.currentView].render(),r.currentView===i.days&&r.views[r.currentView].renderDayNames())})),I(this,\"disableDate\",((e,t)=>{(Array.isArray(e)?e:[e]).forEach((e=>{let i=b(e);if(!i)return;let s=t?\"delete\":\"add\";this.disabledDates[s](this.formatDate(i,\"yyyy-MM-dd\"));let a=this.getCell(i,this.currentViewSingular);a&&a.adpCell.render()}),[])})),I(this,\"enableDate\",(e=>{this.disableDate(e,!0)})),I(this,\"isDateDisabled\",(e=>{let t=b(e);return this.disabledDates.has(this.formatDate(t,\"yyyy-MM-dd\"))})),I(this,\"isOtherMonth\",(e=>{let{month:t}=o(e);return t!==this.parsedViewDate.month})),I(this,\"isOtherYear\",(e=>{let{year:t}=o(e);return t!==this.parsedViewDate.year})),I(this,\"isOtherDecade\",(e=>{let{year:t}=o(e),[i,s]=c(this.viewDate);return t<i||t>s})),I(this,\"_onChangeSelectedDate\",(e=>{let{silent:t}=e;setTimeout((()=>{this._setInputValue(),this.opts.onSelect&&!t&&this._triggerOnSelect()}))})),I(this,\"_onChangeFocusedDate\",(function(e){let{viewDateTransition:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return;let i=!1;t&&(i=r.isOtherMonth(e)||r.isOtherYear(e)||r.isOtherDecade(e)),i&&r.setViewDate(e),r.opts.onFocus&&r.opts.onFocus({datepicker:r,date:e})})),I(this,\"_onChangeTime\",(e=>{let{hours:t,minutes:i}=e,s=new Date,{lastSelectedDate:a,opts:{onSelect:n}}=this,r=a;a||(r=s);let h=this.getCell(r,this.currentViewSingular),o=h&&h.adpCell;o&&o.isDisabled||(r.setHours(t),r.setMinutes(i),a?(this._setInputValue(),n&&this._triggerOnSelect()):this.selectDate(r))})),I(this,\"_onFocus\",(e=>{this.visible||this.show()})),I(this,\"_onBlur\",(e=>{this.inFocus||!this.visible||this.opts.isMobile||this.hide()})),I(this,\"_onMouseDown\",(e=>{this.inFocus=!0})),I(this,\"_onMouseUp\",(e=>{this.inFocus=!1,this.$el.focus()})),I(this,\"_onResize\",(()=>{this.visible&&\"function\"!=typeof this.opts.position&&this.setPosition()})),I(this,\"_onClickOverlay\",(()=>{this.visible&&this.hide()})),I(this,\"getViewDates\",(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.days;return T.getDatesFunction(e)(r)})),I(this,\"isWeekend\",(e=>this.opts.weekends.includes(e))),I(this,\"getClampedDate\",(e=>{let{minDate:t,maxDate:i}=this,s=e;return i&&m(e,i)?s=i:t&&v(e,t)&&(s=t),s})),this.$el=a(e),!this.$el)return;this.$datepicker=n({className:\"air-datepicker\"}),this.opts=w({},s,t),this.$customContainer=!!this.opts.container&&a(this.opts.container),this.$altField=a(this.opts.altField||!1);let{view:h,startDate:l}=this.opts;l||(this.opts.startDate=new Date),\"INPUT\"===this.$el.nodeName&&(this.elIsInput=!0),this.inited=!1,this.visible=!1,this.viewDate=b(this.opts.startDate),this.focusDate=!1,this.initialReadonly=this.$el.getAttribute(\"readonly\"),this.customHide=!1,this.currentView=h,this.selectedDates=[],this.disabledDates=new Set,this.isDestroyed=!1,this.views={},this.keys=[],this.rangeDateFrom=\"\",this.rangeDateTo=\"\",this.timepickerIsActive=!1,this.treatAsInline=this.opts.inline||!this.elIsInput,this.init()}init(){let{opts:e,treatAsInline:t,opts:{inline:i,isMobile:s,selectedDates:n,keyboardNav:r,onlyTimepicker:h}}=this,o=a(\"body\");(!B||B&&P&&!o.contains(P))&&!i&&this.elIsInput&&!this.$customContainer&&R.buildGlobalContainer(R.defaultGlobalContainerId),!s||j||t||this._createMobileOverlay(),this._handleLocale(),this._bindSubEvents(),this._createMinMaxDates(),this._limitViewDateByMaxMinDates(),this.elIsInput&&(i||this._bindEvents(),r&&!h&&(this.keyboardNav=new O({dp:this,opts:e}))),n&&this.selectDate(n,{silent:!0}),this.opts.visible&&!t&&this.show(),s&&!t&&this.$el.setAttribute(\"readonly\",!0),t&&this._createComponents()}_createMobileOverlay(){j=n({className:\"air-datepicker-overlay\"}),P.appendChild(j)}_createComponents(){let{opts:e,treatAsInline:t,opts:{inline:i,buttons:s,timepicker:a,position:n,classes:r,onlyTimepicker:h,isMobile:o}}=this;this._buildBaseHtml(),this.elIsInput&&(i||this._setPositionClasses(n)),!i&&this.elIsInput||this.$datepicker.classList.add(\"-inline-\"),r&&this.$datepicker.classList.add(...r.split(\" \")),h&&this.$datepicker.classList.add(\"-only-timepicker-\"),o&&!t&&this._addMobileAttributes(),this.views[this.currentView]=new T({dp:this,type:this.currentView,opts:e}),this.nav=new V({dp:this,opts:e}),a&&this._addTimepicker(),s&&this._addButtons(),this.$content.appendChild(this.views[this.currentView].$el),this.$nav.appendChild(this.nav.$el)}_destroyComponents(){for(let e in this.views)this.views[e].destroy();this.views={},this.nav.destroy(),this.timepicker&&this.timepicker.destroy()}_addMobileAttributes(){j.addEventListener(\"click\",this._onClickOverlay),this.$datepicker.classList.add(\"-is-mobile-\"),this.$el.setAttribute(\"readonly\",!0)}_removeMobileAttributes(){j.removeEventListener(\"click\",this._onClickOverlay),this.$datepicker.classList.remove(\"-is-mobile-\"),this.initialReadonly||\"\"===this.initialReadonly||this.$el.removeAttribute(\"readonly\")}_createMinMaxDates(){let{minDate:e,maxDate:t}=this.opts;this.minDate=!!e&&b(e),this.maxDate=!!t&&b(t)}_addTimepicker(){this.$timepicker=n({className:\"air-datepicker--time\"}),this.$datepicker.appendChild(this.$timepicker),this.timepicker=new L({dp:this,opts:this.opts}),this.$timepicker.appendChild(this.timepicker.$el)}_addButtons(){this.$buttons=n({className:\"air-datepicker--buttons\"}),this.$datepicker.appendChild(this.$buttons),this.buttons=new H({dp:this,opts:this.opts}),this.$buttons.appendChild(this.buttons.$el)}_bindSubEvents(){this.on(i.eventChangeSelectedDate,this._onChangeSelectedDate),this.on(i.eventChangeFocusDate,this._onChangeFocusedDate),this.on(i.eventChangeTime,this._onChangeTime)}_buildBaseHtml(){let{inline:e}=this.opts;var t,i;this.elIsInput?e?(t=this.$datepicker,(i=this.$el).parentNode.insertBefore(t,i.nextSibling)):this.$container.appendChild(this.$datepicker):this.$el.appendChild(this.$datepicker),this.$datepicker.innerHTML='<i class=\"air-datepicker--pointer\"></i><div class=\"air-datepicker--navigation\"></div><div class=\"air-datepicker--content\"></div>',this.$content=a(\".air-datepicker--content\",this.$datepicker),this.$pointer=a(\".air-datepicker--pointer\",this.$datepicker),this.$nav=a(\".air-datepicker--navigation\",this.$datepicker)}_handleLocale(){let{locale:e,dateFormat:t,firstDay:i,timepicker:s,onlyTimepicker:a,timeFormat:n,dateTimeSeparator:r}=this.opts;var h;this.locale=(h=e,JSON.parse(JSON.stringify(h))),t&&(this.locale.dateFormat=t),void 0!==n&&\"\"!==n&&(this.locale.timeFormat=n);let{timeFormat:o}=this.locale;if(\"\"!==i&&(this.locale.firstDay=i),s&&\"function\"!=typeof t){let e=o?r:\"\";this.locale.dateFormat=[this.locale.dateFormat,o||\"\"].join(e)}a&&\"function\"!=typeof t&&(this.locale.dateFormat=this.locale.timeFormat)}_setPositionClasses(e){if(\"function\"==typeof e)return void this.$datepicker.classList.add(\"-custom-position-\");let t=(e=e.split(\" \"))[0],i=`air-datepicker -${t}-${e[1]}- -from-${t}-`;this.$datepicker.classList.add(...i.split(\" \"))}_bindEvents(){this.$el.addEventListener(this.opts.showEvent,this._onFocus),this.$el.addEventListener(\"blur\",this._onBlur),this.$datepicker.addEventListener(\"mousedown\",this._onMouseDown),this.$datepicker.addEventListener(\"mouseup\",this._onMouseUp),window.addEventListener(\"resize\",this._onResize)}_limitViewDateByMaxMinDates(){let{viewDate:e,minDate:t,maxDate:i}=this;i&&m(e,i)&&this.setViewDate(i),t&&v(e,t)&&this.setViewDate(t)}formatDate(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.viewDate,t=arguments.length>1?arguments[1]:void 0;if(e=b(e),!(e instanceof Date))return;let i=t,s=this.locale,a=o(e),n=a.dayPeriod,r=c(e),h=R.replacer,l={T:e.getTime(),m:a.minutes,mm:a.fullMinutes,h:a.hours12,hh:a.fullHours12,H:a.hours,HH:a.fullHours,aa:n,AA:n.toUpperCase(),E:s.daysShort[a.day],EEEE:s.days[a.day],d:a.date,dd:a.fullDate,M:a.month+1,MM:a.fullMonth,MMM:s.monthsShort[a.month],MMMM:s.months[a.month],yy:a.year.toString().slice(-2),yyyy:a.year,yyyy1:r[0],yyyy2:r[1]};for(let[e,t]of Object.entries(l))i=h(i,$(e),t);return i}down(e){this._handleUpDownActions(e,\"down\")}up(e){this._handleUpDownActions(e,\"up\")}selectDate(e){let t,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{currentView:a,parsedViewDate:n,selectedDates:r}=this,{updateTime:h,silent:o}=s,{moveToOtherMonthsOnSelect:l,moveToOtherYearsOnSelect:d,multipleDates:c,range:u,autoClose:p,onBeforeSelect:v}=this.opts,g=r.length;if(Array.isArray(e))return e.forEach((e=>{this.selectDate(e,s)})),new Promise((e=>{setTimeout(e)}));if((e=b(e))instanceof Date){if(v&&!o&&!v({date:e,datepicker:this}))return Promise.resolve();if(a===i.days&&e.getMonth()!==n.month&&l&&(t=new Date(e.getFullYear(),e.getMonth(),1)),a===i.years&&e.getFullYear()!==n.year&&d&&(t=new Date(e.getFullYear(),0,1)),t&&this.setViewDate(t),c&&!u){if(g===c)return;this._checkIfDateIsSelected(e)||r.push(e)}else if(u)switch(g){case 1:r.push(e),this.rangeDateTo||(this.rangeDateTo=e),m(this.rangeDateFrom,this.rangeDateTo)&&(this.rangeDateTo=this.rangeDateFrom,this.rangeDateFrom=e),this.selectedDates=[this.rangeDateFrom,this.rangeDateTo];break;case 2:this.selectedDates=[e],this.rangeDateFrom=e,this.rangeDateTo=\"\";break;default:this.selectedDates=[e],this.rangeDateFrom=e}else this.selectedDates=[e];return this.trigger(i.eventChangeSelectedDate,{action:i.actionSelectDate,silent:null==s?void 0:s.silent,date:e,updateTime:h}),this._updateLastSelectedDate(e),p&&!this.timepickerIsActive&&this.visible&&(c||u?u&&1===g&&this.hide():this.hide()),new Promise((e=>{setTimeout(e)}))}}unselectDate(e){let t=this.selectedDates,s=this;if((e=b(e))instanceof Date)return t.some(((a,n)=>{if(p(a,e))return t.splice(n,1),s.selectedDates.length?(s.rangeDateTo=\"\",s.rangeDateFrom=t[0],s._updateLastSelectedDate(s.selectedDates[s.selectedDates.length-1])):(s.rangeDateFrom=\"\",s.rangeDateTo=\"\",s._updateLastSelectedDate(!1)),this.trigger(i.eventChangeSelectedDate,{action:i.actionUnselectDate,date:e}),!0}))}replaceDate(e,t){let s=this.selectedDates.find((t=>p(t,e,this.currentView))),a=this.selectedDates.indexOf(s);a<0||p(this.selectedDates[a],t,this.currentView)||(this.selectedDates[a]=t,this.trigger(i.eventChangeSelectedDate,{action:i.actionSelectDate,date:t,updateTime:!0}),this._updateLastSelectedDate(t))}clear(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.selectedDates=[],this.rangeDateFrom=!1,this.rangeDateTo=!1,this.lastSelectedDate=!1,this.trigger(i.eventChangeSelectedDate,{action:i.actionUnselectDate,silent:e.silent}),new Promise((e=>{setTimeout(e)}))}show(){let{onShow:e,isMobile:t}=this.opts;this._cancelScheduledCall(),this.visible||this.hideAnimation||this._createComponents(),this.setPosition(this.opts.position),this.$datepicker.classList.add(\"-active-\"),this.visible=!0,e&&this._scheduleCallAfterTransition(e),t&&this._showMobileOverlay()}hide(){let{onHide:e,isMobile:t}=this.opts,i=this._hasTransition();this.visible=!1,this.hideAnimation=!0,this.$datepicker.classList.remove(\"-active-\"),this.customHide&&this.customHide(),this.elIsInput&&this.$el.blur(),this._scheduleCallAfterTransition((t=>{!this.customHide&&(t&&i||!t&&!i)&&this._finishHide(),e&&e(t)})),t&&j.classList.remove(\"-active-\")}_triggerOnSelect(){let e=[],t=[],{selectedDates:i,locale:s,opts:{onSelect:a,multipleDates:n,range:r}}=this,h=n||r,o=\"function\"==typeof s.dateFormat;i.length&&(e=i.map(g),t=o?n?s.dateFormat(e):e.map((e=>s.dateFormat(e))):e.map((e=>this.formatDate(e,s.dateFormat)))),a({date:h?e:e[0],formattedDate:h?t:t[0],datepicker:this})}_handleAlreadySelectedDates(e,t){let{selectedDates:i,rangeDateFrom:s,rangeDateTo:a}=this,{range:n,toggleSelected:r}=this.opts,h=i.length,o=\"function\"==typeof r?r({datepicker:this,date:t}):r,l=Boolean(n&&1===h&&e),d=l?g(t):t;n&&!o&&(2!==h&&this.selectDate(d),2===h&&p(s,a))||(o?this.unselectDate(d):this._updateLastSelectedDate(l?d:e))}_handleUpDownActions(e,t){if(!((e=b(e||this.focusDate||this.viewDate))instanceof Date))return;let i=\"up\"===t?this.viewIndex+1:this.viewIndex-1;i>2&&(i=2),i<0&&(i=0),this.setViewDate(new Date(e.getFullYear(),e.getMonth(),1)),this.setCurrentView(this.viewIndexes[i])}getCell(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.day;if(!((e=b(e))instanceof Date))return;let{year:s,month:a,date:n}=o(e),r=`[data-year=\"${s}\"]`,h=`[data-month=\"${a}\"]`,l={[i.day]:`${r}${h}[data-date=\"${n}\"]`,[i.month]:`${r}${h}`,[i.year]:`${r}`};return this.views[this.currentView]?this.views[this.currentView].$el.querySelector(l[t]):void 0}_showMobileOverlay(){j.classList.add(\"-active-\")}_hasTransition(){return window.getComputedStyle(this.$datepicker).getPropertyValue(\"transition-duration\").split(\", \").reduce(((e,t)=>parseFloat(t)+e),0)>0}get shouldUpdateDOM(){return this.visible||this.treatAsInline}get parsedViewDate(){return o(this.viewDate)}get currentViewSingular(){return this.currentView.slice(0,-1)}get curDecade(){return c(this.viewDate)}get viewIndex(){return this.viewIndexes.indexOf(this.currentView)}get isFinalView(){return this.currentView===i.years}get hasSelectedDates(){return this.selectedDates.length>0}get isMinViewReached(){return this.currentView===this.opts.minView||this.currentView===i.days}get $container(){return this.$customContainer||P}static replacer(e,t,i){return e.replace(t,(function(e,t,s,a){return t+i+a}))}}var K;return I(R,\"defaults\",s),I(R,\"version\",\"3.6.0\"),I(R,\"defaultGlobalContainerId\",\"air-datepicker-global-container\"),K=R.prototype,Object.assign(K,N),t.default}()}));","import AirDatepicker from './air-datepicker';\nexport default AirDatepicker","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _default = {\n  days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  today: 'Today',\n  clear: 'Clear',\n  dateFormat: 'MM/dd/yyyy',\n  timeFormat: 'hh:mm aa',\n  firstDay: 0\n};\nexports.default = _default;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AutoNumeric\"] = factory();\n\telse\n\t\troot[\"AutoNumeric\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * Enumerations for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Object that store the helper enumerations\n * @type {{ allowedTagList: [string], keyCode: {}, fromCharCodeKeyCode: [string], keyName: {} }}\n */\nconst AutoNumericEnum = {};\n\n/**\n * List of allowed tag on which autoNumeric can be used.\n */\nAutoNumericEnum.allowedTagList = [\n    'b',\n    'caption',\n    'cite',\n    'code',\n    'const',\n    'dd',\n    'del',\n    'div',\n    'dfn',\n    'dt',\n    'em',\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'h6',\n    'input',\n    'ins',\n    'kdb',\n    'label',\n    'li',\n    'option',\n    'output',\n    'p',\n    'q',\n    's',\n    'sample',\n    'span',\n    'strong',\n    'td',\n    'th',\n    'u',\n];\nObject.freeze(AutoNumericEnum.allowedTagList);\nObject.defineProperty(AutoNumericEnum, 'allowedTagList', { configurable: false, writable: false });\n\n/**\n * This object is the reverse of `keyCode`, and is used to translate the key code to named keys when no valid characters can be obtained by `String.fromCharCode`.\n * This object keys correspond to the `event.keyCode` number, and returns the corresponding key name (à la event.key)\n */\nAutoNumericEnum.fromCharCodeKeyCode = {\n    0  : 'LaunchCalculator',\n    8  : 'Backspace',\n    9  : 'Tab',\n    13 : 'Enter',\n    16 : 'Shift',\n    17 : 'Ctrl',\n    18 : 'Alt',\n    19 : 'Pause',\n    20 : 'CapsLock',\n    27 : 'Escape',\n    32 : ' ',\n    33 : 'PageUp',\n    34 : 'PageDown',\n    35 : 'End',\n    36 : 'Home',\n    37 : 'ArrowLeft',\n    38 : 'ArrowUp',\n    39 : 'ArrowRight',\n    40 : 'ArrowDown',\n    45 : 'Insert',\n    46 : 'Delete',\n    48 : '0',\n    49 : '1',\n    50 : '2',\n    51 : '3',\n    52 : '4',\n    53 : '5',\n    54 : '6',\n    55 : '7',\n    56 : '8',\n    57 : '9',\n    // 65: 'a',\n    // 66: 'b',\n    // 67: 'c',\n    // 68: 'd',\n    // 69: 'e',\n    // 70: 'f',\n    // 71: 'g',\n    // 72: 'h',\n    // 73: 'i',\n    // 74: 'j',\n    // 75: 'k',\n    // 76: 'l',\n    // 77: 'm',\n    // 78: 'n',\n    // 79: 'o',\n    // 80: 'p',\n    // 81: 'q',\n    // 82: 'r',\n    // 83: 's',\n    // 84: 't',\n    // 85: 'u',\n    // 86: 'v',\n    // 87: 'w',\n    // 88: 'x',\n    // 89: 'y',\n    // 90: 'z',\n    91 : 'OS', // Note: Firefox and Chrome reports 'OS' instead of 'OSLeft'\n    92 : 'OSRight',\n    93 : 'ContextMenu',\n    96 : '0',\n    97 : '1',\n    98 : '2',\n    99 : '3',\n    100: '4',\n    101: '5',\n    102: '6',\n    103: '7',\n    104: '8',\n    105: '9',\n    106: '*',\n    107: '+',\n    109: '-', // The 'NumpadSubtract' code\n    110: '.',\n    111: '/',\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    173: '-', // The 'Minus' sign on Firefox. This is only needed when using the Selenium bot though.\n    182: 'MyComputer',\n    183: 'MyCalculator',\n    186: ';',\n    187: '=',\n    188: ',',\n    189: '-', // The 'Minus' sign on all other browsers\n    190: '.',\n    191: '/',\n    192: '`',\n    219: '[',\n    220: '\\\\',\n    221: ']',\n    222: '\\'',\n    224: 'Meta',\n    225: 'AltGraph',\n};\nObject.freeze(AutoNumericEnum.fromCharCodeKeyCode);\nObject.defineProperty(AutoNumericEnum, 'fromCharCodeKeyCode', { configurable: false, writable: false });\n\n/**\n * Wrapper variable that hold named keyboard keys with their respective key name (as set in KeyboardEvent.key).\n * Those names are listed here :\n * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n */\nAutoNumericEnum.keyName = {\n    // Special values\n    Unidentified  : 'Unidentified',\n    AndroidDefault: 'AndroidDefault',\n\n    // Modifier keys\n    Alt       : 'Alt',\n    AltGr     : 'AltGraph',\n    CapsLock  : 'CapsLock', // Under Chrome, e.key is empty for CapsLock\n    Ctrl      : 'Control',\n    Fn        : 'Fn',\n    FnLock    : 'FnLock',\n    Hyper     : 'Hyper', // 'OS' under Firefox\n    Meta      : 'Meta',\n    OSLeft    : 'OS',\n    OSRight   : 'OS',\n    Command   : 'OS',\n    NumLock   : 'NumLock',\n    ScrollLock: 'ScrollLock',\n    Shift     : 'Shift',\n    Super     : 'Super', // 'OS' under Firefox\n    Symbol    : 'Symbol',\n    SymbolLock: 'SymbolLock',\n\n    // Whitespace keys\n    Enter: 'Enter',\n    Tab  : 'Tab',\n    Space: ' ', // 'Spacebar' for Firefox <37, and IE9\n\n    // Navigation keys\n    LeftArrow : 'ArrowLeft', // 'Left' for Firefox <=36, and IE9\n    UpArrow   : 'ArrowUp', // 'Up' for Firefox <=36, and IE9\n    RightArrow: 'ArrowRight', // 'Right' for Firefox <=36, and IE9\n    DownArrow : 'ArrowDown', // 'Down' for Firefox <=36, and IE9\n    End       : 'End',\n    Home      : 'Home',\n    PageUp    : 'PageUp',\n    PageDown  : 'PageDown',\n\n    // Editing keys\n    Backspace: 'Backspace',\n    Clear    : 'Clear',\n    Copy     : 'Copy',\n    CrSel    : 'CrSel', // 'Crsel' for Firefox <=36, and IE9\n    Cut      : 'Cut',\n    Delete   : 'Delete', // 'Del' for Firefox <=36, and IE9\n    EraseEof : 'EraseEof',\n    ExSel    : 'ExSel', // 'Exsel' for Firefox <=36, and IE9\n    Insert   : 'Insert',\n    Paste    : 'Paste',\n    Redo     : 'Redo',\n    Undo     : 'Undo',\n\n    // UI keys\n    Accept     : 'Accept',\n    Again      : 'Again',\n    Attn       : 'Attn', // 'Unidentified' for Firefox, Chrome, and IE9 ('KanaMode' when using the Japanese keyboard layout)\n    Cancel     : 'Cancel',\n    ContextMenu: 'ContextMenu', // 'Apps' for Firefox <=36, and IE9\n    Esc        : 'Escape', // 'Esc' for Firefox <=36, and IE9\n    Execute    : 'Execute',\n    Find       : 'Find',\n    Finish     : 'Finish', // 'Unidentified' for Firefox, Chrome, and IE9 ('Katakana' when using the Japanese keyboard layout)\n    Help       : 'Help',\n    Pause      : 'Pause',\n    Play       : 'Play',\n    Props      : 'Props',\n    Select     : 'Select',\n    ZoomIn     : 'ZoomIn',\n    ZoomOut    : 'ZoomOut',\n\n    // Device keys\n    BrightnessDown: 'BrightnessDown',\n    BrightnessUp  : 'BrightnessUp',\n    Eject         : 'Eject',\n    LogOff        : 'LogOff',\n    Power         : 'Power',\n    PowerOff      : 'PowerOff',\n    PrintScreen   : 'PrintScreen',\n    Hibernate     : 'Hibernate', // 'Unidentified' for Firefox <=37\n    Standby       : 'Standby', // 'Unidentified' for Firefox <=36, and IE9\n    WakeUp        : 'WakeUp',\n\n    // IME and composition keys\n    Compose: 'Compose',\n    Dead   : 'Dead',\n\n    // Function keys\n    F1 : 'F1',\n    F2 : 'F2',\n    F3 : 'F3',\n    F4 : 'F4',\n    F5 : 'F5',\n    F6 : 'F6',\n    F7 : 'F7',\n    F8 : 'F8',\n    F9 : 'F9',\n    F10: 'F10',\n    F11: 'F11',\n    F12: 'F12',\n\n    // Document keys\n    Print: 'Print',\n\n    // 'Normal' keys\n    num0            : '0',\n    num1            : '1',\n    num2            : '2',\n    num3            : '3',\n    num4            : '4',\n    num5            : '5',\n    num6            : '6',\n    num7            : '7',\n    num8            : '8',\n    num9            : '9',\n    a               : 'a',\n    b               : 'b',\n    c               : 'c',\n    d               : 'd',\n    e               : 'e',\n    f               : 'f',\n    g               : 'g',\n    h               : 'h',\n    i               : 'i',\n    j               : 'j',\n    k               : 'k',\n    l               : 'l',\n    m               : 'm',\n    n               : 'n',\n    o               : 'o',\n    p               : 'p',\n    q               : 'q',\n    r               : 'r',\n    s               : 's',\n    t               : 't',\n    u               : 'u',\n    v               : 'v',\n    w               : 'w',\n    x               : 'x',\n    y               : 'y',\n    z               : 'z',\n    A               : 'A',\n    B               : 'B',\n    C               : 'C',\n    D               : 'D',\n    E               : 'E',\n    F               : 'F',\n    G               : 'G',\n    H               : 'H',\n    I               : 'I',\n    J               : 'J',\n    K               : 'K',\n    L               : 'L',\n    M               : 'M',\n    N               : 'N',\n    O               : 'O',\n    P               : 'P',\n    Q               : 'Q',\n    R               : 'R',\n    S               : 'S',\n    T               : 'T',\n    U               : 'U',\n    V               : 'V',\n    W               : 'W',\n    X               : 'X',\n    Y               : 'Y',\n    Z               : 'Z',\n    Semicolon       : ';',\n    Equal           : '=',\n    Comma           : ',',\n    Hyphen          : '-',\n    Minus           : '-',\n    Plus            : '+',\n    Dot             : '.',\n    Slash           : '/',\n    Backquote       : '`',\n    LeftParenthesis : '(',\n    RightParenthesis: ')',\n    LeftBracket     : '[',\n    RightBracket    : ']',\n    Backslash       : '\\\\',\n    Quote           : '\\'',\n\n    // Numeric keypad keys\n    numpad0                       : '0',\n    numpad1                       : '1',\n    numpad2                       : '2',\n    numpad3                       : '3',\n    numpad4                       : '4',\n    numpad5                       : '5',\n    numpad6                       : '6',\n    numpad7                       : '7',\n    numpad8                       : '8',\n    numpad9                       : '9',\n    NumpadDot                     : '.',\n    NumpadDotAlt                  : ',', // Modern browsers automatically adapt the character sent by this key to the decimal character of the current language\n    NumpadMultiply                : '*',\n    NumpadPlus                    : '+',\n    NumpadMinus                   : '-',\n    NumpadSubtract                : '-',\n    NumpadSlash                   : '/',\n    NumpadDotObsoleteBrowsers     : 'Decimal',\n    NumpadMultiplyObsoleteBrowsers: 'Multiply',\n    NumpadPlusObsoleteBrowsers    : 'Add',\n    NumpadMinusObsoleteBrowsers   : 'Subtract',\n    NumpadSlashObsoleteBrowsers   : 'Divide',\n\n    // Special arrays for quicker tests\n    _allFnKeys           : ['F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'],\n    _someNonPrintableKeys: ['Tab', 'Enter', 'Shift', 'ShiftLeft', 'ShiftRight', 'Control', 'ControlLeft', 'ControlRight', 'Alt', 'AltLeft', 'AltRight', 'Pause', 'CapsLock', 'Escape'],\n    _directionKeys       : ['PageUp', 'PageDown', 'End', 'Home', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'],\n};\nObject.freeze(AutoNumericEnum.keyName._allFnKeys);\nObject.freeze(AutoNumericEnum.keyName._someNonPrintableKeys);\nObject.freeze(AutoNumericEnum.keyName._directionKeys);\nObject.freeze(AutoNumericEnum.keyName);\nObject.defineProperty(AutoNumericEnum, 'keyName', { configurable: false, writable: false });\n\nObject.freeze(AutoNumericEnum);\n\nexport default AutoNumericEnum;\n","/**\n * Helper functions for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumericEnum from './AutoNumericEnum';\n\n/**\n * Static class that holds all the helper functions autoNumeric uses.\n * Note : none of the functions in there are aware of any autoNumeric internals (which means there are no references to autoNumeric-specific info like options names or data structures).\n */\nexport default class AutoNumericHelper {\n    /**\n     * Return `true` if the `value` is null\n     *\n     * @static\n     * @param {*} value The value to test\n     * @returns {boolean} Return `true` if the `value` is null, FALSE otherwise\n     */\n    static isNull(value) {\n        return value === null;\n    }\n\n    /**\n     * Return `true` if the `value` is undefined\n     *\n     * @static\n     * @param {*} value The value to test\n     * @returns {boolean} Return `true` if the `value` is undefined, FALSE otherwise\n     */\n    static isUndefined(value) {\n        return value === void(0);\n    }\n\n    /**\n     * Return `true` if the `value` is undefined, null or empty\n     *\n     * @param {*} value\n     * @returns {boolean}\n     */\n    static isUndefinedOrNullOrEmpty(value) {\n        return value === null || value === void(0) || '' === value;\n    }\n\n    /**\n     * Return `true` if the given parameter is a String\n     *\n     * @param {*} str\n     * @returns {boolean}\n     */\n    static isString(str) {\n        return (typeof str === 'string' || str instanceof String);\n    }\n    /**\n     * Return `true` if the `value` is an empty string ''\n     *\n     * @static\n     * @param {*} value The value to test\n     * @returns {boolean} Return `true` if the `value` is an empty string '', FALSE otherwise\n     */\n    static isEmptyString(value) {\n        return value === '';\n    }\n\n    /**\n     * Return `true` if the parameter is a boolean\n     *\n     * @static\n     * @param {*} value\n     * @returns {boolean}\n     */\n    static isBoolean(value) {\n        return typeof(value) === 'boolean';\n    }\n\n    /**\n     * Return `true` if the parameter is a string 'true' or 'false'\n     *\n     * This function accepts any cases for those strings.\n     * @param {string} value\n     * @returns {boolean}\n     */\n    static isTrueOrFalseString(value) {\n        const lowercaseValue = String(value).toLowerCase();\n        return lowercaseValue === 'true' || lowercaseValue === 'false';\n    }\n\n    /**\n     * Return `true` if the parameter is an object\n     *\n     * @param {*} reference\n     * @returns {boolean}\n     */\n    static isObject(reference) {\n        return typeof reference === 'object' && reference !== null && !Array.isArray(reference);\n    }\n\n    /**\n     * Return `true` if the given object is empty\n     * cf. http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object and http://jsperf.com/empty-object-test\n     *\n     * @param {object} obj\n     * @returns {boolean}\n     */\n    static isEmptyObj(obj) {\n        for (const prop in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Return `true` if the parameter is a real number (and not a numeric string).\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isNumberStrict(n) {\n        return typeof n === 'number';\n    }\n\n    /**\n     * Return `true` if the parameter is a number (or a number written as a string).\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isNumber(n) {\n        return !this.isArray(n) && !isNaN(parseFloat(n)) && isFinite(n);\n    }\n\n    /**\n     * Return `true` if the given character is a number (0 to 9)\n     *\n     * @param {char} char\n     * @returns {boolean}\n     */\n    static isDigit(char) {\n        return /\\d/.test(char);\n    }\n\n    /**\n     * Return `true` if the parameter is a number (or a number written as a string).\n     * This version also accepts Arabic and Persian numbers.\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isNumberOrArabic(n) {\n        const latinConvertedNumber = this.arabicToLatinNumbers(n, false, true, true);\n        return this.isNumber(latinConvertedNumber);\n    }\n\n    /**\n     * Return `true` if the parameter is an integer (and not a float).\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isInt(n) {\n        return typeof n === 'number' && parseFloat(n) === parseInt(n, 10) && !isNaN(n);\n    }\n\n    /**\n     * Return `true` if the parameter is a function.\n     *\n     * @param {function} func\n     * @returns {boolean}\n     */\n    static isFunction(func) {\n        return typeof func === 'function';\n    }\n\n    /**\n     * Return `true` is the string `str` contains the string `needle`\n     * Note: this function does not coerce the parameters types\n     *\n     * @param {string} str\n     * @param {string} needle\n     * @returns {boolean}\n     */\n    static contains(str, needle) {\n        //TODO Use `Array.prototype.includes()` when available (cf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes)\n        if (!this.isString(str) || !this.isString(needle) || str === '' || needle === '') {\n            return false;\n        }\n\n        return str.indexOf(needle) !== -1;\n    }\n\n    /**\n     * Return `true` if the `needle` is in the array\n     *\n     * @param {*} needle\n     * @param {Array} array\n     * @returns {boolean}\n     */\n    static isInArray(needle, array) {\n        if (!this.isArray(array) || array === [] || this.isUndefined(needle)) {\n            return false;\n        }\n\n        return array.indexOf(needle) !== -1;\n    }\n\n    /**\n     * Return `true` if the parameter is an Array\n     * //TODO Replace this by the default `Array.isArray()` function?\n     *\n     * @param {*} arr\n     * @throws Error\n     * @returns {*|boolean}\n     */\n    static isArray(arr) {\n        if (Object.prototype.toString.call([]) === '[object Array]') { // Make sure an array has a class attribute of [object Array]\n            // Test passed, now check if is an Array\n            return Array.isArray(arr) || (typeof arr === 'object' && Object.prototype.toString.call(arr) === '[object Array]');\n        }\n        else {\n            throw new Error('toString message changed for Object Array'); // Verify that the string returned by `toString` does not change in the future (cf. http://stackoverflow.com/a/8365215)\n        }\n    }\n\n    /**\n     * Return `true` if the parameter is a DOM element\n     * cf. http://stackoverflow.com/a/4754104/2834898\n     *\n     * @param {*} obj\n     * @returns {boolean}\n     */\n    static isElement(obj) {\n        // return !!(obj && obj.nodeName);\n        // return obj && 'nodeType' in obj;\n        // return obj instanceof Element || obj instanceof HTMLInputElement || obj instanceof HTMLElement;\n        if (typeof Element === 'undefined') {\n            // This test is needed in environnements where the Element object does not exist (ie. in web workers)\n            return false;\n        }\n\n        return obj instanceof Element;\n    }\n\n    /**\n     * Return `true` in the given DOM element is an <input>.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @returns {boolean}\n     * @private\n     */\n    static isInputElement(domElement) {\n        return this.isElement(domElement) && domElement.tagName.toLowerCase() === 'input';\n    }\n\n    /**\n     * Return `true` if the parameter is a string that represents a float number, and that number has a decimal part\n     *\n     * @param {string} str\n     * @returns {boolean}\n     */\n    // static hasDecimals(str) {\n    //     const [, decimalPart] = str.split('.');\n    //     return !isUndefined(decimalPart);\n    // }\n\n    /**\n     * Return the number of decimal places if the parameter is a string that represents a float number, and that number has a decimal part.\n     *\n     * @param {string} str\n     * @returns {int}\n     */\n    static decimalPlaces(str) {\n        const [, decimalPart] = str.split('.');\n        if (!this.isUndefined(decimalPart)) {\n            return decimalPart.length;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Return the index of the first non-zero decimal place in the given value.\n     * The index starts after the decimal point, if any, and begins at '1'.\n     * If no decimal places are found in the value, this function returns `0`.\n     *\n     * @example\n     * indexFirstNonZeroDecimalPlace('0.00') -> 0\n     * indexFirstNonZeroDecimalPlace('1.00') -> 0\n     * indexFirstNonZeroDecimalPlace('0.12') -> 1\n     * indexFirstNonZeroDecimalPlace('0.1234') -> 1\n     * indexFirstNonZeroDecimalPlace('0.01234') -> 2\n     * indexFirstNonZeroDecimalPlace('0.001234') -> 3\n     * indexFirstNonZeroDecimalPlace('0.0001234') -> 4\n     *\n     * @param {number} value\n     * @returns {Number|number}\n     */\n    static indexFirstNonZeroDecimalPlace(value) {\n        const [, decimalPart] = String(Math.abs(value)).split('.');\n\n        if (this.isUndefined(decimalPart)) {\n            return 0;\n        }\n\n        let result = decimalPart.lastIndexOf('0');\n        if (result === -1) {\n            result = 0;\n        } else {\n            result += 2;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the code for the key used to generate the given event.\n     *\n     * @param {Event} event\n     * @returns {string|Number}\n     */\n    static keyCodeNumber(event) {\n        // `event.keyCode` and `event.which` are deprecated, `KeyboardEvent.key` (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) must be used now\n        // Also, do note that Firefox generate a 'keypress' event (e.keyCode === 0) for the keys that do not print a character (ie. 'Insert', 'Delete', 'Fn' keys, 'PageUp', 'PageDown' etc.). 'Shift' on the other hand does not generate a keypress event.\n        return (typeof event.which === 'undefined')?event.keyCode:event.which;\n    }\n\n    /**\n     * Return the character from the event key code.\n     * If the KeyboardEvent does not represent a printable character, then the key name is used (ie. 'Meta', 'Shift', 'F1', etc.)\n     * @example character(50) => '2'\n     *\n     * @param {KeyboardEvent} event\n     * @returns {string}\n     */\n    static character(event) {\n        let result;\n        if (event.key === 'Unidentified' || event.key === void(0) || this.isSeleniumBot()) {\n            //XXX The selenium geckodriver does not understand `event.key`, hence when using it, we need to rely on the old deprecated `keyCode` attribute, cf. upstream issue https://github.com/mozilla/geckodriver/issues/440\n            // Use the old deprecated keyCode property, if the new `key` one is not supported\n            const keyCode = this.keyCodeNumber(event);\n            if (keyCode === 229) { // Android Chrome returns the same keycode number 229 for all keys pressed\n                return AutoNumericEnum.keyName.AndroidDefault;\n            }\n\n            const potentialResult = AutoNumericEnum.fromCharCodeKeyCode[keyCode];\n            if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(potentialResult)) {\n                // Since `String.fromCharCode` do not return named keys for some keys ('Escape' and 'Enter' for instance), we convert the characters to the key names\n                result = potentialResult;\n            } else {\n                result = String.fromCharCode(keyCode);\n            }\n        } else {\n            switch (event.key) {\n                // Manages all the special cases for obsolete browsers that return the non-standard names\n                case 'Add':\n                    result = AutoNumericEnum.keyName.NumpadPlus;\n                    break;\n                case 'Apps':\n                    result = AutoNumericEnum.keyName.ContextMenu;\n                    break;\n                case 'Crsel':\n                    result = AutoNumericEnum.keyName.CrSel;\n                    break;\n                case 'Decimal':\n                    if (event.char) {\n                        // this fixes #602\n                        result = event.char;\n                    } else {\n                        result = AutoNumericEnum.keyName.NumpadDot;\n                    }\n                    break;\n                case 'Del':\n                    result = AutoNumericEnum.keyName.Delete;\n                    break;\n                case 'Divide':\n                    result = AutoNumericEnum.keyName.NumpadSlash;\n                    break;\n                case 'Down':\n                    result = AutoNumericEnum.keyName.DownArrow;\n                    break;\n                case 'Esc':\n                    result = AutoNumericEnum.keyName.Esc;\n                    break;\n                case 'Exsel':\n                    result = AutoNumericEnum.keyName.ExSel;\n                    break;\n                case 'Left':\n                    result = AutoNumericEnum.keyName.LeftArrow;\n                    break;\n                case 'Meta':\n                case 'Super':\n                    result = AutoNumericEnum.keyName.OSLeft;\n                    break;\n                case 'Multiply':\n                    result = AutoNumericEnum.keyName.NumpadMultiply;\n                    break;\n                case 'Right':\n                    result = AutoNumericEnum.keyName.RightArrow;\n                    break;\n                case 'Spacebar':\n                    result = AutoNumericEnum.keyName.Space;\n                    break;\n                case 'Subtract':\n                    result = AutoNumericEnum.keyName.NumpadMinus;\n                    break;\n                case 'Up':\n                    result = AutoNumericEnum.keyName.UpArrow;\n                    break;\n                default:\n                    // The normal case\n                    result = event.key;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Return an object containing the name and version of the current browser.\n     * @example `browserVersion()` => { name: 'Firefox', version: '42' }\n     * Based on http://stackoverflow.com/a/38080051/2834898\n     *\n     * @returns {{ name: string, version: string }}\n     */\n    static browser() {\n        const ua = navigator.userAgent;\n        let tem;\n        let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n        if (/trident/i.test(M[1])) {\n            tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n            return { name: 'ie', version: (tem[1] || '') };\n        }\n\n        if (M[1] === 'Chrome') {\n            tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n            if (tem !== null) {\n                return { name: tem[1].replace('OPR', 'opera'), version: tem[2] };\n            }\n        }\n\n        M = M[2]?[M[1], M[2]]:[navigator.appName, navigator.appVersion, '-?'];\n        if ((tem = ua.match(/version\\/(\\d+)/i)) !== null) {\n            M.splice(1, 1, tem[1]);\n        }\n\n        return { name: M[0].toLowerCase(), version: M[1] };\n    }\n\n    /**\n     * Check if the browser is controlled by Selenium.\n     * Note: This only works within the geckodriver.\n     * cf. http://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver\n     *\n     * @returns {boolean}\n     */\n    static isSeleniumBot() {\n        // noinspection JSUnresolvedVariable\n        return window.navigator.webdriver === true;\n    }\n\n    /**\n     * Return `true` if the given number is negative, or if the given string contains a negative sign :\n     * - everywhere in the string (by default), or\n     * - on the first character only if the `checkEverywhere` parameter is set to `false`.\n     *\n     * Note: `-0` is not a negative number since it's equal to `0`.\n     *\n     * @param {number|string} numberOrNumericString A Number, or a number represented by a string\n     * @param {string} negativeSignCharacter The single character that represent the negative sign\n     * @param {boolean} checkEverywhere If TRUE, then the negative sign is search everywhere in the numeric string (this is needed for instance if the string is '1234.56-')\n     * @returns {boolean}\n     */\n    static isNegative(numberOrNumericString, negativeSignCharacter = '-', checkEverywhere = true) {\n        if (numberOrNumericString === negativeSignCharacter) {\n            return true;\n        }\n\n        if (numberOrNumericString === '') {\n            return false;\n        }\n\n        if (AutoNumericHelper.isNumber(numberOrNumericString)) {\n            return numberOrNumericString < 0;\n        }\n\n        if (checkEverywhere) {\n            return this.contains(numberOrNumericString, negativeSignCharacter);\n        }\n\n        return this.isNegativeStrict(numberOrNumericString, negativeSignCharacter);\n    }\n\n    /**\n     * Return `true` if the given string contains a negative sign on the first character (on the far left).\n     *\n     * @example isNegativeStrict('1234.56')     => false\n     * @example isNegativeStrict('1234.56-')    => false\n     * @example isNegativeStrict('-1234.56')    => true\n     * @example isNegativeStrict('-1,234.56 €') => true\n     *\n     * @param {string} numericString\n     * @param {string} negativeSignCharacter The single character that represent the negative sign\n     * @returns {boolean}\n     */\n    static isNegativeStrict(numericString, negativeSignCharacter = '-') {\n        return numericString.charAt(0) === negativeSignCharacter;\n    }\n\n    /**\n     * Return `true` if the very first character is the opening bracket, and if the rest of the `valueString` also has the closing bracket.\n     *\n     * @param {string} valueString\n     * @param {string} leftBracket\n     * @param {string} rightBracket\n     * @returns {boolean}\n     */\n    static isNegativeWithBrackets(valueString, leftBracket, rightBracket) {\n        return valueString.charAt(0) === leftBracket && this.contains(valueString, rightBracket);\n    }\n\n    /**\n     * Return `true` if the formatted or unformatted numeric string represent the value 0 (ie. '0,00 €'), or is empty (' €').\n     * This works since we test if there are any numbers from 1 to 9 in the string. If there is none, then the number is zero (or the string is empty).\n     *\n     * @param {string} numericString\n     * @returns {boolean}\n     */\n    static isZeroOrHasNoValue(numericString) {\n        return !(/[1-9]/g).test(numericString);\n    }\n\n    /**\n     * Return the negative version of the value (represented as a string) given as a parameter.\n     * The numeric string is a valid Javascript number when typecast to a `Number`.\n     *\n     * @param {string} value\n     * @returns {*}\n     */\n    static setRawNegativeSign(value) {\n        if (!this.isNegativeStrict(value, '-')) {\n            return `-${value}`;\n        }\n\n        return value;\n    }\n\n    /**\n     * Replace the character at the position `index` in the string `string` by the character(s) `newCharacter`.\n     *\n     * @param {string} string\n     * @param {int} index\n     * @param {string} newCharacter\n     * @returns {string}\n     */\n    static replaceCharAt(string, index, newCharacter) {\n        return `${string.substr(0, index)}${newCharacter}${string.substr(index + newCharacter.length)}`;\n    }\n\n    /**\n     * Return the value clamped to the nearest minimum/maximum value, as defined in the settings.\n     *\n     * @param {string|number} value\n     * @param {object} settings\n     * @returns {number}\n     */\n    static clampToRangeLimits(value, settings) {\n        //XXX This function always assume `settings.minimumValue` is lower than `settings.maximumValue`\n        return Math.max(settings.minimumValue, Math.min(settings.maximumValue, value));\n    }\n\n    /**\n     * Return the number of number or dot characters on the left side of the caret, in a formatted number.\n     *\n     * @param {string} formattedNumberString\n     * @param {int} caretPosition This must be a positive integer\n     * @param {string} decimalCharacter\n     * @returns {number}\n     */\n    static countNumberCharactersOnTheCaretLeftSide(formattedNumberString, caretPosition, decimalCharacter) {\n        // Here we count the dot and report it as a number character too, since it will 'stay' in the Javascript number when unformatted\n        const numberDotOrNegativeSign = new RegExp(`[0-9${decimalCharacter}-]`); // No need to escape the decimal character here, since it's in `[]`\n\n        let numberDotAndNegativeSignCount = 0;\n        for (let i = 0; i < caretPosition; i++) {\n            // Test if the character is a number, a dot or an hyphen. If it is, count it, otherwise ignore it\n            if (numberDotOrNegativeSign.test(formattedNumberString[i])) {\n                numberDotAndNegativeSignCount++;\n            }\n        }\n\n        return numberDotAndNegativeSignCount;\n    }\n\n    /**\n     * Walk the `formattedNumberString` from left to right, one char by one, counting the `formattedNumberStringIndex`.\n     * If the char is in the `rawNumberString` (starting at index 0), then `rawNumberStringIndex++`, and continue until\n     * there is no more characters in `rawNumberString`) or that `rawNumberStringIndex === caretPositionInRawValue`.\n     * When you stop, the `formattedNumberStringIndex` is the position where the caret should be set.\n     *\n     * @example\n     * 1234567|89.01   : position 7 (rawNumberString)\n     * 123.456.7|89,01 : position 9 (formattedNumberString)\n     *\n     * @param {string} rawNumberString\n     * @param {int} caretPositionInRawValue\n     * @param {string} formattedNumberString\n     * @param {string} decimalCharacter\n     * @returns {*}\n     */\n    static findCaretPositionInFormattedNumber(rawNumberString, caretPositionInRawValue, formattedNumberString, decimalCharacter) {\n        const formattedNumberStringSize = formattedNumberString.length;\n        const rawNumberStringSize = rawNumberString.length;\n\n        let formattedNumberStringIndex;\n        let rawNumberStringIndex = 0;\n        for (formattedNumberStringIndex = 0;\n            formattedNumberStringIndex < formattedNumberStringSize &&\n            rawNumberStringIndex < rawNumberStringSize &&\n            rawNumberStringIndex < caretPositionInRawValue;\n            formattedNumberStringIndex++) {\n            if (rawNumberString[rawNumberStringIndex] === formattedNumberString[formattedNumberStringIndex] ||\n                (rawNumberString[rawNumberStringIndex] === '.' && formattedNumberString[formattedNumberStringIndex] === decimalCharacter)) {\n                rawNumberStringIndex++;\n            }\n        }\n\n        return formattedNumberStringIndex;\n    }\n\n    /**\n     * Count the number of occurrence of the given character, in the given text.\n     *\n     * @param {string} character\n     * @param {string} text\n     * @returns {number}\n     */\n    static countCharInText(character, text) {\n        let charCounter = 0;\n        for (let i = 0; i < text.length; i++) {\n            if (text[i] === character) {\n                charCounter++;\n            }\n        }\n\n        return charCounter;\n    }\n\n    /**\n     * Return the index that can be used to set the caret position.\n     * This takes into account that the position is starting at '0', not 1.\n     *\n     * @param {int} characterCount\n     * @returns {number}\n     */\n    static convertCharacterCountToIndexPosition(characterCount) {\n        return Math.max(characterCount, characterCount - 1);\n    }\n\n    /**\n     * Cross browser routine for getting selected range/cursor position.\n     * Note: this also works with edge cases like contenteditable-enabled elements, and hidden inputs.\n     *\n     * @param {HTMLInputElement|EventTarget} element\n     * @returns {{}}\n     */\n    static getElementSelection(element) {\n        const position = {};\n\n        let isSelectionStartUndefined;\n        try {\n            isSelectionStartUndefined = this.isUndefined(element.selectionStart);\n        } catch (error) {\n            isSelectionStartUndefined = false;\n        }\n\n        try {\n            if (isSelectionStartUndefined) {\n                const selection = window.getSelection();\n                const selectionInfo = selection.getRangeAt(0);\n                position.start = selectionInfo.startOffset;\n                position.end = selectionInfo.endOffset;\n                position.length = position.end - position.start;\n            } else {\n                position.start = element.selectionStart;\n                position.end = element.selectionEnd;\n                position.length = position.end - position.start;\n            }\n        } catch (error) {\n            // Manages the cases where :\n            // - the 'contenteditable' elements that have no selections\n            // - the <input> element is of type 'hidden'\n            position.start = 0;\n            position.end = 0;\n            position.length = 0;\n        }\n\n        return position;\n    }\n\n    /**\n     * Cross browser routine for setting selected range/cursor position\n     *\n     * @param {HTMLInputElement|EventTarget} element\n     * @param {int} start\n     * @param {int|null} end\n     */\n    static setElementSelection(element, start, end = null) {\n        if (this.isUndefinedOrNullOrEmpty(end)) {\n            end = start;\n        }\n\n        if (this.isInputElement(element)) {\n            element.setSelectionRange(start, end);\n        } else if (!AutoNumericHelper.isNull(element.firstChild)) {\n            const range = document.createRange();\n            range.setStart(element.firstChild, start);\n            range.setEnd(element.firstChild, end);\n            const selection = window.getSelection();\n            selection.removeAllRanges();\n            selection.addRange(range);\n        }\n    }\n\n    /**\n     * Function that throw error messages\n     *\n     * @param {string} message\n     * @throws\n     */\n    static throwError(message) {\n        throw new Error(message);\n    }\n\n    /**\n     * Function that display a warning messages, according to the debug level.\n     *\n     * @param {string} message\n     * @param {boolean} showWarning If FALSE, then the warning message is not displayed\n     */\n    static warning(message, showWarning = true) {\n        if (showWarning) {\n            /* eslint no-console: 0 */\n            console.warn(`Warning: ${message}`);\n        }\n    }\n\n    /**\n     * Return `true` if the given event is an instance of WheelEvent\n     *\n     * @static\n     * @param {event} event The event to test\n     * @returns {boolean} Return `true` if the event is an instance of WheelEvent, FALSE otherwise\n    */\n    static isWheelEvent(event) {\n        return event instanceof WheelEvent;\n    }\n\n    /**\n     * Return `true` if the given event is a wheelup event\n     *\n     * @param {WheelEvent} wheelEvent\n     * @returns {boolean}\n     */\n    static isWheelUpEvent(wheelEvent) {\n        if (!this.isWheelEvent(wheelEvent) || this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY)) {\n            this.throwError(`The event passed as a parameter is not a valid wheel event, '${wheelEvent.type}' given.`);\n        }\n\n        return wheelEvent.deltaY < 0;\n    }\n\n    /**\n     * Return `true` if the given event is a wheeldown event\n     *\n     * @param {WheelEvent} wheelEvent\n     * @returns {boolean}\n     */\n    static isWheelDownEvent(wheelEvent) {\n        if (!this.isWheelEvent(wheelEvent) || this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY)) {\n            this.throwError(`The event passed as a parameter is not a valid wheel event, '${wheelEvent.type}' given.`);\n        }\n\n        return wheelEvent.deltaY > 0;\n    }\n\n    /**\n     * Return `true` if the given event is an instance of WheelEvent and the deltaY value is equal to zero\n     *\n     * @param {WheelEvent} wheelEvent The event to test\n     * @returns {boolean} Return `true` if the event is an instance of WheelEvent and the deltaY value is equal to zero, FALSE otherwise\n     */\n    static isWheelEventWithZeroDeltaY(wheelEvent) {\n        return this.isWheelEvent(wheelEvent) && !this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY) && wheelEvent.deltaY === 0;\n    }\n\n    /**\n     * Return the given raw value truncated at the given number of decimal places `decimalPlaces`.\n     * This function does not round the value.\n     *\n     * @example\n     * forceDecimalPlaces(123.45678, 0) -> '123.45678'\n     * forceDecimalPlaces(123.45678, 1) -> '123.4'\n     * forceDecimalPlaces(123.45678, 2) -> '123.45'\n     * forceDecimalPlaces(123.45678, 3) -> '123.456'\n     *\n     * @param {number} value\n     * @param {int} decimalPlaces\n     * @returns {number|string}\n     */\n    static forceDecimalPlaces(value, decimalPlaces) {\n        // We could make sure `decimalPlaces` is an integer and positive, but we'll leave that to the dev calling this function.\n        const [integerPart, decimalPart] = String(value).split('.');\n        if (!decimalPart) {\n            return value;\n        }\n\n        return `${integerPart}.${decimalPart.substr(0, decimalPlaces)}`;\n    }\n\n    /**\n     * Return the 'nearest rounded' value, according to the given step size.\n     * @example roundToNearest(264789, 10000)) => 260000\n     *\n     * @param {number} value\n     * @param {number} stepPlace\n     * @returns {*}\n     */\n    static roundToNearest(value, stepPlace = 1000) {\n        if (0 === value) {\n            return 0;\n        }\n\n        if (stepPlace === 0) {\n            this.throwError('The `stepPlace` used to round is equal to `0`. This value must not be equal to zero.');\n        }\n\n        return Math.round(value / stepPlace) * stepPlace;\n    }\n\n    /**\n     * Return the 'nearest rounded' value by automatically adding or subtracting the calculated offset to the initial value.\n     * This is done without having to pass a step to this function, and based on the size of the given `value`.\n     *\n     * @example                    Calculated offset\n     *           1 ->           1 (1)\n     *          14 ->          10 (10)\n     *         143 ->         140 (10)\n     *       1.278 ->       1.300 (100)\n     *      28.456 ->      28.500 (100)\n     *     276.345 ->     276.000 (1.000)\n     *   4.534.061 ->   4.530.000 (10.000)\n     *  66.723.844 ->  66.700.000 (100.000)\n     * 257.833.411 -> 258.000.000 (1.000.000)\n     *\n     *                           Initial   Added   Offset\n     * 2 decimalPlacesRawValue : 1.12   -> 2.00   (1)\n     * 3 decimalPlacesRawValue : 1.123  -> 2.000  (1)\n     *\n     * Special case when the `value` to round is between -1 and 1, excluded :\n     * @example\n     *     Number of             Initial   Result  Calculated\n     *     decimal places        value     (add)   offset\n     * 2 decimalPlacesRawValue : 0.12   -> 0.13    (0.01) : Math.pow(10, -2)\n     * 2 decimalPlacesRawValue : 0.01   -> 0.02    (0.01)\n     * 2 decimalPlacesRawValue : 0.00   -> 0.01    (0.01)\n     *\n     * 3 decimalPlacesRawValue : 0.123  -> 0.133   (0.01)  : Math.pow(10, -2)\n     * 3 decimalPlacesRawValue : 0.012  -> 0.013   (0.001) : Math.pow(10, -3)\n     * 3 decimalPlacesRawValue : 0.001  -> 0.001   (0.001)\n     * 3 decimalPlacesRawValue : 0.000  -> 0.001   (0.001)\n     *\n     * 4 decimalPlacesRawValue : 0.4123 -> 0.4200  (0.01)   : Math.pow(10, -2)\n     * 4 decimalPlacesRawValue : 0.0412 -> 0.0420  (0.001)  : Math.pow(10, -3)\n     * 4 decimalPlacesRawValue : 0.0041 -> 0.0042  (0.0001) : Math.pow(10, -4)\n     * 4 decimalPlacesRawValue : 0.0004 -> 0.0005  (0.0001)\n     * 4 decimalPlacesRawValue : 0.0000 -> 0.0001  (0.0001)\n     *\n     * @param {number} value\n     * @param {boolean} isAddition\n     * @param {int} decimalPlacesRawValue The precision needed by the `rawValue`\n     * @returns {*}\n     */\n    static modifyAndRoundToNearestAuto(value, isAddition, decimalPlacesRawValue) {\n        value = Number(this.forceDecimalPlaces(value, decimalPlacesRawValue)); // Make sure that '0.13000000001' is converted to the number of rawValue decimal places '0.13'\n\n        const absValue = Math.abs(value);\n        if (absValue >= 0 && absValue < 1) {\n            const rawValueMinimumOffset = Math.pow(10, -decimalPlacesRawValue);\n            if (value === 0) {\n                // 4 decimalPlacesRawValue : 0.0000 -> 0.0001 (0.0001)\n                return (isAddition)?rawValueMinimumOffset:-rawValueMinimumOffset;\n            }\n\n            let offset;\n            const minimumOffsetFirstDecimalPlaceIndex = decimalPlacesRawValue;\n            // Find where is the first non-zero decimal places\n            const indexFirstNonZeroDecimalPlace = this.indexFirstNonZeroDecimalPlace(value);\n            if (indexFirstNonZeroDecimalPlace >= minimumOffsetFirstDecimalPlaceIndex - 1) {\n                /* 4 decimalPlacesRawValue : 0.0041 -> 0.0042 (0.0001) : Math.pow(10, -4)\n                 * 4 decimalPlacesRawValue : 0.0004 -> 0.0005 (0.0001)\n                 */\n                offset = rawValueMinimumOffset;\n            } else {\n                offset = Math.pow(10, -(indexFirstNonZeroDecimalPlace + 1));\n            }\n\n            let result;\n            if (isAddition) {\n                result = value + offset;\n            } else {\n                result = value - offset;\n            }\n\n            return this.roundToNearest(result, offset);\n        } else {\n            // For values >= 1\n            value = parseInt(value, 10);\n            const lengthValue = Math.abs(value).toString().length; // `Math.abs()` is needed here to omit the negative sign '-' in case of a negative value\n\n            let pow;\n            switch (lengthValue) {\n                // Special cases for small numbers\n                case 1:\n                    pow = 0;\n                    break;\n                case 2:\n                case 3:\n                    pow = 1;\n                    break;\n                case 4:\n                case 5:\n                    pow = 2;\n                    break;\n                // Default behavior\n                default:\n                    pow = lengthValue - 3;\n            }\n            const offset = Math.pow(10, pow);\n\n            let result;\n            if (isAddition) {\n                result = value + offset;\n            } else {\n                result = value - offset;\n            }\n\n            if (result <= 10 && result >= -10) {\n                return result;\n            }\n\n            return this.roundToNearest(result, offset);\n        }\n    }\n\n    /**\n     * Return the 'nearest rounded' value automatically by adding the calculated offset to the initial value.\n     * This will limit the result to the given number of decimal places `decimalPlacesLimit`.\n     *\n     * @param {number} value\n     * @param {int} decimalPlacesLimit\n     * @returns {*}\n     */\n    static addAndRoundToNearestAuto(value, decimalPlacesLimit) {\n        return this.modifyAndRoundToNearestAuto(value, true, decimalPlacesLimit);\n    }\n\n    /**\n     * Return the 'nearest rounded' value automatically by subtracting the calculated offset to the initial value.\n     * This will limit the result to the given number of decimal places `decimalPlacesLimit`.\n     *\n     * @param {number} value\n     * @param {int} decimalPlacesLimit\n     * @returns {*}\n     */\n    static subtractAndRoundToNearestAuto(value, decimalPlacesLimit) {\n        return this.modifyAndRoundToNearestAuto(value, false, decimalPlacesLimit);\n    }\n\n    /**\n     * Take an arabic number as a string and return a javascript number.\n     * By default, this function does not try to convert the arabic decimal and thousand separator characters.\n     * This returns `NaN` is the conversion is not possible.\n     * Based on http://stackoverflow.com/a/17025392/2834898\n     *\n     * @param {string} arabicNumbers\n     * @param {boolean} returnANumber If `true`, return a Number, otherwise return a String\n     * @param {boolean} parseDecimalCharacter\n     * @param {boolean} parseThousandSeparator\n     * @returns {string|number|NaN}\n     */\n    static arabicToLatinNumbers(arabicNumbers, returnANumber = true, parseDecimalCharacter = false, parseThousandSeparator = false) {\n        if (this.isNull(arabicNumbers)) {\n            return arabicNumbers;\n        }\n\n        let result = arabicNumbers.toString();\n        if (result === '') {\n            return arabicNumbers;\n        }\n\n        if (result.match(/[٠١٢٣٤٥٦٧٨٩۴۵۶]/g) === null) {\n            // If no Arabic/Persian numbers are found, return the numeric string or number directly\n            if (returnANumber) {\n                result = Number(result);\n            }\n\n            return result;\n        }\n\n        if (parseDecimalCharacter) {\n            result = result.replace(/٫/, '.'); // Decimal character\n        }\n\n        if (parseThousandSeparator) {\n            result = result.replace(/٬/g, ''); // Thousand separator\n        }\n\n        // Replace the numbers only\n        result = result.replace(/[٠١٢٣٤٥٦٧٨٩]/g, d => d.charCodeAt(0) - 1632) // Arabic numbers\n            .replace(/[۰۱۲۳۴۵۶۷۸۹]/g, d => d.charCodeAt(0) - 1776); // Persian numbers\n\n        // `NaN` has precedence over the string `'NaN'`\n        const resultAsNumber = Number(result);\n        if (isNaN(resultAsNumber)) {\n            return resultAsNumber;\n        }\n\n        if (returnANumber) {\n            result = resultAsNumber;\n        }\n\n        return result;\n    }\n\n    /**\n     * Create a custom event and immediately sent it from the given element.\n     * By default, if no element is given, the event is thrown from `document`.\n     *\n     * @param {string} eventName\n     * @param {HTMLElement|HTMLDocument|EventTarget} element\n     * @param {object} detail\n     * @param {boolean} bubbles Set to `true` if the event must bubble up\n     * @param {boolean} cancelable Set to `true` if the event must be cancelable\n     */\n    static triggerEvent(eventName, element = document, detail = null, bubbles = true, cancelable = true) {\n        let event;\n        if (window.CustomEvent) {\n            event = new CustomEvent(eventName, { detail, bubbles , cancelable }); // This is not supported by default by IE ; We use the polyfill for IE9 and later.\n        } else {\n            event = document.createEvent('CustomEvent');\n            event.initCustomEvent(eventName, bubbles, cancelable, { detail });\n        }\n\n        element.dispatchEvent(event);\n    }\n\n    /**\n     * Function to parse minimumValue, maximumValue & the input value to prepare for testing to determine if the value falls within the min / max range.\n     * Return an object example: minimumValue: \"999999999999999.99\" returns the following \"{s: -1, e: 12, c: Array[15]}\".\n     *\n     * This function is adapted from Big.js https://github.com/MikeMcl/big.js/. Many thanks to Mike.\n     *\n     * @param {number|string} value A numeric value.\n     * @returns {{}}\n     */\n    static parseStr(value) {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(value)) {\n            return { s: 1, e: 0, c: [0] }; // Return the representation for null/undefined\n        }\n\n        const result = {}; // A Big number instance.\n        let e;\n        let i;\n        let nL;\n        let j;\n\n        // Minus zero?\n        if (value === 0 && 1 / value < 0) {\n            value = '-0';\n        }\n\n        // Determine sign. 1 positive, -1 negative\n        value = value.toString();\n        if (this.isNegativeStrict(value, '-')) {\n            value = value.slice(1);\n            result.s = -1;\n        } else {\n            result.s = 1;\n        }\n\n        // Decimal point?\n        e = value.indexOf('.');\n        if (e > -1) {\n            value = value.replace('.', '');\n        }\n\n        // Length of string if no decimal character\n        if (e < 0) {\n            // Integer\n            e = value.length;\n        }\n\n        // Determine leading zeros\n        i = (value.search(/[1-9]/i) === -1) ? value.length : value.search(/[1-9]/i);\n        nL = value.length;\n        if (i === nL) {\n            // Zero\n            result.e = 0;\n            result.c = [0];\n        } else {\n            // Determine trailing zeros\n            for (j = nL - 1; value.charAt(j) === '0'; j -= 1) {\n                nL -= 1;\n            }\n            nL -= 1;\n\n            // Decimal location\n            result.e = e - i - 1;\n            result.c = [];\n\n            // Convert string to array of digits without leading/trailing zeros\n            for (e = 0; i <= nL; i += 1) {\n                result.c[e] = +value.charAt(i);\n                e += 1;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Function to test if the input value falls with the Min / Max settings.\n     * This uses the parsed strings for the above parseStr function.\n     *\n     * This function is adapted from Big.js https://github.com/MikeMcl/big.js/. Many thanks to Mike.\n     *\n     * @param {object} y Big number instance\n     * @param {object} x Big number instance\n     * @returns {*}\n     */\n    static testMinMax(y, x) {\n        const xc = x.c;\n        const yc = y.c;\n        let i = x.s;\n        let j = y.s;\n        let k = x.e;\n        let l = y.e;\n\n        // Either zero?\n        if (!xc[0] || !yc[0]) {\n            let result;\n            if (!xc[0]) {\n                result = !yc[0]?0:-j;\n            } else {\n                result = i;\n            }\n            return result;\n        }\n\n        // Signs differ?\n        if (i !== j) {\n            return i;\n        }\n        const xNeg = i < 0;\n\n        // Compare exponents\n        if (k !== l) {\n            return (k > l ^ xNeg)?1:-1;\n        }\n        i = -1;\n        k = xc.length;\n        l = yc.length;\n        j = (k < l) ? k : l;\n\n        // Compare digit by digit\n        for (i += 1; i < j; i += 1) {\n            if (xc[i] !== yc[i]) {\n                return (xc[i] > yc[i] ^ xNeg)?1:-1;\n            }\n        }\n\n        // Compare lengths\n        let result;\n        if (k === l) {\n            result = 0;\n        } else {\n            result = (k > l ^ xNeg)?1:-1;\n        }\n\n        return result;\n    }\n\n    /**\n     * Generate a random string.\n     * cf. http://stackoverflow.com/a/8084248/2834898\n     *\n     * @param {Number} strLength Length of the generated string (in character count)\n     * @returns {string}\n     */\n    static randomString(strLength = 5) {\n        return Math.random()\n            .toString(36)\n            .substr(2, strLength);\n    }\n\n    /**\n     * Return the DOM element when passed either a DOM element or a selector string.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @returns {HTMLElement}\n     */\n    static domElement(domElementOrSelector) {\n        let domElement;\n        if (AutoNumericHelper.isString(domElementOrSelector)) {\n            domElement = document.querySelector(domElementOrSelector);\n        } else {\n            domElement = domElementOrSelector;\n        }\n\n        return domElement;\n    }\n\n    /**\n     * Retrieve the current element value.\n     *\n     * @param {HTMLElement|HTMLInputElement|EventTarget} element\n     * @returns {number|string|null}\n     */\n    static getElementValue(element) {\n        if (element.tagName.toLowerCase() === 'input') {\n            return element.value;\n        }\n\n        return this.text(element);\n    }\n\n    /**\n     * Modify the element value directly.\n     *\n     * @param {HTMLElement|HTMLInputElement} element\n     * @param {number|string|null} value\n     */\n    static setElementValue(element, value = null) {\n        if (element.tagName.toLowerCase() === 'input') {\n            element.value = value;\n        } else {\n            element.textContent = value;\n        }\n    }\n\n    /**\n     * Set the invalid state for the given element.\n     * A custom message can be passed as the second argument.\n     * Note: This does not work with contenteditable elements\n     *\n     * @param {HTMLElement|HTMLInputElement} element\n     * @param {string|null} message\n     * @throws Error\n     */\n    static setInvalidState(element, message = 'Invalid') {\n        if (message === '' || this.isNull(message)) this.throwError('Cannot set the invalid state with an empty message.');\n\n        element.setCustomValidity(message);\n    }\n\n    /**\n     * Set the valid state for the given element.\n     * Note: This does not work with contenteditable elements\n     *\n     * @param {HTMLElement|HTMLInputElement} element\n     */\n    static setValidState(element) {\n        element.setCustomValidity('');\n    }\n\n    /**\n     * This clone the given object, and return it.\n     * WARNING: This does not do a deep cloning.\n     * cf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Examples\n     * //TODO Add a `deep` option to clone object with more than one depth\n     *\n     * @param {object} obj\n     * @returns {object}\n     */\n    static cloneObject(obj) {\n        return Object.assign({}, obj);\n    }\n\n    /**\n     * Return a 'camelized' version of the given string.\n     * By default, this assume that :\n     * - the separators are hyphens '-',\n     * - the 'data-' string should be removed, and\n     * - that the very first word should not be capitalized.\n     *\n     * @example camelize('data-currency-symbol') => 'currencySymbol'\n     *\n     * @param {string} str Text to camelize\n     * @param {string} separator Character that separate each word\n     * @param {boolean} removeData If set to `true`, remove the `data-` part that you can find on some html attributes\n     * @param {boolean} skipFirstWord If set to `true`, do not capitalize the very first word\n     * @returns {string|null}\n     */\n    static camelize(str, separator = '-', removeData = true, skipFirstWord = true) {\n        if (this.isNull(str)) {\n            return null;\n        }\n\n        if (removeData) {\n            str = str.replace(/^data-/, '');\n        }\n\n        // Cut the string into words\n        const words = str.split(separator);\n\n        // Capitalize each word\n        let result = words.map(word => `${word.charAt(0).toUpperCase()}${word.slice(1)}`);\n\n        // Then concatenate them back\n        result = result.join('');\n\n        if (skipFirstWord) {\n            // Skip the very first letter\n            result = `${result.charAt(0).toLowerCase()}${result.slice(1)}`;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the text component of the given DOM element.\n     *\n     * @param {Element} domElement\n     * @returns {string}\n     */\n    static text(domElement) {\n        const nodeType = domElement.nodeType;\n\n        let result;\n        // cf. https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n        if (nodeType === Node.ELEMENT_NODE ||\n            nodeType === Node.DOCUMENT_NODE ||\n            nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            result = domElement.textContent;\n        } else if (nodeType === Node.TEXT_NODE) {\n            result = domElement.nodeValue;\n        } else {\n            result = '';\n        }\n\n        return result;\n    }\n\n    /**\n     * Set the text content of the given DOM element.\n     * @param {Element} domElement\n     * @param {string} text\n     */\n    static setText(domElement, text) {\n        const nodeType = domElement.nodeType;\n        if (nodeType === Node.ELEMENT_NODE ||\n            nodeType === Node.DOCUMENT_NODE ||\n            nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            domElement.textContent = text;\n        }\n        //TODO Display a warning if that function does not do anything?\n    }\n\n    /**\n     * Filter out the given `arr` array with the elements found in `excludedElements`.\n     * This returns a new array and does not modify the source.\n     * cf. verification here : http://codepen.io/AnotherLinuxUser/pen/XpvrMg?editors=0012\n     *\n     * @param {Array} arr\n     * @param {Array} excludedElements\n     * @returns {*|Array.<T>}\n     */\n    static filterOut(arr, excludedElements) {\n        return arr.filter(element => !this.isInArray(element, excludedElements));\n    }\n\n    /**\n     * Remove the trailing zeros in the decimal part of a number.\n     *\n     * @param {string} numericString\n     * @returns {*}\n     */\n    static trimPaddedZerosFromDecimalPlaces(numericString) {\n        numericString = String(numericString);\n        if (numericString === '') {\n            return '';\n        }\n\n        const [integerPart, decimalPart] = numericString.split('.');\n        if (this.isUndefinedOrNullOrEmpty(decimalPart)) {\n            return integerPart;\n        }\n\n        const trimmedDecimalPart = decimalPart.replace(/0+$/g, '');\n\n        let result;\n        if (trimmedDecimalPart === '') {\n            result = integerPart;\n        } else {\n            result = `${integerPart}.${trimmedDecimalPart}`;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the top-most hovered item by the mouse cursor.\n     *\n     * @returns {*}\n     */\n    static getHoveredElement() {\n        const hoveredElements = [...document.querySelectorAll(':hover')];\n        return hoveredElements[hoveredElements.length - 1];\n    }\n\n    /**\n     * Return the given array trimmed to the given length.\n     * @example arrayTrim([1, 2, 3, 4], 2) -> [1, 2]\n     *\n     * @param {Array} array\n     * @param {Number} length\n     * @returns {*}\n     */\n    static arrayTrim(array, length) {\n        const arrLength = array.length;\n        if (arrLength === 0 || length > arrLength) {\n            // Also manage the case where `length` is higher than the current length\n            return array;\n        }\n\n        if (length < 0) {\n            return [];\n        }\n\n        array.length = parseInt(length, 10);\n\n        return array;\n    }\n\n    /**\n     * Merge all the given arrays by keeping only unique elements, and return an array with de-duplicated values.\n     * cf. http://stackoverflow.com/a/27664971/2834898\n     *\n     * @param {...array} arrays\n     * @returns {[*]}\n     */\n    static arrayUnique(...arrays) {\n        return [...new Set([].concat(...arrays))];\n    }\n\n    /**\n     * Merge all the given Maps by keeping only unique elements, and return a new Map with de-duplicated keys.\n     *\n     * @param {...Map} mapObjects\n     * @returns {Map}\n     */\n    static mergeMaps(...mapObjects) {\n        return new Map(mapObjects.reduce((as, b) => as.concat([...b]), []));\n    }\n\n    /**\n     * Search the given `value` in the object `obj`, and return the very first key it finds\n     *\n     * @param {object} obj\n     * @param {string|number} value\n     * @returns {*|null}\n     */\n    static objectKeyLookup(obj, value) {\n        const result = Object.entries(obj).find(array => array[1] === value);\n        let key = null;\n        if (result !== void(0)) {\n            key = result[0];\n        }\n\n        return key;\n    }\n\n    /**\n     * Insert the single character `char` in the string `str` at the given position `index`\n     *\n     * @param {string} str\n     * @param {string} char\n     * @param {int} index\n     * @returns {string}\n     */\n    static insertAt(str, char, index) {\n        str = String(str);\n\n        if (index > str.length) {\n            throw new Error(`The given index is out of the string range.`);\n        }\n\n        if (char.length !== 1) {\n            throw new Error('The given string `char` should be only one character long.');\n        }\n\n        if (str === '' && index === 0) {\n            return char;\n        }\n\n        return `${str.slice(0, index)}${char}${str.slice(index)}`;\n    }\n\n    /**\n     * Convert the given scientific notation to the 'expanded' decimal notation\n     *\n     * @example scientificToDecimal('-123.4567e-6') returns '-0.0001234567'\n     *\n     * @param {number|string} val\n     * @returns {number|string}\n     */\n    static scientificToDecimal(val) {\n        // Check that the val is a Number\n        const numericValue = Number(val);\n        if (isNaN(numericValue)) {\n            return NaN;\n        }\n\n        // Check if the number is in a scientific notation\n        val                = String(val);\n        const isScientific = this.contains(val, 'e') || this.contains(val, 'E');\n\n        if (!isScientific) {\n            return val;\n        }\n\n        // Convert the scientific notation to a numeric string\n        let [value, exponent] = val.split(/e/i);\n        const isNegative = value < 0;\n        if (isNegative) {\n            value = value.replace('-', '');\n        }\n\n        const isNegativeExponent = +exponent < 0;\n        if (isNegativeExponent) {\n            exponent = exponent.replace('-', ''); // Remove the negative sign\n        }\n\n        const [int, float] = value.split(/\\./);\n\n        let result;\n        if (isNegativeExponent) {\n            if (int.length > exponent) {\n                // Place the decimal point at the int length count minus exponent\n                result = this.insertAt(int, '.', int.length - exponent);\n            } else {\n                // If that decimal point is greater than the int length, pad with zeros (ie. Number('-123.4567e-6') --> -0.0001234567)\n                result = `0.${'0'.repeat(exponent - int.length)}${int}`;\n            }\n\n            result = `${result}${float?float:''}`;\n        } else { // Positive exponent\n            if (float) {\n                value = `${int}${float}`; // Remove the '.', if any\n                if (exponent < float.length) {\n                    result = this.insertAt(value, '.', +exponent + int.length);\n                } else {\n                    result = `${value}${'0'.repeat(exponent - float.length)}`;\n                }\n            } else {\n                value = value.replace('.', ''); // Single case where val is '1.e4'\n                result = `${value}${'0'.repeat(Number(exponent))}`;\n            }\n        }\n\n        if (isNegative) {\n            // Put back the negative sign, if any\n            result = `-${result}`;\n        }\n\n        return result;\n    }\n}\n","/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Recursively evaluate the abstract syntax tree (AST) and return the result for the given sub-tree\n */\nexport default class Evaluator {\n    constructor(ast) {\n        if (ast === null) {\n            throw new Error(`Invalid AST`);\n        }\n\n        // return this.evaluate(ast);\n    }\n\n    evaluate(subtree) {\n        if (subtree === void(0) || subtree === null) {\n            throw new Error(`Invalid AST sub-tree`);\n        }\n\n        if (subtree.type === 'number') {\n            return subtree.value;\n        } else if (subtree.type === 'unaryMinus') {\n            return -this.evaluate(subtree.left);\n        } else {\n            const left  = this.evaluate(subtree.left);\n            const right = this.evaluate(subtree.right);\n\n            switch (subtree.type) {\n                case 'op_+':\n                    return Number(left) + Number(right);\n                case 'op_-':\n                    return left - right;\n                case 'op_*':\n                    return left * right;\n                case 'op_/':\n                    return left / right;\n                default :\n                    throw new Error(`Invalid operator '${subtree.type}'`);\n            }\n        }\n    }\n}\n","/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * The Abstract Syntax Tree node\n *\n * Each node carries the node information such as type (operator type), value (if it's a leaf), and the left and right branches\n */\nexport default class ASTNode {\n    /*\n    constructor() {\n        // this.type = void(0);\n        // this.value = 0;\n        // this.left = null;\n        // this.right = null;\n    }\n    */\n\n    static createNode(type, left, right) {\n        const node = new ASTNode();\n        node.type = type;\n        node.left = left;\n        node.right = right;\n\n        return node;\n    }\n\n    static createUnaryNode(left) {\n        const node = new ASTNode();\n        node.type = 'unaryMinus';\n        node.left = left;\n        node.right = null;\n\n        return node;\n    }\n\n    static createLeaf(value) {\n        const node = new ASTNode();\n        node.type = 'number';\n        node.value = value;\n\n        return node;\n    }\n}\n","/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Data structure used by the Lexer and Parser classes\n */\nexport default class Token {\n    constructor(type, value, symbol) {\n        this.type = type;\n        this.value = value;\n        this.symbol = symbol;\n    }\n}\n","/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumericHelper from '../AutoNumericHelper';\nimport Token             from './Token';\n\nexport default class Lexer {\n    constructor(text) {\n        this.text  = text;\n        this.textLength = text.length;\n        this.index = 0;\n        this.token = new Token('Error', 0, 0);\n    }\n\n    /**\n     * Ignore white spaces and increment the index count until a non-space character is found\n     * @private\n     */\n    _skipSpaces() {\n        while (this.text[this.index] === ' ' && this.index <= this.textLength) {\n            this.index++;\n        }\n    }\n\n    /**\n     * Return the current index\n     *\n     * @returns {number}\n     */\n    getIndex() {\n        return this.index;\n    }\n\n    /**\n     * Return the next token object\n     *\n     * @param {string} decimalCharacter The decimal character to use in the float numbers\n     * @returns {Token}\n     */\n    getNextToken(decimalCharacter = '.') {\n        this._skipSpaces();\n\n        // Test for the end of text\n        if (this.textLength === this.index) {\n            this.token.type = 'EOT'; // End of text\n\n            return this.token;\n        }\n\n        // If the current character is a digit read a number\n        if (AutoNumericHelper.isDigit(this.text[this.index])) {\n            this.token.type  = 'num';\n            this.token.value = this._getNumber(decimalCharacter);\n\n            return this.token;\n        }\n\n        // Check if the current character is an operator or parentheses\n        this.token.type = 'Error';\n        switch (this.text[this.index]) {\n            case '+': this.token.type = '+'; break;\n            case '-': this.token.type = '-'; break;\n            case '*': this.token.type = '*'; break;\n            case '/': this.token.type = '/'; break;\n            case '(': this.token.type = '('; break;\n            case ')': this.token.type = ')'; break;\n        }\n\n        if (this.token.type !== 'Error') {\n            this.token.symbol = this.text[this.index];\n            this.index++;\n        } else {\n            throw new Error(`Unexpected token '${this.token.symbol}' at position '${this.token.index}' in the token function`);\n        }\n\n        return this.token;\n    }\n\n    /**\n     * Return the integer or float number starting from the `this.index` string index\n     *\n     * @param {string} decimalCharacter The decimal character to use in the float numbers\n     *\n     * @returns {string}\n     * @private\n     */\n    _getNumber(decimalCharacter) {\n        this._skipSpaces();\n\n        const startIndex = this.index;\n        while (this.index <= this.textLength && AutoNumericHelper.isDigit(this.text[this.index])) { // Integer part\n            this.index++;\n        }\n\n        if (this.text[this.index] === decimalCharacter) {\n            this.index++;\n        }\n\n        while (this.index <= this.textLength && AutoNumericHelper.isDigit(this.text[this.index])) { // Decimal part, if any\n            this.index++;\n        }\n\n        if (this.index === startIndex) {\n            throw new Error(`No number has been found while it was expected`);\n        }\n\n        // Convert the localized float number to a Javascript number\n        return this.text.substring(startIndex, this.index).replace(decimalCharacter, '.');\n    }\n}\n","/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport ASTNode from './ASTNode';\nimport Lexer   from './Lexer';\n\n/**\n * Math expression parser using the shunting-yard algorithm\n *\n * This implements the following BNF grammar:\n * EXP       -> TERM MORE_EXP\n * MORE_EXP  -> + TERM MORE_EXP |\n *              - TERM MORE_EXP |\n *              epsilon\n * TERM      -> FACTOR MORE_TERM\n * MORE_TERM -> * FACTOR MORE_TERM |\n *              / FACTOR MORE_TERM |\n *              epsilon\n * FACTOR    -> number |\n *             ( EXP ) |\n *             - FACTOR\n */\nexport default class Parser {\n    /**\n     * Parse the given string, and generate an abstract syntax tree (AST) from the math expression\n     *\n     * @param {string} text\n     * @param {string} customDecimalCharacter The custom decimal character to use in floats\n     * @returns {ASTNode}\n     */\n    constructor(text, customDecimalCharacter = '.') {\n        this.text = text;\n        this.decimalCharacter = customDecimalCharacter;\n        this.lexer = new Lexer(text);\n        this.token = this.lexer.getNextToken(this.decimalCharacter);\n\n        return this._exp();\n    }\n\n    _exp() {\n        const termNode = this._term();\n        const exprNode = this._moreExp();\n\n        //TODO Do not create an 'empty' node where this is added to 0\n        return ASTNode.createNode('op_+', termNode, exprNode);\n    }\n\n    _moreExp() {\n        let termNode;\n        let exprNode;\n        switch (this.token.type) {\n            case '+':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                termNode = this._term();\n                exprNode = this._moreExp();\n\n                return ASTNode.createNode('op_+', exprNode, termNode);\n            case '-':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                termNode = this._term();\n                exprNode = this._moreExp();\n\n                return ASTNode.createNode('op_-', exprNode, termNode);\n        }\n\n        return ASTNode.createLeaf(0);\n    }\n\n    _term() {\n        const factorNode = this._factor();\n        const termsNode = this._moreTerms();\n\n        //TODO Do not create an 'empty' node where this is multiplied by 1\n        return ASTNode.createNode('op_*', factorNode, termsNode);\n    }\n\n    _moreTerms() {\n        let factorNode;\n        let termsNode;\n        switch (this.token.type) {\n            case '*':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                factorNode = this._factor();\n                termsNode = this._moreTerms();\n\n                return ASTNode.createNode('op_*', termsNode, factorNode);\n            case '/':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                factorNode = this._factor();\n                termsNode = this._moreTerms();\n\n                return ASTNode.createNode('op_/', termsNode, factorNode);\n        }\n\n        return ASTNode.createLeaf(1);\n    }\n\n    _factor() {\n        let expression;\n        let factor;\n        let value;\n        switch (this.token.type) {\n            case 'num':\n                value = this.token.value;\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n\n                return ASTNode.createLeaf(value);\n            case '-':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                factor = this._factor();\n\n                return ASTNode.createUnaryNode(factor);\n            case '(':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                expression = this._exp();\n                this._match(')');\n\n                return expression;\n            default: {\n                throw new Error(`Unexpected token '${this.token.symbol}' with type '${this.token.type}' at position '${this.token.index}' in the factor function`);\n            }\n        }\n    }\n\n    _match(expected) {\n        const index = this.lexer.getIndex() - 1;\n        if (this.text[index] === expected) {\n            this.token = this.lexer.getNextToken(this.decimalCharacter);\n        } else {\n            throw new Error(`Unexpected token '${this.token.symbol}' at position '${index}' in the match function`);\n        }\n    }\n}\n","/**\n *               AutoNumeric.js\n *\n * @version      4.10.9\n * @date         2025-09-03 UTC 09:00\n *\n * @authors      2016-2025 Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n *               2009-2016 Bob Knothe <bob.knothe@gmail.com>\n * @contributors Sokolov Yura and others, cf. AUTHORS\n * @copyright    Alexandre Bonneau & Robert J. Knothe\n * @since        2009-08-09\n *\n * @summary      AutoNumeric is a standalone Javascript library\n *               that provides live *as-you-type* formatting for\n *               international numbers and currencies.\n *\n * @link         http://autonumeric.org\n * @docs         https://docs.autonumeric.org\n *\n *               Note : Some functions are borrowed from big.js\n * @see          https://github.com/MikeMcl/big.js/\n *\n * Please report any bugs to https://github.com/autoNumeric/autoNumeric\n *\n * @license      Released under the MIT License\n * @link         http://www.opensource.org/licenses/mit-license.php\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n//TODO Prevent having to enter relative path in the js files (i.e. using `./AutoNumericHelper` instead of just `AutoNumericHelper`) (cf. http://moduscreate.com/es6-es2015-import-no-relative-path-webpack/)\nimport AutoNumericHelper from './AutoNumericHelper';\nimport AutoNumericEnum   from './AutoNumericEnum';\nimport Evaluator         from './maths/Evaluator';\nimport Parser            from './maths/Parser';\n\n/**\n * Class declaration for the AutoNumeric object.\n *\n * An AutoNumeric element is an object wrapper that keeps a reference to the DOM element it manages (usually an <input> one), and provides autoNumeric-specific variables and functions.\n */\nexport default class AutoNumeric {\n    static options; // Those static declarations are only used by the IDE, to prevent error messages not finding those fields declarations\n    static events;\n    static defaultSettings;\n    static predefinedOptions;\n\n    /**\n     * Return the autoNumeric version number (for debugging purpose)\n     *\n     * @returns {string}\n     */\n    static version() {\n        return '4.10.9';\n    }\n\n    /**\n     * Initialize the AutoNumeric object onto the given DOM element, and attach the settings and related event listeners to it.\n     * The options passed as a parameter is an object that contains the settings (i.e. {digitGroupSeparator: \".\", decimalCharacter: \",\", currencySymbol: '€ '})\n     *\n     * @example\n     * anElement = new AutoNumeric(domElement); // With the default options\n     * anElement = new AutoNumeric(domElement, { options }); // With one option object\n     * anElement = new AutoNumeric(domElement, 'euroPos'); // With a named pre-defined string\n     * anElement = new AutoNumeric(domElement, [{ options1 }, 'euroPos', { options2 }]); // With multiple option objects (the latest option overwriting the previous ones)\n     * anElement = new AutoNumeric(domElement, null, { options }); // With one option object, and a failed initial value\n     * anElement = new AutoNumeric(domElement).french(); // With one pre-defined language object\n     * anElement = new AutoNumeric(domElement).french({ options });// With one pre-defined language object and additional options that will override the defaults\n     *\n     * // ...or init and set the value in one call :\n     * anElement = new AutoNumeric(domElement, 12345.789); // With the default options, and an initial value\n     * anElement = new AutoNumeric(domElement, 12345.789, { options });\n     * anElement = new AutoNumeric(domElement, '12345.789', { options });\n     * anElement = new AutoNumeric(domElement, 12345.789, 'euroPos');\n     * anElement = new AutoNumeric(domElement, 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n     * anElement = new AutoNumeric(domElement, 12345.789).french({ options });\n     * anElement = new AutoNumeric(domElement, 12345.789, { options }).french({ options }); // Not really helpful, but possible\n     *\n     * // The AutoNumeric constructor class can also accept a string as a css selector. Under the hood this use `QuerySelector` and limit itself to only the first element it finds.\n     * anElement = new AutoNumeric('.myCssClass > input');\n     * anElement = new AutoNumeric('.myCssClass > input', { options });\n     * anElement = new AutoNumeric('.myCssClass > input', 'euroPos');\n     * anElement = new AutoNumeric('.myCssClass > input', [{ options1 }, 'euroPos', { options2 }]);\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789);\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789, { options });\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789, 'euroPos');\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n     * anElement = new AutoNumeric('.myCssClass > input', null, { options }); // With a failed initial value\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789).french({ options });\n     *\n     * @param {object|Array|number|string} arg1\n     * @param {object|Array|number|string|null} arg2\n     * @param {object|Array|number|string|null} arg3\n     * @throws\n     */\n    constructor(arg1 = null, arg2 = null, arg3 = null) {\n        // --------------------------------------------------------\n        // -------------- Initialization\n        // Initialize the arguments\n        const { domElement, initialValue, userOptions } = AutoNumeric._setArgumentsValues(arg1, arg2, arg3);\n\n        // Initialize the element\n        this.domElement = domElement;\n\n        // Generate the settings\n        this.defaultRawValue = ''; // The default raw value to set when initializing an AutoNumeric object\n        this._setSettings(userOptions, false);\n        //TODO If `styleRules` is not null, add by default a class 'autoNumeric' that adds transition to color, background-color, border-color properties\n        // Check if the DOM element is supported\n        this._checkElement();\n\n        // Store the additional attributes inside the AutoNumeric object\n        // Note: This variable is needed and not a duplicate of `initialValueOnFirstKeydown` nor `valueOnFocus` since it serves a different purpose and has a different lifecycle\n        this.savedCancellableValue = null;\n\n        // Initialize the undo/redo variables\n        this.historyTable = []; // Keep track of *all* valid states of the element value\n        this.historyTableIndex = -1; // Pointer to the current undo/redo state. This will be set to '0' during initialization since it first adds itself.\n        this.onGoingRedo = false; // Variable that keeps track if a 'redo' is ongoing (in order to prevent an 'undo' to be launch when releasing the shift key before the ctrl key after a 'redo' shortcut)\n\n        // Initialize the parent form element, if any\n        this.parentForm = this._getParentForm();\n\n        // Set the initial value if it exists and if the `formatOnPageLoad` option will allow it\n        if (!this.runOnce && this.settings.formatOnPageLoad) {\n            // Format the element value if needed\n            this._formatDefaultValueOnPageLoad(initialValue);\n        } else {\n            // Otherwise set the `rawValue` and the element value, but do not format the latter yet\n            let valueToSet;\n            if (AutoNumericHelper.isNull(initialValue)) {\n                switch (this.settings.emptyInputBehavior) {\n                    case AutoNumeric.options.emptyInputBehavior.min:\n                        valueToSet = this.settings.minimumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.max:\n                        valueToSet = this.settings.maximumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.zero:\n                        valueToSet = '0';\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.focus:\n                    case AutoNumeric.options.emptyInputBehavior.press:\n                    case AutoNumeric.options.emptyInputBehavior.always:\n                        valueToSet = '';\n                        break;\n                    // It's possible to set the `null` value as the initial value\n                    case AutoNumeric.options.emptyInputBehavior.null:\n                        valueToSet = null;\n                        break;\n                    // When `emptyInputBehavior` is a number or a string representing a number\n                    default :\n                        valueToSet = this.settings.emptyInputBehavior;\n                }\n            } else {\n                valueToSet = initialValue;\n            }\n\n            this._setElementAndRawValue(valueToSet);\n        }\n\n        this.runOnce = true;\n\n        // Add the events listeners only on input or editable elements\n        this.hasEventListeners = false;\n        if (this.isInputElement || this.isContentEditable) {\n            if (!this.settings.noEventListeners) {\n                //XXX Here we make sure the global list is created after creating the event listeners, to only create the event listeners on `document` once\n                this._createEventListeners();\n            }\n\n            this._setWritePermissions(true);\n        }\n\n        // Save the initial values (html attribute + element.value) for the pristine test\n        this._saveInitialValues(initialValue);\n        \n        // Set up the data for the persistent storage solution (i.e. sessionStorage)\n        this.storageNamePrefix = 'AUTO_'; // The prefix for the raw value storage name variable can be modified here\n        this._setPersistentStorageName();\n\n        // --------------------------------------------------------\n        // -------------- Tracking\n        this.validState = true; // Keep track if the element is in the valid state\n        this.isFocused = false; // Keep track if the element is currently focused\n        this.isWheelEvent = false; // Keep track if a mouse wheel event is currently ongoing\n        this.isDropEvent = false; // Keep track if a drop event is currently ongoing\n        this.isEditing = false; // Keep track if the user is currently editing the element\n        this.rawValueOnFocus = void(0); // Keep track of the rawValue (needed to define if a change event must be sent on blur or enter key)\n        // Watch any external changes to the element value/textContent/nodeValue and `set()` the new value so that it gets formatted/saved in the history\n        this.internalModification = false; // This is temporarily set to `true` only when the AutoNumeric object does update the element value\n        this.attributeToWatch = this._getAttributeToWatch();\n        this.getterSetter = Object.getOwnPropertyDescriptor(this.domElement.__proto__, this.attributeToWatch);\n        this._addWatcher();\n\n        if (this.settings.createLocalList) {\n            // Keep track of every AutoNumeric elements that this object initialized\n            this._createLocalList();\n        }\n\n        // Keep track of all AutoNumeric elements in the current web page\n        this.constructor._addToGlobalList(this);\n\n        // --------------------------------------------------------\n        // -------------- Methods\n        // Create the global functions\n        this.global = {\n            /**\n             * Set the same given element value for each element in the local AutoNumeric element list, and format those elements immediately\n             *\n             * @param {number|string} newValue The value must be a number or a numeric string\n             * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n             */\n            set: (newValue, options = null) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.set(newValue, options);\n                });\n            },\n\n            /**\n             * Set the value given value directly as the DOM element value, without formatting it beforehand.\n             * This sets the same unformatted value for each element in the local AutoNumeric element list.\n             *\n             * @param {number|string} value\n             * @param {object} options\n             */\n            setUnformatted: (value, options = null) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.setUnformatted(value, options);\n                });\n            },\n\n            /**\n             * This is an alias of the `getNumericString()` function, and should not be used anymore.\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             * @deprecated\n             */\n            get: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.get());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Return an array of the unformatted values (as a string) of each AutoNumeric element of the local AutoNumeric element list\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             */\n            getNumericString: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getNumericString());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Return an array of the current formatted values (as a string) of each AutoNumeric element of the local AutoNumeric element list\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             */\n            getFormatted: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getFormatted());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Return an array of the element unformatted values (as a real Javascript number), for each element of the local AutoNumeric element list\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<number>}\n             */\n            getNumber: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getNumber());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Returns the unformatted values (following the `outputFormat` setting) of each element of the local AutoNumeric element list into an array\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             */\n            getLocalized: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getLocalized());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Force each element of the local AutoNumeric element list to reformat its value\n             */\n            reformat: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.reformat();\n                });\n            },\n\n            /**\n             * Remove the formatting and keep only the raw unformatted value (as a numericString) in each element of the local AutoNumeric element list\n             */\n            unformat: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.unformat();\n                });\n            },\n\n            /**\n             * Remove the formatting and keep only the localized unformatted value in the element, with the option to override the default outputFormat if needed\n             *\n             * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n             */\n            unformatLocalized: (forcedOutputFormat = null) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.unformatLocalized(forcedOutputFormat);\n                });\n            },\n\n            /**\n             * Updates the AutoNumeric settings, and immediately format the elements accordingly, for each element of the local AutoNumeric element list\n             *\n             * @param {object} newOptions This can be either one or more option objects\n             */\n            update: (...newOptions) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.update(...newOptions);\n                });\n            },\n\n            /**\n             * Return `true` if *all* the autoNumeric-managed elements are pristine, if their raw value hasn't changed.\n             * By default, this returns `true` if the raw unformatted value is still the same even if the formatted one has changed (due to a configuration update for instance).\n             *\n             * @param {boolean} checkOnlyRawValue If set to `true`, the pristine value is done on the raw unformatted value, not the formatted one. If set to `false`, this also checks that the formatted value hasn't changed.\n             * @returns {boolean}\n             */\n            isPristine: (checkOnlyRawValue = true) => {\n                let isPristine = true;\n                this.autoNumericLocalList.forEach(aNObject => {\n                    if (isPristine && !aNObject.isPristine(checkOnlyRawValue)) {\n                        isPristine = false;\n                    }\n                });\n\n                return isPristine;\n            },\n\n            /**\n             * Execute the `clear()` method on each AutoNumeric object in the local AutoNumeric element list\n             *\n             * @param {boolean} forceClearAll\n             */\n            clear: (forceClearAll = false) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.clear(forceClearAll);\n                });\n            },\n\n            /**\n             * Execute the `remove()` method on each AutoNumeric object in the local AutoNumeric element list\n             */\n            remove: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.remove();\n                });\n            },\n\n            /**\n             * Execute the `wipe()` method on each AutoNumeric object in the local AutoNumeric element list\n             */\n            wipe: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.wipe();\n                });\n            },\n\n            /**\n             * Execute the `nuke()` method on each AutoNumeric object in the local AutoNumeric element list\n             */\n            nuke: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.nuke();\n                });\n            },\n\n            /**\n             * Return `true` if the given AutoNumeric object (or DOM element) is in the local AutoNumeric element list\n             *\n             * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n             * @returns {*}\n             */\n            has: domElementOrAutoNumericObject => {\n                let result;\n                if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n                    result = this.autoNumericLocalList.has(domElementOrAutoNumericObject.node());\n                } else {\n                    result = this.autoNumericLocalList.has(domElementOrAutoNumericObject);\n                }\n\n                return result;\n            },\n\n            /**\n             * Add an existing AutoNumeric object (or DOM element) to the local AutoNumeric element list, using the DOM element as the key.\n             * This manages the case where `addObject` is used on an AutoNumeric object that already has multiple elements in its local list.\n             *\n             * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n             */\n            addObject: domElementOrAutoNumericObject => {\n                // Start with the same data, whatever the user passed as arguments\n                let domElement;\n                let otherAutoNumericObject;\n                if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n                    domElement = domElementOrAutoNumericObject.node();\n                    otherAutoNumericObject = domElementOrAutoNumericObject;\n                } else {\n                    domElement = domElementOrAutoNumericObject;\n                    otherAutoNumericObject = AutoNumeric.getAutoNumericElement(domElement);\n                }\n\n                // Check if the current autoNumeric object has a local list\n                if (!this._hasLocalList()) {\n                    this._createLocalList();\n                }\n\n                // Check if the other autoNumeric object has a local list...\n                let otherANLocalList = otherAutoNumericObject._getLocalList();\n                if (otherANLocalList.size === 0) {\n                    // Special case if the other AutoNumeric object has an empty local list, then populate itself to it\n                    otherAutoNumericObject._createLocalList();\n                    otherANLocalList = otherAutoNumericObject._getLocalList(); // Update the other local list\n                }\n\n                let mergedLocalLists;\n                if (otherANLocalList instanceof Map) {\n                    // ...If it does, merge the local lists together\n                    mergedLocalLists = AutoNumericHelper.mergeMaps(this._getLocalList(), otherANLocalList);\n                } else {\n                    // ...If not, just set the current local list onto the other AutoNumeric object\n                    // We need to specify the AutoNumeric object, otherwise the `_addToLocalList` function would not correctly add the AutoNumeric object since we would not have a reference to it, but a reference to the current AutoNumeric object on which is called this method.\n                    this._addToLocalList(domElement, otherAutoNumericObject);\n                    mergedLocalLists = this._getLocalList();\n                }\n\n                // Update the resulting list, on all the objects of that local list (so that we can indifferently use `init()` on any object belonging to that list)\n                mergedLocalLists.forEach(aNObject => {\n                    aNObject._setLocalList(mergedLocalLists);\n                });\n            },\n\n            /**\n             * Remove the given AutoNumeric object (or DOM element) from the local AutoNumeric element list, using the DOM element as the key.\n             * If this function attempts to remove the current AutoNumeric object from the local list, a warning is shown, but the deletion is still done.\n             *\n             * Special cases :\n             * - If the current object removes itself, then it's removed from the shared local list, then a new empty local list is used/created\n             * - If another object remove this object, then a local list with only this object is used/created\n             *\n             * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n             * @param {boolean} keepCurrentANObject If set to `false`, then the function will also remove the current AutoNumeric object if asked, otherwise it will ignore it and print a warning message\n             */\n            removeObject: (domElementOrAutoNumericObject, keepCurrentANObject = false) => {\n                // Start with the same data, whatever the user passed as arguments\n                let domElement;\n                let otherAutoNumericObject;\n                if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n                    domElement = domElementOrAutoNumericObject.node();\n                    otherAutoNumericObject = domElementOrAutoNumericObject;\n                } else {\n                    domElement = domElementOrAutoNumericObject;\n                    otherAutoNumericObject = AutoNumeric.getAutoNumericElement(domElement);\n                }\n\n                // Remove the other object from the local list\n                const initialCompleteLocalList = this.autoNumericLocalList;\n                this.autoNumericLocalList.delete(domElement);\n\n                // Update the local list for all objects in it\n                initialCompleteLocalList.forEach(aNObject => {\n                    aNObject._setLocalList(this.autoNumericLocalList);\n                });\n\n                if (!keepCurrentANObject && domElement === this.node()) {\n                    // This object is removed by itself\n                    // Empty the object local list\n                    otherAutoNumericObject._setLocalList(new Map);\n                } else {\n                    // This object is removed by another object\n                    // Set the local list for the removed object, with only this object in it\n                    otherAutoNumericObject._createLocalList();\n                }\n            },\n\n            /**\n             * Remove all elements from the shared list, effectively emptying it.\n             * This is the equivalent of calling `detach()` on each of its elements.\n             *\n             * @param {boolean} keepEachANObjectInItsOwnList If set to `true`, then instead of completely emptying the local list of each AutoNumeric objects, each one of those keeps itself in its own local list\n             */\n            empty: (keepEachANObjectInItsOwnList = false) => {\n                const initialCompleteLocalList = this.autoNumericLocalList;\n\n                // Update the local list for all objects in it\n                initialCompleteLocalList.forEach(aNObject => {\n                    if (keepEachANObjectInItsOwnList) {\n                        aNObject._createLocalList();\n                    } else {\n                        aNObject._setLocalList(new Map);\n                    }\n                });\n            },\n\n            /**\n             * Return an array containing all the AutoNumeric DOM elements that have been initialized by each other\n             *\n             * @returns {Array<HTMLElement>}\n             */\n            elements: () => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.node());\n                });\n\n                return result;\n            },\n\n            /**\n             * Return the `Map` object directly\n             * @returns {Map}\n             */\n            getList: () => this.autoNumericLocalList,\n\n            /**\n             * Return the number of element in the local AutoNumeric element list\n             * @returns {number}\n             */\n            size: () => this.autoNumericLocalList.size,\n        };\n\n        // Create the functions that will allow to change each setting one by one\n        /**\n         * For each option, we define if we need to reformat the element content (does changing the options should change the way its value is displayed?).\n         * If yes, then we use the `update()` for force a reformat, otherwise, we just update the `settings` object.\n         */\n        this.options = {\n            /**\n             * Reset any options set previously, by overwriting them with the default settings\n             *\n             * @returns {AutoNumeric}\n             */\n            reset                        : () => {\n                //TODO Add a `settings` parameter so that the user can reset to a specific set of settings. This is different than update since it drops any non-default settings before using those new settings.\n                this.settings = { rawValue : this.defaultRawValue }; // Here we pass the default rawValue in order to prevent showing a warning that we try to set an `undefined` value\n                this.update(AutoNumeric.defaultSettings);\n\n                return this;\n            },\n            allowDecimalPadding          : allowDecimalPadding => {\n                this.update({ allowDecimalPadding });\n\n                return this;\n            },\n            alwaysAllowDecimalCharacter  : alwaysAllowDecimalCharacter => { //FIXME Test this\n                this.update({ alwaysAllowDecimalCharacter });\n\n                return this;\n            },\n            caretPositionOnFocus         : caretPositionOnFocus => { //FIXME test this\n                this.settings.caretPositionOnFocus = caretPositionOnFocus;\n\n                return this;\n            },\n            createLocalList              : createLocalList => {\n                this.settings.createLocalList = createLocalList;\n\n                // Delete the local list when this is set to `false`, create it if this is set to `true` and there is not pre-existing list\n                if (this.settings.createLocalList) {\n                    if (!this._hasLocalList()) {\n                        this._createLocalList();\n                    }\n                } else {\n                    this._deleteLocalList();\n                }\n\n                return this;\n            },\n            currencySymbol               : currencySymbol => {\n                this.update({ currencySymbol });\n\n                return this;\n            },\n            currencySymbolPlacement      : currencySymbolPlacement => {\n                this.update({ currencySymbolPlacement });\n\n                return this;\n            },\n            decimalCharacter             : decimalCharacter => {\n                this.update({ decimalCharacter });\n\n                return this;\n            },\n            decimalCharacterAlternative  : decimalCharacterAlternative => {\n                this.settings.decimalCharacterAlternative = decimalCharacterAlternative;\n\n                return this;\n            },\n            /**\n             * Update the decimal places globally, which means this override any previously set number of decimal shown on focus, on blur, or in the raw value.\n             *\n             * @param {int} decimalPlaces\n             * @returns {AutoNumeric}\n             */\n            decimalPlaces                : decimalPlaces => {\n                AutoNumericHelper.warning('Using `options.decimalPlaces()` instead of calling the specific `options.decimalPlacesRawValue()`, `options.decimalPlacesShownOnFocus()` and `options.decimalPlacesShownOnBlur()` methods will reset those options.\\nPlease call the specific methods if you do not want to reset those.', this.settings.showWarnings);\n                this.update({ decimalPlaces });\n\n                return this;\n            },\n            decimalPlacesRawValue        : decimalPlacesRawValue => { //FIXME test this\n                this.update({ decimalPlacesRawValue });\n\n                return this;\n            },\n            decimalPlacesShownOnBlur     : decimalPlacesShownOnBlur => {\n                this.update({ decimalPlacesShownOnBlur });\n\n                return this;\n            },\n            decimalPlacesShownOnFocus    : decimalPlacesShownOnFocus => {\n                this.update({ decimalPlacesShownOnFocus });\n\n                return this;\n            },\n            defaultValueOverride         : defaultValueOverride => {\n                this.update({ defaultValueOverride });\n\n                return this;\n            },\n            digitalGroupSpacing          : digitalGroupSpacing => {\n                this.update({ digitalGroupSpacing });\n\n                return this;\n            },\n            digitGroupSeparator          : digitGroupSeparator => {\n                this.update({ digitGroupSeparator });\n\n                return this;\n            },\n            divisorWhenUnfocused         : divisorWhenUnfocused => {\n                this.update({ divisorWhenUnfocused });\n\n                return this;\n            },\n            emptyInputBehavior           : emptyInputBehavior => {\n                if (this.rawValue === null && emptyInputBehavior !== AutoNumeric.options.emptyInputBehavior.null) {\n                    // Special case : if the current `rawValue` is `null` and the `emptyInputBehavior` is changed to something else than `'null'`, then it makes that `rawValue` invalid.\n                    // Here we can either prevent the option update and throw an error, or still accept the option update and update the value from `null` to `''`.\n                    // We cannot keep `rawValue` to `null` since if `emptyInputBehavior` is not set to `null`, lots of function assume `rawValue` is a string.\n                    AutoNumericHelper.warning(`You are trying to modify the \\`emptyInputBehavior\\` option to something different than \\`'null'\\` (${emptyInputBehavior}), but the element raw value is currently set to \\`null\\`. This would result in an invalid \\`rawValue\\`. In order to fix that, the element value has been changed to the empty string \\`''\\`.`, this.settings.showWarnings);\n                    this.rawValue = '';\n                }\n\n                this.update({ emptyInputBehavior });\n\n                return this;\n            },\n            eventBubbles                 : eventBubbles => {\n                this.settings.eventBubbles = eventBubbles;\n\n                return this;\n            },\n            eventIsCancelable            : eventIsCancelable => {\n                this.settings.eventIsCancelable = eventIsCancelable;\n\n                return this;\n            },\n            failOnUnknownOption          : failOnUnknownOption => {\n                this.settings.failOnUnknownOption = failOnUnknownOption; //TODO test this with unit tests\n\n                return this;\n            },\n            formatOnPageLoad             : formatOnPageLoad => {\n                this.settings.formatOnPageLoad = formatOnPageLoad; //TODO test this with unit tests\n\n                return this;\n            },\n            formulaMode                  : formulaMode => {\n                this.settings.formulaMode = formulaMode; //TODO test this with unit tests\n\n                return this;\n            },\n            historySize                  : historySize => {\n                this.settings.historySize = historySize;\n\n                return this;\n            },\n            invalidClass                 : invalidClass => {\n                this.settings.invalidClass = invalidClass; //TODO test this with unit tests\n\n                return this;\n            },\n            isCancellable                : isCancellable => {\n                this.settings.isCancellable = isCancellable; //TODO test this with unit tests\n\n                return this;\n            },\n            leadingZero                  : leadingZero => {\n                this.update({ leadingZero });\n\n                return this;\n            },\n            maximumValue                 : maximumValue => {\n                this.update({ maximumValue });\n\n                return this;\n            },\n            minimumValue                 : minimumValue => {\n                this.update({ minimumValue });\n\n                return this;\n            },\n            modifyValueOnUpDownArrow     : modifyValueOnUpDownArrow => {\n                this.settings.modifyValueOnUpDownArrow = modifyValueOnUpDownArrow; //TODO test this with unit tests\n\n                return this;\n            },\n            modifyValueOnWheel           : modifyValueOnWheel => {\n                this.settings.modifyValueOnWheel = modifyValueOnWheel; //TODO test this with unit tests\n\n                return this;\n            },\n            negativeBracketsTypeOnBlur   : negativeBracketsTypeOnBlur => {\n                this.update({ negativeBracketsTypeOnBlur });\n\n                return this;\n            },\n            negativePositiveSignPlacement: negativePositiveSignPlacement => {\n                this.update({ negativePositiveSignPlacement });\n\n                return this;\n            },\n            negativeSignCharacter        : negativeSignCharacter => {\n                this.update({ negativeSignCharacter });\n\n                return this;\n            },\n            negativePositiveSignBehavior : negativePositiveSignBehavior => {\n                this.settings.negativePositiveSignBehavior = negativePositiveSignBehavior; //TODO test this with unit tests\n\n                return this;\n            },\n            noEventListeners             : noEventListeners => { //TODO test this with unit tests\n                if (noEventListeners === AutoNumeric.options.noEventListeners.noEvents && this.settings.noEventListeners === AutoNumeric.options.noEventListeners.addEvents) {\n                    // Remove the events once\n                    this._removeEventListeners();\n                }\n\n                this.update({ noEventListeners });\n\n                return this;\n            },\n            onInvalidPaste               : onInvalidPaste => {\n                this.settings.onInvalidPaste = onInvalidPaste; //TODO test this with unit tests\n\n                return this;\n            },\n            outputFormat                 : outputFormat => {\n                this.settings.outputFormat = outputFormat;\n\n                return this;\n            },\n            overrideMinMaxLimits         : overrideMinMaxLimits => {\n                this.update({ overrideMinMaxLimits });\n\n                return this;\n            },\n            positiveSignCharacter        : positiveSignCharacter => {\n                this.update({ positiveSignCharacter });\n\n                return this;\n            },\n            rawValueDivisor              : rawValueDivisor => {\n                this.update({ rawValueDivisor });\n\n                return this;\n            },\n            readOnly                     : readOnly => {\n                // When changing the readOnly attribute, the raw and formatted values do not change, so no need to call the costly 'update()` method\n                this.settings.readOnly = readOnly;\n                this._setWritePermissions();\n\n                return this;\n            },\n            roundingMethod               : roundingMethod => {\n                this.update({ roundingMethod });\n\n                return this;\n            },\n            saveValueToSessionStorage    : saveValueToSessionStorage => {\n                this.update({ saveValueToSessionStorage });\n\n                return this;\n            },\n            symbolWhenUnfocused          : symbolWhenUnfocused => {\n                this.update({ symbolWhenUnfocused });\n\n                return this;\n            },\n            selectNumberOnly             : selectNumberOnly => {\n                this.settings.selectNumberOnly = selectNumberOnly; //TODO test this with unit tests\n\n                return this;\n            },\n            selectOnFocus                : selectOnFocus => {\n                this.settings.selectOnFocus = selectOnFocus; //TODO test this with unit tests\n\n                return this;\n            },\n            serializeSpaces              : serializeSpaces => {\n                this.settings.serializeSpaces = serializeSpaces; //TODO test this with unit tests\n\n                return this;\n            },\n            showOnlyNumbersOnFocus       : showOnlyNumbersOnFocus => {\n                this.update({ showOnlyNumbersOnFocus });\n\n                return this;\n            },\n            showPositiveSign             : showPositiveSign => {\n                this.update({ showPositiveSign });\n\n                return this;\n            },\n            showWarnings                 : showWarnings => {\n                this.settings.showWarnings = showWarnings; //TODO test this with unit tests\n\n                return this;\n            },\n            styleRules                   : styleRules => {\n                this.update({ styleRules });\n\n                return this;\n            },\n            suffixText                   : suffixText => {\n                this.update({ suffixText });\n\n                return this;\n            },\n            unformatOnHover              : unformatOnHover => {\n                this.settings.unformatOnHover = unformatOnHover; //TODO test this with unit tests\n\n                return this;\n            },\n            unformatOnSubmit             : unformatOnSubmit => {\n                this.settings.unformatOnSubmit = unformatOnSubmit; //TODO test this with unit tests\n\n                return this;\n            },\n            upDownStep                   : upDownStep => {\n                this.settings.upDownStep = upDownStep; //TODO test this with unit tests\n\n                return this;\n            },\n            valuesToStrings              : valuesToStrings => {\n                this.update({ valuesToStrings });\n\n                return this;\n            },\n            watchExternalChanges         : watchExternalChanges => { //TODO test this with unit tests\n                this.update({ watchExternalChanges });\n\n                return this;\n            },\n            wheelOn                      : wheelOn => {\n                this.settings.wheelOn = wheelOn; //TODO test this with unit tests\n\n                return this;\n            },\n            wheelStep                    : wheelStep => {\n                this.settings.wheelStep = wheelStep; //TODO test this with unit tests\n\n                return this;\n            },\n        };\n\n        // Once the autoNumeric element has been initialized, broadcast that message with additional info.\n        // Note: When using `AutoNumeric.multiple()`, one event is sent *per* element initialized\n        this._triggerEvent(AutoNumeric.events.initialized, this.domElement, {\n            newValue   : AutoNumericHelper.getElementValue(this.domElement),\n            newRawValue: this.rawValue,\n            error      : null,\n            aNElement  : this,\n        });\n    }\n\n    /**\n     * Take the parameters given to the AutoNumeric object, and output the three variables that are needed to finish initializing it :\n     * - domElement : The target DOM element\n     * - initialValue : The initial value, or `null` if none is given\n     * - userOptions : The option object\n     *\n     * @param {object|Array|number|string} arg1\n     * @param {object|Array|number|string|null} arg2\n     * @param {object|Array|number|string|null} arg3\n     * @returns {{domElement: *, initialValue: *, userOptions: *}}\n     * @throws\n     * @private\n     */\n    static _setArgumentsValues(arg1, arg2, arg3) {\n        // Basic check on the argument count\n        if (AutoNumericHelper.isNull(arg1)) {\n            AutoNumericHelper.throwError('At least one valid parameter is needed in order to initialize an AutoNumeric object');\n        }\n\n        // Prepare the arguments in order to create the AutoNumeric object with the right values\n        // Test the argument types\n        const isArg1Element = AutoNumericHelper.isElement(arg1);\n        const isArg1String = AutoNumericHelper.isString(arg1);\n\n        const isArg2Object = AutoNumericHelper.isObject(arg2);\n        const isArg2Array = Array.isArray(arg2) && arg2.length > 0;\n        const isArg2Number = AutoNumericHelper.isNumberOrArabic(arg2) || arg2 === '';\n        const isArg2PreDefinedOptionName = this._isPreDefinedOptionValid(arg2);\n        const isArg2Null = AutoNumericHelper.isNull(arg2);\n        const isArg2EmptyString = AutoNumericHelper.isEmptyString(arg2);\n\n        const isArg3Object = AutoNumericHelper.isObject(arg3);\n        const isArg3Array = Array.isArray(arg3) && arg3.length > 0;\n        const isArg3Null = AutoNumericHelper.isNull(arg3);\n        const isArg3PreDefinedOptionName = this._isPreDefinedOptionValid(arg3);\n\n        // Given the parameters passed, sort the data and return a stable state before the initialization\n        let domElement;\n        let userOptions;\n        let initialValue;\n\n        //TODO Simplify those tests -->\n        if (isArg1Element && isArg2Null && isArg3Null) {\n            // new AutoNumeric(domElement); // With the default options\n            domElement = arg1;\n            initialValue = null;\n            userOptions = null;\n        } else if (isArg1Element && isArg2Number && isArg3Null) {\n            // new AutoNumeric(domElement, 12345.789); // With the default options, and an initial value\n            // new AutoNumeric(domElement, '12345.789');\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = null;\n        } else if (isArg1Element && isArg2Object && isArg3Null) {\n            // new AutoNumeric(domElement, { options }); // With one option object\n            domElement = arg1;\n            initialValue = null;\n            userOptions = arg2;\n        } else if (isArg1Element && isArg2PreDefinedOptionName && isArg3Null) {\n            // new AutoNumeric(domElement, 'euroPos'); // With one pre-defined option name\n            domElement = arg1;\n            initialValue = null;\n            userOptions = this._getOptionObject(arg2);\n        } else if (isArg1Element && isArg2Array && isArg3Null) {\n            // new AutoNumeric(domElement, [{ options1 }, { options2 }]); // With multiple option objects (the latest option overwriting the previous ones)\n            domElement = arg1;\n            initialValue = null;\n            userOptions = this.mergeOptions(arg2);\n        } else if (isArg1Element && (isArg2Null || isArg2EmptyString) && isArg3Object) {\n            // new AutoNumeric(domElement, null, { options }); // With one option object\n            domElement = arg1;\n            initialValue = null;\n            userOptions = arg3;\n        } else if (isArg1Element && (isArg2Null || isArg2EmptyString) && isArg3Array) {\n            // new AutoNumeric(domElement, null, [{ options1 }, { options2 }]); // With multiple option objects\n            domElement = arg1;\n            initialValue = null;\n            userOptions = this.mergeOptions(arg3);\n        } else if (isArg1String && isArg2Null && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input');\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = null;\n        } else if (isArg1String && isArg2Object && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', { options });\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = arg2;\n        } else if (isArg1String && isArg2PreDefinedOptionName && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', 'euroPos');\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = this._getOptionObject(arg2);\n        } else if (isArg1String && isArg2Array && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', [{ options1 }, { options2 }]); // With multiple option objects\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = this.mergeOptions(arg2);\n        } else if (isArg1String && (isArg2Null || isArg2EmptyString) && isArg3Object) {\n            // new AutoNumeric('.myCssClass > input', null, { options });\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = arg3;\n        } else if (isArg1String && (isArg2Null || isArg2EmptyString) && isArg3Array) {\n            // new AutoNumeric('.myCssClass > input', null, [{ options1 }, { options2 }]); // With multiple option objects\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = this.mergeOptions(arg3);\n        } else if (isArg1String && isArg2Number && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', 12345.789);\n            // new AutoNumeric('.myCssClass > input', '12345.789');\n            // new AutoNumeric('.myCssClass > input', '');\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = null;\n        } else if (isArg1String && isArg2Number && isArg3Object) {\n            // new AutoNumeric('.myCssClass > input', 12345.789, { options });\n            // new AutoNumeric('.myCssClass > input', '12345.789', { options });\n            // new AutoNumeric('.myCssClass > input', '', { options });\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = arg3;\n        } else if (isArg1String && isArg2Number && isArg3PreDefinedOptionName) {\n            // new AutoNumeric('.myCssClass > input', 12345.789, 'euroPos');\n            // new AutoNumeric('.myCssClass > input', '12345.789', 'euroPos');\n            // new AutoNumeric('.myCssClass > input', '', 'euroPos');\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = this._getOptionObject(arg3);\n        } else if (isArg1String && isArg2Number && isArg3Array) {\n            // new AutoNumeric('.myCssClass > input', 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n            // new AutoNumeric('.myCssClass > input', '12345.789', [{ options1 }, 'euroPos', { options2 }]);\n            // new AutoNumeric('.myCssClass > input', '', [{ options1 }, 'euroPos', { options2 }]);\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = this.mergeOptions(arg3);\n        } else if (isArg1Element && isArg2Number && isArg3Object) {\n            // new AutoNumeric(domElement, 12345.789, { options });\n            // new AutoNumeric(domElement, '12345.789', { options });\n            // new AutoNumeric(domElement, '', { options });\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = arg3;\n        } else if (isArg1Element && isArg2Number && isArg3PreDefinedOptionName) {\n            // new AutoNumeric(domElement, 12345.789, 'euroPos');\n            // new AutoNumeric(domElement, '12345.789', 'euroPos');\n            // new AutoNumeric(domElement, '', 'euroPos');\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = this._getOptionObject(arg3);\n        } else if (isArg1Element && isArg2Number && isArg3Array) {\n            // new AutoNumeric(domElement, 12345.789, [{ options1 }, { options2 }]);\n            // new AutoNumeric(domElement, '12345.789', [{ options1 }, { options2 }]);\n            // new AutoNumeric(domElement, '', [{ options1 }, { options2 }]);\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = this.mergeOptions(arg3);\n        } else {\n            AutoNumericHelper.throwError(`The parameters given to the AutoNumeric object are not valid, '${arg1}', '${arg2}' and '${arg3}' given.`);\n        }\n\n        if (AutoNumericHelper.isNull(domElement)) {\n            AutoNumericHelper.throwError(`The selector '${arg1}' did not select any valid DOM element. Please check on which element you called AutoNumeric.`);\n        }\n\n        return { domElement, initialValue, userOptions };\n    }\n\n    /**\n     * Merge the option objects found in the given array `optionsArray`.\n     * If a `string` is found, then we try to get the related pre-defined option using that string as its name.\n     * When merging the options, the latest option overwrite any previously set. This allows to fine tune a pre-defined option for instance.\n     *\n     * @param {Array<object|string>} optionsArray\n     * @returns {{}}\n     */\n    static mergeOptions(optionsArray) {\n        // This allows the user to use multiple options (strings or objects) in an array, and overwrite the previous one with the next option element ; this is useful to tune the wanted format\n        const mergedOptions = {};\n        optionsArray.forEach(optionObjectOrPredefinedOptionString => {\n            Object.assign(mergedOptions, this._getOptionObject(optionObjectOrPredefinedOptionString));\n        });\n\n        return mergedOptions;\n    }\n\n    /**\n     * Return `true` if the given pre-defined option name is an attribute of the `AutoNumeric.predefinedOptions` object\n     *\n     * @param {string} preDefinedOptionName\n     * @returns {boolean}\n     * @private\n     */\n    static _isPreDefinedOptionValid(preDefinedOptionName) {\n        return Object.prototype.hasOwnProperty.call(AutoNumeric.predefinedOptions, preDefinedOptionName);\n    }\n\n    /**\n     * Return an option object based on the given parameter.\n     * If `optionObjectOrPredefinedName` is as string, then we retrieve the pre-defined option object, if it's an object, we use it as is.\n     *\n     * @param {object|string} optionObjectOrPredefinedName\n     * @returns {object}\n     */\n    static _getOptionObject(optionObjectOrPredefinedName) {\n        let options;\n        if (AutoNumericHelper.isString(optionObjectOrPredefinedName)) {\n            options = AutoNumeric.getPredefinedOptions()[optionObjectOrPredefinedName];\n            if (options === void(0) || options === null) {\n                // If the given pre-defined name does not exist, warn that something is wrong, and continue the execution of the initialization\n                AutoNumericHelper.warning(`The given pre-defined option [${optionObjectOrPredefinedName}] is not recognized by autoNumeric. Please check that pre-defined option name.`, true);\n            }\n        } else { // A `settings` object\n            options = optionObjectOrPredefinedName;\n        }\n\n        return options;\n    }\n\n    /**\n     * Save the initial element values for later use in the pristine test.\n     * Those values are :\n     * - the html attribute (i.e. <input value='42'>), and\n     * - the script `value` (i.e. `let domElement.value`)\n     *\n     * @param {null|number|string} initialValue\n     * @private\n     */\n    _saveInitialValues(initialValue) {\n        // Keep the very first initial values (in the html attribute and set by the script). This is needed to check if the element is pristine.\n        // Save the html attribute 'value'\n        this.initialValueHtmlAttribute = AutoNumericHelper.scientificToDecimal(this.domElement.getAttribute('value'));\n        if (AutoNumericHelper.isNull(this.initialValueHtmlAttribute)) {\n            // Set the default empty value attribute instead of `null`, since if the initial value is null, the empty string is used\n            this.initialValueHtmlAttribute = '';\n        }\n\n        // Save the 'script' value\n        this.initialValue = initialValue;\n        if (AutoNumericHelper.isNull(this.initialValue)) {\n            // Same as above\n            this.initialValue = '';\n        }\n    }\n\n    /**\n     * Generate all the event listeners for the given DOM element\n     * @private\n     */\n    _createEventListeners() {\n        this.formulaMode = false;\n        this.compositioning = false;\n        // Create references to the event handler functions, so we can then cleanly remove those listeners if needed\n        // That would not be possible if we used closures directly in the event handler declarations\n        this._onFocusInFunc = e => { this._onFocusIn(e); };\n        this._onFocusInAndMouseEnterFunc = e => { this._onFocusInAndMouseEnter(e); };\n        this._onFocusFunc = () => { this._onFocus(); };\n        this._onKeydownFunc = e => { this._onKeydown(e); };\n        this._onKeypressFunc = e => { this._onKeypress(e); };\n        this._onKeyupFunc = e => { this._onKeyup(e); };\n        this._onFocusOutAndMouseLeaveFunc = e => { this._onFocusOutAndMouseLeave(e); };\n        this._onPasteFunc = e => { this._onPaste(e); };\n        this._onWheelFunc = e => { this._onWheel(e); };\n        this._onDropFunc = e => { this._onDrop(e); };\n        this._onKeydownGlobalFunc = e => { this._onKeydownGlobal(e); };\n        this._onKeyupGlobalFunc = e => { this._onKeyupGlobal(e); };\n        this._onCompositionstartFunc = e => { this._onCompositionstart(e); };\n        this._onCompositionendFunc = e => { this._onCompositionend(e); };\n\n        // Add the event listeners\n        this.domElement.addEventListener('focusin', this._onFocusInFunc, false);\n        this.domElement.addEventListener('focus', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.addEventListener('focus', this._onFocusFunc, false);\n        this.domElement.addEventListener('mouseenter', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.addEventListener('keydown', this._onKeydownFunc, false);\n        this.domElement.addEventListener('keypress', this._onKeypressFunc, false);\n        this.domElement.addEventListener('keyup', this._onKeyupFunc, false);\n        this.domElement.addEventListener('blur', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.addEventListener('mouseleave', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.addEventListener('paste', this._onPasteFunc, false);\n        this.domElement.addEventListener('wheel', this._onWheelFunc, false);\n        this.domElement.addEventListener('drop', this._onDropFunc, false);\n        this.domElement.addEventListener('compositionstart', this._onCompositionstartFunc, false);\n        this.domElement.addEventListener('compositionend', this._onCompositionendFunc, false);\n        this._setupFormListener();\n\n        // Keep track if the event listeners have been initialized on this object\n        this.hasEventListeners = true;\n\n        // Create one global event listener for the keyup event on the document object, which will be shared by all the autoNumeric elements\n        if (!AutoNumeric._doesGlobalListExists()) {\n            document.addEventListener('keydown', this._onKeydownGlobalFunc, false);\n            document.addEventListener('keyup', this._onKeyupGlobalFunc, false);\n        }\n    }\n\n    /**\n     * Remove all the autoNumeric-related event listeners for the given DOM element\n     * @private\n     */\n    _removeEventListeners() {\n        this.domElement.removeEventListener('focusin', this._onFocusInFunc, false);\n        this.domElement.removeEventListener('focus', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.removeEventListener('focus', this._onFocusFunc, false);\n        this.domElement.removeEventListener('mouseenter', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.removeEventListener('blur', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.removeEventListener('mouseleave', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.removeEventListener('keydown', this._onKeydownFunc, false);\n        this.domElement.removeEventListener('keypress', this._onKeypressFunc, false);\n        this.domElement.removeEventListener('keyup', this._onKeyupFunc, false);\n        this.domElement.removeEventListener('paste', this._onPasteFunc, false);\n        this.domElement.removeEventListener('wheel', this._onWheelFunc, false);\n        this.domElement.removeEventListener('drop', this._onDropFunc, false);\n        this.domElement.removeEventListener('compositionstart', this._onCompositionstartFunc, false);\n        this.domElement.removeEventListener('compositionend', this._onCompositionendFunc, false);\n        this._removeFormListener();\n\n        // Keep track if the event listeners have been initialized on this object\n        this.hasEventListeners = false;\n\n        document.removeEventListener('keydown', this._onKeydownGlobalFunc, false);\n        document.removeEventListener('keyup', this._onKeyupGlobalFunc, false);\n    }\n\n    /**\n     * Toggle the event listeners according to the `noEventListeners` option, if those were not activated/deactivated before\n     * @private\n     */\n    _updateEventListeners() {\n        if (!this.settings.noEventListeners && !this.hasEventListeners) {\n            // Special case where an update is done on an element that did not activate its event listeners in the first place\n            // i.e. when an element is first created with `contenteditable=\"false\"`, then an update is done with `anElement.french()`\n            this._createEventListeners();\n        }\n\n        if (this.settings.noEventListeners && this.hasEventListeners) {\n            this._removeEventListeners();\n        }\n    }\n\n    /**\n     * Mark the parent <form> so that other AutoNumeric object will not add more listeners.\n     * Add a counter so that when removing the AutoNumeric object, we only remove the submit listener if that count is equal to 0.\n     * Also keep a reference to the 'submit' event handler function to be able to remove that handler later if the `_removeFormListener()` function is called from another AutoNumeric object.\n     *\n     * @private\n     */\n    _setupFormListener() {\n        if (!AutoNumericHelper.isNull(this.parentForm)) {\n            // Set up the handler function\n            this._onFormSubmitFunc = () => { this._onFormSubmit(); };\n            this._onFormResetFunc = () => { this._onFormReset(); };\n\n            // Check if the parent form already has the AutoNumeric mark\n            if (this._hasParentFormCounter()) {\n                this._incrementParentFormCounter();\n            } else {\n                // If not, add the counter\n                this._initializeFormCounterToOne();\n                // And add the submit and reset event listeners\n                this.parentForm.addEventListener('submit', this._onFormSubmitFunc, false);\n                this.parentForm.addEventListener('reset', this._onFormResetFunc, false);\n                // Also keep a reference to the handler function so that we can remove it later\n                this._storeFormHandlerFunction();\n            }\n        }\n    }\n\n    /**\n     * Remove the form 'submit' event listener, as well as the `dataset` info (`anCount` and `anFormHandler`) from the parent form, only when there are only one AutoNumeric child element left in that <form>.\n     * Otherwise, decrement the `anCount`.\n     *\n     * @private\n     */\n    _removeFormListener() {\n        if (!AutoNumericHelper.isNull(this.parentForm)) {\n            // Check the parent form counter value\n            const anCount = this._getParentFormCounter();\n\n            if (anCount === 1) {\n                // If it's 1, remove the listeners\n                this.parentForm.removeEventListener('submit', this._getFormHandlerFunction().submitFn, false);\n                this.parentForm.removeEventListener('reset', this._getFormHandlerFunction().resetFn, false);\n                // Also remove the dataset info\n                this._removeFormDataSetInfo();\n            } else if (anCount > 1) {\n                // Otherwise if it's >1 decrement the counter\n                this._decrementParentFormCounter();\n            } else {\n                // If it's <1, throw an error\n                AutoNumericHelper.throwError(`The AutoNumeric object count on the form is incoherent.`);\n            }\n        }\n    }\n\n    /**\n     * Return `true` if the parent form has the form counter attribute\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _hasParentFormCounter() {\n        return 'anCount' in this.parentForm.dataset;\n    }\n\n    /**\n     * Return the count of AutoNumeric form children\n     *\n     * @returns {number}\n     * @private\n     */\n    _getParentFormCounter() {\n        return Number(this.parentForm.dataset.anCount);\n    }\n\n    /**\n     * Set the count of AutoNumeric form children to 1 for the given form element, or if none are passed, the current `this.parentForm` one.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @private\n     */\n    _initializeFormCounterToOne(formElement = null) {\n        this._getFormElement(formElement).dataset.anCount = 1;\n    }\n\n    /**\n     * Increment the AutoNumeric form children count for the given form element, or if none are passed, the current `this.parentForm` one.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @private\n     */\n    _incrementParentFormCounter(formElement = null) {\n        this._getFormElement(formElement).dataset.anCount++;\n    }\n\n    /**\n     * Decrement the AutoNumeric form children count for the current `this.parentForm` form element.\n     *\n     * @private\n     */\n    _decrementParentFormCounter() {\n        this.parentForm.dataset.anCount--;\n    }\n\n    /**\n     * Return `true` if the global form handler list exists on the `window` object.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    static _doesFormHandlerListExists() {\n        const type = typeof window.aNFormHandlerMap;\n\n        return type !== 'undefined' && type === 'object';\n    }\n\n    /**\n     * Create the global form handler list on the `window` object.\n     *\n     * @private\n     */\n    static _createFormHandlerList() {\n        window.aNFormHandlerMap = new Map(); // I would have used a `WeakMap` here, but that does not allow using non-object for keys\n    }\n\n    /**\n     * Return `true` if the given form element, or if none are passed, the current `this.parentForm` one has a form handler name.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @returns {boolean}\n     * @private\n     */\n    _hasFormHandlerFunction(formElement = null) {\n        return 'anFormHandler' in this._getFormElement(formElement).dataset;\n    }\n\n    /**\n     * Return the given form element, or defaults to `this.parentForm` if no argument is passed.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @returns {*}\n     * @private\n     */\n    _getFormElement(formElement = null) {\n        let formElementToUse;\n        if (!AutoNumericHelper.isNull(formElement)) {\n            formElementToUse = formElement;\n        } else {\n            formElementToUse = this.parentForm;\n        }\n\n        return formElementToUse;\n    }\n\n    /**\n     * Generate a form handler unique name and store it in the global form handler list.\n     * This also save that name in the dataset of the given form element.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @private\n     */\n    _storeFormHandlerFunction(formElement = null) {\n        // Create the weakMap if it does not exist\n        if (!this.constructor._doesFormHandlerListExists()) {\n            this.constructor._createFormHandlerList();\n        }\n\n        // Generate a unique name and save it in the form dataset\n        const formHandlerName = AutoNumericHelper.randomString();\n        this._getFormElement(formElement).dataset.anFormHandler = formHandlerName;\n\n        // Add the form handler name and handle function reference to the WeakMap\n        window.aNFormHandlerMap.set(formHandlerName, { submitFn: this._onFormSubmitFunc, resetFn: this._onFormResetFunc });\n    }\n\n    /**\n     * Return the form handler key name from the parent form element, for the global form handler list.\n     *\n     * @returns {string|*}\n     * @private\n     */\n    _getFormHandlerKey() {\n        if (!this._hasFormHandlerFunction()) {\n            AutoNumericHelper.throwError(`Unable to retrieve the form handler name`);\n        }\n\n        const formHandlerName = this.parentForm.dataset.anFormHandler;\n        if (formHandlerName === '') {\n            AutoNumericHelper.throwError(`The form handler name is invalid`);\n        }\n\n        return formHandlerName;\n    }\n\n    /**\n     * Return the 'submit' event handler function used for the parent form.\n     *\n     * @returns {function}\n     * @private\n     */\n    _getFormHandlerFunction() {\n        const formHandlerName = this._getFormHandlerKey();\n\n        return window.aNFormHandlerMap.get(formHandlerName);\n    }\n\n    /**\n     * Remove the dataset attributes `data-an-count` and `data-an-form-handler` from the parent form element.\n     *\n     * @private\n     */\n    _removeFormDataSetInfo() {\n        // Just in case, set the counter to 0\n        this._decrementParentFormCounter();\n        // Remove the form handler function from the FormHandlerFunction Map\n        window.aNFormHandlerMap.delete(this._getFormHandlerKey());\n        // Lastly, remove the dataset attributes\n        this.parentForm.removeAttribute('data-an-count');\n        this.parentForm.removeAttribute('data-an-form-handler');\n    }\n\n    /**\n     * Set the DOM element write permissions according to the current settings, by setting the `readonly` or `contenteditable` attributes depending on its tag type.\n     * If the `useHtmlAttribute` parameter is set to `true`, then the `readonly` html attribute is used and has precedence over the `readOnly` option to set the element as read-only.\n     *\n     * @param {boolean} useHtmlAttribute If set to `true`, then the write permissions are set by taking into account the html 'readonly' attribute, even if the `readOnly` option is set to false\n     * @private\n     */\n    _setWritePermissions(useHtmlAttribute = false) {\n        if ((useHtmlAttribute && this.domElement.readOnly) || this.settings.readOnly) {\n            this._setReadOnly();\n        } else {\n            this._setReadWrite();\n        }\n    }\n\n    /**\n     * Set the element to be read-only.\n     * If the DOM element tag is not an `input`, then it `contenteditable` attribute is set to `false`.\n     *\n     * @private\n     */\n    _setReadOnly() {\n        if (this.isInputElement) {\n            this.domElement.readOnly = true;\n        } else {\n            this.domElement.setAttribute('contenteditable', false);\n        }\n    }\n\n    /**\n     * Set the element to be read-write.\n     *\n     * @private\n     */\n    _setReadWrite() {\n        if (this.isInputElement) {\n            this.domElement.readOnly = false;\n        } else {\n            this.domElement.setAttribute('contenteditable', true);\n        }\n    }\n\n    /**\n     * Add a watcher so that any external change to the AutoNumeric-managed element would be detected.\n     * As soon as such change is detected, AutoNumeric then tries to `set()` the value so that it gets formatted and stored in the history.\n     * //XXX For now, this only works when watching the `value` attribute, not the `textContent` one\n     * @private\n     */\n    _addWatcher() {\n        // `getterSetter` can be undefined when a non-input element is used\n        if (!AutoNumericHelper.isUndefined(this.getterSetter)) {\n            const { set: setter, get: getter } = this.getterSetter;\n            Object.defineProperty(this.domElement, this.attributeToWatch, {\n                configurable: true, // This is needed in some rare cases\n                get         : () => getter.call(this.domElement),\n                set         : val => {\n                    setter.call(this.domElement, val);\n                    // Only `set()` the value if the modification comes from an external source\n                    if (this.settings.watchExternalChanges && !this.internalModification) {\n                        this.set(val);\n                    }\n                },\n            });\n        }\n\n        //FIXME The code above fails for the `textContent` attribute since `this.getterSetter` is undefined when using `getOwnPropertyDescriptor()`\n        /* //XXX The code below *almost* work for the textContent, but breaks some unit tests\n        this.valueWatched = this.domElement[this.attributeToWatch];\n        Object.defineProperty(this.domElement, this.attributeToWatch, {\n            configurable: true, // This is needed in some rare cases\n            get         : () => this.valueWatched,\n            set         : val => {\n                this.valueWatched = val;\n                // Only `set()` the value if the modification comes from an external source\n                if (this.settings.watchExternalChanges && !this.internalModification) {\n                    this.set(val);\n                }\n            },\n        });\n        */\n    }\n\n    /**\n     * Remove the watcher on the AutoNumeric-managed element\n     * Note: This needs to be called when the AutoNumeric element is 'removed', otherwise the getter/setter stays on the DOM element and that can lead to problem if the user initialize another AutoNumeric object on it.\n     * @private\n     */\n    _removeWatcher() {\n        // `getterSetter` can be undefined when a non-input element is used\n        if (!AutoNumericHelper.isUndefined(this.getterSetter)) {\n            const { set: setter, get: getter } = this.getterSetter;\n            Object.defineProperty(this.domElement, this.attributeToWatch, {\n                configurable: true, // This is needed in some rare cases\n                get         : () => getter.call(this.domElement),\n                set         : val => {\n                    setter.call(this.domElement, val);\n                },\n            });\n        }\n\n        //FIXME The code above fails for the `textContent` attribute since `this.getterSetter` is undefined when using `getOwnPropertyDescriptor()`\n        /* //XXX The code below *almost* work for the textContent, but breaks some unit tests\n        this.valueWatched = this.domElement[this.attributeToWatch];\n        Object.defineProperty(this.domElement, this.attributeToWatch, {\n            configurable: true, // This is needed in some rare cases\n            get         : () => this.valueWatched,\n            set         : val => {\n                this.valueWatched = val;\n            },\n        });\n        */\n    }\n\n    /**\n     * Return the name of the object attribute that store the current formatted data in the DOM element.\n     *\n     * @returns {string}\n     * @private\n     */\n    _getAttributeToWatch() {\n        let attributeToWatch;\n        if (this.isInputElement) {\n            attributeToWatch = 'value';\n        } else {\n            const nodeType = this.domElement.nodeType;\n            if (nodeType === Node.ELEMENT_NODE ||\n                nodeType === Node.DOCUMENT_NODE ||\n                nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n                attributeToWatch = 'textContent';\n            } else if (nodeType === Node.TEXT_NODE) {\n                attributeToWatch = 'nodeValue';\n            }\n        }\n\n        return attributeToWatch;\n    }\n\n    /**\n     * Save the current raw value into the history table, along with the selection information.\n     *\n     * If the user has done some undos and tries to enter:\n     * - a new and different number than the 'next' state, this drops the rest of the history table\n     * - the very same number that result in the same rawValue as the 'next' state, we only move the history table pointer to the next state\n     *\n     * @private\n     */\n    _historyTableAdd() {\n        //TODO Add a `this.settings.saveSelectionsIntoHistory` option to prevent saving the selections (in order to gain performance)\n        const isEmptyHistoryTable = this.historyTable.length === 0;\n        // Only add a new value if it's different from the previous one (to prevent infinitely adding values on mouseover for instance)\n        if (isEmptyHistoryTable || this.rawValue !== this._historyTableCurrentValueUsed()) {\n            // Trim the history table if the user changed the value of an intermediary state\n            let addNewHistoryState = true;\n            if (!isEmptyHistoryTable) {\n                // If some undo has been done and the user type the exact same data than the next entry after the current history pointer, do not drop the rest of the 'redo' list, and just advance the historyTableIndex\n                const nextHistoryStateIndex = this.historyTableIndex + 1;\n                if (nextHistoryStateIndex < this.historyTable.length && this.rawValue === this.historyTable[nextHistoryStateIndex].value) {\n                    // If the character input result in the same state as the next one, do not remove the next history states nor add a new one\n                    addNewHistoryState = false;\n                } else {\n                    // First remove anything that is after the current index\n                    AutoNumericHelper.arrayTrim(this.historyTable, this.historyTableIndex + 1);\n                }\n            }\n\n            // Update the history pointer\n            this.historyTableIndex++;\n\n            // Add the new history state, if needed\n            if (addNewHistoryState) {\n                // Save the selection info\n                const selection = AutoNumericHelper.getElementSelection(this.domElement);\n                this.selectionStart = selection.start;\n                this.selectionEnd = selection.end;\n\n                // Then add the new raw value\n                this.historyTable.push({\n                    // Save the rawValue and selection start/end\n                    value: this.rawValue,\n                    // The selection for this element is temporary, and will be updated when the next history state will be recorded.\n                    // That way, we are always sure we save the last caret or selection positions just before the value is changed. Otherwise, we would only save those positions when the value is first changed, and would not take into account that the user could move the caret around afterward.\n                    // For instance, this is needed if the user change the element value, and immediately undo it ; if he then does a redo, he'll see the value and the right selection\n                    // To sum up; The selection position are not always +1 character, since it could also be '2' if a group separator is added when entering one character. That's why the current history state caret/selection position is updated on each `keyup` event.\n                    start: this.selectionStart + 1, // Here we add one since the user added one character too\n                    end  : this.selectionEnd + 1,\n                });\n\n                // Update the selection in the previous entry, in order to keep track of the updated caret/selection positions\n                if (this.historyTable.length > 1) {\n                    this.historyTable[this.historyTableIndex - 1].start = this.selectionStart;\n                    this.historyTable[this.historyTableIndex - 1].end = this.selectionEnd;\n                }\n            }\n\n            // Limit the history table size according to the `historySize` option\n            if (this.historyTable.length > this.settings.historySize) {\n                this._historyTableForget();\n            }\n        }\n    }\n\n    /**\n     * Debug function for the history table\n     * @private\n     */\n    /*\n    _debugHistoryTable() {\n        let i = 0;\n        let mark;\n        this.historyTable.forEach(history => {\n            if (this.historyTableIndex === i) {\n                mark = '> ';\n            } else {\n                mark = '';\n            }\n            console.log(`${mark}${i++}: ${history.value} ${history.start}|${history.end} [onGoingRedo: ${this.onGoingRedo}]`); //DEBUG\n        });\n    }\n    */\n\n    /**\n     * 'Undo' or 'Redo' the last/next user entry in the history table.\n     * This does not modify the history table, only the pointer to the current state.\n     *\n     * @param {boolean} undo If set to `true`, then this function does an 'Undo', otherwise it does a 'Redo'\n     * @private\n     */\n    _historyTableUndoOrRedo(undo = true) {\n        let check;\n        if (undo) {\n            // Only 'undo' if there are some info to undo\n            check = this.historyTableIndex > 0;\n            if (check) {\n                this.historyTableIndex--;\n            }\n        } else {\n            // Only 'redo' if there are some info to redo at the end of the history table\n            check = this.historyTableIndex + 1 < this.historyTable.length;\n            if (check) {\n                this.historyTableIndex++;\n            }\n        }\n\n        if (check) {\n            // Set the value back\n            const undoInfo = this.historyTable[this.historyTableIndex];\n            this.set(undoInfo.value, null, false); // next or previous raw value\n\n            // Set the selection back\n            AutoNumericHelper.setElementSelection(this.domElement, undoInfo.start, undoInfo.end);\n        }\n    }\n\n    /**\n     * 'Undo' the last user entry by going back one entry in the history table.\n     * This keeps the following entries in order to allow for a 'redo'.\n     * This does not modify the history table, only the pointer to the current state.\n     * @private\n     */\n    _historyTableUndo() {\n        this._historyTableUndoOrRedo(true);\n    }\n\n    /**\n     * 'Redo' the next user entry in the history table.\n     * This does not modify the history table, only the pointer to the current state.\n     * @private\n     */\n    _historyTableRedo() {\n        this._historyTableUndoOrRedo(false);\n    }\n\n    /**\n     * Reset the history table to its initial state, and select the value.\n     * @private\n     */\n    /*\n    resetHistoryTable() { //FIXME Test this\n        this.set(this.rawValue, null, false);\n        this.select();\n        const selection = AutoNumericHelper.getElementSelection(this.domElement);\n        this.historyTableIndex = 0;\n        this.historyTable = [{\n            // Save the rawValue and selection start/end\n            value: this.rawValue,\n            start: selection.start,\n            end  : selection.end,\n        }];\n    }\n    */\n\n    /**\n     * Make the history table forget its first N elements, shifting its indexes in the process.\n     * `N` being given as the `numberOfEntriesToForget` parameter.\n     *\n     * @param {Number} numberOfEntriesToForget\n     * @returns {object|Array<object>} The discarded objects, in an Array.\n     * @private\n     */\n    _historyTableForget(numberOfEntriesToForget = 1) {\n        const shiftedAway = [];\n        for (let i = 0; i < numberOfEntriesToForget; i++) {\n            shiftedAway.push(this.historyTable.shift());\n            // Update the history table index accordingly\n            this.historyTableIndex--;\n            if (this.historyTableIndex < 0) {\n                // In case this function is called more times than there is states in the history table\n                this.historyTableIndex = 0;\n            }\n        }\n\n        if (shiftedAway.length === 1) {\n            return shiftedAway[0];\n        }\n\n        return shiftedAway;\n    }\n\n    /**\n     * Return the currently used value from the history table.\n     *\n     * @returns {string|number}\n     * @private\n     */\n    _historyTableCurrentValueUsed() {\n        let indexToUse = this.historyTableIndex;\n        if (indexToUse < 0) {\n            indexToUse = 0;\n        }\n\n        let result;\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(this.historyTable[indexToUse])) {\n            result = '';\n        } else {\n            result = this.historyTable[indexToUse].value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Parse the `styleRules` option and run the test for each given rules, either pre-defined ones like `positive`, `negative` and `ranges`, or user defined callbacks within the `userDefined` attribute.\n     * @private\n     */\n    _parseStyleRules() {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules) || this.rawValue === '') {\n            return;\n        }\n\n        // 'positive' attribute\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.positive)) {\n            if (this.rawValue >= 0) {\n                this._addCSSClass(this.settings.styleRules.positive);\n            } else {\n                this._removeCSSClass(this.settings.styleRules.positive);\n            }\n        }\n\n        // 'negative' attribute\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.negative)) {\n            if (this.rawValue < 0) {\n                this._addCSSClass(this.settings.styleRules.negative);\n            } else {\n                this._removeCSSClass(this.settings.styleRules.negative);\n            }\n        }\n\n        // 'ranges' attribute\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.ranges) && this.settings.styleRules.ranges.length !== 0) {\n            this.settings.styleRules.ranges.forEach(range => {\n                if (this.rawValue >= range.min && this.rawValue < range.max) {\n                    this._addCSSClass(range.class);\n                } else {\n                    this._removeCSSClass(range.class);\n                }\n            });\n        }\n\n        // 'userDefined' attribute\n        //TODO Also pass the old raw value as a parameter, and not only the new raw value\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.userDefined) && this.settings.styleRules.userDefined.length !== 0) {\n            this.settings.styleRules.userDefined.forEach(userObject => {\n                if (AutoNumericHelper.isFunction(userObject.callback)) {\n                    // Test for the type of the `classes` attribute, which changes the function behavior\n                    if (AutoNumericHelper.isString(userObject.classes)) {\n                        // If 'classes' is a string, set it if `true`, remove it if `false`\n                        if (userObject.callback(this.rawValue)) {\n                            this._addCSSClass(userObject.classes);\n                        } else {\n                            this._removeCSSClass(userObject.classes);\n                        }\n                    } else if (AutoNumericHelper.isArray(userObject.classes)) {\n                        if (userObject.classes.length === 2) {\n                            // If 'classes' is an array with only 2 elements, set the first class if `true`, the second if `false`\n                            if (userObject.callback(this.rawValue)) {\n                                this._addCSSClass(userObject.classes[0]);\n                                this._removeCSSClass(userObject.classes[1]);\n                            } else {\n                                this._removeCSSClass(userObject.classes[0]);\n                                this._addCSSClass(userObject.classes[1]);\n                            }\n                        } else if (userObject.classes.length > 2) {\n                            // The callback returns an array of indexes to use on the `classes` array\n                            const callbackResult = userObject.callback(this.rawValue);\n                            if (AutoNumericHelper.isArray(callbackResult)) {\n                                // If multiple indexes are returned\n                                userObject.classes.forEach((userClass, index) => {\n                                    if (AutoNumericHelper.isInArray(index, callbackResult)) {\n                                        this._addCSSClass(userClass);\n                                    } else {\n                                        this._removeCSSClass(userClass);\n                                    }\n                                });\n                            } else if (AutoNumericHelper.isInt(callbackResult)) {\n                                // If only one index is returned\n                                userObject.classes.forEach((userClass, index) => {\n                                    if (index === callbackResult) {\n                                        this._addCSSClass(userClass);\n                                    } else {\n                                        this._removeCSSClass(userClass);\n                                    }\n                                });\n                            } else if (AutoNumericHelper.isNull(callbackResult)) {\n                                // Remove all the classes\n                                userObject.classes.forEach(userClass => {\n                                    this._removeCSSClass(userClass);\n                                });\n                            } else {\n                                AutoNumericHelper.throwError(`The callback result is not an array nor a valid array index, ${typeof callbackResult} given.`);\n                            }\n                        } else {\n                            AutoNumericHelper.throwError('The classes attribute is not valid for the `styleRules` option.');\n                        }\n                    } else if (AutoNumericHelper.isUndefinedOrNullOrEmpty(userObject.classes)) {\n                        // If 'classes' is `undefined` or `null`, then the callback is called with the AutoNumeric object passed as a parameter\n                        userObject.callback(this);\n                    } else {\n                        AutoNumericHelper.throwError('The callback/classes structure is not valid for the `styleRules` option.');\n                    }\n                } else {\n                    AutoNumericHelper.warning(`The given \\`styleRules\\` callback is not a function, ${typeof userObject.callback} given.`, this.settings.showWarnings);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add the given CSS class to the DOM element.\n     *\n     * @param {string} cssClassName\n     * @private\n     */\n    _addCSSClass(cssClassName) {\n        this.domElement.classList.add(cssClassName);\n    }\n\n    /**\n     * Remove the given CSS class from the DOM element.\n     *\n     * @param {string} cssClassName\n     * @private\n     */\n    _removeCSSClass(cssClassName) {\n        this.domElement.classList.remove(cssClassName);\n    }\n\n    // Those are the public function available on each autoNumeric-managed element\n\n    /**\n     * Method that updates the AutoNumeric settings, and immediately format the element accordingly.\n     * The options passed as parameter(s) is either one or many objects that each contains some settings, i.e. :\n     * {\n     *     digitGroupSeparator: \".\",\n     *     decimalCharacter: \",\",\n     *     currencySymbol: '€ ',\n     * }\n     * If multiple options are passed, the latter overwrite the previous ones.\n     *\n     * Note: If the new settings are not validated, or the call to `set()` fails, then the previous valid settings are reverted back to.\n     *\n     * @example anElement.update({ options }) // Updates the settings\n     * @example anElement.update({ options1 }, { options2 }) // Updates the settings with multiple option objects\n     * @example anElement.update([{ options1 }, { options2 }]) // Updates the settings with multiple option objects in a single array\n     *\n     * @param {object|string|array} newOptions\n     * @returns {AutoNumeric}\n     */\n    update(...newOptions) {\n        if (Array.isArray(newOptions) && Array.isArray(newOptions[0])) {\n            // Allows to pass a single array of options\n            newOptions = newOptions[0];\n        }\n\n        // Keep a copy of the original settings before changing them, in case they do not validate correctly, so we can switch back to them\n        const originalSettings = AutoNumericHelper.cloneObject(this.settings); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)\n\n        // Store the current unformatted input value\n        const numericString = this.rawValue;\n\n        // Generate a single option object with the settings from the latter overwriting those from the former\n        let optionsToUse = {};\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(newOptions) || newOptions.length === 0) {\n            optionsToUse = null;\n        } else if (newOptions.length >= 1) {\n            newOptions.forEach(optionObject => {\n                if (this.constructor._isPreDefinedOptionValid(optionObject)) {\n                    // The option object is a predefined option name (i.e. 'euro')\n                    optionObject = this.constructor._getOptionObject(optionObject);\n                }\n\n                Object.assign(optionsToUse, optionObject);\n            });\n        }\n\n        // Update the settings\n        try {\n            this._setSettings(optionsToUse, true);\n            this._setWritePermissions(); // Update the read/write permissions\n            this._updateEventListeners();\n\n            // Reformat the input value with the new settings\n            // Note: we always `set`, even when `numericString` is the empty string '', since `emptyInputBehavior` (set to `always` or `zero`) can change how the empty input is formatted\n            this.set(numericString);\n        } catch (error) {\n            // If the settings validation fails, then we switch back to the previous valid settings\n            this._setSettings(originalSettings, true); // `_setSettings()` is used here instead of directly doing `this.settings = originalSettings;` since lots of side variables are calculated from the settings, and we need to get those back to their previous state. Note: `_setSettings()` is called in the 'update' mode in order to correctly set back the `originalDecimalPlacesRawValue` value.\n            AutoNumericHelper.throwError(`Unable to update the settings, those are invalid: [${error}]`);\n\n            return this;\n        }\n\n        return this;\n    }\n\n    /**\n     * Return the options object containing all the current autoNumeric settings in effect.\n     * You can then directly access each option by using its name : `anElement.getSettings().optionNameAutoCompleted`.\n     *\n     * @example\n     * anElement.getSettings()\n     * anElement.getSettings().decimalCharacter // Return the decimalCharacter setting as a string - any valid option name can be used\n     *\n     * @returns {object}\n     */\n    getSettings() {\n        return this.settings;\n    }\n\n    /**\n     * Set the given element value, and format it immediately.\n     * Additionally, this `set()` method can accept options that will be merged into the current AutoNumeric element, taking precedence over any previous settings.\n     *\n     * @example anElement.set('12345.67') // Formats the value\n     * @example anElement.set(12345.67) // Formats the value\n     * @example anElement.set(12345.67, { decimalCharacter : ',' }) // Update the settings and formats the value in one go\n     * @example anElement.northAmerican().set('$12,345.67') // Set an already formatted value (this does not _exactly_ respect the currency symbol/negative placements, but only remove all non-numbers characters, according to the ones given in the settings)\n     * @example anElement.set(null) // Set the rawValue and element value to `null`\n     *\n     * @param {number|string|null} newValue The value must be a Number, a numeric string or `null` (if `emptyInputBehavior` is set to `'null'`)\n     * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history table\n     * @returns {AutoNumeric}\n     * @throws\n     */\n    set(newValue, options = null, saveChangeToHistory = true) {\n        //TODO Add the `saveSettings` options. If `true`, then when `options` is passed, then it overwrite the current `this.settings`. If `false` the `options` are only used once and `this.settings` is not modified\n        if (AutoNumericHelper.isUndefined(newValue)) {\n            AutoNumericHelper.warning(`You are trying to set an 'undefined' value ; an error could have occurred.`, this.settings.showWarnings);\n            return this;\n        }\n\n        // The options update is done only if the `newValue` is not `undefined`\n        if (!AutoNumericHelper.isNull(options)) {\n            this._setSettings(options, true); // We do not call `update` here since this would call `set` too\n        }\n\n        if (newValue === null && this.settings.emptyInputBehavior !== AutoNumeric.options.emptyInputBehavior.null) {\n            AutoNumericHelper.warning(`You are trying to set the \\`null\\` value while the \\`emptyInputBehavior\\` option is set to ${this.settings.emptyInputBehavior}. If you want to be able to set the \\`null\\` value, you need to change the 'emptyInputBehavior' option to \\`'null'\\`.`, this.settings.showWarnings);\n            return this;\n        }\n\n        let value;\n        if (newValue === null) {\n            //TODO Merge this into a global `if (newValue === null) {` test, with the test above\n            // Here this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null\n            this._setElementAndRawValue(null, null, saveChangeToHistory);\n            this._saveValueToPersistentStorage();\n\n            return this;\n        }\n\n        value = this.constructor._toNumericValue(newValue, this.settings);\n        if (isNaN(Number(value))) {\n            //TODO Do not modify the element value if the newValue results in `NaN`. Make sure the settings, if modified, are revert back too.\n            AutoNumericHelper.warning(`The value you are trying to set results in \\`NaN\\`. The element value is set to the empty string instead.`, this.settings.showWarnings);\n            this.setValue('', saveChangeToHistory);\n\n            return this;\n        }\n\n        if (value === '') {\n            switch (this.settings.emptyInputBehavior) {\n                case AutoNumeric.options.emptyInputBehavior.zero:\n                    value = 0;\n                    break;\n                case AutoNumeric.options.emptyInputBehavior.min:\n                    value = this.settings.minimumValue;\n                    break;\n                case AutoNumeric.options.emptyInputBehavior.max:\n                    value = this.settings.maximumValue;\n                    break;\n                default:\n                    if (AutoNumericHelper.isNumber(this.settings.emptyInputBehavior)) {\n                        value = Number(this.settings.emptyInputBehavior);\n                    }\n            }\n        }\n\n        if (value !== '') {\n            const [minTest, maxTest] = this.constructor._checkIfInRangeWithOverrideOption(value, this.settings);\n\n            // Modify the formatted value if the rawValue is found in the `valuesToStrings` option\n            if (minTest && maxTest && this.settings.valuesToStrings && this._checkValuesToStrings(value)) {\n                // Set the raw value normally, and the formatted value with the corresponding string\n                this._setElementAndRawValue(this.settings.valuesToStrings[value], value, saveChangeToHistory);\n                this._saveValueToPersistentStorage();\n\n                return this;\n            }\n\n            // This test is needed by the `showPositiveSign` option\n            const isZero = AutoNumericHelper.isZeroOrHasNoValue(value);\n            if (isZero) {\n                value = '0';\n            }\n\n            if (minTest && maxTest) {\n                let forcedRawValue = this.constructor._roundRawValue(value, this.settings);\n                forcedRawValue = this._trimLeadingAndTrailingZeros(forcedRawValue.replace(this.settings.decimalCharacter, '.')); // Move the `setRawValue` call after the `setElementValue` one\n                value = this._getRawValueToFormat(value); // Multiply the raw value to obtain the formatted value\n\n                // Round the given value according to the object state (focused/unfocused)\n                if (this.isFocused) {\n                    value = this.constructor._roundFormattedValueShownOnFocus(value, this.settings);\n                } else {\n                    if (this.settings.divisorWhenUnfocused) {\n                        value = value / this.settings.divisorWhenUnfocused;\n                        value = value.toString();\n                    }\n\n                    value = this.constructor._roundFormattedValueShownOnBlur(value, this.settings);\n                }\n\n                value = this.constructor._modifyNegativeSignAndDecimalCharacterForFormattedValue(value, this.settings);\n                value = this.constructor._addGroupSeparators(value, this.settings, this.isFocused, this.rawValue, forcedRawValue);\n                if (!this.isFocused && this.settings.symbolWhenUnfocused) {\n                    value = `${value}${this.settings.symbolWhenUnfocused}`;\n                }\n\n                if (this.settings.decimalPlacesShownOnFocus || this.settings.divisorWhenUnfocused) {\n                    this._saveValueToPersistentStorage();\n                }\n\n                this._setElementAndRawValue(value, forcedRawValue, saveChangeToHistory);\n\n                // Special case when the user is allowed to enter invalid numbers outside the min/max range\n                this._setValidOrInvalidState(forcedRawValue);\n\n                return this;\n            } else {\n                this._triggerRangeEvents(minTest, maxTest);\n                AutoNumericHelper.throwError(`The value [${value}] being set falls outside of the minimumValue [${this.settings.minimumValue}] and maximumValue [${this.settings.maximumValue}] range set for this element`);\n\n                this._removeValueFromPersistentStorage();\n                this.setValue('', saveChangeToHistory); //TODO Shouldn't we just drop that faulty newValue and keep the previous one? This is behind a `throwError()` call anyway..\n\n                return this;\n            }\n        } else {\n            // Here, `value` equal the empty string `''`\n            let result;\n            if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.always) {\n                // Keep the currency symbol as per emptyInputBehavior\n                result = this.settings.currencySymbol;\n            } else {\n                result = '';\n            }\n\n            this._setElementAndRawValue(result, '', saveChangeToHistory);\n\n            return this;\n        }\n    }\n\n    /**\n     * Set the given value directly as the DOM element value, without formatting it beforehand.\n     * You can also set the value and update the setting in one go (the value will again not be formatted immediately).\n     *\n     * @param {number|string} value\n     * @param {object} options\n     * @returns {AutoNumeric}\n     * @throws\n     */\n    setUnformatted(value, options = null) {\n        //TODO Should we use `AutoNumeric.unformat()` here and set the unformatted result in case `value` is formatted?\n        if (value === null || AutoNumericHelper.isUndefined(value)) {\n            return this;\n        }\n\n        // The options update is done only if the `value` is not null\n        if (!AutoNumericHelper.isNull(options)) {\n            this._setSettings(options, true); // We do not call `update` here since this would call `set` too\n        }\n\n        const strippedValue = this.constructor._removeBrackets(value, this.settings);\n        const normalizedValue = this.constructor._stripAllNonNumberCharacters(strippedValue, this.settings, true, this.isFocused);\n        if (!AutoNumericHelper.isNumber(normalizedValue)) {\n            AutoNumericHelper.throwError(`The value is not a valid one, it's not a numeric string nor a recognized currency.`);\n        }\n\n        if (this.constructor._isWithinRangeWithOverrideOption(normalizedValue, this.settings)) {\n            // If the `normalizedValue` is in the range\n            this.setValue(value);\n        } else {\n            AutoNumericHelper.throwError(`The value is out of the range limits [${this.settings.minimumValue}, ${this.settings.maximumValue}].`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Set the given value directly as the DOM element value, without formatting it beforehand, and without checking its validity.\n     * This also updates the `rawValue` with the given `newValue`, without checking it too ; if it's not formatted like a number recognized by Javascript, this *will* likely make other AutoNumeric methods fail.\n     *\n     * @param {string|number|null} newValue The new value to set on the element\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history array, otherwise it is not\n     * @returns {AutoNumeric}\n     */\n    setValue(newValue, saveChangeToHistory = true) {\n        this._setElementAndRawValue(newValue, saveChangeToHistory);\n\n        return this;\n    }\n\n    /**\n     * Save the raw value inside the AutoNumeric object.\n     *\n     * @param {number|string|null} rawValue The numeric value as understood by Javascript like a `Number`\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history array, otherwise it is not\n     * @private\n     */\n    _setRawValue(rawValue, saveChangeToHistory = true) {\n        // Only set the raw value if the given value is different from the current one\n        if (this.rawValue !== rawValue) { //TODO Manage the case where one value is a string while the other is a number?\n            const oldRawValue = this.rawValue;\n            // Update the raw value\n            this.rawValue = rawValue; // By default, if the `rawValue` is changed programmatically\n\n            if ((!AutoNumericHelper.isNull(this.settings.rawValueDivisor) && this.settings.rawValueDivisor !== 0) && // Only divide if the `rawValueDivisor` option is set\n                rawValue !== '' && rawValue !== null && // Do not modify the `rawValue` if it's an empty string or null\n                this._isUserManuallyEditingTheValue()) { // If the user is manually changing the element value\n                this.rawValue /= this.settings.rawValueDivisor;\n            }\n\n            // Broadcast the `rawValueModified` event since the `rawValue` has been modified\n            this._triggerEvent(AutoNumeric.events.rawValueModified, this.domElement, {\n                oldRawValue,\n                newRawValue: this.rawValue,\n                isPristine : this.isPristine(true),\n                error      : null,\n                aNElement  : this,\n            });\n\n            // Change the element style or use the relevant callbacks\n            this._parseStyleRules();\n\n            if (saveChangeToHistory) {\n                // Save in the history the last known raw value and formatted result selection\n                window.requestAnimationFrame(() => this._historyTableAdd()); // The use of `requestAnimationFrame` fixes PR #731 by avoiding \"Forced reflow\"\n            }\n        }\n    }\n\n    /**\n     * Set the given value on the DOM element, without affecting the `rawValue`.\n     * This sends an 'autoNumeric:formatted' event if the new value is different from the old one.\n     *\n     * @param {number|string} newElementValue\n     * @param {boolean} sendFormattedEvent If set to `true`, then the `AutoNumeric.events.formatted` event is sent if the value has changed\n     * @returns {AutoNumeric}\n     * @private\n     */\n    _setElementValue(newElementValue, sendFormattedEvent = true) {\n        //TODO Use an internal attribute to track the current value of the element `formattedValue` (like its counterpart `rawValue`). This would allow us to avoid calling `getElementValue` many times\n        const oldElementValue = AutoNumericHelper.getElementValue(this.domElement);\n\n        // Only update the value if it's different from the current one\n        if (newElementValue !== oldElementValue) {\n            this.internalModification = true;\n            AutoNumericHelper.setElementValue(this.domElement, newElementValue);\n            this.internalModification = false;\n\n            if (sendFormattedEvent) {\n                this._triggerEvent(AutoNumeric.events.formatted, this.domElement, {\n                    oldValue   : oldElementValue,\n                    newValue   : newElementValue,\n                    oldRawValue: this.rawValue,\n                    newRawValue: this.rawValue,\n                    isPristine : this.isPristine(false),\n                    error      : null,\n                    aNElement  : this,\n                });\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     * Set the given value on the DOM element, and the raw value on `this.rawValue`, if both are given.\n     * If only one value is given, then both the DOM element value and the raw value are set with that value.\n     * The third argument `saveChangeToHistory` defines if the change should be recorded in the history array.\n     * Note: if the second argument `rawValue` is a boolean, we consider that is really is the `saveChangeToHistory` argument.\n     *\n     * @param {number|string|null} newElementValue\n     * @param {number|string|null|boolean} rawValue\n     * @param {boolean} saveChangeToHistory\n     * @returns {AutoNumeric}\n     * @private\n     */\n    _setElementAndRawValue(newElementValue, rawValue = null, saveChangeToHistory = true) {\n        if (AutoNumericHelper.isNull(rawValue)) {\n            rawValue = newElementValue;\n        } else if (AutoNumericHelper.isBoolean(rawValue)) {\n            saveChangeToHistory = rawValue;\n            rawValue = newElementValue;\n        }\n\n        //XXX The order here is important ; the value should first be set on the element, then and only then we should update the raw value\n        // In the `set()` function, we make sure to call `_setRawValue` *after* `setElementValue` so that if `_setRawValue` calls a callback that modify the `rawValue`, then the new value is set correctly (after `setElementValue` briefly set its value first)\n        this._setElementValue(newElementValue);\n        this._setRawValue(rawValue, saveChangeToHistory);\n\n        return this;\n    }\n\n    /**\n     * Return the multiplied raw value with the `rawValueDivisor`.\n     * This is used to display different values between the raw and formatted values.\n     *\n     * @param {number|string|null} rawValue The numeric value as understood by Javascript like a `Number`\n     * @returns {number|string|null}\n     * @private\n     */\n    _getRawValueToFormat(rawValue) {\n        let rawValueForTheElementValue;\n        if ((!AutoNumericHelper.isNull(this.settings.rawValueDivisor) && this.settings.rawValueDivisor !== 0) && // Only multiply if the `rawValueDivisor` option is set\n            rawValue !== '' && rawValue !== null) { // Do not modify the `rawValue` if it's an empty string or null\n            // !this._isUserManuallyEditingTheValue()) { // If the user is NOT manually changing the element value, but that is done programmatically\n            rawValueForTheElementValue = rawValue * this.settings.rawValueDivisor;\n        } else {\n            rawValueForTheElementValue = rawValue;\n        }\n\n        return rawValueForTheElementValue;\n    }\n\n    /**\n     * Check if the given value has a corresponding key in the `valuesToStrings` option object.\n     *\n     * @param {number|string} value\n     * @returns {boolean} Returns `true` if such a key is found.\n     * @private\n     */\n    _checkValuesToStrings(value) {\n        return this.constructor._checkValuesToStringsArray(value, this.valuesToStringsKeys);\n    }\n\n    /**\n     * Check if the given value has a corresponding key in the `stringsArray` array.\n     *\n     * @param {number|string} key\n     * @param {array} stringsArray Array where the `key` is checked against its keys\n     * @returns {boolean} Returns `true` if such a key is found.\n     * @private\n     */\n    static _checkValuesToStringsArray(key, stringsArray) {\n        return AutoNumericHelper.isInArray(String(key), stringsArray);\n    }\n\n    /**\n     * Static helper for checking if the given `key` is found in the settings' `valuesToStrings` option object.\n     *\n     * @param {number|string} key\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _checkValuesToStringsSettings(key, settings) {\n        return this._checkValuesToStringsArray(key, Object.keys(settings.valuesToStrings));\n    }\n\n    /**\n     * Static helper for checking if the given `value` is found in the settings' `valuesToStrings` option object.\n     *\n     * @param {number|string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _checkStringsToValuesSettings(value, settings) {\n        return this._checkValuesToStringsArray(value, Object.values(settings.valuesToStrings));\n    }\n\n    /**\n     * Return `true` if the user is currently modifying the element value manually.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isUserManuallyEditingTheValue() {\n        // return (this.isFocused && this.isEditing) || this.isWheelEvent || this.isDropEvent;\n        return (this.isFocused && this.isEditing) || this.isDropEvent;\n    }\n\n    /**\n     * Execute the given callback function using the given result as its first parameter, and the AutoNumeric object as its second.\n     *\n     * @param {number|string|Array|null} result\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     * @private\n     */\n    _executeCallback(result, callback) {\n        if (!AutoNumericHelper.isNull(callback) && AutoNumericHelper.isFunction(callback)) {\n            callback(result, this);\n        }\n    }\n\n    /**\n     * Trigger the given event on the given element with the given detail.\n     * This takes into account the `eventBubbles` and `eventIsCancelable` options.\n     *\n     * @param {string} eventName\n     * @param {HTMLElement|HTMLDocument|EventTarget} element\n     * @param {object} detail\n     * @private\n     */\n    _triggerEvent(eventName, element = document, detail = null) {\n        AutoNumericHelper.triggerEvent(eventName, element, detail, this.settings.eventBubbles, this.settings.eventIsCancelable);\n    }\n\n    /**\n     * Alias of the `getNumericString()` function.\n     * Developers should use one of the more explicit function names to get what they want :\n     * - a numeric string : `getNumericString()`\n     * - a formatted string : `getFormatted()`\n     * - a number : `getNumber()`, or\n     * - a localized numeric string : `getLocalized()`\n     *\n     * @usage anElement.get();\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @deprecated\n     * @returns {string|null}\n     */\n    get(callback = null) {\n        return this.getNumericString(callback);\n    }\n\n    /**\n     * Return the unformatted value as a string.\n     * This can also return `null` if `rawValue` is null.\n     *\n     * @usage anElement.getNumericString();\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {string|null}\n     */\n    getNumericString(callback = null) {\n        let result;\n        if (AutoNumericHelper.isNull(this.rawValue)) {\n            result = null;\n        } else {\n            // Always return a numeric string\n            // The following statement gets rid of the trailing zeros in the decimal places since the current method does not pad decimals\n            result = AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(this.rawValue);\n        }\n\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Return the current formatted value of the AutoNumeric element as a string\n     *\n     * @usage anElement.getFormatted()\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {string}\n     */\n    getFormatted(callback = null) {\n        if (!('value' in this.domElement || 'textContent' in this.domElement)) {\n            // Make sure `.value` or `.textContent` exists before trying to access those properties\n            AutoNumericHelper.throwError('Unable to get the formatted string from the element.');\n        }\n\n        const result = AutoNumericHelper.getElementValue(this.domElement);\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Return the element unformatted value as a real Javascript number.\n     * Warning: This can lead to precision problems with big numbers that should be stored as strings.\n     *\n     * @usage anElement.getNumber()\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {number|null}\n     */\n    getNumber(callback = null) {\n        let result;\n        if (this.rawValue === null) {\n            result = null;\n        } else {\n            result = this.constructor._toLocale(this.getNumericString(), 'number', this.settings);\n        }\n\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Returns the unformatted value, but following the `outputFormat` setting, which means the output can either be :\n     * - a string (that could or could not represent a number (i.e. \"12345,67-\")), or\n     * - a plain number (if the setting 'number' is used).\n     *\n     * By default, the returned values are an ISO numeric string \"1234.56\" or \"-1234.56\" where the decimal character is a period.\n     * Check the \"outputFormat\" option definition for more details.\n     *\n     * @usage anElement.getLocalized();\n     *\n     * @param {null|string|function} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {*}\n     */\n    getLocalized(forcedOutputFormat = null, callback = null) {\n        // First, check if only a callback has been passed, and if so, sanitize the parameters\n        if (AutoNumericHelper.isFunction(forcedOutputFormat) && AutoNumericHelper.isNull(callback)) {\n            callback = forcedOutputFormat;\n            forcedOutputFormat = null;\n        }\n\n        // Then get the localized value\n        let value;\n        if (AutoNumericHelper.isEmptyString(this.rawValue)) {\n            value = '';\n        } else {\n            // Here I use `this.rawValue` instead of `this.getNumericString()` since the current input value could be unformatted with a localization (i.e. '1234567,89-').\n            // I also convert the rawValue to a number, then back to a string in order to drop the decimal part if the rawValue is an integer.\n            value = ''+Number(this.rawValue);\n        }\n\n        if (value !== '' && Number(value) === 0 && this.settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n            value = '0';\n        }\n\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(forcedOutputFormat)) {\n            outputFormatToUse = this.settings.outputFormat;\n        } else {\n            outputFormatToUse = forcedOutputFormat;\n        }\n\n        const result = this.constructor._toLocale(value, outputFormatToUse, this.settings);\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Force the element to reformat its value again (just in case the formatting has been lost).\n     * This can be used right after a form submission for instance (after a previous call to `unformat`).\n     *\n     * @example anElement.reformat()\n     *\n     * @returns {AutoNumeric}\n     */\n    reformat() {\n        // `this.rawValue` is used instead of `this.domElement.value` because when the content is `unformatLocalized`, it can become a string that cannot be converted to a number easily\n        this.set(this.rawValue);\n\n        return this;\n    }\n\n    /**\n     * Remove the formatting and keep only the raw unformatted value in the element (as a numericString)\n     * Note: this is loosely based on the previous 'unSet()' function\n     *\n     * By default, values are returned as ISO numeric strings (i.e. \"1234.56\" or \"-1234.56\"), where the decimal character is a period.\n     * @example anElement.unformat()\n     *\n     * @returns {AutoNumeric}\n     */\n    unformat() {\n        this._setElementValue(this.getNumericString());\n\n        return this;\n    }\n\n    /**\n     * Remove the formatting and keep only the localized unformatted value in the element, with the option to override the default outputFormat if needed\n     *\n     * Locale formats are supported \"1234.56-\" or \"1234,56\" or \"-1234,56 or \"1234,56-\", or even plain numbers.\n     * Take a look at the `outputFormat` option definition in the default settings for more details.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {AutoNumeric}\n     */\n    unformatLocalized(forcedOutputFormat = null) {\n        this._setElementValue(this.getLocalized(forcedOutputFormat));\n\n        return this;\n    }\n\n    /**\n     * Return `true` if the current value is the same as when the element got initialized.\n     * Note: By default, this returns `true` if the raw unformatted value is still the same even if the formatted one has changed (due to a configuration update for instance).\n     * In order to test if the formatted value is the same (which means neither the raw value nor the settings have been changed), then you must pass `false` as its argument.\n     *\n     * @param {boolean} checkOnlyRawValue If set to `true`, the pristine value is done on the raw unformatted value, not the formatted one.  If set to `false`, this also checks that the formatted value hasn't changed.\n     * @returns {boolean}\n     */\n    isPristine(checkOnlyRawValue = true) {\n        let result;\n        if (checkOnlyRawValue) {\n            result = this.initialValue === this.getNumericString();\n        } else {\n            result = this.initialValueHtmlAttribute === this.getFormatted();\n        }\n\n        return result;\n    }\n\n    /**\n     * Select the formatted element content, based on the `selectNumberOnly` option\n     *\n     * @returns {AutoNumeric}\n     */\n    select() {\n        if (this.settings.selectNumberOnly) {\n            this.selectNumber();\n        } else {\n            this._defaultSelectAll();\n        }\n\n        return this;\n    }\n\n    /**\n     * Select the whole element content (including the currency symbol).\n     * @private\n     */\n    _defaultSelectAll() {\n        AutoNumericHelper.setElementSelection(this.domElement, 0, AutoNumericHelper.getElementValue(this.domElement).length);\n    }\n\n    /**\n     * Select only the numbers in the formatted element content, leaving out the currency symbol, whatever the value of the `selectNumberOnly` option\n     *\n     * @returns {AutoNumeric}\n     */\n    selectNumber() {\n        //TODO Make sure the selection is ok when showPositiveSign is set to `true` (select the negative sign, but not the positive one)\n        const unformattedValue = AutoNumericHelper.getElementValue(this.domElement);\n        const valueLen = unformattedValue.length;\n        const currencySymbolSize = this.settings.currencySymbol.length;\n        const currencySymbolPlacement = this.settings.currencySymbolPlacement;\n        const negLen = (!AutoNumericHelper.isNegative(unformattedValue, this.settings.negativeSignCharacter))?0:1;\n        const suffixTextLen = this.settings.suffixText.length;\n\n        let start;\n        if (currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            start = 0;\n        } else if (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left &&\n            negLen === 1 && currencySymbolSize > 0) {\n            start = currencySymbolSize + 1;\n        } else {\n            start = currencySymbolSize;\n        }\n\n        let end;\n        if (currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            end = valueLen - suffixTextLen;\n        } else {\n            switch (this.settings.negativePositiveSignPlacement) {\n                case AutoNumeric.options.negativePositiveSignPlacement.left:\n                    end = valueLen - (suffixTextLen + currencySymbolSize);\n                    break;\n                case AutoNumeric.options.negativePositiveSignPlacement.right:\n                    if (currencySymbolSize > 0) {\n                        end = valueLen - (currencySymbolSize + negLen + suffixTextLen);\n                    } else {\n                        end = valueLen - (currencySymbolSize + suffixTextLen);\n                    }\n                    break;\n                default :\n                    end = valueLen - (currencySymbolSize + suffixTextLen);\n            }\n        }\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n\n        return this;\n    }\n\n    /**\n     * Select only the integer part in the formatted element content, whatever the value of `selectNumberOnly`\n     *\n     * @returns {AutoNumeric}\n     */\n    selectInteger() {\n        let start = 0;\n        const isPositive = this.rawValue >= 0;\n\n        // Negative or positive sign, if any\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix ||\n            (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix &&\n            (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.prefix ||\n            this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.none))) {\n            if ((this.settings.showPositiveSign && isPositive) ||  // This only exclude the positive sign from being selected\n                (!isPositive && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left)) { // And this excludes the negative sign from being selected in this special case : '-€ 1.234,57suffixText'\n                start = start + 1;\n            }\n        }\n\n        // Currency symbol\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            start = start + this.settings.currencySymbol.length;\n        }\n\n        // Calculate the selection end position\n        const elementValue = AutoNumericHelper.getElementValue(this.domElement);\n        let end = elementValue.indexOf(this.settings.decimalCharacter);\n        if (end === -1) {\n            // No decimal character found\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                end = elementValue.length - this.settings.currencySymbol.length;\n            } else {\n                end = elementValue.length;\n            }\n\n            // Trailing negative sign\n            if (!isPositive &&\n                (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix ||\n                this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) {\n                end = end - 1;\n            }\n\n            // Avoid selecting the suffix test\n            end = end - this.settings.suffixText.length;\n        }\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n\n        return this;\n    }\n\n    /**\n     * Select only the decimal part in the formatted element content, whatever the value of `selectNumberOnly`\n     * Multiple cases are possible :\n     * +1.234,57suffixText\n     *\n     * € +1.234,57suffixText\n     * +€ 1.234,57suffixText\n     * € 1.234,57+suffixText\n     *\n     * 1.234,57+ €suffixText\n     * 1.234,57 €+suffixText\n     * +1.234,57 €suffixText\n     *\n     * @returns {AutoNumeric}\n     */\n    selectDecimal() {\n        let start = AutoNumericHelper.getElementValue(this.domElement).indexOf(this.settings.decimalCharacter);\n        let end;\n\n        if (start === -1) {\n            // The decimal character has not been found, we deselect all\n            start = 0;\n            end = 0;\n        } else {\n            // A decimal character has been found\n            start = start + 1; // We add 1 to exclude the decimal character from the selection\n\n            let decimalCount;\n            if (this.isFocused) {\n                decimalCount = this.settings.decimalPlacesShownOnFocus;\n            } else {\n                decimalCount = this.settings.decimalPlacesShownOnBlur;\n            }\n\n            end = start + Number(decimalCount);\n        }\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n\n        return this;\n    }\n\n    /**\n     * Return the DOM element reference of the autoNumeric-managed element\n     *\n     * @returns {HTMLElement|HTMLInputElement}\n     */\n    node() {\n        return this.domElement;\n    }\n\n    /**\n     * Return the DOM element reference of the parent node of the autoNumeric-managed element\n     *\n     * @returns {HTMLElement|HTMLInputElement|Node}\n     */\n    parent() {\n        return this.domElement.parentNode;\n    }\n\n    /**\n     * Detach the current AutoNumeric element from the shared local 'init' list.\n     * This means any changes made on that local shared list will not be transmitted to that element anymore.\n     * Note : The user can provide another AutoNumeric element, and detach this one instead of the current one.\n     *\n     * @param {AutoNumeric} otherAnElement\n     * @returns {AutoNumeric}\n     */\n    detach(otherAnElement = null) { //FIXME test this\n        let domElementToDetach;\n        if (!AutoNumericHelper.isNull(otherAnElement)) {\n            domElementToDetach = otherAnElement.node();\n        } else {\n            domElementToDetach = this.domElement;\n        }\n\n        this._removeFromLocalList(domElementToDetach); //FIXME What happens if the selected dom element does not exist in the list?\n\n        return this;\n    }\n\n    /**\n     * Attach the given AutoNumeric element to the shared local 'init' list.\n     * When doing that, by default the DOM content is left untouched.\n     * The user can force a reformat with the new shared list options by passing a second argument to `true`.\n     *\n     * @param {AutoNumeric} otherAnElement\n     * @param {boolean} reFormat\n     * @returns {AutoNumeric}\n     */\n    attach(otherAnElement, reFormat = true) { //FIXME test this\n        this._addToLocalList(otherAnElement.node()); //FIXME Should we make sure the element is not already in the list?\n        if (reFormat) {\n            otherAnElement.update(this.settings);\n        }\n\n        return this;\n    }\n\n    /**\n     * Format and return the given value, or set the formatted value into the given DOM element if one is passed as an argument.\n     * By default, this use the current element settings.\n     * The user can override any option of its choosing by passing an option object.\n     *\n     * @param {number|HTMLElement|HTMLInputElement} valueOrElement\n     * @param {null|object} optionOverride\n     * @returns {string|null}\n     */\n    formatOther(valueOrElement, optionOverride = null) { //FIXME test this\n        return this._formatOrUnformatOther(true, valueOrElement, optionOverride);\n    }\n\n    /**\n     * Unformat and return the raw numeric string corresponding to the given value, or directly set the unformatted value into the given DOM element if one is passed as an argument.\n     * By default, this use the current element settings.\n     * The user can override any option of its choosing by passing an option object.\n\n     * @param {string|HTMLElement|HTMLInputElement} stringOrElement\n     * @param {null|object} optionOverride\n     * @returns {string|null}\n     */\n    unformatOther(stringOrElement, optionOverride = null) { //FIXME test this\n        return this._formatOrUnformatOther(false, stringOrElement, optionOverride);\n    }\n\n    /**\n     * Method that either format or unformat the value of another element.\n     *\n     * - Format and return the given value, or set the formatted value into the given DOM element if one is passed as an argument.\n     * - Unformat and return the raw numeric string corresponding to the given value, or directly set the unformatted value into the given DOM element if one is passed as an argument.\n     *\n     * By default, this use the current element settings.\n     * The user can override any option of its choosing by passing an option object.\n     *\n     * @param {boolean} isFormatting If set to `true`, then the method formats, otherwise if set to `false`, it unformats\n     * @param {number|string|HTMLElement|HTMLInputElement} valueOrStringOrElement\n     * @param {null|object} optionOverride\n     * @returns {string|null}\n     * @private\n     */\n    _formatOrUnformatOther(isFormatting, valueOrStringOrElement, optionOverride = null) { //FIXME test this\n        // If the user wants to override the current element settings temporarily\n        let settingsToUse;\n        if (!AutoNumericHelper.isNull(optionOverride)) {\n            settingsToUse = this._cloneAndMergeSettings(optionOverride);\n        } else {\n            settingsToUse = this.settings;\n        }\n\n        // Then the unformatting is done...\n        let result;\n        if (AutoNumericHelper.isElement(valueOrStringOrElement)) {\n            // ...either directly on the DOM element value\n            const elementValue = AutoNumericHelper.getElementValue(valueOrStringOrElement);\n            if (isFormatting) {\n                result = AutoNumeric.format(elementValue, settingsToUse);\n            }\n            else {\n                result = AutoNumeric.unformat(elementValue, settingsToUse);\n            }\n\n            AutoNumericHelper.setElementValue(valueOrStringOrElement, result); //TODO Use `unformatAndSet` and `formatAndSet`instead\n\n            return null;\n        }\n\n        // ...or on the given value\n        if (isFormatting) {\n            result = AutoNumeric.format(valueOrStringOrElement, settingsToUse);\n        }\n        else {\n            result = AutoNumeric.unformat(valueOrStringOrElement, settingsToUse);\n        }\n\n        return result;\n    }\n\n    /**\n     * Use the current AutoNumeric element settings to initialize the DOM element(s) given as a parameter.\n     * Doing so will *link* the AutoNumeric elements together since they will share the same local AutoNumeric element list.\n     * (cf. prototype pattern : https://en.wikipedia.org/wiki/Prototype_pattern)\n     *\n     * You can `init` either a single DOM element (in that case an AutoNumeric object will be returned), or an array of DOM elements or a string that will be used as a CSS selector. In the latter cases, an array of AutoNumeric objects will then be returned (or an empty array if nothing gets selected by the CSS selector).\n     *\n     * Use case : Once you have an AutoNumeric element already setup correctly with the right options, you can use it as many times you want to initialize as many other DOM elements as needed.\n     * Note : this works only on elements that can be managed by autoNumeric.\n     *\n     * @param {HTMLElement|HTMLInputElement|Array<HTMLElement|HTMLInputElement>|string} domElementOrArrayOrString\n     * @param {boolean} attached If set to `false`, then the newly generated AutoNumeric element will not share the same local element list\n     * @returns {AutoNumeric|[AutoNumeric]}\n     */\n    init(domElementOrArrayOrString, attached = true) {\n        let returnASingleAutoNumericObject = false; // By default, this function returns an array of AutoNumeric objects\n        let domElementsArray = [];\n        if (AutoNumericHelper.isString(domElementOrArrayOrString)) {\n            domElementsArray = [...document.querySelectorAll(domElementOrArrayOrString)]; // Convert a NodeList to an Array\n        } else if (AutoNumericHelper.isElement(domElementOrArrayOrString)) {\n            domElementsArray.push(domElementOrArrayOrString);\n            returnASingleAutoNumericObject = true; // Special case when only one DOM element is passed as a parameter\n        } else if (AutoNumericHelper.isArray(domElementOrArrayOrString)) {\n            domElementsArray = domElementOrArrayOrString;\n        } else {\n            AutoNumericHelper.throwError(`The given parameters to the 'init' function are invalid.`);\n        }\n\n        if (domElementsArray.length === 0) {\n            AutoNumericHelper.warning(`No valid DOM elements were given hence no AutoNumeric object were instantiated.`, true);\n\n            return [];\n        }\n\n        const currentLocalList = this._getLocalList();\n        const autoNumericObjectsArray = [];\n\n        // Instantiate (and link depending on `attached`) each AutoNumeric objects\n        domElementsArray.forEach(domElement => {\n            // Initialize the new AutoNumeric element\n            const originalCreateLocalListSetting = this.settings.createLocalList;\n            if (attached) {\n                // Temporary variable to know if we should create the local list during the initialization (since we'll remove it afterward)\n                this.settings.createLocalList = false;\n            }\n\n            const newAutoNumericElement =  new AutoNumeric(domElement, AutoNumericHelper.getElementValue(domElement), this.settings);\n\n            // Set the common shared local list if needed\n            // If the user wants to create a detached new AutoNumeric element, then skip the following step that bind the two elements together by default\n            if (attached) {\n                // 1) Set the local list reference to point to the initializer's one\n                newAutoNumericElement._setLocalList(currentLocalList);\n\n                // 2) Add the new element to that existing list\n                this._addToLocalList(domElement, newAutoNumericElement); // Here we use the *new* AutoNumeric object reference to add to the local list, since we'll need the reference to `this` in the methods to points to that new AutoNumeric object.\n                this.settings.createLocalList = originalCreateLocalListSetting;\n            }\n\n            autoNumericObjectsArray.push(newAutoNumericElement);\n        });\n\n        if (returnASingleAutoNumericObject) {\n            // If a single DOM element was used as the parameter, then we return an AutoNumeric object directly\n            return autoNumericObjectsArray[0];\n        }\n\n        // ...otherwise we return an Array of AutoNumeric objects\n        return autoNumericObjectsArray;\n    }\n\n    /**\n     * Reset the element value either to the empty string '', or the currency sign, depending on the `emptyInputBehavior` option value.\n     * If you set the `forceClearAll` argument to `true`, then the `emptyInputBehavior` option is overridden and the whole input is clear, including any currency sign.\n     *\n     * @param {boolean} forceClearAll\n     * @returns {AutoNumeric}\n     */\n    clear(forceClearAll = false) {\n        if (forceClearAll) {\n            const temporaryForcedOptions = {\n                emptyInputBehavior: AutoNumeric.options.emptyInputBehavior.focus,\n            };\n            this.set('', temporaryForcedOptions);\n        } else {\n            this.set('');\n        }\n\n        return this;\n    }\n\n    /**\n     * Remove the autoNumeric data and event listeners from the element, but keep the element content intact.\n     * This also clears the value from sessionStorage (or cookie, depending on browser supports).\n     * Note: this does not remove the formatting.\n     *\n     * @example anElement.remove()\n     */\n    remove() {\n        this._removeValueFromPersistentStorage();\n        this._removeEventListeners();\n        this._removeWatcher();\n\n        // Also remove the element from the local AutoNumeric list\n        this._removeFromLocalList(this.domElement);\n        // Also remove the element from the global AutoNumeric list\n        this.constructor._removeFromGlobalList(this);\n    }\n\n    /**\n     * Remove the autoNumeric data and event listeners from the element, and reset its value to the empty string ''.\n     * This also clears the value from sessionStorage (or cookie, depending on browser supports).\n     *\n     * @example anElement.wipe()\n     */\n    wipe() {\n        this._setElementValue('', false); // Do not send the 'AutoNumeric.events.formatted' event when wiping an AutoNumeric object\n        this.remove();\n    }\n\n    /**\n     * Remove the autoNumeric data and event listeners from the element, and delete the DOM element altogether\n     */\n    nuke() {\n        this.remove();\n        // Remove the element from the DOM\n        this.domElement.parentNode.removeChild(this.domElement);\n    }\n\n\n    // Special functions that really work on the parent <form> element, instead of the <input> element itself\n\n    /**\n     * Return a reference to the parent <form> element if it exists, otherwise return `null`.\n     * If the parent form element as already been found, this directly return a reference to it.\n     * However, you can force AutoNumeric to search again for its reference by passing `true` as a parameter to this method.\n     * This method updates the `this.parentForm` attribute.\n     *\n     * In either case, whenever a new parent form is set for the current AutoNumeric element, we make sure to update the anCount and anFormHandler attributes on both the old form and the new one (for instance in case the user moved the input elements with `appendChild()` since AutoNumeric cannot not detect that).\n     *\n     * @param {boolean} forceSearch If set to `true`, the parent form is searched again, even if `this.parentForm` is already set.\n     *\n     * @returns {HTMLFormElement|null}\n     */\n    form(forceSearch = false) {\n        if (forceSearch || AutoNumericHelper.isUndefinedOrNullOrEmpty(this.parentForm)) {\n            const newParentForm = this._getParentForm();\n            if (!AutoNumericHelper.isNull(newParentForm) && newParentForm !== this.parentForm) {\n                // If the current parent form exists and is different from the previous parent form\n\n                // Search for all the AutoNumeric elements in the old parent form\n                const oldANChildren = this._getFormAutoNumericChildren(this.parentForm);\n                // Update the anCount with the correct number of AutoNumeric elements\n                this.parentForm.dataset.anCount = oldANChildren.length;\n\n                // Check if the new parent form already has a anFormHandler name\n                if (this._hasFormHandlerFunction(newParentForm)) {\n                    this._incrementParentFormCounter(newParentForm); // Increment its counter\n                } else {\n                    // Create one and set the anCount to 1\n                    this._storeFormHandlerFunction(newParentForm);\n                    this._initializeFormCounterToOne(newParentForm);\n                }\n            }\n\n            this.parentForm = newParentForm;\n        }\n\n        return this.parentForm;\n    }\n\n    /**\n     * Returns an array of the AutoNumeric-managed elements for the given form element is passed, otherwise for the current `this.parentForm` element.\n     * This search for <input> elements, as well as contenteditable non-input tag ones. This also search for elements outside the `form` elements.\n     *\n     * @param {HTMLFormElement|null} formElement\n     *\n     * @returns {Array.<HTMLInputElement>}\n     * @private\n     */\n    _getFormAutoNumericChildren(formElement) {\n        // Search for all the child AutoNumeric elements in that parent form\n        const inputElementsList = [...formElement.elements]; //XXX `.elements` here only returns the form's inputs, not the other child elements that could be contenteditable\n        const nonInputContentEditableElementsList = this._getContenteditableElements(formElement); // Get the contenteditable elements inside and outside the form element\n        const elementsList = AutoNumericHelper.arrayUnique(inputElementsList, nonInputContentEditableElementsList);\n\n        return elementsList.filter(element => this.constructor.isManagedByAutoNumeric(element));\n    }\n\n    /**\n     * Returns an array of the non-input contenteditable elements linked to the given form element.\n     * Two types of elements are possible, either located inside the form element, or outside.\n     * For the outside elements, this only works if the form element has a defined id and that id is referenced on the non-input element as the `form` attribute.\n     * If no elements can be found, then an empty array is returned.\n     *\n     * @param {HTMLFormElement|null} formElement\n     *\n     * @returns {Array.<HTMLInputElement>}\n     * @private\n     */\n    _getContenteditableElements(formElement) {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(formElement) || !formElement.hasAttribute('id')) {\n            return [];\n        }\n        const elementsInside = [...formElement.querySelectorAll('[contenteditable=true]')];\n        const elementsOutside = [...document.querySelectorAll(`*:not(input)[form=${formElement.getAttribute('id')}][contenteditable=true]`)];\n\n        return AutoNumericHelper.arrayUnique(elementsInside, elementsOutside);\n    }\n\n    /**\n     * Returns a reference to the parent <form> element if it exists, otherwise return `null`.\n     *\n     * @returns {HTMLFormElement|null}\n     * @private\n     */\n    _getParentForm() {\n        if (!AutoNumericHelper.isUndefined(this.domElement.form)) return this.domElement.form; // This catches input elements outside the form element\n\n        if (this.domElement.tagName.toLowerCase() === 'body') {\n            return null;\n        }\n\n        let node = this.domElement;\n        let tagName;\n        do {\n            node = node.parentNode;\n            if (AutoNumericHelper.isNull(node)) {\n                // Special case when using templates with frameworks like Vue.js, where the input element can be 'detached' when initializing the DOM structure\n                return null;\n            }\n\n            if (node.tagName) {\n                tagName = node.tagName.toLowerCase();\n            } else {\n                tagName = '';\n            }\n\n            if (tagName === 'body') {\n                // Get out of the loop if we get up to the `<body>` element\n                break;\n            }\n        } while (tagName !== 'form');\n\n        if (tagName === 'form') {\n            return node;\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Return a string in standard URL-encoded notation with the form input values being unformatted.\n     * This string can be used as a query for instance.\n     *\n     * @returns {string}\n     */\n    formNumericString() {\n        return this.constructor._serializeNumericString(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return a string in standard URL-encoded notation with the form input values being formatted.\n     *\n     * @returns {string}\n     */\n    formFormatted() {\n        return this.constructor._serializeFormatted(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return a string in standard URL-encoded notation with the form input values, with localized values.\n     * The default output format can be overridden by passing the option as a parameter.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {string}\n     */\n    formLocalized(forcedOutputFormat = null) {\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(forcedOutputFormat)) {\n            outputFormatToUse = this.settings.outputFormat;\n        } else {\n            outputFormatToUse = forcedOutputFormat;\n        }\n\n        return this.constructor._serializeLocalized(this.form(), this.settings.serializeSpaces, outputFormatToUse);\n    }\n\n    /**\n     * Return an array containing an object for each form <input> element.\n     * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is an unformatted numeric string.\n     *\n     * @returns {Array}\n     */\n    formArrayNumericString() {\n        return this.constructor._serializeNumericStringArray(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return an array containing an object for each form <input> element.\n     * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is the formatted string.\n     *\n     * @returns {Array}\n     */\n    formArrayFormatted() {\n        return this.constructor._serializeFormattedArray(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return an array containing an object for each form <input> element.\n     * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is the localized numeric string.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {Array}\n     */\n    formArrayLocalized(forcedOutputFormat = null) {\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(forcedOutputFormat)) {\n            outputFormatToUse = this.settings.outputFormat;\n        } else {\n            outputFormatToUse = forcedOutputFormat;\n        }\n\n        return this.constructor._serializeLocalizedArray(this.form(), this.settings.serializeSpaces, outputFormatToUse);\n    }\n\n    /**\n     * Return a JSON string containing an object representing the form input values.\n     * This is based on the result of the `formArrayNumericString()` function.\n     *\n     * @returns {string}\n     */\n    formJsonNumericString() {\n        return JSON.stringify(this.formArrayNumericString());\n    }\n\n    /**\n     * Return a JSON string containing an object representing the form input values.\n     * This is based on the result of the `formArrayFormatted()` function.\n     *\n     * @returns {string}\n     */\n    formJsonFormatted() {\n        return JSON.stringify(this.formArrayFormatted());\n    }\n\n    /**\n     * Return a JSON string containing an object representing the form input values.\n     * This is based on the result of the `formArrayLocalized()` function.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {string}\n     */\n    formJsonLocalized(forcedOutputFormat = null) {\n        return JSON.stringify(this.formArrayLocalized(forcedOutputFormat));\n    }\n\n    /**\n     * Unformat all the autoNumeric-managed elements that are a child of the parent <form> element of this DOM element, to numeric strings\n     *\n     * @returns {AutoNumeric}\n     */\n    formUnformat() { //FIXME test this\n        const inputs = this.constructor._getChildANInputElement(this.form());\n        inputs.forEach(input => {\n            AutoNumeric.getAutoNumericElement(input).unformat();\n        });\n\n        return this;\n    }\n\n    /**\n     * Unformat all the autoNumeric-managed elements that are a child of the parent <form> element of this DOM element, to localized strings\n     *\n     * @returns {AutoNumeric}\n     */\n    formUnformatLocalized() { //FIXME test this\n        const inputs = this.constructor._getChildANInputElement(this.form());\n        inputs.forEach(input => {\n            AutoNumeric.getAutoNumericElement(input).unformatLocalized();\n        });\n\n        return this;\n    }\n\n    /**\n     * Reformat all the autoNumeric-managed elements that are a child of the parent <form> element of this DOM element\n     *\n     * @returns {AutoNumeric}\n     */\n    formReformat() { //FIXME test this\n        const inputs = this.constructor._getChildANInputElement(this.form());\n        inputs.forEach(input => {\n            AutoNumeric.getAutoNumericElement(input).reformat();\n        });\n\n        return this;\n    }\n\n    /**\n     * Convert the input values to numeric strings, submit the form, then reformat those back.\n     * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n     * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formNumericString()`.\n     *\n     * @param {function|null} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitNumericString(callback = null) { //FIXME test this\n        if (AutoNumericHelper.isNull(callback)) {\n            this.formUnformat();\n            this.form().submit();\n            this.formReformat();\n        } else if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formNumericString());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Submit the form with the current formatted values.\n     * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n     * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formFormatted()`.\n     *\n     * @param {function|null} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitFormatted(callback = null) { //FIXME test this\n        if (AutoNumericHelper.isNull(callback)) {\n            this.form().submit();\n        } else if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formFormatted());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Convert the input values to localized strings, submit the form, then reformat those back.\n     * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n     * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formLocalized()`.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @param {function|null} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitLocalized(forcedOutputFormat = null, callback = null) { //FIXME test this\n        if (AutoNumericHelper.isNull(callback)) {\n            this.formUnformatLocalized();\n            this.form().submit();\n            this.formReformat();\n        } else if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formLocalized(forcedOutputFormat));\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate an array of numeric strings from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formArrayNumericString()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitArrayNumericString(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formArrayNumericString());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate an array of the current formatted values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formArrayFormatted()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitArrayFormatted(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formArrayFormatted());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate an array of localized strings from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formArrayLocalized()`.\n     *\n     * @param {function} callback\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {AutoNumeric}\n     */\n    formSubmitArrayLocalized(callback, forcedOutputFormat = null) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formArrayLocalized(forcedOutputFormat));\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate a JSON string with the numeric strings values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formJsonNumericString()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitJsonNumericString(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formJsonNumericString());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate a JSON string with the current formatted values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formJsonFormatted()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitJsonFormatted(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formJsonFormatted());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate a JSON string with the localized strings values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formJsonLocalized()`.\n     *\n     * @param {function} callback\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {AutoNumeric}\n     */\n    formSubmitJsonLocalized(callback, forcedOutputFormat = null) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formJsonLocalized(forcedOutputFormat));\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Unformat the given AutoNumeric element, and update the `hoveredWithAlt` variable.\n     *\n     * @param {AutoNumeric} anElement\n     * @private\n     */\n    static _unformatAltHovered(anElement) {\n        anElement.hoveredWithAlt = true;\n        anElement.unformat();\n    }\n\n    /**\n     * Reformat the given AutoNumeric element, and update the `hoveredWithAlt` variable.\n     *\n     * @param {AutoNumeric} anElement\n     * @private\n     */\n    static _reformatAltHovered(anElement) {\n        anElement.hoveredWithAlt = false;\n        anElement.reformat();\n    }\n\n    /**\n     * Return an array of autoNumeric elements, child of the <form> element passed as a parameter.\n     *\n     * @param {HTMLElement} formNode\n     * @returns {Array}\n     * @private\n     */\n    static _getChildANInputElement(formNode) { //FIXME test this\n        const inputList = formNode.getElementsByTagName('input');\n\n        // Loop this list and keep only the inputs that are managed by AutoNumeric\n        const autoNumericInputs = [];\n        const inputElements = Array.prototype.slice.call(inputList, 0);\n        inputElements.forEach(input => {\n            if (this.test(input)) {\n                autoNumericInputs.push(input);\n            }\n        });\n\n        return autoNumericInputs;\n    }\n\n    // Static methods\n    /**\n     * Test if the given DOM element, or the element selected by the given selector string is already managed by AutoNumeric (if it has been initialized on the current page).\n     *\n     * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n     * @returns {boolean}\n     */\n    static test(domElementOrSelector) {\n        return this._isInGlobalList(AutoNumericHelper.domElement(domElementOrSelector));\n    }\n\n    /**\n     * Create a WeakMap with the given name.\n     *\n     * @param {string} weakMapName\n     * @private\n     */\n    static _createWeakMap(weakMapName) {\n        window[weakMapName] = new WeakMap();\n    }\n\n    /**\n     * Create a list of all the AutoNumeric elements that are initialized on the current page.\n     * This is needed in order to determine if a given dom element is already managed by autoNumeric.\n     * This uses a WeakMap in order to limit potential garbage collection problems.\n     * (cf. my tests on http://codepen.io/AnotherLinuxUser/pen/pRQGaM?editors=1011)\n     * @private\n     */\n    static _createGlobalList() {\n        // The check that this global list does not exist already is done in the add and remove functions already\n        this.autoNumericGlobalListName = 'autoNumericGlobalList'; //XXX This looks weird to set a variable on `this.` in a static method, but that really declare that variable like a static property\n        // Note: I should not get any memory leaks for referencing the DOM element in the `value`, this DOM element also being the `key`, according to the spec : http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects\n        this._createWeakMap(this.autoNumericGlobalListName);\n    }\n\n    /**\n     * Return `true` if the global AutoNumeric element list exists.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    static _doesGlobalListExists() {\n        const type = typeof window[this.autoNumericGlobalListName];\n        return type !== 'undefined' &&\n               type === 'object';\n    }\n\n    /**\n     * Add the given object to the global AutoNumeric element list.\n     *\n     * @param {AutoNumeric} autoNumericObject\n     * @private\n     */\n    static _addToGlobalList(autoNumericObject) {\n        if (!this._doesGlobalListExists()) {\n            this._createGlobalList();\n        }\n\n        const domElement = autoNumericObject.node();\n        // This checks if the object is not already in the global list before adding it.\n        // This could happen if an AutoNumeric element is initialized, then the DOM element is removed directly via `removeChild` (hence the reference does not get removed from the global list), then it get recreated and initialized again\n        if (this._isInGlobalList(domElement)) {\n            if (this._getFromGlobalList(domElement) === this) {\n                // Do not add this AutoNumeric object again since it's already in that global list\n                return;\n            } else {\n                // Print a warning to warn that the domElement already has a reference in the global map (but we cannot for sure starts deleting those old references since they could still be used by another AutoNumeric object)\n                AutoNumericHelper.warning(`A reference to the DOM element you just initialized already exists in the global AutoNumeric element list. Please make sure to not initialize the same DOM element multiple times.`, autoNumericObject.getSettings().showWarnings);\n            }\n        }\n\n        window[this.autoNumericGlobalListName].set(domElement, autoNumericObject);\n    }\n\n    /**\n     * Remove the given object from the global AutoNumeric element list.\n     *\n     * @param {AutoNumeric} autoNumericObject\n     * @private\n     */\n    static _removeFromGlobalList(autoNumericObject) { //FIXME test this\n        if (this._doesGlobalListExists()) {\n            window[this.autoNumericGlobalListName].delete(autoNumericObject.node());\n        }\n    }\n\n    /**\n     * Return the value associated to the key `domElement` passed as a parameter.\n     * The value is the AutoNumeric object that manages the DOM element `domElement`.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @returns {null|AutoNumeric}\n     * @private\n     */\n    static _getFromGlobalList(domElement) { //FIXME test this\n        if (this._doesGlobalListExists()) {\n            return window[this.autoNumericGlobalListName].get(domElement);\n        }\n\n        return null;\n    }\n\n    /**\n     * Check if the given DOM element is in the global AutoNumeric element list.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @returns {boolean}\n     * @private\n     */\n    static _isInGlobalList(domElement) { //FIXME test this\n        if (!this._doesGlobalListExists()) {\n            return false;\n        }\n\n        return window[this.autoNumericGlobalListName].has(domElement);\n    }\n\n    /**\n     * Create a `Map` that will store all the autoNumeric elements that are initialized from this current element.\n     * @private\n     */\n    _createLocalList() {\n        this.autoNumericLocalList = new Map();\n        this._addToLocalList(this.domElement);\n    }\n\n    /**\n     * In some rare cases, you could want to delete the local list generated during the element initialization (in order to use another one instead for instance).\n     * @private\n     */\n    _deleteLocalList() {\n        delete this.autoNumericLocalList;\n    }\n\n    /**\n     * Set the local list with the given Map object.\n     *\n     * @param {Map} localList\n     * @private\n     */\n    _setLocalList(localList) {\n        this.autoNumericLocalList = localList;\n    }\n\n    /**\n     * Return the local list Map object.\n     *\n     * @returns {*|Map}\n     * @private\n     */\n    _getLocalList() {\n        return this.autoNumericLocalList;\n    }\n\n    /**\n     * Return `true` if the AutoNumeric object has a local list defined already and has at least one element in it (itself usually).\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _hasLocalList() {\n        return this.autoNumericLocalList instanceof Map && this.autoNumericLocalList.size !== 0;\n    }\n\n    /**\n     * Add the given object to the local autoNumeric element list.\n     * Note: in order to keep a coherent list, we only add DOM elements in it, not the autoNumeric object.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @param {AutoNumeric} autoNumericObject A reference to the AutoNumeric object that manage the given DOM element\n     * @throws\n     * @private\n     */\n    _addToLocalList(domElement, autoNumericObject = null) {\n        if (AutoNumericHelper.isNull(autoNumericObject)) {\n            autoNumericObject = this;\n        }\n\n        if (!AutoNumericHelper.isUndefined(this.autoNumericLocalList)) {\n            this.autoNumericLocalList.set(domElement, autoNumericObject); // Use the DOM element as key, and the AutoNumeric object as the value\n        } else {\n            AutoNumericHelper.throwError(`The local list provided does not exists when trying to add an element. [${this.autoNumericLocalList}] given.`);\n        }\n    }\n\n    /**\n     * Remove the given object from the local autoNumeric element list.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @private\n     */\n    _removeFromLocalList(domElement) {\n        if (!AutoNumericHelper.isUndefined(this.autoNumericLocalList)) {\n            this.autoNumericLocalList.delete(domElement);\n        } else if (this.settings.createLocalList) {\n            AutoNumericHelper.throwError(`The local list provided does not exists when trying to remove an element. [${this.autoNumericLocalList}] given.`);\n        }\n    }\n\n    /**\n     * Merge the `newSettings` given as parameters into the current element settings.\n     *\n     * WARNING: Using `Object.assign()` here means the merge is not recursive and only one depth is merged.\n     * cf. http://stackoverflow.com/a/39188108/2834898\n     * cf. tests on http://codepen.io/AnotherLinuxUser/pen/KaJORq?editors=0011\n     *\n     * @param {object} newSettings\n     * @private\n     */\n    _mergeSettings(...newSettings) {\n        Object.assign(this.settings, ...newSettings);\n    }\n\n    /**\n     * Return a new object with the current element settings merged with the new settings.\n     *\n     * @param {object} newSettings\n     * @returns {object}\n     * @private\n     */\n    _cloneAndMergeSettings(...newSettings) {\n        const result = {};\n        Object.assign(result, this.settings, ...newSettings);\n\n        return result;\n    }\n\n    /**\n     * Validate the given option object.\n     * If the options are valid, this function returns nothing, otherwise if the options are invalid, this function throws an error.\n     *\n     * This tests if the options are not conflicting and are well formatted.\n     * This function is lenient since it only tests the settings properties ; it ignores any other properties the options object could have.\n     *\n     * @param {*} userOptions\n     * @param {Boolean} shouldExtendDefaultOptions If `true`, then this function will extend the `userOptions` passed by the user, with the default options.\n     * @param {object|null} originalOptions The user can pass the original options (and not the one that are generated from the default settings and the various usability corrections), in order to add compatibility and conflicts checks.\n     * @throws Error This throws if the `userOptions` are not valid\n     */\n    static validate(userOptions, shouldExtendDefaultOptions = true, originalOptions = null) {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(userOptions) || !AutoNumericHelper.isObject(userOptions)) {\n            AutoNumericHelper.throwError(`The userOptions are invalid ; it should be a valid object, [${userOptions}] given.`);\n        }\n\n        const isOriginalOptionAnObject = AutoNumericHelper.isObject(originalOptions);\n        if (!isOriginalOptionAnObject && !AutoNumericHelper.isNull(originalOptions)) {\n            AutoNumericHelper.throwError(`The 'originalOptions' parameter is invalid ; it should either be a valid option object or \\`null\\`, [${userOptions}] given.`);\n        }\n\n        // If the user used old options, we convert them to new ones\n        if (!AutoNumericHelper.isNull(userOptions)) {\n            this._convertOldOptionsToNewOnes(userOptions);\n        }\n\n        // The user can choose if the `userOptions` has already been extended with the default options, or not\n        let options;\n        if (shouldExtendDefaultOptions) {\n            options = Object.assign({}, this.getDefaultConfig(), userOptions);\n        } else {\n            options = userOptions;\n        }\n\n        // First things first, we test that the `showWarnings` option is valid\n        if (!AutoNumericHelper.isTrueOrFalseString(options.showWarnings) && !AutoNumericHelper.isBoolean(options.showWarnings)) {\n            AutoNumericHelper.throwError(`The debug option 'showWarnings' is invalid ; it should be either 'true' or 'false', [${options.showWarnings}] given.`);\n        }\n\n        // Define the regular expressions needed for the following tests\n        const testPositiveInteger = /^[0-9]+$/;\n        const testNumericalCharacters = /[0-9]+/;\n        // const testFloatAndPossibleNegativeSign = /^-?[0-9]+(\\.?[0-9]+)$/;\n        const testFloatOrIntegerAndPossibleNegativeSign = /^-?[0-9]+(\\.?[0-9]+)?$/;\n        const testPositiveFloatOrInteger = /^[0-9]+(\\.?[0-9]+)?$/;\n\n        // Then tests the options individually\n        if (!AutoNumericHelper.isTrueOrFalseString(options.allowDecimalPadding) &&\n            !AutoNumericHelper.isBoolean(options.allowDecimalPadding) &&\n            options.allowDecimalPadding !== AutoNumeric.options.allowDecimalPadding.floats &&\n            !(AutoNumericHelper.isNumber(options.allowDecimalPadding) && options.allowDecimalPadding > 0)) {\n            AutoNumericHelper.throwError(`The decimal padding option 'allowDecimalPadding' is invalid ; it should either be \\`false\\`, \\`true\\`, \\`'floats'\\` or a positive integer superior to 0, [${options.allowDecimalPadding}] given.`);\n        }\n     \n        if (AutoNumericHelper.isNumber(options.allowDecimalPadding) && options.allowDecimalPadding > options.decimalPlaces) {\n            AutoNumericHelper.warning(`Setting 'allowDecimalPadding' to a number [${options.allowDecimalPadding}] superior to the current 'decimalPlaces' settings [${options.decimalPlaces}] is useless, since the padding will not be shown.`, options.showWarnings);\n        }\n\n        if ((options.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never ||\n            options.allowDecimalPadding === 'false') &&\n            (options.decimalPlaces !== AutoNumeric.options.decimalPlaces.none ||\n            options.decimalPlacesShownOnBlur !== AutoNumeric.options.decimalPlacesShownOnBlur.none ||\n            options.decimalPlacesShownOnFocus !== AutoNumeric.options.decimalPlacesShownOnFocus.none)) {\n            AutoNumericHelper.warning(`Setting 'allowDecimalPadding' to [${options.allowDecimalPadding}] will override the current 'decimalPlaces*' settings [${options.decimalPlaces}, ${options.decimalPlacesShownOnBlur} and ${options.decimalPlacesShownOnFocus}].`, options.showWarnings);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.alwaysAllowDecimalCharacter) &&\n            !AutoNumericHelper.isBoolean(options.alwaysAllowDecimalCharacter)) {\n            AutoNumericHelper.throwError(`The option 'alwaysAllowDecimalCharacter' is invalid ; it should either be \\`true\\` or \\`false\\`, [${options.alwaysAllowDecimalCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.caretPositionOnFocus) && !AutoNumericHelper.isInArray(options.caretPositionOnFocus, [\n            AutoNumeric.options.caretPositionOnFocus.start,\n            AutoNumeric.options.caretPositionOnFocus.end,\n            AutoNumeric.options.caretPositionOnFocus.decimalLeft,\n            AutoNumeric.options.caretPositionOnFocus.decimalRight,\n        ])) {\n            AutoNumericHelper.throwError(`The display on empty string option 'caretPositionOnFocus' is invalid ; it should either be \\`null\\`, 'focus', 'press', 'always' or 'zero', [${options.caretPositionOnFocus}] given.`);\n        }\n\n        // Special case here for `caretPositionOnFocus` and `selectOnFocus` where we need to check the original non-tempered version of the options in order to check for conflicts, since using the default settings remove those and would prevent us warning the user that his option object is not correct.\n        let optionsToUse;\n        if (isOriginalOptionAnObject) {\n            optionsToUse = originalOptions;\n        } else {\n            optionsToUse = this._correctCaretPositionOnFocusAndSelectOnFocusOptions(userOptions);\n        }\n\n        if (!AutoNumericHelper.isNull(optionsToUse) &&\n            ((optionsToUse.caretPositionOnFocus !== AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition &&\n            optionsToUse.selectOnFocus === AutoNumeric.options.selectOnFocus.select))) {\n            AutoNumericHelper.warning(`The 'selectOnFocus' option is set to 'select', which is in conflict with the 'caretPositionOnFocus' which is set to '${optionsToUse.caretPositionOnFocus}'. As a result, if this has been called when instantiating an AutoNumeric object, the 'selectOnFocus' option is forced to 'doNotSelect'.`, options.showWarnings);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.digitGroupSeparator, [\n            AutoNumeric.options.digitGroupSeparator.comma,\n            AutoNumeric.options.digitGroupSeparator.dot,\n            AutoNumeric.options.digitGroupSeparator.normalSpace,\n            AutoNumeric.options.digitGroupSeparator.thinSpace,\n            AutoNumeric.options.digitGroupSeparator.narrowNoBreakSpace,\n            AutoNumeric.options.digitGroupSeparator.noBreakSpace,\n            AutoNumeric.options.digitGroupSeparator.noSeparator,\n            AutoNumeric.options.digitGroupSeparator.apostrophe,\n            AutoNumeric.options.digitGroupSeparator.arabicThousandsSeparator,\n            AutoNumeric.options.digitGroupSeparator.dotAbove,\n            AutoNumeric.options.digitGroupSeparator.privateUseTwo,\n        ])) {\n            AutoNumericHelper.throwError(`The thousand separator character option 'digitGroupSeparator' is invalid ; it should be ',', '.', '٬', '˙', \"'\", '\\u0092', ' ', '\\u2009', '\\u202f', '\\u00a0' or empty (''), [${options.digitGroupSeparator}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.showOnlyNumbersOnFocus) && !AutoNumericHelper.isBoolean(options.showOnlyNumbersOnFocus)) {\n            AutoNumericHelper.throwError(`The 'showOnlyNumbersOnFocus' option is invalid ; it should be either 'true' or 'false', [${options.showOnlyNumbersOnFocus}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.digitalGroupSpacing, [\n            AutoNumeric.options.digitalGroupSpacing.two,\n            AutoNumeric.options.digitalGroupSpacing.twoThree,\n            AutoNumeric.options.digitalGroupSpacing.twoScaled,\n            AutoNumeric.options.digitalGroupSpacing.three,\n            AutoNumeric.options.digitalGroupSpacing.four,\n        ]) && !(options.digitalGroupSpacing >= 2 && options.digitalGroupSpacing <= 4)) {\n            AutoNumericHelper.throwError(`The grouping separator option for thousands 'digitalGroupSpacing' is invalid ; it should be '2', '2t', '2s', '3', or '4', [${options.digitalGroupSpacing}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.decimalCharacter, [\n            AutoNumeric.options.decimalCharacter.comma,\n            AutoNumeric.options.decimalCharacter.dot,\n            AutoNumeric.options.decimalCharacter.middleDot,\n            AutoNumeric.options.decimalCharacter.arabicDecimalSeparator,\n            AutoNumeric.options.decimalCharacter.decimalSeparatorKeySymbol,\n        ])) {\n            AutoNumericHelper.throwError(`The decimal separator character option 'decimalCharacter' is invalid ; it should be '.', ',', '·', '⎖' or '٫', [${options.decimalCharacter}] given.`);\n        }\n\n        // Checks if the decimal and thousand characters are the same\n        if (options.decimalCharacter === options.digitGroupSeparator) {\n            AutoNumericHelper.throwError(`autoNumeric will not function properly when the decimal character 'decimalCharacter' [${options.decimalCharacter}] and the thousand separator 'digitGroupSeparator' [${options.digitGroupSeparator}] are the same character.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.decimalCharacterAlternative) && !AutoNumericHelper.isString(options.decimalCharacterAlternative)) {\n            AutoNumericHelper.throwError(`The alternate decimal separator character option 'decimalCharacterAlternative' is invalid ; it should be a string, [${options.decimalCharacterAlternative}] given.`);\n        }\n\n        if (options.currencySymbol !== '' && !AutoNumericHelper.isString(options.currencySymbol)) {\n            AutoNumericHelper.throwError(`The currency symbol option 'currencySymbol' is invalid ; it should be a string, [${options.currencySymbol}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.currencySymbolPlacement, [\n            AutoNumeric.options.currencySymbolPlacement.prefix,\n            AutoNumeric.options.currencySymbolPlacement.suffix,\n        ])) {\n            AutoNumericHelper.throwError(`The placement of the currency sign option 'currencySymbolPlacement' is invalid ; it should either be 'p' (prefix) or 's' (suffix), [${options.currencySymbolPlacement}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.negativePositiveSignPlacement, [\n            AutoNumeric.options.negativePositiveSignPlacement.prefix,\n            AutoNumeric.options.negativePositiveSignPlacement.suffix,\n            AutoNumeric.options.negativePositiveSignPlacement.left,\n            AutoNumeric.options.negativePositiveSignPlacement.right,\n            AutoNumeric.options.negativePositiveSignPlacement.none,\n        ])) {\n            AutoNumericHelper.throwError(`The placement of the negative sign option 'negativePositiveSignPlacement' is invalid ; it should either be 'p' (prefix), 's' (suffix), 'l' (left), 'r' (right) or 'null', [${options.negativePositiveSignPlacement}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.showPositiveSign) && !AutoNumericHelper.isBoolean(options.showPositiveSign)) {\n            AutoNumericHelper.throwError(`The show positive sign option 'showPositiveSign' is invalid ; it should be either 'true' or 'false', [${options.showPositiveSign}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.suffixText) || (options.suffixText !== '' && (AutoNumericHelper.isNegative(options.suffixText, options.negativeSignCharacter) || testNumericalCharacters.test(options.suffixText)))) {\n            AutoNumericHelper.throwError(`The additional suffix option 'suffixText' is invalid ; it should not contains the negative sign '${options.negativeSignCharacter}' nor any numerical characters, [${options.suffixText}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.negativeSignCharacter) ||\n            options.negativeSignCharacter.length !== 1 ||\n            AutoNumericHelper.isUndefinedOrNullOrEmpty(options.negativeSignCharacter) ||\n            testNumericalCharacters.test(options.negativeSignCharacter)) {\n            AutoNumericHelper.throwError(`The negative sign character option 'negativeSignCharacter' is invalid ; it should be a single character, and cannot be any numerical characters, [${options.negativeSignCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.positiveSignCharacter) ||\n            options.positiveSignCharacter.length !== 1 ||\n            AutoNumericHelper.isUndefinedOrNullOrEmpty(options.positiveSignCharacter) ||\n            testNumericalCharacters.test(options.positiveSignCharacter)) {\n            AutoNumericHelper.throwError(`The positive sign character option 'positiveSignCharacter' is invalid ; it should be a single character, and cannot be any numerical characters, [${options.positiveSignCharacter}] given.\\nIf you want to show the positive sign character, you need to set the \\`showPositiveSign\\` option to \\`true\\`.`);\n        }\n\n        if (options.negativeSignCharacter === options.positiveSignCharacter) {\n            AutoNumericHelper.throwError(`The positive 'positiveSignCharacter' and negative 'negativeSignCharacter' sign characters cannot be identical ; [${options.negativeSignCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.negativePositiveSignBehavior) && !AutoNumericHelper.isBoolean(options.negativePositiveSignBehavior)) {\n            AutoNumericHelper.throwError(`The option 'negativePositiveSignBehavior' is invalid ; it should be either 'true' or 'false', [${options.negativePositiveSignBehavior}] given.`);\n        }\n\n        const [leftBracket, rightBracket] = AutoNumericHelper.isNull(options.negativeBracketsTypeOnBlur)?['', '']:options.negativeBracketsTypeOnBlur.split(',');\n        if (AutoNumericHelper.contains(options.digitGroupSeparator, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacter, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacterAlternative, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(leftBracket, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(rightBracket, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(options.suffixText, options.negativeSignCharacter)) {\n            AutoNumericHelper.throwError(`The negative sign character option 'negativeSignCharacter' is invalid ; it should not be equal or a part of the digit separator, the decimal character, the decimal character alternative, the negative brackets or the suffix text, [${options.negativeSignCharacter}] given.`);\n        }\n\n        if (AutoNumericHelper.contains(options.digitGroupSeparator, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacter, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacterAlternative, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(leftBracket, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(rightBracket, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(options.suffixText, options.positiveSignCharacter)) {\n            AutoNumericHelper.throwError(`The positive sign character option 'positiveSignCharacter' is invalid ; it should not be equal or a part of the digit separator, the decimal character, the decimal character alternative, the negative brackets or the suffix text, [${options.positiveSignCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.overrideMinMaxLimits) && !AutoNumericHelper.isInArray(options.overrideMinMaxLimits, [\n            AutoNumeric.options.overrideMinMaxLimits.ceiling,\n            AutoNumeric.options.overrideMinMaxLimits.floor,\n            AutoNumeric.options.overrideMinMaxLimits.ignore,\n            AutoNumeric.options.overrideMinMaxLimits.invalid,\n        ])) {\n            AutoNumericHelper.throwError(`The override min & max limits option 'overrideMinMaxLimits' is invalid ; it should either be 'ceiling', 'floor', 'ignore' or 'invalid', [${options.overrideMinMaxLimits}] given.`);\n        }\n\n        if ((options.overrideMinMaxLimits !== AutoNumeric.options.overrideMinMaxLimits.invalid && options.overrideMinMaxLimits !== AutoNumeric.options.overrideMinMaxLimits.ignore) &&\n            (options.minimumValue > 0 || options.maximumValue < 0)) {\n            AutoNumericHelper.warning(`You've set a \\`minimumValue\\` or a \\`maximumValue\\` excluding the value \\`0\\`. AutoNumeric will force the users to always have a valid value in the input, hence preventing them to clear the field. If you want to allow for temporary invalid values (i.e. out-of-range), you should use the 'invalid' option for the 'overrideMinMaxLimits' setting.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.maximumValue) || !testFloatOrIntegerAndPossibleNegativeSign.test(options.maximumValue)) {\n            AutoNumericHelper.throwError(`The maximum possible value option 'maximumValue' is invalid ; it should be a string that represents a positive or negative number, [${options.maximumValue}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.minimumValue) || !testFloatOrIntegerAndPossibleNegativeSign.test(options.minimumValue)) {\n            AutoNumericHelper.throwError(`The minimum possible value option 'minimumValue' is invalid ; it should be a string that represents a positive or negative number, [${options.minimumValue}] given.`);\n        }\n\n        if (parseFloat(options.minimumValue) > parseFloat(options.maximumValue)) {\n            AutoNumericHelper.throwError(`The minimum possible value option is greater than the maximum possible value option ; 'minimumValue' [${options.minimumValue}] should be smaller than 'maximumValue' [${options.maximumValue}].`);\n        }\n\n        if (!((AutoNumericHelper.isInt(options.decimalPlaces) && options.decimalPlaces >= 0) || // If integer option\n            (AutoNumericHelper.isString(options.decimalPlaces) && testPositiveInteger.test(options.decimalPlaces))) // If string option\n        ) {\n            AutoNumericHelper.throwError(`The number of decimal places option 'decimalPlaces' is invalid ; it should be a positive integer, [${options.decimalPlaces}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isNull(options.decimalPlacesRawValue) ||\n            (AutoNumericHelper.isInt(options.decimalPlacesRawValue) && options.decimalPlacesRawValue >= 0) || // If integer option\n            (AutoNumericHelper.isString(options.decimalPlacesRawValue) && testPositiveInteger.test(options.decimalPlacesRawValue))) // If string option\n        ) {\n            AutoNumericHelper.throwError(`The number of decimal places for the raw value option 'decimalPlacesRawValue' is invalid ; it should be a positive integer or \\`null\\`, [${options.decimalPlacesRawValue}] given.`);\n        }\n\n        // Checks if the number of decimal places for the raw value is lower than the `decimalPlaces`, `decimalPlacesShownOnFocus` and/or `decimalPlacesShownOnBlur` options\n        this._validateDecimalPlacesRawValue(options);\n\n        if (!AutoNumericHelper.isNull(options.decimalPlacesShownOnFocus) &&\n            !testPositiveInteger.test(String(options.decimalPlacesShownOnFocus))) {\n            AutoNumericHelper.throwError(`The number of expanded decimal places option 'decimalPlacesShownOnFocus' is invalid ; it should be a positive integer or \\`null\\`, [${options.decimalPlacesShownOnFocus}] given.`);\n        }\n\n        // Checks if the extended decimal places \"decimalPlacesShownOnFocus\" is greater than the decimal places number `decimalPlaces`\n        if (!AutoNumericHelper.isNull(options.decimalPlacesShownOnFocus) && Number(options.decimalPlaces) > Number(options.decimalPlacesShownOnFocus)) {\n            AutoNumericHelper.warning(`The extended decimal places 'decimalPlacesShownOnFocus' [${options.decimalPlacesShownOnFocus}] should be greater than the 'decimalPlaces' [${options.decimalPlaces}] value. Currently, this will limit the ability of your user to manually change some of the decimal places. Do you really want to do that?`, options.showWarnings);\n        }\n\n        if (!AutoNumericHelper.isNull(options.divisorWhenUnfocused) &&\n            !testPositiveFloatOrInteger.test(options.divisorWhenUnfocused) ||\n            options.divisorWhenUnfocused === 0 || options.divisorWhenUnfocused === '0' ||\n            options.divisorWhenUnfocused === 1 || options.divisorWhenUnfocused === '1') {\n            AutoNumericHelper.throwError(`The divisor option 'divisorWhenUnfocused' is invalid ; it should be a positive number higher than one, preferably an integer, [${options.divisorWhenUnfocused}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.decimalPlacesShownOnBlur) && !testPositiveInteger.test(options.decimalPlacesShownOnBlur)) {\n            AutoNumericHelper.throwError(`The number of decimals shown when unfocused option 'decimalPlacesShownOnBlur' is invalid ; it should be a positive integer or \\`null\\`, [${options.decimalPlacesShownOnBlur}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.symbolWhenUnfocused) && !AutoNumericHelper.isString(options.symbolWhenUnfocused)) {\n            AutoNumericHelper.throwError(`The symbol to show when unfocused option 'symbolWhenUnfocused' is invalid ; it should be a string, [${options.symbolWhenUnfocused}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.saveValueToSessionStorage) && !AutoNumericHelper.isBoolean(options.saveValueToSessionStorage)) {\n            AutoNumericHelper.throwError(`The save to session storage option 'saveValueToSessionStorage' is invalid ; it should be either 'true' or 'false', [${options.saveValueToSessionStorage}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.onInvalidPaste, [\n            AutoNumeric.options.onInvalidPaste.error,\n            AutoNumeric.options.onInvalidPaste.ignore,\n            AutoNumeric.options.onInvalidPaste.clamp,\n            AutoNumeric.options.onInvalidPaste.truncate,\n            AutoNumeric.options.onInvalidPaste.replace,\n        ])) {\n            AutoNumericHelper.throwError(`The paste behavior option 'onInvalidPaste' is invalid ; it should either be 'error', 'ignore', 'clamp', 'truncate' or 'replace' (cf. documentation), [${options.onInvalidPaste}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.roundingMethod, [\n            AutoNumeric.options.roundingMethod.halfUpSymmetric,\n            AutoNumeric.options.roundingMethod.halfUpAsymmetric,\n            AutoNumeric.options.roundingMethod.halfDownSymmetric,\n            AutoNumeric.options.roundingMethod.halfDownAsymmetric,\n            AutoNumeric.options.roundingMethod.halfEvenBankersRounding,\n            AutoNumeric.options.roundingMethod.upRoundAwayFromZero,\n            AutoNumeric.options.roundingMethod.downRoundTowardZero,\n            AutoNumeric.options.roundingMethod.toCeilingTowardPositiveInfinity,\n            AutoNumeric.options.roundingMethod.toFloorTowardNegativeInfinity,\n            AutoNumeric.options.roundingMethod.toNearest05,\n            AutoNumeric.options.roundingMethod.toNearest05Alt,\n            AutoNumeric.options.roundingMethod.upToNext05,\n            AutoNumeric.options.roundingMethod.downToNext05,\n        ])) {\n            AutoNumericHelper.throwError(`The rounding method option 'roundingMethod' is invalid ; it should either be 'S', 'A', 's', 'a', 'B', 'U', 'D', 'C', 'F', 'N05', 'CHF', 'U05' or 'D05' (cf. documentation), [${options.roundingMethod}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.negativeBracketsTypeOnBlur) && !AutoNumericHelper.isInArray(options.negativeBracketsTypeOnBlur, [\n            AutoNumeric.options.negativeBracketsTypeOnBlur.parentheses,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.brackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.chevrons,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.curlyBraces,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.angleBrackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.japaneseQuotationMarks,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.halfBrackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.whiteSquareBrackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.quotationMarks,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.guillemets,\n        ])) {\n            AutoNumericHelper.throwError(`The brackets for negative values option 'negativeBracketsTypeOnBlur' is invalid ; it should either be '(,)', '[,]', '<,>', '{,}', '〈,〉', '｢,｣', '⸤,⸥', '⟦,⟧', '‹,›' or '«,»', [${options.negativeBracketsTypeOnBlur}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isString(options.emptyInputBehavior) || AutoNumericHelper.isNumber(options.emptyInputBehavior)) ||\n            !(AutoNumericHelper.isInArray(options.emptyInputBehavior, [\n                AutoNumeric.options.emptyInputBehavior.focus,\n                AutoNumeric.options.emptyInputBehavior.press,\n                AutoNumeric.options.emptyInputBehavior.always,\n                AutoNumeric.options.emptyInputBehavior.min,\n                AutoNumeric.options.emptyInputBehavior.max,\n                AutoNumeric.options.emptyInputBehavior.zero,\n                AutoNumeric.options.emptyInputBehavior.null,\n            ]) || testFloatOrIntegerAndPossibleNegativeSign.test(options.emptyInputBehavior))) {\n            AutoNumericHelper.throwError(`The display on empty string option 'emptyInputBehavior' is invalid ; it should either be 'focus', 'press', 'always', 'min', 'max', 'zero', 'null', a number, or a string that represents a number, [${options.emptyInputBehavior}] given.`);\n        }\n\n        if (options.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.zero &&\n            (options.minimumValue > 0 || options.maximumValue < 0)) {\n            AutoNumericHelper.throwError(`The 'emptyInputBehavior' option is set to 'zero', but this value is outside of the range defined by 'minimumValue' and 'maximumValue' [${options.minimumValue}, ${options.maximumValue}].`);\n        }\n\n        if (testFloatOrIntegerAndPossibleNegativeSign.test(String(options.emptyInputBehavior))) {\n            if (!this._isWithinRangeWithOverrideOption(options.emptyInputBehavior, options)) {\n                AutoNumericHelper.throwError(`The 'emptyInputBehavior' option is set to a number or a string that represents a number, but its value [${options.emptyInputBehavior}] is outside of the range defined by the 'minimumValue' and 'maximumValue' options [${options.minimumValue}, ${options.maximumValue}].`);\n            }\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.eventBubbles) && !AutoNumericHelper.isBoolean(options.eventBubbles)) {\n            AutoNumericHelper.throwError(`The event bubbles option 'eventBubbles' is invalid ; it should be either 'true' or 'false', [${options.eventBubbles}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.eventIsCancelable) && !AutoNumericHelper.isBoolean(options.eventIsCancelable)) {\n            AutoNumericHelper.throwError(`The event is cancelable option 'eventIsCancelable' is invalid ; it should be either 'true' or 'false', [${options.eventIsCancelable}] given.`);\n        }\n\n        if (AutoNumericHelper.isBoolean(options.invalidClass) || !/^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$/.test(options.invalidClass)) { //TODO Make sure this covers all the CSS class names\n            AutoNumericHelper.throwError(`The name of the 'invalidClass' option is not a valid CSS class name ; it should not be empty, and should follow the '^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$' regex, [${options.invalidClass}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.leadingZero, [\n            AutoNumeric.options.leadingZero.allow,\n            AutoNumeric.options.leadingZero.deny,\n            AutoNumeric.options.leadingZero.keep,\n        ])) {\n            AutoNumericHelper.throwError(`The leading zero behavior option 'leadingZero' is invalid ; it should either be 'allow', 'deny' or 'keep', [${options.leadingZero}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.formatOnPageLoad) && !AutoNumericHelper.isBoolean(options.formatOnPageLoad)) {\n            AutoNumericHelper.throwError(`The format on initialization option 'formatOnPageLoad' is invalid ; it should be either 'true' or 'false', [${options.formatOnPageLoad}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.formulaMode) && !AutoNumericHelper.isBoolean(options.formulaMode)) {\n            AutoNumericHelper.throwError(`The formula mode option 'formulaMode' is invalid ; it should be either 'true' or 'false', [${options.formulaMode}] given.`);\n        }\n\n        if (!testPositiveInteger.test(options.historySize) || options.historySize === 0) {\n            AutoNumericHelper.throwError(`The history size option 'historySize' is invalid ; it should be a positive integer, [${options.historySize}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.selectNumberOnly) && !AutoNumericHelper.isBoolean(options.selectNumberOnly)) {\n            AutoNumericHelper.throwError(`The select number only option 'selectNumberOnly' is invalid ; it should be either 'true' or 'false', [${options.selectNumberOnly}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.selectOnFocus) && !AutoNumericHelper.isBoolean(options.selectOnFocus)) {\n            AutoNumericHelper.throwError(`The select on focus option 'selectOnFocus' is invalid ; it should be either 'true' or 'false', [${options.selectOnFocus}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.defaultValueOverride) && (options.defaultValueOverride !== '' && !testFloatOrIntegerAndPossibleNegativeSign.test(options.defaultValueOverride))) {\n            AutoNumericHelper.throwError(`The unformatted default value option 'defaultValueOverride' is invalid ; it should be a string that represents a positive or negative number, [${options.defaultValueOverride}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.unformatOnSubmit) && !AutoNumericHelper.isBoolean(options.unformatOnSubmit)) {\n            AutoNumericHelper.throwError(`The remove formatting on submit option 'unformatOnSubmit' is invalid ; it should be either 'true' or 'false', [${options.unformatOnSubmit}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.valuesToStrings) &&\n            !(AutoNumericHelper.isObject(options.valuesToStrings))) {\n            AutoNumericHelper.throwError(`The option 'valuesToStrings' is invalid ; it should be an object, ideally with 'key -> value' entries, [${options.valuesToStrings}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.outputFormat) && !AutoNumericHelper.isInArray(options.outputFormat, [\n            AutoNumeric.options.outputFormat.string,\n            AutoNumeric.options.outputFormat.number,\n            AutoNumeric.options.outputFormat.dot,\n            AutoNumeric.options.outputFormat.negativeDot,\n            AutoNumeric.options.outputFormat.comma,\n            AutoNumeric.options.outputFormat.negativeComma,\n            AutoNumeric.options.outputFormat.dotNegative,\n            AutoNumeric.options.outputFormat.commaNegative,\n        ])) {\n            AutoNumericHelper.throwError(`The custom locale format option 'outputFormat' is invalid ; it should either be null, 'string', 'number', '.', '-.', ',', '-,', '.-' or ',-', [${options.outputFormat}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.isCancellable) && !AutoNumericHelper.isBoolean(options.isCancellable)) {\n            AutoNumericHelper.throwError(`The cancellable behavior option 'isCancellable' is invalid ; it should be either 'true' or 'false', [${options.isCancellable}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.modifyValueOnUpDownArrow) && !AutoNumericHelper.isBoolean(options.modifyValueOnUpDownArrow)) {\n            AutoNumericHelper.throwError(`The increment/decrement on up and down arrow keys 'modifyValueOnUpDownArrow' is invalid ; it should be either 'true' or 'false', [${options.modifyValueOnUpDownArrow}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.modifyValueOnWheel) && !AutoNumericHelper.isBoolean(options.modifyValueOnWheel)) {\n            AutoNumericHelper.throwError(`The increment/decrement on mouse wheel option 'modifyValueOnWheel' is invalid ; it should be either 'true' or 'false', [${options.modifyValueOnWheel}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.watchExternalChanges) && !AutoNumericHelper.isBoolean(options.watchExternalChanges)) {\n            AutoNumericHelper.throwError(`The option 'watchExternalChanges' is invalid ; it should be either 'true' or 'false', [${options.watchExternalChanges}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.wheelOn, [\n            AutoNumeric.options.wheelOn.focus,\n            AutoNumeric.options.wheelOn.hover,\n        ])) {\n            AutoNumericHelper.throwError(`The wheel behavior option 'wheelOn' is invalid ; it should either be 'focus' or 'hover', [${options.wheelOn}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isString(options.upDownStep) || AutoNumericHelper.isNumber(options.upDownStep)) ||\n            (options.upDownStep !== 'progressive' && !testPositiveFloatOrInteger.test(options.upDownStep)) ||\n            Number(options.upDownStep) === 0) {\n            // A step equal to '0' is rejected\n            AutoNumericHelper.throwError(`The up/down arrow step value option 'upDownStep' is invalid ; it should either be the string 'progressive', or a number or a string that represents a positive number (excluding zero), [${options.upDownStep}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isString(options.wheelStep) || AutoNumericHelper.isNumber(options.wheelStep)) ||\n            (options.wheelStep !== 'progressive' && !testPositiveFloatOrInteger.test(options.wheelStep)) ||\n            Number(options.wheelStep) === 0) {\n            // A step equal to '0' is rejected\n            AutoNumericHelper.throwError(`The wheel step value option 'wheelStep' is invalid ; it should either be the string 'progressive', or a number or a string that represents a positive number (excluding zero), [${options.wheelStep}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.serializeSpaces, [\n            AutoNumeric.options.serializeSpaces.plus,\n            AutoNumeric.options.serializeSpaces.percent,\n        ])) {\n            AutoNumericHelper.throwError(`The space replacement character option 'serializeSpaces' is invalid ; it should either be '+' or '%20', [${options.serializeSpaces}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.noEventListeners) && !AutoNumericHelper.isBoolean(options.noEventListeners)) {\n            AutoNumericHelper.throwError(`The option 'noEventListeners' that prevent the creation of event listeners is invalid ; it should be either 'true' or 'false', [${options.noEventListeners}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.styleRules) &&\n            !(AutoNumericHelper.isObject(options.styleRules) &&\n            ((Object.prototype.hasOwnProperty.call(options.styleRules, 'positive') ||\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'negative') ||\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'ranges') ||\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'userDefined'))))) {\n            AutoNumericHelper.throwError(`The option 'styleRules' is invalid ; it should be a correctly structured object, with one or more 'positive', 'negative', 'ranges' or 'userDefined' attributes, [${options.styleRules}] given.`);\n        }\n\n        // Deeper tests of the `styleRules` object : Check that the callback, if defined, is a function\n        if (!AutoNumericHelper.isNull(options.styleRules) &&\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'userDefined') &&\n            !AutoNumericHelper.isNull(options.styleRules.userDefined)) {\n            options.styleRules.userDefined.forEach(rule => {\n                if (Object.prototype.hasOwnProperty.call(rule, 'callback') && !AutoNumericHelper.isFunction(rule.callback)) {\n                    AutoNumericHelper.throwError(`The callback defined in the \\`userDefined\\` attribute is not a function, ${typeof rule.callback} given.`);\n                }\n            });\n        }\n\n        if (!AutoNumericHelper.isNull(options.rawValueDivisor) &&\n            !testPositiveFloatOrInteger.test(options.rawValueDivisor) ||\n            options.rawValueDivisor === 0 || options.rawValueDivisor === '0' ||\n            options.rawValueDivisor === 1 || options.rawValueDivisor === '1') {\n            AutoNumericHelper.throwError(`The raw value divisor option 'rawValueDivisor' is invalid ; it should be a positive number higher than one, preferably an integer, [${options.rawValueDivisor}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.readOnly) && !AutoNumericHelper.isBoolean(options.readOnly)) {\n            AutoNumericHelper.throwError(`The option 'readOnly' is invalid ; it should be either 'true' or 'false', [${options.readOnly}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.unformatOnHover) && !AutoNumericHelper.isBoolean(options.unformatOnHover)) {\n            AutoNumericHelper.throwError(`The option 'unformatOnHover' is invalid ; it should be either 'true' or 'false', [${options.unformatOnHover}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.failOnUnknownOption) && !AutoNumericHelper.isBoolean(options.failOnUnknownOption)) {\n            AutoNumericHelper.throwError(`The debug option 'failOnUnknownOption' is invalid ; it should be either 'true' or 'false', [${options.failOnUnknownOption}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.createLocalList) && !AutoNumericHelper.isBoolean(options.createLocalList)) {\n            AutoNumericHelper.throwError(`The debug option 'createLocalList' is invalid ; it should be either 'true' or 'false', [${options.createLocalList}] given.`);\n        }\n    }\n\n    /**\n     * Check the `decimalPlaces*` options and output the relevant warnings if some of those will get overwritten during the initialization or settings update.\n     *\n     * @param {object} options\n     * @private\n     */\n    static _validateDecimalPlacesRawValue(options) {\n        // Checks if the number of decimal places for the raw value is lower than the `decimalPlaces`, `decimalPlacesShownOnFocus` and/or `decimalPlacesShownOnBlur` options\n        if (!AutoNumericHelper.isNull(options.decimalPlacesRawValue)) {\n            if (options.decimalPlacesRawValue < options.decimalPlaces) {\n                AutoNumericHelper.warning(`The number of decimal places to store in the raw value [${options.decimalPlacesRawValue}] is lower than the ones to display [${options.decimalPlaces}]. This will likely confuse your users.\nTo solve that, you'd need to either set \\`decimalPlacesRawValue\\` to \\`null\\`, or set a number of decimal places for the raw value equal of bigger than \\`decimalPlaces\\`.`, options.showWarnings);\n            }\n\n            if (options.decimalPlacesRawValue < options.decimalPlacesShownOnFocus) {\n                AutoNumericHelper.warning(`The number of decimal places to store in the raw value [${options.decimalPlacesRawValue}] is lower than the ones shown on focus [${options.decimalPlacesShownOnFocus}]. This will likely confuse your users.\nTo solve that, you'd need to either set \\`decimalPlacesRawValue\\` to \\`null\\`, or set a number of decimal places for the raw value equal of bigger than \\`decimalPlacesShownOnFocus\\`.`, options.showWarnings);\n            }\n\n            if (options.decimalPlacesRawValue < options.decimalPlacesShownOnBlur) {\n                AutoNumericHelper.warning(`The number of decimal places to store in the raw value [${options.decimalPlacesRawValue}] is lower than the ones shown when unfocused [${options.decimalPlacesShownOnBlur}]. This will likely confuse your users.\nTo solve that, you'd need to either set \\`decimalPlacesRawValue\\` to \\`null\\`, or set a number of decimal places for the raw value equal of bigger than \\`decimalPlacesShownOnBlur\\`.`, options.showWarnings);\n            }\n        }\n    }\n\n    /**\n     * Return `true` if the settings/options are valid, `false` otherwise.\n     *\n     * @param {object} options\n     * @returns {boolean}\n     */\n    static areSettingsValid(options) {\n        let isValid = true;\n        try {\n            this.validate(options, true);\n        } catch (error) {\n            isValid = false;\n        }\n\n        return isValid;\n    }\n\n    /**\n     * Return the default autoNumeric settings.\n     *\n     * @returns {object}\n     */\n    static getDefaultConfig() {\n        return AutoNumeric.defaultSettings;\n    }\n\n    /**\n     * Return all the predefined language options in one object.\n     * You can also access a specific language object directly by using `AutoNumeric.getPredefinedOptions().French` for instance.\n     *\n     * @returns {object}\n     */\n    static getPredefinedOptions() {\n        return AutoNumeric.predefinedOptions;\n    }\n\n    /**\n     * Analyse the given array `options` and return a single 'merged' option objet.\n     * `options` can be `null`, or an array of an option objects, or an array containing another array of option objects / strings (pre-defined option names)\n     *\n     * @param {null|Array<object|string|Array<string|object>>} options\n     * @returns {null|object}\n     * @private\n     */\n    static _generateOptionsObjectFromOptionsArray(options) {\n        let optionsResult;\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(options) || options.length === 0) {\n            optionsResult = null;\n        } else {\n            optionsResult = {};\n            if (options.length === 1 && Array.isArray(options[0])) {\n                options[0].forEach(optionObject => {\n                    // Using `_getOptionObject()` allows using pre-defined names in the `options` array\n                    Object.assign(optionsResult, this._getOptionObject(optionObject));\n                });\n            } else if (options.length >= 1) {\n                options.forEach(optionObject => {\n                    Object.assign(optionsResult, this._getOptionObject(optionObject));\n                });\n            }\n        }\n\n        return optionsResult;\n    }\n\n    /**\n     * Format the given number (or numeric string) with the given options. This returns the formatted value as a string.\n     * This can also format the given DOM element value with the given options and returns the formatted value as a string.\n     * Note : This function does *not* update that element value with the newly formatted value.\n     * This basically allows to get the formatted value without first having to initialize an AutoNumeric object.\n     *\n     * @param {number|string|HTMLElement|HTMLInputElement} numericStringOrDomElement A number, or a string that represent a javascript number, or a DOM element\n     * @param {object|null} options Multiple objects can be passed, the latter overwriting the settings from the former ones\n     * @returns {string|null}\n     */\n    static format(numericStringOrDomElement, ...options) {\n        if (AutoNumericHelper.isUndefined(numericStringOrDomElement) || numericStringOrDomElement === null) {\n            return null;\n        }\n\n        // Retrieve the value to format\n        let value;\n        if (AutoNumericHelper.isElement(numericStringOrDomElement)) {\n            value = AutoNumericHelper.getElementValue(numericStringOrDomElement);\n        } else {\n            value = numericStringOrDomElement;\n        }\n\n        if (!AutoNumericHelper.isString(value) && !AutoNumericHelper.isNumber(value)) {\n            AutoNumericHelper.throwError(`The value \"${value}\" being \"set\" is not numeric and therefore cannot be used appropriately.`);\n        }\n\n        // Manage options\n        const optionsToUse = this._generateOptionsObjectFromOptionsArray(options);\n\n        // Initiate a very basic settings object\n        const settings = Object.assign({}, this.getDefaultConfig(), optionsToUse);\n        settings.isNegativeSignAllowed = value < 0;\n        settings.isPositiveSignAllowed = value >= 0;\n        this._setBrackets(settings);\n\n        const regex = {};\n        this._cachesUsualRegularExpressions(settings, regex); // This is needed by `_stripAllNonNumberCharactersExceptCustomDecimalChar` that uses those regex\n\n        // Check the validity of the `value` parameter\n        // Convert the value to a numeric string, stripping unnecessary characters in the process\n        let valueString = this._toNumericValue(value, settings);\n        if (isNaN(Number(valueString))) {\n            AutoNumericHelper.throwError(`The value [${valueString}] that you are trying to format is not a recognized number.`);\n        }\n\n        // Check if the given valueString is valid\n        if (!this._isWithinRangeWithOverrideOption(valueString, settings)) {\n            // Throw a custom event\n            AutoNumericHelper.triggerEvent(AutoNumeric.events.formatted, document, {\n                oldValue   : null,\n                newValue   : null,\n                oldRawValue: null,\n                newRawValue: null,\n                isPristine : null,\n                error      : 'Range test failed',\n                aNElement  : null,\n            }, true, true);\n            AutoNumericHelper.throwError(`The value [${valueString}] being set falls outside of the minimumValue [${settings.minimumValue}] and maximumValue [${settings.maximumValue}] range set for this element`);\n        }\n\n        // Directly format any `valuesToStrings` values, if found\n        if (settings.valuesToStrings && this._checkValuesToStringsSettings(value, settings)) {\n            return settings.valuesToStrings[value];\n        }\n\n        // Generate the `negativePositiveSignPlacement` option as needed\n        this._correctNegativePositiveSignPlacementOption(settings);\n        // Calculate the needed decimal places\n        this._calculateDecimalPlacesOnInit(settings);\n\n        // Multiply the raw value with `rawValueDivisor` if defined\n        if ((!AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.rawValueDivisor) && settings.rawValueDivisor !== 0) && // Only divide if the `rawValueDivisor` option is set\n            valueString !== '' && valueString !== null) { // Do not modify the `valueString` if it's an empty string or null\n            valueString *= settings.rawValueDivisor;\n        }\n\n        // Everything is ok, proceed to rounding, formatting and grouping\n        valueString = this._roundFormattedValueShownOnFocus(valueString, settings);\n        valueString = this._modifyNegativeSignAndDecimalCharacterForFormattedValue(valueString, settings);\n        valueString = this._addGroupSeparators(valueString, settings, false, valueString);\n\n        return valueString;\n    }\n\n    /**\n     * Format the given DOM element value, and set the resulting value back as the element value.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @param {object} options\n     * @returns {string|null}\n     */\n    static formatAndSet(domElement, options = null) { //FIXME test this\n        const formattedValue = this.format(domElement, options);\n        AutoNumericHelper.setElementValue(domElement, formattedValue);\n\n        return formattedValue;\n    }\n\n    /**\n     * Unformat the given formatted string with the given options. This returns a numeric string.\n     * It can also unformat the given DOM element value with the given options and returns the unformatted numeric string.\n     * Note: This does *not* update that element value.\n     * This basically allows to get the unformatted value without first having to initialize an AutoNumeric object.\n     *\n     * @param {string|number|HTMLElement|HTMLInputElement} numericStringOrDomElement A number, or a string that represent a javascript number, or a DOM element\n     * @param {object|null} options Multiple objects can be passed, the latter overwriting the settings from the former ones\n     * @returns {string|number|NaN}\n     */\n    static unformat(numericStringOrDomElement, ...options) {\n        if (AutoNumericHelper.isNumberStrict(numericStringOrDomElement)) {\n            // Giving an unformatted value should return the same unformatted value, whatever the options passed as a parameter\n            return numericStringOrDomElement;\n        }\n\n        // Retrieve the value to unformat\n        let value;\n        if (AutoNumericHelper.isElement(numericStringOrDomElement)) {\n            value = AutoNumericHelper.getElementValue(numericStringOrDomElement);\n        } else {\n            value = numericStringOrDomElement;\n        }\n\n        if (value === '') {\n            // This allows to be coherent when serializing forms with empty inputs. Fix issue #512.\n            return '';\n        }\n\n        if (AutoNumericHelper.isUndefined(value) || value === null) {\n            return null;\n        }\n\n        if (AutoNumericHelper.isArray(value) || AutoNumericHelper.isObject(value)) {\n            // Check the validity of the `value` parameter\n            AutoNumericHelper.throwError(`A number or a string representing a number is needed to be able to unformat it, [${value}] given.`);\n        }\n\n        // Manage options\n        const optionsToUse = this._generateOptionsObjectFromOptionsArray(options);\n\n        // Generate the settings\n        const settings = Object.assign({}, this.getDefaultConfig(), optionsToUse);\n        settings.isNegativeSignAllowed = false;\n        settings.isPositiveSignAllowed = true;\n        value = value.toString();\n\n        // Directly unformat any `valuesToStrings` values, if found\n        if (settings.valuesToStrings && this._checkStringsToValuesSettings(value, settings)) {\n            return AutoNumericHelper.objectKeyLookup(settings.valuesToStrings, value);\n        }\n\n        // This checks if a negative sign is anywhere in the `value`, not just on the very first character (i.e. '12345.67-')\n        if (AutoNumericHelper.isNegative(value, settings.negativeSignCharacter)) {\n            settings.isNegativeSignAllowed = true;\n            settings.isPositiveSignAllowed = false;\n        } else if (!AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur)) {\n            [settings.firstBracket, settings.lastBracket] = settings.negativeBracketsTypeOnBlur.split(',');\n            if (value.charAt(0) === settings.firstBracket &&\n                value.charAt(value.length - 1) === settings.lastBracket) {\n                settings.isNegativeSignAllowed = true;\n                settings.isPositiveSignAllowed = false;\n                value = this._removeBrackets(value, settings, false);\n            }\n        }\n\n        value = this._convertToNumericString(value, settings);\n        if (AutoNumericHelper.isNumber(Number(value))) { // In case of numbers with the scientific notation (#757)\n            value = AutoNumericHelper.scientificToDecimal(value);\n        }\n\n        const unwantedCharacters = new RegExp(`[^+-0123456789.]`, 'gi');\n        if (unwantedCharacters.test(value)) {\n            return NaN;\n        }\n\n        // Generate the `negativePositiveSignPlacement` option as needed\n        this._correctNegativePositiveSignPlacementOption(settings);\n        // Calculate the needed decimal places\n        if (settings.decimalPlacesRawValue) { // `originalDecimalPlacesRawValue` needs to be defined\n            settings.originalDecimalPlacesRawValue = settings.decimalPlacesRawValue;\n        } else {\n            settings.originalDecimalPlacesRawValue = settings.decimalPlaces;\n        }\n\n        this._calculateDecimalPlacesOnInit(settings);\n\n        // Divide the raw value with `rawValueDivisor` if defined\n        if ((!AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.rawValueDivisor) && settings.rawValueDivisor !== 0) && // Only divide if the `rawValueDivisor` option is set\n            value !== '' && value !== null) { // Do not modify the `value` if it's an empty string or null\n            value /= settings.rawValueDivisor;\n        }\n\n        value = this._roundRawValue(value, settings);\n        value = value.replace(settings.decimalCharacter, '.'); // Here we need to convert back the decimal character to a period since `_roundValue` adds it in some cases\n        value = this._toLocale(value, settings.outputFormat, settings);\n\n        return value;\n    }\n\n    /**\n     * Unformat the given DOM element value, and set the resulting value back as the element value.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @param {object} options\n     * @returns {*}\n     */\n    static unformatAndSet(domElement, options = null) { //FIXME test this\n        const unformattedValue = this.unformat(domElement, options);\n        AutoNumericHelper.setElementValue(domElement, unformattedValue);\n\n        return unformattedValue;\n    }\n\n    /**\n     * Unformat and localize the given formatted string with the given options. This returns a numeric string.\n     * It can also unformat and localize the given DOM element value with the given options and returns the unformatted numeric string.\n     * Note: This does *not* update that element value.\n     * This basically allows to get the localized value without first having to initialize an AutoNumeric object.\n     *\n     * @param {string|number|HTMLElement|HTMLInputElement} numericStringOrDomElement\n     * @param {object} settings\n     * @returns {*}\n     */\n    static localize(numericStringOrDomElement, settings = null) {\n        let value;\n        if (AutoNumericHelper.isElement(numericStringOrDomElement)) {\n            value = AutoNumericHelper.getElementValue(numericStringOrDomElement);\n        } else {\n            value = numericStringOrDomElement;\n        }\n\n        if (value === '') {\n            // This allows to be coherent when serializing forms with empty inputs. Fix issue #512.\n            return '';\n        }\n\n        if (AutoNumericHelper.isNull(settings)) {\n            settings = AutoNumeric.defaultSettings;\n        }\n\n        value = this.unformat(value, settings);\n\n        //XXX The following code is pretty close to the one you can find in `getLocalized()`, but different enough so we won't refactor it.\n        if (Number(value) === 0 && settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n            value = '0';\n        }\n\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(settings)) {\n            outputFormatToUse = settings.outputFormat;\n        } else {\n            outputFormatToUse = AutoNumeric.defaultSettings.outputFormat;\n        }\n\n        return this._toLocale(value, outputFormatToUse, settings);\n    }\n\n    static localizeAndSet(domElement, options = null) { //FIXME test this\n        const localizedValue = this.localize(domElement, options);\n        AutoNumericHelper.setElementValue(domElement, localizedValue);\n\n        return localizedValue;\n    }\n\n    /**\n     * Return `true` if the given DOM element has an AutoNumeric object that manages it.\n     * This function also accepts a selector string.\n     *\n     * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n     * @returns {boolean}\n     */\n    static isManagedByAutoNumeric(domElementOrSelector) { //FIXME test this\n        return this._isInGlobalList(AutoNumericHelper.domElement(domElementOrSelector));\n    }\n\n    /**\n     * Return the AutoNumeric object that manages the given DOM element.\n     * This function also accepts a selector string.\n     *\n     * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n     * @returns {null|AutoNumeric}\n     */\n    static getAutoNumericElement(domElementOrSelector) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            return null;\n        }\n\n        return this._getFromGlobalList(domElement);\n    }\n\n    /**\n     * Set the given element value, and format it immediately.\n     * Return `null` if no AutoNumeric object is found, else, return the AutoNumeric object.\n     *\n     * @param {HTMLElement|string} domElementOrSelector Either a DOM element reference, or a selector string can be used\n     * @param {number|string|null} newValue The value must be a Number, a numeric string or `null` (if `emptyInputBehavior` is set to `'null'`)\n     * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history table\n     * @returns {AutoNumeric|null}\n     */\n    static set(domElementOrSelector, newValue, options = null, saveChangeToHistory = true) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            let showWarnings;\n            if (!AutoNumericHelper.isNull(options) && Object.prototype.hasOwnProperty.call(options, 'showWarnings')) {\n                showWarnings = options.showWarnings;\n            } else {\n                showWarnings = true;\n            }\n\n            AutoNumericHelper.warning(`Impossible to find an AutoNumeric object for the given DOM element or selector.`, showWarnings);\n\n            return null;\n        }\n\n        return this.getAutoNumericElement(domElement).set(newValue, options, saveChangeToHistory);\n    }\n\n    /**\n     * Return the unformatted value as a string from the given DOM element or query selector.\n     * This can also return `null` if `rawValue` is null.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {function|null} callback\n     * @returns {string|null}\n     */\n    static getNumericString(domElementOrSelector, callback = null) {\n        return this._get(domElementOrSelector, 'getNumericString', callback);\n    }\n\n    /**\n     * Return the current formatted value of the AutoNumeric element as a string, from the given DOM element or query selector.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {function|null} callback\n     * @returns {string}\n     */\n    static getFormatted(domElementOrSelector, callback = null) {\n        return this._get(domElementOrSelector, 'getFormatted', callback);\n    }\n\n    /**\n     * Return the element unformatted value as a real Javascript number, from the given DOM element or query selector.\n     * Warning: This can lead to precision problems with big numbers that should be stored as strings.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {function|null} callback\n     * @returns {number|null}\n     */\n    static getNumber(domElementOrSelector, callback = null) {\n        return this._get(domElementOrSelector, 'getNumber', callback);\n    }\n\n    /**\n     * DRY the code between the static `get*` functions\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {string} getFunction The name of the non-static `get*` function as a string\n     * @param {function|null} callback\n     * @returns {*}\n     * @private\n     */\n    static _get(domElementOrSelector, getFunction, callback = null) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            AutoNumericHelper.throwError(`Impossible to find an AutoNumeric object for the given DOM element or selector.`);\n        }\n\n        return this.getAutoNumericElement(domElement)[getFunction](callback);\n    }\n\n    /**\n     * Returns the unformatted value following the `outputFormat` setting, from the given DOM element or query selector.\n     * See the non-static `getLocalized()` method documentation for more details.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {null|string|function} forcedOutputFormat\n     * @param {function|null} callback\n     * @returns {*}\n     */\n    static getLocalized(domElementOrSelector, forcedOutputFormat = null, callback = null) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            AutoNumericHelper.throwError(`Impossible to find an AutoNumeric object for the given DOM element or selector.`);\n        }\n\n        return this.getAutoNumericElement(domElement).getLocalized(forcedOutputFormat, callback);\n    }\n\n    // Pre-defined options can be called to update the current default options with their specificities\n    //XXX A better way would be to not initialize first, but that's not possible since `new` is called first and we do not pass the language options (i.e. `French`) to the constructor\n\n    /**\n     * Update the AutoNumeric object with the predefined options, and possibly some option overrides.\n     *\n     * @param {object} predefinedOption\n     * @param {object} optionOverride\n     * @private\n     * @returns {AutoNumeric}\n     */\n    _updatePredefinedOptions(predefinedOption, optionOverride = null) {\n        if (!AutoNumericHelper.isNull(optionOverride)) {\n            this._mergeSettings(predefinedOption, optionOverride);\n            this.update(this.settings);\n        } else {\n            this.update(predefinedOption);\n        }\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the French pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    french(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().French, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the North American pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    northAmerican(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().NorthAmerican, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the British pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    british(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().British, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Swiss pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    swiss(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Swiss, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Japanese pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    japanese(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Japanese, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Spanish pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    spanish(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Spanish, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Chinese pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    chinese(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Chinese, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Brazilian pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    brazilian(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Brazilian, optionOverride);\n\n        return this;\n    }\n\n\n    // Internal private functions\n    /**\n     * Run any callbacks found in the settings object in order to set the settings value back.\n     * Any parameter can have a callback defined.\n     * The callback takes the current AutoNumeric element as the first argument, and the key name as the second.\n     * @example callback(this, 'currencySymbol')\n     */\n    _runCallbacksFoundInTheSettingsObject() { //FIXME test this\n        // Loops through the this.settings object (option array) to find the following\n        for (const key in this.settings) {\n            if (Object.prototype.hasOwnProperty.call(this.settings, key)) {\n                const value = this.settings[key];\n\n                if (typeof value === 'function') {\n                    this.settings[key] = value(this, key);\n                } else {\n                    // Calls the attached function from the html5 data. For instance: <tag data-currency-symbol=\"functionName\"></tag>\n                    let htmlAttribute = '';\n                    if (key in this.domElement.dataset) {\n                        htmlAttribute = this.domElement.dataset[key];\n                    }\n\n                    htmlAttribute = AutoNumericHelper.camelize(htmlAttribute);\n                    if (typeof this.settings[htmlAttribute] === 'function') {\n                        this.settings[key] = htmlAttribute(this, key);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Keep track if the settings configuration leads to a trailing negative sign (only when the raw value is negative), so we do not have to test the settings values every time we need to know that.\n     * `isTrailingNegative` is set to `true` if the settings result in a trailing negative character, `false` otherwise.\n     * Note: This returns `true` even if the raw value is positive.\n     * @private\n     */\n    _setTrailingNegativeSignInfo() {\n        this.isTrailingNegative = (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix) ||\n        (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix &&\n        (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left || this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.right));\n    }\n\n    /**\n     * Strip all the unwanted non-number characters.\n     * However, it does not reorder the localized negative sign.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @param {boolean} stripZeros If set to `false`, then the leading zero(s) are not stripped, otherwise if set to `true`, the `leadingZero` option is followed\n     * @param {boolean} isFocused If the element is focused, then this is `true`\n     * @returns {string}\n     * @private\n     */\n    static _stripAllNonNumberCharacters(s, settings, stripZeros, isFocused) {\n        return this._stripAllNonNumberCharactersExceptCustomDecimalChar(s, settings, stripZeros, isFocused).replace(settings.decimalCharacter, '.');\n    }\n\n    /**\n     * Strip all unwanted non-number characters except the custom decimal character.\n     *\n     * It converts the custom negative sign and removes the positive sign (custom or not).\n     * This keeps :\n     * - the numbers,\n     * - the normal negative sign '-' if any,\n     * - and the *custom* decimal character.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @param {boolean} stripZeros If set to `false`, then the leading zero(s) are not stripped, otherwise if set to `true`, the `leadingZero` option is followed\n     * @param {boolean} isFocused If the element is focused, then this is `true`\n     * @returns {string|*}\n     */\n    static _stripAllNonNumberCharactersExceptCustomDecimalChar(s, settings, stripZeros, isFocused) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        //TODO This function is called 10 times (sic!) on each key input, couldn't we lower that number? cf. issue #325\n        s = this._normalizeCurrencySuffixAndNegativeSignCharacters(s, settings);\n\n        // Then remove all the characters that are not numbers, the normal negative sign '-', or the custom decimal character (note: this also remove any custom positive sign)\n        s = s.replace(settings.allowedAutoStrip, '');\n\n        // Get only number string\n        const m = s.match(settings.numRegAutoStrip);\n        s = m ? [m[1], m[2], m[3]].join('') : '';\n\n        if (settings.leadingZero === AutoNumeric.options.leadingZero.allow || settings.leadingZero === AutoNumeric.options.leadingZero.keep) {\n            let negativeSign = '';\n            const [integerPart, decimalPart] = s.split(settings.decimalCharacter);\n            let modifiedIntegerPart = integerPart;\n            if (AutoNumericHelper.contains(modifiedIntegerPart, settings.negativeSignCharacter)) {\n                negativeSign = settings.negativeSignCharacter;\n                modifiedIntegerPart = modifiedIntegerPart.replace(settings.negativeSignCharacter, '');\n            }\n\n            // Strip leading zero on positive value if needed\n            if (negativeSign === '' && modifiedIntegerPart.length > settings.mIntPos && modifiedIntegerPart.charAt(0) === '0') {\n                modifiedIntegerPart = modifiedIntegerPart.slice(1);\n            }\n\n            // Strip leading zero on negative value if needed\n            if (negativeSign !== '' && modifiedIntegerPart.length > settings.mIntNeg && modifiedIntegerPart.charAt(0) === '0') {\n                modifiedIntegerPart = modifiedIntegerPart.slice(1);\n            }\n\n            s = `${negativeSign}${modifiedIntegerPart}${AutoNumericHelper.isUndefined(decimalPart)?'':settings.decimalCharacter + decimalPart}`;\n        }\n\n        if ((stripZeros && settings.leadingZero === AutoNumeric.options.leadingZero.deny) ||\n            (!isFocused && settings.leadingZero === AutoNumeric.options.leadingZero.allow)) {\n            s = s.replace(settings.stripReg, '$1$2');\n        }\n\n        return s;\n    }\n\n    /**\n     * Sets or removes brackets on negative values, depending on the focus state, which is passed as `isFocused`.\n     * The focus state is 'stored' in that object property.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} isFocused\n     * @returns {*}\n     */\n    static _toggleNegativeBracket(value, settings, isFocused) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        let result;\n        if (isFocused) {\n            result = this._removeBrackets(value, settings);\n        } else {\n            result = this._addBrackets(value, settings);\n        }\n\n        return result;\n    }\n\n    /**\n     * Add the bracket types specified in the `settings` object, to the given string `value`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {string}\n     * @private\n     */\n    static _addBrackets(value, settings) {\n        if (AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur)) {\n            return value;\n        }\n\n        return `${settings.firstBracket}${value.replace(settings.negativeSignCharacter, '')}${settings.lastBracket}`;\n    }\n\n    /**\n     * Remove the bracket types specified in the `settings` object, from the given string `value`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} rearrangeSignsAndValueOrder If set to `true`, then only the brackets are remove and a negative sign is added, without reordering the negative sign, currency symbol and value according to the settings.\n     * @returns {string}\n     * @private\n     */\n    static _removeBrackets(value, settings, rearrangeSignsAndValueOrder = true) {\n        let result;\n        if (!AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur) && value.charAt(0) === settings.firstBracket) {\n            // Remove the brackets if they are present\n            result = value.replace(settings.firstBracket, '');\n            result = result.replace(settings.lastBracket, '');\n\n            // Add back the negative sign at the right place\n            if (rearrangeSignsAndValueOrder) {\n                // First we need to remove the currency symbol from the value, since we want to be able to add back the negative sign at the right place (including between the value and the currency sign)\n                result = result.replace(settings.currencySymbol, '');\n                result = this._mergeCurrencySignNegativePositiveSignAndValue(result, settings, true, false); //TODO This assume the value is negative and non-empty. Is this always the case?\n            } else {\n                // Here we only want to add the negative sign since we removed the brackets, without reordering\n                result = `${settings.negativeSignCharacter}${result}`;\n            }\n        } else {\n            result = value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Analyze the `negativeBracketsTypeOnBlur` options and keep track of the first and last bracket characters to use.\n     *\n     * @param {object} settings\n     * @private\n     */\n    static _setBrackets(settings) {\n        if (AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur)) {\n            settings.firstBracket = '';\n            settings.lastBracket  = '';\n        } else {\n            // Use temporary variables to fix the MS Edge destructuring issue (see pull request #564)\n            const [firstBracket, lastBracket] = settings.negativeBracketsTypeOnBlur.split(',');\n            settings.firstBracket = firstBracket;\n            settings.lastBracket = lastBracket;\n        }\n    }\n\n    /**\n     * Return a number as a numeric string that can be typecast to a Number that Javascript will understand.\n     *\n     * This function returns the given string by stripping:\n     * - the currency sign (currencySymbol),\n     * - the grouping separators (digitalGroupSpacing),\n     * - the suffix text (suffixText),\n     * - the positive sign (positiveSignCharacter),\n     * - the brackets if any,\n     * - by replacing the negative sign character with a hyphen,\n     * - and by replacing the decimal character (decimalCharacter) by a dot.\n     *\n     * Lastly, it also put the negative sign back to its normal position if needed.\n     * Bonus; it converts any arabic numbers found to the latin ones.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @returns {string|void|*}\n     */\n    static _convertToNumericString(s, settings) {\n        // Remove the custom brackets\n        s = this._removeBrackets(s, settings, false);\n        s = this._normalizeCurrencySuffixAndNegativeSignCharacters(s, settings);\n\n        // Remove the grouping separators (thousands separators usually)\n        s = s.replace(new RegExp(`[${settings.digitGroupSeparator}]`, 'g'), '');\n\n        // Replace the decimal character by a dot\n        if (settings.decimalCharacter !== '.') {\n            s = s.replace(settings.decimalCharacter, '.');\n        }\n\n        // Move the trailing negative sign, if any, to the usual leftmost position\n        if (AutoNumericHelper.isNegative(s) && s.lastIndexOf('-') === s.length - 1) {\n            s = s.replace('-', '');\n            s = `-${s}`;\n        }\n\n        // Replace the custom positive sign\n        if (settings.showPositiveSign) {\n            s = s.replace(settings.positiveSignCharacter, '');\n        }\n\n        // Convert arabic numbers to latin ones, if any\n        const convertToNumber = settings.leadingZero !== AutoNumeric.options.leadingZero.keep;\n        const temp = AutoNumericHelper.arabicToLatinNumbers(s, convertToNumber, false, false);\n        if (!isNaN(temp)) {\n            s = temp.toString();\n        }\n\n        return s;\n    }\n\n    /**\n     * Removes the currency symbol and the suffix text from the given string, and replace the custom negative sign with a hyphen.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @returns {string | *}\n     * @private\n     */\n    static _normalizeCurrencySuffixAndNegativeSignCharacters(s, settings) {\n        s = String(s); // Typecast to a string, in case that the given value is a number\n\n        // Remove the currency symbol\n        if (settings.currencySymbol !== AutoNumeric.options.currencySymbol.none) {\n            s = s.replace(settings.currencySymbol, '');\n        }\n\n        // Remove the suffixText\n        if (settings.suffixText !== AutoNumeric.options.suffixText.none) {\n            s = s.replace(settings.suffixText, '');\n        }\n\n        // Replace the custom negative sign with a hyphen\n        if (settings.negativeSignCharacter !== AutoNumeric.options.negativeSignCharacter.hyphen) {\n            s = s.replace(settings.negativeSignCharacter, '-');\n        }\n\n        return s;\n    }\n\n    /**\n     * Converts the ISO numeric string to the locale decimal and minus sign placement.\n     * See the \"outputFormat\" option definition for more details.\n     * Note: If the `outputFormat` is set to a number, the custom `negativeSignCharacter` is ignored.\n     *\n     * @param {string|null} value The unformatted value\n     * @param {string|null} locale\n     * @param {object} settings\n     * @returns {*}\n     */\n    static _toLocale(value, locale, settings) {\n        if (AutoNumericHelper.isNull(locale) || locale === AutoNumeric.options.outputFormat.string) {\n            return value;\n        }\n\n        let result;\n        switch (locale) {\n            case AutoNumeric.options.outputFormat.number:\n                result = Number(value);\n                break;\n            case AutoNumeric.options.outputFormat.dotNegative:\n                result = AutoNumericHelper.isNegative(value) ? value.replace('-', '') + '-' : value;\n                break;\n            case AutoNumeric.options.outputFormat.comma:\n            case AutoNumeric.options.outputFormat.negativeComma:\n                result = value.replace('.', ',');\n                break;\n            case AutoNumeric.options.outputFormat.commaNegative:\n                result = value.replace('.', ',');\n                result = AutoNumericHelper.isNegative(result) ? result.replace('-', '') + '-' : result;\n                break;\n            // The default case\n            case AutoNumeric.options.outputFormat.dot:\n            case AutoNumeric.options.outputFormat.negativeDot:\n                result = value;\n                break;\n            default :\n                AutoNumericHelper.throwError(`The given outputFormat [${locale}] option is not recognized.`);\n        }\n\n        if (locale !== AutoNumeric.options.outputFormat.number && settings.negativeSignCharacter !== '-') {\n            // Modify the default minus sign with the custom one, if any\n            result = result.replace('-', settings.negativeSignCharacter);\n        }\n\n        return result;\n    }\n\n    /**\n     * Modify the negative sign and the decimal character of the given string value to a hyphen (-) and a dot (.) in order to make that value 'typecastable' to a real number.\n     *\n     * @param {string} s The formatted value\n     * @returns {string} The value with the 'normal' minus sign and decimal character\n     */\n    _modifyNegativeSignAndDecimalCharacterForRawValue(s) {\n        if (this.settings.decimalCharacter !== '.') {\n            s = s.replace(this.settings.decimalCharacter, '.');\n        }\n\n        if (this.settings.negativeSignCharacter !== '-' && this.settings.isNegativeSignAllowed) {\n            s = s.replace(this.settings.negativeSignCharacter, '-');\n        }\n\n        if (!s.match(/\\d/)) {\n            // The default value returned by `get` is not formatted with decimals\n            s += '0';\n        }\n\n        return s;\n    }\n\n    /**\n     * Modify the negative sign and the decimal character to use those defined in the settings.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @returns {string}\n     */\n    static _modifyNegativeSignAndDecimalCharacterForFormattedValue(s, settings) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        if (settings.negativeSignCharacter !== '-') {\n            s = s.replace('-', settings.negativeSignCharacter);\n        }\n\n        if (settings.decimalCharacter !== '.') {\n            s = s.replace('.', settings.decimalCharacter);\n        }\n\n        return s;\n    }\n\n    /**\n     * Return `true` if the given value is empty or is equal to the negative sign character defined in the given settings.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isElementValueEmptyOrOnlyTheNegativeSign(value, settings) {\n        return value === '' || value === settings.negativeSignCharacter;\n    }\n\n    /**\n     * Return the value with the currency symbol and the suffix text ordered according to the given settings.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} signOnEmpty\n     * @returns {*}\n     * @private\n     */\n    static _orderValueCurrencySymbolAndSuffixText(value, settings, signOnEmpty) {\n        let result;\n        if (settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.always || signOnEmpty) {\n            switch (settings.negativePositiveSignPlacement) {\n                case AutoNumeric.options.negativePositiveSignPlacement.left:\n                case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n                case AutoNumeric.options.negativePositiveSignPlacement.none:\n                    result = value + settings.currencySymbol + settings.suffixText;\n                    break;\n                default :\n                    result = settings.currencySymbol + value + settings.suffixText;\n            }\n        } else {\n            result = value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Modify the input value by adding the group separators, as defined in the settings, and the negative brackets if needed.\n     *\n     * @param {string} inputValue The formatted value (i.e. with the `decimalCharacter` defined in the settings, not the raw value)\n     * @param {object} settings\n     * @param {boolean} isFocused\n     * @param {number|string|null} currentRawValue The object current raw value (`this.rawValue`)\n     * @param {number|string|null} forcedRawValue If this is set, then this rawValue is used instead of the one passed through the `settings` object. This is useful is some very specific cases where we need to set the raw value *after* settings the formatted value, using the `_addGroupSeparators()` method.\n     * @returns {*}\n     */\n    static _addGroupSeparators(inputValue, settings, isFocused, currentRawValue, forcedRawValue = null) {\n        //TODO Test if `inputValue` === '', and return '' directly if that's the case,\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        let isValueNegative;\n        if (!AutoNumericHelper.isNull(forcedRawValue)) {\n            // Prefer directly testing if the raw value is negative in order for the test to be more performant than manipulating the formatted value\n            isValueNegative = forcedRawValue < 0;\n        } else {\n            isValueNegative = AutoNumericHelper.isNegative(inputValue, settings.negativeSignCharacter) || AutoNumericHelper.isNegativeWithBrackets(inputValue, settings.firstBracket, settings.lastBracket); // Test if the value is negative before removing the negative sign\n        }\n\n        inputValue = this._stripAllNonNumberCharactersExceptCustomDecimalChar(inputValue, settings, false, isFocused);\n\n        if (this._isElementValueEmptyOrOnlyTheNegativeSign(inputValue, settings)) {\n            return this._orderValueCurrencySymbolAndSuffixText(inputValue, settings, true);\n        }\n\n        const isZeroOrHasNoValue = AutoNumericHelper.isZeroOrHasNoValue(inputValue);\n\n        // Temporarily remove the negative sign if present\n        if (isValueNegative) {\n            inputValue = inputValue.replace('-', ''); // At this point the `inputValue` has been normalized with a 'normal' negative sign `'-'` //TODO Check that comment validity, since `_stripAllNonNumberCharactersExceptCustomDecimalChar` *does not* convert the negative sign\n        }\n\n        // Splits the string at the decimal string\n        let [integerPart, decimalPart] = inputValue.split(settings.decimalCharacter);\n        if (settings.decimalCharacterAlternative && AutoNumericHelper.isUndefined(decimalPart)) {\n            [integerPart, decimalPart] = inputValue.split(settings.decimalCharacterAlternative);\n        }\n\n        if (settings.digitGroupSeparator !== '') {\n            settings.digitalGroupSpacing = settings.digitalGroupSpacing.toString();\n            let digitalGroup;\n            switch (settings.digitalGroupSpacing) {\n                case AutoNumeric.options.digitalGroupSpacing.twoThree:\n                    digitalGroup = /(\\d)((\\d)(\\d{2}?)+)$/;\n                    break;\n                case AutoNumeric.options.digitalGroupSpacing.twoScaled:\n                    digitalGroup = /(\\d)((?:\\d{2}){0,2}\\d{3}(?:(?:\\d{2}){2}\\d{3})*?)$/;\n                    break;\n                case AutoNumeric.options.digitalGroupSpacing.two:\n                case AutoNumeric.options.digitalGroupSpacing.three:\n                case AutoNumeric.options.digitalGroupSpacing.four:\n                default :\n                    digitalGroup = new RegExp(`(\\\\d)((\\\\d{${settings.digitalGroupSpacing}}?)+)$`);\n            }\n\n            // Re-inserts the thousand separator via a regular expression\n            while (digitalGroup.test(integerPart)) {\n                integerPart = integerPart.replace(digitalGroup, `$1${settings.digitGroupSeparator}$2`);\n            }\n        }\n\n        // Find out how many decimal places should be kept, depending on the object state (isFocused)\n        let decimalPlacesToRoundTo;\n        if (isFocused) {\n            decimalPlacesToRoundTo = settings.decimalPlacesShownOnFocus;\n        } else {\n            decimalPlacesToRoundTo = settings.decimalPlacesShownOnBlur;\n        }\n\n        if (decimalPlacesToRoundTo !== 0 && !AutoNumericHelper.isUndefined(decimalPart)) {\n            if (decimalPart.length > decimalPlacesToRoundTo) {\n                // Trim the excessive number of decimal places\n                decimalPart = decimalPart.substring(0, decimalPlacesToRoundTo);\n            }\n\n            // Joins the whole number with the decimal value\n            inputValue = `${integerPart}${settings.decimalCharacter}${decimalPart}`;\n        } else {\n            // Otherwise if it's an integer\n            inputValue = integerPart;\n        }\n\n        // Add back the negative/positive sign and the currency symbol, at the right positions\n        inputValue = AutoNumeric._mergeCurrencySignNegativePositiveSignAndValue(inputValue, settings, isValueNegative, isZeroOrHasNoValue); //TODO this function is called again in `_toggleNegativeBracket` if the brackets are removed; let's DRY this\n\n        if (AutoNumericHelper.isNull(forcedRawValue)) {\n            // If the raw value is not forced, use the default one from the settings object\n            forcedRawValue = currentRawValue;\n        }\n\n        // Toggle the negative sign and brackets\n        if (settings.negativeBracketsTypeOnBlur !== null && (forcedRawValue < 0 || AutoNumericHelper.isNegativeStrict(inputValue, settings.negativeSignCharacter))) {\n            inputValue = this._toggleNegativeBracket(inputValue, settings, isFocused);\n        }\n\n        let result;\n        if (settings.suffixText) {\n            result = `${inputValue}${settings.suffixText}`;\n        } else {\n            result = inputValue;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return a semi-formatted string where the input value, the negative or positive sign, and the currency symbol are stitched together at the right positions, using the options set in the `settings` object.\n     * Note : the `inputValue` is usually not a numeric string since the grouping symbols are already added to it at this point.\n     *\n     * @param {string} inputValue\n     * @param {object} settings\n     * @param {boolean} isValueNegative\n     * @param {boolean} isZeroOrHasNoValue\n     * @returns {*}\n     * @throws\n     * @private\n     */\n    static _mergeCurrencySignNegativePositiveSignAndValue(inputValue, settings, isValueNegative, isZeroOrHasNoValue) {\n        let signToUse = '';\n        if (isValueNegative) {\n            signToUse = settings.negativeSignCharacter;\n        } else if (settings.showPositiveSign && !isZeroOrHasNoValue) {\n            signToUse = settings.positiveSignCharacter;\n        }\n\n        let result;\n        if (settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            if (settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                (isValueNegative || (!isValueNegative && settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                switch (settings.negativePositiveSignPlacement) {\n                    case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n                    case AutoNumeric.options.negativePositiveSignPlacement.left:\n                        result = `${signToUse}${settings.currencySymbol}${inputValue}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.right:\n                        result = `${settings.currencySymbol}${signToUse}${inputValue}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n                        result = `${settings.currencySymbol}${inputValue}${signToUse}`;\n                        break;\n                }\n            } else {\n                result = settings.currencySymbol + inputValue;\n            }\n        } else if (settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            if (settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                (isValueNegative || (!isValueNegative && settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                switch (settings.negativePositiveSignPlacement) {\n                    case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n                    case AutoNumeric.options.negativePositiveSignPlacement.right:\n                        result = `${inputValue}${settings.currencySymbol}${signToUse}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.left:\n                        result = `${inputValue}${signToUse}${settings.currencySymbol}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n                        result = `${signToUse}${inputValue}${settings.currencySymbol}`;\n                        break;\n                }\n            } else {\n                result = inputValue + settings.currencySymbol;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Calculate where to put the caret position on focus if the element content is not selected.\n     * This calculation is affected by the `caretPositionOnFocus` option which can be either `null`, `'start'`, `'end'`, `'decimalLeft'` or 'decimalRight'`, and will decide where to put the caret (on the left or right of the value or the decimal character, respectively) :\n     * - `null` : the caret position is not forced\n     * - `'start'` : the caret is positioned on the left hand side of the value\n     * - `'end'` : the caret is positioned on the right hand side of the value\n     * - `'decimalLeft'` : the caret is positioned on the left side of the decimal character\n     * - `'decimalRight'` : the caret is positioned on the right side of the decimal character\n     *\n     * @param {string} value The formatted string stripped of the currency symbol and negative/positive sign\n     * @returns {number}\n     * @throws\n     * @private\n     */\n    _initialCaretPosition(value) {\n        if (AutoNumericHelper.isNull(this.settings.caretPositionOnFocus) &&\n            this.settings.selectOnFocus === AutoNumeric.options.selectOnFocus.doNotSelect) {\n            AutoNumericHelper.throwError('`_initialCaretPosition()` should never be called when the `caretPositionOnFocus` option is `null`.');\n        }\n\n        const isValueNegative = this.rawValue < 0;\n        const isZeroOrHasNoValue = AutoNumericHelper.isZeroOrHasNoValue(value);\n        const totalLength = value.length;\n\n        let valueSize = 0;\n        let integerSize = 0;\n        let hasDecimalChar = false;\n        let offsetDecimalChar = 0;\n        if (this.settings.caretPositionOnFocus !== AutoNumeric.options.caretPositionOnFocus.start) {\n            value = value.replace(this.settings.negativeSignCharacter, '');\n            value = value.replace(this.settings.positiveSignCharacter, '');\n            value = value.replace(this.settings.currencySymbol, '');\n            valueSize = value.length;\n            hasDecimalChar = AutoNumericHelper.contains(value, this.settings.decimalCharacter);\n\n            if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft ||\n                this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n                if (hasDecimalChar) {\n                    integerSize = value.indexOf(this.settings.decimalCharacter);\n                    offsetDecimalChar = this.settings.decimalCharacter.length;\n                } else {\n                    integerSize = valueSize;\n                    offsetDecimalChar = 0;\n                }\n            }\n        }\n\n        let signToUse = '';\n        if (isValueNegative) {\n            signToUse = this.settings.negativeSignCharacter;\n        } else if (this.settings.showPositiveSign && !isZeroOrHasNoValue) {\n            signToUse = this.settings.positiveSignCharacter;\n        }\n\n        const positiveNegativeSignSize = signToUse.length;\n        const currencySymbolSize = this.settings.currencySymbol.length;\n\n        // Calculate the caret position based on `currencySymbolPlacement`, `negativePositiveSignPlacement` and `caretPositionOnFocus`\n        let caretPosition;\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.start) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€|12.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€|12.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+|12.34\n                            caretPosition = positiveNegativeSignSize + currencySymbolSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €|12.34+\n                            caretPosition = currencySymbolSize;\n                            break;\n                    }\n                } else {                                                               // €|12.34\n                    caretPosition = currencySymbolSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.end) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12.34|\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€12.34|\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+12.34|\n                            caretPosition = totalLength;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €12.34|+\n                            caretPosition = currencySymbolSize + valueSize;\n                            break;\n                    }\n                } else {                                                               // €12.34|\n                    caretPosition = totalLength;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12|.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€12|.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+12|.34\n                            caretPosition = positiveNegativeSignSize + currencySymbolSize + integerSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €12|.34+\n                            caretPosition = currencySymbolSize + integerSize;\n                            break;\n                    }\n                } else {                                                               // €12|.34\n                    caretPosition = currencySymbolSize + integerSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12.|34\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€12.|34\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+12.|34\n                            caretPosition = positiveNegativeSignSize + currencySymbolSize + integerSize + offsetDecimalChar;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €12.|34+\n                            caretPosition = currencySymbolSize + integerSize + offsetDecimalChar;\n                            break;\n                    }\n                } else {                                                               // €12.|34\n                    caretPosition = currencySymbolSize + integerSize + offsetDecimalChar;\n                }\n            }\n        } else if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.start) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // |12.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // |12.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // |12.34+€\n                            caretPosition = 0;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +|12.34€\n                            caretPosition = positiveNegativeSignSize;\n                            break;\n                    }\n                } else {                                                               // |12.34€\n                    caretPosition = 0;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.end) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12.34|€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // 12.34|€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // 12.34|+€\n                            caretPosition = valueSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +12.34|€\n                            caretPosition = positiveNegativeSignSize + valueSize;\n                            break;\n                    }\n                } else {                                                               // 12.34|€\n                    caretPosition = valueSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12|.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // 12|.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // 12|.34+€\n                            caretPosition = integerSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +12|.34€\n                            caretPosition = positiveNegativeSignSize + integerSize;\n                            break;\n                    }\n                } else {                                                               // 12|.34€\n                    caretPosition = integerSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12.|34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // 12.|34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // 12.|34+€\n                            caretPosition = integerSize + offsetDecimalChar;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +12.|34€\n                            caretPosition = positiveNegativeSignSize + integerSize + offsetDecimalChar;\n                            break;\n                    }\n                } else {                                                               // 12.|34€\n                    caretPosition = integerSize + offsetDecimalChar;\n                }\n            }\n        }\n\n        return caretPosition;\n    }\n\n    /**\n     * Truncate the trailing zeroes to the given number of decimal places\n     *\n     * @param {string} roundedInputValue\n     * @param {int} decimalPlacesNeeded The number of decimal places to keep\n     * @returns {string}\n     */\n    static _truncateZeros(roundedInputValue, decimalPlacesNeeded) {\n        let regex;\n        switch (decimalPlacesNeeded) {\n            case 0:\n                // Prevents padding - removes trailing zeros until the first significant digit is encountered\n                regex = /(\\.(?:\\d*[1-9])?)0*$/;\n                break;\n            case 1:\n                // Allows padding when decimalPlacesNeeded equals one - leaves one zero trailing the decimal character\n                regex = /(\\.\\d(?:\\d*[1-9])?)0*$/;\n                break;\n            default :\n                // Removes superfluous zeros after the decimalPlacesNeeded length\n                regex = new RegExp(`(\\\\.\\\\d{${decimalPlacesNeeded}}(?:\\\\d*[1-9])?)0*`);\n        }\n\n        // If there are no decimal places, we don't need a decimal point at the end\n        roundedInputValue = roundedInputValue.replace(regex, '$1');\n        if (decimalPlacesNeeded === 0) {\n            roundedInputValue = roundedInputValue.replace(/\\.$/, '');\n        }\n\n        return roundedInputValue;\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to keep for the raw value.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @returns {*}\n     * @private\n     */\n    static _roundRawValue(value, settings) {\n        return this._roundValue(value, settings, settings.decimalPlacesRawValue);\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to show for the element if focused.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @returns {*}\n     * @private\n     */\n    static _roundFormattedValueShownOnFocus(value, settings) {\n        return this._roundValue(value, settings, Number(settings.decimalPlacesShownOnFocus));\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to show for the element if unfocused.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @returns {*}\n     * @private\n     */\n    static _roundFormattedValueShownOnBlur(value, settings) {\n        return this._roundValue(value, settings, Number(settings.decimalPlacesShownOnBlur));\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to show for the element based on the value of isFocused.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @param {boolean} isFocused\n     * @returns {*}\n     * @private\n     */\n    static _roundFormattedValueShownOnFocusOrBlur(value, settings, isFocused) {\n        if (isFocused) {\n            return this._roundFormattedValueShownOnFocus(value, settings);\n        } else {\n            return this._roundFormattedValueShownOnBlur(value, settings);\n        }\n    }\n\n    /**\n     * Round the input value using the rounding method defined in the settings.\n     * This function accepts multiple rounding methods. See the documentation for more details about those.\n     *\n     * Note : This is handled as text since JavaScript math functions can return inaccurate values.\n     *\n     * @param {string|null} inputValue An unformatted numeric value\n     * @param {object} settings\n     * @param {int} decimalPlacesToRoundTo\n     * @returns {*}\n     */\n    static _roundValue(inputValue, settings, decimalPlacesToRoundTo) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        if (AutoNumericHelper.isNull(inputValue)) {\n            // Prevent rounding a `null` value\n            return inputValue;\n        }\n\n        //TODO Divide this function to make it easier to understand\n        inputValue = (inputValue === '') ? '0' : inputValue.toString();\n        if (settings.roundingMethod === AutoNumeric.options.roundingMethod.toNearest05 ||\n            settings.roundingMethod === AutoNumeric.options.roundingMethod.toNearest05Alt ||\n            settings.roundingMethod === AutoNumeric.options.roundingMethod.upToNext05 ||\n            settings.roundingMethod === AutoNumeric.options.roundingMethod.downToNext05) {\n            return this._roundCloseTo05(inputValue, settings);\n        }\n\n        const [negativeSign, preparedValue] = AutoNumeric._prepareValueForRounding(inputValue, settings);\n        inputValue = preparedValue;\n\n        const decimalCharacterPosition = inputValue.lastIndexOf('.');\n        const inputValueHasNoDot = decimalCharacterPosition === -1; // No dot character is found in the `inputValue`\n        const [integerPart, decimalPart] = inputValue.split('.'); // Here the decimal character is always a period '.'\n        const hasDecimals = decimalPart > 0;\n\n        // If no decimals are detected\n        if (!hasDecimals &&\n            (settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never ||\n            settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats)) {\n            // If the value decimalPart is only one or more zeroes, then it needs to be removed from the resulting string (cf. issue #652)\n            return (Number(inputValue) === 0) ? integerPart : `${negativeSign}${integerPart}`;\n        }\n\n        // Else there are some decimal places that may need to be rounded\n        // Sets the truncate zero method\n        let temporaryDecimalPlacesOverride;\n        if (settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.always ||\n            settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats) {\n            temporaryDecimalPlacesOverride = decimalPlacesToRoundTo;\n        } else if (settings.allowDecimalPadding > 0) {\n            temporaryDecimalPlacesOverride = settings.allowDecimalPadding;\n        } else {\n            temporaryDecimalPlacesOverride = 0;\n        }\n\n        // Define the decimal position to use (use the very last position if there are no dot in the initial inputValue)\n        const decimalPositionToUse = inputValueHasNoDot ? inputValue.length - 1 : decimalCharacterPosition;\n        // Checks decimal places to determine if rounding is required\n        let checkDecimalPlaces = (inputValue.length - 1) - decimalPositionToUse;\n        let inputValueRounded = '';\n\n        // Check if no rounding is required\n        if (checkDecimalPlaces <= decimalPlacesToRoundTo) {\n            // Check if we need to pad with zeros\n            inputValueRounded = inputValue;\n            if (checkDecimalPlaces < temporaryDecimalPlacesOverride) {\n                if (inputValueHasNoDot) {\n                    inputValueRounded = `${inputValueRounded}${settings.decimalCharacter}`;\n                }\n\n                let zeros = '000000'; //TODO Change that string with a longer one to prevent having to loop numerous times in the next `while` statement?\n                while (checkDecimalPlaces < temporaryDecimalPlacesOverride) {\n                    zeros = zeros.substring(0, temporaryDecimalPlacesOverride - checkDecimalPlaces);\n                    inputValueRounded += zeros;\n                    checkDecimalPlaces += zeros.length;\n                }\n            } else if (checkDecimalPlaces > temporaryDecimalPlacesOverride) {\n                inputValueRounded = this._truncateZeros(inputValueRounded, temporaryDecimalPlacesOverride);\n            } else if (checkDecimalPlaces === 0 && temporaryDecimalPlacesOverride === 0) {\n                // Remove any trailing dot, if any\n                inputValueRounded = inputValueRounded.replace(/\\.$/, '');\n            }\n\n            return (Number(inputValueRounded) === 0) ? inputValueRounded : `${negativeSign}${inputValueRounded}`;\n        }\n\n        // Rounded length of the string after rounding\n        let roundedStrLength;\n        if (inputValueHasNoDot) {\n            roundedStrLength = decimalPlacesToRoundTo - 1;\n        } else {\n            roundedStrLength = Number(decimalPlacesToRoundTo) + Number(decimalCharacterPosition);\n        }\n\n        const lastDigit = Number(inputValue.charAt(roundedStrLength + 1));\n        let inputValueArray = inputValue.substring(0, roundedStrLength + 1).split('');\n        let odd;\n        if (inputValue.charAt(roundedStrLength) === '.') {\n            odd = inputValue.charAt(roundedStrLength - 1) % 2;\n        } else {\n            odd = inputValue.charAt(roundedStrLength) % 2;\n        }\n\n        if (this._shouldRoundUp(lastDigit, settings, negativeSign, odd)) {\n            // Round up the last digit if required, and continue until no more 9's are found\n            for (let i = (inputValueArray.length - 1); i >= 0; i -= 1) {\n                if (inputValueArray[i] !== '.') {\n                    inputValueArray[i] = +inputValueArray[i] + 1;\n                    if (inputValueArray[i] < 10) {\n                        break;\n                    }\n\n                    if (i > 0) {\n                        inputValueArray[i] = '0';\n                    }\n                }\n            }\n        }\n\n        // Reconstruct the string, converting any 10's to 0's\n        inputValueArray = inputValueArray.slice(0, roundedStrLength + 1);\n\n        // Return the rounded value\n        inputValueRounded = this._truncateZeros(inputValueArray.join(''), temporaryDecimalPlacesOverride);\n\n        return (Number(inputValueRounded) === 0) ? inputValueRounded : `${negativeSign}${inputValueRounded}`;\n    }\n\n    /**\n     * Round the `value` when the rounding method deals with '.05'\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {string}\n     * @private\n     */\n    static _roundCloseTo05(value, settings) {\n        switch (settings.roundingMethod) {\n            case AutoNumeric.options.roundingMethod.toNearest05:\n            case AutoNumeric.options.roundingMethod.toNearest05Alt:\n                value = (Math.round(value * 20) / 20).toString();\n                break;\n            case AutoNumeric.options.roundingMethod.upToNext05:\n                value = (Math.ceil(value * 20) / 20).toString();\n                break;\n            default :\n                value = (Math.floor(value * 20) / 20).toString();\n        }\n\n        let result;\n        if (!AutoNumericHelper.contains(value, '.')) {\n            result = value + '.00';\n        } else if (value.length - value.indexOf('.') < 3) {\n            result = value + '0';\n        } else {\n            result = value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Modify the given `value` in order to make it usable for the rest of the rounding function.\n     * This convert the `value` to a positive one, trim any leading zeros and make sure it does not start with a leading dot.\n     *\n     * @param {string} value The unformatted value\n     * @param {object} settings\n     * @returns {[string, string]}\n     * @private\n     */\n    static _prepareValueForRounding(value, settings) {\n        // Checks if `inputValue` is a negative value\n        let negativeSign = '';\n        if (AutoNumericHelper.isNegativeStrict(value, '-')) { // The value being unformatted, we check for the minus sign\n            negativeSign = '-';\n\n            // Removes the negative sign that will be added back later if required\n            value = value.replace('-', '');\n        }\n\n        // Append a zero if the first character is not a digit (then it is likely a dot)\n        if (!value.match(/^\\d/)) {\n            value = `0${value}`;\n        }\n\n        // Determines if the value is equal to zero. If it is, remove the negative sign\n        if (Number(value) === 0) {\n            negativeSign = '';\n        }\n\n        // Trims leading zero's as needed\n        if ((Number(value) > 0 && settings.leadingZero !== AutoNumeric.options.leadingZero.keep) ||\n            (value.length > 0 && settings.leadingZero === AutoNumeric.options.leadingZero.allow)) {\n            value = value.replace(/^0*(\\d)/, '$1');\n        }\n\n        return [negativeSign, value];\n    }\n\n    /**\n     * Return `true` if a round up should be done given the last digit, the settings and other information about the value.\n     *\n     * @param {number} lastDigit\n     * @param {object} settings\n     * @param {string} negativeSign This variable comes from `_prepareValueForRounding()`, which return `'-'` if the initial value was negative\n     * @param {number} odd\n     * @returns {boolean}\n     * @private\n     */\n    static _shouldRoundUp(lastDigit, settings, negativeSign, odd) {\n        return (lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpSymmetric)                                     || // Round half up symmetric\n            (lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpAsymmetric && negativeSign === '')                || // Round half up asymmetric positive values\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpAsymmetric && negativeSign === '-')               || // Round half up asymmetric negative values\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownSymmetric)                                      || // Round half down symmetric\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownAsymmetric && negativeSign === '')              || // Round half down asymmetric positive values\n            (lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownAsymmetric && negativeSign === '-')             || // Round half down asymmetric negative values\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfEvenBankersRounding)                                ||\n            (lastDigit === 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfEvenBankersRounding && odd === 1)                 ||\n            (lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.toCeilingTowardPositiveInfinity && negativeSign === '') ||\n            (lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.toFloorTowardNegativeInfinity && negativeSign === '-')  ||\n            (lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.upRoundAwayFromZero);                                      // Round up away from zero\n    }\n\n    /**\n     * Truncates the decimal part of a number to the given number of decimal places `decimalPlacesToRoundTo`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} isPaste\n     * @param {int} decimalPlacesToRoundTo\n     * @returns {*}\n     */\n    static _truncateDecimalPlaces(value, settings, isPaste, decimalPlacesToRoundTo) {\n        if (isPaste) {\n            value = this._roundFormattedValueShownOnFocus(value, settings);\n        }\n\n        const [integerPart, decimalPart] = value.split(settings.decimalCharacter);\n\n        // Truncate the decimal part to the satisfying length since we would round it anyway\n        if (decimalPart && decimalPart.length > decimalPlacesToRoundTo) {\n            if (decimalPlacesToRoundTo > 0) {\n                const modifiedDecimalPart = decimalPart.substring(0, decimalPlacesToRoundTo);\n                value = `${integerPart}${settings.decimalCharacter}${modifiedDecimalPart}`;\n            } else {\n                value = integerPart;\n            }\n        }\n\n        return value;\n    }\n\n    /**\n     * Check if the given value is within the `minimumValue` and `maximumValue` range, while using the override options set with `overrideMinMaxLimits`.\n     * The minimum and maximum limit test results are returned in an array like `[isMinimumLimitRespected, isMaximumLimitRespected]`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {[boolean, boolean]}\n     */\n    static _checkIfInRangeWithOverrideOption(value, settings) {\n        if ((AutoNumericHelper.isNull(value) && settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null) || // When the `null` value is accepted as the `rawValue`, the limits are ignored\n            settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.ignore ||\n            settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.invalid) {\n            return [true, true];\n        }\n\n        value = value.toString();\n        value = value.replace(',', '.');\n        const minParse = AutoNumericHelper.parseStr(settings.minimumValue);\n        const maxParse = AutoNumericHelper.parseStr(settings.maximumValue);\n        const valParse = AutoNumericHelper.parseStr(value);\n\n        let result;\n        switch (settings.overrideMinMaxLimits) {\n            case AutoNumeric.options.overrideMinMaxLimits.floor:\n                result = [AutoNumericHelper.testMinMax(minParse, valParse) > -1, true];\n                break;\n            case AutoNumeric.options.overrideMinMaxLimits.ceiling:\n                result = [true, AutoNumericHelper.testMinMax(maxParse, valParse) < 1];\n                break;\n            default:\n                result = [AutoNumericHelper.testMinMax(minParse, valParse) > -1, AutoNumericHelper.testMinMax(maxParse, valParse) < 1];\n        }\n\n        return result;\n    }\n\n    /**\n     * Returns `true` if the given value is within the `minimumValue` and `maximumValue` limits, while using the override options set with `overrideMinMaxLimits`, `false` otherwise\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isWithinRangeWithOverrideOption(value, settings) {\n        const [minTest, maxTest] = this._checkIfInRangeWithOverrideOption(value, settings);\n\n        return minTest && maxTest;\n    }\n\n    /**\n     * Helper function that prepares the value string for the min/max test\n     *\n     * @param {string} value\n     * @returns {{}}\n     * @private\n     */\n    static _cleanValueForRangeParse(value) {\n        if (!AutoNumericHelper.isNull(value)) {\n            value = value.toString().replace(',', '.');\n        }\n\n        return AutoNumericHelper.parseStr(value);\n    }\n\n    /**\n     * Returns `true` is the value is superior or equal to the `minimumValue` limit, discarding any override options\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isMinimumRangeRespected(value, settings) {\n        return AutoNumericHelper.testMinMax(AutoNumericHelper.parseStr(settings.minimumValue), this._cleanValueForRangeParse(value)) > -1;\n    }\n\n    /**\n     * Returns `true` is the value is inferior or equal to the `maximumValue` limit, discarding any override options\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isMaximumRangeRespected(value, settings) {\n        return AutoNumericHelper.testMinMax(AutoNumericHelper.parseStr(settings.maximumValue), this._cleanValueForRangeParse(value)) < 1;\n    }\n\n    /**\n     * Helper function that triggers the range events if they are needed\n     *\n     * @param {boolean} minTest\n     * @param {boolean} maxTest\n     * @private\n     */\n    _triggerRangeEvents(minTest, maxTest) {\n        if (!minTest) {\n            this._triggerEvent(AutoNumeric.events.minRangeExceeded, this.domElement);\n        }\n\n        if (!maxTest) {\n            this._triggerEvent(AutoNumeric.events.maxRangeExceeded, this.domElement);\n        }\n    }\n\n    /**\n     * Set the invalid state on the AutoNumeric element.\n     * If the element is not an input, and therefore a contenteditable-enabled element, its validity state cannot be changed.\n     * In that case, the invalid css class defined with the `settings.invalidClass` option is added to the element.\n     * The 'autoNumeric:invalidValue' event is always sent when this function is called.\n     *\n     * @private\n     */\n    _setInvalidState() {\n        if (this.isInputElement) {\n            AutoNumericHelper.setInvalidState(this.domElement);\n        } else {\n            this._addCSSClass(this.settings.invalidClass);\n        }\n\n        this._triggerEvent(AutoNumeric.events.invalidValue, this.domElement);\n        this.validState = false;\n    }\n\n    /**\n     * Set the valid state on the AutoNumeric element.\n     * If the element is not an input, and therefore a contenteditable-enabled element, its validity state cannot be changed.\n     * In that case, the invalid css class defined with the `settings.invalidClass` option is removed.\n     * The 'autoNumeric:correctedValue' event is sent if the element state is invalid when this is called.\n     *\n     * @private\n     */\n    _setValidState() {\n        if (this.isInputElement) {\n            AutoNumericHelper.setValidState(this.domElement);\n        } else {\n            this._removeCSSClass(this.settings.invalidClass);\n        }\n\n        if (!this.validState) {\n            this._triggerEvent(AutoNumeric.events.correctedValue, this.domElement);\n        }\n\n        this.validState = true;\n    }\n\n    /**\n     * Sets the valid or invalid state on the DOM element, if the value is within the range set by the minimum and maximum value\n     *\n     * @param {string} value\n     * @private\n     */\n    _setValidOrInvalidState(value) {\n        if (this.settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.invalid) {\n            const minRangeOk = this.constructor._isMinimumRangeRespected(value, this.settings);\n            const maxRangeOk = this.constructor._isMaximumRangeRespected(value, this.settings);\n\n            if (minRangeOk && maxRangeOk) {\n                this._setValidState();\n            } else {\n                this._setInvalidState();\n            }\n\n            this._triggerRangeEvents(minRangeOk, maxRangeOk);\n        }\n    }\n\n    /**\n     * Original settings saved for use when the `decimalPlacesShownOnFocus` and `showOnlyNumbersOnFocus` options are used.\n     * Those original settings are used exclusively in the `focusin` and `focusout` event handlers.\n     */\n    _keepAnOriginalSettingsCopy() {\n        this.originalDigitGroupSeparator = this.settings.digitGroupSeparator;\n        this.originalCurrencySymbol      = this.settings.currencySymbol;\n        this.originalSuffixText          = this.settings.suffixText;\n    }\n\n    /**\n     * Removes any zeros in excess in the front and back of the given `value`, according to the `settings`.\n     * This also manages the cases where the decimal point is on the far left or far right of the `value`.\n     *\n     * @param {string} value\n     * @returns {string|null}\n     */\n    _trimLeadingAndTrailingZeros(value) {\n        // Return the empty string is the value is already empty. This prevents converting that value to '0'.\n        if (value === '' || value === null) {\n            return value;\n        }\n\n        if (this.settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n            if (Number(value) === 0) {\n                // Return '0' if the value is zero\n                return '0';\n            }\n\n            // Trim the leading zeros, while leaving one zero to the left of the decimal point if needed\n            value = value.replace(/^(-)?0+(?=\\d)/g,'$1');\n        }\n\n        //TODO remove this from that function and use `trimPaddedZerosFromDecimalPlaces()` instead\n        // Trim the trailing zeros after the last decimal place not being a zero (i.e. 1.2300 -> 1.23)\n        if (AutoNumericHelper.contains(value, '.')) {\n            value = value.replace(/(\\.[0-9]*?)0+$/, '$1');\n        }\n\n        // Remove any trailing decimal point\n        value = value.replace(/\\.$/, '');\n\n        return value;\n    }\n\n    /**\n     * Generate the name for the persistent stored data variable\n     * @private\n     */\n    _setPersistentStorageName() {\n        if (this.settings.saveValueToSessionStorage) {\n            if (this.domElement.name !== '' && !AutoNumericHelper.isUndefined(this.domElement.name)) {\n                this.rawValueStorageName = `${this.storageNamePrefix}${decodeURIComponent(this.domElement.name)}`;\n            } else {\n                this.rawValueStorageName = `${this.storageNamePrefix}${this.domElement.id}`;\n            }\n        }\n    }\n\n    /**\n     * Save the raw Value into sessionStorage or a cookie depending on what the browser is supporting.\n     * @private\n     */\n    _saveValueToPersistentStorage() {\n        if (this.settings.saveValueToSessionStorage) {\n            sessionStorage.setItem(this.rawValueStorageName, this.rawValue);\n        }\n    }\n\n    /**\n     * Retrieve the raw value from sessionStorage or the cookie depending on what the browser is supporting.\n     *\n     * @returns {*}\n     * @private\n     */\n    _getValueFromPersistentStorage() {\n        if (this.settings.saveValueToSessionStorage) {\n            return sessionStorage.getItem(this.rawValueStorageName);\n        }\n\n        AutoNumericHelper.warning('`_getValueFromPersistentStorage()` is called but `settings.saveValueToSessionStorage` is false. There must be an error that needs fixing.', this.settings.showWarnings);\n\n        return null;\n    }\n\n    /**\n     * Remove the raw value data from sessionStorage or the cookie depending on what the browser is supporting.\n     * @private\n     */\n    _removeValueFromPersistentStorage() {\n        if (this.settings.saveValueToSessionStorage) {\n            sessionStorage.removeItem(this.rawValueStorageName);\n        }\n    }\n\n    /**\n     * Get the default value from the html `value` attribute.\n     * Return the empty string if such attribute is not found.\n     *\n     * @param {HTMLElement} domElement\n     *\n     * @returns {string}\n     * @private\n     */\n    _getDefaultValue(domElement) {\n        // Get the default html value\n        // Note: we do not use the simpler `return domElement.defaultValue;` code since the given domElement can sometime be a `contenteditable` element which does not support the `defaultValue` attribute.\n        const value = domElement.getAttribute('value');\n\n        if (AutoNumericHelper.isNull(value)) {\n            return '';\n        }\n\n        return value;\n    }\n\n    /**\n     * Handler for 'focusin' and 'mouseenter' events\n     * On focusin, multiple things happens :\n     * - If `Alt` is pressed, unformat\n     * - Remove the separators if `showOnlyNumbersOnFocus` is set\n     * - Depending on `emptyInputBehavior`, reformat the empty formatted value\n     * - Display the correct number of decimal places (on focus/blur)\n     * - Place the caret correctly if the element is empty\n     *\n     * Note: On focusin, the `rawValue` is never changed. Only the formatted value can be modified.\n     *\n     * @param {KeyboardEvent|MouseEvent} e\n     * @private\n     */\n    _onFocusInAndMouseEnter(e) {\n        //TODO Create separate handlers for the focus and mouseenter events\n        this.isEditing = false; // Just in case no `keyUp` event have been sent (i.e. if the user lost the focus from the current window while typing)\n\n        if (!this.formulaMode && this.settings.unformatOnHover && e.type === 'mouseenter' && e.altKey) {\n            this.constructor._unformatAltHovered(this);\n\n            return;\n        }\n\n        if (e.type === 'focus') { //TODO Move that back to the 'focus' event handler when the separation between the 'focus' and 'mouseenter' handler will be done\n            // Keep track if the element is currently focused\n            this.isFocused = true;\n            this.rawValueOnFocus = this.rawValue; // Keep track of the initial rawValue. This is needed to define if a change event must be dispatched later\n        }\n\n        if (e.type === 'focus' && this.settings.unformatOnHover && this.hoveredWithAlt) {\n            this.constructor._reformatAltHovered(this);\n        }\n\n        if (e.type === 'focus' || e.type === 'mouseenter' && !this.isFocused) {\n            let elementValueToSet = null; // Store the value we want to set on the element, and only call `_setElementValue()` once\n\n            if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus &&\n                this.rawValue < 0 && this.settings.negativeBracketsTypeOnBlur !== null && this.settings.isNegativeSignAllowed) { //FIXME this is called a second time in _addGroupSeparators too. Prevent this, if possible.\n                // Only remove the brackets if the value is negative\n                elementValueToSet = this.constructor._removeBrackets(AutoNumericHelper.getElementValue(this.domElement), this.settings);\n                //FIXME The element value is set here, why continue and set it again later in that same parent logic block?\n            }\n\n            // Use the `rawValue`, multiplied by `rawValueDivisor` if defined\n            const rawValueToFormat = this._getRawValueToFormat(this.rawValue);\n\n            // Modify the element value according to the number of decimal places to show on focus or the `showOnlyNumbersOnFocus` option\n            if (rawValueToFormat !== '') {\n                // Round the given value according to the object state (focus/unfocused)\n                const roundedValue = this.constructor._roundFormattedValueShownOnFocusOrBlur(rawValueToFormat, this.settings, this.isFocused);\n\n                if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {\n                    //TODO Use a `this.settingsOverride` object instead of modifying the `this.settings` object\n                    this.settings.digitGroupSeparator = '';\n                    this.settings.currencySymbol      = '';\n                    this.settings.suffixText          = '';\n                    elementValueToSet = roundedValue.replace('.', this.settings.decimalCharacter);\n                } else {\n                    let formattedValue;\n                    if (AutoNumericHelper.isNull(roundedValue)) {\n                        formattedValue = '';\n                    } else {\n                        formattedValue = this.constructor._addGroupSeparators(roundedValue.replace('.', this.settings.decimalCharacter), this.settings, this.isFocused, rawValueToFormat);\n                    }\n\n                    elementValueToSet = formattedValue;\n                }\n            }\n\n            // In order to send a 'native' change event when blurring the input, we need to first store the initial input value on focus.\n            if (AutoNumericHelper.isNull(elementValueToSet)) {\n                this.valueOnFocus = '';\n            } else {\n                this.valueOnFocus = elementValueToSet;\n            }\n\n            this.lastVal = this.valueOnFocus;\n            const isEmptyValue = this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(this.valueOnFocus, this.settings);\n            const orderedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(this.valueOnFocus, this.settings, true); // This displays the currency sign on hover even if the rawValue is empty\n            const orderedValueTest = (isEmptyValue && orderedValue !== '') && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus;\n            if (orderedValueTest) {\n                elementValueToSet = orderedValue;\n            }\n\n            if (!AutoNumericHelper.isNull(elementValueToSet)) {\n                this._setElementValue(elementValueToSet);\n            }\n\n            if (orderedValueTest && orderedValue === this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                // If there is a currency symbol and its on the right hand side, then we place the caret accordingly on the far left side\n                AutoNumericHelper.setElementSelection(e.target, 0);\n            }\n        }\n    }\n\n    /**\n     * Handler for the 'focus' event.\n     * We update the info of the focused state in the `this.isFocused` variable when the element gets focused.\n     * @private\n     */\n    _onFocus() {\n        if (this.settings.isCancellable) {\n            // Save the current unformatted value for later use by the 'cancellable' feature\n            this._saveCancellableValue();\n        }\n    }\n\n    /**\n     * Handler for the 'focusin' event.\n     * This is called before the 'focus' event, and is necessary to change the selection on focus under Firefox for instance.\n     *\n     * @param {Event} e\n     * @private\n     */\n    _onFocusIn(e) {\n        if (this.settings.selectOnFocus) {\n            // The whole input content is selected on focus (following the `selectOnFocus` and `selectNumberOnly` options)\n            //XXX Firefox <47 does not respect this selection...Oh well.\n            this.select();\n        } else {\n            // Or we decide where to put the caret using the `caretPositionOnFocus` option\n            if (!AutoNumericHelper.isNull(this.settings.caretPositionOnFocus)) {\n                AutoNumericHelper.setElementSelection(e.target, this._initialCaretPosition(AutoNumericHelper.getElementValue(this.domElement)));\n            }\n        }\n    }\n\n    /**\n     * Enter the special 'formula mode' where users can enter a math expression that will be evaluated on blur and `enter`\n     * @private\n     */\n    _enterFormulaMode() {\n        if (this.settings.formulaMode) {\n            this.formulaMode = true; // 'Deactivate' the normal event listeners behavior\n            // Clear the input and add a '=' sign to it\n            AutoNumericHelper.setElementValue(this.domElement, '=');\n            // Put the caret after the `=` character\n            AutoNumericHelper.setElementSelection(this.domElement, 1);\n        }\n    }\n\n    /**\n     * Exit the formula mode\n     * Tries to parse and evaluate the math expression, then `set()` the result if it's correct, otherwise reformat with the previous `rawValue`\n     * @private\n     */\n    _exitFormulaMode() {\n        // Parse the formula\n        let formula = AutoNumericHelper.getElementValue(this.domElement);\n        formula     = formula.replace(/^\\s*=/, ''); // Remove all the leading whitespaces and the equal sign from the formula\n        let result;\n        try {\n            const ast = new Parser(formula, this.settings.decimalCharacter);\n            result    = (new Evaluator()).evaluate(ast);\n        } catch (e) {\n            // Error when parsing the math expression\n            this._triggerEvent(AutoNumeric.events.invalidFormula, this.domElement, {\n                formula,\n                aNElement: this,\n            });\n            this.reformat();\n            this.formulaMode = false;\n\n            return;\n        }\n\n        // The math expression is correctly parsed\n        this._triggerEvent(AutoNumeric.events.validFormula, this.domElement, {\n            formula,\n            result,\n            aNElement: this,\n        });\n        this.set(result); // Note: we can have a valid formula, but an invalid value (i.e. out of the min/max range)\n        this.formulaMode = false;\n    }\n\n    /**\n     * Returns `true` if the non-printable key is accepted in formula mode\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _acceptNonPrintableKeysInFormulaMode() {\n        return this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete ||\n            this.eventKey === AutoNumericEnum.keyName.LeftArrow || this.eventKey === AutoNumericEnum.keyName.RightArrow ||\n            this.eventKey === AutoNumericEnum.keyName.Home || this.eventKey === AutoNumericEnum.keyName.End;\n    }\n\n    /**\n     * Handler for 'keydown' events.\n     * The user just started pushing any key, hence one event is sent.\n     *\n     * Note :\n     * By default a 'normal' input output those events in the right order when inputting a character key (i.e. 'a') :\n     * - keydown\n     * - keypress\n     * - input\n     * - keyup\n     *\n     * ...when inputting a modifier key (i.e. 'ctrl') :\n     * - keydown\n     * - keyup\n     *\n     * If 'delete' or 'backspace' are entered 'normally', the following events are sent :\n     * - keydown\n     * - input\n     * - keyup\n     *\n     * If 'delete' or 'backspace' are entered continuously (with the key still pressed), the following events are sent :\n     * - keydown\n     * - input\n     * [- keydown\n     * - input] x times\n     * - keyup\n     *\n     * If 'enter' is entered and the value has not changed, the following events are sent :\n     * - keydown\n     * - keypress\n     * - keyup\n     *\n     * If 'enter' is entered and the value has been changed, the following events are sent :\n     * - keydown\n     * - keypress\n     * - change\n     * - keyup\n     *\n     * When a paste is done, the following events are sent :\n     * - input (if paste is done with the mouse)\n     *\n     * - keydown (if paste is done with ctrl+v)\n     * - keydown\n     * - input\n     * - keyup\n     * - keyup\n     *\n     * @param {KeyboardEvent} e\n     */\n    _onKeydown(e) {\n        if (this.compositioning) {\n            return;\n        }\n        this.formatted = false; // Keep track if the element has been formatted already. If that's the case, prevent further format calculations.\n        this.isEditing = true; // Keep track if the user is currently editing the element manually\n\n        if (!this.formulaMode && !this.isFocused && this.settings.unformatOnHover && e.altKey && this.domElement === AutoNumericHelper.getHoveredElement()) {\n            // Here I prevent calling _unformatAltHovered if the element is already focused, since the global 'keydown' listener will pick it up as well\n            this.constructor._unformatAltHovered(this);\n\n            return;\n        }\n\n        this._updateEventKeyInfo(e);\n\n        this.keydownEventCounter += 1; // Every time the keydown event is caught, increment the counter to keep track if the key is continuously pressed\n        if (this.keydownEventCounter === 1) {\n            this.initialValueOnFirstKeydown = AutoNumericHelper.getElementValue(e.target); // This is needed in `onKeyup()` to check if the value as changed during the key press\n            this.initialRawValueOnFirstKeydown = this.rawValue;\n        }\n\n        if (this.formulaMode) {\n            if (this.eventKey === AutoNumericEnum.keyName.Esc) { // Cancel the formula\n                this.formulaMode = false;\n                this.reformat();\n\n                return;\n            }\n\n            if (this.eventKey === AutoNumericEnum.keyName.Enter) { // Calculate the formula\n                this._exitFormulaMode();\n\n                return;\n            }\n\n            // Accept the backspace, delete, arrow, home and end keys\n            if (this._acceptNonPrintableKeysInFormulaMode()) {\n                return;\n            }\n\n            //TODO Manage the undo/redo events *while* editing a math expression\n            //TODO Manage the cut/paste events *while* editing a math expression\n        } else {\n            if (this.eventKey === AutoNumericEnum.keyName.Equal) {\n                this._enterFormulaMode();\n\n                return;\n            }\n\n            if (this.settings.modifyValueOnUpDownArrow &&\n                (this.eventKey === AutoNumericEnum.keyName.UpArrow || this.eventKey === AutoNumericEnum.keyName.DownArrow)) {\n                this.upDownArrowAction(e);\n\n                return;\n            }\n        }\n\n        if (this.domElement.readOnly || this.settings.readOnly || this.domElement.disabled) {\n            this.processed = true;\n\n            return;\n        }\n\n        if (this.eventKey === AutoNumericEnum.keyName.Esc) {\n            //XXX The default 'Escape' key behavior differs between Firefox and Chrome, Firefox already having a built-in 'cancellable-like' feature. This is why we call `e.preventDefault()` here instead of just when `isCancellable` is set to `true`. This allow us to keep the same behavior across browsers.\n            e.preventDefault();\n\n            if (this.settings.isCancellable) {\n                // If the user wants to cancel his modifications:\n                // We set back the saved value\n                if (this.rawValue !== this.savedCancellableValue) {\n                    // Do not set the value again if it has not changed\n                    this.set(this.savedCancellableValue);\n                    // And we need to send an 'input' event when setting back the initial value in order to make other scripts aware of the value change...\n                    this._triggerEvent(AutoNumeric.events.native.input, e.target);\n                }\n            }\n\n            // ...and lastly we update the caret selection, even if the option `isCancellable` is false\n            this.select();\n            //TODO Add an option to select either the integer or decimal part with `Esc`\n        }\n\n        // The \"enter\" key throws a `change` event if the raw value has changed since the `focus` event\n        let targetValue = AutoNumericHelper.getElementValue(e.target);\n        if (this.eventKey === AutoNumericEnum.keyName.Enter && this.rawValue !== this.rawValueOnFocus) {\n            this._triggerEvent(AutoNumeric.events.native.change, e.target);\n            this.valueOnFocus = targetValue;\n            this.rawValueOnFocus = this.rawValue;\n\n            if (this.settings.isCancellable) {\n                // If the user activated the 'cancellable' feature, we save the validated value when 'Enter' is hit\n                this._saveCancellableValue();\n            }\n        }\n\n        this._updateInternalProperties(e);\n\n        if (this._processNonPrintableKeysAndShortcuts(e)) {\n            this.processed = true;\n\n            return;\n        }\n\n        // Check if the key is a delete/backspace key\n        if (this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete) {\n            const isDeletionAllowed = this._processCharacterDeletion(e); // Because backspace and delete only triggers keydown and keyup events, not keypress\n            this.processed = true;\n            if (!isDeletionAllowed) {\n                // Prevent the deletion if `overrideMinMaxLimits` option is `doNotOverride` and the result goes out of the allowed range\n                e.preventDefault();\n\n                return;\n            }\n\n            this._formatValue(e);\n\n            // If and only if the resulting value has changed after that backspace/delete, then we have to send an 'input' event like browsers normally do.\n            targetValue = AutoNumericHelper.getElementValue(e.target); // Update the value since it could have been changed during the deletion\n            if ((targetValue !== this.lastVal) && this.throwInput) {\n                // Throw an input event when a character deletion is detected\n                this._triggerEvent(AutoNumeric.events.native.input, e.target);\n                e.preventDefault(); // ...and immediately prevent the browser to delete a second character\n            }\n\n            this.lastVal = targetValue;\n            this.throwInput = true;\n        }\n    }\n\n    /**\n     * Handler for 'keypress' events.\n     * The user is still pressing the key, which will output a character (i.e. '2') continuously until he releases the key.\n     * Note: 'keypress' events are not sent for delete keys like Backspace/Delete.\n     *\n     * @param {KeyboardEvent} e\n     */\n    _onKeypress(e) {\n        if (this.compositioning) {\n            return;\n        }\n        if (this.formulaMode) {\n            // Accept the backspace, delete, arrow, home and end keys\n            if (this._acceptNonPrintableKeysInFormulaMode()) {\n                return;\n            }\n\n            //TODO Prevent keys to be entered on the left-hand side of the '=' sign?...Or just let the user see what they are wrongly doing?\n            if (this.settings.formulaChars.test(this.eventKey)) { // Accept the custom decimal character too\n                return; // Accept the key in the formula (and do not accept the '=' character here again)\n            } else {\n                e.preventDefault(); // Reject the key\n            }\n\n            return;\n        }\n\n        if (this.eventKey === AutoNumericEnum.keyName.Insert) {\n            return;\n        }\n\n        const processed = this.processed;\n        this._updateInternalProperties(e);\n\n        if (this._processNonPrintableKeysAndShortcuts(e)) {\n            return;\n        }\n\n        if (processed) {\n            e.preventDefault();\n\n            return;\n        }\n\n        const isCharacterInsertionAllowed = this._processCharacterInsertion();\n        if (isCharacterInsertionAllowed) {\n            this._formatValue(e);\n            const targetValue = AutoNumericHelper.getElementValue(e.target);\n            if ((targetValue !== this.lastVal) && this.throwInput) {\n                // Throws input event on adding a character\n                this._triggerEvent(AutoNumeric.events.native.input, e.target);\n                e.preventDefault(); // ...and immediately prevent the browser to add a second character\n            } else {\n                if ((this.eventKey === this.settings.decimalCharacter || this.eventKey === this.settings.decimalCharacterAlternative) &&\n                    (AutoNumericHelper.getElementSelection(e.target).start === AutoNumericHelper.getElementSelection(e.target).end) &&\n                    AutoNumericHelper.getElementSelection(e.target).start === targetValue.indexOf(this.settings.decimalCharacter)) {\n                    const position = AutoNumericHelper.getElementSelection(e.target).start + 1;\n                    AutoNumericHelper.setElementSelection(e.target, position);\n                }\n\n                e.preventDefault();\n            }\n\n            this.lastVal = AutoNumericHelper.getElementValue(e.target);\n            this.throwInput = true;\n\n            this._setValidOrInvalidState(this.rawValue); // Updates the valid state as soon as the number is entered (in the case where the user keeps pressing the number key)\n\n            return;\n        }\n\n        e.preventDefault();\n    }\n\n    /**\n     * Handler for 'keyup' events.\n     * The user just released any key, hence one event is sent.\n     *\n     * @param {KeyboardEvent} e\n     */\n    _onKeyup(e) {\n        if (this.compositioning) {\n            return;\n        }\n        this.isEditing = false;\n        this.keydownEventCounter = 0; // Reset the keydown events counter\n\n        if (this.formulaMode) {\n            return;\n        }\n\n        if (this.settings.isCancellable && this.eventKey === AutoNumericEnum.keyName.Esc) {\n            // If the user wants to cancel its modifications, we drop the 'keyup' event for the Esc key\n            e.preventDefault();\n\n            return;\n        }\n\n        // Manage the undo/redo events\n        this._updateEventKeyInfo(e); // Fixes #761, where the Ctrl key is not correctly detected during undo/redo since this.eventKey was not updated from 'Z' to 'Control'\n        if (this.eventKey === AutoNumericEnum.keyName.Z || this.eventKey === AutoNumericEnum.keyName.z) {\n            if (e.ctrlKey && e.shiftKey) {\n                // Redo\n                e.preventDefault();\n                this._historyTableRedo();\n                this._triggerEvent(AutoNumeric.events.native.input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n                this.onGoingRedo = true;\n\n                // if lastVal is updated in the undo branch, it should be update here too, otherwise backspace could delete two chars (enter 1234, ctrl-z, ctrl-y, backspace)\n                this.lastVal = AutoNumericHelper.getElementValue(e.target);\n                this.throwInput = true;\n\n                return;\n            } else if (e.ctrlKey && !e.shiftKey) {\n                if (this.onGoingRedo) {\n                    // Prevent an 'undo' to be launched when releasing the shift key before the ctrl key after a 'redo' shortcut\n                    this.onGoingRedo = false;\n                } else {\n                    e.preventDefault();\n                    // Undo\n                    this._historyTableUndo();\n                    this._triggerEvent(AutoNumeric.events.native.input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n\n                    // lastVal should be updated to properly detect change in the delete/backspace handler above\n                    this.lastVal = AutoNumericHelper.getElementValue(e.target);\n                    this.throwInput = true;\n\n                    return;\n                }\n            }\n        } else if ((this.eventKey === AutoNumericEnum.keyName.Y || this.eventKey === AutoNumericEnum.keyName.y) && e.ctrlKey) {\n            // Redo\n            e.preventDefault();\n            this._historyTableRedo();\n            this._triggerEvent(AutoNumeric.events.native.input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n            this.onGoingRedo = true;\n\n            // if lastVal is updated in the undo branch, it should be update here too, otherwise backspace could delete two chars (enter 1234, ctrl-z, ctrl-y, backspace)\n            this.lastVal = AutoNumericHelper.getElementValue(e.target);\n            this.throwInput = true;\n\n            return;\n        }\n\n        if (this.onGoingRedo && (e.ctrlKey || e.shiftKey)) {\n            // Special case where if the user has entered `Control+Shift+z`, then release `z`, keeping `Control` or `Shift` pressed, then `this.onGoingRedo` is never changed back to `false` when the user release `Control` or `Shift`\n            this.onGoingRedo = false;\n        }\n\n        // Manage the Cut event\n        // Also handle the Ctrl-Del event on windows (Delete words to the right of the cursor) \n        if (((e.ctrlKey || e.metaKey) && (this.eventKey === AutoNumericEnum.keyName.X || this.eventKey === AutoNumericEnum.keyName.x)) ||\n            (e.ctrlKey && this.eventKey === AutoNumericEnum.keyName.Delete)) {\n            // Save the caret position at the start of the selection\n            const caretPosition = AutoNumericHelper.getElementSelection(this.domElement).start;\n            // Convert the remaining 'formatted' numbers in a Js number\n            const cutNumber = this.constructor._toNumericValue(AutoNumericHelper.getElementValue(e.target), this.settings);\n            // Try to set that value with `set()`\n            this.set(cutNumber);\n            // Set back the initial caret position\n            this._setCaretPosition(caretPosition);\n            \n            // update lastVal to detect change in delete/backspace handler\n            this.lastVal = AutoNumericHelper.getElementValue(e.target);\n        }\n\n        // Manage the reformat when hovered with the Alt key pressed\n        if (this.eventKey === AutoNumericEnum.keyName.Alt && this.settings.unformatOnHover && this.hoveredWithAlt) {\n            this.constructor._reformatAltHovered(this);\n\n            return;\n        }\n\n        // Manage the Backspace and Delete keys when used in combination with the control key (fix #656)\n        if ((e.ctrlKey || e.metaKey) && (this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete)) {\n            const targetValue = AutoNumericHelper.getElementValue(e.target);\n            this._setRawValue(this._formatOrUnformatOther(false, targetValue));\n\n            return;\n        }\n\n        this._updateInternalProperties(e);\n\n        const skip = this._processNonPrintableKeysAndShortcuts(e);\n        delete this.valuePartsBeforePaste;\n        const targetValue = AutoNumericHelper.getElementValue(e.target);\n        if (skip || targetValue === '' && this.initialValueOnFirstKeydown === '') { // If the user enters skippable keys, or keeps deleting/backspacing into the empty input, no 'formatted' event are sent (cf. issue #621)\n            return;\n        }\n\n        // Added to properly place the caret when only the currency sign is present\n        if (targetValue === this.settings.currencySymbol) {\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                AutoNumericHelper.setElementSelection(e.target, 0);\n            } else {\n                AutoNumericHelper.setElementSelection(e.target, this.settings.currencySymbol.length);\n            }\n        } else if (this.eventKey === AutoNumericEnum.keyName.Tab) {\n            AutoNumericHelper.setElementSelection(e.target, 0, targetValue.length);\n        }\n\n        if ((targetValue === this.settings.suffixText) ||\n            (this.rawValue === '' && this.settings.currencySymbol !== '' && this.settings.suffixText !== '')) {\n            AutoNumericHelper.setElementSelection(e.target, 0);\n        }\n\n        // Saves the extended decimal to preserve the data when navigating away from the page\n        if (this.settings.decimalPlacesShownOnFocus !== null) {\n            this._saveValueToPersistentStorage();\n        }\n\n        if (!this.formatted) {  //TODO Is this line needed? Considering that onKeydown and onKeypress both finish by setting it to false...\n            this._formatValue(e);\n        }\n\n        this._setValidOrInvalidState(this.rawValue);\n\n        // Force the `rawValue` update on Android Chrome\n        this._saveRawValueForAndroid();\n\n        // If the input value has changed during the key press event chain, an event is sent to alert that a formatting has been done (cf. Issue #187)\n        if (targetValue !== this.initialValueOnFirstKeydown) { // Checking the value that were saved after the very first keydown event ensure that the 'formatted' event will be sent even if the user continuously press the Delete/Backspace key\n            this._triggerEvent(AutoNumeric.events.formatted, e.target, {\n                oldValue   : this.initialValueOnFirstKeydown,\n                newValue   : targetValue,\n                oldRawValue: this.initialRawValueOnFirstKeydown,\n                newRawValue: this.rawValue,\n                isPristine : this.isPristine(false),\n                error      : null,\n                aNElement  : this,\n            });\n        }\n\n        // Update the selection of the current element of the history table\n        if (this.historyTable.length > 1) {\n            const selection = AutoNumericHelper.getElementSelection(this.domElement);\n            this.selectionStart = selection.start;\n            this.selectionEnd = selection.end;\n            this.historyTable[this.historyTableIndex].start = this.selectionStart;\n            this.historyTable[this.historyTableIndex].end = this.selectionEnd;\n        }\n    }\n\n    /**\n     * On Android Chrome, the `rawValue` is not updated when the user changes the input value.\n     * This function updates the `rawValue` accordingly.\n     * @private\n     */\n    _saveRawValueForAndroid() {\n        if (this.eventKey === AutoNumericEnum.keyName.AndroidDefault) {\n            let normalizedValue = this.constructor._stripAllNonNumberCharactersExceptCustomDecimalChar(this.getFormatted(), this.settings, true, this.isFocused);\n            normalizedValue = this.constructor._convertToNumericString(normalizedValue, this.settings);\n\n            this._setRawValue(normalizedValue);\n        }\n    }\n\n    /**\n     * Handler for 'focusout' events\n     * On focusout, multiple things happens :\n     * - The element value is formatted back if the `Alt` key was pressed,\n     * - The element value is formatted back if `showOnlyNumbersOnFocus` was set to only show numbers,\n     * - The element value is multiplied by `rawValueDivisor` on `blur`\n     *\n     * Note: On focusout, the `rawValue` is never changed. Only the formatted value can be modified.\n     *\n     * @param {Event} e\n     */\n    _onFocusOutAndMouseLeave(e) {\n        //TODO Create separate handlers for blur and mouseleave\n        this.isEditing = false; // Just in case no `keyUp` event have been sent (if the user lost the focus on the window while typing)\n\n        if (e.type === 'mouseleave' && this.formulaMode) {\n            return;\n        }\n\n        //FIXME Do not call `set()` if the current raw value is the same as the one we are trying to set (currently, on focus out, `set()` is always called, even if the value has not changed\n        if (this.settings.unformatOnHover && e.type === 'mouseleave' && this.hoveredWithAlt) {\n            this.constructor._reformatAltHovered(this);\n\n            return;\n        }\n\n        if ((e.type === 'mouseleave' && !this.isFocused) || e.type === 'blur') {\n            if (e.type === 'blur' && this.formulaMode) {\n                this._exitFormulaMode();\n            }\n\n            this._saveValueToPersistentStorage();\n            if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {\n                this.settings.digitGroupSeparator = this.originalDigitGroupSeparator;\n                this.settings.currencySymbol = this.originalCurrencySymbol;\n                this.settings.suffixText = this.originalSuffixText;\n            }\n\n            // Use the rawValue, multiplied by `rawValueDivisor` if defined\n            const rawValueToFormat = this._getRawValueToFormat(this.rawValue);\n            const isRawValueNull = AutoNumericHelper.isNull(rawValueToFormat);\n            const [minTest, maxTest] = this.constructor._checkIfInRangeWithOverrideOption(rawValueToFormat, this.settings);\n\n            // Directly set the formatted value if the `rawValue` is found in `valuesToStrings`\n            let elementValueIsAlreadySet = false;\n            if (rawValueToFormat !== '' && !isRawValueNull) {\n                this._triggerRangeEvents(minTest, maxTest);\n\n                if (this.settings.valuesToStrings && this._checkValuesToStrings(rawValueToFormat)) {\n                    // Set the formatted value with the corresponding string\n                    this._setElementValue(this.settings.valuesToStrings[rawValueToFormat]);\n                    elementValueIsAlreadySet = true;\n                }\n            }\n\n            // Only generate the formatted value if no `valuesToStrings` have been found\n            if (!elementValueIsAlreadySet) {\n                let value;\n                if (isRawValueNull || rawValueToFormat === '') {\n                    value = rawValueToFormat;\n                } else {\n                    value = String(rawValueToFormat);\n                }\n\n                if (rawValueToFormat !== '' && !isRawValueNull) {\n                    if (minTest && maxTest && !this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(rawValueToFormat, this.settings)) {\n                        value = this._modifyNegativeSignAndDecimalCharacterForRawValue(value);\n\n                        if (this.settings.divisorWhenUnfocused && !AutoNumericHelper.isNull(value)) {\n                            value = value / this.settings.divisorWhenUnfocused;\n                            value = value.toString();\n                        }\n\n                        value = this.constructor._roundFormattedValueShownOnBlur(value, this.settings);\n                        value = this.constructor._modifyNegativeSignAndDecimalCharacterForFormattedValue(value, this.settings);\n                    } else {\n                        this._triggerRangeEvents(minTest, maxTest);\n                    }\n                } else if (rawValueToFormat === '') {\n                    switch (this.settings.emptyInputBehavior) {\n                        case AutoNumeric.options.emptyInputBehavior.zero:\n                            this._setRawValue('0');\n                            value = this.constructor._roundValue('0', this.settings, 0); \n                            break;\n                        case AutoNumeric.options.emptyInputBehavior.min:\n                            this._setRawValue(this.settings.minimumValue);\n                            value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.minimumValue, this.settings, this.isFocused); \n                            break;\n                        case AutoNumeric.options.emptyInputBehavior.max:\n                            this._setRawValue(this.settings.maximumValue);\n                            value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.maximumValue, this.settings, this.isFocused); \n                            break;\n                        default:\n                            if (AutoNumericHelper.isNumber(this.settings.emptyInputBehavior)) {\n                                this._setRawValue(this.settings.emptyInputBehavior);\n                                value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.emptyInputBehavior, this.settings, this.isFocused);\n                            }\n                    }\n                }\n\n                let groupedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(value, this.settings, false);\n                if (!(this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(value, this.settings) ||\n                        (isRawValueNull && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null))) {\n                    groupedValue = this.constructor._addGroupSeparators(value, this.settings, false, rawValueToFormat);\n                }\n\n                // Testing for `allowDecimalPadding.never` or `allowDecimalPadding.floats` is needed to make sure we do not keep a trailing decimalCharacter (like '500.') in the element, since the raw value would still be a correctly formatted integer ('500')\n                if (groupedValue !== rawValueToFormat ||\n                    rawValueToFormat === '' || // This make sure we get rid on any currency symbol or suffix that might have been added on focus\n                    this.settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never ||\n                    this.settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats) {\n                    if (this.settings.symbolWhenUnfocused && rawValueToFormat !== '' && rawValueToFormat !== null) {\n                        groupedValue = `${groupedValue}${this.settings.symbolWhenUnfocused}`;\n                    }\n\n                    this._setElementValue(groupedValue);\n                }\n            }\n\n            this._setValidOrInvalidState(this.rawValue);\n\n            if (e.type === 'blur') {\n                //TODO Create separate handlers for blur and mouseleave, really.\n                this._onBlur(e);\n            }\n        }\n    }\n\n    /**\n     * Handler for 'paste' event\n     *\n     * @param {Event|ClipboardEvent} e\n     */\n    _onPaste(e) {\n        //FIXME When pasting '000' on a thousand group selection, the whole selection gets deleted, and only one '0' is pasted (cf. issue #302)\n        // The event is prevented by default, since otherwise the user would be able to paste invalid characters into the input\n        e.preventDefault();\n\n        if (this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n            // Do not allow pasting in a readonly element (fix issue #505)\n            return;\n        }\n\n        let rawPastedText;\n        if (e.clipboardData && e.clipboardData.getData) {\n            rawPastedText = e.clipboardData.getData('text/plain');\n        } else {\n            AutoNumericHelper.throwError('Unable to retrieve the pasted value. Please use a modern browser (i.e. Firefox or Chromium).');\n        }\n\n        // Fix for firefox paste handling on `contenteditable` elements where `e.target` is the text node, not the element\n        let eventTarget;\n        if (!e.target.tagName) {\n            eventTarget = e.explicitOriginalTarget;\n        } else {\n            eventTarget = e.target;\n        }\n\n        // 0. Special case if the user has selected all the input text before pasting\n        const initialFormattedValue = AutoNumericHelper.getElementValue(eventTarget);\n        const selectionStart = eventTarget.selectionStart || 0;\n        const selectionEnd = eventTarget.selectionEnd || 0;\n        const selectionSize = selectionEnd - selectionStart;\n\n        if (selectionSize === initialFormattedValue.length) { // If all the element text is selected\n            //TODO Refactor this with the tests below\n            // Since the whole element content will be replaced, no need to complicate things and directly test for the validity of the pasted content, then set the `rawValue` and caret position (fix issue #482)\n            // 1. Strip all thousand separators, brackets and currency sign, and convert the decimal character to a dot\n            const untranslatedPastedText = this._preparePastedText(rawPastedText);\n            const pastedRawValue = AutoNumericHelper.arabicToLatinNumbers(untranslatedPastedText, false, false, false); // Allow pasting arabic numbers\n\n            // 2. Check that the paste is a valid number once it has been normalized to a raw value\n            if (pastedRawValue === '.' || pastedRawValue === '' || (pastedRawValue !== '.' && !AutoNumericHelper.isNumber(pastedRawValue))) {\n                this.formatted = true; // This prevents the `keyup` event on the `v` key during a paste to try to format an empty value.\n                // If the user tries to paste a single decimal character (that has been translated to '.' already) or the empty value, ignore the paste\n                if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n                    AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' is not a valid paste content.`);\n                }\n\n                return;\n            }\n\n            // 3. Then try to set it as the new value. The `set()` method will run the additional tests (i.e. limits) as needed.\n            this.set(pastedRawValue);\n            this.formatted = true;\n\n            // 4. On a 'normal' non-autoNumeric input, an `input` event is sent when a paste is done. We mimic that.\n            this._triggerEvent(AutoNumeric.events.native.input, eventTarget);\n\n            this.lastVal = AutoNumericHelper.getElementValue(eventTarget);  // fix the 'input event sometimes not raised' issue after value is pasted into an empty input\n\n            // 5. Return since the job is done\n            return;\n        }\n\n        // 1. Check if the paste has a negative sign (only if it's the first character), and store that information for later use\n        const isPasteNegative = AutoNumericHelper.isNegativeStrict(rawPastedText, this.settings.negativeSignCharacter);\n        if (isPasteNegative) {\n            // 1a. Remove the negative sign from the pasted text\n            rawPastedText = rawPastedText.slice(1, rawPastedText.length); //TODO This can lead to an empty rawPastedText if only the negative sign character is pasted. This then complains about not being a valid paste content. Define which behaviour we want when this happens, then implement the solution.\n        }\n\n        // 2. Strip all thousand separators, brackets and currency sign, and convert the decimal character to a dot\n        const untranslatedPastedText = this._preparePastedText(rawPastedText);\n\n        let pastedText;\n        if (untranslatedPastedText === '.') {\n            // Special case : If the user tries to paste a single decimal character (that has been translated to '.' already)\n            pastedText = '.';\n        } else {\n            // Normal case\n            // Allow pasting arabic numbers\n            pastedText = AutoNumericHelper.arabicToLatinNumbers(untranslatedPastedText, false, false, false);\n        }\n\n        // 3. Test if the paste is valid (only has numbers and eventually a decimal character). If it's not valid, stop here.\n        if (pastedText !== '.' && (!AutoNumericHelper.isNumber(pastedText) || pastedText === '')) {\n            this.formatted = true; // This prevents the `keyup` event on the `v` key during a paste to try to format an empty value (fix issue #484)\n            if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n                AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' is not a valid paste content.`);\n            }\n\n            return;\n        }\n\n        // 4. Calculate the paste result\n        let caretPositionOnInitialTextAfterPasting;\n        let isInitialValueNegative = AutoNumericHelper.isNegativeStrict(this.getNumericString(), this.settings.negativeSignCharacter);\n        let isPasteNegativeAndInitialValueIsPositive;\n        let result;\n\n        // If the pasted content is negative, then the result will be negative too\n        if (isPasteNegative && !isInitialValueNegative) {\n            isInitialValueNegative = true;\n            isPasteNegativeAndInitialValueIsPositive = true;\n        }\n        else {\n            isPasteNegativeAndInitialValueIsPositive = false;\n        }\n\n        // 1. Generate the unformatted result\n        const leftFormattedPart  = initialFormattedValue.slice(0, selectionStart);\n        const rightFormattedPart = initialFormattedValue.slice(selectionEnd, initialFormattedValue.length);\n\n        if (selectionStart !== selectionEnd) {\n            // a. If there is a selection, remove the selected part, and return the left and right part\n            result = this._preparePastedText(leftFormattedPart + rightFormattedPart);\n        } else {\n            // b. Else if this is only one caret (and therefore no selection), then return the left and right part\n            result = this._preparePastedText(initialFormattedValue);\n        }\n\n        // Add back the negative sign if needed\n        if (isInitialValueNegative) {\n            result = AutoNumericHelper.setRawNegativeSign(result);\n        }\n\n        // Build the unformatted result string\n        caretPositionOnInitialTextAfterPasting = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter));\n        if (isPasteNegativeAndInitialValueIsPositive) {\n            // If the initial paste is negative and the initial value is not, then I must offset the caret position by one place to the right to take the additional hyphen into account\n            caretPositionOnInitialTextAfterPasting++;\n            //TODO Quid if the negative sign is not on the left (negativePositiveSignPlacement and currencySymbolPlacement)?\n            //TODO Quid if the positive sign is shown?\n        }\n\n        let leftPart  = result.slice(0, caretPositionOnInitialTextAfterPasting);\n        let rightPart = result.slice(caretPositionOnInitialTextAfterPasting, result.length);\n        let leftPartContainedADot = false;\n        if (pastedText === '.') {\n            if (AutoNumericHelper.contains(leftPart, '.')) {\n                // If I remove a dot here, then I need to update the caret position (decrement it by 1) when positioning it\n                // To do so, we keep that info in order to modify the caret position later\n                leftPartContainedADot = true;\n                leftPart              = leftPart.replace('.', '');\n            }\n\n            rightPart = rightPart.replace('.', '');\n        }\n\n        // Manage the case where a negative number is pasted onto another negative number that is entirely selected (cf. issue #593)\n        let negativePasteOnNegativeNumber = false;\n        if (leftPart === '' && rightPart === '-') {\n            leftPart = '-';\n            rightPart = '';\n            // When pasting a negative number on a negative number, we need to offset the caret position one place to the right to take into account the negative sign\n            negativePasteOnNegativeNumber = true;\n        }\n\n        // -- Here, we are good to go to continue on the same basis for each value of the `onInvalidPaste` option\n\n        switch (this.settings.onInvalidPaste) {\n            /* 4a. Truncate paste behavior:\n             * Insert as many numbers as possible on the right hand side of the caret from the pasted text content, until the input reach its range limit.\n             * If there is more characters in the clipboard once a limit is reached, drop the extraneous characters.\n             * Otherwise paste all the numbers from the clipboard.\n             * While doing so, we check if the result is within the minimum and maximum values allowed, and stop as soon as we encounter one of those.\n             *\n             * 4b. Replace paste behavior:\n             * Idem than the 'truncate' paste behavior, except that when a range limit is hit, we try to replace the subsequent initial numbers with the pasted ones, until we hit the range limit a second (and last) time, or we run out of numbers to paste\n             */\n            /* eslint no-case-declarations: 0 */\n            case AutoNumeric.options.onInvalidPaste.truncate:\n            case AutoNumeric.options.onInvalidPaste.replace:\n                // c. Add numbers one by one at the caret position, while testing if the result is valid and within the range of the minimum and maximum value\n                //    Continue until you either run out of numbers to paste, or that you get out of the range limits\n                const minParse = AutoNumericHelper.parseStr(this.settings.minimumValue);\n                const maxParse = AutoNumericHelper.parseStr(this.settings.maximumValue);\n                let lastGoodKnownResult = result; // This is set as the default, in case we do not add even one number\n                let pastedTextIndex = 0;\n                let modifiedLeftPart = leftPart;\n\n                while (pastedTextIndex < pastedText.length) {\n                    // Modify the result with another pasted character\n                    modifiedLeftPart += pastedText[pastedTextIndex];\n                    result = modifiedLeftPart + rightPart;\n\n                    // Check the range limits\n                    if (!this.constructor._checkIfInRange(result, minParse, maxParse)) {\n                        // The result is out of the range limits, stop the loop here\n                        break;\n                    }\n\n                    // Save the last good known result\n                    lastGoodKnownResult = result;\n\n                    // Update the local variables for the next loop\n                    pastedTextIndex++;\n                }\n\n                // Update the last caret position where to insert a new number\n                caretPositionOnInitialTextAfterPasting += pastedTextIndex;\n                if (negativePasteOnNegativeNumber) caretPositionOnInitialTextAfterPasting++;\n\n                //XXX Here we have the result for the `truncate` option\n                if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.truncate) {\n                    //TODO If the user as defined a truncate callback and there are still some numbers (that will be dropped), then call this callback with the initial paste as well as the remaining numbers\n                    result = lastGoodKnownResult;\n\n                    if (leftPartContainedADot) {\n                        // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n                        caretPositionOnInitialTextAfterPasting--;\n                    }\n                    break;\n                }\n                //XXX ...else we need to continue modifying the result for the 'replace' option\n\n                // d. Until there are numbers to paste, replace the initial numbers one by one, and still do the range test.\n                //    Stop when you have no more numbers to paste, or if you are out of the range limits.\n                //    If you do get to the range limits, use the previous known good value within those limits.\n                //    Note: The numbers are replaced one by one, in the integer then decimal part, while ignoring the decimal character\n                //TODO What should happen if the user try to paste a decimal number? Should we override the current initial decimal character in favor of this new one? If we do, then we have to recalculate the vMin/vMax from the start in order to take into account this new decimal character position..\n                let lastGoodKnownResultIndex = caretPositionOnInitialTextAfterPasting;\n                const lastGoodKnownResultSize = lastGoodKnownResult.length;\n\n                while (pastedTextIndex < pastedText.length && lastGoodKnownResultIndex < lastGoodKnownResultSize) {\n                    if (lastGoodKnownResult[lastGoodKnownResultIndex] === '.') {\n                        // We skip the decimal character 'replacement'. That way, we do not change the decimal character position regarding the remaining numbers.\n                        lastGoodKnownResultIndex++;\n                        continue;\n                    }\n\n                    // This replaces one character at a time\n                    result = AutoNumericHelper.replaceCharAt(lastGoodKnownResult, lastGoodKnownResultIndex, pastedText[pastedTextIndex]);\n\n                    // Check the range limits\n                    if (!this.constructor._checkIfInRange(result, minParse, maxParse)) {\n                        // The result is out of the range limits, stop the loop here\n                        break;\n                    }\n\n                    // Save the last good known result\n                    lastGoodKnownResult = result;\n\n                    // Update the local variables for the next loop\n                    pastedTextIndex++;\n                    lastGoodKnownResultIndex++;\n                }\n\n                // Update the last caret position where to insert a new number\n                caretPositionOnInitialTextAfterPasting = lastGoodKnownResultIndex;\n\n                if (leftPartContainedADot) {\n                    // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n                    caretPositionOnInitialTextAfterPasting--;\n                }\n\n                result = lastGoodKnownResult;\n\n                break;\n            /* 4c. Normal paste behavior:\n             * Insert the pasted number inside the current unformatted text, at the correct caret position or selection\n             */\n            case AutoNumeric.options.onInvalidPaste.error:\n            case AutoNumeric.options.onInvalidPaste.ignore:\n            case AutoNumeric.options.onInvalidPaste.clamp:\n            default:\n                // Generate the unformatted result\n                result = `${leftPart}${pastedText}${rightPart}`;\n\n                // 2. Calculate the caret position in the unformatted value, for later use\n                if (selectionStart === selectionEnd) {\n                    // There is no selection, then the caret position is set after the pasted text\n                    const indexWherePastedTextHasBeenInserted = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter));\n                    caretPositionOnInitialTextAfterPasting = indexWherePastedTextHasBeenInserted + pastedText.length; // I must not count the characters that have been removed from the pasted text (i.e. '.')\n                } else if (rightPart === '') {\n                    // If the user selected from the caret position to the end of the input (on the far right)\n                    caretPositionOnInitialTextAfterPasting = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter)) + pastedText.length;\n                    if (negativePasteOnNegativeNumber) caretPositionOnInitialTextAfterPasting++;\n                } else {\n                    // Usual case\n                    const indexSelectionEndInRawValue = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionEnd, this.settings.decimalCharacter));\n\n                    // Here I must not count the characters that have been removed from the pasted text (i.e. '.'), or the thousand separators in the initial selected text\n                    const selectedText = AutoNumericHelper.getElementValue(eventTarget).slice(selectionStart, selectionEnd);\n                    caretPositionOnInitialTextAfterPasting = indexSelectionEndInRawValue - selectionSize + AutoNumericHelper.countCharInText(this.settings.digitGroupSeparator, selectedText) + pastedText.length;\n                }\n\n                // Modify the caret position for special cases, only if the whole input has not been selected\n                if (isPasteNegativeAndInitialValueIsPositive) {\n                    // If the pasted value has a negative sign ('-'), but the initial value does not, offset the index by one\n                    caretPositionOnInitialTextAfterPasting++;\n                }\n\n                if (leftPartContainedADot) {\n                    // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n                    caretPositionOnInitialTextAfterPasting--;\n                }\n        }\n\n        // 5. Check if the result is a valid number, if not, drop the paste and do nothing.\n        if (!AutoNumericHelper.isNumber(result) || result === '') {\n            if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n                AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' would result into an invalid content '${result}'.`); //TODO Should we send a warning instead of throwing an error?\n                //TODO This is not DRY ; refactor with above\n            }\n            return;\n        }\n\n        // 6. If it's a valid number, check if it falls inside the minimum and maximum value. If this fails, modify the value following this procedure :\n        /*\n         * If 'error' (this is the default) :\n         *      - Normal paste behavior.\n         *      - Try to set the new value, if it fails, then throw an error in the console.\n         *      - Do not change the input value, do not change the current selection.\n         * If 'ignore' :\n         *      - Normal paste behavior.\n         *      - Try to set the new value, if it fails, do nothing more.\n         *      - Do not change the input value, do not change the current selection.\n         * If 'clamp' :\n         *      - Normal paste behavior.\n         *      - Try to set the new value, if it fails, set the value to the minimum or maximum limit, whichever is closest to the\n         *        paste result.\n         *      - Change the caret position to be positioned on the left hand side of the decimal character.\n         * If 'truncate' :\n         *      - Truncate paste behavior.\n         *      - Try to set the new value, until it fails (if the result is out of the min and max value limits).\n         *      - Drop the remaining non-pasted numbers, and keep the last known non-failing result.\n         *      - Change the caret position to be positioned after the last pasted character.\n         * If 'replace' :\n         *      - Replace paste behavior.\n         *      - Try to set the new value, until it fails (if the result is out of the min and max value limits).\n         *      - Then try to replace as many numbers as possible with the pasted ones. Once it fails, keep the last known non-failing result.\n         *      - Change the caret position to be positioned after the last pasted character.\n         */\n        let valueHasBeenSet = false;\n        let valueHasBeenClamped = false;\n        try {\n            this.set(result);\n            valueHasBeenSet = true;\n        } catch (error) {\n            let clampedValue;\n            switch (this.settings.onInvalidPaste) {\n                case AutoNumeric.options.onInvalidPaste.clamp:\n                    clampedValue = AutoNumericHelper.clampToRangeLimits(result, this.settings);\n                    try {\n                        this.set(clampedValue);\n                    } catch (error) {\n                        AutoNumericHelper.throwError(`Fatal error: Unable to set the clamped value '${clampedValue}'.`);\n                    }\n\n                    valueHasBeenClamped = true;\n                    valueHasBeenSet = true;\n                    result = clampedValue; // This is used only for setting the caret position later\n                    break;\n                case AutoNumeric.options.onInvalidPaste.error:\n                case AutoNumeric.options.onInvalidPaste.truncate:\n                case AutoNumeric.options.onInvalidPaste.replace:\n                    // Throw an error message\n                    AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' results in a value '${result}' that is outside of the minimum [${this.settings.minimumValue}] and maximum [${this.settings.maximumValue}] value range.`);\n                // Fall through\n                case AutoNumeric.options.onInvalidPaste.ignore:\n                // Do nothing\n                // Fall through\n                default :\n                    return; // ...and nothing else should be changed\n            }\n        }\n\n        // 7. Then lastly, set the caret position at the right logical place\n        const targetValue = AutoNumericHelper.getElementValue(eventTarget);\n        let caretPositionInFormattedNumber;\n        if (valueHasBeenSet) {\n            switch (this.settings.onInvalidPaste) {\n                case AutoNumeric.options.onInvalidPaste.clamp:\n                    if (valueHasBeenClamped) {\n                        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                            AutoNumericHelper.setElementSelection(eventTarget, targetValue.length - this.settings.currencySymbol.length); // This puts the caret on the right of the last decimal place\n                        } else {\n                            AutoNumericHelper.setElementSelection(eventTarget, targetValue.length); // ...and this on the far right\n                        }\n\n                        break;\n                    } // else if the value has not been clamped, the default behavior is used...\n                // falls through\n                case AutoNumeric.options.onInvalidPaste.error:\n                case AutoNumeric.options.onInvalidPaste.ignore:\n                case AutoNumeric.options.onInvalidPaste.truncate:\n                case AutoNumeric.options.onInvalidPaste.replace:\n                default :\n                    // Whenever one or multiple characters are pasted, this means we have to manage the potential thousand separators that could be added by the formatting\n                    caretPositionInFormattedNumber = AutoNumericHelper.findCaretPositionInFormattedNumber(result, caretPositionOnInitialTextAfterPasting, targetValue, this.settings.decimalCharacter);\n                    AutoNumericHelper.setElementSelection(eventTarget, caretPositionInFormattedNumber);\n            }\n        }\n\n        // 8. We make sure we send an input event only if the result is different from the initial value before the paste\n        if (valueHasBeenSet && initialFormattedValue !== targetValue) {\n            // On a 'normal' non-autoNumeric input, an `input` event is sent when a paste is done. We mimic that.\n            this._triggerEvent(AutoNumeric.events.native.input, eventTarget);\n            this.lastVal = targetValue;  // update it to avoid deleting an extra char when the pasted content is selected and removed by hitting backspace (see also _onKeyDown)\n        }\n    }\n\n    /**\n     * When focusing out of the input, we check if the value has changed, and if it has, then we send a `change` event (since the native one would have been prevented by `e.preventDefault()` called in the other event listeners).\n     * We also update the info of the focused state in the `this.isFocused` variable.\n     *\n     * @param {Event} e\n     */\n    _onBlur(e) {\n        // Keep track if the element is currently focused\n        this.isFocused = false;\n        // Keep track if the user is currently editing the element\n        this.isEditing = false;\n\n        // Send a `change` event if the raw value has been changed since the last focus or 'enter' validation\n        if (AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(this.rawValue) !== AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(this.rawValueOnFocus)) {\n            this._triggerEvent(AutoNumeric.events.native.change, e.target);\n        }\n\n        this.rawValueOnFocus = void(0); // Reset the tracker\n    }\n\n    /**\n     * Helper function that DRY the similar behaviors of the mousewheel and up/down arrow keys, which increment/decrement the element value, either by a fixed value, or using the 'progressive' heuristic\n     *\n     * @param {WheelEvent|KeyboardEvent} e The `wheel` or keyboard event\n     * @param {boolean} isUp Defines if the event should increment the value\n     * @param {boolean} isDown Defines if the event should decrement the value\n     * @param {string|number} step The step to be applied to the increment/decrement action\n     * @private\n     */\n    _wheelAndUpDownActions(e, isUp, isDown, step) {\n        // 0) First, save the caret position so we can set it back once the value has been changed\n        const selectionStart = e.target.selectionStart || 0;\n        const selectionEnd = e.target.selectionEnd || 0;\n\n        // 1) Get the unformatted value\n        const currentUnformattedValue = this.rawValue;\n\n        let result;\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(currentUnformattedValue)) {\n            // If by default the input is empty, start at '0'\n            if (this.settings.minimumValue > 0 || this.settings.maximumValue < 0) {\n                // or if '0' is not between min and max value, 'minimumValue' if the user does a wheelup, 'maximumValue' if the user does a wheeldown\n                if (isUp) {\n                    result = this.settings.minimumValue;\n                } else {\n                    result = this.settings.maximumValue;\n                }\n            } else {\n                result = 0;\n            }\n        } else {\n            result = currentUnformattedValue;\n        }\n\n        result = +result; // Typecast to a number needed for the following addition/subtraction\n\n        // 2) Increment/Decrement the value\n        // But first, choose the increment/decrement method ; fixed or progressive\n        if (AutoNumericHelper.isNumber(step)) {\n            const stepToUse = +step; // Typecast to a number needed for the following addition/subtraction\n            // Fixed method\n            // This is the simplest method, where a fixed offset in added/subtracted from the current value\n            if (isUp) { // Increment\n                result += stepToUse;\n            } else if (isDown) { // Decrement\n                result -= stepToUse;\n            }\n        } else {\n            // Progressive method\n            // For this method, we calculate an offset that is in relation to the size of the current number (using only the integer part size).\n            // The bigger the number, the bigger the offset (usually the number count in the integer part minus 3, except for small numbers where a different behavior is better for the user experience).\n            //TODO Known limitation : The progressive method does not play well with numbers between 0 and 1 where to modify the decimal places the rawValue first has to go from '1' to '0'\n            if (isUp) { // Increment\n                result = AutoNumericHelper.addAndRoundToNearestAuto(result, this.settings.decimalPlacesRawValue);\n            } else if (isDown) { // Decrement\n                result = AutoNumericHelper.subtractAndRoundToNearestAuto(result, this.settings.decimalPlacesRawValue);\n            }\n        }\n\n        // 3) Set the new value so it gets formatted\n        // First clamp the result if needed\n        result = AutoNumericHelper.clampToRangeLimits(result, this.settings);\n        if (result !== +currentUnformattedValue) {\n            // Only 'set' the value if it has changed. For instance 'set' should not happen if the user hits a limit and continue to try to go past it since we clamp the value.\n            this.set(result);\n\n            // Since we changed the input value, we send a native `input` event\n            this._triggerEvent(AutoNumeric.events.native.input, e.target);\n        }\n\n        //XXX Do not prevent if the value is not modified? From a UX point of view, preventing the wheel event when the user use it on top of an autoNumeric element should always be done, even if the value does not change. Perhaps that could affect other scripts relying on this event to be sent though.\n        e.preventDefault(); // We prevent the page to scroll while we increment/decrement the value\n\n        // 4) Finally, we set back the caret position/selection\n        // There is no need to take into account the fact that the number count could be different at the end of the wheel event ; it would be too complex and most of the time unreliable\n        this._setSelection(selectionStart, selectionEnd);\n    }\n\n    /**\n     * Handler for up and down arrow keys\n     * Increment or decrement the element value according to the `upDownStep` option chosen\n     *\n     * @param {KeyboardEvent} e\n     */\n    upDownArrowAction(e) {\n        if (this.formulaMode ||\n            this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n            return;\n        }\n\n        let isUp = false;\n        let isDown = false;\n        if (this.eventKey === AutoNumericEnum.keyName.UpArrow) {\n            isUp = true;\n        } else if (this.eventKey === AutoNumericEnum.keyName.DownArrow) {\n            isDown = true;\n        } else {\n            AutoNumericHelper.throwError('Something has gone wrong since neither an Up or Down arrow key is detected, but the function was still called!');\n        }\n\n        this._wheelAndUpDownActions(e, isUp, isDown, this.settings.upDownStep);\n    }\n\n    /**\n     * Handler for 'wheel' event\n     *\n     * @param {WheelEvent} e\n     */\n    _onWheel(e) {\n        if (this.formulaMode) {\n            return;\n        }\n\n        if (this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n            // Do not allow scrolling in a readonly element (fix issue #541)\n            return;\n        }\n\n        if (this.settings.modifyValueOnWheel) {\n            if (this.settings.wheelOn === AutoNumeric.options.wheelOn.focus) {\n                if (this.isFocused) {\n                    if (!e.shiftKey) {\n                        this.wheelAction(e);\n                    }\n                } else if (e.shiftKey) {\n                    this.wheelAction(e);\n                }\n            } else if (this.settings.wheelOn === AutoNumeric.options.wheelOn.hover) {\n                if (!e.shiftKey) {\n                    this.wheelAction(e);\n                } else {\n                    // Note: When not `defaultPrevented`, Shift + mouse wheel is reserved by the browsers for horizontal scrolling.\n                    // Hence, using the Shift key with the `wheelOn` 'hover' option will only scroll the page if we prevent the default behavior\n                    e.preventDefault(); // Do not scroll horizontally\n\n                    // Scroll vertically\n                    window.scrollBy(0, AutoNumericHelper.isNegativeStrict(String(e.deltaY))?-50:50); // `e.deltaY` is usually too small compared to how the page is scrolled. That's why we use a fixed offset.\n                }\n            } else {\n                AutoNumericHelper.throwError('Unknown `wheelOn` option.');\n            }\n        }\n    }\n\n    /**\n     * Increment or decrement the element value according to the `wheelStep` option chosen\n     *\n     * @param {WheelEvent} e The `wheel` event\n     */\n    wheelAction(e) {\n        this.isWheelEvent = true; // Keep the info that we are currently managing a mouse wheel event\n\n        let isUp = false;\n        let isDown = false;\n        let isDeltaYZero = false;\n        if (AutoNumericHelper.isWheelUpEvent(e)) {\n            isUp = true;\n        } else if (AutoNumericHelper.isWheelDownEvent(e)) {\n            isDown = true;\n        } else if (AutoNumericHelper.isWheelEventWithZeroDeltaY(e)) {\n            // Ignore that event (maybe call e.preventDefault() ?), fixes issue #776\n            isDeltaYZero = true;\n        } else {\n            AutoNumericHelper.throwError(`The event is not a 'wheel' event.`);\n        }\n\n        if (!isDeltaYZero) {\n            this._wheelAndUpDownActions(e, isUp, isDown, this.settings.wheelStep);\n        }\n\n        this.isWheelEvent = false; // Set back the mouse wheel indicator to its default\n    }\n\n    /**\n     * Handler for 'drop' event\n     *\n     * @param {DragEvent} e\n     */\n    _onDrop(e) {\n        if (this.formulaMode) { // Dropping while in formula mode shouldn't be possible. This is done 'just in case'\n            return;\n        }\n\n        // Note: by default browsers already prevent the drop on readOnly and disabled elements\n        this.isDropEvent = true;\n        e.preventDefault();\n\n        const droppedText = e.dataTransfer.getData('text/plain');\n        const cleanedValue = this.unformatOther(droppedText);\n        const previousValue = this.rawValue;\n        this.set(cleanedValue);\n        this.isDropEvent = false;\n\n        // Test if a change event must be sent (if the dropped value is different from before)\n        const newValue = this.constructor._toNumericValue(cleanedValue, this.settings);\n        if (!isNaN(Number(newValue))) {\n            if (AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(previousValue) !== AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(newValue)) {\n                this._triggerEvent(AutoNumeric.events.native.change, this.domElement);\n            }\n        }\n    }\n\n    /**\n     * Handler for 'submit' events happening on the parent <form> element.\n     * If `unformatOnSubmit` is set to `true`, the element value is first unformatted before the form is submitted.\n     *\n     * @returns {boolean}\n     */\n    _onFormSubmit() {\n        // Search for all the AutoNumeric children of the form element and call the `_unformatOnSubmit()` function\n        const inputElements = this._getFormAutoNumericChildren(this.parentForm);\n        const aNElements = inputElements.map(aNElement => this.constructor.getAutoNumericElement(aNElement));\n        aNElements.forEach(aNElement => aNElement._unformatOnSubmit());\n\n        return true;\n    }\n\n    /**\n     * Handler for 'reset' events caught on the parent <form> element.\n     * When such event is detected, then every child AutoNumeric elements must format their default value that the browser is forcing upon them.\n     *\n     * @private\n     */\n    _onFormReset() {\n        const inputElements = this._getFormAutoNumericChildren(this.parentForm);\n        const aNElements = inputElements.map(aNElement => this.constructor.getAutoNumericElement(aNElement));\n        // Tell all the AutoNumeric children to format their default value\n        aNElements.forEach(aNElement => {\n            const val = this._getDefaultValue(aNElement.node());\n            // aNElement.set(val); //XXX If I use that line, the format is first correctly done, but the form reset is still not finished and will overwrite the formatting. This is why we need to use the following setTimeout line.\n            setTimeout(() => aNElement.set(val), 0); //XXX This is an ugly hack, but it seems to be the accepted answer to this problem (https://stackoverflow.com/a/8152960/2834898). This is sad. Do note that I use '0ms' here since using `setTimeout` will push that code on the event stack, and as soon as the reset will be finished, this will be run (see https://stackoverflow.com/a/23987283/2834898).\n        });\n    }\n\n    /**\n     * Unformat the element value according to the `unformatOnSubmit` option\n     *\n     * @private\n     */\n    _unformatOnSubmit() {\n        if (this.settings.unformatOnSubmit) {\n            this._setElementValue(this.rawValue);\n        }\n    }\n\n    /**\n     * Listen for the `alt` key keydown event globally, and if the event is caught, unformat the AutoNumeric element that is hovered by the mouse.\n     *\n     * @param {KeyboardEvent} e\n     * @private\n     */\n    _onKeydownGlobal(e) {\n        //TODO Find a way to keep the caret position between the alt keyup/keydown states\n        if (AutoNumericHelper.character(e) === AutoNumericEnum.keyName.Alt) {\n            const hoveredElement = AutoNumericHelper.getHoveredElement();\n            if (AutoNumeric.isManagedByAutoNumeric(hoveredElement)) {\n                const anElement = AutoNumeric.getAutoNumericElement(hoveredElement);\n                if (!anElement.formulaMode && anElement.settings.unformatOnHover) {\n                    this.constructor._unformatAltHovered(anElement);\n                }\n            }\n        }\n    }\n\n    /**\n     * Listen for the `alt` key keyup event globally, and if the event is caught, reformat the AutoNumeric element that is hovered by the mouse.\n     *\n     * @param {KeyboardEvent} e\n     * @private\n     */\n    _onKeyupGlobal(e) {\n        if (AutoNumericHelper.character(e) === AutoNumericEnum.keyName.Alt) {\n            const hoveredElement = AutoNumericHelper.getHoveredElement();\n            if (AutoNumeric.isManagedByAutoNumeric(hoveredElement)) {\n                const anElement = AutoNumeric.getAutoNumericElement(hoveredElement);\n                if (anElement.formulaMode || !anElement.settings.unformatOnHover) {\n                    return;\n                }\n\n                this.constructor._reformatAltHovered(anElement);\n            }\n        }\n    }\n\n    /**\n     * Handler for 'compositionstart' events. \n     * \n     * When using IME (Input Method Editor) to input characters, the browser will fire a 'compositionstart' event when the user starts typing in the IME,\n     * and a 'compositionend' event when the user has finished typing and the characters are committed.\n     * During the composition, the value is not yet formatted, and the user can still change the input.\n     *\n     * @param {CompositionEvent} e\n     * @private\n     */\n    _onCompositionstart(e) { // eslint-disable-line no-unused-vars\n        // prepare internal state for trigger format on compositionend\n        const eventInitDict = { key: AutoNumericEnum.keyName.Space, which: '32', keyCode: '32' };\n        const keydownEvent = new KeyboardEvent('keydown', eventInitDict);\n        e.target.dispatchEvent(keydownEvent);\n\n        this.compositioning = true;\n    }\n\n    /**\n     * Handler for 'compositionend' events.\n     * \n     * @param {CompositionEvent} e\n     * @private\n     */\n    _onCompositionend(e) {\n        this.compositioning = false;\n\n        // Trigger format\n        const eventInitDict = { key: AutoNumericEnum.keyName.Space, which: '32', keyCode: '32' };\n        const keypressEvent = new KeyboardEvent('keypress', eventInitDict);\n        e.target.dispatchEvent(keypressEvent);\n        const keyupEvent = new KeyboardEvent('keyup', eventInitDict);\n        e.target.dispatchEvent(keyupEvent);\n    }\n\n    /**\n     * Return `true` if the DOM element is supported by autoNumeric.\n     * A supported element is an element whitelisted in the `allowedTagList`.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isElementTagSupported() {\n        if (!AutoNumericHelper.isElement(this.domElement)) {\n            AutoNumericHelper.throwError(`The DOM element is not valid, ${this.domElement} given.`);\n        }\n\n        return AutoNumericHelper.isInArray(this.domElement.tagName.toLowerCase(), this.allowedTagList);\n    }\n\n    /**\n     * Return `true` in the DOM element is an <input>.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isInputElement() {\n        return this.domElement.tagName.toLowerCase() === 'input';\n    }\n\n    /**\n     * Return `true` if the input type is supported by AutoNumeric\n     *\n     * @returns {boolean}\n     * @throws\n     */\n    _isInputTypeSupported() {\n        return (this.domElement.type === 'text' ||\n                this.domElement.type === 'hidden' ||\n                this.domElement.type === 'tel' ||\n                AutoNumericHelper.isUndefinedOrNullOrEmpty(this.domElement.type));\n    }\n\n    /**\n     * Check if the DOM element is supported by autoNumeric.\n     * A supported element is either an <input> element with the correct 'type' attribute, or a tag whitelisted in the `allowedTagList` array.\n     * If the check fails, this method throws.\n     * This function also sets the info `this.isInputElement` which keep tracks if the DOM element is an <input> or not, and the `this.isContentEditable` if the element has the `contenteditable` attribute set to `true` initially.\n     *\n     * @throws\n     * @private\n     */\n    _checkElement() {\n        const currentElementTag = this.domElement.tagName.toLowerCase();\n\n        if (!this._isElementTagSupported()) {\n            AutoNumericHelper.throwError(`The <${currentElementTag}> tag is not supported by autoNumeric`);\n        }\n\n        if (this._isInputElement()) {\n            if (!this._isInputTypeSupported()) {\n                AutoNumericHelper.throwError(`The input type \"${this.domElement.type}\" is not supported by autoNumeric`);\n            }\n\n            this.isInputElement = true;\n        } else {\n            this.isInputElement = false;\n            this.isContentEditable = this._isContentEditable(this.domElement);\n        }\n    }\n\n    /**\n     * Returns `true` if the given DOM element is a contenteditable one (set to `true`)\n     *\n     * @param {HTMLElement} domElement\n     * @returns {boolean}\n     */\n    _isContentEditable(domElement) {\n        return domElement.hasAttribute('contenteditable') && domElement.getAttribute('contenteditable') === 'true';\n    }\n\n    /**\n     * Formats the default value on page load.\n     * This is called only if the `formatOnPageLoad` option is set to `true`.\n     *\n     * @param {number|string|null} forcedInitialValue The value that should be used for initialization, in place on the eventual html one\n     */\n    _formatDefaultValueOnPageLoad(forcedInitialValue = null) {\n        let setValue = true;\n        let currentValue;\n        if (!AutoNumericHelper.isNull(forcedInitialValue)) {\n            currentValue = forcedInitialValue;\n        } else {\n            // Make sure the initial value does not have any superfluous whitespaces around it (Fix issue #479)\n            currentValue = AutoNumericHelper.getElementValue(this.domElement).trim();\n            // Correct the DOM attribute in case some whitespaces were present\n            this.domElement.setAttribute('value', currentValue);\n        }\n\n        if (this.isInputElement || this.isContentEditable) {\n            /*\n             * If the input value has been set by the dev, but not directly as an attribute in the html, then it takes\n             * precedence and should get formatted during the initialization (if this input value is a valid number and that the\n             * developer wants it formatted on init (cf. the `settings.formatOnPageLoad` option)).\n             * Note; this is true whatever the developer has set for `data-default-value-override` in the html (asp.net users).\n             *\n             * In other words : if `defaultValueOverride` is not null, it means the developer is trying to prevent postback problems.\n             * But if `input.value` is set to a number, and the html `value` attribute is not set, then it means the dev has\n             * changed the input value, and then it means we should not overwrite his own decision to do so.\n             * Hence, if `defaultValueOverride` is not null, but `input.value` is a number and `this.domElement.hasAttribute('value')`\n             * is false, we should ignore `defaultValueOverride` altogether.\n             */\n            const unLocalizedCurrentValue = this.constructor._toNumericValue(currentValue, this.settings); // This allows to use a localized value on startup\n            if (!this.domElement.hasAttribute('value') || this.domElement.getAttribute('value') === '') {\n                // Check if the `value` is valid or not\n                if (!isNaN(Number(unLocalizedCurrentValue)) && Infinity !== unLocalizedCurrentValue) {\n                    this.set(unLocalizedCurrentValue);\n                    setValue = false;\n                } else {\n                    // If not, inform the developer that nothing usable has been provided\n                    AutoNumericHelper.throwError(`The value [${currentValue}] used in the input is not a valid value autoNumeric can work with.`);\n                }\n            } else {\n                /* Checks for :\n                 * - page reload from back button, and\n                 * - ASP.net form post back\n                 *      The following HTML data attribute is REQUIRED (data-an-default=\"same value as the value attribute\")\n                 *      example: <asp:TextBox runat=\"server\" id=\"someID\" text=\"1234.56\" data-an-default=\"1234.56\">\n                 */\n                if ((this.settings.defaultValueOverride !== null && this.settings.defaultValueOverride.toString() !== currentValue) ||\n                    (this.settings.defaultValueOverride === null && currentValue !== '' && currentValue !== this.domElement.getAttribute('value')) ||\n                    (currentValue !== '' && this.domElement.getAttribute('type') === 'hidden' && !AutoNumericHelper.isNumber(unLocalizedCurrentValue))) {\n                    if (this.settings.saveValueToSessionStorage && (this.settings.decimalPlacesShownOnFocus !== null || this.settings.divisorWhenUnfocused)) {\n                        this._setRawValue(this._getValueFromPersistentStorage());\n                    }\n\n                    // If the decimalPlacesShownOnFocus value should NOT be saved in sessionStorage\n                    if (!this.settings.saveValueToSessionStorage) {\n                        const toStrip = this.constructor._removeBrackets(currentValue, this.settings);\n                        if ((this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix ||\n                            (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.prefix && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) &&\n                            this.settings.negativeSignCharacter !== '' &&\n                            AutoNumericHelper.isNegative(currentValue, this.settings.negativeSignCharacter)) {\n                            this._setRawValue(`-${this.constructor._stripAllNonNumberCharacters(toStrip, this.settings, true, this.isFocused)}`);\n                        } else {\n                            this._setRawValue(this.constructor._stripAllNonNumberCharacters(toStrip, this.settings, true, this.isFocused));\n                        }\n                    }\n\n                    setValue = false;\n                }\n            }\n\n            if (currentValue === '') {\n                switch (this.settings.emptyInputBehavior) {\n                    case AutoNumeric.options.emptyInputBehavior.focus:\n                    case AutoNumeric.options.emptyInputBehavior.press:\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.always:\n                        this._setElementValue(this.settings.currencySymbol);\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.min:\n                        this.set(this.settings.minimumValue);\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.max:\n                        this.set(this.settings.maximumValue);\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.zero:\n                        this.set('0');\n                        break;\n                    // It's possible to set the `null` value as the initial value\n                    case AutoNumeric.options.emptyInputBehavior.null:\n                        this.set(null);\n                        break;\n                    // When `emptyInputBehavior` is a number or a string representing a number\n                    default:\n                        this.set(this.settings.emptyInputBehavior);\n                }\n            } else if (setValue && currentValue === this.domElement.getAttribute('value')) {\n                this.set(currentValue);\n            }\n        } else if (this.settings.defaultValueOverride === null ||\n            this.settings.defaultValueOverride === currentValue) {\n            this.set(currentValue);\n        }\n    }\n\n    /**\n     * Enhance the user experience by modifying the default `negativePositiveSignPlacement` option depending on `currencySymbol` and `currencySymbolPlacement`.\n     *\n     * If the user has not set the placement of the negative sign (`negativePositiveSignPlacement`), but has set a currency symbol (`currencySymbol`),\n     * then we modify the default value of `negativePositiveSignPlacement` in order to keep the resulting output logical by default :\n     * - \"$-1,234.56\" instead of \"-$1,234.56\" ({currencySymbol: \"$\", negativePositiveSignPlacement: \"r\"})\n     * - \"-1,234.56$\" instead of \"1,234.56-$\" ({currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"p\"})\n     *\n     * @param {object} settings\n     */\n    static _correctNegativePositiveSignPlacementOption(settings) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        // If negativePositiveSignPlacement is already set, we do not overwrite it\n        if (!AutoNumericHelper.isNull(settings.negativePositiveSignPlacement)) {\n            return;\n        }\n\n        if (!AutoNumericHelper.isUndefined(settings) &&\n            AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.negativePositiveSignPlacement) &&\n            !AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.currencySymbol)) {\n            switch (settings.currencySymbolPlacement) {\n                case AutoNumeric.options.currencySymbolPlacement.suffix:\n                    settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix; // Default -1,234.56 €\n                    break;\n                case AutoNumeric.options.currencySymbolPlacement.prefix:\n                    settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.left; // Default -$1,234.56\n                    break;\n                default :\n                //\n            }\n        } else {\n            // Sets the default value if `negativePositiveSignPlacement` is `null`\n            settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.left;\n        }\n    }\n\n    /**\n     * Correct the `caretPositionOnFocus` and `selectOnFocus` options, since setting both leads to a conflict.\n     * This method directly modifies the `options` object passed as a parameter, then returns it.\n     * It returns `null` if the given option is `null`.\n     *\n     * @param {object} options The options passed as an argument by the user\n     * @returns {object|null}\n     * @private\n     */\n    static _correctCaretPositionOnFocusAndSelectOnFocusOptions(options) {\n        if (AutoNumericHelper.isNull(options)) {\n            return null;\n        }\n\n        // If the user has set the `caretPositionOnFocus` option, do not set `selectOnFocus` to `true` by default\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(options.caretPositionOnFocus) && AutoNumericHelper.isUndefinedOrNullOrEmpty(options.selectOnFocus)) {\n            options.selectOnFocus = AutoNumeric.options.selectOnFocus.doNotSelect;\n        }\n\n        // If the user has set the `selectOnFocus` option to `true`, set `caretPositionOnFocus` to `doNoForceCaretPosition`\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(options.caretPositionOnFocus) && !AutoNumericHelper.isUndefinedOrNullOrEmpty(options.selectOnFocus) && options.selectOnFocus === AutoNumeric.options.selectOnFocus.select) {\n            options.caretPositionOnFocus = AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition;\n        }\n\n        return options;\n    }\n\n    /**\n     * Calculate the number de decimal places to be used by the AutoNumeric object, for each of its state, and for its formatted and raw value.\n     * By default, the `rawValue` precision is the same as the formatted value one.\n     *\n     * This method is called during the AutoNumeric object initialization. This assumes some internal variable state.\n     *\n     * This method set the following options accordingly to their own value and the mandatory `decimalPlaces` option:\n     * - decimalPlacesRawValue     (nullable)\n     * - decimalPlacesShownOnBlur  (nullable)\n     * - decimalPlacesShownOnFocus (nullable)\n     *\n     * Note: the `decimalPlaces` option is only used here and only serve to define those three previous options value.\n     * AutoNumeric will then *only* use `decimalPlacesRawValue`, `decimalPlacesShownOnBlur` and `decimalPlacesShownOnFocus` from there.\n     *\n     * This method directly modifies the `settings` object passed as a parameter.\n     *\n     * @param {object} settings This is an object with the new settings to use.\n     * @private\n     */\n    static _calculateDecimalPlacesOnInit(settings) {\n        // Check the `decimalPlaces*` options and output any warnings as needed, before modifying those options\n        this._validateDecimalPlacesRawValue(settings);\n\n        // Initialization phase\n        //XXX This assumes at this stage, `settings.decimalPlaces` as been set from the default options\n\n        // Overwrite the `decimalPlaces*` values if the `decimalPlaces*` options are not set in the `settings`\n        // Sets `decimalPlacesShownOnBlur` (previously known as `scaleDecimalPlaces`)\n        if (settings.decimalPlacesShownOnFocus === AutoNumeric.options.decimalPlacesShownOnFocus.useDefault)  {\n            settings.decimalPlacesShownOnFocus = settings.decimalPlaces;\n        }\n\n        if (settings.decimalPlacesShownOnBlur === AutoNumeric.options.decimalPlacesShownOnBlur.useDefault)  {\n            settings.decimalPlacesShownOnBlur = settings.decimalPlaces;\n        }\n\n        if (settings.decimalPlacesRawValue === AutoNumeric.options.decimalPlacesRawValue.useDefault)  {\n            settings.decimalPlacesRawValue = settings.decimalPlaces;\n        }\n\n        // Add the additional decimal places to the raw value\n        let additionalDecimalPlacesRawValue = 0;\n        if (settings.rawValueDivisor && settings.rawValueDivisor !== AutoNumeric.options.rawValueDivisor.none) {\n            additionalDecimalPlacesRawValue = String(settings.rawValueDivisor).length - 1; // i.e. Dividing by '100' adds 2 decimal places to the needed precision\n            if (additionalDecimalPlacesRawValue < 0) {\n                additionalDecimalPlacesRawValue = 0;\n            }\n        }\n\n        settings.decimalPlacesRawValue = Math.max(\n            Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue,\n            Number(settings.originalDecimalPlacesRawValue) + additionalDecimalPlacesRawValue,\n        );\n    }\n\n    /**\n     * Recalculate the number de decimal places to be used by the AutoNumeric object, for each of its state, and for its formatted and raw value.\n     * By default, the `rawValue` precision is the same as the formatted value one.\n     *\n     * This method is close to the one called during initialization, `_calculateDecimalPlacesOnInit()`, but with slight difference so that the `decimalPlaces*` options are correctly updated as needed.\n     *\n     * This methods set the following options accordingly to their own value and the mandatory `decimalPlaces` option:\n     * - decimalPlacesRawValue     (nullable)\n     * - decimalPlacesShownOnBlur  (nullable)\n     * - decimalPlacesShownOnFocus (nullable)\n     *\n     * Note: the `decimalPlaces` option is only used here and only serve to define those three previous options value.\n     * AutoNumeric will then *only* use `decimalPlacesRawValue`, `decimalPlacesShownOnBlur` and `decimalPlacesShownOnFocus` from there.\n     *\n     * This methods directly modifies the `settings` object passed as a parameter.\n     *\n     * @param {object} settings This is an object with the new settings to use.\n     * @param {object} currentSettings This is the current settings (`this.settings`) used by the element.\n     * @private\n     */\n    static _calculateDecimalPlacesOnUpdate(settings, currentSettings = null) {\n        // Check the `decimalPlaces*` options and output any warnings as needed, before modifying those options\n        this._validateDecimalPlacesRawValue(settings);\n\n        // Update phase\n        if (AutoNumericHelper.isNull(currentSettings)) {\n            AutoNumericHelper.throwError(`When updating the settings, the previous ones should be passed as an argument.`);\n        }\n\n        const decimalPlacesInOptions = 'decimalPlaces' in settings;\n        if (!(decimalPlacesInOptions ||\n                'decimalPlacesRawValue' in settings ||\n                'decimalPlacesShownOnFocus' in settings ||\n                'decimalPlacesShownOnBlur' in settings ||\n                'rawValueDivisor' in settings)) {\n            // Do Nothing if no decimal places-related options are modified\n            return;\n        }\n\n        // Overwrite the `decimalPlaces*` values if the `decimalPlaces*` options are not set in the `settings`\n        if (decimalPlacesInOptions) {\n            if (!('decimalPlacesShownOnFocus' in settings) ||\n                settings.decimalPlacesShownOnFocus === AutoNumeric.options.decimalPlacesShownOnFocus.useDefault)  {\n                settings.decimalPlacesShownOnFocus = settings.decimalPlaces;\n            }\n\n            if (!('decimalPlacesShownOnBlur' in settings) ||\n                settings.decimalPlacesShownOnBlur === AutoNumeric.options.decimalPlacesShownOnBlur.useDefault)  {\n                settings.decimalPlacesShownOnBlur = settings.decimalPlaces;\n            }\n\n            if (!('decimalPlacesRawValue' in settings) ||\n                settings.decimalPlacesRawValue === AutoNumeric.options.decimalPlacesRawValue.useDefault)  {\n                settings.decimalPlacesRawValue = settings.decimalPlaces;\n            }\n        } else {\n            if (AutoNumericHelper.isUndefined(settings.decimalPlacesShownOnFocus)) {\n                settings.decimalPlacesShownOnFocus = currentSettings.decimalPlacesShownOnFocus;\n            }\n\n            if (AutoNumericHelper.isUndefined(settings.decimalPlacesShownOnBlur)) {\n                settings.decimalPlacesShownOnBlur = currentSettings.decimalPlacesShownOnBlur;\n            }\n        }\n\n        // Add the additional decimal places to the raw value\n        let additionalDecimalPlacesRawValue = 0;\n        if (settings.rawValueDivisor && settings.rawValueDivisor !== AutoNumeric.options.rawValueDivisor.none) {\n            additionalDecimalPlacesRawValue = String(settings.rawValueDivisor).length - 1; // i.e. Dividing by '100' adds 2 decimal places to the needed precision\n            if (additionalDecimalPlacesRawValue < 0) {\n                additionalDecimalPlacesRawValue = 0;\n            }\n        }\n\n        if (!settings.decimalPlaces && !settings.decimalPlacesRawValue) {\n            settings.decimalPlacesRawValue = Math.max(\n                Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue,\n                Number(currentSettings.originalDecimalPlacesRawValue) + additionalDecimalPlacesRawValue,\n            );\n        } else {\n            settings.decimalPlacesRawValue = Math.max(\n                Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue,\n                Number(settings.decimalPlacesRawValue) + additionalDecimalPlacesRawValue,\n            );\n        }\n    }\n\n    /**\n     * Analyze and save the minimumValue and maximumValue integer size for later uses\n     * @private\n     */\n    _calculateVMinAndVMaxIntegerSizes() {\n        let [maximumValueIntegerPart] = this.settings.maximumValue.toString().split('.');\n        let [minimumValueIntegerPart] = (!this.settings.minimumValue && this.settings.minimumValue !== 0)?[]:this.settings.minimumValue.toString().split('.');\n        maximumValueIntegerPart = maximumValueIntegerPart.replace(this.settings.negativeSignCharacter, '');\n        minimumValueIntegerPart = minimumValueIntegerPart.replace(this.settings.negativeSignCharacter, '');\n\n        this.settings.mIntPos = Math.max(maximumValueIntegerPart.length, 1);\n        this.settings.mIntNeg = Math.max(minimumValueIntegerPart.length, 1);\n    }\n\n    /**\n     * Calculate once what are the `valuesToStrings` option keys.\n     * @private\n     */\n    _calculateValuesToStringsKeys() {\n        if (this.settings.valuesToStrings) {\n            this.valuesToStringsKeys = Object.keys(this.settings.valuesToStrings);\n        } else {\n            this.valuesToStringsKeys = [];\n        }\n    }\n\n    /**\n     * Caches regular expressions for _stripAllNonNumberCharactersExceptCustomDecimalChar\n     *\n     * @param {object} settings\n     * @param {object} regex\n     */\n    static _cachesUsualRegularExpressions(settings, regex) {\n        // Test if there is a negative character in the string\n        let negativeSignReg;\n        if (settings.negativeSignCharacter !== AutoNumeric.options.negativeSignCharacter.hyphen) {\n            negativeSignReg = `([-\\\\${settings.negativeSignCharacter}]?)`;\n        } else {\n            negativeSignReg = '(-?)';\n        }\n\n        regex.aNegRegAutoStrip = negativeSignReg;\n        settings.allowedAutoStrip = new RegExp(`[^-0123456789\\\\${settings.decimalCharacter}]`, 'g');\n        settings.numRegAutoStrip = new RegExp(`${negativeSignReg}(?:\\\\${settings.decimalCharacter}?([0-9]+\\\\${settings.decimalCharacter}[0-9]+)|([0-9]*(?:\\\\${settings.decimalCharacter}[0-9]*)?))`);\n\n        // Using this regex version `^${regex.aNegRegAutoStrip}0*(\\\\d|$)` entirely clear the input on blur\n        settings.stripReg = new RegExp(`^${regex.aNegRegAutoStrip}0*([0-9])`);\n\n        // All the characters that are accepted during the formula mode\n        settings.formulaChars = new RegExp(`[0-9${settings.decimalCharacter}+\\\\-*/() ]`);\n    }\n\n    /**\n     * Modify the user settings to make them 'exploitable' later.\n     */\n    _transformOptionsValuesToDefaultTypes() {\n        for (const key in this.settings) {\n            if (Object.prototype.hasOwnProperty.call(this.settings, key)) {\n                const value = this.settings[key];\n\n                // Convert the strings 'true' and 'false' to booleans\n                if (value === 'true' || value === 'false') {\n                    this.settings[key] = value === 'true';\n                }\n\n                // Convert numbers in options to strings\n                //TODO Only transform the values of type 'Number' to 'String' if it's a currency number (so that we can have big numbers). Do not convert other numbers (i.e. `historySize`)\n                if (typeof value === 'number') {\n                    this.settings[key] = value.toString();\n                }\n            }\n        }\n    }\n\n    /**\n     * Convert the old settings options name to new ones.\n     *\n     * @param {object} options\n     */\n    static _convertOldOptionsToNewOnes(options) {\n        //TODO Delete this function once the old options are not used anymore\n        const oldOptionsConverter = {\n            // Old option names, with their corresponding new names\n            aSep                              : 'digitGroupSeparator',\n            nSep                              : 'showOnlyNumbersOnFocus',\n            dGroup                            : 'digitalGroupSpacing',\n            aDec                              : 'decimalCharacter',\n            altDec                            : 'decimalCharacterAlternative',\n            aSign                             : 'currencySymbol',\n            pSign                             : 'currencySymbolPlacement',\n            pNeg                              : 'negativePositiveSignPlacement',\n            aSuffix                           : 'suffixText',\n            oLimits                           : 'overrideMinMaxLimits',\n            vMax                              : 'maximumValue',\n            vMin                              : 'minimumValue',\n            mDec                              : 'decimalPlacesOverride',\n            eDec                              : 'decimalPlacesShownOnFocus',\n            scaleDecimal                      : 'decimalPlacesShownOnBlur',\n            aStor                             : 'saveValueToSessionStorage',\n            mRound                            : 'roundingMethod',\n            aPad                              : 'allowDecimalPadding',\n            nBracket                          : 'negativeBracketsTypeOnBlur',\n            wEmpty                            : 'emptyInputBehavior',\n            lZero                             : 'leadingZero',\n            aForm                             : 'formatOnPageLoad',\n            sNumber                           : 'selectNumberOnly',\n            anDefault                         : 'defaultValueOverride',\n            unSetOnSubmit                     : 'unformatOnSubmit',\n            outputType                        : 'outputFormat',\n            debug                             : 'showWarnings',\n\n            // Current options :\n            allowDecimalPadding               : true,\n            alwaysAllowDecimalCharacter       : true,\n            caretPositionOnFocus              : true,\n            createLocalList                   : true,\n            currencySymbol                    : true,\n            currencySymbolPlacement           : true,\n            decimalCharacter                  : true,\n            decimalCharacterAlternative       : true,\n            decimalPlaces                     : true,\n            decimalPlacesRawValue             : true,\n            decimalPlacesShownOnBlur          : true,\n            decimalPlacesShownOnFocus         : true,\n            defaultValueOverride              : true,\n            digitalGroupSpacing               : true,\n            digitGroupSeparator               : true,\n            divisorWhenUnfocused              : true,\n            emptyInputBehavior                : true,\n            eventBubbles                      : true,\n            eventIsCancelable                 : true,\n            failOnUnknownOption               : true,\n            formatOnPageLoad                  : true,\n            formulaMode                       : true,\n            historySize                       : true,\n            isCancellable                     : true,\n            leadingZero                       : true,\n            maximumValue                      : true,\n            minimumValue                      : true,\n            modifyValueOnUpDownArrow          : true,\n            modifyValueOnWheel                : true,\n            negativeBracketsTypeOnBlur        : true,\n            negativePositiveSignPlacement     : true,\n            negativeSignCharacter             : true,\n            negativePositiveSignBehavior      : true,\n            noEventListeners                  : true,\n            onInvalidPaste                    : true,\n            outputFormat                      : true,\n            overrideMinMaxLimits              : true,\n            positiveSignCharacter             : true,\n            rawValueDivisor                   : true,\n            readOnly                          : true,\n            roundingMethod                    : true,\n            saveValueToSessionStorage         : true,\n            selectNumberOnly                  : true,\n            selectOnFocus                     : true,\n            serializeSpaces                   : true,\n            showOnlyNumbersOnFocus            : true,\n            showPositiveSign                  : true,\n            showWarnings                      : true,\n            styleRules                        : true,\n            suffixText                        : true,\n            symbolWhenUnfocused               : true,\n            upDownStep                        : true,\n            unformatOnHover                   : true,\n            unformatOnSubmit                  : true,\n            valuesToStrings                   : true,\n            watchExternalChanges              : true,\n            wheelOn                           : true,\n            wheelStep                         : true,\n\n            // Additional information that are added to the `settings` object :\n            //TODO Find a way to exclude those internal data from the settings object (ideally by using another object, or better yet, class attributes) -->\n            allowedAutoStrip                  : true,\n            formulaChars                      : true,\n            isNegativeSignAllowed             : true,\n            isPositiveSignAllowed             : true,\n            mIntNeg                           : true,\n            mIntPos                           : true,\n            numRegAutoStrip                   : true,\n            originalDecimalPlaces             : true,\n            originalDecimalPlacesRawValue     : true,\n            stripReg                          : true,\n        };\n\n        for (const option in options) {\n            if (Object.prototype.hasOwnProperty.call(options, option)) {\n                if (oldOptionsConverter[option] === true) {\n                    // If the option is a 'new' option, we continue looping\n                    continue;\n                }\n\n                if (Object.prototype.hasOwnProperty.call(oldOptionsConverter, option)) {\n                    // Else we have an 'old' option name\n                    AutoNumericHelper.warning(`You are using the deprecated option name '${option}'. Please use '${oldOptionsConverter[option]}' instead from now on. The old option name will be dropped very soon™.`, true);\n\n                    // Then we modify the initial option object to use the new options instead of the old ones\n                    options[oldOptionsConverter[option]] = options[option];\n                    delete options[option];\n                } else if (options.failOnUnknownOption) {\n                    // ...or the option name is unknown. This means there is a problem with the options object, therefore we throw an error.\n                    AutoNumericHelper.throwError(`Option name '${option}' is unknown. Please fix the options passed to autoNumeric`);\n                }\n            }\n        }\n\n        if ('mDec' in options) {\n            AutoNumericHelper.warning('The old `mDec` option has been deprecated in favor of more accurate options ; `decimalPlaces`, `decimalPlacesRawValue`, `decimalPlacesShownOnFocus` and `decimalPlacesShownOnBlur`.', true);\n        }\n    }\n\n    /**\n     * Analyse the settings/options passed by the user, validate and clean them, then set them into `this.settings`.\n     * Note: This sets the settings to `null` if somehow the settings objet is undefined or empty\n     *       If only `decimalPlaces` is defined in the option, overwrite the other decimalPlaces* options, otherwise, use those options\n     *\n     * @param {object} options\n     * @param {boolean} update - If set to `true`, then the settings already exists and this function only updates them instead of recreating them from scratch\n     * @throws\n     */\n    _setSettings(options, update = false) {\n        // If the user used old options, we convert them to new ones\n        if (update || !AutoNumericHelper.isNull(options)) {\n            this.constructor._convertOldOptionsToNewOnes(options);\n        }\n\n        if (update) {\n            // The settings are updated\n            // Update the original data, if it has changed\n            const decimalPlacesRawValueInOptions = 'decimalPlacesRawValue' in options;\n            if (decimalPlacesRawValueInOptions) {\n                this.settings.originalDecimalPlacesRawValue = options.decimalPlacesRawValue;\n            }\n\n            const decimalPlacesInOptions = 'decimalPlaces' in options;\n            if (decimalPlacesInOptions) {\n                this.settings.originalDecimalPlaces = options.decimalPlaces;\n            }\n\n            // Then update all the `decimalPlaces*` options\n            this.constructor._calculateDecimalPlacesOnUpdate(options, this.settings);\n\n            // Finally generate the updated settings object to use\n            this._mergeSettings(options); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)\n        } else {\n            // The settings are generated for the first time\n            this.settings = {};\n            // If we couldn't grab any settings, create them from the default ones and combine them with the options passed as a parameter as well as with the HTML5 `data-*` info (via `this.domElement.dataset`), if any.\n            this._mergeSettings(this.constructor.getDefaultConfig(), this.domElement.dataset, options, { rawValue : this.defaultRawValue });\n            this.caretFix = false;\n            this.throwInput = true; // Throw input event\n            this.allowedTagList = AutoNumericEnum.allowedTagList;\n            this.runOnce = false;\n            this.hoveredWithAlt = false; // Keep tracks if the current AutoNumeric element is hovered by the mouse cursor while `Alt` is pressed\n        }\n\n        // Modify the user settings to make them 'exploitable'\n        this._transformOptionsValuesToDefaultTypes();\n\n        // Immediately run the callbacks that could update the settings object\n        this._runCallbacksFoundInTheSettingsObject();\n\n        // Improve the `negativePositiveSignPlacement` option if needed\n        this.constructor._correctNegativePositiveSignPlacementOption(this.settings);\n\n        // Set the `caretPositionOnFocus` and `selectOnFocus` options so that they do not conflict, if one of those have been set manually by the user.\n        // If order to check that, we take a look at the original options the user passed as an argument, not `this.settings` that have been merged with the default settings. //TODO Check the validity of that comment\n        this.constructor._correctCaretPositionOnFocusAndSelectOnFocusOptions(this.settings);\n\n        // Define if the negative or positive signs are allowed\n        this.constructor._setNegativePositiveSignPermissions(this.settings);\n\n        // Calculate the number of decimal places (during the element initialization)\n        if (!update) {\n            // Make sure the `originalDecimalPlaces` info is set\n            if (AutoNumericHelper.isNull(options) || !options.decimalPlaces) {\n                this.settings.originalDecimalPlaces = null;\n            } else {\n                this.settings.originalDecimalPlaces = options.decimalPlaces;\n            }\n\n            // Save the `originalDecimalPlacesRawValue` info\n            this.settings.originalDecimalPlacesRawValue = this.settings.decimalPlacesRawValue;\n\n            // Then update all the `decimalPlaces*` options\n            this.constructor._calculateDecimalPlacesOnInit(this.settings);\n        }\n\n        // Additional changes to the settings object\n        this._calculateVMinAndVMaxIntegerSizes();\n        this._setTrailingNegativeSignInfo();\n        this.regex = {}; // Create the object that will store the regular expressions\n        this.constructor._cachesUsualRegularExpressions(this.settings, this.regex);\n        this.constructor._setBrackets(this.settings);\n        this._calculateValuesToStringsKeys();\n\n        // Validate the settings. Both tests throws if necessary.\n        if (AutoNumericHelper.isEmptyObj(this.settings)) {\n            AutoNumericHelper.throwError('Unable to set the settings, those are invalid ; an empty object was given.');\n        }\n\n        this.constructor.validate(this.settings, false, options);\n\n        // Original settings saved for use when decimalPlacesShownOnFocus, divisorWhenUnfocused & showOnlyNumbersOnFocus options are being used\n        this._keepAnOriginalSettingsCopy();\n    }\n\n    /**\n     * Define if the negative or positive signs are allowed, and update the given settings object directly.\n     *\n     * @param {object} settings\n     * @private\n     */\n    static _setNegativePositiveSignPermissions(settings) {\n        settings.isNegativeSignAllowed = settings.minimumValue < 0;\n        settings.isPositiveSignAllowed = settings.maximumValue >= 0;\n    }\n\n    /**\n     * Convert the `value` parameter that can either be :\n     * - a real number,\n     * - a number represented in the scientific notation (i.e. -123.4567e-6)\n     * - a string representing a real number, or\n     * - a string representing a localized number (with specific group separators and decimal character),\n     * ...to a string representing a real 'javascript' number (i.e. '1234' or '1234.567').\n     *\n     * This function returns `NaN` if such conversion fails.\n     *\n     * @param {int|float|string} value\n     * @param {object} settings\n     * @returns {string|NaN}\n     */\n    static _toNumericValue(value, settings) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        let result;\n        if (AutoNumericHelper.isNumber(Number(value))) { // if (settings.decimalCharacter === '.' && AutoNumericHelper.isNumber(Number(value))) {\n            // The value has either already been stripped, or a 'real' javascript number is passed as a parameter\n            if (!AutoNumericHelper.isNumberStrict(value)) {\n                value = String(value).trim(); // cf. issue #721\n            }\n            result = AutoNumericHelper.scientificToDecimal(value);\n        } else {\n            // Else if it's a string that `Number()` cannot typecast, then we try to convert the localized numeric string to a numeric one\n            // Convert the value to a numeric string, stripping unnecessary characters in the process\n            result = this._convertToNumericString(value.toString(), settings);\n\n            // If the result is still not a numeric string, then we throw a warning\n            if (!AutoNumericHelper.isNumber(Number(result))) {\n                AutoNumericHelper.warning(`The given value \"${value}\" cannot be converted to a numeric one and therefore cannot be used appropriately.`, settings.showWarnings);\n                result = NaN;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the pasted text that will be used, by stripping most non-numeric characters\n     *\n     * @param {string} text\n     * @returns {string}\n     */\n    _preparePastedText(text) {\n        return this.constructor._stripAllNonNumberCharacters(text, this.settings, true, this.isFocused);\n    }\n\n    /**\n     * Return TRUE if the given value (a number as a string) is within the range set in the settings `minimumValue` and `maximumValue`, FALSE otherwise.\n     *\n     * @param {string} value\n     * @param {object} parsedMinValue Parsed via the `parseStr()` function\n     * @param {object} parsedMaxValue Parsed via the `parseStr()` function\n     * @returns {boolean}\n     */\n    static _checkIfInRange(value, parsedMinValue, parsedMaxValue) {\n        const parsedValue = AutoNumericHelper.parseStr(value);\n        return AutoNumericHelper.testMinMax(parsedMinValue, parsedValue) > -1 && AutoNumericHelper.testMinMax(parsedMaxValue, parsedValue) < 1;\n    }\n\n    /**\n     * Update the selection values as well as resets the internal state of the current AutoNumeric object.\n     * This keeps tracks of the current selection and resets the 'processed' state.\n     *\n     * Note : This state can change between the keydown, keypress and keyup events, that's why\n     *        this function is called on each event handler.\n     *\n     * @private\n     */\n    _updateInternalProperties() {\n        this.selection = AutoNumericHelper.getElementSelection(this.domElement);\n        this.processed = false;\n    }\n\n    /**\n     * Update the `event.key` attribute that triggered the given event.\n     *\n     * `event.key` describes:\n     * - the key name (if a non-printable character),\n     * - or directly the character that result from the key press used to trigger the event.\n     *\n     * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n     * The key list is described here:\n     * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n     *\n     * @param {Event|KeyboardEvent} e\n     * @private\n     */\n    _updateEventKeyInfo(e) {\n        this.eventKey = AutoNumericHelper.character(e);\n    }\n\n    /**\n     * Save the unformatted element value.\n     * This is used in the 'cancellable' feature where the element value is saved on focus and input validation, to be used if the user wants to cancel his modifications by hitting the 'Escape' key.\n     *\n     * @private\n     */\n    _saveCancellableValue() {\n        this.savedCancellableValue = this.rawValue;\n    }\n\n    /**\n     * Set the text selection inside the input with the given start and end position.\n     *\n     * @param {int} start\n     * @param {int} end\n     * @private\n     */\n    _setSelection(start, end) {\n        //TODO use this function to replace the direct calls to `setElementSelection()`, wherever possible\n        start = Math.max(start, 0);\n        end = Math.min(end, AutoNumericHelper.getElementValue(this.domElement).length);\n        this.selection = {\n            start,\n            end,\n            length: end - start,\n        };\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n    }\n\n    /**\n     * Set the caret position inside the input at the given position.\n     *\n     * @param {int} position\n     * @private\n     */\n    _setCaretPosition(position) {\n        this._setSelection(position, position);\n    }\n\n    /**\n     * Return an array containing the string parts located on the left and right side of the caret or selection.\n     * Those parts are left 'untouched', i.e. formatted by autoNumeric.\n     *\n     * @returns {[string, string]} The parts on the left and right of the caret or selection\n     * @private\n     */\n    _getLeftAndRightPartAroundTheSelection() {\n        const value = AutoNumericHelper.getElementValue(this.domElement);\n        const left = value.substring(0, this.selection.start);\n        const right = value.substring(this.selection.end, value.length);\n\n        return [left, right];\n    }\n\n    /**\n     * Return an array containing the string parts located on the left and right side of the caret or selection.\n     * Those parts are unformatted (stripped) of any non-numbers characters, and any trailing negative character is put back on the left hand side of the number.\n     *\n     * @returns {[string, string]} The parts on the left and right of the caret or selection, unformatted.\n     * @private\n     */\n    _getUnformattedLeftAndRightPartAroundTheSelection() {\n        let [left, right] = this._getLeftAndRightPartAroundTheSelection();\n        if (left === '' && right === '') {\n            return ['', ''];\n        }\n\n        // If changing the sign and `left` is equal to the number zero, prevent stripping the leading zero(s)\n        let stripZeros = true;\n        if ((this.eventKey === AutoNumericEnum.keyName.Hyphen || this.eventKey === AutoNumericEnum.keyName.Minus) && Number(left) === 0) {\n            stripZeros = false;\n        }\n\n        //TODO DRY that with `_normalizeParts()` -->\n        if (this.isTrailingNegative &&\n            ((AutoNumericHelper.isNegative(right, this.settings.negativeSignCharacter) && // The caret is placed on the left of the negative sign\n            !AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter)) ||\n            (right === '' && // ...or the caret is placed on the far right of the input (Fix issue #481)\n            AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter, true)))) {\n            left = left.replace(this.settings.negativeSignCharacter, '');\n            right = right.replace(this.settings.negativeSignCharacter, '');\n            // This is done here because `_getUnformattedLeftAndRightPartAroundTheSelection()` is called multiple times during the same key event, and at one point the left/right value has been normalized already..\n            left = left.replace('-', '');\n            right = right.replace('-', '');\n\n            // Then finally set back the normalized minus character at the right place\n            left = `-${left}`;\n        }\n\n        left = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left, this.settings, stripZeros, this.isFocused);\n        right = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(right, this.settings, false, this.isFocused);\n\n        return [left, right];\n    }\n\n    /**\n     * Strip parts from excess characters and leading zeros.\n     *\n     * @param {string} left\n     * @param {string} right\n     * @returns {[*,*,*]}\n     * @private\n     */\n    _normalizeParts(left, right) {\n        //TODO Refactor with `_getUnformattedLeftAndRightPartAroundTheSelection` which share a lot of similar code\n        // If changing the sign and left is equal to the number zero - prevents stripping the leading zeros\n        let stripZeros = true;\n        if ((this.eventKey === AutoNumericEnum.keyName.Hyphen || this.eventKey === AutoNumericEnum.keyName.Minus) && Number(left) === 0) {\n            stripZeros = false;\n        }\n\n        if (this.isTrailingNegative &&\n            AutoNumericHelper.isNegative(right, this.settings.negativeSignCharacter) &&\n            !AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter)) {\n            // Only set the negative sign if the value is negative\n            left = `-${left}`;\n            right = right.replace(this.settings.negativeSignCharacter, '');\n        }\n\n        left = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left, this.settings, stripZeros, this.isFocused);\n        right = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(right, this.settings, false, this.isFocused);\n\n        // Prevents multiple leading zeros from being entered\n        if (this.settings.leadingZero === AutoNumeric.options.leadingZero.deny &&\n            (this.eventKey === AutoNumericEnum.keyName.num0 || this.eventKey === AutoNumericEnum.keyName.numpad0) &&\n            Number(left) === 0 &&\n            // If `right` is not empty and the first character is not `decimalCharacter`\n            !AutoNumericHelper.contains(left, this.settings.decimalCharacter) && right !== '') {\n            left = left.substring(0, left.length - 1);\n        }\n\n        // Insert zero there is a leading dot\n        let newValue = left + right;\n        if (this.settings.decimalCharacter) {\n            const m = newValue.match(new RegExp(`^${this.regex.aNegRegAutoStrip}\\\\${this.settings.decimalCharacter}`));\n            if (m) {\n                left = left.replace(m[1], m[1] + '0');\n                newValue = left + right;\n            }\n        }\n\n        return [left, right, newValue];\n    }\n\n    /**\n     * Set the formatted element value as well as the `rawValue`.\n     * This returns `true` if the element and raw value have been modified, `false` otherwise.\n     * This method also adjust the caret position according to the `leadingZero` option and the normalized value. //TODO What about the cursor *selection*?\n     *\n     * @param {string} left\n     * @param {string} right\n     * @param {boolean} isPaste\n     * @returns {boolean}\n     * @private\n     */\n    _setValueParts(left, right, isPaste = false) {\n        const [normalizedLeft, normalizedRight, normalizedNewValue] = this._normalizeParts(left, right);\n        const [minTest, maxTest] = AutoNumeric._checkIfInRangeWithOverrideOption(normalizedNewValue, this.settings);\n\n        if (minTest && maxTest) {\n            // First, set the raw value\n            const roundedRawValue = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesRawValue);\n            const testValue = roundedRawValue.replace(this.settings.decimalCharacter, '.');\n\n            if (testValue === '' || testValue === this.settings.negativeSignCharacter) {\n                let valueToSetOnEmpty;\n                switch (this.settings.emptyInputBehavior) {\n                    case AutoNumeric.options.emptyInputBehavior.focus:\n                    case AutoNumeric.options.emptyInputBehavior.press:\n                    case AutoNumeric.options.emptyInputBehavior.always:\n                        valueToSetOnEmpty = '';\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.min:\n                        valueToSetOnEmpty = this.settings.minimumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.max:\n                        valueToSetOnEmpty = this.settings.maximumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.zero:\n                        valueToSetOnEmpty = '0';\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.null:\n                        valueToSetOnEmpty = null;\n                        break;\n                    // When `emptyInputBehavior` is a number or a string representing a number\n                    default:\n                        valueToSetOnEmpty = this.settings.emptyInputBehavior;\n                }\n\n                this._setRawValue(valueToSetOnEmpty);\n            } else {\n                this._setRawValue(this._trimLeadingAndTrailingZeros(testValue));\n            }\n\n            // Then set the formatted value\n            const roundedValueToShow = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesShownOnFocus);\n            let position = normalizedLeft.length;\n            if (position > roundedValueToShow.length) {\n                position = roundedValueToShow.length;\n            }\n\n            // Make sure when the user enter a '0' on the far left with a leading zero option set to 'deny', that the caret does not move since the input is dropped (fix issue #283)\n            if (position === 1 && normalizedLeft === '0' && this.settings.leadingZero === AutoNumeric.options.leadingZero.deny) {\n                // If the user enter `0`, then the caret is put on the right side of it (Fix issue #299)\n                if (normalizedRight === '' || normalizedLeft === '0' && normalizedRight !== '') {\n                    position = 1;\n                } else {\n                    position = 0;\n                }\n            }\n\n            this._setElementValue(roundedValueToShow, false);\n            this._setCaretPosition(position);\n\n            return true;\n        }\n\n        this._triggerRangeEvents(minTest, maxTest);\n\n        return false;\n    }\n\n    /**\n     * Helper function for `_expandSelectionOnSign()`.\n     *\n     * @returns {Array} Array containing [signPosition, currencySymbolPosition] of a formatted value\n     * @private\n     */\n    _getSignPosition() {\n        let result;\n        if (this.settings.currencySymbol) {\n            const currencySymbolLen = this.settings.currencySymbol.length;\n            const value = AutoNumericHelper.getElementValue(this.domElement);\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n                const hasNeg = this.settings.negativeSignCharacter && value && value.charAt(0) === this.settings.negativeSignCharacter;\n                if (hasNeg) {\n                    result = [1, currencySymbolLen + 1];\n                } else {\n                    result = [0, currencySymbolLen];\n                }\n            } else {\n                const valueLen = value.length;\n                result = [valueLen - currencySymbolLen, valueLen];\n            }\n        } else {\n            result = [1000, -1];\n        }\n\n        return result;\n    }\n\n    /**\n     * Expands selection to cover whole sign\n     * Prevents partial deletion/copying/overwriting of a sign\n     * @private\n     */\n    _expandSelectionOnSign() {\n        const [signPosition, currencySymbolPosition] = this._getSignPosition();\n        const selection = this.selection;\n\n        // If selection catches something except sign and catches only space from sign\n        if (selection.start < currencySymbolPosition && selection.end > signPosition) {\n            // Then select without empty space\n            if ((selection.start < signPosition || selection.end > currencySymbolPosition) &&\n                AutoNumericHelper.getElementValue(this.domElement).substring(Math.max(selection.start, signPosition), Math.min(selection.end, currencySymbolPosition))\n                    .match(/^\\s*$/)) {\n                if (selection.start < signPosition) {\n                    this._setSelection(selection.start, signPosition);\n                } else {\n                    this._setSelection(currencySymbolPosition, selection.end);\n                }\n            } else {\n                // Else select with whole sign\n                this._setSelection(Math.min(selection.start, signPosition), Math.max(selection.end, currencySymbolPosition));\n            }\n        }\n    }\n\n    /**\n     * Try to strip pasted value to digits\n     */\n    _checkPaste() {\n        // Do not process anything if the value has already been formatted\n        if (this.formatted) {\n            return;\n        }\n\n        if (!AutoNumericHelper.isUndefined(this.valuePartsBeforePaste)) {\n            const oldParts = this.valuePartsBeforePaste;\n            const [left, right] = this._getLeftAndRightPartAroundTheSelection();\n\n            // Try to strip the pasted value first\n            delete this.valuePartsBeforePaste;\n\n            const modifiedLeftPart = left.substr(0, oldParts[0].length) + AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left.substr(oldParts[0].length), this.settings, true, this.isFocused);\n            if (!this._setValueParts(modifiedLeftPart, right, true)) {\n                this._setElementValue(oldParts.join(''), false);\n                this._setCaretPosition(oldParts[0].length);\n            }\n        }\n    }\n\n    /**\n     * Return `true` if the given key should be ignored or not.\n     *\n     * @param {string} eventKeyName\n     * @returns {boolean}\n     * @private\n     */\n    static _shouldSkipEventKey(eventKeyName) {\n        const isFnKeys = AutoNumericHelper.isInArray(eventKeyName, AutoNumericEnum.keyName._allFnKeys);\n        const isOSKeys = eventKeyName === AutoNumericEnum.keyName.OSLeft || eventKeyName === AutoNumericEnum.keyName.OSRight;\n        const isContextMenu = eventKeyName === AutoNumericEnum.keyName.ContextMenu;\n        const isSomeNonPrintableKeys = AutoNumericHelper.isInArray(eventKeyName, AutoNumericEnum.keyName._someNonPrintableKeys);\n        const isOtherNonPrintableKeys = eventKeyName === AutoNumericEnum.keyName.NumLock ||\n            eventKeyName === AutoNumericEnum.keyName.ScrollLock ||\n            eventKeyName === AutoNumericEnum.keyName.Insert ||\n            eventKeyName === AutoNumericEnum.keyName.Command;\n        const isUnrecognizableKeys = eventKeyName === AutoNumericEnum.keyName.Unidentified;\n\n        return isFnKeys || isOSKeys || isContextMenu || isSomeNonPrintableKeys || isUnrecognizableKeys || isOtherNonPrintableKeys;\n    }\n\n    /**\n     * Process copying, cutting and pasting, as well as undo/redoing and cursor moving.\n     * Return `true` if further processing should not be performed.\n     *\n     * @param {KeyboardEvent} e\n     * @returns {boolean}\n     * @private\n     */\n    _processNonPrintableKeysAndShortcuts(e) {\n        // Catch the ctrl up on ctrl-v\n        if (((e.ctrlKey || e.metaKey) && e.type === 'keyup' && !AutoNumericHelper.isUndefined(this.valuePartsBeforePaste)) || (e.shiftKey && this.eventKey === AutoNumericEnum.keyName.Insert)) {\n            //TODO Move this test inside the `onKeyup` handler\n            this._checkPaste();\n\n            return false;\n        }\n\n        // Skip all function keys (F1-F12), Windows keys, tab and other special keys\n        if (this.constructor._shouldSkipEventKey(this.eventKey)) {\n            return true;\n        }\n\n        // If a \"Select all\" keyboard shortcut is detected (ctrl + a)\n        if ((e.ctrlKey || e.metaKey) && this.eventKey === AutoNumericEnum.keyName.a) {\n            if (this.settings.selectNumberOnly) {\n                // `preventDefault()` is used here to prevent the browser to first select all the input text (including the currency sign), otherwise we would see that whole selection first in a flash, then the selection with only the number part without the currency sign.\n                e.preventDefault();\n                //TODO replace `selectNumber` by `select`?\n                this.selectNumber();\n            }\n\n            return true;\n        }\n\n        // If a \"Copy\", \"Paste\" or \"Cut\" keyboard shortcut is detected (respectively 'ctrl + c', 'ctrl + v' or 'ctrl + x')\n        if ((e.ctrlKey || e.metaKey) &&\n            (this.eventKey === AutoNumericEnum.keyName.c ||\n             this.eventKey === AutoNumericEnum.keyName.v ||\n             this.eventKey === AutoNumericEnum.keyName.x)) {\n            if (e.type === 'keydown') {\n                this._expandSelectionOnSign();\n            }\n\n            // Try to prevent wrong paste\n            if (this.eventKey === AutoNumericEnum.keyName.v || this.eventKey === AutoNumericEnum.keyName.Insert) {\n                if (e.type === 'keydown' || e.type === 'keypress') {\n                    if (AutoNumericHelper.isUndefined(this.valuePartsBeforePaste)) {\n                        this.valuePartsBeforePaste = this._getLeftAndRightPartAroundTheSelection();\n                    }\n                } else {\n                    this._checkPaste();\n                }\n            }\n\n            return e.type === 'keydown' || e.type === 'keypress' || this.eventKey === AutoNumericEnum.keyName.c;\n        }\n\n\n        // If the ctrl/meta key is used (during the undo shortcut for instance)\n        if (e.ctrlKey || e.metaKey) {\n            return !(this.eventKey === AutoNumericEnum.keyName.Z || this.eventKey === AutoNumericEnum.keyName.z);\n        }\n\n        // Jump over the thousand separator\n        //TODO Move this test inside the `onKeydown` handler\n        if (this.eventKey === AutoNumericEnum.keyName.LeftArrow || this.eventKey === AutoNumericEnum.keyName.RightArrow) {\n            if (e.type === 'keydown' && !e.shiftKey) {\n                const value = AutoNumericHelper.getElementValue(this.domElement);\n                if (this.eventKey === AutoNumericEnum.keyName.LeftArrow &&\n                    (value.charAt(this.selection.start - 2) === this.settings.digitGroupSeparator ||\n                    value.charAt(this.selection.start - 2) === this.settings.decimalCharacter)) {\n                    this._setCaretPosition(this.selection.start - 1);\n                } else if (this.eventKey === AutoNumericEnum.keyName.RightArrow &&\n                    (value.charAt(this.selection.start + 1) === this.settings.digitGroupSeparator ||\n                    value.charAt(this.selection.start + 1) === this.settings.decimalCharacter)) {\n                    this._setCaretPosition(this.selection.start + 1);\n                }\n            }\n\n            return true;\n        }\n\n        return AutoNumericHelper.isInArray(this.eventKey, AutoNumericEnum.keyName._directionKeys);\n    }\n\n    /**\n     * Process deletion of characters when the minus sign is to the right of the numeric characters.\n     *\n     * @param {string[]} leftAndRight The parts on the left and on the right of the caret or selection as an array with [left, right]\n     * @returns {string[]} Processed left and right as an array with [left, right]\n     * @private\n     */\n    _processCharacterDeletionIfTrailingNegativeSign([left, right]) {\n        const value = AutoNumericHelper.getElementValue(this.domElement);\n        const isValNegative = AutoNumericHelper.isNegative(value, this.settings.negativeSignCharacter);\n\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix) {\n            if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                this.caretFix = (this.selection.start >= value.indexOf(this.settings.suffixText) && this.settings.suffixText !== '');\n                if (value.charAt(this.selection.start - 1) === '-') {\n                    left = left.substring(1);\n                } else if (this.selection.start <= value.length - this.settings.suffixText.length) {\n                    left = left.substring(0, left.length - 1);\n                }\n            } else {\n                this.caretFix = (this.selection.start >= value.indexOf(this.settings.suffixText) && this.settings.suffixText !== '');\n                if (this.selection.start >= value.indexOf(this.settings.currencySymbol) + this.settings.currencySymbol.length) {\n                    right = right.substring(1, right.length);\n                }\n                if (AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter) && value.charAt(this.selection.start) === '-') {\n                    left = left.substring(1);\n                }\n            }\n        }\n\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            switch (this.settings.negativePositiveSignPlacement) {\n                case AutoNumeric.options.negativePositiveSignPlacement.left:\n                    this.caretFix = (this.selection.start >= value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length);\n                    if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                        if (this.selection.start === (value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length) && isValNegative) {\n                            left = left.substring(1);\n                        } else if (left !== '-' && ((this.selection.start <= value.indexOf(this.settings.negativeSignCharacter)) || !isValNegative)) {\n                            left = left.substring(0, left.length - 1);\n                        }\n                    } else {\n                        if (left[0] === '-') {\n                            right = right.substring(1);\n                        }\n                        if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter) && isValNegative) {\n                            left = left.substring(1);\n                        }\n                    }\n                    break;\n                case AutoNumeric.options.negativePositiveSignPlacement.right:\n                    this.caretFix = (this.selection.start >= value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length);\n                    if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                        if (this.selection.start === (value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length)) {\n                            left = left.substring(1);\n                        } else if (left !== '-' && this.selection.start <= (value.indexOf(this.settings.negativeSignCharacter) - this.settings.currencySymbol.length)) {\n                            left = left.substring(0, left.length - 1);\n                        } else if (left !== '' && !isValNegative) {\n                            left = left.substring(0, left.length - 1);\n                        }\n                    } else {\n                        this.caretFix = (this.selection.start >= value.indexOf(this.settings.currencySymbol) && this.settings.currencySymbol !== '');\n                        if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter)) {\n                            left = left.substring(1);\n                        }\n\n                        right = right.substring(1);\n                    }\n                    break;\n            }\n        }\n\n        return [left, right];\n    }\n\n    /**\n     * Process the deletion of characters.\n     * Returns `true` if the deletion is allowed (within the min and max range, according to the `overrideMinMaxLimits` option), `false` otherwise.\n     *\n     * @param {Event} e\n     * @returns {boolean}\n     */\n    _processCharacterDeletion(e) {\n        let left;\n        let right;\n\n        if (!this.selection.length) {\n            [left, right] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n            if (left === '' && right === '') {\n                this.throwInput = false;\n            }\n\n            if (this.isTrailingNegative && AutoNumericHelper.isNegative(AutoNumericHelper.getElementValue(this.domElement), this.settings.negativeSignCharacter)) {\n                [left, right] = this._processCharacterDeletionIfTrailingNegativeSign([left, right]);\n            } else {\n                if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                    left = left.substring(0, left.length - 1);\n                } else {\n                    right = right.substring(1, right.length);\n                }\n            }\n        } else {\n            this._expandSelectionOnSign();\n            [left, right] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n        }\n\n        if (!this.constructor._isWithinRangeWithOverrideOption(`${left}${right}`, this.settings)) {\n            // If the result with the deletion would be out of the range, we prevent it\n            return false;\n        }\n        if (AutoNumericHelper.getElementValue(e.target) === this.settings.currencySymbol) {\n            return false;\n        }\n\n        this._setValueParts(left, right);\n\n        return true;\n    }\n\n    /**\n     * Return `true` if a decimal character is allowed to be typed.\n     * If the number of decimal places shown on focus is zero, then the decimal character is not allowed.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isDecimalCharacterInsertionAllowed() {\n        return String(this.settings.decimalPlacesShownOnFocus) !== String(AutoNumeric.options.decimalPlacesShownOnFocus.none) &&\n            String(this.settings.decimalPlaces) !== String(AutoNumeric.options.decimalPlaces.none);\n    }\n\n    /**\n     * Return `true` if the key is allowed.\n     * This function decides if the key pressed should be dropped or accepted, and modify the value 'on-the-fly' accordingly.\n     * //TODO This should use another function in order to separate the test and the modification\n     *\n     * @returns {boolean}\n     */\n    _processCharacterInsertion() {\n        let [left, right] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n        if (this.eventKey !== AutoNumericEnum.keyName.AndroidDefault) {\n            this.throwInput = true;\n        }\n\n        // Start rules when the decimal character key is pressed always use numeric pad dot to insert decimal separator\n        // Do not allow decimal character if no decimal part allowed\n        if (this.eventKey === this.settings.decimalCharacter ||\n            (this.settings.decimalCharacterAlternative && this.eventKey === this.settings.decimalCharacterAlternative)) {\n            if (!this._isDecimalCharacterInsertionAllowed() || !this.settings.decimalCharacter) {\n                return false;\n            }\n\n            if (this.settings.alwaysAllowDecimalCharacter) {\n                // Remove any previous decimal character\n                left = left.replace(this.settings.decimalCharacter, '');\n                right = right.replace(this.settings.decimalCharacter, '');\n            } else {\n                // Do not allow a decimal character if another decimal character is already present\n                if (AutoNumericHelper.contains(left, this.settings.decimalCharacter)) {\n                    return true;\n                }\n\n                // Prevent adding a decimal character at the far right of the number\n                if (right.indexOf(this.settings.decimalCharacter) > 0) {\n                    return true;\n                }\n\n                // Remove the decimal character if found on the far left of the right part\n                if (right.indexOf(this.settings.decimalCharacter) === 0) {\n                    right = right.substr(1);\n                }\n            }\n\n            // If the user is trying to add a decimal character on the far left of the number, we allow it\n            if (this.settings.negativeSignCharacter && AutoNumericHelper.contains(right, this.settings.negativeSignCharacter)) {\n                // We need however to move the negative sign from the right to the left part\n                left = `${this.settings.negativeSignCharacter}${left}`;\n                right = right.replace(this.settings.negativeSignCharacter, '');\n            }\n\n            this._setValueParts(left + this.settings.decimalCharacter, right);\n\n            return true;\n        }\n\n        // Prevent entering the minus sign if it's not allowed (Note: `this.settings.isNegativeSignAllowed` is only set to `true` if the minimumValue is lower than zero, allowing negative numbers to be entered)\n        if ((this.eventKey === '-' || this.eventKey === '+') && this.settings.isNegativeSignAllowed) {\n            // Here, the left and right parts have been normalized already, hence the minus sign usage\n            if (left === '' && AutoNumericHelper.contains(right, '-')) {\n                // The value is originally negative (with a trailing negative sign)\n                if (this.settings.negativePositiveSignBehavior || (!this.settings.negativePositiveSignBehavior && this.eventKey === '+')) {\n                    right = right.replace('-', '');\n                }\n            } else if (AutoNumericHelper.isNegativeStrict(left, '-')) {\n                // The value is originally negative (with a leading negative sign)\n                // Remove the negative sign, effectively converting the value to a positive one\n                if (this.settings.negativePositiveSignBehavior || (!this.settings.negativePositiveSignBehavior && this.eventKey === '+')) {\n                    left = left.replace('-', '');\n                }\n            } else if (this.settings.negativePositiveSignBehavior || (!this.settings.negativePositiveSignBehavior && this.eventKey === '-')) {\n                // The value is originally positive, so we toggle the state to a negative one (unformatted, which means even with a trailing negative sign, we add the minus sign on the far left)\n                left = `${this.settings.negativeSignCharacter}${left}`;\n            }\n\n            this._setValueParts(left, right);\n\n            return true;\n        }\n\n        const eventNumber = Number(this.eventKey);\n        if (eventNumber >= 0 && eventNumber <= 9) {\n            // If the user tries to insert a digit\n            if (this.settings.isNegativeSignAllowed && left === '' && AutoNumericHelper.contains(right, '-')) {\n                // ...and that digit is before the minus sign\n                left = '-';\n                right = right.substring(1, right.length);\n            }\n\n            if (this.settings.maximumValue <= 0 &&\n                this.settings.minimumValue < this.settings.maximumValue &&\n                !AutoNumericHelper.contains(AutoNumericHelper.getElementValue(this.domElement), this.settings.negativeSignCharacter) &&\n                this.eventKey !== '0') {\n                left = `-${left}`;\n            }\n\n            this._setValueParts(`${left}${this.eventKey}`, right);\n\n            return true;\n        }\n\n        // Prevent any other characters\n        this.throwInput = false;\n\n        return false;\n    }\n\n    /**\n     * Formatting of just processed value while keeping the cursor position\n     *\n     * @param {Event} e\n     * @private\n     */\n    _formatValue(e) {\n        //TODO Break apart and simplify this really long function\n        const elementValue = AutoNumericHelper.getElementValue(this.domElement);\n        let [left] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n\n        // No grouping separator and no currency sign\n        if ((this.settings.digitGroupSeparator  === '' || (this.settings.digitGroupSeparator !== ''  && !AutoNumericHelper.contains(elementValue, this.settings.digitGroupSeparator))) &&\n            (this.settings.currencySymbol === '' || (this.settings.currencySymbol !== '' && !AutoNumericHelper.contains(elementValue, this.settings.currencySymbol)))) {\n            let [subParts] = elementValue.split(this.settings.decimalCharacter);\n            let negativeSign = '';\n            if (AutoNumericHelper.isNegative(subParts, this.settings.negativeSignCharacter)) {\n                negativeSign = this.settings.negativeSignCharacter;\n                subParts = subParts.replace(this.settings.negativeSignCharacter, '');\n                left = left.replace('-', ''); // Here we modify the unformatted value (with the 'normal' minus sign)\n            }\n\n            // Strip leading zero on positive value if needed\n            if (negativeSign === '' && subParts.length > this.settings.mIntPos && left.charAt(0) === '0') {\n                left = left.slice(1);\n            }\n\n            // Strip leading zero on negative value if needed\n            if (negativeSign === this.settings.negativeSignCharacter && subParts.length > this.settings.mIntNeg && left.charAt(0) === '0') {\n                left = left.slice(1);\n            }\n\n            if (!this.isTrailingNegative) { // Only add the minus sign if it's needed on that side of the numbers\n                left = `${negativeSign}${left}`;\n            }\n        }\n\n        const value = this.constructor._addGroupSeparators(elementValue, this.settings, this.isFocused, this.rawValue);\n        let position = value.length;\n        if (value) {\n            // Prepare regexp which searches for cursor position from unformatted left part\n            const leftAr = left.split('');\n\n            // Fixes caret position with trailing minus sign\n            if ((this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix ||\n                (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.prefix && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) &&\n                leftAr[0] === this.settings.negativeSignCharacter && !this.settings.isNegativeSignAllowed) {\n                leftAr.shift(); // Remove the negative sign character\n\n                if ((this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete) &&\n                    this.caretFix) {\n                    if ((this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left) ||\n                        (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix)) {\n                        leftAr.push(this.settings.negativeSignCharacter);\n                        this.caretFix = e.type === 'keydown';\n                    }\n\n                    if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix &&\n                        this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.right) {\n                        const signParts = this.settings.currencySymbol.split('');\n                        const escapeChr = ['\\\\', '^', '$', '.', '|', '?', '*', '+', '(', ')', '['];\n                        const escapedParts = [];\n                        signParts.forEach((i, miniParts) => {\n                            miniParts = signParts[i];\n                            if (AutoNumericHelper.isInArray(miniParts, escapeChr)) {\n                                escapedParts.push('\\\\' + miniParts);\n                            } else {\n                                escapedParts.push(miniParts);\n                            }\n                        });\n\n                        if (this.eventKey === AutoNumericEnum.keyName.Backspace && this.settings.negativeSignCharacter === '-') {\n                            escapedParts.push('-');\n                        }\n\n                        // Pushing the escaped sign\n                        leftAr.push(escapedParts.join(''));\n                        this.caretFix = e.type === 'keydown';\n                    }\n                }\n            }\n\n            for (let i = 0; i < leftAr.length; i++) {\n                if (!leftAr[i].match('\\\\d')) {\n                    leftAr[i] = '\\\\' + leftAr[i]; // Escapes the decimal character\n                }\n            }\n\n            // Generates the regex that will search for the cursor position in the formatted value\n            let leftReg;\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                leftReg = new RegExp(`^.*?${leftAr.join('.*?')}`);\n            } else { // prefix is assumed\n                leftReg = new RegExp(`^.*?[${this.settings.currencySymbol}]*${leftAr.join('.*?')}`); // Fixes issue #647 when using a currency that has some characters in it that matches the value we just entered (i.e. numbers in the currency)\n            }\n\n            // Search cursor position in formatted value\n            const newLeft = value.match(leftReg);\n            if (newLeft) {\n                position = newLeft[0].length;\n\n                // If the positive sign is shown, calculate the caret position accordingly\n                if (this.settings.showPositiveSign) {\n                    if (position === 0 && newLeft.input.charAt(0) === this.settings.positiveSignCharacter) {\n                        position = (newLeft.input.indexOf(this.settings.currencySymbol) === 1) ? this.settings.currencySymbol.length + 1 : 1;\n                    }\n\n                    if (position === 0 && newLeft.input.charAt(this.settings.currencySymbol.length) === this.settings.positiveSignCharacter) {\n                        position = this.settings.currencySymbol.length + 1;\n                    }\n                }\n\n                // If we are just before the sign which is in prefix position\n                if (((position === 0 && value.charAt(0) !== this.settings.negativeSignCharacter) || (position === 1 && value.charAt(0) === this.settings.negativeSignCharacter)) && this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n                    // Place caret after prefix sign\n                    //TODO Should the test be 'isNegative' instead of 'isNegativeStrict' in order to search for '-' everywhere in the string?\n                    position = this.settings.currencySymbol.length + (AutoNumericHelper.isNegativeStrict(value, this.settings.negativeSignCharacter) ? 1 : 0);\n                }\n            } else {\n                if (this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                    // If we could not find a place for cursor and have a sign as a suffix\n                    // Place caret before suffix currency sign\n                    position -= this.settings.currencySymbol.length;\n                }\n\n                if (this.settings.suffixText) {\n                    // If we could not find a place for cursor and have a suffix\n                    // Place caret before suffix\n                    position -= this.settings.suffixText.length;\n                }\n            }\n        }\n\n        // Only update the value if it has changed. This prevents modifying the selection, if any.\n        if (value !== elementValue) {\n            this._setElementValue(value, false);\n            this._setCaretPosition(position);\n        }\n\n        this.formatted = true; //TODO Rename `this.formatted` to `this._formatExecuted`, since it's possible this function does not need to format anything (in the case where the keycode is dropped for instance)\n    }\n\n    /**\n     * Serialize the form child <input> element values to a string, or an Array.\n     * The output format is defined with the `formatType` argument.\n     * This is loosely based upon http://stackoverflow.com/a/40705993/2834898.\n     *\n     * @param {HTMLFormElement} form\n     * @param {boolean} intoAnArray If `true`, instead of generating a string, it generates an Array.\n     * @param {string} formatType If `'unformatted'`, then the AutoNumeric elements values are unformatted, if `'localized'`, then the AutoNumeric elements values are localized, and if `'formatted'`, then the AutoNumeric elements values are kept formatted. In either way, this function does not modify the value of each DOM element, but only affect the value that is returned by that serialize function.\n     * @param {string} serializedSpaceCharacter Can either be the '+' character, or the '%20' string.\n     * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n     * @returns {string|Array}\n     * @private\n     */\n    static _serialize(form, intoAnArray = false, formatType = 'unformatted', serializedSpaceCharacter = '+', forcedOutputFormat = null) {\n        const result = [];\n\n        if (typeof form === 'object' && form.nodeName.toLowerCase() === 'form') {\n            Array.prototype.slice.call(form.elements).forEach(element => {\n                if (element.name &&\n                    !element.disabled &&\n                    ['file', 'reset', 'submit', 'button'].indexOf(element.type) === -1) {\n                    if (element.type === 'select-multiple') {\n                        Array.prototype.slice.call(element.options).forEach(option => {\n                            if (option.selected) {\n                                //TODO Should we unformat/format/localize the selection option (which be default should be read-only)?\n                                if (intoAnArray) {\n                                    result.push({ name: element.name, value: option.value });\n                                } else { // into a string\n                                    result.push(`${encodeURIComponent(element.name)}=${encodeURIComponent(option.value)}`);\n                                }\n                            }\n                        });\n                    } else if (['checkbox', 'radio'].indexOf(element.type) === -1 || element.checked) {\n                        let valueResult;\n                        if (this.isManagedByAutoNumeric(element)) {\n                            let anObject;\n                            switch (formatType) {\n                                case 'unformatted':\n                                    anObject = this.getAutoNumericElement(element);\n                                    if (!AutoNumericHelper.isNull(anObject)) {\n                                        valueResult = this.unformat(element, anObject.getSettings());\n                                    }\n\n                                    break;\n                                case 'localized':\n                                    anObject = this.getAutoNumericElement(element);\n                                    if (!AutoNumericHelper.isNull(anObject)) {\n                                        // Here I need to clone the setting object, otherwise I would modify it when changing the `outputFormat` option value\n                                        const currentSettings = AutoNumericHelper.cloneObject(anObject.getSettings());\n                                        if (!AutoNumericHelper.isNull(forcedOutputFormat)) {\n                                            currentSettings.outputFormat = forcedOutputFormat;\n                                        }\n\n                                        valueResult = this.localize(element, currentSettings);\n                                    }\n\n                                    break;\n                                case 'formatted':\n                                default:\n                                    valueResult = element.value;\n                            }\n                        } else {\n                            valueResult = element.value;\n                        }\n\n                        if (AutoNumericHelper.isUndefined(valueResult)) {\n                            AutoNumericHelper.throwError('This error should never be hit. If it has, something really wrong happened!');\n                        }\n\n                        if (intoAnArray) {\n                            result.push({ name: element.name, value: valueResult });\n                        } else { // into a string\n                            result.push(`${encodeURIComponent(element.name)}=${encodeURIComponent(valueResult)}`);\n                        }\n                    }\n                }\n            });\n        }\n\n        let finalResult;\n\n        if (intoAnArray) {\n            // Result as an Array\n            // Note: `serializedSpaceCharacter` does not affect the array result since we do not change the space character for this one\n            finalResult = result;\n        } else {\n            // Result as a string\n            finalResult = result.join('&');\n\n            if ('+' === serializedSpaceCharacter) {\n                finalResult = finalResult.replace(/%20/g, '+');\n            }\n        }\n\n        return finalResult;\n    }\n\n    /**\n     * Serialize the form values to a string, outputting numeric strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {string}\n     */\n    static _serializeNumericString(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, false, 'unformatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Serialize the form values to a string, outputting the formatted value as strings for each AutoNumeric-managed elements.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {string}\n     */\n    static _serializeFormatted(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, false, 'formatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Serialize the form values to a string, outputting localized strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n     * @returns {string}\n     */\n    static _serializeLocalized(form, serializedSpaceCharacter = '+', forcedOutputFormat = null) {\n        return this._serialize(form, false, 'localized', serializedSpaceCharacter, forcedOutputFormat);\n    }\n\n    /**\n     * Generate an Array with the form values, outputting numeric strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {Array}\n     */\n    static _serializeNumericStringArray(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, true, 'unformatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Generate an Array with the form values, outputting the formatted value as strings for each AutoNumeric-managed elements.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {Array}\n     */\n    static _serializeFormattedArray(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, true, 'formatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Generate an Array with the form values, outputting localized strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n     * @returns {Array}\n     */\n    static _serializeLocalizedArray(form, serializedSpaceCharacter = '+', forcedOutputFormat = null) {\n        return this._serialize(form, true, 'localized', serializedSpaceCharacter, forcedOutputFormat);\n    }\n}\n\n/**\n * Initialize multiple DOM elements in one call (and possibly pass multiple values that will be mapped to each DOM element).\n *\n * @example\n * // Init multiple DOM elements in one call (and possibly pass multiple values that will be mapped to each DOM element)\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], [{ options }, 'euroPos']);\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], 12345.789, { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], 12345.789, [{ options }, 'euroPos']);\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple.french([domElement1, domElement2, domElement3], [12345.789, 234.78, null], { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple.french([domElement1, domElement2, domElement3], [12345.789, 234.78, null], [{ options }, 'euroPos']);\n *\n * // Special case, if a <form> element is passed (or any other 'parent' (or 'root') DOM element), then autoNumeric will initialize each child `<input>` elements recursively, ignoring those referenced in the `exclude` attribute\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement }, { options });\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement, exclude : [hiddenElement, tokenElement] }, { options });\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement, exclude : [hiddenElement, tokenElement] }, [12345.789, null], { options });\n *\n * // If you want to select multiple elements via a css selector, then you must use the `multiple` function. Under the hood `QuerySelectorAll` is used.\n * [anElement1, anElement2] = AutoNumeric.multiple('.myCssClass > input', { options }); // This always return an Array, even if there is only one element selected\n * [anElement1, anElement2] = AutoNumeric.multiple('.myCssClass > input', [null, 12345.789], { options }); // Idem above, but with passing the initial values too\n *\n * @param {string|Array|{ rootElement: HTMLElement }|{ rootElement: HTMLElement, exclude: Array<HTMLInputElement>}} arg1\n * @param {number|Array|object|null} initialValue\n * @param {object|Array|null} options\n * @returns {Array}\n */\nAutoNumeric.multiple = (arg1, initialValue = null, options = null) => {\n    const result = [];\n\n    // Analyze the arguments and transform them to make them exploitable\n    if (AutoNumericHelper.isObject(initialValue)) {\n        // If the user gave an option object as the second argument, instead of the initial values\n        options = initialValue;\n        initialValue = null;\n    }\n\n    if (AutoNumericHelper.isString(arg1)) {\n        arg1 = [... document.querySelectorAll(arg1)]; // Convert a NodeList to an Array (cf. http://stackoverflow.com/a/37297292/2834898)\n    } else if (AutoNumericHelper.isObject(arg1)) {\n        if (!Object.prototype.hasOwnProperty.call(arg1, 'rootElement')) {\n            AutoNumericHelper.throwError(`The object passed to the 'multiple' function is invalid ; no 'rootElement' attribute found.`);\n        }\n\n        // Retrieve the DOM element list from the given <form> element\n        const elements = [... arg1.rootElement.querySelectorAll('input')];\n        if (Object.prototype.hasOwnProperty.call(arg1, 'exclude')) {\n            if (!Array.isArray(arg1.exclude)) {\n                AutoNumericHelper.throwError(`The 'exclude' array passed to the 'multiple' function is invalid.`);\n            }\n\n            // Filter out the excluded elements\n            arg1 = AutoNumericHelper.filterOut(elements, arg1.exclude);\n        } else {\n            arg1 = elements;\n        }\n    } else if (!AutoNumericHelper.isArray(arg1)) {\n        AutoNumericHelper.throwError(`The given parameters to the 'multiple' function are invalid.`);\n    }\n\n    if (arg1.length === 0) {\n        let showWarnings = true;\n        if (!AutoNumericHelper.isNull(options) && AutoNumericHelper.isBoolean(options.showWarnings)) {\n            showWarnings = options.showWarnings;\n        }\n\n        AutoNumericHelper.warning(`No valid DOM elements were given hence no AutoNumeric objects were instantiated.`, showWarnings);\n\n        return [];\n    }\n\n    // At this point, we know `arg1` is an array of DOM elements\n\n    // This function can be initialized with two types of array, one for the initial values, and/or one for the options.\n    // So we need to find out if an array is detected if the user passed an array of initial values, or an array of options\n    // Therefore, we analyze the content of the arrays for the second and third arguments\n    // ...for the second parameter :\n    const isInitialValueArray = AutoNumericHelper.isArray(initialValue);\n    const isInitialValueArrayAndNotEmpty = isInitialValueArray && initialValue.length >= 1;\n    let secondArgumentIsInitialValueArray = false;\n    let secondArgumentIsOptionArray = false;\n    // Any of the arrays can be either an array of initial values, or an array of option object/pre-defined option names\n    if (isInitialValueArrayAndNotEmpty) {\n        const typeOfFirstArrayElement = typeof Number(initialValue[0]);\n        // First we test the second argument\n        secondArgumentIsInitialValueArray = typeOfFirstArrayElement === 'number' && !isNaN(Number(initialValue[0]));\n\n        if (!secondArgumentIsInitialValueArray) {\n            // If the second argument is an array, but not an array of values, check if it's instead an array of options/pre-defined option names\n            if (typeOfFirstArrayElement === 'string' || isNaN(typeOfFirstArrayElement) || typeOfFirstArrayElement === 'object') {\n                secondArgumentIsOptionArray = true;\n            }\n        }\n    }\n\n    // ...for the third parameter :\n    const isOptionsArrayAndNotEmpty = AutoNumericHelper.isArray(options) && options.length >= 1;\n    let thirdArgumentIsOptionArray = false;\n    if (isOptionsArrayAndNotEmpty) {\n        const typeOfFirstArrayElement = typeof options[0];\n        if (typeOfFirstArrayElement === 'string' || typeOfFirstArrayElement === 'object') {\n            // If the third argument is an array of options/pre-defined option names\n            thirdArgumentIsOptionArray = true;\n        }\n    }\n\n    // Depending on our findings, we generate the options variable to use `optionsToUse`, either directly, or merged\n    let optionsToUse;\n    if (secondArgumentIsOptionArray) {\n        optionsToUse = AutoNumeric.mergeOptions(initialValue);\n    } else if (thirdArgumentIsOptionArray) {\n        optionsToUse = AutoNumeric.mergeOptions(options);\n    } else {\n        optionsToUse = options;\n    }\n\n\n    // Initialize the initial values\n    const isInitialValueNumber = AutoNumericHelper.isNumber(initialValue);\n    let initialValueArraySize;\n    if (secondArgumentIsInitialValueArray) {\n        initialValueArraySize = initialValue.length;\n    }\n\n    // Instantiate each AutoNumeric objects\n    arg1.forEach((domElement, index) => {\n        if (isInitialValueNumber) {\n            // We set the same value for each element\n            result.push(new AutoNumeric(domElement, initialValue, optionsToUse));\n        } else if (secondArgumentIsInitialValueArray && index <= initialValueArraySize) {\n            result.push(new AutoNumeric(domElement, initialValue[index], optionsToUse));\n        } else {\n            result.push(new AutoNumeric(domElement, null, optionsToUse));\n        }\n    });\n\n    return result;\n};\n","/**\n * Options for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\n\n/**\n * Options values enumeration\n */\nAutoNumeric.options = {\n    /* Defines if the decimal places should be padded with zeroes\n     * `true`     : always pad decimals with zeros (ie. '12.3400')\n     * `false`    : never pad with zeros (ie. '12.34')\n     * `'floats'` : pad with zeroes only when there are decimals (ie. '12' and '12.3400')\n     * Note: setting allowDecimalPadding to 'false' will override the 'decimalPlaces' setting.\n     */\n    allowDecimalPadding: {\n        always: true,\n        never : false,\n        floats: 'floats',\n    },\n\n    /* Defines if the decimal character or decimal character alternative should be accepted when there is already a decimal character shown in the element.\n     * If set to `true`, any decimal character input will be accepted and will subsequently modify the decimal character position, as well as the `rawValue`.\n     * If set to `false`, the decimal character and its alternative key will be dropped as before. This is the default setting.\n     */\n    alwaysAllowDecimalCharacter: {\n        alwaysAllow: true,\n        doNotAllow: false,\n    },\n\n    /* Defines where should be positioned the caret on focus\n     * null : Do not enforce any caret positioning on focus (this is needed when using `selectOnFocus`)\n     * `'start'` : put the caret of the far left side of the value (excluding the positive/negative sign and currency symbol, if any)\n     * `'end'` : put the caret of the far right side of the value (excluding the positive/negative sign and currency symbol, if any)\n     * `'decimalLeft'` : put the caret of the left of the decimal character if any\n     * `'decimalRight'` : put the caret of the right of the decimal character if any\n     */\n    caretPositionOnFocus: {\n        start                 : 'start',\n        end                   : 'end',\n        decimalLeft           : 'decimalLeft',\n        decimalRight          : 'decimalRight',\n        doNoForceCaretPosition: null,\n    },\n\n    /* Defines if a local list of AutoNumeric objects should be kept when initializing this object.\n     * This list is used by the `global.*` functions.\n     */\n    createLocalList: {\n        createList     : true,\n        doNotCreateList: false,\n    },\n\n    /* Defines the currency symbol string.\n     * It can be a string of more than one character (allowing for instance to use a space on either side of it, example: '$ ' or ' $')\n     * cf. https://en.wikipedia.org/wiki/Currency_symbol\n     */\n    currencySymbol: {\n        none          : '',\n        currencySign  : '¤',\n        austral       : '₳', // ARA\n        australCentavo: '¢',\n        baht          : '฿', // THB\n        cedi          : '₵', // GHS\n        cent          : '¢',\n        colon         : '₡', // CRC\n        cruzeiro      : '₢', // BRB - Not used anymore since 1993\n        dollar        : '$',\n        dong          : '₫', // VND\n        drachma       : '₯', // GRD (or 'Δρχ.' or 'Δρ.')\n        dram          : '​֏', // AMD\n        european      : '₠', // XEU (old currency before the Euro)\n        euro          : '€', // EUR\n        florin        : 'ƒ',\n        franc         : '₣', // FRF\n        guarani       : '₲', // PYG\n        hryvnia       : '₴', // грн\n        kip           : '₭', // LAK\n        att           : 'ອັດ', // cents of the Kip\n        lepton        : 'Λ.', // cents of the Drachma\n        lira          : '₺', // TRY\n        liraOld       : '₤',\n        lari          : '₾', // GEL\n        mark          : 'ℳ',\n        mill          : '₥',\n        naira         : '₦', // NGN\n        peseta        : '₧',\n        peso          : '₱', // PHP\n        pfennig       : '₰', // cents of the Mark\n        pound         : '£',\n        real          : 'R$ ', // Brazilian real\n        riel          : '៛', // KHR\n        ruble         : '₽', // RUB\n        rupee         : '₹', // INR\n        rupeeOld      : '₨',\n        shekel        : '₪',\n        shekelAlt     : 'ש״ח‎‎',\n        taka          : '৳', // BDT\n        tenge         : '₸', // KZT\n        togrog        : '₮', // MNT\n        won           : '₩',\n        yen           : '¥',\n    },\n\n    /* Defines where the currency symbol should be placed (before of after the numbers)\n     * for prefix currencySymbolPlacement: \"p\" (default)\n     * for suffix currencySymbolPlacement: \"s\"\n     */\n    currencySymbolPlacement: {\n        prefix: 'p',\n        suffix: 's',\n    },\n\n    /* Defines what decimal separator character is used\n     */\n    decimalCharacter: {\n        comma                    : ',',\n        dot                      : '.',\n        middleDot                : '·',\n        arabicDecimalSeparator   : '٫',\n        decimalSeparatorKeySymbol: '⎖',\n    },\n\n    /* Allow to declare an alternative decimal separator which is automatically replaced by `decimalCharacter` when typed.\n     * This is used by countries that use a comma ',' as the decimal character and have keyboards with a numeric pads that have\n     * a period 'full stop' as the decimal character (France or Spain for instance).\n     */\n    decimalCharacterAlternative: {\n        none : null,\n        comma: ',',\n        dot  : '.',\n    },\n\n    /* Defines the default number of decimal places to show on the formatted value, and keep for the precision.\n     * Incidentally, since we need to be able to show that many decimal places, this also defines the raw value precision by default.\n     */\n    decimalPlaces: {\n        none : 0,\n        one  : 1,\n        two  : 2,\n        three: 3,\n        four : 4,\n        five : 5,\n        six  : 6,\n    },\n\n    /* Defines how many decimal places should be kept for the raw value (ie. This is the precision for float values).\n     *\n     * If this option is set to `null` (which is the default), then the value of `decimalPlaces` is used for `decimalPlacesRawValue` as well.\n     * Note: Setting this to a lower number of decimal places than the one to be shown will lead to confusion for the users.\n     */\n    decimalPlacesRawValue: {\n        useDefault: null,\n        none      : 0,\n        one       : 1,\n        two       : 2,\n        three     : 3,\n        four      : 4,\n        five      : 5,\n        six       : 6,\n    },\n\n    /* Defines how many decimal places should be visible when the element is unfocused.\n     * If this is set to `null`, then this option is ignored, and the `decimalPlaces` option value will be used instead.\n     * This means this is optional ; if omitted the decimal places will be the same when the input has the focus.\n     *\n     * This option can be used in conjonction with the two other `scale*` options, which allows to display a different formatted value when the element is unfocused, while another formatted value is shown when focused.\n     * For those `scale*` options to have any effect, `divisorWhenUnfocused` must not be `null`.\n     */\n    decimalPlacesShownOnBlur: {\n        useDefault: null,\n        none      : 0,\n        one       : 1,\n        two       : 2,\n        three     : 3,\n        four      : 4,\n        five      : 5,\n        six       : 6,\n    },\n\n    /* Defines how many decimal places should be visible when the element has the focus.\n     * If this is set to `null`, then this option is ignored, and the `decimalPlaces` option value will be used instead.\n     *\n     * Example:\n     * For instance if `decimalPlacesShownOnFocus` is set to `5` and the default number of decimal places is `2`, then on focus `1,000.12345` will be shown, while without focus `1,000.12` will be set back.\n     * Note 1: the results depends on the rounding method used.\n     * Note 2: the `getNumericString()` method returns the extended decimal places\n     */\n    decimalPlacesShownOnFocus: {\n        useDefault: null,\n        none      : 0,\n        one       : 1,\n        two       : 2,\n        three     : 3,\n        four      : 4,\n        five      : 5,\n        six       : 6,\n    },\n\n    /* Helper option for ASP.NET postback\n     * This should be set as the value of the unformatted default value\n     * examples:\n     * no default value=\"\" {defaultValueOverride: \"\"}\n     * value=1234.56 {defaultValueOverride: '1234.56'}\n     */\n    defaultValueOverride: {\n        doNotOverride: null,\n    },\n\n    /* Defines how many numbers should be grouped together (usually for the thousand separator)\n     * - \"2\",  results in 99,99,99,99 Group by two\n     * - \"2t\", results in 99,99,99,999 India's lakhs\n     * - \"2s\", results in 99,999,99,99,999 India's lakhs scaled\n     * - \"3\",  results in 999,999,999 (default)\n     * - \"4\",  results in 9999,9999,9999 used in some Asian countries\n     * Note: This option does not accept other grouping choice.\n     */\n    digitalGroupSpacing: {\n        two      : '2',\n        twoThree : '2t',\n        twoScaled: '2s',\n        three    : '3',\n        four     : '4',\n    },\n\n    /* Defines the thousand grouping separator character\n     * Example : If `'.'` is set, then you'll get `'1.234.567'`\n     */\n    digitGroupSeparator: {\n        comma                   : ',',\n        dot                     : '.',\n        normalSpace             : ' ',\n        thinSpace               : '\\u2009',\n        narrowNoBreakSpace      : '\\u202f',\n        noBreakSpace            : '\\u00a0',\n        noSeparator             : '',\n        apostrophe              : `'`,\n        arabicThousandsSeparator: '٬',\n        dotAbove                : '˙',\n        privateUseTwo           : '’', // \\u0092\n    },\n\n    /* The `divisorWhenUnfocused` divide the element value on focus.\n     * On blur, the element value is multiplied back.\n     *\n     * Example : Display percentages using { divisorWhenUnfocused: 100 } (or directly in the Html with `<input data-divisor-when-unfocused=\"100\">`)\n     * The divisor value does not need to be an integer, but please understand that Javascript has limited accuracy in math ; use with caution.\n     * Note: The `getNumericString` method returns the full value, including the 'hidden' decimals.\n     */\n    divisorWhenUnfocused: {\n        none      : null,\n        percentage: 100,\n        permille  : 1000,\n        basisPoint: 10000,\n    },\n\n    /* Defines what should be displayed in the element if the raw value is an empty string ('').\n     * - 'focus'  : The currency sign is displayed when the input receives focus (default)\n     * - 'press'  : The currency sign is displayed whenever a key is being pressed\n     * - 'always' : The currency sign is always displayed\n     * - 'zero'   : A zero is displayed ('rounded' with or without a currency sign) if the input has no value on focus out\n     * - 'min'    : The minimum value is displayed if the input has no value on focus out\n     * - 'max'    : The maximum value is displayed if the input has no value on focus out\n     * - 'null'   : When the element is empty, the `rawValue` and the element value/text is set to `null`. This also allows to set the value to `null` using `anElement.set(null)`.\n     */\n    emptyInputBehavior: {\n        focus : 'focus',\n        press : 'press',\n        always: 'always',\n        zero  : 'zero',\n        min   : 'min',\n        max   : 'max',\n        null  : 'null',\n    },\n\n    /* Defines if the custom and native events triggered by AutoNumeric should bubble up or not.\n     */\n    eventBubbles: {\n        bubbles: true,\n        doesNotBubble: false,\n    },\n\n    /* Defines if the custom and native events triggered by AutoNumeric should be cancelable.\n     */\n    eventIsCancelable: {\n        isCancelable: true,\n        isNotCancelable: false,\n    },\n\n    /* This option is the 'strict mode' (aka 'debug' mode), which allows autoNumeric to strictly analyse the options passed, and fails if an unknown options is used in the settings object.\n     * You should set that to `true` if you want to make sure you are only using 'pure' autoNumeric settings objects in your code.\n     * If you see uncaught errors in the console and your code starts to fail, this means somehow those options gets polluted by another program (which usually happens when using frameworks).\n     */\n    failOnUnknownOption: {\n        fail  : true,\n        ignore: false,\n    },\n\n    /* Determine if the default value will be formatted on initialization.\n     */\n    formatOnPageLoad: {\n        format     : true, // automatically formats the default value on initialization\n        doNotFormat: false, // will not format the default value on initialization\n    },\n\n    /* Defines if the 'formula mode' can be activated by the user.\n     * If set to `true`, then the user can enter the formula mode by entering the '=' character.\n     * He will then be allowed to enter any simple math formula using numeric characters as well as the following operators +, -, *, /, ( and ).\n     * The formula mode is closed when the user either validate their math expression using the `Enter` key, or when the element is blurred.\n     * If the formula is invalid, the previous valid `rawValue` is set back, and the `autoNumeric:invalidFormula` event is sent.\n     * When a valid formula is accepted, then its result is `set()`, and the `autoNumeric:validFormula` event is sent.\n     *\n     * By default, this mode is disabled.\n     */\n    formulaMode: {\n        enabled : true,\n        disabled: false,\n    },\n\n    /* Set the undo/redo history table size.\n     * Each record keeps the raw value as well and the last known caret/selection positions.\n     */\n    historySize: {\n        verySmall: 5,\n        small    : 10,\n        medium   : 20,\n        large    : 50,\n        veryLarge: 100,\n        insane   : Number.MAX_SAFE_INTEGER,\n    },\n\n    /* Defines the name of the CSS class to use on contenteditable-enabled elements when the value is invalid\n     * This is not used when the HTML element used is an input.\n     */\n    invalidClass: 'an-invalid',\n\n    /* Allow the user to 'cancel' and undo the changes he made to the given autonumeric-managed element, by pressing the 'Escape' key.\n     * Whenever the user 'validate' the input (either by hitting 'Enter', or blurring the element), the new value is saved for subsequent 'cancellation'.\n     *\n     * The process :\n     *   - save the input value on focus\n     *   - if the user change the input value, and hit `Escape`, then the initial value saved on focus is set back\n     *   - on the other hand if the user either have used `Enter` to validate (`Enter` throws a change event) his entries, or if the input value has been changed by another script in the mean time, then we save the new input value\n     *   - on a successful 'cancel', select the whole value (while respecting the `selectNumberOnly` option)\n     *   - bonus; if the value has not changed, hitting 'Esc' just select all the input value (while respecting the `selectNumberOnly` option)\n     */\n    isCancellable: {\n        cancellable   : true,\n        notCancellable: false,\n    },\n\n    /* Controls the leading zero behavior\n     * - 'allow' : allows leading zeros to be entered. Zeros will be truncated when entering additional digits. On focusout zeros will be deleted\n     * - 'deny'  : allows only one leading zero on values that are between 1 and -1\n     * - 'keep'  : allows leading zeros to be entered. on focusout zeros will be retained\n     */\n    leadingZero: {\n        allow: 'allow',\n        deny : 'deny',\n        keep : 'keep',\n    },\n\n    /* Defines the maximum possible value a user can enter.\n     * Notes:\n     * - this value must be a string and use the period for the decimal point\n     * - this value needs to be larger than `minimumValue`\n     */\n    maximumValue: {\n        tenTrillions          : '10000000000000', // 10000 billions\n        oneBillion            : '1000000000',\n        zero                  : '0',\n    },\n\n    /* Defines the minimum possible value a user can enter.\n     * Notes:\n     * - this value must be a string and use the period for the decimal point\n     * - this value needs to be smaller than `maximumValue`\n     * - if this is superior to 0, then you'll effectively prevent your user to entirely delete the content of your element\n     */\n    minimumValue: {\n        tenTrillions          : '-10000000000000', // 10000 billions\n        oneBillion            : '-1000000000',\n        zero                  : '0',\n    },\n\n    /* Allows the user to increment or decrement the element value with the up and down arrow keys.\n     * The behavior is similar to the mouse wheel one.\n     * The up and down arrow keys behavior can be modified by the `upDownStep` option.\n     * This `upDownStep` option can be used in two ways, either by setting:\n     * - a 'fixed' step value (`upDownStep : 1000`), or\n     * - the 'progressive' string (`upDownStep : 'progressive'`), which will then activate a special mode where the step is automatically calculated based on the element value size.\n     */\n    modifyValueOnUpDownArrow: {\n        modifyValue: true,\n        doNothing  : false,\n    },\n\n    /* Allows the user to increment or decrement the element value with the mouse wheel.\n     * The behavior is similar to the up/down arrow one.\n     * The wheel behavior can be modified by the `wheelStep` option.\n     * This `wheelStep` option can be used in two ways, either by setting:\n     * - a 'fixed' step value (`wheelStep : 1000`), or\n     * - the 'progressive' string (`wheelStep : 'progressive'`), which will then activate a special mode where the step is automatically calculated based on the element value size.\n     *\n     * Note :\n     * You can activate/deactivate the wheel event for each `wheelOn` option value by using the 'Shift' modifier key while using the mouse wheel.\n     */\n    modifyValueOnWheel: {\n        modifyValue: true,\n        doNothing  : false,\n    },\n\n    /* Adds brackets on negative values (ie. transforms '-$ 999.99' to '($999.99)')\n     * Those brackets are visible only when the field does NOT have the focus.\n     * The left and right symbols should be enclosed in quotes and separated by a comma.\n     */\n    negativeBracketsTypeOnBlur: {\n        parentheses           : '(,)',\n        brackets              : '[,]',\n        chevrons              : '<,>',\n        curlyBraces           : '{,}',\n        angleBrackets         : '〈,〉',\n        japaneseQuotationMarks: '｢,｣',\n        halfBrackets          : '⸤,⸥',\n        whiteSquareBrackets   : '⟦,⟧',\n        quotationMarks        : '‹,›',\n        guillemets            : '«,»',\n        none                  : null, // This is the default value, which deactivate this feature\n    },\n\n    /* Placement of the negative/positive sign relative to the `currencySymbol` option.\n     *\n     * Example:\n     * // Default values\n     * -1,234.56  => default no options required\n     * $-1,234.56 => {currencySymbol: \"$\", negativePositiveSignPlacement: \"r\"} // Default if negativePositiveSignPlacement is 'null' and currencySymbol is not empty\n     *\n     * // Sign on the left hand side of the whole number\n     * -$1,234.56 => {currencySymbol: \"$\"} or {currencySymbol: \"$\", negativePositiveSignPlacement: \"l\"}\n     * -1,234.56$ => {currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"p\"} // Default if negativePositiveSignPlacement is 'null' and currencySymbol is not empty\n     *\n     * // Sign on the right hand side of the whole number\n     * 1,234.56-  => {negativePositiveSignPlacement: \"s\"}\n     * $1,234.56- => {currencySymbol: \"$\", negativePositiveSignPlacement: \"s\"}\n     * 1,234.56-$ => {currencySymbol: \"$\", currencySymbolPlacement: \"s\"}\n     * 1,234.56$- => {currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"r\"}\n     */\n    negativePositiveSignPlacement: {\n        prefix: 'p',\n        suffix: 's',\n        left  : 'l',\n        right : 'r',\n        none  : null,\n    },\n\n    /* Defines the negative sign symbol.\n     * It can be a string of only one character.\n     */\n    negativeSignCharacter: {\n        hyphen         : '-',\n        minus          : '−',\n        heavyMinus     : '➖',\n        fullWidthHyphen: '－',\n        circledMinus   : '⊖',\n        squaredMinus   : '⊟',\n        triangleMinus  : '⨺',\n        plusMinus      : '±',\n        minusPlus      : '∓',\n        dotMinus       : '∸',\n        minusTilde     : '≂',\n        not            : '¬',\n    },\n\n    /*\n     * Defines if the negative sign should be toggled when hitting the negative or positive key multiple times.\n     * When `toggle` is used, using the same '-' on '+' key will toggle between a positive and negative value.\n     * When `doNotToggle` is used, using '-' will always set the value negative, and '+' will always set the value positive.\n     */\n    negativePositiveSignBehavior: {\n        toggle     : true,\n        doNotToggle: false,\n    },\n\n    /* Defines if the element should have event listeners activated on it.\n     * By default, those event listeners are only added to <input> elements and html element with the `contenteditable` attribute set to `true`, but not on the other html tags.\n     * This allows to initialize elements without any event listeners.\n     * Warning: Since AutoNumeric will not check the input content after its initialization, using some autoNumeric methods afterwards *will* probably leads to formatting problems.\n     */\n    noEventListeners: {\n        noEvents : true,\n        addEvents: false,\n    },\n\n    /* Manage how autoNumeric react when the user tries to paste an invalid number.\n     * - 'error'    : (This is the default behavior) The input value is not changed and an error is output in the console.\n     * - 'ignore'   : idem than 'error', but fail silently without outputting any error/warning in the console.\n     * - 'clamp'    : if the pasted value is either too small or too big regarding the minimumValue and maximumValue range, then the result is clamped to those limits.\n     * - 'truncate' : autoNumeric will insert as many pasted numbers it can at the initial caret/selection, until everything is pasted, or the range limit is hit.\n     *                The non-pasted numbers are dropped and therefore not used at all.\n     * - 'replace'  : autoNumeric will first insert as many pasted numbers it can at the initial caret/selection, then if the range limit is hit, it will try\n     *                to replace one by one the remaining initial numbers (on the right side of the caret) with the rest of the pasted numbers.\n     *\n     * Note 1 : A paste content starting with a negative sign '-' will be accepted anywhere in the input, and will set the resulting value as a negative number\n     * Note 2 : A paste content starting with a number will be accepted, even if the rest is gibberish (ie. '123foobar456').\n     *          Only the first number will be used (here '123').\n     * Note 3 : The paste event works with the `decimalPlacesShownOnFocus` option too.\n     */\n    onInvalidPaste: {\n        error   : 'error',\n        ignore  : 'ignore',\n        clamp   : 'clamp',\n        truncate: 'truncate',\n        replace : 'replace',\n    },\n\n    /* Defines how the value should be formatted when wanting a 'localized' version of it.\n     * - null or 'string' => 'nnnn.nn' or '-nnnn.nn' as text type. This is the default behavior.\n     * - 'number'         => nnnn.nn or -nnnn.nn as a Number (Warning: this works only for integers inferior to Number.MAX_SAFE_INTEGER)\n     * - ',' or '-,'      => 'nnnn,nn' or '-nnnn,nn'\n     * - '.-'             => 'nnnn.nn' or 'nnnn.nn-'\n     * - ',-'             => 'nnnn,nn' or 'nnnn,nn-'\n     *\n     * Note: The hyphen '-' is translated to the custom negative sign defined in `negativeSignCharacter`\n     */\n    outputFormat: {\n        string       : 'string',\n        number       : 'number',\n        dot          : '.',\n        negativeDot  : '-.',\n        comma        : ',',\n        negativeComma: '-,',\n        dotNegative  : '.-',\n        commaNegative: ',-',\n        none         : null,\n    },\n\n    /* Defines if AutoNumeric should let the user override the minimum and/or maximum limits when he types numbers in the element.\n     * - 'ceiling' Strictly adheres to `maximumValue` and ignores the `minimumValue` settings\n     *             It allows the user to enter anything between -∞ `and maximumValue`\n     *             If `maximumValue` is less than 0, then it will prevent the user emptying the field or typing value above `maximumValue`, making sure the value entered is always valid\n     * - 'floor'   Strictly adheres to `minimumValue` and ignores the `maximumValue` settings\n     *             It allows the user to enter anything between `minimumValue` and +∞\n     *             If `minimumValue` is higher than 0, then it will prevent the user emptying the field or typing value below `minimumValue`, making sure the value entered is always valid\n     * - 'ignore'  Ignores both the `minimumValue` and `maximumValue` settings\n     *             When using this option, the field will always be valid range-wise\n     * - 'invalid' The user can temporarily type out-of-bound values. In doing so, the invalid state is set on the field.\n     *             Whenever an invalid value is typed, an 'autoNumeric:invalidValue' event is sent\n     *             When the value is correctly set back within the limit boundaries, the invalid state is removed, and the 'autoNumeric:correctedValue' event is sent\n     * - 'doNotOverride' Strictly adheres to the `maximumValue` and `minimumValue` settings\n     *                   This is the default behavior\n     *                   If `0` is out of the min/max range, this will prevent the user clearing the input field, making sure the value entered is always valid\n     */\n    overrideMinMaxLimits: {\n        ceiling      : 'ceiling',\n        floor        : 'floor',\n        ignore       : 'ignore',\n        invalid      : 'invalid',\n        doNotOverride: null,\n    },\n\n    /* Defines the positive sign symbol.\n     * It can be a string of only one character.\n     * This is shown only if `showPositiveSign` is set to `true`.\n     */\n    positiveSignCharacter: {\n        plus              : '+',\n        fullWidthPlus     : '＋',\n        heavyPlus         : '➕',\n        doublePlus        : '⧺',\n        triplePlus        : '⧻',\n        circledPlus       : '⊕',\n        squaredPlus       : '⊞',\n        trianglePlus      : '⨹',\n        plusMinus         : '±',\n        minusPlus         : '∓',\n        dotPlus           : '∔',\n        altHebrewPlus     : '﬩',\n        normalSpace       : ' ',\n        thinSpace         : '\\u2009',\n        narrowNoBreakSpace: '\\u202f',\n        noBreakSpace      : '\\u00a0',\n    },\n\n    /* The `rawValueDivisor` divides the formatted value shown in the AutoNumeric element and store the result in `rawValue`.\n     * @example { rawValueDivisor: '100' } or <input data-raw-value-divisor=\"100\">\n     * Given the `0.01234` raw value, the formatted value will be displayed as `'1.234'`.\n     * This is useful when displaying percentage for instance, and avoid the need to divide/multiply by 100 between the number shown and the raw value.\n     */\n    rawValueDivisor: {\n        none      : null,\n        percentage: 100,\n        permille  : 1000,\n        basisPoint: 10000,\n    },\n\n    /* Defines if the element (`<input>` or another allowed html tag) should be set as read-only on initialization.\n     * When set to `true`, then:\n     * - the `readonly` html property is added to the <input> element on initialization, or\n     * - the `contenteditable` attribute is set to `false` on non-input elements.\n     */\n    readOnly: {\n        readOnly : true,\n        readWrite: false,\n    },\n\n    /* Defines the rounding method to use.\n     * roundingMethod: \"S\", Round-Half-Up Symmetric (default)\n     * roundingMethod: \"A\", Round-Half-Up Asymmetric\n     * roundingMethod: \"s\", Round-Half-Down Symmetric (lower case s)\n     * roundingMethod: \"a\", Round-Half-Down Asymmetric (lower case a)\n     * roundingMethod: \"B\", Round-Half-Even \"Bankers Rounding\"\n     * roundingMethod: \"U\", Round Up \"Round-Away-From-Zero\"\n     * roundingMethod: \"D\", Round Down \"Round-Toward-Zero\" - same as truncate\n     * roundingMethod: \"C\", Round to Ceiling \"Toward Positive Infinity\"\n     * roundingMethod: \"F\", Round to Floor \"Toward Negative Infinity\"\n     * roundingMethod: \"N05\" Rounds to the nearest .05 => same as \"CHF\" used in 1.9X and still valid\n     * roundingMethod: \"U05\" Rounds up to next .05\n     * roundingMethod: \"D05\" Rounds down to next .05\n     */\n    roundingMethod: {\n        halfUpSymmetric                : 'S',\n        halfUpAsymmetric               : 'A',\n        halfDownSymmetric              : 's',\n        halfDownAsymmetric             : 'a',\n        halfEvenBankersRounding        : 'B',\n        upRoundAwayFromZero            : 'U',\n        downRoundTowardZero            : 'D',\n        toCeilingTowardPositiveInfinity: 'C',\n        toFloorTowardNegativeInfinity  : 'F',\n        toNearest05                    : 'N05',\n        toNearest05Alt                 : 'CHF',\n        upToNext05                     : 'U05',\n        downToNext05                   : 'D05',\n    },\n\n    /* Set to `true` to allow the `decimalPlacesShownOnFocus` value to be saved with sessionStorage\n     * If IE 6 or 7 is detected, the value will be saved as a session cookie.\n     */\n    saveValueToSessionStorage: {\n        save     : true,\n        doNotSave: false,\n    },\n\n    /* Determine if the select all keyboard command will select the complete input text, or only the input numeric value\n     * Note : If the currency symbol is between the numeric value and the negative sign, only the numeric value will be selected\n     */\n    selectNumberOnly: {\n        selectNumbersOnly: true,\n        selectAll        : false,\n    },\n\n    /* Defines if the element value should be selected on focus.\n     * Note: The selection is done using the `selectNumberOnly` option.\n     */\n    selectOnFocus: {\n        select     : true,\n        doNotSelect: false,\n    },\n\n    /* Defines how the serialize functions should treat the spaces.\n     * Those spaces ' ' can either be converted to the plus sign '+', which is the default, or to '%20'.\n     * Both values being valid per the spec (http://www.w3.org/Addressing/URL/uri-spec.html).\n     * Also see the summed up answer on http://stackoverflow.com/a/33939287.\n     *\n     * tl;dr : Spaces should be converted to '%20' before the '?' sign, then converted to '+' after.\n     * In our case since we serialize the query, we use '+' as the default (but allow the user to get back the old *wrong* behavior).\n     */\n    serializeSpaces: {\n        plus   : '+',\n        percent: '%20',\n    },\n\n    /* Defines if the element value should be converted to the raw value on focus (and back to the formatted on blur).\n     * If set to `true`, then autoNumeric remove the thousand separator, currency symbol and suffix on focus.\n     * Example:\n     * If the input value is '$ 1,999.88 suffix', on focus it becomes '1999.88' and back to '$ 1,999.88 suffix' on blur.\n     */\n    showOnlyNumbersOnFocus: {\n        onlyNumbers: true,\n        showAll    : false,\n    },\n\n    /* Allow the positive sign symbol `+` to be displayed for positive numbers.\n     * By default, this positive sign is not shown.\n     * The sign placement is controlled by the 'negativePositiveSignPlacement' option, mimicking the negative sign placement rules.\n     */\n    showPositiveSign: {\n        show: true,\n        hide: false,\n    },\n\n    /* Defines if warnings should be shown in the console.\n     * Those warnings can be ignored, but are usually printed when something could be improved by the user (ie. option conflicts).\n     */\n    showWarnings: {\n        show: true, // All warning are shown\n        hide: false, // No warnings are shown, only the thrown errors\n    },\n\n    /* Defines the rules that calculate the CSS class(es) to apply on the element, based on the raw unformatted value.\n     * This can also be used to call callbacks whenever the `rawValue` is updated.\n     * Important: all callbacks must return `null` if no ranges/userDefined classes are selected\n     * @example\n     * {\n     *     positive   : 'autoNumeric-positive', // Or `null` to not use it\n     *     negative   : 'autoNumeric-negative',\n     *     ranges     : [\n     *         { min: 0, max: 25, class: 'autoNumeric-red' },\n     *         { min: 25, max: 50, class: 'autoNumeric-orange' },\n     *         { min: 50, max: 75, class: 'autoNumeric-yellow' },\n     *         { min: 75, max: Number.MAX_SAFE_INTEGER, class: 'autoNumeric-green' },\n     *     ],\n     *     userDefined: [\n     *         // If 'classes' is a string, set it if `true`, remove it if `false`\n     *         { callback: rawValue => { return true; }, classes: 'thisIsTrue' },\n     *         // If 'classes' is an array with only 2 elements, set the first class if `true`, the second if `false`\n     *         { callback: rawValue => rawValue % 2 === 0, classes: ['autoNumeric-even', 'autoNumeric-odd'] },\n     *         // Return only one index to use on the `classes` array (here, 'class3')\n     *         { callback: rawValue => { return 2; }, classes: ['class1', 'class2', 'class3'] },\n     *         // Return an array of indexes to use on the `classes` array (here, 'class1' and 'class3')\n     *         { callback: rawValue => { return [0, 2]; }, classes: ['class1', 'class2', 'class3'] },\n     *         // If 'classes' is `undefined` or `null`, then the callback is called with the AutoNumeric object passed as a parameter\n     *         { callback: anElement => { return anElement.getFormatted(); } },\n     *     ],\n     * }\n     */\n    styleRules: {\n        none                 : null,\n        positiveNegative     : {\n            positive: 'autoNumeric-positive',\n            negative: 'autoNumeric-negative',\n        },\n        range0To100With4Steps: {\n            ranges: [\n                { min: 0, max: 25, class: 'autoNumeric-red' },\n                { min: 25, max: 50, class: 'autoNumeric-orange' },\n                { min: 50, max: 75, class: 'autoNumeric-yellow' },\n                { min: 75, max: 100, class: 'autoNumeric-green' },\n            ],\n        },\n        evenOdd              : {\n            userDefined: [\n                { callback: rawValue => rawValue % 2 === 0, classes: ['autoNumeric-even', 'autoNumeric-odd'] },\n            ],\n        },\n        rangeSmallAndZero    : {\n            userDefined: [\n                {\n                    callback  : rawValue => {\n                        if (rawValue >= -1 && rawValue < 0) {\n                            return 0;\n                        }\n                        if (Number(rawValue) === 0) {\n                            return 1;\n                        }\n                        if (rawValue > 0 && rawValue <= 1) {\n                            return 2;\n                        }\n\n                        return null;  // In case the rawValue is outside those ranges\n                    },\n                    classes: [\n                        'autoNumeric-small-negative',\n                        'autoNumeric-zero',\n                        'autoNumeric-small-positive',\n                    ],\n                },\n            ],\n        },\n    },\n\n    /* Add a text on the right hand side of the element value.\n     * This suffix text can have any characters in its string, except numeric characters and the negative/positive sign.\n     * Example: ' dollars'\n     */\n    suffixText: {\n        none      : '',\n        percentage: '%',\n        permille  : '‰',\n        basisPoint: '‱',\n    },\n\n    /* The three options (divisorWhenUnfocused, decimalPlacesShownOnBlur & symbolWhenUnfocused) handle scaling of the input when the input does not have focus\n     * Please note that the non-scaled value is held in data and it is advised that you use the `saveValueToSessionStorage` option to ensure retaining the value\n     * [\"divisor\", \"decimal places\", \"symbol\"]\n     * Example: with the following options set {divisorWhenUnfocused: '1000', decimalPlacesShownOnBlur: '1', symbolWhenUnfocused: ' K'}\n     * Example: focusin value \"1,111.11\" focusout value \"1.1 K\"\n     */\n\n    /* The `symbolWhenUnfocused` option is a symbol placed as a suffix when not in focus.\n     * This is optional too.\n     */\n    symbolWhenUnfocused: {\n        none      : null,\n        percentage: '%',\n        permille  : '‰',\n        basisPoint: '‱',\n    },\n\n    /* Defines if the element value should be unformatted when the user hover his mouse over it while holding the `Alt` key.\n     * Unformatting there means that this removes any non-number characters and displays the *raw* value, as understood by Javascript (ie. `12.34` is a valid number, while `12,34` is not).\n     *\n     * We reformat back before anything else if :\n     * - the user focus on the element by tabbing or clicking into it,\n     * - the user releases the `Alt` key, and\n     * - if we detect a mouseleave event.\n     *\n     * We unformat again if :\n     * - while the mouse is over the element, the user hit `Alt` again\n     */\n    unformatOnHover: {\n        unformat     : true,\n        doNotUnformat: false, //TODO Rename to `keepFormat`\n    },\n\n    /* Removes the formatting and use the raw value in each autoNumeric elements of the parent form element, on the form `submit` event.\n     * The output format is a numeric string (nnnn.nn or -nnnn.nn).\n     */\n    unformatOnSubmit: {\n        unformat        : true,\n        keepCurrentValue: false,\n    },\n\n    /* That option is linked to the `modifyValueOnUpDownArrow` one and will only be used if the latter is set to `true`.\n     * This option will modify the up/down arrow behavior and can be used in two ways, either by setting :\n     * - a 'fixed' step value (a positive float or integer number (ex: `1000`)), or\n     * - the `'progressive'` string.\n     *\n     * The 'fixed' mode always increment/decrement the element value by that amount, while respecting the `minimumValue` and `maximumValue` settings.\n     * The 'progressive' mode will increment/decrement the element value based on its current value. The bigger the number, the bigger the step, and vice versa.\n     */\n    upDownStep: {\n        progressive: 'progressive',\n    },\n\n    /* Provides a way for automatically replacing the formatted value with a pre-defined string, when the raw value is equal to a specific value\n     * Here you can specify as many 'conversion' as needed.\n     */\n    valuesToStrings: {\n        none         : null,\n        zeroDash     : {\n            0: '-',\n        },\n        oneAroundZero: {\n            '-1': 'Min',\n            1   : 'Max',\n        },\n    },\n\n    /* Defines if the AutoNumeric element should watch external changes made without using `.set()`, but by using the basic `aNElement.node().value = 42` notation.\n     * If set to `watch`, then AutoNumeric will format the new value using `.set()` internally.\n     * Otherwise it will neither format it, nor save it in the history.\n     */\n    watchExternalChanges: {\n        watch     : true,\n        doNotWatch: false,\n    },\n\n    /* Defines when the wheel event will increment or decrement the element value.\n     * When set to `'focus'`, the AutoNumeric-managed element needs to be focused for the wheel event to change the value.\n     * When set to `'hover'`, using the wheel event while the mouse is hovering the element is sufficient (no focus needed).\n     *\n     * Note :\n     * When `wheelOn` is set to `'focus'`, you can use the 'Shift' modifier key while using the mouse wheel in order to temporarily activate the increment/decrement feature even if the element is not focused.\n     * When `wheelOn` is set to `'hover'`, you can use the 'Shift' modifier key while using the mouse wheel in order to temporarily disable the increment/decrement feature even if the element is not hovered.\n     */\n    wheelOn: {\n        focus: 'focus',\n        hover: 'hover',\n    },\n\n    /* That option is linked to the `modifyValueOnWheel` one and will only be used if the latter is set to `true`.\n     * This option will modify the wheel behavior and can be used in two ways, either by setting :\n     * - a 'fixed' step value (a positive float or integer (ex: number `1000`)), or\n     * - the `'progressive'` string.\n     *\n     * The 'fixed' mode always increment/decrement the element value by that amount, while respecting the `minimumValue` and `maximumValue` settings.\n     * The 'progressive' mode will increment/decrement the element value based on its current value. The bigger the number, the bigger the step, and vice versa.\n     */\n    wheelStep: {\n        progressive: 'progressive',\n    },\n};\n\n/**\n * Simple function that will semi-deep freeze the `AutoNumeric.options` object.\n * By 'semi' it means the nested objects in the `styleRules` option are not frozen.\n * The ones in the `valuesToStrings` are though, since they are much more simple.\n *\n * @param {object} options\n * @returns {ReadonlyArray<any>}\n */\nfunction freezeOptions(options) {\n    // Freeze each property objects\n    Object.getOwnPropertyNames(options).forEach(optionName => {\n        if (optionName === 'valuesToStrings') {\n            const vsProps = Object.getOwnPropertyNames(options.valuesToStrings);\n            vsProps.forEach(valuesToStringObjectName => {\n                if (options.valuesToStrings[valuesToStringObjectName] !== null) {\n                    Object.freeze(options.valuesToStrings[valuesToStringObjectName]);\n                }\n            });\n        } else if (optionName !== 'styleRules') {\n            if (options[optionName] !== null) {\n                Object.freeze(options[optionName]);\n            }\n        }\n    });\n\n    // Then freeze the options object globally\n    return Object.freeze(options);\n}\n\nfreezeOptions(AutoNumeric.options);\nObject.defineProperty(AutoNumeric, 'options', { configurable: false, writable: false });\n\nexport default {};\n","/**\n * Options for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\n\n/**\n * Event list managed by AutoNumeric\n *\n * @type {{correctedValue: string, initialized: string, invalidFormula: string, invalidValue: string, formatted: string, rawValueModified: string, minRangeExceeded: string, maxRangeExceeded: string, native: {input: string, change: string}, validFormula: string}}\n */\nAutoNumeric.events = {\n    correctedValue  : 'autoNumeric:correctedValue',\n    initialized     : 'autoNumeric:initialized',\n    invalidFormula  : 'autoNumeric:invalidFormula',\n    invalidValue    : 'autoNumeric:invalidValue',\n    formatted       : 'autoNumeric:formatted',\n    rawValueModified: 'autoNumeric:rawValueModified',\n    minRangeExceeded: 'autoNumeric:minExceeded',\n    maxRangeExceeded: 'autoNumeric:maxExceeded',\n    native          : {\n        input : 'input',\n        change: 'change',\n    },\n    validFormula    : 'autoNumeric:validFormula',\n};\n\nObject.freeze(AutoNumeric.events.native);\nObject.freeze(AutoNumeric.events);\nObject.defineProperty(AutoNumeric, 'events', { configurable: false, writable: false });\n\nexport default {};\n","/**\n * Default settings for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\nimport './AutoNumericOptions';\n\n/* eslint no-unused-vars: 0 */\n\n/**\n * The defaults options.\n * These can be overridden by the following methods:\n * - HTML5 data attributes (ie. `<input type=\"text\" data-currency-symbol=\" €\">`)\n * - Options passed to the `update` method (ie. `anElement.update({ currencySymbol: ' €' });`), or simply during the initialization (ie. `new AutoNumeric(domElement, { options });`)\n */\nAutoNumeric.defaultSettings = {\n    allowDecimalPadding          : AutoNumeric.options.allowDecimalPadding.always,\n    alwaysAllowDecimalCharacter  : AutoNumeric.options.alwaysAllowDecimalCharacter.doNotAllow,\n    caretPositionOnFocus         : AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition,\n    createLocalList              : AutoNumeric.options.createLocalList.createList,\n    currencySymbol               : AutoNumeric.options.currencySymbol.none,\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n    decimalCharacterAlternative  : AutoNumeric.options.decimalCharacterAlternative.none,\n    decimalPlaces                : AutoNumeric.options.decimalPlaces.two,\n    decimalPlacesRawValue        : AutoNumeric.options.decimalPlacesRawValue.useDefault,\n    decimalPlacesShownOnBlur     : AutoNumeric.options.decimalPlacesShownOnBlur.useDefault,\n    decimalPlacesShownOnFocus    : AutoNumeric.options.decimalPlacesShownOnFocus.useDefault,\n    defaultValueOverride         : AutoNumeric.options.defaultValueOverride.doNotOverride,\n    digitalGroupSpacing          : AutoNumeric.options.digitalGroupSpacing.three,\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n    divisorWhenUnfocused         : AutoNumeric.options.divisorWhenUnfocused.none,\n    emptyInputBehavior           : AutoNumeric.options.emptyInputBehavior.focus,\n    eventBubbles                 : AutoNumeric.options.eventBubbles.bubbles,\n    eventIsCancelable            : AutoNumeric.options.eventIsCancelable.isCancelable,\n    failOnUnknownOption          : AutoNumeric.options.failOnUnknownOption.ignore,\n    formatOnPageLoad             : AutoNumeric.options.formatOnPageLoad.format,\n    formulaMode                  : AutoNumeric.options.formulaMode.disabled,\n    historySize                  : AutoNumeric.options.historySize.medium,\n    invalidClass                 : AutoNumeric.options.invalidClass,\n    isCancellable                : AutoNumeric.options.isCancellable.cancellable,\n    leadingZero                  : AutoNumeric.options.leadingZero.deny,\n    maximumValue                 : AutoNumeric.options.maximumValue.tenTrillions,\n    minimumValue                 : AutoNumeric.options.minimumValue.tenTrillions,\n    modifyValueOnUpDownArrow     : AutoNumeric.options.modifyValueOnUpDownArrow.modifyValue,\n    modifyValueOnWheel           : AutoNumeric.options.modifyValueOnWheel.modifyValue,\n    negativeBracketsTypeOnBlur   : AutoNumeric.options.negativeBracketsTypeOnBlur.none,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.none,\n    negativeSignCharacter        : AutoNumeric.options.negativeSignCharacter.hyphen,\n    negativePositiveSignBehavior : AutoNumeric.options.negativePositiveSignBehavior.doNotToggle,\n    noEventListeners             : AutoNumeric.options.noEventListeners.addEvents,\n    //TODO Shouldn't we use `truncate` as the default value?\n    onInvalidPaste               : AutoNumeric.options.onInvalidPaste.error,\n    outputFormat                 : AutoNumeric.options.outputFormat.none,\n    overrideMinMaxLimits         : AutoNumeric.options.overrideMinMaxLimits.doNotOverride,\n    positiveSignCharacter        : AutoNumeric.options.positiveSignCharacter.plus,\n    rawValueDivisor              : AutoNumeric.options.rawValueDivisor.none,\n    readOnly                     : AutoNumeric.options.readOnly.readWrite,\n    roundingMethod               : AutoNumeric.options.roundingMethod.halfUpSymmetric,\n    saveValueToSessionStorage    : AutoNumeric.options.saveValueToSessionStorage.doNotSave,\n    selectNumberOnly             : AutoNumeric.options.selectNumberOnly.selectNumbersOnly,\n    selectOnFocus                : AutoNumeric.options.selectOnFocus.select,\n    serializeSpaces              : AutoNumeric.options.serializeSpaces.plus,\n    showOnlyNumbersOnFocus       : AutoNumeric.options.showOnlyNumbersOnFocus.showAll,\n    showPositiveSign             : AutoNumeric.options.showPositiveSign.hide,\n    showWarnings                 : AutoNumeric.options.showWarnings.show,\n    styleRules                   : AutoNumeric.options.styleRules.none,\n    suffixText                   : AutoNumeric.options.suffixText.none,\n    symbolWhenUnfocused          : AutoNumeric.options.symbolWhenUnfocused.none,\n    unformatOnHover              : AutoNumeric.options.unformatOnHover.unformat,\n    unformatOnSubmit             : AutoNumeric.options.unformatOnSubmit.keepCurrentValue,\n    upDownStep                   : '1', // To mimic the behavior of 'numeric'-typed input\n    valuesToStrings              : AutoNumeric.options.valuesToStrings.none,\n    watchExternalChanges         : AutoNumeric.options.watchExternalChanges.doNotWatch,\n    wheelOn                      : AutoNumeric.options.wheelOn.focus,\n    wheelStep                    : AutoNumeric.options.wheelStep.progressive,\n};\n\nObject.freeze(AutoNumeric.defaultSettings);\nObject.defineProperty(AutoNumeric, 'defaultSettings', { configurable: false, writable: false });\n\nexport default {};\n","/**\n * Pre-defined options for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\nimport AutoNumericHelper from './AutoNumericHelper';\n\nconst euro = { // Français\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.dot, // or '\\u202f'\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.comma,\n    decimalCharacterAlternative  : AutoNumeric.options.decimalCharacterAlternative.dot,\n    currencySymbol               : '\\u202f€',\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.suffix,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.prefix,\n};\n\nconst dollar = {\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n    currencySymbol               : AutoNumeric.options.currencySymbol.dollar,\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n};\n\nconst japanese = { // 日本語\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n    currencySymbol               : AutoNumeric.options.currencySymbol.yen,\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n};\n\n\n// Here we need to clone the initial objects in order to be able to edit the clones without affecting the originals\nconst euroF                           = AutoNumericHelper.cloneObject(euro);\neuroF.formulaMode                     = AutoNumeric.options.formulaMode.enabled;\nconst euroPos                         = AutoNumericHelper.cloneObject(euro);\neuroPos.minimumValue                  = 0;\nconst euroNeg                         = AutoNumericHelper.cloneObject(euro);\neuroNeg.maximumValue                  = 0;\neuroNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst euroSpace                            = AutoNumericHelper.cloneObject(euro);\neuroSpace.digitGroupSeparator              = AutoNumeric.options.digitGroupSeparator.normalSpace;\nconst euroSpacePos                         = AutoNumericHelper.cloneObject(euroSpace);\neuroSpacePos.minimumValue                  = 0;\nconst euroSpaceNeg                         = AutoNumericHelper.cloneObject(euroSpace);\neuroSpaceNeg.maximumValue                  = 0;\neuroSpaceNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst percentageEU2dec                            = AutoNumericHelper.cloneObject(euro);\npercentageEU2dec.currencySymbol                   = AutoNumeric.options.currencySymbol.none;\npercentageEU2dec.suffixText                       = `\\u202f${AutoNumeric.options.suffixText.percentage}`;\npercentageEU2dec.wheelStep                        = 0.0001; // This targets the `rawValue`, not the formatted one\npercentageEU2dec.rawValueDivisor                  = AutoNumeric.options.rawValueDivisor.percentage;\nconst percentageEU2decPos                         = AutoNumericHelper.cloneObject(percentageEU2dec);\npercentageEU2decPos.minimumValue                  = 0;\nconst percentageEU2decNeg                         = AutoNumericHelper.cloneObject(percentageEU2dec);\npercentageEU2decNeg.maximumValue                  = 0;\npercentageEU2decNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst percentageEU3dec            = AutoNumericHelper.cloneObject(percentageEU2dec);\npercentageEU3dec.decimalPlaces    = 3;\nconst percentageEU3decPos         = AutoNumericHelper.cloneObject(percentageEU2decPos);\npercentageEU3decPos.decimalPlaces = 3;\nconst percentageEU3decNeg         = AutoNumericHelper.cloneObject(percentageEU2decNeg);\npercentageEU3decNeg.decimalPlaces = 3;\n\nconst dollarF                                = AutoNumericHelper.cloneObject(dollar);\ndollarF.formulaMode                          = AutoNumeric.options.formulaMode.enabled;\nconst dollarPos                              = AutoNumericHelper.cloneObject(dollar);\ndollarPos.minimumValue                       = 0;\nconst dollarNeg                              = AutoNumericHelper.cloneObject(dollar);\ndollarNeg.maximumValue                       = 0;\ndollarNeg.negativePositiveSignPlacement      = AutoNumeric.options.negativePositiveSignPlacement.prefix;\nconst dollarNegBrackets                      = AutoNumericHelper.cloneObject(dollarNeg);\ndollarNegBrackets.negativeBracketsTypeOnBlur = AutoNumeric.options.negativeBracketsTypeOnBlur.parentheses;\n\nconst percentageUS2dec                            = AutoNumericHelper.cloneObject(dollar);\npercentageUS2dec.currencySymbol                   = AutoNumeric.options.currencySymbol.none;\npercentageUS2dec.suffixText                       = AutoNumeric.options.suffixText.percentage;\npercentageUS2dec.wheelStep                        = 0.0001;\npercentageUS2dec.rawValueDivisor                  = AutoNumeric.options.rawValueDivisor.percentage;\nconst percentageUS2decPos                         = AutoNumericHelper.cloneObject(percentageUS2dec);\npercentageUS2decPos.minimumValue                  = 0;\nconst percentageUS2decNeg                         = AutoNumericHelper.cloneObject(percentageUS2dec);\npercentageUS2decNeg.maximumValue                  = 0;\npercentageUS2decNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst percentageUS3dec            = AutoNumericHelper.cloneObject(percentageUS2dec);\npercentageUS3dec.decimalPlaces    = 3;\nconst percentageUS3decPos         = AutoNumericHelper.cloneObject(percentageUS2decPos);\npercentageUS3decPos.decimalPlaces = 3;\nconst percentageUS3decNeg         = AutoNumericHelper.cloneObject(percentageUS2decNeg);\npercentageUS3decNeg.decimalPlaces = 3;\n\nconst turkish = AutoNumericHelper.cloneObject(euro);\nturkish.currencySymbol = AutoNumeric.options.currencySymbol.lira;\n\n/**\n * Predefined options for the most common languages\n */\nAutoNumeric.predefinedOptions = {\n    euro,\n    euroPos,\n    euroNeg,\n    euroSpace,\n    euroSpacePos,\n    euroSpaceNeg,\n    percentageEU2dec,\n    percentageEU2decPos,\n    percentageEU2decNeg,\n    percentageEU3dec,\n    percentageEU3decPos,\n    percentageEU3decNeg,\n    dollar,\n    dollarPos,\n    dollarNeg,\n    dollarNegBrackets,\n    percentageUS2dec,\n    percentageUS2decPos,\n    percentageUS2decNeg,\n    percentageUS3dec,\n    percentageUS3decPos,\n    percentageUS3decNeg,\n    French                      : euro, // Français\n    Spanish                     : euro, // Español\n    NorthAmerican               : dollar,\n    British                     : {\n        digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n        decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol               : AutoNumeric.options.currencySymbol.pound,\n        currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n        negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n    },\n    Swiss                       : { // Suisse\n        digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.apostrophe,\n        decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol               : '\\u202fCHF',\n        currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.suffix,\n        negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.prefix,\n    },\n    Japanese                    : japanese, // 日本語\n    Chinese                     : japanese, // 中国語 (Chinese)\n    Brazilian                   : {\n        digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.dot,\n        decimalCharacter             : AutoNumeric.options.decimalCharacter.comma,\n        currencySymbol               : AutoNumeric.options.currencySymbol.real,\n        currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n        negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n    },\n    Turkish                     : turkish,\n    dotDecimalCharCommaSeparator: {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.comma,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n    },\n    commaDecimalCharDotSeparator: {\n        digitGroupSeparator        : AutoNumeric.options.digitGroupSeparator.dot,\n        decimalCharacter           : AutoNumeric.options.decimalCharacter.comma,\n        decimalCharacterAlternative: AutoNumeric.options.decimalCharacterAlternative.dot,\n    },\n    integer                     : {\n        decimalPlaces: 0,\n    },\n    integerPos                  : {\n        minimumValue : AutoNumeric.options.minimumValue.zero,\n        decimalPlaces: 0,\n    },\n    integerNeg                  : {\n        maximumValue : AutoNumeric.options.maximumValue.zero,\n        decimalPlaces: 0,\n    },\n    float                       : {\n        allowDecimalPadding: AutoNumeric.options.allowDecimalPadding.never,\n    },\n    floatPos                    : {\n        allowDecimalPadding: AutoNumeric.options.allowDecimalPadding.never,\n        minimumValue       : AutoNumeric.options.minimumValue.zero,\n        maximumValue       : AutoNumeric.options.maximumValue.tenTrillions,\n    },\n    floatNeg                    : {\n        allowDecimalPadding: AutoNumeric.options.allowDecimalPadding.never,\n        minimumValue       : AutoNumeric.options.minimumValue.tenTrillions,\n        maximumValue       : AutoNumeric.options.maximumValue.zero,\n    },\n    numeric                     : {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.noSeparator,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol     : AutoNumeric.options.currencySymbol.none,\n    },\n    numericPos                  : {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.noSeparator,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol     : AutoNumeric.options.currencySymbol.none,\n        minimumValue       : AutoNumeric.options.minimumValue.zero,\n        maximumValue       : AutoNumeric.options.maximumValue.tenTrillions,\n    },\n    numericNeg                  : {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.noSeparator,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol     : AutoNumeric.options.currencySymbol.none,\n        minimumValue       : AutoNumeric.options.minimumValue.tenTrillions,\n        maximumValue       : AutoNumeric.options.maximumValue.zero,\n    },\n};\n\nObject.getOwnPropertyNames(AutoNumeric.predefinedOptions).forEach(optionName => {\n    Object.freeze(AutoNumeric.predefinedOptions[optionName]);\n});\nObject.freeze(AutoNumeric.predefinedOptions);\nObject.defineProperty(AutoNumeric, 'predefinedOptions', { configurable: false, writable: false });\n\nexport default {};\n","/**\n * Babel + Webpack workaround for AutoNumeric\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\nimport './AutoNumericEvents';\nimport './AutoNumericOptions';\nimport './AutoNumericDefaultSettings';\nimport './AutoNumericPredefinedOptions';\n\n/* eslint no-unused-vars: 0 */\n\n/**\n * This file serve as the main entry point to the library.\n *\n * This is needed since if the Webpack entrypoint is set to `./src/AutoNumeric.js`, then the AutoNumericEvents, AutoNumericOptions, AutoNumericDefaultSettings and AutoNumericPredefinedOptions files are not included in the bundle and therefore cannot be used.\n *\n * @type {AutoNumeric}\n */\nexport default AutoNumeric;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = void 0;\nexports.config = {\n    // default will not sort the object key\n    sort_key: false,\n    // default will convert into null silently like JSON.stringify\n    preserve_nan: false,\n    error_on_nan: false,\n    preserve_infinite: false,\n    error_on_infinite: false,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compress = compress;\nexports.decode = decode;\nexports.decompress = decompress;\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst memory_1 = require(\"./memory\");\nconst number_1 = require(\"./number\");\nfunction compress(o) {\n    const mem = (0, memory_1.makeInMemoryMemory)();\n    const root = (0, memory_1.addValue)(mem, o, undefined);\n    const values = (0, memory_1.memToValues)(mem);\n    return [values, root];\n}\nfunction decodeObject(values, s) {\n    if (s === 'o|') {\n        return {};\n    }\n    const o = {};\n    const vs = s.split('|');\n    const key_id = vs[1];\n    let keys = decode(values, key_id);\n    const n = vs.length;\n    if (n - 2 === 1 && !Array.isArray(keys)) {\n        // single-key object using existing value as key\n        keys = [keys];\n    }\n    for (let i = 2; i < n; i++) {\n        const k = keys[i - 2];\n        let v = vs[i];\n        v = decode(values, v);\n        o[k] = v;\n    }\n    return o;\n}\nfunction decodeArray(values, s) {\n    if (s === 'a|') {\n        return [];\n    }\n    const vs = s.split('|');\n    const n = vs.length - 1;\n    const xs = new Array(n);\n    for (let i = 0; i < n; i++) {\n        let v = vs[i + 1];\n        v = decode(values, v);\n        xs[i] = v;\n    }\n    return xs;\n}\nfunction decode(values, key) {\n    if (key === '' || key === '_') {\n        return null;\n    }\n    const id = (0, encode_1.decodeKey)(key);\n    const v = values[id];\n    if (v === null) {\n        return v;\n    }\n    switch (typeof v) {\n        case 'undefined':\n            return v;\n        case 'number':\n            return v;\n        case 'string':\n            /**\n             * - `b|T` -> true\n             * - `b|F` -> false\n             * - `o|` -> object\n             * - `n|xxx` -> number\n             * - `N|+` -> +Infinity\n             * - `N|-` -> -Infinity\n             * - `N|0` -> NaN\n             * - `a|` -> array\n             */\n            if (v[1] === '|') {\n                switch (v[0]) {\n                    case 'b': {\n                        switch (v[2]) {\n                            case 'T': // b|T\n                                return true;\n                            case 'F': // b|F\n                                return false;\n                            default:\n                                return (0, debug_1.throwUnknownDataType)(v);\n                        }\n                    }\n                    case 'o':\n                        return decodeObject(values, v);\n                    case 'n': // n|xxx\n                        return (0, number_1.s_to_num)(v.slice(2));\n                    case 'N': {\n                        switch (v[2]) {\n                            case '+': // N|+\n                                return Infinity;\n                            case '-': // N|-\n                                return -Infinity;\n                            case '0': // N|0\n                                return NaN;\n                            default:\n                                return (0, debug_1.throwUnknownDataType)(v);\n                        }\n                    }\n                    case 'a':\n                        return decodeArray(values, v);\n                }\n            }\n            return (0, encode_1.decodeStr)(v);\n    }\n    return (0, debug_1.throwUnknownDataType)(v);\n}\nfunction decompress(c) {\n    const [values, root] = c;\n    return decode(values, root);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getType = getType;\nexports.throwUnknownDataType = throwUnknownDataType;\nexports.throwUnsupportedData = throwUnsupportedData;\nfunction getType(o) {\n    return Object.prototype.toString.call(o);\n}\nfunction throwUnknownDataType(o) {\n    throw new TypeError('unsupported data type: ' + getType(o));\n}\nfunction throwUnsupportedData(name) {\n    throw new TypeError('unsupported data type: ' + name);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodeNum = encodeNum;\nexports.decodeNum = decodeNum;\nexports.decodeKey = decodeKey;\nexports.encodeBool = encodeBool;\nexports.decodeBool = decodeBool;\nexports.encodeStr = encodeStr;\nexports.decodeStr = decodeStr;\nconst number_1 = require(\"./number\");\nfunction encodeNum(num) {\n    if (num === Infinity) {\n        return 'N|+';\n    }\n    if (num === -Infinity) {\n        return 'N|-';\n    }\n    if (Number.isNaN(num)) {\n        return 'N|0';\n    }\n    return 'n|' + (0, number_1.num_to_s)(num);\n}\n/**\n * @deprecated optimized by inlining into decode() function\n * - `N|+` -> +Infinity\n * - `N|-` -> -Infinity\n * - `N|0` -> NaN\n * - `n|xxx` -> number\n */\nfunction decodeNum(s) {\n    if (s.length === 3 && s[0] === 'N' && s[1] === '|') {\n        switch (s[2]) {\n            case '+': // N|+\n                return Infinity;\n            case '-': // N|-\n                return -Infinity;\n            case '0': // N|0\n                return NaN;\n        }\n    }\n    return (0, number_1.s_to_num)(s.slice(2));\n}\nfunction decodeKey(key) {\n    return typeof key === 'number' ? key : (0, number_1.s_to_int)(key);\n}\nfunction encodeBool(b) {\n    return b ? 'b|T' : 'b|F';\n}\nfunction decodeBool(s) {\n    if (s.length === 3 && s[0] === 'b' && s[1] === '|') {\n        switch (s[2]) {\n            case 'T':\n                return true;\n            case 'F':\n                return false;\n        }\n    }\n    return !!s;\n}\nfunction encodeStr(str) {\n    if (str[1] === '|') {\n        switch (str[0]) {\n            case 'b':\n            case 'o':\n            case 'n':\n            case 'a':\n            case 's':\n                return 's|' + str;\n        }\n    }\n    return str;\n}\nfunction decodeStr(s) {\n    return s[0] === 's' && s[1] === '|' ? s.substr(2) : s;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.trimUndefined = trimUndefined;\nexports.trimUndefinedRecursively = trimUndefinedRecursively;\nfunction trimUndefined(object) {\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n    }\n}\nfunction trimUndefinedRecursively(object) {\n    trimUndefinedRecursivelyLoop(object, new Set());\n}\nfunction trimUndefinedRecursivelyLoop(object, tracks) {\n    tracks.add(object);\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n        else {\n            const value = object[key];\n            if (value && typeof value === 'object' && !tracks.has(value)) {\n                trimUndefinedRecursivelyLoop(value, tracks);\n            }\n        }\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = exports.trimUndefinedRecursively = exports.trimUndefined = exports.addValue = exports.decode = exports.decompress = exports.compress = void 0;\n/* for direct usage */\nvar core_1 = require(\"./core\");\nObject.defineProperty(exports, \"compress\", { enumerable: true, get: function () { return core_1.compress; } });\nObject.defineProperty(exports, \"decompress\", { enumerable: true, get: function () { return core_1.decompress; } });\n/* for custom wrapper */\nvar core_2 = require(\"./core\");\nObject.defineProperty(exports, \"decode\", { enumerable: true, get: function () { return core_2.decode; } });\nvar memory_1 = require(\"./memory\");\nObject.defineProperty(exports, \"addValue\", { enumerable: true, get: function () { return memory_1.addValue; } });\n/* to remove undefined object fields */\nvar helpers_1 = require(\"./helpers\");\nObject.defineProperty(exports, \"trimUndefined\", { enumerable: true, get: function () { return helpers_1.trimUndefined; } });\nObject.defineProperty(exports, \"trimUndefinedRecursively\", { enumerable: true, get: function () { return helpers_1.trimUndefinedRecursively; } });\n/* to config */\nvar config_1 = require(\"./config\");\nObject.defineProperty(exports, \"config\", { enumerable: true, get: function () { return config_1.config; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.memToValues = memToValues;\nexports.makeInMemoryStore = makeInMemoryStore;\nexports.makeInMemoryCache = makeInMemoryCache;\nexports.makeInMemoryMemory = makeInMemoryMemory;\nexports.addValue = addValue;\nconst config_1 = require(\"./config\");\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst number_1 = require(\"./number\");\nfunction memToValues(mem) {\n    return mem.store.toArray();\n}\nfunction makeInMemoryStore() {\n    const mem = [];\n    return {\n        forEach(cb) {\n            for (let i = 0; i < mem.length; i++) {\n                if (cb(mem[i]) === 'break') {\n                    return;\n                }\n            }\n        },\n        add(value) {\n            mem.push(value);\n        },\n        toArray() {\n            return mem;\n        },\n    };\n}\nfunction makeInMemoryCache() {\n    const valueMem = Object.create(null);\n    const schemaMem = Object.create(null);\n    return {\n        getValue(key) {\n            return valueMem[key];\n        },\n        getSchema(key) {\n            return schemaMem[key];\n        },\n        forEachValue(cb) {\n            for (const [key, value] of Object.entries(valueMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        forEachSchema(cb) {\n            for (const [key, value] of Object.entries(schemaMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        setValue(key, value) {\n            valueMem[key] = value;\n        },\n        setSchema(key, value) {\n            schemaMem[key] = value;\n        },\n        hasValue(key) {\n            return key in valueMem;\n        },\n        hasSchema(key) {\n            return key in schemaMem;\n        },\n    };\n}\nfunction makeInMemoryMemory() {\n    return {\n        store: makeInMemoryStore(),\n        cache: makeInMemoryCache(),\n        keyCount: 0,\n    };\n}\nfunction getValueKey(mem, value) {\n    if (mem.cache.hasValue(value)) {\n        return mem.cache.getValue(value);\n    }\n    const id = mem.keyCount++;\n    const key = (0, number_1.num_to_s)(id);\n    mem.store.add(value);\n    mem.cache.setValue(value, key);\n    return key;\n}\n/** @remark in-place sort the keys */\nfunction getSchema(mem, keys) {\n    if (config_1.config.sort_key) {\n        keys.sort();\n    }\n    const schema = keys.join(',');\n    if (mem.cache.hasSchema(schema)) {\n        return mem.cache.getSchema(schema);\n    }\n    const key_id = addValue(mem, keys, undefined);\n    mem.cache.setSchema(schema, key_id);\n    return key_id;\n}\nfunction addValue(mem, o, parent) {\n    if (o === null) {\n        return '';\n    }\n    switch (typeof o) {\n        case 'undefined':\n            if (Array.isArray(parent)) {\n                return addValue(mem, null, parent);\n            }\n            break;\n        case 'object':\n            if (o === null) {\n                return getValueKey(mem, null);\n            }\n            if (Array.isArray(o)) {\n                let acc = 'a';\n                for (let i = 0; i < o.length; i++) {\n                    const v = o[i];\n                    const key = v === null ? '_' : addValue(mem, v, o);\n                    acc += '|' + key;\n                }\n                if (acc === 'a') {\n                    acc = 'a|';\n                }\n                return getValueKey(mem, acc);\n            }\n            else {\n                const keys = Object.keys(o);\n                if (keys.length === 0) {\n                    return getValueKey(mem, 'o|');\n                }\n                let acc = 'o';\n                const key_id = getSchema(mem, keys);\n                acc += '|' + key_id;\n                for (const key of keys) {\n                    const value = o[key];\n                    const v = addValue(mem, value, o);\n                    acc += '|' + v;\n                }\n                return getValueKey(mem, acc);\n            }\n        case 'boolean':\n            return getValueKey(mem, (0, encode_1.encodeBool)(o));\n        case 'number':\n            if (Number.isNaN(o)) {\n                if (config_1.config.preserve_nan) {\n                    return getValueKey(mem, 'N|0');\n                }\n                if (config_1.config.error_on_nan) {\n                    (0, debug_1.throwUnsupportedData)('[number NaN]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            if (Number.POSITIVE_INFINITY === o) {\n                if (config_1.config.preserve_infinite) {\n                    return getValueKey(mem, 'N|+');\n                }\n                if (config_1.config.error_on_infinite) {\n                    (0, debug_1.throwUnsupportedData)('[number Infinity]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            if (Number.NEGATIVE_INFINITY === o) {\n                if (config_1.config.preserve_infinite) {\n                    return getValueKey(mem, 'N|-');\n                }\n                if (config_1.config.error_on_infinite) {\n                    (0, debug_1.throwUnsupportedData)('[number -Infinity]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            return getValueKey(mem, (0, encode_1.encodeNum)(o));\n        case 'string':\n            return getValueKey(mem, (0, encode_1.encodeStr)(o));\n    }\n    return (0, debug_1.throwUnknownDataType)(o);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.s_to_int = s_to_int;\nexports.s_to_big_int = s_to_big_int;\nexports.int_to_s = int_to_s;\nexports.big_int_to_s = big_int_to_s;\nexports.num_to_s = num_to_s;\nexports.int_str_to_s = int_str_to_s;\nexports.s_to_num = s_to_num;\nlet i_to_s = '';\nfor (let i = 0; i < 10; i++) {\n    const c = String.fromCharCode(48 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + 32 + i);\n    i_to_s += c;\n}\nconst N = i_to_s.length;\nconst s_to_i = {};\nfor (let i = 0; i < N; i++) {\n    const s = i_to_s[i];\n    s_to_i[s] = i;\n}\nfunction s_to_int(s) {\n    let acc = 0;\n    let pow = 1;\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = s_to_i[c];\n        x *= pow;\n        acc += x;\n        pow *= N;\n    }\n    return acc;\n}\nfunction s_to_big_int(s) {\n    let acc = BigInt(0);\n    let pow = BigInt(1);\n    const n = BigInt(N);\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = BigInt(s_to_i[c]);\n        x *= pow;\n        acc += x;\n        pow *= n;\n    }\n    return acc;\n}\nfunction int_to_s(int) {\n    if (int === 0) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== 0) {\n        const i = int % N;\n        const c = i_to_s[i];\n        acc.push(c);\n        int -= i;\n        int /= N;\n    }\n    return acc.reverse().join('');\n}\nfunction big_int_to_s(int) {\n    const zero = BigInt(0);\n    const n = BigInt(N);\n    if (int === zero) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== zero) {\n        const i = int % n;\n        const c = i_to_s[Number(i)];\n        acc.push(c);\n        int /= n;\n    }\n    return acc.reverse().join('');\n}\nfunction reverse(s) {\n    return s.split('').reverse().join('');\n}\nfunction num_to_s(num) {\n    if (num < 0) {\n        return '-' + num_to_s(-num);\n    }\n    let [a, b] = num.toString().split('.');\n    if (!b) {\n        if (a.includes('e')) {\n            // e.g. 2e-13 -> 2.0e-13\n            const [a1, a2] = a.split('e');\n            a = a1;\n            b = '0e' + a2;\n        }\n        else {\n            return int_to_s(num);\n        }\n    }\n    let c;\n    if (b) {\n        [b, c] = b.split('e');\n    }\n    a = int_str_to_s(a);\n    b = reverse(b);\n    b = int_str_to_s(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += '.';\n        switch (c[0]) {\n            case '+':\n                c = c.slice(1);\n                break;\n            case '-':\n                str += '-';\n                c = c.slice(1);\n                break;\n        }\n        c = int_str_to_s(c);\n        str += c;\n    }\n    return str;\n}\nfunction int_str_to_s(int_str) {\n    const num = +int_str;\n    if (num.toString() === int_str && num + 1 !== num && num - 1 !== num) {\n        return int_to_s(num);\n    }\n    return ':' + big_int_to_s(BigInt(int_str));\n}\nfunction s_to_int_str(s) {\n    if (s[0] === ':') {\n        return s_to_big_int(s.substring(1)).toString();\n    }\n    return s_to_int(s).toString();\n}\nfunction s_to_num(s) {\n    if (s[0] === '-') {\n        return -s_to_num(s.substr(1));\n    }\n    let [a, b, c] = s.split('.');\n    if (!b) {\n        return s_to_int(a);\n    }\n    a = s_to_int_str(a);\n    b = s_to_int_str(b);\n    b = reverse(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += 'e';\n        let neg = false;\n        if (c[0] === '-') {\n            neg = true;\n            c = c.slice(1);\n        }\n        c = s_to_int_str(c);\n        str += neg ? -c : +c;\n    }\n    return +str;\n}\n","export default function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : '';\n  var output = Math.abs(number).toString();\n  while (output.length < targetLength) {\n    output = '0' + output;\n  }\n  return sign + output;\n}","import defaultLocale from \"../../locale/en-US/index.js\";\nexport default defaultLocale;","var defaultOptions = {};\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\nvar formatters = {\n  // Year\n  y: function y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    var signedYear = date.getUTCFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n  },\n  // Month\n  M: function M(date, token) {\n    var month = date.getUTCMonth();\n    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n  // Day of the month\n  d: function d(date, token) {\n    return addLeadingZeros(date.getUTCDate(), token.length);\n  },\n  // AM or PM\n  a: function a(date, token) {\n    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return dayPeriodEnumValue.toUpperCase();\n      case 'aaa':\n        return dayPeriodEnumValue;\n      case 'aaaaa':\n        return dayPeriodEnumValue[0];\n      case 'aaaa':\n      default:\n        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token) {\n    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n  },\n  // Hour [0-23]\n  H: function H(date, token) {\n    return addLeadingZeros(date.getUTCHours(), token.length);\n  },\n  // Minute\n  m: function m(date, token) {\n    return addLeadingZeros(date.getUTCMinutes(), token.length);\n  },\n  // Second\n  s: function s(date, token) {\n    return addLeadingZeros(date.getUTCSeconds(), token.length);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    var numberOfDigits = token.length;\n    var milliseconds = date.getUTCMilliseconds();\n    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n    return addLeadingZeros(fractionalSeconds, token.length);\n  }\n};\nexport default formatters;","var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'P':\n      return formatLong.date({\n        width: 'short'\n      });\n    case 'PP':\n      return formatLong.date({\n        width: 'medium'\n      });\n    case 'PPP':\n      return formatLong.date({\n        width: 'long'\n      });\n    case 'PPPP':\n    default:\n      return formatLong.date({\n        width: 'full'\n      });\n  }\n};\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'p':\n      return formatLong.time({\n        width: 'short'\n      });\n    case 'pp':\n      return formatLong.time({\n        width: 'medium'\n      });\n    case 'ppp':\n      return formatLong.time({\n        width: 'long'\n      });\n    case 'pppp':\n    default:\n      return formatLong.time({\n        width: 'full'\n      });\n  }\n};\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/) || [];\n  var datePattern = matchResult[1];\n  var timePattern = matchResult[2];\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n  var dateTimeFormat;\n  switch (datePattern) {\n    case 'P':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'short'\n      });\n      break;\n    case 'PP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'medium'\n      });\n      break;\n    case 'PPP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'long'\n      });\n      break;\n    case 'PPPP':\n    default:\n      dateTimeFormat = formatLong.dateTime({\n        width: 'full'\n      });\n      break;\n  }\n  return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\nvar longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getUTCISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setUTCFullYear(year, 0, 4);\n  fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCISOWeek(fourthOfJanuary);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getUTCWeekYear(dirtyDate, options);\n  var firstWeek = new Date(0);\n  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCWeek(firstWeek, options);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n  return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n  return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n  if (token === 'YYYY') {\n    throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'YY') {\n    throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'D') {\n    throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'DD') {\n    throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  }\n}","export default function requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}","export default function toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n  var number = Number(dirtyNumber);\n  if (isNaN(number)) {\n    return number;\n  }\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n  date.setDate(date.getDate() + amount);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var timestamp = toDate(dirtyDate).getTime();\n  var amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n  var dayOfMonth = date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  var endOfDesiredMonth = new Date(date.getTime());\n  endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n    return date;\n  }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  var days = amount * 7;\n  return addDays(dirtyDate, days);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n  requiredArgs(2, arguments);\n  return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import endOfWeek from \"../endOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * const result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return endOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n  date.setDate(date.getDate() + diff);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n  am: 'am',\n  pm: 'pm',\n  midnight: 'midnight',\n  noon: 'noon',\n  morning: 'morning',\n  afternoon: 'afternoon',\n  evening: 'evening',\n  night: 'night'\n};\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Era\n  G: function G(date, token, localize) {\n    var era = date.getUTCFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case 'G':\n      case 'GG':\n      case 'GGG':\n        return localize.era(era, {\n          width: 'abbreviated'\n        });\n      // A, B\n      case 'GGGGG':\n        return localize.era(era, {\n          width: 'narrow'\n        });\n      // Anno Domini, Before Christ\n      case 'GGGG':\n      default:\n        return localize.era(era, {\n          width: 'wide'\n        });\n    }\n  },\n  // Year\n  y: function y(date, token, localize) {\n    // Ordinal number\n    if (token === 'yo') {\n      var signedYear = date.getUTCFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      var year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, {\n        unit: 'year'\n      });\n    }\n    return lightFormatters.y(date, token);\n  },\n  // Local week-numbering year\n  Y: function Y(date, token, localize, options) {\n    var signedWeekYear = getUTCWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === 'YY') {\n      var twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === 'Yo') {\n      return localize.ordinalNumber(weekYear, {\n        unit: 'year'\n      });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n  // ISO week-numbering year\n  R: function R(date, token) {\n    var isoWeekYear = getUTCISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function u(date, token) {\n    var year = date.getUTCFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n  // Quarter\n  Q: function Q(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'Q':\n        return String(quarter);\n      // 01, 02, 03, 04\n      case 'QQ':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case 'Qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n      case 'QQQ':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'QQQQQ':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // 1st quarter, 2nd quarter, ...\n      case 'QQQQ':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone quarter\n  q: function q(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'q':\n        return String(quarter);\n      // 01, 02, 03, 04\n      case 'qq':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case 'qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n      case 'qqq':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'qqqqq':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // 1st quarter, 2nd quarter, ...\n      case 'qqqq':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Month\n  M: function M(date, token, localize) {\n    var month = date.getUTCMonth();\n    switch (token) {\n      case 'M':\n      case 'MM':\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case 'Mo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n      case 'MMM':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // J, F, ..., D\n      case 'MMMMM':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // January, February, ..., December\n      case 'MMMM':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone month\n  L: function L(date, token, localize) {\n    var month = date.getUTCMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case 'L':\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case 'LL':\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case 'Lo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n      case 'LLL':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // J, F, ..., D\n      case 'LLLLL':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // January, February, ..., December\n      case 'LLLL':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Local week of year\n  w: function w(date, token, localize, options) {\n    var week = getUTCWeek(date, options);\n    if (token === 'wo') {\n      return localize.ordinalNumber(week, {\n        unit: 'week'\n      });\n    }\n    return addLeadingZeros(week, token.length);\n  },\n  // ISO week of year\n  I: function I(date, token, localize) {\n    var isoWeek = getUTCISOWeek(date);\n    if (token === 'Io') {\n      return localize.ordinalNumber(isoWeek, {\n        unit: 'week'\n      });\n    }\n    return addLeadingZeros(isoWeek, token.length);\n  },\n  // Day of the month\n  d: function d(date, token, localize) {\n    if (token === 'do') {\n      return localize.ordinalNumber(date.getUTCDate(), {\n        unit: 'date'\n      });\n    }\n    return lightFormatters.d(date, token);\n  },\n  // Day of year\n  D: function D(date, token, localize) {\n    var dayOfYear = getUTCDayOfYear(date);\n    if (token === 'Do') {\n      return localize.ordinalNumber(dayOfYear, {\n        unit: 'dayOfYear'\n      });\n    }\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n  // Day of week\n  E: function E(date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    switch (token) {\n      // Tue\n      case 'E':\n      case 'EE':\n      case 'EEE':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'EEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'EEEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'EEEE':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Local day of week\n  e: function e(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case 'e':\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case 'ee':\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case 'eo':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n      case 'eee':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'eeeee':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'eeeeee':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'eeee':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone local day of week\n  c: function c(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case 'c':\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case 'cc':\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case 'co':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n      case 'ccc':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // T\n      case 'ccccc':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // Tu\n      case 'cccccc':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'standalone'\n        });\n      // Tuesday\n      case 'cccc':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // ISO day of week\n  i: function i(date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case 'i':\n        return String(isoDayOfWeek);\n      // 02\n      case 'ii':\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case 'io':\n        return localize.ordinalNumber(isoDayOfWeek, {\n          unit: 'day'\n        });\n      // Tue\n      case 'iii':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'iiiii':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'iiiiii':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'iiii':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM or PM\n  a: function a(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'aaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n      case 'aaaaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'aaaa':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM, PM, midnight, noon\n  b: function b(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n    }\n    switch (token) {\n      case 'b':\n      case 'bb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'bbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n      case 'bbbbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'bbbb':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // in the morning, in the afternoon, in the evening, at night\n  B: function B(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n    switch (token) {\n      case 'B':\n      case 'BB':\n      case 'BBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'BBBBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'BBBB':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token, localize) {\n    if (token === 'ho') {\n      var hours = date.getUTCHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return lightFormatters.h(date, token);\n  },\n  // Hour [0-23]\n  H: function H(date, token, localize) {\n    if (token === 'Ho') {\n      return localize.ordinalNumber(date.getUTCHours(), {\n        unit: 'hour'\n      });\n    }\n    return lightFormatters.H(date, token);\n  },\n  // Hour [0-11]\n  K: function K(date, token, localize) {\n    var hours = date.getUTCHours() % 12;\n    if (token === 'Ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return addLeadingZeros(hours, token.length);\n  },\n  // Hour [1-24]\n  k: function k(date, token, localize) {\n    var hours = date.getUTCHours();\n    if (hours === 0) hours = 24;\n    if (token === 'ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return addLeadingZeros(hours, token.length);\n  },\n  // Minute\n  m: function m(date, token, localize) {\n    if (token === 'mo') {\n      return localize.ordinalNumber(date.getUTCMinutes(), {\n        unit: 'minute'\n      });\n    }\n    return lightFormatters.m(date, token);\n  },\n  // Second\n  s: function s(date, token, localize) {\n    if (token === 'so') {\n      return localize.ordinalNumber(date.getUTCSeconds(), {\n        unit: 'second'\n      });\n    }\n    return lightFormatters.s(date, token);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    return lightFormatters.S(date, token);\n  },\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function X(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    if (timezoneOffset === 0) {\n      return 'Z';\n    }\n    switch (token) {\n      // Hours and optional minutes\n      case 'X':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case 'XXXX':\n      case 'XX':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function x(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case 'xxxx':\n      case 'xx':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (GMT)\n  O: function O(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (specific non-location)\n  z: function z(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n      case 'zzzz':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Seconds timestamp\n  t: function t(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = Math.floor(originalDate.getTime() / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n  // Milliseconds timestamp\n  T: function T(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = originalDate.getTime();\n    return addLeadingZeros(timestamp, token.length);\n  }\n};\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = Math.floor(absOffset / 60);\n  var minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  var delimiter = dirtyDelimiter || '';\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+';\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, dirtyDelimiter);\n}\nfunction formatTimezone(offset, dirtyDelimiter) {\n  var delimiter = dirtyDelimiter || '';\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n  var minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var timestamp = date.getTime();\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n  var startOfYearTimestamp = date.getTime();\n  var difference = timestamp - startOfYearTimestamp;\n  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n  requiredArgs(2, arguments);\n  var formatStr = String(dirtyFormatStr);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property');\n  }\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property');\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n  var utcDate = subMilliseconds(originalDate, timezoneOffset);\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale,\n    _originalDate: originalDate\n  };\n  var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n    if (firstCharacter === 'p' || firstCharacter === 'P') {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n    return substring;\n  }).join('').match(formattingTokensRegExp).map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return \"'\";\n    }\n    var firstCharacter = substring[0];\n    if (firstCharacter === \"'\") {\n      return cleanEscapedString(substring);\n    }\n    var formatter = formatters[firstCharacter];\n    if (formatter) {\n      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n      }\n      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n      }\n      return formatter(utcDate, substring, locale.localize, formatterOptions);\n    }\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n    }\n    return substring;\n  }).join('');\n  return result;\n}\nfunction cleanEscapedString(input) {\n  var matched = input.match(escapedStringRegExp);\n  if (!matched) {\n    return input;\n  }\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {0|1|2|3|4|5|6} the day of week, 0 represents Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport default function getDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  return day;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport default function getISODay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  if (day === 0) {\n    day = 7;\n  }\n  return day;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport addDays from \"../addDays/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n *\n * | Key            | Description                        |\n * |----------------|------------------------------------|\n * | years          | Amount of years to be added        |\n * | months         | Amount of months to be added       |\n * | weeks          | Amount of weeks to be added        |\n * | days           | Amount of days to be added         |\n * | hours          | Amount of hours to be added        |\n * | minutes        | Amount of minutes to be added      |\n * | seconds        | Amount of seconds to be added      |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n *   years: 2,\n *   months: 9,\n *   weeks: 1,\n *   days: 7,\n *   hours: 5,\n *   minutes: 9,\n *   seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport default function add(dirtyDate, duration) {\n  requiredArgs(2, arguments);\n  if (!duration || _typeof(duration) !== 'object') return new Date(NaN);\n  var years = duration.years ? toInteger(duration.years) : 0;\n  var months = duration.months ? toInteger(duration.months) : 0;\n  var weeks = duration.weeks ? toInteger(duration.weeks) : 0;\n  var days = duration.days ? toInteger(duration.days) : 0;\n  var hours = duration.hours ? toInteger(duration.hours) : 0;\n  var minutes = duration.minutes ? toInteger(duration.minutes) : 0;\n  var seconds = duration.seconds ? toInteger(duration.seconds) : 0;\n\n  // Add years and months\n  var date = toDate(dirtyDate);\n  var dateWithMonths = months || years ? addMonths(date, months + years * 12) : date;\n\n  // Add weeks and days\n  var dateWithDays = days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths;\n\n  // Add days, hours, minutes and seconds\n  var minutesToAdd = minutes + hours * 60;\n  var secondsToAdd = seconds + minutesToAdd * 60;\n  var msToAdd = secondsToAdd * 1000;\n  var finalDate = new Date(dateWithDays.getTime() + msToAdd);\n  return finalDate;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * const result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  return day === 0 || day === 6;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * const result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 0;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * const result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 6;\n}","import isWeekend from \"../isWeekend/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isSunday from \"../isSunday/index.js\";\nimport isSaturday from \"../isSaturday/index.js\";\n/**\n * @name addBusinessDays\n * @category Day Helpers\n * @summary Add the specified number of business days (mon - fri) to the given date.\n *\n * @description\n * Add the specified number of business days (mon - fri) to the given date, ignoring weekends.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of business days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the business days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 business days to 1 September 2014:\n * const result = addBusinessDays(new Date(2014, 8, 1), 10)\n * //=> Mon Sep 15 2014 00:00:00 (skipped weekend days)\n */\nexport default function addBusinessDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var startedOnWeekend = isWeekend(date);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) return new Date(NaN);\n  var hours = date.getHours();\n  var sign = amount < 0 ? -1 : 1;\n  var fullWeeks = toInteger(amount / 5);\n  date.setDate(date.getDate() + fullWeeks * 7);\n\n  // Get remaining days not part of a full week\n  var restDays = Math.abs(amount % 5);\n\n  // Loops over remaining days\n  while (restDays > 0) {\n    date.setDate(date.getDate() + sign);\n    if (!isWeekend(date)) restDays -= 1;\n  }\n\n  // If the date is a weekend day and we reduce a dividable of\n  // 5 from it, we land on a weekend date.\n  // To counter this, we add days accordingly to land on the next business day\n  if (startedOnWeekend && isWeekend(date) && amount !== 0) {\n    // If we're reducing days, we want to add days until we land on a weekday\n    // If we're adding days we want to reduce days until we land on a weekday\n    if (isSaturday(date)) date.setDate(date.getDate() + (sign < 0 ? 2 : -1));\n    if (isSunday(date)) date.setDate(date.getDate() + (sign < 0 ? 1 : -2));\n  }\n\n  // Restore hours to avoid DST lag\n  date.setHours(hours);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}","import toDate from \"../toDate/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport default function getISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuary);\n  return date;\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var startOfDayLeft = startOfDay(dirtyDateLeft);\n  var startOfDayRight = startOfDay(dirtyDateRight);\n  var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n  var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeekYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * const result = setISOWeekYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nexport default function setISOWeekYear(dirtyDate, dirtyISOWeekYear) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeekYear = toInteger(dirtyISOWeekYear);\n  var diff = differenceInCalendarDays(date, startOfISOWeekYear(date));\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(isoWeekYear, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  date = startOfISOWeekYear(fourthOfJanuary);\n  date.setDate(date.getDate() + diff);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport setISOWeekYear from \"../setISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the ISO week-numbering years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * const result = addISOWeekYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nexport default function addISOWeekYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  var months = amount * 3;\n  return addMonths(dirtyDate, months);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * 1000);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, amount * 12);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name areIntervalsOverlapping\n * @category Interval Helpers\n * @summary Is the given time interval overlapping with another time interval?\n *\n * @description\n * Is the given time interval overlapping with another time interval? Adjacent intervals do not count as overlapping.\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.inclusive=false] - whether the comparison is inclusive or not\n * @returns {Boolean} whether the time intervals are overlapping\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> false\n *\n * @example\n * // For adjacent time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 30) }\n * )\n * //=> false\n *\n * @example\n * // Using the inclusive option:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) }\n * )\n * //=> false\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) },\n *   { inclusive: true }\n * )\n * //=> true\n */\nexport default function areIntervalsOverlapping(intervalLeft, intervalRight, options) {\n  requiredArgs(2, arguments);\n  var leftStartTime = toDate(intervalLeft === null || intervalLeft === void 0 ? void 0 : intervalLeft.start).getTime();\n  var leftEndTime = toDate(intervalLeft === null || intervalLeft === void 0 ? void 0 : intervalLeft.end).getTime();\n  var rightStartTime = toDate(intervalRight === null || intervalRight === void 0 ? void 0 : intervalRight.start).getTime();\n  var rightEndTime = toDate(intervalRight === null || intervalRight === void 0 ? void 0 : intervalRight.end).getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  if (options !== null && options !== void 0 && options.inclusive) {\n    return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime;\n  }\n  return leftStartTime < rightEndTime && rightStartTime < leftEndTime;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n  requiredArgs(1, arguments);\n  var datesArray;\n  // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array.\n  } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  } else {\n    // `dirtyDatesArray` is non-iterable, return Invalid Date\n    return new Date(NaN);\n  }\n  var result;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (result === undefined || result < currentDate || isNaN(Number(currentDate))) {\n      result = currentDate;\n    }\n  });\n  return result || new Date(NaN);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} - the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport default function min(dirtyDatesArray) {\n  requiredArgs(1, arguments);\n  var datesArray;\n  // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n    // If `dirtyDatesArray` is Array-like Object, convert to Array.\n  } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  } else {\n    // `dirtyDatesArray` is non-iterable, return Invalid Date\n    return new Date(NaN);\n  }\n  var result;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (result === undefined || result > currentDate || isNaN(currentDate.getDate())) {\n      result = currentDate;\n    }\n  });\n  return result || new Date(NaN);\n}","import max from \"../max/index.js\";\nimport min from \"../min/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name clamp\n * @category Interval Helpers\n * @summary Return a date bounded by the start and the end of the given interval\n *\n * @description\n * Clamps a date to the lower bound with the start of the interval and the upper\n * bound with the end of the interval.\n *\n * - When the date is less than the start of the interval, the start is returned.\n * - When the date is greater than the end of the interval, the end is returned.\n * - Otherwise the date is returned.\n *\n * @example\n * // What is Mar, 21, 2021 bounded to an interval starting at Mar, 22, 2021 and ending at Apr, 01, 2021\n * const result = clamp(new Date(2021, 2, 21), {\n *   start: new Date(2021, 2, 22),\n *   end: new Date(2021, 3, 1),\n * })\n * //=> Mon Mar 22 2021 00:00:00\n *\n * @param {Date | Number} date - the date to be bounded\n * @param {Interval} interval - the interval to bound to\n * @returns {Date} the date bounded by the start and the end of the interval\n * @throws {TypeError} 2 arguments required\n */\nexport default function clamp(date, _ref) {\n  var start = _ref.start,\n    end = _ref.end;\n  requiredArgs(2, arguments);\n  return min([max([date, start]), end]);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name closestIndexTo\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * @param {Date | Number} dateToCompare - the date to compare with\n * @param {Array<Date> | Array<number>} datesArray - the array to search\n * @returns {Number | undefined} an index of the date closest to the given date or undefined if no valid value is given\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * const dateToCompare = new Date(2015, 8, 6)\n * const datesArray = [\n *   new Date(2015, 0, 1),\n *   new Date(2016, 0, 1),\n *   new Date(2017, 0, 1)\n * ]\n * const result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nexport default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {\n  requiredArgs(2, arguments);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  if (isNaN(Number(dateToCompare))) return NaN;\n  var timeToCompare = dateToCompare.getTime();\n  var datesArray;\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = [];\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  }\n  var result;\n  var minDistance;\n  datesArray.forEach(function (dirtyDate, index) {\n    var currentDate = toDate(dirtyDate);\n    if (isNaN(Number(currentDate))) {\n      result = NaN;\n      minDistance = NaN;\n      return;\n    }\n    var distance = Math.abs(timeToCompare - currentDate.getTime());\n    if (result == null || distance < Number(minDistance)) {\n      result = index;\n      minDistance = distance;\n    }\n  });\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name closestTo\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * @param {Date | Number} dateToCompare - the date to compare with\n * @param {Array<Date> | Array<number>} datesArray - the array to search\n * @returns {Date | undefined} the date from the array closest to the given date or undefined if no valid value is given\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * const dateToCompare = new Date(2015, 8, 6)\n * const result = closestTo(dateToCompare, [\n *   new Date(2000, 0, 1),\n *   new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nexport default function closestTo(dirtyDateToCompare, dirtyDatesArray) {\n  requiredArgs(2, arguments);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  if (isNaN(Number(dateToCompare))) return new Date(NaN);\n  var timeToCompare = dateToCompare.getTime();\n  var datesArray;\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = [];\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  }\n  var result;\n  var minDistance;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (isNaN(Number(currentDate))) {\n      result = new Date(NaN);\n      minDistance = NaN;\n      return;\n    }\n    var distance = Math.abs(timeToCompare - currentDate.getTime());\n    if (result == null || distance < Number(minDistance)) {\n      result = currentDate;\n      minDistance = distance;\n    }\n  });\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var diff = dateLeft.getTime() - dateRight.getTime();\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * const result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * //   Sun Jul 02 1995 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport default function compareDesc(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var diff = dateLeft.getTime() - dateRight.getTime();\n  if (diff > 0) {\n    return -1;\n  } else if (diff < 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInYear = 365.2425;\n\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInMinute = 60000;\n\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInHour = 3600000;\n\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInSecond = 1000;\n\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\nexport var minTime = -maxTime;\n\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var minutesInHour = 60;\n\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInQuarter = 3;\n\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInYear = 12;\n\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var quartersInYear = 4;\n\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInHour = 3600;\n\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMinute = 60;\n\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInDay = secondsInHour * 24;\n\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInWeek = secondsInDay * 7;\n\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInYear = secondsInDay * daysInYear;\n\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMonth = secondsInYear / 12;\n\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInQuarter = secondsInMonth * 3;","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { daysInWeek } from \"../constants/index.js\";\n/**\n * @name daysToWeeks\n * @category Conversion Helpers\n * @summary Convert days to weeks.\n *\n * @description\n * Convert a number of days to a full number of weeks.\n *\n * @param {number} days - number of days to be converted\n *\n * @returns {number} the number of days converted in weeks\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 14 days to weeks:\n * const result = daysToWeeks(14)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = daysToWeeks(13)\n * //=> 1\n */\nexport default function daysToWeeks(days) {\n  requiredArgs(1, arguments);\n  var weeks = days / daysInWeek;\n  return Math.floor(weeks);\n}","import addDays from \"../addDays/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport isSameDay from \"../isSameDay/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport isWeekend from \"../isWeekend/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name differenceInBusinessDays\n * @category Day Helpers\n * @summary Get the number of business days between the given dates.\n *\n * @description\n * Get the number of business day periods between the given dates.\n * Business days being days that arent in the weekend.\n * Like `differenceInCalendarDays`, the function removes the times from\n * the dates before calculating the difference.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of business days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many business days are between\n * // 10 January 2014 and 20 July 2014?\n * const result = differenceInBusinessDays(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 0, 10)\n * )\n * //=> 136\n *\n * // How many business days are between\n * // 30 November 2021 and 1 November 2021?\n * const result = differenceInBusinessDays(\n *   new Date(2021, 10, 30),\n *   new Date(2021, 10, 1)\n * )\n * //=> 21\n *\n * // How many business days are between\n * // 1 November 2021 and 1 December 2021?\n * const result = differenceInBusinessDays(\n *   new Date(2021, 10, 1),\n *   new Date(2021, 11, 1)\n * )\n * //=> -22\n *\n * // How many business days are between\n * // 1 November 2021 and 1 November 2021 ?\n * const result = differenceInBusinessDays(\n *   new Date(2021, 10, 1),\n *   new Date(2021, 10, 1)\n * )\n * //=> 0\n */\nexport default function differenceInBusinessDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  if (!isValid(dateLeft) || !isValid(dateRight)) return NaN;\n  var calendarDifference = differenceInCalendarDays(dateLeft, dateRight);\n  var sign = calendarDifference < 0 ? -1 : 1;\n  var weeks = toInteger(calendarDifference / 7);\n  var result = weeks * 5;\n  dateRight = addDays(dateRight, weeks * 7);\n\n  // the loop below will run at most 6 times to account for the remaining days that don't makeup a full week\n  while (!isSameDay(dateLeft, dateRight)) {\n    // sign is used to account for both negative and positive differences\n    result += isWeekend(dateRight) ? 0 : sign;\n    dateRight = addDays(dateRight, sign);\n  }\n  return result === 0 ? 0 : result;\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * const result = differenceInCalendarISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarISOWeekYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight);\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name differenceInCalendarISOWeeks\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * const result = differenceInCalendarISOWeeks(\n *   new Date(2014, 6, 21),\n *   new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarISOWeeks(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft);\n  var startOfISOWeekRight = startOfISOWeek(dirtyDateRight);\n  var timestampLeft = startOfISOWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfISOWeekLeft);\n  var timestampRight = startOfISOWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfISOWeekRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n  return yearDiff * 12 + monthDiff;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * const result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nexport default function getQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var quarter = Math.floor(date.getMonth() / 3) + 1;\n  return quarter;\n}","import getQuarter from \"../getQuarter/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarQuarters(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n  var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight);\n  return yearDiff * 4 + quarterDiff;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5),\n *   { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport default function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var startOfWeekLeft = startOfWeek(dirtyDateLeft, options);\n  var startOfWeekRight = startOfWeek(dirtyDateRight, options);\n  var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft);\n  var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() - dateRight.getFullYear();\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(dateLeft, dateRight) {\n  var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n//=> 92\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareLocalAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n  dateLeft.setDate(dateLeft.getDate() - sign * difference);\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n  var result = sign * (difference - isLastDayNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","var roundingMap = {\n  ceil: Math.ceil,\n  round: Math.round,\n  floor: Math.floor,\n  trunc: function trunc(value) {\n    return value < 0 ? Math.ceil(value) : Math.floor(value);\n  } // Math.trunc is not supported by IE\n};\n\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n  return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}","import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport default function differenceInHours(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import addISOWeekYears from \"../addISOWeekYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * const result = subISOWeekYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nexport default function subISOWeekYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addISOWeekYears(dirtyDate, -amount);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarISOWeekYears from \"../differenceInCalendarISOWeekYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport subISOWeekYears from \"../subISOWeekYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * const result = differenceInISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nexport default function differenceInISOWeekYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarISOWeekYears(dateLeft, dateRight));\n  dateLeft = subISOWeekYears(dateLeft, sign * difference);\n\n  // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n  // if last calendar ISO year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastISOWeekYearNotFull = Number(compareAsc(dateLeft, dateRight) === -sign);\n  var result = sign * (difference - isLastISOWeekYearNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n *   new Date(2014, 6, 2, 12, 20, 0),\n *   new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n *   new Date(2000, 0, 1, 10, 0, 0),\n *   new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n  var result;\n\n  // Check for the difference of less than month\n  if (difference < 1) {\n    result = 0;\n  } else {\n    if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n      // This will check if the date is end of Feb and assign a higher end of month date\n      // to compare it with Jan\n      dateLeft.setDate(30);\n    }\n    dateLeft.setMonth(dateLeft.getMonth() - sign * difference);\n\n    // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n    // If so, result must be decreased by 1 in absolute value\n    var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign;\n\n    // Check for cases of one full calendar month\n    if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n      isLastMonthNotFull = false;\n    }\n    result = sign * (difference - Number(isLastMonthNotFull));\n  }\n\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import differenceInMonths from \"../differenceInMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport default function differenceInQuarters(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMonths(dateLeft, dateRight) / 3;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInDays from \"../differenceInDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 6)\n * )\n * //=> 8\n */\nexport default function differenceInWeeks(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInDays(dateLeft, dateRight) / 7;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight));\n\n  // Set both dates to a valid leap year for accurate comparison when dealing\n  // with leap days\n  dateLeft.setFullYear(1584);\n  dateRight.setFullYear(1584);\n\n  // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n  var result = sign * (difference - Number(isLastYearNotFull));\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 9, 10)\n * })\n * //=> [\n * //   Mon Oct 06 2014 00:00:00,\n * //   Tue Oct 07 2014 00:00:00,\n * //   Wed Oct 08 2014 00:00:00,\n * //   Thu Oct 09 2014 00:00:00,\n * //   Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setDate(currentDate.getDate() + step);\n    currentDate.setHours(0, 0, 0, 0);\n  }\n  return dates;\n}","import addHours from \"../addHours/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachHourOfInterval\n * @category Interval Helpers\n * @summary Return the array of hours within the specified time interval.\n *\n * @description\n * Return the array of hours within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of hours from the hour of the interval start to the hour of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each hour between 6 October 2014, 12:00 and 6 October 2014, 15:00\n * const result = eachHourOfInterval({\n *   start: new Date(2014, 9, 6, 12),\n *   end: new Date(2014, 9, 6, 15)\n * })\n * //=> [\n * //   Mon Oct 06 2014 12:00:00,\n * //   Mon Oct 06 2014 13:00:00,\n * //   Mon Oct 06 2014 14:00:00,\n * //   Mon Oct 06 2014 15:00:00\n * // ]\n */\nexport default function eachHourOfInterval(dirtyInterval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var startTime = startDate.getTime();\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startTime <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setMinutes(0, 0, 0);\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate = addHours(currentDate, step);\n  }\n  return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport default function startOfMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setSeconds(0, 0);\n  return date;\n}","import addMinutes from \"../addMinutes/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport startOfMinute from \"../startOfMinute/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachMinuteOfInterval\n * @category Interval Helpers\n * @summary Return the array of minutes within the specified time interval.\n *\n * @description\n * Returns the array of minutes within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The step must be equal to or greater than 1\n * @throws {TypeError} 1 argument required\n * @returns {Date[]} the array with starts of minutes from the minute of the interval start to the minute of the interval end\n * @throws {RangeError} `options.step` must be a number equal to or greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each minute between 14 October 2020, 13:00 and 14 October 2020, 13:03\n * const result = eachMinuteOfInterval({\n *   start: new Date(2014, 9, 14, 13),\n *   end: new Date(2014, 9, 14, 13, 3)\n * })\n * //=> [\n * //   Wed Oct 14 2014 13:00:00,\n * //   Wed Oct 14 2014 13:01:00,\n * //   Wed Oct 14 2014 13:02:00,\n * //   Wed Oct 14 2014 13:03:00\n * // ]\n */\nexport default function eachMinuteOfInterval(interval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var startDate = startOfMinute(toDate(interval.start));\n  var endDate = toDate(interval.end);\n  var startTime = startDate.getTime();\n  var endTime = endDate.getTime();\n  if (startTime >= endTime) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number equal to or greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate = addMinutes(currentDate, step);\n  }\n  return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachMonthOfInterval\n * @category Interval Helpers\n * @summary Return the array of months within the specified time interval.\n *\n * @description\n * Return the array of months within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} the array with starts of months from the month of the interval start to the month of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each month between 6 February 2014 and 10 August 2014:\n * const result = eachMonthOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2014, 7, 10)\n * })\n * //=> [\n * //   Sat Feb 01 2014 00:00:00,\n * //   Sat Mar 01 2014 00:00:00,\n * //   Tue Apr 01 2014 00:00:00,\n * //   Thu May 01 2014 00:00:00,\n * //   Sun Jun 01 2014 00:00:00,\n * //   Tue Jul 01 2014 00:00:00,\n * //   Fri Aug 01 2014 00:00:00\n * // ]\n */\nexport default function eachMonthOfInterval(dirtyInterval) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n  var dates = [];\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  currentDate.setDate(1);\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setMonth(currentDate.getMonth() + 1);\n  }\n  return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport default function startOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3;\n  date.setMonth(month, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import addQuarters from \"../addQuarters/index.js\";\nimport startOfQuarter from \"../startOfQuarter/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachQuarterOfInterval\n * @category Interval Helpers\n * @summary Return the array of quarters within the specified time interval.\n *\n * @description\n * Return the array of quarters within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} the array with starts of quarters from the quarter of the interval start to the quarter of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each quarter within interval 6 February 2014 - 10 August 2014:\n * const result = eachQuarterOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2014, 7, 10)\n * })\n * //=> [\n * //   Wed Jan 01 2014 00:00:00,\n * //   Tue Apr 01 2014 00:00:00,\n * //   Tue Jul 01 2014 00:00:00,\n * // ]\n */\nexport default function eachQuarterOfInterval(dirtyInterval) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var startDateQuarter = startOfQuarter(startDate);\n  var endDateQuarter = startOfQuarter(endDate);\n  endTime = endDateQuarter.getTime();\n  var quarters = [];\n  var currentQuarter = startDateQuarter;\n  while (currentQuarter.getTime() <= endTime) {\n    quarters.push(toDate(currentQuarter));\n    currentQuarter = addQuarters(currentQuarter, 1);\n  }\n  return quarters;\n}","import addWeeks from \"../addWeeks/index.js\";\nimport startOfWeek from \"../startOfWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekOfInterval\n * @category Interval Helpers\n * @summary Return the array of weeks within the specified time interval.\n *\n * @description\n * Return the array of weeks within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each week within interval 6 October 2014 - 23 November 2014:\n * const result = eachWeekOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 10, 23)\n * })\n * //=> [\n * //   Sun Oct 05 2014 00:00:00,\n * //   Sun Oct 12 2014 00:00:00,\n * //   Sun Oct 19 2014 00:00:00,\n * //   Sun Oct 26 2014 00:00:00,\n * //   Sun Nov 02 2014 00:00:00,\n * //   Sun Nov 09 2014 00:00:00,\n * //   Sun Nov 16 2014 00:00:00,\n * //   Sun Nov 23 2014 00:00:00\n * // ]\n */\nexport default function eachWeekOfInterval(dirtyInterval, options) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var startDateWeek = startOfWeek(startDate, options);\n  var endDateWeek = startOfWeek(endDate, options);\n\n  // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet\n  startDateWeek.setHours(15);\n  endDateWeek.setHours(15);\n  endTime = endDateWeek.getTime();\n  var weeks = [];\n  var currentWeek = startDateWeek;\n  while (currentWeek.getTime() <= endTime) {\n    currentWeek.setHours(0);\n    weeks.push(toDate(currentWeek));\n    currentWeek = addWeeks(currentWeek, 1);\n    currentWeek.setHours(15);\n  }\n  return weeks;\n}","import eachDayOfInterval from \"../eachDayOfInterval/index.js\";\nimport isSunday from \"../isSunday/index.js\";\nimport isWeekend from \"../isWeekend/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekendOfInterval\n * @category Interval Helpers\n * @summary List all the Saturdays and Sundays in the given date interval.\n *\n * @description\n * Get all the Saturdays and Sundays in the given date interval.\n *\n * @param {Interval} interval - the given interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Lists all Saturdays and Sundays in the given date interval\n * const result = eachWeekendOfInterval({\n *   start: new Date(2018, 8, 17),\n *   end: new Date(2018, 8, 30)\n * })\n * //=> [\n * //   Sat Sep 22 2018 00:00:00,\n * //   Sun Sep 23 2018 00:00:00,\n * //   Sat Sep 29 2018 00:00:00,\n * //   Sun Sep 30 2018 00:00:00\n * // ]\n */\nexport default function eachWeekendOfInterval(interval) {\n  requiredArgs(1, arguments);\n  var dateInterval = eachDayOfInterval(interval);\n  var weekends = [];\n  var index = 0;\n  while (index < dateInterval.length) {\n    var date = dateInterval[index++];\n    if (isWeekend(date)) {\n      weekends.push(date);\n      if (isSunday(date)) index = index + 5;\n    }\n  }\n  return weekends;\n}","import eachWeekendOfInterval from \"../eachWeekendOfInterval/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekendOfMonth\n * @category Month Helpers\n * @summary List all the Saturdays and Sundays in the given month.\n *\n * @description\n * Get all the Saturdays and Sundays in the given month.\n *\n * @param {Date|Number} date - the given month\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the given month\n * const result = eachWeekendOfMonth(new Date(2022, 1, 1))\n * //=> [\n * //   Sat Feb 05 2022 00:00:00,\n * //   Sun Feb 06 2022 00:00:00,\n * //   Sat Feb 12 2022 00:00:00,\n * //   Sun Feb 13 2022 00:00:00,\n * //   Sat Feb 19 2022 00:00:00,\n * //   Sun Feb 20 2022 00:00:00,\n * //   Sat Feb 26 2022 00:00:00,\n * //   Sun Feb 27 2022 00:00:00\n * // ]\n */\nexport default function eachWeekendOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var startDate = startOfMonth(dirtyDate);\n  if (isNaN(startDate.getTime())) throw new RangeError('The passed date is invalid');\n  var endDate = endOfMonth(dirtyDate);\n  return eachWeekendOfInterval({\n    start: startDate,\n    end: endDate\n  });\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport default function endOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  date.setFullYear(year + 1, 0, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var cleanDate = toDate(dirtyDate);\n  var date = new Date(0);\n  date.setFullYear(cleanDate.getFullYear(), 0, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import eachWeekendOfInterval from \"../eachWeekendOfInterval/index.js\";\nimport endOfYear from \"../endOfYear/index.js\";\nimport startOfYear from \"../startOfYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekendOfYear\n * @category Year Helpers\n * @summary List all the Saturdays and Sundays in the year.\n *\n * @description\n * Get all the Saturdays and Sundays in the year.\n *\n * @param {Date|Number} date - the given year\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the year\n * const result = eachWeekendOfYear(new Date(2020, 1, 1))\n * //=> [\n * //   Sat Jan 03 2020 00:00:00,\n * //   Sun Jan 04 2020 00:00:00,\n * //   ...\n * //   Sun Dec 27 2020 00:00:00\n * // ]\n * ]\n */\nexport default function eachWeekendOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var startDate = startOfYear(dirtyDate);\n  var endDate = endOfYear(dirtyDate);\n  return eachWeekendOfInterval({\n    start: startDate,\n    end: endDate\n  });\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachYearOfInterval\n * @category Interval Helpers\n * @summary Return the array of yearly timestamps within the specified time interval.\n *\n * @description\n * Return the array of yearly timestamps within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} the array with starts of yearly timestamps from the month of the interval start to the month of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each year between 6 February 2014 and 10 August 2017:\n * const result = eachYearOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2017, 7, 10)\n * })\n * //=> [\n * //   Wed Jan 01 2014 00:00:00,\n * //   Thu Jan 01 2015 00:00:00,\n * //   Fri Jan 01 2016 00:00:00,\n * //   Sun Jan 01 2017 00:00:00\n * // ]\n */\nexport default function eachYearOfInterval(dirtyInterval) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  currentDate.setMonth(0, 1);\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setFullYear(currentDate.getFullYear() + 1);\n  }\n  return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDecade\n * @category Decade Helpers\n * @summary Return the end of a decade for the given date.\n *\n * @description\n * Return the end of a decade for the given date.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a decade\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The end of a decade for 12 May 1984 00:00:00:\n * const result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))\n * //=> Dec 31 1989 23:59:59.999\n */\nexport default function endOfDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = 9 + Math.floor(year / 10) * 10;\n  date.setFullYear(decade, 11, 31);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport default function endOfHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMinutes(59, 59, 999);\n  return date;\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * const result = endOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nexport default function endOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  date.setMilliseconds(date.getMilliseconds() - 1);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport default function endOfMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setSeconds(59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3 + 3;\n  date.setMonth(month, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport default function endOfSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMilliseconds(999);\n  return date;\n}","import endOfDay from \"../endOfDay/index.js\";\n/**\n * @name endOfToday\n * @category Day Helpers\n * @summary Return the end of today.\n * @pure false\n *\n * @description\n * Return the end of today.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the end of today\n *\n * @example\n * // If today is 6 October 2014:\n * const result = endOfToday()\n * //=> Mon Oct 6 2014 23:59:59.999\n */\nexport default function endOfToday() {\n  return endOfDay(Date.now());\n}","/**\n * @name endOfTomorrow\n * @category Day Helpers\n * @summary Return the end of tomorrow.\n * @pure false\n *\n * @description\n * Return the end of tomorrow.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the end of tomorrow\n *\n * @example\n * // If today is 6 October 2014:\n * const result = endOfTomorrow()\n * //=> Tue Oct 7 2014 23:59:59.999\n */\nexport default function endOfTomorrow() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day + 1);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","/**\n * @name endOfYesterday\n * @category Day Helpers\n * @summary Return the end of yesterday.\n * @pure false\n *\n * @description\n * Return the end of yesterday.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the end of yesterday\n *\n * @example\n * // If today is 6 October 2014:\n * const result = endOfYesterday()\n * //=> Sun Oct 5 2014 23:59:59.999\n */\nexport default function endOfYesterday() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day - 1);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","export default function assign(target, object) {\n  if (target == null) {\n    throw new TypeError('assign requires that input parameter not be null or undefined');\n  }\n  for (var property in object) {\n    if (Object.prototype.hasOwnProperty.call(object, property)) {\n      ;\n      target[property] = object[property];\n    }\n  }\n  return target;\n}","import assign from \"../assign/index.js\";\nexport default function cloneObject(object) {\n  return assign({}, object);\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MINUTES_IN_DAY = 1440;\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520;\nvar MINUTES_IN_MONTH = 43200;\nvar MINUTES_IN_TWO_MONTHS = 86400;\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates                                            | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result               |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs      | less than 5 seconds  |\n * | 5 secs ... 10 secs     | less than 10 seconds |\n * | 10 secs ... 20 secs    | less than 20 seconds |\n * | 20 secs ... 40 secs    | half a minute        |\n * | 40 secs ... 60 secs    | less than a minute   |\n * | 60 secs ... 90 secs    | 1 minute             |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n *   { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistance(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain formatDistance property');\n  }\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value');\n  }\n  var localizeOptions = assign(cloneObject(options), {\n    addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n    comparison: comparison\n  });\n  var dateLeft;\n  var dateRight;\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate);\n    dateRight = toDate(dirtyDate);\n  } else {\n    dateLeft = toDate(dirtyDate);\n    dateRight = toDate(dirtyBaseDate);\n  }\n  var seconds = differenceInSeconds(dateRight, dateLeft);\n  var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1000;\n  var minutes = Math.round((seconds - offsetInSeconds) / 60);\n  var months;\n\n  // 0 up to 2 mins\n  if (minutes < 2) {\n    if (options !== null && options !== void 0 && options.includeSeconds) {\n      if (seconds < 5) {\n        return locale.formatDistance('lessThanXSeconds', 5, localizeOptions);\n      } else if (seconds < 10) {\n        return locale.formatDistance('lessThanXSeconds', 10, localizeOptions);\n      } else if (seconds < 20) {\n        return locale.formatDistance('lessThanXSeconds', 20, localizeOptions);\n      } else if (seconds < 40) {\n        return locale.formatDistance('halfAMinute', 0, localizeOptions);\n      } else if (seconds < 60) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n      } else {\n        return locale.formatDistance('xMinutes', 1, localizeOptions);\n      }\n    } else {\n      if (minutes === 0) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n      } else {\n        return locale.formatDistance('xMinutes', minutes, localizeOptions);\n      }\n    }\n\n    // 2 mins up to 0.75 hrs\n  } else if (minutes < 45) {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions);\n\n    // 0.75 hrs up to 1.5 hrs\n  } else if (minutes < 90) {\n    return locale.formatDistance('aboutXHours', 1, localizeOptions);\n\n    // 1.5 hrs up to 24 hrs\n  } else if (minutes < MINUTES_IN_DAY) {\n    var hours = Math.round(minutes / 60);\n    return locale.formatDistance('aboutXHours', hours, localizeOptions);\n\n    // 1 day up to 1.75 days\n  } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n    return locale.formatDistance('xDays', 1, localizeOptions);\n\n    // 1.75 days up to 30 days\n  } else if (minutes < MINUTES_IN_MONTH) {\n    var days = Math.round(minutes / MINUTES_IN_DAY);\n    return locale.formatDistance('xDays', days, localizeOptions);\n\n    // 1 month up to 2 months\n  } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n    months = Math.round(minutes / MINUTES_IN_MONTH);\n    return locale.formatDistance('aboutXMonths', months, localizeOptions);\n  }\n  months = differenceInMonths(dateRight, dateLeft);\n\n  // 2 months up to 12 months\n  if (months < 12) {\n    var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH);\n    return locale.formatDistance('xMonths', nearestMonth, localizeOptions);\n\n    // 1 year up to max Date\n  } else {\n    var monthsSinceStartOfYear = months % 12;\n    var years = Math.floor(months / 12);\n\n    // N years up to 1 years 3 months\n    if (monthsSinceStartOfYear < 3) {\n      return locale.formatDistance('aboutXYears', years, localizeOptions);\n\n      // N years 3 months up to N years 9 months\n    } else if (monthsSinceStartOfYear < 9) {\n      return locale.formatDistance('overXYears', years, localizeOptions);\n\n      // N years 9 months up to N year 12 months\n    } else {\n      return locale.formatDistance('almostXYears', years + 1, localizeOptions);\n    }\n  }\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 1000 * 60;\nvar MINUTES_IN_DAY = 60 * 24;\nvar MINUTES_IN_MONTH = MINUTES_IN_DAY * 30;\nvar MINUTES_IN_YEAR = MINUTES_IN_DAY * 365;\n\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * const result = formatDistanceStrict(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * const result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n *   unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2015\n * // to 28 January 2015, in months, rounded up?\n * const result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n *   unit: 'month',\n *   roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> '1 jaro'\n */\n\nexport default function formatDistanceStrict(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale, _options$roundingMeth;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain localize.formatDistance property');\n  }\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value');\n  }\n  var localizeOptions = assign(cloneObject(options), {\n    addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n    comparison: comparison\n  });\n  var dateLeft;\n  var dateRight;\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate);\n    dateRight = toDate(dirtyDate);\n  } else {\n    dateLeft = toDate(dirtyDate);\n    dateRight = toDate(dirtyBaseDate);\n  }\n  var roundingMethod = String((_options$roundingMeth = options === null || options === void 0 ? void 0 : options.roundingMethod) !== null && _options$roundingMeth !== void 0 ? _options$roundingMeth : 'round');\n  var roundingMethodFn;\n  if (roundingMethod === 'floor') {\n    roundingMethodFn = Math.floor;\n  } else if (roundingMethod === 'ceil') {\n    roundingMethodFn = Math.ceil;\n  } else if (roundingMethod === 'round') {\n    roundingMethodFn = Math.round;\n  } else {\n    throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\");\n  }\n  var milliseconds = dateRight.getTime() - dateLeft.getTime();\n  var minutes = milliseconds / MILLISECONDS_IN_MINUTE;\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft);\n\n  // Use DST-normalized difference in minutes for years, months and days;\n  // use regular difference in minutes for hours, minutes and seconds.\n  var dstNormalizedMinutes = (milliseconds - timezoneOffset) / MILLISECONDS_IN_MINUTE;\n  var defaultUnit = options === null || options === void 0 ? void 0 : options.unit;\n  var unit;\n  if (!defaultUnit) {\n    if (minutes < 1) {\n      unit = 'second';\n    } else if (minutes < 60) {\n      unit = 'minute';\n    } else if (minutes < MINUTES_IN_DAY) {\n      unit = 'hour';\n    } else if (dstNormalizedMinutes < MINUTES_IN_MONTH) {\n      unit = 'day';\n    } else if (dstNormalizedMinutes < MINUTES_IN_YEAR) {\n      unit = 'month';\n    } else {\n      unit = 'year';\n    }\n  } else {\n    unit = String(defaultUnit);\n  }\n\n  // 0 up to 60 seconds\n  if (unit === 'second') {\n    var seconds = roundingMethodFn(milliseconds / 1000);\n    return locale.formatDistance('xSeconds', seconds, localizeOptions);\n\n    // 1 up to 60 mins\n  } else if (unit === 'minute') {\n    var roundedMinutes = roundingMethodFn(minutes);\n    return locale.formatDistance('xMinutes', roundedMinutes, localizeOptions);\n\n    // 1 up to 24 hours\n  } else if (unit === 'hour') {\n    var hours = roundingMethodFn(minutes / 60);\n    return locale.formatDistance('xHours', hours, localizeOptions);\n\n    // 1 up to 30 days\n  } else if (unit === 'day') {\n    var days = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_DAY);\n    return locale.formatDistance('xDays', days, localizeOptions);\n\n    // 1 up to 12 months\n  } else if (unit === 'month') {\n    var months = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_MONTH);\n    return months === 12 && defaultUnit !== 'month' ? locale.formatDistance('xYears', 1, localizeOptions) : locale.formatDistance('xMonths', months, localizeOptions);\n\n    // 1 year up to max Date\n  } else if (unit === 'year') {\n    var years = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_YEAR);\n    return locale.formatDistance('xYears', years, localizeOptions);\n  }\n  throw new RangeError(\"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\");\n}","import distanceInWords from \"../formatDistance/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatDistanceToNow\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given date and now in words.\n *\n * | Distance to now                                                   | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance to now     | Result               |\n * |---------------------|----------------------|\n * | 0 secs ... 5 secs   | less than 5 seconds  |\n * | 5 secs ... 10 secs  | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute        |\n * | 40 secs ... 60 secs | less than a minute   |\n * | 60 secs ... 90 secs | 1 minute             |\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result specifies if now is earlier or later than the passed date\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * const result = formatDistanceToNow(\n *   new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * const result = formatDistanceToNow(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * const result = formatDistanceToNow(\n *   new Date(2016, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> 'in about 1 year'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * const eoLocale = require('date-fns/locale/eo')\n * const result = formatDistanceToNow(\n *   new Date(2016, 7, 1),\n *   {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\nexport default function formatDistanceToNow(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  return distanceInWords(dirtyDate, Date.now(), options);\n}","import formatDistanceStrict from \"../formatDistanceStrict/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatDistanceToNowStrict\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * const result = formatDistanceToNowStrict(\n *   new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * const result = formatDistanceToNowStrict(\n *   new Date(2015, 0, 1, 0, 0, 15)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * const result = formatDistanceToNowStrict(\n *   new Date(2016, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> 'in 1 year'\n *\n * @example\n * // If today is 28 January 2015,\n * // what is the distance to 1 January 2015, in months, rounded up??\n * const result = formatDistanceToNowStrict(new Date(2015, 0, 1), {\n *   unit: 'month',\n *   roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016 in Esperanto?\n * const eoLocale = require('date-fns/locale/eo')\n * const result = formatDistanceToNowStrict(\n *   new Date(2016, 0, 1),\n *   {locale: eoLocale}\n * )\n * //=> '1 jaro'\n */\nexport default function formatDistanceToNowStrict(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  return formatDistanceStrict(dirtyDate, Date.now(), options);\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nvar defaultFormat = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds'];\n\n/**\n * @name formatDuration\n * @category Common Helpers\n * @summary Formats a duration in human-readable format\n *\n * @description\n * Return human-readable duration string i.e. \"9 months 2 days\"\n *\n * @param {Duration} duration - the duration to format\n * @param {Object} [options] - an object with options.\n * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format\n * @param {boolean} [options.zero=false] - should zeros be included in the output?\n * @param {string} [options.delimiter=' '] - delimiter string\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {string} the formatted date string\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Format full duration\n * formatDuration({\n *   years: 2,\n *   months: 9,\n *   weeks: 1,\n *   days: 7,\n *   hours: 5,\n *   minutes: 9,\n *   seconds: 30\n * })\n * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds'\n *\n * @example\n * // Format partial duration\n * formatDuration({ months: 9, days: 2 })\n * //=> '9 months 2 days'\n *\n * @example\n * // Customize the format\n * formatDuration(\n *   {\n *     years: 2,\n *     months: 9,\n *     weeks: 1,\n *     days: 7,\n *     hours: 5,\n *     minutes: 9,\n *     seconds: 30\n *   },\n *   { format: ['months', 'weeks'] }\n * ) === '9 months 1 week'\n *\n * @example\n * // Customize the zeros presence\n * formatDuration({ years: 0, months: 9 })\n * //=> '9 months'\n * formatDuration({ years: 0, months: 9 }, { zero: true })\n * //=> '0 years 9 months'\n *\n * @example\n * // Customize the delimiter\n * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' })\n * //=> '2 years, 9 months, 3 weeks'\n */\nexport default function formatDuration(duration, options) {\n  var _ref, _options$locale, _options$format, _options$zero, _options$delimiter;\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 argument required, but only \".concat(arguments.length, \" present\"));\n  }\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var format = (_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : defaultFormat;\n  var zero = (_options$zero = options === null || options === void 0 ? void 0 : options.zero) !== null && _options$zero !== void 0 ? _options$zero : false;\n  var delimiter = (_options$delimiter = options === null || options === void 0 ? void 0 : options.delimiter) !== null && _options$delimiter !== void 0 ? _options$delimiter : ' ';\n  if (!locale.formatDistance) {\n    return '';\n  }\n  var result = format.reduce(function (acc, unit) {\n    var token = \"x\".concat(unit.replace(/(^.)/, function (m) {\n      return m.toUpperCase();\n    }));\n    var value = duration[unit];\n    if (typeof value === 'number' && (zero || duration[unit])) {\n      return acc.concat(locale.formatDistance(token, value));\n    }\n    return acc;\n  }, []).join(delimiter);\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time with local time zone, or both.\n * @returns {String} the formatted date string (in local time zone)\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport default function formatISO(date, options) {\n  var _options$format, _options$representati;\n  requiredArgs(1, arguments);\n  var originalDate = toDate(date);\n  if (isNaN(originalDate.getTime())) {\n    throw new RangeError('Invalid time value');\n  }\n  var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n  var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n  if (format !== 'extended' && format !== 'basic') {\n    throw new RangeError(\"format must be 'extended' or 'basic'\");\n  }\n  if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n    throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n  }\n  var result = '';\n  var tzOffset = '';\n  var dateDelimiter = format === 'extended' ? '-' : '';\n  var timeDelimiter = format === 'extended' ? ':' : '';\n\n  // Representation is either 'date' or 'complete'\n  if (representation !== 'time') {\n    var day = addLeadingZeros(originalDate.getDate(), 2);\n    var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n    var year = addLeadingZeros(originalDate.getFullYear(), 4);\n\n    // yyyyMMdd or yyyy-MM-dd.\n    result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n  }\n\n  // Representation is either 'time' or 'complete'\n  if (representation !== 'date') {\n    // Add the timezone.\n    var offset = originalDate.getTimezoneOffset();\n    if (offset !== 0) {\n      var absoluteOffset = Math.abs(offset);\n      var hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2);\n      var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n      // If less than 0, the sign is +, because it is ahead of time.\n      var sign = offset < 0 ? '+' : '-';\n      tzOffset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n    } else {\n      tzOffset = 'Z';\n    }\n    var hour = addLeadingZeros(originalDate.getHours(), 2);\n    var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n    var second = addLeadingZeros(originalDate.getSeconds(), 2);\n\n    // If there's also date, separate it with time with 'T'\n    var separator = result === '' ? '' : 'T';\n\n    // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n    var time = [hour, minute, second].join(timeDelimiter);\n\n    // HHmmss or HH:mm:ss.\n    result = \"\".concat(result).concat(separator).concat(time).concat(tzOffset);\n  }\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\n/**\n * @name formatISO9075\n * @category Common Helpers\n * @summary Format the date according to the ISO 9075 standard (https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_get-format).\n *\n * @description\n * Return the formatted date string in ISO 9075 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time, or both.\n * @returns {String} the formatted date string\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075 format:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18 19:00:52'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075, short format:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918 190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075 format, date only:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075 format, time only:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52'\n */\nexport default function formatISO9075(dirtyDate, options) {\n  var _options$format, _options$representati;\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 argument required, but only \".concat(arguments.length, \" present\"));\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n  var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n  var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n  if (format !== 'extended' && format !== 'basic') {\n    throw new RangeError(\"format must be 'extended' or 'basic'\");\n  }\n  if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n    throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n  }\n  var result = '';\n  var dateDelimiter = format === 'extended' ? '-' : '';\n  var timeDelimiter = format === 'extended' ? ':' : '';\n\n  // Representation is either 'date' or 'complete'\n  if (representation !== 'time') {\n    var day = addLeadingZeros(originalDate.getDate(), 2);\n    var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n    var year = addLeadingZeros(originalDate.getFullYear(), 4);\n\n    // yyyyMMdd or yyyy-MM-dd.\n    result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n  }\n\n  // Representation is either 'time' or 'complete'\n  if (representation !== 'date') {\n    var hour = addLeadingZeros(originalDate.getHours(), 2);\n    var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n    var second = addLeadingZeros(originalDate.getSeconds(), 2);\n\n    // If there's also date, separate it with time with a space\n    var separator = result === '' ? '' : ' ';\n\n    // HHmmss or HH:mm:ss.\n    result = \"\".concat(result).concat(separator).concat(hour).concat(timeDelimiter).concat(minute).concat(timeDelimiter).concat(second);\n  }\n  return result;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISODuration\n * @category Common Helpers\n * @summary Format a duration object according as ISO 8601 duration string\n *\n * @description\n * Format a duration object according to the ISO 8601 duration standard (https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm)\n *\n * @param {Duration} duration - the duration to format\n *\n * @returns {String} The ISO 8601 duration string\n * @throws {TypeError} Requires 1 argument\n * @throws {Error} Argument must be an object\n *\n * @example\n * // Format the given duration as ISO 8601 string\n * const result = formatISODuration({\n *   years: 39,\n *   months: 2,\n *   days: 20,\n *   hours: 7,\n *   minutes: 5,\n *   seconds: 0\n * })\n * //=> 'P39Y2M20DT0H0M0S'\n */\nexport default function formatISODuration(duration) {\n  requiredArgs(1, arguments);\n  if (_typeof(duration) !== 'object') throw new Error('Duration must be an object');\n  var _duration$years = duration.years,\n    years = _duration$years === void 0 ? 0 : _duration$years,\n    _duration$months = duration.months,\n    months = _duration$months === void 0 ? 0 : _duration$months,\n    _duration$days = duration.days,\n    days = _duration$days === void 0 ? 0 : _duration$days,\n    _duration$hours = duration.hours,\n    hours = _duration$hours === void 0 ? 0 : _duration$hours,\n    _duration$minutes = duration.minutes,\n    minutes = _duration$minutes === void 0 ? 0 : _duration$minutes,\n    _duration$seconds = duration.seconds,\n    seconds = _duration$seconds === void 0 ? 0 : _duration$seconds;\n  return \"P\".concat(years, \"Y\").concat(months, \"M\").concat(days, \"DT\").concat(hours, \"H\").concat(minutes, \"M\").concat(seconds, \"S\");\n}","import toDate from \"../toDate/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name formatRFC3339\n * @category Common Helpers\n * @summary Format the date according to the RFC 3339 standard (https://tools.ietf.org/html/rfc3339#section-5.6).\n *\n * @description\n * Return the formatted date string in RFC 3339 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3} [options.fractionDigits=0] - number of digits after the decimal point after seconds\n * @returns {String} the formatted date string\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.fractionDigits` must be between 0 and 3\n *\n * @example\n * // Represent 18 September 2019 in RFC 3339 format:\n * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in RFC 3339 format, 2 digits of second fraction:\n * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { fractionDigits: 2 })\n * //=> '2019-09-18T19:00:52.23Z'\n *\n * @example\n * // Represent 18 September 2019 in RFC 3339 format, 3 digits of second fraction\n * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { fractionDigits: 3 })\n * //=> '2019-09-18T19:00:52.234Z'\n */\nexport default function formatRFC3339(dirtyDate, options) {\n  var _options$fractionDigi;\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 arguments required, but only \".concat(arguments.length, \" present\"));\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n  var fractionDigits = Number((_options$fractionDigi = options === null || options === void 0 ? void 0 : options.fractionDigits) !== null && _options$fractionDigi !== void 0 ? _options$fractionDigi : 0);\n\n  // Test if fractionDigits is between 0 and 3 _and_ is not NaN\n  if (!(fractionDigits >= 0 && fractionDigits <= 3)) {\n    throw new RangeError('fractionDigits must be between 0 and 3 inclusively');\n  }\n  var day = addLeadingZeros(originalDate.getDate(), 2);\n  var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n  var year = originalDate.getFullYear();\n  var hour = addLeadingZeros(originalDate.getHours(), 2);\n  var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n  var second = addLeadingZeros(originalDate.getSeconds(), 2);\n  var fractionalSecond = '';\n  if (fractionDigits > 0) {\n    var milliseconds = originalDate.getMilliseconds();\n    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, fractionDigits - 3));\n    fractionalSecond = '.' + addLeadingZeros(fractionalSeconds, fractionDigits);\n  }\n  var offset = '';\n  var tzOffset = originalDate.getTimezoneOffset();\n  if (tzOffset !== 0) {\n    var absoluteOffset = Math.abs(tzOffset);\n    var hourOffset = addLeadingZeros(toInteger(absoluteOffset / 60), 2);\n    var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n    // If less than 0, the sign is +, because it is ahead of time.\n    var sign = tzOffset < 0 ? '+' : '-';\n    offset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n  } else {\n    offset = 'Z';\n  }\n  return \"\".concat(year, \"-\").concat(month, \"-\").concat(day, \"T\").concat(hour, \":\").concat(minute, \":\").concat(second).concat(fractionalSecond).concat(offset);\n}","import toDate from \"../toDate/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nvar days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/**\n * @name formatRFC7231\n * @category Common Helpers\n * @summary Format the date according to the RFC 7231 standard (https://tools.ietf.org/html/rfc7231#section-7.1.1.1).\n *\n * @description\n * Return the formatted date string in RFC 7231 format.\n * The result will always be in UTC timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {String} the formatted date string\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in RFC 7231 format:\n * const result = formatRFC7231(new Date(2019, 8, 18, 19, 0, 52))\n * //=> 'Wed, 18 Sep 2019 19:00:52 GMT'\n */\nexport default function formatRFC7231(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 arguments required, but only \".concat(arguments.length, \" present\"));\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n  var dayName = days[originalDate.getUTCDay()];\n  var dayOfMonth = addLeadingZeros(originalDate.getUTCDate(), 2);\n  var monthName = months[originalDate.getUTCMonth()];\n  var year = originalDate.getUTCFullYear();\n  var hour = addLeadingZeros(originalDate.getUTCHours(), 2);\n  var minute = addLeadingZeros(originalDate.getUTCMinutes(), 2);\n  var second = addLeadingZeros(originalDate.getUTCSeconds(), 2);\n\n  // Result variables.\n  return \"\".concat(dayName, \", \").concat(dayOfMonth, \" \").concat(monthName, \" \").concat(year, \" \").concat(hour, \":\").concat(minute, \":\").concat(second, \" GMT\");\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport format from \"../format/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name formatRelative\n * @category Common Helpers\n * @summary Represent the date in words relative to the given base date.\n *\n * @description\n * Represent the date in words relative to the given base date.\n *\n * | Distance to the base date | Result                    |\n * |---------------------------|---------------------------|\n * | Previous 6 days           | last Sunday at 04:30 AM   |\n * | Last day                  | yesterday at 04:30 AM     |\n * | Same day                  | today at 04:30 AM         |\n * | Next day                  | tomorrow at 04:30 AM      |\n * | Next 6 days               | Sunday at 04:30 AM        |\n * | Other                     | 12/31/2017                |\n *\n * @param {Date|Number} date - the date to format\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {String} the date in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.locale` must contain `formatRelative` property\n *\n * @example\n * // Represent the date of 6 days ago in words relative to the given base date. In this example, today is Wednesday\n * const result = formatRelative(addDays(new Date(), -6), new Date())\n * //=> \"last Thursday at 12:45 AM\"\n */\nexport default function formatRelative(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$weekStartsOn, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var baseDate = toDate(dirtyBaseDate);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var weekStartsOn = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.weekStartsOn) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : 0);\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property');\n  }\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property');\n  }\n  if (!locale.formatRelative) {\n    throw new RangeError('locale must contain formatRelative property');\n  }\n  var diff = differenceInCalendarDays(date, baseDate);\n  if (isNaN(diff)) {\n    throw new RangeError('Invalid time value');\n  }\n  var token;\n  if (diff < -6) {\n    token = 'other';\n  } else if (diff < -1) {\n    token = 'lastWeek';\n  } else if (diff < 0) {\n    token = 'yesterday';\n  } else if (diff < 1) {\n    token = 'today';\n  } else if (diff < 2) {\n    token = 'tomorrow';\n  } else if (diff < 7) {\n    token = 'nextWeek';\n  } else {\n    token = 'other';\n  }\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n  var utcBaseDate = subMilliseconds(baseDate, getTimezoneOffsetInMilliseconds(baseDate));\n  var formatStr = locale.formatRelative(token, utcDate, utcBaseDate, {\n    locale: locale,\n    weekStartsOn: weekStartsOn\n  });\n  return format(date, formatStr, {\n    locale: locale,\n    weekStartsOn: weekStartsOn\n  });\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp (in seconds). Decimal values will be discarded.\n *\n * @param {Number} unixTime - the given Unix timestamp (in seconds)\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * const result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n  requiredArgs(1, arguments);\n  var unixTime = toInteger(dirtyUnixTime);\n  return toDate(unixTime * 1000);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport default function getDate(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var dayOfMonth = date.getDate();\n  return dayOfMonth;\n}","import toDate from \"../toDate/index.js\";\nimport startOfYear from \"../startOfYear/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport default function getDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = differenceInCalendarDays(date, startOfYear(date));\n  var dayOfYear = diff + 1;\n  return dayOfYear;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var monthIndex = date.getMonth();\n  var lastDayOfMonth = new Date(0);\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n  lastDayOfMonth.setHours(0, 0, 0, 0);\n  return lastDayOfMonth.getDate();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLeapYear\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * const result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nexport default function isLeapYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","import toDate from \"../toDate/index.js\";\nimport isLeapYear from \"../isLeapYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInYear\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in 2012?\n * const result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nexport default function getDaysInYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  if (String(new Date(date)) === 'Invalid Date') {\n    return NaN;\n  }\n  return isLeapYear(date) ? 366 : 365;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDecade\n * @category Decade Helpers\n * @summary Get the decade of the given date.\n *\n * @description\n * Get the decade of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year of decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which decade belongs 27 November 1942?\n * const result = getDecade(new Date(1942, 10, 27))\n * //=> 1940\n */\nexport default function getDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = Math.floor(year / 10) * 10;\n  return decade;\n}","import { getDefaultOptions as getInternalDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport assign from \"../_lib/assign/index.js\";\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions]{@link https://date-fns.org/docs/setDefaultOptions}.\n *\n * @returns {Object} default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport default function getDefaultOptions() {\n  return assign({}, getInternalDefaultOptions());\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport default function getHours(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var hours = date.getHours();\n  return hours;\n}","import toDate from \"../toDate/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport default function getISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport addWeeks from \"../addWeeks/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name getISOWeeksInYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * const result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nexport default function getISOWeeksInYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var thisYear = startOfISOWeekYear(dirtyDate);\n  var nextYear = startOfISOWeekYear(addWeeks(thisYear, 60));\n  var diff = nextYear.valueOf() - thisYear.valueOf();\n  // Round the number of weeks to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMilliseconds\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * const result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nexport default function getMilliseconds(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var milliseconds = date.getMilliseconds();\n  return milliseconds;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport default function getMinutes(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var minutes = date.getMinutes();\n  return minutes;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  return month;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;\n\n/**\n * @name getOverlappingDaysInIntervals\n * @category Interval Helpers\n * @summary Get the number of days that overlap in two time intervals\n *\n * @description\n * Get the number of days that overlap in two time intervals\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}\n * @returns {Number} the number of days that overlap in two time intervals\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals adds 1 for each started overlapping day:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping time intervals returns 0:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> 0\n */\n\nexport default function getOverlappingDaysInIntervals(dirtyIntervalLeft, dirtyIntervalRight) {\n  requiredArgs(2, arguments);\n  var intervalLeft = dirtyIntervalLeft || {};\n  var intervalRight = dirtyIntervalRight || {};\n  var leftStartTime = toDate(intervalLeft.start).getTime();\n  var leftEndTime = toDate(intervalLeft.end).getTime();\n  var rightStartTime = toDate(intervalRight.start).getTime();\n  var rightEndTime = toDate(intervalRight.end).getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var isOverlapping = leftStartTime < rightEndTime && rightStartTime < leftEndTime;\n  if (!isOverlapping) {\n    return 0;\n  }\n  var overlapStartDate = rightStartTime < leftStartTime ? leftStartTime : rightStartTime;\n  var overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime;\n  var differenceInMs = overlapEndDate - overlapStartDate;\n  return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport default function getSeconds(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var seconds = date.getSeconds();\n  return seconds;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var timestamp = date.getTime();\n  return timestamp;\n}","import getTime from \"../getTime/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n  requiredArgs(1, arguments);\n  return Math.floor(getTime(dirtyDate) / 1000);\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport default function getWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import getWeekYear from \"../getWeekYear/index.js\";\nimport startOfWeek from \"../startOfWeek/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getWeekYear(dirtyDate, options);\n  var firstWeek = new Date(0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  var date = startOfWeek(firstWeek, options);\n  return date;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport startOfWeekYear from \"../startOfWeekYear/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfWeek(date, options).getTime() - startOfWeekYear(date, options).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport getDate from \"../getDate/index.js\";\nimport getDay from \"../getDay/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name getWeekOfMonth\n * @category Week Helpers\n * @summary Get the week of the month of the given date.\n *\n * @description\n * Get the week of the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the week of month\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 inclusively\n *\n * @example\n * // Which week of the month is 9 November 2017?\n * const result = getWeekOfMonth(new Date(2017, 10, 9))\n * //=> 2\n */\nexport default function getWeekOfMonth(date, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var currentDayOfMonth = getDate(date);\n  if (isNaN(currentDayOfMonth)) return NaN;\n  var startWeekDay = getDay(startOfMonth(date));\n  var lastDayOfFirstWeek = weekStartsOn - startWeekDay;\n  if (lastDayOfFirstWeek <= 0) lastDayOfFirstWeek += 7;\n  var remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek;\n  return Math.ceil(remainingDaysAfterFirstWeek / 7) + 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import differenceInCalendarWeeks from \"../differenceInCalendarWeeks/index.js\";\nimport lastDayOfMonth from \"../lastDayOfMonth/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * const result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * const result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n  requiredArgs(1, arguments);\n  return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getFullYear();\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInHour } from \"../constants/index.js\";\n/**\n * @name hoursToMilliseconds\n * @category  Conversion Helpers\n * @summary Convert hours to milliseconds.\n *\n * @description\n * Convert a number of hours to a full number of milliseconds.\n *\n * @param {number} hours - number of hours to be converted\n *\n * @returns {number} the number of hours converted to milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 hours to milliseconds:\n * const result = hoursToMilliseconds(2)\n * //=> 7200000\n */\nexport default function hoursToMilliseconds(hours) {\n  requiredArgs(1, arguments);\n  return Math.floor(hours * millisecondsInHour);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { minutesInHour } from \"../constants/index.js\";\n/**\n * @name hoursToMinutes\n * @category Conversion Helpers\n * @summary Convert hours to minutes.\n *\n * @description\n * Convert a number of hours to a full number of minutes.\n *\n * @param {number} hours - number of hours to be converted\n *\n * @returns {number} the number of hours converted in minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 hours to minutes:\n * const result = hoursToMinutes(2)\n * //=> 120\n */\nexport default function hoursToMinutes(hours) {\n  requiredArgs(1, arguments);\n  return Math.floor(hours * minutesInHour);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInHour } from \"../constants/index.js\";\n/**\n * @name hoursToSeconds\n * @category Conversion Helpers\n * @summary Convert hours to seconds.\n *\n * @description\n * Convert a number of hours to a full number of seconds.\n *\n * @param {number} hours - number of hours to be converted\n *\n * @returns {number} the number of hours converted in seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 hours to seconds:\n * const result = hoursToSeconds(2)\n * //=> 7200\n */\nexport default function hoursToSeconds(hours) {\n  requiredArgs(1, arguments);\n  return Math.floor(hours * secondsInHour);\n}","import compareAsc from \"../compareAsc/index.js\";\nimport add from \"../add/index.js\";\nimport differenceInDays from \"../differenceInDays/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport differenceInYears from \"../differenceInYears/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intervalToDuration\n * @category Common Helpers\n * @summary Convert interval to duration\n *\n * @description\n * Convert a interval object to a duration object.\n *\n * @param {Interval} interval - the interval to convert to duration\n *\n * @returns {Duration} The duration Object\n * @throws {TypeError} Requires 2 arguments\n * @throws {RangeError} `start` must not be Invalid Date\n * @throws {RangeError} `end` must not be Invalid Date\n *\n * @example\n * // Get the duration between January 15, 1929 and April 4, 1968.\n * intervalToDuration({\n *   start: new Date(1929, 0, 15, 12, 0, 0),\n *   end: new Date(1968, 3, 4, 19, 5, 0)\n * })\n * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }\n */\nexport default function intervalToDuration(interval) {\n  requiredArgs(1, arguments);\n  var start = toDate(interval.start);\n  var end = toDate(interval.end);\n  if (isNaN(start.getTime())) throw new RangeError('Start Date is invalid');\n  if (isNaN(end.getTime())) throw new RangeError('End Date is invalid');\n  var duration = {};\n  duration.years = Math.abs(differenceInYears(end, start));\n  var sign = compareAsc(end, start);\n  var remainingMonths = add(start, {\n    years: sign * duration.years\n  });\n  duration.months = Math.abs(differenceInMonths(end, remainingMonths));\n  var remainingDays = add(remainingMonths, {\n    months: sign * duration.months\n  });\n  duration.days = Math.abs(differenceInDays(end, remainingDays));\n  var remainingHours = add(remainingDays, {\n    days: sign * duration.days\n  });\n  duration.hours = Math.abs(differenceInHours(end, remainingHours));\n  var remainingMinutes = add(remainingHours, {\n    hours: sign * duration.hours\n  });\n  duration.minutes = Math.abs(differenceInMinutes(end, remainingMinutes));\n  var remainingSeconds = add(remainingMinutes, {\n    minutes: sign * duration.minutes\n  });\n  duration.seconds = Math.abs(differenceInSeconds(end, remainingSeconds));\n  return duration;\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intlFormat\n * @category Common Helpers\n * @summary  Format the date with Intl.DateTimeFormat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat).\n *\n * @description\n * Return the formatted date string in the given format.\n * The method uses [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) inside.\n * formatOptions are the same as [`Intl.DateTimeFormat` options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options)\n *\n * > ⚠️ Please note that before Node version 13.0.0, only the locale data for en-US is available by default.\n *\n * @param {Date|Number} argument - the original date.\n * @param {Object} [formatOptions] - an object with options.\n * @param {'lookup'|'best fit'} [formatOptions.localeMatcher='best fit'] - locale selection algorithm.\n * @param {'narrow'|'short'|'long'} [formatOptions.weekday] - representation the days of the week.\n * @param {'narrow'|'short'|'long'} [formatOptions.era] - representation of eras.\n * @param {'numeric'|'2-digit'} [formatOptions.year] - representation of years.\n * @param {'numeric'|'2-digit'|'narrow'|'short'|'long'} [formatOptions.month='numeric'] - representation of month.\n * @param {'numeric'|'2-digit'} [formatOptions.day='numeric'] - representation of day.\n * @param {'numeric'|'2-digit'} [formatOptions.hour='numeric'] - representation of hours.\n * @param {'numeric'|'2-digit'} [formatOptions.minute] - representation of minutes.\n * @param {'numeric'|'2-digit'} [formatOptions.second] - representation of seconds.\n * @param {'short'|'long'} [formatOptions.timeZoneName] - representation of names of time zones.\n * @param {'basic'|'best fit'} [formatOptions.formatMatcher='best fit'] - format selection algorithm.\n * @param {Boolean} [formatOptions.hour12] - determines whether to use 12-hour time format.\n * @param {String} [formatOptions.timeZone] - the time zone to use.\n * @param {Object} [localeOptions] - an object with locale.\n * @param {String|String[]} [localeOptions.locale] - the locale code\n * @returns {String} the formatted date string.\n * @throws {TypeError} 1 argument required.\n * @throws {RangeError} `date` must not be Invalid Date\n *\n * @example\n * // Represent 10 October 2019 in German.\n * // Convert the date with format's options and locale's options.\n * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {\n *      weekday: 'long',\n *      year: 'numeric',\n *      month: 'long',\n *      day: 'numeric',\n *    }, {\n *      locale: 'de-DE',\n *  })\n * //=> Freitag, 4. Oktober 2019\n *\n * @example\n * // Represent 10 October 2019.\n * // Convert the date with format's options.\n * const result = intlFormat.default(new Date(2019, 9, 4, 12, 30, 13, 456), {\n *      year: 'numeric',\n *      month: 'numeric',\n *      day: 'numeric',\n *      hour: 'numeric',\n *  })\n * //=> 10/4/2019, 12 PM\n *\n * @example\n * // Represent 10 October 2019 in Korean.\n * // Convert the date with locale's options.\n * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {\n *      locale: 'ko-KR',\n *  })\n * //=> 2019. 10. 4.\n *\n * @example\n * // Represent 10 October 2019 in middle-endian format:\n * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456))\n * //=> 10/4/2019\n */\nexport default function intlFormat(date, formatOrLocale, localeOptions) {\n  var _localeOptions;\n  requiredArgs(1, arguments);\n  var formatOptions;\n  if (isFormatOptions(formatOrLocale)) {\n    formatOptions = formatOrLocale;\n  } else {\n    localeOptions = formatOrLocale;\n  }\n  return new Intl.DateTimeFormat((_localeOptions = localeOptions) === null || _localeOptions === void 0 ? void 0 : _localeOptions.locale, formatOptions).format(date);\n}\nfunction isFormatOptions(opts) {\n  return opts !== undefined && !('locale' in opts);\n}","import { secondsInDay, secondsInHour, secondsInMinute, secondsInMonth, secondsInQuarter, secondsInWeek, secondsInYear } from \"../constants/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport differenceInCalendarQuarters from \"../differenceInCalendarQuarters/index.js\";\nimport differenceInCalendarWeeks from \"../differenceInCalendarWeeks/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intlFormatDistance\n * @category Common Helpers\n * @summary Formats distance between two dates in a human-readable format\n * @description\n * The function calculates the difference between two dates and formats it as a human-readable string.\n *\n * The function will pick the most appropriate unit depending on the distance between dates. For example, if the distance is a few hours, it might return `x hours`. If the distance is a few months, it might return `x months`.\n *\n * You can also specify a unit to force using it regardless of the distance to get a result like `123456 hours`.\n *\n * See the table below for the unit picking logic:\n *\n * | Distance between dates | Result (past)  | Result (future) |\n * | ---------------------- | -------------- | --------------- |\n * | 0 seconds              | now            | now             |\n * | 1-59 seconds           | X seconds ago  | in X seconds    |\n * | 1-59 minutes           | X minutes ago  | in X minutes    |\n * | 1-23 hours             | X hours ago    | in X hours      |\n * | 1 day                  | yesterday      | tomorrow        |\n * | 2-6 days               | X days ago     | in X days       |\n * | 7 days                 | last week      | next week       |\n * | 8 days-1 month         | X weeks ago    | in X weeks      |\n * | 1 month                | last month     | next month      |\n * | 2-3 months             | X months ago   | in X months     |\n * | 1 quarter              | last quarter   | next quarter    |\n * | 2-3 quarters           | X quarters ago | in X quarters   |\n * | 1 year                 | last year      | next year       |\n * | 2+ years               | X years ago    | in X years      |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with.\n * @param {Object} [options] - an object with options.\n * @param {String} [options.unit] - formats the distance with the given unit ('year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second').\n * @param {String|String[]} [options.locale] - the locale to use.\n * @param {String} [options.localeMatcher='best fit'] - the locale matching algorithm to use. Other value: 'lookup'.\n * See MDN for details [Locale identification and negotiation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)\n * @param {String} [options.numeric='auto'] - the output message format. The values are 'auto' (e.g. `yesterday`), 'always'(e.g. `1 day ago`).\n * @param {String} [options.style='long'] - the length of the result. The values are: 'long' (e.g. `1 month`), 'short' (e.g. 'in 1 mo.'), 'narrow' (e.g. 'in 1 mo.').\n * The narrow one could be similar to the short one for some locales.\n * @returns {String} the distance in words according to language-sensitive relative time formatting.\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.unit` must not be invalid Unit\n * @throws {RangeError} `options.locale` must not be invalid locale\n * @throws {RangeError} `options.localeMatcher` must not be invalid localeMatcher\n * @throws {RangeError} `options.numeric` must not be invalid numeric\n * @throws {RangeError} `options.style` must not be invalid style\n *\n * @example\n * // What is the distance between the dates when the fist date is after the second?\n * intlFormatDistance(\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   new Date(1986, 3, 4, 10, 30, 0)\n * )\n * //=> 'in 1 hour'\n *\n * // What is the distance between the dates when the fist date is before the second?\n * intlFormatDistance(\n *   new Date(1986, 3, 4, 10, 30, 0),\n *   new Date(1986, 3, 4, 11, 30, 0)\n * )\n * //=> '1 hour ago'\n *\n * @example\n * // Use the unit option to force the function to output the result in quarters. Without setting it, the example would return \"next year\"\n * intlFormatDistance(\n *   new Date(1987, 6, 4, 10, 30, 0),\n *   new Date(1986, 3, 4, 10, 30, 0),\n *   { unit: 'quarter' }\n * )\n * //=> 'in 5 quarters'\n *\n * @example\n * // Use the locale option to get the result in Spanish. Without setting it, the example would return \"in 1 hour\".\n * intlFormatDistance(\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   new Date(1986, 3, 4, 10, 30, 0),\n *   { locale: 'es' }\n * )\n * //=> 'dentro de 1 hora'\n *\n * @example\n * // Use the numeric option to force the function to use numeric values. Without setting it, the example would return \"tomorrow\".\n * intlFormatDistance(\n *   new Date(1986, 3, 5, 11, 30, 0),\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   { numeric: 'always' }\n * )\n * //=> 'in 1 day'\n *\n * @example\n * // Use the style option to force the function to use short values. Without setting it, the example would return \"in 2 years\".\n * intlFormatDistance(\n *   new Date(1988, 3, 4, 11, 30, 0),\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   { style: 'short' }\n * )\n * //=> 'in 2 yr'\n */\nexport default function intlFormatDistance(date, baseDate, options) {\n  requiredArgs(2, arguments);\n  var value = 0;\n  var unit;\n  var dateLeft = toDate(date);\n  var dateRight = toDate(baseDate);\n  if (!(options !== null && options !== void 0 && options.unit)) {\n    // Get the unit based on diffInSeconds calculations if no unit is specified\n    var diffInSeconds = differenceInSeconds(dateLeft, dateRight); // The smallest unit\n\n    if (Math.abs(diffInSeconds) < secondsInMinute) {\n      value = differenceInSeconds(dateLeft, dateRight);\n      unit = 'second';\n    } else if (Math.abs(diffInSeconds) < secondsInHour) {\n      value = differenceInMinutes(dateLeft, dateRight);\n      unit = 'minute';\n    } else if (Math.abs(diffInSeconds) < secondsInDay && Math.abs(differenceInCalendarDays(dateLeft, dateRight)) < 1) {\n      value = differenceInHours(dateLeft, dateRight);\n      unit = 'hour';\n    } else if (Math.abs(diffInSeconds) < secondsInWeek && (value = differenceInCalendarDays(dateLeft, dateRight)) && Math.abs(value) < 7) {\n      unit = 'day';\n    } else if (Math.abs(diffInSeconds) < secondsInMonth) {\n      value = differenceInCalendarWeeks(dateLeft, dateRight);\n      unit = 'week';\n    } else if (Math.abs(diffInSeconds) < secondsInQuarter) {\n      value = differenceInCalendarMonths(dateLeft, dateRight);\n      unit = 'month';\n    } else if (Math.abs(diffInSeconds) < secondsInYear) {\n      if (differenceInCalendarQuarters(dateLeft, dateRight) < 4) {\n        // To filter out cases that are less than a year but match 4 quarters\n        value = differenceInCalendarQuarters(dateLeft, dateRight);\n        unit = 'quarter';\n      } else {\n        value = differenceInCalendarYears(dateLeft, dateRight);\n        unit = 'year';\n      }\n    } else {\n      value = differenceInCalendarYears(dateLeft, dateRight);\n      unit = 'year';\n    }\n  } else {\n    // Get the value if unit is specified\n    unit = options === null || options === void 0 ? void 0 : options.unit;\n    if (unit === 'second') {\n      value = differenceInSeconds(dateLeft, dateRight);\n    } else if (unit === 'minute') {\n      value = differenceInMinutes(dateLeft, dateRight);\n    } else if (unit === 'hour') {\n      value = differenceInHours(dateLeft, dateRight);\n    } else if (unit === 'day') {\n      value = differenceInCalendarDays(dateLeft, dateRight);\n    } else if (unit === 'week') {\n      value = differenceInCalendarWeeks(dateLeft, dateRight);\n    } else if (unit === 'month') {\n      value = differenceInCalendarMonths(dateLeft, dateRight);\n    } else if (unit === 'quarter') {\n      value = differenceInCalendarQuarters(dateLeft, dateRight);\n    } else if (unit === 'year') {\n      value = differenceInCalendarYears(dateLeft, dateRight);\n    }\n  }\n  var rtf = new Intl.RelativeTimeFormat(options === null || options === void 0 ? void 0 : options.locale, {\n    localeMatcher: options === null || options === void 0 ? void 0 : options.localeMatcher,\n    numeric: (options === null || options === void 0 ? void 0 : options.numeric) || 'auto',\n    style: options === null || options === void 0 ? void 0 : options.style\n  });\n  return rtf.format(value, unit);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * const result = isEqual(\n *   new Date(2014, 6, 2, 6, 30, 45, 0),\n *   new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyLeftDate);\n  var dateRight = toDate(dirtyRightDate);\n  return dateLeft.getTime() === dateRight.getTime();\n}","/**\n * @name isExists\n * @category Common Helpers\n * @summary Is the given date exists?\n *\n * @description\n * Checks if the given arguments convert to an existing date.\n *\n * @param {Number} year of the date to check\n * @param {Number} month of the date to check\n * @param {Number} day of the date to check\n * @returns {Boolean} the date exists\n * @throws {TypeError} 3 arguments required\n *\n * @example\n * // For the valid date:\n * const result = isExists(2018, 0, 31)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isExists(2018, 1, 31)\n * //=> false\n */\nexport default function isExists(year, month, day) {\n  if (arguments.length < 3) {\n    throw new TypeError('3 argument required, but only ' + arguments.length + ' present');\n  }\n  var date = new Date(year, month, day);\n  return date.getFullYear() === year && date.getMonth() === month && date.getDate() === day;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFirstDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * const result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nexport default function isFirstDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDate() === 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFriday\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 26 September 2014 Friday?\n * const result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nexport default function isFriday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 5;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFuture\n * @category Common Helpers\n * @summary Is the given date in the future?\n * @pure false\n *\n * @description\n * Is the given date in the future?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the future\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 31 December 2014 in the future?\n * const result = isFuture(new Date(2014, 11, 31))\n * //=> true\n */\nexport default function isFuture(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getTime() > Date.now();\n}","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nfunction _createForOfIteratorHelper(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (!t) {\n    if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n      t && (r = t);\n      var _n = 0,\n        F = function F() {};\n      return {\n        s: F,\n        n: function n() {\n          return _n >= r.length ? {\n            done: !0\n          } : {\n            done: !1,\n            value: r[_n++]\n          };\n        },\n        e: function e(r) {\n          throw r;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var o,\n    a = !0,\n    u = !1;\n  return {\n    s: function s() {\n      t = t.call(r);\n    },\n    n: function n() {\n      var r = t.next();\n      return a = r.done, r;\n    },\n    e: function e(r) {\n      u = !0, o = r;\n    },\n    f: function f() {\n      try {\n        a || null == t[\"return\"] || t[\"return\"]();\n      } finally {\n        if (u) throw o;\n      }\n    }\n  };\n}\nexport { _createForOfIteratorHelper as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n  var r = isNativeReflectConstruct();\n  return function () {\n    var e,\n      o = getPrototypeOf(t);\n    if (r) {\n      var s = getPrototypeOf(this).constructor;\n      e = Reflect.construct(o, arguments, s);\n    } else e = o.apply(this, arguments);\n    return possibleConstructorReturn(this, e);\n  };\n}\nexport { _createSuper as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n  function Setter() {\n    _classCallCheck(this, Setter);\n    _defineProperty(this, \"priority\", void 0);\n    _defineProperty(this, \"subPriority\", 0);\n  }\n  _createClass(Setter, [{\n    key: \"validate\",\n    value: function validate(_utcDate, _options) {\n      return true;\n    }\n  }]);\n  return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n  _inherits(ValueSetter, _Setter);\n  var _super = _createSuper(ValueSetter);\n  function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n    var _this;\n    _classCallCheck(this, ValueSetter);\n    _this = _super.call(this);\n    _this.value = value;\n    _this.validateValue = validateValue;\n    _this.setValue = setValue;\n    _this.priority = priority;\n    if (subPriority) {\n      _this.subPriority = subPriority;\n    }\n    return _this;\n  }\n  _createClass(ValueSetter, [{\n    key: \"validate\",\n    value: function validate(utcDate, options) {\n      return this.validateValue(utcDate, this.value, options);\n    }\n  }, {\n    key: \"set\",\n    value: function set(utcDate, flags, options) {\n      return this.setValue(utcDate, flags, this.value, options);\n    }\n  }]);\n  return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n  _inherits(DateToSystemTimezoneSetter, _Setter2);\n  var _super2 = _createSuper(DateToSystemTimezoneSetter);\n  function DateToSystemTimezoneSetter() {\n    var _this2;\n    _classCallCheck(this, DateToSystemTimezoneSetter);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this2 = _super2.call.apply(_super2, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n    _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n    return _this2;\n  }\n  _createClass(DateToSystemTimezoneSetter, [{\n    key: \"set\",\n    value: function set(date, flags) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n      var convertedDate = new Date(0);\n      convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n      convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n      return convertedDate;\n    }\n  }]);\n  return DateToSystemTimezoneSetter;\n}(Setter);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n  function Parser() {\n    _classCallCheck(this, Parser);\n    _defineProperty(this, \"incompatibleTokens\", void 0);\n    _defineProperty(this, \"priority\", void 0);\n    _defineProperty(this, \"subPriority\", void 0);\n  }\n  _createClass(Parser, [{\n    key: \"run\",\n    value: function run(dateString, token, match, options) {\n      var result = this.parse(dateString, token, match, options);\n      if (!result) {\n        return null;\n      }\n      return {\n        setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n        rest: result.rest\n      };\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_utcDate, _value, _options) {\n      return true;\n    }\n  }]);\n  return Parser;\n}();","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n  _inherits(EraParser, _Parser);\n  var _super = _createSuper(EraParser);\n  function EraParser() {\n    var _this;\n    _classCallCheck(this, EraParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n    return _this;\n  }\n  _createClass(EraParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // AD, BC\n        case 'G':\n        case 'GG':\n        case 'GGG':\n          return match.era(dateString, {\n            width: 'abbreviated'\n          }) || match.era(dateString, {\n            width: 'narrow'\n          });\n        // A, B\n        case 'GGGGG':\n          return match.era(dateString, {\n            width: 'narrow'\n          });\n        // Anno Domini, Before Christ\n        case 'GGGG':\n        default:\n          return match.era(dateString, {\n            width: 'wide'\n          }) || match.era(dateString, {\n            width: 'abbreviated'\n          }) || match.era(dateString, {\n            width: 'narrow'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      flags.era = value;\n      date.setUTCFullYear(value, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return EraParser;\n}(Parser);","export var numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/,\n  // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n  // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/,\n  // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/,\n  // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/,\n  // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/,\n  // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  minute: /^[0-5]?\\d/,\n  // 0 to 59\n  second: /^[0-5]?\\d/,\n  // 0 to 59\n\n  singleDigit: /^\\d/,\n  // 0 to 9\n  twoDigits: /^\\d{1,2}/,\n  // 0 to 99\n  threeDigits: /^\\d{1,3}/,\n  // 0 to 999\n  fourDigits: /^\\d{1,4}/,\n  // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/,\n  // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/,\n  // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/,\n  // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n};\n\nexport var timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};","import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest\n  };\n}\nexport function parseNumericPattern(pattern, dateString) {\n  var matchResult = dateString.match(pattern);\n  if (!matchResult) {\n    return null;\n  }\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length)\n  };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n  var matchResult = dateString.match(pattern);\n  if (!matchResult) {\n    return null;\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === 'Z') {\n    return {\n      value: 0,\n      rest: dateString.slice(1)\n    };\n  }\n  var sign = matchResult[1] === '+' ? 1 : -1;\n  var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n  return {\n    value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length)\n  };\n}\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n    default:\n      return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n  }\n}\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n    default:\n      return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n  }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case 'morning':\n      return 4;\n    case 'evening':\n      return 17;\n    case 'pm':\n    case 'noon':\n    case 'afternoon':\n      return 12;\n    case 'am':\n    case 'midnight':\n    case 'night':\n    default:\n      return 0;\n  }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  var isCommonEra = currentYear > 0;\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n  var result;\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    var rangeEnd = absCurrentYear + 50;\n    var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n    var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n  return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(YearParser, _Parser);\n  var _super = _createSuper(YearParser);\n  function YearParser() {\n    var _this;\n    _classCallCheck(this, YearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(YearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'yy'\n        };\n      };\n      switch (token) {\n        case 'y':\n          return mapValue(parseNDigits(4, dateString), valueCallback);\n        case 'yo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'year'\n          }), valueCallback);\n        default:\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value.isTwoDigitYear || value.year > 0;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      var currentYear = date.getUTCFullYear();\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n        date.setUTCHours(0, 0, 0, 0);\n        return date;\n      }\n      var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setUTCFullYear(year, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return YearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalWeekYearParser, _Parser);\n  var _super = _createSuper(LocalWeekYearParser);\n  function LocalWeekYearParser() {\n    var _this;\n    _classCallCheck(this, LocalWeekYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n    return _this;\n  }\n  _createClass(LocalWeekYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'YY'\n        };\n      };\n      switch (token) {\n        case 'Y':\n          return mapValue(parseNDigits(4, dateString), valueCallback);\n        case 'Yo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'year'\n          }), valueCallback);\n        default:\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value.isTwoDigitYear || value.year > 0;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value, options) {\n      var currentYear = getUTCWeekYear(date, options);\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n        date.setUTCHours(0, 0, 0, 0);\n        return startOfUTCWeek(date, options);\n      }\n      var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n      date.setUTCHours(0, 0, 0, 0);\n      return startOfUTCWeek(date, options);\n    }\n  }]);\n  return LocalWeekYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOWeekYearParser, _Parser);\n  var _super = _createSuper(ISOWeekYearParser);\n  function ISOWeekYearParser() {\n    var _this;\n    _classCallCheck(this, ISOWeekYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ISOWeekYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      if (token === 'R') {\n        return parseNDigitsSigned(4, dateString);\n      }\n      return parseNDigitsSigned(token.length, dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(_date, _flags, value) {\n      var firstWeekOfYear = new Date(0);\n      firstWeekOfYear.setUTCFullYear(value, 0, 4);\n      firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n      return startOfUTCISOWeek(firstWeekOfYear);\n    }\n  }]);\n  return ISOWeekYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ExtendedYearParser, _Parser);\n  var _super = _createSuper(ExtendedYearParser);\n  function ExtendedYearParser() {\n    var _this;\n    _classCallCheck(this, ExtendedYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ExtendedYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      if (token === 'u') {\n        return parseNDigitsSigned(4, dateString);\n      }\n      return parseNDigitsSigned(token.length, dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCFullYear(value, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return ExtendedYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n  _inherits(QuarterParser, _Parser);\n  var _super = _createSuper(QuarterParser);\n  function QuarterParser() {\n    var _this;\n    _classCallCheck(this, QuarterParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(QuarterParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'Q':\n        case 'QQ':\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, dateString);\n        // 1st, 2nd, 3rd, 4th\n        case 'Qo':\n          return match.ordinalNumber(dateString, {\n            unit: 'quarter'\n          });\n        // Q1, Q2, Q3, Q4\n        case 'QQQ':\n          return match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'QQQQQ':\n          return match.quarter(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // 1st quarter, 2nd quarter, ...\n        case 'QQQQ':\n        default:\n          return match.quarter(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 4;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth((value - 1) * 3, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return QuarterParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneQuarterParser, _Parser);\n  var _super = _createSuper(StandAloneQuarterParser);\n  function StandAloneQuarterParser() {\n    var _this;\n    _classCallCheck(this, StandAloneQuarterParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(StandAloneQuarterParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'q':\n        case 'qq':\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, dateString);\n        // 1st, 2nd, 3rd, 4th\n        case 'qo':\n          return match.ordinalNumber(dateString, {\n            unit: 'quarter'\n          });\n        // Q1, Q2, Q3, Q4\n        case 'qqq':\n          return match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'qqqqq':\n          return match.quarter(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // 1st quarter, 2nd quarter, ...\n        case 'qqqq':\n        default:\n          return match.quarter(dateString, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 4;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth((value - 1) * 3, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return StandAloneQuarterParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n  _inherits(MonthParser, _Parser);\n  var _super = _createSuper(MonthParser);\n  function MonthParser() {\n    var _this;\n    _classCallCheck(this, MonthParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n    return _this;\n  }\n  _createClass(MonthParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        return value - 1;\n      };\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'M':\n          return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n        // 01, 02, ..., 12\n        case 'MM':\n          return mapValue(parseNDigits(2, dateString), valueCallback);\n        // 1st, 2nd, ..., 12th\n        case 'Mo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'month'\n          }), valueCallback);\n        // Jan, Feb, ..., Dec\n        case 'MMM':\n          return match.month(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // J, F, ..., D\n        case 'MMMMM':\n          return match.month(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // January, February, ..., December\n        case 'MMMM':\n        default:\n          return match.month(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.month(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth(value, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return MonthParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneMonthParser, _Parser);\n  var _super = _createSuper(StandAloneMonthParser);\n  function StandAloneMonthParser() {\n    var _this;\n    _classCallCheck(this, StandAloneMonthParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(StandAloneMonthParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        return value - 1;\n      };\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'L':\n          return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n        // 01, 02, ..., 12\n        case 'LL':\n          return mapValue(parseNDigits(2, dateString), valueCallback);\n        // 1st, 2nd, ..., 12th\n        case 'Lo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'month'\n          }), valueCallback);\n        // Jan, Feb, ..., Dec\n        case 'LLL':\n          return match.month(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // J, F, ..., D\n        case 'LLLLL':\n          return match.month(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // January, February, ..., December\n        case 'LLLL':\n        default:\n          return match.month(dateString, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.month(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth(value, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return StandAloneMonthParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalWeekParser, _Parser);\n  var _super = _createSuper(LocalWeekParser);\n  function LocalWeekParser() {\n    var _this;\n    _classCallCheck(this, LocalWeekParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n    return _this;\n  }\n  _createClass(LocalWeekParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'w':\n          return parseNumericPattern(numericPatterns.week, dateString);\n        case 'wo':\n          return match.ordinalNumber(dateString, {\n            unit: 'week'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 53;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      return startOfUTCWeek(setUTCWeek(date, value, options), options);\n    }\n  }]);\n  return LocalWeekParser;\n}(Parser);","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var week = toInteger(dirtyWeek);\n  var diff = getUTCWeek(date, options) - week;\n  date.setUTCDate(date.getUTCDate() - diff * 7);\n  return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOWeekParser, _Parser);\n  var _super = _createSuper(ISOWeekParser);\n  function ISOWeekParser() {\n    var _this;\n    _classCallCheck(this, ISOWeekParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ISOWeekParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'I':\n          return parseNumericPattern(numericPatterns.week, dateString);\n        case 'Io':\n          return match.ordinalNumber(dateString, {\n            unit: 'week'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 53;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      return startOfUTCISOWeek(setUTCISOWeek(date, value));\n    }\n  }]);\n  return ISOWeekParser;\n}(Parser);","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeek = toInteger(dirtyISOWeek);\n  var diff = getUTCISOWeek(date) - isoWeek;\n  date.setUTCDate(date.getUTCDate() - diff * 7);\n  return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n// Day of the month\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DateParser, _Parser);\n  var _super = _createSuper(DateParser);\n  function DateParser() {\n    var _this;\n    _classCallCheck(this, DateParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(DateParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'd':\n          return parseNumericPattern(numericPatterns.date, dateString);\n        case 'do':\n          return match.ordinalNumber(dateString, {\n            unit: 'date'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(date, value) {\n      var year = date.getUTCFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n      var month = date.getUTCMonth();\n      if (isLeapYear) {\n        return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n      } else {\n        return value >= 1 && value <= DAYS_IN_MONTH[month];\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCDate(value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DateParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayOfYearParser, _Parser);\n  var _super = _createSuper(DayOfYearParser);\n  function DayOfYearParser() {\n    var _this;\n    _classCallCheck(this, DayOfYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(DayOfYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'D':\n        case 'DD':\n          return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n        case 'Do':\n          return match.ordinalNumber(dateString, {\n            unit: 'date'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(date, value) {\n      var year = date.getUTCFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n      if (isLeapYear) {\n        return value >= 1 && value <= 366;\n      } else {\n        return value >= 1 && value <= 365;\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth(0, value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DayOfYearParser;\n}(Parser);","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function setUTCDay(dirtyDate, dirtyDay, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = date.getUTCDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayParser, _Parser);\n  var _super = _createSuper(DayParser);\n  function DayParser() {\n    var _this;\n    _classCallCheck(this, DayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(DayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // Tue\n        case 'E':\n        case 'EE':\n        case 'EEE':\n          return match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // T\n        case 'EEEEE':\n          return match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tu\n        case 'EEEEEE':\n          return match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tuesday\n        case 'EEEE':\n        default:\n          return match.day(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalDayParser, _Parser);\n  var _super = _createSuper(LocalDayParser);\n  function LocalDayParser() {\n    var _this;\n    _classCallCheck(this, LocalDayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(LocalDayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match, options) {\n      var valueCallback = function valueCallback(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n        return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n      };\n      switch (token) {\n        // 3\n        case 'e':\n        case 'ee':\n          // 03\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n        // 3rd\n        case 'eo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'day'\n          }), valueCallback);\n        // Tue\n        case 'eee':\n          return match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // T\n        case 'eeeee':\n          return match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tu\n        case 'eeeeee':\n          return match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tuesday\n        case 'eeee':\n        default:\n          return match.day(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return LocalDayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneLocalDayParser, _Parser);\n  var _super = _createSuper(StandAloneLocalDayParser);\n  function StandAloneLocalDayParser() {\n    var _this;\n    _classCallCheck(this, StandAloneLocalDayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n    return _this;\n  }\n  _createClass(StandAloneLocalDayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match, options) {\n      var valueCallback = function valueCallback(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n        return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n      };\n      switch (token) {\n        // 3\n        case 'c':\n        case 'cc':\n          // 03\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n        // 3rd\n        case 'co':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'day'\n          }), valueCallback);\n        // Tue\n        case 'ccc':\n          return match.day(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // T\n        case 'ccccc':\n          return match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // Tu\n        case 'cccccc':\n          return match.day(dateString, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // Tuesday\n        case 'cccc':\n        default:\n          return match.day(dateString, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return StandAloneLocalDayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISODayParser, _Parser);\n  var _super = _createSuper(ISODayParser);\n  function ISODayParser() {\n    var _this;\n    _classCallCheck(this, ISODayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ISODayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        if (value === 0) {\n          return 7;\n        }\n        return value;\n      };\n      switch (token) {\n        // 2\n        case 'i':\n        case 'ii':\n          // 02\n          return parseNDigits(token.length, dateString);\n        // 2nd\n        case 'io':\n          return match.ordinalNumber(dateString, {\n            unit: 'day'\n          });\n        // Tue\n        case 'iii':\n          return mapValue(match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n        // T\n        case 'iiiii':\n          return mapValue(match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n        // Tu\n        case 'iiiiii':\n          return mapValue(match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n        // Tuesday\n        case 'iiii':\n        default:\n          return mapValue(match.day(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 7;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date = setUTCISODay(date, value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return ISODayParser;\n}(Parser);","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n  requiredArgs(2, arguments);\n  var day = toInteger(dirtyDay);\n  if (day % 7 === 0) {\n    day = day - 7;\n  }\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var currentDay = date.getUTCDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n  _inherits(AMPMParser, _Parser);\n  var _super = _createSuper(AMPMParser);\n  function AMPMParser() {\n    var _this;\n    _classCallCheck(this, AMPMParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(AMPMParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'a':\n        case 'aa':\n        case 'aaa':\n          return match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'aaaaa':\n          return match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'aaaa':\n        default:\n          return match.dayPeriod(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n  return AMPMParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n  _inherits(AMPMMidnightParser, _Parser);\n  var _super = _createSuper(AMPMMidnightParser);\n  function AMPMMidnightParser() {\n    var _this;\n    _classCallCheck(this, AMPMMidnightParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(AMPMMidnightParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'b':\n        case 'bb':\n        case 'bbb':\n          return match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'bbbbb':\n          return match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'bbbb':\n        default:\n          return match.dayPeriod(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n  return AMPMMidnightParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayPeriodParser, _Parser);\n  var _super = _createSuper(DayPeriodParser);\n  function DayPeriodParser() {\n    var _this;\n    _classCallCheck(this, DayPeriodParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n    return _this;\n  }\n  _createClass(DayPeriodParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'B':\n        case 'BB':\n        case 'BBB':\n          return match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'BBBBB':\n          return match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'BBBB':\n        default:\n          return match.dayPeriod(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DayPeriodParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour1to12Parser, _Parser);\n  var _super = _createSuper(Hour1to12Parser);\n  function Hour1to12Parser() {\n    var _this;\n    _classCallCheck(this, Hour1to12Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour1to12Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'h':\n          return parseNumericPattern(numericPatterns.hour12h, dateString);\n        case 'ho':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 12;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var isPM = date.getUTCHours() >= 12;\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0);\n      } else if (!isPM && value === 12) {\n        date.setUTCHours(0, 0, 0, 0);\n      } else {\n        date.setUTCHours(value, 0, 0, 0);\n      }\n      return date;\n    }\n  }]);\n  return Hour1to12Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour0to23Parser, _Parser);\n  var _super = _createSuper(Hour0to23Parser);\n  function Hour0to23Parser() {\n    var _this;\n    _classCallCheck(this, Hour0to23Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour0to23Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'H':\n          return parseNumericPattern(numericPatterns.hour23h, dateString);\n        case 'Ho':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 23;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(value, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return Hour0to23Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour0To11Parser, _Parser);\n  var _super = _createSuper(Hour0To11Parser);\n  function Hour0To11Parser() {\n    var _this;\n    _classCallCheck(this, Hour0To11Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour0To11Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'K':\n          return parseNumericPattern(numericPatterns.hour11h, dateString);\n        case 'Ko':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var isPM = date.getUTCHours() >= 12;\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0);\n      } else {\n        date.setUTCHours(value, 0, 0, 0);\n      }\n      return date;\n    }\n  }]);\n  return Hour0To11Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour1To24Parser, _Parser);\n  var _super = _createSuper(Hour1To24Parser);\n  function Hour1To24Parser() {\n    var _this;\n    _classCallCheck(this, Hour1To24Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour1To24Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'k':\n          return parseNumericPattern(numericPatterns.hour24h, dateString);\n        case 'ko':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 24;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var hours = value <= 24 ? value % 24 : value;\n      date.setUTCHours(hours, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return Hour1To24Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n  _inherits(MinuteParser, _Parser);\n  var _super = _createSuper(MinuteParser);\n  function MinuteParser() {\n    var _this;\n    _classCallCheck(this, MinuteParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n    return _this;\n  }\n  _createClass(MinuteParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'm':\n          return parseNumericPattern(numericPatterns.minute, dateString);\n        case 'mo':\n          return match.ordinalNumber(dateString, {\n            unit: 'minute'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 59;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMinutes(value, 0, 0);\n      return date;\n    }\n  }]);\n  return MinuteParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n  _inherits(SecondParser, _Parser);\n  var _super = _createSuper(SecondParser);\n  function SecondParser() {\n    var _this;\n    _classCallCheck(this, SecondParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n    return _this;\n  }\n  _createClass(SecondParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 's':\n          return parseNumericPattern(numericPatterns.second, dateString);\n        case 'so':\n          return match.ordinalNumber(dateString, {\n            unit: 'second'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 59;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCSeconds(value, 0);\n      return date;\n    }\n  }]);\n  return SecondParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n  _inherits(FractionOfSecondParser, _Parser);\n  var _super = _createSuper(FractionOfSecondParser);\n  function FractionOfSecondParser() {\n    var _this;\n    _classCallCheck(this, FractionOfSecondParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n    return _this;\n  }\n  _createClass(FractionOfSecondParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      var valueCallback = function valueCallback(value) {\n        return Math.floor(value * Math.pow(10, -token.length + 3));\n      };\n      return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMilliseconds(value);\n      return date;\n    }\n  }]);\n  return FractionOfSecondParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOTimezoneWithZParser, _Parser);\n  var _super = _createSuper(ISOTimezoneWithZParser);\n  function ISOTimezoneWithZParser() {\n    var _this;\n    _classCallCheck(this, ISOTimezoneWithZParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n    return _this;\n  }\n  _createClass(ISOTimezoneWithZParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      switch (token) {\n        case 'X':\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n        case 'XX':\n          return parseTimezonePattern(timezonePatterns.basic, dateString);\n        case 'XXXX':\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n        case 'XXXXX':\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n        case 'XXX':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, dateString);\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n      return new Date(date.getTime() - value);\n    }\n  }]);\n  return ISOTimezoneWithZParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOTimezoneParser, _Parser);\n  var _super = _createSuper(ISOTimezoneParser);\n  function ISOTimezoneParser() {\n    var _this;\n    _classCallCheck(this, ISOTimezoneParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n    return _this;\n  }\n  _createClass(ISOTimezoneParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      switch (token) {\n        case 'x':\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n        case 'xx':\n          return parseTimezonePattern(timezonePatterns.basic, dateString);\n        case 'xxxx':\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n        case 'xxxxx':\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n        case 'xxx':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, dateString);\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n      return new Date(date.getTime() - value);\n    }\n  }]);\n  return ISOTimezoneParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n  _inherits(TimestampSecondsParser, _Parser);\n  var _super = _createSuper(TimestampSecondsParser);\n  function TimestampSecondsParser() {\n    var _this;\n    _classCallCheck(this, TimestampSecondsParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n    return _this;\n  }\n  _createClass(TimestampSecondsParser, [{\n    key: \"parse\",\n    value: function parse(dateString) {\n      return parseAnyDigitsSigned(dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(_date, _flags, value) {\n      return [new Date(value * 1000), {\n        timestampIsSet: true\n      }];\n    }\n  }]);\n  return TimestampSecondsParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n  _inherits(TimestampMillisecondsParser, _Parser);\n  var _super = _createSuper(TimestampMillisecondsParser);\n  function TimestampMillisecondsParser() {\n    var _this;\n    _classCallCheck(this, TimestampMillisecondsParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n    return _this;\n  }\n  _createClass(TimestampMillisecondsParser, [{\n    key: \"parse\",\n    value: function parse(dateString) {\n      return parseAnyDigitsSigned(dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(_date, _flags, value) {\n      return [new Date(value), {\n        timestampIsSet: true\n      }];\n    }\n  }]);\n  return TimestampMillisecondsParser;\n}(Parser);","import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\nexport var parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser()\n};","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _createForOfIteratorHelper from \"@babel/runtime/helpers/esm/createForOfIteratorHelper\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n  requiredArgs(3, arguments);\n  var dateString = String(dirtyDateString);\n  var formatString = String(dirtyFormatString);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.match) {\n    throw new RangeError('locale must contain match property');\n  }\n  var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  if (formatString === '') {\n    if (dateString === '') {\n      return toDate(dirtyReferenceDate);\n    } else {\n      return new Date(NaN);\n    }\n  }\n  var subFnOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  };\n\n  // If timezone isn't specified, it will be set to the system timezone\n  var setters = [new DateToSystemTimezoneSetter()];\n  var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n    if (firstCharacter in longFormatters) {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n    return substring;\n  }).join('').match(formattingTokensRegExp);\n  var usedTokens = [];\n  var _iterator = _createForOfIteratorHelper(tokens),\n    _step;\n  try {\n    var _loop = function _loop() {\n      var token = _step.value;\n      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n        throwProtectedError(token, formatString, dirtyDateString);\n      }\n      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n        throwProtectedError(token, formatString, dirtyDateString);\n      }\n      var firstCharacter = token[0];\n      var parser = parsers[firstCharacter];\n      if (parser) {\n        var incompatibleTokens = parser.incompatibleTokens;\n        if (Array.isArray(incompatibleTokens)) {\n          var incompatibleToken = usedTokens.find(function (usedToken) {\n            return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n          });\n          if (incompatibleToken) {\n            throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n          }\n        } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n          throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n        }\n        usedTokens.push({\n          token: firstCharacter,\n          fullToken: token\n        });\n        var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n        if (!parseResult) {\n          return {\n            v: new Date(NaN)\n          };\n        }\n        setters.push(parseResult.setter);\n        dateString = parseResult.rest;\n      } else {\n        if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n          throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n        }\n\n        // Replace two single quote characters with one single quote character\n        if (token === \"''\") {\n          token = \"'\";\n        } else if (firstCharacter === \"'\") {\n          token = cleanEscapedString(token);\n        }\n\n        // Cut token from string, or, if string doesn't match the token, return Invalid Date\n        if (dateString.indexOf(token) === 0) {\n          dateString = dateString.slice(token.length);\n        } else {\n          return {\n            v: new Date(NaN)\n          };\n        }\n      }\n    };\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _ret = _loop();\n      if (_typeof(_ret) === \"object\") return _ret.v;\n    }\n\n    // Check if the remaining input contains something other than whitespace\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n    return new Date(NaN);\n  }\n  var uniquePrioritySetters = setters.map(function (setter) {\n    return setter.priority;\n  }).sort(function (a, b) {\n    return b - a;\n  }).filter(function (priority, index, array) {\n    return array.indexOf(priority) === index;\n  }).map(function (priority) {\n    return setters.filter(function (setter) {\n      return setter.priority === priority;\n    }).sort(function (a, b) {\n      return b.subPriority - a.subPriority;\n    });\n  }).map(function (setterArray) {\n    return setterArray[0];\n  });\n  var date = toDate(dirtyReferenceDate);\n  if (isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n  var flags = {};\n  var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var setter = _step2.value;\n      if (!setter.validate(utcDate, subFnOptions)) {\n        return new Date(NaN);\n      }\n      var result = setter.set(utcDate, flags, subFnOptions);\n      // Result is tuple (date, flags)\n      if (Array.isArray(result)) {\n        utcDate = result[0];\n        assign(flags, result[1]);\n        // Result is date\n      } else {\n        utcDate = result;\n      }\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n  return utcDate;\n}\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import parse from \"../parse/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isMatch\n * @category Common Helpers\n * @summary validates the date string against given formats\n *\n * @description\n * Return the true if given date is string correct against the given format else\n * will return false.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * isMatch('23 AM', 'HH a')\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Su            | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `isMatch` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `isMatch` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `isMatch` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `isMatch('50', 'yy') //=> true`\n *\n *    `isMatch('75', 'yy') //=> true`\n *\n *    while `uu` will use the year as is:\n *\n *    `isMatch('50', 'uu') //=> true`\n *\n *    `isMatch('75', 'uu') //=> true`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be checked in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are matched (e.g. when matching string 'January 1st' without a year),\n * the values will be taken from today's using `new Date()` date which works as a context of parsing.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n *\n *\n * @param {String} dateString - the date string to verify\n * @param {String} formatString - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {Boolean}\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Match 11 February 2014 from middle-endian format:\n * const result = isMatch('02/11/2014', 'MM/dd/yyyy')\n * //=> true\n *\n * @example\n * // Match 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * const result = isMatch('28-a de februaro', \"do 'de' MMMM\", {\n *   locale: eo\n * })\n * //=> true\n */\nexport default function isMatch(dateString, formatString, options) {\n  requiredArgs(2, arguments);\n  return isValid(parse(dateString, formatString, new Date(), options));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * const result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isMonday(date) {\n  requiredArgs(1, arguments);\n  return toDate(date).getDay() === 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isPast\n * @category Common Helpers\n * @summary Is the given date in the past?\n * @pure false\n *\n * @description\n * Is the given date in the past?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the past\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 2 July 2014 in the past?\n * const result = isPast(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isPast(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getTime() < Date.now();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMinutes(0, 0, 0);\n  return date;\n}","import startOfHour from \"../startOfHour/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour (and same day)?\n *\n * @description\n * Are the given dates in the same hour (and same day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour (and same day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 5 September 06:00:00 in the same hour?\n * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 5, 6, 0))\n * //=> false\n */\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfHour = startOfHour(dirtyDateLeft);\n  var dateRightStartOfHour = startOfHour(dirtyDateRight);\n  return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime();\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week (and month and year)?\n *\n * @description\n * Are the given dates in the same week (and month and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the dates are in the same week (and month and year)\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n *   weekStartsOn: 1\n * })\n * //=> false\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same week?\n * const result = isSameWeek(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport default function isSameWeek(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, options);\n  var dateRightStartOfWeek = startOfWeek(dirtyDateRight, options);\n  return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime();\n}","import isSameWeek from \"../isSameWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameISOWeek\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week (and year)?\n *\n * @description\n * Are the given dates in the same ISO week (and year)?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * const result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))\n * //=> true\n *\n * @example\n * // Are 1 September 2014 and 1 September 2015 in the same ISO week?\n * const result = isSameISOWeek(new Date(2014, 8, 1), new Date(2015, 8, 1))\n * //=> false\n */\nexport default function isSameISOWeek(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  return isSameWeek(dirtyDateLeft, dirtyDateRight, {\n    weekStartsOn: 1\n  });\n}","import startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * const result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))\n * //=> true\n */\nexport default function isSameISOWeekYear(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft);\n  var dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight);\n  return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime();\n}","import startOfMinute from \"../startOfMinute/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMinute\n * @category Minute Helpers\n * @summary Are the given dates in the same minute (and hour and day)?\n *\n * @description\n * Are the given dates in the same minute (and hour and day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute (and hour and day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15 in the same minute?\n * const result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 5 September 2014 06:30:00 in the same minute?\n * const result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 5, 6, 30)\n * )\n * //=> false\n */\nexport default function isSameMinute(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft);\n  var dateRightStartOfMinute = startOfMinute(dirtyDateRight);\n  return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}","import startOfQuarter from \"../startOfQuarter/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same quarter (and year)?\n *\n * @description\n * Are the given dates in the same quarter (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport default function isSameQuarter(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft);\n  var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight);\n  return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMilliseconds(0);\n  return date;\n}","import startOfSecond from \"../startOfSecond/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second (and hour and day)?\n *\n * @description\n * Are the given dates in the same second (and hour and day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second (and hour and day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500 in the same second?\n * const result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 30, 15),\n *   new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:00:15.000 and 4 September 2014 06:01.15.000 in the same second?\n * const result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 0, 15),\n *   new Date(2014, 8, 4, 6, 1, 15)\n * )\n * //=> false\n *\n * @example\n * // Are 4 September 2014 06:00:15.000 and 5 September 2014 06:00.15.000 in the same second?\n * const result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 0, 15),\n *   new Date(2014, 8, 5, 6, 0, 15)\n * )\n * //=> false\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft);\n  var dateRightStartOfSecond = startOfSecond(dirtyDateRight);\n  return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() === dateRight.getFullYear();\n}","import isSameHour from \"../isSameHour/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisHour\n * @category Hour Helpers\n * @summary Is the given date in the same hour as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same hour as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:00:00 in this hour?\n * const result = isThisHour(new Date(2014, 8, 25, 18))\n * //=> true\n */\nexport default function isThisHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameHour(Date.now(), dirtyDate);\n}","import isSameISOWeek from \"../isSameISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisISOWeek\n * @category ISO Week Helpers\n * @summary Is the given date in the same ISO week as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same ISO week as the current date?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 22 September 2014 in this ISO week?\n * const result = isThisISOWeek(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isThisISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameISOWeek(dirtyDate, Date.now());\n}","import isSameMinute from \"../isSameMinute/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisMinute\n * @category Minute Helpers\n * @summary Is the given date in the same minute as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same minute as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:30:00 in this minute?\n * const result = isThisMinute(new Date(2014, 8, 25, 18, 30))\n * //=> true\n */\nexport default function isThisMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameMinute(Date.now(), dirtyDate);\n}","import isSameMonth from \"../isSameMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisMonth\n * @category Month Helpers\n * @summary Is the given date in the same month as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same month as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 15 September 2014 in this month?\n * const result = isThisMonth(new Date(2014, 8, 15))\n * //=> true\n */\nexport default function isThisMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameMonth(Date.now(), dirtyDate);\n}","import isSameQuarter from \"../isSameQuarter/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisQuarter\n * @category Quarter Helpers\n * @summary Is the given date in the same quarter as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same quarter as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 2 July 2014 in this quarter?\n * const result = isThisQuarter(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isThisQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameQuarter(Date.now(), dirtyDate);\n}","import isSameSecond from \"../isSameSecond/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisSecond\n * @category Second Helpers\n * @summary Is the given date in the same second as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same second as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:30:15.000 in this second?\n * const result = isThisSecond(new Date(2014, 8, 25, 18, 30, 15))\n * //=> true\n */\nexport default function isThisSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameSecond(Date.now(), dirtyDate);\n}","import isSameWeek from \"../isSameWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisWeek\n * @category Week Helpers\n * @summary Is the given date in the same week as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same week as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @param {Object} [options] - the object with options\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the date is in this week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // If today is 25 September 2014, is 21 September 2014 in this week?\n * const result = isThisWeek(new Date(2014, 8, 21))\n * //=> true\n *\n * @example\n * // If today is 25 September 2014 and week starts with Monday\n * // is 21 September 2014 in this week?\n * const result = isThisWeek(new Date(2014, 8, 21), { weekStartsOn: 1 })\n * //=> false\n */\n\nexport default function isThisWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  return isSameWeek(dirtyDate, Date.now(), options);\n}","import isSameYear from \"../isSameYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisYear\n * @category Year Helpers\n * @summary Is the given date in the same year as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same year as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 2 July 2014 in this year?\n * const result = isThisYear(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isThisYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameYear(dirtyDate, Date.now());\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThursday\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * const result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isThursday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 4;\n}","import isSameDay from \"../isSameDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isToday\n * @category Day Helpers\n * @summary Is the given date today?\n * @pure false\n *\n * @description\n * Is the given date today?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is today\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 6 October 14:00:00 today?\n * const result = isToday(new Date(2014, 9, 6, 14, 0))\n * //=> true\n */\nexport default function isToday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameDay(dirtyDate, Date.now());\n}","import addDays from \"../addDays/index.js\";\nimport isSameDay from \"../isSameDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isTomorrow\n * @category Day Helpers\n * @summary Is the given date tomorrow?\n * @pure false\n *\n * @description\n * Is the given date tomorrow?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is tomorrow\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 7 October 14:00:00 tomorrow?\n * const result = isTomorrow(new Date(2014, 9, 7, 14, 0))\n * //=> true\n */\nexport default function isTomorrow(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameDay(dirtyDate, addDays(Date.now(), 1));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isTuesday\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * const result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nexport default function isTuesday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 2;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWednesday\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * const result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nexport default function isWednesday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 3;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */\nexport default function isWithinInterval(dirtyDate, interval) {\n  requiredArgs(2, arguments);\n  var time = toDate(dirtyDate).getTime();\n  var startTime = toDate(interval.start).getTime();\n  var endTime = toDate(interval.end).getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startTime <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  return time >= startTime && time <= endTime;\n}","import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addDays(dirtyDate, -amount);\n}","import isSameDay from \"../isSameDay/index.js\";\nimport subDays from \"../subDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isYesterday\n * @category Day Helpers\n * @summary Is the given date yesterday?\n * @pure false\n *\n * @description\n * Is the given date yesterday?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is yesterday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 5 October 14:00:00 yesterday?\n * const result = isYesterday(new Date(2014, 9, 5, 14, 0))\n * //=> true\n */\nexport default function isYesterday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameDay(dirtyDate, subDays(Date.now(), 1));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfDecade\n * @category Decade Helpers\n * @summary Return the last day of a decade for the given date.\n *\n * @description\n * Return the last day of a decade for the given date.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a decade for 21 December 2012 21:12:00:\n * const result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))\n * //=> Wed Dec 31 2019 00:00:00\n */\nexport default function lastDayOfDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = 9 + Math.floor(year / 10) * 10;\n  date.setFullYear(decade + 1, 0, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n  date.setHours(0, 0, 0, 0);\n  date.setDate(date.getDate() + diff);\n  return date;\n}","import lastDayOfWeek from \"../lastDayOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * const result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return lastDayOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * const result = lastDayOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nexport default function lastDayOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(year + 1, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuary);\n  date.setDate(date.getDate() - 1);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfQuarter\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the last day of a quarter\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * const result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3 + 3;\n  date.setMonth(month, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfYear\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * const result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nexport default function lastDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  date.setFullYear(year + 1, 0, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/lightFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name lightFormat\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. Unlike `format`,\n * `lightFormat` doesn't use locales and outputs date using the most popular tokens.\n *\n * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   |\n * |---------------------------------|---------|-----------------------------------|\n * | AM, PM                          | a..aaa  | AM, PM                            |\n * |                                 | aaaa    | a.m., p.m.                        |\n * |                                 | aaaaa   | a, p                              |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 |\n * |                                 | yy      | 44, 01, 00, 17                    |\n * |                                 | yyy     | 044, 001, 000, 017                |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |\n * |                                 | MM      | 01, 02, ..., 12                   |\n * | Day of month                    | d       | 1, 2, ..., 31                     |\n * |                                 | dd      | 01, 02, ..., 31                   |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |\n * |                                 | hh      | 01, 02, ..., 11, 12               |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |\n * |                                 | HH      | 00, 01, 02, ..., 23               |\n * | Minute                          | m       | 0, 1, ..., 59                     |\n * |                                 | mm      | 00, 01, ..., 59                   |\n * | Second                          | s       | 0, 1, ..., 59                     |\n * |                                 | ss      | 00, 01, ..., 59                   |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |\n * |                                 | SS      | 00, 01, ..., 99                   |\n * |                                 | SSS     | 000, 001, ..., 999                |\n * |                                 | SSSS    | ...                               |\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * const result = lightFormat(new Date(2014, 1, 11), 'yyyy-MM-dd')\n * //=> '2014-02-11'\n */\n\nexport default function lightFormat(dirtyDate, formatStr) {\n  requiredArgs(2, arguments);\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n  var utcDate = subMilliseconds(originalDate, timezoneOffset);\n  var tokens = formatStr.match(formattingTokensRegExp);\n\n  // The only case when formattingTokensRegExp doesn't match the string is when it's empty\n  if (!tokens) return '';\n  var result = tokens.map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return \"'\";\n    }\n    var firstCharacter = substring[0];\n    if (firstCharacter === \"'\") {\n      return cleanEscapedString(substring);\n    }\n    var formatter = formatters[firstCharacter];\n    if (formatter) {\n      return formatter(utcDate, substring);\n    }\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n    }\n    return substring;\n  }).join('');\n  return result;\n}\nfunction cleanEscapedString(input) {\n  var matches = input.match(escapedStringRegExp);\n  if (!matches) {\n    return input;\n  }\n  return matches[1].replace(doubleQuoteRegExp, \"'\");\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n// Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n// 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\nvar daysInYear = 365.2425;\n\n/**\n * @name milliseconds\n * @category Millisecond Helpers\n * @summary\n * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds.\n *\n * @description\n * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * One month is a year divided by 12.\n *\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // 1 year in milliseconds\n * milliseconds({ years: 1 })\n * //=> 31556952000\n *\n * // 3 months in milliseconds\n * milliseconds({ months: 3 })\n * //=> 7889238000\n */\nexport default function milliseconds(_ref) {\n  var years = _ref.years,\n    months = _ref.months,\n    weeks = _ref.weeks,\n    days = _ref.days,\n    hours = _ref.hours,\n    minutes = _ref.minutes,\n    seconds = _ref.seconds;\n  requiredArgs(1, arguments);\n  var totalDays = 0;\n  if (years) totalDays += years * daysInYear;\n  if (months) totalDays += months * (daysInYear / 12);\n  if (weeks) totalDays += weeks * 7;\n  if (days) totalDays += days;\n  var totalSeconds = totalDays * 24 * 60 * 60;\n  if (hours) totalSeconds += hours * 60 * 60;\n  if (minutes) totalSeconds += minutes * 60;\n  if (seconds) totalSeconds += seconds;\n  return Math.round(totalSeconds * 1000);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInHour } from \"../constants/index.js\";\n/**\n * @name millisecondsToHours\n * @category Conversion Helpers\n * @summary Convert milliseconds to hours.\n *\n * @description\n * Convert a number of milliseconds to a full number of hours.\n *\n * @param {number} milliseconds - number of milliseconds to be converted\n *\n * @returns {number} the number of milliseconds converted in hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 7200000 milliseconds to hours:\n * const result = millisecondsToHours(7200000)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = millisecondsToHours(7199999)\n * //=> 1\n */\nexport default function millisecondsToHours(milliseconds) {\n  requiredArgs(1, arguments);\n  var hours = milliseconds / millisecondsInHour;\n  return Math.floor(hours);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInMinute } from \"../constants/index.js\";\n/**\n * @name millisecondsToMinutes\n * @category Conversion Helpers\n * @summary Convert milliseconds to minutes.\n *\n * @description\n * Convert a number of milliseconds to a full number of minutes.\n *\n * @param {number} milliseconds - number of milliseconds to be converted.\n *\n * @returns {number} the number of milliseconds converted in minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 60000 milliseconds to minutes:\n * const result = millisecondsToMinutes(60000)\n * //=> 1\n *\n * @example\n * // It uses floor rounding:\n * const result = millisecondsToMinutes(119999)\n * //=> 1\n */\nexport default function millisecondsToMinutes(milliseconds) {\n  requiredArgs(1, arguments);\n  var minutes = milliseconds / millisecondsInMinute;\n  return Math.floor(minutes);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInSecond } from \"../constants/index.js\";\n/**\n * @name millisecondsToSeconds\n * @category Conversion Helpers\n * @summary Convert milliseconds to seconds.\n *\n * @description\n * Convert a number of milliseconds to a full number of seconds.\n *\n * @param {number} milliseconds - number of milliseconds to be converted\n *\n * @returns {number} the number of milliseconds converted in seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 1000 miliseconds to seconds:\n * const result = millisecondsToSeconds(1000)\n * //=> 1\n *\n * @example\n * // It uses floor rounding:\n * const result = millisecondsToSeconds(1999)\n * //=> 1\n */\nexport default function millisecondsToSeconds(milliseconds) {\n  requiredArgs(1, arguments);\n  var seconds = milliseconds / millisecondsInSecond;\n  return Math.floor(seconds);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { minutesInHour } from \"../constants/index.js\";\n/**\n * @name minutesToHours\n * @category Conversion Helpers\n * @summary Convert minutes to hours.\n *\n * @description\n * Convert a number of minutes to a full number of hours.\n *\n * @param {number} minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 140 minutes to hours:\n * const result = minutesToHours(120)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = minutesToHours(179)\n * //=> 2\n */\nexport default function minutesToHours(minutes) {\n  requiredArgs(1, arguments);\n  var hours = minutes / minutesInHour;\n  return Math.floor(hours);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInMinute } from \"../constants/index.js\";\n/**\n * @name minutesToMilliseconds\n * @category Conversion Helpers\n * @summary Convert minutes to milliseconds.\n *\n * @description\n * Convert a number of minutes to a full number of milliseconds.\n *\n * @param {number} minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 minutes to milliseconds\n * const result = minutesToMilliseconds(2)\n * //=> 120000\n */\nexport default function minutesToMilliseconds(minutes) {\n  requiredArgs(1, arguments);\n  return Math.floor(minutes * millisecondsInMinute);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInMinute } from \"../constants/index.js\";\n/**\n * @name minutesToSeconds\n * @category Conversion Helpers\n * @summary Convert minutes to seconds.\n *\n * @description\n * Convert a number of minutes to a full number of seconds.\n *\n * @param { number } minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 minutes to seconds\n * const result = minutesToSeconds(2)\n * //=> 120\n */\nexport default function minutesToSeconds(minutes) {\n  requiredArgs(1, arguments);\n  return Math.floor(minutes * secondsInMinute);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInQuarter } from \"../constants/index.js\";\n/**\n * @name monthsToQuarters\n * @category Conversion Helpers\n * @summary Convert number of months to quarters.\n *\n * @description\n * Convert a number of months to a full number of quarters.\n *\n * @param {number} months - number of months to be converted.\n *\n * @returns {number} the number of months converted in quarters\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 6 months to quarters:\n * const result = monthsToQuarters(6)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = monthsToQuarters(7)\n * //=> 2\n */\nexport default function monthsToQuarters(months) {\n  requiredArgs(1, arguments);\n  var quarters = months / monthsInQuarter;\n  return Math.floor(quarters);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInYear } from \"../constants/index.js\";\n/**\n * @name monthsToYears\n * @category Conversion Helpers\n * @summary Convert number of months to years.\n *\n * @description\n * Convert a number of months to a full number of years.\n *\n * @param {number} months - number of months to be converted\n *\n * @returns {number} the number of months converted in years\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 36 months to years:\n * const result = monthsToYears(36)\n * //=> 3\n *\n * // It uses floor rounding:\n * const result = monthsToYears(40)\n * //=> 3\n */\nexport default function monthsToYears(months) {\n  requiredArgs(1, arguments);\n  var years = months / monthsInYear;\n  return Math.floor(years);\n}","import addDays from \"../addDays/index.js\";\nimport getDay from \"../getDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextDay\n * @category Weekday Helpers\n * @summary When is the next day of the week?\n *\n * @description\n * When is the next day of the week? 0-6 the day of the week, 0 represents Sunday.\n *\n * @param {Date | number} date - the date to check\n * @param {Day} day - day of the week\n * @returns {Date} - the date is the next day of week\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // When is the next Monday after Mar, 20, 2020?\n * const result = nextDay(new Date(2020, 2, 20), 1)\n * //=> Mon Mar 23 2020 00:00:00\n *\n * @example\n * // When is the next Tuesday after Mar, 21, 2020?\n * const result = nextDay(new Date(2020, 2, 21), 2)\n * //=> Tue Mar 24 2020 00:00:00\n */\nexport default function nextDay(date, day) {\n  requiredArgs(2, arguments);\n  var delta = day - getDay(date);\n  if (delta <= 0) delta += 7;\n  return addDays(date, delta);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextFriday\n * @category Weekday Helpers\n * @summary When is the next Friday?\n *\n * @description\n * When is the next Friday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Friday after Mar, 22, 2020?\n * const result = nextFriday(new Date(2020, 2, 22))\n * //=> Fri Mar 27 2020 00:00:00\n */\nexport default function nextFriday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 5);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextMonday\n * @category Weekday Helpers\n * @summary When is the next Monday?\n *\n * @description\n * When is the next Monday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Monday after Mar, 22, 2020?\n * const result = nextMonday(new Date(2020, 2, 22))\n * //=> Mon Mar 23 2020 00:00:00\n */\nexport default function nextMonday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 1);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextSaturday\n * @category Weekday Helpers\n * @summary When is the next Saturday?\n *\n * @description\n * When is the next Saturday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Saturday after Mar, 22, 2020?\n * const result = nextSaturday(new Date(2020, 2, 22))\n * //=> Sat Mar 28 2020 00:00:00\n */\nexport default function nextSaturday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 6);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextSunday\n * @category Weekday Helpers\n * @summary When is the next Sunday?\n *\n * @description\n * When is the next Sunday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Sunday after Mar, 22, 2020?\n * const result = nextSunday(new Date(2020, 2, 22))\n * //=> Sun Mar 29 2020 00:00:00\n */\nexport default function nextSunday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 0);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextThursday\n * @category Weekday Helpers\n * @summary When is the next Thursday?\n *\n * @description\n * When is the next Thursday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Thursday after Mar, 22, 2020?\n * const result = nextThursday(new Date(2020, 2, 22))\n * //=> Thur Mar 26 2020 00:00:00\n */\nexport default function nextThursday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 4);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextTuesday\n * @category Weekday Helpers\n * @summary When is the next Tuesday?\n *\n * @description\n * When is the next Tuesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Tuesday after Mar, 22, 2020?\n * const result = nextTuesday(new Date(2020, 2, 22))\n * //=> Tue Mar 24 2020 00:00:00\n */\nexport default function nextTuesday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 2);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextWednesday\n * @category Weekday Helpers\n * @summary When is the next Wednesday?\n *\n * @description\n * When is the next Wednesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Wednesday after Mar, 22, 2020?\n * const result = nextWednesday(new Date(2020, 2, 22))\n * //=> Wed Mar 25 2020 00:00:00\n */\nexport default function nextWednesday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 3);\n}","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n  var _options$additionalDi;\n  requiredArgs(1, arguments);\n  var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2');\n  }\n  if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n    return new Date(NaN);\n  }\n  var dateStrings = splitDateString(argument);\n  var date;\n  if (dateStrings.date) {\n    var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n  if (!date || isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  var timestamp = date.getTime();\n  var time = 0;\n  var offset;\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) {\n      return new Date(NaN);\n    }\n  }\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) {\n      return new Date(NaN);\n    }\n  } else {\n    var dirtyDate = new Date(timestamp + time);\n    // js parsed string assuming it's in UTC timezone\n    // but we need it to be parsed in our timezone\n    // so we use utc values to build date in our timezone.\n    // Year values from 0 to 99 map to the years 1900 to 1999\n    // so set year explicitly with setFullYear.\n    var result = new Date(0);\n    result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n    result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n    return result;\n  }\n  return new Date(timestamp + time + offset);\n}\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n  var dateStrings = {};\n  var array = dateString.split(patterns.dateTimeDelimiter);\n  var timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(dateStrings.date.length, dateString.length);\n    }\n  }\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '');\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n  return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n  var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n  var captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return {\n    year: NaN,\n    restDateString: ''\n  };\n  var year = captures[1] ? parseInt(captures[1]) : null;\n  var century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length)\n  };\n}\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n  var captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n  var isWeekDate = !!captures[4];\n  var dayOfYear = parseDateUnit(captures[1]);\n  var month = parseDateUnit(captures[2]) - 1;\n  var day = parseDateUnit(captures[3]);\n  var week = parseDateUnit(captures[4]);\n  var dayOfWeek = parseDateUnit(captures[5]) - 1;\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    var date = new Date(0);\n    if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n  var captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1]);\n  var minutes = parseTimeUnit(captures[2]);\n  var seconds = parseTimeUnit(captures[3]);\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n  return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n  return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === 'Z') return 0;\n  var captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n  var sign = captures[1] === '+' ? -1 : 1;\n  var hours = parseInt(captures[2]);\n  var minutes = captures[3] && parseInt(captures[3]) || 0;\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  var date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  var fourthOfJanuaryDay = date.getUTCDay() || 7;\n  var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n  return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n  return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name parseJSON\n * @category Common Helpers\n * @summary Parse a JSON date string\n *\n * @description\n * Converts a complete ISO date string in UTC time, the typical format for transmitting\n * a date in JSON, to a JavaScript `Date` instance.\n *\n * This is a minimal implementation for converting dates retrieved from a JSON API to\n * a `Date` instance which can be used with other functions in the `date-fns` library.\n * The following formats are supported:\n *\n * - `2000-03-15T05:20:10.123Z`: The output of `.toISOString()` and `JSON.stringify(new Date())`\n * - `2000-03-15T05:20:10Z`: Without milliseconds\n * - `2000-03-15T05:20:10+00:00`: With a zero offset, the default JSON encoded format in some other languages\n * - `2000-03-15T05:20:10+05:45`: With a positive or negative offset, the default JSON encoded format in some other languages\n * - `2000-03-15T05:20:10+0000`: With a zero offset without a colon\n * - `2000-03-15T05:20:10`: Without a trailing 'Z' symbol\n * - `2000-03-15T05:20:10.1234567`: Up to 7 digits in milliseconds field. Only first 3 are taken into account since JS does not allow fractional milliseconds\n * - `2000-03-15 05:20:10`: With a space instead of a 'T' separator for APIs returning a SQL date without reformatting\n *\n * For convenience and ease of use these other input types are also supported\n * via [toDate]{@link https://date-fns.org/docs/toDate}:\n *\n * - A `Date` instance will be cloned\n * - A `number` will be treated as a timestamp\n *\n * Any other input type or invalid date strings will return an `Invalid Date`.\n *\n * @param {String|Number|Date} argument A fully formed ISO8601 date string to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n */\nexport default function parseJSON(argument) {\n  requiredArgs(1, arguments);\n  if (typeof argument === 'string') {\n    var parts = argument.match(/(\\d{4})-(\\d{2})-(\\d{2})[T ](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{0,7}))?(?:Z|(.)(\\d{2}):?(\\d{2})?)?/);\n    if (parts) {\n      // Group 8 matches the sign\n      return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4] - (+parts[9] || 0) * (parts[8] == '-' ? -1 : 1), +parts[5] - (+parts[10] || 0) * (parts[8] == '-' ? -1 : 1), +parts[6], +((parts[7] || '0') + '00').substring(0, 3)));\n    }\n    return new Date(NaN);\n  }\n  return toDate(argument);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport getDay from \"../getDay/index.js\";\nimport subDays from \"../subDays/index.js\";\n/**\n * @name previousDay\n * @category Weekday Helpers\n * @summary When is the previous day of the week?\n *\n * @description\n * When is the previous day of the week? 0-6 the day of the week, 0 represents Sunday.\n *\n * @param {Date | number} date - the date to check\n * @param {number} day - day of the week\n * @returns {Date} - the date is the previous day of week\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // When is the previous Monday before Mar, 20, 2020?\n * const result = previousDay(new Date(2020, 2, 20), 1)\n * //=> Mon Mar 16 2020 00:00:00\n *\n * @example\n * // When is the previous Tuesday before Mar, 21, 2020?\n * const result = previousDay(new Date(2020, 2, 21), 2)\n * //=> Tue Mar 17 2020 00:00:00\n */\nexport default function previousDay(date, day) {\n  requiredArgs(2, arguments);\n  var delta = getDay(date) - day;\n  if (delta <= 0) delta += 7;\n  return subDays(date, delta);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousFriday\n * @category Weekday Helpers\n * @summary When is the previous Friday?\n *\n * @description\n * When is the previous Friday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Friday before Jun, 19, 2021?\n * const result = previousFriday(new Date(2021, 5, 19))\n * //=> Fri June 18 2021 00:00:00\n */\nexport default function previousFriday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 5);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousMonday\n * @category Weekday Helpers\n * @summary When is the previous Monday?\n *\n * @description\n * When is the previous Monday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Monday before Jun, 18, 2021?\n * const result = previousMonday(new Date(2021, 5, 18))\n * //=> Mon June 14 2021 00:00:00\n */\nexport default function previousMonday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 1);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousSaturday\n * @category Weekday Helpers\n * @summary When is the previous Saturday?\n *\n * @description\n * When is the previous Saturday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Saturday before Jun, 20, 2021?\n * const result = previousSaturday(new Date(2021, 5, 20))\n * //=> Sat June 19 2021 00:00:00\n */\nexport default function previousSaturday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 6);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousSunday\n * @category Weekday Helpers\n * @summary When is the previous Sunday?\n *\n * @description\n * When is the previous Sunday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Sunday before Jun, 21, 2021?\n * const result = previousSunday(new Date(2021, 5, 21))\n * //=> Sun June 20 2021 00:00:00\n */\nexport default function previousSunday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 0);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousThursday\n * @category Weekday Helpers\n * @summary When is the previous Thursday?\n *\n * @description\n * When is the previous Thursday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Thursday before Jun, 18, 2021?\n * const result = previousThursday(new Date(2021, 5, 18))\n * //=> Thu June 17 2021 00:00:00\n */\nexport default function previousThursday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 4);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousTuesday\n * @category Weekday Helpers\n * @summary When is the previous Tuesday?\n *\n * @description\n * When is the previous Tuesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Tuesday before Jun, 18, 2021?\n * const result = previousTuesday(new Date(2021, 5, 18))\n * //=> Tue June 15 2021 00:00:00\n */\nexport default function previousTuesday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 2);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousWednesday\n * @category Weekday Helpers\n * @summary When is the previous Wednesday?\n *\n * @description\n * When is the previous Wednesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Wednesday before Jun, 18, 2021?\n * const result = previousWednesday(new Date(2021, 5, 18))\n * //=> Wed June 16 2021 00:00:00\n */\nexport default function previousWednesday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 3);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInQuarter } from \"../constants/index.js\";\n/**\n * @name quartersToMonths\n * @category Conversion Helpers\n * @summary Convert number of quarters to months.\n *\n * @description\n * Convert a number of quarters to a full number of months.\n *\n * @param {number} quarters - number of quarters to be converted\n *\n * @returns {number} the number of quarters converted in months\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 quarters to months\n * const result = quartersToMonths(2)\n * //=> 6\n */\nexport default function quartersToMonths(quarters) {\n  requiredArgs(1, arguments);\n  return Math.floor(quarters * monthsInQuarter);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { quartersInYear } from \"../constants/index.js\";\n/**\n * @name quartersToYears\n * @category Conversion Helpers\n * @summary Convert number of quarters to years.\n *\n * @description\n * Convert a number of quarters to a full number of years.\n *\n * @param {number} quarters - number of quarters to be converted\n *\n * @returns {number} the number of quarters converted in years\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 8 quarters to years\n * const result = quartersToYears(8)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = quartersToYears(11)\n * //=> 2\n */\nexport default function quartersToYears(quarters) {\n  requiredArgs(1, arguments);\n  var years = quarters / quartersInYear;\n  return Math.floor(years);\n}","import toDate from \"../toDate/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name roundToNearestMinutes\n * @category Minute Helpers\n * @summary Rounds the given date to the nearest minute\n *\n * @description\n * Rounds the given date to the nearest minute (or number of minutes).\n * Rounds up when the given date is exactly between the nearest round minutes.\n *\n * @param {Date|Number} date - the date to round\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.nearestTo=1] - nearest number of minutes to round to. E.g. `15` to round to quarter hours.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Date} the new date rounded to the closest minute\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.nearestTo` must be between 1 and 30\n *\n * @example\n * // Round 10 July 2014 12:12:34 to nearest minute:\n * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))\n * //=> Thu Jul 10 2014 12:13:00\n *\n * @example\n * // Round 10 July 2014 12:07:30 to nearest quarter hour:\n * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34), { nearestTo: 15 })\n * // rounds up because given date is exactly between 12:00:00 and 12:15:00\n * //=> Thu Jul 10 2014 12:15:00\n */\nexport default function roundToNearestMinutes(dirtyDate, options) {\n  var _options$nearestTo;\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only none provided present');\n  }\n  var nearestTo = toInteger((_options$nearestTo = options === null || options === void 0 ? void 0 : options.nearestTo) !== null && _options$nearestTo !== void 0 ? _options$nearestTo : 1);\n  if (nearestTo < 1 || nearestTo > 30) {\n    throw new RangeError('`options.nearestTo` must be between 1 and 30');\n  }\n  var date = toDate(dirtyDate);\n  var seconds = date.getSeconds(); // relevant if nearestTo is 1, which is the default case\n  var minutes = date.getMinutes() + seconds / 60;\n  var roundingMethod = getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod);\n  var roundedMinutes = roundingMethod(minutes / nearestTo) * nearestTo;\n  var remainderMinutes = minutes % nearestTo;\n  var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo;\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), roundedMinutes + addedMinutes);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInHour } from \"../constants/index.js\";\n/**\n * @name secondsToHours\n * @category Conversion Helpers\n * @summary Convert seconds to hours.\n *\n * @description\n * Convert a number of seconds to a full number of hours.\n *\n * @param {number} seconds - number of seconds to be converted\n *\n * @returns {number} the number of seconds converted in hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 7200 seconds into hours\n * const result = secondsToHours(7200)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = secondsToHours(7199)\n * //=> 1\n */\nexport default function secondsToHours(seconds) {\n  requiredArgs(1, arguments);\n  var hours = seconds / secondsInHour;\n  return Math.floor(hours);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInSecond } from \"../constants/index.js\";\n/**\n * @name secondsToMilliseconds\n * @category Conversion Helpers\n * @summary Convert seconds to milliseconds.\n *\n * @description\n * Convert a number of seconds to a full number of milliseconds.\n *\n * @param {number} seconds - number of seconds to be converted\n *\n * @returns {number} the number of seconds converted in milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 seconds into milliseconds\n * const result = secondsToMilliseconds(2)\n * //=> 2000\n */\nexport default function secondsToMilliseconds(seconds) {\n  requiredArgs(1, arguments);\n  return seconds * millisecondsInSecond;\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInMinute } from \"../constants/index.js\";\n/**\n * @name secondsToMinutes\n * @category Conversion Helpers\n * @summary Convert seconds to minutes.\n *\n * @description\n * Convert a number of seconds to a full number of minutes.\n *\n * @param {number} seconds - number of seconds to be converted\n *\n * @returns {number} the number of seconds converted in minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 120 seconds into minutes\n * const result = secondsToMinutes(120)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = secondsToMinutes(119)\n * //=> 1\n */\nexport default function secondsToMinutes(seconds) {\n  requiredArgs(1, arguments);\n  var minutes = seconds / secondsInMinute;\n  return Math.floor(minutes);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var month = toInteger(dirtyMonth);\n  var year = date.getFullYear();\n  var day = date.getDate();\n  var dateWithDesiredMonth = new Date(0);\n  dateWithDesiredMonth.setFullYear(year, month, 15);\n  dateWithDesiredMonth.setHours(0, 0, 0, 0);\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth);\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(month, Math.min(day, daysInMonth));\n  return date;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport setMonth from \"../setMonth/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name set\n * @category Common Helpers\n * @summary Set date values to a given date.\n *\n * @description\n * Set date values to a given date.\n *\n * Sets time values to date from object `values`.\n * A value is not set if it is undefined or null or doesn't exist in `values`.\n *\n * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts\n * to use native `Date#setX` methods. If you use this function, you may not want to include the\n * other `setX` functions that date-fns provides if you are concerned about the bundle size.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Object} values - an object with options\n * @param {Number} [values.year] - the number of years to be set\n * @param {Number} [values.month] - the number of months to be set\n * @param {Number} [values.date] - the number of days to be set\n * @param {Number} [values.hours] - the number of hours to be set\n * @param {Number} [values.minutes] - the number of minutes to be set\n * @param {Number} [values.seconds] - the number of seconds to be set\n * @param {Number} [values.milliseconds] - the number of milliseconds to be set\n * @returns {Date} the new date with options set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `values` must be an object\n *\n * @example\n * // Transform 1 September 2014 into 20 October 2015 in a single line:\n * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 })\n * //=> Tue Oct 20 2015 00:00:00\n *\n * @example\n * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00:\n * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 })\n * //=> Mon Sep 01 2014 12:23:45\n */\nexport default function set(dirtyDate, values) {\n  requiredArgs(2, arguments);\n  if (_typeof(values) !== 'object' || values === null) {\n    throw new RangeError('values parameter must be an object');\n  }\n  var date = toDate(dirtyDate);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  if (values.year != null) {\n    date.setFullYear(values.year);\n  }\n  if (values.month != null) {\n    date = setMonth(date, values.month);\n  }\n  if (values.date != null) {\n    date.setDate(toInteger(values.date));\n  }\n  if (values.hours != null) {\n    date.setHours(toInteger(values.hours));\n  }\n  if (values.minutes != null) {\n    date.setMinutes(toInteger(values.minutes));\n  }\n  if (values.seconds != null) {\n    date.setSeconds(toInteger(values.seconds));\n  }\n  if (values.milliseconds != null) {\n    date.setMilliseconds(toInteger(values.milliseconds));\n  }\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * const result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dayOfMonth = toInteger(dirtyDayOfMonth);\n  date.setDate(dayOfMonth);\n  return date;\n}","import addDays from \"../addDays/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setDay(dirtyDate, dirtyDay, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = date.getDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var delta = 7 - weekStartsOn;\n  var diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7;\n  return addDays(date, diff);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDayOfYear\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * const result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nexport default function setDayOfYear(dirtyDate, dirtyDayOfYear) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dayOfYear = toInteger(dirtyDayOfYear);\n  date.setMonth(0);\n  date.setDate(dayOfYear);\n  return date;\n}","import { getDefaultOptions, setDefaultOptions as setInternalDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDefaultOptions\n * @category Common Helpers\n * @summary Set default options including locale.\n * @pure false\n *\n * @description\n * Sets the defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * @param {Object} newOptions - an object with options.\n * @param {Locale} [newOptions.locale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [newOptions.weekStartsOn] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [newOptions.firstWeekContainsDate] - the day of January, which is always in the first week of the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Set global locale:\n * import { es } from 'date-fns/locale'\n * setDefaultOptions({ locale: es })\n * const result = format(new Date(2014, 8, 2), 'PPPP')\n * //=> 'martes, 2 de septiembre de 2014'\n *\n * @example\n * // Start of the week for 2 September 2014:\n * const result = startOfWeek(new Date(2014, 8, 2))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Start of the week for 2 September 2014,\n * // when we set that week starts on Monday by default:\n * setDefaultOptions({ weekStartsOn: 1 })\n * const result = startOfWeek(new Date(2014, 8, 2))\n * //=> Mon Sep 01 2014 00:00:00\n *\n * @example\n * // Manually set options take priority over default options:\n * setDefaultOptions({ weekStartsOn: 1 })\n * const result = startOfWeek(new Date(2014, 8, 2), { weekStartsOn: 0 })\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Remove the option by setting it to `undefined`:\n * setDefaultOptions({ weekStartsOn: 1 })\n * setDefaultOptions({ weekStartsOn: undefined })\n * const result = startOfWeek(new Date(2014, 8, 2))\n * //=> Sun Aug 31 2014 00:00:00\n */\nexport default function setDefaultOptions(newOptions) {\n  requiredArgs(1, arguments);\n  var result = {};\n  var defaultOptions = getDefaultOptions();\n  for (var property in defaultOptions) {\n    if (Object.prototype.hasOwnProperty.call(defaultOptions, property)) {\n      ;\n      result[property] = defaultOptions[property];\n    }\n  }\n  for (var _property in newOptions) {\n    if (Object.prototype.hasOwnProperty.call(newOptions, _property)) {\n      if (newOptions[_property] === undefined) {\n        delete result[_property];\n      } else {\n        ;\n        result[_property] = newOptions[_property];\n      }\n    }\n  }\n  setInternalDefaultOptions(result);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport default function setHours(dirtyDate, dirtyHours) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var hours = toInteger(dirtyHours);\n  date.setHours(hours);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport getISODay from \"../getISODay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setISODay(dirtyDate, dirtyDay) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = getISODay(date);\n  var diff = day - currentDay;\n  return addDays(date, diff);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getISOWeek from \"../getISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setISOWeek(dirtyDate, dirtyISOWeek) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeek = toInteger(dirtyISOWeek);\n  var diff = getISOWeek(date) - isoWeek;\n  date.setDate(date.getDate() - diff * 7);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * const result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var milliseconds = toInteger(dirtyMilliseconds);\n  date.setMilliseconds(milliseconds);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var minutes = toInteger(dirtyMinutes);\n  date.setMinutes(minutes);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport setMonth from \"../setMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * const result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport default function setQuarter(dirtyDate, dirtyQuarter) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var quarter = toInteger(dirtyQuarter);\n  var oldQuarter = Math.floor(date.getMonth() / 3) + 1;\n  var diff = quarter - oldQuarter;\n  return setMonth(date, date.getMonth() + diff * 3);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var seconds = toInteger(dirtySeconds);\n  date.setSeconds(seconds);\n  return date;\n}","import getWeek from \"../getWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} week - the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport default function setWeek(dirtyDate, dirtyWeek, options) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var week = toInteger(dirtyWeek);\n  var diff = getWeek(date, options) - week;\n  date.setDate(date.getDate() - diff * 7);\n  return date;\n}","import differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport startOfWeekYear from \"../startOfWeekYear/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name setWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Set the local week-numbering year to the given date.\n *\n * @description\n * Set the local week-numbering year to the given date,\n * saving the week number and the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} weekYear - the local week-numbering year of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week-numbering year set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010 with default options:\n * const result = setWeekYear(new Date(2010, 0, 2), 2004)\n * //=> Sat Jan 03 2004 00:00:00\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010,\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = setWeekYear(new Date(2010, 0, 2), 2004, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setWeekYear(dirtyDate, dirtyWeekYear, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var date = toDate(dirtyDate);\n  var weekYear = toInteger(dirtyWeekYear);\n  var diff = differenceInCalendarDays(date, startOfWeekYear(date, options));\n  var firstWeek = new Date(0);\n  firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  date = startOfWeekYear(firstWeek, options);\n  date.setDate(date.getDate() + diff);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var year = toInteger(dirtyYear);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  date.setFullYear(year);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDecade\n * @category Decade Helpers\n * @summary Return the start of a decade for the given date.\n *\n * @description\n * Return the start of a decade for the given date.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a decade for 21 October 2015 00:00:00:\n * const result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))\n * //=> Jan 01 2010 00:00:00\n */\nexport default function startOfDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = Math.floor(year / 10) * 10;\n  date.setFullYear(decade, 0, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import startOfDay from \"../startOfDay/index.js\";\n/**\n * @name startOfToday\n * @category Day Helpers\n * @summary Return the start of today.\n * @pure false\n *\n * @description\n * Return the start of today.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the start of today\n *\n * @example\n * // If today is 6 October 2014:\n * const result = startOfToday()\n * //=> Mon Oct 6 2014 00:00:00\n */\nexport default function startOfToday() {\n  return startOfDay(Date.now());\n}","/**\n * @name startOfTomorrow\n * @category Day Helpers\n * @summary Return the start of tomorrow.\n * @pure false\n *\n * @description\n * Return the start of tomorrow.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the start of tomorrow\n *\n * @example\n * // If today is 6 October 2014:\n * const result = startOfTomorrow()\n * //=> Tue Oct 7 2014 00:00:00\n */\nexport default function startOfTomorrow() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day + 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","/**\n * @name startOfYesterday\n * @category Day Helpers\n * @summary Return the start of yesterday.\n * @pure false\n *\n * @description\n * Return the start of yesterday.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the start of yesterday\n *\n * @example\n * // If today is 6 October 2014:\n * const result = startOfYesterday()\n * //=> Sun Oct 5 2014 00:00:00\n */\nexport default function startOfYesterday() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day - 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, -amount);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be subtracted\n *\n * | Key     | Description                        |\n * |---------|------------------------------------|\n * | years   | Amount of years to be subtracted   |\n * | months  | Amount of months to be subtracted  |\n * | weeks   | Amount of weeks to be subtracted   |\n * | days    | Amount of days to be subtracted    |\n * | hours   | Amount of hours to be subtracted   |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n *   years: 2,\n *   months: 9,\n *   weeks: 1,\n *   days: 7,\n *   hours: 5,\n *   minutes: 9,\n *   seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\nexport default function sub(date, duration) {\n  requiredArgs(2, arguments);\n  if (!duration || _typeof(duration) !== 'object') return new Date(NaN);\n  var years = duration.years ? toInteger(duration.years) : 0;\n  var months = duration.months ? toInteger(duration.months) : 0;\n  var weeks = duration.weeks ? toInteger(duration.weeks) : 0;\n  var days = duration.days ? toInteger(duration.days) : 0;\n  var hours = duration.hours ? toInteger(duration.hours) : 0;\n  var minutes = duration.minutes ? toInteger(duration.minutes) : 0;\n  var seconds = duration.seconds ? toInteger(duration.seconds) : 0;\n\n  // Subtract years and months\n  var dateWithoutMonths = subMonths(date, months + years * 12);\n\n  // Subtract weeks and days\n  var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7);\n\n  // Subtract hours, minutes and seconds\n  var minutestoSub = minutes + hours * 60;\n  var secondstoSub = seconds + minutestoSub * 60;\n  var mstoSub = secondstoSub * 1000;\n  var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n  return finalDate;\n}","import addBusinessDays from \"../addBusinessDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subBusinessDays\n * @category Day Helpers\n * @summary Substract the specified number of business days (mon - fri) to the given date.\n *\n * @description\n * Substract the specified number of business days (mon - fri) to the given date, ignoring weekends.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of business days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the business days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Substract 10 business days from 1 September 2014:\n * const result = subBusinessDays(new Date(2014, 8, 1), 10)\n * //=> Mon Aug 18 2014 00:00:00 (skipped weekend days)\n */\nexport default function subBusinessDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addBusinessDays(dirtyDate, -amount);\n}","import addHours from \"../addHours/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * const result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport default function subHours(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addHours(dirtyDate, -amount);\n}","import addMinutes from \"../addMinutes/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMinutes(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addQuarters from \"../addQuarters/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the quarters subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * const result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport default function subQuarters(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addQuarters(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addSeconds from \"../addSeconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subSeconds\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * const result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nexport default function subSeconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addSeconds(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addWeeks from \"../addWeeks/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport default function subWeeks(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addWeeks(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addYears(dirtyDate, -amount);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { daysInWeek } from \"../constants/index.js\";\n/**\n * @name weeksToDays\n * @category Conversion Helpers\n * @summary Convert weeks to days.\n *\n * @description\n * Convert a number of weeks to a full number of days.\n *\n * @param {number} weeks - number of weeks to be converted\n *\n * @returns {number} the number of weeks converted in days\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 weeks into days\n * const result = weeksToDays(2)\n * //=> 14\n */\nexport default function weeksToDays(weeks) {\n  requiredArgs(1, arguments);\n  return Math.floor(weeks * daysInWeek);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInYear } from \"../constants/index.js\";\n/**\n * @name yearsToMonths\n * @category Conversion Helpers\n * @summary Convert years to months.\n *\n * @description\n * Convert a number of years to a full number of months.\n *\n * @param {number} years - number of years to be converted\n *\n * @returns {number} the number of years converted in months\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 years into months\n * const result = yearsToMonths(2)\n * //=> 24\n */\nexport default function yearsToMonths(years) {\n  requiredArgs(1, arguments);\n  return Math.floor(years * monthsInYear);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { quartersInYear } from \"../constants/index.js\";\n/**\n * @name yearsToQuarters\n * @category Conversion Helpers\n * @summary Convert years to quarters.\n *\n * @description\n * Convert a number of years to a full number of quarters.\n *\n * @param {number} years - number of years to be converted\n *\n * @returns {number} the number of years converted in quarters\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 years to quarters\n * const result = yearsToQuarters(2)\n * //=> 8\n */\nexport default function yearsToQuarters(years) {\n  requiredArgs(1, arguments);\n  return Math.floor(years * quartersInYear);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  return date.getTime() > dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  return date.getTime() < dateToCompare.getTime();\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n  requiredArgs(1, arguments);\n  return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n  var dateRightStartOfDay = startOfDay(dirtyDateRight);\n  return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n  requiredArgs(1, arguments);\n  if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n    return false;\n  }\n  var date = toDate(dirtyDate);\n  return !isNaN(Number(date));\n}","export default function buildFormatLongFn(args) {\n  return function () {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO: Remove String()\n    var width = options.width ? String(options.width) : args.defaultWidth;\n    var format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}","export default function buildLocalizeFn(args) {\n  return function (dirtyIndex, options) {\n    var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n    var valuesArray;\n    if (context === 'formatting' && args.formattingValues) {\n      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      var _defaultWidth = args.defaultWidth;\n      var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n      valuesArray = args.values[_width] || args.values[_defaultWidth];\n    }\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n    // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}","export default function buildMatchFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var width = options.width;\n    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n    var matchResult = string.match(matchPattern);\n    if (!matchResult) {\n      return null;\n    }\n    var matchedString = matchResult[0];\n    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    }) : findKey(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    });\n    var value;\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}\nfunction findKey(object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\nfunction findIndex(array, predicate) {\n  for (var key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}","export default function buildMatchPatternFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    var matchedString = matchResult[0];\n    var parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n  halfAMinute: 'half a minute',\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n  aboutXWeeks: {\n    one: 'about 1 week',\n    other: 'about {{count}} weeks'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weeks'\n  },\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'in ' + result;\n    } else {\n      return result + ' ago';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st';\n      case 2:\n        return number + 'nd';\n      case 3:\n        return number + 'rd';\n    }\n  }\n  return number + 'th';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  code: 'en-US',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"minder as 'n sekonde\",\n    other: 'minder as {{count}} sekondes'\n  },\n  xSeconds: {\n    one: '1 sekonde',\n    other: '{{count}} sekondes'\n  },\n  halfAMinute: \"'n halwe minuut\",\n  lessThanXMinutes: {\n    one: \"minder as 'n minuut\",\n    other: 'minder as {{count}} minute'\n  },\n  xMinutes: {\n    one: \"'n minuut\",\n    other: '{{count}} minute'\n  },\n  aboutXHours: {\n    one: 'ongeveer 1 uur',\n    other: 'ongeveer {{count}} ure'\n  },\n  xHours: {\n    one: '1 uur',\n    other: '{{count}} ure'\n  },\n  xDays: {\n    one: '1 dag',\n    other: '{{count}} dae'\n  },\n  aboutXWeeks: {\n    one: 'ongeveer 1 week',\n    other: 'ongeveer {{count}} weke'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weke'\n  },\n  aboutXMonths: {\n    one: 'ongeveer 1 maand',\n    other: 'ongeveer {{count}} maande'\n  },\n  xMonths: {\n    one: '1 maand',\n    other: '{{count}} maande'\n  },\n  aboutXYears: {\n    one: 'ongeveer 1 jaar',\n    other: 'ongeveer {{count}} jaar'\n  },\n  xYears: {\n    one: '1 jaar',\n    other: '{{count}} jaar'\n  },\n  overXYears: {\n    one: 'meer as 1 jaar',\n    other: 'meer as {{count}} jaar'\n  },\n  almostXYears: {\n    one: 'byna 1 jaar',\n    other: 'byna {{count}} jaar'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'oor ' + result;\n    } else {\n      return result + ' gelede';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'yyyy/MM/dd'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'om' {{time}}\",\n  long: \"{{date}} 'om' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'verlede' eeee 'om' p\",\n  yesterday: \"'gister om' p\",\n  today: \"'vandag om' p\",\n  tomorrow: \"'môre om' p\",\n  nextWeek: \"eeee 'om' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['vC', 'nC'],\n  abbreviated: ['vC', 'nC'],\n  wide: ['voor Christus', 'na Christus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1ste kwartaal', '2de kwartaal', '3de kwartaal', '4de kwartaal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],\n  wide: ['Januarie', 'Februarie', 'Maart', 'April', 'Mei', 'Junie', 'Julie', 'Augustus', 'September', 'Oktober', 'November', 'Desember']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'D', 'W', 'D', 'V', 'S'],\n  short: ['So', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Sa'],\n  abbreviated: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],\n  wide: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'vm',\n    pm: 'nm',\n    midnight: 'middernag',\n    noon: 'middaguur',\n    morning: 'oggend',\n    afternoon: 'middag',\n    evening: 'laat middag',\n    night: 'aand'\n  },\n  abbreviated: {\n    am: 'vm',\n    pm: 'nm',\n    midnight: 'middernag',\n    noon: 'middaguur',\n    morning: 'oggend',\n    afternoon: 'middag',\n    evening: 'laat middag',\n    night: 'aand'\n  },\n  wide: {\n    am: 'vm',\n    pm: 'nm',\n    midnight: 'middernag',\n    noon: 'middaguur',\n    morning: 'oggend',\n    afternoon: 'middag',\n    evening: 'laat middag',\n    night: 'aand'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'vm',\n    pm: 'nm',\n    midnight: 'middernag',\n    noon: 'uur die middag',\n    morning: 'uur die oggend',\n    afternoon: 'uur die middag',\n    evening: 'uur die aand',\n    night: 'uur die aand'\n  },\n  abbreviated: {\n    am: 'vm',\n    pm: 'nm',\n    midnight: 'middernag',\n    noon: 'uur die middag',\n    morning: 'uur die oggend',\n    afternoon: 'uur die middag',\n    evening: 'uur die aand',\n    night: 'uur die aand'\n  },\n  wide: {\n    am: 'vm',\n    pm: 'nm',\n    midnight: 'middernag',\n    noon: 'uur die middag',\n    morning: 'uur die oggend',\n    afternoon: 'uur die middag',\n    evening: 'uur die aand',\n    night: 'uur die aand'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  var number = Number(dirtyNumber);\n  var rem100 = number % 100;\n  if (rem100 < 20) {\n    switch (rem100) {\n      case 1:\n      case 8:\n        return number + 'ste';\n      default:\n        return number + 'de';\n    }\n  }\n  return number + 'ste';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Afrikaans locale.\n * @language Afrikaans\n * @iso-639-2 afr\n * @author Marnus Weststrate [@marnusw]{@link https://github.com/marnusw}\n */\nvar locale = {\n  code: 'af',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(ste|de)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^([vn]\\.? ?C\\.?)/,\n  abbreviated: /^([vn]\\. ?C\\.?)/,\n  wide: /^((voor|na) Christus)/\n};\nvar parseEraPatterns = {\n  any: [/^v/, /^n/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^K[1234]/i,\n  wide: /^[1234](st|d)e kwartaal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(Jan|Feb|Mrt|Apr|Mei|Jun|Jul|Aug|Sep|Okt|Nov|Dec)\\.?/i,\n  wide: /^(Januarie|Februarie|Maart|April|Mei|Junie|Julie|Augustus|September|Oktober|November|Desember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^J/i, /^F/i, /^M/i, /^A/i, /^M/i, /^J/i, /^J/i, /^A/i, /^S/i, /^O/i, /^N/i, /^D/i],\n  any: [/^Jan/i, /^Feb/i, /^Mrt/i, /^Apr/i, /^Mei/i, /^Jun/i, /^Jul/i, /^Aug/i, /^Sep/i, /^Okt/i, /^Nov/i, /^Dec/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smdwv]/i,\n  short: /^(So|Ma|Di|Wo|Do|Vr|Sa)/i,\n  abbreviated: /^(Son|Maa|Din|Woe|Don|Vry|Sat)/i,\n  wide: /^(Sondag|Maandag|Dinsdag|Woensdag|Donderdag|Vrydag|Saterdag)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^S/i, /^M/i, /^D/i, /^W/i, /^D/i, /^V/i, /^S/i],\n  any: [/^So/i, /^Ma/i, /^Di/i, /^Wo/i, /^Do/i, /^Vr/i, /^Sa/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(vm|nm|middernag|(?:uur )?die (oggend|middag|aand))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^vm/i,\n    pm: /^nm/i,\n    midnight: /^middernag/i,\n    noon: /^middaguur/i,\n    morning: /oggend/i,\n    afternoon: /middag/i,\n    evening: /laat middag/i,\n    night: /aand/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'أقل من ثانية',\n    two: 'أقل من ثانيتين',\n    threeToTen: 'أقل من {{count}} ثواني',\n    other: 'أقل من {{count}} ثانية'\n  },\n  xSeconds: {\n    one: 'ثانية واحدة',\n    two: 'ثانيتان',\n    threeToTen: '{{count}} ثواني',\n    other: '{{count}} ثانية'\n  },\n  halfAMinute: 'نصف دقيقة',\n  lessThanXMinutes: {\n    one: 'أقل من دقيقة',\n    two: 'أقل من دقيقتين',\n    threeToTen: 'أقل من {{count}} دقائق',\n    other: 'أقل من {{count}} دقيقة'\n  },\n  xMinutes: {\n    one: 'دقيقة واحدة',\n    two: 'دقيقتان',\n    threeToTen: '{{count}} دقائق',\n    other: '{{count}} دقيقة'\n  },\n  aboutXHours: {\n    one: 'ساعة واحدة تقريباً',\n    two: 'ساعتين تقريبا',\n    threeToTen: '{{count}} ساعات تقريباً',\n    other: '{{count}} ساعة تقريباً'\n  },\n  xHours: {\n    one: 'ساعة واحدة',\n    two: 'ساعتان',\n    threeToTen: '{{count}} ساعات',\n    other: '{{count}} ساعة'\n  },\n  xDays: {\n    one: 'يوم واحد',\n    two: 'يومان',\n    threeToTen: '{{count}} أيام',\n    other: '{{count}} يوم'\n  },\n  aboutXWeeks: {\n    one: 'أسبوع واحد تقريبا',\n    two: 'أسبوعين تقريبا',\n    threeToTen: '{{count}} أسابيع تقريبا',\n    other: '{{count}} أسبوعا تقريبا'\n  },\n  xWeeks: {\n    one: 'أسبوع واحد',\n    two: 'أسبوعان',\n    threeToTen: '{{count}} أسابيع',\n    other: '{{count}} أسبوعا'\n  },\n  aboutXMonths: {\n    one: 'شهر واحد تقريباً',\n    two: 'شهرين تقريبا',\n    threeToTen: '{{count}} أشهر تقريبا',\n    other: '{{count}} شهرا تقريباً'\n  },\n  xMonths: {\n    one: 'شهر واحد',\n    two: 'شهران',\n    threeToTen: '{{count}} أشهر',\n    other: '{{count}} شهرا'\n  },\n  aboutXYears: {\n    one: 'سنة واحدة تقريباً',\n    two: 'سنتين تقريبا',\n    threeToTen: '{{count}} سنوات تقريباً',\n    other: '{{count}} سنة تقريباً'\n  },\n  xYears: {\n    one: 'سنة واحد',\n    two: 'سنتان',\n    threeToTen: '{{count}} سنوات',\n    other: '{{count}} سنة'\n  },\n  overXYears: {\n    one: 'أكثر من سنة',\n    two: 'أكثر من سنتين',\n    threeToTen: 'أكثر من {{count}} سنوات',\n    other: 'أكثر من {{count}} سنة'\n  },\n  almostXYears: {\n    one: 'ما يقارب سنة واحدة',\n    two: 'ما يقارب سنتين',\n    threeToTen: 'ما يقارب {{count}} سنوات',\n    other: 'ما يقارب {{count}} سنة'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var usageGroup = formatDistanceLocale[token];\n  var result;\n  if (typeof usageGroup === 'string') {\n    result = usageGroup;\n  } else if (count === 1) {\n    result = usageGroup.one;\n  } else if (count === 2) {\n    result = usageGroup.two;\n  } else if (count <= 10) {\n    result = usageGroup.threeToTen.replace('{{count}}', String(count));\n  } else {\n    result = usageGroup.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'خلال ' + result;\n    } else {\n      return 'منذ ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE، do MMMM y',\n  long: 'do MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss',\n  long: 'HH:mm:ss',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'عند الساعة' {{time}}\",\n  long: \"{{date}} 'عند الساعة' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'الماضي عند الساعة' p\",\n  yesterday: \"'الأمس عند الساعة' p\",\n  today: \"'اليوم عند الساعة' p\",\n  tomorrow: \"'غدا عند الساعة' p\",\n  nextWeek: \"eeee 'القادم عند الساعة' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Arabic locale (Modern Standard Arabic - Al-fussha).\n * @language Modern Standard Arabic\n * @iso-639-2 ara\n * @author Abdallah Hassan [@AbdallahAHO]{@link https://github.com/AbdallahAHO}\n * @author Koussay Haj Kacem [@essana3]{@link https://github.com/essana3}\n */\nvar locale = {\n  code: 'ar',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 6 /* Saturday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م.', 'ب.م.'],\n  wide: ['قبل الميلاد', 'بعد الميلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],\n  wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']\n};\nvar monthValues = {\n  narrow: ['ي', 'ف', 'م', 'أ', 'م', 'ي', 'ي', 'أ', 'س', 'أ', 'ن', 'د'],\n  abbreviated: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n  wide: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']\n};\nvar dayValues = {\n  narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n  short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  abbreviated: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  wide: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    morning: 'الصباح',\n    noon: 'الظهر',\n    afternoon: 'بعد الظهر',\n    evening: 'المساء',\n    night: 'الليل',\n    midnight: 'منتصف الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    morning: 'الصباح',\n    noon: 'الظهر',\n    afternoon: 'بعد الظهر',\n    evening: 'المساء',\n    night: 'الليل',\n    midnight: 'منتصف الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    morning: 'الصباح',\n    noon: 'الظهر',\n    afternoon: 'بعد الظهر',\n    evening: 'المساء',\n    night: 'الليل',\n    midnight: 'منتصف الليل'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    morning: 'في الصباح',\n    noon: 'الظهر',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل',\n    midnight: 'منتصف الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    morning: 'في الصباح',\n    noon: 'الظهر',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل',\n    midnight: 'منتصف الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    morning: 'في الصباح',\n    noon: 'الظهر',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل',\n    midnight: 'منتصف الليل'\n  }\n};\nvar ordinalNumber = function ordinalNumber(num) {\n  return String(num);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /[قب]/,\n  abbreviated: /[قب]\\.م\\./,\n  wide: /(قبل|بعد) الميلاد/\n};\nvar parseEraPatterns = {\n  any: [/قبل/, /بعد/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /ر[1234]/,\n  wide: /الربع (الأول|الثاني|الثالث|الرابع)/\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[أيفمسند]/,\n  abbreviated: /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n  wide: /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/\n};\nvar parseMonthPatterns = {\n  narrow: [/^ي/i, /^ف/i, /^م/i, /^أ/i, /^م/i, /^ي/i, /^ي/i, /^أ/i, /^س/i, /^أ/i, /^ن/i, /^د/i],\n  any: [/^يناير/i, /^فبراير/i, /^مارس/i, /^أبريل/i, /^مايو/i, /^يونيو/i, /^يوليو/i, /^أغسطس/i, /^سبتمبر/i, /^أكتوبر/i, /^نوفمبر/i, /^ديسمبر/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[حنثرخجس]/i,\n  short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n  wide: [/^الأحد/i, /^الاثنين/i, /^الثلاثاء/i, /^الأربعاء/i, /^الخميس/i, /^الجمعة/i, /^السبت/i],\n  any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,\n  any: /^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ص/,\n    pm: /^م/,\n    midnight: /منتصف الليل/,\n    noon: /الظهر/,\n    afternoon: /بعد الظهر/,\n    morning: /في الصباح/,\n    evening: /في المساء/,\n    night: /في الليل/\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'أقل من ثانية واحدة',\n    two: 'أقل من ثانتين',\n    threeToTen: 'أقل من {{count}} ثواني',\n    other: 'أقل من {{count}} ثانية'\n  },\n  xSeconds: {\n    one: 'ثانية واحدة',\n    two: 'ثانتين',\n    threeToTen: '{{count}} ثواني',\n    other: '{{count}} ثانية'\n  },\n  halfAMinute: 'نصف دقيقة',\n  lessThanXMinutes: {\n    one: 'أقل من دقيقة',\n    two: 'أقل من دقيقتين',\n    threeToTen: 'أقل من {{count}} دقائق',\n    other: 'أقل من {{count}} دقيقة'\n  },\n  xMinutes: {\n    one: 'دقيقة واحدة',\n    two: 'دقيقتين',\n    threeToTen: '{{count}} دقائق',\n    other: '{{count}} دقيقة'\n  },\n  aboutXHours: {\n    one: 'ساعة واحدة تقريباً',\n    two: 'ساعتين تقريباً',\n    threeToTen: '{{count}} ساعات تقريباً',\n    other: '{{count}} ساعة تقريباً'\n  },\n  xHours: {\n    one: 'ساعة واحدة',\n    two: 'ساعتين',\n    threeToTen: '{{count}} ساعات',\n    other: '{{count}} ساعة'\n  },\n  xDays: {\n    one: 'يوم واحد',\n    two: 'يومين',\n    threeToTen: '{{count}} أيام',\n    other: '{{count}} يوم'\n  },\n  aboutXWeeks: {\n    one: 'أسبوع واحد تقريباً',\n    two: 'أسبوعين تقريباً',\n    threeToTen: '{{count}} أسابيع تقريباً',\n    other: '{{count}} أسبوع تقريباً'\n  },\n  xWeeks: {\n    one: 'أسبوع واحد',\n    two: 'أسبوعين',\n    threeToTen: '{{count}} أسابيع',\n    other: '{{count}} أسبوع'\n  },\n  aboutXMonths: {\n    one: 'شهر واحد تقريباً',\n    two: 'شهرين تقريباً',\n    threeToTen: '{{count}} أشهر تقريباً',\n    other: '{{count}} شهر تقريباً'\n  },\n  xMonths: {\n    one: 'شهر واحد',\n    two: 'شهرين',\n    threeToTen: '{{count}} أشهر',\n    other: '{{count}} شهر'\n  },\n  aboutXYears: {\n    one: 'عام واحد تقريباً',\n    two: 'عامين تقريباً',\n    threeToTen: '{{count}} أعوام تقريباً',\n    other: '{{count}} عام تقريباً'\n  },\n  xYears: {\n    one: 'عام واحد',\n    two: 'عامين',\n    threeToTen: '{{count}} أعوام',\n    other: '{{count}} عام'\n  },\n  overXYears: {\n    one: 'أكثر من عام',\n    two: 'أكثر من عامين',\n    threeToTen: 'أكثر من {{count}} أعوام',\n    other: 'أكثر من {{count}} عام'\n  },\n  almostXYears: {\n    one: 'عام واحد تقريباً',\n    two: 'عامين تقريباً',\n    threeToTen: '{{count}} أعوام تقريباً',\n    other: '{{count}} عام تقريباً'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  var usageGroup = formatDistanceLocale[token];\n  var result;\n  if (typeof usageGroup === 'string') {\n    result = usageGroup;\n  } else if (count === 1) {\n    result = usageGroup.one;\n  } else if (count === 2) {\n    result = usageGroup.two;\n  } else if (count <= 10) {\n    result = usageGroup.threeToTen.replace('{{count}}', String(count));\n  } else {\n    result = usageGroup.other.replace('{{count}}', String(count));\n  }\n  if (options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'في خلال ' + result;\n    } else {\n      return 'منذ ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'عند' {{time}}\",\n  long: \"{{date}} 'عند' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'أخر' eeee 'عند' p\",\n  yesterday: \"'أمس عند' p\",\n  today: \"'اليوم عند' p\",\n  tomorrow: \"'غداً عند' p\",\n  nextWeek: \"eeee 'عند' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Arabic locale (Algerian Arabic).\n * @language Algerian Arabic\n * @iso-639-2 ara\n * @author Badreddine Boumaza [@badre429]{@link https://github.com/badre429}\n * @author Ahmed ElShahat [@elshahat]{@link https://github.com/elshahat}\n */\nvar locale = {\n  code: 'ar-DZ',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م.', 'ب.م.'],\n  wide: ['قبل الميلاد', 'بعد الميلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],\n  wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']\n};\nvar monthValues = {\n  narrow: ['ج', 'ف', 'م', 'أ', 'م', 'ج', 'ج', 'أ', 'س', 'أ', 'ن', 'د'],\n  abbreviated: ['جانـ', 'فيفـ', 'مارس', 'أفريل', 'مايـ', 'جوانـ', 'جويـ', 'أوت', 'سبتـ', 'أكتـ', 'نوفـ', 'ديسـ'],\n  wide: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']\n};\nvar dayValues = {\n  narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n  short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  abbreviated: ['أحد', 'اثنـ', 'ثلا', 'أربـ', 'خميـ', 'جمعة', 'سبت'],\n  wide: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظـهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظـهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ق|ب)/i,\n  abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?م\\.?\\s?|a\\.?\\s?d\\.?|c\\.?\\s?)/i,\n  wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i\n};\nvar parseEraPatterns = {\n  any: [/^قبل/i, /^بعد/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ر[1234]/i,\n  wide: /^الربع [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[جفمأسند]/i,\n  abbreviated: /^(جان|فيف|مار|أفر|ماي|جوا|جوي|أوت|سبت|أكت|نوف|ديس)/i,\n  wide: /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ج/i, /^ف/i, /^م/i, /^أ/i, /^م/i, /^ج/i, /^ج/i, /^أ/i, /^س/i, /^أ/i, /^ن/i, /^د/i],\n  any: [/^جان/i, /^فيف/i, /^مار/i, /^أفر/i, /^ماي/i, /^جوا/i, /^جوي/i, /^أوت/i, /^سبت/i, /^أكت/i, /^نوف/i, /^ديس/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[حنثرخجس]/i,\n  short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  abbreviated: /^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,\n  wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n  wide: [/^الأحد/i, /^الاثنين/i, /^الثلاثاء/i, /^الأربعاء/i, /^الخميس/i, /^الجمعة/i, /^السبت/i],\n  any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return Number(index) + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'أقل من ثانية',\n    two: 'أقل من ثانيتين',\n    threeToTen: 'أقل من {{count}} ثواني',\n    other: 'أقل من {{count}} ثانية'\n  },\n  xSeconds: {\n    one: 'ثانية',\n    two: 'ثانيتين',\n    threeToTen: '{{count}} ثواني',\n    other: '{{count}} ثانية'\n  },\n  halfAMinute: 'نص دقيقة',\n  lessThanXMinutes: {\n    one: 'أقل من دقيقة',\n    two: 'أقل من دقيقتين',\n    threeToTen: 'أقل من {{count}} دقايق',\n    other: 'أقل من {{count}} دقيقة'\n  },\n  xMinutes: {\n    one: 'دقيقة',\n    two: 'دقيقتين',\n    threeToTen: '{{count}} دقايق',\n    other: '{{count}} دقيقة'\n  },\n  aboutXHours: {\n    one: 'حوالي ساعة',\n    two: 'حوالي ساعتين',\n    threeToTen: 'حوالي {{count}} ساعات',\n    other: 'حوالي {{count}} ساعة'\n  },\n  xHours: {\n    one: 'ساعة',\n    two: 'ساعتين',\n    threeToTen: '{{count}} ساعات',\n    other: '{{count}} ساعة'\n  },\n  xDays: {\n    one: 'يوم',\n    two: 'يومين',\n    threeToTen: '{{count}} أيام',\n    other: '{{count}} يوم'\n  },\n  aboutXWeeks: {\n    one: 'حوالي أسبوع',\n    two: 'حوالي أسبوعين',\n    threeToTen: 'حوالي {{count}} أسابيع',\n    other: 'حوالي {{count}} أسبوع'\n  },\n  xWeeks: {\n    one: 'أسبوع',\n    two: 'أسبوعين',\n    threeToTen: '{{count}} أسابيع',\n    other: '{{count}} أسبوع'\n  },\n  aboutXMonths: {\n    one: 'حوالي شهر',\n    two: 'حوالي شهرين',\n    threeToTen: 'حوالي {{count}} أشهر',\n    other: 'حوالي {{count}} شهر'\n  },\n  xMonths: {\n    one: 'شهر',\n    two: 'شهرين',\n    threeToTen: '{{count}} أشهر',\n    other: '{{count}} شهر'\n  },\n  aboutXYears: {\n    one: 'حوالي سنة',\n    two: 'حوالي سنتين',\n    threeToTen: 'حوالي {{count}} سنين',\n    other: 'حوالي {{count}} سنة'\n  },\n  xYears: {\n    one: 'عام',\n    two: 'عامين',\n    threeToTen: '{{count}} أعوام',\n    other: '{{count}} عام'\n  },\n  overXYears: {\n    one: 'أكثر من سنة',\n    two: 'أكثر من سنتين',\n    threeToTen: 'أكثر من {{count}} سنين',\n    other: 'أكثر من {{count}} سنة'\n  },\n  almostXYears: {\n    one: 'عام تقريبًا',\n    two: 'عامين تقريبًا',\n    threeToTen: '{{count}} أعوام تقريبًا',\n    other: '{{count}} عام تقريبًا'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 2) {\n    result = tokenValue.two;\n  } else if (count <= 10) {\n    result = tokenValue.threeToTen.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"\\u0641\\u064A \\u062E\\u0644\\u0627\\u0644 \".concat(result);\n    } else {\n      return \"\\u0645\\u0646\\u0630 \".concat(result);\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE، do MMMM y',\n  long: 'do MMMM y',\n  medium: 'dd/MMM/y',\n  short: 'd/MM/y'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'الساعة' {{time}}\",\n  long: \"{{date}} 'الساعة' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'اللي جاي الساعة' p\",\n  yesterday: \"'إمبارح الساعة' p\",\n  today: \"'النهاردة الساعة' p\",\n  tomorrow: \"'بكرة الساعة' p\",\n  nextWeek: \"eeee 'الساعة' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Arabic locale (Egypt).\n * @language Arabic\n * @iso-639-2 ara\n * @author AbdAllah AbdElFattah [@AbdAllahAbdElFattah13]{@link https://github.com/AbdAllahAbdElFattah13}\n */\nvar locale = {\n  code: 'ar-EG',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م', 'ب.م'],\n  wide: ['قبل الميلاد', 'بعد الميلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],\n  wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']\n};\nvar monthValues = {\n  narrow: ['ي', 'ف', 'م', 'أ', 'م', 'ي', 'ي', 'أ', 'س', 'أ', 'ن', 'د'],\n  abbreviated: ['ينا', 'فبر', 'مارس', 'أبريل', 'مايو', 'يونـ', 'يولـ', 'أغسـ', 'سبتـ', 'أكتـ', 'نوفـ', 'ديسـ'],\n  wide: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']\n};\nvar dayValues = {\n  narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n  short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  abbreviated: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  wide: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءً',\n    night: 'ليلاً'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهراً',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءً',\n    night: 'ليلاً'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهراً',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءً',\n    night: 'ليلاً'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهراً',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    morning: 'في الصباح',\n    noon: 'ظهراً',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)/;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ق|ب)/g,\n  abbreviated: /^(ق.م|ب.م)/g,\n  wide: /^(قبل الميلاد|بعد الميلاد)/g\n};\nvar parseEraPatterns = {\n  any: [/^ق/g, /^ب/g]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/,\n  abbreviated: /^ر[1234]/,\n  wide: /^الربع (الأول|الثاني|الثالث|الرابع)/\n};\nvar parseQuarterPatterns = {\n  wide: [/الربع الأول/, /الربع الثاني/, /الربع الثالث/, /الربع الرابع/],\n  any: [/1/, /2/, /3/, /4/]\n};\nvar matchMonthPatterns = {\n  narrow: /^(ي|ف|م|أ|س|ن|د)/,\n  abbreviated: /^(ينا|فبر|مارس|أبريل|مايو|يونـ|يولـ|أغسـ|سبتـ|أكتـ|نوفـ|ديسـ)/,\n  wide: /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/\n};\nvar parseMonthPatterns = {\n  narrow: [/^ي/, /^ف/, /^م/, /^أ/, /^م/, /^ي/, /^ي/, /^أ/, /^س/, /^أ/, /^ن/, /^د/],\n  any: [/^ينا/, /^فبر/, /^مارس/, /^أبريل/, /^مايو/, /^يون/, /^يول/, /^أغس/, /^سبت/, /^أكت/, /^نوف/, /^ديس/]\n};\nvar matchDayPatterns = {\n  narrow: /^(ح|ن|ث|ر|خ|ج|س)/,\n  short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,\n  abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,\n  wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/\n};\nvar parseDayPatterns = {\n  narrow: [/^ح/, /^ن/, /^ث/, /^ر/, /^خ/, /^ج/, /^س/],\n  any: [/أحد/, /اثنين/, /ثلاثاء/, /أربعاء/, /خميس/, /جمعة/, /سبت/]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ص|م|ن|ظ|في الصباح|بعد الظهر|في المساء|في الليل)/,\n  abbreviated: /^(ص|م|نصف الليل|ظهراً|في الصباح|بعد الظهر|في المساء|في الليل)/,\n  wide: /^(ص|م|نصف الليل|في الصباح|ظهراً|بعد الظهر|في المساء|في الليل)/,\n  any: /^(ص|م|صباح|ظهر|مساء|ليل)/\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ص/,\n    pm: /^م/,\n    midnight: /^ن/,\n    noon: /^ظ/,\n    morning: /^ص/,\n    afternoon: /^بعد/,\n    evening: /^م/,\n    night: /^ل/\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'أقل من ثانية واحدة',\n    two: 'أقل من ثانتين',\n    threeToTen: 'أقل من {{count}} ثواني',\n    other: 'أقل من {{count}} ثانية'\n  },\n  xSeconds: {\n    one: 'ثانية واحدة',\n    two: 'ثانتين',\n    threeToTen: '{{count}} ثواني',\n    other: '{{count}} ثانية'\n  },\n  halfAMinute: 'نصف دقيقة',\n  lessThanXMinutes: {\n    one: 'أقل من دقيقة',\n    two: 'أقل من دقيقتين',\n    threeToTen: 'أقل من {{count}} دقائق',\n    other: 'أقل من {{count}} دقيقة'\n  },\n  xMinutes: {\n    one: 'دقيقة واحدة',\n    two: 'دقيقتين',\n    threeToTen: '{{count}} دقائق',\n    other: '{{count}} دقيقة'\n  },\n  aboutXHours: {\n    one: 'ساعة واحدة تقريباً',\n    two: 'ساعتين تقريباً',\n    threeToTen: '{{count}} ساعات تقريباً',\n    other: '{{count}} ساعة تقريباً'\n  },\n  xHours: {\n    one: 'ساعة واحدة',\n    two: 'ساعتين',\n    threeToTen: '{{count}} ساعات',\n    other: '{{count}} ساعة'\n  },\n  xDays: {\n    one: 'يوم واحد',\n    two: 'يومين',\n    threeToTen: '{{count}} أيام',\n    other: '{{count}} يوم'\n  },\n  aboutXWeeks: {\n    one: 'أسبوع واحد تقريباً',\n    two: 'أسبوعين تقريباً',\n    threeToTen: '{{count}} أسابيع تقريباً',\n    other: '{{count}} أسبوع تقريباً'\n  },\n  xWeeks: {\n    one: 'أسبوع واحد',\n    two: 'أسبوعين',\n    threeToTen: '{{count}} أسابيع',\n    other: '{{count}} أسبوع'\n  },\n  aboutXMonths: {\n    one: 'شهر واحد تقريباً',\n    two: 'شهرين تقريباً',\n    threeToTen: '{{count}} أشهر تقريباً',\n    other: '{{count}} شهر تقريباً'\n  },\n  xMonths: {\n    one: 'شهر واحد',\n    two: 'شهرين',\n    threeToTen: '{{count}} أشهر',\n    other: '{{count}} شهر'\n  },\n  aboutXYears: {\n    one: 'عام واحد تقريباً',\n    two: 'عامين تقريباً',\n    threeToTen: '{{count}} أعوام تقريباً',\n    other: '{{count}} عام تقريباً'\n  },\n  xYears: {\n    one: 'عام واحد',\n    two: 'عامين',\n    threeToTen: '{{count}} أعوام',\n    other: '{{count}} عام'\n  },\n  overXYears: {\n    one: 'أكثر من عام',\n    two: 'أكثر من عامين',\n    threeToTen: 'أكثر من {{count}} أعوام',\n    other: 'أكثر من {{count}} عام'\n  },\n  almostXYears: {\n    one: 'عام واحد تقريباً',\n    two: 'عامين تقريباً',\n    threeToTen: '{{count}} أعوام تقريباً',\n    other: '{{count}} عام تقريباً'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  var usageGroup = formatDistanceLocale[token];\n  var result;\n  if (typeof usageGroup === 'string') {\n    result = usageGroup;\n  } else if (count === 1) {\n    result = usageGroup.one;\n  } else if (count === 2) {\n    result = usageGroup.two;\n  } else if (count <= 10) {\n    result = usageGroup.threeToTen.replace('{{count}}', String(count));\n  } else {\n    result = usageGroup.other.replace('{{count}}', String(count));\n  }\n  if (options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'في خلال ' + result;\n    } else {\n      return 'منذ ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'عند' {{time}}\",\n  long: \"{{date}} 'عند' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'أخر' eeee 'عند' p\",\n  yesterday: \"'أمس عند' p\",\n  today: \"'اليوم عند' p\",\n  tomorrow: \"'غداً عند' p\",\n  nextWeek: \"eeee 'عند' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Arabic locale (Moroccan Arabic).\n * @language Moroccan Arabic\n * @iso-639-2 ara\n * @author Achraf Rrami [@rramiachraf]{@link https://github.com/rramiachraf}\n */\nvar locale = {\n  code: 'ar-MA',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    // Monday is 1\n    weekStartsOn: 1,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م.', 'ب.م.'],\n  wide: ['قبل الميلاد', 'بعد الميلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],\n  wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']\n};\nvar monthValues = {\n  narrow: ['ي', 'ف', 'م', 'أ', 'م', 'ي', 'ي', 'غ', 'ش', 'أ', 'ن', 'د'],\n  abbreviated: ['ينا', 'فبر', 'مارس', 'أبريل', 'ماي', 'يونـ', 'يولـ', 'غشت', 'شتنـ', 'أكتـ', 'نونـ', 'دجنـ'],\n  wide: ['يناير', 'فبراير', 'مارس', 'أبريل', 'ماي', 'يونيو', 'يوليوز', 'غشت', 'شتنبر', 'أكتوبر', 'نونبر', 'دجنبر']\n};\nvar dayValues = {\n  narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n  short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  abbreviated: ['أحد', 'اثنـ', 'ثلا', 'أربـ', 'خميـ', 'جمعة', 'سبت'],\n  wide: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظـهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظـهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ق|ب)/i,\n  abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?م\\.?\\s?|a\\.?\\s?d\\.?|c\\.?\\s?)/i,\n  wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i\n};\nvar parseEraPatterns = {\n  any: [/^قبل/i, /^بعد/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ر[1234]/i,\n  wide: /^الربع [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[يفمأمسند]/i,\n  abbreviated: /^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i,\n  wide: /^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ي/i, /^ف/i, /^م/i, /^أ/i, /^م/i, /^ي/i, /^ي/i, /^غ/i, /^ش/i, /^أ/i, /^ن/i, /^د/i],\n  any: [/^ين/i, /^فب/i, /^مار/i, /^أب/i, /^ماي/i, /^يون/i, /^يول/i, /^غشت/i, /^ش/i, /^أك/i, /^ن/i, /^د/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[حنثرخجس]/i,\n  short: /^(أحد|إثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  abbreviated: /^(أحد|إثن|ثلا|أرب|خمي|جمعة|سبت)/i,\n  wide: /^(الأحد|الإثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n  wide: [/^الأحد/i, /^الإثنين/i, /^الثلاثاء/i, /^الأربعاء/i, /^الخميس/i, /^الجمعة/i, /^السبت/i],\n  any: [/^أح/i, /^إث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return Number(index) + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'أقل من ثانية واحدة',\n    two: 'أقل من ثانتين',\n    threeToTen: 'أقل من {{count}} ثواني',\n    other: 'أقل من {{count}} ثانية'\n  },\n  xSeconds: {\n    one: 'ثانية واحدة',\n    two: 'ثانتين',\n    threeToTen: '{{count}} ثواني',\n    other: '{{count}} ثانية'\n  },\n  halfAMinute: 'نصف دقيقة',\n  lessThanXMinutes: {\n    one: 'أقل من دقيقة',\n    two: 'أقل من دقيقتين',\n    threeToTen: 'أقل من {{count}} دقائق',\n    other: 'أقل من {{count}} دقيقة'\n  },\n  xMinutes: {\n    one: 'دقيقة واحدة',\n    two: 'دقيقتين',\n    threeToTen: '{{count}} دقائق',\n    other: '{{count}} دقيقة'\n  },\n  aboutXHours: {\n    one: 'ساعة واحدة تقريباً',\n    two: 'ساعتين تقريباً',\n    threeToTen: '{{count}} ساعات تقريباً',\n    other: '{{count}} ساعة تقريباً'\n  },\n  xHours: {\n    one: 'ساعة واحدة',\n    two: 'ساعتين',\n    threeToTen: '{{count}} ساعات',\n    other: '{{count}} ساعة'\n  },\n  xDays: {\n    one: 'يوم واحد',\n    two: 'يومين',\n    threeToTen: '{{count}} أيام',\n    other: '{{count}} يوم'\n  },\n  aboutXWeeks: {\n    one: 'أسبوع واحد تقريباً',\n    two: 'أسبوعين تقريباً',\n    threeToTen: '{{count}} أسابيع تقريباً',\n    other: '{{count}} أسبوع تقريباً'\n  },\n  xWeeks: {\n    one: 'أسبوع واحد',\n    two: 'أسبوعين',\n    threeToTen: '{{count}} أسابيع',\n    other: '{{count}} أسبوع'\n  },\n  aboutXMonths: {\n    one: 'شهر واحد تقريباً',\n    two: 'شهرين تقريباً',\n    threeToTen: '{{count}} أشهر تقريباً',\n    other: '{{count}} شهر تقريباً'\n  },\n  xMonths: {\n    one: 'شهر واحد',\n    two: 'شهرين',\n    threeToTen: '{{count}} أشهر',\n    other: '{{count}} شهر'\n  },\n  aboutXYears: {\n    one: 'عام واحد تقريباً',\n    two: 'عامين تقريباً',\n    threeToTen: '{{count}} أعوام تقريباً',\n    other: '{{count}} عام تقريباً'\n  },\n  xYears: {\n    one: 'عام واحد',\n    two: 'عامين',\n    threeToTen: '{{count}} أعوام',\n    other: '{{count}} عام'\n  },\n  overXYears: {\n    one: 'أكثر من عام',\n    two: 'أكثر من عامين',\n    threeToTen: 'أكثر من {{count}} أعوام',\n    other: 'أكثر من {{count}} عام'\n  },\n  almostXYears: {\n    one: 'عام واحد تقريباً',\n    two: 'عامين تقريباً',\n    threeToTen: '{{count}} أعوام تقريباً',\n    other: '{{count}} عام تقريباً'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 2) {\n    result = tokenValue.two;\n  } else if (count <= 10) {\n    result = tokenValue.threeToTen.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'في خلال ' + result;\n    } else {\n      return 'منذ ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'عند' {{time}}\",\n  long: \"{{date}} 'عند' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'أخر' eeee 'عند' p\",\n  yesterday: \"'أمس عند' p\",\n  today: \"'اليوم عند' p\",\n  tomorrow: \"'غداً عند' p\",\n  nextWeek: \"eeee 'عند' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Arabic locale (Sauid Arabic).\n * @language Arabic\n * @iso-639-2 ara\n * @author Dhaifallah Alwadani [@dalwadani]{@link https://github.com/dalwadani}\n */\nvar locale = {\n  code: 'ar-SA',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م.', 'ب.م.'],\n  wide: ['قبل الميلاد', 'بعد الميلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],\n  wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']\n};\nvar monthValues = {\n  narrow: ['ي', 'ف', 'م', 'أ', 'م', 'ي', 'ي', 'أ', 'س', 'أ', 'ن', 'د'],\n  abbreviated: ['ينا', 'فبر', 'مارس', 'أبريل', 'مايو', 'يونـ', 'يولـ', 'أغسـ', 'سبتـ', 'أكتـ', 'نوفـ', 'ديسـ'],\n  wide: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']\n};\nvar dayValues = {\n  narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n  short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  abbreviated: ['أحد', 'اثنـ', 'ثلا', 'أربـ', 'خميـ', 'جمعة', 'سبت'],\n  wide: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظهر',\n    evening: 'مساءاً',\n    night: 'ليلاً'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظـهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'في الصباح',\n    afternoon: 'بعد الظهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'م',\n    midnight: 'نصف الليل',\n    noon: 'ظهر',\n    morning: 'صباحاً',\n    afternoon: 'بعد الظـهر',\n    evening: 'في المساء',\n    night: 'في الليل'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ق|ب)/i,\n  abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?م\\.?\\s?|a\\.?\\s?d\\.?|c\\.?\\s?)/i,\n  wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i\n};\nvar parseEraPatterns = {\n  any: [/^قبل/i, /^بعد/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ر[1234]/i,\n  wide: /^الربع [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[يفمأمسند]/i,\n  abbreviated: /^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,\n  wide: /^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ي/i, /^ف/i, /^م/i, /^أ/i, /^م/i, /^ي/i, /^ي/i, /^أ/i, /^س/i, /^أ/i, /^ن/i, /^د/i],\n  any: [/^ين/i, /^ف/i, /^مار/i, /^أب/i, /^ماي/i, /^يون/i, /^يول/i, /^أغ/i, /^س/i, /^أك/i, /^ن/i, /^د/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[حنثرخجس]/i,\n  short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  abbreviated: /^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,\n  wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n  wide: [/^الأحد/i, /^الاثنين/i, /^الثلاثاء/i, /^الأربعاء/i, /^الخميس/i, /^الجمعة/i, /^السبت/i],\n  any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'أقل من ثانية',\n    two: 'أقل من زوز ثواني',\n    threeToTen: 'أقل من {{count}} ثواني',\n    other: 'أقل من {{count}} ثانية'\n  },\n  xSeconds: {\n    one: 'ثانية',\n    two: 'زوز ثواني',\n    threeToTen: '{{count}} ثواني',\n    other: '{{count}} ثانية'\n  },\n  halfAMinute: 'نص دقيقة',\n  lessThanXMinutes: {\n    one: 'أقل من دقيقة',\n    two: 'أقل من دقيقتين',\n    threeToTen: 'أقل من {{count}} دقايق',\n    other: 'أقل من {{count}} دقيقة'\n  },\n  xMinutes: {\n    one: 'دقيقة',\n    two: 'دقيقتين',\n    threeToTen: '{{count}} دقايق',\n    other: '{{count}} دقيقة'\n  },\n  aboutXHours: {\n    one: 'ساعة تقريب',\n    two: 'ساعتين تقريب',\n    threeToTen: '{{count}} سوايع تقريب',\n    other: '{{count}} ساعة تقريب'\n  },\n  xHours: {\n    one: 'ساعة',\n    two: 'ساعتين',\n    threeToTen: '{{count}} سوايع',\n    other: '{{count}} ساعة'\n  },\n  xDays: {\n    one: 'نهار',\n    two: 'نهارين',\n    threeToTen: '{{count}} أيام',\n    other: '{{count}} يوم'\n  },\n  aboutXWeeks: {\n    one: 'جمعة تقريب',\n    two: 'جمعتين تقريب',\n    threeToTen: '{{count}} جماع تقريب',\n    other: '{{count}} جمعة تقريب'\n  },\n  xWeeks: {\n    one: 'جمعة',\n    two: 'جمعتين',\n    threeToTen: '{{count}} جماع',\n    other: '{{count}} جمعة'\n  },\n  aboutXMonths: {\n    one: 'شهر تقريب',\n    two: 'شهرين تقريب',\n    threeToTen: '{{count}} أشهرة تقريب',\n    other: '{{count}} شهر تقريب'\n  },\n  xMonths: {\n    one: 'شهر',\n    two: 'شهرين',\n    threeToTen: '{{count}} أشهرة',\n    other: '{{count}} شهر'\n  },\n  aboutXYears: {\n    one: 'عام تقريب',\n    two: 'عامين تقريب',\n    threeToTen: '{{count}} أعوام تقريب',\n    other: '{{count}} عام تقريب'\n  },\n  xYears: {\n    one: 'عام',\n    two: 'عامين',\n    threeToTen: '{{count}} أعوام',\n    other: '{{count}} عام'\n  },\n  overXYears: {\n    one: 'أكثر من عام',\n    two: 'أكثر من عامين',\n    threeToTen: 'أكثر من {{count}} أعوام',\n    other: 'أكثر من {{count}} عام'\n  },\n  almostXYears: {\n    one: 'عام تقريب',\n    two: 'عامين تقريب',\n    threeToTen: '{{count}} أعوام تقريب',\n    other: '{{count}} عام تقريب'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var usageGroup = formatDistanceLocale[token];\n  var result;\n  if (typeof usageGroup === 'string') {\n    result = usageGroup;\n  } else if (count === 1) {\n    result = usageGroup.one;\n  } else if (count === 2) {\n    result = usageGroup.two;\n  } else if (count <= 10) {\n    result = usageGroup.threeToTen.replace('{{count}}', String(count));\n  } else {\n    result = usageGroup.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'في ' + result;\n    } else {\n      return 'عندو ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE، do MMMM y',\n  long: 'do MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss',\n  long: 'HH:mm:ss',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'مع' {{time}}\",\n  long: \"{{date}} 'مع' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'إلي فات مع' p\",\n  yesterday: \"'البارح مع' p\",\n  today: \"'اليوم مع' p\",\n  tomorrow: \"'غدوة مع' p\",\n  nextWeek: \"eeee 'الجمعة الجاية مع' p 'نهار'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Arabic locale (Tunisian Arabic).\n * @language Arabic\n * @iso-639-2 ara\n * @author Koussay Haj Kacem [@essana3]{@link https://github.com/essana3}\n */\nvar locale = {\n  code: 'ar-TN',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م.', 'ب.م.'],\n  wide: ['قبل الميلاد', 'بعد الميلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ر1', 'ر2', 'ر3', 'ر4'],\n  wide: ['الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع']\n};\nvar monthValues = {\n  narrow: ['د', 'ن', 'أ', 'س', 'أ', 'ج', 'ج', 'م', 'أ', 'م', 'ف', 'ج'],\n  abbreviated: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n  wide: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر']\n};\nvar dayValues = {\n  narrow: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n  short: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  abbreviated: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n  wide: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'ع',\n    morning: 'الصباح',\n    noon: 'القايلة',\n    afternoon: 'بعد القايلة',\n    evening: 'العشية',\n    night: 'الليل',\n    midnight: 'نص الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'ع',\n    morning: 'الصباح',\n    noon: 'القايلة',\n    afternoon: 'بعد القايلة',\n    evening: 'العشية',\n    night: 'الليل',\n    midnight: 'نص الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'ع',\n    morning: 'الصباح',\n    noon: 'القايلة',\n    afternoon: 'بعد القايلة',\n    evening: 'العشية',\n    night: 'الليل',\n    midnight: 'نص الليل'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ص',\n    pm: 'ع',\n    morning: 'في الصباح',\n    noon: 'في القايلة',\n    afternoon: 'بعد القايلة',\n    evening: 'في العشية',\n    night: 'في الليل',\n    midnight: 'نص الليل'\n  },\n  abbreviated: {\n    am: 'ص',\n    pm: 'ع',\n    morning: 'في الصباح',\n    noon: 'في القايلة',\n    afternoon: 'بعد القايلة',\n    evening: 'في العشية',\n    night: 'في الليل',\n    midnight: 'نص الليل'\n  },\n  wide: {\n    am: 'ص',\n    pm: 'ع',\n    morning: 'في الصباح',\n    noon: 'في القايلة',\n    afternoon: 'بعد القايلة',\n    evening: 'في العشية',\n    night: 'في الليل',\n    midnight: 'نص الليل'\n  }\n};\nvar ordinalNumber = function ordinalNumber(num) {\n  return String(num);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /[قب]/,\n  abbreviated: /[قب]\\.م\\./,\n  wide: /(قبل|بعد) الميلاد/\n};\nvar parseEraPatterns = {\n  any: [/قبل/, /بعد/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /ر[1234]/,\n  wide: /الربع (الأول|الثاني|الثالث|الرابع)/\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[جفمأسند]/,\n  abbreviated: /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n  wide: /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/\n};\nvar parseMonthPatterns = {\n  narrow: [/^ج/i, /^ف/i, /^م/i, /^أ/i, /^م/i, /^ج/i, /^ج/i, /^أ/i, /^س/i, /^أ/i, /^ن/i, /^د/i],\n  any: [/^جانفي/i, /^فيفري/i, /^مارس/i, /^أفريل/i, /^ماي/i, /^جوان/i, /^جويلية/i, /^أوت/i, /^سبتمبر/i, /^أكتوبر/i, /^نوفمبر/i, /^ديسمبر/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[حنثرخجس]/i,\n  short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n  wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n  wide: [/^الأحد/i, /^الاثنين/i, /^الثلاثاء/i, /^الأربعاء/i, /^الخميس/i, /^الجمعة/i, /^السبت/i],\n  any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ص|ع|ن ل|ل|(في|مع) (صباح|قايلة|عشية|ليل))/,\n  any: /^([صع]|نص الليل|قايلة|(في|مع) (صباح|قايلة|عشية|ليل))/\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ص/,\n    pm: /^ع/,\n    midnight: /نص الليل/,\n    noon: /قايلة/,\n    afternoon: /بعد القايلة/,\n    morning: /صباح/,\n    evening: /عشية/,\n    night: /ليل/\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'bir saniyədən az',\n    other: '{{count}} bir saniyədən az'\n  },\n  xSeconds: {\n    one: '1 saniyə',\n    other: '{{count}} saniyə'\n  },\n  halfAMinute: 'yarım dəqiqə',\n  lessThanXMinutes: {\n    one: 'bir dəqiqədən az',\n    other: '{{count}} bir dəqiqədən az'\n  },\n  xMinutes: {\n    one: 'bir dəqiqə',\n    other: '{{count}} dəqiqə'\n  },\n  aboutXHours: {\n    one: 'təxminən 1 saat',\n    other: 'təxminən {{count}} saat'\n  },\n  xHours: {\n    one: '1 saat',\n    other: '{{count}} saat'\n  },\n  xDays: {\n    one: '1 gün',\n    other: '{{count}} gün'\n  },\n  aboutXWeeks: {\n    one: 'təxminən 1 həftə',\n    other: 'təxminən {{count}} həftə'\n  },\n  xWeeks: {\n    one: '1 həftə',\n    other: '{{count}} həftə'\n  },\n  aboutXMonths: {\n    one: 'təxminən 1 ay',\n    other: 'təxminən {{count}} ay'\n  },\n  xMonths: {\n    one: '1 ay',\n    other: '{{count}} ay'\n  },\n  aboutXYears: {\n    one: 'təxminən 1 il',\n    other: 'təxminən {{count}} il'\n  },\n  xYears: {\n    one: '1 il',\n    other: '{{count}} il'\n  },\n  overXYears: {\n    one: '1 ildən çox',\n    other: '{{count}} ildən çox'\n  },\n  almostXYears: {\n    one: 'demək olar ki 1 il',\n    other: 'demək olar ki {{count}} il'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' sonra';\n    } else {\n      return result + ' əvvəl';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, do MMMM y 'il'\",\n  long: \"do MMMM y 'il'\",\n  medium: \"d MMM y 'il'\",\n  short: 'dd.MM.yyyy'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} {{time}} - 'də'\",\n  long: \"{{date}} {{time}} - 'də'\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'sonuncu' eeee p -'də'\",\n  yesterday: \"'dünən' p -'də'\",\n  today: \"'bugün' p -'də'\",\n  tomorrow: \"'sabah' p -'də'\",\n  nextWeek: \"eeee p -'də'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['e.ə', 'b.e'],\n  abbreviated: ['e.ə', 'b.e'],\n  wide: ['eramızdan əvvəl', 'bizim era']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1ci kvartal', '2ci kvartal', '3cü kvartal', '4cü kvartal']\n};\nvar monthValues = {\n  narrow: ['Y', 'F', 'M', 'A', 'M', 'İ', 'İ', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'İyun', 'İyul', 'Avq', 'Sen', 'Okt', 'Noy', 'Dek'],\n  wide: ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr']\n};\nvar dayValues = {\n  narrow: ['B.', 'B.e', 'Ç.a', 'Ç.', 'C.a', 'C.', 'Ş.'],\n  short: ['B.', 'B.e', 'Ç.a', 'Ç.', 'C.a', 'C.', 'Ş.'],\n  abbreviated: ['Baz', 'Baz.e', 'Çər.a', 'Çər', 'Cüm.a', 'Cüm', 'Şə'],\n  wide: ['Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'gecəyarı',\n    noon: 'gün',\n    morning: 'səhər',\n    afternoon: 'gündüz',\n    evening: 'axşam',\n    night: 'gecə'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'gecəyarı',\n    noon: 'gün',\n    morning: 'səhər',\n    afternoon: 'gündüz',\n    evening: 'axşam',\n    night: 'gecə'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'gecəyarı',\n    noon: 'gün',\n    morning: 'səhər',\n    afternoon: 'gündüz',\n    evening: 'axşam',\n    night: 'gecə'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'gecəyarı',\n    noon: 'gün',\n    morning: 'səhər',\n    afternoon: 'gündüz',\n    evening: 'axşam',\n    night: 'gecə'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'gecəyarı',\n    noon: 'gün',\n    morning: 'səhər',\n    afternoon: 'gündüz',\n    evening: 'axşam',\n    night: 'gecə'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'gecəyarı',\n    noon: 'gün',\n    morning: 'səhər',\n    afternoon: 'gündüz',\n    evening: 'axşam',\n    night: 'gecə'\n  }\n};\nvar suffixes = {\n  1: '-inci',\n  5: '-inci',\n  8: '-inci',\n  70: '-inci',\n  80: '-inci',\n  2: '-nci',\n  7: '-nci',\n  20: '-nci',\n  50: '-nci',\n  3: '-üncü',\n  4: '-üncü',\n  100: '-üncü',\n  6: '-ncı',\n  9: '-uncu',\n  10: '-uncu',\n  30: '-uncu',\n  60: '-ıncı',\n  90: '-ıncı'\n};\nvar getSuffix = function getSuffix(number) {\n  if (number === 0) {\n    // special case for zero\n    return number + '-ıncı';\n  }\n  var a = number % 10;\n  var b = number % 100 - a;\n  var c = number >= 100 ? 100 : null;\n  if (suffixes[a]) {\n    return suffixes[a];\n  } else if (suffixes[b]) {\n    return suffixes[b];\n  } else if (c !== null) {\n    return suffixes[c];\n  }\n  return '';\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  var suffix = getSuffix(number);\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Azerbaijani locale.\n * @language Azerbaijani\n * @iso-639-2 aze\n */\nvar locale = {\n  code: 'az',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?(ci|inci|nci|uncu|üncü|ncı))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b|a)$/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)$/i,\n  wide: /^(bizim eradan əvvəl|bizim era)$/i\n};\nvar parseEraPatterns = {\n  any: [/^b$/i, /^(a|c)$/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]$/i,\n  abbreviated: /^K[1234]$/i,\n  wide: /^[1234](ci)? kvartal$/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[(?-i)yfmaisond]$/i,\n  abbreviated: /^(Yan|Fev|Mar|Apr|May|İyun|İyul|Avq|Sen|Okt|Noy|Dek)$/i,\n  wide: /^(Yanvar|Fevral|Mart|Aprel|May|İyun|İyul|Avgust|Sentyabr|Oktyabr|Noyabr|Dekabr)$/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^[(?-i)y]$/i, /^[(?-i)f]$/i, /^[(?-i)m]$/i, /^[(?-i)a]$/i, /^[(?-i)m]$/i, /^[(?-i)i]$/i, /^[(?-i)i]$/i, /^[(?-i)a]$/i, /^[(?-i)s]$/i, /^[(?-i)o]$/i, /^[(?-i)n]$/i, /^[(?-i)d]$/i],\n  abbreviated: [/^Yan$/i, /^Fev$/i, /^Mar$/i, /^Apr$/i, /^May$/i, /^İyun$/i, /^İyul$/i, /^Avg$/i, /^Sen$/i, /^Okt$/i, /^Noy$/i, /^Dek$/i],\n  wide: [/^Yanvar$/i, /^Fevral$/i, /^Mart$/i, /^Aprel$/i, /^May$/i, /^İyun$/i, /^İyul$/i, /^Avgust$/i, /^Sentyabr$/i, /^Oktyabr$/i, /^Noyabr$/i, /^Dekabr$/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(B\\.|B\\.e|Ç\\.a|Ç\\.|C\\.a|C\\.|Ş\\.)$/i,\n  short: /^(B\\.|B\\.e|Ç\\.a|Ç\\.|C\\.a|C\\.|Ş\\.)$/i,\n  abbreviated: /^(Baz\\.e|Çər|Çər\\.a|Cüm|Cüm\\.a|Şə)$/i,\n  wide: /^(Bazar|Bazar ertəsi|Çərşənbə axşamı|Çərşənbə|Cümə axşamı|Cümə|Şənbə)$/i\n};\nvar parseDayPatterns = {\n  narrow: [/^B\\.$/i, /^B\\.e$/i, /^Ç\\.a$/i, /^Ç\\.$/i, /^C\\.a$/i, /^C\\.$/i, /^Ş\\.$/i],\n  abbreviated: [/^Baz$/i, /^Baz\\.e$/i, /^Çər\\.a$/i, /^Çər$/i, /^Cüm\\.a$/i, /^Cüm$/i, /^Şə$/i],\n  wide: [/^Bazar$/i, /^Bazar ertəsi$/i, /^Çərşənbə axşamı$/i, /^Çərşənbə$/i, /^Cümə axşamı$/i, /^Cümə$/i, /^Şənbə$/i],\n  any: [/^B\\.$/i, /^B\\.e$/i, /^Ç\\.a$/i, /^Ç\\.$/i, /^C\\.a$/i, /^C\\.$/i, /^Ş\\.$/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i,\n  any: /^(am|pm|a\\.m\\.|p\\.m\\.|AM|PM|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a$/i,\n    pm: /^p$/i,\n    midnight: /^gecəyarı$/i,\n    noon: /^gün$/i,\n    morning: /səhər$/i,\n    afternoon: /gündüz$/i,\n    evening: /axşam$/i,\n    night: /gecə$/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'narrow'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function declension(scheme, count) {\n  // scheme for count=1 exists\n  if (scheme.one !== undefined && count === 1) {\n    return scheme.one;\n  }\n  var rem10 = count % 10;\n  var rem100 = count % 100;\n\n  // 1, 21, 31, ...\n  if (rem10 === 1 && rem100 !== 11) {\n    return scheme.singularNominative.replace('{{count}}', String(count));\n\n    // 2, 3, 4, 22, 23, 24, 32 ...\n  } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {\n    return scheme.singularGenitive.replace('{{count}}', String(count));\n\n    // 5, 6, 7, 8, 9, 10, 11, ...\n  } else {\n    return scheme.pluralGenitive.replace('{{count}}', String(count));\n  }\n}\nfunction buildLocalizeTokenFn(scheme) {\n  return function (count, options) {\n    if (options && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        if (scheme.future) {\n          return declension(scheme.future, count);\n        } else {\n          return 'праз ' + declension(scheme.regular, count);\n        }\n      } else {\n        if (scheme.past) {\n          return declension(scheme.past, count);\n        } else {\n          return declension(scheme.regular, count) + ' таму';\n        }\n      }\n    } else {\n      return declension(scheme.regular, count);\n    }\n  };\n}\nvar halfAMinute = function halfAMinute(_, options) {\n  if (options && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'праз паўхвіліны';\n    } else {\n      return 'паўхвіліны таму';\n    }\n  }\n  return 'паўхвіліны';\n};\nvar formatDistanceLocale = {\n  lessThanXSeconds: buildLocalizeTokenFn({\n    regular: {\n      one: 'менш за секунду',\n      singularNominative: 'менш за {{count}} секунду',\n      singularGenitive: 'менш за {{count}} секунды',\n      pluralGenitive: 'менш за {{count}} секунд'\n    },\n    future: {\n      one: 'менш, чым праз секунду',\n      singularNominative: 'менш, чым праз {{count}} секунду',\n      singularGenitive: 'менш, чым праз {{count}} секунды',\n      pluralGenitive: 'менш, чым праз {{count}} секунд'\n    }\n  }),\n  xSeconds: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} секунда',\n      singularGenitive: '{{count}} секунды',\n      pluralGenitive: '{{count}} секунд'\n    },\n    past: {\n      singularNominative: '{{count}} секунду таму',\n      singularGenitive: '{{count}} секунды таму',\n      pluralGenitive: '{{count}} секунд таму'\n    },\n    future: {\n      singularNominative: 'праз {{count}} секунду',\n      singularGenitive: 'праз {{count}} секунды',\n      pluralGenitive: 'праз {{count}} секунд'\n    }\n  }),\n  halfAMinute: halfAMinute,\n  lessThanXMinutes: buildLocalizeTokenFn({\n    regular: {\n      one: 'менш за хвіліну',\n      singularNominative: 'менш за {{count}} хвіліну',\n      singularGenitive: 'менш за {{count}} хвіліны',\n      pluralGenitive: 'менш за {{count}} хвілін'\n    },\n    future: {\n      one: 'менш, чым праз хвіліну',\n      singularNominative: 'менш, чым праз {{count}} хвіліну',\n      singularGenitive: 'менш, чым праз {{count}} хвіліны',\n      pluralGenitive: 'менш, чым праз {{count}} хвілін'\n    }\n  }),\n  xMinutes: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} хвіліна',\n      singularGenitive: '{{count}} хвіліны',\n      pluralGenitive: '{{count}} хвілін'\n    },\n    past: {\n      singularNominative: '{{count}} хвіліну таму',\n      singularGenitive: '{{count}} хвіліны таму',\n      pluralGenitive: '{{count}} хвілін таму'\n    },\n    future: {\n      singularNominative: 'праз {{count}} хвіліну',\n      singularGenitive: 'праз {{count}} хвіліны',\n      pluralGenitive: 'праз {{count}} хвілін'\n    }\n  }),\n  aboutXHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} гадзіны',\n      singularGenitive: 'каля {{count}} гадзін',\n      pluralGenitive: 'каля {{count}} гадзін'\n    },\n    future: {\n      singularNominative: 'прыблізна праз {{count}} гадзіну',\n      singularGenitive: 'прыблізна праз {{count}} гадзіны',\n      pluralGenitive: 'прыблізна праз {{count}} гадзін'\n    }\n  }),\n  xHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} гадзіна',\n      singularGenitive: '{{count}} гадзіны',\n      pluralGenitive: '{{count}} гадзін'\n    },\n    past: {\n      singularNominative: '{{count}} гадзіну таму',\n      singularGenitive: '{{count}} гадзіны таму',\n      pluralGenitive: '{{count}} гадзін таму'\n    },\n    future: {\n      singularNominative: 'праз {{count}} гадзіну',\n      singularGenitive: 'праз {{count}} гадзіны',\n      pluralGenitive: 'праз {{count}} гадзін'\n    }\n  }),\n  xDays: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} дзень',\n      singularGenitive: '{{count}} дні',\n      pluralGenitive: '{{count}} дзён'\n    }\n  }),\n  aboutXWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} месяца',\n      // TODO\n      singularGenitive: 'каля {{count}} месяцаў',\n      // TODO\n      pluralGenitive: 'каля {{count}} месяцаў' // TODO\n    },\n\n    future: {\n      singularNominative: 'прыблізна праз {{count}} месяц',\n      // TODO\n      singularGenitive: 'прыблізна праз {{count}} месяцы',\n      // TODO\n      pluralGenitive: 'прыблізна праз {{count}} месяцаў' // TODO\n    }\n  }),\n\n  xWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} месяц',\n      singularGenitive: '{{count}} месяцы',\n      pluralGenitive: '{{count}} месяцаў'\n    }\n  }),\n  aboutXMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} месяца',\n      singularGenitive: 'каля {{count}} месяцаў',\n      pluralGenitive: 'каля {{count}} месяцаў'\n    },\n    future: {\n      singularNominative: 'прыблізна праз {{count}} месяц',\n      singularGenitive: 'прыблізна праз {{count}} месяцы',\n      pluralGenitive: 'прыблізна праз {{count}} месяцаў'\n    }\n  }),\n  xMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} месяц',\n      singularGenitive: '{{count}} месяцы',\n      pluralGenitive: '{{count}} месяцаў'\n    }\n  }),\n  aboutXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} года',\n      singularGenitive: 'каля {{count}} гадоў',\n      pluralGenitive: 'каля {{count}} гадоў'\n    },\n    future: {\n      singularNominative: 'прыблізна праз {{count}} год',\n      singularGenitive: 'прыблізна праз {{count}} гады',\n      pluralGenitive: 'прыблізна праз {{count}} гадоў'\n    }\n  }),\n  xYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} год',\n      singularGenitive: '{{count}} гады',\n      pluralGenitive: '{{count}} гадоў'\n    }\n  }),\n  overXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'больш за {{count}} год',\n      singularGenitive: 'больш за {{count}} гады',\n      pluralGenitive: 'больш за {{count}} гадоў'\n    },\n    future: {\n      singularNominative: 'больш, чым праз {{count}} год',\n      singularGenitive: 'больш, чым праз {{count}} гады',\n      pluralGenitive: 'больш, чым праз {{count}} гадоў'\n    }\n  }),\n  almostXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'амаль {{count}} год',\n      singularGenitive: 'амаль {{count}} гады',\n      pluralGenitive: 'амаль {{count}} гадоў'\n    },\n    future: {\n      singularNominative: 'амаль праз {{count}} год',\n      singularGenitive: 'амаль праз {{count}} гады',\n      pluralGenitive: 'амаль праз {{count}} гадоў'\n    }\n  })\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  return formatDistanceLocale[token](count, options);\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d MMMM y 'г.'\",\n  long: \"d MMMM y 'г.'\",\n  medium: \"d MMM y 'г.'\",\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","import requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nexport default function isSameUTCWeek(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfWeek = startOfUTCWeek(dirtyDateLeft, options);\n  var dateRightStartOfWeek = startOfUTCWeek(dirtyDateRight, options);\n  return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime();\n}","import { toDate } from \"../../../../index.js\";\nimport isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar accusativeWeekdays = ['нядзелю', 'панядзелак', 'аўторак', 'сераду', 'чацвер', 'пятніцу', 'суботу'];\nfunction lastWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 5:\n    case 6:\n      return \"'у мінулую \" + weekday + \" а' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'у мінулы \" + weekday + \" а' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  return \"'у \" + weekday + \" а' p\";\n}\nfunction nextWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 5:\n    case 6:\n      return \"'у наступную \" + weekday + \" а' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'у наступны \" + weekday + \" а' p\";\n  }\n}\nvar lastWeekFormat = function lastWeekFormat(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return lastWeek(day);\n  }\n};\nvar nextWeekFormat = function nextWeekFormat(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return nextWeek(day);\n  }\n};\nvar formatRelativeLocale = {\n  lastWeek: lastWeekFormat,\n  yesterday: \"'учора а' p\",\n  today: \"'сёння а' p\",\n  tomorrow: \"'заўтра а' p\",\n  nextWeek: nextWeekFormat,\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Belarusian locale.\n * @language Belarusian\n * @iso-639-2 bel\n * @author Kiryl Anokhin [@alyrik]{@link https://github.com/alyrik}\n * @author Martin Wind [@arvigeus]{@link https://github.com/mawi12345}\n */\nvar locale = {\n  code: 'be',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['да н.э.', 'н.э.'],\n  abbreviated: ['да н. э.', 'н. э.'],\n  wide: ['да нашай эры', 'нашай эры']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-ы кв.', '2-і кв.', '3-і кв.', '4-ы кв.'],\n  wide: ['1-ы квартал', '2-і квартал', '3-і квартал', '4-ы квартал']\n};\nvar monthValues = {\n  narrow: ['С', 'Л', 'С', 'К', 'М', 'Ч', 'Л', 'Ж', 'В', 'К', 'Л', 'С'],\n  abbreviated: ['студз.', 'лют.', 'сак.', 'крас.', 'май', 'чэрв.', 'ліп.', 'жн.', 'вер.', 'кастр.', 'ліст.', 'снеж.'],\n  wide: ['студзень', 'люты', 'сакавік', 'красавік', 'май', 'чэрвень', 'ліпень', 'жнівень', 'верасень', 'кастрычнік', 'лістапад', 'снежань']\n};\nvar formattingMonthValues = {\n  narrow: ['С', 'Л', 'С', 'К', 'М', 'Ч', 'Л', 'Ж', 'В', 'К', 'Л', 'С'],\n  abbreviated: ['студз.', 'лют.', 'сак.', 'крас.', 'мая', 'чэрв.', 'ліп.', 'жн.', 'вер.', 'кастр.', 'ліст.', 'снеж.'],\n  wide: ['студзеня', 'лютага', 'сакавіка', 'красавіка', 'мая', 'чэрвеня', 'ліпеня', 'жніўня', 'верасня', 'кастрычніка', 'лістапада', 'снежня']\n};\nvar dayValues = {\n  narrow: ['Н', 'П', 'А', 'С', 'Ч', 'П', 'С'],\n  short: ['нд', 'пн', 'аў', 'ср', 'чц', 'пт', 'сб'],\n  abbreviated: ['нядз', 'пан', 'аўт', 'сер', 'чац', 'пят', 'суб'],\n  wide: ['нядзеля', 'панядзелак', 'аўторак', 'серада', 'чацвер', 'пятніца', 'субота']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дзень',\n    evening: 'веч.',\n    night: 'ноч'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дзень',\n    evening: 'веч.',\n    night: 'ноч'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўнач',\n    noon: 'поўдзень',\n    morning: 'раніца',\n    afternoon: 'дзень',\n    evening: 'вечар',\n    night: 'ноч'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночы'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночы'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўнач',\n    noon: 'поўдзень',\n    morning: 'раніцы',\n    afternoon: 'дня',\n    evening: 'вечара',\n    night: 'ночы'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  var number = Number(dirtyNumber);\n  var suffix;\n\n  /** Though it's an incorrect ordinal form of a date we use it here for consistency with other similar locales (ru, uk)\n   *  For date-month combinations should be used `d` formatter.\n   *  Correct:   `d MMMM` (4 верасня)\n   *  Incorrect: `do MMMM` (4-га верасня)\n   *\n   *  But following the consistency leads to mistakes for literal uses of `do` formatter (ordinal day of month).\n   *  So for phrase \"5th day of month\" (`do дзень месяца`)\n   *  library will produce:            `5-га дзень месяца`\n   *  but correct spelling should be:  `5-ы дзень месяца`\n   *\n   *  So I guess there should be a stand-alone and a formatting version of \"day of month\" formatters\n   */\n  if (unit === 'date') {\n    suffix = '-га';\n  } else if (unit === 'hour' || unit === 'minute' || unit === 'second') {\n    suffix = '-я';\n  } else {\n    suffix = (number % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? '-і' : '-ы';\n  }\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'any',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?(е|я|га|і|ы|ае|ая|яя|шы|гі|ці|ты|мы))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((да )?н\\.?\\s?э\\.?)/i,\n  abbreviated: /^((да )?н\\.?\\s?э\\.?)/i,\n  wide: /^(да нашай эры|нашай эры|наша эра)/i\n};\nvar parseEraPatterns = {\n  any: [/^д/i, /^н/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?[ыі]?)? кв.?/i,\n  wide: /^[1234](-?[ыі]?)? квартал/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[слкмчжв]/i,\n  abbreviated: /^(студз|лют|сак|крас|ма[йя]|чэрв|ліп|жн|вер|кастр|ліст|снеж)\\.?/i,\n  wide: /^(студзен[ья]|лют(ы|ага)|сакавіка?|красавіка?|ма[йя]|чэрвен[ья]|ліпен[ья]|жні(вень|ўня)|верас(ень|ня)|кастрычніка?|лістапада?|снеж(ань|ня))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^с/i, /^л/i, /^с/i, /^к/i, /^м/i, /^ч/i, /^л/i, /^ж/i, /^в/i, /^к/i, /^л/i, /^с/i],\n  any: [/^ст/i, /^лю/i, /^са/i, /^кр/i, /^ма/i, /^ч/i, /^ліп/i, /^ж/i, /^в/i, /^ка/i, /^ліс/i, /^сн/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[нпасч]/i,\n  short: /^(нд|ня|пн|па|аў|ат|ср|се|чц|ча|пт|пя|сб|су)\\.?/i,\n  abbreviated: /^(нядз?|ндз|пнд|пан|аўт|срд|сер|чцв|чац|птн|пят|суб).?/i,\n  wide: /^(нядзел[яі]|панядзел(ак|ка)|аўтор(ак|ка)|серад[аы]|чацв(ер|ярга)|пятніц[аы]|субот[аы])/i\n};\nvar parseDayPatterns = {\n  narrow: [/^н/i, /^п/i, /^а/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n  any: [/^н/i, /^п[ан]/i, /^а/i, /^с[ер]/i, /^ч/i, /^п[ят]/i, /^с[уб]/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^([дп]п|поўн\\.?|поўд\\.?|ран\\.?|дзень|дня|веч\\.?|ночы?)/i,\n  abbreviated: /^([дп]п|поўн\\.?|поўд\\.?|ран\\.?|дзень|дня|веч\\.?|ночы?)/i,\n  wide: /^([дп]п|поўнач|поўдзень|раніц[аы]|дзень|дня|вечара?|ночы?)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^дп/i,\n    pm: /^пп/i,\n    midnight: /^поўн/i,\n    noon: /^поўд/i,\n    morning: /^р/i,\n    afternoon: /^д[зн]/i,\n    evening: /^в/i,\n    night: /^н/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function declension(scheme, count) {\n  // scheme for count=1 exists\n  if (scheme.one !== undefined && count === 1) {\n    return scheme.one;\n  }\n  var rem10 = count % 10;\n  var rem100 = count % 100;\n\n  // 1, 21, 31, ...\n  if (rem10 === 1 && rem100 !== 11) {\n    return scheme.singularNominative.replace('{{count}}', String(count));\n\n    // 2, 3, 4, 22, 23, 24, 32 ...\n  } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {\n    return scheme.singularGenitive.replace('{{count}}', String(count));\n\n    // 5, 6, 7, 8, 9, 10, 11, ...\n  } else {\n    return scheme.pluralGenitive.replace('{{count}}', String(count));\n  }\n}\nfunction buildLocalizeTokenFn(scheme) {\n  return function (count, options) {\n    if (options && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        if (scheme.future) {\n          return declension(scheme.future, count);\n        } else {\n          return 'праз ' + declension(scheme.regular, count);\n        }\n      } else {\n        if (scheme.past) {\n          return declension(scheme.past, count);\n        } else {\n          return declension(scheme.regular, count) + ' таму';\n        }\n      }\n    } else {\n      return declension(scheme.regular, count);\n    }\n  };\n}\nvar halfAMinute = function halfAMinute(_, options) {\n  if (options && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'праз паўхвіліны';\n    } else {\n      return 'паўхвіліны таму';\n    }\n  }\n  return 'паўхвіліны';\n};\nvar formatDistanceLocale = {\n  lessThanXSeconds: buildLocalizeTokenFn({\n    regular: {\n      one: 'менш за секунду',\n      singularNominative: 'менш за {{count}} секунду',\n      singularGenitive: 'менш за {{count}} секунды',\n      pluralGenitive: 'менш за {{count}} секунд'\n    },\n    future: {\n      one: 'менш, чым праз секунду',\n      singularNominative: 'менш, чым праз {{count}} секунду',\n      singularGenitive: 'менш, чым праз {{count}} секунды',\n      pluralGenitive: 'менш, чым праз {{count}} секунд'\n    }\n  }),\n  xSeconds: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} секунда',\n      singularGenitive: '{{count}} секунды',\n      pluralGenitive: '{{count}} секунд'\n    },\n    past: {\n      singularNominative: '{{count}} секунду таму',\n      singularGenitive: '{{count}} секунды таму',\n      pluralGenitive: '{{count}} секунд таму'\n    },\n    future: {\n      singularNominative: 'праз {{count}} секунду',\n      singularGenitive: 'праз {{count}} секунды',\n      pluralGenitive: 'праз {{count}} секунд'\n    }\n  }),\n  halfAMinute: halfAMinute,\n  lessThanXMinutes: buildLocalizeTokenFn({\n    regular: {\n      one: 'менш за хвіліну',\n      singularNominative: 'менш за {{count}} хвіліну',\n      singularGenitive: 'менш за {{count}} хвіліны',\n      pluralGenitive: 'менш за {{count}} хвілін'\n    },\n    future: {\n      one: 'менш, чым праз хвіліну',\n      singularNominative: 'менш, чым праз {{count}} хвіліну',\n      singularGenitive: 'менш, чым праз {{count}} хвіліны',\n      pluralGenitive: 'менш, чым праз {{count}} хвілін'\n    }\n  }),\n  xMinutes: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} хвіліна',\n      singularGenitive: '{{count}} хвіліны',\n      pluralGenitive: '{{count}} хвілін'\n    },\n    past: {\n      singularNominative: '{{count}} хвіліну таму',\n      singularGenitive: '{{count}} хвіліны таму',\n      pluralGenitive: '{{count}} хвілін таму'\n    },\n    future: {\n      singularNominative: 'праз {{count}} хвіліну',\n      singularGenitive: 'праз {{count}} хвіліны',\n      pluralGenitive: 'праз {{count}} хвілін'\n    }\n  }),\n  aboutXHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} гадзіны',\n      singularGenitive: 'каля {{count}} гадзін',\n      pluralGenitive: 'каля {{count}} гадзін'\n    },\n    future: {\n      singularNominative: 'прыблізна праз {{count}} гадзіну',\n      singularGenitive: 'прыблізна праз {{count}} гадзіны',\n      pluralGenitive: 'прыблізна праз {{count}} гадзін'\n    }\n  }),\n  xHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} гадзіна',\n      singularGenitive: '{{count}} гадзіны',\n      pluralGenitive: '{{count}} гадзін'\n    },\n    past: {\n      singularNominative: '{{count}} гадзіну таму',\n      singularGenitive: '{{count}} гадзіны таму',\n      pluralGenitive: '{{count}} гадзін таму'\n    },\n    future: {\n      singularNominative: 'праз {{count}} гадзіну',\n      singularGenitive: 'праз {{count}} гадзіны',\n      pluralGenitive: 'праз {{count}} гадзін'\n    }\n  }),\n  xDays: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} дзень',\n      singularGenitive: '{{count}} дні',\n      pluralGenitive: '{{count}} дзён'\n    }\n  }),\n  aboutXWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} месяца',\n      // TODO\n      singularGenitive: 'каля {{count}} месяцаў',\n      // TODO\n      pluralGenitive: 'каля {{count}} месяцаў' // TODO\n    },\n\n    future: {\n      singularNominative: 'прыблізна праз {{count}} месяц',\n      // TODO\n      singularGenitive: 'прыблізна праз {{count}} месяцы',\n      // TODO\n      pluralGenitive: 'прыблізна праз {{count}} месяцаў' // TODO\n    }\n  }),\n\n  xWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} месяц',\n      singularGenitive: '{{count}} месяцы',\n      pluralGenitive: '{{count}} месяцаў'\n    }\n  }),\n  aboutXMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} месяца',\n      singularGenitive: 'каля {{count}} месяцаў',\n      pluralGenitive: 'каля {{count}} месяцаў'\n    },\n    future: {\n      singularNominative: 'прыблізна праз {{count}} месяц',\n      singularGenitive: 'прыблізна праз {{count}} месяцы',\n      pluralGenitive: 'прыблізна праз {{count}} месяцаў'\n    }\n  }),\n  xMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} месяц',\n      singularGenitive: '{{count}} месяцы',\n      pluralGenitive: '{{count}} месяцаў'\n    }\n  }),\n  aboutXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'каля {{count}} года',\n      singularGenitive: 'каля {{count}} гадоў',\n      pluralGenitive: 'каля {{count}} гадоў'\n    },\n    future: {\n      singularNominative: 'прыблізна праз {{count}} год',\n      singularGenitive: 'прыблізна праз {{count}} гады',\n      pluralGenitive: 'прыблізна праз {{count}} гадоў'\n    }\n  }),\n  xYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} год',\n      singularGenitive: '{{count}} гады',\n      pluralGenitive: '{{count}} гадоў'\n    }\n  }),\n  overXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'больш за {{count}} год',\n      singularGenitive: 'больш за {{count}} гады',\n      pluralGenitive: 'больш за {{count}} гадоў'\n    },\n    future: {\n      singularNominative: 'больш, чым праз {{count}} год',\n      singularGenitive: 'больш, чым праз {{count}} гады',\n      pluralGenitive: 'больш, чым праз {{count}} гадоў'\n    }\n  }),\n  almostXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'амаль {{count}} год',\n      singularGenitive: 'амаль {{count}} гады',\n      pluralGenitive: 'амаль {{count}} гадоў'\n    },\n    future: {\n      singularNominative: 'амаль праз {{count}} год',\n      singularGenitive: 'амаль праз {{count}} гады',\n      pluralGenitive: 'амаль праз {{count}} гадоў'\n    }\n  })\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  return formatDistanceLocale[token](count, options);\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d MMMM y 'г.'\",\n  long: \"d MMMM y 'г.'\",\n  medium: \"d MMM y 'г.'\",\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","import { toDate } from \"../../../../index.js\";\nimport isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar accusativeWeekdays = ['нядзелю', 'панядзелак', 'аўторак', 'сераду', 'чацьвер', 'пятніцу', 'суботу'];\nfunction lastWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 5:\n    case 6:\n      return \"'у мінулую \" + weekday + \" а' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'у мінулы \" + weekday + \" а' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  return \"'у \" + weekday + \" а' p\";\n}\nfunction nextWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 5:\n    case 6:\n      return \"'у наступную \" + weekday + \" а' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'у наступны \" + weekday + \" а' p\";\n  }\n}\nvar lastWeekFormat = function lastWeekFormat(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return lastWeek(day);\n  }\n};\nvar nextWeekFormat = function nextWeekFormat(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return nextWeek(day);\n  }\n};\nvar formatRelativeLocale = {\n  lastWeek: lastWeekFormat,\n  yesterday: \"'учора а' p\",\n  today: \"'сёньня а' p\",\n  tomorrow: \"'заўтра а' p\",\n  nextWeek: nextWeekFormat,\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Belarusian Classic locale.\n * @language Belarusian Classic\n * @iso-639-2 bel\n * @author Ryhor Nopears [@nopears]{@link https://github.com/nopears}\n */\nvar locale = {\n  code: 'be-tarask',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['да н.э.', 'н.э.'],\n  abbreviated: ['да н. э.', 'н. э.'],\n  wide: ['да нашай эры', 'нашай эры']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-ы кв.', '2-і кв.', '3-і кв.', '4-ы кв.'],\n  wide: ['1-ы квартал', '2-і квартал', '3-і квартал', '4-ы квартал']\n};\nvar monthValues = {\n  narrow: ['С', 'Л', 'С', 'К', 'Т', 'Ч', 'Л', 'Ж', 'В', 'К', 'Л', 'С'],\n  abbreviated: ['студз.', 'лют.', 'сак.', 'крас.', 'трав.', 'чэрв.', 'ліп.', 'жн.', 'вер.', 'кастр.', 'ліст.', 'сьнеж.'],\n  wide: ['студзень', 'люты', 'сакавік', 'красавік', 'травень', 'чэрвень', 'ліпень', 'жнівень', 'верасень', 'кастрычнік', 'лістапад', 'сьнежань']\n};\nvar formattingMonthValues = {\n  narrow: ['С', 'Л', 'С', 'К', 'Т', 'Ч', 'Л', 'Ж', 'В', 'К', 'Л', 'С'],\n  abbreviated: ['студз.', 'лют.', 'сак.', 'крас.', 'трав.', 'чэрв.', 'ліп.', 'жн.', 'вер.', 'кастр.', 'ліст.', 'сьнеж.'],\n  wide: ['студзеня', 'лютага', 'сакавіка', 'красавіка', 'траўня', 'чэрвеня', 'ліпеня', 'жніўня', 'верасня', 'кастрычніка', 'лістапада', 'сьнежня']\n};\nvar dayValues = {\n  narrow: ['Н', 'П', 'А', 'С', 'Ч', 'П', 'С'],\n  short: ['нд', 'пн', 'аў', 'ср', 'чц', 'пт', 'сб'],\n  abbreviated: ['нядз', 'пан', 'аўт', 'сер', 'чаць', 'пят', 'суб'],\n  wide: ['нядзеля', 'панядзелак', 'аўторак', 'серада', 'чацьвер', 'пятніца', 'субота']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дзень',\n    evening: 'веч.',\n    night: 'ноч'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дзень',\n    evening: 'веч.',\n    night: 'ноч'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўнач',\n    noon: 'поўдзень',\n    morning: 'раніца',\n    afternoon: 'дзень',\n    evening: 'вечар',\n    night: 'ноч'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночы'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўн.',\n    noon: 'поўд.',\n    morning: 'ран.',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночы'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'поўнач',\n    noon: 'поўдзень',\n    morning: 'раніцы',\n    afternoon: 'дня',\n    evening: 'вечара',\n    night: 'ночы'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  var number = Number(dirtyNumber);\n  var suffix;\n\n  /** Though it's an incorrect ordinal form of a date we use it here for consistency with other similar locales (ru, uk)\n   *  For date-month combinations should be used `d` formatter.\n   *  Correct:   `d MMMM` (4 верасня)\n   *  Incorrect: `do MMMM` (4-га верасня)\n   *\n   *  But following the consistency leads to mistakes for literal uses of `do` formatter (ordinal day of month).\n   *  So for phrase \"5th day of month\" (`do дзень месяца`)\n   *  library will produce:            `5-га дзень месяца`\n   *  but correct spelling should be:  `5-ы дзень месяца`\n   *\n   *  So I guess there should be a stand-alone and a formatting version of \"day of month\" formatters\n   */\n  if (unit === 'date') {\n    suffix = '-га';\n  } else if (unit === 'hour' || unit === 'minute' || unit === 'second') {\n    suffix = '-я';\n  } else {\n    suffix = (number % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? '-і' : '-ы';\n  }\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'any',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?(е|я|га|і|ы|ае|ая|яя|шы|гі|ці|ты|мы))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((да )?н\\.?\\s?э\\.?)/i,\n  abbreviated: /^((да )?н\\.?\\s?э\\.?)/i,\n  wide: /^(да нашай эры|нашай эры|наша эра)/i\n};\nvar parseEraPatterns = {\n  any: [/^д/i, /^н/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?[ыі]?)? кв.?/i,\n  wide: /^[1234](-?[ыі]?)? квартал/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[слкмчжв]/i,\n  abbreviated: /^(студз|лют|сак|крас|тр(ав)?|чэрв|ліп|жн|вер|кастр|ліст|сьнеж)\\.?/i,\n  wide: /^(студзен[ья]|лют(ы|ага)|сакавіка?|красавіка?|тра(вень|ўня)|чэрвен[ья]|ліпен[ья]|жні(вень|ўня)|верас(ень|ня)|кастрычніка?|лістапада?|сьнеж(ань|ня))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^с/i, /^л/i, /^с/i, /^к/i, /^т/i, /^ч/i, /^л/i, /^ж/i, /^в/i, /^к/i, /^л/i, /^с/i],\n  any: [/^ст/i, /^лю/i, /^са/i, /^кр/i, /^тр/i, /^ч/i, /^ліп/i, /^ж/i, /^в/i, /^ка/i, /^ліс/i, /^сн/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[нпасч]/i,\n  short: /^(нд|ня|пн|па|аў|ат|ср|се|чц|ча|пт|пя|сб|су)\\.?/i,\n  abbreviated: /^(нядз?|ндз|пнд|пан|аўт|срд|сер|чцьв|чаць|птн|пят|суб).?/i,\n  wide: /^(нядзел[яі]|панядзел(ак|ка)|аўтор(ак|ка)|серад[аы]|чацьв(ер|ярга)|пятніц[аы]|субот[аы])/i\n};\nvar parseDayPatterns = {\n  narrow: [/^н/i, /^п/i, /^а/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n  any: [/^н/i, /^п[ан]/i, /^а/i, /^с[ер]/i, /^ч/i, /^п[ят]/i, /^с[уб]/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^([дп]п|поўн\\.?|поўд\\.?|ран\\.?|дзень|дня|веч\\.?|ночы?)/i,\n  abbreviated: /^([дп]п|поўн\\.?|поўд\\.?|ран\\.?|дзень|дня|веч\\.?|ночы?)/i,\n  wide: /^([дп]п|поўнач|поўдзень|раніц[аы]|дзень|дня|вечара?|ночы?)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^дп/i,\n    pm: /^пп/i,\n    midnight: /^поўн/i,\n    noon: /^поўд/i,\n    morning: /^р/i,\n    afternoon: /^д[зн]/i,\n    evening: /^в/i,\n    night: /^н/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'по-малко от секунда',\n    other: 'по-малко от {{count}} секунди'\n  },\n  xSeconds: {\n    one: '1 секунда',\n    other: '{{count}} секунди'\n  },\n  halfAMinute: 'половин минута',\n  lessThanXMinutes: {\n    one: 'по-малко от минута',\n    other: 'по-малко от {{count}} минути'\n  },\n  xMinutes: {\n    one: '1 минута',\n    other: '{{count}} минути'\n  },\n  aboutXHours: {\n    one: 'около час',\n    other: 'около {{count}} часа'\n  },\n  xHours: {\n    one: '1 час',\n    other: '{{count}} часа'\n  },\n  xDays: {\n    one: '1 ден',\n    other: '{{count}} дни'\n  },\n  aboutXWeeks: {\n    one: 'около седмица',\n    other: 'около {{count}} седмици'\n  },\n  xWeeks: {\n    one: '1 седмица',\n    other: '{{count}} седмици'\n  },\n  aboutXMonths: {\n    one: 'около месец',\n    other: 'около {{count}} месеца'\n  },\n  xMonths: {\n    one: '1 месец',\n    other: '{{count}} месеца'\n  },\n  aboutXYears: {\n    one: 'около година',\n    other: 'около {{count}} години'\n  },\n  xYears: {\n    one: '1 година',\n    other: '{{count}} години'\n  },\n  overXYears: {\n    one: 'над година',\n    other: 'над {{count}} години'\n  },\n  almostXYears: {\n    one: 'почти година',\n    other: 'почти {{count}} години'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'след ' + result;\n    } else {\n      return 'преди ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, dd MMMM yyyy',\n  long: 'dd MMMM yyyy',\n  medium: 'dd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","import toDate from \"../../../../toDate/index.js\";\nimport isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\n// Adapted from the `ru` translation\n\nvar weekdays = ['неделя', 'понеделник', 'вторник', 'сряда', 'четвъртък', 'петък', 'събота'];\nfunction lastWeek(day) {\n  var weekday = weekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 6:\n      return \"'миналата \" + weekday + \" в' p\";\n    case 1:\n    case 2:\n    case 4:\n    case 5:\n      return \"'миналия \" + weekday + \" в' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = weekdays[day];\n  if (day === 2 /* Tue */) {\n    return \"'във \" + weekday + \" в' p\";\n  } else {\n    return \"'в \" + weekday + \" в' p\";\n  }\n}\nfunction nextWeek(day) {\n  var weekday = weekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 6:\n      return \"'следващата \" + weekday + \" в' p\";\n    case 1:\n    case 2:\n    case 4:\n    case 5:\n      return \"'следващия \" + weekday + \" в' p\";\n  }\n}\nvar lastWeekFormatToken = function lastWeekFormatToken(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return lastWeek(day);\n  }\n};\nvar nextWeekFormatToken = function nextWeekFormatToken(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return nextWeek(day);\n  }\n};\nvar formatRelativeLocale = {\n  lastWeek: lastWeekFormatToken,\n  yesterday: \"'вчера в' p\",\n  today: \"'днес в' p\",\n  tomorrow: \"'утре в' p\",\n  nextWeek: nextWeekFormatToken,\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['пр.н.е.', 'н.е.'],\n  abbreviated: ['преди н. е.', 'н. е.'],\n  wide: ['преди новата ера', 'новата ера']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-во тримес.', '2-ро тримес.', '3-то тримес.', '4-то тримес.'],\n  wide: ['1-во тримесечие', '2-ро тримесечие', '3-то тримесечие', '4-то тримесечие']\n};\nvar monthValues = {\n  abbreviated: ['яну', 'фев', 'мар', 'апр', 'май', 'юни', 'юли', 'авг', 'сеп', 'окт', 'ное', 'дек'],\n  wide: ['януари', 'февруари', 'март', 'април', 'май', 'юни', 'юли', 'август', 'септември', 'октомври', 'ноември', 'декември']\n};\nvar dayValues = {\n  narrow: ['Н', 'П', 'В', 'С', 'Ч', 'П', 'С'],\n  short: ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n  abbreviated: ['нед', 'пон', 'вто', 'сря', 'чет', 'пет', 'съб'],\n  wide: ['неделя', 'понеделник', 'вторник', 'сряда', 'четвъртък', 'петък', 'събота']\n};\nvar dayPeriodValues = {\n  wide: {\n    am: 'преди обяд',\n    pm: 'след обяд',\n    midnight: 'в полунощ',\n    noon: 'на обяд',\n    morning: 'сутринта',\n    afternoon: 'следобед',\n    evening: 'вечерта',\n    night: 'през нощта'\n  }\n};\nfunction isFeminine(unit) {\n  return unit === 'year' || unit === 'week' || unit === 'minute' || unit === 'second';\n}\nfunction isNeuter(unit) {\n  return unit === 'quarter';\n}\nfunction numberWithSuffix(number, unit, masculine, feminine, neuter) {\n  var suffix = isNeuter(unit) ? neuter : isFeminine(unit) ? feminine : masculine;\n  return number + '-' + suffix;\n}\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  if (number === 0) {\n    return numberWithSuffix(0, unit, 'ев', 'ева', 'ево');\n  } else if (number % 1000 === 0) {\n    return numberWithSuffix(number, unit, 'ен', 'на', 'но');\n  } else if (number % 100 === 0) {\n    return numberWithSuffix(number, unit, 'тен', 'тна', 'тно');\n  }\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return numberWithSuffix(number, unit, 'ви', 'ва', 'во');\n      case 2:\n        return numberWithSuffix(number, unit, 'ри', 'ра', 'ро');\n      case 7:\n      case 8:\n        return numberWithSuffix(number, unit, 'ми', 'ма', 'мо');\n    }\n  }\n  return numberWithSuffix(number, unit, 'ти', 'та', 'то');\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Bulgarian locale.\n * @language Bulgarian\n * @iso-639-2 bul\n * @author Nikolay Stoynov [@arvigeus]{@link https://github.com/arvigeus}\n * @author Tsvetan Ovedenski [@fintara]{@link https://github.com/fintara}\n */\nvar locale = {\n  code: 'bg',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?[врмт][аи]|-?т?(ен|на)|-?(ев|ева))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((пр)?н\\.?\\s?е\\.?)/i,\n  abbreviated: /^((пр)?н\\.?\\s?е\\.?)/i,\n  wide: /^(преди новата ера|новата ера|нова ера)/i\n};\nvar parseEraPatterns = {\n  any: [/^п/i, /^н/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?[врт]?o?)? тримес.?/i,\n  wide: /^[1234](-?[врт]?о?)? тримесечие/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[нпвсч]/i,\n  short: /^(нд|пн|вт|ср|чт|пт|сб)/i,\n  abbreviated: /^(нед|пон|вто|сря|чет|пет|съб)/i,\n  wide: /^(неделя|понеделник|вторник|сряда|четвъртък|петък|събота)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^н/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n  any: [/^н[ед]/i, /^п[он]/i, /^вт/i, /^ср/i, /^ч[ет]/i, /^п[ет]/i, /^с[ъб]/i]\n};\nvar matchMonthPatterns = {\n  abbreviated: /^(яну|фев|мар|апр|май|юни|юли|авг|сеп|окт|ное|дек)/i,\n  wide: /^(януари|февруари|март|април|май|юни|юли|август|септември|октомври|ноември|декември)/i\n};\nvar parseMonthPatterns = {\n  any: [/^я/i, /^ф/i, /^мар/i, /^ап/i, /^май/i, /^юн/i, /^юл/i, /^ав/i, /^се/i, /^окт/i, /^но/i, /^де/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(преди о|след о|в по|на о|през|веч|сут|следо)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^преди о/i,\n    pm: /^след о/i,\n    midnight: /^в пол/i,\n    noon: /^на об/i,\n    morning: /^сут/i,\n    afternoon: /^следо/i,\n    evening: /^веч/i,\n    night: /^през н/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar numberValues = {\n  locale: {\n    '1': '১',\n    '2': '২',\n    '3': '৩',\n    '4': '৪',\n    '5': '৫',\n    '6': '৬',\n    '7': '৭',\n    '8': '৮',\n    '9': '৯',\n    '0': '০'\n  },\n  number: {\n    '১': '1',\n    '২': '2',\n    '৩': '3',\n    '৪': '4',\n    '৫': '5',\n    '৬': '6',\n    '৭': '7',\n    '৮': '8',\n    '৯': '9',\n    '০': '0'\n  }\n};\nvar eraValues = {\n  narrow: ['খ্রিঃপূঃ', 'খ্রিঃ'],\n  abbreviated: ['খ্রিঃপূর্ব', 'খ্রিঃ'],\n  wide: ['খ্রিস্টপূর্ব', 'খ্রিস্টাব্দ']\n};\nvar quarterValues = {\n  narrow: ['১', '২', '৩', '৪'],\n  abbreviated: ['১ত্রৈ', '২ত্রৈ', '৩ত্রৈ', '৪ত্রৈ'],\n  wide: ['১ম ত্রৈমাসিক', '২য় ত্রৈমাসিক', '৩য় ত্রৈমাসিক', '৪র্থ ত্রৈমাসিক']\n};\nvar monthValues = {\n  narrow: ['জানু', 'ফেব্রু', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্ট', 'অক্টো', 'নভে', 'ডিসে'],\n  abbreviated: ['জানু', 'ফেব্রু', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্ট', 'অক্টো', 'নভে', 'ডিসে'],\n  wide: ['জানুয়ারি', 'ফেব্রুয়ারি', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর']\n};\nvar dayValues = {\n  narrow: ['র', 'সো', 'ম', 'বু', 'বৃ', 'শু', 'শ'],\n  short: ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহ', 'শুক্র', 'শনি'],\n  abbreviated: ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহ', 'শুক্র', 'শনি'],\n  wide: ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পতিবার ', 'শুক্রবার', 'শনিবার']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'পূ',\n    pm: 'অপ',\n    midnight: 'মধ্যরাত',\n    noon: 'মধ্যাহ্ন',\n    morning: 'সকাল',\n    afternoon: 'বিকাল',\n    evening: 'সন্ধ্যা',\n    night: 'রাত'\n  },\n  abbreviated: {\n    am: 'পূর্বাহ্ন',\n    pm: 'অপরাহ্ন',\n    midnight: 'মধ্যরাত',\n    noon: 'মধ্যাহ্ন',\n    morning: 'সকাল',\n    afternoon: 'বিকাল',\n    evening: 'সন্ধ্যা',\n    night: 'রাত'\n  },\n  wide: {\n    am: 'পূর্বাহ্ন',\n    pm: 'অপরাহ্ন',\n    midnight: 'মধ্যরাত',\n    noon: 'মধ্যাহ্ন',\n    morning: 'সকাল',\n    afternoon: 'বিকাল',\n    evening: 'সন্ধ্যা',\n    night: 'রাত'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'পূ',\n    pm: 'অপ',\n    midnight: 'মধ্যরাত',\n    noon: 'মধ্যাহ্ন',\n    morning: 'সকাল',\n    afternoon: 'বিকাল',\n    evening: 'সন্ধ্যা',\n    night: 'রাত'\n  },\n  abbreviated: {\n    am: 'পূর্বাহ্ন',\n    pm: 'অপরাহ্ন',\n    midnight: 'মধ্যরাত',\n    noon: 'মধ্যাহ্ন',\n    morning: 'সকাল',\n    afternoon: 'বিকাল',\n    evening: 'সন্ধ্যা',\n    night: 'রাত'\n  },\n  wide: {\n    am: 'পূর্বাহ্ন',\n    pm: 'অপরাহ্ন',\n    midnight: 'মধ্যরাত',\n    noon: 'মধ্যাহ্ন',\n    morning: 'সকাল',\n    afternoon: 'বিকাল',\n    evening: 'সন্ধ্যা',\n    night: 'রাত'\n  }\n};\nfunction dateOrdinalNumber(number, localeNumber) {\n  if (number > 18 && number <= 31) {\n    return localeNumber + 'শে';\n  } else {\n    switch (number) {\n      case 1:\n        return localeNumber + 'লা';\n      case 2:\n      case 3:\n        return localeNumber + 'রা';\n      case 4:\n        return localeNumber + 'ঠা';\n      default:\n        return localeNumber + 'ই';\n    }\n  }\n}\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var localeNumber = numberToLocale(number);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  if (unit === 'date') {\n    return dateOrdinalNumber(number, localeNumber);\n  }\n  if (number > 10 || number === 0) return localeNumber + 'তম';\n  var rem10 = number % 10;\n  switch (rem10) {\n    case 2:\n    case 3:\n      return localeNumber + 'য়';\n    case 4:\n      return localeNumber + 'র্থ';\n    case 6:\n      return localeNumber + 'ষ্ঠ';\n    default:\n      return localeNumber + 'ম';\n  }\n};\n\n// function localeToNumber(locale: string): number {\n//   const enNumber = locale.toString().replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n//     return numberValues.number[match as keyof typeof numberValues.number]\n//   })\n//   return Number(enNumber)\n// }\n\nexport function numberToLocale(enNumber) {\n  return enNumber.toString().replace(/\\d/g, function (match) {\n    return numberValues.locale[match];\n  });\n}\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import { numberToLocale } from \"../localize/index.js\";\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'প্রায় ১ সেকেন্ড',\n    other: 'প্রায় {{count}} সেকেন্ড'\n  },\n  xSeconds: {\n    one: '১ সেকেন্ড',\n    other: '{{count}} সেকেন্ড'\n  },\n  halfAMinute: 'আধ মিনিট',\n  lessThanXMinutes: {\n    one: 'প্রায় ১ মিনিট',\n    other: 'প্রায় {{count}} মিনিট'\n  },\n  xMinutes: {\n    one: '১ মিনিট',\n    other: '{{count}} মিনিট'\n  },\n  aboutXHours: {\n    one: 'প্রায় ১ ঘন্টা',\n    other: 'প্রায় {{count}} ঘন্টা'\n  },\n  xHours: {\n    one: '১ ঘন্টা',\n    other: '{{count}} ঘন্টা'\n  },\n  xDays: {\n    one: '১ দিন',\n    other: '{{count}} দিন'\n  },\n  aboutXWeeks: {\n    one: 'প্রায় ১ সপ্তাহ',\n    other: 'প্রায় {{count}} সপ্তাহ'\n  },\n  xWeeks: {\n    one: '১ সপ্তাহ',\n    other: '{{count}} সপ্তাহ'\n  },\n  aboutXMonths: {\n    one: 'প্রায় ১ মাস',\n    other: 'প্রায় {{count}} মাস'\n  },\n  xMonths: {\n    one: '১ মাস',\n    other: '{{count}} মাস'\n  },\n  aboutXYears: {\n    one: 'প্রায় ১ বছর',\n    other: 'প্রায় {{count}} বছর'\n  },\n  xYears: {\n    one: '১ বছর',\n    other: '{{count}} বছর'\n  },\n  overXYears: {\n    one: '১ বছরের বেশি',\n    other: '{{count}} বছরের বেশি'\n  },\n  almostXYears: {\n    one: 'প্রায় ১ বছর',\n    other: 'প্রায় {{count}} বছর'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', numberToLocale(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' এর মধ্যে';\n    } else {\n      return result + ' আগে';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} {{time}} 'সময়'\",\n  long: \"{{date}} {{time}} 'সময়'\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'গত' eeee 'সময়' p\",\n  yesterday: \"'গতকাল' 'সময়' p\",\n  today: \"'আজ' 'সময়' p\",\n  tomorrow: \"'আগামীকাল' 'সময়' p\",\n  nextWeek: \"eeee 'সময়' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Bengali locale.\n * @language Bengali\n * @iso-639-2 ben\n * @author Touhidur Rahman [@touhidrahman]{@link https://github.com/touhidrahman}\n * @author Farhad Yasir [@nutboltu]{@link https://github.com/nutboltu}\n */\nvar locale = {\n  code: 'bn',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(ম|য়|র্থ|ষ্ঠ|শে|ই|তম)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(খ্রিঃপূঃ|খ্রিঃ)/i,\n  abbreviated: /^(খ্রিঃপূর্ব|খ্রিঃ)/i,\n  wide: /^(খ্রিস্টপূর্ব|খ্রিস্টাব্দ)/i\n};\nvar parseEraPatterns = {\n  narrow: [/^খ্রিঃপূঃ/i, /^খ্রিঃ/i],\n  abbreviated: [/^খ্রিঃপূর্ব/i, /^খ্রিঃ/i],\n  wide: [/^খ্রিস্টপূর্ব/i, /^খ্রিস্টাব্দ/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[১২৩৪]/i,\n  abbreviated: /^[১২৩৪]ত্রৈ/i,\n  wide: /^[১২৩৪](ম|য়|র্থ)? ত্রৈমাসিক/i\n};\nvar parseQuarterPatterns = {\n  any: [/১/i, /২/i, /৩/i, /৪/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(জানু|ফেব্রু|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগস্ট|সেপ্ট|অক্টো|নভে|ডিসে)/i,\n  abbreviated: /^(জানু|ফেব্রু|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগস্ট|সেপ্ট|অক্টো|নভে|ডিসে)/i,\n  wide: /^(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগস্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)/i\n};\nvar parseMonthPatterns = {\n  any: [/^জানু/i, /^ফেব্রু/i, /^মার্চ/i, /^এপ্রিল/i, /^মে/i, /^জুন/i, /^জুলাই/i, /^আগস্ট/i, /^সেপ্ট/i, /^অক্টো/i, /^নভে/i, /^ডিসে/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(র|সো|ম|বু|বৃ|শু|শ)+/i,\n  short: /^(রবি|সোম|মঙ্গল|বুধ|বৃহ|শুক্র|শনি)+/i,\n  abbreviated: /^(রবি|সোম|মঙ্গল|বুধ|বৃহ|শুক্র|শনি)+/i,\n  wide: /^(রবিবার|সোমবার|মঙ্গলবার|বুধবার|বৃহস্পতিবার |শুক্রবার|শনিবার)+/i\n};\nvar parseDayPatterns = {\n  narrow: [/^র/i, /^সো/i, /^ম/i, /^বু/i, /^বৃ/i, /^শু/i, /^শ/i],\n  short: [/^রবি/i, /^সোম/i, /^মঙ্গল/i, /^বুধ/i, /^বৃহ/i, /^শুক্র/i, /^শনি/i],\n  abbreviated: [/^রবি/i, /^সোম/i, /^মঙ্গল/i, /^বুধ/i, /^বৃহ/i, /^শুক্র/i, /^শনি/i],\n  wide: [/^রবিবার/i, /^সোমবার/i, /^মঙ্গলবার/i, /^বুধবার/i, /^বৃহস্পতিবার /i, /^শুক্রবার/i, /^শনিবার/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(পূ|অপ|মধ্যরাত|মধ্যাহ্ন|সকাল|বিকাল|সন্ধ্যা|রাত)/i,\n  abbreviated: /^(পূর্বাহ্ন|অপরাহ্ন|মধ্যরাত|মধ্যাহ্ন|সকাল|বিকাল|সন্ধ্যা|রাত)/i,\n  wide: /^(পূর্বাহ্ন|অপরাহ্ন|মধ্যরাত|মধ্যাহ্ন|সকাল|বিকাল|সন্ধ্যা|রাত)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^পূ/i,\n    pm: /^অপ/i,\n    midnight: /^মধ্যরাত/i,\n    noon: /^মধ্যাহ্ন/i,\n    morning: /সকাল/i,\n    afternoon: /বিকাল/i,\n    evening: /সন্ধ্যা/i,\n    night: /রাত/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      standalone: 'manje od 1 sekunde',\n      withPrepositionAgo: 'manje od 1 sekunde',\n      withPrepositionIn: 'manje od 1 sekundu'\n    },\n    dual: 'manje od {{count}} sekunde',\n    other: 'manje od {{count}} sekundi'\n  },\n  xSeconds: {\n    one: {\n      standalone: '1 sekunda',\n      withPrepositionAgo: '1 sekunde',\n      withPrepositionIn: '1 sekundu'\n    },\n    dual: '{{count}} sekunde',\n    other: '{{count}} sekundi'\n  },\n  halfAMinute: 'pola minute',\n  lessThanXMinutes: {\n    one: {\n      standalone: 'manje od 1 minute',\n      withPrepositionAgo: 'manje od 1 minute',\n      withPrepositionIn: 'manje od 1 minutu'\n    },\n    dual: 'manje od {{count}} minute',\n    other: 'manje od {{count}} minuta'\n  },\n  xMinutes: {\n    one: {\n      standalone: '1 minuta',\n      withPrepositionAgo: '1 minute',\n      withPrepositionIn: '1 minutu'\n    },\n    dual: '{{count}} minute',\n    other: '{{count}} minuta'\n  },\n  aboutXHours: {\n    one: {\n      standalone: 'oko 1 sat',\n      withPrepositionAgo: 'oko 1 sat',\n      withPrepositionIn: 'oko 1 sat'\n    },\n    dual: 'oko {{count}} sata',\n    other: 'oko {{count}} sati'\n  },\n  xHours: {\n    one: {\n      standalone: '1 sat',\n      withPrepositionAgo: '1 sat',\n      withPrepositionIn: '1 sat'\n    },\n    dual: '{{count}} sata',\n    other: '{{count}} sati'\n  },\n  xDays: {\n    one: {\n      standalone: '1 dan',\n      withPrepositionAgo: '1 dan',\n      withPrepositionIn: '1 dan'\n    },\n    dual: '{{count}} dana',\n    other: '{{count}} dana'\n  },\n  aboutXWeeks: {\n    one: {\n      standalone: 'oko 1 sedmicu',\n      withPrepositionAgo: 'oko 1 sedmicu',\n      withPrepositionIn: 'oko 1 sedmicu'\n    },\n    dual: 'oko {{count}} sedmice',\n    other: 'oko {{count}} sedmice'\n  },\n  xWeeks: {\n    one: {\n      standalone: '1 sedmicu',\n      withPrepositionAgo: '1 sedmicu',\n      withPrepositionIn: '1 sedmicu'\n    },\n    dual: '{{count}} sedmice',\n    other: '{{count}} sedmice'\n  },\n  aboutXMonths: {\n    one: {\n      standalone: 'oko 1 mjesec',\n      withPrepositionAgo: 'oko 1 mjesec',\n      withPrepositionIn: 'oko 1 mjesec'\n    },\n    dual: 'oko {{count}} mjeseca',\n    other: 'oko {{count}} mjeseci'\n  },\n  xMonths: {\n    one: {\n      standalone: '1 mjesec',\n      withPrepositionAgo: '1 mjesec',\n      withPrepositionIn: '1 mjesec'\n    },\n    dual: '{{count}} mjeseca',\n    other: '{{count}} mjeseci'\n  },\n  aboutXYears: {\n    one: {\n      standalone: 'oko 1 godinu',\n      withPrepositionAgo: 'oko 1 godinu',\n      withPrepositionIn: 'oko 1 godinu'\n    },\n    dual: 'oko {{count}} godine',\n    other: 'oko {{count}} godina'\n  },\n  xYears: {\n    one: {\n      standalone: '1 godina',\n      withPrepositionAgo: '1 godine',\n      withPrepositionIn: '1 godinu'\n    },\n    dual: '{{count}} godine',\n    other: '{{count}} godina'\n  },\n  overXYears: {\n    one: {\n      standalone: 'preko 1 godinu',\n      withPrepositionAgo: 'preko 1 godinu',\n      withPrepositionIn: 'preko 1 godinu'\n    },\n    dual: 'preko {{count}} godine',\n    other: 'preko {{count}} godina'\n  },\n  almostXYears: {\n    one: {\n      standalone: 'gotovo 1 godinu',\n      withPrepositionAgo: 'gotovo 1 godinu',\n      withPrepositionIn: 'gotovo 1 godinu'\n    },\n    dual: 'gotovo {{count}} godine',\n    other: 'gotovo {{count}} godina'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        result = tokenValue.one.withPrepositionIn;\n      } else {\n        result = tokenValue.one.withPrepositionAgo;\n      }\n    } else {\n      result = tokenValue.one.standalone;\n    }\n  } else if (count % 10 > 1 && count % 10 < 5 &&\n  // if last digit is between 2 and 4\n  String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is \"1\"\n  ) {\n    result = tokenValue.dual.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'za ' + result;\n    } else {\n      return 'prije ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d. MMMM yyyy.',\n  long: 'd. MMMM yyyy.',\n  medium: 'd. MMM yy.',\n  short: 'dd. MM. yy.'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss (zzzz)',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'u' {{time}}\",\n  long: \"{{date}} 'u' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    switch (date.getUTCDay()) {\n      case 0:\n        return \"'prošle nedjelje u' p\";\n      case 3:\n        return \"'prošle srijede u' p\";\n      case 6:\n        return \"'prošle subote u' p\";\n      default:\n        return \"'prošli' EEEE 'u' p\";\n    }\n  },\n  yesterday: \"'juče u' p\",\n  today: \"'danas u' p\",\n  tomorrow: \"'sutra u' p\",\n  nextWeek: function nextWeek(date) {\n    switch (date.getUTCDay()) {\n      case 0:\n        return \"'sljedeće nedjelje u' p\";\n      case 3:\n        return \"'sljedeću srijedu u' p\";\n      case 6:\n        return \"'sljedeću subotu u' p\";\n      default:\n        return \"'sljedeći' EEEE 'u' p\";\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Bosnian locale.\n * @language Bosnian\n * @iso-639-2 bos\n * @author Branislav Lazić [@branislavlazic]{@link https://github.com/branislavlazic}\n */\nvar locale = {\n  code: 'bs',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['pr.n.e.', 'AD'],\n  abbreviated: ['pr. Hr.', 'po. Hr.'],\n  wide: ['Prije Hrista', 'Poslije Hrista']\n};\nvar quarterValues = {\n  narrow: ['1.', '2.', '3.', '4.'],\n  abbreviated: ['1. kv.', '2. kv.', '3. kv.', '4. kv.'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['januar', 'februar', 'mart', 'april', 'maj', 'juni', 'juli', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar']\n};\nvar formattingMonthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['januar', 'februar', 'mart', 'april', 'maj', 'juni', 'juli', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar']\n};\nvar dayValues = {\n  narrow: ['N', 'P', 'U', 'S', 'Č', 'P', 'S'],\n  short: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub'],\n  abbreviated: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub'],\n  wide: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'poslije podne',\n    evening: 'uveče',\n    night: 'noću'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'poslije podne',\n    evening: 'uveče',\n    night: 'noću'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return String(number) + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(pr\\.n\\.e\\.|AD)/i,\n  abbreviated: /^(pr\\.\\s?Hr\\.|po\\.\\s?Hr\\.)/i,\n  wide: /^(Prije Hrista|prije nove ere|Poslije Hrista|nova era)/i\n};\nvar parseEraPatterns = {\n  any: [/^pr/i, /^(po|nova)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]\\.\\s?kv\\.?/i,\n  wide: /^[1234]\\. kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(10|11|12|[123456789])\\./i,\n  abbreviated: /^(jan|feb|mar|apr|maj|jun|jul|avg|sep|okt|nov|dec)/i,\n  wide: /^((januar|januara)|(februar|februara)|(mart|marta)|(april|aprila)|(maj|maja)|(juni|juna)|(juli|jula)|(avgust|avgusta)|(septembar|septembra)|(oktobar|oktobra)|(novembar|novembra)|(decembar|decembra))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^1/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^7/i, /^8/i, /^9/i, /^10/i, /^11/i, /^12/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^avg/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[npusčc]/i,\n  short: /^(ned|pon|uto|sre|(čet|cet)|pet|sub)/i,\n  abbreviated: /^(ned|pon|uto|sre|(čet|cet)|pet|sub)/i,\n  wide: /^(nedjelja|ponedjeljak|utorak|srijeda|(četvrtak|cetvrtak)|petak|subota)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|ponoc|ponoć|(po)?podne|uvece|uveče|noću|poslije podne|ujutru)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^pono/i,\n    noon: /^pod/i,\n    morning: /jutro/i,\n    afternoon: /(poslije\\s|po)+podne/i,\n    evening: /(uvece|uveče)/i,\n    night: /(nocu|noću)/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","/**\n * Davant de les xifres que es diuen amb vocal inicial, 1 i 11, s'apostrofen els articles el i la i la preposició de igual que si estiguessin escrits amb lletres.\n *    l'1 de juliol ('l'u')\n *    l'11 de novembre ('l'onze')\n *    l'11a clàusula del contracte ('l'onzena')\n *    la contractació d'11 jugadors ('d'onze')\n *    l'aval d'11.000 socis ('d'onze mil')\n *\n * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=apostrofaci%25F3+davant+xifres&action=Principal&method=detall_completa&numPagina=1&idHit=11236&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=11236&titol=apostrofaci%F3%20davant%20de%20xifres%20%2F%20apostrofaci%F3%20davant%20de%201%20i%2011&numeroResultat=1&clickLink=detall&tipusCerca=cerca.normes\n */\n\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"menys d'un segon\",\n    eleven: \"menys d'onze segons\",\n    other: 'menys de {{count}} segons'\n  },\n  xSeconds: {\n    one: '1 segon',\n    other: '{{count}} segons'\n  },\n  halfAMinute: 'mig minut',\n  lessThanXMinutes: {\n    one: \"menys d'un minut\",\n    eleven: \"menys d'onze minuts\",\n    other: 'menys de {{count}} minuts'\n  },\n  xMinutes: {\n    one: '1 minut',\n    other: '{{count}} minuts'\n  },\n  aboutXHours: {\n    one: 'aproximadament una hora',\n    other: 'aproximadament {{count}} hores'\n  },\n  xHours: {\n    one: '1 hora',\n    other: '{{count}} hores'\n  },\n  xDays: {\n    one: '1 dia',\n    other: '{{count}} dies'\n  },\n  aboutXWeeks: {\n    one: 'aproximadament una setmana',\n    other: 'aproximadament {{count}} setmanes'\n  },\n  xWeeks: {\n    one: '1 setmana',\n    other: '{{count}} setmanes'\n  },\n  aboutXMonths: {\n    one: 'aproximadament un mes',\n    other: 'aproximadament {{count}} mesos'\n  },\n  xMonths: {\n    one: '1 mes',\n    other: '{{count}} mesos'\n  },\n  aboutXYears: {\n    one: 'aproximadament un any',\n    other: 'aproximadament {{count}} anys'\n  },\n  xYears: {\n    one: '1 any',\n    other: '{{count}} anys'\n  },\n  overXYears: {\n    one: \"més d'un any\",\n    eleven: \"més d'onze anys\",\n    other: 'més de {{count}} anys'\n  },\n  almostXYears: {\n    one: 'gairebé un any',\n    other: 'gairebé {{count}} anys'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 11 && tokenValue.eleven) {\n    result = tokenValue.eleven;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'en ' + result;\n    } else {\n      return 'fa ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d 'de' MMMM y\",\n  long: \"d 'de' MMMM y\",\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'a les' {{time}}\",\n  long: \"{{date}} 'a les' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'el' eeee 'passat a la' LT\",\n  yesterday: \"'ahir a la' p\",\n  today: \"'avui a la' p\",\n  tomorrow: \"'demà a la' p\",\n  nextWeek: \"eeee 'a la' p\",\n  other: 'P'\n};\nvar formatRelativeLocalePlural = {\n  lastWeek: \"'el' eeee 'passat a les' p\",\n  yesterday: \"'ahir a les' p\",\n  today: \"'avui a les' p\",\n  tomorrow: \"'demà a les' p\",\n  nextWeek: \"eeee 'a les' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  if (date.getUTCHours() !== 1) {\n    return formatRelativeLocalePlural[token];\n  }\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Catalan locale.\n * @language Catalan\n * @iso-639-2 cat\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Alex Vizcaino [@avizcaino]{@link https://github.com/avizcaino}\n */\nvar locale = {\n  code: 'ca',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;\n\n// throw new Error('ca locale is currently unavailable. Please check the progress of converting this locale to v2.0.0 in this issue on Github: TBA')","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\n/**\n * General information\n * Reference: https://aplicacions.llengua.gencat.cat\n * Reference: https://www.uoc.edu/portal/ca/servei-linguistic/convencions/abreviacions/simbols/simbols-habituals.html\n */\n/**\n * Abans de Crist: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=abans+de+crist&action=Principal&method=detall_completa&numPagina=1&idHit=6876&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=6876&titol=abans%20de%20Crist%20(abreviatura)%20/%20abans%20de%20Crist%20(sigla)&numeroResultat=1&clickLink=detall&tipusCerca=cerca.fitxes\n * Desprest de Crist: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=despr%E9s+de+crist&action=Principal&method=detall_completa&numPagina=1&idHit=6879&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=6879&titol=despr%E9s%20de%20Crist%20(sigla)%20/%20despr%E9s%20de%20Crist%20(abreviatura)&numeroResultat=1&clickLink=detall&tipusCerca=cerca.fitxes\n */\nvar eraValues = {\n  narrow: ['aC', 'dC'],\n  abbreviated: ['a. de C.', 'd. de C.'],\n  wide: ['abans de Crist', 'després de Crist']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1r trimestre', '2n trimestre', '3r trimestre', '4t trimestre']\n};\n\n/**\n * Dins d'un text convé fer servir la forma sencera dels mesos, ja que sempre és més clar el mot sencer que l'abreviatura, encara que aquesta sigui força coneguda.\n * Cal reservar, doncs, les abreviatures per a les llistes o classificacions, els gràfics, les taules o quadres estadístics, els textos publicitaris, etc.\n *\n * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=abreviacions+mesos&action=Principal&method=detall_completa&numPagina=1&idHit=8402&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=8402&titol=abreviatures%20dels%20mesos%20de%20l%27any&numeroResultat=5&clickLink=detall&tipusCerca=cerca.fitxes\n */\nvar monthValues = {\n  narrow: ['GN', 'FB', 'MÇ', 'AB', 'MG', 'JN', 'JL', 'AG', 'ST', 'OC', 'NV', 'DS'],\n  /**\n   * Les abreviatures dels mesos de l'any es formen seguint una de les normes generals de formació d'abreviatures.\n   * S'escriu la primera síl·laba i les consonants de la síl·laba següent anteriors a la primera vocal.\n   * Els mesos de març, maig i juny no s'abreugen perquè són paraules d'una sola síl·laba.\n   */\n  abbreviated: ['gen.', 'febr.', 'març', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'],\n  wide: ['gener', 'febrer', 'març', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre']\n};\n\n/**\n * Les abreviatures dels dies de la setmana comencen totes amb la lletra d.\n * Tot seguit porten la consonant següent a la i, excepte en el cas de dimarts, dimecres i diumenge, en què aquesta consonant és la m i, per tant, hi podria haver confusió.\n * Per evitar-ho, s'ha substituït la m per una t (en el cas de dimarts), una c (en el cas de dimecres) i una g (en el cas de diumenge), respectivament.\n *\n * Seguint la norma general d'ús de les abreviatures, les dels dies de la setmana sempre porten punt final.\n * Igualment, van amb la primera lletra en majúscula quan la paraula sencera també hi aniria.\n * En canvi, van amb la primera lletra en minúscula quan la inicial de la paraula sencera també hi aniria.\n *\n * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?input_cercar=abreviatures+dies&action=Principal&method=detall_completa&numPagina=1&idHit=8387&database=FITXES_PUB&tipusFont=Fitxes%20de%20l%27Optimot&idFont=8387&titol=abreviatures%20dels%20dies%20de%20la%20setmana&numeroResultat=1&clickLink=detall&tipusCerca=cerca.tot\n */\nvar dayValues = {\n  narrow: ['dg.', 'dl.', 'dt.', 'dm.', 'dj.', 'dv.', 'ds.'],\n  short: ['dg.', 'dl.', 'dt.', 'dm.', 'dj.', 'dv.', 'ds.'],\n  abbreviated: ['dg.', 'dl.', 'dt.', 'dm.', 'dj.', 'dv.', 'ds.'],\n  wide: ['diumenge', 'dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte']\n};\n\n/**\n * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/index.html?action=Principal&method=detall&input_cercar=parts+del+dia&numPagina=1&database=FITXES_PUB&idFont=12801&idHit=12801&tipusFont=Fitxes+de+l%27Optimot&numeroResultat=1&databases_avansada=&categories_avansada=&clickLink=detall&titol=Nom+de+les+parts+del+dia&tematica=&tipusCerca=cerca.fitxes\n */\nvar dayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'mitjanit',\n    noon: 'migdia',\n    morning: 'matí',\n    afternoon: 'tarda',\n    evening: 'vespre',\n    night: 'nit'\n  },\n  abbreviated: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'mitjanit',\n    noon: 'migdia',\n    morning: 'matí',\n    afternoon: 'tarda',\n    evening: 'vespre',\n    night: 'nit'\n  },\n  wide: {\n    am: 'ante meridiem',\n    pm: 'post meridiem',\n    midnight: 'mitjanit',\n    noon: 'migdia',\n    morning: 'matí',\n    afternoon: 'tarda',\n    evening: 'vespre',\n    night: 'nit'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'de la mitjanit',\n    noon: 'del migdia',\n    morning: 'del matí',\n    afternoon: 'de la tarda',\n    evening: 'del vespre',\n    night: 'de la nit'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'de la mitjanit',\n    noon: 'del migdia',\n    morning: 'del matí',\n    afternoon: 'de la tarda',\n    evening: 'del vespre',\n    night: 'de la nit'\n  },\n  wide: {\n    am: 'ante meridiem',\n    pm: 'post meridiem',\n    midnight: 'de la mitjanit',\n    noon: 'del migdia',\n    morning: 'del matí',\n    afternoon: 'de la tarda',\n    evening: 'del vespre',\n    night: 'de la nit'\n  }\n};\n\n/**\n * Quan van en singular, els nombres ordinals es representen, en forma d’abreviatura, amb la xifra seguida de l’última lletra del mot desplegat.\n * És optatiu posar punt després de la lletra.\n *\n * Reference: https://aplicacions.llengua.gencat.cat/llc/AppJava/pdf/abrevia.pdf#page=18\n */\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'r';\n      case 2:\n        return number + 'n';\n      case 3:\n        return number + 'r';\n      case 4:\n        return number + 't';\n    }\n  }\n  return number + 'è';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(è|r|n|r|t)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(aC|dC)/i,\n  abbreviated: /^(a. de C.|d. de C.)/i,\n  wide: /^(abans de Crist|despr[eé]s de Crist)/i\n};\nvar parseEraPatterns = {\n  narrow: [/^aC/i, /^dC/i],\n  abbreviated: [/^(a. de C.)/i, /^(d. de C.)/i],\n  wide: [/^(abans de Crist)/i, /^(despr[eé]s de Crist)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^[1234](è|r|n|r|t)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(GN|FB|MÇ|AB|MG|JN|JL|AG|ST|OC|NV|DS)/i,\n  abbreviated: /^(gen.|febr.|març|abr.|maig|juny|jul.|ag.|set.|oct.|nov.|des.)/i,\n  wide: /^(gener|febrer|març|abril|maig|juny|juliol|agost|setembre|octubre|novembre|desembre)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^GN/i, /^FB/i, /^MÇ/i, /^AB/i, /^MG/i, /^JN/i, /^JL/i, /^AG/i, /^ST/i, /^OC/i, /^NV/i, /^DS/i],\n  abbreviated: [/^gen./i, /^febr./i, /^març/i, /^abr./i, /^maig/i, /^juny/i, /^jul./i, /^ag./i, /^set./i, /^oct./i, /^nov./i, /^des./i],\n  wide: [/^gener/i, /^febrer/i, /^març/i, /^abril/i, /^maig/i, /^juny/i, /^juliol/i, /^agost/i, /^setembre/i, /^octubre/i, /^novembre/i, /^desembre/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(dg\\.|dl\\.|dt\\.|dm\\.|dj\\.|dv\\.|ds\\.)/i,\n  short: /^(dg\\.|dl\\.|dt\\.|dm\\.|dj\\.|dv\\.|ds\\.)/i,\n  abbreviated: /^(dg\\.|dl\\.|dt\\.|dm\\.|dj\\.|dv\\.|ds\\.)/i,\n  wide: /^(diumenge|dilluns|dimarts|dimecres|dijous|divendres|dissabte)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^dg./i, /^dl./i, /^dt./i, /^dm./i, /^dj./i, /^dv./i, /^ds./i],\n  abbreviated: [/^dg./i, /^dl./i, /^dt./i, /^dm./i, /^dj./i, /^dv./i, /^ds./i],\n  wide: [/^diumenge/i, /^dilluns/i, /^dimarts/i, /^dimecres/i, /^dijous/i, /^divendres/i, /^disssabte/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mn|md|(del|de la) (matí|tarda|vespre|nit))/i,\n  abbreviated: /^([ap]\\.?\\s?m\\.?|mitjanit|migdia|(del|de la) (matí|tarda|vespre|nit))/i,\n  wide: /^(ante meridiem|post meridiem|mitjanit|migdia|(del|de la) (matí|tarda|vespre|nit))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mitjanit/i,\n    noon: /^migdia/i,\n    morning: /matí/i,\n    afternoon: /tarda/i,\n    evening: /vespre/i,\n    night: /nit/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      regular: 'méně než sekunda',\n      past: 'před méně než sekundou',\n      future: 'za méně než sekundu'\n    },\n    few: {\n      regular: 'méně než {{count}} sekundy',\n      past: 'před méně než {{count}} sekundami',\n      future: 'za méně než {{count}} sekundy'\n    },\n    many: {\n      regular: 'méně než {{count}} sekund',\n      past: 'před méně než {{count}} sekundami',\n      future: 'za méně než {{count}} sekund'\n    }\n  },\n  xSeconds: {\n    one: {\n      regular: 'sekunda',\n      past: 'před sekundou',\n      future: 'za sekundu'\n    },\n    few: {\n      regular: '{{count}} sekundy',\n      past: 'před {{count}} sekundami',\n      future: 'za {{count}} sekundy'\n    },\n    many: {\n      regular: '{{count}} sekund',\n      past: 'před {{count}} sekundami',\n      future: 'za {{count}} sekund'\n    }\n  },\n  halfAMinute: {\n    type: 'other',\n    other: {\n      regular: 'půl minuty',\n      past: 'před půl minutou',\n      future: 'za půl minuty'\n    }\n  },\n  lessThanXMinutes: {\n    one: {\n      regular: 'méně než minuta',\n      past: 'před méně než minutou',\n      future: 'za méně než minutu'\n    },\n    few: {\n      regular: 'méně než {{count}} minuty',\n      past: 'před méně než {{count}} minutami',\n      future: 'za méně než {{count}} minuty'\n    },\n    many: {\n      regular: 'méně než {{count}} minut',\n      past: 'před méně než {{count}} minutami',\n      future: 'za méně než {{count}} minut'\n    }\n  },\n  xMinutes: {\n    one: {\n      regular: 'minuta',\n      past: 'před minutou',\n      future: 'za minutu'\n    },\n    few: {\n      regular: '{{count}} minuty',\n      past: 'před {{count}} minutami',\n      future: 'za {{count}} minuty'\n    },\n    many: {\n      regular: '{{count}} minut',\n      past: 'před {{count}} minutami',\n      future: 'za {{count}} minut'\n    }\n  },\n  aboutXHours: {\n    one: {\n      regular: 'přibližně hodina',\n      past: 'přibližně před hodinou',\n      future: 'přibližně za hodinu'\n    },\n    few: {\n      regular: 'přibližně {{count}} hodiny',\n      past: 'přibližně před {{count}} hodinami',\n      future: 'přibližně za {{count}} hodiny'\n    },\n    many: {\n      regular: 'přibližně {{count}} hodin',\n      past: 'přibližně před {{count}} hodinami',\n      future: 'přibližně za {{count}} hodin'\n    }\n  },\n  xHours: {\n    one: {\n      regular: 'hodina',\n      past: 'před hodinou',\n      future: 'za hodinu'\n    },\n    few: {\n      regular: '{{count}} hodiny',\n      past: 'před {{count}} hodinami',\n      future: 'za {{count}} hodiny'\n    },\n    many: {\n      regular: '{{count}} hodin',\n      past: 'před {{count}} hodinami',\n      future: 'za {{count}} hodin'\n    }\n  },\n  xDays: {\n    one: {\n      regular: 'den',\n      past: 'před dnem',\n      future: 'za den'\n    },\n    few: {\n      regular: '{{count}} dny',\n      past: 'před {{count}} dny',\n      future: 'za {{count}} dny'\n    },\n    many: {\n      regular: '{{count}} dní',\n      past: 'před {{count}} dny',\n      future: 'za {{count}} dní'\n    }\n  },\n  aboutXWeeks: {\n    one: {\n      regular: 'přibližně týden',\n      past: 'přibližně před týdnem',\n      future: 'přibližně za týden'\n    },\n    few: {\n      regular: 'přibližně {{count}} týdny',\n      past: 'přibližně před {{count}} týdny',\n      future: 'přibližně za {{count}} týdny'\n    },\n    many: {\n      regular: 'přibližně {{count}} týdnů',\n      past: 'přibližně před {{count}} týdny',\n      future: 'přibližně za {{count}} týdnů'\n    }\n  },\n  xWeeks: {\n    one: {\n      regular: 'týden',\n      past: 'před týdnem',\n      future: 'za týden'\n    },\n    few: {\n      regular: '{{count}} týdny',\n      past: 'před {{count}} týdny',\n      future: 'za {{count}} týdny'\n    },\n    many: {\n      regular: '{{count}} týdnů',\n      past: 'před {{count}} týdny',\n      future: 'za {{count}} týdnů'\n    }\n  },\n  aboutXMonths: {\n    one: {\n      regular: 'přibližně měsíc',\n      past: 'přibližně před měsícem',\n      future: 'přibližně za měsíc'\n    },\n    few: {\n      regular: 'přibližně {{count}} měsíce',\n      past: 'přibližně před {{count}} měsíci',\n      future: 'přibližně za {{count}} měsíce'\n    },\n    many: {\n      regular: 'přibližně {{count}} měsíců',\n      past: 'přibližně před {{count}} měsíci',\n      future: 'přibližně za {{count}} měsíců'\n    }\n  },\n  xMonths: {\n    one: {\n      regular: 'měsíc',\n      past: 'před měsícem',\n      future: 'za měsíc'\n    },\n    few: {\n      regular: '{{count}} měsíce',\n      past: 'před {{count}} měsíci',\n      future: 'za {{count}} měsíce'\n    },\n    many: {\n      regular: '{{count}} měsíců',\n      past: 'před {{count}} měsíci',\n      future: 'za {{count}} měsíců'\n    }\n  },\n  aboutXYears: {\n    one: {\n      regular: 'přibližně rok',\n      past: 'přibližně před rokem',\n      future: 'přibližně za rok'\n    },\n    few: {\n      regular: 'přibližně {{count}} roky',\n      past: 'přibližně před {{count}} roky',\n      future: 'přibližně za {{count}} roky'\n    },\n    many: {\n      regular: 'přibližně {{count}} roků',\n      past: 'přibližně před {{count}} roky',\n      future: 'přibližně za {{count}} roků'\n    }\n  },\n  xYears: {\n    one: {\n      regular: 'rok',\n      past: 'před rokem',\n      future: 'za rok'\n    },\n    few: {\n      regular: '{{count}} roky',\n      past: 'před {{count}} roky',\n      future: 'za {{count}} roky'\n    },\n    many: {\n      regular: '{{count}} roků',\n      past: 'před {{count}} roky',\n      future: 'za {{count}} roků'\n    }\n  },\n  overXYears: {\n    one: {\n      regular: 'více než rok',\n      past: 'před více než rokem',\n      future: 'za více než rok'\n    },\n    few: {\n      regular: 'více než {{count}} roky',\n      past: 'před více než {{count}} roky',\n      future: 'za více než {{count}} roky'\n    },\n    many: {\n      regular: 'více než {{count}} roků',\n      past: 'před více než {{count}} roky',\n      future: 'za více než {{count}} roků'\n    }\n  },\n  almostXYears: {\n    one: {\n      regular: 'skoro rok',\n      past: 'skoro před rokem',\n      future: 'skoro za rok'\n    },\n    few: {\n      regular: 'skoro {{count}} roky',\n      past: 'skoro před {{count}} roky',\n      future: 'skoro za {{count}} roky'\n    },\n    many: {\n      regular: 'skoro {{count}} roků',\n      past: 'skoro před {{count}} roky',\n      future: 'skoro za {{count}} roků'\n    }\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var pluralResult;\n  var tokenValue = formatDistanceLocale[token];\n\n  // cs pluralization\n  if (tokenValue.type === 'other') {\n    pluralResult = tokenValue.other;\n  } else if (count === 1) {\n    pluralResult = tokenValue.one;\n  } else if (count > 1 && count < 5) {\n    pluralResult = tokenValue.few;\n  } else {\n    pluralResult = tokenValue.many;\n  }\n\n  // times\n  var suffixExist = (options === null || options === void 0 ? void 0 : options.addSuffix) === true;\n  var comparison = options === null || options === void 0 ? void 0 : options.comparison;\n  var timeResult;\n  if (suffixExist && comparison === -1) {\n    timeResult = pluralResult.past;\n  } else if (suffixExist && comparison === 1) {\n    timeResult = pluralResult.future;\n  } else {\n    timeResult = pluralResult.regular;\n  }\n  return timeResult.replace('{{count}}', String(count));\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d. MMMM yyyy',\n  long: 'd. MMMM yyyy',\n  medium: 'd. M. yyyy',\n  short: 'dd.MM.yyyy'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'v' {{time}}\",\n  long: \"{{date}} 'v' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var accusativeWeekdays = ['neděli', 'pondělí', 'úterý', 'středu', 'čtvrtek', 'pátek', 'sobotu'];\nvar formatRelativeLocale = {\n  lastWeek: \"'poslední' eeee 've' p\",\n  yesterday: \"'včera v' p\",\n  today: \"'dnes v' p\",\n  tomorrow: \"'zítra v' p\",\n  nextWeek: function nextWeek(date) {\n    var day = date.getUTCDay();\n    return \"'v \" + accusativeWeekdays[day] + \" o' p\";\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Czech locale.\n * @language Czech\n * @iso-639-2 ces\n * @author David Rus [@davidrus]{@link https://github.com/davidrus}\n * @author Pavel Hrách [@SilenY]{@link https://github.com/SilenY}\n * @author Jozef Bíroš [@JozefBiros]{@link https://github.com/JozefBiros}\n */\nvar locale = {\n  code: 'cs',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['př. n. l.', 'n. l.'],\n  abbreviated: ['př. n. l.', 'n. l.'],\n  wide: ['před naším letopočtem', 'našeho letopočtu']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1. čtvrtletí', '2. čtvrtletí', '3. čtvrtletí', '4. čtvrtletí'],\n  wide: ['1. čtvrtletí', '2. čtvrtletí', '3. čtvrtletí', '4. čtvrtletí']\n};\nvar monthValues = {\n  narrow: ['L', 'Ú', 'B', 'D', 'K', 'Č', 'Č', 'S', 'Z', 'Ř', 'L', 'P'],\n  abbreviated: ['led', 'úno', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro'],\n  wide: ['leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec']\n};\nvar formattingMonthValues = {\n  narrow: ['L', 'Ú', 'B', 'D', 'K', 'Č', 'Č', 'S', 'Z', 'Ř', 'L', 'P'],\n  abbreviated: ['led', 'úno', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro'],\n  wide: ['ledna', 'února', 'března', 'dubna', 'května', 'června', 'července', 'srpna', 'září', 'října', 'listopadu', 'prosince']\n};\nvar dayValues = {\n  narrow: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],\n  short: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],\n  abbreviated: ['ned', 'pon', 'úte', 'stř', 'čtv', 'pát', 'sob'],\n  wide: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'dop.',\n    pm: 'odp.',\n    midnight: 'půlnoc',\n    noon: 'poledne',\n    morning: 'ráno',\n    afternoon: 'odpoledne',\n    evening: 'večer',\n    night: 'noc'\n  },\n  abbreviated: {\n    am: 'dop.',\n    pm: 'odp.',\n    midnight: 'půlnoc',\n    noon: 'poledne',\n    morning: 'ráno',\n    afternoon: 'odpoledne',\n    evening: 'večer',\n    night: 'noc'\n  },\n  wide: {\n    am: 'dopoledne',\n    pm: 'odpoledne',\n    midnight: 'půlnoc',\n    noon: 'poledne',\n    morning: 'ráno',\n    afternoon: 'odpoledne',\n    evening: 'večer',\n    night: 'noc'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'dop.',\n    pm: 'odp.',\n    midnight: 'půlnoc',\n    noon: 'poledne',\n    morning: 'ráno',\n    afternoon: 'odpoledne',\n    evening: 'večer',\n    night: 'noc'\n  },\n  abbreviated: {\n    am: 'dop.',\n    pm: 'odp.',\n    midnight: 'půlnoc',\n    noon: 'poledne',\n    morning: 'ráno',\n    afternoon: 'odpoledne',\n    evening: 'večer',\n    night: 'noc'\n  },\n  wide: {\n    am: 'dopoledne',\n    pm: 'odpoledne',\n    midnight: 'půlnoc',\n    noon: 'poledne',\n    morning: 'ráno',\n    afternoon: 'odpoledne',\n    evening: 'večer',\n    night: 'noc'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\.?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(p[řr](\\.|ed) Kr\\.|p[řr](\\.|ed) n\\. l\\.|po Kr\\.|n\\. l\\.)/i,\n  abbreviated: /^(p[řr](\\.|ed) Kr\\.|p[řr](\\.|ed) n\\. l\\.|po Kr\\.|n\\. l\\.)/i,\n  wide: /^(p[řr](\\.|ed) Kristem|p[řr](\\.|ed) na[šs][íi]m letopo[čc]tem|po Kristu|na[šs]eho letopo[čc]tu)/i\n};\nvar parseEraPatterns = {\n  any: [/^p[řr]/i, /^(po|n)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]\\. [čc]tvrtlet[íi]/i,\n  wide: /^[1234]\\. [čc]tvrtlet[íi]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[lúubdkčcszřrlp]/i,\n  abbreviated: /^(led|[úu]no|b[řr]e|dub|kv[ěe]|[čc]vn|[čc]vc|srp|z[áa][řr]|[řr][íi]j|lis|pro)/i,\n  wide: /^(leden|ledna|[úu]nora?|b[řr]ezen|b[řr]ezna|duben|dubna|kv[ěe]ten|kv[ěe]tna|[čc]erven(ec|ce)?|[čc]ervna|srpen|srpna|z[áa][řr][íi]|[řr][íi]jen|[řr][íi]jna|listopad(a|u)?|prosinec|prosince)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^l/i, /^[úu]/i, /^b/i, /^d/i, /^k/i, /^[čc]/i, /^[čc]/i, /^s/i, /^z/i, /^[řr]/i, /^l/i, /^p/i],\n  any: [/^led/i, /^[úu]n/i, /^b[řr]e/i, /^dub/i, /^kv[ěe]/i, /^[čc]vn|[čc]erven(?!\\w)|[čc]ervna/i, /^[čc]vc|[čc]erven(ec|ce)/i, /^srp/i, /^z[áa][řr]/i, /^[řr][íi]j/i, /^lis/i, /^pro/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[npuúsčps]/i,\n  short: /^(ne|po|[úu]t|st|[čc]t|p[áa]|so)/i,\n  abbreviated: /^(ned|pon|[úu]te|st[rř]|[čc]tv|p[áa]t|sob)/i,\n  wide: /^(ned[ěe]le|pond[ěe]l[íi]|[úu]ter[ýy]|st[řr]eda|[čc]tvrtek|p[áa]tek|sobota)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^n/i, /^p/i, /^[úu]/i, /^s/i, /^[čc]/i, /^p/i, /^s/i],\n  any: [/^ne/i, /^po/i, /^[úu]t/i, /^st/i, /^[čc]t/i, /^p[áa]/i, /^so/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^dopoledne|dop\\.?|odpoledne|odp\\.?|p[ůu]lnoc|poledne|r[áa]no|odpoledne|ve[čc]er|(v )?noci?/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^dop/i,\n    pm: /^odp/i,\n    midnight: /^p[ůu]lnoc/i,\n    noon: /^poledne/i,\n    morning: /r[áa]no/i,\n    afternoon: /odpoledne/i,\n    evening: /ve[čc]er/i,\n    night: /noc/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'llai na eiliad',\n    other: 'llai na {{count}} eiliad'\n  },\n  xSeconds: {\n    one: '1 eiliad',\n    other: '{{count}} eiliad'\n  },\n  halfAMinute: 'hanner munud',\n  lessThanXMinutes: {\n    one: 'llai na munud',\n    two: 'llai na 2 funud',\n    other: 'llai na {{count}} munud'\n  },\n  xMinutes: {\n    one: '1 munud',\n    two: '2 funud',\n    other: '{{count}} munud'\n  },\n  aboutXHours: {\n    one: 'tua 1 awr',\n    other: 'tua {{count}} awr'\n  },\n  xHours: {\n    one: '1 awr',\n    other: '{{count}} awr'\n  },\n  xDays: {\n    one: '1 diwrnod',\n    two: '2 ddiwrnod',\n    other: '{{count}} diwrnod'\n  },\n  aboutXWeeks: {\n    one: 'tua 1 wythnos',\n    two: 'tua pythefnos',\n    other: 'tua {{count}} wythnos'\n  },\n  xWeeks: {\n    one: '1 wythnos',\n    two: 'pythefnos',\n    other: '{{count}} wythnos'\n  },\n  aboutXMonths: {\n    one: 'tua 1 mis',\n    two: 'tua 2 fis',\n    other: 'tua {{count}} mis'\n  },\n  xMonths: {\n    one: '1 mis',\n    two: '2 fis',\n    other: '{{count}} mis'\n  },\n  aboutXYears: {\n    one: 'tua 1 flwyddyn',\n    two: 'tua 2 flynedd',\n    other: 'tua {{count}} mlynedd'\n  },\n  xYears: {\n    one: '1 flwyddyn',\n    two: '2 flynedd',\n    other: '{{count}} mlynedd'\n  },\n  overXYears: {\n    one: 'dros 1 flwyddyn',\n    two: 'dros 2 flynedd',\n    other: 'dros {{count}} mlynedd'\n  },\n  almostXYears: {\n    one: 'bron 1 flwyddyn',\n    two: 'bron 2 flynedd',\n    other: 'bron {{count}} mlynedd'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 2 && !!tokenValue.two) {\n    result = tokenValue.two;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'mewn ' + result;\n    } else {\n      return result + ' yn ôl';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'am' {{time}}\",\n  long: \"{{date}} 'am' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'diwethaf am' p\",\n  yesterday: \"'ddoe am' p\",\n  today: \"'heddiw am' p\",\n  tomorrow: \"'yfory am' p\",\n  nextWeek: \"eeee 'am' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Welsh locale.\n * @language Welsh\n * @iso-639-2 cym\n * @author Elwyn Malethan [@elmomalmo]{@link https://github.com/elmomalmo}\n */\nvar locale = {\n  code: 'cy',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['C', 'O'],\n  abbreviated: ['CC', 'OC'],\n  wide: ['Cyn Crist', 'Ar ôl Crist']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Ch1', 'Ch2', 'Ch3', 'Ch4'],\n  wide: ['Chwarter 1af', '2ail chwarter', '3ydd chwarter', '4ydd chwarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['I', 'Ch', 'Ma', 'E', 'Mi', 'Me', 'G', 'A', 'Md', 'H', 'T', 'Rh'],\n  abbreviated: ['Ion', 'Chwe', 'Maw', 'Ebr', 'Mai', 'Meh', 'Gor', 'Aws', 'Med', 'Hyd', 'Tach', 'Rhag'],\n  wide: ['Ionawr', 'Chwefror', 'Mawrth', 'Ebrill', 'Mai', 'Mehefin', 'Gorffennaf', 'Awst', 'Medi', 'Hydref', 'Tachwedd', 'Rhagfyr']\n};\nvar dayValues = {\n  narrow: ['S', 'Ll', 'M', 'M', 'I', 'G', 'S'],\n  short: ['Su', 'Ll', 'Ma', 'Me', 'Ia', 'Gw', 'Sa'],\n  abbreviated: ['Sul', 'Llun', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],\n  wide: ['dydd Sul', 'dydd Llun', 'dydd Mawrth', 'dydd Mercher', 'dydd Iau', 'dydd Gwener', 'dydd Sadwrn']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'b',\n    pm: 'h',\n    midnight: 'hn',\n    noon: 'hd',\n    morning: 'bore',\n    afternoon: 'prynhawn',\n    evening: \"gyda'r nos\",\n    night: 'nos'\n  },\n  abbreviated: {\n    am: 'yb',\n    pm: 'yh',\n    midnight: 'hanner nos',\n    noon: 'hanner dydd',\n    morning: 'bore',\n    afternoon: 'prynhawn',\n    evening: \"gyda'r nos\",\n    night: 'nos'\n  },\n  wide: {\n    am: 'y.b.',\n    pm: 'y.h.',\n    midnight: 'hanner nos',\n    noon: 'hanner dydd',\n    morning: 'bore',\n    afternoon: 'prynhawn',\n    evening: \"gyda'r nos\",\n    night: 'nos'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'b',\n    pm: 'h',\n    midnight: 'hn',\n    noon: 'hd',\n    morning: 'yn y bore',\n    afternoon: 'yn y prynhawn',\n    evening: \"gyda'r nos\",\n    night: 'yn y nos'\n  },\n  abbreviated: {\n    am: 'yb',\n    pm: 'yh',\n    midnight: 'hanner nos',\n    noon: 'hanner dydd',\n    morning: 'yn y bore',\n    afternoon: 'yn y prynhawn',\n    evening: \"gyda'r nos\",\n    night: 'yn y nos'\n  },\n  wide: {\n    am: 'y.b.',\n    pm: 'y.h.',\n    midnight: 'hanner nos',\n    noon: 'hanner dydd',\n    morning: 'yn y bore',\n    afternoon: 'yn y prynhawn',\n    evening: \"gyda'r nos\",\n    night: 'yn y nos'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  if (number < 20) {\n    switch (number) {\n      case 0:\n        return number + 'fed';\n      case 1:\n        return number + 'af';\n      case 2:\n        return number + 'ail';\n      case 3:\n      case 4:\n        return number + 'ydd';\n      case 5:\n      case 6:\n        return number + 'ed';\n      case 7:\n      case 8:\n      case 9:\n      case 10:\n      case 12:\n      case 15:\n      case 18:\n        return number + 'fed';\n      case 11:\n      case 13:\n      case 14:\n      case 16:\n      case 17:\n      case 19:\n        return number + 'eg';\n    }\n  } else if (number >= 50 && number <= 60 || number === 80 || number >= 100) {\n    return number + 'fed';\n  }\n  return number + 'ain';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(af|ail|ydd|ed|fed|eg|ain)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(c|o)/i,\n  abbreviated: /^(c\\.?\\s?c\\.?|o\\.?\\s?c\\.?)/i,\n  wide: /^(cyn christ|ar ôl crist|ar ol crist)/i\n};\nvar parseEraPatterns = {\n  wide: [/^c/i, /^(ar ôl crist|ar ol crist)/i],\n  any: [/^c/i, /^o/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ch[1234]/i,\n  wide: /^(chwarter 1af)|([234](ail|ydd)? chwarter)/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(i|ch|m|e|g|a|h|t|rh)/i,\n  abbreviated: /^(ion|chwe|maw|ebr|mai|meh|gor|aws|med|hyd|tach|rhag)/i,\n  wide: /^(ionawr|chwefror|mawrth|ebrill|mai|mehefin|gorffennaf|awst|medi|hydref|tachwedd|rhagfyr)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^i/i, /^ch/i, /^m/i, /^e/i, /^m/i, /^m/i, /^g/i, /^a/i, /^m/i, /^h/i, /^t/i, /^rh/i],\n  any: [/^io/i, /^ch/i, /^maw/i, /^e/i, /^mai/i, /^meh/i, /^g/i, /^a/i, /^med/i, /^h/i, /^t/i, /^rh/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(s|ll|m|i|g)/i,\n  short: /^(su|ll|ma|me|ia|gw|sa)/i,\n  abbreviated: /^(sul|llun|maw|mer|iau|gwe|sad)/i,\n  wide: /^dydd (sul|llun|mawrth|mercher|iau|gwener|sadwrn)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^ll/i, /^m/i, /^m/i, /^i/i, /^g/i, /^s/i],\n  wide: [/^dydd su/i, /^dydd ll/i, /^dydd ma/i, /^dydd me/i, /^dydd i/i, /^dydd g/i, /^dydd sa/i],\n  any: [/^su/i, /^ll/i, /^ma/i, /^me/i, /^i/i, /^g/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(b|h|hn|hd|(yn y|y|yr|gyda'r) (bore|prynhawn|nos|hwyr))/i,\n  any: /^(y\\.?\\s?[bh]\\.?|hanner nos|hanner dydd|(yn y|y|yr|gyda'r) (bore|prynhawn|nos|hwyr))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^b|(y\\.?\\s?b\\.?)/i,\n    pm: /^h|(y\\.?\\s?h\\.?)|(yr hwyr)/i,\n    midnight: /^hn|hanner nos/i,\n    noon: /^hd|hanner dydd/i,\n    morning: /bore/i,\n    afternoon: /prynhawn/i,\n    evening: /^gyda'r nos$/i,\n    night: /blah/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mindre end ét sekund',\n    other: 'mindre end {{count}} sekunder'\n  },\n  xSeconds: {\n    one: '1 sekund',\n    other: '{{count}} sekunder'\n  },\n  halfAMinute: 'ét halvt minut',\n  lessThanXMinutes: {\n    one: 'mindre end ét minut',\n    other: 'mindre end {{count}} minutter'\n  },\n  xMinutes: {\n    one: '1 minut',\n    other: '{{count}} minutter'\n  },\n  aboutXHours: {\n    one: 'cirka 1 time',\n    other: 'cirka {{count}} timer'\n  },\n  xHours: {\n    one: '1 time',\n    other: '{{count}} timer'\n  },\n  xDays: {\n    one: '1 dag',\n    other: '{{count}} dage'\n  },\n  aboutXWeeks: {\n    one: 'cirka 1 uge',\n    other: 'cirka {{count}} uger'\n  },\n  xWeeks: {\n    one: '1 uge',\n    other: '{{count}} uger'\n  },\n  aboutXMonths: {\n    one: 'cirka 1 måned',\n    other: 'cirka {{count}} måneder'\n  },\n  xMonths: {\n    one: '1 måned',\n    other: '{{count}} måneder'\n  },\n  aboutXYears: {\n    one: 'cirka 1 år',\n    other: 'cirka {{count}} år'\n  },\n  xYears: {\n    one: '1 år',\n    other: '{{count}} år'\n  },\n  overXYears: {\n    one: 'over 1 år',\n    other: 'over {{count}} år'\n  },\n  almostXYears: {\n    one: 'næsten 1 år',\n    other: 'næsten {{count}} år'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'om ' + result;\n    } else {\n      return result + ' siden';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE 'den' d. MMMM y\",\n  long: 'd. MMMM y',\n  medium: 'd. MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'kl'. {{time}}\",\n  long: \"{{date}} 'kl'. {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'sidste' eeee 'kl.' p\",\n  yesterday: \"'i går kl.' p\",\n  today: \"'i dag kl.' p\",\n  tomorrow: \"'i morgen kl.' p\",\n  nextWeek: \"'på' eeee 'kl.' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Danish locale.\n * @language Danish\n * @iso-639-2 dan\n * @author Mathias Wøbbe [@MathiasKandelborg]{@link https://github.com/MathiasKandelborg}\n * @author Anders B. Hansen [@Andersbiha]{@link https://github.com/Andersbiha}\n * @author [@kgram]{@link https://github.com/kgram}\n * @author [@stefanbugge]{@link https://github.com/stefanbugge}\n */\nvar locale = {\n  code: 'da',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['fvt', 'vt'],\n  abbreviated: ['f.v.t.', 'v.t.'],\n  wide: ['før vesterlandsk tidsregning', 'vesterlandsk tidsregning']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1. kvt.', '2. kvt.', '3. kvt.', '4. kvt.'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'],\n  wide: ['januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december']\n};\n\n// Note that 'Days - abbreviated - Formatting' has periods at the end.\n// https://www.unicode.org/cldr/charts/32/summary/da.html#1760\n// This makes grammatical sense in danish, as most abbreviations have periods.\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],\n  short: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],\n  abbreviated: ['søn.', 'man.', 'tir.', 'ons.', 'tor.', 'fre.', 'lør.'],\n  wide: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'midnat',\n    noon: 'middag',\n    morning: 'morgen',\n    afternoon: 'eftermiddag',\n    evening: 'aften',\n    night: 'nat'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnat',\n    noon: 'middag',\n    morning: 'morgen',\n    afternoon: 'eftermiddag',\n    evening: 'aften',\n    night: 'nat'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnat',\n    noon: 'middag',\n    morning: 'morgen',\n    afternoon: 'eftermiddag',\n    evening: 'aften',\n    night: 'nat'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'midnat',\n    noon: 'middag',\n    morning: 'om morgenen',\n    afternoon: 'om eftermiddagen',\n    evening: 'om aftenen',\n    night: 'om natten'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnat',\n    noon: 'middag',\n    morning: 'om morgenen',\n    afternoon: 'om eftermiddagen',\n    evening: 'om aftenen',\n    night: 'om natten'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnat',\n    noon: 'middag',\n    morning: 'om morgenen',\n    afternoon: 'om eftermiddagen',\n    evening: 'om aftenen',\n    night: 'om natten'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(fKr|fvt|eKr|vt)/i,\n  abbreviated: /^(f\\.Kr\\.?|f\\.v\\.t\\.?|e\\.Kr\\.?|v\\.t\\.)/i,\n  wide: /^(f.Kr.|før vesterlandsk tidsregning|e.Kr.|vesterlandsk tidsregning)/i\n};\nvar parseEraPatterns = {\n  any: [/^f/i, /^(v|e)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]. kvt\\./i,\n  wide: /^[1234]\\.? kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan.|feb.|mar.|apr.|maj|jun.|jul.|aug.|sep.|okt.|nov.|dec.)/i,\n  wide: /^(januar|februar|marts|april|maj|juni|juli|august|september|oktober|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtofl]/i,\n  short: /^(søn.|man.|tir.|ons.|tor.|fre.|lør.)/i,\n  abbreviated: /^(søn|man|tir|ons|tor|fre|lør)/i,\n  wide: /^(søndag|mandag|tirsdag|onsdag|torsdag|fredag|lørdag)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^o/i, /^t/i, /^f/i, /^l/i],\n  any: [/^s/i, /^m/i, /^ti/i, /^o/i, /^to/i, /^f/i, /^l/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|midnat|middag|(om) (morgenen|eftermiddagen|aftenen|natten))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnat|middag|(om) (morgenen|eftermiddagen|aftenen|natten))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /midnat/i,\n    noon: /middag/i,\n    morning: /morgen/i,\n    afternoon: /eftermiddag/i,\n    evening: /aften/i,\n    night: /nat/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    standalone: {\n      one: 'weniger als 1 Sekunde',\n      other: 'weniger als {{count}} Sekunden'\n    },\n    withPreposition: {\n      one: 'weniger als 1 Sekunde',\n      other: 'weniger als {{count}} Sekunden'\n    }\n  },\n  xSeconds: {\n    standalone: {\n      one: '1 Sekunde',\n      other: '{{count}} Sekunden'\n    },\n    withPreposition: {\n      one: '1 Sekunde',\n      other: '{{count}} Sekunden'\n    }\n  },\n  halfAMinute: {\n    standalone: 'halbe Minute',\n    withPreposition: 'halben Minute'\n  },\n  lessThanXMinutes: {\n    standalone: {\n      one: 'weniger als 1 Minute',\n      other: 'weniger als {{count}} Minuten'\n    },\n    withPreposition: {\n      one: 'weniger als 1 Minute',\n      other: 'weniger als {{count}} Minuten'\n    }\n  },\n  xMinutes: {\n    standalone: {\n      one: '1 Minute',\n      other: '{{count}} Minuten'\n    },\n    withPreposition: {\n      one: '1 Minute',\n      other: '{{count}} Minuten'\n    }\n  },\n  aboutXHours: {\n    standalone: {\n      one: 'etwa 1 Stunde',\n      other: 'etwa {{count}} Stunden'\n    },\n    withPreposition: {\n      one: 'etwa 1 Stunde',\n      other: 'etwa {{count}} Stunden'\n    }\n  },\n  xHours: {\n    standalone: {\n      one: '1 Stunde',\n      other: '{{count}} Stunden'\n    },\n    withPreposition: {\n      one: '1 Stunde',\n      other: '{{count}} Stunden'\n    }\n  },\n  xDays: {\n    standalone: {\n      one: '1 Tag',\n      other: '{{count}} Tage'\n    },\n    withPreposition: {\n      one: '1 Tag',\n      other: '{{count}} Tagen'\n    }\n  },\n  aboutXWeeks: {\n    standalone: {\n      one: 'etwa 1 Woche',\n      other: 'etwa {{count}} Wochen'\n    },\n    withPreposition: {\n      one: 'etwa 1 Woche',\n      other: 'etwa {{count}} Wochen'\n    }\n  },\n  xWeeks: {\n    standalone: {\n      one: '1 Woche',\n      other: '{{count}} Wochen'\n    },\n    withPreposition: {\n      one: '1 Woche',\n      other: '{{count}} Wochen'\n    }\n  },\n  aboutXMonths: {\n    standalone: {\n      one: 'etwa 1 Monat',\n      other: 'etwa {{count}} Monate'\n    },\n    withPreposition: {\n      one: 'etwa 1 Monat',\n      other: 'etwa {{count}} Monaten'\n    }\n  },\n  xMonths: {\n    standalone: {\n      one: '1 Monat',\n      other: '{{count}} Monate'\n    },\n    withPreposition: {\n      one: '1 Monat',\n      other: '{{count}} Monaten'\n    }\n  },\n  aboutXYears: {\n    standalone: {\n      one: 'etwa 1 Jahr',\n      other: 'etwa {{count}} Jahre'\n    },\n    withPreposition: {\n      one: 'etwa 1 Jahr',\n      other: 'etwa {{count}} Jahren'\n    }\n  },\n  xYears: {\n    standalone: {\n      one: '1 Jahr',\n      other: '{{count}} Jahre'\n    },\n    withPreposition: {\n      one: '1 Jahr',\n      other: '{{count}} Jahren'\n    }\n  },\n  overXYears: {\n    standalone: {\n      one: 'mehr als 1 Jahr',\n      other: 'mehr als {{count}} Jahre'\n    },\n    withPreposition: {\n      one: 'mehr als 1 Jahr',\n      other: 'mehr als {{count}} Jahren'\n    }\n  },\n  almostXYears: {\n    standalone: {\n      one: 'fast 1 Jahr',\n      other: 'fast {{count}} Jahre'\n    },\n    withPreposition: {\n      one: 'fast 1 Jahr',\n      other: 'fast {{count}} Jahren'\n    }\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'in ' + result;\n    } else {\n      return 'vor ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n  full: 'EEEE, do MMMM y',\n  // Montag, 7. Januar 2018\n  long: 'do MMMM y',\n  // 7. Januar 2018\n  medium: 'do MMM y',\n  // 7. Jan. 2018\n  short: 'dd.MM.y' // 07.01.2018\n};\n\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'um' {{time}}\",\n  long: \"{{date}} 'um' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'letzten' eeee 'um' p\",\n  yesterday: \"'gestern um' p\",\n  today: \"'heute um' p\",\n  tomorrow: \"'morgen um' p\",\n  nextWeek: \"eeee 'um' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['v.Chr.', 'n.Chr.'],\n  abbreviated: ['v.Chr.', 'n.Chr.'],\n  wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n};\n\n// Note: in German, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n  wide: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n};\n\n// https://st.unicode.org/cldr-apps/v#/de/Gregorian/\nvar formattingMonthValues = {\n  narrow: monthValues.narrow,\n  abbreviated: ['Jan.', 'Feb.', 'März', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n  wide: monthValues.wide\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n  short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n  abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n  wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/de.html#1881\nvar dayPeriodValues = {\n  narrow: {\n    am: 'vm.',\n    pm: 'nm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'Morgen',\n    afternoon: 'Nachm.',\n    evening: 'Abend',\n    night: 'Nacht'\n  },\n  abbreviated: {\n    am: 'vorm.',\n    pm: 'nachm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'Morgen',\n    afternoon: 'Nachmittag',\n    evening: 'Abend',\n    night: 'Nacht'\n  },\n  wide: {\n    am: 'vormittags',\n    pm: 'nachmittags',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'Morgen',\n    afternoon: 'Nachmittag',\n    evening: 'Abend',\n    night: 'Nacht'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'vm.',\n    pm: 'nm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'morgens',\n    afternoon: 'nachm.',\n    evening: 'abends',\n    night: 'nachts'\n  },\n  abbreviated: {\n    am: 'vorm.',\n    pm: 'nachm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'morgens',\n    afternoon: 'nachmittags',\n    evening: 'abends',\n    night: 'nachts'\n  },\n  wide: {\n    am: 'vormittags',\n    pm: 'nachmittags',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'morgens',\n    afternoon: 'nachmittags',\n    evening: 'abends',\n    night: 'nachts'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    formattingValues: formattingMonthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n  abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n  wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n  any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(j[aä]n|feb|mär[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n  wide: /^(januar|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^j[aä]/i, /^f/i, /^mär/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smdmf]/i,\n  short: /^(so|mo|di|mi|do|fr|sa)/i,\n  abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n  wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n  any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n  abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n  wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^v/i,\n    pm: /^n/i,\n    midnight: /^Mitte/i,\n    noon: /^Mitta/i,\n    morning: /morgens/i,\n    afternoon: /nachmittags/i,\n    // will never be matched. Afternoon is matched by `pm`\n    evening: /abends/i,\n    night: /nachts/i // will never be matched. Night is matched by `pm`\n  }\n};\n\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n  code: 'de',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['v.Chr.', 'n.Chr.'],\n  abbreviated: ['v.Chr.', 'n.Chr.'],\n  wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n};\n\n// Note: in German, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jän', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n  wide: ['Jänner', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n};\n\n// https://st.unicode.org/cldr-apps/v#/de_AT/Gregorian/\nvar formattingMonthValues = {\n  narrow: monthValues.narrow,\n  abbreviated: ['Jän.', 'Feb.', 'März', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n  wide: monthValues.wide\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n  short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n  abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n  wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/de.html#1881\nvar dayPeriodValues = {\n  narrow: {\n    am: 'vm.',\n    pm: 'nm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'Morgen',\n    afternoon: 'Nachm.',\n    evening: 'Abend',\n    night: 'Nacht'\n  },\n  abbreviated: {\n    am: 'vorm.',\n    pm: 'nachm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'Morgen',\n    afternoon: 'Nachmittag',\n    evening: 'Abend',\n    night: 'Nacht'\n  },\n  wide: {\n    am: 'vormittags',\n    pm: 'nachmittags',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'Morgen',\n    afternoon: 'Nachmittag',\n    evening: 'Abend',\n    night: 'Nacht'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'vm.',\n    pm: 'nm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'morgens',\n    afternoon: 'nachm.',\n    evening: 'abends',\n    night: 'nachts'\n  },\n  abbreviated: {\n    am: 'vorm.',\n    pm: 'nachm.',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'morgens',\n    afternoon: 'nachmittags',\n    evening: 'abends',\n    night: 'nachts'\n  },\n  wide: {\n    am: 'vormittags',\n    pm: 'nachmittags',\n    midnight: 'Mitternacht',\n    noon: 'Mittag',\n    morning: 'morgens',\n    afternoon: 'nachmittags',\n    evening: 'abends',\n    night: 'nachts'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    formattingValues: formattingMonthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"../de/_lib/formatDistance/index.js\";\nimport formatLong from \"../de/_lib/formatLong/index.js\";\nimport formatRelative from \"../de/_lib/formatRelative/index.js\";\nimport match from \"../de/_lib/match/index.js\";\n// difference to 'de' locale\nimport localize from \"./_lib/localize/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary German locale (Austria).\n * @language German\n * @iso-639-2 deu\n * @author Christoph Tobias Stenglein [@cstenglein]{@link https://github.com/cstenglein}\n */\nvar locale = {\n  code: 'de-AT',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'λιγότερο από ένα δευτερόλεπτο',\n    other: 'λιγότερο από {{count}} δευτερόλεπτα'\n  },\n  xSeconds: {\n    one: '1 δευτερόλεπτο',\n    other: '{{count}} δευτερόλεπτα'\n  },\n  halfAMinute: 'μισό λεπτό',\n  lessThanXMinutes: {\n    one: 'λιγότερο από ένα λεπτό',\n    other: 'λιγότερο από {{count}} λεπτά'\n  },\n  xMinutes: {\n    one: '1 λεπτό',\n    other: '{{count}} λεπτά'\n  },\n  aboutXHours: {\n    one: 'περίπου 1 ώρα',\n    other: 'περίπου {{count}} ώρες'\n  },\n  xHours: {\n    one: '1 ώρα',\n    other: '{{count}} ώρες'\n  },\n  xDays: {\n    one: '1 ημέρα',\n    other: '{{count}} ημέρες'\n  },\n  aboutXWeeks: {\n    one: 'περίπου 1 εβδομάδα',\n    other: 'περίπου {{count}} εβδομάδες'\n  },\n  xWeeks: {\n    one: '1 εβδομάδα',\n    other: '{{count}} εβδομάδες'\n  },\n  aboutXMonths: {\n    one: 'περίπου 1 μήνας',\n    other: 'περίπου {{count}} μήνες'\n  },\n  xMonths: {\n    one: '1 μήνας',\n    other: '{{count}} μήνες'\n  },\n  aboutXYears: {\n    one: 'περίπου 1 χρόνο',\n    other: 'περίπου {{count}} χρόνια'\n  },\n  xYears: {\n    one: '1 χρόνο',\n    other: '{{count}} χρόνια'\n  },\n  overXYears: {\n    one: 'πάνω από 1 χρόνο',\n    other: 'πάνω από {{count}} χρόνια'\n  },\n  almostXYears: {\n    one: 'περίπου 1 χρόνο',\n    other: 'περίπου {{count}} χρόνια'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'σε ' + result;\n    } else {\n      return result + ' πριν';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'd/M/yy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: '{{date}} - {{time}}',\n  long: '{{date}} - {{time}}',\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    switch (date.getUTCDay()) {\n      case 6:\n        //Σάββατο\n        return \"'το προηγούμενο' eeee 'στις' p\";\n      default:\n        return \"'την προηγούμενη' eeee 'στις' p\";\n    }\n  },\n  yesterday: \"'χθες στις' p\",\n  today: \"'σήμερα στις' p\",\n  tomorrow: \"'αύριο στις' p\",\n  nextWeek: \"eeee 'στις' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') return format(date);\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Greek locale.\n * @language Greek\n * @iso-639-2 ell\n * @author Fanis Katsimpas [@fanixk]{@link https://github.com/fanixk}\n * @author Theodoros Orfanidis [@teoulas]{@link https://github.com/teoulas}\n */\nvar locale = {\n  code: 'el',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['πΧ', 'μΧ'],\n  abbreviated: ['π.Χ.', 'μ.Χ.'],\n  wide: ['προ Χριστού', 'μετά Χριστόν']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Τ1', 'Τ2', 'Τ3', 'Τ4'],\n  wide: ['1ο τρίμηνο', '2ο τρίμηνο', '3ο τρίμηνο', '4ο τρίμηνο']\n};\nvar monthValues = {\n  narrow: ['Ι', 'Φ', 'Μ', 'Α', 'Μ', 'Ι', 'Ι', 'Α', 'Σ', 'Ο', 'Ν', 'Δ'],\n  abbreviated: ['Ιαν', 'Φεβ', 'Μάρ', 'Απρ', 'Μάι', 'Ιούν', 'Ιούλ', 'Αύγ', 'Σεπ', 'Οκτ', 'Νοέ', 'Δεκ'],\n  wide: ['Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος']\n};\nvar formattingMonthValues = {\n  narrow: ['Ι', 'Φ', 'Μ', 'Α', 'Μ', 'Ι', 'Ι', 'Α', 'Σ', 'Ο', 'Ν', 'Δ'],\n  abbreviated: ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαΐ', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'],\n  wide: ['Ιανουαρίου', 'Φεβρουαρίου', 'Μαρτίου', 'Απριλίου', 'Μαΐου', 'Ιουνίου', 'Ιουλίου', 'Αυγούστου', 'Σεπτεμβρίου', 'Οκτωβρίου', 'Νοεμβρίου', 'Δεκεμβρίου']\n};\nvar dayValues = {\n  narrow: ['Κ', 'Δ', 'T', 'Τ', 'Π', 'Π', 'Σ'],\n  short: ['Κυ', 'Δε', 'Τρ', 'Τε', 'Πέ', 'Πα', 'Σά'],\n  abbreviated: ['Κυρ', 'Δευ', 'Τρί', 'Τετ', 'Πέμ', 'Παρ', 'Σάβ'],\n  wide: ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'πμ',\n    pm: 'μμ',\n    midnight: 'μεσάνυχτα',\n    noon: 'μεσημέρι',\n    morning: 'πρωί',\n    afternoon: 'απόγευμα',\n    evening: 'βράδυ',\n    night: 'νύχτα'\n  },\n  abbreviated: {\n    am: 'π.μ.',\n    pm: 'μ.μ.',\n    midnight: 'μεσάνυχτα',\n    noon: 'μεσημέρι',\n    morning: 'πρωί',\n    afternoon: 'απόγευμα',\n    evening: 'βράδυ',\n    night: 'νύχτα'\n  },\n  wide: {\n    am: 'π.μ.',\n    pm: 'μ.μ.',\n    midnight: 'μεσάνυχτα',\n    noon: 'μεσημέρι',\n    morning: 'πρωί',\n    afternoon: 'απόγευμα',\n    evening: 'βράδυ',\n    night: 'νύχτα'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  var suffix;\n  if (unit === 'year' || unit === 'month') {\n    suffix = 'ος';\n  } else if (unit === 'week' || unit === 'dayOfYear' || unit === 'day' || unit === 'hour' || unit === 'date') {\n    suffix = 'η';\n  } else {\n    suffix = 'ο';\n  }\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(ος|η|ο)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(πΧ|μΧ)/i,\n  abbreviated: /^(π\\.?\\s?χ\\.?|π\\.?\\s?κ\\.?\\s?χ\\.?|μ\\.?\\s?χ\\.?|κ\\.?\\s?χ\\.?)/i,\n  wide: /^(προ Χριστο(ύ|υ)|πριν απ(ό|ο) την Κοιν(ή|η) Χρονολογ(ί|ι)α|μετ(ά|α) Χριστ(ό|ο)ν|Κοιν(ή|η) Χρονολογ(ί|ι)α)/i\n};\nvar parseEraPatterns = {\n  any: [/^π/i, /^(μ|κ)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^τ[1234]/i,\n  wide: /^[1234]ο? τρ(ί|ι)μηνο/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[ιφμαμιιασονδ]/i,\n  abbreviated: /^(ιαν|φεβ|μ[άα]ρ|απρ|μ[άα][ιΐ]|ιο[ύυ]ν|ιο[ύυ]λ|α[ύυ]γ|σεπ|οκτ|νο[έε]|δεκ)/i,\n  wide: /^(μ[άα][ιΐ]|α[ύυ]γο[υύ]στ)(ος|ου)|(ιανου[άα]ρ|φεβρου[άα]ρ|μ[άα]ρτ|απρ[ίι]λ|ιο[ύυ]ν|ιο[ύυ]λ|σεπτ[έε]μβρ|οκτ[ώω]βρ|νο[έε]μβρ|δεκ[έε]μβρ)(ιος|ίου)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ι/i, /^φ/i, /^μ/i, /^α/i, /^μ/i, /^ι/i, /^ι/i, /^α/i, /^σ/i, /^ο/i, /^ν/i, /^δ/i],\n  any: [/^ια/i, /^φ/i, /^μ[άα]ρ/i, /^απ/i, /^μ[άα][ιΐ]/i, /^ιο[ύυ]ν/i, /^ιο[ύυ]λ/i, /^α[ύυ]/i, /^σ/i, /^ο/i, /^ν/i, /^δ/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[κδτπσ]/i,\n  short: /^(κυ|δε|τρ|τε|π[εέ]|π[αά]|σ[αά])/i,\n  abbreviated: /^(κυρ|δευ|τρι|τετ|πεμ|παρ|σαβ)/i,\n  wide: /^(κυριακ(ή|η)|δευτ(έ|ε)ρα|τρ(ί|ι)τη|τετ(ά|α)ρτη|π(έ|ε)μπτη|παρασκευ(ή|η)|σ(ά|α)ββατο)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^κ/i, /^δ/i, /^τ/i, /^τ/i, /^π/i, /^π/i, /^σ/i],\n  any: [/^κ/i, /^δ/i, /^τρ/i, /^τε/i, /^π[εέ]/i, /^π[αά]/i, /^σ/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(πμ|μμ|μεσ(ά|α)νυχτα|μεσημ(έ|ε)ρι|πρω(ί|ι)|απ(ό|ο)γευμα|βρ(ά|α)δυ|ν(ύ|υ)χτα)/i,\n  any: /^([πμ]\\.?\\s?μ\\.?|μεσ(ά|α)νυχτα|μεσημ(έ|ε)ρι|πρω(ί|ι)|απ(ό|ο)γευμα|βρ(ά|α)δυ|ν(ύ|υ)χτα)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^πμ|π\\.\\s?μ\\./i,\n    pm: /^μμ|μ\\.\\s?μ\\./i,\n    midnight: /^μεσάν/i,\n    noon: /^μεσημ(έ|ε)/i,\n    morning: /πρω(ί|ι)/i,\n    afternoon: /απ(ό|ο)γευμα/i,\n    evening: /βρ(ά|α)δυ/i,\n    night: /ν(ύ|υ)χτα/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (Australia).\n * @language English\n * @iso-639-2 eng\n * @author Julien Malige [@JulienMalige]{@link https://github.com/JulienMalige}\n */\nvar locale = {\n  code: 'en-AU',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n  xSeconds: {\n    one: 'a second',\n    other: '{{count}} seconds'\n  },\n  halfAMinute: 'half a minute',\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n  xMinutes: {\n    one: 'a minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'about an hour',\n    other: 'about {{count}} hours'\n  },\n  xHours: {\n    one: 'an hour',\n    other: '{{count}} hours'\n  },\n  xDays: {\n    one: 'a day',\n    other: '{{count}} days'\n  },\n  aboutXWeeks: {\n    one: 'about a week',\n    other: 'about {{count}} weeks'\n  },\n  xWeeks: {\n    one: 'a week',\n    other: '{{count}} weeks'\n  },\n  aboutXMonths: {\n    one: 'about a month',\n    other: 'about {{count}} months'\n  },\n  xMonths: {\n    one: 'a month',\n    other: '{{count}} months'\n  },\n  aboutXYears: {\n    one: 'about a year',\n    other: 'about {{count}} years'\n  },\n  xYears: {\n    one: 'a year',\n    other: '{{count}} years'\n  },\n  overXYears: {\n    one: 'over a year',\n    other: 'over {{count}} years'\n  },\n  almostXYears: {\n    one: 'almost a year',\n    other: 'almost {{count}} years'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'in ' + result;\n    } else {\n      return result + ' ago';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (Canada).\n * @language English\n * @iso-639-2 eng\n * @author Mark Owsiak [@markowsiak]{@link https://github.com/markowsiak}\n * @author Marco Imperatore [@mimperatore]{@link https://github.com/mimperatore}\n */\nvar locale = {\n  code: 'en-CA',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, yyyy',\n  long: 'MMMM do, yyyy',\n  medium: 'MMM d, yyyy',\n  short: 'yyyy-MM-dd'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\nvar locale = {\n  code: 'en-GB',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"../en-GB/_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (Ireland).\n * @language English\n * @iso-639-2 eng\n * @author Tetiana [@tan75]{@link https://github.com/tan75}\n */\nvar locale = {\n  code: 'en-IE',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM, yyyy',\n  medium: 'd MMM, yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (India).\n * @language English\n * @iso-639-2 eng\n * @author Galeel Bhasha Satthar [@gbhasha]{@link https://github.com/gbhasha}\n */\nvar locale = {\n  code: 'en-IN',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1,\n    // Monday is the first day of the week.\n    firstWeekContainsDate: 4 // The week that contains Jan 4th is the first week of the year.\n  }\n};\n\nexport default locale;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (New Zealand).\n * @language English\n * @iso-639-2 eng\n * @author Murray Lucas [@muntact]{@link https://github.com/muntact}\n */\nvar locale = {\n  code: 'en-NZ',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, dd MMMM yyyy',\n  long: 'dd MMMM yyyy',\n  medium: 'dd MMM yyyy',\n  short: 'yyyy/MM/dd'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (South Africa).\n * @language English\n * @iso-639-2 eng\n * @author Shaila Kavrakova [@shaykav]{@link https://github.com/shaykav}\n */\nvar locale = {\n  code: 'en-ZA',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0,\n    // Sunday is the first day of the week.\n    firstWeekContainsDate: 1 // The week that contains Jan 1st is the first week of the year.\n  }\n};\n\nexport default locale;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'malpli ol sekundo',\n    other: 'malpli ol {{count}} sekundoj'\n  },\n  xSeconds: {\n    one: '1 sekundo',\n    other: '{{count}} sekundoj'\n  },\n  halfAMinute: 'duonminuto',\n  lessThanXMinutes: {\n    one: 'malpli ol minuto',\n    other: 'malpli ol {{count}} minutoj'\n  },\n  xMinutes: {\n    one: '1 minuto',\n    other: '{{count}} minutoj'\n  },\n  aboutXHours: {\n    one: 'proksimume 1 horo',\n    other: 'proksimume {{count}} horoj'\n  },\n  xHours: {\n    one: '1 horo',\n    other: '{{count}} horoj'\n  },\n  xDays: {\n    one: '1 tago',\n    other: '{{count}} tagoj'\n  },\n  aboutXMonths: {\n    one: 'proksimume 1 monato',\n    other: 'proksimume {{count}} monatoj'\n  },\n  xWeeks: {\n    one: '1 semajno',\n    other: '{{count}} semajnoj'\n  },\n  aboutXWeeks: {\n    one: 'proksimume 1 semajno',\n    other: 'proksimume {{count}} semajnoj'\n  },\n  xMonths: {\n    one: '1 monato',\n    other: '{{count}} monatoj'\n  },\n  aboutXYears: {\n    one: 'proksimume 1 jaro',\n    other: 'proksimume {{count}} jaroj'\n  },\n  xYears: {\n    one: '1 jaro',\n    other: '{{count}} jaroj'\n  },\n  overXYears: {\n    one: 'pli ol 1 jaro',\n    other: 'pli ol {{count}} jaroj'\n  },\n  almostXYears: {\n    one: 'preskaŭ 1 jaro',\n    other: 'preskaŭ {{count}} jaroj'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options !== null && options !== void 0 && options.comparison && options.comparison > 0) {\n      return 'post ' + result;\n    } else {\n      return 'antaŭ ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, do 'de' MMMM y\",\n  long: 'y-MMMM-dd',\n  medium: 'y-MMM-dd',\n  short: 'yyyy-MM-dd'\n};\nvar timeFormats = {\n  full: \"Ho 'horo kaj' m:ss zzzz\",\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'pasinta' eeee 'je' p\",\n  yesterday: \"'hieraŭ je' p\",\n  today: \"'hodiaŭ je' p\",\n  tomorrow: \"'morgaŭ je' p\",\n  nextWeek: \"eeee 'je' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Esperanto locale.\n * @language Esperanto\n * @iso-639-2 epo\n * @author date-fns\n */\nvar locale = {\n  code: 'eo',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['aK', 'pK'],\n  abbreviated: ['a.K.E.', 'p.K.E.'],\n  wide: ['antaŭ Komuna Erao', 'Komuna Erao']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1-a kvaronjaro', '2-a kvaronjaro', '3-a kvaronjaro', '4-a kvaronjaro']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aŭg', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['januaro', 'februaro', 'marto', 'aprilo', 'majo', 'junio', 'julio', 'aŭgusto', 'septembro', 'oktobro', 'novembro', 'decembro']\n};\nvar dayValues = {\n  narrow: ['D', 'L', 'M', 'M', 'Ĵ', 'V', 'S'],\n  short: ['di', 'lu', 'ma', 'me', 'ĵa', 've', 'sa'],\n  abbreviated: ['dim', 'lun', 'mar', 'mer', 'ĵaŭ', 'ven', 'sab'],\n  wide: ['dimanĉo', 'lundo', 'mardo', 'merkredo', 'ĵaŭdo', 'vendredo', 'sabato']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'noktomezo',\n    noon: 'tagmezo',\n    morning: 'matene',\n    afternoon: 'posttagmeze',\n    evening: 'vespere',\n    night: 'nokte'\n  },\n  abbreviated: {\n    am: 'a.t.m.',\n    pm: 'p.t.m.',\n    midnight: 'noktomezo',\n    noon: 'tagmezo',\n    morning: 'matene',\n    afternoon: 'posttagmeze',\n    evening: 'vespere',\n    night: 'nokte'\n  },\n  wide: {\n    am: 'antaŭtagmeze',\n    pm: 'posttagmeze',\n    midnight: 'noktomezo',\n    noon: 'tagmezo',\n    morning: 'matene',\n    afternoon: 'posttagmeze',\n    evening: 'vespere',\n    night: 'nokte'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  var number = Number(dirtyNumber);\n  return number + '-a';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?a)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^([ap]k)/i,\n  abbreviated: /^([ap]\\.?\\s?k\\.?\\s?e\\.?)/i,\n  wide: /^((antaǔ |post )?komuna erao)/i\n};\nvar parseEraPatterns = {\n  any: [/^a/i, /^[kp]/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^k[1234]/i,\n  wide: /^[1234](-?a)? kvaronjaro/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|maj|jun|jul|a(ŭ|ux|uh|u)g|sep|okt|nov|dec)/i,\n  wide: /^(januaro|februaro|marto|aprilo|majo|junio|julio|a(ŭ|ux|uh|u)gusto|septembro|oktobro|novembro|decembro)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^a(u|ŭ)/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmĵjvs]/i,\n  short: /^(di|lu|ma|me|(ĵ|jx|jh|j)a|ve|sa)/i,\n  abbreviated: /^(dim|lun|mar|mer|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)|ven|sab)/i,\n  wide: /^(diman(ĉ|cx|ch|c)o|lundo|mardo|merkredo|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)do|vendredo|sabato)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^(j|ĵ)/i, /^v/i, /^s/i],\n  any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^(j|ĵ)/i, /^v/i, /^s/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^([ap]|(posttagmez|noktomez|tagmez|maten|vesper|nokt)[eo])/i,\n  abbreviated: /^([ap][.\\s]?t[.\\s]?m[.\\s]?|(posttagmez|noktomez|tagmez|maten|vesper|nokt)[eo])/i,\n  wide: /^(anta(ŭ|ux)tagmez|posttagmez|noktomez|tagmez|maten|vesper|nokt)[eo]/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^noktom/i,\n    noon: /^t/i,\n    morning: /^m/i,\n    afternoon: /^posttagmeze/i,\n    evening: /^v/i,\n    night: /^n/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'menos de un segundo',\n    other: 'menos de {{count}} segundos'\n  },\n  xSeconds: {\n    one: '1 segundo',\n    other: '{{count}} segundos'\n  },\n  halfAMinute: 'medio minuto',\n  lessThanXMinutes: {\n    one: 'menos de un minuto',\n    other: 'menos de {{count}} minutos'\n  },\n  xMinutes: {\n    one: '1 minuto',\n    other: '{{count}} minutos'\n  },\n  aboutXHours: {\n    one: 'alrededor de 1 hora',\n    other: 'alrededor de {{count}} horas'\n  },\n  xHours: {\n    one: '1 hora',\n    other: '{{count}} horas'\n  },\n  xDays: {\n    one: '1 día',\n    other: '{{count}} días'\n  },\n  aboutXWeeks: {\n    one: 'alrededor de 1 semana',\n    other: 'alrededor de {{count}} semanas'\n  },\n  xWeeks: {\n    one: '1 semana',\n    other: '{{count}} semanas'\n  },\n  aboutXMonths: {\n    one: 'alrededor de 1 mes',\n    other: 'alrededor de {{count}} meses'\n  },\n  xMonths: {\n    one: '1 mes',\n    other: '{{count}} meses'\n  },\n  aboutXYears: {\n    one: 'alrededor de 1 año',\n    other: 'alrededor de {{count}} años'\n  },\n  xYears: {\n    one: '1 año',\n    other: '{{count}} años'\n  },\n  overXYears: {\n    one: 'más de 1 año',\n    other: 'más de {{count}} años'\n  },\n  almostXYears: {\n    one: 'casi 1 año',\n    other: 'casi {{count}} años'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'en ' + result;\n    } else {\n      return 'hace ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d 'de' MMMM 'de' y\",\n  long: \"d 'de' MMMM 'de' y\",\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'a las' {{time}}\",\n  long: \"{{date}} 'a las' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'el' eeee 'pasado a la' p\",\n  yesterday: \"'ayer a la' p\",\n  today: \"'hoy a la' p\",\n  tomorrow: \"'mañana a la' p\",\n  nextWeek: \"eeee 'a la' p\",\n  other: 'P'\n};\nvar formatRelativeLocalePlural = {\n  lastWeek: \"'el' eeee 'pasado a las' p\",\n  yesterday: \"'ayer a las' p\",\n  today: \"'hoy a las' p\",\n  tomorrow: \"'mañana a las' p\",\n  nextWeek: \"eeee 'a las' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  if (date.getUTCHours() !== 1) {\n    return formatRelativeLocalePlural[token];\n  } else {\n    return formatRelativeLocale[token];\n  }\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Agüero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gastón Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n  code: 'es',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['AC', 'DC'],\n  abbreviated: ['AC', 'DC'],\n  wide: ['antes de cristo', 'después de cristo']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']\n};\nvar monthValues = {\n  narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n  wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n  narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n  short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 'sá'],\n  abbreviated: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],\n  wide: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'mañana',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noche'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'mañana',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noche'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'mañana',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noche'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'de la mañana',\n    afternoon: 'de la tarde',\n    evening: 'de la tarde',\n    night: 'de la noche'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'de la mañana',\n    afternoon: 'de la tarde',\n    evening: 'de la tarde',\n    night: 'de la noche'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'de la mañana',\n    afternoon: 'de la tarde',\n    evening: 'de la tarde',\n    night: 'de la noche'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'º';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ac|dc|a|d)/i,\n  abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n  wide: /^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i\n};\nvar parseEraPatterns = {\n  any: [/^ac/i, /^dc/i],\n  wide: [/^(antes de cristo|antes de la era com[uú]n)/i, /^(despu[eé]s de cristo|era com[uú]n)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^[1234](º)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[efmajsond]/i,\n  abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n  wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^e/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmjvs]/i,\n  short: /^(do|lu|ma|mi|ju|vi|s[áa])/i,\n  abbreviated: /^(dom|lun|mar|mi[ée]|jue|vie|s[áa]b)/i,\n  wide: /^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n  any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,\n  any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mn/i,\n    noon: /^md/i,\n    morning: /mañana/i,\n    afternoon: /tarde/i,\n    evening: /tarde/i,\n    night: /noche/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    standalone: {\n      one: 'vähem kui üks sekund',\n      other: 'vähem kui {{count}} sekundit'\n    },\n    withPreposition: {\n      one: 'vähem kui ühe sekundi',\n      other: 'vähem kui {{count}} sekundi'\n    }\n  },\n  xSeconds: {\n    standalone: {\n      one: 'üks sekund',\n      other: '{{count}} sekundit'\n    },\n    withPreposition: {\n      one: 'ühe sekundi',\n      other: '{{count}} sekundi'\n    }\n  },\n  halfAMinute: {\n    standalone: 'pool minutit',\n    withPreposition: 'poole minuti'\n  },\n  lessThanXMinutes: {\n    standalone: {\n      one: 'vähem kui üks minut',\n      other: 'vähem kui {{count}} minutit'\n    },\n    withPreposition: {\n      one: 'vähem kui ühe minuti',\n      other: 'vähem kui {{count}} minuti'\n    }\n  },\n  xMinutes: {\n    standalone: {\n      one: 'üks minut',\n      other: '{{count}} minutit'\n    },\n    withPreposition: {\n      one: 'ühe minuti',\n      other: '{{count}} minuti'\n    }\n  },\n  aboutXHours: {\n    standalone: {\n      one: 'umbes üks tund',\n      other: 'umbes {{count}} tundi'\n    },\n    withPreposition: {\n      one: 'umbes ühe tunni',\n      other: 'umbes {{count}} tunni'\n    }\n  },\n  xHours: {\n    standalone: {\n      one: 'üks tund',\n      other: '{{count}} tundi'\n    },\n    withPreposition: {\n      one: 'ühe tunni',\n      other: '{{count}} tunni'\n    }\n  },\n  xDays: {\n    standalone: {\n      one: 'üks päev',\n      other: '{{count}} päeva'\n    },\n    withPreposition: {\n      one: 'ühe päeva',\n      other: '{{count}} päeva'\n    }\n  },\n  aboutXWeeks: {\n    standalone: {\n      one: 'umbes üks nädal',\n      other: 'umbes {{count}} nädalat'\n    },\n    withPreposition: {\n      one: 'umbes ühe nädala',\n      other: 'umbes {{count}} nädala'\n    }\n  },\n  xWeeks: {\n    standalone: {\n      one: 'üks nädal',\n      other: '{{count}} nädalat'\n    },\n    withPreposition: {\n      one: 'ühe nädala',\n      other: '{{count}} nädala'\n    }\n  },\n  aboutXMonths: {\n    standalone: {\n      one: 'umbes üks kuu',\n      other: 'umbes {{count}} kuud'\n    },\n    withPreposition: {\n      one: 'umbes ühe kuu',\n      other: 'umbes {{count}} kuu'\n    }\n  },\n  xMonths: {\n    standalone: {\n      one: 'üks kuu',\n      other: '{{count}} kuud'\n    },\n    withPreposition: {\n      one: 'ühe kuu',\n      other: '{{count}} kuu'\n    }\n  },\n  aboutXYears: {\n    standalone: {\n      one: 'umbes üks aasta',\n      other: 'umbes {{count}} aastat'\n    },\n    withPreposition: {\n      one: 'umbes ühe aasta',\n      other: 'umbes {{count}} aasta'\n    }\n  },\n  xYears: {\n    standalone: {\n      one: 'üks aasta',\n      other: '{{count}} aastat'\n    },\n    withPreposition: {\n      one: 'ühe aasta',\n      other: '{{count}} aasta'\n    }\n  },\n  overXYears: {\n    standalone: {\n      one: 'rohkem kui üks aasta',\n      other: 'rohkem kui {{count}} aastat'\n    },\n    withPreposition: {\n      one: 'rohkem kui ühe aasta',\n      other: 'rohkem kui {{count}} aasta'\n    }\n  },\n  almostXYears: {\n    standalone: {\n      one: 'peaaegu üks aasta',\n      other: 'peaaegu {{count}} aastat'\n    },\n    withPreposition: {\n      one: 'peaaegu ühe aasta',\n      other: 'peaaegu {{count}} aasta'\n    }\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var usageGroup = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\n  var result;\n  if (typeof usageGroup === 'string') {\n    result = usageGroup;\n  } else if (count === 1) {\n    result = usageGroup.one;\n  } else {\n    result = usageGroup.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' pärast';\n    } else {\n      return result + ' eest';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d. MMMM y',\n  long: 'd. MMMM y',\n  medium: 'd. MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'kell' {{time}}\",\n  long: \"{{date}} 'kell' {{time}}\",\n  medium: '{{date}}. {{time}}',\n  short: '{{date}}. {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'eelmine' eeee 'kell' p\",\n  yesterday: \"'eile kell' p\",\n  today: \"'täna kell' p\",\n  tomorrow: \"'homme kell' p\",\n  nextWeek: \"'järgmine' eeee 'kell' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['e.m.a', 'm.a.j'],\n  abbreviated: ['e.m.a', 'm.a.j'],\n  wide: ['enne meie ajaarvamist', 'meie ajaarvamise järgi']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['J', 'V', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jaan', 'veebr', 'märts', 'apr', 'mai', 'juuni', 'juuli', 'aug', 'sept', 'okt', 'nov', 'dets'],\n  wide: ['jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember']\n};\nvar dayValues = {\n  narrow: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],\n  short: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],\n  abbreviated: ['pühap.', 'esmasp.', 'teisip.', 'kolmap.', 'neljap.', 'reede.', 'laup.'],\n  wide: ['pühapäev', 'esmaspäev', 'teisipäev', 'kolmapäev', 'neljapäev', 'reede', 'laupäev']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'kesköö',\n    noon: 'keskpäev',\n    morning: 'hommik',\n    afternoon: 'pärastlõuna',\n    evening: 'õhtu',\n    night: 'öö'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'kesköö',\n    noon: 'keskpäev',\n    morning: 'hommik',\n    afternoon: 'pärastlõuna',\n    evening: 'õhtu',\n    night: 'öö'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'kesköö',\n    noon: 'keskpäev',\n    morning: 'hommik',\n    afternoon: 'pärastlõuna',\n    evening: 'õhtu',\n    night: 'öö'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'keskööl',\n    noon: 'keskpäeval',\n    morning: 'hommikul',\n    afternoon: 'pärastlõunal',\n    evening: 'õhtul',\n    night: 'öösel'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'keskööl',\n    noon: 'keskpäeval',\n    morning: 'hommikul',\n    afternoon: 'pärastlõunal',\n    evening: 'õhtul',\n    night: 'öösel'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'keskööl',\n    noon: 'keskpäeval',\n    morning: 'hommikul',\n    afternoon: 'pärastlõunal',\n    evening: 'õhtul',\n    night: 'öösel'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: monthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide',\n    formattingValues: dayValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Estonian locale.\n * @language Estonian\n * @iso-639-2 est\n * @author Priit Hansen [@HansenPriit]{@link https://github.com/priithansen}\n */\nvar locale = {\n  code: 'et',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^\\d+\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(e\\.m\\.a|m\\.a\\.j|eKr|pKr)/i,\n  abbreviated: /^(e\\.m\\.a|m\\.a\\.j|eKr|pKr)/i,\n  wide: /^(enne meie ajaarvamist|meie ajaarvamise järgi|enne Kristust|pärast Kristust)/i\n};\nvar parseEraPatterns = {\n  any: [/^e/i, /^(m|p)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^K[1234]/i,\n  wide: /^[1234](\\.)? kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jvmasond]/i,\n  abbreviated: /^(jaan|veebr|märts|apr|mai|juuni|juuli|aug|sept|okt|nov|dets)/i,\n  wide: /^(jaanuar|veebruar|märts|aprill|mai|juuni|juuli|august|september|oktoober|november|detsember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^v/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^v/i, /^mär/i, /^ap/i, /^mai/i, /^juun/i, /^juul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[petknrl]/i,\n  short: /^[petknrl]/i,\n  abbreviated: /^(püh?|esm?|tei?|kolm?|nel?|ree?|laup?)\\.?/i,\n  wide: /^(pühapäev|esmaspäev|teisipäev|kolmapäev|neljapäev|reede|laupäev)/i\n};\nvar parseDayPatterns = {\n  any: [/^p/i, /^e/i, /^t/i, /^k/i, /^n/i, /^r/i, /^l/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|keskööl?|keskpäev(al)?|hommik(ul)?|pärastlõunal?|õhtul?|öö(sel)?)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^keskö/i,\n    noon: /^keskp/i,\n    morning: /hommik/i,\n    afternoon: /pärastlõuna/i,\n    evening: /õhtu/i,\n    night: /öö/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'segundo bat baino gutxiago',\n    other: '{{count}} segundo baino gutxiago'\n  },\n  xSeconds: {\n    one: '1 segundo',\n    other: '{{count}} segundo'\n  },\n  halfAMinute: 'minutu erdi',\n  lessThanXMinutes: {\n    one: 'minutu bat baino gutxiago',\n    other: '{{count}} minutu baino gutxiago'\n  },\n  xMinutes: {\n    one: '1 minutu',\n    other: '{{count}} minutu'\n  },\n  aboutXHours: {\n    one: '1 ordu gutxi gorabehera',\n    other: '{{count}} ordu gutxi gorabehera'\n  },\n  xHours: {\n    one: '1 ordu',\n    other: '{{count}} ordu'\n  },\n  xDays: {\n    one: '1 egun',\n    other: '{{count}} egun'\n  },\n  aboutXWeeks: {\n    one: 'aste 1 inguru',\n    other: '{{count}} aste inguru'\n  },\n  xWeeks: {\n    one: '1 aste',\n    other: '{{count}} astean'\n  },\n  aboutXMonths: {\n    one: '1 hilabete gutxi gorabehera',\n    other: '{{count}} hilabete gutxi gorabehera'\n  },\n  xMonths: {\n    one: '1 hilabete',\n    other: '{{count}} hilabete'\n  },\n  aboutXYears: {\n    one: '1 urte gutxi gorabehera',\n    other: '{{count}} urte gutxi gorabehera'\n  },\n  xYears: {\n    one: '1 urte',\n    other: '{{count}} urte'\n  },\n  overXYears: {\n    one: '1 urte baino gehiago',\n    other: '{{count}} urte baino gehiago'\n  },\n  almostXYears: {\n    one: 'ia 1 urte',\n    other: 'ia {{count}} urte'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'en ' + result;\n    } else {\n      return 'duela ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, y'ko' MMMM'ren' d'a' y'ren'\",\n  long: \"y'ko' MMMM'ren' d'a'\",\n  medium: 'y MMM d',\n  short: 'yy/MM/dd'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'tan' {{time}}\",\n  long: \"{{date}} 'tan' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'joan den' eeee, LT\",\n  yesterday: \"'atzo,' p\",\n  today: \"'gaur,' p\",\n  tomorrow: \"'bihar,' p\",\n  nextWeek: 'eeee, p',\n  other: 'P'\n};\nvar formatRelativeLocalePlural = {\n  lastWeek: \"'joan den' eeee, p\",\n  yesterday: \"'atzo,' p\",\n  today: \"'gaur,' p\",\n  tomorrow: \"'bihar,' p\",\n  nextWeek: 'eeee, p',\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date) {\n  if (date.getUTCHours() !== 1) {\n    return formatRelativeLocalePlural[token];\n  }\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Basque locale.\n * @language Basque\n * @iso-639-2 eus\n * @author Jacob Söderblom [@JacobSoderblom]{@link https://github.com/JacobSoderblom}\n */\nvar locale = {\n  code: 'eu',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['k.a.', 'k.o.'],\n  abbreviated: ['k.a.', 'k.o.'],\n  wide: ['kristo aurretik', 'kristo ondoren']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1H', '2H', '3H', '4H'],\n  wide: ['1. hiruhilekoa', '2. hiruhilekoa', '3. hiruhilekoa', '4. hiruhilekoa']\n};\nvar monthValues = {\n  narrow: ['u', 'o', 'm', 'a', 'm', 'e', 'u', 'a', 'i', 'u', 'a', 'a'],\n  abbreviated: ['urt', 'ots', 'mar', 'api', 'mai', 'eka', 'uzt', 'abu', 'ira', 'urr', 'aza', 'abe'],\n  wide: ['urtarrila', 'otsaila', 'martxoa', 'apirila', 'maiatza', 'ekaina', 'uztaila', 'abuztua', 'iraila', 'urria', 'azaroa', 'abendua']\n};\nvar dayValues = {\n  narrow: ['i', 'a', 'a', 'a', 'o', 'o', 'l'],\n  short: ['ig', 'al', 'as', 'az', 'og', 'or', 'lr'],\n  abbreviated: ['iga', 'ast', 'ast', 'ast', 'ost', 'ost', 'lar'],\n  wide: ['igandea', 'astelehena', 'asteartea', 'asteazkena', 'osteguna', 'ostirala', 'larunbata']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'ge',\n    noon: 'eg',\n    morning: 'goiza',\n    afternoon: 'arratsaldea',\n    evening: 'arratsaldea',\n    night: 'gaua'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'gauerdia',\n    noon: 'eguerdia',\n    morning: 'goiza',\n    afternoon: 'arratsaldea',\n    evening: 'arratsaldea',\n    night: 'gaua'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'gauerdia',\n    noon: 'eguerdia',\n    morning: 'goiza',\n    afternoon: 'arratsaldea',\n    evening: 'arratsaldea',\n    night: 'gaua'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'ge',\n    noon: 'eg',\n    morning: 'goizean',\n    afternoon: 'arratsaldean',\n    evening: 'arratsaldean',\n    night: 'gauean'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'gauerdia',\n    noon: 'eguerdia',\n    morning: 'goizean',\n    afternoon: 'arratsaldean',\n    evening: 'arratsaldean',\n    night: 'gauean'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'gauerdia',\n    noon: 'eguerdia',\n    morning: 'goizean',\n    afternoon: 'arratsaldean',\n    evening: 'arratsaldean',\n    night: 'gauean'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(k.a.|k.o.)/i,\n  abbreviated: /^(k.a.|k.o.)/i,\n  wide: /^(kristo aurretik|kristo ondoren)/i\n};\nvar parseEraPatterns = {\n  narrow: [/^k.a./i, /^k.o./i],\n  abbreviated: [/^(k.a.)/i, /^(k.o.)/i],\n  wide: [/^(kristo aurretik)/i, /^(kristo ondoren)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]H/i,\n  wide: /^[1234](.)? hiruhilekoa/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[uomaei]/i,\n  abbreviated: /^(urt|ots|mar|api|mai|eka|uzt|abu|ira|urr|aza|abe)/i,\n  wide: /^(urtarrila|otsaila|martxoa|apirila|maiatza|ekaina|uztaila|abuztua|iraila|urria|azaroa|abendua)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^u/i, /^o/i, /^m/i, /^a/i, /^m/i, /^e/i, /^u/i, /^a/i, /^i/i, /^u/i, /^a/i, /^a/i],\n  any: [/^urt/i, /^ots/i, /^mar/i, /^api/i, /^mai/i, /^eka/i, /^uzt/i, /^abu/i, /^ira/i, /^urr/i, /^aza/i, /^abe/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[iaol]/i,\n  short: /^(ig|al|as|az|og|or|lr)/i,\n  abbreviated: /^(iga|ast|ast|ast|ost|ost|lar)/i,\n  wide: /^(igandea|astelehena|asteartea|asteazkena|osteguna|ostirala|larunbata)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^i/i, /^a/i, /^a/i, /^a/i, /^o/i, /^o/i, /^l/i],\n  short: [/^ig/i, /^al/i, /^as/i, /^az/i, /^og/i, /^or/i, /^lr/i],\n  abbreviated: [/^iga/i, /^ast/i, /^ast/i, /^ast/i, /^ost/i, /^ost/i, /^lar/i],\n  wide: [/^igandea/i, /^astelehena/i, /^asteartea/i, /^asteazkena/i, /^osteguna/i, /^ostirala/i, /^larunbata/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|ge|eg|((goiza|goizean)|arratsaldea|(gaua|gauean)))/i,\n  any: /^([ap]\\.?\\s?m\\.?|gauerdia|eguerdia|((goiza|goizean)|arratsaldea|(gaua|gauean)))/i\n};\nvar parseDayPeriodPatterns = {\n  narrow: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^ge/i,\n    noon: /^eg/i,\n    morning: /goiz/i,\n    afternoon: /arratsaldea/i,\n    evening: /arratsaldea/i,\n    night: /gau/i\n  },\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^gauerdia/i,\n    noon: /^eguerdia/i,\n    morning: /goiz/i,\n    afternoon: /arratsaldea/i,\n    evening: /arratsaldea/i,\n    night: /gau/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'کمتر از یک ثانیه',\n    other: 'کمتر از {{count}} ثانیه'\n  },\n  xSeconds: {\n    one: '1 ثانیه',\n    other: '{{count}} ثانیه'\n  },\n  halfAMinute: 'نیم دقیقه',\n  lessThanXMinutes: {\n    one: 'کمتر از یک دقیقه',\n    other: 'کمتر از {{count}} دقیقه'\n  },\n  xMinutes: {\n    one: '1 دقیقه',\n    other: '{{count}} دقیقه'\n  },\n  aboutXHours: {\n    one: 'حدود 1 ساعت',\n    other: 'حدود {{count}} ساعت'\n  },\n  xHours: {\n    one: '1 ساعت',\n    other: '{{count}} ساعت'\n  },\n  xDays: {\n    one: '1 روز',\n    other: '{{count}} روز'\n  },\n  aboutXWeeks: {\n    one: 'حدود 1 هفته',\n    other: 'حدود {{count}} هفته'\n  },\n  xWeeks: {\n    one: '1 هفته',\n    other: '{{count}} هفته'\n  },\n  aboutXMonths: {\n    one: 'حدود 1 ماه',\n    other: 'حدود {{count}} ماه'\n  },\n  xMonths: {\n    one: '1 ماه',\n    other: '{{count}} ماه'\n  },\n  aboutXYears: {\n    one: 'حدود 1 سال',\n    other: 'حدود {{count}} سال'\n  },\n  xYears: {\n    one: '1 سال',\n    other: '{{count}} سال'\n  },\n  overXYears: {\n    one: 'بیشتر از 1 سال',\n    other: 'بیشتر از {{count}} سال'\n  },\n  almostXYears: {\n    one: 'نزدیک 1 سال',\n    other: 'نزدیک {{count}} سال'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'در ' + result;\n    } else {\n      return result + ' قبل';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE do MMMM y',\n  long: 'do MMMM y',\n  medium: 'd MMM y',\n  short: 'yyyy/MM/dd'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'در' {{time}}\",\n  long: \"{{date}} 'در' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'گذشته در' p\",\n  yesterday: \"'دیروز در' p\",\n  today: \"'امروز در' p\",\n  tomorrow: \"'فردا در' p\",\n  nextWeek: \"eeee 'در' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Persian/Farsi locale (Iran).\n * @language Persian\n * @iso-639-2 ira\n * @author Morteza Ziyae [@mort3za]{@link https://github.com/mort3za}\n */\nvar locale = {\n  code: 'fa-IR',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 6 /* Saturday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ق', 'ب'],\n  abbreviated: ['ق.م.', 'ب.م.'],\n  wide: ['قبل از میلاد', 'بعد از میلاد']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['س‌م1', 'س‌م2', 'س‌م3', 'س‌م4'],\n  wide: ['سه‌ماهه 1', 'سه‌ماهه 2', 'سه‌ماهه 3', 'سه‌ماهه 4']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['ژ', 'ف', 'م', 'آ', 'م', 'ج', 'ج', 'آ', 'س', 'ا', 'ن', 'د'],\n  abbreviated: ['ژانـ', 'فور', 'مارس', 'آپر', 'می', 'جون', 'جولـ', 'آگو', 'سپتـ', 'اکتـ', 'نوامـ', 'دسامـ'],\n  wide: ['ژانویه', 'فوریه', 'مارس', 'آپریل', 'می', 'جون', 'جولای', 'آگوست', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر']\n};\nvar dayValues = {\n  narrow: ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],\n  short: ['1ش', '2ش', '3ش', '4ش', '5ش', 'ج', 'ش'],\n  abbreviated: ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'],\n  wide: ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ق',\n    pm: 'ب',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'ص',\n    afternoon: 'ب.ظ.',\n    evening: 'ع',\n    night: 'ش'\n  },\n  abbreviated: {\n    am: 'ق.ظ.',\n    pm: 'ب.ظ.',\n    midnight: 'نیمه‌شب',\n    noon: 'ظهر',\n    morning: 'صبح',\n    afternoon: 'بعدازظهر',\n    evening: 'عصر',\n    night: 'شب'\n  },\n  wide: {\n    am: 'قبل‌ازظهر',\n    pm: 'بعدازظهر',\n    midnight: 'نیمه‌شب',\n    noon: 'ظهر',\n    morning: 'صبح',\n    afternoon: 'بعدازظهر',\n    evening: 'عصر',\n    night: 'شب'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ق',\n    pm: 'ب',\n    midnight: 'ن',\n    noon: 'ظ',\n    morning: 'ص',\n    afternoon: 'ب.ظ.',\n    evening: 'ع',\n    night: 'ش'\n  },\n  abbreviated: {\n    am: 'ق.ظ.',\n    pm: 'ب.ظ.',\n    midnight: 'نیمه‌شب',\n    noon: 'ظهر',\n    morning: 'صبح',\n    afternoon: 'بعدازظهر',\n    evening: 'عصر',\n    night: 'شب'\n  },\n  wide: {\n    am: 'قبل‌ازظهر',\n    pm: 'بعدازظهر',\n    midnight: 'نیمه‌شب',\n    noon: 'ظهر',\n    morning: 'صبح',\n    afternoon: 'بعدازظهر',\n    evening: 'عصر',\n    night: 'شب'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ق|ب)/i,\n  abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?د\\.?\\s?م\\.?|م\\.?\\s?|د\\.?\\s?م\\.?)/i,\n  wide: /^(قبل از میلاد|قبل از دوران مشترک|میلادی|دوران مشترک|بعد از میلاد)/i\n};\nvar parseEraPatterns = {\n  any: [/^قبل/i, /^بعد/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^س‌م[1234]/i,\n  wide: /^سه‌ماهه [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[جژفمآاماسند]/i,\n  abbreviated: /^(جنو|ژانـ|ژانویه|فوریه|فور|مارس|آوریل|آپر|مه|می|ژوئن|جون|جول|جولـ|ژوئیه|اوت|آگو|سپتمبر|سپتامبر|اکتبر|اکتوبر|نوامبر|نوامـ|دسامبر|دسامـ|دسم)/i,\n  wide: /^(ژانویه|جنوری|فبروری|فوریه|مارچ|مارس|آپریل|اپریل|ایپریل|آوریل|مه|می|ژوئن|جون|جولای|ژوئیه|آگست|اگست|آگوست|اوت|سپتمبر|سپتامبر|اکتبر|اکتوبر|نوامبر|نومبر|دسامبر|دسمبر)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^(ژ|ج)/i, /^ف/i, /^م/i, /^(آ|ا)/i, /^م/i, /^(ژ|ج)/i, /^(ج|ژ)/i, /^(آ|ا)/i, /^س/i, /^ا/i, /^ن/i, /^د/i],\n  any: [/^ژا/i, /^ف/i, /^ما/i, /^آپ/i, /^(می|مه)/i, /^(ژوئن|جون)/i, /^(ژوئی|جول)/i, /^(اوت|آگ)/i, /^س/i, /^(اوک|اک)/i, /^ن/i, /^د/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[شیدسچپج]/i,\n  short: /^(ش|ج|1ش|2ش|3ش|4ش|5ش)/i,\n  abbreviated: /^(یکشنبه|دوشنبه|سه‌شنبه|چهارشنبه|پنج‌شنبه|جمعه|شنبه)/i,\n  wide: /^(یکشنبه|دوشنبه|سه‌شنبه|چهارشنبه|پنج‌شنبه|جمعه|شنبه)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ی/i, /^دو/i, /^س/i, /^چ/i, /^پ/i, /^ج/i, /^ش/i],\n  any: [/^(ی|1ش|یکشنبه)/i, /^(د|2ش|دوشنبه)/i, /^(س|3ش|سه‌شنبه)/i, /^(چ|4ش|چهارشنبه)/i, /^(پ|5ش|پنجشنبه)/i, /^(ج|جمعه)/i, /^(ش|شنبه)/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ب|ق|ن|ظ|ص|ب.ظ.|ع|ش)/i,\n  abbreviated: /^(ق.ظ.|ب.ظ.|نیمه‌شب|ظهر|صبح|بعدازظهر|عصر|شب)/i,\n  wide: /^(قبل‌ازظهر|نیمه‌شب|ظهر|صبح|بعدازظهر|عصر|شب)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^(ق|ق.ظ.|قبل‌ازظهر)/i,\n    pm: /^(ب|ب.ظ.|بعدازظهر)/i,\n    midnight: /^(‌نیمه‌شب|ن)/i,\n    noon: /^(ظ|ظهر)/i,\n    morning: /(ص|صبح)/i,\n    afternoon: /(ب|ب.ظ.|بعدازظهر)/i,\n    evening: /(ع|عصر)/i,\n    night: /(ش|شب)/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function futureSeconds(text) {\n  return text.replace(/sekuntia?/, 'sekunnin');\n}\nfunction futureMinutes(text) {\n  return text.replace(/minuuttia?/, 'minuutin');\n}\nfunction futureHours(text) {\n  return text.replace(/tuntia?/, 'tunnin');\n}\nfunction futureDays(text) {\n  return text.replace(/päivää?/, 'päivän');\n}\nfunction futureWeeks(text) {\n  return text.replace(/(viikko|viikkoa)/, 'viikon');\n}\nfunction futureMonths(text) {\n  return text.replace(/(kuukausi|kuukautta)/, 'kuukauden');\n}\nfunction futureYears(text) {\n  return text.replace(/(vuosi|vuotta)/, 'vuoden');\n}\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'alle sekunti',\n    other: 'alle {{count}} sekuntia',\n    futureTense: futureSeconds\n  },\n  xSeconds: {\n    one: 'sekunti',\n    other: '{{count}} sekuntia',\n    futureTense: futureSeconds\n  },\n  halfAMinute: {\n    one: 'puoli minuuttia',\n    other: 'puoli minuuttia',\n    futureTense: function futureTense(_text) {\n      return 'puolen minuutin';\n    }\n  },\n  lessThanXMinutes: {\n    one: 'alle minuutti',\n    other: 'alle {{count}} minuuttia',\n    futureTense: futureMinutes\n  },\n  xMinutes: {\n    one: 'minuutti',\n    other: '{{count}} minuuttia',\n    futureTense: futureMinutes\n  },\n  aboutXHours: {\n    one: 'noin tunti',\n    other: 'noin {{count}} tuntia',\n    futureTense: futureHours\n  },\n  xHours: {\n    one: 'tunti',\n    other: '{{count}} tuntia',\n    futureTense: futureHours\n  },\n  xDays: {\n    one: 'päivä',\n    other: '{{count}} päivää',\n    futureTense: futureDays\n  },\n  aboutXWeeks: {\n    one: 'noin viikko',\n    other: 'noin {{count}} viikkoa',\n    futureTense: futureWeeks\n  },\n  xWeeks: {\n    one: 'viikko',\n    other: '{{count}} viikkoa',\n    futureTense: futureWeeks\n  },\n  aboutXMonths: {\n    one: 'noin kuukausi',\n    other: 'noin {{count}} kuukautta',\n    futureTense: futureMonths\n  },\n  xMonths: {\n    one: 'kuukausi',\n    other: '{{count}} kuukautta',\n    futureTense: futureMonths\n  },\n  aboutXYears: {\n    one: 'noin vuosi',\n    other: 'noin {{count}} vuotta',\n    futureTense: futureYears\n  },\n  xYears: {\n    one: 'vuosi',\n    other: '{{count}} vuotta',\n    futureTense: futureYears\n  },\n  overXYears: {\n    one: 'yli vuosi',\n    other: 'yli {{count}} vuotta',\n    futureTense: futureYears\n  },\n  almostXYears: {\n    one: 'lähes vuosi',\n    other: 'lähes {{count}} vuotta',\n    futureTense: futureYears\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var tokenValue = formatDistanceLocale[token];\n  var result = count === 1 ? tokenValue.one : tokenValue.other.replace('{{count}}', String(count));\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return tokenValue.futureTense(result) + ' kuluttua';\n    } else {\n      return result + ' sitten';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'eeee d. MMMM y',\n  long: 'd. MMMM y',\n  medium: 'd. MMM y',\n  short: 'd.M.y'\n};\nvar timeFormats = {\n  full: 'HH.mm.ss zzzz',\n  long: 'HH.mm.ss z',\n  medium: 'HH.mm.ss',\n  short: 'HH.mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'klo' {{time}}\",\n  long: \"{{date}} 'klo' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'viime' eeee 'klo' p\",\n  yesterday: \"'eilen klo' p\",\n  today: \"'tänään klo' p\",\n  tomorrow: \"'huomenna klo' p\",\n  nextWeek: \"'ensi' eeee 'klo' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['eaa.', 'jaa.'],\n  abbreviated: ['eaa.', 'jaa.'],\n  wide: ['ennen ajanlaskun alkua', 'jälkeen ajanlaskun alun']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. kvartaali', '2. kvartaali', '3. kvartaali', '4. kvartaali']\n};\nvar monthValues = {\n  narrow: ['T', 'H', 'M', 'H', 'T', 'K', 'H', 'E', 'S', 'L', 'M', 'J'],\n  abbreviated: ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu'],\n  wide: ['tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu']\n};\nvar formattingMonthValues = {\n  narrow: monthValues.narrow,\n  abbreviated: monthValues.abbreviated,\n  wide: ['tammikuuta', 'helmikuuta', 'maaliskuuta', 'huhtikuuta', 'toukokuuta', 'kesäkuuta', 'heinäkuuta', 'elokuuta', 'syyskuuta', 'lokakuuta', 'marraskuuta', 'joulukuuta']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'K', 'T', 'P', 'L'],\n  short: ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'],\n  abbreviated: ['sunn.', 'maan.', 'tiis.', 'kesk.', 'torst.', 'perj.', 'la'],\n  wide: ['sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai']\n};\nvar formattingDayValues = {\n  narrow: dayValues.narrow,\n  short: dayValues.short,\n  abbreviated: dayValues.abbreviated,\n  wide: ['sunnuntaina', 'maanantaina', 'tiistaina', 'keskiviikkona', 'torstaina', 'perjantaina', 'lauantaina']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ap',\n    pm: 'ip',\n    midnight: 'keskiyö',\n    noon: 'keskipäivä',\n    morning: 'ap',\n    afternoon: 'ip',\n    evening: 'illalla',\n    night: 'yöllä'\n  },\n  abbreviated: {\n    am: 'ap',\n    pm: 'ip',\n    midnight: 'keskiyö',\n    noon: 'keskipäivä',\n    morning: 'ap',\n    afternoon: 'ip',\n    evening: 'illalla',\n    night: 'yöllä'\n  },\n  wide: {\n    am: 'ap',\n    pm: 'ip',\n    midnight: 'keskiyöllä',\n    noon: 'keskipäivällä',\n    morning: 'aamupäivällä',\n    afternoon: 'iltapäivällä',\n    evening: 'illalla',\n    night: 'yöllä'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Finnish locale.\n * @language Finnish\n * @iso-639-2 fin\n * @author Pyry-Samuli Lahti [@Pyppe]{@link https://github.com/Pyppe}\n * @author Edo Rivai [@mikolajgrzyb]{@link https://github.com/mikolajgrzyb}\n * @author Samu Juvonen [@sjuvonen]{@link https://github.com/sjuvonen}\n */\nvar locale = {\n  code: 'fi',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(e|j)/i,\n  abbreviated: /^(eaa.|jaa.)/i,\n  wide: /^(ennen ajanlaskun alkua|jälkeen ajanlaskun alun)/i\n};\nvar parseEraPatterns = {\n  any: [/^e/i, /^j/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234]\\.? kvartaali/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[thmkeslj]/i,\n  abbreviated: /^(tammi|helmi|maalis|huhti|touko|kesä|heinä|elo|syys|loka|marras|joulu)/i,\n  wide: /^(tammikuu|helmikuu|maaliskuu|huhtikuu|toukokuu|kesäkuu|heinäkuu|elokuu|syyskuu|lokakuu|marraskuu|joulukuu)(ta)?/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^t/i, /^h/i, /^m/i, /^h/i, /^t/i, /^k/i, /^h/i, /^e/i, /^s/i, /^l/i, /^m/i, /^j/i],\n  any: [/^ta/i, /^hel/i, /^maa/i, /^hu/i, /^to/i, /^k/i, /^hei/i, /^e/i, /^s/i, /^l/i, /^mar/i, /^j/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtkpl]/i,\n  short: /^(su|ma|ti|ke|to|pe|la)/i,\n  abbreviated: /^(sunn.|maan.|tiis.|kesk.|torst.|perj.|la)/i,\n  wide: /^(sunnuntai|maanantai|tiistai|keskiviikko|torstai|perjantai|lauantai)(na)?/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^k/i, /^t/i, /^p/i, /^l/i],\n  any: [/^s/i, /^m/i, /^ti/i, /^k/i, /^to/i, /^p/i, /^l/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ap|ip|keskiyö|keskipäivä|aamupäivällä|iltapäivällä|illalla|yöllä)/i,\n  any: /^(ap|ip|keskiyöllä|keskipäivällä|aamupäivällä|iltapäivällä|illalla|yöllä)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ap/i,\n    pm: /^ip/i,\n    midnight: /^keskiyö/i,\n    noon: /^keskipäivä/i,\n    morning: /aamupäivällä/i,\n    afternoon: /iltapäivällä/i,\n    evening: /illalla/i,\n    night: /yöllä/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'moins d’une seconde',\n    other: 'moins de {{count}} secondes'\n  },\n  xSeconds: {\n    one: '1 seconde',\n    other: '{{count}} secondes'\n  },\n  halfAMinute: '30 secondes',\n  lessThanXMinutes: {\n    one: 'moins d’une minute',\n    other: 'moins de {{count}} minutes'\n  },\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'environ 1 heure',\n    other: 'environ {{count}} heures'\n  },\n  xHours: {\n    one: '1 heure',\n    other: '{{count}} heures'\n  },\n  xDays: {\n    one: '1 jour',\n    other: '{{count}} jours'\n  },\n  aboutXWeeks: {\n    one: 'environ 1 semaine',\n    other: 'environ {{count}} semaines'\n  },\n  xWeeks: {\n    one: '1 semaine',\n    other: '{{count}} semaines'\n  },\n  aboutXMonths: {\n    one: 'environ 1 mois',\n    other: 'environ {{count}} mois'\n  },\n  xMonths: {\n    one: '1 mois',\n    other: '{{count}} mois'\n  },\n  aboutXYears: {\n    one: 'environ 1 an',\n    other: 'environ {{count}} ans'\n  },\n  xYears: {\n    one: '1 an',\n    other: '{{count}} ans'\n  },\n  overXYears: {\n    one: 'plus d’un an',\n    other: 'plus de {{count}} ans'\n  },\n  almostXYears: {\n    one: 'presqu’un an',\n    other: 'presque {{count}} ans'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var form = formatDistanceLocale[token];\n  if (typeof form === 'string') {\n    result = form;\n  } else if (count === 1) {\n    result = form.one;\n  } else {\n    result = form.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'dans ' + result;\n    } else {\n      return 'il y a ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'à' {{time}}\",\n  long: \"{{date}} 'à' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'dernier à' p\",\n  yesterday: \"'hier à' p\",\n  today: \"'aujourd’hui à' p\",\n  tomorrow: \"'demain à' p'\",\n  nextWeek: \"eeee 'prochain à' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['av. J.-C', 'ap. J.-C'],\n  abbreviated: ['av. J.-C', 'ap. J.-C'],\n  wide: ['avant Jésus-Christ', 'après Jésus-Christ']\n};\nvar quarterValues = {\n  narrow: ['T1', 'T2', 'T3', 'T4'],\n  abbreviated: ['1er trim.', '2ème trim.', '3ème trim.', '4ème trim.'],\n  wide: ['1er trimestre', '2ème trimestre', '3ème trimestre', '4ème trimestre']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],\n  wide: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']\n};\nvar dayValues = {\n  narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n  short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n  abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n  wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'minuit',\n    noon: 'midi',\n    morning: 'mat.',\n    afternoon: 'ap.m.',\n    evening: 'soir',\n    night: 'mat.'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'minuit',\n    noon: 'midi',\n    morning: 'matin',\n    afternoon: 'après-midi',\n    evening: 'soir',\n    night: 'matin'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'minuit',\n    noon: 'midi',\n    morning: 'du matin',\n    afternoon: 'de l’après-midi',\n    evening: 'du soir',\n    night: 'du matin'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  if (number === 0) return '0';\n  var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n  var suffix;\n  if (number === 1) {\n    suffix = unit && feminineUnits.includes(unit) ? 'ère' : 'er';\n  } else {\n    suffix = 'ème';\n  }\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(ième|ère|ème|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n  abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n  wide: /^(avant Jésus-Christ|après Jésus-Christ)/i\n};\nvar parseEraPatterns = {\n  any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^T?[1234]/i,\n  abbreviated: /^[1234](er|ème|e)? trim\\.?/i,\n  wide: /^[1234](er|ème|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(janv|févr|mars|avr|mai|juin|juill|juil|août|sept|oct|nov|déc)\\.?/i,\n  wide: /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[lmjvsd]/i,\n  short: /^(di|lu|ma|me|je|ve|sa)/i,\n  abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n  wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n  any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n  any: /^([ap]\\.?\\s?m\\.?|du matin|de l'après[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^min/i,\n    noon: /^mid/i,\n    morning: /mat/i,\n    afternoon: /ap/i,\n    evening: /soir/i,\n    night: /nuit/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author François B [@fbonzon]{@link https://github.com/fbonzon}\n */\nvar locale = {\n  code: 'fr',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","// Same as fr\nimport formatDistance from \"../fr/_lib/formatDistance/index.js\";\nimport formatRelative from \"../fr/_lib/formatRelative/index.js\";\nimport localize from \"../fr/_lib/localize/index.js\";\nimport match from \"../fr/_lib/match/index.js\";\n// Unique for fr-CA\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary French locale (Canada).\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author François B [@fbonzon]{@link https://github.com/fbonzon}\n * @author Gabriele Petrioli [@gpetrioli]{@link https://github.com/gpetrioli}\n */\nvar locale = {\n  code: 'fr-CA',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  // Unique for fr-CA\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'yy-MM-dd'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'à' {{time}}\",\n  long: \"{{date}} 'à' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'à' {{time}}\",\n  long: \"{{date}} 'à' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'la semaine dernière à' p\",\n  yesterday: \"'hier à' p\",\n  today: \"'aujourd’hui à' p\",\n  tomorrow: \"'demain à' p'\",\n  nextWeek: \"eeee 'la semaine prochaine à' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","// Same as fr\nimport formatDistance from \"../fr/_lib/formatDistance/index.js\";\nimport localize from \"../fr/_lib/localize/index.js\";\nimport match from \"../fr/_lib/match/index.js\";\n// Unique for fr-CH\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary French locale (Switzerland).\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author François B [@fbonzon]{@link https://github.com/fbonzon}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author Alex Hoeing [@dcbn]{@link https://github.com/dcbn}\n */\nvar locale = {\n  code: 'fr-CH',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'minder as 1 sekonde',\n    other: 'minder as {{count}} sekonden'\n  },\n  xSeconds: {\n    one: '1 sekonde',\n    other: '{{count}} sekonden'\n  },\n  halfAMinute: 'oardel minút',\n  lessThanXMinutes: {\n    one: 'minder as 1 minút',\n    other: 'minder as {{count}} minuten'\n  },\n  xMinutes: {\n    one: '1 minút',\n    other: '{{count}} minuten'\n  },\n  aboutXHours: {\n    one: 'sawat 1 oere',\n    other: 'sawat {{count}} oere'\n  },\n  xHours: {\n    one: '1 oere',\n    other: '{{count}} oere'\n  },\n  xDays: {\n    one: '1 dei',\n    other: '{{count}} dagen'\n  },\n  aboutXWeeks: {\n    one: 'sawat 1 wike',\n    other: 'sawat {{count}} wiken'\n  },\n  xWeeks: {\n    one: '1 wike',\n    other: '{{count}} wiken'\n  },\n  aboutXMonths: {\n    one: 'sawat 1 moanne',\n    other: 'sawat {{count}} moannen'\n  },\n  xMonths: {\n    one: '1 moanne',\n    other: '{{count}} moannen'\n  },\n  aboutXYears: {\n    one: 'sawat 1 jier',\n    other: 'sawat {{count}} jier'\n  },\n  xYears: {\n    one: '1 jier',\n    other: '{{count}} jier'\n  },\n  overXYears: {\n    one: 'mear as 1 jier',\n    other: 'mear as {{count}}s jier'\n  },\n  almostXYears: {\n    one: 'hast 1 jier',\n    other: 'hast {{count}} jier'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'oer ' + result;\n    } else {\n      return result + ' lyn';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd-MM-y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'om' {{time}}\",\n  long: \"{{date}} 'om' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'ôfrûne' eeee 'om' p\",\n  yesterday: \"'juster om' p\",\n  today: \"'hjoed om' p\",\n  tomorrow: \"'moarn om' p\",\n  nextWeek: \"eeee 'om' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Western Frisian locale (Netherlands).\n * @language West Frisian\n * @iso-639-2 fry\n * @author Damon Asberg [@damon02]{@link https://github.com/damon02}\n */\nvar locale = {\n  code: 'fy',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['f.K.', 'n.K.'],\n  abbreviated: ['f.Kr.', 'n.Kr.'],\n  wide: ['foar Kristus', 'nei Kristus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1e fearnsjier', '2e fearnsjier', '3e fearnsjier', '4e fearnsjier']\n};\nvar monthValues = {\n  narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['jan.', 'feb.', 'mrt.', 'apr.', 'mai.', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'des.'],\n  wide: ['jannewaris', 'febrewaris', 'maart', 'april', 'maaie', 'juny', 'july', 'augustus', 'septimber', 'oktober', 'novimber', 'desimber']\n};\nvar dayValues = {\n  narrow: ['s', 'm', 't', 'w', 't', 'f', 's'],\n  short: ['si', 'mo', 'ti', 'wo', 'to', 'fr', 'so'],\n  abbreviated: ['snein', 'moa', 'tii', 'woa', 'ton', 'fre', 'sneon'],\n  wide: ['snein', 'moandei', 'tiisdei', 'woansdei', 'tongersdei', 'freed', 'sneon']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'middei',\n    morning: 'moarns',\n    afternoon: 'middeis',\n    evening: 'jûns',\n    night: 'nachts'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'middei',\n    morning: 'moarns',\n    afternoon: 'middeis',\n    evening: 'jûns',\n    night: 'nachts'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'middei',\n    morning: 'moarns',\n    afternoon: 'middeis',\n    evening: 'jûns',\n    night: 'nachts'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'e';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)e?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^([fn]\\.? ?K\\.?)/,\n  abbreviated: /^([fn]\\. ?Kr\\.?)/,\n  wide: /^((foar|nei) Kristus)/\n};\nvar parseEraPatterns = {\n  any: [/^f/, /^n/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^K[1234]/i,\n  wide: /^[1234]e fearnsjier/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan.|feb.|mrt.|apr.|mai.|jun.|jul.|aug.|sep.|okt.|nov.|des.)/i,\n  wide: /^(jannewaris|febrewaris|maart|april|maaie|juny|july|augustus|septimber|oktober|novimber|desimber)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^jan/i, /^feb/i, /^m(r|a)/i, /^apr/i, /^mai/i, /^jun/i, /^jul/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^des/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(si|mo|ti|wo|to|fr|so)/i,\n  abbreviated: /^(snein|moa|tii|woa|ton|fre|sneon)/i,\n  wide: /^(snein|moandei|tiisdei|woansdei|tongersdei|freed|sneon)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^sn/i, /^mo/i, /^ti/i, /^wo/i, /^to/i, /^fr/i, /^sn/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|middernacht|middeis|moarns|middei|jûns|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^am/i,\n    pm: /^pm/i,\n    midnight: /^middernacht/i,\n    noon: /^middei/i,\n    morning: /moarns/i,\n    afternoon: /^middeis/i,\n    evening: /jûns/i,\n    night: /nachts/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'nas lugha na diog',\n    other: 'nas lugha na {{count}} diogan'\n  },\n  xSeconds: {\n    one: '1 diog',\n    two: '2 dhiog',\n    twenty: '20 diog',\n    other: '{{count}} diogan'\n  },\n  halfAMinute: 'leth mhionaid',\n  lessThanXMinutes: {\n    one: 'nas lugha na mionaid',\n    other: 'nas lugha na {{count}} mionaidean'\n  },\n  xMinutes: {\n    one: '1 mionaid',\n    two: '2 mhionaid',\n    twenty: '20 mionaid',\n    other: '{{count}} mionaidean'\n  },\n  aboutXHours: {\n    one: 'mu uair de thìde',\n    other: 'mu {{count}} uairean de thìde'\n  },\n  xHours: {\n    one: '1 uair de thìde',\n    two: '2 uair de thìde',\n    twenty: '20 uair de thìde',\n    other: '{{count}} uairean de thìde'\n  },\n  xDays: {\n    one: '1 là',\n    other: '{{count}} là'\n  },\n  aboutXWeeks: {\n    one: 'mu 1 seachdain',\n    other: 'mu {{count}} seachdainean'\n  },\n  xWeeks: {\n    one: '1 seachdain',\n    other: '{{count}} seachdainean'\n  },\n  aboutXMonths: {\n    one: 'mu mhìos',\n    other: 'mu {{count}} mìosan'\n  },\n  xMonths: {\n    one: '1 mìos',\n    other: '{{count}} mìosan'\n  },\n  aboutXYears: {\n    one: 'mu bhliadhna',\n    other: 'mu {{count}} bliadhnaichean'\n  },\n  xYears: {\n    one: '1 bhliadhna',\n    other: '{{count}} bliadhna'\n  },\n  overXYears: {\n    one: 'còrr is bliadhna',\n    other: 'còrr is {{count}} bliadhnaichean'\n  },\n  almostXYears: {\n    one: 'cha mhòr bliadhna',\n    other: 'cha mhòr {{count}} bliadhnaichean'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 2 && !!tokenValue.two) {\n    result = tokenValue.two;\n  } else if (count === 20 && !!tokenValue.twenty) {\n    result = tokenValue.twenty;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'ann an ' + result;\n    } else {\n      return 'o chionn ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'aig' {{time}}\",\n  long: \"{{date}} 'aig' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'mu dheireadh' eeee 'aig' p\",\n  //FIX\n  yesterday: \"'an-dè aig' p\",\n  today: \"'an-diugh aig' p\",\n  tomorrow: \"'a-màireach aig' p\",\n  nextWeek: \"eeee 'aig' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Scottish Gaelic.\n * @language Scottish Gaelic\n * @iso-639-2 gla\n * @author Lee Driscoll [@leedriscoll]{@link https://github.com/leedriscoll}\n */\nvar locale = {\n  code: 'gd',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['R', 'A'],\n  abbreviated: ['RC', 'AD'],\n  wide: ['ro Chrìosta', 'anno domini']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['C1', 'C2', 'C3', 'C4'],\n  wide: [\"a' chiad chairteal\", 'an dàrna cairteal', 'an treas cairteal', 'an ceathramh cairteal']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['F', 'G', 'M', 'G', 'C', 'Ò', 'I', 'L', 'S', 'D', 'S', 'D'],\n  abbreviated: ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'],\n  wide: ['Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd']\n};\nvar dayValues = {\n  narrow: ['D', 'L', 'M', 'C', 'A', 'H', 'S'],\n  short: ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'],\n  abbreviated: ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n  wide: ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'm',\n    pm: 'f',\n    midnight: 'm.o.',\n    noon: 'm.l.',\n    morning: 'madainn',\n    afternoon: 'feasgar',\n    evening: 'feasgar',\n    night: 'oidhche'\n  },\n  abbreviated: {\n    am: 'M.',\n    pm: 'F.',\n    midnight: 'meadhan oidhche',\n    noon: 'meadhan là',\n    morning: 'madainn',\n    afternoon: 'feasgar',\n    evening: 'feasgar',\n    night: 'oidhche'\n  },\n  wide: {\n    am: 'm.',\n    pm: 'f.',\n    midnight: 'meadhan oidhche',\n    noon: 'meadhan là',\n    morning: 'madainn',\n    afternoon: 'feasgar',\n    evening: 'feasgar',\n    night: 'oidhche'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'm',\n    pm: 'f',\n    midnight: 'm.o.',\n    noon: 'm.l.',\n    morning: 'sa mhadainn',\n    afternoon: 'feasgar',\n    evening: 'feasgar',\n    night: 'air an oidhche'\n  },\n  abbreviated: {\n    am: 'M.',\n    pm: 'F.',\n    midnight: 'meadhan oidhche',\n    noon: 'meadhan là',\n    morning: 'sa mhadainn',\n    afternoon: 'feasgar',\n    evening: 'feasgar',\n    night: 'air an oidhche'\n  },\n  wide: {\n    am: 'm.',\n    pm: 'f.',\n    midnight: 'meadhan oidhche',\n    noon: 'meadhan là',\n    morning: 'sa mhadainn',\n    afternoon: 'feasgar',\n    evening: 'feasgar',\n    night: 'air an oidhche'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  var number = Number(dirtyNumber);\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'd';\n      case 2:\n        return number + 'na';\n    }\n  }\n  if (rem100 === 12) {\n    return number + 'na';\n  }\n  return number + 'mh';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(d|na|tr|mh)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(r|a)/i,\n  abbreviated: /^(r\\.?\\s?c\\.?|r\\.?\\s?a\\.?\\s?c\\.?|a\\.?\\s?d\\.?|a\\.?\\s?c\\.?)/i,\n  wide: /^(ro Chrìosta|ron aois choitchinn|anno domini|aois choitcheann)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^c[1234]/i,\n  wide: /^[1234](cd|na|tr|mh)? cairteal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[fgmcòilsd]/i,\n  abbreviated: /^(faoi|gear|màrt|gibl|cèit|ògmh|iuch|lùn|sult|dàmh|samh|dùbh)/i,\n  wide: /^(am faoilleach|an gearran|am màrt|an giblean|an cèitean|an t-Ògmhios|an t-Iuchar|an lùnastal|an t-Sultain|an dàmhair|an t-Samhain|an dùbhlachd)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^f/i, /^g/i, /^m/i, /^g/i, /^c/i, /^ò/i, /^i/i, /^l/i, /^s/i, /^d/i, /^s/i, /^d/i],\n  any: [/^fa/i, /^ge/i, /^mà/i, /^gi/i, /^c/i, /^ò/i, /^i/i, /^l/i, /^su/i, /^d/i, /^sa/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmcahs]/i,\n  short: /^(dò|lu|mà|ci|ar|ha|sa)/i,\n  abbreviated: /^(did|dil|dim|dic|dia|dih|dis)/i,\n  wide: /^(didòmhnaich|diluain|dimàirt|diciadain|diardaoin|dihaoine|disathairne)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^c/i, /^a/i, /^h/i, /^s/i],\n  any: [/^d/i, /^l/i, /^m/i, /^c/i, /^a/i, /^h/i, /^s/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(san|aig) (madainn|feasgar|feasgar|oidhche))/i,\n  any: /^([ap]\\.?\\s?m\\.?|meadhan oidhche|meadhan là|(san|aig) (madainn|feasgar|feasgar|oidhche))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^m/i,\n    pm: /^f/i,\n    midnight: /^meadhan oidhche/i,\n    noon: /^meadhan là/i,\n    morning: /sa mhadainn/i,\n    afternoon: /feasgar/i,\n    evening: /feasgar/i,\n    night: /air an oidhche/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'menos dun segundo',\n    other: 'menos de {{count}} segundos'\n  },\n  xSeconds: {\n    one: '1 segundo',\n    other: '{{count}} segundos'\n  },\n  halfAMinute: 'medio minuto',\n  lessThanXMinutes: {\n    one: 'menos dun minuto',\n    other: 'menos de {{count}} minutos'\n  },\n  xMinutes: {\n    one: '1 minuto',\n    other: '{{count}} minutos'\n  },\n  aboutXHours: {\n    one: 'arredor dunha hora',\n    other: 'arredor de {{count}} horas'\n  },\n  xHours: {\n    one: '1 hora',\n    other: '{{count}} horas'\n  },\n  xDays: {\n    one: '1 día',\n    other: '{{count}} días'\n  },\n  aboutXWeeks: {\n    one: 'arredor dunha semana',\n    other: 'arredor de {{count}} semanas'\n  },\n  xWeeks: {\n    one: '1 semana',\n    other: '{{count}} semanas'\n  },\n  aboutXMonths: {\n    one: 'arredor de 1 mes',\n    other: 'arredor de {{count}} meses'\n  },\n  xMonths: {\n    one: '1 mes',\n    other: '{{count}} meses'\n  },\n  aboutXYears: {\n    one: 'arredor dun ano',\n    other: 'arredor de {{count}} anos'\n  },\n  xYears: {\n    one: '1 ano',\n    other: '{{count}} anos'\n  },\n  overXYears: {\n    one: 'máis dun ano',\n    other: 'máis de {{count}} anos'\n  },\n  almostXYears: {\n    one: 'case un ano',\n    other: 'case {{count}} anos'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'en ' + result;\n    } else {\n      return 'hai ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d 'de' MMMM y\",\n  long: \"d 'de' MMMM y\",\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'ás' {{time}}\",\n  long: \"{{date}} 'ás' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'o' eeee 'pasado á' LT\",\n  yesterday: \"'onte á' p\",\n  today: \"'hoxe á' p\",\n  tomorrow: \"'mañá á' p\",\n  nextWeek: \"eeee 'á' p\",\n  other: 'P'\n};\nvar formatRelativeLocalePlural = {\n  lastWeek: \"'o' eeee 'pasado ás' p\",\n  yesterday: \"'onte ás' p\",\n  today: \"'hoxe ás' p\",\n  tomorrow: \"'mañá ás' p\",\n  nextWeek: \"eeee 'ás' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  if (date.getUTCHours() !== 1) {\n    return formatRelativeLocalePlural[token];\n  }\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Galician locale.\n * @language Galician\n * @iso-639-2 glg\n * @author Alberto Doval - Cocodin Technology[@cocodinTech]{@link https://github.com/cocodinTech}\n * @author Fidel Pita [@fidelpita]{@link https://github.com/fidelpita}\n */\nvar locale = {\n  code: 'gl',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['AC', 'DC'],\n  abbreviated: ['AC', 'DC'],\n  wide: ['antes de cristo', 'despois de cristo']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']\n};\nvar monthValues = {\n  narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['xan', 'feb', 'mar', 'abr', 'mai', 'xun', 'xul', 'ago', 'set', 'out', 'nov', 'dec'],\n  wide: ['xaneiro', 'febreiro', 'marzo', 'abril', 'maio', 'xuño', 'xullo', 'agosto', 'setembro', 'outubro', 'novembro', 'decembro']\n};\nvar dayValues = {\n  narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n  short: ['do', 'lu', 'ma', 'me', 'xo', 've', 'sa'],\n  abbreviated: ['dom', 'lun', 'mar', 'mer', 'xov', 'ven', 'sab'],\n  wide: ['domingo', 'luns', 'martes', 'mércores', 'xoves', 'venres', 'sábado']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'mañá',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noite'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'medianoite',\n    noon: 'mediodía',\n    morning: 'mañá',\n    afternoon: 'tarde',\n    evening: 'tardiña',\n    night: 'noite'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'medianoite',\n    noon: 'mediodía',\n    morning: 'mañá',\n    afternoon: 'tarde',\n    evening: 'tardiña',\n    night: 'noite'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'da mañá',\n    afternoon: 'da tarde',\n    evening: 'da tardiña',\n    night: 'da noite'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'medianoite',\n    noon: 'mediodía',\n    morning: 'da mañá',\n    afternoon: 'da tarde',\n    evening: 'da tardiña',\n    night: 'da noite'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'medianoite',\n    noon: 'mediodía',\n    morning: 'da mañá',\n    afternoon: 'da tarde',\n    evening: 'da tardiña',\n    night: 'da noite'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'º';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ac|dc|a|d)/i,\n  abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n  wide: /^(antes de cristo|antes da era com[uú]n|despois de cristo|era com[uú]n)/i\n};\nvar parseEraPatterns = {\n  any: [/^ac/i, /^dc/i],\n  wide: [/^(antes de cristo|antes da era com[uú]n)/i, /^(despois de cristo|era com[uú]n)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^[1234](º)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[xfmasond]/i,\n  abbreviated: /^(xan|feb|mar|abr|mai|xun|xul|ago|set|out|nov|dec)/i,\n  wide: /^(xaneiro|febreiro|marzo|abril|maio|xuño|xullo|agosto|setembro|outubro|novembro|decembro)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^x/i, /^f/i, /^m/i, /^a/i, /^m/i, /^x/i, /^x/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^xan/i, /^feb/i, /^mar/i, /^abr/i, /^mai/i, /^xun/i, /^xul/i, /^ago/i, /^set/i, /^out/i, /^nov/i, /^dec/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmxvs]/i,\n  short: /^(do|lu|ma|me|xo|ve|sa)/i,\n  abbreviated: /^(dom|lun|mar|mer|xov|ven|sab)/i,\n  wide: /^(domingo|luns|martes|m[eé]rcores|xoves|venres|s[áa]bado)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^x/i, /^v/i, /^s/i],\n  any: [/^do/i, /^lu/i, /^ma/i, /^me/i, /^xo/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mn|md|(da|[aá]s) (mañ[aá]|tarde|noite))/i,\n  any: /^([ap]\\.?\\s?m\\.?|medianoite|mediod[ií]a|(da|[aá]s) (mañ[aá]|tarde|noite))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mn/i,\n    noon: /^md/i,\n    morning: /mañ[aá]/i,\n    afternoon: /tarde/i,\n    evening: /tardiña/i,\n    night: /noite/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","// Source: https://www.unicode.org/cldr/charts/32/summary/gu.html\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'હમણાં',\n    // CLDR #1461\n    other: '​આશરે {{count}} સેકંડ'\n  },\n  xSeconds: {\n    one: '1 સેકંડ',\n    other: '{{count}} સેકંડ'\n  },\n  halfAMinute: 'અડધી મિનિટ',\n  lessThanXMinutes: {\n    one: 'આ મિનિટ',\n    // CLDR #1448\n    other: '​આશરે {{count}} મિનિટ'\n  },\n  xMinutes: {\n    one: '1 મિનિટ',\n    other: '{{count}} મિનિટ'\n  },\n  aboutXHours: {\n    one: '​આશરે 1 કલાક',\n    other: '​આશરે {{count}} કલાક'\n  },\n  xHours: {\n    one: '1 કલાક',\n    other: '{{count}} કલાક'\n  },\n  xDays: {\n    one: '1 દિવસ',\n    other: '{{count}} દિવસ'\n  },\n  aboutXWeeks: {\n    one: 'આશરે 1 અઠવાડિયું',\n    other: 'આશરે {{count}} અઠવાડિયા'\n  },\n  xWeeks: {\n    one: '1 અઠવાડિયું',\n    other: '{{count}} અઠવાડિયા'\n  },\n  aboutXMonths: {\n    one: 'આશરે 1 મહિનો',\n    other: 'આશરે {{count}} મહિના'\n  },\n  xMonths: {\n    one: '1 મહિનો',\n    other: '{{count}} મહિના'\n  },\n  aboutXYears: {\n    one: 'આશરે 1 વર્ષ',\n    other: 'આશરે {{count}} વર્ષ'\n  },\n  xYears: {\n    one: '1 વર્ષ',\n    other: '{{count}} વર્ષ'\n  },\n  overXYears: {\n    one: '1 વર્ષથી વધુ',\n    other: '{{count}} વર્ષથી વધુ'\n  },\n  almostXYears: {\n    one: 'લગભગ 1 વર્ષ',\n    other: 'લગભગ {{count}} વર્ષ'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + 'માં';\n    } else {\n      return result + ' પહેલાં';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\"; //Source: https://www.unicode.org/cldr/charts/32/summary/gu.html\nvar dateFormats = {\n  full: 'EEEE, d MMMM, y',\n  // CLDR #1825\n  long: 'd MMMM, y',\n  // CLDR #1826\n  medium: 'd MMM, y',\n  // CLDR #1827\n  short: 'd/M/yy' // CLDR #1828\n};\n\nvar timeFormats = {\n  full: 'hh:mm:ss a zzzz',\n  // CLDR #1829\n  long: 'hh:mm:ss a z',\n  // CLDR #1830\n  medium: 'hh:mm:ss a',\n  // CLDR #1831\n  short: 'hh:mm a' // CLDR #1832\n};\n\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  // CLDR #1833\n  long: '{{date}} {{time}}',\n  // CLDR #1834\n  medium: '{{date}} {{time}}',\n  // CLDR #1835\n  short: '{{date}} {{time}}' // CLDR #1836\n};\n\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","// Source: https://www.unicode.org/cldr/charts/32/summary/gu.html\n\nvar formatRelativeLocale = {\n  lastWeek: \"'પાછલા' eeee p\",\n  // CLDR #1384\n  yesterday: \"'ગઈકાલે' p\",\n  // CLDR #1409\n  today: \"'આજે' p\",\n  // CLDR #1410\n  tomorrow: \"'આવતીકાલે' p\",\n  // CLDR #1411\n  nextWeek: 'eeee p',\n  // CLDR #1386\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Gujarati locale (India).\n * @language Gujarati\n * @iso-639-2 guj\n * @author Manaday Mavani [@ManadayM]{@link https://github.com/manadaym}\n */\nvar locale = {\n  code: 'gu',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // https://www.unicode.org/cldr/charts/32/summary/gu.html\n// #1621 - #1630\nvar eraValues = {\n  narrow: ['ઈસપૂ', 'ઈસ'],\n  abbreviated: ['ઈ.સ.પૂર્વે', 'ઈ.સ.'],\n  wide: ['ઈસવીસન પૂર્વે', 'ઈસવીસન']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/gu.html\n// #1631 - #1654\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1લો ત્રિમાસ', '2જો ત્રિમાસ', '3જો ત્રિમાસ', '4થો ત્રિમાસ']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\n// https://www.unicode.org/cldr/charts/32/summary/gu.html\n// #1655 - #1726\nvar monthValues = {\n  narrow: ['જા', 'ફે', 'મા', 'એ', 'મે', 'જૂ', 'જુ', 'ઓ', 'સ', 'ઓ', 'ન', 'ડિ'],\n  abbreviated: ['જાન્યુ', 'ફેબ્રુ', 'માર્ચ', 'એપ્રિલ', 'મે', 'જૂન', 'જુલાઈ', 'ઑગસ્ટ', 'સપ્ટે', 'ઓક્ટો', 'નવે', 'ડિસે'],\n  wide: ['જાન્યુઆરી', 'ફેબ્રુઆરી', 'માર્ચ', 'એપ્રિલ', 'મે', 'જૂન', 'જુલાઇ', 'ઓગસ્ટ', 'સપ્ટેમ્બર', 'ઓક્ટોબર', 'નવેમ્બર', 'ડિસેમ્બર']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/gu.html\n// #1727 - #1768\nvar dayValues = {\n  narrow: ['ર', 'સો', 'મં', 'બુ', 'ગુ', 'શુ', 'શ'],\n  short: ['ર', 'સો', 'મં', 'બુ', 'ગુ', 'શુ', 'શ'],\n  abbreviated: ['રવિ', 'સોમ', 'મંગળ', 'બુધ', 'ગુરુ', 'શુક્ર', 'શનિ'],\n  wide: ['રવિવાર' /* Sunday */, 'સોમવાર' /* Monday */, 'મંગળવાર' /* Tuesday */, 'બુધવાર' /* Wednesday */, 'ગુરુવાર' /* Thursday */, 'શુક્રવાર' /* Friday */, 'શનિવાર' /* Saturday */]\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/gu.html\n// #1783 - #1824\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'મ.રાત્રિ',\n    noon: 'બ.',\n    morning: 'સવારે',\n    afternoon: 'બપોરે',\n    evening: 'સાંજે',\n    night: 'રાત્રે'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: '​મધ્યરાત્રિ',\n    noon: 'બપોરે',\n    morning: 'સવારે',\n    afternoon: 'બપોરે',\n    evening: 'સાંજે',\n    night: 'રાત્રે'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: '​મધ્યરાત્રિ',\n    noon: 'બપોરે',\n    morning: 'સવારે',\n    afternoon: 'બપોરે',\n    evening: 'સાંજે',\n    night: 'રાત્રે'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'મ.રાત્રિ',\n    noon: 'બપોરે',\n    morning: 'સવારે',\n    afternoon: 'બપોરે',\n    evening: 'સાંજે',\n    night: 'રાત્રે'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'મધ્યરાત્રિ',\n    noon: 'બપોરે',\n    morning: 'સવારે',\n    afternoon: 'બપોરે',\n    evening: 'સાંજે',\n    night: 'રાત્રે'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: '​મધ્યરાત્રિ',\n    noon: 'બપોરે',\n    morning: 'સવારે',\n    afternoon: 'બપોરે',\n    evening: 'સાંજે',\n    night: 'રાત્રે'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(લ|જ|થ|ઠ્ઠ|મ)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ઈસપૂ|ઈસ)/i,\n  abbreviated: /^(ઈ\\.સ\\.પૂર્વે|ઈ\\.સ\\.)/i,\n  wide: /^(ઈસવીસન\\sપૂર્વે|ઈસવીસન)/i\n};\nvar parseEraPatterns = {\n  any: [/^ઈસપૂ/i, /^ઈસ/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](લો|જો|થો)? ત્રિમાસ/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  // eslint-disable-next-line no-misleading-character-class\n  narrow: /^[જાફેમાએમેજૂજુઓસઓનડિ]/i,\n  abbreviated: /^(જાન્યુ|ફેબ્રુ|માર્ચ|એપ્રિલ|મે|જૂન|જુલાઈ|ઑગસ્ટ|સપ્ટે|ઓક્ટો|નવે|ડિસે)/i,\n  wide: /^(જાન્યુઆરી|ફેબ્રુઆરી|માર્ચ|એપ્રિલ|મે|જૂન|જુલાઇ|ઓગસ્ટ|સપ્ટેમ્બર|ઓક્ટોબર|નવેમ્બર|ડિસેમ્બર)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^જા/i, /^ફે/i, /^મા/i, /^એ/i, /^મે/i, /^જૂ/i, /^જુ/i, /^ઑગ/i, /^સ/i, /^ઓક્ટો/i, /^ન/i, /^ડિ/i],\n  any: [/^જા/i, /^ફે/i, /^મા/i, /^એ/i, /^મે/i, /^જૂ/i, /^જુ/i, /^ઑગ/i, /^સ/i, /^ઓક્ટો/i, /^ન/i, /^ડિ/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(ર|સો|મં|બુ|ગુ|શુ|શ)/i,\n  short: /^(ર|સો|મં|બુ|ગુ|શુ|શ)/i,\n  abbreviated: /^(રવિ|સોમ|મંગળ|બુધ|ગુરુ|શુક્ર|શનિ)/i,\n  wide: /^(રવિવાર|સોમવાર|મંગળવાર|બુધવાર|ગુરુવાર|શુક્રવાર|શનિવાર)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ર/i, /^સો/i, /^મં/i, /^બુ/i, /^ગુ/i, /^શુ/i, /^શ/i],\n  any: [/^ર/i, /^સો/i, /^મં/i, /^બુ/i, /^ગુ/i, /^શુ/i, /^શ/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|મ\\.?|સ|બ|સાં|રા)/i,\n  any: /^(a|p|મ\\.?|સ|બ|સાં|રા)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^મ\\.?/i,\n    noon: /^બ/i,\n    morning: /સ/i,\n    afternoon: /બ/i,\n    evening: /સાં/i,\n    night: /રા/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'פחות משנייה',\n    two: 'פחות משתי שניות',\n    other: 'פחות מ־{{count}} שניות'\n  },\n  xSeconds: {\n    one: 'שנייה',\n    two: 'שתי שניות',\n    other: '{{count}} שניות'\n  },\n  halfAMinute: 'חצי דקה',\n  lessThanXMinutes: {\n    one: 'פחות מדקה',\n    two: 'פחות משתי דקות',\n    other: 'פחות מ־{{count}} דקות'\n  },\n  xMinutes: {\n    one: 'דקה',\n    two: 'שתי דקות',\n    other: '{{count}} דקות'\n  },\n  aboutXHours: {\n    one: 'כשעה',\n    two: 'כשעתיים',\n    other: 'כ־{{count}} שעות'\n  },\n  xHours: {\n    one: 'שעה',\n    two: 'שעתיים',\n    other: '{{count}} שעות'\n  },\n  xDays: {\n    one: 'יום',\n    two: 'יומיים',\n    other: '{{count}} ימים'\n  },\n  aboutXWeeks: {\n    one: 'כשבוע',\n    two: 'כשבועיים',\n    other: 'כ־{{count}} שבועות'\n  },\n  xWeeks: {\n    one: 'שבוע',\n    two: 'שבועיים',\n    other: '{{count}} שבועות'\n  },\n  aboutXMonths: {\n    one: 'כחודש',\n    two: 'כחודשיים',\n    other: 'כ־{{count}} חודשים'\n  },\n  xMonths: {\n    one: 'חודש',\n    two: 'חודשיים',\n    other: '{{count}} חודשים'\n  },\n  aboutXYears: {\n    one: 'כשנה',\n    two: 'כשנתיים',\n    other: 'כ־{{count}} שנים'\n  },\n  xYears: {\n    one: 'שנה',\n    two: 'שנתיים',\n    other: '{{count}} שנים'\n  },\n  overXYears: {\n    one: 'יותר משנה',\n    two: 'יותר משנתיים',\n    other: 'יותר מ־{{count}} שנים'\n  },\n  almostXYears: {\n    one: 'כמעט שנה',\n    two: 'כמעט שנתיים',\n    other: 'כמעט {{count}} שנים'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  // Return word instead of `in one day` or `one day ago`\n  if (token === 'xDays' && options !== null && options !== void 0 && options.addSuffix && count <= 2) {\n    if (options.comparison && options.comparison > 0) {\n      return count === 1 ? 'מחר' : 'מחרתיים';\n    }\n    return count === 1 ? 'אתמול' : 'שלשום';\n  }\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 2) {\n    result = tokenValue.two;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'בעוד ' + result;\n    } else {\n      return 'לפני ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d בMMMM y',\n  long: 'd בMMMM y',\n  medium: 'd בMMM y',\n  short: 'd.M.y'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'בשעה' {{time}}\",\n  long: \"{{date}} 'בשעה' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'שעבר בשעה' p\",\n  yesterday: \"'אתמול בשעה' p\",\n  today: \"'היום בשעה' p\",\n  tomorrow: \"'מחר בשעה' p\",\n  nextWeek: \"eeee 'בשעה' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['לפנה״ס', 'לספירה'],\n  abbreviated: ['לפנה״ס', 'לספירה'],\n  wide: ['לפני הספירה', 'לספירה']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['רבעון 1', 'רבעון 2', 'רבעון 3', 'רבעון 4']\n};\nvar monthValues = {\n  narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  abbreviated: ['ינו׳', 'פבר׳', 'מרץ', 'אפר׳', 'מאי', 'יוני', 'יולי', 'אוג׳', 'ספט׳', 'אוק׳', 'נוב׳', 'דצמ׳'],\n  wide: ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר']\n};\nvar dayValues = {\n  narrow: ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],\n  short: ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],\n  abbreviated: ['יום א׳', 'יום ב׳', 'יום ג׳', 'יום ד׳', 'יום ה׳', 'יום ו׳', 'שבת'],\n  wide: ['יום ראשון', 'יום שני', 'יום שלישי', 'יום רביעי', 'יום חמישי', 'יום שישי', 'יום שבת']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'לפנה״צ',\n    pm: 'אחה״צ',\n    midnight: 'חצות',\n    noon: 'צהריים',\n    morning: 'בוקר',\n    afternoon: 'אחר הצהריים',\n    evening: 'ערב',\n    night: 'לילה'\n  },\n  abbreviated: {\n    am: 'לפנה״צ',\n    pm: 'אחה״צ',\n    midnight: 'חצות',\n    noon: 'צהריים',\n    morning: 'בוקר',\n    afternoon: 'אחר הצהריים',\n    evening: 'ערב',\n    night: 'לילה'\n  },\n  wide: {\n    am: 'לפנה״צ',\n    pm: 'אחה״צ',\n    midnight: 'חצות',\n    noon: 'צהריים',\n    morning: 'בוקר',\n    afternoon: 'אחר הצהריים',\n    evening: 'ערב',\n    night: 'לילה'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'לפנה״צ',\n    pm: 'אחה״צ',\n    midnight: 'חצות',\n    noon: 'צהריים',\n    morning: 'בבוקר',\n    afternoon: 'בצהריים',\n    evening: 'בערב',\n    night: 'בלילה'\n  },\n  abbreviated: {\n    am: 'לפנה״צ',\n    pm: 'אחה״צ',\n    midnight: 'חצות',\n    noon: 'צהריים',\n    morning: 'בבוקר',\n    afternoon: 'אחר הצהריים',\n    evening: 'בערב',\n    night: 'בלילה'\n  },\n  wide: {\n    am: 'לפנה״צ',\n    pm: 'אחה״צ',\n    midnight: 'חצות',\n    noon: 'צהריים',\n    morning: 'בבוקר',\n    afternoon: 'אחר הצהריים',\n    evening: 'בערב',\n    night: 'בלילה'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n\n  // We only show words till 10\n  if (number <= 0 || number > 10) return String(number);\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  var isFemale = ['year', 'hour', 'minute', 'second'].indexOf(unit) >= 0;\n  var male = ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שביעי', 'שמיני', 'תשיעי', 'עשירי'];\n  var female = ['ראשונה', 'שנייה', 'שלישית', 'רביעית', 'חמישית', 'שישית', 'שביעית', 'שמינית', 'תשיעית', 'עשירית'];\n  var index = number - 1;\n  return isFemale ? female[index] : male[index];\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+|(ראשון|שני|שלישי|רביעי|חמישי|שישי|שביעי|שמיני|תשיעי|עשירי|ראשונה|שנייה|שלישית|רביעית|חמישית|שישית|שביעית|שמינית|תשיעית|עשירית))/i;\nvar parseOrdinalNumberPattern = /^(\\d+|רא|שנ|של|רב|ח|שי|שב|שמ|ת|ע)/i;\nvar matchEraPatterns = {\n  narrow: /^ל(ספירה|פנה״ס)/i,\n  abbreviated: /^ל(ספירה|פנה״ס)/i,\n  wide: /^ל(פני ה)?ספירה/i\n};\nvar parseEraPatterns = {\n  any: [/^לפ/i, /^לס/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^רבעון [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^\\d+/i,\n  abbreviated: /^(ינו|פבר|מרץ|אפר|מאי|יוני|יולי|אוג|ספט|אוק|נוב|דצמ)׳?/i,\n  wide: /^(ינואר|פברואר|מרץ|אפריל|מאי|יוני|יולי|אוגוסט|ספטמבר|אוקטובר|נובמבר|דצמבר)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^1$/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^7/i, /^8/i, /^9/i, /^10/i, /^11/i, /^12/i],\n  any: [/^ינ/i, /^פ/i, /^מר/i, /^אפ/i, /^מא/i, /^יונ/i, /^יול/i, /^אוג/i, /^ס/i, /^אוק/i, /^נ/i, /^ד/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[אבגדהוש]׳/i,\n  short: /^[אבגדהוש]׳/i,\n  abbreviated: /^(שבת|יום (א|ב|ג|ד|ה|ו)׳)/i,\n  wide: /^יום (ראשון|שני|שלישי|רביעי|חמישי|שישי|שבת)/i\n};\nvar parseDayPatterns = {\n  abbreviated: [/א׳$/i, /ב׳$/i, /ג׳$/i, /ד׳$/i, /ה׳$/i, /ו׳$/i, /^ש/i],\n  wide: [/ן$/i, /ני$/i, /לישי$/i, /עי$/i, /מישי$/i, /שישי$/i, /ת$/i],\n  any: [/^א/i, /^ב/i, /^ג/i, /^ד/i, /^ה/i, /^ו/i, /^ש/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(אחר ה|ב)?(חצות|צהריים|בוקר|ערב|לילה|אחה״צ|לפנה״צ)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^לפ/i,\n    pm: /^אחה/i,\n    midnight: /^ח/i,\n    noon: /^צ/i,\n    morning: /בוקר/i,\n    afternoon: /בצ|אחר/i,\n    evening: /ערב/i,\n    night: /לילה/i\n  }\n};\nvar ordinalName = ['רא', 'שנ', 'של', 'רב', 'ח', 'שי', 'שב', 'שמ', 'ת', 'ע'];\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      var number = parseInt(value, 10);\n      return isNaN(number) ? ordinalName.indexOf(value) + 1 : number;\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Hebrew locale.\n * @language Hebrew\n * @iso-639-2 heb\n * @author Nir Lahad [@nirlah]{@link https://github.com/nirlah}\n */\nvar locale = {\n  code: 'he',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar numberValues = {\n  locale: {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n  },\n  number: {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n  }\n};\n\n// CLDR #1585 - #1592\nvar eraValues = {\n  narrow: ['ईसा-पूर्व', 'ईस्वी'],\n  abbreviated: ['ईसा-पूर्व', 'ईस्वी'],\n  wide: ['ईसा-पूर्व', 'ईसवी सन']\n};\n\n// CLDR #1593 - #1616\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ति1', 'ति2', 'ति3', 'ति4'],\n  wide: ['पहली तिमाही', 'दूसरी तिमाही', 'तीसरी तिमाही', 'चौथी तिमाही']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n// https://www.unicode.org/cldr/charts/32/summary/hi.html\n// CLDR #1617 - #1688\nvar monthValues = {\n  narrow: ['ज', 'फ़', 'मा', 'अ', 'मई', 'जू', 'जु', 'अग', 'सि', 'अक्टू', 'न', 'दि'],\n  abbreviated: ['जन', 'फ़र', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुल', 'अग', 'सित', 'अक्टू', 'नव', 'दिस'],\n  wide: ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितंबर', 'अक्टूबर', 'नवंबर', 'दिसंबर']\n};\n\n// CLDR #1689 - #1744\nvar dayValues = {\n  narrow: ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],\n  short: ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],\n  abbreviated: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],\n  wide: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'पूर्वाह्न',\n    pm: 'अपराह्न',\n    midnight: 'मध्यरात्रि',\n    noon: 'दोपहर',\n    morning: 'सुबह',\n    afternoon: 'दोपहर',\n    evening: 'शाम',\n    night: 'रात'\n  },\n  abbreviated: {\n    am: 'पूर्वाह्न',\n    pm: 'अपराह्न',\n    midnight: 'मध्यरात्रि',\n    noon: 'दोपहर',\n    morning: 'सुबह',\n    afternoon: 'दोपहर',\n    evening: 'शाम',\n    night: 'रात'\n  },\n  wide: {\n    am: 'पूर्वाह्न',\n    pm: 'अपराह्न',\n    midnight: 'मध्यरात्रि',\n    noon: 'दोपहर',\n    morning: 'सुबह',\n    afternoon: 'दोपहर',\n    evening: 'शाम',\n    night: 'रात'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'पूर्वाह्न',\n    pm: 'अपराह्न',\n    midnight: 'मध्यरात्रि',\n    noon: 'दोपहर',\n    morning: 'सुबह',\n    afternoon: 'दोपहर',\n    evening: 'शाम',\n    night: 'रात'\n  },\n  abbreviated: {\n    am: 'पूर्वाह्न',\n    pm: 'अपराह्न',\n    midnight: 'मध्यरात्रि',\n    noon: 'दोपहर',\n    morning: 'सुबह',\n    afternoon: 'दोपहर',\n    evening: 'शाम',\n    night: 'रात'\n  },\n  wide: {\n    am: 'पूर्वाह्न',\n    pm: 'अपराह्न',\n    midnight: 'मध्यरात्रि',\n    noon: 'दोपहर',\n    morning: 'सुबह',\n    afternoon: 'दोपहर',\n    evening: 'शाम',\n    night: 'रात'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return numberToLocale(number);\n};\nexport function localeToNumber(locale) {\n  var enNumber = locale.toString().replace(/[१२३४५६७८९०]/g, function (match) {\n    return numberValues.number[match];\n  });\n  return Number(enNumber);\n}\nexport function numberToLocale(enNumber) {\n  return enNumber.toString().replace(/\\d/g, function (match) {\n    return numberValues.locale[match];\n  });\n}\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import { numberToLocale } from \"../localize/index.js\"; // Source: https://www.unicode.org/cldr/charts/32/summary/hi.html\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '१ सेकंड से कम',\n    // CLDR #1310\n    other: '{{count}} सेकंड से कम'\n  },\n  xSeconds: {\n    one: '१ सेकंड',\n    other: '{{count}} सेकंड'\n  },\n  halfAMinute: 'आधा मिनट',\n  lessThanXMinutes: {\n    one: '१ मिनट से कम',\n    other: '{{count}} मिनट से कम'\n  },\n  xMinutes: {\n    one: '१ मिनट',\n    // CLDR #1307\n    other: '{{count}} मिनट'\n  },\n  aboutXHours: {\n    one: 'लगभग १ घंटा',\n    other: 'लगभग {{count}} घंटे'\n  },\n  xHours: {\n    one: '१ घंटा',\n    // CLDR #1304\n    other: '{{count}} घंटे' // CLDR #4467\n  },\n\n  xDays: {\n    one: '१ दिन',\n    // CLDR #1286\n    other: '{{count}} दिन'\n  },\n  aboutXWeeks: {\n    one: 'लगभग १ सप्ताह',\n    other: 'लगभग {{count}} सप्ताह'\n  },\n  xWeeks: {\n    one: '१ सप्ताह',\n    other: '{{count}} सप्ताह'\n  },\n  aboutXMonths: {\n    one: 'लगभग १ महीना',\n    other: 'लगभग {{count}} महीने'\n  },\n  xMonths: {\n    one: '१ महीना',\n    other: '{{count}} महीने'\n  },\n  aboutXYears: {\n    one: 'लगभग १ वर्ष',\n    other: 'लगभग {{count}} वर्ष' // CLDR #4823\n  },\n\n  xYears: {\n    one: '१ वर्ष',\n    other: '{{count}} वर्ष'\n  },\n  overXYears: {\n    one: '१ वर्ष से अधिक',\n    other: '{{count}} वर्ष से अधिक'\n  },\n  almostXYears: {\n    one: 'लगभग १ वर्ष',\n    other: 'लगभग {{count}} वर्ष'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', numberToLocale(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + 'मे ';\n    } else {\n      return result + ' पहले';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, do MMMM, y',\n  // CLDR #1787\n  long: 'do MMMM, y',\n  // CLDR #1788\n  medium: 'd MMM, y',\n  // CLDR #1789\n  short: 'dd/MM/yyyy' // CLDR #1790\n};\n\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  // CLDR #1791\n  long: 'h:mm:ss a z',\n  // CLDR #1792\n  medium: 'h:mm:ss a',\n  // CLDR #1793\n  short: 'h:mm a' // CLDR #1794\n};\n\nvar dateTimeFormats = {\n  full: \"{{date}} 'को' {{time}}\",\n  // CLDR #1795\n  long: \"{{date}} 'को' {{time}}\",\n  // CLDR #1796\n  medium: '{{date}}, {{time}}',\n  // CLDR #1797\n  short: '{{date}}, {{time}}' // CLDR #1798\n};\n\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'पिछले' eeee p\",\n  yesterday: \"'कल' p\",\n  today: \"'आज' p\",\n  tomorrow: \"'कल' p\",\n  nextWeek: \"eeee 'को' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Hindi locale (India).\n * @language Hindi\n * @iso-639-2 hin\n * @author Mukesh Mandiwal [@mukeshmandiwal]{@link https://github.com/mukeshmandiwal}\n */\nvar locale = {\n  code: 'hi',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport { localeToNumber } from \"../localize/index.js\";\nvar matchOrdinalNumberPattern = /^[०१२३४५६७८९]+/i;\nvar parseOrdinalNumberPattern = /^[०१२३४५६७८९]+/i;\nvar matchEraPatterns = {\n  narrow: /^(ईसा-पूर्व|ईस्वी)/i,\n  abbreviated: /^(ईसा\\.?\\s?पूर्व\\.?|ईसा\\.?)/i,\n  wide: /^(ईसा-पूर्व|ईसवी पूर्व|ईसवी सन|ईसवी)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ति[1234]/i,\n  wide: /^[1234](पहली|दूसरी|तीसरी|चौथी)? तिमाही/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  // eslint-disable-next-line no-misleading-character-class\n  narrow: /^[जफ़माअप्मईजूनजुअगसिअक्तनदि]/i,\n  abbreviated: /^(जन|फ़र|मार्च|अप्|मई|जून|जुल|अग|सित|अक्तू|नव|दिस)/i,\n  wide: /^(जनवरी|फ़रवरी|मार्च|अप्रैल|मई|जून|जुलाई|अगस्त|सितंबर|अक्तूबर|नवंबर|दिसंबर)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ज/i, /^फ़/i, /^मा/i, /^अप्/i, /^मई/i, /^जू/i, /^जु/i, /^अग/i, /^सि/i, /^अक्तू/i, /^न/i, /^दि/i],\n  any: [/^जन/i, /^फ़/i, /^मा/i, /^अप्/i, /^मई/i, /^जू/i, /^जु/i, /^अग/i, /^सि/i, /^अक्तू/i, /^नव/i, /^दिस/i]\n};\nvar matchDayPatterns = {\n  // eslint-disable-next-line no-misleading-character-class\n  narrow: /^[रविसोममंगलबुधगुरुशुक्रशनि]/i,\n  short: /^(रवि|सोम|मंगल|बुध|गुरु|शुक्र|शनि)/i,\n  abbreviated: /^(रवि|सोम|मंगल|बुध|गुरु|शुक्र|शनि)/i,\n  wide: /^(रविवार|सोमवार|मंगलवार|बुधवार|गुरुवार|शुक्रवार|शनिवार)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^रवि/i, /^सोम/i, /^मंगल/i, /^बुध/i, /^गुरु/i, /^शुक्र/i, /^शनि/i],\n  any: [/^रवि/i, /^सोम/i, /^मंगल/i, /^बुध/i, /^गुरु/i, /^शुक्र/i, /^शनि/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(पू|अ|म|द.\\?|सु|दो|शा|रा)/i,\n  any: /^(पूर्वाह्न|अपराह्न|म|द.\\?|सु|दो|शा|रा)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^पूर्वाह्न/i,\n    pm: /^अपराह्न/i,\n    midnight: /^मध्य/i,\n    noon: /^दो/i,\n    morning: /सु/i,\n    afternoon: /दो/i,\n    evening: /शा/i,\n    night: /रा/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: localeToNumber\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      standalone: 'manje od 1 sekunde',\n      withPrepositionAgo: 'manje od 1 sekunde',\n      withPrepositionIn: 'manje od 1 sekundu'\n    },\n    dual: 'manje od {{count}} sekunde',\n    other: 'manje od {{count}} sekundi'\n  },\n  xSeconds: {\n    one: {\n      standalone: '1 sekunda',\n      withPrepositionAgo: '1 sekunde',\n      withPrepositionIn: '1 sekundu'\n    },\n    dual: '{{count}} sekunde',\n    other: '{{count}} sekundi'\n  },\n  halfAMinute: 'pola minute',\n  lessThanXMinutes: {\n    one: {\n      standalone: 'manje od 1 minute',\n      withPrepositionAgo: 'manje od 1 minute',\n      withPrepositionIn: 'manje od 1 minutu'\n    },\n    dual: 'manje od {{count}} minute',\n    other: 'manje od {{count}} minuta'\n  },\n  xMinutes: {\n    one: {\n      standalone: '1 minuta',\n      withPrepositionAgo: '1 minute',\n      withPrepositionIn: '1 minutu'\n    },\n    dual: '{{count}} minute',\n    other: '{{count}} minuta'\n  },\n  aboutXHours: {\n    one: {\n      standalone: 'oko 1 sat',\n      withPrepositionAgo: 'oko 1 sat',\n      withPrepositionIn: 'oko 1 sat'\n    },\n    dual: 'oko {{count}} sata',\n    other: 'oko {{count}} sati'\n  },\n  xHours: {\n    one: {\n      standalone: '1 sat',\n      withPrepositionAgo: '1 sat',\n      withPrepositionIn: '1 sat'\n    },\n    dual: '{{count}} sata',\n    other: '{{count}} sati'\n  },\n  xDays: {\n    one: {\n      standalone: '1 dan',\n      withPrepositionAgo: '1 dan',\n      withPrepositionIn: '1 dan'\n    },\n    dual: '{{count}} dana',\n    other: '{{count}} dana'\n  },\n  aboutXWeeks: {\n    one: {\n      standalone: 'oko 1 tjedan',\n      withPrepositionAgo: 'oko 1 tjedan',\n      withPrepositionIn: 'oko 1 tjedan'\n    },\n    dual: 'oko {{count}} tjedna',\n    other: 'oko {{count}} tjedana'\n  },\n  xWeeks: {\n    one: {\n      standalone: '1 tjedan',\n      withPrepositionAgo: '1 tjedan',\n      withPrepositionIn: '1 tjedan'\n    },\n    dual: '{{count}} tjedna',\n    other: '{{count}} tjedana'\n  },\n  aboutXMonths: {\n    one: {\n      standalone: 'oko 1 mjesec',\n      withPrepositionAgo: 'oko 1 mjesec',\n      withPrepositionIn: 'oko 1 mjesec'\n    },\n    dual: 'oko {{count}} mjeseca',\n    other: 'oko {{count}} mjeseci'\n  },\n  xMonths: {\n    one: {\n      standalone: '1 mjesec',\n      withPrepositionAgo: '1 mjesec',\n      withPrepositionIn: '1 mjesec'\n    },\n    dual: '{{count}} mjeseca',\n    other: '{{count}} mjeseci'\n  },\n  aboutXYears: {\n    one: {\n      standalone: 'oko 1 godinu',\n      withPrepositionAgo: 'oko 1 godinu',\n      withPrepositionIn: 'oko 1 godinu'\n    },\n    dual: 'oko {{count}} godine',\n    other: 'oko {{count}} godina'\n  },\n  xYears: {\n    one: {\n      standalone: '1 godina',\n      withPrepositionAgo: '1 godine',\n      withPrepositionIn: '1 godinu'\n    },\n    dual: '{{count}} godine',\n    other: '{{count}} godina'\n  },\n  overXYears: {\n    one: {\n      standalone: 'preko 1 godinu',\n      withPrepositionAgo: 'preko 1 godinu',\n      withPrepositionIn: 'preko 1 godinu'\n    },\n    dual: 'preko {{count}} godine',\n    other: 'preko {{count}} godina'\n  },\n  almostXYears: {\n    one: {\n      standalone: 'gotovo 1 godinu',\n      withPrepositionAgo: 'gotovo 1 godinu',\n      withPrepositionIn: 'gotovo 1 godinu'\n    },\n    dual: 'gotovo {{count}} godine',\n    other: 'gotovo {{count}} godina'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        result = tokenValue.one.withPrepositionIn;\n      } else {\n        result = tokenValue.one.withPrepositionAgo;\n      }\n    } else {\n      result = tokenValue.one.standalone;\n    }\n  } else if (count % 10 > 1 && count % 10 < 5 &&\n  // if last digit is between 2 and 4\n  String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is \"1\"\n  ) {\n    result = tokenValue.dual.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'za ' + result;\n    } else {\n      return 'prije ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d. MMMM y.',\n  long: 'd. MMMM y.',\n  medium: 'd. MMM y.',\n  short: 'dd. MM. y.'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss (zzzz)',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'u' {{time}}\",\n  long: \"{{date}} 'u' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    switch (date.getUTCDay()) {\n      case 0:\n        return \"'prošlu nedjelju u' p\";\n      case 3:\n        return \"'prošlu srijedu u' p\";\n      case 6:\n        return \"'prošlu subotu u' p\";\n      default:\n        return \"'prošli' EEEE 'u' p\";\n    }\n  },\n  yesterday: \"'jučer u' p\",\n  today: \"'danas u' p\",\n  tomorrow: \"'sutra u' p\",\n  nextWeek: function nextWeek(date) {\n    switch (date.getUTCDay()) {\n      case 0:\n        return \"'iduću nedjelju u' p\";\n      case 3:\n        return \"'iduću srijedu u' p\";\n      case 6:\n        return \"'iduću subotu u' p\";\n      default:\n        return \"'prošli' EEEE 'u' p\";\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Croatian locale.\n * @language Croatian\n * @iso-639-2 hrv\n * @author Matija Marohnić [@silvenon]{@link https://github.com/silvenon}\n * @author Manico [@manico]{@link https://github.com/manico}\n * @author Ivan Jeržabek [@jerzabek]{@link https://github.com/jerzabek}\n */\nvar locale = {\n  code: 'hr',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['pr.n.e.', 'AD'],\n  abbreviated: ['pr. Kr.', 'po. Kr.'],\n  wide: ['Prije Krista', 'Poslije Krista']\n};\nvar quarterValues = {\n  narrow: ['1.', '2.', '3.', '4.'],\n  abbreviated: ['1. kv.', '2. kv.', '3. kv.', '4. kv.'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['sij', 'velj', 'ožu', 'tra', 'svi', 'lip', 'srp', 'kol', 'ruj', 'lis', 'stu', 'pro'],\n  wide: ['siječanj', 'veljača', 'ožujak', 'travanj', 'svibanj', 'lipanj', 'srpanj', 'kolovoz', 'rujan', 'listopad', 'studeni', 'prosinac']\n};\nvar formattingMonthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['sij', 'velj', 'ožu', 'tra', 'svi', 'lip', 'srp', 'kol', 'ruj', 'lis', 'stu', 'pro'],\n  wide: ['siječnja', 'veljače', 'ožujka', 'travnja', 'svibnja', 'lipnja', 'srpnja', 'kolovoza', 'rujna', 'listopada', 'studenog', 'prosinca']\n};\nvar dayValues = {\n  narrow: ['N', 'P', 'U', 'S', 'Č', 'P', 'S'],\n  short: ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],\n  abbreviated: ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],\n  wide: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota']\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutro',\n    afternoon: 'popodne',\n    evening: 'navečer',\n    night: 'noću'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutro',\n    afternoon: 'popodne',\n    evening: 'navečer',\n    night: 'noću'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutro',\n    afternoon: 'poslije podne',\n    evening: 'navečer',\n    night: 'noću'\n  }\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutro',\n    afternoon: 'popodne',\n    evening: 'navečer',\n    night: 'noću'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutro',\n    afternoon: 'popodne',\n    evening: 'navečer',\n    night: 'noću'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutro',\n    afternoon: 'poslije podne',\n    evening: 'navečer',\n    night: 'noću'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(pr\\.n\\.e\\.|AD)/i,\n  abbreviated: /^(pr\\.\\s?Kr\\.|po\\.\\s?Kr\\.)/i,\n  wide: /^(Prije Krista|prije nove ere|Poslije Krista|nova era)/i\n};\nvar parseEraPatterns = {\n  any: [/^pr/i, /^(po|nova)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]\\.\\s?kv\\.?/i,\n  wide: /^[1234]\\. kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(10|11|12|[123456789])\\./i,\n  abbreviated: /^(sij|velj|(ožu|ozu)|tra|svi|lip|srp|kol|ruj|lis|stu|pro)/i,\n  wide: /^((siječanj|siječnja|sijecanj|sijecnja)|(veljača|veljače|veljaca|veljace)|(ožujak|ožujka|ozujak|ozujka)|(travanj|travnja)|(svibanj|svibnja)|(lipanj|lipnja)|(srpanj|srpnja)|(kolovoz|kolovoza)|(rujan|rujna)|(listopad|listopada)|(studeni|studenog)|(prosinac|prosinca))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/1/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i, /8/i, /9/i, /10/i, /11/i, /12/i],\n  abbreviated: [/^sij/i, /^velj/i, /^(ožu|ozu)/i, /^tra/i, /^svi/i, /^lip/i, /^srp/i, /^kol/i, /^ruj/i, /^lis/i, /^stu/i, /^pro/i],\n  wide: [/^sij/i, /^velj/i, /^(ožu|ozu)/i, /^tra/i, /^svi/i, /^lip/i, /^srp/i, /^kol/i, /^ruj/i, /^lis/i, /^stu/i, /^pro/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[npusčc]/i,\n  short: /^(ned|pon|uto|sri|(čet|cet)|pet|sub)/i,\n  abbreviated: /^(ned|pon|uto|sri|(čet|cet)|pet|sub)/i,\n  wide: /^(nedjelja|ponedjeljak|utorak|srijeda|(četvrtak|cetvrtak)|petak|subota)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|ponoc|ponoć|(po)?podne|navecer|navečer|noću|poslije podne|ujutro)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^pono/i,\n    noon: /^pod/i,\n    morning: /jutro/i,\n    afternoon: /(poslije\\s|po)+podne/i,\n    evening: /(navece|naveče)/i,\n    night: /(nocu|noću)/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mwens pase yon segond',\n    other: 'mwens pase {{count}} segond'\n  },\n  xSeconds: {\n    one: '1 segond',\n    other: '{{count}} segond'\n  },\n  halfAMinute: '30 segond',\n  lessThanXMinutes: {\n    one: 'mwens pase yon minit',\n    other: 'mwens pase {{count}} minit'\n  },\n  xMinutes: {\n    one: '1 minit',\n    other: '{{count}} minit'\n  },\n  aboutXHours: {\n    one: 'anviwon inè',\n    other: 'anviwon {{count}} è'\n  },\n  xHours: {\n    one: '1 lè',\n    other: '{{count}} lè'\n  },\n  xDays: {\n    one: '1 jou',\n    other: '{{count}} jou'\n  },\n  aboutXWeeks: {\n    one: 'anviwon 1 semèn',\n    other: 'anviwon {{count}} semèn'\n  },\n  xWeeks: {\n    one: '1 semèn',\n    other: '{{count}} semèn'\n  },\n  aboutXMonths: {\n    one: 'anviwon 1 mwa',\n    other: 'anviwon {{count}} mwa'\n  },\n  xMonths: {\n    one: '1 mwa',\n    other: '{{count}} mwa'\n  },\n  aboutXYears: {\n    one: 'anviwon 1 an',\n    other: 'anviwon {{count}} an'\n  },\n  xYears: {\n    one: '1 an',\n    other: '{{count}} an'\n  },\n  overXYears: {\n    one: 'plis pase 1 an',\n    other: 'plis pase {{count}} an'\n  },\n  almostXYears: {\n    one: 'prèske 1 an',\n    other: 'prèske {{count}} an'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'nan ' + result;\n    } else {\n      return 'sa fè ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'nan lè' {{time}}\",\n  long: \"{{date}} 'nan lè' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'pase nan lè' p\",\n  yesterday: \"'yè nan lè' p\",\n  today: \"'jodi a' p\",\n  tomorrow: \"'demen nan lè' p'\",\n  nextWeek: \"eeee 'pwochen nan lè' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Haitian Creole locale.\n * @language Haitian Creole\n * @iso-639-2 hat\n * @author Rubens Mariuzzo [@rmariuzzo]{@link https://github.com/rmariuzzo}\n * @author Watson Marcelain [@watsongm24]{@link https://github.com/watsongm24}\n */\nvar locale = {\n  code: 'ht',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['av. J.-K', 'ap. J.-K'],\n  abbreviated: ['av. J.-K', 'ap. J.-K'],\n  wide: ['anvan Jezi Kris', 'apre Jezi Kris']\n};\nvar quarterValues = {\n  narrow: ['T1', 'T2', 'T3', 'T4'],\n  abbreviated: ['1ye trim.', '2yèm trim.', '3yèm trim.', '4yèm trim.'],\n  wide: ['1ye trimès', '2yèm trimès', '3yèm trimès', '4yèm trimès']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'O', 'S', 'O', 'N', 'D'],\n  abbreviated: ['janv.', 'fevr.', 'mas', 'avr.', 'me', 'jen', 'jiyè', 'out', 'sept.', 'okt.', 'nov.', 'des.'],\n  wide: ['janvye', 'fevrye', 'mas', 'avril', 'me', 'jen', 'jiyè', 'out', 'septanm', 'oktòb', 'novanm', 'desanm']\n};\nvar dayValues = {\n  narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n  short: ['di', 'le', 'ma', 'mè', 'je', 'va', 'sa'],\n  abbreviated: ['dim.', 'len.', 'mad.', 'mèk.', 'jed.', 'van.', 'sam.'],\n  wide: ['dimanch', 'lendi', 'madi', 'mèkredi', 'jedi', 'vandredi', 'samdi']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'minwit',\n    noon: 'midi',\n    morning: 'mat.',\n    afternoon: 'ap.m.',\n    evening: 'swa',\n    night: 'mat.'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'minwit',\n    noon: 'midi',\n    morning: 'maten',\n    afternoon: 'aprèmidi',\n    evening: 'swa',\n    night: 'maten'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'minwit',\n    noon: 'midi',\n    morning: 'nan maten',\n    afternoon: 'nan aprèmidi',\n    evening: 'nan aswè',\n    night: 'nan maten'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  if (number === 0) return String(number);\n  var suffix = number === 1 ? 'ye' : 'yèm';\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(ye|yèm)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(av\\.J\\.K|ap\\.J\\.K|ap\\.J\\.-K)/i,\n  abbreviated: /^(av\\.J\\.-K|av\\.J-K|apr\\.J\\.-K|apr\\.J-K|ap\\.J-K)/i,\n  wide: /^(avan Jezi Kris|apre Jezi Kris)/i\n};\nvar parseEraPatterns = {\n  any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^t[1234]/i,\n  wide: /^[1234](ye|yèm)? trimès/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(janv|fevr|mas|avr|me|jen|jiyè|out|sept|okt|nov|des)\\.?/i,\n  wide: /^(janvye|fevrye|mas|avril|me|jen|jiyè|out|septanm|oktòb|novanm|desanm)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^o/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^ma/i, /^av/i, /^me/i, /^je/i, /^ji/i, /^ou/i, /^s/i, /^ok/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[lmjvsd]/i,\n  short: /^(di|le|ma|me|je|va|sa)/i,\n  abbreviated: /^(dim|len|mad|mèk|jed|van|sam)\\.?/i,\n  wide: /^(dimanch|lendi|madi|mèkredi|jedi|vandredi|samdi)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n  any: [/^di/i, /^le/i, /^ma/i, /^mè/i, /^je/i, /^va/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|minwit|midi|mat\\.?|ap\\.?m\\.?|swa)/i,\n  any: /^([ap]\\.?\\s?m\\.?|nan maten|nan aprèmidi|nan aswè)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^min/i,\n    noon: /^mid/i,\n    morning: /mat/i,\n    afternoon: /ap/i,\n    evening: /sw/i,\n    night: /nwit/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var translations = {\n  about: 'körülbelül',\n  over: 'több mint',\n  almost: 'majdnem',\n  lessthan: 'kevesebb mint'\n};\nvar withoutSuffixes = {\n  xseconds: ' másodperc',\n  halfaminute: 'fél perc',\n  xminutes: ' perc',\n  xhours: ' óra',\n  xdays: ' nap',\n  xweeks: ' hét',\n  xmonths: ' hónap',\n  xyears: ' év'\n};\nvar withSuffixes = {\n  xseconds: {\n    '-1': ' másodperccel ezelőtt',\n    '1': ' másodperc múlva',\n    '0': ' másodperce'\n  },\n  halfaminute: {\n    '-1': 'fél perccel ezelőtt',\n    '1': 'fél perc múlva',\n    '0': 'fél perce'\n  },\n  xminutes: {\n    '-1': ' perccel ezelőtt',\n    '1': ' perc múlva',\n    '0': ' perce'\n  },\n  xhours: {\n    '-1': ' órával ezelőtt',\n    '1': ' óra múlva',\n    '0': ' órája'\n  },\n  xdays: {\n    '-1': ' nappal ezelőtt',\n    '1': ' nap múlva',\n    '0': ' napja'\n  },\n  xweeks: {\n    '-1': ' héttel ezelőtt',\n    '1': ' hét múlva',\n    '0': ' hete'\n  },\n  xmonths: {\n    '-1': ' hónappal ezelőtt',\n    '1': ' hónap múlva',\n    '0': ' hónapja'\n  },\n  xyears: {\n    '-1': ' évvel ezelőtt',\n    '1': ' év múlva',\n    '0': ' éve'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var adverb = token.match(/about|over|almost|lessthan/i);\n  var unit = adverb ? token.replace(adverb[0], '') : token;\n  var addSuffix = (options === null || options === void 0 ? void 0 : options.addSuffix) === true;\n  var key = unit.toLowerCase();\n  var comparison = (options === null || options === void 0 ? void 0 : options.comparison) || 0;\n  var translated = addSuffix ? withSuffixes[key][comparison] : withoutSuffixes[key];\n  var result = key === 'halfaminute' ? translated : count + translated;\n  if (adverb) {\n    var adv = adverb[0].toLowerCase();\n    result = translations[adv] + ' ' + result;\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'y. MMMM d., EEEE',\n  long: 'y. MMMM d.',\n  medium: 'y. MMM d.',\n  short: 'y. MM. dd.'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var accusativeWeekdays = ['vasárnap', 'hétfőn', 'kedden', 'szerdán', 'csütörtökön', 'pénteken', 'szombaton'];\nfunction week(isFuture) {\n  return function (date) {\n    var weekday = accusativeWeekdays[date.getUTCDay()];\n    var prefix = isFuture ? '' : \"'múlt' \";\n    return \"\".concat(prefix, \"'\").concat(weekday, \"' p'-kor'\");\n  };\n}\nvar formatRelativeLocale = {\n  lastWeek: week(false),\n  yesterday: \"'tegnap' p'-kor'\",\n  today: \"'ma' p'-kor'\",\n  tomorrow: \"'holnap' p'-kor'\",\n  nextWeek: week(true),\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Hungarian locale.\n * @language Hungarian\n * @iso-639-2 hun\n * @author Pavlo Shpak [@pshpak]{@link https://github.com/pshpak}\n * @author Eduardo Pardo [@eduardopsll]{@link https://github.com/eduardopsll}\n * @author Zoltan Szepesi [@twodcube]{@link https://github.com/twodcube}\n */\nvar locale = {\n  code: 'hu',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ie.', 'isz.'],\n  abbreviated: ['i. e.', 'i. sz.'],\n  wide: ['Krisztus előtt', 'időszámításunk szerint']\n};\nvar quarterValues = {\n  narrow: ['1.', '2.', '3.', '4.'],\n  abbreviated: ['1. n.év', '2. n.év', '3. n.év', '4. n.év'],\n  wide: ['1. negyedév', '2. negyedév', '3. negyedév', '4. negyedév']\n};\nvar formattingQuarterValues = {\n  narrow: ['I.', 'II.', 'III.', 'IV.'],\n  abbreviated: ['I. n.év', 'II. n.év', 'III. n.év', 'IV. n.év'],\n  wide: ['I. negyedév', 'II. negyedév', 'III. negyedév', 'IV. negyedév']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'Á', 'M', 'J', 'J', 'A', 'Sz', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'febr.', 'márc.', 'ápr.', 'máj.', 'jún.', 'júl.', 'aug.', 'szept.', 'okt.', 'nov.', 'dec.'],\n  wide: ['január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december']\n};\nvar dayValues = {\n  narrow: ['V', 'H', 'K', 'Sz', 'Cs', 'P', 'Sz'],\n  short: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],\n  abbreviated: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],\n  wide: ['vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'de.',\n    pm: 'du.',\n    midnight: 'éjfél',\n    noon: 'dél',\n    morning: 'reggel',\n    afternoon: 'du.',\n    evening: 'este',\n    night: 'éjjel'\n  },\n  abbreviated: {\n    am: 'de.',\n    pm: 'du.',\n    midnight: 'éjfél',\n    noon: 'dél',\n    morning: 'reggel',\n    afternoon: 'du.',\n    evening: 'este',\n    night: 'éjjel'\n  },\n  wide: {\n    am: 'de.',\n    pm: 'du.',\n    midnight: 'éjfél',\n    noon: 'dél',\n    morning: 'reggel',\n    afternoon: 'délután',\n    evening: 'este',\n    night: 'éjjel'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    },\n    formattingValues: formattingQuarterValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\.?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ie\\.|isz\\.)/i,\n  abbreviated: /^(i\\.\\s?e\\.?|b?\\s?c\\s?e|i\\.\\s?sz\\.?)/i,\n  wide: /^(Krisztus előtt|időszámításunk előtt|időszámításunk szerint|i\\. sz\\.)/i\n};\nvar parseEraPatterns = {\n  narrow: [/ie/i, /isz/i],\n  abbreviated: [/^(i\\.?\\s?e\\.?|b\\s?ce)/i, /^(i\\.?\\s?sz\\.?|c\\s?e)/i],\n  any: [/előtt/i, /(szerint|i. sz.)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]\\.?/i,\n  abbreviated: /^[1234]?\\.?\\s?n\\.év/i,\n  wide: /^([1234]|I|II|III|IV)?\\.?\\s?negyedév/i\n};\nvar parseQuarterPatterns = {\n  any: [/1|I$/i, /2|II$/i, /3|III/i, /4|IV/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmaásond]|sz/i,\n  abbreviated: /^(jan\\.?|febr\\.?|márc\\.?|ápr\\.?|máj\\.?|jún\\.?|júl\\.?|aug\\.?|szept\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n  wide: /^(január|február|március|április|május|június|július|augusztus|szeptember|október|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a|á/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s|sz/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^már/i, /^áp/i, /^máj/i, /^jún/i, /^júl/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^([vhkpc]|sz|cs|sz)/i,\n  short: /^([vhkp]|sze|cs|szo)/i,\n  abbreviated: /^([vhkp]|sze|cs|szo)/i,\n  wide: /^(vasárnap|hétfő|kedd|szerda|csütörtök|péntek|szombat)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^v/i, /^h/i, /^k/i, /^sz/i, /^c/i, /^p/i, /^sz/i],\n  any: [/^v/i, /^h/i, /^k/i, /^sze/i, /^c/i, /^p/i, /^szo/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^((de|du)\\.?|éjfél|délután|dél|reggel|este|éjjel)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^de\\.?/i,\n    pm: /^du\\.?/i,\n    midnight: /^éjf/i,\n    noon: /^dé/i,\n    morning: /reg/i,\n    afternoon: /^délu\\.?/i,\n    evening: /es/i,\n    night: /éjj/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'ավելի քիչ քան 1 վայրկյան',\n    other: 'ավելի քիչ քան {{count}} վայրկյան'\n  },\n  xSeconds: {\n    one: '1 վայրկյան',\n    other: '{{count}} վայրկյան'\n  },\n  halfAMinute: 'կես րոպե',\n  lessThanXMinutes: {\n    one: 'ավելի քիչ քան 1 րոպե',\n    other: 'ավելի քիչ քան {{count}} րոպե'\n  },\n  xMinutes: {\n    one: '1 րոպե',\n    other: '{{count}} րոպե'\n  },\n  aboutXHours: {\n    one: 'մոտ 1 ժամ',\n    other: 'մոտ {{count}} ժամ'\n  },\n  xHours: {\n    one: '1 ժամ',\n    other: '{{count}} ժամ'\n  },\n  xDays: {\n    one: '1 օր',\n    other: '{{count}} օր'\n  },\n  aboutXWeeks: {\n    one: 'մոտ 1 շաբաթ',\n    other: 'մոտ {{count}} շաբաթ'\n  },\n  xWeeks: {\n    one: '1 շաբաթ',\n    other: '{{count}} շաբաթ'\n  },\n  aboutXMonths: {\n    one: 'մոտ 1 ամիս',\n    other: 'մոտ {{count}} ամիս'\n  },\n  xMonths: {\n    one: '1 ամիս',\n    other: '{{count}} ամիս'\n  },\n  aboutXYears: {\n    one: 'մոտ 1 տարի',\n    other: 'մոտ {{count}} տարի'\n  },\n  xYears: {\n    one: '1 տարի',\n    other: '{{count}} տարի'\n  },\n  overXYears: {\n    one: 'ավելի քան 1 տարի',\n    other: 'ավելի քան {{count}} տարի'\n  },\n  almostXYears: {\n    one: 'համարյա 1 տարի',\n    other: 'համարյա {{count}} տարի'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' հետո';\n    } else {\n      return result + ' առաջ';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'd MMMM, y, EEEE',\n  long: 'd MMMM, y',\n  medium: 'd MMM, y',\n  short: 'dd.MM.yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'ժ․'{{time}}\",\n  long: \"{{date}} 'ժ․'{{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'նախորդ' eeee p'֊ին'\",\n  yesterday: \"'երեկ' p'֊ին'\",\n  today: \"'այսօր' p'֊ին'\",\n  tomorrow: \"'վաղը' p'֊ին'\",\n  nextWeek: \"'հաջորդ' eeee p'֊ին'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Armenian locale\n * @language Armenian\n * @iso-639-2 arm\n * @author Alex Igityan [@alexigityan]{@link https://github.com/alexigityan}\n */\nvar locale = {\n  code: 'hy',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['Ք', 'Մ'],\n  abbreviated: ['ՔԱ', 'ՄԹ'],\n  wide: ['Քրիստոսից առաջ', 'Մեր թվարկության']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Ք1', 'Ք2', 'Ք3', 'Ք4'],\n  wide: ['1֊ին քառորդ', '2֊րդ քառորդ', '3֊րդ քառորդ', '4֊րդ քառորդ']\n};\nvar monthValues = {\n  narrow: ['Հ', 'Փ', 'Մ', 'Ա', 'Մ', 'Հ', 'Հ', 'Օ', 'Ս', 'Հ', 'Ն', 'Դ'],\n  abbreviated: ['հուն', 'փետ', 'մար', 'ապր', 'մայ', 'հուն', 'հուլ', 'օգս', 'սեպ', 'հոկ', 'նոյ', 'դեկ'],\n  wide: ['հունվար', 'փետրվար', 'մարտ', 'ապրիլ', 'մայիս', 'հունիս', 'հուլիս', 'օգոստոս', 'սեպտեմբեր', 'հոկտեմբեր', 'նոյեմբեր', 'դեկտեմբեր']\n};\nvar dayValues = {\n  narrow: ['Կ', 'Ե', 'Ե', 'Չ', 'Հ', 'Ո', 'Շ'],\n  short: ['կր', 'եր', 'եք', 'չք', 'հգ', 'ուր', 'շբ'],\n  abbreviated: ['կիր', 'երկ', 'երք', 'չոր', 'հնգ', 'ուրբ', 'շաբ'],\n  wide: ['կիրակի', 'երկուշաբթի', 'երեքշաբթի', 'չորեքշաբթի', 'հինգշաբթի', 'ուրբաթ', 'շաբաթ']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'կեսգշ',\n    noon: 'կեսօր',\n    morning: 'առավոտ',\n    afternoon: 'ցերեկ',\n    evening: 'երեկո',\n    night: 'գիշեր'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'կեսգիշեր',\n    noon: 'կեսօր',\n    morning: 'առավոտ',\n    afternoon: 'ցերեկ',\n    evening: 'երեկո',\n    night: 'գիշեր'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'կեսգիշեր',\n    noon: 'կեսօր',\n    morning: 'առավոտ',\n    afternoon: 'ցերեկ',\n    evening: 'երեկո',\n    night: 'գիշեր'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'կեսգշ',\n    noon: 'կեսօր',\n    morning: 'առավոտը',\n    afternoon: 'ցերեկը',\n    evening: 'երեկոյան',\n    night: 'գիշերը'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'կեսգիշերին',\n    noon: 'կեսօրին',\n    morning: 'առավոտը',\n    afternoon: 'ցերեկը',\n    evening: 'երեկոյան',\n    night: 'գիշերը'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'կեսգիշերին',\n    noon: 'կեսօրին',\n    morning: 'առավոտը',\n    afternoon: 'ցերեկը',\n    evening: 'երեկոյան',\n    night: 'գիշերը'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  var rem100 = number % 100;\n  if (rem100 < 10) {\n    if (rem100 % 10 === 1) {\n      return number + '֊ին';\n    }\n  }\n  return number + '֊րդ';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)((-|֊)?(ին|րդ))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(Ք|Մ)/i,\n  abbreviated: /^(Ք\\.?\\s?Ա\\.?|Մ\\.?\\s?Թ\\.?\\s?Ա\\.?|Մ\\.?\\s?Թ\\.?|Ք\\.?\\s?Հ\\.?)/i,\n  wide: /^(քրիստոսից առաջ|մեր թվարկությունից առաջ|մեր թվարկության|քրիստոսից հետո)/i\n};\nvar parseEraPatterns = {\n  any: [/^ք/i, /^մ/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ք[1234]/i,\n  wide: /^[1234]((-|֊)?(ին|րդ)) քառորդ/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[հփմաօսնդ]/i,\n  abbreviated: /^(հուն|փետ|մար|ապր|մայ|հուն|հուլ|օգս|սեպ|հոկ|նոյ|դեկ)/i,\n  wide: /^(հունվար|փետրվար|մարտ|ապրիլ|մայիս|հունիս|հուլիս|օգոստոս|սեպտեմբեր|հոկտեմբեր|նոյեմբեր|դեկտեմբեր)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^հ/i, /^փ/i, /^մ/i, /^ա/i, /^մ/i, /^հ/i, /^հ/i, /^օ/i, /^ս/i, /^հ/i, /^ն/i, /^դ/i],\n  any: [/^հու/i, /^փ/i, /^մար/i, /^ա/i, /^մայ/i, /^հուն/i, /^հուլ/i, /^օ/i, /^ս/i, /^հոկ/i, /^ն/i, /^դ/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[եչհոշկ]/i,\n  short: /^(կր|եր|եք|չք|հգ|ուր|շբ)/i,\n  abbreviated: /^(կիր|երկ|երք|չոր|հնգ|ուրբ|շաբ)/i,\n  wide: /^(կիրակի|երկուշաբթի|երեքշաբթի|չորեքշաբթի|հինգշաբթի|ուրբաթ|շաբաթ)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^կ/i, /^ե/i, /^ե/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i],\n  short: [/^կ/i, /^եր/i, /^եք/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i],\n  abbreviated: [/^կ/i, /^երկ/i, /^երք/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i],\n  wide: [/^կ/i, /^երկ/i, /^երե/i, /^չ/i, /^հ/i, /^(ո|Ո)/, /^շ/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^([ap]|կեսգշ|կեսօր|(առավոտը?|ցերեկը?|երեկո(յան)?|գիշերը?))/i,\n  any: /^([ap]\\.?\\s?m\\.?|կեսգիշեր(ին)?|կեսօր(ին)?|(առավոտը?|ցերեկը?|երեկո(յան)?|գիշերը?))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /կեսգիշեր/i,\n    noon: /կեսօր/i,\n    morning: /առավոտ/i,\n    afternoon: /ցերեկ/i,\n    evening: /երեկո/i,\n    night: /գիշեր/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'kurang dari 1 detik',\n    other: 'kurang dari {{count}} detik'\n  },\n  xSeconds: {\n    one: '1 detik',\n    other: '{{count}} detik'\n  },\n  halfAMinute: 'setengah menit',\n  lessThanXMinutes: {\n    one: 'kurang dari 1 menit',\n    other: 'kurang dari {{count}} menit'\n  },\n  xMinutes: {\n    one: '1 menit',\n    other: '{{count}} menit'\n  },\n  aboutXHours: {\n    one: 'sekitar 1 jam',\n    other: 'sekitar {{count}} jam'\n  },\n  xHours: {\n    one: '1 jam',\n    other: '{{count}} jam'\n  },\n  xDays: {\n    one: '1 hari',\n    other: '{{count}} hari'\n  },\n  aboutXWeeks: {\n    one: 'sekitar 1 minggu',\n    other: 'sekitar {{count}} minggu'\n  },\n  xWeeks: {\n    one: '1 minggu',\n    other: '{{count}} minggu'\n  },\n  aboutXMonths: {\n    one: 'sekitar 1 bulan',\n    other: 'sekitar {{count}} bulan'\n  },\n  xMonths: {\n    one: '1 bulan',\n    other: '{{count}} bulan'\n  },\n  aboutXYears: {\n    one: 'sekitar 1 tahun',\n    other: 'sekitar {{count}} tahun'\n  },\n  xYears: {\n    one: '1 tahun',\n    other: '{{count}} tahun'\n  },\n  overXYears: {\n    one: 'lebih dari 1 tahun',\n    other: 'lebih dari {{count}} tahun'\n  },\n  almostXYears: {\n    one: 'hampir 1 tahun',\n    other: 'hampir {{count}} tahun'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'dalam waktu ' + result;\n    } else {\n      return result + ' yang lalu';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'd/M/yyyy'\n};\nvar timeFormats = {\n  full: 'HH.mm.ss',\n  long: 'HH.mm.ss',\n  medium: 'HH.mm',\n  short: 'HH.mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'pukul' {{time}}\",\n  long: \"{{date}} 'pukul' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'lalu pukul' p\",\n  yesterday: \"'Kemarin pukul' p\",\n  today: \"'Hari ini pukul' p\",\n  tomorrow: \"'Besok pukul' p\",\n  nextWeek: \"eeee 'pukul' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Indonesian locale.\n * @language Indonesian\n * @iso-639-2 ind\n * @author Rahmat Budiharso [@rbudiharso]{@link https://github.com/rbudiharso}\n * @author Benget Nata [@bentinata]{@link https://github.com/bentinata}\n * @author Budi Irawan [@deerawan]{@link https://github.com/deerawan}\n * @author Try Ajitiono [@imballinst]{@link https://github.com/imballinst}\n */\nvar locale = {\n  code: 'id',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // All data for localization are taken from this page\n// https://www.unicode.org/cldr/charts/32/summary/id.html\nvar eraValues = {\n  narrow: ['SM', 'M'],\n  abbreviated: ['SM', 'M'],\n  wide: ['Sebelum Masehi', 'Masehi']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['Kuartal ke-1', 'Kuartal ke-2', 'Kuartal ke-3', 'Kuartal ke-4']\n};\n\n// Note: in Indonesian, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agt', 'Sep', 'Okt', 'Nov', 'Des'],\n  wide: ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember']\n};\nvar dayValues = {\n  narrow: ['M', 'S', 'S', 'R', 'K', 'J', 'S'],\n  short: ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'],\n  abbreviated: ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'],\n  wide: ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'siang',\n    evening: 'sore',\n    night: 'malam'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'siang',\n    evening: 'sore',\n    night: 'malam'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'siang',\n    evening: 'sore',\n    night: 'malam'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'siang',\n    evening: 'sore',\n    night: 'malam'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'siang',\n    evening: 'sore',\n    night: 'malam'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'siang',\n    evening: 'sore',\n    night: 'malam'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n\n  // Can't use \"pertama\", \"kedua\" because can't be parsed\n\n  return 'ke-' + number;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^ke-(\\d+)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(sm|m)/i,\n  abbreviated: /^(s\\.?\\s?m\\.?|s\\.?\\s?e\\.?\\s?u\\.?|m\\.?|e\\.?\\s?u\\.?)/i,\n  wide: /^(sebelum masehi|sebelum era umum|masehi|era umum)/i\n};\nvar parseEraPatterns = {\n  any: [/^s/i, /^(m|e)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^K-?\\s[1234]/i,\n  wide: /^Kuartal ke-?\\s?[1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|mei|jun|jul|agt|sep|okt|nov|des)/i,\n  wide: /^(januari|februari|maret|april|mei|juni|juli|agustus|september|oktober|november|desember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^ma/i, /^ap/i, /^me/i, /^jun/i, /^jul/i, /^ag/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[srkjm]/i,\n  short: /^(min|sen|sel|rab|kam|jum|sab)/i,\n  abbreviated: /^(min|sen|sel|rab|kam|jum|sab)/i,\n  wide: /^(minggu|senin|selasa|rabu|kamis|jumat|sabtu)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^m/i, /^s/i, /^s/i, /^r/i, /^k/i, /^j/i, /^s/i],\n  any: [/^m/i, /^sen/i, /^sel/i, /^r/i, /^k/i, /^j/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|tengah m|tengah h|(di(\\swaktu)?) (pagi|siang|sore|malam))/i,\n  any: /^([ap]\\.?\\s?m\\.?|tengah malam|tengah hari|(di(\\swaktu)?) (pagi|siang|sore|malam))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^pm/i,\n    midnight: /^tengah m/i,\n    noon: /^tengah h/i,\n    morning: /pagi/i,\n    afternoon: /siang/i,\n    evening: /sore/i,\n    night: /malam/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'minna en 1 sekúnda',\n    other: 'minna en {{count}} sekúndur'\n  },\n  xSeconds: {\n    one: '1 sekúnda',\n    other: '{{count}} sekúndur'\n  },\n  halfAMinute: 'hálf mínúta',\n  lessThanXMinutes: {\n    one: 'minna en 1 mínúta',\n    other: 'minna en {{count}} mínútur'\n  },\n  xMinutes: {\n    one: '1 mínúta',\n    other: '{{count}} mínútur'\n  },\n  aboutXHours: {\n    one: 'u.þ.b. 1 klukkustund',\n    other: 'u.þ.b. {{count}} klukkustundir'\n  },\n  xHours: {\n    one: '1 klukkustund',\n    other: '{{count}} klukkustundir'\n  },\n  xDays: {\n    one: '1 dagur',\n    other: '{{count}} dagar'\n  },\n  aboutXWeeks: {\n    one: 'um viku',\n    other: 'um {{count}} vikur'\n  },\n  xWeeks: {\n    one: '1 viku',\n    other: '{{count}} vikur'\n  },\n  aboutXMonths: {\n    one: 'u.þ.b. 1 mánuður',\n    other: 'u.þ.b. {{count}} mánuðir'\n  },\n  xMonths: {\n    one: '1 mánuður',\n    other: '{{count}} mánuðir'\n  },\n  aboutXYears: {\n    one: 'u.þ.b. 1 ár',\n    other: 'u.þ.b. {{count}} ár'\n  },\n  xYears: {\n    one: '1 ár',\n    other: '{{count}} ár'\n  },\n  overXYears: {\n    one: 'meira en 1 ár',\n    other: 'meira en {{count}} ár'\n  },\n  almostXYears: {\n    one: 'næstum 1 ár',\n    other: 'næstum {{count}} ár'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'í ' + result;\n    } else {\n      return result + ' síðan';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, do MMMM y',\n  long: 'do MMMM y',\n  medium: 'do MMM y',\n  short: 'd.MM.y'\n};\nvar timeFormats = {\n  full: \"'kl'. HH:mm:ss zzzz\",\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'kl.' {{time}}\",\n  long: \"{{date}} 'kl.' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'síðasta' dddd 'kl.' p\",\n  yesterday: \"'í gær kl.' p\",\n  today: \"'í dag kl.' p\",\n  tomorrow: \"'á morgun kl.' p\",\n  nextWeek: \"dddd 'kl.' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Icelandic locale.\n * @language Icelandic\n * @iso-639-2 isl\n * @author Derek Blank [@derekblank]{@link https://github.com/derekblank}\n * @author Arnór Ýmir [@lamayg]{@link https://github.com/lamayg}\n */\nvar locale = {\n  code: 'is',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['f.Kr.', 'e.Kr.'],\n  abbreviated: ['f.Kr.', 'e.Kr.'],\n  wide: ['fyrir Krist', 'eftir Krist']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1F', '2F', '3F', '4F'],\n  wide: ['1. fjórðungur', '2. fjórðungur', '3. fjórðungur', '4. fjórðungur']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'Á', 'S', 'Ó', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mars', 'apríl', 'maí', 'júní', 'júlí', 'ágúst', 'sept.', 'okt.', 'nóv.', 'des.'],\n  wide: ['janúar', 'febrúar', 'mars', 'apríl', 'maí', 'júní', 'júlí', 'ágúst', 'september', 'október', 'nóvember', 'desember']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'Þ', 'M', 'F', 'F', 'L'],\n  short: ['Su', 'Má', 'Þr', 'Mi', 'Fi', 'Fö', 'La'],\n  abbreviated: ['sun.', 'mán.', 'þri.', 'mið.', 'fim.', 'fös.', 'lau.'],\n  wide: ['sunnudagur', 'mánudagur', 'þriðjudagur', 'miðvikudagur', 'fimmtudagur', 'föstudagur', 'laugardagur']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'f',\n    pm: 'e',\n    midnight: 'miðnætti',\n    noon: 'hádegi',\n    morning: 'morgunn',\n    afternoon: 'síðdegi',\n    evening: 'kvöld',\n    night: 'nótt'\n  },\n  abbreviated: {\n    am: 'f.h.',\n    pm: 'e.h.',\n    midnight: 'miðnætti',\n    noon: 'hádegi',\n    morning: 'morgunn',\n    afternoon: 'síðdegi',\n    evening: 'kvöld',\n    night: 'nótt'\n  },\n  wide: {\n    am: 'fyrir hádegi',\n    pm: 'eftir hádegi',\n    midnight: 'miðnætti',\n    noon: 'hádegi',\n    morning: 'morgunn',\n    afternoon: 'síðdegi',\n    evening: 'kvöld',\n    night: 'nótt'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'f',\n    pm: 'e',\n    midnight: 'á miðnætti',\n    noon: 'á hádegi',\n    morning: 'að morgni',\n    afternoon: 'síðdegis',\n    evening: 'um kvöld',\n    night: 'um nótt'\n  },\n  abbreviated: {\n    am: 'f.h.',\n    pm: 'e.h.',\n    midnight: 'á miðnætti',\n    noon: 'á hádegi',\n    morning: 'að morgni',\n    afternoon: 'síðdegis',\n    evening: 'um kvöld',\n    night: 'um nótt'\n  },\n  wide: {\n    am: 'fyrir hádegi',\n    pm: 'eftir hádegi',\n    midnight: 'á miðnætti',\n    noon: 'á hádegi',\n    morning: 'að morgni',\n    afternoon: 'síðdegis',\n    evening: 'um kvöld',\n    night: 'um nótt'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+(\\.)?/i;\nvar matchEraPatterns = {\n  narrow: /^(f\\.Kr\\.|e\\.Kr\\.)/i,\n  abbreviated: /^(f\\.Kr\\.|e\\.Kr\\.)/i,\n  wide: /^(fyrir Krist|eftir Krist)/i\n};\nvar parseEraPatterns = {\n  any: [/^(f\\.Kr\\.)/i, /^(e\\.Kr\\.)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]\\.?/i,\n  abbreviated: /^q[1234]\\.?/i,\n  wide: /^[1234]\\.? fjórðungur/i\n};\nvar parseQuarterPatterns = {\n  any: [/1\\.?/i, /2\\.?/i, /3\\.?/i, /4\\.?/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmásónd]/i,\n  abbreviated: /^(jan\\.|feb\\.|mars\\.|apríl\\.|maí|júní|júlí|águst|sep\\.|oct\\.|nov\\.|dec\\.)/i,\n  wide: /^(januar|febrúar|mars|apríl|maí|júní|júlí|águst|september|október|nóvember|desember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^á/i, /^s/i, /^ó/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^maí/i, /^jún/i, /^júl/i, /^áu/i, /^s/i, /^ó/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|má|þr|mi|fi|fö|la)/i,\n  abbreviated: /^(sun|mán|þri|mið|fim|fös|lau)\\.?/i,\n  wide: /^(sunnudagur|mánudagur|þriðjudagur|miðvikudagur|fimmtudagur|föstudagur|laugardagur)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^þ/i, /^m/i, /^f/i, /^f/i, /^l/i],\n  any: [/^su/i, /^má/i, /^þr/i, /^mi/i, /^fi/i, /^fö/i, /^la/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(f|e|síðdegis|(á|að|um) (morgni|kvöld|nótt|miðnætti))/i,\n  any: /^(fyrir hádegi|eftir hádegi|[ef]\\.?h\\.?|síðdegis|morgunn|(á|að|um) (morgni|kvöld|nótt|miðnætti))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^f/i,\n    pm: /^e/i,\n    midnight: /^mi/i,\n    noon: /^há/i,\n    morning: /morgunn/i,\n    afternoon: /síðdegi/i,\n    evening: /kvöld/i,\n    night: /nótt/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'meno di un secondo',\n    other: 'meno di {{count}} secondi'\n  },\n  xSeconds: {\n    one: 'un secondo',\n    other: '{{count}} secondi'\n  },\n  halfAMinute: 'alcuni secondi',\n  lessThanXMinutes: {\n    one: 'meno di un minuto',\n    other: 'meno di {{count}} minuti'\n  },\n  xMinutes: {\n    one: 'un minuto',\n    other: '{{count}} minuti'\n  },\n  aboutXHours: {\n    one: \"circa un'ora\",\n    other: 'circa {{count}} ore'\n  },\n  xHours: {\n    one: \"un'ora\",\n    other: '{{count}} ore'\n  },\n  xDays: {\n    one: 'un giorno',\n    other: '{{count}} giorni'\n  },\n  aboutXWeeks: {\n    one: 'circa una settimana',\n    other: 'circa {{count}} settimane'\n  },\n  xWeeks: {\n    one: 'una settimana',\n    other: '{{count}} settimane'\n  },\n  aboutXMonths: {\n    one: 'circa un mese',\n    other: 'circa {{count}} mesi'\n  },\n  xMonths: {\n    one: 'un mese',\n    other: '{{count}} mesi'\n  },\n  aboutXYears: {\n    one: 'circa un anno',\n    other: 'circa {{count}} anni'\n  },\n  xYears: {\n    one: 'un anno',\n    other: '{{count}} anni'\n  },\n  overXYears: {\n    one: 'più di un anno',\n    other: 'più di {{count}} anni'\n  },\n  almostXYears: {\n    one: 'quasi un anno',\n    other: 'quasi {{count}} anni'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'tra ' + result;\n    } else {\n      return result + ' fa';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar weekdays = ['domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato'];\nfunction _lastWeek(day) {\n  switch (day) {\n    case 0:\n      return \"'domenica scorsa alle' p\";\n    default:\n      return \"'\" + weekdays[day] + \" scorso alle' p\";\n  }\n}\nfunction thisWeek(day) {\n  return \"'\" + weekdays[day] + \" alle' p\";\n}\nfunction _nextWeek(day) {\n  switch (day) {\n    case 0:\n      return \"'domenica prossima alle' p\";\n    default:\n      return \"'\" + weekdays[day] + \" prossimo alle' p\";\n  }\n}\nvar formatRelativeLocale = {\n  lastWeek: function lastWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _lastWeek(day);\n    }\n  },\n  yesterday: \"'ieri alle' p\",\n  today: \"'oggi alle' p\",\n  tomorrow: \"'domani alle' p\",\n  nextWeek: function nextWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _nextWeek(day);\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['aC', 'dC'],\n  abbreviated: ['a.C.', 'd.C.'],\n  wide: ['avanti Cristo', 'dopo Cristo']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']\n};\nvar monthValues = {\n  narrow: ['G', 'F', 'M', 'A', 'M', 'G', 'L', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'],\n  wide: ['gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre']\n};\nvar dayValues = {\n  narrow: ['D', 'L', 'M', 'M', 'G', 'V', 'S'],\n  short: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],\n  abbreviated: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],\n  wide: ['domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'm.',\n    pm: 'p.',\n    midnight: 'mezzanotte',\n    noon: 'mezzogiorno',\n    morning: 'mattina',\n    afternoon: 'pomeriggio',\n    evening: 'sera',\n    night: 'notte'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'mezzanotte',\n    noon: 'mezzogiorno',\n    morning: 'mattina',\n    afternoon: 'pomeriggio',\n    evening: 'sera',\n    night: 'notte'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'mezzanotte',\n    noon: 'mezzogiorno',\n    morning: 'mattina',\n    afternoon: 'pomeriggio',\n    evening: 'sera',\n    night: 'notte'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'm.',\n    pm: 'p.',\n    midnight: 'mezzanotte',\n    noon: 'mezzogiorno',\n    morning: 'di mattina',\n    afternoon: 'del pomeriggio',\n    evening: 'di sera',\n    night: 'di notte'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'mezzanotte',\n    noon: 'mezzogiorno',\n    morning: 'di mattina',\n    afternoon: 'del pomeriggio',\n    evening: 'di sera',\n    night: 'di notte'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'mezzanotte',\n    noon: 'mezzogiorno',\n    morning: 'di mattina',\n    afternoon: 'del pomeriggio',\n    evening: 'di sera',\n    night: 'di notte'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return String(number);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(aC|dC)/i,\n  abbreviated: /^(a\\.?\\s?C\\.?|a\\.?\\s?e\\.?\\s?v\\.?|d\\.?\\s?C\\.?|e\\.?\\s?v\\.?)/i,\n  wide: /^(avanti Cristo|avanti Era Volgare|dopo Cristo|Era Volgare)/i\n};\nvar parseEraPatterns = {\n  any: [/^a/i, /^(d|e)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^t[1234]/i,\n  wide: /^[1234](º)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[gfmalsond]/i,\n  abbreviated: /^(gen|feb|mar|apr|mag|giu|lug|ago|set|ott|nov|dic)/i,\n  wide: /^(gennaio|febbraio|marzo|aprile|maggio|giugno|luglio|agosto|settembre|ottobre|novembre|dicembre)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^g/i, /^f/i, /^m/i, /^a/i, /^m/i, /^g/i, /^l/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ge/i, /^f/i, /^mar/i, /^ap/i, /^mag/i, /^gi/i, /^l/i, /^ag/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmgvs]/i,\n  short: /^(do|lu|ma|me|gi|ve|sa)/i,\n  abbreviated: /^(dom|lun|mar|mer|gio|ven|sab)/i,\n  wide: /^(domenica|luned[i|ì]|marted[i|ì]|mercoled[i|ì]|gioved[i|ì]|venerd[i|ì]|sabato)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^g/i, /^v/i, /^s/i],\n  any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^g/i, /^v/i, /^s/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|m\\.|p|mezzanotte|mezzogiorno|(di|del) (mattina|pomeriggio|sera|notte))/i,\n  any: /^([ap]\\.?\\s?m\\.?|mezzanotte|mezzogiorno|(di|del) (mattina|pomeriggio|sera|notte))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mezza/i,\n    noon: /^mezzo/i,\n    morning: /mattina/i,\n    afternoon: /pomeriggio/i,\n    evening: /sera/i,\n    night: /notte/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Italian locale.\n * @language Italian\n * @iso-639-2 ita\n * @author Alberto Restifo [@albertorestifo]{@link https://github.com/albertorestifo}\n * @author Giovanni Polimeni [@giofilo]{@link https://github.com/giofilo}\n * @author Vincenzo Carrese [@vin-car]{@link https://github.com/vin-car}\n */\nvar locale = {\n  code: 'it',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import formatDistance from \"../it/_lib/formatDistance/index.js\";\nimport formatRelative from \"../it/_lib/formatRelative/index.js\";\nimport localize from \"../it/_lib/localize/index.js\";\nimport match from \"../it/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Italian locale (Switzerland).\n * @language Italian\n * @iso-639-2 ita\n * @author Mike Peyer [@maic66]{@link https://github.com/maic66}\n */\nvar locale = {\n  code: 'it-CH',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '1秒未満',\n    other: '{{count}}秒未満',\n    oneWithSuffix: '約1秒',\n    otherWithSuffix: '約{{count}}秒'\n  },\n  xSeconds: {\n    one: '1秒',\n    other: '{{count}}秒'\n  },\n  halfAMinute: '30秒',\n  lessThanXMinutes: {\n    one: '1分未満',\n    other: '{{count}}分未満',\n    oneWithSuffix: '約1分',\n    otherWithSuffix: '約{{count}}分'\n  },\n  xMinutes: {\n    one: '1分',\n    other: '{{count}}分'\n  },\n  aboutXHours: {\n    one: '約1時間',\n    other: '約{{count}}時間'\n  },\n  xHours: {\n    one: '1時間',\n    other: '{{count}}時間'\n  },\n  xDays: {\n    one: '1日',\n    other: '{{count}}日'\n  },\n  aboutXWeeks: {\n    one: '約1週間',\n    other: '約{{count}}週間'\n  },\n  xWeeks: {\n    one: '1週間',\n    other: '{{count}}週間'\n  },\n  aboutXMonths: {\n    one: '約1か月',\n    other: '約{{count}}か月'\n  },\n  xMonths: {\n    one: '1か月',\n    other: '{{count}}か月'\n  },\n  aboutXYears: {\n    one: '約1年',\n    other: '約{{count}}年'\n  },\n  xYears: {\n    one: '1年',\n    other: '{{count}}年'\n  },\n  overXYears: {\n    one: '1年以上',\n    other: '{{count}}年以上'\n  },\n  almostXYears: {\n    one: '1年近く',\n    other: '{{count}}年近く'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    if (options.addSuffix && tokenValue.oneWithSuffix) {\n      result = tokenValue.oneWithSuffix;\n    } else {\n      result = tokenValue.one;\n    }\n  } else {\n    if (options.addSuffix && tokenValue.otherWithSuffix) {\n      result = tokenValue.otherWithSuffix.replace('{{count}}', String(count));\n    } else {\n      result = tokenValue.other.replace('{{count}}', String(count));\n    }\n  }\n  if (options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + '後';\n    } else {\n      return result + '前';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'y年M月d日EEEE',\n  long: 'y年M月d日',\n  medium: 'y/MM/dd',\n  short: 'y/MM/dd'\n};\nvar timeFormats = {\n  full: 'H時mm分ss秒 zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: '先週のeeeeのp',\n  yesterday: '昨日のp',\n  today: '今日のp',\n  tomorrow: '明日のp',\n  nextWeek: '翌週のeeeeのp',\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Japanese locale.\n * @language Japanese\n * @iso-639-2 jpn\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Yamagishi Kazutoshi [@ykzts]{@link https://github.com/ykzts}\n * @author Luca Ban [@mesqueeb]{@link https://github.com/mesqueeb}\n * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}\n * @author Taiki IKeda [@so99ynoodles]{@link https://github.com/so99ynoodles}\n */\nvar locale = {\n  code: 'ja',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['BC', 'AC'],\n  abbreviated: ['紀元前', '西暦'],\n  wide: ['紀元前', '西暦']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['第1四半期', '第2四半期', '第3四半期', '第4四半期']\n};\nvar monthValues = {\n  narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  abbreviated: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n  wide: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n};\nvar dayValues = {\n  narrow: ['日', '月', '火', '水', '木', '金', '土'],\n  short: ['日', '月', '火', '水', '木', '金', '土'],\n  abbreviated: ['日', '月', '火', '水', '木', '金', '土'],\n  wide: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: '午前',\n    pm: '午後',\n    midnight: '深夜',\n    noon: '正午',\n    morning: '朝',\n    afternoon: '午後',\n    evening: '夜',\n    night: '深夜'\n  },\n  abbreviated: {\n    am: '午前',\n    pm: '午後',\n    midnight: '深夜',\n    noon: '正午',\n    morning: '朝',\n    afternoon: '午後',\n    evening: '夜',\n    night: '深夜'\n  },\n  wide: {\n    am: '午前',\n    pm: '午後',\n    midnight: '深夜',\n    noon: '正午',\n    morning: '朝',\n    afternoon: '午後',\n    evening: '夜',\n    night: '深夜'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: '午前',\n    pm: '午後',\n    midnight: '深夜',\n    noon: '正午',\n    morning: '朝',\n    afternoon: '午後',\n    evening: '夜',\n    night: '深夜'\n  },\n  abbreviated: {\n    am: '午前',\n    pm: '午後',\n    midnight: '深夜',\n    noon: '正午',\n    morning: '朝',\n    afternoon: '午後',\n    evening: '夜',\n    night: '深夜'\n  },\n  wide: {\n    am: '午前',\n    pm: '午後',\n    midnight: '深夜',\n    noon: '正午',\n    morning: '朝',\n    afternoon: '午後',\n    evening: '夜',\n    night: '深夜'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  switch (unit) {\n    case 'year':\n      return \"\".concat(number, \"\\u5E74\");\n    case 'quarter':\n      return \"\\u7B2C\".concat(number, \"\\u56DB\\u534A\\u671F\");\n    case 'month':\n      return \"\".concat(number, \"\\u6708\");\n    case 'week':\n      return \"\\u7B2C\".concat(number, \"\\u9031\");\n    case 'date':\n      return \"\".concat(number, \"\\u65E5\");\n    case 'hour':\n      return \"\".concat(number, \"\\u6642\");\n    case 'minute':\n      return \"\".concat(number, \"\\u5206\");\n    case 'second':\n      return \"\".concat(number, \"\\u79D2\");\n    default:\n      return \"\".concat(number);\n  }\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^第?\\d+(年|四半期|月|週|日|時|分|秒)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(B\\.?C\\.?|A\\.?D\\.?)/i,\n  abbreviated: /^(紀元[前後]|西暦)/i,\n  wide: /^(紀元[前後]|西暦)/i\n};\nvar parseEraPatterns = {\n  narrow: [/^B/i, /^A/i],\n  any: [/^(紀元前)/i, /^(西暦|紀元後)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^Q[1234]/i,\n  wide: /^第[1234一二三四１２３４]四半期/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|一|１)/i, /(2|二|２)/i, /(3|三|３)/i, /(4|四|４)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^([123456789]|1[012])/,\n  abbreviated: /^([123456789]|1[012])月/i,\n  wide: /^([123456789]|1[012])月/i\n};\nvar parseMonthPatterns = {\n  any: [/^1\\D/, /^2/, /^3/, /^4/, /^5/, /^6/, /^7/, /^8/, /^9/, /^10/, /^11/, /^12/]\n};\nvar matchDayPatterns = {\n  narrow: /^[日月火水木金土]/,\n  short: /^[日月火水木金土]/,\n  abbreviated: /^[日月火水木金土]/,\n  wide: /^[日月火水木金土]曜日/\n};\nvar parseDayPatterns = {\n  any: [/^日/, /^月/, /^火/, /^水/, /^木/, /^金/, /^土/]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^(A|午前)/i,\n    pm: /^(P|午後)/i,\n    midnight: /^深夜|真夜中/i,\n    noon: /^正午/i,\n    morning: /^朝/i,\n    afternoon: /^午後/i,\n    evening: /^夜/i,\n    night: /^深夜/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '1びょうみまん',\n    other: '{{count}}びょうみまん',\n    oneWithSuffix: 'やく1びょう',\n    otherWithSuffix: 'やく{{count}}びょう'\n  },\n  xSeconds: {\n    one: '1びょう',\n    other: '{{count}}びょう'\n  },\n  halfAMinute: '30びょう',\n  lessThanXMinutes: {\n    one: '1ぷんみまん',\n    other: '{{count}}ふんみまん',\n    oneWithSuffix: 'やく1ぷん',\n    otherWithSuffix: 'やく{{count}}ふん'\n  },\n  xMinutes: {\n    one: '1ぷん',\n    other: '{{count}}ふん'\n  },\n  aboutXHours: {\n    one: 'やく1じかん',\n    other: 'やく{{count}}じかん'\n  },\n  xHours: {\n    one: '1じかん',\n    other: '{{count}}じかん'\n  },\n  xDays: {\n    one: '1にち',\n    other: '{{count}}にち'\n  },\n  aboutXWeeks: {\n    one: 'やく1しゅうかん',\n    other: 'やく{{count}}しゅうかん'\n  },\n  xWeeks: {\n    one: '1しゅうかん',\n    other: '{{count}}しゅうかん'\n  },\n  aboutXMonths: {\n    one: 'やく1かげつ',\n    other: 'やく{{count}}かげつ'\n  },\n  xMonths: {\n    one: '1かげつ',\n    other: '{{count}}かげつ'\n  },\n  aboutXYears: {\n    one: 'やく1ねん',\n    other: 'やく{{count}}ねん'\n  },\n  xYears: {\n    one: '1ねん',\n    other: '{{count}}ねん'\n  },\n  overXYears: {\n    one: '1ねんいじょう',\n    other: '{{count}}ねんいじょう'\n  },\n  almostXYears: {\n    one: '1ねんちかく',\n    other: '{{count}}ねんちかく'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    if (options.addSuffix && tokenValue.oneWithSuffix) {\n      result = tokenValue.oneWithSuffix;\n    } else {\n      result = tokenValue.one;\n    }\n  } else {\n    if (options.addSuffix && tokenValue.otherWithSuffix) {\n      result = tokenValue.otherWithSuffix.replace('{{count}}', String(count));\n    } else {\n      result = tokenValue.other.replace('{{count}}', String(count));\n    }\n  }\n  if (options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + 'あと';\n    } else {\n      return result + 'まえ';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'yねんMがつdにちEEEE',\n  long: 'yねんMがつdにち',\n  medium: 'y/MM/dd',\n  short: 'y/MM/dd'\n};\nvar timeFormats = {\n  full: 'Hじmmふんssびょう zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: 'せんしゅうのeeeeのp',\n  yesterday: 'きのうのp',\n  today: 'きょうのp',\n  tomorrow: 'あしたのp',\n  nextWeek: 'よくしゅうのeeeeのp',\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Japanese (Hiragana) locale.\n * @language Japanese (Hiragana)\n * @iso-639-2 jpn\n * @author Eri Hiramatsu [@Eritutteo]{@link https://github.com/Eritutteo}\n */\nvar locale = {\n  code: 'ja-Hira',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['BC', 'AC'],\n  abbreviated: ['きげんぜん', 'せいれき'],\n  wide: ['きげんぜん', 'せいれき']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['だい1しはんき', 'だい2しはんき', 'だい3しはんき', 'だい4しはんき']\n};\nvar monthValues = {\n  narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  abbreviated: ['1がつ', '2がつ', '3がつ', '4がつ', '5がつ', '6がつ', '7がつ', '8がつ', '9がつ', '10がつ', '11がつ', '12がつ'],\n  wide: ['1がつ', '2がつ', '3がつ', '4がつ', '5がつ', '6がつ', '7がつ', '8がつ', '9がつ', '10がつ', '11がつ', '12がつ']\n};\nvar dayValues = {\n  narrow: ['にち', 'げつ', 'か', 'すい', 'もく', 'きん', 'ど'],\n  short: ['にち', 'げつ', 'か', 'すい', 'もく', 'きん', 'ど'],\n  abbreviated: ['にち', 'げつ', 'か', 'すい', 'もく', 'きん', 'ど'],\n  wide: ['にちようび', 'げつようび', 'かようび', 'すいようび', 'もくようび', 'きんようび', 'どようび']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ごぜん',\n    pm: 'ごご',\n    midnight: 'しんや',\n    noon: 'しょうご',\n    morning: 'あさ',\n    afternoon: 'ごご',\n    evening: 'よる',\n    night: 'しんや'\n  },\n  abbreviated: {\n    am: 'ごぜん',\n    pm: 'ごご',\n    midnight: 'しんや',\n    noon: 'しょうご',\n    morning: 'あさ',\n    afternoon: 'ごご',\n    evening: 'よる',\n    night: 'しんや'\n  },\n  wide: {\n    am: 'ごぜん',\n    pm: 'ごご',\n    midnight: 'しんや',\n    noon: 'しょうご',\n    morning: 'あさ',\n    afternoon: 'ごご',\n    evening: 'よる',\n    night: 'しんや'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ごぜん',\n    pm: 'ごご',\n    midnight: 'しんや',\n    noon: 'しょうご',\n    morning: 'あさ',\n    afternoon: 'ごご',\n    evening: 'よる',\n    night: 'しんや'\n  },\n  abbreviated: {\n    am: 'ごぜん',\n    pm: 'ごご',\n    midnight: 'しんや',\n    noon: 'しょうご',\n    morning: 'あさ',\n    afternoon: 'ごご',\n    evening: 'よる',\n    night: 'しんや'\n  },\n  wide: {\n    am: 'ごぜん',\n    pm: 'ごご',\n    midnight: 'しんや',\n    noon: 'しょうご',\n    morning: 'あさ',\n    afternoon: 'ごご',\n    evening: 'よる',\n    night: 'しんや'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  switch (unit) {\n    case 'year':\n      return \"\".concat(number, \"\\u306D\\u3093\");\n    case 'quarter':\n      return \"\\u3060\\u3044\".concat(number, \"\\u3057\\u306F\\u3093\\u304D\");\n    case 'month':\n      return \"\".concat(number, \"\\u304C\\u3064\");\n    case 'week':\n      return \"\\u3060\\u3044\".concat(number, \"\\u3057\\u3085\\u3046\");\n    case 'date':\n      return \"\".concat(number, \"\\u306B\\u3061\");\n    case 'hour':\n      return \"\".concat(number, \"\\u3058\");\n    case 'minute':\n      return \"\".concat(number, \"\\u3075\\u3093\");\n    case 'second':\n      return \"\".concat(number, \"\\u3073\\u3087\\u3046\");\n    default:\n      return \"\".concat(number);\n  }\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^だ?い?\\d+(ねん|しはんき|がつ|しゅう|にち|じ|ふん|びょう)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(B\\.?C\\.?|A\\.?D\\.?)/i,\n  abbreviated: /^(きげん[前後]|せいれき)/i,\n  wide: /^(きげん[前後]|せいれき)/i\n};\nvar parseEraPatterns = {\n  narrow: [/^B/i, /^A/i],\n  any: [/^(きげんぜん)/i, /^(せいれき|きげんご)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^Q[1234]/i,\n  wide: /^だい[1234一二三四１２３４]しはんき/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|一|１)/i, /(2|二|２)/i, /(3|三|３)/i, /(4|四|４)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^([123456789]|1[012])/,\n  abbreviated: /^([123456789]|1[012])がつ/i,\n  wide: /^([123456789]|1[012])がつ/i\n};\nvar parseMonthPatterns = {\n  any: [/^1\\D/, /^2/, /^3/, /^4/, /^5/, /^6/, /^7/, /^8/, /^9/, /^10/, /^11/, /^12/]\n};\nvar matchDayPatterns = {\n  narrow: /^(にち|げつ|か|すい|もく|きん|ど)/,\n  short: /^(にち|げつ|か|すい|もく|きん|ど)/,\n  abbreviated: /^(にち|げつ|か|すい|もく|きん|ど)/,\n  wide: /^(にち|げつ|か|すい|もく|きん|ど)ようび/\n};\nvar parseDayPatterns = {\n  any: [/^にち/, /^げつ/, /^か/, /^すい/, /^もく/, /^きん/, /^ど/]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(AM|PM|ごぜん|ごご|しょうご|しんや|まよなか|よる|あさ)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^(A|ごぜん)/i,\n    pm: /^(P|ごご)/i,\n    midnight: /^しんや|まよなか/i,\n    noon: /^しょうご/i,\n    morning: /^あさ/i,\n    afternoon: /^ごご/i,\n    evening: /^よる/i,\n    night: /^しんや/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    past: '{{count}} წამზე ნაკლები ხნის წინ',\n    present: '{{count}} წამზე ნაკლები',\n    future: '{{count}} წამზე ნაკლებში'\n  },\n  xSeconds: {\n    past: '{{count}} წამის წინ',\n    present: '{{count}} წამი',\n    future: '{{count}} წამში'\n  },\n  halfAMinute: {\n    past: 'ნახევარი წუთის წინ',\n    present: 'ნახევარი წუთი',\n    future: 'ნახევარი წუთში'\n  },\n  lessThanXMinutes: {\n    past: '{{count}} წუთზე ნაკლები ხნის წინ',\n    present: '{{count}} წუთზე ნაკლები',\n    future: '{{count}} წუთზე ნაკლებში'\n  },\n  xMinutes: {\n    past: '{{count}} წუთის წინ',\n    present: '{{count}} წუთი',\n    future: '{{count}} წუთში'\n  },\n  aboutXHours: {\n    past: 'დაახლოებით {{count}} საათის წინ',\n    present: 'დაახლოებით {{count}} საათი',\n    future: 'დაახლოებით {{count}} საათში'\n  },\n  xHours: {\n    past: '{{count}} საათის წინ',\n    present: '{{count}} საათი',\n    future: '{{count}} საათში'\n  },\n  xDays: {\n    past: '{{count}} დღის წინ',\n    present: '{{count}} დღე',\n    future: '{{count}} დღეში'\n  },\n  aboutXWeeks: {\n    past: 'დაახლოებით {{count}} კვირას წინ',\n    present: 'დაახლოებით {{count}} კვირა',\n    future: 'დაახლოებით {{count}} კვირაში'\n  },\n  xWeeks: {\n    past: '{{count}} კვირას კვირა',\n    present: '{{count}} კვირა',\n    future: '{{count}} კვირაში'\n  },\n  aboutXMonths: {\n    past: 'დაახლოებით {{count}} თვის წინ',\n    present: 'დაახლოებით {{count}} თვე',\n    future: 'დაახლოებით {{count}} თვეში'\n  },\n  xMonths: {\n    past: '{{count}} თვის წინ',\n    present: '{{count}} თვე',\n    future: '{{count}} თვეში'\n  },\n  aboutXYears: {\n    past: 'დაახლოებით {{count}} წლის წინ',\n    present: 'დაახლოებით {{count}} წელი',\n    future: 'დაახლოებით {{count}} წელში'\n  },\n  xYears: {\n    past: '{{count}} წლის წინ',\n    present: '{{count}} წელი',\n    future: '{{count}} წელში'\n  },\n  overXYears: {\n    past: '{{count}} წელზე მეტი ხნის წინ',\n    present: '{{count}} წელზე მეტი',\n    future: '{{count}} წელზე მეტი ხნის შემდეგ'\n  },\n  almostXYears: {\n    past: 'თითქმის {{count}} წლის წინ',\n    present: 'თითქმის {{count}} წელი',\n    future: 'თითქმის {{count}} წელში'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (options !== null && options !== void 0 && options.addSuffix && options.comparison && options.comparison > 0) {\n    result = tokenValue.future.replace('{{count}}', String(count));\n  } else if (options !== null && options !== void 0 && options.addSuffix) {\n    result = tokenValue.past.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.present.replace('{{count}}', String(count));\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, do MMMM, y',\n  long: 'do, MMMM, y',\n  medium: 'd, MMM, y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} {{time}}'-ზე'\",\n  long: \"{{date}} {{time}}'-ზე'\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'წინა' eeee p'-ზე'\",\n  yesterday: \"'გუშინ' p'-ზე'\",\n  today: \"'დღეს' p'-ზე'\",\n  tomorrow: \"'ხვალ' p'-ზე'\",\n  nextWeek: \"'შემდეგი' eeee p'-ზე'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Georgian locale.\n * @language Georgian\n * @iso-639-2 geo\n * @author Lado Lomidze [@Landish]{@link https://github.com/Landish}\n * @author Nick Shvelidze [@shvelo]{@link https://github.com/shvelo}\n */\nvar locale = {\n  code: 'ka',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ჩ.წ-მდე', 'ჩ.წ'],\n  abbreviated: ['ჩვ.წ-მდე', 'ჩვ.წ'],\n  wide: ['ჩვენს წელთაღრიცხვამდე', 'ჩვენი წელთაღრიცხვით']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-ლი კვ', '2-ე კვ', '3-ე კვ', '4-ე კვ'],\n  wide: ['1-ლი კვარტალი', '2-ე კვარტალი', '3-ე კვარტალი', '4-ე კვარტალი']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['ია', 'თე', 'მა', 'აპ', 'მს', 'ვნ', 'ვლ', 'აგ', 'სე', 'ოქ', 'ნო', 'დე'],\n  abbreviated: ['იან', 'თებ', 'მარ', 'აპრ', 'მაი', 'ივნ', 'ივლ', 'აგვ', 'სექ', 'ოქტ', 'ნოე', 'დეკ'],\n  wide: ['იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი']\n};\nvar dayValues = {\n  narrow: ['კვ', 'ორ', 'სა', 'ოთ', 'ხუ', 'პა', 'შა'],\n  short: ['კვი', 'ორშ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ'],\n  abbreviated: ['კვი', 'ორშ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ'],\n  wide: ['კვირა', 'ორშაბათი', 'სამშაბათი', 'ოთხშაბათი', 'ხუთშაბათი', 'პარასკევი', 'შაბათი']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'შუაღამე',\n    noon: 'შუადღე',\n    morning: 'დილა',\n    afternoon: 'საღამო',\n    evening: 'საღამო',\n    night: 'ღამე'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'შუაღამე',\n    noon: 'შუადღე',\n    morning: 'დილა',\n    afternoon: 'საღამო',\n    evening: 'საღამო',\n    night: 'ღამე'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'შუაღამე',\n    noon: 'შუადღე',\n    morning: 'დილა',\n    afternoon: 'საღამო',\n    evening: 'საღამო',\n    night: 'ღამე'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'შუაღამით',\n    noon: 'შუადღისას',\n    morning: 'დილით',\n    afternoon: 'ნაშუადღევს',\n    evening: 'საღამოს',\n    night: 'ღამით'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'შუაღამით',\n    noon: 'შუადღისას',\n    morning: 'დილით',\n    afternoon: 'ნაშუადღევს',\n    evening: 'საღამოს',\n    night: 'ღამით'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'შუაღამით',\n    noon: 'შუადღისას',\n    morning: 'დილით',\n    afternoon: 'ნაშუადღევს',\n    evening: 'საღამოს',\n    night: 'ღამით'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n  var number = Number(dirtyNumber);\n  if (number === 1) {\n    return number + '-ლი';\n  }\n  return number + '-ე';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-ლი|-ე)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ჩვ?\\.წ)/i,\n  abbreviated: /^(ჩვ?\\.წ)/i,\n  wide: /^(ჩვენს წელთაღრიცხვამდე|ქრისტეშობამდე|ჩვენი წელთაღრიცხვით|ქრისტეშობიდან)/i\n};\nvar parseEraPatterns = {\n  any: [/^(ჩვენს წელთაღრიცხვამდე|ქრისტეშობამდე)/i, /^(ჩვენი წელთაღრიცხვით|ქრისტეშობიდან)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]-(ლი|ე)? კვ/i,\n  wide: /^[1234]-(ლი|ე)? კვარტალი/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  any: /^(ია|თე|მა|აპ|მს|ვნ|ვლ|აგ|სე|ოქ|ნო|დე)/i\n};\nvar parseMonthPatterns = {\n  any: [/^ია/i, /^თ/i, /^მარ/i, /^აპ/i, /^მაი/i, /^ი?ვნ/i, /^ი?ვლ/i, /^აგ/i, /^ს/i, /^ო/i, /^ნ/i, /^დ/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(კვ|ორ|სა|ოთ|ხუ|პა|შა)/i,\n  short: /^(კვი|ორშ|სამ|ოთხ|ხუთ|პარ|შაბ)/i,\n  wide: /^(კვირა|ორშაბათი|სამშაბათი|ოთხშაბათი|ხუთშაბათი|პარასკევი|შაბათი)/i\n};\nvar parseDayPatterns = {\n  any: [/^კვ/i, /^ორ/i, /^სა/i, /^ოთ/i, /^ხუ/i, /^პა/i, /^შა/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^([ap]\\.?\\s?m\\.?|შუაღ|დილ)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^შუაღ/i,\n    noon: /^შუადღ/i,\n    morning: /^დილ/i,\n    afternoon: /ნაშუადღევს/i,\n    evening: /საღამო/i,\n    night: /ღამ/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    regular: {\n      one: '1 секундтан аз',\n      singularNominative: '{{count}} секундтан аз',\n      singularGenitive: '{{count}} секундтан аз',\n      pluralGenitive: '{{count}} секундтан аз'\n    },\n    future: {\n      one: 'бір секундтан кейін',\n      singularNominative: '{{count}} секундтан кейін',\n      singularGenitive: '{{count}} секундтан кейін',\n      pluralGenitive: '{{count}} секундтан кейін'\n    }\n  },\n  xSeconds: {\n    regular: {\n      singularNominative: '{{count}} секунд',\n      singularGenitive: '{{count}} секунд',\n      pluralGenitive: '{{count}} секунд'\n    },\n    past: {\n      singularNominative: '{{count}} секунд бұрын',\n      singularGenitive: '{{count}} секунд бұрын',\n      pluralGenitive: '{{count}} секунд бұрын'\n    },\n    future: {\n      singularNominative: '{{count}} секундтан кейін',\n      singularGenitive: '{{count}} секундтан кейін',\n      pluralGenitive: '{{count}} секундтан кейін'\n    }\n  },\n  halfAMinute: function halfAMinute(options) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        return 'жарты минут ішінде';\n      } else {\n        return 'жарты минут бұрын';\n      }\n    }\n    return 'жарты минут';\n  },\n  lessThanXMinutes: {\n    regular: {\n      one: '1 минуттан аз',\n      singularNominative: '{{count}} минуттан аз',\n      singularGenitive: '{{count}} минуттан аз',\n      pluralGenitive: '{{count}} минуттан аз'\n    },\n    future: {\n      one: 'минуттан кем ',\n      singularNominative: '{{count}} минуттан кем',\n      singularGenitive: '{{count}} минуттан кем',\n      pluralGenitive: '{{count}} минуттан кем'\n    }\n  },\n  xMinutes: {\n    regular: {\n      singularNominative: '{{count}} минут',\n      singularGenitive: '{{count}} минут',\n      pluralGenitive: '{{count}} минут'\n    },\n    past: {\n      singularNominative: '{{count}} минут бұрын',\n      singularGenitive: '{{count}} минут бұрын',\n      pluralGenitive: '{{count}} минут бұрын'\n    },\n    future: {\n      singularNominative: '{{count}} минуттан кейін',\n      singularGenitive: '{{count}} минуттан кейін',\n      pluralGenitive: '{{count}} минуттан кейін'\n    }\n  },\n  aboutXHours: {\n    regular: {\n      singularNominative: 'шамамен {{count}} сағат',\n      singularGenitive: 'шамамен {{count}} сағат',\n      pluralGenitive: 'шамамен {{count}} сағат'\n    },\n    future: {\n      singularNominative: 'шамамен {{count}} сағаттан кейін',\n      singularGenitive: 'шамамен {{count}} сағаттан кейін',\n      pluralGenitive: 'шамамен {{count}} сағаттан кейін'\n    }\n  },\n  xHours: {\n    regular: {\n      singularNominative: '{{count}} сағат',\n      singularGenitive: '{{count}} сағат',\n      pluralGenitive: '{{count}} сағат'\n    }\n  },\n  xDays: {\n    regular: {\n      singularNominative: '{{count}} күн',\n      singularGenitive: '{{count}} күн',\n      pluralGenitive: '{{count}} күн'\n    },\n    future: {\n      singularNominative: '{{count}} күннен кейін',\n      singularGenitive: '{{count}} күннен кейін',\n      pluralGenitive: '{{count}} күннен кейін'\n    }\n  },\n  aboutXWeeks: {\n    type: 'weeks',\n    one: 'шамамен 1 апта',\n    other: 'шамамен {{count}} апта'\n  },\n  xWeeks: {\n    type: 'weeks',\n    one: '1 апта',\n    other: '{{count}} апта'\n  },\n  aboutXMonths: {\n    regular: {\n      singularNominative: 'шамамен {{count}} ай',\n      singularGenitive: 'шамамен {{count}} ай',\n      pluralGenitive: 'шамамен {{count}} ай'\n    },\n    future: {\n      singularNominative: 'шамамен {{count}} айдан кейін',\n      singularGenitive: 'шамамен {{count}} айдан кейін',\n      pluralGenitive: 'шамамен {{count}} айдан кейін'\n    }\n  },\n  xMonths: {\n    regular: {\n      singularNominative: '{{count}} ай',\n      singularGenitive: '{{count}} ай',\n      pluralGenitive: '{{count}} ай'\n    }\n  },\n  aboutXYears: {\n    regular: {\n      singularNominative: 'шамамен {{count}} жыл',\n      singularGenitive: 'шамамен {{count}} жыл',\n      pluralGenitive: 'шамамен {{count}} жыл'\n    },\n    future: {\n      singularNominative: 'шамамен {{count}} жылдан кейін',\n      singularGenitive: 'шамамен {{count}} жылдан кейін',\n      pluralGenitive: 'шамамен {{count}} жылдан кейін'\n    }\n  },\n  xYears: {\n    regular: {\n      singularNominative: '{{count}} жыл',\n      singularGenitive: '{{count}} жыл',\n      pluralGenitive: '{{count}} жыл'\n    },\n    future: {\n      singularNominative: '{{count}} жылдан кейін',\n      singularGenitive: '{{count}} жылдан кейін',\n      pluralGenitive: '{{count}} жылдан кейін'\n    }\n  },\n  overXYears: {\n    regular: {\n      singularNominative: '{{count}} жылдан астам',\n      singularGenitive: '{{count}} жылдан астам',\n      pluralGenitive: '{{count}} жылдан астам'\n    },\n    future: {\n      singularNominative: '{{count}} жылдан астам',\n      singularGenitive: '{{count}} жылдан астам',\n      pluralGenitive: '{{count}} жылдан астам'\n    }\n  },\n  almostXYears: {\n    regular: {\n      singularNominative: '{{count}} жылға жақын',\n      singularGenitive: '{{count}} жылға жақын',\n      pluralGenitive: '{{count}} жылға жақын'\n    },\n    future: {\n      singularNominative: '{{count}} жылдан кейін',\n      singularGenitive: '{{count}} жылдан кейін',\n      pluralGenitive: '{{count}} жылдан кейін'\n    }\n  }\n};\nfunction declension(scheme, count) {\n  // scheme for count=1 exists\n  if (scheme.one && count === 1) return scheme.one;\n  var rem10 = count % 10;\n  var rem100 = count % 100;\n\n  // 1, 21, 31, ...\n  if (rem10 === 1 && rem100 !== 11) {\n    return scheme.singularNominative.replace('{{count}}', String(count));\n\n    // 2, 3, 4, 22, 23, 24, 32 ...\n  } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {\n    return scheme.singularGenitive.replace('{{count}}', String(count));\n\n    // 5, 6, 7, 8, 9, 10, 11, ...\n  } else {\n    return scheme.pluralGenitive.replace('{{count}}', String(count));\n  }\n}\nvar formatDistance = function formatDistance(token, count, options) {\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'function') return tokenValue(options);\n  if (tokenValue.type === 'weeks') {\n    return count === 1 ? tokenValue.one : tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      if (tokenValue.future) {\n        return declension(tokenValue.future, count);\n      } else {\n        return declension(tokenValue.regular, count) + ' кейін';\n      }\n    } else {\n      if (tokenValue.past) {\n        return declension(tokenValue.past, count);\n      } else {\n        return declension(tokenValue.regular, count) + ' бұрын';\n      }\n    }\n  } else {\n    return declension(tokenValue.regular, count);\n  }\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, do MMMM y 'ж.'\",\n  long: \"do MMMM y 'ж.'\",\n  medium: \"d MMM y 'ж.'\",\n  short: 'dd.MM.yyyy'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar accusativeWeekdays = ['жексенбіде', 'дүйсенбіде', 'сейсенбіде', 'сәрсенбіде', 'бейсенбіде', 'жұмада', 'сенбіде'];\nfunction _lastWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  return \"'өткен \" + weekday + \" сағат' p'-де'\";\n}\nfunction thisWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  return \"'\" + weekday + \" сағат' p'-де'\";\n}\nfunction _nextWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  return \"'келесі \" + weekday + \" сағат' p'-де'\";\n}\nvar formatRelativeLocale = {\n  lastWeek: function lastWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _lastWeek(day);\n    }\n  },\n  yesterday: \"'кеше сағат' p'-де'\",\n  today: \"'бүгін сағат' p'-де'\",\n  tomorrow: \"'ертең сағат' p'-де'\",\n  nextWeek: function nextWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _nextWeek(day);\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['б.з.д.', 'б.з.'],\n  abbreviated: ['б.з.д.', 'б.з.'],\n  wide: ['біздің заманымызға дейін', 'біздің заманымыз']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-ші тоқ.', '2-ші тоқ.', '3-ші тоқ.', '4-ші тоқ.'],\n  wide: ['1-ші тоқсан', '2-ші тоқсан', '3-ші тоқсан', '4-ші тоқсан']\n};\nvar monthValues = {\n  narrow: ['Қ', 'А', 'Н', 'С', 'М', 'М', 'Ш', 'Т', 'Қ', 'Қ', 'Қ', 'Ж'],\n  abbreviated: ['қаң', 'ақп', 'нау', 'сәу', 'мам', 'мау', 'шіл', 'там', 'қыр', 'қаз', 'қар', 'жел'],\n  wide: ['қаңтар', 'ақпан', 'наурыз', 'сәуір', 'мамыр', 'маусым', 'шілде', 'тамыз', 'қыркүйек', 'қазан', 'қараша', 'желтоқсан']\n};\nvar formattingMonthValues = {\n  narrow: ['Қ', 'А', 'Н', 'С', 'М', 'М', 'Ш', 'Т', 'Қ', 'Қ', 'Қ', 'Ж'],\n  abbreviated: ['қаң', 'ақп', 'нау', 'сәу', 'мам', 'мау', 'шіл', 'там', 'қыр', 'қаз', 'қар', 'жел'],\n  wide: ['қаңтар', 'ақпан', 'наурыз', 'сәуір', 'мамыр', 'маусым', 'шілде', 'тамыз', 'қыркүйек', 'қазан', 'қараша', 'желтоқсан']\n};\nvar dayValues = {\n  narrow: ['Ж', 'Д', 'С', 'С', 'Б', 'Ж', 'С'],\n  short: ['жс', 'дс', 'сс', 'ср', 'бс', 'жм', 'сб'],\n  abbreviated: ['жс', 'дс', 'сс', 'ср', 'бс', 'жм', 'сб'],\n  wide: ['жексенбі', 'дүйсенбі', 'сейсенбі', 'сәрсенбі', 'бейсенбі', 'жұма', 'сенбі']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ТД',\n    pm: 'ТК',\n    midnight: 'түн ортасы',\n    noon: 'түс',\n    morning: 'таң',\n    afternoon: 'күндіз',\n    evening: 'кеш',\n    night: 'түн'\n  },\n  wide: {\n    am: 'ТД',\n    pm: 'ТК',\n    midnight: 'түн ортасы',\n    noon: 'түс',\n    morning: 'таң',\n    afternoon: 'күндіз',\n    evening: 'кеш',\n    night: 'түн'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ТД',\n    pm: 'ТК',\n    midnight: 'түн ортасында',\n    noon: 'түс',\n    morning: 'таң',\n    afternoon: 'күн',\n    evening: 'кеш',\n    night: 'түн'\n  },\n  wide: {\n    am: 'ТД',\n    pm: 'ТК',\n    midnight: 'түн ортасында',\n    noon: 'түсте',\n    morning: 'таңертең',\n    afternoon: 'күндіз',\n    evening: 'кеште',\n    night: 'түнде'\n  }\n};\nvar suffixes = {\n  0: '-ші',\n  1: '-ші',\n  2: '-ші',\n  3: '-ші',\n  4: '-ші',\n  5: '-ші',\n  6: '-шы',\n  7: '-ші',\n  8: '-ші',\n  9: '-шы',\n  10: '-шы',\n  20: '-шы',\n  30: '-шы',\n  40: '-шы',\n  50: '-ші',\n  60: '-шы',\n  70: '-ші',\n  80: '-ші',\n  90: '-шы',\n  100: '-ші'\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  var mod10 = number % 10;\n  var b = number >= 100 ? 100 : null;\n  var suffix = suffixes[number] || suffixes[mod10] || b && suffixes[b] || '';\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'any',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Kazakh locale.\n * @language Kazakh\n * @iso-639-2 kaz\n * @author Nikita Bayev [@drugoi]{@link https://github.com/drugoi}\n */\nvar locale = {\n  code: 'kk',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?(ші|шы))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((б )?з\\.?\\s?д\\.?)/i,\n  abbreviated: /^((б )?з\\.?\\s?д\\.?)/i,\n  wide: /^(біздің заманымызға дейін|біздің заманымыз|біздің заманымыздан)/i\n};\nvar parseEraPatterns = {\n  any: [/^б/i, /^з/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?ші)? тоқ.?/i,\n  wide: /^[1234](-?ші)? тоқсан/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(қ|а|н|с|м|мау|ш|т|қыр|қаз|қар|ж)/i,\n  abbreviated: /^(қаң|ақп|нау|сәу|мам|мау|шіл|там|қыр|қаз|қар|жел)/i,\n  wide: /^(қаңтар|ақпан|наурыз|сәуір|мамыр|маусым|шілде|тамыз|қыркүйек|қазан|қараша|желтоқсан)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^қ/i, /^а/i, /^н/i, /^с/i, /^м/i, /^м/i, /^ш/i, /^т/i, /^қ/i, /^қ/i, /^қ/i, /^ж/i],\n  abbreviated: [/^қаң/i, /^ақп/i, /^нау/i, /^сәу/i, /^мам/i, /^мау/i, /^шіл/i, /^там/i, /^қыр/i, /^қаз/i, /^қар/i, /^жел/i],\n  any: [/^қ/i, /^а/i, /^н/i, /^с/i, /^м/i, /^м/i, /^ш/i, /^т/i, /^қ/i, /^қ/i, /^қ/i, /^ж/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(ж|д|с|с|б|ж|с)/i,\n  short: /^(жс|дс|сс|ср|бс|жм|сб)/i,\n  wide: /^(жексенбі|дүйсенбі|сейсенбі|сәрсенбі|бейсенбі|жұма|сенбі)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ж/i, /^д/i, /^с/i, /^с/i, /^б/i, /^ж/i, /^с/i],\n  short: [/^жс/i, /^дс/i, /^сс/i, /^ср/i, /^бс/i, /^жм/i, /^сб/i],\n  any: [/^ж[ек]/i, /^д[үй]/i, /^сe[й]/i, /^сә[р]/i, /^б[ей]/i, /^ж[ұм]/i, /^се[н]/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^Т\\.?\\s?[ДК]\\.?|түн ортасында|((түсте|таңертең|таңда|таңертең|таңмен|таң|күндіз|күн|кеште|кеш|түнде|түн)\\.?)/i,\n  wide: /^Т\\.?\\s?[ДК]\\.?|түн ортасында|((түсте|таңертең|таңда|таңертең|таңмен|таң|күндіз|күн|кеште|кеш|түнде|түн)\\.?)/i,\n  any: /^Т\\.?\\s?[ДК]\\.?|түн ортасында|((түсте|таңертең|таңда|таңертең|таңмен|таң|күндіз|күн|кеште|кеш|түнде|түн)\\.?)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ТД/i,\n    pm: /^ТК/i,\n    midnight: /^түн орта/i,\n    noon: /^күндіз/i,\n    morning: /таң/i,\n    afternoon: /түс/i,\n    evening: /кеш/i,\n    night: /түн/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: 'តិចជាង {{count}} វិនាទី',\n  xSeconds: '{{count}} វិនាទី',\n  halfAMinute: 'កន្លះនាទី',\n  lessThanXMinutes: 'តិចជាង {{count}} នាទី',\n  xMinutes: '{{count}} នាទី',\n  aboutXHours: 'ប្រហែល {{count}} ម៉ោង',\n  xHours: '{{count}} ម៉ោង',\n  xDays: '{{count}} ថ្ងៃ',\n  aboutXWeeks: 'ប្រហែល {{count}} សប្តាហ៍',\n  xWeeks: '{{count}} សប្តាហ៍',\n  aboutXMonths: 'ប្រហែល {{count}} ខែ',\n  xMonths: '{{count}} ខែ',\n  aboutXYears: 'ប្រហែល {{count}} ឆ្នាំ',\n  xYears: '{{count}} ឆ្នាំ',\n  overXYears: 'ជាង {{count}} ឆ្នាំ',\n  almostXYears: 'ជិត {{count}} ឆ្នាំ'\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var tokenValue = formatDistanceLocale[token];\n  var result = tokenValue;\n  if (typeof count === 'number') {\n    result = result.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'ក្នុងរយៈពេល ' + result;\n    } else {\n      return result + 'មុន';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE do MMMM y',\n  long: 'do MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a',\n  long: 'h:mm:ss a',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'ម៉ោង' {{time}}\",\n  long: \"{{date}} 'ម៉ោង' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'ថ្ងៃ'eeee'ស​ប្តា​ហ៍​មុនម៉ោង' p\",\n  yesterday: \"'ម្សិលមិញនៅម៉ោង' p\",\n  today: \"'ថ្ងៃនេះម៉ោង' p\",\n  tomorrow: \"'ថ្ងៃស្អែកម៉ោង' p\",\n  nextWeek: \"'ថ្ងៃ'eeee'ស​ប្តា​ហ៍​ក្រោយម៉ោង' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Khmer locale (Cambodian).\n * @language Khmer\n * @iso-639-2 khm\n * @author Seanghay Yath [@seanghay]{@link https://github.com/seanghay}\n */\nvar locale = {\n  code: 'km',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ម.គស', 'គស'],\n  abbreviated: ['មុនគ.ស', 'គ.ស'],\n  wide: ['មុនគ្រិស្តសករាជ', 'នៃគ្រិស្តសករាជ']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['ត្រីមាសទី 1', 'ត្រីមាសទី 2', 'ត្រីមាសទី 3', 'ត្រីមាសទី 4']\n};\nvar monthValues = {\n  narrow: ['ម.ក', 'ក.ម', 'មិ', 'ម.ស', 'ឧ.ស', 'ម.ថ', 'ក.ដ', 'សី', 'កញ', 'តុ', 'វិ', 'ធ'],\n  abbreviated: ['មករា', 'កុម្ភៈ', 'មីនា', 'មេសា', 'ឧសភា', 'មិថុនា', 'កក្កដា', 'សីហា', 'កញ្ញា', 'តុលា', 'វិច្ឆិកា', 'ធ្នូ'],\n  wide: ['មករា', 'កុម្ភៈ', 'មីនា', 'មេសា', 'ឧសភា', 'មិថុនា', 'កក្កដា', 'សីហា', 'កញ្ញា', 'តុលា', 'វិច្ឆិកា', 'ធ្នូ']\n};\nvar dayValues = {\n  narrow: ['អា', 'ច', 'អ', 'ព', 'ព្រ', 'សុ', 'ស'],\n  short: ['អា', 'ច', 'អ', 'ព', 'ព្រ', 'សុ', 'ស'],\n  abbreviated: ['អា', 'ច', 'អ', 'ព', 'ព្រ', 'សុ', 'ស'],\n  wide: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ព្រឹក',\n    pm: 'ល្ងាច',\n    midnight: '​ពេលកណ្ដាលអធ្រាត្រ',\n    noon: 'ពេលថ្ងៃត្រង់',\n    morning: 'ពេលព្រឹក',\n    afternoon: 'ពេលរសៀល',\n    evening: 'ពេលល្ងាច',\n    night: 'ពេលយប់'\n  },\n  abbreviated: {\n    am: 'ព្រឹក',\n    pm: 'ល្ងាច',\n    midnight: '​ពេលកណ្ដាលអធ្រាត្រ',\n    noon: 'ពេលថ្ងៃត្រង់',\n    morning: 'ពេលព្រឹក',\n    afternoon: 'ពេលរសៀល',\n    evening: 'ពេលល្ងាច',\n    night: 'ពេលយប់'\n  },\n  wide: {\n    am: 'ព្រឹក',\n    pm: 'ល្ងាច',\n    midnight: '​ពេលកណ្ដាលអធ្រាត្រ',\n    noon: 'ពេលថ្ងៃត្រង់',\n    morning: 'ពេលព្រឹក',\n    afternoon: 'ពេលរសៀល',\n    evening: 'ពេលល្ងាច',\n    night: 'ពេលយប់'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ព្រឹក',\n    pm: 'ល្ងាច',\n    midnight: '​ពេលកណ្ដាលអធ្រាត្រ',\n    noon: 'ពេលថ្ងៃត្រង់',\n    morning: 'ពេលព្រឹក',\n    afternoon: 'ពេលរសៀល',\n    evening: 'ពេលល្ងាច',\n    night: 'ពេលយប់'\n  },\n  abbreviated: {\n    am: 'ព្រឹក',\n    pm: 'ល្ងាច',\n    midnight: '​ពេលកណ្ដាលអធ្រាត្រ',\n    noon: 'ពេលថ្ងៃត្រង់',\n    morning: 'ពេលព្រឹក',\n    afternoon: 'ពេលរសៀល',\n    evening: 'ពេលល្ងាច',\n    night: 'ពេលយប់'\n  },\n  wide: {\n    am: 'ព្រឹក',\n    pm: 'ល្ងាច',\n    midnight: '​ពេលកណ្ដាលអធ្រាត្រ',\n    noon: 'ពេលថ្ងៃត្រង់',\n    morning: 'ពេលព្រឹក',\n    afternoon: 'ពេលរសៀល',\n    evening: 'ពេលល្ងាច',\n    night: 'ពេលយប់'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _) {\n  var number = Number(dirtyNumber);\n  return number.toString();\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ម\\.)?គស/i,\n  abbreviated: /^(មុន)?គ\\.ស/i,\n  wide: /^(មុន|នៃ)គ្រិស្តសករាជ/i\n};\nvar parseEraPatterns = {\n  any: [/^(ម|មុន)គ\\.?ស/i, /^(នៃ)?គ\\.?ស/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^(ត្រីមាស)(ទី)?\\s?[1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(ម\\.ក|ក\\.ម|មិ|ម\\.ស|ឧ\\.ស|ម\\.ថ|ក\\.ដ|សី|កញ|តុ|វិ|ធ)/i,\n  abbreviated: /^(មករា|កុម្ភៈ|មីនា|មេសា|ឧសភា|មិថុនា|កក្កដា|សីហា|កញ្ញា|តុលា|វិច្ឆិកា|ធ្នូ)/i,\n  wide: /^(មករា|កុម្ភៈ|មីនា|មេសា|ឧសភា|មិថុនា|កក្កដា|សីហា|កញ្ញា|តុលា|វិច្ឆិកា|ធ្នូ)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ម\\.ក/i, /^ក\\.ម/i, /^មិ/i, /^ម\\.ស/i, /^ឧ\\.ស/i, /^ម\\.ថ/i, /^ក\\.ដ/i, /^សី/i, /^កញ/i, /^តុ/i, /^វិ/i, /^ធ/i],\n  any: [/^មក/i, /^កុ/i, /^មីន/i, /^មេ/i, /^ឧស/i, /^មិថ/i, /^កក/i, /^សី/i, /^កញ/i, /^តុ/i, /^វិច/i, /^ធ/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(អា|ច|អ|ព|ព្រ|សុ|ស)/i,\n  short: /^(អា|ច|អ|ព|ព្រ|សុ|ស)/i,\n  abbreviated: /^(អា|ច|អ|ព|ព្រ|សុ|ស)/i,\n  wide: /^(អាទិត្យ|ចន្ទ|អង្គារ|ពុធ|ព្រហស្បតិ៍|សុក្រ|សៅរ៍)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^អា/i, /^ច/i, /^អ/i, /^ព/i, /^ព្រ/i, /^សុ/i, /^ស/i],\n  any: [/^អា/i, /^ច/i, /^អ/i, /^ព/i, /^ព្រ/i, /^សុ/i, /^សៅ/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ព្រឹក|ល្ងាច|ពេលព្រឹក|ពេលថ្ងៃត្រង់|ពេលល្ងាច|ពេលរសៀល|ពេលយប់|ពេលកណ្ដាលអធ្រាត្រ)/i,\n  any: /^(ព្រឹក|ល្ងាច|ពេលព្រឹក|ពេលថ្ងៃត្រង់|ពេលល្ងាច|ពេលរសៀល|ពេលយប់|ពេលកណ្ដាលអធ្រាត្រ)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ព្រឹក/i,\n    pm: /^ល្ងាច/i,\n    midnight: /^ពេលកណ្ដាលអធ្រាត្រ/i,\n    noon: /^ពេលថ្ងៃត្រង់/i,\n    morning: /ពេលព្រឹក/i,\n    afternoon: /ពេលរសៀល/i,\n    evening: /ពេលល្ងាច/i,\n    night: /ពេលយប់/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","// note: no implementation for weeks\n\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      default: '1 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',\n      future: '1 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',\n      past: '1 ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ'\n    },\n    other: {\n      default: '{{count}} ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',\n      future: '{{count}} ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ',\n      past: '{{count}} ಸೆಕೆಂಡ್‌ಗಿಂತ ಕಡಿಮೆ'\n    }\n  },\n  xSeconds: {\n    one: {\n      default: '1 ಸೆಕೆಂಡ್',\n      future: '1 ಸೆಕೆಂಡ್‌ನಲ್ಲಿ',\n      past: '1 ಸೆಕೆಂಡ್ ಹಿಂದೆ'\n    },\n    other: {\n      default: '{{count}} ಸೆಕೆಂಡುಗಳು',\n      future: '{{count}} ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ',\n      past: '{{count}} ಸೆಕೆಂಡ್ ಹಿಂದೆ'\n    }\n  },\n  halfAMinute: {\n    other: {\n      default: 'ಅರ್ಧ ನಿಮಿಷ',\n      future: 'ಅರ್ಧ ನಿಮಿಷದಲ್ಲಿ',\n      past: 'ಅರ್ಧ ನಿಮಿಷದ ಹಿಂದೆ'\n    }\n  },\n  lessThanXMinutes: {\n    one: {\n      default: '1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',\n      future: '1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',\n      past: '1 ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ'\n    },\n    other: {\n      default: '{{count}} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',\n      future: '{{count}} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ',\n      past: '{{count}} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ'\n    }\n  },\n  xMinutes: {\n    one: {\n      default: '1 ನಿಮಿಷ',\n      future: '1 ನಿಮಿಷದಲ್ಲಿ',\n      past: '1 ನಿಮಿಷದ ಹಿಂದೆ'\n    },\n    other: {\n      default: '{{count}} ನಿಮಿಷಗಳು',\n      future: '{{count}} ನಿಮಿಷಗಳಲ್ಲಿ',\n      past: '{{count}} ನಿಮಿಷಗಳ ಹಿಂದೆ'\n    }\n  },\n  aboutXHours: {\n    one: {\n      default: 'ಸುಮಾರು 1 ಗಂಟೆ',\n      future: 'ಸುಮಾರು 1 ಗಂಟೆಯಲ್ಲಿ',\n      past: 'ಸುಮಾರು 1 ಗಂಟೆ ಹಿಂದೆ'\n    },\n    other: {\n      default: 'ಸುಮಾರು {{count}} ಗಂಟೆಗಳು',\n      future: 'ಸುಮಾರು {{count}} ಗಂಟೆಗಳಲ್ಲಿ',\n      past: 'ಸುಮಾರು {{count}} ಗಂಟೆಗಳ ಹಿಂದೆ'\n    }\n  },\n  xHours: {\n    one: {\n      default: '1 ಗಂಟೆ',\n      future: '1 ಗಂಟೆಯಲ್ಲಿ',\n      past: '1 ಗಂಟೆ ಹಿಂದೆ'\n    },\n    other: {\n      default: '{{count}} ಗಂಟೆಗಳು',\n      future: '{{count}} ಗಂಟೆಗಳಲ್ಲಿ',\n      past: '{{count}} ಗಂಟೆಗಳ ಹಿಂದೆ'\n    }\n  },\n  xDays: {\n    one: {\n      default: '1 ದಿನ',\n      future: '1 ದಿನದಲ್ಲಿ',\n      past: '1 ದಿನದ ಹಿಂದೆ'\n    },\n    other: {\n      default: '{{count}} ದಿನಗಳು',\n      future: '{{count}} ದಿನಗಳಲ್ಲಿ',\n      past: '{{count}} ದಿನಗಳ ಹಿಂದೆ'\n    }\n  },\n  // TODO\n  // aboutXWeeks: {},\n\n  // TODO\n  // xWeeks: {},\n\n  aboutXMonths: {\n    one: {\n      default: 'ಸುಮಾರು 1 ತಿಂಗಳು',\n      future: 'ಸುಮಾರು 1 ತಿಂಗಳಲ್ಲಿ',\n      past: 'ಸುಮಾರು 1 ತಿಂಗಳ ಹಿಂದೆ'\n    },\n    other: {\n      default: 'ಸುಮಾರು {{count}} ತಿಂಗಳು',\n      future: 'ಸುಮಾರು {{count}} ತಿಂಗಳುಗಳಲ್ಲಿ',\n      past: 'ಸುಮಾರು {{count}} ತಿಂಗಳುಗಳ ಹಿಂದೆ'\n    }\n  },\n  xMonths: {\n    one: {\n      default: '1 ತಿಂಗಳು',\n      future: '1 ತಿಂಗಳಲ್ಲಿ',\n      past: '1 ತಿಂಗಳ ಹಿಂದೆ'\n    },\n    other: {\n      default: '{{count}} ತಿಂಗಳು',\n      future: '{{count}} ತಿಂಗಳುಗಳಲ್ಲಿ',\n      past: '{{count}} ತಿಂಗಳುಗಳ ಹಿಂದೆ'\n    }\n  },\n  aboutXYears: {\n    one: {\n      default: 'ಸುಮಾರು 1 ವರ್ಷ',\n      future: 'ಸುಮಾರು 1 ವರ್ಷದಲ್ಲಿ',\n      past: 'ಸುಮಾರು 1 ವರ್ಷದ ಹಿಂದೆ'\n    },\n    other: {\n      default: 'ಸುಮಾರು {{count}} ವರ್ಷಗಳು',\n      future: 'ಸುಮಾರು {{count}} ವರ್ಷಗಳಲ್ಲಿ',\n      past: 'ಸುಮಾರು {{count}} ವರ್ಷಗಳ ಹಿಂದೆ'\n    }\n  },\n  xYears: {\n    one: {\n      default: '1 ವರ್ಷ',\n      future: '1 ವರ್ಷದಲ್ಲಿ',\n      past: '1 ವರ್ಷದ ಹಿಂದೆ'\n    },\n    other: {\n      default: '{{count}} ವರ್ಷಗಳು',\n      future: '{{count}} ವರ್ಷಗಳಲ್ಲಿ',\n      past: '{{count}} ವರ್ಷಗಳ ಹಿಂದೆ'\n    }\n  },\n  overXYears: {\n    one: {\n      default: '1 ವರ್ಷದ ಮೇಲೆ',\n      future: '1 ವರ್ಷದ ಮೇಲೆ',\n      past: '1 ವರ್ಷದ ಮೇಲೆ'\n    },\n    other: {\n      default: '{{count}} ವರ್ಷಗಳ ಮೇಲೆ',\n      future: '{{count}} ವರ್ಷಗಳ ಮೇಲೆ',\n      past: '{{count}} ವರ್ಷಗಳ ಮೇಲೆ'\n    }\n  },\n  almostXYears: {\n    one: {\n      default: 'ಬಹುತೇಕ 1 ವರ್ಷದಲ್ಲಿ',\n      future: 'ಬಹುತೇಕ 1 ವರ್ಷದಲ್ಲಿ',\n      past: 'ಬಹುತೇಕ 1 ವರ್ಷದಲ್ಲಿ'\n    },\n    other: {\n      default: 'ಬಹುತೇಕ {{count}} ವರ್ಷಗಳಲ್ಲಿ',\n      future: 'ಬಹುತೇಕ {{count}} ವರ್ಷಗಳಲ್ಲಿ',\n      past: 'ಬಹುತೇಕ {{count}} ವರ್ಷಗಳಲ್ಲಿ'\n    }\n  }\n};\nfunction getResultByTense(parentToken, options) {\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return parentToken.future;\n    } else {\n      return parentToken.past;\n    }\n  }\n  return parentToken.default;\n}\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (tokenValue.one && count === 1) {\n    result = getResultByTense(tokenValue.one, options);\n  } else {\n    result = getResultByTense(tokenValue.other, options);\n  }\n  return result.replace('{{count}}', String(count));\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\"; // Reference: https://www.unicode.org/cldr/charts/32/summary/kn.html\nvar dateFormats = {\n  full: 'EEEE, MMMM d, y',\n  // CLDR 1816\n  long: 'MMMM d, y',\n  // CLDR 1817\n  medium: 'MMM d, y',\n  // CLDR 1818\n  short: 'd/M/yy' // CLDR 1819\n};\n\nvar timeFormats = {\n  full: 'hh:mm:ss a zzzz',\n  // CLDR 1820\n  long: 'hh:mm:ss a z',\n  // CLDR 1821\n  medium: 'hh:mm:ss a',\n  // CLDR 1822\n  short: 'hh:mm a' // CLDR 1823\n};\n\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  // CLDR 1824\n  long: '{{date}} {{time}}',\n  // CLDR 1825\n  medium: '{{date}} {{time}}',\n  // CLDR 1826\n  short: '{{date}} {{time}}' // CLDR 1827\n};\n\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'ಕಳೆದ' eeee p 'ಕ್ಕೆ'\",\n  yesterday: \"'ನಿನ್ನೆ' p 'ಕ್ಕೆ'\",\n  today: \"'ಇಂದು' p 'ಕ್ಕೆ'\",\n  tomorrow: \"'ನಾಳೆ' p 'ಕ್ಕೆ'\",\n  nextWeek: \"eeee p 'ಕ್ಕೆ'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Kannada locale (India).\n * @language Kannada\n * @iso-639-2 kan\n * @author Manjunatha Gouli [@developergouli]{@link https://github.com/developergouli}\n */\nvar locale = {\n  code: 'kn',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // Reference: https://www.unicode.org/cldr/charts/32/summary/kn.html\nvar eraValues = {\n  narrow: ['ಕ್ರಿ.ಪೂ', 'ಕ್ರಿ.ಶ'],\n  abbreviated: ['ಕ್ರಿ.ಪೂ', 'ಕ್ರಿ.ಶ'],\n  // CLDR #1618, #1620\n  wide: ['ಕ್ರಿಸ್ತ ಪೂರ್ವ', 'ಕ್ರಿಸ್ತ ಶಕ'] // CLDR #1614, #1616\n};\n\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['ತ್ರೈ 1', 'ತ್ರೈ 2', 'ತ್ರೈ 3', 'ತ್ರೈ 4'],\n  // CLDR #1630 - #1638\n  wide: ['1ನೇ ತ್ರೈಮಾಸಿಕ', '2ನೇ ತ್ರೈಮಾಸಿಕ', '3ನೇ ತ್ರೈಮಾಸಿಕ', '4ನೇ ತ್ರೈಮಾಸಿಕ'] // CLDR #1622 - #1629\n};\n\n// CLDR #1646 - #1717\nvar monthValues = {\n  narrow: ['ಜ', 'ಫೆ', 'ಮಾ', 'ಏ', 'ಮೇ', 'ಜೂ', 'ಜು', 'ಆ', 'ಸೆ', 'ಅ', 'ನ', 'ಡಿ'],\n  abbreviated: ['ಜನ', 'ಫೆಬ್ರ', 'ಮಾರ್ಚ್', 'ಏಪ್ರಿ', 'ಮೇ', 'ಜೂನ್', 'ಜುಲೈ', 'ಆಗ', 'ಸೆಪ್ಟೆಂ', 'ಅಕ್ಟೋ', 'ನವೆಂ', 'ಡಿಸೆಂ'],\n  wide: ['ಜನವರಿ', 'ಫೆಬ್ರವರಿ', 'ಮಾರ್ಚ್', 'ಏಪ್ರಿಲ್', 'ಮೇ', 'ಜೂನ್', 'ಜುಲೈ', 'ಆಗಸ್ಟ್', 'ಸೆಪ್ಟೆಂಬರ್', 'ಅಕ್ಟೋಬರ್', 'ನವೆಂಬರ್', 'ಡಿಸೆಂಬರ್']\n};\n\n// CLDR #1718 - #1773\nvar dayValues = {\n  narrow: ['ಭಾ', 'ಸೋ', 'ಮಂ', 'ಬು', 'ಗು', 'ಶು', 'ಶ'],\n  short: ['ಭಾನು', 'ಸೋಮ', 'ಮಂಗಳ', 'ಬುಧ', 'ಗುರು', 'ಶುಕ್ರ', 'ಶನಿ'],\n  abbreviated: ['ಭಾನು', 'ಸೋಮ', 'ಮಂಗಳ', 'ಬುಧ', 'ಗುರು', 'ಶುಕ್ರ', 'ಶನಿ'],\n  wide: ['ಭಾನುವಾರ', 'ಸೋಮವಾರ', 'ಮಂಗಳವಾರ', 'ಬುಧವಾರ', 'ಗುರುವಾರ', 'ಶುಕ್ರವಾರ', 'ಶನಿವಾರ']\n};\n\n// CLDR #1774 - #1815\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ಪೂರ್ವಾಹ್ನ',\n    pm: 'ಅಪರಾಹ್ನ',\n    midnight: 'ಮಧ್ಯರಾತ್ರಿ',\n    noon: 'ಮಧ್ಯಾಹ್ನ',\n    morning: 'ಬೆಳಗ್ಗೆ',\n    afternoon: 'ಮಧ್ಯಾಹ್ನ',\n    evening: 'ಸಂಜೆ',\n    night: 'ರಾತ್ರಿ'\n  },\n  abbreviated: {\n    am: 'ಪೂರ್ವಾಹ್ನ',\n    pm: 'ಅಪರಾಹ್ನ',\n    midnight: 'ಮಧ್ಯರಾತ್ರಿ',\n    noon: 'ಮಧ್ಯಾನ್ಹ',\n    morning: 'ಬೆಳಗ್ಗೆ',\n    afternoon: 'ಮಧ್ಯಾನ್ಹ',\n    evening: 'ಸಂಜೆ',\n    night: 'ರಾತ್ರಿ'\n  },\n  wide: {\n    am: 'ಪೂರ್ವಾಹ್ನ',\n    pm: 'ಅಪರಾಹ್ನ',\n    midnight: 'ಮಧ್ಯರಾತ್ರಿ',\n    noon: 'ಮಧ್ಯಾನ್ಹ',\n    morning: 'ಬೆಳಗ್ಗೆ',\n    afternoon: 'ಮಧ್ಯಾನ್ಹ',\n    evening: 'ಸಂಜೆ',\n    night: 'ರಾತ್ರಿ'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ಪೂ',\n    pm: 'ಅ',\n    midnight: 'ಮಧ್ಯರಾತ್ರಿ',\n    noon: 'ಮಧ್ಯಾನ್ಹ',\n    morning: 'ಬೆಳಗ್ಗೆ',\n    afternoon: 'ಮಧ್ಯಾನ್ಹ',\n    evening: 'ಸಂಜೆ',\n    night: 'ರಾತ್ರಿ'\n  },\n  abbreviated: {\n    am: 'ಪೂರ್ವಾಹ್ನ',\n    pm: 'ಅಪರಾಹ್ನ',\n    midnight: 'ಮಧ್ಯ ರಾತ್ರಿ',\n    noon: 'ಮಧ್ಯಾನ್ಹ',\n    morning: 'ಬೆಳಗ್ಗೆ',\n    afternoon: 'ಮಧ್ಯಾನ್ಹ',\n    evening: 'ಸಂಜೆ',\n    night: 'ರಾತ್ರಿ'\n  },\n  wide: {\n    am: 'ಪೂರ್ವಾಹ್ನ',\n    pm: 'ಅಪರಾಹ್ನ',\n    midnight: 'ಮಧ್ಯ ರಾತ್ರಿ',\n    noon: 'ಮಧ್ಯಾನ್ಹ',\n    morning: 'ಬೆಳಗ್ಗೆ',\n    afternoon: 'ಮಧ್ಯಾನ್ಹ',\n    evening: 'ಸಂಜೆ',\n    night: 'ರಾತ್ರಿ'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'ನೇ';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(ನೇ|ನೆ)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ಕ್ರಿ.ಪೂ|ಕ್ರಿ.ಶ)/i,\n  abbreviated: /^(ಕ್ರಿ\\.?\\s?ಪೂ\\.?|ಕ್ರಿ\\.?\\s?ಶ\\.?|ಪ್ರ\\.?\\s?ಶ\\.?)/i,\n  wide: /^(ಕ್ರಿಸ್ತ ಪೂರ್ವ|ಕ್ರಿಸ್ತ ಶಕ|ಪ್ರಸಕ್ತ ಶಕ)/i\n};\nvar parseEraPatterns = {\n  any: [/^ಪೂ/i, /^(ಶ|ಪ್ರ)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^ತ್ರೈ[1234]|ತ್ರೈ [1234]| [1234]ತ್ರೈ/i,\n  wide: /^[1234](ನೇ)? ತ್ರೈಮಾಸಿಕ/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(ಜೂ|ಜು|ಜ|ಫೆ|ಮಾ|ಏ|ಮೇ|ಆ|ಸೆ|ಅ|ನ|ಡಿ)/i,\n  abbreviated: /^(ಜನ|ಫೆಬ್ರ|ಮಾರ್ಚ್|ಏಪ್ರಿ|ಮೇ|ಜೂನ್|ಜುಲೈ|ಆಗ|ಸೆಪ್ಟೆಂ|ಅಕ್ಟೋ|ನವೆಂ|ಡಿಸೆಂ)/i,\n  wide: /^(ಜನವರಿ|ಫೆಬ್ರವರಿ|ಮಾರ್ಚ್|ಏಪ್ರಿಲ್|ಮೇ|ಜೂನ್|ಜುಲೈ|ಆಗಸ್ಟ್|ಸೆಪ್ಟೆಂಬರ್|ಅಕ್ಟೋಬರ್|ನವೆಂಬರ್|ಡಿಸೆಂಬರ್)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ಜ$/i, /^ಫೆ/i, /^ಮಾ/i, /^ಏ/i, /^ಮೇ/i, /^ಜೂ/i, /^ಜು$/i, /^ಆ/i, /^ಸೆ/i, /^ಅ/i, /^ನ/i, /^ಡಿ/i],\n  any: [/^ಜನ/i, /^ಫೆ/i, /^ಮಾ/i, /^ಏ/i, /^ಮೇ/i, /^ಜೂನ್/i, /^ಜುಲೈ/i, /^ಆ/i, /^ಸೆ/i, /^ಅ/i, /^ನ/i, /^ಡಿ/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(ಭಾ|ಸೋ|ಮ|ಬು|ಗು|ಶು|ಶ)/i,\n  short: /^(ಭಾನು|ಸೋಮ|ಮಂಗಳ|ಬುಧ|ಗುರು|ಶುಕ್ರ|ಶನಿ)/i,\n  abbreviated: /^(ಭಾನು|ಸೋಮ|ಮಂಗಳ|ಬುಧ|ಗುರು|ಶುಕ್ರ|ಶನಿ)/i,\n  wide: /^(ಭಾನುವಾರ|ಸೋಮವಾರ|ಮಂಗಳವಾರ|ಬುಧವಾರ|ಗುರುವಾರ|ಶುಕ್ರವಾರ|ಶನಿವಾರ)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ಭಾ/i, /^ಸೋ/i, /^ಮ/i, /^ಬು/i, /^ಗು/i, /^ಶು/i, /^ಶ/i],\n  any: [/^ಭಾ/i, /^ಸೋ/i, /^ಮ/i, /^ಬು/i, /^ಗು/i, /^ಶು/i, /^ಶ/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ಪೂ|ಅ|ಮಧ್ಯರಾತ್ರಿ|ಮಧ್ಯಾನ್ಹ|ಬೆಳಗ್ಗೆ|ಸಂಜೆ|ರಾತ್ರಿ)/i,\n  any: /^(ಪೂರ್ವಾಹ್ನ|ಅಪರಾಹ್ನ|ಮಧ್ಯರಾತ್ರಿ|ಮಧ್ಯಾನ್ಹ|ಬೆಳಗ್ಗೆ|ಸಂಜೆ|ರಾತ್ರಿ)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ಪೂ/i,\n    pm: /^ಅ/i,\n    midnight: /ಮಧ್ಯರಾತ್ರಿ/i,\n    noon: /ಮಧ್ಯಾನ್ಹ/i,\n    morning: /ಬೆಳಗ್ಗೆ/i,\n    afternoon: /ಮಧ್ಯಾನ್ಹ/i,\n    evening: /ಸಂಜೆ/i,\n    night: /ರಾತ್ರಿ/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '1초 미만',\n    other: '{{count}}초 미만'\n  },\n  xSeconds: {\n    one: '1초',\n    other: '{{count}}초'\n  },\n  halfAMinute: '30초',\n  lessThanXMinutes: {\n    one: '1분 미만',\n    other: '{{count}}분 미만'\n  },\n  xMinutes: {\n    one: '1분',\n    other: '{{count}}분'\n  },\n  aboutXHours: {\n    one: '약 1시간',\n    other: '약 {{count}}시간'\n  },\n  xHours: {\n    one: '1시간',\n    other: '{{count}}시간'\n  },\n  xDays: {\n    one: '1일',\n    other: '{{count}}일'\n  },\n  aboutXWeeks: {\n    one: '약 1주',\n    other: '약 {{count}}주'\n  },\n  xWeeks: {\n    one: '1주',\n    other: '{{count}}주'\n  },\n  aboutXMonths: {\n    one: '약 1개월',\n    other: '약 {{count}}개월'\n  },\n  xMonths: {\n    one: '1개월',\n    other: '{{count}}개월'\n  },\n  aboutXYears: {\n    one: '약 1년',\n    other: '약 {{count}}년'\n  },\n  xYears: {\n    one: '1년',\n    other: '{{count}}년'\n  },\n  overXYears: {\n    one: '1년 이상',\n    other: '{{count}}년 이상'\n  },\n  almostXYears: {\n    one: '거의 1년',\n    other: '거의 {{count}}년'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' 후';\n    } else {\n      return result + ' 전';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'y년 M월 d일 EEEE',\n  long: 'y년 M월 d일',\n  medium: 'y.MM.dd',\n  short: 'y.MM.dd'\n};\nvar timeFormats = {\n  full: 'a H시 mm분 ss초 zzzz',\n  long: 'a H:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'지난' eeee p\",\n  yesterday: \"'어제' p\",\n  today: \"'오늘' p\",\n  tomorrow: \"'내일' p\",\n  nextWeek: \"'다음' eeee p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Korean locale.\n * @language Korean\n * @iso-639-2 kor\n * @author Hong Chulju [@angdev]{@link https://github.com/angdev}\n * @author Lee Seoyoen [@iamssen]{@link https://github.com/iamssen}\n * @author Taiki IKeda [@so99ynoodles]{@link https://github.com/so99ynoodles}\n */\nvar locale = {\n  code: 'ko',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['BC', 'AD'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['기원전', '서기']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1분기', '2분기', '3분기', '4분기']\n};\nvar monthValues = {\n  narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  abbreviated: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\n  wide: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']\n};\nvar dayValues = {\n  narrow: ['일', '월', '화', '수', '목', '금', '토'],\n  short: ['일', '월', '화', '수', '목', '금', '토'],\n  abbreviated: ['일', '월', '화', '수', '목', '금', '토'],\n  wide: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: '오전',\n    pm: '오후',\n    midnight: '자정',\n    noon: '정오',\n    morning: '아침',\n    afternoon: '오후',\n    evening: '저녁',\n    night: '밤'\n  },\n  abbreviated: {\n    am: '오전',\n    pm: '오후',\n    midnight: '자정',\n    noon: '정오',\n    morning: '아침',\n    afternoon: '오후',\n    evening: '저녁',\n    night: '밤'\n  },\n  wide: {\n    am: '오전',\n    pm: '오후',\n    midnight: '자정',\n    noon: '정오',\n    morning: '아침',\n    afternoon: '오후',\n    evening: '저녁',\n    night: '밤'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: '오전',\n    pm: '오후',\n    midnight: '자정',\n    noon: '정오',\n    morning: '아침',\n    afternoon: '오후',\n    evening: '저녁',\n    night: '밤'\n  },\n  abbreviated: {\n    am: '오전',\n    pm: '오후',\n    midnight: '자정',\n    noon: '정오',\n    morning: '아침',\n    afternoon: '오후',\n    evening: '저녁',\n    night: '밤'\n  },\n  wide: {\n    am: '오전',\n    pm: '오후',\n    midnight: '자정',\n    noon: '정오',\n    morning: '아침',\n    afternoon: '오후',\n    evening: '저녁',\n    night: '밤'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  switch (unit) {\n    case 'minute':\n    case 'second':\n      return String(number);\n    case 'date':\n      return number + '일';\n    default:\n      return number + '번째';\n  }\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(일|번째)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(기원전|서기)/i\n};\nvar parseEraPatterns = {\n  any: [/^(bc|기원전)/i, /^(ad|서기)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234]사?분기/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(1[012]|[123456789])/,\n  abbreviated: /^(1[012]|[123456789])월/i,\n  wide: /^(1[012]|[123456789])월/i\n};\nvar parseMonthPatterns = {\n  any: [/^1월?$/, /^2/, /^3/, /^4/, /^5/, /^6/, /^7/, /^8/, /^9/, /^10/, /^11/, /^12/]\n};\nvar matchDayPatterns = {\n  narrow: /^[일월화수목금토]/,\n  short: /^[일월화수목금토]/,\n  abbreviated: /^[일월화수목금토]/,\n  wide: /^[일월화수목금토]요일/\n};\nvar parseDayPatterns = {\n  any: [/^일/, /^월/, /^화/, /^수/, /^목/, /^금/, /^토/]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^(am|오전)/i,\n    pm: /^(pm|오후)/i,\n    midnight: /^자정/i,\n    noon: /^정오/i,\n    morning: /^아침/i,\n    afternoon: /^오후/i,\n    evening: /^저녁/i,\n    night: /^밤/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    standalone: {\n      one: 'manner wéi eng Sekonn',\n      other: 'manner wéi {{count}} Sekonnen'\n    },\n    withPreposition: {\n      one: 'manner wéi enger Sekonn',\n      other: 'manner wéi {{count}} Sekonnen'\n    }\n  },\n  xSeconds: {\n    standalone: {\n      one: 'eng Sekonn',\n      other: '{{count}} Sekonnen'\n    },\n    withPreposition: {\n      one: 'enger Sekonn',\n      other: '{{count}} Sekonnen'\n    }\n  },\n  halfAMinute: {\n    standalone: 'eng hallef Minutt',\n    withPreposition: 'enger hallwer Minutt'\n  },\n  lessThanXMinutes: {\n    standalone: {\n      one: 'manner wéi eng Minutt',\n      other: 'manner wéi {{count}} Minutten'\n    },\n    withPreposition: {\n      one: 'manner wéi enger Minutt',\n      other: 'manner wéi {{count}} Minutten'\n    }\n  },\n  xMinutes: {\n    standalone: {\n      one: 'eng Minutt',\n      other: '{{count}} Minutten'\n    },\n    withPreposition: {\n      one: 'enger Minutt',\n      other: '{{count}} Minutten'\n    }\n  },\n  aboutXHours: {\n    standalone: {\n      one: 'ongeféier eng Stonn',\n      other: 'ongeféier {{count}} Stonnen'\n    },\n    withPreposition: {\n      one: 'ongeféier enger Stonn',\n      other: 'ongeféier {{count}} Stonnen'\n    }\n  },\n  xHours: {\n    standalone: {\n      one: 'eng Stonn',\n      other: '{{count}} Stonnen'\n    },\n    withPreposition: {\n      one: 'enger Stonn',\n      other: '{{count}} Stonnen'\n    }\n  },\n  xDays: {\n    standalone: {\n      one: 'een Dag',\n      other: '{{count}} Deeg'\n    },\n    withPreposition: {\n      one: 'engem Dag',\n      other: '{{count}} Deeg'\n    }\n  },\n  aboutXWeeks: {\n    standalone: {\n      one: 'ongeféier eng Woch',\n      other: 'ongeféier {{count}} Wochen'\n    },\n    withPreposition: {\n      one: 'ongeféier enger Woche',\n      other: 'ongeféier {{count}} Wochen'\n    }\n  },\n  xWeeks: {\n    standalone: {\n      one: 'eng Woch',\n      other: '{{count}} Wochen'\n    },\n    withPreposition: {\n      one: 'enger Woch',\n      other: '{{count}} Wochen'\n    }\n  },\n  aboutXMonths: {\n    standalone: {\n      one: 'ongeféier ee Mount',\n      other: 'ongeféier {{count}} Méint'\n    },\n    withPreposition: {\n      one: 'ongeféier engem Mount',\n      other: 'ongeféier {{count}} Méint'\n    }\n  },\n  xMonths: {\n    standalone: {\n      one: 'ee Mount',\n      other: '{{count}} Méint'\n    },\n    withPreposition: {\n      one: 'engem Mount',\n      other: '{{count}} Méint'\n    }\n  },\n  aboutXYears: {\n    standalone: {\n      one: 'ongeféier ee Joer',\n      other: 'ongeféier {{count}} Joer'\n    },\n    withPreposition: {\n      one: 'ongeféier engem Joer',\n      other: 'ongeféier {{count}} Joer'\n    }\n  },\n  xYears: {\n    standalone: {\n      one: 'ee Joer',\n      other: '{{count}} Joer'\n    },\n    withPreposition: {\n      one: 'engem Joer',\n      other: '{{count}} Joer'\n    }\n  },\n  overXYears: {\n    standalone: {\n      one: 'méi wéi ee Joer',\n      other: 'méi wéi {{count}} Joer'\n    },\n    withPreposition: {\n      one: 'méi wéi engem Joer',\n      other: 'méi wéi {{count}} Joer'\n    }\n  },\n  almostXYears: {\n    standalone: {\n      one: 'bal ee Joer',\n      other: 'bal {{count}} Joer'\n    },\n    withPreposition: {\n      one: 'bal engem Joer',\n      other: 'bal {{count}} Joer'\n    }\n  }\n};\nvar EXCEPTION_CONSONANTS = ['d', 'h', 'n', 't', 'z'];\nvar VOWELS = ['a,', 'e', 'i', 'o', 'u'];\nvar DIGITS_SPOKEN_N_NEEDED = [0, 1, 2, 3, 8, 9];\nvar FIRST_TWO_DIGITS_SPOKEN_NO_N_NEEDED = [40, 50, 60, 70];\n\n// Eifeler Regel\nfunction isFinalNNeeded(nextWords) {\n  var firstLetter = nextWords.charAt(0).toLowerCase();\n  if (VOWELS.indexOf(firstLetter) != -1 || EXCEPTION_CONSONANTS.indexOf(firstLetter) != -1) {\n    return true;\n  }\n\n  // Numbers would need to converted into words for checking.\n  // Therefore, I have listed the digits that require a preceeding n with a few exceptions.\n  var firstWord = nextWords.split(' ')[0];\n  var number = parseInt(firstWord);\n  if (!isNaN(number) && DIGITS_SPOKEN_N_NEEDED.indexOf(number % 10) != -1 && FIRST_TWO_DIGITS_SPOKEN_NO_N_NEEDED.indexOf(parseInt(firstWord.substring(0, 2))) == -1) {\n    return true;\n  }\n\n  // Omit other checks as they are not expected here.\n  return false;\n}\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  var usageGroup = options !== null && options !== void 0 && options.addSuffix ? tokenValue.withPreposition : tokenValue.standalone;\n  if (typeof usageGroup === 'string') {\n    result = usageGroup;\n  } else if (count === 1) {\n    result = usageGroup.one;\n  } else {\n    result = usageGroup.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'a' + (isFinalNNeeded(result) ? 'n' : '') + ' ' + result;\n    } else {\n      return 'viru' + (isFinalNNeeded(result) ? 'n' : '') + ' ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\"; // DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n  full: 'EEEE, do MMMM y',\n  // Méindeg, 7. Januar 2018\n  long: 'do MMMM y',\n  // 7. Januar 2018\n  medium: 'do MMM y',\n  // 7. Jan 2018\n  short: 'dd.MM.yy' // 07.01.18\n};\n\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'um' {{time}}\",\n  long: \"{{date}} 'um' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    var day = date.getUTCDay();\n    var result = \"'läschte\";\n    if (day === 2 || day === 4) {\n      // Eifeler Regel: Add an n before the consonant d; Here \"Dënschdeg\" \"and Donneschde\".\n      result += 'n';\n    }\n    result += \"' eeee 'um' p\";\n    return result;\n  },\n  yesterday: \"'gëschter um' p\",\n  today: \"'haut um' p\",\n  tomorrow: \"'moien um' p\",\n  nextWeek: \"eeee 'um' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Luxembourgish locale.\n * @language Luxembourgish\n * @iso-639-2 ltz\n * @author Daniel Waxweiler [@dwaxweiler]{@link https://github.com/dwaxweiler}\n */\nvar locale = {\n  code: 'lb',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['v.Chr.', 'n.Chr.'],\n  abbreviated: ['v.Chr.', 'n.Chr.'],\n  wide: ['viru Christus', 'no Christus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n  wide: ['Januar', 'Februar', 'Mäerz', 'Abrëll', 'Mee', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n  short: ['So', 'Mé', 'Dë', 'Më', 'Do', 'Fr', 'Sa'],\n  abbreviated: ['So.', 'Mé.', 'Dë.', 'Më.', 'Do.', 'Fr.', 'Sa.'],\n  wide: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'mo.',\n    pm: 'nomë.',\n    midnight: 'Mëtternuecht',\n    noon: 'Mëtteg',\n    morning: 'Moien',\n    afternoon: 'Nomëtteg',\n    evening: 'Owend',\n    night: 'Nuecht'\n  },\n  abbreviated: {\n    am: 'moies',\n    pm: 'nomëttes',\n    midnight: 'Mëtternuecht',\n    noon: 'Mëtteg',\n    morning: 'Moien',\n    afternoon: 'Nomëtteg',\n    evening: 'Owend',\n    night: 'Nuecht'\n  },\n  wide: {\n    am: 'moies',\n    pm: 'nomëttes',\n    midnight: 'Mëtternuecht',\n    noon: 'Mëtteg',\n    morning: 'Moien',\n    afternoon: 'Nomëtteg',\n    evening: 'Owend',\n    night: 'Nuecht'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'mo.',\n    pm: 'nom.',\n    midnight: 'Mëtternuecht',\n    noon: 'mëttes',\n    morning: 'moies',\n    afternoon: 'nomëttes',\n    evening: 'owes',\n    night: 'nuets'\n  },\n  abbreviated: {\n    am: 'moies',\n    pm: 'nomëttes',\n    midnight: 'Mëtternuecht',\n    noon: 'mëttes',\n    morning: 'moies',\n    afternoon: 'nomëttes',\n    evening: 'owes',\n    night: 'nuets'\n  },\n  wide: {\n    am: 'moies',\n    pm: 'nomëttes',\n    midnight: 'Mëtternuecht',\n    noon: 'mëttes',\n    morning: 'moies',\n    afternoon: 'nomëttes',\n    evening: 'owes',\n    night: 'nuets'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n  abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n  wide: /^(viru Christus|virun eiser Zäitrechnung|no Christus|eiser Zäitrechnung)/i\n};\nvar parseEraPatterns = {\n  any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mäe|abr|mee|jun|jul|aug|sep|okt|nov|dez)/i,\n  wide: /^(januar|februar|mäerz|abrëll|mee|juni|juli|august|september|oktober|november|dezember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mä/i, /^ab/i, /^me/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smdf]/i,\n  short: /^(so|mé|dë|më|do|fr|sa)/i,\n  abbreviated: /^(son?|méi?|dën?|mët?|don?|fre?|sam?)\\.?/i,\n  wide: /^(sonndeg|méindeg|dënschdeg|mëttwoch|donneschdeg|freideg|samschdeg)/i\n};\nvar parseDayPatterns = {\n  any: [/^so/i, /^mé/i, /^dë/i, /^më/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(mo\\.?|nomë\\.?|Mëtternuecht|mëttes|moies|nomëttes|owes|nuets)/i,\n  abbreviated: /^(moi\\.?|nomët\\.?|Mëtternuecht|mëttes|moies|nomëttes|owes|nuets)/i,\n  wide: /^(moies|nomëttes|Mëtternuecht|mëttes|moies|nomëttes|owes|nuets)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^m/i,\n    pm: /^n/i,\n    midnight: /^Mëtter/i,\n    noon: /^mëttes/i,\n    morning: /moies/i,\n    afternoon: /nomëttes/i,\n    // will never be matched. Afternoon is matched by `pm`\n    evening: /owes/i,\n    night: /nuets/i // will never be matched. Night is matched by `pm`\n  }\n};\n\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var translations = {\n  xseconds_other: 'sekundė_sekundžių_sekundes',\n  xminutes_one: 'minutė_minutės_minutę',\n  xminutes_other: 'minutės_minučių_minutes',\n  xhours_one: 'valanda_valandos_valandą',\n  xhours_other: 'valandos_valandų_valandas',\n  xdays_one: 'diena_dienos_dieną',\n  xdays_other: 'dienos_dienų_dienas',\n  xweeks_one: 'savaitė_savaitės_savaitę',\n  xweeks_other: 'savaitės_savaičių_savaites',\n  xmonths_one: 'mėnuo_mėnesio_mėnesį',\n  xmonths_other: 'mėnesiai_mėnesių_mėnesius',\n  xyears_one: 'metai_metų_metus',\n  xyears_other: 'metai_metų_metus',\n  about: 'apie',\n  over: 'daugiau nei',\n  almost: 'beveik',\n  lessthan: 'mažiau nei'\n};\nvar translateSeconds = function translateSeconds(_number, addSuffix, _key, isFuture) {\n  if (!addSuffix) {\n    return 'kelios sekundės';\n  } else {\n    return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n  }\n};\nvar translateSingular = function translateSingular(_number, addSuffix, key, isFuture) {\n  return !addSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2];\n};\nvar translate = function translate(number, addSuffix, key, isFuture) {\n  var result = number + ' ';\n  if (number === 1) {\n    return result + translateSingular(number, addSuffix, key, isFuture);\n  } else if (!addSuffix) {\n    return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n  } else {\n    if (isFuture) {\n      return result + forms(key)[1];\n    } else {\n      return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n    }\n  }\n};\nfunction special(number) {\n  return number % 10 === 0 || number > 10 && number < 20;\n}\nfunction forms(key) {\n  return translations[key].split('_');\n}\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: translateSeconds,\n    other: translate\n  },\n  xSeconds: {\n    one: translateSeconds,\n    other: translate\n  },\n  halfAMinute: 'pusė minutės',\n  lessThanXMinutes: {\n    one: translateSingular,\n    other: translate\n  },\n  xMinutes: {\n    one: translateSingular,\n    other: translate\n  },\n  aboutXHours: {\n    one: translateSingular,\n    other: translate\n  },\n  xHours: {\n    one: translateSingular,\n    other: translate\n  },\n  xDays: {\n    one: translateSingular,\n    other: translate\n  },\n  aboutXWeeks: {\n    one: translateSingular,\n    other: translate\n  },\n  xWeeks: {\n    one: translateSingular,\n    other: translate\n  },\n  aboutXMonths: {\n    one: translateSingular,\n    other: translate\n  },\n  xMonths: {\n    one: translateSingular,\n    other: translate\n  },\n  aboutXYears: {\n    one: translateSingular,\n    other: translate\n  },\n  xYears: {\n    one: translateSingular,\n    other: translate\n  },\n  overXYears: {\n    one: translateSingular,\n    other: translate\n  },\n  almostXYears: {\n    one: translateSingular,\n    other: translate\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var adverb = token.match(/about|over|almost|lessthan/i);\n  var unit = adverb ? token.replace(adverb[0], '') : token;\n  var isFuture = (options === null || options === void 0 ? void 0 : options.comparison) !== undefined && options.comparison > 0;\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one(count, (options === null || options === void 0 ? void 0 : options.addSuffix) === true, unit.toLowerCase() + '_one', isFuture);\n  } else {\n    result = tokenValue.other(count, (options === null || options === void 0 ? void 0 : options.addSuffix) === true, unit.toLowerCase() + '_other', isFuture);\n  }\n  if (adverb) {\n    var _key2 = adverb[0].toLowerCase();\n    result = translations[_key2] + ' ' + result;\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'po ' + result;\n    } else {\n      return 'prieš ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"y 'm'. MMMM d 'd'., EEEE\",\n  long: \"y 'm'. MMMM d 'd'.\",\n  medium: 'y-MM-dd',\n  short: 'y-MM-dd'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'Praėjusį' eeee p\",\n  yesterday: \"'Vakar' p\",\n  today: \"'Šiandien' p\",\n  tomorrow: \"'Rytoj' p\",\n  nextWeek: 'eeee p',\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Lithuanian locale.\n * @language Lithuanian\n * @iso-639-2 lit\n * @author Pavlo Shpak [@pshpak]{@link https://github.com/pshpak}\n * @author Eduardo Pardo [@eduardopsll]{@link https://github.com/eduardopsll}\n */\nvar locale = {\n  code: 'lt',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['pr. Kr.', 'po Kr.'],\n  abbreviated: ['pr. Kr.', 'po Kr.'],\n  wide: ['prieš Kristų', 'po Kristaus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['I ketv.', 'II ketv.', 'III ketv.', 'IV ketv.'],\n  wide: ['I ketvirtis', 'II ketvirtis', 'III ketvirtis', 'IV ketvirtis']\n};\nvar formattingQuarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['I k.', 'II k.', 'III k.', 'IV k.'],\n  wide: ['I ketvirtis', 'II ketvirtis', 'III ketvirtis', 'IV ketvirtis']\n};\nvar monthValues = {\n  narrow: ['S', 'V', 'K', 'B', 'G', 'B', 'L', 'R', 'R', 'S', 'L', 'G'],\n  abbreviated: ['saus.', 'vas.', 'kov.', 'bal.', 'geg.', 'birž.', 'liep.', 'rugp.', 'rugs.', 'spal.', 'lapkr.', 'gruod.'],\n  wide: ['sausis', 'vasaris', 'kovas', 'balandis', 'gegužė', 'birželis', 'liepa', 'rugpjūtis', 'rugsėjis', 'spalis', 'lapkritis', 'gruodis']\n};\nvar formattingMonthValues = {\n  narrow: ['S', 'V', 'K', 'B', 'G', 'B', 'L', 'R', 'R', 'S', 'L', 'G'],\n  abbreviated: ['saus.', 'vas.', 'kov.', 'bal.', 'geg.', 'birž.', 'liep.', 'rugp.', 'rugs.', 'spal.', 'lapkr.', 'gruod.'],\n  wide: ['sausio', 'vasario', 'kovo', 'balandžio', 'gegužės', 'birželio', 'liepos', 'rugpjūčio', 'rugsėjo', 'spalio', 'lapkričio', 'gruodžio']\n};\nvar dayValues = {\n  narrow: ['S', 'P', 'A', 'T', 'K', 'P', 'Š'],\n  short: ['Sk', 'Pr', 'An', 'Tr', 'Kt', 'Pn', 'Št'],\n  abbreviated: ['sk', 'pr', 'an', 'tr', 'kt', 'pn', 'št'],\n  wide: ['sekmadienis', 'pirmadienis', 'antradienis', 'trečiadienis', 'ketvirtadienis', 'penktadienis', 'šeštadienis']\n};\nvar formattingDayValues = {\n  narrow: ['S', 'P', 'A', 'T', 'K', 'P', 'Š'],\n  short: ['Sk', 'Pr', 'An', 'Tr', 'Kt', 'Pn', 'Št'],\n  abbreviated: ['sk', 'pr', 'an', 'tr', 'kt', 'pn', 'št'],\n  wide: ['sekmadienį', 'pirmadienį', 'antradienį', 'trečiadienį', 'ketvirtadienį', 'penktadienį', 'šeštadienį']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'pr. p.',\n    pm: 'pop.',\n    midnight: 'vidurnaktis',\n    noon: 'vidurdienis',\n    morning: 'rytas',\n    afternoon: 'diena',\n    evening: 'vakaras',\n    night: 'naktis'\n  },\n  abbreviated: {\n    am: 'priešpiet',\n    pm: 'popiet',\n    midnight: 'vidurnaktis',\n    noon: 'vidurdienis',\n    morning: 'rytas',\n    afternoon: 'diena',\n    evening: 'vakaras',\n    night: 'naktis'\n  },\n  wide: {\n    am: 'priešpiet',\n    pm: 'popiet',\n    midnight: 'vidurnaktis',\n    noon: 'vidurdienis',\n    morning: 'rytas',\n    afternoon: 'diena',\n    evening: 'vakaras',\n    night: 'naktis'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'pr. p.',\n    pm: 'pop.',\n    midnight: 'vidurnaktis',\n    noon: 'perpiet',\n    morning: 'rytas',\n    afternoon: 'popietė',\n    evening: 'vakaras',\n    night: 'naktis'\n  },\n  abbreviated: {\n    am: 'priešpiet',\n    pm: 'popiet',\n    midnight: 'vidurnaktis',\n    noon: 'perpiet',\n    morning: 'rytas',\n    afternoon: 'popietė',\n    evening: 'vakaras',\n    night: 'naktis'\n  },\n  wide: {\n    am: 'priešpiet',\n    pm: 'popiet',\n    midnight: 'vidurnaktis',\n    noon: 'perpiet',\n    morning: 'rytas',\n    afternoon: 'popietė',\n    evening: 'vakaras',\n    night: 'naktis'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '-oji';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingQuarterValues,\n    defaultFormattingWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-oji)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^p(r|o)\\.?\\s?(kr\\.?|me)/i,\n  abbreviated: /^(pr\\.\\s?(kr\\.|m\\.\\s?e\\.)|po\\s?kr\\.|mūsų eroje)/i,\n  wide: /^(prieš Kristų|prieš mūsų erą|po Kristaus|mūsų eroje)/i\n};\nvar parseEraPatterns = {\n  wide: [/prieš/i, /(po|mūsų)/i],\n  any: [/^pr/i, /^(po|m)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^([1234])/i,\n  abbreviated: /^(I|II|III|IV)\\s?ketv?\\.?/i,\n  wide: /^(I|II|III|IV)\\s?ketvirtis/i\n};\nvar parseQuarterPatterns = {\n  narrow: [/1/i, /2/i, /3/i, /4/i],\n  any: [/I$/i, /II$/i, /III/i, /IV/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[svkbglr]/i,\n  abbreviated: /^(saus\\.|vas\\.|kov\\.|bal\\.|geg\\.|birž\\.|liep\\.|rugp\\.|rugs\\.|spal\\.|lapkr\\.|gruod\\.)/i,\n  wide: /^(sausi(s|o)|vasari(s|o)|kov(a|o)s|balandž?i(s|o)|gegužės?|birželi(s|o)|liep(a|os)|rugpjū(t|č)i(s|o)|rugsėj(is|o)|spali(s|o)|lapkri(t|č)i(s|o)|gruodž?i(s|o))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^s/i, /^v/i, /^k/i, /^b/i, /^g/i, /^b/i, /^l/i, /^r/i, /^r/i, /^s/i, /^l/i, /^g/i],\n  any: [/^saus/i, /^vas/i, /^kov/i, /^bal/i, /^geg/i, /^birž/i, /^liep/i, /^rugp/i, /^rugs/i, /^spal/i, /^lapkr/i, /^gruod/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[spatkš]/i,\n  short: /^(sk|pr|an|tr|kt|pn|št)/i,\n  abbreviated: /^(sk|pr|an|tr|kt|pn|št)/i,\n  wide: /^(sekmadien(is|į)|pirmadien(is|į)|antradien(is|į)|trečiadien(is|į)|ketvirtadien(is|į)|penktadien(is|į)|šeštadien(is|į))/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^p/i, /^a/i, /^t/i, /^k/i, /^p/i, /^š/i],\n  wide: [/^se/i, /^pi/i, /^an/i, /^tr/i, /^ke/i, /^pe/i, /^še/i],\n  any: [/^sk/i, /^pr/i, /^an/i, /^tr/i, /^kt/i, /^pn/i, /^št/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(pr.\\s?p.|pop.|vidurnaktis|(vidurdienis|perpiet)|rytas|(diena|popietė)|vakaras|naktis)/i,\n  any: /^(priešpiet|popiet$|vidurnaktis|(vidurdienis|perpiet)|rytas|(diena|popietė)|vakaras|naktis)/i\n};\nvar parseDayPeriodPatterns = {\n  narrow: {\n    am: /^pr/i,\n    pm: /^pop./i,\n    midnight: /^vidurnaktis/i,\n    noon: /^(vidurdienis|perp)/i,\n    morning: /rytas/i,\n    afternoon: /(die|popietė)/i,\n    evening: /vakaras/i,\n    night: /naktis/i\n  },\n  any: {\n    am: /^pr/i,\n    pm: /^popiet$/i,\n    midnight: /^vidurnaktis/i,\n    noon: /^(vidurdienis|perp)/i,\n    morning: /rytas/i,\n    afternoon: /(die|popietė)/i,\n    evening: /vakaras/i,\n    night: /naktis/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function buildLocalizeTokenFn(schema) {\n  return function (count, options) {\n    if (count === 1) {\n      if (options !== null && options !== void 0 && options.addSuffix) {\n        return schema.one[0].replace('{{time}}', schema.one[2]);\n      } else {\n        return schema.one[0].replace('{{time}}', schema.one[1]);\n      }\n    } else {\n      var rem = count % 10 === 1 && count % 100 !== 11;\n      if (options !== null && options !== void 0 && options.addSuffix) {\n        return schema.other[0].replace('{{time}}', rem ? schema.other[3] : schema.other[4]).replace('{{count}}', String(count));\n      } else {\n        return schema.other[0].replace('{{time}}', rem ? schema.other[1] : schema.other[2]).replace('{{count}}', String(count));\n      }\n    }\n  };\n}\nvar formatDistanceLocale = {\n  lessThanXSeconds: buildLocalizeTokenFn({\n    one: ['mazāk par {{time}}', 'sekundi', 'sekundi'],\n    other: ['mazāk nekā {{count}} {{time}}', 'sekunde', 'sekundes', 'sekundes', 'sekundēm']\n  }),\n  xSeconds: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'sekunde', 'sekundes'],\n    other: ['{{count}} {{time}}', 'sekunde', 'sekundes', 'sekundes', 'sekundēm']\n  }),\n  halfAMinute: function halfAMinute(_count, options) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      return 'pusminūtes';\n    } else {\n      return 'pusminūte';\n    }\n  },\n  lessThanXMinutes: buildLocalizeTokenFn({\n    one: ['mazāk par {{time}}', 'minūti', 'minūti'],\n    other: ['mazāk nekā {{count}} {{time}}', 'minūte', 'minūtes', 'minūtes', 'minūtēm']\n  }),\n  xMinutes: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'minūte', 'minūtes'],\n    other: ['{{count}} {{time}}', 'minūte', 'minūtes', 'minūtes', 'minūtēm']\n  }),\n  aboutXHours: buildLocalizeTokenFn({\n    one: ['apmēram 1 {{time}}', 'stunda', 'stundas'],\n    other: ['apmēram {{count}} {{time}}', 'stunda', 'stundas', 'stundas', 'stundām']\n  }),\n  xHours: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'stunda', 'stundas'],\n    other: ['{{count}} {{time}}', 'stunda', 'stundas', 'stundas', 'stundām']\n  }),\n  xDays: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'diena', 'dienas'],\n    other: ['{{count}} {{time}}', 'diena', 'dienas', 'dienas', 'dienām']\n  }),\n  aboutXWeeks: buildLocalizeTokenFn({\n    one: ['apmēram 1 {{time}}', 'nedēļa', 'nedēļas'],\n    other: ['apmēram {{count}} {{time}}', 'nedēļa', 'nedēļu', 'nedēļas', 'nedēļām']\n  }),\n  xWeeks: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'nedēļa', 'nedēļas'],\n    other: ['{{count}} {{time}}',\n    // TODO\n    'nedēļa', 'nedēļu', 'nedēļas', 'nedēļām']\n  }),\n  aboutXMonths: buildLocalizeTokenFn({\n    one: ['apmēram 1 {{time}}', 'mēnesis', 'mēneša'],\n    other: ['apmēram {{count}} {{time}}', 'mēnesis', 'mēneši', 'mēneša', 'mēnešiem']\n  }),\n  xMonths: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'mēnesis', 'mēneša'],\n    other: ['{{count}} {{time}}', 'mēnesis', 'mēneši', 'mēneša', 'mēnešiem']\n  }),\n  aboutXYears: buildLocalizeTokenFn({\n    one: ['apmēram 1 {{time}}', 'gads', 'gada'],\n    other: ['apmēram {{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']\n  }),\n  xYears: buildLocalizeTokenFn({\n    one: ['1 {{time}}', 'gads', 'gada'],\n    other: ['{{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']\n  }),\n  overXYears: buildLocalizeTokenFn({\n    one: ['ilgāk par 1 {{time}}', 'gadu', 'gadu'],\n    other: ['vairāk nekā {{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']\n  }),\n  almostXYears: buildLocalizeTokenFn({\n    one: ['gandrīz 1 {{time}}', 'gads', 'gada'],\n    other: ['vairāk nekā {{count}} {{time}}', 'gads', 'gadi', 'gada', 'gadiem']\n  })\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result = formatDistanceLocale[token](count, options);\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'pēc ' + result;\n    } else {\n      return 'pirms ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, y. 'gada' d. MMMM\",\n  long: \"y. 'gada' d. MMMM\",\n  medium: 'dd.MM.y.',\n  short: 'dd.MM.y.'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'plkst.' {{time}}\",\n  long: \"{{date}} 'plkst.' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar weekdays = ['svētdienā', 'pirmdienā', 'otrdienā', 'trešdienā', 'ceturtdienā', 'piektdienā', 'sestdienā'];\nvar formatRelativeLocale = {\n  lastWeek: function lastWeek(date, baseDate, options) {\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return \"eeee 'plkst.' p\";\n    }\n    var weekday = weekdays[date.getUTCDay()];\n    return \"'Pagājušā \" + weekday + \" plkst.' p\";\n  },\n  yesterday: \"'Vakar plkst.' p\",\n  today: \"'Šodien plkst.' p\",\n  tomorrow: \"'Rīt plkst.' p\",\n  nextWeek: function nextWeek(date, baseDate, options) {\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return \"eeee 'plkst.' p\";\n    }\n    var weekday = weekdays[date.getUTCDay()];\n    return \"'Nākamajā \" + weekday + \" plkst.' p\";\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Latvian locale (Latvia).\n * @language Latvian\n * @iso-639-2 lav\n * @author Rūdolfs Puķītis [@prudolfs]{@link https://github.com/prudolfs}\n */\nvar locale = {\n  code: 'lv',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['p.m.ē', 'm.ē'],\n  abbreviated: ['p. m. ē.', 'm. ē.'],\n  wide: ['pirms mūsu ēras', 'mūsu ērā']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1. cet.', '2. cet.', '3. cet.', '4. cet.'],\n  wide: ['pirmais ceturksnis', 'otrais ceturksnis', 'trešais ceturksnis', 'ceturtais ceturksnis']\n};\nvar formattingQuarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1. cet.', '2. cet.', '3. cet.', '4. cet.'],\n  wide: ['pirmajā ceturksnī', 'otrajā ceturksnī', 'trešajā ceturksnī', 'ceturtajā ceturksnī']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['janv.', 'febr.', 'marts', 'apr.', 'maijs', 'jūn.', 'jūl.', 'aug.', 'sept.', 'okt.', 'nov.', 'dec.'],\n  wide: ['janvāris', 'februāris', 'marts', 'aprīlis', 'maijs', 'jūnijs', 'jūlijs', 'augusts', 'septembris', 'oktobris', 'novembris', 'decembris']\n};\nvar formattingMonthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['janv.', 'febr.', 'martā', 'apr.', 'maijs', 'jūn.', 'jūl.', 'aug.', 'sept.', 'okt.', 'nov.', 'dec.'],\n  wide: ['janvārī', 'februārī', 'martā', 'aprīlī', 'maijā', 'jūnijā', 'jūlijā', 'augustā', 'septembrī', 'oktobrī', 'novembrī', 'decembrī']\n};\nvar dayValues = {\n  narrow: ['S', 'P', 'O', 'T', 'C', 'P', 'S'],\n  short: ['Sv', 'P', 'O', 'T', 'C', 'Pk', 'S'],\n  abbreviated: ['svētd.', 'pirmd.', 'otrd.', 'trešd.', 'ceturtd.', 'piektd.', 'sestd.'],\n  wide: ['svētdiena', 'pirmdiena', 'otrdiena', 'trešdiena', 'ceturtdiena', 'piektdiena', 'sestdiena']\n};\nvar formattingDayValues = {\n  narrow: ['S', 'P', 'O', 'T', 'C', 'P', 'S'],\n  short: ['Sv', 'P', 'O', 'T', 'C', 'Pk', 'S'],\n  abbreviated: ['svētd.', 'pirmd.', 'otrd.', 'trešd.', 'ceturtd.', 'piektd.', 'sestd.'],\n  wide: ['svētdienā', 'pirmdienā', 'otrdienā', 'trešdienā', 'ceturtdienā', 'piektdienā', 'sestdienā']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'pusn.',\n    noon: 'pusd.',\n    morning: 'rīts',\n    afternoon: 'diena',\n    evening: 'vakars',\n    night: 'nakts'\n  },\n  abbreviated: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'pusn.',\n    noon: 'pusd.',\n    morning: 'rīts',\n    afternoon: 'pēcpusd.',\n    evening: 'vakars',\n    night: 'nakts'\n  },\n  wide: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'pusnakts',\n    noon: 'pusdienlaiks',\n    morning: 'rīts',\n    afternoon: 'pēcpusdiena',\n    evening: 'vakars',\n    night: 'nakts'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'pusn.',\n    noon: 'pusd.',\n    morning: 'rītā',\n    afternoon: 'dienā',\n    evening: 'vakarā',\n    night: 'naktī'\n  },\n  abbreviated: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'pusn.',\n    noon: 'pusd.',\n    morning: 'rītā',\n    afternoon: 'pēcpusd.',\n    evening: 'vakarā',\n    night: 'naktī'\n  },\n  wide: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'pusnaktī',\n    noon: 'pusdienlaikā',\n    morning: 'rītā',\n    afternoon: 'pēcpusdienā',\n    evening: 'vakarā',\n    night: 'naktī'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingQuarterValues,\n    defaultFormattingWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(p\\.m\\.ē|m\\.ē)/i,\n  abbreviated: /^(p\\. m\\. ē\\.|m\\. ē\\.)/i,\n  wide: /^(pirms mūsu ēras|mūsu ērā)/i\n};\nvar parseEraPatterns = {\n  any: [/^p/i, /^m/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](\\. cet\\.)/i,\n  wide: /^(pirma(is|jā)|otra(is|jā)|treša(is|jā)|ceturta(is|jā)) ceturksn(is|ī)/i\n};\nvar parseQuarterPatterns = {\n  narrow: [/^1/i, /^2/i, /^3/i, /^4/i],\n  abbreviated: [/^1/i, /^2/i, /^3/i, /^4/i],\n  wide: [/^p/i, /^o/i, /^t/i, /^c/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(janv\\.|febr\\.|marts|apr\\.|maijs|jūn\\.|jūl\\.|aug\\.|sept\\.|okt\\.|nov\\.|dec\\.)/i,\n  wide: /^(janvār(is|ī)|februār(is|ī)|mart[sā]|aprīl(is|ī)|maij[sā]|jūnij[sā]|jūlij[sā]|august[sā]|septembr(is|ī)|oktobr(is|ī)|novembr(is|ī)|decembr(is|ī))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^mai/i, /^jūn/i, /^jūl/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[spotc]/i,\n  short: /^(sv|pi|o|t|c|pk|s)/i,\n  abbreviated: /^(svētd\\.|pirmd\\.|otrd.\\|trešd\\.|ceturtd\\.|piektd\\.|sestd\\.)/i,\n  wide: /^(svētdien(a|ā)|pirmdien(a|ā)|otrdien(a|ā)|trešdien(a|ā)|ceturtdien(a|ā)|piektdien(a|ā)|sestdien(a|ā))/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^p/i, /^o/i, /^t/i, /^c/i, /^p/i, /^s/i],\n  any: [/^sv/i, /^pi/i, /^o/i, /^t/i, /^c/i, /^p/i, /^se/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(am|pm|pusn\\.|pusd\\.|rīt(s|ā)|dien(a|ā)|vakar(s|ā)|nakt(s|ī))/,\n  abbreviated: /^(am|pm|pusn\\.|pusd\\.|rīt(s|ā)|pēcpusd\\.|vakar(s|ā)|nakt(s|ī))/,\n  wide: /^(am|pm|pusnakt(s|ī)|pusdienlaik(s|ā)|rīt(s|ā)|pēcpusdien(a|ā)|vakar(s|ā)|nakt(s|ī))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^am/i,\n    pm: /^pm/i,\n    midnight: /^pusn/i,\n    noon: /^pusd/i,\n    morning: /^r/i,\n    afternoon: /^(d|pēc)/i,\n    evening: /^v/i,\n    night: /^n/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'wide',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'помалку од секунда',\n    other: 'помалку од {{count}} секунди'\n  },\n  xSeconds: {\n    one: '1 секунда',\n    other: '{{count}} секунди'\n  },\n  halfAMinute: 'половина минута',\n  lessThanXMinutes: {\n    one: 'помалку од минута',\n    other: 'помалку од {{count}} минути'\n  },\n  xMinutes: {\n    one: '1 минута',\n    other: '{{count}} минути'\n  },\n  aboutXHours: {\n    one: 'околу 1 час',\n    other: 'околу {{count}} часа'\n  },\n  xHours: {\n    one: '1 час',\n    other: '{{count}} часа'\n  },\n  xDays: {\n    one: '1 ден',\n    other: '{{count}} дена'\n  },\n  aboutXWeeks: {\n    one: 'околу 1 недела',\n    other: 'околу {{count}} месеци'\n  },\n  xWeeks: {\n    one: '1 недела',\n    other: '{{count}} недели'\n  },\n  aboutXMonths: {\n    one: 'околу 1 месец',\n    other: 'околу {{count}} недели'\n  },\n  xMonths: {\n    one: '1 месец',\n    other: '{{count}} месеци'\n  },\n  aboutXYears: {\n    one: 'околу 1 година',\n    other: 'околу {{count}} години'\n  },\n  xYears: {\n    one: '1 година',\n    other: '{{count}} години'\n  },\n  overXYears: {\n    one: 'повеќе од 1 година',\n    other: 'повеќе од {{count}} години'\n  },\n  almostXYears: {\n    one: 'безмалку 1 година',\n    other: 'безмалку {{count}} години'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'за ' + result;\n    } else {\n      return 'пред ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, dd MMMM yyyy',\n  long: 'dd MMMM yyyy',\n  medium: 'dd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar weekdays = ['недела', 'понеделник', 'вторник', 'среда', 'четврток', 'петок', 'сабота'];\nfunction _lastWeek(day) {\n  var weekday = weekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 6:\n      return \"'минатата \" + weekday + \" во' p\";\n    case 1:\n    case 2:\n    case 4:\n    case 5:\n      return \"'минатиот \" + weekday + \" во' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = weekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 6:\n      return \"'ова \" + weekday + \" вo' p\";\n    case 1:\n    case 2:\n    case 4:\n    case 5:\n      return \"'овој \" + weekday + \" вo' p\";\n  }\n}\nfunction _nextWeek(day) {\n  var weekday = weekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 6:\n      return \"'следната \" + weekday + \" вo' p\";\n    case 1:\n    case 2:\n    case 4:\n    case 5:\n      return \"'следниот \" + weekday + \" вo' p\";\n  }\n}\nvar formatRelativeLocale = {\n  lastWeek: function lastWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _lastWeek(day);\n    }\n  },\n  yesterday: \"'вчера во' p\",\n  today: \"'денес во' p\",\n  tomorrow: \"'утре во' p\",\n  nextWeek: function nextWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _nextWeek(day);\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Macedonian locale.\n * @language Macedonian\n * @iso-639-2 mkd\n * @author Petar Vlahu [@vlahupetar]{@link https://github.com/vlahupetar}\n * @author Altrim Beqiri [@altrim]{@link https://github.com/altrim}\n */\nvar locale = {\n  code: 'mk',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['пр.н.е.', 'н.е.'],\n  abbreviated: ['пред н. е.', 'н. е.'],\n  wide: ['пред нашата ера', 'нашата ера']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-ви кв.', '2-ри кв.', '3-ти кв.', '4-ти кв.'],\n  wide: ['1-ви квартал', '2-ри квартал', '3-ти квартал', '4-ти квартал']\n};\nvar monthValues = {\n  abbreviated: ['јан', 'фев', 'мар', 'апр', 'мај', 'јун', 'јул', 'авг', 'септ', 'окт', 'ноем', 'дек'],\n  wide: ['јануари', 'февруари', 'март', 'април', 'мај', 'јуни', 'јули', 'август', 'септември', 'октомври', 'ноември', 'декември']\n};\nvar dayValues = {\n  narrow: ['Н', 'П', 'В', 'С', 'Ч', 'П', 'С'],\n  short: ['не', 'по', 'вт', 'ср', 'че', 'пе', 'са'],\n  abbreviated: ['нед', 'пон', 'вто', 'сре', 'чет', 'пет', 'саб'],\n  wide: ['недела', 'понеделник', 'вторник', 'среда', 'четврток', 'петок', 'сабота']\n};\nvar dayPeriodValues = {\n  wide: {\n    am: 'претпладне',\n    pm: 'попладне',\n    midnight: 'полноќ',\n    noon: 'напладне',\n    morning: 'наутро',\n    afternoon: 'попладне',\n    evening: 'навечер',\n    night: 'ноќе'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + '-ви';\n      case 2:\n        return number + '-ри';\n      case 7:\n      case 8:\n        return number + '-ми';\n    }\n  }\n  return number + '-ти';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?[врмт][и])?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((пр)?н\\.?\\s?е\\.?)/i,\n  abbreviated: /^((пр)?н\\.?\\s?е\\.?)/i,\n  wide: /^(пред нашата ера|нашата ера)/i\n};\nvar parseEraPatterns = {\n  any: [/^п/i, /^н/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?[врт]?и?)? кв.?/i,\n  wide: /^[1234](-?[врт]?и?)? квартал/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[нпвсч]/i,\n  short: /^(не|по|вт|ср|че|пе|са)/i,\n  abbreviated: /^(нед|пон|вто|сре|чет|пет|саб)/i,\n  wide: /^(недела|понеделник|вторник|среда|четврток|петок|сабота)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^н/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n  any: [/^н[ед]/i, /^п[он]/i, /^вт/i, /^ср/i, /^ч[ет]/i, /^п[ет]/i, /^с[аб]/i]\n};\nvar matchMonthPatterns = {\n  abbreviated: /^(јан|фев|мар|апр|мај|јун|јул|авг|сеп|окт|ноем|дек)/i,\n  wide: /^(јануари|февруари|март|април|мај|јуни|јули|август|септември|октомври|ноември|декември)/i\n};\nvar parseMonthPatterns = {\n  any: [/^ја/i, /^Ф/i, /^мар/i, /^ап/i, /^мај/i, /^јун/i, /^јул/i, /^ав/i, /^се/i, /^окт/i, /^но/i, /^де/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(претп|попл|полноќ|утро|пладне|вечер|ноќ)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /претпладне/i,\n    pm: /попладне/i,\n    midnight: /полноќ/i,\n    noon: /напладне/i,\n    morning: /наутро/i,\n    afternoon: /попладне/i,\n    evening: /навечер/i,\n    night: /ноќе/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'секунд хүрэхгүй',\n    other: '{{count}} секунд хүрэхгүй'\n  },\n  xSeconds: {\n    one: '1 секунд',\n    other: '{{count}} секунд'\n  },\n  halfAMinute: 'хагас минут',\n  lessThanXMinutes: {\n    one: 'минут хүрэхгүй',\n    other: '{{count}} минут хүрэхгүй'\n  },\n  xMinutes: {\n    one: '1 минут',\n    other: '{{count}} минут'\n  },\n  aboutXHours: {\n    one: 'ойролцоогоор 1 цаг',\n    other: 'ойролцоогоор {{count}} цаг'\n  },\n  xHours: {\n    one: '1 цаг',\n    other: '{{count}} цаг'\n  },\n  xDays: {\n    one: '1 өдөр',\n    other: '{{count}} өдөр'\n  },\n  aboutXWeeks: {\n    one: 'ойролцоогоор 1 долоо хоног',\n    other: 'ойролцоогоор {{count}} долоо хоног'\n  },\n  xWeeks: {\n    one: '1 долоо хоног',\n    other: '{{count}} долоо хоног'\n  },\n  aboutXMonths: {\n    one: 'ойролцоогоор 1 сар',\n    other: 'ойролцоогоор {{count}} сар'\n  },\n  xMonths: {\n    one: '1 сар',\n    other: '{{count}} сар'\n  },\n  aboutXYears: {\n    one: 'ойролцоогоор 1 жил',\n    other: 'ойролцоогоор {{count}} жил'\n  },\n  xYears: {\n    one: '1 жил',\n    other: '{{count}} жил'\n  },\n  overXYears: {\n    one: '1 жил гаран',\n    other: '{{count}} жил гаран'\n  },\n  almostXYears: {\n    one: 'бараг 1 жил',\n    other: 'бараг {{count}} жил'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    /**\n     * Append genitive case\n     */\n    var words = result.split(' ');\n    var lastword = words.pop();\n    result = words.join(' ');\n    switch (lastword) {\n      case 'секунд':\n        result += ' секундийн';\n        break;\n      case 'минут':\n        result += ' минутын';\n        break;\n      case 'цаг':\n        result += ' цагийн';\n        break;\n      case 'өдөр':\n        result += ' өдрийн';\n        break;\n      case 'сар':\n        result += ' сарын';\n        break;\n      case 'жил':\n        result += ' жилийн';\n        break;\n      case 'хоног':\n        result += ' хоногийн';\n        break;\n      case 'гаран':\n        result += ' гараны';\n        break;\n      case 'хүрэхгүй':\n        result += ' хүрэхгүй хугацааны';\n        break;\n      default:\n        result += lastword + '-н';\n    }\n    if (options.comparison && options.comparison > 0) {\n      return result + ' дараа';\n    } else {\n      return result + ' өмнө';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"y 'оны' MMMM'ын' d, EEEE 'гараг'\",\n  long: \"y 'оны' MMMM'ын' d\",\n  medium: \"y 'оны' MMM'ын' d\",\n  short: 'y.MM.dd'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'өнгөрсөн' eeee 'гарагийн' p 'цагт'\",\n  yesterday: \"'өчигдөр' p 'цагт'\",\n  today: \"'өнөөдөр' p 'цагт'\",\n  tomorrow: \"'маргааш' p 'цагт'\",\n  nextWeek: \"'ирэх' eeee 'гарагийн' p 'цагт'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Mongolian locale.\n * @language Mongolian\n * @iso-639-2 mon\n * @author Bilguun Ochirbat [@bilguun0203]{@link https://github.com/bilguun0203}\n */\nvar locale = {\n  code: 'mn',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['НТӨ', 'НТ'],\n  abbreviated: ['НТӨ', 'НТ'],\n  wide: ['нийтийн тооллын өмнөх', 'нийтийн тооллын']\n};\nvar quarterValues = {\n  narrow: ['I', 'II', 'III', 'IV'],\n  abbreviated: ['I улирал', 'II улирал', 'III улирал', 'IV улирал'],\n  wide: ['1-р улирал', '2-р улирал', '3-р улирал', '4-р улирал']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII'],\n  abbreviated: ['1-р сар', '2-р сар', '3-р сар', '4-р сар', '5-р сар', '6-р сар', '7-р сар', '8-р сар', '9-р сар', '10-р сар', '11-р сар', '12-р сар'],\n  wide: ['Нэгдүгээр сар', 'Хоёрдугаар сар', 'Гуравдугаар сар', 'Дөрөвдүгээр сар', 'Тавдугаар сар', 'Зургаадугаар сар', 'Долоодугаар сар', 'Наймдугаар сар', 'Есдүгээр сар', 'Аравдугаар сар', 'Арваннэгдүгээр сар', 'Арван хоёрдугаар сар']\n};\nvar formattingMonthValues = {\n  narrow: ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII'],\n  abbreviated: ['1-р сар', '2-р сар', '3-р сар', '4-р сар', '5-р сар', '6-р сар', '7-р сар', '8-р сар', '9-р сар', '10-р сар', '11-р сар', '12-р сар'],\n  wide: ['нэгдүгээр сар', 'хоёрдугаар сар', 'гуравдугаар сар', 'дөрөвдүгээр сар', 'тавдугаар сар', 'зургаадугаар сар', 'долоодугаар сар', 'наймдугаар сар', 'есдүгээр сар', 'аравдугаар сар', 'арваннэгдүгээр сар', 'арван хоёрдугаар сар']\n};\nvar dayValues = {\n  narrow: ['Н', 'Д', 'М', 'Л', 'П', 'Б', 'Б'],\n  short: ['Ня', 'Да', 'Мя', 'Лх', 'Пү', 'Ба', 'Бя'],\n  abbreviated: ['Ням', 'Дав', 'Мяг', 'Лха', 'Пүр', 'Баа', 'Бям'],\n  wide: ['Ням', 'Даваа', 'Мягмар', 'Лхагва', 'Пүрэв', 'Баасан', 'Бямба']\n};\nvar formattingDayValues = {\n  narrow: ['Н', 'Д', 'М', 'Л', 'П', 'Б', 'Б'],\n  short: ['Ня', 'Да', 'Мя', 'Лх', 'Пү', 'Ба', 'Бя'],\n  abbreviated: ['Ням', 'Дав', 'Мяг', 'Лха', 'Пүр', 'Баа', 'Бям'],\n  wide: ['ням', 'даваа', 'мягмар', 'лхагва', 'пүрэв', 'баасан', 'бямба']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ү.ө.',\n    pm: 'ү.х.',\n    midnight: 'шөнө дунд',\n    noon: 'үд дунд',\n    morning: 'өглөө',\n    afternoon: 'өдөр',\n    evening: 'орой',\n    night: 'шөнө'\n  },\n  abbreviated: {\n    am: 'ү.ө.',\n    pm: 'ү.х.',\n    midnight: 'шөнө дунд',\n    noon: 'үд дунд',\n    morning: 'өглөө',\n    afternoon: 'өдөр',\n    evening: 'орой',\n    night: 'шөнө'\n  },\n  wide: {\n    am: 'ү.ө.',\n    pm: 'ү.х.',\n    midnight: 'шөнө дунд',\n    noon: 'үд дунд',\n    morning: 'өглөө',\n    afternoon: 'өдөр',\n    evening: 'орой',\n    night: 'шөнө'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /\\d+/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(нтө|нт)/i,\n  abbreviated: /^(нтө|нт)/i,\n  wide: /^(нийтийн тооллын өмнө|нийтийн тооллын)/i\n};\nvar parseEraPatterns = {\n  any: [/^(нтө|нийтийн тооллын өмнө)/i, /^(нт|нийтийн тооллын)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^(iv|iii|ii|i)/i,\n  abbreviated: /^(iv|iii|ii|i) улирал/i,\n  wide: /^[1-4]-р улирал/i\n};\nvar parseQuarterPatterns = {\n  any: [/^(i(\\s|$)|1)/i, /^(ii(\\s|$)|2)/i, /^(iii(\\s|$)|3)/i, /^(iv(\\s|$)|4)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(xii|xi|x|ix|viii|vii|vi|v|iv|iii|ii|i)/i,\n  abbreviated: /^(1-р сар|2-р сар|3-р сар|4-р сар|5-р сар|6-р сар|7-р сар|8-р сар|9-р сар|10-р сар|11-р сар|12-р сар)/i,\n  wide: /^(нэгдүгээр сар|хоёрдугаар сар|гуравдугаар сар|дөрөвдүгээр сар|тавдугаар сар|зургаадугаар сар|долоодугаар сар|наймдугаар сар|есдүгээр сар|аравдугаар сар|арван нэгдүгээр сар|арван хоёрдугаар сар)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^i$/i, /^ii$/i, /^iii$/i, /^iv$/i, /^v$/i, /^vi$/i, /^vii$/i, /^viii$/i, /^ix$/i, /^x$/i, /^xi$/i, /^xii$/i],\n  any: [/^(1|нэгдүгээр)/i, /^(2|хоёрдугаар)/i, /^(3|гуравдугаар)/i, /^(4|дөрөвдүгээр)/i, /^(5|тавдугаар)/i, /^(6|зургаадугаар)/i, /^(7|долоодугаар)/i, /^(8|наймдугаар)/i, /^(9|есдүгээр)/i, /^(10|аравдугаар)/i, /^(11|арван нэгдүгээр)/i, /^(12|арван хоёрдугаар)/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[ндмлпбб]/i,\n  short: /^(ня|да|мя|лх|пү|ба|бя)/i,\n  abbreviated: /^(ням|дав|мяг|лха|пүр|баа|бям)/i,\n  wide: /^(ням|даваа|мягмар|лхагва|пүрэв|баасан|бямба)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^н/i, /^д/i, /^м/i, /^л/i, /^п/i, /^б/i, /^б/i],\n  any: [/^ня/i, /^да/i, /^мя/i, /^лх/i, /^пү/i, /^ба/i, /^бя/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ү\\.ө\\.|ү\\.х\\.|шөнө дунд|үд дунд|өглөө|өдөр|орой|шөнө)/i,\n  any: /^(ү\\.ө\\.|ү\\.х\\.|шөнө дунд|үд дунд|өглөө|өдөр|орой|шөнө)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ү\\.ө\\./i,\n    pm: /^ү\\.х\\./i,\n    midnight: /^шөнө дунд/i,\n    noon: /^үд дунд/i,\n    morning: /өглөө/i,\n    afternoon: /өдөр/i,\n    evening: /орой/i,\n    night: /шөнө/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'kurang dari 1 saat',\n    other: 'kurang dari {{count}} saat'\n  },\n  xSeconds: {\n    one: '1 saat',\n    other: '{{count}} saat'\n  },\n  halfAMinute: 'setengah minit',\n  lessThanXMinutes: {\n    one: 'kurang dari 1 minit',\n    other: 'kurang dari {{count}} minit'\n  },\n  xMinutes: {\n    one: '1 minit',\n    other: '{{count}} minit'\n  },\n  aboutXHours: {\n    one: 'sekitar 1 jam',\n    other: 'sekitar {{count}} jam'\n  },\n  xHours: {\n    one: '1 jam',\n    other: '{{count}} jam'\n  },\n  xDays: {\n    one: '1 hari',\n    other: '{{count}} hari'\n  },\n  aboutXWeeks: {\n    one: 'sekitar 1 minggu',\n    other: 'sekitar {{count}} minggu'\n  },\n  xWeeks: {\n    one: '1 minggu',\n    other: '{{count}} minggu'\n  },\n  aboutXMonths: {\n    one: 'sekitar 1 bulan',\n    other: 'sekitar {{count}} bulan'\n  },\n  xMonths: {\n    one: '1 bulan',\n    other: '{{count}} bulan'\n  },\n  aboutXYears: {\n    one: 'sekitar 1 tahun',\n    other: 'sekitar {{count}} tahun'\n  },\n  xYears: {\n    one: '1 tahun',\n    other: '{{count}} tahun'\n  },\n  overXYears: {\n    one: 'lebih dari 1 tahun',\n    other: 'lebih dari {{count}} tahun'\n  },\n  almostXYears: {\n    one: 'hampir 1 tahun',\n    other: 'hampir {{count}} tahun'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'dalam masa ' + result;\n    } else {\n      return result + ' yang lalu';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'd/M/yyyy'\n};\nvar timeFormats = {\n  full: 'HH.mm.ss',\n  long: 'HH.mm.ss',\n  medium: 'HH.mm',\n  short: 'HH.mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'pukul' {{time}}\",\n  long: \"{{date}} 'pukul' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'lepas pada jam' p\",\n  yesterday: \"'Semalam pada jam' p\",\n  today: \"'Hari ini pada jam' p\",\n  tomorrow: \"'Esok pada jam' p\",\n  nextWeek: \"eeee 'pada jam' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Malay locale.\n * @language Malay\n * @iso-639-2 msa\n * @author Ruban Selvarajah [@Zyten]{@link https://github.com/Zyten}\n */\nvar locale = {\n  code: 'ms',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // Most data for localization are taken from this page\n// https://www.unicode.org/cldr/charts/32/summary/ms.html\nvar eraValues = {\n  narrow: ['SM', 'M'],\n  abbreviated: ['SM', 'M'],\n  wide: ['Sebelum Masihi', 'Masihi']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['S1', 'S2', 'S3', 'S4'],\n  wide: ['Suku pertama', 'Suku kedua', 'Suku ketiga', 'Suku keempat']\n};\n\n// Note: in Malay, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'O', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ogo', 'Sep', 'Okt', 'Nov', 'Dis'],\n  wide: ['Januari', 'Februari', 'Mac', 'April', 'Mei', 'Jun', 'Julai', 'Ogos', 'September', 'Oktober', 'November', 'Disember']\n};\nvar dayValues = {\n  narrow: ['A', 'I', 'S', 'R', 'K', 'J', 'S'],\n  short: ['Ahd', 'Isn', 'Sel', 'Rab', 'Kha', 'Jum', 'Sab'],\n  abbreviated: ['Ahd', 'Isn', 'Sel', 'Rab', 'Kha', 'Jum', 'Sab'],\n  wide: ['Ahad', 'Isnin', 'Selasa', 'Rabu', 'Khamis', 'Jumaat', 'Sabtu']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'tgh malam',\n    noon: 'tgh hari',\n    morning: 'pagi',\n    afternoon: 'tengah hari',\n    evening: 'petang',\n    night: 'malam'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'tengah hari',\n    evening: 'petang',\n    night: 'malam'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'tengah hari',\n    evening: 'petang',\n    night: 'malam'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'tengah hari',\n    evening: 'petang',\n    night: 'malam'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'tengah hari',\n    evening: 'petang',\n    night: 'malam'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'tengah malam',\n    noon: 'tengah hari',\n    morning: 'pagi',\n    afternoon: 'tengah hari',\n    evening: 'petang',\n    night: 'malam'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  // Can't use \"pertama\", \"kedua\" because can't be parsed\n  return 'ke-' + Number(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^ke-(\\d+)?/i;\nvar parseOrdinalNumberPattern = /petama|\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(sm|m)/i,\n  abbreviated: /^(s\\.?\\s?m\\.?|m\\.?)/i,\n  wide: /^(sebelum masihi|masihi)/i\n};\nvar parseEraPatterns = {\n  any: [/^s/i, /^(m)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^S[1234]/i,\n  wide: /Suku (pertama|kedua|ketiga|keempat)/i\n};\nvar parseQuarterPatterns = {\n  any: [/pertama|1/i, /kedua|2/i, /ketiga|3/i, /keempat|4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mac|apr|mei|jun|jul|ogo|sep|okt|nov|dis)/i,\n  wide: /^(januari|februari|mac|april|mei|jun|julai|ogos|september|oktober|november|disember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^o/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^ma/i, /^ap/i, /^me/i, /^jun/i, /^jul/i, /^og/i, /^s/i, /^ok/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[aisrkj]/i,\n  short: /^(ahd|isn|sel|rab|kha|jum|sab)/i,\n  abbreviated: /^(ahd|isn|sel|rab|kha|jum|sab)/i,\n  wide: /^(ahad|isnin|selasa|rabu|khamis|jumaat|sabtu)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^a/i, /^i/i, /^s/i, /^r/i, /^k/i, /^j/i, /^s/i],\n  any: [/^a/i, /^i/i, /^se/i, /^r/i, /^k/i, /^j/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(am|pm|tengah malam|tengah hari|pagi|petang|malam)/i,\n  any: /^([ap]\\.?\\s?m\\.?|tengah malam|tengah hari|pagi|petang|malam)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^pm/i,\n    midnight: /^tengah m/i,\n    noon: /^tengah h/i,\n    morning: /pa/i,\n    afternoon: /tengah h/i,\n    evening: /pe/i,\n    night: /m/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'inqas minn sekonda',\n    other: 'inqas minn {{count}} sekondi'\n  },\n  xSeconds: {\n    one: 'sekonda',\n    other: '{{count}} sekondi'\n  },\n  halfAMinute: 'nofs minuta',\n  lessThanXMinutes: {\n    one: 'inqas minn minuta',\n    other: 'inqas minn {{count}} minuti'\n  },\n  xMinutes: {\n    one: 'minuta',\n    other: '{{count}} minuti'\n  },\n  aboutXHours: {\n    one: 'madwar siegħa',\n    other: 'madwar {{count}} siegħat'\n  },\n  xHours: {\n    one: 'siegħa',\n    other: '{{count}} siegħat'\n  },\n  xDays: {\n    one: 'ġurnata',\n    other: '{{count}} ġranet'\n  },\n  aboutXWeeks: {\n    one: 'madwar ġimgħa',\n    other: 'madwar {{count}} ġimgħat'\n  },\n  xWeeks: {\n    one: 'ġimgħa',\n    other: '{{count}} ġimgħat'\n  },\n  aboutXMonths: {\n    one: 'madwar xahar',\n    other: 'madwar {{count}} xhur'\n  },\n  xMonths: {\n    one: 'xahar',\n    other: '{{count}} xhur'\n  },\n  aboutXYears: {\n    one: 'madwar sena',\n    two: 'madwar sentejn',\n    other: 'madwar {{count}} snin'\n  },\n  xYears: {\n    one: 'sena',\n    two: 'sentejn',\n    other: '{{count}} snin'\n  },\n  overXYears: {\n    one: 'aktar minn sena',\n    two: 'aktar minn sentejn',\n    other: 'aktar minn {{count}} snin'\n  },\n  almostXYears: {\n    one: 'kważi sena',\n    two: 'kważi sentejn',\n    other: 'kważi {{count}} snin'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else if (count === 2 && tokenValue.two) {\n    result = tokenValue.two;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"f'\" + result;\n    } else {\n      return result + ' ilu';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'li għadda' 'fil-'p\",\n  yesterday: \"'Il-bieraħ fil-'p\",\n  today: \"'Illum fil-'p\",\n  tomorrow: \"'Għada fil-'p\",\n  nextWeek: \"eeee 'fil-'p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Maltese locale.\n * @language Maltese\n * @iso-639-2 mlt\n * @author Andras Matzon [@amatzon](@link https://github.com/amatzon)\n * @author Bryan Borg [@bryanMt](@link https://github.com/bryanMt)\n */\nvar locale = {\n  code: 'mt',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['Q', 'W'],\n  abbreviated: ['QK', 'WK'],\n  wide: ['qabel Kristu', 'wara Kristu']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1. kwart', '2. kwart', '3. kwart', '4. kwart']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'Ġ', 'L', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Fra', 'Mar', 'Apr', 'Mej', 'Ġun', 'Lul', 'Aww', 'Set', 'Ott', 'Nov', 'Diċ'],\n  wide: ['Jannar', 'Frar', 'Marzu', 'April', 'Mejju', 'Ġunju', 'Lulju', 'Awwissu', 'Settembru', 'Ottubru', 'Novembru', 'Diċembru']\n};\nvar dayValues = {\n  narrow: ['Ħ', 'T', 'T', 'E', 'Ħ', 'Ġ', 'S'],\n  short: ['Ħa', 'Tn', 'Tl', 'Er', 'Ħa', 'Ġi', 'Si'],\n  abbreviated: ['Ħad', 'Tne', 'Tli', 'Erb', 'Ħam', 'Ġim', 'Sib'],\n  wide: ['Il-Ħadd', 'It-Tnejn', 'It-Tlieta', 'L-Erbgħa', 'Il-Ħamis', 'Il-Ġimgħa', 'Is-Sibt']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'nofsillejl',\n    noon: 'nofsinhar',\n    morning: 'għodwa',\n    afternoon: 'wara nofsinhar',\n    evening: 'filgħaxija',\n    night: 'lejl'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'nofsillejl',\n    noon: 'nofsinhar',\n    morning: 'għodwa',\n    afternoon: 'wara nofsinhar',\n    evening: 'filgħaxija',\n    night: 'lejl'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'nofsillejl',\n    noon: 'nofsinhar',\n    morning: 'għodwa',\n    afternoon: 'wara nofsinhar',\n    evening: 'filgħaxija',\n    night: 'lejl'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: \"f'nofsillejl\",\n    noon: \"f'nofsinhar\",\n    morning: 'filgħodu',\n    afternoon: 'wara nofsinhar',\n    evening: 'filgħaxija',\n    night: 'billejl'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: \"f'nofsillejl\",\n    noon: \"f'nofsinhar\",\n    morning: 'filgħodu',\n    afternoon: 'wara nofsinhar',\n    evening: 'filgħaxija',\n    night: 'billejl'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: \"f'nofsillejl\",\n    noon: \"f'nofsinhar\",\n    morning: 'filgħodu',\n    afternoon: 'wara nofsinhar',\n    evening: 'filgħaxija',\n    night: 'billejl'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'º';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(q|w)/i,\n  abbreviated: /^(q\\.?\\s?k\\.?|b\\.?\\s?c\\.?\\s?e\\.?|w\\.?\\s?k\\.?)/i,\n  wide: /^(qabel kristu|before common era|wara kristu|common era)/i\n};\nvar parseEraPatterns = {\n  any: [/^(q|b)/i, /^(w|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^k[1234]/i,\n  wide: /^[1234](\\.)? kwart/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmaglsond]/i,\n  abbreviated: /^(jan|fra|mar|apr|mej|ġun|lul|aww|set|ott|nov|diċ)/i,\n  wide: /^(jannar|frar|marzu|april|mejju|ġunju|lulju|awwissu|settembru|ottubru|novembru|diċembru)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^ġ/i, /^l/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^mej/i, /^ġ/i, /^l/i, /^aw/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[ħteġs]/i,\n  short: /^(ħa|tn|tl|er|ħa|ġi|si)/i,\n  abbreviated: /^(ħad|tne|tli|erb|ħam|ġim|sib)/i,\n  wide: /^(il-ħadd|it-tnejn|it-tlieta|l-erbgħa|il-ħamis|il-ġimgħa|is-sibt)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ħ/i, /^t/i, /^t/i, /^e/i, /^ħ/i, /^ġ/i, /^s/i],\n  any: [/^(il-)?ħad/i, /^(it-)?tn/i, /^(it-)?tl/i, /^(l-)?er/i, /^(il-)?ham/i, /^(il-)?ġi/i, /^(is-)?si/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|f'nofsillejl|f'nofsinhar|(ta') (għodwa|wara nofsinhar|filgħaxija|lejl))/i,\n  any: /^([ap]\\.?\\s?m\\.?|f'nofsillejl|f'nofsinhar|(ta') (għodwa|wara nofsinhar|filgħaxija|lejl))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^f'nofsillejl/i,\n    noon: /^f'nofsinhar/i,\n    morning: /għodwa/i,\n    afternoon: /wara(\\s.*)nofsinhar/i,\n    evening: /filgħaxija/i,\n    night: /lejl/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mindre enn ett sekund',\n    other: 'mindre enn {{count}} sekunder'\n  },\n  xSeconds: {\n    one: 'ett sekund',\n    other: '{{count}} sekunder'\n  },\n  halfAMinute: 'et halvt minutt',\n  lessThanXMinutes: {\n    one: 'mindre enn ett minutt',\n    other: 'mindre enn {{count}} minutter'\n  },\n  xMinutes: {\n    one: 'ett minutt',\n    other: '{{count}} minutter'\n  },\n  aboutXHours: {\n    one: 'omtrent en time',\n    other: 'omtrent {{count}} timer'\n  },\n  xHours: {\n    one: 'en time',\n    other: '{{count}} timer'\n  },\n  xDays: {\n    one: 'en dag',\n    other: '{{count}} dager'\n  },\n  aboutXWeeks: {\n    one: 'omtrent en uke',\n    other: 'omtrent {{count}} uker'\n  },\n  xWeeks: {\n    one: 'en uke',\n    other: '{{count}} uker'\n  },\n  aboutXMonths: {\n    one: 'omtrent en måned',\n    other: 'omtrent {{count}} måneder'\n  },\n  xMonths: {\n    one: 'en måned',\n    other: '{{count}} måneder'\n  },\n  aboutXYears: {\n    one: 'omtrent ett år',\n    other: 'omtrent {{count}} år'\n  },\n  xYears: {\n    one: 'ett år',\n    other: '{{count}} år'\n  },\n  overXYears: {\n    one: 'over ett år',\n    other: 'over {{count}} år'\n  },\n  almostXYears: {\n    one: 'nesten ett år',\n    other: 'nesten {{count}} år'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'om ' + result;\n    } else {\n      return result + ' siden';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d. MMMM y',\n  long: 'd. MMMM y',\n  medium: 'd. MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: \"'kl'. HH:mm:ss zzzz\",\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'kl.' {{time}}\",\n  long: \"{{date}} 'kl.' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'forrige' eeee 'kl.' p\",\n  yesterday: \"'i går kl.' p\",\n  today: \"'i dag kl.' p\",\n  tomorrow: \"'i morgen kl.' p\",\n  nextWeek: \"EEEE 'kl.' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Norwegian Bokmål locale.\n * @language Norwegian Bokmål\n * @iso-639-2 nob\n * @author Hans-Kristian Koren [@Hanse]{@link https://github.com/Hanse}\n * @author Mikolaj Grzyb [@mikolajgrzyb]{@link https://github.com/mikolajgrzyb}\n * @author Dag Stuan [@dagstuan]{@link https://github.com/dagstuan}\n */\nvar locale = {\n  code: 'nb',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['f.Kr.', 'e.Kr.'],\n  abbreviated: ['f.Kr.', 'e.Kr.'],\n  wide: ['før Kristus', 'etter Kristus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mars', 'apr.', 'mai', 'juni', 'juli', 'aug.', 'sep.', 'okt.', 'nov.', 'des.'],\n  wide: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],\n  short: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],\n  abbreviated: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],\n  wide: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morg.',\n    afternoon: 'på etterm.',\n    evening: 'på kvelden',\n    night: 'på natten'\n  },\n  abbreviated: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morg.',\n    afternoon: 'på etterm.',\n    evening: 'på kvelden',\n    night: 'på natten'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morgenen',\n    afternoon: 'på ettermiddagen',\n    evening: 'på kvelden',\n    night: 'på natten'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\.?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(f\\.? ?Kr\\.?|fvt\\.?|e\\.? ?Kr\\.?|evt\\.?)/i,\n  abbreviated: /^(f\\.? ?Kr\\.?|fvt\\.?|e\\.? ?Kr\\.?|evt\\.?)/i,\n  wide: /^(før Kristus|før vår tid|etter Kristus|vår tid)/i\n};\nvar parseEraPatterns = {\n  any: [/^f/i, /^e/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](\\.)? kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mars?|apr|mai|juni?|juli?|aug|sep|okt|nov|des)\\.?/i,\n  wide: /^(januar|februar|mars|april|mai|juni|juli|august|september|oktober|november|desember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^aug/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtofl]/i,\n  short: /^(sø|ma|ti|on|to|fr|lø)/i,\n  abbreviated: /^(søn|man|tir|ons|tor|fre|lør)/i,\n  wide: /^(søndag|mandag|tirsdag|onsdag|torsdag|fredag|lørdag)/i\n};\nvar parseDayPatterns = {\n  any: [/^s/i, /^m/i, /^ti/i, /^o/i, /^to/i, /^f/i, /^l/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(midnatt|middag|(på) (morgenen|ettermiddagen|kvelden|natten)|[ap])/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnatt|middag|(på) (morgenen|ettermiddagen|kvelden|natten))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a(\\.?\\s?m\\.?)?$/i,\n    pm: /^p(\\.?\\s?m\\.?)?$/i,\n    midnight: /^midn/i,\n    noon: /^midd/i,\n    morning: /morgen/i,\n    afternoon: /ettermiddag/i,\n    evening: /kveld/i,\n    night: /natt/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'minder dan een seconde',\n    other: 'minder dan {{count}} seconden'\n  },\n  xSeconds: {\n    one: '1 seconde',\n    other: '{{count}} seconden'\n  },\n  halfAMinute: 'een halve minuut',\n  lessThanXMinutes: {\n    one: 'minder dan een minuut',\n    other: 'minder dan {{count}} minuten'\n  },\n  xMinutes: {\n    one: 'een minuut',\n    other: '{{count}} minuten'\n  },\n  aboutXHours: {\n    one: 'ongeveer 1 uur',\n    other: 'ongeveer {{count}} uur'\n  },\n  xHours: {\n    one: '1 uur',\n    other: '{{count}} uur'\n  },\n  xDays: {\n    one: '1 dag',\n    other: '{{count}} dagen'\n  },\n  aboutXWeeks: {\n    one: 'ongeveer 1 week',\n    other: 'ongeveer {{count}} weken'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weken'\n  },\n  aboutXMonths: {\n    one: 'ongeveer 1 maand',\n    other: 'ongeveer {{count}} maanden'\n  },\n  xMonths: {\n    one: '1 maand',\n    other: '{{count}} maanden'\n  },\n  aboutXYears: {\n    one: 'ongeveer 1 jaar',\n    other: 'ongeveer {{count}} jaar'\n  },\n  xYears: {\n    one: '1 jaar',\n    other: '{{count}} jaar'\n  },\n  overXYears: {\n    one: 'meer dan 1 jaar',\n    other: 'meer dan {{count}} jaar'\n  },\n  almostXYears: {\n    one: 'bijna 1 jaar',\n    other: 'bijna {{count}} jaar'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'over ' + result;\n    } else {\n      return result + ' geleden';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd-MM-y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'om' {{time}}\",\n  long: \"{{date}} 'om' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'afgelopen' eeee 'om' p\",\n  yesterday: \"'gisteren om' p\",\n  today: \"'vandaag om' p\",\n  tomorrow: \"'morgen om' p\",\n  nextWeek: \"eeee 'om' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Dutch locale.\n * @language Dutch\n * @iso-639-2 nld\n * @author Jorik Tangelder [@jtangelder]{@link https://github.com/jtangelder}\n * @author Ruben Stolk [@rubenstolk]{@link https://github.com/rubenstolk}\n * @author Lode Vanhove [@bitcrumb]{@link https://github.com/bitcrumb}\n * @author Edo Rivai [@edorivai]{@link https://github.com/edorivai}\n * @author Niels Keurentjes [@curry684]{@link https://github.com/curry684}\n * @author Stefan Vermaas [@stefanvermaas]{@link https://github.com/stefanvermaas}\n */\nvar locale = {\n  code: 'nl',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['v.C.', 'n.C.'],\n  abbreviated: ['v.Chr.', 'n.Chr.'],\n  wide: ['voor Christus', 'na Christus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1e kwartaal', '2e kwartaal', '3e kwartaal', '4e kwartaal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mrt.', 'apr.', 'mei', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'],\n  wide: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december']\n};\nvar dayValues = {\n  narrow: ['Z', 'M', 'D', 'W', 'D', 'V', 'Z'],\n  short: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n  abbreviated: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],\n  wide: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'het middaguur',\n    morning: \"'s ochtends\",\n    afternoon: \"'s middags\",\n    evening: \"'s avonds\",\n    night: \"'s nachts\"\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'het middaguur',\n    morning: \"'s ochtends\",\n    afternoon: \"'s middags\",\n    evening: \"'s avonds\",\n    night: \"'s nachts\"\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'het middaguur',\n    morning: \"'s ochtends\",\n    afternoon: \"'s middags\",\n    evening: \"'s avonds\",\n    night: \"'s nachts\"\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'e';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)e?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^([vn]\\.? ?C\\.?)/,\n  abbreviated: /^([vn]\\. ?Chr\\.?)/,\n  wide: /^((voor|na) Christus)/\n};\nvar parseEraPatterns = {\n  any: [/^v/, /^n/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^K[1234]/i,\n  wide: /^[1234]e kwartaal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan.|feb.|mrt.|apr.|mei|jun.|jul.|aug.|sep.|okt.|nov.|dec.)/i,\n  wide: /^(januari|februari|maart|april|mei|juni|juli|augustus|september|oktober|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^jan/i, /^feb/i, /^m(r|a)/i, /^apr/i, /^mei/i, /^jun/i, /^jul/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[zmdwv]/i,\n  short: /^(zo|ma|di|wo|do|vr|za)/i,\n  abbreviated: /^(zon|maa|din|woe|don|vri|zat)/i,\n  wide: /^(zondag|maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^z/i, /^m/i, /^d/i, /^w/i, /^d/i, /^v/i, /^z/i],\n  any: [/^zo/i, /^ma/i, /^di/i, /^wo/i, /^do/i, /^vr/i, /^za/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|middernacht|het middaguur|'s (ochtends|middags|avonds|nachts))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^am/i,\n    pm: /^pm/i,\n    midnight: /^middernacht/i,\n    noon: /^het middaguur/i,\n    morning: /ochtend/i,\n    afternoon: /middag/i,\n    evening: /avond/i,\n    night: /nacht/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'minder dan een seconde',\n    other: 'minder dan {{count}} seconden'\n  },\n  xSeconds: {\n    one: '1 seconde',\n    other: '{{count}} seconden'\n  },\n  halfAMinute: 'een halve minuut',\n  lessThanXMinutes: {\n    one: 'minder dan een minuut',\n    other: 'minder dan {{count}} minuten'\n  },\n  xMinutes: {\n    one: 'een minuut',\n    other: '{{count}} minuten'\n  },\n  aboutXHours: {\n    one: 'ongeveer 1 uur',\n    other: 'ongeveer {{count}} uur'\n  },\n  xHours: {\n    one: '1 uur',\n    other: '{{count}} uur'\n  },\n  xDays: {\n    one: '1 dag',\n    other: '{{count}} dagen'\n  },\n  aboutXWeeks: {\n    one: 'ongeveer 1 week',\n    other: 'ongeveer {{count}} weken'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weken'\n  },\n  aboutXMonths: {\n    one: 'ongeveer 1 maand',\n    other: 'ongeveer {{count}} maanden'\n  },\n  xMonths: {\n    one: '1 maand',\n    other: '{{count}} maanden'\n  },\n  aboutXYears: {\n    one: 'ongeveer 1 jaar',\n    other: 'ongeveer {{count}} jaar'\n  },\n  xYears: {\n    one: '1 jaar',\n    other: '{{count}} jaar'\n  },\n  overXYears: {\n    one: 'meer dan 1 jaar',\n    other: 'meer dan {{count}} jaar'\n  },\n  almostXYears: {\n    one: 'bijna 1 jaar',\n    other: 'bijna {{count}} jaar'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'over ' + result;\n    } else {\n      return result + ' geleden';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'om' {{time}}\",\n  long: \"{{date}} 'om' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'vorige' eeee 'om' p\",\n  yesterday: \"'gisteren om' p\",\n  today: \"'vandaag om' p\",\n  tomorrow: \"'morgen om' p\",\n  nextWeek: \"eeee 'om' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Dutch locale.\n * @language Dutch\n * @iso-639-2 nld\n * @author Jorik Tangelder [@jtangelder]{@link https://github.com/jtangelder}\n * @author Ruben Stolk [@rubenstolk]{@link https://github.com/rubenstolk}\n * @author Lode Vanhove [@bitcrumb]{@link https://github.com/bitcrumb}\n * @author Alex Hoeing [@dcbn]{@link https://github.com/dcbn}\n */\nvar locale = {\n  code: 'nl-BE',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['v.C.', 'n.C.'],\n  abbreviated: ['v.Chr.', 'n.Chr.'],\n  wide: ['voor Christus', 'na Christus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['K1', 'K2', 'K3', 'K4'],\n  wide: ['1e kwartaal', '2e kwartaal', '3e kwartaal', '4e kwartaal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mrt.', 'apr.', 'mei', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'],\n  wide: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december']\n};\nvar dayValues = {\n  narrow: ['Z', 'M', 'D', 'W', 'D', 'V', 'Z'],\n  short: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n  abbreviated: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],\n  wide: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'het middag',\n    morning: \"'s ochtends\",\n    afternoon: \"'s namiddags\",\n    evening: \"'s avonds\",\n    night: \"'s nachts\"\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'het middag',\n    morning: \"'s ochtends\",\n    afternoon: \"'s namiddags\",\n    evening: \"'s avonds\",\n    night: \"'s nachts\"\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'middernacht',\n    noon: 'het middag',\n    morning: \"'s ochtends\",\n    afternoon: \"'s namiddags\",\n    evening: \"'s avonds\",\n    night: \"'s nachts\"\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'e';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)e?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^([vn]\\.? ?C\\.?)/,\n  abbreviated: /^([vn]\\. ?Chr\\.?)/,\n  wide: /^((voor|na) Christus)/\n};\nvar parseEraPatterns = {\n  any: [/^v/, /^n/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^K[1234]/i,\n  wide: /^[1234]e kwartaal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan.|feb.|mrt.|apr.|mei|jun.|jul.|aug.|sep.|okt.|nov.|dec.)/i,\n  wide: /^(januari|februari|maart|april|mei|juni|juli|augustus|september|oktober|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^jan/i, /^feb/i, /^m(r|a)/i, /^apr/i, /^mei/i, /^jun/i, /^jul/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[zmdwv]/i,\n  short: /^(zo|ma|di|wo|do|vr|za)/i,\n  abbreviated: /^(zon|maa|din|woe|don|vri|zat)/i,\n  wide: /^(zondag|maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^z/i, /^m/i, /^d/i, /^w/i, /^d/i, /^v/i, /^z/i],\n  any: [/^zo/i, /^ma/i, /^di/i, /^wo/i, /^do/i, /^vr/i, /^za/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|middernacht|het middaguur|'s (ochtends|middags|avonds|nachts))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^am/i,\n    pm: /^pm/i,\n    midnight: /^middernacht/i,\n    noon: /^het middaguur/i,\n    morning: /ochtend/i,\n    afternoon: /middag/i,\n    evening: /avond/i,\n    night: /nacht/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mindre enn eitt sekund',\n    other: 'mindre enn {{count}} sekund'\n  },\n  xSeconds: {\n    one: 'eitt sekund',\n    other: '{{count}} sekund'\n  },\n  halfAMinute: 'eit halvt minutt',\n  lessThanXMinutes: {\n    one: 'mindre enn eitt minutt',\n    other: 'mindre enn {{count}} minutt'\n  },\n  xMinutes: {\n    one: 'eitt minutt',\n    other: '{{count}} minutt'\n  },\n  aboutXHours: {\n    one: 'omtrent ein time',\n    other: 'omtrent {{count}} timar'\n  },\n  xHours: {\n    one: 'ein time',\n    other: '{{count}} timar'\n  },\n  xDays: {\n    one: 'ein dag',\n    other: '{{count}} dagar'\n  },\n  aboutXWeeks: {\n    one: 'omtrent ei veke',\n    other: 'omtrent {{count}} veker'\n  },\n  xWeeks: {\n    one: 'ei veke',\n    other: '{{count}} veker'\n  },\n  aboutXMonths: {\n    one: 'omtrent ein månad',\n    other: 'omtrent {{count}} månader'\n  },\n  xMonths: {\n    one: 'ein månad',\n    other: '{{count}} månader'\n  },\n  aboutXYears: {\n    one: 'omtrent eitt år',\n    other: 'omtrent {{count}} år'\n  },\n  xYears: {\n    one: 'eitt år',\n    other: '{{count}} år'\n  },\n  overXYears: {\n    one: 'over eitt år',\n    other: 'over {{count}} år'\n  },\n  almostXYears: {\n    one: 'nesten eitt år',\n    other: 'nesten {{count}} år'\n  }\n};\nvar wordMapping = ['null', 'ein', 'to', 'tre', 'fire', 'fem', 'seks', 'sju', 'åtte', 'ni', 'ti', 'elleve', 'tolv'];\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    if (options && options.onlyNumeric) {\n      result = tokenValue.other.replace('{{count}}', String(count));\n    } else {\n      result = tokenValue.other.replace('{{count}}', count < 13 ? wordMapping[count] : String(count));\n    }\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'om ' + result;\n    } else {\n      return result + ' sidan';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d. MMMM y',\n  long: 'd. MMMM y',\n  medium: 'd. MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: \"'kl'. HH:mm:ss zzzz\",\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'kl.' {{time}}\",\n  long: \"{{date}} 'kl.' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'førre' eeee 'kl.' p\",\n  yesterday: \"'i går kl.' p\",\n  today: \"'i dag kl.' p\",\n  tomorrow: \"'i morgon kl.' p\",\n  nextWeek: \"EEEE 'kl.' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Norwegian Nynorsk locale.\n * @language Norwegian Nynorsk\n * @iso-639-2 nno\n * @author Mats Byrkjeland [@draperunner]{@link https://github.com/draperunner}\n */\nvar locale = {\n  code: 'nn',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['f.Kr.', 'e.Kr.'],\n  abbreviated: ['f.Kr.', 'e.Kr.'],\n  wide: ['før Kristus', 'etter Kristus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mars', 'apr.', 'mai', 'juni', 'juli', 'aug.', 'sep.', 'okt.', 'nov.', 'des.'],\n  wide: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],\n  short: ['su', 'må', 'ty', 'on', 'to', 'fr', 'lau'],\n  abbreviated: ['sun', 'mån', 'tys', 'ons', 'tor', 'fre', 'laur'],\n  wide: ['sundag', 'måndag', 'tysdag', 'onsdag', 'torsdag', 'fredag', 'laurdag']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morg.',\n    afternoon: 'på etterm.',\n    evening: 'på kvelden',\n    night: 'på natta'\n  },\n  abbreviated: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morg.',\n    afternoon: 'på etterm.',\n    evening: 'på kvelden',\n    night: 'på natta'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morgonen',\n    afternoon: 'på ettermiddagen',\n    evening: 'på kvelden',\n    night: 'på natta'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\.?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(f\\.? ?Kr\\.?|fvt\\.?|e\\.? ?Kr\\.?|evt\\.?)/i,\n  abbreviated: /^(f\\.? ?Kr\\.?|fvt\\.?|e\\.? ?Kr\\.?|evt\\.?)/i,\n  wide: /^(før Kristus|før vår tid|etter Kristus|vår tid)/i\n};\nvar parseEraPatterns = {\n  any: [/^f/i, /^e/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](\\.)? kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mars?|apr|mai|juni?|juli?|aug|sep|okt|nov|des)\\.?/i,\n  wide: /^(januar|februar|mars|april|mai|juni|juli|august|september|oktober|november|desember)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^aug/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtofl]/i,\n  short: /^(su|må|ty|on|to|fr|la)/i,\n  abbreviated: /^(sun|mån|tys|ons|tor|fre|laur)/i,\n  wide: /^(sundag|måndag|tysdag|onsdag|torsdag|fredag|laurdag)/i\n};\nvar parseDayPatterns = {\n  any: [/^s/i, /^m/i, /^ty/i, /^o/i, /^to/i, /^f/i, /^l/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(midnatt|middag|(på) (morgonen|ettermiddagen|kvelden|natta)|[ap])/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnatt|middag|(på) (morgonen|ettermiddagen|kvelden|natta))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a(\\.?\\s?m\\.?)?$/i,\n    pm: /^p(\\.?\\s?m\\.?)?$/i,\n    midnight: /^midn/i,\n    noon: /^midd/i,\n    morning: /morgon/i,\n    afternoon: /ettermiddag/i,\n    evening: /kveld/i,\n    night: /natt/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mens d’una segonda',\n    other: 'mens de {{count}} segondas'\n  },\n  xSeconds: {\n    one: '1 segonda',\n    other: '{{count}} segondas'\n  },\n  halfAMinute: '30 segondas',\n  lessThanXMinutes: {\n    one: 'mens d’una minuta',\n    other: 'mens de {{count}} minutas'\n  },\n  xMinutes: {\n    one: '1 minuta',\n    other: '{{count}} minutas'\n  },\n  aboutXHours: {\n    one: 'environ 1 ora',\n    other: 'environ {{count}} oras'\n  },\n  xHours: {\n    one: '1 ora',\n    other: '{{count}} oras'\n  },\n  xDays: {\n    one: '1 jorn',\n    other: '{{count}} jorns'\n  },\n  aboutXWeeks: {\n    one: 'environ 1 setmana',\n    other: 'environ {{count}} setmanas'\n  },\n  xWeeks: {\n    one: '1 setmana',\n    other: '{{count}} setmanas'\n  },\n  aboutXMonths: {\n    one: 'environ 1 mes',\n    other: 'environ {{count}} meses'\n  },\n  xMonths: {\n    one: '1 mes',\n    other: '{{count}} meses'\n  },\n  aboutXYears: {\n    one: 'environ 1 an',\n    other: 'environ {{count}} ans'\n  },\n  xYears: {\n    one: '1 an',\n    other: '{{count}} ans'\n  },\n  overXYears: {\n    one: 'mai d’un an',\n    other: 'mai de {{count}} ans'\n  },\n  almostXYears: {\n    one: 'gaireben un an',\n    other: 'gaireben {{count}} ans'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'd’aquí ' + result;\n    } else {\n      return 'fa ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE d 'de' MMMM y\",\n  long: \"d 'de' MMMM y\",\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'a' {{time}}\",\n  long: \"{{date}} 'a' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'passat a' p\",\n  yesterday: \"'ièr a' p\",\n  today: \"'uèi a' p\",\n  tomorrow: \"'deman a' p\",\n  nextWeek: \"eeee 'a' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Occitan locale.\n * @language Occitan\n * @iso-639-2 oci\n * @author Quentin PAGÈS\n */\nvar locale = {\n  code: 'oc',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ab. J.C.', 'apr. J.C.'],\n  abbreviated: ['ab. J.C.', 'apr. J.C.'],\n  wide: ['abans Jèsus-Crist', 'après Jèsus-Crist']\n};\nvar quarterValues = {\n  narrow: ['T1', 'T2', 'T3', 'T4'],\n  abbreviated: ['1èr trim.', '2nd trim.', '3en trim.', '4en trim.'],\n  wide: ['1èr trimèstre', '2nd trimèstre', '3en trimèstre', '4en trimèstre']\n};\nvar monthValues = {\n  narrow: ['GN', 'FB', 'MÇ', 'AB', 'MA', 'JN', 'JL', 'AG', 'ST', 'OC', 'NV', 'DC'],\n  abbreviated: ['gen.', 'febr.', 'març', 'abr.', 'mai', 'junh', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'dec.'],\n  wide: ['genièr', 'febrièr', 'març', 'abril', 'mai', 'junh', 'julhet', 'agost', 'setembre', 'octòbre', 'novembre', 'decembre']\n};\nvar dayValues = {\n  narrow: ['dg.', 'dl.', 'dm.', 'dc.', 'dj.', 'dv.', 'ds.'],\n  short: ['dg.', 'dl.', 'dm.', 'dc.', 'dj.', 'dv.', 'ds.'],\n  abbreviated: ['dg.', 'dl.', 'dm.', 'dc.', 'dj.', 'dv.', 'ds.'],\n  wide: ['dimenge', 'diluns', 'dimars', 'dimècres', 'dijòus', 'divendres', 'dissabte']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'mièjanuèch',\n    noon: 'miègjorn',\n    morning: 'matin',\n    afternoon: 'aprèp-miègjorn',\n    evening: 'vèspre',\n    night: 'nuèch'\n  },\n  abbreviated: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'mièjanuèch',\n    noon: 'miègjorn',\n    morning: 'matin',\n    afternoon: 'aprèp-miègjorn',\n    evening: 'vèspre',\n    night: 'nuèch'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'mièjanuèch',\n    noon: 'miègjorn',\n    morning: 'matin',\n    afternoon: 'aprèp-miègjorn',\n    evening: 'vèspre',\n    night: 'nuèch'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'mièjanuèch',\n    noon: 'miègjorn',\n    morning: 'del matin',\n    afternoon: 'de l’aprèp-miègjorn',\n    evening: 'del ser',\n    night: 'de la nuèch'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'mièjanuèch',\n    noon: 'miègjorn',\n    morning: 'del matin',\n    afternoon: 'de l’aprèp-miègjorn',\n    evening: 'del ser',\n    night: 'de la nuèch'\n  },\n  wide: {\n    am: 'ante meridiem',\n    pm: 'post meridiem',\n    midnight: 'mièjanuèch',\n    noon: 'miègjorn',\n    morning: 'del matin',\n    afternoon: 'de l’aprèp-miègjorn',\n    evening: 'del ser',\n    night: 'de la nuèch'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  var ordinal;\n  switch (number) {\n    case 1:\n      ordinal = 'èr';\n      break;\n    case 2:\n      ordinal = 'nd';\n      break;\n    default:\n      ordinal = 'en';\n  }\n\n  // feminine for year, week, hour, minute, second\n  if (unit === 'year' || unit === 'week' || unit === 'hour' || unit === 'minute' || unit === 'second') {\n    ordinal += 'a';\n  }\n  return number + ordinal;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(èr|nd|en)?[a]?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ab\\.J\\.C|apr\\.J\\.C|apr\\.J\\.-C)/i,\n  abbreviated: /^(ab\\.J\\.-C|ab\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n  wide: /^(abans Jèsus-Crist|après Jèsus-Crist)/i\n};\nvar parseEraPatterns = {\n  any: [/^ab/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^T[1234]/i,\n  abbreviated: /^[1234](èr|nd|en)? trim\\.?/i,\n  wide: /^[1234](èr|nd|en)? trimèstre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(GN|FB|MÇ|AB|MA|JN|JL|AG|ST|OC|NV|DC)/i,\n  abbreviated: /^(gen|febr|març|abr|mai|junh|jul|ag|set|oct|nov|dec)\\.?/i,\n  wide: /^(genièr|febrièr|març|abril|mai|junh|julhet|agost|setembre|octòbre|novembre|decembre)/i\n};\nvar parseMonthPatterns = {\n  any: [/^g/i, /^f/i, /^ma[r?]|MÇ/i, /^ab/i, /^ma[i?]/i, /^ju[n?]|JN/i, /^ju[l?]|JL/i, /^ag/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^d[glmcjvs]\\.?/i,\n  short: /^d[glmcjvs]\\.?/i,\n  abbreviated: /^d[glmcjvs]\\.?/i,\n  wide: /^(dimenge|diluns|dimars|dimècres|dijòus|divendres|dissabte)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^dg/i, /^dl/i, /^dm/i, /^dc/i, /^dj/i, /^dv/i, /^ds/i],\n  short: [/^dg/i, /^dl/i, /^dm/i, /^dc/i, /^dj/i, /^dv/i, /^ds/i],\n  abbreviated: [/^dg/i, /^dl/i, /^dm/i, /^dc/i, /^dj/i, /^dv/i, /^ds/i],\n  any: [/^dg|dime/i, /^dl|dil/i, /^dm|dima/i, /^dc|dimè/i, /^dj|dij/i, /^dv|div/i, /^ds|dis/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /(^(a\\.?m|p\\.?m))|(ante meridiem|post meridiem)|((del |de la |de l’)(matin|aprèp-miègjorn|vèspre|ser|nuèch))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /(^a)|ante meridiem/i,\n    pm: /(^p)|post meridiem/i,\n    midnight: /^mièj/i,\n    noon: /^mièg/i,\n    morning: /matin/i,\n    afternoon: /aprèp-miègjorn/i,\n    evening: /vèspre|ser/i,\n    night: /nuèch/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      regular: 'mniej niż sekunda',\n      past: 'mniej niż sekundę',\n      future: 'mniej niż sekundę'\n    },\n    twoFour: 'mniej niż {{count}} sekundy',\n    other: 'mniej niż {{count}} sekund'\n  },\n  xSeconds: {\n    one: {\n      regular: 'sekunda',\n      past: 'sekundę',\n      future: 'sekundę'\n    },\n    twoFour: '{{count}} sekundy',\n    other: '{{count}} sekund'\n  },\n  halfAMinute: {\n    one: 'pół minuty',\n    twoFour: 'pół minuty',\n    other: 'pół minuty'\n  },\n  lessThanXMinutes: {\n    one: {\n      regular: 'mniej niż minuta',\n      past: 'mniej niż minutę',\n      future: 'mniej niż minutę'\n    },\n    twoFour: 'mniej niż {{count}} minuty',\n    other: 'mniej niż {{count}} minut'\n  },\n  xMinutes: {\n    one: {\n      regular: 'minuta',\n      past: 'minutę',\n      future: 'minutę'\n    },\n    twoFour: '{{count}} minuty',\n    other: '{{count}} minut'\n  },\n  aboutXHours: {\n    one: {\n      regular: 'około godziny',\n      past: 'około godziny',\n      future: 'około godzinę'\n    },\n    twoFour: 'około {{count}} godziny',\n    other: 'około {{count}} godzin'\n  },\n  xHours: {\n    one: {\n      regular: 'godzina',\n      past: 'godzinę',\n      future: 'godzinę'\n    },\n    twoFour: '{{count}} godziny',\n    other: '{{count}} godzin'\n  },\n  xDays: {\n    one: {\n      regular: 'dzień',\n      past: 'dzień',\n      future: '1 dzień'\n    },\n    twoFour: '{{count}} dni',\n    other: '{{count}} dni'\n  },\n  aboutXWeeks: {\n    one: 'około tygodnia',\n    twoFour: 'około {{count}} tygodni',\n    other: 'około {{count}} tygodni'\n  },\n  xWeeks: {\n    one: 'tydzień',\n    twoFour: '{{count}} tygodnie',\n    other: '{{count}} tygodni'\n  },\n  aboutXMonths: {\n    one: 'około miesiąc',\n    twoFour: 'około {{count}} miesiące',\n    other: 'około {{count}} miesięcy'\n  },\n  xMonths: {\n    one: 'miesiąc',\n    twoFour: '{{count}} miesiące',\n    other: '{{count}} miesięcy'\n  },\n  aboutXYears: {\n    one: 'około rok',\n    twoFour: 'około {{count}} lata',\n    other: 'około {{count}} lat'\n  },\n  xYears: {\n    one: 'rok',\n    twoFour: '{{count}} lata',\n    other: '{{count}} lat'\n  },\n  overXYears: {\n    one: 'ponad rok',\n    twoFour: 'ponad {{count}} lata',\n    other: 'ponad {{count}} lat'\n  },\n  almostXYears: {\n    one: 'prawie rok',\n    twoFour: 'prawie {{count}} lata',\n    other: 'prawie {{count}} lat'\n  }\n};\nfunction declensionGroup(scheme, count) {\n  if (count === 1) {\n    return scheme.one;\n  }\n  var rem100 = count % 100;\n\n  // ends with 11-20\n  if (rem100 <= 20 && rem100 > 10) {\n    return scheme.other;\n  }\n  var rem10 = rem100 % 10;\n\n  // ends with 2, 3, 4\n  if (rem10 >= 2 && rem10 <= 4) {\n    return scheme.twoFour;\n  }\n  return scheme.other;\n}\nfunction declension(scheme, count, time) {\n  var group = declensionGroup(scheme, count);\n  var finalText = typeof group === 'string' ? group : group[time];\n  return finalText.replace('{{count}}', String(count));\n}\nvar formatDistance = function formatDistance(token, count, options) {\n  var scheme = formatDistanceLocale[token];\n  if (!(options !== null && options !== void 0 && options.addSuffix)) {\n    return declension(scheme, count, 'regular');\n  }\n  if (options.comparison && options.comparison > 0) {\n    return 'za ' + declension(scheme, count, 'future');\n  } else {\n    return declension(scheme, count, 'past') + ' temu';\n  }\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, do MMMM y',\n  long: 'do MMMM y',\n  medium: 'do MMM y',\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar adjectivesLastWeek = {\n  masculine: 'ostatni',\n  feminine: 'ostatnia'\n};\nvar adjectivesThisWeek = {\n  masculine: 'ten',\n  feminine: 'ta'\n};\nvar adjectivesNextWeek = {\n  masculine: 'następny',\n  feminine: 'następna'\n};\nvar dayGrammaticalGender = {\n  0: 'feminine',\n  1: 'masculine',\n  2: 'masculine',\n  3: 'feminine',\n  4: 'masculine',\n  5: 'masculine',\n  6: 'feminine'\n};\nfunction dayAndTimeWithAdjective(token, date, baseDate, options) {\n  var adjectives;\n  if (isSameUTCWeek(date, baseDate, options)) {\n    adjectives = adjectivesThisWeek;\n  } else if (token === 'lastWeek') {\n    adjectives = adjectivesLastWeek;\n  } else if (token === 'nextWeek') {\n    adjectives = adjectivesNextWeek;\n  } else {\n    throw new Error(\"Cannot determine adjectives for token \".concat(token));\n  }\n  var day = date.getUTCDay();\n  var grammaticalGender = dayGrammaticalGender[day];\n  var adjective = adjectives[grammaticalGender];\n  return \"'\".concat(adjective, \"' eeee 'o' p\");\n}\nvar formatRelativeLocale = {\n  lastWeek: dayAndTimeWithAdjective,\n  yesterday: \"'wczoraj o' p\",\n  today: \"'dzisiaj o' p\",\n  tomorrow: \"'jutro o' p\",\n  nextWeek: dayAndTimeWithAdjective,\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(token, date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Polish locale.\n * @language Polish\n * @iso-639-2 pol\n * @author Mateusz Derks [@ertrzyiks]{@link https://github.com/ertrzyiks}\n * @author Just RAG [@justrag]{@link https://github.com/justrag}\n * @author Mikolaj Grzyb [@mikolajgrzyb]{@link https://github.com/mikolajgrzyb}\n * @author Mateusz Tokarski [@mutisz]{@link https://github.com/mutisz}\n */\nvar locale = {\n  code: 'pl',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['p.n.e.', 'n.e.'],\n  abbreviated: ['p.n.e.', 'n.e.'],\n  wide: ['przed naszą erą', 'naszej ery']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['I kw.', 'II kw.', 'III kw.', 'IV kw.'],\n  wide: ['I kwartał', 'II kwartał', 'III kwartał', 'IV kwartał']\n};\nvar monthValues = {\n  narrow: ['S', 'L', 'M', 'K', 'M', 'C', 'L', 'S', 'W', 'P', 'L', 'G'],\n  abbreviated: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru'],\n  wide: ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień']\n};\nvar monthFormattingValues = {\n  narrow: ['s', 'l', 'm', 'k', 'm', 'c', 'l', 's', 'w', 'p', 'l', 'g'],\n  abbreviated: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru'],\n  wide: ['stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia']\n};\nvar dayValues = {\n  narrow: ['N', 'P', 'W', 'Ś', 'C', 'P', 'S'],\n  short: ['nie', 'pon', 'wto', 'śro', 'czw', 'pią', 'sob'],\n  abbreviated: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'],\n  wide: ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota']\n};\nvar dayFormattingValues = {\n  narrow: ['n', 'p', 'w', 'ś', 'c', 'p', 's'],\n  short: ['nie', 'pon', 'wto', 'śro', 'czw', 'pią', 'sob'],\n  abbreviated: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'],\n  wide: ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'półn.',\n    noon: 'poł',\n    morning: 'rano',\n    afternoon: 'popoł.',\n    evening: 'wiecz.',\n    night: 'noc'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'północ',\n    noon: 'południe',\n    morning: 'rano',\n    afternoon: 'popołudnie',\n    evening: 'wieczór',\n    night: 'noc'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'północ',\n    noon: 'południe',\n    morning: 'rano',\n    afternoon: 'popołudnie',\n    evening: 'wieczór',\n    night: 'noc'\n  }\n};\nvar dayPeriodFormattingValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'o półn.',\n    noon: 'w poł.',\n    morning: 'rano',\n    afternoon: 'po poł.',\n    evening: 'wiecz.',\n    night: 'w nocy'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'o północy',\n    noon: 'w południe',\n    morning: 'rano',\n    afternoon: 'po południu',\n    evening: 'wieczorem',\n    night: 'w nocy'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'o północy',\n    noon: 'w południe',\n    morning: 'rano',\n    afternoon: 'po południu',\n    evening: 'wieczorem',\n    night: 'w nocy'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: monthFormattingValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide',\n    formattingValues: dayFormattingValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: dayPeriodFormattingValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(p\\.?\\s*n\\.?\\s*e\\.?\\s*|n\\.?\\s*e\\.?\\s*)/i,\n  abbreviated: /^(p\\.?\\s*n\\.?\\s*e\\.?\\s*|n\\.?\\s*e\\.?\\s*)/i,\n  wide: /^(przed\\s*nasz(ą|a)\\s*er(ą|a)|naszej\\s*ery)/i\n};\nvar parseEraPatterns = {\n  any: [/^p/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^(I|II|III|IV)\\s*kw\\.?/i,\n  wide: /^(I|II|III|IV)\\s*kwarta(ł|l)/i\n};\nvar parseQuarterPatterns = {\n  narrow: [/1/i, /2/i, /3/i, /4/i],\n  any: [/^I kw/i, /^II kw/i, /^III kw/i, /^IV kw/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[slmkcwpg]/i,\n  abbreviated: /^(sty|lut|mar|kwi|maj|cze|lip|sie|wrz|pa(ź|z)|lis|gru)/i,\n  wide: /^(stycznia|stycze(ń|n)|lutego|luty|marca|marzec|kwietnia|kwiecie(ń|n)|maja|maj|czerwca|czerwiec|lipca|lipiec|sierpnia|sierpie(ń|n)|wrze(ś|s)nia|wrzesie(ń|n)|pa(ź|z)dziernika|pa(ź|z)dziernik|listopada|listopad|grudnia|grudzie(ń|n))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^s/i, /^l/i, /^m/i, /^k/i, /^m/i, /^c/i, /^l/i, /^s/i, /^w/i, /^p/i, /^l/i, /^g/i],\n  any: [/^st/i, /^lu/i, /^mar/i, /^k/i, /^maj/i, /^c/i, /^lip/i, /^si/i, /^w/i, /^p/i, /^lis/i, /^g/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[npwścs]/i,\n  short: /^(nie|pon|wto|(ś|s)ro|czw|pi(ą|a)|sob)/i,\n  abbreviated: /^(niedz|pon|wt|(ś|s)r|czw|pt|sob)\\.?/i,\n  wide: /^(niedziela|poniedzia(ł|l)ek|wtorek|(ś|s)roda|czwartek|pi(ą|a)tek|sobota)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^n/i, /^p/i, /^w/i, /^ś/i, /^c/i, /^p/i, /^s/i],\n  abbreviated: [/^n/i, /^po/i, /^w/i, /^(ś|s)r/i, /^c/i, /^pt/i, /^so/i],\n  any: [/^n/i, /^po/i, /^w/i, /^(ś|s)r/i, /^c/i, /^pi/i, /^so/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(^a$|^p$|pó(ł|l)n\\.?|o\\s*pó(ł|l)n\\.?|po(ł|l)\\.?|w\\s*po(ł|l)\\.?|po\\s*po(ł|l)\\.?|rano|wiecz\\.?|noc|w\\s*nocy)/i,\n  any: /^(am|pm|pó(ł|l)noc|o\\s*pó(ł|l)nocy|po(ł|l)udnie|w\\s*po(ł|l)udnie|popo(ł|l)udnie|po\\s*po(ł|l)udniu|rano|wieczór|wieczorem|noc|w\\s*nocy)/i\n};\nvar parseDayPeriodPatterns = {\n  narrow: {\n    am: /^a$/i,\n    pm: /^p$/i,\n    midnight: /pó(ł|l)n/i,\n    noon: /po(ł|l)/i,\n    morning: /rano/i,\n    afternoon: /po\\s*po(ł|l)/i,\n    evening: /wiecz/i,\n    night: /noc/i\n  },\n  any: {\n    am: /^am/i,\n    pm: /^pm/i,\n    midnight: /pó(ł|l)n/i,\n    noon: /po(ł|l)/i,\n    morning: /rano/i,\n    afternoon: /po\\s*po(ł|l)/i,\n    evening: /wiecz/i,\n    night: /noc/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'menos de um segundo',\n    other: 'menos de {{count}} segundos'\n  },\n  xSeconds: {\n    one: '1 segundo',\n    other: '{{count}} segundos'\n  },\n  halfAMinute: 'meio minuto',\n  lessThanXMinutes: {\n    one: 'menos de um minuto',\n    other: 'menos de {{count}} minutos'\n  },\n  xMinutes: {\n    one: '1 minuto',\n    other: '{{count}} minutos'\n  },\n  aboutXHours: {\n    one: 'aproximadamente 1 hora',\n    other: 'aproximadamente {{count}} horas'\n  },\n  xHours: {\n    one: '1 hora',\n    other: '{{count}} horas'\n  },\n  xDays: {\n    one: '1 dia',\n    other: '{{count}} dias'\n  },\n  aboutXWeeks: {\n    one: 'aproximadamente 1 semana',\n    other: 'aproximadamente {{count}} semanas'\n  },\n  xWeeks: {\n    one: '1 semana',\n    other: '{{count}} semanas'\n  },\n  aboutXMonths: {\n    one: 'aproximadamente 1 mês',\n    other: 'aproximadamente {{count}} meses'\n  },\n  xMonths: {\n    one: '1 mês',\n    other: '{{count}} meses'\n  },\n  aboutXYears: {\n    one: 'aproximadamente 1 ano',\n    other: 'aproximadamente {{count}} anos'\n  },\n  xYears: {\n    one: '1 ano',\n    other: '{{count}} anos'\n  },\n  overXYears: {\n    one: 'mais de 1 ano',\n    other: 'mais de {{count}} anos'\n  },\n  almostXYears: {\n    one: 'quase 1 ano',\n    other: 'quase {{count}} anos'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'daqui a ' + result;\n    } else {\n      return 'há ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d 'de' MMMM 'de' y\",\n  long: \"d 'de' MMMM 'de' y\",\n  medium: \"d 'de' MMM 'de' y\",\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'às' {{time}}\",\n  long: \"{{date}} 'às' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    var weekday = date.getUTCDay();\n    var last = weekday === 0 || weekday === 6 ? 'último' : 'última';\n    return \"'\" + last + \"' eeee 'às' p\";\n  },\n  yesterday: \"'ontem às' p\",\n  today: \"'hoje às' p\",\n  tomorrow: \"'amanhã às' p\",\n  nextWeek: \"eeee 'às' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Portuguese locale.\n * @language Portuguese\n * @iso-639-2 por\n * @author Dário Freire [@dfreire]{@link https://github.com/dfreire}\n * @author Adrián de la Rosa [@adrm]{@link https://github.com/adrm}\n */\nvar locale = {\n  code: 'pt',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['aC', 'dC'],\n  abbreviated: ['a.C.', 'd.C.'],\n  wide: ['antes de Cristo', 'depois de Cristo']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']\n};\nvar monthValues = {\n  narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'],\n  wide: ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro']\n};\nvar dayValues = {\n  narrow: ['d', 's', 't', 'q', 'q', 's', 's'],\n  short: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n  abbreviated: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n  wide: ['domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'manhã',\n    afternoon: 'tarde',\n    evening: 'noite',\n    night: 'madrugada'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'manhã',\n    afternoon: 'tarde',\n    evening: 'noite',\n    night: 'madrugada'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'manhã',\n    afternoon: 'tarde',\n    evening: 'noite',\n    night: 'madrugada'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'da manhã',\n    afternoon: 'da tarde',\n    evening: 'da noite',\n    night: 'da madrugada'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'da manhã',\n    afternoon: 'da tarde',\n    evening: 'da noite',\n    night: 'da madrugada'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'da manhã',\n    afternoon: 'da tarde',\n    evening: 'da noite',\n    night: 'da madrugada'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'º';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(º|ª)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ac|dc|a|d)/i,\n  abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n  wide: /^(antes de cristo|antes da era comum|depois de cristo|era comum)/i\n};\nvar parseEraPatterns = {\n  any: [/^ac/i, /^dc/i],\n  wide: [/^(antes de cristo|antes da era comum)/i, /^(depois de cristo|era comum)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^[1234](º|ª)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,\n  wide: /^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ab/i, /^mai/i, /^jun/i, /^jul/i, /^ag/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dstq]/i,\n  short: /^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,\n  abbreviated: /^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,\n  wide: /^(domingo|segunda-?\\s?feira|terça-?\\s?feira|quarta-?\\s?feira|quinta-?\\s?feira|sexta-?\\s?feira|s[áa]bado)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^s/i, /^t/i, /^q/i, /^q/i, /^s/i, /^s/i],\n  any: [/^d/i, /^seg/i, /^t/i, /^qua/i, /^qui/i, /^sex/i, /^s[áa]/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|meia-?\\s?noite|meio-?\\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i,\n  any: /^([ap]\\.?\\s?m\\.?|meia-?\\s?noite|meio-?\\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^meia/i,\n    noon: /^meio/i,\n    morning: /manh[ãa]/i,\n    afternoon: /tarde/i,\n    evening: /noite/i,\n    night: /madrugada/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'menos de um segundo',\n    other: 'menos de {{count}} segundos'\n  },\n  xSeconds: {\n    one: '1 segundo',\n    other: '{{count}} segundos'\n  },\n  halfAMinute: 'meio minuto',\n  lessThanXMinutes: {\n    one: 'menos de um minuto',\n    other: 'menos de {{count}} minutos'\n  },\n  xMinutes: {\n    one: '1 minuto',\n    other: '{{count}} minutos'\n  },\n  aboutXHours: {\n    one: 'cerca de 1 hora',\n    other: 'cerca de {{count}} horas'\n  },\n  xHours: {\n    one: '1 hora',\n    other: '{{count}} horas'\n  },\n  xDays: {\n    one: '1 dia',\n    other: '{{count}} dias'\n  },\n  aboutXWeeks: {\n    one: 'cerca de 1 semana',\n    other: 'cerca de {{count}} semanas'\n  },\n  xWeeks: {\n    one: '1 semana',\n    other: '{{count}} semanas'\n  },\n  aboutXMonths: {\n    one: 'cerca de 1 mês',\n    other: 'cerca de {{count}} meses'\n  },\n  xMonths: {\n    one: '1 mês',\n    other: '{{count}} meses'\n  },\n  aboutXYears: {\n    one: 'cerca de 1 ano',\n    other: 'cerca de {{count}} anos'\n  },\n  xYears: {\n    one: '1 ano',\n    other: '{{count}} anos'\n  },\n  overXYears: {\n    one: 'mais de 1 ano',\n    other: 'mais de {{count}} anos'\n  },\n  almostXYears: {\n    one: 'quase 1 ano',\n    other: 'quase {{count}} anos'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'em ' + result;\n    } else {\n      return 'há ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d 'de' MMMM 'de' y\",\n  long: \"d 'de' MMMM 'de' y\",\n  medium: 'd MMM y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'às' {{time}}\",\n  long: \"{{date}} 'às' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    var weekday = date.getUTCDay();\n    var last = weekday === 0 || weekday === 6 ? 'último' : 'última';\n    return \"'\" + last + \"' eeee 'às' p\";\n  },\n  yesterday: \"'ontem às' p\",\n  today: \"'hoje às' p\",\n  tomorrow: \"'amanhã às' p\",\n  nextWeek: \"eeee 'às' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Portuguese locale (Brazil).\n * @language Portuguese\n * @iso-639-2 por\n * @author Lucas Duailibe [@duailibe]{@link https://github.com/duailibe}\n * @author Yago Carballo [@yagocarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n  code: 'pt-BR',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['AC', 'DC'],\n  abbreviated: ['AC', 'DC'],\n  wide: ['antes de cristo', 'depois de cristo']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']\n};\nvar monthValues = {\n  narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'],\n  wide: ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro']\n};\nvar dayValues = {\n  narrow: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],\n  short: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sab'],\n  abbreviated: ['domingo', 'segunda', 'terça', 'quarta', 'quinta', 'sexta', 'sábado'],\n  wide: ['domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'manhã',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noite'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'manhã',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noite'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'manhã',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noite'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'da manhã',\n    afternoon: 'da tarde',\n    evening: 'da tarde',\n    night: 'da noite'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'da manhã',\n    afternoon: 'da tarde',\n    evening: 'da tarde',\n    night: 'da noite'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'meia-noite',\n    noon: 'meio-dia',\n    morning: 'da manhã',\n    afternoon: 'da tarde',\n    evening: 'da tarde',\n    night: 'da noite'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  if ((options === null || options === void 0 ? void 0 : options.unit) === 'week') {\n    return number + 'ª';\n  }\n  return number + 'º';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)[ºªo]?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ac|dc|a|d)/i,\n  abbreviated: /^(a\\.?\\s?c\\.?|d\\.?\\s?c\\.?)/i,\n  wide: /^(antes de cristo|depois de cristo)/i\n};\nvar parseEraPatterns = {\n  any: [/^ac/i, /^dc/i],\n  wide: [/^antes de cristo/i, /^depois de cristo/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^[1234](º)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmajsond]/i,\n  abbreviated: /^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,\n  wide: /^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^fev/i, /^mar/i, /^abr/i, /^mai/i, /^jun/i, /^jul/i, /^ago/i, /^set/i, /^out/i, /^nov/i, /^dez/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(dom|[23456]ª?|s[aá]b)/i,\n  short: /^(dom|[23456]ª?|s[aá]b)/i,\n  abbreviated: /^(dom|seg|ter|qua|qui|sex|s[aá]b)/i,\n  wide: /^(domingo|(segunda|ter[cç]a|quarta|quinta|sexta)([- ]feira)?|s[aá]bado)/i\n};\nvar parseDayPatterns = {\n  short: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],\n  narrow: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],\n  any: [/^d/i, /^seg/i, /^t/i, /^qua/i, /^qui/i, /^sex/i, /^s[aá]b/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mn|md|(da) (manhã|tarde|noite))/i,\n  any: /^([ap]\\.?\\s?m\\.?|meia[-\\s]noite|meio[-\\s]dia|(da) (manhã|tarde|noite))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mn|^meia[-\\s]noite/i,\n    noon: /^md|^meio[-\\s]dia/i,\n    morning: /manhã/i,\n    afternoon: /tarde/i,\n    evening: /tarde/i,\n    night: /noite/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mai puțin de o secundă',\n    other: 'mai puțin de {{count}} secunde'\n  },\n  xSeconds: {\n    one: '1 secundă',\n    other: '{{count}} secunde'\n  },\n  halfAMinute: 'jumătate de minut',\n  lessThanXMinutes: {\n    one: 'mai puțin de un minut',\n    other: 'mai puțin de {{count}} minute'\n  },\n  xMinutes: {\n    one: '1 minut',\n    other: '{{count}} minute'\n  },\n  aboutXHours: {\n    one: 'circa 1 oră',\n    other: 'circa {{count}} ore'\n  },\n  xHours: {\n    one: '1 oră',\n    other: '{{count}} ore'\n  },\n  xDays: {\n    one: '1 zi',\n    other: '{{count}} zile'\n  },\n  aboutXWeeks: {\n    one: 'circa o săptămână',\n    other: 'circa {{count}} săptămâni'\n  },\n  xWeeks: {\n    one: '1 săptămână',\n    other: '{{count}} săptămâni'\n  },\n  aboutXMonths: {\n    one: 'circa 1 lună',\n    other: 'circa {{count}} luni'\n  },\n  xMonths: {\n    one: '1 lună',\n    other: '{{count}} luni'\n  },\n  aboutXYears: {\n    one: 'circa 1 an',\n    other: 'circa {{count}} ani'\n  },\n  xYears: {\n    one: '1 an',\n    other: '{{count}} ani'\n  },\n  overXYears: {\n    one: 'peste 1 an',\n    other: 'peste {{count}} ani'\n  },\n  almostXYears: {\n    one: 'aproape 1 an',\n    other: 'aproape {{count}} ani'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'în ' + result;\n    } else {\n      return result + ' în urmă';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d MMMM yyyy',\n  long: 'd MMMM yyyy',\n  medium: 'd MMM yyyy',\n  short: 'dd.MM.yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'la' {{time}}\",\n  long: \"{{date}} 'la' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'trecută la' p\",\n  yesterday: \"'ieri la' p\",\n  today: \"'astăzi la' p\",\n  tomorrow: \"'mâine la' p\",\n  nextWeek: \"eeee 'viitoare la' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Romanian locale.\n * @language Romanian\n * @iso-639-2 ron\n * @author Sergiu Munteanu [@jsergiu]{@link https://github.com/jsergiu}\n * @author Adrian Ocneanu [@aocneanu]{@link https://github.com/aocneanu}\n * @author Mihai Ocneanu [@gandesc]{@link https://github.com/gandesc}\n */\nvar locale = {\n  code: 'ro',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['Î', 'D'],\n  abbreviated: ['Î.d.C.', 'D.C.'],\n  wide: ['Înainte de Cristos', 'După Cristos']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['primul trimestru', 'al doilea trimestru', 'al treilea trimestru', 'al patrulea trimestru']\n};\nvar monthValues = {\n  narrow: ['I', 'F', 'M', 'A', 'M', 'I', 'I', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['ian', 'feb', 'mar', 'apr', 'mai', 'iun', 'iul', 'aug', 'sep', 'oct', 'noi', 'dec'],\n  wide: ['ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie', 'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie']\n};\nvar dayValues = {\n  narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n  short: ['du', 'lu', 'ma', 'mi', 'jo', 'vi', 'sâ'],\n  abbreviated: ['dum', 'lun', 'mar', 'mie', 'joi', 'vin', 'sâm'],\n  wide: ['duminică', 'luni', 'marți', 'miercuri', 'joi', 'vineri', 'sâmbătă']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'ami',\n    morning: 'dim',\n    afternoon: 'da',\n    evening: 's',\n    night: 'n'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'miezul nopții',\n    noon: 'amiază',\n    morning: 'dimineață',\n    afternoon: 'după-amiază',\n    evening: 'seară',\n    night: 'noapte'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'miezul nopții',\n    noon: 'amiază',\n    morning: 'dimineață',\n    afternoon: 'după-amiază',\n    evening: 'seară',\n    night: 'noapte'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'amiază',\n    morning: 'dimineață',\n    afternoon: 'după-amiază',\n    evening: 'seară',\n    night: 'noapte'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'miezul nopții',\n    noon: 'amiază',\n    morning: 'dimineață',\n    afternoon: 'după-amiază',\n    evening: 'seară',\n    night: 'noapte'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'miezul nopții',\n    noon: 'amiază',\n    morning: 'dimineață',\n    afternoon: 'după-amiază',\n    evening: 'seară',\n    night: 'noapte'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(Î|D)/i,\n  abbreviated: /^(Î\\.?\\s?d\\.?\\s?C\\.?|Î\\.?\\s?e\\.?\\s?n\\.?|D\\.?\\s?C\\.?|e\\.?\\s?n\\.?)/i,\n  wide: /^(Înainte de Cristos|Înaintea erei noastre|După Cristos|Era noastră)/i\n};\nvar parseEraPatterns = {\n  any: [/^ÎC/i, /^DC/i],\n  wide: [/^(Înainte de Cristos|Înaintea erei noastre)/i, /^(După Cristos|Era noastră)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^trimestrul [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[ifmaasond]/i,\n  abbreviated: /^(ian|feb|mar|apr|mai|iun|iul|aug|sep|oct|noi|dec)/i,\n  wide: /^(ianuarie|februarie|martie|aprilie|mai|iunie|iulie|august|septembrie|octombrie|noiembrie|decembrie)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^i/i, /^f/i, /^m/i, /^a/i, /^m/i, /^i/i, /^i/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ia/i, /^f/i, /^mar/i, /^ap/i, /^mai/i, /^iun/i, /^iul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmjvs]/i,\n  short: /^(d|l|ma|mi|j|v|s)/i,\n  abbreviated: /^(dum|lun|mar|mie|jo|vi|sâ)/i,\n  wide: /^(duminica|luni|marţi|miercuri|joi|vineri|sâmbătă)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n  any: [/^d/i, /^l/i, /^ma/i, /^mi/i, /^j/i, /^v/i, /^s/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mn|a|(dimineaţa|după-amiaza|seara|noaptea))/i,\n  any: /^([ap]\\.?\\s?m\\.?|miezul nopții|amiaza|(dimineaţa|după-amiaza|seara|noaptea))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mn/i,\n    noon: /amiaza/i,\n    morning: /dimineaţa/i,\n    afternoon: /după-amiaza/i,\n    evening: /seara/i,\n    night: /noaptea/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function declension(scheme, count) {\n  // scheme for count=1 exists\n  if (scheme.one !== undefined && count === 1) {\n    return scheme.one;\n  }\n  var rem10 = count % 10;\n  var rem100 = count % 100;\n\n  // 1, 21, 31, ...\n  if (rem10 === 1 && rem100 !== 11) {\n    return scheme.singularNominative.replace('{{count}}', String(count));\n\n    // 2, 3, 4, 22, 23, 24, 32 ...\n  } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {\n    return scheme.singularGenitive.replace('{{count}}', String(count));\n\n    // 5, 6, 7, 8, 9, 10, 11, ...\n  } else {\n    return scheme.pluralGenitive.replace('{{count}}', String(count));\n  }\n}\nfunction buildLocalizeTokenFn(scheme) {\n  return function (count, options) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        if (scheme.future) {\n          return declension(scheme.future, count);\n        } else {\n          return 'через ' + declension(scheme.regular, count);\n        }\n      } else {\n        if (scheme.past) {\n          return declension(scheme.past, count);\n        } else {\n          return declension(scheme.regular, count) + ' назад';\n        }\n      }\n    } else {\n      return declension(scheme.regular, count);\n    }\n  };\n}\nvar formatDistanceLocale = {\n  lessThanXSeconds: buildLocalizeTokenFn({\n    regular: {\n      one: 'меньше секунды',\n      singularNominative: 'меньше {{count}} секунды',\n      singularGenitive: 'меньше {{count}} секунд',\n      pluralGenitive: 'меньше {{count}} секунд'\n    },\n    future: {\n      one: 'меньше, чем через секунду',\n      singularNominative: 'меньше, чем через {{count}} секунду',\n      singularGenitive: 'меньше, чем через {{count}} секунды',\n      pluralGenitive: 'меньше, чем через {{count}} секунд'\n    }\n  }),\n  xSeconds: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} секунда',\n      singularGenitive: '{{count}} секунды',\n      pluralGenitive: '{{count}} секунд'\n    },\n    past: {\n      singularNominative: '{{count}} секунду назад',\n      singularGenitive: '{{count}} секунды назад',\n      pluralGenitive: '{{count}} секунд назад'\n    },\n    future: {\n      singularNominative: 'через {{count}} секунду',\n      singularGenitive: 'через {{count}} секунды',\n      pluralGenitive: 'через {{count}} секунд'\n    }\n  }),\n  halfAMinute: function halfAMinute(_count, options) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        return 'через полминуты';\n      } else {\n        return 'полминуты назад';\n      }\n    }\n    return 'полминуты';\n  },\n  lessThanXMinutes: buildLocalizeTokenFn({\n    regular: {\n      one: 'меньше минуты',\n      singularNominative: 'меньше {{count}} минуты',\n      singularGenitive: 'меньше {{count}} минут',\n      pluralGenitive: 'меньше {{count}} минут'\n    },\n    future: {\n      one: 'меньше, чем через минуту',\n      singularNominative: 'меньше, чем через {{count}} минуту',\n      singularGenitive: 'меньше, чем через {{count}} минуты',\n      pluralGenitive: 'меньше, чем через {{count}} минут'\n    }\n  }),\n  xMinutes: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} минута',\n      singularGenitive: '{{count}} минуты',\n      pluralGenitive: '{{count}} минут'\n    },\n    past: {\n      singularNominative: '{{count}} минуту назад',\n      singularGenitive: '{{count}} минуты назад',\n      pluralGenitive: '{{count}} минут назад'\n    },\n    future: {\n      singularNominative: 'через {{count}} минуту',\n      singularGenitive: 'через {{count}} минуты',\n      pluralGenitive: 'через {{count}} минут'\n    }\n  }),\n  aboutXHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'около {{count}} часа',\n      singularGenitive: 'около {{count}} часов',\n      pluralGenitive: 'около {{count}} часов'\n    },\n    future: {\n      singularNominative: 'приблизительно через {{count}} час',\n      singularGenitive: 'приблизительно через {{count}} часа',\n      pluralGenitive: 'приблизительно через {{count}} часов'\n    }\n  }),\n  xHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} час',\n      singularGenitive: '{{count}} часа',\n      pluralGenitive: '{{count}} часов'\n    }\n  }),\n  xDays: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} день',\n      singularGenitive: '{{count}} дня',\n      pluralGenitive: '{{count}} дней'\n    }\n  }),\n  aboutXWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'около {{count}} недели',\n      singularGenitive: 'около {{count}} недель',\n      pluralGenitive: 'около {{count}} недель'\n    },\n    future: {\n      singularNominative: 'приблизительно через {{count}} неделю',\n      singularGenitive: 'приблизительно через {{count}} недели',\n      pluralGenitive: 'приблизительно через {{count}} недель'\n    }\n  }),\n  xWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} неделя',\n      singularGenitive: '{{count}} недели',\n      pluralGenitive: '{{count}} недель'\n    }\n  }),\n  aboutXMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'около {{count}} месяца',\n      singularGenitive: 'около {{count}} месяцев',\n      pluralGenitive: 'около {{count}} месяцев'\n    },\n    future: {\n      singularNominative: 'приблизительно через {{count}} месяц',\n      singularGenitive: 'приблизительно через {{count}} месяца',\n      pluralGenitive: 'приблизительно через {{count}} месяцев'\n    }\n  }),\n  xMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} месяц',\n      singularGenitive: '{{count}} месяца',\n      pluralGenitive: '{{count}} месяцев'\n    }\n  }),\n  aboutXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'около {{count}} года',\n      singularGenitive: 'около {{count}} лет',\n      pluralGenitive: 'около {{count}} лет'\n    },\n    future: {\n      singularNominative: 'приблизительно через {{count}} год',\n      singularGenitive: 'приблизительно через {{count}} года',\n      pluralGenitive: 'приблизительно через {{count}} лет'\n    }\n  }),\n  xYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} год',\n      singularGenitive: '{{count}} года',\n      pluralGenitive: '{{count}} лет'\n    }\n  }),\n  overXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'больше {{count}} года',\n      singularGenitive: 'больше {{count}} лет',\n      pluralGenitive: 'больше {{count}} лет'\n    },\n    future: {\n      singularNominative: 'больше, чем через {{count}} год',\n      singularGenitive: 'больше, чем через {{count}} года',\n      pluralGenitive: 'больше, чем через {{count}} лет'\n    }\n  }),\n  almostXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'почти {{count}} год',\n      singularGenitive: 'почти {{count}} года',\n      pluralGenitive: 'почти {{count}} лет'\n    },\n    future: {\n      singularNominative: 'почти через {{count}} год',\n      singularGenitive: 'почти через {{count}} года',\n      pluralGenitive: 'почти через {{count}} лет'\n    }\n  })\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  return formatDistanceLocale[token](count, options);\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d MMMM y 'г.'\",\n  long: \"d MMMM y 'г.'\",\n  medium: \"d MMM y 'г.'\",\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar accusativeWeekdays = ['воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу'];\nfunction _lastWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n      return \"'в прошлое \" + weekday + \" в' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'в прошлый \" + weekday + \" в' p\";\n    case 3:\n    case 5:\n    case 6:\n      return \"'в прошлую \" + weekday + \" в' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  if (day === 2 /* Tue */) {\n    return \"'во \" + weekday + \" в' p\";\n  } else {\n    return \"'в \" + weekday + \" в' p\";\n  }\n}\nfunction _nextWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n      return \"'в следующее \" + weekday + \" в' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'в следующий \" + weekday + \" в' p\";\n    case 3:\n    case 5:\n    case 6:\n      return \"'в следующую \" + weekday + \" в' p\";\n  }\n}\nvar formatRelativeLocale = {\n  lastWeek: function lastWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _lastWeek(day);\n    }\n  },\n  yesterday: \"'вчера в' p\",\n  today: \"'сегодня в' p\",\n  tomorrow: \"'завтра в' p\",\n  nextWeek: function nextWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _nextWeek(day);\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Russian locale.\n * @language Russian\n * @iso-639-2 rus\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  code: 'ru',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['до н.э.', 'н.э.'],\n  abbreviated: ['до н. э.', 'н. э.'],\n  wide: ['до нашей эры', 'нашей эры']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-й кв.', '2-й кв.', '3-й кв.', '4-й кв.'],\n  wide: ['1-й квартал', '2-й квартал', '3-й квартал', '4-й квартал']\n};\nvar monthValues = {\n  narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],\n  abbreviated: ['янв.', 'фев.', 'март', 'апр.', 'май', 'июнь', 'июль', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'],\n  wide: ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь']\n};\nvar formattingMonthValues = {\n  narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],\n  abbreviated: ['янв.', 'фев.', 'мар.', 'апр.', 'мая', 'июн.', 'июл.', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'],\n  wide: ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря']\n};\nvar dayValues = {\n  narrow: ['В', 'П', 'В', 'С', 'Ч', 'П', 'С'],\n  short: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n  abbreviated: ['вск', 'пнд', 'втр', 'срд', 'чтв', 'птн', 'суб'],\n  wide: ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'полн.',\n    noon: 'полд.',\n    morning: 'утро',\n    afternoon: 'день',\n    evening: 'веч.',\n    night: 'ночь'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'полн.',\n    noon: 'полд.',\n    morning: 'утро',\n    afternoon: 'день',\n    evening: 'веч.',\n    night: 'ночь'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'полночь',\n    noon: 'полдень',\n    morning: 'утро',\n    afternoon: 'день',\n    evening: 'вечер',\n    night: 'ночь'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'полн.',\n    noon: 'полд.',\n    morning: 'утра',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночи'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'полн.',\n    noon: 'полд.',\n    morning: 'утра',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночи'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'полночь',\n    noon: 'полдень',\n    morning: 'утра',\n    afternoon: 'дня',\n    evening: 'вечера',\n    night: 'ночи'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  var suffix;\n  if (unit === 'date') {\n    suffix = '-е';\n  } else if (unit === 'week' || unit === 'minute' || unit === 'second') {\n    suffix = '-я';\n  } else {\n    suffix = '-й';\n  }\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'any',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((до )?н\\.?\\s?э\\.?)/i,\n  abbreviated: /^((до )?н\\.?\\s?э\\.?)/i,\n  wide: /^(до нашей эры|нашей эры|наша эра)/i\n};\nvar parseEraPatterns = {\n  any: [/^д/i, /^н/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?[ыои]?й?)? кв.?/i,\n  wide: /^[1234](-?[ыои]?й?)? квартал/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[яфмаисонд]/i,\n  abbreviated: /^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)\\.?/i,\n  wide: /^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^я/i, /^ф/i, /^м/i, /^а/i, /^м/i, /^и/i, /^и/i, /^а/i, /^с/i, /^о/i, /^н/i, /^я/i],\n  any: [/^я/i, /^ф/i, /^мар/i, /^ап/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^ав/i, /^с/i, /^о/i, /^н/i, /^д/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[впсч]/i,\n  short: /^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\\.?/i,\n  abbreviated: /^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,\n  wide: /^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i\n};\nvar parseDayPatterns = {\n  narrow: [/^в/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n  any: [/^в[ос]/i, /^п[он]/i, /^в/i, /^ср/i, /^ч/i, /^п[ят]/i, /^с[уб]/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^([дп]п|полн\\.?|полд\\.?|утр[оа]|день|дня|веч\\.?|ноч[ьи])/i,\n  abbreviated: /^([дп]п|полн\\.?|полд\\.?|утр[оа]|день|дня|веч\\.?|ноч[ьи])/i,\n  wide: /^([дп]п|полночь|полдень|утр[оа]|день|дня|вечера?|ноч[ьи])/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^дп/i,\n    pm: /^пп/i,\n    midnight: /^полн/i,\n    noon: /^полд/i,\n    morning: /^у/i,\n    afternoon: /^д[ен]/i,\n    evening: /^в/i,\n    night: /^н/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function declensionGroup(scheme, count) {\n  if (count === 1 && scheme.one) {\n    return scheme.one;\n  }\n  if (count >= 2 && count <= 4 && scheme.twoFour) {\n    return scheme.twoFour;\n  }\n\n  // if count === null || count === 0 || count >= 5\n  return scheme.other;\n}\nfunction declension(scheme, count, time) {\n  var group = declensionGroup(scheme, count);\n  var finalText = group[time];\n  return finalText.replace('{{count}}', String(count));\n}\nfunction extractPreposition(token) {\n  var result = ['lessThan', 'about', 'over', 'almost'].filter(function (preposition) {\n    return !!token.match(new RegExp('^' + preposition));\n  });\n  return result[0];\n}\nfunction prefixPreposition(preposition) {\n  var translation = '';\n  if (preposition === 'almost') {\n    translation = 'takmer';\n  }\n  if (preposition === 'about') {\n    translation = 'približne';\n  }\n  return translation.length > 0 ? translation + ' ' : '';\n}\nfunction suffixPreposition(preposition) {\n  var translation = '';\n  if (preposition === 'lessThan') {\n    translation = 'menej než';\n  }\n  if (preposition === 'over') {\n    translation = 'viac než';\n  }\n  return translation.length > 0 ? translation + ' ' : '';\n}\nfunction lowercaseFirstLetter(string) {\n  return string.charAt(0).toLowerCase() + string.slice(1);\n}\nvar formatDistanceLocale = {\n  xSeconds: {\n    one: {\n      present: 'sekunda',\n      past: 'sekundou',\n      future: 'sekundu'\n    },\n    twoFour: {\n      present: '{{count}} sekundy',\n      past: '{{count}} sekundami',\n      future: '{{count}} sekundy'\n    },\n    other: {\n      present: '{{count}} sekúnd',\n      past: '{{count}} sekundami',\n      future: '{{count}} sekúnd'\n    }\n  },\n  halfAMinute: {\n    other: {\n      present: 'pol minúty',\n      past: 'pol minútou',\n      future: 'pol minúty'\n    }\n  },\n  xMinutes: {\n    one: {\n      present: 'minúta',\n      past: 'minútou',\n      future: 'minútu'\n    },\n    twoFour: {\n      present: '{{count}} minúty',\n      past: '{{count}} minútami',\n      future: '{{count}} minúty'\n    },\n    other: {\n      present: '{{count}} minút',\n      past: '{{count}} minútami',\n      future: '{{count}} minút'\n    }\n  },\n  xHours: {\n    one: {\n      present: 'hodina',\n      past: 'hodinou',\n      future: 'hodinu'\n    },\n    twoFour: {\n      present: '{{count}} hodiny',\n      past: '{{count}} hodinami',\n      future: '{{count}} hodiny'\n    },\n    other: {\n      present: '{{count}} hodín',\n      past: '{{count}} hodinami',\n      future: '{{count}} hodín'\n    }\n  },\n  xDays: {\n    one: {\n      present: 'deň',\n      past: 'dňom',\n      future: 'deň'\n    },\n    twoFour: {\n      present: '{{count}} dni',\n      past: '{{count}} dňami',\n      future: '{{count}} dni'\n    },\n    other: {\n      present: '{{count}} dní',\n      past: '{{count}} dňami',\n      future: '{{count}} dní'\n    }\n  },\n  xWeeks: {\n    one: {\n      present: 'týždeň',\n      past: 'týždňom',\n      future: 'týždeň'\n    },\n    twoFour: {\n      present: '{{count}} týždne',\n      past: '{{count}} týždňami',\n      future: '{{count}} týždne'\n    },\n    other: {\n      present: '{{count}} týždňov',\n      past: '{{count}} týždňami',\n      future: '{{count}} týždňov'\n    }\n  },\n  xMonths: {\n    one: {\n      present: 'mesiac',\n      past: 'mesiacom',\n      future: 'mesiac'\n    },\n    twoFour: {\n      present: '{{count}} mesiace',\n      past: '{{count}} mesiacmi',\n      future: '{{count}} mesiace'\n    },\n    other: {\n      present: '{{count}} mesiacov',\n      past: '{{count}} mesiacmi',\n      future: '{{count}} mesiacov'\n    }\n  },\n  xYears: {\n    one: {\n      present: 'rok',\n      past: 'rokom',\n      future: 'rok'\n    },\n    twoFour: {\n      present: '{{count}} roky',\n      past: '{{count}} rokmi',\n      future: '{{count}} roky'\n    },\n    other: {\n      present: '{{count}} rokov',\n      past: '{{count}} rokmi',\n      future: '{{count}} rokov'\n    }\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var preposition = extractPreposition(token) || '';\n  var key = lowercaseFirstLetter(token.substring(preposition.length));\n  var scheme = formatDistanceLocale[key];\n  if (!(options !== null && options !== void 0 && options.addSuffix)) {\n    return prefixPreposition(preposition) + suffixPreposition(preposition) + declension(scheme, count, 'present');\n  }\n  if (options.comparison && options.comparison > 0) {\n    return prefixPreposition(preposition) + 'o ' + suffixPreposition(preposition) + declension(scheme, count, 'future');\n  } else {\n    return prefixPreposition(preposition) + 'pred ' + suffixPreposition(preposition) + declension(scheme, count, 'past');\n  }\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\"; // https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1986\nvar dateFormats = {\n  full: 'EEEE d. MMMM y',\n  long: 'd. MMMM y',\n  medium: 'd. M. y',\n  short: 'd. M. y'\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#2149\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1994\nvar dateTimeFormats = {\n  full: '{{date}}, {{time}}',\n  long: '{{date}}, {{time}}',\n  medium: '{{date}}, {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\n// https://www.unicode.org/cldr/charts/32/summary/sk.html?hide#1308\nvar accusativeWeekdays = ['nedeľu', 'pondelok', 'utorok', 'stredu', 'štvrtok', 'piatok', 'sobotu'];\nfunction _lastWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0: /* Sun */\n    case 3: /* Wed */\n    case 6 /* Sat */:\n      return \"'minulú \" + weekday + \" o' p\";\n    default:\n      return \"'minulý' eeee 'o' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  if (day === 4 /* Thu */) {\n    return \"'vo' eeee 'o' p\";\n  } else {\n    return \"'v \" + weekday + \" o' p\";\n  }\n}\nfunction _nextWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0: /* Sun */\n    case 4: /* Wed */\n    case 6 /* Sat */:\n      return \"'budúcu \" + weekday + \" o' p\";\n    default:\n      return \"'budúci' eeee 'o' p\";\n  }\n}\nvar formatRelativeLocale = {\n  lastWeek: function lastWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _lastWeek(day);\n    }\n  },\n  yesterday: \"'včera o' p\",\n  today: \"'dnes o' p\",\n  tomorrow: \"'zajtra o' p\",\n  nextWeek: function nextWeek(date, baseDate, options) {\n    var day = date.getUTCDay();\n    if (isSameUTCWeek(date, baseDate, options)) {\n      return thisWeek(day);\n    } else {\n      return _nextWeek(day);\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Slovak locale.\n * @language Slovak\n * @iso-639-2 slk\n * @author Marek Suscak [@mareksuscak]{@link https://github.com/mareksuscak}\n */\nvar locale = {\n  code: 'sk',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // https://www.unicode.org/cldr/charts/32/summary/sk.html#1772\nvar eraValues = {\n  narrow: ['pred Kr.', 'po Kr.'],\n  abbreviated: ['pred Kr.', 'po Kr.'],\n  wide: ['pred Kristom', 'po Kristovi']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sk.html#1780\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1. štvrťrok', '2. štvrťrok', '3. štvrťrok', '4. štvrťrok']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sk.html#1804\nvar monthValues = {\n  narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'máj', 'jún', 'júl', 'aug', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['január', 'február', 'marec', 'apríl', 'máj', 'jún', 'júl', 'august', 'september', 'október', 'november', 'december']\n};\nvar formattingMonthValues = {\n  narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'máj', 'jún', 'júl', 'aug', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['januára', 'februára', 'marca', 'apríla', 'mája', 'júna', 'júla', 'augusta', 'septembra', 'októbra', 'novembra', 'decembra']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sk.html#1876\nvar dayValues = {\n  narrow: ['n', 'p', 'u', 's', 'š', 'p', 's'],\n  short: ['ne', 'po', 'ut', 'st', 'št', 'pi', 'so'],\n  abbreviated: ['ne', 'po', 'ut', 'st', 'št', 'pi', 'so'],\n  wide: ['nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sk.html#1932\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'poln.',\n    noon: 'pol.',\n    morning: 'ráno',\n    afternoon: 'pop.',\n    evening: 'več.',\n    night: 'noc'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'poln.',\n    noon: 'pol.',\n    morning: 'ráno',\n    afternoon: 'popol.',\n    evening: 'večer',\n    night: 'noc'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'polnoc',\n    noon: 'poludnie',\n    morning: 'ráno',\n    afternoon: 'popoludnie',\n    evening: 'večer',\n    night: 'noc'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'o poln.',\n    noon: 'nap.',\n    morning: 'ráno',\n    afternoon: 'pop.',\n    evening: 'več.',\n    night: 'v n.'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'o poln.',\n    noon: 'napol.',\n    morning: 'ráno',\n    afternoon: 'popol.',\n    evening: 'večer',\n    night: 'v noci'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'o polnoci',\n    noon: 'napoludnie',\n    morning: 'ráno',\n    afternoon: 'popoludní',\n    evening: 'večer',\n    night: 'v noci'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\.?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(pred Kr\\.|pred n\\. l\\.|po Kr\\.|n\\. l\\.)/i,\n  abbreviated: /^(pred Kr\\.|pred n\\. l\\.|po Kr\\.|n\\. l\\.)/i,\n  wide: /^(pred Kristom|pred na[šs][íi]m letopo[čc]tom|po Kristovi|n[áa][šs]ho letopo[čc]tu)/i\n};\nvar parseEraPatterns = {\n  any: [/^pr/i, /^(po|n)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234]\\. [šs]tvr[ťt]rok/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|m[áa]j|j[úu]n|j[úu]l|aug|sep|okt|nov|dec)/i,\n  wide: /^(janu[áa]ra?|febru[áa]ra?|(marec|marca)|apr[íi]la?|m[áa]ja?|j[úu]na?|j[úu]la?|augusta?|(september|septembra)|(okt[óo]ber|okt[óo]bra)|(november|novembra)|(december|decembra))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^m[áa]j/i, /^j[úu]n/i, /^j[úu]l/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[npusšp]/i,\n  short: /^(ne|po|ut|st|št|pi|so)/i,\n  abbreviated: /^(ne|po|ut|st|št|pi|so)/i,\n  wide: /^(nede[ľl]a|pondelok|utorok|streda|[šs]tvrtok|piatok|sobota])/i\n};\nvar parseDayPatterns = {\n  narrow: [/^n/i, /^p/i, /^u/i, /^s/i, /^š/i, /^p/i, /^s/i],\n  any: [/^n/i, /^po/i, /^u/i, /^st/i, /^(št|stv)/i, /^pi/i, /^so/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(am|pm|(o )?poln\\.?|(nap\\.?|pol\\.?)|r[áa]no|pop\\.?|ve[čc]\\.?|(v n\\.?|noc))/i,\n  abbreviated: /^(am|pm|(o )?poln\\.?|(napol\\.?|pol\\.?)|r[áa]no|pop\\.?|ve[čc]er|(v )?noci?)/i,\n  any: /^(am|pm|(o )?polnoci?|(na)?poludnie|r[áa]no|popoludn(ie|í|i)|ve[čc]er|(v )?noci?)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^am/i,\n    pm: /^pm/i,\n    midnight: /poln/i,\n    noon: /^(nap|(na)?pol(\\.|u))/i,\n    morning: /^r[áa]no/i,\n    afternoon: /^pop/i,\n    evening: /^ve[čc]/i,\n    night: /^(noc|v n\\.)/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function isPluralType(val) {\n  return val.one !== undefined;\n}\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    present: {\n      one: 'manj kot {{count}} sekunda',\n      two: 'manj kot {{count}} sekundi',\n      few: 'manj kot {{count}} sekunde',\n      other: 'manj kot {{count}} sekund'\n    },\n    past: {\n      one: 'manj kot {{count}} sekundo',\n      two: 'manj kot {{count}} sekundama',\n      few: 'manj kot {{count}} sekundami',\n      other: 'manj kot {{count}} sekundami'\n    },\n    future: {\n      one: 'manj kot {{count}} sekundo',\n      two: 'manj kot {{count}} sekundi',\n      few: 'manj kot {{count}} sekunde',\n      other: 'manj kot {{count}} sekund'\n    }\n  },\n  xSeconds: {\n    present: {\n      one: '{{count}} sekunda',\n      two: '{{count}} sekundi',\n      few: '{{count}} sekunde',\n      other: '{{count}} sekund'\n    },\n    past: {\n      one: '{{count}} sekundo',\n      two: '{{count}} sekundama',\n      few: '{{count}} sekundami',\n      other: '{{count}} sekundami'\n    },\n    future: {\n      one: '{{count}} sekundo',\n      two: '{{count}} sekundi',\n      few: '{{count}} sekunde',\n      other: '{{count}} sekund'\n    }\n  },\n  halfAMinute: 'pol minute',\n  lessThanXMinutes: {\n    present: {\n      one: 'manj kot {{count}} minuta',\n      two: 'manj kot {{count}} minuti',\n      few: 'manj kot {{count}} minute',\n      other: 'manj kot {{count}} minut'\n    },\n    past: {\n      one: 'manj kot {{count}} minuto',\n      two: 'manj kot {{count}} minutama',\n      few: 'manj kot {{count}} minutami',\n      other: 'manj kot {{count}} minutami'\n    },\n    future: {\n      one: 'manj kot {{count}} minuto',\n      two: 'manj kot {{count}} minuti',\n      few: 'manj kot {{count}} minute',\n      other: 'manj kot {{count}} minut'\n    }\n  },\n  xMinutes: {\n    present: {\n      one: '{{count}} minuta',\n      two: '{{count}} minuti',\n      few: '{{count}} minute',\n      other: '{{count}} minut'\n    },\n    past: {\n      one: '{{count}} minuto',\n      two: '{{count}} minutama',\n      few: '{{count}} minutami',\n      other: '{{count}} minutami'\n    },\n    future: {\n      one: '{{count}} minuto',\n      two: '{{count}} minuti',\n      few: '{{count}} minute',\n      other: '{{count}} minut'\n    }\n  },\n  aboutXHours: {\n    present: {\n      one: 'približno {{count}} ura',\n      two: 'približno {{count}} uri',\n      few: 'približno {{count}} ure',\n      other: 'približno {{count}} ur'\n    },\n    past: {\n      one: 'približno {{count}} uro',\n      two: 'približno {{count}} urama',\n      few: 'približno {{count}} urami',\n      other: 'približno {{count}} urami'\n    },\n    future: {\n      one: 'približno {{count}} uro',\n      two: 'približno {{count}} uri',\n      few: 'približno {{count}} ure',\n      other: 'približno {{count}} ur'\n    }\n  },\n  xHours: {\n    present: {\n      one: '{{count}} ura',\n      two: '{{count}} uri',\n      few: '{{count}} ure',\n      other: '{{count}} ur'\n    },\n    past: {\n      one: '{{count}} uro',\n      two: '{{count}} urama',\n      few: '{{count}} urami',\n      other: '{{count}} urami'\n    },\n    future: {\n      one: '{{count}} uro',\n      two: '{{count}} uri',\n      few: '{{count}} ure',\n      other: '{{count}} ur'\n    }\n  },\n  xDays: {\n    present: {\n      one: '{{count}} dan',\n      two: '{{count}} dni',\n      few: '{{count}} dni',\n      other: '{{count}} dni'\n    },\n    past: {\n      one: '{{count}} dnem',\n      two: '{{count}} dnevoma',\n      few: '{{count}} dnevi',\n      other: '{{count}} dnevi'\n    },\n    future: {\n      one: '{{count}} dan',\n      two: '{{count}} dni',\n      few: '{{count}} dni',\n      other: '{{count}} dni'\n    }\n  },\n  // no tenses for weeks?\n  aboutXWeeks: {\n    one: 'približno {{count}} teden',\n    two: 'približno {{count}} tedna',\n    few: 'približno {{count}} tedne',\n    other: 'približno {{count}} tednov'\n  },\n  // no tenses for weeks?\n  xWeeks: {\n    one: '{{count}} teden',\n    two: '{{count}} tedna',\n    few: '{{count}} tedne',\n    other: '{{count}} tednov'\n  },\n  aboutXMonths: {\n    present: {\n      one: 'približno {{count}} mesec',\n      two: 'približno {{count}} meseca',\n      few: 'približno {{count}} mesece',\n      other: 'približno {{count}} mesecev'\n    },\n    past: {\n      one: 'približno {{count}} mesecem',\n      two: 'približno {{count}} mesecema',\n      few: 'približno {{count}} meseci',\n      other: 'približno {{count}} meseci'\n    },\n    future: {\n      one: 'približno {{count}} mesec',\n      two: 'približno {{count}} meseca',\n      few: 'približno {{count}} mesece',\n      other: 'približno {{count}} mesecev'\n    }\n  },\n  xMonths: {\n    present: {\n      one: '{{count}} mesec',\n      two: '{{count}} meseca',\n      few: '{{count}} meseci',\n      other: '{{count}} mesecev'\n    },\n    past: {\n      one: '{{count}} mesecem',\n      two: '{{count}} mesecema',\n      few: '{{count}} meseci',\n      other: '{{count}} meseci'\n    },\n    future: {\n      one: '{{count}} mesec',\n      two: '{{count}} meseca',\n      few: '{{count}} mesece',\n      other: '{{count}} mesecev'\n    }\n  },\n  aboutXYears: {\n    present: {\n      one: 'približno {{count}} leto',\n      two: 'približno {{count}} leti',\n      few: 'približno {{count}} leta',\n      other: 'približno {{count}} let'\n    },\n    past: {\n      one: 'približno {{count}} letom',\n      two: 'približno {{count}} letoma',\n      few: 'približno {{count}} leti',\n      other: 'približno {{count}} leti'\n    },\n    future: {\n      one: 'približno {{count}} leto',\n      two: 'približno {{count}} leti',\n      few: 'približno {{count}} leta',\n      other: 'približno {{count}} let'\n    }\n  },\n  xYears: {\n    present: {\n      one: '{{count}} leto',\n      two: '{{count}} leti',\n      few: '{{count}} leta',\n      other: '{{count}} let'\n    },\n    past: {\n      one: '{{count}} letom',\n      two: '{{count}} letoma',\n      few: '{{count}} leti',\n      other: '{{count}} leti'\n    },\n    future: {\n      one: '{{count}} leto',\n      two: '{{count}} leti',\n      few: '{{count}} leta',\n      other: '{{count}} let'\n    }\n  },\n  overXYears: {\n    present: {\n      one: 'več kot {{count}} leto',\n      two: 'več kot {{count}} leti',\n      few: 'več kot {{count}} leta',\n      other: 'več kot {{count}} let'\n    },\n    past: {\n      one: 'več kot {{count}} letom',\n      two: 'več kot {{count}} letoma',\n      few: 'več kot {{count}} leti',\n      other: 'več kot {{count}} leti'\n    },\n    future: {\n      one: 'več kot {{count}} leto',\n      two: 'več kot {{count}} leti',\n      few: 'več kot {{count}} leta',\n      other: 'več kot {{count}} let'\n    }\n  },\n  almostXYears: {\n    present: {\n      one: 'skoraj {{count}} leto',\n      two: 'skoraj {{count}} leti',\n      few: 'skoraj {{count}} leta',\n      other: 'skoraj {{count}} let'\n    },\n    past: {\n      one: 'skoraj {{count}} letom',\n      two: 'skoraj {{count}} letoma',\n      few: 'skoraj {{count}} leti',\n      other: 'skoraj {{count}} leti'\n    },\n    future: {\n      one: 'skoraj {{count}} leto',\n      two: 'skoraj {{count}} leti',\n      few: 'skoraj {{count}} leta',\n      other: 'skoraj {{count}} let'\n    }\n  }\n};\nfunction getFormFromCount(count) {\n  switch (count % 100) {\n    case 1:\n      return 'one';\n    case 2:\n      return 'two';\n    case 3:\n    case 4:\n      return 'few';\n    default:\n      return 'other';\n  }\n}\nvar formatDistance = function formatDistance(token, count, options) {\n  var result = '';\n  var tense = 'present';\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      tense = 'future';\n      result = 'čez ';\n    } else {\n      tense = 'past';\n      result = 'pred ';\n    }\n  }\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result += tokenValue;\n  } else {\n    var form = getFormFromCount(count);\n    if (isPluralType(tokenValue)) {\n      result += tokenValue[form].replace('{{count}}', String(count));\n    } else {\n      result += tokenValue[tense][form].replace('{{count}}', String(count));\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, dd. MMMM y',\n  long: 'dd. MMMM y',\n  medium: 'd. MMM y',\n  short: 'd. MM. yy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    var day = date.getUTCDay();\n    switch (day) {\n      case 0:\n        return \"'prejšnjo nedeljo ob' p\";\n      case 3:\n        return \"'prejšnjo sredo ob' p\";\n      case 6:\n        return \"'prejšnjo soboto ob' p\";\n      default:\n        return \"'prejšnji' EEEE 'ob' p\";\n    }\n  },\n  yesterday: \"'včeraj ob' p\",\n  today: \"'danes ob' p\",\n  tomorrow: \"'jutri ob' p\",\n  nextWeek: function nextWeek(date) {\n    var day = date.getUTCDay();\n    switch (day) {\n      case 0:\n        return \"'naslednjo nedeljo ob' p\";\n      case 3:\n        return \"'naslednjo sredo ob' p\";\n      case 6:\n        return \"'naslednjo soboto ob' p\";\n      default:\n        return \"'naslednji' EEEE 'ob' p\";\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Slovenian locale.\n * @language Slovenian\n * @iso-639-2 slv\n * @author Adam Stradovnik [@Neoglyph]{@link https://github.com/Neoglyph}\n * @author Mato Žgajner [@mzgajner]{@link https://github.com/mzgajner}\n */\nvar locale = {\n  code: 'sl',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['pr. n. št.', 'po n. št.'],\n  abbreviated: ['pr. n. št.', 'po n. št.'],\n  wide: ['pred našim štetjem', 'po našem štetju']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1. čet.', '2. čet.', '3. čet.', '4. čet.'],\n  wide: ['1. četrtletje', '2. četrtletje', '3. četrtletje', '4. četrtletje']\n};\nvar monthValues = {\n  narrow: ['j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun.', 'jul.', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],\n  wide: ['januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december']\n};\nvar dayValues = {\n  narrow: ['n', 'p', 't', 's', 'č', 'p', 's'],\n  short: ['ned.', 'pon.', 'tor.', 'sre.', 'čet.', 'pet.', 'sob.'],\n  abbreviated: ['ned.', 'pon.', 'tor.', 'sre.', 'čet.', 'pet.', 'sob.'],\n  wide: ['nedelja', 'ponedeljek', 'torek', 'sreda', 'četrtek', 'petek', 'sobota']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'd',\n    pm: 'p',\n    midnight: '24.00',\n    noon: '12.00',\n    morning: 'j',\n    afternoon: 'p',\n    evening: 'v',\n    night: 'n'\n  },\n  abbreviated: {\n    am: 'dop.',\n    pm: 'pop.',\n    midnight: 'poln.',\n    noon: 'pold.',\n    morning: 'jut.',\n    afternoon: 'pop.',\n    evening: 'več.',\n    night: 'noč'\n  },\n  wide: {\n    am: 'dop.',\n    pm: 'pop.',\n    midnight: 'polnoč',\n    noon: 'poldne',\n    morning: 'jutro',\n    afternoon: 'popoldne',\n    evening: 'večer',\n    night: 'noč'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'd',\n    pm: 'p',\n    midnight: '24.00',\n    noon: '12.00',\n    morning: 'zj',\n    afternoon: 'p',\n    evening: 'zv',\n    night: 'po'\n  },\n  abbreviated: {\n    am: 'dop.',\n    pm: 'pop.',\n    midnight: 'opoln.',\n    noon: 'opold.',\n    morning: 'zjut.',\n    afternoon: 'pop.',\n    evening: 'zveč.',\n    night: 'ponoči'\n  },\n  wide: {\n    am: 'dop.',\n    pm: 'pop.',\n    midnight: 'opolnoči',\n    noon: 'opoldne',\n    morning: 'zjutraj',\n    afternoon: 'popoldan',\n    evening: 'zvečer',\n    night: 'ponoči'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  abbreviated: /^(pr\\. n\\. št\\.|po n\\. št\\.)/i,\n  wide: /^(pred Kristusom|pred na[sš]im [sš]tetjem|po Kristusu|po na[sš]em [sš]tetju|na[sš]ega [sš]tetja)/i\n};\nvar parseEraPatterns = {\n  any: [/^pr/i, /^(po|na[sš]em)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]\\.\\s?[čc]et\\.?/i,\n  wide: /^[1234]\\. [čc]etrtletje/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan\\.|feb\\.|mar\\.|apr\\.|maj|jun\\.|jul\\.|avg\\.|sep\\.|okt\\.|nov\\.|dec\\.)/i,\n  wide: /^(januar|februar|marec|april|maj|junij|julij|avgust|september|oktober|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  abbreviated: [/^ja/i, /^fe/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^av/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  wide: [/^ja/i, /^fe/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^av/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[nptsčc]/i,\n  short: /^(ned\\.|pon\\.|tor\\.|sre\\.|[cč]et\\.|pet\\.|sob\\.)/i,\n  abbreviated: /^(ned\\.|pon\\.|tor\\.|sre\\.|[cč]et\\.|pet\\.|sob\\.)/i,\n  wide: /^(nedelja|ponedeljek|torek|sreda|[cč]etrtek|petek|sobota)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^n/i, /^p/i, /^t/i, /^s/i, /^[cč]/i, /^p/i, /^s/i],\n  any: [/^n/i, /^po/i, /^t/i, /^sr/i, /^[cč]/i, /^pe/i, /^so/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(d|po?|z?v|n|z?j|24\\.00|12\\.00)/i,\n  any: /^(dop\\.|pop\\.|o?poln(\\.|o[cč]i?)|o?pold(\\.|ne)|z?ve[cč](\\.|er)|(po)?no[cč]i?|popold(ne|an)|jut(\\.|ro)|zjut(\\.|raj))/i\n};\nvar parseDayPeriodPatterns = {\n  narrow: {\n    am: /^d/i,\n    pm: /^p/i,\n    midnight: /^24/i,\n    noon: /^12/i,\n    morning: /^(z?j)/i,\n    afternoon: /^p/i,\n    evening: /^(z?v)/i,\n    night: /^(n|po)/i\n  },\n  any: {\n    am: /^dop\\./i,\n    pm: /^pop\\./i,\n    midnight: /^o?poln/i,\n    noon: /^o?pold/i,\n    morning: /j/i,\n    afternoon: /^pop\\./i,\n    evening: /^z?ve/i,\n    night: /(po)?no/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'më pak se një sekondë',\n    other: 'më pak se {{count}} sekonda'\n  },\n  xSeconds: {\n    one: '1 sekondë',\n    other: '{{count}} sekonda'\n  },\n  halfAMinute: 'gjysëm minuti',\n  lessThanXMinutes: {\n    one: 'më pak se një minute',\n    other: 'më pak se {{count}} minuta'\n  },\n  xMinutes: {\n    one: '1 minutë',\n    other: '{{count}} minuta'\n  },\n  aboutXHours: {\n    one: 'rreth 1 orë',\n    other: 'rreth {{count}} orë'\n  },\n  xHours: {\n    one: '1 orë',\n    other: '{{count}} orë'\n  },\n  xDays: {\n    one: '1 ditë',\n    other: '{{count}} ditë'\n  },\n  aboutXWeeks: {\n    one: 'rreth 1 javë',\n    other: 'rreth {{count}} javë'\n  },\n  xWeeks: {\n    one: '1 javë',\n    other: '{{count}} javë'\n  },\n  aboutXMonths: {\n    one: 'rreth 1 muaj',\n    other: 'rreth {{count}} muaj'\n  },\n  xMonths: {\n    one: '1 muaj',\n    other: '{{count}} muaj'\n  },\n  aboutXYears: {\n    one: 'rreth 1 vit',\n    other: 'rreth {{count}} vite'\n  },\n  xYears: {\n    one: '1 vit',\n    other: '{{count}} vite'\n  },\n  overXYears: {\n    one: 'mbi 1 vit',\n    other: 'mbi {{count}} vite'\n  },\n  almostXYears: {\n    one: 'pothuajse 1 vit',\n    other: 'pothuajse {{count}} vite'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'në ' + result;\n    } else {\n      return result + ' më parë';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'në' {{time}}\",\n  long: \"{{date}} 'në' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'të' eeee 'e shkuar në' p\",\n  yesterday: \"'dje në' p\",\n  today: \"'sot në' p\",\n  tomorrow: \"'nesër në' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Albanian locale.\n * @language Shqip\n * @iso-639-2 sqi\n * @author Ardit Dine [@arditdine]{@link https://github.com/arditdine}\n */\nvar locale = {\n  code: 'sq',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['P', 'M'],\n  abbreviated: ['PK', 'MK'],\n  wide: ['Para Krishtit', 'Mbas Krishtit']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['4-mujori I', '4-mujori II', '4-mujori III', '4-mujori IV']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'S', 'M', 'P', 'M', 'Q', 'K', 'G', 'S', 'T', 'N', 'D'],\n  abbreviated: ['Jan', 'Shk', 'Mar', 'Pri', 'Maj', 'Qer', 'Kor', 'Gus', 'Sht', 'Tet', 'Nën', 'Dhj'],\n  wide: ['Janar', 'Shkurt', 'Mars', 'Prill', 'Maj', 'Qershor', 'Korrik', 'Gusht', 'Shtator', 'Tetor', 'Nëntor', 'Dhjetor']\n};\nvar dayValues = {\n  narrow: ['D', 'H', 'M', 'M', 'E', 'P', 'S'],\n  short: ['Di', 'Hë', 'Ma', 'Më', 'En', 'Pr', 'Sh'],\n  abbreviated: ['Die', 'Hën', 'Mar', 'Mër', 'Enj', 'Pre', 'Sht'],\n  wide: ['Dielë', 'Hënë', 'Martë', 'Mërkurë', 'Enjte', 'Premte', 'Shtunë']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'p',\n    pm: 'm',\n    midnight: 'm',\n    noon: 'd',\n    morning: 'mëngjes',\n    afternoon: 'dite',\n    evening: 'mbrëmje',\n    night: 'natë'\n  },\n  abbreviated: {\n    am: 'PD',\n    pm: 'MD',\n    midnight: 'mesnëtë',\n    noon: 'drek',\n    morning: 'mëngjes',\n    afternoon: 'mbasdite',\n    evening: 'mbrëmje',\n    night: 'natë'\n  },\n  wide: {\n    am: 'p.d.',\n    pm: 'm.d.',\n    midnight: 'mesnëtë',\n    noon: 'drek',\n    morning: 'mëngjes',\n    afternoon: 'mbasdite',\n    evening: 'mbrëmje',\n    night: 'natë'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'p',\n    pm: 'm',\n    midnight: 'm',\n    noon: 'd',\n    morning: 'në mëngjes',\n    afternoon: 'në mbasdite',\n    evening: 'në mbrëmje',\n    night: 'në mesnatë'\n  },\n  abbreviated: {\n    am: 'PD',\n    pm: 'MD',\n    midnight: 'mesnatë',\n    noon: 'drek',\n    morning: 'në mëngjes',\n    afternoon: 'në mbasdite',\n    evening: 'në mbrëmje',\n    night: 'në mesnatë'\n  },\n  wide: {\n    am: 'p.d.',\n    pm: 'm.d.',\n    midnight: 'mesnatë',\n    noon: 'drek',\n    morning: 'në mëngjes',\n    afternoon: 'në mbasdite',\n    evening: 'në mbrëmje',\n    night: 'në mesnatë'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  if ((options === null || options === void 0 ? void 0 : options.unit) === 'hour') return String(number);\n  if (number === 1) return number + '-rë';\n  if (number === 4) return number + 't';\n  return number + '-të';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-rë|-të|t|)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(p|m)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(para krishtit|mbas krishtit)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(p|m)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234]-mujori (i{1,3}|iv)/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jsmpqkftnd]/i,\n  abbreviated: /^(jan|shk|mar|pri|maj|qer|kor|gus|sht|tet|nën|dhj)/i,\n  wide: /^(janar|shkurt|mars|prill|maj|qershor|korrik|gusht|shtator|tetor|nëntor|dhjetor)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^s/i, /^m/i, /^p/i, /^m/i, /^q/i, /^k/i, /^g/i, /^s/i, /^t/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^shk/i, /^mar/i, /^pri/i, /^maj/i, /^qer/i, /^kor/i, /^gu/i, /^sht/i, /^tet/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dhmeps]/i,\n  short: /^(di|hë|ma|më|en|pr|sh)/i,\n  abbreviated: /^(die|hën|mar|mër|enj|pre|sht)/i,\n  wide: /^(dielë|hënë|martë|mërkurë|enjte|premte|shtunë)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^h/i, /^m/i, /^m/i, /^e/i, /^p/i, /^s/i],\n  any: [/^d/i, /^h/i, /^ma/i, /^më/i, /^e/i, /^p/i, /^s/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(p|m|me|në (mëngjes|mbasdite|mbrëmje|mesnatë))/i,\n  any: /^([pm]\\.?\\s?d\\.?|drek|në (mëngjes|mbasdite|mbrëmje|mesnatë))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^p/i,\n    pm: /^m/i,\n    midnight: /^me/i,\n    noon: /^dr/i,\n    morning: /mëngjes/i,\n    afternoon: /mbasdite/i,\n    evening: /mbrëmje/i,\n    night: /natë/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      standalone: 'мање од 1 секунде',\n      withPrepositionAgo: 'мање од 1 секунде',\n      withPrepositionIn: 'мање од 1 секунду'\n    },\n    dual: 'мање од {{count}} секунде',\n    other: 'мање од {{count}} секунди'\n  },\n  xSeconds: {\n    one: {\n      standalone: '1 секунда',\n      withPrepositionAgo: '1 секунде',\n      withPrepositionIn: '1 секунду'\n    },\n    dual: '{{count}} секунде',\n    other: '{{count}} секунди'\n  },\n  halfAMinute: 'пола минуте',\n  lessThanXMinutes: {\n    one: {\n      standalone: 'мање од 1 минуте',\n      withPrepositionAgo: 'мање од 1 минуте',\n      withPrepositionIn: 'мање од 1 минуту'\n    },\n    dual: 'мање од {{count}} минуте',\n    other: 'мање од {{count}} минута'\n  },\n  xMinutes: {\n    one: {\n      standalone: '1 минута',\n      withPrepositionAgo: '1 минуте',\n      withPrepositionIn: '1 минуту'\n    },\n    dual: '{{count}} минуте',\n    other: '{{count}} минута'\n  },\n  aboutXHours: {\n    one: {\n      standalone: 'око 1 сат',\n      withPrepositionAgo: 'око 1 сат',\n      withPrepositionIn: 'око 1 сат'\n    },\n    dual: 'око {{count}} сата',\n    other: 'око {{count}} сати'\n  },\n  xHours: {\n    one: {\n      standalone: '1 сат',\n      withPrepositionAgo: '1 сат',\n      withPrepositionIn: '1 сат'\n    },\n    dual: '{{count}} сата',\n    other: '{{count}} сати'\n  },\n  xDays: {\n    one: {\n      standalone: '1 дан',\n      withPrepositionAgo: '1 дан',\n      withPrepositionIn: '1 дан'\n    },\n    dual: '{{count}} дана',\n    other: '{{count}} дана'\n  },\n  aboutXWeeks: {\n    one: {\n      standalone: 'око 1 недељу',\n      withPrepositionAgo: 'око 1 недељу',\n      withPrepositionIn: 'око 1 недељу'\n    },\n    dual: 'око {{count}} недеље',\n    other: 'око {{count}} недеље'\n  },\n  xWeeks: {\n    one: {\n      standalone: '1 недељу',\n      withPrepositionAgo: '1 недељу',\n      withPrepositionIn: '1 недељу'\n    },\n    dual: '{{count}} недеље',\n    other: '{{count}} недеље'\n  },\n  aboutXMonths: {\n    one: {\n      standalone: 'око 1 месец',\n      withPrepositionAgo: 'око 1 месец',\n      withPrepositionIn: 'око 1 месец'\n    },\n    dual: 'око {{count}} месеца',\n    other: 'око {{count}} месеци'\n  },\n  xMonths: {\n    one: {\n      standalone: '1 месец',\n      withPrepositionAgo: '1 месец',\n      withPrepositionIn: '1 месец'\n    },\n    dual: '{{count}} месеца',\n    other: '{{count}} месеци'\n  },\n  aboutXYears: {\n    one: {\n      standalone: 'око 1 годину',\n      withPrepositionAgo: 'око 1 годину',\n      withPrepositionIn: 'око 1 годину'\n    },\n    dual: 'око {{count}} године',\n    other: 'око {{count}} година'\n  },\n  xYears: {\n    one: {\n      standalone: '1 година',\n      withPrepositionAgo: '1 године',\n      withPrepositionIn: '1 годину'\n    },\n    dual: '{{count}} године',\n    other: '{{count}} година'\n  },\n  overXYears: {\n    one: {\n      standalone: 'преко 1 годину',\n      withPrepositionAgo: 'преко 1 годину',\n      withPrepositionIn: 'преко 1 годину'\n    },\n    dual: 'преко {{count}} године',\n    other: 'преко {{count}} година'\n  },\n  almostXYears: {\n    one: {\n      standalone: 'готово 1 годину',\n      withPrepositionAgo: 'готово 1 годину',\n      withPrepositionIn: 'готово 1 годину'\n    },\n    dual: 'готово {{count}} године',\n    other: 'готово {{count}} година'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        result = tokenValue.one.withPrepositionIn;\n      } else {\n        result = tokenValue.one.withPrepositionAgo;\n      }\n    } else {\n      result = tokenValue.one.standalone;\n    }\n  } else if (count % 10 > 1 && count % 10 < 5 &&\n  // if last digit is between 2 and 4\n  String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is \"1\"\n  ) {\n    result = tokenValue.dual.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'за ' + result;\n    } else {\n      return 'пре ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d. MMMM yyyy.',\n  long: 'd. MMMM yyyy.',\n  medium: 'd. MMM yy.',\n  short: 'dd. MM. yy.'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss (zzzz)',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'у' {{time}}\",\n  long: \"{{date}} 'у' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    var day = date.getUTCDay();\n    switch (day) {\n      case 0:\n        return \"'прошле недеље у' p\";\n      case 3:\n        return \"'прошле среде у' p\";\n      case 6:\n        return \"'прошле суботе у' p\";\n      default:\n        return \"'прошли' EEEE 'у' p\";\n    }\n  },\n  yesterday: \"'јуче у' p\",\n  today: \"'данас у' p\",\n  tomorrow: \"'сутра у' p\",\n  nextWeek: function nextWeek(date) {\n    var day = date.getUTCDay();\n    switch (day) {\n      case 0:\n        return \"'следеће недеље у' p\";\n      case 3:\n        return \"'следећу среду у' p\";\n      case 6:\n        return \"'следећу суботу у' p\";\n      default:\n        return \"'следећи' EEEE 'у' p\";\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Serbian cyrillic locale.\n * @language Serbian\n * @iso-639-2 srp\n * @author Igor Radivojević [@rogyvoje]{@link https://github.com/rogyvoje}\n */\nvar locale = {\n  code: 'sr',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['пр.н.е.', 'АД'],\n  abbreviated: ['пр. Хр.', 'по. Хр.'],\n  wide: ['Пре Христа', 'После Христа']\n};\nvar quarterValues = {\n  narrow: ['1.', '2.', '3.', '4.'],\n  abbreviated: ['1. кв.', '2. кв.', '3. кв.', '4. кв.'],\n  wide: ['1. квартал', '2. квартал', '3. квартал', '4. квартал']\n};\nvar monthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['јан', 'феб', 'мар', 'апр', 'мај', 'јун', 'јул', 'авг', 'сеп', 'окт', 'нов', 'дец'],\n  wide: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар']\n};\nvar formattingMonthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['јан', 'феб', 'мар', 'апр', 'мај', 'јун', 'јул', 'авг', 'сеп', 'окт', 'нов', 'дец'],\n  wide: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар']\n};\nvar dayValues = {\n  narrow: ['Н', 'П', 'У', 'С', 'Ч', 'П', 'С'],\n  short: ['нед', 'пон', 'уто', 'сре', 'чет', 'пет', 'суб'],\n  abbreviated: ['нед', 'пон', 'уто', 'сре', 'чет', 'пет', 'суб'],\n  wide: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота']\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'АМ',\n    pm: 'ПМ',\n    midnight: 'поноћ',\n    noon: 'подне',\n    morning: 'ујутру',\n    afternoon: 'поподне',\n    evening: 'увече',\n    night: 'ноћу'\n  },\n  abbreviated: {\n    am: 'АМ',\n    pm: 'ПМ',\n    midnight: 'поноћ',\n    noon: 'подне',\n    morning: 'ујутру',\n    afternoon: 'поподне',\n    evening: 'увече',\n    night: 'ноћу'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'поноћ',\n    noon: 'подне',\n    morning: 'ујутру',\n    afternoon: 'после подне',\n    evening: 'увече',\n    night: 'ноћу'\n  }\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'поноћ',\n    noon: 'подне',\n    morning: 'ујутру',\n    afternoon: 'поподне',\n    evening: 'увече',\n    night: 'ноћу'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'поноћ',\n    noon: 'подне',\n    morning: 'ујутру',\n    afternoon: 'поподне',\n    evening: 'увече',\n    night: 'ноћу'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'поноћ',\n    noon: 'подне',\n    morning: 'ујутру',\n    afternoon: 'после подне',\n    evening: 'увече',\n    night: 'ноћу'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(пр\\.н\\.е\\.|АД)/i,\n  abbreviated: /^(пр\\.\\s?Хр\\.|по\\.\\s?Хр\\.)/i,\n  wide: /^(Пре Христа|пре нове ере|После Христа|нова ера)/i\n};\nvar parseEraPatterns = {\n  any: [/^пр/i, /^(по|нова)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]\\.\\s?кв\\.?/i,\n  wide: /^[1234]\\. квартал/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(10|11|12|[123456789])\\./i,\n  abbreviated: /^(јан|феб|мар|апр|мај|јун|јул|авг|сеп|окт|нов|дец)/i,\n  wide: /^((јануар|јануара)|(фебруар|фебруара)|(март|марта)|(април|априла)|(мја|маја)|(јун|јуна)|(јул|јула)|(август|августа)|(септембар|септембра)|(октобар|октобра)|(новембар|новембра)|(децембар|децембра))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^1/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^7/i, /^8/i, /^9/i, /^10/i, /^11/i, /^12/i],\n  any: [/^ја/i, /^ф/i, /^мар/i, /^ап/i, /^мај/i, /^јун/i, /^јул/i, /^авг/i, /^с/i, /^о/i, /^н/i, /^д/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[пусчн]/i,\n  short: /^(нед|пон|уто|сре|чет|пет|суб)/i,\n  abbreviated: /^(нед|пон|уто|сре|чет|пет|суб)/i,\n  wide: /^(недеља|понедељак|уторак|среда|четвртак|петак|субота)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^п/i, /^у/i, /^с/i, /^ч/i, /^п/i, /^с/i, /^н/i],\n  any: [/^нед/i, /^пон/i, /^уто/i, /^сре/i, /^чет/i, /^пет/i, /^суб/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(ам|пм|поноћ|(по)?подне|увече|ноћу|после подне|ујутру)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^поно/i,\n    noon: /^под/i,\n    morning: /ујутру/i,\n    afternoon: /(после\\s|по)+подне/i,\n    evening: /(увече)/i,\n    night: /(ноћу)/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      standalone: 'manje od 1 sekunde',\n      withPrepositionAgo: 'manje od 1 sekunde',\n      withPrepositionIn: 'manje od 1 sekundu'\n    },\n    dual: 'manje od {{count}} sekunde',\n    other: 'manje od {{count}} sekundi'\n  },\n  xSeconds: {\n    one: {\n      standalone: '1 sekunda',\n      withPrepositionAgo: '1 sekunde',\n      withPrepositionIn: '1 sekundu'\n    },\n    dual: '{{count}} sekunde',\n    other: '{{count}} sekundi'\n  },\n  halfAMinute: 'pola minute',\n  lessThanXMinutes: {\n    one: {\n      standalone: 'manje od 1 minute',\n      withPrepositionAgo: 'manje od 1 minute',\n      withPrepositionIn: 'manje od 1 minutu'\n    },\n    dual: 'manje od {{count}} minute',\n    other: 'manje od {{count}} minuta'\n  },\n  xMinutes: {\n    one: {\n      standalone: '1 minuta',\n      withPrepositionAgo: '1 minute',\n      withPrepositionIn: '1 minutu'\n    },\n    dual: '{{count}} minute',\n    other: '{{count}} minuta'\n  },\n  aboutXHours: {\n    one: {\n      standalone: 'oko 1 sat',\n      withPrepositionAgo: 'oko 1 sat',\n      withPrepositionIn: 'oko 1 sat'\n    },\n    dual: 'oko {{count}} sata',\n    other: 'oko {{count}} sati'\n  },\n  xHours: {\n    one: {\n      standalone: '1 sat',\n      withPrepositionAgo: '1 sat',\n      withPrepositionIn: '1 sat'\n    },\n    dual: '{{count}} sata',\n    other: '{{count}} sati'\n  },\n  xDays: {\n    one: {\n      standalone: '1 dan',\n      withPrepositionAgo: '1 dan',\n      withPrepositionIn: '1 dan'\n    },\n    dual: '{{count}} dana',\n    other: '{{count}} dana'\n  },\n  aboutXWeeks: {\n    one: {\n      standalone: 'oko 1 nedelju',\n      withPrepositionAgo: 'oko 1 nedelju',\n      withPrepositionIn: 'oko 1 nedelju'\n    },\n    dual: 'oko {{count}} nedelje',\n    other: 'oko {{count}} nedelje'\n  },\n  xWeeks: {\n    one: {\n      standalone: '1 nedelju',\n      withPrepositionAgo: '1 nedelju',\n      withPrepositionIn: '1 nedelju'\n    },\n    dual: '{{count}} nedelje',\n    other: '{{count}} nedelje'\n  },\n  aboutXMonths: {\n    one: {\n      standalone: 'oko 1 mesec',\n      withPrepositionAgo: 'oko 1 mesec',\n      withPrepositionIn: 'oko 1 mesec'\n    },\n    dual: 'oko {{count}} meseca',\n    other: 'oko {{count}} meseci'\n  },\n  xMonths: {\n    one: {\n      standalone: '1 mesec',\n      withPrepositionAgo: '1 mesec',\n      withPrepositionIn: '1 mesec'\n    },\n    dual: '{{count}} meseca',\n    other: '{{count}} meseci'\n  },\n  aboutXYears: {\n    one: {\n      standalone: 'oko 1 godinu',\n      withPrepositionAgo: 'oko 1 godinu',\n      withPrepositionIn: 'oko 1 godinu'\n    },\n    dual: 'oko {{count}} godine',\n    other: 'oko {{count}} godina'\n  },\n  xYears: {\n    one: {\n      standalone: '1 godina',\n      withPrepositionAgo: '1 godine',\n      withPrepositionIn: '1 godinu'\n    },\n    dual: '{{count}} godine',\n    other: '{{count}} godina'\n  },\n  overXYears: {\n    one: {\n      standalone: 'preko 1 godinu',\n      withPrepositionAgo: 'preko 1 godinu',\n      withPrepositionIn: 'preko 1 godinu'\n    },\n    dual: 'preko {{count}} godine',\n    other: 'preko {{count}} godina'\n  },\n  almostXYears: {\n    one: {\n      standalone: 'gotovo 1 godinu',\n      withPrepositionAgo: 'gotovo 1 godinu',\n      withPrepositionIn: 'gotovo 1 godinu'\n    },\n    dual: 'gotovo {{count}} godine',\n    other: 'gotovo {{count}} godina'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    if (options !== null && options !== void 0 && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        result = tokenValue.one.withPrepositionIn;\n      } else {\n        result = tokenValue.one.withPrepositionAgo;\n      }\n    } else {\n      result = tokenValue.one.standalone;\n    }\n  } else if (count % 10 > 1 && count % 10 < 5 &&\n  // if last digit is between 2 and 4\n  String(count).substr(-2, 1) !== '1' // unless the 2nd to last digit is \"1\"\n  ) {\n    result = tokenValue.dual.replace('{{count}}', String(count));\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'za ' + result;\n    } else {\n      return 'pre ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, d. MMMM yyyy.',\n  long: 'd. MMMM yyyy.',\n  medium: 'd. MMM yy.',\n  short: 'dd. MM. yy.'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss (zzzz)',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'u' {{time}}\",\n  long: \"{{date}} 'u' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: function lastWeek(date) {\n    switch (date.getUTCDay()) {\n      case 0:\n        return \"'prošle nedelje u' p\";\n      case 3:\n        return \"'prošle srede u' p\";\n      case 6:\n        return \"'prošle subote u' p\";\n      default:\n        return \"'prošli' EEEE 'u' p\";\n    }\n  },\n  yesterday: \"'juče u' p\",\n  today: \"'danas u' p\",\n  tomorrow: \"'sutra u' p\",\n  nextWeek: function nextWeek(date) {\n    switch (date.getUTCDay()) {\n      case 0:\n        return \"'sledeće nedelje u' p\";\n      case 3:\n        return \"'sledeću sredu u' p\";\n      case 6:\n        return \"'sledeću subotu u' p\";\n      default:\n        return \"'sledeći' EEEE 'u' p\";\n    }\n  },\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Serbian latin locale.\n * @language Serbian\n * @iso-639-2 srp\n * @author Igor Radivojević [@rogyvoje]{@link https://github.com/rogyvoje}\n */\nvar locale = {\n  code: 'sr-Latn',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['pr.n.e.', 'AD'],\n  abbreviated: ['pr. Hr.', 'po. Hr.'],\n  wide: ['Pre Hrista', 'Posle Hrista']\n};\nvar quarterValues = {\n  narrow: ['1.', '2.', '3.', '4.'],\n  abbreviated: ['1. kv.', '2. kv.', '3. kv.', '4. kv.'],\n  wide: ['1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal']\n};\nvar monthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar']\n};\nvar formattingMonthValues = {\n  narrow: ['1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.'],\n  abbreviated: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'],\n  wide: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar']\n};\nvar dayValues = {\n  narrow: ['N', 'P', 'U', 'S', 'Č', 'P', 'S'],\n  short: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub'],\n  abbreviated: ['ned', 'pon', 'uto', 'sre', 'čet', 'pet', 'sub'],\n  wide: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota']\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'posle podne',\n    evening: 'uveče',\n    night: 'noću'\n  }\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'popodne',\n    evening: 'uveče',\n    night: 'noću'\n  },\n  wide: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'ponoć',\n    noon: 'podne',\n    morning: 'ujutru',\n    afternoon: 'posle podne',\n    evening: 'uveče',\n    night: 'noću'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)\\./i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(pr\\.n\\.e\\.|AD)/i,\n  abbreviated: /^(pr\\.\\s?Hr\\.|po\\.\\s?Hr\\.)/i,\n  wide: /^(Pre Hrista|pre nove ere|Posle Hrista|nova era)/i\n};\nvar parseEraPatterns = {\n  any: [/^pr/i, /^(po|nova)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]\\.\\s?kv\\.?/i,\n  wide: /^[1234]\\. kvartal/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(10|11|12|[123456789])\\./i,\n  abbreviated: /^(jan|feb|mar|apr|maj|jun|jul|avg|sep|okt|nov|dec)/i,\n  wide: /^((januar|januara)|(februar|februara)|(mart|marta)|(april|aprila)|(maj|maja)|(jun|juna)|(jul|jula)|(avgust|avgusta)|(septembar|septembra)|(oktobar|oktobra)|(novembar|novembra)|(decembar|decembra))/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^1/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^7/i, /^8/i, /^9/i, /^10/i, /^11/i, /^12/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^avg/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[npusčc]/i,\n  short: /^(ned|pon|uto|sre|(čet|cet)|pet|sub)/i,\n  abbreviated: /^(ned|pon|uto|sre|(čet|cet)|pet|sub)/i,\n  wide: /^(nedelja|ponedeljak|utorak|sreda|(četvrtak|cetvrtak)|petak|subota)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(am|pm|ponoc|ponoć|(po)?podne|uvece|uveče|noću|posle podne|ujutru)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^pono/i,\n    noon: /^pod/i,\n    morning: /jutro/i,\n    afternoon: /(posle\\s|po)+podne/i,\n    evening: /(uvece|uveče)/i,\n    night: /(nocu|noću)/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'mindre än en sekund',\n    other: 'mindre än {{count}} sekunder'\n  },\n  xSeconds: {\n    one: 'en sekund',\n    other: '{{count}} sekunder'\n  },\n  halfAMinute: 'en halv minut',\n  lessThanXMinutes: {\n    one: 'mindre än en minut',\n    other: 'mindre än {{count}} minuter'\n  },\n  xMinutes: {\n    one: 'en minut',\n    other: '{{count}} minuter'\n  },\n  aboutXHours: {\n    one: 'ungefär en timme',\n    other: 'ungefär {{count}} timmar'\n  },\n  xHours: {\n    one: 'en timme',\n    other: '{{count}} timmar'\n  },\n  xDays: {\n    one: 'en dag',\n    other: '{{count}} dagar'\n  },\n  aboutXWeeks: {\n    one: 'ungefär en vecka',\n    other: 'ungefär {{count}} vecka'\n  },\n  xWeeks: {\n    one: 'en vecka',\n    other: '{{count}} vecka'\n  },\n  aboutXMonths: {\n    one: 'ungefär en månad',\n    other: 'ungefär {{count}} månader'\n  },\n  xMonths: {\n    one: 'en månad',\n    other: '{{count}} månader'\n  },\n  aboutXYears: {\n    one: 'ungefär ett år',\n    other: 'ungefär {{count}} år'\n  },\n  xYears: {\n    one: 'ett år',\n    other: '{{count}} år'\n  },\n  overXYears: {\n    one: 'över ett år',\n    other: 'över {{count}} år'\n  },\n  almostXYears: {\n    one: 'nästan ett år',\n    other: 'nästan {{count}} år'\n  }\n};\nvar wordMapping = ['noll', 'en', 'två', 'tre', 'fyra', 'fem', 'sex', 'sju', 'åtta', 'nio', 'tio', 'elva', 'tolv'];\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    if (options && options.onlyNumeric) {\n      result = tokenValue.other.replace('{{count}}', String(count));\n    } else {\n      result = tokenValue.other.replace('{{count}}', count < 13 ? wordMapping[count] : String(count));\n    }\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'om ' + result;\n    } else {\n      return result + ' sedan';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE d MMMM y',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'y-MM-dd'\n};\nvar timeFormats = {\n  full: \"'kl'. HH:mm:ss zzzz\",\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'kl.' {{time}}\",\n  long: \"{{date}} 'kl.' {{time}}\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'i' EEEE's kl.' p\",\n  yesterday: \"'igår kl.' p\",\n  today: \"'idag kl.' p\",\n  tomorrow: \"'imorgon kl.' p\",\n  nextWeek: \"EEEE 'kl.' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Swedish locale.\n * @language Swedish\n * @iso-639-2 swe\n * @author Johannes Ulén [@ejulen]{@link https://github.com/ejulen}\n * @author Alexander Nanberg [@alexandernanberg]{@link https://github.com/alexandernanberg}\n * @author Henrik Andersson [@limelights]{@link https://github.com/limelights}\n */\nvar locale = {\n  code: 'sv',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['f.Kr.', 'e.Kr.'],\n  abbreviated: ['f.Kr.', 'e.Kr.'],\n  wide: ['före Kristus', 'efter Kristus']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1:a kvartalet', '2:a kvartalet', '3:e kvartalet', '4:e kvartalet']\n};\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['jan.', 'feb.', 'mars', 'apr.', 'maj', 'juni', 'juli', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'],\n  wide: ['januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'O', 'T', 'F', 'L'],\n  short: ['sö', 'må', 'ti', 'on', 'to', 'fr', 'lö'],\n  abbreviated: ['sön', 'mån', 'tis', 'ons', 'tors', 'fre', 'lör'],\n  wide: ['söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag']\n};\n\n// https://www.unicode.org/cldr/charts/32/summary/sv.html#1888\nvar dayPeriodValues = {\n  narrow: {\n    am: 'fm',\n    pm: 'em',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'morg.',\n    afternoon: 'efterm.',\n    evening: 'kväll',\n    night: 'natt'\n  },\n  abbreviated: {\n    am: 'f.m.',\n    pm: 'e.m.',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'morgon',\n    afternoon: 'efterm.',\n    evening: 'kväll',\n    night: 'natt'\n  },\n  wide: {\n    am: 'förmiddag',\n    pm: 'eftermiddag',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'morgon',\n    afternoon: 'eftermiddag',\n    evening: 'kväll',\n    night: 'natt'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'fm',\n    pm: 'em',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morg.',\n    afternoon: 'på efterm.',\n    evening: 'på kvällen',\n    night: 'på natten'\n  },\n  abbreviated: {\n    am: 'fm',\n    pm: 'em',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morg.',\n    afternoon: 'på efterm.',\n    evening: 'på kvällen',\n    night: 'på natten'\n  },\n  wide: {\n    am: 'fm',\n    pm: 'em',\n    midnight: 'midnatt',\n    noon: 'middag',\n    morning: 'på morgonen',\n    afternoon: 'på eftermiddagen',\n    evening: 'på kvällen',\n    night: 'på natten'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n      case 2:\n        return number + ':a';\n    }\n  }\n  return number + ':e';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(:a|:e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(f\\.? ?Kr\\.?|f\\.? ?v\\.? ?t\\.?|e\\.? ?Kr\\.?|v\\.? ?t\\.?)/i,\n  abbreviated: /^(f\\.? ?Kr\\.?|f\\.? ?v\\.? ?t\\.?|e\\.? ?Kr\\.?|v\\.? ?t\\.?)/i,\n  wide: /^(före Kristus|före vår tid|efter Kristus|vår tid)/i\n};\nvar parseEraPatterns = {\n  any: [/^f/i, /^[ev]/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](:a|:e)? kvartalet/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar[s]?|apr|maj|jun[i]?|jul[i]?|aug|sep|okt|nov|dec)\\.?/i,\n  wide: /^(januari|februari|mars|april|maj|juni|juli|augusti|september|oktober|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^maj/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtofl]/i,\n  short: /^(sö|må|ti|on|to|fr|lö)/i,\n  abbreviated: /^(sön|mån|tis|ons|tors|fre|lör)/i,\n  wide: /^(söndag|måndag|tisdag|onsdag|torsdag|fredag|lördag)/i\n};\nvar parseDayPatterns = {\n  any: [/^s/i, /^m/i, /^ti/i, /^o/i, /^to/i, /^f/i, /^l/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^([fe]\\.?\\s?m\\.?|midn(att)?|midd(ag)?|(på) (morgonen|eftermiddagen|kvällen|natten))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^f/i,\n    pm: /^e/i,\n    midnight: /^midn/i,\n    noon: /^midd/i,\n    morning: /morgon/i,\n    afternoon: /eftermiddag/i,\n    evening: /kväll/i,\n    night: /natt/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function isPluralType(val) {\n  return val.one !== undefined;\n}\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: {\n      default: 'ஒரு வினாடிக்கு குறைவாக',\n      in: 'ஒரு வினாடிக்குள்',\n      ago: 'ஒரு வினாடிக்கு முன்பு'\n    },\n    other: {\n      default: '{{count}} வினாடிகளுக்கு குறைவாக',\n      in: '{{count}} வினாடிகளுக்குள்',\n      ago: '{{count}} வினாடிகளுக்கு முன்பு'\n    }\n  },\n  xSeconds: {\n    one: {\n      default: '1 வினாடி',\n      in: '1 வினாடியில்',\n      ago: '1 வினாடி முன்பு'\n    },\n    other: {\n      default: '{{count}} விநாடிகள்',\n      in: '{{count}} வினாடிகளில்',\n      ago: '{{count}} விநாடிகளுக்கு முன்பு'\n    }\n  },\n  halfAMinute: {\n    default: 'அரை நிமிடம்',\n    in: 'அரை நிமிடத்தில்',\n    ago: 'அரை நிமிடம் முன்பு'\n  },\n  lessThanXMinutes: {\n    one: {\n      default: 'ஒரு நிமிடத்திற்கும் குறைவாக',\n      in: 'ஒரு நிமிடத்திற்குள்',\n      ago: 'ஒரு நிமிடத்திற்கு முன்பு'\n    },\n    other: {\n      default: '{{count}} நிமிடங்களுக்கும் குறைவாக',\n      in: '{{count}} நிமிடங்களுக்குள்',\n      ago: '{{count}} நிமிடங்களுக்கு முன்பு'\n    }\n  },\n  xMinutes: {\n    one: {\n      default: '1 நிமிடம்',\n      in: '1 நிமிடத்தில்',\n      ago: '1 நிமிடம் முன்பு'\n    },\n    other: {\n      default: '{{count}} நிமிடங்கள்',\n      in: '{{count}} நிமிடங்களில்',\n      ago: '{{count}} நிமிடங்களுக்கு முன்பு'\n    }\n  },\n  aboutXHours: {\n    one: {\n      default: 'சுமார் 1 மணி நேரம்',\n      in: 'சுமார் 1 மணி நேரத்தில்',\n      ago: 'சுமார் 1 மணி நேரத்திற்கு முன்பு'\n    },\n    other: {\n      default: 'சுமார் {{count}} மணி நேரம்',\n      in: 'சுமார் {{count}} மணி நேரத்திற்கு முன்பு',\n      ago: 'சுமார் {{count}} மணி நேரத்தில்'\n    }\n  },\n  xHours: {\n    one: {\n      default: '1 மணி நேரம்',\n      in: '1 மணி நேரத்தில்',\n      ago: '1 மணி நேரத்திற்கு முன்பு'\n    },\n    other: {\n      default: '{{count}} மணி நேரம்',\n      in: '{{count}} மணி நேரத்தில்',\n      ago: '{{count}} மணி நேரத்திற்கு முன்பு'\n    }\n  },\n  xDays: {\n    one: {\n      default: '1 நாள்',\n      in: '1 நாளில்',\n      ago: '1 நாள் முன்பு'\n    },\n    other: {\n      default: '{{count}} நாட்கள்',\n      in: '{{count}} நாட்களில்',\n      ago: '{{count}} நாட்களுக்கு முன்பு'\n    }\n  },\n  aboutXWeeks: {\n    one: {\n      default: 'சுமார் 1 வாரம்',\n      in: 'சுமார் 1 வாரத்தில்',\n      ago: 'சுமார் 1 வாரம் முன்பு'\n    },\n    other: {\n      default: 'சுமார் {{count}} வாரங்கள்',\n      in: 'சுமார் {{count}} வாரங்களில்',\n      ago: 'சுமார் {{count}} வாரங்களுக்கு முன்பு'\n    }\n  },\n  xWeeks: {\n    one: {\n      default: '1 வாரம்',\n      in: '1 வாரத்தில்',\n      ago: '1 வாரம் முன்பு'\n    },\n    other: {\n      default: '{{count}} வாரங்கள்',\n      in: '{{count}} வாரங்களில்',\n      ago: '{{count}} வாரங்களுக்கு முன்பு'\n    }\n  },\n  aboutXMonths: {\n    one: {\n      default: 'சுமார் 1 மாதம்',\n      in: 'சுமார் 1 மாதத்தில்',\n      ago: 'சுமார் 1 மாதத்திற்கு முன்பு'\n    },\n    other: {\n      default: 'சுமார் {{count}} மாதங்கள்',\n      in: 'சுமார் {{count}} மாதங்களில்',\n      ago: 'சுமார் {{count}} மாதங்களுக்கு முன்பு'\n    }\n  },\n  xMonths: {\n    one: {\n      default: '1 மாதம்',\n      in: '1 மாதத்தில்',\n      ago: '1 மாதம் முன்பு'\n    },\n    other: {\n      default: '{{count}} மாதங்கள்',\n      in: '{{count}} மாதங்களில்',\n      ago: '{{count}} மாதங்களுக்கு முன்பு'\n    }\n  },\n  aboutXYears: {\n    one: {\n      default: 'சுமார் 1 வருடம்',\n      in: 'சுமார் 1 ஆண்டில்',\n      ago: 'சுமார் 1 வருடம் முன்பு'\n    },\n    other: {\n      default: 'சுமார் {{count}} ஆண்டுகள்',\n      in: 'சுமார் {{count}} ஆண்டுகளில்',\n      ago: 'சுமார் {{count}} ஆண்டுகளுக்கு முன்பு'\n    }\n  },\n  xYears: {\n    one: {\n      default: '1 வருடம்',\n      in: '1 ஆண்டில்',\n      ago: '1 வருடம் முன்பு'\n    },\n    other: {\n      default: '{{count}} ஆண்டுகள்',\n      in: '{{count}} ஆண்டுகளில்',\n      ago: '{{count}} ஆண்டுகளுக்கு முன்பு'\n    }\n  },\n  overXYears: {\n    one: {\n      default: '1 வருடத்திற்கு மேல்',\n      in: '1 வருடத்திற்கும் மேலாக',\n      ago: '1 வருடம் முன்பு'\n    },\n    other: {\n      default: '{{count}} ஆண்டுகளுக்கும் மேலாக',\n      in: '{{count}} ஆண்டுகளில்',\n      ago: '{{count}} ஆண்டுகளுக்கு முன்பு'\n    }\n  },\n  almostXYears: {\n    one: {\n      default: 'கிட்டத்தட்ட 1 வருடம்',\n      in: 'கிட்டத்தட்ட 1 ஆண்டில்',\n      ago: 'கிட்டத்தட்ட 1 வருடம் முன்பு'\n    },\n    other: {\n      default: 'கிட்டத்தட்ட {{count}} ஆண்டுகள்',\n      in: 'கிட்டத்தட்ட {{count}} ஆண்டுகளில்',\n      ago: 'கிட்டத்தட்ட {{count}} ஆண்டுகளுக்கு முன்பு'\n    }\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var tense = options !== null && options !== void 0 && options.addSuffix ? options.comparison && options.comparison > 0 ? 'in' : 'ago' : 'default';\n  var tokenValue = formatDistanceLocale[token];\n  if (!isPluralType(tokenValue)) return tokenValue[tense];\n  if (count === 1) {\n    return tokenValue.one[tense];\n  } else {\n    return tokenValue.other[tense].replace('{{count}}', String(count));\n  }\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\"; // Ref: https://www.unicode.org/cldr/charts/32/summary/ta.html\n// CLDR #1846 - #1849\nvar dateFormats = {\n  full: 'EEEE, d MMMM, y',\n  long: 'd MMMM, y',\n  medium: 'd MMM, y',\n  short: 'd/M/yy'\n};\n\n// CLDR #1850 - #1853\nvar timeFormats = {\n  full: 'a h:mm:ss zzzz',\n  long: 'a h:mm:ss z',\n  medium: 'a h:mm:ss',\n  short: 'a h:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'கடந்த' eeee p 'மணிக்கு'\",\n  yesterday: \"'நேற்று ' p 'மணிக்கு'\",\n  today: \"'இன்று ' p 'மணிக்கு'\",\n  tomorrow: \"'நாளை ' p 'மணிக்கு'\",\n  nextWeek: \"eeee p 'மணிக்கு'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Tamil locale (India).\n * @language Tamil\n * @iso-639-2 tam\n * @author Sibiraj [@sibiraj-s]{@link https://github.com/sibiraj-s}\n */\nvar locale = {\n  code: 'ta',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // Ref: https://www.unicode.org/cldr/charts/32/summary/ta.html\nvar eraValues = {\n  narrow: ['கி.மு.', 'கி.பி.'],\n  abbreviated: ['கி.மு.', 'கி.பி.'],\n  // CLDR #1624, #1626\n  wide: ['கிறிஸ்துவுக்கு முன்', 'அன்னோ டோமினி'] // CLDR #1620, #1622\n};\n\nvar quarterValues = {\n  // CLDR #1644 - #1647\n  narrow: ['1', '2', '3', '4'],\n  // CLDR #1636 - #1639\n  abbreviated: ['காலா.1', 'காலா.2', 'காலா.3', 'காலா.4'],\n  // CLDR #1628 - #1631\n  wide: ['ஒன்றாம் காலாண்டு', 'இரண்டாம் காலாண்டு', 'மூன்றாம் காலாண்டு', 'நான்காம் காலாண்டு']\n};\nvar monthValues = {\n  // CLDR #700 - #711\n  narrow: ['ஜ', 'பி', 'மா', 'ஏ', 'மே', 'ஜூ', 'ஜூ', 'ஆ', 'செ', 'அ', 'ந', 'டி'],\n  // CLDR #1676 - #1687\n  abbreviated: ['ஜன.', 'பிப்.', 'மார்.', 'ஏப்.', 'மே', 'ஜூன்', 'ஜூலை', 'ஆக.', 'செப்.', 'அக்.', 'நவ.', 'டிச.'],\n  // CLDR #1652 - #1663\n  wide: ['ஜனவரி',\n  // January\n  'பிப்ரவரி',\n  // February\n  'மார்ச்',\n  // March\n  'ஏப்ரல்',\n  // April\n  'மே',\n  // May\n  'ஜூன்',\n  // June\n  'ஜூலை',\n  // July\n  'ஆகஸ்ட்',\n  // August\n  'செப்டம்பர்',\n  // September\n  'அக்டோபர்',\n  // October\n  'நவம்பர்',\n  // November\n  'டிசம்பர்' // December\n  ]\n};\n\nvar dayValues = {\n  // CLDR #1766 - #1772\n  narrow: ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n  // CLDR #1752 - #1758\n  short: ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n  // CLDR #1738 - #1744\n  abbreviated: ['ஞாயி.', 'திங்.', 'செவ்.', 'புத.', 'வியா.', 'வெள்.', 'சனி'],\n  // CLDR #1724 - #1730\n  wide: ['ஞாயிறு',\n  // Sunday\n  'திங்கள்',\n  // Monday\n  'செவ்வாய்',\n  // Tuesday\n  'புதன்',\n  // Wednesday\n  'வியாழன்',\n  // Thursday\n  'வெள்ளி',\n  // Friday\n  'சனி' // Saturday\n  ]\n};\n\n// CLDR #1780 - #1845\nvar dayPeriodValues = {\n  narrow: {\n    am: 'மு.ப',\n    pm: 'பி.ப',\n    midnight: 'நள்.',\n    noon: 'நண்.',\n    morning: 'கா.',\n    afternoon: 'மதி.',\n    evening: 'மா.',\n    night: 'இர.'\n  },\n  abbreviated: {\n    am: 'முற்பகல்',\n    pm: 'பிற்பகல்',\n    midnight: 'நள்ளிரவு',\n    noon: 'நண்பகல்',\n    morning: 'காலை',\n    afternoon: 'மதியம்',\n    evening: 'மாலை',\n    night: 'இரவு'\n  },\n  wide: {\n    am: 'முற்பகல்',\n    pm: 'பிற்பகல்',\n    midnight: 'நள்ளிரவு',\n    noon: 'நண்பகல்',\n    morning: 'காலை',\n    afternoon: 'மதியம்',\n    evening: 'மாலை',\n    night: 'இரவு'\n  }\n};\n\n// CLDR #1780 - #1845\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'மு.ப',\n    pm: 'பி.ப',\n    midnight: 'நள்.',\n    noon: 'நண்.',\n    morning: 'கா.',\n    afternoon: 'மதி.',\n    evening: 'மா.',\n    night: 'இர.'\n  },\n  abbreviated: {\n    am: 'முற்பகல்',\n    pm: 'பிற்பகல்',\n    midnight: 'நள்ளிரவு',\n    noon: 'நண்பகல்',\n    morning: 'காலை',\n    afternoon: 'மதியம்',\n    evening: 'மாலை',\n    night: 'இரவு'\n  },\n  wide: {\n    am: 'முற்பகல்',\n    pm: 'பிற்பகல்',\n    midnight: 'நள்ளிரவு',\n    noon: 'நண்பகல்',\n    morning: 'காலை',\n    afternoon: 'மதியம்',\n    evening: 'மாலை',\n    night: 'இரவு'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(வது)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(கி.மு.|கி.பி.)/i,\n  abbreviated: /^(கி\\.?\\s?மு\\.?|கி\\.?\\s?பி\\.?)/,\n  wide: /^(கிறிஸ்துவுக்கு\\sமுன்|அன்னோ\\sடோமினி)/i\n};\nvar parseEraPatterns = {\n  any: [/கி\\.?\\s?மு\\.?/, /கி\\.?\\s?பி\\.?/]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^காலா.[1234]/i,\n  wide: /^(ஒன்றாம்|இரண்டாம்|மூன்றாம்|நான்காம்) காலாண்டு/i\n};\nvar parseQuarterPatterns = {\n  narrow: [/1/i, /2/i, /3/i, /4/i],\n  any: [/(1|காலா.1|ஒன்றாம்)/i, /(2|காலா.2|இரண்டாம்)/i, /(3|காலா.3|மூன்றாம்)/i, /(4|காலா.4|நான்காம்)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(ஜ|பி|மா|ஏ|மே|ஜூ|ஆ|செ|அ|ந|டி)$/i,\n  abbreviated: /^(ஜன.|பிப்.|மார்.|ஏப்.|மே|ஜூன்|ஜூலை|ஆக.|செப்.|அக்.|நவ.|டிச.)/i,\n  wide: /^(ஜனவரி|பிப்ரவரி|மார்ச்|ஏப்ரல்|மே|ஜூன்|ஜூலை|ஆகஸ்ட்|செப்டம்பர்|அக்டோபர்|நவம்பர்|டிசம்பர்)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ஜ$/i, /^பி/i, /^மா/i, /^ஏ/i, /^மே/i, /^ஜூ/i, /^ஜூ/i, /^ஆ/i, /^செ/i, /^அ/i, /^ந/i, /^டி/i],\n  any: [/^ஜன/i, /^பி/i, /^மா/i, /^ஏ/i, /^மே/i, /^ஜூன்/i, /^ஜூலை/i, /^ஆ/i, /^செ/i, /^அ/i, /^ந/i, /^டி/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(ஞா|தி|செ|பு|வி|வெ|ச)/i,\n  short: /^(ஞா|தி|செ|பு|வி|வெ|ச)/i,\n  abbreviated: /^(ஞாயி.|திங்.|செவ்.|புத.|வியா.|வெள்.|சனி)/i,\n  wide: /^(ஞாயிறு|திங்கள்|செவ்வாய்|புதன்|வியாழன்|வெள்ளி|சனி)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ஞா/i, /^தி/i, /^செ/i, /^பு/i, /^வி/i, /^வெ/i, /^ச/i],\n  any: [/^ஞா/i, /^தி/i, /^செ/i, /^பு/i, /^வி/i, /^வெ/i, /^ச/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(மு.ப|பி.ப|நள்|நண்|காலை|மதியம்|மாலை|இரவு)/i,\n  any: /^(மு.ப|பி.ப|முற்பகல்|பிற்பகல்|நள்ளிரவு|நண்பகல்|காலை|மதியம்|மாலை|இரவு)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^மு/i,\n    pm: /^பி/i,\n    midnight: /^நள்/i,\n    noon: /^நண்/i,\n    morning: /காலை/i,\n    afternoon: /மதியம்/i,\n    evening: /மாலை/i,\n    night: /இரவு/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","// Source: https://www.unicode.org/cldr/charts/32/summary/te.html\n\nvar formatDistanceLocale = {\n  lessThanXSeconds: {\n    standalone: {\n      one: 'సెకను కన్నా తక్కువ',\n      other: '{{count}} సెకన్ల కన్నా తక్కువ'\n    },\n    withPreposition: {\n      one: 'సెకను',\n      other: '{{count}} సెకన్ల'\n    }\n  },\n  xSeconds: {\n    standalone: {\n      one: 'ఒక సెకను',\n      // CLDR #1314\n      other: '{{count}} సెకన్ల'\n    },\n    withPreposition: {\n      one: 'ఒక సెకను',\n      other: '{{count}} సెకన్ల'\n    }\n  },\n  halfAMinute: {\n    standalone: 'అర నిమిషం',\n    withPreposition: 'అర నిమిషం'\n  },\n  lessThanXMinutes: {\n    standalone: {\n      one: 'ఒక నిమిషం కన్నా తక్కువ',\n      other: '{{count}} నిమిషాల కన్నా తక్కువ'\n    },\n    withPreposition: {\n      one: 'ఒక నిమిషం',\n      other: '{{count}} నిమిషాల'\n    }\n  },\n  xMinutes: {\n    standalone: {\n      one: 'ఒక నిమిషం',\n      // CLDR #1311\n      other: '{{count}} నిమిషాలు'\n    },\n    withPreposition: {\n      one: 'ఒక నిమిషం',\n      // CLDR #1311\n      other: '{{count}} నిమిషాల'\n    }\n  },\n  aboutXHours: {\n    standalone: {\n      one: 'సుమారు ఒక గంట',\n      other: 'సుమారు {{count}} గంటలు'\n    },\n    withPreposition: {\n      one: 'సుమారు ఒక గంట',\n      other: 'సుమారు {{count}} గంటల'\n    }\n  },\n  xHours: {\n    standalone: {\n      one: 'ఒక గంట',\n      // CLDR #1308\n      other: '{{count}} గంటలు'\n    },\n    withPreposition: {\n      one: 'ఒక గంట',\n      other: '{{count}} గంటల'\n    }\n  },\n  xDays: {\n    standalone: {\n      one: 'ఒక రోజు',\n      // CLDR #1292\n      other: '{{count}} రోజులు'\n    },\n    withPreposition: {\n      one: 'ఒక రోజు',\n      other: '{{count}} రోజుల'\n    }\n  },\n  aboutXWeeks: {\n    standalone: {\n      one: 'సుమారు ఒక వారం',\n      other: 'సుమారు {{count}} వారాలు'\n    },\n    withPreposition: {\n      one: 'సుమారు ఒక వారం',\n      other: 'సుమారు {{count}} వారాలల'\n    }\n  },\n  xWeeks: {\n    standalone: {\n      one: 'ఒక వారం',\n      other: '{{count}} వారాలు'\n    },\n    withPreposition: {\n      one: 'ఒక వారం',\n      other: '{{count}} వారాలల'\n    }\n  },\n  aboutXMonths: {\n    standalone: {\n      one: 'సుమారు ఒక నెల',\n      other: 'సుమారు {{count}} నెలలు'\n    },\n    withPreposition: {\n      one: 'సుమారు ఒక నెల',\n      other: 'సుమారు {{count}} నెలల'\n    }\n  },\n  xMonths: {\n    standalone: {\n      one: 'ఒక నెల',\n      // CLDR #1281\n      other: '{{count}} నెలలు'\n    },\n    withPreposition: {\n      one: 'ఒక నెల',\n      other: '{{count}} నెలల'\n    }\n  },\n  aboutXYears: {\n    standalone: {\n      one: 'సుమారు ఒక సంవత్సరం',\n      other: 'సుమారు {{count}} సంవత్సరాలు'\n    },\n    withPreposition: {\n      one: 'సుమారు ఒక సంవత్సరం',\n      other: 'సుమారు {{count}} సంవత్సరాల'\n    }\n  },\n  xYears: {\n    standalone: {\n      one: 'ఒక సంవత్సరం',\n      // CLDR #1275\n      other: '{{count}} సంవత్సరాలు'\n    },\n    withPreposition: {\n      one: 'ఒక సంవత్సరం',\n      other: '{{count}} సంవత్సరాల'\n    }\n  },\n  overXYears: {\n    standalone: {\n      one: 'ఒక సంవత్సరం పైగా',\n      other: '{{count}} సంవత్సరాలకు పైగా'\n    },\n    withPreposition: {\n      one: 'ఒక సంవత్సరం',\n      other: '{{count}} సంవత్సరాల'\n    }\n  },\n  almostXYears: {\n    standalone: {\n      one: 'దాదాపు ఒక సంవత్సరం',\n      other: 'దాదాపు {{count}} సంవత్సరాలు'\n    },\n    withPreposition: {\n      one: 'దాదాపు ఒక సంవత్సరం',\n      other: 'దాదాపు {{count}} సంవత్సరాల'\n    }\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + 'లో';\n    } else {\n      return result + ' క్రితం';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\"; // Source: https://www.unicode.org/cldr/charts/32/summary/te.html\n// CLDR #1807 - #1811\nvar dateFormats = {\n  full: 'd, MMMM y, EEEE',\n  long: 'd MMMM, y',\n  medium: 'd MMM, y',\n  short: 'dd-MM-yy'\n};\n\n// CLDR #1807 - #1811\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\n\n// CLDR #1815 - #1818\nvar dateTimeFormats = {\n  full: \"{{date}} {{time}}'కి'\",\n  long: \"{{date}} {{time}}'కి'\",\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","// Source: https://www.unicode.org/cldr/charts/32/summary/te.html\n\nvar formatRelativeLocale = {\n  lastWeek: \"'గత' eeee p\",\n  // CLDR #1384\n  yesterday: \"'నిన్న' p\",\n  // CLDR #1393\n  today: \"'ఈ రోజు' p\",\n  // CLDR #1394\n  tomorrow: \"'రేపు' p\",\n  // CLDR #1395\n  nextWeek: \"'తదుపరి' eeee p\",\n  // CLDR #1386\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Telugu locale\n * @language Telugu\n * @iso-639-2 tel\n * @author Kranthi Lakum [@kranthilakum]{@link https://github.com/kranthilakum}\n */\nvar locale = {\n  code: 'te',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // Source: https://www.unicode.org/cldr/charts/32/summary/te.html\n// Source: https://dsal.uchicago.edu/dictionaries/brown/\n// CLDR #1605 - #1608\nvar eraValues = {\n  narrow: ['క్రీ.పూ.', 'క్రీ.శ.'],\n  abbreviated: ['క్రీ.పూ.', 'క్రీ.శ.'],\n  wide: ['క్రీస్తు పూర్వం', 'క్రీస్తుశకం']\n};\n\n// CLDR #1613 - #1628\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['త్రై1', 'త్రై2', 'త్రై3', 'త్రై4'],\n  wide: ['1వ త్రైమాసికం', '2వ త్రైమాసికం', '3వ త్రైమాసికం', '4వ త్రైమాసికం']\n};\n\n// CLDR #1637 - #1708\nvar monthValues = {\n  narrow: ['జ', 'ఫి', 'మా', 'ఏ', 'మే', 'జూ', 'జు', 'ఆ', 'సె', 'అ', 'న', 'డి'],\n  abbreviated: ['జన', 'ఫిబ్ర', 'మార్చి', 'ఏప్రి', 'మే', 'జూన్', 'జులై', 'ఆగ', 'సెప్టెం', 'అక్టో', 'నవం', 'డిసెం'],\n  wide: ['జనవరి', 'ఫిబ్రవరి', 'మార్చి', 'ఏప్రిల్', 'మే', 'జూన్', 'జులై', 'ఆగస్టు', 'సెప్టెంబర్', 'అక్టోబర్', 'నవంబర్', 'డిసెంబర్']\n};\n\n// CLDR #1709 - #1764\nvar dayValues = {\n  narrow: ['ఆ', 'సో', 'మ', 'బు', 'గు', 'శు', 'శ'],\n  short: ['ఆది', 'సోమ', 'మంగళ', 'బుధ', 'గురు', 'శుక్ర', 'శని'],\n  abbreviated: ['ఆది', 'సోమ', 'మంగళ', 'బుధ', 'గురు', 'శుక్ర', 'శని'],\n  wide: ['ఆదివారం', 'సోమవారం', 'మంగళవారం', 'బుధవారం', 'గురువారం', 'శుక్రవారం', 'శనివారం']\n};\n\n// CLDR #1767 - #1806\nvar dayPeriodValues = {\n  narrow: {\n    am: 'పూర్వాహ్నం',\n    pm: 'అపరాహ్నం',\n    midnight: 'అర్ధరాత్రి',\n    noon: 'మిట్టమధ్యాహ్నం',\n    morning: 'ఉదయం',\n    afternoon: 'మధ్యాహ్నం',\n    evening: 'సాయంత్రం',\n    night: 'రాత్రి'\n  },\n  abbreviated: {\n    am: 'పూర్వాహ్నం',\n    pm: 'అపరాహ్నం',\n    midnight: 'అర్ధరాత్రి',\n    noon: 'మిట్టమధ్యాహ్నం',\n    morning: 'ఉదయం',\n    afternoon: 'మధ్యాహ్నం',\n    evening: 'సాయంత్రం',\n    night: 'రాత్రి'\n  },\n  wide: {\n    am: 'పూర్వాహ్నం',\n    pm: 'అపరాహ్నం',\n    midnight: 'అర్ధరాత్రి',\n    noon: 'మిట్టమధ్యాహ్నం',\n    morning: 'ఉదయం',\n    afternoon: 'మధ్యాహ్నం',\n    evening: 'సాయంత్రం',\n    night: 'రాత్రి'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'పూర్వాహ్నం',\n    pm: 'అపరాహ్నం',\n    midnight: 'అర్ధరాత్రి',\n    noon: 'మిట్టమధ్యాహ్నం',\n    morning: 'ఉదయం',\n    afternoon: 'మధ్యాహ్నం',\n    evening: 'సాయంత్రం',\n    night: 'రాత్రి'\n  },\n  abbreviated: {\n    am: 'పూర్వాహ్నం',\n    pm: 'అపరాహ్నం',\n    midnight: 'అర్ధరాత్రి',\n    noon: 'మిట్టమధ్యాహ్నం',\n    morning: 'ఉదయం',\n    afternoon: 'మధ్యాహ్నం',\n    evening: 'సాయంత్రం',\n    night: 'రాత్రి'\n  },\n  wide: {\n    am: 'పూర్వాహ్నం',\n    pm: 'అపరాహ్నం',\n    midnight: 'అర్ధరాత్రి',\n    noon: 'మిట్టమధ్యాహ్నం',\n    morning: 'ఉదయం',\n    afternoon: 'మధ్యాహ్నం',\n    evening: 'సాయంత్రం',\n    night: 'రాత్రి'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'వ';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(వ)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(క్రీ\\.పూ\\.|క్రీ\\.శ\\.)/i,\n  abbreviated: /^(క్రీ\\.?\\s?పూ\\.?|ప్ర\\.?\\s?శ\\.?\\s?పూ\\.?|క్రీ\\.?\\s?శ\\.?|సా\\.?\\s?శ\\.?)/i,\n  wide: /^(క్రీస్తు పూర్వం|ప్రస్తుత శకానికి పూర్వం|క్రీస్తు శకం|ప్రస్తుత శకం)/i\n};\nvar parseEraPatterns = {\n  any: [/^(పూ|శ)/i, /^సా/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^త్రై[1234]/i,\n  wide: /^[1234](వ)? త్రైమాసికం/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(జూ|జు|జ|ఫి|మా|ఏ|మే|ఆ|సె|అ|న|డి)/i,\n  abbreviated: /^(జన|ఫిబ్ర|మార్చి|ఏప్రి|మే|జూన్|జులై|ఆగ|సెప్|అక్టో|నవ|డిసె)/i,\n  wide: /^(జనవరి|ఫిబ్రవరి|మార్చి|ఏప్రిల్|మే|జూన్|జులై|ఆగస్టు|సెప్టెంబర్|అక్టోబర్|నవంబర్|డిసెంబర్)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^జ/i, /^ఫి/i, /^మా/i, /^ఏ/i, /^మే/i, /^జూ/i, /^జు/i, /^ఆ/i, /^సె/i, /^అ/i, /^న/i, /^డి/i],\n  any: [/^జన/i, /^ఫి/i, /^మా/i, /^ఏ/i, /^మే/i, /^జూన్/i, /^జులై/i, /^ఆగ/i, /^సె/i, /^అ/i, /^న/i, /^డి/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(ఆ|సో|మ|బు|గు|శు|శ)/i,\n  short: /^(ఆది|సోమ|మం|బుధ|గురు|శుక్ర|శని)/i,\n  abbreviated: /^(ఆది|సోమ|మం|బుధ|గురు|శుక్ర|శని)/i,\n  wide: /^(ఆదివారం|సోమవారం|మంగళవారం|బుధవారం|గురువారం|శుక్రవారం|శనివారం)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ఆ/i, /^సో/i, /^మ/i, /^బు/i, /^గు/i, /^శు/i, /^శ/i],\n  any: [/^ఆది/i, /^సోమ/i, /^మం/i, /^బుధ/i, /^గురు/i, /^శుక్ర/i, /^శని/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(పూర్వాహ్నం|అపరాహ్నం|అర్ధరాత్రి|మిట్టమధ్యాహ్నం|ఉదయం|మధ్యాహ్నం|సాయంత్రం|రాత్రి)/i,\n  any: /^(పూర్వాహ్నం|అపరాహ్నం|అర్ధరాత్రి|మిట్టమధ్యాహ్నం|ఉదయం|మధ్యాహ్నం|సాయంత్రం|రాత్రి)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^పూర్వాహ్నం/i,\n    pm: /^అపరాహ్నం/i,\n    midnight: /^అర్ధ/i,\n    noon: /^మిట్ట/i,\n    morning: /ఉదయం/i,\n    afternoon: /మధ్యాహ్నం/i,\n    evening: /సాయంత్రం/i,\n    night: /రాత్రి/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'น้อยกว่า 1 วินาที',\n    other: 'น้อยกว่า {{count}} วินาที'\n  },\n  xSeconds: {\n    one: '1 วินาที',\n    other: '{{count}} วินาที'\n  },\n  halfAMinute: 'ครึ่งนาที',\n  lessThanXMinutes: {\n    one: 'น้อยกว่า 1 นาที',\n    other: 'น้อยกว่า {{count}} นาที'\n  },\n  xMinutes: {\n    one: '1 นาที',\n    other: '{{count}} นาที'\n  },\n  aboutXHours: {\n    one: 'ประมาณ 1 ชั่วโมง',\n    other: 'ประมาณ {{count}} ชั่วโมง'\n  },\n  xHours: {\n    one: '1 ชั่วโมง',\n    other: '{{count}} ชั่วโมง'\n  },\n  xDays: {\n    one: '1 วัน',\n    other: '{{count}} วัน'\n  },\n  aboutXWeeks: {\n    one: 'ประมาณ 1 สัปดาห์',\n    other: 'ประมาณ {{count}} สัปดาห์'\n  },\n  xWeeks: {\n    one: '1 สัปดาห์',\n    other: '{{count}} สัปดาห์'\n  },\n  aboutXMonths: {\n    one: 'ประมาณ 1 เดือน',\n    other: 'ประมาณ {{count}} เดือน'\n  },\n  xMonths: {\n    one: '1 เดือน',\n    other: '{{count}} เดือน'\n  },\n  aboutXYears: {\n    one: 'ประมาณ 1 ปี',\n    other: 'ประมาณ {{count}} ปี'\n  },\n  xYears: {\n    one: '1 ปี',\n    other: '{{count}} ปี'\n  },\n  overXYears: {\n    one: 'มากกว่า 1 ปี',\n    other: 'มากกว่า {{count}} ปี'\n  },\n  almostXYears: {\n    one: 'เกือบ 1 ปี',\n    other: 'เกือบ {{count}} ปี'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      if (token === 'halfAMinute') {\n        return 'ใน' + result;\n      } else {\n        return 'ใน ' + result;\n      }\n    } else {\n      return result + 'ที่ผ่านมา';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'วันEEEEที่ do MMMM y',\n  long: 'do MMMM y',\n  medium: 'd MMM y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'H:mm:ss น. zzzz',\n  long: 'H:mm:ss น. z',\n  medium: 'H:mm:ss น.',\n  short: 'H:mm น.'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'เวลา' {{time}}\",\n  long: \"{{date}} 'เวลา' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'medium'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee'ที่แล้วเวลา' p\",\n  yesterday: \"'เมื่อวานนี้เวลา' p\",\n  today: \"'วันนี้เวลา' p\",\n  tomorrow: \"'พรุ่งนี้เวลา' p\",\n  nextWeek: \"eeee 'เวลา' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Thai locale.\n * @language Thai\n * @iso-639-2 tha\n * @author Athiwat Hirunworawongkun [@athivvat]{@link https://github.com/athivvat}\n * @author [@hawkup]{@link https://github.com/hawkup}\n * @author  Jirawat I. [@nodtem66]{@link https://github.com/nodtem66}\n */\nvar locale = {\n  code: 'th',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['B', 'คศ'],\n  abbreviated: ['BC', 'ค.ศ.'],\n  wide: ['ปีก่อนคริสตกาล', 'คริสต์ศักราช']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['ไตรมาสแรก', 'ไตรมาสที่สอง', 'ไตรมาสที่สาม', 'ไตรมาสที่สี่']\n};\nvar dayValues = {\n  narrow: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],\n  short: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],\n  abbreviated: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],\n  wide: ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์']\n};\nvar monthValues = {\n  narrow: ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.'],\n  abbreviated: ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.'],\n  wide: ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ก่อนเที่ยง',\n    pm: 'หลังเที่ยง',\n    midnight: 'เที่ยงคืน',\n    noon: 'เที่ยง',\n    morning: 'เช้า',\n    afternoon: 'บ่าย',\n    evening: 'เย็น',\n    night: 'กลางคืน'\n  },\n  abbreviated: {\n    am: 'ก่อนเที่ยง',\n    pm: 'หลังเที่ยง',\n    midnight: 'เที่ยงคืน',\n    noon: 'เที่ยง',\n    morning: 'เช้า',\n    afternoon: 'บ่าย',\n    evening: 'เย็น',\n    night: 'กลางคืน'\n  },\n  wide: {\n    am: 'ก่อนเที่ยง',\n    pm: 'หลังเที่ยง',\n    midnight: 'เที่ยงคืน',\n    noon: 'เที่ยง',\n    morning: 'เช้า',\n    afternoon: 'บ่าย',\n    evening: 'เย็น',\n    night: 'กลางคืน'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ก่อนเที่ยง',\n    pm: 'หลังเที่ยง',\n    midnight: 'เที่ยงคืน',\n    noon: 'เที่ยง',\n    morning: 'ตอนเช้า',\n    afternoon: 'ตอนกลางวัน',\n    evening: 'ตอนเย็น',\n    night: 'ตอนกลางคืน'\n  },\n  abbreviated: {\n    am: 'ก่อนเที่ยง',\n    pm: 'หลังเที่ยง',\n    midnight: 'เที่ยงคืน',\n    noon: 'เที่ยง',\n    morning: 'ตอนเช้า',\n    afternoon: 'ตอนกลางวัน',\n    evening: 'ตอนเย็น',\n    night: 'ตอนกลางคืน'\n  },\n  wide: {\n    am: 'ก่อนเที่ยง',\n    pm: 'หลังเที่ยง',\n    midnight: 'เที่ยงคืน',\n    noon: 'เที่ยง',\n    morning: 'ตอนเช้า',\n    afternoon: 'ตอนกลางวัน',\n    evening: 'ตอนเย็น',\n    night: 'ตอนกลางคืน'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^\\d+/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^([bB]|[aA]|คศ)/i,\n  abbreviated: /^([bB]\\.?\\s?[cC]\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?|ค\\.?ศ\\.?)/i,\n  wide: /^(ก่อนคริสตกาล|คริสต์ศักราช|คริสตกาล)/i\n};\nvar parseEraPatterns = {\n  any: [/^[bB]/i, /^(^[aA]|ค\\.?ศ\\.?|คริสตกาล|คริสต์ศักราช|)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^ไตรมาส(ที่)? ?[1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|แรก|หนึ่ง)/i, /(2|สอง)/i, /(3|สาม)/i, /(4|สี่)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(ม\\.?ค\\.?|ก\\.?พ\\.?|มี\\.?ค\\.?|เม\\.?ย\\.?|พ\\.?ค\\.?|มิ\\.?ย\\.?|ก\\.?ค\\.?|ส\\.?ค\\.?|ก\\.?ย\\.?|ต\\.?ค\\.?|พ\\.?ย\\.?|ธ\\.?ค\\.?)/i,\n  abbreviated: /^(ม\\.?ค\\.?|ก\\.?พ\\.?|มี\\.?ค\\.?|เม\\.?ย\\.?|พ\\.?ค\\.?|มิ\\.?ย\\.?|ก\\.?ค\\.?|ส\\.?ค\\.?|ก\\.?ย\\.?|ต\\.?ค\\.?|พ\\.?ย\\.?|ธ\\.?ค\\.?')/i,\n  wide: /^(มกราคม|กุมภาพันธ์|มีนาคม|เมษายน|พฤษภาคม|มิถุนายน|กรกฎาคม|สิงหาคม|กันยายน|ตุลาคม|พฤศจิกายน|ธันวาคม)/i\n};\nvar parseMonthPatterns = {\n  wide: [/^มก/i, /^กุม/i, /^มี/i, /^เม/i, /^พฤษ/i, /^มิ/i, /^กรก/i, /^ส/i, /^กัน/i, /^ต/i, /^พฤศ/i, /^ธ/i],\n  any: [/^ม\\.?ค\\.?/i, /^ก\\.?พ\\.?/i, /^มี\\.?ค\\.?/i, /^เม\\.?ย\\.?/i, /^พ\\.?ค\\.?/i, /^มิ\\.?ย\\.?/i, /^ก\\.?ค\\.?/i, /^ส\\.?ค\\.?/i, /^ก\\.?ย\\.?/i, /^ต\\.?ค\\.?/i, /^พ\\.?ย\\.?/i, /^ธ\\.?ค\\.?/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(อา\\.?|จ\\.?|อ\\.?|พฤ\\.?|พ\\.?|ศ\\.?|ส\\.?)/i,\n  short: /^(อา\\.?|จ\\.?|อ\\.?|พฤ\\.?|พ\\.?|ศ\\.?|ส\\.?)/i,\n  abbreviated: /^(อา\\.?|จ\\.?|อ\\.?|พฤ\\.?|พ\\.?|ศ\\.?|ส\\.?)/i,\n  wide: /^(อาทิตย์|จันทร์|อังคาร|พุธ|พฤหัสบดี|ศุกร์|เสาร์)/i\n};\nvar parseDayPatterns = {\n  wide: [/^อา/i, /^จั/i, /^อั/i, /^พุธ/i, /^พฤ/i, /^ศ/i, /^เส/i],\n  any: [/^อา/i, /^จ/i, /^อ/i, /^พ(?!ฤ)/i, /^พฤ/i, /^ศ/i, /^ส/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(ก่อนเที่ยง|หลังเที่ยง|เที่ยงคืน|เที่ยง|(ตอน.*?)?.*(เที่ยง|เช้า|บ่าย|เย็น|กลางคืน))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ก่อนเที่ยง/i,\n    pm: /^หลังเที่ยง/i,\n    midnight: /^เที่ยงคืน/i,\n    noon: /^เที่ยง/i,\n    morning: /เช้า/i,\n    afternoon: /บ่าย/i,\n    evening: /เย็น/i,\n    night: /กลางคืน/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'bir saniyeden az',\n    other: '{{count}} saniyeden az'\n  },\n  xSeconds: {\n    one: '1 saniye',\n    other: '{{count}} saniye'\n  },\n  halfAMinute: 'yarım dakika',\n  lessThanXMinutes: {\n    one: 'bir dakikadan az',\n    other: '{{count}} dakikadan az'\n  },\n  xMinutes: {\n    one: '1 dakika',\n    other: '{{count}} dakika'\n  },\n  aboutXHours: {\n    one: 'yaklaşık 1 saat',\n    other: 'yaklaşık {{count}} saat'\n  },\n  xHours: {\n    one: '1 saat',\n    other: '{{count}} saat'\n  },\n  xDays: {\n    one: '1 gün',\n    other: '{{count}} gün'\n  },\n  aboutXWeeks: {\n    one: 'yaklaşık 1 hafta',\n    other: 'yaklaşık {{count}} hafta'\n  },\n  xWeeks: {\n    one: '1 hafta',\n    other: '{{count}} hafta'\n  },\n  aboutXMonths: {\n    one: 'yaklaşık 1 ay',\n    other: 'yaklaşık {{count}} ay'\n  },\n  xMonths: {\n    one: '1 ay',\n    other: '{{count}} ay'\n  },\n  aboutXYears: {\n    one: 'yaklaşık 1 yıl',\n    other: 'yaklaşık {{count}} yıl'\n  },\n  xYears: {\n    one: '1 yıl',\n    other: '{{count}} yıl'\n  },\n  overXYears: {\n    one: '1 yıldan fazla',\n    other: '{{count}} yıldan fazla'\n  },\n  almostXYears: {\n    one: 'neredeyse 1 yıl',\n    other: 'neredeyse {{count}} yıl'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' sonra';\n    } else {\n      return result + ' önce';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'd MMMM y EEEE',\n  long: 'd MMMM y',\n  medium: 'd MMM y',\n  short: 'dd.MM.yyyy'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'saat' {{time}}\",\n  long: \"{{date}} 'saat' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'geçen hafta' eeee 'saat' p\",\n  yesterday: \"'dün saat' p\",\n  today: \"'bugün saat' p\",\n  tomorrow: \"'yarın saat' p\",\n  nextWeek: \"eeee 'saat' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Turkish locale.\n * @language Turkish\n * @iso-639-2 tur\n * @author Alpcan Aydın [@alpcanaydin]{@link https://github.com/alpcanaydin}\n * @author Berkay Sargın [@berkaey]{@link https://github.com/berkaey}\n * @author Fatih Bulut [@bulutfatih]{@link https://github.com/bulutfatih}\n * @author Ismail Demirbilek [@dbtek]{@link https://github.com/dbtek}\n * @author İsmail Kayar [@ikayar]{@link https://github.com/ikayar}\n *\n *\n */\nvar locale = {\n  code: 'tr',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['MÖ', 'MS'],\n  abbreviated: ['MÖ', 'MS'],\n  wide: ['Milattan Önce', 'Milattan Sonra']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1Ç', '2Ç', '3Ç', '4Ç'],\n  wide: ['İlk çeyrek', 'İkinci Çeyrek', 'Üçüncü çeyrek', 'Son çeyrek']\n};\nvar monthValues = {\n  narrow: ['O', 'Ş', 'M', 'N', 'M', 'H', 'T', 'A', 'E', 'E', 'K', 'A'],\n  abbreviated: ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'],\n  wide: ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık']\n};\nvar dayValues = {\n  narrow: ['P', 'P', 'S', 'Ç', 'P', 'C', 'C'],\n  short: ['Pz', 'Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct'],\n  abbreviated: ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cts'],\n  wide: ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'öö',\n    pm: 'ös',\n    midnight: 'gy',\n    noon: 'ö',\n    morning: 'sa',\n    afternoon: 'ös',\n    evening: 'ak',\n    night: 'ge'\n  },\n  abbreviated: {\n    am: 'ÖÖ',\n    pm: 'ÖS',\n    midnight: 'gece yarısı',\n    noon: 'öğle',\n    morning: 'sabah',\n    afternoon: 'öğleden sonra',\n    evening: 'akşam',\n    night: 'gece'\n  },\n  wide: {\n    am: 'Ö.Ö.',\n    pm: 'Ö.S.',\n    midnight: 'gece yarısı',\n    noon: 'öğle',\n    morning: 'sabah',\n    afternoon: 'öğleden sonra',\n    evening: 'akşam',\n    night: 'gece'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'öö',\n    pm: 'ös',\n    midnight: 'gy',\n    noon: 'ö',\n    morning: 'sa',\n    afternoon: 'ös',\n    evening: 'ak',\n    night: 'ge'\n  },\n  abbreviated: {\n    am: 'ÖÖ',\n    pm: 'ÖS',\n    midnight: 'gece yarısı',\n    noon: 'öğlen',\n    morning: 'sabahleyin',\n    afternoon: 'öğleden sonra',\n    evening: 'akşamleyin',\n    night: 'geceleyin'\n  },\n  wide: {\n    am: 'ö.ö.',\n    pm: 'ö.s.',\n    midnight: 'gece yarısı',\n    noon: 'öğlen',\n    morning: 'sabahleyin',\n    afternoon: 'öğleden sonra',\n    evening: 'akşamleyin',\n    night: 'geceleyin'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + '.';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(mö|ms)/i,\n  abbreviated: /^(mö|ms)/i,\n  wide: /^(milattan önce|milattan sonra)/i\n};\nvar parseEraPatterns = {\n  any: [/(^mö|^milattan önce)/i, /(^ms|^milattan sonra)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]ç/i,\n  wide: /^((i|İ)lk|(i|İ)kinci|üçüncü|son) çeyrek/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n  abbreviated: [/1ç/i, /2ç/i, /3ç/i, /4ç/i],\n  wide: [/^(i|İ)lk çeyrek/i, /(i|İ)kinci çeyrek/i, /üçüncü çeyrek/i, /son çeyrek/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[oşmnhtaek]/i,\n  abbreviated: /^(oca|şub|mar|nis|may|haz|tem|ağu|eyl|eki|kas|ara)/i,\n  wide: /^(ocak|şubat|mart|nisan|mayıs|haziran|temmuz|ağustos|eylül|ekim|kasım|aralık)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^o/i, /^ş/i, /^m/i, /^n/i, /^m/i, /^h/i, /^t/i, /^a/i, /^e/i, /^e/i, /^k/i, /^a/i],\n  any: [/^o/i, /^ş/i, /^mar/i, /^n/i, /^may/i, /^h/i, /^t/i, /^ağ/i, /^ey/i, /^ek/i, /^k/i, /^ar/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[psçc]/i,\n  short: /^(pz|pt|sa|ça|pe|cu|ct)/i,\n  abbreviated: /^(paz|pzt|sal|çar|per|cum|cts)/i,\n  wide: /^(pazar(?!tesi)|pazartesi|salı|çarşamba|perşembe|cuma(?!rtesi)|cumartesi)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^p/i, /^p/i, /^s/i, /^ç/i, /^p/i, /^c/i, /^c/i],\n  any: [/^pz/i, /^pt/i, /^sa/i, /^ça/i, /^pe/i, /^cu/i, /^ct/i],\n  wide: [/^pazar(?!tesi)/i, /^pazartesi/i, /^salı/i, /^çarşamba/i, /^perşembe/i, /^cuma(?!rtesi)/i, /^cumartesi/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(öö|ös|gy|ö|sa|ös|ak|ge)/i,\n  any: /^(ö\\.?\\s?[ös]\\.?|öğleden sonra|gece yarısı|öğle|(sabah|öğ|akşam|gece)(leyin))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ö\\.?ö\\.?/i,\n    pm: /^ö\\.?s\\.?/i,\n    midnight: /^(gy|gece yarısı)/i,\n    noon: /^öğ/i,\n    morning: /^sa/i,\n    afternoon: /^öğleden sonra/i,\n    evening: /^ak/i,\n    night: /^ge/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'بىر سىكۇنت ئىچىدە',\n    other: 'سىكۇنت ئىچىدە {{count}}'\n  },\n  xSeconds: {\n    one: 'بىر سىكۇنت',\n    other: 'سىكۇنت {{count}}'\n  },\n  halfAMinute: 'يىرىم مىنۇت',\n  lessThanXMinutes: {\n    one: 'بىر مىنۇت ئىچىدە',\n    other: 'مىنۇت ئىچىدە {{count}}'\n  },\n  xMinutes: {\n    one: 'بىر مىنۇت',\n    other: 'مىنۇت {{count}}'\n  },\n  aboutXHours: {\n    one: 'تەخمىنەن بىر سائەت',\n    other: 'سائەت {{count}} تەخمىنەن'\n  },\n  xHours: {\n    one: 'بىر سائەت',\n    other: 'سائەت {{count}}'\n  },\n  xDays: {\n    one: 'بىر كۈن',\n    other: 'كۈن {{count}}'\n  },\n  aboutXWeeks: {\n    one: 'تەخمىنەن بىرھەپتە',\n    other: 'ھەپتە {{count}} تەخمىنەن'\n  },\n  xWeeks: {\n    one: 'بىرھەپتە',\n    other: 'ھەپتە {{count}}'\n  },\n  aboutXMonths: {\n    one: 'تەخمىنەن بىر ئاي',\n    other: 'ئاي {{count}} تەخمىنەن'\n  },\n  xMonths: {\n    one: 'بىر ئاي',\n    other: 'ئاي {{count}}'\n  },\n  aboutXYears: {\n    one: 'تەخمىنەن بىر يىل',\n    other: 'يىل {{count}} تەخمىنەن'\n  },\n  xYears: {\n    one: 'بىر يىل',\n    other: 'يىل {{count}}'\n  },\n  overXYears: {\n    one: 'بىر يىلدىن ئارتۇق',\n    other: 'يىلدىن ئارتۇق {{count}}'\n  },\n  almostXYears: {\n    one: 'ئاساسەن بىر يىل',\n    other: 'يىل {{count}} ئاساسەن'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result;\n    } else {\n      return result + ' بولدى';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'دە' {{time}}\",\n  long: \"{{date}} 'دە' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'ئ‍ۆتكەن' eeee 'دە' p\",\n  yesterday: \"'تۈنۈگۈن دە' p\",\n  today: \"'بۈگۈن دە' p\",\n  tomorrow: \"'ئەتە دە' p\",\n  nextWeek: \"eeee 'دە' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Uighur locale\n * @language Uighur\n * @iso-639-2 uig\n * @author Abduwaly M. [@abduwaly]{@link https://github.com/abduwaly}\n */\nvar locale = {\n  code: 'ug',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['ب', 'ك'],\n  abbreviated: ['ب', 'ك'],\n  wide: ['مىيلادىدىن بۇرۇن', 'مىيلادىدىن كىيىن']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1', '2', '3', '4'],\n  wide: ['بىرىنجى چارەك', 'ئىككىنجى چارەك', 'ئۈچىنجى چارەك', 'تۆتىنجى چارەك']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['ي', 'ف', 'م', 'ا', 'م', 'ى', 'ى', 'ا', 'س', 'ۆ', 'ن', 'د'],\n  abbreviated: ['يانۋار', 'فېۋىرال', 'مارت', 'ئاپرىل', 'ماي', 'ئىيۇن', 'ئىيول', 'ئاۋغۇست', 'سىنتەبىر', 'ئۆكتەبىر', 'نويابىر', 'دىكابىر'],\n  wide: ['يانۋار', 'فېۋىرال', 'مارت', 'ئاپرىل', 'ماي', 'ئىيۇن', 'ئىيول', 'ئاۋغۇست', 'سىنتەبىر', 'ئۆكتەبىر', 'نويابىر', 'دىكابىر']\n};\nvar dayValues = {\n  narrow: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],\n  short: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],\n  abbreviated: ['يەكشەنبە', 'دۈشەنبە', 'سەيشەنبە', 'چارشەنبە', 'پەيشەنبە', 'جۈمە', 'شەنبە'],\n  wide: ['يەكشەنبە', 'دۈشەنبە', 'سەيشەنبە', 'چارشەنبە', 'پەيشەنبە', 'جۈمە', 'شەنبە']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ئە',\n    pm: 'چ',\n    midnight: 'ك',\n    noon: 'چ',\n    morning: 'ئەتىگەن',\n    afternoon: 'چۈشتىن كىيىن',\n    evening: 'ئاخشىم',\n    night: 'كىچە'\n  },\n  abbreviated: {\n    am: 'ئە',\n    pm: 'چ',\n    midnight: 'ك',\n    noon: 'چ',\n    morning: 'ئەتىگەن',\n    afternoon: 'چۈشتىن كىيىن',\n    evening: 'ئاخشىم',\n    night: 'كىچە'\n  },\n  wide: {\n    am: 'ئە',\n    pm: 'چ',\n    midnight: 'ك',\n    noon: 'چ',\n    morning: 'ئەتىگەن',\n    afternoon: 'چۈشتىن كىيىن',\n    evening: 'ئاخشىم',\n    night: 'كىچە'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ئە',\n    pm: 'چ',\n    midnight: 'ك',\n    noon: 'چ',\n    morning: 'ئەتىگەندە',\n    afternoon: 'چۈشتىن كىيىن',\n    evening: 'ئاخشامدا',\n    night: 'كىچىدە'\n  },\n  abbreviated: {\n    am: 'ئە',\n    pm: 'چ',\n    midnight: 'ك',\n    noon: 'چ',\n    morning: 'ئەتىگەندە',\n    afternoon: 'چۈشتىن كىيىن',\n    evening: 'ئاخشامدا',\n    night: 'كىچىدە'\n  },\n  wide: {\n    am: 'ئە',\n    pm: 'چ',\n    midnight: 'ك',\n    noon: 'چ',\n    morning: 'ئەتىگەندە',\n    afternoon: 'چۈشتىن كىيىن',\n    evening: 'ئاخشامدا',\n    night: 'كىچىدە'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ب|ك)/i,\n  wide: /^(مىيلادىدىن بۇرۇن|مىيلادىدىن كىيىن)/i\n};\nvar parseEraPatterns = {\n  any: [/^بۇرۇن/i, /^كىيىن/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^چ[1234]/i,\n  wide: /^چارەك [1234]/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  // eslint-disable-next-line no-misleading-character-class\n  narrow: /^[يفمئامئ‍ئاسۆند]/i,\n  abbreviated: /^(يانۋار|فېۋىرال|مارت|ئاپرىل|ماي|ئىيۇن|ئىيول|ئاۋغۇست|سىنتەبىر|ئۆكتەبىر|نويابىر|دىكابىر)/i,\n  wide: /^(يانۋار|فېۋىرال|مارت|ئاپرىل|ماي|ئىيۇن|ئىيول|ئاۋغۇست|سىنتەبىر|ئۆكتەبىر|نويابىر|دىكابىر)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^ي/i, /^ف/i, /^م/i, /^ا/i, /^م/i, /^ى‍/i, /^ى‍/i, /^ا‍/i, /^س/i, /^ۆ/i, /^ن/i, /^د/i],\n  any: [/^يان/i, /^فېۋ/i, /^مار/i, /^ئاپ/i, /^ماي/i, /^ئىيۇن/i, /^ئىيول/i, /^ئاۋ/i, /^سىن/i, /^ئۆك/i, /^نوي/i, /^دىك/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[دسچپجشي]/i,\n  short: /^(يە|دۈ|سە|چا|پە|جۈ|شە)/i,\n  abbreviated: /^(يە|دۈ|سە|چا|پە|جۈ|شە)/i,\n  wide: /^(يەكشەنبە|دۈشەنبە|سەيشەنبە|چارشەنبە|پەيشەنبە|جۈمە|شەنبە)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^ي/i, /^د/i, /^س/i, /^چ/i, /^پ/i, /^ج/i, /^ش/i],\n  any: [/^ي/i, /^د/i, /^س/i, /^چ/i, /^پ/i, /^ج/i, /^ش/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(ئە|چ|ك|چ|(دە|ئەتىگەن) ( ئە‍|چۈشتىن كىيىن|ئاخشىم|كىچە))/i,\n  any: /^(ئە|چ|ك|چ|(دە|ئەتىگەن) ( ئە‍|چۈشتىن كىيىن|ئاخشىم|كىچە))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^ئە/i,\n    pm: /^چ/i,\n    midnight: /^ك/i,\n    noon: /^چ/i,\n    morning: /ئەتىگەن/i,\n    afternoon: /چۈشتىن كىيىن/i,\n    evening: /ئاخشىم/i,\n    night: /كىچە/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","function declension(scheme, count) {\n  // scheme for count=1 exists\n  if (scheme.one !== undefined && count === 1) {\n    return scheme.one;\n  }\n  var rem10 = count % 10;\n  var rem100 = count % 100;\n\n  // 1, 21, 31, ...\n  if (rem10 === 1 && rem100 !== 11) {\n    return scheme.singularNominative.replace('{{count}}', String(count));\n\n    // 2, 3, 4, 22, 23, 24, 32 ...\n  } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {\n    return scheme.singularGenitive.replace('{{count}}', String(count));\n\n    // 5, 6, 7, 8, 9, 10, 11, ...\n  } else {\n    return scheme.pluralGenitive.replace('{{count}}', String(count));\n  }\n}\nfunction buildLocalizeTokenFn(scheme) {\n  return function (count, options) {\n    if (options && options.addSuffix) {\n      if (options.comparison && options.comparison > 0) {\n        if (scheme.future) {\n          return declension(scheme.future, count);\n        } else {\n          return 'за ' + declension(scheme.regular, count);\n        }\n      } else {\n        if (scheme.past) {\n          return declension(scheme.past, count);\n        } else {\n          return declension(scheme.regular, count) + ' тому';\n        }\n      }\n    } else {\n      return declension(scheme.regular, count);\n    }\n  };\n}\nvar halfAtMinute = function halfAtMinute(_, options) {\n  if (options && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'за півхвилини';\n    } else {\n      return 'півхвилини тому';\n    }\n  }\n  return 'півхвилини';\n};\nvar formatDistanceLocale = {\n  lessThanXSeconds: buildLocalizeTokenFn({\n    regular: {\n      one: 'менше секунди',\n      singularNominative: 'менше {{count}} секунди',\n      singularGenitive: 'менше {{count}} секунд',\n      pluralGenitive: 'менше {{count}} секунд'\n    },\n    future: {\n      one: 'менше, ніж за секунду',\n      singularNominative: 'менше, ніж за {{count}} секунду',\n      singularGenitive: 'менше, ніж за {{count}} секунди',\n      pluralGenitive: 'менше, ніж за {{count}} секунд'\n    }\n  }),\n  xSeconds: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} секунда',\n      singularGenitive: '{{count}} секунди',\n      pluralGenitive: '{{count}} секунд'\n    },\n    past: {\n      singularNominative: '{{count}} секунду тому',\n      singularGenitive: '{{count}} секунди тому',\n      pluralGenitive: '{{count}} секунд тому'\n    },\n    future: {\n      singularNominative: 'за {{count}} секунду',\n      singularGenitive: 'за {{count}} секунди',\n      pluralGenitive: 'за {{count}} секунд'\n    }\n  }),\n  halfAMinute: halfAtMinute,\n  lessThanXMinutes: buildLocalizeTokenFn({\n    regular: {\n      one: 'менше хвилини',\n      singularNominative: 'менше {{count}} хвилини',\n      singularGenitive: 'менше {{count}} хвилин',\n      pluralGenitive: 'менше {{count}} хвилин'\n    },\n    future: {\n      one: 'менше, ніж за хвилину',\n      singularNominative: 'менше, ніж за {{count}} хвилину',\n      singularGenitive: 'менше, ніж за {{count}} хвилини',\n      pluralGenitive: 'менше, ніж за {{count}} хвилин'\n    }\n  }),\n  xMinutes: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} хвилина',\n      singularGenitive: '{{count}} хвилини',\n      pluralGenitive: '{{count}} хвилин'\n    },\n    past: {\n      singularNominative: '{{count}} хвилину тому',\n      singularGenitive: '{{count}} хвилини тому',\n      pluralGenitive: '{{count}} хвилин тому'\n    },\n    future: {\n      singularNominative: 'за {{count}} хвилину',\n      singularGenitive: 'за {{count}} хвилини',\n      pluralGenitive: 'за {{count}} хвилин'\n    }\n  }),\n  aboutXHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'близько {{count}} години',\n      singularGenitive: 'близько {{count}} годин',\n      pluralGenitive: 'близько {{count}} годин'\n    },\n    future: {\n      singularNominative: 'приблизно за {{count}} годину',\n      singularGenitive: 'приблизно за {{count}} години',\n      pluralGenitive: 'приблизно за {{count}} годин'\n    }\n  }),\n  xHours: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} годину',\n      singularGenitive: '{{count}} години',\n      pluralGenitive: '{{count}} годин'\n    }\n  }),\n  xDays: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} день',\n      singularGenitive: '{{count}} днi',\n      pluralGenitive: '{{count}} днів'\n    }\n  }),\n  aboutXWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'близько {{count}} тижня',\n      singularGenitive: 'близько {{count}} тижнів',\n      pluralGenitive: 'близько {{count}} тижнів'\n    },\n    future: {\n      singularNominative: 'приблизно за {{count}} тиждень',\n      singularGenitive: 'приблизно за {{count}} тижні',\n      pluralGenitive: 'приблизно за {{count}} тижнів'\n    }\n  }),\n  xWeeks: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} тиждень',\n      singularGenitive: '{{count}} тижні',\n      pluralGenitive: '{{count}} тижнів'\n    }\n  }),\n  aboutXMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'близько {{count}} місяця',\n      singularGenitive: 'близько {{count}} місяців',\n      pluralGenitive: 'близько {{count}} місяців'\n    },\n    future: {\n      singularNominative: 'приблизно за {{count}} місяць',\n      singularGenitive: 'приблизно за {{count}} місяці',\n      pluralGenitive: 'приблизно за {{count}} місяців'\n    }\n  }),\n  xMonths: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} місяць',\n      singularGenitive: '{{count}} місяці',\n      pluralGenitive: '{{count}} місяців'\n    }\n  }),\n  aboutXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'близько {{count}} року',\n      singularGenitive: 'близько {{count}} років',\n      pluralGenitive: 'близько {{count}} років'\n    },\n    future: {\n      singularNominative: 'приблизно за {{count}} рік',\n      singularGenitive: 'приблизно за {{count}} роки',\n      pluralGenitive: 'приблизно за {{count}} років'\n    }\n  }),\n  xYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: '{{count}} рік',\n      singularGenitive: '{{count}} роки',\n      pluralGenitive: '{{count}} років'\n    }\n  }),\n  overXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'більше {{count}} року',\n      singularGenitive: 'більше {{count}} років',\n      pluralGenitive: 'більше {{count}} років'\n    },\n    future: {\n      singularNominative: 'більше, ніж за {{count}} рік',\n      singularGenitive: 'більше, ніж за {{count}} роки',\n      pluralGenitive: 'більше, ніж за {{count}} років'\n    }\n  }),\n  almostXYears: buildLocalizeTokenFn({\n    regular: {\n      singularNominative: 'майже {{count}} рік',\n      singularGenitive: 'майже {{count}} роки',\n      pluralGenitive: 'майже {{count}} років'\n    },\n    future: {\n      singularNominative: 'майже за {{count}} рік',\n      singularGenitive: 'майже за {{count}} роки',\n      pluralGenitive: 'майже за {{count}} років'\n    }\n  })\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  options = options || {};\n  return formatDistanceLocale[token](count, options);\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, do MMMM y 'р.'\",\n  long: \"do MMMM y 'р.'\",\n  medium: \"d MMM y 'р.'\",\n  short: 'dd.MM.y'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'о' {{time}}\",\n  long: \"{{date}} 'о' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import { toDate } from \"../../../../index.js\";\nimport isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nvar accusativeWeekdays = ['неділю', 'понеділок', 'вівторок', 'середу', 'четвер', 'п’ятницю', 'суботу'];\nfunction lastWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 5:\n    case 6:\n      return \"'у минулу \" + weekday + \" о' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'у минулий \" + weekday + \" о' p\";\n  }\n}\nfunction thisWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  return \"'у \" + weekday + \" о' p\";\n}\nfunction nextWeek(day) {\n  var weekday = accusativeWeekdays[day];\n  switch (day) {\n    case 0:\n    case 3:\n    case 5:\n    case 6:\n      return \"'у наступну \" + weekday + \" о' p\";\n    case 1:\n    case 2:\n    case 4:\n      return \"'у наступний \" + weekday + \" о' p\";\n  }\n}\nvar lastWeekFormat = function lastWeekFormat(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return lastWeek(day);\n  }\n};\nvar nextWeekFormat = function nextWeekFormat(dirtyDate, baseDate, options) {\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return thisWeek(day);\n  } else {\n    return nextWeek(day);\n  }\n};\nvar formatRelativeLocale = {\n  lastWeek: lastWeekFormat,\n  yesterday: \"'вчора о' p\",\n  today: \"'сьогодні о' p\",\n  tomorrow: \"'завтра о' p\",\n  nextWeek: nextWeekFormat,\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Ukrainian locale.\n * @language Ukrainian\n * @iso-639-2 ukr\n * @author Andrii Korzh [@korzhyk]{@link https://github.com/korzhyk}\n * @author Andriy Shcherbyak [@shcherbyakdev]{@link https://github.com/shcherbyakdev}\n */\nvar locale = {\n  code: 'uk',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['до н.е.', 'н.е.'],\n  abbreviated: ['до н. е.', 'н. е.'],\n  wide: ['до нашої ери', 'нашої ери']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-й кв.', '2-й кв.', '3-й кв.', '4-й кв.'],\n  wide: ['1-й квартал', '2-й квартал', '3-й квартал', '4-й квартал']\n};\nvar monthValues = {\n  // ДСТУ 3582:2013\n  narrow: ['С', 'Л', 'Б', 'К', 'Т', 'Ч', 'Л', 'С', 'В', 'Ж', 'Л', 'Г'],\n  abbreviated: ['січ.', 'лют.', 'берез.', 'квіт.', 'трав.', 'черв.', 'лип.', 'серп.', 'верес.', 'жовт.', 'листоп.', 'груд.'],\n  wide: ['січень', 'лютий', 'березень', 'квітень', 'травень', 'червень', 'липень', 'серпень', 'вересень', 'жовтень', 'листопад', 'грудень']\n};\nvar formattingMonthValues = {\n  narrow: ['С', 'Л', 'Б', 'К', 'Т', 'Ч', 'Л', 'С', 'В', 'Ж', 'Л', 'Г'],\n  abbreviated: ['січ.', 'лют.', 'берез.', 'квіт.', 'трав.', 'черв.', 'лип.', 'серп.', 'верес.', 'жовт.', 'листоп.', 'груд.'],\n  wide: ['січня', 'лютого', 'березня', 'квітня', 'травня', 'червня', 'липня', 'серпня', 'вересня', 'жовтня', 'листопада', 'грудня']\n};\nvar dayValues = {\n  narrow: ['Н', 'П', 'В', 'С', 'Ч', 'П', 'С'],\n  short: ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n  abbreviated: ['нед', 'пон', 'вів', 'сер', 'чтв', 'птн', 'суб'],\n  wide: ['неділя', 'понеділок', 'вівторок', 'середа', 'четвер', 'п’ятниця', 'субота']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'півн.',\n    noon: 'пол.',\n    morning: 'ранок',\n    afternoon: 'день',\n    evening: 'веч.',\n    night: 'ніч'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'півн.',\n    noon: 'пол.',\n    morning: 'ранок',\n    afternoon: 'день',\n    evening: 'веч.',\n    night: 'ніч'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'північ',\n    noon: 'полудень',\n    morning: 'ранок',\n    afternoon: 'день',\n    evening: 'вечір',\n    night: 'ніч'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'півн.',\n    noon: 'пол.',\n    morning: 'ранку',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночі'\n  },\n  abbreviated: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'півн.',\n    noon: 'пол.',\n    morning: 'ранку',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночі'\n  },\n  wide: {\n    am: 'ДП',\n    pm: 'ПП',\n    midnight: 'північ',\n    noon: 'полудень',\n    morning: 'ранку',\n    afternoon: 'дня',\n    evening: 'веч.',\n    night: 'ночі'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var unit = String(options === null || options === void 0 ? void 0 : options.unit);\n  var number = Number(dirtyNumber);\n  var suffix;\n  if (unit === 'date') {\n    if (number === 3 || number === 23) {\n      suffix = '-є';\n    } else {\n      suffix = '-е';\n    }\n  } else if (unit === 'minute' || unit === 'second' || unit === 'hour') {\n    suffix = '-а';\n  } else {\n    suffix = '-й';\n  }\n  return number + suffix;\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'any',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(-?(е|й|є|а|я))?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^((до )?н\\.?\\s?е\\.?)/i,\n  abbreviated: /^((до )?н\\.?\\s?е\\.?)/i,\n  wide: /^(до нашої ери|нашої ери|наша ера)/i\n};\nvar parseEraPatterns = {\n  any: [/^д/i, /^н/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234](-?[иі]?й?)? кв.?/i,\n  wide: /^[1234](-?[иі]?й?)? квартал/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[слбктчвжг]/i,\n  abbreviated: /^(січ|лют|бер(ез)?|квіт|трав|черв|лип|серп|вер(ес)?|жовт|лис(топ)?|груд)\\.?/i,\n  wide: /^(січень|січня|лютий|лютого|березень|березня|квітень|квітня|травень|травня|червня|червень|липень|липня|серпень|серпня|вересень|вересня|жовтень|жовтня|листопад[а]?|грудень|грудня)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^с/i, /^л/i, /^б/i, /^к/i, /^т/i, /^ч/i, /^л/i, /^с/i, /^в/i, /^ж/i, /^л/i, /^г/i],\n  any: [/^сі/i, /^лю/i, /^б/i, /^к/i, /^т/i, /^ч/i, /^лип/i, /^се/i, /^в/i, /^ж/i, /^лис/i, /^г/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[нпвсч]/i,\n  short: /^(нд|пн|вт|ср|чт|пт|сб)\\.?/i,\n  abbreviated: /^(нед|пон|вів|сер|че?тв|птн?|суб)\\.?/i,\n  wide: /^(неділ[яі]|понеділ[ок][ка]|вівтор[ок][ка]|серед[аи]|четвер(га)?|п\\W*?ятниц[яі]|субот[аи])/i\n};\nvar parseDayPatterns = {\n  narrow: [/^н/i, /^п/i, /^в/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n  any: [/^н/i, /^п[он]/i, /^в/i, /^с[ер]/i, /^ч/i, /^п\\W*?[ят]/i, /^с[уб]/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^([дп]п|півн\\.?|пол\\.?|ранок|ранку|день|дня|веч\\.?|ніч|ночі)/i,\n  abbreviated: /^([дп]п|півн\\.?|пол\\.?|ранок|ранку|день|дня|веч\\.?|ніч|ночі)/i,\n  wide: /^([дп]п|північ|полудень|ранок|ранку|день|дня|вечір|вечора|ніч|ночі)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^дп/i,\n    pm: /^пп/i,\n    midnight: /^півн/i,\n    noon: /^пол/i,\n    morning: /^р/i,\n    afternoon: /^д[ен]/i,\n    evening: /^в/i,\n    night: /^н/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'sekunddan kam',\n    other: '{{count}} sekunddan kam'\n  },\n  xSeconds: {\n    one: '1 sekund',\n    other: '{{count}} sekund'\n  },\n  halfAMinute: 'yarim minut',\n  lessThanXMinutes: {\n    one: 'bir minutdan kam',\n    other: '{{count}} minutdan kam'\n  },\n  xMinutes: {\n    one: '1 minut',\n    other: '{{count}} minut'\n  },\n  aboutXHours: {\n    one: 'tahminan 1 soat',\n    other: 'tahminan {{count}} soat'\n  },\n  xHours: {\n    one: '1 soat',\n    other: '{{count}} soat'\n  },\n  xDays: {\n    one: '1 kun',\n    other: '{{count}} kun'\n  },\n  aboutXWeeks: {\n    one: 'tahminan 1 hafta',\n    other: 'tahminan {{count}} hafta'\n  },\n  xWeeks: {\n    one: '1 hafta',\n    other: '{{count}} hafta'\n  },\n  aboutXMonths: {\n    one: 'tahminan 1 oy',\n    other: 'tahminan {{count}} oy'\n  },\n  xMonths: {\n    one: '1 oy',\n    other: '{{count}} oy'\n  },\n  aboutXYears: {\n    one: 'tahminan 1 yil',\n    other: 'tahminan {{count}} yil'\n  },\n  xYears: {\n    one: '1 yil',\n    other: '{{count}} yil'\n  },\n  overXYears: {\n    one: \"1 yildan ko'p\",\n    other: \"{{count}} yildan ko'p\"\n  },\n  almostXYears: {\n    one: 'deyarli 1 yil',\n    other: 'deyarli {{count}} yil'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' dan keyin';\n    } else {\n      return result + ' oldin';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, do MMMM, y',\n  long: 'do MMMM, y',\n  medium: 'd MMM, y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss zzzz',\n  long: 'h:mm:ss z',\n  medium: 'h:mm:ss',\n  short: 'h:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'oldingi' eeee p 'da'\",\n  yesterday: \"'kecha' p 'da'\",\n  today: \"'bugun' p 'da'\",\n  tomorrow: \"'ertaga' p 'da'\",\n  nextWeek: \"eeee p 'da'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Uzbek locale.\n * @language Uzbek\n * @iso-639-2 uzb\n * @author Mukhammadali [@mukhammadali]{@link https://github.com/Mukhammadali}\n */\nvar locale = {\n  code: 'uz',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['M.A', 'M.'],\n  abbreviated: ['M.A', 'M.'],\n  wide: ['Miloddan Avvalgi', 'Milodiy']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['CH.1', 'CH.2', 'CH.3', 'CH.4'],\n  wide: ['1-chi chorak', '2-chi chorak', '3-chi chorak', '4-chi chorak']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['Y', 'F', 'M', 'A', 'M', 'I', 'I', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'Iyun', 'Iyul', 'Avg', 'Sen', 'Okt', 'Noy', 'Dek'],\n  wide: ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'Iyun', 'Iyul', 'Avgust', 'Sentabr', 'Oktabr', 'Noyabr', 'Dekabr']\n};\nvar dayValues = {\n  narrow: ['Y', 'D', 'S', 'CH', 'P', 'J', 'SH'],\n  short: ['Ya', 'Du', 'Se', 'Cho', 'Pa', 'Ju', 'Sha'],\n  abbreviated: ['Yak', 'Dush', 'Sesh', 'Chor', 'Pay', 'Jum', 'Shan'],\n  wide: ['Yakshanba', 'Dushanba', 'Seshanba', 'Chorshanba', 'Payshanba', 'Juma', 'Shanba']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'y.t',\n    noon: 'p.',\n    morning: 'ertalab',\n    afternoon: 'tushdan keyin',\n    evening: 'kechqurun',\n    night: 'tun'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'yarim tun',\n    noon: 'peshin',\n    morning: 'ertalab',\n    afternoon: 'tushdan keyin',\n    evening: 'kechqurun',\n    night: 'tun'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'yarim tun',\n    noon: 'peshin',\n    morning: 'ertalab',\n    afternoon: 'tushdan keyin',\n    evening: 'kechqurun',\n    night: 'tun'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'y.t',\n    noon: 'p.',\n    morning: 'ertalab',\n    afternoon: 'tushdan keyin',\n    evening: 'kechqurun',\n    night: 'tun'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'yarim tun',\n    noon: 'peshin',\n    morning: 'ertalab',\n    afternoon: 'tushdan keyin',\n    evening: 'kechqurun',\n    night: 'tun'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'yarim tun',\n    noon: 'peshin',\n    morning: 'ertalab',\n    afternoon: 'tushdan keyin',\n    evening: 'kechqurun',\n    night: 'tun'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(chi)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(m\\.a|m\\.)/i,\n  abbreviated: /^(m\\.a\\.?\\s?m\\.?)/i,\n  wide: /^(miloddan avval|miloddan keyin)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](chi)? chorak/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[yfmasond]/i,\n  abbreviated: /^(yan|fev|mar|apr|may|iyun|iyul|avg|sen|okt|noy|dek)/i,\n  wide: /^(yanvar|fevral|mart|aprel|may|iyun|iyul|avgust|sentabr|oktabr|noyabr|dekabr)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^y/i, /^f/i, /^m/i, /^a/i, /^m/i, /^i/i, /^i/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ya/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^iyun/i, /^iyul/i, /^av/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[ydschj]/i,\n  short: /^(ya|du|se|cho|pa|ju|sha)/i,\n  abbreviated: /^(yak|dush|sesh|chor|pay|jum|shan)/i,\n  wide: /^(yakshanba|dushanba|seshanba|chorshanba|payshanba|juma|shanba)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^y/i, /^d/i, /^s/i, /^ch/i, /^p/i, /^j/i, /^sh/i],\n  any: [/^ya/i, /^d/i, /^se/i, /^ch/i, /^p/i, /^j/i, /^sh/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|y\\.t|p| (ertalab|tushdan keyin|kechqurun|tun))/i,\n  any: /^([ap]\\.?\\s?m\\.?|yarim tun|peshin| (ertalab|tushdan keyin|kechqurun|tun))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^y\\.t/i,\n    noon: /^pe/i,\n    morning: /ertalab/i,\n    afternoon: /tushdan keyin/i,\n    evening: /kechqurun/i,\n    night: /tun/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '1 сониядан кам',\n    other: '{{count}} сониядан кам'\n  },\n  xSeconds: {\n    one: '1 сония',\n    other: '{{count}} сония'\n  },\n  halfAMinute: 'ярим дақиқа',\n  lessThanXMinutes: {\n    one: '1 дақиқадан кам',\n    other: '{{count}} дақиқадан кам'\n  },\n  xMinutes: {\n    one: '1 дақиқа',\n    other: '{{count}} дақиқа'\n  },\n  aboutXHours: {\n    one: 'тахминан 1 соат',\n    other: 'тахминан {{count}} соат'\n  },\n  xHours: {\n    one: '1 соат',\n    other: '{{count}} соат'\n  },\n  xDays: {\n    one: '1 кун',\n    other: '{{count}} кун'\n  },\n  aboutXWeeks: {\n    one: 'тахминан 1 хафта',\n    other: 'тахминан {{count}} хафта'\n  },\n  xWeeks: {\n    one: '1 хафта',\n    other: '{{count}} хафта'\n  },\n  aboutXMonths: {\n    one: 'тахминан 1 ой',\n    other: 'тахминан {{count}} ой'\n  },\n  xMonths: {\n    one: '1 ой',\n    other: '{{count}} ой'\n  },\n  aboutXYears: {\n    one: 'тахминан 1 йил',\n    other: 'тахминан {{count}} йил'\n  },\n  xYears: {\n    one: '1 йил',\n    other: '{{count}} йил'\n  },\n  overXYears: {\n    one: '1 йилдан кўп',\n    other: '{{count}} йилдан кўп'\n  },\n  almostXYears: {\n    one: 'деярли 1 йил',\n    other: 'деярли {{count}} йил'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + 'дан кейин';\n    } else {\n      return result + ' олдин';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, do MMMM, y',\n  long: 'do MMMM, y',\n  medium: 'd MMM, y',\n  short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n  full: 'H:mm:ss zzzz',\n  long: 'H:mm:ss z',\n  medium: 'H:mm:ss',\n  short: 'H:mm'\n};\nvar dateTimeFormats = {\n  any: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'any'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'ўтган' eeee p 'да'\",\n  yesterday: \"'кеча' p 'да'\",\n  today: \"'бугун' p 'да'\",\n  tomorrow: \"'эртага' p 'да'\",\n  nextWeek: \"eeee p 'да'\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Uzbek Cyrillic locale.\n * @language Uzbek\n * @iso-639-2 uzb\n * @author Kamronbek Shodmonov [@kamronbek28]{@link https://github.com/kamronbek28}\n */\nvar locale = {\n  code: 'uz-Cyrl',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['М.А', 'М'],\n  abbreviated: ['М.А', 'М'],\n  wide: ['Милоддан Аввалги', 'Милодий']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['1-чор.', '2-чор.', '3-чор.', '4-чор.'],\n  wide: ['1-чорак', '2-чорак', '3-чорак', '4-чорак']\n};\nvar monthValues = {\n  narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],\n  abbreviated: ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n  wide: ['январ', 'феврал', 'март', 'апрел', 'май', 'июн', 'июл', 'август', 'сентабр', 'октабр', 'ноябр', 'декабр']\n};\nvar dayValues = {\n  narrow: ['Я', 'Д', 'С', 'Ч', 'П', 'Ж', 'Ш'],\n  short: ['як', 'ду', 'се', 'чо', 'па', 'жу', 'ша'],\n  abbreviated: ['якш', 'душ', 'сеш', 'чор', 'пай', 'жум', 'шан'],\n  wide: ['якшанба', 'душанба', 'сешанба', 'чоршанба', 'пайшанба', 'жума', 'шанба']\n};\nvar dayPeriodValues = {\n  any: {\n    am: 'П.О.',\n    pm: 'П.К.',\n    midnight: 'ярим тун',\n    noon: 'пешин',\n    morning: 'эрталаб',\n    afternoon: 'пешиндан кейин',\n    evening: 'кечаси',\n    night: 'тун'\n  }\n};\nvar formattingDayPeriodValues = {\n  any: {\n    am: 'П.О.',\n    pm: 'П.К.',\n    midnight: 'ярим тун',\n    noon: 'пешин',\n    morning: 'эрталаб',\n    afternoon: 'пешиндан кейин',\n    evening: 'кечаси',\n    night: 'тун'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  return String(dirtyNumber);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'any',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'any'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(чи)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(м\\.а|м\\.)/i,\n  abbreviated: /^(м\\.а|м\\.)/i,\n  wide: /^(милоддан аввал|милоддан кейин)/i\n};\nvar parseEraPatterns = {\n  any: [/^м/i, /^а/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^[1234]-чор./i,\n  wide: /^[1234]-чорак/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[яфмамииасонд]/i,\n  abbreviated: /^(янв|фев|мар|апр|май|июн|июл|авг|сен|окт|ноя|дек)/i,\n  wide: /^(январ|феврал|март|апрел|май|июн|июл|август|сентабр|октабр|ноябр|декабр)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^я/i, /^ф/i, /^м/i, /^а/i, /^м/i, /^и/i, /^и/i, /^а/i, /^с/i, /^о/i, /^н/i, /^д/i],\n  any: [/^я/i, /^ф/i, /^мар/i, /^ап/i, /^май/i, /^июн/i, /^июл/i, /^ав/i, /^с/i, /^о/i, /^н/i, /^д/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[ядсчпжш]/i,\n  short: /^(як|ду|се|чо|па|жу|ша)/i,\n  abbreviated: /^(якш|душ|сеш|чор|пай|жум|шан)/i,\n  wide: /^(якшанба|душанба|сешанба|чоршанба|пайшанба|жума|шанба)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^я/i, /^д/i, /^с/i, /^ч/i, /^п/i, /^ж/i, /^ш/i],\n  any: [/^як/i, /^ду/i, /^се/i, /^чор/i, /^пай/i, /^жу/i, /^шан/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(п\\.о\\.|п\\.к\\.|ярим тун|пешиндан кейин|(эрталаб|пешиндан кейин|кечаси|тун))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^п\\.о\\./i,\n    pm: /^п\\.к\\./i,\n    midnight: /^ярим тун/i,\n    noon: /^пешиндан кейин/i,\n    morning: /эрталаб/i,\n    afternoon: /пешиндан кейин/i,\n    evening: /кечаси/i,\n    night: /тун/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'dưới 1 giây',\n    other: 'dưới {{count}} giây'\n  },\n  xSeconds: {\n    one: '1 giây',\n    other: '{{count}} giây'\n  },\n  halfAMinute: 'nửa phút',\n  lessThanXMinutes: {\n    one: 'dưới 1 phút',\n    other: 'dưới {{count}} phút'\n  },\n  xMinutes: {\n    one: '1 phút',\n    other: '{{count}} phút'\n  },\n  aboutXHours: {\n    one: 'khoảng 1 giờ',\n    other: 'khoảng {{count}} giờ'\n  },\n  xHours: {\n    one: '1 giờ',\n    other: '{{count}} giờ'\n  },\n  xDays: {\n    one: '1 ngày',\n    other: '{{count}} ngày'\n  },\n  aboutXWeeks: {\n    one: 'khoảng 1 tuần',\n    other: 'khoảng {{count}} tuần'\n  },\n  xWeeks: {\n    one: '1 tuần',\n    other: '{{count}} tuần'\n  },\n  aboutXMonths: {\n    one: 'khoảng 1 tháng',\n    other: 'khoảng {{count}} tháng'\n  },\n  xMonths: {\n    one: '1 tháng',\n    other: '{{count}} tháng'\n  },\n  aboutXYears: {\n    one: 'khoảng 1 năm',\n    other: 'khoảng {{count}} năm'\n  },\n  xYears: {\n    one: '1 năm',\n    other: '{{count}} năm'\n  },\n  overXYears: {\n    one: 'hơn 1 năm',\n    other: 'hơn {{count}} năm'\n  },\n  almostXYears: {\n    one: 'gần 1 năm',\n    other: 'gần {{count}} năm'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + ' nữa';\n    } else {\n      return result + ' trước';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  // thứ Sáu, ngày 25 tháng 08 năm 2017\n  full: \"EEEE, 'ngày' d MMMM 'năm' y\",\n  // ngày 25 tháng 08 năm 2017\n  long: \"'ngày' d MMMM 'năm' y\",\n  // 25 thg 08 năm 2017\n  medium: \"d MMM 'năm' y\",\n  // 25/08/2017\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  // thứ Sáu, ngày 25 tháng 08 năm 2017 23:25:59\n  full: '{{date}} {{time}}',\n  // ngày 25 tháng 08 năm 2017 23:25\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"eeee 'tuần trước vào lúc' p\",\n  yesterday: \"'hôm qua vào lúc' p\",\n  today: \"'hôm nay vào lúc' p\",\n  tomorrow: \"'ngày mai vào lúc' p\",\n  nextWeek: \"eeee 'tới vào lúc' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Vietnamese locale (Vietnam).\n * @language Vietnamese\n * @iso-639-2 vie\n * @author Thanh Tran [@trongthanh]{@link https://github.com/trongthanh}\n * @author Leroy Hopson [@lihop]{@link https://github.com/lihop}\n */\nvar locale = {\n  code: 'vi',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1 /* First week of new year contains Jan 1st  */\n  }\n};\n\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\"; // Vietnamese locale reference: http://www.localeplanet.com/icu/vi-VN/index.html\n// Capitalization reference: http://hcmup.edu.vn/index.php?option=com_content&view=article&id=4106%3Avit-hoa-trong-vn-bn-hanh-chinh&catid=2345%3Atham-kho&Itemid=4103&lang=vi&site=134\nvar eraValues = {\n  narrow: ['TCN', 'SCN'],\n  abbreviated: ['trước CN', 'sau CN'],\n  wide: ['trước Công Nguyên', 'sau Công Nguyên']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['Quý 1', 'Quý 2', 'Quý 3', 'Quý 4']\n};\nvar formattingQuarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  // I notice many news outlet use this \"quý II/2018\"\n  wide: ['quý I', 'quý II', 'quý III', 'quý IV']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  abbreviated: ['Thg 1', 'Thg 2', 'Thg 3', 'Thg 4', 'Thg 5', 'Thg 6', 'Thg 7', 'Thg 8', 'Thg 9', 'Thg 10', 'Thg 11', 'Thg 12'],\n  wide: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai']\n};\n// In Vietnamese date formatting, month number less than 10 expected to have leading zero\nvar formattingMonthValues = {\n  narrow: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n  abbreviated: ['thg 1', 'thg 2', 'thg 3', 'thg 4', 'thg 5', 'thg 6', 'thg 7', 'thg 8', 'thg 9', 'thg 10', 'thg 11', 'thg 12'],\n  wide: ['tháng 01', 'tháng 02', 'tháng 03', 'tháng 04', 'tháng 05', 'tháng 06', 'tháng 07', 'tháng 08', 'tháng 09', 'tháng 10', 'tháng 11', 'tháng 12']\n};\nvar dayValues = {\n  narrow: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],\n  short: ['CN', 'Th 2', 'Th 3', 'Th 4', 'Th 5', 'Th 6', 'Th 7'],\n  abbreviated: ['CN', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'],\n  wide: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy']\n};\n\n// Vietnamese are used to AM/PM borrowing from English, hence `narrow` and\n// `abbreviated` are just like English but I'm leaving the `wide`\n// format being localized with abbreviations found in some systems (SÁng / CHiều);\n// however, personally, I don't think `Chiều` sounds appropriate for `PM`\nvar dayPeriodValues = {\n  // narrow date period is extremely rare in Vietnamese\n  // I used abbreviated form for noon, morning and afternoon\n  // which are regconizable by Vietnamese, others cannot be any shorter\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'nửa đêm',\n    noon: 'tr',\n    morning: 'sg',\n    afternoon: 'ch',\n    evening: 'tối',\n    night: 'đêm'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'nửa đêm',\n    noon: 'trưa',\n    morning: 'sáng',\n    afternoon: 'chiều',\n    evening: 'tối',\n    night: 'đêm'\n  },\n  wide: {\n    am: 'SA',\n    pm: 'CH',\n    midnight: 'nửa đêm',\n    noon: 'trưa',\n    morning: 'sáng',\n    afternoon: 'chiều',\n    evening: 'tối',\n    night: 'đêm'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'am',\n    pm: 'pm',\n    midnight: 'nửa đêm',\n    noon: 'tr',\n    morning: 'sg',\n    afternoon: 'ch',\n    evening: 'tối',\n    night: 'đêm'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'nửa đêm',\n    noon: 'trưa',\n    morning: 'sáng',\n    afternoon: 'chiều',\n    evening: 'tối',\n    night: 'đêm'\n  },\n  wide: {\n    am: 'SA',\n    pm: 'CH',\n    midnight: 'nửa đêm',\n    noon: 'giữa trưa',\n    morning: 'vào buổi sáng',\n    afternoon: 'vào buổi chiều',\n    evening: 'vào buổi tối',\n    night: 'vào ban đêm'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  var unit = options === null || options === void 0 ? void 0 : options.unit;\n  if (unit === 'quarter') {\n    // many news outlets use \"quý I\"...\n    switch (number) {\n      case 1:\n        return 'I';\n      case 2:\n        return 'II';\n      case 3:\n        return 'III';\n      case 4:\n        return 'IV';\n    }\n  } else if (unit === 'day') {\n    // day of week in Vietnamese has ordinal number meaning,\n    // so we should use them, else it'll sound weird\n    switch (number) {\n      case 1:\n        return 'thứ 2';\n      // meaning 2nd day but it's the first day of the week :D\n      case 2:\n        return 'thứ 3';\n      // meaning 3rd day\n      case 3:\n        return 'thứ 4';\n      // meaning 4th day and so on\n      case 4:\n        return 'thứ 5';\n      case 5:\n        return 'thứ 6';\n      case 6:\n        return 'thứ 7';\n      case 7:\n        return 'chủ nhật';\n      // meaning Sunday, there's no 8th day :D\n    }\n  } else if (unit === 'week') {\n    if (number === 1) {\n      return 'thứ nhất';\n    } else {\n      return 'thứ ' + number;\n    }\n  } else if (unit === 'dayOfYear') {\n    if (number === 1) {\n      return 'đầu tiên';\n    } else {\n      return 'thứ ' + number;\n    }\n  }\n\n  // there are no different forms of ordinal numbers in Vietnamese\n  return String(number);\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingQuarterValues,\n    defaultFormattingWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingMonthValues,\n    defaultFormattingWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(tcn|scn)/i,\n  abbreviated: /^(trước CN|sau CN)/i,\n  wide: /^(trước Công Nguyên|sau Công Nguyên)/i\n};\nvar parseEraPatterns = {\n  any: [/^t/i, /^s/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^([1234]|i{1,3}v?)/i,\n  abbreviated: /^q([1234]|i{1,3}v?)/i,\n  wide: /^quý ([1234]|i{1,3}v?)/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|i)$/i, /(2|ii)$/i, /(3|iii)$/i, /(4|iv)$/i]\n};\nvar matchMonthPatterns = {\n  // month number may contain leading 0, 'thg' prefix may have space, underscore or empty before number\n  // note the order of '1' since it is a sub-string of '10', so must be lower priority\n  narrow: /^(0?[2-9]|10|11|12|0?1)/i,\n  // note the order of 'thg 1' since it is sub-string of 'thg 10', so must be lower priority\n  abbreviated: /^thg[ _]?(0?[1-9](?!\\d)|10|11|12)/i,\n  // note the order of 'Mười' since it is sub-string of Mười Một, so must be lower priority\n  wide: /^tháng ?(Một|Hai|Ba|Tư|Năm|Sáu|Bảy|Tám|Chín|Mười|Mười ?Một|Mười ?Hai|0?[1-9](?!\\d)|10|11|12)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/0?1$/i, /0?2/i, /3/, /4/, /5/, /6/, /7/, /8/, /9/, /10/, /11/, /12/],\n  abbreviated: [/^thg[ _]?0?1(?!\\d)/i, /^thg[ _]?0?2/i, /^thg[ _]?0?3/i, /^thg[ _]?0?4/i, /^thg[ _]?0?5/i, /^thg[ _]?0?6/i, /^thg[ _]?0?7/i, /^thg[ _]?0?8/i, /^thg[ _]?0?9/i, /^thg[ _]?10/i, /^thg[ _]?11/i, /^thg[ _]?12/i],\n  wide: [/^tháng ?(Một|0?1(?!\\d))/i, /^tháng ?(Hai|0?2)/i, /^tháng ?(Ba|0?3)/i, /^tháng ?(Tư|0?4)/i, /^tháng ?(Năm|0?5)/i, /^tháng ?(Sáu|0?6)/i, /^tháng ?(Bảy|0?7)/i, /^tháng ?(Tám|0?8)/i, /^tháng ?(Chín|0?9)/i, /^tháng ?(Mười|10)/i, /^tháng ?(Mười ?Một|11)/i, /^tháng ?(Mười ?Hai|12)/i]\n};\nvar matchDayPatterns = {\n  narrow: /^(CN|T2|T3|T4|T5|T6|T7)/i,\n  short: /^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,\n  abbreviated: /^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,\n  wide: /^(Chủ ?Nhật|Chúa ?Nhật|thứ ?Hai|thứ ?Ba|thứ ?Tư|thứ ?Năm|thứ ?Sáu|thứ ?Bảy)/i\n};\nvar parseDayPatterns = {\n  narrow: [/CN/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i],\n  short: [/CN/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i],\n  abbreviated: [/CN/i, /2/i, /3/i, /4/i, /5/i, /6/i, /7/i],\n  wide: [/(Chủ|Chúa) ?Nhật/i, /Hai/i, /Ba/i, /Tư/i, /Năm/i, /Sáu/i, /Bảy/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,\n  abbreviated: /^(am|pm|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,\n  wide: /^(ch[^i]*|sa|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^(a|sa)/i,\n    pm: /^(p|ch[^i]*)/i,\n    midnight: /nửa đêm/i,\n    noon: /trưa/i,\n    morning: /sáng/i,\n    afternoon: /chiều/i,\n    evening: /tối/i,\n    night: /^đêm/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'wide'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '不到 1 秒',\n    other: '不到 {{count}} 秒'\n  },\n  xSeconds: {\n    one: '1 秒',\n    other: '{{count}} 秒'\n  },\n  halfAMinute: '半分钟',\n  lessThanXMinutes: {\n    one: '不到 1 分钟',\n    other: '不到 {{count}} 分钟'\n  },\n  xMinutes: {\n    one: '1 分钟',\n    other: '{{count}} 分钟'\n  },\n  xHours: {\n    one: '1 小时',\n    other: '{{count}} 小时'\n  },\n  aboutXHours: {\n    one: '大约 1 小时',\n    other: '大约 {{count}} 小时'\n  },\n  xDays: {\n    one: '1 天',\n    other: '{{count}} 天'\n  },\n  aboutXWeeks: {\n    one: '大约 1 个星期',\n    other: '大约 {{count}} 个星期'\n  },\n  xWeeks: {\n    one: '1 个星期',\n    other: '{{count}} 个星期'\n  },\n  aboutXMonths: {\n    one: '大约 1 个月',\n    other: '大约 {{count}} 个月'\n  },\n  xMonths: {\n    one: '1 个月',\n    other: '{{count}} 个月'\n  },\n  aboutXYears: {\n    one: '大约 1 年',\n    other: '大约 {{count}} 年'\n  },\n  xYears: {\n    one: '1 年',\n    other: '{{count}} 年'\n  },\n  overXYears: {\n    one: '超过 1 年',\n    other: '超过 {{count}} 年'\n  },\n  almostXYears: {\n    one: '将近 1 年',\n    other: '将近 {{count}} 年'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + '内';\n    } else {\n      return result + '前';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"y'年'M'月'd'日' EEEE\",\n  long: \"y'年'M'月'd'日'\",\n  medium: 'yyyy-MM-dd',\n  short: 'yy-MM-dd'\n};\nvar timeFormats = {\n  full: 'zzzz a h:mm:ss',\n  long: 'z a h:mm:ss',\n  medium: 'a h:mm:ss',\n  short: 'a h:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nfunction checkWeek(date, baseDate, options) {\n  var baseFormat = 'eeee p';\n  if (isSameUTCWeek(date, baseDate, options)) {\n    return baseFormat; // in same week\n  } else if (date.getTime() > baseDate.getTime()) {\n    return \"'下个'\" + baseFormat; // in next week\n  }\n\n  return \"'上个'\" + baseFormat; // in last week\n}\n\nvar formatRelativeLocale = {\n  lastWeek: checkWeek,\n  // days before yesterday, maybe in this week or last week\n  yesterday: \"'昨天' p\",\n  today: \"'今天' p\",\n  tomorrow: \"'明天' p\",\n  nextWeek: checkWeek,\n  // days after tomorrow, maybe in this week or next week\n  other: 'PP p'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n  var format = formatRelativeLocale[token];\n  if (typeof format === 'function') {\n    return format(date, baseDate, options);\n  }\n  return format;\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Chinese Simplified locale.\n * @language Chinese Simplified\n * @iso-639-2 zho\n * @author Changyu Geng [@KingMario]{@link https://github.com/KingMario}\n * @author Song Shuoyun [@fnlctrl]{@link https://github.com/fnlctrl}\n * @author sabrinaM [@sabrinamiao]{@link https://github.com/sabrinamiao}\n * @author Carney Wu [@cubicwork]{@link https://github.com/cubicwork}\n * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}\n */\nvar locale = {\n  code: 'zh-CN',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['前', '公元'],\n  abbreviated: ['前', '公元'],\n  wide: ['公元前', '公元']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['第一季', '第二季', '第三季', '第四季'],\n  wide: ['第一季度', '第二季度', '第三季度', '第四季度']\n};\nvar monthValues = {\n  narrow: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'],\n  abbreviated: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n  wide: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\nvar dayValues = {\n  narrow: ['日', '一', '二', '三', '四', '五', '六'],\n  short: ['日', '一', '二', '三', '四', '五', '六'],\n  abbreviated: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n  wide: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: '上',\n    pm: '下',\n    midnight: '凌晨',\n    noon: '午',\n    morning: '早',\n    afternoon: '下午',\n    evening: '晚',\n    night: '夜'\n  },\n  abbreviated: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜间'\n  },\n  wide: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜间'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: '上',\n    pm: '下',\n    midnight: '凌晨',\n    noon: '午',\n    morning: '早',\n    afternoon: '下午',\n    evening: '晚',\n    night: '夜'\n  },\n  abbreviated: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜间'\n  },\n  wide: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜间'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  switch (options === null || options === void 0 ? void 0 : options.unit) {\n    case 'date':\n      return number.toString() + '日';\n    case 'hour':\n      return number.toString() + '时';\n    case 'minute':\n      return number.toString() + '分';\n    case 'second':\n      return number.toString() + '秒';\n    default:\n      return '第 ' + number.toString();\n  }\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(第\\s*)?\\d+(日|时|分|秒)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(前)/i,\n  abbreviated: /^(前)/i,\n  wide: /^(公元前|公元)/i\n};\nvar parseEraPatterns = {\n  any: [/^(前)/i, /^(公元)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^第[一二三四]刻/i,\n  wide: /^第[一二三四]刻钟/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,\n  abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\\d|1[12])月/i,\n  wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^一/i, /^二/i, /^三/i, /^四/i, /^五/i, /^六/i, /^七/i, /^八/i, /^九/i, /^十(?!(一|二))/i, /^十一/i, /^十二/i],\n  any: [/^一|1/i, /^二|2/i, /^三|3/i, /^四|4/i, /^五|5/i, /^六|6/i, /^七|7/i, /^八|8/i, /^九|9/i, /^十(?!(一|二))|10/i, /^十一|11/i, /^十二|12/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[一二三四五六日]/i,\n  short: /^[一二三四五六日]/i,\n  abbreviated: /^周[一二三四五六日]/i,\n  wide: /^星期[一二三四五六日]/i\n};\nvar parseDayPatterns = {\n  any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^上午?/i,\n    pm: /^下午?/i,\n    midnight: /^午夜/i,\n    noon: /^[中正]午/i,\n    morning: /^早上/i,\n    afternoon: /^下午/i,\n    evening: /^晚上?/i,\n    night: /^凌晨/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '少於 1 秒',\n    other: '少於 {{count}} 秒'\n  },\n  xSeconds: {\n    one: '1 秒',\n    other: '{{count}} 秒'\n  },\n  halfAMinute: '半分鐘',\n  lessThanXMinutes: {\n    one: '少於 1 分鐘',\n    other: '少於 {{count}} 分鐘'\n  },\n  xMinutes: {\n    one: '1 分鐘',\n    other: '{{count}} 分鐘'\n  },\n  xHours: {\n    one: '1 小時',\n    other: '{{count}} 小時'\n  },\n  aboutXHours: {\n    one: '大約 1 小時',\n    other: '大約 {{count}} 小時'\n  },\n  xDays: {\n    one: '1 天',\n    other: '{{count}} 天'\n  },\n  aboutXWeeks: {\n    one: '大約 1 個星期',\n    other: '大約 {{count}} 個星期'\n  },\n  xWeeks: {\n    one: '1 個星期',\n    other: '{{count}} 個星期'\n  },\n  aboutXMonths: {\n    one: '大約 1 個月',\n    other: '大約 {{count}} 個月'\n  },\n  xMonths: {\n    one: '1 個月',\n    other: '{{count}} 個月'\n  },\n  aboutXYears: {\n    one: '大約 1 年',\n    other: '大約 {{count}} 年'\n  },\n  xYears: {\n    one: '1 年',\n    other: '{{count}} 年'\n  },\n  overXYears: {\n    one: '超過 1 年',\n    other: '超過 {{count}} 年'\n  },\n  almostXYears: {\n    one: '將近 1 年',\n    other: '將近 {{count}} 年'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + '內';\n    } else {\n      return result + '前';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"y'年'M'月'd'日' EEEE\",\n  long: \"y'年'M'月'd'日'\",\n  medium: 'yyyy-MM-dd',\n  short: 'yy-MM-dd'\n};\nvar timeFormats = {\n  full: 'zzzz a h:mm:ss',\n  long: 'z a h:mm:ss',\n  medium: 'a h:mm:ss',\n  short: 'a h:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'上個'eeee p\",\n  yesterday: \"'昨天' p\",\n  today: \"'今天' p\",\n  tomorrow: \"'明天' p\",\n  nextWeek: \"'下個'eeee p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Chinese Traditional locale.\n * @language Chinese Traditional\n * @iso-639-2 zho\n * @author Gary Ip [@gaplo]{@link https://github.com/gaplo}\n */\nvar locale = {\n  code: 'zh-HK',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['前', '公元'],\n  abbreviated: ['前', '公元'],\n  wide: ['公元前', '公元']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['第一季', '第二季', '第三季', '第四季'],\n  wide: ['第一季度', '第二季度', '第三季度', '第四季度']\n};\nvar monthValues = {\n  narrow: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'],\n  abbreviated: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n  wide: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\nvar dayValues = {\n  narrow: ['日', '一', '二', '三', '四', '五', '六'],\n  short: ['日', '一', '二', '三', '四', '五', '六'],\n  abbreviated: ['週日', '週一', '週二', '週三', '週四', '週五', '週六'],\n  wide: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: '上',\n    pm: '下',\n    midnight: '午夜',\n    noon: '晌',\n    morning: '早',\n    afternoon: '午',\n    evening: '晚',\n    night: '夜'\n  },\n  abbreviated: {\n    am: '上午',\n    pm: '下午',\n    midnight: '午夜',\n    noon: '中午',\n    morning: '上午',\n    afternoon: '下午',\n    evening: '晚上',\n    night: '夜晚'\n  },\n  wide: {\n    am: '上午',\n    pm: '下午',\n    midnight: '午夜',\n    noon: '中午',\n    morning: '上午',\n    afternoon: '下午',\n    evening: '晚上',\n    night: '夜晚'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: '上',\n    pm: '下',\n    midnight: '午夜',\n    noon: '晌',\n    morning: '早',\n    afternoon: '午',\n    evening: '晚',\n    night: '夜'\n  },\n  abbreviated: {\n    am: '上午',\n    pm: '下午',\n    midnight: '午夜',\n    noon: '中午',\n    morning: '上午',\n    afternoon: '下午',\n    evening: '晚上',\n    night: '夜晚'\n  },\n  wide: {\n    am: '上午',\n    pm: '下午',\n    midnight: '午夜',\n    noon: '中午',\n    morning: '上午',\n    afternoon: '下午',\n    evening: '晚上',\n    night: '夜晚'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  switch (options === null || options === void 0 ? void 0 : options.unit) {\n    case 'date':\n      return number + '日';\n    case 'hour':\n      return number + '時';\n    case 'minute':\n      return number + '分';\n    case 'second':\n      return number + '秒';\n    default:\n      return '第 ' + number;\n  }\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(第\\s*)?\\d+(日|時|分|秒)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(前)/i,\n  abbreviated: /^(前)/i,\n  wide: /^(公元前|公元)/i\n};\nvar parseEraPatterns = {\n  any: [/^(前)/i, /^(公元)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^第[一二三四]季/i,\n  wide: /^第[一二三四]季度/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,\n  abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\\d|1[12])月/i,\n  wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^一/i, /^二/i, /^三/i, /^四/i, /^五/i, /^六/i, /^七/i, /^八/i, /^九/i, /^十(?!(一|二))/i, /^十一/i, /^十二/i],\n  any: [/^一|1/i, /^二|2/i, /^三|3/i, /^四|4/i, /^五|5/i, /^六|6/i, /^七|7/i, /^八|8/i, /^九|9/i, /^十(?!(一|二))|10/i, /^十一|11/i, /^十二|12/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[一二三四五六日]/i,\n  short: /^[一二三四五六日]/i,\n  abbreviated: /^週[一二三四五六日]/i,\n  wide: /^星期[一二三四五六日]/i\n};\nvar parseDayPatterns = {\n  any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^上午?/i,\n    pm: /^下午?/i,\n    midnight: /^午夜/i,\n    noon: /^[中正]午/i,\n    morning: /^早上/i,\n    afternoon: /^下午/i,\n    evening: /^晚上?/i,\n    night: /^凌晨/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: '少於 1 秒',\n    other: '少於 {{count}} 秒'\n  },\n  xSeconds: {\n    one: '1 秒',\n    other: '{{count}} 秒'\n  },\n  halfAMinute: '半分鐘',\n  lessThanXMinutes: {\n    one: '少於 1 分鐘',\n    other: '少於 {{count}} 分鐘'\n  },\n  xMinutes: {\n    one: '1 分鐘',\n    other: '{{count}} 分鐘'\n  },\n  xHours: {\n    one: '1 小時',\n    other: '{{count}} 小時'\n  },\n  aboutXHours: {\n    one: '大約 1 小時',\n    other: '大約 {{count}} 小時'\n  },\n  xDays: {\n    one: '1 天',\n    other: '{{count}} 天'\n  },\n  aboutXWeeks: {\n    one: '大約 1 個星期',\n    other: '大約 {{count}} 個星期'\n  },\n  xWeeks: {\n    one: '1 個星期',\n    other: '{{count}} 個星期'\n  },\n  aboutXMonths: {\n    one: '大約 1 個月',\n    other: '大約 {{count}} 個月'\n  },\n  xMonths: {\n    one: '1 個月',\n    other: '{{count}} 個月'\n  },\n  aboutXYears: {\n    one: '大約 1 年',\n    other: '大約 {{count}} 年'\n  },\n  xYears: {\n    one: '1 年',\n    other: '{{count}} 年'\n  },\n  overXYears: {\n    one: '超過 1 年',\n    other: '超過 {{count}} 年'\n  },\n  almostXYears: {\n    one: '將近 1 年',\n    other: '將近 {{count}} 年'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', String(count));\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + '內';\n    } else {\n      return result + '前';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"y'年'M'月'd'日' EEEE\",\n  long: \"y'年'M'月'd'日'\",\n  medium: 'yyyy-MM-dd',\n  short: 'yy-MM-dd'\n};\nvar timeFormats = {\n  full: 'zzzz a h:mm:ss',\n  long: 'z a h:mm:ss',\n  medium: 'a h:mm:ss',\n  short: 'a h:mm'\n};\nvar dateTimeFormats = {\n  full: '{{date}} {{time}}',\n  long: '{{date}} {{time}}',\n  medium: '{{date}} {{time}}',\n  short: '{{date}} {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'上個'eeee p\",\n  yesterday: \"'昨天' p\",\n  today: \"'今天' p\",\n  tomorrow: \"'明天' p\",\n  nextWeek: \"'下個'eeee p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Chinese Traditional locale.\n * @language Chinese Traditional\n * @iso-639-2 zho\n * @author tonypai [@tpai]{@link https://github.com/tpai}\n * @author Jack Hsu [@jackhsu978]{@link https://github.com/jackhsu978}\n * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}\n */\nvar locale = {\n  code: 'zh-TW',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 4\n  }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['前', '公元'],\n  abbreviated: ['前', '公元'],\n  wide: ['公元前', '公元']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['第一刻', '第二刻', '第三刻', '第四刻'],\n  wide: ['第一刻鐘', '第二刻鐘', '第三刻鐘', '第四刻鐘']\n};\nvar monthValues = {\n  narrow: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'],\n  abbreviated: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n  wide: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\nvar dayValues = {\n  narrow: ['日', '一', '二', '三', '四', '五', '六'],\n  short: ['日', '一', '二', '三', '四', '五', '六'],\n  abbreviated: ['週日', '週一', '週二', '週三', '週四', '週五', '週六'],\n  wide: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: '上',\n    pm: '下',\n    midnight: '凌晨',\n    noon: '午',\n    morning: '早',\n    afternoon: '下午',\n    evening: '晚',\n    night: '夜'\n  },\n  abbreviated: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜間'\n  },\n  wide: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜間'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: '上',\n    pm: '下',\n    midnight: '凌晨',\n    noon: '午',\n    morning: '早',\n    afternoon: '下午',\n    evening: '晚',\n    night: '夜'\n  },\n  abbreviated: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜間'\n  },\n  wide: {\n    am: '上午',\n    pm: '下午',\n    midnight: '凌晨',\n    noon: '中午',\n    morning: '早晨',\n    afternoon: '中午',\n    evening: '晚上',\n    night: '夜間'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n  var number = Number(dirtyNumber);\n  switch (options === null || options === void 0 ? void 0 : options.unit) {\n    case 'date':\n      return number + '日';\n    case 'hour':\n      return number + '時';\n    case 'minute':\n      return number + '分';\n    case 'second':\n      return number + '秒';\n    default:\n      return '第 ' + number;\n  }\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(第\\s*)?\\d+(日|時|分|秒)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(前)/i,\n  abbreviated: /^(前)/i,\n  wide: /^(公元前|公元)/i\n};\nvar parseEraPatterns = {\n  any: [/^(前)/i, /^(公元)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^第[一二三四]刻/i,\n  wide: /^第[一二三四]刻鐘/i\n};\nvar parseQuarterPatterns = {\n  any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,\n  abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\\d|1[12])月/i,\n  wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^一/i, /^二/i, /^三/i, /^四/i, /^五/i, /^六/i, /^七/i, /^八/i, /^九/i, /^十(?!(一|二))/i, /^十一/i, /^十二/i],\n  any: [/^一|1/i, /^二|2/i, /^三|3/i, /^四|4/i, /^五|5/i, /^六|6/i, /^七|7/i, /^八|8/i, /^九|9/i, /^十(?!(一|二))|10/i, /^十一|11/i, /^十二|12/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[一二三四五六日]/i,\n  short: /^[一二三四五六日]/i,\n  abbreviated: /^週[一二三四五六日]/i,\n  wide: /^星期[一二三四五六日]/i\n};\nvar parseDayPatterns = {\n  any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i]\n};\nvar matchDayPeriodPatterns = {\n  any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨)/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^上午?/i,\n    pm: /^下午?/i,\n    midnight: /^午夜/i,\n    noon: /^[中正]午/i,\n    morning: /^早上/i,\n    afternoon: /^下午/i,\n    evening: /^晚上?/i,\n    night: /^凌晨/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return startOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setDate(date.getDate() - diff);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, -amount);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n      // eslint-disable-next-line no-console\n      console.warn(new Error().stack);\n    }\n    return new Date(NaN);\n  }\n}","(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","'use strict';\n\nvar cache = {};\nvar start = '(?:^|\\\\s)';\nvar end = '(?:\\\\s|$)';\n\nfunction lookupClass (className) {\n  var cached = cache[className];\n  if (cached) {\n    cached.lastIndex = 0;\n  } else {\n    cache[className] = cached = new RegExp(start + className + end, 'g');\n  }\n  return cached;\n}\n\nfunction addClass (el, className) {\n  var current = el.className;\n  if (!current.length) {\n    el.className = className;\n  } else if (!lookupClass(className).test(current)) {\n    el.className += ' ' + className;\n  }\n}\n\nfunction rmClass (el, className) {\n  el.className = el.className.replace(lookupClass(className), ' ').trim();\n}\n\nmodule.exports = {\n  add: addClass,\n  rm: rmClass\n};\n","'use strict';\n\nvar emitter = require('contra/emitter');\nvar crossvent = require('crossvent');\nvar classes = require('./classes');\nvar doc = document;\nvar documentElement = doc.documentElement;\n\nfunction dragula (initialContainers, options) {\n  var len = arguments.length;\n  if (len === 1 && Array.isArray(initialContainers) === false) {\n    options = initialContainers;\n    initialContainers = [];\n  }\n  var _mirror; // mirror image\n  var _source; // source container\n  var _item; // item being dragged\n  var _offsetX; // reference x\n  var _offsetY; // reference y\n  var _moveX; // reference move x\n  var _moveY; // reference move y\n  var _initialSibling; // reference sibling when grabbed\n  var _currentSibling; // reference sibling now\n  var _copy; // item used for copying\n  var _renderTimer; // timer for setTimeout renderMirrorImage\n  var _lastDropTarget = null; // last container item was over\n  var _grabbed; // holds mousedown context until first mousemove\n\n  var o = options || {};\n  if (o.moves === void 0) { o.moves = always; }\n  if (o.accepts === void 0) { o.accepts = always; }\n  if (o.invalid === void 0) { o.invalid = invalidTarget; }\n  if (o.containers === void 0) { o.containers = initialContainers || []; }\n  if (o.isContainer === void 0) { o.isContainer = never; }\n  if (o.copy === void 0) { o.copy = false; }\n  if (o.copySortSource === void 0) { o.copySortSource = false; }\n  if (o.revertOnSpill === void 0) { o.revertOnSpill = false; }\n  if (o.removeOnSpill === void 0) { o.removeOnSpill = false; }\n  if (o.direction === void 0) { o.direction = 'vertical'; }\n  if (o.ignoreInputTextSelection === void 0) { o.ignoreInputTextSelection = true; }\n  if (o.mirrorContainer === void 0) { o.mirrorContainer = doc.body; }\n\n  var drake = emitter({\n    containers: o.containers,\n    start: manualStart,\n    end: end,\n    cancel: cancel,\n    remove: remove,\n    destroy: destroy,\n    canMove: canMove,\n    dragging: false\n  });\n\n  if (o.removeOnSpill === true) {\n    drake.on('over', spillOver).on('out', spillOut);\n  }\n\n  events();\n\n  return drake;\n\n  function isContainer (el) {\n    return drake.containers.indexOf(el) !== -1 || o.isContainer(el);\n  }\n\n  function events (remove) {\n    var op = remove ? 'remove' : 'add';\n    touchy(documentElement, op, 'mousedown', grab);\n    touchy(documentElement, op, 'mouseup', release);\n  }\n\n  function eventualMovements (remove) {\n    var op = remove ? 'remove' : 'add';\n    touchy(documentElement, op, 'mousemove', startBecauseMouseMoved);\n  }\n\n  function movements (remove) {\n    var op = remove ? 'remove' : 'add';\n    crossvent[op](documentElement, 'selectstart', preventGrabbed); // IE8\n    crossvent[op](documentElement, 'click', preventGrabbed);\n  }\n\n  function destroy () {\n    events(true);\n    release({});\n  }\n\n  function preventGrabbed (e) {\n    if (_grabbed) {\n      e.preventDefault();\n    }\n  }\n\n  function grab (e) {\n    _moveX = e.clientX;\n    _moveY = e.clientY;\n\n    var ignore = whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey;\n    if (ignore) {\n      return; // we only care about honest-to-god left clicks and touch events\n    }\n    var item = e.target;\n    var context = canStart(item);\n    if (!context) {\n      return;\n    }\n    _grabbed = context;\n    eventualMovements();\n    if (e.type === 'mousedown') {\n      if (isInput(item)) { // see also: https://github.com/bevacqua/dragula/issues/208\n        item.focus(); // fixes https://github.com/bevacqua/dragula/issues/176\n      } else {\n        e.preventDefault(); // fixes https://github.com/bevacqua/dragula/issues/155\n      }\n    }\n  }\n\n  function startBecauseMouseMoved (e) {\n    if (!_grabbed) {\n      return;\n    }\n    if (whichMouseButton(e) === 0) {\n      release({});\n      return; // when text is selected on an input and then dragged, mouseup doesn't fire. this is our only hope\n    }\n\n    // truthy check fixes #239, equality fixes #207, fixes #501\n    if ((e.clientX !== void 0 && Math.abs(e.clientX - _moveX) <= (o.slideFactorX || 0)) &&\n      (e.clientY !== void 0 && Math.abs(e.clientY - _moveY) <= (o.slideFactorY || 0))) {\n      return;\n    }\n\n    if (o.ignoreInputTextSelection) {\n      var clientX = getCoord('clientX', e) || 0;\n      var clientY = getCoord('clientY', e) || 0;\n      var elementBehindCursor = doc.elementFromPoint(clientX, clientY);\n      if (isInput(elementBehindCursor)) {\n        return;\n      }\n    }\n\n    var grabbed = _grabbed; // call to end() unsets _grabbed\n    eventualMovements(true);\n    movements();\n    end();\n    start(grabbed);\n\n    var offset = getOffset(_item);\n    _offsetX = getCoord('pageX', e) - offset.left;\n    _offsetY = getCoord('pageY', e) - offset.top;\n\n    classes.add(_copy || _item, 'gu-transit');\n    renderMirrorImage();\n    drag(e);\n  }\n\n  function canStart (item) {\n    if (drake.dragging && _mirror) {\n      return;\n    }\n    if (isContainer(item)) {\n      return; // don't drag container itself\n    }\n    var handle = item;\n    while (getParent(item) && isContainer(getParent(item)) === false) {\n      if (o.invalid(item, handle)) {\n        return;\n      }\n      item = getParent(item); // drag target should be a top element\n      if (!item) {\n        return;\n      }\n    }\n    var source = getParent(item);\n    if (!source) {\n      return;\n    }\n    if (o.invalid(item, handle)) {\n      return;\n    }\n\n    var movable = o.moves(item, source, handle, nextEl(item));\n    if (!movable) {\n      return;\n    }\n\n    return {\n      item: item,\n      source: source\n    };\n  }\n\n  function canMove (item) {\n    return !!canStart(item);\n  }\n\n  function manualStart (item) {\n    var context = canStart(item);\n    if (context) {\n      start(context);\n    }\n  }\n\n  function start (context) {\n    if (isCopy(context.item, context.source)) {\n      _copy = context.item.cloneNode(true);\n      drake.emit('cloned', _copy, context.item, 'copy');\n    }\n\n    _source = context.source;\n    _item = context.item;\n    _initialSibling = _currentSibling = nextEl(context.item);\n\n    drake.dragging = true;\n    drake.emit('drag', _item, _source);\n  }\n\n  function invalidTarget () {\n    return false;\n  }\n\n  function end () {\n    if (!drake.dragging) {\n      return;\n    }\n    var item = _copy || _item;\n    drop(item, getParent(item));\n  }\n\n  function ungrab () {\n    _grabbed = false;\n    eventualMovements(true);\n    movements(true);\n  }\n\n  function release (e) {\n    ungrab();\n\n    if (!drake.dragging) {\n      return;\n    }\n    var item = _copy || _item;\n    var clientX = getCoord('clientX', e) || 0;\n    var clientY = getCoord('clientY', e) || 0;\n    var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n    var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n    if (dropTarget && ((_copy && o.copySortSource) || (!_copy || dropTarget !== _source))) {\n      drop(item, dropTarget);\n    } else if (o.removeOnSpill) {\n      remove();\n    } else {\n      cancel();\n    }\n  }\n\n  function drop (item, target) {\n    var parent = getParent(item);\n    if (_copy && o.copySortSource && target === _source) {\n      parent.removeChild(_item);\n    }\n    if (isInitialPlacement(target)) {\n      drake.emit('cancel', item, _source, _source);\n    } else {\n      drake.emit('drop', item, target, _source, _currentSibling);\n    }\n    cleanup();\n  }\n\n  function remove () {\n    if (!drake.dragging) {\n      return;\n    }\n    var item = _copy || _item;\n    var parent = getParent(item);\n    if (parent) {\n      parent.removeChild(item);\n    }\n    drake.emit(_copy ? 'cancel' : 'remove', item, parent, _source);\n    cleanup();\n  }\n\n  function cancel (revert) {\n    if (!drake.dragging) {\n      return;\n    }\n    var reverts = arguments.length > 0 ? revert : o.revertOnSpill;\n    var item = _copy || _item;\n    var parent = getParent(item);\n    var initial = isInitialPlacement(parent);\n    if (initial === false && reverts) {\n      if (_copy) {\n        if (parent) {\n          parent.removeChild(_copy);\n        }\n      } else {\n        _source.insertBefore(item, _initialSibling);\n      }\n    }\n    if (initial || reverts) {\n      drake.emit('cancel', item, _source, _source);\n    } else {\n      drake.emit('drop', item, parent, _source, _currentSibling);\n    }\n    cleanup();\n  }\n\n  function cleanup () {\n    var item = _copy || _item;\n    ungrab();\n    removeMirrorImage();\n    if (item) {\n      classes.rm(item, 'gu-transit');\n    }\n    if (_renderTimer) {\n      clearTimeout(_renderTimer);\n    }\n    drake.dragging = false;\n    if (_lastDropTarget) {\n      drake.emit('out', item, _lastDropTarget, _source);\n    }\n    drake.emit('dragend', item);\n    _source = _item = _copy = _initialSibling = _currentSibling = _renderTimer = _lastDropTarget = null;\n  }\n\n  function isInitialPlacement (target, s) {\n    var sibling;\n    if (s !== void 0) {\n      sibling = s;\n    } else if (_mirror) {\n      sibling = _currentSibling;\n    } else {\n      sibling = nextEl(_copy || _item);\n    }\n    return target === _source && sibling === _initialSibling;\n  }\n\n  function findDropTarget (elementBehindCursor, clientX, clientY) {\n    var target = elementBehindCursor;\n    while (target && !accepted()) {\n      target = getParent(target);\n    }\n    return target;\n\n    function accepted () {\n      var droppable = isContainer(target);\n      if (droppable === false) {\n        return false;\n      }\n\n      var immediate = getImmediateChild(target, elementBehindCursor);\n      var reference = getReference(target, immediate, clientX, clientY);\n      var initial = isInitialPlacement(target, reference);\n      if (initial) {\n        return true; // should always be able to drop it right back where it was\n      }\n      return o.accepts(_item, target, _source, reference);\n    }\n  }\n\n  function drag (e) {\n    if (!_mirror) {\n      return;\n    }\n    e.preventDefault();\n\n    var clientX = getCoord('clientX', e) || 0;\n    var clientY = getCoord('clientY', e) || 0;\n    var x = clientX - _offsetX;\n    var y = clientY - _offsetY;\n\n    _mirror.style.left = x + 'px';\n    _mirror.style.top = y + 'px';\n\n    var item = _copy || _item;\n    var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n    var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n    var changed = dropTarget !== null && dropTarget !== _lastDropTarget;\n    if (changed || dropTarget === null) {\n      out();\n      _lastDropTarget = dropTarget;\n      over();\n    }\n    var parent = getParent(item);\n    if (dropTarget === _source && _copy && !o.copySortSource) {\n      if (parent) {\n        parent.removeChild(item);\n      }\n      return;\n    }\n    var reference;\n    var immediate = getImmediateChild(dropTarget, elementBehindCursor);\n    if (immediate !== null) {\n      reference = getReference(dropTarget, immediate, clientX, clientY);\n    } else if (o.revertOnSpill === true && !_copy) {\n      reference = _initialSibling;\n      dropTarget = _source;\n    } else {\n      if (_copy && parent) {\n        parent.removeChild(item);\n      }\n      return;\n    }\n    if (\n      (reference === null && changed) ||\n      reference !== item &&\n      reference !== nextEl(item)\n    ) {\n      _currentSibling = reference;\n      dropTarget.insertBefore(item, reference);\n      drake.emit('shadow', item, dropTarget, _source);\n    }\n    function moved (type) { drake.emit(type, item, _lastDropTarget, _source); }\n    function over () { if (changed) { moved('over'); } }\n    function out () { if (_lastDropTarget) { moved('out'); } }\n  }\n\n  function spillOver (el) {\n    classes.rm(el, 'gu-hide');\n  }\n\n  function spillOut (el) {\n    if (drake.dragging) { classes.add(el, 'gu-hide'); }\n  }\n\n  function renderMirrorImage () {\n    if (_mirror) {\n      return;\n    }\n    var rect = _item.getBoundingClientRect();\n    _mirror = _item.cloneNode(true);\n    _mirror.style.width = getRectWidth(rect) + 'px';\n    _mirror.style.height = getRectHeight(rect) + 'px';\n    classes.rm(_mirror, 'gu-transit');\n    classes.add(_mirror, 'gu-mirror');\n    o.mirrorContainer.appendChild(_mirror);\n    touchy(documentElement, 'add', 'mousemove', drag);\n    classes.add(o.mirrorContainer, 'gu-unselectable');\n    drake.emit('cloned', _mirror, _item, 'mirror');\n  }\n\n  function removeMirrorImage () {\n    if (_mirror) {\n      classes.rm(o.mirrorContainer, 'gu-unselectable');\n      touchy(documentElement, 'remove', 'mousemove', drag);\n      getParent(_mirror).removeChild(_mirror);\n      _mirror = null;\n    }\n  }\n\n  function getImmediateChild (dropTarget, target) {\n    var immediate = target;\n    while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {\n      immediate = getParent(immediate);\n    }\n    if (immediate === documentElement) {\n      return null;\n    }\n    return immediate;\n  }\n\n  function getReference (dropTarget, target, x, y) {\n    var horizontal = o.direction === 'horizontal';\n    var reference = target !== dropTarget ? inside() : outside();\n    return reference;\n\n    function outside () { // slower, but able to figure out any position\n      var len = dropTarget.children.length;\n      var i;\n      var el;\n      var rect;\n      for (i = 0; i < len; i++) {\n        el = dropTarget.children[i];\n        rect = el.getBoundingClientRect();\n        if (horizontal && (rect.left + rect.width / 2) > x) { return el; }\n        if (!horizontal && (rect.top + rect.height / 2) > y) { return el; }\n      }\n      return null;\n    }\n\n    function inside () { // faster, but only available if dropped inside a child element\n      var rect = target.getBoundingClientRect();\n      if (horizontal) {\n        return resolve(x > rect.left + getRectWidth(rect) / 2);\n      }\n      return resolve(y > rect.top + getRectHeight(rect) / 2);\n    }\n\n    function resolve (after) {\n      return after ? nextEl(target) : target;\n    }\n  }\n\n  function isCopy (item, container) {\n    return typeof o.copy === 'boolean' ? o.copy : o.copy(item, container);\n  }\n}\n\nfunction touchy (el, op, type, fn) {\n  var touch = {\n    mouseup: 'touchend',\n    mousedown: 'touchstart',\n    mousemove: 'touchmove'\n  };\n  var pointers = {\n    mouseup: 'pointerup',\n    mousedown: 'pointerdown',\n    mousemove: 'pointermove'\n  };\n  var microsoft = {\n    mouseup: 'MSPointerUp',\n    mousedown: 'MSPointerDown',\n    mousemove: 'MSPointerMove'\n  };\n  if (global.navigator.pointerEnabled) {\n    crossvent[op](el, pointers[type], fn);\n  } else if (global.navigator.msPointerEnabled) {\n    crossvent[op](el, microsoft[type], fn);\n  } else {\n    crossvent[op](el, touch[type], fn);\n    crossvent[op](el, type, fn);\n  }\n}\n\nfunction whichMouseButton (e) {\n  if (e.touches !== void 0) { return e.touches.length; }\n  if (e.which !== void 0 && e.which !== 0) { return e.which; } // see https://github.com/bevacqua/dragula/issues/261\n  if (e.buttons !== void 0) { return e.buttons; }\n  var button = e.button;\n  if (button !== void 0) { // see https://github.com/jquery/jquery/blob/99e8ff1baa7ae341e94bb89c3e84570c7c3ad9ea/src/event.js#L573-L575\n    return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);\n  }\n}\n\nfunction getOffset (el) {\n  var rect = el.getBoundingClientRect();\n  return {\n    left: rect.left + getScroll('scrollLeft', 'pageXOffset'),\n    top: rect.top + getScroll('scrollTop', 'pageYOffset')\n  };\n}\n\nfunction getScroll (scrollProp, offsetProp) {\n  if (typeof global[offsetProp] !== 'undefined') {\n    return global[offsetProp];\n  }\n  if (documentElement.clientHeight) {\n    return documentElement[scrollProp];\n  }\n  return doc.body[scrollProp];\n}\n\nfunction getElementBehindPoint (point, x, y) {\n  point = point || {};\n  var state = point.className || '';\n  var el;\n  point.className += ' gu-hide';\n  el = doc.elementFromPoint(x, y);\n  point.className = state;\n  return el;\n}\n\nfunction never () { return false; }\nfunction always () { return true; }\nfunction getRectWidth (rect) { return rect.width || (rect.right - rect.left); }\nfunction getRectHeight (rect) { return rect.height || (rect.bottom - rect.top); }\nfunction getParent (el) { return el.parentNode === doc ? null : el.parentNode; }\nfunction isInput (el) { return el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT' || isEditable(el); }\nfunction isEditable (el) {\n  if (!el) { return false; } // no parents were editable\n  if (el.contentEditable === 'false') { return false; } // stop the lookup\n  if (el.contentEditable === 'true') { return true; } // found a contentEditable element in the chain\n  return isEditable(getParent(el)); // contentEditable is set to 'inherit'\n}\n\nfunction nextEl (el) {\n  return el.nextElementSibling || manually();\n  function manually () {\n    var sibling = el;\n    do {\n      sibling = sibling.nextSibling;\n    } while (sibling && sibling.nodeType !== 1);\n    return sibling;\n  }\n}\n\nfunction getEventHost (e) {\n  // on touchend event, we have to use `e.changedTouches`\n  // see http://stackoverflow.com/questions/7192563/touchend-event-properties\n  // see https://github.com/bevacqua/dragula/issues/34\n  if (e.targetTouches && e.targetTouches.length) {\n    return e.targetTouches[0];\n  }\n  if (e.changedTouches && e.changedTouches.length) {\n    return e.changedTouches[0];\n  }\n  return e;\n}\n\nfunction getCoord (coord, e) {\n  var host = getEventHost(e);\n  var missMap = {\n    pageX: 'clientX', // IE8\n    pageY: 'clientY' // IE8\n  };\n  if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n    coord = missMap[coord];\n  }\n  return host[coord];\n}\n\nmodule.exports = dragula;\n","module.exports = function atoa (a, n) { return Array.prototype.slice.call(a, n); }\n","'use strict';\n\nvar ticky = require('ticky');\n\nmodule.exports = function debounce (fn, args, ctx) {\n  if (!fn) { return; }\n  ticky(function run () {\n    fn.apply(ctx || null, args || []);\n  });\n};\n","'use strict';\n\nvar atoa = require('atoa');\nvar debounce = require('./debounce');\n\nmodule.exports = function emitter (thing, options) {\n  var opts = options || {};\n  var evt = {};\n  if (thing === undefined) { thing = {}; }\n  thing.on = function (type, fn) {\n    if (!evt[type]) {\n      evt[type] = [fn];\n    } else {\n      evt[type].push(fn);\n    }\n    return thing;\n  };\n  thing.once = function (type, fn) {\n    fn._once = true; // thing.off(fn) still works!\n    thing.on(type, fn);\n    return thing;\n  };\n  thing.off = function (type, fn) {\n    var c = arguments.length;\n    if (c === 1) {\n      delete evt[type];\n    } else if (c === 0) {\n      evt = {};\n    } else {\n      var et = evt[type];\n      if (!et) { return thing; }\n      et.splice(et.indexOf(fn), 1);\n    }\n    return thing;\n  };\n  thing.emit = function () {\n    var args = atoa(arguments);\n    return thing.emitterSnapshot(args.shift()).apply(this, args);\n  };\n  thing.emitterSnapshot = function (type) {\n    var et = (evt[type] || []).slice(0);\n    return function () {\n      var args = atoa(arguments);\n      var ctx = this || thing;\n      if (type === 'error' && opts.throws !== false && !et.length) { throw args.length === 1 ? args[0] : args; }\n      et.forEach(function emitter (listen) {\n        if (opts.async) { debounce(listen, args, ctx); } else { listen.apply(ctx, args); }\n        if (listen._once) { thing.off(type, listen); }\n      });\n      return thing;\n    };\n  };\n  return thing;\n};\n","'use strict';\n\nvar customEvent = require('custom-event');\nvar eventmap = require('./eventmap');\nvar doc = global.document;\nvar addEvent = addEventEasy;\nvar removeEvent = removeEventEasy;\nvar hardCache = [];\n\nif (!global.addEventListener) {\n  addEvent = addEventHard;\n  removeEvent = removeEventHard;\n}\n\nmodule.exports = {\n  add: addEvent,\n  remove: removeEvent,\n  fabricate: fabricateEvent\n};\n\nfunction addEventEasy (el, type, fn, capturing) {\n  return el.addEventListener(type, fn, capturing);\n}\n\nfunction addEventHard (el, type, fn) {\n  return el.attachEvent('on' + type, wrap(el, type, fn));\n}\n\nfunction removeEventEasy (el, type, fn, capturing) {\n  return el.removeEventListener(type, fn, capturing);\n}\n\nfunction removeEventHard (el, type, fn) {\n  var listener = unwrap(el, type, fn);\n  if (listener) {\n    return el.detachEvent('on' + type, listener);\n  }\n}\n\nfunction fabricateEvent (el, type, model) {\n  var e = eventmap.indexOf(type) === -1 ? makeCustomEvent() : makeClassicEvent();\n  if (el.dispatchEvent) {\n    el.dispatchEvent(e);\n  } else {\n    el.fireEvent('on' + type, e);\n  }\n  function makeClassicEvent () {\n    var e;\n    if (doc.createEvent) {\n      e = doc.createEvent('Event');\n      e.initEvent(type, true, true);\n    } else if (doc.createEventObject) {\n      e = doc.createEventObject();\n    }\n    return e;\n  }\n  function makeCustomEvent () {\n    return new customEvent(type, { detail: model });\n  }\n}\n\nfunction wrapperFactory (el, type, fn) {\n  return function wrapper (originalEvent) {\n    var e = originalEvent || global.event;\n    e.target = e.target || e.srcElement;\n    e.preventDefault = e.preventDefault || function preventDefault () { e.returnValue = false; };\n    e.stopPropagation = e.stopPropagation || function stopPropagation () { e.cancelBubble = true; };\n    e.which = e.which || e.keyCode;\n    fn.call(el, e);\n  };\n}\n\nfunction wrap (el, type, fn) {\n  var wrapper = unwrap(el, type, fn) || wrapperFactory(el, type, fn);\n  hardCache.push({\n    wrapper: wrapper,\n    element: el,\n    type: type,\n    fn: fn\n  });\n  return wrapper;\n}\n\nfunction unwrap (el, type, fn) {\n  var i = find(el, type, fn);\n  if (i) {\n    var wrapper = hardCache[i].wrapper;\n    hardCache.splice(i, 1); // free up a tad of memory\n    return wrapper;\n  }\n}\n\nfunction find (el, type, fn) {\n  var i, item;\n  for (i = 0; i < hardCache.length; i++) {\n    item = hardCache[i];\n    if (item.element === el && item.type === type && item.fn === fn) {\n      return i;\n    }\n  }\n}\n","'use strict';\n\nvar eventmap = [];\nvar eventname = '';\nvar ron = /^on/;\n\nfor (eventname in global) {\n  if (ron.test(eventname)) {\n    eventmap.push(eventname.slice(2));\n  }\n}\n\nmodule.exports = eventmap;\n","\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n  try {\n    var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n    return  'cat' === p.type && 'bar' === p.detail.foo;\n  } catch (e) {\n  }\n  return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n  var e = document.createEvent('CustomEvent');\n  if (params) {\n    e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n  } else {\n    e.initCustomEvent(type, false, false, void 0);\n  }\n  return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n  var e = document.createEventObject();\n  e.type = type;\n  if (params) {\n    e.bubbles = Boolean(params.bubbles);\n    e.cancelable = Boolean(params.cancelable);\n    e.detail = params.detail;\n  } else {\n    e.bubbles = false;\n    e.cancelable = false;\n    e.detail = void 0;\n  }\n  return e;\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var si = typeof setImmediate === 'function', tick;\nif (si) {\n  tick = function (fn) { setImmediate(fn); };\n} else {\n  tick = function (fn) { setTimeout(fn, 0); };\n}\n\nmodule.exports = tick;","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};","import { schedule, cancel } from '@ember/runloop';\nimport type { EmberRunTimer } from '@ember/runloop/types';\nimport { getOrCreate as _getOrCreate } from './singleton.ts';\n\nfunction getOrCreate<T>(key: string, construct: () => T): T {\n  return _getOrCreate(`concurrency-helpers.${key}`, construct);\n}\n\ninterface iFrameState {\n  nextFrame: number | null;\n  currentFrameClock: number;\n  nextFrameWaiters: { promise: Promise<any>; resolve: () => void }[];\n}\n\nexport const frameState = getOrCreate(\n  'frameState',\n  () =>\n    ({\n      nextFrame: null,\n      nextFrameWaiters: [],\n      // rAF guarantees that callbacks within the same frame will see the\n      // same clock. We stash it here so that arbitrary code can easily ask\n      // \"did I already do that this frame?\" without needing to thread the\n      // clock values around.\n      currentFrameClock: -Infinity,\n    }) as iFrameState,\n);\n\nconst cancellation = getOrCreate<\n  WeakMap<Promise<any>, (p: Promise<any>) => void>\n>('cancellation', () => new WeakMap());\n\nexport function registerCancellation(\n  promise: Promise<any>,\n  handler: (p: Promise<any>) => void,\n) {\n  cancellation.set(promise, handler);\n}\n\nexport function fireCancellation(promise: Promise<any>) {\n  let fn = cancellation.get(promise);\n  if (fn) {\n    fn(promise);\n  }\n}\n\n// This is a cancelable way to requestAnimationFrame that's designed\n// to resolve via the microtask queue (like real spec-compliant\n// Promises are supposed to). This lets us use rAF within\n// ember-concurrency correctly. RSVP promises within Ember do not\n// resolve on the microtask queue, because Ember schedules them inside\n// backburner.\nexport function rAF() {\n  if (!frameState.nextFrame) {\n    frameState.nextFrame = requestAnimationFrame(rAFDidFire);\n  }\n  let resolve;\n  let promise = new Promise((r) => {\n    resolve = r;\n  });\n  frameState.nextFrameWaiters.push({\n    resolve: resolve as any as () => void,\n    promise,\n  });\n  registerCancellation(promise, removeWaiter);\n  return promise;\n}\n\nfunction rAFDidFire(clock: number) {\n  frameState.nextFrame = null;\n  frameState.currentFrameClock = clock;\n  let waiters = frameState.nextFrameWaiters;\n  frameState.nextFrameWaiters = [];\n  for (const waiter of waiters) {\n    waiter.resolve();\n  }\n}\n\nfunction removeWaiter(promise: Promise<any>) {\n  let pair = frameState.nextFrameWaiters.find(\n    (pair) => pair.promise === promise,\n  );\n  if (pair) {\n    let index = frameState.nextFrameWaiters.indexOf(pair);\n    if (index > -1) {\n      frameState.nextFrameWaiters.splice(index, 1);\n    }\n  }\n}\n\nexport function microwait(): Promise<void> {\n  return new Promise((resolve) => resolve());\n}\n\nexport function wait(ms = 0): Promise<void> {\n  if (clock.now === originalClock) {\n    let ticket: number;\n    let promise = new Promise<void>((resolve) => {\n      ticket = window.setTimeout(resolve, ms);\n    });\n    registerCancellation(promise, () => {\n      clearTimeout(ticket);\n    });\n    return promise;\n  } else {\n    let canceled = false;\n    let started = clock.now();\n    let promise = new Promise<void>((resolve) => {\n      function checkIt() {\n        if (!canceled) {\n          if (clock.now() - started > ms) {\n            resolve();\n          }\n          rAF().then(checkIt);\n        }\n      }\n      checkIt();\n    });\n    registerCancellation(promise, () => {\n      canceled = true;\n    });\n    return promise;\n  }\n}\n\nexport function afterRender() {\n  let ticket: EmberRunTimer;\n  let promise = new Promise<void>((resolve) => {\n    ticket = schedule('afterRender', () => resolve());\n  });\n  registerCancellation(promise, () => {\n    cancel(ticket);\n  });\n  return promise;\n}\n\n// This provides a unified place to hook into time control for testing.\nexport let clock = getOrCreate('clock', () => ({\n  now() {\n    return new Date().getTime();\n  },\n}));\n\nconst originalClock = getOrCreate('originalClock', () => clock.now);\n\nexport function allSettled(promises: Promise<any>[]) {\n  return Promise.all(\n    promises.map((p) => {\n      if (p) {\n        return p.catch(() => null);\n      }\n      return;\n    }),\n  );\n}\n","/*\n  This module is intended to encapsulate all the known places where\n  ember-animated depends on non-public Ember APIs.\n\n  See also tests/helpers/ember-testing-internals.js, which does the\n  same thing but for code that is only needed in the test environment.\n\n */\nimport { get } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport Ember from 'ember';\nimport type Component from '@ember/component';\n\nconst { getViewBounds } = Ember.ViewUtils as unknown as {\n  getViewBounds(view: Component): { firstNode: Node; lastNode: Node };\n};\n\nexport function componentNodes(view: Component) {\n  let bounds = getViewBounds(view);\n  return {\n    firstNode: bounds.firstNode,\n    lastNode: bounds.lastNode,\n  };\n}\n\nexport function keyForArray(\n  keyPath: string | undefined | null,\n): (item: unknown, index: number) => string {\n  switch (keyPath) {\n    case '@index':\n      return index;\n    case '@identity':\n    case undefined:\n    case null:\n      return identity;\n    default:\n      return (item: unknown) => get(item as any, keyPath);\n  }\n}\n\nfunction index(_item: unknown, index: number) {\n  return String(index);\n}\n\nfunction identity(item: unknown) {\n  switch (typeof item) {\n    case 'string':\n    case 'number':\n      return String(item);\n    default:\n      return guidFor(item);\n  }\n}\n","import { join, scheduleOnce } from '@ember/runloop';\nimport { addObserver } from '@ember/object/observers';\nimport { computed, set } from '@ember/object';\nimport Ember from 'ember';\nimport { DEBUG } from '@glimmer/env';\nimport { spawn, current, stop, logErrors } from './scheduler.ts';\nimport { microwait } from './concurrency-helpers.ts';\nimport { getOrCreate as _getOrCreate } from './singleton.ts';\n\nfunction getOrCreate<T>(key: string, construct: () => T): T {\n  return _getOrCreate(`ember-scheduler.${key}`, construct);\n}\n\ntype HostObject = Record<string, any>;\n\nexport function task(taskFn: (...args: any[]) => Generator) {\n  let tp = _computed(function (this: HostObject, propertyName: string) {\n    return new Task(this, taskFn, tp, propertyName);\n  }) as unknown as TaskProperty;\n\n  Object.setPrototypeOf(tp, TaskProperty.prototype);\n  return tp as ((proto: any, key: string) => any) & TaskProperty;\n}\n\nfunction _computed(fn: (this: HostObject, propertyName: string) => Task) {\n  let cp = function (proto: HostObject, key: string) {\n    if ((cp as any).setup !== undefined) {\n      (cp as any).setup(proto, key);\n    }\n    // eslint-disable-next-line prefer-rest-params\n    return (computed(fn) as any)(...arguments);\n  };\n  (Ember as any)._setClassicDecorator(cp);\n  return cp;\n}\n\nlet handlerCounter = 0;\n\nlet BaseTaskProperty: { new (): HostObject };\n\nBaseTaskProperty = class {};\n\ntype BufferPolicy = (task: Task, priv: TaskPrivate) => Promise<void> | void;\n\nexport class TaskProperty extends BaseTaskProperty {\n  _bufferPolicy: BufferPolicy | undefined;\n  private _observes: string[] | undefined;\n\n  restartable() {\n    this._bufferPolicy = cancelAllButLast;\n    return this;\n  }\n\n  drop() {\n    this._bufferPolicy = drop;\n    return this;\n  }\n\n  observes(...deps: string[]) {\n    this._observes = deps;\n    return this;\n  }\n\n  setup(proto: HostObject, taskName: string) {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore: depending on the ember version we may or may not have a super\n    // method.\n    if (super.setup) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      super.setup(...arguments); // eslint-disable-line prefer-rest-params\n    }\n    if (this._observes) {\n      let handlerName = `_ember_animated_handler_${handlerCounter++}`;\n      (proto as any)[handlerName] = function () {\n        let task = this[taskName];\n        scheduleOnce('actions', task, '_safePerform');\n      };\n      for (let i = 0; i < this._observes.length; ++i) {\n        let name = this._observes[i];\n        (addObserver as any)(proto, name, null, handlerName);\n      }\n    }\n  }\n}\n\ninterface TaskPrivate {\n  context: HostObject;\n  implementation: (...args: unknown[]) => Generator;\n  instances: Promise<void>[];\n  taskProperty: TaskProperty;\n  name: string;\n}\n\nlet priv = getOrCreate<WeakMap<Task, TaskPrivate>>('priv', () => new WeakMap());\n\nfunction getPriv(task: Task): TaskPrivate {\n  return priv.get(task)!;\n}\n\nexport class Task {\n  concurrency = 0;\n  isRunning = false;\n\n  constructor(\n    context: any,\n    implementation: TaskPrivate['implementation'],\n    taskProperty: TaskProperty,\n    name: string,\n  ) {\n    priv.set(this, {\n      context,\n      implementation,\n      instances: [],\n      taskProperty,\n      name,\n    });\n  }\n  perform(...args: unknown[]) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let self = this;\n    let privSelf = getPriv(this);\n    let context = privSelf.context;\n    let implementation = privSelf.implementation;\n    let policy = privSelf.taskProperty._bufferPolicy;\n    if ((context as any).isDestroyed) {\n      throw new Error(\n        `Tried to perform task ${privSelf.name} on an already destroyed object`,\n      );\n    }\n    cleanupOnDestroy(context, this);\n    return spawn(function* () {\n      if (DEBUG) {\n        logErrors((error) => {\n          microwait().then(() => {\n            throw error;\n          });\n        });\n      }\n\n      try {\n        self._addInstance(current()!);\n        if (policy) {\n          let maybeWait = policy(self, privSelf);\n          if (maybeWait) {\n            yield maybeWait;\n          }\n        }\n        let finalValue = yield* withRunLoop(\n          implementation.call(context, ...args),\n        );\n        return finalValue;\n      } finally {\n        join(() => {\n          self._removeInstance(current()!);\n        });\n      }\n    });\n  }\n  cancelAll() {\n    getPriv(this).instances.forEach((i) => stop(i));\n  }\n  _addInstance(i: Promise<void>) {\n    getPriv(this).instances.push(i);\n    set(this, 'isRunning', true);\n    set(this, 'concurrency', this.concurrency + 1);\n  }\n  _removeInstance(i: Promise<void>) {\n    let instances = getPriv(this).instances;\n    instances.splice(instances.indexOf(i), 1);\n    set(this, 'concurrency', this.concurrency - 1);\n    set(this, 'isRunning', this.concurrency > 0);\n  }\n  _safePerform() {\n    let { context } = getPriv(this);\n    if (!(context as any).isDestroyed) {\n      this.perform();\n    }\n  }\n}\n\n// cribbed from machty's ember-concurrency\nfunction cleanupOnDestroy(\n  owner: {\n    willDestroy?: ((...args: any[]) => void) & {\n      __ember_processes_destroyers__?: (() => void)[];\n    };\n  },\n  object: { cancelAll(): void },\n) {\n  if (!owner.willDestroy) {\n    // we're running in non Ember object (possibly in a test mock)\n    return;\n  }\n\n  if (!owner.willDestroy.__ember_processes_destroyers__) {\n    let oldWillDestroy = owner.willDestroy;\n    let disposers: (() => void)[] = [];\n\n    owner.willDestroy = function () {\n      for (const disposer of disposers) {\n        disposer();\n      }\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      oldWillDestroy.apply(owner, arguments); // eslint-disable-line prefer-rest-params\n    };\n    owner.willDestroy.__ember_processes_destroyers__ = disposers;\n  }\n\n  owner.willDestroy.__ember_processes_destroyers__.push(() => {\n    try {\n      object.cancelAll();\n    } catch (err) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      if (err.message !== 'TaskCancelation') {\n        throw err;\n      }\n    }\n  });\n}\n\nfunction cancelAllButLast(_task: Task, privTask: TaskPrivate) {\n  const instances = privTask.instances;\n  for (const instance of instances.slice(0, -1)) {\n    stop(instance);\n  }\n}\n\nfunction drop(_task: Task, privTask: TaskPrivate) {\n  let instances = privTask.instances;\n  for (let i = 1; i < instances.length; i++) {\n    stop(instances[i]!);\n  }\n}\n\nfunction* withRunLoop(generator: Generator): Generator {\n  let state!: IteratorResult<any>;\n  let threw: Error | undefined;\n  let nextValue: any;\n  let fulfilled = true;\n  while (true) {\n    join(() => {\n      try {\n        if (fulfilled) {\n          state = generator.next(nextValue);\n        } else {\n          state = generator.throw(nextValue);\n        }\n      } catch (err) {\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        threw = err;\n      }\n    });\n\n    if (threw) {\n      throw threw;\n    }\n\n    if (state.done) {\n      return state.value;\n    }\n\n    try {\n      nextValue = yield state.value;\n      fulfilled = true;\n    } catch (err) {\n      nextValue = err;\n      fulfilled = false;\n    }\n  }\n}\n\nexport function timeout(ms: number) {\n  return new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n","import { rAF } from './concurrency-helpers.ts';\nimport { getOrCreate } from './singleton.ts';\n\nconst bridges = getOrCreate('motion-bridges', () => new WeakMap());\n\nexport function continueMotions(\n  oldElement: Element,\n  newElement: Element,\n): void {\n  bridges.set(newElement, oldElement);\n  rAF().then(() => {\n    if (bridges.get(newElement) === oldElement) {\n      bridges.delete(newElement);\n    }\n  });\n}\n\nexport function continuedFromElement(newElement: Element): Element | undefined {\n  return bridges.get(newElement);\n}\n","export default function partition<T>(\n  iterator: Iterable<T>,\n  predicate: (item: T) => boolean,\n): [T[], T[]] {\n  let truthy = [];\n  let falsy = [];\n  for (let item of iterator) {\n    if (predicate(item)) {\n      truthy.push(item);\n    } else {\n      falsy.push(item);\n    }\n  }\n  return [truthy, falsy];\n}\n","/*\n\nAPI\n===\n\n  spawn: GenFn -> CancelablePromise\n\n    starts a new microroutine, which will run independently until it\n    finishes or is canceled.\n\n  spawnChild: GenFn -> CancelablePromise\n\n    starts a new microroutine linked to the current\n    microroutine. Throws if you're not in a current\n    microroutine.\n\n    \"Linked\" means that if the caller is canceled, the new\n    microroutine is also canceled. The inverse is not true: if the new\n    microroutine is canceled, the caller is not canceled.\n\n    `cancel(caller)` causes children to be canceled regardless of what\n    state caller is in. For example, even if caller has finished, any\n    children that haven't already finished will still be canceled.\n\n  stop: CancelablePromise -> null\n\n    cancel the microroutine represented by this promise.\n\n  current: () -> CancelablePromise\n\n    return the promise representing the currently executing\n    microroutine, or null if there is none. This exists because\n    spawning happens synchronously, meaning it begins running before\n    spawn returns, meaning there's no other way to get an early handle\n    on yourself.\n\n\n*/\n\nimport {\n  registerCancellation,\n  fireCancellation,\n} from './concurrency-helpers.ts';\nimport { getOrCreate as _getOrCreate } from './singleton.ts';\n\nfunction getOrCreate<T>(key: string, construct: () => T): T {\n  return _getOrCreate(`scheduler.${key}`, construct);\n}\n\n// TODO: specialize the Generator types here so you can only yield promises and\n// get back the promise's resolved type.\nexport function spawn(genFn: () => Generator) {\n  let m = new MicroRoutine(genFn, false);\n  return m.promise;\n}\n\nexport function spawnChild(genFn: () => Generator) {\n  let m = new MicroRoutine(genFn, true);\n  return m.promise;\n}\n\nexport function stop(microRoutinePromise: Promise<any>) {\n  if (microRoutinePromise === current()) {\n    let e = new Error('TaskCancelation');\n    e.message = 'TaskCancelation';\n    throw e;\n  }\n  let microRoutine = microRoutines.get(microRoutinePromise);\n  if (microRoutine) {\n    microRoutine.stop();\n  }\n}\n\nexport function logErrors(fn: (err: Error) => void) {\n  ensureCurrent('logErrors').errorLogger = fn;\n}\n\nexport function current() {\n  let cur = getCurrent();\n  if (cur) {\n    return cur.promise;\n  }\n  return;\n}\n\nexport async function childrenSettled() {\n  return Promise.all(\n    ensureCurrent('childrenSettled').linked.map((child) =>\n      child.promise.catch(() => null),\n    ),\n  );\n}\n\ninterface TaskCancelationError extends Error {\n  message: string;\n}\n\nfunction isTaskCancelationError(x: unknown) {\n  return (x as TaskCancelationError).message === 'TaskCancelation';\n}\n\ninterface StackEntry {\n  microroutine: MicroRoutine | undefined;\n  throw: Error | undefined;\n}\nlet withCurrent: (routine: MicroRoutine, fn: () => void) => void;\nlet getCurrent: () => MicroRoutine | undefined;\nlet onStack: (routine: MicroRoutine) => StackEntry | undefined;\n{\n  interface routinesState {\n    cur: MicroRoutine | undefined;\n    prior: StackEntry[];\n  }\n\n  const routines = getOrCreate(\n    'routines',\n    () =>\n      ({\n        cur: undefined,\n        prior: [],\n      }) as routinesState,\n  );\n\n  // let cur: MicroRoutine | undefined;\n  // let prior: StackEntry[] = [];\n  withCurrent = function (routine, fn) {\n    routines.prior.unshift({ microroutine: routines.cur, throw: undefined });\n    routines.cur = routine;\n    try {\n      return fn();\n    } finally {\n      let restore = routines.prior.shift()!;\n      routines.cur = restore.microroutine;\n      if (restore.throw) {\n        /*\n           Why is this not really \"unsafe\"? Because if the\n           microroutine that we are restoring has been cancelled, the\n           cancellation takes precedence over any exception that it\n           was going to see, so it's OK that this throw will silently\n           stomp a throw coming out of the above block.\n        */\n        throw restore.throw; // eslint-disable-line no-unsafe-finally\n      }\n    }\n  };\n  getCurrent = function () {\n    return routines.cur;\n  };\n  onStack = function (microroutine) {\n    return routines.prior.find((entry) => entry.microroutine === microroutine);\n  };\n}\n\nfunction ensureCurrent(label: string) {\n  let cur = getCurrent();\n  if (!cur) {\n    throw new Error(`${label}: only works inside a running microroutine`);\n  }\n  return cur;\n}\n\nlet loggedErrors = getOrCreate<WeakSet<Error>>(\n  'loggedErrors',\n  () => new WeakSet(),\n);\nlet microRoutines = getOrCreate<WeakMap<Promise<any>, MicroRoutine>>(\n  'microRoutines',\n  () => new WeakMap(),\n);\n\nclass MicroRoutine {\n  private generator: Generator;\n  private resolve!: (value?: any) => void;\n  private reject!: (reason?: any) => void;\n  private stopped = false;\n  private state!: IteratorResult<any>;\n\n  linked: MicroRoutine[] = [];\n  errorLogger: ((e: Error) => void) | undefined;\n  promise: Promise<any>;\n\n  constructor(genFn: () => Generator, linkToParent: boolean) {\n    this.generator = genFn();\n    this.promise = new Promise((res, rej) => {\n      this.resolve = res;\n      this.reject = rej;\n    });\n    microRoutines.set(this.promise, this);\n    registerCancellation(this.promise, this.stop.bind(this));\n\n    if (linkToParent) {\n      let parent = ensureCurrent('spawnChild');\n      parent.linked.push(this);\n      this.errorLogger = parent.errorLogger;\n    }\n    this.wake('fulfilled', undefined);\n  }\n  wake(state: 'fulfilled' | 'rejected', value: any) {\n    if (this.stopped) {\n      return;\n    }\n    withCurrent(this, () => {\n      try {\n        if (state === 'fulfilled') {\n          this.state = this.generator.next(value);\n        } else {\n          // All native generators have a throw, Typescript doesn't seem to know\n          // that because it defines Generator as just an Iterator.\n          this.state = this.generator.throw!(value);\n        }\n        if (this.state.done) {\n          this.resolve(this.state.value);\n        } else {\n          Promise.resolve(this.state.value).then(\n            (value) => this.wake('fulfilled', value),\n            (reason) => this.wake('rejected', reason),\n          );\n        }\n      } catch (err) {\n        this.state = {\n          done: true,\n          value: undefined,\n        };\n        this.linked.forEach((microRoutine) => {\n          microRoutine.stop();\n        });\n        if (!isTaskCancelationError(err)) {\n          this.reject(err);\n          if (this.errorLogger) {\n            if (!loggedErrors.has(err as TaskCancelationError)) {\n              loggedErrors.add(err as TaskCancelationError);\n              this.errorLogger.call(null, err as TaskCancelationError);\n            }\n          }\n        }\n      }\n    });\n  }\n  stop() {\n    this.stopped = true;\n    if (this.state && isPromise(this.state.value)) {\n      fireCancellation(this.state.value);\n    }\n    this.linked.forEach((microRoutine) => {\n      microRoutine.stop();\n    });\n    let e = new Error('TaskCancelation');\n    e.message = 'TaskCancelation';\n    if (getCurrent() === this) {\n      // when a microroutine calls stop() resulting it stopping\n      // itself, the stop call throws TaskCancellation to unwind its\n      // own stack.\n      throw e;\n    }\n    let s = onStack(this);\n    if (s) {\n      // because of the synchronous nature of spawn() and stop(), it's\n      // possible that the microroutine we're stopping is already on\n      // the current call stack above us. If we tried to\n      // cancelGenerator it would give a \"generator already running\"\n      // exception. Instead we save the exception to throw when\n      // control returns back to the stopped microroutine.\n      s.throw = e;\n    } else {\n      // the stopped microroutine is not on our call stack, so we can\n      // throw an exception into it to unwind the generator's stack.\n      withCurrent(this, () => cancelGenerator(this.generator));\n    }\n  }\n}\n\nfunction cancelGenerator(generator: Generator) {\n  let e = new Error('TaskCancelation');\n  e.message = 'TaskCancelation';\n  try {\n    generator.throw!(e);\n  } catch (err) {\n    if (!isTaskCancelationError(err)) {\n      throw err;\n    }\n  }\n}\n\nfunction isPromise(thing: any): thing is Promise<any> {\n  return thing && typeof thing.then === 'function';\n}\n\n// composes several promise-returning functions into a single\n// promise-returning function that executes all in parallel.\n//\n// This allows point-free style, like:\n//   sprites.forEach(parallel(move, scale)).\n//\nexport function parallel(...functions: ((...args: any[]) => unknown)[]) {\n  return function (...args: any[]) {\n    // eslint-disable-next-line prefer-spread\n    return Promise.all(functions.map((f) => f.apply(null, args)));\n  };\n}\n\n// composes several promise-returning functions into a single\n// promise-returning function that executes all in series.\n//\n// This allows point-free style, like:\n//   sprites.forEach(serial(scale, move)).\n//\nexport function serial(...functions: ((...args: any[]) => unknown)[]) {\n  return function (...args: any[]) {\n    return spawnChild(function* () {\n      for (let fn of functions) {\n        // eslint-disable-next-line prefer-spread\n        yield fn.apply(null, args);\n      }\n    });\n  };\n}\n","declare global {\n  // eslint-disable-next-line no-var\n  var emberAnimatedSingleton: {\n    [key: symbol]: unknown;\n  };\n}\n\nwindow.emberAnimatedSingleton = window.emberAnimatedSingleton || {};\n\n// As this is v2 addon, imported via webpack and extensively used in tests,\n// this module may end up being used by app and tests entry points.\n// In such scenario, module(s) would be evaluated twice hence we need\n// a state that can be persisted via context across ES module invocations.\n// For some background info see https://github.com/webpack/webpack/issues/7556\n//\n// We should remove this file and getOrCreate usage once ember-auto-import gets fixed,\n// so we would have single entry point for app and tests.\n// Link to track status: https://github.com/ef4/ember-auto-import/issues/503\nexport function getOrCreate<T>(key: string, construct: () => T): T {\n  const symbol = Symbol.for(key);\n\n  // check if the global object has this symbol\n  // add it if it does not have the symbol, yet\n  // ------------------------------------------\n\n  let globalSymbols = Object.getOwnPropertySymbols(\n    window.emberAnimatedSingleton,\n  );\n  let hasFoo = globalSymbols.indexOf(symbol) > -1;\n\n  if (!hasFoo) {\n    window.emberAnimatedSingleton[symbol] = construct();\n  }\n\n  return window.emberAnimatedSingleton[symbol] as T;\n}\n","/*\n  Our Transform type is always respresented relative to\n  `transform-origin: 0px 0px`. This is different from the browser's\n  own `transform` property, which will vary based on the present value\n  of `transform-origin`, and which defaults to `50% 50%`. I am\n  standardizing on zero because it disentangles our coordinate system\n  from the size of the element, which can vary over time.\n\n  Conceptually, each of our Transforms is a 2d affine transformation\n  representd as a 3x3 matrix:\n\n      a c tx\n      b d ty\n      0 0  1\n*/\n\nexport default class Transform {\n  constructor(\n    readonly a: number,\n    readonly b: number,\n    readonly c: number,\n    readonly d: number,\n    readonly tx: number,\n    readonly ty: number,\n  ) {}\n\n  serialize(): string {\n    return `matrix(${this.a}, ${this.b}, ${this.c}, ${this.d}, ${this.tx}, ${this.ty})`;\n  }\n\n  // See the comment below on `const identity`.\n  isIdentity(): boolean {\n    return (\n      this === identity ||\n      (this.a === 1 &&\n        this.b === 0 &&\n        this.c === 0 &&\n        this.d === 1 &&\n        this.tx === 0 &&\n        this.ty === 0)\n    );\n  }\n\n  mult(other: Transform): Transform {\n    // This is deliberately not isIdentity(). I'm optimizing for the\n    // case where there was no preexisting transform at all.\n    if (this === identity) {\n      return other;\n    }\n    if (other === identity) {\n      return this;\n    }\n    return new Transform(\n      this.a * other.a + this.c * other.b,\n      this.b * other.a + this.d * other.b,\n      this.a * other.c + this.c * other.d,\n      this.b * other.c + this.d * other.d,\n      this.a * other.tx + this.c * other.ty + this.tx,\n      this.b * other.tx + this.d * other.ty + this.ty,\n    );\n  }\n}\n\n// WARNING: this constant matrix exists as an optimization. But not\n// every no-op transform triple-equals this value. If you apply two\n// transforms that cancel each other out, you will get an identity\n// matrix but it will not triple-equal this one. And that is OK: we\n// use the triple-equality as an optimization only, not for\n// correctness.\n//\n// The optimization should be worthwhile because the majority of\n// things start out with no preexisting Transform, which we can\n// represent as `identity`, which will make identity.mult(something) a\n// no-op, etc.\nexport const identity = new Transform(1, 0, 0, 1, 0, 0);\n\nconst matrixPattern = /matrix\\((.*)\\)/;\n\nfunction parseTransform(matrixString: string): Transform {\n  const match = matrixPattern.exec(matrixString);\n  if (!match || !match[1]) {\n    return identity;\n  }\n  const [a, b, c, d, tx, ty] = match[1].split(',').map(parseFloat);\n  return new Transform(\n    a as number,\n    b as number,\n    c as number,\n    d as number,\n    tx as number,\n    ty as number,\n  );\n}\n\nfunction parseOrigin(originString: string): [number, number] {\n  return originString.split(' ').map(parseFloat) as [number, number];\n}\n\n/**\n  Returns a Transform instance representing the cumulative CSS\n  transform of this element and all its ancestors.\n\n  @function cumulativeTransform\n  @hide\n  @param {HTMLElement} elt\n  @return {Transform}\n*/\nexport function cumulativeTransform(elt: HTMLElement) {\n  let accumulator = null;\n  let current: HTMLElement | null = elt;\n  while (current && current.nodeType === 1) {\n    let transform = ownTransform(current);\n    if (transform !== identity && !transform.isIdentity()) {\n      if (accumulator) {\n        accumulator = transform.mult(accumulator);\n      } else {\n        accumulator = transform;\n      }\n    }\n    current = current.parentElement;\n  }\n  return accumulator || identity;\n}\n\n/**\n  Returns a Transform instance representing the CSS transform of this\n  element.\n\n * @function ownTransform\n * @param {HTMLElement} elt\n * @return {Transform} instance representing this element's css transform property.\n */\nexport function ownTransform(elt: HTMLElement): Transform {\n  let eltStyles = window.getComputedStyle(elt);\n  let t =\n    eltStyles.transform !== '' ? eltStyles.transform! : elt.style.transform!;\n  if (t === 'none') {\n    // This constant value is an optimization, and we rely on that in\n    // cumulativeTransform\n    return identity;\n  }\n  let matrix = parseTransform(t);\n  if (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1) {\n    // If there is any rotation, scaling, or skew we need to do it within the context of transform-origin.\n    let origin =\n      eltStyles.getPropertyValue('transform-origin') !== ''\n        ? eltStyles.getPropertyValue('transform-origin')!\n        : elt.style.getPropertyValue('transform-origin')!;\n    let [originX, originY] = parseOrigin(origin);\n    if (originX === 0 && originY === 0) {\n      // transform origin is at 0,0 so it will have no effect, so we're done.\n      return matrix;\n    }\n\n    return new Transform(1, 0, 0, 1, originX, originY)\n      .mult(matrix)\n      .mult(new Transform(1, 0, 0, 1, -originX, -originY));\n  } else {\n    // This case is an optimization for when there is only translation.\n    return matrix;\n  }\n}\n","// takes an element, the element's computed style, and either 'top' or\n// 'bottom'.\n//\n// returns list of Element for increasingly deep descendants\n// of the given element whose top (or bottom) margin collapses with\n// the given element's.\nexport function collapsedChildren(\n  element: Element,\n  cs: CSSStyleDeclaration,\n  which: 'top' | 'bottom',\n  children: Element[] = [],\n) {\n  // margin collapse only happens if we have no border or padding\n  if (\n    isBlock(cs) &&\n    cs.getPropertyValue(`border-${which}-width`) === '0px' &&\n    cs.getPropertyValue(`padding-${which}`) === '0px'\n  ) {\n    let block;\n    if (which === 'top') {\n      block = firstChildBlock(element);\n    } else {\n      block = lastChildBlock(element);\n    }\n    if (block) {\n      let [child, childCS] = block;\n      children.push(child);\n      collapsedChildren(child, childCS, which, children);\n    }\n  }\n  return children;\n}\n\nfunction firstChildBlock(\n  element: Element,\n): [Element, CSSStyleDeclaration] | undefined {\n  for (let i = 0; i < element.children.length; i++) {\n    let child = element.children[i];\n    let childCS = getComputedStyle(child as Element);\n    if (childCS.clear !== 'none') {\n      // an intervening block with clearance prevents margin collapse\n      return;\n    }\n    if (isBlock(childCS)) {\n      return [child as Element, childCS];\n    }\n  }\n  return;\n}\n\nfunction lastChildBlock(\n  element: Element,\n): [Element, CSSStyleDeclaration] | undefined {\n  for (let i = element.children.length - 1; i >= 0; i--) {\n    let child = element.children[i];\n    let childCS = getComputedStyle(child as Element);\n    if (childCS.clear !== 'none') {\n      // an intervening block with clearance prevents margin collapse\n      return;\n    }\n    if (isBlock(childCS)) {\n      return [child as Element, childCS];\n    }\n  }\n  return;\n}\n\nfunction isBlock(cs: CSSStyleDeclaration) {\n  return (\n    cs.display === 'block' &&\n    (cs.position === 'static' || cs.position === 'relative') &&\n    cs.getPropertyValue('float') === 'none' &&\n    cs.overflow === 'visible'\n  );\n}\n","// Polyfill DOMRect\n// It's not available on Edge or IE11\n\nfunction nonEnumerable(target: any, propertyKey: string) {\n  let descriptor = Object.getOwnPropertyDescriptor(target, propertyKey) || {};\n  if (descriptor.enumerable != false) {\n    descriptor.enumerable = false;\n    Object.defineProperty(target, propertyKey, descriptor);\n  }\n}\n\nclass DOMRectPolyfill implements DOMRect {\n  static fromRect(\n    rect: { x?: number; y?: number; width?: number; height?: number } = {},\n  ) {\n    return new DOMRect(\n      rect.x ?? 0,\n      rect.y ?? 0,\n      rect.width ?? 0,\n      rect.height ?? 0,\n    );\n  }\n\n  constructor(x?: number, y?: number, width?: number, height?: number) {\n    if (x != null) {\n      this.x = x;\n    }\n    if (y != null) {\n      this.y = y;\n    }\n    if (width != null) {\n      this.width = width;\n    }\n    if (height != null) {\n      this.height = height;\n    }\n  }\n\n  // DOMRect's properties are all non-enumerable\n  @nonEnumerable x = 0;\n  @nonEnumerable y = 0;\n  @nonEnumerable width = 0;\n  @nonEnumerable height = 0;\n\n  get top() {\n    return this.y;\n  }\n\n  get right() {\n    return this.x + this.width;\n  }\n\n  get bottom() {\n    return this.y + this.height;\n  }\n\n  get left() {\n    return this.x;\n  }\n\n  // But it has a toJSON that does include all the properties.\n  toJSON() {\n    return {\n      x: this.x,\n      y: this.y,\n      width: this.width,\n      height: this.height,\n      top: this.top,\n      right: this.right,\n      bottom: this.bottom,\n      left: this.left,\n    };\n  }\n}\n\nif (typeof window !== 'undefined' && !window.DOMRect) {\n  (window as { DOMRect: typeof DOMRect }).DOMRect = DOMRectPolyfill;\n}\n","import '../domrect-polyfill.ts';\n\n/**\n  Shifts the coordinates of the given bounds using the provided\n  x and y axis offset.\n\n  @private\n  @function shiftedBounds\n  @hide\n  @param {Object} bounds The original bounds.\n  @param {number} dx X axis offset.\n  @param {number} dy Y axis offset.\n  @return {Object} The newly calculated bounds.\n*/\nexport function shiftedBounds(\n  bounds: DOMRect,\n  dx: number,\n  dy: number,\n): DOMRect {\n  return new DOMRect(bounds.x + dx, bounds.y + dy, bounds.width, bounds.height);\n}\n\n/**\n  Resizes the coordinates of the given bounds using the provided\n  width and height.\n\n  @private\n  @function resizedBounds\n  @hide\n  @param {Object} bounds The original bounds.\n  @param {number} width The target width.\n  @param {number} height The target height.\n  @return {Object} The newly calculated bounds.\n*/\nexport function resizedBounds(\n  bounds: DOMRect,\n  width: number,\n  height: number,\n): DOMRect {\n  return new DOMRect(bounds.x, bounds.y, width, height);\n}\n\n/**\n  Shifts the coordinates of the given bounds so they are relative to\n  the offset.\n\n  @private\n  @function relativeBounds\n  @hide\n  @param {Object} bounds The original bounds.\n  @param {Object} offset The offset.\n  @return {Object} The newly calculated bounds.\n*/\nexport function relativeBounds(\n  bounds: DOMRect,\n  offset: { left: number; top: number },\n): DOMRect {\n  return shiftedBounds(bounds, -offset.left, -offset.top);\n}\n\n/**\n  An empty bounds object.\n\n  @private\n  @hide\n  @constant {Object} emptyBounds\n*/\nexport const emptyBounds = Object.freeze(new DOMRect(0, 0, 0, 0));\n","import { warn } from '@ember/debug';\nimport Ember from 'ember';\nimport Transform, { ownTransform, cumulativeTransform } from './transform.ts';\nimport { continueMotions } from './motion-bridge.ts';\nimport { collapsedChildren } from './margin-collapse.ts';\nimport {\n  shiftedBounds,\n  relativeBounds,\n  resizedBounds,\n  emptyBounds,\n} from './bounds.ts';\nimport type Child from './child.ts';\nimport { getOrCreate } from './singleton.ts';\n\nconst inFlight = getOrCreate('sprite', () => new WeakMap());\n\n/**\n  A Sprite is our handle to a DOM element that we want to animate.\n\n  It manages locking and unlocking the element (which means taking it\n  in and out of static document flow so it's readily animatable).\n\n  It tracks the sprite's current transform.\n\n  It tracks the sprite's initial and/or final bounds, as measured\n  from the actual pre- and/or post-animation DOM.\n\n  @class Sprite\n*/\nexport default class Sprite {\n  static offsetParentStartingAt(element: Element) {\n    let parent = getEffectiveOffsetParent(element as HTMLElement);\n    if (!parent) {\n      parent = document.getElementsByTagName('body')[0] as Element;\n    }\n    return new this(parent, true, null, null);\n  }\n\n  static offsetParentEndingAt(element: Element) {\n    let parent = getEffectiveOffsetParent(element as HTMLElement);\n    if (!parent) {\n      parent = document.getElementsByTagName('body')[0] as Element;\n    }\n    return new this(parent, false, null, null);\n  }\n\n  static positionedStartingAt(element: Element, offsetSprite: Sprite) {\n    if (!offsetSprite.initialBounds) {\n      throw new Error('offset sprite must have initial bounds');\n    }\n    return new this(element, true, 'position', offsetSprite);\n  }\n\n  static positionedEndingAt(element: Element, offsetSprite: Sprite) {\n    if (!offsetSprite.finalBounds) {\n      throw new Error('offset sprite must have final bounds');\n    }\n    return new this(element, false, 'position', offsetSprite);\n  }\n\n  static sizedStartingAt(element: Element) {\n    return new this(element, true, 'size', null);\n  }\n\n  static sizedEndingAt(element: Element) {\n    let sprite = new this(element, false, 'size', null);\n    sprite._initialBounds = emptyBounds;\n    sprite._initialComputedStyle = sprite._finalComputedStyle;\n    sprite._initialPosition = sprite._finalPosition;\n    sprite._originalInitialBounds = sprite._initialBounds;\n    sprite._initialCumulativeTransform = sprite._finalCumulativeTransform;\n    return sprite;\n  }\n\n  private __element!: Element;\n\n  owner: Child | null = null;\n\n  private _transform: Transform | null = null;\n  private _cumulativeTransform: Transform | null = null;\n  private _offsetSprite: Sprite | null;\n  private _lockedToInitialPosition: boolean;\n  private _finalComputedStyle: CopiedCSS | null = null;\n  private _finalBounds: DOMRect | null = null;\n  private _originalFinalBounds: DOMRect | null = null;\n  private _finalPosition: SpritePosition | null = null;\n  private _finalCumulativeTransform: Transform | null = null;\n  private _initialComputedStyle: CopiedCSS | null = null;\n  private _initialBounds: DOMRect | null = null;\n  private _originalInitialBounds: DOMRect | null = null;\n  private _initialPosition: SpritePosition | null = null;\n  private _initialCumulativeTransform: Transform | null = null;\n  private _revealed: unknown;\n  private _imposedStyle: { [property: string]: string } | null = null;\n  private _styleCache: { [property: string]: string } | null = null;\n  private _collapsingChildren: Element[] | null = null;\n  private _lockMode: 'position' | 'size' | null;\n  private _inInitialPosition = false;\n\n  constructor(\n    element: Element,\n    inInitialPosition: boolean,\n    lockMode: 'position' | 'size' | null,\n    offsetSprite: Sprite | null,\n  ) {\n    this.element = element;\n    this._offsetSprite = offsetSprite;\n\n    this._lockedToInitialPosition = inInitialPosition;\n    if (inInitialPosition) {\n      this.measureInitialBounds();\n    } else {\n      this.measureFinalBounds();\n    }\n\n    let predecessor = inFlight.get(element);\n    if (predecessor && lockMode) {\n      // When we finish, we want to be able to set the style back to\n      // whatever it was before any Sprites starting locking things,\n      // so inheriting the state from our predecessor is important for\n      // correctness.\n      this._styleCache = predecessor._styleCache;\n      this._revealed = predecessor._revealed;\n      this._imposedStyle = predecessor._imposedStyle;\n      this._collapsingChildren = predecessor._collapsingChildren;\n      this._lockMode = predecessor._lockMode;\n      if (lockMode !== predecessor._lockMode) {\n        throw new Error(\n          `probable bug in ember-animated: can't change lock mode from ${predecessor._lockMode} to ${lockMode}`,\n        );\n      }\n    } else {\n      this._styleCache = null;\n      this._revealed = null;\n      this._lockMode = lockMode;\n      if (lockMode === 'position') {\n        this._rememberPosition();\n        this._cacheOriginalStyles();\n      } else if (this._lockMode === 'size') {\n        this._rememberSize();\n        this._cacheOriginalStyles();\n      }\n    }\n\n    if (Ember.testing) {\n      Object.seal(this);\n    }\n  }\n\n  /**\n    A DOMRect representing the place where this sprite will start the\n    transition.\n\n    ```js\n    sprite.initialBounds;\n    // { top: 0, bottom: 230, left: 0, right: 256, width: 256 }\n    ```\n\n    Not every sprite has initialBounds (a newly inserted\n    sprite will not -- it will only have finalBounds).\n\n    The position is measured *relative* to our offsetParent, if we\n    have one. Most of the time we want motions to act in relative\n    terms, so that if we're inside another animator things still work\n    out correctly.\n\n    You can manipulate initialBounds using methods like startAtPixel.\n\n    Motions should look at initialBounds and finalBounds to decide\n    what to do.\n\n    @accessor initialBounds\n    @type {DOMRect}\n  */\n  get initialBounds() {\n    return this._initialBounds;\n  }\n\n  /**\n    Like initialBounds, but relative to the screen, not the offset\n    parent. Most of the time you *don't* want this one, because your\n    motion will be more robust to ancestor motion if you do\n    everything in relative terms.\n\n    @accessor absoluteInitialBounds\n    @type {DOMRect}\n  */\n  get absoluteInitialBounds(): DOMRect {\n    if (this._offsetSprite) {\n      return shiftedBounds(\n        this._initialBounds!,\n        this._offsetSprite.initialBounds!.left,\n        this._offsetSprite.initialBounds!.top,\n      );\n    } else {\n      return this._initialBounds!;\n    }\n  }\n\n  /**\n    A DOMRect representing the place where this sprite will end the\n    transition. Not every sprite has finalBounds (a sprite that is\n    about to be destroyed will not -- it will only have\n    initialBounds).\n\n    The position is measured *relative* to our offsetParent, if we\n    have one. Most of the time we want motions to act in relative\n    terms, so that if we're inside another animator things still work\n    out correctly.\n\n    You can manipulate finalBounds using methods like endAtPixel.\n    @accessor finalBounds\n    @type {DOMRect}\n  */\n  get finalBounds() {\n    return this._finalBounds;\n  }\n\n  /**\n    Like initialBounds, but relative to the screen, not the offset\n    parent. Most of the time you *don't* want this one, because your\n    motion will be more robust to ancestor motion if you do\n    everything in relative terms.\n\n    @accessor absoluteFinalBounds\n    @type {DOMRect}\n  */\n  get absoluteFinalBounds() {\n    if (this._offsetSprite) {\n      return shiftedBounds(\n        this._finalBounds!,\n        this._offsetSprite.finalBounds!.left,\n        this._offsetSprite.finalBounds!.top,\n      );\n    } else {\n      return this._finalBounds;\n    }\n  }\n\n  /**\n    A snapshot of the sprite's computed style at the start of the\n    transition. We don't copy every possible property, see\n    CopiedCSS.\n\n    This is powered by getComputedStyle, so the property names and\n    values will follow those semantics.\n\n    Not every sprite will have an initialComputedStyle\n    (`insertedSprites` do not).\n\n    @accessor initialComputedStyle\n    @type {CSSStyleDeclaration}\n  */\n  get initialComputedStyle() {\n    return this._initialComputedStyle;\n  }\n\n  /**\n    A snapshot of the sprite's computed style at the end of the\n    transition. We don't copy every possible property, see\n    CopiedCSS.\n\n    This is powered by getComputedStyle, so the property names and\n    values will follow those semantics.\n\n    Not every sprite will have a finalComputedStyle\n    (`removedSprites` do not).\n\n    @accessor finalComputedStyle\n    @type {CSSStyleDeclaration}\n  */\n  get finalComputedStyle() {\n    return this._finalComputedStyle;\n  }\n\n  /**\n    Returns the attribute value from the initial position object with the\n    given `name`.\n\n    _This is mostly intended for use with SVG, where you can say things\n    like `getInitialDimension('x')`._\n\n    @method getInitialDimension\n    @param {string} name The desired attribute name.\n    @return {number|string}\n  */\n  getInitialDimension<K extends keyof SpritePosition>(\n    name: K,\n  ): SpritePosition[K] {\n    return this._initialPosition![name];\n  }\n\n  /**\n    Returns the attribute value from the final position object with the\n    given `name`.\n\n    _This is mostly intended for use with SVG, where you can say things\n    like `getFinalDimension('x')`._\n\n    @method getFinalDimension\n    @param {string} name The desired attribute name.\n    @return {number|string}\n  */\n  getFinalDimension<K extends keyof SpritePosition>(\n    name: K,\n  ): SpritePosition[K] {\n    return this._finalPosition![name];\n  }\n\n  /**\n    Analogous to initialBounds, this is a snapshot of the cumulative\n    effect of all transforms on this sprite at the start of\n    animation.\n\n    @method initialCumulativeTransform\n    @return {Transform}\n  */\n  get initialCumulativeTransform() {\n    return this._initialCumulativeTransform;\n  }\n\n  /**\n    Analogous to finalBounds, this is a snapshot of the cumulative\n    effect of all transforms on this sprite at the end of animation.\n\n    @method finalCumulativeTransform\n    @return {Transform}\n  */\n  get finalCumulativeTransform() {\n    return this._finalCumulativeTransform;\n  }\n\n  /**\n    Some things methods (like startAtSprite, startAtPixel, etc) can\n    set or alter the initialBounds. This gives you access to the\n    original value (which may be undefined if this sprite didn't have\n    any initial bounds, which is the case for newly inserted\n    sprites).\n\n    @method originalInitialBounds\n    @return {DOMRect}\n  */\n  get originalInitialBounds() {\n    return this._originalInitialBounds;\n  }\n\n  /**\n    Some things (like endAtSprite) can alter the finalBounds. This\n    gives you access to the original value (which may be undefined if\n    the sprite didn't have any final bounds, which is the case for\n    removedSprites).\n\n    @method originalFinalBounds\n    @return {DOMRect}\n  */\n  get originalFinalBounds() {\n    return this._originalFinalBounds;\n  }\n\n  // TODO: this is used only in tests, and it's a temptation toward DOM thrashing. Remove it.\n  getCurrentBounds(): DOMRect | undefined {\n    if (this._offsetSprite) {\n      return relativeBounds(\n        this.element.getBoundingClientRect() as DOMRect,\n        this._offsetSprite.getCurrentBounds()!,\n      );\n    } else {\n      return this.element.getBoundingClientRect() as DOMRect;\n    }\n  }\n\n  /**\n    Returns the current position of the element as an object.\n\n    _This deliberately only tracks inline styles, because it's only\n    important when the user is manipulating inline styles._\n\n    @private\n    @hide\n    @method _getCurrentPosition\n    @return {Object}\n  */\n  _getCurrentPosition(): SpritePosition {\n    let { element } = this;\n    if (isSVG(element)) {\n      let position: SVGPosition = {\n        x: getSVGLength(element, 'x'),\n        y: getSVGLength(element, 'y'),\n        cx: getSVGLength(element, 'cx'),\n        cy: getSVGLength(element, 'cy'),\n        r: getSVGLength(element, 'r'),\n        width: getSVGLength(element, 'width'),\n        height: getSVGLength(element, 'height'),\n        transform: element.getAttribute('transform'),\n      };\n      return position;\n    } else {\n      let style = (this.element as HTMLElement).style;\n      let position: HTMLPosition = {\n        top: style.top,\n        left: style.left,\n        bottom: style.bottom,\n        right: style.right,\n        transform: style.transform,\n        classList: Array.from(this.element.classList),\n      };\n      return position;\n    }\n  }\n\n  /**\n    Sets the position of the element.\n\n    @private\n    @method _reapplyPosition\n    @hide\n    @param {Object} pos The position to apply.\n    @return {void}\n  */\n  _reapplyPosition(pos: SpritePosition) {\n    if (!pos) {\n      return;\n    }\n    if (isSVG(this.element)) {\n      let { element } = this;\n      setSVGLength(element, 'x', pos);\n      setSVGLength(element, 'y', pos);\n      setSVGLength(element, 'cx', pos);\n      setSVGLength(element, 'cy', pos);\n      setSVGLength(element, 'r', pos);\n      setSVGLength(element, 'width', pos);\n      setSVGLength(element, 'height', pos);\n      setAttribute(element, 'transform', pos);\n    } else {\n      let style = (this.element as HTMLElement).style;\n      let p = pos as HTMLPosition;\n      style.top = p.top ?? '';\n      style.left = p.left ?? '';\n      style.right = p.right ?? '';\n      style.bottom = p.bottom ?? '';\n      style.transform = p.transform ?? '';\n\n      for (let cls of p.classList) {\n        this.element.classList.add(cls);\n      }\n      for (let cls of Array.from(this.element.classList)) {\n        if (!p.classList.includes(cls)) {\n          this.element.classList.remove(cls);\n        }\n      }\n    }\n  }\n\n  measureInitialBounds() {\n    if (this._initialBounds) {\n      throw new Error('Sprite already has initial bounds');\n    }\n    this._inInitialPosition = true;\n    if (this._offsetSprite) {\n      this._initialBounds = relativeBounds(\n        this.element.getBoundingClientRect() as DOMRect,\n        this._offsetSprite.initialBounds!,\n      );\n    } else {\n      this._initialBounds = this.element.getBoundingClientRect() as DOMRect;\n    }\n    this._initialComputedStyle = copyComputedStyle(this.element);\n    this._initialPosition = this._getCurrentPosition();\n    this._originalInitialBounds = this._initialBounds;\n    this._initialCumulativeTransform = cumulativeTransform(\n      this.element as HTMLElement,\n    );\n  }\n\n  assertHasInitialBounds(): asserts this is SpriteWithInitialBounds {\n    if (!this._initialBounds) {\n      throw new Error(`sprite does not have initialBounds`);\n    }\n  }\n\n  assertHasOwner(): asserts this is SpriteWithOwner {\n    if (!this.owner) {\n      throw new Error(`sprite does not have owner`);\n    }\n  }\n\n  measureFinalBounds() {\n    if (this._finalBounds) {\n      throw new Error('Sprite already has final bounds');\n    }\n    this._inInitialPosition = false;\n    if (this._offsetSprite) {\n      this._finalBounds = relativeBounds(\n        this.element.getBoundingClientRect() as DOMRect,\n        this._offsetSprite.finalBounds!,\n      );\n    } else {\n      this._finalBounds = this.element.getBoundingClientRect() as DOMRect;\n    }\n    this._finalComputedStyle = copyComputedStyle(this.element);\n    this._finalPosition = this._getCurrentPosition();\n    this._originalFinalBounds = this._finalBounds;\n    this._finalCumulativeTransform = cumulativeTransform(\n      this.element as HTMLElement,\n    );\n  }\n\n  assertHasFinalBounds(): asserts this is SpriteWithFinalBounds {\n    if (!this._finalBounds) {\n      throw new Error(`sprite does not have finalBounds`);\n    }\n  }\n\n  /**\n    Returns the difference between two sprites, represented as x and y\n    coordinates.\n\n    _`this.difference('initialBounds', other, 'finalBounds')` is\n    interpreted as \"the difference between this sprite's initial bounds\n    and the other sprite's final bounds\"._\n\n    _It works this way because each sprite has its own local coordinate\n    system._\n\n    @method difference\n    @param {string} which The current sprite's comparison attribute.\n    @param {Sprite} otherSprite The other sprite.\n    @param {string} otherWhich The other sprite's comparison attribute.\n    @return {Object}\n  */\n  difference(\n    which: 'initialBounds' | 'finalBounds',\n    otherSprite: Sprite,\n    otherWhich: 'initialBounds' | 'finalBounds',\n  ) {\n    let x = this[which]!.left;\n    let y = this[which]!.top;\n    if (this._offsetSprite) {\n      x += this._offsetSprite[which]!.left;\n      y += this._offsetSprite[which]!.top;\n    }\n    if (otherSprite._offsetSprite) {\n      x -= otherSprite._offsetSprite[otherWhich]!.left;\n      y -= otherSprite._offsetSprite[otherWhich]!.top;\n    }\n    return {\n      dx: x - otherSprite[otherWhich]!.left,\n      dy: y - otherSprite[otherWhich]!.top,\n    };\n  }\n\n  set element(value) {\n    this.__element = value;\n  }\n\n  get element() {\n    return this.__element;\n  }\n\n  /**\n    Returns the sprite's current transform, with appropriate caching\n    so that you don't trigger reflows.\n\n    @accessor transform\n    @type {Transform}\n  */\n  get transform() {\n    if (!this._transform) {\n      this._transform = ownTransform(this.element as HTMLElement);\n    }\n    return this._transform;\n  }\n\n  /**\n    This is different from `this.transform` because it's the product\n    of our own transform and all ancestor transforms. It's what you\n    need if you want to understand how many real screen pixels there\n    are to every local pixel in the sprite.\n\n    @accessor cumulativeTransform\n    @type {Object}\n  */\n  get cumulativeTransform() {\n    if (!this._cumulativeTransform) {\n      this._cumulativeTransform = cumulativeTransform(\n        this.element as HTMLElement,\n      );\n    }\n    return this._cumulativeTransform;\n  }\n\n  /**\n    Returns wether the sprite is revealed or not.\n\n    @accessor revealed\n    @type {boolean}\n  */\n  get revealed() {\n    if (this._revealed == null) {\n      this._revealed = !this.__element.classList.contains(\n        'ember-animated-hidden',\n      );\n    }\n    return this._revealed;\n  }\n\n  _rememberSize() {\n    // at the point in time when this runs, we always have either initial or\n    // final measurements, but not both. So this will successfully pick the one\n    // we do have, which applies to what we are currently measuring.\n    let transform = (this.initialCumulativeTransform ||\n      this.finalCumulativeTransform)!;\n    let bounds = (this.initialBounds || this.finalBounds)!;\n\n    this._imposedStyle = {};\n\n    if (isSVG(this.element)) {\n      // we're not doing anything to lock the width & height\n      // SVGElements. it seems rare that we'd need to, since svg\n      // layout tends to be pretty literal.\n      return;\n    }\n\n    // If the user has already provided an inline width or height,\n    // they are taking the wheel and we have to trust them to do\n    // something reasonable.\n    //\n    // I'm not using getComputedStyle here because its width and\n    // height are fairly useless for our purposes (we want \"computed\"\n    // values, but for backward compat with CSS 2.0, getComputedStyle\n    // actually returns the \"used\" values for width and height).\n\n    if ((this.element as HTMLElement).style.width === '') {\n      this._imposedStyle['width'] = `${bounds.width / transform.a}px`;\n      // TODO: do a more sophisticated size measurement so we don't\n      // need to impose border-box. If we're only imposing width OR\n      // height and we weren't originally in border box, we can get an\n      // incorrect change in the non-imposed dimension.\n      this._imposedStyle['box-sizing'] = 'border-box';\n    }\n    if ((this.element as HTMLElement).style.height === '') {\n      this._imposedStyle['height'] = `${bounds.height / transform.d}px`;\n      this._imposedStyle['box-sizing'] = 'border-box';\n    }\n  }\n\n  _lazyOffsets(computedStyle: CSSStyleDeclaration) {\n    let offsets: undefined | { top: number; left: number };\n    return () => {\n      if (!offsets) {\n        offsets = findOffsets(\n          this.element,\n          computedStyle,\n          this.transform,\n          this._offsetSprite!,\n        );\n      }\n      return offsets;\n    };\n  }\n\n  _rememberPosition() {\n    let computedStyle = getComputedStyle(this.element);\n    let style = (this.element as HTMLElement).style;\n    let offsets = this._lazyOffsets(computedStyle);\n    let tx = 0;\n    let ty = 0;\n\n    this._rememberSize();\n\n    if (isSVG(this.element)) {\n      // svg elements are effectively always already absolutely\n      // positioned by their own coordinates.\n      return;\n    }\n\n    if (\n      computedStyle.position !== 'absolute' &&\n      computedStyle.position !== 'fixed'\n    ) {\n      this._imposedStyle!['position'] = 'absolute';\n    }\n\n    if (style.top === '' && style.bottom === '') {\n      // The user had no preexisting inline vertical positioning, so we take over.\n      this._imposedStyle!['top'] = `${offsets().top}px`;\n      this._imposedStyle!['margin-top'] = '0px';\n    } else if (this._imposedStyle!['position']) {\n      // the user has inline styles for controlling vertical position,\n      // but the element was not absolutely positioned, so we apply an\n      // offseting transform.\n      ty = offsets().top - parseFloat(computedStyle.top || '0');\n    }\n\n    if (style.left === '' && style.bottom === '') {\n      // The user had no preexisting inline horizontal positioning, so we take over.\n      this._imposedStyle!['left'] = `${offsets().left}px`;\n      this._imposedStyle!['margin-left'] = `0px`;\n    } else if (this._imposedStyle!['position']) {\n      // the user has inline styles for controlling vertical position,\n      // but the element was not absolutely positioned, so we apply an\n      // offseting transform.\n      tx = offsets().left - parseFloat(computedStyle.left || '0');\n    }\n    if (tx || ty) {\n      this._transform = this.transform.mult(new Transform(1, 0, 0, 1, tx, ty));\n      this._imposedStyle!['transform'] = this.transform.serialize();\n    }\n\n    this._collapsingChildren = collapsedChildren(\n      this.element,\n      computedStyle,\n      'top',\n    );\n  }\n\n  _cacheOriginalStyles() {\n    let cache: Sprite['_styleCache'] = {};\n    let style = (this.element as HTMLElement).style;\n    Object.keys(this._imposedStyle!).forEach((property) => {\n      (cache as any)[property] = (style as any)[property];\n    });\n    this._styleCache = cache;\n  }\n\n  lock() {\n    // In case the user has caused our inline-style-driven position\n    // to drift, we put it back.\n    this._reapplyPosition(this._initialPosition!);\n\n    this.applyStyles(this._imposedStyle!);\n    this._handleMarginCollapse();\n    inFlight.set(this.element, this);\n    this._inInitialPosition = this._lockedToInitialPosition;\n  }\n\n  unlock() {\n    warn(\n      `Probable bug in ember-animated: an interrupted sprite tried to unlock itself.\n       This is usually caused by a direct child of an animated component also being an\n       animated component. To fix it, wrap the child in another DOM element.\n       https://github.com/ember-animation/ember-animated/issues/178`,\n      this.stillInFlight(),\n      { id: 'ember-animated-sprite-unlock' },\n    );\n    inFlight.delete(this.element);\n    let cache = this._styleCache!;\n    Object.keys(cache).forEach((property) => {\n      setStyle(\n        this.element as HTMLElement,\n        property,\n        cache[property] as string,\n      );\n    });\n\n    // In case the user has caused our inline-style-driven position\n    // to drift, we put it back.\n    this._reapplyPosition(this._finalPosition!);\n\n    this._clearMarginCollapse();\n  }\n\n  /**\n    This is your general purpose hook for changing CSS properties of\n    the sprite's element. Use this when there's not a more specific\n    method like `translate()`, `scale()`, `hide()`, or `reveal()`.\n\n    ```js\n    sprite.applyStyles({\n      'opacity': '0',\n      'z-index': '1'\n    });\n    ```\n\n    Nothing you do to the sprite will persist after the transition is\n    finished – we clean things up when it ends.\n\n    @method applyStyles\n    @param {Object} styles The styles to apply to the sprite.\n    @return {void}\n  */\n  applyStyles<T extends { [P in keyof T]: string }>(styles: T) {\n    if (!this._lockMode) {\n      throw new Error(\"can't apply styles to non-lockable sprite\");\n    }\n    if (styles !== this._imposedStyle) {\n      Object.keys(styles).forEach((property) => {\n        if (this._imposedStyle![property] == null) {\n          this._styleCache![property] = (\n            this.element as HTMLElement\n          ).style.getPropertyValue(property);\n        }\n        this._imposedStyle![property] = styles[property as keyof T];\n      });\n    }\n    Object.keys(styles).forEach((property) => {\n      let val = styles[property as keyof T];\n      if (typeof val !== 'string') {\n        throw new Error(\n          `Sprite#applyStyles only accepts string values. Convert any numeric values to strings (with appropriate units) before calling. You passed ${property}=${val}`,\n        );\n      } else {\n        setStyle(\n          this.element as HTMLElement,\n          property,\n          styles[property as keyof T],\n        );\n      }\n    });\n  }\n\n  stillInFlight() {\n    return inFlight.get(this.element) === this;\n  }\n\n  /**\n    Hides the sprite using CSS visibility property.\n\n    @method hide\n    @return {void}\n  */\n  hide() {\n    this._revealed = false;\n    this.__element.classList.add('ember-animated-hidden');\n  }\n\n  /**\n    Reveals the sprite using CSS visibility property.\n\n    _Newly inserted sprites start hidden, and are revealed when you\n    start animating them. You can manually reveal them with this if\n    you want them to appear right away and you're not animating them._\n\n    @method reveal\n    @return {void}\n  */\n  reveal() {\n    if (!this.revealed) {\n      this._revealed = true;\n      this.__element.classList.remove('ember-animated-hidden');\n    }\n  }\n\n  /**\n    Manages the application of the `ember-animated-none` CSS class on\n    the element.\n\n    When the flag is truthy, the class is removed and the element is\n    therefore visible.\n\n    When the flag is falsy, the class is applied and the element is\n    therefore hidden.\n\n    @method display\n    @param {boolean} flag\n    @return {void}\n  */\n  display(flag: boolean) {\n    if (flag) {\n      this.__element.classList.remove('ember-animated-none');\n    } else {\n      this.__element.classList.add('ember-animated-none');\n    }\n  }\n\n  /**\n    Translates the sprite by the given number of screen pixels.\n\n    _Disregards any pre-existing transforms._\n\n    @method translate\n    @param {number} dx The number of screen pixels on the x axis.\n    @param {number} dy The number of screen pixels on the y axis.\n    @return {void}\n  */\n  translate(dx: number, dy: number) {\n    let t = this.transform;\n    t = t.mult(new Transform(1, 0, 0, 1, dx / t.a, dy / t.d));\n    this._transform = t;\n    this.applyStyles({\n      transform: t.serialize(),\n      'transform-origin': '0 0',\n    });\n  }\n\n  /**\n    Adjusts the sprite's scale by the given scaling factors.\n\n    @method scale\n    @param {number} scaleX The scaling factor to apply to the x axis.\n    @param {number} scaleY The scaling factor to apply to the y axis.\n    @return {void}\n  */\n  scale(scaleX: number, scaleY: number) {\n    let t = this.transform.mult(new Transform(scaleX, 0, 0, scaleY, 0, 0));\n    this._transform = t;\n    this.applyStyles({\n      transform: t.serialize(),\n      'transform-origin': '0 0',\n    });\n  }\n\n  /**\n    Adjusts the sprite so it will still be in the same visual position\n    despite being moved into a new offset parent.\n\n    @method rehome\n    @param {Sprite} newOffsetSprite\n    @return {void}\n  */\n  rehome(newOffsetSprite: Sprite) {\n    let screenBounds = this.absoluteInitialBounds;\n    let newRelativeBounds = shiftedBounds(\n      screenBounds,\n      -newOffsetSprite.initialBounds!.left,\n      -newOffsetSprite.initialBounds!.top,\n    );\n\n    let initialAmbientTransform = this._offsetSprite!.cumulativeTransform;\n    let finalAmbientTransform = newOffsetSprite.cumulativeTransform;\n\n    let t = this.transform;\n    t = t.mult(\n      new Transform(\n        initialAmbientTransform.a / finalAmbientTransform.a,\n        0,\n        0,\n        initialAmbientTransform.d / finalAmbientTransform.d,\n        (newRelativeBounds.left - t.tx) / t.a,\n        (newRelativeBounds.top - t.ty) / t.d,\n      ),\n    );\n    this._transform = t;\n    this._imposedStyle!['transform'] = t.serialize();\n    this._imposedStyle!['transform-origin'] = '0 0';\n    this._imposedStyle!['top'] = `0px`;\n    this._imposedStyle!['left'] = `0px`;\n    this._offsetSprite = newOffsetSprite;\n    this._initialBounds = newRelativeBounds;\n    this._inInitialPosition = true;\n  }\n\n  _handleMarginCollapse() {\n    if (this._collapsingChildren) {\n      const children = this._collapsingChildren;\n      for (const child of children) {\n        child.classList.add('ember-animated-top-collapse');\n      }\n    }\n  }\n  _clearMarginCollapse() {\n    if (this._collapsingChildren) {\n      const children = this._collapsingChildren;\n      for (const child of children) {\n        child.classList.remove('ember-animated-top-collapse');\n      }\n    }\n  }\n\n  /**\n    Sets the sprite's `initialBounds` relative to the provided `otherSprite`.\n\n    @method startAtSprite\n    @param {Sprite} otherSprite\n    @return {void}\n  */\n  startAtSprite(otherSprite: Sprite) {\n    continueMotions(otherSprite.element, this.element);\n    let diff = this.difference('finalBounds', otherSprite, 'initialBounds');\n    this.startTranslatedBy(-diff.dx, -diff.dy);\n    this._initialBounds = resizedBounds(\n      this._initialBounds!,\n      otherSprite.initialBounds!.width,\n      otherSprite.initialBounds!.height,\n    );\n    this._initialComputedStyle = otherSprite.initialComputedStyle;\n    this._initialCumulativeTransform = otherSprite.initialCumulativeTransform;\n  }\n\n  /**\n    Sets the sprite's `initialBounds` using the provided\n    x and y coordinates.\n\n    ```js\n    sprite.startAtPixel({ x: 0, y: 0 });\n    ```\n\n    @method startAtPixel\n    @param {Object} point The x and y coordinates.\n    @return {void}\n  */\n  startAtPixel({ x, y }: { x?: number; y?: number }) {\n    let dx = 0;\n    let dy = 0;\n    if (x != null) {\n      dx = x - this._finalBounds!.left;\n      if (this._offsetSprite) {\n        dx -= this._offsetSprite.finalBounds!.left;\n      }\n    }\n    if (y != null) {\n      dy = y - this._finalBounds!.top;\n      if (this._offsetSprite) {\n        dy -= this._offsetSprite.finalBounds!.top;\n      }\n    }\n    this.startTranslatedBy(dx, dy);\n  }\n\n  /**\n    Sets the sprite's `initialBounds` relative to its `finalBounds`.\n\n    @method startTranslatedBy\n    @param {number} dx\n    @param {number} dy\n    @return {void}\n  */\n  startTranslatedBy(dx: number, dy: number) {\n    let priorInitialBounds = this._initialBounds!;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (this._offsetSprite) {\n      offsetX =\n        this._offsetSprite.finalBounds!.left -\n        this._offsetSprite.initialBounds!.left;\n      offsetY =\n        this._offsetSprite.finalBounds!.top -\n        this._offsetSprite.initialBounds!.top;\n    }\n    this._initialBounds = shiftedBounds(\n      this._finalBounds!,\n      dx - offsetX,\n      dy - offsetY,\n    );\n\n    if (this._inInitialPosition) {\n      // we were already moved into our priorInitiaBounds position, so we need to compensate\n      this.translate(\n        this._initialBounds.left - priorInitialBounds.left,\n        this._initialBounds.top - priorInitialBounds.top,\n      );\n    } else {\n      this.translate(\n        this._initialBounds.left - this._finalBounds!.left,\n        this._initialBounds.top - this._finalBounds!.top,\n      );\n      this._inInitialPosition = true;\n    }\n  }\n\n  /**\n    Moves the sprite to its final position (`finalBounds`).\n\n    @method moveToFinalPosition\n    @return {void}\n  */\n  moveToFinalPosition() {\n    if (this._inInitialPosition) {\n      let initial = this._initialBounds!;\n      let final = this._finalBounds!;\n      let dx = final.left - initial.left;\n      let dy = final.top - initial.top;\n      this.translate(dx, dy);\n      this._inInitialPosition = false;\n    }\n  }\n\n  /**\n    Sets the sprite's `finalBounds` using the provided `otherSprite`.\n\n    @method endAtSprite\n    @param {Sprite} otherSprite\n    @return {void}\n  */\n  endAtSprite(otherSprite: Sprite) {\n    let diff = otherSprite.difference('finalBounds', this, 'initialBounds');\n    this.endTranslatedBy(diff.dx, diff.dy);\n    this._finalBounds = resizedBounds(\n      this._finalBounds!,\n      otherSprite.finalBounds!.width,\n      otherSprite.finalBounds!.height,\n    );\n    this._finalComputedStyle = otherSprite.finalComputedStyle;\n    this._finalCumulativeTransform = otherSprite.finalCumulativeTransform;\n  }\n\n  /**\n    Sets the sprite's `finalBounds` using the provided point `{ x, y }`.\n\n    ```js\n    sprite.endAtPixel({ x: window.innerWidth });\n    ```\n\n    @method endAtPixel\n    @param {Object} point The x and y coordinates.\n    @return {void}\n  */\n  endAtPixel({ x, y }: { x?: number; y?: number }) {\n    let dx = 0;\n    let dy = 0;\n    if (x != null) {\n      dx = x - this._initialBounds!.left;\n      if (this._offsetSprite) {\n        dx -= this._offsetSprite.initialBounds!.left;\n      }\n    }\n    if (y != null) {\n      dy = y - this._initialBounds!.top;\n      if (this._offsetSprite) {\n        dy -= this._offsetSprite.initialBounds!.top;\n      }\n    }\n    this.endTranslatedBy(dx, dy);\n  }\n\n  /**\n    Sets the sprite's `finalBounds` using its `initialBounds` and\n    the provided x and y axis offset.\n\n    @method endTranslatedBy\n    @param {number} dx The x axis offset.\n    @param {number} dy The y axis offset.\n    @return {void}\n  */\n  endTranslatedBy(dx: number, dy: number) {\n    this._finalBounds = shiftedBounds(this._initialBounds!, dx, dy);\n  }\n\n  /**\n    Sets this sprite's `finalBounds` so that its position relative\n    to the `otherSprite` remains constant through the transition.\n\n    @method endRelativeTo\n    @param {Sprite} otherSprite Note: must have initial and final bounds\n    @return {void}\n  */\n  endRelativeTo(otherSprite: Sprite) {\n    this.endTranslatedBy(\n      otherSprite.finalBounds!.left - otherSprite.initialBounds!.left,\n      otherSprite.finalBounds!.top - otherSprite.initialBounds!.top,\n    );\n  }\n}\n\nfunction findOffsets(\n  element: Element,\n  computedStyle: CSSStyleDeclaration,\n  transform: Transform,\n  offsetSprite: Sprite,\n) {\n  let ownBounds = element.getBoundingClientRect();\n  let left = ownBounds.left;\n  let top = ownBounds.top;\n  let effectiveOffsetParent;\n\n  if (computedStyle.position !== 'fixed') {\n    effectiveOffsetParent = offsetSprite.element;\n  }\n\n  if (effectiveOffsetParent) {\n    if (effectiveOffsetParent.tagName === 'BODY') {\n      // reading scroll off body doesn't reliably work cross browser\n      left += window.scrollX;\n      top += window.scrollY;\n    } else {\n      left += effectiveOffsetParent.scrollLeft;\n      top += effectiveOffsetParent.scrollTop;\n    }\n\n    let eopComputedStyle = getComputedStyle(effectiveOffsetParent);\n    if (\n      eopComputedStyle.position !== 'static' ||\n      eopComputedStyle.transform !== 'none'\n    ) {\n      let eopBounds = effectiveOffsetParent.getBoundingClientRect();\n      left -=\n        eopBounds.left + parseFloat(eopComputedStyle.borderLeftWidth || '0');\n      top -= eopBounds.top + parseFloat(eopComputedStyle.borderTopWidth || '0');\n\n      let eopTransform = cumulativeTransform(\n        effectiveOffsetParent as HTMLElement,\n      );\n      left /= eopTransform.a;\n      top /= eopTransform.d;\n    }\n  }\n\n  left -= transform.tx;\n  top -= transform.ty;\n\n  return { top, left };\n}\n\nconst SVGNamespace = 'http://www.w3.org/2000/svg';\n\n// We have special handling for SVG elements inside SVG documents. An\n// <svg> tag itself whose parent is not SVG doesn't need special\n// handling -- it participates in normal HTML positioning.\nfunction isSVG(element: Element): element is SVGElement {\n  return (\n    element.namespaceURI === SVGNamespace &&\n    (element.parentElement || false) &&\n    element.parentElement.namespaceURI === SVGNamespace\n  );\n}\n\n// This distinguishes HTML vs SVG rules, and for HTML it compensates\n// for the fact that browsers are inconsistent in the way they report\n// offsetLeft & offsetTop for elements with a transformed ancestor\n// beneath their nearest positioned ancestor.\nfunction getEffectiveOffsetParent(element: HTMLElement) {\n  if (isSVG(element)) {\n    let cursor = element.parentElement;\n    while (cursor && cursor.namespaceURI === SVGNamespace) {\n      if (cursor.tagName === 'svg') {\n        return cursor;\n      }\n      cursor = cursor.parentElement;\n    }\n    // we should never fall through here -- presumably we must find an\n    // <svg> tag somewhere before we exit the svg namespace. But if we\n    // do fall through, I'll just let this continue into the regular\n    // HTML rules below.\n  }\n\n  let offsetParent = element.offsetParent;\n  let cursor = element.parentElement;\n  while (cursor && offsetParent && cursor !== offsetParent) {\n    let styles = window.getComputedStyle(cursor);\n    let t = styles.transform !== '' ? styles.transform : cursor.style.transform;\n    if (t !== 'none') {\n      return cursor;\n    }\n    cursor = cursor.parentElement;\n  }\n  return offsetParent;\n}\n\nfunction getSVGLength(element: SVGElement, property: string): number | null {\n  if ((element as any)[property]) {\n    return (element as any)[property].baseVal.value;\n  }\n  return null;\n}\n\nfunction setSVGLength(element: SVGElement, property: string, values: any) {\n  if (typeof (values as any)[property] === 'number') {\n    (element as any)[property].baseVal.value = (values as any)[property];\n  }\n}\n\nfunction setAttribute(element: Element, attrName: string, values: any) {\n  let value = values[attrName];\n  if (value) {\n    element.setAttribute(attrName as string, value);\n  } else {\n    element.removeAttribute(attrName as string);\n  }\n}\n\nfunction setStyle(element: HTMLElement, property: string, value: string) {\n  if (/[A-Z]/.test(property)) {\n    throw new Error(\n      `applyStyles expects all CSS property names to be formatted as in CSS. Not camelcased. You passed ${property}.`,\n    );\n  }\n  element.style.setProperty(property, value);\n}\n\n// getComputedStyle returns a *live* CSSStyleDeclaration that will\n// keep changing as the element changes. So we use this to copy off a\n// snapshot of the properties we potentially care about.\nfunction copyComputedStyle(element: Element): CopiedCSS {\n  let computed = getComputedStyle(element);\n  let output = new CopiedCSS();\n  for (let property of COPIED_CSS_PROPERTIES) {\n    output[property as keyof CopiedCSS] = computed.getPropertyValue(property);\n  }\n  return output;\n}\n\nexport class CopiedCSS {\n  'opacity': string;\n  'font-size': string;\n  'font-family': string;\n  'font-weight': string;\n  'color': string;\n  'background-color': string;\n  'border-color': string;\n  'letter-spacing': string;\n  'line-height': string;\n  'text-align': string;\n  'text-transform': string;\n  'padding': string;\n  'padding-top': string;\n  'padding-bottom': string;\n  'padding-left': string;\n  'padding-right': string;\n  'border-radius': string;\n  'border-top-left-radius': string;\n  'border-top-right-radius': string;\n  'border-bottom-left-radius': string;\n  'border-bottom-right-radius': string;\n  'box-shadow': string;\n}\n\nconst COPIED_CSS_PROPERTIES = [\n  'opacity',\n  'font-size',\n  'font-family',\n  'font-weight',\n  'color',\n  'background-color',\n  'border-color',\n  'letter-spacing',\n  'line-height',\n  'text-align',\n  'text-transform',\n  'padding',\n  'padding-top',\n  'padding-bottom',\n  'padding-left',\n  'padding-right',\n  'border-radius',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'box-shadow',\n];\n\nexport interface SVGPosition {\n  x: number | null;\n  y: number | null;\n  cx: number | null;\n  cy: number | null;\n  r: number | null;\n  width: number | null;\n  height: number | null;\n  transform: string | null;\n}\n\ninterface HTMLPosition {\n  top: string | null;\n  left: string | null;\n  bottom: string | null;\n  right: string | null;\n  transform: string;\n  classList: string[];\n}\n\n// This strange construct allows access of the alternative type's keys returning undefined values.\n// This significantly simplifies our typing efforts.\nexport type SpritePosition =\n  | (HTMLPosition &\n      Partial<\n        Record<Exclude<keyof SVGPosition, keyof HTMLPosition>, undefined>\n      >)\n  | (SVGPosition &\n      Partial<\n        Record<Exclude<keyof HTMLPosition, keyof SVGPosition>, undefined>\n      >);\n\nexport interface SpriteWithInitialBounds extends Sprite {\n  initialBounds: DOMRect;\n  initialComputedStyle: CopiedCSS;\n  initialPosition: DOMRect;\n  originalInitialBounds: DOMRect;\n  initialCumulativeTransform: Transform;\n}\n\nexport interface SpriteWithFinalBounds extends Sprite {\n  finalBounds: DOMRect;\n  finalComputedStyle: CopiedCSS;\n  finalPosition: DOMRect;\n  originalFinalBounds: DOMRect;\n  finalCumulativeTransform: Transform;\n}\n\nexport interface SpriteWithOwner extends Sprite {\n  owner: Child;\n}\n","import { childrenSettled } from './scheduler.ts';\nimport type Sprite from './sprite.ts';\nimport type { Transition } from './transition.ts';\nimport { getOrCreate } from './singleton.ts';\n\nconst spriteContext = getOrCreate('transition-context', () => new WeakMap());\n\nexport function* runToCompletion(\n  context: TransitionContext,\n  transition: Transition,\n) {\n  yield* transition(context);\n  yield childrenSettled();\n}\n\nexport default class TransitionContext {\n  static forSprite(sprite: Sprite): TransitionContext {\n    return spriteContext.get(sprite);\n  }\n\n  private _prepared: Set<Sprite> = new Set();\n\n  prepareSprite: ((sprite: Sprite) => Sprite) | undefined;\n\n  constructor(\n    private _duration: number,\n    private _insertedSprites: Sprite[],\n    private _keptSprites: Sprite[],\n    private _removedSprites: Sprite[],\n    private _sentSprites: Sprite[],\n    private _receivedSprites: Sprite[],\n    private _beacons: { [name: string]: Sprite },\n    readonly onMotionStart: (sprite: Sprite) => void,\n    readonly onMotionEnd: (sprite: Sprite) => void,\n  ) {}\n\n  // the following things are all accessors in order to make them\n  // read-only, and to let us tell which classes of sprites a user's\n  // transition is actually using.\n\n  get duration() {\n    return this._duration;\n  }\n  get insertedSprites() {\n    return this._prepareSprites(this._insertedSprites);\n  }\n  get keptSprites() {\n    return this._prepareSprites(this._keptSprites);\n  }\n  get removedSprites() {\n    return this._prepareSprites(this._removedSprites);\n  }\n  get sentSprites() {\n    return this._prepareSprites(this._sentSprites);\n  }\n  get receivedSprites() {\n    return this._prepareSprites(this._receivedSprites);\n  }\n\n  get beacons() {\n    return this._beacons;\n  }\n\n  private _prepareSprites(sprites: Sprite[]): Sprite[] {\n    // Link them up, so that users can conveniently pass sprites\n    // around to Motions without also passing the transition context.\n    sprites.forEach((sprite) => {\n      spriteContext.set(sprite, this);\n    });\n    if (!this.prepareSprite) {\n      return sprites;\n    }\n    return sprites.map((sprite) => {\n      if (!this._prepared.has(sprite)) {\n        this._prepared.add(sprite);\n        sprite = this.prepareSprite!(sprite);\n      }\n      return sprite;\n    });\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-yield-only }}\\n{{yield}}\")","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\nimport { task, type Task } from '../-private/ember-scheduler.ts';\nimport { afterRender, microwait } from '../-private/concurrency-helpers.ts';\nimport { componentNodes } from '../-private/ember-internals.ts';\nimport Sprite from '../-private/sprite.ts';\nimport type MotionService from '../services/-ea-motion.ts';\n\ninterface AnimatedBeaconSignature {\n  Args: {\n    name: string;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\n/**\n  A component that marks a region of the page that\n  can serve as a source or destination for sprites to animate to and from.\n\n  ```hbs\n  {{#animated-beacon name=\"one\"}}\n    <button {{action \"launch\"}}>Launch</button>\n  {{/animated-beacon}}\n\n  {{#animated-if showThing use=transition}}\n    <div class=\"message\" {{action \"dismiss\"}}>\n      Hello\n    </div>\n  {{/animated-if}}\n  ```\n\n  ```js\n  import Component from '@ember/component';\n  import move from 'ember-animated/motions/move';\n  import scale from 'ember-animated/motions/scale';\n\n  export default Component.extend({\n    showThing: false,\n\n    transition: function *({ insertedSprites, keptSprites, removedSprites, beacons }) {\n      for (let sprite of insertedSprites) {\n        sprite.startAtSprite(beacons.one);\n        move(sprite);\n        scale(sprite);\n      }\n\n      for (let sprite of keptSprites) {\n        move(sprite);\n      }\n\n      for (let sprite of removedSprites) {\n        sprite.endAtSprite(beacons.one);\n        move(sprite);\n        scale(sprite);\n      }\n    });\n  },\n\n    actions: {\n      launch() {\n        this.set('showThing', true);\n      },\n      dismiss() {\n        this.set('showThing', false);\n      }\n    }\n  });\n  ```\n  @class animated-beacon\n  @public\n*/\nexport default class AnimatedBeacon extends Component<AnimatedBeaconSignature> {\n  name: string | undefined;\n\n  tagName = '';\n  _inserted = false;\n\n  @service('-ea-motion')\n  motionService!: MotionService;\n\n  didInsertElement() {\n    super.didInsertElement();\n    this._inserted = true;\n    this.animationStarting = this.animationStarting.bind(this);\n    this.motionService.observeAnimations(this.animationStarting);\n  }\n\n  willDestroyElement() {\n    super.willDestroyElement();\n    this.motionService.unobserveAnimations(this.animationStarting);\n  }\n\n  animationStarting() {\n    this.participate.perform();\n  }\n\n  _firstChildElement(): HTMLElement | SVGElement | undefined {\n    if (this._inserted) {\n      let { firstNode, lastNode } = componentNodes(\n        this as unknown as Component,\n      );\n      let node: Node | null = firstNode;\n      while (node) {\n        if (node.nodeType === Node.ELEMENT_NODE) {\n          return node as HTMLElement | SVGElement;\n        }\n        if (node === lastNode) {\n          break;\n        }\n        node = node.nextSibling;\n      }\n    }\n    return undefined;\n  }\n\n  @task(function* (this: AnimatedBeacon) {\n    if (!this.name) {\n      throw new Error('Beacons must have a name.');\n    }\n\n    if (this.motionService.hasBeacon(this.name)) {\n      return;\n    }\n\n    let element = this._firstChildElement();\n    if (!element) {\n      return;\n    }\n    let offsetParent = Sprite.offsetParentStartingAt(element);\n    let sprite = Sprite.positionedStartingAt(element, offsetParent);\n\n    yield afterRender();\n    yield microwait();\n    yield* this.motionService.staticMeasurement(() => {\n      offsetParent.measureFinalBounds();\n      sprite.measureFinalBounds();\n    });\n    yield this.motionService.addBeacon.perform(this.name, sprite);\n  })\n  participate!: Task;\n}\n","import { spawnChild } from './scheduler.ts';\nimport { rAF, microwait } from './concurrency-helpers.ts';\nimport { continuedFromElement } from './motion-bridge.ts';\nimport TransitionContext from './transition-context.ts';\nimport type Sprite from './sprite.ts';\nimport { getOrCreate } from './singleton.ts';\n\nconst motions = getOrCreate<WeakMap<Element, Motion[]>>(\n  'motion',\n  () => new WeakMap(),\n);\n\nexport interface BaseOptions {\n  duration: number;\n}\n\nexport interface MotionConstructor<T extends BaseOptions = BaseOptions> {\n  new (sprite: Sprite, opts: Partial<T>): Motion<T>;\n}\n\nexport default abstract class Motion<T extends BaseOptions = BaseOptions> {\n  private _motionList: Motion[] | undefined;\n  private _inheritedMotionList: Motion[] | undefined;\n\n  constructor(\n    readonly sprite: Sprite,\n    readonly opts: Partial<T> = {},\n  ) {\n    this.sprite = sprite;\n    this.opts = opts;\n    this._setupMotionList();\n  }\n\n  // All motions should read this to decide how long to animate. It allows users\n  // to set a duration explicitly or rely on the prevailing default for the\n  // whole running transition.\n  get duration(): number {\n    if (this.opts.duration != null) {\n      return this.opts.duration;\n    }\n    return TransitionContext.forSprite(this.sprite).duration;\n  }\n\n  run() {\n    let context = TransitionContext.forSprite(this.sprite);\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let self = this;\n    return spawnChild(function* () {\n      context.onMotionStart(self.sprite);\n      try {\n        yield* self._run();\n      } finally {\n        context.onMotionEnd(self.sprite);\n      }\n    });\n  }\n\n  // --- Begin Hooks you should Implement ---\n\n  // Here you can inspect the other motions on this element that have\n  // been interrupted during this frame. You should save any state on\n  // `this` in order to influence your own animation. This hook is\n  // skipped if there were no other motions.\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  interrupted(_otherMotions: Motion[]): void {}\n\n  // Implement your animation here. It must be a generator function\n  // that yields promises (just like an ember-concurrency task, except\n  // you don't need to wrap in `task()` here and you therefore don't\n  // get the extra features provided by EC tasks.\n  *animate(): Generator<Promise<unknown>, void, unknown> {}\n\n  // --- Begin private methods ---\n\n  *_run() {\n    try {\n      let others = this._motionList!.filter((m) => m !== this);\n      if (this._inheritedMotionList) {\n        others = others.concat(this._inheritedMotionList);\n      }\n      if (others.length > 0) {\n        this.interrupted(others);\n      }\n      yield* this.animate();\n    } finally {\n      rAF().then(() => this._clearMotionList());\n    }\n  }\n\n  _setupMotionList() {\n    let element = this.sprite.element;\n    let motionList = motions.get(element);\n    if (!motionList) {\n      motions.set(element, (motionList = []));\n    }\n    this._motionList = motionList;\n    // we wait here so that if multiple motions are started\n    // simultaneously, the latter ones don't see the earlier ones as\n    // interrupted.\n    microwait().then(() => {\n      if (this._motionList) {\n        this._motionList.unshift(this);\n      }\n    });\n    let oldElement = continuedFromElement(element);\n    if (oldElement) {\n      let inheritedMotions = motions.get(oldElement);\n      if (inheritedMotions) {\n        this._inheritedMotionList = inheritedMotions;\n      }\n    }\n  }\n\n  _clearMotionList() {\n    if (this._motionList) {\n      let index = this._motionList.indexOf(this);\n      this._motionList.splice(index, 1);\n      if (this._motionList.length === 0) {\n        motions.delete(this.sprite.element);\n      }\n      this._motionList = undefined;\n    }\n  }\n}\n","export function easeInAndOut(t: number) {\n  return 0.5 - Math.cos(t * Math.PI) / 2;\n}\n\n// if we naively switch from cosine to linear for the second half, we\n// would finish too soon. This is the adjustment factor that keeps us\n// within the 0 to 1 window.\nconst adjust = 1 / 2 + 1 / Math.PI;\n\nconst cutover = 1 / (2 * adjust);\nconst b = (2 - Math.PI) / 4;\nconst m = (Math.PI / 2) * adjust;\n\nexport function easeIn(t: number) {\n  if (t < cutover) {\n    return easeInAndOut(t * adjust);\n  } else {\n    return m * t + b;\n  }\n}\n\nexport function easeOut(t: number) {\n  return 1 - easeIn(1 - t);\n}\n","import { rAF, frameState, clock } from './concurrency-helpers.ts';\nimport { easeInAndOut } from '../easings/cosine.ts';\nimport { getOrCreate } from './singleton.ts';\n\nconst currentCurves = getOrCreate<MotionCurve[]>('tween', () => []);\n\nexport interface TweenLike {\n  currentValue: number;\n  finalValue: number;\n  done: boolean;\n}\n\n/*\n  A Tween automatically recalculates on demand at most once per\n  animation frame. As long as you're using the rAF helper from\n  './concurrency-helpers', it will always be fresh. When many\n  concurrent Tweens are running over the same duration at the same\n  time, we can avoid a lot of duplicate work and keep them in sync.\n*/\n\nexport default class Tween implements TweenLike {\n  private curve: MotionCurve;\n  private diff: number;\n\n  constructor(\n    readonly initialValue: number,\n    readonly finalValue: number,\n    duration: number,\n    easing = easeInAndOut,\n  ) {\n    if (typeof easing !== 'function') {\n      throw new Error('Tried to make a Tween with an invalid easing function');\n    }\n    this.curve = MotionCurve.findOrCreate(duration, easing);\n    this.diff = finalValue - initialValue;\n  }\n  get currentValue() {\n    return this.initialValue + this.diff * this.curve.spaceProgress;\n  }\n  get done() {\n    return this.curve.done;\n  }\n  plus(otherTween: TweenLike) {\n    return new DerivedTween(\n      [this, otherTween],\n      (a: TweenLike, b: TweenLike) => a.currentValue + b.currentValue,\n    );\n  }\n}\n\nexport class DerivedTween implements TweenLike {\n  private _finalValue: number | null = null;\n  private inputs: TweenLike[];\n\n  constructor(\n    inputs: TweenLike[],\n    private combinator: (...inputs: TweenLike[]) => number,\n  ) {\n    this._finalValue = null;\n    this.inputs = inputs.map((t) => {\n      if (t.done) {\n        // If one of our inputs has already finished, we can just keep its final\n        // value around and drop the reference to the original Tween. This\n        // prevents long chains of derived tweens from growing without bound\n        // during continuous animations.\n        return new Tween(t.currentValue, t.currentValue, 0);\n      } else {\n        return t;\n      }\n    });\n  }\n  get finalValue() {\n    if (this._finalValue == null) {\n      let accum = 0;\n      for (const input of this.inputs) {\n        accum += input.finalValue;\n      }\n      this._finalValue = accum;\n    }\n    return this._finalValue;\n  }\n  get currentValue() {\n    return this.combinator(...this.inputs);\n  }\n  get done(): boolean {\n    return !this.inputs.find((t) => !t.done);\n  }\n}\n\nclass MotionCurve {\n  // we share motion curves among all concurrent motions that have the\n  // same duration that start in the same animation frame.\n  static findOrCreate(duration: number, easing: (t: number) => number) {\n    let shared = currentCurves.find(\n      (c) => c.duration === duration && c.easing === easing,\n    );\n    if (shared) {\n      return shared;\n    }\n    let created = new this(duration, easing);\n    currentCurves.push(created);\n    rAF().then(() => {\n      currentCurves.splice(currentCurves.indexOf(created), 1);\n    });\n    return created;\n  }\n\n  private startTime: number;\n  private _doneFrames = 0;\n  private _lastTick: number | undefined;\n  private _runTime: number | undefined;\n  private _timeProgress: number | undefined;\n  private _spaceProgress: number | undefined;\n\n  constructor(\n    readonly duration: number,\n    private easing: (t: number) => number,\n  ) {\n    this.startTime = clock.now();\n    this._tick();\n  }\n  _tick() {\n    if (this._lastTick !== frameState.currentFrameClock) {\n      this._lastTick = frameState.currentFrameClock;\n      this._runTime = clock.now() - this.startTime;\n      this._timeProgress =\n        this.duration === 0 ? 1 : Math.min(this._runTime / this.duration, 1);\n      this._spaceProgress = this.easing(this._timeProgress);\n      if (this._timeProgress >= 1) {\n        this._doneFrames++;\n      }\n    }\n  }\n  get runTime() {\n    this._tick();\n    return this._runTime!;\n  }\n  get timeProgress() {\n    this._tick();\n    return this._timeProgress!;\n  }\n  get spaceProgress() {\n    this._tick();\n    return this._spaceProgress!;\n  }\n\n  // Tweens are not considered done until they have been done for more\n  // than one frame. This allows you to write animations like:\n  //\n  //     while (!tween.done) {\n  //       doSomethingWith(tween.currentValue);\n  //       yield rAF();\n  //     }\n  //\n  // while being sure that doSomethingWith will actually be called at\n  // least once with the final value. The alternative ways to\n  // accomplish that:\n  //\n  //     while (!tween.done) {\n  //       yield rAF(); // <-- may cause flicker\n  //       doSomethingWith(tween.currentValue);\n  //      }\n  //\n  //  or\n  //\n  //     while (!tween.done) {\n  //       doSomethingWith(tween.currentValue);\n  //       yield rAF();\n  //     }\n  //     doSomethingWith(tween.currentValue);\n  //\n  //  Either allow flicker or require animation authors to remember to\n  //  repeat themselves.\n  get done() {\n    this._tick();\n    return this._doneFrames > 1;\n  }\n}\n","import { rAF } from '../-private/concurrency-helpers.ts';\nimport Motion, { type BaseOptions } from '../-private/motion.ts';\nimport Tween, { type DerivedTween } from '../-private/tween.ts';\nimport type Sprite from '../-private/sprite.ts';\n\ninterface Options extends BaseOptions {\n  easing: (t: number) => number;\n}\n\n/**\n  Smoothly resizes _sprite_ from its the initial size to its final size.\n\n  _sprite_ must have both `initialBounds` and `finalBounds` set.\n\n  Consider using `scale` instead because scale uses CSS transforms and will not trigger reflow.\n\n  ```js\n  for (let sprite of insertedSprites) {\n    sprite.startAtSprite(beacons['source']);\n    resize(sprite)\n  }\n  ```\n\n  @function resize\n  @export default\n  @param {Sprite} sprite\n  @return {Motion}\n*/\nexport default function resize(sprite: Sprite, opts: Partial<Options> = {}) {\n  return new Resize(sprite, opts).run();\n}\n\nexport class Resize extends Motion<Options> {\n  prior: Resize | null = null;\n  widthTween: Tween | DerivedTween | null = null;\n  heightTween: Tween | DerivedTween | null = null;\n\n  interrupted(motions: Motion[]) {\n    let prior = motions.find((m) => m instanceof this.constructor);\n    if (prior) {\n      this.prior = prior as Resize;\n    }\n  }\n\n  *animate() {\n    let sprite: Sprite = this.sprite;\n    let duration = this.duration;\n    let widthTween: Tween | DerivedTween;\n    let heightTween: Tween | DerivedTween;\n\n    sprite.assertHasInitialBounds();\n    sprite.assertHasFinalBounds();\n\n    if (!this.prior) {\n      widthTween = this.widthTween = new Tween(\n        sprite.initialBounds.width / sprite.initialCumulativeTransform.a,\n        sprite.finalBounds.width / sprite.finalCumulativeTransform.a,\n        duration,\n        this.opts.easing,\n      );\n      heightTween = this.heightTween = new Tween(\n        sprite.initialBounds.height / sprite.initialCumulativeTransform.d,\n        sprite.finalBounds.height / sprite.finalCumulativeTransform.d,\n        duration,\n        this.opts.easing,\n      );\n    } else {\n      widthTween = this.widthTween = new Tween(\n        0,\n        sprite.finalBounds.width / sprite.finalCumulativeTransform.a -\n          this.prior.sprite.finalBounds!.width,\n        duration,\n        this.opts.easing,\n      ).plus(this.prior.widthTween!);\n      heightTween = this.heightTween = new Tween(\n        0,\n        sprite.finalBounds.height / sprite.finalCumulativeTransform.d -\n          this.prior.sprite.finalBounds!.height,\n        duration,\n        this.opts.easing,\n      ).plus(this.prior.heightTween!);\n    }\n\n    while (!widthTween.done || !heightTween.done) {\n      sprite.applyStyles({\n        width: `${widthTween.currentValue}px`,\n        height: `${heightTween.currentValue}px`,\n      });\n      yield rAF();\n    }\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.useElementHelper}}\\n  {{!--\\n    The @class is only there to support a deprecated usage.\\n  --}}\\n  {{#let (element this.tag) as |Tag|~}}\\n    {{! @glint-ignore: https://github.com/typed-ember/glint/issues/610 }}\\n    <Tag class=\\\"animated-container {{@class}}\\\" ...attributes>\\n      {{yield}}\\n    </Tag>\\n  {{/let}}\\n{{else}}\\n  {{!--\\n    The @class is only there to support a deprecated usage.\\n  --}}\\n  {{! @glint-ignore }}\\n  {{#let (component (ensure-safe-component (-element this.tag)) tagName=this.tag) as |Tag|~}}\\n    {{! @glint-ignore }}\\n    <Tag class=\\\"animated-container {{@class}}\\\" ...attributes>\\n      {{yield}}\\n    </Tag>\\n  {{/let}}\\n{{/if}}\")","import { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport { alias } from '@ember/object/computed';\nimport { action } from '@ember/object';\nimport { dependencySatisfies } from '@embroider/macros';\nimport { Resize } from '../motions/resize.ts';\nimport { task, type Task } from '../-private/ember-scheduler.ts';\nimport Sprite from '../-private/sprite.ts';\nimport { afterRender, microwait } from '../-private/concurrency-helpers.ts';\nimport { componentNodes } from '../-private/ember-internals.ts';\nimport type MotionService from '../services/-ea-motion.ts';\nimport type { MotionConstructor } from '../-private/motion.ts';\n\ninterface AnimatedContainerSignature<Tag extends string> {\n  /** Multiple tags supported for base element via `tag` arg */\n  // Element: ElementFromTagName<Tag>; // @todo https://github.com/typed-ember/glint/issues/610\n  Element: HTMLDivElement;\n  Args: {\n    motion?: string;\n\n    /** Whether to animate the initial render. You will probably also need to set initialInsertion=true on a child component of animated-container. Defaults to false. */\n    onInitialRender?: boolean;\n\n    /** Use a custom tag for the container. Defaults to div. */\n    tag?: Tag;\n    class?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\n/**\n Provides a boundary between animator components and the surrounding document\n which smoothly resizes as animators change. Use animated-container whenever you\n need to \"hold a place for\" some animated content while that content is animating.\n  ```hbs\n  <button {{on \"click\" this.toggleThing}}>Toggle</button>\n  <AnimatedContainer>\n    {{#animated-if this.showThing use=this.transition }}\n        <div class=\"message\" {{on \"click\" this.toggleThing}}>\n            Hello!\n        </div>\n    {{/animated-if}}\n  </AnimatedContainer>\n  <p>\n    This is outside of the container.\n  </p>\n  ```\n  ```js\n  import Component from '@ember/component';\n  import { action } from '@ember/object';\n  import { tracked } from '@glimmer/tracking';\n  import move from 'ember-animated/motions/move';\n  import { easeOut, easeIn } from 'ember-animated/easings/cosine';\n\n  export default class AnimatedContainerComponentExample extends Component {\n    @tracked showThing = false;\n\n    @action\n    toggleThing() {\n      this.showThing = !this.showThing;\n    }\n\n    *transition({ insertedSprites, keptSprites, removedSprites }) {\n      for (let sprite of insertedSprites) {\n        sprite.startAtPixel({ x: window.innerWidth });\n        yield move(sprite, { easing: easeOut });\n      }\n\n      for (let sprite of keptSprites) {\n        yield move(sprite);\n      }\n\n      for (let sprite of removedSprites) {\n        sprite.endAtPixel({ x: window.innerWidth });\n        yield move(sprite, { easing: easeIn });\n      }\n    }\n  }\n  ```\n  @class animated-container\n  @public\n*/\nexport default class AnimatedContainerComponent<\n  Tag extends string = 'div',\n> extends Component<AnimatedContainerSignature<Tag>> {\n  tagName = '';\n\n  @service('-ea-motion')\n  motionService!: MotionService;\n\n  /**\n   * Use a custom tag for the container. Defaults to div.\n    @argument tag\n    @type String\n  */\n  tag = 'div' as const;\n  // @todo https://github.com/typed-ember/glint/issues/610\n  // tag: Tag = 'div' as Tag;\n\n  /**\n   * Whether to animate the initial render. You will probably also need to set\n   * initialInsertion=true on a child component of animated-container.\n   * Defaults to false.\n    @argument onInitialRender\n    @type Boolean\n  */\n  onInitialRender = false;\n\n  /**\n   * Use a custom tag for the container. Defaults to div.\n    @argument motion\n    @type String\n  */\n  motion: MotionConstructor = Resize;\n\n  private _inserted = false;\n  private _startingUp = false;\n  private sprite: Sprite | null = null;\n\n  constructor(properties: Record<string, unknown> | undefined) {\n    super(properties);\n    this.motionService\n      .register(this as any)\n      .observeDescendantAnimations(this as any, this.maybeAnimate); // TODO: shouldn't need this cast;\n  }\n\n  didInsertElement() {\n    super.didInsertElement();\n    this._inserted = true;\n  }\n\n  private _ownElement() {\n    if (!this._inserted) {\n      return undefined;\n    }\n    let { firstNode, lastNode } = componentNodes(this);\n    let node: Node | null = firstNode;\n    while (node) {\n      if (node.nodeType === Node.ELEMENT_NODE) {\n        return node as HTMLElement | SVGElement;\n      }\n      if (node === lastNode) {\n        break;\n      }\n      node = node.nextSibling;\n    }\n    return undefined;\n  }\n\n  willDestroyElement() {\n    super.willDestroyElement();\n    this.motionService\n      .unregister(this as any)\n      .unobserveDescendantAnimations(this as any, this.maybeAnimate); // TODO: shouldn't need this cast\n  }\n\n  @alias('animated.isRunning')\n  isAnimating!: boolean;\n\n  @action\n  maybeAnimate({ duration, task }: { duration: number; task: Promise<void> }) {\n    if (!this._startingUp) {\n      this.animate.perform(duration, task);\n    }\n  }\n\n  beginStaticMeasurement() {\n    if (this.sprite) {\n      this.sprite.unlock();\n    }\n  }\n\n  endStaticMeasurement() {\n    if (this.sprite) {\n      this.sprite.lock();\n    }\n  }\n\n  @task(function* (\n    this: AnimatedContainerComponent,\n    duration: number,\n    animationTask: Promise<void>,\n  ) {\n    this._startingUp = true;\n    let service = this.motionService;\n    let sprite: Sprite;\n    let useMotion;\n    let element = this._ownElement();\n\n    if (element) {\n      sprite = Sprite.sizedStartingAt(element);\n      this.sprite = sprite;\n      sprite.lock();\n      useMotion = true;\n    } else {\n      useMotion = this.onInitialRender;\n    }\n\n    try {\n      yield afterRender();\n      yield microwait();\n    } finally {\n      this._startingUp = false;\n    }\n\n    yield* service.staticMeasurement(() => {\n      if (!sprite) {\n        // ownElement is non-null here because we waited for render above, and\n        // our own template definitely contains an Element\n        sprite = Sprite.sizedEndingAt(this._ownElement()!);\n        this.sprite = sprite;\n      } else {\n        sprite.measureFinalBounds();\n      }\n    });\n\n    if (useMotion) {\n      yield* new this.motion(this.sprite!, { duration })._run();\n    }\n\n    yield animationTask;\n\n    this.sprite!.unlock();\n    this.sprite = null;\n  }).restartable()\n  animate!: Task;\n\n  get useElementHelper(): boolean {\n    return dependencySatisfies('ember-element-helper', '>=0.6.1');\n  }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assertNever = assertNever;\n/**\n * Helper function for exhaustive checks of discriminated unions.\n * https://basarat.gitbooks.io/typescript/docs/types/discriminated-unions.html\n *\n * @example\n *\n *    type A = {type: 'a'};\n *    type B = {type: 'b'};\n *    type Union = A | B;\n *\n *    function doSomething(arg: Union) {\n *      if (arg.type === 'a') {\n *        return something;\n *      }\n *\n *      if (arg.type === 'b') {\n *        return somethingElse;\n *      }\n *\n *      // TS will error if there are other types in the union\n *      // Will throw an Error when called at runtime.\n *      // Use `assertNever(arg, true)` instead to fail silently.\n *      return assertNever(arg);\n *    }\n */\nfunction assertNever(value, errorMessageOrNoThrow) {\n    if (typeof errorMessageOrNoThrow === 'string') {\n        throw new Error(errorMessageOrNoThrow);\n    }\n    if (typeof errorMessageOrNoThrow === 'function') {\n        throw new Error(errorMessageOrNoThrow(value));\n    }\n    if (errorMessageOrNoThrow) {\n        return value;\n    }\n    throw new Error(\"Unhandled discriminated union member: \".concat(JSON.stringify(value)));\n}\nexports.default = assertNever;\n","export default class Child<T = unknown> {\n  state: 'new' | 'kept' | 'removing' = 'new';\n  private removalBlockers = 0;\n  private removalCycle: number | null = null;\n\n  constructor(\n    readonly group: string,\n    readonly id: string,\n    readonly value: T,\n    readonly index: number,\n  ) {\n    this.removalBlockers = 0;\n    this.removalCycle = null;\n  }\n\n  block(cycle: number) {\n    if (this.removalCycle == null || this.removalCycle === cycle) {\n      this.removalCycle = cycle;\n      this.removalBlockers++;\n    }\n  }\n\n  unblock(cycle: number) {\n    if (this.removalCycle === cycle) {\n      this.removalBlockers--;\n    }\n  }\n\n  flagForRemoval() {\n    this.removalCycle = null;\n    this.removalBlockers = 0;\n    this.state = 'removing';\n  }\n\n  get shouldRemove() {\n    return this.state === 'removing' && this.removalBlockers < 1;\n  }\n\n  clone() {\n    return new Child(this.group, this.id, this.value, this.index);\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{~#each this.renderedChildren key=\\\"id\\\" as |child|~}}\\n  <-EaListElement @child={{child}} @elementToChild={{this._elementToChild}}>\\n    {{~yield child.value child.index~}}\\n  </-EaListElement>\\n{{~else}}\\n  {{~yield to=\\\"inverse\\\"~}}\\n{{/each}}\\n\")","import { alias } from '@ember/object/computed';\nimport { computed, get, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport assertNever from 'assert-never';\nimport { task, type Task } from '../-private/ember-scheduler.ts';\nimport { current } from '../-private/scheduler.ts';\nimport { afterRender, microwait } from '../-private/concurrency-helpers.ts';\nimport TransitionContext, {\n  runToCompletion,\n} from '../-private/transition-context.ts';\nimport Sprite from '../-private/sprite.ts';\nimport { componentNodes, keyForArray } from '../-private/ember-internals.ts';\nimport partition from '../-private/partition.ts';\nimport Child from '../-private/child.ts';\nimport type MotionService from '../services/-ea-motion.ts';\nimport type { Transition } from '../-private/transition.ts';\n\nexport interface AnimatedEachSignature<T> {\n  Args: {\n    Positional: [T[]];\n    Named: {\n      /* The list of data you are trying to render. */\n      items?: T[];\n\n      /** Represents the amount of time an animation takes in miliseconds. */\n      duration?: number;\n\n      /**\n       * When true, all the items in the list will animate as removedSprites when the {{#animated-each}} is destroyed. Defaults to false.\n       *\n       * Note that an <AnimatedOrphans/> component must be actively rendered when this animator is removed for this option to have any effect.\n       */\n      finalRemoval?: boolean;\n\n      /** If set, this animator will only match other animators that have the same group value. */\n      group?: string;\n\n      /** When true, all the items in the list will animate as insertedSprites when the {{#animated-each}} is first rendered. Defaults to false. */\n      initialInsertion?: boolean;\n\n      /** Serves the same purpose as the key in ember {{#each}}, and it's also used to compare values when animating between components. */\n      key?: string;\n\n      /** Specifies data-dependent Rules that choose which Transition to run when the list changes. This takes precedence over use. */\n      rules?:\n        | ((args: {\n            firstTime: boolean;\n            oldItems: unknown[];\n            newItems: unknown[];\n          }) => Transition)\n        | undefined;\n\n      /** Specifies the Transition to run when the list changes. */\n      use?: Transition;\n\n      /** An optional comma-separated list of properties to observe on each of the objects in the items list. If any of those properties change, we will trigger an animated transition. Without this, we only animate when the list contents change, not when any deeper properties change. */\n      watch?: string;\n    };\n  };\n  Blocks: {\n    default: [T, number];\n    else: [];\n  };\n}\n\n/**\n  A drop in replacement for `{{#each}}` that animates changes to a list.\n  ```hbs\n  {{#animated-each items use=transition duration=2000 as |item|}}\n    <div data-test-item={{item}} onclick={{action removeItem item}}>\n      {{item}}\n    </div>\n  {{/animated-each}}\n  ```\n  ```js\n  import Component from '@ember/component';\n  import move from 'ember-animated/motions/move';\n  import { fadeOut } from 'ember-animated/motions/opacity';\n\n  export default Component.extend({\n    init() {\n      this._super();\n      this.items = ['A', 'B', 'C', 'D', 'E'];\n    },\n\n    * transition({ keptSprites, removedSprites }) {\n      for (let sprite of keptSprites) {\n        move(sprite);\n      }\n\n      for (let sprite of removedSprites) {\n        fadeOut(sprite);\n      }\n    },\n\n    removeItem(item){\n      this.set('items', this.items.filter(i => i !== item));\n    }\n  });\n  ```\n  @class animated-each\n  @public\n*/\nexport default class AnimatedEach<T> extends Component<\n  AnimatedEachSignature<T>\n> {\n  tagName = '';\n  static positionalParams = ['items'];\n\n  @service('-ea-motion')\n  motionService!: MotionService;\n\n  /**\n   * The list of data you are trying to render.\n    @argument items\n    @type Array\n  */\n  items!: T[];\n\n  /**\n   * If set, this animator will only [match](../../between) other animators that have the same group value.\n    @argument group\n    @type String\n  */\n  group: string | undefined;\n\n  /**\n   * Represents the amount of time an animation takes in miliseconds.\n    @argument duration\n    @type Number\n  */\n  duration: number | undefined;\n\n  /**\n   * Specifies the [Transition](../../transitions)\n   * to run when the list changes.\n    @argument use\n    @type Transition\n  */\n  use: Transition | undefined;\n\n  /**\n   * Specifies data-dependent [Rules](../../rules) that choose which [Transition](../../transitions)\n   * to run when the list changes. This takes precedence over `use`.\n    @argument rules\n    @type Rules\n  */\n  rules:\n    | ((args: {\n        firstTime: boolean;\n        oldItems: unknown[];\n        newItems: unknown[];\n      }) => Transition)\n    | undefined;\n\n  /**\n   * When true, all the items in the list will animate as [`insertedSprites`](../../sprites) when the `{{#animated-each}}` is first rendered. Defaults to false.\n    @argument initialInsertion\n    @type Boolean\n  */\n  initialInsertion = false;\n\n  /**\n    When true, all the items in the list will animate as [`removedSprites`](../../sprites) when the `{{#animated-each}}` is destroyed. Defaults to false.\n\n    Note that an `<AnimatedOrphans/>` component must be actively rendered when this animator is removed for this option to have any effect.\n\n    @argument finalRemoval\n    @type Boolean\n  */\n  finalRemoval = false;\n\n  /**\n    Serves the same purpose as the `key` in ember `{{#each}}`, and it's\n    also used to compare values when [animating between components](../../between).\n    @argument key\n    @type String\n  */\n  key: string | undefined;\n\n  /**\n    An optional comma-separated list of properties to observe on each of the\n    objects in the items list. If any of those properties change, we will\n    trigger an animated transition. Without this, we only animate when the list\n    contents change, not when any deeper properties change.\n    @argument watch\n    @type String\n  */\n  watch: string | undefined;\n\n  // TODO: once TS conversion is complete, we can go around removing all the\n  // underscores from private things.\n  private _elementToChild: WeakMap<Element, Child> = new WeakMap();\n  private _prevItems: unknown[] = [];\n  private _prevSignature: string[] = [];\n  private _firstTime = true;\n  private _inserted = false;\n  private _renderedChildren: Child<T>[] = [];\n  private _renderedChildrenStartedMoving = false;\n  private _cycleCounter = 0;\n  private _keptSprites: Sprite[] | null = null;\n  private _insertedSprites: Sprite[] | null = null;\n  private _removedSprites: Sprite[] | null = null;\n  private _lastTransition: Transition | null = null;\n  private _ancestorWillDestroyUs = false;\n\n  // eslint-disable-next-line ember/classic-decorator-hooks\n  init() {\n    super.init();\n    this.motionService\n      .register(this as any)\n      .observeDescendantAnimations(this as any, this.maybeReanimate) // TODO: shouldn't need this cast\n      .observeAncestorAnimations(this as any, this.ancestorIsAnimating);\n    this._installObservers();\n  }\n\n  _installObservers() {\n    let key = this.key;\n    if (key != null && key !== '@index' && key !== '@identity') {\n      this.addObserver(\n        `items.@each.${key}` as any,\n        this,\n        this._invalidateRenderedChildren,\n      );\n    }\n\n    let deps = this._deps;\n    if (deps) {\n      for (let dep of deps) {\n        this.addObserver(\n          `items.@each.${dep}` as any,\n          this,\n          this._invalidateRenderedChildren,\n        );\n      }\n    }\n  }\n\n  @computed('watch')\n  get _deps() {\n    let w = this.watch;\n    // Firefox has an `Object.prototype.watch` that can troll us here\n    if (typeof w === 'string') {\n      return w.split(/\\s*,\\s*/);\n    }\n    return undefined;\n  }\n\n  @computed('duration')\n  get durationWithDefault() {\n    let d = this.duration;\n    if (d == null) {\n      return 500;\n    } else {\n      return d;\n    }\n  }\n\n  _invalidateRenderedChildren() {\n    this.notifyPropertyChange('renderedChildren');\n  }\n\n  _identitySignature(\n    items: unknown[],\n    getKey: (item: unknown, index: number) => string,\n  ) {\n    if (!items) {\n      return [];\n    }\n    let deps = this._deps;\n    let signature: string[] = [];\n    for (let i = 0; i < items.length; i++) {\n      let item = items[i];\n      signature.push(getKey(item, i));\n      if (deps) {\n        for (const dep of deps) {\n          signature.push(get(item as any, dep));\n        }\n      }\n    }\n    return signature;\n  }\n\n  /* eslint-disable ember/require-computed-property-dependencies, ember/no-side-effects */\n  // turning off these two rules for this method because we manage our own\n  // internal state and know what we're doing.\n\n  // this is where we handle most of the model state management. Based on the\n  // `items` array we were given and our own earlier state, we update a list of\n  // Child models that will be rendered by our template and decide whether an\n  // animation is needed.\n  @computed('items.[]', 'group')\n  get renderedChildren(): Child<T>[] {\n    let firstTime = this._firstTime;\n    this._firstTime = false;\n\n    let getKey = this.keyGetter;\n    let oldChildren = this._renderedChildren;\n    let oldItems = this._prevItems;\n    let oldSignature = this._prevSignature;\n    let newItems: T[] = this.items;\n    let newSignature = this._identitySignature(newItems, getKey);\n    let group = this.group || '__default__';\n    this._prevItems = newItems ? newItems.slice() : [];\n    this._prevSignature = newSignature;\n    if (!newItems) {\n      newItems = [];\n    }\n\n    let oldIndices = new Map();\n    oldChildren.forEach((child, index) => {\n      oldIndices.set(child.id, index);\n    });\n\n    let newIndices = new Map();\n    newItems.forEach((item, index) => {\n      newIndices.set(getKey(item, index), index);\n    });\n\n    let newChildren = newItems\n      .map((value, listIndex) => {\n        let id = getKey(value, listIndex);\n        let index = oldIndices.get(id);\n        if (index != null) {\n          let child = new Child(group, id, value, listIndex);\n          child.state = 'kept';\n          return child;\n        } else {\n          return new Child(group, id, value, listIndex);\n        }\n      })\n      .concat(\n        oldChildren\n          .filter(\n            (child) =>\n              (!child.shouldRemove || !this._renderedChildrenStartedMoving) &&\n              newIndices.get(child.id) == null,\n          )\n          .map((child) => {\n            child.flagForRemoval();\n            return child;\n          }),\n      );\n    this._renderedChildren = newChildren;\n\n    // in general, a removed sprite that didn't run a motion in the previous\n    // animation gets instantly removed at the start of the next animation. But\n    // there is a possible race condition if we recompute before the user's\n    // transition even has a chance to begin. So this flag protects the removed\n    // sprites until we can hand them off to the user's transition.\n    this._renderedChildrenStartedMoving = false;\n\n    if (\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore: untyped FastBoot global\n      typeof FastBoot === 'undefined' &&\n      !isStable(oldSignature, newSignature)\n    ) {\n      let transition = this._transitionFor(firstTime, oldItems, newItems);\n      this.animate.perform(transition, firstTime);\n    }\n\n    return newChildren;\n  }\n\n  /* eslint-enable ember/require-computed-property-dependencies, ember/no-side-effects */\n\n  @alias('animate.isRunning')\n  isAnimating!: boolean;\n\n  @computed('key')\n  get keyGetter() {\n    return keyForArray(this.key);\n  }\n\n  didInsertElement() {\n    super.didInsertElement();\n    this._inserted = true;\n  }\n\n  *_ownElements() {\n    if (!this._inserted) {\n      return;\n    }\n    let { firstNode, lastNode } = componentNodes(this as unknown as Component);\n    let node: Node | null = firstNode;\n    while (node) {\n      if (node.nodeType === Node.ELEMENT_NODE) {\n        yield node as HTMLElement | SVGElement;\n      }\n      if (node === lastNode) {\n        break;\n      }\n      node = node.nextSibling;\n    }\n  }\n\n  // This gets called by the motionService when another animator calls\n  // willAnimate from within our descendant components.\n  @action\n  maybeReanimate() {\n    if (this.animate.isRunning && !this.startAnimation.isRunning) {\n      // A new animation is starting below us while we are in\n      // progress. We should interrupt ourself in order to adapt to\n      // the changing conditions.\n      this.animate.perform(this._lastTransition);\n    }\n  }\n\n  @action\n  ancestorIsAnimating(ourState: Child['state']) {\n    if (ourState === 'removing' && !this._ancestorWillDestroyUs) {\n      // we just found out we're probably getting destroyed. Abandon\n      // ship!\n      this._ancestorWillDestroyUs = true;\n      this._letSpritesEscape();\n    } else if (ourState !== 'removing' && this._ancestorWillDestroyUs) {\n      // we got a reprieve, our destruction was cancelled before it\n      // could happen.\n      this._ancestorWillDestroyUs = false;\n      // treat all our sprites as re-inserted, because we had already handed them off as orphans\n      let transition = this._transitionFor(\n        this._firstTime,\n        [],\n        this._prevItems,\n      );\n      this.animate.perform(transition);\n    }\n  }\n\n  _letSpritesEscape() {\n    let transition = this._transitionFor(this._firstTime, this._prevItems, []);\n    let removedSprites = [];\n    let parent;\n    for (let element of this._ownElements()) {\n      if (!parent) {\n        parent = Sprite.offsetParentStartingAt(element);\n      }\n      let sprite = Sprite.positionedStartingAt(element, parent);\n      sprite.owner = this._elementToChild.get(element)!;\n      removedSprites.push(sprite);\n    }\n    this.motionService.matchDestroyed(\n      removedSprites,\n      transition,\n      this.durationWithDefault,\n      this.finalRemoval,\n    );\n  }\n\n  willDestroyElement() {\n    super.willDestroyElement();\n    // if we already got early warning, we already let our sprites escape.\n    if (!this._ancestorWillDestroyUs) {\n      this._letSpritesEscape();\n    }\n    this.motionService\n      .unregister(this as any)\n      .unobserveDescendantAnimations(this as any, this.maybeReanimate)\n      .unobserveAncestorAnimations(this as any, this.ancestorIsAnimating);\n  }\n\n  // this gets called by motionService when we call\n  // staticMeasurement. But also whenever *any other* animator calls\n  // staticMeasurement, even if we're in the middle of animating.\n  beginStaticMeasurement() {\n    if (this._keptSprites) {\n      this._keptSprites.forEach((sprite) => sprite.unlock());\n      this._insertedSprites!.forEach((sprite) => sprite.unlock());\n      this._removedSprites!.forEach((sprite) => sprite.display(false));\n    }\n  }\n\n  endStaticMeasurement() {\n    if (this._keptSprites) {\n      this._keptSprites.forEach((sprite) => sprite.lock());\n      this._insertedSprites!.forEach((sprite) => sprite.lock());\n      this._removedSprites!.forEach((sprite) => sprite.display(true));\n    }\n  }\n\n  _findCurrentSprites() {\n    let currentSprites = [];\n    let parent;\n    for (let element of this._ownElements()) {\n      if (!parent) {\n        parent = Sprite.offsetParentStartingAt(element);\n      }\n      let sprite = Sprite.positionedStartingAt(element, parent);\n      currentSprites.push(sprite);\n    }\n    return { currentSprites, parent };\n  }\n\n  _partitionKeptAndRemovedSprites(currentSprites: Sprite[]) {\n    currentSprites.forEach((sprite) => {\n      if (!sprite.element.parentElement) {\n        // our currentSprites list was created based on what was in\n        // DOM before rendering. Now we are looking after\n        // rendering. So some of the removed sprites may have been\n        // garbage collected out (based on the logic in\n        // renderedChildren()). If so, they will no longer be in the\n        // DOM, and we filter them out here.\n        return;\n      }\n\n      let child: Child = this._elementToChild.get(sprite.element)!;\n      sprite.owner = child;\n\n      if (this._ancestorWillDestroyUs) {\n        this._removedSprites!.push(sprite);\n      } else {\n        switch (child.state) {\n          case 'kept':\n            this._keptSprites!.push(sprite);\n            break;\n          case 'removing':\n            this._removedSprites!.push(sprite);\n            break;\n          case 'new':\n            // This can happen when our animation gets restarted due to\n            // another animation possibly messing with our DOM, as opposed\n            // to restarting because our own data changed.\n            this._keptSprites!.push(sprite);\n            break;\n          default:\n            throw assertNever(child.state);\n        }\n      }\n    });\n  }\n\n  // The animate task is split into three subtasks that represent\n  // three distinct phases. This is necessary for the proper\n  // coordination of multiple animators.\n  //\n  //   1. During `startAnimation`, we ignore notifications about\n  //   descendant animations (see maybeReanimate), because we're still\n  //   waiting for Ember to finish rendering anyway and we haven't\n  //   kicked off our own animation.\n  //\n  //   2. During `runAnimation`, other animators will know that we are\n  //   actually still animating things, so if they are entangled with\n  //   us they should not finalize. (They get entangled via farMatch,\n  //   meaning some of their sprites and some of our sprites match\n  //   up).\n  //\n  //   3. During `finalizeAnimation`, we are waiting for our entangled\n  //   animators that are still in `runAnimation`, then we are\n  //   cleaning up our own sprite state.\n  //\n  @task(function* (\n    this: AnimatedEach<T>,\n    transition: Transition,\n    firstTime: boolean,\n  ) {\n    let {\n      parent,\n      currentSprites,\n      insertedSprites,\n      keptSprites,\n      removedSprites,\n    } = (yield this.startAnimation.perform(transition, current())) as {\n      parent: Sprite;\n      currentSprites: Sprite[];\n      insertedSprites: Sprite[];\n      keptSprites: Sprite[];\n      removedSprites: Sprite[];\n    };\n\n    let { matchingAnimatorsFinished } = (yield this.runAnimation.perform(\n      transition,\n      parent,\n      currentSprites,\n      insertedSprites,\n      keptSprites,\n      removedSprites,\n      firstTime,\n    )) as { matchingAnimatorsFinished: Promise<void> };\n\n    yield this.finalizeAnimation.perform(\n      insertedSprites,\n      keptSprites,\n      removedSprites,\n      matchingAnimatorsFinished,\n    );\n  }).restartable()\n  animate!: Task;\n\n  @task(function* (this: AnimatedEach<T>, transition, animateTask) {\n    // we remember the transition we're using in case we need to\n    // recalculate based on other animators potentially moving our DOM\n    // around\n    this._lastTransition = transition;\n\n    // Reset the sprite lists. These are component state mostly\n    // because beginStaticMeasurement needs to be able to put\n    // everything into static positioning at any point in time, so\n    // that any animation that's starting up can figure out what the\n    // DOM is going to look like.\n    let keptSprites = (this._keptSprites = []);\n    let removedSprites = (this._removedSprites = []);\n    let insertedSprites = (this._insertedSprites = []);\n\n    // Start by locating our current sprites based off the actual DOM\n    // elements we contain. This records their initial positions.\n    let { currentSprites, parent } = this._findCurrentSprites();\n\n    // Warn the rest of the universe that we're about to animate.\n    this.motionService.willAnimate({\n      task: animateTask,\n      duration: this.durationWithDefault,\n      component: this as any,\n      children: this._renderedChildren,\n    });\n\n    // Make all our current sprites absolutely positioned so they won't move during render.\n    currentSprites.forEach((sprite: Sprite) => sprite.lock());\n\n    // Wait for Ember to render our latest state.\n    yield afterRender();\n    return {\n      parent,\n      currentSprites,\n      insertedSprites,\n      keptSprites,\n      removedSprites,\n    };\n  })\n  startAnimation!: Task; // todo: restartable?\n\n  @task(function* (\n    this: AnimatedEach<T>,\n    transition: Transition,\n    parent: Sprite,\n    currentSprites: Sprite[],\n    insertedSprites: Sprite[],\n    keptSprites: Sprite[],\n    removedSprites: Sprite[],\n    firstTime: boolean,\n  ) {\n    // fill the keptSprites and removedSprites lists by comparing what\n    // we had in currentSprites with what is still in the DOM now that\n    // rendering happened.\n    this._partitionKeptAndRemovedSprites(currentSprites);\n\n    // perform static measurement. The motionService coordinates this\n    // because all animators need to be simultaneously put into their\n    // static state via beginStaticMeasurement and endStaticMeasurement.\n    yield* this.motionService.staticMeasurement(() => {\n      // we care about the final position of our own DOM parent. That\n      // lets us nest motions correctly.\n      if (parent && !parent.finalBounds) {\n        parent.measureFinalBounds();\n      }\n\n      for (let element of this._ownElements()) {\n        // now is when we find all the newly inserted sprites and\n        // remember their final bounds.\n        if (!currentSprites.find((sprite) => sprite.element === element)) {\n          if (!parent) {\n            parent = Sprite.offsetParentEndingAt(element);\n          }\n          let sprite = Sprite.positionedEndingAt(element, parent);\n          sprite.owner = this._elementToChild.get(element)!;\n          sprite.hide();\n          insertedSprites.push(sprite);\n        }\n      }\n      // and remember the final bounds of all our kept sprites\n      keptSprites.forEach((sprite) => sprite.measureFinalBounds());\n    });\n\n    // at this point we know all the geometry of our own sprites. But\n    // some of our sprites may match up with sprites that are entering\n    // or leaving other simulatneous animators. So we hit another\n    // coordination point via the motionService\n    let { farMatches, matchingAnimatorsFinished, beacons } =\n      (yield this.motionService\n        .get('farMatch')\n        .perform(current(), insertedSprites, keptSprites, removedSprites)) as {\n        farMatches: Map<Sprite, Sprite>;\n        matchingAnimatorsFinished: Promise<void>;\n        beacons: { [name: string]: Sprite };\n      };\n\n    // TODO: This is best effort. The parent isn't necessarily in\n    // the initial position at this point, but in practice if people\n    // are properly using animated-containers it will be locked into\n    // that position. We only need this if there were no elements to\n    // begin with. A better solution would figure out what the\n    // offset parent *would* be even when there are no elements,\n    // based on our own placeholder comment nodes.\n    if (parent && !parent.initialBounds) {\n      parent.measureInitialBounds();\n    }\n\n    let [sentSprites, unmatchedRemovedSprites] = partition(\n      removedSprites,\n      (sprite) => {\n        let other = farMatches.get(sprite);\n        if (other) {\n          sprite.endAtSprite(other);\n          if (other.revealed && !sprite.revealed) {\n            sprite.startAtSprite(other);\n          }\n          return true;\n        }\n        return false;\n      },\n    );\n\n    // if any of our inserted sprites have matching far away sprites,\n    // they become receivedSprites and they get initialBounds\n    // (derived from their far away matching sprite) and motion\n    // continuity via `startAtSprite`.\n    let [receivedSprites, unmatchedInsertedSprites] = partition(\n      insertedSprites,\n      (sprite) => {\n        let other = farMatches.get(sprite);\n        if (other) {\n          sprite.startAtSprite(other);\n          return true;\n        }\n        return false;\n      },\n    );\n\n    let [matchedKeptSprites, unmatchedKeptSprites] = partition(\n      keptSprites,\n      (sprite) => {\n        let other = farMatches.get(sprite);\n        if (other) {\n          if (other.revealed && !sprite.revealed) {\n            sprite.startAtSprite(other);\n          }\n          return true;\n        }\n        return false;\n      },\n    );\n\n    // let other animators make their own partitioning decisions\n    // before we start hiding the sent & received sprites yield\n    yield microwait();\n\n    matchedKeptSprites.forEach((s) => s.hide());\n    sentSprites.forEach((s) => s.hide());\n\n    // By default, we don't treat sprites as \"inserted\" when our\n    // component first renders. You can override that by setting\n    // initialInsertion=true.\n    if (firstTime && !this.initialInsertion) {\n      // Here we are effectively hiding the inserted sprites from the\n      // user's transition function and just immediately revealing\n      // them in their final positions instead.\n      unmatchedInsertedSprites.forEach((s) => s.reveal());\n      unmatchedInsertedSprites = [];\n    }\n\n    // if we are interrupted after this point, any removed children that didn't\n    // actually undergo a motion will be immediately destroyed.\n    this._renderedChildrenStartedMoving = true;\n\n    // Early exit if nothing is happening.\n    if (\n      !transition ||\n      (unmatchedInsertedSprites.length === 0 &&\n        unmatchedKeptSprites.length === 0 &&\n        unmatchedRemovedSprites.length === 0 &&\n        sentSprites.length === 0 &&\n        receivedSprites.length === 0 &&\n        matchedKeptSprites.length === 0)\n    ) {\n      return { matchingAnimatorsFinished };\n    }\n\n    let context = new TransitionContext(\n      this.durationWithDefault,\n      unmatchedInsertedSprites, // user-visible insertedSprites\n      unmatchedKeptSprites, // user-visible keptSprites\n      unmatchedRemovedSprites, // user-visible removedSprites\n      sentSprites, // user-visible sentSprites\n      receivedSprites.concat(matchedKeptSprites), // user-visible receivedSprites\n      beacons,\n      (sprite: Sprite) => this._motionStarted(sprite, cycle),\n      (sprite: Sprite) => this._motionEnded(sprite, cycle),\n    );\n    let cycle = this._cycleCounter++;\n\n    yield* runToCompletion(context, transition);\n    return { matchingAnimatorsFinished };\n  })\n  runAnimation!: Task;\n\n  @task(function* (\n    this: AnimatedEach<T>,\n    insertedSprites: Sprite[],\n    keptSprites: Sprite[],\n    removedSprites: Sprite[],\n    matchingAnimatorsFinished: Promise<void>,\n  ) {\n    yield matchingAnimatorsFinished;\n\n    // The following cleanup ensures that all the sprites that will\n    // stay on the page after our animation are unlocked and\n    // revealed. We may have already revealed most of them, but if an\n    // inserted sprite was never subject to a motion it will appear\n    // here, and if a previous transition was interrupted before an\n    // inserted sprite could be revealed, it could have become a kept\n    // sprite for us.\n    keptSprites.forEach((sprite) => {\n      sprite.unlock();\n      sprite.reveal();\n    });\n    insertedSprites.forEach((sprite) => {\n      sprite.unlock();\n      sprite.reveal();\n    });\n\n    this._keptSprites = null;\n    this._removedSprites = null;\n    this._insertedSprites = null;\n\n    if (removedSprites.length > 0) {\n      // trigger a rerender to reap our removed children\n      this.notifyPropertyChange('renderedChildren');\n      // wait for the render to happen before we allow our animation\n      // to be done\n      yield afterRender();\n    }\n  })\n  finalizeAnimation!: Task;\n\n  _motionStarted(sprite: Sprite, cycle: number) {\n    sprite.reveal();\n    sprite.owner!.block(cycle);\n  }\n\n  _motionEnded(sprite: Sprite, cycle: number) {\n    sprite.owner!.unblock(cycle);\n  }\n\n  _transitionFor(\n    firstTime: boolean,\n    oldItems: unknown[],\n    newItems: unknown[],\n  ): Transition {\n    let rules = this.rules;\n    if (rules) {\n      return rules({ firstTime, oldItems, newItems });\n    } else {\n      return this.use!;\n    }\n  }\n}\n\nfunction isStable(before: string[], after: string[]) {\n  if (before.length !== after.length) {\n    return false;\n  }\n  for (let i = 0; i < before.length; i++) {\n    if (before[i] !== after[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#animated-value this.predicate key=this.key rules=this.rules use=this.use duration=this.duration group=this.realGroup initialInsertion=this.initialInsertion finalRemoval=this.finalRemoval as |currentPredicate|}}\\n  {{#if currentPredicate}}\\n    {{yield}}\\n  {{else}}\\n    {{yield to=\\\"inverse\\\"}}\\n  {{/if}}\\n{{/animated-value}}\\n\")","import Component from '@ember/component';\nimport { computed } from '@ember/object';\nimport type { AnimatedEachSignature } from './animated-each.ts';\n\ninterface AnimatedIfSignature<T> {\n  Args: {\n    Positional: [T];\n    Named: AnimatedEachSignature<[T]>['Args']['Named'];\n  };\n  Blocks: {\n    default: [];\n    else: [];\n  };\n}\n\n/**\n  A drop in replacement for `{{#if}}` that animates changes when the predicate changes.\n  Animated-if uses the same arguments as animated-each.\n  ```hbs\n  <button {{on 'click' this.toggleThing}}>Toggle</button>\n\n  {{#animated-if showThing use=transition}}\n    <div class=\"message\" {{on 'click' this.toggleThing}} role=\"button\">\n      myContent\n    </div>\n  {{/animated-if}}\n  ```\n  ```js\n  import Component from '@glimmer/component';\n  import move from 'ember-animated/motions/move';\n  import { easeOut, easeIn } from 'ember-animated/easings/cosine';\n  import { tracked } from '@glimmer/tracking';\n\n  export default class FooComponent extends Component {\n    @tracked showThing = false;\n\n    toggleThing() {\n      this.showThing = !this.showThing;\n    }\n\n    // eslint-disable-next-line require-yield\n    *transition({ insertedSprites, keptSprites, removedSprites }) {\n      for (let sprite of insertedSprites) {\n        sprite.startAtPixel({ x: window.innerWidth });\n        move(sprite, { easing: easeOut });\n      }\n\n      for (let sprite of keptSprites) {\n        move(sprite);\n      }\n\n      for (let sprite of removedSprites) {\n        sprite.endAtPixel({ x: window.innerWidth });\n        move(sprite, { easing: easeIn });\n      }\n    }\n  };\n  ```\n  @class animated-if\n  @public\n*/\nexport default class AnimatedIfComponent<T> extends Component<\n  AnimatedIfSignature<T>\n> {\n  tagName = '';\n  static positionalParams = ['predicate'];\n\n  declare predicate: T;\n  group: AnimatedEachSignature<T>['Args']['Named']['group'];\n  finalRemoval: AnimatedEachSignature<T>['Args']['Named']['finalRemoval'];\n  initialInsertion: AnimatedEachSignature<T>['Args']['Named']['initialInsertion'];\n  key: AnimatedEachSignature<T>['Args']['Named']['key'];\n  rules: AnimatedEachSignature<T>['Args']['Named']['rules'];\n  use: AnimatedEachSignature<T>['Args']['Named']['use'];\n  duration: AnimatedEachSignature<T>['Args']['Named']['duration'];\n\n  @computed('group')\n  get realGroup() {\n    return this.group || `animated_if_${Math.floor(Math.random() * 1000000)}`;\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-yield-only }}\\n{{yield}}\")","import { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { task, type Task } from '../-private/ember-scheduler.ts';\nimport { afterRender, microwait } from '../-private/concurrency-helpers.ts';\nimport { continueMotions } from '../-private/motion-bridge.ts';\nimport TransitionContext, {\n  runToCompletion,\n} from '../-private/transition-context.ts';\nimport { spawnChild, childrenSettled, current } from '../-private/scheduler.ts';\nimport Sprite from '../-private/sprite.ts';\nimport partition from '../-private/partition.ts';\nimport '../element-remove.ts';\nimport type MotionService from '../services/-ea-motion.ts';\nimport type { Transition } from '../-private/transition.ts';\n\ninterface AnimatedOrphansSignature {\n  Blocks: {\n    default: [];\n  };\n}\n\n/**\n  A component that adopts any orphaned sprites so they can continue animating even\n  after their original parent component has been destroyed. This relies on cloning\n  DOM nodes, and the cloned nodes will be inserted as children of animated-orphans.\n  ```hbs\n  <AnimatedOrphans/>\n  ```\n  @class animated-orphans\n  @public\n*/\nexport default class AnimatedOrphans extends Component<AnimatedOrphansSignature> {\n  classNames: string[] = this.classNames.concat('animated-orphans');\n\n  @service('-ea-motion')\n  motionService!: MotionService;\n\n  private _newOrphanTransitions = [] as {\n    removedSprites: Sprite[];\n    transition: Transition;\n    duration: number;\n    shouldAnimateRemoved: boolean;\n  }[];\n  private _elementToChild = new WeakMap();\n  private _childToTransition = new WeakMap();\n  private _inserted = false;\n  private _cycleCounter = 0;\n\n  didInsertElement() {\n    super.didInsertElement();\n    this._inserted = true;\n    this.motionService\n      .register(this as any)\n      .observeOrphans(this.animateOrphans)\n      .observeAnimations(this.reanimate);\n  }\n\n  willDestroyElement() {\n    super.willDestroyElement();\n    this.motionService\n      .unregister(this as any)\n      .unobserveOrphans(this.animateOrphans)\n      .unobserveAnimations(this.reanimate);\n  }\n\n  @action\n  animateOrphans(\n    removedSprites: Sprite[],\n    transition: Transition,\n    duration: number,\n    shouldAnimateRemoved: boolean,\n  ) {\n    this._newOrphanTransitions.push({\n      removedSprites: removedSprites.map((sprite: Sprite) => {\n        // we clone the owner objects so that our sprite garbage\n        // collection is entirely detached from the original\n        // animator's\n        sprite.assertHasOwner();\n        sprite.owner = sprite.owner.clone();\n        sprite.owner.flagForRemoval();\n        return sprite;\n      }),\n      transition,\n      duration,\n      shouldAnimateRemoved,\n    });\n    this.reanimate();\n  }\n\n  @action\n  reanimate() {\n    if (!this.get('startAnimation.isRunning' as any)) {\n      let ownSprite = new Sprite(\n        this.element as HTMLElement | SVGElement,\n        true,\n        null,\n        null,\n      );\n      let activeSprites = this._findActiveSprites(ownSprite);\n      this.animate.perform({ ownSprite, activeSprites });\n    }\n  }\n\n  beginStaticMeasurement() {\n    // we don't have any impact on static layout\n  }\n\n  endStaticMeasurement() {}\n\n  @alias('animate.isRunning')\n  isAnimating!: boolean;\n\n  @task(function* (this: AnimatedOrphans, { ownSprite, activeSprites }) {\n    yield this.startAnimation.perform(ownSprite);\n    let { matchingAnimatorsFinished } = (yield this.runAnimation.perform(\n      activeSprites,\n      ownSprite,\n    )) as { matchingAnimatorsFinished: Promise<void> };\n    yield this.finalizeAnimation.perform(\n      activeSprites,\n      matchingAnimatorsFinished,\n    );\n  }).restartable()\n  animate!: Task;\n\n  @task(function* (this: AnimatedOrphans, ownSprite) {\n    yield afterRender();\n    ownSprite.measureFinalBounds();\n  })\n  startAnimation!: Task;\n\n  @task(function* (this: AnimatedOrphans, activeSprites, ownSprite) {\n    // we don't need any static measurements, but we wait for this so\n    // we stay on the same timing as all the other animators\n    yield* this.motionService.staticMeasurement(() => {});\n\n    // Some of the new orphan transitions may be handing us sprites we\n    // already have matches for, in which case our active sprites take\n    // precedence.\n    {\n      let activeIds = Object.create(null);\n      for (let sprite of activeSprites) {\n        activeIds[`${sprite.owner.group}/${sprite.owner.id}`] = true;\n      }\n      for (let entry of this._newOrphanTransitions) {\n        entry.removedSprites = entry.removedSprites.filter((s: Sprite) => {\n          s.assertHasOwner();\n          return !activeIds[`${s.owner.group}/${s.owner.id}`];\n        });\n      }\n    }\n\n    // our sprites from prior animation runs are eligible to be\n    // matched by other animators (this is how an orphan sprites that\n    // are animating away can get interrupted into coming back)\n    let { farMatches, matchingAnimatorsFinished } = (yield this.motionService\n      .get('farMatch')\n      .perform(\n        current(),\n        [],\n        [],\n        activeSprites.concat(\n          ...this._newOrphanTransitions.map((t) => t.removedSprites),\n        ),\n      )) as {\n      matchingAnimatorsFinished: Promise<void>;\n      farMatches: Map<Sprite, Sprite>;\n    };\n\n    let cycle = this._cycleCounter++;\n\n    for (let { transition, duration, sprites } of this._groupActiveSprites(\n      activeSprites,\n    )) {\n      let [sentSprites, removedSprites] = partition(sprites, (sprite) => {\n        let other = farMatches.get(sprite);\n        if (other) {\n          sprite.endAtSprite(other);\n          if (other.revealed && !sprite.revealed) {\n            sprite.startAtSprite(other);\n          }\n          return true;\n        }\n        return false;\n      });\n      let context = new TransitionContext(\n        duration,\n        [],\n        [],\n        removedSprites,\n        sentSprites,\n        [],\n        {},\n        this._onMotionStart.bind(this, cycle),\n        this._onMotionEnd.bind(this, cycle),\n      );\n      spawnChild(function* () {\n        // let other animators make their own partitioning decisions\n        // before we start hiding the sent & received sprites\n        yield microwait();\n        sentSprites.forEach((s) => s.hide());\n        yield* runToCompletion(context, transition);\n      });\n    }\n\n    while (this._newOrphanTransitions.length > 0) {\n      // This is a pop instead of a shift because we want to start the\n      // animations in the reverse order that they were\n      // scheduled. This is a consequence of Ember's\n      // willDestroyElement firing from top to bottom. We want\n      // descendants have a chance to start before their ancestors,\n      // because each one is going to potentially trigger DOM cloning,\n      // so any animated descendants need to get hidden before one of\n      // their ancestors clones them.\n      let entry = this._newOrphanTransitions.pop()!;\n      let { transition, duration, removedSprites, shouldAnimateRemoved } =\n        entry;\n\n      if (removedSprites.length === 0) {\n        // This can happen due to our filtering based on activeIds\n        // above: some new orphan transitions may have nothing new\n        // that we aren't already animating.\n        continue;\n      }\n\n      for (let _sprite of removedSprites) {\n        // typesecript workaround for https://github.com/microsoft/TypeScript/issues/35940\n        let sprite: Sprite = _sprite;\n        sprite.assertHasOwner();\n        sprite.rehome(ownSprite);\n        this._childToTransition.set(sprite.owner, entry);\n      }\n\n      let [sentSprites, unmatchedRemovedSprites] = partition(\n        removedSprites,\n        (sprite) => {\n          let other = farMatches.get(sprite);\n          if (other) {\n            sprite.endAtSprite(other);\n            if (other.revealed && !sprite.revealed) {\n              sprite.startAtSprite(other);\n            }\n            return true;\n          }\n          return false;\n        },\n      );\n\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let self = this;\n      spawnChild(function* () {\n        yield microwait();\n        sentSprites.forEach((s) => s.hide());\n\n        // now that we've hidden any sent sprites, we can bail out\n        // early if there is no transition they want to run\n        if (!transition) {\n          return;\n        }\n\n        let removedSprites: Sprite[];\n        if (shouldAnimateRemoved) {\n          removedSprites = unmatchedRemovedSprites;\n        } else {\n          removedSprites = [];\n        }\n\n        // Early bail out if there's nothing left that could animate\n        if (removedSprites.length === 0 && sentSprites.length === 0) {\n          return;\n        }\n\n        let context = new TransitionContext(\n          duration,\n          [],\n          [],\n          removedSprites,\n          sentSprites,\n          [],\n          {},\n          self._onFirstMotionStart.bind(self, activeSprites, cycle),\n          self._onMotionEnd.bind(self, cycle),\n        );\n        context.prepareSprite = self._prepareSprite.bind(self);\n\n        yield* runToCompletion(context, transition);\n      });\n    }\n\n    yield childrenSettled();\n    return { matchingAnimatorsFinished };\n  })\n  runAnimation!: Task;\n\n  @task(function* (activeSprites, matchingAnimatorsFinished) {\n    yield matchingAnimatorsFinished;\n    for (let sprite of activeSprites) {\n      sprite.element.remove();\n    }\n  })\n  finalizeAnimation!: Task;\n\n  _findActiveSprites(ownSprite: Sprite) {\n    if (!this._inserted) {\n      return [];\n    }\n    return Array.from(this.element.children)\n      .map((element) => {\n        let child = this._elementToChild.get(element);\n        if (child.shouldRemove) {\n          // child was not animating in the previously interrupted\n          // animation, so its safe to remove\n          element.remove();\n          return undefined;\n        } else {\n          let sprite = Sprite.positionedStartingAt(\n            element as HTMLElement | SVGElement,\n            ownSprite,\n          );\n          sprite.owner = child;\n          // we need to flag each existing child for removal at the\n          // start of each animation. That's what reinitializes its\n          // removal blockers count.\n          child.flagForRemoval();\n          return sprite;\n        }\n      })\n      .filter(Boolean);\n  }\n\n  _groupActiveSprites(\n    activeSprites: Sprite[],\n  ): { transition: Transition; duration: number; sprites: Sprite[] }[] {\n    let groups = [] as ReturnType<AnimatedOrphans['_groupActiveSprites']>;\n    for (let _sprite of activeSprites) {\n      // ts workaround for https://github.com/microsoft/TypeScript/issues/35940\n      let sprite: Sprite = _sprite;\n      sprite.assertHasOwner();\n      let { transition, duration } = this._childToTransition.get(sprite.owner);\n      let group = groups.find((g) => g.transition === transition);\n      if (!group) {\n        group = { transition, duration, sprites: [] };\n        groups.push(group);\n      }\n      group.sprites.push(sprite);\n    }\n    return groups;\n  }\n\n  _prepareSprite(sprite: Sprite) {\n    sprite.hide();\n    let newElement = sprite.element.cloneNode(true) as HTMLElement | SVGElement;\n    continueMotions(sprite.element, newElement);\n    sprite.element = newElement;\n    return sprite;\n  }\n\n  _onFirstMotionStart(activeSprites: Sprite[], cycle: number, sprite: Sprite) {\n    if (activeSprites.indexOf(sprite) === -1) {\n      // in most animators, sprites are still living in their normal place in\n      // the DOM, and so they will necessarily start out with their appearance\n      // matching initialComputedStyles. But here we're dealing with an orphan\n      // who may have lost inherited styles. So we manually re-apply the\n      // initialComputedStyles that were snapshotted before it was moved. See\n      // COPIED_CSS_PROPERTIES to see exactly which property we copy (we don't\n      // do all of them, that sounds expensive).\n      //\n      // Also, unfortunately getComputedStyles has legacy behavior for\n      // line-height that gives us the \"used value\" not the \"computed value\".\n      // The used value doesn't inherit correctly, so we can't set it here, so\n      // we're pulling that one out.\n      let s: Record<string, any> = Object.assign(\n        {},\n        sprite.initialComputedStyle,\n      );\n      delete s['line-height'];\n      sprite.applyStyles(s);\n\n      this.element.appendChild(sprite.element);\n      sprite.lock();\n      sprite.reveal();\n      activeSprites.push(sprite);\n      this._elementToChild.set(sprite.element, sprite.owner);\n    }\n    sprite.assertHasOwner();\n    sprite.owner.block(cycle);\n  }\n\n  _onMotionStart(cycle: number, sprite: Sprite) {\n    sprite.assertHasOwner();\n    sprite.reveal();\n    sprite.owner.block(cycle);\n  }\n\n  _onMotionEnd(cycle: number, sprite: Sprite) {\n    sprite.assertHasOwner();\n    sprite.owner.unblock(cycle);\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#animated-each this.items key=this.key rules=this.rules use=this.use duration=this.duration group=this.group watch=this.watch initialInsertion=this.initialInsertion finalRemoval=this.finalRemoval as |item|}}\\n  {{yield item}}\\n{{/animated-each}}\\n\")","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport { A } from '@ember/array';\n\nimport type { AnimatedEachSignature } from './animated-each.ts';\n\ninterface AnimatedValueSignature<T> {\n  Args: {\n    Positional: [T];\n    Named: AnimatedEachSignature<[T]>['Args']['Named'];\n  };\n  Blocks: {\n    default: [T];\n  };\n}\n\n/**\n  A component that animates when a single value changes.\n  Animated-value uses the same arguments as animated-each.\n  ```hbs\n    <AnimatedContainer>\n      {{#animated-value this.counter rules=this.rules duration=100 as |v|}}\n          <span class=\"numbers\">{{v}}</span>\n      {{/animated-value}}\n    </AnimatedContainer>\n\n    <button {{action \"increment\"}}>+</button>\n    <button {{action \"decrement\"}}>-</button>\n  ```\n  ```js\n  import Component from '@ember/component';\n  import { toLeft, toRight } from 'ember-animated/transitions/move-over';\n\n  export default Component.extend({\n    rules({ oldItems, newItems }) {\n      if (oldItems[0] < newItems[0]) {\n        return toLeft;\n      } else {\n        return toRight;\n      }\n    },\n\n    counter: 10,\n\n    actions: {\n      increment() {\n        this.set('counter', this.get('counter') + 1);\n      },\n      decrement() {\n        this.set('counter', this.get('counter') - 1);\n      }\n    }\n  });\n  ```\n  @class animated-value\n  @public\n*/\n\nexport default class AnimatedValueComponent<T> extends Component<\n  AnimatedValueSignature<T>\n> {\n  /**\n   * The data you are trying to render.\n    @argument items\n    @type unknown\n  */\n  value!: T;\n\n  tagName = '';\n\n  finalRemoval: AnimatedEachSignature<T>['Args']['Named']['finalRemoval'];\n  initialInsertion: AnimatedEachSignature<T>['Args']['Named']['initialInsertion'];\n  watch: AnimatedEachSignature<T>['Args']['Named']['watch'];\n  key: AnimatedEachSignature<T>['Args']['Named']['key'];\n  group: AnimatedEachSignature<T>['Args']['Named']['group'];\n  rules: AnimatedEachSignature<T>['Args']['Named']['rules'];\n  use: AnimatedEachSignature<T>['Args']['Named']['use'];\n  duration: AnimatedEachSignature<T>['Args']['Named']['duration'];\n\n  static positionalParams = ['value'];\n\n  @computed('value')\n  get items(): T[] {\n    return A([this.value]);\n  }\n}\n","import { warn } from '@ember/debug';\nimport Component from '@ember/component';\nimport { componentNodes } from '../-private/ember-internals.ts';\nimport type Child from '../-private/child.ts';\n\ninterface EaListElementSignature<T = unknown> {\n  Args: {\n    Named: {\n      child: T;\n      elementToChild: WeakMap<Element, Child>;\n    };\n  };\n  Blocks: {\n    default: [T, number];\n  };\n}\n\n/*\n   This component has one job: tracking which DOM elements correspond\n   with which list elements.\n*/\n\nexport default class EaListElement extends Component<EaListElementSignature> {\n  tagName = '';\n  isEmberAnimatedListElement = true;\n\n  child!: Child;\n  elementToChild!: Map<Element, Child>;\n\n  didRender() {\n    super.didRender();\n    let mapping = this.elementToChild;\n    let child = this.child;\n    this._forEachElement((elt) => {\n      mapping.set(elt, child);\n    });\n  }\n\n  _forEachElement(fn: (elt: Element) => void) {\n    let { firstNode, lastNode } = componentNodes(this as unknown as Component);\n    let node: Node | null = firstNode;\n    while (node) {\n      if (node.nodeType === Node.ELEMENT_NODE) {\n        fn(node as Element);\n      } else if (!/^\\s*$/.test(node.textContent!)) {\n        warn('Found bare text content inside an animator', false, {\n          id: 'ember-animated-bare-text',\n        });\n      }\n      if (node === lastNode) {\n        break;\n      }\n      node = node.nextSibling;\n    }\n  }\n}\n","// Polyfill Element.remove on IE11\n// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\n\n// interface window {\n//   Element: any;\n//   CharacterData: any;\n//   DocumentType: any;\n// }\n\nconst classPrototypes = [\n  window.Element,\n  window.CharacterData,\n  window.DocumentType,\n]\n  .filter((klass) => klass)\n  .map((klass) => klass.prototype);\n\n(function (arr) {\n  arr.forEach(function (item) {\n    if (Object.prototype.hasOwnProperty.call(item, 'remove')) {\n      return;\n    }\n    Object.defineProperty(item, 'remove', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: function remove() {\n        this.parentNode.removeChild(this);\n      },\n    });\n  });\n})(classPrototypes);\n","import type EmberObject from '@ember/object';\nimport { computed } from '@ember/object';\nimport { A } from '@ember/array';\nimport Service from '@ember/service';\nimport type { Task } from '../-private/ember-scheduler.ts';\nimport { task } from '../-private/ember-scheduler.ts';\nimport {\n  microwait,\n  rAF,\n  afterRender,\n  allSettled,\n} from '../-private/concurrency-helpers.ts';\nimport type Sprite from '../-private/sprite.ts';\nimport type Child from '../-private/child';\nimport type { Transition } from '../-private/transition.ts';\n\ninterface Animator extends EmberObject {\n  beginStaticMeasurement(): void;\n  endStaticMeasurement(): void;\n  isAnimating: boolean;\n}\n\nexport type OrphanObserver = (\n  removed: Sprite[],\n  transition: Transition,\n  duration: number,\n  shouldAnimateRemoved: boolean,\n) => void;\n\ntype AnimationObserver = (args: {\n  task: Promise<void>;\n  duration: number;\n}) => void;\n\ntype AncestorObserver = (state: Child['state']) => void;\n\ninterface BaseComponentLike extends EmberObject {\n  parentView: ComponentLike | undefined;\n}\n\ninterface AnimatedListElement extends BaseComponentLike {\n  isEmberAnimatedListElement: true;\n  child: Child;\n}\n\ntype ComponentLike = BaseComponentLike | AnimatedListElement;\n\ninterface Measurement {\n  fn: () => void;\n  resolved: boolean;\n  value: any;\n}\n\ninterface Rendezvous {\n  inserted: Sprite[];\n  kept: Sprite[];\n  removed: Sprite[];\n  matches: Map<Sprite, Sprite>;\n  runAnimationTask: Promise<void>;\n  otherTasks: Map<Promise<void>, true>;\n}\n\nexport default class MotionService extends Service {\n  _rendezvous: Rendezvous[] = [];\n  _measurements: Measurement[] = [];\n  _animators = A<Animator>();\n  _orphanObserver: OrphanObserver | null = null;\n  _animationObservers: AnimationObserver[] = [];\n  _descendantObservers: {\n    component: ComponentLike;\n    fn: AnimationObserver;\n  }[] = [];\n  _ancestorObservers: WeakMap<ComponentLike, Map<AncestorObserver, string>> =\n    new WeakMap();\n  _beacons: { [name: string]: Sprite } | null = null;\n\n  // === Notification System ===\n\n  // Ever animator should register and unregister itself so we know\n  // when there are any animations running. Animators are required to\n  // have:\n  //    - an isAnimating property\n  //    - beginStaticMeasurement and endStaticMeasurement methods\n  register(animator: Animator) {\n    this._animators.pushObject(animator);\n    return this;\n  }\n  unregister(animator: Animator) {\n    this._animators.removeObject(animator);\n    return this;\n  }\n\n  // Register to receive any sprites that are orphaned by a destroyed\n  // animator.\n  observeOrphans(fn: OrphanObserver) {\n    if (this._orphanObserver) {\n      throw new Error(\n        'Only one animated-orphans component can be used at one time',\n      );\n    }\n    this._orphanObserver = fn;\n    return this;\n  }\n  unobserveOrphans(fn: OrphanObserver) {\n    if (this._orphanObserver === fn) {\n      this._orphanObserver = null;\n    }\n    return this;\n  }\n\n  // Register to know when an animation is starting anywhere in the app.\n  observeAnimations(fn: AnimationObserver) {\n    this._animationObservers.push(fn);\n    return this;\n  }\n  unobserveAnimations(fn: AnimationObserver) {\n    let index = this._animationObservers.indexOf(fn);\n    if (index !== -1) {\n      this._animationObservers.splice(index, 1);\n    }\n    return this;\n  }\n\n  // Register to know when an animation is starting within the\n  // descendants of the given component\n  observeDescendantAnimations(component: ComponentLike, fn: AnimationObserver) {\n    this._descendantObservers.push({ component, fn });\n    return this;\n  }\n  unobserveDescendantAnimations(\n    component: ComponentLike,\n    fn: AnimationObserver,\n  ) {\n    let entry = this._descendantObservers.find(\n      (e) => e.component === component && e.fn === fn,\n    );\n    if (entry) {\n      this._descendantObservers.splice(\n        this._descendantObservers.indexOf(entry),\n        1,\n      );\n    }\n    return this;\n  }\n\n  // Register to know when an animation is starting among the\n  // ancestors of the given component. The fn will be told whether\n  // component is going to be destroyed or not at the end of the\n  // animation.\n  observeAncestorAnimations(component: ComponentLike, fn: AncestorObserver) {\n    let id;\n    for (let ancestorComponent of ancestorsOf(component)) {\n      // when we find an animated list element, we save its ID\n      if ('isEmberAnimatedListElement' in ancestorComponent) {\n        id = ancestorComponent.child.id;\n      } else if (id != null) {\n        // if we found an ID on the last loop, now we've got the list\n        // element's parent which is the actual animator.\n        let observers = this._ancestorObservers.get(ancestorComponent);\n        if (!observers) {\n          this._ancestorObservers.set(\n            ancestorComponent,\n            (observers = new Map()),\n          );\n        }\n        observers.set(fn, id);\n        id = null;\n      }\n    }\n    return this;\n  }\n  unobserveAncestorAnimations(component: ComponentLike, fn: AncestorObserver) {\n    for (let ancestorComponent of ancestorsOf(component)) {\n      let observers = this._ancestorObservers.get(ancestorComponent);\n      if (observers) {\n        observers.delete(fn);\n      }\n    }\n    return this;\n  }\n\n  // This is a publicly visible property you can use to know if any animations\n  // are running. It's timing is deliberately not synchronous, so that you can\n  // bind it into a template without getting double-render errors.\n  //\n  // We have an un-observed dependency on an internal property *on purpose*, so\n  // this lint rule needs to be disabled:\n  //\n  // eslint-disable-next-line ember/require-computed-property-dependencies\n  @computed()\n  get isAnimating(): boolean {\n    return this.isAnimatingSync;\n  }\n\n  // Synchronously updated version of isAnimating. If you try to\n  // depend on this in a template you will get double-render errors\n  // (because the act of rendering can cause animations to begin).\n  @computed('_animators.@each.isAnimating')\n  get isAnimatingSync() {\n    return this._animators.any((animator) => animator.isAnimating);\n  }\n\n  // Invalidation support for isAnimating\n  @task(function* (this: MotionService) {\n    yield rAF();\n    this.notifyPropertyChange('isAnimating');\n  }).observes('isAnimatingSync')\n  _invalidateIsAnimating!: Task;\n\n  @task(function* (this: MotionService) {\n    // we are idle if we experience two frames in a row with nothing\n    // animating.\n    while (true) {\n      yield rAF();\n      if (!this.isAnimatingSync) {\n        yield rAF();\n        if (!this.isAnimatingSync) {\n          return;\n        }\n      }\n    }\n  })\n  waitUntilIdle!: Task;\n\n  matchDestroyed(\n    removed: Sprite[],\n    transition: Transition,\n    duration: number,\n    shouldAnimateRemoved: boolean,\n  ) {\n    if (this._orphanObserver && removed.length > 0) {\n      // if these orphaned sprites may be capable of animating,\n      // delegate them to the orphanObserver. It will do farMatching\n      // for them.\n      this._orphanObserver(removed, transition, duration, shouldAnimateRemoved);\n    } else {\n      // otherwise, we make them available for far matching but they\n      // can't be animated.\n      this.farMatch.perform(null, [], [], removed, true);\n    }\n  }\n\n  hasBeacon(name: string) {\n    return this._beacons?.[name];\n  }\n\n  @task(function* (this: MotionService, name: string, beacon: Sprite) {\n    if (!this._beacons) {\n      this._beacons = {};\n    }\n    this._beacons[name] = beacon;\n    // allows other farMatches to start\n    yield microwait();\n    // allows other farMatches to finish\n    yield microwait();\n    this._beacons = null;\n  })\n  addBeacon!: Task;\n\n  @task(function* (\n    this: MotionService,\n    runAnimationTask: Promise<void>,\n    inserted: Sprite[],\n    kept: Sprite[],\n    removed: Sprite[],\n    longWait = false,\n  ) {\n    let matches = new Map() as Map<Sprite, Sprite>;\n    let mine = {\n      inserted,\n      kept,\n      removed,\n      matches,\n      runAnimationTask,\n      otherTasks: new Map(),\n    };\n    this._rendezvous.push(mine);\n    yield microwait();\n    if (longWait) {\n      // used by matchDestroyed because it gets called earlier in the\n      // render cycle, so it needs to linger longer in order to\n      // coincide with other farMatches.\n      yield afterRender();\n      yield microwait();\n      yield microwait();\n    }\n\n    if (this.farMatch.concurrency > 1) {\n      this._rendezvous.forEach((target) => {\n        if (target === mine) {\n          return;\n        }\n        performMatches(mine, target);\n        performMatches(target, mine);\n      });\n    }\n    this._rendezvous.splice(this._rendezvous.indexOf(mine), 1);\n    return {\n      farMatches: matches,\n      matchingAnimatorsFinished: allSettled([...mine.otherTasks.keys()]),\n      beacons: this._beacons,\n    };\n  })\n  farMatch!: Task;\n\n  willAnimate({\n    task,\n    duration,\n    component,\n    children,\n  }: {\n    task: Promise<void>;\n    duration: number;\n    component: ComponentLike;\n    children: Child[];\n  }) {\n    let message = { task, duration };\n\n    // tell any of our ancestors who are observing their descendants\n    let ancestors = [...ancestorsOf(component)];\n    for (let { component: observingComponent, fn } of this\n      ._descendantObservers) {\n      if (ancestors.indexOf(observingComponent) !== -1) {\n        fn(message);\n      }\n    }\n\n    // tell any of our descendants who are observing their ancestors\n    let observers = this._ancestorObservers.get(component);\n    if (observers) {\n      for (let [fn, id] of observers.entries()) {\n        let child = children.find((child) => child.id === id);\n        if (child) {\n          fn(child.state);\n        } // the else case here applies to descendants that are about\n        // to be unrendered (not animated away -- immediately\n        // dropped). They will still have an opportunity to animate\n        // too, but they do it via their own willDestroyElement\n        // hook, not the this early-warning hook.\n      }\n    }\n\n    // tell anybody who is listening for all animations\n    for (let fn of this._animationObservers) {\n      fn(message);\n    }\n  }\n\n  *staticMeasurement(fn: Measurement['fn']) {\n    let measurement: Measurement = { fn, resolved: false, value: null };\n    this._measurements.push(measurement);\n    try {\n      // allow all concurrent animators to join in with our single\n      // measurement step instead of having each trigger its own reflow.\n      yield microwait();\n\n      if (!measurement.resolved) {\n        // we are the first concurrent task to wake up, so we do the\n        // actual resolution for everyone.\n        let animators = this._animators;\n        animators.forEach((animator) => animator.beginStaticMeasurement());\n        this._measurements.forEach((m) => {\n          try {\n            m.value = m.fn();\n          } catch (err) {\n            setTimeout(function () {\n              throw err;\n            }, 0);\n          }\n          m.resolved = true;\n        });\n        animators.forEach((animator) => animator.endStaticMeasurement());\n      }\n      return measurement.value;\n    } finally {\n      this._measurements.splice(this._measurements.indexOf(measurement), 1);\n    }\n  }\n}\n\nfunction performMatches(sink: Rendezvous, source: Rendezvous) {\n  sink.inserted.concat(sink.kept).forEach((sprite) => {\n    let match = source.removed.find(\n      // TODO: an OwnedSprite type could eliminate the need for these\n      // non-nullable casts.\n      (mySprite) =>\n        sprite.owner!.group == mySprite.owner!.group &&\n        sprite.owner!.id === mySprite.owner!.id,\n    );\n    if (match) {\n      sink.matches.set(sprite, match);\n      sink.otherTasks.set(source.runAnimationTask, true);\n      source.matches.set(match, sprite);\n      source.otherTasks.set(sink.runAnimationTask, true);\n    }\n  });\n}\n\nfunction* ancestorsOf(component: ComponentLike) {\n  let pointer = component.parentView;\n  while (pointer) {\n    yield pointer;\n    pointer = pointer.parentView;\n  }\n}\n\ndeclare module '@ember/service' {\n  interface Registry {\n    '-ea-motion': MotionService;\n  }\n}\n","import { helper as buildHelper } from '@ember/component/helper';\n\nexport function assign(params) {\n  return Object.assign({}, ...params);\n}\n\nexport default buildHelper(assign);\n","interface ScrollDeltas {\n  deltaX: number;\n  deltaY: number;\n}\ninterface ScrollInformation {\n  element: Element;\n  scrollLeft: number;\n  scrollTop: number;\n}\n\n/**\n * Mode that expresses the deltas in pixels.\n */\nexport const DOM_DELTA_PIXEL = 0;\n/**\n * Mode that expresses the deltas in lines.\n *\n * This only happens in Firefox for Windows.\n *\n * Reference: https://stackoverflow.com/a/37474225\n */\nexport const DOM_DELTA_LINE = 1;\n/**\n * Mode that expresses the deltas in pages.\n *\n * This only happens in Firefox for Windows with\n * a custom OS setting activated.\n *\n * Reference: https://stackoverflow.com/a/37474225\n */\nexport const DOM_DELTA_PAGE = 2;\n\n/**\n * Number of lines per page considered for\n * DOM_DELTA_PAGE.\n *\n */\nexport const LINES_PER_PAGE = 3;\n\nlet scrollLineHeight: number | undefined = undefined;\n\nexport function getScrollDeltas({\n  deltaX = 0,\n  deltaY = 0,\n  deltaMode = DOM_DELTA_PIXEL,\n}): ScrollDeltas {\n  if (deltaMode !== DOM_DELTA_PIXEL) {\n    if (deltaMode === DOM_DELTA_PAGE) {\n      deltaX *= LINES_PER_PAGE;\n      deltaY *= LINES_PER_PAGE;\n    }\n    const scrollLineHeight = getScrollLineHeight();\n    if (scrollLineHeight !== undefined) {\n      deltaX *= scrollLineHeight as number;\n      deltaY *= scrollLineHeight as number;\n    }\n  }\n\n  return { deltaX, deltaY };\n}\n\nexport function getScrollLineHeight(): number | undefined {\n  if (scrollLineHeight === undefined) {\n    const iframe = document.createElement('iframe');\n    iframe.src = '#';\n    iframe.style.position = 'absolute';\n    iframe.style.visibility = 'hidden';\n    iframe.style.width = '0px';\n    iframe.style.height = '0px';\n    iframe.style.border = 'none';\n    document.body.appendChild(iframe);\n    const iframeDocument = (iframe.contentWindow as Window).document;\n    iframeDocument.open();\n    iframeDocument.write(\n      '<!doctype html><html><head></head><body><span>X</span></body></html>',\n    );\n    iframeDocument.close();\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const body = iframeDocument.body as unknown as any;\n    scrollLineHeight = (body.firstElementChild as HTMLElement).offsetHeight;\n    document.body.removeChild(iframe);\n  }\n  return scrollLineHeight;\n}\n\nexport function getAvailableScroll(element: Element, container: Element) {\n  const availableScroll = {\n    deltaXNegative: 0,\n    deltaXPositive: 0,\n    deltaYNegative: 0,\n    deltaYPositive: 0,\n  };\n\n  let scrollLeftMax, scrollTopMax;\n  while (container.contains(element) || container === element) {\n    scrollLeftMax = element.scrollWidth - element.clientWidth;\n    scrollTopMax = element.scrollHeight - element.clientHeight;\n\n    availableScroll.deltaXNegative += -element.scrollLeft;\n    availableScroll.deltaXPositive += scrollLeftMax - element.scrollLeft;\n    availableScroll.deltaYNegative += -element.scrollTop;\n    availableScroll.deltaYPositive += scrollTopMax - element.scrollTop;\n    const parent = element.parentNode;\n    if (parent === null) break;\n    element = parent as Element;\n  }\n\n  return availableScroll;\n}\n\n/**\n * Calculates the scroll distribution for `element` inside` container.\n */\nfunction calculateScrollDistribution(\n  deltaX: number,\n  deltaY: number,\n  element: Element,\n  container: Element,\n  accumulator: ScrollInformation[] = [],\n): ScrollInformation[] {\n  const scrollInformation: ScrollInformation = {\n    element,\n    scrollLeft: 0,\n    scrollTop: 0,\n  };\n  const scrollLeftMax = element.scrollWidth - element.clientWidth;\n  const scrollTopMax = element.scrollHeight - element.clientHeight;\n\n  const availableScroll = {\n    deltaXNegative: -element.scrollLeft,\n    deltaXPositive: scrollLeftMax - element.scrollLeft,\n    deltaYNegative: -element.scrollTop,\n    deltaYPositive: scrollTopMax - element.scrollTop,\n  };\n\n  const elementStyle = window.getComputedStyle(element);\n\n  if (elementStyle.overflowX !== 'hidden') {\n    // The `deltaX` can be larger than the available scroll for the element, thus overshooting.\n    // The result of that is that it scrolls the element as far as possible. We don't need to\n    // calculate exactly because we reduce the amount of desired scroll for the\n    // parent elements by the correct amount below.\n    scrollInformation.scrollLeft = element.scrollLeft + deltaX;\n    if (deltaX > availableScroll.deltaXPositive) {\n      deltaX = deltaX - availableScroll.deltaXPositive;\n    } else if (deltaX < availableScroll.deltaXNegative) {\n      deltaX = deltaX - availableScroll.deltaXNegative;\n    } else {\n      deltaX = 0;\n    }\n  }\n\n  if (elementStyle.overflowY !== 'hidden') {\n    scrollInformation.scrollTop = element.scrollTop + deltaY;\n    if (deltaY > availableScroll.deltaYPositive) {\n      deltaY = deltaY - availableScroll.deltaYPositive;\n    } else if (deltaY < availableScroll.deltaYNegative) {\n      deltaY = deltaY - availableScroll.deltaYNegative;\n    } else {\n      deltaY = 0;\n    }\n  }\n\n  if (element !== container && (deltaX || deltaY)) {\n    return calculateScrollDistribution(\n      deltaX,\n      deltaY,\n      element.parentNode as Element,\n      container,\n      accumulator.concat([scrollInformation]),\n    );\n  }\n\n  return accumulator.concat([scrollInformation]);\n}\n\n// Recursively walks up scroll containers until the delta is distributed or we\n// run out of elements in the allowed-to-scroll container.\nexport function distributeScroll(\n  deltaX: number,\n  deltaY: number,\n  element: Element,\n  container: Element,\n) {\n  const scrollInfos = calculateScrollDistribution(\n    deltaX,\n    deltaY,\n    element,\n    container,\n  );\n  let info;\n\n  for (let i = 0; i < scrollInfos.length; i++) {\n    info = scrollInfos[i];\n    if (info) {\n      info.element.scrollLeft = info.scrollLeft;\n      info.element.scrollTop = info.scrollTop;\n    }\n  }\n}\n","import { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { getScrollParent } from '../utils/calculate-position.ts';\nimport {\n  distributeScroll,\n  getAvailableScroll,\n  getScrollDeltas,\n} from '../utils/scroll-helpers.ts';\nimport hasMoved from '../utils/has-moved.ts';\nimport { isTesting } from '@embroider/macros';\nimport { modifier } from 'ember-modifier';\nimport type { Dropdown, TRootEventType } from './basic-dropdown.ts';\nimport { runTask } from 'ember-lifeline';\n\nexport interface BasicDropdownContentSignature {\n  Element: Element;\n  Args: {\n    animationEnabled?: boolean;\n    transitioningInClass?: string;\n    transitionedInClass?: string;\n    transitioningOutClass?: string;\n    isTouchDevice?: boolean;\n    destination?: string;\n    destinationElement?: HTMLElement;\n    dropdown?: Dropdown;\n    renderInPlace?: boolean;\n    preventScroll?: boolean;\n    rootEventType?: TRootEventType;\n    top?: string | undefined;\n    left?: string | undefined;\n    right?: string | undefined;\n    width?: string | undefined;\n    height?: string | undefined;\n    otherStyles?: Record<string, string>;\n    hPosition?: string;\n    vPosition?: string;\n    dir?: string;\n    defaultClass?: string;\n    overlay?: boolean;\n    htmlTag?: string;\n    onFocusIn?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onFocusOut?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onMouseEnter?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onMouseLeave?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    shouldReposition?: (\n      mutations: MutationRecord[],\n      dropdown?: Dropdown,\n    ) => boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\ntype RootMouseDownHandler = (ev: MouseEvent | TouchEvent) => void;\n\nexport default class BasicDropdownContent extends Component<BasicDropdownContentSignature> {\n  transitioningInClass =\n    this.args.transitioningInClass || 'ember-basic-dropdown--transitioning-in';\n  transitionedInClass =\n    this.args.transitionedInClass || 'ember-basic-dropdown--transitioned-in';\n  transitioningOutClass =\n    this.args.transitioningOutClass ||\n    'ember-basic-dropdown--transitioning-out';\n  isTouchDevice =\n    this.args.isTouchDevice || Boolean(!!window && 'ontouchstart' in window);\n  dropdownId = `ember-basic-dropdown-content-${this.args.dropdown?.uniqueId}`;\n  private touchMoveEvent: TouchEvent | undefined;\n  private handleRootMouseDown?: RootMouseDownHandler;\n  private scrollableAncestors: Element[] = [];\n  private mutationObserver: MutationObserver | undefined;\n  @tracked private _contentWormhole?: Element;\n  @tracked animationClass = this.transitioningInClass;\n\n  get destinationElement(): Element | null {\n    if (this.args.destinationElement) {\n      return this.args.destinationElement;\n    }\n\n    if (!this.args.destination) {\n      return null;\n    }\n\n    const element = document.getElementById(this.args.destination);\n\n    if (element) {\n      return element;\n    }\n\n    if (this._contentWormhole) {\n      return (\n        this._contentWormhole.getRootNode() as HTMLElement\n      )?.querySelector('#' + this.args.destination);\n    }\n\n    return null;\n  }\n\n  get animationEnabled(): boolean {\n    const { animationEnabled: animationEnabledArg = true } = this.args;\n\n    return animationEnabledArg && !isTesting();\n  }\n\n  get positionStyles(): Record<string, string> {\n    const style: Record<string, string> = {};\n    if (this.args.top !== undefined) {\n      style['top'] = this.args.top;\n    }\n    if (this.args.left !== undefined) {\n      style['left'] = this.args.left;\n    }\n    if (this.args.right !== undefined) {\n      style['right'] = this.args.right;\n    }\n    if (this.args.width !== undefined) {\n      style['width'] = this.args.width;\n    }\n    if (this.args.height !== undefined) {\n      style['height'] = this.args.height;\n    }\n    return style;\n  }\n\n  /**\n   * Allows similair behaviour to `ember-composable-helpers`' `optional` helper.\n   * Avoids adding extra dependencies.\n   * Can be removed when the template `V1` compatability event handlers are removed.\n   *\n   * @see https://github.com/cibernox/ember-basic-dropdown/issues/498\n   * @memberof BasicDropdownContent\n   */\n  noop(): void {}\n\n  registerDropdownContentWormhole = modifier(\n    (dropdownContentWormhole: Element) => {\n      this._contentWormhole = dropdownContentWormhole;\n    },\n  );\n\n  respondToEvents = modifier(\n    (dropdownElement: Element): (() => void) => {\n      if (this.args.dropdown?.actions?.registerDropdownElement) {\n        this.args.dropdown.actions.registerDropdownElement(\n          dropdownElement as HTMLElement,\n        );\n      }\n\n      const selector = `[data-ebd-id=${this.args.dropdown?.uniqueId}-trigger]`;\n      let triggerElement: HTMLElement | null = null;\n      if (\n        typeof this.args.dropdown?.actions?.getTriggerElement === 'function'\n      ) {\n        triggerElement = this.args.dropdown?.actions?.getTriggerElement();\n      }\n      if (!triggerElement) {\n        triggerElement = document.querySelector(selector) as HTMLElement;\n      }\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this.handleRootMouseDown = (e: MouseEvent | TouchEvent): any => {\n        const target = (e.composedPath?.()[0] || e.target) as Element;\n        if (target === null) return;\n        if (\n          hasMoved(e as TouchEvent, this.touchMoveEvent) ||\n          dropdownElement.contains(target) ||\n          (triggerElement && triggerElement.contains(target))\n        ) {\n          this.touchMoveEvent = undefined;\n          return;\n        }\n\n        if (dropdownIsValidParent(triggerElement, target, this.dropdownId)) {\n          this.touchMoveEvent = undefined;\n          return;\n        }\n\n        if (this.args.dropdown?.actions?.close) {\n          this.args.dropdown.actions.close(e, true);\n        }\n      };\n      document.addEventListener(\n        this.args.rootEventType || 'click',\n        this.handleRootMouseDown,\n        true,\n      );\n\n      // We need to register closing event on shadow dom element, otherwise all clicks inside a shadow dom are not closing the dropdown\n      let rootElement;\n      if (\n        this._contentWormhole &&\n        this._contentWormhole.getRootNode() instanceof ShadowRoot\n      ) {\n        rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n      }\n\n      if (rootElement) {\n        rootElement.addEventListener(\n          this.args.rootEventType || 'click',\n          this.handleRootMouseDown,\n          true,\n        );\n      }\n\n      window.addEventListener('resize', this.runloopAwareReposition);\n      window.addEventListener('orientationchange', this.runloopAwareReposition);\n\n      if (this.isTouchDevice) {\n        document.addEventListener('touchstart', this.touchStartHandler, true);\n        document.addEventListener('touchend', this.handleRootMouseDown, true);\n\n        if (rootElement) {\n          rootElement.addEventListener(\n            'touchstart',\n            this.touchStartHandler,\n            true,\n          );\n          rootElement.addEventListener(\n            'touchend',\n            this.handleRootMouseDown,\n            true,\n          );\n        }\n      }\n      if (\n        triggerElement !== null &&\n        !(triggerElement.getRootNode() instanceof ShadowRoot)\n      ) {\n        this.scrollableAncestors = getScrollableAncestors(triggerElement);\n      }\n      this.addScrollHandling(dropdownElement);\n      return () => {\n        this.removeGlobalEvents();\n        this.removeScrollHandling();\n        this.scrollableAncestors = [];\n\n        document.removeEventListener(\n          this.args.rootEventType || 'click',\n          this.handleRootMouseDown as RootMouseDownHandler,\n          true,\n        );\n\n        let rootElement;\n        if (\n          this._contentWormhole &&\n          this._contentWormhole.getRootNode() instanceof ShadowRoot\n        ) {\n          rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n        }\n\n        if (rootElement) {\n          rootElement.removeEventListener(\n            this.args.rootEventType || 'click',\n            this.handleRootMouseDown as RootMouseDownHandler,\n            true,\n          );\n        }\n\n        if (this.isTouchDevice) {\n          document.removeEventListener(\n            'touchstart',\n            this.touchStartHandler,\n            true,\n          );\n          document.removeEventListener(\n            'touchend',\n            this.handleRootMouseDown as RootMouseDownHandler,\n            true,\n          );\n\n          if (rootElement) {\n            rootElement.removeEventListener(\n              'touchstart',\n              this.touchStartHandler,\n              true,\n            );\n            rootElement.removeEventListener(\n              'touchend',\n              this.handleRootMouseDown as RootMouseDownHandler,\n              true,\n            );\n          }\n        }\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  initiallyReposition = modifier(\n    () => {\n      // Escape autotracking frame and avoid backtracking re-render\n      Promise.resolve().then(() => {\n        this.args.dropdown?.actions.reposition();\n      });\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  animateInAndOut = modifier(\n    (dropdownElement: Element): (() => void) => {\n      if (!this.animationEnabled) return () => {};\n      waitForAnimations(dropdownElement, () => {\n        this.animationClass = this.transitionedInClass;\n      });\n      return () => {\n        if (!this.animationEnabled) return;\n        let parentElement =\n          dropdownElement.parentElement ?? this.destinationElement;\n        if (parentElement === null) return;\n        if (this.args.renderInPlace) {\n          parentElement = parentElement.parentElement;\n        }\n        if (parentElement === null) return;\n        const clone = dropdownElement.cloneNode(true) as Element;\n        clone.id = `${clone.id}--clone`;\n        clone.classList.remove(...this.transitioningInClass.split(' '));\n        clone.classList.add(...this.transitioningOutClass.split(' '));\n        parentElement.appendChild(clone);\n        this.animationClass = this.transitioningInClass;\n        waitForAnimations(clone, function () {\n          (parentElement as HTMLElement).removeChild(clone);\n        });\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  observeMutations = modifier(\n    (dropdownElement: Element): (() => void) => {\n      this.mutationObserver = new MutationObserver((mutations) => {\n        let shouldReposition = mutations.some(\n          (record: MutationRecord) =>\n            containsRelevantMutation(record.addedNodes) ||\n            containsRelevantMutation(record.removedNodes),\n        );\n\n        if (shouldReposition && this.args.shouldReposition) {\n          shouldReposition = this.args.shouldReposition(\n            mutations,\n            this.args.dropdown,\n          );\n        }\n\n        if (shouldReposition) {\n          this.runloopAwareReposition();\n        }\n      });\n      this.mutationObserver.observe(dropdownElement, {\n        childList: true,\n        subtree: true,\n      });\n      return () => {\n        if (this.mutationObserver !== undefined) {\n          this.mutationObserver.disconnect();\n          this.mutationObserver = undefined;\n        }\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  @action\n  touchStartHandler(): void {\n    document.addEventListener('touchmove', this.touchMoveHandler, true);\n\n    if (\n      this._contentWormhole &&\n      this._contentWormhole.getRootNode() instanceof ShadowRoot\n    ) {\n      const rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n      rootElement.addEventListener('touchmove', this.touchMoveHandler, true);\n    }\n  }\n\n  @action\n  touchMoveHandler(e: TouchEvent): void {\n    this.touchMoveEvent = e;\n    document.removeEventListener('touchmove', this.touchMoveHandler, true);\n\n    if (\n      this._contentWormhole &&\n      this._contentWormhole.getRootNode() instanceof ShadowRoot\n    ) {\n      const rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n      rootElement.removeEventListener('touchmove', this.touchMoveHandler, true);\n    }\n  }\n\n  @action\n  runloopAwareReposition(): void {\n    if (!this.args.dropdown) {\n      return;\n    }\n\n    runTask(this, () => {\n      if (!this.args.dropdown) {\n        return;\n      }\n\n      this.args.dropdown.actions.reposition();\n    });\n  }\n\n  @action\n  removeGlobalEvents(): void {\n    window.removeEventListener('resize', this.runloopAwareReposition);\n    window.removeEventListener(\n      'orientationchange',\n      this.runloopAwareReposition,\n    );\n  }\n\n  // Methods\n  addScrollHandling(dropdownElement: Element): void {\n    if (this.args.preventScroll === true) {\n      const wheelHandler = (event: WheelEvent) => {\n        const target = (event.composedPath?.()[0] || event.target) as Element;\n        if (target === null) return;\n        if (\n          dropdownElement.contains(target) ||\n          dropdownElement === event.target\n        ) {\n          // Discover the amount of scrollable canvas that is within the dropdown.\n          const availableScroll = getAvailableScroll(target, dropdownElement);\n\n          // Calculate what the event's desired change to that scrollable canvas is.\n          let { deltaX, deltaY } = getScrollDeltas(event);\n\n          // If the consequence of the wheel action would result in scrolling beyond\n          // the scrollable canvas of the dropdown, call preventDefault() and clamp\n          // the value of the delta to the available scroll size.\n          if (deltaX < availableScroll.deltaXNegative) {\n            deltaX = availableScroll.deltaXNegative;\n            event.preventDefault();\n          } else if (deltaX > availableScroll.deltaXPositive) {\n            deltaX = availableScroll.deltaXPositive;\n            event.preventDefault();\n          } else if (deltaY < availableScroll.deltaYNegative) {\n            deltaY = availableScroll.deltaYNegative;\n            event.preventDefault();\n          } else if (deltaY > availableScroll.deltaYPositive) {\n            deltaY = availableScroll.deltaYPositive;\n            event.preventDefault();\n          }\n\n          // Add back in the default behavior for the two good states that the above\n          // `preventDefault()` code will break.\n          // - Two-axis scrolling on a one-axis scroll container\n          // - The last relevant wheel event if the scroll is overshooting\n\n          // Also, don't attempt to do this if both of `deltaX` or `deltaY` are 0.\n          if (event.defaultPrevented && (deltaX || deltaY)) {\n            distributeScroll(deltaX, deltaY, target, dropdownElement);\n          }\n        } else {\n          // Scrolling outside of the dropdown is prohibited.\n          event.preventDefault();\n        }\n      };\n      document.addEventListener('wheel', wheelHandler, {\n        capture: true,\n        passive: false,\n      });\n\n      if (\n        this._contentWormhole &&\n        this._contentWormhole.getRootNode() instanceof ShadowRoot\n      ) {\n        const rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n        rootElement.addEventListener('wheel', wheelHandler, {\n          capture: true,\n          passive: false,\n        });\n      }\n\n      this.removeScrollHandling = () => {\n        document.removeEventListener('wheel', wheelHandler, { capture: true });\n\n        if (\n          this._contentWormhole &&\n          this._contentWormhole.getRootNode() instanceof ShadowRoot\n        ) {\n          const rootElement =\n            this._contentWormhole.getRootNode() as HTMLElement;\n          rootElement.removeEventListener('wheel', wheelHandler, {\n            capture: true,\n          });\n        }\n      };\n    } else {\n      this.addScrollEvents();\n      this.removeScrollHandling = this.removeScrollEvents;\n    }\n  }\n\n  // Assigned at runtime to ensure that changes to the `preventScroll` property\n  // don't result in not cleaning up after ourselves.\n  removeScrollHandling(): void {}\n\n  // These two functions wire up scroll handling if `preventScroll` is false.\n  // These trigger reposition of the dropdown.\n  addScrollEvents(): void {\n    window.addEventListener('scroll', this.runloopAwareReposition);\n    this.scrollableAncestors.forEach((el) => {\n      el.addEventListener('scroll', this.runloopAwareReposition);\n    });\n  }\n  removeScrollEvents(): void {\n    window.removeEventListener('scroll', this.runloopAwareReposition);\n    this.scrollableAncestors.forEach((el) => {\n      el.removeEventListener('scroll', this.runloopAwareReposition);\n    });\n  }\n}\n\nfunction containsRelevantMutation(nodeList: NodeList): boolean {\n  for (let i = 0; i < nodeList.length; i++) {\n    const node = nodeList[i];\n    if (\n      node !== undefined &&\n      node.nodeName !== '#comment' &&\n      !(node.nodeName === '#text' && node.nodeValue === '')\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// All ancestors with scroll (except the BODY, which is treated differently)\nfunction getScrollableAncestors(triggerElement: Element): Element[] {\n  const scrollableAncestors = [];\n  if (triggerElement) {\n    const parent = triggerElement.parentNode;\n    if (parent !== null) {\n      let nextScrollable: Element | undefined = getScrollParent(\n        parent as Element,\n      );\n      while (\n        nextScrollable &&\n        nextScrollable.tagName.toUpperCase() !== 'BODY' &&\n        nextScrollable.tagName.toUpperCase() !== 'HTML'\n      ) {\n        scrollableAncestors.push(nextScrollable);\n        const nextParent = nextScrollable.parentNode;\n        if (nextParent === null) {\n          nextScrollable = undefined;\n        } else {\n          nextScrollable = getScrollParent(nextParent as Element);\n        }\n      }\n    }\n  }\n  return scrollableAncestors;\n}\n\nfunction closestContent(el: Element): Element | null {\n  while (\n    el &&\n    (!el.classList || !el.classList.contains('ember-basic-dropdown-content'))\n  ) {\n    if (el.parentElement === null) return null;\n    el = el.parentElement;\n  }\n  return el;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction waitForAnimations(element: Element, callback: Function): void {\n  window.requestAnimationFrame(function () {\n    const computedStyle = window.getComputedStyle(element);\n    if (\n      computedStyle.animationName !== 'none' &&\n      computedStyle.animationPlayState === 'running'\n    ) {\n      const eventCallback = function () {\n        element.removeEventListener('animationend', eventCallback);\n        callback();\n      };\n      element.addEventListener('animationend', eventCallback);\n    } else {\n      callback();\n    }\n  });\n}\n\n/**\n * Evaluates if the given element is in a dropdown or any of its parent dropdowns.\n *\n * @param {any} owner\n * @param {HTMLElement} el\n * @param {String} dropdownId\n */\nfunction dropdownIsValidParent(\n  triggerElement: HTMLElement | null,\n  el: Element,\n  dropdownId: string,\n): boolean {\n  const closestDropdown = closestContent(el);\n  if (closestDropdown === null) {\n    return false;\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const closestAttrs = closestDropdown.attributes as unknown as any;\n    const selector = `[aria-controls=${closestAttrs.id.value}]`;\n    const trigger =\n      document.querySelector(selector) ??\n      (triggerElement?.getRootNode() as HTMLElement)?.querySelector(selector);\n    if (trigger === null) return false;\n    const parentDropdown = closestContent(trigger);\n    if (parentDropdown === null) return false;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const parentAttrs = parentDropdown.attributes as unknown as any;\n    return (\n      (parentDropdown && parentAttrs.id.value === dropdownId) ||\n      dropdownIsValidParent(triggerElement, parentDropdown, dropdownId)\n    );\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { Dropdown } from './basic-dropdown';\n\nexport interface BasicDropdownTriggerSignature {\n  Element: Element;\n  Args: {\n    dropdown?: Dropdown;\n    eventType?: 'click' | 'mousedown';\n    stopPropagation?: boolean;\n    vPosition?: string;\n    hPosition?: string;\n    defaultClass?: string;\n    renderInPlace?: boolean;\n    htmlTag?: string;\n    onBlur?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onClick?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onFocus?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onFocusIn?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onFocusOut?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onKeyDown?: (dropdown?: Dropdown, event?: KeyboardEvent) => void;\n    onMouseDown?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onMouseEnter?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onMouseLeave?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onTouchEnd?: (dropdown?: Dropdown, event?: TouchEvent) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class BasicDropdownTrigger extends Component<BasicDropdownTriggerSignature> {\n  // Actions\n  /**\n   * Allows similair behaviour to `ember-composable-helpers`' `optional` helper.\n   * Avoids adding extra dependencies.\n   * Can be removed when the template `V1` compatability event handlers are removed.\n   *\n   * @see https://github.com/cibernox/ember-basic-dropdown/issues/498\n   * @memberof BasicDropdownContent\n   */\n  noop(): void {}\n\n  @action\n  disableDocumentTextSelect(disable: boolean) {\n    if (disable) {\n      document.body.classList.add('ember-basic-dropdown-text-select-disabled');\n    } else {\n      document.body.classList.remove(\n        'ember-basic-dropdown-text-select-disabled',\n      );\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { getOwner } from '@ember/application';\n\nexport interface BasicDropdownWormholeSignature {\n  Element: Element;\n}\n\nexport default class BasicDropdownWormholeComponent extends Component<BasicDropdownWormholeSignature> {\n  get getDestinationId(): string {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    const config = getOwner(this).resolveRegistration('config:environment') as {\n      'ember-basic-dropdown'?: {\n        destination?: string;\n      };\n    };\n\n    return ((config['ember-basic-dropdown'] &&\n      config['ember-basic-dropdown'].destination) ||\n      'ember-basic-dropdown-wormhole') as string;\n  }\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { scheduleTask } from 'ember-lifeline';\nimport calculatePosition from '../utils/calculate-position.ts';\nimport type {\n  CalculatePosition,\n  CalculatePositionResult,\n  HorizontalPosition,\n  VerticalPosition,\n} from '../utils/calculate-position.ts';\nimport { getOwner } from '@ember/application';\nimport type Owner from '@ember/owner';\nimport type { ComponentLike } from '@glint/template';\nimport type { BasicDropdownTriggerSignature } from './basic-dropdown-trigger.ts';\nimport type { BasicDropdownContentSignature } from './basic-dropdown-content.ts';\n\nexport interface DropdownActions {\n  toggle: (e?: Event) => void;\n  close: (e?: Event, skipFocus?: boolean) => void;\n  open: (e?: Event) => void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  reposition: (...args: any[]) => undefined | RepositionChanges;\n  registerTriggerElement: (e: HTMLElement) => void;\n  registerDropdownElement: (e: HTMLElement) => void;\n  getTriggerElement: () => HTMLElement | null;\n}\nexport interface Dropdown {\n  uniqueId: string;\n  disabled: boolean;\n  isOpen: boolean;\n  actions: DropdownActions;\n}\n\nexport type TRootEventType = 'click' | 'mousedown';\n\nconst UNINITIALIZED = {};\nconst IGNORED_STYLES = ['top', 'left', 'right', 'width', 'height'];\ninterface BasicDropdownSignature {\n  Element: HTMLElement;\n  Args: BasicDropdownArgs;\n  Blocks: {\n    default: [\n      {\n        uniqueId: string;\n        disabled: boolean;\n        isOpen: boolean;\n        actions: DropdownActions;\n        Trigger: ComponentLike<BasicDropdownTriggerSignature>;\n        Content: ComponentLike<BasicDropdownContentSignature>;\n      },\n    ];\n  };\n}\n\ninterface BasicDropdownArgs {\n  initiallyOpened?: boolean;\n  renderInPlace?: boolean;\n  verticalPosition?: VerticalPosition;\n  horizontalPosition?: HorizontalPosition;\n  destination?: string;\n  destinationElement?: HTMLElement;\n  disabled?: boolean;\n  dropdownId?: string;\n  rootEventType?: TRootEventType;\n  preventScroll?: boolean;\n  matchTriggerWidth?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  onInit?: Function;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  registerAPI?: Function;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  onOpen?: Function;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  onClose?: Function;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  triggerComponent?: string | ComponentLike<any> | undefined;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  contentComponent?: string | ComponentLike<any> | undefined;\n  calculatePosition?: CalculatePosition;\n}\n\ntype RepositionChanges = {\n  hPosition: HorizontalPosition;\n  vPosition: VerticalPosition;\n  otherStyles: Record<string, string | number | undefined>;\n  top?: string | undefined;\n  left?: string | undefined;\n  right?: string | undefined;\n  width?: string | undefined;\n  height?: string | undefined;\n};\n\nexport default class BasicDropdown extends Component<BasicDropdownSignature> {\n  @tracked hPosition: HorizontalPosition | null = null;\n  @tracked vPosition: VerticalPosition | null = null;\n  @tracked top: string | undefined;\n  @tracked left: string | undefined;\n  @tracked right: string | undefined;\n  @tracked width: string | undefined;\n  @tracked height: string | undefined;\n  @tracked otherStyles: Record<string, string | number | undefined> = {};\n  @tracked isOpen = this.args.initiallyOpened || false;\n  @tracked renderInPlace =\n    this.args.renderInPlace !== undefined ? this.args.renderInPlace : false;\n  private previousVerticalPosition?: VerticalPosition | undefined;\n  private previousHorizontalPosition?: HorizontalPosition | undefined;\n  private triggerElement: HTMLElement | null = null;\n  private dropdownElement: HTMLElement | null = null;\n\n  private _uid = guidFor(this);\n  private _dropdownId: string =\n    this.args.dropdownId || `ember-basic-dropdown-content-${this._uid}`;\n  private _previousDisabled = UNINITIALIZED;\n  private _actions: DropdownActions = {\n    open: this.open,\n    close: this.close,\n    toggle: this.toggle,\n    reposition: this.reposition,\n    registerTriggerElement: this.registerTriggerElement,\n    registerDropdownElement: this.registerDropdownElement,\n    getTriggerElement: () => this.triggerElement,\n  };\n\n  private get horizontalPosition() {\n    return this.args.horizontalPosition || 'auto'; // auto-right | right | center | left\n  }\n\n  private get verticalPosition() {\n    return this.args.verticalPosition || 'auto'; // above | below\n  }\n\n  get destination(): string {\n    return this.args.destination || this._getDestinationId();\n  }\n\n  get destinationElement(): HTMLElement | null {\n    if (this.args.destinationElement) {\n      return this.args.destinationElement;\n    }\n\n    const element = document.getElementById(this.destination);\n\n    if (element) {\n      return element;\n    }\n\n    if (\n      this.triggerElement &&\n      this.triggerElement.getRootNode() instanceof ShadowRoot\n    ) {\n      return (this.triggerElement.getRootNode() as HTMLElement)?.querySelector(\n        `#${this.destination}`,\n      );\n    }\n\n    return null;\n  }\n\n  get disabled(): boolean {\n    const newVal = this.args.disabled || false;\n    if (\n      this._previousDisabled !== UNINITIALIZED &&\n      this._previousDisabled !== newVal\n    ) {\n      scheduleTask(this, 'actions', () => {\n        if (newVal && this.publicAPI.isOpen) {\n          // eslint-disable-next-line ember/no-side-effects\n          this.isOpen = false;\n        }\n        if (this.args.registerAPI) {\n          this.args.registerAPI(this.publicAPI);\n        }\n      });\n    }\n    // eslint-disable-next-line ember/no-side-effects\n    this._previousDisabled = newVal;\n    return newVal;\n  }\n\n  get publicAPI(): Dropdown {\n    return {\n      uniqueId: this._uid,\n      isOpen: this.isOpen,\n      disabled: this.disabled,\n      actions: this._actions,\n    };\n  }\n\n  // Lifecycle hooks\n  constructor(owner: Owner, args: BasicDropdownArgs) {\n    super(owner, args);\n    if (this.args.onInit) {\n      this.args.onInit(this.publicAPI);\n    }\n    if (this.args.registerAPI) {\n      this.args.registerAPI(this.publicAPI);\n    }\n  }\n\n  override willDestroy(): void {\n    super.willDestroy();\n    if (this.args.registerAPI) {\n      this.args.registerAPI(null);\n    }\n  }\n\n  // Actions\n  @action\n  open(e?: Event): void {\n    if (this.isDestroyed) {\n      return;\n    }\n    if (this.publicAPI.disabled || this.publicAPI.isOpen) {\n      return;\n    }\n    if (this.args.onOpen && this.args.onOpen(this.publicAPI, e) === false) {\n      return;\n    }\n    this.isOpen = true;\n    if (this.args.registerAPI) {\n      this.args.registerAPI(this.publicAPI);\n    }\n    const trigger = this._getTriggerElement();\n    if (trigger) {\n      const parent = trigger.parentElement;\n      if (parent) {\n        parent.setAttribute('aria-owns', this._dropdownId);\n      }\n    }\n  }\n\n  @action\n  close(e?: Event, skipFocus?: boolean): void {\n    if (this.isDestroyed) {\n      return;\n    }\n    if (this.publicAPI.disabled || !this.publicAPI.isOpen) {\n      return;\n    }\n    if (this.args.onClose && this.args.onClose(this.publicAPI, e) === false) {\n      return;\n    }\n    if (this.isDestroyed) {\n      return; // To check that the `onClose` didn't destroy the dropdown\n    }\n    this.hPosition = this.vPosition = null;\n    this.top = this.left = this.right = this.width = this.height = undefined;\n    this.previousVerticalPosition = this.previousHorizontalPosition = undefined;\n    this.isOpen = false;\n    if (this.args.registerAPI) {\n      this.args.registerAPI(this.publicAPI);\n    }\n    const trigger = this._getTriggerElement();\n    if (!trigger) {\n      return;\n    }\n    const parent = trigger.parentElement;\n    if (parent) {\n      parent.removeAttribute('aria-owns');\n    }\n    if (skipFocus) {\n      return;\n    }\n    if (trigger.tabIndex > -1) {\n      trigger.focus();\n    }\n  }\n\n  @action\n  toggle(e?: Event): void {\n    if (this.publicAPI.isOpen) {\n      this.close(e);\n    } else {\n      this.open(e);\n    }\n  }\n\n  @action\n  reposition(): undefined | RepositionChanges {\n    if (!this.publicAPI.isOpen) {\n      return;\n    }\n    const dropdownElement = this._getDropdownElement();\n    const triggerElement = this._getTriggerElement();\n    if (!dropdownElement || !triggerElement || !this.destinationElement) {\n      return;\n    }\n\n    const {\n      horizontalPosition,\n      verticalPosition,\n      previousHorizontalPosition,\n      previousVerticalPosition,\n    } = this;\n    const { renderInPlace = false, matchTriggerWidth = false } = this.args;\n    const calculatePositionFn =\n      this.args.calculatePosition || calculatePosition;\n    const positionData = calculatePositionFn(\n      triggerElement,\n      dropdownElement,\n      this.destinationElement,\n      {\n        horizontalPosition,\n        verticalPosition,\n        previousHorizontalPosition,\n        previousVerticalPosition,\n        renderInPlace,\n        matchTriggerWidth,\n        dropdown: this,\n      },\n    );\n    return this.applyReposition(triggerElement, dropdownElement, positionData);\n  }\n\n  @action\n  registerTriggerElement(element: HTMLElement): void {\n    this.triggerElement = element;\n  }\n\n  @action\n  registerDropdownElement(element: HTMLElement): void {\n    this.dropdownElement = element;\n  }\n\n  applyReposition(\n    _trigger: Element,\n    dropdown: HTMLElement,\n    positions: CalculatePositionResult,\n  ): RepositionChanges {\n    const changes: RepositionChanges = {\n      hPosition: positions.horizontalPosition,\n      vPosition: positions.verticalPosition,\n      otherStyles: Object.assign({}, this.otherStyles),\n    };\n\n    if (positions.style) {\n      if (positions.style.top !== undefined) {\n        changes.top = `${positions.style.top}px`;\n      }\n      // The component can be aligned from the right or from the left, but not from both.\n      if (positions.style.left !== undefined) {\n        changes.left = `${positions.style.left}px`;\n        changes.right = undefined;\n        // Since we set the first run manually we may need to unset the `right` property.\n        if (positions.style.right !== undefined) {\n          positions.style.right = undefined;\n        }\n      } else if (positions.style.right !== undefined) {\n        changes.right = `${positions.style.right}px`;\n        changes.left = undefined;\n      }\n      if (positions.style.width !== undefined) {\n        changes.width = `${positions.style.width}px`;\n      }\n      if (positions.style.height !== undefined) {\n        changes.height = `${positions.style.height}px`;\n      }\n      if (this.top === undefined) {\n        // Bypass Ember on the first reposition only to avoid flickering.\n        for (const prop in positions.style) {\n          if (positions.style[prop] !== undefined) {\n            if (typeof positions.style[prop] === 'number') {\n              dropdown.style.setProperty(prop, `${positions.style[prop]}px`);\n            } else {\n              dropdown.style.setProperty(prop, `${positions.style[prop]}`);\n            }\n          }\n        }\n      }\n    }\n    for (const prop in positions.style) {\n      if (!IGNORED_STYLES.includes(prop)) {\n        changes.otherStyles[prop] = positions.style[prop];\n      }\n    }\n\n    this.hPosition = changes.hPosition;\n    this.vPosition = changes.vPosition;\n    this.top = changes.top;\n    this.left = changes.left;\n    this.right = changes.right;\n    this.width = changes.width;\n    this.height = changes.height;\n    this.otherStyles = changes.otherStyles;\n    this.previousHorizontalPosition = positions.horizontalPosition;\n    this.previousVerticalPosition = positions.verticalPosition;\n    return changes;\n  }\n\n  _getDestinationId(): string {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    const config = getOwner(this).resolveRegistration('config:environment') as {\n      environment: string;\n      APP: {\n        rootElement: string;\n      };\n      'ember-basic-dropdown': {\n        destination: string;\n      };\n    };\n\n    if (config.environment === 'test') {\n      // document doesn't exists in fastboot apps, for this reason we need this check\n      if (typeof document === 'undefined') {\n        return 'ember-basic-dropdown-wormhole';\n      }\n      const rootElement = config['APP']?.rootElement;\n      return (\n        document.querySelector(rootElement)?.id ??\n        'ember-basic-dropdown-wormhole'\n      );\n    }\n\n    return ((config['ember-basic-dropdown'] &&\n      config['ember-basic-dropdown'].destination) ||\n      'ember-basic-dropdown-wormhole') as string;\n  }\n\n  _getDropdownElement(): HTMLElement | null {\n    if (this.dropdownElement) {\n      return this.dropdownElement;\n    }\n\n    return document.querySelector(`[id=\"${this._dropdownId}\"]`);\n  }\n\n  _getTriggerElement(): HTMLElement | null {\n    if (this.triggerElement) {\n      return this.triggerElement;\n    }\n\n    return document.querySelector(\n      `[data-ebd-id=${this.publicAPI.uniqueId}-trigger]`,\n    );\n  }\n}\n","import Modifier from 'ember-modifier';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { isDestroyed, registerDestructor } from '@ember/destroyable';\nimport hasMoved from '../utils/has-moved.ts';\nimport type { Dropdown } from '../components/basic-dropdown';\nimport type Owner from '@ember/owner';\n\ninterface Signature {\n  Element: HTMLElement;\n  Args: {\n    Named: {\n      dropdown: Dropdown;\n      eventType?: 'click' | 'mousedown';\n      stopPropagation?: boolean;\n      [named: string]: unknown;\n    };\n    Positional: unknown[];\n  };\n}\n\nexport default class DropdownTriggerModifier extends Modifier<Signature> {\n  didSetup = false;\n\n  triggerElement: HTMLElement | undefined;\n\n  toggleIsBeingHandledByTouchEvents: boolean = false;\n  touchMoveEvent: TouchEvent | undefined;\n\n  dropdown?: Dropdown;\n  desiredEventType!: string;\n  stopPropagation: boolean | undefined;\n\n  constructor(owner: Owner, args: ArgsFor<Signature>) {\n    super(owner, args);\n    registerDestructor(this, cleanup);\n  }\n\n  override modify(\n    element: HTMLElement,\n    positional: PositionalArgs<Signature>,\n    named: NamedArgs<Signature>,\n  ): void {\n    assert('must be provided dropdown object', named.dropdown);\n    this.dropdown = named.dropdown;\n    this.desiredEventType = named.eventType ?? 'click';\n    this.stopPropagation = named.stopPropagation;\n\n    if (!this.didSetup) {\n      this.setup(element);\n      this.didSetup = true;\n    }\n    this.update(element, positional, named);\n  }\n\n  setup(element: HTMLElement) {\n    // Keep a reference to the element for cleanup\n    this.triggerElement = element;\n    if (this.dropdown?.actions?.registerTriggerElement) {\n      this.dropdown.actions.registerTriggerElement(element);\n    }\n\n    if (!element.getAttribute('role')) element.setAttribute('role', 'button');\n\n    element.addEventListener('click', this.handleMouseEvent);\n    element.addEventListener('mousedown', this.handleMouseEvent);\n    element.addEventListener('keydown', this.handleKeyDown);\n    element.addEventListener('touchstart', this.handleTouchStart, {\n      passive: false,\n    });\n    element.addEventListener('touchend', this.handleTouchEnd);\n  }\n\n  update(\n    element: HTMLElement,\n    _positional: PositionalArgs<Signature>,\n    named: NamedArgs<Signature>,\n  ) {\n    const { dropdown } = named;\n\n    element.setAttribute('data-ebd-id', `${dropdown.uniqueId}-trigger`);\n\n    if (element.getAttribute('aria-owns') === null) {\n      element.setAttribute(\n        'aria-owns',\n        `ember-basic-dropdown-content-${dropdown.uniqueId}`,\n      );\n    }\n\n    if (element.getAttribute('aria-controls') === null) {\n      element.setAttribute(\n        'aria-controls',\n        `ember-basic-dropdown-content-${dropdown.uniqueId}`,\n      );\n    }\n\n    element.setAttribute('aria-expanded', dropdown.isOpen ? 'true' : 'false');\n    element.setAttribute('aria-disabled', dropdown.disabled ? 'true' : 'false');\n  }\n\n  @action\n  handleMouseEvent(e: MouseEvent): void {\n    if (typeof document === 'undefined') return;\n    const { dropdown, desiredEventType, stopPropagation } = this;\n\n    if (isDestroyed(this) || !dropdown || dropdown.disabled) return;\n\n    const eventType = e.type;\n    const notLeftClick = e.button !== 0;\n    if (eventType !== desiredEventType || notLeftClick) return;\n\n    if (stopPropagation) e.stopPropagation();\n\n    if (this.toggleIsBeingHandledByTouchEvents) {\n      // Some devises have both touchscreen & mouse, and they are not mutually exclusive\n      // In those cases the touchdown handler is fired first, and it sets a flag to\n      // short-circuit the mouseup so the component is not opened and immediately closed.\n      this.toggleIsBeingHandledByTouchEvents = false;\n      return;\n    }\n    dropdown.actions.toggle(e);\n  }\n\n  @action\n  handleKeyDown(e: KeyboardEvent): void {\n    const disabled = this.dropdown?.disabled,\n      actions = this.dropdown?.actions;\n\n    if (disabled || !actions) return;\n    if (e.keyCode === 13) {\n      // Enter\n      actions.toggle(e);\n    } else if (e.keyCode === 32) {\n      // Space\n      e.preventDefault(); // prevents the space to trigger a scroll page-next\n      actions.toggle(e);\n    } else if (e.keyCode === 27) {\n      actions.close(e);\n    }\n  }\n\n  @action\n  handleTouchStart(): void {\n    document.addEventListener('touchmove', this._touchMoveHandler);\n    if (this.triggerElement?.getRootNode() instanceof ShadowRoot) {\n      (this.triggerElement?.getRootNode() as HTMLElement).addEventListener(\n        'touchmove',\n        this._touchMoveHandler,\n      );\n    }\n  }\n\n  @action\n  handleTouchEnd(e: TouchEvent): void {\n    this.toggleIsBeingHandledByTouchEvents = true;\n    const disabled = this.dropdown?.disabled,\n      actions = this.dropdown?.actions;\n\n    if ((e && e.defaultPrevented) || disabled || !actions) {\n      return;\n    }\n    if (!hasMoved(e, this.touchMoveEvent)) {\n      actions.toggle(e);\n    }\n    this.touchMoveEvent = undefined;\n    document.removeEventListener('touchmove', this._touchMoveHandler);\n    // This next three lines are stolen from hammertime. This prevents the default\n    // behaviour of the touchend, but synthetically trigger a focus and a (delayed) click\n    // to simulate natural behaviour.\n    const target = (e.composedPath?.()[0] || e.target) as HTMLElement;\n    if (target !== null) {\n      target.focus();\n    }\n    setTimeout(function () {\n      if (!e.target) {\n        return;\n      }\n      try {\n        const event = document.createEvent('MouseEvents');\n        event.initMouseEvent(\n          'click',\n          true,\n          true,\n          window,\n          0,\n          0,\n          0,\n          0,\n          0,\n          false,\n          false,\n          false,\n          false,\n          0,\n          null,\n        );\n        e.target.dispatchEvent(event);\n      } catch {\n        const event = new Event('click');\n        e.target.dispatchEvent(event);\n      }\n    }, 0);\n    e.preventDefault();\n  }\n\n  @action\n  _touchMoveHandler(e: TouchEvent): void {\n    this.touchMoveEvent = e;\n    document.removeEventListener('touchmove', this._touchMoveHandler);\n\n    if (this.triggerElement?.getRootNode() instanceof ShadowRoot) {\n      (this.triggerElement?.getRootNode() as HTMLElement).removeEventListener(\n        'touchmove',\n        this._touchMoveHandler,\n      );\n    }\n  }\n}\n\nfunction cleanup(instance: DropdownTriggerModifier) {\n  const { triggerElement } = instance;\n  if (triggerElement) {\n    if (typeof document !== 'undefined')\n      document.removeEventListener('touchmove', instance._touchMoveHandler);\n\n    if (triggerElement?.getRootNode() instanceof ShadowRoot) {\n      (triggerElement?.getRootNode() as HTMLElement).removeEventListener(\n        'touchmove',\n        instance._touchMoveHandler,\n      );\n    }\n\n    triggerElement.removeEventListener('click', instance.handleMouseEvent);\n    triggerElement.removeEventListener('mousedown', instance.handleMouseEvent);\n    triggerElement.removeEventListener('keydown', instance.handleKeyDown);\n    triggerElement.removeEventListener('touchstart', instance.handleTouchStart);\n    triggerElement.removeEventListener('touchend', instance.handleTouchEnd);\n  }\n}\n","export type VerticalPosition = 'auto' | 'above' | 'below';\nexport type HorizontalPosition =\n  | 'auto'\n  | 'auto-right'\n  | 'auto-left'\n  | 'left'\n  | 'right'\n  | 'center';\n\nexport interface CalculatePositionOptions {\n  horizontalPosition: HorizontalPosition;\n  verticalPosition: VerticalPosition;\n  matchTriggerWidth: boolean;\n  previousHorizontalPosition?: HorizontalPosition | undefined;\n  previousVerticalPosition?: VerticalPosition | undefined;\n  renderInPlace: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  dropdown: any;\n}\nexport type CalculatePositionResultStyle = {\n  top?: number | undefined;\n  left?: number | undefined;\n  right?: number | undefined;\n  width?: number | undefined;\n  height?: number | undefined;\n  [key: string]: string | number | undefined;\n};\nexport type CalculatePositionResult = {\n  horizontalPosition: HorizontalPosition;\n  verticalPosition: VerticalPosition;\n  style: CalculatePositionResultStyle;\n};\nexport type CalculatePosition = (\n  trigger: Element,\n  content: HTMLElement,\n  destination: HTMLElement,\n  options: CalculatePositionOptions,\n) => CalculatePositionResult;\n\nexport const calculateWormholedPosition: CalculatePosition = (\n  trigger,\n  content,\n  destination,\n  {\n    horizontalPosition,\n    verticalPosition,\n    matchTriggerWidth,\n    previousHorizontalPosition,\n    previousVerticalPosition,\n  },\n) => {\n  // Collect information about all the involved DOM elements\n  const scroll = { left: window.pageXOffset, top: window.pageYOffset };\n  let { left: triggerLeft, top: triggerTop } = trigger.getBoundingClientRect();\n  const { width: triggerWidth, height: triggerHeight } =\n    trigger.getBoundingClientRect();\n  const { height: dropdownHeight } = content.getBoundingClientRect();\n  let { width: dropdownWidth } = content.getBoundingClientRect();\n  const viewportWidth = document.body.clientWidth || window.innerWidth;\n  const style: CalculatePositionResultStyle = {};\n\n  // Apply containers' offset\n  let anchorElement = destination.parentNode as HTMLElement;\n\n  if (anchorElement instanceof ShadowRoot) {\n    anchorElement = anchorElement.host as HTMLElement;\n  }\n\n  let anchorPosition = window.getComputedStyle(anchorElement).position;\n  while (\n    anchorPosition !== 'relative' &&\n    anchorPosition !== 'absolute' &&\n    anchorElement.tagName.toUpperCase() !== 'BODY' &&\n    !(anchorElement.parentNode instanceof ShadowRoot)\n  ) {\n    anchorElement = anchorElement.parentNode as HTMLElement;\n    anchorPosition = window.getComputedStyle(anchorElement).position;\n  }\n  if (anchorPosition === 'relative' || anchorPosition === 'absolute') {\n    const rect = anchorElement.getBoundingClientRect();\n    triggerLeft = triggerLeft - rect.left;\n    triggerTop = triggerTop - rect.top;\n    const { offsetParent } = anchorElement;\n    if (offsetParent) {\n      triggerLeft -= offsetParent.scrollLeft;\n      triggerTop -= offsetParent.scrollTop;\n    }\n  }\n\n  // Calculate drop down width\n  dropdownWidth = matchTriggerWidth ? triggerWidth : dropdownWidth;\n  if (matchTriggerWidth) {\n    style.width = dropdownWidth;\n  }\n\n  /**\n   * Fixes bug where the dropdown always stays on the same position on the screen when\n   * the <body> is relatively positioned\n   */\n  const isBodyPositionRelative =\n    window.getComputedStyle(document.body).getPropertyValue('position') ===\n    'relative';\n\n  // Calculate horizontal position\n  let triggerLeftWithScroll = triggerLeft;\n\n  if (!isBodyPositionRelative) {\n    triggerLeftWithScroll += scroll.left;\n  }\n\n  if (horizontalPosition === 'auto' || horizontalPosition === 'auto-left') {\n    // Calculate the number of visible horizontal pixels if we were to place the\n    // dropdown on the left and right\n    const leftVisible =\n      Math.min(viewportWidth, triggerLeft + dropdownWidth) -\n      Math.max(0, triggerLeft);\n    const rightVisible =\n      Math.min(viewportWidth, triggerLeft + triggerWidth) -\n      Math.max(0, triggerLeft + triggerWidth - dropdownWidth);\n\n    if (dropdownWidth > leftVisible && rightVisible > leftVisible) {\n      // If the drop down won't fit left-aligned, and there is more space on the\n      // right than on the left, then force right-aligned\n      horizontalPosition = 'right';\n    } else if (dropdownWidth > rightVisible && leftVisible > rightVisible) {\n      // If the drop down won't fit right-aligned, and there is more space on\n      // the left than on the right, then force left-aligned\n      horizontalPosition = 'left';\n    } else {\n      // Keep same position as previous\n      horizontalPosition = previousHorizontalPosition || 'left';\n    }\n  } else if (horizontalPosition === 'auto-right') {\n    // Calculate the number of visible horizontal pixels if we were to place the\n    // dropdown on the left and right\n    const leftVisible =\n      Math.min(viewportWidth, triggerLeft + dropdownWidth) -\n      Math.max(0, triggerLeft);\n    const rightVisible =\n      Math.min(viewportWidth, triggerLeft + triggerWidth) -\n      Math.max(0, triggerLeft + triggerWidth - dropdownWidth);\n\n    if (dropdownWidth > rightVisible && leftVisible > rightVisible) {\n      // If the drop down won't fit right-aligned, and there is more space on the\n      // left than on the right, then force left-aligned\n      horizontalPosition = 'left';\n    } else if (dropdownWidth > leftVisible && rightVisible > leftVisible) {\n      // If the drop down won't fit left-aligned, and there is more space on\n      // the right than on the left, then force right-aligned\n      horizontalPosition = 'right';\n    } else {\n      // Keep same position as previous\n      horizontalPosition = previousHorizontalPosition || 'right';\n    }\n  }\n  if (horizontalPosition === 'right') {\n    style.right = viewportWidth - (triggerLeftWithScroll + triggerWidth);\n  } else if (horizontalPosition === 'center') {\n    style.left = triggerLeftWithScroll + (triggerWidth - dropdownWidth) / 2;\n  } else {\n    style.left = triggerLeftWithScroll;\n  }\n\n  // Calculate vertical position\n  let triggerTopWithScroll = triggerTop;\n\n  if (!isBodyPositionRelative) {\n    triggerTopWithScroll += scroll.top;\n  }\n\n  if (verticalPosition === 'above') {\n    style.top = triggerTopWithScroll - dropdownHeight;\n  } else if (verticalPosition === 'below') {\n    style.top = triggerTopWithScroll + triggerHeight;\n  } else {\n    const viewportBottom = scroll.top + window.innerHeight;\n    const enoughRoomBelow =\n      triggerTopWithScroll + triggerHeight + dropdownHeight < viewportBottom;\n    const enoughRoomAbove = triggerTop > dropdownHeight;\n\n    if (!enoughRoomBelow && !enoughRoomAbove) {\n      verticalPosition = 'below';\n    } else if (\n      previousVerticalPosition === 'below' &&\n      !enoughRoomBelow &&\n      enoughRoomAbove\n    ) {\n      verticalPosition = 'above';\n    } else if (\n      previousVerticalPosition === 'above' &&\n      !enoughRoomAbove &&\n      enoughRoomBelow\n    ) {\n      verticalPosition = 'below';\n    } else if (!previousVerticalPosition) {\n      verticalPosition = enoughRoomBelow ? 'below' : 'above';\n    } else {\n      verticalPosition = previousVerticalPosition;\n    }\n    style.top =\n      triggerTopWithScroll +\n      (verticalPosition === 'below' ? triggerHeight : -dropdownHeight);\n  }\n\n  return { horizontalPosition, verticalPosition, style };\n};\n\nexport const calculateInPlacePosition: CalculatePosition = (\n  trigger,\n  content,\n  _destination,\n  { horizontalPosition, verticalPosition },\n) => {\n  let dropdownRect;\n  const positionData: CalculatePositionResult = {\n    horizontalPosition: 'left',\n    verticalPosition: 'below',\n    style: {},\n  };\n  if (horizontalPosition === 'auto') {\n    const triggerRect = trigger.getBoundingClientRect();\n    dropdownRect = content.getBoundingClientRect();\n    const viewportRight = window.pageXOffset + window.innerWidth;\n    positionData.horizontalPosition =\n      triggerRect.left + dropdownRect.width > viewportRight ? 'right' : 'left';\n  } else if (horizontalPosition === 'center') {\n    const { width: triggerWidth } = trigger.getBoundingClientRect();\n    const { width: dropdownWidth } = content.getBoundingClientRect();\n    positionData.style = { left: (triggerWidth - dropdownWidth) / 2 };\n  } else if (horizontalPosition === 'auto-right') {\n    const triggerRect = trigger.getBoundingClientRect();\n    const dropdownRect = content.getBoundingClientRect();\n    positionData.horizontalPosition =\n      triggerRect.right > dropdownRect.width ? 'right' : 'left';\n  } else if (horizontalPosition === 'right') {\n    positionData.horizontalPosition = 'right';\n  }\n\n  if (verticalPosition === 'above') {\n    positionData.verticalPosition = verticalPosition;\n    dropdownRect = dropdownRect || content.getBoundingClientRect();\n    positionData.style.top = -dropdownRect.height;\n  } else {\n    positionData.verticalPosition = 'below';\n  }\n  return positionData;\n};\n\nexport function getScrollParent(element: Element) {\n  let style = window.getComputedStyle(element);\n  const excludeStaticParent = style.position === 'absolute';\n  const overflowRegex = /(auto|scroll)/;\n\n  if (style.position === 'fixed') return document.body;\n  for (\n    let parent: Element | null = element;\n    (parent = parent.parentElement);\n\n  ) {\n    style = window.getComputedStyle(parent);\n    if (excludeStaticParent && style.position === 'static') {\n      continue;\n    }\n    if (\n      overflowRegex.test(style.overflow + style.overflowY + style.overflowX)\n    ) {\n      return parent;\n    }\n  }\n\n  return document.body;\n}\nconst calculatePosition: CalculatePosition = (\n  trigger,\n  content,\n  destination,\n  options,\n) => {\n  if (options.renderInPlace) {\n    return calculateInPlacePosition(trigger, content, destination, options);\n  } else {\n    return calculateWormholedPosition(trigger, content, destination, options);\n  }\n};\n\nexport default calculatePosition;\n","export default function hasMoved(\n  endEvent: TouchEvent,\n  moveEvent?: TouchEvent,\n): boolean {\n  if (!moveEvent) {\n    return false;\n  }\n\n  if (\n    !endEvent.changedTouches?.[0] ||\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (moveEvent.changedTouches[0] as any).touchType !== 'stylus'\n  ) {\n    return true;\n  }\n\n  // Distinguish stylus scroll and tap: if touch \"distance\" < 5px, we consider it a tap\n  const horizontalDistance = Math.abs(\n    (moveEvent.changedTouches[0]?.pageX ?? 0) -\n      endEvent.changedTouches[0].pageX,\n  );\n  const verticalDistance = Math.abs(\n    (moveEvent.changedTouches[0]?.pageY ?? 0) -\n      endEvent.changedTouches[0].pageY,\n  );\n  return horizontalDistance >= 5 || verticalDistance >= 5;\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport type Ability from '../services/abilities.ts';\n\ninterface CanSignature {\n  Args: {\n    Positional: [abilityString: string, model?: unknown];\n    Named: Record<string, unknown>;\n  };\n  Return: boolean;\n}\n\nexport default class CanHelper extends Helper<CanSignature> {\n  @service declare abilities: Ability;\n\n  compute(\n    [abilityString, model]: CanSignature['Args']['Positional'],\n    properties: CanSignature['Args']['Named'] = {},\n  ): boolean {\n    return this.abilities.can(abilityString ?? '', model, properties);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport type Ability from '../services/abilities.ts';\n\ninterface CannotSignature {\n  Args: {\n    Positional: [abilityString: string, model?: unknown];\n    Named: Record<string, unknown>;\n  };\n  Return: boolean;\n}\n\nexport default class CannotHelper extends Helper<CannotSignature> {\n  @service declare abilities: Ability;\n\n  compute(\n    [abilityString, model]: CannotSignature['Args']['Positional'],\n    properties: CannotSignature['Args']['Named'] = {},\n  ): boolean {\n    return this.abilities.cannot(abilityString ?? '', model, properties);\n  }\n}\n","import EmberObject from '@ember/object';\nimport { camelize } from '@ember/string';\nimport { get } from '@ember/object';\n\nexport default class EmberObjectAbility extends EmberObject {\n  /**\n   * Parse propertyName into ability property\n   * eg: `createProject` will be parsed to `canCreateProject` using default definition\n   * @public\n   * @param  {[String]} propertyName [description]\n   * @return {[String]}              [description]\n   */\n  parseProperty(propertyName: string): string {\n    return camelize(`can-${propertyName}`);\n  }\n\n  /**\n   * Get parsed ability value based on propertyName\n   * eg: `createProject` will return a value for `canCreateProject`\n   * using default `parseProperty` definition\n   * @param  {String} propertyName property name, eg. `createProject`\n   * @param  {any} model\n   * @param  {Object} properties\n   * @return {*}                   value of parsed `propertyName` property\n   */\n  getAbility(\n    propertyName: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): unknown {\n    const abilityValue = get(this, this.parseProperty(propertyName));\n\n    if (typeof abilityValue === 'function') {\n      return abilityValue.call(this, model, properties);\n    }\n\n    return abilityValue;\n  }\n}\n","import Resolver from 'ember-resolver';\n\nResolver.reopen({\n  init() {\n    this._super();\n    this.pluralizedTypes = {\n      ...this.pluralizedTypes,\n      ability: 'abilities',\n    };\n  },\n});\n\nexport function initialize() {}\nexport default { initialize };\n","import { camelize } from '@ember/string';\nimport { singularize } from 'ember-inflector';\n\nconst stopWords = ['of', 'in', 'for', 'to', 'from', 'on', 'as'];\n\n/**\n * Normalize string into an object with extracted propertyName and abilityName\n * eg. for 'create projects in account' -> `{ propertyName: 'createProjects', abilityName: 'account'}`\n * @private\n * @param  {String} string eg. 'create projects in account'\n * @return {Object}        extracted propertyName and abilityName\n */\nexport default function (string: string) {\n  const parts = string.split(' ');\n  const abilityName = singularize(parts.pop() as string);\n  const last = parts[parts.length - 1];\n\n  if (stopWords.includes(last as string)) {\n    parts.pop();\n  }\n\n  const propertyName = camelize(parts.join(' '));\n\n  return { propertyName, abilityName };\n}\n","import Service from '@ember/service';\nimport Ability from '../ability.ts';\nimport { assert } from '@ember/debug';\nimport { getOwner } from '@ember/application';\nimport normalizeAbilityString from '../-private/normalize.ts';\n\nexport default class AbilitiesService extends Service {\n  /**\n   * Parse abilityString into an object with extracted propertyName and abilityName\n   * eg. for 'create projects in account' -> `{ propertyName: 'createProjects', abilityName: 'account'}`\n   * @public\n   * @param  {String} string eg. 'create projects in account'\n   * @return {Object}        extracted propertyName and abilityName\n   */\n  parse(abilityString: string): ReturnType<typeof normalizeAbilityString> {\n    return normalizeAbilityString(abilityString);\n  }\n\n  /**\n   * Create an instance of Ability\n   * @public\n   * @param  {String} abilityName     name of ability class\n   * @param  {*}      model\n   * @param  {Object} [properties={}] extra properties (to be set on the ability instance)\n   * @return {Ability}                Ability instance of requested ability\n   */\n  abilityFor(\n    abilityName: string,\n    model?: unknown,\n    properties: Record<string, unknown> = {},\n  ): Ability {\n    const AbilityFactory = getOwner(this)?.factoryFor(`ability:${abilityName}`);\n\n    assert(`No ability type found for '${abilityName}'`, AbilityFactory);\n\n    if (typeof model !== 'undefined') {\n      properties = { model, ...properties };\n    }\n\n    const ability = AbilityFactory.create(properties);\n    assert(\n      `Ability '${abilityName}' has to inherit from ember-can Ability`,\n      isAbilityClass(ability), // \"ability instanceof Ability\" is not working cause of a bug in ember-auto-import see https://github.com/embroider-build/ember-auto-import/issues/588\n    );\n\n    return ability;\n  }\n\n  /**\n   * Returns a value for requested ability in specified ability class\n   * @public\n   * @param  {String} propertyName name of ability, eg `createProjects`\n   * @param  {String} abilityName  name of ability class\n   * @param  {*}      model\n   * @param  {Object} properties   extra properties (to be set on the ability instance)\n   * @return {*}                   value of ability\n   */\n  valueFor(\n    propertyName: string,\n    abilityName: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): unknown {\n    const ability = this.abilityFor(abilityName, model, properties);\n    const result = ability.getAbility(propertyName, model, properties);\n\n    ability.destroy();\n\n    return result;\n  }\n\n  /**\n   * Returns `true` if ability is permitted\n   * @public\n   * @param  {[type]} abilityString eg. 'create projects in account'\n   * @param  {*}      model\n   * @param  {[type]} properties    extra properties (to be set on the ability instance)\n   * @return {Boolean}              value of ability converted to boolean\n   */\n  can(\n    abilityString: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): boolean {\n    const { propertyName, abilityName } = this.parse(abilityString);\n    return !!this.valueFor(propertyName, abilityName, model, properties);\n  }\n\n  /**\n   * Returns `true` if ability is not permitted\n   * @public\n   * @param  {[type]} abilityString eg. 'create projects in account'\n   * @param  {*}      model\n   * @param  {[type]} properties    extra properties (to be set on the ability instance)\n   * @return {Boolean}              value of ability converted to boolean\n   */\n  cannot(\n    abilityString: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): boolean {\n    return !this.can(abilityString, model, properties);\n  }\n}\n\nfunction isAbilityClass(\n  possibleAbilityClass: unknown,\n): possibleAbilityClass is Ability {\n  const abilityClass = possibleAbilityClass as Ability;\n  return (\n    abilityClass.parseProperty !== undefined &&\n    typeof abilityClass.parseProperty === 'function' &&\n    abilityClass.getAbility !== undefined &&\n    typeof abilityClass.getAbility === 'function'\n  );\n}\n","import { registerDeprecationHandler } from '@ember/debug';\n\nconst LOG_LIMIT = 100;\n\nexport default function setupDeprecationWorkflow(config) {\n  self.deprecationWorkflow = self.deprecationWorkflow || {};\n  self.deprecationWorkflow.deprecationLog = {\n    messages: new Set(),\n  };\n\n  registerDeprecationHandler((message, options, next) =>\n    handleDeprecationWorkflow(config, message, options, next),\n  );\n\n  registerDeprecationHandler(deprecationCollector);\n\n  self.deprecationWorkflow.flushDeprecations = (options) =>\n    flushDeprecations({ config, ...options });\n}\n\nfunction matchesWorkflow(matcher, value) {\n  return (\n    (typeof matcher === 'string' && matcher === value) ||\n    (matcher instanceof RegExp && matcher.exec(value))\n  );\n}\n\nexport function detectWorkflow(config, message, options) {\n  if (!config || !config.workflow) {\n    return;\n  }\n\n  let i, workflow, matcher, idMatcher;\n  for (i = 0; i < config.workflow.length; i++) {\n    workflow = config.workflow[i];\n    matcher = workflow.matchMessage;\n    idMatcher = workflow.matchId;\n\n    if (\n      matchesWorkflow(idMatcher, options?.id) ||\n      matchesWorkflow(matcher, message)\n    ) {\n      return workflow;\n    }\n  }\n}\n\nexport function flushDeprecations({ handler = 'silence', config = {} } = {}) {\n  let messages = self.deprecationWorkflow.deprecationLog.messages;\n  let existing = config.workflow ?? [];\n  let collected = messages\n    .values()\n    .filter((matchId) => !existing.some((entry) => entry.matchId === matchId))\n    .map((matchId) => ({\n      handler,\n      matchId,\n    }));\n\n  let mergedConfig = {\n    ...config,\n    workflow: [...existing, ...collected],\n  };\n\n  return `import setupDeprecationWorkflow from 'ember-cli-deprecation-workflow';\n\nsetupDeprecationWorkflow(${JSON.stringify(mergedConfig, undefined, 2)});`;\n}\n\nexport function handleDeprecationWorkflow(config, message, options, next) {\n  let matchingWorkflow = detectWorkflow(config, message, options);\n  if (!matchingWorkflow) {\n    if (config && config.throwOnUnhandled) {\n      throw new Error(message);\n    } else {\n      next(message, options);\n    }\n  } else {\n    switch (matchingWorkflow.handler) {\n      case 'silence':\n        // no-op\n        break;\n      case 'log': {\n        let key = (options && options.id) || message;\n\n        if (!self.deprecationWorkflow.logCounts) {\n          self.deprecationWorkflow.logCounts = {};\n        }\n\n        let count = self.deprecationWorkflow.logCounts[key] || 0;\n        self.deprecationWorkflow.logCounts[key] = ++count;\n\n        if (count <= LOG_LIMIT) {\n          console.warn('DEPRECATION: ' + message);\n          if (count === LOG_LIMIT) {\n            console.warn(\n              'To avoid console overflow, this deprecation will not be logged any more in this run.',\n            );\n          }\n        }\n\n        break;\n      }\n      case 'throw':\n        throw new Error(message + ` (id: ${options?.id || 'unknown'})`);\n      default:\n        next(message, options);\n        break;\n    }\n  }\n}\n\nexport function deprecationCollector(message, options, next) {\n  self.deprecationWorkflow.deprecationLog.messages.add(options.id);\n\n  next(message, options);\n}\n","import templateOnly from '@ember/component/template-only';\nexport default templateOnly();\n","import templateOnly from '@ember/component/template-only';\nexport default templateOnly();\n","import templateOnly from '@ember/component/template-only';\nexport default templateOnly();\n","import templateOnly from '@ember/component/template-only';\nexport default templateOnly();\n","import templateOnly from '@ember/component/template-only';\nexport default templateOnly();\n","/* eslint-disable ember/no-classic-components, ember/no-computed-properties-in-native-classes */\nimport Component from '@ember/component';\nimport { computed } from '@ember/object';\nimport { htmlSafe } from '@ember/template';\nimport { inject as service } from '@ember/service';\n\nimport './notification-container.css';\n\nexport default class NotificationContainerComponent extends Component {\n  @service notifications;\n\n  tagName = '';\n  position = 'top';\n  zindex = '1060';\n\n  @computed('position')\n  get positionClass() {\n    return `ember-cli-notifications-notification__container--${this.position}`;\n  }\n\n  @computed('zindex')\n  get inlineStyle() {\n    return htmlSafe(`z-index: ${this.zindex};`);\n  }\n}\n","/* eslint-disable ember/no-classic-components, ember/no-computed-properties-in-native-classes */\nimport Component from '@ember/component';\nimport { htmlSafe } from '@ember/template';\nimport { action, computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nconst availableTypes = ['info', 'success', 'warning', 'error'];\n\nimport './notification-message.css';\n\nexport default class NotificationMessage extends Component {\n  tagName = '';\n  @service notifications;\n\n  paused = false;\n\n  @computed('notification.dismiss')\n  get dismissClass() {\n    return !this.notification.dismiss ? 'c-notification--in' : '';\n  }\n\n  @computed('notification.onClick')\n  get clickableClass() {\n    return this.notification.onClick ? 'c-notification--clickable' : '';\n  }\n\n  @computed('notification.type')\n  get validType() {\n    let type = this.notification.type;\n\n    if (!type || availableTypes.indexOf(type) === -1) {\n      return '';\n    }\n\n    return type;\n  }\n\n  @computed('validType')\n  get isInfo() {\n    return this.validType === 'info';\n  }\n\n  @computed('validType')\n  get isSuccess() {\n    return this.validType === 'success';\n  }\n\n  @computed('validType')\n  get isWarning() {\n    return this.validType === 'warning';\n  }\n\n  @computed('validType')\n  get isError() {\n    return this.validType === 'error';\n  }\n\n  // Apply the clear animation duration rule inline\n  @computed('paused', 'notification.clearDuration')\n  get notificationClearDuration() {\n    const duration = Number.parseInt(this.notification.clearDuration, 10);\n    const playState = this.paused ? 'paused' : 'running';\n    const styles = [\n      `animation-duration: ${duration}ms`,\n      `animation-play-state: ${playState}`,\n    ].join(';');\n\n    return htmlSafe(styles);\n  }\n\n  @action\n  handleOnClick(event) {\n    event.preventDefault();\n    this.notification.onClick?.(this.notification);\n  }\n\n  @action\n  removeNotification(event) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.notifications.removeNotification(this.notification);\n  }\n\n  @action\n  handleMouseEnter() {\n    if (this.notification.autoClear) {\n      set(this, 'paused', true);\n      this.notifications.pauseAutoClear(this.notification);\n    }\n  }\n\n  @action\n  handleMouseLeave() {\n    if (this.notification.autoClear) {\n      set(this, 'paused', false);\n      this.notifications.setupAutoClear(this.notification);\n    }\n  }\n}\n","/* eslint-disable ember/no-classic-classes, ember/no-get, ember/no-runloop, prettier/prettier */\nimport Service from '@ember/service';\nimport { A } from '@ember/array';\nimport EmberObject, { set } from '@ember/object';\nimport { later, cancel } from '@ember/runloop';\nimport { getOwner } from '@ember/application';\n\nexport default class NotificationsService extends Service {\n  content = A();\n\n  constructor(...args) {\n    super(...args);\n\n    const config = getOwner(this).resolveRegistration('config:environment');\n\n    this.globals = config['ember-cli-notifications'] || {}; // Import app config object\n  }\n\n  // Method for adding a notification\n  addNotification(options) {\n    // If no message is set, throw an error\n    if (!options.message) {\n      throw new Error('No notification message set');\n    }\n\n    const notification = EmberObject.create({\n      message: options.message,\n      type: options.type || 'info',\n      autoClear: options.autoClear ?? this.globals.autoClear ?? false,\n      clearDuration:\n        options.clearDuration ?? this.globals.clearDuration ?? 3200,\n      onClick: options.onClick,\n      htmlContent: options.htmlContent || false,\n      cssClasses: options.cssClasses,\n    });\n\n    this.content.pushObject(notification);\n\n    if (notification.autoClear) {\n      set(notification, 'remaining', notification.clearDuration);\n\n      this.setupAutoClear(notification);\n    }\n\n    return notification;\n  }\n\n  // Helper methods for each type of notification\n  error(message, options) {\n    return this.addNotification({\n      ...options,\n      message,\n      type: 'error',\n    });\n  }\n\n  success(message, options) {\n    return this.addNotification({\n      ...options,\n      message,\n      type: 'success',\n    });\n  }\n\n  info(message, options) {\n    return this.addNotification({\n      ...options,\n      message,\n      type: 'info',\n    });\n  }\n\n  warning(message, options) {\n    return this.addNotification({\n      ...options,\n      message,\n      type: 'warning',\n    });\n  }\n\n  removeNotification(notification) {\n    if (!notification) {\n      return;\n    }\n\n    notification.set('dismiss', true);\n\n    // Delay removal from DOM for dismissal animation\n    later(\n      this,\n      () => {\n        this.content.removeObject(notification);\n      },\n      500\n    );\n  }\n\n  setupAutoClear(notification) {\n    notification.set('startTime', Date.now());\n\n    const timer = later(\n      this,\n      () => {\n        // Hasn't been closed manually\n        if (this.content.indexOf(notification) >= 0) {\n          this.removeNotification(notification);\n        }\n      },\n      notification.remaining\n    );\n\n    set(notification, 'timer', timer);\n  }\n\n  pauseAutoClear(notification) {\n    cancel(notification.timer);\n\n    const elapsed = Date.now() - notification.startTime;\n    const remaining = notification.clearDuration - elapsed;\n\n    set(notification, 'remaining', remaining);\n  }\n\n  clearAll() {\n    this.content.forEach((notification) => {\n      this.removeNotification(notification);\n    });\n\n    return this;\n  }\n\n  setDefaultAutoClear(autoClear) {\n    this.globals.autoClear = autoClear;\n  }\n\n  setDefaultClearDuration(clearDuration) {\n    this.globals.clearDuration = clearDuration;\n  }\n}\n","import Ember from 'ember';\nimport { defer } from 'rsvp';\nimport { Environment } from './external/environment';\nimport { assert } from '@ember/debug';\nimport { join, next, schedule } from '@ember/runloop';\n\nexport class EmberEnvironment extends Environment {\n  assert(...args) {\n    assert(...args);\n  }\n\n  async(callback) {\n    join(() => schedule('actions', callback));\n  }\n\n  reportUncaughtRejection(error) {\n    next(null, function () {\n      if (Ember.onerror) {\n        Ember.onerror(error);\n      } else {\n        throw error;\n      }\n    });\n  }\n\n  defer() {\n    return defer();\n  }\n\n  globalDebuggingEnabled() {\n    return Ember.ENV.DEBUG_TASKS;\n  }\n}\n\nexport const EMBER_ENVIRONMENT = new EmberEnvironment();\n","export class Environment {\n  assert() {}\n\n  async(callback) {\n    Promise.resolve().then(callback);\n  }\n\n  reportUncaughtRejection() {\n    this.async((error) => {\n      throw error;\n    });\n  }\n\n  defer() {\n    let deferable = {\n      promise: null,\n      resolve: null,\n      reject: null,\n    };\n\n    let promise = new Promise((resolve, reject) => {\n      deferable.resolve = resolve;\n      deferable.reject = reject;\n    });\n\n    deferable.promise = promise;\n\n    return deferable;\n  }\n\n  globalDebuggingEnabled() {\n    return false;\n  }\n}\n\nexport const DEFAULT_ENVIRONMENT = new Environment();\n","class BoundedPolicy {\n  constructor(maxConcurrency) {\n    this.maxConcurrency = maxConcurrency || 1;\n  }\n}\n\nexport default BoundedPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { makeCancelState, STARTED } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n  `it belongs to a 'drop' Task that was already running`,\n);\n\nclass DropReducer {\n  constructor(remainingSlots) {\n    this.remainingSlots = remainingSlots;\n  }\n\n  step() {\n    if (this.remainingSlots > 0) {\n      this.remainingSlots--;\n      return STARTED;\n    }\n\n    return CANCELLED;\n  }\n}\n\nclass DropPolicy extends BoundedPolicy {\n  makeReducer() {\n    return new DropReducer(this.maxConcurrency);\n  }\n}\n\nexport default DropPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, QUEUED } from './execution-states';\n\nclass EnqueuedReducer {\n  constructor(remainingSlots) {\n    this.remainingSlots = remainingSlots;\n  }\n\n  step() {\n    if (this.remainingSlots > 0) {\n      this.remainingSlots--;\n      return STARTED;\n    } else {\n      return QUEUED;\n    }\n  }\n}\n\nclass EnqueuedPolicy extends BoundedPolicy {\n  makeReducer() {\n    return new EnqueuedReducer(this.maxConcurrency);\n  }\n}\n\nexport default EnqueuedPolicy;\n","export const TYPE_CANCELLED = 'CANCELLED';\nexport const TYPE_STARTED = 'STARTED';\nexport const TYPE_QUEUED = 'QUEUED';\n\nexport const STARTED = { type: TYPE_STARTED };\nexport const QUEUED = { type: TYPE_QUEUED };\n\nexport const makeCancelState = (reason) => ({ type: TYPE_CANCELLED, reason });\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, QUEUED, makeCancelState } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n  `it belongs to a 'keepLatest' Task that was already running`,\n);\n\n// Given:\n// - started tasks: [a,b,_]\n// - queued tasks:  [c,d,e,f]\n// KeepLatest will cancel all but the last queued task instance, producing:\n// - started tasks: [a,b,c]\n// - queued tasks: [f]\n\n// TODO: perhaps we should expose another config for the number to keep enqueued.\n//       this would also make sense for enqueued, e.g. perform a max of maxConcurrency\n//       concurrent task instances, but after a number of queued instances has been\n//       reached, they should be cancelled.\n\nclass KeepLatestReducer {\n  constructor(remainingSlots, numToCancel) {\n    this.remainingSlots = remainingSlots;\n    this.numToCancel = numToCancel;\n  }\n\n  step() {\n    if (this.remainingSlots > 0) {\n      this.remainingSlots--;\n      return STARTED;\n    } else {\n      if (this.numToCancel > 0) {\n        this.numToCancel--;\n        return CANCELLED;\n      } else {\n        return QUEUED;\n      }\n    }\n  }\n}\n\nclass KeepLatestPolicy extends BoundedPolicy {\n  makeReducer(numRunning, numQueued) {\n    let maxEnqueued = 1;\n    let totalRunning = numRunning + numQueued;\n    return new KeepLatestReducer(\n      this.maxConcurrency,\n      totalRunning - this.maxConcurrency - maxEnqueued,\n    );\n  }\n}\n\nexport default KeepLatestPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, makeCancelState } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n  `it belongs to a 'restartable' Task that was .perform()ed again`,\n);\n\nclass RestartableReducer {\n  constructor(numToCancel) {\n    this.numToCancel = numToCancel;\n  }\n\n  step() {\n    if (this.numToCancel > 0) {\n      this.numToCancel--;\n      return CANCELLED;\n    } else {\n      return STARTED;\n    }\n  }\n}\n\nclass RestartablePolicy extends BoundedPolicy {\n  makeReducer(numRunning, numQueued) {\n    return new RestartableReducer(numRunning + numQueued - this.maxConcurrency);\n  }\n}\n\nexport default RestartablePolicy;\n","import {\n  TYPE_STARTED,\n  TYPE_QUEUED,\n  TYPE_CANCELLED,\n} from './policies/execution-states';\n\nconst LAST_APPLIED_TAGS = new Map();\n\nclass Refresh {\n  constructor(schedulerPolicy, stateTracker, taskInstances) {\n    this.stateTracker = stateTracker;\n    this.schedulerPolicy = schedulerPolicy;\n    this.initialTaskInstances = taskInstances;\n    this.startingInstances = [];\n  }\n\n  process() {\n    let [taskInstances, numRunning, numQueued] =\n      this.filterFinishedTaskInstances();\n    let reducer = this.schedulerPolicy.makeReducer(numRunning, numQueued);\n\n    let finalTaskInstances = taskInstances.filter((taskInstance) => {\n      return this.setTaskInstanceExecutionState(taskInstance, reducer.step());\n    });\n\n    this.stateTracker.computeFinalStates((state) => this.applyState(state));\n    this.startingInstances.forEach((taskInstance) => taskInstance.start());\n\n    return finalTaskInstances;\n  }\n\n  filterFinishedTaskInstances() {\n    let numRunning = 0,\n      numQueued = 0;\n    let taskInstances = this.initialTaskInstances.filter((taskInstance) => {\n      let taskState = this.stateTracker.stateFor(taskInstance.task);\n      let executorState = taskInstance.executor.state;\n\n      if (executorState.isFinished) {\n        taskState.onCompletion(taskInstance);\n        return false;\n      }\n\n      if (executorState.hasStarted) {\n        numRunning += 1;\n      } else {\n        numQueued += 1;\n      }\n\n      return true;\n    });\n    return [taskInstances, numRunning, numQueued];\n  }\n\n  setTaskInstanceExecutionState(taskInstance, desiredState) {\n    let taskState = this.stateTracker.stateFor(taskInstance.task);\n\n    if (!taskInstance.executor.counted) {\n      taskInstance.executor.counted = true;\n      taskState.onPerformed(taskInstance);\n    }\n\n    switch (desiredState.type) {\n      case TYPE_CANCELLED:\n        // this will cause a follow up flush which will detect and recompute cancellation state\n        taskInstance.cancel(desiredState.reason);\n        return false;\n      case TYPE_STARTED:\n        if (!taskInstance.executor.state.hasStarted) {\n          this.startingInstances.push(taskInstance);\n          taskState.onStart(taskInstance);\n        }\n        taskState.onRunning(taskInstance);\n        return true;\n      case TYPE_QUEUED:\n        taskState.onQueued(taskInstance);\n        // TODO: assert taskInstance hasn't started?\n        // Or perhaps this can be a way to pause a task?\n        return true;\n    }\n  }\n\n  applyState(state) {\n    let { taskable } = state;\n\n    if (!taskable.onState) {\n      return;\n    }\n\n    const { guid } = taskable;\n\n    if (\n      LAST_APPLIED_TAGS.has(guid) &&\n      state.tag < LAST_APPLIED_TAGS.get(guid)\n    ) {\n      return;\n    }\n\n    let props = Object.assign(\n      {\n        numRunning: state.numRunning,\n        numQueued: state.numQueued,\n        numPerformedInc: state.numPerformedInc,\n      },\n      state.attrs,\n    );\n\n    taskable.onState(props, taskable);\n\n    LAST_APPLIED_TAGS.set(guid, state.tag);\n  }\n}\n\nexport default Refresh;\n","import {\n  COMPLETION_SUCCESS,\n  COMPLETION_ERROR,\n  COMPLETION_CANCEL,\n} from '../../task-instance/completion-states';\n\nclass RefreshState {\n  constructor(taskable, tag) {\n    this.taskable = taskable;\n    this.group = taskable.group;\n    this.numRunning = 0;\n    this.numQueued = 0;\n    this.numPerformedInc = 0;\n    this.attrs = {};\n    this.tag = tag;\n  }\n\n  onCompletion(taskInstance) {\n    let state = taskInstance.completionState;\n    this.attrs.lastRunning = null;\n    this.attrs.lastComplete = taskInstance;\n    if (state === COMPLETION_SUCCESS) {\n      this.attrs.lastSuccessful = taskInstance;\n    } else {\n      if (state === COMPLETION_ERROR) {\n        this.attrs.lastErrored = taskInstance;\n      } else if (state === COMPLETION_CANCEL) {\n        this.attrs.lastCanceled = taskInstance;\n      }\n      this.attrs.lastIncomplete = taskInstance;\n    }\n  }\n\n  onPerformed(taskInstance) {\n    this.numPerformedInc += 1;\n    this.attrs.lastPerformed = taskInstance;\n  }\n\n  onStart(taskInstance) {\n    this.attrs.last = taskInstance;\n  }\n\n  onRunning(taskInstance) {\n    this.attrs.lastRunning = taskInstance;\n    this.numRunning += 1;\n  }\n\n  onQueued() {\n    this.numQueued += 1;\n  }\n\n  recurseTaskGroups(callback) {\n    let group = this.group;\n    while (group) {\n      callback(group);\n      group = group.group;\n    }\n  }\n\n  applyStateFrom(other) {\n    Object.assign(this.attrs, other.attrs);\n    this.numRunning += other.numRunning;\n    this.numQueued += other.numQueued;\n    this.numPerformedInc += other.numPerformedInc;\n  }\n}\n\nexport default RefreshState;\n","import RefreshState from './state';\n\nconst CURRENT_REFRESH_TAGS = new Map();\n\nclass StateTracker {\n  constructor() {\n    this.states = new Map();\n  }\n\n  stateFor(taskable) {\n    let guid = taskable.guid;\n    let taskState = this.states.get(guid);\n    if (!taskState) {\n      let currentTag = CURRENT_REFRESH_TAGS.has(guid)\n        ? CURRENT_REFRESH_TAGS.get(guid)\n        : 0;\n      taskState = new RefreshState(taskable, ++currentTag);\n      this.states.set(guid, taskState);\n      CURRENT_REFRESH_TAGS.set(guid, currentTag);\n    }\n    return taskState;\n  }\n\n  // After cancelling/queueing task instances, we have to recompute the derived state\n  // of all the tasks that had/have task instances in this scheduler. We do this by\n  // looping through all the Tasks that we've accumulated state for, and then recursively\n  // applying/adding to the state of any TaskGroups they belong to.\n  computeFinalStates(callback) {\n    this.computeRecursiveState();\n    this.forEachState((state) => callback(state));\n  }\n\n  computeRecursiveState() {\n    this.forEachState((taskState) => {\n      let lastState = taskState;\n      taskState.recurseTaskGroups((taskGroup) => {\n        let state = this.stateFor(taskGroup);\n        state.applyStateFrom(lastState);\n        lastState = state;\n      });\n    });\n  }\n\n  forEachState(callback) {\n    this.states.forEach((state) => callback(state));\n  }\n}\n\nexport default StateTracker;\n","import NullState from './null-state';\n\nconst NULL_STATE = new NullState();\n\nclass NullStateTracker {\n  stateFor() {\n    return NULL_STATE;\n  }\n\n  computeFinalStates() {}\n}\n\nexport default NullStateTracker;\n","class NullState {\n  onCompletion() {}\n  onPerformed() {}\n  onStart() {}\n  onRunning() {}\n  onQueued() {}\n}\n\nexport default NullState;\n","import SchedulerRefresh from './refresh';\nimport StateTracker from './state-tracker/state-tracker';\nimport NullStateTracker from './state-tracker/null-state-tracker';\n\n// Scheduler base class\n\n// When a Task is performed, it creates an unstarted TaskInstance and\n// passes it to the Scheduler to determine when it should run. The\n// scheduler consults the schedulerPolicy (e.g. DropPolicy, RestartablePolicy, etc)\n// to determine whether the task instance should start executing, be enqueued\n// for later execution, or be immediately cancelled. As TaskInstances start\n// and run to completion, the Scheduler's `refresh()` method is called to\n// give it an opportunity to start (or cancel) previously enqueued task instances,\n// as well as update the derived state on Tasks and TaskGroups.\n\n// Every Task has its own Scheduler instance, unless it is part of a group,\n// in which case all the Tasks in a group share a single Scheduler.\n\nclass Scheduler {\n  constructor(schedulerPolicy, stateTrackingEnabled) {\n    this.schedulerPolicy = schedulerPolicy;\n    this.stateTrackingEnabled = stateTrackingEnabled;\n    this.taskInstances = [];\n  }\n\n  cancelAll(guid, cancelRequest) {\n    let cancelations = this.taskInstances\n      .map((taskInstance) => {\n        if (taskInstance.task.guids[guid]) {\n          taskInstance.executor.cancel(cancelRequest);\n        }\n      })\n      .filter((cancelation) => !!cancelation);\n\n    return Promise.all(cancelations);\n  }\n\n  perform(taskInstance) {\n    taskInstance.onFinalize(() => this.scheduleRefresh());\n    this.taskInstances.push(taskInstance);\n    this.refresh();\n  }\n\n  scheduleRefresh() {\n    Promise.resolve().then(() => this.refresh());\n  }\n\n  refresh() {\n    let stateTracker = this.stateTrackingEnabled\n      ? new StateTracker()\n      : new NullStateTracker();\n    let refresh = new SchedulerRefresh(\n      this.schedulerPolicy,\n      stateTracker,\n      this.taskInstances,\n    );\n    this.taskInstances = refresh.process();\n  }\n}\n\nexport default Scheduler;\n","import { STARTED } from './execution-states';\n\nclass UnboundedReducer {\n  step() {\n    return STARTED;\n  }\n}\n\nconst SINGLETON_REDUCER = new UnboundedReducer();\n\nclass UnboundedPolicy {\n  makeReducer() {\n    return SINGLETON_REDUCER;\n  }\n}\n\nexport default UnboundedPolicy;\n","import Scheduler from './scheduler/scheduler';\nimport UnboundedSchedulerPolicy from './scheduler/policies/unbounded-policy';\nimport EnqueueSchedulerPolicy from './scheduler/policies/enqueued-policy';\nimport DropSchedulerPolicy from './scheduler/policies/drop-policy';\nimport KeepLatestSchedulerPolicy from './scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './scheduler/policies/restartable-policy';\nimport { Task } from './task/task';\nimport { TaskGroup } from './task/task-group';\nimport { DEFAULT_ENVIRONMENT } from './environment';\n\nfunction assertModifiersNotMixedWithGroup(obj) {\n  if (obj._hasSetConcurrencyConstraint && obj._taskGroupPath) {\n    throw new Error(\n      `Cannot use both 'group' and other concurrency-constraining task modifiers (e.g. 'drop', 'enqueue', 'restartable')`,\n    );\n  }\n}\n\nfunction assertUnsetBufferPolicy(obj) {\n  if (obj._hasSetBufferPolicy) {\n    throw new Error(\n      `Cannot set multiple buffer policies on a task or task group. ${obj._schedulerPolicyClass} has already been set for task or task group '${obj.name}'`,\n    );\n  }\n}\n\nconst MODIFIER_REGISTRY = {\n  enqueue: (factory, value) =>\n    value && factory.setBufferPolicy(EnqueueSchedulerPolicy),\n  evented: (factory, value) => value && factory.setEvented(value),\n  debug: (factory, value) => value && factory.setDebug(value),\n  drop: (factory, value) =>\n    value && factory.setBufferPolicy(DropSchedulerPolicy),\n  group: (factory, groupName) => factory.setGroup(groupName),\n  keepLatest: (factory, value) =>\n    value && factory.setBufferPolicy(KeepLatestSchedulerPolicy),\n  maxConcurrency: (factory, maxConcurrency) =>\n    factory.setMaxConcurrency(maxConcurrency),\n  onState: (factory, onStateCallback) => factory.setOnState(onStateCallback),\n  restartable: (factory, value) =>\n    value && factory.setBufferPolicy(RestartableSchedulerPolicy),\n};\n\n/**\n * Callback type defining a task modifier\n *\n * @callback TaskFactory~TaskModifier\n * @param {TaskFactory} factory\n * @param {*} taskModifierOption\n */\n\n/**\n * Registers a new modifier with the modifier registry\n *\n * @param {string} name Name of the modifier\n * @param {TaskFactory~TaskModifier} callback\n */\nexport function registerModifier(name, callback) {\n  if (MODIFIER_REGISTRY[name]) {\n    throw new Error(\n      `A modifier with the name '${name}' has already been defined.`,\n    );\n  }\n\n  MODIFIER_REGISTRY[name] = callback;\n}\n\n/**\n * Returns a specified modifier, if it exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {TaskFactory~TaskModifier?}\n */\nexport function getModifier(name) {\n  return MODIFIER_REGISTRY[name];\n}\n\n/**\n * Returns whether a specified modifier exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {boolean}\n */\nexport function hasModifier(name) {\n  return name in MODIFIER_REGISTRY;\n}\n\n/**\n * Factory used for instantiating Tasks and Task Groups. Mostly for internal\n * use, but some public APIs exposed via the Task Modifier APIs.\n *\n * <style>\n *  .ignore-this--this-is-here-to-hide-constructor,\n *  #TaskFactory { display: none }\n * </style>\n *\n * @class TaskFactory\n */\nexport class TaskFactory {\n  env = DEFAULT_ENVIRONMENT;\n\n  _debug = null;\n  _enabledModifiers = [];\n  _hasSetConcurrencyConstraint = false;\n  _hasSetBufferPolicy = false;\n  _hasEnabledEvents = false;\n  _maxConcurrency = null;\n  _onStateCallback = (state, taskable) => taskable.setState(state);\n  _schedulerPolicyClass = UnboundedSchedulerPolicy;\n  _taskGroupPath = null;\n\n  constructor(name = '<unknown>', taskDefinition = null, options = {}) {\n    this.name = name;\n    this.taskDefinition = taskDefinition;\n    this.options = options;\n    this._processModifierOptions(options);\n  }\n\n  /**\n   * Returns a new Task bound to the given context\n   *\n   * @protected\n   * @param {*} context\n   * @returns {Task}\n   */\n  createTask(context) {\n    let options = this.getTaskOptions(context);\n\n    return new Task(\n      Object.assign(\n        {\n          generatorFactory: (args) => this.taskDefinition.apply(context, args),\n        },\n        options,\n      ),\n    );\n  }\n\n  /**\n   * Returns a new TaskGroup bound to the given context\n   *\n   * @protected\n   * @param {*} context\n   * @returns {Task}\n   */\n  createTaskGroup(context) {\n    let options = this.getTaskOptions(context);\n\n    return new TaskGroup(options);\n  }\n\n  /**\n   * Returns a modifier callback with the given name bound to this TaskFactory,\n   * if registered.\n   *\n   * @protected\n   * @param {string} name\n   * @returns {TaskFactory~TaskModifier?}\n   */\n  getModifier(name) {\n    if (hasModifier(name)) {\n      return MODIFIER_REGISTRY[name].bind(null, this);\n    }\n  }\n\n  /**\n   * Returns the options provided to TaskFactory\n   *\n   * @public\n   * @returns {object}\n   */\n  getOptions() {\n    return this.options;\n  }\n\n  /**\n   * Returns a new Scheduler instance\n   *\n   * @protected\n   * @param {*} schedulerPolicy\n   * @param {boolean} stateTrackingEnabled\n   * @returns {Scheduler}\n   */\n  getScheduler(schedulerPolicy, stateTrackingEnabled) {\n    return new Scheduler(schedulerPolicy, stateTrackingEnabled);\n  }\n\n  /**\n   * Returns the options to pass to a Task or TaskGroup constructor\n   *\n   * @protected\n   * @param {*} context\n   * @returns {object}\n   */\n  getTaskOptions(context) {\n    let group, scheduler;\n    let onStateCallback = this._onStateCallback;\n\n    if (this._taskGroupPath) {\n      group = context[this._taskGroupPath];\n      if (!(group instanceof TaskGroup)) {\n        throw new Error(\n          `Expected group '${this._taskGroupPath}' to be defined but was not found.`,\n        );\n      }\n\n      scheduler = group.scheduler;\n    } else {\n      let schedulerPolicy = new this._schedulerPolicyClass(\n        this._maxConcurrency,\n      );\n      scheduler = this.getScheduler(\n        schedulerPolicy,\n        onStateCallback && typeof onStateCallback === 'function',\n      );\n    }\n\n    return {\n      context,\n      debug: this._debug,\n      env: this.env,\n      name: this.name,\n      group,\n      scheduler,\n      hasEnabledEvents: this._hasEnabledEvents,\n      onStateCallback,\n      enabledModifiers: this._enabledModifiers,\n      modifierOptions: this.getOptions(),\n    };\n  }\n\n  /**\n   * Sets the Scheduler buffer policy class to the specified value.\n   *\n   * Will raise an assertion if a buffer policy has already been specified\n   *\n   * @param {*} policy\n   * @returns {TaskFactory}\n   */\n  setBufferPolicy(policy) {\n    assertUnsetBufferPolicy(this);\n    this._hasSetBufferPolicy = true;\n    this._hasSetConcurrencyConstraint = true;\n    this._schedulerPolicyClass = policy;\n    assertModifiersNotMixedWithGroup(this);\n\n    return this;\n  }\n\n  /**\n   * Sets debug mode\n   *\n   * @param {boolean} enabled\n   * @returns {TaskFactory}\n   */\n  setDebug(enabled) {\n    this._debug = enabled;\n    return this;\n  }\n\n  /**\n   * Sets whether Task will dispatch Task events or not\n   *\n   * @param {boolean} enabled\n   * @returns {TaskFactory}\n   */\n  setEvented(enabled) {\n    this._hasEnabledEvents = enabled;\n    return this;\n  }\n\n  /**\n   * Sets Scheduling policy's `maxConcurrency`\n   *\n   * @param {number} maxConcurrency\n   * @returns {TaskFactory}\n   */\n  setMaxConcurrency(maxConcurrency) {\n    this._hasSetConcurrencyConstraint = true;\n    this._maxConcurrency = maxConcurrency;\n    return this;\n  }\n\n  /**\n   * Assigns Task created from this factory to the specified group name\n   *\n   * @param {string} group\n   * @returns {TaskFactory}\n   */\n  setGroup(group) {\n    this._taskGroupPath = group;\n    return this;\n  }\n\n  /**\n   * Sets the name of tasks created from this factory\n   *\n   * @param {string} name\n   * @returns {TaskFactory}\n   */\n  setName(name) {\n    this.name = name;\n    return this;\n  }\n\n  /**\n   * Sets the callback used on state updates. Can be set to null to disable\n   * state tracking on tasks.\n   *\n   * @param {function} onStateCallback\n   * @returns {TaskFactory}\n   */\n  setOnState(onStateCallback) {\n    this._onStateCallback = onStateCallback;\n    return this;\n  }\n\n  /**\n   * Sets the definition for tasks created from this factory\n   *\n   * @param {*} taskDefinition\n   * @returns {TaskFactory}\n   */\n  setTaskDefinition(taskDefinition) {\n    this.taskDefinition = taskDefinition;\n    return this;\n  }\n\n  _processModifierOptions(options) {\n    if (!options) {\n      return;\n    }\n\n    for (let key of Object.keys(options)) {\n      let value = options[key];\n      let modifier = this.getModifier(key);\n\n      if (typeof modifier === 'function' && modifier(value)) {\n        this._enabledModifiers.push(key);\n      }\n    }\n  }\n}\n","export const TASK_CANCELATION_NAME = 'TaskCancelation';\n\n/**\n * Returns true if the object passed to it is a TaskCancelation error.\n * If you call `someTask.perform().catch(...)` or otherwise treat\n * a {@linkcode TaskInstance} like a promise, you may need to\n * handle the cancelation of a TaskInstance differently from\n * other kinds of errors it might throw, and you can use this\n * convenience function to distinguish cancelation from errors.\n *\n * ```js\n * click() {\n *   this.myTask.perform().catch(e => {\n *     if (!didCancel(e)) { throw e; }\n *   });\n * }\n * ```\n *\n * @param {object} error the caught error, which might be a TaskCancelation\n * @returns {boolean}\n */\nexport function didCancel(e) {\n  return e && e.name === TASK_CANCELATION_NAME;\n}\n\nexport const CANCEL_KIND_EXPLICIT = 'explicit';\nexport const CANCEL_KIND_YIELDABLE_CANCEL = 'yielded';\nexport const CANCEL_KIND_LIFESPAN_END = 'lifespan_end';\nexport const CANCEL_KIND_PARENT_CANCEL = 'parent_cancel';\n\nexport class CancelRequest {\n  constructor(kind, reason) {\n    this.kind = kind;\n    this.reason = reason;\n    this.promise = new Promise((resolve) => {\n      this.finalize = resolve;\n    });\n  }\n}\n","export class GeneratorStepResult {\n  constructor(value, done, errored) {\n    this.value = value;\n    this.done = done;\n    this.errored = errored;\n  }\n}\n\nexport class GeneratorState {\n  constructor(generatorFactory) {\n    this.done = false;\n    this.generatorFactory = generatorFactory;\n    this.iterator = null;\n  }\n\n  step(resolvedValue, iteratorMethod) {\n    try {\n      let iterator = this.getIterator();\n      let { value, done } = iterator[iteratorMethod](resolvedValue);\n\n      if (done) {\n        return this.finalize(value, false);\n      } else {\n        return new GeneratorStepResult(value, false, false);\n      }\n    } catch (e) {\n      return this.finalize(e, true);\n    }\n  }\n\n  getIterator() {\n    if (!this.iterator && !this.done) {\n      this.iterator = this.generatorFactory();\n    }\n    return this.iterator;\n  }\n\n  finalize(value, errored) {\n    this.done = true;\n    this.iterator = null;\n    return new GeneratorStepResult(value, true, errored);\n  }\n}\n","import { GeneratorState } from '../generator-state';\nimport {\n  cancelableSymbol,\n  YIELDABLE_CANCEL,\n  YIELDABLE_CONTINUE,\n  YIELDABLE_RETURN,\n  YIELDABLE_THROW,\n  yieldableSymbol,\n} from '../yieldables';\nimport { INITIAL_STATE } from './initial-state';\n\nimport {\n  CANCEL_KIND_LIFESPAN_END,\n  CANCEL_KIND_PARENT_CANCEL,\n  CANCEL_KIND_YIELDABLE_CANCEL,\n  CancelRequest,\n  didCancel,\n  TASK_CANCELATION_NAME,\n} from './cancelation';\nimport {\n  COMPLETION_CANCEL,\n  COMPLETION_ERROR,\n  COMPLETION_SUCCESS,\n} from './completion-states';\n\nexport const PERFORM_TYPE_DEFAULT = 'PERFORM_TYPE_DEFAULT';\nexport const PERFORM_TYPE_UNLINKED = 'PERFORM_TYPE_UNLINKED';\nexport const PERFORM_TYPE_LINKED = 'PERFORM_TYPE_LINKED';\n\nconst CANCEL_RETURN_VALUE_SENTINEL = {};\nlet TASK_INSTANCE_STACK = [];\n\nexport function getRunningInstance() {\n  return TASK_INSTANCE_STACK[TASK_INSTANCE_STACK.length - 1];\n}\n\nexport class TaskInstanceExecutor {\n  constructor({ generatorFactory, env, debug }) {\n    this.generatorState = new GeneratorState(generatorFactory);\n    this.state = Object.assign({}, INITIAL_STATE);\n    this.index = 1;\n    this.disposers = [];\n    this.finalizeCallbacks = [];\n    this.env = env;\n    this.debug = debug;\n    this.cancelRequest = null;\n  }\n\n  start() {\n    if (this.state.hasStarted || this.cancelRequest) {\n      return;\n    }\n    this.setState({ hasStarted: true });\n    this.proceedSync(YIELDABLE_CONTINUE, undefined);\n    this.taskInstance.onStarted();\n  }\n\n  cancel(cancelRequest) {\n    if (!this.requestCancel(cancelRequest)) {\n      cancelRequest.finalize();\n      return cancelRequest.promise;\n    }\n\n    if (this.state.hasStarted) {\n      this.proceedWithCancelAsync();\n    } else {\n      this.finalizeWithCancel();\n    }\n\n    return this.cancelRequest.promise;\n  }\n\n  setState(state) {\n    Object.assign(this.state, state);\n    this.taskInstance.setState(this.state);\n  }\n\n  proceedChecked(index, yieldResumeType, value) {\n    if (this.state.isFinished) {\n      return;\n    }\n    if (!this.advanceIndex(index)) {\n      return;\n    }\n\n    if (yieldResumeType === YIELDABLE_CANCEL) {\n      this.requestCancel(\n        new CancelRequest(CANCEL_KIND_YIELDABLE_CANCEL),\n        value,\n      );\n      this.proceedWithCancelAsync();\n    } else {\n      this.proceedAsync(yieldResumeType, value);\n    }\n  }\n\n  proceedWithCancelAsync() {\n    this.proceedAsync(YIELDABLE_RETURN, CANCEL_RETURN_VALUE_SENTINEL);\n  }\n\n  proceedAsync(yieldResumeType, value) {\n    this.advanceIndex(this.index);\n    this.env.async(() => this.proceedSync(yieldResumeType, value));\n  }\n\n  proceedSync(yieldResumeType, value) {\n    if (this.state.isFinished) {\n      return;\n    }\n\n    this.dispose();\n\n    if (this.generatorState.done) {\n      this.handleResolvedReturnedValue(yieldResumeType, value);\n    } else {\n      this.handleResolvedContinueValue(yieldResumeType, value);\n    }\n  }\n\n  /**\n   * This method is called when a previously yielded value from\n   * the generator has been resolved, and now it's time to pass\n   * it back into the generator. There are 3 ways to \"resume\" a\n   * generator:\n   *\n   * - call `.next(value)` on it, which is used to pass in a resolved\n   *   value (the fulfilled value of a promise), e.g. if a task generator fn\n   *   does `yield Promise.resolve(5)`, then we take that promise yielded\n   *   by the generator, detect that it's a promise, resolve it, and then\n   *   pass its fulfilled value `5` back into the generator function so\n   *   that it can continue executing.\n   * - call `.throw(error)` on it, which throw an exception from where the\n   *   the generator previously yielded. We do this when the previously\n   *   yielded value resolves to an error value (e.g. a rejected promise\n   *   or a TaskInstance that finished with an error). Note that when you\n   *   resume a generator with a `.throw()`, it can still recover from that\n   *   thrown error and continue executing normally so long as the `yield`\n   *   was inside a `try/catch` statement.\n   * - call `.return(value)` on it, causes the generator function to return\n   *   from where it previously `yield`ed. We use `.return()` when cancelling\n   *   a TaskInstance; by `.return`ing, rather than `.throw`ing, it allows\n   *   the generator function to skip `catch(e) {}` blocks, which is usually\n   *   reserved for actual errors/exceptions; if we `.throw`'d cancellations,\n   *   it would require all tasks that used try/catch to conditionally ignore\n   *   cancellations, which is annoying. So we `.return()` from generator functions\n   *   in the case of errors as a matter of convenience.\n   *\n   * @private\n   */\n  handleResolvedContinueValue(iteratorMethod, resumeValue) {\n    let beforeIndex = this.index;\n    let stepResult = this.generatorStep(resumeValue, iteratorMethod);\n\n    // TODO: what is this doing? write breaking test.\n    if (!this.advanceIndex(beforeIndex)) {\n      return;\n    }\n\n    if (stepResult.errored) {\n      this.finalize(stepResult.value, COMPLETION_ERROR);\n      return;\n    }\n\n    this.handleYieldedValue(stepResult);\n  }\n\n  /**\n   * This method is called when the generator function is all\n   * out of values, and the last value returned from the function\n   * (possible a thenable/yieldable/promise/etc) has been resolved.\n   *\n   * Possible cases:\n   * - `return \"simple value\";` // resolved value is \"simple value\"\n   * - `return undefined;` // (or omitted return) resolved value is undefined\n   * - `return someTask.perform()` // resolved value is the value returned/resolved from someTask\n   *\n   * @private\n   */\n  handleResolvedReturnedValue(yieldResumeType, value) {\n    switch (yieldResumeType) {\n      case YIELDABLE_CONTINUE:\n      case YIELDABLE_RETURN:\n        this.finalize(value, COMPLETION_SUCCESS);\n        break;\n      case YIELDABLE_THROW:\n        this.finalize(value, COMPLETION_ERROR);\n        break;\n    }\n  }\n\n  handleYieldedUnknownThenable(thenable) {\n    let resumeIndex = this.index;\n    thenable.then(\n      (value) => {\n        this.proceedChecked(resumeIndex, YIELDABLE_CONTINUE, value);\n      },\n      (error) => {\n        this.proceedChecked(resumeIndex, YIELDABLE_THROW, error);\n      },\n    );\n  }\n\n  /**\n   * The TaskInstance internally tracks an index/sequence number\n   * (the `index` property) which gets incremented every time the\n   * task generator function iterator takes a step. When a task\n   * function is paused at a `yield`, there are two events that\n   * cause the TaskInstance to take a step: 1) the yielded value\n   * \"resolves\", thus resuming the TaskInstance's execution, or\n   * 2) the TaskInstance is canceled. We need some mechanism to prevent\n   * stale yielded value resolutions from resuming the TaskFunction\n   * after the TaskInstance has already moved on (either because\n   * the TaskInstance has since been canceled or because an\n   * implementation of the Yieldable API tried to resume the\n   * TaskInstance more than once). The `index` serves as\n   * that simple mechanism: anyone resuming a TaskInstance\n   * needs to pass in the `index` they were provided that acts\n   * as a ticket to resume the TaskInstance that expires once\n   * the TaskInstance has moved on.\n   *\n   * @private\n   */\n  advanceIndex(index) {\n    if (this.index === index) {\n      return ++this.index;\n    }\n  }\n\n  handleYieldedValue(stepResult) {\n    let yieldedValue = stepResult.value;\n    if (!yieldedValue) {\n      this.proceedWithSimpleValue(yieldedValue);\n      return;\n    }\n\n    this.addDisposer(yieldedValue[cancelableSymbol]);\n\n    if (yieldedValue[yieldableSymbol]) {\n      this.invokeYieldable(yieldedValue);\n    } else if (typeof yieldedValue.then === 'function') {\n      this.handleYieldedUnknownThenable(yieldedValue);\n    } else {\n      this.proceedWithSimpleValue(yieldedValue);\n    }\n  }\n\n  proceedWithSimpleValue(yieldedValue) {\n    this.proceedAsync(YIELDABLE_CONTINUE, yieldedValue);\n  }\n\n  addDisposer(maybeDisposer) {\n    if (typeof maybeDisposer !== 'function') {\n      return;\n    }\n\n    this.disposers.push(maybeDisposer);\n  }\n\n  /**\n   * Runs any disposers attached to the task's most recent `yield`.\n   * For instance, when a task yields a TaskInstance, it registers that\n   * child TaskInstance's disposer, so that if the parent task is canceled,\n   * dispose() will run that disposer and cancel the child TaskInstance.\n   *\n   * @private\n   */\n  dispose() {\n    let disposers = this.disposers;\n    if (disposers.length === 0) {\n      return;\n    }\n    this.disposers = [];\n    disposers.forEach((disposer) => disposer());\n  }\n\n  /**\n   * Calls .next()/.throw()/.return() on the task's generator function iterator,\n   * essentially taking a single step of execution on the task function.\n   *\n   * @private\n   */\n  generatorStep(nextValue, iteratorMethod) {\n    TASK_INSTANCE_STACK.push(this);\n    let stepResult = this.generatorState.step(nextValue, iteratorMethod);\n    TASK_INSTANCE_STACK.pop();\n\n    // TODO: fix this!\n    if (this._expectsLinkedYield) {\n      let value = stepResult.value;\n      if (!value || value.performType !== PERFORM_TYPE_LINKED) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          'You performed a .linked() task without immediately yielding/returning it. This is currently unsupported (but might be supported in future version of ember-concurrency).',\n        );\n      }\n      this._expectsLinkedYield = false;\n    }\n\n    return stepResult;\n  }\n\n  maybeResolveDefer() {\n    if (!this.defer || !this.state.isFinished) {\n      return;\n    }\n\n    if (this.state.completionState === COMPLETION_SUCCESS) {\n      this.defer.resolve(this.state.value);\n    } else {\n      this.defer.reject(this.state.error);\n    }\n  }\n\n  onFinalize(callback) {\n    this.finalizeCallbacks.push(callback);\n\n    if (this.state.isFinished) {\n      this.runFinalizeCallbacks();\n    }\n  }\n\n  runFinalizeCallbacks() {\n    this.finalizeCallbacks.forEach((cb) => cb());\n    this.finalizeCallbacks = [];\n    this.maybeResolveDefer();\n    this.maybeThrowUnhandledTaskErrorLater();\n  }\n\n  promise() {\n    if (!this.defer) {\n      this.defer = this.env.defer();\n      this.asyncErrorsHandled = true;\n      this.maybeResolveDefer();\n    }\n    return this.defer.promise;\n  }\n\n  maybeThrowUnhandledTaskErrorLater() {\n    if (\n      !this.asyncErrorsHandled &&\n      this.state.completionState === COMPLETION_ERROR &&\n      !didCancel(this.state.error)\n    ) {\n      this.env.async(() => {\n        if (!this.asyncErrorsHandled) {\n          this.env.reportUncaughtRejection(this.state.error);\n        }\n      });\n    }\n  }\n\n  requestCancel(request) {\n    if (this.cancelRequest || this.state.isFinished) {\n      return false;\n    }\n    this.cancelRequest = request;\n    return true;\n  }\n\n  finalize(value, completionState) {\n    if (this.cancelRequest) {\n      return this.finalizeWithCancel();\n    }\n\n    let state = { completionState };\n\n    if (completionState === COMPLETION_SUCCESS) {\n      state.isSuccessful = true;\n      state.value = value;\n    } else if (completionState === COMPLETION_ERROR) {\n      state.isError = true;\n      state.error = value;\n    } else if (completionState === COMPLETION_CANCEL) {\n      state.error = value;\n    }\n\n    this.finalizeShared(state);\n  }\n\n  finalizeWithCancel() {\n    let cancelReason = this.taskInstance.formatCancelReason(\n      this.cancelRequest.reason,\n    );\n    let error = new Error(cancelReason);\n\n    if (this.debugEnabled()) {\n      // eslint-disable-next-line no-console\n      console.log(cancelReason);\n    }\n\n    error.name = TASK_CANCELATION_NAME;\n\n    this.finalizeShared({\n      isCanceled: true,\n      completionState: COMPLETION_CANCEL,\n      error,\n      cancelReason,\n    });\n\n    this.cancelRequest.finalize();\n  }\n\n  debugEnabled() {\n    return this.debug || this.env.globalDebuggingEnabled();\n  }\n\n  finalizeShared(state) {\n    this.index++;\n    state.isFinished = true;\n    this.setState(state);\n    this.runFinalizeCallbacks();\n    this.dispatchFinalizeEvents(state.completionState);\n  }\n\n  dispatchFinalizeEvents(completionState) {\n    switch (completionState) {\n      case COMPLETION_SUCCESS:\n        this.taskInstance.onSuccess();\n        break;\n      case COMPLETION_ERROR:\n        this.taskInstance.onError(this.state.error);\n        break;\n      case COMPLETION_CANCEL:\n        this.taskInstance.onCancel(this.state.cancelReason);\n        break;\n    }\n  }\n\n  invokeYieldable(yieldedValue) {\n    try {\n      let maybeDisposer = yieldedValue[yieldableSymbol](\n        this.taskInstance,\n        this.index,\n      );\n      this.addDisposer(maybeDisposer);\n    } catch (e) {\n      this.env.reportUncaughtRejection(e);\n    }\n  }\n\n  /**\n   * `onYielded` is called when this task instance has been\n   * yielded in another task instance's execution. We take\n   * this opportunity to conditionally link up the tasks\n   * so that when the parent or child cancels, the other\n   * is cancelled.\n   *\n   * Given the following case:\n   *\n   * ```js\n   * parentTask = task(async () => {\n   *   await otherTask.perform();\n   * });\n   * ```\n   *\n   * Then the `parent` param is the task instance that is executing, `this`\n   * is the `otherTask` task instance that was yielded.\n   *\n   * @private\n   */\n  onYielded(parent, resumeIndex) {\n    this.asyncErrorsHandled = true;\n\n    this.onFinalize(() => {\n      let completionState = this.state.completionState;\n      if (completionState === COMPLETION_SUCCESS) {\n        parent.proceed(resumeIndex, YIELDABLE_CONTINUE, this.state.value);\n      } else if (completionState === COMPLETION_ERROR) {\n        parent.proceed(resumeIndex, YIELDABLE_THROW, this.state.error);\n      } else if (completionState === COMPLETION_CANCEL) {\n        parent.proceed(resumeIndex, YIELDABLE_CANCEL, null);\n      }\n    });\n\n    let performType = this.getPerformType();\n    if (performType === PERFORM_TYPE_UNLINKED) {\n      return;\n    }\n\n    return () => {\n      this.detectSelfCancelLoop(performType, parent);\n      this.cancel(new CancelRequest(CANCEL_KIND_PARENT_CANCEL));\n    };\n  }\n\n  getPerformType() {\n    return this.taskInstance.performType || PERFORM_TYPE_DEFAULT;\n  }\n\n  detectSelfCancelLoop(performType, parent) {\n    if (performType !== PERFORM_TYPE_DEFAULT) {\n      return;\n    }\n\n    let parentCancelRequest = parent.executor && parent.executor.cancelRequest;\n\n    // Detect that the parent was cancelled by a lifespan ending and\n    // that the child is still running and not cancelled.\n    if (\n      parentCancelRequest &&\n      parentCancelRequest.kind === CANCEL_KIND_LIFESPAN_END &&\n      !this.cancelRequest &&\n      !this.state.isFinished\n    ) {\n      this.taskInstance.selfCancelLoopWarning(parent);\n    }\n  }\n}\n","import { COMPLETION_PENDING } from './completion-states';\n\nexport const INITIAL_STATE = {\n  completionState: COMPLETION_PENDING,\n\n  /**\n   * If this TaskInstance runs to completion by returning a property\n   * other than a rejecting promise, this property will be set\n   * with that value.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  value: null,\n\n  /**\n   * If this TaskInstance is canceled or throws an error (or yields\n   * a promise that rejects), this property will be set with that error.\n   * Otherwise, it is null.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  error: null,\n\n  /**\n   * True if the task instance is fulfilled.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isSuccessful: false,\n\n  /**\n   * True if the task instance resolves to a rejection.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isError: false,\n\n  /**\n   * True if the task instance is canceled\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isCanceled: false,\n\n  /**\n   * True if the task instance has started, else false.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  hasStarted: false,\n\n  /**\n   * True if the task has run to completion.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isFinished: false,\n};\n","export const DEFAULT_STATE = {\n  last: null,\n  lastRunning: null,\n  lastPerformed: null,\n  lastSuccessful: null,\n  lastComplete: null,\n  lastErrored: null,\n  lastCanceled: null,\n  lastIncomplete: null,\n  performCount: 0,\n};\n\nObject.freeze(DEFAULT_STATE);\n","import { Taskable } from './taskable';\n\nexport class TaskGroup extends Taskable {}\n","import { Taskable } from './taskable';\nimport {\n  PERFORM_TYPE_DEFAULT,\n  PERFORM_TYPE_LINKED,\n  PERFORM_TYPE_UNLINKED,\n  getRunningInstance,\n  TaskInstanceExecutor,\n} from '../task-instance/executor';\n\nclass TaskLinkProxy {\n  constructor(task, performType, linkedObject) {\n    this.task = task;\n    this.performType = performType;\n    this.linkedObject = linkedObject;\n  }\n\n  perform(...args) {\n    return this.task._performShared(args, this.performType, this.linkedObject);\n  }\n}\n\nexport class Task extends Taskable {\n  constructor(options) {\n    super(options);\n    this.generatorFactory = options.generatorFactory;\n    this.perform = this._perform.bind(this);\n  }\n\n  linked() {\n    let linkedObject = getRunningInstance();\n    if (!linkedObject) {\n      throw new Error(`You can only call .linked() from within a task.`);\n    }\n\n    return new TaskLinkProxy(this, PERFORM_TYPE_LINKED, linkedObject);\n  }\n\n  unlinked() {\n    return new TaskLinkProxy(this, PERFORM_TYPE_UNLINKED, null);\n  }\n\n  toString() {\n    return `<Task:${this.name}>`;\n  }\n\n  _clone() {\n    return new Task({\n      context: this.context,\n      debug: this.debug,\n      env: this.env,\n      generatorFactory: this.generatorFactory,\n      group: this.group,\n      hasEnabledEvents: this.hasEnabledEvents,\n      name: this.name,\n      onStateCallback: this.onStateCallback,\n      scheduler: this.scheduler,\n    });\n  }\n\n  _curry(...args) {\n    let task = this._clone();\n    task._curryArgs = [...(this._curryArgs || []), ...args];\n    return task;\n  }\n\n  _perform(...args) {\n    return this._performShared(args, PERFORM_TYPE_DEFAULT, null);\n  }\n\n  _performShared(args, performType, linkedObject) {\n    let fullArgs = this._curryArgs ? [...this._curryArgs, ...args] : args;\n    let taskInstance = this._taskInstanceFactory(\n      fullArgs,\n      performType,\n      linkedObject,\n    );\n\n    if (performType === PERFORM_TYPE_LINKED) {\n      linkedObject._expectsLinkedYield = true;\n    }\n\n    if (!this._isAlive) {\n      // a task linked to a dead lifetime should immediately cancel.\n      taskInstance.cancel();\n    }\n\n    this.scheduler.perform(taskInstance);\n    return taskInstance;\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  _taskInstanceOptions(args, performType, _linkedObject) {\n    let generatorFactory = () => this.generatorFactory(args);\n    let taskInstanceOptions = {\n      task: this,\n      args,\n      executor: new TaskInstanceExecutor({\n        generatorFactory,\n        env: this.env,\n        debug: this.debug,\n      }),\n      performType,\n      hasEnabledEvents: this.hasEnabledEvents,\n    };\n\n    return taskInstanceOptions;\n  }\n}\n","import { DEFAULT_STATE } from './default-state';\nimport {\n  CancelRequest,\n  CANCEL_KIND_EXPLICIT,\n} from '../task-instance/cancelation';\n\nlet guidId = 0;\nfunction makeGuid() {\n  return `ec_${guidId++}`;\n}\n\nexport class Taskable {\n  constructor(options) {\n    this.context = options.context;\n    this.debug = options.debug || false;\n    this.enabledModifiers = options.enabledModifiers;\n    this.env = options.env;\n    this.group = options.group;\n    this.hasEnabledEvents = options.hasEnabledEvents;\n    this.modifierOptions = options.modifierOptions;\n    this.name = options.name;\n    this.onStateCallback = options.onStateCallback;\n    this.scheduler = options.scheduler;\n\n    this.guid = makeGuid();\n    this.guids = {};\n    this.guids[this.guid] = true;\n    if (this.group) {\n      Object.assign(this.guids, this.group.guids);\n    }\n  }\n\n  cancelAll(options) {\n    let { reason, cancelRequestKind, resetState } = options || {};\n    reason = reason || '.cancelAll() was explicitly called on the Task';\n\n    let cancelRequest = new CancelRequest(\n      cancelRequestKind || CANCEL_KIND_EXPLICIT,\n      reason,\n    );\n    return this.scheduler.cancelAll(this.guid, cancelRequest).then(() => {\n      if (resetState) {\n        this._resetState();\n      }\n    });\n  }\n\n  get _isAlive() {\n    return true;\n  }\n\n  _resetState() {\n    this.setState(DEFAULT_STATE);\n  }\n\n  // override\n  setState() {}\n}\n\nObject.assign(Taskable.prototype, DEFAULT_STATE);\nObject.assign(Taskable.prototype, {\n  numRunning: 0,\n  numQueued: 0,\n  isRunning: false,\n  isQueued: false,\n  isIdle: true,\n  state: 'idle',\n});\n","export const cancelableSymbol = '__ec_cancel__';\nexport const yieldableSymbol = '__ec_yieldable__';\nexport const YIELDABLE_CONTINUE = 'next';\nexport const YIELDABLE_THROW = 'throw';\nexport const YIELDABLE_RETURN = 'return';\nexport const YIELDABLE_CANCEL = 'cancel';\n\n/**\n * @class YieldableState\n * @hideconstructor\n */\nclass YieldableState {\n  constructor(taskInstance, resumeIndex) {\n    this._taskInstance = taskInstance;\n    this._resumeIndex = resumeIndex;\n  }\n\n  /**\n   * Return yielded TaskInstance. Useful for introspection on instance state.\n   * @method getTaskInstance\n   * @memberof YieldableState\n   * @public\n   * @instance\n   */\n  getTaskInstance() {\n    return this._taskInstance;\n  }\n\n  /**\n   * Cancel the yielded TaskInstance.\n   * @method cancel\n   * @memberof YieldableState\n   * @public\n   * @instance\n   */\n  cancel() {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_CANCEL,\n    );\n  }\n\n  /**\n   * Cause the TaskInstance to return from its yield with an optional value,\n   * and continue executing.\n   * @method next\n   * @memberof YieldableState\n   * @param value\n   * @public\n   * @instance\n   */\n  next(value) {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_CONTINUE,\n      value,\n    );\n  }\n\n  /**\n   * Short-circuit TaskInstance execution and have it return with an optional\n   * value.\n   * @method return\n   * @memberof YieldableState\n   * @param value\n   * @public\n   * @instance\n   */\n  return(value) {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_RETURN,\n      value,\n    );\n  }\n\n  /**\n   * Raise a given error within the given task instance and halt execution\n   * @method throw\n   * @memberof YieldableState\n   * @param error\n   * @public\n   * @instance\n   */\n  throw(error) {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_THROW,\n      error,\n    );\n  }\n}\n\n/**\n * Yieldables are a primitive for building safe, cancelation-aware ways to\n * instrument and introspect the runtime of a task. Many Yieldables are built-in\n * to ember-concurrency today, such as `timeout`, `animationFrame`, and\n * `rawTimeout`.\n *\n * For example, if I wanted to implement a yieldable for `requestIdleCallback`,\n * I could do the following:\n *\n * ```javascript\n * import Component from '@glimmer/component';\n * import { task, Yieldable } from 'ember-concurrency';\n *\n * class IdleCallbackYieldable extends Yieldable {\n *   onYield(state) {\n *     let callbackId = requestIdleCallback(() => state.next());\n *\n *     return () => cancelIdleCallback(callbackId);\n *   }\n * }\n *\n * const idleCallback = () => new IdleCallbackYieldable();\n *\n * class MyComponent extends Component {\n *   &#64;task *backgroundTask() {\n *     while (1) {\n *       yield idleCallback();\n *\n *       const data = this.complicatedNumberCrunching();\n *       yield this.sendData(data);\n *     }\n *   }\n * }\n * ```\n *\n * In general, `Yieldable` instances **should** be reusable across calls, and thus\n * care should be taken to ensure that teardown is provided and state not\n * intended to be shared across calls stay inside `onYield`.\n *\n * `Yieldable` also provides automatic Promise-casting.\n *\n * <style>\n *   .ignore-this--this-is-here-to-hide-constructor,\n *   #Yieldable { display: none }\n * </style>\n *\n * @class Yieldable\n */\nexport class Yieldable {\n  constructor() {\n    this[yieldableSymbol] = this[yieldableSymbol].bind(this);\n  }\n\n  /**\n   * Defines what happens when the task encounters `yield myYieldable` and returns\n   * a disposer function that handles any cleanup.\n   *\n   * The state parameter is provided by the runtime, and provides operations for\n   * interacting with the yielding task instance and advancing, returning,\n   * throwing, or canceling its execution.\n   *\n   * @method onYield\n   * @memberof Yieldable\n   * @param {YieldableState} state\n   * @instance\n   * @public\n   */\n  onYield() {}\n\n  _deferable() {\n    let def = { resolve: undefined, reject: undefined };\n\n    def.promise = new Promise((resolve, reject) => {\n      def.resolve = resolve;\n      def.reject = reject;\n    });\n\n    return def;\n  }\n\n  _toPromise() {\n    let def = this._deferable();\n\n    let thinInstance = {\n      proceed(_index, resumeType, value) {\n        if (\n          resumeType == YIELDABLE_CONTINUE ||\n          resumeType == YIELDABLE_RETURN\n        ) {\n          def.resolve(value);\n        } else {\n          def.reject(value);\n        }\n      },\n    };\n\n    let maybeDisposer = this[yieldableSymbol](thinInstance, 0);\n    def.promise[cancelableSymbol] = maybeDisposer;\n\n    return def.promise;\n  }\n\n  /**\n   * Returns a promise that resolves with the value yielded back to or returned\n   * to the yielded task, or rejects with either the exception thrown from the\n   * Yieldable, or an error with a `.name` property with value `\"TaskCancelation\"`.\n   *\n   * @method then\n   * @memberof Yieldable\n   * @instance\n   * @return {Promise}\n   */\n  then(...args) {\n    return this._toPromise().then(...args);\n  }\n\n  /**\n   * @method catch\n   * @memberof Yieldable\n   * @instance\n   * @return {Promise}\n   */\n  catch(...args) {\n    return this._toPromise().catch(...args);\n  }\n\n  /**\n   * @method finally\n   * @memberof Yieldable\n   * @instance\n   * @return {Promise}\n   */\n  finally(...args) {\n    return this._toPromise().finally(...args);\n  }\n\n  [yieldableSymbol](taskInstance, resumeIndex) {\n    let state = new YieldableState(taskInstance, resumeIndex);\n\n    return this.onYield(state);\n  }\n}\n\nclass AnimationFrameYieldable extends Yieldable {\n  onYield(state) {\n    let timerId = requestAnimationFrame(() => state.next());\n\n    return () => cancelAnimationFrame(timerId);\n  }\n}\n\nclass ForeverYieldable extends Yieldable {\n  onYield() {}\n}\n\nclass RawTimeoutYieldable extends Yieldable {\n  constructor(ms) {\n    super();\n    this.ms = ms;\n  }\n\n  onYield(state) {\n    let timerId = setTimeout(() => state.next(), this.ms);\n\n    return () => clearTimeout(timerId);\n  }\n}\n\n/**\n * Yielding `animationFrame()` will pause a task until after the next animation\n * frame using the native `requestAnimationFrame()` browser API.\n *\n * The task below, when performed, will print the time since the last loop run\n * for every animation frame.\n *\n * ```js\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     let lastNow = performance.now();\n *     while (true) {\n *       yield animationFrame();\n *\n *       let now = performance.now();\n *       let dt = now - lastNow;\n *       lastNow = now;\n *\n *       console.log(dt);\n *     }\n *   }\n * }\n * ```\n */\nexport function animationFrame() {\n  return new AnimationFrameYieldable();\n}\n\n/**\n *\n * Yielding `forever` will pause a task indefinitely until\n * it is cancelled (i.e. via host object destruction, the restartable modifier,\n * or manual cancellation).\n *\n * This is often useful in cases involving animation: if you're\n * using Liquid Fire, or some other animation scheme, sometimes you'll\n * notice buttons visibly reverting to their inactive states during\n * a route transition. By yielding `forever` in a Component task that drives a\n * button's active state, you can keep a task indefinitely running\n * until the animation runs to completion.\n *\n * NOTE: Liquid Fire also includes a useful `waitUntilIdle()` method\n * on the `liquid-fire-transitions` service that you can use in a lot\n * of these cases, but it won't cover cases of asynchrony that are\n * unrelated to animation, in which case `forever` might be better suited\n * to your needs.\n *\n * ```js\n * import { task, forever } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;service myService;\n *   &#64;task *myTask() {\n *     yield this.myService.doSomethingThatCausesATransition();\n *     yield forever;\n *   }\n * }\n * ```\n */\nexport const forever = new ForeverYieldable();\n\n/**\n *\n * Yielding `rawTimeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * The timeout will use the native `setTimeout()` browser API,\n * instead of the Ember runloop, which means that test helpers\n * will *not* wait for it to complete.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     while (true) {\n *       console.log(\"Hello!\");\n *       yield rawTimeout(1000);\n *     }\n *   }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n *   the task, in milliseconds\n */\nexport function rawTimeout(ms) {\n  return new RawTimeoutYieldable(ms);\n}\n","import { get } from '@ember/object';\nimport { assert } from '@ember/debug';\n\nexport function taskHelperClosure(helperName, taskMethod, _args, hash) {\n  let task = _args[0];\n  let outerArgs = _args.slice(1);\n\n  return function (...innerArgs) {\n    if (!task || typeof task[taskMethod] !== 'function') {\n      assert(\n        `The first argument passed to the \\`${helperName}\\` helper should be a Task object (without quotes); you passed ${task}`,\n        false,\n      );\n      return;\n    }\n\n    if (hash && hash.value) {\n      let event = innerArgs.pop();\n      innerArgs.push(get(event, hash.value));\n    }\n\n    return task[taskMethod](...outerArgs, ...innerArgs);\n  };\n}\n","import Scheduler from '../external/scheduler/scheduler';\nimport { once } from '@ember/runloop';\n\nclass EmberScheduler extends Scheduler {\n  scheduleRefresh() {\n    once(this, this.refresh);\n  }\n}\n\nexport default EmberScheduler;\n","import { assert, deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { addListener } from '@ember/object/events';\nimport { addObserver } from '@ember/object/observers';\nimport { scheduleOnce } from '@ember/runloop';\nimport {\n  TaskFactory as BaseTaskFactory,\n  registerModifier,\n} from './external/task-factory';\n\nimport { EMBER_ENVIRONMENT } from './ember-environment';\nimport EmberScheduler from './scheduler/ember-scheduler';\nimport { EncapsulatedTask, Task } from './task';\nimport { TaskGroup } from './task-group';\nimport { TaskProperty } from './task-properties';\n\nlet handlerCounter = 0;\n\nfunction registerOnPrototype(\n  addListenerOrObserver,\n  proto,\n  names,\n  taskName,\n  taskMethod,\n  once,\n) {\n  if (names && names.length > 0) {\n    for (let i = 0; i < names.length; ++i) {\n      let name = names[i];\n\n      let handlerName = `__ember_concurrency_handler_${handlerCounter++}`;\n      proto[handlerName] = makeTaskCallback(taskName, taskMethod, once);\n      addListenerOrObserver(proto, name, null, handlerName);\n    }\n  }\n}\n\nfunction makeTaskCallback(taskName, method, once) {\n  return function () {\n    let task = get(this, taskName);\n\n    if (once) {\n      scheduleOnce('actions', task, method, ...arguments);\n    } else {\n      task[method].apply(task, arguments);\n    }\n  };\n}\n\nconst ensureArray = (possibleArr) =>\n  Array.isArray(possibleArr) ? possibleArr : [possibleArr];\n\nregisterModifier('cancelOn', (factory, eventNames) =>\n  factory.addCancelEvents(...ensureArray(eventNames)),\n);\nregisterModifier('observes', (factory, propertyPaths) =>\n  factory.addObserverKeys(...ensureArray(propertyPaths)),\n);\nregisterModifier('on', (factory, eventNames) =>\n  factory.addPerformEvents(...ensureArray(eventNames)),\n);\n\nexport class TaskFactory extends BaseTaskFactory {\n  env = EMBER_ENVIRONMENT;\n\n  createTask(context) {\n    assert(\n      `Cannot create task if a task definition is not provided as generator function or encapsulated task.`,\n      this.taskDefinition,\n    );\n\n    let options = this.getTaskOptions(context);\n\n    if (typeof this.taskDefinition === 'object') {\n      return new EncapsulatedTask(\n        Object.assign({ taskObj: this.taskDefinition }, options),\n      );\n    } else {\n      return new Task(\n        Object.assign(\n          {\n            generatorFactory: (args) =>\n              this.taskDefinition.apply(context, args),\n          },\n          options,\n        ),\n      );\n    }\n  }\n\n  createTaskGroup(context) {\n    assert(\n      `A task definition is not expected for a task group.`,\n      !this.taskDefinition,\n    );\n\n    deprecate(\n      'Task Groups are deprecated. There is no direct replacement for Task Groups and some refactoring may be necessary.',\n      false,\n      {\n        id: 'ember-concurrency.deprecate-task-group',\n        for: 'ember-concurrency',\n        since: '4.0.5',\n        until: '5.0.0',\n      },\n    );\n\n    let options = this.getTaskOptions(context);\n\n    return new TaskGroup(options);\n  }\n\n  addCancelEvents(...cancelEventNames) {\n    this._cancelEventNames = this._cancelEventNames || [];\n    this._cancelEventNames.push(...cancelEventNames);\n    return this;\n  }\n\n  addObserverKeys(...keys) {\n    this._observes = this._observes || [];\n    this._observes.push(...keys);\n    return this;\n  }\n\n  addPerformEvents(...eventNames) {\n    this._eventNames = this._eventNames || [];\n    this._eventNames.push(...eventNames);\n    return this;\n  }\n\n  getModifier(name) {\n    let modifier = super.getModifier(name);\n    if (!modifier && typeof TaskProperty.prototype[name] === 'function') {\n      // Shim for compatibility with user-defined TaskProperty prototype\n      // extensions. To be removed when replaced with proper public API.\n      modifier = TaskProperty.prototype[name].bind(this);\n    }\n\n    assert(\n      `Task option '${name}' is not recognized as a supported option.`,\n      modifier,\n    );\n\n    return modifier;\n  }\n\n  getScheduler(schedulerPolicy, stateTrackingEnabled) {\n    return new EmberScheduler(schedulerPolicy, stateTrackingEnabled);\n  }\n\n  _setupEmberKVO(proto) {\n    // TODO: Does this make sense in a post-Ember object world?\n\n    registerOnPrototype(\n      addListener,\n      proto,\n      this._eventNames,\n      this.name,\n      'perform',\n      false,\n    );\n    registerOnPrototype(\n      addListener,\n      proto,\n      this._cancelEventNames,\n      this.name,\n      'cancelAll',\n      false,\n    );\n    registerOnPrototype(\n      addObserver,\n      proto,\n      this._observes,\n      this.name,\n      'perform',\n      true,\n    );\n  }\n\n  // Provided for compatibility with ember-concurrency TaskProperty extension\n  // methods\n  get taskFn() {\n    return this.taskDefinition;\n  }\n\n  set taskFn(fn) {\n    this.setTaskDefinition(fn);\n  }\n}\n","import { TaskGroup as TaskGroupBase } from './external/task/task-group';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;taskGroup({ maxConcurrency: 5 }) chores;\n *\n *   &#64;task({ group: 'chores' })\n *   *mowLawn() {}\n *\n *   &#64;task({ group: 'chores' })\n *   *doDishes() {}\n * }\n * ```\n *\n * <style>\n *  .ignore-this--this-is-here-to-hide-constructor,\n *  #TaskGroup { display: none }\n * </style>\n *\n * @class TaskGroup\n */\nexport class TaskGroup extends TaskGroupBase {\n  /**\n   * Cancels all running or queued `TaskInstance`s for this task group.\n   * If you're trying to cancel a specific TaskInstance (rather\n   * than all of the instances running under this task group) call\n   * `.cancel()` on the specific TaskInstance.\n   *\n   * @method cancelAll\n   * @memberof TaskGroup\n   * @param options.reason A descriptive reason the task group was\n   *   cancelled. Defaults to `\".cancelAll() was explicitly called\n   *   on the Task\"`.\n   * @param options.resetState If true, will clear the task group state\n   *   (`last*` and `performCount` properties will be set to initial\n   *   values). Defaults to false.\n   * @instance\n   * @async\n   *\n   */\n  /**\n   * `true` if any current task instances are running.\n   *\n   * @memberof TaskGroup\n   * @member {boolean} isRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if any future task instances are queued.\n   *\n   * @memberof TaskGroup\n   * @member {boolean} isQueued\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if the task is not in the running or queued state.\n   *\n   * @memberof TaskGroup\n   * @member {boolean} isIdle\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n   *\n   * @memberof TaskGroup\n   * @member {string} state\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently started task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} last\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is currently running.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently performed task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastPerformed\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that succeeded.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastSuccessful\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently completed task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastComplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that errored.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastErrored\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently canceled task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastCanceled\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is incomplete.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastIncomplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The number of times this task has been performed.\n   *\n   * @memberof TaskGroup\n   * @member {number} performCount\n   * @instance\n   * @readOnly\n   */\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n  Object.defineProperties(TaskGroup.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(TaskGroup.prototype, TASKABLE_MIXIN);\n","import { INITIAL_STATE } from './initial-state';\nimport { yieldableSymbol } from '../yieldables';\nimport { CancelRequest, CANCEL_KIND_EXPLICIT } from './cancelation';\nconst EXPLICIT_CANCEL_REASON = '.cancel() was explicitly called';\n\nexport class BaseTaskInstance {\n  constructor({ task, args, executor, performType, hasEnabledEvents }) {\n    this.task = task;\n    this.args = args;\n    this.performType = performType;\n    this.executor = executor;\n    this.executor.taskInstance = this;\n    this.hasEnabledEvents = hasEnabledEvents;\n  }\n\n  setState() {}\n  onStarted() {}\n  onSuccess() {}\n  onError() {}\n  onCancel() {}\n  formatCancelReason() {}\n  selfCancelLoopWarning() {}\n\n  onFinalize(callback) {\n    this.executor.onFinalize(callback);\n  }\n\n  proceed(index, yieldResumeType, value) {\n    this.executor.proceedChecked(index, yieldResumeType, value);\n  }\n\n  [yieldableSymbol](parentTaskInstance, resumeIndex) {\n    return this.executor.onYielded(parentTaskInstance, resumeIndex);\n  }\n\n  cancel(cancelReason = EXPLICIT_CANCEL_REASON) {\n    this.executor.cancel(new CancelRequest(CANCEL_KIND_EXPLICIT, cancelReason));\n  }\n\n  then(...args) {\n    return this.executor.promise().then(...args);\n  }\n\n  catch(...args) {\n    return this.executor.promise().catch(...args);\n  }\n\n  finally(...args) {\n    return this.executor.promise().finally(...args);\n  }\n\n  toString() {\n    return `${this.task} TaskInstance`;\n  }\n\n  start() {\n    this.executor.start();\n    return this;\n  }\n}\n\nObject.assign(BaseTaskInstance.prototype, INITIAL_STATE);\nObject.assign(BaseTaskInstance.prototype, {\n  state: 'waiting',\n  isDropped: false,\n  isRunning: true,\n});\n","import { BaseTaskInstance } from './external/task-instance/base';\nimport { TRACKED_INITIAL_INSTANCE_STATE } from './tracked-state';\n\n/**\n  A `TaskInstance` represent a single execution of a\n  {@linkcode Task}. Every call to {@linkcode Task#perform} returns\n  a `TaskInstance`.\n\n  `TaskInstance`s are cancelable, either explicitly\n  via {@linkcode TaskInstance#cancel} or {@linkcode Task#cancelAll},\n  or automatically due to the host object being destroyed, or\n  because concurrency policy enforced by a\n  {@linkcode TaskProperty Task Modifier} canceled the task instance.\n\n  <style>\n    .ignore-this--this-is-here-to-hide-constructor,\n    #TaskInstance { display: none }\n  </style>\n\n  @class TaskInstance\n*/\n\nexport class TaskInstance extends BaseTaskInstance {\n  setState(props) {\n    let state = this._recomputeState(props);\n    Object.assign(this, {\n      ...props,\n      isRunning: !props.isFinished,\n      isDropped: state === 'dropped',\n      state,\n    });\n  }\n\n  _recomputeState(props) {\n    if (props.isDropped) {\n      return 'dropped';\n    } else if (props.isCanceled) {\n      if (props.hasStarted) {\n        return 'canceled';\n      } else {\n        return 'dropped';\n      }\n    } else if (props.isFinished) {\n      return 'finished';\n    } else if (props.hasStarted) {\n      return 'running';\n    } else {\n      return 'waiting';\n    }\n  }\n\n  onStarted() {\n    this.triggerEvent('started', this);\n  }\n\n  onSuccess() {\n    this.triggerEvent('succeeded', this);\n  }\n\n  onError(error) {\n    this.triggerEvent('errored', this, error);\n  }\n\n  onCancel(cancelReason) {\n    this.triggerEvent('canceled', this, cancelReason);\n  }\n\n  formatCancelReason(reason) {\n    return `TaskInstance '${this.getName()}' was canceled because ${reason}. For more information, see: http://ember-concurrency.com/docs/task-cancelation-help`;\n  }\n\n  getName() {\n    if (!this.name) {\n      this.name = (this.task && this.task.name) || '<unknown>';\n    }\n    return this.name;\n  }\n\n  selfCancelLoopWarning(parent) {\n    let parentName = `\\`${parent.getName()}\\``;\n    let childName = `\\`${this.getName()}\\``;\n    // eslint-disable-next-line no-console\n    console.warn(\n      `ember-concurrency detected a potentially hazardous \"self-cancel loop\" between parent task ${parentName} and child task ${childName}. If you want child task ${childName} to be canceled when parent task ${parentName} is canceled, please change \\`.perform()\\` to \\`.linked().perform()\\`. If you want child task ${childName} to keep running after parent task ${parentName} is canceled, change it to \\`.unlinked().perform()\\``,\n    );\n  }\n\n  triggerEvent(...allArgs) {\n    if (!this.hasEnabledEvents) {\n      return;\n    }\n\n    let taskInstance = this;\n    let task = taskInstance.task;\n    let host = task.context;\n    let eventNamespace = task && task.name;\n\n    if (host && host.trigger && eventNamespace) {\n      let [eventType, ...args] = allArgs;\n      host.trigger(`${eventNamespace}:${eventType}`, ...args);\n    }\n  }\n\n  /**\n   * Describes the state that the task instance is in. Can be used for debugging,\n   * or potentially driving some UI state. Possible values are:\n   *\n   * - `\"dropped\"`: task instance was canceled before it started\n   * - `\"canceled\"`: task instance was canceled before it could finish\n   * - `\"finished\"`: task instance ran to completion (even if an exception was thrown)\n   * - `\"running\"`: task instance is currently running (returns true even if\n   *     is paused on a yielded promise)\n   * - `\"waiting\"`: task instance hasn't begun running yet (usually\n   *     because the task is using the {@linkcode TaskProperty#enqueue enqueue}\n   *     task modifier)\n   *\n   * The animated timeline examples on the [Task Concurrency](/docs/task-concurrency)\n   * docs page make use of this property.\n   *\n   * @name state\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n\n  /**\n   * True if the TaskInstance was canceled before it could\n   * ever start running. For example, calling\n   * {@linkcode Task#perform .perform()} twice on a\n   * task with the {@linkcode TaskProperty#drop drop} modifier applied\n   * will result in the second task instance being dropped.\n   *\n   * @name isDropped\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n\n  /**\n   * True if the task is still running.\n   *\n   * @name isRunning\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n\n  /**\n   * Event emitted when a new {@linkcode TaskInstance} starts executing.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:started')\n   *   onDoSomethingStarted(taskInstance) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:started\n   * @param {TaskInstance} taskInstance - Task instance that was started\n   */\n\n  /**\n   * Event emitted when a {@linkcode TaskInstance} succeeds.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:succeeded')\n   *   onDoSomethingSucceeded(taskInstance) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:succeeded\n   * @param {TaskInstance} taskInstance - Task instance that was succeeded\n   */\n\n  /**\n   * Event emitted when a {@linkcode TaskInstance} throws an an error that is\n   * not handled within the task itself.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:errored')\n   *   onDoSomethingErrored(taskInstance, error) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:errored\n   * @param {TaskInstance} taskInstance - Task instance that was started\n   * @param {Error} error - Error that was thrown by the task instance\n   */\n\n  /**\n   * Event emitted when a {@linkcode TaskInstance} is canceled.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:canceled')\n   *   onDoSomethingCanceled(taskInstance, cancelationReason) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:canceled\n   * @param {TaskInstance} taskInstance - Task instance that was started\n   * @param {string} cancelationReason - Cancelation reason that was was provided to {@linkcode TaskInstance#cancel}\n   */\n\n  /**\n   * Cancels the task instance. Has no effect if the task instance has\n   * already been canceled or has already finished running.\n   *\n   * @method cancel\n   * @memberof TaskInstance\n   * @instance\n   * @async\n   */\n\n  /**\n   * Returns a promise that resolves with the value returned\n   * from the task's (generator) function, or rejects with\n   * either the exception thrown from the task function, or\n   * an error with a `.name` property with value `\"TaskCancelation\"`.\n   *\n   * @method then\n   * @memberof TaskInstance\n   * @instance\n   * @return {Promise}\n   */\n\n  /**\n   * @method catch\n   * @memberof TaskInstance\n   * @instance\n   * @return {Promise}\n   */\n\n  /**\n   * @method finally\n   * @memberof TaskInstance\n   * @instance\n   * @return {Promise}\n   */\n}\n\nif (TRACKED_INITIAL_INSTANCE_STATE) {\n  Object.defineProperties(\n    TaskInstance.prototype,\n    TRACKED_INITIAL_INSTANCE_STATE,\n  );\n}\n","import Ember from 'ember';\n\nimport { computed } from '@ember/object';\n\nimport DropSchedulerPolicy from './external/scheduler/policies/drop-policy';\nimport EnqueueSchedulerPolicy from './external/scheduler/policies/enqueued-policy';\nimport KeepLatestSchedulerPolicy from './external/scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './external/scheduler/policies/restartable-policy';\n\nexport let taskFactorySymbol = '__ec_task_factory';\n\nexport const propertyModifiers = {\n  /**\n   * Configures the task to cancel old currently task instances\n   * to make room for a new one to perform. Sets default\n   * maxConcurrency to 1.\n   *\n   * [See the Live Example](/docs/examples/route-tasks/1)\n   *\n   * @method restartable\n   * @memberof TaskProperty\n   * @instance\n   */\n  restartable() {\n    this[taskFactorySymbol].setBufferPolicy(RestartableSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Configures the task to run task instances one-at-a-time in\n   * the order they were `.perform()`ed. Sets default\n   * maxConcurrency to 1.\n   *\n   * @method enqueue\n   * @memberof TaskProperty\n   * @instance\n   */\n  enqueue() {\n    this[taskFactorySymbol].setBufferPolicy(EnqueueSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Configures the task to immediately cancel (i.e. drop) any\n   * task instances performed when the task is already running\n   * at maxConcurrency. Sets default maxConcurrency to 1.\n   *\n   * @method drop\n   * @memberof TaskProperty\n   * @instance\n   */\n  drop() {\n    this[taskFactorySymbol].setBufferPolicy(DropSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Configures the task to drop all but the most recently\n   * performed {@linkcode TaskInstance }.\n   *\n   * @method keepLatest\n   * @memberof TaskProperty\n   * @instance\n   */\n  keepLatest() {\n    this[taskFactorySymbol].setBufferPolicy(KeepLatestSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Sets the maximum number of task instances that are allowed\n   * to run at the same time. By default, with no task modifiers\n   * applied, this number is Infinity (there is no limit\n   * to the number of tasks that can run at the same time).\n   * {@linkcode TaskProperty#restartable .restartable},\n   * {@linkcode TaskProperty#enqueue .enqueue}, and\n   * {@linkcode TaskProperty#drop .drop} set the default\n   * maxConcurrency to 1, but you can override this value\n   * to set the maximum number of concurrently running tasks\n   * to a number greater than 1.\n   *\n   * [See the AJAX Throttling example](/docs/examples/ajax-throttling)\n   *\n   * The example below uses a task with `maxConcurrency(3)` to limit\n   * the number of concurrent AJAX requests (for anyone using this task)\n   * to 3.\n   *\n   * ```js\n   * doSomeAjax = task(async (url) => {\n   *   return fetch(url);\n   * }).maxConcurrency(3);\n   *\n   * elsewhere() {\n   *   this.doSomeAjax.perform(\"http://www.example.com/json\");\n   * }\n   * ```\n   *\n   * @method maxConcurrency\n   * @memberof TaskProperty\n   * @param {Number} n The maximum number of concurrently running tasks\n   * @instance\n   */\n  maxConcurrency(n) {\n    this[taskFactorySymbol].setMaxConcurrency(n);\n    return this;\n  },\n\n  /**\n   * Adds this task to a TaskGroup so that concurrency constraints\n   * can be shared between multiple tasks.\n   *\n   * [See the Task Group docs for more information](/docs/task-groups)\n   *\n   * @method group\n   * @memberof TaskProperty\n   * @param {String} groupPath A path to the TaskGroup property\n   * @instance\n   */\n  group(taskGroupPath) {\n    this[taskFactorySymbol].setGroup(taskGroupPath);\n    return this;\n  },\n\n  /**\n   * Activates lifecycle events, allowing Evented host objects to react to task state\n   * changes.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   uploadTask = task(async (file) => {\n   *     // ... file upload stuff\n   *   }).evented();\n   *\n   *   @on('uploadTask:started')\n   *   uploadedStarted(taskInstance) {\n   *     this.analytics.track(\"User Photo: upload started\");\n   *   }\n   * }\n   * ```\n   *\n   * @method evented\n   * @memberof TaskProperty\n   * @instance\n   */\n  evented() {\n    this[taskFactorySymbol].setEvented(true);\n    return this;\n  },\n\n  /**\n   * Logs lifecycle events to aid in debugging unexpected Task behavior.\n   * Presently only logs cancelation events and the reason for the cancelation,\n   * e.g. \"TaskInstance 'doStuff' was canceled because the object it lives on was destroyed or unrendered\"\n   *\n   * @method debug\n   * @memberof TaskProperty\n   * @instance\n   */\n  debug() {\n    this[taskFactorySymbol].setDebug(true);\n    return this;\n  },\n\n  /**\n   * Configures the task to call the passed in callback for derived state updates,\n   * overriding the default derived state tracking. You may call with `null` to\n   * completely opt-out of derived state tracking.\n   *\n   * @method onState\n   * @memberof TaskProperty\n   * @param {function?} callback Callback to be called. Receives an object argument with the new state.\n   * @instance\n   */\n  onState(callback) {\n    this[taskFactorySymbol].setOnState(callback);\n    return this;\n  },\n};\n\n/**\n  A {@link TaskProperty} is the Computed Property-like object returned\n  from the {@linkcode task} function. You can call Task Modifier methods\n  on this object to configure the behavior of the {@link Task}.\n\n  See [Managing Task Concurrency](/docs/task-concurrency) for an\n  overview of all the different task modifiers you can use and how\n  they impact automatic cancelation / enqueueing of task instances.\n\n  {@link TaskProperty} is only used for supporting \"classic\" Ember objects.\n  When using Native JavaScript or TypeScript classes, you will use [task decorators](/docs/task-decorators)\n  on methods instead.\n\n  @class TaskProperty\n*/\nexport class TaskProperty {}\nexport class TaskGroupProperty {}\n\nObject.assign(TaskGroupProperty.prototype, propertyModifiers);\nObject.assign(TaskProperty.prototype, propertyModifiers, {\n  setup(proto, key) {\n    if (this.callSuperSetup) {\n      this.callSuperSetup(...arguments);\n    }\n\n    this[taskFactorySymbol].setName(key);\n    this[taskFactorySymbol]._setupEmberKVO(proto);\n  },\n\n  /**\n   * Calling `task(...).on(eventName)` configures the task to be\n   * automatically performed when the specified events fire. In\n   * this way, it behaves like\n   * [Ember.on](http://emberjs.com/api/classes/Ember.html#method_on).\n   *\n   * You can use `task(...).on('init')` to perform the task\n   * when the host object is initialized.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   *\n   * export default class MyComponent extends Component {\n   *   pollForUpdates = task(async () => {\n   *     // ... this runs when the Component is first created\n   *     // because we specified .on('init')\n   *   }).on('init');\n   *\n   *   handleFoo = task(async (a, b, c) => {\n   *     // this gets performed automatically if the 'foo'\n   *     // event fires on this Component,\n   *     // e.g., if someone called component.trigger('foo')\n   *   }).on('foo');\n   * }\n   * ```\n   *\n   * @method on\n   * @memberof TaskProperty\n   * @param {String} eventNames*\n   * @instance\n   */\n  on() {\n    this[taskFactorySymbol].addPerformEvents(...arguments);\n    return this;\n  },\n\n  /**\n   * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n   * but instead will cause the task to be canceled if any of the\n   * specified events fire on the parent object.\n   *\n   * [See the Live Example](/docs/examples/route-tasks/1)\n   *\n   * @method cancelOn\n   * @memberof TaskProperty\n   * @param {String} eventNames*\n   * @instance\n   */\n  cancelOn() {\n    this[taskFactorySymbol].addCancelEvents(...arguments);\n    return this;\n  },\n\n  /**\n   * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n   * but instead will cause the task to be performed if any of the\n   * specified properties on the parent object change.\n   *\n   * @method observes\n   * @memberof TaskProperty\n   * @param {String} keys*\n   * @instance\n   */\n  observes() {\n    this[taskFactorySymbol].addObserverKeys(...arguments);\n    return this;\n  },\n});\n\nconst setDecorator = Ember._setClassicDecorator;\nexport function taskComputed(fn) {\n  let cp = function (proto, key) {\n    if (cp.setup !== undefined) {\n      cp.setup(proto, key);\n    }\n\n    return computed(fn)(...arguments);\n  };\n\n  setDecorator(cp);\n\n  return cp;\n}\n","import { setOwner, getOwner } from '@ember/application';\nimport EmberObject, { get, set } from '@ember/object';\nimport { isDestroying, registerDestructor } from '@ember/destroyable';\nimport { Task as BaseTask } from './external/task/task';\nimport { TaskInstance } from './task-instance';\nimport { TaskInstanceExecutor } from './external/task-instance/executor';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\nimport { CANCEL_KIND_LIFESPAN_END } from './external/task-instance/cancelation';\n\n/**\n  The `Task` object lives on a host Ember object (e.g.\n  a Component, Route, or Controller). You call the\n  {@linkcode Task#perform .perform()} method on this object\n  to create run individual {@linkcode TaskInstance}s,\n  and at any point, you can call the {@linkcode Task#cancelAll .cancelAll()}\n  method on this object to cancel all running or enqueued\n  {@linkcode TaskInstance}s.\n\n  <style>\n    .ignore-this--this-is-here-to-hide-constructor,\n    #Task { display: none }\n  </style>\n\n  @class Task\n*/\nexport class Task extends BaseTask {\n  /**\n   * `true` if any current task instances are running.\n   *\n   * @memberof Task\n   * @member {boolean} isRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if any future task instances are queued.\n   *\n   * @memberof Task\n   * @member {boolean} isQueued\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if the task is not in the running or queued state.\n   *\n   * @memberof Task\n   * @member {boolean} isIdle\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n   *\n   * @memberof Task\n   * @member {string} state\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently started task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} last\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is currently running.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently performed task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastPerformed\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that succeeded.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastSuccessful\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently completed task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastComplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that errored.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastErrored\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently canceled task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastCanceled\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is incomplete.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastIncomplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The number of times this task has been performed.\n   *\n   * @memberof Task\n   * @member {number} performCount\n   * @instance\n   * @readOnly\n   */\n\n  constructor(options) {\n    super(options);\n\n    if (!isDestroying(this.context)) {\n      registerDestructor(this.context, () => {\n        this.cancelAll({\n          reason: 'the object it lives on was destroyed or unrendered',\n          cancelRequestKind: CANCEL_KIND_LIFESPAN_END,\n        });\n      });\n    }\n  }\n\n  /**\n   * Flags the task as linked to the parent task's lifetime. Must be called\n   * within another task's perform function. The task will be cancelled if the\n   * parent task is canceled as well.\n   *\n   * ember-concurrency will indicate when this may be needed.\n   *\n   * @method linked\n   * @memberof Task\n   * @instance\n   *\n   */\n\n  /**\n   * Flags the task as not linked to the parent task's lifetime. Must be called\n   * within another task's perform function. The task will NOT be cancelled if the\n   * parent task is canceled.\n   *\n   * This is useful for avoiding the so-called \"self-cancel loop\" for tasks.\n   * ember-concurrency will indicate when this may be needed.\n   *\n   * @method unlinked\n   * @memberof Task\n   * @instance\n   *\n   */\n\n  /**\n   * Creates a new {@linkcode TaskInstance} and attempts to run it right away.\n   * If running this task instance would increase the task's concurrency\n   * to a number greater than the task's maxConcurrency, this task\n   * instance might be immediately canceled (dropped), or enqueued\n   * to run at later time, after the currently running task(s) have finished.\n   *\n   * @method perform\n   * @memberof Task\n   * @param {*} arg* - args to pass to the task function\n   * @instance\n   *\n   * @fires TaskInstance#TASK_NAME:started\n   * @fires TaskInstance#TASK_NAME:succeeded\n   * @fires TaskInstance#TASK_NAME:errored\n   * @fires TaskInstance#TASK_NAME:canceled\n   *\n   */\n\n  /**\n   * Cancels all running or queued `TaskInstance`s for this Task.\n   * If you're trying to cancel a specific TaskInstance (rather\n   * than all of the instances running under this task) call\n   * `.cancel()` on the specific TaskInstance.\n   *\n   * @method cancelAll\n   * @memberof Task\n   * @param options.reason A descriptive reason the task was\n   *   cancelled. Defaults to `\".cancelAll() was explicitly called\n   *   on the Task\"`.\n   * @param options.resetState If true, will clear the task state\n   *   (`last*` and `performCount` properties will be set to initial\n   *   values). Defaults to false.\n   * @instance\n   * @async\n   *\n   */\n\n  get _isAlive() {\n    return !isDestroying(this.context);\n  }\n\n  _taskInstanceFactory(args, performType, linkedObject) {\n    let options = this._taskInstanceOptions(args, performType, linkedObject);\n    let taskInstance = new TaskInstance(options);\n    return taskInstance;\n  }\n\n  _clone() {\n    return new Task({\n      context: this.context,\n      debug: this.debug,\n      env: this.env,\n      generatorFactory: this.generatorFactory,\n      group: this.group,\n      hasEnabledEvents: this.hasEnabledEvents,\n      name: this.name,\n      onStateCallback: this.onStateCallback,\n      scheduler: this.scheduler,\n    });\n  }\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n  Object.defineProperties(Task.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(Task.prototype, TASKABLE_MIXIN);\n\nconst currentTaskInstanceSymbol = '__ec__encap_current_ti';\nexport class EncapsulatedTask extends Task {\n  constructor(options) {\n    super(options);\n    this.taskObj = options.taskObj;\n    this._encapsulatedTaskStates = new WeakMap();\n    this._encapsulatedTaskInstanceProxies = new WeakMap();\n  }\n\n  _getEncapsulatedTaskClass() {\n    let encapsulatedTaskImplClass = this._encapsulatedTaskImplClass;\n\n    if (!encapsulatedTaskImplClass) {\n      // eslint-disable-next-line ember/no-classic-classes\n      encapsulatedTaskImplClass = EmberObject.extend(this.taskObj, {\n        unknownProperty(key) {\n          let currentInstance = this[currentTaskInstanceSymbol];\n          return currentInstance ? currentInstance[key] : undefined;\n        },\n      });\n    }\n\n    return encapsulatedTaskImplClass;\n  }\n\n  _taskInstanceFactory(args, performType) {\n    let owner = getOwner(this.context);\n    let taskInstanceProxy;\n    let encapsulatedTaskImpl = this._getEncapsulatedTaskClass().create({\n      context: this.context,\n    });\n    setOwner(encapsulatedTaskImpl, owner);\n\n    let generatorFactory = () =>\n      encapsulatedTaskImpl.perform.apply(taskInstanceProxy, args);\n    let taskInstance = new TaskInstance({\n      task: this,\n      args,\n      executor: new TaskInstanceExecutor({\n        generatorFactory,\n        env: this.env,\n        debug: this.debug,\n      }),\n      performType,\n      hasEnabledEvents: this.hasEnabledEvents,\n    });\n    encapsulatedTaskImpl[currentTaskInstanceSymbol] = taskInstance;\n\n    this._encapsulatedTaskStates.set(taskInstance, encapsulatedTaskImpl);\n\n    taskInstanceProxy = this._wrappedEncapsulatedTaskInstance(taskInstance);\n\n    return taskInstanceProxy;\n  }\n\n  _wrappedEncapsulatedTaskInstance(taskInstance) {\n    if (!taskInstance) {\n      return null;\n    }\n\n    let _encapsulatedTaskInstanceProxies =\n      this._encapsulatedTaskInstanceProxies;\n    let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n\n    if (!proxy) {\n      let encapsulatedTaskImpl = this._encapsulatedTaskStates.get(taskInstance);\n\n      proxy = new Proxy(taskInstance, {\n        get(obj, prop) {\n          return prop in obj\n            ? obj[prop]\n            : get(encapsulatedTaskImpl, prop.toString());\n        },\n        set(obj, prop, value) {\n          if (prop in obj) {\n            obj[prop] = value;\n          } else {\n            set(encapsulatedTaskImpl, prop.toString(), value);\n          }\n          return true;\n        },\n        has(obj, prop) {\n          return prop in obj || prop in encapsulatedTaskImpl;\n        },\n        ownKeys(obj) {\n          return Reflect.ownKeys(obj).concat(\n            Reflect.ownKeys(encapsulatedTaskImpl),\n          );\n        },\n        defineProperty(obj, prop, descriptor) {\n          // Ember < 3.16 uses a WeakMap for value storage, keyed to the proxy.\n          // We need to ensure that when we use setProperties to update it, and\n          // it creates Meta, that it uses the proxy to key, otherwise we'll\n          // have two different values stores in Meta, one which won't render.\n          let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n          if (proxy) {\n            if (descriptor.get) {\n              descriptor.get = descriptor.get.bind(proxy);\n            } else if (proxy && descriptor.set) {\n              descriptor.set = descriptor.set.bind(proxy);\n            }\n          }\n\n          return Reflect.defineProperty(encapsulatedTaskImpl, prop, descriptor);\n        },\n        getOwnPropertyDescriptor(obj, prop) {\n          return prop in obj\n            ? Reflect.getOwnPropertyDescriptor(obj, prop)\n            : Reflect.getOwnPropertyDescriptor(encapsulatedTaskImpl, prop);\n        },\n      });\n\n      _encapsulatedTaskInstanceProxies.set(taskInstance, proxy);\n    }\n\n    return proxy;\n  }\n}\n","export const TASKABLE_MIXIN = {\n  _performCount: 0,\n\n  setState(state) {\n    this._performCount = this._performCount + (state.numPerformedInc || 0);\n\n    let isRunning = state.numRunning > 0;\n    let isQueued = state.numQueued > 0;\n    let derivedState = Object.assign({}, state, {\n      performCount: this._performCount,\n      isRunning,\n      isQueued,\n      isIdle: !isRunning && !isQueued,\n      state: isRunning ? 'running' : 'idle',\n    });\n    Object.assign(this, derivedState);\n  },\n\n  onState(state, task) {\n    if (task.onStateCallback) {\n      task.onStateCallback(state, task);\n    }\n  },\n};\n","import { tracked } from '@glimmer/tracking';\nimport { DEFAULT_STATE as INITIAL_TASK_STATE } from './external/task/default-state';\nimport { INITIAL_STATE as INITIAL_INSTANCE_STATE } from './external/task-instance/initial-state';\n\nfunction trackMixin(proto, obj, key) {\n  const propDesc = Object.getOwnPropertyDescriptor(proto, key);\n  propDesc.initializer = propDesc.initializer || (() => proto[key]);\n  delete propDesc.value;\n  const desc = tracked(obj, key, propDesc);\n  obj[key] = desc;\n  return obj;\n}\n\nfunction applyTracked(proto, initial) {\n  return Object.keys(proto).reduce((acc, key) => {\n    return trackMixin(proto, acc, key);\n  }, initial);\n}\n\nexport let TRACKED_INITIAL_TASK_STATE;\nexport let TRACKED_INITIAL_INSTANCE_STATE;\n\nTRACKED_INITIAL_TASK_STATE = applyTracked(INITIAL_TASK_STATE, {});\nTRACKED_INITIAL_TASK_STATE = applyTracked(\n  {\n    numRunning: 0,\n    numQueued: 0,\n    isRunning: false,\n    isQueued: false,\n    isIdle: true,\n    state: 'idle',\n  },\n  TRACKED_INITIAL_TASK_STATE,\n);\n\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(INITIAL_INSTANCE_STATE, {});\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(\n  {\n    state: 'waiting',\n    isDropped: false,\n    isRunning: false,\n  },\n  TRACKED_INITIAL_INSTANCE_STATE,\n);\n\nObject.freeze(TRACKED_INITIAL_TASK_STATE);\nObject.freeze(TRACKED_INITIAL_INSTANCE_STATE);\n","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { taskHelperClosure } from '../-private/helpers';\nimport type { Task } from '../index';\n\nconst CANCEL_REASON = \"the 'cancel-all' template helper was invoked\";\n\ntype CancelAllParams = [task: Task<any, any[]>];\n\nexport function cancelHelper(args: CancelAllParams) {\n  let cancelable = args[0];\n  if (!cancelable || typeof cancelable.cancelAll !== 'function') {\n    assert(\n      `The first argument passed to the \\`cancel-all\\` helper should be a Task or TaskGroup (without quotes); you passed ${cancelable}`,\n      false,\n    );\n  }\n\n  return taskHelperClosure('cancel-all', 'cancelAll', [\n    cancelable,\n    { reason: CANCEL_REASON },\n  ]);\n}\n\nexport default helper(cancelHelper);\n","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { taskHelperClosure } from '../-private/helpers';\nimport type { Task } from '../index';\n\nfunction maybeReportError(\n  onError: (error: unknown) => void | null | undefined,\n) {\n  return function (e: unknown) {\n    if (typeof onError === 'function') {\n      onError(e);\n    } else if (onError === null) {\n      // Do nothing\n    } else {\n      assert(\n        `The onError argument passed to the \\`perform\\` helper should be a function or null; you passed ${onError}`,\n        false,\n      );\n    }\n  };\n}\n\ntype PerformParams = [task: Task<any, any[]>, ...args: any[]];\n\nexport function performHelper(args: PerformParams, hash: any) {\n  let perform = taskHelperClosure('perform', 'perform', args, hash);\n\n  if (hash && typeof hash.onError !== 'undefined') {\n    return function (...innerArgs: any[]) {\n      try {\n        let taskInstance = perform(...innerArgs);\n        return taskInstance.catch(maybeReportError(hash.onError));\n        // eslint-disable-next-line no-empty\n      } catch {\n        maybeReportError(hash.onError);\n      }\n    };\n  } else {\n    return perform;\n  }\n}\n\nexport default helper(performHelper);\n","import { helper } from '@ember/component/helper';\nimport type { Task } from '../index';\n\ntype TaskParams = [task: Task<any, any[]>, ...args: any[]];\n\nfunction taskHelper(positional: TaskParams) {\n  let [task, ...args] = positional;\n\n  // @ts-expect-errors _curry isn't typed yet\n  return task._curry(...args);\n}\n\nexport default helper(taskHelper);\n","import { later, cancel } from '@ember/runloop';\nimport { EMBER_ENVIRONMENT } from './ember-environment';\nimport { Yieldable } from './external/yieldables';\n\nexport function isEventedObject(c) {\n  return (\n    c &&\n    ((typeof c.one === 'function' && typeof c.off === 'function') ||\n      (typeof c.on === 'function' && typeof c.off === 'function') ||\n      (typeof c.addEventListener === 'function' &&\n        typeof c.removeEventListener === 'function'))\n  );\n}\n\nexport class EmberYieldable extends Yieldable {\n  _deferable() {\n    return EMBER_ENVIRONMENT.defer();\n  }\n}\n\nclass TimeoutYieldable extends EmberYieldable {\n  constructor(ms) {\n    super();\n    this.ms = ms;\n  }\n\n  onYield(state) {\n    let timerId = later(() => state.next(), this.ms);\n\n    return () => cancel(timerId);\n  }\n}\n\n/**\n *\n * Yielding `timeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * This timeout will be scheduled on the Ember runloop, which\n * means that test helpers will wait for it to complete before\n * continuing with the test. See `rawTimeout()` if you need\n * different behavior.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     while (true) {\n *       console.log(\"Hello!\");\n *       yield timeout(1000);\n *     }\n *   }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n *   the task, in milliseconds\n */\nexport function timeout(ms) {\n  return new TimeoutYieldable(ms);\n}\n\nexport function deprecatePrivateModule(moduleName) {\n  // eslint-disable-next-line no-console\n  console.warn(\n    `an Ember addon is importing a private ember-concurrency module '${moduleName}' that has moved`,\n  );\n}\n","import { TaskFactory } from './task-factory';\n\nimport { deprecate } from '@ember/debug';\n\nfunction taskFromPropertyDescriptor(\n  target,\n  key,\n  descriptor,\n  params = [],\n  factoryClass = TaskFactory,\n) {\n  let { initializer, get, value } = descriptor;\n  let taskFn;\n\n  deprecate(\n    'Using @task decorator (or any of its variants) is deprecated. Please use modern `taskName = task(async () => {})` syntax instead',\n    false,\n    {\n      id: 'ember-concurrency.deprecate-decorator-task',\n      for: 'ember-concurrency',\n      since: '4.0.5',\n      until: '5.0.0',\n    },\n  );\n\n  if (initializer) {\n    taskFn = initializer.call(undefined);\n  } else if (get) {\n    taskFn = get.call(undefined);\n  } else if (value) {\n    taskFn = value;\n  }\n\n  taskFn.displayName = `${key} (task)`;\n\n  let tasks = new WeakMap();\n  let options = params[0] || {};\n  let factory = new factoryClass(key, taskFn, options);\n  factory._setupEmberKVO(target);\n\n  return {\n    get() {\n      let task = tasks.get(this);\n\n      if (!task) {\n        task = factory.createTask(this);\n        tasks.set(this, task);\n      }\n\n      return task;\n    },\n  };\n}\n\nfunction taskGroupPropertyDescriptor(\n  _target,\n  key,\n  _descriptor,\n  params = [],\n  factoryClass = TaskFactory,\n) {\n  let taskGroups = new WeakMap();\n  let options = params[0] || {};\n  let factory = new factoryClass(key, null, options);\n\n  return {\n    get() {\n      let task = taskGroups.get(this);\n\n      if (!task) {\n        task = factory.createTaskGroup(this);\n        taskGroups.set(this, task);\n      }\n\n      return task;\n    },\n  };\n}\n\n// Cribbed from @ember-decorators/utils\nfunction isFieldDescriptor(possibleDesc) {\n  let [target, key, desc] = possibleDesc;\n\n  return (\n    possibleDesc.length === 3 &&\n    typeof target === 'object' &&\n    target !== null &&\n    typeof key === 'string' &&\n    ((typeof desc === 'object' &&\n      desc !== null &&\n      'enumerable' in desc &&\n      'configurable' in desc) ||\n      desc === undefined) // TS compatibility ???\n  );\n}\n\nexport function decoratorWithParams(descriptorFn) {\n  return function (...params) {\n    if (isFieldDescriptor(params)) {\n      return descriptorFn(...params);\n    } else {\n      return (...desc) => descriptorFn(...desc, params);\n    }\n  };\n}\n\nfunction createDecorator(fn, baseOptions = {}, factoryClass = TaskFactory) {\n  return decoratorWithParams((target, key, descriptor, [userOptions] = []) => {\n    let mergedOptions = Object.assign({}, { ...baseOptions, ...userOptions });\n\n    return fn(target, key, descriptor, [mergedOptions], factoryClass);\n  });\n}\n\nexport function createTaskDecorator(\n  baseOptions = {},\n  factoryClass = TaskFactory,\n) {\n  return createDecorator(taskFromPropertyDescriptor, baseOptions, factoryClass);\n}\n\nexport function createTaskGroupDecorator(\n  baseOptions = {},\n  factoryClass = TaskFactory,\n) {\n  return createDecorator(\n    taskGroupPropertyDescriptor,\n    baseOptions,\n    factoryClass,\n  );\n}\n\nexport const lastValue = decoratorWithParams(\n  (_target, _key, descriptor, [taskName] = []) => {\n    const { initializer } = descriptor;\n    delete descriptor.initializer;\n\n    deprecate(\n      '@lastValue is deprecated is deprecated along with all ember-concurrency decorators. Please use a getter that references taskName.lastSuccessful.value instead.',\n      false,\n      {\n        id: 'ember-concurrency.deprecate-decorator-last-value',\n        for: 'ember-concurrency',\n        since: '4.0.5',\n        until: '5.0.0',\n      },\n    );\n\n    return {\n      get() {\n        let lastInstance = this[taskName].lastSuccessful;\n\n        if (lastInstance) {\n          return lastInstance.value;\n        }\n\n        if (initializer) {\n          return initializer.call(this);\n        }\n\n        return undefined;\n      },\n    };\n  },\n);\n","import {\n  createTaskDecorator,\n  createTaskGroupDecorator,\n  lastValue as nativeLastValue,\n} from './external/task-decorators';\nimport { TaskFactory as EmberTaskFactory } from './task-factory';\n\nexport const lastValue = nativeLastValue;\n\n/**\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by a generator function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * Turns the decorated generator function into a task.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, `group` or `keepLatest`.\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;task({ maxConcurrency: 5, keepLatest: true, cancelOn: 'click' })\n *   *taskWithModifiers() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options\n * @param {string|string[]} [options.cancelOn] Events to cancel task on. Applies only to `&#64;ember/component`\n * @param {boolean} [options.enqueue] Sets `enqueue` modifier on task if `true`\n * @param {boolean} [options.evented] Enables [task lifecycle events](/docs/advanced/lifecycle-events) for this Task, if `true`\n * @param {boolean} [options.debug] Enables task debugging if `true`\n * @param {boolean} [options.drop] Sets `drop` modifier on task if `true`\n * @param {string} [options.group] Associates task with the group specified\n * @param {boolean} [options.keepLatest] Sets `keepLatest` modifier on task if `true`\n * @param {number} [options.maxConcurrency] Sets the maximum number of running task instances for the task\n * @param {string|string[]} [options.observes] Properties to watch and cause task to be performed when they change\n * @param {string|string[]} [options.on] Events to perform task on. Applies only to `&#64;ember/component`\n * @param {function?} [options.onState] Callback to use for state tracking. May be set to `null` to disable state tracking.\n * @param {boolean} [options.restartable] Sets `restartable` modifier on task if `true`\n * @return {Task}\n */\nexport const task = createTaskDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, dropTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;dropTask({ cancelOn: 'click' })\n *   *myDropTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const dropTask = createTaskDecorator({ drop: true }, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, enqueueTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;enqueueTask({ cancelOn: 'click' })\n *   *myEnqueueTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const enqueueTask = createTaskDecorator(\n  {\n    enqueue: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, keepLatestTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;keepLatestTask({ cancelOn: 'click' })\n *   *myKeepLatestTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const keepLatestTask = createTaskDecorator(\n  {\n    keepLatest: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, restartableTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;restartableTask({ cancelOn: 'click' })\n *   *myRestartableTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const restartableTask = createTaskDecorator(\n  {\n    restartable: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;taskGroup({ maxConcurrency: 5 }) chores;\n *\n *   &#64;task({ group: 'chores' })\n *   *mowLawn() {}\n *\n *   &#64;task({ group: 'chores' })\n *   *doDishes() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const taskGroup = createTaskGroupDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const dropTaskGroup = createTaskGroupDecorator(\n  {\n    drop: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const enqueueTaskGroup = createTaskGroupDecorator(\n  {\n    enqueue: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const keepLatestTaskGroup = createTaskGroupDecorator(\n  { keepLatest: true },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const restartableTaskGroup = createTaskGroupDecorator(\n  { restartable: true },\n  EmberTaskFactory,\n);\n","import { assert, deprecate } from '@ember/debug';\nimport {\n  task as taskDecorator,\n  taskGroup as taskGroupDecorator,\n} from './task-decorators';\nimport { TaskFactory } from './task-factory';\nimport {\n  TaskGroupProperty,\n  TaskProperty,\n  taskComputed,\n  taskFactorySymbol,\n} from './task-properties';\n\n// eslint-disable-next-line no-unused-vars\nimport { TaskGroup } from './task-group';\n\n/**\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by an async function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * To define a task, use the `task(...)` function, and pass in\n * an async arrow function, which will be invoked when the task\n * is performed. Async functions with the await keyword can\n * be used to elegantly express asynchronous, cancelable\n * operations.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by passing in an object that defined a `perform` async\n * function property.\n *\n * The following Component defines a task called `myTask` that,\n * when performed, prints a message to the console, sleeps for 1 second,\n * prints a final message to the console, and then completes.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, timeout } from 'ember-concurrency';\n *\n * export default class MyComponent extends Component {\n *   myTask = task(async () => {\n *     console.log(\"Pausing for a second...\");\n *     await timeout(1000);\n *     console.log(\"Done!\");\n *   });\n * }\n * ```\n *\n * ```hbs\n * <button {{action myTask.perform}}>Perform Task</button>\n * ```\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * @param {function} taskFunction the async function backing the task.\n * @returns {TaskProperty}\n */\nexport function task(taskFnOrProtoOrDecoratorOptions, key, descriptor) {\n  assert(\n    `It appears you're attempting to use the new task(async () => { ... }) syntax, but the async arrow task function you've provided is not being properly compiled by Babel.\\n\\nPossible causes / remedies:\\n\\n1. You must pass the async function expression directly to the task() function (it is not currently supported to pass in a variable containing the async arrow fn, or any other kind of indirection)\\n2. The new task syntax is only supported by native classes. Ensure that this is one.\\n3. If this code is in an addon, please ensure the addon specifies ember-concurrency \"2.3.0\" or higher in \"dependencies\" (not \"devDependencies\")\\n4. Ensure that there is only one version of ember-concurrency v2.3.0+ being used in your project (including nested dependencies) and consider using npm/yarn/pnpm resolutions to enforce a single version is used\\n5. Ensure that you have registered the Babel transform that Ember Concurrency uses to transform tasks in the \"async-arrow\" notation, see https://ember-concurrency.com/docs/v4-upgrade`,\n    !isUntranspiledAsyncFn(arguments[arguments.length - 1]),\n  );\n\n  if (\n    isDecoratorOptions(taskFnOrProtoOrDecoratorOptions) ||\n    (key && descriptor)\n  ) {\n    return taskDecorator(...arguments);\n  } else {\n    return buildClassicTaskProperty(taskFnOrProtoOrDecoratorOptions);\n  }\n}\n\nfunction isUntranspiledAsyncFn(obj) {\n  return obj && obj.constructor && obj.constructor.name === 'AsyncFunction';\n}\n\n/**\n * Build and return a \"classic\" TaskProperty, which is essentially a subclass of a Computed Property\n * descriptor that can be used to define Tasks on classic Ember.Objects.\n *\n * @private\n */\nfunction buildClassicTaskProperty(taskFn) {\n  const taskProperty = taskComputed(function () {\n    taskProperty[taskFactorySymbol].setTaskDefinition(taskProperty.taskFn);\n    return taskProperty[taskFactorySymbol].createTask(this);\n  });\n\n  deprecate(\n    \"Using task() in any form other than `taskName = task(async () => {})` is deprecated. Please use the modern syntax instead (and consider using one of ember-concurrency's codemods).\",\n    false,\n    {\n      id: 'ember-concurrency.deprecate-classic-task-api',\n      for: 'ember-concurrency',\n      since: '4.0.5',\n      until: '5.0.0',\n    },\n  );\n\n  taskProperty.taskFn = taskFn;\n\n  taskProperty[taskFactorySymbol] = new TaskFactory();\n\n  Object.setPrototypeOf(taskProperty, TaskProperty.prototype);\n\n  return taskProperty;\n}\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * ```js\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * export default class MyController extends Controller {\n *   &#64;taskGroup({ drop: true }) chores;\n *\n *   &#64;task({ group: 'chores' }) mowLawn = taskFn;\n *   &#64;task({ group: 'chores' }) doDishes = taskFn;\n *   &#64;task({ group: 'chores' }) changeDiapers = taskFn;\n * }\n * ```\n *\n * @returns {TaskGroup}\n */\nexport function taskGroup(possibleDecoratorOptions, key, descriptor) {\n  if (isDecoratorOptions(possibleDecoratorOptions) || (key && descriptor)) {\n    return taskGroupDecorator(...arguments);\n  } else {\n    let tp = taskComputed(function (key) {\n      tp[taskFactorySymbol].setName(key);\n      return tp[taskFactorySymbol].createTaskGroup(this);\n    });\n\n    tp[taskFactorySymbol] = new TaskFactory();\n\n    Object.setPrototypeOf(tp, TaskGroupProperty.prototype);\n\n    return tp;\n  }\n}\n\nfunction isDecoratorOptions(possibleOptions) {\n  if (!possibleOptions) {\n    return false;\n  }\n  if (typeof possibleOptions === 'function') {\n    return false;\n  }\n\n  if (\n    typeof possibleOptions === 'object' &&\n    'perform' in possibleOptions &&\n    typeof possibleOptions.perform === 'function'\n  ) {\n    return false;\n  }\n\n  return Object.getPrototypeOf(possibleOptions) === Object.prototype;\n}\n","import { assert } from '@ember/debug';\nimport RSVP, { Promise } from 'rsvp';\nimport { TaskInstance } from './task-instance';\nimport { cancelableSymbol, Yieldable } from './external/yieldables';\n\n/**\n * A cancelation-aware variant of [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).\n * The normal version of a `Promise.all` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `all()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `all()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `all` will be canceled\n * - if any of the {@linkcode TaskInstance}s (or regular promises) passed in reject (or\n *   are canceled), all of the other unfinished `TaskInstance`s will\n *   be automatically canceled.\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const all = taskAwareVariantOf(RSVP.Promise, 'all', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.allSettled](https://api.emberjs.com/ember/release/functions/rsvp/allSettled).\n * The normal version of a `RSVP.allSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `allSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `allSettled()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `allSettled` will be canceled\n */\nexport const allSettled = taskAwareVariantOf(RSVP, 'allSettled', identity);\n\n/**\n * A cancelation-aware variant of [Promise.race](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race).\n * The normal version of a `Promise.race` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `race()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `race()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `race` will be canceled\n * - once any of the tasks/promises passed in complete (either success, failure,\n *   or cancelation), any of the {@linkcode TaskInstance}s passed in will be canceled\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const race = taskAwareVariantOf(Promise, 'race', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.hash](https://api.emberjs.com/ember/release/functions/rsvp/hash).\n * The normal version of a `RSVP.hash` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hash()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hash()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `hash` will be canceled\n * - if any of the items rejects/cancels, all other cancelable items\n *   (e.g. {@linkcode TaskInstance}s) will be canceled\n */\nexport const hash = taskAwareVariantOf(RSVP, 'hash', getValues);\n\n/**\n * A cancelation-aware variant of [RSVP.hashSettled](https://api.emberjs.com/ember/release/functions/rsvp/hashSettled).\n * The normal version of a `RSVP.hashSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hashSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hashSettled()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `hashSettled` will be canceled\n */\nexport const hashSettled = taskAwareVariantOf(RSVP, 'hashSettled', getValues);\n\nfunction identity(obj) {\n  return obj;\n}\n\nfunction getValues(obj) {\n  return Object.keys(obj).map((k) => obj[k]);\n}\n\nfunction castForPromiseHelper(castable) {\n  if (castable) {\n    if (castable instanceof TaskInstance) {\n      // Mark TaskInstances, including those that performed synchronously and\n      // have finished already, as having their errors handled, as if they had\n      // been then'd, which this is emulating.\n      castable.executor.asyncErrorsHandled = true;\n    } else if (castable instanceof Yieldable) {\n      // Cast to promise\n      return castable._toPromise();\n    }\n  }\n\n  return castable;\n}\n\nfunction castAwaitables(arrOrHash, callback) {\n  if (Array.isArray(arrOrHash)) {\n    return arrOrHash.map(callback);\n  } else if (typeof arrOrHash === 'object' && arrOrHash !== null) {\n    let obj = {};\n    Object.keys(arrOrHash).forEach((key) => {\n      obj[key] = callback(arrOrHash[key]);\n    });\n    return obj;\n  } else {\n    // :shruggie:\n    return arrOrHash;\n  }\n}\n\nfunction taskAwareVariantOf(obj, method, getItems) {\n  return function (awaitable) {\n    let awaitables = castAwaitables(awaitable, castForPromiseHelper);\n\n    let items = getItems(awaitables);\n    assert(`'${method}' expects an array.`, Array.isArray(items));\n\n    let defer = RSVP.defer();\n\n    obj[method](awaitables).then(defer.resolve, defer.reject);\n\n    let hasCancelled = false;\n    let cancelAll = () => {\n      if (hasCancelled) {\n        return;\n      }\n      hasCancelled = true;\n      items.forEach((it) => {\n        if (it) {\n          if (it instanceof TaskInstance) {\n            it.cancel();\n          } else if (typeof it[cancelableSymbol] === 'function') {\n            it[cancelableSymbol]();\n          }\n        }\n      });\n    };\n\n    let promise = defer.promise.finally(cancelAll);\n    promise[cancelableSymbol] = cancelAll;\n    return promise;\n  };\n}\n","import { assert, deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { cancel, schedule } from '@ember/runloop';\nimport { EmberYieldable, isEventedObject } from './utils';\n\nclass WaitForQueueYieldable extends EmberYieldable {\n  constructor(queueName) {\n    super();\n    this.queueName = queueName;\n  }\n\n  onYield(state) {\n    let timerId;\n\n    try {\n      timerId = schedule(this.queueName, () => state.next());\n    } catch (error) {\n      state.throw(error);\n    }\n\n    return () => cancel(timerId);\n  }\n}\n\nclass WaitForEventYieldable extends EmberYieldable {\n  constructor(object, eventName) {\n    super();\n    this.object = object;\n    this.eventName = eventName;\n    this.usesDOMEvents = false;\n  }\n\n  on(callback) {\n    if (typeof this.object.addEventListener === 'function') {\n      // assume that we're dealing with a DOM `EventTarget`.\n      this.usesDOMEvents = true;\n      this.object.addEventListener(this.eventName, callback);\n    } else {\n      this.object.on(this.eventName, callback);\n    }\n  }\n\n  off(callback) {\n    if (this.usesDOMEvents) {\n      this.object.removeEventListener(this.eventName, callback);\n    } else {\n      this.object.off(this.eventName, callback);\n    }\n  }\n\n  onYield(state) {\n    let fn = null;\n    let disposer = () => {\n      fn && this.off(fn);\n      fn = null;\n    };\n\n    fn = (event) => {\n      disposer();\n      state.next(event);\n    };\n\n    this.on(fn);\n\n    return disposer;\n  }\n}\n\nclass WaitForPropertyYieldable extends EmberYieldable {\n  constructor(object, key, predicateCallback = Boolean) {\n    super();\n    this.object = object;\n    this.key = key;\n\n    deprecate(\n      'waitForProperty is deprecated due to its use of observers. Consider using a polling approach instead.',\n      false,\n      {\n        id: 'ember-concurrency.deprecate-wait-for-property',\n        for: 'ember-concurrency',\n        since: '4.0.5',\n        until: '5.0.0',\n      },\n    );\n\n    if (typeof predicateCallback === 'function') {\n      this.predicateCallback = predicateCallback;\n    } else {\n      this.predicateCallback = (v) => v === predicateCallback;\n    }\n  }\n\n  onYield(state) {\n    let observerBound = false;\n    let observerFn = () => {\n      let value = get(this.object, this.key);\n      let predicateValue = this.predicateCallback(value);\n      if (predicateValue) {\n        state.next(value);\n        return true;\n      }\n    };\n\n    if (!observerFn()) {\n      // eslint-disable-next-line ember/no-observers\n      addObserver(this.object, this.key, null, observerFn);\n      observerBound = true;\n    }\n\n    return () => {\n      if (observerBound && observerFn) {\n        removeObserver(this.object, this.key, null, observerFn);\n      }\n    };\n  }\n}\n\n/**\n * Use `waitForQueue` to pause the task until a certain run loop queue is reached.\n *\n * ```js\n * import { task, waitForQueue } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     yield waitForQueue('afterRender');\n *     console.log(\"now we're in the afterRender queue\");\n *   }\n * }\n * ```\n *\n * @param {string} queueName the name of the Ember run loop queue\n */\nexport function waitForQueue(queueName) {\n  return new WaitForQueueYieldable(queueName);\n}\n\n/**\n * Use `waitForEvent` to pause the task until an event is fired. The event\n * can either be a jQuery event or an Ember.Evented event (or any event system\n * where the object supports `.on()` `.one()` and `.off()`).\n *\n * ```js\n * import { task, waitForEvent } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     console.log(\"Please click anywhere..\");\n *     let clickEvent = yield waitForEvent($('body'), 'click');\n *     console.log(\"Got event\", clickEvent);\n *\n *     let emberEvent = yield waitForEvent(this, 'foo');\n *     console.log(\"Got foo event\", emberEvent);\n *\n *     // somewhere else: component.trigger('foo', { value: 123 });\n *   }\n * }\n * ```\n *\n * @param {object} object the Ember Object, jQuery element, or other object with .on() and .off() APIs\n *                 that the event fires from\n * @param {function} eventName the name of the event to wait for\n */\nexport function waitForEvent(object, eventName) {\n  assert(\n    `${object} must include Ember.Evented (or support \\`.on()\\` and \\`.off()\\`) or DOM EventTarget (or support \\`addEventListener\\` and  \\`removeEventListener\\`) to be able to use \\`waitForEvent\\``,\n    isEventedObject(object),\n  );\n  return new WaitForEventYieldable(object, eventName);\n}\n\n/**\n * Use `waitForProperty` to pause the task until a property on an object\n * changes to some expected value. This can be used for a variety of use\n * cases, including synchronizing with another task by waiting for it\n * to become idle, or change state in some other way. If you omit the\n * callback, `waitForProperty` will resume execution when the observed\n * property becomes truthy. If you provide a callback, it'll be called\n * immediately with the observed property's current value, and multiple\n * times thereafter whenever the property changes, until you return\n * a truthy value from the callback, or the current task is canceled.\n * You can also pass in a non-Function value in place of the callback,\n * in which case the task will continue executing when the property's\n * value becomes the value that you passed in.\n *\n * ```js\n * import { task, waitForProperty } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;tracked foo = 0;\n *\n *   &#64;task *myTask() {\n *     console.log(\"Waiting for `foo` to become 5\");\n *\n *     yield waitForProperty(this, 'foo', v => v === 5);\n *     // alternatively: yield waitForProperty(this, 'foo', 5);\n *\n *     // somewhere else: this.foo = 5;\n *\n *     console.log(\"`foo` is 5!\");\n *\n *     // wait for another task to be idle before running:\n *     yield waitForProperty(this, 'otherTask.isIdle');\n *     console.log(\"otherTask is idle!\");\n *   }\n * }\n * ```\n *\n * @param {object} object an object (most likely an Ember Object)\n * @param {string} key the property name that is observed for changes\n * @param {function} callbackOrValue a Function that should return a truthy value\n *                                   when the task should continue executing, or\n *                                   a non-Function value that the watched property\n *                                   needs to equal before the task will continue running\n */\nexport function waitForProperty(object, key, predicateCallback) {\n  return new WaitForPropertyYieldable(object, key, predicateCallback);\n}\n","import { isNone, isPresent, isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { getOwner } from '@ember/application';\nimport Service from '@ember/service';\nimport { serializeCookie } from '../utils/serialize-cookie.ts';\n\nconst DEFAULTS = { raw: false };\nconst MAX_COOKIE_BYTE_LENGTH = 4096;\n\ntype ReadOptions = {\n  raw?: boolean;\n  domain?: never;\n  expires?: never;\n  maxAge?: never;\n  path?: never;\n};\n\nexport type WriteOptions = {\n  domain?: string;\n  path?: string;\n  secure?: boolean;\n  raw?: boolean;\n  sameSite?: 'Strict' | 'Lax' | 'None';\n  signed?: never;\n  httpOnly?: boolean;\n  partitioned?: boolean;\n} & ({ expires?: Date; maxAge?: never } | { maxAge?: number; expires?: never });\n\ntype ClearOptions = {\n  domain?: string;\n  path?: string;\n  secure?: boolean;\n\n  expires?: never;\n  maxAge?: never;\n  raw?: never;\n};\n\ntype CookiePair = [string, string];\n\ntype FastbootCookies = Record<string, { value?: string; options?: any }>;\n\nexport default class CookiesService extends Service {\n  _fastBoot:\n    | any\n    | {\n        request?: {\n          cookies?: Record<string, string>;\n        };\n      };\n  _fastBootCookiesCache?: FastbootCookies;\n\n  protected _document: Document = window.document;\n\n  constructor() {\n    super(...arguments);\n\n    let owner = getOwner(this);\n    if (typeof this._fastBoot === 'undefined' && owner) {\n      this._fastBoot = owner.lookup('service:fastboot');\n    }\n  }\n\n  _getDocumentCookies() {\n    let all = this._document.cookie.split(';');\n    let filtered = this._filterDocumentCookies(all);\n\n    return filtered.reduce(\n      (acc, cookie) => {\n        if (!isEmpty(cookie)) {\n          let [key, value] = cookie;\n          acc[key.trim()] = (value || '').trim();\n        }\n        return acc;\n      },\n      {} as Record<string, string>\n    );\n  }\n\n  _getFastBootCookies() {\n    const cookies = this._fastBoot.request.cookies;\n    const fastBootCookies = Object.keys(cookies).reduce((acc, name) => {\n      const value = cookies[name];\n\n      if (typeof value === 'object') {\n        acc[name] = value;\n      } else {\n        acc[name] = { value };\n      }\n\n      return acc;\n    }, {} as FastbootCookies);\n    const fastBootCookiesCache = this._fastBootCookiesCache || {};\n\n    const mergedFastBootCookies = Object.assign({}, fastBootCookies, fastBootCookiesCache);\n    this._fastBootCookiesCache = mergedFastBootCookies;\n    return this._filterCachedFastBootCookies(mergedFastBootCookies);\n  }\n\n  read(): Record<string, string | undefined>;\n  read(_name: string): string | undefined;\n  read(\n    name?: string,\n    options: ReadOptions = {}\n  ): string | undefined | Record<string, string | undefined> {\n    options = Object.assign({}, DEFAULTS, options || {});\n    assert(\n      'Domain, Expires, Max-Age, and Path options cannot be set when reading cookies',\n      isEmpty(options.domain) &&\n        isEmpty(options.expires) &&\n        isEmpty(options.maxAge) &&\n        isEmpty(options.path)\n    );\n\n    let all: Record<string, string | undefined> = {};\n    if (this._isFastBoot()) {\n      all = this._getFastBootCookies();\n    } else {\n      all = this._getDocumentCookies();\n    }\n\n    if (name) {\n      return this._decodeValue(all[name], options.raw);\n    } else {\n      Object.keys(all).forEach(name => (all[name] = this._decodeValue(all[name], options.raw)));\n      return all;\n    }\n  }\n\n  write(name: string, value: unknown, options?: WriteOptions) {\n    options = Object.assign({}, DEFAULTS, options || {});\n    assert(\n      \"Cookies cannot be set as signed as signed cookies would not be modifyable in the browser as it has no knowledge of the express server's signing key!\",\n      !options.signed\n    );\n    assert(\n      'Cookies cannot be set with both maxAge and an explicit expiration time!',\n      isEmpty(options.expires) || isEmpty(options.maxAge)\n    );\n\n    value = this._encodeValue(value as string, options.raw);\n\n    assert(\n      `Cookies larger than ${MAX_COOKIE_BYTE_LENGTH} bytes are not supported by most browsers!`,\n      typeof value === 'string' && this._isCookieSizeAcceptable(value)\n    );\n\n    if (this._isFastBoot()) {\n      this._writeFastBootCookie(name, value, options);\n    } else {\n      assert('Cookies cannot be set to be HTTP-only from a browser!', !options.httpOnly);\n\n      options.path = options.path || this._normalizedDefaultPath();\n      this._writeDocumentCookie(name, value, options);\n    }\n  }\n\n  clear(name: string, options?: ClearOptions) {\n    options = Object.assign({}, options || {});\n    assert(\n      'Expires, Max-Age, and raw options cannot be set when clearing cookies',\n      isEmpty(options.expires) && isEmpty(options.maxAge) && isEmpty(options.raw)\n    );\n\n    options.expires = new Date('1970-01-01') as never;\n    options.path = options.path || this._normalizedDefaultPath();\n    this.write(name, null, options);\n  }\n\n  exists(name: string) {\n    let all;\n    if (this._isFastBoot()) {\n      all = this._getFastBootCookies();\n    } else {\n      all = this._getDocumentCookies();\n    }\n\n    return Object.prototype.hasOwnProperty.call(all, name);\n  }\n\n  _writeDocumentCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    let serializedCookie = this._serializeCookie(name, value, options);\n    this._document.cookie = serializedCookie;\n  }\n\n  _writeFastBootCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    let responseHeaders = this._fastBoot.response.headers;\n    let serializedCookie = this._serializeCookie(name, value, options);\n\n    if (options.maxAge) {\n      options.maxAge *= 1000;\n    }\n\n    this._cacheFastBootCookie(name, value, options);\n\n    let replaced = false;\n    let existing = responseHeaders.getAll('set-cookie');\n\n    for (let i = 0; i < existing.length; i++) {\n      if (existing[i].startsWith(`${name}=`)) {\n        existing[i] = serializedCookie;\n        replaced = true;\n        break;\n      }\n    }\n\n    if (!replaced) {\n      responseHeaders.append('set-cookie', serializedCookie);\n    }\n  }\n\n  _cacheFastBootCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    let fastBootCache = this._fastBootCookiesCache || {};\n    let cachedOptions: WriteOptions = Object.assign({}, options);\n\n    if (cachedOptions.maxAge && options.maxAge) {\n      let expires = new Date();\n      expires.setSeconds(expires.getSeconds() + options.maxAge);\n\n      delete cachedOptions.maxAge;\n      (cachedOptions as WriteOptions & { expires?: Date; maxAge?: never }).expires = expires;\n    }\n\n    fastBootCache[name] = { value: value as string, options: cachedOptions };\n    this._fastBootCookiesCache = fastBootCache;\n  }\n\n  _filterCachedFastBootCookies(fastBootCookies: FastbootCookies) {\n    let { path: requestPath } = this._fastBoot.request;\n\n    let host = this._fastBoot?.request?.host;\n\n    return Object.keys(fastBootCookies).reduce(\n      (acc, name) => {\n        let { value, options } = fastBootCookies[name] as { value: string; options: ReadOptions };\n        options = options || {};\n\n        let { path: optionsPath, domain, expires } = options;\n\n        if (optionsPath && requestPath.indexOf(optionsPath) !== 0) {\n          return acc;\n        }\n\n        if (domain && host.indexOf(domain) + (domain as string).length !== host.length) {\n          return acc;\n        }\n\n        if (expires && (expires as Date) < new Date()) {\n          return acc;\n        }\n\n        acc[name] = value;\n        return acc;\n      },\n      {} as Record<string, string>\n    );\n  }\n\n  _encodeValue(value: string | undefined, raw?: boolean) {\n    if (isNone(value)) {\n      return '';\n    } else if (raw) {\n      return value;\n    } else {\n      return encodeURIComponent(value);\n    }\n  }\n\n  _decodeValue(value: string | undefined, raw?: boolean) {\n    if (isNone(value) || raw) {\n      return value;\n    } else {\n      return decodeURIComponent(value);\n    }\n  }\n\n  _filterDocumentCookies(unfilteredCookies: string[]): CookiePair[] {\n    return unfilteredCookies\n      .map<CookiePair>(c => {\n        let separatorIndex = c.indexOf('=');\n        return [c.substring(0, separatorIndex), c.substring(separatorIndex + 1)];\n      })\n      .filter(c => c.length === 2 && isPresent(c[0]));\n  }\n\n  _serializeCookie(name: string, value: unknown, options: WriteOptions = {}) {\n    return serializeCookie(name, value, options);\n  }\n\n  _isCookieSizeAcceptable(value: string) {\n    // Counting bytes varies Pre-ES6 and in ES6\n    // This snippet counts the bytes in the value\n    // about to be stored as the cookie:\n    // See https://stackoverflow.com/a/25994411/6657064\n    let _byteCount = 0;\n    let i = 0;\n    let c;\n    while ((c = value.charCodeAt(i++))) {\n      _byteCount += c >> 11 ? 3 : c >> 7 ? 2 : 1;\n    }\n\n    return _byteCount < MAX_COOKIE_BYTE_LENGTH;\n  }\n\n  _normalizedDefaultPath() {\n    if (!this._isFastBoot()) {\n      let pathname = window.location.pathname;\n      return pathname.substring(0, pathname.lastIndexOf('/'));\n    }\n  }\n\n  _isFastBoot() {\n    return this._fastBoot && this._fastBoot.isFastBoot;\n  }\n}\n","import { typeOf, isEmpty } from '@ember/utils';\n\ninterface Options {\n  maxAge?: number | string;\n  domain?: string;\n  expires?: Date;\n  secure?: boolean;\n  httpOnly?: boolean;\n  path?: string;\n  sameSite?: string;\n  partitioned?: boolean;\n}\n\nexport const serializeCookie = (name: string, value: string | unknown, options: Options = {}) => {\n  let cookie = `${name}=${value}`;\n\n  if (!isEmpty(options.domain)) {\n    cookie = `${cookie}; domain=${options.domain}`;\n  }\n  if (options.expires && typeOf(options.expires) === 'date') {\n    cookie = `${cookie}; expires=${options.expires.toUTCString()}`;\n  }\n  if (!isEmpty(options.maxAge)) {\n    cookie = `${cookie}; max-age=${options.maxAge}`;\n  }\n  if (options.secure) {\n    cookie = `${cookie}; secure`;\n  }\n  if (options.httpOnly) {\n    cookie = `${cookie}; httpOnly`;\n  }\n  if (!isEmpty(options.path)) {\n    cookie = `${cookie}; path=${options.path}`;\n  }\n  if (!isEmpty(options.sameSite)) {\n    cookie = `${cookie}; SameSite=${options.sameSite}`;\n  }\n  if (options.partitioned) {\n    cookie = `${cookie}; Partitioned`;\n  }\n\n  return cookie;\n};\n","// eslint-disable-next-line ember/no-classic-components\nimport EmberComponent from '@ember/component';\nimport Helper from '@ember/component/helper';\nimport { assert, runInDebug } from '@ember/debug';\n\nimport type { ComponentLike } from '@glint/template';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction UNINITIALIZED() { }\n\nexport type ElementFromTagName<T extends string> = T extends keyof HTMLElementTagNameMap\n  ? HTMLElementTagNameMap[T]\n  : Element;\n\ntype Positional<T extends string> = [name: T];\ntype Return<T extends string> = ComponentLike<{\n  Element: ElementFromTagName<T>;\n  Blocks: { default: [] };\n}>;\n\nexport interface ElementSignature<T extends string> {\n  Args: {\n    Positional: Positional<T>;\n  };\n  Return: Return<T> | undefined;\n}\n\nexport default class ElementHelper<T extends string> extends Helper<ElementSignature<T>> {\n  tagName: string | (() => void) = UNINITIALIZED;\n  componentClass?: Return<T>;\n\n  compute(params: Positional<T>, hash: object) {\n    assert('The `element` helper takes a single positional argument', params.length === 1);\n    assert(\n      'The `element` helper does not take any named arguments',\n      Object.keys(hash).length === 0\n    );\n\n    let tagName = params[0];\n\n    if (tagName !== this.tagName) {\n      this.tagName = tagName;\n\n      if (typeof tagName === 'string') {\n        this.componentClass =\n          class DynamicElement extends EmberComponent {\n            tagName = tagName;\n          } as unknown as Return<T>;\n      } else {\n        this.componentClass = undefined;\n\n        runInDebug(() => {\n          let message = 'The argument passed to the `element` helper must be a string';\n\n          try {\n            message += ` (you passed \\`${tagName}\\`)`;\n          } catch (e) {\n            // ignore\n          }\n\n          assert(message, tagName === undefined || tagName === null);\n        });\n      }\n    }\n\n    return this.componentClass;\n  }\n}\n","import type { FileUploadDragEvent } from '../interfaces.ts';\n\nconst getDataSupport = {};\n\nexport default class DataTransferWrapper {\n  dataTransfer?: DataTransfer;\n  itemDetails?: FileUploadDragEvent['itemDetails'];\n  source?: FileUploadDragEvent['source'];\n\n  constructor(event: FileUploadDragEvent) {\n    this.source = event.source;\n    this.dataTransfer = event.dataTransfer;\n    this.itemDetails = event.itemDetails;\n  }\n\n  getData(type: string) {\n    const dataTransfer = this.dataTransfer;\n    if (!dataTransfer) return;\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    if (getDataSupport[type] == null) {\n      try {\n        const data = dataTransfer.getData(type);\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        getDataSupport[type] = true;\n        return data;\n      } catch (e) {\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        getDataSupport[type] = false;\n      }\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n    } else if (getDataSupport[type]) {\n      return dataTransfer.getData(type);\n    }\n    return '';\n  }\n\n  get filesOrItems() {\n    return this.files.length ? this.files : this.items;\n  }\n\n  get files() {\n    return Array.from(this.dataTransfer?.files ?? []);\n  }\n\n  get items() {\n    return this.itemDetails ?? Array.from(this.dataTransfer?.items ?? []);\n  }\n}\n","import { assert } from '@ember/debug';\nimport { type Timer, cancel, next } from '@ember/runloop';\nimport type {\n  DragEventListener,\n  QueuedDragEvent,\n  DragListenerHandlers,\n  FileUploadDragEvent,\n} from '../interfaces.ts';\nimport { action } from '@ember/object';\n\nexport default class DragListener {\n  _dropzone?: Element;\n\n  _listeners: DragEventListener[] = [];\n  _stack: DragEventListener[] = [];\n  _listener: DragEventListener | null = null;\n\n  // Keep a stack of deferred actions to take\n  // on listeners to provide sane events.\n  // `dragleave` / `dragenter` are called on the\n  // same element back to back, which isn't what\n  // we want to provide as an API.\n  _events: QueuedDragEvent[] = [];\n\n  _handlers: DragListenerHandlers = {};\n  _handlersAttached = false;\n  _scheduled: Timer | null = null;\n\n  constructor(dropzone: Element) {\n    this._dropzone = dropzone;\n  }\n\n  beginListening() {\n    if (!this._dropzone) return;\n\n    this._dropzone.addEventListener('dragenter', this.dragenter, {\n      passive: true,\n    });\n    this._dropzone.addEventListener('dragleave', this.dragleave, {\n      passive: true,\n    });\n    this._dropzone.addEventListener('dragover', this.dragover, {\n      passive: false,\n    });\n    this._dropzone.addEventListener('drop', this.drop, {\n      passive: false,\n    });\n\n    this._handlersAttached = true;\n  }\n\n  endListening() {\n    if (!this._dropzone) return;\n    if (!this._handlersAttached) return;\n\n    this._dropzone.removeEventListener('dragenter', this.dragenter);\n    this._dropzone.removeEventListener('dragleave', this.dragleave);\n    this._dropzone.removeEventListener('dragover', this.dragover);\n    this._dropzone.removeEventListener('drop', this.drop);\n  }\n\n  addEventListeners(handlers: DragListenerHandlers) {\n    if (!this._dropzone) return;\n\n    if (this._listeners.length === 0) {\n      this.beginListening();\n    }\n\n    // Listeners are ordered by most specific to least specific\n    let insertAt = this._listeners.length;\n\n    for (let i = 0, len = this._listeners.length; i < len; i++) {\n      const listener = this._listeners[i];\n\n      if (listener) {\n        assert(\n          `Cannot add multiple listeners for the same element ${this._dropzone}, ${listener.element}`,\n          this._dropzone !== listener.element,\n        );\n\n        if (listener.element.contains(this._dropzone)) {\n          insertAt = i;\n        }\n      }\n    }\n\n    this._listeners.splice(insertAt, 0, { element: this._dropzone, handlers });\n  }\n\n  removeEventListeners() {\n    this._listeners = this._listeners.filter(\n      (listener) => listener.element !== this._dropzone,\n    );\n    if (this._listeners.length === 0) {\n      this.endListening();\n    }\n  }\n\n  findListener(evt: FileUploadDragEvent) {\n    return this._listeners.find(({ element }) => {\n      return element === evt.target || element.contains(evt.target as Element);\n    });\n  }\n\n  getEventSource(evt: FileUploadDragEvent) {\n    const types = evt.dataTransfer?.types ?? [];\n    let areSomeTypesFiles = false;\n    for (let i = 0, len = types.length; i < len; i++) {\n      if (types[i] === 'Files' || types[i] === 'application/x-moz-file') {\n        areSomeTypesFiles = true;\n        break;\n      }\n    }\n    return areSomeTypesFiles ? 'os' : 'web';\n  }\n\n  getDataTransferItemDetails(evt: FileUploadDragEvent) {\n    const itemDetails = [];\n\n    if (evt.dataTransfer?.items) {\n      for (let i = 0; i < evt.dataTransfer.items.length; i++) {\n        const item = evt.dataTransfer.items[i];\n\n        if (item) {\n          itemDetails.push({\n            kind: item.kind,\n            type: item.type,\n          });\n        }\n      }\n    }\n\n    return itemDetails;\n  }\n\n  @action\n  dragenter(evt: Event) {\n    const event = evt as FileUploadDragEvent;\n    const listener = this.findListener(event);\n    const lastListener = this._stack[this._stack.length - 1];\n\n    // Trigger dragleave on the previous listener\n    if (lastListener) {\n      this.scheduleEvent('dragleave', lastListener, event);\n    }\n\n    if (listener) {\n      this.scheduleEvent('dragenter', listener, {\n        ...event,\n        source: this.getEventSource(event),\n        dataTransfer: event.dataTransfer,\n        itemDetails: this.getDataTransferItemDetails(event),\n      });\n    }\n    this._listener = listener ?? null;\n  }\n\n  @action\n  dragleave(evt: Event) {\n    const event = evt as FileUploadDragEvent;\n    // Trigger a dragleave if the file leaves the browser\n    if (this._stack[0]) {\n      this.scheduleEvent('dragleave', this._stack[0], event);\n      this._listener = null;\n    }\n  }\n\n  @action\n  dragover(evt: Event) {\n    const event = evt as FileUploadDragEvent;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const listener = this.findListener(event);\n    if (listener) {\n      if (this._listener) {\n        this.scheduleEvent('dragleave', this._listener, event);\n      }\n      this.scheduleEvent('dragenter', listener, {\n        ...event,\n        source: this.getEventSource(event),\n        dataTransfer: event.dataTransfer,\n        itemDetails: this.getDataTransferItemDetails(event),\n      });\n      if (this._stack.includes(listener)) {\n        listener.handlers?.dragover?.(event);\n      }\n    }\n    this._listener = listener ?? null;\n  }\n\n  scheduleEvent(\n    eventName: QueuedDragEvent['eventName'],\n    listener: QueuedDragEvent['listener'],\n    event: QueuedDragEvent['event'],\n  ) {\n    const isDuplicate = this._events.find((queuedEvent) => {\n      return (\n        queuedEvent.eventName === eventName && queuedEvent.listener === listener\n      );\n    });\n\n    const cancelledEvent = this._events.find((queuedEvent) => {\n      return (\n        (queuedEvent.listener === listener &&\n          queuedEvent.eventName === 'dragleave' &&\n          eventName === 'dragenter') ||\n        (queuedEvent.eventName === 'dragenter' && eventName === 'dragleave')\n      );\n    });\n\n    if (cancelledEvent) {\n      // Remove cancelled event\n      this._events = this._events.filter((queuedEvent) => {\n        return (\n          queuedEvent.listener !== cancelledEvent.listener &&\n          queuedEvent.eventName !== cancelledEvent.eventName &&\n          queuedEvent.event !== cancelledEvent.event\n        );\n      });\n      if (this._events.length === 0) {\n        if (this._scheduled) {\n          cancel(this._scheduled);\n        }\n        this._scheduled = null;\n      }\n    } else if (!isDuplicate) {\n      this._events.push({ eventName, listener, event });\n      if (!this._scheduled) {\n        this._scheduled = next(this, this.sendEvents);\n      }\n    }\n  }\n\n  sendEvents() {\n    this._events.forEach(({ eventName, listener, event }) => {\n      if (eventName === 'dragenter') {\n        this._stack.push(listener);\n      } else if (eventName === 'dragleave') {\n        this._stack.pop();\n      }\n      listener.handlers[eventName]?.(event);\n    });\n\n    this._events = [];\n    this._scheduled = null;\n  }\n\n  @action\n  drop(evt: Event) {\n    const event = evt as FileUploadDragEvent;\n\n    this._stack = [];\n    this._events = [];\n    this._scheduled = null;\n    this._listener = null;\n\n    evt.preventDefault();\n    evt.stopPropagation();\n    const listener = this.findListener(event);\n    listener?.handlers?.drop?.(event);\n  }\n}\n","import Modifier, { type ArgsFor, type NamedArgs } from 'ember-modifier';\nimport type { DragListenerModifierSignature } from '../interfaces.ts';\nimport DragListener from './drag-listener.ts';\nimport { registerDestructor } from '@ember/destroyable';\nimport type Owner from '@ember/owner';\n\nfunction cleanup(instance: DragListenerModifier) {\n  if (!instance.listener) return;\n\n  instance.listener.removeEventListeners();\n}\n\nexport default class DragListenerModifier extends Modifier<DragListenerModifierSignature> {\n  listener?: DragListener;\n\n  constructor(owner: Owner, args: ArgsFor<DragListenerModifierSignature>) {\n    super(owner, args);\n    registerDestructor(this, cleanup);\n  }\n\n  modify(\n    dropzone: Element,\n    _: [],\n    {\n      dragenter,\n      dragleave,\n      dragover,\n      drop,\n    }: NamedArgs<DragListenerModifierSignature>,\n  ) {\n    this.listener = new DragListener(dropzone);\n\n    this.listener.removeEventListeners();\n    this.listener.addEventListeners({\n      dragenter,\n      dragleave,\n      dragover,\n      drop,\n    });\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div\\n  ...attributes\\n  {{this.dragListener\\n    dragenter=this.didEnterDropzone\\n    dragleave=this.didLeaveDropzone\\n    dragover=this.didDragOver\\n    drop=this.didDrop\\n  }}\\n>\\n  {{yield\\n    (hash supported=this.supported active=this.active)\\n    this.queue\\n  }}\\n</div>\\n\")","import Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport DataTransferWrapper from '../system/data-transfer-wrapper.ts';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { UploadFile } from '../upload-file.ts';\nimport type FileQueueService from '../services/file-queue.ts';\nimport { DEFAULT_QUEUE } from '../services/file-queue.ts';\nimport {\n  type FileUploadDragEvent,\n  type FileDropzoneSignature,\n  FileSource,\n} from '../interfaces.ts';\nimport DragListenerModifier from '../system/drag-listener-modifier.ts';\n\n/**\n  `FileDropzone` is a component that will allow users to upload files by\n   drag and drop.\n\n  ```hbs\n  <FileDropzone @queue={{queue}} as |dropzone|>\n    {{#if dropzone.active}}\n      Drop to upload\n    {{else if queue.files.length}}\n      Uploading {{queue.files.length}} files. ({{queue.progress}}%)\n    {{else}}\n      <h4>Upload Images</h4>\n      <p>\n        {{#if dropzone.supported}}\n          Drag and drop images onto this area to upload them or\n        {{/if}}\n      </p>\n    {{/if}}\n  </FileDropzone>\n  ```\n\n  @class FileDropzoneComponent\n  @type Ember.Component\n  @yield {Hash} dropzone\n  @yield {boolean} dropzone.supported\n  @yield {boolean} dropzone.active\n  @yield {Queue} queue\n */\nexport default class FileDropzoneComponent extends Component<FileDropzoneSignature> {\n  @service declare fileQueue: FileQueueService;\n\n  @tracked active = false;\n  @tracked dataTransferWrapper?: DataTransferWrapper;\n\n  supported = (() =>\n    typeof window !== 'undefined' &&\n    window.document &&\n    'draggable' in document.createElement('span'))();\n\n  get queue() {\n    if (this.args.queue) {\n      return this.args.queue;\n    }\n\n    return this.fileQueue.findOrCreate(DEFAULT_QUEUE);\n  }\n\n  get multiple() {\n    return this.args.multiple ?? true;\n  }\n\n  get files(): File[] {\n    const files = this.dataTransferWrapper?.files ?? [];\n    if (this.multiple) return files;\n\n    return files.slice(0, 1);\n  }\n\n  get isAllowed() {\n    const { environment } =\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      getOwner(this).resolveRegistration('config:environment') as {\n        environment: string;\n      };\n\n    return (\n      environment === 'test' ||\n      (this.dataTransferWrapper && this.dataTransferWrapper.source === 'os') ||\n      this.args.allowUploadsFromWebsites\n    );\n  }\n\n  get cursor() {\n    return this.args.cursor ?? 'copy';\n  }\n\n  @action\n  didEnterDropzone(event: FileUploadDragEvent) {\n    this.dataTransferWrapper = new DataTransferWrapper(event);\n\n    if (this.isAllowed) {\n      event.dataTransfer.dropEffect = this.cursor;\n      this.active = true;\n\n      this.args.onDragEnter?.(this.files, this.dataTransferWrapper);\n    }\n  }\n\n  @action\n  didLeaveDropzone(event: FileUploadDragEvent) {\n    if (this.dataTransferWrapper) {\n      this.dataTransferWrapper.dataTransfer = event.dataTransfer;\n    }\n    if (this.dataTransferWrapper && this.isAllowed) {\n      if (event.dataTransfer) {\n        event.dataTransfer.dropEffect = this.cursor;\n      }\n      this.args.onDragLeave?.(this.files, this.dataTransferWrapper);\n\n      this.dataTransferWrapper = undefined;\n\n      if (this.isDestroyed) {\n        return;\n      }\n      this.active = false;\n    }\n  }\n\n  @action\n  didDragOver(event: FileUploadDragEvent) {\n    if (this.dataTransferWrapper) {\n      this.dataTransferWrapper.dataTransfer = event.dataTransfer;\n    }\n    if (this.isAllowed) {\n      event.dataTransfer.dropEffect = this.cursor;\n    }\n  }\n\n  @action\n  didDrop(event: FileUploadDragEvent) {\n    if (this.dataTransferWrapper) {\n      this.dataTransferWrapper.dataTransfer = event.dataTransfer;\n    }\n\n    if (!this.isAllowed) {\n      event.dataTransfer.dropEffect = this.cursor;\n      this.dataTransferWrapper = undefined;\n      return;\n    }\n\n    // @TODO - add tests for these or remove them\n    // // Testing support for dragging and dropping images\n    // // from other browser windows\n    // let url;\n\n    // // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // // @ts-ignore\n    // const html = this.dataTransferWrapper.getData('text/html');\n    // if (html) {\n    //   const parsedHtml = parseHTML(html);\n    //   // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //   // @ts-ignore\n    //   const img = parsedHtml.getElementsByTagName('img')[0];\n    //   if (img) {\n    //     url = img.src;\n    //   }\n    // }\n\n    // if (url == null) {\n    //   // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //   // @ts-ignore\n    //   url = this.dataTransferWrapper.getData('text/uri-list');\n    // }\n\n    // if (url) {\n    //   const image = new Image();\n    //   const [filename] = url.split('/').slice(-1);\n    //   image.crossOrigin = 'anonymous';\n    //   image.onload = () => {\n    //     const canvas = document.createElement('canvas');\n    //     canvas.width = image.width;\n    //     canvas.height = image.height;\n\n    //     const ctx = canvas.getContext('2d');\n    //     ctx?.drawImage(image, 0, 0);\n\n    //     if (canvas.toBlob) {\n    //       canvas.toBlob((blob) => {\n    //         // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //         // @ts-ignore\n    //         const [file] = this.addFiles([blob], FileSource.web);\n    //         // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //         // @ts-ignore\n    //         file.name = filename;\n    //       });\n    //     } else {\n    //       const binStr = atob(canvas.toDataURL().split(',')[1]);\n    //       const len = binStr.length;\n    //       const arr = new Uint8Array(len);\n\n    //       for (let i = 0; i < len; i++) {\n    //         arr[i] = binStr.charCodeAt(i);\n    //       }\n    //       const blob = new Blob([arr], { type: 'image/png' });\n    //       // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //       // @ts-ignore\n    //       blob.name = filename;\n    //       // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //       // @ts-ignore\n    //       const [file] = this.addFiles([blob], FileSource.web);\n    //       // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //       // @ts-ignore\n    //       file.name = filename;\n    //     }\n    //   };\n    //   /* eslint-disable no-console */\n    //   image.onerror = function (e) {\n    //     console.log(e);\n    //   };\n    //   /* eslint-enable no-console */\n    //   image.src = url;\n    // }\n\n    if (this.dataTransferWrapper) {\n      const addedFiles = this.addFiles(this.files);\n      this.args.onDrop?.(addedFiles, this.dataTransferWrapper);\n\n      this.active = false;\n      this.dataTransferWrapper = undefined;\n    }\n  }\n\n  addFiles(files: File[]) {\n    const addedFiles = [];\n    for (const file of files) {\n      if (file instanceof File) {\n        const uploadFile = new UploadFile(file, FileSource.DragAndDrop);\n        if (\n          this.args.filter &&\n          !this.args.filter(file, files, files.indexOf(file))\n        ) {\n          continue;\n        }\n        this.queue.add(uploadFile);\n        addedFiles.push(uploadFile);\n      }\n    }\n    return addedFiles;\n  }\n\n  dragListener = DragListenerModifier;\n}\n","import { tracked } from '@glimmer/tracking';\n\nimport { upload } from './system/upload.ts';\nimport HTTPRequest from './system/http-request.ts';\nimport UploadFileReader from './system/upload-file-reader.ts';\n\nimport type { Queue } from './queue.ts';\nimport { guidFor } from '@ember/object/internals';\nimport RSVP from 'rsvp';\nimport { FileSource, FileState, type UploadOptions } from './interfaces.ts';\nimport { estimatedRate } from './system/rate.ts';\n\n/**\n * Files provide a uniform interface for interacting\n * with data that can be uploaded or read.\n */\nexport class UploadFile {\n  file: File;\n  #source: FileSource;\n\n  queue?: Queue;\n\n  constructor(file: File, source: FileSource) {\n    this.file = file;\n    this.#source = source;\n  }\n\n  /**\n   * The source of the file. This is useful\n   * for applications that want to gather\n   * analytics about how users upload their\n   * content.\n   */\n  get source(): FileSource {\n    return this.#source;\n  }\n\n  #id = `file-${guidFor(this)}`;\n\n  /** A unique id generated for this file. */\n  get id(): string {\n    return this.#id;\n  }\n\n  #name?: string;\n\n  /** The file name */\n  get name(): string {\n    return this.#name ?? this.file?.name;\n  }\n  set name(value: string) {\n    this.#name = value;\n  }\n\n  /** The current speed in ms that it takes to upload one byte */\n  get rate() {\n    return estimatedRate(this.rates);\n  }\n\n  #size = 0;\n\n  /** The size of the file in bytes. */\n  get size() {\n    return this.#size || this.file.size;\n  }\n\n  set size(value) {\n    this.#size = value;\n  }\n\n  /**\n   * The MIME type of the file.\n   *\n   * For a image file this may be `image/png`.\n   */\n  get type(): string {\n    return this.file.type;\n  }\n\n  /**\n   * Returns the appropriate file extension of\n   * the file according to the type\n   */\n  get extension(): string {\n    return this.type.split('/').slice(-1)[0] ?? '';\n  }\n\n  /**\n   * Tracks the number of bytes that had been uploaded when progress values last changed.\n   */\n  bytesWhenProgressLastUpdated = 0;\n\n  /** The number of bytes that have been uploaded to the server */\n  @tracked loaded = 0;\n\n  /**\n   * The current progress of the upload, as a percentage in the\n   * range of 0 to 100.\n   */\n  @tracked progress = 0;\n\n  /**\n   * When upload has finished this property will be set to true\n   */\n  @tracked isUploadComplete = false;\n\n  /**\n   * The current state that the file is in.\n   */\n  @tracked state: FileState = FileState.Queued;\n\n  // /**\n  //   The source of the file. This is useful\n  //   for applications that want to gather\n  //   analytics about how users upload their\n  //   content.\n\n  //   This property can be one of the following:\n\n  //   - `browse`\n  //   - `drag-and-drop`\n  //   - `web`\n  //   - `data-url`\n  //   - `blob`\n\n  //   `browse` is the source when the file is created\n  //   using the native file picker.\n\n  //   `drag-and-drop` is the source when the file was\n  //   created using drag and drop from their desktop.\n\n  //   `web` is the source when the file was created\n  //   by dragging the file from another webpage.\n\n  //   `data-url` is the source when the file is created\n  //   from a data URL using the `fromDataURL` method for\n  //   files. This usually means that the file was created\n  //   manually by the developer on behalf of the user.\n\n  //   `blob` is the source when the file is created\n  //   from a blob using the `fromBlob` method for\n  //   files. This usually means that the file was created\n  //   manually by the developer.\n\n  //   @accessor source\n  //   @type {String}\n  //   @default ''\n  //   @readonly\n  //  */\n  // source?: FileSource;\n\n  /**\n   * The timestamp of when the progress last updated in milliseconds. Used to calculate the time\n   * that has elapsed.\n   */\n  timestampWhenProgressLastUpdated = 0;\n\n  @tracked rates: number[] = [];\n\n  /**\n   * Upload file with `application/octet-stream` content type.\n   *\n   * @param url Your server endpoint where to upload the file\n   * @param options additional request options\n   */\n  uploadBinary(url: string, options: UploadOptions) {\n    options.contentType = 'application/octet-stream';\n    return upload(this, url, options, (request) => {\n      this.queue?.uploadStarted(this);\n      return request.send(this.file);\n    });\n  }\n\n  /**\n   * Upload file to your server\n   *\n   * @param url Your server endpoint where to upload the file\n   * @param options additional options, eg. `{ fileKey: string, data: { key: string } }`\n   */\n  upload(url: string, options?: UploadOptions) {\n    return upload(\n      this,\n      url,\n      options,\n      (request: HTTPRequest, opts: UploadOptions): RSVP.Promise<Response> => {\n        // Build the form\n        const form = new FormData();\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        for (const key of Object.keys(opts.data)) {\n          if (key === opts.fileKey) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            form.append(key, opts.data[key], this.name);\n          } else {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            form.append(key, opts.data[key]);\n          }\n        }\n\n        this.queue?.uploadStarted(this);\n        return request.send(form);\n      },\n    );\n  }\n\n  /**\n   * Resolves with Blob as ArrayBuffer\n   */\n  readAsArrayBuffer() {\n    const reader = new UploadFileReader({\n      label: `Read ${this.name} as an ArrayBuffer`,\n    });\n    return reader.readAsArrayBuffer(this.file);\n  }\n\n  /**\n   * Resolves with Blob as DataURL\n   */\n  readAsDataURL() {\n    const reader = new UploadFileReader({\n      label: `Read ${this.name} as a Data URI`,\n    });\n    return reader.readAsDataURL(this.file);\n  }\n\n  /**\n   * Resolves with Blob as binary string\n   */\n  readAsBinaryString() {\n    const reader = new UploadFileReader({\n      label: `Read ${this.name} as a binary string`,\n    });\n    return reader.readAsBinaryString(this.file);\n  }\n\n  /**\n   * Resolves with Blob as plain text\n   */\n  readAsText() {\n    const reader = new UploadFileReader({ label: `Read ${this.name} as text` });\n    return reader.readAsText(this.file);\n  }\n\n  /**\n   * Creates a file object that can be read or uploaded to a\n   * server from a Blob object.\n   *\n   * @param blob the blob to create the file from.\n   * @param source the source that created the blob.\n   * @returns the file\n   */\n  static fromBlob(blob: Blob, source = FileSource.Blob) {\n    const file = new File([blob], 'blob', { type: blob.type });\n    return new this(file, source);\n  }\n\n  /**\n   * Creates a file object that can be read or uploaded to a\n   * server from a data URL.\n   *\n   * @param dataURL the data URL to create the file from.\n   * @param source the source of the data URL.\n   * @returns the file\n   */\n  static fromDataURL(dataURL: string, source = FileSource.DataUrl) {\n    const [typeInfo, base64String] = dataURL.split(',');\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    const mimeType = typeInfo.match(/:(.*?);/)[1];\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    const binaryString = atob(base64String);\n    const binaryData = new Uint8Array(binaryString.length);\n\n    for (let i = 0, len = binaryString.length; i < len; i++) {\n      binaryData[i] = binaryString.charCodeAt(i);\n    }\n\n    const blob = new Blob([binaryData], { type: mimeType });\n\n    return this.fromBlob(blob, source);\n  }\n}\n","import { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport { TrackedSet } from 'tracked-built-ins';\nimport { UploadFile } from './upload-file.ts';\nimport type FileQueueService from './services/file-queue.ts';\nimport {\n  FileSource,\n  FileState,\n  type QueueListener,\n  type QueueName,\n  type SelectFileSignature,\n} from './interfaces.ts';\n\n/**\n * The Queue is a collection of files that\n * are being manipulated by the user.\n *\n * Queues are designed to persist the state\n * of uploads when a user navigates around your\n * application.\n */\nexport class Queue {\n  #listeners: Set<QueueListener> = new Set();\n\n  #name: QueueName;\n\n  /**\n   * The unique identifier of the queue.\n   *\n   * @remarks\n   * Queue names should be deterministic so they\n   * can be retrieved. It's recommended to provide\n   * a helpful name.\n   *\n   * If the queue belongs to a top level collection,\n   * photos, the good name for this queue may be `\"photos\"`.\n   *\n   * If you're uploading images to an artwork, the\n   * best name would incoporate both `\"artworks\"` and\n   * the identifier of the artwork. A good name for this\n   * queue may be `\"artworks/{{id}}/photos\"`, where `{{id}}`\n   * is a dynamic segment that is generated from the artwork id.\n   */\n  get name(): QueueName {\n    return this.#name;\n  }\n\n  /** The FileQueue service. */\n  fileQueue: FileQueueService;\n\n  #distinctFiles: Set<UploadFile> = new TrackedSet();\n\n  /**\n   * The list of files in the queue. This automatically gets\n   * flushed when all the files in the queue have settled.\n   *\n   * @remarks\n   * Note that files that have failed need to be manually\n   * removed from the queue. This is so they can be retried\n   * without resetting the state of the queue, orphaning the\n   * file from its queue. Upload failures can happen due to a\n   * timeout or a server response. If you choose to use the\n   * `abort` method, the file will fail to upload, but will\n   * be removed from the requeuing proccess, and will be\n   * considered to be in a settled state.\n   *\n   * @defaultValue []\n   */\n  get files(): UploadFile[] {\n    return [...this.#distinctFiles.values()];\n  }\n\n  /**\n   * The current time in ms it is taking to upload 1 byte.\n   *\n   * @defaultValue 0\n   */\n  get rate(): number {\n    return this.files\n      .filter((file) => file.state === FileState.Uploading)\n      .reduce((acc, { rate }) => {\n        return acc + rate;\n      }, 0);\n  }\n\n  /**\n   * The total size of all files currently being uploaded in bytes.\n   *\n   * @defaultValue 0\n   */\n  get size(): number {\n    return this.files.reduce((acc, { size }) => {\n      return acc + size;\n    }, 0);\n  }\n\n  /**\n   * The number of bytes that have been uploaded to the server.\n   *\n   * @defaultValue 0\n   */\n  get loaded(): number {\n    return this.files.reduce((acc, { loaded }) => {\n      return acc + loaded;\n    }, 0);\n  }\n\n  /**\n   * The current progress of all uploads, as a percentage in the\n   * range of 0 to 100.\n   *\n   * @defaultValue 0\n   */\n  get progress() {\n    const percent = this.loaded / this.size || 0;\n    return Math.floor(percent * 100);\n  }\n\n  constructor({\n    name,\n    fileQueue,\n  }: {\n    name: QueueName;\n    fileQueue: FileQueueService;\n  }) {\n    this.#name = name;\n    this.fileQueue = fileQueue;\n  }\n\n  addListener(listener: QueueListener) {\n    this.#listeners.add(listener);\n  }\n\n  removeListener(listener: QueueListener) {\n    this.#listeners.delete(listener);\n  }\n\n  /**\n   * Add a file to the queue\n   * @param file the file to be added\n   */\n  @action\n  add(file: UploadFile) {\n    if (this.#distinctFiles.has(file)) {\n      return;\n    }\n\n    file.queue = this;\n    this.#distinctFiles.add(file);\n\n    for (const listener of this.#listeners) {\n      listener.onFileAdded?.(file);\n    }\n  }\n\n  /**\n   * Remove a file from the queue\n   * @param file the file to be removed\n   */\n  @action\n  remove(file: UploadFile) {\n    if (!this.#distinctFiles.has(file)) {\n      return;\n    }\n\n    file.queue = undefined;\n    this.#distinctFiles.delete(file);\n\n    for (const listener of this.#listeners) {\n      listener.onFileRemoved?.(file);\n    }\n  }\n\n  uploadStarted(file: UploadFile) {\n    for (const listener of this.#listeners) {\n      listener.onUploadStarted?.(file);\n    }\n  }\n\n  uploadSucceeded(file: UploadFile, response: Response) {\n    for (const listener of this.#listeners) {\n      listener.onUploadSucceeded?.(file, response);\n    }\n  }\n\n  uploadFailed(file: UploadFile, response: Response) {\n    for (const listener of this.#listeners) {\n      listener.onUploadFailed?.(file, response);\n    }\n  }\n\n  /**\n   * Flushes the `files` property if they have settled. This\n   * will only flush files when all files have arrived at a terminus\n   * of their state chart (`uploaded` and `aborted`).\n   *\n   * Files *may* be requeued by the user in the `failed` or `timed_out`\n   * states.\n   */\n  flush() {\n    if (this.files.length === 0) {\n      return;\n    }\n\n    const allFilesHaveSettled = this.files.every((file) => {\n      return [FileState.Uploaded, FileState.Aborted].includes(file.state);\n    });\n\n    if (allFilesHaveSettled) {\n      this.files.forEach((file) => (file.queue = undefined));\n      this.#distinctFiles.clear();\n    }\n  }\n\n  selectFile = modifier<SelectFileSignature>(\n    (element, _positional, { filter, onFilesSelected }) => {\n      const changeHandler = (event: Event) => {\n        const { files: fileList } = event.target as HTMLInputElement;\n        if (!fileList) {\n          return;\n        }\n\n        const files = Array.from(fileList);\n        const selectedFiles: UploadFile[] = [];\n\n        for (const file of files) {\n          if (filter && !filter?.(file, files, files.indexOf(file))) {\n            continue;\n          }\n\n          let uploadFile;\n          if (file instanceof File) {\n            uploadFile = new UploadFile(file, FileSource.Browse);\n          }\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n          // @ts-ignore\n          else if (file instanceof Blob) {\n            uploadFile = UploadFile.fromBlob(file, FileSource.Browse);\n          }\n\n          if (uploadFile) {\n            selectedFiles.push(uploadFile);\n            this.add(uploadFile);\n          }\n        }\n\n        onFilesSelected?.(selectedFiles);\n\n        // this will reset the input, so the _same_ file can be picked again\n        // Without, the `change` event wouldn't be fired, as it is still the same\n        // value\n        element.value = '';\n      };\n      element.addEventListener('change', changeHandler);\n\n      return () => {\n        element.removeEventListener('change', changeHandler);\n      };\n    },\n    // used to opt-in to lazy argument handling, which is the default for ember-modifier@^4\n    { eager: false },\n  );\n}\n","import { assert } from '@ember/debug';\nimport Service from '@ember/service';\nimport { registerDestructor } from '@ember/destroyable';\nimport { Queue } from '../queue.ts';\nimport type { UploadFile } from '../upload-file.ts';\nimport { FileState, type QueueName } from '../interfaces.ts';\nimport { TrackedMap } from 'tracked-built-ins';\n\nexport const DEFAULT_QUEUE = Symbol('DEFAULT_QUEUE');\n\n/**\n * The file queue service is a global file\n * queue that manages all files being uploaded.\n *\n * This service can be used to query the current\n * upload state when a user leaves the app,\n * asking them whether they want to cancel\n * the remaining uploads.\n */\nexport default class FileQueueService extends Service {\n  queues: TrackedMap<QueueName, Queue> = new TrackedMap();\n\n  /**\n   * Identical untracked map to avoid mutating tracked state during rendering\n   * when checking for existing queues.\n   */\n  #queues: Map<QueueName, Queue> = new Map();\n\n  /**\n   * Returns a queue with the given name\n   *\n   * @param name The name of the queue to find\n   * @returns The queue if it exists\n   */\n  find(name: QueueName): Queue | undefined {\n    return this.#queues.get(name);\n  }\n\n  /**\n   * Create a new queue with the given name.\n   *\n   * @param name The name of the queue to create\n   * @returns The new queue.\n   */\n  create(name: QueueName): Queue {\n    assert(\n      `Queue names are required to be unique. \"${String(\n        name,\n      )}\" has already been reserved.`,\n      !this.#queues.has(name),\n    );\n\n    const queue = new Queue({ name, fileQueue: this });\n\n    registerDestructor(queue, () => {\n      this.#queues.delete(name);\n      this.queues.delete(name);\n    });\n\n    this.#queues.set(name, queue);\n    this.queues.set(name, queue);\n    return queue;\n  }\n\n  findOrCreate(name: QueueName): Queue {\n    return this.find(name) ?? this.create(name);\n  }\n\n  /**\n   * The list of all files in queues. This automatically gets\n   * flushed when all the files in the queue have settled.\n   *\n   * @remarks\n   * Note that files that have failed need to be manually\n   * removed from the queue. This is so they can be retried\n   * without resetting the state of the queue, orphaning the\n   * file from its queue. Upload failures can happen due to a\n   * timeout or a server response. If you choose to use the\n   * `abort` method, the file will fail to upload, but will\n   * be removed from the requeuing proccess, and will be\n   * considered to be in a settled state.\n   *\n   * @defaultValue []\n   */\n  get files(): UploadFile[] {\n    return [...this.queues.values()].reduce((acc: UploadFile[], queue) => {\n      return [...acc, ...queue.files];\n    }, []);\n  }\n\n  /**\n   * The current time in ms it is taking to upload 1 byte.\n   *\n   * @defaultValue 0\n   */\n  get rate(): number {\n    return this.files\n      .filter((file) => file.state === FileState.Uploading)\n      .reduce((acc, { rate }) => {\n        return acc + rate;\n      }, 0);\n  }\n\n  /**\n   * The total size of all files currently being uploaded in bytes.\n   *\n   * @defaultValue 0\n   */\n  get size(): number {\n    return this.files.reduce((acc, { size }) => {\n      return acc + size;\n    }, 0);\n  }\n\n  /**\n   * The number of bytes that have been uploaded to the server.\n   *\n   * @defaultValue 0\n   */\n  get loaded(): number {\n    return this.files.reduce((acc, { loaded }) => {\n      return acc + loaded;\n    }, 0);\n  }\n\n  /**\n   * The current progress of all uploads, as a percentage in the\n   * range of 0 to 100.\n   *\n   * @defaultValue 0\n   */\n  get progress(): number {\n    const percent = this.loaded / this.size || 0;\n    return Math.floor(percent * 100);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { registerDestructor } from '@ember/destroyable';\nimport { inject as service } from '@ember/service';\nimport type { UploadFile } from '../upload-file.ts';\nimport type FileQueueService from '../services/file-queue.ts';\nimport { DEFAULT_QUEUE } from '../services/file-queue.ts';\nimport type { FileQueueSignature, QueueListener } from '../interfaces.ts';\n\n/**\n * `file-queue` helper is one of the core primitives of ember-file-upload.\n *\n * @example\n *\n * using the default queue (no `name` property)\n *\n * ```hbs\n * {{#let (file-queue) as |queue|}}\n *   {{queue.progress}}%\n * {{/let}}\n * ```\n *\n * @example\n *\n * named queue:\n *\n * ```hbs\n * {{#let (file-queue name=\"photos\") as |queue|}}\n *   {{queue.progress}}%\n * {{/let}}\n * ```\n */\nexport default class FileQueueHelper\n  extends Helper<FileQueueSignature>\n  implements QueueListener\n{\n  @service declare fileQueue: FileQueueService;\n\n  declare named: FileQueueSignature['Args']['Named'];\n\n  compute(\n    _positional: FileQueueSignature['Args']['Positional'],\n    named: FileQueueSignature['Args']['Named'],\n  ) {\n    this.named = named;\n    const queue = this.fileQueue.findOrCreate(named.name ?? DEFAULT_QUEUE);\n\n    queue.addListener(this);\n\n    registerDestructor(this, () => {\n      queue.removeListener(this);\n    });\n\n    return queue;\n  }\n\n  onFileAdded(file: UploadFile) {\n    this.named.onFileAdded?.(file);\n  }\n\n  onFileRemoved(file: UploadFile) {\n    this.named.onFileRemoved?.(file);\n  }\n\n  onUploadStarted(file: UploadFile) {\n    this.named.onUploadStarted?.(file);\n  }\n\n  onUploadSucceeded(file: UploadFile, response: Response) {\n    this.named.onUploadSucceeded?.(file, response);\n  }\n\n  onUploadFailed(file: UploadFile, response: Response) {\n    this.named.onUploadFailed?.(file, response);\n  }\n}\n","import RSVP from 'rsvp';\nimport { extractFormData, extractFileMetadata } from './utils.ts';\nimport {\n  macroCondition,\n  dependencySatisfies,\n  importSync,\n} from '@embroider/macros';\n\nconst NETWORK = {\n  wired: 50000, // 500 Mb/s\n  wifi: 15000, // 15 Mb/s\n  dsl: 1000, // 1 Mb/s\n  '4g': 3000, // 4 Mb/s\n  '3g': 250, // 250 kb/s\n  '2g': 50, // 50 kb/s\n  gprs: 20, // 20 kb/s\n  offline: 0,\n};\n\ninterface FakeRequest {\n  requestBody: FormData | object; // Replaced with an object by this handler\n  upload: {\n    onloadstart: (event: ProgressEvent<EventTarget>) => void;\n    onprogress: (event: ProgressEvent<EventTarget>) => void;\n    onloadend: (event: ProgressEvent<EventTarget>) => void;\n  };\n}\n\nexport function uploadHandler(\n  fn: (this: void, db: unknown, request: FakeRequest) => void,\n  options = { network: null, timeout: null },\n) {\n  if (\n    macroCondition(\n      dependencySatisfies('miragejs', '*') &&\n        dependencySatisfies('ember-cli-mirage', '*'),\n    )\n  ) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const { Response } = importSync('miragejs') as { Response: any };\n    return function (db: unknown, request: FakeRequest) {\n      let speed = Infinity;\n\n      if (options.network && NETWORK[options.network]) {\n        speed = NETWORK[options.network] * 1024;\n      }\n\n      const { file, data } = extractFormData(request.requestBody as FormData);\n      let loaded = 0;\n      const total = file.value.size;\n\n      return new RSVP.Promise((resolve) => {\n        const start = new Date().getTime();\n\n        request.upload.onloadstart(\n          new ProgressEvent('loadstart', {\n            lengthComputable: true,\n            total,\n            loaded: Math.min(loaded, total),\n          }),\n        );\n\n        const upload = async () => {\n          const timedOut =\n            options.timeout && new Date().getTime() - start > options.timeout;\n          if (timedOut || loaded >= total) {\n            request.upload.onloadend(\n              new ProgressEvent('loadend', {\n                lengthComputable: true,\n                // For the loadend event the `total` value may be sourced from the `Content-Length` response header of the upload endpoint.\n                // In which case it may represent the size of the response rather than the number of uploaded bytes.\n                // So we set it to an arbitrary value to make sure this doesn't influence file upload and queue progress stats.\n                // See: https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent/total\n                total: 300,\n                loaded: Math.min(loaded, total),\n              }),\n            );\n\n            const metadata = await extractFileMetadata(file.value);\n            request.requestBody = { [file.key]: metadata, ...data };\n\n            if (timedOut) {\n              resolve(new Response(408));\n              return;\n            }\n\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            resolve(fn.call(this, db, request));\n          } else {\n            request.upload.onprogress(\n              new ProgressEvent('progress', {\n                lengthComputable: true,\n                total,\n                loaded,\n              }),\n            );\n\n            loaded += speed / 20;\n            setTimeout(upload, 50);\n          }\n        };\n        upload();\n      });\n    };\n  } else {\n    throw new Error(\n      'You must add ember-cli-mirage and miragejs to your app to use this helper.',\n    );\n  }\n}\n","import { bind } from '@ember/runloop';\nimport RSVP from 'rsvp';\nimport type { HTTPRequestOptions } from '../interfaces.ts';\n\nfunction parseHeaders(headerString: string) {\n  return headerString\n    .split(/\\n|\\r/)\n    .filter((str) => str !== '')\n    .reduce((headers: Headers, headerString: string) => {\n      const parts = headerString.split(/^([0-9A-Za-z_-]*:)/);\n      if (parts.length > 0 && parts[1] && parts[2]) {\n        headers.append(parts[1].slice(0, -1), parts[2].trim());\n      }\n      return headers;\n    }, new Headers());\n}\n\nfunction parseResponse(request: XMLHttpRequest): Response {\n  const body = request.response === '' ? null : request.response;\n  if (request.status >= 200 && request.status < 600) {\n    return new Response(body, {\n      status: request.status,\n      statusText: request.statusText,\n      headers: parseHeaders(request.getAllResponseHeaders()),\n    });\n  } else {\n    return Response.error();\n  }\n}\n\nexport default class HTTPRequest {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  onloadstart: (event?: ProgressEvent<EventTarget>) => void | undefined;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  onprogress: (event?: ProgressEvent<EventTarget>) => void | undefined;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  onloadend: (event?: ProgressEvent<EventTarget>) => void | undefined;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  ontimeout: (event?: ProgressEvent<EventTarget>) => void | undefined;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  onabort: (event?: ProgressEvent<EventTarget>) => void | undefined;\n\n  request;\n  resolve;\n  reject;\n  promise: RSVP.Promise<Response>;\n\n  constructor(options: HTTPRequestOptions = {}) {\n    const { resolve, reject, promise } = RSVP.defer(\n      `ember-file-upload: ${options.label}`,\n    );\n    this.resolve = resolve;\n    this.reject = reject;\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    this.promise = promise;\n    this.request = new XMLHttpRequest();\n\n    this.request.withCredentials = options.withCredentials ?? false;\n\n    let aborted: RSVP.Deferred<string>;\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    promise.cancel = () => {\n      if (aborted == null) {\n        aborted = RSVP.defer(`ember-file-upload: Abort ${options.label}`);\n        this.request.abort();\n      }\n      return aborted.promise;\n    };\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    promise.then = function (...args) {\n      const newPromise = RSVP.Promise.prototype.then.apply(this, args);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      newPromise.cancel = promise.cancel;\n      newPromise.then = promise.then;\n      return newPromise;\n    };\n    this.request.onabort = bind(this, function () {\n      this.onabort?.();\n      aborted.resolve();\n    });\n\n    this.request.onloadstart = bind(this, function (evt) {\n      this.onloadstart?.(evt);\n    });\n    this.request.onprogress = bind(this, function (evt) {\n      this.onprogress?.(evt);\n    });\n    this.request.onloadend = bind(this, function (evt) {\n      this.onloadend?.(evt);\n    });\n\n    if (this.request.upload) {\n      this.request.upload.onloadstart = this.request.onloadstart;\n      this.request.upload.onprogress = this.request.onprogress;\n      this.request.upload.onloadend = this.request.onloadend;\n    }\n\n    this.request.onload = bind(this, function () {\n      const response = parseResponse(this.request);\n      if (Math.floor(response.status / 200) === 1) {\n        resolve(response);\n      } else {\n        reject(response);\n      }\n    });\n\n    this.request.onerror = bind(this, function () {\n      reject(parseResponse(this.request));\n    });\n\n    Object.defineProperty(this, 'timeout', {\n      get() {\n        return this.request.timeout;\n      },\n      set(timeout) {\n        this.request.timeout = timeout;\n      },\n      enumerable: true,\n      configurable: false,\n    });\n\n    this.request.ontimeout = bind(this, function () {\n      this.ontimeout?.();\n      reject(parseResponse(this.request));\n    });\n  }\n\n  send(body: Parameters<XMLHttpRequest['send']>[0]) {\n    this.request.send(body);\n    return this.promise;\n  }\n\n  open(\n    method: string,\n    url: string | URL,\n    _async: boolean,\n    usename?: string,\n    password?: string,\n  ) {\n    this.request.open(method, url, true, usename, password);\n  }\n\n  setRequestHeader(name: string, value: string) {\n    this.request.setRequestHeader(name, value);\n  }\n}\n","import type { UploadFile } from './upload-file.ts';\nimport type { Queue } from './queue.ts';\nimport type FileQueueService from './services/file-queue.ts';\nimport type DataTransferWrapper from './system/data-transfer-wrapper.ts';\n\nexport interface FileQueueSignature {\n  Args: {\n    Positional: never[];\n    Named: {\n      name?: string;\n      onFileAdded?: (file: UploadFile) => void;\n      onFileRemoved?: (file: UploadFile) => void;\n      onUploadStarted?: (file: UploadFile) => void;\n      onUploadSucceeded?: (file: UploadFile, response: Response) => void;\n      onUploadFailed?: (file: UploadFile, response: Response) => void;\n    };\n  };\n  Return: Queue;\n}\n\nexport interface SelectFileSignature {\n  Element: HTMLInputElement;\n  Args: {\n    Positional: [];\n    Named: {\n      filter?: (file: File, files: File[], index: number) => boolean;\n      onFilesSelected?: (files: UploadFile[]) => void;\n    };\n  };\n}\n\ndeclare module '@ember/service' {\n  interface Registry {\n    'file-queue': FileQueueService;\n  }\n}\n\nexport interface QueueListener {\n  onFileAdded?(file: UploadFile): void;\n  onFileRemoved?(file: UploadFile): void;\n  onUploadStarted?(file: UploadFile): void;\n  onUploadSucceeded?(file: UploadFile, response: Response): void;\n  onUploadFailed?(file: UploadFile, response: Response): void;\n}\n\nexport type QueueName = string | symbol;\n\n/**\n * Possible file states.\n *\n * @remarks\n *\n * Here is the statechart describing the flow of state:\n *\n * ```\n *       .------.     .---------.     .--------.\n *   o--| queued |-->| uploading |-->| uploaded |\n *       `------`     `---------`     `--------`\n *          ^              |    .-------.\n *          |              |`->| aborted |\n *          |              |    `-------`\n *          |  .------.    |    .---------.\n *          `-| failed |<-` `->| timed_out |-.\n *          |  `------`         `---------`  |\n *          `-------------------------------`\n * ```\n */\nexport enum FileState {\n  Queued = 'queued',\n  Uploading = 'uploading',\n  TimedOut = 'timed_out',\n  Aborted = 'aborted',\n  Uploaded = 'uploaded',\n  Failed = 'failed',\n}\n\nexport enum FileSource {\n  /**\n   * the file is created using the native file picker\n   */\n  Browse = 'browse',\n\n  /**\n   * the file was created using drag and drop from their desktop\n   */\n  DragAndDrop = 'drag-and-drop',\n\n  /**\n   * the file was created by dragging the file from another webpage\n   */\n  Web = 'web',\n\n  /**\n   * the file is created from a data URL using the `fromDataURL`\n   * method for files. This usually means that the file was created\n   * manually by the developer on behalf of the user\n   */\n  DataUrl = 'data-url',\n\n  /**\n   * the file is created from a blob using the `fromBlob`\n   * method for files. This usually means that the file was created\n   * manually by the developer\n   */\n  Blob = 'blob',\n}\n\nexport interface FileDropzoneSignature {\n  Element: HTMLElement;\n  Args: {\n    queue?: Queue;\n\n    /**\n     * Whether users can upload content from websites by dragging images from\n     * another webpage and dropping it into your app. The default is `false`\n     * to prevent cross-site scripting issues.\n     *\n     * @defaulValue false\n     * */\n    allowUploadsFromWebsites?: boolean;\n\n    /**\n     * This is the type of cursor that should\n     * be shown when a drag event happens.\n     *\n     * Corresponds to `DataTransfer.dropEffect`.\n     * (https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/dropEffect)\n     *\n     * @defaultValue 'copy'\n     */\n    cursor?: 'link' | 'none' | 'copy' | 'move';\n\n    /**\n     * Whether to add multiple files to the queue at once.\n     *\n     * If set to false only one file will be added when dropping mulitple files.\n     *\n     * @defaultValue true\n     */\n    multiple?: boolean;\n\n    // actions\n    filter?: (file: File, files: File[], index: number) => boolean;\n\n    /**\n     * Called when files have entered the dropzone.\n     */\n    onDragEnter?: (files: File[], dataTransfer: DataTransferWrapper) => void;\n\n    /**\n     * Called when files have left the dropzone.\n     */\n    onDragLeave?: (files: File[], dataTransfer: DataTransferWrapper) => void;\n\n    /**\n     * Called when file have been dropped on the dropzone.\n     */\n    onDrop?: (files: UploadFile[], dataTransfer: DataTransferWrapper) => void;\n  };\n  Blocks: {\n    default: [dropzone: { supported: boolean; active: boolean }, queue: Queue];\n  };\n}\n\nexport interface FileUploadDragEvent extends DragEvent {\n  dataTransfer: DataTransfer;\n  source?: 'os' | 'web';\n  itemDetails?: DataTransferItem[] | { kind: string; type: string }[];\n}\n\nexport interface UploadOptions {\n  url?: string;\n  method?: string;\n  accepts?: string[];\n  headers?: Record<string, string>;\n  fileKey?: string;\n  contentType?: string;\n  data?: Record<string, string | File>;\n  withCredentials?: boolean;\n  timeout?: number;\n}\n\nexport interface HTTPRequestOptions {\n  label?: string;\n  withCredentials?: boolean;\n  timeout?: number;\n}\n\nexport interface HTTPRequestResponse {\n  status: number;\n  body: string | Document | HTMLElement[] | null | undefined;\n  headers: Record<string, string>;\n}\n\nexport interface DragListenerModifierSignature {\n  Args: {\n    Named: DragListenerHandlers;\n  };\n}\n\ntype DragListenerHandler = (event: FileUploadDragEvent) => void;\n\nexport interface DragListenerHandlers {\n  dragenter?: DragListenerHandler;\n  dragleave?: DragListenerHandler;\n  dragover?: DragListenerHandler;\n  drop?: DragListenerHandler;\n}\n\nexport interface DragEventListener {\n  element: Element;\n  handlers: DragListenerHandlers;\n}\n\nexport interface QueuedDragEvent {\n  eventName: 'dragenter' | 'dragleave' | 'dragover' | 'drop';\n  listener: DragEventListener;\n  event: FileUploadDragEvent;\n}\n\nexport interface SyntheticDragEvent {\n  source: FileUploadDragEvent['source'];\n  dataTransfer: DataTransfer | null;\n  itemDetails: Array<{\n    kind: string;\n    type: string;\n  }>;\n}\n","import { assert } from '@ember/debug';\nimport HTTPRequest from './http-request.ts';\nimport RSVP from 'rsvp';\nimport { waitForPromise } from '@ember/test-waiters';\nimport type { UploadFile } from '../upload-file.ts';\nimport { FileState, type UploadOptions } from '../interfaces.ts';\n\nfunction clone(object: object | undefined) {\n  return object ? { ...object } : {};\n}\n\nfunction normalizeOptions(\n  file: UploadFile,\n  url: string | object | undefined,\n  options?: UploadOptions,\n) {\n  if (typeof url === 'object') {\n    options = url;\n    url = undefined;\n  }\n\n  options = clone(options);\n\n  options.url = options.url || url;\n  options.method = options.method || 'POST';\n  options.accepts = options.accepts || ['application/json', 'text/javascript'];\n  if (!Object.prototype.hasOwnProperty.call(options, 'contentType')) {\n    options.contentType = file.type;\n  }\n  options.headers = clone(options.headers);\n  options.data = clone(options.data);\n  options.fileKey = options.fileKey || 'file';\n\n  if (options.headers['Accept'] == null) {\n    if (!Array.isArray(options.accepts)) {\n      options.accepts = [options.accepts];\n    }\n    options.headers['Accept'] = options.accepts.join(',');\n  }\n\n  // Set Content-Type in the data payload\n  // instead of the headers, since the header\n  // for Content-Type will always be multipart/form-data\n  if (options.contentType) {\n    options.data['Content-Type'] = options.contentType;\n  }\n\n  options.data[options.fileKey] = file.file;\n\n  options.withCredentials = options.withCredentials || false;\n\n  return options;\n}\n\nfunction updateRate(file: UploadFile) {\n  const updatedTime = new Date().getTime();\n\n  // If there's a previous recording, we can calculate a rate from that\n  if (file.timestampWhenProgressLastUpdated) {\n    const timeElapsedSinceLastUpdate =\n      updatedTime - file.timestampWhenProgressLastUpdated;\n\n    const bytesTransferredSinceLastUpdate =\n      file.loaded - file.bytesWhenProgressLastUpdated;\n\n    // Divide by elapsed time to get bytes per millisecond\n    const rate = bytesTransferredSinceLastUpdate / timeElapsedSinceLastUpdate;\n\n    file.rates = [...file.rates, rate];\n  }\n\n  // Finally set current state to be picked up by next invocation\n  file.bytesWhenProgressLastUpdated = file.loaded;\n  file.timestampWhenProgressLastUpdated = updatedTime;\n}\n\nexport function onloadstart(\n  file: UploadFile,\n  event?: ProgressEvent<EventTarget>,\n) {\n  if (!event) return;\n  if (!event.lengthComputable || event.total === 0) return;\n\n  file.loaded = event.loaded;\n  // It occurs that the event.total is not always correct.\n  // For this reason we should hold the max file size.\n  // The correct should be returned while progress\n  file.size = Math.max(file.size, event.total);\n  file.progress = (file.loaded / file.size) * 100;\n\n  updateRate(file);\n}\n\nexport function onprogress(\n  file: UploadFile,\n  event?: ProgressEvent<EventTarget>,\n) {\n  if (!event) return;\n  // We need to check also for isUploadComplete, because the browsers brings sometimes the onprogress after onloadend event\n  if (!event.lengthComputable || event.total === 0 || file.isUploadComplete)\n    return;\n\n  file.size = event.total;\n\n  // When the progress is completed there is possible that we get the `Content-Length` response header of the upload endpoint as loaded / total.\n  // There is possible that `Content-Length` is lower or higher than the already loaded bytes.\n  // if there is lower, we want to keep the higher loaded value, otherwise the progress percentage will be decreased\n  // When the event.loaded is higher than the start file.size, we use the file.size, otherwise it can occur that progress for the file is higher than 100%\n  let loaded = event.loaded;\n  if (loaded > file.size) {\n    loaded = file.size;\n  }\n  file.loaded = Math.max(loaded, file.loaded);\n  file.progress = (file.loaded / file.size) * 100;\n\n  updateRate(file);\n}\n\nexport function onloadend(\n  file: UploadFile,\n  event?: ProgressEvent<EventTarget>,\n) {\n  if (!event) return;\n  if (!event.lengthComputable || event.total === 0) return;\n\n  file.loaded = file.size;\n  file.progress = (file.loaded / file.size) * 100;\n  file.isUploadComplete = true;\n}\n\nexport function upload(\n  file: UploadFile,\n  url: string | object,\n  opts: UploadOptions | undefined,\n  uploadFn: (request: HTTPRequest, options: UploadOptions) => Promise<Response>,\n) {\n  if (['queued', 'failed', 'timed_out', 'aborted'].indexOf(file.state) === -1) {\n    assert(\n      `The file ${file.id} is in the state \"${file.state}\" and cannot be requeued.`,\n    );\n  }\n\n  const options = normalizeOptions(file, url, opts);\n\n  const request = new HTTPRequest({\n    withCredentials: options.withCredentials,\n    label: `${options.method} ${file.name} to ${options.url}`,\n  });\n\n  request.open(options.method ?? 'POST', options.url ?? '', true, '', '');\n\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  Object.keys(options.headers).forEach(function (key) {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    request.setRequestHeader(key, options.headers[key]);\n  });\n\n  if (options.timeout) {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    request.timeout = options.timeout;\n  }\n\n  request.onloadstart = (event) => onloadstart(file, event);\n  request.onprogress = (event) => onprogress(file, event);\n  request.onloadend = (event) => onloadend(file, event);\n\n  request.ontimeout = () => {\n    file.state = FileState.TimedOut;\n    file.queue?.flush();\n  };\n  request.onabort = () => {\n    file.state = FileState.Aborted;\n    file.queue?.flush();\n  };\n  file.state = FileState.Uploading;\n\n  return waitForPromise(\n    uploadFn(request, options)\n      .then(function (response) {\n        file.state = FileState.Uploaded;\n        file.queue?.uploadSucceeded(file, response);\n        return response;\n      })\n      .catch(function (response) {\n        file.state = FileState.Failed;\n        file.queue?.uploadFailed(file, response);\n        return RSVP.reject(response);\n      })\n      .finally(() => file.queue?.flush()),\n  );\n}\n","import RSVP from 'rsvp';\n\n/**\n  Provides a promise-aware interface for reading files.\n\n  ```js\n  import { UploadFile, UploadFileReader } from 'ember-file-upload';\n\n  let reader = new UploadFileReader();\n  let file = File.fromDataURL('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAAXNSR0IArs4c6QAAACNJREFUCB1jYICC6dOn/4exwTRMAEYzwBnoOmASMBpuDLIAAIVVFiE0cg0oAAAAAElFTkSuQmCC');\n\n  reader.readAsDataURL(file.blob).then((url) => {\n    return url;\n  }, function (err) {\n    console.error(err);\n  });\n  ```\n\n  Promises can be aborted, which will cancel the file upload:\n\n  ```js\n  let promise = reader.readAsDataURL(file.blob);\n  promise.then((url) => {\n    return url;\n  }, (err) => {\n    console.error(err);\n  });\n\n  promise.abort().then(() => {\n    console.error('cancelled reading file');\n  });\n  ```\n\n  @class UploadFileReader\n  @constructor\n  @param [options] An object with a label to use to mark the promise.\n */\nexport default class UploadFileReader {\n  label;\n  reader;\n\n  constructor(options: { label: string } = { label: '' }) {\n    this.label = options.label;\n    this.reader = new FileReader();\n  }\n\n  /**\n    Reads the file and returns a promise that will\n    return the blob as ArrayBuffer.\n\n    @method readAsArrayBuffer\n    @return {Promise} A promise that will return the file as an ArrayBuffer\n   */\n  readAsArrayBuffer(blob: Blob) {\n    this.reader.readAsArrayBuffer(blob);\n    return this.cancellablePromise;\n  }\n\n  /**\n    Reads the file and returns a promise that will\n    return the blob as data URL.\n\n    This is useful for reading images to display\n    as a preview in the browser.\n\n    @method readAsDataURL\n    @return {Promise} A promise that will return the file as a data URL\n   */\n  readAsDataURL(blob: Blob) {\n    this.reader.readAsDataURL(blob);\n    return this.cancellablePromise;\n  }\n\n  /**\n    Reads the file and returns a promise that will\n    return the blob as binary string.\n\n    This is useful for reading images or files that\n    are not plain text.\n\n    @method readAsBinaryString\n    @return {Promise} A promise that will return the file as a binary string\n   */\n  readAsBinaryString(blob: Blob) {\n    this.reader.readAsBinaryString(blob);\n    return this.cancellablePromise;\n  }\n\n  /**\n    Reads the file and returns a promise that will\n    return the blob as text.\n\n    This is useful for reading plain text files.\n\n    @method readAsText\n    @return {Promise} A promise that will return the file as text\n   */\n  readAsText(blob: Blob) {\n    this.reader.readAsText(blob);\n    return this.cancellablePromise;\n  }\n\n  get cancellablePromise() {\n    const { promise, resolve, reject } = RSVP.defer(\n      `ember-file-upload: ${this.label}`,\n    );\n\n    const cancellable = promise.then(\n      () => {\n        return this.reader.result;\n      },\n      () => {\n        return RSVP.reject(this.reader.error);\n      },\n      `ember-file-upload: Unpack ${this.label}`,\n    );\n\n    let abort: RSVP.Deferred<string> | undefined;\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    cancellable.cancel = () => {\n      if (abort == null) {\n        abort = RSVP.defer(`ember-file-upload: Abort ${this.label}`);\n        this.reader.abort();\n      }\n      return abort.promise;\n    };\n\n    this.reader.onload = resolve;\n    this.reader.onerror = reject;\n    this.reader.onabort = () => {\n      abort?.resolve();\n    };\n\n    return cancellable;\n  }\n}\n","// Calculate from the last x rate recordings\nconst CALCULATE_FROM_LAST = 30;\n\n// Weigh recent rates more highly\nconst THRESHOLDS = [\n  { threshold: 10, proportion: 3 },\n  { threshold: 20, proportion: 2 },\n  { threshold: 30, proportion: 1 },\n];\nconst DEFAULT_PROPORTION = 1;\n\nexport function estimatedRate(allRates: number[]): number {\n  if (!allRates.length) return 0;\n\n  const rates = allRates.slice(CALCULATE_FROM_LAST * -1).reverse();\n  const weights = generateWeights(rates.length);\n\n  // Multiply each rate by its respective weight for a weighted average\n  return rates.reduce((acc, rate, index) => {\n    const weight = weights[index] as number;\n    return acc + rate * weight;\n  }, 0);\n}\n\nexport function generateWeights(totalRates: number): number[] {\n  // Generate an array the same length as totalRates filled with proportioanl weights\n  const proportions = Array.from({ length: totalRates }).map((_, index) => {\n    return proportionForPosition(index + 1);\n  });\n\n  const proportionTotal = proportions.reduce((acc, value) => acc + value, 0);\n  // Convert proportional weights to real weights by division\n  const realWeights = proportions.map(\n    (proportion) => proportion / proportionTotal,\n  );\n\n  return realWeights;\n}\n\nexport function proportionForPosition(position: number) {\n  for (const { threshold, proportion } of THRESHOLDS) {\n    if (position <= threshold) return proportion;\n  }\n  return DEFAULT_PROPORTION;\n}\n","import {\n  tabbable,\n  focusable,\n  isFocusable,\n  isTabbable,\n  getTabIndex,\n} from 'tabbable';\n\nconst activeFocusTraps = {\n  // Returns the trap from the top of the stack.\n  getActiveTrap(trapStack) {\n    if (trapStack?.length > 0) {\n      return trapStack[trapStack.length - 1];\n    }\n    return null;\n  },\n\n  // Pauses the currently active trap, then adds a new trap to the stack.\n  activateTrap(trapStack, trap) {\n    const activeTrap = activeFocusTraps.getActiveTrap(trapStack);\n\n    if (trap !== activeTrap) {\n      activeFocusTraps.pauseTrap(trapStack);\n    }\n\n    const trapIndex = trapStack.indexOf(trap);\n    if (trapIndex === -1) {\n      trapStack.push(trap);\n    } else {\n      // move this existing trap to the front of the queue\n      trapStack.splice(trapIndex, 1);\n      trapStack.push(trap);\n    }\n  },\n\n  // Removes the trap from the top of the stack, then unpauses the next trap down.\n  deactivateTrap(trapStack, trap) {\n    const trapIndex = trapStack.indexOf(trap);\n    if (trapIndex !== -1) {\n      trapStack.splice(trapIndex, 1);\n    }\n\n    activeFocusTraps.unpauseTrap(trapStack);\n  },\n\n  // Pauses the trap at the top of the stack.\n  pauseTrap(trapStack) {\n    const activeTrap = activeFocusTraps.getActiveTrap(trapStack);\n    activeTrap?._setPausedState(true);\n  },\n\n  // Unpauses the trap at the top of the stack.\n  unpauseTrap(trapStack) {\n    const activeTrap = activeFocusTraps.getActiveTrap(trapStack);\n\n    if (activeTrap && !activeTrap._isManuallyPaused()) {\n      activeTrap._setPausedState(false);\n    }\n  },\n};\n\nconst isSelectableInput = function (node) {\n  return (\n    node.tagName &&\n    node.tagName.toLowerCase() === 'input' &&\n    typeof node.select === 'function'\n  );\n};\n\nconst isEscapeEvent = function (e) {\n  return e?.key === 'Escape' || e?.key === 'Esc' || e?.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n  return e?.key === 'Tab' || e?.keyCode === 9;\n};\n\n// checks for TAB by default\nconst isKeyForward = function (e) {\n  return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nconst isKeyBackward = function (e) {\n  return isTabEvent(e) && e.shiftKey;\n};\n\nconst delay = function (fn) {\n  return setTimeout(fn, 0);\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n *  the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n  return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n  // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n  //  shadow host. However, event.target.composedPath() will be an array of\n  //  nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n  //  outer-most (the host HTML document). If we have access to composedPath(),\n  //  then use its first element; otherwise, fall back to event.target (and\n  //  this only works for an _open_ shadow DOM; otherwise,\n  //  composedPath()[0] === event.target always).\n  return event.target.shadowRoot && typeof event.composedPath === 'function'\n    ? event.composedPath()[0]\n    : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n//  current instance use the same stack if `userOptions.trapStack` isn't specified\nconst internalTrapStack = [];\n\nconst createFocusTrap = function (elements, userOptions) {\n  // SSR: a live trap shouldn't be created in this type of environment so this\n  //  should be safe code to execute if the `document` option isn't specified\n  const doc = userOptions?.document || document;\n\n  const trapStack = userOptions?.trapStack || internalTrapStack;\n\n  const config = {\n    returnFocusOnDeactivate: true,\n    escapeDeactivates: true,\n    delayInitialFocus: true,\n    isolateSubtrees: false,\n    isKeyForward,\n    isKeyBackward,\n    ...userOptions,\n  };\n\n  const state = {\n    // containers given to createFocusTrap()\n    /** @type {Array<HTMLElement>} */\n    containers: [],\n\n    // list of objects identifying tabbable nodes in `containers` in the trap\n    // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n    //  is active, but the trap should never get to a state where there isn't at least one group\n    //  with at least one tabbable node in it (that would lead to an error condition that would\n    //  result in an error being thrown)\n    /** @type {Array<{\n     *    container: HTMLElement,\n     *    tabbableNodes: Array<HTMLElement>, // empty if none\n     *    focusableNodes: Array<HTMLElement>, // empty if none\n     *    posTabIndexesFound: boolean,\n     *    firstTabbableNode: HTMLElement|undefined,\n     *    lastTabbableNode: HTMLElement|undefined,\n     *    firstDomTabbableNode: HTMLElement|undefined,\n     *    lastDomTabbableNode: HTMLElement|undefined,\n     *    nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n     *  }>}\n     */\n    containerGroups: [], // same order/length as `containers` list\n\n    // references to objects in `containerGroups`, but only those that actually have\n    //  tabbable nodes in them\n    // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n    //  the same length\n    tabbableGroups: [],\n\n    // references to nodes that are siblings to the ancestors of this trap's containers.\n    /** @type {Set<HTMLElement>} */\n    adjacentElements: new Set(),\n\n    // references to nodes that were inert or aria-hidden before the trap was activated.\n    /** @type {Set<HTMLElement>} */\n    alreadySilent: new Set(),\n    nodeFocusedBeforeActivation: null,\n    mostRecentlyFocusedNode: null,\n    active: false,\n    paused: false,\n    manuallyPaused: false,\n\n    // timer ID for when delayInitialFocus is true and initial focus in this trap\n    //  has been delayed during activation\n    delayInitialFocusTimer: undefined,\n\n    // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n    recentNavEvent: undefined,\n  };\n\n  let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n  /**\n   * Gets a configuration option value.\n   * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n   *  value will be taken from this object. Otherwise, value will be taken from base configuration.\n   * @param {string} optionName Name of the option whose value is sought.\n   * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n   *  IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n   */\n  const getOption = (configOverrideOptions, optionName, configOptionName) => {\n    return configOverrideOptions &&\n      configOverrideOptions[optionName] !== undefined\n      ? configOverrideOptions[optionName]\n      : config[configOptionName || optionName];\n  };\n\n  /**\n   * Finds the index of the container that contains the element.\n   * @param {HTMLElement} element\n   * @param {Event} [event] If available, and `element` isn't directly found in any container,\n   *  the event's composed path is used to see if includes any known trap containers in the\n   *  case where the element is inside a Shadow DOM.\n   * @returns {number} Index of the container in either `state.containers` or\n   *  `state.containerGroups` (the order/length of these lists are the same); -1\n   *  if the element isn't found.\n   */\n  const findContainerIndex = function (element, event) {\n    const composedPath =\n      typeof event?.composedPath === 'function'\n        ? event.composedPath()\n        : undefined;\n    // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n    //  nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n    //  and we still need to find the element in there\n    return state.containerGroups.findIndex(\n      ({ container, tabbableNodes }) =>\n        container.contains(element) ||\n        // fall back to explicit tabbable search which will take into consideration any\n        //  web components if the `tabbableOptions.getShadowRoot` option was used for\n        //  the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n        //  look inside web components even if open)\n        composedPath?.includes(container) ||\n        tabbableNodes.find((node) => node === element)\n    );\n  };\n\n  /**\n   * Gets the node for the given option, which is expected to be an option that\n   *  can be either a DOM node, a string that is a selector to get a node, `false`\n   *  (if a node is explicitly NOT given), or a function that returns any of these\n   *  values.\n   * @param {string} optionName\n   * @param {Object} options\n   * @param {boolean} [options.hasFallback] True if the option could be a selector string\n   *  and the option allows for a fallback scenario in the case where the selector is\n   *  valid but does not match a node (i.e. the queried node doesn't exist in the DOM).\n   * @param {Array} [options.params] Params to pass to the option if it's a function.\n   * @returns {undefined | null | false | HTMLElement | SVGElement} Returns\n   *  `undefined` if the option is not specified; `null` if the option didn't resolve\n   *  to a node but `options.hasFallback=true`, `false` if the option resolved to `false`\n   *  (node explicitly not given); otherwise, the resolved DOM node.\n   * @throws {Error} If the option is set, not `false`, and is not, or does not\n   *  resolve to a node, unless the option is a selector string and `options.hasFallback=true`.\n   */\n  const getNodeForOption = function (\n    optionName,\n    { hasFallback = false, params = [] } = {}\n  ) {\n    let optionValue = config[optionName];\n\n    if (typeof optionValue === 'function') {\n      optionValue = optionValue(...params);\n    }\n\n    if (optionValue === true) {\n      optionValue = undefined; // use default value\n    }\n\n    if (!optionValue) {\n      if (optionValue === undefined || optionValue === false) {\n        return optionValue;\n      }\n      // else, empty string (invalid), null (invalid), 0 (invalid)\n\n      throw new Error(\n        `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n      );\n    }\n\n    let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n    if (typeof optionValue === 'string') {\n      try {\n        node = doc.querySelector(optionValue); // resolve to node, or null if fails\n      } catch (err) {\n        throw new Error(\n          `\\`${optionName}\\` appears to be an invalid selector; error=\"${err.message}\"`\n        );\n      }\n\n      if (!node) {\n        if (!hasFallback) {\n          throw new Error(\n            `\\`${optionName}\\` as selector refers to no known node`\n          );\n        }\n        // else, `node` MUST be `null` because that's what `Document.querySelector()` returns\n        //  if the selector is valid but doesn't match anything\n      }\n    }\n\n    return node;\n  };\n\n  const getInitialFocusNode = function () {\n    let node = getNodeForOption('initialFocus', { hasFallback: true });\n\n    // false explicitly indicates we want no initialFocus at all\n    if (node === false) {\n      return false;\n    }\n\n    if (\n      node === undefined ||\n      (node && !isFocusable(node, config.tabbableOptions))\n    ) {\n      // option not specified nor focusable: use fallback options\n      if (findContainerIndex(doc.activeElement) >= 0) {\n        node = doc.activeElement;\n      } else {\n        const firstTabbableGroup = state.tabbableGroups[0];\n        const firstTabbableNode =\n          firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n        // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n        node = firstTabbableNode || getNodeForOption('fallbackFocus');\n      }\n    } else if (node === null) {\n      // option is a VALID selector string that doesn't yield a node: use the `fallbackFocus`\n      //  option instead of the default behavior when the option isn't specified at all\n      node = getNodeForOption('fallbackFocus');\n    }\n\n    if (!node) {\n      throw new Error(\n        'Your focus-trap needs to have at least one focusable element'\n      );\n    }\n\n    return node;\n  };\n\n  const updateTabbableNodes = function () {\n    state.containerGroups = state.containers.map((container) => {\n      const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n      // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n      //  are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n      //  are focusable but not tabbable\n      const focusableNodes = focusable(container, config.tabbableOptions);\n\n      const firstTabbableNode =\n        tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n      const lastTabbableNode =\n        tabbableNodes.length > 0\n          ? tabbableNodes[tabbableNodes.length - 1]\n          : undefined;\n\n      const firstDomTabbableNode = focusableNodes.find((node) =>\n        isTabbable(node)\n      );\n      const lastDomTabbableNode = focusableNodes\n        .slice()\n        .reverse()\n        .find((node) => isTabbable(node));\n\n      const posTabIndexesFound = !!tabbableNodes.find(\n        (node) => getTabIndex(node) > 0\n      );\n\n      return {\n        container,\n        tabbableNodes,\n        focusableNodes,\n\n        /** True if at least one node with positive `tabindex` was found in this container. */\n        posTabIndexesFound,\n\n        /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n        firstTabbableNode,\n        /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n        lastTabbableNode,\n\n        // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n        //  would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n        //  because that API doesn't work with Shadow DOM as well as it should (@see\n        //  https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n        //  to address an edge case related to positive tabindex support, this seems like a much easier,\n        //  \"close enough most of the time\" alternative for positive tabindexes which should generally\n        //  be avoided anyway...\n        /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n        firstDomTabbableNode,\n        /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n        lastDomTabbableNode,\n\n        /**\n         * Finds the __tabbable__ node that follows the given node in the specified direction,\n         *  in this container, if any.\n         * @param {HTMLElement} node\n         * @param {boolean} [forward] True if going in forward tab order; false if going\n         *  in reverse.\n         * @returns {HTMLElement|undefined} The next tabbable node, if any.\n         */\n        nextTabbableNode(node, forward = true) {\n          const nodeIdx = tabbableNodes.indexOf(node);\n          if (nodeIdx < 0) {\n            // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n            //  since `node` should at least have been focusable, we assume that's the case and mimic\n            //  what browsers do, which is set focus to the next node in __document position order__,\n            //  regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n            //  above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n            //  basic DOM order\n            if (forward) {\n              return focusableNodes\n                .slice(focusableNodes.indexOf(node) + 1)\n                .find((el) => isTabbable(el));\n            }\n\n            return focusableNodes\n              .slice(0, focusableNodes.indexOf(node))\n              .reverse()\n              .find((el) => isTabbable(el));\n          }\n\n          return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n        },\n      };\n    });\n\n    state.tabbableGroups = state.containerGroups.filter(\n      (group) => group.tabbableNodes.length > 0\n    );\n\n    // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n    if (\n      state.tabbableGroups.length <= 0 &&\n      !getNodeForOption('fallbackFocus') // returning false not supported for this option\n    ) {\n      throw new Error(\n        'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n      );\n    }\n\n    // NOTE: Positive tabindexes are only properly supported in single-container traps because\n    //  doing it across multiple containers where tabindexes could be all over the place\n    //  would require Tabbable to support multiple containers, would require additional\n    //  specialized Shadow DOM support, and would require Tabbable's multi-container support\n    //  to look at those containers in document position order rather than user-provided\n    //  order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n    //  https://github.com/focus-trap/focus-trap/issues/375 for more details.\n    if (\n      state.containerGroups.find((g) => g.posTabIndexesFound) &&\n      state.containerGroups.length > 1\n    ) {\n      throw new Error(\n        \"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\"\n      );\n    }\n  };\n\n  /**\n   * Gets the current activeElement. If it's a web-component and has open shadow-root\n   * it will recursively search inside shadow roots for the \"true\" activeElement.\n   *\n   * @param {Document | ShadowRoot} el\n   *\n   * @returns {HTMLElement} The element that currently has the focus\n   **/\n  const getActiveElement = function (el) {\n    const activeElement = el.activeElement;\n\n    if (!activeElement) {\n      return;\n    }\n\n    if (\n      activeElement.shadowRoot &&\n      activeElement.shadowRoot.activeElement !== null\n    ) {\n      return getActiveElement(activeElement.shadowRoot);\n    }\n\n    return activeElement;\n  };\n\n  const tryFocus = function (node) {\n    if (node === false) {\n      return;\n    }\n\n    if (node === getActiveElement(document)) {\n      return;\n    }\n\n    if (!node || !node.focus) {\n      tryFocus(getInitialFocusNode());\n      return;\n    }\n\n    node.focus({ preventScroll: !!config.preventScroll });\n    // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n    state.mostRecentlyFocusedNode = node;\n\n    if (isSelectableInput(node)) {\n      node.select();\n    }\n  };\n\n  const getReturnFocusNode = function (previousActiveElement) {\n    const node = getNodeForOption('setReturnFocus', {\n      params: [previousActiveElement],\n    });\n    return node ? node : node === false ? false : previousActiveElement;\n  };\n\n  /**\n   * Finds the next node (in either direction) where focus should move according to a\n   *  keyboard focus-in event.\n   * @param {Object} params\n   * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n   * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n   *  will be used to determine the `target`). Ignored if `target` is specified.\n   * @param {boolean} [params.isBackward] True if focus should move backward.\n   * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n   *  determined given the current state of the trap.\n   */\n  const findNextNavNode = function ({ target, event, isBackward = false }) {\n    target = target || getActualTarget(event);\n    updateTabbableNodes();\n\n    let destinationNode = null;\n\n    if (state.tabbableGroups.length > 0) {\n      // make sure the target is actually contained in a group\n      // NOTE: the target may also be the container itself if it's focusable\n      //  with tabIndex='-1' and was given initial focus\n      const containerIndex = findContainerIndex(target, event);\n      const containerGroup =\n        containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n      if (containerIndex < 0) {\n        // target not found in any group: quite possible focus has escaped the trap,\n        //  so bring it back into...\n        if (isBackward) {\n          // ...the last node in the last group\n          destinationNode =\n            state.tabbableGroups[state.tabbableGroups.length - 1]\n              .lastTabbableNode;\n        } else {\n          // ...the first node in the first group\n          destinationNode = state.tabbableGroups[0].firstTabbableNode;\n        }\n      } else if (isBackward) {\n        // REVERSE\n\n        // is the target the first tabbable node in a group?\n        let startOfGroupIndex = state.tabbableGroups.findIndex(\n          ({ firstTabbableNode }) => target === firstTabbableNode\n        );\n\n        if (\n          startOfGroupIndex < 0 &&\n          (containerGroup.container === target ||\n            (isFocusable(target, config.tabbableOptions) &&\n              !isTabbable(target, config.tabbableOptions) &&\n              !containerGroup.nextTabbableNode(target, false)))\n        ) {\n          // an exception case where the target is either the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle shift+tab as if focus were on the container's\n          //  first tabbable node, and go to the last tabbable node of the LAST group\n          startOfGroupIndex = containerIndex;\n        }\n\n        if (startOfGroupIndex >= 0) {\n          // YES: then shift+tab should go to the last tabbable node in the\n          //  previous group (and wrap around to the last tabbable node of\n          //  the LAST group if it's the first tabbable node of the FIRST group)\n          const destinationGroupIndex =\n            startOfGroupIndex === 0\n              ? state.tabbableGroups.length - 1\n              : startOfGroupIndex - 1;\n\n          const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n\n          destinationNode =\n            getTabIndex(target) >= 0\n              ? destinationGroup.lastTabbableNode\n              : destinationGroup.lastDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target, false);\n        }\n      } else {\n        // FORWARD\n\n        // is the target the last tabbable node in a group?\n        let lastOfGroupIndex = state.tabbableGroups.findIndex(\n          ({ lastTabbableNode }) => target === lastTabbableNode\n        );\n\n        if (\n          lastOfGroupIndex < 0 &&\n          (containerGroup.container === target ||\n            (isFocusable(target, config.tabbableOptions) &&\n              !isTabbable(target, config.tabbableOptions) &&\n              !containerGroup.nextTabbableNode(target)))\n        ) {\n          // an exception case where the target is the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle tab as if focus were on the container's\n          //  last tabbable node, and go to the first tabbable node of the FIRST group\n          lastOfGroupIndex = containerIndex;\n        }\n\n        if (lastOfGroupIndex >= 0) {\n          // YES: then tab should go to the first tabbable node in the next\n          //  group (and wrap around to the first tabbable node of the FIRST\n          //  group if it's the last tabbable node of the LAST group)\n          const destinationGroupIndex =\n            lastOfGroupIndex === state.tabbableGroups.length - 1\n              ? 0\n              : lastOfGroupIndex + 1;\n\n          const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n\n          destinationNode =\n            getTabIndex(target) >= 0\n              ? destinationGroup.firstTabbableNode\n              : destinationGroup.firstDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target);\n        }\n      }\n    } else {\n      // no groups available\n      // NOTE: the fallbackFocus option does not support returning false to opt-out\n      destinationNode = getNodeForOption('fallbackFocus');\n    }\n\n    return destinationNode;\n  };\n\n  // This needs to be done on mousedown and touchstart instead of click\n  // so that it precedes the focus event.\n  const checkPointerDown = function (e) {\n    const target = getActualTarget(e);\n\n    if (findContainerIndex(target, e) >= 0) {\n      // allow the click since it ocurred inside the trap\n      return;\n    }\n\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      // immediately deactivate the trap\n      trap.deactivate({\n        // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n        //  which will result in the outside click setting focus to the node\n        //  that was clicked (and if not focusable, to \"nothing\"); by setting\n        //  `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n        //  on activation (or the configured `setReturnFocus` node), whether the\n        //  outside click was on a focusable node or not\n        returnFocus: config.returnFocusOnDeactivate,\n      });\n      return;\n    }\n\n    // This is needed for mobile devices.\n    // (If we'll only let `click` events through,\n    // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      // allow the click outside the trap to take place\n      return;\n    }\n\n    // otherwise, prevent the click\n    e.preventDefault();\n  };\n\n  // In case focus escapes the trap for some strange reason, pull it back in.\n  // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n  //  scrolling if the node that got focused was out of view; there's nothing we can do to\n  //  prevent that from happening by the time we discover that focus escaped\n  const checkFocusIn = function (event) {\n    const target = getActualTarget(event);\n    const targetContained = findContainerIndex(target, event) >= 0;\n\n    // In Firefox when you Tab out of an iframe the Document is briefly focused.\n    if (targetContained || target instanceof Document) {\n      if (targetContained) {\n        state.mostRecentlyFocusedNode = target;\n      }\n    } else {\n      // escaped! pull it back in to where it just left\n      event.stopImmediatePropagation();\n\n      // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n      //  it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n      //  toward a node with a positive tab index\n      let nextNode; // next node to focus, if we find one\n      let navAcrossContainers = true;\n      if (state.mostRecentlyFocusedNode) {\n        if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n          // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n          const mruContainerIdx = findContainerIndex(\n            state.mostRecentlyFocusedNode\n          );\n          // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n          //  and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n          //  with at least one tabbable node in order to function, so this could be the other container\n          //  with nothing tabbable in it)\n          const { tabbableNodes } = state.containerGroups[mruContainerIdx];\n          if (tabbableNodes.length > 0) {\n            // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n            const mruTabIdx = tabbableNodes.findIndex(\n              (node) => node === state.mostRecentlyFocusedNode\n            );\n            if (mruTabIdx >= 0) {\n              if (config.isKeyForward(state.recentNavEvent)) {\n                if (mruTabIdx + 1 < tabbableNodes.length) {\n                  nextNode = tabbableNodes[mruTabIdx + 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              } else {\n                if (mruTabIdx - 1 >= 0) {\n                  nextNode = tabbableNodes[mruTabIdx - 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              }\n              // else, don't find in container order without considering direction too\n            }\n          }\n          // else, no tabbable nodes in that container (which means we must have at least one other\n          //  container with at least one tabbable node in it, otherwise focus-trap would've thrown\n          //  an error the last time updateTabbableNodes() was run): find next node among all known\n          //  containers\n        } else {\n          // check to see if there's at least one tabbable node with a positive tab index inside\n          //  the trap because focus seems to escape when navigating backward from a tabbable node\n          //  with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n          //  the greatest positive tab index like it should)\n          if (\n            !state.containerGroups.some((g) =>\n              g.tabbableNodes.some((n) => getTabIndex(n) > 0)\n            )\n          ) {\n            // no containers with tabbable nodes with positive tab indexes which means the focus\n            //  escaped for some other reason and we should just execute the fallback to the\n            //  MRU node or initial focus node, if any\n            navAcrossContainers = false;\n          }\n        }\n      } else {\n        // no MRU node means we're likely in some initial condition when the trap has just\n        //  been activated and initial focus hasn't been given yet, in which case we should\n        //  fall through to trying to focus the initial focus node, which is what should\n        //  happen below at this point in the logic\n        navAcrossContainers = false;\n      }\n\n      if (navAcrossContainers) {\n        nextNode = findNextNavNode({\n          // move FROM the MRU node, not event-related node (which will be the node that is\n          //  outside the trap causing the focus escape we're trying to fix)\n          target: state.mostRecentlyFocusedNode,\n          isBackward: config.isKeyBackward(state.recentNavEvent),\n        });\n      }\n\n      if (nextNode) {\n        tryFocus(nextNode);\n      } else {\n        tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n      }\n    }\n\n    state.recentNavEvent = undefined; // clear\n  };\n\n  // Hijack key nav events on the first and last focusable nodes of the trap,\n  // in order to prevent focus from escaping. If it escapes for even a\n  // moment it can end up scrolling the page and causing confusion so we\n  // kind of need to capture the action at the keydown phase.\n  const checkKeyNav = function (event, isBackward = false) {\n    state.recentNavEvent = event;\n\n    const destinationNode = findNextNavNode({ event, isBackward });\n    if (destinationNode) {\n      if (isTabEvent(event)) {\n        // since tab natively moves focus, we wouldn't have a destination node unless we\n        //  were on the edge of a container and had to move to the next/previous edge, in\n        //  which case we want to prevent default to keep the browser from moving focus\n        //  to where it normally would\n        event.preventDefault();\n      }\n      tryFocus(destinationNode);\n    }\n    // else, let the browser take care of [shift+]tab and move the focus\n  };\n\n  const checkTabKey = function (event) {\n    if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n      checkKeyNav(event, config.isKeyBackward(event));\n    }\n  };\n\n  // we use a different event phase for the Escape key to allow canceling the event and checking for this in escapeDeactivates\n  const checkEscapeKey = function (event) {\n    if (\n      isEscapeEvent(event) &&\n      valueOrHandler(config.escapeDeactivates, event) !== false\n    ) {\n      event.preventDefault();\n      trap.deactivate();\n    }\n  };\n\n  const checkClick = function (e) {\n    const target = getActualTarget(e);\n\n    if (findContainerIndex(target, e) >= 0) {\n      return;\n    }\n\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      return;\n    }\n\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      return;\n    }\n\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  };\n\n  //\n  // EVENT LISTENERS\n  //\n\n  const addListeners = function () {\n    if (!state.active) {\n      return;\n    }\n\n    // There can be only one listening focus trap at a time\n    activeFocusTraps.activateTrap(trapStack, trap);\n\n    // Delay ensures that the focused element doesn't capture the event\n    // that caused the focus trap activation.\n    state.delayInitialFocusTimer = config.delayInitialFocus\n      ? delay(function () {\n          tryFocus(getInitialFocusNode());\n        })\n      : tryFocus(getInitialFocusNode());\n\n    doc.addEventListener('focusin', checkFocusIn, true);\n    doc.addEventListener('mousedown', checkPointerDown, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('touchstart', checkPointerDown, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('click', checkClick, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('keydown', checkTabKey, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('keydown', checkEscapeKey);\n\n    return trap;\n  };\n\n  /**\n   * Traverses up the DOM from each of `containers`, collecting references to\n   * the elements that are siblings to `container` or an ancestor of `container`.\n   * @param {Array<HTMLElement>} containers\n   */\n  const collectAdjacentElements = function (containers) {\n    // Re-activate all adjacent elements & clear previous collection.\n    if (state.active && !state.paused) {\n      trap._setSubtreeIsolation(false);\n    }\n    state.adjacentElements.clear();\n    state.alreadySilent.clear();\n\n    // Collect all ancestors of all containers to avoid redundant processing.\n    const containerAncestors = new Set();\n\n    const adjacentElements = new Set();\n\n    // Compile all elements adjacent to the focus trap containers & lineage.\n    for (const container of containers) {\n      containerAncestors.add(container);\n      let insideShadowRoot =\n        typeof ShadowRoot !== 'undefined' &&\n        container.getRootNode() instanceof ShadowRoot;\n      let current = container;\n      while (current) {\n        containerAncestors.add(current);\n\n        let parent = current.parentElement;\n        let siblings = [];\n        if (parent) {\n          siblings = parent.children;\n        } else if (!parent && insideShadowRoot) {\n          siblings = current.getRootNode().children;\n          parent = current.getRootNode().host;\n          insideShadowRoot =\n            typeof ShadowRoot !== 'undefined' &&\n            parent.getRootNode() instanceof ShadowRoot;\n        }\n\n        // Add all the children, we'll remove container lineage later.\n        for (const child of siblings) {\n          adjacentElements.add(child);\n        }\n\n        current = parent;\n      }\n    }\n\n    // Multi-container traps may overlap.\n    // Remove elements within container lineages.\n    containerAncestors.forEach((el) => {\n      adjacentElements.delete(el);\n    });\n\n    state.adjacentElements = adjacentElements;\n  };\n\n  const removeListeners = function () {\n    if (!state.active) {\n      return;\n    }\n\n    doc.removeEventListener('focusin', checkFocusIn, true);\n    doc.removeEventListener('mousedown', checkPointerDown, true);\n    doc.removeEventListener('touchstart', checkPointerDown, true);\n    doc.removeEventListener('click', checkClick, true);\n    doc.removeEventListener('keydown', checkTabKey, true);\n    doc.removeEventListener('keydown', checkEscapeKey);\n\n    return trap;\n  };\n\n  //\n  // MUTATION OBSERVER\n  //\n\n  const checkDomRemoval = function (mutations) {\n    const isFocusedNodeRemoved = mutations.some(function (mutation) {\n      const removedNodes = Array.from(mutation.removedNodes);\n      return removedNodes.some(function (node) {\n        return node === state.mostRecentlyFocusedNode;\n      });\n    });\n\n    // If the currently focused is removed then browsers will move focus to the\n    // <body> element. If this happens, try to move focus back into the trap.\n    if (isFocusedNodeRemoved) {\n      tryFocus(getInitialFocusNode());\n    }\n  };\n\n  // Use MutationObserver - if supported - to detect if focused node is removed\n  // from the DOM.\n  const mutationObserver =\n    typeof window !== 'undefined' && 'MutationObserver' in window\n      ? new MutationObserver(checkDomRemoval)\n      : undefined;\n\n  const updateObservedNodes = function () {\n    if (!mutationObserver) {\n      return;\n    }\n\n    mutationObserver.disconnect();\n    if (state.active && !state.paused) {\n      state.containers.map(function (container) {\n        mutationObserver.observe(container, {\n          subtree: true,\n          childList: true,\n        });\n      });\n    }\n  };\n\n  //\n  // TRAP DEFINITION\n  //\n\n  trap = {\n    get active() {\n      return state.active;\n    },\n\n    get paused() {\n      return state.paused;\n    },\n\n    activate(activateOptions) {\n      if (state.active) {\n        return this;\n      }\n\n      const onActivate = getOption(activateOptions, 'onActivate');\n      const onPostActivate = getOption(activateOptions, 'onPostActivate');\n      const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n      // If a currently-active trap is isolating its subtree, we need to remove\n      // that isolation to allow the new trap to find tabbable nodes.\n      const preexistingTrap = activeFocusTraps.getActiveTrap(trapStack);\n      let revertState = false;\n      if (preexistingTrap && !preexistingTrap.paused) {\n        // [#1729] method MAY not exist if using `trapStack` option to share stack with older\n        //  versions of Focus-trap in the same DOM so use optional chaining here just in case\n        //  since this is a trap we may not have created from this instance of the library\n        preexistingTrap._setSubtreeIsolation?.(false);\n        revertState = true;\n      }\n\n      try {\n        if (!checkCanFocusTrap) {\n          updateTabbableNodes();\n        }\n\n        state.active = true;\n        state.paused = false;\n        state.nodeFocusedBeforeActivation = getActiveElement(doc);\n\n        onActivate?.();\n\n        const finishActivation = () => {\n          if (checkCanFocusTrap) {\n            updateTabbableNodes();\n          }\n          addListeners();\n          updateObservedNodes();\n          if (config.isolateSubtrees) {\n            trap._setSubtreeIsolation(true);\n          }\n          onPostActivate?.();\n        };\n\n        if (checkCanFocusTrap) {\n          checkCanFocusTrap(state.containers.concat()).then(\n            finishActivation,\n            finishActivation\n          );\n          return this;\n        }\n\n        finishActivation();\n      } catch (error) {\n        // If our activation throws an exception and the stack hasn't changed,\n        // we need to re-enable the prior trap's subtree isolation.\n        if (\n          preexistingTrap === activeFocusTraps.getActiveTrap(trapStack) &&\n          revertState\n        ) {\n          // [#1729] method MAY not exist if using `trapStack` option to share stack with older\n          //  versions of Focus-trap in the same DOM so use optional chaining here just in case\n          //  since this is a trap we may not have created from this instance of the library\n          preexistingTrap._setSubtreeIsolation?.(true);\n        }\n        throw error;\n      }\n      return this;\n    },\n\n    deactivate(deactivateOptions) {\n      if (!state.active) {\n        return this;\n      }\n\n      const options = {\n        onDeactivate: config.onDeactivate,\n        onPostDeactivate: config.onPostDeactivate,\n        checkCanReturnFocus: config.checkCanReturnFocus,\n        ...deactivateOptions,\n      };\n\n      clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n      state.delayInitialFocusTimer = undefined;\n\n      // Prior to removing this trap from the trapStack, we need to remove any applications of `inert`.\n      // This allows the next trap down to update its tabbable nodes properly.\n      //\n      // If this trap is not top of the stack, don't change any current isolation.\n      if (!state.paused) {\n        trap._setSubtreeIsolation(false);\n      }\n      state.alreadySilent.clear();\n      removeListeners();\n      state.active = false;\n      state.paused = false;\n      updateObservedNodes();\n\n      activeFocusTraps.deactivateTrap(trapStack, trap);\n\n      const onDeactivate = getOption(options, 'onDeactivate');\n      const onPostDeactivate = getOption(options, 'onPostDeactivate');\n      const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n      const returnFocus = getOption(\n        options,\n        'returnFocus',\n        'returnFocusOnDeactivate'\n      );\n\n      onDeactivate?.();\n\n      const finishDeactivation = () => {\n        delay(() => {\n          if (returnFocus) {\n            tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n          }\n          onPostDeactivate?.();\n        });\n      };\n\n      if (returnFocus && checkCanReturnFocus) {\n        checkCanReturnFocus(\n          getReturnFocusNode(state.nodeFocusedBeforeActivation)\n        ).then(finishDeactivation, finishDeactivation);\n        return this;\n      }\n\n      finishDeactivation();\n      return this;\n    },\n\n    pause(pauseOptions) {\n      if (!state.active) {\n        return this;\n      }\n\n      state.manuallyPaused = true;\n\n      return this._setPausedState(true, pauseOptions);\n    },\n\n    unpause(unpauseOptions) {\n      if (!state.active) {\n        return this;\n      }\n\n      state.manuallyPaused = false;\n\n      if (trapStack[trapStack.length - 1] !== this) {\n        return this;\n      }\n\n      return this._setPausedState(false, unpauseOptions);\n    },\n\n    updateContainerElements(containerElements) {\n      const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n      state.containers = elementsAsArray.map((element) =>\n        typeof element === 'string' ? doc.querySelector(element) : element\n      );\n\n      if (config.isolateSubtrees) {\n        collectAdjacentElements(state.containers);\n      }\n\n      if (state.active) {\n        updateTabbableNodes();\n\n        if (config.isolateSubtrees && !state.paused) {\n          trap._setSubtreeIsolation(true);\n        }\n      }\n\n      updateObservedNodes();\n\n      return this;\n    },\n  };\n\n  Object.defineProperties(trap, {\n    _isManuallyPaused: {\n      value() {\n        return state.manuallyPaused;\n      },\n    },\n    _setPausedState: {\n      value(paused, options) {\n        if (state.paused === paused) {\n          return this;\n        }\n\n        state.paused = paused;\n\n        if (paused) {\n          const onPause = getOption(options, 'onPause');\n          const onPostPause = getOption(options, 'onPostPause');\n          onPause?.();\n\n          removeListeners();\n          updateObservedNodes();\n          trap._setSubtreeIsolation(false);\n\n          onPostPause?.();\n        } else {\n          const onUnpause = getOption(options, 'onUnpause');\n          const onPostUnpause = getOption(options, 'onPostUnpause');\n\n          onUnpause?.();\n\n          trap._setSubtreeIsolation(true);\n          updateTabbableNodes();\n          addListeners();\n          updateObservedNodes();\n\n          onPostUnpause?.();\n        }\n\n        return this;\n      },\n    },\n    _setSubtreeIsolation: {\n      value(isEnabled) {\n        if (config.isolateSubtrees) {\n          state.adjacentElements.forEach((el) => {\n            if (isEnabled) {\n              switch (config.isolateSubtrees) {\n                case 'aria-hidden':\n                  // check both attribute and property to ensure initial state is captured\n                  // correctly across different browsers and test environments (like JSDOM)\n                  if (\n                    el.ariaHidden === 'true' ||\n                    el.getAttribute('aria-hidden')?.toLowerCase() === 'true'\n                  ) {\n                    state.alreadySilent.add(el);\n                  }\n\n                  el.setAttribute('aria-hidden', 'true');\n                  break;\n\n                default:\n                  // check both attribute and property to ensure initial state is captured\n                  // correctly across different browsers and test environments (like JSDOM)\n                  if (el.inert || el.hasAttribute('inert')) {\n                    state.alreadySilent.add(el);\n                  }\n                  el.setAttribute('inert', true);\n                  break;\n              }\n            } else {\n              if (state.alreadySilent.has(el)) {\n                // do nothing\n              } else {\n                switch (config.isolateSubtrees) {\n                  case 'aria-hidden':\n                    el.removeAttribute('aria-hidden');\n                    break;\n\n                  default:\n                    el.removeAttribute('inert');\n                    break;\n                }\n              }\n            }\n          });\n        }\n      },\n    },\n  });\n\n  // initialize container elements\n  trap.updateContainerElements(elements);\n\n  return trap;\n};\n\nexport { createFocusTrap };\n","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { createFocusTrap as CreateFocusTrap } from 'focus-trap';\nimport type { Options as FocusTrapOptions } from 'focus-trap';\n\nlet cap: ReturnType<typeof capabilities>;\ntry {\n  cap = capabilities('3.22');\n} catch {\n  // @ts-expect-error we support older versions of Ember\n  cap = capabilities('3.13');\n}\n\ninterface FocusTrapState {\n  focusTrapOptions: FocusTrapOptions;\n  isActive: boolean;\n  isPaused: boolean;\n  shouldSelfFocus: boolean;\n  focusTrap?: ReturnType<typeof CreateFocusTrap>;\n}\n\ninterface FocusTrapModifierArgs {\n  isActive?: boolean;\n  isPaused?: boolean;\n  shouldSelfFocus?: boolean;\n  focusTrapOptions?: FocusTrapOptions;\n  additionalElements?: HTMLElement[];\n  /**\n   * Optional custom function to create a focus trap.\n   */\n  _createFocusTrap?: typeof CreateFocusTrap;\n}\n\nfunction focusTrapModifier() {\n  return {};\n}\n\nsetModifierManager(() => {\n  return {\n    capabilities: cap,\n\n    createModifier(): FocusTrapState {\n      return {\n        focusTrapOptions: {},\n        isActive: true,\n        isPaused: false,\n        shouldSelfFocus: false,\n        focusTrap: undefined,\n      };\n    },\n\n    installModifier(\n      state: FocusTrapState,\n      element: HTMLElement,\n      { named }: { named: FocusTrapModifierArgs },\n    ): void {\n      const {\n        isActive,\n        isPaused,\n        shouldSelfFocus,\n        focusTrapOptions,\n        additionalElements,\n        _createFocusTrap,\n      } = named;\n\n      // Create a shallow copy of the options.\n      state.focusTrapOptions = { ...focusTrapOptions };\n      if (typeof isActive !== 'undefined') {\n        state.isActive = isActive;\n      }\n      if (typeof isPaused !== 'undefined') {\n        state.isPaused = isPaused;\n      }\n      if (\n        state.focusTrapOptions &&\n        typeof state.focusTrapOptions.initialFocus === 'undefined' &&\n        shouldSelfFocus\n      ) {\n        state.focusTrapOptions.initialFocus = element;\n      }\n\n      // Allow a custom focus trap creation function (e.g., for testing).\n      let createFocusTrap = CreateFocusTrap;\n      if (_createFocusTrap) {\n        createFocusTrap = _createFocusTrap;\n      }\n\n      // Ensure returnFocusOnDeactivate is true unless explicitly set to false.\n      if (state.focusTrapOptions.returnFocusOnDeactivate !== false) {\n        state.focusTrapOptions.returnFocusOnDeactivate = true;\n      }\n\n      state.focusTrap = createFocusTrap(\n        typeof additionalElements !== 'undefined'\n          ? [element, ...additionalElements]\n          : element,\n        state.focusTrapOptions,\n      );\n\n      if (state.isActive) {\n        state.focusTrap.activate();\n      }\n      if (state.isPaused) {\n        state.focusTrap.pause();\n      }\n    },\n\n    updateModifier(\n      state: FocusTrapState,\n      { named: params }: { named: FocusTrapModifierArgs },\n    ): void {\n      const focusTrapOptions: FocusTrapOptions = params.focusTrapOptions || {};\n\n      if (state.isActive && !params.isActive) {\n        const { returnFocusOnDeactivate } = focusTrapOptions;\n        const returnFocus =\n          typeof returnFocusOnDeactivate === 'undefined' ? true : false;\n        state.focusTrap?.deactivate({ returnFocus });\n      } else if (!state.isActive && params.isActive) {\n        state.focusTrap?.activate();\n      }\n\n      if (state.isPaused && !params.isPaused) {\n        state.focusTrap?.unpause();\n      } else if (!state.isPaused && params.isPaused) {\n        state.focusTrap?.pause();\n      }\n\n      // Update state with new options.\n      state.focusTrapOptions = focusTrapOptions;\n      if (typeof params.isActive !== 'undefined') {\n        state.isActive = params.isActive;\n      }\n      if (typeof params.isPaused !== 'undefined') {\n        state.isPaused = params.isPaused;\n      }\n    },\n\n    destroyModifier(state: FocusTrapState): void {\n      if (state.focusTrap) {\n        state.focusTrap.deactivate();\n      }\n    },\n  };\n}, focusTrapModifier);\n\nexport default focusTrapModifier;\n","/**\n * @function getTask\n * @param obj\n * @param taskOrName\n * @param taskName\n */\nfunction getTask(obj, taskOrName, taskName) {\n  let type = typeof taskOrName;\n  let task;\n  if (type === 'function') {\n    task = taskOrName;\n  } else if (type === 'string') {\n    task = obj[taskOrName];\n    if (typeof task !== 'function') {\n      throw new TypeError(`The method name '${taskOrName}' passed to ${taskName} does not resolve to a valid function.`);\n    }\n  } else {\n    throw new TypeError(`You must pass a task function or method name to '${taskName}'.`);\n  }\n  return task;\n}\n\nexport { getTask as default };\n","import { cancel } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\n\nconst NULL_TIMER_ID = -1;\n/**\n * A map of instances/timers that allows us to\n * store cancelIds for scheduled timers per instance.\n *\n * @private\n */\nlet registeredTimers = new WeakMap();\n/**\n * Test use only. Allows for swapping out the WeakMap to a Map, giving\n * us the ability to detect whether the timers set is empty.\n *\n * @private\n * @param {*} mapForTesting A map used to ensure correctness when testing.\n */\nfunction _setRegisteredTimers(mapForTesting) {\n  registeredTimers = mapForTesting;\n}\nfunction getTimersDisposable(destroyable, timers) {\n  return function () {\n    timers.forEach(cancelId => {\n      cancelTask(destroyable, cancelId);\n    });\n    timers.clear();\n  };\n}\nfunction getTimers(destroyable) {\n  let timers = registeredTimers.get(destroyable);\n  if (!timers) {\n    timers = new Set();\n    registeredTimers.set(destroyable, timers);\n    registerDestructor(destroyable, getTimersDisposable(destroyable, timers));\n  }\n  return timers;\n}\n/**\n * Cancel a previously scheduled task.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { runTask, cancelTask } from 'ember-lifeline';\n *\n * export default CancelableComponent extends Component {\n *   start() {\n *     this._cancelId = runTask(this, () => {\n *       console.log('This runs after 5 seconds if this component is still displayed');\n *     }, 5000)\n *   },\n *\n *   disable() {\n *     cancelTask(this, this._cancelId);\n *   },\n * }\n * ```\n *\n * @function cancelTask\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { Number } cancelId the id returned from the *Task call\n * @public\n */\nfunction cancelTask(destroyable, cancelId) {\n  let timers = getTimers(destroyable);\n  timers.delete(cancelId);\n  cancel(cancelId);\n}\n\nexport { NULL_TIMER_ID, _setRegisteredTimers, cancelTask, getTimers, getTimersDisposable };\n","import { later } from '@ember/runloop';\nimport { isDestroying } from '@ember/destroyable';\nimport getTask from './utils/get-task.js';\nimport { NULL_TIMER_ID, getTimers } from './cancel-task.js';\n\n/**\n * Registers and runs the provided task function for the provided object at the specified\n * timeout (defaulting to 0). The timer is properly canceled if the object is destroyed\n * before it is invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { runTask } from 'ember-lifeline';\n *\n * export default RunComponent extends Component {\n *   start() {\n *     runTask(this, () => {\n *       console.log('This runs after 5 seconds if this component is still displayed');\n *     }, 5000)\n *   },\n * });\n * ```\n *\n * @function runTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { Function | String } taskOrName a function representing the task, or string\n *                                         specifying a property representing the task,\n *                                         which is run at the provided time specified\n *                                         by timeout\n * @param { Number } [timeout=0] the time in the future to run the task\n * @public\n */\nfunction runTask(destroyable, taskOrName, timeout = 0) {\n  if (isDestroying(destroyable)) {\n    return NULL_TIMER_ID;\n  }\n  let task = getTask(destroyable, taskOrName, 'runTask');\n  let timers = getTimers(destroyable);\n  let cancelId = later(() => {\n    timers.delete(cancelId);\n    task.call(destroyable);\n  }, timeout);\n  timers.add(cancelId);\n  return cancelId;\n}\n\nexport { runTask };\n","import { assert } from '@ember/debug';\nimport { schedule } from '@ember/runloop';\nimport { isDestroying } from '@ember/destroyable';\nimport { NULL_TIMER_ID, getTimers } from './cancel-task.js';\nimport getTask from './utils/get-task.js';\n\n/**\n * Adds the provided function to the named queue for the provided object. The timer is\n * properly canceled if the object is destroyed before it is invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { scheduleTask } from 'ember-lifeline';\n *\n * export default ScheduledComponent extends Component {\n *   start() {\n *     scheduleTask(this, 'actions', () => {\n *       console.log('This runs at the end of the run loop (via the actions queue) if this component is still displayed');\n *     })\n *   },\n * });\n * ```\n *\n * @function scheduleTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } queueName the queue to schedule the task into\n * @param { Function | String } taskOrName a function representing the task, or string\n *                                         specifying a property representing the task,\n *                                         which is run at the provided time specified\n *                                         by timeout\n * @param { ...* } args arguments to pass to the task\n * @public\n */\nfunction scheduleTask(destroyable, queueName, taskOrName, ...args) {\n  assert(`Called \\`scheduleTask\\` without a string as the first argument on ${destroyable}.`, typeof queueName === 'string');\n  assert(`Called \\`scheduleTask\\` while trying to schedule to the \\`afterRender\\` queue on ${destroyable}.`, queueName !== 'afterRender');\n  if (isDestroying(destroyable)) {\n    return NULL_TIMER_ID;\n  }\n  let task = getTask(destroyable, taskOrName, 'scheduleTask');\n  let timers = getTimers(destroyable);\n  let cancelId;\n  let taskWrapper = (...taskArgs) => {\n    timers.delete(cancelId);\n    task.call(destroyable, ...taskArgs);\n  };\n  cancelId = schedule(queueName, destroyable, taskWrapper, ...args);\n  timers.add(cancelId);\n  return cancelId;\n}\n\nexport { scheduleTask };\n","import getTask from './utils/get-task.js';\nimport { registerDestructor } from '@ember/destroyable';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nfunction indexable(input) {\n  return input;\n}\n/**\n * A map of instances/poller functions that allows us to\n * store poller tokens per instance.\n *\n * @private\n *\n */\nlet registeredPollers = new WeakMap();\n/**\n * Test use only. Allows for swapping out the WeakMap to a Map, giving\n * us the ability to detect whether the pollers set is empty.\n *\n * @private\n * @param {*} mapForTesting A map used to ensure correctness when testing.\n */\nfunction _setRegisteredPollers(mapForTesting) {\n  registeredPollers = mapForTesting;\n}\nlet token = 0;\nlet _shouldPollOverride;\nfunction shouldPoll() {\n  if (_shouldPollOverride) {\n    return _shouldPollOverride();\n  }\n  return macroCondition(isTesting()) ? false : true;\n}\n/**\n * Allows for overriding of the polling behavior to explicitly control\n * whether polling should occur or not.\n *\n * @param { Function } callback\n * @public\n */\nfunction setShouldPoll(callback) {\n  _shouldPollOverride = callback;\n}\nfunction getQueuedPollTasks() {\n  let symbol = Symbol.for('LIFELINE_QUEUED_POLL_TASKS');\n  let globalObj = getGlobal();\n  let queuedPollTasks = globalObj[symbol];\n  if (!queuedPollTasks) {\n    queuedPollTasks = globalObj[symbol] = new Map();\n  }\n  return queuedPollTasks;\n}\n/**\n * Sets up a function that can perform polling logic in a testing safe way.\n * The task is invoked synchronously with an argument (generally called `next`).\n * In normal development/production when `next` is invoked, it will trigger the\n * task again (recursively). However, when in test mode the recursive polling\n * functionality is disabled, and usage of the `pollTaskFor` helper is required.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { pollTask, runTask } from 'ember-lifeline';\n *\n * export default PollingComponent extends Component {\n *   api: injectService(),\n *\n *   init() {\n *     this._super(...arguments);\n *\n *     let token = pollTask(this, (next) => {\n *       this.get('api').request('get', 'some/path')\n *         .then(() => {\n *           runTask(this, next, 1800);\n *         })\n *     });\n *\n *     this._pollToken = token;\n *   },\n * });\n * ```\n *\n * Test Example:\n *\n * ```js\n * import { settled } from '@ember/test-helpers';\n * import { pollTaskFor } from 'ember-lifeline';\n *\n *\n * test('foo-bar watches things', async function(assert) {\n *   await render(hbs`{{foo-bar}}`);\n *\n *   assert.strictEqual(serverRequests, 1, 'called initially');\n *\n *   pollTaskFor(this._pollToken);\n *\n *   await settled();\n *\n *   assert.strictEqual(serverRequests, 2, 'called again');\n *\n *   await settled();\n * });\n * ```\n *\n * @method pollTask\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { TaskOrName } taskOrName a function representing the task, or string\n *                                  specifying a property representing the task,\n *                                  which is run at the provided time specified\n *                                  by timeout\n * @param { Token } token the Token for the pollTask, either a string or number\n * @public\n */\nfunction pollTask(destroyable, taskOrName, token = getNextToken()) {\n  let next;\n  let task = getTask(destroyable, taskOrName, 'pollTask');\n  let tick = () => task.call(destroyable, next);\n  let pollers = registeredPollers.get(destroyable);\n  if (!pollers) {\n    pollers = new Set();\n    registeredPollers.set(destroyable, pollers);\n    registerDestructor(destroyable, getPollersDisposable(destroyable, pollers));\n  }\n  pollers.add(token);\n  if (shouldPoll()) {\n    next = tick;\n  } else {\n    next = () => {\n      getQueuedPollTasks().set(token, tick);\n    };\n  }\n  task.call(destroyable, next);\n  return token;\n}\n/**\n * Clears a previously setup polling task.\n *\n * NOTE: This does not cancel any nested `runTask` calls. You're required to cancel any\n * cancelable behaviors, including any calls to `runTask` using `cancelTask`.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { inject as service } from '@ember/service';\n * import { pollTask, runTask } from 'ember-lifeline';\n *\n * export default AutoRefreshComponent extends Component {\n *   @service api;\n *\n *   enableAutoRefresh() {\n *     this._pollToken = pollTask(this, (next) => {\n *       this.get('api').request('get', 'some/path')\n *         .then(() => {\n *           runTask(this, next, 1800);\n *         })\n *     });\n *   },\n *\n *   disableAutoRefresh() {\n *     cancelPoll(this, this._pollToken);\n *   },\n * }\n * ```\n *\n * @method cancelPoll\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { Token } token the Token for the pollTask to be cleared, either a string or number\n * @public\n */\nfunction cancelPoll(destroyable, token) {\n  let pollToken;\n  let pollers = registeredPollers.get(destroyable);\n  pollToken = token;\n  if (pollers !== undefined) {\n    pollers.delete(pollToken);\n  }\n  getQueuedPollTasks().delete(pollToken);\n}\nfunction getGlobal() {\n  // eslint-disable-next-line n/no-unsupported-features/es-builtins\n  if (typeof globalThis !== 'undefined') return indexable(globalThis);\n  if (typeof self !== 'undefined') return indexable(self);\n  if (typeof window !== 'undefined') return indexable(window);\n  if (typeof global !== 'undefined') return indexable(global);\n  throw new Error('unable to locate global object');\n}\nfunction getPollersDisposable(destroyable, pollers) {\n  return function () {\n    pollers.forEach(token => {\n      cancelPoll(destroyable, token);\n    });\n  };\n}\nfunction getNextToken() {\n  return token++;\n}\n\nexport { _setRegisteredPollers, cancelPoll, getQueuedPollTasks, pollTask, setShouldPoll };\n","import { assert } from '@ember/debug';\nimport { debounce, cancel } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\n\n/**\n * A map of instances/debounce functions that allows us to\n * store pending debounces per instance.\n *\n * @private\n */\nconst registeredDebounces = new WeakMap();\n/**\n * Runs the function with the provided name after the timeout has expired on the last\n * invocation. The timer is properly canceled if the object is destroyed before it is\n * invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { debounceTask } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n *   logMe() {\n *     console.log('This will only run once every 300ms.');\n *   },\n *\n *   click() {\n *     debounceTask(this, 'logMe', 300);\n *   },\n * }\n * ```\n *\n * @function debounceTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } name the name of the task to debounce\n * @param { ...* } debounceArgs arguments to pass to the debounced method\n * @param { Number } spacing the amount of time to wait before calling the method (in milliseconds)\n * @param { Boolean } [immediate] Trigger the function on the leading instead of the trailing edge of the wait interval. Defaults to false.\n * @public\n */\nfunction debounceTask(destroyable, name, ...debounceArgs) {\n  assert(`Called \\`debounceTask\\` without a string as the first argument on ${destroyable}.`, typeof name === 'string');\n  assert(`Called \\`destroyable.debounceTask('${name}', ...)\\` where 'destroyable.${name}' is not a function.`, typeof destroyable[name] === 'function');\n  if (destroyable.isDestroying) {\n    return;\n  }\n  const lastArgument = debounceArgs[debounceArgs.length - 1];\n  const spacing = typeof lastArgument === 'boolean' ? debounceArgs[debounceArgs.length - 2] : lastArgument;\n  assert(`Called \\`debounceTask\\` with incorrect \\`spacing\\` argument. Expected Number and received \\`${spacing}\\``, typeof spacing === 'number');\n  let pendingDebounces = registeredDebounces.get(destroyable);\n  if (!pendingDebounces) {\n    pendingDebounces = new Map();\n    registeredDebounces.set(destroyable, pendingDebounces);\n    registerDestructor(destroyable, getDebouncesDisposable(pendingDebounces));\n  }\n  let debouncedTask;\n  if (!pendingDebounces.has(name)) {\n    debouncedTask = (...args) => {\n      pendingDebounces.delete(name);\n      destroyable[name](...args);\n    };\n  } else {\n    debouncedTask = pendingDebounces.get(name).debouncedTask;\n  }\n  // cancelId is new, even if the debounced function was already present\n  let cancelId = debounce(destroyable, debouncedTask, ...debounceArgs);\n  pendingDebounces.set(name, {\n    debouncedTask,\n    cancelId\n  });\n}\n/**\n * Cancel a previously debounced task.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { debounceTask, cancelDebounce } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n *   logMe() {\n *     console.log('This will only run once every 300ms.');\n *   },\n *\n *   click() {\n *     debounceTask(this, 'logMe', 300);\n *   },\n *\n *   disable() {\n *      cancelDebounce(this, 'logMe');\n *   },\n * }\n * ```\n *\n * @function cancelDebounce\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } methodName the name of the debounced method to cancel\n * @public\n */\nfunction cancelDebounce(destroyable, methodName) {\n  if (!registeredDebounces.has(destroyable)) {\n    return;\n  }\n  const pendingDebounces = registeredDebounces.get(destroyable);\n  if (!pendingDebounces.has(methodName)) {\n    return;\n  }\n  const {\n    cancelId\n  } = pendingDebounces.get(methodName);\n  pendingDebounces.delete(methodName);\n  cancel(cancelId);\n}\nfunction getDebouncesDisposable(debounces) {\n  return function () {\n    if (debounces.size === 0) {\n      return;\n    }\n    debounces.forEach(p => cancel(p.cancelId));\n  };\n}\n\nexport { cancelDebounce, debounceTask };\n","import { capabilities } from '@ember/modifier';\nimport { destroy } from '@ember/destroyable';\nimport type Owner from '@ember/owner';\n\nimport type ClassBasedModifier from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\ninterface State<S> {\n  instance: ClassBasedModifier<S>;\n}\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>,\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class ClassBasedModifierManager<S> {\n  capabilities = capabilities('3.22');\n\n  constructor(private owner: Owner) {}\n\n  createModifier(\n    modifierClass: typeof ClassBasedModifier,\n    args: ArgsFor<S>,\n  ): CreatedState<S> {\n    const instance = new modifierClass(this.owner, args);\n    return { instance, element: null };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>,\n  ): void {\n    const state = installElement(createdState, element);\n    state.instance.modify(element, args.positional, args.named);\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    state.instance.modify(state.element, args.positional, args.named);\n  }\n\n  destroyModifier({ instance }: InstalledState<S>): void {\n    destroy(instance);\n  }\n}\n","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport type Owner from '@ember/owner';\nimport Manager from './modifier-manager.ts';\nimport type {\n  ElementFor,\n  ArgsFor,\n  DefaultSignature,\n  PositionalArgs,\n  NamedArgs,\n} from '../signature';\nimport type Opaque from '../opaque';\n\n// Preserve the signature on a class-based modifier, so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport default interface ClassBasedModifier<S = DefaultSignature>\n  extends Opaque<S> {}\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n *    convenience reasons, and don't want to teardown the state of your modifier\n *    every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport default class ClassBasedModifier<S = DefaultSignature> {\n  // `args` is passed here for the sake of subclasses to have access to args in\n  // their constructors while having constructors which are properly asssignable\n  // for the superclass.\n  /**\n   *\n   * @param owner An instance of an Owner (for service injection etc.).\n   * @param args The positional and named arguments passed to the modifier.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  constructor(owner: Owner, args: ArgsFor<S>) {\n    setOwner(this, owner);\n  }\n\n  /**\n   * Called when the modifier is installed and any time any tracked state used\n   * in the modifier changes.\n   *\n   * If you need to do first-time-only setup, create a class field representing\n   * the initialization state and check it when running the hook. That is also\n   * where and when you should use `registerDestructor` for any teardown you\n   * need to do. For example:\n   *\n   * ```js\n   * function disconnect(instance) {\n   *  instance.observer?.disconnect();\n   * }\n   *\n   * class IntersectionObserver extends Modifier {\n   *   observer;\n   *\n   *   constructor(owner, args) {\n   *     super(owner, args);\n   *     registerDestructor(this, disconnect);\n   *   }\n   *\n   *   modify(element, callback, options) {\n   *     disconnect(this);\n   *\n   *     this.observer = new IntersectionObserver(callback, options);\n   *     this.observer.observe(element);\n   *   }\n   * }\n   * ```\n   *\n   * @param element The element to which the modifier is applied.\n   * @param positional The positional arguments to the modifier.\n   * @param named The named arguments to the modifier.\n   */\n  modify(\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): void {\n    /* no op, for subclassing */\n  }\n}\n\nsetModifierManager((owner) => new Manager(owner), ClassBasedModifier);\n","import { setModifierManager } from '@ember/modifier';\nimport type {\n  ElementFor,\n  EmptyObject,\n  NamedArgs,\n  PositionalArgs,\n} from '../signature';\nimport type Modifier from '../class-based/modifier';\nimport FunctionBasedModifierManager from './modifier-manager.ts';\n\n// Provide a singleton manager.\nconst MANAGER = new FunctionBasedModifierManager();\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier<S>`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\nexport declare abstract class FunctionBasedModifierInstance<\n  S,\n> extends Modifier<S> {\n  protected abstract __concrete__: never;\n}\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\nexport type FunctionBasedModifier<S> =\n  abstract new () => FunctionBasedModifierInstance<S>;\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\nexport type Teardown = () => unknown;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\nexport default function modifier<\n  E extends Element,\n  P extends unknown[],\n  N = EmptyObject,\n>(\n  fn: (element: E, positional: P, named: N) => void | Teardown,\n): FunctionBasedModifier<{\n  Args: {\n    Positional: P;\n    Named: N;\n  };\n  Element: E;\n}>;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier<Sig>((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\nexport default function modifier<S>(\n  fn: (\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>,\n  ) => void | Teardown,\n): FunctionBasedModifier<{\n  Element: ElementFor<S>;\n  Args: {\n    Named: NamedArgs<S>;\n    Positional: PositionalArgs<S>;\n  };\n}>;\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(\n  fn: (\n    element: Element,\n    positional: unknown[],\n    named: object,\n  ) => void | Teardown,\n  options?: {\n    name: string;\n  },\n): FunctionBasedModifier<{\n  Element: Element;\n  Args: {\n    Named: object;\n    Positional: unknown[];\n  };\n}> {\n  fn.toString = () => options?.name || fn.name;\n  // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n  // type of `setModifierManager` today is `void`; we pretend it actually\n  // returns an opaque `Modifier` type so that we can provide a result from this\n  // type which is useful to TS-aware tooling (e.g. Glint).\n  return setModifierManager(\n    () => MANAGER,\n    fn,\n  ) as unknown as FunctionBasedModifier<{\n    Element: Element;\n    Args: {\n      Named: object;\n      Positional: unknown[];\n    };\n  }>;\n}\n\n/**\n * @internal\n */\nexport type FunctionBasedModifierDefinition<S> = (\n  element: ElementFor<S>,\n  positional: PositionalArgs<S>,\n  named: NamedArgs<S>,\n) => void | Teardown;\n","import { capabilities } from '@ember/modifier';\nimport type { FunctionBasedModifierDefinition, Teardown } from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\ninterface State<S> {\n  instance: FunctionBasedModifierDefinition<S>;\n}\n\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n  teardown?: Teardown;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>,\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class FunctionBasedModifierManager<S> {\n  capabilities = capabilities('3.22');\n\n  createModifier(\n    instance: FunctionBasedModifierDefinition<S>,\n  ): CreatedState<S> {\n    return { element: null, instance };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>,\n  ): void {\n    const state = installElement(createdState, element);\n\n    const { positional, named } = args;\n    const teardown = createdState.instance(element, positional, named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n\n    const teardown = state.instance(state.element, args.positional, args.named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  destroyModifier(state: InstalledState<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n  }\n\n  getDebugName(state: InstalledState<S>): string {\n    return state.instance.toString();\n  }\n\n  getDebugInstance(state: InstalledState<S>): InstalledState<S> {\n    return state;\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Helper from '@ember/component/helper';\nimport { guidFor } from '@ember/object/internals';\n\nimport type Owner from '@ember/owner';\nimport type PageTitleService from '../services/page-title.ts';\nimport type { PageTitleToken } from '../private-types.ts';\n\nexport type PageTitleHelperOptions = Pick<\n  PageTitleToken,\n  'prepend' | 'front' | 'replace' | 'separator'\n>;\n\ninterface Signature {\n  Args: {\n    Positional: string[];\n    Named: PageTitleHelperOptions;\n  };\n  Return: void;\n}\n\n/**\n * `{{pageTitle}}` helper used to set the title of the current route context.\n *\n * ```gjs\n * import { pageTitle } from 'ember-page-title';\n *\n * <template>\n *   {{pageTitle \"the text to set the tab's title to\"}}\n *   {{pageTitle \\@model.post.title}}\n * </template>\n * ```\n */\nexport default class PageTitle extends Helper<Signature> {\n  @service('page-title') declare tokens: PageTitleService;\n\n  tokenId = guidFor(this);\n\n  constructor(owner: Owner) {\n    super(owner);\n    this.tokens.push({ id: this.tokenId });\n  }\n\n  compute(params: string[], userOptions: PageTitleHelperOptions) {\n    const options = {\n      ...userOptions,\n      id: this.tokenId,\n      title: params.join(''),\n    };\n\n    this.tokens.push(options);\n    this.tokens.scheduleTitleUpdate();\n    // We must return an empty value here because otherwise\n    // invoking the pageTitle helper will render something\n    // in the component it's used in, and we don't want that.\n    //\n    // pageTitle is a side-effecting helper.\n    // We *synchronize* the document.title with our internal state.\n    return '';\n  }\n\n  willDestroy() {\n    super.willDestroy();\n    this.tokens.remove(this.tokenId);\n    this.tokens.scheduleTitleUpdate();\n  }\n}\n","import { scheduleOnce } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport type ApplicationInstance from '@ember/application/instance';\nimport type RouterService from '@ember/routing/router-service';\nimport type Owner from '@ember/owner';\n\nimport type {\n  FastBootDocument,\n  PageTitleToken,\n  PageTitleConfig,\n} from '../private-types.ts';\n\nconst isFastBoot = typeof FastBoot !== 'undefined';\n\nconst RouterEvent = {\n  ROUTE_DID_CHANGE: 'routeDidChange',\n} as const;\n\nfunction hasResolveRegistration(owner: Owner): owner is ApplicationInstance {\n  return `resolveRegistration` in owner;\n}\n\nfunction hasPageTitleConfig(\n  fromEnv: unknown,\n): fromEnv is { pageTitle: PageTitleConfig } {\n  if (typeof fromEnv !== 'object') return false;\n  if (fromEnv === null) return false;\n\n  // all properties on the pageTitle config are optional,\n  // so we can't check for more\n  return 'pageTitle' in fromEnv;\n}\n\nconst configKeys = ['separator', 'prepend', 'replace'] as const;\n\n/**\n  @class page-title\n  @extends Ember.Service\n */\nexport default class PageTitleService extends Service {\n  @service('router') declare router: RouterService;\n\n  // in fastboot context \"document\" is instance of\n  // ember-fastboot/simple-dom document\n  @service('-document') private declare document: FastBootDocument;\n\n  tokens: PageTitleToken[] = [];\n\n  _defaultConfig: PageTitleConfig = {\n    // The default separator to use between tokens.\n    separator: ' | ',\n\n    // The default prepend value to use.\n    prepend: true,\n\n    // The default replace value to use.\n    replace: null,\n  };\n\n  constructor(owner: Owner) {\n    super(owner);\n    this._validateExistingTitleElement();\n\n    if (hasResolveRegistration(owner)) {\n      const config = owner.resolveRegistration('config:environment');\n\n      if (hasPageTitleConfig(config)) {\n        configKeys.forEach((key) => {\n          if (!isEmpty(config.pageTitle[key])) {\n            const configValue = config.pageTitle[key];\n\n            // SAFETY: how is one supposed to iterate over keys for an object and have it\n            //         known to the compiler that both objects, having the same shape,\n            //         will have the same type per-value?\n            //         as-is, the `configValue` is a union of all value-types from the object.\n            (this._defaultConfig[key] as PageTitleConfig[typeof key]) =\n              configValue;\n          }\n        });\n      }\n    }\n    this.router.on(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n  }\n\n  applyTokenDefaults(token: PageTitleToken) {\n    const defaultSeparator = this._defaultConfig.separator;\n    const defaultPrepend = this._defaultConfig.prepend;\n    const defaultReplace = this._defaultConfig.replace;\n\n    token.previous ??= null;\n    token.next ??= null;\n\n    if (token.separator == null) {\n      token.separator = defaultSeparator;\n    }\n\n    if (token.prepend == null && defaultPrepend != null) {\n      token.prepend = defaultPrepend;\n    }\n\n    if (token.replace == null && defaultReplace != null) {\n      token.replace = defaultReplace;\n    }\n  }\n\n  inheritFromPrevious(token: PageTitleToken) {\n    const previous = token.previous;\n    if (previous) {\n      if (token.separator == null) {\n        token.separator = previous.separator;\n      }\n\n      if (token.prepend == null) {\n        token.prepend = previous.prepend;\n      }\n    }\n  }\n\n  push(token: PageTitleToken) {\n    const tokenForId = this._findTokenById(token.id);\n    if (tokenForId) {\n      const index = this.tokens.indexOf(tokenForId);\n      const tokens = [...this.tokens];\n      const previous = tokenForId.previous;\n      token.previous = previous;\n      token.next = tokenForId.next;\n      this.inheritFromPrevious(token);\n      this.applyTokenDefaults(token);\n\n      tokens.splice(index, 1, token);\n      this.tokens = tokens;\n      return;\n    }\n\n    const previous = this.tokens.slice(-1)[0];\n    if (previous) {\n      token.previous = previous ?? null;\n      previous.next = token;\n      this.inheritFromPrevious(token);\n    }\n\n    this.applyTokenDefaults(token);\n    this.tokens = [...this.tokens, token];\n  }\n\n  remove(id: PageTitleToken['id']) {\n    const token = this._findTokenById(id);\n\n    if (!token) return;\n\n    const { next, previous } = token;\n    if (next) {\n      next.previous = previous;\n    }\n\n    if (previous) {\n      previous.next = next;\n    }\n\n    token.previous = token.next = null;\n\n    const tokens = [...this.tokens];\n    tokens.splice(tokens.indexOf(token), 1);\n    this.tokens = tokens;\n  }\n\n  get visibleTokens(): PageTitleToken[] {\n    const tokens = this.tokens;\n    let i = tokens ? tokens.length : 0;\n    const visible = [];\n    while (i--) {\n      const token = tokens[i];\n\n      if (!token) continue;\n\n      if (token.replace) {\n        visible.unshift(token);\n        break;\n      } else {\n        visible.unshift(token);\n      }\n    }\n    return visible;\n  }\n\n  get sortedTokens(): PageTitleToken[] {\n    const visible = this.visibleTokens;\n    if (!visible) return [];\n\n    let appending = true;\n    let group: PageTitleToken[] = [];\n    const groups = [group];\n    const frontGroups: PageTitleToken[] = [];\n\n    visible.forEach((token) => {\n      if (token.front) {\n        frontGroups.unshift(token);\n      } else if (token.prepend) {\n        if (appending) {\n          appending = false;\n          group = [];\n          groups.push(group);\n        }\n        const lastToken = group[0];\n        if (lastToken) {\n          token = { ...token };\n          token.separator = lastToken.separator;\n        }\n        group.unshift(token);\n      } else {\n        if (!appending) {\n          appending = true;\n          group = [];\n          groups.push(group);\n        }\n        group.push(token);\n      }\n    });\n\n    return frontGroups.concat(groups.reduce((E, group) => E.concat(group), []));\n  }\n\n  scheduleTitleUpdate = () => {\n    // eslint-disable-next-line ember/no-runloop\n    scheduleOnce('afterRender', this, this._updateTitle);\n  };\n\n  toString(): string {\n    const tokens = this.sortedTokens;\n    const title = [];\n\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      const token = tokens[i];\n      if (!token) continue;\n\n      if (token.title) {\n        title.push(token.title);\n        if (i + 1 < len) {\n          title.push(token.separator);\n        }\n      }\n    }\n\n    return title.join('');\n  }\n\n  willDestroy() {\n    super.willDestroy();\n    this.router.off(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n  }\n\n  private _updateTitle() {\n    const toBeTitle = this.toString();\n\n    if (isFastBoot) {\n      this.updateFastbootTitle(toBeTitle);\n    } else {\n      /**\n       * When rendering app with \"?fastboot=false\" (http://ember-fastboot.com/docs/user-guide#disabling-fastboot)\n       * We will not have <title> element present in DOM.\n       *\n       * But this is fine as by HTML spec,\n       * one is created upon assigning \"document.title\" value;\n       *\n       * https://html.spec.whatwg.org/multipage/dom.html#dom-tree-accessors\n       */\n      this.document.title = toBeTitle;\n    }\n\n    this.titleDidUpdate(toBeTitle);\n  }\n\n  /**\n   * Validate if there's more than one title element present.\n   *\n   * Example: ember-cli-head can cause conflicting updates.\n   * @private\n   */\n  private _validateExistingTitleElement() {\n    if (isFastBoot) {\n      return;\n    }\n    assert(\n      '[ember-page-title]: Multiple title elements found. Check for other addons like ember-cli-head updating <title> as well.',\n      document.head.querySelectorAll('title').length <= 1,\n    );\n  }\n\n  /**\n   * Find token by id\n   *\n   * @param {String} id\n   * @private\n   */\n  private _findTokenById(id: PageTitleToken['id']) {\n    return this.tokens.find((token) => token.id === id);\n  }\n\n  updateFastbootTitle(toBeTitle: string) {\n    if (!isFastBoot) {\n      return;\n    }\n    const headElement = this.document.head;\n    const headChildNodes = headElement.childNodes;\n\n    // Remove existing title elements from previous render cycle\n    for (let i = 0; i < headChildNodes.length; i++) {\n      const node = headChildNodes[i];\n      if (!node) continue;\n\n      if (node.nodeName.toLowerCase() === 'title') {\n        headElement.removeChild(node);\n      }\n    }\n\n    // Add title element with latest value\n    const titleEl = this.document.createElement('title');\n    const titleContents = this.document.createTextNode(toBeTitle);\n    titleEl.appendChild(titleContents);\n    headElement.appendChild(titleEl);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  titleDidUpdate(_title: string) {\n    // default is empty, meant to be overriden by user if desired\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { isEqual } from '@ember/utils';\nimport type { PowerSelectSignature, Select } from './power-select';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface PowerSelectMultipleSignature extends PowerSelectSignature {\n  // any extra property for multiple selects?\n}\n\nexport default class PowerSelectMultipleComponent extends Component<PowerSelectMultipleSignature> {\n  get computedTabIndex() {\n    if (this.args.triggerComponent === undefined && this.args.searchEnabled) {\n      return '-1';\n    } else {\n      return this.args.tabindex || '0';\n    }\n  }\n\n  // Actions\n  @action\n  handleOpen(select: Select, e: Event): false | void {\n    if (this.args.onOpen && this.args.onOpen(select, e) === false) {\n      return false;\n    }\n    this.focusInput(select);\n  }\n\n  @action\n  handleFocus(select: Select, e: FocusEvent): void {\n    if (this.args.onFocus) {\n      this.args.onFocus(select, e);\n    }\n    this.focusInput(select);\n  }\n\n  @action\n  handleKeydown(select: Select, e: KeyboardEvent): false | void {\n    if (this.args.onKeydown && this.args.onKeydown(select, e) === false) {\n      e.stopPropagation();\n      return false;\n    }\n    if (e.keyCode === 13 && select.isOpen) {\n      e.stopPropagation();\n      if (select.highlighted !== undefined) {\n        if (\n          !select.selected ||\n          select.selected.indexOf(select.highlighted) === -1\n        ) {\n          select.actions.choose(select.highlighted, e);\n          return false;\n        } else {\n          select.actions.close(e);\n          return false;\n        }\n      } else {\n        select.actions.close(e);\n        return false;\n      }\n    }\n  }\n\n  defaultBuildSelection(option: any, select: Select) {\n    const newSelection = Array.isArray(select.selected)\n      ? select.selected.slice(0)\n      : [];\n    let idx = -1;\n    for (let i = 0; i < newSelection.length; i++) {\n      if (isEqual(newSelection[i], option)) {\n        idx = i;\n        break;\n      }\n    }\n    if (idx > -1) {\n      newSelection.splice(idx, 1);\n    } else {\n      newSelection.push(option);\n    }\n    return newSelection;\n  }\n\n  focusInput(select: Select) {\n    if (select) {\n      const input = document.querySelector(\n        `#ember-power-select-trigger-multiple-input-${select.uniqueId}`,\n      ) as HTMLElement;\n      if (input) {\n        input.focus();\n      }\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { get } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { isBlank } from '@ember/utils';\nimport type { Select } from '../power-select';\n\ninterface PowerSelectMultipleInputSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    placeholder?: string;\n    searchField: string;\n    tabindex?: string;\n    listboxId?: string;\n    ariaLabel?: string;\n    ariaActiveDescendant?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    placeholderComponent?: string;\n    isDefaultPlaceholder?: boolean;\n    onInput?: (e: InputEvent) => boolean;\n    onKeydown?: (e: KeyboardEvent) => boolean;\n    onFocus: (e: FocusEvent) => void;\n    onBlur: (e: FocusEvent) => void;\n    buildSelection: (lastSelection: any, select: Select) => any[];\n  };\n}\n\nconst ua = window && window.navigator ? window.navigator.userAgent : '';\nconst isIE = ua.indexOf('MSIE ') > -1 || ua.indexOf('Trident/') > -1;\n\nexport default class PowerSelectMultipleInputComponent extends Component<PowerSelectMultipleInputSignature> {\n  get maybePlaceholder() {\n    if (isIE || !this.args.isDefaultPlaceholder) {\n      return undefined;\n    }\n    return !this.args.select.selected || this.args.select.selected.length === 0\n      ? this.args.placeholder || ''\n      : '';\n  }\n\n  @action\n  handleInput(event: Event): void {\n    const e = event as InputEvent;\n    if (this.args.onInput && this.args.onInput(e) === false) {\n      return;\n    }\n    this.args.select.actions.open(e);\n  }\n\n  @action\n  handleKeydown(event: Event): false | void {\n    const e = event as KeyboardEvent;\n    if (e.target === null) return;\n    if (this.args.onKeydown && this.args.onKeydown(e) === false) {\n      e.stopPropagation();\n      return false;\n    }\n    if (e.keyCode === 8) {\n      e.stopPropagation();\n      if (isBlank((e.target as HTMLInputElement).value)) {\n        const lastSelection =\n          this.args.select.selected &&\n          this.args.select.selected[this.args.select.selected.length - 1];\n        if (lastSelection) {\n          this.args.select.actions.select(\n            this.args.buildSelection(lastSelection, this.args.select),\n            e,\n          );\n          if (typeof lastSelection === 'string') {\n            this.args.select.actions.search(lastSelection);\n          } else {\n            assert(\n              '`<PowerSelectMultiple>` requires a `@searchField` when the options are not strings to remove options using backspace',\n              this.args.searchField,\n            );\n            this.args.select.actions.search(\n              get(lastSelection, this.args.searchField) || '',\n            );\n          }\n          this.args.select.actions.open(e);\n        }\n      }\n    } else if ((e.keyCode >= 48 && e.keyCode <= 90) || e.keyCode === 32) {\n      // Keys 0-9, a-z or SPACE\n      e.stopPropagation();\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { get } from '@ember/object';\nimport { scheduleTask } from 'ember-lifeline';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\nimport { modifier } from 'ember-modifier';\nimport { deprecate } from '@ember/debug';\n\ninterface PowerSelectMultipleTriggerSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    searchEnabled: boolean;\n    placeholder?: string;\n    searchField: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    listboxId?: string;\n    tabindex?: string;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    ariaActiveDescendant: string;\n    extra?: any;\n    placeholderComponent?: string | ComponentLike<any>;\n    selectedItemComponent?: string | ComponentLike<any>;\n    onInput?: (e: InputEvent) => boolean;\n    onKeydown?: (e: KeyboardEvent) => boolean;\n    onFocus?: (e: FocusEvent) => void;\n    onBlur?: (e: FocusEvent) => void;\n    buildSelection: (lastSelection: any, select: Select) => any[];\n  };\n  Blocks: {\n    default: [opt: any, select: Select];\n  };\n}\n\ninterface IndexAccesible<T> {\n  objectAt(index: number): T;\n}\nconst isIndexAccesible = <T>(target: any): target is IndexAccesible<T> => {\n  return typeof target.objectAt === 'function';\n};\n\nexport default class TriggerComponent extends Component<PowerSelectMultipleTriggerSignature> {\n  private _lastIsOpen: boolean = this.args.select.isOpen;\n\n  // Actions\n  @action\n  openChanged(element: Element, [isOpen]: [boolean]) {\n    deprecate(\n      'You are using a power-select-multiple trigger with ember/render-modifier. Replace {{did-update this.openChanged @select.isOpen}} with {{this.openChange @select.isOpen}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._openChanged(element, [isOpen]);\n  }\n\n  @action\n  chooseOption(e: Event) {\n    if (e.target === null) return;\n    const selectedIndex = (e.target as Element).getAttribute(\n      'data-selected-index',\n    );\n    if (selectedIndex) {\n      const numericIndex = parseInt(selectedIndex, 10);\n      e.stopPropagation();\n      e.preventDefault();\n      const object = this.selectedObject(\n        this.args.select.selected,\n        numericIndex,\n      );\n      this.args.select.actions.choose(object);\n    }\n  }\n\n  openChange = modifier((element: Element, [isOpen]: [boolean]) => {\n    this._openChanged(element, [isOpen]);\n  });\n\n  private _openChanged(_el: Element, [isOpen]: [boolean]) {\n    if (isOpen === false && this._lastIsOpen === true) {\n      scheduleTask(this, 'actions', () => {\n        this.args.select.actions?.search('');\n      });\n    }\n    this._lastIsOpen = isOpen;\n  }\n\n  selectedObject<T>(list: IndexAccesible<T> | T[], index: number): T {\n    if (isIndexAccesible(list)) {\n      return list.objectAt(index);\n    } else {\n      return get(list, index) as T;\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { scheduleTask } from 'ember-lifeline';\nimport { isEqual, isNone } from '@ember/utils';\nimport { assert, deprecate } from '@ember/debug';\nimport {\n  indexOfOption,\n  filterOptions,\n  findOptionWithOffset,\n  countOptions,\n  defaultHighlighted,\n  advanceSelectableOption,\n  defaultMatcher,\n  defaultTypeAheadMatcher,\n  pathForOption,\n  type MatcherFn,\n} from '../utils/group-utils.ts';\nimport { restartableTask, timeout } from 'ember-concurrency';\nimport { modifier } from 'ember-modifier';\nimport type {\n  Dropdown,\n  DropdownActions,\n  TRootEventType,\n} from 'ember-basic-dropdown/components/basic-dropdown';\nimport Owner from '@ember/application';\nimport type { CalculatePosition } from 'ember-basic-dropdown/utils/calculate-position';\nimport { isArray } from '@ember/array';\nimport type { ComponentLike } from '@glint/template';\n\ninterface SelectActions extends DropdownActions {\n  search: (term: string) => void;\n  highlight: (option: any) => void;\n  select: (selected: any, e?: Event) => void;\n  choose: (selected: any, e?: Event) => void;\n  scrollTo: (option: any) => void;\n  labelClick: (e: MouseEvent) => void;\n}\nexport interface Select extends Dropdown {\n  selected: any;\n  highlighted: any;\n  options: readonly any[];\n  results: readonly any[];\n  resultsCount: number;\n  loading: boolean;\n  isActive: boolean;\n  searchText: string;\n  lastSearchedText: string;\n  actions: SelectActions;\n}\ninterface PromiseProxy<T> extends Promise<T> {\n  content: any;\n}\ninterface CancellablePromise<T> extends Promise<T> {\n  cancel: () => void;\n}\ninterface Sliceable<T> {\n  slice(): T[];\n}\n// Some args are not listed here because they are only accessed from the template. Should I list them?\nexport interface PowerSelectArgs {\n  highlightOnHover?: boolean;\n  placeholderComponent?: string | ComponentLike<any>;\n  searchMessage?: string;\n  searchMessageComponent?: string | ComponentLike<any>;\n  noMatchesMessage?: string;\n  noMatchesMessageComponent?: string | ComponentLike<any>;\n  matchTriggerWidth?: boolean;\n  resultCountMessage?: (resultCount: number) => string;\n  options?: readonly any[] | Promise<readonly any[]>;\n  selected?: any | PromiseProxy<any>;\n  destination?: string;\n  destinationElement?: HTMLElement;\n  closeOnSelect?: boolean;\n  renderInPlace?: boolean;\n  preventScroll?: boolean;\n  defaultHighlighted?: any;\n  searchField?: string;\n  labelClass?: string;\n  labelText?: string;\n  labelClickAction?: TLabelClickAction;\n  ariaLabel?: string;\n  ariaLabelledBy?: string;\n  loadingMessage?: string;\n  placeholder?: string;\n  dropdownClass?: string;\n  allowClear?: boolean;\n  searchEnabled?: boolean;\n  animationEnabled?: boolean;\n  tabindex?: number | string;\n  searchPlaceholder?: string;\n  searchFieldPosition?: TSearchFieldPosition;\n  verticalPosition?: string;\n  horizontalPosition?: string;\n  triggerId?: string;\n  disabled?: boolean;\n  title?: string;\n  triggerRole?: string;\n  required?: string;\n  triggerClass?: string;\n  ariaInvalid?: string;\n  eventType?: string;\n  rootEventType?: TRootEventType;\n  ariaDescribedBy?: string;\n  calculatePosition?: CalculatePosition;\n  ebdTriggerComponent?: string | ComponentLike<any>;\n  ebdContentComponent?: string | ComponentLike<any>;\n  labelComponent?: string | ComponentLike<any>;\n  triggerComponent?: string | ComponentLike<any>;\n  selectedItemComponent?: string | ComponentLike<any>;\n  beforeOptionsComponent?: string | ComponentLike<any>;\n  optionsComponent?: string | ComponentLike<any>;\n  groupComponent?: string | ComponentLike<any>;\n  afterOptionsComponent?: string | ComponentLike<any>;\n  extra?: any;\n  matcher?: MatcherFn;\n  initiallyOpened?: boolean;\n  typeAheadOptionMatcher?: MatcherFn;\n  buildSelection?: (selected: any, select: Select) => any;\n  onChange: (selection: any, select: Select, event?: Event) => void;\n  search?: (\n    term: string,\n    select: Select,\n  ) => readonly any[] | Promise<readonly any[]>;\n  onOpen?: (select: Select, e: Event) => boolean | undefined;\n  onClose?: (select: Select, e: Event) => boolean | undefined;\n  onInput?: (term: string, select: Select, e: Event) => string | false | void;\n  onKeydown?: (select: Select, e: KeyboardEvent) => boolean | undefined;\n  onFocus?: (select: Select, event: FocusEvent) => void;\n  onBlur?: (select: Select, event: FocusEvent) => void;\n  scrollTo?: (option: any, select: Select) => void;\n  registerAPI?: (select: Select) => void;\n}\n\nexport type TLabelClickAction = 'focus' | 'open';\nexport type TSearchFieldPosition = 'before-options' | 'trigger';\n\nexport interface PowerSelectSignature {\n  Element: HTMLElement;\n  Args: PowerSelectArgs;\n  Blocks: {\n    default: [option: any, select: Select];\n  };\n}\n\nconst isSliceable = <T>(coll: any): coll is Sliceable<T> => {\n  return isArray(coll);\n};\n\nconst isPromiseLike = <T>(thing: any): thing is Promise<T> => {\n  return typeof thing.then === 'function';\n};\n\nconst isPromiseProxyLike = <T>(thing: any): thing is PromiseProxy<T> => {\n  return isPromiseLike(thing) && Object.hasOwnProperty.call(thing, 'content');\n};\n\nconst isCancellablePromise = <T>(\n  thing: any,\n): thing is CancellablePromise<T> => {\n  return typeof thing.cancel === 'function';\n};\n\nexport default class PowerSelectComponent extends Component<PowerSelectSignature> {\n  // Untracked properties\n  _publicAPIActions = {\n    search: this._search,\n    highlight: this._highlight,\n    select: this._select,\n    choose: this._choose,\n    scrollTo: this._scrollTo,\n    labelClick: this._labelClick,\n  };\n\n  // Tracked properties\n  @tracked private _resolvedOptions?: readonly any[];\n  @tracked private _resolvedSelected?: any;\n  @tracked private _repeatingChar = '';\n  @tracked private _expirableSearchText = '';\n  @tracked private _searchResult?: readonly any[];\n  @tracked isActive = false;\n  @tracked loading = false;\n  @tracked searchText = '';\n  @tracked lastSearchedText = '';\n  @tracked highlighted?: any;\n  storedAPI!: Select;\n\n  private _uid = guidFor(this);\n  private _lastOptionsPromise?: Promise<readonly any[]>;\n  private _lastSelectedPromise?: PromiseProxy<any>;\n  private _lastSearchPromise?:\n    | Promise<readonly any[]>\n    | CancellablePromise<readonly any[]>;\n  private _filterResultsCache: {\n    results: any[];\n    options: any[];\n    searchText: string;\n  } = { results: [], options: [], searchText: this.searchText };\n\n  // Lifecycle hooks\n  constructor(owner: Owner, args: PowerSelectArgs) {\n    super(owner, args);\n    assert(\n      '<PowerSelect> requires an `@onChange` function',\n      this.args.onChange && typeof this.args.onChange === 'function',\n    );\n  }\n\n  willDestroy() {\n    if (\n      this._lastSelectedPromise &&\n      isPromiseProxyLike(this._lastSelectedPromise)\n    ) {\n      try {\n        removeObserver(\n          this._lastSelectedPromise,\n          'content',\n          this,\n          this._selectedObserverCallback,\n        );\n        // eslint-disable-next-line no-empty\n      } catch {}\n      this._lastSelectedPromise = undefined;\n    }\n    super.willDestroy();\n  }\n\n  // Getters\n  get highlightOnHover(): boolean {\n    return this.args.highlightOnHover === undefined\n      ? true\n      : this.args.highlightOnHover;\n  }\n\n  get labelClickAction(): TLabelClickAction {\n    return this.args.labelClickAction === undefined\n      ? 'focus'\n      : this.args.labelClickAction;\n  }\n\n  get highlightedIndex(): string {\n    const results = this.results;\n    const highlighted = this.highlighted;\n    return pathForOption(results, highlighted);\n  }\n\n  get searchMessage(): string {\n    return this.args.searchMessage === undefined\n      ? 'Type to search'\n      : this.args.searchMessage;\n  }\n\n  get noMatchesMessage(): string {\n    return this.args.noMatchesMessage === undefined\n      ? 'No results found'\n      : this.args.noMatchesMessage;\n  }\n\n  get resultCountMessage(): string {\n    if (typeof this.args.resultCountMessage === 'function') {\n      return this.args.resultCountMessage(this.resultsCount);\n    }\n\n    if (this.resultsCount === 1) {\n      return `${this.resultsCount} result`;\n    }\n\n    return `${this.resultsCount} results`;\n  }\n\n  get matchTriggerWidth() {\n    return this.args.matchTriggerWidth === undefined\n      ? true\n      : this.args.matchTriggerWidth;\n  }\n\n  get mustShowSearchMessage(): boolean {\n    return (\n      !this.loading &&\n      this.searchText.length === 0 &&\n      !!this.args.search &&\n      !!this.searchMessage &&\n      this.resultsCount === 0\n    );\n  }\n\n  get mustShowNoMessages(): boolean {\n    return (\n      !this.loading &&\n      this.resultsCount === 0 &&\n      (!this.args.search || this.lastSearchedText.length > 0)\n    );\n  }\n\n  get results(): any[] {\n    if (this.searchText.length > 0) {\n      if (this.args.search) {\n        return toPlainArray(this._searchResult || this.options);\n      } else {\n        if (\n          this._filterResultsCache.options === this.options &&\n          this._filterResultsCache.searchText === this.searchText\n        ) {\n          // This is an optimization to avoid filtering several times, which may be a bit expensive\n          // if there are many options, if neither the options nor the searchtext have changed\n          return this._filterResultsCache.results;\n        }\n        const results = this._filter(this.options, this.searchText);\n        // eslint-disable-next-line ember/no-side-effects\n        this._filterResultsCache = {\n          results,\n          options: this.options,\n          searchText: this.searchText,\n        };\n        return results;\n      }\n    } else {\n      return this.options;\n    }\n  }\n\n  get options(): any[] {\n    if (this._resolvedOptions) return toPlainArray(this._resolvedOptions);\n    if (this.args.options) {\n      return toPlainArray(this.args.options as any[]);\n    } else {\n      return [];\n    }\n  }\n\n  get resultsCount(): number {\n    return countOptions(this.results);\n  }\n\n  get selected(): any {\n    if (this._resolvedSelected) {\n      return toPlainArray(this._resolvedSelected);\n    } else if (\n      !isNone(this.args.selected) &&\n      typeof this.args.selected.then !== 'function'\n    ) {\n      return toPlainArray(this.args.selected);\n    }\n    return undefined;\n  }\n\n  get ariaMultiSelectable(): boolean {\n    return isArray(this.args.selected);\n  }\n\n  get triggerId(): string {\n    return this.args.triggerId || `${this._uid}-trigger`;\n  }\n\n  get labelId(): string {\n    return `${this._uid}-label`;\n  }\n\n  get ariaLabelledBy(): string {\n    if (this.args.ariaLabelledBy) {\n      return this.args.ariaLabelledBy;\n    }\n\n    if (this.args.labelText || this.args.labelComponent) {\n      return this.labelId;\n    }\n\n    return '';\n  }\n\n  get searchFieldPosition(): TSearchFieldPosition {\n    return this.args.searchFieldPosition === undefined\n      ? 'before-options'\n      : this.args.searchFieldPosition;\n  }\n\n  get tabindex(): string | number {\n    if (\n      this.args.searchEnabled &&\n      this.args.tabindex === undefined &&\n      this.searchFieldPosition === 'trigger'\n    ) {\n      return '-1';\n    }\n\n    return this.args.tabindex || '0';\n  }\n\n  // Actions\n  @action\n  handleOpen(_select: Select, e: Event): boolean | void {\n    if (this.args.onOpen && this.args.onOpen(this.storedAPI, e) === false) {\n      return false;\n    }\n    if (e) {\n      if (\n        e instanceof KeyboardEvent &&\n        e.type === 'keydown' &&\n        (e.keyCode === 38 || e.keyCode === 40)\n      ) {\n        e.preventDefault();\n      }\n    }\n    this._resetHighlighted();\n  }\n\n  @action\n  handleClose(_select: Select, e: Event): boolean | void {\n    if (this.args.onClose && this.args.onClose(this.storedAPI, e) === false) {\n      return false;\n    }\n    this._highlight(undefined);\n  }\n\n  @action\n  handleInput(e: InputEvent): void {\n    if (e.target === null) return;\n    const term = (e.target as HTMLInputElement).value;\n    let correctedTerm;\n    if (this.args.onInput) {\n      correctedTerm = this.args.onInput(term, this.storedAPI, e);\n      if (correctedTerm === false) {\n        return;\n      }\n    }\n    this._publicAPIActions.search(\n      typeof correctedTerm === 'string' ? correctedTerm : term,\n    );\n  }\n\n  @action\n  handleKeydown(e: KeyboardEvent) {\n    if (\n      this.args.onKeydown &&\n      this.args.onKeydown(this.storedAPI, e) === false\n    ) {\n      return false;\n    }\n    if (\n      this.searchFieldPosition === 'trigger' &&\n      !this.storedAPI.isOpen &&\n      e.keyCode !== 9 && // TAB\n      e.keyCode !== 13 && // ENTER\n      e.keyCode !== 27 // ESC\n    ) {\n      this.storedAPI.actions.open(e);\n    }\n    return this._routeKeydown(this.storedAPI, e);\n  }\n\n  @action\n  handleTriggerKeydown(e: KeyboardEvent) {\n    if (\n      this.args.onKeydown &&\n      this.args.onKeydown(this.storedAPI, e) === false\n    ) {\n      e.stopImmediatePropagation();\n      return;\n    }\n    if (e.ctrlKey || e.metaKey) {\n      e.stopImmediatePropagation();\n      return;\n    }\n    if ((e.keyCode >= 48 && e.keyCode <= 90) || isNumpadKeyEvent(e)) {\n      // Keys 0-9, a-z or numpad keys\n      this.triggerTypingTask.perform(e);\n    } else if (e.keyCode === 32) {\n      // Space\n      this._handleKeySpace(this.storedAPI, e);\n    } else {\n      return this._routeKeydown(this.storedAPI, e);\n    }\n  }\n\n  @action\n  _labelClick(event: MouseEvent) {\n    if (!this.storedAPI) {\n      return;\n    }\n\n    // Double-click, do nothing\n    if (event.detail > 1) {\n      return;\n    }\n\n    if (this.labelClickAction === 'open') {\n      this.storedAPI.actions.open();\n      return;\n    } else if (this.labelClickAction === 'focus') {\n      const trigger = document.querySelector(\n        `[data-ebd-id=\"${this.storedAPI.uniqueId}-trigger\"]`,\n      ) as HTMLElement;\n\n      if (!trigger) {\n        return;\n      }\n\n      trigger.focus();\n    }\n\n    return true;\n  }\n\n  @action\n  handleFocus(event: FocusEvent): void {\n    if (!this.isDestroying) {\n      scheduleTask(this, 'actions', this._updateIsActive, true);\n    }\n    if (this.searchFieldPosition === 'trigger') {\n      if (event.target) {\n        const target = event.target as HTMLElement;\n        const input = target.querySelector(\n          'input[type=\"search\"]',\n        ) as HTMLInputElement | null;\n        input?.focus();\n      }\n    }\n    if (this.args.onFocus) {\n      this.args.onFocus(this.storedAPI, event);\n    }\n  }\n\n  @action\n  handleBlur(event: FocusEvent): void {\n    if (!this.isDestroying) {\n      scheduleTask(this, 'actions', this._updateIsActive, false);\n    }\n    if (this.args.onBlur) {\n      this.args.onBlur(this.storedAPI, event);\n    }\n  }\n\n  // Methods\n  @action\n  _search(term: string): void {\n    if (this.searchText === term) return;\n    this.searchText = term;\n    if (!this.args.search) {\n      this.lastSearchedText = term;\n      this._resetHighlighted();\n    }\n  }\n\n  @action\n  _updateOptions(): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-insert this._updateOptions @options}} and {{did-update this._updateOptions @options}} with {{this.updateOptions @options}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__updateOptions();\n  }\n\n  @action\n  _updateHighlighted(): void {\n    if (this.storedAPI.isOpen) {\n      this._resetHighlighted();\n    }\n  }\n\n  @action\n  _updateSelected(): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-insert this._updateSelected @selected}} and {{did-update this._updateSelected @selected}} with {{this.updateSelected @selected}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__updateSelected();\n  }\n\n  _selectedObserverCallback(): void {\n    this._resolvedSelected = this._lastSelectedPromise;\n    this._highlight(this._resolvedSelected);\n  }\n\n  @action\n  _highlight(opt: any): void {\n    if (!isNone(opt) && opt.disabled) {\n      return;\n    }\n    this.highlighted = opt;\n  }\n\n  @action\n  _select(selected: any, e?: Event): void {\n    if (!isEqual(this.storedAPI.selected, selected)) {\n      this.args.onChange(selected, this.storedAPI, e);\n    }\n  }\n\n  @action\n  _choose(selected: any, e?: Event): void {\n    const selection = this.args.buildSelection\n      ? this.args.buildSelection(selected, this.storedAPI)\n      : selected;\n    this.storedAPI.actions.select(selection, e);\n    if (this.args.closeOnSelect !== false) {\n      this.storedAPI.actions.close(e);\n      if (this.searchFieldPosition === 'trigger') {\n        this.searchText = '';\n      }\n      // return false;\n    }\n  }\n\n  @action\n  _scrollTo(option: any): void {\n    const select = this.storedAPI;\n    if (!document || !option) {\n      return;\n    }\n    if (this.args.scrollTo) {\n      return this.args.scrollTo(option, select);\n    }\n    const optionsList = document.getElementById(\n      `ember-power-select-options-${select.uniqueId}`,\n    ) as HTMLElement;\n    if (!optionsList) {\n      return;\n    }\n    const index = indexOfOption(select.results, option);\n    if (index === -1) {\n      return;\n    }\n    const optionElement = optionsList.querySelector(\n      `[data-option-index='${index}']`,\n    ) as HTMLElement;\n    if (!optionElement) {\n      return;\n    }\n    const optionTopScroll = optionElement.offsetTop - optionsList.offsetTop;\n    const optionBottomScroll = optionTopScroll + optionElement.offsetHeight;\n    if (optionBottomScroll > optionsList.offsetHeight + optionsList.scrollTop) {\n      optionsList.scrollTop = optionBottomScroll - optionsList.offsetHeight;\n    } else if (optionTopScroll < optionsList.scrollTop) {\n      optionsList.scrollTop = optionTopScroll;\n    }\n  }\n\n  @action\n  _registerAPI(triggerElement: Element, [publicAPI]: [Select]): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-insert this._registerAPI publicAPI}} and {{did-update this._registerAPI publicAPI}} with {{this.updateRegisterAPI publicAPI}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__registerAPI(triggerElement, [publicAPI]);\n  }\n\n  @action\n  _performSearch(triggerElement: Element, [term]: [string]): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-update this._performSearch this.searchText}} with {{this.updatePerformSearch this.searchText}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__performSearch(triggerElement, [term]);\n  }\n\n  updateOptions = modifier(\n    () => {\n      this.__updateOptions();\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  updateSelected = modifier(\n    () => {\n      this.__updateSelected();\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  updateRegisterAPI = modifier(\n    (triggerElement: Element, [publicAPI]: [Select]) => {\n      this.__registerAPI(triggerElement, [publicAPI]);\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  updatePerformSearch = modifier(\n    (triggerElement: Element, [term]: [string]) => {\n      this.__performSearch(triggerElement, [term]);\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  private __updateOptions() {\n    if (!this.args.options) return;\n    if (isPromiseLike(this.args.options)) {\n      if (this._lastOptionsPromise === this.args.options) return; // promise is still the same\n      const currentOptionsPromise = this.args.options;\n      this._lastOptionsPromise = currentOptionsPromise;\n      this.loading = true;\n      this._lastOptionsPromise\n        .then((resolvedOptions) => {\n          if (this._lastOptionsPromise === currentOptionsPromise) {\n            this.loading = false;\n            this._resolvedOptions = resolvedOptions;\n            this._resetHighlighted();\n          }\n        })\n        .catch(() => {\n          if (this._lastOptionsPromise === currentOptionsPromise) {\n            this.loading = false;\n          }\n        });\n    } else {\n      scheduleTask(this, 'actions', this._resetHighlighted);\n    }\n  }\n\n  private __updateSelected(): void {\n    if (isNone(this.args.selected)) return;\n    if (typeof this.args.selected.then === 'function') {\n      if (this._lastSelectedPromise === this.args.selected) return; // promise is still the same\n      if (\n        this._lastSelectedPromise &&\n        isPromiseProxyLike(this._lastSelectedPromise)\n      ) {\n        removeObserver(\n          this._lastSelectedPromise,\n          'content',\n          this,\n          this._selectedObserverCallback,\n        );\n      }\n\n      const currentSelectedPromise: PromiseProxy<any> = this.args.selected;\n      currentSelectedPromise.then(() => {\n        if (this.isDestroyed || this.isDestroying) return;\n        if (isPromiseProxyLike(currentSelectedPromise)) {\n          // eslint-disable-next-line ember/no-observers\n          addObserver(\n            currentSelectedPromise,\n            'content',\n            this,\n            this._selectedObserverCallback,\n          );\n        }\n      });\n\n      this._lastSelectedPromise = currentSelectedPromise;\n      this._lastSelectedPromise.then((resolvedSelected) => {\n        if (this._lastSelectedPromise === currentSelectedPromise) {\n          this._resolvedSelected = resolvedSelected;\n          this._highlight(resolvedSelected);\n        }\n      });\n    } else {\n      this._resolvedSelected = undefined;\n      // Don't highlight args.selected array on multi-select\n      if (!Array.isArray(this.args.selected)) {\n        this._highlight(this.args.selected);\n      }\n    }\n  }\n\n  private __registerAPI(_: Element, [publicAPI]: [Select]): void {\n    this.storedAPI = publicAPI;\n    if (this.args.registerAPI) {\n      scheduleTask(this, 'actions', this.args.registerAPI, publicAPI);\n    }\n  }\n\n  private __performSearch(_: Element, [term]: [string]): void {\n    if (!this.args.search) return;\n    if (term === '') {\n      this.loading = false;\n      this.lastSearchedText = term;\n      if (this._lastSearchPromise !== undefined) {\n        if (isCancellablePromise(this._lastSearchPromise)) {\n          this._lastSearchPromise.cancel(); // Cancel ember-concurrency tasks\n        }\n        this._lastSearchPromise = undefined;\n      }\n      return;\n    }\n    const searchResult = this.args.search(term, this.storedAPI);\n    if (searchResult && isPromiseLike(searchResult)) {\n      this.loading = true;\n      if (\n        this._lastSearchPromise !== undefined &&\n        isCancellablePromise(this._lastSearchPromise)\n      ) {\n        this._lastSearchPromise.cancel(); // Cancel ember-concurrency tasks\n      }\n      this._lastSearchPromise = searchResult;\n      searchResult\n        .then((results) => {\n          if (this._lastSearchPromise === searchResult) {\n            this._searchResult = results;\n            this.loading = false;\n            this.lastSearchedText = term;\n            scheduleTask(this, 'actions', this._resetHighlighted);\n          }\n        })\n        .catch(() => {\n          if (this._lastSearchPromise === searchResult) {\n            this.loading = false;\n            this.lastSearchedText = term;\n          }\n        });\n    } else {\n      this.lastSearchedText = term;\n      this._searchResult = searchResult;\n      scheduleTask(this, 'actions', this._resetHighlighted);\n    }\n  }\n\n  _defaultBuildSelection(option: any): any {\n    return option;\n  }\n\n  _routeKeydown(select: Select, e: KeyboardEvent): boolean | void {\n    if (e.keyCode === 38 || e.keyCode === 40) {\n      // Up & Down\n      return this._handleKeyUpDown(select, e);\n    } else if (e.keyCode === 13) {\n      // ENTER\n      return this._handleKeyEnter(select, e);\n    } else if (e.keyCode === 9) {\n      // Tab\n      return this._handleKeyTab(select, e);\n    } else if (e.keyCode === 27) {\n      // ESC\n      return this._handleKeyESC(select, e);\n    }\n  }\n\n  _handleKeyTab(select: Select, e: KeyboardEvent): void {\n    select.actions.close(e);\n  }\n\n  _handleKeyESC(select: Select, e: KeyboardEvent): void {\n    select.actions.close(e);\n  }\n\n  _handleKeyEnter(select: Select, e: KeyboardEvent): boolean | void {\n    if (select.isOpen && select.highlighted !== undefined) {\n      select.actions.choose(select.highlighted, e);\n      e.stopImmediatePropagation();\n      return false;\n    }\n  }\n\n  _handleKeySpace(select: Select, e: KeyboardEvent): void {\n    if (\n      e.target !== null &&\n      ['TEXTAREA', 'INPUT'].includes((e.target as Element).nodeName)\n    ) {\n      e.stopImmediatePropagation();\n    } else if (select.isOpen && select.highlighted !== undefined) {\n      e.stopImmediatePropagation();\n      e.preventDefault(); // Prevents scrolling of the page.\n      select.actions.choose(select.highlighted, e);\n    }\n  }\n\n  _handleKeyUpDown(select: Select, e: KeyboardEvent): void {\n    if (select.isOpen) {\n      e.preventDefault();\n      e.stopPropagation();\n      const step: 1 | -1 = e.keyCode === 40 ? 1 : -1;\n      const newHighlighted = advanceSelectableOption(\n        select.results,\n        select.highlighted,\n        step,\n      );\n      select.actions.highlight(newHighlighted);\n      select.actions.scrollTo(newHighlighted);\n    } else {\n      select.actions.open(e);\n    }\n  }\n\n  _resetHighlighted(): void {\n    let highlighted;\n    const defHighlighted = this.args.defaultHighlighted || defaultHighlighted;\n    if (typeof defHighlighted === 'function') {\n      highlighted = defHighlighted({\n        results: this.results,\n        highlighted: this.highlighted,\n        selected: this.selected,\n      });\n    } else {\n      highlighted = defHighlighted;\n    }\n    this._highlight(highlighted);\n  }\n\n  _filter(options: any[], term: string, skipDisabled = false): any[] {\n    const matcher = this.args.matcher || defaultMatcher;\n    const optionMatcher = getOptionMatcher(\n      matcher,\n      defaultMatcher,\n      this.args.searchField,\n    );\n    return filterOptions(options || [], term, optionMatcher, skipDisabled);\n  }\n\n  _updateIsActive(value: boolean) {\n    this.isActive = value;\n  }\n\n  findWithOffset(\n    options: readonly any[],\n    term: string,\n    offset: number,\n    skipDisabled = false,\n  ): any {\n    const typeAheadOptionMatcher = getOptionMatcher(\n      this.args.typeAheadOptionMatcher || defaultTypeAheadMatcher,\n      defaultTypeAheadMatcher,\n      this.args.searchField,\n    );\n    return findOptionWithOffset(\n      options || [],\n      term,\n      typeAheadOptionMatcher,\n      offset,\n      skipDisabled,\n    );\n  }\n\n  // Tasks\n  triggerTypingTask = restartableTask(async (e: KeyboardEvent) => {\n    // In general, a user doing this interaction means to have a different result.\n    let searchStartOffset = 1;\n    let repeatingChar = this._repeatingChar;\n    let charCode = e.keyCode;\n    if (isNumpadKeyEvent(e)) {\n      charCode -= 48; // Adjust char code offset for Numpad key codes. Check here for numapd key code behavior: https://goo.gl/Qwc9u4\n    }\n    let term;\n\n    // Check if user intends to cycle through results. _repeatingChar can only be the first character.\n    const c = String.fromCharCode(charCode);\n    if (c === this._repeatingChar) {\n      term = c;\n    } else {\n      term = this._expirableSearchText + c;\n    }\n\n    if (term.length > 1) {\n      // If the term is longer than one char, the user is in the middle of a non-cycling interaction\n      // so the offset is just zero (the current selection is a valid match).\n      searchStartOffset = 0;\n      repeatingChar = '';\n    } else {\n      repeatingChar = c;\n    }\n\n    // When the select is open, the \"selection\" is just highlighted.\n    if (this.storedAPI.isOpen && this.storedAPI.highlighted) {\n      searchStartOffset += indexOfOption(\n        this.storedAPI.options,\n        this.storedAPI.highlighted,\n      );\n    } else if (!this.storedAPI.isOpen && !isNone(this.selected)) {\n      searchStartOffset += indexOfOption(this.storedAPI.options, this.selected);\n    } else {\n      searchStartOffset = 0;\n    }\n\n    // The char is always appended. That way, searching for words like \"Aaron\" will work even\n    // if \"Aa\" would cycle through the results.\n    this._expirableSearchText = this._expirableSearchText + c;\n    this._repeatingChar = repeatingChar;\n    const match = this.findWithOffset(\n      this.storedAPI.options,\n      term,\n      searchStartOffset,\n      true,\n    );\n    if (match !== undefined) {\n      if (this.storedAPI.isOpen) {\n        this.storedAPI.actions.highlight(match);\n        this.storedAPI.actions.scrollTo(match);\n      } else {\n        this.storedAPI.actions.select(match, e);\n      }\n    }\n    await timeout(1000);\n    this._expirableSearchText = '';\n    this._repeatingChar = '';\n  });\n}\n\nfunction getOptionMatcher(\n  matcher: MatcherFn,\n  defaultMatcher: MatcherFn,\n  searchField: string | undefined,\n): MatcherFn {\n  if (searchField && matcher === defaultMatcher) {\n    return (option: any, text: string) =>\n      matcher(get(option, searchField), text);\n  } else {\n    return (option: any, text: string) => {\n      assert(\n        '<PowerSelect> If you want the default filtering to work on options that are not plain strings, you need to provide `@searchField`',\n        matcher !== defaultMatcher || typeof option === 'string',\n      );\n      return matcher(option, text);\n    };\n  }\n}\n\nfunction isNumpadKeyEvent(e: KeyboardEvent): boolean {\n  return e.keyCode >= 96 && e.keyCode <= 105;\n}\n\nconst toPlainArray = <T>(collection: T[] | Sliceable<T>): T[] => {\n  if (isSliceable<T>(collection)) {\n    return collection.slice();\n  } else {\n    return collection;\n  }\n};\n","import { TaskFactory } from './task-factory';\n\n/**\n * This builder function is called by the transpiled code from\n * `task(async () => {})`. See async-arrow-task-transform.js\n *\n * @private\n */\nexport function buildTask(contextFn, options, taskName, bufferPolicyName) {\n  let optionsWithBufferPolicy = options;\n\n  if (bufferPolicyName) {\n    optionsWithBufferPolicy = Object.assign({}, optionsWithBufferPolicy);\n    optionsWithBufferPolicy[bufferPolicyName] = true;\n  }\n\n  const result = contextFn();\n\n  const taskFactory = new TaskFactory(\n    taskName || '<unknown>',\n    result.generator,\n    optionsWithBufferPolicy,\n  );\n  return taskFactory.createTask(result.context);\n}\n","import Component from '@glimmer/component';\nimport { runTask } from 'ember-lifeline';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport { deprecate } from '@ember/debug';\n\ninterface PowerSelectBeforeOptionsSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    searchEnabled: boolean;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    searchPlaceholder?: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    ariaActiveDescendant?: string;\n    listboxId?: string;\n    onKeydown: (e: KeyboardEvent) => false | void;\n    onBlur: (e: FocusEvent) => void;\n    onFocus: (e: FocusEvent) => void;\n    onInput: (e: InputEvent) => boolean;\n    autofocus?: boolean;\n  };\n}\n\nexport default class PowerSelectBeforeOptionsComponent extends Component<PowerSelectBeforeOptionsSignature> {\n  didSetup: boolean = false;\n\n  @action\n  clearSearch(): void {\n    deprecate(\n      'You are using power-select before-option component with ember/render-modifier. Replace {{will-destroy this.clearSearch}} with {{this.setupInput}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.args.select.actions?.search('');\n  }\n\n  @action\n  handleKeydown(e: KeyboardEvent): false | void {\n    if (this.args.onKeydown(e) === false) {\n      return false;\n    }\n    if (e.keyCode === 13) {\n      this.args.select.actions.close(e);\n    }\n  }\n\n  @action\n  handleInput(event: Event): false | void {\n    const e = event as InputEvent;\n    if (this.args.onInput(e) === false) {\n      return false;\n    }\n  }\n\n  @action\n  focusInput(el: HTMLElement) {\n    deprecate(\n      'You are using power-select before-option component with ember/render-modifier. Replace {{did-insert this.focusInput}} with {{this.setupInput}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._focusInput(el);\n  }\n\n  setupInput = modifier(\n    (el: HTMLElement) => {\n      if (this.didSetup) {\n        return;\n      }\n\n      this.didSetup = true;\n\n      this._focusInput(el);\n\n      return () => {\n        this.args.select.actions?.search('');\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  private _focusInput(el: HTMLElement) {\n    runTask(\n      this,\n      () => {\n        if (this.args.autofocus !== false) {\n          el.focus();\n        }\n      },\n      0,\n    );\n  }\n}\n","import Component from '@glimmer/component';\nimport { runTask } from 'ember-lifeline';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select, TSearchFieldPosition } from '../power-select';\n\ninterface PowerSelectInputSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    searchPlaceholder?: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    ariaActiveDescendant?: string;\n    listboxId?: string;\n    onKeydown: (e: KeyboardEvent) => false | void;\n    onBlur: (e: FocusEvent) => void;\n    onFocus: (e: FocusEvent) => void;\n    onInput: (e: InputEvent) => boolean;\n    autofocus?: boolean;\n  };\n}\n\nexport default class PowerSelectInput extends Component<PowerSelectInputSignature> {\n  didSetup: boolean = false;\n\n  @action\n  handleKeydown(e: KeyboardEvent): false | void {\n    if (this.args.onKeydown(e) === false) {\n      return false;\n    }\n    if (e.keyCode === 13) {\n      this.args.select.actions.close(e);\n    }\n  }\n\n  @action\n  handleInput(event: Event): false | void {\n    const e = event as InputEvent;\n    if (this.args.onInput(e) === false) {\n      return false;\n    }\n  }\n\n  @action\n  handleBlur(event: Event) {\n    if (this.args.searchFieldPosition === 'trigger') {\n      this.args.select.actions?.search('');\n    }\n\n    this.args.onBlur(event as FocusEvent);\n  }\n\n  setupInput = modifier(\n    (el: HTMLElement) => {\n      if (this.didSetup) {\n        return;\n      }\n\n      this.didSetup = true;\n\n      this._focusInput(el);\n\n      return () => {\n        this.args.select.actions?.search('');\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  private _focusInput(el: HTMLElement) {\n    runTask(\n      this,\n      () => {\n        if (this.args.autofocus !== false) {\n          el.focus();\n        }\n      },\n      0,\n    );\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { Select } from '../power-select';\n\nexport interface PowerSelectLabelSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    labelText?: string;\n    labelId: string;\n    triggerId: string;\n    extra: any;\n  };\n}\n\nexport default class PowerSelectLabelComponent extends Component<PowerSelectLabelSignature> {\n  @action\n  onLabelClick(e: MouseEvent): void {\n    if (!this.args.select) {\n      return;\n    }\n\n    this.args.select.actions.labelClick(e);\n  }\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectNoMatchesMessageSignature {\n  Element: HTMLElement;\n  Args: {\n    noMatchesMessage: any;\n  };\n}\n\nexport default templateOnly<PowerSelectNoMatchesMessageSignature>();\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\nimport { deprecate } from '@ember/debug';\ndeclare const FastBoot: any;\n\ninterface PowerSelectOptionsSignature {\n  Element: HTMLElement;\n  Args: PowerSelectOptionsArgs;\n  Blocks: {\n    default: [opt: PowerSelectOptionsArgs, select: Select];\n  };\n}\n\ninterface PowerSelectOptionsArgs {\n  select: Select;\n  highlightOnHover?: boolean;\n  listboxId: string;\n  groupIndex: string;\n  loadingMessage: string;\n  options: any[];\n  extra: any;\n  groupComponent?: string | ComponentLike<any>;\n  optionsComponent?: string | ComponentLike<any>;\n}\n\nconst isTouchDevice = !!window && 'ontouchstart' in window;\nif (typeof FastBoot === 'undefined') {\n  (function (ElementProto) {\n    if (typeof ElementProto.matches !== 'function') {\n      ElementProto.matches =\n        (ElementProto as any).msMatchesSelector ||\n        (ElementProto as any).mozMatchesSelector ||\n        ElementProto.webkitMatchesSelector;\n    }\n\n    if (typeof ElementProto.closest !== 'function') {\n      ElementProto.closest = function closest(selector: string) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let element: Element | null = this;\n        while (element !== null && element.nodeType === 1) {\n          if (element.matches(selector)) {\n            return element;\n          }\n          element = element.parentNode as Element;\n        }\n        return null;\n      };\n    }\n  })(window.Element.prototype);\n}\n\nexport default class PowerSelectOptionsComponent extends Component<PowerSelectOptionsSignature> {\n  private isTouchDevice = this.args.extra?._isTouchDevice || isTouchDevice;\n  private touchMoveEvent?: TouchEvent;\n  private mouseOverHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: MouseEvent,\n  ): void => {}) as EventListener;\n  private mouseUpHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: MouseEvent,\n  ): void => {}) as EventListener;\n  private touchEndHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: TouchEvent,\n  ): void => {}) as EventListener;\n  private touchMoveHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: TouchEvent,\n  ): void => {}) as EventListener;\n  private touchStartHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: TouchEvent,\n  ): void => {}) as EventListener;\n\n  private _listElement: Element | null = null;\n  private _didHandlerSetup: boolean = false;\n\n  willDestroy(): void {\n    super.willDestroy();\n    if (this._listElement) {\n      this._removeHandlers(this._listElement);\n    }\n  }\n\n  @action\n  addHandlers(element: Element) {\n    deprecate(\n      'You are using power-select options component with ember/render-modifier. Replace {{did-insert this.addHandlers}} with {{this.setupHandlers}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._addHandlers(element);\n  }\n\n  @action\n  removeHandlers(element: Element) {\n    deprecate(\n      'You are using power-select options component with ember/render-modifier. Replace {{will-destroy this.removeHandlers}} with {{this.setupHandlers}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._removeHandlers(element);\n  }\n\n  setupHandlers = modifier((element: Element) => {\n    if (this._didHandlerSetup) {\n      return;\n    }\n    this._didHandlerSetup = true;\n    this._listElement = element;\n    this._addHandlers(element);\n  });\n\n  _optionFromIndex(index: string) {\n    const parts = index.split('.');\n    let option = this.args.options[parseInt(parts[0] ?? '', 10)];\n    for (let i = 1; i < parts.length; i++) {\n      option = option.options[parseInt(parts[i] ?? '', 10)];\n    }\n    return option;\n  }\n\n  _hasMoved(endEvent: TouchEvent): boolean {\n    const moveEvent = this.touchMoveEvent;\n    if (!moveEvent) {\n      return false;\n    }\n\n    if (!moveEvent.changedTouches) {\n      return false;\n    }\n\n    if (\n      !endEvent.changedTouches?.[0] ||\n      (moveEvent.changedTouches[0] as any).touchType !== 'stylus'\n    ) {\n      return true;\n    }\n\n    const changedTouch = moveEvent.changedTouches[0];\n\n    // Distinguish stylus scroll and tap: if touch \"distance\" < 5px, we consider it a tap\n    const horizontalDistance = Math.abs(\n      (changedTouch?.pageX ?? 0) - endEvent.changedTouches[0].pageX,\n    );\n    const verticalDistance = Math.abs(\n      (changedTouch?.pageY ?? 0) - endEvent.changedTouches[0].pageY,\n    );\n    return horizontalDistance >= 5 || verticalDistance >= 5;\n  }\n\n  private _addHandlers(element: Element) {\n    const isGroup = element.getAttribute('data-optgroup') === 'true';\n    if (isGroup) {\n      return;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n    const findOptionAndPerform = (action: Function, e: MouseEvent): void => {\n      if (e.target === null) return;\n      const optionItem = (e.target as Element).closest('[data-option-index]');\n      if (!optionItem) {\n        return;\n      }\n      if (optionItem.closest('[aria-disabled=true]')) {\n        return; // Abort if the item or an ancestor is disabled\n      }\n      const optionIndex = optionItem.getAttribute('data-option-index');\n      if (optionIndex === null) return;\n      action(this._optionFromIndex(optionIndex), e);\n    };\n    this.mouseUpHandler = ((e: MouseEvent): void =>\n      findOptionAndPerform(\n        this.args.select.actions.choose,\n        e,\n      )) as EventListener;\n    element.addEventListener('mouseup', this.mouseUpHandler);\n    if (this.args.highlightOnHover) {\n      this.mouseOverHandler = ((e: MouseEvent): void =>\n        findOptionAndPerform(\n          this.args.select.actions.highlight,\n          e,\n        )) as EventListener;\n      element.addEventListener('mouseover', this.mouseOverHandler);\n    }\n    if (this.isTouchDevice) {\n      this.touchMoveHandler = ((e: TouchEvent): void => {\n        this.touchMoveEvent = e;\n        if (element) {\n          element.removeEventListener('touchmove', this.touchMoveHandler);\n        }\n      }) as EventListener;\n      // Add touch event handlers to detect taps\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      this.touchStartHandler = ((_: TouchEvent): void => {\n        element.addEventListener('touchmove', this.touchMoveHandler);\n      }) as EventListener;\n      this.touchEndHandler = ((e: TouchEvent): void => {\n        if (e.target === null) return;\n        const optionItem = (e.target as Element).closest('[data-option-index]');\n        if (optionItem === null) return;\n        e.preventDefault();\n        if (this._hasMoved(e)) {\n          this.touchMoveEvent = undefined;\n          return;\n        }\n\n        if (optionItem.closest('[aria-disabled=true]')) {\n          return; // Abort if the item or an ancestor is disabled\n        }\n\n        const optionIndex = optionItem.getAttribute('data-option-index');\n        if (optionIndex === null) return;\n        this.args.select.actions.choose(this._optionFromIndex(optionIndex), e);\n      }) as EventListener;\n      element.addEventListener('touchstart', this.touchStartHandler);\n      element.addEventListener('touchend', this.touchEndHandler);\n    }\n\n    this.args.select.actions.scrollTo(this.args.select.highlighted);\n  }\n\n  private _removeHandlers(element: Element) {\n    element.removeEventListener('mouseup', this.mouseUpHandler);\n    element.removeEventListener('mouseover', this.mouseOverHandler);\n    element.removeEventListener('touchstart', this.touchStartHandler);\n    element.removeEventListener('touchmove', this.touchMoveHandler);\n    element.removeEventListener('touchend', this.touchEndHandler);\n  }\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectPlaceholderSignature {\n  Element: HTMLElement;\n  Args: {\n    isMultipleWithSearch: boolean;\n    placeholder: any;\n    inputComponent?: any;\n  };\n}\n\nexport default templateOnly<PowerSelectPlaceholderSignature>();\n","import Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\n\ninterface PowerSelectPowerSelectGroupSignature {\n  Element: HTMLElement;\n  Args: {\n    group: any;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class PowerSelectGroupComponent extends Component<PowerSelectPowerSelectGroupSignature> {\n  uniqueId = guidFor(this);\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectSearchMessageSignature {\n  Element: HTMLElement;\n  Args: {\n    searchMessage: string;\n  };\n}\n\nexport default templateOnly<PowerSelectSearchMessageSignature>();\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\n\ninterface PowerSelectTriggerSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    allowClear: boolean;\n    searchEnabled: boolean;\n    placeholder?: string;\n    searchField: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    listboxId?: string;\n    tabindex?: string;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    ariaActiveDescendant: string;\n    extra?: any;\n    placeholderComponent?: string | ComponentLike<any>;\n    selectedItemComponent?: string | ComponentLike<any>;\n    onInput?: (e: InputEvent) => boolean;\n    onKeydown?: (e: KeyboardEvent) => boolean;\n    onFocus?: (e: FocusEvent) => void;\n    onBlur?: (e: FocusEvent) => void;\n  };\n  Blocks: {\n    default: [selected: any, select: Select];\n  };\n}\n\nexport default class PowerSelectTriggerComponent extends Component<PowerSelectTriggerSignature> {\n  @action\n  clear(e: Event): false | void {\n    e.stopPropagation();\n    this.args.select.actions.select(null);\n    if (e.type === 'touchstart') {\n      return false;\n    }\n  }\n}\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport { isEqual } from '@ember/utils';\n\nexport function emberPowerSelectIsEqual(\n  [option, selected]: [any, any] /* , hash*/,\n): boolean {\n  if (selected === undefined || selected === null) {\n    return false;\n  }\n  if (isEmberArray(selected)) {\n    for (let i = 0; i < selected.length; i++) {\n      if (isEqual(selected[i], option)) {\n        return true;\n      }\n    }\n    return false;\n  } else {\n    return isEqual(option, selected);\n  }\n}\n\nexport default helper(emberPowerSelectIsEqual);\n","import { helper } from '@ember/component/helper';\nimport { isGroup } from '../utils/group-utils.ts';\n\nexport function emberPowerSelectIsGroup([maybeGroup]: [any]): boolean {\n  return isGroup(maybeGroup);\n}\n\nexport default helper(emberPowerSelectIsGroup);\n","import { helper } from '@ember/component/helper';\nimport { isNone } from '@ember/utils';\n\nexport function emberPowerSelectIsSelectedPresent([value]: [any]): boolean {\n  return !isNone(value);\n}\n\nexport default helper(emberPowerSelectIsSelectedPresent);\n","import { isEqual } from '@ember/utils';\n\nexport type MatcherFn = (option: any, text: string) => number;\nexport function isGroup(entry: any): boolean {\n  return !!entry && !!entry.groupName && !!entry.options;\n}\n\nexport function countOptions(collection: any): number {\n  let counter = 0;\n  (function walk(collection): void {\n    if (!collection) {\n      return;\n    }\n    for (let i = 0; i < collection.length; i++) {\n      const entry = collection.objectAt\n        ? collection.objectAt(i)\n        : collection[i];\n      if (isGroup(entry)) {\n        walk(entry.options);\n      } else {\n        counter++;\n      }\n    }\n  })(collection);\n  return counter;\n}\n\nexport function indexOfOption(collection: any, option: any): number {\n  let index = 0;\n  return (function walk(collection): number {\n    if (!collection) {\n      return -1;\n    }\n    for (let i = 0; i < collection.length; i++) {\n      const entry = collection.objectAt\n        ? collection.objectAt(i)\n        : collection[i];\n      if (isGroup(entry)) {\n        const result = walk(entry.options);\n        if (result > -1) {\n          return result;\n        }\n      } else if (isEqual(entry, option)) {\n        return index;\n      } else {\n        index++;\n      }\n    }\n    return -1;\n  })(collection);\n}\n\nexport function pathForOption(collection: any, option: any): string {\n  return (function walk(collection): string {\n    if (!collection) {\n      return '';\n    }\n    for (let i = 0; i < collection.length; i++) {\n      const entry = collection.objectAt\n        ? collection.objectAt(i)\n        : collection[i];\n      if (isGroup(entry)) {\n        const result = walk(entry.options);\n        if (result.length > 0) {\n          return i + '.' + result;\n        }\n      } else if (isEqual(entry, option)) {\n        return i + '';\n      }\n    }\n    return '';\n  })(collection);\n}\n\nexport function optionAtIndex(\n  originalCollection: any,\n  index: number,\n): { disabled: boolean; option: any } {\n  let counter = 0;\n  return (\n    (function walk(\n      collection,\n      ancestorIsDisabled,\n    ): { disabled: boolean; option: any } | void {\n      if (!collection || index < 0) {\n        return { disabled: false, option: undefined };\n      }\n      let localCounter = 0;\n      const length = collection.length;\n      while (counter <= index && localCounter < length) {\n        const entry = collection.objectAt\n          ? collection.objectAt(localCounter)\n          : collection[localCounter];\n        if (isGroup(entry)) {\n          const found = walk(\n            entry.options,\n            ancestorIsDisabled || !!entry.disabled,\n          );\n          if (found) {\n            return found;\n          }\n        } else if (counter === index) {\n          return {\n            disabled: ancestorIsDisabled || !!entry.disabled,\n            option: entry,\n          };\n        } else {\n          counter++;\n        }\n        localCounter++;\n      }\n    })(originalCollection, false) || { disabled: false, option: undefined }\n  );\n}\n\nexport interface Group {\n  groupName: string;\n  options: any[];\n  disabled?: boolean;\n  [key: string]: unknown;\n}\nfunction copyGroup(group: Group, suboptions: any[]): Group {\n  const groupCopy: Group = { ...group, options: suboptions };\n  if (Object.prototype.hasOwnProperty.call(group, 'disabled')) {\n    groupCopy.disabled = group.disabled;\n  }\n  return groupCopy;\n}\n\nexport function findOptionWithOffset(\n  options: any,\n  text: string,\n  matcher: MatcherFn,\n  offset: number,\n  skipDisabled = false,\n): any {\n  let counter = 0;\n  let foundBeforeOffset;\n  let foundAfterOffset = false;\n  const canStop = () => !!foundAfterOffset;\n\n  (function walk(options: any, ancestorIsDisabled: boolean): any {\n    const length = options.length;\n\n    for (let i = 0; i < length; i++) {\n      const entry = options.objectAt ? options.objectAt(i) : options[i];\n      const entryIsDisabled = !!entry.disabled;\n      if (!skipDisabled || !entryIsDisabled) {\n        if (isGroup(entry)) {\n          walk(entry.options, ancestorIsDisabled || entryIsDisabled);\n          if (canStop()) {\n            return;\n          }\n        } else if (matcher(entry, text) >= 0) {\n          if (counter < offset) {\n            if (!foundBeforeOffset) {\n              foundBeforeOffset = entry;\n            }\n          } else {\n            foundAfterOffset = entry;\n          }\n          counter++;\n        } else {\n          counter++;\n        }\n\n        if (canStop()) {\n          return;\n        }\n      }\n    }\n  })(options, false);\n\n  return foundAfterOffset ? foundAfterOffset : foundBeforeOffset;\n}\n\nexport function filterOptions(\n  options: any,\n  text: string,\n  matcher: MatcherFn,\n  skipDisabled = false,\n): any[] {\n  const opts = [];\n  const length = options.length;\n  for (let i = 0; i < length; i++) {\n    const entry = options.objectAt ? options.objectAt(i) : options[i];\n    if (!skipDisabled || !entry.disabled) {\n      if (isGroup(entry)) {\n        const suboptions = filterOptions(\n          entry.options,\n          text,\n          matcher,\n          skipDisabled,\n        );\n        if (suboptions.length > 0) {\n          opts.push(copyGroup(entry, suboptions));\n        }\n      } else if (matcher(entry, text) >= 0) {\n        opts.push(entry);\n      }\n    }\n  }\n  return opts;\n}\n\nexport function defaultHighlighted<T>({\n  results,\n  highlighted,\n  selected,\n}: {\n  results: T[];\n  highlighted: T | undefined;\n  selected: T | undefined;\n}): T {\n  const option = highlighted || selected;\n  if (option === undefined || indexOfOption(results, option) === -1) {\n    return advanceSelectableOption(results, option, 1);\n  }\n  return option;\n}\n\nexport function advanceSelectableOption(\n  options: any,\n  currentOption: any,\n  step: 1 | -1,\n) {\n  const resultsLength = countOptions(options);\n  let startIndex = Math.min(\n    Math.max(indexOfOption(options, currentOption) + step, 0),\n    resultsLength - 1,\n  );\n  let { disabled, option } = optionAtIndex(options, startIndex);\n  while (option && disabled) {\n    const next = optionAtIndex(options, (startIndex += step));\n    disabled = next.disabled;\n    option = next.option;\n  }\n  return option;\n}\n\nconst DIACRITICS: Record<string, string> = {\n  'Ⓐ': 'A',\n  Ａ: 'A',\n  À: 'A',\n  Á: 'A',\n  Â: 'A',\n  Ầ: 'A',\n  Ấ: 'A',\n  Ẫ: 'A',\n  Ẩ: 'A',\n  Ã: 'A',\n  Ā: 'A',\n  Ă: 'A',\n  Ằ: 'A',\n  Ắ: 'A',\n  Ẵ: 'A',\n  Ẳ: 'A',\n  Ȧ: 'A',\n  Ǡ: 'A',\n  Ä: 'A',\n  Ǟ: 'A',\n  Ả: 'A',\n  Å: 'A',\n  Ǻ: 'A',\n  Ǎ: 'A',\n  Ȁ: 'A',\n  Ȃ: 'A',\n  Ạ: 'A',\n  Ậ: 'A',\n  Ặ: 'A',\n  Ḁ: 'A',\n  Ą: 'A',\n  Ⱥ: 'A',\n  Ɐ: 'A',\n  Ꜳ: 'AA',\n  Æ: 'AE',\n  Ǽ: 'AE',\n  Ǣ: 'AE',\n  Ꜵ: 'AO',\n  Ꜷ: 'AU',\n  Ꜹ: 'AV',\n  Ꜻ: 'AV',\n  Ꜽ: 'AY',\n  'Ⓑ': 'B',\n  Ｂ: 'B',\n  Ḃ: 'B',\n  Ḅ: 'B',\n  Ḇ: 'B',\n  Ƀ: 'B',\n  Ƃ: 'B',\n  Ɓ: 'B',\n  'Ⓒ': 'C',\n  Ｃ: 'C',\n  Ć: 'C',\n  Ĉ: 'C',\n  Ċ: 'C',\n  Č: 'C',\n  Ç: 'C',\n  Ḉ: 'C',\n  Ƈ: 'C',\n  Ȼ: 'C',\n  Ꜿ: 'C',\n  'Ⓓ': 'D',\n  Ｄ: 'D',\n  Ḋ: 'D',\n  Ď: 'D',\n  Ḍ: 'D',\n  Ḑ: 'D',\n  Ḓ: 'D',\n  Ḏ: 'D',\n  Đ: 'D',\n  Ƌ: 'D',\n  Ɗ: 'D',\n  Ɖ: 'D',\n  Ꝺ: 'D',\n  Ǳ: 'DZ',\n  Ǆ: 'DZ',\n  ǲ: 'Dz',\n  ǅ: 'Dz',\n  'Ⓔ': 'E',\n  Ｅ: 'E',\n  È: 'E',\n  É: 'E',\n  Ê: 'E',\n  Ề: 'E',\n  Ế: 'E',\n  Ễ: 'E',\n  Ể: 'E',\n  Ẽ: 'E',\n  Ē: 'E',\n  Ḕ: 'E',\n  Ḗ: 'E',\n  Ĕ: 'E',\n  Ė: 'E',\n  Ë: 'E',\n  Ẻ: 'E',\n  Ě: 'E',\n  Ȅ: 'E',\n  Ȇ: 'E',\n  Ẹ: 'E',\n  Ệ: 'E',\n  Ȩ: 'E',\n  Ḝ: 'E',\n  Ę: 'E',\n  Ḙ: 'E',\n  Ḛ: 'E',\n  Ɛ: 'E',\n  Ǝ: 'E',\n  'Ⓕ': 'F',\n  Ｆ: 'F',\n  Ḟ: 'F',\n  Ƒ: 'F',\n  Ꝼ: 'F',\n  'Ⓖ': 'G',\n  Ｇ: 'G',\n  Ǵ: 'G',\n  Ĝ: 'G',\n  Ḡ: 'G',\n  Ğ: 'G',\n  Ġ: 'G',\n  Ǧ: 'G',\n  Ģ: 'G',\n  Ǥ: 'G',\n  Ɠ: 'G',\n  Ꞡ: 'G',\n  Ᵹ: 'G',\n  Ꝿ: 'G',\n  'Ⓗ': 'H',\n  Ｈ: 'H',\n  Ĥ: 'H',\n  Ḣ: 'H',\n  Ḧ: 'H',\n  Ȟ: 'H',\n  Ḥ: 'H',\n  Ḩ: 'H',\n  Ḫ: 'H',\n  Ħ: 'H',\n  Ⱨ: 'H',\n  Ⱶ: 'H',\n  Ɥ: 'H',\n  'Ⓘ': 'I',\n  Ｉ: 'I',\n  Ì: 'I',\n  Í: 'I',\n  Î: 'I',\n  Ĩ: 'I',\n  Ī: 'I',\n  Ĭ: 'I',\n  İ: 'I',\n  Ï: 'I',\n  Ḯ: 'I',\n  Ỉ: 'I',\n  Ǐ: 'I',\n  Ȉ: 'I',\n  Ȋ: 'I',\n  Ị: 'I',\n  Į: 'I',\n  Ḭ: 'I',\n  Ɨ: 'I',\n  'Ⓙ': 'J',\n  Ｊ: 'J',\n  Ĵ: 'J',\n  Ɉ: 'J',\n  'Ⓚ': 'K',\n  Ｋ: 'K',\n  Ḱ: 'K',\n  Ǩ: 'K',\n  Ḳ: 'K',\n  Ķ: 'K',\n  Ḵ: 'K',\n  Ƙ: 'K',\n  Ⱪ: 'K',\n  Ꝁ: 'K',\n  Ꝃ: 'K',\n  Ꝅ: 'K',\n  Ꞣ: 'K',\n  'Ⓛ': 'L',\n  Ｌ: 'L',\n  Ŀ: 'L',\n  Ĺ: 'L',\n  Ľ: 'L',\n  Ḷ: 'L',\n  Ḹ: 'L',\n  Ļ: 'L',\n  Ḽ: 'L',\n  Ḻ: 'L',\n  Ł: 'L',\n  Ƚ: 'L',\n  Ɫ: 'L',\n  Ⱡ: 'L',\n  Ꝉ: 'L',\n  Ꝇ: 'L',\n  Ꞁ: 'L',\n  Ǉ: 'LJ',\n  ǈ: 'Lj',\n  'Ⓜ': 'M',\n  Ｍ: 'M',\n  Ḿ: 'M',\n  Ṁ: 'M',\n  Ṃ: 'M',\n  Ɱ: 'M',\n  Ɯ: 'M',\n  'Ⓝ': 'N',\n  Ｎ: 'N',\n  Ǹ: 'N',\n  Ń: 'N',\n  Ñ: 'N',\n  Ṅ: 'N',\n  Ň: 'N',\n  Ṇ: 'N',\n  Ņ: 'N',\n  Ṋ: 'N',\n  Ṉ: 'N',\n  Ƞ: 'N',\n  Ɲ: 'N',\n  Ꞑ: 'N',\n  Ꞥ: 'N',\n  Ǌ: 'NJ',\n  ǋ: 'Nj',\n  'Ⓞ': 'O',\n  Ｏ: 'O',\n  Ò: 'O',\n  Ó: 'O',\n  Ô: 'O',\n  Ồ: 'O',\n  Ố: 'O',\n  Ỗ: 'O',\n  Ổ: 'O',\n  Õ: 'O',\n  Ṍ: 'O',\n  Ȭ: 'O',\n  Ṏ: 'O',\n  Ō: 'O',\n  Ṑ: 'O',\n  Ṓ: 'O',\n  Ŏ: 'O',\n  Ȯ: 'O',\n  Ȱ: 'O',\n  Ö: 'O',\n  Ȫ: 'O',\n  Ỏ: 'O',\n  Ő: 'O',\n  Ǒ: 'O',\n  Ȍ: 'O',\n  Ȏ: 'O',\n  Ơ: 'O',\n  Ờ: 'O',\n  Ớ: 'O',\n  Ỡ: 'O',\n  Ở: 'O',\n  Ợ: 'O',\n  Ọ: 'O',\n  Ộ: 'O',\n  Ǫ: 'O',\n  Ǭ: 'O',\n  Ø: 'O',\n  Ǿ: 'O',\n  Ɔ: 'O',\n  Ɵ: 'O',\n  Ꝋ: 'O',\n  Ꝍ: 'O',\n  Ƣ: 'OI',\n  Ꝏ: 'OO',\n  Ȣ: 'OU',\n  'Ⓟ': 'P',\n  Ｐ: 'P',\n  Ṕ: 'P',\n  Ṗ: 'P',\n  Ƥ: 'P',\n  Ᵽ: 'P',\n  Ꝑ: 'P',\n  Ꝓ: 'P',\n  Ꝕ: 'P',\n  'Ⓠ': 'Q',\n  Ｑ: 'Q',\n  Ꝗ: 'Q',\n  Ꝙ: 'Q',\n  Ɋ: 'Q',\n  'Ⓡ': 'R',\n  Ｒ: 'R',\n  Ŕ: 'R',\n  Ṙ: 'R',\n  Ř: 'R',\n  Ȑ: 'R',\n  Ȓ: 'R',\n  Ṛ: 'R',\n  Ṝ: 'R',\n  Ŗ: 'R',\n  Ṟ: 'R',\n  Ɍ: 'R',\n  Ɽ: 'R',\n  Ꝛ: 'R',\n  Ꞧ: 'R',\n  Ꞃ: 'R',\n  'Ⓢ': 'S',\n  Ｓ: 'S',\n  ẞ: 'S',\n  Ś: 'S',\n  Ṥ: 'S',\n  Ŝ: 'S',\n  Ṡ: 'S',\n  Š: 'S',\n  Ṧ: 'S',\n  Ṣ: 'S',\n  Ṩ: 'S',\n  Ș: 'S',\n  Ş: 'S',\n  Ȿ: 'S',\n  Ꞩ: 'S',\n  Ꞅ: 'S',\n  'Ⓣ': 'T',\n  Ｔ: 'T',\n  Ṫ: 'T',\n  Ť: 'T',\n  Ṭ: 'T',\n  Ț: 'T',\n  Ţ: 'T',\n  Ṱ: 'T',\n  Ṯ: 'T',\n  Ŧ: 'T',\n  Ƭ: 'T',\n  Ʈ: 'T',\n  Ⱦ: 'T',\n  Ꞇ: 'T',\n  Ꜩ: 'TZ',\n  'Ⓤ': 'U',\n  Ｕ: 'U',\n  Ù: 'U',\n  Ú: 'U',\n  Û: 'U',\n  Ũ: 'U',\n  Ṹ: 'U',\n  Ū: 'U',\n  Ṻ: 'U',\n  Ŭ: 'U',\n  Ü: 'U',\n  Ǜ: 'U',\n  Ǘ: 'U',\n  Ǖ: 'U',\n  Ǚ: 'U',\n  Ủ: 'U',\n  Ů: 'U',\n  Ű: 'U',\n  Ǔ: 'U',\n  Ȕ: 'U',\n  Ȗ: 'U',\n  Ư: 'U',\n  Ừ: 'U',\n  Ứ: 'U',\n  Ữ: 'U',\n  Ử: 'U',\n  Ự: 'U',\n  Ụ: 'U',\n  Ṳ: 'U',\n  Ų: 'U',\n  Ṷ: 'U',\n  Ṵ: 'U',\n  Ʉ: 'U',\n  'Ⓥ': 'V',\n  Ｖ: 'V',\n  Ṽ: 'V',\n  Ṿ: 'V',\n  Ʋ: 'V',\n  Ꝟ: 'V',\n  Ʌ: 'V',\n  Ꝡ: 'VY',\n  'Ⓦ': 'W',\n  Ｗ: 'W',\n  Ẁ: 'W',\n  Ẃ: 'W',\n  Ŵ: 'W',\n  Ẇ: 'W',\n  Ẅ: 'W',\n  Ẉ: 'W',\n  Ⱳ: 'W',\n  'Ⓧ': 'X',\n  Ｘ: 'X',\n  Ẋ: 'X',\n  Ẍ: 'X',\n  'Ⓨ': 'Y',\n  Ｙ: 'Y',\n  Ỳ: 'Y',\n  Ý: 'Y',\n  Ŷ: 'Y',\n  Ỹ: 'Y',\n  Ȳ: 'Y',\n  Ẏ: 'Y',\n  Ÿ: 'Y',\n  Ỷ: 'Y',\n  Ỵ: 'Y',\n  Ƴ: 'Y',\n  Ɏ: 'Y',\n  Ỿ: 'Y',\n  'Ⓩ': 'Z',\n  Ｚ: 'Z',\n  Ź: 'Z',\n  Ẑ: 'Z',\n  Ż: 'Z',\n  Ž: 'Z',\n  Ẓ: 'Z',\n  Ẕ: 'Z',\n  Ƶ: 'Z',\n  Ȥ: 'Z',\n  Ɀ: 'Z',\n  Ⱬ: 'Z',\n  Ꝣ: 'Z',\n  'ⓐ': 'a',\n  ａ: 'a',\n  ẚ: 'a',\n  à: 'a',\n  á: 'a',\n  â: 'a',\n  ầ: 'a',\n  ấ: 'a',\n  ẫ: 'a',\n  ẩ: 'a',\n  ã: 'a',\n  ā: 'a',\n  ă: 'a',\n  ằ: 'a',\n  ắ: 'a',\n  ẵ: 'a',\n  ẳ: 'a',\n  ȧ: 'a',\n  ǡ: 'a',\n  ä: 'a',\n  ǟ: 'a',\n  ả: 'a',\n  å: 'a',\n  ǻ: 'a',\n  ǎ: 'a',\n  ȁ: 'a',\n  ȃ: 'a',\n  ạ: 'a',\n  ậ: 'a',\n  ặ: 'a',\n  ḁ: 'a',\n  ą: 'a',\n  ⱥ: 'a',\n  ɐ: 'a',\n  ꜳ: 'aa',\n  æ: 'ae',\n  ǽ: 'ae',\n  ǣ: 'ae',\n  ꜵ: 'ao',\n  ꜷ: 'au',\n  ꜹ: 'av',\n  ꜻ: 'av',\n  ꜽ: 'ay',\n  'ⓑ': 'b',\n  ｂ: 'b',\n  ḃ: 'b',\n  ḅ: 'b',\n  ḇ: 'b',\n  ƀ: 'b',\n  ƃ: 'b',\n  ɓ: 'b',\n  'ⓒ': 'c',\n  ｃ: 'c',\n  ć: 'c',\n  ĉ: 'c',\n  ċ: 'c',\n  č: 'c',\n  ç: 'c',\n  ḉ: 'c',\n  ƈ: 'c',\n  ȼ: 'c',\n  ꜿ: 'c',\n  ↄ: 'c',\n  'ⓓ': 'd',\n  ｄ: 'd',\n  ḋ: 'd',\n  ď: 'd',\n  ḍ: 'd',\n  ḑ: 'd',\n  ḓ: 'd',\n  ḏ: 'd',\n  đ: 'd',\n  ƌ: 'd',\n  ɖ: 'd',\n  ɗ: 'd',\n  ꝺ: 'd',\n  ǳ: 'dz',\n  ǆ: 'dz',\n  'ⓔ': 'e',\n  ｅ: 'e',\n  è: 'e',\n  é: 'e',\n  ê: 'e',\n  ề: 'e',\n  ế: 'e',\n  ễ: 'e',\n  ể: 'e',\n  ẽ: 'e',\n  ē: 'e',\n  ḕ: 'e',\n  ḗ: 'e',\n  ĕ: 'e',\n  ė: 'e',\n  ë: 'e',\n  ẻ: 'e',\n  ě: 'e',\n  ȅ: 'e',\n  ȇ: 'e',\n  ẹ: 'e',\n  ệ: 'e',\n  ȩ: 'e',\n  ḝ: 'e',\n  ę: 'e',\n  ḙ: 'e',\n  ḛ: 'e',\n  ɇ: 'e',\n  ɛ: 'e',\n  ǝ: 'e',\n  'ⓕ': 'f',\n  ｆ: 'f',\n  ḟ: 'f',\n  ƒ: 'f',\n  ꝼ: 'f',\n  'ⓖ': 'g',\n  ｇ: 'g',\n  ǵ: 'g',\n  ĝ: 'g',\n  ḡ: 'g',\n  ğ: 'g',\n  ġ: 'g',\n  ǧ: 'g',\n  ģ: 'g',\n  ǥ: 'g',\n  ɠ: 'g',\n  ꞡ: 'g',\n  ᵹ: 'g',\n  ꝿ: 'g',\n  'ⓗ': 'h',\n  ｈ: 'h',\n  ĥ: 'h',\n  ḣ: 'h',\n  ḧ: 'h',\n  ȟ: 'h',\n  ḥ: 'h',\n  ḩ: 'h',\n  ḫ: 'h',\n  ẖ: 'h',\n  ħ: 'h',\n  ⱨ: 'h',\n  ⱶ: 'h',\n  ɥ: 'h',\n  ƕ: 'hv',\n  'ⓘ': 'i',\n  ｉ: 'i',\n  ì: 'i',\n  í: 'i',\n  î: 'i',\n  ĩ: 'i',\n  ī: 'i',\n  ĭ: 'i',\n  ï: 'i',\n  ḯ: 'i',\n  ỉ: 'i',\n  ǐ: 'i',\n  ȉ: 'i',\n  ȋ: 'i',\n  ị: 'i',\n  į: 'i',\n  ḭ: 'i',\n  ɨ: 'i',\n  ı: 'i',\n  'ⓙ': 'j',\n  ｊ: 'j',\n  ĵ: 'j',\n  ǰ: 'j',\n  ɉ: 'j',\n  'ⓚ': 'k',\n  ｋ: 'k',\n  ḱ: 'k',\n  ǩ: 'k',\n  ḳ: 'k',\n  ķ: 'k',\n  ḵ: 'k',\n  ƙ: 'k',\n  ⱪ: 'k',\n  ꝁ: 'k',\n  ꝃ: 'k',\n  ꝅ: 'k',\n  ꞣ: 'k',\n  'ⓛ': 'l',\n  ｌ: 'l',\n  ŀ: 'l',\n  ĺ: 'l',\n  ľ: 'l',\n  ḷ: 'l',\n  ḹ: 'l',\n  ļ: 'l',\n  ḽ: 'l',\n  ḻ: 'l',\n  ſ: 'l',\n  ł: 'l',\n  ƚ: 'l',\n  ɫ: 'l',\n  ⱡ: 'l',\n  ꝉ: 'l',\n  ꞁ: 'l',\n  ꝇ: 'l',\n  ǉ: 'lj',\n  'ⓜ': 'm',\n  ｍ: 'm',\n  ḿ: 'm',\n  ṁ: 'm',\n  ṃ: 'm',\n  ɱ: 'm',\n  ɯ: 'm',\n  'ⓝ': 'n',\n  ｎ: 'n',\n  ǹ: 'n',\n  ń: 'n',\n  ñ: 'n',\n  ṅ: 'n',\n  ň: 'n',\n  ṇ: 'n',\n  ņ: 'n',\n  ṋ: 'n',\n  ṉ: 'n',\n  ƞ: 'n',\n  ɲ: 'n',\n  ŉ: 'n',\n  ꞑ: 'n',\n  ꞥ: 'n',\n  ǌ: 'nj',\n  'ⓞ': 'o',\n  ｏ: 'o',\n  ò: 'o',\n  ó: 'o',\n  ô: 'o',\n  ồ: 'o',\n  ố: 'o',\n  ỗ: 'o',\n  ổ: 'o',\n  õ: 'o',\n  ṍ: 'o',\n  ȭ: 'o',\n  ṏ: 'o',\n  ō: 'o',\n  ṑ: 'o',\n  ṓ: 'o',\n  ŏ: 'o',\n  ȯ: 'o',\n  ȱ: 'o',\n  ö: 'o',\n  ȫ: 'o',\n  ỏ: 'o',\n  ő: 'o',\n  ǒ: 'o',\n  ȍ: 'o',\n  ȏ: 'o',\n  ơ: 'o',\n  ờ: 'o',\n  ớ: 'o',\n  ỡ: 'o',\n  ở: 'o',\n  ợ: 'o',\n  ọ: 'o',\n  ộ: 'o',\n  ǫ: 'o',\n  ǭ: 'o',\n  ø: 'o',\n  ǿ: 'o',\n  ɔ: 'o',\n  ꝋ: 'o',\n  ꝍ: 'o',\n  ɵ: 'o',\n  ƣ: 'oi',\n  ȣ: 'ou',\n  ꝏ: 'oo',\n  'ⓟ': 'p',\n  ｐ: 'p',\n  ṕ: 'p',\n  ṗ: 'p',\n  ƥ: 'p',\n  ᵽ: 'p',\n  ꝑ: 'p',\n  ꝓ: 'p',\n  ꝕ: 'p',\n  'ⓠ': 'q',\n  ｑ: 'q',\n  ɋ: 'q',\n  ꝗ: 'q',\n  ꝙ: 'q',\n  'ⓡ': 'r',\n  ｒ: 'r',\n  ŕ: 'r',\n  ṙ: 'r',\n  ř: 'r',\n  ȑ: 'r',\n  ȓ: 'r',\n  ṛ: 'r',\n  ṝ: 'r',\n  ŗ: 'r',\n  ṟ: 'r',\n  ɍ: 'r',\n  ɽ: 'r',\n  ꝛ: 'r',\n  ꞧ: 'r',\n  ꞃ: 'r',\n  'ⓢ': 's',\n  ｓ: 's',\n  ß: 's',\n  ś: 's',\n  ṥ: 's',\n  ŝ: 's',\n  ṡ: 's',\n  š: 's',\n  ṧ: 's',\n  ṣ: 's',\n  ṩ: 's',\n  ș: 's',\n  ş: 's',\n  ȿ: 's',\n  ꞩ: 's',\n  ꞅ: 's',\n  ẛ: 's',\n  'ⓣ': 't',\n  ｔ: 't',\n  ṫ: 't',\n  ẗ: 't',\n  ť: 't',\n  ṭ: 't',\n  ț: 't',\n  ţ: 't',\n  ṱ: 't',\n  ṯ: 't',\n  ŧ: 't',\n  ƭ: 't',\n  ʈ: 't',\n  ⱦ: 't',\n  ꞇ: 't',\n  ꜩ: 'tz',\n  'ⓤ': 'u',\n  ｕ: 'u',\n  ù: 'u',\n  ú: 'u',\n  û: 'u',\n  ũ: 'u',\n  ṹ: 'u',\n  ū: 'u',\n  ṻ: 'u',\n  ŭ: 'u',\n  ü: 'u',\n  ǜ: 'u',\n  ǘ: 'u',\n  ǖ: 'u',\n  ǚ: 'u',\n  ủ: 'u',\n  ů: 'u',\n  ű: 'u',\n  ǔ: 'u',\n  ȕ: 'u',\n  ȗ: 'u',\n  ư: 'u',\n  ừ: 'u',\n  ứ: 'u',\n  ữ: 'u',\n  ử: 'u',\n  ự: 'u',\n  ụ: 'u',\n  ṳ: 'u',\n  ų: 'u',\n  ṷ: 'u',\n  ṵ: 'u',\n  ʉ: 'u',\n  'ⓥ': 'v',\n  ｖ: 'v',\n  ṽ: 'v',\n  ṿ: 'v',\n  ʋ: 'v',\n  ꝟ: 'v',\n  ʌ: 'v',\n  ꝡ: 'vy',\n  'ⓦ': 'w',\n  ｗ: 'w',\n  ẁ: 'w',\n  ẃ: 'w',\n  ŵ: 'w',\n  ẇ: 'w',\n  ẅ: 'w',\n  ẘ: 'w',\n  ẉ: 'w',\n  ⱳ: 'w',\n  'ⓧ': 'x',\n  ｘ: 'x',\n  ẋ: 'x',\n  ẍ: 'x',\n  'ⓨ': 'y',\n  ｙ: 'y',\n  ỳ: 'y',\n  ý: 'y',\n  ŷ: 'y',\n  ỹ: 'y',\n  ȳ: 'y',\n  ẏ: 'y',\n  ÿ: 'y',\n  ỷ: 'y',\n  ẙ: 'y',\n  ỵ: 'y',\n  ƴ: 'y',\n  ɏ: 'y',\n  ỿ: 'y',\n  'ⓩ': 'z',\n  ｚ: 'z',\n  ź: 'z',\n  ẑ: 'z',\n  ż: 'z',\n  ž: 'z',\n  ẓ: 'z',\n  ẕ: 'z',\n  ƶ: 'z',\n  ȥ: 'z',\n  ɀ: 'z',\n  ⱬ: 'z',\n  ꝣ: 'z',\n  Ά: 'Α',\n  Έ: 'Ε',\n  Ή: 'Η',\n  Ί: 'Ι',\n  Ϊ: 'Ι',\n  Ό: 'Ο',\n  Ύ: 'Υ',\n  Ϋ: 'Υ',\n  Ώ: 'Ω',\n  ά: 'α',\n  έ: 'ε',\n  ή: 'η',\n  ί: 'ι',\n  ϊ: 'ι',\n  ΐ: 'ι',\n  ό: 'ο',\n  ύ: 'υ',\n  ϋ: 'υ',\n  ΰ: 'υ',\n  ω: 'ω',\n  ς: 'σ',\n};\n\n// Copied from Select2\nexport function stripDiacritics(text: string | number) {\n  // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n  function match(a: string) {\n    return DIACRITICS[a] || a;\n  }\n\n  return `${text}`.replace(/[^\\u0000-\\u007E]/g, match); // eslint-disable-line\n}\n\nexport function defaultMatcher(value: string, text: string) {\n  return stripDiacritics(value)\n    .toUpperCase()\n    .indexOf(stripDiacritics(text).toUpperCase());\n}\n\nexport function defaultTypeAheadMatcher(value: string, text: string) {\n  return stripDiacritics(value)\n    .toUpperCase()\n    .startsWith(stripDiacritics(text).toUpperCase())\n    ? 1\n    : -1;\n}\n","import RSVP from 'rsvp';\nimport Evented from '@ember/object/evented';\nimport EmberObject from '@ember/object';\n\n/**\n  The base class for all authenticators. __This serves as a starting point for\n  implementing custom authenticators and must not be used directly.__\n\n  The authenticator authenticates the session. The actual mechanism used to do\n  this might, e.g., post a set of credentials to a server and in exchange\n  retrieve an access token, initiating authentication against an external\n  provider like Facebook, etc. The details depend on the specific authenticator.\n  Upon successful authentication, any data that the authenticator receives and\n  resolves via the promise returned from the\n  {@linkplain BaseAuthenticator.authenticate}\n  method is stored in the session's {@linkplain SessionService.data}.\n\n  The authenticator also decides whether a set of data that was restored from\n  the session store (see {@linkplain BaseStore.restore}) makes up an\n  authenticated session or not.\n\n  __Authenticators for an application are defined in the `app/authenticators`\n  directory__, e.g.:\n\n  ```js\n  // app/authenticators/oauth2.js\n  import OAuth2PasswordGrantAuthenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';\n\n  export default class OAuth2Authenticator extends OAuth2PasswordGrantAuthenticator {\n    ...\n  }\n  ```\n\n  and can then be used via the name Ember CLI automatically registers for them\n  within the Ember container.\n\n  ```js\n  // app/components/login-form.js\n  import Component from '@ember/component';\n  import { inject as service } from '@ember/service';\n  import { action } from '@ember/object';\n\n  export default class LoginFormComponent extends Component {\n    &#64;service session;\n\n    &#64;action\n    authenticate() {\n      this.session.authenticate('authenticator:oauth2');\n    }\n  }\n  ```\n\n  @class BaseAuthenticator\n  @extends Ember.Object\n  @uses Ember.Evented\n  @public\n*/\nexport default EmberObject.extend(Evented, {\n  /**\n    __Triggered when the authentication data is updated by the authenticator\n    due to an external or scheduled event__. This might happen, e.g., if the\n    authenticator refreshes an expired token or an event is triggered from an\n    external authentication provider that the authenticator uses. The session\n    handles that event, passes the updated data back to the authenticator's\n    {@linkplain BaseAuthenticator.restore}\n    method and handles the result of that invocation accordingly.\n\n    @memberof BaseAuthenticator\n    @event sessionDataUpdated\n    @param {Object} data The updated session data\n    @public\n  */\n\n  /**\n    __Triggered when the authentication data is invalidated by the authenticator\n    due to an external or scheduled event__. This might happen, e.g., if a token\n    expires or an event is triggered from an external authentication provider\n    that the authenticator uses. The session handles the event and will\n    invalidate itself when it is triggered.\n\n    @memberof BaseAuthenticator\n    @event sessionDataInvalidated\n    @public\n  */\n\n  /**\n    Restores the session from a session data object. __This method is invoked\n    by the session either on application startup if session data is restored\n    from the session store__ or when properties in the store change due to\n    external events (e.g. in another tab) and the new session data needs to be\n    validated for whether it constitutes an authenticated session.\n\n    __This method returns a promise. A resolving promise results in the session\n    becoming or remaining authenticated.__ Any data the promise resolves with\n    will be saved in and accessible via the session service's\n    `data.authenticated` property (see\n    {@linkplain SessionService.data}. A rejecting\n    promise indicates that `data` does not constitute a valid session and will\n    result in the session being invalidated or remaining unauthenticated.\n\n    The `BaseAuthenticator`'s implementation always returns a rejecting\n    promise. __This method must be overridden in subclasses.__\n\n    @memberof BaseAuthenticator\n    @method restore\n    @param {Object} data The data to restore the session from\n    @return {Ember.RSVP.Promise} A promise that when it resolves results in the session becoming or remaining authenticated\n    @member\n    @public\n  */\n  restore() {\n    return RSVP.reject();\n  },\n\n  /**\n    Authenticates the session with the specified `args`. These options vary\n    depending on the actual authentication mechanism the authenticator\n    implements (e.g. a set of credentials or a Facebook account id etc.). __The\n    session will invoke this method in order to authenticate itself__ (see\n    {@linkplain SessionService.authenticate}).\n\n    __This method returns a promise. A resolving promise will result in the\n    session becoming authenticated.__ Any data the promise resolves with will\n    be saved in and accessible via the session service's `data.authenticated`\n    property (see {@linkplain SessionService.data}).\n    A rejecting promise indicates that authentication failed and will result in\n    the session remaining unauthenticated.\n\n    The `BaseAuthenticator`'s implementation always returns a rejecting promise\n    and thus never authenticates the session. __This method must be overridden\n    in subclasses__.\n\n    @memberof BaseAuthenticator\n    @method authenticate\n    @param {Any} [...args] The arguments that the authenticator requires to authenticate the session\n    @return {Ember.RSVP.Promise} A promise that when it resolves results in the session becoming authenticated\n    @member\n    @public\n  */\n  authenticate() {\n    return RSVP.reject();\n  },\n\n  /**\n    This method is invoked as a callback when the session is invalidated. While\n    the session will invalidate itself and clear all authenticated session data,\n    it might be necessary for some authenticators to perform additional tasks\n    (e.g. invalidating an access token on the server side).\n    This method returns a promise. A resolving promise will result in the\n    session becoming unauthenticated.__ A rejecting promise will result in\n    invalidation being intercepted and the session remaining authenticated.\n    The `BaseAuthenticator`'s implementation always returns a resolving promise\n    and thus never intercepts session invalidation. __This method doesn't have\n    to be overridden in custom authenticators if no actions need to be\n    performed on session invalidation.\n\n    @memberof BaseAuthenticator\n    @method invalidate\n    @param {Object} data The current authenticated session data\n    @param {Array} ...args additional arguments as required by the authenticator\n    @return {Ember.RSVP.Promise} A promise that when it resolves results in the session being invalidated\n    @member\n    @public\n  */\n  invalidate() {\n    return RSVP.resolve();\n  },\n});\n","const DEFAULTS = {\n  rootURL: '',\n  routeAfterAuthentication: 'index',\n};\n\n/**\n  Ember Simple Auth's configuration object.\n\n  @class Configuration\n  @extends Object\n  @public\n*/\nexport default {\n  /**\n    The root URL of the application as configured in `config/environment.js`.\n    @memberof Configuration\n    @property rootURL\n    @readOnly\n    @static\n    @type String\n    @default ''\n    @public\n  */\n  rootURL: DEFAULTS.rootURL,\n\n  /**\n    The route to transition to after successful authentication.\n\n    @memberof Configuration\n    @property routeAfterAuthentication\n    @readOnly\n    @static\n    @type String\n    @default 'index'\n    @public\n  */\n  routeAfterAuthentication: DEFAULTS.routeAfterAuthentication,\n\n  load(config) {\n    this.rootURL = config.rootURL !== undefined ? config.rootURL : DEFAULTS.rootURL;\n    this.routeAfterAuthentication =\n      config.routeAfterAuthentication !== undefined\n        ? config.routeAfterAuthentication\n        : DEFAULTS.routeAfterAuthentication;\n  },\n};\n","import RSVP from 'rsvp';\nimport { isEmpty, isNone } from '@ember/utils';\nimport ObjectProxy from '@ember/object/proxy';\nimport Evented from '@ember/object/evented';\nimport { set } from '@ember/object';\nimport { debug, assert } from '@ember/debug';\nimport { getOwner, setOwner } from '@ember/application';\nimport { isTesting } from '@embroider/macros';\n\n/**\n  __An internal implementation of Session. Communicates with stores and emits events.__\n\n  @class InternalSession\n  @extends ObjectProxy\n  @private\n*/\n\nexport default ObjectProxy.extend(Evented, {\n  /**\n    Triggered whenever the session is successfully authenticated. This happens\n    when the session gets authenticated via\n    {@linkplain SessionService.authenticate} but also\n    when the session is authenticated in another tab or window of the same\n    application and the session state gets synchronized across tabs or windows\n    via the store (see\n    {@linkplain BaseStore.sessionDataUpdated}).\n\n    @memberof InternalSession\n    @event authenticationSucceeded\n    @private\n  */\n\n  /**\n    Triggered whenever the session is successfully invalidated. This happens\n    when the session gets invalidated via\n    {@linkplain SessionService.invalidate} but also\n    when the session is invalidated in another tab or window of the same\n    application and the session state gets synchronized across tabs or windows\n    via the store (see\n    {@linkplain BaseStore.sessionDataUpdated}.\n\n    @memberof InternalSession\n    @event invalidationSucceeded\n    @private\n  */\n  authenticator: null,\n  store: null,\n  isAuthenticated: false,\n  attemptedTransition: null,\n\n  init() {\n    this._super(...arguments);\n    this.set('content', { authenticated: {} });\n    let storeFactory = 'session-store:application';\n    if (isTesting()) {\n      storeFactory = 'session-store:test';\n    }\n\n    this.set('store', getOwner(this).lookup(storeFactory));\n    this._busy = false;\n    this._bindToStoreEvents();\n  },\n\n  authenticate(authenticatorFactory, ...args) {\n    this._busy = true;\n    assert(\n      `Session#authenticate requires the authenticator to be specified, was \"${authenticatorFactory}\"!`,\n      !isEmpty(authenticatorFactory)\n    );\n    const authenticator = this._lookupAuthenticator(authenticatorFactory);\n\n    return authenticator.authenticate(...args).then(\n      content => {\n        this._busy = false;\n        return this._setup(authenticatorFactory, content, true);\n      },\n      error => {\n        const rejectWithError = () => RSVP.Promise.reject(error);\n\n        this._busy = false;\n        return this._clear().then(rejectWithError, rejectWithError);\n      }\n    );\n  },\n\n  invalidate() {\n    this._busy = true;\n    this.set('attemptedTransition', null);\n\n    if (!this.get('isAuthenticated')) {\n      this._busy = false;\n      return RSVP.Promise.resolve();\n    }\n\n    let authenticator = this._lookupAuthenticator(this.authenticator);\n    return authenticator.invalidate(this.content.authenticated, ...arguments).then(\n      () => {\n        authenticator.off('sessionDataUpdated', this, this._onSessionDataUpdated);\n        this._busy = false;\n        return this._clear(true);\n      },\n      error => {\n        this.trigger('sessionInvalidationFailed', error);\n        this._busy = false;\n        return RSVP.Promise.reject(error);\n      }\n    );\n  },\n\n  restore() {\n    this._busy = true;\n    const reject = () => RSVP.Promise.reject();\n\n    return this.store.restore().then(\n      restoredContent => {\n        let { authenticator: authenticatorFactory } = restoredContent.authenticated || {};\n        if (authenticatorFactory) {\n          delete restoredContent.authenticated.authenticator;\n          const authenticator = this._lookupAuthenticator(authenticatorFactory);\n          return authenticator.restore(restoredContent.authenticated).then(\n            content => {\n              this.set('content', restoredContent);\n              this._busy = false;\n              return this._setup(authenticatorFactory, content);\n            },\n            err => {\n              debug(\n                `The authenticator \"${authenticatorFactory}\" rejected to restore the session - invalidating…`\n              );\n              if (err) {\n                debug(err);\n              }\n              this._busy = false;\n              return this._clearWithContent(restoredContent).then(reject, reject);\n            }\n          );\n        } else {\n          delete (restoredContent || {}).authenticated;\n          this._busy = false;\n          return this._clearWithContent(restoredContent).then(reject, reject);\n        }\n      },\n      () => {\n        this._busy = false;\n        return this._clear().then(reject, reject);\n      }\n    );\n  },\n\n  _setup(authenticator, authenticatedContent, trigger) {\n    trigger = Boolean(trigger) && !this.get('isAuthenticated');\n    this.setProperties({\n      isAuthenticated: true,\n      authenticator,\n      'content.authenticated': authenticatedContent,\n    });\n    this._bindToAuthenticatorEvents();\n\n    return this._updateStore().then(\n      () => {\n        if (trigger) {\n          this.trigger('authenticationSucceeded');\n        }\n      },\n      () => {\n        this.setProperties({\n          isAuthenticated: false,\n          authenticator: null,\n          'content.authenticated': {},\n        });\n      }\n    );\n  },\n\n  _clear(trigger) {\n    trigger = Boolean(trigger) && this.get('isAuthenticated');\n    this.setProperties({\n      isAuthenticated: false,\n      authenticator: null,\n      'content.authenticated': {},\n    });\n\n    return this._updateStore().then(() => {\n      if (trigger) {\n        this.trigger('invalidationSucceeded');\n      }\n    });\n  },\n\n  _clearWithContent(content, trigger) {\n    this.set('content', content);\n    return this._clear(trigger);\n  },\n\n  setUnknownProperty(key, value) {\n    assert('\"authenticated\" is a reserved key used by Ember Simple Auth!', key !== 'authenticated');\n    let result = this._super(key, value);\n    if (!/^_/.test(key)) {\n      this._updateStore();\n    }\n    return result;\n  },\n\n  _updateStore() {\n    let data = this.content;\n    if (!isEmpty(this.authenticator)) {\n      set(\n        data,\n        'authenticated',\n        Object.assign({ authenticator: this.authenticator }, data.authenticated || {})\n      );\n    }\n    return this.store.persist(data);\n  },\n\n  _bindToAuthenticatorEvents() {\n    const authenticator = this._lookupAuthenticator(this.authenticator);\n    authenticator.on('sessionDataUpdated', this, this._onSessionDataUpdated);\n    authenticator.on('sessionDataInvalidated', this, this._onSessionDataInvalidated);\n  },\n\n  _onSessionDataUpdated(content) {\n    this._setup(this.authenticator, content);\n  },\n\n  _onSessionDataInvalidated() {\n    this._clear(true);\n  },\n\n  _bindToStoreEvents() {\n    this.store.on('sessionDataUpdated', content => {\n      if (!this._busy) {\n        this._busy = true;\n        let { authenticator: authenticatorFactory } = content.authenticated || {};\n        if (authenticatorFactory) {\n          delete content.authenticated.authenticator;\n          const authenticator = this._lookupAuthenticator(authenticatorFactory);\n          authenticator.restore(content.authenticated).then(\n            authenticatedContent => {\n              this.set('content', content);\n              this._busy = false;\n              this._setup(authenticatorFactory, authenticatedContent, true);\n            },\n            err => {\n              debug(\n                `The authenticator \"${authenticatorFactory}\" rejected to restore the session - invalidating…`\n              );\n              if (err) {\n                debug(err);\n              }\n              this._busy = false;\n              this._clearWithContent(content, true);\n            }\n          );\n        } else {\n          this._busy = false;\n          this._clearWithContent(content, true);\n        }\n      }\n    });\n  },\n\n  _lookupAuthenticator(authenticatorName) {\n    let owner = getOwner(this);\n    let authenticator = owner.lookup(authenticatorName);\n    assert(\n      `No authenticator for factory \"${authenticatorName}\" could be found!`,\n      !isNone(authenticator)\n    );\n    setOwner(authenticator, owner);\n    return authenticator;\n  },\n});\n","import RSVP from 'rsvp';\nimport BaseStore from './base';\n\n/**\n  Session store that __persists data in memory and thus is not actually\n  persistent__. It does also not synchronize the session's state across\n  multiple tabs or windows as those cannot share memory. __This store is mainly\n  useful for testing and will automatically be used when running tests.__\n\n  @class EphemeralStore\n  @extends BaseStore\n  @public\n*/\nexport default BaseStore.extend({\n  init() {\n    this._super(...arguments);\n    this.clear();\n  },\n\n  /**\n    Persists `data`. This replaces all currently stored data.\n\n    @memberof EpemeralStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist(data) {\n    this._data = JSON.stringify(data || {});\n\n    return RSVP.resolve();\n  },\n\n  /**\n    Returns all data currently stored as a plain object.\n\n    @memberof EpemeralStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    const data = JSON.parse(this._data) || {};\n\n    return RSVP.resolve(data);\n  },\n\n  /**\n    Clears the store.\n\n    @memberof EpemeralStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    delete this._data;\n    this._data = '{}';\n\n    return RSVP.resolve();\n  },\n});\n","import RSVP from 'rsvp';\n\nimport { bind } from '@ember/runloop';\nimport { getOwner } from '@ember/application';\nimport BaseStore from './base';\nimport objectsAreEqual from '../utils/objects-are-equal';\nimport isFastBoot from '../utils/is-fastboot';\n\n/**\n  Session store that persists data in the browser's `localStorage`.\n\n  __`localStorage` is not available in Safari when running in private mode. In\n  general it is better to use the\n  {@linkplain AdaptiveStore} that automatically falls back to\n  the {@linkplain CookieStore} when `localStorage` is not\n  available.__\n\n  __This session store does not work with FastBoot. In order to use Ember\n  Simple Auth with FastBoot, configure the\n  {@linkplain CookieStore} as the application's session\n  store.__\n\n  @class LocalStorageStore\n  @extends BaseStore\n  @public\n*/\nexport default BaseStore.extend({\n  /**\n    The `localStorage` key the store persists data in.\n\n    @memberof LocalStorageStore\n    @property key\n    @type String\n    @default 'ember_simple_auth-session'\n    @public\n  */\n  key: 'ember_simple_auth-session',\n\n  init() {\n    this._super(...arguments);\n\n    this._isFastBoot = this.hasOwnProperty('_isFastBoot')\n      ? this._isFastBoot\n      : isFastBoot(getOwner(this));\n    this._boundHandler = bind(this, this._handleStorageEvent);\n    if (!this.get('_isFastBoot')) {\n      window.addEventListener('storage', this._boundHandler);\n    }\n  },\n\n  willDestroy() {\n    if (!this.get('_isFastBoot')) {\n      window.removeEventListener('storage', this._boundHandler);\n    }\n  },\n\n  /**\n    Persists the `data` in the `localStorage`.\n\n    @memberof LocalStorageStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist(data) {\n    this._lastData = data;\n    data = JSON.stringify(data || {});\n    localStorage.setItem(this.key, data);\n\n    return RSVP.resolve();\n  },\n\n  /**\n    Returns all data currently stored in the `localStorage` as a plain object.\n\n    @memberof LocalStorageStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    let data = localStorage.getItem(this.key);\n\n    return RSVP.resolve(JSON.parse(data) || {});\n  },\n\n  /**\n    Clears the store by deleting the\n    {@linkplain LocalStorageStore.key} from\n    `localStorage`.\n\n    @memberof LocalStorageStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    localStorage.removeItem(this.key);\n    this._lastData = {};\n\n    return RSVP.resolve();\n  },\n\n  _handleStorageEvent(e) {\n    if (e.key === this.get('key')) {\n      this.restore().then(data => {\n        if (!objectsAreEqual(data, this._lastData)) {\n          this._lastData = data;\n          this.trigger('sessionDataUpdated', data);\n        }\n      });\n    }\n  },\n});\n","import RSVP from 'rsvp';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { later, cancel, scheduleOnce, next } from '@ember/runloop';\nimport { isPresent, typeOf, isEmpty, isNone } from '@ember/utils';\nimport { A } from '@ember/array';\nimport { getOwner } from '@ember/application';\nimport { warn } from '@ember/debug';\nimport BaseStore from './base';\nimport objectsAreEqual from '../utils/objects-are-equal';\nimport { isTesting } from '@embroider/macros';\n\nconst persistingProperty = function (beforeSet = function () {}) {\n  return computed({\n    get(key) {\n      return this.get(`_${key}`);\n    },\n    set(key, value) {\n      beforeSet.apply(this, [key, value]);\n      this.set(`_${key}`, value);\n      scheduleOnce('actions', this, this.rewriteCookie);\n      return value;\n    },\n  });\n};\n\n/**\n  Session store that persists data in a cookie.\n\n  By default the cookie session store uses a session cookie that expires and is\n  deleted when the browser is closed. The cookie expiration period can be\n  configured by setting the\n  {@linkplain CookieStore.cookieExpirationTime}\n  property. This can be used to implement \"remember me\" functionality that will\n  either store the session persistently or in a session cookie depending on\n  whether the user opted in or not:\n\n  ```js\n  // app/controllers/login.js\n  import Controller from '@ember/controller';\n  import { inject as service } from '@ember/service';\n\n  export default class LoginController extends Controller {\n    &#64;service session;\n    _rememberMe = false;\n\n    get rememberMe() {\n      return this._rememberMe;\n    }\n\n    set rememberMe(value) {\n      let expirationTime = value ? (14 * 24 * 60 * 60) : null;\n      this.set('session.store.cookieExpirationTime', expirationTime);\n      this._rememberMe = value;\n    }\n  }\n  ```\n\n  __Applications that use FastBoot must use this session store by defining the\n  application session store like this:__\n\n  ```js\n  // app/session-stores/application.js\n  import CookieStore from 'ember-simple-auth/session-stores/cookie';\n\n  export default class ApplicationSessionStore extends CookieStore {}\n  ```\n\n  @class CookieStore\n  @extends BaseStore\n  @public\n*/\nexport default BaseStore.extend({\n  _syncDataTimeout: null,\n  _renewExpirationTimeout: null,\n\n  /**\n    The domain to use for the cookie, e.g., \"example.com\", \".example.com\"\n    (which includes all subdomains) or \"subdomain.example.com\". If not\n    explicitly set, the cookie domain defaults to the domain the session was\n    authenticated on.\n\n    @memberof CookieStore\n    @property cookieDomain\n    @type String\n    @default null\n    @public\n  */\n  _cookieDomain: null,\n  cookieDomain: persistingProperty(),\n\n  /**\n    Allows servers to assert that a cookie ought not to be sent along with cross-site requests,\n    which provides some protection against cross-site request forgery attacks (CSRF).\n    Available options:\n    - \"Strict\"\n    - \"Lax\"\n    @memberof CookieStore\n    @property sameSite\n    @type String\n    @default null\n    @public\n  */\n  _sameSite: null,\n  sameSite: persistingProperty(),\n\n  /**\n    The name of the cookie.\n\n    @memberof CookieStore\n    @property cookieName\n    @type String\n    @default ember_simple_auth-session\n    @public\n  */\n  _cookieName: 'ember_simple_auth-session',\n  cookieName: persistingProperty(function () {\n    this._oldCookieName = this._cookieName;\n  }),\n\n  /**\n    The path to use for the cookie, e.g., \"/\", \"/something\".\n\n    @memberof CookieStore\n    @property cookiePath\n    @type String\n    @default '/'\n    @public\n  */\n  _cookiePath: '/',\n  cookiePath: persistingProperty(),\n\n  /**\n    The expiration time for the cookie in seconds. A value of `null` will make\n    the cookie a session cookie that expires and gets deleted when the browser\n    is closed.\n\n    The recommended minimum value is 90 seconds. If your value is less than\n    that, the cookie may expire before its expiration time is extended\n    (expiration time is extended every 60 seconds).\n\n    @memberof CookieStore\n    @property cookieExpirationTime\n    @default null\n    @type Integer\n    @public\n  */\n  _cookieExpirationTime: null,\n  cookieExpirationTime: persistingProperty(function (key, value) {\n    // When nulling expiry time on purpose, we need to clear the cached value.\n    // Otherwise, `_calculateExpirationTime` will reuse it.\n    if (isNone(value)) {\n      this.get('_cookies').clear(`${this.get('cookieName')}-expiration_time`);\n    } else if (value < 90) {\n      warn(\n        'The recommended minimum value for `cookieExpirationTime` is 90 seconds. If your value is less than that, the cookie may expire before its expiration time is extended (expiration time is extended every 60 seconds).',\n        false,\n        { id: 'ember-simple-auth.cookieExpirationTime' }\n      );\n    }\n  }),\n\n  _cookies: service('cookies'),\n\n  _secureCookies() {\n    if (this.get('_fastboot.isFastBoot')) {\n      return this.get('_fastboot.request.protocol') === 'https:';\n    }\n\n    return window.location.protocol === 'https:';\n  },\n\n  _isPageVisible() {\n    if (this.get('_fastboot.isFastBoot')) {\n      return false;\n    } else {\n      const visibilityState =\n        typeof document !== 'undefined' ? document.visibilityState || 'visible' : false;\n      return visibilityState === 'visible';\n    }\n  },\n\n  init() {\n    this._super(...arguments);\n    let owner = getOwner(this);\n    if (owner && !this.hasOwnProperty('_fastboot')) {\n      this._fastboot = owner.lookup('service:fastboot');\n    }\n\n    let cachedExpirationTime = this._read(`${this.get('cookieName')}-expiration_time`);\n    if (cachedExpirationTime) {\n      this.set('cookieExpirationTime', parseInt(cachedExpirationTime, 10));\n    }\n\n    if (!this.get('_fastboot.isFastBoot')) {\n      next(() => {\n        this._syncData().then(() => {\n          this._renewExpiration();\n        });\n      });\n    } else {\n      this._renew();\n    }\n  },\n\n  /**\n    Persists the `data` in the cookie.\n\n    @memberof CookieStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist(data) {\n    this._lastData = data;\n    data = JSON.stringify(data || {});\n    let expiration = this._calculateExpirationTime();\n    this._write(data, expiration);\n    return RSVP.resolve();\n  },\n\n  /**\n    Returns all data currently stored in the cookie as a plain object.\n\n    @memberof CookieStore\n    @method restore\n    @return {RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    let data = this._read(this.get('cookieName'));\n    if (isEmpty(data)) {\n      return RSVP.resolve({});\n    } else {\n      return RSVP.resolve(JSON.parse(data));\n    }\n  },\n\n  /**\n    Clears the store by deleting the cookie.\n\n    @memberof CookieStore\n    @method clear\n    @return {RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    this._write('', 0);\n    this._lastData = {};\n    return RSVP.resolve();\n  },\n\n  _read(name) {\n    return this.get('_cookies').read(name) || '';\n  },\n\n  _calculateExpirationTime() {\n    let cachedExpirationTime = this._read(`${this.get('cookieName')}-expiration_time`);\n    cachedExpirationTime = cachedExpirationTime\n      ? new Date().getTime() + cachedExpirationTime * 1000\n      : null;\n    return this.get('cookieExpirationTime')\n      ? new Date().getTime() + this.get('cookieExpirationTime') * 1000\n      : cachedExpirationTime;\n  },\n\n  _write(value, expiration) {\n    let cookieOptions = {\n      domain: this.get('cookieDomain'),\n      expires: isEmpty(expiration) ? null : new Date(expiration),\n      path: this.get('cookiePath'),\n      secure: this._secureCookies(),\n      sameSite: this.get('sameSite'),\n    };\n    if (this._oldCookieName) {\n      A([this._oldCookieName, `${this._oldCookieName}-expiration_time`]).forEach(oldCookie => {\n        this.get('_cookies').clear(oldCookie);\n      });\n      delete this._oldCookieName;\n    }\n    this.get('_cookies').write(this.get('cookieName'), value, cookieOptions);\n    if (!isEmpty(expiration)) {\n      let expirationCookieName = `${this.get('cookieName')}-expiration_time`;\n      let cachedExpirationTime = this.get('_cookies').read(expirationCookieName);\n      this.get('_cookies').write(\n        expirationCookieName,\n        this.get('cookieExpirationTime') || cachedExpirationTime,\n        cookieOptions\n      );\n    }\n  },\n\n  _syncData() {\n    return this.restore().then(data => {\n      if (!objectsAreEqual(data, this._lastData)) {\n        this._lastData = data;\n        this.trigger('sessionDataUpdated', data);\n      }\n      if (!isTesting()) {\n        cancel(this._syncDataTimeout);\n        this._syncDataTimeout = later(this, this._syncData, 500);\n      }\n    });\n  },\n\n  _renew() {\n    return this.restore().then(data => {\n      if (!isEmpty(data) && !(data.constructor === Object && Object.keys(data).length === 0)) {\n        data = typeOf(data) === 'string' ? data : JSON.stringify(data || {});\n        let expiration = this._calculateExpirationTime();\n        this._write(data, expiration);\n      }\n    });\n  },\n\n  _renewExpiration() {\n    if (!isTesting()) {\n      cancel(this._renewExpirationTimeout);\n      this._renewExpirationTimeout = later(this, this._renewExpiration, 60000);\n    }\n    if (this._isPageVisible()) {\n      return this._renew();\n    } else {\n      return RSVP.resolve();\n    }\n  },\n\n  rewriteCookie() {\n    // if `cookieName` has not been renamed, `oldCookieName` will be nil\n    const cookieName = this._oldCookieName || this._cookieName;\n    const data = this._read(cookieName);\n    if (isPresent(data)) {\n      const expiration = this._calculateExpirationTime();\n      this._write(data, expiration);\n    }\n  },\n});\n","import Configuration from '../configuration';\nimport setupSession from './setup-session';\nimport Adaptive from '../session-stores/adaptive';\nimport LocalStorage from '../session-stores/local-storage';\nimport Cookie from '../session-stores/cookie';\n\nexport default {\n  name: 'ember-simple-auth',\n\n  initialize(registry) {\n    const ENV = registry.resolveRegistration('config:environment');\n    const config = ENV['ember-simple-auth'] || {};\n    config.rootURL = ENV.rootURL || ENV.baseURL;\n    Configuration.load(config);\n\n    registry.register('session-store:adaptive', Adaptive);\n    registry.register('session-store:cookie', Cookie);\n    registry.register('session-store:local-storage', LocalStorage);\n\n    setupSession(registry);\n  },\n};\n","import InternalSession from '../internal-session';\nimport Ephemeral from '../session-stores/ephemeral';\nimport { isTesting } from '@embroider/macros';\n\nexport default function setupSession(registry) {\n  registry.register('session:main', InternalSession);\n\n  if (isTesting()) {\n    registry.register('session-store:test', Ephemeral);\n  }\n}\n","import { alias, readOnly } from '@ember/object/computed';\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport Configuration from '../configuration';\n\nimport {\n  requireAuthentication,\n  triggerAuthentication,\n  prohibitAuthentication,\n  handleSessionAuthenticated,\n  handleSessionInvalidated,\n} from '../-internals/routing';\n\nconst SESSION_DATA_KEY_PREFIX = /^data\\./;\n\nfunction assertSetupHasBeenCalled(isSetupCalled) {\n  if (!isSetupCalled) {\n    assert(\n      \"Ember Simple Auth: session#setup wasn't called. Make sure to call session#setup in your application route's beforeModel hook.\",\n      false\n    );\n  }\n}\n\n/**\n  __The session service provides access to the current session as well as\n  methods to authenticate it, invalidate it, etc.__ It is the main interface for\n  the application to Ember Simple Auth's functionality.\n\n  ```js\n  // app/components/login-form.js\n  import Component from '@ember/component';\n  import { inject as service } from '@ember/service';\n\n  export default class LoginFormComponent extends Component {\n    &#64;service session;\n  }\n  ```\n\n  @class SessionService\n  @extends Service\n  @public\n*/\nexport default Service.extend({\n  /**\n    Returns whether the session is currently authenticated.\n\n    @memberof SessionService\n    @property isAuthenticated\n    @type Boolean\n    @readOnly\n    @default false\n    @public\n  */\n  isAuthenticated: readOnly('session.isAuthenticated'),\n\n  /**\n    The current session data as a plain object. The\n    `authenticated` key inside  {@linkplain SessionService.data} holds the session data that the authenticator resolved\n    with when the session was authenticated (see {@linkplain BaseAuthenticator.authenticate}) and\n    that will be cleared when the session is invalidated. This data cannot be\n    written. All other session data is writable and will not be cleared when\n    the session is invalidated.\n\n    @memberof SessionService\n    @property data\n    @type Object\n    @readOnly\n    @default { authenticated: {} }\n    @public\n  */\n  data: readOnly('session.content'),\n\n  /**\n    The session store.\n\n    @memberof SessionService\n    @property store\n    @type BaseStore\n    @readOnly\n    @default null\n    @public\n  */\n  store: readOnly('session.store'),\n\n  /**\n    A previously attempted but intercepted transition (e.g. by the\n    {@linkplain SessionService.requireAuthentication}\n    If an attempted transition is present it will be retried.\n\n    @memberof SessionService\n    @property attemptedTransition\n    @type Transition\n    @default null\n    @public\n  */\n  attemptedTransition: alias('session.attemptedTransition'),\n\n  session: null,\n\n  init() {\n    this._super(...arguments);\n\n    this.set('session', getOwner(this).lookup('session:main'));\n  },\n\n  set(key, value) {\n    const setsSessionData = SESSION_DATA_KEY_PREFIX.test(key);\n    if (setsSessionData) {\n      const sessionDataKey = `session.${key.replace(SESSION_DATA_KEY_PREFIX, '')}`;\n      return this._super(sessionDataKey, value);\n    } else {\n      return this._super(...arguments);\n    }\n  },\n\n  _setupHandlers() {\n    this.get('session').on('authenticationSucceeded', () =>\n      this.handleAuthentication(Configuration.routeAfterAuthentication)\n    );\n    this.get('session').on('invalidationSucceeded', () =>\n      this.handleInvalidation(Configuration.rootURL)\n    );\n  },\n\n  /**\n    __Authenticates the session with an `authenticator`__ and appropriate\n    arguments. The authenticator implements the actual steps necessary to\n    authenticate the session (see\n    {@linkplain BaseAuthenticator.authenticate} and\n    returns a promise after doing so. The session handles the returned promise\n    and when it resolves becomes authenticated, otherwise remains\n    unauthenticated. All data the authenticator resolves with will be\n    accessible via the\n    {@Linkplain SessionService.data} session data's\n    `authenticated` property.\n\n    This method returns a promise. A resolving promise indicates that the\n    session was successfully authenticated while a rejecting promise\n    indicates that authentication failed and the session remains\n    unauthenticated. The promise does not resolve with a value; instead, the\n    data returned from the authenticator is available via the\n    {@linkplain SessionService.data} property.\n\n    When authentication succeeds this will trigger the\n    {@linkplain SessionService.authenticationSucceeded} event.\n\n    @memberof SessionService\n    @method authenticate\n    @param {String} authenticator The authenticator to use to authenticate the session\n    @param {Any} [...args] The arguments to pass to the authenticator; depending on the type of authenticator these might be a set of credentials, a Facebook OAuth Token, etc.\n    @return {RSVP.Promise} A promise that resolves when the session was authenticated successfully and rejects otherwise\n    @public\n  */\n  authenticate() {\n    const session = this.get('session');\n\n    return session.authenticate(...arguments);\n  },\n\n  /**\n    __Invalidates the session with the authenticator it is currently\n    authenticated with__ (see\n    {@linkplain SessionService.authenticate}). This\n    invokes the authenticator's\n    {@linkplain BaseAuthenticator.invalidate} method\n    and handles the returned promise accordingly.\n\n    This method returns a promise. A resolving promise indicates that the\n    session was successfully invalidated while a rejecting promise indicates\n    that invalidation failed and the session remains authenticated. Once the\n    session is successfully invalidated it clears all of its authenticated data\n    (see {@linkplain SessionService.data}).\n\n    When invalidation succeeds this will trigger the\n    {@linkplain SessionService.invalidationSucceeded}\n    event.\n\n    When calling the {@linkplain BaseAuthenticator.invalidate}\n    on an already unauthenticated session, the method will return a resolved Promise\n    immediately.\n\n    @memberof SessionService\n    @method invalidate\n    @param {Array} ...args arguments that will be passed to the authenticator\n    @return {RSVP.Promise} A promise that resolves when the session was invalidated successfully and rejects otherwise\n    @public\n  */\n  invalidate() {\n    const session = this.get('session');\n\n    return session.invalidate(...arguments);\n  },\n\n  /**\n    Checks whether the session is authenticated and if it is not, transitions\n    to the specified route or invokes the specified callback.\n\n    If a transition is in progress and is aborted, this method will save it in the\n    session service's\n    {@linkplain SessionService.attemptedTransition}\n    property so that  it can be retried after the session is authenticated. If\n    the transition is aborted in Fastboot mode, the transition's target URL\n    will be saved in a `ember_simple_auth-redirectTarget` cookie for use by the\n    browser after authentication is complete.\n\n    @memberof SessionService\n    @method requireAuthentication\n    @param {Transition} transition A transition that triggered the authentication requirement or null if the requirement originated independently of a transition\n    @param {String|Function} routeOrCallback The route to transition to in case that the session is not authenticated or a callback function to invoke in that case\n    @return {Boolean} true when the session is authenticated, false otherwise\n    @public\n  */\n  requireAuthentication(transition, routeOrCallback) {\n    assertSetupHasBeenCalled(this._setupIsCalled);\n    let isAuthenticated = requireAuthentication(getOwner(this), transition);\n    if (!isAuthenticated) {\n      let argType = typeof routeOrCallback;\n      if (argType === 'string') {\n        triggerAuthentication(getOwner(this), routeOrCallback);\n      } else if (argType === 'function') {\n        routeOrCallback();\n      } else {\n        assert(\n          `The second argument to requireAuthentication must be a String or Function, got \"${argType}\"!`,\n          false\n        );\n      }\n    }\n    return isAuthenticated;\n  },\n\n  /**\n    Checks whether the session is authenticated and if it is, transitions\n    to the specified route or invokes the specified callback.\n\n    @memberof SessionService\n    @method prohibitAuthentication\n    @param {String|Function} routeOrCallback The route to transition to in case that the session is authenticated or a callback function to invoke in that case\n    @return {Boolean} true when the session is not authenticated, false otherwise\n    @public\n  */\n  prohibitAuthentication(routeOrCallback) {\n    assertSetupHasBeenCalled(this._setupIsCalled);\n    let isAuthenticated = this.get('isAuthenticated');\n    if (isAuthenticated) {\n      let argType = typeof routeOrCallback;\n      if (argType === 'string') {\n        prohibitAuthentication(getOwner(this), routeOrCallback);\n      } else if (argType === 'function') {\n        routeOrCallback();\n      } else {\n        assert(\n          `The first argument to prohibitAuthentication must be a String or Function, got \"${argType}\"!`,\n          false\n        );\n      }\n    }\n    return !isAuthenticated;\n  },\n\n  /**\n    This method is called whenever the session goes from being unauthenticated\n    to being authenticated. If there is a transition that was previously\n    intercepted by the\n    {@linkplain SessionService.requireAuthentication},\n    it will retry it. If there is no such transition, the\n    `ember_simple_auth-redirectTarget` cookie will be checked for a url that\n    represents an attemptedTransition that was aborted in Fastboot mode,\n    otherwise this action transitions to the specified\n    routeAfterAuthentication.\n\n    @memberof SessionService\n    @method handleAuthentication\n    @param {String} routeAfterAuthentication The route to transition to\n    @public\n  */\n  handleAuthentication(routeAfterAuthentication) {\n    handleSessionAuthenticated(getOwner(this), routeAfterAuthentication);\n  },\n\n  /**\n    This method is called whenever the session goes from being authenticated to\n    not being authenticated. __It reloads the Ember.js application__ by\n    redirecting the browser to the specified route so that all in-memory data\n    (such as Ember Data stores etc.) gets cleared.\n\n    If the Ember.js application will be used in an environment where the users\n    don't have direct access to any data stored on the client (e.g.\n    [cordova](http://cordova.apache.org)) this action can be overridden to e.g.\n    simply transition to the index route.\n\n    @memberof SessionService\n    @method handleInvalidation\n    @param {String} routeAfterInvalidation The route to transition to\n    @public\n  */\n  handleInvalidation(routeAfterInvalidation) {\n    handleSessionInvalidated(getOwner(this), routeAfterInvalidation);\n  },\n\n  /**\n    Sets up the session service.\n\n    This method must be called when the application starts up,\n    usually as the first thing in the `application` route's `beforeModel`\n    method.\n\n    @memberof SessionService\n    @method setup\n    @public\n  */\n  setup() {\n    this._setupIsCalled = true;\n    this._setupHandlers();\n\n    return this.session.restore().catch(() => {\n      // If it raises an error then it means that restore didn't find any restorable state.\n    });\n  },\n});\n","import isFastBoot from '../utils/is-fastboot';\nimport location from '../utils/location';\nimport { isTesting } from '@embroider/macros';\n\nexport function requireAuthentication(owner, transition) {\n  let sessionService = owner.lookup('service:session');\n  let isAuthenticated = sessionService.get('isAuthenticated');\n  if (!isAuthenticated) {\n    if (transition && isFastBoot(owner)) {\n      const fastbootService = owner.lookup('service:fastboot');\n      const cookiesService = owner.lookup('service:cookies');\n      cookiesService.write('ember_simple_auth-redirectTarget', transition.intent.url, {\n        path: '/',\n        secure: fastbootService.get('request.protocol') === 'https',\n      });\n    } else if (transition) {\n      sessionService.set('attemptedTransition', transition);\n    }\n  }\n  return isAuthenticated;\n}\n\nexport function triggerAuthentication(owner, authenticationRoute) {\n  let authRouter = owner.lookup('service:router') || owner.lookup('router:main');\n  authRouter.transitionTo(authenticationRoute);\n}\n\nexport function prohibitAuthentication(owner, routeIfAlreadyAuthenticated) {\n  let authRouter = owner.lookup('service:router') || owner.lookup('router:main');\n  authRouter.transitionTo(routeIfAlreadyAuthenticated);\n}\n\nexport function handleSessionAuthenticated(owner, routeAfterAuthentication) {\n  let sessionService = owner.lookup('service:session');\n  let attemptedTransition = sessionService.get('attemptedTransition');\n  let cookiesService = owner.lookup('service:cookies');\n  const redirectTarget = cookiesService.read('ember_simple_auth-redirectTarget');\n\n  let routerService = owner.lookup('service:router');\n\n  if (attemptedTransition) {\n    attemptedTransition.retry();\n    sessionService.set('attemptedTransition', null);\n  } else if (redirectTarget) {\n    routerService.transitionTo(redirectTarget);\n    cookiesService.clear('ember_simple_auth-redirectTarget');\n  } else {\n    routerService.transitionTo(routeAfterAuthentication);\n  }\n}\n\nexport function handleSessionInvalidated(owner, routeAfterInvalidation) {\n  if (isFastBoot(owner)) {\n    let routerService = owner.lookup('service:router');\n    routerService.transitionTo(routeAfterInvalidation);\n  } else {\n    if (!isTesting()) {\n      location.replace(routeAfterInvalidation);\n    }\n  }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Base from './base';\n\nconst LOCAL_STORAGE_TEST_KEY = '_ember_simple_auth_test_key';\n\nconst proxyToInternalStore = function () {\n  return computed({\n    get(key) {\n      return this.get(`_${key}`);\n    },\n    set(key, value) {\n      this.set(`_${key}`, value);\n      let _store = this.get('_store');\n      if (_store) {\n        _store.set(key, value);\n      }\n      return value;\n    },\n  });\n};\n\n/**\n  Session store that persists data in the browser's `localStorage` (see\n  {@linkplain LocalStorageStore}) if that is available or in\n  a cookie (see {@linkplain CookieStore}) if it is not.\n\n  __This is the default store that Ember Simple Auth will use when the\n  application doesn't define a custom store.__\n\n  __This session store does not work with FastBoot. In order to use Ember\n  Simple Auth with FastBoot, configure the\n  {@linkplain CookieStore} as the application's session\n  store.__\n\n  @class AdaptiveStore\n  @extends BaseStore\n  @public\n*/\nexport default Base.extend({\n  /**\n    The `localStorage` key the store persists data in if `localStorage` is\n    available.\n\n    @memberof AdaptiveStore\n    @property localStorageKey\n    @type String\n    @default 'ember_simple_auth-session'\n    @public\n  */\n  localStorageKey: 'ember_simple_auth-session',\n\n  /**\n    The domain to use for the cookie if `localStorage` is not available, e.g.,\n    \"example.com\", \".example.com\" (which includes all subdomains) or\n    \"subdomain.example.com\". If not explicitly set, the cookie domain defaults\n    to the domain the session was authenticated on.\n\n    @memberof AdaptiveStore\n    @property cookieDomain\n    @type String\n    @default null\n    @public\n  */\n  _cookieDomain: null,\n  cookieDomain: proxyToInternalStore(),\n\n  /**\n    Allows servers to assert that a cookie ought not to be sent along with\n    cross-site requests, which provides some protection against cross-site\n    request forgery attacks (CSRF).\n\n    Available options:\n    - \"Strict\"\n    - \"Lax\"\n\n    @memberof AdaptiveStore\n    @property sameSite\n    @type String\n    @default null\n    @public\n  */\n  _sameSite: null,\n  sameSite: proxyToInternalStore(),\n\n  /**\n    The name of the cookie to use if `localStorage` is not available.\n\n    @memberof AdaptiveStore\n    @property cookieName\n    @type String\n    @default ember_simple_auth-session\n    @public\n  */\n  _cookieName: 'ember_simple_auth-session',\n  cookieName: proxyToInternalStore(),\n\n  /**\n    The path to use for the cookie, e.g., \"/\", \"/something\".\n\n    @memberof AdaptiveStore\n    @property cookiePath\n    @type String\n    @default '/'\n    @public\n  */\n  _cookiePath: '/',\n  cookiePath: proxyToInternalStore(),\n\n  /**\n    The expiration time for the cookie in seconds if `localStorage` is not\n    available. A value of `null` will make the cookie a session cookie that\n    expires and gets deleted when the browser is closed.\n\n    @memberof AdaptiveStore\n    @property cookieExpirationTime\n    @default null\n    @type Integer\n    @public\n  */\n  _cookieExpirationTime: null,\n  cookieExpirationTime: proxyToInternalStore(),\n\n  _cookies: service('cookies'),\n\n  _isLocalStorageAvailable: computed({\n    get() {\n      return testLocalStorageAvailable();\n    },\n\n    set(key, value) {\n      return value;\n    },\n  }),\n\n  init() {\n    this._super(...arguments);\n\n    let owner = getOwner(this);\n    if (owner && !this.hasOwnProperty('_fastboot')) {\n      this._fastboot = owner.lookup('service:fastboot');\n    }\n\n    let store;\n    if (this.get('_isLocalStorageAvailable')) {\n      const localStorage = owner.lookup('session-store:local-storage');\n      const options = { key: this.get('localStorageKey') };\n\n      options._isFastBoot = false;\n      localStorage.setProperties(options);\n\n      store = localStorage;\n    } else {\n      const cookieStorage = owner.lookup('session-store:cookie');\n      const options = this.getProperties(\n        'cookieDomain',\n        'cookieName',\n        'cookieExpirationTime',\n        'cookiePath',\n        'sameSite'\n      );\n\n      cookieStorage.setProperties(options);\n      this.set('cookieExpirationTime', cookieStorage.get('cookieExpirationTime'));\n\n      store = cookieStorage;\n    }\n\n    this.set('_store', store);\n    this._setupStoreEvents(store);\n  },\n\n  _setupStoreEvents(store) {\n    store.on('sessionDataUpdated', data => {\n      this.trigger('sessionDataUpdated', data);\n    });\n    return store;\n  },\n\n  /**\n    Persists the `data` in the `localStorage` if it is available or in a cookie\n    if it is not.\n\n    @memberof AdaptiveStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist() {\n    return this.get('_store').persist(...arguments);\n  },\n\n  /**\n    Returns all data currently stored in the `localStorage` if that is\n    available - or if it is not, in the cookie - as a plain object.\n\n    @memberof AdaptiveStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    return this.get('_store').restore();\n  },\n\n  /**\n    Clears the store by deleting the\n    {@linkplain LocalStorageStore.key} from\n    `localStorage` if that is available or by deleting the cookie if it is not.\n\n    @memberof AdaptiveStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    return this.get('_store').clear();\n  },\n});\n\nfunction testLocalStorageAvailable() {\n  try {\n    localStorage.setItem(LOCAL_STORAGE_TEST_KEY, true);\n    localStorage.removeItem(LOCAL_STORAGE_TEST_KEY);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n","import RSVP from 'rsvp';\nimport EmberObject from '@ember/object';\nimport Evented from '@ember/object/evented';\n\n/**\n  The base class for all session stores. __This serves as a starting point for\n  implementing custom session stores and must not be used directly.__\n\n  Session Stores persist the session's state so that it survives a page reload\n  and is synchronized across multiple tabs or windows of the same application.\n\n  @class BaseStore\n  @extends Ember.Object\n  @uses Ember.Evented\n  @public\n*/\nexport default EmberObject.extend(Evented, {\n  /**\n    Triggered when the session store's data changes due to an external event,\n    e.g., from another tab or window of the same application. The session\n    handles that event, passes the updated data to its authenticator's\n    {@linkplain BaseAuthenticator.restore} method and\n    handles the result of that invocation accordingly.\n\n    @memberof BaseStore\n    @event sessionDataUpdated\n    @param {Object} data The updated session data\n    @public\n  */\n\n  /**\n    Persists the `data`. This replaces all currently stored data.\n\n    `BaseStores`'s implementation always returns a rejecting promise. __This\n    method must be overridden in subclasses__.\n\n    @memberof BaseStore\n    @method persist\n    @param {Object} data The data to persist\n    @return {Ember.RSVP.Promise} A promise that resolves when the data has successfully been persisted and rejects otherwise.\n    @public\n  */\n  persist() {\n    return RSVP.reject();\n  },\n\n  /**\n    Returns all data currently stored as a plain object.\n\n    `BaseStores`'s implementation always returns a rejecting promise. __This\n    method must be overridden in subclasses__.\n\n    @memberof BaseStore\n    @method restore\n    @return {Ember.RSVP.Promise} A promise that resolves with the data currently persisted in the store when the data has been restored successfully and rejects otherwise.\n    @public\n  */\n  restore() {\n    return RSVP.reject();\n  },\n\n  /**\n    Clears the store.\n\n    `BaseStores`'s implementation always returns a rejecting promise. __This\n    method must be overridden in subclasses__.\n\n    @memberof BaseStore\n    @method clear\n    @return {Ember.RSVP.Promise} A promise that resolves when the store has been cleared successfully and rejects otherwise.\n    @public\n  */\n  clear() {\n    return RSVP.reject();\n  },\n});\n","export default function (registry, factoryNameOrType, property, injectionName) {\n  const inject = registry.inject || registry.injection;\n  inject.call(registry, factoryNameOrType, property, injectionName);\n}\n","/* eslint-disable no-unused-vars */\n// @ts-check\nimport { assert } from '@ember/debug';\n\nexport default function isFastBoot(owner) {\n  assert('You must pass in an owner to isFastBoot!', owner && typeof owner.lookup === 'function');\n  const fastboot = owner.lookup('service:fastboot');\n  return fastboot ? fastboot.get('isFastBoot') : false;\n}\n","class LocationUtil {\n  location = window.location;\n\n  replace(...args) {\n    this.location.replace(...args);\n  }\n}\n\nconst location = new LocationUtil();\n\nexport default location;\n","export default function objectsAreEqual(a, b) {\n  function compare(x, y) {\n    let property;\n    if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {\n      return true;\n    }\n\n    if (x === y) {\n      return true;\n    }\n\n    if (!(x instanceof Object && y instanceof Object)) {\n      return false;\n    }\n\n    for (property in y) {\n      if (y.hasOwnProperty(property) !== x.hasOwnProperty(property)) {\n        return false;\n      } else if (typeof y[property] !== typeof x[property]) {\n        return false;\n      }\n    }\n\n    for (property in x) {\n      if (y.hasOwnProperty(property) !== x.hasOwnProperty(property)) {\n        return false;\n      } else if (typeof y[property] !== typeof x[property]) {\n        return false;\n      }\n\n      switch (typeof x[property]) {\n        case 'object':\n          if (!compare(x[property], y[property])) {\n            return false;\n          }\n          break;\n        default:\n          if (x[property] !== y[property]) {\n            return false;\n          }\n          break;\n      }\n    }\n\n    return true;\n  }\n\n  return compare(a, b);\n}\n","import Modifier from 'ember-modifier';\nimport { assert } from '@ember/debug';\nimport { typeOf } from '@ember/utils';\nimport type * as CSS from 'csstype';\n\n// Cannot be typed as `Partial<CSSStyleDeclaration>` because `CSSStyleDeclaration`\n// interface does _not_ included dashed CSS property names. It only includes the\n// camelCase version of a CSS property.\n// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1672\ntype CSSStyles =\n  | Partial<CSS.Properties>\n  | Partial<CSS.PropertiesHyphen>\n  | { readonly [key: `--${string}`]: string };\n\nfunction isObject(o: unknown): boolean {\n  return typeof o === 'object' && Boolean(o);\n}\n\nconst DASHERIZE_REGEX = /([a-z\\d])([A-Z])/g;\nconst DASHERIZE_REPLACEMENT = '$1-$2';\n\nfunction dasherize(str: string): string {\n  return str.replace(DASHERIZE_REGEX, DASHERIZE_REPLACEMENT).toLowerCase();\n}\n\n/**\n * Returns a two-dimensional array, like:\n *\n * ```js\n * [\n *   ['font-size', '16px'],\n *   ['text-align', 'center'],\n *   ['color', 'red']\n * ]\n * ```\n *\n * This data structure is slightly faster to process than an object / dictionary.\n */\nfunction compileStyles(\n  positional: CSSStyles[],\n  named: CSSStyles,\n): [string, string][] {\n  return [...positional.filter(isObject), named]\n    .map((obj) =>\n      Object.entries(obj).map(\n        ([k, v]) => [dasherize(k), v] as [string, string],\n      ),\n    )\n    .flat();\n}\n\nexport interface StyleModifierSignature {\n  Element: Element & ElementCSSInlineStyle;\n  Args: {\n    Positional: CSSStyles[];\n    Named: CSSStyles;\n  };\n}\n\nexport default class StyleModifier extends Modifier<StyleModifierSignature> {\n  existingStyles: Set<string> = new Set();\n\n  setStyles(\n    element: StyleModifierSignature['Element'],\n    newStyles: [string, string][],\n  ) {\n    const { existingStyles } = this;\n    const rulesToRemove: Set<string> = new Set(existingStyles);\n\n    // clear cache of existing styles\n    existingStyles.clear();\n\n    newStyles.forEach(([property, value]) => {\n      assert(\n        `Your given value for property '${property}' is ${value} (${typeOf(\n          value,\n        )}). ` +\n          'Accepted types are string and undefined. Please change accordingly.',\n        typeof value === 'undefined' || typeOf(value) === 'string',\n      );\n\n      // priority must be specified as separate argument\n      // value must not contain \"!important\"\n      let priority = '';\n      if (value && value.includes('!important')) {\n        priority = 'important';\n        value = value.replace('!important', '');\n      }\n\n      // update CSSOM\n      element.style.setProperty(property, value, priority);\n\n      // should not remove rules that have been updated in this cycle\n      rulesToRemove.delete(property);\n\n      // cache styles that have been set for potential clean-up when argument changes\n      existingStyles.add(property);\n    });\n\n    // remove rules that were present in last cycle but aren't present in this one\n    rulesToRemove.forEach((rule) => element.style.removeProperty(rule));\n  }\n\n  modify(\n    element: StyleModifierSignature['Element'],\n    positional: [CSSStyles] | [],\n    named: CSSStyles,\n  ) {\n    this.setStyles(element, compileStyles(positional, named));\n  }\n}\n","import Helper from '@ember/component/helper';\nimport truthConvert, {\n  MaybeTruthy,\n  TruthConvert,\n} from '../utils/truth-convert.ts';\n\ntype FirstFalsy<T> = T extends [infer Item]\n  ? Item\n  : T extends [infer Head, ...infer Tail]\n  ? TruthConvert<Head> extends false\n    ? Head\n    : TruthConvert<Head> extends true\n    ? FirstFalsy<Tail>\n    : Head | FirstFalsy<Tail>\n  : undefined;\n\ninterface AndSignature<T extends MaybeTruthy[]> {\n  Args: {\n    Positional: T;\n  };\n  Return: FirstFalsy<T>;\n}\n\n// We use class-based helper to ensure arguments are lazy-evaluated\n// and helper short-circuits like native JavaScript `&&` (logical AND).\nexport default class AndHelper<const T extends MaybeTruthy[]> extends Helper<\n  AndSignature<T>\n> {\n  public compute(params: T): FirstFalsy<T>;\n  public compute(params: T) {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (truthConvert(params[i]) === false) {\n        return params[i];\n      }\n    }\n    return params[params.length - 1];\n  }\n}\n","export default function eq(left: unknown, right: unknown): boolean {\n  return left === right;\n}\n","export default function gt(\n  left: unknown,\n  right: unknown,\n  options?: { forceNumber?: boolean }\n) {\n  if (options?.forceNumber) {\n    if (typeof left !== 'number') {\n      left = Number(left);\n    }\n    if (typeof right !== 'number') {\n      right = Number(right);\n    }\n  }\n  return (left as number) > (right as number);\n}\n","export default function gte(\n  left: unknown,\n  right: unknown,\n  options?: { forceNumber?: boolean }\n) {\n  if (options?.forceNumber) {\n    if (typeof left !== 'number') {\n      left = Number(left);\n    }\n    if (typeof right !== 'number') {\n      right = Number(right);\n    }\n  }\n  return (left as number) >= (right as number);\n}\n","export default function lt(\n  left: unknown,\n  right: unknown,\n  options?: { forceNumber?: boolean }\n) {\n  if (options?.forceNumber) {\n    if (typeof left !== 'number') {\n      left = Number(left);\n    }\n    if (typeof right !== 'number') {\n      right = Number(right);\n    }\n  }\n  return (left as number) < (right as number);\n}\n","export default function lte(\n  left: unknown,\n  right: unknown,\n  options?: { forceNumber?: boolean }\n) {\n  if (options?.forceNumber) {\n    if (typeof left !== 'number') {\n      left = Number(left);\n    }\n    if (typeof right !== 'number') {\n      right = Number(right);\n    }\n  }\n  return (left as number) <= (right as number);\n}\n","export default function notEq(left: unknown, right: unknown) {\n  return left !== right;\n}\n","import truthConvert, { MaybeTruthy } from '../utils/truth-convert.ts';\n\nexport default function not(...params: MaybeTruthy[]) {\n  return params.every((param) => !truthConvert(param));\n}\n","import truthConvert, {\n  Falsy,\n  MaybeTruthy,\n  TruthConvert,\n} from '../utils/truth-convert.ts';\nimport Helper from '@ember/component/helper';\n\ntype FirstTruthy<T> = T extends [infer Item]\n  ? Item\n  : T extends [infer Head, ...infer Tail]\n  ? TruthConvert<Head> extends true\n    ? Head\n    : TruthConvert<Head> extends false\n    ? FirstTruthy<Tail>\n    : Exclude<Head, Falsy> | FirstTruthy<Tail>\n  : undefined;\n\ninterface OrSignature<T extends MaybeTruthy[]> {\n  Args: {\n    Positional: T;\n  };\n  Return: FirstTruthy<T>;\n}\n\n// We use class-based helper to ensure arguments are lazy-evaluated\n// and helper short-circuits like native JavaScript `||` (logical OR).\nexport default class OrHelper<T extends MaybeTruthy[]> extends Helper<\n  OrSignature<T>\n> {\n  public compute(params: T): FirstTruthy<T>;\n  public compute(params: T) {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (truthConvert(params[i]) === true) {\n        return params[i];\n      }\n    }\n    return params[params.length - 1];\n  }\n}\n","import truthConvert from '../utils/truth-convert.ts';\n\nexport default function xor(left: unknown, right: unknown) {\n  return truthConvert(left) !== truthConvert(right);\n}\n","import { isArray } from '@ember/array';\n\nexport type Falsy =\n  | { isTruthy: false }\n  | undefined\n  | null\n  | false\n  | 0\n  | -0\n  | 0n\n  | ''\n  | never[];\n\n// We check here in the order of the following function to maintain parity\n// Note that this will not handle EmberArray correctly.\n// We don't use Falsy since we want to be able to more definitively determine\n// truthy results.\nexport type TruthConvert<T> = T extends { isTruthy: true }\n  ? true\n  : T extends { isTruthy: false }\n  ? false\n  : T extends { isTruthy: boolean }\n  ? boolean\n  : T extends undefined | null\n  ? false\n  : T extends boolean\n  ? T\n  : T extends number\n  ? T extends 0 | -0\n    ? false\n    : number extends T\n    ? boolean\n    : true\n  : T extends bigint\n  ? T extends 0n\n    ? false\n    : bigint extends T\n    ? boolean\n    : true\n  : T extends string\n  ? T extends ''\n    ? false\n    : string extends T\n    ? boolean\n    : true\n  : T extends never[]\n  ? false\n  : T extends ArrayLike<unknown>\n  ? boolean\n  : T extends object\n  ? true\n  : boolean;\n\nexport type MaybeTruthy =\n  | { isTruthy: boolean }\n  | undefined\n  | null\n  | boolean\n  | number\n  | bigint\n  | string\n  | unknown[]\n  | object;\n\n// We also have to do individual overloads for each specific type so that we\n// don't lose specificity.\nexport default function truthConvert<T extends true | { isTruthy: true }>(\n  result: T\n): true;\nexport default function truthConvert<T extends { isTruthy: false }>(\n  result: T\n): false;\nexport default function truthConvert<T extends undefined | null | false>(\n  result: T\n): false;\nexport default function truthConvert<T extends number>(\n  result: T\n): T extends 0 | -0 ? false : true;\nexport default function truthConvert<T extends bigint>(\n  result: T\n): T extends 0n ? false : true;\nexport default function truthConvert<T extends string>(\n  result: T\n): T extends '' ? false : true;\nexport default function truthConvert<T>(result: T): TruthConvert<T>;\nexport default function truthConvert(result: unknown): boolean {\n  if (\n    typeof result === 'object' &&\n    result &&\n    'isTruthy' in result &&\n    typeof result.isTruthy === 'boolean'\n  ) {\n    return result.isTruthy;\n  }\n\n  if (isArray(result)) {\n    return result.length !== 0;\n  } else {\n    return !!result;\n  }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","/**\n * dd-base-impl.ts 7.3.0\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nexport type EventCallback = (event: Event) => boolean|void;\nexport abstract class DDBaseImplement {\n  /** returns the enable state, but you have to call enable()/disable() to change (as other things need to happen) */\n  public get disabled(): boolean   { return this._disabled; }\n\n  /** @internal */\n  protected _disabled: boolean; // initial state to differentiate from false\n  /** @internal */\n  protected _eventRegister: {\n    [eventName: string]: EventCallback;\n  } = {};\n\n  public on(event: string, callback: EventCallback): void {\n    this._eventRegister[event] = callback;\n  }\n\n  public off(event: string): void {\n    delete this._eventRegister[event];\n  }\n\n  public enable(): void {\n    this._disabled = false;\n  }\n\n  public disable(): void {\n    this._disabled = true;\n  }\n\n  public destroy(): void {\n    delete this._eventRegister;\n  }\n\n  public triggerEvent(eventName: string, event: Event): boolean|void {\n    if (!this.disabled && this._eventRegister && this._eventRegister[eventName])\n      return this._eventRegister[eventName](event);\n  }\n}\n\nexport interface HTMLElementExtendOpt<T> {\n  el: HTMLElement;\n  option: T;\n  updateOption(T): DDBaseImplement;\n}\n","/**\n * dd-draggable.ts 7.3.0\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { DDManager } from './dd-manager';\nimport { Utils } from './utils';\nimport { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';\nimport { GridItemHTMLElement, DDUIData } from './types';\nimport { DDElementHost } from './dd-element';\nimport { isTouch, touchend, touchmove, touchstart, pointerdown } from './dd-touch';\n\n// TODO: merge with DDDragOpt ?\nexport interface DDDraggableOpt {\n  appendTo?: string | HTMLElement;\n  handle?: string;\n  helper?: string | HTMLElement | ((event: Event) => HTMLElement);\n  // containment?: string | HTMLElement; // TODO: not implemented yet\n  // revert?: string | boolean | unknown; // TODO: not implemented yet\n  // scroll?: boolean; // native support by HTML5 drag drop, can't be switch to off actually\n  start?: (event: Event, ui: DDUIData) => void;\n  stop?: (event: Event) => void;\n  drag?: (event: Event, ui: DDUIData) => void;\n}\n\ninterface DragOffset {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n  offsetLeft: number;\n  offsetTop: number;\n}\n\ntype DDDragEvent = 'drag' | 'dragstart' | 'dragstop';\n\n// let count = 0; // TEST\n\nexport class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt<DDDraggableOpt> {\n  public el: HTMLElement;\n  public option: DDDraggableOpt;\n  public helper: HTMLElement; // used by GridStackDDNative\n\n  /** @internal */\n  protected mouseDownEvent: MouseEvent;\n  /** @internal */\n  protected dragOffset: DragOffset;\n  /** @internal */\n  protected dragElementOriginStyle: Array<string>;\n  /** @internal */\n  protected dragEl: HTMLElement;\n  /** @internal true while we are dragging an item around */\n  protected dragging: boolean;\n  /** @internal */\n  protected parentOriginStylePosition: string;\n  /** @internal */\n  protected helperContainment: HTMLElement;\n  /** @internal properties we change during dragging, and restore back */\n  protected static originStyleProp = ['transition', 'pointerEvents', 'position', 'left', 'top', 'minWidth', 'willChange'];\n  /** @internal pause before we call the actual drag hit collision code */\n  protected dragTimeout: number;\n\n  constructor(el: HTMLElement, option: DDDraggableOpt = {}) {\n    super();\n    this.el = el;\n    this.option = option;\n    // get the element that is actually supposed to be dragged by\n    let handleName = option.handle.substring(1);\n    this.dragEl = el.classList.contains(handleName) ? el : el.querySelector(option.handle) || el;\n    // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)\n    this._mouseDown = this._mouseDown.bind(this);\n    this._mouseMove = this._mouseMove.bind(this);\n    this._mouseUp = this._mouseUp.bind(this);\n    this.enable();\n  }\n\n  public on(event: DDDragEvent, callback: (event: DragEvent) => void): void {\n    super.on(event, callback);\n  }\n\n  public off(event: DDDragEvent): void {\n    super.off(event);\n  }\n\n  public enable(): void {\n    if (this.disabled === false) return;\n    super.enable();\n    this.dragEl.addEventListener('mousedown', this._mouseDown);\n    if (isTouch) {\n      this.dragEl.addEventListener('touchstart', touchstart);\n      this.dragEl.addEventListener('pointerdown', pointerdown);\n      // this.dragEl.style.touchAction = 'none'; // not needed unlike pointerdown doc comment\n    }\n    this.el.classList.remove('ui-draggable-disabled');\n    this.el.classList.add('ui-draggable');\n  }\n\n  public disable(forDestroy = false): void {\n    if (this.disabled === true) return;\n    super.disable();\n    this.dragEl.removeEventListener('mousedown', this._mouseDown);\n    if (isTouch) {\n      this.dragEl.removeEventListener('touchstart', touchstart);\n      this.dragEl.removeEventListener('pointerdown', pointerdown);\n    }\n    this.el.classList.remove('ui-draggable');\n    if (!forDestroy) this.el.classList.add('ui-draggable-disabled');\n  }\n\n  public destroy(): void {\n    if (this.dragTimeout) window.clearTimeout(this.dragTimeout);\n    delete this.dragTimeout;\n    if (this.dragging) this._mouseUp(this.mouseDownEvent);\n    this.disable(true);\n    delete this.el;\n    delete this.helper;\n    delete this.option;\n    super.destroy();\n  }\n\n  public updateOption(opts: DDDraggableOpt): DDDraggable {\n    Object.keys(opts).forEach(key => this.option[key] = opts[key]);\n    return this;\n  }\n\n  /** @internal call when mouse goes down before a dragstart happens */\n  protected _mouseDown(e: MouseEvent): boolean {\n    // don't let more than one widget handle mouseStart\n    if (DDManager.mouseHandled) return;\n    if (e.button !== 0) return true; // only left click\n\n    // make sure we are not clicking on known object that handles mouseDown (TODO: make this extensible ?) #2054\n    const skipMouseDown = ['input', 'textarea', 'button', 'select', 'option'];\n    const name = (e.target as HTMLElement).nodeName.toLowerCase();\n    if (skipMouseDown.find(skip => skip === name)) return true;\n    // also check for content editable\n    if ((e.target as HTMLElement).closest('[contenteditable=\"true\"]')) return true;\n\n    // REMOVE: why would we get the event if it wasn't for us or child ?\n    // make sure we are clicking on a drag handle or child of it...\n    // Note: we don't need to check that's handle is an immediate child, as mouseHandled will prevent parents from also handling it (lowest wins)\n    // let className = this.option.handle.substring(1);\n    // let el = e.target as HTMLElement;\n    // while (el && !el.classList.contains(className)) { el = el.parentElement; }\n    // if (!el) return;\n\n    this.mouseDownEvent = e;\n    delete this.dragging;\n    delete DDManager.dragElement;\n    delete DDManager.dropElement;\n    // document handler so we can continue receiving moves as the item is 'fixed' position, and capture=true so WE get a first crack\n    document.addEventListener('mousemove', this._mouseMove, true); // true=capture, not bubble\n    document.addEventListener('mouseup', this._mouseUp, true);\n    if (isTouch) {\n      this.dragEl.addEventListener('touchmove', touchmove);\n      this.dragEl.addEventListener('touchend', touchend);\n    }\n\n    e.preventDefault();\n    // preventDefault() prevents blur event which occurs just after mousedown event.\n    // if an editable content has focus, then blur must be call\n    if (document.activeElement) (document.activeElement as HTMLElement).blur();\n\n    DDManager.mouseHandled = true;\n    return true;\n  }\n\n  /** @internal method to call actual drag event */\n  protected _callDrag(e: DragEvent): void {\n    if (!this.dragging) return;\n    const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'drag' });\n    if (this.option.drag) {\n      this.option.drag(ev, this.ui());\n    }\n    this.triggerEvent('drag', ev);\n  }\n\n  /** @internal called when the main page (after successful mousedown) receives a move event to drag the item around the screen */\n  protected _mouseMove(e: DragEvent): boolean {\n    // console.log(`${count++} move ${e.x},${e.y}`)\n    let s = this.mouseDownEvent;\n\n    if (this.dragging) {\n      this._dragFollow(e);\n      // delay actual grid handling drag until we pause for a while if set\n      if (DDManager.pauseDrag) {\n        const pause = Number.isInteger(DDManager.pauseDrag) ? DDManager.pauseDrag as number : 100;\n        if (this.dragTimeout) window.clearTimeout(this.dragTimeout);\n        this.dragTimeout = window.setTimeout(() => this._callDrag(e), pause);\n      } else {\n        this._callDrag(e);\n      }\n    } else if (Math.abs(e.x - s.x) + Math.abs(e.y - s.y) > 3) {\n      /**\n       * don't start unless we've moved at least 3 pixels\n       */\n      this.dragging = true;\n      DDManager.dragElement = this;\n      // if we're dragging an actual grid item, set the current drop as the grid (to detect enter/leave)\n      let grid = (this.el as GridItemHTMLElement).gridstackNode?.grid;\n      if (grid) {\n        DDManager.dropElement = (grid.el as DDElementHost).ddElement.ddDroppable;\n      } else {\n        delete DDManager.dropElement;\n      }\n      this.helper = this._createHelper(e);\n      this._setupHelperContainmentStyle();\n      this.dragOffset = this._getDragOffset(e, this.el, this.helperContainment);\n      const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'dragstart' });\n\n      this._setupHelperStyle(e);\n      if (this.option.start) {\n        this.option.start(ev, this.ui());\n      }\n      this.triggerEvent('dragstart', ev);\n    }\n    e.preventDefault(); // needed otherwise we get text sweep text selection as we drag around\n    return true;\n  }\n\n  /** @internal call when the mouse gets released to drop the item at current location */\n  protected _mouseUp(e: MouseEvent): void {\n    document.removeEventListener('mousemove', this._mouseMove, true);\n    document.removeEventListener('mouseup', this._mouseUp, true);\n    if (isTouch) {\n      this.dragEl.removeEventListener('touchmove', touchmove, true);\n      this.dragEl.removeEventListener('touchend', touchend, true);\n    }\n    if (this.dragging) {\n      delete this.dragging;\n\n      // reset the drop target if dragging over ourself (already parented, just moving during stop callback below)\n      if (DDManager.dropElement?.el === this.el.parentElement) {\n        delete DDManager.dropElement;\n      }\n\n      this.helperContainment.style.position = this.parentOriginStylePosition || null;\n      if (this.helper === this.el) {\n        this._removeHelperStyle();\n      } else {\n        this.helper.remove();\n      }\n      const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'dragstop' });\n      if (this.option.stop) {\n        this.option.stop(ev); // NOTE: destroy() will be called when removing item, so expect NULL ptr after!\n      }\n      this.triggerEvent('dragstop', ev);\n\n      // call the droppable method to receive the item\n      if (DDManager.dropElement) {\n        DDManager.dropElement.drop(e);\n      }\n    }\n    delete this.helper;\n    delete this.mouseDownEvent;\n    delete DDManager.dragElement;\n    delete DDManager.dropElement;\n    delete DDManager.mouseHandled;\n    e.preventDefault();\n  }\n\n  /** @internal create a clone copy (or user defined method) of the original drag item if set */\n  protected _createHelper(event: DragEvent): HTMLElement {\n    let helper = this.el;\n    if (typeof this.option.helper === 'function') {\n      helper = this.option.helper(event);\n    } else if (this.option.helper === 'clone') {\n      helper = Utils.cloneNode(this.el);\n    }\n    if (!document.body.contains(helper)) {\n      Utils.appendTo(helper, this.option.appendTo === 'parent' ? this.el.parentNode : this.option.appendTo);\n    }\n    if (helper === this.el) {\n      this.dragElementOriginStyle = DDDraggable.originStyleProp.map(prop => this.el.style[prop]);\n    }\n    return helper;\n  }\n\n  /** @internal set the fix position of the dragged item */\n  protected _setupHelperStyle(e: DragEvent): DDDraggable {\n    this.helper.classList.add('ui-draggable-dragging');\n    // TODO: set all at once with style.cssText += ... ? https://stackoverflow.com/questions/3968593\n    const style = this.helper.style;\n    style.pointerEvents = 'none'; // needed for over items to get enter/leave\n    // style.cursor = 'move'; //  TODO: can't set with pointerEvents=none ! (done in CSS as well)\n    style['min-width'] = 0; // since we no longer relative to our parent and we don't resize anyway (normally 100/#column %)\n    style.width = this.dragOffset.width + 'px';\n    style.height = this.dragOffset.height + 'px';\n    style.willChange = 'left, top';\n    style.position = 'fixed'; // let us drag between grids by not clipping as parent .grid-stack is position: 'relative'\n    this._dragFollow(e); // now position it\n    style.transition = 'none'; // show up instantly\n    setTimeout(() => {\n      if (this.helper) {\n        style.transition = null; // recover animation\n      }\n    }, 0);\n    return this;\n  }\n\n  /** @internal restore back the original style before dragging */\n  protected _removeHelperStyle(): DDDraggable {\n    this.helper.classList.remove('ui-draggable-dragging');\n    let node = (this.helper as GridItemHTMLElement)?.gridstackNode;\n    // don't bother restoring styles if we're gonna remove anyway...\n    if (!node?._isAboutToRemove && this.dragElementOriginStyle) {\n      let helper = this.helper;\n      // don't animate, otherwise we animate offseted when switching back to 'absolute' from 'fixed'.\n      // TODO: this also removes resizing animation which doesn't have this issue, but others.\n      // Ideally both would animate ('move' would immediately restore 'absolute' and adjust coordinate to match,\n      // then trigger a delay (repaint) to restore to final dest with animate) but then we need to make sure 'resizestop'\n      // is called AFTER 'transitionend' event is received (see https://github.com/gridstack/gridstack.js/issues/2033)\n      let transition = this.dragElementOriginStyle['transition'] || null;\n      helper.style.transition = this.dragElementOriginStyle['transition'] = 'none'; // can't be NULL #1973\n      DDDraggable.originStyleProp.forEach(prop => helper.style[prop] = this.dragElementOriginStyle[prop] || null);\n      setTimeout(() => helper.style.transition = transition, 50); // recover animation from saved vars after a pause (0 isn't enough #1973)\n    }\n    delete this.dragElementOriginStyle;\n    return this;\n  }\n\n  /** @internal updates the top/left position to follow the mouse */\n  protected _dragFollow(e: DragEvent): void {\n    let containmentRect = { left: 0, top: 0 };\n    // if (this.helper.style.position === 'absolute') { // we use 'fixed'\n    //   const { left, top } = this.helperContainment.getBoundingClientRect();\n    //   containmentRect = { left, top };\n    // }\n    const style = this.helper.style;\n    const offset = this.dragOffset;\n    style.left = e.clientX + offset.offsetLeft - containmentRect.left + 'px';\n    style.top = e.clientY + offset.offsetTop - containmentRect.top + 'px';\n  }\n\n  /** @internal */\n  protected _setupHelperContainmentStyle(): DDDraggable {\n    this.helperContainment = this.helper.parentElement;\n    if (this.helper.style.position !== 'fixed') {\n      this.parentOriginStylePosition = this.helperContainment.style.position;\n      if (window.getComputedStyle(this.helperContainment).position.match(/static/)) {\n        this.helperContainment.style.position = 'relative';\n      }\n    }\n    return this;\n  }\n\n  /** @internal */\n  protected _getDragOffset(event: DragEvent, el: HTMLElement, parent: HTMLElement): DragOffset {\n\n    // in case ancestor has transform/perspective css properties that change the viewpoint\n    let xformOffsetX = 0;\n    let xformOffsetY = 0;\n    if (parent) {\n      const testEl = document.createElement('div');\n      Utils.addElStyles(testEl, {\n        opacity: '0',\n        position: 'fixed',\n        top: 0 + 'px',\n        left: 0 + 'px',\n        width: '1px',\n        height: '1px',\n        zIndex: '-999999',\n      });\n      parent.appendChild(testEl);\n      const testElPosition = testEl.getBoundingClientRect();\n      parent.removeChild(testEl);\n      xformOffsetX = testElPosition.left;\n      xformOffsetY = testElPosition.top;\n      // TODO: scale ?\n    }\n\n    const targetOffset = el.getBoundingClientRect();\n    return {\n      left: targetOffset.left,\n      top: targetOffset.top,\n      offsetLeft: - event.clientX + targetOffset.left - xformOffsetX,\n      offsetTop: - event.clientY + targetOffset.top - xformOffsetY,\n      width: targetOffset.width,\n      height: targetOffset.height\n    };\n  }\n\n  /** @internal TODO: set to public as called by DDDroppable! */\n  public ui(): DDUIData {\n    const containmentEl = this.el.parentElement;\n    const containmentRect = containmentEl.getBoundingClientRect();\n    const offset = this.helper.getBoundingClientRect();\n    return {\n      position: { //Current CSS position of the helper as { top, left } object\n        top: offset.top - containmentRect.top,\n        left: offset.left - containmentRect.left\n      }\n      /* not used by GridStack for now...\n      helper: [this.helper], //The object arr representing the helper that's being dragged.\n      offset: { top: offset.top, left: offset.left } // Current offset position of the helper as { top, left } object.\n      */\n    };\n  }\n}\n","/**\n * dd-droppable.ts 7.3.0\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { DDDraggable } from './dd-draggable';\nimport { DDManager } from './dd-manager';\nimport { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';\nimport { Utils } from './utils';\nimport { DDElementHost } from './dd-element';\nimport { isTouch, pointerenter, pointerleave } from './dd-touch';\nimport { DDUIData } from './types';\n\nexport interface DDDroppableOpt {\n  accept?: string | ((el: HTMLElement) => boolean);\n  drop?: (event: DragEvent, ui: DDUIData) => void;\n  over?: (event: DragEvent, ui: DDUIData) => void;\n  out?: (event: DragEvent, ui: DDUIData) => void;\n}\n\n// let count = 0; // TEST\n\nexport class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt<DDDroppableOpt> {\n\n  public accept: (el: HTMLElement) => boolean;\n  public el: HTMLElement;\n  public option: DDDroppableOpt;\n\n  constructor(el: HTMLElement, opts: DDDroppableOpt = {}) {\n    super();\n    this.el = el;\n    this.option = opts;\n    // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)\n    this._mouseEnter = this._mouseEnter.bind(this);\n    this._mouseLeave = this._mouseLeave.bind(this);\n    this.enable();\n    this._setupAccept();\n  }\n\n  public on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void {\n    super.on(event, callback);\n  }\n\n  public off(event: 'drop' | 'dropover' | 'dropout'): void {\n    super.off(event);\n  }\n\n  public enable(): void {\n    if (this.disabled === false) return;\n    super.enable();\n    this.el.classList.add('ui-droppable');\n    this.el.classList.remove('ui-droppable-disabled');\n    this.el.addEventListener('mouseenter', this._mouseEnter);\n    this.el.addEventListener('mouseleave', this._mouseLeave);\n    if (isTouch) {\n      this.el.addEventListener('pointerenter', pointerenter);\n      this.el.addEventListener('pointerleave', pointerleave);\n    }\n  }\n\n  public disable(forDestroy = false): void {\n    if (this.disabled === true) return;\n    super.disable();\n    this.el.classList.remove('ui-droppable');\n    if (!forDestroy) this.el.classList.add('ui-droppable-disabled');\n    this.el.removeEventListener('mouseenter', this._mouseEnter);\n    this.el.removeEventListener('mouseleave', this._mouseLeave);\n    if (isTouch) {\n      this.el.removeEventListener('pointerenter', pointerenter);\n      this.el.removeEventListener('pointerleave', pointerleave);\n    }\n  }\n\n  public destroy(): void {\n    this.disable(true);\n    this.el.classList.remove('ui-droppable');\n    this.el.classList.remove('ui-droppable-disabled');\n    super.destroy();\n  }\n\n  public updateOption(opts: DDDroppableOpt): DDDroppable {\n    Object.keys(opts).forEach(key => this.option[key] = opts[key]);\n    this._setupAccept();\n    return this;\n  }\n\n  /** @internal called when the cursor enters our area - prepare for a possible drop and track leaving */\n  protected _mouseEnter(e: MouseEvent): void {\n    // console.log(`${count++} Enter ${this.el.id || (this.el as GridHTMLElement).gridstack.opts.id}`); // TEST\n    if (!DDManager.dragElement) return;\n    if (!this._canDrop(DDManager.dragElement.el)) return;\n    e.preventDefault();\n    e.stopPropagation();\n\n    // make sure when we enter this, that the last one gets a leave FIRST to correctly cleanup as we don't always do\n    if (DDManager.dropElement && DDManager.dropElement !== this) {\n      DDManager.dropElement._mouseLeave(e as DragEvent);\n    }\n    DDManager.dropElement = this;\n\n    const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'dropover' });\n    if (this.option.over) {\n      this.option.over(ev, this._ui(DDManager.dragElement))\n    }\n    this.triggerEvent('dropover', ev);\n    this.el.classList.add('ui-droppable-over');\n    // console.log('tracking'); // TEST\n  }\n\n  /** @internal called when the item is leaving our area, stop tracking if we had moving item */\n  protected _mouseLeave(e: MouseEvent): void {\n    // console.log(`${count++} Leave ${this.el.id || (this.el as GridHTMLElement).gridstack.opts.id}`); // TEST\n    if (!DDManager.dragElement || DDManager.dropElement !== this) return;\n    e.preventDefault();\n    e.stopPropagation();\n\n    const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'dropout' });\n    if (this.option.out) {\n      this.option.out(ev, this._ui(DDManager.dragElement))\n    }\n    this.triggerEvent('dropout', ev);\n\n    if (DDManager.dropElement === this) {\n      delete DDManager.dropElement;\n      // console.log('not tracking'); // TEST\n\n      // if we're still over a parent droppable, send it an enter as we don't get one from leaving nested children\n      let parentDrop: DDDroppable;\n      let parent: DDElementHost = this.el.parentElement;\n      while (!parentDrop && parent) {\n        parentDrop = parent.ddElement?.ddDroppable;\n        parent = parent.parentElement;\n      }\n      if (parentDrop) {\n        parentDrop._mouseEnter(e);\n      }\n    }\n  }\n\n  /** item is being dropped on us - called by the drag mouseup handler - this calls the client drop event */\n  public drop(e: MouseEvent): void {\n    e.preventDefault();\n    const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'drop' });\n    if (this.option.drop) {\n      this.option.drop(ev, this._ui(DDManager.dragElement))\n    }\n    this.triggerEvent('drop', ev);\n  }\n\n  /** @internal true if element matches the string/method accept option */\n  protected _canDrop(el: HTMLElement): boolean {\n    return el && (!this.accept || this.accept(el));\n  }\n\n  /** @internal */\n  protected _setupAccept(): DDDroppable {\n    if (!this.option.accept) return this;\n    if (typeof this.option.accept === 'string') {\n      this.accept = (el: HTMLElement) => el.matches(this.option.accept as string);\n    } else {\n      this.accept = this.option.accept;\n    }\n    return this;\n  }\n\n  /** @internal */\n  protected _ui(drag: DDDraggable): DDUIData {\n    return {\n      draggable: drag.el,\n      ...drag.ui()\n    };\n  }\n}\n\n","/**\n * dd-elements.ts 7.3.0\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\n */\n\nimport { DDResizable, DDResizableOpt } from './dd-resizable';\nimport { GridItemHTMLElement } from './types';\nimport { DDDraggable, DDDraggableOpt } from './dd-draggable';\nimport { DDDroppable, DDDroppableOpt } from './dd-droppable';\n\nexport interface DDElementHost extends GridItemHTMLElement {\n  ddElement?: DDElement;\n}\n\nexport class DDElement {\n\n  static init(el: DDElementHost): DDElement {\n    if (!el.ddElement) { el.ddElement = new DDElement(el); }\n    return el.ddElement;\n  }\n\n  public el: DDElementHost;\n  public ddDraggable?: DDDraggable;\n  public ddDroppable?: DDDroppable;\n  public ddResizable?: DDResizable;\n\n  constructor(el: DDElementHost) {\n    this.el = el;\n  }\n\n  public on(eventName: string, callback: (event: MouseEvent) => void): DDElement {\n    if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) {\n      this.ddDraggable.on(eventName as 'drag' | 'dragstart' | 'dragstop', callback);\n    } else if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) {\n      this.ddDroppable.on(eventName as 'drop' | 'dropover' | 'dropout', callback);\n    } else if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) {\n      this.ddResizable.on(eventName as 'resizestart' | 'resize' | 'resizestop', callback);\n    }\n    return this;\n  }\n\n  public off(eventName: string): DDElement {\n    if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) {\n      this.ddDraggable.off(eventName as 'drag' | 'dragstart' | 'dragstop');\n    } else if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) {\n      this.ddDroppable.off(eventName as 'drop' | 'dropover' | 'dropout');\n    } else if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) {\n      this.ddResizable.off(eventName as 'resizestart' | 'resize' | 'resizestop');\n    }\n    return this;\n  }\n\n  public setupDraggable(opts: DDDraggableOpt): DDElement {\n    if (!this.ddDraggable) {\n      this.ddDraggable = new DDDraggable(this.el, opts);\n    } else {\n      this.ddDraggable.updateOption(opts);\n    }\n    return this;\n  }\n\n  public cleanDraggable(): DDElement {\n    if (this.ddDraggable) {\n      this.ddDraggable.destroy();\n      delete this.ddDraggable;\n    }\n    return this;\n  }\n\n  public setupResizable(opts: DDResizableOpt): DDElement {\n    if (!this.ddResizable) {\n      this.ddResizable = new DDResizable(this.el, opts);\n    } else {\n      this.ddResizable.updateOption(opts);\n    }\n    return this;\n  }\n\n  public cleanResizable(): DDElement {\n    if (this.ddResizable) {\n      this.ddResizable.destroy();\n      delete this.ddResizable;\n    }\n    return this;\n  }\n\n  public setupDroppable(opts: DDDroppableOpt): DDElement {\n    if (!this.ddDroppable) {\n      this.ddDroppable = new DDDroppable(this.el, opts);\n    } else {\n      this.ddDroppable.updateOption(opts);\n    }\n    return this;\n  }\n\n  public cleanDroppable(): DDElement {\n    if (this.ddDroppable) {\n      this.ddDroppable.destroy();\n      delete this.ddDroppable;\n    }\n    return this;\n  }\n}\n","/**\r\n * dd-gridstack.ts 7.3.0\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { GridItemHTMLElement, GridStackElement, DDDragInOpt } from './types';\r\nimport { Utils } from './utils';\r\nimport { DDManager } from './dd-manager';\r\nimport { DDElement, DDElementHost } from './dd-element';\r\n\r\n/** Drag&Drop drop options */\r\nexport type DDDropOpt = {\r\n  /** function or class type that this grid will accept as dropped items (see GridStackOptions.acceptWidgets) */\r\n  accept?: (el: GridItemHTMLElement) => boolean;\r\n}\r\n\r\n/** drag&drop options currently called from the main code, but others can be passed in grid options */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | any;\r\nexport type DDKey = 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight';\r\nexport type DDValue = number | string;\r\n\r\n/** drag&drop events callbacks */\r\nexport type DDCallback = (event: Event, arg2: GridItemHTMLElement, helper?: GridItemHTMLElement) => void;\r\n\r\n// let count = 0; // TEST\r\n\r\n/**\r\n * HTML Native Mouse and Touch Events Drag and Drop functionality.\r\n */\r\nexport class DDGridStack {\r\n\r\n  public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): DDGridStack {\r\n    this._getDDElements(el).forEach(dEl => {\r\n      if (opts === 'disable' || opts === 'enable') {\r\n        dEl.ddResizable && dEl.ddResizable[opts](); // can't create DD as it requires options for setupResizable()\r\n      } else if (opts === 'destroy') {\r\n        dEl.ddResizable && dEl.cleanResizable();\r\n      } else if (opts === 'option') {\r\n        dEl.setupResizable({ [key]: value });\r\n      } else {\r\n        const grid = dEl.el.gridstackNode.grid;\r\n        let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : grid.opts.resizable.handles;\r\n        let autoHide = !grid.opts.alwaysShowResizeHandle;\r\n        dEl.setupResizable({\r\n          ...grid.opts.resizable,\r\n          ...{ handles, autoHide },\r\n          ...{\r\n            start: opts.start,\r\n            stop: opts.stop,\r\n            resize: opts.resize\r\n          }\r\n        });\r\n      }\r\n    });\r\n    return this;\r\n  }\r\n\r\n  public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): DDGridStack {\r\n    this._getDDElements(el).forEach(dEl => {\r\n      if (opts === 'disable' || opts === 'enable') {\r\n        dEl.ddDraggable && dEl.ddDraggable[opts](); // can't create DD as it requires options for setupDraggable()\r\n      } else if (opts === 'destroy') {\r\n        dEl.ddDraggable && dEl.cleanDraggable();\r\n      } else if (opts === 'option') {\r\n        dEl.setupDraggable({ [key]: value });\r\n      } else {\r\n        const grid = dEl.el.gridstackNode.grid;\r\n        dEl.setupDraggable({\r\n          ...grid.opts.draggable,\r\n          ...{\r\n            // containment: (grid.parentGridItem && !grid.opts.dragOut) ? grid.el.parentElement : (grid.opts.draggable.containment || null),\r\n            start: opts.start,\r\n            stop: opts.stop,\r\n            drag: opts.drag\r\n          }\r\n        });\r\n      }\r\n    });\r\n    return this;\r\n  }\r\n\r\n  public dragIn(el: GridStackElement, opts: DDDragInOpt): DDGridStack {\r\n    this._getDDElements(el).forEach(dEl => dEl.setupDraggable(opts));\r\n    return this;\r\n  }\r\n\r\n  public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): DDGridStack {\r\n    if (typeof opts.accept === 'function' && !opts._accept) {\r\n      opts._accept = opts.accept;\r\n      opts.accept = (el) => opts._accept(el);\r\n    }\r\n    this._getDDElements(el).forEach(dEl => {\r\n      if (opts === 'disable' || opts === 'enable') {\r\n        dEl.ddDroppable && dEl.ddDroppable[opts]();\r\n      } else if (opts === 'destroy') {\r\n        if (dEl.ddDroppable) { // error to call destroy if not there\r\n          dEl.cleanDroppable();\r\n        }\r\n      } else if (opts === 'option') {\r\n        dEl.setupDroppable({ [key]: value });\r\n      } else {\r\n        dEl.setupDroppable(opts);\r\n      }\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /** true if element is droppable */\r\n  public isDroppable(el: DDElementHost): boolean {\r\n    return !!(el && el.ddElement && el.ddElement.ddDroppable && !el.ddElement.ddDroppable.disabled);\r\n  }\r\n\r\n  /** true if element is draggable */\r\n  public isDraggable(el: DDElementHost): boolean {\r\n    return !!(el && el.ddElement && el.ddElement.ddDraggable && !el.ddElement.ddDraggable.disabled);\r\n  }\r\n\r\n  /** true if element is draggable */\r\n  public isResizable(el: DDElementHost): boolean {\r\n    return !!(el && el.ddElement && el.ddElement.ddResizable && !el.ddElement.ddResizable.disabled);\r\n  }\r\n\r\n  public on(el: GridItemHTMLElement, name: string, callback: DDCallback): DDGridStack {\r\n    this._getDDElements(el).forEach(dEl =>\r\n      dEl.on(name, (event: Event) => {\r\n        callback(\r\n          event,\r\n          DDManager.dragElement ? DDManager.dragElement.el : event.target as GridItemHTMLElement,\r\n          DDManager.dragElement ? DDManager.dragElement.helper : null)\r\n      })\r\n    );\r\n    return this;\r\n  }\r\n\r\n  public off(el: GridItemHTMLElement, name: string): DDGridStack {\r\n    this._getDDElements(el).forEach(dEl => dEl.off(name));\r\n    return this;\r\n  }\r\n\r\n  /** @internal returns a list of DD elements, creating them on the fly by default */\r\n  protected _getDDElements(els: GridStackElement, create = true): DDElement[] {\r\n    let hosts = Utils.getElements(els) as DDElementHost[];\r\n    if (!hosts.length) return [];\r\n    let list = hosts.map(e => e.ddElement || (create ? DDElement.init(e) : null));\r\n    if (!create) { list.filter(d => d); } // remove nulls\r\n    return list;\r\n  }\r\n}\r\n","/**\n * dd-manager.ts 7.3.0\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\n */\n\nimport { DDDraggable } from './dd-draggable';\nimport { DDDroppable } from './dd-droppable';\nimport { DDResizable } from './dd-resizable';\n\n/**\n * globals that are shared across Drag & Drop instances\n */\nexport class DDManager {\n  /** if set (true | in msec), dragging placement (collision) will only happen after a pause by the user*/\n  public static pauseDrag: boolean | number;\n\n  /** true if a mouse down event was handled */\n  public static mouseHandled: boolean;\n\n  /** item being dragged */\n  public static dragElement: DDDraggable;\n\n  /** item we are currently over as drop target */\n  public static dropElement: DDDroppable;\n\n  /** current item we're over for resizing purpose (ignore nested grid resize handles) */\n  public static overResizeElement: DDResizable;\n\n}\n","/**\n * dd-resizable-handle.ts 7.3.0\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { isTouch, pointerdown, touchend, touchmove, touchstart } from './dd-touch';\n\nexport interface DDResizableHandleOpt {\n  start?: (event) => void;\n  move?: (event) => void;\n  stop?: (event) => void;\n}\n\nexport class DDResizableHandle {\n  /** @internal */\n  protected el: HTMLElement;\n  /** @internal */\n  protected host: HTMLElement;\n  /** @internal */\n  protected option: DDResizableHandleOpt;\n  /** @internal */\n  protected dir: string;\n  /** @internal true after we've moved enough pixels to start a resize */\n  protected moving = false;\n  /** @internal */\n  protected mouseDownEvent: MouseEvent;\n  /** @internal */\n  protected static prefix = 'ui-resizable-';\n\n  constructor(host: HTMLElement, direction: string, option: DDResizableHandleOpt) {\n    this.host = host;\n    this.dir = direction;\n    this.option = option;\n    // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)\n    this._mouseDown = this._mouseDown.bind(this);\n    this._mouseMove = this._mouseMove.bind(this);\n    this._mouseUp = this._mouseUp.bind(this);\n\n    this._init();\n  }\n\n  /** @internal */\n  protected _init(): DDResizableHandle {\n    const el = document.createElement('div');\n    el.classList.add('ui-resizable-handle');\n    el.classList.add(`${DDResizableHandle.prefix}${this.dir}`);\n    el.style.zIndex = '100';\n    el.style.userSelect = 'none';\n    this.el = el;\n    this.host.appendChild(this.el);\n    this.el.addEventListener('mousedown', this._mouseDown);\n    if (isTouch) {\n      this.el.addEventListener('touchstart', touchstart);\n      this.el.addEventListener('pointerdown', pointerdown);\n      // this.el.style.touchAction = 'none'; // not needed unlike pointerdown doc comment\n    }\n    return this;\n  }\n\n  /** call this when resize handle needs to be removed and cleaned up */\n  public destroy(): DDResizableHandle {\n    if (this.moving) this._mouseUp(this.mouseDownEvent);\n    this.el.removeEventListener('mousedown', this._mouseDown);\n    if (isTouch) {\n      this.el.removeEventListener('touchstart', touchstart);\n      this.el.removeEventListener('pointerdown', pointerdown);\n    }\n    this.host.removeChild(this.el);\n    delete this.el;\n    delete this.host;\n    return this;\n  }\n\n  /** @internal called on mouse down on us: capture move on the entire document (mouse might not stay on us) until we release the mouse */\n  protected _mouseDown(e: MouseEvent): void {\n    this.mouseDownEvent = e;\n    document.addEventListener('mousemove', this._mouseMove, true); // capture, not bubble\n    document.addEventListener('mouseup', this._mouseUp, true);\n    if (isTouch) {\n      this.el.addEventListener('touchmove', touchmove);\n      this.el.addEventListener('touchend', touchend);\n    }\n    e.stopPropagation();\n    e.preventDefault();\n  }\n\n  /** @internal */\n  protected _mouseMove(e: MouseEvent): void {\n    let s = this.mouseDownEvent;\n    if (this.moving) {\n      this._triggerEvent('move', e);\n    } else if (Math.abs(e.x - s.x) + Math.abs(e.y - s.y) > 2) {\n      // don't start unless we've moved at least 3 pixels\n      this.moving = true;\n      this._triggerEvent('start', this.mouseDownEvent);\n      this._triggerEvent('move', e);\n    }\n    e.stopPropagation();\n    e.preventDefault();\n  }\n\n  /** @internal */\n  protected _mouseUp(e: MouseEvent): void {\n    if (this.moving) {\n      this._triggerEvent('stop', e);\n    }\n    document.removeEventListener('mousemove', this._mouseMove, true);\n    document.removeEventListener('mouseup', this._mouseUp, true);\n    if (isTouch) {\n      this.el.removeEventListener('touchmove', touchmove);\n      this.el.removeEventListener('touchend', touchend);\n    }\n    delete this.moving;\n    delete this.mouseDownEvent;\n    e.stopPropagation();\n    e.preventDefault();\n  }\n\n  /** @internal */\n  protected _triggerEvent(name: string, event: MouseEvent): DDResizableHandle {\n    if (this.option[name]) this.option[name](event);\n    return this;\n  }\n}\n","/**\n * dd-resizable.ts 7.3.0\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { DDResizableHandle } from './dd-resizable-handle';\nimport { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';\nimport { Utils } from './utils';\nimport { DDUIData, Rect, Size } from './types';\nimport { DDManager } from './dd-manager';\n\n// import { GridItemHTMLElement } from './types'; let count = 0; // TEST\n\n// TODO: merge with DDDragOpt\nexport interface DDResizableOpt {\n  autoHide?: boolean;\n  handles?: string;\n  maxHeight?: number;\n  maxWidth?: number;\n  minHeight?: number;\n  minWidth?: number;\n  start?: (event: Event, ui: DDUIData) => void;\n  stop?: (event: Event) => void;\n  resize?: (event: Event, ui: DDUIData) => void;\n}\n\nexport class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt<DDResizableOpt> {\n\n  // have to be public else complains for HTMLElementExtendOpt ?\n  public el: HTMLElement;\n  public option: DDResizableOpt;\n\n  /** @internal */\n  protected handlers: DDResizableHandle[];\n  /** @internal */\n  protected originalRect: Rect;\n  /** @internal */\n  protected temporalRect: Rect;\n  /** @internal */\n  protected scrollY: number;\n  /** @internal */\n  protected scrolled: number;\n  /** @internal */\n  protected scrollEl: HTMLElement;\n  /** @internal */\n  protected startEvent: MouseEvent;\n  /** @internal value saved in the same order as _originStyleProp[] */\n  protected elOriginStyleVal: string[];\n  /** @internal */\n  protected parentOriginStylePosition: string;\n  /** @internal */\n  protected static _originStyleProp = ['width', 'height', 'position', 'left', 'top', 'opacity', 'zIndex'];\n\n  constructor(el: HTMLElement, opts: DDResizableOpt = {}) {\n    super();\n    this.el = el;\n    this.option = opts;\n    // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)\n    this._mouseOver = this._mouseOver.bind(this);\n    this._mouseOut = this._mouseOut.bind(this);\n    this.enable();\n    this._setupAutoHide(this.option.autoHide);\n    this._setupHandlers();\n  }\n\n  public on(event: 'resizestart' | 'resize' | 'resizestop', callback: (event: DragEvent) => void): void {\n    super.on(event, callback);\n  }\n\n  public off(event: 'resizestart' | 'resize' | 'resizestop'): void {\n    super.off(event);\n  }\n\n  public enable(): void {\n    super.enable();\n    this.el.classList.add('ui-resizable');\n    this.el.classList.remove('ui-resizable-disabled');\n    this._setupAutoHide(this.option.autoHide);\n  }\n\n  public disable(): void {\n    super.disable();\n    this.el.classList.add('ui-resizable-disabled');\n    this.el.classList.remove('ui-resizable');\n    this._setupAutoHide(false);\n  }\n\n  public destroy(): void {\n    this._removeHandlers();\n    this._setupAutoHide(false);\n    this.el.classList.remove('ui-resizable');\n    delete this.el;\n    super.destroy();\n  }\n\n  public updateOption(opts: DDResizableOpt): DDResizable {\n    let updateHandles = (opts.handles && opts.handles !== this.option.handles);\n    let updateAutoHide = (opts.autoHide && opts.autoHide !== this.option.autoHide);\n    Object.keys(opts).forEach(key => this.option[key] = opts[key]);\n    if (updateHandles) {\n      this._removeHandlers();\n      this._setupHandlers();\n    }\n    if (updateAutoHide) {\n      this._setupAutoHide(this.option.autoHide);\n    }\n    return this;\n  }\n\n  /** @internal turns auto hide on/off */\n  protected _setupAutoHide(auto: boolean): DDResizable {\n    if (auto) {\n      this.el.classList.add('ui-resizable-autohide');\n      // use mouseover and not mouseenter to get better performance and track for nested cases\n      this.el.addEventListener('mouseover', this._mouseOver);\n      this.el.addEventListener('mouseout', this._mouseOut);\n    } else {\n      this.el.classList.remove('ui-resizable-autohide');\n      this.el.removeEventListener('mouseover', this._mouseOver);\n      this.el.removeEventListener('mouseout', this._mouseOut);\n      if (DDManager.overResizeElement === this) {\n        delete DDManager.overResizeElement;\n      }\n    }\n    return this;\n  }\n\n  /** @internal */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  protected _mouseOver(e: Event): void {\n    // console.log(`${count++} pre-enter ${(this.el as GridItemHTMLElement).gridstackNode._id}`)\n    // already over a child, ignore. Ideally we just call e.stopPropagation() but see https://github.com/gridstack/gridstack.js/issues/2018\n    if (DDManager.overResizeElement || DDManager.dragElement) return;\n    DDManager.overResizeElement = this;\n    // console.log(`${count++} enter ${(this.el as GridItemHTMLElement).gridstackNode._id}`)\n    this.el.classList.remove('ui-resizable-autohide');\n  }\n\n  /** @internal */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  protected _mouseOut(e: Event): void {\n    // console.log(`${count++} pre-leave ${(this.el as GridItemHTMLElement).gridstackNode._id}`)\n    if (DDManager.overResizeElement !== this) return;\n    delete DDManager.overResizeElement;\n    // console.log(`${count++} leave ${(this.el as GridItemHTMLElement).gridstackNode._id}`)\n    this.el.classList.add('ui-resizable-autohide');\n  }\n\n  /** @internal */\n  protected _setupHandlers(): DDResizable {\n    let handlerDirection = this.option.handles || 'e,s,se';\n    if (handlerDirection === 'all') {\n      handlerDirection = 'n,e,s,w,se,sw,ne,nw';\n    }\n    this.handlers = handlerDirection.split(',')\n      .map(dir => dir.trim())\n      .map(dir => new DDResizableHandle(this.el, dir, {\n        start: (event: MouseEvent) => {\n          this._resizeStart(event);\n        },\n        stop: (event: MouseEvent) => {\n          this._resizeStop(event);\n        },\n        move: (event: MouseEvent) => {\n          this._resizing(event, dir);\n        }\n      }));\n    return this;\n  }\n\n  /** @internal */\n  protected _resizeStart(event: MouseEvent): DDResizable {\n    this.originalRect = this.el.getBoundingClientRect();\n    this.scrollEl = Utils.getScrollElement(this.el);\n    this.scrollY = this.scrollEl.scrollTop;\n    this.scrolled = 0;\n    this.startEvent = event;\n    this._setupHelper();\n    this._applyChange();\n    const ev = Utils.initEvent<MouseEvent>(event, { type: 'resizestart', target: this.el });\n    if (this.option.start) {\n      this.option.start(ev, this._ui());\n    }\n    this.el.classList.add('ui-resizable-resizing');\n    this.triggerEvent('resizestart', ev);\n    return this;\n  }\n\n  /** @internal */\n  protected _resizing(event: MouseEvent, dir: string): DDResizable {\n    this.scrolled = this.scrollEl.scrollTop - this.scrollY;\n    this.temporalRect = this._getChange(event, dir);\n    this._applyChange();\n    const ev = Utils.initEvent<MouseEvent>(event, { type: 'resize', target: this.el });\n    if (this.option.resize) {\n      this.option.resize(ev, this._ui());\n    }\n    this.triggerEvent('resize', ev);\n    return this;\n  }\n\n  /** @internal */\n  protected _resizeStop(event: MouseEvent): DDResizable {\n    const ev = Utils.initEvent<MouseEvent>(event, { type: 'resizestop', target: this.el });\n    if (this.option.stop) {\n      this.option.stop(ev); // Note: ui() not used by gridstack so don't pass\n    }\n    this.el.classList.remove('ui-resizable-resizing');\n    this.triggerEvent('resizestop', ev);\n    this._cleanHelper();\n    delete this.startEvent;\n    delete this.originalRect;\n    delete this.temporalRect;\n    delete this.scrollY;\n    delete this.scrolled;\n    return this;\n  }\n\n  /** @internal */\n  protected _setupHelper(): DDResizable {\n    this.elOriginStyleVal = DDResizable._originStyleProp.map(prop => this.el.style[prop]);\n    this.parentOriginStylePosition = this.el.parentElement.style.position;\n    if (window.getComputedStyle(this.el.parentElement).position.match(/static/)) {\n      this.el.parentElement.style.position = 'relative';\n    }\n    this.el.style.position = 'absolute';\n    this.el.style.opacity = '0.8';\n    return this;\n  }\n\n  /** @internal */\n  protected _cleanHelper(): DDResizable {\n    DDResizable._originStyleProp.forEach((prop, i) => {\n      this.el.style[prop] = this.elOriginStyleVal[i] || null;\n    });\n    this.el.parentElement.style.position = this.parentOriginStylePosition || null;\n    return this;\n  }\n\n  /** @internal */\n  protected _getChange(event: MouseEvent, dir: string): Rect {\n    const oEvent = this.startEvent;\n    const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out.\n      width: this.originalRect.width,\n      height: this.originalRect.height + this.scrolled,\n      left: this.originalRect.left,\n      top: this.originalRect.top - this.scrolled\n    };\n\n    const offsetX = event.clientX - oEvent.clientX;\n    const offsetY = event.clientY - oEvent.clientY;\n\n    if (dir.indexOf('e') > -1) {\n      newRect.width += offsetX;\n    } else if (dir.indexOf('w') > -1) {\n      newRect.width -= offsetX;\n      newRect.left += offsetX;\n    }\n    if (dir.indexOf('s') > -1) {\n      newRect.height += offsetY;\n    } else if (dir.indexOf('n') > -1) {\n      newRect.height -= offsetY;\n      newRect.top += offsetY\n    }\n    const constrain = this._constrainSize(newRect.width, newRect.height);\n    if (Math.round(newRect.width) !== Math.round(constrain.width)) { // round to ignore slight round-off errors\n      if (dir.indexOf('w') > -1) {\n        newRect.left += newRect.width - constrain.width;\n      }\n      newRect.width = constrain.width;\n    }\n    if (Math.round(newRect.height) !== Math.round(constrain.height)) {\n      if (dir.indexOf('n') > -1) {\n        newRect.top += newRect.height - constrain.height;\n      }\n      newRect.height = constrain.height;\n    }\n    return newRect;\n  }\n\n  /** @internal constrain the size to the set min/max values */\n  protected _constrainSize(oWidth: number, oHeight: number): Size {\n    const maxWidth = this.option.maxWidth || Number.MAX_SAFE_INTEGER;\n    const minWidth = this.option.minWidth || oWidth;\n    const maxHeight = this.option.maxHeight || Number.MAX_SAFE_INTEGER;\n    const minHeight = this.option.minHeight || oHeight;\n    const width = Math.min(maxWidth, Math.max(minWidth, oWidth));\n    const height = Math.min(maxHeight, Math.max(minHeight, oHeight));\n    return { width, height };\n  }\n\n  /** @internal */\n  protected _applyChange(): DDResizable {\n    let containmentRect = { left: 0, top: 0, width: 0, height: 0 };\n    if (this.el.style.position === 'absolute') {\n      const containmentEl = this.el.parentElement;\n      const { left, top } = containmentEl.getBoundingClientRect();\n      containmentRect = { left, top, width: 0, height: 0 };\n    }\n    if (!this.temporalRect) return this;\n    Object.keys(this.temporalRect).forEach(key => {\n      const value = this.temporalRect[key];\n      this.el.style[key] = value - containmentRect[key] + 'px';\n    });\n    return this;\n  }\n\n  /** @internal */\n  protected _removeHandlers(): DDResizable {\n    this.handlers.forEach(handle => handle.destroy());\n    delete this.handlers;\n    return this;\n  }\n\n  /** @internal */\n  protected _ui = (): DDUIData => {\n    const containmentEl = this.el.parentElement;\n    const containmentRect = containmentEl.getBoundingClientRect();\n    const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out.\n      width: this.originalRect.width,\n      height: this.originalRect.height + this.scrolled,\n      left: this.originalRect.left,\n      top: this.originalRect.top - this.scrolled\n    };\n    const rect = this.temporalRect || newRect;\n    return {\n      position: {\n        left: rect.left - containmentRect.left,\n        top: rect.top - containmentRect.top\n      },\n      size: {\n        width: rect.width,\n        height: rect.height\n      }\n      /* Gridstack ONLY needs position set above... keep around in case.\n      element: [this.el], // The object representing the element to be resized\n      helper: [], // TODO: not support yet - The object representing the helper that's being resized\n      originalElement: [this.el],// we don't wrap here, so simplify as this.el //The object representing the original element before it is wrapped\n      originalPosition: { // The position represented as { left, top } before the resizable is resized\n        left: this.originalRect.left - containmentRect.left,\n        top: this.originalRect.top - containmentRect.top\n      },\n      originalSize: { // The size represented as { width, height } before the resizable is resized\n        width: this.originalRect.width,\n        height: this.originalRect.height\n      }\n      */\n    };\n  }\n}\n","/**\n * touch.ts 7.3.0\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\n */\n\nimport { DDManager } from './dd-manager';\n\n/**\n * Detect touch support - Windows Surface devices and other touch devices\n * should we use this instead ? (what we had for always showing resize handles)\n * /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n */\nexport const isTouch: boolean = typeof window !== 'undefined' && typeof document !== 'undefined' &&\n( 'ontouchstart' in document\n  || 'ontouchstart' in window\n  // || !!window.TouchEvent // true on Windows 10 Chrome desktop so don't use this\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  || ((window as any).DocumentTouch && document instanceof (window as any).DocumentTouch)\n  || navigator.maxTouchPoints > 0\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  || (navigator as any).msMaxTouchPoints > 0\n);\n\n// interface TouchCoord {x: number, y: number};\n\nclass DDTouch {\n  public static touchHandled: boolean;\n  public static pointerLeaveTimeout: number;\n}\n\n/**\n* Get the x,y position of a touch event\n*/\n// function getTouchCoords(e: TouchEvent): TouchCoord {\n//   return {\n//     x: e.changedTouches[0].pageX,\n//     y: e.changedTouches[0].pageY\n//   };\n// }\n\n/**\n * Simulate a mouse event based on a corresponding touch event\n * @param {Object} e A touch event\n * @param {String} simulatedType The corresponding mouse event\n */\nfunction simulateMouseEvent(e: TouchEvent, simulatedType: string) {\n\n  // Ignore multi-touch events\n  if (e.touches.length > 1) return;\n\n  // Prevent \"Ignored attempt to cancel a touchmove event with cancelable=false\" errors\n  if (e.cancelable) e.preventDefault();\n\n  const touch = e.changedTouches[0], simulatedEvent = document.createEvent('MouseEvents');\n\n  // Initialize the simulated mouse event using the touch event's coordinates\n  simulatedEvent.initMouseEvent(\n    simulatedType,    // type\n    true,             // bubbles\n    true,             // cancelable\n    window,           // view\n    1,                // detail\n    touch.screenX,    // screenX\n    touch.screenY,    // screenY\n    touch.clientX,    // clientX\n    touch.clientY,    // clientY\n    false,            // ctrlKey\n    false,            // altKey\n    false,            // shiftKey\n    false,            // metaKey\n    0,                // button\n    null              // relatedTarget\n  );\n\n  // Dispatch the simulated event to the target element\n  e.target.dispatchEvent(simulatedEvent);\n}\n\n/**\n * Simulate a mouse event based on a corresponding Pointer event\n * @param {Object} e A pointer event\n * @param {String} simulatedType The corresponding mouse event\n */\nfunction simulatePointerMouseEvent(e: PointerEvent, simulatedType: string) {\n\n  // Prevent \"Ignored attempt to cancel a touchmove event with cancelable=false\" errors\n  if (e.cancelable) e.preventDefault();\n\n  const simulatedEvent = document.createEvent('MouseEvents');\n\n  // Initialize the simulated mouse event using the touch event's coordinates\n  simulatedEvent.initMouseEvent(\n    simulatedType,    // type\n    true,             // bubbles\n    true,             // cancelable\n    window,           // view\n    1,                // detail\n    e.screenX,    // screenX\n    e.screenY,    // screenY\n    e.clientX,    // clientX\n    e.clientY,    // clientY\n    false,            // ctrlKey\n    false,            // altKey\n    false,            // shiftKey\n    false,            // metaKey\n    0,                // button\n    null              // relatedTarget\n  );\n\n  // Dispatch the simulated event to the target element\n  e.target.dispatchEvent(simulatedEvent);\n}\n\n\n/**\n * Handle the touchstart events\n * @param {Object} e The widget element's touchstart event\n */\nexport function touchstart(e: TouchEvent): void {\n  // Ignore the event if another widget is already being handled\n  if (DDTouch.touchHandled) return;\n  DDTouch.touchHandled = true;\n\n  // Simulate the mouse events\n  // simulateMouseEvent(e, 'mouseover');\n  // simulateMouseEvent(e, 'mousemove');\n  simulateMouseEvent(e, 'mousedown');\n}\n\n/**\n * Handle the touchmove events\n * @param {Object} e The document's touchmove event\n */\nexport function touchmove(e: TouchEvent): void {\n  // Ignore event if not handled by us\n  if (!DDTouch.touchHandled) return;\n\n  simulateMouseEvent(e, 'mousemove');\n}\n\n/**\n * Handle the touchend events\n * @param {Object} e The document's touchend event\n */\nexport function touchend(e: TouchEvent): void {\n\n  // Ignore event if not handled\n  if (!DDTouch.touchHandled) return;\n\n  // cancel delayed leave event when we release on ourself which happens BEFORE we get this!\n  if (DDTouch.pointerLeaveTimeout) {\n    window.clearTimeout(DDTouch.pointerLeaveTimeout);\n    delete DDTouch.pointerLeaveTimeout;\n  }\n\n  const wasDragging = !!DDManager.dragElement;\n\n  // Simulate the mouseup event\n  simulateMouseEvent(e, 'mouseup');\n  // simulateMouseEvent(event, 'mouseout');\n\n  // If the touch interaction did not move, it should trigger a click\n  if (!wasDragging) {\n    simulateMouseEvent(e, 'click');\n  }\n\n  // Unset the flag to allow other widgets to inherit the touch event\n  DDTouch.touchHandled = false;\n}\n\n/**\n * Note we don't get touchenter/touchleave (which are deprecated)\n * see https://stackoverflow.com/questions/27908339/js-touch-equivalent-for-mouseenter\n * so instead of PointerEvent to still get enter/leave and send the matching mouse event.\n */\nexport function pointerdown(e: PointerEvent): void {\n  // console.log(\"pointer down\")\n  (e.target as HTMLElement).releasePointerCapture(e.pointerId) // <- Important!\n}\n\nexport function pointerenter(e: PointerEvent): void {\n  // ignore the initial one we get on pointerdown on ourself\n  if (!DDManager.dragElement) {\n    // console.log('pointerenter ignored');\n    return;\n  }\n  // console.log('pointerenter');\n  simulatePointerMouseEvent(e, 'mouseenter');\n}\n\nexport function pointerleave(e: PointerEvent): void {\n  // ignore the leave on ourself we get before releasing the mouse over ourself\n  // by delaying sending the event and having the up event cancel us\n  if (!DDManager.dragElement) {\n    // console.log('pointerleave ignored');\n    return;\n  }\n  DDTouch.pointerLeaveTimeout = window.setTimeout(() => {\n    delete DDTouch.pointerLeaveTimeout;\n    // console.log('pointerleave delayed');\n    simulatePointerMouseEvent(e, 'mouseleave');\n  }, 10);\n}\n\n","/**\n * gridstack-engine.ts 7.3.0\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { Utils } from './utils';\nimport { GridStackNode, ColumnOptions, GridStackPosition, GridStackMoveOpts } from './types';\n\n/** callback to update the DOM attributes since this class is generic (no HTML or other info) for items that changed - see _notify() */\ntype OnChangeCB = (nodes: GridStackNode[]) => void;\n\n/** options used during creation - similar to GridStackOptions */\nexport interface GridStackEngineOptions {\n  column?: number;\n  maxRow?: number;\n  float?: boolean;\n  nodes?: GridStackNode[];\n  onChange?: OnChangeCB;\n}\n\n/**\n * Defines the GridStack engine that does most no DOM grid manipulation.\n * See GridStack methods and vars for descriptions.\n *\n * NOTE: values should not be modified directly - call the main GridStack API instead\n */\nexport class GridStackEngine {\n  public column: number;\n  public maxRow: number;\n  public nodes: GridStackNode[];\n  public addedNodes: GridStackNode[] = [];\n  public removedNodes: GridStackNode[] = [];\n  public batchMode: boolean;\n  /** @internal callback to update the DOM attributes */\n  protected onChange: OnChangeCB;\n  /** @internal */\n  protected _float: boolean;\n  /** @internal */\n  protected _prevFloat: boolean;\n  /** @internal cached layouts of difference column count so we can restore back (eg 12 -> 1 -> 12) */\n  protected _layouts?: GridStackNode[][]; // maps column # to array of values nodes\n  /** @internal true while we are resizing widgets during column resize to skip certain parts */\n  protected _inColumnResize: boolean;\n  /** @internal true if we have some items locked */\n  protected _hasLocked: boolean;\n  /** @internal unique global internal _id counter NOT starting at 0 */\n  public static _idSeq = 1;\n\n  public constructor(opts: GridStackEngineOptions = {}) {\n    this.column = opts.column || 12;\n    this.maxRow = opts.maxRow;\n    this._float = opts.float;\n    this.nodes = opts.nodes || [];\n    this.onChange = opts.onChange;\n  }\n\n  public batchUpdate(flag = true): GridStackEngine {\n    if (!!this.batchMode === flag) return this;\n    this.batchMode = flag;\n    if (flag) {\n      this._prevFloat = this._float;\n      this._float = true; // let things go anywhere for now... will restore and possibly reposition later\n      this.saveInitial(); // since begin update (which is called multiple times) won't do this\n    } else {\n      this._float = this._prevFloat;\n      delete this._prevFloat;\n      this._packNodes()._notify();\n    }\n    return this;\n  }\n\n  // use entire row for hitting area (will use bottom reverse sorted first) if we not actively moving DOWN and didn't already skip\n  protected _useEntireRowArea(node: GridStackNode, nn: GridStackPosition): boolean {\n    return (!this.float || this.batchMode && !this._prevFloat) && !this._hasLocked && (!node._moving || node._skipDown || nn.y <= node.y);\n  }\n\n  /** @internal fix collision on given 'node', going to given new location 'nn', with optional 'collide' node already found.\n   * return true if we moved. */\n  protected _fixCollisions(node: GridStackNode, nn = node, collide?: GridStackNode, opt: GridStackMoveOpts = {}): boolean {\n    this.sortNodes(-1); // from last to first, so recursive collision move items in the right order\n\n    collide = collide || this.collide(node, nn); // REAL area collide for swap and skip if none...\n    if (!collide) return false;\n\n    // swap check: if we're actively moving in gravity mode, see if we collide with an object the same size\n    if (node._moving && !opt.nested && !this.float) {\n      if (this.swap(node, collide)) return true;\n    }\n\n    // during while() collisions MAKE SURE to check entire row so larger items don't leap frog small ones (push them all down starting last in grid)\n    let area = nn;\n    if (this._useEntireRowArea(node, nn)) {\n      area = {x: 0, w: this.column, y: nn.y, h: nn.h};\n      collide = this.collide(node, area, opt.skip); // force new hit\n    }\n\n    let didMove = false;\n    let newOpt: GridStackMoveOpts = {nested: true, pack: false};\n    while (collide = collide || this.collide(node, area, opt.skip)) { // could collide with more than 1 item... so repeat for each\n      let moved: boolean;\n      // if colliding with a locked item OR moving down with top gravity (and collide could move up) -> skip past the collide,\n      // but remember that skip down so we only do this once (and push others otherwise).\n      if (collide.locked || node._moving && !node._skipDown && nn.y > node.y && !this.float &&\n        // can take space we had, or before where we're going\n        (!this.collide(collide, {...collide, y: node.y}, node) || !this.collide(collide, {...collide, y: nn.y - collide.h}, node))) {\n        node._skipDown = (node._skipDown || nn.y > node.y);\n        moved = this.moveNode(node, {...nn, y: collide.y + collide.h, ...newOpt});\n        if (collide.locked && moved) {\n          Utils.copyPos(nn, node); // moving after lock become our new desired location\n        } else if (!collide.locked && moved && opt.pack) {\n          // we moved after and will pack: do it now and keep the original drop location, but past the old collide to see what else we might push way\n          this._packNodes();\n          nn.y = collide.y + collide.h;\n          Utils.copyPos(node, nn);\n        }\n        didMove = didMove || moved;\n      } else {\n        // move collide down *after* where we will be, ignoring where we are now (don't collide with us)\n        moved = this.moveNode(collide, {...collide, y: nn.y + nn.h, skip: node, ...newOpt});\n      }\n      if (!moved) { return didMove; } // break inf loop if we couldn't move after all (ex: maxRow, fixed)\n      collide = undefined;\n    }\n    return didMove;\n  }\n\n  /** return the nodes that intercept the given node. Optionally a different area can be used, as well as a second node to skip */\n  public collide(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode {\n    return this.nodes.find(n => n !== skip && n !== skip2 && Utils.isIntercepted(n, area));\n  }\n  public collideAll(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode[] {\n    return this.nodes.filter(n => n !== skip && n !== skip2 && Utils.isIntercepted(n, area));\n  }\n\n  /** does a pixel coverage collision based on where we started, returning the node that has the most coverage that is >50% mid line */\n  protected directionCollideCoverage(node: GridStackNode, o: GridStackMoveOpts, collides: GridStackNode[]): GridStackNode {\n    if (!o.rect || !node._rect) return;\n    let r0 = node._rect; // where started\n    let r = {...o.rect}; // where we are\n\n    // update dragged rect to show where it's coming from (above or below, etc...)\n    if (r.y > r0.y) {\n      r.h += r.y - r0.y;\n      r.y = r0.y;\n    } else {\n      r.h += r0.y - r.y;\n    }\n    if (r.x > r0.x) {\n      r.w += r.x - r0.x;\n      r.x = r0.x;\n    } else {\n      r.w += r0.x - r.x;\n    }\n\n    let collide: GridStackNode;\n    collides.forEach(n => {\n      if (n.locked || !n._rect) return;\n      let r2 = n._rect; // overlapping target\n      let yOver = Number.MAX_VALUE, xOver = Number.MAX_VALUE, overMax = 0.5; // need >50%\n      // depending on which side we started from, compute the overlap % of coverage\n      // (ex: from above/below we only compute the max horizontal line coverage)\n      if (r0.y < r2.y) { // from above\n        yOver = ((r.y + r.h) - r2.y) / r2.h;\n      } else if (r0.y+r0.h > r2.y+r2.h) { // from below\n        yOver = ((r2.y + r2.h) - r.y) / r2.h;\n      }\n      if (r0.x < r2.x) { // from the left\n        xOver = ((r.x + r.w) - r2.x) / r2.w;\n      } else if (r0.x+r0.w > r2.x+r2.w) { // from the right\n        xOver = ((r2.x + r2.w) - r.x) / r2.w;\n      }\n      let over = Math.min(xOver, yOver);\n      if (over > overMax) {\n        overMax = over;\n        collide = n;\n      }\n    });\n    o.collide = collide; // save it so we don't have to find it again\n    return collide;\n  }\n\n  /** does a pixel coverage returning the node that has the most coverage by area */\n  /*\n  protected collideCoverage(r: GridStackPosition, collides: GridStackNode[]): {collide: GridStackNode, over: number} {\n    let collide: GridStackNode;\n    let overMax = 0;\n    collides.forEach(n => {\n      if (n.locked || !n._rect) return;\n      let over = Utils.areaIntercept(r, n._rect);\n      if (over > overMax) {\n        overMax = over;\n        collide = n;\n      }\n    });\n    return {collide, over: overMax};\n  }\n  */\n\n  /** called to cache the nodes pixel rectangles used for collision detection during drag */\n  public cacheRects(w: number, h: number, top: number, right: number, bottom: number, left: number): GridStackEngine\n  {\n    this.nodes.forEach(n =>\n      n._rect = {\n        y: n.y * h + top,\n        x: n.x * w + left,\n        w: n.w * w - left - right,\n        h: n.h * h - top - bottom\n      }\n    );\n    return this;\n  }\n\n  /** called to possibly swap between 2 nodes (same size or column, not locked, touching), returning true if successful */\n  public swap(a: GridStackNode, b: GridStackNode): boolean {\n    if (!b || b.locked || !a || a.locked) return false;\n\n    function _doSwap(): true { // assumes a is before b IFF they have different height (put after rather than exact swap)\n      let x = b.x, y = b.y;\n      b.x = a.x; b.y = a.y; // b -> a position\n      if (a.h != b.h) {\n        a.x = x; a.y = b.y + b.h; // a -> goes after b\n      } else if (a.w != b.w) {\n        a.x = b.x + b.w; a.y = y; // a -> goes after b\n      } else {\n        a.x = x; a.y = y; // a -> old b position\n      }\n      a._dirty = b._dirty = true;\n      return true;\n    }\n    let touching: boolean; // remember if we called it (vs undefined)\n\n    // same size and same row or column, and touching\n    if (a.w === b.w && a.h === b.h && (a.x === b.x || a.y === b.y) && (touching = Utils.isTouching(a, b)))\n      return _doSwap();\n    if (touching === false) return; // IFF ran test and fail, bail out\n\n    // check for taking same columns (but different height) and touching\n    if (a.w === b.w && a.x === b.x && (touching || (touching = Utils.isTouching(a, b)))) {\n      if (b.y < a.y) { let t = a; a = b; b = t; } // swap a <-> b vars so a is first\n      return _doSwap();\n    }\n    if (touching === false) return;\n\n    // check if taking same row (but different width) and touching\n    if (a.h === b.h && a.y === b.y && (touching || (touching = Utils.isTouching(a, b)))) {\n      if (b.x < a.x) { let t = a; a = b; b = t; } // swap a <-> b vars so a is first\n      return _doSwap();\n    }\n    return false;\n  }\n\n  public isAreaEmpty(x: number, y: number, w: number, h: number): boolean {\n    let nn: GridStackNode = {x: x || 0, y: y || 0, w: w || 1, h: h || 1};\n    return !this.collide(nn);\n  }\n\n  /** re-layout grid items to reclaim any empty space */\n  public compact(): GridStackEngine {\n    if (this.nodes.length === 0) return this;\n    this.batchUpdate()\n      .sortNodes();\n    let copyNodes = this.nodes;\n    this.nodes = []; // pretend we have no nodes to conflict layout to start with...\n    copyNodes.forEach(node => {\n      if (!node.locked) {\n        node.autoPosition = true;\n      }\n      this.addNode(node, false); // 'false' for add event trigger\n      node._dirty = true; // will force attr update\n    });\n    return this.batchUpdate(false);\n  }\n\n  /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */\n  public set float(val: boolean) {\n    if (this._float === val) return;\n    this._float = val || false;\n    if (!val) {\n      this._packNodes()._notify();\n    }\n  }\n\n  /** float getter method */\n  public get float(): boolean { return this._float || false; }\n\n  /** sort the nodes array from first to last, or reverse. Called during collision/placement to force an order */\n  public sortNodes(dir?: -1 | 1): GridStackEngine {\n    this.nodes = Utils.sort(this.nodes, dir, this.column);\n    return this;\n  }\n\n  /** @internal called to top gravity pack the items back OR revert back to original Y positions when floating */\n  protected _packNodes(): GridStackEngine {\n    if (this.batchMode) { return this; }\n    this.sortNodes(); // first to last\n\n    if (this.float) {\n      // restore original Y pos\n      this.nodes.forEach(n => {\n        if (n._updating || n._orig === undefined || n.y === n._orig.y) return;\n        let newY = n.y;\n        while (newY > n._orig.y) {\n          --newY;\n          let collide = this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n          if (!collide) {\n            n._dirty = true;\n            n.y = newY;\n          }\n        }\n      });\n    } else {\n      // top gravity pack\n      this.nodes.forEach((n, i) => {\n        if (n.locked) return;\n        while (n.y > 0) {\n          let newY = i === 0 ? 0 : n.y - 1;\n          let canBeMoved = i === 0 || !this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n          if (!canBeMoved) break;\n          // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions\n          // and move items back. The user 'change' CB should detect changes from the original\n          // starting position instead.\n          n._dirty = (n.y !== newY);\n          n.y = newY;\n        }\n      });\n    }\n    return this;\n  }\n\n  /**\n   * given a random node, makes sure it's coordinates/values are valid in the current grid\n   * @param node to adjust\n   * @param resizing if out of bound, resize down or move into the grid to fit ?\n   */\n  public prepareNode(node: GridStackNode, resizing?: boolean): GridStackNode {\n    node = node || {};\n    node._id = node._id || GridStackEngine._idSeq++;\n\n    // if we're missing position, have the grid position us automatically (before we set them to 0,0)\n    if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) {\n      node.autoPosition = true;\n    }\n\n    // assign defaults for missing required fields\n    let defaults: GridStackNode = { x: 0, y: 0, w: 1, h: 1};\n    Utils.defaults(node, defaults);\n\n    if (!node.autoPosition) { delete node.autoPosition; }\n    if (!node.noResize) { delete node.noResize; }\n    if (!node.noMove) { delete node.noMove; }\n\n    // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #)\n    if (typeof node.x == 'string')      { node.x = Number(node.x); }\n    if (typeof node.y == 'string')      { node.y = Number(node.y); }\n    if (typeof node.w == 'string')  { node.w = Number(node.w); }\n    if (typeof node.h == 'string') { node.h = Number(node.h); }\n    if (isNaN(node.x))      { node.x = defaults.x; node.autoPosition = true; }\n    if (isNaN(node.y))      { node.y = defaults.y; node.autoPosition = true; }\n    if (isNaN(node.w))  { node.w = defaults.w; }\n    if (isNaN(node.h)) { node.h = defaults.h; }\n\n    return this.nodeBoundFix(node, resizing);\n  }\n\n  /** part2 of preparing a node to fit inside our grid - checks for x,y,w from grid dimensions */\n  public nodeBoundFix(node: GridStackNode, resizing?: boolean): GridStackNode {\n\n    let before = node._orig || Utils.copyPos({}, node);\n\n    if (node.maxW) { node.w = Math.min(node.w, node.maxW); }\n    if (node.maxH) { node.h = Math.min(node.h, node.maxH); }\n    if (node.minW && node.minW <= this.column) { node.w = Math.max(node.w, node.minW); }\n    if (node.minH) { node.h = Math.max(node.h, node.minH); }\n\n    // if user loaded a larger than allowed widget for current # of columns (or force 1 column mode),\n    // remember it's position & width so we can restore back (1 -> 12 column) #1655 #1985\n    // IFF we're not in the middle of column resizing!\n    const saveOrig = this.column === 1 || node.x + node.w > this.column;\n    if (saveOrig && this.column < 12 && !this._inColumnResize && node._id && this.findCacheLayout(node, 12) === -1) {\n      let copy = {...node}; // need _id + positions\n      if (copy.autoPosition) { delete copy.x; delete copy.y; }\n      else copy.x = Math.min(11, copy.x);\n      copy.w = Math.min(12, copy.w);\n      this.cacheOneLayout(copy, 12);\n    }\n\n    if (node.w > this.column) {\n      node.w = this.column;\n    } else if (node.w < 1) {\n      node.w = 1;\n    }\n\n    if (this.maxRow && node.h > this.maxRow) {\n      node.h = this.maxRow;\n    } else if (node.h < 1) {\n      node.h = 1;\n    }\n\n    if (node.x < 0) {\n      node.x = 0;\n    }\n    if (node.y < 0) {\n      node.y = 0;\n    }\n\n    if (node.x + node.w > this.column) {\n      if (resizing) {\n        node.w = this.column - node.x;\n      } else {\n        node.x = this.column - node.w;\n      }\n    }\n    if (this.maxRow && node.y + node.h > this.maxRow) {\n      if (resizing) {\n        node.h = this.maxRow - node.y;\n      } else {\n        node.y = this.maxRow - node.h;\n      }\n    }\n\n    if (!Utils.samePos(node, before)) {\n      node._dirty = true;\n    }\n\n    return node;\n  }\n\n  /** returns a list of modified nodes from their original values */\n  public getDirtyNodes(verify?: boolean): GridStackNode[] {\n    // compare original x,y,w,h instead as _dirty can be a temporary state\n    if (verify) {\n      return this.nodes.filter(n => n._dirty && !Utils.samePos(n, n._orig));\n    }\n    return this.nodes.filter(n => n._dirty);\n  }\n\n  /** @internal call this to call onChange callback with dirty nodes so DOM can be updated */\n  protected _notify(removedNodes?: GridStackNode[]): GridStackEngine {\n    if (this.batchMode || !this.onChange) return this;\n    let dirtyNodes = (removedNodes || []).concat(this.getDirtyNodes());\n    this.onChange(dirtyNodes);\n    return this;\n  }\n\n  /** @internal remove dirty and last tried info */\n  public cleanNodes(): GridStackEngine {\n    if (this.batchMode) return this;\n    this.nodes.forEach(n => {\n      delete n._dirty;\n      delete n._lastTried;\n    });\n    return this;\n  }\n\n  /** @internal called to save initial position/size to track real dirty state.\n   * Note: should be called right after we call change event (so next API is can detect changes)\n   * as well as right before we start move/resize/enter (so we can restore items to prev values) */\n  public saveInitial(): GridStackEngine {\n    this.nodes.forEach(n => {\n      n._orig = Utils.copyPos({}, n);\n      delete n._dirty;\n    });\n    this._hasLocked = this.nodes.some(n => n.locked);\n    return this;\n  }\n\n  /** @internal restore all the nodes back to initial values (called when we leave) */\n  public restoreInitial(): GridStackEngine {\n    this.nodes.forEach(n => {\n      if (Utils.samePos(n, n._orig)) return;\n      Utils.copyPos(n, n._orig);\n      n._dirty = true;\n    });\n    this._notify();\n    return this;\n  }\n\n  /** find the first available empty spot for the given node width/height, updating the x,y attributes. return true if found.\n   * optionally you can pass your own existing node list and column count, otherwise defaults to that engine data.\n   */\n  public findEmptyPosition(node: GridStackNode, nodeList = this.nodes, column = this.column): boolean {\n    nodeList = Utils.sort(nodeList, -1, column);\n    let found = false;\n    for (let i = 0; !found; ++i) {\n      let x = i % column;\n      let y = Math.floor(i / column);\n      if (x + node.w > column) {\n        continue;\n      }\n      let box = {x, y, w: node.w, h: node.h};\n      if (!nodeList.find(n => Utils.isIntercepted(box, n))) {\n        node.x = x;\n        node.y = y;\n        delete node.autoPosition;\n        found = true;\n      }\n    }\n    return found;\n  }\n\n  /** call to add the given node to our list, fixing collision and re-packing */\n  public addNode(node: GridStackNode, triggerAddEvent = false): GridStackNode {\n    let dup = this.nodes.find(n => n._id === node._id);\n    if (dup) return dup; // prevent inserting twice! return it instead.\n\n    // skip prepareNode if we're in middle of column resize (not new) but do check for bounds!\n    node = this._inColumnResize ? this.nodeBoundFix(node) : this.prepareNode(node);\n    delete node._temporaryRemoved;\n    delete node._removeDOM;\n\n    if (node.autoPosition && this.findEmptyPosition(node)) {\n      delete node.autoPosition; // found our slot\n    }\n\n    this.nodes.push(node);\n    if (triggerAddEvent) { this.addedNodes.push(node); }\n\n    this._fixCollisions(node);\n    if (!this.batchMode) { this._packNodes()._notify(); }\n    return node;\n  }\n\n  public removeNode(node: GridStackNode, removeDOM = true, triggerEvent = false): GridStackEngine {\n    if (!this.nodes.find(n => n === node)) {\n      // TEST console.log(`Error: GridStackEngine.removeNode() node._id=${node._id} not found!`)\n      return this;\n    }\n    if (triggerEvent) { // we wait until final drop to manually track removed items (rather than during drag)\n      this.removedNodes.push(node);\n    }\n    if (removeDOM) node._removeDOM = true; // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n    // don't use 'faster' .splice(findIndex(),1) in case node isn't in our list, or in multiple times.\n    this.nodes = this.nodes.filter(n => n !== node);\n    return this._packNodes()\n      ._notify([node]);\n  }\n\n  public removeAll(removeDOM = true): GridStackEngine {\n    delete this._layouts;\n    if (this.nodes.length === 0) return this;\n    removeDOM && this.nodes.forEach(n => n._removeDOM = true); // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n    this.removedNodes = this.nodes;\n    this.nodes = [];\n    return this._notify(this.removedNodes);\n  }\n\n  /** checks if item can be moved (layout constrain) vs moveNode(), returning true if was able to move.\n   * In more complicated cases (maxRow) it will attempt at moving the item and fixing\n   * others in a clone first, then apply those changes if still within specs. */\n  public moveNodeCheck(node: GridStackNode, o: GridStackMoveOpts): boolean {\n    // if (node.locked) return false;\n    if (!this.changedPosConstrain(node, o)) return false;\n    o.pack = true;\n\n    // simpler case: move item directly...\n    if (!this.maxRow) {\n      return this.moveNode(node, o);\n    }\n\n    // complex case: create a clone with NO maxRow (will check for out of bounds at the end)\n    let clonedNode: GridStackNode;\n    let clone = new GridStackEngine({\n      column: this.column,\n      float: this.float,\n      nodes: this.nodes.map(n => {\n        if (n === node) {\n          clonedNode = {...n};\n          return clonedNode;\n        }\n        return {...n};\n      })\n    });\n    if (!clonedNode) return false;\n\n    // check if we're covering 50% collision and could move\n    let canMove = clone.moveNode(clonedNode, o) && clone.getRow() <= this.maxRow;\n    // else check if we can force a swap (float=true, or different shapes) on non-resize\n    if (!canMove && !o.resizing && o.collide) {\n      let collide = o.collide.el.gridstackNode; // find the source node the clone collided with at 50%\n      if (this.swap(node, collide)) { // swaps and mark dirty\n        this._notify();\n        return true;\n      }\n    }\n    if (!canMove) return false;\n\n    // if clone was able to move, copy those mods over to us now instead of caller trying to do this all over!\n    // Note: we can't use the list directly as elements and other parts point to actual node, so copy content\n    clone.nodes.filter(n => n._dirty).forEach(c => {\n      let n = this.nodes.find(a => a._id === c._id);\n      if (!n) return;\n      Utils.copyPos(n, c);\n      n._dirty = true;\n    });\n    this._notify();\n    return true;\n  }\n\n  /** return true if can fit in grid height constrain only (always true if no maxRow) */\n  public willItFit(node: GridStackNode): boolean {\n    delete node._willFitPos;\n    if (!this.maxRow) return true;\n    // create a clone with NO maxRow and check if still within size\n    let clone = new GridStackEngine({\n      column: this.column,\n      float: this.float,\n      nodes: this.nodes.map(n => {return {...n}})\n    });\n    let n = {...node}; // clone node so we don't mod any settings on it but have full autoPosition and min/max as well! #1687\n    this.cleanupNode(n);\n    delete n.el; delete n._id; delete n.content; delete n.grid;\n    clone.addNode(n);\n    if (clone.getRow() <= this.maxRow) {\n      node._willFitPos = Utils.copyPos({}, n);\n      return true;\n    }\n    return false;\n  }\n\n  /** true if x,y or w,h are different after clamping to min/max */\n  public changedPosConstrain(node: GridStackNode, p: GridStackPosition): boolean {\n    // first make sure w,h are set for caller\n    p.w = p.w || node.w;\n    p.h = p.h || node.h;\n    if (node.x !== p.x || node.y !== p.y) return true;\n    // check constrained w,h\n    if (node.maxW) { p.w = Math.min(p.w, node.maxW); }\n    if (node.maxH) { p.h = Math.min(p.h, node.maxH); }\n    if (node.minW) { p.w = Math.max(p.w, node.minW); }\n    if (node.minH) { p.h = Math.max(p.h, node.minH); }\n    return (node.w !== p.w || node.h !== p.h);\n  }\n\n  /** return true if the passed in node was actually moved (checks for no-op and locked) */\n  public moveNode(node: GridStackNode, o: GridStackMoveOpts): boolean {\n    if (!node || /*node.locked ||*/ !o) return false;\n    let wasUndefinedPack: boolean;\n    if (o.pack === undefined) {\n      wasUndefinedPack = o.pack = true;\n    }\n\n    // constrain the passed in values and check if we're still changing our node\n    if (typeof o.x !== 'number') { o.x = node.x; }\n    if (typeof o.y !== 'number') { o.y = node.y; }\n    if (typeof o.w !== 'number') { o.w = node.w; }\n    if (typeof o.h !== 'number') { o.h = node.h; }\n    let resizing = (node.w !== o.w || node.h !== o.h);\n    let nn: GridStackNode = Utils.copyPos({}, node, true); // get min/max out first, then opt positions next\n    Utils.copyPos(nn, o);\n    nn = this.nodeBoundFix(nn, resizing);\n    Utils.copyPos(o, nn);\n\n    if (Utils.samePos(node, o)) return false;\n    let prevPos: GridStackPosition = Utils.copyPos({}, node);\n\n    // check if we will need to fix collision at our new location\n    let collides = this.collideAll(node, nn, o.skip);\n    let needToMove = true;\n    if (collides.length) {\n      let activeDrag = node._moving && !o.nested;\n      // check to make sure we actually collided over 50% surface area while dragging\n      let collide = activeDrag ? this.directionCollideCoverage(node, o, collides) : collides[0];\n      // if we're enabling creation of sub-grids on the fly, see if we're covering 80% of either one, if we didn't already do that\n      if (activeDrag && collide && node.grid?.opts?.subGridDynamic && !node.grid._isTemp) {\n        let over = Utils.areaIntercept(o.rect, collide._rect);\n        let a1 = Utils.area(o.rect);\n        let a2 = Utils.area(collide._rect);\n        let perc = over / (a1 < a2 ? a1 : a2);\n        if (perc > .8) {\n          collide.grid.makeSubGrid(collide.el, undefined, node);\n          collide = undefined;\n        }\n      }\n\n      if (collide) {\n        needToMove = !this._fixCollisions(node, nn, collide, o); // check if already moved...\n      } else {\n        needToMove = false; // we didn't cover >50% for a move, skip...\n        if (wasUndefinedPack) delete o.pack;\n      }\n    }\n\n    // now move (to the original ask vs the collision version which might differ) and repack things\n    if (needToMove) {\n      node._dirty = true;\n      Utils.copyPos(node, nn);\n    }\n    if (o.pack) {\n      this._packNodes()\n        ._notify();\n    }\n    return !Utils.samePos(node, prevPos); // pack might have moved things back\n  }\n\n  public getRow(): number {\n    return this.nodes.reduce((row, n) => Math.max(row, n.y + n.h), 0);\n  }\n\n  public beginUpdate(node: GridStackNode): GridStackEngine {\n    if (!node._updating) {\n      node._updating = true;\n      delete node._skipDown;\n      if (!this.batchMode) this.saveInitial();\n    }\n    return this;\n  }\n\n  public endUpdate(): GridStackEngine {\n    let n = this.nodes.find(n => n._updating);\n    if (n) {\n      delete n._updating;\n      delete n._skipDown;\n    }\n    return this;\n  }\n\n  /** saves a copy of the largest column layout (eg 12 even when rendering oneColumnMode) so we don't loose orig layout,\n   * returning a list of widgets for serialization */\n  public save(saveElement = true): GridStackNode[] {\n    // use the highest layout for any saved info so we can have full detail on reload #1849\n    let len = this._layouts?.length;\n    let layout = len && this.column !== (len - 1) ? this._layouts[len - 1] : null;\n    let list: GridStackNode[] = [];\n    this.sortNodes();\n    this.nodes.forEach(n => {\n      let wl = layout?.find(l => l._id === n._id);\n      let w: GridStackNode = {...n};\n      // use layout info instead if set\n      if (wl) { w.x = wl.x; w.y = wl.y; w.w = wl.w; }\n      Utils.removeInternalForSave(w, !saveElement);\n      list.push(w);\n    });\n    return list;\n  }\n\n  /** @internal called whenever a node is added or moved - updates the cached layouts */\n  public layoutsNodesChange(nodes: GridStackNode[]): GridStackEngine {\n    if (!this._layouts || this._inColumnResize) return this;\n    // remove smaller layouts - we will re-generate those on the fly... larger ones need to update\n    this._layouts.forEach((layout, column) => {\n      if (!layout || column === this.column) return this;\n      if (column < this.column) {\n        this._layouts[column] = undefined;\n      }\n      else {\n        // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better.\n        // NOTE: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. #1785\n        let ratio = column / this.column;\n        nodes.forEach(node => {\n          if (!node._orig) return; // didn't change (newly added ?)\n          let n = layout.find(l => l._id === node._id);\n          if (!n) return; // no cache for new nodes. Will use those values.\n          // Y changed, push down same amount\n          // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode)\n          if (node.y !== node._orig.y) {\n            n.y += (node.y - node._orig.y);\n          }\n          // X changed, scale from new position\n          if (node.x !== node._orig.x) {\n            n.x = Math.round(node.x * ratio);\n          }\n          // width changed, scale from new width\n          if (node.w !== node._orig.w) {\n            n.w = Math.round(node.w * ratio);\n          }\n          // ...height always carries over from cache\n        });\n      }\n    });\n    return this;\n  }\n\n  /**\n   * @internal Called to scale the widget width & position up/down based on the column change.\n   * Note we store previous layouts (especially original ones) to make it possible to go\n   * from say 12 -> 1 -> 12 and get back to where we were.\n   *\n   * @param prevColumn previous number of columns\n   * @param column  new column number\n   * @param nodes different sorted list (ex: DOM order) instead of current list\n   * @param layout specify the type of re-layout that will happen (position, size, etc...).\n   * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column\n   */\n  public updateNodeWidths(prevColumn: number, column: number, nodes: GridStackNode[], layout: ColumnOptions = 'moveScale'): GridStackEngine {\n    if (!this.nodes.length || !column || prevColumn === column) return this;\n\n    // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data\n    this.cacheLayout(this.nodes, prevColumn);\n    this.batchUpdate(); // do this EARLY as it will call saveInitial() so we can detect where we started for _dirty and collision\n    let newNodes: GridStackNode[] = [];\n\n    // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout\n    let domOrder = false;\n    if (column === 1 && nodes?.length) {\n      domOrder = true;\n      let top = 0;\n      nodes.forEach(n => {\n        n.x = 0;\n        n.w = 1;\n        n.y = Math.max(n.y, top);\n        top = n.y + n.h;\n      });\n      newNodes = nodes;\n      nodes = [];\n    } else {\n      nodes = Utils.sort(this.nodes, -1, prevColumn); // current column reverse sorting so we can insert last to front (limit collision)\n    }\n\n    // see if we have cached previous layout IFF we are going up in size (restore) otherwise always\n    // generate next size down from where we are (looks more natural as you gradually size down).\n    let cacheNodes: GridStackNode[] = [];\n    if (column > prevColumn) {\n      cacheNodes = this._layouts[column] || [];\n      // ...if not, start with the largest layout (if not already there) as down-scaling is more accurate\n      // by pretending we came from that larger column by assigning those values as starting point\n      let lastIndex = this._layouts.length - 1;\n      if (!cacheNodes.length && prevColumn !== lastIndex && this._layouts[lastIndex]?.length) {\n        prevColumn = lastIndex;\n        this._layouts[lastIndex].forEach(cacheNode => {\n          let n = nodes.find(n => n._id === cacheNode._id);\n          if (n) {\n            // still current, use cache info positions\n            n.x = cacheNode.x;\n            n.y = cacheNode.y;\n            n.w = cacheNode.w;\n          }\n        });\n      }\n    }\n\n    // if we found cache re-use those nodes that are still current\n    cacheNodes.forEach(cacheNode => {\n      let j = nodes.findIndex(n => n._id === cacheNode._id);\n      if (j !== -1) {\n        // still current, use cache info positions\n        if (cacheNode.autoPosition || isNaN(cacheNode.x) || isNaN(cacheNode.y)) {\n          this.findEmptyPosition(cacheNode, newNodes);\n        }\n        if (!cacheNode.autoPosition) {\n          nodes[j].x = cacheNode.x;\n          nodes[j].y = cacheNode.y;\n          nodes[j].w = cacheNode.w;\n          newNodes.push(nodes[j]);\n        }\n        nodes.splice(j, 1);\n      }\n    });\n    // ...and add any extra non-cached ones\n    if (nodes.length) {\n      if (typeof layout === 'function') {\n        layout(column, prevColumn, newNodes, nodes);\n      } else if (!domOrder) {\n        let ratio = column / prevColumn;\n        let move = (layout === 'move' || layout === 'moveScale');\n        let scale = (layout === 'scale' || layout === 'moveScale');\n        nodes.forEach(node => {\n          // NOTE: x + w could be outside of the grid, but addNode() below will handle that\n          node.x = (column === 1 ? 0 : (move ? Math.round(node.x * ratio) : Math.min(node.x, column - 1)));\n          node.w = ((column === 1 || prevColumn === 1) ? 1 :\n            scale ? (Math.round(node.w * ratio) || 1) : (Math.min(node.w, column)));\n          newNodes.push(node);\n        });\n        nodes = [];\n      }\n    }\n\n    // finally re-layout them in reverse order (to get correct placement)\n    if (!domOrder) newNodes = Utils.sort(newNodes, -1, column);\n    this._inColumnResize = true; // prevent cache update\n    this.nodes = []; // pretend we have no nodes to start with (add() will use same structures) to simplify layout\n    newNodes.forEach(node => {\n      this.addNode(node, false); // 'false' for add event trigger\n      delete node._orig; // make sure the commit doesn't try to restore things back to original\n    });\n    this.batchUpdate(false);\n    delete this._inColumnResize;\n    return this;\n  }\n\n  /**\n   * call to cache the given layout internally to the given location so we can restore back when column changes size\n   * @param nodes list of nodes\n   * @param column corresponding column index to save it under\n   * @param clear if true, will force other caches to be removed (default false)\n   */\n  public cacheLayout(nodes: GridStackNode[], column: number, clear = false): GridStackEngine {\n    let copy: GridStackNode[] = [];\n    nodes.forEach((n, i) => {\n      n._id = n._id || GridStackEngine._idSeq++; // make sure we have an id in case this is new layout, else re-use id already set\n      copy[i] = {x: n.x, y: n.y, w: n.w, _id: n._id} // only thing we change is x,y,w and id to find it back\n    });\n    this._layouts = clear ? [] : this._layouts || []; // use array to find larger quick\n    this._layouts[column] = copy;\n    return this;\n  }\n\n  /**\n   * call to cache the given node layout internally to the given location so we can restore back when column changes size\n   * @param node single node to cache\n   * @param column corresponding column index to save it under\n   */\n  public cacheOneLayout(n: GridStackNode, column: number): GridStackEngine {\n    n._id = n._id || GridStackEngine._idSeq++;\n    let l: GridStackNode = {x: n.x, y: n.y, w: n.w, _id: n._id}\n    if (n.autoPosition) { delete l.x; delete l.y; l.autoPosition = true; }\n    this._layouts = this._layouts || [];\n    this._layouts[column] = this._layouts[column] || [];\n    let index = this.findCacheLayout(n, column);\n    if (index === -1)\n      this._layouts[column].push(l);\n    else\n      this._layouts[column][index] = l;\n    return this;\n  }\n\n  protected findCacheLayout(n: GridStackNode, column: number): number {\n    return this._layouts?.[column]?.findIndex(l => l._id === n._id) ?? -1;\n  }\n\n\n  /** called to remove all internal values but the _id */\n  public cleanupNode(node: GridStackNode): GridStackEngine {\n    for (let prop in node) {\n      if (prop[0] === '_' && prop !== '_id') delete node[prop];\n    }\n    return this;\n  }\n}\n","/*!\r\n * GridStack 7.3.0\r\n * https://gridstackjs.com/\r\n *\r\n * Copyright (c) 2021-2022 Alain Dumesny\r\n * see root license https://github.com/gridstack/gridstack.js/tree/master/LICENSE\r\n */\r\nimport { GridStackEngine } from './gridstack-engine';\r\nimport { Utils, HeightData, obsolete } from './utils';\r\nimport { gridDefaults, ColumnOptions, GridItemHTMLElement, GridStackElement, GridStackEventHandlerCallback,\r\n  GridStackNode, GridStackWidget, numberOrString, DDUIData, DDDragInOpt, GridStackPosition, GridStackOptions,\r\n  dragInDefaultOptions, GridStackEventHandler, GridStackNodesHandler, AddRemoveFcn } from './types';\r\n\r\n/*\r\n * and include D&D by default\r\n * TODO: while we could generate a gridstack-static.js at smaller size - saves about 31k (41k -> 72k)\r\n * I don't know how to generate the DD only code at the remaining 31k to delay load as code depends on Gridstack.ts\r\n * also it caused loading issues in prod - see https://github.com/gridstack/gridstack.js/issues/2039\r\n */\r\nimport { DDGridStack } from './dd-gridstack';\r\nimport { isTouch } from './dd-touch';\r\nimport { DDManager } from './dd-manager';\r\nimport { DDElementHost } from './dd-element';\r\n/** global instance */\r\nconst dd = new DDGridStack;\r\n\r\n// export all dependent file as well to make it easier for users to just import the main file\r\nexport * from './types';\r\nexport * from './utils';\r\nexport * from './gridstack-engine';\r\nexport * from './dd-gridstack';\r\n\r\nexport interface GridHTMLElement extends HTMLElement {\r\n  gridstack?: GridStack; // grid's parent DOM element points back to grid class\r\n}\r\n/** list of possible events, or space separated list of them */\r\nexport type GridStackEvent = 'added' | 'change' | 'disable' | 'drag' | 'dragstart' | 'dragstop' | 'dropped' |\r\n  'enable' | 'removed' | 'resize' | 'resizestart' | 'resizestop' | string;\r\n\r\n/** Defines the coordinates of an object */\r\nexport interface MousePosition {\r\n  top: number;\r\n  left: number;\r\n}\r\n\r\n/** Defines the position of a cell inside the grid*/\r\nexport interface CellPosition {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\ninterface GridCSSStyleSheet extends CSSStyleSheet {\r\n  _max?: number; // internal tracker of the max # of rows we created\r\n}\r\n\r\n// extend with internal fields we need - TODO: move other items in here\r\ninterface InternalGridStackOptions extends GridStackOptions {\r\n  _alwaysShowResizeHandle?: true | false | 'mobile'; // so we can restore for save\r\n}\r\n\r\n/**\r\n * Main gridstack class - you will need to call `GridStack.init()` first to initialize your grid.\r\n * Note: your grid elements MUST have the following classes for the CSS layout to work:\r\n * @example\r\n * <div class=\"grid-stack\">\r\n *   <div class=\"grid-stack-item\">\r\n *     <div class=\"grid-stack-item-content\">Item 1</div>\r\n *   </div>\r\n * </div>\r\n */\r\nexport class GridStack {\r\n\r\n  /**\r\n   * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will\r\n   * simply return the existing instance (ignore any passed options). There is also an initAll() version that support\r\n   * multiple grids initialization at once. Or you can use addGrid() to create the entire grid from JSON.\r\n   * @param options grid options (optional)\r\n   * @param elOrString element or CSS selector (first one used) to convert to a grid (default to '.grid-stack' class selector)\r\n   *\r\n   * @example\r\n   * let grid = GridStack.init();\r\n   *\r\n   * Note: the HTMLElement (of type GridHTMLElement) will store a `gridstack: GridStack` value that can be retrieve later\r\n   * let grid = document.querySelector('.grid-stack').gridstack;\r\n   */\r\n  public static init(options: GridStackOptions = {}, elOrString: GridStackElement = '.grid-stack'): GridStack {\r\n    let el = GridStack.getGridElement(elOrString);\r\n    if (!el) {\r\n      if (typeof elOrString === 'string') {\r\n        console.error('GridStack.initAll() no grid was found with selector \"' + elOrString + '\" - element missing or wrong selector ?' +\r\n        '\\nNote: \".grid-stack\" is required for proper CSS styling and drag/drop, and is the default selector.');\r\n      } else {\r\n        console.error('GridStack.init() no grid element was passed.');\r\n      }\r\n      return null;\r\n    }\r\n    if (!el.gridstack) {\r\n      el.gridstack = new GridStack(el, Utils.cloneDeep(options));\r\n    }\r\n    return el.gridstack\r\n  }\r\n\r\n  /**\r\n   * Will initialize a list of elements (given a selector) and return an array of grids.\r\n   * @param options grid options (optional)\r\n   * @param selector elements selector to convert to grids (default to '.grid-stack' class selector)\r\n   *\r\n   * @example\r\n   * let grids = GridStack.initAll();\r\n   * grids.forEach(...)\r\n   */\r\n  public static initAll(options: GridStackOptions = {}, selector = '.grid-stack'): GridStack[] {\r\n    let grids: GridStack[] = [];\r\n    GridStack.getGridElements(selector).forEach(el => {\r\n      if (!el.gridstack) {\r\n        el.gridstack = new GridStack(el, Utils.cloneDeep(options));\r\n        delete options.dragIn; delete options.dragInOptions; // only need to be done once (really a static global thing, not per grid)\r\n      }\r\n      grids.push(el.gridstack);\r\n    });\r\n    if (grids.length === 0) {\r\n      console.error('GridStack.initAll() no grid was found with selector \"' + selector + '\" - element missing or wrong selector ?' +\r\n      '\\nNote: \".grid-stack\" is required for proper CSS styling and drag/drop, and is the default selector.');\r\n    }\r\n    return grids;\r\n  }\r\n\r\n  /**\r\n   * call to create a grid with the given options, including loading any children from JSON structure. This will call GridStack.init(), then\r\n   * grid.load() on any passed children (recursively). Great alternative to calling init() if you want entire grid to come from\r\n   * JSON serialized data, including options.\r\n   * @param parent HTML element parent to the grid\r\n   * @param opt grids options used to initialize the grid, and list of children\r\n   */\r\n  public static addGrid(parent: HTMLElement, opt: GridStackOptions = {}): GridStack {\r\n    if (!parent) return null;\r\n\r\n    // create the grid element, but check if the passed 'parent' already has grid styling and should be used instead\r\n    let el = parent;\r\n    const parentIsGrid = parent.classList.contains('grid-stack');\r\n    if (!parentIsGrid || opt.addRemoveCB) {\r\n      if (opt.addRemoveCB) {\r\n        el = opt.addRemoveCB(parent, opt, true, true);\r\n      } else {\r\n        let doc = document.implementation.createHTMLDocument(''); // IE needs a param\r\n        doc.body.innerHTML = `<div class=\"grid-stack ${opt.class || ''}\"></div>`;\r\n        el = doc.body.children[0] as HTMLElement;\r\n        parent.appendChild(el);\r\n      }\r\n    }\r\n\r\n    // create grid class and load any children\r\n    let grid = GridStack.init(opt, el);\r\n    return grid;\r\n  }\r\n\r\n  /** call this method to register your engine instead of the default one.\r\n   * See instead `GridStackOptions.engineClass` if you only need to\r\n   * replace just one instance.\r\n   */\r\n  static registerEngine(engineClass: typeof GridStackEngine): void {\r\n    GridStack.engineClass = engineClass;\r\n  }\r\n\r\n  /** scoping so users can call GridStack.Utils.sort() for example */\r\n  public static Utils = Utils;\r\n\r\n  /** scoping so users can call new GridStack.Engine(12) for example */\r\n  public static Engine = GridStackEngine;\r\n\r\n  /** the HTML element tied to this grid after it's been initialized */\r\n  public el: GridHTMLElement;\r\n\r\n  /** engine used to implement non DOM grid functionality */\r\n  public engine: GridStackEngine;\r\n\r\n  /** grid options - public for classes to access, but use methods to modify! */\r\n  public opts: GridStackOptions;\r\n\r\n  /** point to a parent grid item if we're nested (inside a grid-item in between 2 Grids) */\r\n  public parentGridItem?: GridStackNode;\r\n\r\n  protected static engineClass: typeof GridStackEngine;\r\n\r\n  /** @internal unique class name for our generated CSS style sheet */\r\n  protected _styleSheetClass?: string;\r\n  /** @internal true if we got created by drag over gesture, so we can removed on drag out (temporary) */\r\n  public _isTemp?: boolean;\r\n\r\n  /** @internal create placeholder DIV as needed */\r\n  public get placeholder(): HTMLElement {\r\n    if (!this._placeholder) {\r\n      let placeholderChild = document.createElement('div'); // child so padding match item-content\r\n      placeholderChild.className = 'placeholder-content';\r\n      if (this.opts.placeholderText) {\r\n        placeholderChild.innerHTML = this.opts.placeholderText;\r\n      }\r\n      this._placeholder = document.createElement('div');\r\n      this._placeholder.classList.add(this.opts.placeholderClass, gridDefaults.itemClass, this.opts.itemClass);\r\n      this.placeholder.appendChild(placeholderChild);\r\n    }\r\n    return this._placeholder;\r\n  }\r\n  /** @internal */\r\n  protected _placeholder: HTMLElement;\r\n  /** @internal */\r\n  protected _prevColumn: number;\r\n  /** @internal prevent cached layouts from being updated when loading into small column layouts */\r\n  protected _ignoreLayoutsNodeChange: boolean;\r\n  /** @internal */\r\n  public _gsEventHandler = {};\r\n  /** @internal */\r\n  protected _styles: GridCSSStyleSheet;\r\n  /** @internal flag to keep cells square during resize */\r\n  protected _isAutoCellHeight: boolean;\r\n  /** @internal track event binding to window resize so we can remove */\r\n  protected _windowResizeBind: () => void;\r\n  /** @internal limit auto cell resizing method */\r\n  protected _cellHeightThrottle: () => void;\r\n  /** @internal true when loading items to insert first rather than append */\r\n  protected _insertNotAppend: boolean;\r\n  /** @internal extra row added when dragging at the bottom of the grid */\r\n  protected _extraDragRow = 0;\r\n  /** @internal true if nested grid should get column count from our width */\r\n  protected _autoColumn?: boolean;\r\n\r\n  /**\r\n   * Construct a grid item from the given element and options\r\n   * @param el\r\n   * @param opts\r\n   */\r\n  public constructor(el: GridHTMLElement, opts: GridStackOptions = {}) {\r\n    this.el = el; // exposed HTML element to the user\r\n    opts = opts || {}; // handles null/undefined/0\r\n\r\n    if (!el.classList.contains('grid-stack')) {\r\n      this.el.classList.add('grid-stack');\r\n    }\r\n\r\n    // if row property exists, replace minRow and maxRow instead\r\n    if (opts.row) {\r\n      opts.minRow = opts.maxRow = opts.row;\r\n      delete opts.row;\r\n    }\r\n    let rowAttr = Utils.toNumber(el.getAttribute('gs-row'));\r\n\r\n    // flag only valid in sub-grids (handled by parent, not here)\r\n    if (opts.column === 'auto') {\r\n      delete opts.column;\r\n    }\r\n    // 'minWidth' legacy support in 5.1\r\n    /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\r\n    let anyOpts = opts as any;\r\n    if (anyOpts.minWidth !== undefined) {\r\n      opts.oneColumnSize = opts.oneColumnSize || anyOpts.minWidth;\r\n      delete anyOpts.minWidth;\r\n    }\r\n    // save original setting so we can restore on save\r\n    if (opts.alwaysShowResizeHandle !== undefined) {\r\n      (opts as InternalGridStackOptions)._alwaysShowResizeHandle = opts.alwaysShowResizeHandle;\r\n    }\r\n\r\n    // elements DOM attributes override any passed options (like CSS style) - merge the two together\r\n    let defaults: GridStackOptions = {...Utils.cloneDeep(gridDefaults),\r\n      column: Utils.toNumber(el.getAttribute('gs-column')) || gridDefaults.column,\r\n      minRow: rowAttr ? rowAttr : Utils.toNumber(el.getAttribute('gs-min-row')) || gridDefaults.minRow,\r\n      maxRow: rowAttr ? rowAttr : Utils.toNumber(el.getAttribute('gs-max-row')) || gridDefaults.maxRow,\r\n      staticGrid: Utils.toBool(el.getAttribute('gs-static')) || gridDefaults.staticGrid,\r\n      draggable: {\r\n        handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || gridDefaults.draggable.handle,\r\n      },\r\n      removableOptions: {\r\n        accept: opts.itemClass ? '.' + opts.itemClass : gridDefaults.removableOptions.accept,\r\n      },\r\n    };\r\n    if (el.getAttribute('gs-animate')) { // default to true, but if set to false use that instead\r\n      defaults.animate = Utils.toBool(el.getAttribute('gs-animate'))\r\n    }\r\n\r\n    this.opts = Utils.defaults(opts, defaults);\r\n    opts = null; // make sure we use this.opts instead\r\n    this._initMargin(); // part of settings defaults...\r\n\r\n    // Now check if we're loading into 1 column mode FIRST so we don't do un-necessary work (like cellHeight = width / 12 then go 1 column)\r\n    if (this.opts.column !== 1 && !this.opts.disableOneColumnMode && this._widthOrContainer() <= this.opts.oneColumnSize) {\r\n      this._prevColumn = this.getColumn();\r\n      this.opts.column = 1;\r\n    }\r\n\r\n    if (this.opts.rtl === 'auto') {\r\n      this.opts.rtl = (el.style.direction === 'rtl');\r\n    }\r\n    if (this.opts.rtl) {\r\n      this.el.classList.add('grid-stack-rtl');\r\n    }\r\n\r\n    // check if we're been nested, and if so update our style and keep pointer around (used during save)\r\n    let parentGridItem = (Utils.closestUpByClass(this.el, gridDefaults.itemClass) as GridItemHTMLElement)?.gridstackNode;\r\n    if (parentGridItem) {\r\n      parentGridItem.subGrid = this;\r\n      this.parentGridItem = parentGridItem;\r\n      this.el.classList.add('grid-stack-nested');\r\n      parentGridItem.el.classList.add('grid-stack-sub-grid');\r\n    }\r\n\r\n    this._isAutoCellHeight = (this.opts.cellHeight === 'auto');\r\n    if (this._isAutoCellHeight || this.opts.cellHeight === 'initial') {\r\n      // make the cell content square initially (will use resize/column event to keep it square)\r\n      this.cellHeight(undefined, false);\r\n    } else {\r\n      // append unit if any are set\r\n      if (typeof this.opts.cellHeight == 'number' && this.opts.cellHeightUnit && this.opts.cellHeightUnit !== gridDefaults.cellHeightUnit) {\r\n        this.opts.cellHeight = this.opts.cellHeight + this.opts.cellHeightUnit;\r\n        delete this.opts.cellHeightUnit;\r\n      }\r\n      this.cellHeight(this.opts.cellHeight, false);\r\n    }\r\n\r\n    // see if we need to adjust auto-hide\r\n    if (this.opts.alwaysShowResizeHandle === 'mobile') {\r\n      this.opts.alwaysShowResizeHandle = isTouch;\r\n    }\r\n\r\n    this._styleSheetClass = 'grid-stack-instance-' + GridStackEngine._idSeq++;\r\n    this.el.classList.add(this._styleSheetClass);\r\n\r\n    this._setStaticClass();\r\n\r\n    let engineClass = this.opts.engineClass || GridStack.engineClass || GridStackEngine;\r\n    this.engine = new engineClass({\r\n      column: this.getColumn(),\r\n      float: this.opts.float,\r\n      maxRow: this.opts.maxRow,\r\n      onChange: (cbNodes) => {\r\n        let maxH = 0;\r\n        this.engine.nodes.forEach(n => { maxH = Math.max(maxH, n.y + n.h) });\r\n        cbNodes.forEach(n => {\r\n          let el = n.el;\r\n          if (!el) return;\r\n          if (n._removeDOM) {\r\n            if (el) el.remove();\r\n            delete n._removeDOM;\r\n          } else {\r\n            this._writePosAttr(el, n);\r\n          }\r\n        });\r\n        this._updateStyles(false, maxH); // false = don't recreate, just append if need be\r\n      }\r\n    });\r\n\r\n    if (this.opts.auto) {\r\n      this.batchUpdate(); // prevent in between re-layout #1535 TODO: this only set float=true, need to prevent collision check...\r\n      this.getGridItems().forEach(el => this._prepareElement(el));\r\n      this.batchUpdate(false);\r\n    }\r\n\r\n    // load any passed in children as well, which overrides any DOM layout done above\r\n    if (this.opts.children) {\r\n      let children = this.opts.children;\r\n      delete this.opts.children;\r\n      if (children.length) this.load(children); // don't load empty\r\n    }\r\n\r\n    this.setAnimation(this.opts.animate);\r\n\r\n    this._updateStyles();\r\n    if (this.opts.column != 12) {\r\n      this.el.classList.add('grid-stack-' + this.opts.column);\r\n    }\r\n\r\n    // legacy support to appear 'per grid` options when really global.\r\n    if (this.opts.dragIn) GridStack.setupDragIn(this.opts.dragIn, this.opts.dragInOptions);\r\n    delete this.opts.dragIn;\r\n    delete this.opts.dragInOptions;\r\n\r\n    // dynamic grids require pausing during drag to detect over to nest vs push\r\n    if (this.opts.subGridDynamic && !DDManager.pauseDrag) DDManager.pauseDrag = true;\r\n    if (this.opts.draggable?.pause !== undefined) DDManager.pauseDrag = this.opts.draggable.pause;\r\n\r\n    this._setupRemoveDrop();\r\n    this._setupAcceptWidget();\r\n    this._updateWindowResizeEvent();\r\n  }\r\n\r\n  /**\r\n   * add a new widget and returns it.\r\n   *\r\n   * Widget will be always placed even if result height is more than actual grid height.\r\n   * You need to use `willItFit()` before calling addWidget for additional check.\r\n   * See also `makeWidget()`.\r\n   *\r\n   * @example\r\n   * let grid = GridStack.init();\r\n   * grid.addWidget({w: 3, content: 'hello'});\r\n   * grid.addWidget('<div class=\"grid-stack-item\"><div class=\"grid-stack-item-content\">hello</div></div>', {w: 3});\r\n   *\r\n   * @param el  GridStackWidget (which can have content string as well), html element, or string definition to add\r\n   * @param options widget position/size options (optional, and ignore if first param is already option) - see GridStackWidget\r\n   */\r\n  public addWidget(els?: GridStackWidget | GridStackElement, options?: GridStackWidget): GridItemHTMLElement {\r\n    function isGridStackWidget(w: GridStackNode): w is GridStackNode { // https://medium.com/ovrsea/checking-the-type-of-an-object-in-typescript-the-type-guards-24d98d9119b0\r\n      return w.el !== undefined || w.x !== undefined || w.y !== undefined || w.w !== undefined || w.h !== undefined || w.content !== undefined ? true : false;\r\n    }\r\n\r\n    let el: HTMLElement;\r\n    let node: GridStackNode;\r\n    if (typeof els === 'string') {\r\n      let doc = document.implementation.createHTMLDocument(''); // IE needs a param\r\n      doc.body.innerHTML = els;\r\n      el = doc.body.children[0] as HTMLElement;\r\n    } else if (arguments.length === 0 || arguments.length === 1 && isGridStackWidget(els)) {\r\n      node = options = els;\r\n      if (node?.el) {\r\n        el = node.el; // re-use element stored in the node\r\n      } else if (this.opts.addRemoveCB) {\r\n        el = this.opts.addRemoveCB(this.el, options, true, false);\r\n      } else {\r\n        let content = options?.content || '';\r\n        let doc = document.implementation.createHTMLDocument(''); // IE needs a param\r\n        doc.body.innerHTML = `<div class=\"grid-stack-item ${this.opts.itemClass || ''}\"><div class=\"grid-stack-item-content\">${content}</div></div>`;\r\n        el = doc.body.children[0] as HTMLElement;\r\n      }\r\n    } else {\r\n      el = els as HTMLElement;\r\n    }\r\n\r\n    if (!el) return;\r\n\r\n    // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos\r\n    // as the actual value are filled in when _prepareElement() calls el.getAttribute('gs-xyz') before adding the node.\r\n    // So make sure we load any DOM attributes that are not specified in passed in options (which override)\r\n    let domAttr = this._readAttr(el);\r\n    options = Utils.cloneDeep(options) || {};  // make a copy before we modify in case caller re-uses it\r\n    Utils.defaults(options, domAttr);\r\n    node = this.engine.prepareNode(options);\r\n    this._writeAttr(el, options);\r\n\r\n    if (this._insertNotAppend) {\r\n      this.el.prepend(el);\r\n    } else {\r\n      this.el.appendChild(el);\r\n    }\r\n\r\n    // similar to makeWidget() that doesn't read attr again and worse re-create a new node and loose any _id\r\n    this._prepareElement(el, true, options);\r\n    this._updateContainerHeight();\r\n\r\n    // see if there is a sub-grid to create\r\n    if (node.subGrid) {\r\n      this.makeSubGrid(node.el, undefined, undefined, false); //node.subGrid will be used as option in method, no need to pass\r\n    }\r\n\r\n    // if we're adding an item into 1 column (_prevColumn is set only when going to 1) make sure\r\n    // we don't override the larger 12 column layout that was already saved. #1985\r\n    if (this._prevColumn && this.opts.column === 1) {\r\n      this._ignoreLayoutsNodeChange = true;\r\n    }\r\n    this._triggerAddEvent();\r\n    this._triggerChangeEvent();\r\n    delete this._ignoreLayoutsNodeChange;\r\n\r\n    return el;\r\n  }\r\n\r\n  /**\r\n   * Convert an existing gridItem element into a sub-grid with the given (optional) options, else inherit them\r\n   * from the parent's subGrid options.\r\n   * @param el gridItem element to convert\r\n   * @param ops (optional) sub-grid options, else default to node, then parent settings, else defaults\r\n   * @param nodeToAdd (optional) node to add to the newly created sub grid (used when dragging over existing regular item)\r\n   * @returns newly created grid\r\n   */\r\n  public makeSubGrid(el: GridItemHTMLElement, ops?: GridStackOptions, nodeToAdd?: GridStackNode, saveContent = true): GridStack {\r\n    let node = el.gridstackNode;\r\n    if (!node) {\r\n      node = this.makeWidget(el).gridstackNode;\r\n    }\r\n    if ((node.subGrid as GridStack)?.el) return node.subGrid as GridStack; // already done\r\n\r\n    // find the template subGrid stored on a parent as fallback...\r\n    let subGridTemplate: GridStackOptions; // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n    let grid: GridStack = this;\r\n    while (grid && !subGridTemplate) {\r\n      subGridTemplate = grid.opts?.subGrid;\r\n      grid = grid.parentGridItem?.grid;\r\n    }\r\n    //... and set the create options\r\n    ops = Utils.cloneDeep({...(subGridTemplate || {}), children: undefined, ...(ops || node.subGrid as GridStackOptions)});\r\n    node.subGrid = ops;\r\n\r\n    // if column special case it set, remember that flag and set default\r\n    let autoColumn: boolean;\r\n    if (ops.column === 'auto') {\r\n      autoColumn = true;\r\n      ops.column = Math.max(node.w || 1, nodeToAdd?.w || 1);\r\n      ops.disableOneColumnMode = true; // driven by parent\r\n    }\r\n\r\n    // if we're converting an existing full item, move over the content to be the first sub item in the new grid\r\n    let content = node.el.querySelector('.grid-stack-item-content') as HTMLElement;\r\n    let newItem: HTMLElement;\r\n    let newItemOpt: GridStackNode;\r\n    if (saveContent) {\r\n      this._removeDD(node.el); // remove D&D since it's set on content div\r\n      newItemOpt = {...node, x:0, y:0};\r\n      Utils.removeInternalForSave(newItemOpt);\r\n      delete newItemOpt.subGrid;\r\n      if (node.content) {\r\n        newItemOpt.content = node.content;\r\n        delete node.content;\r\n      }\r\n      if (this.opts.addRemoveCB) {\r\n        newItem = this.opts.addRemoveCB(this.el, newItemOpt, true, false);\r\n      } else {\r\n        let doc = document.implementation.createHTMLDocument(''); // IE needs a param\r\n        doc.body.innerHTML = `<div class=\"grid-stack-item\"></div>`;\r\n        newItem = doc.body.children[0] as HTMLElement;\r\n        newItem.appendChild(content);\r\n        doc.body.innerHTML = `<div class=\"grid-stack-item-content\"></div>`;\r\n        content = doc.body.children[0] as HTMLElement;\r\n        node.el.appendChild(content);\r\n      }\r\n      this._prepareDragDropByNode(node); // ... and restore original D&D\r\n    }\r\n\r\n    // if we're adding an additional item, make the container large enough to have them both\r\n    if (nodeToAdd) {\r\n      let w = autoColumn ? ops.column : node.w;\r\n      let h = node.h + nodeToAdd.h;\r\n      let style = node.el.style;\r\n      style.transition = 'none'; // show up instantly so we don't see scrollbar with nodeToAdd\r\n      this.update(node.el, {w, h});\r\n      setTimeout(() =>  style.transition = null); // recover animation\r\n    }\r\n\r\n    if (this.opts.addRemoveCB) {\r\n      ops.addRemoveCB = ops.addRemoveCB || this.opts.addRemoveCB;\r\n    }\r\n    let subGrid = node.subGrid = GridStack.addGrid(content, ops);\r\n    if (nodeToAdd?._moving) subGrid._isTemp = true; // prevent re-nesting as we add over\r\n    if (autoColumn) subGrid._autoColumn = true;\r\n\r\n    // add the original content back as a child of hte newly created grid\r\n    if (saveContent) {\r\n      subGrid.addWidget(newItem, newItemOpt);\r\n    }\r\n\r\n    // now add any additional node\r\n    if (nodeToAdd) {\r\n      if (nodeToAdd._moving) {\r\n        // create an artificial event even for the just created grid to receive this item\r\n        window.setTimeout(() => Utils.simulateMouseEvent(nodeToAdd._event, 'mouseenter', subGrid.el), 0);\r\n      } else {\r\n        subGrid.addWidget(node.el, node);\r\n      }\r\n    }\r\n    return subGrid;\r\n  }\r\n\r\n  /**\r\n   * called when an item was converted into a nested grid to accommodate a dragged over item, but then item leaves - return back\r\n   * to the original grid-item. Also called to remove empty sub-grids when last item is dragged out (since re-creating is simple)\r\n   */\r\n  public removeAsSubGrid(nodeThatRemoved?: GridStackNode): void {\r\n    let pGrid = this.parentGridItem?.grid;\r\n    if (!pGrid) return;\r\n\r\n    pGrid.batchUpdate();\r\n    pGrid.removeWidget(this.parentGridItem.el, true, true);\r\n    this.engine.nodes.forEach(n => {\r\n      // migrate any children over and offsetting by our location\r\n      n.x += this.parentGridItem.x;\r\n      n.y += this.parentGridItem.y;\r\n      pGrid.addWidget(n.el, n);\r\n    });\r\n    pGrid.batchUpdate(false);\r\n    if (this.parentGridItem) delete this.parentGridItem.subGrid;\r\n    delete this.parentGridItem;\r\n\r\n    // create an artificial event for the original grid now that this one is gone (got a leave, but won't get enter)\r\n    if (nodeThatRemoved) {\r\n      window.setTimeout(() => Utils.simulateMouseEvent(nodeThatRemoved._event, 'mouseenter', pGrid.el), 0);\r\n    }\r\n  }\r\n\r\n  /**\r\n  /**\r\n   * saves the current layout returning a list of widgets for serialization which might include any nested grids.\r\n   * @param saveContent if true (default) the latest html inside .grid-stack-content will be saved to GridStackWidget.content field, else it will\r\n   * be removed.\r\n   * @param saveGridOpt if true (default false), save the grid options itself, so you can call the new GridStack.addGrid()\r\n   * to recreate everything from scratch. GridStackOptions.children would then contain the widget list instead.\r\n   * @returns list of widgets or full grid option, including .children list of widgets\r\n   */\r\n  public save(saveContent = true, saveGridOpt = false): GridStackWidget[] | GridStackOptions {\r\n    // return copied nodes we can modify at will...\r\n    let list = this.engine.save(saveContent);\r\n\r\n    // check for HTML content and nested grids\r\n    list.forEach(n => {\r\n      if (saveContent && n.el && !n.subGrid) { // sub-grid are saved differently, not plain content\r\n        let sub = n.el.querySelector('.grid-stack-item-content');\r\n        n.content = sub ? sub.innerHTML : undefined;\r\n        if (!n.content) delete n.content;\r\n      } else {\r\n        if (!saveContent) { delete n.content; }\r\n        // check for nested grid\r\n        if ((n.subGrid as GridStack)?.el) {\r\n          const listOrOpt = (n.subGrid as GridStack).save(saveContent, saveGridOpt);\r\n          n.subGrid = (saveGridOpt ? listOrOpt : {children: listOrOpt}) as GridStackOptions;\r\n        }\r\n      }\r\n      delete n.el;\r\n    });\r\n\r\n    // check if save entire grid options (needed for recursive) + children...\r\n    if (saveGridOpt) {\r\n      let o: InternalGridStackOptions = Utils.cloneDeep(this.opts);\r\n      // delete default values that will be recreated on launch\r\n      if (o.marginBottom === o.marginTop && o.marginRight === o.marginLeft && o.marginTop === o.marginRight) {\r\n        o.margin = o.marginTop;\r\n        delete o.marginTop; delete o.marginRight; delete o.marginBottom; delete o.marginLeft;\r\n      }\r\n      if (o.rtl === (this.el.style.direction === 'rtl')) { o.rtl = 'auto' }\r\n      if (this._isAutoCellHeight) {\r\n        o.cellHeight = 'auto'\r\n      }\r\n      if (this._autoColumn) {\r\n        o.column = 'auto';\r\n        delete o.disableOneColumnMode;\r\n      }\r\n      const origShow = o._alwaysShowResizeHandle;\r\n      delete o._alwaysShowResizeHandle;\r\n      if (origShow !== undefined) {\r\n        o.alwaysShowResizeHandle = origShow;\r\n      } else {\r\n        delete o.alwaysShowResizeHandle;\r\n      }\r\n      Utils.removeInternalAndSame(o, gridDefaults);\r\n      o.children = list;\r\n      return o;\r\n    }\r\n\r\n    return list;\r\n  }\r\n\r\n  /**\r\n   * load the widgets from a list. This will call update() on each (matching by id) or add/remove widgets that are not there.\r\n   *\r\n   * @param layout list of widgets definition to update/create\r\n   * @param addAndRemove boolean (default true) or callback method can be passed to control if and how missing widgets can be added/removed, giving\r\n   * the user control of insertion.\r\n   *\r\n   * @example\r\n   * see http://gridstackjs.com/demo/serialization.html\r\n   **/\r\n  public load(layout: GridStackWidget[], addRemove: boolean | AddRemoveFcn = this.opts.addRemoveCB || true): GridStack {\r\n    let items = GridStack.Utils.sort([...layout], -1, this._prevColumn || this.getColumn()); // make copy before we mod/sort\r\n    this._insertNotAppend = true; // since create in reverse order...\r\n\r\n    // if we're loading a layout into for example 1 column (_prevColumn is set only when going to 1) and items don't fit, make sure to save\r\n    // the original wanted layout so we can scale back up correctly #1471\r\n    if (this._prevColumn && this._prevColumn !== this.opts.column && items.some(n => (n.x + n.w) > this.opts.column)) {\r\n      this._ignoreLayoutsNodeChange = true; // skip layout update\r\n      this.engine.cacheLayout(items, this._prevColumn, true);\r\n    }\r\n\r\n    // if given a different callback, temporally set it as global option to creating will use it\r\n    const prevCB = this.opts.addRemoveCB;\r\n    if (typeof(addRemove) === 'function') this.opts.addRemoveCB = addRemove as AddRemoveFcn;\r\n\r\n    let removed: GridStackNode[] = [];\r\n    this.batchUpdate();\r\n\r\n    // see if any items are missing from new layout and need to be removed first\r\n    if (addRemove) {\r\n      let copyNodes = [...this.engine.nodes]; // don't loop through array you modify\r\n      copyNodes.forEach(n => {\r\n        let item = items.find(w => n.id === w.id);\r\n        if (!item) {\r\n          if (this.opts.addRemoveCB)\r\n            this.opts.addRemoveCB(this.el, n, false, false);\r\n          removed.push(n); // batch keep track\r\n          this.removeWidget(n.el, true, false);\r\n        }\r\n      });\r\n    }\r\n\r\n    // now add/update the widgets\r\n    items.forEach(w => {\r\n      let item = (w.id || w.id === 0) ? this.engine.nodes.find(n => n.id === w.id) : undefined;\r\n      if (item) {\r\n        this.update(item.el, w);\r\n        if (w.subGrid && (w.subGrid as GridStackOptions).children) { // update any sub grid as well\r\n          let sub = item.el.querySelector('.grid-stack') as GridHTMLElement;\r\n          if (sub && sub.gridstack) {\r\n            sub.gridstack.load((w.subGrid as GridStackOptions).children); // TODO: support updating grid options ?\r\n            this._insertNotAppend = true; // got reset by above call\r\n          }\r\n        }\r\n      } else if (addRemove) {\r\n        this.addWidget(w);\r\n      }\r\n    });\r\n\r\n    this.engine.removedNodes = removed;\r\n    this.batchUpdate(false);\r\n\r\n    // after commit, clear that flag\r\n    delete this._ignoreLayoutsNodeChange;\r\n    delete this._insertNotAppend;\r\n    prevCB ? this.opts.addRemoveCB = prevCB : delete this.opts.addRemoveCB;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * use before calling a bunch of `addWidget()` to prevent un-necessary relayouts in between (more efficient)\r\n   * and get a single event callback. You will see no changes until `batchUpdate(false)` is called.\r\n   */\r\n  public batchUpdate(flag = true): GridStack {\r\n    this.engine.batchUpdate(flag);\r\n    if (!flag) {\r\n      this._triggerRemoveEvent();\r\n      this._triggerAddEvent();\r\n      this._triggerChangeEvent();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Gets current cell height.\r\n   */\r\n  public getCellHeight(forcePixel = false): number {\r\n    if (this.opts.cellHeight && this.opts.cellHeight !== 'auto' &&\r\n       (!forcePixel || !this.opts.cellHeightUnit || this.opts.cellHeightUnit === 'px')) {\r\n      return this.opts.cellHeight as number;\r\n    }\r\n    // else get first cell height\r\n    let el = this.el.querySelector('.' + this.opts.itemClass) as HTMLElement;\r\n    if (el) {\r\n      let height = Utils.toNumber(el.getAttribute('gs-h'));\r\n      return Math.round(el.offsetHeight / height);\r\n    }\r\n    // else do entire grid and # of rows (but doesn't work if min-height is the actual constrain)\r\n    let rows = parseInt(this.el.getAttribute('gs-current-row'));\r\n    return rows ? Math.round(this.el.getBoundingClientRect().height / rows) : this.opts.cellHeight as number;\r\n  }\r\n\r\n  /**\r\n   * Update current cell height - see `GridStackOptions.cellHeight` for format.\r\n   * This method rebuilds an internal CSS style sheet.\r\n   * Note: You can expect performance issues if call this method too often.\r\n   *\r\n   * @param val the cell height. If not passed (undefined), cells content will be made square (match width minus margin),\r\n   * if pass 0 the CSS will be generated by the application instead.\r\n   * @param update (Optional) if false, styles will not be updated\r\n   *\r\n   * @example\r\n   * grid.cellHeight(100); // same as 100px\r\n   * grid.cellHeight('70px');\r\n   * grid.cellHeight(grid.cellWidth() * 1.2);\r\n   */\r\n  public cellHeight(val?: numberOrString, update = true): GridStack {\r\n\r\n    // if not called internally, check if we're changing mode\r\n    if (update && val !== undefined) {\r\n      if (this._isAutoCellHeight !== (val === 'auto')) {\r\n        this._isAutoCellHeight = (val === 'auto');\r\n        this._updateWindowResizeEvent();\r\n      }\r\n    }\r\n    if (val === 'initial' || val === 'auto') { val = undefined; }\r\n\r\n    // make item content be square\r\n    if (val === undefined) {\r\n      let marginDiff = - (this.opts.marginRight as number) - (this.opts.marginLeft as number)\r\n        + (this.opts.marginTop as number) + (this.opts.marginBottom as number);\r\n      val = this.cellWidth() + marginDiff;\r\n    }\r\n\r\n    let data = Utils.parseHeight(val);\r\n    if (this.opts.cellHeightUnit === data.unit && this.opts.cellHeight === data.h) {\r\n      return this;\r\n    }\r\n    this.opts.cellHeightUnit = data.unit;\r\n    this.opts.cellHeight = data.h;\r\n\r\n    if (update) {\r\n      this._updateStyles(true); // true = force re-create for current # of rows\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** Gets current cell width. */\r\n  public cellWidth(): number {\r\n    return this._widthOrContainer() / this.getColumn();\r\n  }\r\n  /** return our expected width (or parent) for 1 column check */\r\n  protected _widthOrContainer(): number {\r\n    // use `offsetWidth` or `clientWidth` (no scrollbar) ?\r\n    // https://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively\r\n    return (this.el.clientWidth || this.el.parentElement.clientWidth || window.innerWidth);\r\n  }\r\n\r\n  /** re-layout grid items to reclaim any empty space */\r\n  public compact(): GridStack {\r\n    this.engine.compact();\r\n    this._triggerChangeEvent();\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * set the number of columns in the grid. Will update existing widgets to conform to new number of columns,\r\n   * as well as cache the original layout so you can revert back to previous positions without loss.\r\n   * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [2-11],\r\n   * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns)\r\n   * @param column - Integer > 0 (default 12).\r\n   * @param layout specify the type of re-layout that will happen (position, size, etc...).\r\n   * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column\r\n   */\r\n  public column(column: number, layout: ColumnOptions = 'moveScale'): GridStack {\r\n    if (column < 1 || this.opts.column === column) return this;\r\n    let oldColumn = this.getColumn();\r\n\r\n    // if we go into 1 column mode (which happens if we're sized less than minW unless disableOneColumnMode is on)\r\n    // then remember the original columns so we can restore.\r\n    if (column === 1) {\r\n      this._prevColumn = oldColumn;\r\n    } else {\r\n      delete this._prevColumn;\r\n    }\r\n\r\n    this.el.classList.remove('grid-stack-' + oldColumn);\r\n    this.el.classList.add('grid-stack-' + column);\r\n    this.opts.column = this.engine.column = column;\r\n\r\n    // update the items now - see if the dom order nodes should be passed instead (else default to current list)\r\n    let domNodes: GridStackNode[];\r\n    if (column === 1 && this.opts.oneColumnModeDomSort) {\r\n      domNodes = [];\r\n      this.getGridItems().forEach(el => { // get dom elements in order\r\n        if (el.gridstackNode) { domNodes.push(el.gridstackNode); }\r\n      });\r\n      if (!domNodes.length) { domNodes = undefined; }\r\n    }\r\n    this.engine.updateNodeWidths(oldColumn, column, domNodes, layout);\r\n    if (this._isAutoCellHeight) this.cellHeight();\r\n\r\n    // and trigger our event last...\r\n    this._ignoreLayoutsNodeChange = true; // skip layout update\r\n    this._triggerChangeEvent();\r\n    delete this._ignoreLayoutsNodeChange;\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * get the number of columns in the grid (default 12)\r\n   */\r\n  public getColumn(): number {\r\n    return this.opts.column as number;\r\n  }\r\n\r\n  /** returns an array of grid HTML elements (no placeholder) - used to iterate through our children in DOM order */\r\n  public getGridItems(): GridItemHTMLElement[] {\r\n    return Array.from(this.el.children)\r\n      .filter((el: HTMLElement) => el.matches('.' + this.opts.itemClass) && !el.matches('.' + this.opts.placeholderClass)) as GridItemHTMLElement[];\r\n  }\r\n\r\n  /**\r\n   * Destroys a grid instance. DO NOT CALL any methods or access any vars after this as it will free up members.\r\n   * @param removeDOM if `false` grid and items HTML elements will not be removed from the DOM (Optional. Default `true`).\r\n   */\r\n  public destroy(removeDOM = true): GridStack {\r\n    if (!this.el) return; // prevent multiple calls\r\n    this._updateWindowResizeEvent(true);\r\n    this.setStatic(true, false); // permanently removes DD but don't set CSS class (we're going away)\r\n    this.setAnimation(false);\r\n    if (!removeDOM) {\r\n      this.removeAll(removeDOM);\r\n      this.el.classList.remove(this._styleSheetClass);\r\n    } else {\r\n      this.el.parentNode.removeChild(this.el);\r\n    }\r\n    this._removeStylesheet();\r\n    this.el.removeAttribute('gs-current-row');\r\n    if (this.parentGridItem) delete this.parentGridItem.subGrid;\r\n    delete this.parentGridItem;\r\n    delete this.opts;\r\n    delete this._placeholder;\r\n    delete this.engine;\r\n    delete this.el.gridstack; // remove circular dependency that would prevent a freeing\r\n    delete this.el;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html)\r\n   */\r\n  public float(val: boolean): GridStack {\r\n    if (this.opts.float !== val) {\r\n      this.opts.float = this.engine.float = val;\r\n      this._triggerChangeEvent();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * get the current float mode\r\n   */\r\n  public getFloat(): boolean {\r\n    return this.engine.float;\r\n  }\r\n\r\n  /**\r\n   * Get the position of the cell under a pixel on screen.\r\n   * @param position the position of the pixel to resolve in\r\n   * absolute coordinates, as an object with top and left properties\r\n   * @param useDocRelative if true, value will be based on document position vs parent position (Optional. Default false).\r\n   * Useful when grid is within `position: relative` element\r\n   *\r\n   * Returns an object with properties `x` and `y` i.e. the column and row in the grid.\r\n   */\r\n  public getCellFromPixel(position: MousePosition, useDocRelative = false): CellPosition {\r\n    let box = this.el.getBoundingClientRect();\r\n    // console.log(`getBoundingClientRect left: ${box.left} top: ${box.top} w: ${box.w} h: ${box.h}`)\r\n    let containerPos: {top: number, left: number};\r\n    if (useDocRelative) {\r\n      containerPos = {top: box.top + document.documentElement.scrollTop, left: box.left};\r\n      // console.log(`getCellFromPixel scrollTop: ${document.documentElement.scrollTop}`)\r\n    } else {\r\n      containerPos = {top: this.el.offsetTop, left: this.el.offsetLeft}\r\n      // console.log(`getCellFromPixel offsetTop: ${containerPos.left} offsetLeft: ${containerPos.top}`)\r\n    }\r\n    let relativeLeft = position.left - containerPos.left;\r\n    let relativeTop = position.top - containerPos.top;\r\n\r\n    let columnWidth = (box.width / this.getColumn());\r\n    let rowHeight = (box.height / parseInt(this.el.getAttribute('gs-current-row')));\r\n\r\n    return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)};\r\n  }\r\n\r\n  /** returns the current number of rows, which will be at least `minRow` if set */\r\n  public getRow(): number {\r\n    return Math.max(this.engine.getRow(), this.opts.minRow);\r\n  }\r\n\r\n  /**\r\n   * Checks if specified area is empty.\r\n   * @param x the position x.\r\n   * @param y the position y.\r\n   * @param w the width of to check\r\n   * @param h the height of to check\r\n   */\r\n  public isAreaEmpty(x: number, y: number, w: number, h: number): boolean {\r\n    return this.engine.isAreaEmpty(x, y, w, h);\r\n  }\r\n\r\n  /**\r\n   * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets.\r\n   * If you want gridstack to add the elements for you, use `addWidget()` instead.\r\n   * Makes the given element a widget and returns it.\r\n   * @param els widget or single selector to convert.\r\n   *\r\n   * @example\r\n   * let grid = GridStack.init();\r\n   * grid.el.appendChild('<div id=\"gsi-1\" gs-w=\"3\"></div>');\r\n   * grid.makeWidget('#gsi-1');\r\n   */\r\n  public makeWidget(els: GridStackElement): GridItemHTMLElement {\r\n    let el = GridStack.getElement(els);\r\n    this._prepareElement(el, true);\r\n    this._updateContainerHeight();\r\n    this._triggerAddEvent();\r\n    this._triggerChangeEvent();\r\n    return el;\r\n  }\r\n\r\n  /**\r\n   * Event handler that extracts our CustomEvent data out automatically for receiving custom\r\n   * notifications (see doc for supported events)\r\n   * @param name of the event (see possible values) or list of names space separated\r\n   * @param callback function called with event and optional second/third param\r\n   * (see README documentation for each signature).\r\n   *\r\n   * @example\r\n   * grid.on('added', function(e, items) { log('added ', items)} );\r\n   * or\r\n   * grid.on('added removed change', function(e, items) { log(e.type, items)} );\r\n   *\r\n   * Note: in some cases it is the same as calling native handler and parsing the event.\r\n   * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} );\r\n   *\r\n   */\r\n  public on(name: GridStackEvent, callback: GridStackEventHandlerCallback): GridStack {\r\n    // check for array of names being passed instead\r\n    if (name.indexOf(' ') !== -1) {\r\n      let names = name.split(' ') as GridStackEvent[];\r\n      names.forEach(name => this.on(name, callback));\r\n      return this;\r\n    }\r\n\r\n    if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') {\r\n      // native CustomEvent handlers - cash the generic handlers so we can easily remove\r\n      let noData = (name === 'enable' || name === 'disable');\r\n      if (noData) {\r\n        this._gsEventHandler[name] = (event: Event) => (callback as GridStackEventHandler)(event);\r\n      } else {\r\n        this._gsEventHandler[name] = (event: CustomEvent) => (callback as GridStackNodesHandler)(event, event.detail);\r\n      }\r\n      this.el.addEventListener(name, this._gsEventHandler[name]);\r\n    } else if (name === 'drag' || name === 'dragstart' || name === 'dragstop' || name === 'resizestart' || name === 'resize' || name === 'resizestop' || name === 'dropped') {\r\n      // drag&drop stop events NEED to be call them AFTER we update node attributes so handle them ourself.\r\n      // do same for start event to make it easier...\r\n      this._gsEventHandler[name] = callback;\r\n    } else {\r\n      console.log('GridStack.on(' + name + ') event not supported, but you can still use $(\".grid-stack\").on(...) while jquery-ui is still used internally.');\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * unsubscribe from the 'on' event below\r\n   * @param name of the event (see possible values)\r\n   */\r\n  public off(name: GridStackEvent): GridStack {\r\n    // check for array of names being passed instead\r\n    if (name.indexOf(' ') !== -1) {\r\n      let names = name.split(' ') as GridStackEvent[];\r\n      names.forEach(name => this.off(name));\r\n      return this;\r\n    }\r\n\r\n    if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') {\r\n      // remove native CustomEvent handlers\r\n      if (this._gsEventHandler[name]) {\r\n        this.el.removeEventListener(name, this._gsEventHandler[name]);\r\n      }\r\n    }\r\n    delete this._gsEventHandler[name];\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Removes widget from the grid.\r\n   * @param el  widget or selector to modify\r\n   * @param removeDOM if `false` DOM element won't be removed from the tree (Default? true).\r\n   * @param triggerEvent if `false` (quiet mode) element will not be added to removed list and no 'removed' callbacks will be called (Default? true).\r\n   */\r\n  public removeWidget(els: GridStackElement, removeDOM = true, triggerEvent = true): GridStack {\r\n    GridStack.getElements(els).forEach(el => {\r\n      if (el.parentElement && el.parentElement !== this.el) return; // not our child!\r\n      let node = el.gridstackNode;\r\n      // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272\r\n      if (!node) {\r\n        node = this.engine.nodes.find(n => el === n.el);\r\n      }\r\n      if (!node) return;\r\n\r\n      // remove our DOM data (circular link) and drag&drop permanently\r\n      delete el.gridstackNode;\r\n      this._removeDD(el);\r\n\r\n      this.engine.removeNode(node, removeDOM, triggerEvent);\r\n\r\n      if (removeDOM && el.parentElement) {\r\n        el.remove(); // in batch mode engine.removeNode doesn't call back to remove DOM\r\n      }\r\n    });\r\n    if (triggerEvent) {\r\n      this._triggerRemoveEvent();\r\n      this._triggerChangeEvent();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Removes all widgets from the grid.\r\n   * @param removeDOM if `false` DOM elements won't be removed from the tree (Default? `true`).\r\n   */\r\n  public removeAll(removeDOM = true): GridStack {\r\n    // always remove our DOM data (circular link) before list gets emptied and drag&drop permanently\r\n    this.engine.nodes.forEach(n => {\r\n      delete n.el.gridstackNode;\r\n      this._removeDD(n.el);\r\n    });\r\n    this.engine.removeAll(removeDOM);\r\n    this._triggerRemoveEvent();\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Toggle the grid animation state.  Toggles the `grid-stack-animate` class.\r\n   * @param doAnimate if true the grid will animate.\r\n   */\r\n  public setAnimation(doAnimate: boolean): GridStack {\r\n    if (doAnimate) {\r\n      this.el.classList.add('grid-stack-animate');\r\n    } else {\r\n      this.el.classList.remove('grid-stack-animate');\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Toggle the grid static state, which permanently removes/add Drag&Drop support, unlike disable()/enable() that just turns it off/on.\r\n   * Also toggle the grid-stack-static class.\r\n   * @param val if true the grid become static.\r\n   * @param updateClass true (default) if css class gets updated\r\n   * @param recurse true (default) if sub-grids also get updated\r\n   */\r\n  public setStatic(val: boolean, updateClass = true, recurse = true): GridStack {\r\n    if (this.opts.staticGrid === val) return this;\r\n    this.opts.staticGrid = val;\r\n    this._setupRemoveDrop();\r\n    this._setupAcceptWidget();\r\n    this.engine.nodes.forEach(n => {\r\n      this._prepareDragDropByNode(n); // either delete or init Drag&drop\r\n      if (n.subGrid && recurse) (n.subGrid as GridStack).setStatic(val, updateClass, recurse);\r\n    });\r\n    if (updateClass) { this._setStaticClass(); }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Updates widget position/size and other info. Note: if you need to call this on all nodes, use load() instead which will update what changed.\r\n   * @param els  widget or selector of objects to modify (note: setting the same x,y for multiple items will be indeterministic and likely unwanted)\r\n   * @param opt new widget options (x,y,w,h, etc..). Only those set will be updated.\r\n   */\r\n  public update(els: GridStackElement, opt: GridStackWidget): GridStack {\r\n\r\n    // support legacy call for now ?\r\n    if (arguments.length > 2) {\r\n      console.warn('gridstack.ts: `update(el, x, y, w, h)` is deprecated. Use `update(el, {x, w, content, ...})`. It will be removed soon');\r\n      // eslint-disable-next-line prefer-rest-params\r\n      let a = arguments, i = 1;\r\n      opt = { x:a[i++], y:a[i++], w:a[i++], h:a[i++] };\r\n      return this.update(els, opt);\r\n    }\r\n\r\n    GridStack.getElements(els).forEach(el => {\r\n      if (!el || !el.gridstackNode) return;\r\n      let n = el.gridstackNode;\r\n      let w = Utils.cloneDeep(opt); // make a copy we can modify in case they re-use it or multiple items\r\n      delete w.autoPosition;\r\n\r\n      // move/resize widget if anything changed\r\n      let keys = ['x', 'y', 'w', 'h'];\r\n      let m: GridStackWidget;\r\n      if (keys.some(k => w[k] !== undefined && w[k] !== n[k])) {\r\n        m = {};\r\n        keys.forEach(k => {\r\n          m[k] = (w[k] !== undefined) ? w[k] : n[k];\r\n          delete w[k];\r\n        });\r\n      }\r\n      // for a move as well IFF there is any min/max fields set\r\n      if (!m && (w.minW || w.minH || w.maxW || w.maxH)) {\r\n        m = {}; // will use node position but validate values\r\n      }\r\n\r\n      // check for content changing\r\n      if (w.content) {\r\n        let sub = el.querySelector('.grid-stack-item-content');\r\n        if (sub && sub.innerHTML !== w.content) {\r\n          sub.innerHTML = w.content;\r\n        }\r\n        delete w.content;\r\n      }\r\n\r\n      // any remaining fields are assigned, but check for dragging changes, resize constrain\r\n      let changed = false;\r\n      let ddChanged = false;\r\n      for (const key in w) {\r\n        if (key[0] !== '_' && n[key] !== w[key]) {\r\n          n[key] = w[key];\r\n          changed = true;\r\n          ddChanged = ddChanged || (!this.opts.staticGrid && (key === 'noResize' || key === 'noMove' || key === 'locked'));\r\n        }\r\n      }\r\n\r\n      // finally move the widget\r\n      if (m) {\r\n        this.engine.cleanNodes()\r\n          .beginUpdate(n)\r\n          .moveNode(n, m);\r\n        this._updateContainerHeight();\r\n        this._triggerChangeEvent();\r\n        this.engine.endUpdate();\r\n      }\r\n      if (changed) { // move will only update x,y,w,h so update the rest too\r\n        this._writeAttr(el, n);\r\n      }\r\n      if (ddChanged) {\r\n        this._prepareDragDropByNode(n);\r\n      }\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Updates the margins which will set all 4 sides at once - see `GridStackOptions.margin` for format options (CSS string format of 1,2,4 values or single number).\r\n   * @param value margin value\r\n   */\r\n  public margin(value: numberOrString): GridStack {\r\n    let isMultiValue = (typeof value === 'string' && value.split(' ').length > 1);\r\n    // check if we can skip re-creating our CSS file... won't check if multi values (too much hassle)\r\n    if (!isMultiValue) {\r\n      let data = Utils.parseHeight(value);\r\n      if (this.opts.marginUnit === data.unit && this.opts.margin === data.h) return;\r\n    }\r\n    // re-use existing margin handling\r\n    this.opts.margin = value;\r\n    this.opts.marginTop = this.opts.marginBottom = this.opts.marginLeft = this.opts.marginRight = undefined;\r\n    this._initMargin();\r\n\r\n    this._updateStyles(true); // true = force re-create\r\n\r\n    return this;\r\n  }\r\n\r\n  /** returns current margin number value (undefined if 4 sides don't match) */\r\n  public getMargin(): number { return this.opts.margin as number; }\r\n\r\n  /**\r\n   * Returns true if the height of the grid will be less than the vertical\r\n   * constraint. Always returns true if grid doesn't have height constraint.\r\n   * @param node contains x,y,w,h,auto-position options\r\n   *\r\n   * @example\r\n   * if (grid.willItFit(newWidget)) {\r\n   *   grid.addWidget(newWidget);\r\n   * } else {\r\n   *   alert('Not enough free space to place the widget');\r\n   * }\r\n   */\r\n  public willItFit(node: GridStackWidget): boolean {\r\n    // support legacy call for now\r\n    if (arguments.length > 1) {\r\n      console.warn('gridstack.ts: `willItFit(x,y,w,h,autoPosition)` is deprecated. Use `willItFit({x, y,...})`. It will be removed soon');\r\n      // eslint-disable-next-line prefer-rest-params\r\n      let a = arguments, i = 0,\r\n        w: GridStackWidget = { x:a[i++], y:a[i++], w:a[i++], h:a[i++], autoPosition:a[i++] };\r\n      return this.willItFit(w);\r\n    }\r\n    return this.engine.willItFit(node);\r\n  }\r\n\r\n  /** @internal */\r\n  protected _triggerChangeEvent(): GridStack {\r\n    if (this.engine.batchMode) return this;\r\n    let elements = this.engine.getDirtyNodes(true); // verify they really changed\r\n    if (elements && elements.length) {\r\n      if (!this._ignoreLayoutsNodeChange) {\r\n        this.engine.layoutsNodesChange(elements);\r\n      }\r\n      this._triggerEvent('change', elements);\r\n    }\r\n    this.engine.saveInitial(); // we called, now reset initial values & dirty flags\r\n    return this;\r\n  }\r\n\r\n  /** @internal */\r\n  protected _triggerAddEvent(): GridStack {\r\n    if (this.engine.batchMode) return this;\r\n    if (this.engine.addedNodes && this.engine.addedNodes.length > 0) {\r\n      if (!this._ignoreLayoutsNodeChange) {\r\n        this.engine.layoutsNodesChange(this.engine.addedNodes);\r\n      }\r\n      // prevent added nodes from also triggering 'change' event (which is called next)\r\n      this.engine.addedNodes.forEach(n => { delete n._dirty; });\r\n      this._triggerEvent('added', this.engine.addedNodes);\r\n      this.engine.addedNodes = [];\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** @internal */\r\n  public _triggerRemoveEvent(): GridStack {\r\n    if (this.engine.batchMode) return this;\r\n    if (this.engine.removedNodes && this.engine.removedNodes.length > 0) {\r\n      this._triggerEvent('removed', this.engine.removedNodes);\r\n      this.engine.removedNodes = [];\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** @internal */\r\n  protected _triggerEvent(type: string, data?: GridStackNode[]): GridStack {\r\n    let event = data ? new CustomEvent(type, {bubbles: false, detail: data}) : new Event(type);\r\n    this.el.dispatchEvent(event);\r\n    return this;\r\n  }\r\n\r\n  /** @internal called to delete the current dynamic style sheet used for our layout */\r\n  protected _removeStylesheet(): GridStack {\r\n\r\n    if (this._styles) {\r\n      Utils.removeStylesheet(this._styleSheetClass);\r\n      delete this._styles;\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** @internal updated/create the CSS styles for row based layout and initial margin setting */\r\n  protected _updateStyles(forceUpdate = false, maxH?: number): GridStack {\r\n    // call to delete existing one if we change cellHeight / margin\r\n    if (forceUpdate) {\r\n      this._removeStylesheet();\r\n    }\r\n\r\n    if (!maxH) maxH = this.getRow();\r\n    this._updateContainerHeight();\r\n\r\n    // if user is telling us they will handle the CSS themselves by setting heights to 0. Do we need this opts really ??\r\n    if (this.opts.cellHeight === 0) {\r\n      return this;\r\n    }\r\n\r\n    let cellHeight = this.opts.cellHeight as number;\r\n    let cellHeightUnit = this.opts.cellHeightUnit;\r\n    let prefix = `.${this._styleSheetClass} > .${this.opts.itemClass}`;\r\n\r\n    // create one as needed\r\n    if (!this._styles) {\r\n      // insert style to parent (instead of 'head' by default) to support WebComponent\r\n      let styleLocation = this.opts.styleInHead ? undefined : this.el.parentNode as HTMLElement;\r\n      this._styles = Utils.createStylesheet(this._styleSheetClass, styleLocation, {\r\n        nonce: this.opts.nonce,\r\n      });\r\n      if (!this._styles) return this;\r\n      this._styles._max = 0;\r\n\r\n      // these are done once only\r\n      Utils.addCSSRule(this._styles, prefix, `min-height: ${cellHeight}${cellHeightUnit}`);\r\n      // content margins\r\n      let top: string = this.opts.marginTop + this.opts.marginUnit;\r\n      let bottom: string = this.opts.marginBottom + this.opts.marginUnit;\r\n      let right: string = this.opts.marginRight + this.opts.marginUnit;\r\n      let left: string = this.opts.marginLeft + this.opts.marginUnit;\r\n      let content = `${prefix} > .grid-stack-item-content`;\r\n      let placeholder = `.${this._styleSheetClass} > .grid-stack-placeholder > .placeholder-content`;\r\n      Utils.addCSSRule(this._styles, content, `top: ${top}; right: ${right}; bottom: ${bottom}; left: ${left};`);\r\n      Utils.addCSSRule(this._styles, placeholder, `top: ${top}; right: ${right}; bottom: ${bottom}; left: ${left};`);\r\n      // resize handles offset (to match margin)\r\n      Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-ne`, `right: ${right}`);\r\n      Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-e`, `right: ${right}`);\r\n      Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-se`, `right: ${right}; bottom: ${bottom}`);\r\n      Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-nw`, `left: ${left}`);\r\n      Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-w`, `left: ${left}`);\r\n      Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-sw`, `left: ${left}; bottom: ${bottom}`);\r\n    }\r\n\r\n    // now update the height specific fields\r\n    maxH = maxH || this._styles._max;\r\n    if (maxH > this._styles._max) {\r\n      let getHeight = (rows: number): string => (cellHeight * rows) + cellHeightUnit;\r\n      for (let i = this._styles._max + 1; i <= maxH; i++) { // start at 1\r\n        let h: string = getHeight(i);\r\n        Utils.addCSSRule(this._styles, `${prefix}[gs-y=\"${i-1}\"]`,   `top: ${getHeight(i-1)}`); // start at 0\r\n        Utils.addCSSRule(this._styles, `${prefix}[gs-h=\"${i}\"]`,     `height: ${h}`);\r\n        Utils.addCSSRule(this._styles, `${prefix}[gs-min-h=\"${i}\"]`, `min-height: ${h}`);\r\n        Utils.addCSSRule(this._styles, `${prefix}[gs-max-h=\"${i}\"]`, `max-height: ${h}`);\r\n      }\r\n      this._styles._max = maxH;\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** @internal */\r\n  protected _updateContainerHeight(): GridStack {\r\n    if (!this.engine || this.engine.batchMode) return this;\r\n    let row = this.getRow() + this._extraDragRow; // checks for minRow already\r\n    // check for css min height\r\n    // Note: we don't handle %,rem correctly so comment out, beside we don't need need to create un-necessary\r\n    // rows as the CSS will make us bigger than our set height if needed... not sure why we had this.\r\n    // let cssMinHeight = parseInt(getComputedStyle(this.el)['min-height']);\r\n    // if (cssMinHeight > 0) {\r\n    //   let minRow = Math.round(cssMinHeight / this.getCellHeight(true));\r\n    //   if (row < minRow) {\r\n    //     row = minRow;\r\n    //   }\r\n    // }\r\n    this.el.setAttribute('gs-current-row', String(row));\r\n    if (row === 0) {\r\n      this.el.style.removeProperty('min-height');\r\n      return this;\r\n    }\r\n    let cellHeight = this.opts.cellHeight as number;\r\n    let unit = this.opts.cellHeightUnit;\r\n    if (!cellHeight) return this;\r\n    this.el.style.minHeight = row * cellHeight + unit;\r\n    return this;\r\n  }\r\n\r\n  /** @internal */\r\n  protected _prepareElement(el: GridItemHTMLElement, triggerAddEvent = false, node?: GridStackNode): GridStack {\r\n    el.classList.add(this.opts.itemClass);\r\n    node = node || this._readAttr(el);\r\n    el.gridstackNode = node;\r\n    node.el = el;\r\n    node.grid = this;\r\n    let copy = {...node};\r\n    node = this.engine.addNode(node, triggerAddEvent);\r\n    // write node attr back in case there was collision or we have to fix bad values during addNode()\r\n    if (!Utils.same(node, copy)) {\r\n      this._writeAttr(el, node);\r\n    }\r\n    this._prepareDragDropByNode(node);\r\n    return this;\r\n  }\r\n\r\n  /** @internal call to write position x,y,w,h attributes back to element */\r\n  protected _writePosAttr(el: HTMLElement, n: GridStackPosition): GridStack {\r\n    if (n.x !== undefined && n.x !== null) { el.setAttribute('gs-x', String(n.x)); }\r\n    if (n.y !== undefined && n.y !== null) { el.setAttribute('gs-y', String(n.y)); }\r\n    if (n.w) { el.setAttribute('gs-w', String(n.w)); }\r\n    if (n.h) { el.setAttribute('gs-h', String(n.h)); }\r\n    return this;\r\n  }\r\n\r\n  /** @internal call to write any default attributes back to element */\r\n  protected _writeAttr(el: HTMLElement, node: GridStackWidget): GridStack {\r\n    if (!node) return this;\r\n    this._writePosAttr(el, node);\r\n\r\n    let attrs /*: GridStackWidget but strings */ = { // remaining attributes\r\n      autoPosition: 'gs-auto-position',\r\n      minW: 'gs-min-w',\r\n      minH: 'gs-min-h',\r\n      maxW: 'gs-max-w',\r\n      maxH: 'gs-max-h',\r\n      noResize: 'gs-no-resize',\r\n      noMove: 'gs-no-move',\r\n      locked: 'gs-locked',\r\n      id: 'gs-id',\r\n    };\r\n    for (const key in attrs) {\r\n      if (node[key]) { // 0 is valid for x,y only but done above already and not in list anyway\r\n        el.setAttribute(attrs[key], String(node[key]));\r\n      } else {\r\n        el.removeAttribute(attrs[key]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** @internal call to read any default attributes from element */\r\n  protected _readAttr(el: HTMLElement): GridStackWidget {\r\n    let node: GridStackNode = {};\r\n    node.x = Utils.toNumber(el.getAttribute('gs-x'));\r\n    node.y = Utils.toNumber(el.getAttribute('gs-y'));\r\n    node.w = Utils.toNumber(el.getAttribute('gs-w'));\r\n    node.h = Utils.toNumber(el.getAttribute('gs-h'));\r\n    node.maxW = Utils.toNumber(el.getAttribute('gs-max-w'));\r\n    node.minW = Utils.toNumber(el.getAttribute('gs-min-w'));\r\n    node.maxH = Utils.toNumber(el.getAttribute('gs-max-h'));\r\n    node.minH = Utils.toNumber(el.getAttribute('gs-min-h'));\r\n    node.autoPosition = Utils.toBool(el.getAttribute('gs-auto-position'));\r\n    node.noResize = Utils.toBool(el.getAttribute('gs-no-resize'));\r\n    node.noMove = Utils.toBool(el.getAttribute('gs-no-move'));\r\n    node.locked = Utils.toBool(el.getAttribute('gs-locked'));\r\n    node.id = el.getAttribute('gs-id');\r\n\r\n    // remove any key not found (null or false which is default)\r\n    for (const key in node) {\r\n      if (!node.hasOwnProperty(key)) return;\r\n      if (!node[key] && node[key] !== 0) { // 0 can be valid value (x,y only really)\r\n        delete node[key];\r\n      }\r\n    }\r\n\r\n    return node;\r\n  }\r\n\r\n  /** @internal */\r\n  protected _setStaticClass(): GridStack {\r\n    let classes = ['grid-stack-static'];\r\n\r\n    if (this.opts.staticGrid) {\r\n      this.el.classList.add(...classes);\r\n      this.el.setAttribute('gs-static', 'true');\r\n    } else {\r\n      this.el.classList.remove(...classes);\r\n      this.el.removeAttribute('gs-static');\r\n\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * called when we are being resized by the window - check if the one Column Mode needs to be turned on/off\r\n   * and remember the prev columns we used, or get our count from parent, as well as check for auto cell height (square)\r\n   */\r\n  public onParentResize(): GridStack {\r\n    if (!this.el || !this.el.clientWidth) return; // return if we're gone or no size yet (will get called again)\r\n    let changedColumn = false;\r\n\r\n    // see if we're nested and take our column count from our parent....\r\n    if (this._autoColumn && this.parentGridItem) {\r\n      if (this.opts.column !== this.parentGridItem.w) {\r\n        changedColumn = true;\r\n        this.column(this.parentGridItem.w, 'none');\r\n      }\r\n    } else {\r\n      // else check for 1 column in/out behavior\r\n      let oneColumn = !this.opts.disableOneColumnMode && this.el.clientWidth <= this.opts.oneColumnSize;\r\n      if ((this.opts.column === 1) !== oneColumn) {\r\n        changedColumn = true;\r\n        if (this.opts.animate) { this.setAnimation(false); } // 1 <-> 12 is too radical, turn off animation\r\n        this.column(oneColumn ? 1 : this._prevColumn);\r\n        if (this.opts.animate) { this.setAnimation(true); }\r\n      }\r\n    }\r\n\r\n    // make the cells content square again\r\n    if (this._isAutoCellHeight) {\r\n      if (!changedColumn && this.opts.cellHeightThrottle) {\r\n        if (!this._cellHeightThrottle) {\r\n          this._cellHeightThrottle = Utils.throttle(() => this.cellHeight(), this.opts.cellHeightThrottle);\r\n        }\r\n        this._cellHeightThrottle();\r\n      } else {\r\n        // immediate update if we've changed column count or have no threshold\r\n        this.cellHeight();\r\n      }\r\n    }\r\n\r\n    // finally update any nested grids\r\n    this.engine.nodes.forEach(n => {\r\n      if (n.subGrid) {(n.subGrid as GridStack).onParentResize()}\r\n    });\r\n\r\n    return this;\r\n  }\r\n\r\n  /** add or remove the window size event handler */\r\n  protected _updateWindowResizeEvent(forceRemove = false): GridStack {\r\n    // only add event if we're not nested (parent will call us) and we're auto sizing cells or supporting oneColumn (i.e. doing work)\r\n    const workTodo = (this._isAutoCellHeight || !this.opts.disableOneColumnMode) && !this.parentGridItem;\r\n\r\n    if (!forceRemove && workTodo && !this._windowResizeBind) {\r\n      this._windowResizeBind = this.onParentResize.bind(this); // so we can properly remove later\r\n      window.addEventListener('resize', this._windowResizeBind);\r\n    } else if ((forceRemove || !workTodo) && this._windowResizeBind) {\r\n      window.removeEventListener('resize', this._windowResizeBind);\r\n      delete this._windowResizeBind; // remove link to us so we can free\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n  /** @internal convert a potential selector into actual element */\r\n  public static getElement(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement { return Utils.getElement(els) }\r\n  /** @internal */\r\n  public static getElements(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement[] { return Utils.getElements(els) }\r\n  /** @internal */\r\n  public static getGridElement(els: GridStackElement): GridHTMLElement { return GridStack.getElement(els) }\r\n  /** @internal */\r\n  public static getGridElements(els: string): GridHTMLElement[] { return Utils.getElements(els) }\r\n\r\n  /** @internal initialize margin top/bottom/left/right and units */\r\n  protected _initMargin(): GridStack {\r\n\r\n    let data: HeightData;\r\n    let margin = 0;\r\n\r\n    // support passing multiple values like CSS (ex: '5px 10px 0 20px')\r\n    let margins: string[] = [];\r\n    if (typeof this.opts.margin === 'string') {\r\n      margins = this.opts.margin.split(' ')\r\n    }\r\n    if (margins.length === 2) { // top/bot, left/right like CSS\r\n      this.opts.marginTop = this.opts.marginBottom = margins[0];\r\n      this.opts.marginLeft = this.opts.marginRight = margins[1];\r\n    } else if (margins.length === 4) { // Clockwise like CSS\r\n      this.opts.marginTop = margins[0];\r\n      this.opts.marginRight = margins[1];\r\n      this.opts.marginBottom = margins[2];\r\n      this.opts.marginLeft = margins[3];\r\n    } else {\r\n      data = Utils.parseHeight(this.opts.margin);\r\n      this.opts.marginUnit = data.unit;\r\n      margin = this.opts.margin = data.h;\r\n    }\r\n\r\n    // see if top/bottom/left/right need to be set as well\r\n    if (this.opts.marginTop === undefined) {\r\n      this.opts.marginTop = margin;\r\n    } else {\r\n      data = Utils.parseHeight(this.opts.marginTop);\r\n      this.opts.marginTop = data.h;\r\n      delete this.opts.margin;\r\n    }\r\n\r\n    if (this.opts.marginBottom === undefined) {\r\n      this.opts.marginBottom = margin;\r\n    } else {\r\n      data = Utils.parseHeight(this.opts.marginBottom);\r\n      this.opts.marginBottom = data.h;\r\n      delete this.opts.margin;\r\n    }\r\n\r\n    if (this.opts.marginRight === undefined) {\r\n      this.opts.marginRight = margin;\r\n    } else {\r\n      data = Utils.parseHeight(this.opts.marginRight);\r\n      this.opts.marginRight = data.h;\r\n      delete this.opts.margin;\r\n    }\r\n\r\n    if (this.opts.marginLeft === undefined) {\r\n      this.opts.marginLeft = margin;\r\n    } else {\r\n      data = Utils.parseHeight(this.opts.marginLeft);\r\n      this.opts.marginLeft = data.h;\r\n      delete this.opts.margin;\r\n    }\r\n    this.opts.marginUnit = data.unit; // in case side were spelled out, use those units instead...\r\n    if (this.opts.marginTop === this.opts.marginBottom && this.opts.marginLeft === this.opts.marginRight && this.opts.marginTop === this.opts.marginRight) {\r\n      this.opts.margin = this.opts.marginTop; // makes it easier to check for no-ops in setMargin()\r\n    }\r\n    return this;\r\n  }\r\n\r\n  static GDRev = '7.3.0';\r\n\r\n  /* ===========================================================================================\r\n   * drag&drop methods that used to be stubbed out and implemented in dd-gridstack.ts\r\n   * but caused loading issues in prod - see https://github.com/gridstack/gridstack.js/issues/2039\r\n   * ===========================================================================================\r\n   */\r\n\r\n  /** get the global (but static to this code) DD implementation */\r\n  public static getDD(): DDGridStack {\r\n    return dd;\r\n  }\r\n\r\n  /**\r\n   * call to setup dragging in from the outside (say toolbar), by specifying the class selection and options.\r\n   * Called during GridStack.init() as options, but can also be called directly (last param are used) in case the toolbar\r\n   * is dynamically create and needs to be set later.\r\n   * @param dragIn string selector (ex: '.sidebar .grid-stack-item')\r\n   * @param dragInOptions options - see DDDragInOpt. (default: {handle: '.grid-stack-item-content', appendTo: 'body'}\r\n   **/\r\n  public static setupDragIn(dragIn?: string, dragInOptions?: DDDragInOpt): void {\r\n    if (dragInOptions?.pause !== undefined) {\r\n      DDManager.pauseDrag = dragInOptions.pause;\r\n    }\r\n\r\n    if (typeof dragIn === 'string') {\r\n      dragInOptions = {...dragInDefaultOptions, ...(dragInOptions || {})};\r\n      Utils.getElements(dragIn).forEach(el => {\r\n        if (!dd.isDraggable(el)) dd.dragIn(el, dragInOptions);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Enables/Disables dragging by the user of specific grid element. If you want all items, and have it affect future items, use enableMove() instead. No-op for static grids.\r\n   * IF you are looking to prevent an item from moving (due to being pushed around by another during collision) use locked property instead.\r\n   * @param els widget or selector to modify.\r\n   * @param val if true widget will be draggable.\r\n   */\r\n  public movable(els: GridStackElement, val: boolean): GridStack {\r\n    if (this.opts.staticGrid) return this; // can't move a static grid!\r\n    GridStack.getElements(els).forEach(el => {\r\n      let node = el.gridstackNode;\r\n      if (!node) return;\r\n      if (val) delete node.noMove; else node.noMove = true;\r\n      this._prepareDragDropByNode(node); // init DD if need be, and adjust\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Enables/Disables user resizing of specific grid element. If you want all items, and have it affect future items, use enableResize() instead. No-op for static grids.\r\n   * @param els  widget or selector to modify\r\n   * @param val  if true widget will be resizable.\r\n   */\r\n  public resizable(els: GridStackElement, val: boolean): GridStack {\r\n    if (this.opts.staticGrid) return this; // can't resize a static grid!\r\n    GridStack.getElements(els).forEach(el => {\r\n      let node = el.gridstackNode;\r\n      if (!node) return;\r\n      if (val) delete node.noResize; else node.noResize = true;\r\n      this._prepareDragDropByNode(node); // init DD if need be, and adjust\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Temporarily disables widgets moving/resizing.\r\n   * If you want a more permanent way (which freezes up resources) use `setStatic(true)` instead.\r\n   * Note: no-op for static grid\r\n   * This is a shortcut for:\r\n   * @example\r\n   *  grid.enableMove(false);\r\n   *  grid.enableResize(false);\r\n   * @param recurse true (default) if sub-grids also get updated\r\n   */\r\n  public disable(recurse = true): GridStack {\r\n    if (this.opts.staticGrid) return;\r\n    this.enableMove(false, recurse);\r\n    this.enableResize(false, recurse);// @ts-ignore\r\n    this._triggerEvent('disable');\r\n    return this;\r\n  }\r\n  /**\r\n   * Re-enables widgets moving/resizing - see disable().\r\n   * Note: no-op for static grid.\r\n   * This is a shortcut for:\r\n   * @example\r\n   *  grid.enableMove(true);\r\n   *  grid.enableResize(true);\r\n   * @param recurse true (default) if sub-grids also get updated\r\n   */\r\n  public enable(recurse = true): GridStack {\r\n    if (this.opts.staticGrid) return;\r\n    this.enableMove(true, recurse);\r\n    this.enableResize(true, recurse);// @ts-ignore\r\n    this._triggerEvent('enable');\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Enables/disables widget moving. No-op for static grids.\r\n   * @param recurse true (default) if sub-grids also get updated\r\n   */\r\n  public enableMove(doEnable: boolean, recurse = true): GridStack {\r\n    if (this.opts.staticGrid) return this; // can't move a static grid!\r\n    this.opts.disableDrag = !doEnable; // FIRST before we update children as grid overrides #1658\r\n    this.engine.nodes.forEach(n => {\r\n      this.movable(n.el, doEnable);\r\n      if (n.subGrid && recurse) (n.subGrid as GridStack).enableMove(doEnable, recurse);\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Enables/disables widget resizing. No-op for static grids.\r\n   * @param recurse true (default) if sub-grids also get updated\r\n   */\r\n  public enableResize(doEnable: boolean, recurse = true): GridStack {\r\n    if (this.opts.staticGrid) return this; // can't size a static grid!\r\n    this.opts.disableResize = !doEnable; // FIRST before we update children as grid overrides #1658\r\n    this.engine.nodes.forEach(n => {\r\n      this.resizable(n.el, doEnable);\r\n      if (n.subGrid && recurse) (n.subGrid as GridStack).enableResize(doEnable, recurse);\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /** @internal removes any drag&drop present (called during destroy) */\r\n  protected _removeDD(el: DDElementHost): GridStack {\r\n    dd.draggable(el, 'destroy').resizable(el, 'destroy');\r\n    if (el.gridstackNode) {\r\n      delete el.gridstackNode._initDD; // reset our DD init flag\r\n    }\r\n    delete el.ddElement;\r\n    return this;\r\n  }\r\n\r\n  /** @internal called to add drag over to support widgets being added externally */\r\n  protected _setupAcceptWidget(): GridStack {\r\n\r\n    // check if we need to disable things\r\n    if (this.opts.staticGrid || (!this.opts.acceptWidgets && !this.opts.removable)) {\r\n      dd.droppable(this.el, 'destroy');\r\n      return this;\r\n    }\r\n\r\n    // vars shared across all methods\r\n    let cellHeight: number, cellWidth: number;\r\n\r\n    let onDrag = (event: DragEvent, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n      let node = el.gridstackNode;\r\n      if (!node) return;\r\n\r\n      helper = helper || el;\r\n      let parent = this.el.getBoundingClientRect();\r\n      let {top, left} = helper.getBoundingClientRect();\r\n      left -= parent.left;\r\n      top -= parent.top;\r\n      let ui: DDUIData = {position: {top, left}};\r\n\r\n      if (node._temporaryRemoved) {\r\n        node.x = Math.max(0, Math.round(left / cellWidth));\r\n        node.y = Math.max(0, Math.round(top / cellHeight));\r\n        delete node.autoPosition;\r\n        this.engine.nodeBoundFix(node);\r\n\r\n        // don't accept *initial* location if doesn't fit #1419 (locked drop region, or can't grow), but maybe try if it will go somewhere\r\n        if (!this.engine.willItFit(node)) {\r\n          node.autoPosition = true; // ignore x,y and try for any slot...\r\n          if (!this.engine.willItFit(node)) {\r\n            dd.off(el, 'drag'); // stop calling us\r\n            return; // full grid or can't grow\r\n          }\r\n          if (node._willFitPos) {\r\n            // use the auto position instead #1687\r\n            Utils.copyPos(node, node._willFitPos);\r\n            delete node._willFitPos;\r\n          }\r\n        }\r\n\r\n        // re-use the existing node dragging method\r\n        this._onStartMoving(helper, event, ui, node, cellWidth, cellHeight);\r\n      } else {\r\n        // re-use the existing node dragging that does so much of the collision detection\r\n        this._dragOrResize(helper, event, ui, node, cellWidth, cellHeight);\r\n      }\r\n    }\r\n\r\n    dd.droppable(this.el, {\r\n      accept: (el: GridItemHTMLElement) => {\r\n        let node: GridStackNode = el.gridstackNode;\r\n        // set accept drop to true on ourself (which we ignore) so we don't get \"can't drop\" icon in HTML5 mode while moving\r\n        if (node?.grid === this) return true;\r\n        if (!this.opts.acceptWidgets) return false;\r\n        // check for accept method or class matching\r\n        let canAccept = true;\r\n        if (typeof this.opts.acceptWidgets === 'function') {\r\n          canAccept = this.opts.acceptWidgets(el);\r\n        } else {\r\n          let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string);\r\n          canAccept = el.matches(selector);\r\n        }\r\n        // finally check to make sure we actually have space left #1571\r\n        if (canAccept && node && this.opts.maxRow) {\r\n          let n = {w: node.w, h: node.h, minW: node.minW, minH: node.minH}; // only width/height matters and autoPosition\r\n          canAccept = this.engine.willItFit(n);\r\n        }\r\n        return canAccept;\r\n      }\r\n    })\r\n    /**\r\n     * entering our grid area\r\n     */\r\n      .on(this.el, 'dropover', (event: Event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n      // console.log(`over ${this.el.gridstack.opts.id} ${count++}`); // TEST\r\n        let node = el.gridstackNode;\r\n        // ignore drop enter on ourself (unless we temporarily removed) which happens on a simple drag of our item\r\n        if (node?.grid === this && !node._temporaryRemoved) {\r\n        // delete node._added; // reset this to track placeholder again in case we were over other grid #1484 (dropout doesn't always clear)\r\n          return false; // prevent parent from receiving msg (which may be a grid as well)\r\n        }\r\n\r\n        // fix #1578 when dragging fast, we may not get a leave on the previous grid so force one now\r\n        if (node?.grid && node.grid !== this && !node._temporaryRemoved) {\r\n        // console.log('dropover without leave'); // TEST\r\n          let otherGrid = node.grid;\r\n          otherGrid._leave(el, helper);\r\n        }\r\n\r\n        // cache cell dimensions (which don't change), position can animate if we removed an item in otherGrid that affects us...\r\n        cellWidth = this.cellWidth();\r\n        cellHeight = this.getCellHeight(true);\r\n\r\n        // load any element attributes if we don't have a node\r\n        if (!node) {// @ts-ignore private read only on ourself\r\n          node = this._readAttr(el);\r\n        }\r\n        if (!node.grid) {\r\n          node._isExternal = true;\r\n          el.gridstackNode = node;\r\n        }\r\n\r\n        // calculate the grid size based on element outer size\r\n        helper = helper || el;\r\n        let w = node.w || Math.round(helper.offsetWidth / cellWidth) || 1;\r\n        let h = node.h || Math.round(helper.offsetHeight / cellHeight) || 1;\r\n\r\n        // if the item came from another grid, make a copy and save the original info in case we go back there\r\n        if (node.grid && node.grid !== this) {\r\n        // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific\r\n        // console.log('dropover cloning node'); // TEST\r\n          if (!el._gridstackNodeOrig) el._gridstackNodeOrig = node; // shouldn't have multiple nested!\r\n          el.gridstackNode = node = {...node, w, h, grid: this};\r\n          this.engine.cleanupNode(node)\r\n            .nodeBoundFix(node);\r\n          // restore some internal fields we need after clearing them all\r\n          node._initDD =\r\n        node._isExternal =  // DOM needs to be re-parented on a drop\r\n        node._temporaryRemoved = true; // so it can be inserted onDrag below\r\n        } else {\r\n          node.w = w; node.h = h;\r\n          node._temporaryRemoved = true; // so we can insert it\r\n        }\r\n\r\n        // clear any marked for complete removal (Note: don't check _isAboutToRemove as that is cleared above - just do it)\r\n        this._itemRemoving(node.el, false);\r\n\r\n        dd.on(el, 'drag', onDrag);\r\n        // make sure this is called at least once when going fast #1578\r\n        onDrag(event as DragEvent, el, helper);\r\n        return false; // prevent parent from receiving msg (which may be a grid as well)\r\n      })\r\n    /**\r\n     * Leaving our grid area...\r\n     */\r\n      .on(this.el, 'dropout', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n      // console.log(`out ${this.el.gridstack.opts.id} ${count++}`); // TEST\r\n        let node = el.gridstackNode;\r\n        if (!node) return false;\r\n        // fix #1578 when dragging fast, we might get leave after other grid gets enter (which calls us to clean)\r\n        // so skip this one if we're not the active grid really..\r\n        if (!node.grid || node.grid === this) {\r\n          this._leave(el, helper);\r\n          // if we were created as temporary nested grid, go back to before state\r\n          if (this._isTemp) {\r\n            this.removeAsSubGrid(node);\r\n          }\r\n        }\r\n        return false; // prevent parent from receiving msg (which may be grid as well)\r\n      })\r\n    /**\r\n     * end - releasing the mouse\r\n     */\r\n      .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n        let node = el.gridstackNode;\r\n        // ignore drop on ourself from ourself that didn't come from the outside - dragend will handle the simple move instead\r\n        if (node?.grid === this && !node._isExternal) return false;\r\n\r\n        let wasAdded = !!this.placeholder.parentElement; // skip items not actually added to us because of constrains, but do cleanup #1419\r\n        this.placeholder.remove();\r\n\r\n        // notify previous grid of removal\r\n        // console.log('drop delete _gridstackNodeOrig') // TEST\r\n        let origNode = el._gridstackNodeOrig;\r\n        delete el._gridstackNodeOrig;\r\n        if (wasAdded && origNode?.grid && origNode.grid !== this) {\r\n          let oGrid = origNode.grid;\r\n          oGrid.engine.removedNodes.push(origNode);\r\n          oGrid._triggerRemoveEvent()._triggerChangeEvent();\r\n          // if it's an empty sub-grid that got auto-created, nuke it\r\n          if (oGrid.parentGridItem && !oGrid.engine.nodes.length && oGrid.opts.subGridDynamic) {\r\n            oGrid.removeAsSubGrid();\r\n          }\r\n        }\r\n\r\n        if (!node) return false;\r\n\r\n        // use existing placeholder node as it's already in our list with drop location\r\n        if (wasAdded) {\r\n          this.engine.cleanupNode(node); // removes all internal _xyz values\r\n          node.grid = this;\r\n        }\r\n        dd.off(el, 'drag');\r\n        // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102)\r\n        // as the helper will be nuked by jquery-ui otherwise. TODO: update old code path\r\n        if (helper !== el) {\r\n          helper.remove();\r\n          el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info\r\n          if (wasAdded) {\r\n            el = el.cloneNode(true) as GridItemHTMLElement;\r\n          }\r\n        } else {\r\n          el.remove(); // reduce flicker as we change depth here, and size further down\r\n          this._removeDD(el);\r\n        }\r\n        if (!wasAdded) return false;\r\n        el.gridstackNode = node;\r\n        node.el = el;\r\n        let subGrid = (node.subGrid as GridStack)?.el?.gridstack; // set when actual sub-grid present\r\n        // @ts-ignore\r\n        Utils.copyPos(node, this._readAttr(this.placeholder)); // placeholder values as moving VERY fast can throw things off #1578\r\n        Utils.removePositioningStyles(el);// @ts-ignore\r\n        this._writeAttr(el, node);\r\n        el.classList.add(gridDefaults.itemClass, this.opts.itemClass);\r\n        this.el.appendChild(el);// @ts-ignore // TODO: now would be ideal time to _removeHelperStyle() overriding floating styles (native only)\r\n        if (subGrid) {\r\n          subGrid.parentGridItem = node;\r\n          if (!subGrid.opts.styleInHead) subGrid._updateStyles(true); // re-create sub-grid styles now that we've moved\r\n        }\r\n        this._updateContainerHeight();\r\n        this.engine.addedNodes.push(node);// @ts-ignore\r\n        this._triggerAddEvent();// @ts-ignore\r\n        this._triggerChangeEvent();\r\n\r\n        this.engine.endUpdate();\r\n        if (this._gsEventHandler['dropped']) {\r\n          this._gsEventHandler['dropped']({...event, type: 'dropped'}, origNode && origNode.grid ? origNode : undefined, node);\r\n        }\r\n\r\n        // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up\r\n        window.setTimeout(() => {\r\n          // IFF we are still there (some application will use as placeholder and insert their real widget instead and better call makeWidget())\r\n          if (node.el && node.el.parentElement) {\r\n            this._prepareDragDropByNode(node);\r\n          } else {\r\n            this.engine.removeNode(node);\r\n          }\r\n          delete node.grid._isTemp;\r\n        });\r\n\r\n        return false; // prevent parent from receiving msg (which may be grid as well)\r\n      });\r\n    return this;\r\n  }\r\n\r\n  /** @internal mark item for removal */\r\n  private _itemRemoving(el: GridItemHTMLElement, remove: boolean) {\r\n    let node = el ? el.gridstackNode : undefined;\r\n    if (!node || !node.grid) return;\r\n    remove ? node._isAboutToRemove = true : delete node._isAboutToRemove;\r\n    remove ? el.classList.add('grid-stack-item-removing') : el.classList.remove('grid-stack-item-removing');\r\n  }\r\n\r\n  /** @internal called to setup a trash drop zone if the user specifies it */\r\n  protected _setupRemoveDrop(): GridStack {\r\n    if (!this.opts.staticGrid && typeof this.opts.removable === 'string') {\r\n      let trashEl = document.querySelector(this.opts.removable) as HTMLElement;\r\n      if (!trashEl) return this;\r\n      // only register ONE drop-over/dropout callback for the 'trash', and it will\r\n      // update the passed in item and parent grid because the 'trash' is a shared resource anyway,\r\n      // and Native DD only has 1 event CB (having a list and technically a per grid removableOptions complicates things greatly)\r\n      if (!dd.isDroppable(trashEl)) {\r\n        dd.droppable(trashEl, this.opts.removableOptions)\r\n          .on(trashEl, 'dropover', (event, el) => this._itemRemoving(el, true))\r\n          .on(trashEl, 'dropout',  (event, el) => this._itemRemoving(el, false));\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /** @internal prepares the element for drag&drop **/\r\n  protected _prepareDragDropByNode(node: GridStackNode): GridStack {\r\n    let el = node.el;\r\n    const noMove = node.noMove || this.opts.disableDrag;\r\n    const noResize = node.noResize || this.opts.disableResize;\r\n\r\n    // check for disabled grid first\r\n    if (this.opts.staticGrid || (noMove && noResize)) {\r\n      if (node._initDD) {\r\n        this._removeDD(el); // nukes everything instead of just disable, will add some styles back next\r\n        delete node._initDD;\r\n      }\r\n      el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435\r\n      return this;\r\n    }\r\n\r\n    if (!node._initDD) {\r\n      // variables used/cashed between the 3 start/move/end methods, in addition to node passed above\r\n      let cellWidth: number;\r\n      let cellHeight: number;\r\n\r\n      /** called when item starts moving/resizing */\r\n      let onStartMoving = (event: Event, ui: DDUIData) => {\r\n        // trigger any 'dragstart' / 'resizestart' manually\r\n        if (this._gsEventHandler[event.type]) {\r\n          this._gsEventHandler[event.type](event, event.target);\r\n        }\r\n        cellWidth = this.cellWidth();\r\n        cellHeight = this.getCellHeight(true); // force pixels for calculations\r\n\r\n        this._onStartMoving(el, event, ui, node, cellWidth, cellHeight);\r\n      }\r\n\r\n      /** called when item is being dragged/resized */\r\n      let dragOrResize = (event: MouseEvent, ui: DDUIData) => {\r\n        this._dragOrResize(el, event, ui, node, cellWidth, cellHeight);\r\n      }\r\n\r\n      /** called when the item stops moving/resizing */\r\n      let onEndMoving = (event: Event) => {\r\n        this.placeholder.remove();\r\n        delete node._moving;\r\n        delete node._event;\r\n        delete node._lastTried;\r\n\r\n        // if the item has moved to another grid, we're done here\r\n        let target: GridItemHTMLElement = event.target as GridItemHTMLElement;\r\n        if (!target.gridstackNode || target.gridstackNode.grid !== this) return;\r\n\r\n        node.el = target;\r\n\r\n        if (node._isAboutToRemove) {\r\n          let gridToNotify = el.gridstackNode.grid;\r\n          if (gridToNotify._gsEventHandler[event.type]) {\r\n            gridToNotify._gsEventHandler[event.type](event, target);\r\n          }\r\n          this._removeDD(el);\r\n          gridToNotify.engine.removedNodes.push(node);\r\n          gridToNotify._triggerRemoveEvent();\r\n          // break circular links and remove DOM\r\n          delete el.gridstackNode;\r\n          delete node.el;\r\n          el.remove();\r\n        } else {\r\n          Utils.removePositioningStyles(target);\r\n          if (node._temporaryRemoved) {\r\n            // got removed - restore item back to before dragging position\r\n            Utils.copyPos(node, node._orig);// @ts-ignore\r\n            this._writePosAttr(target, node);\r\n            this.engine.addNode(node);\r\n          } else {\r\n            // move to new placeholder location\r\n            this._writePosAttr(target, node);\r\n          }\r\n          if (this._gsEventHandler[event.type]) {\r\n            this._gsEventHandler[event.type](event, target);\r\n          }\r\n        }\r\n        // @ts-ignore\r\n        this._extraDragRow = 0;// @ts-ignore\r\n        this._updateContainerHeight();// @ts-ignore\r\n        this._triggerChangeEvent();\r\n\r\n        this.engine.endUpdate();\r\n      }\r\n\r\n      dd.draggable(el, {\r\n        start: onStartMoving,\r\n        stop: onEndMoving,\r\n        drag: dragOrResize\r\n      }).resizable(el, {\r\n        start: onStartMoving,\r\n        stop: onEndMoving,\r\n        resize: dragOrResize\r\n      });\r\n      node._initDD = true; // we've set DD support now\r\n    }\r\n\r\n    // finally fine tune move vs resize by disabling any part...\r\n    dd.draggable(el, noMove ? 'disable' : 'enable')\r\n      .resizable(el, noResize ? 'disable' : 'enable');\r\n\r\n    return this;\r\n  }\r\n\r\n  /** @internal handles actual drag/resize start **/\r\n  protected _onStartMoving(el: GridItemHTMLElement, event: Event, ui: DDUIData, node: GridStackNode, cellWidth: number, cellHeight: number): void {\r\n    this.engine.cleanNodes()\r\n      .beginUpdate(node);\r\n    // @ts-ignore\r\n    this._writePosAttr(this.placeholder, node)\r\n    this.el.appendChild(this.placeholder);\r\n    // console.log('_onStartMoving placeholder') // TEST\r\n\r\n    node.el = this.placeholder;\r\n    node._lastUiPosition = ui.position;\r\n    node._prevYPix = ui.position.top;\r\n    node._moving = (event.type === 'dragstart'); // 'dropover' are not initially moving so they can go exactly where they enter (will push stuff out of the way)\r\n    delete node._lastTried;\r\n\r\n    if (event.type === 'dropover' && node._temporaryRemoved) {\r\n      // console.log('engine.addNode x=' + node.x); // TEST\r\n      this.engine.addNode(node); // will add, fix collisions, update attr and clear _temporaryRemoved\r\n      node._moving = true; // AFTER, mark as moving object (wanted fix location before)\r\n    }\r\n\r\n    // set the min/max resize info\r\n    this.engine.cacheRects(cellWidth, cellHeight, this.opts.marginTop as number, this.opts.marginRight as number, this.opts.marginBottom as number, this.opts.marginLeft as number);\r\n    if (event.type === 'resizestart') {\r\n      dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minW || 1))\r\n        .resizable(el, 'option', 'minHeight', cellHeight * (node.minH || 1));\r\n      if (node.maxW) { dd.resizable(el, 'option', 'maxWidth', cellWidth * node.maxW); }\r\n      if (node.maxH) { dd.resizable(el, 'option', 'maxHeight', cellHeight * node.maxH); }\r\n    }\r\n  }\r\n\r\n  /** @internal handles actual drag/resize **/\r\n  protected _dragOrResize(el: GridItemHTMLElement, event: MouseEvent, ui: DDUIData, node: GridStackNode, cellWidth: number, cellHeight: number): void {\r\n    let p = {...node._orig}; // could be undefined (_isExternal) which is ok (drag only set x,y and w,h will default to node value)\r\n    let resizing: boolean;\r\n    let mLeft = this.opts.marginLeft as number,\r\n      mRight = this.opts.marginRight as number,\r\n      mTop = this.opts.marginTop as number,\r\n      mBottom = this.opts.marginBottom as number;\r\n\r\n    // if margins (which are used to pass mid point by) are large relative to cell height/width, reduce them down #1855\r\n    let mHeight = Math.round(cellHeight * 0.1),\r\n      mWidth = Math.round(cellWidth * 0.1);\r\n    mLeft = Math.min(mLeft, mWidth);\r\n    mRight = Math.min(mRight, mWidth);\r\n    mTop = Math.min(mTop, mHeight);\r\n    mBottom = Math.min(mBottom, mHeight);\r\n\r\n    if (event.type === 'drag') {\r\n      if (node._temporaryRemoved) return; // handled by dropover\r\n      let distance = ui.position.top - node._prevYPix;\r\n      node._prevYPix = ui.position.top;\r\n      if (this.opts.draggable.scroll !== false) {\r\n        Utils.updateScrollPosition(el, ui.position, distance);\r\n      }\r\n\r\n      // get new position taking into account the margin in the direction we are moving! (need to pass mid point by margin)\r\n      let left = ui.position.left + (ui.position.left > node._lastUiPosition.left  ? -mRight : mLeft);\r\n      let top = ui.position.top + (ui.position.top > node._lastUiPosition.top  ? -mBottom : mTop);\r\n      p.x = Math.round(left / cellWidth);\r\n      p.y = Math.round(top / cellHeight);\r\n\r\n      // @ts-ignore// if we're at the bottom hitting something else, grow the grid so cursor doesn't leave when trying to place below others\r\n      let prev = this._extraDragRow;\r\n      if (this.engine.collide(node, p)) {\r\n        let row = this.getRow();\r\n        let extra = Math.max(0, (p.y + node.h) - row);\r\n        if (this.opts.maxRow && row + extra > this.opts.maxRow) {\r\n          extra = Math.max(0, this.opts.maxRow - row);\r\n        }// @ts-ignore\r\n        this._extraDragRow = extra;// @ts-ignore\r\n      } else this._extraDragRow = 0;// @ts-ignore\r\n      if (this._extraDragRow !== prev) this._updateContainerHeight();\r\n\r\n      if (node.x === p.x && node.y === p.y) return; // skip same\r\n      // DON'T skip one we tried as we might have failed because of coverage <50% before\r\n      // if (node._lastTried && node._lastTried.x === x && node._lastTried.y === y) return;\r\n    } else if (event.type === 'resize')  {\r\n      if (p.x < 0) return;\r\n      // Scrolling page if needed\r\n      Utils.updateScrollResize(event, el, cellHeight);\r\n\r\n      // get new size\r\n      p.w = Math.round((ui.size.width - mLeft) / cellWidth);\r\n      p.h = Math.round((ui.size.height - mTop) / cellHeight);\r\n      if (node.w === p.w && node.h === p.h) return;\r\n      if (node._lastTried && node._lastTried.w === p.w && node._lastTried.h === p.h) return; // skip one we tried (but failed)\r\n\r\n      // if we size on left/top side this might move us, so get possible new position as well\r\n      let left = ui.position.left + mLeft;\r\n      let top = ui.position.top + mTop;\r\n      p.x = Math.round(left / cellWidth);\r\n      p.y = Math.round(top / cellHeight);\r\n\r\n      resizing = true;\r\n    }\r\n\r\n    node._event = event;\r\n    node._lastTried = p; // set as last tried (will nuke if we go there)\r\n    let rect: GridStackPosition = { // screen pix of the dragged box\r\n      x: ui.position.left + mLeft,\r\n      y: ui.position.top + mTop,\r\n      w: (ui.size ? ui.size.width : node.w * cellWidth) - mLeft - mRight,\r\n      h: (ui.size ? ui.size.height : node.h * cellHeight) - mTop - mBottom\r\n    };\r\n    if (this.engine.moveNodeCheck(node, {...p, cellWidth, cellHeight, rect, resizing})) {\r\n      node._lastUiPosition = ui.position;\r\n      this.engine.cacheRects(cellWidth, cellHeight, mTop, mRight, mBottom, mLeft);\r\n      delete node._skipDown;\r\n      if (resizing && node.subGrid) { (node.subGrid as GridStack).onParentResize(); }// @ts-ignore\r\n      this._extraDragRow = 0;// @ts-ignore\r\n      this._updateContainerHeight();\r\n\r\n      let target = event.target as GridItemHTMLElement;// @ts-ignore\r\n      this._writePosAttr(target, node);\r\n      if (this._gsEventHandler[event.type]) {\r\n        this._gsEventHandler[event.type](event, target);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** @internal called when item leaving our area by either cursor dropout event\r\n   * or shape is outside our boundaries. remove it from us, and mark temporary if this was\r\n   * our item to start with else restore prev node values from prev grid it came from.\r\n   **/\r\n  protected _leave(el: GridItemHTMLElement, helper?: GridItemHTMLElement): void {\r\n    let node = el.gridstackNode;\r\n    if (!node) return;\r\n\r\n    dd.off(el, 'drag'); // no need to track while being outside\r\n\r\n    // this gets called when cursor leaves and shape is outside, so only do this once\r\n    if (node._temporaryRemoved) return;\r\n    node._temporaryRemoved = true;\r\n\r\n    this.engine.removeNode(node); // remove placeholder as well, otherwise it's a sign node is not in our list, which is a bigger issue\r\n    node.el = node._isExternal && helper ? helper : el; // point back to real item being dragged\r\n\r\n    if (this.opts.removable === true) { // boolean vs a class string\r\n      // item leaving us and we are supposed to remove on leave (no need to drag onto trash) mark it so\r\n      this._itemRemoving(el, true);\r\n    }\r\n\r\n    // finally if item originally came from another grid, but left us, restore things back to prev info\r\n    if (el._gridstackNodeOrig) {\r\n      // console.log('leave delete _gridstackNodeOrig') // TEST\r\n      el.gridstackNode = el._gridstackNodeOrig;\r\n      delete el._gridstackNodeOrig;\r\n    } else if (node._isExternal) {\r\n      // item came from outside (like a toolbar) so nuke any node info\r\n      delete node.el;\r\n      delete el.gridstackNode;\r\n      // and restore all nodes back to original\r\n      this.engine.restoreInitial();\r\n    }\r\n  }\r\n\r\n  // legacy method removed\r\n  public commit(): GridStack { obsolete(this, this.batchUpdate(false), 'commit', 'batchUpdate', '5.2'); return this; }\r\n}\r\n","/**\r\n * types.ts 7.3.0\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridStack } from './gridstack';\r\nimport { GridStackEngine } from './gridstack-engine';\r\n\r\n// default values for grid options - used during init and when saving out\r\nexport const gridDefaults: GridStackOptions = {\r\n  alwaysShowResizeHandle: 'mobile',\r\n  animate: true,\r\n  auto: true,\r\n  cellHeight: 'auto',\r\n  cellHeightThrottle: 100,\r\n  cellHeightUnit: 'px',\r\n  column: 12,\r\n  draggable: { handle: '.grid-stack-item-content', appendTo: 'body', scroll: true },\r\n  handle: '.grid-stack-item-content',\r\n  itemClass: 'grid-stack-item',\r\n  margin: 10,\r\n  marginUnit: 'px',\r\n  maxRow: 0,\r\n  minRow: 0,\r\n  oneColumnSize: 768,\r\n  placeholderClass: 'grid-stack-placeholder',\r\n  placeholderText: '',\r\n  removableOptions: { accept: '.grid-stack-item' },\r\n  resizable: { handles: 'se' },\r\n  rtl: 'auto',\r\n\r\n  // **** same as not being set ****\r\n  // disableDrag: false,\r\n  // disableOneColumnMode: false,\r\n  // disableResize: false,\r\n  // float: false,\r\n  // handleClass: null,\r\n  // oneColumnModeDomSort: false,\r\n  // removable: false,\r\n  // staticGrid: false,\r\n  // styleInHead: false,\r\n};\r\n\r\n/** default dragIn options */\r\nexport const dragInDefaultOptions: DDDragInOpt = {\r\n  handle: '.grid-stack-item-content',\r\n  appendTo: 'body',\r\n  // revert: 'invalid',\r\n  // scroll: false,\r\n};\r\n\r\n/** different layout options when changing # of columns,\r\n * including a custom function that takes new/old column count, and array of new/old positions\r\n * Note: new list may be partially already filled if we have a cache of the layout at that size and new items were added later.\r\n */\r\nexport type ColumnOptions = 'moveScale' | 'move' | 'scale' | 'none' |\r\n  ((column: number, oldColumn: number, nodes: GridStackNode[], oldNodes: GridStackNode[]) => void);\r\n\r\nexport type numberOrString = number | string;\r\nexport interface GridItemHTMLElement extends HTMLElement {\r\n  /** pointer to grid node instance */\r\n  gridstackNode?: GridStackNode;\r\n  /** @internal */\r\n  _gridstackNodeOrig?: GridStackNode;\r\n}\r\n\r\nexport type GridStackElement = string | HTMLElement | GridItemHTMLElement;\r\n\r\n/** specific and general event handlers for the .on() method */\r\nexport type GridStackEventHandler = (event: Event) => void;\r\nexport type GridStackElementHandler = (event: Event, el: GridItemHTMLElement) => void;\r\nexport type GridStackNodesHandler = (event: Event, nodes: GridStackNode[]) => void;\r\nexport type GridStackDroppedHandler = (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => void;\r\nexport type GridStackEventHandlerCallback = GridStackEventHandler | GridStackElementHandler | GridStackNodesHandler | GridStackDroppedHandler;\r\n\r\n/** optional function called during load() to callback the user on new added/remove grid items | grids */\r\nexport type AddRemoveFcn = (parent: HTMLElement, w: GridStackWidget, add: boolean, grid: boolean) => HTMLElement | undefined;\r\n\r\n/**\r\n * Defines the options for a Grid\r\n */\r\nexport interface GridStackOptions {\r\n  /**\r\n   * accept widgets dragged from other grids or from outside (default: `false`). Can be:\r\n   * `true` (uses `'.grid-stack-item'` class filter) or `false`,\r\n   * string for explicit class name,\r\n   * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html)\r\n   */\r\n  acceptWidgets?: boolean | string | ((element: Element) => boolean);\r\n\r\n  /**\r\n   * callback method use when new items|grids needs to be created or deleted, instead of the default\r\n   * item: <div class=\"grid-stack-item\"><div class=\"grid-stack-item-content\">w.content</div></div>\r\n   * grid: <div class=\"grid-stack\">grid content...</div>\r\n   * add = true: the returned DOM element will then be converted to a GridItemHTMLElement using makeWidget()|GridStack:init().\r\n   * add = false: the item will be removed from DOM (if not already done)\r\n   * grid = true|false for grid vs grid-items\r\n   */\r\n  addRemoveCB?: AddRemoveFcn;\r\n\r\n  /** possible values (default: `mobile`) - does not apply to non-resizable widgets\r\n    * `false` the resizing handles are only shown while hovering over a widget\r\n    * `true` the resizing handles are always shown\r\n    * 'mobile' if running on a mobile device, default to `true` (since there is no hovering per say), else `false`.\r\n    See [example](http://gridstack.github.io/gridstack.js/demo/mobile.html) */\r\n  alwaysShowResizeHandle?: true | false | 'mobile';\r\n\r\n  /** turns animation on (default?: true) */\r\n  animate?: boolean;\r\n\r\n  /** if false gridstack will not initialize existing items (default?: true) */\r\n  auto?: boolean;\r\n\r\n  /**\r\n   * one cell height (default?: 'auto'). Can be:\r\n   *  an integer (px)\r\n   *  a string (ex: '100px', '10em', '10rem'). Note: % doesn't right - see demo/cell-height.html\r\n   *  0, in which case the library will not generate styles for rows. Everything must be defined in your own CSS files.\r\n   *  'auto' - height will be calculated for square cells (width / column) and updated live as you resize the window - also see `cellHeightThrottle`\r\n   *  'initial' - similar to 'auto' (start at square cells) but stay that size during window resizing.\r\n   */\r\n  cellHeight?: numberOrString;\r\n\r\n  /** throttle time delay (in ms) used when cellHeight='auto' to improve performance vs usability (default?: 100).\r\n   * A value of 0 will make it instant at a cost of re-creating the CSS file at ever window resize event!\r\n   * */\r\n  cellHeightThrottle?: number;\r\n\r\n  /** (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem') */\r\n  cellHeightUnit?: string;\r\n\r\n  /** list of children item to create when calling load() or addGrid() */\r\n  children?: GridStackWidget[];\r\n\r\n  /** number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns.\r\n   * Note: for nested grids, it is recommended to use 'auto' which will always match the container grid-item current width (in column) to keep inside and outside\r\n   * items always to same. flag is not supported for regular non-nested grids.\r\n   */\r\n  column?: number | 'auto';\r\n\r\n  /** additional class on top of '.grid-stack' (which is required for our CSS) to differentiate this instance.\r\n  Note: only used by addGrid(), else your element should have the needed class */\r\n  class?: string;\r\n\r\n  /** disallows dragging of widgets (default?: false) */\r\n  disableDrag?: boolean;\r\n\r\n  /** disables the onColumnMode when the grid width is less than oneColumnSize (default?: false) */\r\n  disableOneColumnMode?: boolean;\r\n\r\n  /** disallows resizing of widgets (default?: false). */\r\n  disableResize?: boolean;\r\n\r\n  /** allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', appendTo?: 'body' }) */\r\n  draggable?: DDDragOpt;\r\n\r\n  /** @internal Use `GridStack.setupDragIn()` instead (global, not per grid). old way to allow external items to be draggable. (default: undefined) */\r\n  dragIn?: string;\r\n\r\n  /** @internal Use `GridStack.setupDragIn()` instead (global, not per grid).  old way to allow external items to be draggable. (default: undefined) */\r\n  dragInOptions?: DDDragInOpt;\r\n\r\n  /** let user drag nested grid items out of a parent or not (default true - not supported yet) */\r\n  //dragOut?: boolean;\r\n\r\n  /** the type of engine to create (so you can subclass) default to GridStackEngine */\r\n  engineClass?: typeof GridStackEngine;\r\n\r\n  /** enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) */\r\n  float?: boolean;\r\n\r\n  /** draggable handle selector (default?: '.grid-stack-item-content') */\r\n  handle?: string;\r\n\r\n  /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */\r\n  handleClass?: string;\r\n\r\n  /** id used to debug grid instance, not currently stored in DOM attributes */\r\n  id?: numberOrString;\r\n\r\n  /** additional widget class (default?: 'grid-stack-item') */\r\n  itemClass?: string;\r\n\r\n  /**\r\n   * gap between grid item and content (default?: 10). This will set all 4 sides and support the CSS formats below\r\n   *  an integer (px)\r\n   *  a string with possible units (ex: '2em', '20px', '2rem')\r\n   *  string with space separated values (ex: '5px 10px 0 20px' for all 4 sides, or '5em 10em' for top/bottom and left/right pairs like CSS).\r\n   * Note: all sides must have same units (last one wins, default px)\r\n   */\r\n  margin?: numberOrString;\r\n\r\n  /** OLD way to optionally set each side - use margin: '5px 10px 0 20px' instead. Used internally to store each side. */\r\n  marginTop?: numberOrString;\r\n  marginRight?: numberOrString;\r\n  marginBottom?: numberOrString;\r\n  marginLeft?: numberOrString;\r\n\r\n  /** (internal) unit for margin (default? 'px') set when `margin` is set as string with unit (ex: 2rem') */\r\n  marginUnit?: string;\r\n\r\n  /** maximum rows amount. Default? is 0 which means no maximum rows */\r\n  maxRow?: number;\r\n\r\n  /** minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute\r\n   * on the grid div in pixels, which will round to the closest row.\r\n   */\r\n  minRow?: number;\r\n\r\n  /** If you are using a nonce-based Content Security Policy, pass your nonce here and\r\n   * GridStack will add it to the <style> elements it creates. */\r\n  nonce?: string;\r\n\r\n  /** minimal width before grid will be shown in one column mode (default?: 768) */\r\n  oneColumnSize?: number;\r\n\r\n  /**\r\n   * set to true if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column\r\n   * layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: false)\r\n   */\r\n  oneColumnModeDomSort?: boolean;\r\n\r\n  /** class for placeholder (default?: 'grid-stack-placeholder') */\r\n  placeholderClass?: string;\r\n\r\n  /** placeholder default content (default?: '') */\r\n  placeholderText?: string;\r\n\r\n  /** allows to override UI resizable options. (default?: { handles: 'se' }) */\r\n  resizable?: DDResizeOpt;\r\n\r\n  /**\r\n   * if true widgets could be removed by dragging outside of the grid. It could also be a selector string (ex: \".trash\"),\r\n   * in this case widgets will be removed by dropping them there (default?: false)\r\n   * See example (http://gridstack.github.io/gridstack.js/demo/two.html)\r\n   */\r\n  removable?: boolean | string;\r\n\r\n  /** allows to override UI removable options. (default?: { accept: '.grid-stack-item' }) */\r\n  removableOptions?: DDRemoveOpt;\r\n\r\n  /** fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. (default `0` no constrain) */\r\n  row?: number;\r\n\r\n  /**\r\n   * if true turns grid to RTL. Possible values are true, false, 'auto' (default?: 'auto')\r\n   * See [example](http://gridstack.github.io/gridstack.js/demo/rtl.html)\r\n   */\r\n  rtl?: boolean | 'auto';\r\n\r\n  /**\r\n   * makes grid static (default?: false). If `true` widgets are not movable/resizable.\r\n   * You don't even need draggable/resizable. A CSS class\r\n   * 'grid-stack-static' is also added to the element.\r\n   */\r\n  staticGrid?: boolean;\r\n\r\n  /** if `true` will add style element to `<head>` otherwise will add it to element's parent node (default `false`). */\r\n  styleInHead?: boolean;\r\n\r\n  /** list of differences in options for automatically created sub-grids under us */\r\n  subGrid?: GridStackOptions;\r\n\r\n  /** enable/disable the creation of sub-grids on the fly by dragging items completely\r\n   * over others (nest) vs partially (push). Forces `DDDragOpt.pause=true` to accomplish that. */\r\n  subGridDynamic?: boolean;\r\n}\r\n\r\n/** options used during GridStackEngine.moveNode() */\r\nexport interface GridStackMoveOpts extends GridStackPosition {\r\n  /** node to skip collision */\r\n  skip?: GridStackNode;\r\n  /** do we pack (default true) */\r\n  pack?: boolean;\r\n  /** true if we are calling this recursively to prevent simple swap or coverage collision - default false*/\r\n  nested?: boolean;\r\n  /** vars to calculate other cells coordinates */\r\n  cellWidth?: number;\r\n  cellHeight?: number;\r\n  marginTop?: number;\r\n  marginBottom?: number;\r\n  marginLeft?: number;\r\n  marginRight?: number;\r\n  /** position in pixels of the currently dragged items (for overlap check) */\r\n  rect?: GridStackPosition;\r\n  /** true if we're live resizing */\r\n  resizing?: boolean;\r\n  /** best node (most coverage) we collied with */\r\n  collide?: GridStackNode;\r\n}\r\n\r\nexport interface GridStackPosition {\r\n  /** widget position x (default?: 0) */\r\n  x?: number;\r\n  /** widget position y (default?: 0) */\r\n  y?: number;\r\n  /** widget dimension width (default?: 1) */\r\n  w?: number;\r\n  /** widget dimension height (default?: 1) */\r\n  h?: number;\r\n}\r\n\r\n/**\r\n * GridStack Widget creation options\r\n */\r\nexport interface GridStackWidget extends GridStackPosition {\r\n  /** if true then x, y parameters will be ignored and widget will be places on the first available position (default?: false) */\r\n  autoPosition?: boolean;\r\n  /** minimum width allowed during resize/creation (default?: undefined = un-constrained) */\r\n  minW?: number;\r\n  /** maximum width allowed during resize/creation (default?: undefined = un-constrained) */\r\n  maxW?: number;\r\n  /** minimum height allowed during resize/creation (default?: undefined = un-constrained) */\r\n  minH?: number;\r\n  /** maximum height allowed during resize/creation (default?: undefined = un-constrained) */\r\n  maxH?: number;\r\n  /** prevent resizing (default?: undefined = un-constrained) */\r\n  noResize?: boolean;\r\n  /** prevents moving (default?: undefined = un-constrained) */\r\n  noMove?: boolean;\r\n  /** prevents being moved by others during their (default?: undefined = un-constrained) */\r\n  locked?: boolean;\r\n  /** value for `gs-id` stored on the widget (default?: undefined) */\r\n  id?: numberOrString;\r\n  /** html to append inside as content */\r\n  content?: string;\r\n  /** optional nested grid options and list of children, which then turns into actual instance at runtime */\r\n  subGrid?: GridStackOptions | GridStack;\r\n}\r\n\r\n/** Drag&Drop resize options */\r\nexport interface DDResizeOpt {\r\n  /** do resize handle hide by default until mouse over ? - default: true on desktop, false on mobile*/\r\n  autoHide?: boolean;\r\n  /**\r\n   * sides where you can resize from (ex: 'e, se, s, sw, w') - default 'se' (south-east)\r\n   * Note: it is not recommended to resize from the top sides as weird side effect may occur.\r\n  */\r\n  handles?: string;\r\n}\r\n\r\n/** Drag&Drop remove options */\r\nexport interface DDRemoveOpt {\r\n  /** class that can be removed (default?: '.' + opts.itemClass) */\r\n  accept?: string;\r\n}\r\n\r\n/** Drag&Drop dragging options */\r\nexport interface DDDragOpt {\r\n  /** class selector of items that can be dragged. default to '.grid-stack-item-content' */\r\n  handle?: string;\r\n  /** default to 'body' */\r\n  appendTo?: string;\r\n  /** if set (true | msec), dragging placement (collision) will only happen after a pause by the user. Note: this is Global */\r\n  pause?: boolean | number;\r\n  /** default to `true` */\r\n  scroll?: boolean;\r\n  /** parent constraining where item can be dragged out from (default: null = no constrain) */\r\n  // containment?: string;\r\n}\r\nexport interface DDDragInOpt extends DDDragOpt {\r\n  /** helper function when dropping (ex: 'clone' or your own method) */\r\n  helper?: string | ((event: Event) => HTMLElement);\r\n  /** used when dragging item from the outside, and canceling (ex: 'invalid' or your own method)*/\r\n  // revert?: string | ((event: Event) => HTMLElement);\r\n}\r\n\r\nexport interface Size {\r\n  width: number;\r\n  height: number;\r\n}\r\nexport interface Position {\r\n  top: number;\r\n  left: number;\r\n}\r\nexport interface Rect extends Size, Position {}\r\n\r\n/** data that is passed during drag and resizing callbacks */\r\nexport interface DDUIData {\r\n  position?: Position;\r\n  size?: Size;\r\n  draggable?: HTMLElement;\r\n  /* fields not used by GridStack but sent by jq ? leave in case we go back to them...\r\n  originalPosition? : Position;\r\n  offset?: Position;\r\n  originalSize?: Size;\r\n  element?: HTMLElement[];\r\n  helper?: HTMLElement[];\r\n  originalElement?: HTMLElement[];\r\n  */\r\n}\r\n\r\n/**\r\n * internal descriptions describing the items in the grid\r\n */\r\nexport interface GridStackNode extends GridStackWidget {\r\n  /** pointer back to HTML element */\r\n  el?: GridItemHTMLElement;\r\n  /** pointer back to Grid instance */\r\n  grid?: GridStack;\r\n  /** @internal internal id used to match when cloning engines or saving column layouts */\r\n  _id?: number;\r\n  /** @internal */\r\n  _dirty?: boolean;\r\n  /** @internal */\r\n  _updating?: boolean;\r\n  /** @internal true when over trash/another grid so we don't bother removing drag CSS style that would animate back to old position */\r\n  _isAboutToRemove?: boolean;\r\n  /** @internal true if item came from outside of the grid -> actual item need to be moved over */\r\n  _isExternal?: boolean;\r\n  /** @internal Mouse event that's causing moving|resizing */\r\n  _event?: MouseEvent;\r\n  /** @internal moving vs resizing */\r\n  _moving?: boolean;\r\n  /** @internal true if we jumped down past item below (one time jump so we don't have to totally pass it) */\r\n  _skipDown?: boolean;\r\n  /** @internal original values before a drag/size */\r\n  _orig?: GridStackPosition;\r\n  /** @internal position in pixels used during collision check  */\r\n  _rect?: GridStackPosition;\r\n  /** @internal top/left pixel location before a drag so we can detect direction of move from last position*/\r\n  _lastUiPosition?: Position;\r\n  /** @internal set on the item being dragged/resized remember the last positions we've tried (but failed) so we don't try again during drag/resize */\r\n  _lastTried?: GridStackPosition;\r\n  /** @internal position willItFit() will use to position the item */\r\n  _willFitPos?: GridStackPosition;\r\n  /** @internal last drag Y pixel position used to incrementally update V scroll bar */\r\n  _prevYPix?: number;\r\n  /** @internal true if we've remove the item from ourself (dragging out) but might revert it back (release on nothing -> goes back) */\r\n  _temporaryRemoved?: boolean;\r\n  /** @internal true if we should remove DOM element on _notify() rather than clearing _id (old way) */\r\n  _removeDOM?: boolean;\r\n  /** @internal */\r\n  _initDD?: boolean;\r\n}\r\n","/**\r\n * utils.ts 7.3.0\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridStackElement, GridStackNode, GridStackOptions, numberOrString, GridStackPosition, GridStackWidget } from './types';\r\n\r\nexport interface HeightData {\r\n  h: number;\r\n  unit: string;\r\n}\r\n\r\n/** checks for obsolete method names */\r\n// eslint-disable-next-line\r\nexport function obsolete(self, f, oldName: string, newName: string, rev: string): (...args: any[]) => any {\r\n  let wrapper = (...args) => {\r\n    console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' +\r\n    'with `' + newName + '`. It will be **removed** in a future release');\r\n    return f.apply(self, args);\r\n  }\r\n  wrapper.prototype = f.prototype;\r\n  return wrapper;\r\n}\r\n\r\n/** checks for obsolete grid options (can be used for any fields, but msg is about options) */\r\nexport function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: string, rev: string): void {\r\n  if (opts[oldName] !== undefined) {\r\n    opts[newName] = opts[oldName];\r\n    console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' +\r\n      newName + '`. It will be **removed** in a future release');\r\n  }\r\n}\r\n\r\n/** checks for obsolete grid options which are gone */\r\nexport function obsoleteOptsDel(opts: GridStackOptions, oldName: string, rev: string, info: string): void {\r\n  if (opts[oldName] !== undefined) {\r\n    console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info);\r\n  }\r\n}\r\n\r\n/** checks for obsolete Jquery element attributes */\r\nexport function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string): void {\r\n  let oldAttr = el.getAttribute(oldName);\r\n  if (oldAttr !== null) {\r\n    el.setAttribute(newName, oldAttr);\r\n    console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' +\r\n      newName + '`. It will be **removed** in a future release');\r\n  }\r\n}\r\n\r\n/**\r\n * Utility methods\r\n */\r\nexport class Utils {\r\n\r\n  /** convert a potential selector into actual list of html elements */\r\n  static getElements(els: GridStackElement): HTMLElement[] {\r\n    if (typeof els === 'string') {\r\n      let list = document.querySelectorAll(els);\r\n      if (!list.length && els[0] !== '.' && els[0] !== '#') {\r\n        list = document.querySelectorAll('.' + els);\r\n        if (!list.length) { list = document.querySelectorAll('#' + els) }\r\n      }\r\n      return Array.from(list) as HTMLElement[];\r\n    }\r\n    return [els];\r\n  }\r\n\r\n  /** convert a potential selector into actual single element */\r\n  static getElement(els: GridStackElement): HTMLElement {\r\n    if (typeof els === 'string') {\r\n      if (!els.length) return null;\r\n      if (els[0] === '#') {\r\n        return document.getElementById(els.substring(1));\r\n      }\r\n      if (els[0] === '.' || els[0] === '[') {\r\n        return document.querySelector(els);\r\n      }\r\n\r\n      // if we start with a digit, assume it's an id (error calling querySelector('#1')) as class are not valid CSS\r\n      if(!isNaN(+els[0])) { // start with digit\r\n        return document.getElementById(els);\r\n      }\r\n\r\n      // finally try string, then id then class\r\n      let el = document.querySelector(els);\r\n      if (!el) { el = document.getElementById(els) }\r\n      if (!el) { el = document.querySelector('.' + els) }\r\n      return el as HTMLElement;\r\n    }\r\n    return els;\r\n  }\r\n\r\n  /** returns true if a and b overlap */\r\n  static isIntercepted(a: GridStackPosition, b: GridStackPosition): boolean {\r\n    return !(a.y >= b.y + b.h || a.y + a.h <= b.y || a.x + a.w <= b.x || a.x >= b.x + b.w);\r\n  }\r\n\r\n  /** returns true if a and b touch edges or corners */\r\n  static isTouching(a: GridStackPosition, b: GridStackPosition): boolean {\r\n    return Utils.isIntercepted(a, {x: b.x-0.5, y: b.y-0.5, w: b.w+1, h: b.h+1})\r\n  }\r\n\r\n  /** returns the area a and b overlap */\r\n  static areaIntercept(a: GridStackPosition, b: GridStackPosition): number {\r\n    let x0 = (a.x > b.x) ? a.x : b.x;\r\n    let x1 = (a.x+a.w < b.x+b.w) ? a.x+a.w : b.x+b.w;\r\n    if (x1 <= x0) return 0; // no overlap\r\n    let y0 = (a.y > b.y) ? a.y : b.y;\r\n    let y1 = (a.y+a.h < b.y+b.h) ? a.y+a.h : b.y+b.h;\r\n    if (y1 <= y0) return 0; // no overlap\r\n    return (x1-x0) * (y1-y0);\r\n  }\r\n\r\n  /** returns the area */\r\n  static area(a: GridStackPosition): number {\r\n    return a.w * a.h;\r\n  }\r\n\r\n  /**\r\n   * Sorts array of nodes\r\n   * @param nodes array to sort\r\n   * @param dir 1 for asc, -1 for desc (optional)\r\n   * @param width width of the grid. If undefined the width will be calculated automatically (optional).\r\n   **/\r\n  static sort(nodes: GridStackNode[], dir?: -1 | 1, column?: number): GridStackNode[] {\r\n    column = column || nodes.reduce((col, n) => Math.max(n.x + n.w, col), 0) || 12;\r\n    if (dir === -1)\r\n      return nodes.sort((a, b) => (b.x + b.y * column)-(a.x + a.y * column));\r\n    else\r\n      return nodes.sort((b, a) => (b.x + b.y * column)-(a.x + a.y * column));\r\n  }\r\n\r\n  /**\r\n   * creates a style sheet with style id under given parent\r\n   * @param id will set the 'gs-style-id' attribute to that id\r\n   * @param parent to insert the stylesheet as first child,\r\n   * if none supplied it will be appended to the document head instead.\r\n   */\r\n  static createStylesheet(id: string, parent?: HTMLElement, options?: { nonce?: string }): CSSStyleSheet {\r\n    let style: HTMLStyleElement = document.createElement('style');\r\n    const nonce = options?.nonce\r\n    if (nonce) style.nonce = nonce\r\n    style.setAttribute('type', 'text/css');\r\n    style.setAttribute('gs-style-id', id);\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if ((style as any).styleSheet) { // TODO: only CSSImportRule have that and different beast ??\r\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n      (style as any).styleSheet.cssText = '';\r\n    } else {\r\n      style.appendChild(document.createTextNode('')); // WebKit hack\r\n    }\r\n    if (!parent) {\r\n      // default to head\r\n      parent = document.getElementsByTagName('head')[0];\r\n      parent.appendChild(style);\r\n    } else {\r\n      parent.insertBefore(style, parent.firstChild);\r\n    }\r\n    return style.sheet as CSSStyleSheet;\r\n  }\r\n\r\n  /** removed the given stylesheet id */\r\n  static removeStylesheet(id: string): void {\r\n    let el = document.querySelector('STYLE[gs-style-id=' + id + ']');\r\n    if (el && el.parentNode) el.remove();\r\n  }\r\n\r\n  /** inserts a CSS rule */\r\n  static addCSSRule(sheet: CSSStyleSheet, selector: string, rules: string): void {\r\n    if (typeof sheet.addRule === 'function') {\r\n      sheet.addRule(selector, rules);\r\n    } else if (typeof sheet.insertRule === 'function') {\r\n      sheet.insertRule(`${selector}{${rules}}`);\r\n    }\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  static toBool(v: unknown): boolean {\r\n    if (typeof v === 'boolean') {\r\n      return v;\r\n    }\r\n    if (typeof v === 'string') {\r\n      v = v.toLowerCase();\r\n      return !(v === '' || v === 'no' || v === 'false' || v === '0');\r\n    }\r\n    return Boolean(v);\r\n  }\r\n\r\n  static toNumber(value: null | string): number {\r\n    return (value === null || value.length === 0) ? undefined : Number(value);\r\n  }\r\n\r\n  static parseHeight(val: numberOrString): HeightData {\r\n    let h: number;\r\n    let unit = 'px';\r\n    if (typeof val === 'string') {\r\n      let match = val.match(/^(-[0-9]+\\.[0-9]+|[0-9]*\\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%)?$/);\r\n      if (!match) {\r\n        throw new Error('Invalid height');\r\n      }\r\n      unit = match[2] || 'px';\r\n      h = parseFloat(match[1]);\r\n    } else {\r\n      h = val;\r\n    }\r\n    return { h, unit };\r\n  }\r\n\r\n  /** copies unset fields in target to use the given default sources values */\r\n  // eslint-disable-next-line\r\n  static defaults(target, ...sources): {} {\r\n\r\n    sources.forEach(source => {\r\n      for (const key in source) {\r\n        if (!source.hasOwnProperty(key)) return;\r\n        if (target[key] === null || target[key] === undefined) {\r\n          target[key] = source[key];\r\n        } else if (typeof source[key] === 'object' && typeof target[key] === 'object') {\r\n          // property is an object, recursively add it's field over... #1373\r\n          this.defaults(target[key], source[key]);\r\n        }\r\n      }\r\n    });\r\n\r\n    return target;\r\n  }\r\n\r\n  /** given 2 objects return true if they have the same values. Checks for Object {} having same fields and values (just 1 level down) */\r\n  static same(a: unknown, b: unknown): boolean {\r\n    if (typeof a !== 'object')  return a == b;\r\n    if (typeof a !== typeof b) return false;\r\n    // else we have object, check just 1 level deep for being same things...\r\n    if (Object.keys(a).length !== Object.keys(b).length) return false;\r\n    for (const key in a) {\r\n      if (a[key] !== b[key]) return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /** copies over b size & position (GridStackPosition), and optionally min/max as well */\r\n  static copyPos(a: GridStackWidget, b: GridStackWidget, doMinMax = false): GridStackWidget {\r\n    a.x = b.x;\r\n    a.y = b.y;\r\n    a.w = b.w;\r\n    a.h = b.h;\r\n    if (doMinMax) {\r\n      if (b.minW) a.minW = b.minW;\r\n      if (b.minH) a.minH = b.minH;\r\n      if (b.maxW) a.maxW = b.maxW;\r\n      if (b.maxH) a.maxH = b.maxH;\r\n    }\r\n    return a;\r\n  }\r\n\r\n  /** true if a and b has same size & position */\r\n  static samePos(a: GridStackPosition, b: GridStackPosition): boolean {\r\n    return a && b && a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h;\r\n  }\r\n\r\n  /** removes field from the first object if same as the second objects (like diffing) and internal '_' for saving */\r\n  static removeInternalAndSame(a: unknown, b: unknown):void {\r\n    if (typeof a !== 'object' || typeof b !== 'object') return;\r\n    for (let key in a) {\r\n      let val = a[key];\r\n      if (key[0] === '_' || val === b[key]) {\r\n        delete a[key]\r\n      } else if (val && typeof val === 'object' && b[key] !== undefined) {\r\n        for (let i in val) {\r\n          if (val[i] === b[key][i] || i[0] === '_') { delete val[i] }\r\n        }\r\n        if (!Object.keys(val).length) { delete a[key] }\r\n      }\r\n    }\r\n  }\r\n\r\n  /** removes internal fields '_' and default values for saving */\r\n  static removeInternalForSave(n: GridStackNode, removeEl = true): void {\r\n    for (let key in n) { if (key[0] === '_' || n[key] === null || n[key] === undefined ) delete n[key]; }\r\n    delete n.grid;\r\n    if (removeEl) delete n.el;\r\n    // delete default values (will be re-created on read)\r\n    if (!n.autoPosition) delete n.autoPosition;\r\n    if (!n.noResize) delete n.noResize;\r\n    if (!n.noMove) delete n.noMove;\r\n    if (!n.locked) delete n.locked;\r\n    if (n.w === 1 || n.w === n.minW) delete n.w;\r\n    if (n.h === 1 || n.h === n.minH) delete n.h;\r\n  }\r\n\r\n  /** return the closest parent (or itself) matching the given class */\r\n  static closestUpByClass(el: HTMLElement, name: string): HTMLElement {\r\n    while (el) {\r\n      if (el.classList.contains(name)) return el;\r\n      el = el.parentElement\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** delay calling the given function for given delay, preventing new calls from happening while waiting */\r\n  static throttle(func: () => void, delay: number): () => void {\r\n    let isWaiting = false;\r\n    return (...args) => {\r\n      if (!isWaiting) {\r\n        isWaiting = true;\r\n        setTimeout(() => { func(...args); isWaiting = false; }, delay);\r\n      }\r\n    }\r\n  }\r\n\r\n  static removePositioningStyles(el: HTMLElement): void {\r\n    let style = el.style;\r\n    if (style.position) {\r\n      style.removeProperty('position');\r\n    }\r\n    if (style.left) {\r\n      style.removeProperty('left');\r\n    }\r\n    if (style.top) {\r\n      style.removeProperty('top');\r\n    }\r\n    if (style.width) {\r\n      style.removeProperty('width');\r\n    }\r\n    if (style.height) {\r\n      style.removeProperty('height');\r\n    }\r\n  }\r\n\r\n  /** @internal returns the passed element if scrollable, else the closest parent that will, up to the entire document scrolling element */\r\n  static getScrollElement(el?: HTMLElement): HTMLElement {\r\n    if (!el) return document.scrollingElement as HTMLElement || document.documentElement; // IE support\r\n    const style = getComputedStyle(el);\r\n    const overflowRegex = /(auto|scroll)/;\r\n\r\n    if (overflowRegex.test(style.overflow + style.overflowY)) {\r\n      return el;\r\n    } else {\r\n      return this.getScrollElement(el.parentElement);\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  static updateScrollPosition(el: HTMLElement, position: {top: number}, distance: number): void {\r\n    // is widget in view?\r\n    let rect = el.getBoundingClientRect();\r\n    let innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight);\r\n    if (rect.top < 0 ||\r\n      rect.bottom > innerHeightOrClientHeight\r\n    ) {\r\n      // set scrollTop of first parent that scrolls\r\n      // if parent is larger than el, set as low as possible\r\n      // to get entire widget on screen\r\n      let offsetDiffDown = rect.bottom - innerHeightOrClientHeight;\r\n      let offsetDiffUp = rect.top;\r\n      let scrollEl = this.getScrollElement(el);\r\n      if (scrollEl !== null) {\r\n        let prevScroll = scrollEl.scrollTop;\r\n        if (rect.top < 0 && distance < 0) {\r\n          // moving up\r\n          if (el.offsetHeight > innerHeightOrClientHeight) {\r\n            scrollEl.scrollTop += distance;\r\n          } else {\r\n            scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp;\r\n          }\r\n        } else if (distance > 0) {\r\n          // moving down\r\n          if (el.offsetHeight > innerHeightOrClientHeight) {\r\n            scrollEl.scrollTop += distance;\r\n          } else {\r\n            scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown;\r\n          }\r\n        }\r\n        // move widget y by amount scrolled\r\n        position.top += scrollEl.scrollTop - prevScroll;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @internal Function used to scroll the page.\r\n   *\r\n   * @param event `MouseEvent` that triggers the resize\r\n   * @param el `HTMLElement` that's being resized\r\n   * @param distance Distance from the V edges to start scrolling\r\n   */\r\n  static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void {\r\n    const scrollEl = this.getScrollElement(el);\r\n    const height = scrollEl.clientHeight;\r\n    // #1727 event.clientY is relative to viewport, so must compare this against position of scrollEl getBoundingClientRect().top\r\n    // #1745 Special situation if scrollEl is document 'html': here browser spec states that\r\n    // clientHeight is height of viewport, but getBoundingClientRect() is rectangle of html element;\r\n    // this discrepancy arises because in reality scrollbar is attached to viewport, not html element itself.\r\n    const offsetTop = (scrollEl === this.getScrollElement()) ? 0 : scrollEl.getBoundingClientRect().top;\r\n    const pointerPosY = event.clientY - offsetTop;\r\n    const top = pointerPosY < distance;\r\n    const bottom = pointerPosY > height - distance;\r\n\r\n    if (top) {\r\n      // This also can be done with a timeout to keep scrolling while the mouse is\r\n      // in the scrolling zone. (will have smoother behavior)\r\n      scrollEl.scrollBy({ behavior: 'smooth', top: pointerPosY - distance});\r\n    } else if (bottom) {\r\n      scrollEl.scrollBy({ behavior: 'smooth', top: distance - (height - pointerPosY)});\r\n    }\r\n  }\r\n\r\n  /** single level clone, returning a new object with same top fields. This will share sub objects and arrays */\r\n  static clone<T>(obj: T): T {\r\n    if (obj === null || obj === undefined || typeof(obj) !== 'object') {\r\n      return obj;\r\n    }\r\n    // return Object.assign({}, obj);\r\n    if (obj instanceof Array) {\r\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n      return [...obj] as any;\r\n    }\r\n    return {...obj};\r\n  }\r\n\r\n  /**\r\n   * Recursive clone version that returns a full copy, checking for nested objects and arrays ONLY.\r\n   * Note: this will use as-is any key starting with double __ (and not copy inside) some lib have circular dependencies.\r\n   */\r\n  static cloneDeep<T>(obj: T): T {\r\n    // list of fields we will skip during cloneDeep (nested objects, other internal)\r\n    const skipFields = ['parentGrid', 'el', 'grid', 'subGrid', 'engine'];\r\n    // return JSON.parse(JSON.stringify(obj)); // doesn't work with date format ?\r\n    const ret = Utils.clone(obj);\r\n    for (const key in ret) {\r\n      // NOTE: we don't support function/circular dependencies so skip those properties for now...\r\n      if (ret.hasOwnProperty(key) && typeof(ret[key]) === 'object' && key.substring(0, 2) !== '__' && !skipFields.find(k => k === key)) {\r\n        ret[key] = Utils.cloneDeep(obj[key]);\r\n      }\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  /** deep clone the given HTML node, removing teh unique id field */\r\n  public static cloneNode(el: HTMLElement): HTMLElement {\r\n    const node = el.cloneNode(true) as HTMLElement;\r\n    node.removeAttribute('id');\r\n    return node;\r\n  }\r\n\r\n  public static appendTo(el: HTMLElement, parent: string | HTMLElement | Node): void {\r\n    let parentNode: HTMLElement;\r\n    if (typeof parent === 'string') {\r\n      parentNode = document.querySelector(parent as string);\r\n    } else {\r\n      parentNode = parent as HTMLElement;\r\n    }\r\n    if (parentNode) {\r\n      parentNode.appendChild(el);\r\n    }\r\n  }\r\n\r\n  // public static setPositionRelative(el: HTMLElement): void {\r\n  //   if (!(/^(?:r|a|f)/).test(window.getComputedStyle(el).position)) {\r\n  //     el.style.position = \"relative\";\r\n  //   }\r\n  // }\r\n\r\n  public static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }): void {\r\n    if (styles instanceof Object) {\r\n      for (const s in styles) {\r\n        if (styles.hasOwnProperty(s)) {\r\n          if (Array.isArray(styles[s])) {\r\n            // support fallback value\r\n            (styles[s] as string[]).forEach(val => {\r\n              el.style[s] = val;\r\n            });\r\n          } else {\r\n            el.style[s] = styles[s];\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public static initEvent<T>(e: DragEvent | MouseEvent, info: { type: string; target?: EventTarget }): T {\r\n    const evt = { type: info.type };\r\n    const obj = {\r\n      button: 0,\r\n      which: 0,\r\n      buttons: 1,\r\n      bubbles: true,\r\n      cancelable: true,\r\n      target: info.target ? info.target : e.target\r\n    };\r\n    // don't check for `instanceof DragEvent` as Safari use MouseEvent #1540\r\n    if ((e as DragEvent).dataTransfer) {\r\n      evt['dataTransfer'] = (e as DragEvent).dataTransfer; // workaround 'readonly' field.\r\n    }\r\n    ['altKey','ctrlKey','metaKey','shiftKey'].forEach(p => evt[p] = e[p]); // keys\r\n    ['pageX','pageY','clientX','clientY','screenX','screenY'].forEach(p => evt[p] = e[p]); // point info\r\n    return {...evt, ...obj} as unknown as T;\r\n  }\r\n\r\n  /** copies the MouseEvent properties and sends it as another event to the given target */\r\n  public static simulateMouseEvent(e: MouseEvent, simulatedType: string, target?: EventTarget): void {\r\n    const simulatedEvent = document.createEvent('MouseEvents');\r\n    simulatedEvent.initMouseEvent(\r\n      simulatedType, // type\r\n      true,         // bubbles\r\n      true,         // cancelable\r\n      window,       // view\r\n      1,            // detail\r\n      e.screenX,    // screenX\r\n      e.screenY,    // screenY\r\n      e.clientX,    // clientX\r\n      e.clientY,    // clientY\r\n      e.ctrlKey,    // ctrlKey\r\n      e.altKey,     // altKey\r\n      e.shiftKey,   // shiftKey\r\n      e.metaKey,    // metaKey\r\n      0,            // button\r\n      e.target      // relatedTarget\r\n    );\r\n    (target || e.target).dispatchEvent(simulatedEvent);\r\n  }\r\n\r\n  /** returns true if event is inside the given element rectangle */\r\n  // Note: Safari Mac has null event.relatedTarget which causes #1684 so check if DragEvent is inside the coordinates instead\r\n  //    this.el.contains(event.relatedTarget as HTMLElement)\r\n  // public static inside(e: MouseEvent, el: HTMLElement): boolean {\r\n  //   // srcElement, toElement, target: all set to placeholder when leaving simple grid, so we can't use that (Chrome)\r\n  //   let target: HTMLElement = e.relatedTarget || (e as any).fromElement;\r\n  //   if (!target) {\r\n  //     const { bottom, left, right, top } = el.getBoundingClientRect();\r\n  //     return (e.x < right && e.x > left && e.y < bottom && e.y > top);\r\n  //   }\r\n  //   return el.contains(target);\r\n  // }\r\n}\r\n","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\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  return target;\n}\n\nexport { _objectWithoutPropertiesLoose as _ };\n","/**\n * Applies mask on element.\n * @constructor\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\n * @param {Object} opts - Custom mask options\n * @return {InputMask}\n */\nfunction IMask(el) {\n  let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  // currently available only for input-like elements\n  return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import IMask from './holder.js';\n\n/**\n  Provides details of changing model value\n  @param {Object} [details]\n  @param {string} [details.inserted] - Inserted symbols\n  @param {boolean} [details.skip] - Can skip chars\n  @param {number} [details.removeCount] - Removed symbols count\n  @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\n*/\nclass ChangeDetails {\n  /** Inserted symbols */\n\n  /** Can skip chars */\n\n  /** Additional offset if any changes occurred before tail */\n\n  /** Raw inserted is used by dynamic mask */\n\n  constructor(details) {\n    Object.assign(this, {\n      inserted: '',\n      rawInserted: '',\n      skip: false,\n      tailShift: 0\n    }, details);\n  }\n\n  /**\n    Aggregate changes\n    @returns {ChangeDetails} `this`\n  */\n  aggregate(details) {\n    this.rawInserted += details.rawInserted;\n    this.skip = this.skip || details.skip;\n    this.inserted += details.inserted;\n    this.tailShift += details.tailShift;\n    return this;\n  }\n\n  /** Total offset considering all changes */\n  get offset() {\n    return this.tailShift + this.inserted.length;\n  }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","import ChangeDetails from './change-details.js';\nimport './holder.js';\n\n/** Checks if value is string */\nfunction isString(str) {\n  return typeof str === 'string' || str instanceof String;\n}\n\n/**\n  Direction\n  @prop {string} NONE\n  @prop {string} LEFT\n  @prop {string} FORCE_LEFT\n  @prop {string} RIGHT\n  @prop {string} FORCE_RIGHT\n*/\nconst DIRECTION = {\n  NONE: 'NONE',\n  LEFT: 'LEFT',\n  FORCE_LEFT: 'FORCE_LEFT',\n  RIGHT: 'RIGHT',\n  FORCE_RIGHT: 'FORCE_RIGHT'\n};\n/**\n  Direction\n  @enum {string}\n*/\n\n/** Returns next char index in direction */\nfunction indexInDirection(pos, direction) {\n  if (direction === DIRECTION.LEFT) --pos;\n  return pos;\n}\n\n/** Returns next char position in direction */\nfunction posInDirection(pos, direction) {\n  switch (direction) {\n    case DIRECTION.LEFT:\n    case DIRECTION.FORCE_LEFT:\n      return --pos;\n    case DIRECTION.RIGHT:\n    case DIRECTION.FORCE_RIGHT:\n      return ++pos;\n    default:\n      return pos;\n  }\n}\n\n/** */\nfunction forceDirection(direction) {\n  switch (direction) {\n    case DIRECTION.LEFT:\n      return DIRECTION.FORCE_LEFT;\n    case DIRECTION.RIGHT:\n      return DIRECTION.FORCE_RIGHT;\n    default:\n      return direction;\n  }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n  return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n}\nfunction normalizePrepare(prep) {\n  return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n  if (a === b) return true;\n  var arrA = Array.isArray(a),\n    arrB = Array.isArray(b),\n    i;\n  if (arrA && arrB) {\n    if (a.length != b.length) return false;\n    for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n    return true;\n  }\n  if (arrA != arrB) return false;\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    var dateA = a instanceof Date,\n      dateB = b instanceof Date;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n    if (dateA != dateB) return false;\n    var regexpA = a instanceof RegExp,\n      regexpB = b instanceof RegExp;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n    if (regexpA != regexpB) return false;\n    var keys = Object.keys(a);\n    // if (keys.length !== Object.keys(b).length) return false;\n\n    for (i = 0; i < keys.length; i++)\n    // $FlowFixMe ... ???\n    if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n    return true;\n  } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n    return a.toString() === b.toString();\n  }\n  return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, indexInDirection, isString, normalizePrepare, objectIncludes, posInDirection };\n","import { DIRECTION } from './utils.js';\nimport './change-details.js';\nimport './holder.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n  /** Current input value */\n\n  /** Current cursor position */\n\n  /** Old input value */\n\n  /** Old selection */\n\n  constructor(value, cursorPos, oldValue, oldSelection) {\n    this.value = value;\n    this.cursorPos = cursorPos;\n    this.oldValue = oldValue;\n    this.oldSelection = oldSelection;\n\n    // double check if left part was changed (autofilling, other non-standard input triggers)\n    while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n      --this.oldSelection.start;\n    }\n  }\n\n  /**\n    Start changing position\n    @readonly\n  */\n  get startChangePos() {\n    return Math.min(this.cursorPos, this.oldSelection.start);\n  }\n\n  /**\n    Inserted symbols count\n    @readonly\n  */\n  get insertedCount() {\n    return this.cursorPos - this.startChangePos;\n  }\n\n  /**\n    Inserted symbols\n    @readonly\n  */\n  get inserted() {\n    return this.value.substr(this.startChangePos, this.insertedCount);\n  }\n\n  /**\n    Removed symbols count\n    @readonly\n  */\n  get removedCount() {\n    // Math.max for opposite operation\n    return Math.max(this.oldSelection.end - this.startChangePos ||\n    // for Delete\n    this.oldValue.length - this.value.length, 0);\n  }\n\n  /**\n    Removed symbols\n    @readonly\n  */\n  get removed() {\n    return this.oldValue.substr(this.startChangePos, this.removedCount);\n  }\n\n  /**\n    Unchanged head symbols\n    @readonly\n  */\n  get head() {\n    return this.value.substring(0, this.startChangePos);\n  }\n\n  /**\n    Unchanged tail symbols\n    @readonly\n  */\n  get tail() {\n    return this.value.substring(this.startChangePos + this.insertedCount);\n  }\n\n  /**\n    Remove direction\n    @readonly\n  */\n  get removeDirection() {\n    if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n    // align right if delete at right\n    return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n    // if not range removed (event with backspace)\n    this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n  }\n}\n\nexport { ActionDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n  /** Tail value as string */\n\n  /** Tail start position */\n\n  /** Start position */\n\n  constructor() {\n    let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    let stop = arguments.length > 2 ? arguments[2] : undefined;\n    this.value = value;\n    this.from = from;\n    this.stop = stop;\n  }\n  toString() {\n    return this.value;\n  }\n  extend(tail) {\n    this.value += String(tail);\n  }\n  appendTo(masked) {\n    return masked.append(this.toString(), {\n      tail: true\n    }).aggregate(masked._appendPlaceholder());\n  }\n  get state() {\n    return {\n      value: this.value,\n      from: this.from,\n      stop: this.stop\n    };\n  }\n  set state(state) {\n    Object.assign(this, state);\n  }\n  unshift(beforePos) {\n    if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n    const shiftChar = this.value[0];\n    this.value = this.value.slice(1);\n    return shiftChar;\n  }\n  shift() {\n    if (!this.value.length) return '';\n    const shiftChar = this.value[this.value.length - 1];\n    this.value = this.value.slice(0, -1);\n    return shiftChar;\n  }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, normalizePrepare, DIRECTION, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Supported mask type */\n\n/** Append flags */\n\n/** Extract flags */\n\n/** Provides common masking stuff */\nclass Masked {\n  // $Shape<MaskedOptions>; TODO after fix https://github.com/facebook/flow/issues/4773\n\n  /** @type {Mask} */\n\n  /** */ // $FlowFixMe no ideas\n  /** Transforms value before mask processing */\n  /** Validates if value is acceptable */\n  /** Does additional processing in the end of editing */\n  /** Format typed value to string */\n  /** Parse strgin to get typed value */\n  /** Enable characters overwriting */\n  /** */\n  /** */\n  /** */\n  constructor(opts) {\n    this._value = '';\n    this._update(Object.assign({}, Masked.DEFAULTS, opts));\n    this.isInitialized = true;\n  }\n\n  /** Sets and applies new options */\n  updateOptions(opts) {\n    if (!Object.keys(opts).length) return;\n    // $FlowFixMe\n    this.withValueRefresh(this._update.bind(this, opts));\n  }\n\n  /**\n    Sets new options\n    @protected\n  */\n  _update(opts) {\n    Object.assign(this, opts);\n  }\n\n  /** Mask state */\n  get state() {\n    return {\n      _value: this.value\n    };\n  }\n  set state(state) {\n    this._value = state._value;\n  }\n\n  /** Resets value */\n  reset() {\n    this._value = '';\n  }\n\n  /** */\n  get value() {\n    return this._value;\n  }\n  set value(value) {\n    this.resolve(value);\n  }\n\n  /** Resolve new value */\n  resolve(value) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      input: true\n    };\n    this.reset();\n    this.append(value, flags, '');\n    this.doCommit();\n    return this.value;\n  }\n\n  /** */\n  get unmaskedValue() {\n    return this.value;\n  }\n  set unmaskedValue(value) {\n    this.reset();\n    this.append(value, {}, '');\n    this.doCommit();\n  }\n\n  /** */\n  get typedValue() {\n    return this.doParse(this.value);\n  }\n  set typedValue(value) {\n    this.value = this.doFormat(value);\n  }\n\n  /** Value that includes raw user input */\n  get rawInputValue() {\n    return this.extractInput(0, this.value.length, {\n      raw: true\n    });\n  }\n  set rawInputValue(value) {\n    this.reset();\n    this.append(value, {\n      raw: true\n    }, '');\n    this.doCommit();\n  }\n  get displayValue() {\n    return this.value;\n  }\n\n  /** */\n  get isComplete() {\n    return true;\n  }\n\n  /** */\n  get isFilled() {\n    return this.isComplete;\n  }\n\n  /** Finds nearest input position in direction */\n  nearestInputPos(cursorPos, direction) {\n    return cursorPos;\n  }\n  totalInputPositions() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    return Math.min(this.value.length, toPos - fromPos);\n  }\n\n  /** Extracts value in range considering flags */\n  extractInput() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    return this.value.slice(fromPos, toPos);\n  }\n\n  /** Extracts tail in range */\n  extractTail() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n  }\n\n  /** Appends tail */\n  // $FlowFixMe no ideas\n  appendTail(tail) {\n    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n    return tail.appendTo(this);\n  }\n\n  /** Appends char */\n  _appendCharRaw(ch) {\n    if (!ch) return new ChangeDetails();\n    this._value += ch;\n    return new ChangeDetails({\n      inserted: ch,\n      rawInserted: ch\n    });\n  }\n\n  /** Appends char */\n  _appendChar(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let checkTail = arguments.length > 2 ? arguments[2] : undefined;\n    const consistentState = this.state;\n    let details;\n    [ch, details] = normalizePrepare(this.doPrepare(ch, flags));\n    details = details.aggregate(this._appendCharRaw(ch, flags));\n    if (details.inserted) {\n      let consistentTail;\n      let appended = this.doValidate(flags) !== false;\n      if (appended && checkTail != null) {\n        // validation ok, check tail\n        const beforeTailState = this.state;\n        if (this.overwrite === true) {\n          consistentTail = checkTail.state;\n          checkTail.unshift(this.value.length - details.tailShift);\n        }\n        let tailDetails = this.appendTail(checkTail);\n        appended = tailDetails.rawInserted === checkTail.toString();\n\n        // not ok, try shift\n        if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n          this.state = beforeTailState;\n          consistentTail = checkTail.state;\n          checkTail.shift();\n          tailDetails = this.appendTail(checkTail);\n          appended = tailDetails.rawInserted === checkTail.toString();\n        }\n\n        // if ok, rollback state after tail\n        if (appended && tailDetails.inserted) this.state = beforeTailState;\n      }\n\n      // revert all if something went wrong\n      if (!appended) {\n        details = new ChangeDetails();\n        this.state = consistentState;\n        if (checkTail && consistentTail) checkTail.state = consistentTail;\n      }\n    }\n    return details;\n  }\n\n  /** Appends optional placeholder at end */\n  _appendPlaceholder() {\n    return new ChangeDetails();\n  }\n\n  /** Appends optional eager placeholder at end */\n  _appendEager() {\n    return new ChangeDetails();\n  }\n\n  /** Appends symbols considering flags */\n  // $FlowFixMe no ideas\n  append(str, flags, tail) {\n    if (!isString(str)) throw new Error('value should be string');\n    const details = new ChangeDetails();\n    const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n    if (flags !== null && flags !== void 0 && flags.tail) flags._beforeTailState = this.state;\n    for (let ci = 0; ci < str.length; ++ci) {\n      const d = this._appendChar(str[ci], flags, checkTail);\n      if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n      details.aggregate(d);\n    }\n    if ((this.eager === true || this.eager === 'append') && flags !== null && flags !== void 0 && flags.input && str) {\n      details.aggregate(this._appendEager());\n    }\n\n    // append tail but aggregate only tailShift\n    if (checkTail != null) {\n      details.tailShift += this.appendTail(checkTail).tailShift;\n      // TODO it's a good idea to clear state after appending ends\n      // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n      // this._resetBeforeTailState();\n    }\n\n    return details;\n  }\n\n  /** */\n  remove() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    this._value = this.value.slice(0, fromPos) + this.value.slice(toPos);\n    return new ChangeDetails();\n  }\n\n  /** Calls function and reapplies current value */\n  withValueRefresh(fn) {\n    if (this._refreshing || !this.isInitialized) return fn();\n    this._refreshing = true;\n    const rawInput = this.rawInputValue;\n    const value = this.value;\n    const ret = fn();\n    this.rawInputValue = rawInput;\n    // append lost trailing chars at end\n    if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n      this.append(value.slice(this.value.length), {}, '');\n    }\n    delete this._refreshing;\n    return ret;\n  }\n\n  /** */\n  runIsolated(fn) {\n    if (this._isolated || !this.isInitialized) return fn(this);\n    this._isolated = true;\n    const state = this.state;\n    const ret = fn(this);\n    this.state = state;\n    delete this._isolated;\n    return ret;\n  }\n\n  /** */\n  doSkipInvalid(ch) {\n    return this.skipInvalid;\n  }\n\n  /**\n    Prepares string before mask processing\n    @protected\n  */\n  doPrepare(str) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return this.prepare ? this.prepare(str, this, flags) : str;\n  }\n\n  /**\n    Validates if value is acceptable\n    @protected\n  */\n  doValidate(flags) {\n    return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n  }\n\n  /**\n    Does additional processing in the end of editing\n    @protected\n  */\n  doCommit() {\n    if (this.commit) this.commit(this.value, this);\n  }\n\n  /** */\n  doFormat(value) {\n    return this.format ? this.format(value, this) : value;\n  }\n\n  /** */\n  doParse(str) {\n    return this.parse ? this.parse(str, this) : str;\n  }\n\n  /** */\n  splice(start, deleteCount, inserted, removeDirection) {\n    let flags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      input: true\n    };\n    const tailPos = start + deleteCount;\n    const tail = this.extractTail(tailPos);\n    const eagerRemove = this.eager === true || this.eager === 'remove';\n    let oldRawValue;\n    if (eagerRemove) {\n      removeDirection = forceDirection(removeDirection);\n      oldRawValue = this.extractInput(0, tailPos, {\n        raw: true\n      });\n    }\n    let startChangePos = start;\n    const details = new ChangeDetails();\n\n    // if it is just deletion without insertion\n    if (removeDirection !== DIRECTION.NONE) {\n      startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n      // adjust tailShift if start was aligned\n      details.tailShift = startChangePos - start;\n    }\n    details.aggregate(this.remove(startChangePos));\n    if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n      if (removeDirection === DIRECTION.FORCE_LEFT) {\n        let valLength;\n        while (oldRawValue === this.rawInputValue && (valLength = this.value.length)) {\n          details.aggregate(new ChangeDetails({\n            tailShift: -1\n          })).aggregate(this.remove(valLength - 1));\n        }\n      } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n        tail.unshift();\n      }\n    }\n    return details.aggregate(this.append(inserted, flags, tail));\n  }\n  maskEquals(mask) {\n    return this.mask === mask;\n  }\n  typedValueEquals(value) {\n    const tval = this.typedValue;\n    return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || this.doFormat(value) === this.doFormat(this.typedValue);\n  }\n}\nMasked.DEFAULTS = {\n  format: String,\n  parse: v => v,\n  skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import { isString } from '../core/utils.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) {\n  if (mask == null) {\n    throw new Error('mask property should be defined');\n  }\n\n  // $FlowFixMe\n  if (mask instanceof RegExp) return IMask.MaskedRegExp;\n  // $FlowFixMe\n  if (isString(mask)) return IMask.MaskedPattern;\n  // $FlowFixMe\n  if (mask instanceof Date || mask === Date) return IMask.MaskedDate;\n  // $FlowFixMe\n  if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber;\n  // $FlowFixMe\n  if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n  // $FlowFixMe\n  if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n  // $FlowFixMe\n  if (mask instanceof IMask.Masked) return mask.constructor;\n  // $FlowFixMe\n  if (mask instanceof Function) return IMask.MaskedFunction;\n  console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n  // $FlowFixMe\n  return IMask.Masked;\n}\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n  // $FlowFixMe\n  if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n  opts = Object.assign({}, opts);\n  const mask = opts.mask;\n\n  // $FlowFixMe\n  if (IMask.Masked && mask instanceof IMask.Masked) return mask;\n  const MaskedClass = maskedClass(mask);\n  if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\n  return new MaskedClass(opts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass };\n","import { _ as _objectWithoutPropertiesLoose } from '../../_rollupPluginBabelHelpers-6b3bd404.js';\nimport createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nconst _excluded = [\"parent\", \"isOptional\", \"placeholderChar\", \"displayChar\", \"lazy\", \"eager\"];\n\n/** */\n\nconst DEFAULT_INPUT_DEFINITIONS = {\n  '0': /\\d/,\n  'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n  // http://stackoverflow.com/a/22075070\n  '*': /./\n};\n\n/** */\nclass PatternInputDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    const {\n        parent,\n        isOptional,\n        placeholderChar,\n        displayChar,\n        lazy,\n        eager\n      } = opts,\n      maskOpts = _objectWithoutPropertiesLoose(opts, _excluded);\n    this.masked = createMask(maskOpts);\n    Object.assign(this, {\n      parent,\n      isOptional,\n      placeholderChar,\n      displayChar,\n      lazy,\n      eager\n    });\n  }\n  reset() {\n    this.isFilled = false;\n    this.masked.reset();\n  }\n  remove() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    if (fromPos === 0 && toPos >= 1) {\n      this.isFilled = false;\n      return this.masked.remove(fromPos, toPos);\n    }\n    return new ChangeDetails();\n  }\n  get value() {\n    return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n  }\n  get unmaskedValue() {\n    return this.masked.unmaskedValue;\n  }\n  get displayValue() {\n    return this.masked.value && this.displayChar || this.value;\n  }\n  get isComplete() {\n    return Boolean(this.masked.value) || this.isOptional;\n  }\n  _appendChar(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.isFilled) return new ChangeDetails();\n    const state = this.masked.state;\n    // simulate input\n    const details = this.masked._appendChar(ch, flags);\n    if (details.inserted && this.doValidate(flags) === false) {\n      details.inserted = details.rawInserted = '';\n      this.masked.state = state;\n    }\n    if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n      details.inserted = this.placeholderChar;\n    }\n    details.skip = !details.inserted && !this.isOptional;\n    this.isFilled = Boolean(details.inserted);\n    return details;\n  }\n  append() {\n    // TODO probably should be done via _appendChar\n    return this.masked.append(...arguments);\n  }\n  _appendPlaceholder() {\n    const details = new ChangeDetails();\n    if (this.isFilled || this.isOptional) return details;\n    this.isFilled = true;\n    details.inserted = this.placeholderChar;\n    return details;\n  }\n  _appendEager() {\n    return new ChangeDetails();\n  }\n  extractTail() {\n    return this.masked.extractTail(...arguments);\n  }\n  appendTail() {\n    return this.masked.appendTail(...arguments);\n  }\n  extractInput() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    let flags = arguments.length > 2 ? arguments[2] : undefined;\n    return this.masked.extractInput(fromPos, toPos, flags);\n  }\n  nearestInputPos(cursorPos) {\n    let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n    const minPos = 0;\n    const maxPos = this.value.length;\n    const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return this.isComplete ? boundPos : minPos;\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n        return this.isComplete ? boundPos : maxPos;\n      case DIRECTION.NONE:\n      default:\n        return boundPos;\n    }\n  }\n  totalInputPositions() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    return this.value.slice(fromPos, toPos).length;\n  }\n  doValidate() {\n    return this.masked.doValidate(...arguments) && (!this.parent || this.parent.doValidate(...arguments));\n  }\n  doCommit() {\n    this.masked.doCommit();\n  }\n  get state() {\n    return {\n      masked: this.masked.state,\n      isFilled: this.isFilled\n    };\n  }\n  set state(state) {\n    this.masked.state = state.masked;\n    this.isFilled = state.isFilled;\n  }\n}\n\nexport { DEFAULT_INPUT_DEFINITIONS, PatternInputDefinition as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\n/** */\n\nclass PatternFixedDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    Object.assign(this, opts);\n    this._value = '';\n    this.isFixed = true;\n  }\n  get value() {\n    return this._value;\n  }\n  get unmaskedValue() {\n    return this.isUnmasking ? this.value : '';\n  }\n  get displayValue() {\n    return this.value;\n  }\n  reset() {\n    this._isRawInput = false;\n    this._value = '';\n  }\n  remove() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n    this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n    if (!this._value) this._isRawInput = false;\n    return new ChangeDetails();\n  }\n  nearestInputPos(cursorPos) {\n    let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n    const minPos = 0;\n    const maxPos = this._value.length;\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return minPos;\n      case DIRECTION.NONE:\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n      default:\n        return maxPos;\n    }\n  }\n  totalInputPositions() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n    return this._isRawInput ? toPos - fromPos : 0;\n  }\n  extractInput() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n    let flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n  }\n  get isComplete() {\n    return true;\n  }\n  get isFilled() {\n    return Boolean(this._value);\n  }\n  _appendChar(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const details = new ChangeDetails();\n    if (this.isFilled) return details;\n    const appendEager = this.eager === true || this.eager === 'append';\n    const appended = this.char === ch;\n    const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n    if (isResolved) details.rawInserted = this.char;\n    this._value = details.inserted = this.char;\n    this._isRawInput = isResolved && (flags.raw || flags.input);\n    return details;\n  }\n  _appendEager() {\n    return this._appendChar(this.char, {\n      tail: true\n    });\n  }\n  _appendPlaceholder() {\n    const details = new ChangeDetails();\n    if (this.isFilled) return details;\n    this._value = details.inserted = this.char;\n    return details;\n  }\n  extractTail() {\n    arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    return new ContinuousTailDetails('');\n  }\n\n  // $FlowFixMe no ideas\n  appendTail(tail) {\n    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n    return tail.appendTo(this);\n  }\n  append(str, flags, tail) {\n    const details = this._appendChar(str[0], flags);\n    if (tail != null) {\n      details.tailShift += this.appendTail(tail).tailShift;\n    }\n    return details;\n  }\n  doCommit() {}\n  get state() {\n    return {\n      _value: this._value,\n      _isRawInput: this._isRawInput\n    };\n  }\n  set state(state) {\n    Object.assign(this, state);\n  }\n}\n\nexport { PatternFixedDefinition as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../../_rollupPluginBabelHelpers-6b3bd404.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nconst _excluded = [\"chunks\"];\nclass ChunksTailDetails {\n  /** */\n\n  constructor() {\n    let chunks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n    let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    this.chunks = chunks;\n    this.from = from;\n  }\n  toString() {\n    return this.chunks.map(String).join('');\n  }\n\n  // $FlowFixMe no ideas\n  extend(tailChunk) {\n    if (!String(tailChunk)) return;\n    if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\n    const lastChunk = this.chunks[this.chunks.length - 1];\n    const extendLast = lastChunk && (\n    // if stops are same or tail has no stop\n    lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n    // if tail chunk goes just after last chunk\n    tailChunk.from === lastChunk.from + lastChunk.toString().length;\n    if (tailChunk instanceof ContinuousTailDetails) {\n      // check the ability to extend previous chunk\n      if (extendLast) {\n        // extend previous chunk\n        lastChunk.extend(tailChunk.toString());\n      } else {\n        // append new chunk\n        this.chunks.push(tailChunk);\n      }\n    } else if (tailChunk instanceof ChunksTailDetails) {\n      if (tailChunk.stop == null) {\n        // unwrap floating chunks to parent, keeping `from` pos\n        let firstTailChunk;\n        while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n          firstTailChunk = tailChunk.chunks.shift();\n          firstTailChunk.from += tailChunk.from;\n          this.extend(firstTailChunk);\n        }\n      }\n\n      // if tail chunk still has value\n      if (tailChunk.toString()) {\n        // if chunks contains stops, then popup stop to container\n        tailChunk.stop = tailChunk.blockIndex;\n        this.chunks.push(tailChunk);\n      }\n    }\n  }\n  appendTo(masked) {\n    // $FlowFixMe\n    if (!(masked instanceof IMask.MaskedPattern)) {\n      const tail = new ContinuousTailDetails(this.toString());\n      return tail.appendTo(masked);\n    }\n    const details = new ChangeDetails();\n    for (let ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n      const chunk = this.chunks[ci];\n      const lastBlockIter = masked._mapPosToBlock(masked.value.length);\n      const stop = chunk.stop;\n      let chunkBlock;\n      if (stop != null && (\n      // if block not found or stop is behind lastBlock\n      !lastBlockIter || lastBlockIter.index <= stop)) {\n        if (chunk instanceof ChunksTailDetails ||\n        // for continuous block also check if stop is exist\n        masked._stops.indexOf(stop) >= 0) {\n          const phDetails = masked._appendPlaceholder(stop);\n          details.aggregate(phDetails);\n        }\n        chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n      }\n      if (chunkBlock) {\n        const tailDetails = chunkBlock.appendTail(chunk);\n        tailDetails.skip = false; // always ignore skip, it will be set on last\n        details.aggregate(tailDetails);\n        masked._value += tailDetails.inserted;\n\n        // get not inserted chars\n        const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n        if (remainChars) details.aggregate(masked.append(remainChars, {\n          tail: true\n        }));\n      } else {\n        details.aggregate(masked.append(chunk.toString(), {\n          tail: true\n        }));\n      }\n    }\n    return details;\n  }\n  get state() {\n    return {\n      chunks: this.chunks.map(c => c.state),\n      from: this.from,\n      stop: this.stop,\n      blockIndex: this.blockIndex\n    };\n  }\n  set state(state) {\n    const {\n        chunks\n      } = state,\n      props = _objectWithoutPropertiesLoose(state, _excluded);\n    Object.assign(this, props);\n    this.chunks = chunks.map(cstate => {\n      const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n      // $FlowFixMe already checked above\n      chunk.state = cstate;\n      return chunk;\n    });\n  }\n  unshift(beforePos) {\n    if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n    const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n    let ci = 0;\n    while (ci < this.chunks.length) {\n      const chunk = this.chunks[ci];\n      const shiftChar = chunk.unshift(chunkShiftPos);\n      if (chunk.toString()) {\n        // chunk still contains value\n        // but not shifted - means no more available chars to shift\n        if (!shiftChar) break;\n        ++ci;\n      } else {\n        // clean if chunk has no value\n        this.chunks.splice(ci, 1);\n      }\n      if (shiftChar) return shiftChar;\n    }\n    return '';\n  }\n  shift() {\n    if (!this.chunks.length) return '';\n    let ci = this.chunks.length - 1;\n    while (0 <= ci) {\n      const chunk = this.chunks[ci];\n      const shiftChar = chunk.shift();\n      if (chunk.toString()) {\n        // chunk still contains value\n        // but not shifted - means no more available chars to shift\n        if (!shiftChar) break;\n        --ci;\n      } else {\n        // clean if chunk has no value\n        this.chunks.splice(ci, 1);\n      }\n      if (shiftChar) return shiftChar;\n    }\n    return '';\n  }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\nimport '../../core/change-details.js';\nimport '../../core/holder.js';\n\nclass PatternCursor {\n  constructor(masked, pos) {\n    this.masked = masked;\n    this._log = [];\n    const {\n      offset,\n      index\n    } = masked._mapPosToBlock(pos) || (pos < 0 ?\n    // first\n    {\n      index: 0,\n      offset: 0\n    } :\n    // last\n    {\n      index: this.masked._blocks.length,\n      offset: 0\n    });\n    this.offset = offset;\n    this.index = index;\n    this.ok = false;\n  }\n  get block() {\n    return this.masked._blocks[this.index];\n  }\n  get pos() {\n    return this.masked._blockStartPos(this.index) + this.offset;\n  }\n  get state() {\n    return {\n      index: this.index,\n      offset: this.offset,\n      ok: this.ok\n    };\n  }\n  set state(s) {\n    Object.assign(this, s);\n  }\n  pushState() {\n    this._log.push(this.state);\n  }\n  popState() {\n    const s = this._log.pop();\n    this.state = s;\n    return s;\n  }\n  bindBlock() {\n    if (this.block) return;\n    if (this.index < 0) {\n      this.index = 0;\n      this.offset = 0;\n    }\n    if (this.index >= this.masked._blocks.length) {\n      this.index = this.masked._blocks.length - 1;\n      this.offset = this.block.value.length;\n    }\n  }\n  _pushLeft(fn) {\n    this.pushState();\n    for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) === null || _this$block === void 0 ? void 0 : _this$block.value.length) || 0) {\n      var _this$block;\n      if (fn()) return this.ok = true;\n    }\n    return this.ok = false;\n  }\n  _pushRight(fn) {\n    this.pushState();\n    for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n      if (fn()) return this.ok = true;\n    }\n    return this.ok = false;\n  }\n  pushLeftBeforeFilled() {\n    return this._pushLeft(() => {\n      if (this.block.isFixed || !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n      if (this.offset !== 0) return true;\n    });\n  }\n  pushLeftBeforeInput() {\n    // cases:\n    // filled input: 00|\n    // optional empty input: 00[]|\n    // nested block: XX<[]>|\n    return this._pushLeft(() => {\n      if (this.block.isFixed) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n      return true;\n    });\n  }\n  pushLeftBeforeRequired() {\n    return this._pushLeft(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n      return true;\n    });\n  }\n  pushRightBeforeFilled() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n      if (this.offset !== this.block.value.length) return true;\n    });\n  }\n  pushRightBeforeInput() {\n    return this._pushRight(() => {\n      if (this.block.isFixed) return;\n\n      // const o = this.offset;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n      // aa|X\n      // aa<X|[]>X_    - this will not work\n      // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n      return true;\n    });\n  }\n  pushRightBeforeRequired() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n      // TODO check |[*]XX_\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      return true;\n    });\n  }\n}\n\nexport { PatternCursor as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n  /**\n    @override\n    @param {Object} opts\n  */\n  _update(opts) {\n    if (opts.mask) opts.validate = value => value.search(opts.mask) >= 0;\n    super._update(opts);\n  }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport PatternInputDefinition, { DEFAULT_INPUT_DEFINITIONS } from './pattern/input-definition.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\nconst _excluded = [\"_blocks\"];\n\n/**\n  Pattern mask\n  @param {Object} opts\n  @param {Object} opts.blocks\n  @param {Object} opts.definitions\n  @param {string} opts.placeholderChar\n  @param {string} opts.displayChar\n  @param {boolean} opts.lazy\n*/\nclass MaskedPattern extends Masked {\n  /** */\n\n  /** */\n\n  /** Single char for empty input */\n\n  /** Single char for filled input */\n\n  /** Show placeholder only when needed */\n\n  constructor() {\n    let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO type $Shape<MaskedPatternOptions>={} does not work\n    opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\n    super(Object.assign({}, MaskedPattern.DEFAULTS, opts));\n  }\n\n  /**\n    @override\n    @param {Object} opts\n  */\n  _update() {\n    let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n    super._update(opts);\n    this._rebuildMask();\n  }\n\n  /** */\n  _rebuildMask() {\n    const defs = this.definitions;\n    this._blocks = [];\n    this._stops = [];\n    this._maskedBlocks = {};\n    let pattern = this.mask;\n    if (!pattern || !defs) return;\n    let unmaskingBlock = false;\n    let optionalBlock = false;\n    for (let i = 0; i < pattern.length; ++i) {\n      var _defs$char, _defs$char2;\n      if (this.blocks) {\n        const p = pattern.slice(i);\n        const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n        // order by key length\n        bNames.sort((a, b) => b.length - a.length);\n        // use block name with max length\n        const bName = bNames[0];\n        if (bName) {\n          // $FlowFixMe no ideas\n          const maskedBlock = createMask(Object.assign({\n            parent: this,\n            lazy: this.lazy,\n            eager: this.eager,\n            placeholderChar: this.placeholderChar,\n            displayChar: this.displayChar,\n            overwrite: this.overwrite\n          }, this.blocks[bName]));\n          if (maskedBlock) {\n            this._blocks.push(maskedBlock);\n\n            // store block index\n            if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n            this._maskedBlocks[bName].push(this._blocks.length - 1);\n          }\n          i += bName.length - 1;\n          continue;\n        }\n      }\n      let char = pattern[i];\n      let isInput = (char in defs);\n      if (char === MaskedPattern.STOP_CHAR) {\n        this._stops.push(this._blocks.length);\n        continue;\n      }\n      if (char === '{' || char === '}') {\n        unmaskingBlock = !unmaskingBlock;\n        continue;\n      }\n      if (char === '[' || char === ']') {\n        optionalBlock = !optionalBlock;\n        continue;\n      }\n      if (char === MaskedPattern.ESCAPE_CHAR) {\n        ++i;\n        char = pattern[i];\n        if (!char) break;\n        isInput = false;\n      }\n      const maskOpts = (_defs$char = defs[char]) !== null && _defs$char !== void 0 && _defs$char.mask && !(((_defs$char2 = defs[char]) === null || _defs$char2 === void 0 ? void 0 : _defs$char2.mask.prototype) instanceof IMask.Masked) ? defs[char] : {\n        mask: defs[char]\n      };\n      const def = isInput ? new PatternInputDefinition(Object.assign({\n        parent: this,\n        isOptional: optionalBlock,\n        lazy: this.lazy,\n        eager: this.eager,\n        placeholderChar: this.placeholderChar,\n        displayChar: this.displayChar\n      }, maskOpts)) : new PatternFixedDefinition({\n        char,\n        eager: this.eager,\n        isUnmasking: unmaskingBlock\n      });\n      this._blocks.push(def);\n    }\n  }\n\n  /**\n    @override\n  */\n  get state() {\n    return Object.assign({}, super.state, {\n      _blocks: this._blocks.map(b => b.state)\n    });\n  }\n  set state(state) {\n    const {\n        _blocks\n      } = state,\n      maskedState = _objectWithoutPropertiesLoose(state, _excluded);\n    this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n    super.state = maskedState;\n  }\n\n  /**\n    @override\n  */\n  reset() {\n    super.reset();\n    this._blocks.forEach(b => b.reset());\n  }\n\n  /**\n    @override\n  */\n  get isComplete() {\n    return this._blocks.every(b => b.isComplete);\n  }\n\n  /**\n    @override\n  */\n  get isFilled() {\n    return this._blocks.every(b => b.isFilled);\n  }\n  get isFixed() {\n    return this._blocks.every(b => b.isFixed);\n  }\n  get isOptional() {\n    return this._blocks.every(b => b.isOptional);\n  }\n\n  /**\n    @override\n  */\n  doCommit() {\n    this._blocks.forEach(b => b.doCommit());\n    super.doCommit();\n  }\n\n  /**\n    @override\n  */\n  get unmaskedValue() {\n    return this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n  }\n  set unmaskedValue(unmaskedValue) {\n    super.unmaskedValue = unmaskedValue;\n  }\n\n  /**\n    @override\n  */\n  get value() {\n    // TODO return _value when not in change?\n    return this._blocks.reduce((str, b) => str += b.value, '');\n  }\n  set value(value) {\n    super.value = value;\n  }\n  get displayValue() {\n    return this._blocks.reduce((str, b) => str += b.displayValue, '');\n  }\n\n  /**\n    @override\n  */\n  appendTail(tail) {\n    return super.appendTail(tail).aggregate(this._appendPlaceholder());\n  }\n\n  /**\n    @override\n  */\n  _appendEager() {\n    var _this$_mapPosToBlock;\n    const details = new ChangeDetails();\n    let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.value.length)) === null || _this$_mapPosToBlock === void 0 ? void 0 : _this$_mapPosToBlock.index;\n    if (startBlockIndex == null) return details;\n\n    // TODO test if it works for nested pattern masks\n    if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n    for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n      const d = this._blocks[bi]._appendEager();\n      if (!d.inserted) break;\n      details.aggregate(d);\n    }\n    return details;\n  }\n\n  /**\n    @override\n  */\n  _appendCharRaw(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const blockIter = this._mapPosToBlock(this.value.length);\n    const details = new ChangeDetails();\n    if (!blockIter) return details;\n    for (let bi = blockIter.index;; ++bi) {\n      var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n      const block = this._blocks[bi];\n      if (!block) break;\n      const blockDetails = block._appendChar(ch, Object.assign({}, flags, {\n        _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : (_flags$_beforeTailSta2 = _flags$_beforeTailSta._blocks) === null || _flags$_beforeTailSta2 === void 0 ? void 0 : _flags$_beforeTailSta2[bi]\n      }));\n      const skip = blockDetails.skip;\n      details.aggregate(blockDetails);\n      if (skip || blockDetails.rawInserted) break; // go next char\n    }\n\n    return details;\n  }\n\n  /**\n    @override\n  */\n  extractTail() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    const chunkTail = new ChunksTailDetails();\n    if (fromPos === toPos) return chunkTail;\n    this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n      const blockChunk = b.extractTail(bFromPos, bToPos);\n      blockChunk.stop = this._findStopBefore(bi);\n      blockChunk.from = this._blockStartPos(bi);\n      if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n      chunkTail.extend(blockChunk);\n    });\n    return chunkTail;\n  }\n\n  /**\n    @override\n  */\n  extractInput() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    let flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (fromPos === toPos) return '';\n    let input = '';\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n      input += b.extractInput(fromPos, toPos, flags);\n    });\n    return input;\n  }\n  _findStopBefore(blockIndex) {\n    let stopBefore;\n    for (let si = 0; si < this._stops.length; ++si) {\n      const stop = this._stops[si];\n      if (stop <= blockIndex) stopBefore = stop;else break;\n    }\n    return stopBefore;\n  }\n\n  /** Appends placeholder depending on laziness */\n  _appendPlaceholder(toBlockIndex) {\n    const details = new ChangeDetails();\n    if (this.lazy && toBlockIndex == null) return details;\n    const startBlockIter = this._mapPosToBlock(this.value.length);\n    if (!startBlockIter) return details;\n    const startBlockIndex = startBlockIter.index;\n    const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n    this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n      if (!b.lazy || toBlockIndex != null) {\n        // $FlowFixMe `_blocks` may not be present\n        const args = b._blocks != null ? [b._blocks.length] : [];\n        const bDetails = b._appendPlaceholder(...args);\n        this._value += bDetails.inserted;\n        details.aggregate(bDetails);\n      }\n    });\n    return details;\n  }\n\n  /** Finds block in pos */\n  _mapPosToBlock(pos) {\n    let accVal = '';\n    for (let bi = 0; bi < this._blocks.length; ++bi) {\n      const block = this._blocks[bi];\n      const blockStartPos = accVal.length;\n      accVal += block.value;\n      if (pos <= accVal.length) {\n        return {\n          index: bi,\n          offset: pos - blockStartPos\n        };\n      }\n    }\n  }\n\n  /** */\n  _blockStartPos(blockIndex) {\n    return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.value.length, 0);\n  }\n\n  /** */\n  _forEachBlocksInRange(fromPos) {\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    let fn = arguments.length > 2 ? arguments[2] : undefined;\n    const fromBlockIter = this._mapPosToBlock(fromPos);\n    if (fromBlockIter) {\n      const toBlockIter = this._mapPosToBlock(toPos);\n      // process first block\n      const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n      const fromBlockStartPos = fromBlockIter.offset;\n      const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].value.length;\n      fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n      if (toBlockIter && !isSameBlock) {\n        // process intermediate blocks\n        for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n          fn(this._blocks[bi], bi, 0, this._blocks[bi].value.length);\n        }\n\n        // process last block\n        fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n      }\n    }\n  }\n\n  /**\n    @override\n  */\n  remove() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    const removeDetails = super.remove(fromPos, toPos);\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n      removeDetails.aggregate(b.remove(bFromPos, bToPos));\n    });\n    return removeDetails;\n  }\n\n  /**\n    @override\n  */\n  nearestInputPos(cursorPos) {\n    let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n    if (!this._blocks.length) return 0;\n    const cursor = new PatternCursor(this, cursorPos);\n    if (direction === DIRECTION.NONE) {\n      // -------------------------------------------------\n      // NONE should only go out from fixed to the right!\n      // -------------------------------------------------\n      if (cursor.pushRightBeforeInput()) return cursor.pos;\n      cursor.popState();\n      if (cursor.pushLeftBeforeInput()) return cursor.pos;\n      return this.value.length;\n    }\n\n    // FORCE is only about a|* otherwise is 0\n    if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n      // try to break fast when *|a\n      if (direction === DIRECTION.LEFT) {\n        cursor.pushRightBeforeFilled();\n        if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n        cursor.popState();\n      }\n\n      // forward flow\n      cursor.pushLeftBeforeInput();\n      cursor.pushLeftBeforeRequired();\n      cursor.pushLeftBeforeFilled();\n\n      // backward flow\n      if (direction === DIRECTION.LEFT) {\n        cursor.pushRightBeforeInput();\n        cursor.pushRightBeforeRequired();\n        if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n        cursor.popState();\n        if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n        cursor.popState();\n      }\n      if (cursor.ok) return cursor.pos;\n      if (direction === DIRECTION.FORCE_LEFT) return 0;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n\n      // cursor.popState();\n      // if (\n      //   cursor.pushRightBeforeInput() &&\n      //   // TODO HACK for lazy if has aligned left inside fixed and has came to the start - use start position\n      //   (!this.lazy || this.extractInput())\n      // ) return cursor.pos;\n\n      return 0;\n    }\n    if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n      // forward flow\n      cursor.pushRightBeforeInput();\n      cursor.pushRightBeforeRequired();\n      if (cursor.pushRightBeforeFilled()) return cursor.pos;\n      if (direction === DIRECTION.FORCE_RIGHT) return this.value.length;\n\n      // backward flow\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n    }\n    return cursorPos;\n  }\n\n  /**\n    @override\n  */\n  totalInputPositions() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    let total = 0;\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n      total += b.totalInputPositions(bFromPos, bToPos);\n    });\n    return total;\n  }\n\n  /** Get block by name */\n  maskedBlock(name) {\n    return this.maskedBlocks(name)[0];\n  }\n\n  /** Get all blocks by name */\n  maskedBlocks(name) {\n    const indices = this._maskedBlocks[name];\n    if (!indices) return [];\n    return indices.map(gi => this._blocks[gi]);\n  }\n}\nMaskedPattern.DEFAULTS = {\n  lazy: true,\n  placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import MaskedPattern from './pattern.js';\nimport '../core/change-details.js';\nimport { normalizePrepare } from '../core/utils.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n  /**\n    Optionally sets max length of pattern.\n    Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n  */\n\n  /** Min bound */\n\n  /** Max bound */\n\n  /** */\n\n  get _matchFrom() {\n    return this.maxLength - String(this.from).length;\n  }\n\n  /**\n    @override\n  */\n  _update(opts) {\n    // TODO type\n    opts = Object.assign({\n      to: this.to || 0,\n      from: this.from || 0,\n      maxLength: this.maxLength || 0\n    }, opts);\n    let maxLength = String(opts.to).length;\n    if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\n    opts.maxLength = maxLength;\n    const fromStr = String(opts.from).padStart(maxLength, '0');\n    const toStr = String(opts.to).padStart(maxLength, '0');\n    let sameCharsCount = 0;\n    while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n    opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\n    super._update(opts);\n  }\n\n  /**\n    @override\n  */\n  get isComplete() {\n    return super.isComplete && Boolean(this.value);\n  }\n  boundaries(str) {\n    let minstr = '';\n    let maxstr = '';\n    const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n    if (num) {\n      minstr = '0'.repeat(placeholder.length) + num;\n      maxstr = '9'.repeat(placeholder.length) + num;\n    }\n    minstr = minstr.padEnd(this.maxLength, '0');\n    maxstr = maxstr.padEnd(this.maxLength, '9');\n    return [minstr, maxstr];\n  }\n\n  // TODO str is a single char everytime\n  /**\n    @override\n  */\n  doPrepare(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let details;\n    [ch, details] = normalizePrepare(super.doPrepare(ch.replace(/\\D/g, ''), flags));\n    if (!this.autofix || !ch) return ch;\n    const fromStr = String(this.from).padStart(this.maxLength, '0');\n    const toStr = String(this.to).padStart(this.maxLength, '0');\n    let nextVal = this.value + ch;\n    if (nextVal.length > this.maxLength) return '';\n    const [minstr, maxstr] = this.boundaries(nextVal);\n    if (Number(maxstr) < this.from) return fromStr[nextVal.length - 1];\n    if (Number(minstr) > this.to) {\n      if (this.autofix === 'pad' && nextVal.length < this.maxLength) {\n        return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];\n      }\n      return toStr[nextVal.length - 1];\n    }\n    return ch;\n  }\n\n  /**\n    @override\n  */\n  doValidate() {\n    const str = this.value;\n    const firstNonZero = str.search(/[^0]/);\n    if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n    const [minstr, maxstr] = this.boundaries(str);\n    return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(...arguments);\n  }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n  /** Pattern mask for date according to {@link MaskedDate#format} */\n\n  /** Start date */\n\n  /** End date */\n\n  /** */\n\n  /**\n    @param {Object} opts\n  */\n  constructor(opts) {\n    super(Object.assign({}, MaskedDate.DEFAULTS, opts));\n  }\n\n  /**\n    @override\n  */\n  _update(opts) {\n    if (opts.mask === Date) delete opts.mask;\n    if (opts.pattern) opts.mask = opts.pattern;\n    const blocks = opts.blocks;\n    opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n    // adjust year block\n    if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\n    if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\n    if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to) {\n      opts.blocks.m.from = opts.min.getMonth() + 1;\n      opts.blocks.m.to = opts.max.getMonth() + 1;\n      if (opts.blocks.m.from === opts.blocks.m.to) {\n        opts.blocks.d.from = opts.min.getDate();\n        opts.blocks.d.to = opts.max.getDate();\n      }\n    }\n    Object.assign(opts.blocks, this.blocks, blocks);\n\n    // add autofix\n    Object.keys(opts.blocks).forEach(bk => {\n      const b = opts.blocks[bk];\n      if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;\n    });\n    super._update(opts);\n  }\n\n  /**\n    @override\n  */\n  doValidate() {\n    const date = this.date;\n    return super.doValidate(...arguments) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n  }\n\n  /** Checks if date is exists */\n  isDateExist(str) {\n    return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n  }\n\n  /** Parsed Date */\n  get date() {\n    return this.typedValue;\n  }\n  set date(date) {\n    this.typedValue = date;\n  }\n\n  /**\n    @override\n  */\n  get typedValue() {\n    return this.isComplete ? super.typedValue : null;\n  }\n  set typedValue(value) {\n    super.typedValue = value;\n  }\n\n  /**\n    @override\n  */\n  maskEquals(mask) {\n    return mask === Date || super.maskEquals(mask);\n  }\n}\nMaskedDate.DEFAULTS = {\n  pattern: 'd{.}`m{.}`Y',\n  format: date => {\n    if (!date) return '';\n    const day = String(date.getDate()).padStart(2, '0');\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const year = date.getFullYear();\n    return [day, month, year].join('.');\n  },\n  parse: str => {\n    const [day, month, year] = str.split('.');\n    return new Date(year, month - 1, day);\n  }\n};\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n  d: {\n    mask: MaskedRange,\n    from: 1,\n    to: 31,\n    maxLength: 2\n  },\n  m: {\n    mask: MaskedRange,\n    from: 1,\n    to: 12,\n    maxLength: 2\n  },\n  Y: {\n    mask: MaskedRange,\n    from: 1900,\n    to: 9999\n  }\n});\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import IMask from '../core/holder.js';\n\n/**\n  Generic element API to use with mask\n  @interface\n*/\nclass MaskElement {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** Safely returns selection start */\n  get selectionStart() {\n    let start;\n    try {\n      start = this._unsafeSelectionStart;\n    } catch (e) {}\n    return start != null ? start : this.value.length;\n  }\n\n  /** Safely returns selection end */\n  get selectionEnd() {\n    let end;\n    try {\n      end = this._unsafeSelectionEnd;\n    } catch (e) {}\n    return end != null ? end : this.value.length;\n  }\n\n  /** Safely sets element selection */\n  select(start, end) {\n    if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n    try {\n      this._unsafeSelect(start, end);\n    } catch (e) {}\n  }\n\n  /** Should be overriden in subclasses */\n  _unsafeSelect(start, end) {}\n  /** Should be overriden in subclasses */\n  get isActive() {\n    return false;\n  }\n  /** Should be overriden in subclasses */\n  bindEvents(handlers) {}\n  /** Should be overriden in subclasses */\n  unbindEvents() {}\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n  /** Mapping between HTMLElement events and mask internal events */\n\n  /** HTMLElement to use mask on */\n\n  /**\n    @param {HTMLInputElement|HTMLTextAreaElement} input\n  */\n  constructor(input) {\n    super();\n    this.input = input;\n    this._handlers = {};\n  }\n\n  /** */\n  // $FlowFixMe https://github.com/facebook/flow/issues/2839\n  get rootElement() {\n    var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n    return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) === null || _this$input$getRootNo2 === void 0 ? void 0 : _this$input$getRootNo2.call(_this$input)) !== null && _this$input$getRootNo !== void 0 ? _this$input$getRootNo : document;\n  }\n\n  /**\n    Is element in focus\n    @readonly\n  */\n  get isActive() {\n    //$FlowFixMe\n    return this.input === this.rootElement.activeElement;\n  }\n\n  /**\n    Returns HTMLElement selection start\n    @override\n  */\n  get _unsafeSelectionStart() {\n    return this.input.selectionStart;\n  }\n\n  /**\n    Returns HTMLElement selection end\n    @override\n  */\n  get _unsafeSelectionEnd() {\n    return this.input.selectionEnd;\n  }\n\n  /**\n    Sets HTMLElement selection\n    @override\n  */\n  _unsafeSelect(start, end) {\n    this.input.setSelectionRange(start, end);\n  }\n\n  /**\n    HTMLElement value\n    @override\n  */\n  get value() {\n    return this.input.value;\n  }\n  set value(value) {\n    this.input.value = value;\n  }\n\n  /**\n    Binds HTMLElement events to mask internal events\n    @override\n  */\n  bindEvents(handlers) {\n    Object.keys(handlers).forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\n  }\n\n  /**\n    Unbinds HTMLElement events to mask internal events\n    @override\n  */\n  unbindEvents() {\n    Object.keys(this._handlers).forEach(event => this._toggleEventHandler(event));\n  }\n\n  /** */\n  _toggleEventHandler(event, handler) {\n    if (this._handlers[event]) {\n      this.input.removeEventListener(event, this._handlers[event]);\n      delete this._handlers[event];\n    }\n    if (handler) {\n      this.input.addEventListener(event, handler);\n      this._handlers[event] = handler;\n    }\n  }\n}\nHTMLMaskElement.EVENTS_MAP = {\n  selectionChange: 'keydown',\n  input: 'input',\n  drop: 'drop',\n  click: 'click',\n  focus: 'focus',\n  commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n  /**\n    Returns HTMLElement selection start\n    @override\n  */\n  get _unsafeSelectionStart() {\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    const anchorOffset = selection && selection.anchorOffset;\n    const focusOffset = selection && selection.focusOffset;\n    if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n      return anchorOffset;\n    }\n    return focusOffset;\n  }\n\n  /**\n    Returns HTMLElement selection end\n    @override\n  */\n  get _unsafeSelectionEnd() {\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    const anchorOffset = selection && selection.anchorOffset;\n    const focusOffset = selection && selection.focusOffset;\n    if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n      return anchorOffset;\n    }\n    return focusOffset;\n  }\n\n  /**\n    Sets HTMLElement selection\n    @override\n  */\n  _unsafeSelect(start, end) {\n    if (!this.rootElement.createRange) return;\n    const range = this.rootElement.createRange();\n    range.setStart(this.input.firstChild || this.input, start);\n    range.setEnd(this.input.lastChild || this.input, end);\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    if (selection) {\n      selection.removeAllRanges();\n      selection.addRange(range);\n    }\n  }\n\n  /**\n    HTMLElement value\n    @override\n  */\n  get value() {\n    // $FlowFixMe\n    return this.input.textContent;\n  }\n  set value(value) {\n    this.input.textContent = value;\n  }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport { objectIncludes, DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport '../masked/date.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLMaskElement from './html-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../masked/pattern.js';\nimport '../masked/base.js';\nimport '../core/continuous-tail-details.js';\nimport '../masked/pattern/input-definition.js';\nimport '../masked/pattern/fixed-definition.js';\nimport '../masked/pattern/chunk-tail-details.js';\nimport '../masked/pattern/cursor.js';\nimport '../masked/regexp.js';\nimport '../masked/range.js';\n\nconst _excluded = [\"mask\"];\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n  /**\n    View element\n    @readonly\n  */\n\n  /**\n    Internal {@link Masked} model\n    @readonly\n  */\n\n  /**\n    @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\n    @param {Object} opts\n  */\n  constructor(el, opts) {\n    this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLMaskElement(el);\n    this.masked = createMask(opts);\n    this._listeners = {};\n    this._value = '';\n    this._unmaskedValue = '';\n    this._saveSelection = this._saveSelection.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onChange = this._onChange.bind(this);\n    this._onDrop = this._onDrop.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onClick = this._onClick.bind(this);\n    this.alignCursor = this.alignCursor.bind(this);\n    this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n    this._bindEvents();\n\n    // refresh\n    this.updateValue();\n    this._onChange();\n  }\n\n  /** Read or update mask */\n  get mask() {\n    return this.masked.mask;\n  }\n  maskEquals(mask) {\n    var _this$masked;\n    return mask == null || ((_this$masked = this.masked) === null || _this$masked === void 0 ? void 0 : _this$masked.maskEquals(mask));\n  }\n  set mask(mask) {\n    if (this.maskEquals(mask)) return;\n\n    // $FlowFixMe No ideas ... after update\n    if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n      this.masked.updateOptions({\n        mask\n      });\n      return;\n    }\n    const masked = createMask({\n      mask\n    });\n    masked.unmaskedValue = this.masked.unmaskedValue;\n    this.masked = masked;\n  }\n\n  /** Raw value */\n  get value() {\n    return this._value;\n  }\n  set value(str) {\n    if (this.value === str) return;\n    this.masked.value = str;\n    this.updateControl();\n    this.alignCursor();\n  }\n\n  /** Unmasked value */\n  get unmaskedValue() {\n    return this._unmaskedValue;\n  }\n  set unmaskedValue(str) {\n    if (this.unmaskedValue === str) return;\n    this.masked.unmaskedValue = str;\n    this.updateControl();\n    this.alignCursor();\n  }\n\n  /** Typed unmasked value */\n  get typedValue() {\n    return this.masked.typedValue;\n  }\n  set typedValue(val) {\n    if (this.masked.typedValueEquals(val)) return;\n    this.masked.typedValue = val;\n    this.updateControl();\n    this.alignCursor();\n  }\n\n  /** Display value */\n  get displayValue() {\n    return this.masked.displayValue;\n  }\n\n  /**\n    Starts listening to element events\n    @protected\n  */\n  _bindEvents() {\n    this.el.bindEvents({\n      selectionChange: this._saveSelection,\n      input: this._onInput,\n      drop: this._onDrop,\n      click: this._onClick,\n      focus: this._onFocus,\n      commit: this._onChange\n    });\n  }\n\n  /**\n    Stops listening to element events\n    @protected\n   */\n  _unbindEvents() {\n    if (this.el) this.el.unbindEvents();\n  }\n\n  /**\n    Fires custom event\n    @protected\n   */\n  _fireEvent(ev) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    const listeners = this._listeners[ev];\n    if (!listeners) return;\n    listeners.forEach(l => l(...args));\n  }\n\n  /**\n    Current selection start\n    @readonly\n  */\n  get selectionStart() {\n    return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n  }\n\n  /** Current cursor position */\n  get cursorPos() {\n    return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n  }\n  set cursorPos(pos) {\n    if (!this.el || !this.el.isActive) return;\n    this.el.select(pos, pos);\n    this._saveSelection();\n  }\n\n  /**\n    Stores current selection\n    @protected\n  */\n  _saveSelection( /* ev */\n  ) {\n    if (this.displayValue !== this.el.value) {\n      console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n    }\n\n    this._selection = {\n      start: this.selectionStart,\n      end: this.cursorPos\n    };\n  }\n\n  /** Syncronizes model value from view */\n  updateValue() {\n    this.masked.value = this.el.value;\n    this._value = this.masked.value;\n  }\n\n  /** Syncronizes view from model value, fires change events */\n  updateControl() {\n    const newUnmaskedValue = this.masked.unmaskedValue;\n    const newValue = this.masked.value;\n    const newDisplayValue = this.displayValue;\n    const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n    this._unmaskedValue = newUnmaskedValue;\n    this._value = newValue;\n    if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n    if (isChanged) this._fireChangeEvents();\n  }\n\n  /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\n  updateOptions(opts) {\n    const {\n        mask\n      } = opts,\n      restOpts = _objectWithoutPropertiesLoose(opts, _excluded);\n    const updateMask = !this.maskEquals(mask);\n    const updateOpts = !objectIncludes(this.masked, restOpts);\n    if (updateMask) this.mask = mask;\n    if (updateOpts) this.masked.updateOptions(restOpts);\n    if (updateMask || updateOpts) this.updateControl();\n  }\n\n  /** Updates cursor */\n  updateCursor(cursorPos) {\n    if (cursorPos == null) return;\n    this.cursorPos = cursorPos;\n\n    // also queue change cursor for mobile browsers\n    this._delayUpdateCursor(cursorPos);\n  }\n\n  /**\n    Delays cursor update to support mobile browsers\n    @private\n  */\n  _delayUpdateCursor(cursorPos) {\n    this._abortUpdateCursor();\n    this._changingCursorPos = cursorPos;\n    this._cursorChanging = setTimeout(() => {\n      if (!this.el) return; // if was destroyed\n      this.cursorPos = this._changingCursorPos;\n      this._abortUpdateCursor();\n    }, 10);\n  }\n\n  /**\n    Fires custom events\n    @protected\n  */\n  _fireChangeEvents() {\n    this._fireEvent('accept', this._inputEvent);\n    if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n  }\n\n  /**\n    Aborts delayed cursor update\n    @private\n  */\n  _abortUpdateCursor() {\n    if (this._cursorChanging) {\n      clearTimeout(this._cursorChanging);\n      delete this._cursorChanging;\n    }\n  }\n\n  /** Aligns cursor to nearest available position */\n  alignCursor() {\n    this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n  }\n\n  /** Aligns cursor only if selection is empty */\n  alignCursorFriendly() {\n    if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n    this.alignCursor();\n  }\n\n  /** Adds listener on custom event */\n  on(ev, handler) {\n    if (!this._listeners[ev]) this._listeners[ev] = [];\n    this._listeners[ev].push(handler);\n    return this;\n  }\n\n  /** Removes custom event listener */\n  off(ev, handler) {\n    if (!this._listeners[ev]) return this;\n    if (!handler) {\n      delete this._listeners[ev];\n      return this;\n    }\n    const hIndex = this._listeners[ev].indexOf(handler);\n    if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n    return this;\n  }\n\n  /** Handles view input event */\n  _onInput(e) {\n    this._inputEvent = e;\n    this._abortUpdateCursor();\n\n    // fix strange IE behavior\n    if (!this._selection) return this.updateValue();\n    const details = new ActionDetails(\n    // new state\n    this.el.value, this.cursorPos,\n    // old state\n    this.displayValue, this._selection);\n    const oldRawValue = this.masked.rawInputValue;\n    const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n      input: true,\n      raw: true\n    }).offset;\n\n    // force align in remove direction only if no input chars were removed\n    // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n    const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n    let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n    if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n    this.updateControl();\n    this.updateCursor(cursorPos);\n    delete this._inputEvent;\n  }\n\n  /** Handles view change event and commits model value */\n  _onChange() {\n    if (this.displayValue !== this.el.value) {\n      this.updateValue();\n    }\n    this.masked.doCommit();\n    this.updateControl();\n    this._saveSelection();\n  }\n\n  /** Handles view drop event, prevents by default */\n  _onDrop(ev) {\n    ev.preventDefault();\n    ev.stopPropagation();\n  }\n\n  /** Restore last selection on focus */\n  _onFocus(ev) {\n    this.alignCursorFriendly();\n  }\n\n  /** Restore last selection on focus */\n  _onClick(ev) {\n    this.alignCursorFriendly();\n  }\n\n  /** Unbind view events and removes element reference */\n  destroy() {\n    this._unbindEvents();\n    // $FlowFixMe why not do so?\n    this._listeners.length = 0;\n    // $FlowFixMe\n    delete this.el;\n  }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n  /**\n    @override\n    @param {Object} opts\n  */\n  _update(opts) {\n    // TODO type\n    if (opts.enum) opts.mask = '*'.repeat(opts.enum[0].length);\n    super._update(opts);\n  }\n\n  /**\n    @override\n  */\n  doValidate() {\n    return this.enum.some(e => e.indexOf(this.unmaskedValue) >= 0) && super.doValidate(...arguments);\n  }\n}\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import { escapeRegExp, normalizePrepare, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/**\n  Number mask\n  @param {Object} opts\n  @param {string} opts.radix - Single char\n  @param {string} opts.thousandsSeparator - Single char\n  @param {Array<string>} opts.mapToRadix - Array of single chars\n  @param {number} opts.min\n  @param {number} opts.max\n  @param {number} opts.scale - Digits after point\n  @param {boolean} opts.signed - Allow negative\n  @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\n  @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\n*/\nclass MaskedNumber extends Masked {\n  /** Single char */\n\n  /** Single char */\n\n  /** Array of single chars */\n\n  /** */\n\n  /** */\n\n  /** Digits after point */\n\n  /** */\n\n  /** Flag to remove leading and trailing zeros in the end of editing */\n\n  /** Flag to pad trailing zeros after point in the end of editing */\n\n  constructor(opts) {\n    super(Object.assign({}, MaskedNumber.DEFAULTS, opts));\n  }\n\n  /**\n    @override\n  */\n  _update(opts) {\n    super._update(opts);\n    this._updateRegExps();\n  }\n\n  /** */\n  _updateRegExps() {\n    let start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n    let mid = '\\\\d*';\n    let end = (this.scale ? \"(\".concat(escapeRegExp(this.radix), \"\\\\d{0,\").concat(this.scale, \"})?\") : '') + '$';\n    this._numberRegExp = new RegExp(start + mid + end);\n    this._mapToRadixRegExp = new RegExp(\"[\".concat(this.mapToRadix.map(escapeRegExp).join(''), \"]\"), 'g');\n    this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n  }\n\n  /** */\n  _removeThousandsSeparators(value) {\n    return value.replace(this._thousandsSeparatorRegExp, '');\n  }\n\n  /** */\n  _insertThousandsSeparators(value) {\n    // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n    const parts = value.split(this.radix);\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n    return parts.join(this.radix);\n  }\n\n  /**\n    @override\n  */\n  doPrepare(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    ch = this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n    /*\n      radix should be mapped when\n      1) input is done from keyboard = flags.input && flags.raw\n      2) unmasked value is set = !flags.input && !flags.raw\n      and should not be mapped when\n      1) value is set = flags.input && !flags.raw\n      2) raw value is set = !flags.input && flags.raw\n    */\n    flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch);\n    const [prepCh, details] = normalizePrepare(super.doPrepare(ch, flags));\n    if (ch && !prepCh) details.skip = true;\n    return [prepCh, details];\n  }\n\n  /** */\n  _separatorsCount(to) {\n    let extendOnSeparators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    let count = 0;\n    for (let pos = 0; pos < to; ++pos) {\n      if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n        ++count;\n        if (extendOnSeparators) to += this.thousandsSeparator.length;\n      }\n    }\n    return count;\n  }\n\n  /** */\n  _separatorsCountFromSlice() {\n    let slice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._value;\n    return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n  }\n\n  /**\n    @override\n  */\n  extractInput() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    let flags = arguments.length > 2 ? arguments[2] : undefined;\n    [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n    return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n  }\n\n  /**\n    @override\n  */\n  _appendCharRaw(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\n    const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n    const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n    this._value = this._removeThousandsSeparators(this.value);\n    const appendDetails = super._appendCharRaw(ch, flags);\n    this._value = this._insertThousandsSeparators(this._value);\n    const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n    const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n    appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n    appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n    return appendDetails;\n  }\n\n  /** */\n  _findSeparatorAround(pos) {\n    if (this.thousandsSeparator) {\n      const searchFrom = pos - this.thousandsSeparator.length + 1;\n      const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n      if (separatorPos <= pos) return separatorPos;\n    }\n    return -1;\n  }\n  _adjustRangeWithSeparators(from, to) {\n    const separatorAroundFromPos = this._findSeparatorAround(from);\n    if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n    const separatorAroundToPos = this._findSeparatorAround(to);\n    if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n    return [from, to];\n  }\n\n  /**\n    @override\n  */\n  remove() {\n    let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n    [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n    const valueBeforePos = this.value.slice(0, fromPos);\n    const valueAfterPos = this.value.slice(toPos);\n    const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n    this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n    const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n    return new ChangeDetails({\n      tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n    });\n  }\n\n  /**\n    @override\n  */\n  nearestInputPos(cursorPos, direction) {\n    if (!this.thousandsSeparator) return cursorPos;\n    switch (direction) {\n      case DIRECTION.NONE:\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        {\n          const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n          if (separatorAtLeftPos >= 0) {\n            const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n            if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n              return separatorAtLeftPos;\n            }\n          }\n          break;\n        }\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n        {\n          const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n          if (separatorAtRightPos >= 0) {\n            return separatorAtRightPos + this.thousandsSeparator.length;\n          }\n        }\n    }\n    return cursorPos;\n  }\n\n  /**\n    @override\n  */\n  doValidate(flags) {\n    // validate as string\n    let valid = Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));\n    if (valid) {\n      // validate as number\n      const number = this.number;\n      valid = valid && !isNaN(number) && (\n      // check min bound for negative values\n      this.min == null || this.min >= 0 || this.min <= this.number) && (\n      // check max bound for positive values\n      this.max == null || this.max <= 0 || this.number <= this.max);\n    }\n    return valid && super.doValidate(flags);\n  }\n\n  /**\n    @override\n  */\n  doCommit() {\n    if (this.value) {\n      const number = this.number;\n      let validnum = number;\n\n      // check bounds\n      if (this.min != null) validnum = Math.max(validnum, this.min);\n      if (this.max != null) validnum = Math.min(validnum, this.max);\n      if (validnum !== number) this.unmaskedValue = this.doFormat(validnum);\n      let formatted = this.value;\n      if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n      if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n      this._value = formatted;\n    }\n    super.doCommit();\n  }\n\n  /** */\n  _normalizeZeros(value) {\n    const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n    // remove leading zeros\n    parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n    // add leading zero\n    if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n    if (parts.length > 1) {\n      parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n      if (!parts[1].length) parts.length = 1; // remove fractional\n    }\n\n    return this._insertThousandsSeparators(parts.join(this.radix));\n  }\n\n  /** */\n  _padFractionalZeros(value) {\n    if (!value) return value;\n    const parts = value.split(this.radix);\n    if (parts.length < 2) parts.push('');\n    parts[1] = parts[1].padEnd(this.scale, '0');\n    return parts.join(this.radix);\n  }\n\n  /** */\n  doSkipInvalid(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let checkTail = arguments.length > 2 ? arguments[2] : undefined;\n    const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n    return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n  }\n\n  /**\n    @override\n  */\n  get unmaskedValue() {\n    return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n  }\n  set unmaskedValue(unmaskedValue) {\n    super.unmaskedValue = unmaskedValue;\n  }\n\n  /**\n    @override\n  */\n  get typedValue() {\n    return this.doParse(this.unmaskedValue);\n  }\n  set typedValue(n) {\n    this.rawInputValue = this.doFormat(n).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n  }\n\n  /** Parsed Number */\n  get number() {\n    return this.typedValue;\n  }\n  set number(number) {\n    this.typedValue = number;\n  }\n\n  /**\n    Is negative allowed\n    @readonly\n  */\n  get allowNegative() {\n    return this.signed || this.min != null && this.min < 0 || this.max != null && this.max < 0;\n  }\n\n  /**\n    @override\n  */\n  typedValueEquals(value) {\n    // handle  0 -> '' case (typed = 0 even if value = '')\n    // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n    return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n  }\n}\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.DEFAULTS = {\n  radix: ',',\n  thousandsSeparator: '',\n  mapToRadix: [MaskedNumber.UNMASKED_RADIX],\n  scale: 2,\n  signed: false,\n  normalizeZeros: true,\n  padFractionalZeros: false,\n  parse: Number,\n  format: n => n.toLocaleString('en-US', {\n    useGrouping: false,\n    maximumFractionDigits: 20\n  })\n};\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n  /**\n    @override\n    @param {Object} opts\n  */\n  _update(opts) {\n    if (opts.mask) opts.validate = opts.mask;\n    super._update(opts);\n  }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport { DIRECTION, normalizePrepare, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\nconst _excluded = [\"compiledMasks\", \"currentMaskRef\", \"currentMask\"],\n  _excluded2 = [\"mask\"];\n/** Dynamic mask for choosing apropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n  /** Currently chosen mask */\n\n  /** Compliled {@link Masked} options */\n\n  /** Chooses {@link Masked} depending on input value */\n\n  /**\n    @param {Object} opts\n  */\n  constructor(opts) {\n    super(Object.assign({}, MaskedDynamic.DEFAULTS, opts));\n    this.currentMask = null;\n  }\n\n  /**\n    @override\n  */\n  _update(opts) {\n    super._update(opts);\n    if ('mask' in opts) {\n      // mask could be totally dynamic with only `dispatch` option\n      this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => createMask(m)) : [];\n\n      // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n    }\n  }\n\n  /**\n    @override\n  */\n  _appendCharRaw(ch) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const details = this._applyDispatch(ch, flags);\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n    }\n    return details;\n  }\n  _applyDispatch() {\n    let appended = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n    const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n    const inputValue = this.rawInputValue;\n    const insertValue = flags.tail && flags._beforeTailState != null ?\n    // $FlowFixMe - tired to fight with type system\n    flags._beforeTailState._rawInputValue : inputValue;\n    const tailValue = inputValue.slice(insertValue.length);\n    const prevMask = this.currentMask;\n    const details = new ChangeDetails();\n    const prevMaskState = prevMask === null || prevMask === void 0 ? void 0 : prevMask.state;\n\n    // clone flags to prevent overwriting `_beforeTailState`\n    this.currentMask = this.doDispatch(appended, Object.assign({}, flags), tail);\n\n    // restore state after dispatch\n    if (this.currentMask) {\n      if (this.currentMask !== prevMask) {\n        // if mask changed reapply input\n        this.currentMask.reset();\n        if (insertValue) {\n          // $FlowFixMe - it's ok, we don't change current mask above\n          const d = this.currentMask.append(insertValue, {\n            raw: true\n          });\n          details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n        }\n        if (tailValue) {\n          // $FlowFixMe - it's ok, we don't change current mask above\n          details.tailShift += this.currentMask.append(tailValue, {\n            raw: true,\n            tail: true\n          }).tailShift;\n        }\n      } else {\n        // Dispatch can do something bad with state, so\n        // restore prev mask state\n        this.currentMask.state = prevMaskState;\n      }\n    }\n    return details;\n  }\n  _appendPlaceholder() {\n    const details = this._applyDispatch(...arguments);\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendPlaceholder());\n    }\n    return details;\n  }\n\n  /**\n   @override\n  */\n  _appendEager() {\n    const details = this._applyDispatch(...arguments);\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendEager());\n    }\n    return details;\n  }\n  appendTail(tail) {\n    const details = new ChangeDetails();\n    if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n    return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n  }\n  currentMaskFlags(flags) {\n    var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n    return Object.assign({}, flags, {\n      _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) === null || _flags$_beforeTailSta2 === void 0 ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n    });\n  }\n\n  /**\n    @override\n  */\n  doDispatch(appended) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n    return this.dispatch(appended, this, flags, tail);\n  }\n\n  /**\n    @override\n  */\n  doValidate(flags) {\n    return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n  }\n\n  /**\n    @override\n  */\n  doPrepare(str) {\n    let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let [s, details] = normalizePrepare(super.doPrepare(str, flags));\n    if (this.currentMask) {\n      let currentDetails;\n      [s, currentDetails] = normalizePrepare(super.doPrepare(s, this.currentMaskFlags(flags)));\n      details = details.aggregate(currentDetails);\n    }\n    return [s, details];\n  }\n\n  /**\n    @override\n  */\n  reset() {\n    var _this$currentMask;\n    (_this$currentMask = this.currentMask) === null || _this$currentMask === void 0 ? void 0 : _this$currentMask.reset();\n    this.compiledMasks.forEach(m => m.reset());\n  }\n\n  /**\n    @override\n  */\n  get value() {\n    return this.currentMask ? this.currentMask.value : '';\n  }\n  set value(value) {\n    super.value = value;\n  }\n\n  /**\n    @override\n  */\n  get unmaskedValue() {\n    return this.currentMask ? this.currentMask.unmaskedValue : '';\n  }\n  set unmaskedValue(unmaskedValue) {\n    super.unmaskedValue = unmaskedValue;\n  }\n\n  /**\n    @override\n  */\n  get typedValue() {\n    return this.currentMask ? this.currentMask.typedValue : '';\n  }\n\n  // probably typedValue should not be used with dynamic\n  set typedValue(value) {\n    let unmaskedValue = String(value);\n\n    // double check it\n    if (this.currentMask) {\n      this.currentMask.typedValue = value;\n      unmaskedValue = this.currentMask.unmaskedValue;\n    }\n    this.unmaskedValue = unmaskedValue;\n  }\n  get displayValue() {\n    return this.currentMask ? this.currentMask.displayValue : '';\n  }\n\n  /**\n    @override\n  */\n  get isComplete() {\n    var _this$currentMask2;\n    return Boolean((_this$currentMask2 = this.currentMask) === null || _this$currentMask2 === void 0 ? void 0 : _this$currentMask2.isComplete);\n  }\n\n  /**\n    @override\n  */\n  get isFilled() {\n    var _this$currentMask3;\n    return Boolean((_this$currentMask3 = this.currentMask) === null || _this$currentMask3 === void 0 ? void 0 : _this$currentMask3.isFilled);\n  }\n\n  /**\n    @override\n  */\n  remove() {\n    const details = new ChangeDetails();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask.remove(...arguments))\n      // update with dispatch\n      .aggregate(this._applyDispatch());\n    }\n    return details;\n  }\n\n  /**\n    @override\n  */\n  get state() {\n    var _this$currentMask4;\n    return Object.assign({}, super.state, {\n      _rawInputValue: this.rawInputValue,\n      compiledMasks: this.compiledMasks.map(m => m.state),\n      currentMaskRef: this.currentMask,\n      currentMask: (_this$currentMask4 = this.currentMask) === null || _this$currentMask4 === void 0 ? void 0 : _this$currentMask4.state\n    });\n  }\n  set state(state) {\n    const {\n        compiledMasks,\n        currentMaskRef,\n        currentMask\n      } = state,\n      maskedState = _objectWithoutPropertiesLoose(state, _excluded);\n    this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n    if (currentMaskRef != null) {\n      this.currentMask = currentMaskRef;\n      this.currentMask.state = currentMask;\n    }\n    super.state = maskedState;\n  }\n\n  /**\n    @override\n  */\n  extractInput() {\n    return this.currentMask ? this.currentMask.extractInput(...arguments) : '';\n  }\n\n  /**\n    @override\n  */\n  extractTail() {\n    return this.currentMask ? this.currentMask.extractTail(...arguments) : super.extractTail(...arguments);\n  }\n\n  /**\n    @override\n  */\n  doCommit() {\n    if (this.currentMask) this.currentMask.doCommit();\n    super.doCommit();\n  }\n\n  /**\n    @override\n  */\n  nearestInputPos() {\n    return this.currentMask ? this.currentMask.nearestInputPos(...arguments) : super.nearestInputPos(...arguments);\n  }\n  get overwrite() {\n    return this.currentMask ? this.currentMask.overwrite : super.overwrite;\n  }\n  set overwrite(overwrite) {\n    console.warn('\"overwrite\" option is not available in dynamic mask, use this option in siblings');\n  }\n  get eager() {\n    return this.currentMask ? this.currentMask.eager : super.eager;\n  }\n  set eager(eager) {\n    console.warn('\"eager\" option is not available in dynamic mask, use this option in siblings');\n  }\n  get skipInvalid() {\n    return this.currentMask ? this.currentMask.skipInvalid : super.skipInvalid;\n  }\n  set skipInvalid(skipInvalid) {\n    if (this.isInitialized || skipInvalid !== Masked.DEFAULTS.skipInvalid) {\n      console.warn('\"skipInvalid\" option is not available in dynamic mask, use this option in siblings');\n    }\n  }\n\n  /**\n    @override\n  */\n  maskEquals(mask) {\n    return Array.isArray(mask) && this.compiledMasks.every((m, mi) => {\n      if (!mask[mi]) return;\n      const _mask$mi = mask[mi],\n        {\n          mask: oldMask\n        } = _mask$mi,\n        restOpts = _objectWithoutPropertiesLoose(_mask$mi, _excluded2);\n      return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n    });\n  }\n\n  /**\n    @override\n  */\n  typedValueEquals(value) {\n    var _this$currentMask5;\n    return Boolean((_this$currentMask5 = this.currentMask) === null || _this$currentMask5 === void 0 ? void 0 : _this$currentMask5.typedValueEquals(value));\n  }\n}\nMaskedDynamic.DEFAULTS = {\n  dispatch: (appended, masked, flags, tail) => {\n    if (!masked.compiledMasks.length) return;\n    const inputValue = masked.rawInputValue;\n\n    // simulate input\n    const inputs = masked.compiledMasks.map((m, index) => {\n      const isCurrent = masked.currentMask === m;\n      const startInputPos = isCurrent ? m.value.length : m.nearestInputPos(m.value.length, DIRECTION.FORCE_LEFT);\n      if (m.rawInputValue !== inputValue) {\n        m.reset();\n        m.append(inputValue, {\n          raw: true\n        });\n      } else if (!isCurrent) {\n        m.remove(startInputPos);\n      }\n      m.append(appended, masked.currentMaskFlags(flags));\n      m.appendTail(tail);\n      return {\n        index,\n        weight: m.rawInputValue.length,\n        totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.value.length, DIRECTION.FORCE_LEFT)))\n      };\n    });\n\n    // pop masks with longer values first\n    inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n    return masked.compiledMasks[inputs[0].index];\n  }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n  MASKED: 'value',\n  UNMASKED: 'unmaskedValue',\n  TYPED: 'typedValue'\n};\n\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(mask) {\n  let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : PIPE_TYPE.MASKED;\n  let to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : PIPE_TYPE.MASKED;\n  const masked = createMask(mask);\n  return value => masked.runIsolated(m => {\n    m[from] = value;\n    return m[to];\n  });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value) {\n  for (var _len = arguments.length, pipeArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    pipeArgs[_key - 1] = arguments[_key];\n  }\n  return createPipe(...pipeArgs)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default } from './core/holder.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as createMask } from './masked/factory.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nimport './_rollupPluginBabelHelpers-6b3bd404.js';\nimport './core/utils.js';\nimport './core/action-details.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/input-definition.js';\nimport './masked/pattern/fixed-definition.js';\nimport './masked/pattern/chunk-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n  globalThis.IMask = IMask;\n} catch (e) {}\n","export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n","import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init(window: Window & { wrap?: (...args: any[]) => any }) {\n  // get wrapped window if using Shadow DOM polyfill\n\n  realWindow = window\n\n  // create a TextNode\n  const el = window.document.createTextNode('')\n\n  // check if it's wrapped by a polyfill\n  if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n    // use wrapped window\n    window = window.wrap(window)\n  }\n\n  win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n  init(window)\n}\n\nexport function getWindow(node: any) {\n  if (isWindow(node)) {\n    return node\n  }\n\n  const rootNode = node.ownerDocument || node\n\n  return rootNode.defaultView || win.window\n}\n","import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n  if (!thing || typeof thing !== 'object') {\n    return false\n  }\n\n  const _window = win.getWindow(thing) || win.window\n\n  return /object|function/.test(typeof Element)\n    ? thing instanceof Element || thing instanceof _window.Element\n    : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n  object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = <T extends unknown>(thing: any): thing is T[] =>\n  object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n  window,\n  docFrag,\n  object,\n  func,\n  number,\n  bool,\n  string,\n  element,\n  plainObject,\n  array,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    draggable(options: Partial<OrBoolean<DraggableOptions>> | boolean): this\n    draggable(): DraggableOptions\n    /**\n     * ```js\n     * interact(element).draggable({\n     *     onstart: function (event) {},\n     *     onmove : function (event) {},\n     *     onend  : function (event) {},\n     *\n     *     // the axis in which the first movement must be\n     *     // for the drag sequence to start\n     *     // 'xy' by default - any direction\n     *     startAxis: 'x' || 'y' || 'xy',\n     *\n     *     // 'xy' by default - don't restrict to one axis (move in any direction)\n     *     // 'x' or 'y' to restrict movement to either axis\n     *     // 'start' to restrict movement to the axis the drag started in\n     *     lockAxis: 'x' || 'y' || 'xy' || 'start',\n     *\n     *     // max number of drags that can happen concurrently\n     *     // with elements of this Interactable. Infinity by default\n     *     max: Infinity,\n     *\n     *     // max number of drags that can target the same element+Interactable\n     *     // 1 by default\n     *     maxPerElement: 2\n     * })\n     *\n     * var isDraggable = interact('element').draggable(); // true\n     * ```\n     *\n     * Get or set whether drag actions can be performed on the target\n     *\n     * @param options - true/false or An object with event\n     * listeners to be fired on drag events (object makes the Interactable\n     * draggable)\n     */\n    draggable(options?: Partial<OrBoolean<DraggableOptions>> | boolean): this | DraggableOptions\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    drag: DraggableOptions\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    drag?: typeof drag\n  }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport interface DraggableOptions extends PerActionDefaults {\n  startAxis?: 'x' | 'y' | 'xy'\n  lockAxis?: 'x' | 'y' | 'xy' | 'start'\n  oninertiastart?: ListenersArg\n  onstart?: ListenersArg\n  onmove?: ListenersArg\n  onend?: ListenersArg\n}\n\nfunction install(scope: Scope) {\n  const { actions, Interactable, defaults } = scope\n\n  Interactable.prototype.draggable = drag.draggable\n\n  actions.map.drag = drag\n  actions.methodDict.drag = 'draggable'\n\n  defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove({ interaction }) {\n  if (interaction.prepared.name !== 'drag') return\n\n  const axis = interaction.prepared.axis\n\n  if (axis === 'x') {\n    interaction.coords.cur.page.y = interaction.coords.start.page.y\n    interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n    interaction.coords.velocity.client.y = 0\n    interaction.coords.velocity.page.y = 0\n  } else if (axis === 'y') {\n    interaction.coords.cur.page.x = interaction.coords.start.page.x\n    interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n    interaction.coords.velocity.client.x = 0\n    interaction.coords.velocity.page.x = 0\n  }\n}\n\nfunction move({ iEvent, interaction }) {\n  if (interaction.prepared.name !== 'drag') return\n\n  const axis = interaction.prepared.axis\n\n  if (axis === 'x' || axis === 'y') {\n    const opposite = axis === 'x' ? 'y' : 'x'\n\n    iEvent.page[opposite] = interaction.coords.start.page[opposite]\n    iEvent.client[opposite] = interaction.coords.start.client[opposite]\n    iEvent.delta[opposite] = 0\n  }\n}\n\nconst draggable: Interactable['draggable'] = function draggable(\n  this: Interactable,\n  options?: DraggableOptions | boolean,\n): any {\n  if (is.object(options)) {\n    this.options.drag.enabled = options.enabled !== false\n    this.setPerAction('drag', options)\n    this.setOnEvents('drag', options)\n\n    if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n      this.options.drag.lockAxis = options.lockAxis\n    }\n    if (/^(xy|x|y)$/.test(options.startAxis)) {\n      this.options.drag.startAxis = options.startAxis\n    }\n\n    return this\n  }\n\n  if (is.bool(options)) {\n    this.options.drag.enabled = options\n\n    return this\n  }\n\n  return this.options.drag as DraggableOptions\n}\n\nconst drag: Plugin = {\n  id: 'actions/drag',\n  install,\n  listeners: {\n    'interactions:before-action-move': beforeMove,\n    'interactions:action-resume': beforeMove,\n\n    // dragmove\n    'interactions:action-move': move,\n    'auto-start:check': (arg) => {\n      const { interaction, interactable, buttons } = arg\n      const dragOptions = interactable.options.drag\n\n      if (\n        !(dragOptions && dragOptions.enabled) ||\n        // check mouseButton setting if the pointer is down\n        (interaction.pointerIsDown &&\n          /mouse|pointer/.test(interaction.pointerType) &&\n          (buttons & interactable.options.drag.mouseButtons) === 0)\n      ) {\n        return undefined\n      }\n\n      arg.action = {\n        name: 'drag',\n        axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n      }\n\n      return false\n    },\n  },\n  draggable,\n  beforeMove,\n  move,\n  defaults: {\n    startAxis: 'xy',\n    lockAxis: 'xy',\n  } as DraggableOptions,\n\n  getCursor() {\n    return 'move'\n  },\n\n  filterEventType: (type: string) => type.search('drag') === 0,\n}\n\nexport default drag\n","const domObjects: {\n  init: any\n  document: Document\n  DocumentFragment: typeof DocumentFragment\n  SVGElement: typeof SVGElement\n  SVGSVGElement: typeof SVGSVGElement\n  SVGElementInstance: any\n  Element: typeof Element\n  HTMLElement: typeof HTMLElement\n  Event: typeof Event\n  Touch: typeof Touch\n  PointerEvent: typeof PointerEvent\n} = {\n  init,\n  document: null,\n  DocumentFragment: null,\n  SVGElement: null,\n  SVGSVGElement: null,\n  SVGElementInstance: null,\n  Element: null,\n  HTMLElement: null,\n  Event: null,\n  Touch: null,\n  PointerEvent: null,\n}\n\nfunction blank() {}\n\nexport default domObjects\n\nfunction init(window: Window) {\n  const win = window as any\n\n  domObjects.document = win.document\n  domObjects.DocumentFragment = win.DocumentFragment || blank\n  domObjects.SVGElement = win.SVGElement || blank\n  domObjects.SVGSVGElement = win.SVGSVGElement || blank\n  domObjects.SVGElementInstance = win.SVGElementInstance || blank\n  domObjects.Element = win.Element || blank\n  domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n  domObjects.Event = win.Event\n  domObjects.Touch = win.Touch || blank\n  domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n","import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n  init,\n  supportsTouch: null as boolean,\n  supportsPointerEvent: null as boolean,\n  isIOS7: null as boolean,\n  isIOS: null as boolean,\n  isIe9: null as boolean,\n  isOperaMobile: null as boolean,\n  prefixedMatchesSelector: null as 'matches',\n  pEventTypes: null as {\n    up: string\n    down: string\n    over: string\n    out: string\n    move: string\n    cancel: string\n  },\n  wheelEvent: null as string,\n}\n\nfunction init(window: any) {\n  const Element = domObjects.Element\n  const navigator: Partial<Navigator> = window.navigator || {}\n\n  // Does the browser support touch input?\n  browser.supportsTouch =\n    'ontouchstart' in window ||\n    (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n  // Does the browser support PointerEvents\n  // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n  browser.supportsPointerEvent = (navigator as any).pointerEnabled !== false && !!domObjects.PointerEvent\n\n  browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n  // scrolling doesn't change the result of getClientRects on iOS 7\n  browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n  browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n  // Opera Mobile must be handled differently\n  browser.isOperaMobile =\n    navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n  // prefix matchesSelector\n  browser.prefixedMatchesSelector = (\n    'matches' in Element.prototype\n      ? 'matches'\n      : 'webkitMatchesSelector' in Element.prototype\n        ? 'webkitMatchesSelector'\n        : 'mozMatchesSelector' in Element.prototype\n          ? 'mozMatchesSelector'\n          : 'oMatchesSelector' in Element.prototype\n            ? 'oMatchesSelector'\n            : 'msMatchesSelector'\n  ) as 'matches'\n\n  browser.pEventTypes = browser.supportsPointerEvent\n    ? domObjects.PointerEvent === window.MSPointerEvent\n      ? {\n          up: 'MSPointerUp',\n          down: 'MSPointerDown',\n          over: 'mouseover',\n          out: 'mouseout',\n          move: 'MSPointerMove',\n          cancel: 'MSPointerCancel',\n        }\n      : {\n          up: 'pointerup',\n          down: 'pointerdown',\n          over: 'pointerover',\n          out: 'pointerout',\n          move: 'pointermove',\n          cancel: 'pointercancel',\n        }\n    : null\n\n  // because Webkit and Opera still use 'mousewheel' event type\n  browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains(parent: Node, child: Node) {\n  if (parent.contains) {\n    return parent.contains(child as Node)\n  }\n\n  while (child) {\n    if (child === parent) {\n      return true\n    }\n\n    child = (child as Node).parentNode\n  }\n\n  return false\n}\n\nexport function closest(element: Node, selector: string) {\n  while (is.element(element)) {\n    if (matchesSelector(element, selector)) {\n      return element\n    }\n\n    element = parentNode(element)\n  }\n\n  return null\n}\n\nexport function parentNode(node: Node | Document) {\n  let parent = node.parentNode\n\n  if (is.docFrag(parent)) {\n    // skip past #shado-root fragments\n    // tslint:disable-next-line\n    while ((parent = (parent as any).host) && is.docFrag(parent)) {\n      continue\n    }\n\n    return parent\n  }\n\n  return parent\n}\n\nexport function matchesSelector(element: Element, selector: string) {\n  // remove /deep/ from selectors if shadowDOM polyfill is used\n  if (win.window !== win.realWindow) {\n    selector = selector.replace(/\\/deep\\//g, ' ')\n  }\n\n  return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement(elements: Element[] | NodeListOf<globalThis.Element>) {\n  let deepestNodeParents: Node[] = []\n  let deepestNodeIndex: number\n\n  for (let i = 0; i < elements.length; i++) {\n    const currentNode = elements[i]\n    const deepestNode: Node = elements[deepestNodeIndex]\n\n    // node may appear in elements array multiple times\n    if (!currentNode || i === deepestNodeIndex) {\n      continue\n    }\n\n    if (!deepestNode) {\n      deepestNodeIndex = i\n      continue\n    }\n\n    const currentNodeParent = getParent(currentNode)\n    const deepestNodeParent = getParent(deepestNode)\n\n    // check if the deepest or current are document.documentElement/rootElement\n    // - if the current node is, do nothing and continue\n    if (currentNodeParent === currentNode.ownerDocument) {\n      continue\n    }\n    // - if deepest is, update with the current node and continue to next\n    else if (deepestNodeParent === currentNode.ownerDocument) {\n      deepestNodeIndex = i\n      continue\n    }\n\n    // compare zIndex of siblings\n    if (currentNodeParent === deepestNodeParent) {\n      if (zIndexIsHigherThan(currentNode, deepestNode)) {\n        deepestNodeIndex = i\n      }\n\n      continue\n    }\n\n    // populate the ancestry array for the latest deepest node\n    deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n    let ancestryStart: Node\n\n    // if the deepest node is an HTMLElement and the current node is a non root svg element\n    if (\n      deepestNode instanceof domObjects.HTMLElement &&\n      currentNode instanceof domObjects.SVGElement &&\n      !(currentNode instanceof domObjects.SVGSVGElement)\n    ) {\n      // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n      if (currentNode === deepestNodeParent) {\n        continue\n      }\n\n      ancestryStart = currentNode.ownerSVGElement\n    } else {\n      ancestryStart = currentNode\n    }\n\n    const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n    let commonIndex = 0\n\n    // get (position of closest common ancestor) + 1\n    while (\n      currentNodeParents[commonIndex] &&\n      currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n    ) {\n      commonIndex++\n    }\n\n    const parents = [\n      currentNodeParents[commonIndex - 1],\n      currentNodeParents[commonIndex],\n      deepestNodeParents[commonIndex],\n    ]\n\n    if (parents[0]) {\n      let child = parents[0].lastChild\n\n      while (child) {\n        if (child === parents[1]) {\n          deepestNodeIndex = i\n          deepestNodeParents = currentNodeParents\n\n          break\n        } else if (child === parents[2]) {\n          break\n        }\n\n        child = child.previousSibling\n      }\n    }\n  }\n\n  return deepestNodeIndex\n}\n\nfunction getNodeParents(node: Node, limit?: Node) {\n  const parents: Node[] = []\n  let parent: Node = node\n  let parentParent: Node\n\n  while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n    parents.unshift(parent)\n    parent = parentParent\n  }\n\n  return parents\n}\n\nfunction zIndexIsHigherThan(higherNode: Node, lowerNode: Node) {\n  const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n  const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n  return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo(element: Element, selector: string, limit: Node) {\n  while (is.element(element)) {\n    if (matchesSelector(element, selector)) {\n      return true\n    }\n\n    element = parentNode(element) as Element\n\n    if (element === limit) {\n      return matchesSelector(element, selector)\n    }\n  }\n\n  return false\n}\n\nexport function getActualElement(element: Element) {\n  return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY(relevantWindow?: Window) {\n  relevantWindow = relevantWindow || win.window\n  return {\n    x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n    y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n  }\n}\n\nexport function getElementClientRect(element: Element): Required<Rect> {\n  const clientRect =\n    element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n  return (\n    clientRect && {\n      left: clientRect.left,\n      right: clientRect.right,\n      top: clientRect.top,\n      bottom: clientRect.bottom,\n      width: clientRect.width || clientRect.right - clientRect.left,\n      height: clientRect.height || clientRect.bottom - clientRect.top,\n    }\n  )\n}\n\nexport function getElementRect(element: Element) {\n  const clientRect = getElementClientRect(element)\n\n  if (!browser.isIOS7 && clientRect) {\n    const scroll = getScrollXY(win.getWindow(element))\n\n    clientRect.left += scroll.x\n    clientRect.right += scroll.x\n    clientRect.top += scroll.y\n    clientRect.bottom += scroll.y\n  }\n\n  return clientRect\n}\n\nexport function getPath(node: Node | Document) {\n  const path = []\n\n  while (node) {\n    path.push(node)\n    node = parentNode(node)\n  }\n\n  return path\n}\n\nexport function trySelector(value: Target) {\n  if (!is.string(value)) {\n    return false\n  }\n\n  // an exception will be raised if it is invalid\n  domObjects.document.querySelector(value)\n  return true\n}\n","export default function extend<T, U extends object>(dest: U & Partial<T>, source: T): T & U {\n  for (const prop in source) {\n    ;(dest as unknown as T)[prop] = source[prop]\n  }\n\n  const ret = dest as T & U\n\n  return ret\n}\n","import type {\n  HasGetRect,\n  RectResolvable,\n  Rect,\n  Element,\n  Point,\n  FullRect,\n  EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult(value: any, target: HasGetRect, element: Node) {\n  if (value === 'parent') {\n    return parentNode(element)\n  }\n\n  if (value === 'self') {\n    return target.getRect(element as Element)\n  }\n\n  return closest(element, value)\n}\n\nexport function resolveRectLike<T extends any[]>(\n  value: RectResolvable<T>,\n  target?: HasGetRect,\n  element?: Node,\n  functionArgs?: T,\n) {\n  let returnValue: any = value\n  if (is.string(returnValue)) {\n    returnValue = getStringOptionResult(returnValue, target, element)\n  } else if (is.func(returnValue)) {\n    returnValue = returnValue(...functionArgs)\n  }\n\n  if (is.element(returnValue)) {\n    returnValue = getElementRect(returnValue)\n  }\n\n  return returnValue as Rect\n}\n\nexport function toFullRect(rect: Rect): FullRect {\n  const { top, left, bottom, right } = rect\n  const width = rect.width ?? rect.right - rect.left\n  const height = rect.height ?? rect.bottom - rect.top\n\n  return { top, left, bottom, right, width, height }\n}\n\nexport function rectToXY(rect: Rect | Point) {\n  return (\n    rect && {\n      x: 'x' in rect ? rect.x : rect.left,\n      y: 'y' in rect ? rect.y : rect.top,\n    }\n  )\n}\n\nexport function xywhToTlbr<T extends Partial<Rect & Point>>(rect: T) {\n  if (rect && !('left' in rect && 'top' in rect)) {\n    rect = extend({}, rect)\n\n    rect.left = rect.x || 0\n    rect.top = rect.y || 0\n    rect.right = rect.right || rect.left + rect.width\n    rect.bottom = rect.bottom || rect.top + rect.height\n  }\n\n  return rect as Rect & T\n}\n\nexport function tlbrToXywh(rect: Rect & Partial<Point>) {\n  if (rect && !('x' in rect && 'y' in rect)) {\n    rect = extend({}, rect)\n\n    rect.x = rect.left || 0\n    rect.y = rect.top || 0\n    rect.width = rect.width || (rect.right || 0) - rect.x\n    rect.height = rect.height || (rect.bottom || 0) - rect.y\n  }\n\n  return rect as FullRect & Point\n}\n\nexport function addEdges(edges: EdgeOptions, rect: Rect, delta: Point) {\n  if (edges.left) {\n    rect.left += delta.x\n  }\n  if (edges.right) {\n    rect.right += delta.x\n  }\n  if (edges.top) {\n    rect.top += delta.y\n  }\n  if (edges.bottom) {\n    rect.bottom += delta.y\n  }\n\n  rect.width = rect.right - rect.left\n  rect.height = rect.bottom - rect.top\n}\n","import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function getOriginXY(\n  target: HasGetRect & { options: PerActionDefaults },\n  element: Node,\n  actionName?: ActionName,\n) {\n  const actionOptions = actionName && (target.options as any)[actionName]\n  const actionOrigin = actionOptions && actionOptions.origin\n  const origin = actionOrigin || target.options.origin\n\n  const originRect = resolveRectLike(origin, target, element, [target && element])\n\n  return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport is from './is'\n\nexport interface NormalizedListeners {\n  [type: string]: Listener[]\n}\n\nexport default function normalize(\n  type: EventTypes,\n  listeners?: ListenersArg | ListenersArg[] | null,\n  filter = (_typeOrPrefix: string) => true,\n  result?: NormalizedListeners,\n): NormalizedListeners {\n  result = result || {}\n\n  if (is.string(type) && type.search(' ') !== -1) {\n    type = split(type)\n  }\n\n  if (is.array(type)) {\n    type.forEach((t) => normalize(t, listeners, filter, result))\n    return result\n  }\n\n  // before:  type = [{ drag: () => {} }], listeners = undefined\n  // after:   type = ''                  , listeners = [{ drag: () => {} }]\n  if (is.object(type)) {\n    listeners = type\n    type = ''\n  }\n\n  if (is.func(listeners) && filter(type)) {\n    result[type] = result[type] || []\n    result[type].push(listeners)\n  } else if (is.array(listeners)) {\n    for (const l of listeners) {\n      normalize(type, l, filter, result)\n    }\n  } else if (is.object(listeners)) {\n    for (const prefix in listeners) {\n      const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n      normalize(combinedTypes, listeners[prefix], filter, result)\n    }\n  }\n\n  return result as NormalizedListeners\n}\n\nfunction split(type: string) {\n  return type.trim().split(/ +/)\n}\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend<T>(dest: Partial<T & { __set?: Partial<T> }>, source: T) {\n  dest.__set ||= {} as any\n\n  for (const prop in source) {\n    // skip deprecated prefixed properties\n    if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n    if (typeof dest[prop] !== 'function' && prop !== '__set') {\n      Object.defineProperty(dest, prop, {\n        get() {\n          if (prop in dest.__set) return dest.__set[prop]\n\n          return (dest.__set[prop] = source[prop] as any)\n        },\n        set(value: any) {\n          dest.__set[prop] = value\n        },\n        configurable: true,\n      })\n    }\n  }\n  return dest\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords(dest: CoordsSetMember, src: CoordsSetMember) {\n  dest.page = dest.page || ({} as any)\n  dest.page.x = src.page.x\n  dest.page.y = src.page.y\n\n  dest.client = dest.client || ({} as any)\n  dest.client.x = src.client.x\n  dest.client.y = src.client.y\n\n  dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n  targetObj.page.x = cur.page.x - prev.page.x\n  targetObj.page.y = cur.page.y - prev.page.y\n  targetObj.client.x = cur.client.x - prev.client.x\n  targetObj.client.y = cur.client.y - prev.client.y\n  targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember) {\n  const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n  targetObj.page.x = delta.page.x / dt\n  targetObj.page.y = delta.page.y / dt\n  targetObj.client.x = delta.client.x / dt\n  targetObj.client.y = delta.client.y / dt\n  targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords(targetObj: CoordsSetMember) {\n  targetObj.page.x = 0\n  targetObj.page.y = 0\n  targetObj.client.x = 0\n  targetObj.client.y = 0\n}\n\nexport function isNativePointer(pointer: any) {\n  return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point) {\n  xy = xy || ({} as Point)\n  type = type || 'page'\n\n  xy.x = pointer[(type + 'X') as 'pageX']\n  xy.y = pointer[(type + 'Y') as 'pageY']\n\n  return xy\n}\n\nexport function getPageXY(pointer: PointerType | InteractEvent, page?: Point) {\n  page = page || { x: 0, y: 0 }\n\n  // Opera Mobile handles the viewport and scrolling oddly\n  if (browser.isOperaMobile && isNativePointer(pointer)) {\n    getXY('screen', pointer, page)\n\n    page.x += window.scrollX\n    page.y += window.scrollY\n  } else {\n    getXY('page', pointer, page)\n  }\n\n  return page\n}\n\nexport function getClientXY(pointer: PointerType, client: Point) {\n  client = client || ({} as any)\n\n  if (browser.isOperaMobile && isNativePointer(pointer)) {\n    // Opera Mobile handles the viewport and scrolling oddly\n    getXY('screen', pointer, client)\n  } else {\n    getXY('client', pointer, client)\n  }\n\n  return client\n}\n\nexport function getPointerId(pointer: { pointerId?: number; identifier?: number; type?: string }) {\n  return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n  const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n  getPageXY(pointer, dest.page)\n  getClientXY(pointer, dest.client)\n\n  dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair(event: TouchEvent | PointerType[]) {\n  const touches: PointerType[] = []\n\n  // array of touches is supplied\n  if (is.array(event)) {\n    touches[0] = event[0]\n    touches[1] = event[1]\n  }\n  // an event\n  else {\n    if (event.type === 'touchend') {\n      if (event.touches.length === 1) {\n        touches[0] = event.touches[0]\n        touches[1] = event.changedTouches[0]\n      } else if (event.touches.length === 0) {\n        touches[0] = event.changedTouches[0]\n        touches[1] = event.changedTouches[1]\n      }\n    } else {\n      touches[0] = event.touches[0]\n      touches[1] = event.touches[1]\n    }\n  }\n\n  return touches\n}\n\nexport function pointerAverage(pointers: PointerType[]) {\n  const average = {\n    pageX: 0,\n    pageY: 0,\n    clientX: 0,\n    clientY: 0,\n    screenX: 0,\n    screenY: 0,\n  }\n\n  type CoordKeys = keyof typeof average\n\n  for (const pointer of pointers) {\n    for (const prop in average) {\n      average[prop as CoordKeys] += pointer[prop as CoordKeys]\n    }\n  }\n  for (const prop in average) {\n    average[prop as CoordKeys] /= pointers.length\n  }\n\n  return average\n}\n\nexport function touchBBox(event: PointerType[]) {\n  if (!event.length) {\n    return null\n  }\n\n  const touches = getTouchPair(event)\n  const minX = Math.min(touches[0].pageX, touches[1].pageX)\n  const minY = Math.min(touches[0].pageY, touches[1].pageY)\n  const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n  const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n  return {\n    x: minX,\n    y: minY,\n    left: minX,\n    top: minY,\n    right: maxX,\n    bottom: maxY,\n    width: maxX - minX,\n    height: maxY - minY,\n  }\n}\n\nexport function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string) {\n  const sourceX = (deltaSource + 'X') as 'pageX'\n  const sourceY = (deltaSource + 'Y') as 'pageY'\n  const touches = getTouchPair(event)\n\n  const dx = touches[0][sourceX] - touches[1][sourceX]\n  const dy = touches[0][sourceY] - touches[1][sourceY]\n\n  return hypot(dx, dy)\n}\n\nexport function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string) {\n  const sourceX = (deltaSource + 'X') as 'pageX'\n  const sourceY = (deltaSource + 'Y') as 'pageY'\n  const touches = getTouchPair(event)\n  const dx = touches[1][sourceX] - touches[0][sourceX]\n  const dy = touches[1][sourceY] - touches[0][sourceY]\n  const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n  return angle\n}\n\nexport function getPointerType(pointer: { pointerType?: string; identifier?: number; type?: string }) {\n  return is.string(pointer.pointerType)\n    ? pointer.pointerType\n    : is.number(pointer.pointerType)\n      ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n      : // if the PointerEvent API isn't available, then the \"pointer\" must\n        // be either a MouseEvent, TouchEvent, or Touch object\n        /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n        ? 'touch'\n        : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets(event: Event) {\n  const path = is.func(event.composedPath)\n    ? (event.composedPath() as Element[])\n    : (event as unknown as { path: Element[] }).path\n\n  return [\n    domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n    domUtils.getActualElement(event.currentTarget as Element),\n  ]\n}\n\nexport function newCoords(): CoordsSetMember {\n  return {\n    page: { x: 0, y: 0 },\n    client: { x: 0, y: 0 },\n    timeStamp: 0,\n  }\n}\n\nexport function coordsToEvent(coords: MockCoords) {\n  const event = {\n    coords,\n    get page() {\n      return this.coords.page\n    },\n    get client() {\n      return this.coords.client\n    },\n    get timeStamp() {\n      return this.coords.timeStamp\n    },\n    get pageX() {\n      return this.coords.page.x\n    },\n    get pageY() {\n      return this.coords.page.y\n    },\n    get clientX() {\n      return this.coords.client.x\n    },\n    get clientY() {\n      return this.coords.client.y\n    },\n    get pointerId() {\n      return this.coords.pointerId\n    },\n    get target() {\n      return this.coords.target\n    },\n    get type() {\n      return this.coords.type\n    },\n    get pointerType() {\n      return this.coords.pointerType\n    },\n    get buttons() {\n      return this.coords.buttons\n    },\n    preventDefault() {},\n  }\n\n  return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n  page: Point\n  client: Point\n  timeStamp?: number\n  pointerId?: any\n  target?: any\n  type?: string\n  pointerType?: string\n  buttons?: number\n}\n\nexport { pointerExtend }\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent<T extends ActionName | null = never> {\n  declare type: string\n  declare target: EventTarget\n  declare currentTarget: Node\n  declare interactable: Interactable\n  /** @internal */\n  declare _interaction: Interaction<T>\n  declare timeStamp: number\n  immediatePropagationStopped = false\n  propagationStopped = false\n\n  constructor(interaction: Interaction<T>) {\n    this._interaction = interaction\n  }\n\n  preventDefault() {}\n\n  /**\n   * Don't call any other listeners (even on the current target)\n   */\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n\n  /**\n   * Don't call listeners on the remaining targets\n   */\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true\n  }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent<T extends ActionName | null = never> {\n  interaction: InteractionProxy<T>\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n  get(this: BaseEvent) {\n    return this._interaction._proxy\n  },\n  set(this: BaseEvent) {},\n})\n","type Filter<T> = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = <T>(array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = <T>(array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = <T, U>(target: Array<T | U>, source: U[]) => {\n  for (const item of source) {\n    target.push(item)\n  }\n\n  return target\n}\n\nexport const from = <T = any>(source: ArrayLike<T>) => merge([] as T[], source as T[])\n\nexport const findIndex = <T>(array: T[], func: Filter<T>) => {\n  for (let i = 0; i < array.length; i++) {\n    if (func(array[i], i, array)) {\n      return i\n    }\n  }\n\n  return -1\n}\n\nexport const find = <T = any>(array: T[], func: Filter<T>): T | undefined => array[findIndex(array, func)]\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n  declare target: Element\n  dropzone: Interactable\n  dragEvent: InteractEvent<'drag'>\n  relatedTarget: Element\n  draggable: Interactable\n  propagationStopped = false\n  immediatePropagationStopped = false\n\n  /**\n   * Class of events fired on dropzones during drags with acceptable targets.\n   */\n  constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n    super(dragEvent._interaction)\n\n    const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n    this.type = type\n    this.target = element\n    this.currentTarget = element\n    this.dropzone = dropzone\n    this.dragEvent = dragEvent\n    this.relatedTarget = dragEvent.target\n    this.draggable = dragEvent.interactable\n    this.timeStamp = dragEvent.timeStamp\n  }\n\n  /**\n   * If this is a `dropactivate` event, the dropzone element will be\n   * deactivated.\n   *\n   * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n   * dropzone element and more.\n   */\n  reject() {\n    const { dropState } = this._interaction\n\n    if (\n      this.type !== 'dropactivate' &&\n      (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n    ) {\n      return\n    }\n\n    dropState.prev.dropzone = this.dropzone\n    dropState.prev.element = this.target\n\n    dropState.rejected = true\n    dropState.events.enter = null\n\n    this.stopImmediatePropagation()\n\n    if (this.type === 'dropactivate') {\n      const activeDrops = dropState.activeDrops\n      const index = arr.findIndex(\n        activeDrops,\n        ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n      )\n\n      dropState.activeDrops.splice(index, 1)\n\n      const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n      deactivateEvent.dropzone = this.dropzone\n      deactivateEvent.target = this.target\n\n      this.dropzone.fire(deactivateEvent)\n    } else {\n      this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n    }\n  }\n\n  preventDefault() {}\n\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true\n  }\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '../drag/plugin'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n/* eslint-enable import/no-duplicates */\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n  dragEvent: any, // related drag operation\n  event: any, // touch or mouse EventEmitter\n  dropped: boolean, // default checker result\n  dropzone: Interactable, // dropzone interactable\n  dropElement: Element, // drop zone element\n  draggable: Interactable, // draggable's Interactable\n  draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n  accept?:\n    | string\n    | Element\n    | (({ dropzone, draggableElement }: { dropzone: Interactable; draggableElement: Element }) => boolean)\n  // How the overlap is checked on the drop zone\n  overlap?: 'pointer' | 'center' | number\n  checker?: DropFunctionChecker\n\n  ondropactivate?: ListenersArg\n  ondropdeactivate?: ListenersArg\n  ondragenter?: ListenersArg\n  ondragleave?: ListenersArg\n  ondropmove?: ListenersArg\n  ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n  (this: Interactable, options: DropzoneOptions | boolean): Interactable\n  (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    /**\n     *\n     * ```js\n     * interact('.drop').dropzone({\n     *   accept: '.can-drop' || document.getElementById('single-drop'),\n     *   overlap: 'pointer' || 'center' || zeroToOne\n     * }\n     * ```\n     *\n     * Returns or sets whether draggables can be dropped onto this target to\n     * trigger drop events\n     *\n     * Dropzones can receive the following events:\n     *  - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n     *  - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n     *  - `dragmove` when a draggable that has entered the dropzone is moved\n     *  - `drop` when a draggable is dropped into this dropzone\n     *\n     * Use the `accept` option to allow only elements that match the given CSS\n     * selector or element. The value can be:\n     *\n     *  - **an Element** - only that element can be dropped into this dropzone.\n     *  - **a string**, - the element being dragged must match it as a CSS selector.\n     *  - **`null`** - accept options is cleared - it accepts any element.\n     *\n     * Use the `overlap` option to set how drops are checked for. The allowed\n     * values are:\n     *\n     *   - `'pointer'`, the pointer must be over the dropzone (default)\n     *   - `'center'`, the draggable element's center must be over the dropzone\n     *   - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n     *   e.g. `0.5` for drop to happen when half of the area of the draggable is\n     *   over the dropzone\n     *\n     * Use the `checker` option to specify a function to check if a dragged element\n     * is over this Interactable.\n     *\n     * @param options - The new options to be set\n     */\n    dropzone(options: DropzoneOptions | boolean): Interactable\n    /** @returns The current setting */\n    dropzone(): DropzoneOptions\n\n    /**\n     * ```js\n     * interact(target)\n     * .dropChecker(function(dragEvent,         // related dragmove or dragend event\n     *                       event,             // TouchEvent/PointerEvent/MouseEvent\n     *                       dropped,           // bool result of the default checker\n     *                       dropzone,          // dropzone Interactable\n     *                       dropElement,       // dropzone elemnt\n     *                       draggable,         // draggable Interactable\n     *                       draggableElement) {// draggable element\n     *\n     *   return dropped && event.target.hasAttribute('allow-drop')\n     * }\n     * ```\n     */\n    dropCheck(\n      dragEvent: InteractEvent,\n      event: PointerEventType,\n      draggable: Interactable,\n      draggableElement: Element,\n      dropElemen: Element,\n      rect: any,\n    ): boolean\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    dropState?: DropState\n  }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface InteractEvent {\n    /** @internal */\n    prevDropzone?: Interactable\n    dropzone?: Interactable\n    dragEnter?: Element\n    dragLeave?: Element\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    drop: DropzoneOptions\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    dynamicDrop?: boolean\n  }\n\n  interface SignalArgs {\n    'actions/drop:start': DropSignalArg\n    'actions/drop:move': DropSignalArg\n    'actions/drop:end': DropSignalArg\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    drop?: typeof drop\n  }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n  interface InteractStatic {\n    /**\n     * Returns or sets whether the dimensions of dropzone elements are calculated\n     * on every dragmove or only on dragstart for the default dropChecker\n     *\n     * @param {boolean} [newValue] True to check on each move. False to check only\n     * before start\n     * @return {boolean | interact} The current setting or interact\n     */\n    dynamicDrop: (newValue?: boolean) => boolean | this\n  }\n}\n\ninterface DropSignalArg {\n  interaction: Interaction<'drag'>\n  dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n  dropzone: Interactable\n  element: Element\n  rect: Rect\n}\n\nexport interface DropState {\n  cur: {\n    // the dropzone a drag target might be dropped into\n    dropzone: Interactable\n    // the element at the time of checking\n    element: Element\n  }\n  prev: {\n    // the dropzone that was recently dragged away from\n    dropzone: Interactable\n    // the element at the time of checking\n    element: Element\n  }\n  // wheather the potential drop was rejected from a listener\n  rejected: boolean\n  // the drop events related to the current drag event\n  events: FiredDropEvents\n  activeDrops: ActiveDrop[]\n}\n\nfunction install(scope: Scope) {\n  const { actions, interactStatic: interact, Interactable, defaults } = scope\n\n  scope.usePlugin(drag)\n\n  Interactable.prototype.dropzone = function (this: Interactable, options) {\n    return dropzoneMethod(this, options)\n  } as Interactable['dropzone']\n\n  Interactable.prototype.dropCheck = function (\n    this: Interactable,\n    dragEvent,\n    event,\n    draggable,\n    draggableElement,\n    dropElement,\n    rect,\n  ) {\n    return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n  }\n\n  interact.dynamicDrop = function (newValue?: boolean) {\n    if (is.bool(newValue)) {\n      // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n      //  calcRects(dropzones)\n      // }\n\n      scope.dynamicDrop = newValue\n\n      return interact\n    }\n    return scope.dynamicDrop!\n  }\n\n  extend(actions.phaselessTypes, {\n    dragenter: true,\n    dragleave: true,\n    dropactivate: true,\n    dropdeactivate: true,\n    dropmove: true,\n    drop: true,\n  })\n  actions.methodDict.drop = 'dropzone'\n\n  scope.dynamicDrop = false\n\n  defaults.actions.drop = drop.defaults\n}\n\nfunction collectDropzones({ interactables }: Scope, draggableElement: Element) {\n  const drops: ActiveDrop[] = []\n\n  // collect all dropzones and their elements which qualify for a drop\n  for (const dropzone of interactables.list) {\n    if (!dropzone.options.drop.enabled) {\n      continue\n    }\n\n    const accept = dropzone.options.drop.accept\n\n    // test the draggable draggableElement against the dropzone's accept setting\n    if (\n      (is.element(accept) && accept !== draggableElement) ||\n      (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n      (is.func(accept) && !accept({ dropzone, draggableElement }))\n    ) {\n      continue\n    }\n\n    for (const dropzoneElement of dropzone.getAllElements()) {\n      if (dropzoneElement !== draggableElement) {\n        drops.push({\n          dropzone,\n          element: dropzoneElement,\n          rect: dropzone.getRect(dropzoneElement),\n        })\n      }\n    }\n  }\n\n  return drops\n}\n\nfunction fireActivationEvents(activeDrops: ActiveDrop[], event: DropEvent) {\n  // loop through all active dropzones and trigger event\n  for (const { dropzone, element } of activeDrops.slice()) {\n    event.dropzone = dropzone\n\n    // set current element as event target\n    event.target = element\n    dropzone.fire(event)\n    event.propagationStopped = event.immediatePropagationStopped = false\n  }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops(scope: Scope, dragElement: Element) {\n  // get dropzones and their elements that could receive the draggable\n  const activeDrops = collectDropzones(scope, dragElement)\n\n  for (const activeDrop of activeDrops) {\n    activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n  }\n\n  return activeDrops\n}\n\nfunction getDrop(\n  { dropState, interactable: draggable, element: dragElement }: Interaction,\n  dragEvent,\n  pointerEvent,\n) {\n  const validDrops: Element[] = []\n\n  // collect all dropzones and their elements which qualify for a drop\n  for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n    const isValid = dropzone.dropCheck(\n      dragEvent,\n      pointerEvent,\n      draggable!,\n      dragElement!,\n      dropzoneElement,\n      rect,\n    )\n    validDrops.push(isValid ? dropzoneElement : null)\n  }\n\n  // get the most appropriate dropzone based on DOM depth and order\n  const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n  return dropState!.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents(interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n  const dropState = interaction.dropState!\n  const dropEvents: Record<string, DropEvent | null> = {\n    enter: null,\n    leave: null,\n    activate: null,\n    deactivate: null,\n    move: null,\n    drop: null,\n  }\n\n  if (dragEvent.type === 'dragstart') {\n    dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n    dropEvents.activate.target = null as never\n    dropEvents.activate.dropzone = null as never\n  }\n  if (dragEvent.type === 'dragend') {\n    dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n    dropEvents.deactivate.target = null as never\n    dropEvents.deactivate.dropzone = null as never\n  }\n\n  if (dropState.rejected) {\n    return dropEvents\n  }\n\n  if (dropState.cur.element !== dropState.prev.element) {\n    // if there was a previous dropzone, create a dragleave event\n    if (dropState.prev.dropzone) {\n      dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n      dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n      dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n    }\n    // if dropzone is not null, create a dragenter event\n    if (dropState.cur.dropzone) {\n      dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n      dragEvent.dragEnter = dropState.cur.element\n      dragEvent.dropzone = dropState.cur.dropzone\n    }\n  }\n\n  if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n    dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n    dragEvent.dropzone = dropState.cur.dropzone\n    dragEvent.relatedTarget = dropState.cur.element\n  }\n  if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n    dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n    dragEvent.dropzone = dropState.cur.dropzone\n  }\n\n  return dropEvents\n}\n\ntype FiredDropEvents = Partial<\n  Record<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents(interaction: Interaction, events: FiredDropEvents) {\n  const dropState = interaction.dropState!\n  const { activeDrops, cur, prev } = dropState\n\n  if (events.leave) {\n    prev.dropzone.fire(events.leave)\n  }\n  if (events.enter) {\n    cur.dropzone.fire(events.enter)\n  }\n  if (events.move) {\n    cur.dropzone.fire(events.move)\n  }\n  if (events.drop) {\n    cur.dropzone.fire(events.drop)\n  }\n\n  if (events.deactivate) {\n    fireActivationEvents(activeDrops, events.deactivate)\n  }\n\n  dropState.prev.dropzone = cur.dropzone\n  dropState.prev.element = cur.element\n}\n\nfunction onEventCreated({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n  if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n    return\n  }\n\n  const dropState = interaction.dropState!\n\n  if (scope.dynamicDrop) {\n    dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n  }\n\n  const dragEvent = iEvent\n  const dropResult = getDrop(interaction, dragEvent, event)\n\n  // update rejected status\n  dropState.rejected =\n    dropState.rejected &&\n    !!dropResult &&\n    dropResult.dropzone === dropState.cur.dropzone &&\n    dropResult.element === dropState.cur.element\n\n  dropState.cur.dropzone = dropResult && dropResult.dropzone\n  dropState.cur.element = dropResult && dropResult.element\n\n  dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod(interactable: Interactable, options?: DropzoneOptions | boolean) {\n  if (is.object(options)) {\n    interactable.options.drop.enabled = options.enabled !== false\n\n    if (options.listeners) {\n      const normalized = normalizeListeners(options.listeners)\n      // rename 'drop' to '' as it will be prefixed with 'drop'\n      const corrected = Object.keys(normalized).reduce((acc, type) => {\n        const correctedType = /^(enter|leave)/.test(type)\n          ? `drag${type}`\n          : /^(activate|deactivate|move)/.test(type)\n            ? `drop${type}`\n            : type\n\n        acc[correctedType] = normalized[type]\n\n        return acc\n      }, {})\n\n      const prevListeners = interactable.options.drop.listeners\n      prevListeners && interactable.off(prevListeners)\n\n      interactable.on(corrected)\n      interactable.options.drop.listeners = corrected\n    }\n\n    if (is.func(options.ondrop)) {\n      interactable.on('drop', options.ondrop)\n    }\n    if (is.func(options.ondropactivate)) {\n      interactable.on('dropactivate', options.ondropactivate)\n    }\n    if (is.func(options.ondropdeactivate)) {\n      interactable.on('dropdeactivate', options.ondropdeactivate)\n    }\n    if (is.func(options.ondragenter)) {\n      interactable.on('dragenter', options.ondragenter)\n    }\n    if (is.func(options.ondragleave)) {\n      interactable.on('dragleave', options.ondragleave)\n    }\n    if (is.func(options.ondropmove)) {\n      interactable.on('dropmove', options.ondropmove)\n    }\n\n    if (/^(pointer|center)$/.test(options.overlap as string)) {\n      interactable.options.drop.overlap = options.overlap\n    } else if (is.number(options.overlap)) {\n      interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n    }\n    if ('accept' in options) {\n      interactable.options.drop.accept = options.accept\n    }\n    if ('checker' in options) {\n      interactable.options.drop.checker = options.checker\n    }\n\n    return interactable\n  }\n\n  if (is.bool(options)) {\n    interactable.options.drop.enabled = options\n\n    return interactable\n  }\n\n  return interactable.options.drop\n}\n\nfunction dropCheckMethod(\n  interactable: Interactable,\n  dragEvent: InteractEvent,\n  event: PointerEventType,\n  draggable: Interactable,\n  draggableElement: Element,\n  dropElement: Element,\n  rect: any,\n) {\n  let dropped = false\n\n  // if the dropzone has no rect (eg. display: none)\n  // call the custom dropChecker or just return false\n  if (!(rect = rect || interactable.getRect(dropElement))) {\n    return interactable.options.drop.checker\n      ? interactable.options.drop.checker(\n          dragEvent,\n          event,\n          dropped,\n          interactable,\n          dropElement,\n          draggable,\n          draggableElement,\n        )\n      : false\n  }\n\n  const dropOverlap = interactable.options.drop.overlap\n\n  if (dropOverlap === 'pointer') {\n    const origin = getOriginXY(draggable, draggableElement, 'drag')\n    const page = pointerUtils.getPageXY(dragEvent)\n\n    page.x += origin.x\n    page.y += origin.y\n\n    const horizontal = page.x > rect.left && page.x < rect.right\n    const vertical = page.y > rect.top && page.y < rect.bottom\n\n    dropped = horizontal && vertical\n  }\n\n  const dragRect = draggable.getRect(draggableElement)\n\n  if (dragRect && dropOverlap === 'center') {\n    const cx = dragRect.left + dragRect.width / 2\n    const cy = dragRect.top + dragRect.height / 2\n\n    dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n  }\n\n  if (dragRect && is.number(dropOverlap)) {\n    const overlapArea =\n      Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n      Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n    const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n    dropped = overlapRatio >= dropOverlap\n  }\n\n  if (interactable.options.drop.checker) {\n    dropped = interactable.options.drop.checker(\n      dragEvent,\n      event,\n      dropped,\n      interactable,\n      dropElement,\n      draggable,\n      draggableElement,\n    )\n  }\n\n  return dropped\n}\n\nconst drop: Plugin = {\n  id: 'actions/drop',\n  install,\n  listeners: {\n    'interactions:before-action-start': ({ interaction }) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      interaction.dropState = {\n        cur: {\n          dropzone: null,\n          element: null,\n        },\n        prev: {\n          dropzone: null,\n          element: null,\n        },\n        rejected: null,\n        events: null,\n        activeDrops: [],\n      }\n    },\n\n    'interactions:after-action-start': (\n      { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n      scope,\n    ) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const dropState = interaction.dropState!\n\n      // reset active dropzones\n      dropState.activeDrops = []\n      dropState.events = {}\n      dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n      dropState.events = getDropEvents(interaction, event, dragEvent)\n\n      if (dropState.events.activate) {\n        fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n        scope.fire('actions/drop:start', { interaction, dragEvent })\n      }\n    },\n\n    'interactions:action-move': onEventCreated,\n\n    'interactions:after-action-move': (\n      { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n      scope,\n    ) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const dropState = interaction.dropState!\n      fireDropEvents(interaction, dropState.events)\n\n      scope.fire('actions/drop:move', { interaction, dragEvent })\n      dropState.events = {}\n    },\n\n    'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n      if (arg.interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const { interaction, iEvent: dragEvent } = arg\n\n      onEventCreated(arg, scope)\n      fireDropEvents(interaction, interaction.dropState!.events)\n      scope.fire('actions/drop:end', { interaction, dragEvent })\n    },\n\n    'interactions:stop': ({ interaction }) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const { dropState } = interaction\n\n      if (dropState) {\n        dropState.activeDrops = null as never\n        dropState.events = null as never\n        dropState.cur.dropzone = null as never\n        dropState.cur.element = null as never\n        dropState.prev.dropzone = null as never\n        dropState.prev.element = null as never\n        dropState.rejected = false\n      }\n    },\n  },\n  getActiveDrops,\n  getDrop,\n  getDropEvents,\n  fireDropEvents,\n\n  filterEventType: (type: string) => type.search('drag') === 0 || type.search('drop') === 0,\n\n  defaults: {\n    enabled: false,\n    accept: null as never,\n    overlap: 'pointer',\n  } as DropzoneOptions,\n}\n\nexport default drop\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    gesture?: {\n      angle: number // angle from first to second touch\n      distance: number\n      scale: number // gesture.distance / gesture.startDistance\n      startAngle: number // angle of line joining two touches\n      startDistance: number // distance between two touches of touchStart\n    }\n  }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    gesturable(options: Partial<OrBoolean<GesturableOptions>> | boolean): this\n    gesturable(): GesturableOptions\n    /**\n     * ```js\n     * interact(element).gesturable({\n     *     onstart: function (event) {},\n     *     onmove : function (event) {},\n     *     onend  : function (event) {},\n     *\n     *     // limit multiple gestures.\n     *     // See the explanation in {@link Interactable.draggable} example\n     *     max: Infinity,\n     *     maxPerElement: 1,\n     * })\n     *\n     * var isGestureable = interact(element).gesturable()\n     * ```\n     *\n     * Gets or sets whether multitouch gestures can be performed on the target\n     *\n     * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n     * @returns A boolean indicating if this can be the target of gesture events, or this Interactable\n     */\n    gesturable(options?: Partial<OrBoolean<GesturableOptions>> | boolean): this | GesturableOptions\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    gesture: GesturableOptions\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    gesture?: typeof gesture\n  }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n  onstart?: ListenersArg\n  onmove?: ListenersArg\n  onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n  distance: number\n  angle: number\n  da: number // angle change\n  scale: number // ratio of distance start to current event\n  ds: number // scale change\n  box: Rect // enclosing box of all points\n  touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n  iEvent: GestureEvent\n  interaction: Interaction<'gesture'>\n}\n\nfunction install(scope: Scope) {\n  const { actions, Interactable, defaults } = scope\n\n  Interactable.prototype.gesturable = function (\n    this: InstanceType<typeof Interactable>,\n    options: GesturableOptions | boolean,\n  ) {\n    if (is.object(options)) {\n      this.options.gesture.enabled = options.enabled !== false\n      this.setPerAction('gesture', options)\n      this.setOnEvents('gesture', options)\n\n      return this\n    }\n\n    if (is.bool(options)) {\n      this.options.gesture.enabled = options\n\n      return this\n    }\n\n    return this.options.gesture as GesturableOptions\n  } as Interactable['gesturable']\n\n  actions.map.gesture = gesture\n  actions.methodDict.gesture = 'gesturable'\n\n  defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps({ interaction, iEvent, phase }: GestureSignalArg) {\n  if (interaction.prepared.name !== 'gesture') return\n\n  const pointers = interaction.pointers.map((p) => p.pointer)\n  const starting = phase === 'start'\n  const ending = phase === 'end'\n  const deltaSource = interaction.interactable.options.deltaSource\n\n  iEvent.touches = [pointers[0], pointers[1]]\n\n  if (starting) {\n    iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n    iEvent.box = pointerUtils.touchBBox(pointers)\n    iEvent.scale = 1\n    iEvent.ds = 0\n    iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n    iEvent.da = 0\n\n    interaction.gesture.startDistance = iEvent.distance\n    interaction.gesture.startAngle = iEvent.angle\n  } else if (ending || interaction.pointers.length < 2) {\n    const prevEvent = interaction.prevEvent as GestureEvent\n\n    iEvent.distance = prevEvent.distance\n    iEvent.box = prevEvent.box\n    iEvent.scale = prevEvent.scale\n    iEvent.ds = 0\n    iEvent.angle = prevEvent.angle\n    iEvent.da = 0\n  } else {\n    iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n    iEvent.box = pointerUtils.touchBBox(pointers)\n    iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n    iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n    iEvent.ds = iEvent.scale - interaction.gesture.scale\n    iEvent.da = iEvent.angle - interaction.gesture.angle\n  }\n\n  interaction.gesture.distance = iEvent.distance\n  interaction.gesture.angle = iEvent.angle\n\n  if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n    interaction.gesture.scale = iEvent.scale\n  }\n}\n\nconst gesture: Plugin = {\n  id: 'actions/gesture',\n  before: ['actions/drag', 'actions/resize'],\n  install,\n  listeners: {\n    'interactions:action-start': updateGestureProps,\n    'interactions:action-move': updateGestureProps,\n    'interactions:action-end': updateGestureProps,\n\n    'interactions:new': ({ interaction }) => {\n      interaction.gesture = {\n        angle: 0,\n        distance: 0,\n        scale: 1,\n        startAngle: 0,\n        startDistance: 0,\n      }\n    },\n\n    'auto-start:check': (arg) => {\n      if (arg.interaction.pointers.length < 2) {\n        return undefined\n      }\n\n      const gestureOptions = arg.interactable.options.gesture\n\n      if (!(gestureOptions && gestureOptions.enabled)) {\n        return undefined\n      }\n\n      arg.action = { name: 'gesture' }\n\n      return false\n    },\n  },\n\n  defaults: {},\n\n  getCursor() {\n    return ''\n  },\n\n  filterEventType: (type: string) => type.search('gesture') === 0,\n}\n\nexport default gesture\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n  ActionName,\n  ActionProps,\n  EdgeOptions,\n  FullRect,\n  ListenersArg,\n  OrBoolean,\n  Point,\n  Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    resizable(): ResizableOptions\n    resizable(options: Partial<OrBoolean<ResizableOptions>> | boolean): this\n    /**\n     * ```js\n     * interact(element).resizable({\n     *   onstart: function (event) {},\n     *   onmove : function (event) {},\n     *   onend  : function (event) {},\n     *\n     *   edges: {\n     *     top   : true,       // Use pointer coords to check for resize.\n     *     left  : false,      // Disable resizing from left edge.\n     *     bottom: '.resize-s',// Resize if pointer target matches selector\n     *     right : handleEl    // Resize if pointer target is the given Element\n     *   },\n     *\n     *   // Width and height can be adjusted independently. When `true`, width and\n     *   // height are adjusted at a 1:1 ratio.\n     *   square: false,\n     *\n     *   // Width and height can be adjusted independently. When `true`, width and\n     *   // height maintain the aspect ratio they had when resizing started.\n     *   preserveAspectRatio: false,\n     *\n     *   // a value of 'none' will limit the resize rect to a minimum of 0x0\n     *   // 'negate' will allow the rect to have negative width/height\n     *   // 'reposition' will keep the width/height positive by swapping\n     *   // the top and bottom edges and/or swapping the left and right edges\n     *   invert: 'none' || 'negate' || 'reposition'\n     *\n     *   // limit multiple resizes.\n     *   // See the explanation in the {@link Interactable.draggable} example\n     *   max: Infinity,\n     *   maxPerElement: 1,\n     * })\n     *\n     * var isResizeable = interact(element).resizable()\n     * ```\n     *\n     * Gets or sets whether resize actions can be performed on the target\n     *\n     * @param options - true/false or An object with event\n     * listeners to be fired on resize events (object makes the Interactable\n     * resizable)\n     * @returns A boolean indicating if this can be the\n     * target of resize elements, or this Interactable\n     */\n    resizable(options?: Partial<OrBoolean<ResizableOptions>> | boolean): this | ResizableOptions\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction<T extends ActionName | null = ActionName> {\n    resizeAxes: 'x' | 'y' | 'xy'\n    styleCursor(newValue: boolean): this\n    styleCursor(): boolean\n    resizeStartAspectRatio: number\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    resize: ResizableOptions\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    resize?: typeof resize\n  }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n  square?: boolean\n  preserveAspectRatio?: boolean\n  edges?: EdgeOptions | null\n  axis?: 'x' | 'y' | 'xy' // deprecated\n  invert?: 'none' | 'negate' | 'reposition'\n  margin?: number\n  squareResize?: boolean\n  oninertiastart?: ListenersArg\n  onstart?: ListenersArg\n  onmove?: ListenersArg\n  onend?: ListenersArg\n}\n\nexport interface ResizeEvent<P extends EventPhase = EventPhase> extends InteractEvent<'resize', P> {\n  deltaRect?: FullRect\n  edges?: ActionProps['edges']\n}\n\nfunction install(scope: Scope) {\n  const {\n    actions,\n    browser,\n    Interactable, // tslint:disable-line no-shadowed-variable\n    defaults,\n  } = scope\n\n  // Less Precision with touch input\n\n  resize.cursors = initCursors(browser)\n  resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n  Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n    return resizable(this, options, scope)\n  } as Interactable['resizable']\n\n  actions.map.resize = resize\n  actions.methodDict.resize = 'resizable'\n\n  defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker(arg) {\n  const { interaction, interactable, element, rect, buttons } = arg\n\n  if (!rect) {\n    return undefined\n  }\n\n  const page = extend({}, interaction.coords.cur.page)\n  const resizeOptions = interactable.options.resize\n\n  if (\n    !(resizeOptions && resizeOptions.enabled) ||\n    // check mouseButton setting if the pointer is down\n    (interaction.pointerIsDown &&\n      /mouse|pointer/.test(interaction.pointerType) &&\n      (buttons & resizeOptions.mouseButtons) === 0)\n  ) {\n    return undefined\n  }\n\n  // if using resize.edges\n  if (is.object(resizeOptions.edges)) {\n    const resizeEdges = {\n      left: false,\n      right: false,\n      top: false,\n      bottom: false,\n    }\n\n    for (const edge in resizeEdges) {\n      resizeEdges[edge] = checkResizeEdge(\n        edge,\n        resizeOptions.edges[edge],\n        page,\n        interaction._latestPointer.eventTarget,\n        element,\n        rect,\n        resizeOptions.margin || resize.defaultMargin,\n      )\n    }\n\n    resizeEdges.left = resizeEdges.left && !resizeEdges.right\n    resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n    if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n      arg.action = {\n        name: 'resize',\n        edges: resizeEdges,\n      }\n    }\n  } else {\n    const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n    const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n    if (right || bottom) {\n      arg.action = {\n        name: 'resize',\n        axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n      }\n    }\n  }\n\n  return arg.action ? false : undefined\n}\n\nfunction resizable(interactable: Interactable, options: OrBoolean<ResizableOptions> | boolean, scope: Scope) {\n  if (is.object(options)) {\n    interactable.options.resize.enabled = options.enabled !== false\n    interactable.setPerAction('resize', options)\n    interactable.setOnEvents('resize', options)\n\n    if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n      interactable.options.resize.axis = options.axis\n    } else if (options.axis === null) {\n      interactable.options.resize.axis = scope.defaults.actions.resize.axis\n    }\n\n    if (is.bool(options.preserveAspectRatio)) {\n      interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n    } else if (is.bool(options.square)) {\n      interactable.options.resize.square = options.square\n    }\n\n    return interactable\n  }\n  if (is.bool(options)) {\n    interactable.options.resize.enabled = options\n\n    return interactable\n  }\n  return interactable.options.resize\n}\n\nfunction checkResizeEdge(\n  name: string,\n  value: any,\n  page: Point,\n  element: Node,\n  interactableElement: Element,\n  rect: Rect,\n  margin: number,\n) {\n  // false, '', undefined, null\n  if (!value) {\n    return false\n  }\n\n  // true value, use pointer coords and element rect\n  if (value === true) {\n    // if dimensions are negative, \"switch\" edges\n    const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n    const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n    // don't use margin greater than half the relevent dimension\n    margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n    if (width < 0) {\n      if (name === 'left') {\n        name = 'right'\n      } else if (name === 'right') {\n        name = 'left'\n      }\n    }\n    if (height < 0) {\n      if (name === 'top') {\n        name = 'bottom'\n      } else if (name === 'bottom') {\n        name = 'top'\n      }\n    }\n\n    if (name === 'left') {\n      const edge = width >= 0 ? rect.left : rect.right\n      return page.x < edge + margin\n    }\n    if (name === 'top') {\n      const edge = height >= 0 ? rect.top : rect.bottom\n      return page.y < edge + margin\n    }\n\n    if (name === 'right') {\n      return page.x > (width >= 0 ? rect.right : rect.left) - margin\n    }\n    if (name === 'bottom') {\n      return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n    }\n  }\n\n  // the remaining checks require an element\n  if (!is.element(element)) {\n    return false\n  }\n\n  return is.element(value)\n    ? // the value is an element to use as a resize handle\n      value === element\n    : // otherwise check if element matches value as selector\n      dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors(browser: typeof import('@interactjs/utils/browser').default) {\n  return browser.isIe9\n    ? {\n        x: 'e-resize',\n        y: 's-resize',\n        xy: 'se-resize',\n\n        top: 'n-resize',\n        left: 'w-resize',\n        bottom: 's-resize',\n        right: 'e-resize',\n        topleft: 'se-resize',\n        bottomright: 'se-resize',\n        topright: 'ne-resize',\n        bottomleft: 'ne-resize',\n      }\n    : {\n        x: 'ew-resize',\n        y: 'ns-resize',\n        xy: 'nwse-resize',\n\n        top: 'ns-resize',\n        left: 'ew-resize',\n        bottom: 'ns-resize',\n        right: 'ew-resize',\n        topleft: 'nwse-resize',\n        bottomright: 'nwse-resize',\n        topright: 'nesw-resize',\n        bottomleft: 'nesw-resize',\n      }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start({ iEvent, interaction }: { iEvent: InteractEvent<any, any>; interaction: Interaction }) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n    return\n  }\n\n  const resizeEvent = iEvent as ResizeEvent\n  const rect = interaction.rect\n\n  interaction._rects = {\n    start: extend({}, rect),\n    corrected: extend({}, rect),\n    previous: extend({}, rect),\n    delta: {\n      left: 0,\n      right: 0,\n      width: 0,\n      top: 0,\n      bottom: 0,\n      height: 0,\n    },\n  }\n\n  resizeEvent.edges = interaction.prepared.edges\n  resizeEvent.rect = interaction._rects.corrected\n  resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move({ iEvent, interaction }: { iEvent: InteractEvent<any, any>; interaction: Interaction }) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n  const resizeEvent = iEvent as ResizeEvent\n  const resizeOptions = interaction.interactable.options.resize\n  const invert = resizeOptions.invert\n  const invertible = invert === 'reposition' || invert === 'negate'\n\n  const current = interaction.rect\n  const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n  extend(previous, corrected)\n\n  if (invertible) {\n    // if invertible, copy the current rect\n    extend(corrected, current)\n\n    if (invert === 'reposition') {\n      // swap edge values if necessary to keep width/height positive\n      if (corrected.top > corrected.bottom) {\n        const swap = corrected.top\n\n        corrected.top = corrected.bottom\n        corrected.bottom = swap\n      }\n      if (corrected.left > corrected.right) {\n        const swap = corrected.left\n\n        corrected.left = corrected.right\n        corrected.right = swap\n      }\n    }\n  } else {\n    // if not invertible, restrict to minimum of 0x0 rect\n    corrected.top = Math.min(current.top, startRect.bottom)\n    corrected.bottom = Math.max(current.bottom, startRect.top)\n    corrected.left = Math.min(current.left, startRect.right)\n    corrected.right = Math.max(current.right, startRect.left)\n  }\n\n  corrected.width = corrected.right - corrected.left\n  corrected.height = corrected.bottom - corrected.top\n\n  for (const edge in corrected) {\n    deltaRect[edge] = corrected[edge] - previous[edge]\n  }\n\n  resizeEvent.edges = interaction.prepared.edges\n  resizeEvent.rect = corrected\n  resizeEvent.deltaRect = deltaRect\n}\n\nfunction end({ iEvent, interaction }: { iEvent: InteractEvent<any, any>; interaction: Interaction }) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n  const resizeEvent = iEvent as ResizeEvent\n\n  resizeEvent.edges = interaction.prepared.edges\n  resizeEvent.rect = interaction._rects.corrected\n  resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes({\n  iEvent,\n  interaction,\n}: {\n  iEvent: InteractEvent<any, any>\n  interaction: Interaction\n}) {\n  if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n  const options = interaction.interactable.options\n  const resizeEvent = iEvent as ResizeEvent\n\n  if (options.resize.square) {\n    if (interaction.resizeAxes === 'y') {\n      resizeEvent.delta.x = resizeEvent.delta.y\n    } else {\n      resizeEvent.delta.y = resizeEvent.delta.x\n    }\n    resizeEvent.axes = 'xy'\n  } else {\n    resizeEvent.axes = interaction.resizeAxes\n\n    if (interaction.resizeAxes === 'x') {\n      resizeEvent.delta.y = 0\n    } else if (interaction.resizeAxes === 'y') {\n      resizeEvent.delta.x = 0\n    }\n  }\n}\n\nconst resize: Plugin = {\n  id: 'actions/resize',\n  before: ['actions/drag'],\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.resizeAxes = 'xy'\n    },\n\n    'interactions:action-start': (arg) => {\n      start(arg)\n      updateEventAxes(arg)\n    },\n    'interactions:action-move': (arg) => {\n      move(arg)\n      updateEventAxes(arg)\n    },\n    'interactions:action-end': end,\n    'auto-start:check': resizeChecker,\n  },\n\n  defaults: {\n    square: false,\n    preserveAspectRatio: false,\n    axis: 'xy',\n\n    // use default margin\n    margin: NaN,\n\n    // object with props left, right, top, bottom which are\n    // true/false values to resize when the pointer is over that edge,\n    // CSS selectors to match the handles for each direction\n    // or the Elements for each handle\n    edges: null,\n\n    // a value of 'none' will limit the resize rect to a minimum of 0x0\n    // 'negate' will alow the rect to have negative width/height\n    // 'reposition' will keep the width/height positive by swapping\n    // the top and bottom edges and/or swapping the left and right edges\n    invert: 'none',\n  } as ResizableOptions,\n\n  cursors: null as ReturnType<typeof initCursors>,\n\n  getCursor({ edges, axis, name }: ActionProps) {\n    const cursors = resize.cursors\n    let result: string = null\n\n    if (axis) {\n      result = cursors[name + axis]\n    } else if (edges) {\n      let cursorKey = ''\n\n      for (const edge of ['top', 'bottom', 'left', 'right']) {\n        if (edges[edge]) {\n          cursorKey += edge\n        }\n      }\n\n      result = cursors[cursorKey]\n    }\n\n    return result\n  },\n\n  filterEventType: (type: string) => type.search('resize') === 0,\n\n  defaultMargin: null as number,\n}\n\nexport default resize\n","let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init(global: Window | typeof globalThis) {\n  request = global.requestAnimationFrame\n  cancel = global.cancelAnimationFrame\n\n  if (!request) {\n    const vendors = ['ms', 'moz', 'webkit', 'o']\n\n    for (const vendor of vendors) {\n      request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n      cancel =\n        global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n        global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n    }\n  }\n\n  request = request && request.bind(global)\n  cancel = cancel && cancel.bind(global)\n\n  if (!request) {\n    request = (callback) => {\n      const currTime = Date.now()\n      const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n      const token = global.setTimeout(() => {\n        // eslint-disable-next-line n/no-callback-literal\n        callback(currTime + timeToCall)\n      }, timeToCall)\n\n      lastTime = currTime + timeToCall\n      return token as any\n    }\n\n    cancel = (token) => clearTimeout(token)\n  }\n}\n\nexport default {\n  request: (callback: FrameRequestCallback) => request(callback),\n  cancel: (token: number) => cancel(token),\n  init,\n}\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n  id: 'actions',\n  install(scope: Scope) {\n    scope.usePlugin(gesture)\n    scope.usePlugin(resize)\n    scope.usePlugin(drag)\n    scope.usePlugin(drop)\n  },\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    autoScroll: typeof autoScroll\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    autoScroll?: typeof autoScroll\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    autoScroll?: AutoScrollOptions\n  }\n}\n\nexport interface AutoScrollOptions {\n  container?: Window | HTMLElement | string\n  margin?: number\n  distance?: number\n  interval?: number\n  speed?: number\n  enabled?: boolean\n}\n\nfunction install(scope: Scope) {\n  const { defaults, actions } = scope\n\n  scope.autoScroll = autoScroll\n  autoScroll.now = () => scope.now()\n\n  actions.phaselessTypes.autoscroll = true\n  defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n  defaults: {\n    enabled: false,\n    margin: 60,\n\n    // the item that is scrolled (Window or HTMLElement)\n    container: null as AutoScrollOptions['container'],\n\n    // the scroll speed in pixels per second\n    speed: 300,\n  } as AutoScrollOptions,\n\n  now: Date.now,\n\n  interaction: null as Interaction<ActionName> | null,\n  i: 0, // the handle returned by window.setInterval\n\n  // Direction each pulse is to scroll in\n  x: 0,\n  y: 0,\n\n  isScrolling: false,\n  prevTime: 0,\n  margin: 0,\n  speed: 0,\n\n  start(interaction: Interaction) {\n    autoScroll.isScrolling = true\n    raf.cancel(autoScroll.i)\n\n    interaction.autoScroll = autoScroll\n    autoScroll.interaction = interaction\n    autoScroll.prevTime = autoScroll.now()\n    autoScroll.i = raf.request(autoScroll.scroll)\n  },\n\n  stop() {\n    autoScroll.isScrolling = false\n    if (autoScroll.interaction) {\n      autoScroll.interaction.autoScroll = null\n    }\n    raf.cancel(autoScroll.i)\n  },\n\n  // scroll the window by the values in scroll.x/y\n  scroll() {\n    const { interaction } = autoScroll\n    const { interactable, element } = interaction\n    const actionName = interaction.prepared.name\n    const options = interactable.options[actionName].autoScroll\n    const container = getContainer(options.container, interactable, element)\n    const now = autoScroll.now()\n    // change in time in seconds\n    const dt = (now - autoScroll.prevTime) / 1000\n    // displacement\n    const s = options.speed * dt\n\n    if (s >= 1) {\n      const scrollBy = {\n        x: autoScroll.x * s,\n        y: autoScroll.y * s,\n      }\n\n      if (scrollBy.x || scrollBy.y) {\n        const prevScroll = getScroll(container)\n\n        if (is.window(container)) {\n          container.scrollBy(scrollBy.x, scrollBy.y)\n        } else if (container) {\n          container.scrollLeft += scrollBy.x\n          container.scrollTop += scrollBy.y\n        }\n\n        const curScroll = getScroll(container)\n        const delta = {\n          x: curScroll.x - prevScroll.x,\n          y: curScroll.y - prevScroll.y,\n        }\n\n        if (delta.x || delta.y) {\n          interactable.fire({\n            type: 'autoscroll',\n            target: element,\n            interactable,\n            delta,\n            interaction,\n            container,\n          })\n        }\n      }\n\n      autoScroll.prevTime = now\n    }\n\n    if (autoScroll.isScrolling) {\n      raf.cancel(autoScroll.i)\n      autoScroll.i = raf.request(autoScroll.scroll)\n    }\n  },\n  check(interactable: Interactable, actionName: ActionName) {\n    const options = interactable.options\n\n    return options[actionName].autoScroll?.enabled\n  },\n  onInteractionMove<T extends ActionName>({\n    interaction,\n    pointer,\n  }: {\n    interaction: Interaction<T>\n    pointer: PointerType\n  }) {\n    if (\n      !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n    ) {\n      return\n    }\n\n    if (interaction.simulation) {\n      autoScroll.x = autoScroll.y = 0\n      return\n    }\n\n    let top: boolean\n    let right: boolean\n    let bottom: boolean\n    let left: boolean\n\n    const { interactable, element } = interaction\n    const actionName = interaction.prepared.name\n    const options = interactable.options[actionName].autoScroll\n    const container = getContainer(options.container, interactable, element)\n\n    if (is.window(container)) {\n      left = pointer.clientX < autoScroll.margin\n      top = pointer.clientY < autoScroll.margin\n      right = pointer.clientX > container.innerWidth - autoScroll.margin\n      bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n    } else {\n      const rect = domUtils.getElementClientRect(container)\n\n      left = pointer.clientX < rect.left + autoScroll.margin\n      top = pointer.clientY < rect.top + autoScroll.margin\n      right = pointer.clientX > rect.right - autoScroll.margin\n      bottom = pointer.clientY > rect.bottom - autoScroll.margin\n    }\n\n    autoScroll.x = right ? 1 : left ? -1 : 0\n    autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n    if (!autoScroll.isScrolling) {\n      // set the autoScroll properties to those of the target\n      autoScroll.margin = options.margin\n      autoScroll.speed = options.speed\n\n      autoScroll.start(interaction)\n    }\n  },\n}\n\nexport function getContainer(value: any, interactable: Interactable, element: Element) {\n  return (\n    (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n  )\n}\n\nexport function getScroll(container: any) {\n  if (is.window(container)) {\n    container = window.document.body\n  }\n\n  return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize(container: any) {\n  if (is.window(container)) {\n    container = window.document.body\n  }\n\n  return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta<T extends ActionName>(\n  {\n    interaction,\n    element,\n  }: {\n    interaction: Partial<Interaction<T>>\n    element: Element\n  },\n  func: any,\n) {\n  const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n  if (!scrollOptions || !scrollOptions.enabled) {\n    func()\n    return { x: 0, y: 0 }\n  }\n\n  const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n  const prevSize = getScroll(scrollContainer)\n  func()\n  const curSize = getScroll(scrollContainer)\n\n  return {\n    x: curSize.x - prevSize.x,\n    y: curSize.y - prevSize.y,\n  }\n}\n\nconst autoScrollPlugin: Plugin = {\n  id: 'auto-scroll',\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.autoScroll = null\n    },\n\n    'interactions:destroy': ({ interaction }) => {\n      interaction.autoScroll = null\n      autoScroll.stop()\n      if (autoScroll.interaction) {\n        autoScroll.interaction = null\n      }\n    },\n\n    'interactions:stop': autoScroll.stop,\n\n    'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n  },\n}\n\nexport default autoScrollPlugin\n","import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce<T>(this: T, method: (...args: any[]) => any, message: string) {\n  let warned = false\n\n  return function (this: T) {\n    if (!warned) {\n      ;(window as any).console.warn(message)\n      warned = true\n    }\n\n    return method.apply(this, arguments)\n  }\n}\n\nexport function copyAction<T extends ActionName>(dest: ActionProps<any>, src: ActionProps<T>) {\n  dest.name = src.name\n  dest.axis = src.axis\n  dest.edges = src.edges\n\n  return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    getAction: (\n      this: Interactable,\n      pointer: PointerType,\n      event: PointerEventType,\n      interaction: Interaction,\n      element: Element,\n    ) => ActionProps | null\n    styleCursor(newValue: boolean): this\n    styleCursor(): boolean\n    /**\n     * Returns or sets whether the the cursor should be changed depending on the\n     * action that would be performed if the mouse were pressed and dragged.\n     *\n     * @param {boolean} [newValue]\n     * @return {boolean | Interactable} The current setting or this Interactable\n     */\n    styleCursor(newValue?: boolean): boolean | this\n    actionChecker(checker: Function): Interactable\n    actionChecker(): Function\n    /**\n     * ```js\n     * interact('.resize-drag')\n     *   .resizable(true)\n     *   .draggable(true)\n     *   .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n     *\n     *     if (interact.matchesSelector(event.target, '.drag-handle')) {\n     *       // force drag with handle target\n     *       action.name = drag\n     *     }\n     *     else {\n     *       // resize from the top and right edges\n     *       action.name  = 'resize'\n     *       action.edges = { top: true, right: true }\n     *     }\n     *\n     *     return action\n     * })\n     * ```\n     *\n     * Returns or sets the function used to check action to be performed on\n     * pointerDown\n     *\n     * @param checker - A function which takes a pointer event,\n     * defaultAction string, interactable, element and interaction as parameters\n     * and returns an object with name property 'drag' 'resize' or 'gesture' and\n     * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n     * props.\n     * @returns The checker function or this Interactable\n     */\n    actionChecker(checker?: Function): Interactable | Function\n    /** @returns This interactable */\n    ignoreFrom(newValue: string | Element | null): Interactable\n    /** @returns The current ignoreFrom value */\n    ignoreFrom(): string | Element | null\n    /**\n     * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n     * of it's parents match the given CSS selector or Element, no\n     * drag/resize/gesture is started.\n     *\n     * @deprecated\n     * Don't use this method. Instead set the `ignoreFrom` option for each action\n     * or for `pointerEvents`\n     *\n     * ```js\n     * interact(targett)\n     *   .draggable({\n     *     ignoreFrom: 'input, textarea, a[href]'',\n     *   })\n     *   .pointerEvents({\n     *     ignoreFrom: '[no-pointer]',\n     *   })\n     * ```\n     * Interactable\n     */\n    ignoreFrom(\n      /** a CSS selector string, an Element or `null` to not ignore any elements */\n      newValue?: string | Element | null,\n    ): Interactable | string | Element | null\n    allowFrom(): boolean\n    /**\n     *\n     * A drag/resize/gesture is started only If the target of the `mousedown`,\n     * `pointerdown` or `touchstart` event or any of it's parents match the given\n     * CSS selector or Element.\n     *\n     * @deprecated\n     * Don't use this method. Instead set the `allowFrom` option for each action\n     * or for `pointerEvents`\n     *\n     * ```js\n     * interact(targett)\n     *   .resizable({\n     *     allowFrom: '.resize-handle',\n     *   .pointerEvents({\n     *     allowFrom: '.handle',,\n     *   })\n     * ```\n     *\n     * @param {string | Element | null} [newValue]\n     * @return {string | Element | object} The current allowFrom value or this\n     * Interactable\n     */\n    allowFrom(\n      /** A CSS selector string, an Element or `null` to allow from any element */\n      newValue: string | Element | null,\n    ): Interactable\n  }\n}\n\nfunction install(scope: Scope) {\n  const {\n    Interactable, // tslint:disable-line no-shadowed-variable\n  } = scope\n\n  Interactable.prototype.getAction = function getAction(\n    this: Interactable,\n    pointer: PointerType,\n    event: PointerEventType,\n    interaction: Interaction,\n    element: Element,\n  ): ActionProps {\n    const action = defaultActionChecker(this, event, interaction, element, scope)\n\n    if (this.options.actionChecker) {\n      return this.options.actionChecker(pointer, event, action, this, element, interaction)\n    }\n\n    return action\n  }\n\n  Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n    return this._backCompatOption('ignoreFrom', newValue)\n  }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n  Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n    return this._backCompatOption('allowFrom', newValue)\n  }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n  Interactable.prototype.actionChecker = actionChecker\n\n  Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker(\n  interactable: Interactable,\n  event: PointerEventType,\n  interaction: Interaction,\n  element: Element,\n  scope: Scope,\n) {\n  const rect = interactable.getRect(element)\n  const buttons =\n    (event as MouseEvent).buttons ||\n    {\n      0: 1,\n      1: 4,\n      3: 8,\n      4: 16,\n    }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n  const arg = {\n    action: null,\n    interactable,\n    interaction,\n    element,\n    rect,\n    buttons,\n  }\n\n  scope.fire('auto-start:check', arg)\n\n  return arg.action\n}\n\nfunction styleCursor(this: Interactable, newValue?: boolean) {\n  if (is.bool(newValue)) {\n    this.options.styleCursor = newValue\n\n    return this\n  }\n\n  if (newValue === null) {\n    delete this.options.styleCursor\n\n    return this\n  }\n\n  return this.options.styleCursor\n}\n\nfunction actionChecker(this: Interactable, checker?: any) {\n  if (is.func(checker)) {\n    this.options.actionChecker = checker\n\n    return this\n  }\n\n  if (checker === null) {\n    delete this.options.actionChecker\n\n    return this\n  }\n\n  return this.options.actionChecker\n}\n\nexport default {\n  id: 'auto-start/interactableMethods',\n  install,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n  CursorChecker,\n  PointerType,\n  PointerEventType,\n  Element,\n  ActionName,\n  ActionProps,\n} from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './InteractableMethods'\nimport InteractableMethods from './InteractableMethods'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n  export interface InteractStatic {\n    /**\n     * Returns or sets the maximum number of concurrent interactions allowed.  By\n     * default only 1 interaction is allowed at a time (for backwards\n     * compatibility). To allow multiple interactions on the same Interactables and\n     * elements, you need to enable it in the draggable, resizable and gesturable\n     * `'max'` and `'maxPerElement'` options.\n     *\n     * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n     */\n    maxInteractions: (newValue: any) => any\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    autoStart: AutoStart\n  }\n\n  interface SignalArgs {\n    'autoStart:before-start': Omit<SignalArgs['interactions:move'], 'interaction'> & {\n      interaction: Interaction<ActionName>\n    }\n    'autoStart:prepared': { interaction: Interaction }\n    'auto-start:check': CheckSignalArg\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface BaseDefaults {\n    actionChecker?: any\n    cursorChecker?: any\n    styleCursor?: any\n  }\n\n  interface PerActionDefaults {\n    manualStart?: boolean\n    max?: number\n    maxPerElement?: number\n    allowFrom?: string | Element\n    ignoreFrom?: string | Element\n    cursorChecker?: CursorChecker\n\n    // only allow left button by default\n    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n    // TODO: docst\n    mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16\n  }\n}\n\ninterface CheckSignalArg {\n  interactable: Interactable\n  interaction: Interaction\n  element: Element\n  action: ActionProps<ActionName>\n  buttons: number\n}\n\nexport interface AutoStart {\n  // Allow this many interactions to happen simultaneously\n  maxInteractions: number\n  withinInteractionLimit: typeof withinInteractionLimit\n  cursorElement: Element\n}\n\nfunction install(scope: Scope) {\n  const { interactStatic: interact, defaults } = scope\n\n  scope.usePlugin(InteractableMethods)\n\n  defaults.base.actionChecker = null\n  defaults.base.styleCursor = true\n\n  extend(defaults.perAction, {\n    manualStart: false,\n    max: Infinity,\n    maxPerElement: 1,\n    allowFrom: null,\n    ignoreFrom: null,\n\n    // only allow left button by default\n    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n    mouseButtons: 1,\n  })\n\n  interact.maxInteractions = (newValue: number) => maxInteractions(newValue, scope)\n\n  scope.autoStart = {\n    // Allow this many interactions to happen simultaneously\n    maxInteractions: Infinity,\n    withinInteractionLimit,\n    cursorElement: null,\n  }\n}\n\nfunction prepareOnDown(\n  { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n  scope: Scope,\n) {\n  if (interaction.interacting()) return\n\n  const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n  prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove(\n  { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n  scope: Scope,\n) {\n  if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) return\n\n  const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Element, scope)\n  prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove(arg: SignalArgs['interactions:move'], scope: Scope) {\n  const { interaction } = arg\n\n  if (\n    !interaction.pointerIsDown ||\n    interaction.interacting() ||\n    !interaction.pointerWasMoved ||\n    !interaction.prepared.name\n  ) {\n    return\n  }\n\n  scope.fire('autoStart:before-start', arg)\n\n  const { interactable } = interaction\n  const actionName = (interaction as Interaction<ActionName>).prepared.name\n\n  if (actionName && interactable) {\n    // check manualStart and interaction limit\n    if (\n      interactable.options[actionName].manualStart ||\n      !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n    ) {\n      interaction.stop()\n    } else {\n      interaction.start(interaction.prepared, interactable, interaction.element)\n      setInteractionCursor(interaction, scope)\n    }\n  }\n}\n\nfunction clearCursorOnStop({ interaction }: { interaction: Interaction }, scope: Scope) {\n  const { interactable } = interaction\n\n  if (interactable && interactable.options.styleCursor) {\n    setCursor(interaction.element, '', scope)\n  }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction<T extends ActionName>(\n  action: ActionProps<T>,\n  interactable: Interactable,\n  element: Element,\n  eventTarget: Node,\n  scope: Scope,\n) {\n  if (\n    interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n    interactable.options[action.name].enabled &&\n    withinInteractionLimit(interactable, element, action, scope)\n  ) {\n    return action\n  }\n\n  return null\n}\n\nfunction validateMatches(\n  interaction: Interaction,\n  pointer: PointerType,\n  event: PointerEventType,\n  matches: Interactable[],\n  matchElements: Element[],\n  eventTarget: Node,\n  scope: Scope,\n) {\n  for (let i = 0, len = matches.length; i < len; i++) {\n    const match = matches[i]\n    const matchElement = matchElements[i]\n    const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n    if (!matchAction) {\n      continue\n    }\n\n    const action = validateAction<ActionName>(matchAction, match, matchElement, eventTarget, scope)\n\n    if (action) {\n      return {\n        action,\n        interactable: match,\n        element: matchElement,\n      }\n    }\n  }\n\n  return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo(\n  interaction: Interaction,\n  pointer: PointerType,\n  event: PointerEventType,\n  eventTarget: Node,\n  scope: Scope,\n) {\n  let matches: Interactable[] = []\n  let matchElements: Element[] = []\n\n  let element = eventTarget as Element\n\n  function pushMatches(interactable: Interactable) {\n    matches.push(interactable)\n    matchElements.push(element)\n  }\n\n  while (is.element(element)) {\n    matches = []\n    matchElements = []\n\n    scope.interactables.forEachMatch(element, pushMatches)\n\n    const actionInfo = validateMatches(\n      interaction,\n      pointer,\n      event,\n      matches,\n      matchElements,\n      eventTarget,\n      scope,\n    )\n\n    if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n      return actionInfo\n    }\n\n    element = domUtils.parentNode(element) as Element\n  }\n\n  return { action: null, interactable: null, element: null }\n}\n\nfunction prepare(\n  interaction: Interaction,\n  {\n    action,\n    interactable,\n    element,\n  }: {\n    action: ActionProps<any>\n    interactable: Interactable\n    element: Element\n  },\n  scope: Scope,\n) {\n  action = action || { name: null }\n\n  interaction.interactable = interactable\n  interaction.element = element\n  copyAction(interaction.prepared, action)\n\n  interaction.rect = interactable && action.name ? interactable.getRect(element) : null\n\n  setInteractionCursor(interaction, scope)\n\n  scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit<T extends ActionName>(\n  interactable: Interactable,\n  element: Element,\n  action: ActionProps<T>,\n  scope: Scope,\n) {\n  const options = interactable.options\n  const maxActions = options[action.name].max\n  const maxPerElement = options[action.name].maxPerElement\n  const autoStartMax = scope.autoStart.maxInteractions\n  let activeInteractions = 0\n  let interactableCount = 0\n  let elementCount = 0\n\n  // no actions if any of these values == 0\n  if (!(maxActions && maxPerElement && autoStartMax)) {\n    return false\n  }\n\n  for (const interaction of scope.interactions.list) {\n    const otherAction = interaction.prepared.name\n\n    if (!interaction.interacting()) {\n      continue\n    }\n\n    activeInteractions++\n\n    if (activeInteractions >= autoStartMax) {\n      return false\n    }\n\n    if (interaction.interactable !== interactable) {\n      continue\n    }\n\n    interactableCount += otherAction === action.name ? 1 : 0\n\n    if (interactableCount >= maxActions) {\n      return false\n    }\n\n    if (interaction.element === element) {\n      elementCount++\n\n      if (otherAction === action.name && elementCount >= maxPerElement) {\n        return false\n      }\n    }\n  }\n\n  return autoStartMax > 0\n}\n\nfunction maxInteractions(newValue: any, scope: Scope) {\n  if (is.number(newValue)) {\n    scope.autoStart.maxInteractions = newValue\n\n    return this\n  }\n\n  return scope.autoStart.maxInteractions\n}\n\nfunction setCursor(element: Element, cursor: string, scope: Scope) {\n  const { cursorElement: prevCursorElement } = scope.autoStart\n\n  if (prevCursorElement && prevCursorElement !== element) {\n    prevCursorElement.style.cursor = ''\n  }\n\n  element.ownerDocument.documentElement.style.cursor = cursor\n  element.style.cursor = cursor\n  scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor<T extends ActionName>(interaction: Interaction<T>, scope: Scope) {\n  const { interactable, element, prepared } = interaction\n\n  if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n    // clear previous target element cursor\n    if (scope.autoStart.cursorElement) {\n      setCursor(scope.autoStart.cursorElement, '', scope)\n    }\n\n    return\n  }\n\n  let cursor = ''\n\n  if (prepared.name) {\n    const cursorChecker = interactable.options[prepared.name].cursorChecker\n\n    if (is.func(cursorChecker)) {\n      cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n    } else {\n      cursor = scope.actions.map[prepared.name].getCursor(prepared)\n    }\n  }\n\n  setCursor(interaction.element, cursor || '', scope)\n}\n\nconst autoStart: Plugin = {\n  id: 'auto-start/base',\n  before: ['actions'],\n  install,\n  listeners: {\n    'interactions:down': prepareOnDown,\n    'interactions:move': (arg, scope) => {\n      prepareOnMove(arg, scope)\n      startOnMove(arg, scope)\n    },\n    'interactions:stop': clearCursorOnStop,\n  },\n  maxInteractions,\n  withinInteractionLimit,\n  validateAction,\n}\n\nexport default autoStart\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n  if (interaction.prepared.name !== 'drag') return\n\n  // check if a drag is in the correct axis\n  const absX = Math.abs(dx)\n  const absY = Math.abs(dy)\n  const targetOptions = interaction.interactable.options.drag\n  const startAxis = targetOptions.startAxis\n  const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n  interaction.prepared.axis =\n    targetOptions.lockAxis === 'start'\n      ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n      : targetOptions.lockAxis\n\n  // if the movement isn't in the startAxis of the interactable\n  if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n    // cancel the prepared action\n    ;(interaction as Interaction<ActionName>).prepared.name = null\n\n    // then try to get a drag from another ineractable\n    let element = eventTarget as Element\n\n    const getDraggable = function (interactable: Interactable): Interactable | void {\n      if (interactable === interaction.interactable) return\n\n      const options = interaction.interactable.options.drag\n\n      if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n        const action = interactable.getAction(\n          interaction.downPointer,\n          interaction.downEvent,\n          interaction,\n          element,\n        )\n\n        if (\n          action &&\n          action.name === 'drag' &&\n          checkStartAxis(currentAxis, interactable) &&\n          autoStart.validateAction(action, interactable, element, eventTarget, scope)\n        ) {\n          return interactable\n        }\n      }\n    }\n\n    // check all interactables\n    while (is.element(element)) {\n      const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n      if (interactable) {\n        ;(interaction as Interaction<ActionName>).prepared.name = 'drag'\n        interaction.interactable = interactable\n        interaction.element = element\n        break\n      }\n\n      element = parentNode(element) as Element\n    }\n  }\n}\n\nfunction checkStartAxis(startAxis: string, interactable: Interactable) {\n  if (!interactable) {\n    return false\n  }\n\n  const thisAxis = interactable.options.drag.startAxis\n\n  return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n  id: 'auto-start/dragAxis',\n  listeners: { 'autoStart:before-start': beforeStart },\n}\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable */\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    hold?: number\n    delay?: number\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    autoStartHoldTimer?: any\n  }\n}\n\nfunction install(scope: Scope) {\n  const { defaults } = scope\n\n  scope.usePlugin(basePlugin)\n\n  defaults.perAction.hold = 0\n  defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration(interaction: Interaction) {\n  const actionName = interaction.prepared && interaction.prepared.name\n\n  if (!actionName) {\n    return null\n  }\n\n  const options = interaction.interactable.options\n\n  return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n  id: 'auto-start/hold',\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.autoStartHoldTimer = null\n    },\n\n    'autoStart:prepared': ({ interaction }) => {\n      const hold = getHoldDuration(interaction)\n\n      if (hold > 0) {\n        interaction.autoStartHoldTimer = setTimeout(() => {\n          interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n        }, hold)\n      }\n    },\n\n    'interactions:move': ({ interaction, duplicate }) => {\n      if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n        clearTimeout(interaction.autoStartHoldTimer)\n        interaction.autoStartHoldTimer = null\n      }\n    },\n\n    // prevent regular down->move autoStart\n    'autoStart:before-start': ({ interaction }) => {\n      const holdDuration = getHoldDuration(interaction)\n\n      if (holdDuration > 0) {\n        interaction.prepared.name = null\n      }\n    },\n  },\n  getHoldDuration,\n}\nexport default hold\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './dragAxis'\nimport './hold'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n  id: 'auto-start',\n  install(scope: Scope) {\n    scope.usePlugin(autoStart)\n    scope.usePlugin(hold)\n    scope.usePlugin(dragAxis)\n  },\n}\n","import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    preventDefault(newValue: PreventDefaultValue): this\n    preventDefault(): PreventDefaultValue\n    /**\n     * Returns or sets whether to prevent the browser's default behaviour in\n     * response to pointer events. Can be set to:\n     *  - `'always'` to always prevent\n     *  - `'never'` to never prevent\n     *  - `'auto'` to let interact.js try to determine what would be best\n     *\n     * @param newValue - `'always'`, `'never'` or `'auto'`\n     * @returns The current setting or this Interactable\n     */\n    preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this\n    checkAndPreventDefault(event: Event): void\n  }\n}\n\nconst preventDefault = function preventDefault(this: Interactable, newValue?: PreventDefaultValue) {\n  if (/^(always|never|auto)$/.test(newValue)) {\n    this.options.preventDefault = newValue\n    return this\n  }\n\n  if (is.bool(newValue)) {\n    this.options.preventDefault = newValue ? 'always' : 'never'\n    return this\n  }\n\n  return this.options.preventDefault\n} as Interactable['preventDefault']\n\nfunction checkAndPreventDefault(interactable: Interactable, scope: Scope, event: Event) {\n  const setting = interactable.options.preventDefault\n\n  if (setting === 'never') return\n\n  if (setting === 'always') {\n    event.preventDefault()\n    return\n  }\n\n  // setting === 'auto'\n\n  // if the browser supports passive event listeners and isn't running on iOS,\n  // don't preventDefault of touch{start,move} events. CSS touch-action and\n  // user-select should be used instead of calling event.preventDefault().\n  if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n    const doc = getWindow(event.target).document\n    const docOptions = scope.getDocOptions(doc)\n\n    if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n      return\n    }\n  }\n\n  // don't preventDefault of pointerdown events\n  if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n    return\n  }\n\n  // don't preventDefault on editable elements\n  if (\n    is.element(event.target) &&\n    matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n  ) {\n    return\n  }\n\n  event.preventDefault()\n}\n\nfunction onInteractionEvent({ interaction, event }: { interaction: Interaction; event: PointerEventType }) {\n  if (interaction.interactable) {\n    interaction.interactable.checkAndPreventDefault(event as Event)\n  }\n}\n\nexport function install(scope: Scope) {\n  const { Interactable } = scope\n\n  Interactable.prototype.preventDefault = preventDefault\n\n  Interactable.prototype.checkAndPreventDefault = function (event) {\n    return checkAndPreventDefault(this, scope, event)\n  }\n\n  // prevent native HTML5 drag on interact.js target elements\n  scope.interactions.docEvents.push({\n    type: 'dragstart',\n    listener(event) {\n      for (const interaction of scope.interactions.list) {\n        if (\n          interaction.element &&\n          (interaction.element === event.target || nodeContains(interaction.element, event.target))\n        ) {\n          interaction.interactable.checkAndPreventDefault(event)\n          return\n        }\n      }\n    },\n  })\n}\n\nexport default {\n  id: 'core/interactablePreventDefault',\n  install,\n  listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n    acc[`interactions:${eventType}`] = onInteractionEvent\n    return acc\n  }, {} as any),\n}\n","import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent(type: string, actions: Actions) {\n  if (actions.phaselessTypes[type]) {\n    return true\n  }\n\n  for (const name in actions.map) {\n    if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n      return true\n    }\n  }\n\n  return false\n}\n","import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone<T extends Object>(source: T): Partial<T> {\n  const dest = {} as Partial<T>\n\n  for (const prop in source) {\n    const value = source[prop]\n\n    if (is.plainObject(value)) {\n      dest[prop] = clone(value) as any\n    } else if (is.array(value)) {\n      dest[prop] = arr.from(value) as typeof value\n    } else {\n      dest[prop] = value\n    }\n  }\n\n  return dest\n}\n","import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n  delta: Point\n  rectDelta: Rect\n  coords: Point\n  rect: FullRect\n  eventProps: any[]\n  changed: boolean\n}\n\ninterface MethodArg {\n  phase: EventPhase\n  pageCoords: Point\n  rect: FullRect\n  coords: Point\n  preEnd?: boolean\n  skipModifiers?: number\n}\n\nexport class Modification {\n  states: ModifierState[] = []\n  startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n  startDelta!: Point\n  result!: ModificationResult\n  endResult!: Point\n  startEdges!: EdgeOptions\n  edges: EdgeOptions\n  readonly interaction: Readonly<Interaction>\n\n  constructor(interaction: Interaction) {\n    this.interaction = interaction\n    this.result = createResult()\n    this.edges = {\n      left: false,\n      right: false,\n      top: false,\n      bottom: false,\n    }\n  }\n\n  start({ phase }: { phase: EventPhase }, pageCoords: Point) {\n    const { interaction } = this\n    const modifierList = getModifierList(interaction)\n    this.prepareStates(modifierList)\n\n    this.startEdges = extend({}, interaction.edges)\n    this.edges = extend({}, this.startEdges)\n    this.startOffset = getRectOffset(interaction.rect, pageCoords)\n    this.startDelta = { x: 0, y: 0 }\n\n    const arg = this.fillArg({\n      phase,\n      pageCoords,\n      preEnd: false,\n    })\n\n    this.result = createResult()\n    this.startAll(arg)\n\n    const result = (this.result = this.setAll(arg))\n\n    return result\n  }\n\n  fillArg(arg: Partial<ModifierArg>) {\n    const { interaction } = this\n\n    arg.interaction = interaction\n    arg.interactable = interaction.interactable\n    arg.element = interaction.element\n    arg.rect ||= interaction.rect\n    arg.edges ||= this.startEdges\n    arg.startOffset = this.startOffset\n\n    return arg as ModifierArg\n  }\n\n  startAll(arg: MethodArg & Partial<ModifierArg>) {\n    for (const state of this.states) {\n      if (state.methods.start) {\n        arg.state = state\n        state.methods.start(arg as ModifierArg)\n      }\n    }\n  }\n\n  setAll(arg: MethodArg & Partial<ModifierArg>): ModificationResult {\n    const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n    arg.coords = extend({}, arg.pageCoords)\n    arg.rect = extend({}, unmodifiedRect)\n    arg.edges = extend({}, unmodifiedEdges)\n\n    const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n    const newResult = createResult(arg.coords, arg.rect)\n\n    for (const state of states) {\n      const { options } = state\n      const lastModifierCoords = extend({}, arg.coords)\n      let returnValue = null\n\n      if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n        arg.state = state\n        returnValue = state.methods.set(arg as ModifierArg<never>)\n\n        rectUtils.addEdges(arg.edges, arg.rect, {\n          x: arg.coords.x - lastModifierCoords.x,\n          y: arg.coords.y - lastModifierCoords.y,\n        })\n      }\n\n      newResult.eventProps.push(returnValue)\n    }\n\n    extend(this.edges, arg.edges)\n\n    newResult.delta.x = arg.coords.x - arg.pageCoords.x\n    newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n    newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n    newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n    newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n    newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n    const prevCoords = this.result.coords\n    const prevRect = this.result.rect\n\n    if (prevCoords && prevRect) {\n      const rectChanged =\n        newResult.rect.left !== prevRect.left ||\n        newResult.rect.right !== prevRect.right ||\n        newResult.rect.top !== prevRect.top ||\n        newResult.rect.bottom !== prevRect.bottom\n\n      newResult.changed =\n        rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n    }\n\n    return newResult\n  }\n\n  applyToInteraction(arg: { phase: EventPhase; rect?: Rect }) {\n    const { interaction } = this\n    const { phase } = arg\n    const curCoords = interaction.coords.cur\n    const startCoords = interaction.coords.start\n    const { result, startDelta } = this\n    const curDelta = result.delta\n\n    if (phase === 'start') {\n      extend(this.startDelta, result.delta)\n    }\n\n    for (const [coordsSet, delta] of [\n      [startCoords, startDelta],\n      [curCoords, curDelta],\n    ] as const) {\n      coordsSet.page.x += delta.x\n      coordsSet.page.y += delta.y\n      coordsSet.client.x += delta.x\n      coordsSet.client.y += delta.y\n    }\n\n    const { rectDelta } = this.result\n    const rect = arg.rect || interaction.rect\n\n    rect.left += rectDelta.left\n    rect.right += rectDelta.right\n    rect.top += rectDelta.top\n    rect.bottom += rectDelta.bottom\n\n    rect.width = rect.right - rect.left\n    rect.height = rect.bottom - rect.top\n  }\n\n  setAndApply(\n    arg: Partial<DoAnyPhaseArg> & {\n      phase: EventPhase\n      preEnd?: boolean\n      skipModifiers?: number\n      modifiedCoords?: Point\n    },\n  ): void | false {\n    const { interaction } = this\n    const { phase, preEnd, skipModifiers } = arg\n\n    const result = this.setAll(\n      this.fillArg({\n        preEnd,\n        phase,\n        pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n      }),\n    )\n\n    this.result = result\n\n    // don't fire an action move if a modifier would keep the event in the same\n    // cordinates as before\n    if (\n      !result.changed &&\n      (!skipModifiers || skipModifiers < this.states.length) &&\n      interaction.interacting()\n    ) {\n      return false\n    }\n\n    if (arg.modifiedCoords) {\n      const { page } = interaction.coords.cur\n      const adjustment = {\n        x: arg.modifiedCoords.x - page.x,\n        y: arg.modifiedCoords.y - page.y,\n      }\n\n      result.coords.x += adjustment.x\n      result.coords.y += adjustment.y\n      result.delta.x += adjustment.x\n      result.delta.y += adjustment.y\n    }\n\n    this.applyToInteraction(arg)\n  }\n\n  beforeEnd(arg: Omit<DoAnyPhaseArg, 'iEvent'> & { state?: ModifierState }): void | false {\n    const { interaction, event } = arg\n    const states = this.states\n\n    if (!states || !states.length) {\n      return\n    }\n\n    let doPreend = false\n\n    for (const state of states) {\n      arg.state = state\n      const { options, methods } = state\n\n      const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n      if (endPosition) {\n        this.endResult = endPosition\n        return false\n      }\n\n      doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n    }\n\n    if (doPreend) {\n      // trigger a final modified move before ending\n      interaction.move({ event, preEnd: true })\n    }\n  }\n\n  stop(arg: { interaction: Interaction }) {\n    const { interaction } = arg\n\n    if (!this.states || !this.states.length) {\n      return\n    }\n\n    const modifierArg: Partial<ModifierArg> = extend(\n      {\n        states: this.states,\n        interactable: interaction.interactable,\n        element: interaction.element,\n        rect: null,\n      },\n      arg,\n    )\n\n    this.fillArg(modifierArg)\n\n    for (const state of this.states) {\n      modifierArg.state = state\n\n      if (state.methods.stop) {\n        state.methods.stop(modifierArg as ModifierArg)\n      }\n    }\n\n    this.states = null\n    this.endResult = null\n  }\n\n  prepareStates(modifierList: Modifier[]) {\n    this.states = []\n\n    for (let index = 0; index < modifierList.length; index++) {\n      const { options, methods, name } = modifierList[index]\n\n      this.states.push({\n        options,\n        methods,\n        index,\n        name,\n      })\n    }\n\n    return this.states\n  }\n\n  restoreInteractionCoords({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n    if (!modification.result) return\n\n    const { startDelta } = modification\n    const { delta: curDelta, rectDelta } = modification.result\n\n    const coordsAndDeltas = [\n      [coords.start, startDelta],\n      [coords.cur, curDelta],\n    ]\n\n    for (const [coordsSet, delta] of coordsAndDeltas as any) {\n      coordsSet.page.x -= delta.x\n      coordsSet.page.y -= delta.y\n      coordsSet.client.x -= delta.x\n      coordsSet.client.y -= delta.y\n    }\n\n    rect.left -= rectDelta.left\n    rect.right -= rectDelta.right\n    rect.top -= rectDelta.top\n    rect.bottom -= rectDelta.bottom\n  }\n\n  shouldDo(options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n    if (\n      // ignore disabled modifiers\n      !options ||\n      options.enabled === false ||\n      // check if we require endOnly option to fire move before end\n      (requireEndOnly && !options.endOnly) ||\n      // don't apply endOnly modifiers when not ending\n      (options.endOnly && !preEnd) ||\n      // check if modifier should run be applied on start\n      (phase === 'start' && !options.setStart)\n    ) {\n      return false\n    }\n\n    return true\n  }\n\n  copyFrom(other: Modification) {\n    this.startOffset = other.startOffset\n    this.startDelta = other.startDelta\n    this.startEdges = other.startEdges\n    this.edges = other.edges\n    this.states = other.states.map((s) => clone(s) as ModifierState)\n    this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n  }\n\n  destroy() {\n    for (const prop in this) {\n      this[prop] = null\n    }\n  }\n}\n\nfunction createResult(coords?: Point, rect?: FullRect): ModificationResult {\n  return {\n    rect,\n    coords,\n    delta: { x: 0, y: 0 },\n    rectDelta: {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0,\n    },\n    eventProps: [],\n    changed: true,\n  }\n}\n\nfunction getModifierList(interaction) {\n  const actionOptions = interaction.interactable.options[interaction.prepared.name]\n  const actionModifiers = actionOptions.modifiers\n\n  if (actionModifiers && actionModifiers.length) {\n    return actionModifiers\n  }\n\n  return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n    .map((type) => {\n      const options = actionOptions[type]\n\n      return (\n        options &&\n        options.enabled && {\n          options,\n          methods: options._methods,\n        }\n      )\n    })\n    .filter((m) => !!m)\n}\n\nexport function getRectOffset(rect, coords) {\n  return rect\n    ? {\n        left: coords.x - rect.left,\n        top: coords.y - rect.top,\n        right: rect.right - coords.x,\n        bottom: rect.bottom - coords.y,\n      }\n    : {\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0,\n      }\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    modification?: Modification\n  }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface InteractEvent {\n    modifiers?: Array<{\n      name: string\n      [key: string]: any\n    }>\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    modifiers?: Modifier[]\n  }\n}\n\nexport function makeModifier<\n  Defaults extends { enabled?: boolean },\n  State extends ModifierState,\n  Name extends string,\n  Result,\n>(module: ModifierModule<Defaults, State, Result>, name?: Name) {\n  const { defaults } = module\n  const methods = {\n    start: module.start,\n    set: module.set,\n    beforeEnd: module.beforeEnd,\n    stop: module.stop,\n  }\n\n  const modifier = (_options?: Partial<Defaults>) => {\n    const options = (_options || {}) as Defaults\n\n    options.enabled = options.enabled !== false\n\n    // add missing defaults to options\n    for (const prop in defaults) {\n      if (!(prop in options)) {\n        ;(options as any)[prop] = defaults[prop]\n      }\n    }\n\n    const m: Modifier<Defaults, State, Name, Result> = {\n      options,\n      methods,\n      name,\n      enable: () => {\n        options.enabled = true\n        return m\n      },\n      disable: () => {\n        options.enabled = false\n        return m\n      },\n    }\n\n    return m\n  }\n\n  if (name && typeof name === 'string') {\n    // for backwrads compatibility\n    modifier._defaults = defaults\n    modifier._methods = methods\n  }\n\n  return modifier\n}\n\nexport function addEventModifiers({\n  iEvent,\n  interaction,\n}: {\n  iEvent: InteractEvent<any>\n  interaction: Interaction<any>\n}) {\n  const result = interaction.modification!.result\n\n  if (result) {\n    iEvent.modifiers = result.eventProps\n  }\n}\n\nconst modifiersBase: Plugin = {\n  id: 'modifiers/base',\n  before: ['actions'],\n  install: (scope) => {\n    scope.defaults.perAction.modifiers = []\n  },\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.modification = new Modification(interaction)\n    },\n\n    'interactions:before-action-start': (arg) => {\n      const { interaction } = arg\n      const modification = arg.interaction.modification!\n\n      modification.start(arg, interaction.coords.start.page)\n      interaction.edges = modification.edges\n      modification.applyToInteraction(arg)\n    },\n\n    'interactions:before-action-move': (arg) => {\n      const { interaction } = arg\n      const { modification } = interaction\n      const ret = modification.setAndApply(arg)\n      interaction.edges = modification.edges\n\n      return ret\n    },\n\n    'interactions:before-action-end': (arg) => {\n      const { interaction } = arg\n      const { modification } = interaction\n      const ret = modification.beforeEnd(arg)\n      interaction.edges = modification.startEdges\n\n      return ret\n    },\n\n    'interactions:action-start': addEventModifiers,\n    'interactions:action-move': addEventModifiers,\n    'interactions:action-end': addEventModifiers,\n\n    'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n    'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n    'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n  },\n}\n\nexport default modifiersBase\n","import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'\n\nexport interface Defaults {\n  base: BaseDefaults\n  perAction: PerActionDefaults\n  actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n  preventDefault?: 'always' | 'never' | 'auto'\n  deltaSource?: 'page' | 'client'\n  context?: Node\n  getRect?: (element: Element) => Rect\n}\n\nexport interface PerActionDefaults {\n  enabled?: boolean\n  origin?: Point | string | Element\n  listeners?: Listeners\n  allowFrom?: string | Element\n  ignoreFrom?: string | Element\n}\n\nexport type Options = Partial<BaseDefaults> &\n  Partial<PerActionDefaults> & {\n    [P in keyof ActionDefaults]?: Partial<ActionDefaults[P]>\n  }\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean<Partial<ActionDefaults>> {}\n\nexport const defaults: Defaults = {\n  base: {\n    preventDefault: 'auto',\n    deltaSource: 'page',\n  },\n\n  perAction: {\n    enabled: false,\n    origin: { x: 0, y: 0 },\n  },\n\n  actions: {} as ActionDefaults,\n}\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n  start: true\n  move: true\n  end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n  pageX: number\n  pageY: number\n\n  clientX: number\n  clientY: number\n\n  dx: number\n  dy: number\n\n  velocityX: number\n  velocityY: number\n}\n\nexport class InteractEvent<\n  T extends ActionName = never,\n  P extends EventPhase = EventPhase,\n> extends BaseEvent<T> {\n  declare target: Element\n  declare currentTarget: Element\n  relatedTarget: Element | null = null\n  screenX?: number\n  screenY?: number\n  button: number\n  buttons: number\n  ctrlKey: boolean\n  shiftKey: boolean\n  altKey: boolean\n  metaKey: boolean\n  page: Point\n  client: Point\n  delta: Point\n  rect: FullRect\n  x0: number\n  y0: number\n  t0: number\n  dt: number\n  duration: number\n  clientX0: number\n  clientY0: number\n  velocity: Point\n  speed: number\n  swipe: ReturnType<InteractEvent<T>['getSwipe']>\n  // resize\n  axes?: 'x' | 'y' | 'xy'\n  /** @internal */\n  preEnd?: boolean\n\n  constructor(\n    interaction: Interaction<T>,\n    event: PointerEventType,\n    actionName: T,\n    phase: P,\n    element: Element,\n    preEnd?: boolean,\n    type?: string,\n  ) {\n    super(interaction)\n\n    element = element || interaction.element\n\n    const target = interaction.interactable\n    const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n    const origin = getOriginXY(target, element, actionName)\n    const starting = phase === 'start'\n    const ending = phase === 'end'\n    const prevEvent = starting ? this : interaction.prevEvent\n    const coords = starting\n      ? interaction.coords.start\n      : ending\n        ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n        : interaction.coords.cur\n\n    this.page = extend({}, coords.page)\n    this.client = extend({}, coords.client)\n    this.rect = extend({}, interaction.rect)\n    this.timeStamp = coords.timeStamp\n\n    if (!ending) {\n      this.page.x -= origin.x\n      this.page.y -= origin.y\n\n      this.client.x -= origin.x\n      this.client.y -= origin.y\n    }\n\n    this.ctrlKey = event.ctrlKey\n    this.altKey = event.altKey\n    this.shiftKey = event.shiftKey\n    this.metaKey = event.metaKey\n    this.button = (event as MouseEvent).button\n    this.buttons = (event as MouseEvent).buttons\n    this.target = element\n    this.currentTarget = element\n    this.preEnd = preEnd\n    this.type = type || actionName + (phase || '')\n    this.interactable = target\n\n    this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n    this.x0 = interaction.coords.start.page.x - origin.x\n    this.y0 = interaction.coords.start.page.y - origin.y\n    this.clientX0 = interaction.coords.start.client.x - origin.x\n    this.clientY0 = interaction.coords.start.client.y - origin.y\n\n    if (starting || ending) {\n      this.delta = { x: 0, y: 0 }\n    } else {\n      this.delta = {\n        x: this[deltaSource].x - prevEvent[deltaSource].x,\n        y: this[deltaSource].y - prevEvent[deltaSource].y,\n      }\n    }\n\n    this.dt = interaction.coords.delta.timeStamp\n    this.duration = this.timeStamp - this.t0\n\n    // velocity and speed in pixels per second\n    this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n    this.speed = hypot(this.velocity.x, this.velocity.y)\n\n    this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n  }\n\n  getSwipe() {\n    const interaction = this._interaction\n\n    if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n      return null\n    }\n\n    let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n    const overlap = 22.5\n\n    if (angle < 0) {\n      angle += 360\n    }\n\n    const left = 135 - overlap <= angle && angle < 225 + overlap\n    const up = 225 - overlap <= angle && angle < 315 + overlap\n\n    const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n    const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n    return {\n      up,\n      down,\n      left,\n      right,\n      angle,\n      speed: interaction.prevEvent.speed,\n      velocity: {\n        x: interaction.prevEvent.velocityX,\n        y: interaction.prevEvent.velocityY,\n      },\n    }\n  }\n\n  preventDefault() {}\n\n  /**\n   * Don't call listeners on the remaining targets\n   */\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true\n  }\n\n  /**\n   * Don't call any other listeners (even on the current target)\n   */\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n  pageX: {\n    get() {\n      return this.page.x\n    },\n    set(value) {\n      this.page.x = value\n    },\n  },\n  pageY: {\n    get() {\n      return this.page.y\n    },\n    set(value) {\n      this.page.y = value\n    },\n  },\n\n  clientX: {\n    get() {\n      return this.client.x\n    },\n    set(value) {\n      this.client.x = value\n    },\n  },\n  clientY: {\n    get() {\n      return this.client.y\n    },\n    set(value) {\n      this.client.y = value\n    },\n  },\n\n  dx: {\n    get() {\n      return this.delta.x\n    },\n    set(value) {\n      this.delta.x = value\n    },\n  },\n  dy: {\n    get() {\n      return this.delta.y\n    },\n    set(value) {\n      this.delta.y = value\n    },\n  },\n\n  velocityX: {\n    get() {\n      return this.velocity.x\n    },\n    set(value) {\n      this.velocity.x = value\n    },\n  },\n  velocityY: {\n    get() {\n      return this.velocity.y\n    },\n    set(value) {\n      this.velocity.y = value\n    },\n  },\n})\n","import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n  id: number\n  pointer: PointerType\n  event: PointerEventType\n  downTime: number\n  downTarget: Node\n\n  constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n    this.id = id\n    this.pointer = pointer\n    this.event = event\n    this.downTime = downTime\n    this.downTarget = downTarget\n  }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type {\n  Element,\n  EdgeOptions,\n  PointerEventType,\n  PointerType,\n  FullRect,\n  CoordsSet,\n  ActionName,\n  ActionProps,\n} from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { ActionDefaults } from './options'\nimport { PointerInfo } from './PointerInfo'\nimport type { Scope } from './scope'\n\nexport enum _ProxyValues {\n  interactable = '',\n  element = '',\n  prepared = '',\n  pointerIsDown = '',\n  pointerWasMoved = '',\n  _proxy = '',\n}\n\nexport enum _ProxyMethods {\n  start = '',\n  move = '',\n  end = '',\n  stop = '',\n  interacting = '',\n}\n\nexport type PointerArgProps<T extends {} = {}> = {\n  pointer: PointerType\n  event: PointerEventType\n  eventTarget: Node\n  pointerIndex: number\n  pointerInfo: PointerInfo\n  interaction: Interaction<never>\n} & T\n\nexport interface DoPhaseArg<T extends ActionName, P extends EventPhase> {\n  event: PointerEventType\n  phase: EventPhase\n  interaction: Interaction<T>\n  iEvent: InteractEvent<T, P>\n  preEnd?: boolean\n  type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg<ActionName, EventPhase>\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactions:new': { interaction: Interaction<ActionName> }\n    'interactions:down': PointerArgProps<{\n      type: 'down'\n    }>\n    'interactions:move': PointerArgProps<{\n      type: 'move'\n      dx: number\n      dy: number\n      duplicate: boolean\n    }>\n    'interactions:up': PointerArgProps<{\n      type: 'up'\n      curEventTarget: EventTarget\n    }>\n    'interactions:cancel': SignalArgs['interactions:up'] & {\n      type: 'cancel'\n      curEventTarget: EventTarget\n    }\n    'interactions:update-pointer': PointerArgProps<{\n      down: boolean\n    }>\n    'interactions:remove-pointer': PointerArgProps\n    'interactions:blur': { interaction: Interaction<never>; event: Event; type: 'blur' }\n    'interactions:before-action-start': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-start': DoAnyPhaseArg\n    'interactions:after-action-start': DoAnyPhaseArg\n    'interactions:before-action-move': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-move': DoAnyPhaseArg\n    'interactions:after-action-move': DoAnyPhaseArg\n    'interactions:before-action-end': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-end': DoAnyPhaseArg\n    'interactions:after-action-end': DoAnyPhaseArg\n    'interactions:stop': { interaction: Interaction }\n  }\n}\n\nexport type InteractionProxy<T extends ActionName | null = never> = Pick<\n  Interaction<T>,\n  Exclude<keyof typeof _ProxyValues | keyof typeof _ProxyMethods, '_proxy'>\n>\n\nlet idCounter = 0\n\nexport class Interaction<T extends ActionName | null = ActionName> {\n  /** current interactable being interacted with */\n  interactable: Interactable | null = null\n\n  /** the target element of the interactable */\n  element: Element | null = null\n  rect: FullRect | null = null\n  /** @internal */\n  _rects?: {\n    start: FullRect\n    corrected: FullRect\n    previous: FullRect\n    delta: FullRect\n  }\n  /** @internal */\n  edges: EdgeOptions | null = null\n\n  /** @internal */\n  _scopeFire: Scope['fire']\n\n  // action that's ready to be fired on next move event\n  prepared: ActionProps<T> = {\n    name: null,\n    axis: null,\n    edges: null,\n  }\n\n  pointerType: string\n\n  /** @internal keep track of added pointers */\n  pointers: PointerInfo[] = []\n\n  /** @internal pointerdown/mousedown/touchstart event */\n  downEvent: PointerEventType | null = null\n\n  /** @internal */ downPointer: PointerType = {} as PointerType\n\n  /** @internal */\n  _latestPointer: {\n    pointer: PointerType\n    event: PointerEventType\n    eventTarget: Node\n  } = {\n    pointer: null,\n    event: null,\n    eventTarget: null,\n  }\n\n  /** @internal */ prevEvent: InteractEvent<T, EventPhase> = null\n\n  pointerIsDown = false\n  pointerWasMoved = false\n  /** @internal */ _interacting = false\n  /** @internal */ _ending = false\n  /** @internal */ _stopped = true\n  /** @internal */ _proxy: InteractionProxy<T>\n\n  /** @internal */ simulation = null\n\n  /** @internal */ get pointerMoveTolerance() {\n    return 1\n  }\n\n  doMove = warnOnce(function (this: Interaction, signalArg: any) {\n    this.move(signalArg)\n  }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n  coords: CoordsSet = {\n    // Starting InteractEvent pointer coordinates\n    start: pointerUtils.newCoords(),\n    // Previous native pointer move event coordinates\n    prev: pointerUtils.newCoords(),\n    // current native pointer move event coordinates\n    cur: pointerUtils.newCoords(),\n    // Change in coordinates and time of the pointer\n    delta: pointerUtils.newCoords(),\n    // pointer velocity\n    velocity: pointerUtils.newCoords(),\n  }\n\n  /** @internal */ readonly _id: number = idCounter++\n\n  constructor({ pointerType, scopeFire }: { pointerType?: string; scopeFire: Scope['fire'] }) {\n    this._scopeFire = scopeFire\n    this.pointerType = pointerType\n\n    const that = this\n\n    this._proxy = {} as InteractionProxy<T>\n\n    for (const key in _ProxyValues) {\n      Object.defineProperty(this._proxy, key, {\n        get() {\n          return that[key]\n        },\n      })\n    }\n\n    for (const key in _ProxyMethods) {\n      Object.defineProperty(this._proxy, key, {\n        value: (...args: any[]) => that[key](...args),\n      })\n    }\n\n    this._scopeFire('interactions:new', { interaction: this })\n  }\n\n  pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n    const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n    const pointerInfo = this.pointers[pointerIndex]\n\n    this._scopeFire('interactions:down', {\n      pointer,\n      event,\n      eventTarget,\n      pointerIndex,\n      pointerInfo,\n      type: 'down',\n      interaction: this as unknown as Interaction<never>,\n    })\n  }\n\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable({\n   *     // disable the default drag start by down->move\n   *     manualStart: true\n   *   })\n   *   // start dragging after the user holds the pointer down\n   *   .on('hold', function (event) {\n   *     var interaction = event.interaction\n   *\n   *     if (!interaction.interacting()) {\n   *       interaction.start({ name: 'drag' },\n   *                         event.interactable,\n   *                         event.currentTarget)\n   *     }\n   * })\n   * ```\n   *\n   * Start an action with the given Interactable and Element as tartgets. The\n   * action must be enabled for the target Interactable and an appropriate\n   * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n   *\n   * Use it with `interactable.<action>able({ manualStart: false })` to always\n   * [start actions manually](https://github.com/taye/interact.js/issues/114)\n   *\n   * @param action - The action to be performed - drag, resize, etc.\n   * @param target - The Interactable to target\n   * @param element - The DOM Element to target\n   * @returns Whether the interaction was successfully started\n   */\n  start<A extends ActionName>(action: ActionProps<A>, interactable: Interactable, element: Element): boolean {\n    if (\n      this.interacting() ||\n      !this.pointerIsDown ||\n      this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n      !interactable.options[action.name as keyof ActionDefaults].enabled\n    ) {\n      return false\n    }\n\n    copyAction(this.prepared, action)\n\n    this.interactable = interactable\n    this.element = element\n    this.rect = interactable.getRect(element)\n    this.edges = this.prepared.edges\n      ? extend({}, this.prepared.edges)\n      : { left: true, right: true, top: true, bottom: true }\n    this._stopped = false\n    this._interacting =\n      this._doPhase({\n        interaction: this,\n        event: this.downEvent,\n        phase: 'start',\n      }) && !this._stopped\n\n    return this._interacting\n  }\n\n  pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n    if (!this.simulation && !(this.modification && this.modification.endResult)) {\n      this.updatePointer(pointer, event, eventTarget, false)\n    }\n\n    const duplicateMove =\n      this.coords.cur.page.x === this.coords.prev.page.x &&\n      this.coords.cur.page.y === this.coords.prev.page.y &&\n      this.coords.cur.client.x === this.coords.prev.client.x &&\n      this.coords.cur.client.y === this.coords.prev.client.y\n\n    let dx: number\n    let dy: number\n\n    // register movement greater than pointerMoveTolerance\n    if (this.pointerIsDown && !this.pointerWasMoved) {\n      dx = this.coords.cur.client.x - this.coords.start.client.x\n      dy = this.coords.cur.client.y - this.coords.start.client.y\n\n      this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n    }\n\n    const pointerIndex = this.getPointerIndex(pointer)\n    const signalArg = {\n      pointer,\n      pointerIndex,\n      pointerInfo: this.pointers[pointerIndex],\n      event,\n      type: 'move' as const,\n      eventTarget,\n      dx,\n      dy,\n      duplicate: duplicateMove,\n      interaction: this as unknown as Interaction<never>,\n    }\n\n    if (!duplicateMove) {\n      // set pointer coordinate, time changes and velocity\n      pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n    }\n\n    this._scopeFire('interactions:move', signalArg)\n\n    if (!duplicateMove && !this.simulation) {\n      // if interacting, fire an 'action-move' signal etc\n      if (this.interacting()) {\n        signalArg.type = null\n        this.move(signalArg)\n      }\n\n      if (this.pointerWasMoved) {\n        pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n      }\n    }\n  }\n\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable(true)\n   *   .on('dragmove', function (event) {\n   *     if (someCondition) {\n   *       // change the snap settings\n   *       event.interactable.draggable({ snap: { targets: [] }})\n   *       // fire another move event with re-calculated snap\n   *       event.interaction.move()\n   *     }\n   *   })\n   * ```\n   *\n   * Force a move of the current action at the same coordinates. Useful if\n   * snap/restrict has been changed and you want a movement with the new\n   * settings.\n   */\n  move(signalArg?: any) {\n    if (!signalArg || !signalArg.event) {\n      pointerUtils.setZeroCoords(this.coords.delta)\n    }\n\n    signalArg = extend(\n      {\n        pointer: this._latestPointer.pointer,\n        event: this._latestPointer.event,\n        eventTarget: this._latestPointer.eventTarget,\n        interaction: this,\n      },\n      signalArg || {},\n    )\n\n    signalArg.phase = 'move'\n\n    this._doPhase(signalArg)\n  }\n\n  /**\n   * @internal\n   * End interact move events and stop auto-scroll unless simulation is running\n   */\n  pointerUp(pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n    let pointerIndex = this.getPointerIndex(pointer)\n\n    if (pointerIndex === -1) {\n      pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n    }\n\n    const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n    this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n      pointer,\n      pointerIndex,\n      pointerInfo: this.pointers[pointerIndex],\n      event,\n      eventTarget,\n      type: type as any,\n      curEventTarget,\n      interaction: this as unknown as Interaction<never>,\n    })\n\n    if (!this.simulation) {\n      this.end(event)\n    }\n\n    this.removePointer(pointer, event)\n  }\n\n  /** @internal */\n  documentBlur(event: Event) {\n    this.end(event as any)\n    this._scopeFire('interactions:blur', {\n      event,\n      type: 'blur',\n      interaction: this as unknown as Interaction<never>,\n    })\n  }\n\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable(true)\n   *   .on('move', function (event) {\n   *     if (event.pageX > 1000) {\n   *       // end the current action\n   *       event.interaction.end()\n   *       // stop all further listeners from being called\n   *       event.stopImmediatePropagation()\n   *     }\n   *   })\n   * ```\n   */\n  end(event?: PointerEventType) {\n    this._ending = true\n    event = event || this._latestPointer.event\n    let endPhaseResult: boolean\n\n    if (this.interacting()) {\n      endPhaseResult = this._doPhase({\n        event,\n        interaction: this,\n        phase: 'end',\n      })\n    }\n\n    this._ending = false\n\n    if (endPhaseResult === true) {\n      this.stop()\n    }\n  }\n\n  currentAction() {\n    return this._interacting ? this.prepared.name : null\n  }\n\n  interacting() {\n    return this._interacting\n  }\n\n  stop() {\n    this._scopeFire('interactions:stop', { interaction: this })\n\n    this.interactable = this.element = null\n\n    this._interacting = false\n    this._stopped = true\n    this.prepared.name = this.prevEvent = null\n  }\n\n  /** @internal */\n  getPointerIndex(pointer: any) {\n    const pointerId = pointerUtils.getPointerId(pointer)\n\n    // mouse and pen interactions may have only one pointer\n    return this.pointerType === 'mouse' || this.pointerType === 'pen'\n      ? this.pointers.length - 1\n      : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n  }\n\n  /** @internal */\n  getPointerInfo(pointer: any) {\n    return this.pointers[this.getPointerIndex(pointer)]\n  }\n\n  /** @internal */\n  updatePointer(pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n    const id = pointerUtils.getPointerId(pointer)\n    let pointerIndex = this.getPointerIndex(pointer)\n    let pointerInfo = this.pointers[pointerIndex]\n\n    down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n    if (!pointerInfo) {\n      pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n      pointerIndex = this.pointers.length\n      this.pointers.push(pointerInfo)\n    } else {\n      pointerInfo.pointer = pointer\n    }\n\n    pointerUtils.setCoords(\n      this.coords.cur,\n      this.pointers.map((p) => p.pointer),\n      this._now(),\n    )\n    pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n    if (down) {\n      this.pointerIsDown = true\n\n      pointerInfo.downTime = this.coords.cur.timeStamp\n      pointerInfo.downTarget = eventTarget\n      pointerUtils.pointerExtend(this.downPointer, pointer)\n\n      if (!this.interacting()) {\n        pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n        pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n        this.downEvent = event\n        this.pointerWasMoved = false\n      }\n    }\n\n    this._updateLatestPointer(pointer, event, eventTarget)\n\n    this._scopeFire('interactions:update-pointer', {\n      pointer,\n      event,\n      eventTarget,\n      down,\n      pointerInfo,\n      pointerIndex,\n      interaction: this as unknown as Interaction<never>,\n    })\n\n    return pointerIndex\n  }\n\n  /** @internal */\n  removePointer(pointer: PointerType, event: PointerEventType) {\n    const pointerIndex = this.getPointerIndex(pointer)\n\n    if (pointerIndex === -1) return\n\n    const pointerInfo = this.pointers[pointerIndex]\n\n    this._scopeFire('interactions:remove-pointer', {\n      pointer,\n      event,\n      eventTarget: null,\n      pointerIndex,\n      pointerInfo,\n      interaction: this as unknown as Interaction<never>,\n    })\n\n    this.pointers.splice(pointerIndex, 1)\n    this.pointerIsDown = false\n  }\n\n  /** @internal */\n  _updateLatestPointer(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n    this._latestPointer.pointer = pointer\n    this._latestPointer.event = event\n    this._latestPointer.eventTarget = eventTarget\n  }\n\n  destroy() {\n    this._latestPointer.pointer = null\n    this._latestPointer.event = null\n    this._latestPointer.eventTarget = null\n  }\n\n  /** @internal */\n  _createPreparedEvent<P extends EventPhase>(\n    event: PointerEventType,\n    phase: P,\n    preEnd?: boolean,\n    type?: string,\n  ) {\n    return new InteractEvent<T, P>(this, event, this.prepared.name, phase, this.element, preEnd, type)\n  }\n\n  /** @internal */\n  _fireEvent<P extends EventPhase>(iEvent: InteractEvent<T, P>) {\n    this.interactable?.fire(iEvent)\n\n    if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n      this.prevEvent = iEvent\n    }\n  }\n\n  /** @internal */\n  _doPhase<P extends EventPhase>(\n    signalArg: Omit<DoPhaseArg<T, P>, 'iEvent'> & { iEvent?: InteractEvent<T, P> },\n  ) {\n    const { event, phase, preEnd, type } = signalArg\n    const { rect } = this\n\n    if (rect && phase === 'move') {\n      // update the rect changes due to pointer move\n      rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n      rect.width = rect.right - rect.left\n      rect.height = rect.bottom - rect.top\n    }\n\n    const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n    if (beforeResult === false) {\n      return false\n    }\n\n    const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n    this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n    if (phase === 'start') {\n      this.prevEvent = iEvent\n    }\n\n    this._fireEvent(iEvent)\n\n    this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n    return true\n  }\n\n  /** @internal */\n  _now() {\n    return Date.now()\n  }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    offsetBy?: typeof offsetBy\n    offset: {\n      total: Point\n      pending: Point\n    }\n  }\n\n  enum _ProxyMethods {\n    offsetBy = '',\n  }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal(interaction: Interaction) {\n  if (!interaction.pointerIsDown) {\n    return\n  }\n\n  addToCoords(interaction.coords.cur, interaction.offset.total)\n\n  interaction.offset.pending.x = 0\n  interaction.offset.pending.y = 0\n}\n\nfunction beforeAction({ interaction }: { interaction: Interaction }) {\n  applyPending(interaction)\n}\n\nfunction beforeEnd({ interaction }: { interaction: Interaction }): boolean | void {\n  const hadPending = applyPending(interaction)\n\n  if (!hadPending) return\n\n  interaction.move({ offset: true })\n  interaction.end()\n\n  return false\n}\n\nfunction end({ interaction }: { interaction: Interaction }) {\n  interaction.offset.total.x = 0\n  interaction.offset.total.y = 0\n  interaction.offset.pending.x = 0\n  interaction.offset.pending.y = 0\n}\n\nexport function applyPending(interaction: Interaction) {\n  if (!hasPending(interaction)) {\n    return false\n  }\n\n  const { pending } = interaction.offset\n\n  addToCoords(interaction.coords.cur, pending)\n  addToCoords(interaction.coords.delta, pending)\n  rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n  pending.x = 0\n  pending.y = 0\n\n  return true\n}\n\nfunction offsetBy(this: Interaction, { x, y }: Point) {\n  this.offset.pending.x += x\n  this.offset.pending.y += y\n\n  this.offset.total.x += x\n  this.offset.total.y += y\n}\n\nfunction addToCoords({ page, client }, { x, y }: Point) {\n  page.x += x\n  page.y += y\n  client.x += x\n  client.y += y\n}\n\nfunction hasPending(interaction: Interaction) {\n  return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n  id: 'offset',\n  before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n  install(scope) {\n    scope.Interaction.prototype.offsetBy = offsetBy\n  },\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.offset = {\n        total: { x: 0, y: 0 },\n        pending: { x: 0, y: 0 },\n      }\n    },\n    'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n    'interactions:before-action-start': beforeAction,\n    'interactions:before-action-move': beforeAction,\n    'interactions:before-action-end': beforeEnd,\n    'interactions:stop': end,\n  },\n}\n\nexport default offset\n","import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/modifiers/base'\nimport '@interactjs/offset/plugin'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport { Modification } from '@interactjs/modifiers/Modification'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\n/* eslint-enable import/no-duplicates */\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface PhaseMap {\n    resume?: true\n    inertiastart?: true\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    inertia?: InertiaState\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    inertia?: {\n      enabled?: boolean\n      resistance?: number // the lambda in exponential decay\n      minSpeed?: number // target speed must be above this for inertia to start\n      endSpeed?: number // the speed at which inertia is slow enough to stop\n      allowResume?: true // allow resuming an action in inertia phase\n      smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n    }\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactions:before-action-inertiastart': Omit<DoPhaseArg<ActionName, 'inertiastart'>, 'iEvent'>\n    'interactions:action-inertiastart': DoPhaseArg<ActionName, 'inertiastart'>\n    'interactions:after-action-inertiastart': DoPhaseArg<ActionName, 'inertiastart'>\n    'interactions:before-action-resume': Omit<DoPhaseArg<ActionName, 'resume'>, 'iEvent'>\n    'interactions:action-resume': DoPhaseArg<ActionName, 'resume'>\n    'interactions:after-action-resume': DoPhaseArg<ActionName, 'resume'>\n  }\n}\n\nfunction install(scope: Scope) {\n  const { defaults } = scope\n\n  scope.usePlugin(offset)\n  scope.usePlugin(modifiers.default)\n  scope.actions.phases.inertiastart = true\n  scope.actions.phases.resume = true\n\n  defaults.perAction.inertia = {\n    enabled: false,\n    resistance: 10, // the lambda in exponential decay\n    minSpeed: 100, // target speed must be above this for inertia to start\n    endSpeed: 10, // the speed at which inertia is slow enough to stop\n    allowResume: true, // allow resuming an action in inertia phase\n    smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n  }\n}\n\nexport class InertiaState {\n  active = false\n  isModified = false\n  smoothEnd = false\n  allowResume = false\n\n  modification!: Modification\n  modifierCount = 0\n  modifierArg!: ModifierArg\n\n  startCoords!: Point\n  t0 = 0\n  v0 = 0\n\n  te = 0\n  targetOffset!: Point\n  modifiedOffset!: Point\n  currentOffset!: Point\n\n  lambda_v0? = 0 // eslint-disable-line camelcase\n  one_ve_v0? = 0 // eslint-disable-line camelcase\n  timeout!: number\n  readonly interaction: Interaction\n\n  constructor(interaction: Interaction) {\n    this.interaction = interaction\n  }\n\n  start(event: PointerEventType) {\n    const { interaction } = this\n    const options = getOptions(interaction)\n\n    if (!options || !options.enabled) {\n      return false\n    }\n\n    const { client: velocityClient } = interaction.coords.velocity\n    const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n    const modification = this.modification || (this.modification = new Modification(interaction))\n\n    modification.copyFrom(interaction.modification)\n\n    this.t0 = interaction._now()\n    this.allowResume = options.allowResume\n    this.v0 = pointerSpeed\n    this.currentOffset = { x: 0, y: 0 }\n    this.startCoords = interaction.coords.cur.page\n\n    this.modifierArg = modification.fillArg({\n      pageCoords: this.startCoords,\n      preEnd: true,\n      phase: 'inertiastart',\n    })\n\n    const thrown =\n      this.t0 - interaction.coords.cur.timeStamp < 50 &&\n      pointerSpeed > options.minSpeed &&\n      pointerSpeed > options.endSpeed\n\n    if (thrown) {\n      this.startInertia()\n    } else {\n      modification.result = modification.setAll(this.modifierArg)\n\n      if (!modification.result.changed) {\n        return false\n      }\n\n      this.startSmoothEnd()\n    }\n\n    // force modification change\n    interaction.modification.result.rect = null\n\n    // bring inertiastart event to the target coords\n    interaction.offsetBy(this.targetOffset)\n    interaction._doPhase({\n      interaction,\n      event,\n      phase: 'inertiastart',\n    })\n    interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n    // force modification change\n    interaction.modification.result.rect = null\n\n    this.active = true\n    interaction.simulation = this\n\n    return true\n  }\n\n  startInertia() {\n    const startVelocity = this.interaction.coords.velocity.client\n    const options = getOptions(this.interaction)\n    const lambda = options.resistance\n    const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n    this.targetOffset = {\n      x: (startVelocity.x - inertiaDur) / lambda,\n      y: (startVelocity.y - inertiaDur) / lambda,\n    }\n\n    this.te = inertiaDur\n    this.lambda_v0 = lambda / this.v0\n    this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n    const { modification, modifierArg } = this\n\n    modifierArg.pageCoords = {\n      x: this.startCoords.x + this.targetOffset.x,\n      y: this.startCoords.y + this.targetOffset.y,\n    }\n\n    modification.result = modification.setAll(modifierArg)\n\n    if (modification.result.changed) {\n      this.isModified = true\n      this.modifiedOffset = {\n        x: this.targetOffset.x + modification.result.delta.x,\n        y: this.targetOffset.y + modification.result.delta.y,\n      }\n    }\n\n    this.onNextFrame(() => this.inertiaTick())\n  }\n\n  startSmoothEnd() {\n    this.smoothEnd = true\n    this.isModified = true\n    this.targetOffset = {\n      x: this.modification.result.delta.x,\n      y: this.modification.result.delta.y,\n    }\n\n    this.onNextFrame(() => this.smoothEndTick())\n  }\n\n  onNextFrame(tickFn: () => void) {\n    this.timeout = raf.request(() => {\n      if (this.active) {\n        tickFn()\n      }\n    })\n  }\n\n  inertiaTick() {\n    const { interaction } = this\n    const options = getOptions(interaction)\n    const lambda = options.resistance\n    const t = (interaction._now() - this.t0) / 1000\n\n    if (t < this.te) {\n      const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n      let newOffset: Point\n\n      if (this.isModified) {\n        newOffset = getQuadraticCurvePoint(\n          0,\n          0,\n          this.targetOffset.x,\n          this.targetOffset.y,\n          this.modifiedOffset.x,\n          this.modifiedOffset.y,\n          progress,\n        )\n      } else {\n        newOffset = {\n          x: this.targetOffset.x * progress,\n          y: this.targetOffset.y * progress,\n        }\n      }\n\n      const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n      this.currentOffset.x += delta.x\n      this.currentOffset.y += delta.y\n\n      interaction.offsetBy(delta)\n      interaction.move()\n\n      this.onNextFrame(() => this.inertiaTick())\n    } else {\n      interaction.offsetBy({\n        x: this.modifiedOffset.x - this.currentOffset.x,\n        y: this.modifiedOffset.y - this.currentOffset.y,\n      })\n\n      this.end()\n    }\n  }\n\n  smoothEndTick() {\n    const { interaction } = this\n    const t = interaction._now() - this.t0\n    const { smoothEndDuration: duration } = getOptions(interaction)\n\n    if (t < duration) {\n      const newOffset = {\n        x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n        y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n      }\n      const delta = {\n        x: newOffset.x - this.currentOffset.x,\n        y: newOffset.y - this.currentOffset.y,\n      }\n\n      this.currentOffset.x += delta.x\n      this.currentOffset.y += delta.y\n\n      interaction.offsetBy(delta)\n      interaction.move({ skipModifiers: this.modifierCount })\n\n      this.onNextFrame(() => this.smoothEndTick())\n    } else {\n      interaction.offsetBy({\n        x: this.targetOffset.x - this.currentOffset.x,\n        y: this.targetOffset.y - this.currentOffset.y,\n      })\n\n      this.end()\n    }\n  }\n\n  resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n    const { interaction } = this\n\n    // undo inertia changes to interaction coords\n    interaction.offsetBy({\n      x: -this.currentOffset.x,\n      y: -this.currentOffset.y,\n    })\n\n    // update pointer at pointer down position\n    interaction.updatePointer(pointer, event, eventTarget, true)\n\n    // fire resume signals and event\n    interaction._doPhase({\n      interaction,\n      event,\n      phase: 'resume',\n    })\n    copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n    this.stop()\n  }\n\n  end() {\n    this.interaction.move()\n    this.interaction.end()\n    this.stop()\n  }\n\n  stop() {\n    this.active = this.smoothEnd = false\n    this.interaction.simulation = null\n    raf.cancel(this.timeout)\n  }\n}\n\nfunction start({ interaction, event }: DoPhaseArg<ActionName, 'end'>) {\n  if (!interaction._interacting || interaction.simulation) {\n    return null\n  }\n\n  const started = interaction.inertia.start(event)\n\n  // prevent action end if inertia or smoothEnd\n  return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume(arg: SignalArgs['interactions:down']) {\n  const { interaction, eventTarget } = arg\n  const state = interaction.inertia\n\n  if (!state.active) return\n\n  let element = eventTarget as Node\n\n  // climb up the DOM tree from the event target\n  while (is.element(element)) {\n    // if interaction element is the current inertia target element\n    if (element === interaction.element) {\n      state.resume(arg)\n      break\n    }\n\n    element = dom.parentNode(element)\n  }\n}\n\nfunction stop({ interaction }: { interaction: Interaction }) {\n  const state = interaction.inertia\n\n  if (state.active) {\n    state.stop()\n  }\n}\n\nfunction getOptions({ interactable, prepared }: Interaction) {\n  return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n  id: 'inertia',\n  before: ['modifiers', 'actions'],\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.inertia = new InertiaState(interaction)\n    },\n\n    'interactions:before-action-end': start,\n    'interactions:down': resume,\n    'interactions:stop': stop,\n\n    'interactions:before-action-resume': (arg) => {\n      const { modification } = arg.interaction\n\n      modification.stop(arg)\n      modification.start(arg, arg.interaction.coords.cur.page)\n      modification.applyToInteraction(arg)\n    },\n\n    'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n    'interactions:action-resume': modifiers.addEventModifiers,\n    'interactions:action-inertiastart': modifiers.addEventModifiers,\n    'interactions:after-action-inertiastart': (arg) =>\n      arg.interaction.modification.restoreInteractionCoords(arg),\n    'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n  },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue(t: number, p1: number, p2: number, p3: number) {\n  const iT = 1 - t\n  return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint(\n  startX: number,\n  startY: number,\n  cpX: number,\n  cpY: number,\n  endX: number,\n  endY: number,\n  position: number,\n) {\n  return {\n    x: _getQBezierValue(position, startX, cpX, endX),\n    y: _getQBezierValue(position, startY, cpY, endY),\n  }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad(t: number, b: number, c: number, d: number) {\n  t /= d\n  return -c * t * (t - 2) + b\n}\n\nexport default inertia\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nimport type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\n\nfunction fireUntilImmediateStopped(event: any, listeners: Listener[]) {\n  for (const listener of listeners) {\n    if (event.immediatePropagationStopped) {\n      break\n    }\n\n    listener(event)\n  }\n}\n\nexport class Eventable {\n  options: any\n  types: NormalizedListeners = {}\n  propagationStopped = false\n  immediatePropagationStopped = false\n  global: any\n\n  constructor(options?: { [index: string]: any }) {\n    this.options = extend({}, options || {})\n  }\n\n  fire<T extends { type: string; propagationStopped?: boolean }>(event: T) {\n    let listeners: Listener[]\n    const global = this.global\n\n    // Interactable#on() listeners\n    // tslint:disable no-conditional-assignment\n    if ((listeners = this.types[event.type])) {\n      fireUntilImmediateStopped(event, listeners)\n    }\n\n    // interact.on() listeners\n    if (!event.propagationStopped && global && (listeners = global[event.type])) {\n      fireUntilImmediateStopped(event, listeners)\n    }\n  }\n\n  on(type: string, listener: ListenersArg) {\n    const listeners = normalize(type, listener)\n\n    for (type in listeners) {\n      this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n    }\n  }\n\n  off(type: string, listener: ListenersArg) {\n    const listeners = normalize(type, listener)\n\n    for (type in listeners) {\n      const eventList = this.types[type]\n\n      if (!eventList || !eventList.length) {\n        continue\n      }\n\n      for (const subListener of listeners[type]) {\n        const index = eventList.indexOf(subListener)\n\n        if (index !== -1) {\n          eventList.splice(index, 1)\n        }\n      }\n    }\n  }\n\n  getRect(_element: Element): Rect {\n    return null\n  }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\n\nimport type { NativeEventTarget } from './NativeTypes'\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    events: ReturnType<typeof install>\n  }\n}\n\ninterface EventOptions {\n  capture: boolean\n  passive: boolean\n}\n\ntype PartialEventTarget = Partial<NativeEventTarget>\n\ntype ListenerEntry = { func: (event: Event | FakeEvent) => any; options: EventOptions }\n\nfunction install(scope: Scope) {\n  const targets: Array<{\n    eventTarget: PartialEventTarget\n    events: { [type: string]: ListenerEntry[] }\n  }> = []\n\n  const delegatedEvents: {\n    [type: string]: Array<{\n      selector: string\n      context: Node\n      listeners: ListenerEntry[]\n    }>\n  } = {}\n  const documents: Document[] = []\n\n  const eventsMethods = {\n    add,\n    remove,\n\n    addDelegate,\n    removeDelegate,\n\n    delegateListener,\n    delegateUseCapture,\n    delegatedEvents,\n    documents,\n\n    targets,\n\n    supportsOptions: false,\n    supportsPassive: false,\n  }\n\n  // check if browser supports passive events and options arg\n  scope.document?.createElement('div').addEventListener('test', null, {\n    get capture() {\n      return (eventsMethods.supportsOptions = true)\n    },\n    get passive() {\n      return (eventsMethods.supportsPassive = true)\n    },\n  })\n\n  scope.events = eventsMethods\n\n  function add(\n    eventTarget: PartialEventTarget,\n    type: string,\n    listener: ListenerEntry['func'],\n    optionalArg?: boolean | EventOptions,\n  ) {\n    if (!eventTarget.addEventListener) return\n\n    const options = getOptions(optionalArg)\n    let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n    if (!target) {\n      target = {\n        eventTarget,\n        events: {},\n      }\n\n      targets.push(target)\n    }\n\n    if (!target.events[type]) {\n      target.events[type] = []\n    }\n\n    if (!arr.find(target.events[type], (l) => l.func === listener && optionsMatch(l.options, options))) {\n      eventTarget.addEventListener(\n        type,\n        listener as any,\n        eventsMethods.supportsOptions ? options : options.capture,\n      )\n      target.events[type].push({ func: listener, options })\n    }\n  }\n\n  function remove(\n    eventTarget: PartialEventTarget,\n    type: string,\n    listener?: 'all' | ListenerEntry['func'],\n    optionalArg?: boolean | EventOptions,\n  ) {\n    if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return\n\n    const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n    const target = targets[targetIndex]\n\n    if (!target || !target.events) {\n      return\n    }\n\n    if (type === 'all') {\n      for (type in target.events) {\n        if (target.events.hasOwnProperty(type)) {\n          remove(eventTarget, type, 'all')\n        }\n      }\n      return\n    }\n\n    let typeIsEmpty = false\n    const typeListeners = target.events[type]\n\n    if (typeListeners) {\n      if (listener === 'all') {\n        for (let i = typeListeners.length - 1; i >= 0; i--) {\n          const entry = typeListeners[i]\n          remove(eventTarget, type, entry.func, entry.options)\n        }\n        return\n      } else {\n        const options = getOptions(optionalArg)\n\n        for (let i = 0; i < typeListeners.length; i++) {\n          const entry = typeListeners[i]\n          if (entry.func === listener && optionsMatch(entry.options, options)) {\n            eventTarget.removeEventListener(\n              type,\n              listener as any,\n              eventsMethods.supportsOptions ? options : options.capture,\n            )\n            typeListeners.splice(i, 1)\n\n            if (typeListeners.length === 0) {\n              delete target.events[type]\n              typeIsEmpty = true\n            }\n\n            break\n          }\n        }\n      }\n    }\n\n    if (typeIsEmpty && !Object.keys(target.events).length) {\n      targets.splice(targetIndex, 1)\n    }\n  }\n\n  function addDelegate(\n    selector: string,\n    context: Node,\n    type: string,\n    listener: ListenerEntry['func'],\n    optionalArg?: any,\n  ) {\n    const options = getOptions(optionalArg)\n    if (!delegatedEvents[type]) {\n      delegatedEvents[type] = []\n\n      // add delegate listener functions\n      for (const doc of documents) {\n        add(doc, type, delegateListener)\n        add(doc, type, delegateUseCapture, true)\n      }\n    }\n\n    const delegates = delegatedEvents[type]\n    let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n    if (!delegate) {\n      delegate = { selector, context, listeners: [] }\n      delegates.push(delegate)\n    }\n\n    delegate.listeners.push({ func: listener, options })\n  }\n\n  function removeDelegate(\n    selector: string,\n    context: Document | Element,\n    type: string,\n    listener?: ListenerEntry['func'],\n    optionalArg?: any,\n  ) {\n    const options = getOptions(optionalArg)\n    const delegates = delegatedEvents[type]\n    let matchFound = false\n    let index: number\n\n    if (!delegates) return\n\n    // count from last index of delegated to 0\n    for (index = delegates.length - 1; index >= 0; index--) {\n      const cur = delegates[index]\n      // look for matching selector and context Node\n      if (cur.selector === selector && cur.context === context) {\n        const { listeners } = cur\n\n        // each item of the listeners array is an array: [function, capture, passive]\n        for (let i = listeners.length - 1; i >= 0; i--) {\n          const entry = listeners[i]\n\n          // check if the listener functions and capture and passive flags match\n          if (entry.func === listener && optionsMatch(entry.options, options)) {\n            // remove the listener from the array of listeners\n            listeners.splice(i, 1)\n\n            // if all listeners for this target have been removed\n            // remove the target from the delegates array\n            if (!listeners.length) {\n              delegates.splice(index, 1)\n\n              // remove delegate function from context\n              remove(context, type, delegateListener)\n              remove(context, type, delegateUseCapture, true)\n            }\n\n            // only remove one listener\n            matchFound = true\n            break\n          }\n        }\n\n        if (matchFound) {\n          break\n        }\n      }\n    }\n  }\n\n  // bound to the interactable context when a DOM event\n  // listener is added to a selector interactable\n  function delegateListener(event: Event | FakeEvent, optionalArg?: any) {\n    const options = getOptions(optionalArg)\n    const fakeEvent = new FakeEvent(event as Event)\n    const delegates = delegatedEvents[event.type]\n    const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n    let element: Node = eventTarget\n\n    // climb up document tree looking for selector matches\n    while (is.element(element)) {\n      for (let i = 0; i < delegates.length; i++) {\n        const cur = delegates[i]\n        const { selector, context } = cur\n\n        if (\n          domUtils.matchesSelector(element, selector) &&\n          domUtils.nodeContains(context, eventTarget) &&\n          domUtils.nodeContains(context, element)\n        ) {\n          const { listeners } = cur\n\n          fakeEvent.currentTarget = element\n\n          for (const entry of listeners) {\n            if (optionsMatch(entry.options, options)) {\n              entry.func(fakeEvent)\n            }\n          }\n        }\n      }\n\n      element = domUtils.parentNode(element)\n    }\n  }\n\n  function delegateUseCapture(this: Element, event: Event | FakeEvent) {\n    return delegateListener.call(this, event, true)\n  }\n\n  // for type inferrence\n  return eventsMethods\n}\n\nclass FakeEvent implements Partial<Event> {\n  currentTarget: Node\n  originalEvent: Event\n  type: string\n\n  constructor(originalEvent: Event) {\n    this.originalEvent = originalEvent\n    // duplicate the event so that currentTarget can be changed\n    pExtend(this, originalEvent)\n  }\n\n  preventOriginalDefault() {\n    this.originalEvent.preventDefault()\n  }\n\n  stopPropagation() {\n    this.originalEvent.stopPropagation()\n  }\n\n  stopImmediatePropagation() {\n    this.originalEvent.stopImmediatePropagation()\n  }\n}\n\nfunction getOptions(param: { [index: string]: any } | boolean): { capture: boolean; passive: boolean } {\n  if (!is.object(param)) {\n    return { capture: !!param, passive: false }\n  }\n\n  return {\n    capture: !!param.capture,\n    passive: !!param.passive,\n  }\n}\n\nfunction optionsMatch(a: Partial<EventOptions> | boolean, b: Partial<EventOptions>) {\n  if (a === b) return true\n\n  if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false\n\n  return !!a.capture === !!b.capture && !!a.passive === !!b.passive\n}\n\nexport default {\n  id: 'events',\n  install,\n}\n","import * as dom from '@interactjs/utils/domUtils'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\n\nexport interface SearchDetails {\n  pointer: PointerType\n  pointerId: number\n  pointerType: string\n  eventType: string\n  eventTarget: EventTarget\n  curEventTarget: EventTarget\n  scope: Scope\n}\n\nconst finder = {\n  methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n  search(details: SearchDetails) {\n    for (const method of finder.methodOrder) {\n      const interaction = finder[method](details)\n\n      if (interaction) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n\n  // try to resume simulation with a new pointer\n  simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n    if (!/down|start/i.test(eventType)) {\n      return null\n    }\n\n    for (const interaction of scope.interactions.list) {\n      let element = eventTarget as Node\n\n      if (\n        interaction.simulation &&\n        interaction.simulation.allowResume &&\n        interaction.pointerType === pointerType\n      ) {\n        while (element) {\n          // if the element is the interaction element\n          if (element === interaction.element) {\n            return interaction\n          }\n          element = dom.parentNode(element)\n        }\n      }\n    }\n\n    return null\n  },\n\n  // if it's a mouse or pen interaction\n  mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n    if (pointerType !== 'mouse' && pointerType !== 'pen') {\n      return null\n    }\n\n    let firstNonActive\n\n    for (const interaction of scope.interactions.list) {\n      if (interaction.pointerType === pointerType) {\n        // if it's a down event, skip interactions with running simulations\n        if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n          continue\n        }\n\n        // if the interaction is active, return it immediately\n        if (interaction.interacting()) {\n          return interaction\n        }\n        // otherwise save it and look for another active interaction\n        else if (!firstNonActive) {\n          firstNonActive = interaction\n        }\n      }\n    }\n\n    // if no active mouse interaction was found use the first inactive mouse\n    // interaction\n    if (firstNonActive) {\n      return firstNonActive\n    }\n\n    // find any mouse or pen interaction.\n    // ignore the interaction if the eventType is a *down, and a simulation\n    // is active\n    for (const interaction of scope.interactions.list) {\n      if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n\n  // get interaction that has this pointer\n  hasPointer({ pointerId, scope }: SearchDetails) {\n    for (const interaction of scope.interactions.list) {\n      if (hasPointerId(interaction, pointerId)) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n\n  // get first idle interaction with a matching pointerType\n  idle({ pointerType, scope }: SearchDetails) {\n    for (const interaction of scope.interactions.list) {\n      // if there's already a pointer held down\n      if (interaction.pointers.length === 1) {\n        const target = interaction.interactable\n        // don't add this pointer if there is a target interactable and it\n        // isn't gesturable\n        if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n          continue\n        }\n      }\n      // maximum of 2 pointers per interaction\n      else if (interaction.pointers.length >= 2) {\n        continue\n      }\n\n      if (!interaction.interacting() && pointerType === interaction.pointerType) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n}\n\nfunction hasPointerId(interaction: Interaction, pointerId: number) {\n  return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './interactablePreventDefault'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport InteractionBase from './Interaction'\n/* eslint-enable import/no-duplicates */\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    Interaction: typeof InteractionBase\n    interactions: {\n      new: <T extends ActionName>(options: any) => InteractionBase<T>\n      list: Array<InteractionBase<ActionName>>\n      listeners: { [type: string]: Listener }\n      docEvents: Array<{ type: string; listener: Listener }>\n      pointerMoveTolerance: number\n    }\n    prevTouchTime: number\n  }\n\n  interface SignalArgs {\n    'interactions:find': {\n      interaction: InteractionBase\n      searchDetails: SearchDetails\n    }\n  }\n}\n\nconst methodNames = [\n  'pointerDown',\n  'pointerMove',\n  'pointerUp',\n  'updatePointer',\n  'removePointer',\n  'windowBlur',\n]\n\nfunction install(scope: Scope) {\n  const listeners = {} as any\n\n  for (const method of methodNames) {\n    listeners[method] = doOnInteractions(method, scope)\n  }\n\n  const pEventTypes = browser.pEventTypes\n  let docEvents: typeof scope.interactions.docEvents\n\n  if (domObjects.PointerEvent) {\n    docEvents = [\n      { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n      { type: pEventTypes.down, listener: listeners.pointerDown },\n      { type: pEventTypes.move, listener: listeners.pointerMove },\n      { type: pEventTypes.up, listener: listeners.pointerUp },\n      { type: pEventTypes.cancel, listener: listeners.pointerUp },\n    ]\n  } else {\n    docEvents = [\n      { type: 'mousedown', listener: listeners.pointerDown },\n      { type: 'mousemove', listener: listeners.pointerMove },\n      { type: 'mouseup', listener: listeners.pointerUp },\n\n      { type: 'touchstart', listener: releasePointersOnRemovedEls },\n      { type: 'touchstart', listener: listeners.pointerDown },\n      { type: 'touchmove', listener: listeners.pointerMove },\n      { type: 'touchend', listener: listeners.pointerUp },\n      { type: 'touchcancel', listener: listeners.pointerUp },\n    ]\n  }\n\n  docEvents.push({\n    type: 'blur',\n    listener(event) {\n      for (const interaction of scope.interactions.list) {\n        interaction.documentBlur(event)\n      }\n    },\n  })\n\n  // for ignoring browser's simulated mouse events\n  scope.prevTouchTime = 0\n\n  scope.Interaction = class<T extends ActionName> extends InteractionBase<T> {\n    get pointerMoveTolerance() {\n      return scope.interactions.pointerMoveTolerance\n    }\n\n    set pointerMoveTolerance(value) {\n      scope.interactions.pointerMoveTolerance = value\n    }\n\n    _now() {\n      return scope.now()\n    }\n  }\n\n  scope.interactions = {\n    // all active and idle interactions\n    list: [],\n    new<T extends ActionName>(options: { pointerType?: string; scopeFire?: Scope['fire'] }) {\n      options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n      const interaction = new scope.Interaction<T>(options as Required<typeof options>)\n\n      scope.interactions.list.push(interaction)\n      return interaction\n    },\n    listeners,\n    docEvents,\n    pointerMoveTolerance: 1,\n  }\n\n  function releasePointersOnRemovedEls() {\n    // for all inactive touch interactions with pointers down\n    for (const interaction of scope.interactions.list) {\n      if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n        continue\n      }\n\n      // if a pointer is down on an element that is no longer in the DOM tree\n      for (const pointer of interaction.pointers) {\n        if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n          // remove the pointer from the interaction\n          interaction.removePointer(pointer.pointer, pointer.event)\n        }\n      }\n    }\n  }\n\n  scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions(method: string, scope: Scope) {\n  return function (event: Event) {\n    const interactions = scope.interactions.list\n\n    const pointerType = pointerUtils.getPointerType(event)\n    const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n    const matches: any[] = [] // [ [pointer, interaction], ...]\n\n    if (/^touch/.test(event.type)) {\n      scope.prevTouchTime = scope.now()\n\n      // @ts-expect-error\n      for (const changedTouch of event.changedTouches) {\n        const pointer = changedTouch\n        const pointerId = pointerUtils.getPointerId(pointer)\n        const searchDetails: SearchDetails = {\n          pointer,\n          pointerId,\n          pointerType,\n          eventType: event.type,\n          eventTarget,\n          curEventTarget,\n          scope,\n        }\n        const interaction = getInteraction(searchDetails)\n\n        matches.push([\n          searchDetails.pointer,\n          searchDetails.eventTarget,\n          searchDetails.curEventTarget,\n          interaction,\n        ])\n      }\n    } else {\n      let invalidPointer = false\n\n      if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n        // ignore mouse events while touch interactions are active\n        for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n          invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n        }\n\n        // try to ignore mouse events that are simulated by the browser\n        // after a touch event\n        invalidPointer =\n          invalidPointer ||\n          scope.now() - scope.prevTouchTime < 500 ||\n          // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n          event.timeStamp === 0\n      }\n\n      if (!invalidPointer) {\n        const searchDetails = {\n          pointer: event as PointerEvent,\n          pointerId: pointerUtils.getPointerId(event as PointerEvent),\n          pointerType,\n          eventType: event.type,\n          curEventTarget,\n          eventTarget,\n          scope,\n        }\n\n        const interaction = getInteraction(searchDetails)\n\n        matches.push([\n          searchDetails.pointer,\n          searchDetails.eventTarget,\n          searchDetails.curEventTarget,\n          interaction,\n        ])\n      }\n    }\n\n    // eslint-disable-next-line no-shadow\n    for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n      interaction[method](pointer, event, eventTarget, curEventTarget)\n    }\n  }\n}\n\nfunction getInteraction(searchDetails: SearchDetails) {\n  const { pointerType, scope } = searchDetails\n\n  const foundInteraction = finder.search(searchDetails)\n  const signalArg = { interaction: foundInteraction, searchDetails }\n\n  scope.fire('interactions:find', signalArg)\n\n  return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal<T extends 'scope:add-document' | 'scope:remove-document'>(\n  { doc, scope, options }: SignalArgs[T],\n  eventMethodName: 'add' | 'remove',\n) {\n  const {\n    interactions: { docEvents },\n    events,\n  } = scope\n  const eventMethod = events[eventMethodName]\n\n  if (scope.browser.isIOS && !options.events) {\n    options.events = { passive: false }\n  }\n\n  // delegate event listener\n  for (const eventType in events.delegatedEvents) {\n    eventMethod(doc, eventType, events.delegateListener)\n    eventMethod(doc, eventType, events.delegateUseCapture, true)\n  }\n\n  const eventOptions = options && options.events\n\n  for (const { type, listener } of docEvents) {\n    eventMethod(doc, type, listener, eventOptions)\n  }\n}\n\nconst interactions: Plugin = {\n  id: 'core/interactions',\n  install,\n  listeners: {\n    'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n    'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n    'interactable:unset': ({ interactable }, scope) => {\n      // Stop and destroy related interactions when an Interactable is unset\n      for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n        const interaction = scope.interactions.list[i]\n\n        if (interaction.interactable !== interactable) {\n          continue\n        }\n\n        interaction.stop()\n        scope.fire('interactions:destroy', { interaction })\n        interaction.destroy()\n\n        if (scope.interactions.list.length > 2) {\n          scope.interactions.list.splice(i, 1)\n        }\n      }\n    },\n  },\n  onDocSignal,\n  doOnInteractions,\n  methodNames,\n}\n\nexport default interactions\n","/* eslint-disable no-dupe-class-members */\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n  ActionMap,\n  ActionMethod,\n  ActionName,\n  Actions,\n  Context,\n  Element,\n  EventTypes,\n  Listeners,\n  ListenersArg,\n  OrBoolean,\n  Target,\n} from '@interactjs/core/types'\n\nimport { Eventable } from './Eventable'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\nconst enum OnOffMethod {\n  On,\n  Off,\n}\n\n/**\n * ```ts\n * const interactable = interact('.cards')\n *   .draggable({\n *     listeners: { move: event => console.log(event.type, event.pageX, event.pageY) }\n *   })\n *   .resizable({\n *     listeners: { move: event => console.log(event.rect) },\n *     modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })]\n *   })\n * ```\n */\nexport class Interactable implements Partial<Eventable> {\n  /** @internal */ get _defaults(): Defaults {\n    return {\n      base: {},\n      perAction: {},\n      actions: {} as ActionDefaults,\n    }\n  }\n\n  readonly target: Target\n  /** @internal */ readonly options!: Required<Options>\n  /** @internal */ readonly _actions: Actions\n  /** @internal */ readonly events = new Eventable()\n  /** @internal */ readonly _context: Context\n  /** @internal */ readonly _win: Window\n  /** @internal */ readonly _doc: Document\n  /** @internal */ readonly _scopeEvents: Scope['events']\n\n  constructor(\n    target: Target,\n    options: any,\n    defaultContext: Document | Element,\n    scopeEvents: Scope['events'],\n  ) {\n    this._actions = options.actions\n    this.target = target\n    this._context = options.context || defaultContext\n    this._win = getWindow(trySelector(target) ? this._context : target)\n    this._doc = this._win.document\n    this._scopeEvents = scopeEvents\n\n    this.set(options)\n  }\n\n  setOnEvents(actionName: ActionName, phases: NonNullable<any>) {\n    if (is.func(phases.onstart)) {\n      this.on(`${actionName}start`, phases.onstart)\n    }\n    if (is.func(phases.onmove)) {\n      this.on(`${actionName}move`, phases.onmove)\n    }\n    if (is.func(phases.onend)) {\n      this.on(`${actionName}end`, phases.onend)\n    }\n    if (is.func(phases.oninertiastart)) {\n      this.on(`${actionName}inertiastart`, phases.oninertiastart)\n    }\n\n    return this\n  }\n\n  updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined) {\n    const actionFilter = (this._actions.map[actionName] as { filterEventType?: (type: string) => boolean })\n      ?.filterEventType\n    const filter = (type: string) =>\n      (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, this._actions)\n\n    if (is.array(prev) || is.object(prev)) {\n      this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter)\n    }\n\n    if (is.array(cur) || is.object(cur)) {\n      this._onOff(OnOffMethod.On, actionName, cur, undefined, filter)\n    }\n  }\n\n  setPerAction(actionName: ActionName, options: OrBoolean<Options>) {\n    const defaults = this._defaults\n\n    // for all the default per-action options\n    for (const optionName_ in options) {\n      const optionName = optionName_ as keyof PerActionDefaults\n      const actionOptions = this.options[actionName]\n      const optionValue: any = options[optionName]\n\n      // remove old event listeners and add new ones\n      if (optionName === 'listeners') {\n        this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n      }\n\n      // if the option value is an array\n      if (is.array(optionValue)) {\n        ;(actionOptions[optionName] as any) = arr.from(optionValue)\n      }\n      // if the option value is an object\n      else if (is.plainObject(optionValue)) {\n        // copy the object\n        ;(actionOptions[optionName] as any) = extend(\n          actionOptions[optionName] || ({} as any),\n          clone(optionValue),\n        )\n\n        // set anabled field to true if it exists in the defaults\n        if (\n          is.object(defaults.perAction[optionName]) &&\n          'enabled' in (defaults.perAction[optionName] as any)\n        ) {\n          ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n        }\n      }\n      // if the option value is a boolean and the default is an object\n      else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n        ;(actionOptions[optionName] as any).enabled = optionValue\n      }\n      // if it's anything else, do a plain assignment\n      else {\n        ;(actionOptions[optionName] as any) = optionValue\n      }\n    }\n  }\n\n  /**\n   * The default function to get an Interactables bounding rect. Can be\n   * overridden using {@link Interactable.rectChecker}.\n   *\n   * @param {Element} [element] The element to measure.\n   * @return {Rect} The object's bounding rectangle.\n   */\n  getRect(element: Element) {\n    element = element || (is.element(this.target) ? this.target : null)\n\n    if (is.string(this.target)) {\n      element = element || this._context.querySelector(this.target)\n    }\n\n    return getElementRect(element)\n  }\n\n  /**\n   * Returns or sets the function used to calculate the interactable's\n   * element's rectangle\n   *\n   * @param {function} [checker] A function which returns this Interactable's\n   * bounding rectangle. See {@link Interactable.getRect}\n   * @return {function | object} The checker function or this Interactable\n   */\n  rectChecker(): (element: Element) => any | null\n  rectChecker(checker: (element: Element) => any): this\n  rectChecker(checker?: (element: Element) => any) {\n    if (is.func(checker)) {\n      this.getRect = (element) => {\n        const rect = extend({}, checker.call(this, element))\n\n        if (!(('width' in rect) as unknown)) {\n          rect.width = rect.right - rect.left\n          rect.height = rect.bottom - rect.top\n        }\n\n        return rect\n      }\n\n      return this\n    }\n\n    if (checker === null) {\n      delete (this as Partial<typeof this>).getRect\n\n      return this\n    }\n\n    return this.getRect\n  }\n\n  /** @internal */\n  _backCompatOption(optionName: keyof Options, newValue: any) {\n    if (trySelector(newValue) || is.object(newValue)) {\n      ;(this.options[optionName] as any) = newValue\n\n      for (const action in this._actions.map) {\n        ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n      }\n\n      return this\n    }\n\n    return this.options[optionName]\n  }\n\n  /**\n   * Gets or sets the origin of the Interactable's element.  The x and y\n   * of the origin will be subtracted from action event coordinates.\n   *\n   * @param {Element | object | string} [origin] An HTML or SVG Element whose\n   * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n   * or any CSS selector\n   *\n   * @return {object} The current origin or this Interactable\n   */\n  origin(newValue: any) {\n    return this._backCompatOption('origin', newValue)\n  }\n\n  /**\n   * Returns or sets the mouse coordinate types used to calculate the\n   * movement of the pointer.\n   *\n   * @param {string} [newValue] Use 'client' if you will be scrolling while\n   * interacting; Use 'page' if you want autoScroll to work\n   * @return {string | object} The current deltaSource or this Interactable\n   */\n  deltaSource(): DeltaSource\n  deltaSource(newValue: DeltaSource): this\n  deltaSource(newValue?: DeltaSource) {\n    if (newValue === 'page' || newValue === 'client') {\n      this.options.deltaSource = newValue\n\n      return this\n    }\n\n    return this.options.deltaSource\n  }\n\n  /** @internal */\n  getAllElements(): Element[] {\n    const { target } = this\n\n    if (is.string(target)) {\n      return Array.from(this._context.querySelectorAll(target))\n    }\n\n    if (is.func(target) && (target as any).getAllElements) {\n      return (target as any).getAllElements()\n    }\n\n    return is.element(target) ? [target] : []\n  }\n\n  /**\n   * Gets the selector context Node of the Interactable. The default is\n   * `window.document`.\n   *\n   * @return {Node} The context Node of this Interactable\n   */\n  context() {\n    return this._context\n  }\n\n  inContext(element: Document | Node) {\n    return this._context === element.ownerDocument || nodeContains(this._context, element)\n  }\n\n  /** @internal */\n  testIgnoreAllow(\n    this: Interactable,\n    options: { ignoreFrom?: IgnoreValue; allowFrom?: IgnoreValue },\n    targetNode: Node,\n    eventTarget: Node,\n  ) {\n    return (\n      !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n      this.testAllow(options.allowFrom, targetNode, eventTarget)\n    )\n  }\n\n  /** @internal */\n  testAllow(this: Interactable, allowFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n    if (!allowFrom) {\n      return true\n    }\n\n    if (!is.element(element)) {\n      return false\n    }\n\n    if (is.string(allowFrom)) {\n      return matchesUpTo(element, allowFrom, targetNode)\n    } else if (is.element(allowFrom)) {\n      return nodeContains(allowFrom, element)\n    }\n\n    return false\n  }\n\n  /** @internal */\n  testIgnore(this: Interactable, ignoreFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n    if (!ignoreFrom || !is.element(element)) {\n      return false\n    }\n\n    if (is.string(ignoreFrom)) {\n      return matchesUpTo(element, ignoreFrom, targetNode)\n    } else if (is.element(ignoreFrom)) {\n      return nodeContains(ignoreFrom, element)\n    }\n\n    return false\n  }\n\n  /**\n   * Calls listeners for the given InteractEvent type bound globally\n   * and directly to this Interactable\n   *\n   * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n   * Interactable\n   * @return {Interactable} this Interactable\n   */\n  fire<E extends { type: string }>(iEvent: E) {\n    this.events.fire(iEvent)\n\n    return this\n  }\n\n  /** @internal */\n  _onOff(\n    method: OnOffMethod,\n    typeArg: EventTypes,\n    listenerArg?: ListenersArg | null,\n    options?: any,\n    filter?: (type: string) => boolean,\n  ) {\n    if (is.object(typeArg) && !is.array(typeArg)) {\n      options = listenerArg\n      listenerArg = null\n    }\n\n    const listeners = normalizeListeners(typeArg, listenerArg, filter)\n\n    for (let type in listeners) {\n      if (type === 'wheel') {\n        type = browser.wheelEvent\n      }\n\n      for (const listener of listeners[type]) {\n        // if it is an action event type\n        if (isNonNativeEvent(type, this._actions)) {\n          this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener)\n        }\n        // delegated event\n        else if (is.string(this.target)) {\n          this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](\n            this.target,\n            this._context,\n            type,\n            listener,\n            options,\n          )\n        }\n        // remove listener from this Interactable's element\n        else {\n          this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](\n            this.target,\n            type,\n            listener,\n            options,\n          )\n        }\n      }\n    }\n\n    return this\n  }\n\n  /**\n   * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n   *\n   * @param {string | array | object} types The types of events to listen\n   * for\n   * @param {function | array | object} [listener] The event listener function(s)\n   * @param {object | boolean} [options] options object or useCapture flag for\n   * addEventListener\n   * @return {Interactable} This Interactable\n   */\n  on(types: EventTypes, listener?: ListenersArg, options?: any) {\n    return this._onOff(OnOffMethod.On, types, listener, options)\n  }\n\n  /**\n   * Removes an InteractEvent, pointerEvent or DOM event listener.\n   *\n   * @param {string | array | object} types The types of events that were\n   * listened for\n   * @param {function | array | object} [listener] The event listener function(s)\n   * @param {object | boolean} [options] options object or useCapture flag for\n   * removeEventListener\n   * @return {Interactable} This Interactable\n   */\n  off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n    return this._onOff(OnOffMethod.Off, types, listener, options)\n  }\n\n  /**\n   * Reset the options of this Interactable\n   *\n   * @param {object} options The new settings to apply\n   * @return {object} This Interactable\n   */\n  set(options: OptionsArg) {\n    const defaults = this._defaults\n\n    if (!is.object(options)) {\n      options = {}\n    }\n\n    ;(this.options as Required<Options>) = clone(defaults.base) as Required<Options>\n\n    for (const actionName_ in this._actions.methodDict) {\n      const actionName = actionName_ as ActionName\n      const methodName = this._actions.methodDict[actionName]\n\n      this.options[actionName] = {}\n      this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n      ;(this[methodName] as ActionMethod<unknown>)(options[actionName])\n    }\n\n    for (const setting in options) {\n      if (setting === 'getRect') {\n        this.rectChecker(options.getRect)\n        continue\n      }\n\n      if (is.func((this as any)[setting])) {\n        ;(this as any)[setting](options[setting as keyof typeof options])\n      }\n    }\n\n    return this\n  }\n\n  /**\n   * Remove this interactable from the list of interactables and remove it's\n   * action capabilities and event listeners\n   */\n  unset() {\n    if (is.string(this.target)) {\n      // remove delegated events\n      for (const type in this._scopeEvents.delegatedEvents) {\n        const delegated = this._scopeEvents.delegatedEvents[type]\n\n        for (let i = delegated.length - 1; i >= 0; i--) {\n          const { selector, context, listeners } = delegated[i]\n\n          if (selector === this.target && context === this._context) {\n            delegated.splice(i, 1)\n          }\n\n          for (let l = listeners.length - 1; l >= 0; l--) {\n            this._scopeEvents.removeDelegate(\n              this.target,\n              this._context,\n              type,\n              listeners[l][0],\n              listeners[l][1],\n            )\n          }\n        }\n      }\n    } else {\n      this._scopeEvents.remove(this.target, 'all')\n    }\n  }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target } from '@interactjs/core/types'\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactable:new': {\n      interactable: Interactable\n      target: Target\n      options: OptionsArg\n      win: Window\n    }\n  }\n}\n\nexport class InteractableSet {\n  // all set interactables\n  list: Interactable[] = []\n\n  selectorMap: {\n    [selector: string]: Interactable[]\n  } = {}\n\n  scope: Scope\n\n  constructor(scope: Scope) {\n    this.scope = scope\n    scope.addListeners({\n      'interactable:unset': ({ interactable }) => {\n        const { target } = interactable\n        const interactablesOnTarget: Interactable[] = is.string(target)\n          ? this.selectorMap[target]\n          : (target as any)[this.scope.id]\n\n        const targetIndex = arr.findIndex(interactablesOnTarget, (i) => i === interactable)\n        interactablesOnTarget.splice(targetIndex, 1)\n      },\n    })\n  }\n\n  new(target: Target, options?: any): Interactable {\n    options = extend(options || {}, {\n      actions: this.scope.actions,\n    })\n    const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n\n    this.scope.addDocument(interactable._doc)\n    this.list.push(interactable)\n\n    if (is.string(target)) {\n      if (!this.selectorMap[target]) {\n        this.selectorMap[target] = []\n      }\n      this.selectorMap[target].push(interactable)\n    } else {\n      if (!(interactable.target as any)[this.scope.id]) {\n        Object.defineProperty(target, this.scope.id, {\n          value: [],\n          configurable: true,\n        })\n      }\n\n      ;(target as any)[this.scope.id].push(interactable)\n    }\n\n    this.scope.fire('interactable:new', {\n      target,\n      options,\n      interactable,\n      win: this.scope._win,\n    })\n\n    return interactable\n  }\n\n  getExisting(target: Target, options?: Options) {\n    const context = (options && options.context) || this.scope.document\n    const isSelector = is.string(target)\n    const interactablesOnTarget: Interactable[] = isSelector\n      ? this.selectorMap[target as string]\n      : (target as any)[this.scope.id]\n\n    if (!interactablesOnTarget) return undefined\n\n    return arr.find(\n      interactablesOnTarget,\n      (interactable) =>\n        interactable._context === context && (isSelector || interactable.inContext(target as any)),\n    )\n  }\n\n  forEachMatch<T>(node: Node, callback: (interactable: Interactable) => T): T | void {\n    for (const interactable of this.list) {\n      let ret: T\n\n      if (\n        (is.string(interactable.target)\n          ? // target is a selector and the element matches\n            is.element(node) && domUtils.matchesSelector(node, interactable.target)\n          : // target is the element\n            node === interactable.target) &&\n        // the element is in context\n        interactable.inContext(node)\n      ) {\n        ret = callback(interactable)\n      }\n\n      if (ret !== undefined) {\n        return ret\n      }\n    }\n  }\n}\n","import browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport type Interaction from '@interactjs/core/Interaction'\n\nimport { Eventable } from './Eventable'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './events'\nimport './interactions'\nimport events from './events'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport { InteractEvent } from './InteractEvent'\nimport interactions from './interactions'\n/* eslint-enable import/no-duplicates */\nimport { createInteractStatic } from './InteractStatic'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\nimport type { Actions } from './types'\n\nexport interface SignalArgs {\n  'scope:add-document': DocSignalArg\n  'scope:remove-document': DocSignalArg\n  'interactable:unset': { interactable: InteractableBase }\n  'interactable:set': { interactable: InteractableBase; options: OptionsArg }\n  'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n  [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n  doc: Document\n  window: Window\n  scope: Scope\n  options: Record<string, any>\n}\n\nexport interface Plugin {\n  [key: string]: any\n  id?: string\n  listeners?: ListenerMap\n  before?: string[]\n  install?(scope: Scope, options?: any): void\n}\n\n/** @internal */\nexport class Scope {\n  id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n  isInitialized = false\n  listenerMaps: Array<{\n    map: ListenerMap\n    id?: string\n  }> = []\n\n  browser = browser\n  defaults = clone(defaults) as typeof defaults\n  Eventable = Eventable\n  actions: Actions = {\n    map: {},\n    phases: {\n      start: true,\n      move: true,\n      end: true,\n    },\n    methodDict: {} as any,\n    phaselessTypes: {},\n  }\n\n  interactStatic = createInteractStatic(this)\n  InteractEvent = InteractEvent\n  Interactable: typeof InteractableBase\n  interactables = new InteractableSet(this)\n\n  // main window\n  _win!: Window\n\n  // main document\n  document!: Document\n\n  // main window\n  window!: Window\n\n  // all documents being listened to\n  documents: Array<{ doc: Document; options: any }> = []\n\n  _plugins: {\n    list: Plugin[]\n    map: { [id: string]: Plugin }\n  } = {\n    list: [],\n    map: {},\n  }\n\n  constructor() {\n    const scope = this\n\n    this.Interactable = class extends InteractableBase {\n      get _defaults() {\n        return scope.defaults\n      }\n\n      set<T extends InteractableBase>(this: T, options: OptionsArg) {\n        super.set(options)\n\n        scope.fire('interactable:set', {\n          options,\n          interactable: this,\n        })\n\n        return this\n      }\n\n      unset(this: InteractableBase) {\n        super.unset()\n\n        const index = scope.interactables.list.indexOf(this)\n        if (index < 0) return\n\n        scope.interactables.list.splice(index, 1)\n        scope.fire('interactable:unset', { interactable: this })\n      }\n    }\n  }\n\n  addListeners(map: ListenerMap, id?: string) {\n    this.listenerMaps.push({ id, map })\n  }\n\n  fire<T extends ListenerName>(name: T, arg: SignalArgs[T]): void | false {\n    for (const {\n      map: { [name]: listener },\n    } of this.listenerMaps) {\n      if (!!listener && listener(arg as any, this, name as never) === false) {\n        return false\n      }\n    }\n  }\n\n  onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n  init(window: Window | typeof globalThis) {\n    return this.isInitialized ? this : initScope(this, window)\n  }\n\n  pluginIsInstalled(plugin: Plugin) {\n    const { id } = plugin\n    return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1\n  }\n\n  usePlugin(plugin: Plugin, options?: { [key: string]: any }) {\n    if (!this.isInitialized) {\n      return this\n    }\n\n    if (this.pluginIsInstalled(plugin)) {\n      return this\n    }\n\n    if (plugin.id) {\n      this._plugins.map[plugin.id] = plugin\n    }\n    this._plugins.list.push(plugin)\n\n    if (plugin.install) {\n      plugin.install(this, options)\n    }\n\n    if (plugin.listeners && plugin.before) {\n      let index = 0\n      const len = this.listenerMaps.length\n      const before = plugin.before.reduce((acc, id) => {\n        acc[id] = true\n        acc[pluginIdRoot(id)] = true\n        return acc\n      }, {})\n\n      for (; index < len; index++) {\n        const otherId = this.listenerMaps[index].id\n\n        if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) {\n          break\n        }\n      }\n\n      this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n    } else if (plugin.listeners) {\n      this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n    }\n\n    return this\n  }\n\n  addDocument(doc: Document, options?: any): void | false {\n    // do nothing if document is already known\n    if (this.getDocIndex(doc) !== -1) {\n      return false\n    }\n\n    const window = win.getWindow(doc)\n\n    options = options ? extend({}, options) : {}\n\n    this.documents.push({ doc, options })\n    this.events.documents.push(doc)\n\n    // don't add an unload event for the main document\n    // so that the page may be cached in browser history\n    if (doc !== this.document) {\n      this.events.add(window, 'unload', this.onWindowUnload)\n    }\n\n    this.fire('scope:add-document', { doc, window, scope: this, options })\n  }\n\n  removeDocument(doc: Document) {\n    const index = this.getDocIndex(doc)\n\n    const window = win.getWindow(doc)\n    const options = this.documents[index].options\n\n    this.events.remove(window, 'unload', this.onWindowUnload)\n\n    this.documents.splice(index, 1)\n    this.events.documents.splice(index, 1)\n\n    this.fire('scope:remove-document', { doc, window, scope: this, options })\n  }\n\n  getDocIndex(doc: Document) {\n    for (let i = 0; i < this.documents.length; i++) {\n      if (this.documents[i].doc === doc) {\n        return i\n      }\n    }\n\n    return -1\n  }\n\n  getDocOptions(doc: Document) {\n    const docIndex = this.getDocIndex(doc)\n\n    return docIndex === -1 ? null : this.documents[docIndex].options\n  }\n\n  now() {\n    return (((this.window as any).Date as typeof Date) || Date).now()\n  }\n}\n\n// Keep Scope class internal, but expose minimal interface to avoid broken types when Scope is stripped out\nexport interface Scope {\n  fire<T extends ListenerName>(name: T, arg: SignalArgs[T]): void | false\n}\n\n/** @internal */\nexport function initScope(scope: Scope, window: Window | typeof globalThis) {\n  scope.isInitialized = true\n\n  if (is.window(window)) {\n    win.init(window)\n  }\n\n  domObjects.init(window)\n  browser.init(window)\n  raf.init(window)\n\n  // @ts-expect-error\n  scope.window = window\n  scope.document = window.document\n\n  scope.usePlugin(interactions)\n  scope.usePlugin(events)\n\n  return scope\n}\n\nfunction pluginIdRoot(id: string) {\n  return id && id.replace(/\\/.*$/, '')\n}\n","import browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { Options } from './options'\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n *   .gesturable(true)\n *   .on('gesturemove', function (event) {\n *       // ...\n *   })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport interface InteractStatic {\n  (target: Target, options?: Options): Interactable\n  getPointerAverage: typeof pointerUtils.pointerAverage\n  getTouchBBox: typeof pointerUtils.touchBBox\n  getTouchDistance: typeof pointerUtils.touchDistance\n  getTouchAngle: typeof pointerUtils.touchAngle\n  getElementRect: typeof domUtils.getElementRect\n  getElementClientRect: typeof domUtils.getElementClientRect\n  matchesSelector: typeof domUtils.matchesSelector\n  closest: typeof domUtils.closest\n  /** @internal */ globalEvents: any\n  version: string\n  /** @internal */ scope: Scope\n  /**\n   * Use a plugin\n   */\n  use(\n    plugin: Plugin,\n    options?: {\n      [key: string]: any\n    },\n  ): any\n  /**\n   * Check if an element or selector has been set with the `interact(target)`\n   * function\n   *\n   * @return {boolean} Indicates if the element or CSS selector was previously\n   * passed to interact\n   */\n  isSet(\n    /* The Element or string being searched for */\n    target: Target,\n    options?: any,\n  ): boolean\n  on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n  off(type: EventTypes, listener: any, options?: object): any\n  debug(): any\n  /**\n   * Whether or not the browser supports touch input\n   */\n  supportsTouch(): boolean\n  /**\n   * Whether or not the browser supports PointerEvents\n   */\n  supportsPointerEvent(): boolean\n  /**\n   * Cancels all interactions (end events are not fired)\n   */\n  stop(): InteractStatic\n  /**\n   * Returns or sets the distance the pointer must be moved before an action\n   * sequence occurs. This also affects tolerance for tap events.\n   */\n  pointerMoveTolerance(\n    /** The movement from the start position must be greater than this value */\n    newValue?: number,\n  ): InteractStatic | number\n  addDocument(doc: Document, options?: object): void\n  removeDocument(doc: Document): void\n}\n\nexport function createInteractStatic(scope: Scope): InteractStatic {\n  const interact = ((target: Target, options: Options) => {\n    let interactable = scope.interactables.getExisting(target, options)\n\n    if (!interactable) {\n      interactable = scope.interactables.new(target, options)\n      interactable.events.global = interact.globalEvents\n    }\n\n    return interactable\n  }) as InteractStatic\n\n  // expose the functions used to calculate multi-touch properties\n  interact.getPointerAverage = pointerUtils.pointerAverage\n  interact.getTouchBBox = pointerUtils.touchBBox\n  interact.getTouchDistance = pointerUtils.touchDistance\n  interact.getTouchAngle = pointerUtils.touchAngle\n\n  interact.getElementRect = domUtils.getElementRect\n  interact.getElementClientRect = domUtils.getElementClientRect\n  interact.matchesSelector = domUtils.matchesSelector\n  interact.closest = domUtils.closest\n\n  interact.globalEvents = {} as any\n\n  // eslint-disable-next-line no-undef\n  interact.version = process.env.npm_package_version\n  interact.scope = scope\n  interact.use = function (plugin, options) {\n    this.scope.usePlugin(plugin, options)\n\n    return this\n  }\n\n  interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n    return !!this.scope.interactables.get(target, options && options.context)\n  }\n\n  interact.on = warnOnce(function on(type: string | EventTypes, listener: ListenersArg, options?: object) {\n    if (is.string(type) && type.search(' ') !== -1) {\n      type = type.trim().split(/ +/)\n    }\n\n    if (is.array(type)) {\n      for (const eventType of type as any[]) {\n        this.on(eventType, listener, options)\n      }\n\n      return this\n    }\n\n    if (is.object(type)) {\n      for (const prop in type) {\n        this.on(prop, (type as any)[prop], listener)\n      }\n\n      return this\n    }\n\n    // if it is an InteractEvent type, add listener to globalEvents\n    if (isNonNativeEvent(type, this.scope.actions)) {\n      // if this type of event was never bound\n      if (!this.globalEvents[type]) {\n        this.globalEvents[type] = [listener]\n      } else {\n        this.globalEvents[type].push(listener)\n      }\n    }\n    // If non InteractEvent type, addEventListener to document\n    else {\n      this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n    }\n\n    return this\n  }, 'The interact.on() method is being deprecated')\n\n  interact.off = warnOnce(function off(type: EventTypes, listener: any, options?: object) {\n    if (is.string(type) && type.search(' ') !== -1) {\n      type = type.trim().split(/ +/)\n    }\n\n    if (is.array(type)) {\n      for (const eventType of type) {\n        this.off(eventType, listener, options)\n      }\n\n      return this\n    }\n\n    if (is.object(type)) {\n      for (const prop in type) {\n        this.off(prop, type[prop], listener)\n      }\n\n      return this\n    }\n\n    if (isNonNativeEvent(type, this.scope.actions)) {\n      let index: number\n\n      if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n        this.globalEvents[type].splice(index, 1)\n      }\n    } else {\n      this.scope.events.remove(this.scope.document, type, listener, options)\n    }\n\n    return this\n  }, 'The interact.off() method is being deprecated')\n\n  interact.debug = function () {\n    return this.scope\n  }\n\n  interact.supportsTouch = function () {\n    return browser.supportsTouch\n  }\n\n  interact.supportsPointerEvent = function () {\n    return browser.supportsPointerEvent\n  }\n\n  interact.stop = function () {\n    for (const interaction of this.scope.interactions.list) {\n      interaction.stop()\n    }\n\n    return this\n  }\n\n  interact.pointerMoveTolerance = function (newValue?: number) {\n    if (is.number(newValue)) {\n      this.scope.interactions.pointerMoveTolerance = newValue\n\n      return this\n    }\n\n    return this.scope.interactions.pointerMoveTolerance\n  }\n\n  interact.addDocument = function (doc: Document, options?: object) {\n    this.scope.addDocument(doc, options)\n  }\n\n  interact.removeDocument = function (doc: Document) {\n    this.scope.removeDocument(doc)\n  }\n\n  return interact\n}\n","import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n","export default () => {}\n","export default () => {}\n","import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport interface GridOptionsBase {\n  range?: number\n  limits?: Rect\n  offset?: Point\n}\nexport interface GridOptionsXY extends GridOptionsBase {\n  x: number\n  y: number\n}\nexport interface GridOptionsTopLeft extends GridOptionsBase {\n  top?: number\n  left?: number\n}\nexport interface GridOptionsBottomRight extends GridOptionsBase {\n  bottom?: number\n  right?: number\n}\nexport interface GridOptionsWidthHeight extends GridOptionsBase {\n  width?: number\n  height?: number\n}\n\nexport type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight\n\nexport default (grid: GridOptions) => {\n  const coordFields = (\n    [\n      ['x', 'y'],\n      ['left', 'top'],\n      ['right', 'bottom'],\n      ['width', 'height'],\n    ] as const\n  ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n  const gridFunc: SnapFunction & {\n    grid: typeof grid\n    coordFields: typeof coordFields\n  } = (x, y) => {\n    const {\n      range,\n      limits = {\n        left: -Infinity,\n        right: Infinity,\n        top: -Infinity,\n        bottom: Infinity,\n      },\n      offset = { x: 0, y: 0 },\n    } = grid\n\n    const result: SnapTarget & {\n      grid: typeof grid\n    } = { range, grid, x: null as number, y: null as number }\n\n    for (const [xField, yField] of coordFields) {\n      const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n      const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n      result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n      result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n    }\n\n    return result\n  }\n\n  gridFunc.grid = grid\n  gridFunc.coordFields = coordFields\n\n  return gridFunc\n}\n","import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n  export interface InteractStatic {\n    snappers: typeof allSnappers\n    createSnapGrid: typeof allSnappers.grid\n  }\n}\n\nconst snappersPlugin: Plugin = {\n  id: 'snappers',\n  install(scope) {\n    const { interactStatic: interact } = scope\n\n    interact.snappers = extend(interact.snappers || {}, allSnappers)\n    interact.createSnapGrid = interact.snappers.grid\n  },\n}\n\nexport default snappersPlugin\n","/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This modifier forces elements to be resized with a specified dx/dy ratio.\n *\n * ```js\n * interact(target).resizable({\n *   modifiers: [\n *     interact.modifiers.snapSize({\n *       targets: [ interact.snappers.grid({ x: 20, y: 20 }) ],\n *     }),\n *     interact.aspectRatio({ ratio: 'preserve' }),\n *   ],\n * });\n * ```\n */\n\nimport type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport { makeModifier } from './base'\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n  ratio?: number | 'preserve'\n  equalDelta?: boolean\n  modifiers?: Modifier[]\n  enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\n  AspectRatioOptions,\n  {\n    startCoords: Point\n    startRect: Rect\n    linkedEdges: EdgeOptions\n    ratio: number\n    equalDelta: boolean\n    xIsPrimaryAxis: boolean\n    edgeSign: {\n      x: number\n      y: number\n    }\n    subModification: Modification\n  }\n>\n\nconst aspectRatio: ModifierModule<AspectRatioOptions, AspectRatioState> = {\n  start(arg) {\n    const { state, rect, edges, pageCoords: coords } = arg\n    let { ratio, enabled } = state.options\n    const { equalDelta, modifiers } = state.options\n\n    if (ratio === 'preserve') {\n      ratio = rect.width / rect.height\n    }\n\n    state.startCoords = extend({}, coords)\n    state.startRect = extend({}, rect)\n    state.ratio = ratio\n    state.equalDelta = equalDelta\n\n    const linkedEdges = (state.linkedEdges = {\n      top: edges.top || (edges.left && !edges.bottom),\n      left: edges.left || (edges.top && !edges.right),\n      bottom: edges.bottom || (edges.right && !edges.top),\n      right: edges.right || (edges.bottom && !edges.left),\n    })\n\n    state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n    if (state.equalDelta) {\n      const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n      state.edgeSign = {\n        x: sign,\n        y: sign,\n      }\n    } else {\n      state.edgeSign = {\n        x: linkedEdges.left ? -1 : 1,\n        y: linkedEdges.top ? -1 : 1,\n      }\n    }\n\n    if (enabled !== false) {\n      extend(edges, linkedEdges)\n    }\n\n    if (!modifiers?.length) return\n\n    const subModification = new Modification(arg.interaction)\n\n    subModification.copyFrom(arg.interaction.modification)\n    subModification.prepareStates(modifiers)\n\n    state.subModification = subModification\n    subModification.startAll({ ...arg })\n  },\n\n  set(arg) {\n    const { state, rect, coords } = arg\n    const { linkedEdges } = state\n    const initialCoords = extend({}, coords)\n    const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n    extend(arg.edges, linkedEdges)\n    aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n    if (!state.subModification) {\n      return null\n    }\n\n    const correctedRect = extend({}, rect)\n\n    addEdges(linkedEdges, correctedRect, {\n      x: coords.x - initialCoords.x,\n      y: coords.y - initialCoords.y,\n    })\n\n    const result = state.subModification.setAll({\n      ...arg,\n      rect: correctedRect,\n      edges: linkedEdges,\n      pageCoords: coords,\n      prevCoords: coords,\n      prevRect: correctedRect,\n    })\n\n    const { delta } = result\n\n    if (result.changed) {\n      const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y)\n\n      // do aspect modification again with critical edge axis as primary\n      aspectMethod(state, xIsCriticalAxis, result.coords, result.rect)\n      extend(coords, result.coords)\n    }\n\n    return result.eventProps\n  },\n\n  defaults: {\n    ratio: 'preserve',\n    equalDelta: false,\n    modifiers: [],\n    enabled: false,\n  },\n}\n\nfunction setEqualDelta({ startCoords, edgeSign }: AspectRatioState, xIsPrimaryAxis: boolean, coords: Point) {\n  if (xIsPrimaryAxis) {\n    coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign.y\n  } else {\n    coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n  }\n}\n\nfunction setRatio(\n  { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n  xIsPrimaryAxis: boolean,\n  coords: Point,\n  rect: Rect,\n) {\n  if (xIsPrimaryAxis) {\n    const newHeight = rect.width / ratio\n\n    coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n  } else {\n    const newWidth = rect.height * ratio\n\n    coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n  }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n","import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction<any, any, 'noop'>\n\nnoop._defaults = {}\n\nexport default noop\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n  // where to drag over\n  restriction: RectResolvable<[number, number, Interaction]>\n  // what part of self is allowed to drag over\n  elementRect: Rect\n  offset: Rect\n  // restrict just before the end drag\n  endOnly: boolean\n  enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\n  RestrictOptions,\n  {\n    offset: Rect\n  }\n>\n\nfunction start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg<RestrictState>) {\n  const { options } = state\n  const { elementRect } = options\n  const offset: Rect = extend(\n    {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n    },\n    options.offset || {},\n  )\n\n  if (rect && elementRect) {\n    const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n    if (restriction) {\n      const widthDiff = restriction.right - restriction.left - rect.width\n      const heightDiff = restriction.bottom - restriction.top - rect.height\n\n      if (widthDiff < 0) {\n        offset.left += widthDiff\n        offset.right += widthDiff\n      }\n      if (heightDiff < 0) {\n        offset.top += heightDiff\n        offset.bottom += heightDiff\n      }\n    }\n\n    offset.left += startOffset.left - rect.width * elementRect.left\n    offset.top += startOffset.top - rect.height * elementRect.top\n\n    offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n    offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n  }\n\n  state.offset = offset\n}\n\nfunction set({ coords, interaction, state }: ModifierArg<RestrictState>) {\n  const { options, offset } = state\n\n  const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n  if (!restriction) return\n\n  const rect = rectUtils.xywhToTlbr(restriction)\n\n  coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n  coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect(\n  value: RectResolvable<[number, number, Interaction]>,\n  interaction: Interaction,\n  coords?: Point,\n) {\n  if (is.func(value)) {\n    return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n      coords.x,\n      coords.y,\n      interaction,\n    ])\n  } else {\n    return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n  }\n}\n\nconst defaults: RestrictOptions = {\n  restriction: null,\n  elementRect: null,\n  offset: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst restrict: ModifierModule<RestrictOptions, RestrictState> = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n","// This modifier adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n//   edges: { top: true, left: true },\n//   restrictEdges: {\n//     inner: { top: 200, left: 200, right: 400, bottom: 400 },\n//     outer: { top:   0, left:   0, right: 600, bottom: 600 },\n//   },\n// })\n\nimport type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n  inner: RestrictOptions['restriction']\n  outer: RestrictOptions['restriction']\n  offset?: RestrictOptions['offset']\n  endOnly: boolean\n  enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\n  RestrictEdgesOptions,\n  {\n    inner: Rect\n    outer: Rect\n    offset: RestrictEdgesOptions['offset']\n  }\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start({ interaction, startOffset, state }: ModifierArg<RestrictEdgesState>) {\n  const { options } = state\n  let offset: Point\n\n  if (options) {\n    const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n    offset = rectUtils.rectToXY(offsetRect)\n  }\n\n  offset = offset || { x: 0, y: 0 }\n\n  state.offset = {\n    top: offset.y + startOffset.top,\n    left: offset.x + startOffset.left,\n    bottom: offset.y - startOffset.bottom,\n    right: offset.x - startOffset.right,\n  }\n}\n\nfunction set({ coords, edges, interaction, state }: ModifierArg<RestrictEdgesState>) {\n  const { offset, options } = state\n\n  if (!edges) {\n    return\n  }\n\n  const page = extend({}, coords)\n  const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n  const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n  fixRect(inner, noInner)\n  fixRect(outer, noOuter)\n\n  if (edges.top) {\n    coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n  } else if (edges.bottom) {\n    coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n  }\n  if (edges.left) {\n    coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n  } else if (edges.right) {\n    coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n  }\n}\n\nfunction fixRect(rect: Rect, defaults: Rect) {\n  for (const edge of ['top', 'left', 'bottom', 'right']) {\n    if (!(edge in rect)) {\n      rect[edge] = defaults[edge]\n    }\n  }\n\n  return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n  inner: null,\n  outer: null,\n  offset: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst restrictEdges = {\n  noInner,\n  noOuter,\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n","import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n  {\n    get elementRect() {\n      return { top: 0, left: 0, bottom: 1, right: 1 }\n    },\n    set elementRect(_) {},\n  },\n  restrict.defaults,\n)\n\nconst restrictRect = {\n  start: restrict.start,\n  set: restrict.set,\n  defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n","import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n  min?: Size | Point | RestrictOptions['restriction']\n  max?: Size | Point | RestrictOptions['restriction']\n  endOnly: boolean\n  enabled?: boolean\n}\n\nfunction start(arg: ModifierArg<RestrictEdgesState>) {\n  return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\n  ModifierState<\n    RestrictSizeOptions & { inner: Rect; outer: Rect },\n    {\n      min: Rect\n      max: Rect\n    }\n  >\n\nfunction set(arg: ModifierArg<RestrictSizeState>) {\n  const { interaction, state, rect, edges } = arg\n  const { options } = state\n\n  if (!edges) {\n    return\n  }\n\n  const minSize =\n    rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n  const maxSize =\n    rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n  state.options = {\n    endOnly: options.endOnly,\n    inner: extend({}, restrictEdges.noInner),\n    outer: extend({}, restrictEdges.noOuter),\n  }\n\n  if (edges.top) {\n    state.options.inner.top = rect.bottom - minSize.height\n    state.options.outer.top = rect.bottom - maxSize.height\n  } else if (edges.bottom) {\n    state.options.inner.bottom = rect.top + minSize.height\n    state.options.outer.bottom = rect.top + maxSize.height\n  }\n  if (edges.left) {\n    state.options.inner.left = rect.right - minSize.width\n    state.options.outer.left = rect.right - maxSize.width\n  } else if (edges.right) {\n    state.options.inner.right = rect.left + minSize.width\n    state.options.outer.right = rect.left + maxSize.width\n  }\n\n  restrictEdges.set(arg)\n\n  state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n  min: null,\n  max: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst restrictSize = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n","import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { resolveRectLike, rectToXY } from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nexport interface Offset {\n  x: number\n  y: number\n  index: number\n  relativePoint?: Point | null\n}\n\nexport interface SnapPosition {\n  x?: number\n  y?: number\n  range?: number\n  offset?: Offset\n  [index: string]: any\n}\n\nexport type SnapFunction = (\n  x: number,\n  y: number,\n  interaction: InteractionProxy<ActionName>,\n  offset: Offset,\n  index: number,\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n  targets?: SnapTarget[]\n  // target range\n  range?: number\n  // self points for snapping. [0,0] = top left, [1,1] = bottom right\n  relativePoints?: Point[]\n  // startCoords = offset snapping from drag start page position\n  offset?: Point | RectResolvable<[Interaction]> | 'startCoords'\n  offsetWithOrigin?: boolean\n  origin?: RectResolvable<[Element]> | Point\n  endOnly?: boolean\n  enabled?: boolean\n}\n\nexport type SnapState = ModifierState<\n  SnapOptions,\n  {\n    offsets?: Offset[]\n    closest?: any\n    targetFields?: string[][]\n  }\n>\n\nfunction start(arg: ModifierArg<SnapState>) {\n  const { interaction, interactable, element, rect, state, startOffset } = arg\n  const { options } = state\n  const origin = options.offsetWithOrigin ? getOrigin(arg) : { x: 0, y: 0 }\n\n  let snapOffset: Point\n\n  if (options.offset === 'startCoords') {\n    snapOffset = {\n      x: interaction.coords.start.page.x,\n      y: interaction.coords.start.page.y,\n    }\n  } else {\n    const offsetRect = resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n    snapOffset = rectToXY(offsetRect) || { x: 0, y: 0 }\n    snapOffset.x += origin.x\n    snapOffset.y += origin.y\n  }\n\n  const { relativePoints } = options\n\n  state.offsets =\n    rect && relativePoints && relativePoints.length\n      ? relativePoints.map((relativePoint, index) => ({\n          index,\n          relativePoint,\n          x: startOffset.left - rect.width * relativePoint.x + snapOffset.x,\n          y: startOffset.top - rect.height * relativePoint.y + snapOffset.y,\n        }))\n      : [\n          {\n            index: 0,\n            relativePoint: null,\n            x: snapOffset.x,\n            y: snapOffset.y,\n          },\n        ]\n}\n\nfunction set(arg: ModifierArg<SnapState>) {\n  const { interaction, coords, state } = arg\n  const { options, offsets } = state\n\n  const origin = getOriginXY(interaction.interactable!, interaction.element!, interaction.prepared.name)\n  const page = extend({}, coords)\n  const targets: SnapPosition[] = []\n\n  if (!options.offsetWithOrigin) {\n    page.x -= origin.x\n    page.y -= origin.y\n  }\n\n  for (const offset of offsets!) {\n    const relativeX = page.x - offset.x\n    const relativeY = page.y - offset.y\n\n    for (let index = 0, len = options.targets!.length; index < len; index++) {\n      const snapTarget = options.targets![index]\n      let target: SnapPosition\n\n      if (is.func(snapTarget)) {\n        target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index)\n      } else {\n        target = snapTarget\n      }\n\n      if (!target) {\n        continue\n      }\n\n      targets.push({\n        x: (is.number(target.x) ? target.x : relativeX) + offset.x,\n        y: (is.number(target.y) ? target.y : relativeY) + offset.y,\n\n        range: is.number(target.range) ? target.range : options.range,\n        source: snapTarget,\n        index,\n        offset,\n      })\n    }\n  }\n\n  const closest = {\n    target: null,\n    inRange: false,\n    distance: 0,\n    range: 0,\n    delta: { x: 0, y: 0 },\n  }\n\n  for (const target of targets) {\n    const range = target.range\n    const dx = target.x - page.x\n    const dy = target.y - page.y\n    const distance = hypot(dx, dy)\n    let inRange = distance <= range\n\n    // Infinite targets count as being out of range\n    // compared to non infinite ones that are in range\n    if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n      inRange = false\n    }\n\n    if (\n      !closest.target ||\n      (inRange\n        ? // is the closest target in range?\n          closest.inRange && range !== Infinity\n          ? // the pointer is relatively deeper in this target\n            distance / range < closest.distance / closest.range\n          : // this target has Infinite range and the closest doesn't\n            (range === Infinity && closest.range !== Infinity) ||\n            // OR this target is closer that the previous closest\n            distance < closest.distance\n        : // The other is not in range and the pointer is closer to this target\n          !closest.inRange && distance < closest.distance)\n    ) {\n      closest.target = target\n      closest.distance = distance\n      closest.range = range\n      closest.inRange = inRange\n      closest.delta.x = dx\n      closest.delta.y = dy\n    }\n  }\n\n  if (closest.inRange) {\n    coords.x = closest.target.x\n    coords.y = closest.target.y\n  }\n\n  state.closest = closest\n  return closest\n}\n\nfunction getOrigin(arg: Partial<ModifierArg<SnapState>>) {\n  const { element } = arg.interaction\n  const optionsOrigin = rectToXY(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n  const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\n\n  return origin\n}\n\nconst defaults: SnapOptions = {\n  range: Infinity,\n  targets: null,\n  offset: null,\n  offsetWithOrigin: true,\n  origin: null,\n  relativePoints: null,\n  endOnly: false,\n  enabled: false,\n}\nconst snap = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(snap, 'snap')\nexport { snap }\n","// This modifier allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick<SnapOptions, 'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'>\n\nfunction start(arg: ModifierArg<SnapState>) {\n  const { state, edges } = arg\n  const { options } = state\n\n  if (!edges) {\n    return null\n  }\n\n  arg.state = {\n    options: {\n      targets: null,\n      relativePoints: [\n        {\n          x: edges.left ? 0 : 1,\n          y: edges.top ? 0 : 1,\n        },\n      ],\n      offset: options.offset || 'self',\n      origin: { x: 0, y: 0 },\n      range: options.range,\n    },\n  }\n\n  state.targetFields = state.targetFields || [\n    ['width', 'height'],\n    ['x', 'y'],\n  ]\n\n  snap.start(arg)\n  state.offsets = arg.state.offsets\n\n  arg.state = state\n}\n\nfunction set(arg) {\n  const { interaction, state, coords } = arg\n  const { options, offsets } = state\n  const relative = {\n    x: coords.x - offsets[0].x,\n    y: coords.y - offsets[0].y,\n  }\n\n  state.options = extend({}, options)\n  state.options.targets = []\n\n  for (const snapTarget of options.targets || []) {\n    let target\n\n    if (is.func(snapTarget)) {\n      target = snapTarget(relative.x, relative.y, interaction)\n    } else {\n      target = snapTarget\n    }\n\n    if (!target) {\n      continue\n    }\n\n    for (const [xField, yField] of state.targetFields) {\n      if (xField in target || yField in target) {\n        target.x = target[xField]\n        target.y = target[yField]\n\n        break\n      }\n    }\n\n    state.options.targets.push(target)\n  }\n\n  const returnValue = snap.set(arg)\n\n  state.options = options\n\n  return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n  range: Infinity,\n  targets: null,\n  offset: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst snapSize = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n","/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n  aspectRatio,\n  restrictEdges,\n  restrict,\n  restrictRect,\n  restrictSize,\n  snapEdges,\n  snap,\n  snapSize,\n\n  spring,\n  avoid,\n  transform,\n  rubberband,\n}\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This modifier allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n *   snapEdges: {\n *     targets: [interact.snappers.grid({ x: 100, y: 50 })],\n *   },\n * })\n *\n * interact(target).resizable({\n *   snapEdges: {\n *     targets: [\n *       interact.snappers.grid({\n *        top: 50,\n *        left: 50,\n *        bottom: 100,\n *        right: 100,\n *       }),\n *     ],\n *   },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick<SnapOptions, 'targets' | 'range' | 'offset' | 'endOnly' | 'enabled'>\n\nfunction start(arg: ModifierArg<SnapState>) {\n  const { edges } = arg\n\n  if (!edges) {\n    return null\n  }\n\n  arg.state.targetFields = arg.state.targetFields || [\n    [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n  ]\n\n  return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule<SnapEdgesOptions, SnapState, ReturnType<typeof snapSize.set>> = {\n  start,\n  set: snapSize.set,\n  defaults: extend(clone(snapSize.defaults), {\n    targets: undefined,\n    range: undefined,\n    offset: { x: 0, y: 0 },\n  } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n","import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './all'\nimport './base'\n\nimport all from './all'\nimport base from './base'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n  export interface InteractStatic {\n    modifiers: typeof all\n  }\n}\n\nconst modifiers: Plugin = {\n  id: 'modifiers',\n  install(scope) {\n    const { interactStatic: interact } = scope\n\n    scope.usePlugin(base)\n    scope.usePlugin(snappers)\n\n    interact.modifiers = all\n\n    // for backwrads compatibility\n    for (const type in all) {\n      const { _defaults, _methods } = all[type as keyof typeof all]\n\n      ;(_defaults as any)._methods = _methods\n      ;(scope.defaults.perAction as any)[type] = _defaults\n    }\n  },\n}\n\nexport default modifiers\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport class PointerEvent<T extends string = any> extends BaseEvent<never> {\n  declare type: T\n  declare originalEvent: PointerEventType\n  declare pointerId: number\n  declare pointerType: string\n  declare double: boolean\n  declare pageX: number\n  declare pageY: number\n  declare clientX: number\n  declare clientY: number\n  declare dt: number\n  declare eventable: any;\n  [key: string]: any\n\n  constructor(\n    type: T,\n    pointer: PointerType | PointerEvent<any>,\n    event: PointerEventType,\n    eventTarget: Node,\n    interaction: Interaction<never>,\n    timeStamp: number,\n  ) {\n    super(interaction)\n    pointerUtils.pointerExtend(this, event)\n\n    if (event !== pointer) {\n      pointerUtils.pointerExtend(this, pointer)\n    }\n\n    this.timeStamp = timeStamp\n    this.originalEvent = event\n    this.type = type\n    this.pointerId = pointerUtils.getPointerId(pointer)\n    this.pointerType = pointerUtils.getPointerType(pointer)\n    this.target = eventTarget\n    this.currentTarget = null\n\n    if (type === 'tap') {\n      const pointerIndex = interaction.getPointerIndex(pointer)\n      this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n      const interval = this.timeStamp - interaction.tapTime\n\n      this.double =\n        !!interaction.prevTap &&\n        interaction.prevTap.type !== 'doubletap' &&\n        interaction.prevTap.target === this.target &&\n        interval < 500\n    } else if (type === 'doubletap') {\n      this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n      this.double = true\n    }\n  }\n\n  _subtractOrigin({ x: originX, y: originY }: Point) {\n    this.pageX -= originX\n    this.pageY -= originY\n    this.clientX -= originX\n    this.clientY -= originY\n\n    return this\n  }\n\n  _addOrigin({ x: originX, y: originY }: Point) {\n    this.pageX += originX\n    this.pageY += originY\n    this.clientX += originX\n    this.clientY += originY\n\n    return this\n  }\n\n  /**\n   * Prevent the default behaviour of the original Event\n   */\n  preventDefault() {\n    this.originalEvent.preventDefault()\n  }\n}\n","import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n  node: Node\n  eventable: Eventable\n  props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n  enabled?: undefined // not used\n  holdDuration?: number\n  ignoreFrom?: any\n  allowFrom?: any\n  origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    pointerEvents: typeof pointerEvents\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    prevTap?: PointerEvent<string>\n    tapTime?: number\n  }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n  interface PointerInfo {\n    hold?: {\n      duration: number\n      timeout: any\n    }\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    pointerEvents: Options\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'pointerEvents:new': { pointerEvent: PointerEvent<any> }\n    'pointerEvents:fired': {\n      interaction: Interaction<null>\n      pointer: PointerType | PointerEvent<any>\n      event: PointerEventType | PointerEvent<any>\n      eventTarget: Node\n      pointerEvent: PointerEvent<any>\n      targets?: EventTargetList\n      type: string\n    }\n    'pointerEvents:collect-targets': {\n      interaction: Interaction<any>\n      pointer: PointerType | PointerEvent<any>\n      event: PointerEventType | PointerEvent<any>\n      eventTarget: Node\n      targets?: EventTargetList\n      type: string\n      path: Node[]\n      node: null\n    }\n  }\n}\n\nconst defaults: PointerEventOptions = {\n  holdDuration: 600,\n  ignoreFrom: null,\n  allowFrom: null,\n  origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n  id: 'pointer-events/base',\n  before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n  install,\n  listeners: {\n    'interactions:new': addInteractionProps,\n    'interactions:update-pointer': addHoldInfo,\n    'interactions:move': moveAndClearHold,\n    'interactions:down': (arg, scope) => {\n      downAndStartHold(arg, scope)\n      fire(arg, scope)\n    },\n    'interactions:up': (arg, scope) => {\n      clearHold(arg)\n      fire(arg, scope)\n      tapAfterUp(arg, scope)\n    },\n    'interactions:cancel': (arg, scope) => {\n      clearHold(arg)\n      fire(arg, scope)\n    },\n  },\n  PointerEvent,\n  fire,\n  collectEventTargets,\n  defaults,\n  types: {\n    down: true,\n    move: true,\n    up: true,\n    cancel: true,\n    tap: true,\n    doubletap: true,\n    hold: true,\n  } as { [type: string]: true },\n}\n\nfunction fire<T extends string>(\n  arg: {\n    pointer: PointerType | PointerEvent<any>\n    event: PointerEventType | PointerEvent<any>\n    eventTarget: Node\n    interaction: Interaction<never>\n    type: T\n    targets?: EventTargetList\n  },\n  scope: Scope,\n) {\n  const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n  const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n  scope.fire('pointerEvents:new', { pointerEvent })\n\n  const signalArg = {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    targets,\n    type,\n    pointerEvent,\n  }\n\n  for (let i = 0; i < targets.length; i++) {\n    const target = targets[i]\n\n    for (const prop in target.props || {}) {\n      ;(pointerEvent as any)[prop] = target.props[prop]\n    }\n\n    const origin = getOriginXY(target.eventable, target.node)\n\n    pointerEvent._subtractOrigin(origin)\n    pointerEvent.eventable = target.eventable\n    pointerEvent.currentTarget = target.node\n\n    target.eventable.fire(pointerEvent)\n\n    pointerEvent._addOrigin(origin)\n\n    if (\n      pointerEvent.immediatePropagationStopped ||\n      (pointerEvent.propagationStopped &&\n        i + 1 < targets.length &&\n        targets[i + 1].node !== pointerEvent.currentTarget)\n    ) {\n      break\n    }\n  }\n\n  scope.fire('pointerEvents:fired', signalArg)\n\n  if (type === 'tap') {\n    // if pointerEvent should make a double tap, create and fire a doubletap\n    // PointerEvent and use that as the prevTap\n    const prevTap = pointerEvent.double\n      ? fire(\n          {\n            interaction,\n            pointer,\n            event,\n            eventTarget,\n            type: 'doubletap',\n          },\n          scope,\n        )\n      : pointerEvent\n\n    interaction.prevTap = prevTap\n    interaction.tapTime = prevTap.timeStamp\n  }\n\n  return pointerEvent\n}\n\nfunction collectEventTargets<T extends string>(\n  {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    type,\n  }: {\n    interaction: Interaction<any>\n    pointer: PointerType | PointerEvent<any>\n    event: PointerEventType | PointerEvent<any>\n    eventTarget: Node\n    type: T\n  },\n  scope: Scope,\n) {\n  const pointerIndex = interaction.getPointerIndex(pointer)\n  const pointerInfo = interaction.pointers[pointerIndex]\n\n  // do not fire a tap event if the pointer was moved before being lifted\n  if (\n    type === 'tap' &&\n    (interaction.pointerWasMoved ||\n      // or if the pointerup target is different to the pointerdown target\n      !(pointerInfo && pointerInfo.downTarget === eventTarget))\n  ) {\n    return []\n  }\n\n  const path = domUtils.getPath(eventTarget as Element | Document)\n  const signalArg = {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    type,\n    path,\n    targets: [] as EventTargetList,\n    node: null,\n  }\n\n  for (const node of path) {\n    signalArg.node = node\n\n    scope.fire('pointerEvents:collect-targets', signalArg)\n  }\n\n  if (type === 'hold') {\n    signalArg.targets = signalArg.targets.filter(\n      (target) =>\n        target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold?.duration,\n    )\n  }\n\n  return signalArg.targets\n}\n\nfunction addInteractionProps({ interaction }) {\n  interaction.prevTap = null // the most recent tap event on this interaction\n  interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n  if (!down && pointerInfo.hold) {\n    return\n  }\n\n  pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold({ interaction, pointerIndex }) {\n  const hold = interaction.pointers[pointerIndex].hold\n\n  if (hold && hold.timeout) {\n    clearTimeout(hold.timeout)\n    hold.timeout = null\n  }\n}\n\nfunction moveAndClearHold(arg: SignalArgs['interactions:move'], scope: Scope) {\n  const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n  if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n    if (interaction.pointerIsDown) {\n      clearHold(arg)\n    }\n\n    fire(\n      {\n        interaction,\n        pointer,\n        event,\n        eventTarget: eventTarget as Element,\n        type: 'move',\n      },\n      scope,\n    )\n  }\n}\n\nfunction downAndStartHold(\n  { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n  scope: Scope,\n) {\n  const timer = interaction.pointers[pointerIndex].hold!\n  const path = domUtils.getPath(eventTarget as Element | Document)\n  const signalArg = {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    type: 'hold',\n    targets: [] as EventTargetList,\n    path,\n    node: null,\n  }\n\n  for (const node of path) {\n    signalArg.node = node\n\n    scope.fire('pointerEvents:collect-targets', signalArg)\n  }\n\n  if (!signalArg.targets.length) return\n\n  let minDuration = Infinity\n\n  for (const target of signalArg.targets) {\n    const holdDuration = target.eventable.options.holdDuration\n\n    if (holdDuration < minDuration) {\n      minDuration = holdDuration\n    }\n  }\n\n  timer.duration = minDuration\n  timer.timeout = setTimeout(() => {\n    fire(\n      {\n        interaction,\n        eventTarget,\n        pointer,\n        event,\n        type: 'hold',\n      },\n      scope,\n    )\n  }, minDuration)\n}\n\nfunction tapAfterUp(\n  { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n  scope: Scope,\n) {\n  if (!interaction.pointerWasMoved) {\n    fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n  }\n}\n\nfunction install(scope: Scope) {\n  scope.pointerEvents = pointerEvents\n  scope.defaults.actions.pointerEvents = pointerEvents.defaults\n  extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable import/no-duplicates */\nimport { type PointerEvent } from './PointerEvent'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    holdIntervalHandle?: any\n  }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n  interface PointerEvent<T extends string = any> {\n    count?: number\n  }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n  interface PointerEventOptions {\n    holdRepeatInterval?: number\n  }\n}\n\nfunction install(scope: Scope) {\n  scope.usePlugin(basePlugin)\n\n  const { pointerEvents } = scope\n\n  // don't repeat by default\n  pointerEvents.defaults.holdRepeatInterval = 0\n  pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew({ pointerEvent }: { pointerEvent: PointerEvent<any> }) {\n  if (pointerEvent.type !== 'hold') return\n\n  pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired(\n  { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n  scope: Scope,\n) {\n  if (pointerEvent.type !== 'hold' || !targets.length) return\n\n  // get the repeat interval from the first eventable\n  const interval = targets[0].eventable.options.holdRepeatInterval\n\n  // don't repeat if the interval is 0 or less\n  if (interval <= 0) return\n\n  // set a timeout to fire the holdrepeat event\n  interaction.holdIntervalHandle = setTimeout(() => {\n    scope.pointerEvents.fire(\n      {\n        interaction,\n        eventTarget,\n        type: 'hold',\n        pointer: pointerEvent,\n        event: pointerEvent,\n      },\n      scope,\n    )\n  }, interval)\n}\n\nfunction endHoldRepeat({ interaction }: { interaction: Interaction }) {\n  // set the interaction's holdStopTime property\n  // to stop further holdRepeat events\n  if (interaction.holdIntervalHandle) {\n    clearInterval(interaction.holdIntervalHandle)\n    interaction.holdIntervalHandle = null\n  }\n}\n\nconst holdRepeat: Plugin = {\n  id: 'pointer-events/holdRepeat',\n  install,\n  listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n    (acc, enderTypes) => {\n      ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n      return acc\n    },\n    {\n      'pointerEvents:new': onNew,\n      'pointerEvents:fired': onFired,\n    } as ListenerMap,\n  ),\n}\n\nexport default holdRepeat\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\n\nimport type { PointerEventOptions } from '@interactjs/pointer-events/base'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    pointerEvents(options: Partial<PointerEventOptions>): this\n    /** @internal */\n    __backCompatOption: (optionName: string, newValue: any) => any\n  }\n}\n\nfunction install(scope: Scope) {\n  const { Interactable } = scope\n\n  Interactable.prototype.pointerEvents = function (\n    this: Interactable,\n    options: Partial<PointerEventOptions>,\n  ) {\n    extend(this.events.options, options)\n\n    return this\n  }\n\n  const __backCompatOption = Interactable.prototype._backCompatOption\n\n  Interactable.prototype._backCompatOption = function (optionName, newValue) {\n    const ret = __backCompatOption.call(this, optionName, newValue)\n\n    if (ret === this) {\n      this.events.options[optionName] = newValue\n    }\n\n    return ret\n  }\n}\n\nconst plugin: Plugin = {\n  id: 'pointer-events/interactableTargets',\n  install,\n  listeners: {\n    'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n      scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n        const eventable = interactable.events\n        const options = eventable.options\n\n        if (\n          eventable.types[type] &&\n          eventable.types[type].length &&\n          interactable.testIgnoreAllow(options, node, eventTarget)\n        ) {\n          targets.push({\n            node,\n            eventable,\n            props: { interactable },\n          })\n        }\n      })\n    },\n\n    'interactable:new': ({ interactable }) => {\n      interactable.events.getRect = function (element: Element) {\n        return interactable.getRect(element)\n      }\n    },\n\n    'interactable:set': ({ interactable, options }, scope) => {\n      extend(interactable.events.options, scope.pointerEvents.defaults)\n      extend(interactable.events.options, options.pointerEvents || {})\n    },\n  },\n}\n\nexport default plugin\n","import type { Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './holdRepeat'\nimport './interactableTargets'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n/* eslint-enable import/no-duplicates */\n\nconst plugin: Plugin = {\n  id: 'pointer-events',\n  install(scope) {\n    scope.usePlugin(pointerEvents)\n    scope.usePlugin(holdRepeat)\n    scope.usePlugin(interactableTargets)\n  },\n}\n\nexport default plugin\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactions:before-action-reflow': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-reflow': DoAnyPhaseArg\n    'interactions:after-action-reflow': DoAnyPhaseArg\n  }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    /**\n     * ```js\n     * const interactable = interact(target)\n     * const drag = { name: drag, axis: 'x' }\n     * const resize = { name: resize, edges: { left: true, bottom: true }\n     *\n     * interactable.reflow(drag)\n     * interactable.reflow(resize)\n     * ```\n     *\n     * Start an action sequence to re-apply modifiers, check drops, etc.\n     *\n     * @param { Object } action The action to begin\n     * @param { string } action.name The name of the action\n     * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n     */\n    reflow<T extends ActionName>(action: ActionProps<T>): ReturnType<typeof doReflow>\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    _reflowPromise: Promise<void>\n    _reflowResolve: (...args: unknown[]) => void\n  }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface PhaseMap {\n    reflow?: true\n  }\n}\n\nfunction install(scope: Scope) {\n  const { Interactable } = scope\n\n  scope.actions.phases.reflow = true\n\n  Interactable.prototype.reflow = function (action: ActionProps) {\n    return doReflow(this, action, scope)\n  }\n}\n\nfunction doReflow<T extends ActionName>(\n  interactable: Interactable,\n  action: ActionProps<T>,\n  scope: Scope,\n): Promise<Interactable> {\n  const elements = interactable.getAllElements()\n\n  // tslint:disable-next-line variable-name\n  const Promise = (scope.window as any).Promise\n  const promises: Array<Promise<null>> | null = Promise ? [] : null\n\n  for (const element of elements) {\n    const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n    if (!rect) {\n      break\n    }\n\n    const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n      return (\n        interaction.interacting() &&\n        interaction.interactable === interactable &&\n        interaction.element === element &&\n        interaction.prepared.name === action.name\n      )\n    })\n    let reflowPromise: Promise<null>\n\n    if (runningInteraction) {\n      runningInteraction.move()\n\n      if (promises) {\n        reflowPromise =\n          runningInteraction._reflowPromise ||\n          new Promise((resolve: any) => {\n            runningInteraction._reflowResolve = resolve\n          })\n      }\n    } else {\n      const xywh = tlbrToXywh(rect)\n      const coords = {\n        page: { x: xywh.x, y: xywh.y },\n        client: { x: xywh.x, y: xywh.y },\n        timeStamp: scope.now(),\n      }\n\n      const event = pointerUtils.coordsToEvent(coords)\n      reflowPromise = startReflow<T>(scope, interactable, element, action, event)\n    }\n\n    if (promises) {\n      promises.push(reflowPromise)\n    }\n  }\n\n  return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow<T extends ActionName>(\n  scope: Scope,\n  interactable: Interactable,\n  element: Element,\n  action: ActionProps<T>,\n  event: any,\n) {\n  const interaction = scope.interactions.new({ pointerType: 'reflow' })\n  const signalArg = {\n    interaction,\n    event,\n    pointer: event,\n    eventTarget: element,\n    phase: 'reflow',\n  } as const\n\n  interaction.interactable = interactable\n  interaction.element = element\n  interaction.prevEvent = event\n  interaction.updatePointer(event, event, element, true)\n  pointerUtils.setZeroCoords(interaction.coords.delta)\n\n  copyAction(interaction.prepared, action)\n  interaction._doPhase(signalArg)\n\n  const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n  const reflowPromise = Promise\n    ? new Promise<undefined>((resolve) => {\n        interaction._reflowResolve = resolve\n      })\n    : undefined\n\n  interaction._reflowPromise = reflowPromise\n  interaction.start(action, interactable, element)\n\n  if (interaction._interacting) {\n    interaction.move(signalArg)\n    interaction.end(event)\n  } else {\n    interaction.stop()\n    interaction._reflowResolve()\n  }\n\n  interaction.removePointer(event, event)\n\n  return reflowPromise\n}\n\nconst reflow: Plugin = {\n  id: 'reflow',\n  install,\n  listeners: {\n    // remove completed reflow interactions\n    'interactions:stop': ({ interaction }, scope) => {\n      if (interaction.pointerType === 'reflow') {\n        if (interaction._reflowResolve) {\n          interaction._reflowResolve()\n        }\n\n        arr.remove(scope.interactions.list, interaction)\n      }\n    },\n  },\n}\n\nexport default reflow\n","/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/actions/plugin'\nimport '@interactjs/auto-scroll/plugin'\nimport '@interactjs/auto-start/plugin'\nimport '@interactjs/core/interactablePreventDefault'\nimport '@interactjs/dev-tools/plugin'\nimport '@interactjs/inertia/plugin'\nimport '@interactjs/interact'\nimport '@interactjs/modifiers/plugin'\nimport '@interactjs/offset/plugin'\nimport '@interactjs/pointer-events/plugin'\nimport '@interactjs/reflow/plugin'\n\nimport actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n/* eslint-enable import/no-duplicates */\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n  interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, } from '@formatjs/icu-messageformat-parser';\nimport { ErrorCode, FormatError, InvalidValueError, InvalidValueTypeError, MissingValueError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        var _this = this;\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () {\n            var _a;\n            return ({\n                locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n                    Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n            });\n        };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        if (typeof Intl.Locale === 'undefined') {\n            return;\n        }\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { IntlMessageFormat } from './src/core';\nexport * from './src/core';\nexport * from './src/error';\nexport * from './src/formatters';\nexport { IntlMessageFormat };\nexport default IntlMessageFormat;\n","/*\n * International Telephone Input v22.0.2\n * https://github.com/jackocnr/intl-tel-input.git\n * Licensed under the MIT license\n */\n\n// UMD\n(function(factory) {\n  if (typeof module === 'object' && module.exports) {\n    module.exports = factory();\n  } else {\n    window.intlTelInput = factory();\n  }\n}(() => {\n\nvar factoryOutput = (() => {\n  var __defProp = Object.defineProperty;\n  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n  var __getOwnPropNames = Object.getOwnPropertyNames;\n  var __hasOwnProp = Object.prototype.hasOwnProperty;\n  var __export = (target, all) => {\n    for (var name in all)\n      __defProp(target, name, { get: all[name], enumerable: true });\n  };\n  var __copyProps = (to, from, except, desc) => {\n    if (from && typeof from === \"object\" || typeof from === \"function\") {\n      for (let key of __getOwnPropNames(from))\n        if (!__hasOwnProp.call(to, key) && key !== except)\n          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n    }\n    return to;\n  };\n  var __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n  // src/js/intl-tel-input.ts\n  var intl_tel_input_exports = {};\n  __export(intl_tel_input_exports, {\n    Iti: () => Iti,\n    default: () => intl_tel_input_default\n  });\n\n  // src/js/intl-tel-input/data.ts\n  var rawCountryData = [\n    [\n      \"af\",\n      \"93\"\n    ],\n    [\n      \"al\",\n      \"355\"\n    ],\n    [\n      \"dz\",\n      \"213\"\n    ],\n    [\n      \"as\",\n      \"1\",\n      5,\n      [\"684\"]\n    ],\n    [\n      \"ad\",\n      \"376\"\n    ],\n    [\n      \"ao\",\n      \"244\"\n    ],\n    [\n      \"ai\",\n      \"1\",\n      6,\n      [\"264\"]\n    ],\n    [\n      \"ag\",\n      \"1\",\n      7,\n      [\"268\"]\n    ],\n    [\n      \"ar\",\n      \"54\"\n    ],\n    [\n      \"am\",\n      \"374\"\n    ],\n    [\n      \"aw\",\n      \"297\"\n    ],\n    [\n      \"ac\",\n      \"247\"\n    ],\n    [\n      \"au\",\n      \"61\",\n      0\n    ],\n    [\n      \"at\",\n      \"43\"\n    ],\n    [\n      \"az\",\n      \"994\"\n    ],\n    [\n      \"bs\",\n      \"1\",\n      8,\n      [\"242\"]\n    ],\n    [\n      \"bh\",\n      \"973\"\n    ],\n    [\n      \"bd\",\n      \"880\"\n    ],\n    [\n      \"bb\",\n      \"1\",\n      9,\n      [\"246\"]\n    ],\n    [\n      \"by\",\n      \"375\"\n    ],\n    [\n      \"be\",\n      \"32\"\n    ],\n    [\n      \"bz\",\n      \"501\"\n    ],\n    [\n      \"bj\",\n      \"229\"\n    ],\n    [\n      \"bm\",\n      \"1\",\n      10,\n      [\"441\"]\n    ],\n    [\n      \"bt\",\n      \"975\"\n    ],\n    [\n      \"bo\",\n      \"591\"\n    ],\n    [\n      \"ba\",\n      \"387\"\n    ],\n    [\n      \"bw\",\n      \"267\"\n    ],\n    [\n      \"br\",\n      \"55\"\n    ],\n    [\n      \"io\",\n      \"246\"\n    ],\n    [\n      \"vg\",\n      \"1\",\n      11,\n      [\"284\"]\n    ],\n    [\n      \"bn\",\n      \"673\"\n    ],\n    [\n      \"bg\",\n      \"359\"\n    ],\n    [\n      \"bf\",\n      \"226\"\n    ],\n    [\n      \"bi\",\n      \"257\"\n    ],\n    [\n      \"kh\",\n      \"855\"\n    ],\n    [\n      \"cm\",\n      \"237\"\n    ],\n    [\n      \"ca\",\n      \"1\",\n      1,\n      [\"204\", \"226\", \"236\", \"249\", \"250\", \"263\", \"289\", \"306\", \"343\", \"354\", \"365\", \"367\", \"368\", \"382\", \"387\", \"403\", \"416\", \"418\", \"428\", \"431\", \"437\", \"438\", \"450\", \"584\", \"468\", \"474\", \"506\", \"514\", \"519\", \"548\", \"579\", \"581\", \"584\", \"587\", \"604\", \"613\", \"639\", \"647\", \"672\", \"683\", \"705\", \"709\", \"742\", \"753\", \"778\", \"780\", \"782\", \"807\", \"819\", \"825\", \"867\", \"873\", \"879\", \"902\", \"905\"]\n    ],\n    [\n      \"cv\",\n      \"238\"\n    ],\n    [\n      \"bq\",\n      \"599\",\n      1,\n      [\"3\", \"4\", \"7\"]\n    ],\n    [\n      \"ky\",\n      \"1\",\n      12,\n      [\"345\"]\n    ],\n    [\n      \"cf\",\n      \"236\"\n    ],\n    [\n      \"td\",\n      \"235\"\n    ],\n    [\n      \"cl\",\n      \"56\"\n    ],\n    [\n      \"cn\",\n      \"86\"\n    ],\n    [\n      \"cx\",\n      \"61\",\n      2,\n      [\"89164\"]\n    ],\n    [\n      \"cc\",\n      \"61\",\n      1,\n      [\"89162\"]\n    ],\n    [\n      \"co\",\n      \"57\"\n    ],\n    [\n      \"km\",\n      \"269\"\n    ],\n    [\n      \"cg\",\n      \"242\"\n    ],\n    [\n      \"cd\",\n      \"243\"\n    ],\n    [\n      \"ck\",\n      \"682\"\n    ],\n    [\n      \"cr\",\n      \"506\"\n    ],\n    [\n      \"ci\",\n      \"225\"\n    ],\n    [\n      \"hr\",\n      \"385\"\n    ],\n    [\n      \"cu\",\n      \"53\"\n    ],\n    [\n      \"cw\",\n      \"599\",\n      0\n    ],\n    [\n      \"cy\",\n      \"357\"\n    ],\n    [\n      \"cz\",\n      \"420\"\n    ],\n    [\n      \"dk\",\n      \"45\"\n    ],\n    [\n      \"dj\",\n      \"253\"\n    ],\n    [\n      \"dm\",\n      \"1\",\n      13,\n      [\"767\"]\n    ],\n    [\n      \"do\",\n      \"1\",\n      2,\n      [\"809\", \"829\", \"849\"]\n    ],\n    [\n      \"ec\",\n      \"593\"\n    ],\n    [\n      \"eg\",\n      \"20\"\n    ],\n    [\n      \"sv\",\n      \"503\"\n    ],\n    [\n      \"gq\",\n      \"240\"\n    ],\n    [\n      \"er\",\n      \"291\"\n    ],\n    [\n      \"ee\",\n      \"372\"\n    ],\n    [\n      \"sz\",\n      \"268\"\n    ],\n    [\n      \"et\",\n      \"251\"\n    ],\n    [\n      \"fk\",\n      \"500\"\n    ],\n    [\n      \"fo\",\n      \"298\"\n    ],\n    [\n      \"fj\",\n      \"679\"\n    ],\n    [\n      \"fi\",\n      \"358\",\n      0\n    ],\n    [\n      \"fr\",\n      \"33\"\n    ],\n    [\n      \"gf\",\n      \"594\"\n    ],\n    [\n      \"pf\",\n      \"689\"\n    ],\n    [\n      \"ga\",\n      \"241\"\n    ],\n    [\n      \"gm\",\n      \"220\"\n    ],\n    [\n      \"ge\",\n      \"995\"\n    ],\n    [\n      \"de\",\n      \"49\"\n    ],\n    [\n      \"gh\",\n      \"233\"\n    ],\n    [\n      \"gi\",\n      \"350\"\n    ],\n    [\n      \"gr\",\n      \"30\"\n    ],\n    [\n      \"gl\",\n      \"299\"\n    ],\n    [\n      \"gd\",\n      \"1\",\n      14,\n      [\"473\"]\n    ],\n    [\n      \"gp\",\n      \"590\",\n      0\n    ],\n    [\n      \"gu\",\n      \"1\",\n      15,\n      [\"671\"]\n    ],\n    [\n      \"gt\",\n      \"502\"\n    ],\n    [\n      \"gg\",\n      \"44\",\n      1,\n      [\"1481\", \"7781\", \"7839\", \"7911\"]\n    ],\n    [\n      \"gn\",\n      \"224\"\n    ],\n    [\n      \"gw\",\n      \"245\"\n    ],\n    [\n      \"gy\",\n      \"592\"\n    ],\n    [\n      \"ht\",\n      \"509\"\n    ],\n    [\n      \"hn\",\n      \"504\"\n    ],\n    [\n      \"hk\",\n      \"852\"\n    ],\n    [\n      \"hu\",\n      \"36\"\n    ],\n    [\n      \"is\",\n      \"354\"\n    ],\n    [\n      \"in\",\n      \"91\"\n    ],\n    [\n      \"id\",\n      \"62\"\n    ],\n    [\n      \"ir\",\n      \"98\"\n    ],\n    [\n      \"iq\",\n      \"964\"\n    ],\n    [\n      \"ie\",\n      \"353\"\n    ],\n    [\n      \"im\",\n      \"44\",\n      2,\n      [\"1624\", \"74576\", \"7524\", \"7924\", \"7624\"]\n    ],\n    [\n      \"il\",\n      \"972\"\n    ],\n    [\n      \"it\",\n      \"39\",\n      0\n    ],\n    [\n      \"jm\",\n      \"1\",\n      4,\n      [\"876\", \"658\"]\n    ],\n    [\n      \"jp\",\n      \"81\"\n    ],\n    [\n      \"je\",\n      \"44\",\n      3,\n      [\"1534\", \"7509\", \"7700\", \"7797\", \"7829\", \"7937\"]\n    ],\n    [\n      \"jo\",\n      \"962\"\n    ],\n    [\n      \"kz\",\n      \"7\",\n      1,\n      [\"33\", \"7\"]\n    ],\n    [\n      \"ke\",\n      \"254\"\n    ],\n    [\n      \"ki\",\n      \"686\"\n    ],\n    [\n      \"xk\",\n      \"383\"\n    ],\n    [\n      \"kw\",\n      \"965\"\n    ],\n    [\n      \"kg\",\n      \"996\"\n    ],\n    [\n      \"la\",\n      \"856\"\n    ],\n    [\n      \"lv\",\n      \"371\"\n    ],\n    [\n      \"lb\",\n      \"961\"\n    ],\n    [\n      \"ls\",\n      \"266\"\n    ],\n    [\n      \"lr\",\n      \"231\"\n    ],\n    [\n      \"ly\",\n      \"218\"\n    ],\n    [\n      \"li\",\n      \"423\"\n    ],\n    [\n      \"lt\",\n      \"370\"\n    ],\n    [\n      \"lu\",\n      \"352\"\n    ],\n    [\n      \"mo\",\n      \"853\"\n    ],\n    [\n      \"mg\",\n      \"261\"\n    ],\n    [\n      \"mw\",\n      \"265\"\n    ],\n    [\n      \"my\",\n      \"60\"\n    ],\n    [\n      \"mv\",\n      \"960\"\n    ],\n    [\n      \"ml\",\n      \"223\"\n    ],\n    [\n      \"mt\",\n      \"356\"\n    ],\n    [\n      \"mh\",\n      \"692\"\n    ],\n    [\n      \"mq\",\n      \"596\"\n    ],\n    [\n      \"mr\",\n      \"222\"\n    ],\n    [\n      \"mu\",\n      \"230\"\n    ],\n    [\n      \"yt\",\n      \"262\",\n      1,\n      [\"269\", \"639\"]\n    ],\n    [\n      \"mx\",\n      \"52\"\n    ],\n    [\n      \"fm\",\n      \"691\"\n    ],\n    [\n      \"md\",\n      \"373\"\n    ],\n    [\n      \"mc\",\n      \"377\"\n    ],\n    [\n      \"mn\",\n      \"976\"\n    ],\n    [\n      \"me\",\n      \"382\"\n    ],\n    [\n      \"ms\",\n      \"1\",\n      16,\n      [\"664\"]\n    ],\n    [\n      \"ma\",\n      \"212\",\n      0\n    ],\n    [\n      \"mz\",\n      \"258\"\n    ],\n    [\n      \"mm\",\n      \"95\"\n    ],\n    [\n      \"na\",\n      \"264\"\n    ],\n    [\n      \"nr\",\n      \"674\"\n    ],\n    [\n      \"np\",\n      \"977\"\n    ],\n    [\n      \"nl\",\n      \"31\"\n    ],\n    [\n      \"nc\",\n      \"687\"\n    ],\n    [\n      \"nz\",\n      \"64\"\n    ],\n    [\n      \"ni\",\n      \"505\"\n    ],\n    [\n      \"ne\",\n      \"227\"\n    ],\n    [\n      \"ng\",\n      \"234\"\n    ],\n    [\n      \"nu\",\n      \"683\"\n    ],\n    [\n      \"nf\",\n      \"672\"\n    ],\n    [\n      \"kp\",\n      \"850\"\n    ],\n    [\n      \"mk\",\n      \"389\"\n    ],\n    [\n      \"mp\",\n      \"1\",\n      17,\n      [\"670\"]\n    ],\n    [\n      \"no\",\n      \"47\",\n      0\n    ],\n    [\n      \"om\",\n      \"968\"\n    ],\n    [\n      \"pk\",\n      \"92\"\n    ],\n    [\n      \"pw\",\n      \"680\"\n    ],\n    [\n      \"ps\",\n      \"970\"\n    ],\n    [\n      \"pa\",\n      \"507\"\n    ],\n    [\n      \"pg\",\n      \"675\"\n    ],\n    [\n      \"py\",\n      \"595\"\n    ],\n    [\n      \"pe\",\n      \"51\"\n    ],\n    [\n      \"ph\",\n      \"63\"\n    ],\n    [\n      \"pl\",\n      \"48\"\n    ],\n    [\n      \"pt\",\n      \"351\"\n    ],\n    [\n      \"pr\",\n      \"1\",\n      3,\n      [\"787\", \"939\"]\n    ],\n    [\n      \"qa\",\n      \"974\"\n    ],\n    [\n      \"re\",\n      \"262\",\n      0\n    ],\n    [\n      \"ro\",\n      \"40\"\n    ],\n    [\n      \"ru\",\n      \"7\",\n      0\n    ],\n    [\n      \"rw\",\n      \"250\"\n    ],\n    [\n      \"ws\",\n      \"685\"\n    ],\n    [\n      \"sm\",\n      \"378\"\n    ],\n    [\n      \"st\",\n      \"239\"\n    ],\n    [\n      \"sa\",\n      \"966\"\n    ],\n    [\n      \"sn\",\n      \"221\"\n    ],\n    [\n      \"rs\",\n      \"381\"\n    ],\n    [\n      \"sc\",\n      \"248\"\n    ],\n    [\n      \"sl\",\n      \"232\"\n    ],\n    [\n      \"sg\",\n      \"65\"\n    ],\n    [\n      \"sx\",\n      \"1\",\n      21,\n      [\"721\"]\n    ],\n    [\n      \"sk\",\n      \"421\"\n    ],\n    [\n      \"si\",\n      \"386\"\n    ],\n    [\n      \"sb\",\n      \"677\"\n    ],\n    [\n      \"so\",\n      \"252\"\n    ],\n    [\n      \"za\",\n      \"27\"\n    ],\n    [\n      \"kr\",\n      \"82\"\n    ],\n    [\n      \"ss\",\n      \"211\"\n    ],\n    [\n      \"es\",\n      \"34\"\n    ],\n    [\n      \"lk\",\n      \"94\"\n    ],\n    [\n      \"bl\",\n      \"590\",\n      1\n    ],\n    [\n      \"sh\",\n      \"290\"\n    ],\n    [\n      \"kn\",\n      \"1\",\n      18,\n      [\"869\"]\n    ],\n    [\n      \"lc\",\n      \"1\",\n      19,\n      [\"758\"]\n    ],\n    [\n      \"mf\",\n      \"590\",\n      2\n    ],\n    [\n      \"pm\",\n      \"508\"\n    ],\n    [\n      \"vc\",\n      \"1\",\n      20,\n      [\"784\"]\n    ],\n    [\n      \"sd\",\n      \"249\"\n    ],\n    [\n      \"sr\",\n      \"597\"\n    ],\n    [\n      \"sj\",\n      \"47\",\n      1,\n      [\"79\"]\n    ],\n    [\n      \"se\",\n      \"46\"\n    ],\n    [\n      \"ch\",\n      \"41\"\n    ],\n    [\n      \"sy\",\n      \"963\"\n    ],\n    [\n      \"tw\",\n      \"886\"\n    ],\n    [\n      \"tj\",\n      \"992\"\n    ],\n    [\n      \"tz\",\n      \"255\"\n    ],\n    [\n      \"th\",\n      \"66\"\n    ],\n    [\n      \"tl\",\n      \"670\"\n    ],\n    [\n      \"tg\",\n      \"228\"\n    ],\n    [\n      \"tk\",\n      \"690\"\n    ],\n    [\n      \"to\",\n      \"676\"\n    ],\n    [\n      \"tt\",\n      \"1\",\n      22,\n      [\"868\"]\n    ],\n    [\n      \"tn\",\n      \"216\"\n    ],\n    [\n      \"tr\",\n      \"90\"\n    ],\n    [\n      \"tm\",\n      \"993\"\n    ],\n    [\n      \"tc\",\n      \"1\",\n      23,\n      [\"649\"]\n    ],\n    [\n      \"tv\",\n      \"688\"\n    ],\n    [\n      \"ug\",\n      \"256\"\n    ],\n    [\n      \"ua\",\n      \"380\"\n    ],\n    [\n      \"ae\",\n      \"971\"\n    ],\n    [\n      \"gb\",\n      \"44\",\n      0\n    ],\n    [\n      \"us\",\n      \"1\",\n      0\n    ],\n    [\n      \"uy\",\n      \"598\"\n    ],\n    [\n      \"vi\",\n      \"1\",\n      24,\n      [\"340\"]\n    ],\n    [\n      \"uz\",\n      \"998\"\n    ],\n    [\n      \"vu\",\n      \"678\"\n    ],\n    [\n      \"va\",\n      \"39\",\n      1,\n      [\"06698\"]\n    ],\n    [\n      \"ve\",\n      \"58\"\n    ],\n    [\n      \"vn\",\n      \"84\"\n    ],\n    [\n      \"wf\",\n      \"681\"\n    ],\n    [\n      \"eh\",\n      \"212\",\n      1,\n      [\"5288\", \"5289\"]\n    ],\n    [\n      \"ye\",\n      \"967\"\n    ],\n    [\n      \"zm\",\n      \"260\"\n    ],\n    [\n      \"zw\",\n      \"263\"\n    ],\n    [\n      \"ax\",\n      \"358\",\n      1,\n      [\"18\"]\n    ]\n  ];\n  var allCountries = [];\n  for (let i = 0; i < rawCountryData.length; i++) {\n    const c = rawCountryData[i];\n    allCountries[i] = {\n      name: \"\",\n      // this is now populated in the plugin\n      iso2: c[0],\n      dialCode: c[1],\n      priority: c[2] || 0,\n      areaCodes: c[3] || null,\n      nodeById: {}\n    };\n  }\n  var data_default = allCountries;\n\n  // src/js/i18n/en/countries.ts\n  var countries_default = {\n    af: \"Afghanistan\",\n    ax: \"\\xC5land Islands\",\n    al: \"Albania\",\n    dz: \"Algeria\",\n    as: \"American Samoa\",\n    ad: \"Andorra\",\n    ao: \"Angola\",\n    ai: \"Anguilla\",\n    aq: \"Antarctica\",\n    ag: \"Antigua & Barbuda\",\n    ar: \"Argentina\",\n    am: \"Armenia\",\n    aw: \"Aruba\",\n    au: \"Australia\",\n    at: \"Austria\",\n    az: \"Azerbaijan\",\n    bs: \"Bahamas\",\n    bh: \"Bahrain\",\n    bd: \"Bangladesh\",\n    bb: \"Barbados\",\n    by: \"Belarus\",\n    be: \"Belgium\",\n    bz: \"Belize\",\n    bj: \"Benin\",\n    bm: \"Bermuda\",\n    bt: \"Bhutan\",\n    bo: \"Bolivia\",\n    ba: \"Bosnia & Herzegovina\",\n    bw: \"Botswana\",\n    bv: \"Bouvet Island\",\n    br: \"Brazil\",\n    io: \"British Indian Ocean Territory\",\n    vg: \"British Virgin Islands\",\n    bn: \"Brunei\",\n    bg: \"Bulgaria\",\n    bf: \"Burkina Faso\",\n    bi: \"Burundi\",\n    kh: \"Cambodia\",\n    cm: \"Cameroon\",\n    ca: \"Canada\",\n    cv: \"Cape Verde\",\n    bq: \"Caribbean Netherlands\",\n    ky: \"Cayman Islands\",\n    cf: \"Central African Republic\",\n    td: \"Chad\",\n    cl: \"Chile\",\n    cn: \"China\",\n    cx: \"Christmas Island\",\n    cc: \"Cocos (Keeling) Islands\",\n    co: \"Colombia\",\n    km: \"Comoros\",\n    cg: \"Congo - Brazzaville\",\n    cd: \"Congo - Kinshasa\",\n    ck: \"Cook Islands\",\n    cr: \"Costa Rica\",\n    ci: \"C\\xF4te d\\u2019Ivoire\",\n    hr: \"Croatia\",\n    cu: \"Cuba\",\n    cw: \"Cura\\xE7ao\",\n    cy: \"Cyprus\",\n    cz: \"Czechia\",\n    dk: \"Denmark\",\n    dj: \"Djibouti\",\n    dm: \"Dominica\",\n    do: \"Dominican Republic\",\n    ec: \"Ecuador\",\n    eg: \"Egypt\",\n    sv: \"El Salvador\",\n    gq: \"Equatorial Guinea\",\n    er: \"Eritrea\",\n    ee: \"Estonia\",\n    sz: \"Eswatini\",\n    et: \"Ethiopia\",\n    fk: \"Falkland Islands\",\n    fo: \"Faroe Islands\",\n    fj: \"Fiji\",\n    fi: \"Finland\",\n    fr: \"France\",\n    gf: \"French Guiana\",\n    pf: \"French Polynesia\",\n    tf: \"French Southern Territories\",\n    ga: \"Gabon\",\n    gm: \"Gambia\",\n    ge: \"Georgia\",\n    de: \"Germany\",\n    gh: \"Ghana\",\n    gi: \"Gibraltar\",\n    gr: \"Greece\",\n    gl: \"Greenland\",\n    gd: \"Grenada\",\n    gp: \"Guadeloupe\",\n    gu: \"Guam\",\n    gt: \"Guatemala\",\n    gg: \"Guernsey\",\n    gn: \"Guinea\",\n    gw: \"Guinea-Bissau\",\n    gy: \"Guyana\",\n    ht: \"Haiti\",\n    hm: \"Heard & McDonald Islands\",\n    hn: \"Honduras\",\n    hk: \"Hong Kong SAR China\",\n    hu: \"Hungary\",\n    is: \"Iceland\",\n    in: \"India\",\n    id: \"Indonesia\",\n    ir: \"Iran\",\n    iq: \"Iraq\",\n    ie: \"Ireland\",\n    im: \"Isle of Man\",\n    il: \"Israel\",\n    it: \"Italy\",\n    jm: \"Jamaica\",\n    jp: \"Japan\",\n    je: \"Jersey\",\n    jo: \"Jordan\",\n    kz: \"Kazakhstan\",\n    ke: \"Kenya\",\n    ki: \"Kiribati\",\n    kw: \"Kuwait\",\n    kg: \"Kyrgyzstan\",\n    la: \"Laos\",\n    lv: \"Latvia\",\n    lb: \"Lebanon\",\n    ls: \"Lesotho\",\n    lr: \"Liberia\",\n    ly: \"Libya\",\n    li: \"Liechtenstein\",\n    lt: \"Lithuania\",\n    lu: \"Luxembourg\",\n    mo: \"Macao SAR China\",\n    mg: \"Madagascar\",\n    mw: \"Malawi\",\n    my: \"Malaysia\",\n    mv: \"Maldives\",\n    ml: \"Mali\",\n    mt: \"Malta\",\n    mh: \"Marshall Islands\",\n    mq: \"Martinique\",\n    mr: \"Mauritania\",\n    mu: \"Mauritius\",\n    yt: \"Mayotte\",\n    mx: \"Mexico\",\n    fm: \"Micronesia\",\n    md: \"Moldova\",\n    mc: \"Monaco\",\n    mn: \"Mongolia\",\n    me: \"Montenegro\",\n    ms: \"Montserrat\",\n    ma: \"Morocco\",\n    mz: \"Mozambique\",\n    mm: \"Myanmar (Burma)\",\n    na: \"Namibia\",\n    nr: \"Nauru\",\n    np: \"Nepal\",\n    nl: \"Netherlands\",\n    nc: \"New Caledonia\",\n    nz: \"New Zealand\",\n    ni: \"Nicaragua\",\n    ne: \"Niger\",\n    ng: \"Nigeria\",\n    nu: \"Niue\",\n    nf: \"Norfolk Island\",\n    kp: \"North Korea\",\n    mk: \"North Macedonia\",\n    mp: \"Northern Mariana Islands\",\n    no: \"Norway\",\n    om: \"Oman\",\n    pk: \"Pakistan\",\n    pw: \"Palau\",\n    ps: \"Palestinian Territories\",\n    pa: \"Panama\",\n    pg: \"Papua New Guinea\",\n    py: \"Paraguay\",\n    pe: \"Peru\",\n    ph: \"Philippines\",\n    pn: \"Pitcairn Islands\",\n    pl: \"Poland\",\n    pt: \"Portugal\",\n    pr: \"Puerto Rico\",\n    qa: \"Qatar\",\n    re: \"R\\xE9union\",\n    ro: \"Romania\",\n    ru: \"Russia\",\n    rw: \"Rwanda\",\n    ws: \"Samoa\",\n    sm: \"San Marino\",\n    st: \"S\\xE3o Tom\\xE9 & Pr\\xEDncipe\",\n    sa: \"Saudi Arabia\",\n    sn: \"Senegal\",\n    rs: \"Serbia\",\n    sc: \"Seychelles\",\n    sl: \"Sierra Leone\",\n    sg: \"Singapore\",\n    sx: \"Sint Maarten\",\n    sk: \"Slovakia\",\n    si: \"Slovenia\",\n    sb: \"Solomon Islands\",\n    so: \"Somalia\",\n    za: \"South Africa\",\n    gs: \"South Georgia & South Sandwich Islands\",\n    kr: \"South Korea\",\n    ss: \"South Sudan\",\n    es: \"Spain\",\n    lk: \"Sri Lanka\",\n    bl: \"St. Barth\\xE9lemy\",\n    sh: \"St. Helena\",\n    kn: \"St. Kitts & Nevis\",\n    lc: \"St. Lucia\",\n    mf: \"St. Martin\",\n    pm: \"St. Pierre & Miquelon\",\n    vc: \"St. Vincent & Grenadines\",\n    sd: \"Sudan\",\n    sr: \"Suriname\",\n    sj: \"Svalbard & Jan Mayen\",\n    se: \"Sweden\",\n    ch: \"Switzerland\",\n    sy: \"Syria\",\n    tw: \"Taiwan\",\n    tj: \"Tajikistan\",\n    tz: \"Tanzania\",\n    th: \"Thailand\",\n    tl: \"Timor-Leste\",\n    tg: \"Togo\",\n    tk: \"Tokelau\",\n    to: \"Tonga\",\n    tt: \"Trinidad & Tobago\",\n    tn: \"Tunisia\",\n    tr: \"Turkey\",\n    tm: \"Turkmenistan\",\n    tc: \"Turks & Caicos Islands\",\n    tv: \"Tuvalu\",\n    um: \"U.S. Outlying Islands\",\n    vi: \"U.S. Virgin Islands\",\n    ug: \"Uganda\",\n    ua: \"Ukraine\",\n    ae: \"United Arab Emirates\",\n    gb: \"United Kingdom\",\n    us: \"United States\",\n    uy: \"Uruguay\",\n    uz: \"Uzbekistan\",\n    vu: \"Vanuatu\",\n    va: \"Vatican City\",\n    ve: \"Venezuela\",\n    vn: \"Vietnam\",\n    wf: \"Wallis & Futuna\",\n    eh: \"Western Sahara\",\n    ye: \"Yemen\",\n    zm: \"Zambia\",\n    zw: \"Zimbabwe\"\n  };\n\n  // src/js/i18n/en/interface.ts\n  var interface_default = {\n    selectedCountryAriaLabel: \"Selected country\",\n    noCountrySelected: \"No country selected\",\n    countryListAriaLabel: \"List of countries\",\n    searchPlaceholder: \"Search\",\n    zeroSearchResults: \"No results found\",\n    oneSearchResult: \"1 result found\",\n    multipleSearchResults: \"${count} results found\",\n    // additional countries (not supported by country-list library)\n    ac: \"Ascension Island\",\n    xk: \"Kosovo\"\n  };\n\n  // src/js/i18n/en/index.ts\n  var en_default = { ...countries_default, ...interface_default };\n\n  // src/js/intl-tel-input.ts\n  var id = 0;\n  var defaults = {\n    //* Whether or not to allow the dropdown.\n    allowDropdown: true,\n    //* Add a placeholder in the input with an example number for the selected country.\n    autoPlaceholder: \"polite\",\n    //* Modify the parentClass.\n    containerClass: \"\",\n    //* The order of the countries in the dropdown. Defaults to alphabetical.\n    countryOrder: null,\n    //* Modify the auto placeholder.\n    customPlaceholder: null,\n    //* Append menu to specified element.\n    dropdownContainer: null,\n    //* Don't display these countries.\n    excludeCountries: [],\n    //* Fix the dropdown width to the input width (rather than being as wide as the longest country name).\n    fixDropdownWidth: true,\n    //* Format the number as the user types\n    formatAsYouType: true,\n    //* Format the input value during initialisation and on setNumber.\n    formatOnDisplay: true,\n    //* geoIp lookup function.\n    geoIpLookup: null,\n    //* Inject a hidden input with the name returned from this function, and on submit, populate it with the result of getNumber.\n    hiddenInput: null,\n    //* Internationalise the plugin text e.g. search input placeholder, country names.\n    i18n: {},\n    //* Initial country.\n    initialCountry: \"\",\n    //* National vs international formatting for numbers e.g. placeholders and displaying existing numbers.\n    nationalMode: true,\n    //* Display only these countries.\n    onlyCountries: [],\n    //* Number type to use for placeholders.\n    placeholderNumberType: \"MOBILE\",\n    //* Show flags - for both the selected country, and in the country dropdown\n    showFlags: true,\n    //* Display the international dial code next to the selected flag.\n    separateDialCode: false,\n    //* Only allow certain chars e.g. a plus followed by numeric digits, and cap at max valid length.\n    strictMode: false,\n    //* Use full screen popup instead of dropdown for country list.\n    useFullscreenPopup: typeof navigator !== \"undefined\" && typeof window !== \"undefined\" ? (\n      //* We cannot just test screen size as some smartphones/website meta tags will report desktop resolutions.\n      //* Note: to target Android Mobiles (and not Tablets), we must find 'Android' and 'Mobile'\n      /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n        navigator.userAgent\n      ) || window.innerWidth <= 500\n    ) : false,\n    //* Specify the path to the libphonenumber script to enable validation/formatting.\n    utilsScript: \"\"\n  };\n  var regionlessNanpNumbers = [\n    \"800\",\n    \"822\",\n    \"833\",\n    \"844\",\n    \"855\",\n    \"866\",\n    \"877\",\n    \"880\",\n    \"881\",\n    \"882\",\n    \"883\",\n    \"884\",\n    \"885\",\n    \"886\",\n    \"887\",\n    \"888\",\n    \"889\"\n  ];\n  var getNumeric = (s) => s.replace(/\\D/g, \"\");\n  var normaliseString = (s = \"\") => s.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase();\n  var isRegionlessNanp = (number) => {\n    const numeric = getNumeric(number);\n    if (numeric.charAt(0) === \"1\") {\n      const areaCode = numeric.substr(1, 3);\n      return regionlessNanpNumbers.indexOf(areaCode) !== -1;\n    }\n    return false;\n  };\n  var translateCursorPosition = (relevantChars, formattedValue, prevCaretPos, isDeleteForwards) => {\n    if (prevCaretPos === 0 && !isDeleteForwards) {\n      return 0;\n    }\n    let count = 0;\n    for (let i = 0; i < formattedValue.length; i++) {\n      if (/[+0-9]/.test(formattedValue[i])) {\n        count++;\n      }\n      if (count === relevantChars && !isDeleteForwards) {\n        return i + 1;\n      }\n      if (isDeleteForwards && count === relevantChars + 1) {\n        return i;\n      }\n    }\n    return formattedValue.length;\n  };\n  var createEl = (name, attrs, container) => {\n    const el = document.createElement(name);\n    if (attrs) {\n      Object.entries(attrs).forEach(([key, value]) => el.setAttribute(key, value));\n    }\n    if (container) {\n      container.appendChild(el);\n    }\n    return el;\n  };\n  var forEachInstance = (method) => {\n    const { instances } = intlTelInput;\n    Object.values(instances).forEach((instance) => instance[method]());\n  };\n  var Iti = class {\n    //* Can't be private as it's called from intlTelInput convenience wrapper.\n    id;\n    //* NOT Private\n    promise;\n    //* Private\n    telInput;\n    highlightedItem;\n    options;\n    hadInitialPlaceholder;\n    isRTL;\n    selectedCountryData;\n    countries;\n    dialCodeMaxLen;\n    dialCodeToIso2Map;\n    dialCodes;\n    countryContainer;\n    selectedCountry;\n    selectedCountryInner;\n    selectedCountryA11yText;\n    selectedDialCode;\n    dropdownArrow;\n    dropdownContent;\n    searchInput;\n    searchResultsA11yText;\n    countryList;\n    dropdown;\n    hiddenInput;\n    hiddenInputCountry;\n    maxCoreNumberLength;\n    defaultCountry;\n    _handleHiddenInputSubmit;\n    _handleLabelClick;\n    _handleClickSelectedCountry;\n    _handleCountryContainerKeydown;\n    _handleInputEvent;\n    _handleKeydownEvent;\n    _handleWindowScroll;\n    _handleMouseoverCountryList;\n    _handleClickCountryList;\n    _handleClickOffToClose;\n    _handleKeydownOnDropdown;\n    _handleSearchChange;\n    resolveAutoCountryPromise;\n    rejectAutoCountryPromise;\n    resolveUtilsScriptPromise;\n    rejectUtilsScriptPromise;\n    constructor(input, customOptions = {}) {\n      this.id = id++;\n      this.telInput = input;\n      this.highlightedItem = null;\n      this.options = Object.assign({}, defaults, customOptions);\n      this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n    }\n    //* Can't be private as it's called from intlTelInput convenience wrapper.\n    _init() {\n      if (this.options.useFullscreenPopup) {\n        this.options.fixDropdownWidth = false;\n      }\n      if (this.options.separateDialCode) {\n        this.options.allowDropdown = true;\n        this.options.nationalMode = false;\n      }\n      if (!this.options.showFlags && !this.options.separateDialCode) {\n        this.options.nationalMode = false;\n      }\n      if (this.options.useFullscreenPopup && !this.options.dropdownContainer) {\n        this.options.dropdownContainer = document.body;\n      }\n      this.isRTL = !!this.telInput.closest(\"[dir=rtl]\");\n      this.options.i18n = { ...en_default, ...this.options.i18n };\n      const autoCountryPromise = new Promise((resolve, reject) => {\n        this.resolveAutoCountryPromise = resolve;\n        this.rejectAutoCountryPromise = reject;\n      });\n      const utilsScriptPromise = new Promise((resolve, reject) => {\n        this.resolveUtilsScriptPromise = resolve;\n        this.rejectUtilsScriptPromise = reject;\n      });\n      this.promise = Promise.all([autoCountryPromise, utilsScriptPromise]);\n      this.selectedCountryData = {};\n      this._processCountryData();\n      this._generateMarkup();\n      this._setInitialState();\n      this._initListeners();\n      this._initRequests();\n    }\n    //********************\n    //*  PRIVATE METHODS\n    //********************\n    //* Prepare all of the country data, including onlyCountries, excludeCountries, countryOrder options.\n    _processCountryData() {\n      this._processAllCountries();\n      this._processDialCodes();\n      this._translateCountryNames();\n      if (this.options.countryOrder) {\n        this.options.countryOrder = this.options.countryOrder.map((country) => country.toLowerCase());\n      }\n      this._sortCountries();\n    }\n    _sortCountries() {\n      this.countries.sort((a, b) => {\n        const { countryOrder } = this.options;\n        if (countryOrder) {\n          const aIndex = countryOrder.indexOf(a.iso2);\n          const bIndex = countryOrder.indexOf(b.iso2);\n          const aIndexExists = aIndex > -1;\n          const bIndexExists = bIndex > -1;\n          if (aIndexExists || bIndexExists) {\n            if (aIndexExists && bIndexExists) {\n              return aIndex - bIndex;\n            }\n            return aIndexExists ? -1 : 1;\n          }\n        }\n        if (a.name < b.name) {\n          return -1;\n        }\n        if (a.name > b.name) {\n          return 1;\n        }\n        return 0;\n      });\n    }\n    //* Add a dial code to this.dialCodeToIso2Map.\n    _addToDialCodeMap(iso2, dialCode, priority) {\n      if (dialCode.length > this.dialCodeMaxLen) {\n        this.dialCodeMaxLen = dialCode.length;\n      }\n      if (!this.dialCodeToIso2Map.hasOwnProperty(dialCode)) {\n        this.dialCodeToIso2Map[dialCode] = [];\n      }\n      for (let i = 0; i < this.dialCodeToIso2Map[dialCode].length; i++) {\n        if (this.dialCodeToIso2Map[dialCode][i] === iso2) {\n          return;\n        }\n      }\n      const index = priority !== void 0 ? priority : this.dialCodeToIso2Map[dialCode].length;\n      this.dialCodeToIso2Map[dialCode][index] = iso2;\n    }\n    //* Process onlyCountries or excludeCountries array if present.\n    _processAllCountries() {\n      const { onlyCountries, excludeCountries } = this.options;\n      if (onlyCountries.length) {\n        const lowerCaseOnlyCountries = onlyCountries.map(\n          (country) => country.toLowerCase()\n        );\n        this.countries = data_default.filter(\n          (country) => lowerCaseOnlyCountries.indexOf(country.iso2) > -1\n        );\n      } else if (excludeCountries.length) {\n        const lowerCaseExcludeCountries = excludeCountries.map(\n          (country) => country.toLowerCase()\n        );\n        this.countries = data_default.filter(\n          (country) => lowerCaseExcludeCountries.indexOf(country.iso2) === -1\n        );\n      } else {\n        this.countries = data_default;\n      }\n    }\n    //* Translate Countries by object literal provided on config.\n    _translateCountryNames() {\n      for (let i = 0; i < this.countries.length; i++) {\n        const iso2 = this.countries[i].iso2.toLowerCase();\n        if (this.options.i18n.hasOwnProperty(iso2)) {\n          this.countries[i].name = this.options.i18n[iso2];\n        }\n      }\n    }\n    //* Generate this.dialCodes and this.dialCodeToIso2Map.\n    _processDialCodes() {\n      this.dialCodes = {};\n      this.dialCodeMaxLen = 0;\n      this.dialCodeToIso2Map = {};\n      for (let i = 0; i < this.countries.length; i++) {\n        const c = this.countries[i];\n        if (!this.dialCodes[c.dialCode]) {\n          this.dialCodes[c.dialCode] = true;\n        }\n        this._addToDialCodeMap(c.iso2, c.dialCode, c.priority);\n      }\n      for (let i = 0; i < this.countries.length; i++) {\n        const c = this.countries[i];\n        if (c.areaCodes) {\n          const rootIso2Code = this.dialCodeToIso2Map[c.dialCode][0];\n          for (let j = 0; j < c.areaCodes.length; j++) {\n            const areaCode = c.areaCodes[j];\n            for (let k = 1; k < areaCode.length; k++) {\n              const partialDialCode = c.dialCode + areaCode.substr(0, k);\n              this._addToDialCodeMap(rootIso2Code, partialDialCode);\n              this._addToDialCodeMap(c.iso2, partialDialCode);\n            }\n            this._addToDialCodeMap(c.iso2, c.dialCode + areaCode);\n          }\n        }\n      }\n    }\n    //* Generate all of the markup for the plugin: the selected country overlay, and the dropdown.\n    _generateMarkup() {\n      this.telInput.classList.add(\"iti__tel-input\");\n      if (!this.telInput.hasAttribute(\"autocomplete\") && !(this.telInput.form && this.telInput.form.hasAttribute(\"autocomplete\"))) {\n        this.telInput.setAttribute(\"autocomplete\", \"off\");\n      }\n      const {\n        allowDropdown,\n        separateDialCode,\n        showFlags,\n        containerClass,\n        hiddenInput,\n        dropdownContainer,\n        fixDropdownWidth,\n        useFullscreenPopup,\n        i18n\n      } = this.options;\n      let parentClass = \"iti\";\n      if (allowDropdown) {\n        parentClass += \" iti--allow-dropdown\";\n      }\n      if (showFlags) {\n        parentClass += \" iti--show-flags\";\n      }\n      if (containerClass) {\n        parentClass += ` ${containerClass}`;\n      }\n      if (!useFullscreenPopup) {\n        parentClass += \" iti--inline-dropdown\";\n      }\n      const wrapper = createEl(\"div\", { class: parentClass });\n      this.telInput.parentNode?.insertBefore(wrapper, this.telInput);\n      if (allowDropdown || showFlags) {\n        this.countryContainer = createEl(\n          \"div\",\n          { class: \"iti__country-container\" },\n          wrapper\n        );\n        this.selectedCountry = createEl(\n          \"button\",\n          {\n            type: \"button\",\n            class: \"iti__selected-country\",\n            ...allowDropdown && {\n              \"aria-expanded\": \"false\",\n              \"aria-label\": this.options.i18n.selectedCountryAriaLabel,\n              \"aria-haspopup\": \"true\",\n              \"aria-controls\": `iti-${this.id}__dropdown-content`,\n              \"role\": \"combobox\"\n            }\n          },\n          this.countryContainer\n        );\n        const selectedCountryPrimary = createEl(\"div\", { class: \"iti__selected-country-primary\" }, this.selectedCountry);\n        this.selectedCountryInner = createEl(\"div\", null, selectedCountryPrimary);\n        this.selectedCountryA11yText = createEl(\n          \"span\",\n          { class: \"iti__a11y-text\" },\n          this.selectedCountryInner\n        );\n        if (this.telInput.disabled) {\n          this.selectedCountry.setAttribute(\"aria-disabled\", \"true\");\n        } else {\n          this.selectedCountry.setAttribute(\"tabindex\", \"0\");\n        }\n        if (allowDropdown) {\n          this.dropdownArrow = createEl(\n            \"div\",\n            { class: \"iti__arrow\", \"aria-hidden\": \"true\" },\n            selectedCountryPrimary\n          );\n        }\n        if (separateDialCode) {\n          this.selectedDialCode = createEl(\n            \"div\",\n            { class: \"iti__selected-dial-code\" },\n            this.selectedCountry\n          );\n        }\n        if (allowDropdown) {\n          const extraClasses = fixDropdownWidth ? \"\" : \"iti--flexible-dropdown-width\";\n          this.dropdownContent = createEl(\"div\", {\n            id: `iti-${this.id}__dropdown-content`,\n            class: `iti__dropdown-content iti__hide ${extraClasses}`\n          });\n          this.searchInput = createEl(\n            \"input\",\n            {\n              type: \"text\",\n              class: \"iti__search-input\",\n              placeholder: i18n.searchPlaceholder,\n              role: \"combobox\",\n              \"aria-expanded\": \"true\",\n              \"aria-label\": i18n.searchPlaceholder,\n              \"aria-controls\": `iti-${this.id}__country-listbox`,\n              \"aria-autocomplete\": \"list\",\n              \"autocomplete\": \"off\"\n            },\n            this.dropdownContent\n          );\n          this.searchResultsA11yText = createEl(\n            \"span\",\n            { class: \"iti__a11y-text\" },\n            this.dropdownContent\n          );\n          this.countryList = createEl(\n            \"ul\",\n            {\n              class: \"iti__country-list\",\n              id: `iti-${this.id}__country-listbox`,\n              role: \"listbox\",\n              \"aria-label\": i18n.countryListAriaLabel\n            },\n            this.dropdownContent\n          );\n          this._appendListItems(this.countries, \"iti__standard\");\n          this._updateSearchResultsText();\n          if (dropdownContainer) {\n            let dropdownClasses = \"iti iti--container\";\n            if (useFullscreenPopup) {\n              dropdownClasses += \" iti--fullscreen-popup\";\n            } else {\n              dropdownClasses += \" iti--inline-dropdown\";\n            }\n            this.dropdown = createEl(\"div\", { class: dropdownClasses });\n            this.dropdown.appendChild(this.dropdownContent);\n          } else {\n            this.countryContainer.appendChild(this.dropdownContent);\n          }\n        }\n      }\n      wrapper.appendChild(this.telInput);\n      if (hiddenInput) {\n        const telInputName = this.telInput.getAttribute(\"name\") || \"\";\n        const names = hiddenInput(telInputName);\n        if (names.phone) {\n          this.hiddenInput = createEl(\"input\", {\n            type: \"hidden\",\n            name: names.phone\n          });\n          wrapper.appendChild(this.hiddenInput);\n        }\n        if (names.country) {\n          this.hiddenInputCountry = createEl(\"input\", {\n            type: \"hidden\",\n            name: names.country\n          });\n          wrapper.appendChild(this.hiddenInputCountry);\n        }\n      }\n    }\n    //* For each of the passed countries: add a country <li> to the countryList <ul> container.\n    _appendListItems(countries, className) {\n      for (let i = 0; i < countries.length; i++) {\n        const c = countries[i];\n        const listItem = createEl(\n          \"li\",\n          {\n            id: `iti-${this.id}__item-${c.iso2}`,\n            class: `iti__country ${className}`,\n            tabindex: \"-1\",\n            role: \"option\",\n            \"data-dial-code\": c.dialCode,\n            \"data-country-code\": c.iso2,\n            \"aria-selected\": \"false\"\n          },\n          this.countryList\n        );\n        c.nodeById[this.id] = listItem;\n        let content = \"\";\n        if (this.options.showFlags) {\n          content += `<div class='iti__flag-box'><div class='iti__flag iti__${c.iso2}'></div></div>`;\n        }\n        content += `<span class='iti__country-name'>${c.name}</span>`;\n        content += `<span class='iti__dial-code'>+${c.dialCode}</span>`;\n        listItem.insertAdjacentHTML(\"beforeend\", content);\n      }\n    }\n    //* Set the initial state of the input value and the selected country by:\n    //* 1. Extracting a dial code from the given number\n    //* 2. Using explicit initialCountry\n    _setInitialState(overrideAutoCountry = false) {\n      const attributeValue = this.telInput.getAttribute(\"value\");\n      const inputValue = this.telInput.value;\n      const useAttribute = attributeValue && attributeValue.charAt(0) === \"+\" && (!inputValue || inputValue.charAt(0) !== \"+\");\n      const val = useAttribute ? attributeValue : inputValue;\n      const dialCode = this._getDialCode(val);\n      const isRegionlessNanpNumber = isRegionlessNanp(val);\n      const { initialCountry } = this.options;\n      if (dialCode && !isRegionlessNanpNumber) {\n        this._updateCountryFromNumber(val);\n      } else if (initialCountry !== \"auto\" || overrideAutoCountry) {\n        const lowerInitialCountry = initialCountry ? initialCountry.toLowerCase() : \"\";\n        const isValidInitialCountry = lowerInitialCountry && this._getCountryData(lowerInitialCountry, true);\n        if (isValidInitialCountry) {\n          this._setCountry(lowerInitialCountry);\n        } else {\n          if (dialCode && isRegionlessNanpNumber) {\n            this._setCountry(\"us\");\n          } else {\n            this._setCountry();\n          }\n        }\n      }\n      if (val) {\n        this._updateValFromNumber(val);\n      }\n    }\n    //* Initialise the main event listeners: input keyup, and click selected country.\n    _initListeners() {\n      this._initTelInputListeners();\n      if (this.options.allowDropdown) {\n        this._initDropdownListeners();\n      }\n      if ((this.hiddenInput || this.hiddenInputCountry) && this.telInput.form) {\n        this._initHiddenInputListener();\n      }\n    }\n    //* Update hidden input on form submit.\n    _initHiddenInputListener() {\n      this._handleHiddenInputSubmit = () => {\n        if (this.hiddenInput) {\n          this.hiddenInput.value = this.getNumber();\n        }\n        if (this.hiddenInputCountry) {\n          this.hiddenInputCountry.value = this.getSelectedCountryData().iso2 || \"\";\n        }\n      };\n      this.telInput.form?.addEventListener(\n        \"submit\",\n        this._handleHiddenInputSubmit\n      );\n    }\n    //* initialise the dropdown listeners.\n    _initDropdownListeners() {\n      this._handleLabelClick = (e) => {\n        if (this.dropdownContent.classList.contains(\"iti__hide\")) {\n          this.telInput.focus();\n        } else {\n          e.preventDefault();\n        }\n      };\n      const label = this.telInput.closest(\"label\");\n      if (label) {\n        label.addEventListener(\"click\", this._handleLabelClick);\n      }\n      this._handleClickSelectedCountry = () => {\n        if (this.dropdownContent.classList.contains(\"iti__hide\") && !this.telInput.disabled && !this.telInput.readOnly) {\n          this._openDropdown();\n        }\n      };\n      this.selectedCountry.addEventListener(\"click\", this._handleClickSelectedCountry);\n      this._handleCountryContainerKeydown = (e) => {\n        const isDropdownHidden = this.dropdownContent.classList.contains(\"iti__hide\");\n        if (isDropdownHidden && [\"ArrowUp\", \"ArrowDown\", \" \", \"Enter\"].includes(e.key)) {\n          e.preventDefault();\n          e.stopPropagation();\n          this._openDropdown();\n        }\n        if (e.key === \"Tab\") {\n          this._closeDropdown();\n        }\n      };\n      this.countryContainer.addEventListener(\n        \"keydown\",\n        this._handleCountryContainerKeydown\n      );\n    }\n    //* Init many requests: utils script / geo ip lookup.\n    _initRequests() {\n      if (this.options.utilsScript && !intlTelInput.utils) {\n        if (intlTelInput.documentReady()) {\n          intlTelInput.loadUtils(this.options.utilsScript);\n        } else {\n          window.addEventListener(\"load\", () => {\n            intlTelInput.loadUtils(this.options.utilsScript);\n          });\n        }\n      } else {\n        this.resolveUtilsScriptPromise();\n      }\n      if (this.options.initialCountry === \"auto\" && !this.selectedCountryData.iso2) {\n        this._loadAutoCountry();\n      } else {\n        this.resolveAutoCountryPromise();\n      }\n    }\n    //* Perform the geo ip lookup.\n    _loadAutoCountry() {\n      if (intlTelInput.autoCountry) {\n        this.handleAutoCountry();\n      } else if (!intlTelInput.startedLoadingAutoCountry) {\n        intlTelInput.startedLoadingAutoCountry = true;\n        if (typeof this.options.geoIpLookup === \"function\") {\n          this.options.geoIpLookup(\n            (iso2 = \"\") => {\n              const iso2Lower = iso2.toLowerCase();\n              const isValidIso2 = iso2Lower && this._getCountryData(iso2Lower, true);\n              if (isValidIso2) {\n                intlTelInput.autoCountry = iso2Lower;\n                setTimeout(() => forEachInstance(\"handleAutoCountry\"));\n              } else {\n                this._setInitialState(true);\n                forEachInstance(\"rejectAutoCountryPromise\");\n              }\n            },\n            () => {\n              this._setInitialState(true);\n              forEachInstance(\"rejectAutoCountryPromise\");\n            }\n          );\n        }\n      }\n    }\n    //* Initialize the tel input listeners.\n    _initTelInputListeners() {\n      const { strictMode, formatAsYouType, separateDialCode } = this.options;\n      let userOverrideFormatting = false;\n      this._handleInputEvent = (e) => {\n        if (this._updateCountryFromNumber(this.telInput.value)) {\n          this._triggerCountryChange();\n        }\n        const isFormattingChar = e && e.data && /[^+0-9]/.test(e.data);\n        const isPaste = e && e.inputType === \"insertFromPaste\" && this.telInput.value;\n        if (isFormattingChar || isPaste && !strictMode) {\n          userOverrideFormatting = true;\n        } else if (!/[^+0-9]/.test(this.telInput.value)) {\n          userOverrideFormatting = false;\n        }\n        if (formatAsYouType && !userOverrideFormatting) {\n          const currentCaretPos = this.telInput.selectionStart || 0;\n          const valueBeforeCaret = this.telInput.value.substring(0, currentCaretPos);\n          const relevantCharsBeforeCaret = valueBeforeCaret.replace(/[^+0-9]/g, \"\").length;\n          const isDeleteForwards = e && e.inputType === \"deleteContentForward\";\n          const formattedValue = this._formatNumberAsYouType();\n          const newCaretPos = translateCursorPosition(relevantCharsBeforeCaret, formattedValue, currentCaretPos, isDeleteForwards);\n          this.telInput.value = formattedValue;\n          this.telInput.setSelectionRange(newCaretPos, newCaretPos);\n        }\n      };\n      this.telInput.addEventListener(\"input\", this._handleInputEvent);\n      if (strictMode || separateDialCode) {\n        this._handleKeydownEvent = (e) => {\n          if (e.key && e.key.length === 1 && !e.altKey && !e.ctrlKey && !e.metaKey) {\n            if (separateDialCode && e.key === \"+\") {\n              e.preventDefault();\n              this._openDropdown();\n              this.searchInput.value = \"+\";\n              this._filterCountries(\"\", true);\n              return;\n            }\n            if (strictMode) {\n              const isInitialPlus = this.telInput.selectionStart === 0 && e.key === \"+\";\n              const isNumeric = /^[0-9]$/.test(e.key);\n              const isAllowedChar = isInitialPlus || isNumeric;\n              const fullNumber = this._getFullNumber();\n              const coreNumber = intlTelInput.utils.getCoreNumber(fullNumber, this.selectedCountryData.iso2);\n              const hasReachedMaxLength = this.maxCoreNumberLength && coreNumber.length >= this.maxCoreNumberLength;\n              if (!isAllowedChar || hasReachedMaxLength) {\n                e.preventDefault();\n              }\n            }\n          }\n        };\n        this.telInput.addEventListener(\"keydown\", this._handleKeydownEvent);\n      }\n    }\n    //* Adhere to the input's maxlength attr.\n    _cap(number) {\n      const max = parseInt(this.telInput.getAttribute(\"maxlength\") || \"\", 10);\n      return max && number.length > max ? number.substr(0, max) : number;\n    }\n    //* Trigger a custom event on the input.\n    _trigger(name) {\n      const e = new Event(name, {\n        bubbles: true,\n        cancelable: true\n      });\n      this.telInput.dispatchEvent(e);\n    }\n    //* Open the dropdown.\n    _openDropdown() {\n      const { fixDropdownWidth } = this.options;\n      if (fixDropdownWidth) {\n        this.dropdownContent.style.width = `${this.telInput.offsetWidth}px`;\n      }\n      this.dropdownContent.classList.remove(\"iti__hide\");\n      this.selectedCountry.setAttribute(\"aria-expanded\", \"true\");\n      this._setDropdownPosition();\n      const firstCountryItem = this.countryList.firstElementChild;\n      if (firstCountryItem) {\n        this._highlightListItem(firstCountryItem, false);\n        this.countryList.scrollTop = 0;\n      }\n      this.searchInput.focus();\n      this._bindDropdownListeners();\n      this.dropdownArrow.classList.add(\"iti__arrow--up\");\n      this._trigger(\"open:countrydropdown\");\n    }\n    //* Decide if should position dropdown above or below input (depends on position within viewport, and scroll).\n    _setDropdownPosition() {\n      if (this.options.dropdownContainer) {\n        this.options.dropdownContainer.appendChild(this.dropdown);\n      }\n      if (!this.options.useFullscreenPopup) {\n        const inputPosRelativeToVP = this.telInput.getBoundingClientRect();\n        const inputHeight = this.telInput.offsetHeight;\n        if (this.options.dropdownContainer) {\n          this.dropdown.style.top = `${inputPosRelativeToVP.top + inputHeight}px`;\n          this.dropdown.style.left = `${inputPosRelativeToVP.left}px`;\n          this._handleWindowScroll = () => this._closeDropdown();\n          window.addEventListener(\"scroll\", this._handleWindowScroll);\n        }\n      }\n    }\n    //* We only bind dropdown listeners when the dropdown is open.\n    _bindDropdownListeners() {\n      this._handleMouseoverCountryList = (e) => {\n        const listItem = e.target?.closest(\".iti__country\");\n        if (listItem) {\n          this._highlightListItem(listItem, false);\n        }\n      };\n      this.countryList.addEventListener(\n        \"mouseover\",\n        this._handleMouseoverCountryList\n      );\n      this._handleClickCountryList = (e) => {\n        const listItem = e.target?.closest(\".iti__country\");\n        if (listItem) {\n          this._selectListItem(listItem);\n        }\n      };\n      this.countryList.addEventListener(\"click\", this._handleClickCountryList);\n      let isOpening = true;\n      this._handleClickOffToClose = () => {\n        if (!isOpening) {\n          this._closeDropdown();\n        }\n        isOpening = false;\n      };\n      document.documentElement.addEventListener(\n        \"click\",\n        this._handleClickOffToClose\n      );\n      this._handleKeydownOnDropdown = (e) => {\n        if ([\"ArrowUp\", \"ArrowDown\", \"Enter\", \"Escape\"].includes(e.key)) {\n          e.preventDefault();\n          e.stopPropagation();\n          if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n            this._handleUpDownKey(e.key);\n          } else if (e.key === \"Enter\") {\n            this._handleEnterKey();\n          } else if (e.key === \"Escape\") {\n            this._closeDropdown();\n          }\n        }\n      };\n      document.addEventListener(\"keydown\", this._handleKeydownOnDropdown);\n      const doFilter = () => {\n        const inputQuery = this.searchInput.value.trim();\n        if (inputQuery) {\n          this._filterCountries(inputQuery);\n        } else {\n          this._filterCountries(\"\", true);\n        }\n      };\n      let keyupTimer = null;\n      this._handleSearchChange = () => {\n        if (keyupTimer) {\n          clearTimeout(keyupTimer);\n        }\n        keyupTimer = setTimeout(() => {\n          doFilter();\n          keyupTimer = null;\n        }, 100);\n      };\n      this.searchInput.addEventListener(\"input\", this._handleSearchChange);\n      this.searchInput.addEventListener(\"click\", (e) => e.stopPropagation());\n    }\n    _filterCountries(query, isReset = false) {\n      let noCountriesAddedYet = true;\n      this.countryList.innerHTML = \"\";\n      const normalisedQuery = normaliseString(query);\n      for (let i = 0; i < this.countries.length; i++) {\n        const c = this.countries[i];\n        const normalisedCountryName = normaliseString(c.name);\n        const fullDialCode = `+${c.dialCode}`;\n        if (isReset || normalisedCountryName.includes(normalisedQuery) || fullDialCode.includes(normalisedQuery) || c.iso2.includes(normalisedQuery)) {\n          const listItem = c.nodeById[this.id];\n          if (listItem) {\n            this.countryList.appendChild(listItem);\n          }\n          if (noCountriesAddedYet) {\n            this._highlightListItem(listItem, false);\n            noCountriesAddedYet = false;\n          }\n        }\n      }\n      if (noCountriesAddedYet) {\n        this._highlightListItem(null, false);\n      }\n      this.countryList.scrollTop = 0;\n      this._updateSearchResultsText();\n    }\n    //* Update search results text (for a11y).\n    _updateSearchResultsText() {\n      const { i18n } = this.options;\n      const count = this.countryList.childElementCount;\n      let searchText;\n      if (count === 0) {\n        searchText = i18n.zeroSearchResults;\n      } else if (count === 1) {\n        searchText = i18n.oneSearchResult;\n      } else {\n        searchText = i18n.multipleSearchResults.replace(\"${count}\", count.toString());\n      }\n      this.searchResultsA11yText.textContent = searchText;\n    }\n    //* Highlight the next/prev item in the list (and ensure it is visible).\n    _handleUpDownKey(key) {\n      let next = key === \"ArrowUp\" ? this.highlightedItem?.previousElementSibling : this.highlightedItem?.nextElementSibling;\n      if (!next && this.countryList.childElementCount > 1) {\n        next = key === \"ArrowUp\" ? this.countryList.lastElementChild : this.countryList.firstElementChild;\n      }\n      if (next) {\n        this._scrollTo(next);\n        this._highlightListItem(next, false);\n      }\n    }\n    //* Select the currently highlighted item.\n    _handleEnterKey() {\n      if (this.highlightedItem) {\n        this._selectListItem(this.highlightedItem);\n      }\n    }\n    //* Update the input's value to the given val (format first if possible)\n    //* NOTE: this is called from _setInitialState, handleUtils and setNumber.\n    _updateValFromNumber(fullNumber) {\n      let number = fullNumber;\n      if (this.options.formatOnDisplay && intlTelInput.utils && this.selectedCountryData) {\n        const useNational = this.options.nationalMode || number.charAt(0) !== \"+\" && !this.options.separateDialCode;\n        const { NATIONAL, INTERNATIONAL } = intlTelInput.utils.numberFormat;\n        const format = useNational ? NATIONAL : INTERNATIONAL;\n        number = intlTelInput.utils.formatNumber(\n          number,\n          this.selectedCountryData.iso2,\n          format\n        );\n      }\n      number = this._beforeSetNumber(number);\n      this.telInput.value = number;\n    }\n    //* Check if need to select a new country based on the given number\n    //* Note: called from _setInitialState, keyup handler, setNumber.\n    _updateCountryFromNumber(fullNumber) {\n      const plusIndex = fullNumber.indexOf(\"+\");\n      let number = plusIndex ? fullNumber.substring(plusIndex) : fullNumber;\n      const selectedDialCode = this.selectedCountryData.dialCode;\n      const isNanp = selectedDialCode === \"1\";\n      if (number && isNanp && number.charAt(0) !== \"+\") {\n        if (number.charAt(0) !== \"1\") {\n          number = `1${number}`;\n        }\n        number = `+${number}`;\n      }\n      if (this.options.separateDialCode && selectedDialCode && number.charAt(0) !== \"+\") {\n        number = `+${selectedDialCode}${number}`;\n      }\n      const dialCode = this._getDialCode(number, true);\n      const numeric = getNumeric(number);\n      let iso2 = null;\n      if (dialCode) {\n        const iso2Codes = this.dialCodeToIso2Map[getNumeric(dialCode)];\n        const alreadySelected = iso2Codes.indexOf(this.selectedCountryData.iso2) !== -1 && numeric.length <= dialCode.length - 1;\n        const isRegionlessNanpNumber = selectedDialCode === \"1\" && isRegionlessNanp(numeric);\n        if (!isRegionlessNanpNumber && !alreadySelected) {\n          for (let j = 0; j < iso2Codes.length; j++) {\n            if (iso2Codes[j]) {\n              iso2 = iso2Codes[j];\n              break;\n            }\n          }\n        }\n      } else if (number.charAt(0) === \"+\" && numeric.length) {\n        iso2 = \"\";\n      } else if ((!number || number === \"+\") && !this.selectedCountryData.iso2) {\n        iso2 = this.defaultCountry;\n      }\n      if (iso2 !== null) {\n        return this._setCountry(iso2);\n      }\n      return false;\n    }\n    //* Remove highlighting from other list items and highlight the given item.\n    _highlightListItem(listItem, shouldFocus) {\n      const prevItem = this.highlightedItem;\n      if (prevItem) {\n        prevItem.classList.remove(\"iti__highlight\");\n        prevItem.setAttribute(\"aria-selected\", \"false\");\n      }\n      this.highlightedItem = listItem;\n      if (this.highlightedItem) {\n        this.highlightedItem.classList.add(\"iti__highlight\");\n        this.highlightedItem.setAttribute(\"aria-selected\", \"true\");\n        const activeDescendant = this.highlightedItem.getAttribute(\"id\") || \"\";\n        this.selectedCountry.setAttribute(\"aria-activedescendant\", activeDescendant);\n        this.searchInput.setAttribute(\"aria-activedescendant\", activeDescendant);\n      }\n      if (shouldFocus) {\n        this.highlightedItem.focus();\n      }\n    }\n    //* Find the country data for the given iso2 code\n    //* the ignoreOnlyCountriesOption is only used during init() while parsing the onlyCountries array\n    _getCountryData(iso2, allowFail) {\n      for (let i = 0; i < this.countries.length; i++) {\n        if (this.countries[i].iso2 === iso2) {\n          return this.countries[i];\n        }\n      }\n      if (allowFail) {\n        return null;\n      }\n      throw new Error(`No country data for '${iso2}'`);\n    }\n    //* Update the selected country, dial code (if separateDialCode), placeholder, title, and active list item.\n    //* Note: called from _setInitialState, _updateCountryFromNumber, _selectListItem, setCountry.\n    _setCountry(iso2) {\n      const { separateDialCode, showFlags, i18n } = this.options;\n      const prevCountry = this.selectedCountryData.iso2 ? this.selectedCountryData : {};\n      this.selectedCountryData = iso2 ? this._getCountryData(iso2, false) || {} : {};\n      if (this.selectedCountryData.iso2) {\n        this.defaultCountry = this.selectedCountryData.iso2;\n      }\n      if (this.selectedCountryInner) {\n        let flagClass = \"\";\n        let a11yText = \"\";\n        if (iso2 && showFlags) {\n          flagClass = `iti__flag iti__${iso2}`;\n          a11yText = `${this.selectedCountryData.name} +${this.selectedCountryData.dialCode}`;\n        } else {\n          flagClass = \"iti__flag iti__globe\";\n          a11yText = i18n.noCountrySelected;\n        }\n        this.selectedCountryInner.className = flagClass;\n        this.selectedCountryA11yText.textContent = a11yText;\n      }\n      this._setSelectedCountryTitleAttribute(iso2, separateDialCode);\n      if (separateDialCode) {\n        const dialCode = this.selectedCountryData.dialCode ? `+${this.selectedCountryData.dialCode}` : \"\";\n        this.selectedDialCode.innerHTML = dialCode;\n        const selectedCountryWidth = this.selectedCountry.offsetWidth || this._getHiddenSelectedCountryWidth();\n        const inputPadding = selectedCountryWidth + 8;\n        if (this.isRTL) {\n          this.telInput.style.paddingRight = `${inputPadding}px`;\n        } else {\n          this.telInput.style.paddingLeft = `${inputPadding}px`;\n        }\n      }\n      this._updatePlaceholder();\n      this._updateMaxLength();\n      return prevCountry.iso2 !== iso2;\n    }\n    //* Update the maximum valid number length for the currently selected country.\n    _updateMaxLength() {\n      if (this.options.strictMode && intlTelInput.utils) {\n        if (this.selectedCountryData.iso2) {\n          const numberType = intlTelInput.utils.numberType[this.options.placeholderNumberType];\n          let exampleNumber = intlTelInput.utils.getExampleNumber(\n            this.selectedCountryData.iso2,\n            false,\n            numberType,\n            true\n          );\n          let validNumber = exampleNumber;\n          while (intlTelInput.utils.isPossibleNumber(exampleNumber, this.selectedCountryData.iso2)) {\n            validNumber = exampleNumber;\n            exampleNumber += \"0\";\n          }\n          const coreNumber = intlTelInput.utils.getCoreNumber(validNumber, this.selectedCountryData.iso2);\n          this.maxCoreNumberLength = coreNumber.length;\n        } else {\n          this.maxCoreNumberLength = null;\n        }\n      }\n    }\n    _setSelectedCountryTitleAttribute(iso2 = null, separateDialCode) {\n      if (!this.selectedCountry) {\n        return;\n      }\n      let title;\n      if (iso2 && !separateDialCode) {\n        title = `${this.selectedCountryData.name}: +${this.selectedCountryData.dialCode}`;\n      } else if (iso2) {\n        title = this.selectedCountryData.name;\n      } else {\n        title = \"Unknown\";\n      }\n      this.selectedCountry.setAttribute(\"title\", title);\n    }\n    //* When the input is in a hidden container during initialisation, we must inject some markup\n    //* into the end of the DOM to calculate the correct offsetWidth.\n    //* NOTE: this is only used when separateDialCode is enabled, so countryContainer and selectedCountry\n    //* will definitely exist.\n    _getHiddenSelectedCountryWidth() {\n      if (this.telInput.parentNode) {\n        const containerClone = this.telInput.parentNode.cloneNode(false);\n        containerClone.style.visibility = \"hidden\";\n        document.body.appendChild(containerClone);\n        const countryContainerClone = this.countryContainer.cloneNode();\n        containerClone.appendChild(countryContainerClone);\n        const selectedCountryClone = this.selectedCountry.cloneNode(true);\n        countryContainerClone.appendChild(selectedCountryClone);\n        const width = selectedCountryClone.offsetWidth;\n        document.body.removeChild(containerClone);\n        return width;\n      }\n      return 0;\n    }\n    //* Update the input placeholder to an example number from the currently selected country.\n    _updatePlaceholder() {\n      const {\n        autoPlaceholder,\n        placeholderNumberType,\n        nationalMode,\n        customPlaceholder\n      } = this.options;\n      const shouldSetPlaceholder = autoPlaceholder === \"aggressive\" || !this.hadInitialPlaceholder && autoPlaceholder === \"polite\";\n      if (intlTelInput.utils && shouldSetPlaceholder) {\n        const numberType = intlTelInput.utils.numberType[placeholderNumberType];\n        let placeholder = this.selectedCountryData.iso2 ? intlTelInput.utils.getExampleNumber(\n          this.selectedCountryData.iso2,\n          nationalMode,\n          numberType\n        ) : \"\";\n        placeholder = this._beforeSetNumber(placeholder);\n        if (typeof customPlaceholder === \"function\") {\n          placeholder = customPlaceholder(placeholder, this.selectedCountryData);\n        }\n        this.telInput.setAttribute(\"placeholder\", placeholder);\n      }\n    }\n    //* Called when the user selects a list item from the dropdown.\n    _selectListItem(listItem) {\n      const countryChanged = this._setCountry(\n        listItem.getAttribute(\"data-country-code\")\n      );\n      this._closeDropdown();\n      this._updateDialCode(listItem.getAttribute(\"data-dial-code\"));\n      this.telInput.focus();\n      if (countryChanged) {\n        this._triggerCountryChange();\n      }\n    }\n    //* Close the dropdown and unbind any listeners.\n    _closeDropdown() {\n      this.dropdownContent.classList.add(\"iti__hide\");\n      this.selectedCountry.setAttribute(\"aria-expanded\", \"false\");\n      this.selectedCountry.removeAttribute(\"aria-activedescendant\");\n      if (this.highlightedItem) {\n        this.highlightedItem.setAttribute(\"aria-selected\", \"false\");\n      }\n      this.searchInput.removeAttribute(\"aria-activedescendant\");\n      this.dropdownArrow.classList.remove(\"iti__arrow--up\");\n      document.removeEventListener(\"keydown\", this._handleKeydownOnDropdown);\n      this.searchInput.removeEventListener(\"input\", this._handleSearchChange);\n      document.documentElement.removeEventListener(\n        \"click\",\n        this._handleClickOffToClose\n      );\n      this.countryList.removeEventListener(\n        \"mouseover\",\n        this._handleMouseoverCountryList\n      );\n      this.countryList.removeEventListener(\"click\", this._handleClickCountryList);\n      if (this.options.dropdownContainer) {\n        if (!this.options.useFullscreenPopup) {\n          window.removeEventListener(\"scroll\", this._handleWindowScroll);\n        }\n        if (this.dropdown.parentNode) {\n          this.dropdown.parentNode.removeChild(this.dropdown);\n        }\n      }\n      this._trigger(\"close:countrydropdown\");\n    }\n    //* Check if an element is visible within it's container, else scroll until it is.\n    _scrollTo(element) {\n      const container = this.countryList;\n      const scrollTop = document.documentElement.scrollTop;\n      const containerHeight = container.offsetHeight;\n      const containerTop = container.getBoundingClientRect().top + scrollTop;\n      const containerBottom = containerTop + containerHeight;\n      const elementHeight = element.offsetHeight;\n      const elementTop = element.getBoundingClientRect().top + scrollTop;\n      const elementBottom = elementTop + elementHeight;\n      const newScrollTop = elementTop - containerTop + container.scrollTop;\n      if (elementTop < containerTop) {\n        container.scrollTop = newScrollTop;\n      } else if (elementBottom > containerBottom) {\n        const heightDifference = containerHeight - elementHeight;\n        container.scrollTop = newScrollTop - heightDifference;\n      }\n    }\n    //* Replace any existing dial code with the new one\n    //* Note: called from _selectListItem and setCountry\n    _updateDialCode(newDialCodeBare) {\n      const inputVal = this.telInput.value;\n      const newDialCode = `+${newDialCodeBare}`;\n      let newNumber;\n      if (inputVal.charAt(0) === \"+\") {\n        const prevDialCode = this._getDialCode(inputVal);\n        if (prevDialCode) {\n          newNumber = inputVal.replace(prevDialCode, newDialCode);\n        } else {\n          newNumber = newDialCode;\n        }\n        this.telInput.value = newNumber;\n      }\n    }\n    //* Try and extract a valid international dial code from a full telephone number.\n    //* Note: returns the raw string inc plus character and any whitespace/dots etc.\n    _getDialCode(number, includeAreaCode) {\n      let dialCode = \"\";\n      if (number.charAt(0) === \"+\") {\n        let numericChars = \"\";\n        for (let i = 0; i < number.length; i++) {\n          const c = number.charAt(i);\n          if (!isNaN(parseInt(c, 10))) {\n            numericChars += c;\n            if (includeAreaCode) {\n              if (this.dialCodeToIso2Map[numericChars]) {\n                dialCode = number.substr(0, i + 1);\n              }\n            } else {\n              if (this.dialCodes[numericChars]) {\n                dialCode = number.substr(0, i + 1);\n                break;\n              }\n            }\n            if (numericChars.length === this.dialCodeMaxLen) {\n              break;\n            }\n          }\n        }\n      }\n      return dialCode;\n    }\n    //* Get the input val, adding the dial code if separateDialCode is enabled.\n    _getFullNumber() {\n      const val = this.telInput.value.trim();\n      const { dialCode } = this.selectedCountryData;\n      let prefix;\n      const numericVal = getNumeric(val);\n      if (this.options.separateDialCode && val.charAt(0) !== \"+\" && dialCode && numericVal) {\n        prefix = `+${dialCode}`;\n      } else {\n        prefix = \"\";\n      }\n      return prefix + val;\n    }\n    //* Remove the dial code if separateDialCode is enabled also cap the length if the input has a maxlength attribute\n    _beforeSetNumber(fullNumber) {\n      let number = fullNumber;\n      if (this.options.separateDialCode) {\n        let dialCode = this._getDialCode(number);\n        if (dialCode) {\n          dialCode = `+${this.selectedCountryData.dialCode}`;\n          const start = number[dialCode.length] === \" \" || number[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n          number = number.substr(start);\n        }\n      }\n      return this._cap(number);\n    }\n    //* Trigger the 'countrychange' event.\n    _triggerCountryChange() {\n      this._trigger(\"countrychange\");\n    }\n    //* Format the number as the user types.\n    _formatNumberAsYouType() {\n      const val = this._getFullNumber();\n      const result = intlTelInput.utils ? intlTelInput.utils.formatNumberAsYouType(val, this.selectedCountryData.iso2) : val;\n      const { dialCode } = this.selectedCountryData;\n      if (this.options.separateDialCode && this.telInput.value.charAt(0) !== \"+\" && result.includes(`+${dialCode}`)) {\n        const afterDialCode = result.split(`+${dialCode}`)[1] || \"\";\n        return afterDialCode.trim();\n      }\n      return result;\n    }\n    //**************************\n    //*  SECRET PUBLIC METHODS\n    //**************************\n    //* This is called when the geoip call returns.\n    handleAutoCountry() {\n      if (this.options.initialCountry === \"auto\" && intlTelInput.autoCountry) {\n        this.defaultCountry = intlTelInput.autoCountry;\n        if (!this.telInput.value) {\n          this.setCountry(this.defaultCountry);\n        }\n        this.resolveAutoCountryPromise();\n      }\n    }\n    //* This is called when the utils request completes.\n    handleUtils() {\n      if (intlTelInput.utils) {\n        if (this.telInput.value) {\n          this._updateValFromNumber(this.telInput.value);\n        }\n        if (this.selectedCountryData.iso2) {\n          this._updatePlaceholder();\n          this._updateMaxLength();\n        }\n      }\n      this.resolveUtilsScriptPromise();\n    }\n    //********************\n    //*  PUBLIC METHODS\n    //********************\n    //* Remove plugin.\n    destroy() {\n      if (this.options.allowDropdown) {\n        this._closeDropdown();\n        this.selectedCountry.removeEventListener(\n          \"click\",\n          this._handleClickSelectedCountry\n        );\n        this.countryContainer.removeEventListener(\n          \"keydown\",\n          this._handleCountryContainerKeydown\n        );\n        const label = this.telInput.closest(\"label\");\n        if (label) {\n          label.removeEventListener(\"click\", this._handleLabelClick);\n        }\n      }\n      const { form } = this.telInput;\n      if (this._handleHiddenInputSubmit && form) {\n        form.removeEventListener(\"submit\", this._handleHiddenInputSubmit);\n      }\n      this.telInput.removeEventListener(\"input\", this._handleInputEvent);\n      if (this._handleKeydownEvent) {\n        this.telInput.removeEventListener(\"keydown\", this._handleKeydownEvent);\n      }\n      this.telInput.removeAttribute(\"data-intl-tel-input-id\");\n      const wrapper = this.telInput.parentNode;\n      wrapper?.parentNode?.insertBefore(this.telInput, wrapper);\n      wrapper?.parentNode?.removeChild(wrapper);\n      delete intlTelInput.instances[this.id];\n    }\n    //* Get the extension from the current number.\n    getExtension() {\n      if (intlTelInput.utils) {\n        return intlTelInput.utils.getExtension(\n          this._getFullNumber(),\n          this.selectedCountryData.iso2\n        );\n      }\n      return \"\";\n    }\n    //* Format the number to the given format.\n    getNumber(format) {\n      if (intlTelInput.utils) {\n        const { iso2 } = this.selectedCountryData;\n        return intlTelInput.utils.formatNumber(\n          this._getFullNumber(),\n          iso2,\n          format\n        );\n      }\n      return \"\";\n    }\n    //* Get the type of the entered number e.g. landline/mobile.\n    getNumberType() {\n      if (intlTelInput.utils) {\n        return intlTelInput.utils.getNumberType(\n          this._getFullNumber(),\n          this.selectedCountryData.iso2\n        );\n      }\n      return -99;\n    }\n    //* Get the country data for the currently selected country.\n    getSelectedCountryData() {\n      return this.selectedCountryData;\n    }\n    //* Get the validation error.\n    getValidationError() {\n      if (intlTelInput.utils) {\n        const { iso2 } = this.selectedCountryData;\n        return intlTelInput.utils.getValidationError(this._getFullNumber(), iso2);\n      }\n      return -99;\n    }\n    //* Validate the input val\n    isValidNumber(mobileOnly = true) {\n      const val = this._getFullNumber();\n      if (/\\p{L}/u.test(val)) {\n        return false;\n      }\n      return intlTelInput.utils ? intlTelInput.utils.isPossibleNumber(val, this.selectedCountryData.iso2, mobileOnly) : null;\n    }\n    //* Validate the input val (precise)\n    isValidNumberPrecise() {\n      const val = this._getFullNumber();\n      if (/\\p{L}/u.test(val)) {\n        return false;\n      }\n      return intlTelInput.utils ? intlTelInput.utils.isValidNumber(val, this.selectedCountryData.iso2) : null;\n    }\n    //* Update the selected country, and update the input val accordingly.\n    setCountry(iso2) {\n      const iso2Lower = iso2.toLowerCase();\n      if (this.selectedCountryData.iso2 !== iso2Lower) {\n        this._setCountry(iso2Lower);\n        this._updateDialCode(this.selectedCountryData.dialCode);\n        this._triggerCountryChange();\n      }\n    }\n    //* Set the input value and update the country.\n    setNumber(number) {\n      const countryChanged = this._updateCountryFromNumber(number);\n      this._updateValFromNumber(number);\n      if (countryChanged) {\n        this._triggerCountryChange();\n      }\n    }\n    //* Set the placeholder number typ\n    setPlaceholderNumberType(type) {\n      this.options.placeholderNumberType = type;\n      this._updatePlaceholder();\n    }\n  };\n  var injectUtilsScriptTag = (path, handleSuccess, handleFailure) => {\n    const script = document.createElement(\"script\");\n    script.onload = () => {\n      if (window.intlTelInputUtils) {\n        intlTelInput.utils = window.intlTelInputUtils;\n        delete window.intlTelInputUtils;\n        if (window.intlTelInputUtilsBackup) {\n          window.intlTelInputUtils = window.intlTelInputUtilsBackup;\n          delete window.intlTelInputUtilsBackup;\n        }\n      }\n      forEachInstance(\"handleUtils\");\n      if (handleSuccess) {\n        handleSuccess();\n      }\n    };\n    script.onerror = () => {\n      forEachInstance(\"rejectUtilsScriptPromise\");\n      if (handleFailure) {\n        handleFailure();\n      }\n    };\n    script.className = \"iti-load-utils\";\n    script.async = true;\n    script.src = path;\n    document.body.appendChild(script);\n  };\n  var loadUtils = (path) => {\n    if (!intlTelInput.utils && !intlTelInput.startedLoadingUtilsScript) {\n      intlTelInput.startedLoadingUtilsScript = true;\n      return new Promise(\n        (resolve, reject) => injectUtilsScriptTag(path, resolve, reject)\n      );\n    }\n    return null;\n  };\n  var intlTelInput = Object.assign(\n    (input, options) => {\n      const iti = new Iti(input, options);\n      iti._init();\n      input.setAttribute(\"data-intl-tel-input-id\", iti.id.toString());\n      intlTelInput.instances[iti.id] = iti;\n      return iti;\n    },\n    {\n      defaults,\n      //* Using a static var like this allows us to mock it in the tests.\n      documentReady: () => document.readyState === \"complete\",\n      //* Get the country data object.\n      getCountryData: () => data_default,\n      //* A getter for the plugin instance.\n      getInstance: (input) => {\n        const id2 = input.getAttribute(\"data-intl-tel-input-id\");\n        return id2 ? intlTelInput.instances[id2] : null;\n      },\n      //* A map from instance ID to instance object.\n      instances: {},\n      loadUtils,\n      version: \"22.0.2\"\n    }\n  );\n  var intl_tel_input_default = intlTelInput;\n  return __toCommonJS(intl_tel_input_exports);\n})();\n\n// UMD\n  return factoryOutput.default;\n}));\n","var languages = require('./languages');\nvar instructions = languages.instructions;\nvar grammars = languages.grammars;\nvar abbreviations = languages.abbreviations;\n\nmodule.exports = function(version) {\n    Object.keys(instructions).forEach(function(code) {\n        if (!instructions[code][version]) { throw 'invalid version ' + version + ': ' + code + ' not supported'; }\n    });\n\n    return {\n        capitalizeFirstLetter: function(language, string) {\n            return string.charAt(0).toLocaleUpperCase(language) + string.slice(1);\n        },\n        ordinalize: function(language, number) {\n            // Transform numbers to their translated ordinalized value\n            if (!language) throw new Error('No language code provided');\n\n            return instructions[language][version].constants.ordinalize[number.toString()] || '';\n        },\n        directionFromDegree: function(language, degree) {\n            // Transform degrees to their translated compass direction\n            if (!language) throw new Error('No language code provided');\n            if (!degree && degree !== 0) {\n                // step had no bearing_after degree, ignoring\n                return '';\n            } else if (degree >= 0 && degree <= 20) {\n                return instructions[language][version].constants.direction.north;\n            } else if (degree > 20 && degree < 70) {\n                return instructions[language][version].constants.direction.northeast;\n            } else if (degree >= 70 && degree <= 110) {\n                return instructions[language][version].constants.direction.east;\n            } else if (degree > 110 && degree < 160) {\n                return instructions[language][version].constants.direction.southeast;\n            } else if (degree >= 160 && degree <= 200) {\n                return instructions[language][version].constants.direction.south;\n            } else if (degree > 200 && degree < 250) {\n                return instructions[language][version].constants.direction.southwest;\n            } else if (degree >= 250 && degree <= 290) {\n                return instructions[language][version].constants.direction.west;\n            } else if (degree > 290 && degree < 340) {\n                return instructions[language][version].constants.direction.northwest;\n            } else if (degree >= 340 && degree <= 360) {\n                return instructions[language][version].constants.direction.north;\n            } else {\n                throw new Error('Degree ' + degree + ' invalid');\n            }\n        },\n        laneConfig: function(step) {\n            // Reduce any lane combination down to a contracted lane diagram\n            if (!step.intersections || !step.intersections[0].lanes) throw new Error('No lanes object');\n\n            var config = [];\n            var currentLaneValidity = null;\n\n            step.intersections[0].lanes.forEach(function (lane) {\n                if (currentLaneValidity === null || currentLaneValidity !== lane.valid) {\n                    if (lane.valid) {\n                        config.push('o');\n                    } else {\n                        config.push('x');\n                    }\n                    currentLaneValidity = lane.valid;\n                }\n            });\n\n            return config.join('');\n        },\n        getWayName: function(language, step, options) {\n            var classes = options ? options.classes || [] : [];\n            if (typeof step !== 'object') throw new Error('step must be an Object');\n            if (!language) throw new Error('No language code provided');\n            if (!Array.isArray(classes)) throw new Error('classes must be an Array or undefined');\n\n            var wayName;\n            var name = step.name || '';\n            var ref = (step.ref || '').split(';')[0];\n\n            // Remove hacks from Mapbox Directions mixing ref into name\n            if (name === step.ref) {\n                // if both are the same we assume that there used to be an empty name, with the ref being filled in for it\n                // we only need to retain the ref then\n                name = '';\n            }\n            name = name.replace(' (' + step.ref + ')', '');\n\n            // In attempt to avoid using the highway name of a way,\n            // check and see if the step has a class which should signal\n            // the ref should be used instead of the name.\n            var wayMotorway = classes.indexOf('motorway') !== -1;\n\n            if (name && ref && name !== ref && !wayMotorway) {\n                var phrase = instructions[language][version].phrase['name and ref'] ||\n                    instructions.en[version].phrase['name and ref'];\n                wayName = this.tokenize(language, phrase, {\n                    name: name,\n                    ref: ref\n                }, options);\n            } else if (name && ref && wayMotorway && (/\\d/).test(ref)) {\n                wayName = options && options.formatToken ? options.formatToken('ref', ref) : ref;\n            } else if (!name && ref) {\n                wayName = options && options.formatToken ? options.formatToken('ref', ref) : ref;\n            } else {\n                wayName = options && options.formatToken ? options.formatToken('name', name) : name;\n            }\n\n            return wayName;\n        },\n\n        /**\n         * Formulate a localized text instruction from a step.\n         *\n         * @param  {string} language           Language code.\n         * @param  {object} step               Step including maneuver property.\n         * @param  {object} opts               Additional options.\n         * @param  {string} opts.legIndex      Index of leg in the route.\n         * @param  {string} opts.legCount      Total number of legs in the route.\n         * @param  {array}  opts.classes       List of road classes.\n         * @param  {string} opts.waypointName  Name of waypoint for arrival instruction.\n         *\n         * @return {string} Localized text instruction.\n         */\n        compile: function(language, step, opts) {\n            if (!language) throw new Error('No language code provided');\n            if (languages.supportedCodes.indexOf(language) === -1) throw new Error('language code ' + language + ' not loaded');\n            if (!step.maneuver) throw new Error('No step maneuver provided');\n            var options = opts || {};\n\n            var type = step.maneuver.type;\n            var modifier = step.maneuver.modifier;\n            var mode = step.mode;\n            // driving_side will only be defined in OSRM 5.14+\n            var side = step.driving_side;\n\n            if (!type) { throw new Error('Missing step maneuver type'); }\n            if (type !== 'depart' && type !== 'arrive' && !modifier) { throw new Error('Missing step maneuver modifier'); }\n\n            if (!instructions[language][version][type]) {\n                // Log for debugging\n                console.log('Encountered unknown instruction type: ' + type); // eslint-disable-line no-console\n                // OSRM specification assumes turn types can be added without\n                // major version changes. Unknown types are to be treated as\n                // type `turn` by clients\n                type = 'turn';\n            }\n\n            // Use special instructions if available, otherwise `defaultinstruction`\n            var instructionObject;\n            if (instructions[language][version].modes[mode]) {\n                instructionObject = instructions[language][version].modes[mode];\n            } else {\n              // omit side from off ramp if same as driving_side\n              // note: side will be undefined if the input is from OSRM <5.14\n              // but the condition should still evaluate properly regardless\n                var omitSide = type === 'off ramp' && modifier.indexOf(side) >= 0;\n                if (instructions[language][version][type][modifier] && !omitSide) {\n                    instructionObject = instructions[language][version][type][modifier];\n                } else {\n                    instructionObject = instructions[language][version][type].default;\n                }\n            }\n\n            // Special case handling\n            var laneInstruction;\n            switch (type) {\n            case 'use lane':\n                laneInstruction = instructions[language][version].constants.lanes[this.laneConfig(step)];\n                if (!laneInstruction) {\n                    // If the lane combination is not found, default to continue straight\n                    instructionObject = instructions[language][version]['use lane'].no_lanes;\n                }\n                break;\n            case 'rotary':\n            case 'roundabout':\n                if (step.rotary_name && step.maneuver.exit && instructionObject.name_exit) {\n                    instructionObject = instructionObject.name_exit;\n                } else if (step.rotary_name && instructionObject.name) {\n                    instructionObject = instructionObject.name;\n                } else if (step.maneuver.exit && instructionObject.exit) {\n                    instructionObject = instructionObject.exit;\n                } else {\n                    instructionObject = instructionObject.default;\n                }\n                break;\n            default:\n                // NOOP, since no special logic for that type\n            }\n\n            // Decide way_name with special handling for name and ref\n            var wayName = this.getWayName(language, step, options);\n\n            // Decide which instruction string to use\n            // Destination takes precedence over name\n            var instruction;\n            if (step.destinations && step.exits && instructionObject.exit_destination) {\n                instruction = instructionObject.exit_destination;\n            } else if (step.destinations && instructionObject.destination) {\n                instruction = instructionObject.destination;\n            } else if (step.exits && instructionObject.exit) {\n                instruction = instructionObject.exit;\n            } else if (wayName && instructionObject.name) {\n                instruction = instructionObject.name;\n            } else if (options.waypointName && instructionObject.named) {\n                instruction = instructionObject.named;\n            } else {\n                instruction = instructionObject.default;\n            }\n\n            var destinations = step.destinations && step.destinations.split(': ');\n            var destinationRef = destinations && destinations[0].split(',')[0];\n            var destination = destinations && destinations[1] && destinations[1].split(',')[0];\n            var firstDestination;\n            if (destination && destinationRef) {\n                firstDestination = destinationRef + ': ' + destination;\n            } else {\n                firstDestination = destinationRef || destination || '';\n            }\n\n            var nthWaypoint = options.legIndex >= 0 && options.legIndex !== options.legCount - 1 ? this.ordinalize(language, options.legIndex + 1) : '';\n\n            // Replace tokens\n            // NOOP if they don't exist\n            var replaceTokens = {\n                'way_name': wayName,\n                'destination': firstDestination,\n                'exit': (step.exits || '').split(';')[0],\n                'exit_number': this.ordinalize(language, step.maneuver.exit || 1),\n                'rotary_name': step.rotary_name,\n                'lane_instruction': laneInstruction,\n                'modifier': instructions[language][version].constants.modifier[modifier],\n                'direction': this.directionFromDegree(language, step.maneuver.bearing_after),\n                'nth': nthWaypoint,\n                'waypoint_name': options.waypointName\n            };\n\n            return this.tokenize(language, instruction, replaceTokens, options);\n        },\n        grammarize: function(language, name, grammar) {\n            if (!language) throw new Error('No language code provided');\n            // Process way/rotary/any name with applying grammar rules if any\n            if (grammar && grammars && grammars[language] && grammars[language][version]) {\n                var rules = grammars[language][version][grammar];\n                if (rules) {\n                    // Pass original name to rules' regular expressions enclosed with spaces for simplier parsing\n                    var n = ' ' + name + ' ';\n                    var flags = grammars[language].meta.regExpFlags || '';\n                    rules.forEach(function(rule) {\n                        var re = new RegExp(rule[0], flags);\n                        n = n.replace(re, rule[1]);\n                    });\n\n                    return n.trim();\n                }\n            }\n\n            return name;\n        },\n        abbreviations: abbreviations,\n        tokenize: function(language, instruction, tokens, options) {\n            if (!language) throw new Error('No language code provided');\n            // Keep this function context to use in inline function below (no arrow functions in ES4)\n            var that = this;\n            var startedWithToken = false;\n            var output = instruction.replace(/\\{(\\w+)(?::(\\w+))?\\}/g, function(token, tag, grammar, offset) {\n                var value = tokens[tag];\n\n                // Return unknown token unchanged\n                if (typeof value === 'undefined') {\n                    return token;\n                }\n\n                value = that.grammarize(language, value, grammar);\n\n                // If this token appears at the beginning of the instruction, capitalize it.\n                if (offset === 0 && instructions[language].meta.capitalizeFirstLetter) {\n                    startedWithToken = true;\n                    value = that.capitalizeFirstLetter(language, value);\n                }\n\n                if (options && options.formatToken) {\n                    value = options.formatToken(tag, value);\n                }\n\n                return value;\n            })\n            .replace(/ {2}/g, ' '); // remove excess spaces\n\n            if (!startedWithToken && instructions[language].meta.capitalizeFirstLetter) {\n                return this.capitalizeFirstLetter(language, output);\n            }\n\n            return output;\n        }\n    };\n};\n","// Load all language files explicitly to allow integration\n// with bundling tools like webpack and browserify\nvar instructionsAr = require('./languages/translations/ar.json');\nvar instructionsDa = require('./languages/translations/da.json');\nvar instructionsDe = require('./languages/translations/de.json');\nvar instructionsEn = require('./languages/translations/en.json');\nvar instructionsEo = require('./languages/translations/eo.json');\nvar instructionsEs = require('./languages/translations/es.json');\nvar instructionsEsEs = require('./languages/translations/es-ES.json');\nvar instructionsFi = require('./languages/translations/fi.json');\nvar instructionsFr = require('./languages/translations/fr.json');\nvar instructionsHe = require('./languages/translations/he.json');\nvar instructionsHu = require('./languages/translations/hu.json');\nvar instructionsId = require('./languages/translations/id.json');\nvar instructionsIt = require('./languages/translations/it.json');\nvar instructionsJa = require('./languages/translations/ja.json');\nvar instructionsKo = require('./languages/translations/ko.json');\nvar instructionsMy = require('./languages/translations/my.json');\nvar instructionsNl = require('./languages/translations/nl.json');\nvar instructionsNo = require('./languages/translations/no.json');\nvar instructionsPl = require('./languages/translations/pl.json');\nvar instructionsPtBr = require('./languages/translations/pt-BR.json');\nvar instructionsPtPt = require('./languages/translations/pt-PT.json');\nvar instructionsRo = require('./languages/translations/ro.json');\nvar instructionsRu = require('./languages/translations/ru.json');\nvar instructionsSl = require('./languages/translations/sl.json');\nvar instructionsSv = require('./languages/translations/sv.json');\nvar instructionsTr = require('./languages/translations/tr.json');\nvar instructionsUk = require('./languages/translations/uk.json');\nvar instructionsVi = require('./languages/translations/vi.json');\nvar instructionsYo = require('./languages/translations/yo.json');\nvar instructionsZhHans = require('./languages/translations/zh-Hans.json');\n\n// Load all grammar files\nvar grammarDa = require('./languages/grammar/da.json');\nvar grammarFr = require('./languages/grammar/fr.json');\nvar grammarHu = require('./languages/grammar/hu.json');\nvar grammarRu = require('./languages/grammar/ru.json');\n\n// Load all abbreviations files\nvar abbreviationsBg = require('./languages/abbreviations/bg.json');\nvar abbreviationsCa = require('./languages/abbreviations/ca.json');\nvar abbreviationsDa = require('./languages/abbreviations/da.json');\nvar ebbreviationsDe = require('./languages/abbreviations/de.json');\nvar abbreviationsEn = require('./languages/abbreviations/en.json');\nvar abbreviationsEs = require('./languages/abbreviations/es.json');\nvar abbreviationsFr = require('./languages/abbreviations/fr.json');\nvar abbreviationsHe = require('./languages/abbreviations/he.json');\nvar abbreviationsHu = require('./languages/abbreviations/hu.json');\nvar abbreviationsLt = require('./languages/abbreviations/lt.json');\nvar abbreviationsNl = require('./languages/abbreviations/nl.json');\nvar abbreviationsRu = require('./languages/abbreviations/ru.json');\nvar abbreviationsSl = require('./languages/abbreviations/sl.json');\nvar abbreviationsSv = require('./languages/abbreviations/sv.json');\nvar abbreviationsUk = require('./languages/abbreviations/uk.json');\nvar abbreviationsVi = require('./languages/abbreviations/vi.json');\n\n// Create a list of supported codes\nvar instructions = {\n    'ar': instructionsAr,\n    'da': instructionsDa,\n    'de': instructionsDe,\n    'en': instructionsEn,\n    'eo': instructionsEo,\n    'es': instructionsEs,\n    'es-ES': instructionsEsEs,\n    'fi': instructionsFi,\n    'fr': instructionsFr,\n    'he': instructionsHe,\n    'hu': instructionsHu,\n    'id': instructionsId,\n    'it': instructionsIt,\n    'ja': instructionsJa,\n    'ko': instructionsKo,\n    'my': instructionsMy,\n    'nl': instructionsNl,\n    'no': instructionsNo,\n    'pl': instructionsPl,\n    'pt-BR': instructionsPtBr,\n    'pt-PT': instructionsPtPt,\n    'ro': instructionsRo,\n    'ru': instructionsRu,\n    'sl': instructionsSl,\n    'sv': instructionsSv,\n    'tr': instructionsTr,\n    'uk': instructionsUk,\n    'vi': instructionsVi,\n    'yo': instructionsYo,\n    'zh-Hans': instructionsZhHans\n};\n\n// Create list of supported grammar\nvar grammars = {\n    'da': grammarDa,\n    'fr': grammarFr,\n    'hu': grammarHu,\n    'ru': grammarRu\n};\n\n// Create list of supported abbrevations\nvar abbreviations = {\n    'bg': abbreviationsBg,\n    'ca': abbreviationsCa,\n    'da': abbreviationsDa,\n    'de': ebbreviationsDe,\n    'en': abbreviationsEn,\n    'es': abbreviationsEs,\n    'fr': abbreviationsFr,\n    'he': abbreviationsHe,\n    'hu': abbreviationsHu,\n    'lt': abbreviationsLt,\n    'nl': abbreviationsNl,\n    'ru': abbreviationsRu,\n    'sl': abbreviationsSl,\n    'sv': abbreviationsSv,\n    'uk': abbreviationsUk,\n    'vi': abbreviationsVi\n};\nmodule.exports = {\n    supportedCodes: Object.keys(instructions),\n    instructions: instructions,\n    grammars: grammars,\n    abbreviations: abbreviations\n};\n","/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Check if two objects have a different shape\n * @param {object} a\n * @param {object} b\n * @returns {boolean}\n */\nexport function shallowDiffers(a, b) {\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\n\treturn false;\n}\n\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n/**\n * Check if two values are the same value\n * @param {*} x\n * @param {*} y\n * @returns {boolean}\n */\nexport function is(x, y) {\n\treturn (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\n","import { Component } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Component class with a predefined `shouldComponentUpdate` implementation\n */\nexport function PureComponent(p) {\n\tthis.props = p;\n}\nPureComponent.prototype = new Component();\n// Some third-party libraries check if this property is present\nPureComponent.prototype.isPureReactComponent = true;\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\n};\n","import { createElement } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Memoize a component, so that it only updates when the props actually have\n * changed. This was previously known as `React.pure`.\n * @param {import('./internal').FunctionComponent} c functional component\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\n * @returns {import('./internal').FunctionComponent}\n */\nexport function memo(c, comparer) {\n\tfunction shouldUpdate(nextProps) {\n\t\tlet ref = this.props.ref;\n\t\tlet updateRef = ref == nextProps.ref;\n\t\tif (!updateRef && ref) {\n\t\t\tref.call ? ref(null) : (ref.current = null);\n\t\t}\n\n\t\tif (!comparer) {\n\t\t\treturn shallowDiffers(this.props, nextProps);\n\t\t}\n\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\n\t}\n\n\tfunction Memoed(props) {\n\t\tthis.shouldComponentUpdate = shouldUpdate;\n\t\treturn createElement(c, props);\n\t}\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\n\tMemoed.prototype.isReactComponent = true;\n\tMemoed._forwarded = true;\n\treturn Memoed;\n}\n","import { options } from 'preact';\nimport { assign } from './util';\n\nlet oldDiffHook = options._diff;\noptions._diff = vnode => {\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\n\t\tvnode.props.ref = vnode.ref;\n\t\tvnode.ref = null;\n\t}\n\tif (oldDiffHook) oldDiffHook(vnode);\n};\n\nexport const REACT_FORWARD_SYMBOL =\n\t(typeof Symbol != 'undefined' &&\n\t\tSymbol.for &&\n\t\tSymbol.for('react.forward_ref')) ||\n\t0xf47;\n\n/**\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\n * wrap components. Using `forwardRef` there is an easy way to get a reference\n * of the wrapped component instead of one of the wrapper itself.\n * @param {import('./index').ForwardFn} fn\n * @returns {import('./internal').FunctionComponent}\n */\nexport function forwardRef(fn) {\n\tfunction Forwarded(props) {\n\t\tlet clone = assign({}, props);\n\t\tdelete clone.ref;\n\t\treturn fn(clone, props.ref || null);\n\t}\n\n\t// mobx-react checks for this being present\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\n\t// mobx-react heavily relies on implementation details.\n\t// It expects an object here with a `render` property,\n\t// and prototype.render will fail. Without this\n\t// mobx-react throws.\n\tForwarded.render = Forwarded;\n\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\n\treturn Forwarded;\n}\n","import { toChildArray } from 'preact';\n\nconst mapFn = (children, fn) => {\n\tif (children == null) return null;\n\treturn toChildArray(toChildArray(children).map(fn));\n};\n\n// This API is completely unnecessary for Preact, so it's basically passthrough.\nexport const Children = {\n\tmap: mapFn,\n\tforEach: mapFn,\n\tcount(children) {\n\t\treturn children ? toChildArray(children).length : 0;\n\t},\n\tonly(children) {\n\t\tconst normalized = toChildArray(children);\n\t\tif (normalized.length !== 1) throw 'Children.only';\n\t\treturn normalized[0];\n\t},\n\ttoArray: toChildArray\n};\n","import { Component, createElement, options, Fragment } from 'preact';\nimport { assign } from './util';\n\nconst oldCatchError = options._catchError;\noptions._catchError = function(error, newVNode, oldVNode, errorInfo) {\n\tif (error.then) {\n\t\t/** @type {import('./internal').Component} */\n\t\tlet component;\n\t\tlet vnode = newVNode;\n\n\t\tfor (; (vnode = vnode._parent); ) {\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\n\t\t\t\tif (newVNode._dom == null) {\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t}\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\n\t\t\t}\n\t\t}\n\t}\n\toldCatchError(error, newVNode, oldVNode, errorInfo);\n};\n\nconst oldUnmount = options.unmount;\noptions.unmount = function(vnode) {\n\t/** @type {import('./internal').Component} */\n\tconst component = vnode._component;\n\tif (component && component._onResolve) {\n\t\tcomponent._onResolve();\n\t}\n\n\t// if the component is still hydrating\n\t// most likely it is because the component is suspended\n\t// we set the vnode.type as `null` so that it is not a typeof function\n\t// so the unmount will remove the vnode._dom\n\tif (component && vnode._hydrating === true) {\n\t\tvnode.type = null;\n\t}\n\n\tif (oldUnmount) oldUnmount(vnode);\n};\n\nfunction detachedClone(vnode, detachedParent, parentDom) {\n\tif (vnode) {\n\t\tif (vnode._component && vnode._component.__hooks) {\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\n\t\t\t});\n\n\t\t\tvnode._component.__hooks = null;\n\t\t}\n\n\t\tvnode = assign({}, vnode);\n\t\tif (vnode._component != null) {\n\t\t\tif (vnode._component._parentDom === parentDom) {\n\t\t\t\tvnode._component._parentDom = detachedParent;\n\t\t\t}\n\t\t\tvnode._component = null;\n\t\t}\n\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\n\t\t\t);\n\t}\n\n\treturn vnode;\n}\n\nfunction removeOriginal(vnode, detachedParent, originalParent) {\n\tif (vnode) {\n\t\tvnode._original = null;\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\n\t\t\t);\n\n\t\tif (vnode._component) {\n\t\t\tif (vnode._component._parentDom === detachedParent) {\n\t\t\t\tif (vnode._dom) {\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\n\t\t\t\t}\n\t\t\t\tvnode._component._force = true;\n\t\t\t\tvnode._component._parentDom = originalParent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vnode;\n}\n\n// having custom inheritance instead of a class here saves a lot of bytes\nexport function Suspense() {\n\t// we do not call super here to golf some bytes...\n\tthis._pendingSuspensionCount = 0;\n\tthis._suspenders = null;\n\tthis._detachOnNextRender = null;\n}\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspense.prototype = new Component();\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {Promise} promise The thrown promise\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\n */\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\n\tconst suspendingComponent = suspendingVNode._component;\n\n\t/** @type {import('./internal').SuspenseComponent} */\n\tconst c = this;\n\n\tif (c._suspenders == null) {\n\t\tc._suspenders = [];\n\t}\n\tc._suspenders.push(suspendingComponent);\n\n\tconst resolve = suspended(c._vnode);\n\n\tlet resolved = false;\n\tconst onResolved = () => {\n\t\tif (resolved) return;\n\n\t\tresolved = true;\n\t\tsuspendingComponent._onResolve = null;\n\n\t\tif (resolve) {\n\t\t\tresolve(onSuspensionComplete);\n\t\t} else {\n\t\t\tonSuspensionComplete();\n\t\t}\n\t};\n\n\tsuspendingComponent._onResolve = onResolved;\n\n\tconst onSuspensionComplete = () => {\n\t\tif (!--c._pendingSuspensionCount) {\n\t\t\t// If the suspension was during hydration we don't need to restore the\n\t\t\t// suspended children into the _children array\n\t\t\tif (c.state._suspended) {\n\t\t\t\tconst suspendedVNode = c.state._suspended;\n\t\t\t\tc._vnode._children[0] = removeOriginal(\n\t\t\t\t\tsuspendedVNode,\n\t\t\t\t\tsuspendedVNode._component._parentDom,\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\n\n\t\t\tlet suspended;\n\t\t\twhile ((suspended = c._suspenders.pop())) {\n\t\t\t\tsuspended.forceUpdate();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * We do not set `suspended: true` during hydration because we want the actual markup\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\n\t */\n\tconst wasHydrating = suspendingVNode._hydrating === true;\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\n\t}\n\tpromise.then(onResolved, onResolved);\n};\n\nSuspense.prototype.componentWillUnmount = function() {\n\tthis._suspenders = [];\n};\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\n * @param {import('./internal').SuspenseState} state\n */\nSuspense.prototype.render = function(props, state) {\n\tif (this._detachOnNextRender) {\n\t\t// When the Suspense's _vnode was created by a call to createVNode\n\t\t// (i.e. due to a setState further up in the tree)\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\n\t\tif (this._vnode._children) {\n\t\t\tconst detachedParent = document.createElement('div');\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\n\t\t\tthis._vnode._children[0] = detachedClone(\n\t\t\t\tthis._detachOnNextRender,\n\t\t\t\tdetachedParent,\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\n\t\t\t);\n\t\t}\n\n\t\tthis._detachOnNextRender = null;\n\t}\n\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\n\t/** @type {import('./internal').VNode} */\n\tconst fallback =\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\n\tif (fallback) fallback._hydrating = null;\n\n\treturn [\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\n\t\tfallback\n\t];\n};\n\n/**\n * Checks and calls the parent component's _suspended method, passing in the\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\n * that one of its children/descendants suspended.\n *\n * The parent MAY return a callback. The callback will get called when the\n * suspension resolves, notifying the parent of the fact.\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\n * This is a way for the parent to delay unsuspending.\n *\n * If the parent does not return a callback then the resolved vnode\n * gets unsuspended immediately when it resolves.\n *\n * @param {import('./internal').VNode} vnode\n * @returns {((unsuspend: () => void) => void)?}\n */\nexport function suspended(vnode) {\n\t/** @type {import('./internal').Component} */\n\tlet component = vnode._parent._component;\n\treturn component && component._suspended && component._suspended(vnode);\n}\n\nexport function lazy(loader) {\n\tlet prom;\n\tlet component;\n\tlet error;\n\n\tfunction Lazy(props) {\n\t\tif (!prom) {\n\t\t\tprom = loader();\n\t\t\tprom.then(\n\t\t\t\texports => {\n\t\t\t\t\tcomponent = exports.default || exports;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\terror = e;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!component) {\n\t\t\tthrow prom;\n\t\t}\n\n\t\treturn createElement(component, props);\n\t}\n\n\tLazy.displayName = 'Lazy';\n\tLazy._forwarded = true;\n\treturn Lazy;\n}\n","import { Component, toChildArray } from 'preact';\nimport { suspended } from './suspense.js';\n\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\nconst SUSPENDED_COUNT = 0;\nconst RESOLVED_COUNT = 1;\nconst NEXT_NODE = 2;\n\n// Having custom inheritance instead of a class here saves a lot of bytes.\nexport function SuspenseList() {\n\tthis._next = null;\n\tthis._map = null;\n}\n\n// Mark one of child's earlier suspensions as resolved.\n// Some pending callbacks may become callable due to this\n// (e.g. the last suspended descendant gets resolved when\n// revealOrder === 'together'). Process those callbacks as well.\nconst resolve = (list, child, node) => {\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\n\t\t// The number a child (or any of its descendants) has been suspended\n\t\t// matches the number of times it's been resolved. Therefore we\n\t\t// mark the child as completely resolved by deleting it from ._map.\n\t\t// This is used to figure out when *all* children have been completely\n\t\t// resolved when revealOrder is 'together'.\n\t\tlist._map.delete(child);\n\t}\n\n\t// If revealOrder is falsy then we can do an early exit, as the\n\t// callbacks won't get queued in the node anyway.\n\t// If revealOrder is 'together' then also do an early exit\n\t// if all suspended descendants have not yet been resolved.\n\tif (\n\t\t!list.props.revealOrder ||\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\n\t) {\n\t\treturn;\n\t}\n\n\t// Walk the currently suspended children in order, calling their\n\t// stored callbacks on the way. Stop if we encounter a child that\n\t// has not been completely resolved yet.\n\tnode = list._next;\n\twhile (node) {\n\t\twhile (node.length > 3) {\n\t\t\tnode.pop()();\n\t\t}\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\n\t\t\tbreak;\n\t\t}\n\t\tlist._next = node = node[NEXT_NODE];\n\t}\n};\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspenseList.prototype = new Component();\n\nSuspenseList.prototype._suspended = function(child) {\n\tconst list = this;\n\tconst delegated = suspended(list._vnode);\n\n\tlet node = list._map.get(child);\n\tnode[SUSPENDED_COUNT]++;\n\n\treturn unsuspend => {\n\t\tconst wrappedUnsuspend = () => {\n\t\t\tif (!list.props.revealOrder) {\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\n\t\t\t\tunsuspend();\n\t\t\t} else {\n\t\t\t\tnode.push(unsuspend);\n\t\t\t\tresolve(list, child, node);\n\t\t\t}\n\t\t};\n\t\tif (delegated) {\n\t\t\tdelegated(wrappedUnsuspend);\n\t\t} else {\n\t\t\twrappedUnsuspend();\n\t\t}\n\t};\n};\n\nSuspenseList.prototype.render = function(props) {\n\tthis._next = null;\n\tthis._map = new Map();\n\n\tconst children = toChildArray(props.children);\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\n\t\t// then flip the child list around so that the last child will be\n\t\t// the first in the linked list.\n\t\tchildren.reverse();\n\t}\n\t// Build the linked list. Iterate through the children in reverse order\n\t// so that `_next` points to the first linked list node to be resolved.\n\tfor (let i = children.length; i--; ) {\n\t\t// Create a new linked list node as an array of form:\n\t\t// \t[suspended_count, resolved_count, next_node]\n\t\t// where suspended_count and resolved_count are numeric counters for\n\t\t// keeping track how many times a node has been suspended and resolved.\n\t\t//\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\n\t\t// processing callbacks until componentDidMount has been called. In a sense\n\t\t// node is suspended at least until componentDidMount gets called!\n\t\t//\n\t\t// Pending callbacks are added to the end of the node:\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\n\t}\n\treturn props.children;\n};\n\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\n\t// Iterate through all children after mounting for two reasons:\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\n\t//    each node[RELEASED_COUNT] by 1, therefore balancing the counters.\n\t//    The nodes can now be completely consumed from the linked list.\n\t// 2. Handle nodes that might have gotten resolved between render and\n\t//    componentDidMount.\n\tthis._map.forEach((node, child) => {\n\t\tresolve(this, child, node);\n\t});\n};\n","import { createElement, render } from 'preact';\n\n/**\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\n */\nfunction ContextProvider(props) {\n\tthis.getChildContext = () => props.context;\n\treturn props.children;\n}\n\n/**\n * Portal component\n * @this {import('./internal').Component}\n * @param {object | null | undefined} props\n *\n * TODO: use createRoot() instead of fake root\n */\nfunction Portal(props) {\n\tconst _this = this;\n\tlet container = props._container;\n\n\t_this.componentWillUnmount = function() {\n\t\trender(null, _this._temp);\n\t\t_this._temp = null;\n\t\t_this._container = null;\n\t};\n\n\t// When we change container we should clear our old container and\n\t// indicate a new mount.\n\tif (_this._container && _this._container !== container) {\n\t\t_this.componentWillUnmount();\n\t}\n\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\n\t// conditional vnode. This should not trigger a render.\n\tif (props._vnode) {\n\t\tif (!_this._temp) {\n\t\t\t_this._container = container;\n\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\n\t\t\t_this._temp = {\n\t\t\t\tnodeType: 1,\n\t\t\t\tparentNode: container,\n\t\t\t\tchildNodes: [],\n\t\t\t\tappendChild(child) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tinsertBefore(child, before) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tremoveChild(child) {\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\n\t\t\t\t\t_this._container.removeChild(child);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// Render our wrapping element into temp.\n\t\trender(\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\n\t\t\t_this._temp\n\t\t);\n\t}\n\t// When we come from a conditional render, on a mounted\n\t// portal we should clear the DOM.\n\telse if (_this._temp) {\n\t\t_this.componentWillUnmount();\n\t}\n}\n\n/**\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\n * @param {import('./internal').VNode} vnode The vnode to render\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\n */\nexport function createPortal(vnode, container) {\n\tconst el = createElement(Portal, { _vnode: vnode, _container: container });\n\tel.containerInfo = container;\n\treturn el;\n}\n","import {\n\trender as preactRender,\n\thydrate as preactHydrate,\n\toptions,\n\ttoChildArray,\n\tComponent\n} from 'preact';\n\nexport const REACT_ELEMENT_TYPE =\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\n\t0xeac7;\n\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\n\nconst IS_DOM = typeof document !== 'undefined';\n\n// Input types for which onchange should not be converted to oninput.\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\nconst onChangeInputType = type =>\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\n\t\t? /fil|che|rad/i\n\t\t: /fil|che|ra/i\n\t).test(type);\n\n// Some libraries like `react-virtualized` explicitly check for this.\nComponent.prototype.isReactComponent = {};\n\n// `UNSAFE_*` lifecycle hooks\n// Preact only ever invokes the unprefixed methods.\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\n// See https://github.com/preactjs/preact/issues/1941\n[\n\t'componentWillMount',\n\t'componentWillReceiveProps',\n\t'componentWillUpdate'\n].forEach(key => {\n\tObject.defineProperty(Component.prototype, key, {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn this['UNSAFE_' + key];\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: v\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n * Proxy render() since React returns a Component reference.\n * @param {import('./internal').VNode} vnode VNode tree to render\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\n * @param {() => void} [callback] Optional callback that will be called after rendering\n * @returns {import('./internal').Component | null} The root component reference or null\n */\nexport function render(vnode, parent, callback) {\n\t// React destroys any existing DOM nodes, see #1727\n\t// ...but only on the first render, see #1828\n\tif (parent._children == null) {\n\t\tparent.textContent = '';\n\t}\n\n\tpreactRender(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nexport function hydrate(vnode, parent, callback) {\n\tpreactHydrate(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nlet oldEventHook = options.event;\noptions.event = e => {\n\tif (oldEventHook) e = oldEventHook(e);\n\te.persist = empty;\n\te.isPropagationStopped = isPropagationStopped;\n\te.isDefaultPrevented = isDefaultPrevented;\n\treturn (e.nativeEvent = e);\n};\n\nfunction empty() {}\n\nfunction isPropagationStopped() {\n\treturn this.cancelBubble;\n}\n\nfunction isDefaultPrevented() {\n\treturn this.defaultPrevented;\n}\n\nlet classNameDescriptor = {\n\tconfigurable: true,\n\tget() {\n\t\treturn this.class;\n\t}\n};\n\nlet oldVNodeHook = options.vnode;\noptions.vnode = vnode => {\n\tlet type = vnode.type;\n\tlet props = vnode.props;\n\tlet normalizedProps = props;\n\n\t// only normalize props on Element nodes\n\tif (typeof type === 'string') {\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\n\t\tnormalizedProps = {};\n\n\t\tfor (let i in props) {\n\t\t\tlet value = props[i];\n\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\n\t\t\t\tcontinue;\n\t\t\t} else if (i === 'value' && 'defaultValue' in props && value == null) {\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\n\t\t\t\t// a default value\n\t\t\t\tcontinue;\n\t\t\t} else if (\n\t\t\t\ti === 'defaultValue' &&\n\t\t\t\t'value' in props &&\n\t\t\t\tprops.value == null\n\t\t\t) {\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n\t\t\t\ti = 'value';\n\t\t\t} else if (i === 'download' && value === true) {\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\n\t\t\t\t// value will be used as the file name and the file will be called\n\t\t\t\t// \"true\" upon downloading it.\n\t\t\t\tvalue = '';\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\n\t\t\t\ti = 'ondblclick';\n\t\t\t} else if (\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\n\t\t\t\t!onChangeInputType(props.type)\n\t\t\t) {\n\t\t\t\ti = 'oninput';\n\t\t\t} else if (/^onfocus$/i.test(i)) {\n\t\t\t\ti = 'onfocusin';\n\t\t\t} else if (/^onblur$/i.test(i)) {\n\t\t\t\ti = 'onfocusout';\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\n\t\t\t\ti = i.replace(/[A-Z0-9]/g, '-$&').toLowerCase();\n\t\t\t} else if (value === null) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\n\t\t\t// Add support for onInput and onChange, see #3561\n\t\t\t// if we have an oninput prop already change it to oninputCapture\n\t\t\tif (/^oninput$/i.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t\tif (normalizedProps[i]) {\n\t\t\t\t\ti = 'oninputCapture';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnormalizedProps[i] = value;\n\t\t}\n\n\t\t// Add support for array select values: <select multiple value={[]} />\n\t\tif (\n\t\t\ttype == 'select' &&\n\t\t\tnormalizedProps.multiple &&\n\t\t\tArray.isArray(normalizedProps.value)\n\t\t) {\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tchild.props.selected =\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\n\t\t\t});\n\t\t}\n\n\t\t// Adding support for defaultValue in select tag\n\t\tif (type == 'select' && normalizedProps.defaultValue != null) {\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tif (normalizedProps.multiple) {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\n\t\t\t\t} else {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvnode.props = normalizedProps;\n\n\t\tif (props.class != props.className) {\n\t\t\tclassNameDescriptor.enumerable = 'className' in props;\n\t\t\tif (props.className != null) normalizedProps.class = props.className;\n\t\t\tObject.defineProperty(normalizedProps, 'className', classNameDescriptor);\n\t\t}\n\t}\n\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\n\n\tif (oldVNodeHook) oldVNodeHook(vnode);\n};\n\n// Only needed for react-relay\nlet currentComponent;\nconst oldBeforeRender = options._render;\noptions._render = function(vnode) {\n\tif (oldBeforeRender) {\n\t\toldBeforeRender(vnode);\n\t}\n\tcurrentComponent = vnode._component;\n};\n\n// This is a very very private internal function for React it\n// is used to sort-of do runtime dependency injection. So far\n// only `react-relay` makes use of it. It uses it to read the\n// context value.\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\n\tReactCurrentDispatcher: {\n\t\tcurrent: {\n\t\t\treadContext(context) {\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\n\t\t\t}\n\t\t}\n\t}\n};\n","import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n","import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * constructor for this virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\t_hydrating: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is import('./internal').VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor === undefined;\n","import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\n/**\n * Diff the old and new properties of a VNode and apply changes to the DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to apply\n * changes to\n * @param {object} newProps The new props\n * @param {object} oldProps The old props\n * @param {boolean} isSvg Whether or not this node is an SVG node\n * @param {boolean} hydrate Whether or not we are in hydration mode\n */\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\n\tlet i;\n\n\tfor (i in oldProps) {\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\n\t\t}\n\t}\n\n\tfor (i in newProps) {\n\t\tif (\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\n\t\t\ti !== 'children' &&\n\t\t\ti !== 'key' &&\n\t\t\ti !== 'value' &&\n\t\t\ti !== 'checked' &&\n\t\t\toldProps[i] !== newProps[i]\n\t\t) {\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\n\t\t}\n\t}\n}\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value == null ? '' : value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, isSvg) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\n\t\t\t}\n\t\t} else {\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\tdom.removeEventListener(name, handler, useCapture);\n\t\t}\n\t} else if (name !== 'dangerouslySetInnerHTML') {\n\t\tif (isSvg) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname !== 'width' &&\n\t\t\tname !== 'height' &&\n\t\t\tname !== 'href' &&\n\t\t\tname !== 'list' &&\n\t\t\tname !== 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname !== 'tabIndex' &&\n\t\t\tname !== 'download' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// ARIA-attributes have a different notion of boolean values.\n\t\t// The value `false` is different from the attribute not\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\n\t\t// ARIA-attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost us too many bytes. On top of\n\t\t// that other VDOM frameworks also always stringify `false`.\n\n\t\tif (typeof value === 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name.indexOf('-') != -1)) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\nexport let inEvent = false;\n\n/**\n * Proxy an event to hooked event handlers\n * @param {Event} e The event object from the browser\n * @private\n */\nfunction eventProxy(e) {\n\tinEvent = true;\n\ttry {\n\t\treturn this._listeners[e.type + false](\n\t\t\toptions.event ? options.event(e) : e\n\t\t);\n\t} finally {\n\t\tinEvent = false;\n\t}\n}\n\nfunction eventProxyCapture(e) {\n\tinEvent = true;\n\ttry {\n\t\treturn this._listeners[e.type + true](options.event ? options.event(e) : e);\n\t} finally {\n\t\tinEvent = false;\n\t}\n}\n","import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { inEvent } from './diff/props';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function Component(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nComponent.prototype.setState = function(update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nComponent.prototype.forceUpdate = function(callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {import('./index').ComponentChildren | void}\n */\nComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet vnode = component._vnode,\n\t\toldDom = vnode._dom,\n\t\tparentDom = component._parentDom;\n\n\tif (parentDom) {\n\t\tlet commitQueue = [];\n\t\tconst oldVNode = assign({}, vnode);\n\t\toldVNode._original = vnode._original + 1;\n\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tvnode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tparentDom.ownerSVGElement !== undefined,\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\n\t\t\tvnode._hydrating\n\t\t);\n\t\tcommitRoot(commitQueue, vnode);\n\n\t\tif (vnode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(vnode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<import('./internal').Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst microTick =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\nfunction defer(cb) {\n\tif (inEvent) {\n\t\tsetTimeout(cb);\n\t} else {\n\t\tmicroTick(cb);\n\t}\n}\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet c;\n\trerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile ((c = rerenderQueue.shift())) {\n\t\tif (c._dirty) {\n\t\t\tlet renderQueueLength = rerenderQueue.length;\n\t\t\trenderComponent(c);\n\t\t\tif (rerenderQueue.length > renderQueueLength) {\n\t\t\t\t// When i.e. rerendering a provider additional new items can be injected, we want to\n\t\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t\t// single pass\n\t\t\t\trerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t\t\t}\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\n}\n\nprocess._rerenderCount = 0;\n","import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\t/** @type {import('./internal').Component[]} */\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(c => {\n\t\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\n}\n","export const EMPTY_OBJ = {};\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n","import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\n * children are being diffed\n * @param {import('../internal').ComponentChildren[]} renderResult\n * @param {import('../internal').VNode} newParentVNode The new virtual\n * node whose children should be diff'ed against oldParentVNode\n * @param {import('../internal').VNode} oldParentVNode The old virtual\n * node whose children should be diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by getChildContext\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet oldChildrenLength = oldChildren.length;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < renderResult.length; i++) {\n\t\tchildVNode = renderResult[i];\n\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t} else if (Array.isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t//   const reuse = <div />\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\t// Terser removes the `continue` here and wraps the loop body\n\t\t// in a `if (childVNode) { ... } condition\n\t\tif (childVNode == null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Check if we find a corresponding element in oldChildren.\n\t\t// If found, delete the array item by setting to `undefined`.\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\n\t\t// (holes).\n\t\toldVNode = oldChildren[i];\n\n\t\tif (\n\t\t\toldVNode === null ||\n\t\t\t(oldVNode &&\n\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\tchildVNode.type === oldVNode.type)\n\t\t) {\n\t\t\toldChildren[i] = undefined;\n\t\t} else {\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\n\t\t\t\toldVNode = oldChildren[j];\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\n\t\t\t\t// We always match by type (in either case).\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\t\tchildVNode.type === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\toldChildren[j] = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toldVNode = null;\n\t\t\t}\n\t\t}\n\n\t\toldVNode = oldVNode || EMPTY_OBJ;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tisSvg,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating\n\t\t);\n\n\t\tnewDom = childVNode._dom;\n\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\n\t\t\tif (!refs) refs = [];\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\n\t\t}\n\n\t\tif (newDom != null) {\n\t\t\tif (firstChildDom == null) {\n\t\t\t\tfirstChildDom = newDom;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\t\tchildVNode._children === oldVNode._children\n\t\t\t) {\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldDom,\n\t\t\t\t\tparentDom\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(\n\t\t\t\t\tparentDom,\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldVNode,\n\t\t\t\t\toldChildren,\n\t\t\t\t\tnewDom,\n\t\t\t\t\toldDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof newParentVNode.type == 'function') {\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\n\t\t\t\t//\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t\t\t\t// node's nextSibling.\n\t\t\t\tnewParentVNode._nextDom = oldDom;\n\t\t\t}\n\t\t} else if (\n\t\t\toldDom &&\n\t\t\toldVNode._dom == oldDom &&\n\t\t\toldDom.parentNode != parentDom\n\t\t) {\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\n\t\t\toldDom = getDomSibling(oldVNode);\n\t\t}\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\t// Remove remaining oldChildren if there are any.\n\tfor (i = oldChildrenLength; i--; ) {\n\t\tif (oldChildren[i] != null) {\n\t\t\tif (\n\t\t\t\ttypeof newParentVNode.type == 'function' &&\n\t\t\t\toldChildren[i]._dom != null &&\n\t\t\t\toldChildren[i]._dom == newParentVNode._nextDom\n\t\t\t) {\n\t\t\t\t// If the newParentVNode.__nextDom points to a dom node that is about to\n\t\t\t\t// be unmounted, then get the next sibling of that vnode and set\n\t\t\t\t// _nextDom to it\n\t\t\t\tnewParentVNode._nextDom = getLastDom(oldParentVNode).nextSibling;\n\t\t\t}\n\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\n\t\t}\n\t}\n\n\t// Set refs only after unmount\n\tif (refs) {\n\t\tfor (i = 0; i < refs.length; i++) {\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\n\t\t}\n\t}\n}\n\nfunction reorderChildren(childVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\tlet c = childVNode._children;\n\tlet tmp = 0;\n\tfor (; c && tmp < c.length; tmp++) {\n\t\tlet vnode = c[tmp];\n\t\tif (vnode) {\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\n\t\t\t// (childVNode here).\n\t\t\tvnode._parent = childVNode;\n\n\t\t\tif (typeof vnode.type == 'function') {\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(parentDom, vnode, vnode, c, vnode._dom, oldDom);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {import('../index').ComponentChildren} children The unflattened\n * children of a virtual node\n * @returns {import('../internal').VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (Array.isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\nfunction placeChild(\n\tparentDom,\n\tchildVNode,\n\toldVNode,\n\toldChildren,\n\tnewDom,\n\toldDom\n) {\n\tlet nextDom;\n\tif (childVNode._nextDom !== undefined) {\n\t\t// Only Fragments or components that return Fragment like VNodes will\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\n\t\t// of last DOM child of this child VNode\n\t\tnextDom = childVNode._nextDom;\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\n\t\t// can clean up the property\n\t\tchildVNode._nextDom = undefined;\n\t} else if (\n\t\toldVNode == null ||\n\t\tnewDom != oldDom ||\n\t\tnewDom.parentNode == null\n\t) {\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\n\t\t\tparentDom.appendChild(newDom);\n\t\t\tnextDom = null;\n\t\t} else {\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\n\t\t\tfor (\n\t\t\t\tlet sibDom = oldDom, j = 0;\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\n\t\t\t\tj += 1\n\t\t\t) {\n\t\t\t\tif (sibDom == newDom) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tparentDom.insertBefore(newDom, oldDom);\n\t\t\tnextDom = oldDom;\n\t\t}\n\t}\n\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\n\t// See more detail in create-element.js:createVNode\n\tif (nextDom !== undefined) {\n\t\toldDom = nextDom;\n\t} else {\n\t\toldDom = newDom.nextSibling;\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * @param {import('../internal').VNode} vnode\n */\nfunction getLastDom(vnode) {\n\tif (vnode.type == null || typeof vnode.type === 'string') {\n\t\treturn vnode._dom;\n\t}\n\n\tif (vnode._children) {\n\t\tfor (let i = vnode._children.length - 1; i >= 0; i--) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child) {\n\t\t\t\tlet lastDom = getLastDom(child);\n\t\t\t\tif (lastDom) {\n\t\t\t\t\treturn lastDom;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { EMPTY_OBJ } from '../constants';\nimport { Component, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { diffProps, setProperty } from './props';\nimport { assign, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by getChildContext\n * @param {boolean} isSvg Whether or not this element is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} [isHydrating] Whether or not we are in hydration\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._hydrating != null) {\n\t\tisHydrating = oldVNode._hydrating;\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\t// if we resume, we want the tree to be \"unlocked\"\n\t\tnewVNode._hydrating = null;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\ttry {\n\t\touter: if (typeof newType == 'function') {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\tnewVNode._original === oldVNode._original\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._hydrating = null;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\n\t\t\tc._force = false;\n\t\t} else if (\n\t\t\texcessDomChildren == null &&\n\t\t\tnewVNode._original === oldVNode._original\n\t\t) {\n\t\t\tnewVNode._children = oldVNode._children;\n\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t} else {\n\t\t\tnewVNode._dom = diffElementNodes(\n\t\t\t\toldVNode._dom,\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\tisHydrating\n\t\t\t);\n\t\t}\n\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\n\t} catch (e) {\n\t\tnewVNode._original = null;\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\tnewVNode._dom = oldDom;\n\t\t\tnewVNode._hydrating = !!isHydrating;\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t// ^ could possibly be simplified to:\n\t\t\t// excessDomChildren.length = 0;\n\t\t}\n\t\toptions._catchError(e, newVNode, oldVNode);\n\t}\n}\n\n/**\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').VNode} root\n */\nexport function commitRoot(commitQueue, root) {\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {import('../internal').PreactElement} dom The DOM element representing\n * the virtual nodes being diffed\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {*} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @returns {import('../internal').PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = newVNode.type;\n\tlet i = 0;\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tif (nodeType === 'svg') isSvg = true;\n\n\tif (excessDomChildren != null) {\n\t\tfor (; i < excessDomChildren.length; i++) {\n\t\t\tconst child = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tchild &&\n\t\t\t\t'setAttribute' in child === !!nodeType &&\n\t\t\t\t(nodeType ? child.localName === nodeType : child.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = child;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tif (isSvg) {\n\t\t\tdom = document.createElementNS(\n\t\t\t\t'http://www.w3.org/2000/svg',\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType\n\t\t\t);\n\t\t} else {\n\t\t\tdom = document.createElement(\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType,\n\t\t\t\tnewProps.is && newProps\n\t\t\t);\n\t\t}\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tif (!isHydrating) {\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\n\t\t\t// we should read the existing DOM attributes to diff them\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\toldProps = {};\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newHtml || oldHtml) {\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\t\tif (\n\t\t\t\t\t!newHtml ||\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\n\t\t\t\t) {\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\ti = newVNode.props.children;\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tArray.isArray(i) ? i : [i],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (as above, don't diff props during hydration)\n\t\tif (!isHydrating) {\n\t\t\tif (\n\t\t\t\t'value' in newProps &&\n\t\t\t\t(i = newProps.value) !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(i !== dom.value ||\n\t\t\t\t\t(nodeType === 'progress' && !i) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && i !== oldProps.value))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t'checked' in newProps &&\n\t\t\t\t(i = newProps.checked) !== undefined &&\n\t\t\t\ti !== dom.checked\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} ref\n * @param {any} value\n * @param {import('../internal').VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {import('../internal').VNode} vnode The virtual node to unmount\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\n * initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t\tvnode._component = undefined;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type !== 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n","import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n","/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw\n * the error that was caught (except for unmounting when this parameter\n * is the highest parent that was being unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component, ctor, handled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass RemotePromise {\n    /** Instantiates a new remote promise. */\n    constructor() {\n        this._status = 'pending';\n        this[Symbol.toStringTag] = '[object Promise]';\n        this._promise = new Promise((resolve, reject) => {\n            this._resolve = resolve;\n            this._reject = reject;\n        });\n        this.then = this._promise.then.bind(this._promise);\n        this.catch = this._promise.catch.bind(this._promise);\n    }\n    /** Gets the native promise instance. */\n    get promise() {\n        return this._promise;\n    }\n    /** Gets the current status of the promise. */\n    get status() {\n        return this._status;\n    }\n    /** Throws an error if the promises has already been resolved. */\n    assertPending() {\n        if (this._status !== 'pending') {\n            throw new Error(`This promise has already been ${this._status}.`);\n        }\n    }\n    resolve(value) {\n        this.assertPending();\n        this._status = 'fulfilled';\n        this._resolve(value);\n    }\n    /** Remotely reject this promise */\n    reject(reason) {\n        this.assertPending();\n        this._status = 'rejected';\n        this._reject(reason);\n    }\n}\nexports.RemotePromise = RemotePromise;\nexports.default = RemotePromise;\n","import {\n  type TrackedStorage,\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedMap<K = unknown, V = unknown> implements Map<K, V> {\n  private collection = createStorage(null, () => false);\n\n  private storages: Map<K, TrackedStorage<null>> = new Map();\n\n  private vals: Map<K, V>;\n\n  private readStorageFor(key: K): void {\n    const { storages } = this;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  private dirtyStorageFor(key: K): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor();\n  constructor(entries: readonly (readonly [K, V])[] | null);\n  constructor(iterable: Iterable<readonly [K, V]>);\n  constructor(\n    existing?:\n      | readonly (readonly [K, V])[]\n      | Iterable<readonly [K, V]>\n      | null\n      | undefined,\n  ) {\n    // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n    // constructor for the no-value constructor. This resolves that.\n    this.vals = existing ? new Map(existing) : new Map();\n  }\n\n  // **** KEY GETTERS ****\n  get(key: K): V | undefined {\n    // entangle the storage for the key\n    this.readStorageFor(key);\n\n    return this.vals.get(key);\n  }\n\n  has(key: K): boolean {\n    this.readStorageFor(key);\n\n    return this.vals.has(key);\n  }\n\n  // **** ALL GETTERS ****\n  entries(): IterableIterator<[K, V]> {\n    getValue(this.collection);\n\n    return this.vals.entries();\n  }\n\n  keys(): IterableIterator<K> {\n    getValue(this.collection);\n\n    return this.vals.keys();\n  }\n\n  values(): IterableIterator<V> {\n    getValue(this.collection);\n\n    return this.vals.values();\n  }\n\n  forEach(fn: (value: V, key: K, map: Map<K, V>) => void): void {\n    getValue(this.collection);\n\n    this.vals.forEach(fn);\n  }\n\n  get size(): number {\n    getValue(this.collection);\n\n    return this.vals.size;\n  }\n\n  [Symbol.iterator](): IterableIterator<[K, V]> {\n    getValue(this.collection);\n\n    return this.vals[Symbol.iterator]();\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n\n  // **** KEY SETTERS ****\n  set(key: K, value: V): this {\n    this.dirtyStorageFor(key);\n    setValue(this.collection, null);\n\n    this.vals.set(key, value);\n\n    return this;\n  }\n\n  delete(key: K): boolean {\n    this.dirtyStorageFor(key);\n    setValue(this.collection, null);\n\n    this.storages.delete(key);\n    return this.vals.delete(key);\n  }\n\n  // **** ALL SETTERS ****\n  clear(): void {\n    this.storages.forEach((s) => setValue(s, null));\n    this.storages.clear();\n\n    setValue(this.collection, null);\n    this.vals.clear();\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedMap.prototype, Map.prototype);\n\nexport class TrackedWeakMap<K extends object = object, V = unknown>\n  implements WeakMap<K, V>\n{\n  private storages: WeakMap<K, TrackedStorage<null>> = new WeakMap();\n\n  private vals: WeakMap<K, V>;\n\n  private readStorageFor(key: K): void {\n    const { storages } = this;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  private dirtyStorageFor(key: K): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor();\n  constructor(iterable: Iterable<readonly [K, V]>);\n  constructor(entries: readonly [K, V][] | null);\n  constructor(\n    existing?: readonly [K, V][] | Iterable<readonly [K, V]> | null | undefined,\n  ) {\n    // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n    // constructor for the no-value constructor. This resolves that.\n    this.vals = existing ? new WeakMap(existing) : new WeakMap();\n  }\n\n  get(key: K): V | undefined {\n    this.readStorageFor(key);\n\n    return this.vals.get(key);\n  }\n\n  has(key: K): boolean {\n    this.readStorageFor(key);\n\n    return this.vals.has(key);\n  }\n\n  set(key: K, value: V): this {\n    this.dirtyStorageFor(key);\n\n    this.vals.set(key, value);\n\n    return this;\n  }\n\n  delete(key: K): boolean {\n    this.dirtyStorageFor(key);\n\n    this.storages.delete(key);\n    return this.vals.delete(key);\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakMap.prototype, WeakMap.prototype);\n","import {\n  type TrackedStorage,\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedSet<T = unknown> implements Set<T> {\n  private collection = createStorage(null, () => false);\n\n  private storages: Map<T, TrackedStorage<null>> = new Map();\n\n  private vals: Set<T>;\n\n  private storageFor(key: T): TrackedStorage<null> {\n    const storages = this.storages;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    return storage;\n  }\n\n  private dirtyStorageFor(key: T): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor();\n  constructor(values: readonly T[] | null);\n  constructor(iterable: Iterable<T>);\n  constructor(existing?: readonly T[] | Iterable<T> | null | undefined) {\n    this.vals = new Set(existing);\n  }\n\n  // **** KEY GETTERS ****\n  has(value: T): boolean {\n    getValue(this.storageFor(value));\n\n    return this.vals.has(value);\n  }\n\n  // **** ALL GETTERS ****\n  entries(): IterableIterator<[T, T]> {\n    getValue(this.collection);\n\n    return this.vals.entries();\n  }\n\n  keys(): IterableIterator<T> {\n    getValue(this.collection);\n\n    return this.vals.keys();\n  }\n\n  values(): IterableIterator<T> {\n    getValue(this.collection);\n\n    return this.vals.values();\n  }\n\n  forEach(fn: (value1: T, value2: T, set: Set<T>) => void): void {\n    getValue(this.collection);\n\n    this.vals.forEach(fn);\n  }\n\n  get size(): number {\n    getValue(this.collection);\n\n    return this.vals.size;\n  }\n\n  [Symbol.iterator](): IterableIterator<T> {\n    getValue(this.collection);\n\n    return this.vals[Symbol.iterator]();\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n\n  // **** KEY SETTERS ****\n  add(value: T): this {\n    this.dirtyStorageFor(value);\n    setValue(this.collection, null);\n\n    this.vals.add(value);\n\n    return this;\n  }\n\n  delete(value: T): boolean {\n    this.dirtyStorageFor(value);\n    setValue(this.collection, null);\n\n    this.storages.delete(value);\n    return this.vals.delete(value);\n  }\n\n  // **** ALL SETTERS ****\n  clear(): void {\n    this.storages.forEach((s) => setValue(s, null));\n    setValue(this.collection, null);\n\n    this.storages.clear();\n    this.vals.clear();\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedSet.prototype, Set.prototype);\n\nexport class TrackedWeakSet<T extends object = object> implements WeakSet<T> {\n  private storages: WeakMap<T, TrackedStorage<null>> = new WeakMap();\n\n  private vals: WeakSet<T>;\n\n  private storageFor(key: T): TrackedStorage<null> {\n    const storages = this.storages;\n    let storage = storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      storages.set(key, storage);\n    }\n\n    return storage;\n  }\n\n  private dirtyStorageFor(key: T): void {\n    const storage = this.storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  constructor(values?: readonly T[] | null) {\n    this.vals = new WeakSet(values);\n  }\n\n  has(value: T): boolean {\n    getValue(this.storageFor(value));\n\n    return this.vals.has(value);\n  }\n\n  add(value: T): this {\n    // Add to vals first to get better error message\n    this.vals.add(value);\n\n    this.dirtyStorageFor(value);\n\n    return this;\n  }\n\n  delete(value: T): boolean {\n    this.dirtyStorageFor(value);\n\n    this.storages.delete(value);\n    return this.vals.delete(value);\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.vals[Symbol.toStringTag];\n  }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakSet.prototype, WeakSet.prototype);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// Unfortunately, TypeScript's ability to do inference *or* type-checking in a\n// `Proxy`'s body is very limited, so we have to use a number of casts `as any`\n// to make the internal accesses work. The type safety of these is guaranteed at\n// the *call site* instead of within the body: you cannot do `Array.blah` in TS,\n// and it will blow up in JS in exactly the same way, so it is safe to assume\n// that properties within the getter have the correct type in TS.\n\nimport {\n  type TrackedStorage,\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nconst ARRAY_GETTER_METHODS = new Set<string | symbol | number>([\n  Symbol.iterator,\n  'concat',\n  'entries',\n  'every',\n  'filter',\n  'find',\n  'findIndex',\n  'flat',\n  'flatMap',\n  'forEach',\n  'includes',\n  'indexOf',\n  'join',\n  'keys',\n  'lastIndexOf',\n  'map',\n  'reduce',\n  'reduceRight',\n  'slice',\n  'some',\n  'values',\n]);\n\n// For these methods, `Array` itself immediately gets the `.length` to return\n// after invoking them.\nconst ARRAY_WRITE_THEN_READ_METHODS = new Set<string | symbol>([\n  'fill',\n  'push',\n  'unshift',\n]);\n\nfunction convertToInt(prop: number | string | symbol): number | null {\n  if (typeof prop === 'symbol') return null;\n\n  const num = Number(prop);\n\n  if (isNaN(num)) return null;\n\n  return num % 1 === 0 ? num : null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nclass TrackedArray<T = unknown> {\n  /**\n   * Creates an array from an iterable object.\n   * @param iterable An iterable object to convert to an array.\n   */\n  static from<T>(iterable: Iterable<T> | ArrayLike<T>): TrackedArray<T>;\n\n  /**\n   * Creates an array from an iterable object.\n   * @param iterable An iterable object to convert to an array.\n   * @param mapfn A mapping function to call on every element of the array.\n   * @param thisArg Value of 'this' used to invoke the mapfn.\n   */\n  static from<T, U>(\n    iterable: Iterable<T> | ArrayLike<T>,\n    mapfn: (v: T, k: number) => U,\n    thisArg?: unknown,\n  ): TrackedArray<U>;\n\n  static from<T, U>(\n    iterable: Iterable<T> | ArrayLike<T>,\n    mapfn?: (v: T, k: number) => U,\n    thisArg?: unknown,\n  ): TrackedArray<T> | TrackedArray<U> {\n    return mapfn\n      ? new TrackedArray(Array.from(iterable, mapfn, thisArg))\n      : new TrackedArray(Array.from(iterable));\n  }\n\n  static of<T>(...arr: T[]): TrackedArray<T> {\n    return new TrackedArray(arr);\n  }\n\n  constructor(arr: T[] = []) {\n    const clone = arr.slice();\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this;\n\n    const boundFns = new Map<string | symbol, (...args: any[]) => any>();\n\n    /**\n      Flag to track whether we have *just* intercepted a call to `.push()` or\n      `.unshift()`, since in those cases (and only those cases!) the `Array`\n      itself checks `.length` to return from the function call.\n     */\n    let nativelyAccessingLengthFromPushOrUnshift = false;\n\n    return new Proxy(clone, {\n      get(target, prop /*, _receiver */) {\n        const index = convertToInt(prop);\n\n        if (index !== null) {\n          self.#readStorageFor(index);\n          getValue(self.#collection);\n\n          return target[index];\n        }\n\n        if (prop === 'length') {\n          // If we are reading `.length`, it may be a normal user-triggered\n          // read, or it may be a read triggered by Array itself. In the latter\n          // case, it is because we have just done `.push()` or `.unshift()`; in\n          // that case it is safe not to mark this as a *read* operation, since\n          // calling `.push()` or `.unshift()` cannot otherwise be part of a\n          // \"read\" operation safely, and if done during an *existing* read\n          // (e.g. if the user has already checked `.length` *prior* to this),\n          // that will still trigger the mutation-after-consumption assertion.\n          if (nativelyAccessingLengthFromPushOrUnshift) {\n            nativelyAccessingLengthFromPushOrUnshift = false;\n          } else {\n            getValue(self.#collection);\n          }\n\n          return target[prop];\n        }\n\n        // Here, track that we are doing a `.push()` or `.unshift()` by setting\n        // the flag to `true` so that when the `.length` is read by `Array` (see\n        // immediately above), it knows not to dirty the collection.\n        if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) {\n          nativelyAccessingLengthFromPushOrUnshift = true;\n        }\n\n        if (ARRAY_GETTER_METHODS.has(prop)) {\n          let fn = boundFns.get(prop);\n\n          if (fn === undefined) {\n            fn = (...args) => {\n              getValue(self.#collection);\n              return (target as any)[prop](...args);\n            };\n\n            boundFns.set(prop, fn);\n          }\n\n          return fn;\n        }\n\n        return (target as any)[prop];\n      },\n\n      set(target, prop, value /*, _receiver */) {\n        (target as any)[prop] = value;\n\n        const index = convertToInt(prop);\n\n        if (index !== null) {\n          self.#dirtyStorageFor(index);\n          self.#dirtyCollection();\n        } else if (prop === 'length') {\n          self.#dirtyCollection();\n        }\n\n        return true;\n      },\n\n      getPrototypeOf() {\n        return TrackedArray.prototype;\n      },\n    }) as TrackedArray<T>;\n  }\n\n  #collection = createStorage(null, () => false);\n\n  #storages = new Map<number, TrackedStorage<null>>();\n\n  #readStorageFor(index: number) {\n    let storage = this.#storages.get(index);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      this.#storages.set(index, storage);\n    }\n\n    getValue(storage);\n  }\n\n  #dirtyStorageFor(index: number): void {\n    const storage = this.#storages.get(index);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  #dirtyCollection() {\n    setValue(this.#collection, null);\n    this.#storages.clear();\n  }\n}\n\n// This rule is correct in the general case, but it doesn't understand\n// declaration merging, which is how we're using the interface here. This says\n// `TrackedArray` acts just like `Array<T>`, but also has the properties\n// declared via the `class` declaration above -- but without the cost of a\n// subclass, which is much slower that the proxied array behavior. That is: a\n// `TrackedArray` *is* an `Array`, just with a proxy in front of accessors and\n// setters, rather than a subclass of an `Array` which would be de-optimized by\n// the browsers.\n//\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface TrackedArray<T = unknown> extends Array<T> {}\n\nexport default TrackedArray;\n\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedArray.prototype, Array.prototype);\n","import {\n  createStorage,\n  getValue,\n  setValue,\n} from 'ember-tracked-storage-polyfill';\n\nclass TrackedObjectImplementation<T extends object> {\n  static fromEntries<T = unknown>(\n    entries: Iterable<readonly [PropertyKey, T]>,\n  ) {\n    return new TrackedObject(Object.fromEntries(entries));\n  }\n\n  constructor(...args: Record<PropertyKey, never> extends T ? [] | [T] : [T]);\n  constructor(obj = {}) {\n    const proto = Object.getPrototypeOf(obj);\n    const descs = Object.getOwnPropertyDescriptors(obj);\n\n    const clone = Object.create(proto);\n\n    for (const prop in descs) {\n      Object.defineProperty(clone, prop, descs[prop]!);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this;\n\n    return new Proxy(clone, {\n      get(target, prop) {\n        self.#readStorageFor(prop);\n\n        return target[prop];\n      },\n\n      has(target, prop) {\n        self.#readStorageFor(prop);\n\n        return prop in target;\n      },\n\n      ownKeys(target: T) {\n        getValue(self.#collection);\n\n        return Reflect.ownKeys(target);\n      },\n\n      set(target, prop, value) {\n        target[prop] = value;\n\n        self.#dirtyStorageFor(prop);\n        self.#dirtyCollection();\n\n        return true;\n      },\n\n      deleteProperty(target, prop) {\n        if (prop in target) {\n          delete target[prop];\n          self.#dirtyStorageFor(prop);\n          self.#storages.delete(prop);\n          self.#dirtyCollection();\n        }\n\n        return true;\n      },\n\n      getPrototypeOf() {\n        return TrackedObjectImplementation.prototype;\n      },\n    });\n  }\n\n  #storages = new Map();\n\n  #collection = createStorage(null, () => false);\n\n  #readStorageFor(key: PropertyKey) {\n    let storage = this.#storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      this.#storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  #dirtyStorageFor(key: PropertyKey) {\n    const storage = this.#storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  #dirtyCollection() {\n    setValue(this.#collection, null);\n  }\n}\n\nexport interface TrackedObject {\n  fromEntries<T = unknown>(\n    entries: Iterable<readonly [PropertyKey, T]>,\n  ): {\n    [k: string]: T;\n  };\n\n  new <T extends Record<PropertyKey, unknown>>(\n    ...args: Record<PropertyKey, never> extends T ? [] | [T] : [T]\n  ): T;\n}\n\nexport const TrackedObject: TrackedObject =\n  TrackedObjectImplementation as unknown as TrackedObject;\n\nexport default TrackedObject;\n","import { tracked as glimmerTracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { TrackedMap, TrackedWeakMap } from './map.ts';\nimport { TrackedSet, TrackedWeakSet } from './set.ts';\nimport TrackedArray from './array.ts';\nimport TrackedObject from './object.ts';\n\nexport default function tracked<T>(obj: T[] | typeof Array): TrackedArray<T>;\n\nexport default function tracked<T>(obj: Set<T> | typeof Set): TrackedSet<T>;\n\nexport default function tracked<T, U>(\n  obj: Map<T, U> | typeof Map,\n): TrackedMap<T, U>;\n\nexport default function tracked<T extends object>(\n  obj: WeakSet<T> | typeof WeakSet,\n): TrackedWeakSet<T>;\n\nexport default function tracked<T extends object, U>(\n  obj: WeakMap<T, U> | typeof WeakMap,\n): TrackedWeakMap<T, U>;\n\nexport default function tracked<T extends object>(obj: T | typeof Object): T;\n\nexport default function tracked(\n  obj: object,\n  key: string | symbol,\n  desc?: PropertyDescriptor,\n): void;\n\nexport default function tracked(\n  obj: object,\n  key?: string | symbol,\n  desc?: PropertyDescriptor,\n): unknown {\n  if (key !== undefined && desc !== undefined) {\n    return glimmerTracked(obj, key, desc);\n  }\n\n  if (Array.isArray(obj)) {\n    return new TrackedArray(obj);\n  }\n\n  switch (obj) {\n    case Object:\n      return new TrackedObject();\n    case Array:\n      return new TrackedArray();\n    case Map:\n      return new TrackedMap();\n    case WeakMap:\n      return new TrackedWeakMap();\n    case Set:\n      return new TrackedSet();\n    case WeakSet:\n      return new TrackedWeakSet();\n  }\n\n  if (obj instanceof Map) {\n    return new TrackedMap(obj);\n  } else if (obj instanceof WeakMap) {\n    return new TrackedWeakMap();\n  } else if (obj instanceof Set) {\n    return new TrackedSet(obj);\n  } else if (obj instanceof WeakSet) {\n    return new TrackedWeakSet();\n  } else {\n    assert(\n      `You must either use tracked as a field decorator, or to wrap built-in class instances:\n\n      class Example {\n        @tracked field = 123;\n\n        map = tracked(Map);\n        map = tracked(new Map());\n      }`,\n      typeof obj === 'object' && obj !== null,\n    );\n\n    return new TrackedObject(obj as Record<PropertyKey, unknown>);\n  }\n}\n","import {\n  PRIMITIVE, ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  PRIMITIVE, ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type)\n          return as([type, [...value]], value);\n  \n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{lossy?: boolean}?} options an object with a `lossy` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer: any[]}?} options an object with a transfoer property.\n *  This is currently not supported, all values are always cloned.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  structuredClone :\n  (any, options) => deserialize(serialize(any, options));\n\nexport {deserialize, serialize};\n","export default function isObject<T>(val: T): boolean {\n  return (\n    val !== null &&\n    typeof val === 'object' &&\n    !(val instanceof Date || val instanceof RegExp) &&\n    !Array.isArray(val)\n  );\n}\n","/* import { IChange } from '../types'; */\nimport isObject from '../utils/is-object';\n\nexport const VALUE = Symbol('__value__');\n\nexport default class Change {\n  [VALUE]: unknown;\n\n  constructor(value: unknown) {\n    this[VALUE] = value;\n  }\n}\n\n// TODO: not sure why this function type guard isn't working\nexport const isChange = (maybeChange: unknown): maybeChange is Change =>\n  isObject(maybeChange) && VALUE in (maybeChange as any);\n\nexport function getChangeValue(maybeChange: Change | unknown): any {\n  if (isChange(maybeChange)) {\n    return maybeChange[VALUE];\n  }\n}\n","import type { IErr, ValidationErr } from '../types';\n\nexport default class Err implements IErr<any> {\n  value: any;\n  validation: ValidationErr | ValidationErr[];\n\n  constructor(value: any, validation: ValidationErr | ValidationErr[]) {\n    this.value = value;\n    this.validation = validation;\n  }\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\nimport Err from '../-private/err';\nimport type { PublicErrors } from '../types';\n\n/**\n * traverse through target and return leaf nodes with `value` property and key as 'person.name'\n * Only detects key paths with Changes\n *\n * @method getKeyValues\n * @return {Array} [{ 'person.name': value }]\n */\nexport function getKeyValues<T extends Record<string, any>>(\n  obj: T,\n  keysUpToValue: Array<string> = []\n): Record<string, any>[] {\n  const map = [];\n\n  for (let key in obj) {\n    if (obj[key] && isObject(obj[key])) {\n      if (isChange(obj[key])) {\n        map.push({ key: [...keysUpToValue, key].join('.'), value: getChangeValue(obj[key]) });\n      } else {\n        map.push(...getKeyValues(obj[key], [...keysUpToValue, key]));\n      }\n    }\n  }\n\n  return map;\n}\n\n/**\n * traverse through target and return leaf nodes with `value` property and key as 'person.name'\n *\n * @method getKeyErrorValues\n * @return {Array} [{ key: 'person.name', validation: '', value: '' }]\n */\nexport function getKeyErrorValues<T extends Record<string, any>>(\n  obj: T,\n  keysUpToValue: Array<string> = []\n): PublicErrors {\n  let map = [];\n\n  for (let key in obj) {\n    if (obj[key] && isObject(obj[key])) {\n      if (\n        Object.prototype.hasOwnProperty.call(obj[key], 'value') &&\n        (obj[key] as any) instanceof Err\n      ) {\n        map.push({\n          key: [...keysUpToValue, key].join('.'),\n          validation: obj[key].validation,\n          value: obj[key].value\n        });\n      } else if (key !== 'value') {\n        map.push(...getKeyErrorValues(obj[key], [...keysUpToValue, key]));\n      }\n    }\n  }\n\n  return map;\n}\n","import isObject from './is-object';\n\nfunction isPromiseLike(obj: any): boolean {\n  return (\n    !!obj &&\n    !!obj.then &&\n    !!obj.catch &&\n    !!obj.finally &&\n    typeof obj.then === 'function' &&\n    typeof obj.catch === 'function' &&\n    typeof obj.finally === 'function'\n  );\n}\n\nexport default function isPromise(obj: any): boolean {\n  return isObject(obj) && isPromiseLike(obj);\n}\n","import isPromise from './is-promise';\nimport type { ValidatorMapFunc, ValidationResult, ValidatorClass } from '../types';\n\n/**\n * Rejects `true` values from an array of validations. Returns `true` when there\n * are no errors, or the error object if there are errors.\n *\n * @private\n * @param  {Array} validations\n * @return {Promise<boolean|Any>}\n */\nasync function handleValidationsAsync(\n  validations: Array<ValidationResult | Promise<ValidationResult>>\n): Promise<any> {\n  try {\n    const result = await Promise.all(validations);\n\n    const maybeFailed = result.filter((val) => typeof val !== 'boolean' && val);\n    return maybeFailed.length === 0 || maybeFailed;\n  } catch (e) {\n    return e;\n  }\n}\n\n/**\n * Rejects `true` values from an array of validations. Returns `true` when there\n * are no errors, or the error object if there are errors.\n *\n * @private\n * @param  {Array} validations\n * @return {boolean|Any}\n */\nfunction handleValidationsSync(validations: Array<ValidationResult>): boolean | any {\n  const maybeFailed = validations.filter((val) => typeof val !== 'boolean' && val);\n  return maybeFailed.length === 0 || maybeFailed;\n}\n/**\n * Handles an array of validators and returns Promise.all if any value is a\n * Promise.\n *\n * @public\n * @param  {Array} validators Array of validator functions\n * @param  {String} options.key\n * @param  {Any} options.newValue\n * @param  {Any} options.oldValue\n * @param  {Object} options.changes\n * @param  {Object} options.content\n * @return {Promise|boolean|Any}\n */\nexport default function handleMultipleValidations(\n  validators: Array<ValidatorMapFunc | ValidatorClass>,\n  { key, newValue, oldValue, changes, content }: { [s: string]: any }\n): boolean | any {\n  let validations: Array<ValidationResult | Promise<ValidationResult>> = Array.from(\n    validators.map(\n      (\n        validator: ValidatorMapFunc | ValidatorClass\n      ): ValidationResult | Promise<ValidationResult> => {\n        const isValidatorClass = (maybeClass: unknown): maybeClass is ValidatorClass =>\n          !!(maybeClass as Record<string, any>).validate;\n        if (validator && isValidatorClass(validator)) {\n          validator = validator.validate.bind(validator);\n        }\n\n        return validator(key, newValue, oldValue, changes, content);\n      }\n    )\n  );\n\n  if (validations.some(isPromise)) {\n    return Promise.all(validations).then(handleValidationsAsync);\n  }\n\n  return handleValidationsSync(validations as Array<ValidationResult>);\n}\n","import { isChange, getChangeValue } from '../-private/change';\n\n/**\n * Handles both single key or nested string keys ('person.name')\n *\n * @method getDeep\n */\nexport default function getDeep<T extends Record<string, any>>(\n  root: T,\n  path: string | string[]\n): any {\n  let obj: T = root;\n\n  if (path.indexOf('.') === -1) {\n    return obj[path as string];\n  }\n  const parts: string[] = typeof path === 'string' ? path.split('.') : path;\n\n  for (let i = 0; i < parts.length; i++) {\n    if (obj === undefined || obj === null) {\n      return undefined;\n    }\n\n    // next iteration has next level\n    obj = obj[parts[i]];\n  }\n\n  return obj;\n}\n\n/**\n * Returns subObject while skipping `Change` instances\n *\n * @method getSubObject\n */\nexport function getSubObject<T extends Record<string, any>>(root: T, path: string | string[]): any {\n  let obj: T = root;\n\n  if (path.indexOf('.') === -1) {\n    return obj[path as string];\n  }\n\n  const parts: string[] = typeof path === 'string' ? path.split('.') : path;\n\n  for (let i = 0; i < parts.length; i++) {\n    if (obj === undefined || obj === null) {\n      return undefined;\n    }\n\n    if (isChange(obj[parts[i]])) {\n      obj = getChangeValue(obj[parts[i]]);\n    } else {\n      obj = obj[parts[i]];\n    }\n  }\n\n  return obj;\n}\n","import handleMultipleValidations from './handle-multiple-validations';\nimport isPromise from './is-promise';\nimport isObject from './is-object';\nimport type {\n  ValidatorAction,\n  ValidatorMapFunc,\n  ValidatorClass,\n  ValidationResult,\n  ValidatorMap\n} from '../types';\nimport get from './get-deep';\n\n/**\n * returns a closure to lookup and validate k/v pairs set on a changeset\n *\n * @method lookupValidator\n * @param validationMap\n */\nexport default function lookupValidator(validationMap: ValidatorMap): ValidatorAction {\n  return ({ key, newValue, oldValue, changes, content }) => {\n    const validations = validationMap || {};\n    let validator:\n      | ValidatorMapFunc\n      | ValidatorMapFunc[]\n      | ValidatorClass\n      | ValidatorClass[]\n      | Array<ValidatorMapFunc | ValidatorClass> = get(validations, key);\n    const isValidatorClass = (maybeClass: unknown): maybeClass is ValidatorClass =>\n      !!(maybeClass as Record<string, any>).validate;\n    if (validator && isValidatorClass(validator)) {\n      validator = validator.validate.bind(validator);\n    }\n\n    if (!validator || isObject(validator)) {\n      return true;\n    }\n\n    let validation: ValidationResult | Promise<ValidationResult>;\n    if (Array.isArray(validator)) {\n      validation = handleMultipleValidations(validator, {\n        key,\n        newValue,\n        oldValue,\n        changes,\n        content\n      });\n    } else {\n      validation = (validator as ValidatorMapFunc)(key, newValue, oldValue, changes, content);\n    }\n\n    return isPromise(validation)\n      ? (validation as Promise<ValidationResult>).then((result) => {\n          return result;\n        })\n      : validation;\n  };\n}\n","// this statefull class holds and notifies\n\nexport default class Notifier<T extends any[]> {\n  listeners: ((...args: T) => void)[];\n\n  constructor() {\n    this.listeners = [];\n  }\n\n  addListener(callback: (...args: T) => void) {\n    this.listeners.push(callback);\n    return () => this.removeListener(callback);\n  }\n\n  removeListener(callback: (...args: T) => void) {\n    for (let i = 0; i < this.listeners.length; i++) {\n      if (this.listeners[i] === callback) {\n        this.listeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n\n  trigger(...args: T) {\n    this.listeners.forEach((callback) => callback(...args));\n  }\n}\n","import Notifier from './notifier';\n\nexport function notifierForEvent(object: any, eventName: string) {\n  if (object._eventedNotifiers === undefined) {\n    object._eventedNotifiers = {};\n  }\n\n  let notifier = object._eventedNotifiers[eventName];\n\n  if (!notifier) {\n    notifier = object._eventedNotifiers[eventName] = new Notifier();\n  }\n\n  return notifier;\n}\n","import { getChangeValue, isChange } from '../-private/change';\n\nexport function hasKey(\n  record: Record<string, any>,\n  path: string,\n  safeGet: (obj: Record<string, any>, key: string) => any\n): boolean {\n  const keys = path.split('.');\n\n  let obj = record;\n  for (const key of keys) {\n    if (!obj || !Object.prototype.hasOwnProperty.call(obj, key)) {\n      return false;\n    }\n\n    obj = safeGet(obj, key);\n    if (isChange(obj)) {\n      obj = getChangeValue(obj);\n    }\n  }\n\n  return true;\n}\n\nexport function pathInChanges(\n  record: Record<string, any>,\n  path: string,\n  safeGet: (obj: Record<string, any>, key: string) => any\n): boolean {\n  if (isChange(record)) {\n    return false;\n  }\n\n  const keys = path.split('.');\n\n  let obj = record;\n  for (const key of keys) {\n    if (!obj) {\n      return false;\n    }\n\n    if (keys[keys.length - 1] !== key && isChange(safeGet(obj, key))) {\n      return true;\n    }\n\n    obj = safeGet(obj, key);\n  }\n\n  return false;\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\n\n/**\n * traverse through target and unset `value` from leaf key so can access normally\n * {\n *  name: Change {\n *    value: 'Charles'\n *  }\n * }\n *\n * to\n *\n * {\n *  name: 'Charles'\n * }\n *\n * Shallow copy here is fine because we are swapping out the leaf nested object\n * rather than mutating a property in something with reference\n *\n * @method normalizeObject\n * @param {Object} target\n * @return {Object}\n */\nexport default function normalizeObject<T extends { [key: string]: any }>(\n  target: T,\n  isObj: (...args: unknown[]) => unknown = isObject\n): T {\n  if (!target || !isObj(target)) {\n    return target;\n  }\n\n  if (isChange(target)) {\n    return getChangeValue(target);\n  }\n\n  let obj = { ...target };\n\n  for (let key in obj) {\n    const next: any = obj[key];\n    if (next && isObj(next)) {\n      if (isChange(next)) {\n        obj[key] = getChangeValue(next);\n      } else {\n        try {\n          JSON.stringify(next);\n        } catch (e) {\n          break;\n        }\n        obj[key] = normalizeObject(next);\n      }\n    }\n  }\n\n  return obj;\n}\n","import isObject from './is-object';\nimport { isChange } from '../-private/change';\n\nexport function hasChanges(changes: Record<string, any>): boolean {\n  for (let key in changes) {\n    if (isChange(changes[key])) {\n      return true;\n    }\n\n    if (isObject(changes[key])) {\n      const isTruthy = hasChanges(changes[key]);\n      if (isTruthy) {\n        return isTruthy;\n      }\n    }\n  }\n\n  return false;\n}\n","let getOwnPropertyDescriptors: (obj: { [x: string]: any }) => { [x: string]: PropertyDescriptor };\n\nif (Object.getOwnPropertyDescriptors !== undefined) {\n  getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;\n} else {\n  getOwnPropertyDescriptors = function (obj: object) {\n    let desc: Record<string, any> = {};\n\n    Object.keys(obj).forEach((key) => {\n      desc[key] = Object.getOwnPropertyDescriptor(obj, key);\n    });\n\n    return desc;\n  };\n}\n\n// keep getters and setters\nexport default function pureAssign(...objects: object[]): object {\n  return objects.reduce((acc, obj) => {\n    return Object.defineProperties(acc, getOwnPropertyDescriptors(obj));\n  }, {});\n}\n","import isObject from './is-object';\n\nfunction flatten(\n  validatorMap: Record<string, any>,\n  obj: Record<string, any>,\n  keys: string[],\n  keysUpToFunction: Array<string> = []\n): object {\n  for (let key of keys) {\n    const value: any = validatorMap[key];\n    if (typeof value.validate === 'function') {\n      // class with .validate function\n      obj[key] = value;\n    } else if (isObject(value)) {\n      flatten(value, obj, Object.keys(value), [...keysUpToFunction, key]);\n    } else if (typeof value === 'function') {\n      const dotSeparatedKeys = [...keysUpToFunction, key].join('.');\n      obj[dotSeparatedKeys] = value;\n    } else if (Array.isArray(value)) {\n      const isAllFuncs: boolean = value.every(\n        (item) => typeof item === 'function' || typeof item.validate === 'function'\n      );\n      if (isAllFuncs) {\n        const dotSeparatedKeys = [...keysUpToFunction, key].join('.');\n        obj[dotSeparatedKeys] = value;\n      }\n    }\n  }\n\n  return obj;\n}\n\n/**\n * With nested validations, we flatten to a dot separated 'user.email': validationFunc\n * Once doing so, validation will happen with a single level key or dot separated key\n *\n * @method flattenValidations\n * @return {object}\n */\nexport function flattenValidations(validatorMap: Record<string, any>): object {\n  if (!validatorMap) {\n    return {};\n  }\n\n  let obj: Record<string, any> = {};\n  return flatten(validatorMap, obj, Object.keys(validatorMap));\n}\n","export const CHANGESET = '__CHANGESET__';\n\nexport default function isChangeset(changeset: any): boolean {\n  return changeset && changeset['__changeset__'] === CHANGESET;\n}\n","export default function keyInObject(obj: any, key: string): boolean {\n  let [baseKey, ...keys] = key.split('.');\n\n  if (!baseKey || !(baseKey in obj)) {\n    return false;\n  }\n\n  if (!keys.length) {\n    return baseKey in obj;\n  }\n\n  let value = obj[baseKey];\n  if (value !== null && typeof value === 'object') {\n    return keyInObject(obj[baseKey], keys.join('.'));\n  }\n\n  return false;\n}\n","export function isArrayObject(obj: Record<string, any>) {\n  if (!obj) return false;\n\n  let maybeIndicies = Object.keys(obj);\n\n  return maybeIndicies.every((key) => Number.isInteger(parseInt(key, 10)));\n}\n\nexport function arrayToObject(array: any[]): Record<string, any> {\n  return array.reduce((obj, item, index) => {\n    obj[index] = item;\n    return obj;\n  }, {} as Record<string, any>);\n}\n\nexport function objectToArray(obj: Record<string, any>): any[] {\n  let result: any[] = [];\n\n  for (let [index, value] of Object.entries(obj)) {\n    result[parseInt(index, 10)] = value;\n  }\n\n  return result;\n}\n","import Change, { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\nimport { isArrayObject } from './array-object';\n\ninterface Options {\n  safeSet?: any;\n  safeGet?: any;\n}\n\nfunction split(path: string): string[] {\n  const keys = path.split('.');\n\n  return keys;\n}\n\nfunction findSiblings(target: any, keys: string[]) {\n  const [leafKey] = keys.slice(-1);\n  const remaining = Object.keys(target)\n    .filter((k) => k !== leafKey)\n    .reduce((acc, key) => {\n      acc[key] = target[key];\n      return acc;\n    }, Object.create(null));\n\n  return { ...remaining };\n}\n\nfunction isValidKey(key: unknown) {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n}\n\n/**\n * TODO: consider\n * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts\n *\n * Handles both single path or nested string paths ('person.name')\n *\n * @method setDeep\n */\nexport default function setDeep(\n  target: any,\n  path: string,\n  value: unknown,\n  options: Options = { safeSet: undefined, safeGet: undefined }\n): any {\n  const keys = split(path).filter(isValidKey);\n  // We will mutate target and through complex reference, we will mutate the orig\n  let orig = target;\n\n  options.safeSet =\n    options.safeSet ||\n    function (obj: any, key: string, value: unknown): any {\n      return (obj[key] = value);\n    };\n  options.safeGet =\n    options.safeGet ||\n    function (obj: any, key: string): any {\n      return obj ? obj[key] : obj;\n    };\n\n  if (keys.length === 1) {\n    options.safeSet(target, path, value);\n    return target;\n  }\n\n  for (let i = 0; i < keys.length; i++) {\n    let prop = keys[i];\n\n    if (Array.isArray(target) && parseInt(prop, 10) < 0) {\n      throw new Error(\n        'Negative indices are not allowed as arrays do not serialize values at negative indices'\n      );\n    }\n\n    const isObj = isObject(options.safeGet(target, prop));\n    const isArray = Array.isArray(options.safeGet(target, prop));\n    const isComplex = isObj || isArray;\n\n    if (!isComplex) {\n      options.safeSet(target, prop, {});\n    } else if (isComplex && isChange(options.safeGet(target, prop))) {\n      let changeValue = getChangeValue(options.safeGet(target, prop));\n\n      if (isObject(changeValue)) {\n        // if an object, we don't want to lose sibling keys\n        const siblings = findSiblings(changeValue, keys);\n\n        const resolvedValue = isChange(value) ? getChangeValue(value) : value;\n\n        const isArrayLike = Array.isArray(target) || isArrayObject(target);\n        const nestedKeys = isArrayLike\n          ? keys.slice(i + 1, keys.length).join('.') // remove first key segment as well as the index\n          : keys.slice(1, keys.length).join('.'); // remove first key segment\n\n        let newValue;\n\n        // if the resolved value was deleted (via setting to null or undefined),\n        // there is no need to setDeep. We can short-circuit that and set\n        // newValue directly because of the shallow value\n        if (isArrayLike && undefined === resolvedValue) {\n          newValue = resolvedValue;\n        } else if (i === keys.length - 1) {\n          // If last key, this is the final value\n          newValue = resolvedValue;\n        } else {\n          newValue = setDeep(siblings, nestedKeys, resolvedValue, options);\n        }\n\n        options.safeSet(target, prop, new Change(newValue));\n\n        // since we are done with the `path`, we can terminate the for loop and return control\n        break;\n      } else {\n        // we don't want to merge new changes with a Change instance higher up in the obj tree\n        // thus we nullify the current Change instance to\n        options.safeSet(target, prop, {});\n      }\n    }\n\n    // last iteration, set and return control\n    if (i === keys.length - 1) {\n      options.safeSet(target, prop, value);\n\n      break;\n    }\n\n    // assign next level of object for next loop\n    target = options.safeGet(target, prop);\n  }\n\n  return orig;\n}\n","import setDeep from './set-deep';\n\nconst { keys } = Object;\n\n/**\n * Given an array of objects, merge their keys into a new object and\n * return the new object.\n */\nexport default function mergeNested<T>(...objects: Array<{ [key: string]: T }>): {\n  [key: string]: T;\n} {\n  let finalObj = {};\n\n  objects.forEach((obj) => keys(obj).forEach((key) => setDeep(finalObj, key, obj[key])));\n\n  return finalObj;\n}\n","export function buildOldValues(\n  content: any,\n  changes: Record<string, any>[],\n  getDeep: (obj: any, key: string) => any\n): object {\n  const obj = Object.create(null);\n\n  for (let change of changes) {\n    obj[change.key] = getDeep(content, change.key);\n  }\n\n  return obj;\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport normalizeObject from './normalize-object';\nimport { isArrayObject, objectToArray, arrayToObject } from './array-object';\n\ninterface Options {\n  safeGet: any;\n  safeSet: any;\n  propertyIsUnsafe?: any;\n  getKeys?: (record: Record<string, unknown>) => string[];\n}\n\nfunction isNonNullObject(value: any): boolean {\n  return !!value && typeof value === 'object';\n}\n\nfunction isSpecial(value: any): boolean {\n  let stringValue = Object.prototype.toString.call(value);\n\n  return stringValue === '[object RegExp]' || stringValue === '[object Date]';\n}\n\nfunction isMergeableObject(value: any): boolean {\n  return isNonNullObject(value) && !isSpecial(value);\n}\n\nfunction getEnumerableOwnPropertySymbols(target: any): any {\n  return Object.getOwnPropertySymbols\n    ? Object.getOwnPropertySymbols(target).filter((symbol) => {\n        return target.propertyIsEnumerable(symbol);\n      })\n    : [];\n}\n\nfunction getKeys(target: any) {\n  return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));\n}\n\nfunction propertyIsOnObject(object: any, property: any) {\n  try {\n    return property in object;\n  } catch (_) {\n    return false;\n  }\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nexport function propertyIsUnsafe(target: any, key: string): boolean {\n  return (\n    propertyIsOnObject(target, key) && // Properties are safe to merge if they don't exist in the target yet,\n    // unsafe if they exist up the prototype chain and also unsafe if they're nonenumerable.\n    !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key))\n  );\n}\n\n/**\n * DFS - traverse depth first until find object with `value`.  Then go back up tree and try on next key\n * Need to exhaust all possible avenues.\n *\n * @method buildPathToValue\n */\nfunction buildPathToValue(\n  source: any,\n  options: Options,\n  kv: Record<string, any>,\n  possibleKeys: string[]\n): Record<string, any> {\n  Object.keys(source).forEach((key: string): void => {\n    let possible = source[key];\n    if (possible && isChange(possible)) {\n      kv[[...possibleKeys, key].join('.')] = getChangeValue(possible);\n      return;\n    }\n\n    if (possible && typeof possible === 'object') {\n      buildPathToValue(possible, options, kv, [...possibleKeys, key]);\n    }\n  });\n\n  return kv;\n}\n\n/**\n * `source` will always have a leaf key `value` with the property we want to set\n *\n * @method mergeTargetAndSource\n */\nfunction mergeTargetAndSource(target: any, source: any, options: Required<Options>): any {\n  options.getKeys(source).forEach((key) => {\n    // proto poisoning.  So can set by nested key path 'person.name'\n    if (options.propertyIsUnsafe(target, key)) {\n      // if safeSet, we will find keys leading up to value and set\n      if (options.safeSet) {\n        const kv: Record<string, any> = buildPathToValue(source, options, {}, []);\n        // each key will be a path nested to the value `person.name.other`\n        if (Object.keys(kv).length > 0) {\n          // we found some keys!\n          for (key in kv) {\n            const val = kv[key];\n            options.safeSet(target, key, val);\n          }\n        }\n      }\n\n      return;\n    }\n\n    // else safe key on object\n    if (\n      propertyIsOnObject(target, key) &&\n      isMergeableObject(source[key]) &&\n      !isChange(source[key])\n    ) {\n      options.safeSet(\n        target,\n        key,\n        mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options)\n      );\n    } else {\n      let next = source[key];\n      if (next && isChange(next)) {\n        return options.safeSet(target, key, getChangeValue(next));\n      }\n\n      return options.safeSet(target, key, normalizeObject(next));\n    }\n  });\n\n  return target;\n}\n\n/**\n * goal is to mutate target with source's properties, ensuring we dont encounter\n * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged\n *\n * This is also adjusted for Ember peculiarities.  Specifically `options.setPath` will allows us\n * to handle properties on Proxy objects (that aren't the target's own property)\n *\n * @method mergeDeep\n */\nexport default function mergeDeep(\n  target: any,\n  source: any,\n  options: Options = {\n    safeGet: undefined,\n    safeSet: undefined,\n    propertyIsUnsafe: undefined,\n    getKeys: undefined\n  }\n): object | [any] {\n  options.getKeys = options.getKeys || getKeys;\n  options.propertyIsUnsafe = options.propertyIsUnsafe || propertyIsUnsafe;\n\n  options.safeGet =\n    options.safeGet ||\n    function (obj: Record<string, any>, key: string): Record<string, any> {\n      return obj[key];\n    };\n  options.safeSet =\n    options.safeSet ||\n    function (obj: any, key: string, value: unknown): any {\n      return (obj[key] = value);\n    };\n  let sourceIsArray = Array.isArray(source);\n  let targetIsArray = Array.isArray(target);\n  let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n  if (!sourceAndTargetTypesMatch) {\n    let sourceIsArrayLike = isArrayObject(source);\n\n    if (targetIsArray && sourceIsArrayLike) {\n      return objectToArray(\n        mergeTargetAndSource(arrayToObject(target), source, options as Required<Options>)\n      );\n    }\n\n    return source;\n  } else if (sourceIsArray) {\n    return source;\n  } else if (target === null || target === undefined) {\n    /**\n     * If the target was set to null or undefined, we always want to return the source.\n     * There is nothing to merge.\n     *\n     * Without this explicit check, typeof null === typeof {any object-like thing}\n     * which means that mergeTargetAndSource will be called, and you can't merge with null\n     */\n    return source;\n  } else {\n    return mergeTargetAndSource(target, source, options as Required<Options>);\n  }\n}\n","import type { ProxyHandler, Content } from '../types';\nimport isObjectFn from './is-object';\nimport setDeep from './set-deep';\nimport Change, { getChangeValue, isChange } from '../-private/change';\nimport normalizeObject from './normalize-object';\nimport { objectToArray, arrayToObject } from './array-object';\nimport mergeDeep from './merge-deep';\n\nconst objectProxyHandler = {\n  /**\n   * Priority of access - changes, content, then check node\n   * @property get\n   */\n  get(node: ProxyHandler, key: string): any {\n    if (typeof key === 'symbol') {\n      return;\n    }\n\n    let childValue = node.safeGet(node.changes, key);\n\n    if (isChange(childValue)) {\n      return getChangeValue(childValue);\n    }\n\n    if (isObjectFn(childValue)) {\n      let childNode: ProxyHandler | undefined = node.children[key];\n\n      if (childNode === undefined && node.content) {\n        let childContent = node.safeGet(node.content, key);\n        // cache it\n        childNode = node.children[key] = new ObjectTreeNode(childValue, childContent, node.safeGet);\n      }\n\n      // return proxy if object so we can trap further access to changes or content\n      if (childNode) {\n        return childNode.proxy;\n      }\n    }\n\n    if (typeof childValue !== 'undefined') {\n      // primitive\n      return childValue;\n    } else if (node.content) {\n      const nodeContent = node.content;\n      if (node.safeGet(nodeContent, key) !== undefined) {\n        return node.safeGet(nodeContent, key);\n      }\n    }\n\n    if (typeof node[key] === 'function' || node.hasOwnProperty(key)) {\n      return node[key];\n    }\n  },\n\n  ownKeys(node: ProxyHandler): any {\n    return Reflect.ownKeys(node.changes);\n  },\n\n  getOwnPropertyDescriptor(node: ProxyHandler, prop: string): any {\n    return Reflect.getOwnPropertyDescriptor(node.changes, prop);\n  },\n\n  has(node: ProxyHandler, prop: string): any {\n    return Reflect.has(node.changes, prop);\n  },\n\n  set(node: ProxyHandler, key: string, value: unknown): any {\n    // dont want to set private properties on changes (usually found on outside actors)\n    if (key.startsWith('_')) {\n      return Reflect.set(node, key, value);\n    }\n    return Reflect.set(node.changes, key, new Change(value));\n  }\n};\n\nfunction defaultSafeGet(obj: Record<string, any>, key: string) {\n  return obj[key];\n}\n\nclass ObjectTreeNode implements ProxyHandler {\n  changes: Record<string, any>;\n  content: Content;\n  proxy: any;\n  children: Record<string, any>;\n\n  constructor(\n    changes: Record<string, any> = {},\n    content: Content = {},\n    public safeGet: (obj: any, key: string) => any = defaultSafeGet,\n    public isObject: (...args: unknown[]) => unknown = isObjectFn\n  ) {\n    this.changes = changes;\n    this.content = content;\n    this.proxy = new Proxy(this, objectProxyHandler);\n    this.children = Object.create(null);\n  }\n\n  get(key: string) {\n    return this.safeGet(this.changes, key);\n  }\n\n  set(key: string, value: unknown) {\n    return setDeep(this.changes, key, value);\n  }\n\n  unwrap(): Record<string, any> {\n    let changes = this.changes;\n\n    if (isObjectFn(changes)) {\n      changes = normalizeObject(changes, this.isObject);\n\n      const content = this.content;\n      if (isObjectFn(content)) {\n        changes = normalizeObject(changes, this.isObject);\n        return { ...content, ...changes };\n      } else if (Array.isArray(content)) {\n        changes = normalizeObject(changes, this.isObject);\n\n        return objectToArray(mergeDeep(arrayToObject(content), changes));\n      }\n    }\n\n    return changes;\n  }\n}\n\nexport { ObjectTreeNode };\n","/**\n * Merges all sources together, excluding keys in excludedKeys.\n *\n * @param  {string[]} excludedKeys\n * @param  {...object} sources\n * @return {object}\n */\nexport default function objectWithout(excludedKeys: string[], ...sources: any[]): any {\n  return sources.reduce((acc: Record<string, any>, source: any): object => {\n    Object.keys(source)\n      .filter((key) => excludedKeys.indexOf(key) === -1 || !source.hasOwnProperty(key))\n      .forEach((key) => (acc[key] = source[key]));\n    return acc;\n  }, {});\n}\n","export default function take(\n  originalObj: { [key: string]: any } = {},\n  keysToTake: string[] = []\n): { [key: string]: any } {\n  let newObj: { [key: string]: any } = {};\n\n  for (let key in originalObj) {\n    if (keysToTake.indexOf(key) !== -1) {\n      newObj[key] = originalObj[key];\n    }\n  }\n\n  return newObj;\n}\n","import Change, { getChangeValue, isChange } from './-private/change';\nimport { getKeyValues, getKeyErrorValues } from './utils/get-key-values';\nimport { notifierForEvent } from './-private/evented';\nimport Err from './-private/err';\nimport { hasKey, pathInChanges } from './utils/has-key';\nimport normalizeObject from './utils/normalize-object';\nimport { hasChanges } from './utils/has-changes';\nimport pureAssign from './utils/assign';\nimport { CHANGESET } from './utils/is-changeset';\nimport isObject from './utils/is-object';\nimport keyInObject from './utils/key-in-object';\nimport { buildOldValues } from './utils/build-old-values';\nimport { ObjectTreeNode } from './utils/object-tree-node';\nimport mergeDeep from './utils/merge-deep';\nimport setDeep from './utils/set-deep';\nimport getDeep, { getSubObject } from './utils/get-deep';\nimport { objectToArray, arrayToObject } from './utils/array-object';\nimport structuredClone from '@ungap/structured-clone';\n\nimport type {\n  Changes,\n  Config,\n  Content,\n  Errors,\n  IErr,\n  INotifier,\n  InternalMap,\n  NewProperty,\n  Snapshot,\n  ValidationErr\n} from './types';\n\nconst { keys } = Object;\nconst CONTENT = '_content';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CHANGES = '_changes';\n// const ORIGINAL = '_original';\nconst ERRORS = '_errors';\nconst ERRORS_CACHE = '_errorsCache';\nconst OPTIONS = '_options';\nconst AFTER_ROLLBACK_EVENT = 'afterRollback';\n\nconst DEBUG = process.env.NODE_ENV !== 'production';\n\nfunction assert(msg: string, property: unknown): void {\n  if (DEBUG) {\n    if (!property) {\n      throw new Error(msg);\n    }\n  }\n}\n\nfunction maybeUnwrapProxy(content: Content): any {\n  return content;\n}\n\nexport function newFormat(\n  obj: Record<string, any>[],\n  original: any,\n  getDeep: (obj: any, key: string) => any\n): Record<string, any> {\n  let newFormat: Record<string, any> = {};\n  for (let item of obj) {\n    const { key, value } = item;\n    newFormat[key] = {\n      current: value,\n      original: getDeep(original, key)\n    };\n  }\n\n  return newFormat;\n}\n\n// This is intended to provide an alternative changeset structure compatible with `yup`\n// This slims down the set of features, including removed APIs and `validate` returns just the `validate(obj)` method call and requires users to manually add errors.\nexport class ValidatedChangeset {\n  constructor(obj: object, options: Config = {}) {\n    this[CONTENT] = obj;\n    this[PREVIOUS_CONTENT] = undefined;\n    this[CHANGES] = {};\n    this[OPTIONS] = options;\n\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n  }\n\n  /**\n   * Any property that is not one of the getter/setter/methods on the\n   * BufferedProxy instance. The value type is `unknown` in order to avoid\n   * having to predefine key/value pairs of the correct types in the target\n   * object. Setting the index signature to `[key: string]: T[K]` would allow us\n   * to typecheck the value that is set on the proxy. However, no\n   * getters/setters/methods can be added to the class. This is the tradeoff\n   * we make for this particular design pattern (class based BufferedProxy).\n   */\n  [key: string]: unknown;\n  [CONTENT]: object;\n  [PREVIOUS_CONTENT]: object | undefined;\n  // [ORIGINAL]: Changes;\n  [CHANGES]: Changes;\n  [ERRORS]: Errors<any>;\n  [ERRORS_CACHE]: Errors<any>;\n  [OPTIONS]: Config;\n\n  __changeset__ = CHANGESET;\n\n  _eventedNotifiers = {};\n\n  on(eventName: string, callback: (...args: unknown[]) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.addListener(callback);\n  }\n\n  off(eventName: string, callback: (...args: unknown[]) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.removeListener(callback);\n  }\n\n  trigger(eventName: string, ...args: any[]): void {\n    const notifier = notifierForEvent(this, eventName);\n    if (notifier) {\n      notifier.trigger(...args);\n    }\n  }\n\n  /**\n   * @property isObject\n   * @override\n   */\n  isObject = isObject;\n\n  /**\n   * @property maybeUnwrapProxy\n   * @override\n   */\n  maybeUnwrapProxy = maybeUnwrapProxy;\n\n  /**\n   * @property setDeep\n   * @override\n   */\n  setDeep = setDeep;\n\n  /**\n   * @property getDeep\n   * @override\n   */\n  getDeep = getDeep;\n\n  /**\n   * @property mergeDeep\n   * @override\n   */\n  mergeDeep = mergeDeep;\n\n  /**\n   * @property safeGet\n   * @override\n   */\n  safeGet(obj: any, key: string) {\n    return obj[key];\n  }\n\n  /**\n   * @property safeSet\n   * @override\n   */\n  safeSet(obj: any, key: string, value: unknown) {\n    return (obj[key] = value);\n  }\n\n  /**\n   * @property changes\n   * @type {Array}\n   */\n  get changes() {\n    let obj = this[CHANGES];\n    let original = this[CONTENT];\n\n    // foo: {\n    //  original: 0,\n    //  current: 1,\n    // }\n    return newFormat(getKeyValues(obj), original, this.getDeep);\n  }\n\n  /**\n   * @property errors\n   * @type {Array}\n   */\n  get errors() {\n    let obj = this[ERRORS];\n\n    return getKeyErrorValues(obj);\n  }\n\n  get change() {\n    let obj: Changes = this[CHANGES];\n    if (hasChanges(this[CHANGES])) {\n      return normalizeObject(obj);\n    }\n\n    return {};\n  }\n\n  get error() {\n    return this[ERRORS];\n  }\n\n  get data() {\n    return this[CONTENT];\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return getKeyErrorValues(this[ERRORS]).length === 0;\n  }\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    let validationKeys = Object.keys(this[CHANGES]);\n    const userChangesetKeys: string[] | undefined = this[OPTIONS].changesetKeys;\n    if (Array.isArray(userChangesetKeys) && userChangesetKeys.length) {\n      validationKeys = validationKeys.filter((k) => userChangesetKeys.includes(k));\n    }\n\n    if (validationKeys.length === 0) {\n      return true;\n    }\n\n    return !hasChanges(this[CHANGES]);\n  }\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return !this.isValid;\n  }\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return !this.isPristine;\n  }\n\n  /**\n   * Stores change on the changeset.\n   * This approximately works just like the Ember API\n   *\n   * @method setUnknownProperty\n   */\n  setUnknownProperty<T>(key: string, value: T): void {\n    let config: Config = this[OPTIONS];\n    let changesetKeys = config.changesetKeys;\n    if (Array.isArray(changesetKeys) && changesetKeys.length > 0) {\n      const hasKey = changesetKeys.find((chKey) => key.match(chKey));\n      if (!hasKey) {\n        return;\n      }\n    }\n\n    let content: Content = this[CONTENT];\n    let oldValue = this.safeGet(content, key);\n\n    this._setProperty({ key, value, oldValue });\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  get [Symbol.toStringTag](): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  toString(): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute(): this {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content: Content = this[CONTENT];\n      let changes: Changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, getKeyValues(changes), this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes, {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    // trigger any registered callbacks by same keyword as method name\n    this.trigger('execute');\n\n    this[CHANGES] = {};\n    this[PREVIOUS_CONTENT] = oldContent;\n\n    return this;\n  }\n\n  unexecute(): this {\n    if (this[PREVIOUS_CONTENT]) {\n      this[CONTENT] = this.mergeDeep(this[CONTENT], this[PREVIOUS_CONTENT], {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the changeset to its pristine state, and discards changes and\n   * errors.\n   *\n   * @method rollback\n   */\n  rollback(): this {\n    // Get keys before reset.\n    let keys = this._rollbackKeys();\n\n    // Reset.\n    this[CHANGES] = {};\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n    this._notifyVirtualProperties(keys);\n\n    this.trigger(AFTER_ROLLBACK_EVENT);\n    return this;\n  }\n\n  /**\n   * Discards any errors, keeping only valid changes.\n   *\n   * @public\n   * @chainable\n   * @method rollbackInvalid\n   * @param {String} key optional key to rollback invalid values\n   * @return {Changeset}\n   */\n  rollbackInvalid(key: string | void): this {\n    let errorKeys = keys(this[ERRORS]);\n\n    if (key) {\n      this._notifyVirtualProperties([key]);\n      // @tracked\n      this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n      this[ERRORS_CACHE] = this[ERRORS];\n      if (errorKeys.indexOf(key) > -1) {\n        this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n      }\n    } else {\n      this._notifyVirtualProperties();\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = this[ERRORS];\n\n      // if on CHANGES hash, rollback those as well\n      errorKeys.forEach((errKey) => {\n        this[CHANGES] = this._deleteKey(CHANGES, errKey) as Changes;\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * @method validate\n   */\n  async validate(cb: (changes: Record<string, any>) => unknown): Promise<any> {\n    const changes = this[CHANGES];\n    const content = this[CONTENT];\n\n    // return an object that does not poison original model and provides user with full set of data + changes to validate\n    return cb(this.mergeDeep(structuredClone(content), changes));\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError<T>(key: string, error: IErr<T> | ValidationErr) {\n    // Construct new `Err` instance.\n    let newError;\n\n    const isIErr = <T>(error: unknown): error is IErr<T> =>\n      this.isObject(error) && !Array.isArray(error);\n    if (isIErr(error)) {\n      assert('Error must have value.', error.hasOwnProperty('value') || error.value !== undefined);\n      assert('Error must have validation.', error.hasOwnProperty('validation'));\n      newError = new Err(error.value, error.validation);\n    } else {\n      let value = this[key];\n      newError = new Err(value, error as ValidationErr);\n    }\n\n    // Add `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    // Return passed-in `error`.\n    return newError;\n  }\n\n  /**\n   * @method removeError\n   */\n  removeError(key: string) {\n    // Remove `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, null, { safeSet: this.safeSet });\n    this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n    this[ERRORS_CACHE] = this[ERRORS];\n  }\n\n  /**\n   * @method removeError\n   */\n  removeErrors() {\n    // @tracked\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = this[ERRORS];\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   * key maybe in form 'name.short' so need to go deep\n   *\n   * @method pushErrors\n   */\n  pushErrors(key: string, ...newErrors: string[] | ValidationErr[]): IErr<any> {\n    let errors: Errors<any> = this[ERRORS];\n    let existingError: IErr<any> | Err = this.getDeep(errors, key) || new Err(null, []);\n    let validation: ValidationErr | ValidationErr[] = existingError.validation;\n    let value: any = this[key];\n\n    if (!Array.isArray(validation) && Boolean(validation)) {\n      existingError.validation = [validation];\n    }\n\n    let v = existingError.validation;\n    validation = [...v, ...newErrors];\n    let newError = new Err(value, validation);\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key as string, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return { value, validation };\n  }\n\n  /**\n   * Creates a snapshot of the changeset's errors and changes.\n   *\n   * @method snapshot\n   */\n  snapshot(): Snapshot {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n\n    return {\n      changes: this.getChangesForSnapshot(changes),\n\n      errors: keys(errors).reduce((newObj: Errors<any>, key: keyof Errors<any>) => {\n        let e = errors[key];\n        newObj[key] = { value: e.value, validation: e.validation };\n        return newObj;\n      }, {})\n    };\n  }\n\n  private getChangesForSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj: Changes, key: keyof Changes) => {\n      newObj[key] = isChange(changes[key])\n        ? getChangeValue(changes[key])\n        : this.getChangesForSnapshot(changes[key]);\n      return newObj;\n    }, {});\n  }\n\n  /**\n   * Restores a snapshot of changes and errors. This overrides existing\n   * changes and errors.\n   *\n   * @method restore\n   */\n  restore({ changes, errors }: Snapshot): this {\n    let newChanges: Changes = this.getChangesFromSnapshot(changes);\n\n    let newErrors: Errors<any> = keys(errors).reduce((newObj: Errors<any>, key: keyof Changes) => {\n      let e: IErr<any> = errors[key];\n      newObj[key] = new Err(e.value, e.validation);\n      return newObj;\n    }, {});\n\n    // @tracked\n    this[CHANGES] = newChanges;\n    // @tracked\n    this[ERRORS] = newErrors;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    this._notifyVirtualProperties();\n    return this;\n  }\n\n  private getChangesFromSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(changes[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  private getChangeForProp(value: any) {\n    if (!isObject(value)) {\n      return new Change(value);\n    }\n\n    return keys(value).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(value[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  /**\n   * Sets property on the changeset.\n   */\n  _setProperty<T>({ key, value, oldValue }: NewProperty<T>): void {\n    let changes: Changes = this[CHANGES];\n\n    // Happy path: update change map.\n    if (!isEqual(value, oldValue) || oldValue === undefined) {\n      // @tracked\n      let result: Changes = this.setDeep(changes, key, new Change(value), {\n        safeSet: this.safeSet\n      });\n\n      this[CHANGES] = result;\n    } else if (keyInObject(changes, key)) {\n      // @tracked\n      // remove key if setting back to original\n      this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    }\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys?: string[]): string[] | undefined {\n    if (!keys) {\n      keys = this._rollbackKeys();\n    }\n\n    return keys;\n  }\n\n  /**\n   * Gets the changes and error keys.\n   */\n  _rollbackKeys(): string[] {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n    return [...new Set([...keys(changes), ...keys(errors)])];\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName: string, key = ''): InternalMap {\n    let obj = this[objName] as InternalMap;\n    let keys = key.split('.');\n\n    if (keys.length === 1 && obj.hasOwnProperty(key)) {\n      delete obj[key];\n    } else if (obj[keys[0]]) {\n      let [base, ...remaining] = keys;\n      let previousNode: { [key: string]: any } = obj;\n      let currentNode: any = obj[base];\n      let currentKey: string | undefined = base;\n\n      // find leaf and delete from map\n      while (this.isObject(currentNode) && currentKey) {\n        let curr: { [key: string]: unknown } = currentNode;\n        if (isChange(curr) || typeof curr.value !== 'undefined' || curr.validation) {\n          delete previousNode[currentKey];\n        }\n\n        currentKey = remaining.shift();\n        previousNode = currentNode;\n        if (currentKey) {\n          currentNode = currentNode[currentKey];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  get(key: string): any {\n    // 'person'\n    // 'person.username'\n    let [baseKey, ...remaining] = key.split('.');\n    let changes: Changes = this[CHANGES];\n    let content: Content = this[CONTENT];\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey)) {\n      const changesValue = this.getDeep(changes, key);\n      const isObject = this.isObject(changesValue);\n\n      if (!isObject && changesValue !== undefined) {\n        // if safeGet returns a primitive, then go ahead return\n        return changesValue;\n      }\n    }\n    // At this point, we may have a changes object, a dot separated key, or a need to access the `key`\n    // on `this` or `content`\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey) && hasChanges(changes)) {\n      let baseChanges = changes[baseKey];\n\n      // 'user.name'\n      const normalizedBaseChanges = normalizeObject(baseChanges);\n      if (this.isObject(normalizedBaseChanges)) {\n        const result = this.maybeUnwrapProxy(\n          this.getDeep(normalizedBaseChanges, remaining.join('.'))\n        );\n\n        // need to do this inside of Change object\n        // basically anything inside of a Change object that is undefined means it was removed\n        if (\n          typeof result === 'undefined' &&\n          pathInChanges(changes, key, this.safeGet) &&\n          !hasKey(changes, key, this.safeGet) &&\n          this.getDeep(content, key)\n        ) {\n          return;\n        }\n\n        if (this.isObject(result)) {\n          if (isChange(result)) {\n            return getChangeValue(result);\n          }\n\n          const baseContent = this.safeGet(content, baseKey) || {};\n          const subContent = this.getDeep(baseContent, remaining.join('.'));\n          const subChanges = getSubObject(changes, key);\n          // give back an object that can further retrieve changes and/or content\n          const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n          return tree.proxy;\n        } else if (typeof result !== 'undefined') {\n          return result;\n        }\n      }\n\n      // this comes after the isObject check to ensure we don't lose remaining keys\n      if (isChange(baseChanges) && remaining.length === 0) {\n        return getChangeValue(baseChanges);\n      }\n    }\n\n    // return getters/setters/methods on BufferedProxy instance\n    if (baseKey in this || key in this) {\n      return this.getDeep(this, key);\n    }\n\n    const subContent = this.maybeUnwrapProxy(this.getDeep(content, key));\n    if (this.isObject(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // if no changes, we need to add the path to the existing changes (mutate)\n        // so further access to nested keys works\n        subChanges = this.getDeep(this.setDeep(changes, key, {}), key);\n      }\n\n      // may still access a value on the changes or content objects\n      const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n      return tree.proxy;\n    } else if (Array.isArray(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // return array of contents. Dont need to worry about further access sibling keys in array case\n        return subContent;\n      }\n\n      if (isObject(subChanges)) {\n        if (isObject(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n          return { ...subContent, ...subChanges };\n        } else if (Array.isArray(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n\n          return objectToArray(mergeDeep(arrayToObject(subContent), subChanges));\n        }\n      }\n\n      return subChanges;\n    }\n\n    return subContent;\n  }\n\n  set<T>(key: string, value: T): void {\n    if (this.hasOwnProperty(key) || keyInObject(this, key)) {\n      this[key] = value;\n    } else {\n      this.setUnknownProperty(key, value);\n    }\n  }\n}\n\n/**\n * Creates new changesets.\n */\nexport function changeset(obj: object, options?: Config): ValidatedChangeset {\n  return new ValidatedChangeset(obj, options);\n}\n\ntype T20 = InstanceType<typeof ValidatedChangeset>;\n\nexport function Changeset(obj: object, options?: Config): ValidatedChangeset {\n  const c: ValidatedChangeset = changeset(obj, options);\n\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  }) as T20;\n}\n\n// determine if two values are equal\nfunction isEqual(v1: unknown, v2: unknown) {\n  if (v1 instanceof Date && v2 instanceof Date) {\n    return v1.getTime() === v2.getTime();\n  }\n\n  return v1 === v2;\n}\n","import Change, { getChangeValue, isChange } from './-private/change';\nimport { getKeyValues, getKeyErrorValues } from './utils/get-key-values';\nimport lookupValidator from './utils/validator-lookup';\nimport { notifierForEvent } from './-private/evented';\nimport Err from './-private/err';\nimport { hasKey, pathInChanges } from './utils/has-key';\nimport normalizeObject from './utils/normalize-object';\nimport { hasChanges } from './utils/has-changes';\nimport pureAssign from './utils/assign';\nimport { flattenValidations } from './utils/flatten-validations';\nimport isChangeset, { CHANGESET } from './utils/is-changeset';\nimport isObject from './utils/is-object';\nimport isPromise from './utils/is-promise';\nimport keyInObject from './utils/key-in-object';\nimport mergeNested from './utils/merge-nested';\nimport { buildOldValues } from './utils/build-old-values';\nimport { ObjectTreeNode } from './utils/object-tree-node';\nimport objectWithout from './utils/object-without';\nimport take from './utils/take';\nimport mergeDeep, { propertyIsUnsafe } from './utils/merge-deep';\nimport setDeep from './utils/set-deep';\nimport getDeep, { getSubObject } from './utils/get-deep';\nimport { objectToArray, arrayToObject, isArrayObject } from './utils/array-object';\n\nimport type {\n  Changes,\n  Config,\n  Content,\n  Errors,\n  IErr,\n  IChangeset,\n  INotifier,\n  InternalMap,\n  NewProperty,\n  PrepareChangesFn,\n  RunningValidations,\n  Snapshot,\n  ValidationErr,\n  ValidationResult,\n  ValidatorAction,\n  ValidatorMap\n} from './types';\n\nimport {\n  ValidatedChangeset as ValidationChangeset,\n  Changeset as ValidationChangesetFactory\n} from './validated';\n\nexport {\n  ValidationChangeset,\n  ValidationChangesetFactory,\n  CHANGESET,\n  Change,\n  Err,\n  isArrayObject,\n  arrayToObject,\n  objectToArray,\n  buildOldValues,\n  isChangeset,\n  isObject,\n  isChange,\n  getChangeValue,\n  isPromise,\n  getKeyValues,\n  keyInObject,\n  lookupValidator,\n  mergeNested,\n  normalizeObject,\n  objectWithout,\n  pureAssign,\n  take,\n  mergeDeep,\n  setDeep,\n  getDeep,\n  propertyIsUnsafe\n};\n\nconst { keys } = Object;\nconst CONTENT = '_content';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CHANGES = '_changes';\nconst ERRORS = '_errors';\nconst ERRORS_CACHE = '_errorsCache';\nconst VALIDATOR = '_validator';\nconst OPTIONS = '_options';\nconst RUNNING_VALIDATIONS = '_runningValidations';\nconst BEFORE_VALIDATION_EVENT = 'beforeValidation';\nconst AFTER_VALIDATION_EVENT = 'afterValidation';\nconst AFTER_ROLLBACK_EVENT = 'afterRollback';\nconst defaultValidatorFn = () => true;\nconst defaultOptions = { skipValidate: false };\n\nconst DEBUG = process.env.NODE_ENV !== 'production';\n\nfunction assert(msg: string, property: unknown): void {\n  if (DEBUG) {\n    if (!property) {\n      throw new Error(msg);\n    }\n  }\n}\n\nfunction maybeUnwrapProxy(content: Content): any {\n  return content;\n}\n\nexport class BufferedChangeset implements IChangeset {\n  constructor(\n    obj: object,\n    public validateFn: ValidatorAction = defaultValidatorFn,\n    public validationMap: ValidatorMap = {},\n    options: Config = {}\n  ) {\n    this[CONTENT] = obj;\n    this[PREVIOUS_CONTENT] = undefined;\n    this[CHANGES] = {};\n    this[VALIDATOR] = validateFn;\n    this[OPTIONS] = pureAssign(defaultOptions, JSON.parse(JSON.stringify(options)));\n    this[RUNNING_VALIDATIONS] = {};\n\n    let validatorMapKeys = this.validationMap ? keys(this.validationMap as object) : [];\n\n    if (this[OPTIONS].initValidate && validatorMapKeys.length > 0) {\n      let errors = this._collectErrors();\n\n      this[ERRORS] = errors;\n      this[ERRORS_CACHE] = errors;\n    } else {\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = {};\n    }\n  }\n\n  /**\n   * Any property that is not one of the getter/setter/methods on the\n   * BufferedProxy instance. The value type is `unknown` in order to avoid\n   * having to predefine key/value pairs of the correct types in the target\n   * object. Setting the index signature to `[key: string]: T[K]` would allow us\n   * to typecheck the value that is set on the proxy. However, no\n   * getters/setters/methods can be added to the class. This is the tradeoff\n   * we make for this particular design pattern (class based BufferedProxy).\n   */\n  [key: string]: unknown;\n  [CONTENT]: object;\n  [PREVIOUS_CONTENT]: object | undefined;\n  [CHANGES]: Changes;\n  [ERRORS]: Errors<any>;\n  [ERRORS_CACHE]: Errors<any>;\n  [VALIDATOR]: ValidatorAction;\n  [OPTIONS]: Config;\n  [RUNNING_VALIDATIONS]: Record<string, any>;\n\n  __changeset__ = CHANGESET;\n\n  _eventedNotifiers = {};\n\n  on(eventName: string, callback: (key: string) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.addListener(callback);\n  }\n\n  off(eventName: string, callback: (key: string) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.removeListener(callback);\n  }\n\n  trigger(eventName: string, ...args: any[]): void {\n    const notifier = notifierForEvent(this, eventName);\n    if (notifier) {\n      notifier.trigger(...args);\n    }\n  }\n\n  /**\n   * @property isObject\n   * @override\n   */\n  isObject = isObject;\n\n  /**\n   * @property maybeUnwrapProxy\n   * @override\n   */\n  maybeUnwrapProxy = maybeUnwrapProxy;\n\n  /**\n   * @property setDeep\n   * @override\n   */\n  setDeep = setDeep;\n\n  /**\n   * @property getDeep\n   * @override\n   */\n  getDeep = getDeep;\n\n  /**\n   * @property mergeDeep\n   * @override\n   */\n  mergeDeep = mergeDeep;\n\n  /**\n   * @property safeGet\n   * @override\n   */\n  safeGet(obj: any, key: string) {\n    return obj[key];\n  }\n\n  /**\n   * @property safeSet\n   * @override\n   */\n  safeSet(obj: any, key: string, value: unknown) {\n    return (obj[key] = value);\n  }\n\n  get _bareChanges() {\n    let obj = this[CHANGES];\n\n    return getKeyValues(obj).reduce((newObj: { [key: string]: any }, { key, value }) => {\n      newObj[key] = value;\n      return newObj;\n    }, Object.create(null));\n  }\n\n  /**\n   * @property changes\n   * @type {Array}\n   */\n  get changes() {\n    let obj = this[CHANGES];\n\n    // [{ key, value }, ...]\n    return getKeyValues(obj);\n  }\n\n  /**\n   * @property errors\n   * @type {Array}\n   */\n  get errors() {\n    let obj = this[ERRORS];\n\n    // [{ key, validation, value }, ...]\n    return getKeyErrorValues(obj);\n  }\n\n  get change() {\n    let obj: Changes = this[CHANGES];\n    if (hasChanges(this[CHANGES])) {\n      return normalizeObject(obj);\n    }\n\n    return {};\n  }\n\n  get error() {\n    return this[ERRORS];\n  }\n\n  get data() {\n    return this[CONTENT];\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return getKeyErrorValues(this[ERRORS]).length === 0;\n  }\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    let validationKeys = Object.keys(this[CHANGES]);\n    const userChangesetKeys: string[] | undefined = this[OPTIONS].changesetKeys;\n    if (Array.isArray(userChangesetKeys) && userChangesetKeys.length) {\n      validationKeys = validationKeys.filter((k) => userChangesetKeys.includes(k));\n    }\n\n    if (validationKeys.length === 0) {\n      return true;\n    }\n\n    return !hasChanges(this[CHANGES]);\n  }\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return !this.isValid;\n  }\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return !this.isPristine;\n  }\n\n  /**\n   * Stores change on the changeset.\n   * This approximately works just like the Ember API\n   *\n   * @method setUnknownProperty\n   */\n  setUnknownProperty<T>(key: string, value: T): void {\n    let config: Config = this[OPTIONS];\n    let changesetKeys = config.changesetKeys;\n    if (Array.isArray(changesetKeys) && changesetKeys.length > 0) {\n      const hasKey = changesetKeys.find((chKey) => key.match(chKey));\n      if (!hasKey) {\n        return;\n      }\n    }\n\n    let content: Content = this[CONTENT];\n    let oldValue = this.safeGet(content, key);\n\n    let skipValidate: boolean | undefined = config.skipValidate;\n    if (skipValidate) {\n      this._setProperty({ key, value, oldValue });\n      this._handleValidation(true, { key, value });\n      return;\n    }\n\n    this._setProperty({ key, value, oldValue });\n    this._validateKey(key, value);\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  get [Symbol.toStringTag](): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  toString(): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * Provides a function to run before emitting changes to the model. The\n   * callback function must return a hash in the same shape:\n   *\n   * ```\n   * changeset\n   *   .prepare((changes) => {\n   *     let modified = {};\n   *\n   *     for (let key in changes) {\n   *       modified[underscore(key)] = changes[key];\n   *     }\n   *\n   *    return modified; // { first_name: \"Jim\", last_name: \"Bob\" }\n   *  })\n   *  .execute(); // execute the changes\n   * ```\n   *\n   * @method prepare\n   */\n  prepare(prepareChangesFn: PrepareChangesFn): this {\n    let changes: { [s: string]: any } = this._bareChanges;\n    let preparedChanges = prepareChangesFn(changes);\n\n    assert('Callback to `changeset.prepare` must return an object', this.isObject(preparedChanges));\n\n    let newObj: Changes = {};\n    if (this.isObject(preparedChanges)) {\n      let newChanges: Changes = keys(preparedChanges as Record<string, any>).reduce(\n        (newObj: Changes, key: keyof Changes) => {\n          newObj[key] = new Change((preparedChanges as Record<string, any>)[key]);\n          return newObj;\n        },\n        newObj\n      );\n\n      // @tracked\n      this[CHANGES] = newChanges;\n    }\n\n    return this;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute(): this {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content: Content = this[CONTENT];\n      let changes: Changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, this.changes, this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes);\n    }\n\n    // trigger any registered callbacks by same keyword as method name\n    this.trigger('execute');\n\n    this[CHANGES] = {};\n    this[PREVIOUS_CONTENT] = oldContent;\n\n    return this;\n  }\n\n  unexecute(): this {\n    if (this[PREVIOUS_CONTENT]) {\n      this[CONTENT] = this.mergeDeep(this[CONTENT], this[PREVIOUS_CONTENT], {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Executes the changeset and saves the underlying content.\n   *\n   * @method save\n   * @param {Object} options optional object to pass to content save method\n   */\n  async save(options?: object): Promise<IChangeset | any> {\n    let content: Content = this[CONTENT];\n    let savePromise: any | Promise<BufferedChangeset | any> = Promise.resolve(this);\n    this.execute();\n\n    if (typeof content.save === 'function') {\n      savePromise = content.save(options);\n    } else if (typeof this.safeGet(content, 'save') === 'function') {\n      // we might be getting this off a proxy object.  For example, when a\n      // belongsTo relationship (a proxy on the parent model)\n      // another way would be content(belongsTo).content.save\n      let maybePromise = this.maybeUnwrapProxy(content).save();\n      if (maybePromise) {\n        savePromise = maybePromise;\n      }\n    }\n\n    try {\n      const result = await savePromise;\n\n      // cleanup changeset\n      this.rollback();\n\n      return result;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  /**\n   * Merges 2 valid changesets and returns a new changeset. Both changesets\n   * must point to the same underlying object. The changeset target is the\n   * origin. For example:\n   *\n   * ```\n   * let changesetA = new Changeset(user, validatorFn);\n   * let changesetB = new Changeset(user, validatorFn);\n   * changesetA.set('firstName', 'Jim');\n   * changesetB.set('firstName', 'Jimmy');\n   * changesetB.set('lastName', 'Fallon');\n   * let changesetC = changesetA.merge(changesetB);\n   * changesetC.execute();\n   * user.get('firstName'); // \"Jimmy\"\n   * user.get('lastName'); // \"Fallon\"\n   * ```\n   *\n   * @method merge\n   */\n  merge(changeset: this): this {\n    let content: Content = this[CONTENT];\n    assert('Cannot merge with a non-changeset', isChangeset(changeset));\n    assert('Cannot merge with a changeset of different content', changeset[CONTENT] === content);\n\n    if (this.isPristine && changeset.isPristine) {\n      return this;\n    }\n\n    let c1: Changes = this[CHANGES];\n    let c2: Changes = changeset[CHANGES];\n    let e1: Errors<any> = this[ERRORS];\n    let e2: Errors<any> = changeset[ERRORS];\n\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    let newChangeset: any = new ValidatedChangeset(content, this[VALIDATOR]); // ChangesetDef\n    let newErrors: Errors<any> = objectWithout(keys(c2), e1);\n    let newChanges: Changes = objectWithout(keys(e2), c1);\n    let mergedErrors: Errors<any> = mergeNested(newErrors, e2);\n    let mergedChanges: Changes = mergeNested(newChanges, c2);\n\n    newChangeset[ERRORS] = mergedErrors;\n    newChangeset[CHANGES] = mergedChanges;\n    newChangeset._notifyVirtualProperties();\n    return newChangeset;\n  }\n\n  /**\n   * Returns the changeset to its pristine state, and discards changes and\n   * errors.\n   *\n   * @method rollback\n   */\n  rollback(): this {\n    // Get keys before reset.\n    let keys = this._rollbackKeys();\n\n    // Reset.\n    this[CHANGES] = {};\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n    this._notifyVirtualProperties(keys);\n\n    this.trigger(AFTER_ROLLBACK_EVENT);\n    return this;\n  }\n\n  /**\n   * Discards any errors, keeping only valid changes.\n   *\n   * @public\n   * @chainable\n   * @method rollbackInvalid\n   * @param {String} key optional key to rollback invalid values\n   * @return {Changeset}\n   */\n  rollbackInvalid(key: string | void): this {\n    let errorKeys = this.errors.map(({ key }) => key);\n\n    if (key) {\n      this._notifyVirtualProperties([key]);\n      // @tracked\n      this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n      this[ERRORS_CACHE] = this[ERRORS];\n      if (errorKeys.indexOf(key) > -1) {\n        this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n      }\n    } else {\n      this._notifyVirtualProperties();\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = this[ERRORS];\n\n      // if on CHANGES hash, rollback those as well\n      errorKeys.forEach((errKey) => {\n        this[CHANGES] = this._deleteKey(CHANGES, errKey) as Changes;\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Discards changes/errors for the specified properly only.\n   *\n   * @public\n   * @chainable\n   * @method rollbackProperty\n   * @param {String} key key to delete off of changes and errors\n   * @return {Changeset}\n   */\n  rollbackProperty(key: string): this {\n    // @tracked\n    this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    // @tracked\n    this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return this;\n  }\n\n  /**\n   * Validates the changeset immediately against the validationMap passed in.\n   * If no key is passed into this method, it will validate all fields on the\n   * validationMap and set errors accordingly. Will throw an error if no\n   * validationMap is present.\n   *\n   * @method validate\n   */\n  async validate(...validationKeys: string[]): Promise<any> {\n    if (keys(this.validationMap as object).length === 0 && !validationKeys.length) {\n      return Promise.resolve(null);\n    }\n\n    validationKeys =\n      validationKeys.length > 0\n        ? validationKeys\n        : keys(flattenValidations(this.validationMap as object));\n\n    let maybePromise = validationKeys.map((key) => {\n      const value: any = this[key];\n      const resolvedValue = value instanceof ObjectTreeNode ? value.unwrap() : value;\n      return this._validateKey(key, resolvedValue);\n    });\n\n    return Promise.all(maybePromise);\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError<T>(key: string, error: IErr<T> | ValidationErr) {\n    // Construct new `Err` instance.\n    let newError;\n\n    const isIErr = <T>(error: unknown): error is IErr<T> =>\n      this.isObject(error) && !Array.isArray(error);\n    if (isIErr(error)) {\n      assert('Error must have value.', error.hasOwnProperty('value') || error.value !== undefined);\n      assert('Error must have validation.', error.hasOwnProperty('validation'));\n      newError = new Err(error.value, error.validation);\n    } else {\n      let value = this[key];\n      newError = new Err(value, error as ValidationErr);\n    }\n\n    // Add `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    // Return passed-in `error`.\n    return error;\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   * key maybe in form 'name.short' so need to go deep\n   *\n   * @method pushErrors\n   */\n  pushErrors(key: string, ...newErrors: string[] | ValidationErr[]): IErr<any> {\n    let errors: Errors<any> = this[ERRORS];\n    let existingError: IErr<any> | Err = this.getDeep(errors, key) || new Err(null, []);\n    let validation: ValidationErr | ValidationErr[] = existingError.validation;\n    let value: any = this[key];\n\n    if (!Array.isArray(validation) && Boolean(validation)) {\n      existingError.validation = [validation];\n    }\n\n    let v = existingError.validation;\n    validation = [...v, ...newErrors];\n    let newError = new Err(value, validation);\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key as string, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return { value, validation };\n  }\n\n  /**\n   * Creates a snapshot of the changeset's errors and changes.\n   *\n   * @method snapshot\n   */\n  snapshot(): Snapshot {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n\n    return {\n      changes: this.getChangesForSnapshot(changes),\n\n      errors: keys(errors).reduce((newObj: Errors<any>, key: keyof Errors<any>) => {\n        let e = errors[key];\n        newObj[key] = { value: e.value, validation: e.validation };\n        return newObj;\n      }, {})\n    };\n  }\n\n  private getChangesForSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj: Changes, key: keyof Changes) => {\n      newObj[key] = isChange(changes[key])\n        ? getChangeValue(changes[key])\n        : this.getChangesForSnapshot(changes[key]);\n      return newObj;\n    }, {});\n  }\n\n  /**\n   * Restores a snapshot of changes and errors. This overrides existing\n   * changes and errors.\n   *\n   * @method restore\n   */\n  restore({ changes, errors }: Snapshot): this {\n    let newChanges: Changes = this.getChangesFromSnapshot(changes);\n\n    let newErrors: Errors<any> = keys(errors).reduce((newObj: Errors<any>, key: keyof Changes) => {\n      let e: IErr<any> = errors[key];\n      newObj[key] = new Err(e.value, e.validation);\n      return newObj;\n    }, {});\n\n    // @tracked\n    this[CHANGES] = newChanges;\n    // @tracked\n    this[ERRORS] = newErrors;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    this._notifyVirtualProperties();\n    return this;\n  }\n\n  private getChangesFromSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(changes[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  private getChangeForProp(value: any) {\n    if (!isObject(value)) {\n      return new Change(value);\n    }\n\n    return keys(value).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(value[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  /**\n   * Unlike `Ecto.Changeset.cast`, `cast` will take allowed keys and\n   * remove unwanted keys off of the changeset. For example, this method\n   * can be used to only allow specified changes through prior to saving.\n   *\n   * @method cast\n   */\n  cast(allowed: string[] = []): this {\n    let changes: Changes = this[CHANGES];\n\n    if (Array.isArray(allowed) && allowed.length === 0) {\n      return this;\n    }\n\n    let changeKeys: string[] = keys(changes);\n    let validKeys = changeKeys.filter((key: string) => allowed.includes(key));\n    let casted = take(changes, validKeys);\n    // @tracked\n    this[CHANGES] = casted;\n    return this;\n  }\n\n  /**\n   * Checks to see if async validator for a given key has not resolved.\n   * If no key is provided it will check to see if any async validator is running.\n   *\n   * @method isValidating\n   */\n  isValidating(key?: string | void): boolean {\n    let runningValidations: RunningValidations = this[RUNNING_VALIDATIONS];\n    let ks: string[] = keys(runningValidations);\n    if (key) {\n      return ks.includes(key);\n    }\n    return ks.length > 0;\n  }\n\n  /**\n   * Validates a specific key\n   *\n   * @method _validateKey\n   * @private\n   */\n  _validateKey<T>(\n    key: string,\n    value: T\n  ): Promise<ValidationResult | T | IErr<T>> | T | IErr<T> | ValidationResult {\n    let content: Content = this[CONTENT];\n    let oldValue: any = this.getDeep(content, key);\n    let validation: ValidationResult | Promise<ValidationResult> = this._validate(\n      key,\n      value,\n      oldValue\n    );\n\n    this.trigger(BEFORE_VALIDATION_EVENT, key);\n\n    // TODO: Address case when Promise is rejected.\n    if (isPromise(validation)) {\n      this._setIsValidating(key, validation as Promise<ValidationResult>);\n\n      let running: RunningValidations = this[RUNNING_VALIDATIONS];\n      let promises = Object.entries(running);\n\n      return Promise.all(promises).then(() => {\n        return (validation as Promise<ValidationResult>)\n          .then((resolvedValidation: ValidationResult) => {\n            delete running[key];\n\n            return this._handleValidation(resolvedValidation, { key, value });\n          })\n          .then((result) => {\n            this.trigger(AFTER_VALIDATION_EVENT, key);\n            return result;\n          });\n      });\n    }\n\n    let result = this._handleValidation(validation as ValidationResult, { key, value });\n\n    this.trigger(AFTER_VALIDATION_EVENT, key);\n\n    return result;\n  }\n\n  /**\n   * Takes resolved validation and adds an error or simply returns the value\n   *\n   * @method _handleValidation\n   * @private\n   */\n  _handleValidation<T>(\n    validation: ValidationResult,\n    { key, value }: NewProperty<T>\n  ): T | IErr<T> | ValidationErr {\n    // Happy path: remove `key` from error map.\n    // @tracked\n    // ERRORS_CACHE to avoid backtracking Ember assertion.\n    this[ERRORS] = this._deleteKey(ERRORS_CACHE, key) as Errors<any>;\n\n    // Error case.\n    if (!this._isValidResult(validation)) {\n      return this.addError(key, { value, validation } as IErr<T>);\n    }\n\n    return value;\n  }\n\n  /**\n   * runs the validator with the key and value\n   *\n   * @method _validate\n   * @private\n   */\n  _validate(\n    key: string,\n    newValue: unknown,\n    oldValue: unknown\n  ): ValidationResult | Promise<ValidationResult> {\n    let validator: ValidatorAction = this[VALIDATOR];\n    let content: Content = this[CONTENT];\n\n    if (typeof validator === 'function') {\n      let validationResult = validator({\n        key,\n        newValue,\n        oldValue,\n        changes: this.change,\n        content\n      });\n\n      if (validationResult === undefined) {\n        // no validator function found for key\n        return true;\n      }\n\n      return validationResult;\n    }\n\n    return true;\n  }\n\n  /**\n   * Sets property on the changeset.\n   */\n  _setProperty<T>({ key, value, oldValue }: NewProperty<T>): void {\n    let changes: Changes = this[CHANGES];\n\n    // Happy path: update change map.\n    if (!isEqual(value, oldValue) || oldValue === undefined) {\n      // @tracked\n      let result: Changes = this.setDeep(changes, key, new Change(value), {\n        safeSet: this.safeSet\n      });\n\n      this[CHANGES] = result;\n    } else if (keyInObject(changes, key)) {\n      // @tracked\n      // remove key if setting back to original\n      this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    }\n  }\n\n  /**\n   * Increment or decrement the number of running validations for a\n   * given key.\n   */\n  _setIsValidating(key: string, promise: Promise<ValidationResult>): void {\n    let running: RunningValidations = this[RUNNING_VALIDATIONS];\n    this.setDeep(running, key, promise);\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys?: string[]): string[] | undefined {\n    if (!keys) {\n      keys = this._rollbackKeys();\n    }\n\n    return keys;\n  }\n\n  /**\n   * Gets the changes and error keys.\n   */\n  _rollbackKeys(): string[] {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n    return [...new Set([...keys(changes), ...keys(errors)])];\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName: string, key = ''): InternalMap {\n    let obj = this[objName] as InternalMap;\n    let keys = key.split('.');\n\n    if (keys.length === 1 && obj.hasOwnProperty(key)) {\n      delete obj[key];\n    } else if (obj[keys[0]]) {\n      let [base, ...remaining] = keys;\n      let previousNode: { [key: string]: any } = obj;\n      let currentNode: any = obj[base];\n      let currentKey: string | undefined = base;\n\n      // find leaf and delete from map\n      while (this.isObject(currentNode) && currentKey) {\n        let curr: { [key: string]: unknown } = currentNode;\n        if (isChange(curr) || typeof curr.value !== 'undefined' || curr.validation) {\n          delete previousNode[currentKey];\n        }\n\n        currentKey = remaining.shift();\n        previousNode = currentNode;\n        if (currentKey) {\n          currentNode = currentNode[currentKey];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  _collectErrors(): Errors<any> {\n    let validationKeys = keys(flattenValidations(this.validationMap as object));\n\n    return validationKeys.reduce((acc: Errors<any>, key: string) => {\n      let content: Content = this[CONTENT];\n      let value: any = this.getDeep(content, key);\n      let resolvedValue = value instanceof ObjectTreeNode ? value.unwrap() : value;\n\n      let result: ValidationResult = this._validate(key, resolvedValue, null) as ValidationResult;\n\n      if (!this._isValidResult(result)) {\n        let errorResult = result as ValidationErr;\n        let validationError = new Err(value, errorResult);\n\n        this.setDeep(acc, key, validationError, { safeSet: this.safeSet });\n      }\n\n      return acc;\n    }, {});\n  }\n\n  _isValidResult(result: ValidationResult): boolean {\n    return result === true || (Array.isArray(result) && result.length === 1 && result[0] === true);\n  }\n\n  get(key: string): any {\n    // 'person'\n    // 'person.username'\n    let [baseKey, ...remaining] = key.split('.');\n    let changes: Changes = this[CHANGES];\n    let content: Content = this[CONTENT];\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey)) {\n      const changesValue = this.getDeep(changes, key);\n      const isObject = this.isObject(changesValue);\n\n      if (!isObject && changesValue !== undefined) {\n        // if safeGet returns a primitive, then go ahead return\n        return changesValue;\n      }\n    }\n    // At this point, we may have a changes object, a dot separated key, or a need to access the `key`\n    // on `this` or `content`\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey) && hasChanges(changes)) {\n      let baseChanges = changes[baseKey];\n\n      // 'user.name'\n      const normalizedBaseChanges = normalizeObject(baseChanges);\n      if (this.isObject(normalizedBaseChanges)) {\n        const result = this.maybeUnwrapProxy(\n          this.getDeep(normalizedBaseChanges, remaining.join('.'))\n        );\n\n        // need to do this inside of Change object\n        // basically anything inside of a Change object that is undefined means it was removed\n        if (\n          typeof result === 'undefined' &&\n          pathInChanges(changes, key, this.safeGet) &&\n          !hasKey(changes, key, this.safeGet) &&\n          this.getDeep(content, key)\n        ) {\n          return;\n        }\n\n        if (this.isObject(result)) {\n          if (isChange(result)) {\n            return getChangeValue(result);\n          }\n\n          const baseContent = this.safeGet(content, baseKey) || {};\n          const subContent = this.getDeep(baseContent, remaining.join('.'));\n          const subChanges = getSubObject(changes, key);\n          // give back an object that can further retrieve changes and/or content\n          const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n          return tree.proxy;\n        } else if (typeof result !== 'undefined') {\n          return result;\n        }\n      }\n\n      // this comes after the isObject check to ensure we don't lose remaining keys\n      if (isChange(baseChanges) && remaining.length === 0) {\n        return getChangeValue(baseChanges);\n      }\n    }\n\n    // return getters/setters/methods on BufferedProxy instance\n    if (baseKey in this || key in this) {\n      return this.getDeep(this, key);\n    }\n\n    const subContent = this.maybeUnwrapProxy(this.getDeep(content, key));\n    if (this.isObject(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // if no changes, we need to add the path to the existing changes (mutate)\n        // so further access to nested keys works\n        subChanges = this.getDeep(this.setDeep(changes, key, {}), key);\n      }\n\n      // may still access a value on the changes or content objects\n      const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n      return tree.proxy;\n    } else if (Array.isArray(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // return array of contents. Dont need to worry about further access sibling keys in array case\n        return subContent;\n      }\n\n      if (isObject(subChanges)) {\n        if (isObject(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n          return { ...subContent, ...subChanges };\n        } else if (Array.isArray(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n\n          return objectToArray(mergeDeep(arrayToObject(subContent), subChanges));\n        }\n      }\n\n      return subChanges;\n    }\n\n    return subContent;\n  }\n\n  set<T>(key: string, value: T): void {\n    if (this.hasOwnProperty(key) || keyInObject(this, key)) {\n      this[key] = value;\n    } else {\n      this.setUnknownProperty(key, value);\n    }\n  }\n}\n\n/**\n * Creates new changesets.\n */\nexport function changeset(\n  obj: object,\n  validateFn?: ValidatorAction,\n  validationMap?: ValidatorMap | null | undefined,\n  options?: Config\n): BufferedChangeset {\n  return new BufferedChangeset(obj, validateFn, validationMap, options);\n}\n\ntype T20 = InstanceType<typeof BufferedChangeset>;\n\nexport class ValidatedChangeset {\n  /**\n   * Changeset factory class if you need to extend\n   *\n   * @class ValidatedChangeset\n   * @constructor\n   */\n  constructor(\n    obj: object,\n    validateFn?: ValidatorAction,\n    validationMap?: ValidatorMap | null | undefined,\n    options?: Config\n  ) {\n    const c: BufferedChangeset = changeset(obj, validateFn, validationMap, options);\n\n    return new Proxy(c, {\n      get(targetBuffer, key /*, receiver*/) {\n        const res = targetBuffer.get(key.toString());\n        return res;\n      },\n\n      set(targetBuffer, key, value /*, receiver*/) {\n        targetBuffer.set(key.toString(), value);\n        return true;\n      }\n    }) as T20;\n  }\n}\n\nexport function Changeset(\n  obj: object,\n  validateFn?: ValidatorAction,\n  validationMap?: ValidatorMap | null | undefined,\n  options?: Config\n): BufferedChangeset {\n  const c: BufferedChangeset = changeset(obj, validateFn, validationMap, options);\n\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  });\n}\n\n// determine if two values are equal\nfunction isEqual(v1: unknown, v2: unknown) {\n  if (v1 instanceof Date && v2 instanceof Date) {\n    return v1.getTime() === v2.getTime();\n  }\n\n  return v1 === v2;\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar internalCommon = require('./internal-common.cjs');\nvar preact = require('preact');\nrequire('preact/compat');\n\nconst globalLocales = [];\n\nconst MINIMAL_RAW_EN_LOCALE = {\n    code: 'en',\n    week: {\n        dow: 0,\n        doy: 4, // 4 days need to be within the year to be considered the first week\n    },\n    direction: 'ltr',\n    buttonText: {\n        prev: 'prev',\n        next: 'next',\n        prevYear: 'prev year',\n        nextYear: 'next year',\n        year: 'year',\n        today: 'today',\n        month: 'month',\n        week: 'week',\n        day: 'day',\n        list: 'list',\n    },\n    weekText: 'W',\n    weekTextLong: 'Week',\n    closeHint: 'Close',\n    timeHint: 'Time',\n    eventHint: 'Event',\n    allDayText: 'all-day',\n    moreLinkText: 'more',\n    noEventsText: 'No events to display',\n};\nconst RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), { \n    // Includes things we don't want other locales to inherit,\n    // things that derive from other translatable strings.\n    buttonHints: {\n        prev: 'Previous $0',\n        next: 'Next $0',\n        today(buttonText, unit) {\n            return (unit === 'day')\n                ? 'Today'\n                : `This ${buttonText}`;\n        },\n    }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {\n        return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;\n    } });\nfunction organizeRawLocales(explicitRawLocales) {\n    let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';\n    let allRawLocales = globalLocales.concat(explicitRawLocales);\n    let rawLocaleMap = {\n        en: RAW_EN_LOCALE,\n    };\n    for (let rawLocale of allRawLocales) {\n        rawLocaleMap[rawLocale.code] = rawLocale;\n    }\n    return {\n        map: rawLocaleMap,\n        defaultCode,\n    };\n}\nfunction buildLocale(inputSingular, available) {\n    if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {\n        return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);\n    }\n    return queryLocale(inputSingular, available);\n}\nfunction queryLocale(codeArg, available) {\n    let codes = [].concat(codeArg || []); // will convert to array\n    let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;\n    return parseLocale(codeArg, codes, raw);\n}\nfunction queryRawLocale(codes, available) {\n    for (let i = 0; i < codes.length; i += 1) {\n        let parts = codes[i].toLocaleLowerCase().split('-');\n        for (let j = parts.length; j > 0; j -= 1) {\n            let simpleId = parts.slice(0, j).join('-');\n            if (available[simpleId]) {\n                return available[simpleId];\n            }\n        }\n    }\n    return null;\n}\nfunction parseLocale(codeArg, codes, raw) {\n    let merged = internalCommon.mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);\n    delete merged.code; // don't want this part of the options\n    let { week } = merged;\n    delete merged.week;\n    return {\n        codeArg,\n        codes,\n        week,\n        simpleNumberFormat: new Intl.NumberFormat(codeArg),\n        options: merged,\n    };\n}\n\n// TODO: easier way to add new hooks? need to update a million things\nfunction createPlugin(input) {\n    return {\n        id: internalCommon.guid(),\n        name: input.name,\n        premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,\n        deps: input.deps || [],\n        reducers: input.reducers || [],\n        isLoadingFuncs: input.isLoadingFuncs || [],\n        contextInit: [].concat(input.contextInit || []),\n        eventRefiners: input.eventRefiners || {},\n        eventDefMemberAdders: input.eventDefMemberAdders || [],\n        eventSourceRefiners: input.eventSourceRefiners || {},\n        isDraggableTransformers: input.isDraggableTransformers || [],\n        eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n        eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n        dateSelectionTransformers: input.dateSelectionTransformers || [],\n        datePointTransforms: input.datePointTransforms || [],\n        dateSpanTransforms: input.dateSpanTransforms || [],\n        views: input.views || {},\n        viewPropsTransformers: input.viewPropsTransformers || [],\n        isPropsValid: input.isPropsValid || null,\n        externalDefTransforms: input.externalDefTransforms || [],\n        viewContainerAppends: input.viewContainerAppends || [],\n        eventDropTransformers: input.eventDropTransformers || [],\n        componentInteractions: input.componentInteractions || [],\n        calendarInteractions: input.calendarInteractions || [],\n        themeClasses: input.themeClasses || {},\n        eventSourceDefs: input.eventSourceDefs || [],\n        cmdFormatter: input.cmdFormatter,\n        recurringTypes: input.recurringTypes || [],\n        namedTimeZonedImpl: input.namedTimeZonedImpl,\n        initialView: input.initialView || '',\n        elementDraggingImpl: input.elementDraggingImpl,\n        optionChangeHandlers: input.optionChangeHandlers || {},\n        scrollGridImpl: input.scrollGridImpl || null,\n        listenerRefiners: input.listenerRefiners || {},\n        optionRefiners: input.optionRefiners || {},\n        propSetHandlers: input.propSetHandlers || {},\n    };\n}\nfunction buildPluginHooks(pluginDefs, globalDefs) {\n    let currentPluginIds = {};\n    let hooks = {\n        premiumReleaseDate: undefined,\n        reducers: [],\n        isLoadingFuncs: [],\n        contextInit: [],\n        eventRefiners: {},\n        eventDefMemberAdders: [],\n        eventSourceRefiners: {},\n        isDraggableTransformers: [],\n        eventDragMutationMassagers: [],\n        eventDefMutationAppliers: [],\n        dateSelectionTransformers: [],\n        datePointTransforms: [],\n        dateSpanTransforms: [],\n        views: {},\n        viewPropsTransformers: [],\n        isPropsValid: null,\n        externalDefTransforms: [],\n        viewContainerAppends: [],\n        eventDropTransformers: [],\n        componentInteractions: [],\n        calendarInteractions: [],\n        themeClasses: {},\n        eventSourceDefs: [],\n        cmdFormatter: null,\n        recurringTypes: [],\n        namedTimeZonedImpl: null,\n        initialView: '',\n        elementDraggingImpl: null,\n        optionChangeHandlers: {},\n        scrollGridImpl: null,\n        listenerRefiners: {},\n        optionRefiners: {},\n        propSetHandlers: {},\n    };\n    function addDefs(defs) {\n        for (let def of defs) {\n            const pluginName = def.name;\n            const currentId = currentPluginIds[pluginName];\n            if (currentId === undefined) {\n                currentPluginIds[pluginName] = def.id;\n                addDefs(def.deps);\n                hooks = combineHooks(hooks, def);\n            }\n            else if (currentId !== def.id) {\n                // different ID than the one already added\n                console.warn(`Duplicate plugin '${pluginName}'`);\n            }\n        }\n    }\n    if (pluginDefs) {\n        addDefs(pluginDefs);\n    }\n    addDefs(globalDefs);\n    return hooks;\n}\nfunction buildBuildPluginHooks() {\n    let currentOverrideDefs = [];\n    let currentGlobalDefs = [];\n    let currentHooks;\n    return (overrideDefs, globalDefs) => {\n        if (!currentHooks || !internalCommon.isArraysEqual(overrideDefs, currentOverrideDefs) || !internalCommon.isArraysEqual(globalDefs, currentGlobalDefs)) {\n            currentHooks = buildPluginHooks(overrideDefs, globalDefs);\n        }\n        currentOverrideDefs = overrideDefs;\n        currentGlobalDefs = globalDefs;\n        return currentHooks;\n    };\n}\nfunction combineHooks(hooks0, hooks1) {\n    return {\n        premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),\n        reducers: hooks0.reducers.concat(hooks1.reducers),\n        isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),\n        contextInit: hooks0.contextInit.concat(hooks1.contextInit),\n        eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),\n        eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),\n        eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),\n        isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),\n        eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n        eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n        dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n        datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n        dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n        views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),\n        viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n        isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n        externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n        viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),\n        eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n        calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n        componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n        themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),\n        eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n        cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n        recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n        namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n        initialView: hooks0.initialView || hooks1.initialView,\n        elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,\n        optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),\n        scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,\n        listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),\n        optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),\n        propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),\n    };\n}\nfunction compareOptionalDates(date0, date1) {\n    if (date0 === undefined) {\n        return date1;\n    }\n    if (date1 === undefined) {\n        return date0;\n    }\n    return new Date(Math.max(date0.valueOf(), date1.valueOf()));\n}\n\nclass StandardTheme extends internalCommon.Theme {\n}\nStandardTheme.prototype.classes = {\n    root: 'fc-theme-standard',\n    tableCellShaded: 'fc-cell-shaded',\n    buttonGroup: 'fc-button-group',\n    button: 'fc-button fc-button-primary',\n    buttonActive: 'fc-button-active',\n};\nStandardTheme.prototype.baseIconClass = 'fc-icon';\nStandardTheme.prototype.iconClasses = {\n    close: 'fc-icon-x',\n    prev: 'fc-icon-chevron-left',\n    next: 'fc-icon-chevron-right',\n    prevYear: 'fc-icon-chevrons-left',\n    nextYear: 'fc-icon-chevrons-right',\n};\nStandardTheme.prototype.rtlIconClasses = {\n    prev: 'fc-icon-chevron-right',\n    next: 'fc-icon-chevron-left',\n    prevYear: 'fc-icon-chevrons-right',\n    nextYear: 'fc-icon-chevrons-left',\n};\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n\nfunction compileViewDefs(defaultConfigs, overrideConfigs) {\n    let hash = {};\n    let viewType;\n    for (viewType in defaultConfigs) {\n        ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n    }\n    for (viewType in overrideConfigs) {\n        ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n    }\n    return hash;\n}\nfunction ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n    if (hash[viewType]) {\n        return hash[viewType];\n    }\n    let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n    if (viewDef) {\n        hash[viewType] = viewDef;\n    }\n    return viewDef;\n}\nfunction buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n    let defaultConfig = defaultConfigs[viewType];\n    let overrideConfig = overrideConfigs[viewType];\n    let queryProp = (name) => ((defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :\n        ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null));\n    let theComponent = queryProp('component');\n    let superType = queryProp('superType');\n    let superDef = null;\n    if (superType) {\n        if (superType === viewType) {\n            throw new Error('Can\\'t have a custom view type that references itself');\n        }\n        superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);\n    }\n    if (!theComponent && superDef) {\n        theComponent = superDef.component;\n    }\n    if (!theComponent) {\n        return null; // don't throw a warning, might be settings for a single-unit view\n    }\n    return {\n        type: viewType,\n        component: theComponent,\n        defaults: Object.assign(Object.assign({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),\n        overrides: Object.assign(Object.assign({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {})),\n    };\n}\n\nfunction parseViewConfigs(inputs) {\n    return internalCommon.mapHash(inputs, parseViewConfig);\n}\nfunction parseViewConfig(input) {\n    let rawOptions = typeof input === 'function' ?\n        { component: input } :\n        input;\n    let { component } = rawOptions;\n    if (rawOptions.content) {\n        // TODO: remove content/classNames/didMount/etc from options?\n        component = createViewHookComponent(rawOptions);\n    }\n    else if (component && !(component.prototype instanceof internalCommon.BaseComponent)) {\n        // WHY?: people were using `component` property for `content`\n        // TODO: converge on one setting name\n        component = createViewHookComponent(Object.assign(Object.assign({}, rawOptions), { content: component }));\n    }\n    return {\n        superType: rawOptions.type,\n        component: component,\n        rawOptions, // includes type and component too :(\n    };\n}\nfunction createViewHookComponent(options) {\n    return (viewProps) => (preact.createElement(internalCommon.ViewContextType.Consumer, null, (context) => (preact.createElement(internalCommon.ContentContainer, { elTag: \"div\", elClasses: internalCommon.buildViewClassNames(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: undefined, customGenerator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));\n}\n\nfunction buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n    let defaultConfigs = parseViewConfigs(defaultInputs);\n    let overrideConfigs = parseViewConfigs(optionOverrides.views);\n    let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);\n    return internalCommon.mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));\n}\nfunction buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n    let durationInput = viewDef.overrides.duration ||\n        viewDef.defaults.duration ||\n        dynamicOptionOverrides.duration ||\n        optionOverrides.duration;\n    let duration = null;\n    let durationUnit = '';\n    let singleUnit = '';\n    let singleUnitOverrides = {};\n    if (durationInput) {\n        duration = createDurationCached(durationInput);\n        if (duration) { // valid?\n            let denom = internalCommon.greatestDurationDenominator(duration);\n            durationUnit = denom.unit;\n            if (denom.value === 1) {\n                singleUnit = durationUnit;\n                singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};\n            }\n        }\n    }\n    let queryButtonText = (optionsSubset) => {\n        let buttonTextMap = optionsSubset.buttonText || {};\n        let buttonTextKey = viewDef.defaults.buttonTextKey;\n        if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n            return buttonTextMap[buttonTextKey];\n        }\n        if (buttonTextMap[viewDef.type] != null) {\n            return buttonTextMap[viewDef.type];\n        }\n        if (buttonTextMap[singleUnit] != null) {\n            return buttonTextMap[singleUnit];\n        }\n        return null;\n    };\n    let queryButtonTitle = (optionsSubset) => {\n        let buttonHints = optionsSubset.buttonHints || {};\n        let buttonKey = viewDef.defaults.buttonTextKey; // use same key as text\n        if (buttonKey != null && buttonHints[buttonKey] != null) {\n            return buttonHints[buttonKey];\n        }\n        if (buttonHints[viewDef.type] != null) {\n            return buttonHints[viewDef.type];\n        }\n        if (buttonHints[singleUnit] != null) {\n            return buttonHints[singleUnit];\n        }\n        return null;\n    };\n    return {\n        type: viewDef.type,\n        component: viewDef.component,\n        duration,\n        durationUnit,\n        singleUnit,\n        optionDefaults: viewDef.defaults,\n        optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),\n        buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||\n            queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence\n            viewDef.overrides.buttonText,\n        buttonTextDefault: queryButtonText(localeDefaults) ||\n            viewDef.defaults.buttonText ||\n            queryButtonText(internalCommon.BASE_OPTION_DEFAULTS) ||\n            viewDef.type,\n        // not DRY\n        buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||\n            queryButtonTitle(optionOverrides) ||\n            viewDef.overrides.buttonHint,\n        buttonTitleDefault: queryButtonTitle(localeDefaults) ||\n            viewDef.defaults.buttonHint ||\n            queryButtonTitle(internalCommon.BASE_OPTION_DEFAULTS),\n        // will eventually fall back to buttonText\n    };\n}\n// hack to get memoization working\nlet durationInputMap = {};\nfunction createDurationCached(durationInput) {\n    let json = JSON.stringify(durationInput);\n    let res = durationInputMap[json];\n    if (res === undefined) {\n        res = internalCommon.createDuration(durationInput);\n        durationInputMap[json] = res;\n    }\n    return res;\n}\n\nfunction reduceViewType(viewType, action) {\n    switch (action.type) {\n        case 'CHANGE_VIEW_TYPE':\n            viewType = action.viewType;\n    }\n    return viewType;\n}\n\nfunction reduceCurrentDate(currentDate, action) {\n    switch (action.type) {\n        case 'CHANGE_DATE':\n            return action.dateMarker;\n        default:\n            return currentDate;\n    }\n}\n// should be initialized once and stay constant\n// this will change too\nfunction getInitialDate(options, dateEnv, nowManager) {\n    let initialDateInput = options.initialDate;\n    // compute the initial ambig-timezone date\n    if (initialDateInput != null) {\n        return dateEnv.createMarker(initialDateInput);\n    }\n    return nowManager.getDateMarker();\n}\n\nfunction reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {\n    switch (action.type) {\n        case 'SET_OPTION':\n            return Object.assign(Object.assign({}, dynamicOptionOverrides), { [action.optionName]: action.rawOptionValue });\n        default:\n            return dynamicOptionOverrides;\n    }\n}\n\nfunction reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {\n    let dp;\n    switch (action.type) {\n        case 'CHANGE_VIEW_TYPE':\n            return dateProfileGenerator.build(action.dateMarker || currentDate);\n        case 'CHANGE_DATE':\n            return dateProfileGenerator.build(action.dateMarker);\n        case 'PREV':\n            dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);\n            if (dp.isValid) {\n                return dp;\n            }\n            break;\n        case 'NEXT':\n            dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);\n            if (dp.isValid) {\n                return dp;\n            }\n            break;\n    }\n    return currentDateProfile;\n}\n\nfunction initEventSources(calendarOptions, dateProfile, context) {\n    let activeRange = dateProfile ? dateProfile.activeRange : null;\n    return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);\n}\nfunction reduceEventSources(eventSources, action, dateProfile, context) {\n    let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n    switch (action.type) {\n        case 'ADD_EVENT_SOURCES': // already parsed\n            return addSources(eventSources, action.sources, activeRange, context);\n        case 'REMOVE_EVENT_SOURCE':\n            return removeSource(eventSources, action.sourceId);\n        case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n        case 'NEXT':\n        case 'CHANGE_DATE':\n        case 'CHANGE_VIEW_TYPE':\n            if (dateProfile) {\n                return fetchDirtySources(eventSources, activeRange, context);\n            }\n            return eventSources;\n        case 'FETCH_EVENT_SOURCES':\n            return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?\n                internalCommon.arrayToHash(action.sourceIds) :\n                excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);\n        case 'RECEIVE_EVENTS':\n        case 'RECEIVE_EVENT_ERROR':\n            return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);\n        case 'REMOVE_ALL_EVENT_SOURCES':\n            return {};\n        default:\n            return eventSources;\n    }\n}\nfunction reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {\n    let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n    return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);\n}\nfunction computeEventSourcesLoading(eventSources) {\n    for (let sourceId in eventSources) {\n        if (eventSources[sourceId].isFetching) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction addSources(eventSourceHash, sources, fetchRange, context) {\n    let hash = {};\n    for (let source of sources) {\n        hash[source.sourceId] = source;\n    }\n    if (fetchRange) {\n        hash = fetchDirtySources(hash, fetchRange, context);\n    }\n    return Object.assign(Object.assign({}, eventSourceHash), hash);\n}\nfunction removeSource(eventSourceHash, sourceId) {\n    return internalCommon.filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);\n}\nfunction fetchDirtySources(sourceHash, fetchRange, context) {\n    return fetchSourcesByIds(sourceHash, internalCommon.filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);\n}\nfunction isSourceDirty(eventSource, fetchRange, context) {\n    if (!doesSourceNeedRange(eventSource, context)) {\n        return !eventSource.latestFetchId;\n    }\n    return !context.options.lazyFetching ||\n        !eventSource.fetchRange ||\n        eventSource.isFetching || // always cancel outdated in-progress fetches\n        fetchRange.start < eventSource.fetchRange.start ||\n        fetchRange.end > eventSource.fetchRange.end;\n}\nfunction fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {\n    let nextSources = {};\n    for (let sourceId in prevSources) {\n        let source = prevSources[sourceId];\n        if (sourceIdHash[sourceId]) {\n            nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);\n        }\n        else {\n            nextSources[sourceId] = source;\n        }\n    }\n    return nextSources;\n}\nfunction fetchSource(eventSource, fetchRange, isRefetch, context) {\n    let { options, calendarApi } = context;\n    let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];\n    let fetchId = internalCommon.guid();\n    sourceDef.fetch({\n        eventSource,\n        range: fetchRange,\n        isRefetch,\n        context,\n    }, (res) => {\n        let { rawEvents } = res;\n        if (options.eventSourceSuccess) {\n            rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;\n        }\n        if (eventSource.success) {\n            rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;\n        }\n        context.dispatch({\n            type: 'RECEIVE_EVENTS',\n            sourceId: eventSource.sourceId,\n            fetchId,\n            fetchRange,\n            rawEvents,\n        });\n    }, (error) => {\n        let errorHandled = false;\n        if (options.eventSourceFailure) {\n            options.eventSourceFailure.call(calendarApi, error);\n            errorHandled = true;\n        }\n        if (eventSource.failure) {\n            eventSource.failure(error);\n            errorHandled = true;\n        }\n        if (!errorHandled) {\n            console.warn(error.message, error);\n        }\n        context.dispatch({\n            type: 'RECEIVE_EVENT_ERROR',\n            sourceId: eventSource.sourceId,\n            fetchId,\n            fetchRange,\n            error,\n        });\n    });\n    return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });\n}\nfunction receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {\n    let eventSource = sourceHash[sourceId];\n    if (eventSource && // not already removed\n        fetchId === eventSource.latestFetchId) {\n        return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });\n    }\n    return sourceHash;\n}\nfunction excludeStaticSources(eventSources, context) {\n    return internalCommon.filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));\n}\nfunction parseInitialSources(rawOptions, context) {\n    let refiners = internalCommon.buildEventSourceRefiners(context);\n    let rawSources = [].concat(rawOptions.eventSources || []);\n    let sources = []; // parsed\n    if (rawOptions.initialEvents) {\n        rawSources.unshift(rawOptions.initialEvents);\n    }\n    if (rawOptions.events) {\n        rawSources.unshift(rawOptions.events);\n    }\n    for (let rawSource of rawSources) {\n        let source = internalCommon.parseEventSource(rawSource, context, refiners);\n        if (source) {\n            sources.push(source);\n        }\n    }\n    return sources;\n}\nfunction doesSourceNeedRange(eventSource, context) {\n    let defs = context.pluginHooks.eventSourceDefs;\n    return !defs[eventSource.sourceDefId].ignoreRange;\n}\n\nfunction reduceDateSelection(currentSelection, action) {\n    switch (action.type) {\n        case 'UNSELECT_DATES':\n            return null;\n        case 'SELECT_DATES':\n            return action.selection;\n        default:\n            return currentSelection;\n    }\n}\n\nfunction reduceSelectedEvent(currentInstanceId, action) {\n    switch (action.type) {\n        case 'UNSELECT_EVENT':\n            return '';\n        case 'SELECT_EVENT':\n            return action.eventInstanceId;\n        default:\n            return currentInstanceId;\n    }\n}\n\nfunction reduceEventDrag(currentDrag, action) {\n    let newDrag;\n    switch (action.type) {\n        case 'UNSET_EVENT_DRAG':\n            return null;\n        case 'SET_EVENT_DRAG':\n            newDrag = action.state;\n            return {\n                affectedEvents: newDrag.affectedEvents,\n                mutatedEvents: newDrag.mutatedEvents,\n                isEvent: newDrag.isEvent,\n            };\n        default:\n            return currentDrag;\n    }\n}\n\nfunction reduceEventResize(currentResize, action) {\n    let newResize;\n    switch (action.type) {\n        case 'UNSET_EVENT_RESIZE':\n            return null;\n        case 'SET_EVENT_RESIZE':\n            newResize = action.state;\n            return {\n                affectedEvents: newResize.affectedEvents,\n                mutatedEvents: newResize.mutatedEvents,\n                isEvent: newResize.isEvent,\n            };\n        default:\n            return currentResize;\n    }\n}\n\nfunction parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n    let header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n    let footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n    return { header, footer };\n}\nfunction parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n    let sectionWidgets = {};\n    let viewsWithButtons = [];\n    let hasTitle = false;\n    for (let sectionName in sectionStrHash) {\n        let sectionStr = sectionStrHash[sectionName];\n        let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);\n        sectionWidgets[sectionName] = sectionRes.widgets;\n        viewsWithButtons.push(...sectionRes.viewsWithButtons);\n        hasTitle = hasTitle || sectionRes.hasTitle;\n    }\n    return { sectionWidgets, viewsWithButtons, hasTitle };\n}\n/*\nBAD: querying icons and text here. should be done at render time\n*/\nfunction parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined\ncalendarOptionOverrides, // overrides only!, unrefined :(\ntheme, viewSpecs, calendarApi) {\n    let isRtl = calendarOptions.direction === 'rtl';\n    let calendarCustomButtons = calendarOptions.customButtons || {};\n    let calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};\n    let calendarButtonText = calendarOptions.buttonText || {};\n    let calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};\n    let calendarButtonHints = calendarOptions.buttonHints || {};\n    let sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];\n    let viewsWithButtons = [];\n    let hasTitle = false;\n    let widgets = sectionSubstrs.map((buttonGroupStr) => (buttonGroupStr.split(',').map((buttonName) => {\n        if (buttonName === 'title') {\n            hasTitle = true;\n            return { buttonName };\n        }\n        let customButtonProps;\n        let viewSpec;\n        let buttonClick;\n        let buttonIcon; // only one of these will be set\n        let buttonText; // \"\n        let buttonHint;\n        // ^ for the title=\"\" attribute, for accessibility\n        if ((customButtonProps = calendarCustomButtons[buttonName])) {\n            buttonClick = (ev) => {\n                if (customButtonProps.click) {\n                    customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?\n                }\n            };\n            (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n                (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n                (buttonText = customButtonProps.text);\n            buttonHint = customButtonProps.hint || customButtonProps.text;\n        }\n        else if ((viewSpec = viewSpecs[buttonName])) {\n            viewsWithButtons.push(buttonName);\n            buttonClick = () => {\n                calendarApi.changeView(buttonName);\n            };\n            (buttonText = viewSpec.buttonTextOverride) ||\n                (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n                (buttonText = viewSpec.buttonTextDefault);\n            let textFallback = viewSpec.buttonTextOverride ||\n                viewSpec.buttonTextDefault;\n            buttonHint = internalCommon.formatWithOrdinals(viewSpec.buttonTitleOverride ||\n                viewSpec.buttonTitleDefault ||\n                calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName\n            textFallback);\n        }\n        else if (calendarApi[buttonName]) { // a calendarApi method\n            buttonClick = () => {\n                calendarApi[buttonName]();\n            };\n            (buttonText = calendarButtonTextOverrides[buttonName]) ||\n                (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n                (buttonText = calendarButtonText[buttonName]); // everything else is considered default\n            if (buttonName === 'prevYear' || buttonName === 'nextYear') {\n                let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';\n                buttonHint = internalCommon.formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||\n                    calendarButtonHints[prevOrNext], [\n                    calendarButtonText.year || 'year',\n                    'year',\n                ], calendarButtonText[buttonName]);\n            }\n            else {\n                buttonHint = (navUnit) => internalCommon.formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||\n                    calendarButtonHints[buttonName], [\n                    calendarButtonText[navUnit] || navUnit,\n                    navUnit,\n                ], calendarButtonText[buttonName]);\n            }\n        }\n        return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };\n    })));\n    return { widgets, viewsWithButtons, hasTitle };\n}\n\n// always represents the current view. otherwise, it'd need to change value every time date changes\nclass ViewImpl {\n    constructor(type, getCurrentData, dateEnv) {\n        this.type = type;\n        this.getCurrentData = getCurrentData;\n        this.dateEnv = dateEnv;\n    }\n    get calendar() {\n        return this.getCurrentData().calendarApi;\n    }\n    get title() {\n        return this.getCurrentData().viewTitle;\n    }\n    get activeStart() {\n        return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);\n    }\n    get activeEnd() {\n        return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);\n    }\n    get currentStart() {\n        return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);\n    }\n    get currentEnd() {\n        return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);\n    }\n    getOption(name) {\n        return this.getCurrentData().options[name]; // are the view-specific options\n    }\n}\n\nlet eventSourceDef$2 = {\n    ignoreRange: true,\n    parseMeta(refined) {\n        if (Array.isArray(refined.events)) {\n            return refined.events;\n        }\n        return null;\n    },\n    fetch(arg, successCallback) {\n        successCallback({\n            rawEvents: arg.eventSource.meta,\n        });\n    },\n};\nconst arrayEventSourcePlugin = createPlugin({\n    name: 'array-event-source',\n    eventSourceDefs: [eventSourceDef$2],\n});\n\nlet eventSourceDef$1 = {\n    parseMeta(refined) {\n        if (typeof refined.events === 'function') {\n            return refined.events;\n        }\n        return null;\n    },\n    fetch(arg, successCallback, errorCallback) {\n        const { dateEnv } = arg.context;\n        const func = arg.eventSource.meta;\n        internalCommon.unpromisify(func.bind(null, internalCommon.buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);\n    },\n};\nconst funcEventSourcePlugin = createPlugin({\n    name: 'func-event-source',\n    eventSourceDefs: [eventSourceDef$1],\n});\n\nconst JSON_FEED_EVENT_SOURCE_REFINERS = {\n    method: String,\n    extraParams: internalCommon.identity,\n    startParam: String,\n    endParam: String,\n    timeZoneParam: String,\n};\n\nlet eventSourceDef = {\n    parseMeta(refined) {\n        if (refined.url && (refined.format === 'json' || !refined.format)) {\n            return {\n                url: refined.url,\n                format: 'json',\n                method: (refined.method || 'GET').toUpperCase(),\n                extraParams: refined.extraParams,\n                startParam: refined.startParam,\n                endParam: refined.endParam,\n                timeZoneParam: refined.timeZoneParam,\n            };\n        }\n        return null;\n    },\n    fetch(arg, successCallback, errorCallback) {\n        const { meta } = arg.eventSource;\n        const requestParams = buildRequestParams(meta, arg.range, arg.context);\n        internalCommon.requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {\n            successCallback({ rawEvents, response });\n        }, errorCallback);\n    },\n};\nconst jsonFeedEventSourcePlugin = createPlugin({\n    name: 'json-event-source',\n    eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,\n    eventSourceDefs: [eventSourceDef],\n});\nfunction buildRequestParams(meta, range, context) {\n    let { dateEnv, options } = context;\n    let startParam;\n    let endParam;\n    let timeZoneParam;\n    let customRequestParams;\n    let params = {};\n    startParam = meta.startParam;\n    if (startParam == null) {\n        startParam = options.startParam;\n    }\n    endParam = meta.endParam;\n    if (endParam == null) {\n        endParam = options.endParam;\n    }\n    timeZoneParam = meta.timeZoneParam;\n    if (timeZoneParam == null) {\n        timeZoneParam = options.timeZoneParam;\n    }\n    // retrieve any outbound GET/POST data from the options\n    if (typeof meta.extraParams === 'function') {\n        // supplied as a function that returns a key/value object\n        customRequestParams = meta.extraParams();\n    }\n    else {\n        // probably supplied as a straight key/value object\n        customRequestParams = meta.extraParams || {};\n    }\n    Object.assign(params, customRequestParams);\n    params[startParam] = dateEnv.formatIso(range.start);\n    params[endParam] = dateEnv.formatIso(range.end);\n    if (dateEnv.timeZone !== 'local') {\n        params[timeZoneParam] = dateEnv.timeZone;\n    }\n    return params;\n}\n\nconst SIMPLE_RECURRING_REFINERS = {\n    daysOfWeek: internalCommon.identity,\n    startTime: internalCommon.createDuration,\n    endTime: internalCommon.createDuration,\n    duration: internalCommon.createDuration,\n    startRecur: internalCommon.identity,\n    endRecur: internalCommon.identity,\n};\n\nlet recurring = {\n    parse(refined, dateEnv) {\n        if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {\n            let recurringData = {\n                daysOfWeek: refined.daysOfWeek || null,\n                startTime: refined.startTime || null,\n                endTime: refined.endTime || null,\n                startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,\n                endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,\n                dateEnv,\n            };\n            let duration;\n            if (refined.duration) {\n                duration = refined.duration;\n            }\n            if (!duration && refined.startTime && refined.endTime) {\n                duration = internalCommon.subtractDurations(refined.endTime, refined.startTime);\n            }\n            return {\n                allDayGuess: Boolean(!refined.startTime && !refined.endTime),\n                duration,\n                typeData: recurringData, // doesn't need endTime anymore but oh well\n            };\n        }\n        return null;\n    },\n    expand(typeData, framingRange, dateEnv) {\n        let clippedFramingRange = internalCommon.intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });\n        if (clippedFramingRange) {\n            return expandRanges(typeData.daysOfWeek, typeData.startTime, typeData.dateEnv, dateEnv, clippedFramingRange);\n        }\n        return [];\n    },\n};\nconst simpleRecurringEventsPlugin = createPlugin({\n    name: 'simple-recurring-event',\n    recurringTypes: [recurring],\n    eventRefiners: SIMPLE_RECURRING_REFINERS,\n});\nfunction expandRanges(daysOfWeek, startTime, eventDateEnv, calendarDateEnv, framingRange) {\n    let dowHash = daysOfWeek ? internalCommon.arrayToHash(daysOfWeek) : null;\n    let dayMarker = internalCommon.startOfDay(framingRange.start);\n    let endMarker = framingRange.end;\n    let instanceStarts = [];\n    // https://github.com/fullcalendar/fullcalendar/issues/7934\n    if (startTime) {\n        if (startTime.milliseconds < 0) {\n            // possible for next-day to have negative business hours that go into current day\n            endMarker = internalCommon.addDays(endMarker, 1);\n        }\n        else if (startTime.milliseconds >= 1000 * 60 * 60 * 24) {\n            // possible for prev-day to have >24hr business hours that go into current day\n            dayMarker = internalCommon.addDays(dayMarker, -1);\n        }\n    }\n    while (dayMarker < endMarker) {\n        let instanceStart;\n        // if everyday, or this particular day-of-week\n        if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n            if (startTime) {\n                instanceStart = calendarDateEnv.add(dayMarker, startTime);\n            }\n            else {\n                instanceStart = dayMarker;\n            }\n            instanceStarts.push(calendarDateEnv.createMarker(eventDateEnv.toDate(instanceStart)));\n        }\n        dayMarker = internalCommon.addDays(dayMarker, 1);\n    }\n    return instanceStarts;\n}\n\nconst changeHandlerPlugin = createPlugin({\n    name: 'change-handler',\n    optionChangeHandlers: {\n        events(events, context) {\n            handleEventSources([events], context);\n        },\n        eventSources: handleEventSources,\n    },\n});\n/*\nBUG: if `event` was supplied, all previously-given `eventSources` will be wiped out\n*/\nfunction handleEventSources(inputs, context) {\n    let unfoundSources = internalCommon.hashValuesToArray(context.getCurrentData().eventSources);\n    if (unfoundSources.length === 1 &&\n        inputs.length === 1 &&\n        Array.isArray(unfoundSources[0]._raw) &&\n        Array.isArray(inputs[0])) {\n        context.dispatch({\n            type: 'RESET_RAW_EVENTS',\n            sourceId: unfoundSources[0].sourceId,\n            rawEvents: inputs[0],\n        });\n        return;\n    }\n    let newInputs = [];\n    for (let input of inputs) {\n        let inputFound = false;\n        for (let i = 0; i < unfoundSources.length; i += 1) {\n            if (unfoundSources[i]._raw === input) {\n                unfoundSources.splice(i, 1); // delete\n                inputFound = true;\n                break;\n            }\n        }\n        if (!inputFound) {\n            newInputs.push(input);\n        }\n    }\n    for (let unfoundSource of unfoundSources) {\n        context.dispatch({\n            type: 'REMOVE_EVENT_SOURCE',\n            sourceId: unfoundSource.sourceId,\n        });\n    }\n    for (let newInput of newInputs) {\n        context.calendarApi.addEventSource(newInput);\n    }\n}\n\nfunction handleDateProfile(dateProfile, context) {\n    context.emitter.trigger('datesSet', Object.assign(Object.assign({}, internalCommon.buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));\n}\n\nfunction handleEventStore(eventStore, context) {\n    let { emitter } = context;\n    if (emitter.hasHandlers('eventsSet')) {\n        emitter.trigger('eventsSet', internalCommon.buildEventApis(eventStore, context));\n    }\n}\n\n/*\nthis array is exposed on the root namespace so that UMD plugins can add to it.\nsee the rollup-bundles script.\n*/\nconst globalPlugins = [\n    arrayEventSourcePlugin,\n    funcEventSourcePlugin,\n    jsonFeedEventSourcePlugin,\n    simpleRecurringEventsPlugin,\n    changeHandlerPlugin,\n    createPlugin({\n        name: 'misc',\n        isLoadingFuncs: [\n            (state) => computeEventSourcesLoading(state.eventSources),\n        ],\n        propSetHandlers: {\n            dateProfile: handleDateProfile,\n            eventStore: handleEventStore,\n        },\n    }),\n];\n\nclass TaskRunner {\n    constructor(runTaskOption, drainedOption) {\n        this.runTaskOption = runTaskOption;\n        this.drainedOption = drainedOption;\n        this.queue = [];\n        this.delayedRunner = new internalCommon.DelayedRunner(this.drain.bind(this));\n    }\n    request(task, delay) {\n        this.queue.push(task);\n        this.delayedRunner.request(delay);\n    }\n    pause(scope) {\n        this.delayedRunner.pause(scope);\n    }\n    resume(scope, force) {\n        this.delayedRunner.resume(scope, force);\n    }\n    drain() {\n        let { queue } = this;\n        while (queue.length) {\n            let completedTasks = [];\n            let task;\n            while ((task = queue.shift())) {\n                this.runTask(task);\n                completedTasks.push(task);\n            }\n            this.drained(completedTasks);\n        } // keep going, in case new tasks were added in the drained handler\n    }\n    runTask(task) {\n        if (this.runTaskOption) {\n            this.runTaskOption(task);\n        }\n    }\n    drained(completedTasks) {\n        if (this.drainedOption) {\n            this.drainedOption(completedTasks);\n        }\n    }\n}\n\n// Computes what the title at the top of the calendarApi should be for this view\nfunction buildTitle(dateProfile, viewOptions, dateEnv) {\n    let range;\n    // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n    if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n        range = dateProfile.currentRange;\n    }\n    else { // for day units or smaller, use the actual day range\n        range = dateProfile.activeRange;\n    }\n    return dateEnv.formatRange(range.start, range.end, internalCommon.createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {\n        isEndExclusive: dateProfile.isRangeAllDay,\n        defaultSeparator: viewOptions.titleRangeSeparator,\n    });\n}\n// Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\nfunction buildTitleFormat(dateProfile) {\n    let { currentRangeUnit } = dateProfile;\n    if (currentRangeUnit === 'year') {\n        return { year: 'numeric' };\n    }\n    if (currentRangeUnit === 'month') {\n        return { year: 'numeric', month: 'long' }; // like \"September 2014\"\n    }\n    let days = internalCommon.diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);\n    if (days !== null && days > 1) {\n        // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n        return { year: 'numeric', month: 'short', day: 'numeric' };\n    }\n    // one day. longer, like \"September 9 2014\"\n    return { year: 'numeric', month: 'long', day: 'numeric' };\n}\n\n/*\nTODO: test switching timezones when NO timezone plugin\n*/\nclass CalendarNowManager {\n    constructor() {\n        this.resetListeners = new Set();\n    }\n    handleInput(dateEnv, // will change if timezone setup changed\n    nowInput) {\n        const oldDateEnv = this.dateEnv;\n        if (dateEnv !== oldDateEnv) {\n            if (typeof nowInput === 'function') {\n                this.nowFn = nowInput;\n            }\n            else if (!oldDateEnv) { // first time?\n                this.nowAnchorDate = dateEnv.toDate(nowInput\n                    ? dateEnv.createMarker(nowInput)\n                    : dateEnv.createNowMarker());\n                this.nowAnchorQueried = Date.now();\n            }\n            this.dateEnv = dateEnv;\n            // not first time? fire reset handlers\n            if (oldDateEnv) {\n                for (const resetListener of this.resetListeners.values()) {\n                    resetListener();\n                }\n            }\n        }\n    }\n    getDateMarker() {\n        return this.nowAnchorDate\n            ? this.dateEnv.timestampToMarker(this.nowAnchorDate.valueOf() +\n                (Date.now() - this.nowAnchorQueried))\n            : this.dateEnv.createMarker(this.nowFn());\n    }\n    addResetListener(handler) {\n        this.resetListeners.add(handler);\n    }\n    removeResetListener(handler) {\n        this.resetListeners.delete(handler);\n    }\n}\n\n// in future refactor, do the redux-style function(state=initial) for initial-state\n// also, whatever is happening in constructor, have it happen in action queue too\nclass CalendarDataManager {\n    constructor(props) {\n        this.computeCurrentViewData = internalCommon.memoize(this._computeCurrentViewData);\n        this.organizeRawLocales = internalCommon.memoize(organizeRawLocales);\n        this.buildLocale = internalCommon.memoize(buildLocale);\n        this.buildPluginHooks = buildBuildPluginHooks();\n        this.buildDateEnv = internalCommon.memoize(buildDateEnv$1);\n        this.buildTheme = internalCommon.memoize(buildTheme);\n        this.parseToolbars = internalCommon.memoize(parseToolbars);\n        this.buildViewSpecs = internalCommon.memoize(buildViewSpecs);\n        this.buildDateProfileGenerator = internalCommon.memoizeObjArg(buildDateProfileGenerator);\n        this.buildViewApi = internalCommon.memoize(buildViewApi);\n        this.buildViewUiProps = internalCommon.memoizeObjArg(buildViewUiProps);\n        this.buildEventUiBySource = internalCommon.memoize(buildEventUiBySource, internalCommon.isPropsEqual);\n        this.buildEventUiBases = internalCommon.memoize(buildEventUiBases);\n        this.parseContextBusinessHours = internalCommon.memoizeObjArg(parseContextBusinessHours);\n        this.buildTitle = internalCommon.memoize(buildTitle);\n        this.nowManager = new CalendarNowManager();\n        this.emitter = new internalCommon.Emitter();\n        this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));\n        this.currentCalendarOptionsInput = {};\n        this.currentCalendarOptionsRefined = {};\n        this.currentViewOptionsInput = {};\n        this.currentViewOptionsRefined = {};\n        this.currentCalendarOptionsRefiners = {};\n        this.optionsForRefining = [];\n        this.optionsForHandling = [];\n        this.getCurrentData = () => this.data;\n        this.dispatch = (action) => {\n            this.actionRunner.request(action); // protects against recursive calls to _handleAction\n        };\n        this.props = props;\n        this.actionRunner.pause();\n        this.nowManager = new CalendarNowManager();\n        let dynamicOptionOverrides = {};\n        let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n        let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;\n        let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);\n        // wire things up\n        // TODO: not DRY\n        props.calendarApi.currentDataManager = this;\n        this.emitter.setThisContext(props.calendarApi);\n        this.emitter.setOptions(currentViewData.options);\n        let calendarContext = {\n            nowManager: this.nowManager,\n            dateEnv: optionsData.dateEnv,\n            options: optionsData.calendarOptions,\n            pluginHooks: optionsData.pluginHooks,\n            calendarApi: props.calendarApi,\n            dispatch: this.dispatch,\n            emitter: this.emitter,\n            getCurrentData: this.getCurrentData,\n        };\n        let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv, this.nowManager);\n        let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n        if (!internalCommon.rangeContainsMarker(dateProfile.activeRange, currentDate)) {\n            currentDate = dateProfile.currentRange.start;\n        }\n        // needs to be after setThisContext\n        for (let callback of optionsData.pluginHooks.contextInit) {\n            callback(calendarContext);\n        }\n        // NOT DRY\n        let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);\n        let initialState = {\n            dynamicOptionOverrides,\n            currentViewType,\n            currentDate,\n            dateProfile,\n            businessHours: this.parseContextBusinessHours(calendarContext),\n            eventSources,\n            eventUiBases: {},\n            eventStore: internalCommon.createEmptyEventStore(),\n            renderableEventStore: internalCommon.createEmptyEventStore(),\n            dateSelection: null,\n            eventSelection: '',\n            eventDrag: null,\n            eventResize: null,\n            selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig,\n        };\n        let contextAndState = Object.assign(Object.assign({}, calendarContext), initialState);\n        for (let reducer of optionsData.pluginHooks.reducers) {\n            Object.assign(initialState, reducer(null, null, contextAndState));\n        }\n        if (computeIsLoading(initialState, calendarContext)) {\n            this.emitter.trigger('loading', true); // NOT DRY\n        }\n        this.state = initialState;\n        this.updateData();\n        this.actionRunner.resume();\n    }\n    resetOptions(optionOverrides, changedOptionNames) {\n        let { props } = this;\n        if (changedOptionNames === undefined) {\n            props.optionOverrides = optionOverrides;\n        }\n        else {\n            props.optionOverrides = Object.assign(Object.assign({}, (props.optionOverrides || {})), optionOverrides);\n            this.optionsForRefining.push(...changedOptionNames);\n        }\n        if (changedOptionNames === undefined || changedOptionNames.length) {\n            this.actionRunner.request({\n                type: 'NOTHING',\n            });\n        }\n    }\n    _handleAction(action) {\n        let { props, state, emitter } = this;\n        let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);\n        let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n        let currentViewType = reduceViewType(state.currentViewType, action);\n        let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);\n        // wire things up\n        // TODO: not DRY\n        props.calendarApi.currentDataManager = this;\n        emitter.setThisContext(props.calendarApi);\n        emitter.setOptions(currentViewData.options);\n        let calendarContext = {\n            nowManager: this.nowManager,\n            dateEnv: optionsData.dateEnv,\n            options: optionsData.calendarOptions,\n            pluginHooks: optionsData.pluginHooks,\n            calendarApi: props.calendarApi,\n            dispatch: this.dispatch,\n            emitter,\n            getCurrentData: this.getCurrentData,\n        };\n        let { currentDate, dateProfile } = state;\n        if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack\n            dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n        }\n        currentDate = reduceCurrentDate(currentDate, action);\n        dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);\n        if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator\n            action.type === 'NEXT' || // \"\n            !internalCommon.rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n            currentDate = dateProfile.currentRange.start;\n        }\n        let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);\n        let eventStore = internalCommon.reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);\n        let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading\n        let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?\n            (state.renderableEventStore || eventStore) : // try from previous state\n            eventStore;\n        let { eventUiSingleBase, selectionConfig } = this.buildViewUiProps(calendarContext); // will memoize obj\n        let eventUiBySource = this.buildEventUiBySource(eventSources);\n        let eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);\n        let newState = {\n            dynamicOptionOverrides,\n            currentViewType,\n            currentDate,\n            dateProfile,\n            eventSources,\n            eventStore,\n            renderableEventStore,\n            selectionConfig,\n            eventUiBases,\n            businessHours: this.parseContextBusinessHours(calendarContext),\n            dateSelection: reduceDateSelection(state.dateSelection, action),\n            eventSelection: reduceSelectedEvent(state.eventSelection, action),\n            eventDrag: reduceEventDrag(state.eventDrag, action),\n            eventResize: reduceEventResize(state.eventResize, action),\n        };\n        let contextAndState = Object.assign(Object.assign({}, calendarContext), newState);\n        for (let reducer of optionsData.pluginHooks.reducers) {\n            Object.assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value\n        }\n        let wasLoading = computeIsLoading(state, calendarContext);\n        let isLoading = computeIsLoading(newState, calendarContext);\n        // TODO: use propSetHandlers in plugin system\n        if (!wasLoading && isLoading) {\n            emitter.trigger('loading', true);\n        }\n        else if (wasLoading && !isLoading) {\n            emitter.trigger('loading', false);\n        }\n        this.state = newState;\n        if (props.onAction) {\n            props.onAction(action);\n        }\n    }\n    updateData() {\n        let { props, state } = this;\n        let oldData = this.data;\n        let optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);\n        let currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);\n        let data = this.data = Object.assign(Object.assign(Object.assign({ nowManager: this.nowManager, viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);\n        let changeHandlers = optionsData.pluginHooks.optionChangeHandlers;\n        let oldCalendarOptions = oldData && oldData.calendarOptions;\n        let newCalendarOptions = optionsData.calendarOptions;\n        if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {\n            if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {\n                // hack\n                state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);\n                state.eventStore = data.eventStore = internalCommon.rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);\n                state.renderableEventStore = data.renderableEventStore = internalCommon.rezoneEventStoreDates(data.renderableEventStore, oldData.dateEnv, data.dateEnv);\n            }\n            for (let optionName in changeHandlers) {\n                if (this.optionsForHandling.indexOf(optionName) !== -1 ||\n                    oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {\n                    changeHandlers[optionName](newCalendarOptions[optionName], data);\n                }\n            }\n        }\n        this.optionsForHandling = [];\n        if (props.onData) {\n            props.onData(data);\n        }\n    }\n    computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {\n        // TODO: blacklist options that are handled by optionChangeHandlers\n        if (!this.optionsForRefining.length &&\n            optionOverrides === this.stableOptionOverrides &&\n            dynamicOptionOverrides === this.stableDynamicOptionOverrides) {\n            return this.stableCalendarOptionsData;\n        }\n        let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra, } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);\n        warnUnknownOptions(extra);\n        let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);\n        let viewSpecs = this.buildViewSpecs(pluginHooks.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, localeDefaults);\n        let theme = this.buildTheme(refinedOptions, pluginHooks);\n        let toolbarConfig = this.parseToolbars(refinedOptions, this.stableOptionOverrides, theme, viewSpecs, calendarApi);\n        return this.stableCalendarOptionsData = {\n            calendarOptions: refinedOptions,\n            pluginHooks,\n            dateEnv,\n            viewSpecs,\n            theme,\n            toolbarConfig,\n            localeDefaults,\n            availableRawLocales: availableLocaleData.map,\n        };\n    }\n    // always called from behind a memoizer\n    processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {\n        let { locales, locale } = internalCommon.mergeRawOptions([\n            internalCommon.BASE_OPTION_DEFAULTS,\n            optionOverrides,\n            dynamicOptionOverrides,\n        ]);\n        let availableLocaleData = this.organizeRawLocales(locales);\n        let availableRawLocales = availableLocaleData.map;\n        let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;\n        let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);\n        let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalCommon.BASE_OPTION_REFINERS), internalCommon.CALENDAR_LISTENER_REFINERS), internalCommon.CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n        let extra = {};\n        let raw = internalCommon.mergeRawOptions([\n            internalCommon.BASE_OPTION_DEFAULTS,\n            localeDefaults,\n            optionOverrides,\n            dynamicOptionOverrides,\n        ]);\n        let refined = {};\n        let currentRaw = this.currentCalendarOptionsInput;\n        let currentRefined = this.currentCalendarOptionsRefined;\n        let anyChanges = false;\n        for (let optionName in raw) {\n            if (this.optionsForRefining.indexOf(optionName) === -1 && (raw[optionName] === currentRaw[optionName] || (internalCommon.COMPLEX_OPTION_COMPARATORS[optionName] &&\n                (optionName in currentRaw) &&\n                internalCommon.COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName])))) {\n                refined[optionName] = currentRefined[optionName];\n            }\n            else if (refiners[optionName]) {\n                refined[optionName] = refiners[optionName](raw[optionName]);\n                anyChanges = true;\n            }\n            else {\n                extra[optionName] = currentRaw[optionName];\n            }\n        }\n        if (anyChanges) {\n            this.currentCalendarOptionsInput = raw;\n            this.currentCalendarOptionsRefined = refined;\n            this.stableOptionOverrides = optionOverrides;\n            this.stableDynamicOptionOverrides = dynamicOptionOverrides;\n        }\n        this.optionsForHandling.push(...this.optionsForRefining);\n        this.optionsForRefining = [];\n        return {\n            rawOptions: this.currentCalendarOptionsInput,\n            refinedOptions: this.currentCalendarOptionsRefined,\n            pluginHooks,\n            availableLocaleData,\n            localeDefaults,\n            extra,\n        };\n    }\n    _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {\n        let viewSpec = optionsData.viewSpecs[viewType];\n        if (!viewSpec) {\n            throw new Error(`viewType \"${viewType}\" is not available. Please make sure you've loaded all neccessary plugins`);\n        }\n        let { refinedOptions, extra } = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides);\n        warnUnknownOptions(extra);\n        this.nowManager.handleInput(optionsData.dateEnv, refinedOptions.now);\n        let dateProfileGenerator = this.buildDateProfileGenerator({\n            dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,\n            nowManager: this.nowManager,\n            duration: viewSpec.duration,\n            durationUnit: viewSpec.durationUnit,\n            usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,\n            dateEnv: optionsData.dateEnv,\n            calendarApi: this.props.calendarApi,\n            slotMinTime: refinedOptions.slotMinTime,\n            slotMaxTime: refinedOptions.slotMaxTime,\n            showNonCurrentDates: refinedOptions.showNonCurrentDates,\n            dayCount: refinedOptions.dayCount,\n            dateAlignment: refinedOptions.dateAlignment,\n            dateIncrement: refinedOptions.dateIncrement,\n            hiddenDays: refinedOptions.hiddenDays,\n            weekends: refinedOptions.weekends,\n            validRangeInput: refinedOptions.validRange,\n            visibleRangeInput: refinedOptions.visibleRange,\n            fixedWeekCount: refinedOptions.fixedWeekCount,\n        });\n        let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);\n        return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };\n    }\n    processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {\n        let raw = internalCommon.mergeRawOptions([\n            internalCommon.BASE_OPTION_DEFAULTS,\n            viewSpec.optionDefaults,\n            localeDefaults,\n            optionOverrides,\n            viewSpec.optionOverrides,\n            dynamicOptionOverrides,\n        ]);\n        let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalCommon.BASE_OPTION_REFINERS), internalCommon.CALENDAR_LISTENER_REFINERS), internalCommon.CALENDAR_OPTION_REFINERS), internalCommon.VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n        let refined = {};\n        let currentRaw = this.currentViewOptionsInput;\n        let currentRefined = this.currentViewOptionsRefined;\n        let anyChanges = false;\n        let extra = {};\n        for (let optionName in raw) {\n            if (raw[optionName] === currentRaw[optionName] ||\n                (internalCommon.COMPLEX_OPTION_COMPARATORS[optionName] &&\n                    internalCommon.COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {\n                refined[optionName] = currentRefined[optionName];\n            }\n            else {\n                if (raw[optionName] === this.currentCalendarOptionsInput[optionName] ||\n                    (internalCommon.COMPLEX_OPTION_COMPARATORS[optionName] &&\n                        internalCommon.COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {\n                    if (optionName in this.currentCalendarOptionsRefined) { // might be an \"extra\" prop\n                        refined[optionName] = this.currentCalendarOptionsRefined[optionName];\n                    }\n                }\n                else if (refiners[optionName]) {\n                    refined[optionName] = refiners[optionName](raw[optionName]);\n                }\n                else {\n                    extra[optionName] = raw[optionName];\n                }\n                anyChanges = true;\n            }\n        }\n        if (anyChanges) {\n            this.currentViewOptionsInput = raw;\n            this.currentViewOptionsRefined = refined;\n        }\n        return {\n            rawOptions: this.currentViewOptionsInput,\n            refinedOptions: this.currentViewOptionsRefined,\n            extra,\n        };\n    }\n}\nfunction buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {\n    let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);\n    return new internalCommon.DateEnv({\n        calendarSystem: 'gregory',\n        timeZone,\n        namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,\n        locale,\n        weekNumberCalculation,\n        firstDay,\n        weekText,\n        cmdFormatter: pluginHooks.cmdFormatter,\n        defaultSeparator,\n    });\n}\nfunction buildTheme(options, pluginHooks) {\n    let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;\n    return new ThemeClass(options);\n}\nfunction buildDateProfileGenerator(props) {\n    let DateProfileGeneratorClass = props.dateProfileGeneratorClass || internalCommon.DateProfileGenerator;\n    return new DateProfileGeneratorClass(props);\n}\nfunction buildViewApi(type, getCurrentData, dateEnv) {\n    return new ViewImpl(type, getCurrentData, dateEnv);\n}\nfunction buildEventUiBySource(eventSources) {\n    return internalCommon.mapHash(eventSources, (eventSource) => eventSource.ui);\n}\nfunction buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {\n    let eventUiBases = { '': eventUiSingleBase };\n    for (let defId in eventDefs) {\n        let def = eventDefs[defId];\n        if (def.sourceId && eventUiBySource[def.sourceId]) {\n            eventUiBases[defId] = eventUiBySource[def.sourceId];\n        }\n    }\n    return eventUiBases;\n}\nfunction buildViewUiProps(calendarContext) {\n    let { options } = calendarContext;\n    return {\n        eventUiSingleBase: internalCommon.createEventUi({\n            display: options.eventDisplay,\n            editable: options.editable,\n            startEditable: options.eventStartEditable,\n            durationEditable: options.eventDurationEditable,\n            constraint: options.eventConstraint,\n            overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,\n            allow: options.eventAllow,\n            backgroundColor: options.eventBackgroundColor,\n            borderColor: options.eventBorderColor,\n            textColor: options.eventTextColor,\n            color: options.eventColor,\n            // classNames: options.eventClassNames // render hook will handle this\n        }, calendarContext),\n        selectionConfig: internalCommon.createEventUi({\n            constraint: options.selectConstraint,\n            overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,\n            allow: options.selectAllow,\n        }, calendarContext),\n    };\n}\nfunction computeIsLoading(state, context) {\n    for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {\n        if (isLoadingFunc(state)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction parseContextBusinessHours(calendarContext) {\n    return internalCommon.parseBusinessHours(calendarContext.options.businessHours, calendarContext);\n}\nfunction warnUnknownOptions(options, viewName) {\n    for (let optionName in options) {\n        console.warn(`Unknown option '${optionName}'` +\n            (viewName ? ` for view '${viewName}'` : ''));\n    }\n}\n\nclass ToolbarSection extends internalCommon.BaseComponent {\n    render() {\n        let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));\n        return preact.createElement('div', { className: 'fc-toolbar-chunk' }, ...children);\n    }\n    renderWidgetGroup(widgetGroup) {\n        let { props } = this;\n        let { theme } = this.context;\n        let children = [];\n        let isOnlyButtons = true;\n        for (let widget of widgetGroup) {\n            let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;\n            if (buttonName === 'title') {\n                isOnlyButtons = false;\n                children.push(preact.createElement(\"h2\", { className: \"fc-toolbar-title\", id: props.titleId }, props.title));\n            }\n            else {\n                let isPressed = buttonName === props.activeButton;\n                let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||\n                    (!props.isPrevEnabled && buttonName === 'prev') ||\n                    (!props.isNextEnabled && buttonName === 'next');\n                let buttonClasses = [`fc-${buttonName}-button`, theme.getClass('button')];\n                if (isPressed) {\n                    buttonClasses.push(theme.getClass('buttonActive'));\n                }\n                children.push(preact.createElement(\"button\", { type: \"button\", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, \"aria-pressed\": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? preact.createElement(\"span\", { className: buttonIcon, role: \"img\" }) : '')));\n            }\n        }\n        if (children.length > 1) {\n            let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';\n            return preact.createElement('div', { className: groupClassName }, ...children);\n        }\n        return children[0];\n    }\n}\n\nclass Toolbar extends internalCommon.BaseComponent {\n    render() {\n        let { model, extraClassName } = this.props;\n        let forceLtr = false;\n        let startContent;\n        let endContent;\n        let sectionWidgets = model.sectionWidgets;\n        let centerContent = sectionWidgets.center;\n        if (sectionWidgets.left) {\n            forceLtr = true;\n            startContent = sectionWidgets.left;\n        }\n        else {\n            startContent = sectionWidgets.start;\n        }\n        if (sectionWidgets.right) {\n            forceLtr = true;\n            endContent = sectionWidgets.right;\n        }\n        else {\n            endContent = sectionWidgets.end;\n        }\n        let classNames = [\n            extraClassName || '',\n            'fc-toolbar',\n            forceLtr ? 'fc-toolbar-ltr' : '',\n        ];\n        return (preact.createElement(\"div\", { className: classNames.join(' ') },\n            this.renderSection('start', startContent || []),\n            this.renderSection('center', centerContent || []),\n            this.renderSection('end', endContent || [])));\n    }\n    renderSection(key, widgetGroups) {\n        let { props } = this;\n        return (preact.createElement(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId }));\n    }\n}\n\nclass ViewHarness extends internalCommon.BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            availableWidth: null,\n        };\n        this.handleEl = (el) => {\n            this.el = el;\n            internalCommon.setRef(this.props.elRef, el);\n            this.updateAvailableWidth();\n        };\n        this.handleResize = () => {\n            this.updateAvailableWidth();\n        };\n    }\n    render() {\n        let { props, state } = this;\n        let { aspectRatio } = props;\n        let classNames = [\n            'fc-view-harness',\n            (aspectRatio || props.liquid || props.height)\n                ? 'fc-view-harness-active' // harness controls the height\n                : 'fc-view-harness-passive', // let the view do the height\n        ];\n        let height = '';\n        let paddingBottom = '';\n        if (aspectRatio) {\n            if (state.availableWidth !== null) {\n                height = state.availableWidth / aspectRatio;\n            }\n            else {\n                // while waiting to know availableWidth, we can't set height to *zero*\n                // because will cause lots of unnecessary scrollbars within scrollgrid.\n                // BETTER: don't start rendering ANYTHING yet until we know container width\n                // NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)\n                paddingBottom = `${(1 / aspectRatio) * 100}%`;\n            }\n        }\n        else {\n            height = props.height || '';\n        }\n        return (preact.createElement(\"div\", { \"aria-labelledby\": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));\n    }\n    componentDidMount() {\n        this.context.addResizeHandler(this.handleResize);\n    }\n    componentWillUnmount() {\n        this.context.removeResizeHandler(this.handleResize);\n    }\n    updateAvailableWidth() {\n        if (this.el && // needed. but why?\n            this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth\n        ) {\n            this.setState({ availableWidth: this.el.offsetWidth });\n        }\n    }\n}\n\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\nclass EventClicking extends internalCommon.Interaction {\n    constructor(settings) {\n        super(settings);\n        this.handleSegClick = (ev, segEl) => {\n            let { component } = this;\n            let { context } = component;\n            let seg = internalCommon.getElSeg(segEl);\n            if (seg && // might be the <div> surrounding the more link\n                component.isValidSegDownEl(ev.target)) {\n                // our way to simulate a link click for elements that can't be <a> tags\n                // grab before trigger fired in case trigger trashes DOM thru rerendering\n                let hasUrlContainer = internalCommon.elementClosest(ev.target, '.fc-event-forced-url');\n                let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';\n                context.emitter.trigger('eventClick', {\n                    el: segEl,\n                    event: new internalCommon.EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),\n                    jsEvent: ev,\n                    view: context.viewApi,\n                });\n                if (url && !ev.defaultPrevented) {\n                    window.location.href = url;\n                }\n            }\n        };\n        this.destroy = internalCommon.listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events\n        this.handleSegClick);\n    }\n}\n\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\nclass EventHovering extends internalCommon.Interaction {\n    constructor(settings) {\n        super(settings);\n        // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n        this.handleEventElRemove = (el) => {\n            if (el === this.currentSegEl) {\n                this.handleSegLeave(null, this.currentSegEl);\n            }\n        };\n        this.handleSegEnter = (ev, segEl) => {\n            if (internalCommon.getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper\n                this.currentSegEl = segEl;\n                this.triggerEvent('eventMouseEnter', ev, segEl);\n            }\n        };\n        this.handleSegLeave = (ev, segEl) => {\n            if (this.currentSegEl) {\n                this.currentSegEl = null;\n                this.triggerEvent('eventMouseLeave', ev, segEl);\n            }\n        };\n        this.removeHoverListeners = internalCommon.listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events\n        this.handleSegEnter, this.handleSegLeave);\n    }\n    destroy() {\n        this.removeHoverListeners();\n    }\n    triggerEvent(publicEvName, ev, segEl) {\n        let { component } = this;\n        let { context } = component;\n        let seg = internalCommon.getElSeg(segEl);\n        if (!ev || component.isValidSegDownEl(ev.target)) {\n            context.emitter.trigger(publicEvName, {\n                el: segEl,\n                event: new internalCommon.EventImpl(context, seg.eventRange.def, seg.eventRange.instance),\n                jsEvent: ev,\n                view: context.viewApi,\n            });\n        }\n    }\n}\n\nclass CalendarContent extends internalCommon.PureComponent {\n    constructor() {\n        super(...arguments);\n        this.buildViewContext = internalCommon.memoize(internalCommon.buildViewContext);\n        this.buildViewPropTransformers = internalCommon.memoize(buildViewPropTransformers);\n        this.buildToolbarProps = internalCommon.memoize(buildToolbarProps);\n        this.headerRef = preact.createRef();\n        this.footerRef = preact.createRef();\n        this.interactionsStore = {};\n        // eslint-disable-next-line\n        this.state = {\n            viewLabelId: internalCommon.getUniqueDomId(),\n        };\n        // Component Registration\n        // -----------------------------------------------------------------------------------------------------------------\n        this.registerInteractiveComponent = (component, settingsInput) => {\n            let settings = internalCommon.parseInteractionSettings(component, settingsInput);\n            let DEFAULT_INTERACTIONS = [\n                EventClicking,\n                EventHovering,\n            ];\n            let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);\n            let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));\n            this.interactionsStore[component.uid] = interactions;\n            internalCommon.interactionSettingsStore[component.uid] = settings;\n        };\n        this.unregisterInteractiveComponent = (component) => {\n            let listeners = this.interactionsStore[component.uid];\n            if (listeners) {\n                for (let listener of listeners) {\n                    listener.destroy();\n                }\n                delete this.interactionsStore[component.uid];\n            }\n            delete internalCommon.interactionSettingsStore[component.uid];\n        };\n        // Resizing\n        // -----------------------------------------------------------------------------------------------------------------\n        this.resizeRunner = new internalCommon.DelayedRunner(() => {\n            this.props.emitter.trigger('_resize', true); // should window resizes be considered \"forced\" ?\n            this.props.emitter.trigger('windowResize', { view: this.props.viewApi });\n        });\n        this.handleWindowResize = (ev) => {\n            let { options } = this.props;\n            if (options.handleWindowResize &&\n                ev.target === window // avoid jqui events\n            ) {\n                this.resizeRunner.request(options.windowResizeDelay);\n            }\n        };\n    }\n    /*\n    renders INSIDE of an outer div\n    */\n    render() {\n        let { props } = this;\n        let { toolbarConfig, options } = props;\n        let viewVGrow = false;\n        let viewHeight = '';\n        let viewAspectRatio;\n        if (props.isHeightAuto || props.forPrint) {\n            viewHeight = '';\n        }\n        else if (options.height != null) {\n            viewVGrow = true;\n        }\n        else if (options.contentHeight != null) {\n            viewHeight = options.contentHeight;\n        }\n        else {\n            viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall\n        }\n        let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.nowManager, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);\n        let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)\n            ? this.state.viewLabelId\n            : undefined;\n        return (preact.createElement(internalCommon.ViewContextType.Provider, { value: viewContext },\n            preact.createElement(internalCommon.NowTimer, { unit: \"day\" }, (nowDate) => {\n                let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, nowDate, props.viewTitle);\n                return (preact.createElement(preact.Fragment, null,\n                    toolbarConfig.header && (preact.createElement(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: \"fc-header-toolbar\", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),\n                    preact.createElement(ViewHarness, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },\n                        this.renderView(props),\n                        this.buildAppendContent()),\n                    toolbarConfig.footer && (preact.createElement(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: \"fc-footer-toolbar\", model: toolbarConfig.footer, titleId: \"\" }, toolbarProps)))));\n            })));\n    }\n    componentDidMount() {\n        let { props } = this;\n        this.calendarInteractions = props.pluginHooks.calendarInteractions\n            .map((CalendarInteractionClass) => new CalendarInteractionClass(props));\n        window.addEventListener('resize', this.handleWindowResize);\n        let { propSetHandlers } = props.pluginHooks;\n        for (let propName in propSetHandlers) {\n            propSetHandlers[propName](props[propName], props);\n        }\n    }\n    componentDidUpdate(prevProps) {\n        let { props } = this;\n        let { propSetHandlers } = props.pluginHooks;\n        for (let propName in propSetHandlers) {\n            if (props[propName] !== prevProps[propName]) {\n                propSetHandlers[propName](props[propName], props);\n            }\n        }\n    }\n    componentWillUnmount() {\n        window.removeEventListener('resize', this.handleWindowResize);\n        this.resizeRunner.clear();\n        for (let interaction of this.calendarInteractions) {\n            interaction.destroy();\n        }\n        this.props.emitter.trigger('_unmount');\n    }\n    buildAppendContent() {\n        let { props } = this;\n        let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));\n        return preact.createElement(preact.Fragment, {}, ...children);\n    }\n    renderView(props) {\n        let { pluginHooks } = props;\n        let { viewSpec } = props;\n        let viewProps = {\n            dateProfile: props.dateProfile,\n            businessHours: props.businessHours,\n            eventStore: props.renderableEventStore,\n            eventUiBases: props.eventUiBases,\n            dateSelection: props.dateSelection,\n            eventSelection: props.eventSelection,\n            eventDrag: props.eventDrag,\n            eventResize: props.eventResize,\n            isHeightAuto: props.isHeightAuto,\n            forPrint: props.forPrint,\n        };\n        let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);\n        for (let transformer of transformers) {\n            Object.assign(viewProps, transformer.transform(viewProps, props));\n        }\n        let ViewComponent = viewSpec.component;\n        return (preact.createElement(ViewComponent, Object.assign({}, viewProps)));\n    }\n}\nfunction buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {\n    // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid\n    let todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason\n    let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);\n    let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);\n    return {\n        title,\n        activeButton: viewSpec.type,\n        navUnit: viewSpec.singleUnit,\n        isTodayEnabled: todayInfo.isValid && !internalCommon.rangeContainsMarker(dateProfile.currentRange, now),\n        isPrevEnabled: prevInfo.isValid,\n        isNextEnabled: nextInfo.isValid,\n    };\n}\n// Plugin\n// -----------------------------------------------------------------------------------------------------------------\nfunction buildViewPropTransformers(theClasses) {\n    return theClasses.map((TheClass) => new TheClass());\n}\n\nclass Calendar extends internalCommon.CalendarImpl {\n    constructor(el, optionOverrides = {}) {\n        super();\n        this.isRendering = false;\n        this.isRendered = false;\n        this.currentClassNames = [];\n        this.customContentRenderId = 0;\n        this.handleAction = (action) => {\n            // actions we know we want to render immediately\n            switch (action.type) {\n                case 'SET_EVENT_DRAG':\n                case 'SET_EVENT_RESIZE':\n                    this.renderRunner.tryDrain();\n            }\n        };\n        this.handleData = (data) => {\n            this.currentData = data;\n            this.renderRunner.request(data.calendarOptions.rerenderDelay);\n        };\n        this.handleRenderRequest = () => {\n            if (this.isRendering) {\n                this.isRendered = true;\n                let { currentData } = this;\n                internalCommon.flushSync(() => {\n                    preact.render(preact.createElement(internalCommon.CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {\n                        this.setClassNames(classNames);\n                        this.setHeight(height);\n                        return (preact.createElement(internalCommon.RenderId.Provider, { value: this.customContentRenderId },\n                            preact.createElement(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));\n                    }), this.el);\n                });\n            }\n            else if (this.isRendered) {\n                this.isRendered = false;\n                preact.render(null, this.el);\n                this.setClassNames([]);\n                this.setHeight('');\n            }\n        };\n        internalCommon.ensureElHasStyles(el);\n        this.el = el;\n        this.renderRunner = new internalCommon.DelayedRunner(this.handleRenderRequest);\n        new CalendarDataManager({\n            optionOverrides,\n            calendarApi: this,\n            onAction: this.handleAction,\n            onData: this.handleData,\n        });\n    }\n    render() {\n        let wasRendering = this.isRendering;\n        if (!wasRendering) {\n            this.isRendering = true;\n        }\n        else {\n            this.customContentRenderId += 1;\n        }\n        this.renderRunner.request();\n        if (wasRendering) {\n            this.updateSize();\n        }\n    }\n    destroy() {\n        if (this.isRendering) {\n            this.isRendering = false;\n            this.renderRunner.request();\n        }\n    }\n    updateSize() {\n        internalCommon.flushSync(() => {\n            super.updateSize();\n        });\n    }\n    batchRendering(func) {\n        this.renderRunner.pause('batchRendering');\n        func();\n        this.renderRunner.resume('batchRendering');\n    }\n    pauseRendering() {\n        this.renderRunner.pause('pauseRendering');\n    }\n    resumeRendering() {\n        this.renderRunner.resume('pauseRendering', true);\n    }\n    resetOptions(optionOverrides, changedOptionNames) {\n        this.currentDataManager.resetOptions(optionOverrides, changedOptionNames);\n    }\n    setClassNames(classNames) {\n        if (!internalCommon.isArraysEqual(classNames, this.currentClassNames)) {\n            let { classList } = this.el;\n            for (let className of this.currentClassNames) {\n                classList.remove(className);\n            }\n            for (let className of classNames) {\n                classList.add(className);\n            }\n            this.currentClassNames = classNames;\n        }\n    }\n    setHeight(height) {\n        internalCommon.applyStyleProp(this.el, 'height', height);\n    }\n}\n\nfunction formatDate(dateInput, options = {}) {\n    let dateEnv = buildDateEnv(options);\n    let formatter = internalCommon.createFormatter(options);\n    let dateMeta = dateEnv.createMarkerMeta(dateInput);\n    if (!dateMeta) { // TODO: warning?\n        return '';\n    }\n    return dateEnv.format(dateMeta.marker, formatter, {\n        forcedTzo: dateMeta.forcedTzo,\n    });\n}\nfunction formatRange(startInput, endInput, options) {\n    let dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object\n    let formatter = internalCommon.createFormatter(options);\n    let startMeta = dateEnv.createMarkerMeta(startInput);\n    let endMeta = dateEnv.createMarkerMeta(endInput);\n    if (!startMeta || !endMeta) { // TODO: warning?\n        return '';\n    }\n    return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n        forcedStartTzo: startMeta.forcedTzo,\n        forcedEndTzo: endMeta.forcedTzo,\n        isEndExclusive: options.isEndExclusive,\n        defaultSeparator: internalCommon.BASE_OPTION_DEFAULTS.defaultRangeSeparator,\n    });\n}\n// TODO: more DRY and optimized\nfunction buildDateEnv(settings) {\n    let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere\n    return new internalCommon.DateEnv(Object.assign(Object.assign({ timeZone: internalCommon.BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));\n}\n\n// HELPERS\n/*\nif nextDayThreshold is specified, slicing is done in an all-day fashion.\nyou can get nextDayThreshold from context.nextDayThreshold\n*/\nfunction sliceEvents(props, allDay) {\n    return internalCommon.sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;\n}\n\nconst version = '6.1.21';\n\nexports.JsonRequestError = internalCommon.JsonRequestError;\nexports.Calendar = Calendar;\nexports.createPlugin = createPlugin;\nexports.formatDate = formatDate;\nexports.formatRange = formatRange;\nexports.globalLocales = globalLocales;\nexports.globalPlugins = globalPlugins;\nexports.sliceEvents = sliceEvents;\nexports.version = version;\n","'use strict';\n\nvar preact = require('preact');\nvar compat = require('preact/compat');\n\nfunction _interopNamespace(e) {\n    if (e && e.__esModule) return e;\n    var n = Object.create(null);\n    if (e) {\n        Object.keys(e).forEach(function (k) {\n            if (k !== 'default') {\n                var d = Object.getOwnPropertyDescriptor(e, k);\n                Object.defineProperty(n, k, d.get ? d : {\n                    enumerable: true,\n                    get: function () { return e[k]; }\n                });\n            }\n        });\n    }\n    n[\"default\"] = e;\n    return Object.freeze(n);\n}\n\nvar preact__namespace = /*#__PURE__*/_interopNamespace(preact);\n\nconst styleTexts = [];\nconst styleEls = new Map();\nfunction injectStyles(styleText) {\n    styleTexts.push(styleText);\n    styleEls.forEach((styleEl) => {\n        appendStylesTo(styleEl, styleText);\n    });\n}\nfunction ensureElHasStyles(el) {\n    if (el.isConnected && // sometimes true if SSR system simulates DOM\n        el.getRootNode // sometimes undefined if SSR system simulates DOM\n    ) {\n        registerStylesRoot(el.getRootNode());\n    }\n}\nfunction registerStylesRoot(rootNode) {\n    let styleEl = styleEls.get(rootNode);\n    if (!styleEl || !styleEl.isConnected) {\n        styleEl = rootNode.querySelector('style[data-fullcalendar]');\n        if (!styleEl) {\n            styleEl = document.createElement('style');\n            styleEl.setAttribute('data-fullcalendar', '');\n            const nonce = getNonceValue();\n            if (nonce) {\n                styleEl.nonce = nonce;\n            }\n            const parentEl = rootNode === document ? document.head : rootNode;\n            const insertBefore = rootNode === document\n                ? parentEl.querySelector('script,link[rel=stylesheet],link[as=style],style')\n                : parentEl.firstChild;\n            parentEl.insertBefore(styleEl, insertBefore);\n        }\n        styleEls.set(rootNode, styleEl);\n        hydrateStylesRoot(styleEl);\n    }\n}\nfunction hydrateStylesRoot(styleEl) {\n    for (const styleText of styleTexts) {\n        appendStylesTo(styleEl, styleText);\n    }\n}\nfunction appendStylesTo(styleEl, styleText) {\n    const { sheet } = styleEl;\n    const ruleCnt = sheet.cssRules.length;\n    styleText.split('}').forEach((styleStr, i) => {\n        styleStr = styleStr.trim();\n        if (styleStr) {\n            sheet.insertRule(styleStr + '}', ruleCnt + i);\n        }\n    });\n}\n// nonce\n// -------------------------------------------------------------------------------------------------\nlet queriedNonceValue;\nfunction getNonceValue() {\n    if (queriedNonceValue === undefined) {\n        queriedNonceValue = queryNonceValue();\n    }\n    return queriedNonceValue;\n}\n/*\nTODO: discourage meta tag and instead put nonce attribute on placeholder <style> tag\n*/\nfunction queryNonceValue() {\n    const metaWithNonce = document.querySelector('meta[name=\"csp-nonce\"]');\n    if (metaWithNonce && metaWithNonce.hasAttribute('content')) {\n        return metaWithNonce.getAttribute('content');\n    }\n    const elWithNonce = document.querySelector('script[nonce]');\n    if (elWithNonce) {\n        return elWithNonce.nonce || '';\n    }\n    return '';\n}\n// main\n// -------------------------------------------------------------------------------------------------\nif (typeof document !== 'undefined') {\n    registerStylesRoot(document);\n}\n\nvar css_248z = \":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\\\"data:application/x-font-ttf;charset=utf-8;base64,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\\\") format(\\\"truetype\\\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\\\"\\\\e900\\\"}.fc-icon-chevron-right:before{content:\\\"\\\\e901\\\"}.fc-icon-chevrons-left:before{content:\\\"\\\\e902\\\"}.fc-icon-chevrons-right:before{content:\\\"\\\\e903\\\"}.fc-icon-minus-square:before{content:\\\"\\\\e904\\\"}.fc-icon-plus-square:before{content:\\\"\\\\e905\\\"}.fc-icon-x:before{content:\\\"\\\\e906\\\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\\\"\\\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\\\"\\\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\\\"\\\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}\";\ninjectStyles(css_248z);\n\nclass DelayedRunner {\n    constructor(drainedOption) {\n        this.drainedOption = drainedOption;\n        this.isRunning = false;\n        this.isDirty = false;\n        this.pauseDepths = {};\n        this.timeoutId = 0;\n    }\n    request(delay) {\n        this.isDirty = true;\n        if (!this.isPaused()) {\n            this.clearTimeout();\n            if (delay == null) {\n                this.tryDrain();\n            }\n            else {\n                this.timeoutId = setTimeout(// NOT OPTIMAL! TODO: look at debounce\n                this.tryDrain.bind(this), delay);\n            }\n        }\n    }\n    pause(scope = '') {\n        let { pauseDepths } = this;\n        pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;\n        this.clearTimeout();\n    }\n    resume(scope = '', force) {\n        let { pauseDepths } = this;\n        if (scope in pauseDepths) {\n            if (force) {\n                delete pauseDepths[scope];\n            }\n            else {\n                pauseDepths[scope] -= 1;\n                let depth = pauseDepths[scope];\n                if (depth <= 0) {\n                    delete pauseDepths[scope];\n                }\n            }\n            this.tryDrain();\n        }\n    }\n    isPaused() {\n        return Object.keys(this.pauseDepths).length;\n    }\n    tryDrain() {\n        if (!this.isRunning && !this.isPaused()) {\n            this.isRunning = true;\n            while (this.isDirty) {\n                this.isDirty = false;\n                this.drained(); // might set isDirty to true again\n            }\n            this.isRunning = false;\n        }\n    }\n    clear() {\n        this.clearTimeout();\n        this.isDirty = false;\n        this.pauseDepths = {};\n    }\n    clearTimeout() {\n        if (this.timeoutId) {\n            clearTimeout(this.timeoutId);\n            this.timeoutId = 0;\n        }\n    }\n    drained() {\n        if (this.drainedOption) {\n            this.drainedOption();\n        }\n    }\n}\n\nfunction removeElement(el) {\n    if (el.parentNode) {\n        el.parentNode.removeChild(el);\n    }\n}\n// Querying\n// ----------------------------------------------------------------------------------------------------------------\nfunction elementClosest(el, selector) {\n    if (el.closest) {\n        return el.closest(selector);\n        // really bad fallback for IE\n        // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n    }\n    if (!document.documentElement.contains(el)) {\n        return null;\n    }\n    do {\n        if (elementMatches(el, selector)) {\n            return el;\n        }\n        el = (el.parentElement || el.parentNode);\n    } while (el !== null && el.nodeType === 1);\n    return null;\n}\nfunction elementMatches(el, selector) {\n    let method = el.matches || el.matchesSelector || el.msMatchesSelector;\n    return method.call(el, selector);\n}\n// accepts multiple subject els\n// returns a real array. good for methods like forEach\n// TODO: accept the document\nfunction findElements(container, selector) {\n    let containers = container instanceof HTMLElement ? [container] : container;\n    let allMatches = [];\n    for (let i = 0; i < containers.length; i += 1) {\n        let matches = containers[i].querySelectorAll(selector);\n        for (let j = 0; j < matches.length; j += 1) {\n            allMatches.push(matches[j]);\n        }\n    }\n    return allMatches;\n}\n// accepts multiple subject els\n// only queries direct child elements // TODO: rename to findDirectChildren!\nfunction findDirectChildren(parent, selector) {\n    let parents = parent instanceof HTMLElement ? [parent] : parent;\n    let allMatches = [];\n    for (let i = 0; i < parents.length; i += 1) {\n        let childNodes = parents[i].children; // only ever elements\n        for (let j = 0; j < childNodes.length; j += 1) {\n            let childNode = childNodes[j];\n            if (!selector || elementMatches(childNode, selector)) {\n                allMatches.push(childNode);\n            }\n        }\n    }\n    return allMatches;\n}\n// Style\n// ----------------------------------------------------------------------------------------------------------------\nconst PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;\nfunction applyStyle(el, props) {\n    for (let propName in props) {\n        applyStyleProp(el, propName, props[propName]);\n    }\n}\nfunction applyStyleProp(el, name, val) {\n    if (val == null) {\n        el.style[name] = '';\n    }\n    else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {\n        el.style[name] = `${val}px`;\n    }\n    else {\n        el.style[name] = val;\n    }\n}\n// Event Handling\n// ----------------------------------------------------------------------------------------------------------------\n// if intercepting bubbled events at the document/window/body level,\n// and want to see originating element (the 'target'), use this util instead\n// of `ev.target` because it goes within web-component boundaries.\nfunction getEventTargetViaRoot(ev) {\n    var _a, _b;\n    return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;\n}\n// Unique ID for DOM attribute\nlet guid$1 = 0;\nfunction getUniqueDomId() {\n    guid$1 += 1;\n    return 'fc-dom-' + guid$1;\n}\n\n// Stops a mouse/touch event from doing it's native browser action\nfunction preventDefault(ev) {\n    ev.preventDefault();\n}\n// Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\nfunction buildDelegationHandler(selector, handler) {\n    return (ev) => {\n        let matchedChild = elementClosest(ev.target, selector);\n        if (matchedChild) {\n            handler.call(matchedChild, ev, matchedChild);\n        }\n    };\n}\nfunction listenBySelector(container, eventType, selector, handler) {\n    let attachedHandler = buildDelegationHandler(selector, handler);\n    container.addEventListener(eventType, attachedHandler);\n    return () => {\n        container.removeEventListener(eventType, attachedHandler);\n    };\n}\nfunction listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {\n    let currentMatchedChild;\n    return listenBySelector(container, 'mouseover', selector, (mouseOverEv, matchedChild) => {\n        if (matchedChild !== currentMatchedChild) {\n            currentMatchedChild = matchedChild;\n            onMouseEnter(mouseOverEv, matchedChild);\n            let realOnMouseLeave = (mouseLeaveEv) => {\n                currentMatchedChild = null;\n                onMouseLeave(mouseLeaveEv, matchedChild);\n                matchedChild.removeEventListener('mouseleave', realOnMouseLeave);\n            };\n            // listen to the next mouseleave, and then unattach\n            matchedChild.addEventListener('mouseleave', realOnMouseLeave);\n        }\n    });\n}\n// Animation\n// ----------------------------------------------------------------------------------------------------------------\nconst transitionEventNames = [\n    'webkitTransitionEnd',\n    'otransitionend',\n    'oTransitionEnd',\n    'msTransitionEnd',\n    'transitionend',\n];\n// triggered only when the next single subsequent transition finishes\nfunction whenTransitionDone(el, callback) {\n    let realCallback = (ev) => {\n        callback(ev);\n        transitionEventNames.forEach((eventName) => {\n            el.removeEventListener(eventName, realCallback);\n        });\n    };\n    transitionEventNames.forEach((eventName) => {\n        el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes\n    });\n}\n// ARIA workarounds\n// ----------------------------------------------------------------------------------------------------------------\nfunction createAriaClickAttrs(handler) {\n    return Object.assign({ onClick: handler }, createAriaKeyboardAttrs(handler));\n}\nfunction createAriaKeyboardAttrs(handler) {\n    return {\n        tabIndex: 0,\n        onKeyDown(ev) {\n            if (ev.key === 'Enter' || ev.key === ' ') {\n                handler(ev);\n                ev.preventDefault(); // if space, don't scroll down page\n            }\n        },\n    };\n}\n\nlet guidNumber = 0;\nfunction guid() {\n    guidNumber += 1;\n    return String(guidNumber);\n}\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n// Make the mouse cursor express that an event is not allowed in the current area\nfunction disableCursor() {\n    document.body.classList.add('fc-not-allowed');\n}\n// Returns the mouse cursor to its original look\nfunction enableCursor() {\n    document.body.classList.remove('fc-not-allowed');\n}\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\nfunction preventSelection(el) {\n    el.style.userSelect = 'none';\n    el.style.webkitUserSelect = 'none';\n    el.addEventListener('selectstart', preventDefault);\n}\nfunction allowSelection(el) {\n    el.style.userSelect = '';\n    el.style.webkitUserSelect = '';\n    el.removeEventListener('selectstart', preventDefault);\n}\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\nfunction preventContextMenu(el) {\n    el.addEventListener('contextmenu', preventDefault);\n}\nfunction allowContextMenu(el) {\n    el.removeEventListener('contextmenu', preventDefault);\n}\nfunction parseFieldSpecs(input) {\n    let specs = [];\n    let tokens = [];\n    let i;\n    let token;\n    if (typeof input === 'string') {\n        tokens = input.split(/\\s*,\\s*/);\n    }\n    else if (typeof input === 'function') {\n        tokens = [input];\n    }\n    else if (Array.isArray(input)) {\n        tokens = input;\n    }\n    for (i = 0; i < tokens.length; i += 1) {\n        token = tokens[i];\n        if (typeof token === 'string') {\n            specs.push(token.charAt(0) === '-' ?\n                { field: token.substring(1), order: -1 } :\n                { field: token, order: 1 });\n        }\n        else if (typeof token === 'function') {\n            specs.push({ func: token });\n        }\n    }\n    return specs;\n}\nfunction compareByFieldSpecs(obj0, obj1, fieldSpecs) {\n    let i;\n    let cmp;\n    for (i = 0; i < fieldSpecs.length; i += 1) {\n        cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);\n        if (cmp) {\n            return cmp;\n        }\n    }\n    return 0;\n}\nfunction compareByFieldSpec(obj0, obj1, fieldSpec) {\n    if (fieldSpec.func) {\n        return fieldSpec.func(obj0, obj1);\n    }\n    return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])\n        * (fieldSpec.order || 1);\n}\nfunction flexibleCompare(a, b) {\n    if (!a && !b) {\n        return 0;\n    }\n    if (b == null) {\n        return -1;\n    }\n    if (a == null) {\n        return 1;\n    }\n    if (typeof a === 'string' || typeof b === 'string') {\n        return String(a).localeCompare(String(b));\n    }\n    return a - b;\n}\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nfunction padStart(val, len) {\n    let s = String(val);\n    return '000'.substr(0, len - s.length) + s;\n}\nfunction formatWithOrdinals(formatter, args, fallbackText) {\n    if (typeof formatter === 'function') {\n        return formatter(...args);\n    }\n    if (typeof formatter === 'string') { // non-blank string\n        return args.reduce((str, arg, index) => (str.replace('$' + index, arg || '')), formatter);\n    }\n    return fallbackText;\n}\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nfunction compareNumbers(a, b) {\n    return a - b;\n}\nfunction isInt(n) {\n    return n % 1 === 0;\n}\n/* FC-specific DOM dimension stuff\n----------------------------------------------------------------------------------------------------------------------*/\nfunction computeSmallestCellWidth(cellEl) {\n    let allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');\n    let contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');\n    if (!allWidthEl) {\n        throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const\n    }\n    if (!contentWidthEl) {\n        throw new Error('needs fc-scrollgrid-shrink-cushion className');\n    }\n    return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border\n        contentWidthEl.getBoundingClientRect().width;\n}\n\nconst INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];\nconst PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/;\n// Parsing and Creation\nfunction createDuration(input, unit) {\n    if (typeof input === 'string') {\n        return parseString(input);\n    }\n    if (typeof input === 'object' && input) { // non-null object\n        return parseObject(input);\n    }\n    if (typeof input === 'number') {\n        return parseObject({ [unit || 'milliseconds']: input });\n    }\n    return null;\n}\nfunction parseString(s) {\n    let m = PARSE_RE.exec(s);\n    if (m) {\n        let sign = m[1] ? -1 : 1;\n        return {\n            years: 0,\n            months: 0,\n            days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n            milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n                (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n                (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds\n                (m[6] ? parseInt(m[6], 10) : 0) // ms\n            ),\n        };\n    }\n    return null;\n}\nfunction parseObject(obj) {\n    let duration = {\n        years: obj.years || obj.year || 0,\n        months: obj.months || obj.month || 0,\n        days: obj.days || obj.day || 0,\n        milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n            (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n            (obj.seconds || obj.second || 0) * 1000 + // seconds\n            (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms\n    };\n    let weeks = obj.weeks || obj.week;\n    if (weeks) {\n        duration.days += weeks * 7;\n        duration.specifiedWeeks = true;\n    }\n    return duration;\n}\n// Equality\nfunction durationsEqual(d0, d1) {\n    return d0.years === d1.years &&\n        d0.months === d1.months &&\n        d0.days === d1.days &&\n        d0.milliseconds === d1.milliseconds;\n}\nfunction asCleanDays(dur) {\n    if (!dur.years && !dur.months && !dur.milliseconds) {\n        return dur.days;\n    }\n    return 0;\n}\n// Simple Math\nfunction addDurations(d0, d1) {\n    return {\n        years: d0.years + d1.years,\n        months: d0.months + d1.months,\n        days: d0.days + d1.days,\n        milliseconds: d0.milliseconds + d1.milliseconds,\n    };\n}\nfunction subtractDurations(d1, d0) {\n    return {\n        years: d1.years - d0.years,\n        months: d1.months - d0.months,\n        days: d1.days - d0.days,\n        milliseconds: d1.milliseconds - d0.milliseconds,\n    };\n}\nfunction multiplyDuration(d, n) {\n    return {\n        years: d.years * n,\n        months: d.months * n,\n        days: d.days * n,\n        milliseconds: d.milliseconds * n,\n    };\n}\n// Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\nfunction asRoughYears(dur) {\n    return asRoughDays(dur) / 365;\n}\nfunction asRoughMonths(dur) {\n    return asRoughDays(dur) / 30;\n}\nfunction asRoughDays(dur) {\n    return asRoughMs(dur) / 864e5;\n}\nfunction asRoughMinutes(dur) {\n    return asRoughMs(dur) / (1000 * 60);\n}\nfunction asRoughSeconds(dur) {\n    return asRoughMs(dur) / 1000;\n}\nfunction asRoughMs(dur) {\n    return dur.years * (365 * 864e5) +\n        dur.months * (30 * 864e5) +\n        dur.days * 864e5 +\n        dur.milliseconds;\n}\n// Advanced Math\nfunction wholeDivideDurations(numerator, denominator) {\n    let res = null;\n    for (let i = 0; i < INTERNAL_UNITS.length; i += 1) {\n        let unit = INTERNAL_UNITS[i];\n        if (denominator[unit]) {\n            let localRes = numerator[unit] / denominator[unit];\n            if (!isInt(localRes) || (res !== null && res !== localRes)) {\n                return null;\n            }\n            res = localRes;\n        }\n        else if (numerator[unit]) {\n            // needs to divide by something but can't!\n            return null;\n        }\n    }\n    return res;\n}\nfunction greatestDurationDenominator(dur) {\n    let ms = dur.milliseconds;\n    if (ms) {\n        if (ms % 1000 !== 0) {\n            return { unit: 'millisecond', value: ms };\n        }\n        if (ms % (1000 * 60) !== 0) {\n            return { unit: 'second', value: ms / 1000 };\n        }\n        if (ms % (1000 * 60 * 60) !== 0) {\n            return { unit: 'minute', value: ms / (1000 * 60) };\n        }\n        if (ms) {\n            return { unit: 'hour', value: ms / (1000 * 60 * 60) };\n        }\n    }\n    if (dur.days) {\n        if (dur.specifiedWeeks && dur.days % 7 === 0) {\n            return { unit: 'week', value: dur.days / 7 };\n        }\n        return { unit: 'day', value: dur.days };\n    }\n    if (dur.months) {\n        return { unit: 'month', value: dur.months };\n    }\n    if (dur.years) {\n        return { unit: 'year', value: dur.years };\n    }\n    return { unit: 'millisecond', value: 0 };\n}\n\n// TODO: new util arrayify?\nfunction removeExact(array, exactVal) {\n    let removeCnt = 0;\n    let i = 0;\n    while (i < array.length) {\n        if (array[i] === exactVal) {\n            array.splice(i, 1);\n            removeCnt += 1;\n        }\n        else {\n            i += 1;\n        }\n    }\n    return removeCnt;\n}\nfunction isArraysEqual(a0, a1, equalityFunc) {\n    if (a0 === a1) {\n        return true;\n    }\n    let len = a0.length;\n    let i;\n    if (len !== a1.length) { // not array? or not same length?\n        return false;\n    }\n    for (i = 0; i < len; i += 1) {\n        if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nconst DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\n// Adding\nfunction addWeeks(m, n) {\n    let a = dateToUtcArray(m);\n    a[2] += n * 7;\n    return arrayToUtcDate(a);\n}\nfunction addDays(m, n) {\n    let a = dateToUtcArray(m);\n    a[2] += n;\n    return arrayToUtcDate(a);\n}\nfunction addMs(m, n) {\n    let a = dateToUtcArray(m);\n    a[6] += n;\n    return arrayToUtcDate(a);\n}\n// Diffing (all return floats)\n// TODO: why not use ranges?\nfunction diffWeeks(m0, m1) {\n    return diffDays(m0, m1) / 7;\n}\nfunction diffDays(m0, m1) {\n    return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);\n}\nfunction diffHours(m0, m1) {\n    return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);\n}\nfunction diffMinutes(m0, m1) {\n    return (m1.valueOf() - m0.valueOf()) / (1000 * 60);\n}\nfunction diffSeconds(m0, m1) {\n    return (m1.valueOf() - m0.valueOf()) / 1000;\n}\nfunction diffDayAndTime(m0, m1) {\n    let m0day = startOfDay(m0);\n    let m1day = startOfDay(m1);\n    return {\n        years: 0,\n        months: 0,\n        days: Math.round(diffDays(m0day, m1day)),\n        milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),\n    };\n}\n// Diffing Whole Units\nfunction diffWholeWeeks(m0, m1) {\n    let d = diffWholeDays(m0, m1);\n    if (d !== null && d % 7 === 0) {\n        return d / 7;\n    }\n    return null;\n}\nfunction diffWholeDays(m0, m1) {\n    if (timeAsMs(m0) === timeAsMs(m1)) {\n        return Math.round(diffDays(m0, m1));\n    }\n    return null;\n}\n// Start-Of\nfunction startOfDay(m) {\n    return arrayToUtcDate([\n        m.getUTCFullYear(),\n        m.getUTCMonth(),\n        m.getUTCDate(),\n    ]);\n}\nfunction startOfHour(m) {\n    return arrayToUtcDate([\n        m.getUTCFullYear(),\n        m.getUTCMonth(),\n        m.getUTCDate(),\n        m.getUTCHours(),\n    ]);\n}\nfunction startOfMinute(m) {\n    return arrayToUtcDate([\n        m.getUTCFullYear(),\n        m.getUTCMonth(),\n        m.getUTCDate(),\n        m.getUTCHours(),\n        m.getUTCMinutes(),\n    ]);\n}\nfunction startOfSecond(m) {\n    return arrayToUtcDate([\n        m.getUTCFullYear(),\n        m.getUTCMonth(),\n        m.getUTCDate(),\n        m.getUTCHours(),\n        m.getUTCMinutes(),\n        m.getUTCSeconds(),\n    ]);\n}\n// Week Computation\nfunction weekOfYear(marker, dow, doy) {\n    let y = marker.getUTCFullYear();\n    let w = weekOfGivenYear(marker, y, dow, doy);\n    if (w < 1) {\n        return weekOfGivenYear(marker, y - 1, dow, doy);\n    }\n    let nextW = weekOfGivenYear(marker, y + 1, dow, doy);\n    if (nextW >= 1) {\n        return Math.min(w, nextW);\n    }\n    return w;\n}\nfunction weekOfGivenYear(marker, year, dow, doy) {\n    let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);\n    let dayStart = startOfDay(marker);\n    let days = Math.round(diffDays(firstWeekStart, dayStart));\n    return Math.floor(days / 7) + 1; // zero-indexed\n}\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n    let fwd = 7 + dow - doy;\n    // first-week day local weekday -- which local weekday is fwd\n    let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;\n    return -fwdlw + fwd - 1;\n}\n// Array Conversion\nfunction dateToLocalArray(date) {\n    return [\n        date.getFullYear(),\n        date.getMonth(),\n        date.getDate(),\n        date.getHours(),\n        date.getMinutes(),\n        date.getSeconds(),\n        date.getMilliseconds(),\n    ];\n}\nfunction arrayToLocalDate(a) {\n    return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month\n    a[3] || 0, a[4] || 0, a[5] || 0);\n}\nfunction dateToUtcArray(date) {\n    return [\n        date.getUTCFullYear(),\n        date.getUTCMonth(),\n        date.getUTCDate(),\n        date.getUTCHours(),\n        date.getUTCMinutes(),\n        date.getUTCSeconds(),\n        date.getUTCMilliseconds(),\n    ];\n}\nfunction arrayToUtcDate(a) {\n    // according to web standards (and Safari), a month index is required.\n    // massage if only given a year.\n    if (a.length === 1) {\n        a = a.concat([0]);\n    }\n    return new Date(Date.UTC(...a));\n}\n// Other Utils\nfunction isValidDate(m) {\n    return !isNaN(m.valueOf());\n}\nfunction timeAsMs(m) {\n    return m.getUTCHours() * 1000 * 60 * 60 +\n        m.getUTCMinutes() * 1000 * 60 +\n        m.getUTCSeconds() * 1000 +\n        m.getUTCMilliseconds();\n}\n\n// timeZoneOffset is in minutes\nfunction buildIsoString(marker, timeZoneOffset, stripZeroTime = false) {\n    let s = marker.toISOString();\n    s = s.replace('.000', '');\n    if (stripZeroTime) {\n        s = s.replace('T00:00:00Z', '');\n    }\n    if (s.length > 10) { // time part wasn't stripped, can add timezone info\n        if (timeZoneOffset == null) {\n            s = s.replace('Z', '');\n        }\n        else if (timeZoneOffset !== 0) {\n            s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));\n        }\n        // otherwise, its UTC-0 and we want to keep the Z\n    }\n    return s;\n}\n// formats the date, but with no time part\n// TODO: somehow merge with buildIsoString and stripZeroTime\n// TODO: rename. omit \"string\"\nfunction formatDayString(marker) {\n    return marker.toISOString().replace(/T.*$/, '');\n}\nfunction formatIsoMonthStr(marker) {\n    return marker.toISOString().match(/^\\d{4}-\\d{2}/)[0];\n}\n// TODO: use Date::toISOString and use everything after the T?\nfunction formatIsoTimeString(marker) {\n    return padStart(marker.getUTCHours(), 2) + ':' +\n        padStart(marker.getUTCMinutes(), 2) + ':' +\n        padStart(marker.getUTCSeconds(), 2);\n}\nfunction formatTimeZoneOffset(minutes, doIso = false) {\n    let sign = minutes < 0 ? '-' : '+';\n    let abs = Math.abs(minutes);\n    let hours = Math.floor(abs / 60);\n    let mins = Math.round(abs % 60);\n    if (doIso) {\n        return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`;\n    }\n    return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ''}`;\n}\n\nfunction memoize(workerFunc, resEquality, teardownFunc) {\n    let currentArgs;\n    let currentRes;\n    return function (...newArgs) {\n        if (!currentArgs) {\n            currentRes = workerFunc.apply(this, newArgs);\n        }\n        else if (!isArraysEqual(currentArgs, newArgs)) {\n            if (teardownFunc) {\n                teardownFunc(currentRes);\n            }\n            let res = workerFunc.apply(this, newArgs);\n            if (!resEquality || !resEquality(res, currentRes)) {\n                currentRes = res;\n            }\n        }\n        currentArgs = newArgs;\n        return currentRes;\n    };\n}\nfunction memoizeObjArg(workerFunc, resEquality, teardownFunc) {\n    let currentArg;\n    let currentRes;\n    return (newArg) => {\n        if (!currentArg) {\n            currentRes = workerFunc.call(this, newArg);\n        }\n        else if (!isPropsEqual(currentArg, newArg)) {\n            if (teardownFunc) {\n                teardownFunc(currentRes);\n            }\n            let res = workerFunc.call(this, newArg);\n            if (!resEquality || !resEquality(res, currentRes)) {\n                currentRes = res;\n            }\n        }\n        currentArg = newArg;\n        return currentRes;\n    };\n}\nfunction memoizeArraylike(// used at all?\nworkerFunc, resEquality, teardownFunc) {\n    let currentArgSets = [];\n    let currentResults = [];\n    return (newArgSets) => {\n        let currentLen = currentArgSets.length;\n        let newLen = newArgSets.length;\n        let i = 0;\n        for (; i < currentLen; i += 1) {\n            if (!newArgSets[i]) { // one of the old sets no longer exists\n                if (teardownFunc) {\n                    teardownFunc(currentResults[i]);\n                }\n            }\n            else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {\n                if (teardownFunc) {\n                    teardownFunc(currentResults[i]);\n                }\n                let res = workerFunc.apply(this, newArgSets[i]);\n                if (!resEquality || !resEquality(res, currentResults[i])) {\n                    currentResults[i] = res;\n                }\n            }\n        }\n        for (; i < newLen; i += 1) {\n            currentResults[i] = workerFunc.apply(this, newArgSets[i]);\n        }\n        currentArgSets = newArgSets;\n        currentResults.splice(newLen); // remove excess\n        return currentResults;\n    };\n}\nfunction memoizeHashlike(workerFunc, resEquality, teardownFunc) {\n    let currentArgHash = {};\n    let currentResHash = {};\n    return (newArgHash) => {\n        let newResHash = {};\n        for (let key in newArgHash) {\n            if (!currentResHash[key]) {\n                newResHash[key] = workerFunc.apply(this, newArgHash[key]);\n            }\n            else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {\n                if (teardownFunc) {\n                    teardownFunc(currentResHash[key]);\n                }\n                let res = workerFunc.apply(this, newArgHash[key]);\n                newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))\n                    ? currentResHash[key]\n                    : res;\n            }\n            else {\n                newResHash[key] = currentResHash[key];\n            }\n        }\n        currentArgHash = newArgHash;\n        currentResHash = newResHash;\n        return newResHash;\n    };\n}\n\nconst EXTENDED_SETTINGS_AND_SEVERITIES = {\n    week: 3,\n    separator: 9,\n    omitZeroMinute: 9,\n    meridiem: 9,\n    omitCommas: 9,\n};\nconst STANDARD_DATE_PROP_SEVERITIES = {\n    timeZoneName: 7,\n    era: 6,\n    year: 5,\n    month: 4,\n    day: 2,\n    weekday: 2,\n    hour: 1,\n    minute: 1,\n    second: 1,\n};\nconst MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i; // eats up leading spaces too\nconst COMMA_RE = /,/g; // we need re for globalness\nconst MULTI_SPACE_RE = /\\s+/g;\nconst LTR_RE = /\\u200e/g; // control character\nconst UTC_RE = /UTC|GMT/;\nclass NativeFormatter {\n    constructor(formatSettings) {\n        let standardDateProps = {};\n        let extendedSettings = {};\n        let smallestUnitNum = 9; // the smallest unit in the formatter (9 is a sentinel, beyond max)\n        for (let name in formatSettings) {\n            if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {\n                extendedSettings[name] = formatSettings[name];\n                const severity = EXTENDED_SETTINGS_AND_SEVERITIES[name];\n                if (severity < 9) {\n                    smallestUnitNum = Math.min(EXTENDED_SETTINGS_AND_SEVERITIES[name], smallestUnitNum);\n                }\n            }\n            else {\n                standardDateProps[name] = formatSettings[name];\n                if (name in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity\n                    smallestUnitNum = Math.min(STANDARD_DATE_PROP_SEVERITIES[name], smallestUnitNum);\n                }\n            }\n        }\n        this.standardDateProps = standardDateProps;\n        this.extendedSettings = extendedSettings;\n        this.smallestUnitNum = smallestUnitNum;\n        this.buildFormattingFunc = memoize(buildFormattingFunc);\n    }\n    format(date, context) {\n        return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);\n    }\n    formatRange(start, end, context, betterDefaultSeparator) {\n        let { standardDateProps, extendedSettings } = this;\n        let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);\n        if (!diffSeverity) {\n            return this.format(start, context);\n        }\n        let biggestUnitForPartial = diffSeverity;\n        if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time\n            (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&\n            (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&\n            (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {\n            biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time\n        }\n        let full0 = this.format(start, context);\n        let full1 = this.format(end, context);\n        if (full0 === full1) {\n            return full0;\n        }\n        let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);\n        let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);\n        let partial0 = partialFormattingFunc(start);\n        let partial1 = partialFormattingFunc(end);\n        let insertion = findCommonInsertion(full0, partial0, full1, partial1);\n        let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';\n        if (insertion) {\n            return insertion.before + partial0 + separator + partial1 + insertion.after;\n        }\n        return full0 + separator + full1;\n    }\n    getSmallestUnit() {\n        switch (this.smallestUnitNum) {\n            case 7:\n            case 6:\n            case 5:\n                return 'year';\n            case 4:\n                return 'month';\n            case 3:\n                return 'week';\n            case 2:\n                return 'day';\n            default:\n                return 'time'; // really?\n        }\n    }\n}\nfunction buildFormattingFunc(standardDateProps, extendedSettings, context) {\n    let standardDatePropCnt = Object.keys(standardDateProps).length;\n    if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n        return (date) => (formatTimeZoneOffset(date.timeZoneOffset));\n    }\n    if (standardDatePropCnt === 0 && extendedSettings.week) {\n        return (date) => (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week));\n    }\n    return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);\n}\nfunction buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {\n    standardDateProps = Object.assign({}, standardDateProps); // copy\n    extendedSettings = Object.assign({}, extendedSettings); // copy\n    sanitizeSettings(standardDateProps, extendedSettings);\n    standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers\n    let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);\n    let zeroFormat; // needed?\n    if (extendedSettings.omitZeroMinute) {\n        let zeroProps = Object.assign({}, standardDateProps);\n        delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings\n        zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);\n    }\n    return (date) => {\n        let { marker } = date;\n        let format;\n        if (zeroFormat && !marker.getUTCMinutes()) {\n            format = zeroFormat;\n        }\n        else {\n            format = normalFormat;\n        }\n        let s = format.format(marker);\n        return postProcess(s, date, standardDateProps, extendedSettings, context);\n    };\n}\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n    // deal with a browser inconsistency where formatting the timezone\n    // requires that the hour/minute be present.\n    if (standardDateProps.timeZoneName) {\n        if (!standardDateProps.hour) {\n            standardDateProps.hour = '2-digit';\n        }\n        if (!standardDateProps.minute) {\n            standardDateProps.minute = '2-digit';\n        }\n    }\n    // only support short timezone names\n    if (standardDateProps.timeZoneName === 'long') {\n        standardDateProps.timeZoneName = 'short';\n    }\n    // if requesting to display seconds, MUST display minutes\n    if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n        delete extendedSettings.omitZeroMinute;\n    }\n}\nfunction postProcess(s, date, standardDateProps, extendedSettings, context) {\n    s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes\n    if (standardDateProps.timeZoneName === 'short') {\n        s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?\n            'UTC' : // important to normalize for IE, which does \"GMT\"\n            formatTimeZoneOffset(date.timeZoneOffset));\n    }\n    if (extendedSettings.omitCommas) {\n        s = s.replace(COMMA_RE, '').trim();\n    }\n    if (extendedSettings.omitZeroMinute) {\n        s = s.replace(':00', ''); // zeroFormat doesn't always achieve this\n    }\n    // ^ do anything that might create adjacent spaces before this point,\n    // because MERIDIEM_RE likes to eat up loading spaces\n    if (extendedSettings.meridiem === false) {\n        s = s.replace(MERIDIEM_RE, '').trim();\n    }\n    else if (extendedSettings.meridiem === 'narrow') { // a/p\n        s = s.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase());\n    }\n    else if (extendedSettings.meridiem === 'short') { // am/pm\n        s = s.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`);\n    }\n    else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase\n        s = s.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase());\n    }\n    s = s.replace(MULTI_SPACE_RE, ' ');\n    s = s.trim();\n    return s;\n}\nfunction injectTzoStr(s, tzoStr) {\n    let replaced = false;\n    s = s.replace(UTC_RE, () => {\n        replaced = true;\n        return tzoStr;\n    });\n    // IE11 doesn't include UTC/GMT in the original string, so append to end\n    if (!replaced) {\n        s += ` ${tzoStr}`;\n    }\n    return s;\n}\nfunction formatWeekNumber(num, weekText, weekTextLong, locale, display) {\n    let parts = [];\n    if (display === 'long') {\n        parts.push(weekTextLong);\n    }\n    else if (display === 'short' || display === 'narrow') {\n        parts.push(weekText);\n    }\n    if (display === 'long' || display === 'short') {\n        parts.push(' ');\n    }\n    parts.push(locale.simpleNumberFormat.format(num));\n    if (locale.options.direction === 'rtl') { // TODO: use control characters instead?\n        parts.reverse();\n    }\n    return parts.join('');\n}\n// Range Formatting Utils\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\nfunction computeMarkerDiffSeverity(d0, d1, ca) {\n    if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n        return 5;\n    }\n    if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n        return 4;\n    }\n    if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n        return 2;\n    }\n    if (timeAsMs(d0) !== timeAsMs(d1)) {\n        return 1;\n    }\n    return 0;\n}\nfunction computePartialFormattingOptions(options, biggestUnit) {\n    let partialOptions = {};\n    for (let name in options) {\n        if (!(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n            STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit) {\n            partialOptions[name] = options[name];\n        }\n    }\n    return partialOptions;\n}\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n    let i0 = 0;\n    while (i0 < full0.length) {\n        let found0 = full0.indexOf(partial0, i0);\n        if (found0 === -1) {\n            break;\n        }\n        let before0 = full0.substr(0, found0);\n        i0 = found0 + partial0.length;\n        let after0 = full0.substr(i0);\n        let i1 = 0;\n        while (i1 < full1.length) {\n            let found1 = full1.indexOf(partial1, i1);\n            if (found1 === -1) {\n                break;\n            }\n            let before1 = full1.substr(0, found1);\n            i1 = found1 + partial1.length;\n            let after1 = full1.substr(i1);\n            if (before0 === before1 && after0 === after1) {\n                return {\n                    before: before0,\n                    after: after0,\n                };\n            }\n        }\n    }\n    return null;\n}\n\nfunction expandZonedMarker(dateInfo, calendarSystem) {\n    let a = calendarSystem.markerToArray(dateInfo.marker);\n    return {\n        marker: dateInfo.marker,\n        timeZoneOffset: dateInfo.timeZoneOffset,\n        array: a,\n        year: a[0],\n        month: a[1],\n        day: a[2],\n        hour: a[3],\n        minute: a[4],\n        second: a[5],\n        millisecond: a[6],\n    };\n}\n\nfunction createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {\n    let startInfo = expandZonedMarker(start, context.calendarSystem);\n    let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;\n    return {\n        date: startInfo,\n        start: startInfo,\n        end: endInfo,\n        timeZone: context.timeZone,\n        localeCodes: context.locale.codes,\n        defaultSeparator: betterDefaultSeparator || context.defaultSeparator,\n    };\n}\n\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\nclass CmdFormatter {\n    constructor(cmdStr) {\n        this.cmdStr = cmdStr;\n    }\n    format(date, context, betterDefaultSeparator) {\n        return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));\n    }\n    formatRange(start, end, context, betterDefaultSeparator) {\n        return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));\n    }\n}\n\nclass FuncFormatter {\n    constructor(func) {\n        this.func = func;\n    }\n    format(date, context, betterDefaultSeparator) {\n        return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));\n    }\n    formatRange(start, end, context, betterDefaultSeparator) {\n        return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));\n    }\n}\n\nfunction createFormatter(input) {\n    if (typeof input === 'object' && input) { // non-null object\n        return new NativeFormatter(input);\n    }\n    if (typeof input === 'string') {\n        return new CmdFormatter(input);\n    }\n    if (typeof input === 'function') {\n        return new FuncFormatter(input);\n    }\n    return null;\n}\n\n// base options\n// ------------\nconst BASE_OPTION_REFINERS = {\n    navLinkDayClick: identity,\n    navLinkWeekClick: identity,\n    duration: createDuration,\n    bootstrapFontAwesome: identity,\n    buttonIcons: identity,\n    customButtons: identity,\n    defaultAllDayEventDuration: createDuration,\n    defaultTimedEventDuration: createDuration,\n    nextDayThreshold: createDuration,\n    scrollTime: createDuration,\n    scrollTimeReset: Boolean,\n    slotMinTime: createDuration,\n    slotMaxTime: createDuration,\n    dayPopoverFormat: createFormatter,\n    slotDuration: createDuration,\n    snapDuration: createDuration,\n    headerToolbar: identity,\n    footerToolbar: identity,\n    defaultRangeSeparator: String,\n    titleRangeSeparator: String,\n    forceEventDuration: Boolean,\n    dayHeaders: Boolean,\n    dayHeaderFormat: createFormatter,\n    dayHeaderClassNames: identity,\n    dayHeaderContent: identity,\n    dayHeaderDidMount: identity,\n    dayHeaderWillUnmount: identity,\n    dayCellClassNames: identity,\n    dayCellContent: identity,\n    dayCellDidMount: identity,\n    dayCellWillUnmount: identity,\n    initialView: String,\n    aspectRatio: Number,\n    weekends: Boolean,\n    weekNumberCalculation: identity,\n    weekNumbers: Boolean,\n    weekNumberClassNames: identity,\n    weekNumberContent: identity,\n    weekNumberDidMount: identity,\n    weekNumberWillUnmount: identity,\n    editable: Boolean,\n    viewClassNames: identity,\n    viewDidMount: identity,\n    viewWillUnmount: identity,\n    nowIndicator: Boolean,\n    nowIndicatorSnap: identity,\n    nowIndicatorClassNames: identity,\n    nowIndicatorContent: identity,\n    nowIndicatorDidMount: identity,\n    nowIndicatorWillUnmount: identity,\n    showNonCurrentDates: Boolean,\n    lazyFetching: Boolean,\n    startParam: String,\n    endParam: String,\n    timeZoneParam: String,\n    timeZone: String,\n    locales: identity,\n    locale: identity,\n    themeSystem: String,\n    dragRevertDuration: Number,\n    dragScroll: Boolean,\n    allDayMaintainDuration: Boolean,\n    unselectAuto: Boolean,\n    dropAccept: identity,\n    eventOrder: parseFieldSpecs,\n    eventOrderStrict: Boolean,\n    handleWindowResize: Boolean,\n    windowResizeDelay: Number,\n    longPressDelay: Number,\n    eventDragMinDistance: Number,\n    expandRows: Boolean,\n    height: identity,\n    contentHeight: identity,\n    direction: String,\n    weekNumberFormat: createFormatter,\n    eventResizableFromStart: Boolean,\n    displayEventTime: Boolean,\n    displayEventEnd: Boolean,\n    weekText: String,\n    weekTextLong: String,\n    progressiveEventRendering: Boolean,\n    businessHours: identity,\n    initialDate: identity,\n    now: identity,\n    eventDataTransform: identity,\n    stickyHeaderDates: identity,\n    stickyFooterScrollbar: identity,\n    viewHeight: identity,\n    defaultAllDay: Boolean,\n    eventSourceFailure: identity,\n    eventSourceSuccess: identity,\n    eventDisplay: String,\n    eventStartEditable: Boolean,\n    eventDurationEditable: Boolean,\n    eventOverlap: identity,\n    eventConstraint: identity,\n    eventAllow: identity,\n    eventBackgroundColor: String,\n    eventBorderColor: String,\n    eventTextColor: String,\n    eventColor: String,\n    eventClassNames: identity,\n    eventContent: identity,\n    eventDidMount: identity,\n    eventWillUnmount: identity,\n    selectConstraint: identity,\n    selectOverlap: identity,\n    selectAllow: identity,\n    droppable: Boolean,\n    unselectCancel: String,\n    slotLabelFormat: identity,\n    slotLaneClassNames: identity,\n    slotLaneContent: identity,\n    slotLaneDidMount: identity,\n    slotLaneWillUnmount: identity,\n    slotLabelClassNames: identity,\n    slotLabelContent: identity,\n    slotLabelDidMount: identity,\n    slotLabelWillUnmount: identity,\n    dayMaxEvents: identity,\n    dayMaxEventRows: identity,\n    dayMinWidth: Number,\n    slotLabelInterval: createDuration,\n    allDayText: String,\n    allDayClassNames: identity,\n    allDayContent: identity,\n    allDayDidMount: identity,\n    allDayWillUnmount: identity,\n    slotMinWidth: Number,\n    navLinks: Boolean,\n    eventTimeFormat: createFormatter,\n    rerenderDelay: Number,\n    moreLinkText: identity,\n    moreLinkHint: identity,\n    selectMinDistance: Number,\n    selectable: Boolean,\n    selectLongPressDelay: Number,\n    eventLongPressDelay: Number,\n    selectMirror: Boolean,\n    eventMaxStack: Number,\n    eventMinHeight: Number,\n    eventMinWidth: Number,\n    eventShortHeight: Number,\n    slotEventOverlap: Boolean,\n    plugins: identity,\n    firstDay: Number,\n    dayCount: Number,\n    dateAlignment: String,\n    dateIncrement: createDuration,\n    hiddenDays: identity,\n    fixedWeekCount: Boolean,\n    validRange: identity,\n    visibleRange: identity,\n    titleFormat: identity,\n    eventInteractive: Boolean,\n    // only used by list-view, but languages define the value, so we need it in base options\n    noEventsText: String,\n    viewHint: identity,\n    navLinkHint: identity,\n    closeHint: String,\n    timeHint: String,\n    eventHint: String,\n    moreLinkClick: identity,\n    moreLinkClassNames: identity,\n    moreLinkContent: identity,\n    moreLinkDidMount: identity,\n    moreLinkWillUnmount: identity,\n    monthStartFormat: createFormatter,\n    // for connectors\n    // (can't be part of plugin system b/c must be provided at runtime)\n    handleCustomRendering: identity,\n    customRenderingMetaMap: identity,\n    customRenderingReplaces: Boolean,\n};\n// do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.\n// raw values.\nconst BASE_OPTION_DEFAULTS = {\n    eventDisplay: 'auto',\n    defaultRangeSeparator: ' - ',\n    titleRangeSeparator: ' \\u2013 ',\n    defaultTimedEventDuration: '01:00:00',\n    defaultAllDayEventDuration: { day: 1 },\n    forceEventDuration: false,\n    nextDayThreshold: '00:00:00',\n    dayHeaders: true,\n    initialView: '',\n    aspectRatio: 1.35,\n    headerToolbar: {\n        start: 'title',\n        center: '',\n        end: 'today prev,next',\n    },\n    weekends: true,\n    weekNumbers: false,\n    weekNumberCalculation: 'local',\n    editable: false,\n    nowIndicator: false,\n    scrollTime: '06:00:00',\n    scrollTimeReset: true,\n    slotMinTime: '00:00:00',\n    slotMaxTime: '24:00:00',\n    showNonCurrentDates: true,\n    lazyFetching: true,\n    startParam: 'start',\n    endParam: 'end',\n    timeZoneParam: 'timeZone',\n    timeZone: 'local',\n    locales: [],\n    locale: '',\n    themeSystem: 'standard',\n    dragRevertDuration: 500,\n    dragScroll: true,\n    allDayMaintainDuration: false,\n    unselectAuto: true,\n    dropAccept: '*',\n    eventOrder: 'start,-duration,allDay,title',\n    dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n    handleWindowResize: true,\n    windowResizeDelay: 100,\n    longPressDelay: 1000,\n    eventDragMinDistance: 5,\n    expandRows: false,\n    navLinks: false,\n    selectable: false,\n    eventMinHeight: 15,\n    eventMinWidth: 30,\n    eventShortHeight: 30,\n    monthStartFormat: { month: 'long', day: 'numeric' },\n    nowIndicatorSnap: 'auto',\n};\n// calendar listeners\n// ------------------\nconst CALENDAR_LISTENER_REFINERS = {\n    datesSet: identity,\n    eventsSet: identity,\n    eventAdd: identity,\n    eventChange: identity,\n    eventRemove: identity,\n    windowResize: identity,\n    eventClick: identity,\n    eventMouseEnter: identity,\n    eventMouseLeave: identity,\n    select: identity,\n    unselect: identity,\n    loading: identity,\n    // internal\n    _unmount: identity,\n    _beforeprint: identity,\n    _afterprint: identity,\n    _noEventDrop: identity,\n    _noEventResize: identity,\n    _resize: identity,\n    _scrollRequest: identity,\n};\n// calendar-specific options\n// -------------------------\nconst CALENDAR_OPTION_REFINERS = {\n    buttonText: identity,\n    buttonHints: identity,\n    views: identity,\n    plugins: identity,\n    initialEvents: identity,\n    events: identity,\n    eventSources: identity,\n};\nconst COMPLEX_OPTION_COMPARATORS = {\n    headerToolbar: isMaybeObjectsEqual,\n    footerToolbar: isMaybeObjectsEqual,\n    buttonText: isMaybeObjectsEqual,\n    buttonHints: isMaybeObjectsEqual,\n    buttonIcons: isMaybeObjectsEqual,\n    dateIncrement: isMaybeObjectsEqual,\n    plugins: isMaybeArraysEqual,\n    events: isMaybeArraysEqual,\n    eventSources: isMaybeArraysEqual,\n    ['resources']: isMaybeArraysEqual,\n};\nfunction isMaybeObjectsEqual(a, b) {\n    if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects\n        return isPropsEqual(a, b);\n    }\n    return a === b;\n}\nfunction isMaybeArraysEqual(a, b) {\n    if (Array.isArray(a) && Array.isArray(b)) {\n        return isArraysEqual(a, b);\n    }\n    return a === b;\n}\n// view-specific options\n// ---------------------\nconst VIEW_OPTION_REFINERS = {\n    type: String,\n    component: identity,\n    buttonText: String,\n    buttonTextKey: String,\n    dateProfileGeneratorClass: identity,\n    usesMinMaxTime: Boolean,\n    classNames: identity,\n    content: identity,\n    didMount: identity,\n    willUnmount: identity,\n};\n// util funcs\n// ----------------------------------------------------------------------------------------------------\nfunction mergeRawOptions(optionSets) {\n    return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);\n}\nfunction refineProps(input, refiners) {\n    let refined = {};\n    let extra = {};\n    for (let propName in refiners) {\n        if (propName in input) {\n            refined[propName] = refiners[propName](input[propName]);\n        }\n    }\n    for (let propName in input) {\n        if (!(propName in refiners)) {\n            extra[propName] = input[propName];\n        }\n    }\n    return { refined, extra };\n}\nfunction identity(raw) {\n    return raw;\n}\n\nconst { hasOwnProperty } = Object.prototype;\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nfunction mergeProps(propObjs, complexPropsMap) {\n    let dest = {};\n    if (complexPropsMap) {\n        for (let name in complexPropsMap) {\n            if (complexPropsMap[name] === isMaybeObjectsEqual) { // implies that it's object-mergeable\n                let complexObjs = [];\n                // collect the trailing object values, stopping when a non-object is discovered\n                for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n                    let val = propObjs[i][name];\n                    if (typeof val === 'object' && val) { // non-null object\n                        complexObjs.unshift(val);\n                    }\n                    else if (val !== undefined) {\n                        dest[name] = val; // if there were no objects, this value will be used\n                        break;\n                    }\n                }\n                // if the trailing values were objects, use the merged value\n                if (complexObjs.length) {\n                    dest[name] = mergeProps(complexObjs);\n                }\n            }\n        }\n    }\n    // copy values into the destination, going from last to first\n    for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n        let props = propObjs[i];\n        for (let name in props) {\n            if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n                dest[name] = props[name];\n            }\n        }\n    }\n    return dest;\n}\nfunction filterHash(hash, func) {\n    let filtered = {};\n    for (let key in hash) {\n        if (func(hash[key], key)) {\n            filtered[key] = hash[key];\n        }\n    }\n    return filtered;\n}\nfunction mapHash(hash, func) {\n    let newHash = {};\n    for (let key in hash) {\n        newHash[key] = func(hash[key], key);\n    }\n    return newHash;\n}\nfunction arrayToHash(a) {\n    let hash = {};\n    for (let item of a) {\n        hash[item] = true;\n    }\n    return hash;\n}\n// TODO: reassess browser support\n// https://caniuse.com/?search=object.values\nfunction hashValuesToArray(obj) {\n    let a = [];\n    for (let key in obj) {\n        a.push(obj[key]);\n    }\n    return a;\n}\nfunction isPropsEqual(obj0, obj1) {\n    if (obj0 === obj1) {\n        return true;\n    }\n    for (let key in obj0) {\n        if (hasOwnProperty.call(obj0, key)) {\n            if (!(key in obj1)) {\n                return false;\n            }\n        }\n    }\n    for (let key in obj1) {\n        if (hasOwnProperty.call(obj1, key)) {\n            if (obj0[key] !== obj1[key]) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\nconst HANDLER_RE = /^on[A-Z]/;\nfunction isNonHandlerPropsEqual(obj0, obj1) {\n    const keys = getUnequalProps(obj0, obj1);\n    for (let key of keys) {\n        if (!HANDLER_RE.test(key)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction getUnequalProps(obj0, obj1) {\n    let keys = [];\n    for (let key in obj0) {\n        if (hasOwnProperty.call(obj0, key)) {\n            if (!(key in obj1)) {\n                keys.push(key);\n            }\n        }\n    }\n    for (let key in obj1) {\n        if (hasOwnProperty.call(obj1, key)) {\n            if (obj0[key] !== obj1[key]) {\n                keys.push(key);\n            }\n        }\n    }\n    return keys;\n}\nfunction compareObjs(oldProps, newProps, equalityFuncs = {}) {\n    if (oldProps === newProps) {\n        return true;\n    }\n    // if (debug) {\n    //   for (let key in newProps) {\n    //     if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) {\n    //       // equal\n    //     } else {\n    //       if (debug) {\n    //         console.log('prop difference', key, oldProps[key], newProps[key])\n    //       }\n    //     }\n    //   }\n    //   // check for props that were omitted in the new\n    //   for (let key in oldProps) {\n    //     if (!(key in newProps)) {\n    //       if (debug) {\n    //         console.log('prop absent', key)\n    //       }\n    //     }\n    //   }\n    // }\n    for (let key in newProps) {\n        if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;\n        else {\n            return false;\n        }\n    }\n    // check for props that were omitted in the new\n    for (let key in oldProps) {\n        if (!(key in newProps)) {\n            return false;\n        }\n    }\n    return true;\n}\n/*\nassumed \"true\" equality for handler names like \"onReceiveSomething\"\n*/\nfunction isObjValsEqual(val0, val1, comparator) {\n    if (val0 === val1 || comparator === true) {\n        return true;\n    }\n    if (comparator) {\n        return comparator(val0, val1);\n    }\n    return false;\n}\nfunction collectFromHash(hash, startIndex = 0, endIndex, step = 1) {\n    let res = [];\n    if (endIndex == null) {\n        endIndex = Object.keys(hash).length;\n    }\n    for (let i = startIndex; i < endIndex; i += step) {\n        let val = hash[i];\n        if (val !== undefined) { // will disregard undefined for sparse arrays\n            res.push(val);\n        }\n    }\n    return res;\n}\n\nlet calendarSystemClassMap = {};\nfunction registerCalendarSystem(name, theClass) {\n    calendarSystemClassMap[name] = theClass;\n}\nfunction createCalendarSystem(name) {\n    return new calendarSystemClassMap[name]();\n}\nclass GregorianCalendarSystem {\n    getMarkerYear(d) {\n        return d.getUTCFullYear();\n    }\n    getMarkerMonth(d) {\n        return d.getUTCMonth();\n    }\n    getMarkerDay(d) {\n        return d.getUTCDate();\n    }\n    arrayToMarker(arr) {\n        return arrayToUtcDate(arr);\n    }\n    markerToArray(marker) {\n        return dateToUtcArray(marker);\n    }\n}\nregisterCalendarSystem('gregory', GregorianCalendarSystem);\n\nconst ISO_RE = /^\\s*(\\d{4})(-?(\\d{2})(-?(\\d{2})([T ](\\d{2}):?(\\d{2})(:?(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/;\nfunction parse(str) {\n    let m = ISO_RE.exec(str);\n    if (m) {\n        let marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number(`0.${m[12]}`) * 1000 : 0));\n        if (isValidDate(marker)) {\n            let timeZoneOffset = null;\n            if (m[13]) {\n                timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +\n                    Number(m[18] || 0));\n            }\n            return {\n                marker,\n                isTimeUnspecified: !m[6],\n                timeZoneOffset,\n            };\n        }\n    }\n    return null;\n}\n\nclass DateEnv {\n    constructor(settings) {\n        let timeZone = this.timeZone = settings.timeZone;\n        let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';\n        if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n            this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);\n        }\n        this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);\n        this.calendarSystem = createCalendarSystem(settings.calendarSystem);\n        this.locale = settings.locale;\n        this.weekDow = settings.locale.week.dow;\n        this.weekDoy = settings.locale.week.doy;\n        if (settings.weekNumberCalculation === 'ISO') {\n            this.weekDow = 1;\n            this.weekDoy = 4;\n        }\n        if (typeof settings.firstDay === 'number') {\n            this.weekDow = settings.firstDay;\n        }\n        if (typeof settings.weekNumberCalculation === 'function') {\n            this.weekNumberFunc = settings.weekNumberCalculation;\n        }\n        this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;\n        this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;\n        this.cmdFormatter = settings.cmdFormatter;\n        this.defaultSeparator = settings.defaultSeparator;\n    }\n    // Creating / Parsing\n    createMarker(input) {\n        let meta = this.createMarkerMeta(input);\n        if (meta === null) {\n            return null;\n        }\n        return meta.marker;\n    }\n    createNowMarker() {\n        if (this.canComputeOffset) {\n            return this.timestampToMarker(new Date().valueOf());\n        }\n        // if we can't compute the current date val for a timezone,\n        // better to give the current local date vals than UTC\n        return arrayToUtcDate(dateToLocalArray(new Date()));\n    }\n    createMarkerMeta(input) {\n        if (typeof input === 'string') {\n            return this.parse(input);\n        }\n        let marker = null;\n        if (typeof input === 'number') {\n            marker = this.timestampToMarker(input);\n        }\n        else if (input instanceof Date) {\n            input = input.valueOf();\n            if (!isNaN(input)) {\n                marker = this.timestampToMarker(input);\n            }\n        }\n        else if (Array.isArray(input)) {\n            marker = arrayToUtcDate(input);\n        }\n        if (marker === null || !isValidDate(marker)) {\n            return null;\n        }\n        return { marker, isTimeUnspecified: false, forcedTzo: null };\n    }\n    parse(s) {\n        let parts = parse(s);\n        if (parts === null) {\n            return null;\n        }\n        let { marker } = parts;\n        let forcedTzo = null;\n        if (parts.timeZoneOffset !== null) {\n            if (this.canComputeOffset) {\n                marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);\n            }\n            else {\n                forcedTzo = parts.timeZoneOffset;\n            }\n        }\n        return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo };\n    }\n    // Accessors\n    getYear(marker) {\n        return this.calendarSystem.getMarkerYear(marker);\n    }\n    getMonth(marker) {\n        return this.calendarSystem.getMarkerMonth(marker);\n    }\n    getDay(marker) {\n        return this.calendarSystem.getMarkerDay(marker);\n    }\n    // Adding / Subtracting\n    add(marker, dur) {\n        let a = this.calendarSystem.markerToArray(marker);\n        a[0] += dur.years;\n        a[1] += dur.months;\n        a[2] += dur.days;\n        a[6] += dur.milliseconds;\n        return this.calendarSystem.arrayToMarker(a);\n    }\n    subtract(marker, dur) {\n        let a = this.calendarSystem.markerToArray(marker);\n        a[0] -= dur.years;\n        a[1] -= dur.months;\n        a[2] -= dur.days;\n        a[6] -= dur.milliseconds;\n        return this.calendarSystem.arrayToMarker(a);\n    }\n    addYears(marker, n) {\n        let a = this.calendarSystem.markerToArray(marker);\n        a[0] += n;\n        return this.calendarSystem.arrayToMarker(a);\n    }\n    addMonths(marker, n) {\n        let a = this.calendarSystem.markerToArray(marker);\n        a[1] += n;\n        return this.calendarSystem.arrayToMarker(a);\n    }\n    // Diffing Whole Units\n    diffWholeYears(m0, m1) {\n        let { calendarSystem } = this;\n        if (timeAsMs(m0) === timeAsMs(m1) &&\n            calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&\n            calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {\n            return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);\n        }\n        return null;\n    }\n    diffWholeMonths(m0, m1) {\n        let { calendarSystem } = this;\n        if (timeAsMs(m0) === timeAsMs(m1) &&\n            calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {\n            return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +\n                (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;\n        }\n        return null;\n    }\n    // Range / Duration\n    greatestWholeUnit(m0, m1) {\n        let n = this.diffWholeYears(m0, m1);\n        if (n !== null) {\n            return { unit: 'year', value: n };\n        }\n        n = this.diffWholeMonths(m0, m1);\n        if (n !== null) {\n            return { unit: 'month', value: n };\n        }\n        n = diffWholeWeeks(m0, m1);\n        if (n !== null) {\n            return { unit: 'week', value: n };\n        }\n        n = diffWholeDays(m0, m1);\n        if (n !== null) {\n            return { unit: 'day', value: n };\n        }\n        n = diffHours(m0, m1);\n        if (isInt(n)) {\n            return { unit: 'hour', value: n };\n        }\n        n = diffMinutes(m0, m1);\n        if (isInt(n)) {\n            return { unit: 'minute', value: n };\n        }\n        n = diffSeconds(m0, m1);\n        if (isInt(n)) {\n            return { unit: 'second', value: n };\n        }\n        return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };\n    }\n    countDurationsBetween(m0, m1, d) {\n        // TODO: can use greatestWholeUnit\n        let diff;\n        if (d.years) {\n            diff = this.diffWholeYears(m0, m1);\n            if (diff !== null) {\n                return diff / asRoughYears(d);\n            }\n        }\n        if (d.months) {\n            diff = this.diffWholeMonths(m0, m1);\n            if (diff !== null) {\n                return diff / asRoughMonths(d);\n            }\n        }\n        if (d.days) {\n            diff = diffWholeDays(m0, m1);\n            if (diff !== null) {\n                return diff / asRoughDays(d);\n            }\n        }\n        return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);\n    }\n    // Start-Of\n    // these DON'T return zoned-dates. only UTC start-of dates\n    startOf(m, unit) {\n        if (unit === 'year') {\n            return this.startOfYear(m);\n        }\n        if (unit === 'month') {\n            return this.startOfMonth(m);\n        }\n        if (unit === 'week') {\n            return this.startOfWeek(m);\n        }\n        if (unit === 'day') {\n            return startOfDay(m);\n        }\n        if (unit === 'hour') {\n            return startOfHour(m);\n        }\n        if (unit === 'minute') {\n            return startOfMinute(m);\n        }\n        if (unit === 'second') {\n            return startOfSecond(m);\n        }\n        return null;\n    }\n    startOfYear(m) {\n        return this.calendarSystem.arrayToMarker([\n            this.calendarSystem.getMarkerYear(m),\n        ]);\n    }\n    startOfMonth(m) {\n        return this.calendarSystem.arrayToMarker([\n            this.calendarSystem.getMarkerYear(m),\n            this.calendarSystem.getMarkerMonth(m),\n        ]);\n    }\n    startOfWeek(m) {\n        return this.calendarSystem.arrayToMarker([\n            this.calendarSystem.getMarkerYear(m),\n            this.calendarSystem.getMarkerMonth(m),\n            m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),\n        ]);\n    }\n    // Week Number\n    computeWeekNumber(marker) {\n        if (this.weekNumberFunc) {\n            return this.weekNumberFunc(this.toDate(marker));\n        }\n        return weekOfYear(marker, this.weekDow, this.weekDoy);\n    }\n    // TODO: choke on timeZoneName: long\n    format(marker, formatter, dateOptions = {}) {\n        return formatter.format({\n            marker,\n            timeZoneOffset: dateOptions.forcedTzo != null ?\n                dateOptions.forcedTzo :\n                this.offsetForMarker(marker),\n        }, this);\n    }\n    formatRange(start, end, formatter, dateOptions = {}) {\n        if (dateOptions.isEndExclusive) {\n            end = addMs(end, -1);\n        }\n        return formatter.formatRange({\n            marker: start,\n            timeZoneOffset: dateOptions.forcedStartTzo != null ?\n                dateOptions.forcedStartTzo :\n                this.offsetForMarker(start),\n        }, {\n            marker: end,\n            timeZoneOffset: dateOptions.forcedEndTzo != null ?\n                dateOptions.forcedEndTzo :\n                this.offsetForMarker(end),\n        }, this, dateOptions.defaultSeparator);\n    }\n    /*\n    DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,\n    might as well use buildIsoString or some other util directly\n    */\n    formatIso(marker, extraOptions = {}) {\n        let timeZoneOffset = null;\n        if (!extraOptions.omitTimeZoneOffset) {\n            if (extraOptions.forcedTzo != null) {\n                timeZoneOffset = extraOptions.forcedTzo;\n            }\n            else {\n                timeZoneOffset = this.offsetForMarker(marker);\n            }\n        }\n        return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);\n    }\n    // TimeZone\n    timestampToMarker(ms) {\n        if (this.timeZone === 'local') {\n            return arrayToUtcDate(dateToLocalArray(new Date(ms)));\n        }\n        if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n            return new Date(ms);\n        }\n        return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));\n    }\n    offsetForMarker(m) {\n        if (this.timeZone === 'local') {\n            return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert \"inverse\" offset to \"normal\" offset\n        }\n        if (this.timeZone === 'UTC') {\n            return 0;\n        }\n        if (this.namedTimeZoneImpl) {\n            return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));\n        }\n        return null;\n    }\n    // Conversion\n    toDate(m, forcedTzo) {\n        if (this.timeZone === 'local') {\n            return arrayToLocalDate(dateToUtcArray(m));\n        }\n        if (this.timeZone === 'UTC') {\n            return new Date(m.valueOf()); // make sure it's a copy\n        }\n        if (!this.namedTimeZoneImpl) {\n            return new Date(m.valueOf() - (forcedTzo || 0));\n        }\n        return new Date(m.valueOf() -\n            this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60);\n    }\n}\n\nclass Theme {\n    constructor(calendarOptions) {\n        if (this.iconOverrideOption) {\n            this.setIconOverride(calendarOptions[this.iconOverrideOption]);\n        }\n    }\n    setIconOverride(iconOverrideHash) {\n        let iconClassesCopy;\n        let buttonName;\n        if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object\n            iconClassesCopy = Object.assign({}, this.iconClasses);\n            for (buttonName in iconOverrideHash) {\n                iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\n            }\n            this.iconClasses = iconClassesCopy;\n        }\n        else if (iconOverrideHash === false) {\n            this.iconClasses = {};\n        }\n    }\n    applyIconOverridePrefix(className) {\n        let prefix = this.iconOverridePrefix;\n        if (prefix && className.indexOf(prefix) !== 0) { // if not already present\n            className = prefix + className;\n        }\n        return className;\n    }\n    getClass(key) {\n        return this.classes[key] || '';\n    }\n    getIconClass(buttonName, isRtl) {\n        let className;\n        if (isRtl && this.rtlIconClasses) {\n            className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];\n        }\n        else {\n            className = this.iconClasses[buttonName];\n        }\n        if (className) {\n            return `${this.baseIconClass} ${className}`;\n        }\n        return '';\n    }\n    getCustomButtonIconClass(customButtonProps) {\n        let className;\n        if (this.iconOverrideCustomButtonOption) {\n            className = customButtonProps[this.iconOverrideCustomButtonOption];\n            if (className) {\n                return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`;\n            }\n        }\n        return '';\n    }\n}\nTheme.prototype.classes = {};\nTheme.prototype.iconClasses = {};\nTheme.prototype.baseIconClass = '';\nTheme.prototype.iconOverridePrefix = '';\n\n/*\nNOTE: this can be a public API, especially createElement for hooks.\nSee examples/typescript-scheduler/src/index.ts\n*/\nfunction flushSync(runBeforeFlush) {\n    runBeforeFlush();\n    let oldDebounceRendering = preact__namespace.options.debounceRendering; // orig\n    let callbackQ = [];\n    function execCallbackSync(callback) {\n        callbackQ.push(callback);\n    }\n    preact__namespace.options.debounceRendering = execCallbackSync;\n    preact__namespace.render(preact__namespace.createElement(FakeComponent, {}), document.createElement('div'));\n    while (callbackQ.length) {\n        callbackQ.shift()();\n    }\n    preact__namespace.options.debounceRendering = oldDebounceRendering;\n}\nclass FakeComponent extends preact__namespace.Component {\n    render() { return preact__namespace.createElement('div', {}); }\n    componentDidMount() { this.setState({}); }\n}\n// TODO: use preact/compat instead?\nfunction createContext(defaultValue) {\n    let ContextType = preact__namespace.createContext(defaultValue);\n    let origProvider = ContextType.Provider;\n    ContextType.Provider = function () {\n        let isNew = !this.getChildContext;\n        let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        if (isNew) {\n            let subs = [];\n            this.shouldComponentUpdate = (_props) => {\n                if (this.props.value !== _props.value) {\n                    subs.forEach((c) => {\n                        c.context = _props.value;\n                        c.forceUpdate();\n                    });\n                }\n            };\n            this.sub = (c) => {\n                subs.push(c);\n                let old = c.componentWillUnmount;\n                c.componentWillUnmount = () => {\n                    subs.splice(subs.indexOf(c), 1);\n                    old && old.call(c);\n                };\n            };\n        }\n        return children;\n    };\n    return ContextType;\n}\n\nclass ScrollResponder {\n    constructor(execFunc, emitter, scrollTime, scrollTimeReset) {\n        this.execFunc = execFunc;\n        this.emitter = emitter;\n        this.scrollTime = scrollTime;\n        this.scrollTimeReset = scrollTimeReset;\n        this.handleScrollRequest = (request) => {\n            this.queuedRequest = Object.assign({}, this.queuedRequest || {}, request);\n            this.drain();\n        };\n        emitter.on('_scrollRequest', this.handleScrollRequest);\n        this.fireInitialScroll();\n    }\n    detach() {\n        this.emitter.off('_scrollRequest', this.handleScrollRequest);\n    }\n    update(isDatesNew) {\n        if (isDatesNew && this.scrollTimeReset) {\n            this.fireInitialScroll(); // will drain\n        }\n        else {\n            this.drain();\n        }\n    }\n    fireInitialScroll() {\n        this.handleScrollRequest({\n            time: this.scrollTime,\n        });\n    }\n    drain() {\n        if (this.queuedRequest && this.execFunc(this.queuedRequest)) {\n            this.queuedRequest = null;\n        }\n    }\n}\n\nconst ViewContextType = createContext({}); // for Components\nfunction buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, nowManager, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {\n    return {\n        dateEnv,\n        nowManager,\n        options: viewOptions,\n        pluginHooks,\n        emitter,\n        dispatch,\n        getCurrentData,\n        calendarApi,\n        viewSpec,\n        viewApi,\n        dateProfileGenerator,\n        theme,\n        isRtl: viewOptions.direction === 'rtl',\n        addResizeHandler(handler) {\n            emitter.on('_resize', handler);\n        },\n        removeResizeHandler(handler) {\n            emitter.off('_resize', handler);\n        },\n        createScrollResponder(execFunc) {\n            return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);\n        },\n        registerInteractiveComponent,\n        unregisterInteractiveComponent,\n    };\n}\n\n/* eslint max-classes-per-file: off */\nclass PureComponent extends preact.Component {\n    // debug: boolean\n    shouldComponentUpdate(nextProps, nextState) {\n        const shouldUpdate = !compareObjs(this.props, nextProps, this.propEquality /*, this.debug */) ||\n            !compareObjs(this.state, nextState, this.stateEquality /*, this.debug */);\n        // if (this.debug && shouldUpdate) {\n        //   console.log('shouldUpdate!')\n        // }\n        return shouldUpdate;\n    }\n    // HACK for freakin' React StrictMode\n    safeSetState(newState) {\n        if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {\n            this.setState(newState);\n        }\n    }\n}\nPureComponent.addPropsEquality = addPropsEquality;\nPureComponent.addStateEquality = addStateEquality;\nPureComponent.contextType = ViewContextType;\nPureComponent.prototype.propEquality = {};\nPureComponent.prototype.stateEquality = {};\nclass BaseComponent extends PureComponent {\n}\nBaseComponent.contextType = ViewContextType;\nfunction addPropsEquality(propEquality) {\n    let hash = Object.create(this.prototype.propEquality);\n    Object.assign(hash, propEquality);\n    this.prototype.propEquality = hash;\n}\nfunction addStateEquality(stateEquality) {\n    let hash = Object.create(this.prototype.stateEquality);\n    Object.assign(hash, stateEquality);\n    this.prototype.stateEquality = hash;\n}\n// use other one\nfunction setRef(ref, current) {\n    if (typeof ref === 'function') {\n        ref(current);\n    }\n    else if (ref) {\n        // see https://github.com/facebook/react/issues/13029\n        ref.current = current;\n    }\n}\n\nclass ContentInjector extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.id = guid();\n        this.queuedDomNodes = [];\n        this.currentDomNodes = [];\n        this.handleEl = (el) => {\n            const { options } = this.context;\n            const { generatorName } = this.props;\n            if (!options.customRenderingReplaces || !hasCustomRenderingHandler(generatorName, options)) {\n                this.updateElRef(el);\n            }\n        };\n        this.updateElRef = (el) => {\n            if (this.props.elRef) {\n                setRef(this.props.elRef, el);\n            }\n        };\n    }\n    render() {\n        const { props, context } = this;\n        const { options } = context;\n        const { customGenerator, defaultGenerator, renderProps } = props;\n        const attrs = buildElAttrs(props, [], this.handleEl);\n        let useDefault = false;\n        let innerContent;\n        let queuedDomNodes = [];\n        let currentGeneratorMeta;\n        if (customGenerator != null) {\n            const customGeneratorRes = typeof customGenerator === 'function' ?\n                customGenerator(renderProps, preact.createElement) :\n                customGenerator;\n            if (customGeneratorRes === true) {\n                useDefault = true;\n            }\n            else {\n                const isObject = customGeneratorRes && typeof customGeneratorRes === 'object'; // non-null\n                if (isObject && ('html' in customGeneratorRes)) {\n                    attrs.dangerouslySetInnerHTML = { __html: customGeneratorRes.html };\n                }\n                else if (isObject && ('domNodes' in customGeneratorRes)) {\n                    queuedDomNodes = Array.prototype.slice.call(customGeneratorRes.domNodes);\n                }\n                else if (isObject\n                    ? preact.isValidElement(customGeneratorRes) // vdom node\n                    : typeof customGeneratorRes !== 'function' // primitive value (like string or number)\n                ) {\n                    // use in vdom\n                    innerContent = customGeneratorRes;\n                }\n                else {\n                    // an exotic object for handleCustomRendering\n                    currentGeneratorMeta = customGeneratorRes;\n                }\n            }\n        }\n        else {\n            useDefault = !hasCustomRenderingHandler(props.generatorName, options);\n        }\n        if (useDefault && defaultGenerator) {\n            innerContent = defaultGenerator(renderProps);\n        }\n        this.queuedDomNodes = queuedDomNodes;\n        this.currentGeneratorMeta = currentGeneratorMeta;\n        return preact.createElement(props.elTag, attrs, innerContent);\n    }\n    componentDidMount() {\n        this.applyQueueudDomNodes();\n        this.triggerCustomRendering(true);\n    }\n    componentDidUpdate() {\n        this.applyQueueudDomNodes();\n        this.triggerCustomRendering(true);\n    }\n    componentWillUnmount() {\n        this.triggerCustomRendering(false); // TODO: different API for removal?\n    }\n    triggerCustomRendering(isActive) {\n        var _a;\n        const { props, context } = this;\n        const { handleCustomRendering, customRenderingMetaMap } = context.options;\n        if (handleCustomRendering) {\n            const generatorMeta = (_a = this.currentGeneratorMeta) !== null && _a !== void 0 ? _a : customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];\n            if (generatorMeta) {\n                handleCustomRendering(Object.assign(Object.assign({ id: this.id, isActive, containerEl: this.base, reportNewContainerEl: this.updateElRef, // front-end framework tells us about new container els\n                    generatorMeta }, props), { elClasses: (props.elClasses || []).filter(isTruthy) }));\n            }\n        }\n    }\n    applyQueueudDomNodes() {\n        const { queuedDomNodes, currentDomNodes } = this;\n        const el = this.base;\n        if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {\n            currentDomNodes.forEach(removeElement);\n            for (let newNode of queuedDomNodes) {\n                el.appendChild(newNode);\n            }\n            this.currentDomNodes = queuedDomNodes;\n        }\n    }\n}\nContentInjector.addPropsEquality({\n    elClasses: isArraysEqual,\n    elStyle: isPropsEqual,\n    elAttrs: isNonHandlerPropsEqual,\n    renderProps: isPropsEqual,\n});\n// Util\n/*\nDoes UI-framework provide custom way of rendering that does not use Preact VDOM\nAND does the calendar's options define custom rendering?\nAKA. Should we NOT render the default content?\n*/\nfunction hasCustomRenderingHandler(generatorName, options) {\n    var _a;\n    return Boolean(options.handleCustomRendering &&\n        generatorName &&\n        ((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));\n}\nfunction buildElAttrs(props, extraClassNames, elRef) {\n    const attrs = Object.assign(Object.assign({}, props.elAttrs), { ref: elRef });\n    if (props.elClasses || extraClassNames) {\n        attrs.className = (props.elClasses || [])\n            .concat(extraClassNames || [])\n            .concat(attrs.className || [])\n            .filter(Boolean)\n            .join(' ');\n    }\n    if (props.elStyle) {\n        attrs.style = props.elStyle;\n    }\n    return attrs;\n}\nfunction isTruthy(val) {\n    return Boolean(val);\n}\n\nconst RenderId = createContext(0);\n\nclass ContentContainer extends preact.Component {\n    constructor() {\n        super(...arguments);\n        this.InnerContent = InnerContentInjector.bind(undefined, this);\n        this.handleEl = (el) => {\n            this.el = el;\n            if (this.props.elRef) {\n                setRef(this.props.elRef, el);\n                if (el && this.didMountMisfire) {\n                    this.componentDidMount();\n                }\n            }\n        };\n    }\n    render() {\n        const { props } = this;\n        const generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps);\n        if (props.children) {\n            const elAttrs = buildElAttrs(props, generatedClassNames, this.handleEl);\n            const children = props.children(this.InnerContent, props.renderProps, elAttrs);\n            if (props.elTag) {\n                return preact.createElement(props.elTag, elAttrs, children);\n            }\n            else {\n                return children;\n            }\n        }\n        else {\n            return preact.createElement((ContentInjector), Object.assign(Object.assign({}, props), { elRef: this.handleEl, elTag: props.elTag || 'div', elClasses: (props.elClasses || []).concat(generatedClassNames), renderId: this.context }));\n        }\n    }\n    componentDidMount() {\n        var _a, _b;\n        if (this.el) {\n            (_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));\n        }\n        else {\n            this.didMountMisfire = true;\n        }\n    }\n    componentWillUnmount() {\n        var _a, _b;\n        (_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));\n    }\n}\nContentContainer.contextType = RenderId;\nfunction InnerContentInjector(containerComponent, props) {\n    const parentProps = containerComponent.props;\n    return preact.createElement((ContentInjector), Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, customGenerator: parentProps.customGenerator, defaultGenerator: parentProps.defaultGenerator, renderId: containerComponent.context }, props));\n}\n// Utils\nfunction generateClassNames(classNameGenerator, renderProps) {\n    const classNames = typeof classNameGenerator === 'function' ?\n        classNameGenerator(renderProps) :\n        classNameGenerator || [];\n    return typeof classNames === 'string' ? [classNames] : classNames;\n}\n\nclass ViewContainer extends BaseComponent {\n    render() {\n        let { props, context } = this;\n        let { options } = context;\n        let renderProps = { view: context.viewApi };\n        return (preact.createElement(ContentContainer, { elRef: props.elRef, elTag: props.elTag || 'div', elAttrs: props.elAttrs, elClasses: [\n                ...buildViewClassNames(props.viewSpec),\n                ...(props.elClasses || []),\n            ], elStyle: props.elStyle, renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }, () => props.children));\n    }\n}\nfunction buildViewClassNames(viewSpec) {\n    return [\n        `fc-${viewSpec.type}-view`,\n        'fc-view',\n    ];\n}\n\nfunction parseRange(input, dateEnv) {\n    let start = null;\n    let end = null;\n    if (input.start) {\n        start = dateEnv.createMarker(input.start);\n    }\n    if (input.end) {\n        end = dateEnv.createMarker(input.end);\n    }\n    if (!start && !end) {\n        return null;\n    }\n    if (start && end && end < start) {\n        return null;\n    }\n    return { start, end };\n}\n// SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\nfunction invertRanges(ranges, constraintRange) {\n    let invertedRanges = [];\n    let { start } = constraintRange; // the end of the previous range. the start of the new range\n    let i;\n    let dateRange;\n    // ranges need to be in order. required for our date-walking algorithm\n    ranges.sort(compareRanges);\n    for (i = 0; i < ranges.length; i += 1) {\n        dateRange = ranges[i];\n        // add the span of time before the event (if there is any)\n        if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)\n            invertedRanges.push({ start, end: dateRange.start });\n        }\n        if (dateRange.end > start) {\n            start = dateRange.end;\n        }\n    }\n    // add the span of time after the last event (if there is any)\n    if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)\n        invertedRanges.push({ start, end: constraintRange.end });\n    }\n    return invertedRanges;\n}\nfunction compareRanges(range0, range1) {\n    return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first\n}\nfunction intersectRanges(range0, range1) {\n    let { start, end } = range0;\n    let newRange = null;\n    if (range1.start !== null) {\n        if (start === null) {\n            start = range1.start;\n        }\n        else {\n            start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));\n        }\n    }\n    if (range1.end != null) {\n        if (end === null) {\n            end = range1.end;\n        }\n        else {\n            end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));\n        }\n    }\n    if (start === null || end === null || start < end) {\n        newRange = { start, end };\n    }\n    return newRange;\n}\nfunction rangesEqual(range0, range1) {\n    return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&\n        (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());\n}\nfunction rangesIntersect(range0, range1) {\n    return (range0.end === null || range1.start === null || range0.end > range1.start) &&\n        (range0.start === null || range1.end === null || range0.start < range1.end);\n}\nfunction rangeContainsRange(outerRange, innerRange) {\n    return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&\n        (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));\n}\nfunction rangeContainsMarker(range, date) {\n    return (range.start === null || date >= range.start) &&\n        (range.end === null || date < range.end);\n}\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\nfunction constrainMarkerToRange(date, range) {\n    if (range.start != null && date < range.start) {\n        return range.start;\n    }\n    if (range.end != null && date >= range.end) {\n        return new Date(range.end.valueOf() - 1);\n    }\n    return date;\n}\n\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\nfunction computeAlignedDayRange(timedRange) {\n    let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;\n    let start = startOfDay(timedRange.start);\n    let end = addDays(start, dayCnt);\n    return { start, end };\n}\n// given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\nfunction computeVisibleDayRange(timedRange, nextDayThreshold = createDuration(0)) {\n    let startDay = null;\n    let endDay = null;\n    if (timedRange.end) {\n        endDay = startOfDay(timedRange.end);\n        let endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`\n        // If the end time is actually inclusively part of the next day and is equal to or\n        // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n        // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n        if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n            endDay = addDays(endDay, 1);\n        }\n    }\n    if (timedRange.start) {\n        startDay = startOfDay(timedRange.start); // the beginning of the day the range starts\n        // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n        if (endDay && endDay <= startDay) {\n            endDay = addDays(startDay, 1);\n        }\n    }\n    return { start: startDay, end: endDay };\n}\n// spans from one day into another?\nfunction isMultiDayRange(range) {\n    let visibleRange = computeVisibleDayRange(range);\n    return diffDays(visibleRange.start, visibleRange.end) > 1;\n}\nfunction diffDates(date0, date1, dateEnv, largeUnit) {\n    if (largeUnit === 'year') {\n        return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');\n    }\n    if (largeUnit === 'month') {\n        return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');\n    }\n    return diffDayAndTime(date0, date1); // returns a duration\n}\n\nclass DateProfileGenerator {\n    constructor(props) {\n        this.props = props;\n        this.initHiddenDays();\n    }\n    /* Date Range Computation\n    ------------------------------------------------------------------------------------------------------------------*/\n    // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n    buildPrev(currentDateProfile, currentDate, forceToValid) {\n        let { dateEnv } = this.props;\n        let prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n        currentDateProfile.dateIncrement);\n        return this.build(prevDate, -1, forceToValid);\n    }\n    // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n    buildNext(currentDateProfile, currentDate, forceToValid) {\n        let { dateEnv } = this.props;\n        let nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n        currentDateProfile.dateIncrement);\n        return this.build(nextDate, 1, forceToValid);\n    }\n    // Builds a structure holding dates/ranges for rendering around the given date.\n    // Optional direction param indicates whether the date is being incremented/decremented\n    // from its previous value. decremented = -1, incremented = 1 (default).\n    build(currentDate, direction, forceToValid = true) {\n        let { props } = this;\n        let validRange;\n        let currentInfo;\n        let isRangeAllDay;\n        let renderRange;\n        let activeRange;\n        let isValid;\n        validRange = this.buildValidRange();\n        validRange = this.trimHiddenDays(validRange);\n        if (forceToValid) {\n            currentDate = constrainMarkerToRange(currentDate, validRange);\n        }\n        currentInfo = this.buildCurrentRangeInfo(currentDate, direction);\n        isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\n        renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);\n        renderRange = this.trimHiddenDays(renderRange);\n        activeRange = renderRange;\n        if (!props.showNonCurrentDates) {\n            activeRange = intersectRanges(activeRange, currentInfo.range);\n        }\n        activeRange = this.adjustActiveRange(activeRange);\n        activeRange = intersectRanges(activeRange, validRange); // might return null\n        // it's invalid if the originally requested date is not contained,\n        // or if the range is completely outside of the valid range.\n        isValid = rangesIntersect(currentInfo.range, validRange);\n        // HACK: constrain to render-range so `currentDate` is more useful to view rendering\n        if (!rangeContainsMarker(renderRange, currentDate)) {\n            currentDate = renderRange.start;\n        }\n        return {\n            currentDate,\n            // constraint for where prev/next operations can go and where events can be dragged/resized to.\n            // an object with optional start and end properties.\n            validRange,\n            // range the view is formally responsible for.\n            // for example, a month view might have 1st-31st, excluding padded dates\n            currentRange: currentInfo.range,\n            // name of largest unit being displayed, like \"month\" or \"week\"\n            currentRangeUnit: currentInfo.unit,\n            isRangeAllDay,\n            // dates that display events and accept drag-n-drop\n            // will be `null` if no dates accept events\n            activeRange,\n            // date range with a rendered skeleton\n            // includes not-active days that need some sort of DOM\n            renderRange,\n            // Duration object that denotes the first visible time of any given day\n            slotMinTime: props.slotMinTime,\n            // Duration object that denotes the exclusive visible end time of any given day\n            slotMaxTime: props.slotMaxTime,\n            isValid,\n            // how far the current date will move for a prev/next operation\n            dateIncrement: this.buildDateIncrement(currentInfo.duration),\n            // pass a fallback (might be null) ^\n        };\n    }\n    // Builds an object with optional start/end properties.\n    // Indicates the minimum/maximum dates to display.\n    // not responsible for trimming hidden days.\n    buildValidRange() {\n        let input = this.props.validRangeInput;\n        let simpleInput = typeof input === 'function'\n            ? input.call(this.props.calendarApi, this.props.dateEnv.toDate(this.props.nowManager.getDateMarker()))\n            : input;\n        return this.refineRange(simpleInput) ||\n            { start: null, end: null }; // completely open-ended\n    }\n    // Builds a structure with info about the \"current\" range, the range that is\n    // highlighted as being the current month for example.\n    // See build() for a description of `direction`.\n    // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n    buildCurrentRangeInfo(date, direction) {\n        let { props } = this;\n        let duration = null;\n        let unit = null;\n        let range = null;\n        let dayCount;\n        if (props.duration) {\n            duration = props.duration;\n            unit = props.durationUnit;\n            range = this.buildRangeFromDuration(date, direction, duration, unit);\n        }\n        else if ((dayCount = this.props.dayCount)) {\n            unit = 'day';\n            range = this.buildRangeFromDayCount(date, direction, dayCount);\n        }\n        else if ((range = this.buildCustomVisibleRange(date))) {\n            unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;\n        }\n        else {\n            duration = this.getFallbackDuration();\n            unit = greatestDurationDenominator(duration).unit;\n            range = this.buildRangeFromDuration(date, direction, duration, unit);\n        }\n        return { duration, unit, range };\n    }\n    getFallbackDuration() {\n        return createDuration({ day: 1 });\n    }\n    // Returns a new activeRange to have time values (un-ambiguate)\n    // slotMinTime or slotMaxTime causes the range to expand.\n    adjustActiveRange(range) {\n        let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props;\n        let { start, end } = range;\n        if (usesMinMaxTime) {\n            // expand active range if slotMinTime is negative (why not when positive?)\n            if (asRoughDays(slotMinTime) < 0) {\n                start = startOfDay(start); // necessary?\n                start = dateEnv.add(start, slotMinTime);\n            }\n            // expand active range if slotMaxTime is beyond one day (why not when negative?)\n            if (asRoughDays(slotMaxTime) > 1) {\n                end = startOfDay(end); // necessary?\n                end = addDays(end, -1);\n                end = dateEnv.add(end, slotMaxTime);\n            }\n        }\n        return { start, end };\n    }\n    // Builds the \"current\" range when it is specified as an explicit duration.\n    // `unit` is the already-computed greatestDurationDenominator unit of duration.\n    buildRangeFromDuration(date, direction, duration, unit) {\n        let { dateEnv, dateAlignment } = this.props;\n        let start;\n        let end;\n        let res;\n        // compute what the alignment should be\n        if (!dateAlignment) {\n            let { dateIncrement } = this.props;\n            if (dateIncrement) {\n                // use the smaller of the two units\n                if (asRoughMs(dateIncrement) < asRoughMs(duration)) {\n                    dateAlignment = greatestDurationDenominator(dateIncrement).unit;\n                }\n                else {\n                    dateAlignment = unit;\n                }\n            }\n            else {\n                dateAlignment = unit;\n            }\n        }\n        // if the view displays a single day or smaller\n        if (asRoughDays(duration) <= 1) {\n            if (this.isHiddenDay(start)) {\n                start = this.skipHiddenDays(start, direction);\n                start = startOfDay(start);\n            }\n        }\n        function computeRes() {\n            start = dateEnv.startOf(date, dateAlignment);\n            end = dateEnv.add(start, duration);\n            res = { start, end };\n        }\n        computeRes();\n        // if range is completely enveloped by hidden days, go past the hidden days\n        if (!this.trimHiddenDays(res)) {\n            date = this.skipHiddenDays(date, direction);\n            computeRes();\n        }\n        return res;\n    }\n    // Builds the \"current\" range when a dayCount is specified.\n    buildRangeFromDayCount(date, direction, dayCount) {\n        let { dateEnv, dateAlignment } = this.props;\n        let runningCount = 0;\n        let start = date;\n        let end;\n        if (dateAlignment) {\n            start = dateEnv.startOf(start, dateAlignment);\n        }\n        start = startOfDay(start);\n        start = this.skipHiddenDays(start, direction);\n        end = start;\n        do {\n            end = addDays(end, 1);\n            if (!this.isHiddenDay(end)) {\n                runningCount += 1;\n            }\n        } while (runningCount < dayCount);\n        return { start, end };\n    }\n    // Builds a normalized range object for the \"visible\" range,\n    // which is a way to define the currentRange and activeRange at the same time.\n    buildCustomVisibleRange(date) {\n        let { props } = this;\n        let input = props.visibleRangeInput;\n        let simpleInput = typeof input === 'function'\n            ? input.call(props.calendarApi, props.dateEnv.toDate(date))\n            : input;\n        let range = this.refineRange(simpleInput);\n        if (range && (range.start == null || range.end == null)) {\n            return null;\n        }\n        return range;\n    }\n    // Computes the range that will represent the element/cells for *rendering*,\n    // but which may have voided days/times.\n    // not responsible for trimming hidden days.\n    buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {\n        return currentRange;\n    }\n    // Compute the duration value that should be added/substracted to the current date\n    // when a prev/next operation happens.\n    buildDateIncrement(fallback) {\n        let { dateIncrement } = this.props;\n        let customAlignment;\n        if (dateIncrement) {\n            return dateIncrement;\n        }\n        if ((customAlignment = this.props.dateAlignment)) {\n            return createDuration(1, customAlignment);\n        }\n        if (fallback) {\n            return fallback;\n        }\n        return createDuration({ days: 1 });\n    }\n    refineRange(rangeInput) {\n        if (rangeInput) {\n            let range = parseRange(rangeInput, this.props.dateEnv);\n            if (range) {\n                range = computeVisibleDayRange(range);\n            }\n            return range;\n        }\n        return null;\n    }\n    /* Hidden Days\n    ------------------------------------------------------------------------------------------------------------------*/\n    // Initializes internal variables related to calculating hidden days-of-week\n    initHiddenDays() {\n        let hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden\n        let isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n        let dayCnt = 0;\n        let i;\n        if (this.props.weekends === false) {\n            hiddenDays.push(0, 6); // 0=sunday, 6=saturday\n        }\n        for (i = 0; i < 7; i += 1) {\n            if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {\n                dayCnt += 1;\n            }\n        }\n        if (!dayCnt) {\n            throw new Error('invalid hiddenDays'); // all days were hidden? bad.\n        }\n        this.isHiddenDayHash = isHiddenDayHash;\n    }\n    // Remove days from the beginning and end of the range that are computed as hidden.\n    // If the whole range is trimmed off, returns null\n    trimHiddenDays(range) {\n        let { start, end } = range;\n        if (start) {\n            start = this.skipHiddenDays(start);\n        }\n        if (end) {\n            end = this.skipHiddenDays(end, -1, true);\n        }\n        if (start == null || end == null || start < end) {\n            return { start, end };\n        }\n        return null;\n    }\n    // Is the current day hidden?\n    // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n    isHiddenDay(day) {\n        if (day instanceof Date) {\n            day = day.getUTCDay();\n        }\n        return this.isHiddenDayHash[day];\n    }\n    // Incrementing the current day until it is no longer a hidden day, returning a copy.\n    // DOES NOT CONSIDER validRange!\n    // If the initial value of `date` is not a hidden day, don't do anything.\n    // Pass `isExclusive` as `true` if you are dealing with an end date.\n    // `inc` defaults to `1` (increment one day forward each time)\n    skipHiddenDays(date, inc = 1, isExclusive = false) {\n        while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {\n            date = addDays(date, inc);\n        }\n        return date;\n    }\n}\n\nfunction createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {\n    return {\n        instanceId: guid(),\n        defId,\n        range,\n        forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n        forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,\n    };\n}\n\nfunction parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {\n    for (let i = 0; i < recurringTypes.length; i += 1) {\n        let parsed = recurringTypes[i].parse(refined, dateEnv);\n        if (parsed) {\n            let { allDay } = refined;\n            if (allDay == null) {\n                allDay = defaultAllDay;\n                if (allDay == null) {\n                    allDay = parsed.allDayGuess;\n                    if (allDay == null) {\n                        allDay = false;\n                    }\n                }\n            }\n            return {\n                allDay,\n                duration: parsed.duration,\n                typeData: parsed.typeData,\n                typeId: i,\n            };\n        }\n    }\n    return null;\n}\nfunction expandRecurring(eventStore, framingRange, context) {\n    let { dateEnv, pluginHooks, options } = context;\n    let { defs, instances } = eventStore;\n    // remove existing recurring instances\n    // TODO: bad. always expand events as a second step\n    instances = filterHash(instances, (instance) => !defs[instance.defId].recurringDef);\n    for (let defId in defs) {\n        let def = defs[defId];\n        if (def.recurringDef) {\n            let { duration } = def.recurringDef;\n            if (!duration) {\n                duration = def.allDay ?\n                    options.defaultAllDayEventDuration :\n                    options.defaultTimedEventDuration;\n            }\n            let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);\n            for (let start of starts) {\n                let instance = createEventInstance(defId, {\n                    start,\n                    end: dateEnv.add(start, duration),\n                });\n                instances[instance.instanceId] = instance;\n            }\n        }\n    }\n    return { defs, instances };\n}\n/*\nEvent MUST have a recurringDef\n*/\nfunction expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {\n    let typeDef = recurringTypes[eventDef.recurringDef.typeId];\n    let markers = typeDef.expand(eventDef.recurringDef.typeData, {\n        start: dateEnv.subtract(framingRange.start, duration),\n        end: framingRange.end,\n    }, dateEnv);\n    // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n    if (eventDef.allDay) {\n        markers = markers.map(startOfDay);\n    }\n    return markers;\n}\n\nconst EVENT_NON_DATE_REFINERS = {\n    id: String,\n    groupId: String,\n    title: String,\n    url: String,\n    interactive: Boolean,\n};\nconst EVENT_DATE_REFINERS = {\n    start: identity,\n    end: identity,\n    date: identity,\n    allDay: Boolean,\n};\nconst EVENT_REFINERS = Object.assign(Object.assign(Object.assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });\nfunction parseEvent(raw, eventSource, context, allowOpenRange, refiners = buildEventRefiners(context), defIdMap, instanceIdMap) {\n    let { refined, extra } = refineEventDef(raw, context, refiners);\n    let defaultAllDay = computeIsDefaultAllDay(eventSource, context);\n    let recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);\n    if (recurringRes) {\n        let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context, defIdMap);\n        def.recurringDef = {\n            typeId: recurringRes.typeId,\n            typeData: recurringRes.typeData,\n            duration: recurringRes.duration,\n        };\n        return { def, instance: null };\n    }\n    let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);\n    if (singleRes) {\n        let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context, defIdMap);\n        let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);\n        if (instanceIdMap && def.publicId && instanceIdMap[def.publicId]) {\n            instance.instanceId = instanceIdMap[def.publicId];\n        }\n        return { def, instance };\n    }\n    return null;\n}\nfunction refineEventDef(raw, context, refiners = buildEventRefiners(context)) {\n    return refineProps(raw, refiners);\n}\nfunction buildEventRefiners(context) {\n    return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);\n}\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\n*/\nfunction parseEventDef(refined, extra, sourceId, allDay, hasEnd, context, defIdMap) {\n    let def = {\n        title: refined.title || '',\n        groupId: refined.groupId || '',\n        publicId: refined.id || '',\n        url: refined.url || '',\n        recurringDef: null,\n        defId: ((defIdMap && refined.id) ? defIdMap[refined.id] : '') || guid(),\n        sourceId,\n        allDay,\n        hasEnd,\n        interactive: refined.interactive,\n        ui: createEventUi(refined, context),\n        extendedProps: Object.assign(Object.assign({}, (refined.extendedProps || {})), extra),\n    };\n    for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {\n        Object.assign(def, memberAdder(refined));\n    }\n    // help out EventImpl from having user modify props\n    Object.freeze(def.ui.classNames);\n    Object.freeze(def.extendedProps);\n    return def;\n}\nfunction parseSingle(refined, defaultAllDay, context, allowOpenRange) {\n    let { allDay } = refined;\n    let startMeta;\n    let startMarker = null;\n    let hasEnd = false;\n    let endMeta;\n    let endMarker = null;\n    let startInput = refined.start != null ? refined.start : refined.date;\n    startMeta = context.dateEnv.createMarkerMeta(startInput);\n    if (startMeta) {\n        startMarker = startMeta.marker;\n    }\n    else if (!allowOpenRange) {\n        return null;\n    }\n    if (refined.end != null) {\n        endMeta = context.dateEnv.createMarkerMeta(refined.end);\n    }\n    if (allDay == null) {\n        if (defaultAllDay != null) {\n            allDay = defaultAllDay;\n        }\n        else {\n            // fall back to the date props LAST\n            allDay = (!startMeta || startMeta.isTimeUnspecified) &&\n                (!endMeta || endMeta.isTimeUnspecified);\n        }\n    }\n    if (allDay && startMarker) {\n        startMarker = startOfDay(startMarker);\n    }\n    if (endMeta) {\n        endMarker = endMeta.marker;\n        if (allDay) {\n            endMarker = startOfDay(endMarker);\n        }\n        if (startMarker && endMarker <= startMarker) {\n            endMarker = null;\n        }\n    }\n    if (endMarker) {\n        hasEnd = true;\n    }\n    else if (!allowOpenRange) {\n        hasEnd = context.options.forceEventDuration || false;\n        endMarker = context.dateEnv.add(startMarker, allDay ?\n            context.options.defaultAllDayEventDuration :\n            context.options.defaultTimedEventDuration);\n    }\n    return {\n        allDay,\n        hasEnd,\n        range: { start: startMarker, end: endMarker },\n        forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n        forcedEndTzo: endMeta ? endMeta.forcedTzo : null,\n    };\n}\nfunction computeIsDefaultAllDay(eventSource, context) {\n    let res = null;\n    if (eventSource) {\n        res = eventSource.defaultAllDay;\n    }\n    if (res == null) {\n        res = context.options.defaultAllDay;\n    }\n    return res;\n}\n\nfunction parseEvents(rawEvents, eventSource, context, allowOpenRange, defIdMap, instanceIdMap) {\n    let eventStore = createEmptyEventStore();\n    let eventRefiners = buildEventRefiners(context);\n    for (let rawEvent of rawEvents) {\n        let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners, defIdMap, instanceIdMap);\n        if (tuple) {\n            eventTupleToStore(tuple, eventStore);\n        }\n    }\n    return eventStore;\n}\nfunction eventTupleToStore(tuple, eventStore = createEmptyEventStore()) {\n    eventStore.defs[tuple.def.defId] = tuple.def;\n    if (tuple.instance) {\n        eventStore.instances[tuple.instance.instanceId] = tuple.instance;\n    }\n    return eventStore;\n}\n// retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\nfunction getRelevantEvents(eventStore, instanceId) {\n    let instance = eventStore.instances[instanceId];\n    if (instance) {\n        let def = eventStore.defs[instance.defId];\n        // get events/instances with same group\n        let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef));\n        // add the original\n        // TODO: wish we could use eventTupleToStore or something like it\n        newStore.defs[def.defId] = def;\n        newStore.instances[instance.instanceId] = instance;\n        return newStore;\n    }\n    return createEmptyEventStore();\n}\nfunction isEventDefsGrouped(def0, def1) {\n    return Boolean(def0.groupId && def0.groupId === def1.groupId);\n}\nfunction createEmptyEventStore() {\n    return { defs: {}, instances: {} };\n}\nfunction mergeEventStores(store0, store1) {\n    return {\n        defs: Object.assign(Object.assign({}, store0.defs), store1.defs),\n        instances: Object.assign(Object.assign({}, store0.instances), store1.instances),\n    };\n}\nfunction filterEventStoreDefs(eventStore, filterFunc) {\n    let defs = filterHash(eventStore.defs, filterFunc);\n    let instances = filterHash(eventStore.instances, (instance) => (defs[instance.defId] // still exists?\n    ));\n    return { defs, instances };\n}\nfunction excludeSubEventStore(master, sub) {\n    let { defs, instances } = master;\n    let filteredDefs = {};\n    let filteredInstances = {};\n    for (let defId in defs) {\n        if (!sub.defs[defId]) { // not explicitly excluded\n            filteredDefs[defId] = defs[defId];\n        }\n    }\n    for (let instanceId in instances) {\n        if (!sub.instances[instanceId] && // not explicitly excluded\n            filteredDefs[instances[instanceId].defId] // def wasn't filtered away\n        ) {\n            filteredInstances[instanceId] = instances[instanceId];\n        }\n    }\n    return {\n        defs: filteredDefs,\n        instances: filteredInstances,\n    };\n}\n\nfunction normalizeConstraint(input, context) {\n    if (Array.isArray(input)) {\n        return parseEvents(input, null, context, true); // allowOpenRange=true\n    }\n    if (typeof input === 'object' && input) { // non-null object\n        return parseEvents([input], null, context, true); // allowOpenRange=true\n    }\n    if (input != null) {\n        return String(input);\n    }\n    return null;\n}\n\nfunction parseClassNames(raw) {\n    if (Array.isArray(raw)) {\n        return raw;\n    }\n    if (typeof raw === 'string') {\n        return raw.split(/\\s+/);\n    }\n    return [];\n}\n\n// TODO: better called \"EventSettings\" or \"EventConfig\"\n// TODO: move this file into structs\n// TODO: separate constraint/overlap/allow, because selection uses only that, not other props\nconst EVENT_UI_REFINERS = {\n    display: String,\n    editable: Boolean,\n    startEditable: Boolean,\n    durationEditable: Boolean,\n    constraint: identity,\n    overlap: identity,\n    allow: identity,\n    className: parseClassNames,\n    classNames: parseClassNames,\n    color: String,\n    backgroundColor: String,\n    borderColor: String,\n    textColor: String,\n};\nconst EMPTY_EVENT_UI = {\n    display: null,\n    startEditable: null,\n    durationEditable: null,\n    constraints: [],\n    overlap: null,\n    allows: [],\n    backgroundColor: '',\n    borderColor: '',\n    textColor: '',\n    classNames: [],\n};\nfunction createEventUi(refined, context) {\n    let constraint = normalizeConstraint(refined.constraint, context);\n    return {\n        display: refined.display || null,\n        startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,\n        durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,\n        constraints: constraint != null ? [constraint] : [],\n        overlap: refined.overlap != null ? refined.overlap : null,\n        allows: refined.allow != null ? [refined.allow] : [],\n        backgroundColor: refined.backgroundColor || refined.color || '',\n        borderColor: refined.borderColor || refined.color || '',\n        textColor: refined.textColor || '',\n        classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural\n    };\n}\n// TODO: prevent against problems with <2 args!\nfunction combineEventUis(uis) {\n    return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);\n}\nfunction combineTwoEventUis(item0, item1) {\n    return {\n        display: item1.display != null ? item1.display : item0.display,\n        startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n        durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n        constraints: item0.constraints.concat(item1.constraints),\n        overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n        allows: item0.allows.concat(item1.allows),\n        backgroundColor: item1.backgroundColor || item0.backgroundColor,\n        borderColor: item1.borderColor || item0.borderColor,\n        textColor: item1.textColor || item0.textColor,\n        classNames: item0.classNames.concat(item1.classNames),\n    };\n}\n\nconst EVENT_SOURCE_REFINERS = {\n    id: String,\n    defaultAllDay: Boolean,\n    url: String,\n    format: String,\n    events: identity,\n    eventDataTransform: identity,\n    // for any network-related sources\n    success: identity,\n    failure: identity,\n};\nfunction parseEventSource(raw, context, refiners = buildEventSourceRefiners(context)) {\n    let rawObj;\n    if (typeof raw === 'string') {\n        rawObj = { url: raw };\n    }\n    else if (typeof raw === 'function' || Array.isArray(raw)) {\n        rawObj = { events: raw };\n    }\n    else if (typeof raw === 'object' && raw) { // not null\n        rawObj = raw;\n    }\n    if (rawObj) {\n        let { refined, extra } = refineProps(rawObj, refiners);\n        let metaRes = buildEventSourceMeta(refined, context);\n        if (metaRes) {\n            return {\n                _raw: raw,\n                isFetching: false,\n                latestFetchId: '',\n                fetchRange: null,\n                defaultAllDay: refined.defaultAllDay,\n                eventDataTransform: refined.eventDataTransform,\n                success: refined.success,\n                failure: refined.failure,\n                publicId: refined.id || '',\n                sourceId: guid(),\n                sourceDefId: metaRes.sourceDefId,\n                meta: metaRes.meta,\n                ui: createEventUi(refined, context),\n                extendedProps: extra,\n            };\n        }\n    }\n    return null;\n}\nfunction buildEventSourceRefiners(context) {\n    return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);\n}\nfunction buildEventSourceMeta(raw, context) {\n    let defs = context.pluginHooks.eventSourceDefs;\n    for (let i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence\n        let def = defs[i];\n        let meta = def.parseMeta(raw);\n        if (meta) {\n            return { sourceDefId: i, meta };\n        }\n    }\n    return null;\n}\n\nfunction reduceEventStore(eventStore, action, eventSources, dateProfile, context) {\n    switch (action.type) {\n        case 'RECEIVE_EVENTS': // raw\n            return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);\n        case 'RESET_RAW_EVENTS':\n            return resetRawEvents(eventStore, eventSources[action.sourceId], action.rawEvents, dateProfile.activeRange, context);\n        case 'ADD_EVENTS': // already parsed, but not expanded\n            return addEvent(eventStore, action.eventStore, // new ones\n            dateProfile ? dateProfile.activeRange : null, context);\n        case 'RESET_EVENTS':\n            return action.eventStore;\n        case 'MERGE_EVENTS': // already parsed and expanded\n            return mergeEventStores(eventStore, action.eventStore);\n        case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n        case 'NEXT':\n        case 'CHANGE_DATE':\n        case 'CHANGE_VIEW_TYPE':\n            if (dateProfile) {\n                return expandRecurring(eventStore, dateProfile.activeRange, context);\n            }\n            return eventStore;\n        case 'REMOVE_EVENTS':\n            return excludeSubEventStore(eventStore, action.eventStore);\n        case 'REMOVE_EVENT_SOURCE':\n            return excludeEventsBySourceId(eventStore, action.sourceId);\n        case 'REMOVE_ALL_EVENT_SOURCES':\n            return filterEventStoreDefs(eventStore, (eventDef) => (!eventDef.sourceId // only keep events with no source id\n            ));\n        case 'REMOVE_ALL_EVENTS':\n            return createEmptyEventStore();\n        default:\n            return eventStore;\n    }\n}\nfunction receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {\n    if (eventSource && // not already removed\n        fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n    ) {\n        let subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);\n        if (fetchRange) {\n            subset = expandRecurring(subset, fetchRange, context);\n        }\n        return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);\n    }\n    return eventStore;\n}\nfunction resetRawEvents(existingEventStore, eventSource, rawEvents, activeRange, context) {\n    const { defIdMap, instanceIdMap } = buildPublicIdMaps(existingEventStore);\n    let newEventStore = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context, false, defIdMap, instanceIdMap);\n    return expandRecurring(newEventStore, activeRange, context);\n}\nfunction transformRawEvents(rawEvents, eventSource, context) {\n    let calEachTransform = context.options.eventDataTransform;\n    let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;\n    if (sourceEachTransform) {\n        rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);\n    }\n    if (calEachTransform) {\n        rawEvents = transformEachRawEvent(rawEvents, calEachTransform);\n    }\n    return rawEvents;\n}\nfunction transformEachRawEvent(rawEvents, func) {\n    let refinedEvents;\n    if (!func) {\n        refinedEvents = rawEvents;\n    }\n    else {\n        refinedEvents = [];\n        for (let rawEvent of rawEvents) {\n            let refinedEvent = func(rawEvent);\n            if (refinedEvent) {\n                refinedEvents.push(refinedEvent);\n            }\n            else if (refinedEvent == null) {\n                refinedEvents.push(rawEvent);\n            } // if a different falsy value, do nothing\n        }\n    }\n    return refinedEvents;\n}\nfunction addEvent(eventStore, subset, expandRange, context) {\n    if (expandRange) {\n        subset = expandRecurring(subset, expandRange, context);\n    }\n    return mergeEventStores(eventStore, subset);\n}\nfunction rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {\n    let { defs } = eventStore;\n    let instances = mapHash(eventStore.instances, (instance) => {\n        let def = defs[instance.defId];\n        if (def.allDay) {\n            return instance; // isn't dependent on timezone\n        }\n        return Object.assign(Object.assign({}, instance), { range: {\n                start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n                end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),\n            }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });\n    });\n    return { defs, instances };\n}\nfunction excludeEventsBySourceId(eventStore, sourceId) {\n    return filterEventStoreDefs(eventStore, (eventDef) => eventDef.sourceId !== sourceId);\n}\n// QUESTION: why not just return instances? do a general object-property-exclusion util\nfunction excludeInstances(eventStore, removals) {\n    return {\n        defs: eventStore.defs,\n        instances: filterHash(eventStore.instances, (instance) => !removals[instance.instanceId]),\n    };\n}\nfunction buildPublicIdMaps(eventStore) {\n    const { defs, instances } = eventStore;\n    const defIdMap = {};\n    const instanceIdMap = {};\n    for (let defId in defs) {\n        const def = defs[defId];\n        const { publicId } = def;\n        if (publicId) {\n            defIdMap[publicId] = defId;\n        }\n    }\n    for (let instanceId in instances) {\n        const instance = instances[instanceId];\n        const def = defs[instance.defId];\n        const { publicId } = def;\n        if (publicId) {\n            instanceIdMap[publicId] = instanceId;\n        }\n    }\n    return { defIdMap, instanceIdMap };\n}\n\nclass Emitter {\n    constructor() {\n        this.handlers = {};\n        this.thisContext = null;\n    }\n    setThisContext(thisContext) {\n        this.thisContext = thisContext;\n    }\n    setOptions(options) {\n        this.options = options;\n    }\n    on(type, handler) {\n        addToHash(this.handlers, type, handler);\n    }\n    off(type, handler) {\n        removeFromHash(this.handlers, type, handler);\n    }\n    trigger(type, ...args) {\n        let attachedHandlers = this.handlers[type] || [];\n        let optionHandler = this.options && this.options[type];\n        let handlers = [].concat(optionHandler || [], attachedHandlers);\n        for (let handler of handlers) {\n            handler.apply(this.thisContext, args);\n        }\n    }\n    hasHandlers(type) {\n        return Boolean((this.handlers[type] && this.handlers[type].length) ||\n            (this.options && this.options[type]));\n    }\n}\nfunction addToHash(hash, type, handler) {\n    (hash[type] || (hash[type] = []))\n        .push(handler);\n}\nfunction removeFromHash(hash, type, handler) {\n    if (handler) {\n        if (hash[type]) {\n            hash[type] = hash[type].filter((func) => func !== handler);\n        }\n    }\n    else {\n        delete hash[type]; // remove all handler funcs for this type\n    }\n}\n\nconst DEF_DEFAULTS = {\n    startTime: '09:00',\n    endTime: '17:00',\n    daysOfWeek: [1, 2, 3, 4, 5],\n    display: 'inverse-background',\n    classNames: 'fc-non-business',\n    groupId: '_businessHours', // so multiple defs get grouped\n};\n/*\nTODO: pass around as EventDefHash!!!\n*/\nfunction parseBusinessHours(input, context) {\n    return parseEvents(refineInputs(input), null, context);\n}\nfunction refineInputs(input) {\n    let rawDefs;\n    if (input === true) {\n        rawDefs = [{}]; // will get DEF_DEFAULTS verbatim\n    }\n    else if (Array.isArray(input)) {\n        // if specifying an array, every sub-definition NEEDS a day-of-week\n        rawDefs = input.filter((rawDef) => rawDef.daysOfWeek);\n    }\n    else if (typeof input === 'object' && input) { // non-null object\n        rawDefs = [input];\n    }\n    else { // is probably false\n        rawDefs = [];\n    }\n    rawDefs = rawDefs.map((rawDef) => (Object.assign(Object.assign({}, DEF_DEFAULTS), rawDef)));\n    return rawDefs;\n}\n\nfunction triggerDateSelect(selection, pev, context) {\n    context.emitter.trigger('select', Object.assign(Object.assign({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));\n}\nfunction triggerDateUnselect(pev, context) {\n    context.emitter.trigger('unselect', {\n        jsEvent: pev ? pev.origEvent : null,\n        view: context.viewApi || context.calendarApi.view,\n    });\n}\nfunction buildDateSpanApiWithContext(dateSpan, context) {\n    let props = {};\n    for (let transform of context.pluginHooks.dateSpanTransforms) {\n        Object.assign(props, transform(dateSpan, context));\n    }\n    Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv));\n    return props;\n}\n// Given an event's allDay status and start date, return what its fallback end date should be.\n// TODO: rename to computeDefaultEventEnd\nfunction getDefaultEventEnd(allDay, marker, context) {\n    let { dateEnv, options } = context;\n    let end = marker;\n    if (allDay) {\n        end = startOfDay(end);\n        end = dateEnv.add(end, options.defaultAllDayEventDuration);\n    }\n    else {\n        end = dateEnv.add(end, options.defaultTimedEventDuration);\n    }\n    return end;\n}\n\n// applies the mutation to ALL defs/instances within the event store\nfunction applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {\n    let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);\n    let dest = createEmptyEventStore();\n    for (let defId in eventStore.defs) {\n        let def = eventStore.defs[defId];\n        dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);\n    }\n    for (let instanceId in eventStore.instances) {\n        let instance = eventStore.instances[instanceId];\n        let def = dest.defs[instance.defId]; // important to grab the newly modified def\n        dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);\n    }\n    return dest;\n}\nfunction applyMutationToEventDef(eventDef, eventConfig, mutation, context) {\n    let standardProps = mutation.standardProps || {};\n    // if hasEnd has not been specified, guess a good value based on deltas.\n    // if duration will change, there's no way the default duration will persist,\n    // and thus, we need to mark the event as having a real end\n    if (standardProps.hasEnd == null &&\n        eventConfig.durationEditable &&\n        (mutation.startDelta || mutation.endDelta)) {\n        standardProps.hasEnd = true; // TODO: is this mutation okay?\n    }\n    let copy = Object.assign(Object.assign(Object.assign({}, eventDef), standardProps), { ui: Object.assign(Object.assign({}, eventDef.ui), standardProps.ui) });\n    if (mutation.extendedProps) {\n        copy.extendedProps = Object.assign(Object.assign({}, copy.extendedProps), mutation.extendedProps);\n    }\n    for (let applier of context.pluginHooks.eventDefMutationAppliers) {\n        applier(copy, mutation, context);\n    }\n    if (!copy.hasEnd && context.options.forceEventDuration) {\n        copy.hasEnd = true;\n    }\n    return copy;\n}\nfunction applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef\neventConfig, mutation, context) {\n    let { dateEnv } = context;\n    let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;\n    let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;\n    let copy = Object.assign({}, eventInstance);\n    if (forceAllDay) {\n        copy.range = computeAlignedDayRange(copy.range);\n    }\n    if (mutation.datesDelta && eventConfig.startEditable) {\n        copy.range = {\n            start: dateEnv.add(copy.range.start, mutation.datesDelta),\n            end: dateEnv.add(copy.range.end, mutation.datesDelta),\n        };\n    }\n    if (mutation.startDelta && eventConfig.durationEditable) {\n        copy.range = {\n            start: dateEnv.add(copy.range.start, mutation.startDelta),\n            end: copy.range.end,\n        };\n    }\n    if (mutation.endDelta && eventConfig.durationEditable) {\n        copy.range = {\n            start: copy.range.start,\n            end: dateEnv.add(copy.range.end, mutation.endDelta),\n        };\n    }\n    if (clearEnd) {\n        copy.range = {\n            start: copy.range.start,\n            end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),\n        };\n    }\n    // in case event was all-day but the supplied deltas were not\n    // better util for this?\n    if (eventDef.allDay) {\n        copy.range = {\n            start: startOfDay(copy.range.start),\n            end: startOfDay(copy.range.end),\n        };\n    }\n    // handle invalid durations\n    if (copy.range.end < copy.range.start) {\n        copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);\n    }\n    return copy;\n}\n\nclass EventSourceImpl {\n    constructor(context, internalEventSource) {\n        this.context = context;\n        this.internalEventSource = internalEventSource;\n    }\n    remove() {\n        this.context.dispatch({\n            type: 'REMOVE_EVENT_SOURCE',\n            sourceId: this.internalEventSource.sourceId,\n        });\n    }\n    refetch() {\n        this.context.dispatch({\n            type: 'FETCH_EVENT_SOURCES',\n            sourceIds: [this.internalEventSource.sourceId],\n            isRefetch: true,\n        });\n    }\n    get id() {\n        return this.internalEventSource.publicId;\n    }\n    get url() {\n        return this.internalEventSource.meta.url;\n    }\n    get format() {\n        return this.internalEventSource.meta.format; // TODO: bad. not guaranteed\n    }\n}\n\nclass EventImpl {\n    // instance will be null if expressing a recurring event that has no current instances,\n    // OR if trying to validate an incoming external event that has no dates assigned\n    constructor(context, def, instance) {\n        this._context = context;\n        this._def = def;\n        this._instance = instance || null;\n    }\n    /*\n    TODO: make event struct more responsible for this\n    */\n    setProp(name, val) {\n        if (name in EVENT_DATE_REFINERS) {\n            console.warn('Could not set date-related prop \\'name\\'. Use one of the date-related methods instead.');\n            // TODO: make proper aliasing system?\n        }\n        else if (name === 'id') {\n            val = EVENT_NON_DATE_REFINERS[name](val);\n            this.mutate({\n                standardProps: { publicId: val }, // hardcoded internal name\n            });\n        }\n        else if (name in EVENT_NON_DATE_REFINERS) {\n            val = EVENT_NON_DATE_REFINERS[name](val);\n            this.mutate({\n                standardProps: { [name]: val },\n            });\n        }\n        else if (name in EVENT_UI_REFINERS) {\n            let ui = EVENT_UI_REFINERS[name](val);\n            if (name === 'color') {\n                ui = { backgroundColor: val, borderColor: val };\n            }\n            else if (name === 'editable') {\n                ui = { startEditable: val, durationEditable: val };\n            }\n            else {\n                ui = { [name]: val };\n            }\n            this.mutate({\n                standardProps: { ui },\n            });\n        }\n        else {\n            console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`);\n        }\n    }\n    setExtendedProp(name, val) {\n        this.mutate({\n            extendedProps: { [name]: val },\n        });\n    }\n    setStart(startInput, options = {}) {\n        let { dateEnv } = this._context;\n        let start = dateEnv.createMarker(startInput);\n        if (start && this._instance) { // TODO: warning if parsed bad\n            let instanceRange = this._instance.range;\n            let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?\n            if (options.maintainDuration) {\n                this.mutate({ datesDelta: startDelta });\n            }\n            else {\n                this.mutate({ startDelta });\n            }\n        }\n    }\n    setEnd(endInput, options = {}) {\n        let { dateEnv } = this._context;\n        let end;\n        if (endInput != null) {\n            end = dateEnv.createMarker(endInput);\n            if (!end) {\n                return; // TODO: warning if parsed bad\n            }\n        }\n        if (this._instance) {\n            if (end) {\n                let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);\n                this.mutate({ endDelta });\n            }\n            else {\n                this.mutate({ standardProps: { hasEnd: false } });\n            }\n        }\n    }\n    setDates(startInput, endInput, options = {}) {\n        let { dateEnv } = this._context;\n        let standardProps = { allDay: options.allDay };\n        let start = dateEnv.createMarker(startInput);\n        let end;\n        if (!start) {\n            return; // TODO: warning if parsed bad\n        }\n        if (endInput != null) {\n            end = dateEnv.createMarker(endInput);\n            if (!end) { // TODO: warning if parsed bad\n                return;\n            }\n        }\n        if (this._instance) {\n            let instanceRange = this._instance.range;\n            // when computing the diff for an event being converted to all-day,\n            // compute diff off of the all-day values the way event-mutation does.\n            if (options.allDay === true) {\n                instanceRange = computeAlignedDayRange(instanceRange);\n            }\n            let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);\n            if (end) {\n                let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);\n                if (durationsEqual(startDelta, endDelta)) {\n                    this.mutate({ datesDelta: startDelta, standardProps });\n                }\n                else {\n                    this.mutate({ startDelta, endDelta, standardProps });\n                }\n            }\n            else { // means \"clear the end\"\n                standardProps.hasEnd = false;\n                this.mutate({ datesDelta: startDelta, standardProps });\n            }\n        }\n    }\n    moveStart(deltaInput) {\n        let delta = createDuration(deltaInput);\n        if (delta) { // TODO: warning if parsed bad\n            this.mutate({ startDelta: delta });\n        }\n    }\n    moveEnd(deltaInput) {\n        let delta = createDuration(deltaInput);\n        if (delta) { // TODO: warning if parsed bad\n            this.mutate({ endDelta: delta });\n        }\n    }\n    moveDates(deltaInput) {\n        let delta = createDuration(deltaInput);\n        if (delta) { // TODO: warning if parsed bad\n            this.mutate({ datesDelta: delta });\n        }\n    }\n    setAllDay(allDay, options = {}) {\n        let standardProps = { allDay };\n        let { maintainDuration } = options;\n        if (maintainDuration == null) {\n            maintainDuration = this._context.options.allDayMaintainDuration;\n        }\n        if (this._def.allDay !== allDay) {\n            standardProps.hasEnd = maintainDuration;\n        }\n        this.mutate({ standardProps });\n    }\n    formatRange(formatInput) {\n        let { dateEnv } = this._context;\n        let instance = this._instance;\n        let formatter = createFormatter(formatInput);\n        if (this._def.hasEnd) {\n            return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n                forcedStartTzo: instance.forcedStartTzo,\n                forcedEndTzo: instance.forcedEndTzo,\n            });\n        }\n        return dateEnv.format(instance.range.start, formatter, {\n            forcedTzo: instance.forcedStartTzo,\n        });\n    }\n    mutate(mutation) {\n        let instance = this._instance;\n        if (instance) {\n            let def = this._def;\n            let context = this._context;\n            let { eventStore } = context.getCurrentData();\n            let relevantEvents = getRelevantEvents(eventStore, instance.instanceId);\n            let eventConfigBase = {\n                '': {\n                    display: '',\n                    startEditable: true,\n                    durationEditable: true,\n                    constraints: [],\n                    overlap: null,\n                    allows: [],\n                    backgroundColor: '',\n                    borderColor: '',\n                    textColor: '',\n                    classNames: [],\n                },\n            };\n            relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context);\n            let oldEvent = new EventImpl(context, def, instance); // snapshot\n            this._def = relevantEvents.defs[def.defId];\n            this._instance = relevantEvents.instances[instance.instanceId];\n            context.dispatch({\n                type: 'MERGE_EVENTS',\n                eventStore: relevantEvents,\n            });\n            context.emitter.trigger('eventChange', {\n                oldEvent,\n                event: this,\n                relatedEvents: buildEventApis(relevantEvents, context, instance),\n                revert() {\n                    context.dispatch({\n                        type: 'RESET_EVENTS',\n                        eventStore, // the ORIGINAL store\n                    });\n                },\n            });\n        }\n    }\n    remove() {\n        let context = this._context;\n        let asStore = eventApiToStore(this);\n        context.dispatch({\n            type: 'REMOVE_EVENTS',\n            eventStore: asStore,\n        });\n        context.emitter.trigger('eventRemove', {\n            event: this,\n            relatedEvents: [],\n            revert() {\n                context.dispatch({\n                    type: 'MERGE_EVENTS',\n                    eventStore: asStore,\n                });\n            },\n        });\n    }\n    get source() {\n        let { sourceId } = this._def;\n        if (sourceId) {\n            return new EventSourceImpl(this._context, this._context.getCurrentData().eventSources[sourceId]);\n        }\n        return null;\n    }\n    get start() {\n        return this._instance ?\n            this._context.dateEnv.toDate(this._instance.range.start) :\n            null;\n    }\n    get end() {\n        return (this._instance && this._def.hasEnd) ?\n            this._context.dateEnv.toDate(this._instance.range.end) :\n            null;\n    }\n    get startStr() {\n        let instance = this._instance;\n        if (instance) {\n            return this._context.dateEnv.formatIso(instance.range.start, {\n                omitTime: this._def.allDay,\n                forcedTzo: instance.forcedStartTzo,\n            });\n        }\n        return '';\n    }\n    get endStr() {\n        let instance = this._instance;\n        if (instance && this._def.hasEnd) {\n            return this._context.dateEnv.formatIso(instance.range.end, {\n                omitTime: this._def.allDay,\n                forcedTzo: instance.forcedEndTzo,\n            });\n        }\n        return '';\n    }\n    // computable props that all access the def\n    // TODO: find a TypeScript-compatible way to do this at scale\n    get id() { return this._def.publicId; }\n    get groupId() { return this._def.groupId; }\n    get allDay() { return this._def.allDay; }\n    get title() { return this._def.title; }\n    get url() { return this._def.url; }\n    get display() { return this._def.ui.display || 'auto'; } // bad. just normalize the type earlier\n    get startEditable() { return this._def.ui.startEditable; }\n    get durationEditable() { return this._def.ui.durationEditable; }\n    get constraint() { return this._def.ui.constraints[0] || null; }\n    get overlap() { return this._def.ui.overlap; }\n    get allow() { return this._def.ui.allows[0] || null; }\n    get backgroundColor() { return this._def.ui.backgroundColor; }\n    get borderColor() { return this._def.ui.borderColor; }\n    get textColor() { return this._def.ui.textColor; }\n    // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n    get classNames() { return this._def.ui.classNames; }\n    get extendedProps() { return this._def.extendedProps; }\n    toPlainObject(settings = {}) {\n        let def = this._def;\n        let { ui } = def;\n        let { startStr, endStr } = this;\n        let res = {\n            allDay: def.allDay,\n        };\n        if (def.title) {\n            res.title = def.title;\n        }\n        if (startStr) {\n            res.start = startStr;\n        }\n        if (endStr) {\n            res.end = endStr;\n        }\n        if (def.publicId) {\n            res.id = def.publicId;\n        }\n        if (def.groupId) {\n            res.groupId = def.groupId;\n        }\n        if (def.url) {\n            res.url = def.url;\n        }\n        if (ui.display && ui.display !== 'auto') {\n            res.display = ui.display;\n        }\n        // TODO: what about recurring-event properties???\n        // TODO: include startEditable/durationEditable/constraint/overlap/allow\n        if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {\n            res.color = ui.backgroundColor;\n        }\n        else {\n            if (ui.backgroundColor) {\n                res.backgroundColor = ui.backgroundColor;\n            }\n            if (ui.borderColor) {\n                res.borderColor = ui.borderColor;\n            }\n        }\n        if (ui.textColor) {\n            res.textColor = ui.textColor;\n        }\n        if (ui.classNames.length) {\n            res.classNames = ui.classNames;\n        }\n        if (Object.keys(def.extendedProps).length) {\n            if (settings.collapseExtendedProps) {\n                Object.assign(res, def.extendedProps);\n            }\n            else {\n                res.extendedProps = def.extendedProps;\n            }\n        }\n        return res;\n    }\n    toJSON() {\n        return this.toPlainObject();\n    }\n}\nfunction eventApiToStore(eventApi) {\n    let def = eventApi._def;\n    let instance = eventApi._instance;\n    return {\n        defs: { [def.defId]: def },\n        instances: instance\n            ? { [instance.instanceId]: instance }\n            : {},\n    };\n}\nfunction buildEventApis(eventStore, context, excludeInstance) {\n    let { defs, instances } = eventStore;\n    let eventApis = [];\n    let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';\n    for (let id in instances) {\n        let instance = instances[id];\n        let def = defs[instance.defId];\n        if (instance.instanceId !== excludeInstanceId) {\n            eventApis.push(new EventImpl(context, def, instance));\n        }\n    }\n    return eventApis;\n}\n\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\nfunction sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {\n    let inverseBgByGroupId = {};\n    let inverseBgByDefId = {};\n    let defByGroupId = {};\n    let bgRanges = [];\n    let fgRanges = [];\n    let eventUis = compileEventUis(eventStore.defs, eventUiBases);\n    for (let defId in eventStore.defs) {\n        let def = eventStore.defs[defId];\n        let ui = eventUis[def.defId];\n        if (ui.display === 'inverse-background') {\n            if (def.groupId) {\n                inverseBgByGroupId[def.groupId] = [];\n                if (!defByGroupId[def.groupId]) {\n                    defByGroupId[def.groupId] = def;\n                }\n            }\n            else {\n                inverseBgByDefId[defId] = [];\n            }\n        }\n    }\n    for (let instanceId in eventStore.instances) {\n        let instance = eventStore.instances[instanceId];\n        let def = eventStore.defs[instance.defId];\n        let ui = eventUis[def.defId];\n        let origRange = instance.range;\n        let normalRange = (!def.allDay && nextDayThreshold) ?\n            computeVisibleDayRange(origRange, nextDayThreshold) :\n            origRange;\n        let slicedRange = intersectRanges(normalRange, framingRange);\n        if (slicedRange) {\n            if (ui.display === 'inverse-background') {\n                if (def.groupId) {\n                    inverseBgByGroupId[def.groupId].push(slicedRange);\n                }\n                else {\n                    inverseBgByDefId[instance.defId].push(slicedRange);\n                }\n            }\n            else if (ui.display !== 'none') {\n                (ui.display === 'background' ? bgRanges : fgRanges).push({\n                    def,\n                    ui,\n                    instance,\n                    range: slicedRange,\n                    isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n                    isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),\n                });\n            }\n        }\n    }\n    for (let groupId in inverseBgByGroupId) { // BY GROUP\n        let ranges = inverseBgByGroupId[groupId];\n        let invertedRanges = invertRanges(ranges, framingRange);\n        for (let invertedRange of invertedRanges) {\n            let def = defByGroupId[groupId];\n            let ui = eventUis[def.defId];\n            bgRanges.push({\n                def,\n                ui,\n                instance: null,\n                range: invertedRange,\n                isStart: false,\n                isEnd: false,\n            });\n        }\n    }\n    for (let defId in inverseBgByDefId) {\n        let ranges = inverseBgByDefId[defId];\n        let invertedRanges = invertRanges(ranges, framingRange);\n        for (let invertedRange of invertedRanges) {\n            bgRanges.push({\n                def: eventStore.defs[defId],\n                ui: eventUis[defId],\n                instance: null,\n                range: invertedRange,\n                isStart: false,\n                isEnd: false,\n            });\n        }\n    }\n    return { bg: bgRanges, fg: fgRanges };\n}\nfunction hasBgRendering(def) {\n    return def.ui.display === 'background' || def.ui.display === 'inverse-background';\n}\nfunction setElSeg(el, seg) {\n    el.fcSeg = seg;\n}\nfunction getElSeg(el) {\n    return el.fcSeg ||\n        el.parentNode.fcSeg || // for the harness\n        null;\n}\n// event ui computation\nfunction compileEventUis(eventDefs, eventUiBases) {\n    return mapHash(eventDefs, (eventDef) => compileEventUi(eventDef, eventUiBases));\n}\nfunction compileEventUi(eventDef, eventUiBases) {\n    let uis = [];\n    if (eventUiBases['']) {\n        uis.push(eventUiBases['']);\n    }\n    if (eventUiBases[eventDef.defId]) {\n        uis.push(eventUiBases[eventDef.defId]);\n    }\n    uis.push(eventDef.ui);\n    return combineEventUis(uis);\n}\nfunction sortEventSegs(segs, eventOrderSpecs) {\n    let objs = segs.map(buildSegCompareObj);\n    objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs));\n    return objs.map((c) => c._seg);\n}\n// returns a object with all primitive props that can be compared\nfunction buildSegCompareObj(seg) {\n    let { eventRange } = seg;\n    let eventDef = eventRange.def;\n    let range = eventRange.instance ? eventRange.instance.range : eventRange.range;\n    let start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events\n    let end = range.end ? range.end.valueOf() : 0; // \"\n    return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start,\n        end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg });\n}\nfunction computeSegDraggable(seg, context) {\n    let { pluginHooks } = context;\n    let transformers = pluginHooks.isDraggableTransformers;\n    let { def, ui } = seg.eventRange;\n    let val = ui.startEditable;\n    for (let transformer of transformers) {\n        val = transformer(val, def, ui, context);\n    }\n    return val;\n}\nfunction computeSegStartResizable(seg, context) {\n    return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;\n}\nfunction computeSegEndResizable(seg, context) {\n    return seg.isEnd && seg.eventRange.ui.durationEditable;\n}\nfunction buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true\ndefaultDisplayEventEnd, // defaults to true\nstartOverride, endOverride) {\n    let { dateEnv, options } = context;\n    let { displayEventTime, displayEventEnd } = options;\n    let eventDef = seg.eventRange.def;\n    let eventInstance = seg.eventRange.instance;\n    if (displayEventTime == null) {\n        displayEventTime = defaultDisplayEventTime !== false;\n    }\n    if (displayEventEnd == null) {\n        displayEventEnd = defaultDisplayEventEnd !== false;\n    }\n    let wholeEventStart = eventInstance.range.start;\n    let wholeEventEnd = eventInstance.range.end;\n    let segStart = startOverride || seg.start || seg.eventRange.range.start;\n    let segEnd = endOverride || seg.end || seg.eventRange.range.end;\n    let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();\n    let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();\n    if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {\n        segStart = isStartDay ? wholeEventStart : segStart;\n        segEnd = isEndDay ? wholeEventEnd : segEnd;\n        if (displayEventEnd && eventDef.hasEnd) {\n            return dateEnv.formatRange(segStart, segEnd, timeFormat, {\n                forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,\n                forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,\n            });\n        }\n        return dateEnv.format(segStart, timeFormat, {\n            forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same\n        });\n    }\n    return '';\n}\nfunction getSegMeta(seg, todayRange, nowDate) {\n    let segRange = seg.eventRange.range;\n    return {\n        isPast: segRange.end <= (nowDate || todayRange.start),\n        isFuture: segRange.start >= (nowDate || todayRange.end),\n        isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),\n    };\n}\nfunction getEventClassNames(props) {\n    let classNames = ['fc-event'];\n    if (props.isMirror) {\n        classNames.push('fc-event-mirror');\n    }\n    if (props.isDraggable) {\n        classNames.push('fc-event-draggable');\n    }\n    if (props.isStartResizable || props.isEndResizable) {\n        classNames.push('fc-event-resizable');\n    }\n    if (props.isDragging) {\n        classNames.push('fc-event-dragging');\n    }\n    if (props.isResizing) {\n        classNames.push('fc-event-resizing');\n    }\n    if (props.isSelected) {\n        classNames.push('fc-event-selected');\n    }\n    if (props.isStart) {\n        classNames.push('fc-event-start');\n    }\n    if (props.isEnd) {\n        classNames.push('fc-event-end');\n    }\n    if (props.isPast) {\n        classNames.push('fc-event-past');\n    }\n    if (props.isToday) {\n        classNames.push('fc-event-today');\n    }\n    if (props.isFuture) {\n        classNames.push('fc-event-future');\n    }\n    return classNames;\n}\nfunction buildEventRangeKey(eventRange) {\n    return eventRange.instance\n        ? eventRange.instance.instanceId\n        : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;\n    // inverse-background events don't have specific instances. TODO: better solution\n}\nfunction getSegAnchorAttrs(seg, context) {\n    let { def, instance } = seg.eventRange;\n    let { url } = def;\n    if (url) {\n        return { href: url };\n    }\n    let { emitter, options } = context;\n    let { eventInteractive } = options;\n    if (eventInteractive == null) {\n        eventInteractive = def.interactive;\n        if (eventInteractive == null) {\n            eventInteractive = Boolean(emitter.hasHandlers('eventClick'));\n        }\n    }\n    // mock what happens in EventClicking\n    if (eventInteractive) {\n        // only attach keyboard-related handlers because click handler is already done in EventClicking\n        return createAriaKeyboardAttrs((ev) => {\n            emitter.trigger('eventClick', {\n                el: ev.target,\n                event: new EventImpl(context, def, instance),\n                jsEvent: ev,\n                view: context.viewApi,\n            });\n        });\n    }\n    return {};\n}\n\nconst STANDARD_PROPS = {\n    start: identity,\n    end: identity,\n    allDay: Boolean,\n};\nfunction parseDateSpan(raw, dateEnv, defaultDuration) {\n    let span = parseOpenDateSpan(raw, dateEnv);\n    let { range } = span;\n    if (!range.start) {\n        return null;\n    }\n    if (!range.end) {\n        if (defaultDuration == null) {\n            return null;\n        }\n        range.end = dateEnv.add(range.start, defaultDuration);\n    }\n    return span;\n}\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\nfunction parseOpenDateSpan(raw, dateEnv) {\n    let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS);\n    let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;\n    let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;\n    let { allDay } = standardProps;\n    if (allDay == null) {\n        allDay = (startMeta && startMeta.isTimeUnspecified) &&\n            (!endMeta || endMeta.isTimeUnspecified);\n    }\n    return Object.assign({ range: {\n            start: startMeta ? startMeta.marker : null,\n            end: endMeta ? endMeta.marker : null,\n        }, allDay }, extra);\n}\nfunction isDateSpansEqual(span0, span1) {\n    return rangesEqual(span0.range, span1.range) &&\n        span0.allDay === span1.allDay &&\n        isSpanPropsEqual(span0, span1);\n}\n// the NON-DATE-RELATED props\nfunction isSpanPropsEqual(span0, span1) {\n    for (let propName in span1) {\n        if (propName !== 'range' && propName !== 'allDay') {\n            if (span0[propName] !== span1[propName]) {\n                return false;\n            }\n        }\n    }\n    // are there any props that span0 has that span1 DOESN'T have?\n    // both have range/allDay, so no need to special-case.\n    for (let propName in span0) {\n        if (!(propName in span1)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction buildDateSpanApi(span, dateEnv) {\n    return Object.assign(Object.assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });\n}\nfunction buildRangeApiWithTimeZone(range, dateEnv, omitTime) {\n    return Object.assign(Object.assign({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });\n}\nfunction buildRangeApi(range, dateEnv, omitTime) {\n    return {\n        start: dateEnv.toDate(range.start),\n        end: dateEnv.toDate(range.end),\n        startStr: dateEnv.formatIso(range.start, { omitTime }),\n        endStr: dateEnv.formatIso(range.end, { omitTime }),\n    };\n}\nfunction fabricateEventRange(dateSpan, eventUiBases, context) {\n    let res = refineEventDef({ editable: false }, context);\n    let def = parseEventDef(res.refined, res.extra, '', // sourceId\n    dateSpan.allDay, true, // hasEnd\n    context);\n    return {\n        def,\n        ui: compileEventUi(def, eventUiBases),\n        instance: createEventInstance(def.defId, dateSpan.range),\n        range: dateSpan.range,\n        isStart: true,\n        isEnd: true,\n    };\n}\n\n/*\ngiven a function that resolves a result asynchronously.\nthe function can either call passed-in success and failure callbacks,\nor it can return a promise.\nif you need to pass additional params to func, bind them first.\n*/\nfunction unpromisify(func, normalizedSuccessCallback, normalizedFailureCallback) {\n    // guard against success/failure callbacks being called more than once\n    // and guard against a promise AND callback being used together.\n    let isResolved = false;\n    let wrappedSuccess = function (res) {\n        if (!isResolved) {\n            isResolved = true;\n            normalizedSuccessCallback(res);\n        }\n    };\n    let wrappedFailure = function (error) {\n        if (!isResolved) {\n            isResolved = true;\n            normalizedFailureCallback(error);\n        }\n    };\n    let res = func(wrappedSuccess, wrappedFailure);\n    if (res && typeof res.then === 'function') {\n        res.then(wrappedSuccess, wrappedFailure);\n    }\n}\n\nclass JsonRequestError extends Error {\n    constructor(message, response) {\n        super(message);\n        this.response = response;\n    }\n}\nfunction requestJson(method, url, params) {\n    method = method.toUpperCase();\n    const fetchOptions = {\n        method,\n    };\n    if (method === 'GET') {\n        url += (url.indexOf('?') === -1 ? '?' : '&') +\n            new URLSearchParams(params);\n    }\n    else {\n        fetchOptions.body = new URLSearchParams(params);\n        fetchOptions.headers = {\n            'Content-Type': 'application/x-www-form-urlencoded',\n        };\n    }\n    return fetch(url, fetchOptions).then((fetchRes) => {\n        if (fetchRes.ok) {\n            return fetchRes.json().then((parsedResponse) => {\n                return [parsedResponse, fetchRes];\n            }, () => {\n                throw new JsonRequestError('Failure parsing JSON', fetchRes);\n            });\n        }\n        else {\n            throw new JsonRequestError('Request failed', fetchRes);\n        }\n    });\n}\n\nlet canVGrowWithinCell;\nfunction getCanVGrowWithinCell() {\n    if (canVGrowWithinCell == null) {\n        canVGrowWithinCell = computeCanVGrowWithinCell();\n    }\n    return canVGrowWithinCell;\n}\nfunction computeCanVGrowWithinCell() {\n    // for SSR, because this function is call immediately at top-level\n    // TODO: just make this logic execute top-level, immediately, instead of doing lazily\n    if (typeof document === 'undefined') {\n        return true;\n    }\n    let el = document.createElement('div');\n    el.style.position = 'absolute';\n    el.style.top = '0px';\n    el.style.left = '0px';\n    el.innerHTML = '<table><tr><td><div></div></td></tr></table>';\n    el.querySelector('table').style.height = '100px';\n    el.querySelector('div').style.height = '100%';\n    document.body.appendChild(el);\n    let div = el.querySelector('div');\n    let possible = div.offsetHeight > 0;\n    document.body.removeChild(el);\n    return possible;\n}\n\nclass CalendarRoot extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            forPrint: false,\n        };\n        this.handleBeforePrint = () => {\n            flushSync(() => {\n                this.setState({ forPrint: true });\n            });\n        };\n        this.handleAfterPrint = () => {\n            flushSync(() => {\n                this.setState({ forPrint: false });\n            });\n        };\n    }\n    render() {\n        let { props } = this;\n        let { options } = props;\n        let { forPrint } = this.state;\n        let isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';\n        let height = (!isHeightAuto && options.height != null) ? options.height : '';\n        let classNames = [\n            'fc',\n            forPrint ? 'fc-media-print' : 'fc-media-screen',\n            `fc-direction-${options.direction}`,\n            props.theme.getClass('root'),\n        ];\n        if (!getCanVGrowWithinCell()) {\n            classNames.push('fc-liquid-hack');\n        }\n        return props.children(classNames, height, isHeightAuto, forPrint);\n    }\n    componentDidMount() {\n        let { emitter } = this.props;\n        emitter.on('_beforeprint', this.handleBeforePrint);\n        emitter.on('_afterprint', this.handleAfterPrint);\n    }\n    componentWillUnmount() {\n        let { emitter } = this.props;\n        emitter.off('_beforeprint', this.handleBeforePrint);\n        emitter.off('_afterprint', this.handleAfterPrint);\n    }\n}\n\nclass Interaction {\n    constructor(settings) {\n        this.component = settings.component;\n        this.isHitComboAllowed = settings.isHitComboAllowed || null;\n    }\n    destroy() {\n    }\n}\nfunction parseInteractionSettings(component, input) {\n    return {\n        component,\n        el: input.el,\n        useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,\n        isHitComboAllowed: input.isHitComboAllowed || null,\n    };\n}\nfunction interactionSettingsToStore(settings) {\n    return {\n        [settings.component.uid]: settings,\n    };\n}\n// global state\nconst interactionSettingsStore = {};\n\nclass NowTimer extends preact.Component {\n    constructor(props, context) {\n        super(props, context);\n        this.handleRefresh = () => {\n            let timing = this.computeTiming();\n            if (timing.state.nowDate.valueOf() !== this.state.nowDate.valueOf()) {\n                this.setState(timing.state);\n            }\n            this.clearTimeout();\n            this.setTimeout(timing.waitMs);\n        };\n        this.handleVisibilityChange = () => {\n            if (!document.hidden) {\n                this.handleRefresh();\n            }\n        };\n        this.state = this.computeTiming().state;\n    }\n    render() {\n        let { props, state } = this;\n        return props.children(state.nowDate, state.todayRange);\n    }\n    componentDidMount() {\n        this.setTimeout();\n        this.context.nowManager.addResetListener(this.handleRefresh);\n        // fired tab becomes visible after being hidden\n        document.addEventListener('visibilitychange', this.handleVisibilityChange);\n    }\n    componentDidUpdate(prevProps) {\n        if (prevProps.unit !== this.props.unit) {\n            this.clearTimeout();\n            this.setTimeout();\n        }\n    }\n    componentWillUnmount() {\n        this.clearTimeout();\n        this.context.nowManager.removeResetListener(this.handleRefresh);\n        document.removeEventListener('visibilitychange', this.handleVisibilityChange);\n    }\n    computeTiming() {\n        let { props, context } = this;\n        let unroundedNow = context.nowManager.getDateMarker();\n        let { nowIndicatorSnap } = context.options;\n        if (nowIndicatorSnap === 'auto') {\n            nowIndicatorSnap =\n                // large unit?\n                /year|month|week|day/.test(props.unit) ||\n                    // if slotDuration 30 mins for example, would NOT appear to snap (legacy behavior)\n                    (props.unitValue || 1) === 1;\n        }\n        let nowDate;\n        let waitMs;\n        if (nowIndicatorSnap) {\n            nowDate = context.dateEnv.startOf(unroundedNow, props.unit); // aka currentUnitStart\n            let nextUnitStart = context.dateEnv.add(nowDate, createDuration(1, props.unit));\n            waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();\n        }\n        else {\n            nowDate = unroundedNow;\n            waitMs = 1000 * 60; // 1 minute\n        }\n        // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)\n        // ensure no longer than a day\n        waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);\n        return {\n            state: { nowDate, todayRange: buildDayRange(nowDate) },\n            waitMs,\n        };\n    }\n    setTimeout(waitMs = this.computeTiming().waitMs) {\n        // NOTE: timeout could take longer than expected if tab sleeps,\n        // which is why we listen to 'visibilitychange'\n        this.timeoutId = setTimeout(() => {\n            // NOTE: timeout could also return *earlier* than expected, and we need to wait 2 ms more\n            // This is why use use same waitMs from computeTiming, so we don't skip an interval while\n            // .setState() is executing\n            const timing = this.computeTiming();\n            this.setState(timing.state, () => {\n                this.setTimeout(timing.waitMs);\n            });\n        }, waitMs);\n    }\n    clearTimeout() {\n        if (this.timeoutId) {\n            clearTimeout(this.timeoutId);\n        }\n    }\n}\nNowTimer.contextType = ViewContextType;\nfunction buildDayRange(date) {\n    let start = startOfDay(date);\n    let end = addDays(start, 1);\n    return { start, end };\n}\n\nclass CalendarImpl {\n    getCurrentData() {\n        return this.currentDataManager.getCurrentData();\n    }\n    dispatch(action) {\n        this.currentDataManager.dispatch(action);\n    }\n    get view() { return this.getCurrentData().viewApi; }\n    batchRendering(callback) {\n        callback();\n    }\n    updateSize() {\n        this.trigger('_resize', true);\n    }\n    // Options\n    // -----------------------------------------------------------------------------------------------------------------\n    setOption(name, val) {\n        this.dispatch({\n            type: 'SET_OPTION',\n            optionName: name,\n            rawOptionValue: val,\n        });\n    }\n    getOption(name) {\n        return this.currentDataManager.currentCalendarOptionsInput[name];\n    }\n    getAvailableLocaleCodes() {\n        return Object.keys(this.getCurrentData().availableRawLocales);\n    }\n    // Trigger\n    // -----------------------------------------------------------------------------------------------------------------\n    on(handlerName, handler) {\n        let { currentDataManager } = this;\n        if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {\n            currentDataManager.emitter.on(handlerName, handler);\n        }\n        else {\n            console.warn(`Unknown listener name '${handlerName}'`);\n        }\n    }\n    off(handlerName, handler) {\n        this.currentDataManager.emitter.off(handlerName, handler);\n    }\n    // not meant for public use\n    trigger(handlerName, ...args) {\n        this.currentDataManager.emitter.trigger(handlerName, ...args);\n    }\n    // View\n    // -----------------------------------------------------------------------------------------------------------------\n    changeView(viewType, dateOrRange) {\n        this.batchRendering(() => {\n            this.unselect();\n            if (dateOrRange) {\n                if (dateOrRange.start && dateOrRange.end) { // a range\n                    this.dispatch({\n                        type: 'CHANGE_VIEW_TYPE',\n                        viewType,\n                    });\n                    this.dispatch({\n                        type: 'SET_OPTION',\n                        optionName: 'visibleRange',\n                        rawOptionValue: dateOrRange,\n                    });\n                }\n                else {\n                    let { dateEnv } = this.getCurrentData();\n                    this.dispatch({\n                        type: 'CHANGE_VIEW_TYPE',\n                        viewType,\n                        dateMarker: dateEnv.createMarker(dateOrRange),\n                    });\n                }\n            }\n            else {\n                this.dispatch({\n                    type: 'CHANGE_VIEW_TYPE',\n                    viewType,\n                });\n            }\n        });\n    }\n    // Forces navigation to a view for the given date.\n    // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n    // needs to change\n    zoomTo(dateMarker, viewType) {\n        let state = this.getCurrentData();\n        let spec;\n        viewType = viewType || 'day'; // day is default zoom\n        spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);\n        this.unselect();\n        if (spec) {\n            this.dispatch({\n                type: 'CHANGE_VIEW_TYPE',\n                viewType: spec.type,\n                dateMarker,\n            });\n        }\n        else {\n            this.dispatch({\n                type: 'CHANGE_DATE',\n                dateMarker,\n            });\n        }\n    }\n    // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n    // Preference is given to views that have corresponding buttons.\n    getUnitViewSpec(unit) {\n        let { viewSpecs, toolbarConfig } = this.getCurrentData();\n        let viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);\n        let i;\n        let spec;\n        for (let viewType in viewSpecs) {\n            viewTypes.push(viewType);\n        }\n        for (i = 0; i < viewTypes.length; i += 1) {\n            spec = viewSpecs[viewTypes[i]];\n            if (spec) {\n                if (spec.singleUnit === unit) {\n                    return spec;\n                }\n            }\n        }\n        return null;\n    }\n    // Current Date\n    // -----------------------------------------------------------------------------------------------------------------\n    prev() {\n        this.unselect();\n        this.dispatch({ type: 'PREV' });\n    }\n    next() {\n        this.unselect();\n        this.dispatch({ type: 'NEXT' });\n    }\n    prevYear() {\n        let state = this.getCurrentData();\n        this.unselect();\n        this.dispatch({\n            type: 'CHANGE_DATE',\n            dateMarker: state.dateEnv.addYears(state.currentDate, -1),\n        });\n    }\n    nextYear() {\n        let state = this.getCurrentData();\n        this.unselect();\n        this.dispatch({\n            type: 'CHANGE_DATE',\n            dateMarker: state.dateEnv.addYears(state.currentDate, 1),\n        });\n    }\n    today() {\n        let state = this.getCurrentData();\n        this.unselect();\n        this.dispatch({\n            type: 'CHANGE_DATE',\n            dateMarker: state.nowManager.getDateMarker(),\n        });\n    }\n    gotoDate(zonedDateInput) {\n        let state = this.getCurrentData();\n        this.unselect();\n        this.dispatch({\n            type: 'CHANGE_DATE',\n            dateMarker: state.dateEnv.createMarker(zonedDateInput),\n        });\n    }\n    incrementDate(deltaInput) {\n        let state = this.getCurrentData();\n        let delta = createDuration(deltaInput);\n        if (delta) { // else, warn about invalid input?\n            this.unselect();\n            this.dispatch({\n                type: 'CHANGE_DATE',\n                dateMarker: state.dateEnv.add(state.currentDate, delta),\n            });\n        }\n    }\n    getDate() {\n        let state = this.getCurrentData();\n        return state.dateEnv.toDate(state.currentDate);\n    }\n    // Date Formatting Utils\n    // -----------------------------------------------------------------------------------------------------------------\n    formatDate(d, formatter) {\n        let { dateEnv } = this.getCurrentData();\n        return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));\n    }\n    // `settings` is for formatter AND isEndExclusive\n    formatRange(d0, d1, settings) {\n        let { dateEnv } = this.getCurrentData();\n        return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);\n    }\n    formatIso(d, omitTime) {\n        let { dateEnv } = this.getCurrentData();\n        return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime });\n    }\n    // Date Selection / Event Selection / DayClick\n    // -----------------------------------------------------------------------------------------------------------------\n    select(dateOrObj, endDate) {\n        let selectionInput;\n        if (endDate == null) {\n            if (dateOrObj.start != null) {\n                selectionInput = dateOrObj;\n            }\n            else {\n                selectionInput = {\n                    start: dateOrObj,\n                    end: null,\n                };\n            }\n        }\n        else {\n            selectionInput = {\n                start: dateOrObj,\n                end: endDate,\n            };\n        }\n        let state = this.getCurrentData();\n        let selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }));\n        if (selection) { // throw parse error otherwise?\n            this.dispatch({ type: 'SELECT_DATES', selection });\n            triggerDateSelect(selection, null, state);\n        }\n    }\n    unselect(pev) {\n        let state = this.getCurrentData();\n        if (state.dateSelection) {\n            this.dispatch({ type: 'UNSELECT_DATES' });\n            triggerDateUnselect(pev, state);\n        }\n    }\n    // Public Events API\n    // -----------------------------------------------------------------------------------------------------------------\n    addEvent(eventInput, sourceInput) {\n        if (eventInput instanceof EventImpl) {\n            let def = eventInput._def;\n            let instance = eventInput._instance;\n            let currentData = this.getCurrentData();\n            // not already present? don't want to add an old snapshot\n            if (!currentData.eventStore.defs[def.defId]) {\n                this.dispatch({\n                    type: 'ADD_EVENTS',\n                    eventStore: eventTupleToStore({ def, instance }), // TODO: better util for two args?\n                });\n                this.triggerEventAdd(eventInput);\n            }\n            return eventInput;\n        }\n        let state = this.getCurrentData();\n        let eventSource;\n        if (sourceInput instanceof EventSourceImpl) {\n            eventSource = sourceInput.internalEventSource;\n        }\n        else if (typeof sourceInput === 'boolean') {\n            if (sourceInput) { // true. part of the first event source\n                [eventSource] = hashValuesToArray(state.eventSources);\n            }\n        }\n        else if (sourceInput != null) { // an ID. accepts a number too\n            let sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function\n            if (!sourceApi) {\n                console.warn(`Could not find an event source with ID \"${sourceInput}\"`); // TODO: test\n                return null;\n            }\n            eventSource = sourceApi.internalEventSource;\n        }\n        let tuple = parseEvent(eventInput, eventSource, state, false);\n        if (tuple) {\n            let newEventApi = new EventImpl(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);\n            this.dispatch({\n                type: 'ADD_EVENTS',\n                eventStore: eventTupleToStore(tuple),\n            });\n            this.triggerEventAdd(newEventApi);\n            return newEventApi;\n        }\n        return null;\n    }\n    triggerEventAdd(eventApi) {\n        let { emitter } = this.getCurrentData();\n        emitter.trigger('eventAdd', {\n            event: eventApi,\n            relatedEvents: [],\n            revert: () => {\n                this.dispatch({\n                    type: 'REMOVE_EVENTS',\n                    eventStore: eventApiToStore(eventApi),\n                });\n            },\n        });\n    }\n    // TODO: optimize\n    getEventById(id) {\n        let state = this.getCurrentData();\n        let { defs, instances } = state.eventStore;\n        id = String(id);\n        for (let defId in defs) {\n            let def = defs[defId];\n            if (def.publicId === id) {\n                if (def.recurringDef) {\n                    return new EventImpl(state, def, null);\n                }\n                for (let instanceId in instances) {\n                    let instance = instances[instanceId];\n                    if (instance.defId === def.defId) {\n                        return new EventImpl(state, def, instance);\n                    }\n                }\n            }\n        }\n        return null;\n    }\n    getEvents() {\n        let currentData = this.getCurrentData();\n        return buildEventApis(currentData.eventStore, currentData);\n    }\n    removeAllEvents() {\n        this.dispatch({ type: 'REMOVE_ALL_EVENTS' });\n    }\n    // Public Event Sources API\n    // -----------------------------------------------------------------------------------------------------------------\n    getEventSources() {\n        let state = this.getCurrentData();\n        let sourceHash = state.eventSources;\n        let sourceApis = [];\n        for (let internalId in sourceHash) {\n            sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]));\n        }\n        return sourceApis;\n    }\n    getEventSourceById(id) {\n        let state = this.getCurrentData();\n        let sourceHash = state.eventSources;\n        id = String(id);\n        for (let sourceId in sourceHash) {\n            if (sourceHash[sourceId].publicId === id) {\n                return new EventSourceImpl(state, sourceHash[sourceId]);\n            }\n        }\n        return null;\n    }\n    addEventSource(sourceInput) {\n        let state = this.getCurrentData();\n        if (sourceInput instanceof EventSourceImpl) {\n            // not already present? don't want to add an old snapshot\n            if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {\n                this.dispatch({\n                    type: 'ADD_EVENT_SOURCES',\n                    sources: [sourceInput.internalEventSource],\n                });\n            }\n            return sourceInput;\n        }\n        let eventSource = parseEventSource(sourceInput, state);\n        if (eventSource) { // TODO: error otherwise?\n            this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });\n            return new EventSourceImpl(state, eventSource);\n        }\n        return null;\n    }\n    removeAllEventSources() {\n        this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });\n    }\n    refetchEvents() {\n        this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });\n    }\n    // Scroll\n    // -----------------------------------------------------------------------------------------------------------------\n    scrollToTime(timeInput) {\n        let time = createDuration(timeInput);\n        if (time) {\n            this.trigger('_scrollRequest', { time });\n        }\n    }\n}\n\nfunction pointInsideRect(point, rect) {\n    return point.left >= rect.left &&\n        point.left < rect.right &&\n        point.top >= rect.top &&\n        point.top < rect.bottom;\n}\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nfunction intersectRects(rect1, rect2) {\n    let res = {\n        left: Math.max(rect1.left, rect2.left),\n        right: Math.min(rect1.right, rect2.right),\n        top: Math.max(rect1.top, rect2.top),\n        bottom: Math.min(rect1.bottom, rect2.bottom),\n    };\n    if (res.left < res.right && res.top < res.bottom) {\n        return res;\n    }\n    return false;\n}\nfunction translateRect(rect, deltaX, deltaY) {\n    return {\n        left: rect.left + deltaX,\n        right: rect.right + deltaX,\n        top: rect.top + deltaY,\n        bottom: rect.bottom + deltaY,\n    };\n}\n// Returns a new point that will have been moved to reside within the given rectangle\nfunction constrainPoint(point, rect) {\n    return {\n        left: Math.min(Math.max(point.left, rect.left), rect.right),\n        top: Math.min(Math.max(point.top, rect.top), rect.bottom),\n    };\n}\n// Returns a point that is the center of the given rectangle\nfunction getRectCenter(rect) {\n    return {\n        left: (rect.left + rect.right) / 2,\n        top: (rect.top + rect.bottom) / 2,\n    };\n}\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nfunction diffPoints(point1, point2) {\n    return {\n        left: point1.left - point2.left,\n        top: point1.top - point2.top,\n    };\n}\n\nconst EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere\nclass Splitter {\n    constructor() {\n        this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);\n        this.splitDateSelection = memoize(this._splitDateSpan);\n        this.splitEventStore = memoize(this._splitEventStore);\n        this.splitIndividualUi = memoize(this._splitIndividualUi);\n        this.splitEventDrag = memoize(this._splitInteraction);\n        this.splitEventResize = memoize(this._splitInteraction);\n        this.eventUiBuilders = {}; // TODO: typescript protection\n    }\n    splitProps(props) {\n        let keyInfos = this.getKeyInfo(props);\n        let defKeys = this.getKeysForEventDefs(props.eventStore);\n        let dateSelections = this.splitDateSelection(props.dateSelection);\n        let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*\n        let eventStores = this.splitEventStore(props.eventStore, defKeys);\n        let eventDrags = this.splitEventDrag(props.eventDrag);\n        let eventResizes = this.splitEventResize(props.eventResize);\n        let splitProps = {};\n        this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey));\n        for (let key in keyInfos) {\n            let keyInfo = keyInfos[key];\n            let eventStore = eventStores[key] || EMPTY_EVENT_STORE;\n            let buildEventUi = this.eventUiBuilders[key];\n            splitProps[key] = {\n                businessHours: keyInfo.businessHours || props.businessHours,\n                dateSelection: dateSelections[key] || null,\n                eventStore,\n                eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n                eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n                eventDrag: eventDrags[key] || null,\n                eventResize: eventResizes[key] || null,\n            };\n        }\n        return splitProps;\n    }\n    _splitDateSpan(dateSpan) {\n        let dateSpans = {};\n        if (dateSpan) {\n            let keys = this.getKeysForDateSpan(dateSpan);\n            for (let key of keys) {\n                dateSpans[key] = dateSpan;\n            }\n        }\n        return dateSpans;\n    }\n    _getKeysForEventDefs(eventStore) {\n        return mapHash(eventStore.defs, (eventDef) => this.getKeysForEventDef(eventDef));\n    }\n    _splitEventStore(eventStore, defKeys) {\n        let { defs, instances } = eventStore;\n        let splitStores = {};\n        for (let defId in defs) {\n            for (let key of defKeys[defId]) {\n                if (!splitStores[key]) {\n                    splitStores[key] = createEmptyEventStore();\n                }\n                splitStores[key].defs[defId] = defs[defId];\n            }\n        }\n        for (let instanceId in instances) {\n            let instance = instances[instanceId];\n            for (let key of defKeys[instance.defId]) {\n                if (splitStores[key]) { // must have already been created\n                    splitStores[key].instances[instanceId] = instance;\n                }\n            }\n        }\n        return splitStores;\n    }\n    _splitIndividualUi(eventUiBases, defKeys) {\n        let splitHashes = {};\n        for (let defId in eventUiBases) {\n            if (defId) { // not the '' key\n                for (let key of defKeys[defId]) {\n                    if (!splitHashes[key]) {\n                        splitHashes[key] = {};\n                    }\n                    splitHashes[key][defId] = eventUiBases[defId];\n                }\n            }\n        }\n        return splitHashes;\n    }\n    _splitInteraction(interaction) {\n        let splitStates = {};\n        if (interaction) {\n            let affectedStores = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents));\n            // can't rely on defKeys because event data is mutated\n            let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);\n            let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);\n            let populate = (key) => {\n                if (!splitStates[key]) {\n                    splitStates[key] = {\n                        affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,\n                        mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,\n                        isEvent: interaction.isEvent,\n                    };\n                }\n            };\n            for (let key in affectedStores) {\n                populate(key);\n            }\n            for (let key in mutatedStores) {\n                populate(key);\n            }\n        }\n        return splitStates;\n    }\n}\nfunction buildEventUiForKey(allUi, eventUiForKey, individualUi) {\n    let baseParts = [];\n    if (allUi) {\n        baseParts.push(allUi);\n    }\n    if (eventUiForKey) {\n        baseParts.push(eventUiForKey);\n    }\n    let stuff = {\n        '': combineEventUis(baseParts),\n    };\n    if (individualUi) {\n        Object.assign(stuff, individualUi);\n    }\n    return stuff;\n}\n\nfunction getDateMeta(date, todayRange, nowDate, dateProfile) {\n    return {\n        dow: date.getUTCDay(),\n        isDisabled: Boolean(dateProfile && (!dateProfile.activeRange || !rangeContainsMarker(dateProfile.activeRange, date))),\n        isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),\n        isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),\n        isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),\n        isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),\n    };\n}\nfunction getDayClassNames(meta, theme) {\n    let classNames = [\n        'fc-day',\n        `fc-day-${DAY_IDS[meta.dow]}`,\n    ];\n    if (meta.isDisabled) {\n        classNames.push('fc-day-disabled');\n    }\n    else {\n        if (meta.isToday) {\n            classNames.push('fc-day-today');\n            classNames.push(theme.getClass('today'));\n        }\n        if (meta.isPast) {\n            classNames.push('fc-day-past');\n        }\n        if (meta.isFuture) {\n            classNames.push('fc-day-future');\n        }\n        if (meta.isOther) {\n            classNames.push('fc-day-other');\n        }\n    }\n    return classNames;\n}\nfunction getSlotClassNames(meta, theme) {\n    let classNames = [\n        'fc-slot',\n        `fc-slot-${DAY_IDS[meta.dow]}`,\n    ];\n    if (meta.isDisabled) {\n        classNames.push('fc-slot-disabled');\n    }\n    else {\n        if (meta.isToday) {\n            classNames.push('fc-slot-today');\n            classNames.push(theme.getClass('today'));\n        }\n        if (meta.isPast) {\n            classNames.push('fc-slot-past');\n        }\n        if (meta.isFuture) {\n            classNames.push('fc-slot-future');\n        }\n    }\n    return classNames;\n}\n\nconst DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });\nconst WEEK_FORMAT = createFormatter({ week: 'long' });\nfunction buildNavLinkAttrs(context, dateMarker, viewType = 'day', isTabbable = true) {\n    const { dateEnv, options, calendarApi } = context;\n    let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);\n    if (options.navLinks) {\n        let zonedDate = dateEnv.toDate(dateMarker);\n        const handleInteraction = (ev) => {\n            let customAction = viewType === 'day' ? options.navLinkDayClick :\n                viewType === 'week' ? options.navLinkWeekClick : null;\n            if (typeof customAction === 'function') {\n                customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);\n            }\n            else {\n                if (typeof customAction === 'string') {\n                    viewType = customAction;\n                }\n                calendarApi.zoomTo(dateMarker, viewType);\n            }\n        };\n        return Object.assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable\n            ? createAriaClickAttrs(handleInteraction)\n            : { onClick: handleInteraction }));\n    }\n    return { 'aria-label': dateStr };\n}\n\nlet _isRtlScrollbarOnLeft = null;\nfunction getIsRtlScrollbarOnLeft() {\n    if (_isRtlScrollbarOnLeft === null) {\n        _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();\n    }\n    return _isRtlScrollbarOnLeft;\n}\nfunction computeIsRtlScrollbarOnLeft() {\n    let outerEl = document.createElement('div');\n    applyStyle(outerEl, {\n        position: 'absolute',\n        top: -1000,\n        left: 0,\n        border: 0,\n        padding: 0,\n        overflow: 'scroll',\n        direction: 'rtl',\n    });\n    outerEl.innerHTML = '<div></div>';\n    document.body.appendChild(outerEl);\n    let innerEl = outerEl.firstChild;\n    let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;\n    removeElement(outerEl);\n    return res;\n}\n\nlet _scrollbarWidths;\nfunction getScrollbarWidths() {\n    if (!_scrollbarWidths) {\n        _scrollbarWidths = computeScrollbarWidths();\n    }\n    return _scrollbarWidths;\n}\nfunction computeScrollbarWidths() {\n    let el = document.createElement('div');\n    el.style.overflow = 'scroll';\n    el.style.position = 'absolute';\n    el.style.top = '-9999px';\n    el.style.left = '-9999px';\n    document.body.appendChild(el);\n    let res = computeScrollbarWidthsForEl(el);\n    document.body.removeChild(el);\n    return res;\n}\n// WARNING: will include border\nfunction computeScrollbarWidthsForEl(el) {\n    return {\n        x: el.offsetHeight - el.clientHeight,\n        y: el.offsetWidth - el.clientWidth,\n    };\n}\n\nfunction computeEdges(el, getPadding = false) {\n    let computedStyle = window.getComputedStyle(el);\n    let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;\n    let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;\n    let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;\n    let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;\n    let badScrollbarWidths = computeScrollbarWidthsForEl(el); // includes border!\n    let scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight;\n    let scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom;\n    let res = {\n        borderLeft,\n        borderRight,\n        borderTop,\n        borderBottom,\n        scrollbarBottom,\n        scrollbarLeft: 0,\n        scrollbarRight: 0,\n    };\n    if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?\n        res.scrollbarLeft = scrollbarLeftRight;\n    }\n    else {\n        res.scrollbarRight = scrollbarLeftRight;\n    }\n    if (getPadding) {\n        res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;\n        res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;\n        res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;\n        res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;\n    }\n    return res;\n}\nfunction computeInnerRect(el, goWithinPadding = false, doFromWindowViewport) {\n    let outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el);\n    let edges = computeEdges(el, goWithinPadding);\n    let res = {\n        left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n        right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n        top: outerRect.top + edges.borderTop,\n        bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom,\n    };\n    if (goWithinPadding) {\n        res.left += edges.paddingLeft;\n        res.right -= edges.paddingRight;\n        res.top += edges.paddingTop;\n        res.bottom -= edges.paddingBottom;\n    }\n    return res;\n}\nfunction computeRect(el) {\n    let rect = el.getBoundingClientRect();\n    return {\n        left: rect.left + window.scrollX,\n        top: rect.top + window.scrollY,\n        right: rect.right + window.scrollX,\n        bottom: rect.bottom + window.scrollY,\n    };\n}\nfunction computeClippedClientRect(el) {\n    let clippingParents = getClippingParents(el);\n    let rect = el.getBoundingClientRect();\n    for (let clippingParent of clippingParents) {\n        let intersection = intersectRects(rect, clippingParent.getBoundingClientRect());\n        if (intersection) {\n            rect = intersection;\n        }\n        else {\n            return null;\n        }\n    }\n    return rect;\n}\n// does not return window\nfunction getClippingParents(el) {\n    let parents = [];\n    while (el instanceof HTMLElement) { // will stop when gets to document or null\n        let computedStyle = window.getComputedStyle(el);\n        if (computedStyle.position === 'fixed') {\n            break;\n        }\n        if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n            parents.push(el);\n        }\n        el = el.parentNode;\n    }\n    return parents;\n}\n\n/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\nclass PositionCache {\n    constructor(originEl, els, isHorizontal, isVertical) {\n        this.els = els;\n        let originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left\n        if (isHorizontal) {\n            this.buildElHorizontals(originClientRect.left);\n        }\n        if (isVertical) {\n            this.buildElVerticals(originClientRect.top);\n        }\n    }\n    // Populates the left/right internal coordinate arrays\n    buildElHorizontals(originClientLeft) {\n        let lefts = [];\n        let rights = [];\n        for (let el of this.els) {\n            let rect = el.getBoundingClientRect();\n            lefts.push(rect.left - originClientLeft);\n            rights.push(rect.right - originClientLeft);\n        }\n        this.lefts = lefts;\n        this.rights = rights;\n    }\n    // Populates the top/bottom internal coordinate arrays\n    buildElVerticals(originClientTop) {\n        let tops = [];\n        let bottoms = [];\n        for (let el of this.els) {\n            let rect = el.getBoundingClientRect();\n            tops.push(rect.top - originClientTop);\n            bottoms.push(rect.bottom - originClientTop);\n        }\n        this.tops = tops;\n        this.bottoms = bottoms;\n    }\n    // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n    // If no intersection is made, returns undefined.\n    leftToIndex(leftPosition) {\n        let { lefts, rights } = this;\n        let len = lefts.length;\n        let i;\n        for (i = 0; i < len; i += 1) {\n            if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n                return i;\n            }\n        }\n        return undefined; // TODO: better\n    }\n    // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n    // If no intersection is made, returns undefined.\n    topToIndex(topPosition) {\n        let { tops, bottoms } = this;\n        let len = tops.length;\n        let i;\n        for (i = 0; i < len; i += 1) {\n            if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n                return i;\n            }\n        }\n        return undefined; // TODO: better\n    }\n    // Gets the width of the element at the given index\n    getWidth(leftIndex) {\n        return this.rights[leftIndex] - this.lefts[leftIndex];\n    }\n    // Gets the height of the element at the given index\n    getHeight(topIndex) {\n        return this.bottoms[topIndex] - this.tops[topIndex];\n    }\n    similarTo(otherCache) {\n        return similarNumArrays(this.tops || [], otherCache.tops || []) &&\n            similarNumArrays(this.bottoms || [], otherCache.bottoms || []) &&\n            similarNumArrays(this.lefts || [], otherCache.lefts || []) &&\n            similarNumArrays(this.rights || [], otherCache.rights || []);\n    }\n}\nfunction similarNumArrays(a, b) {\n    const len = a.length;\n    if (len !== b.length) {\n        return false;\n    }\n    for (let i = 0; i < len; i++) {\n        if (Math.round(a[i]) !== Math.round(b[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\n/* eslint max-classes-per-file: \"off\" */\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\nclass ScrollController {\n    getMaxScrollTop() {\n        return this.getScrollHeight() - this.getClientHeight();\n    }\n    getMaxScrollLeft() {\n        return this.getScrollWidth() - this.getClientWidth();\n    }\n    canScrollVertically() {\n        return this.getMaxScrollTop() > 0;\n    }\n    canScrollHorizontally() {\n        return this.getMaxScrollLeft() > 0;\n    }\n    canScrollUp() {\n        return this.getScrollTop() > 0;\n    }\n    canScrollDown() {\n        return this.getScrollTop() < this.getMaxScrollTop();\n    }\n    canScrollLeft() {\n        return this.getScrollLeft() > 0;\n    }\n    canScrollRight() {\n        return this.getScrollLeft() < this.getMaxScrollLeft();\n    }\n}\nclass ElementScrollController extends ScrollController {\n    constructor(el) {\n        super();\n        this.el = el;\n    }\n    getScrollTop() {\n        return this.el.scrollTop;\n    }\n    getScrollLeft() {\n        return this.el.scrollLeft;\n    }\n    setScrollTop(top) {\n        this.el.scrollTop = top;\n    }\n    setScrollLeft(left) {\n        this.el.scrollLeft = left;\n    }\n    getScrollWidth() {\n        return this.el.scrollWidth;\n    }\n    getScrollHeight() {\n        return this.el.scrollHeight;\n    }\n    getClientHeight() {\n        return this.el.clientHeight;\n    }\n    getClientWidth() {\n        return this.el.clientWidth;\n    }\n}\nclass WindowScrollController extends ScrollController {\n    getScrollTop() {\n        return window.scrollY;\n    }\n    getScrollLeft() {\n        return window.scrollX;\n    }\n    setScrollTop(n) {\n        window.scroll(window.scrollX, n);\n    }\n    setScrollLeft(n) {\n        window.scroll(n, window.scrollY);\n    }\n    getScrollWidth() {\n        return document.documentElement.scrollWidth;\n    }\n    getScrollHeight() {\n        return document.documentElement.scrollHeight;\n    }\n    getClientHeight() {\n        return document.documentElement.clientHeight;\n    }\n    getClientWidth() {\n        return document.documentElement.clientWidth;\n    }\n}\n\n/*\nan INTERACTABLE date component\n\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\nclass DateComponent extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.uid = guid();\n    }\n    // Hit System\n    // -----------------------------------------------------------------------------------------------------------------\n    prepareHits() {\n    }\n    queryHit(positionLeft, positionTop, elWidth, elHeight) {\n        return null; // this should be abstract\n    }\n    // Pointer Interaction Utils\n    // -----------------------------------------------------------------------------------------------------------------\n    isValidSegDownEl(el) {\n        return !this.props.eventDrag && // HACK\n            !this.props.eventResize && // HACK\n            !elementClosest(el, '.fc-event-mirror');\n    }\n    isValidDateDownEl(el) {\n        return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&\n            !elementClosest(el, '.fc-more-link') && // a \"more..\" link\n            !elementClosest(el, 'a[data-navlink]') && // a clickable nav link\n            !elementClosest(el, '.fc-popover'); // hack\n    }\n}\n\nclass NamedTimeZoneImpl {\n    constructor(timeZoneName) {\n        this.timeZoneName = timeZoneName;\n    }\n}\n\nclass SegHierarchy {\n    constructor(getEntryThickness = (entry) => {\n        // if no thickness known, assume 1 (if 0, so small it always fits)\n        return entry.thickness || 1;\n    }) {\n        this.getEntryThickness = getEntryThickness;\n        // settings\n        this.strictOrder = false;\n        this.allowReslicing = false;\n        this.maxCoord = -1; // -1 means no max\n        this.maxStackCnt = -1; // -1 means no max\n        this.levelCoords = []; // ordered\n        this.entriesByLevel = []; // parallel with levelCoords\n        this.stackCnts = {}; // TODO: use better technique!?\n    }\n    addSegs(inputs) {\n        let hiddenEntries = [];\n        for (let input of inputs) {\n            this.insertEntry(input, hiddenEntries);\n        }\n        return hiddenEntries;\n    }\n    insertEntry(entry, hiddenEntries) {\n        let insertion = this.findInsertion(entry);\n        if (this.isInsertionValid(insertion, entry)) {\n            this.insertEntryAt(entry, insertion);\n        }\n        else {\n            this.handleInvalidInsertion(insertion, entry, hiddenEntries);\n        }\n    }\n    isInsertionValid(insertion, entry) {\n        return (this.maxCoord === -1 || insertion.levelCoord + this.getEntryThickness(entry) <= this.maxCoord) &&\n            (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);\n    }\n    handleInvalidInsertion(insertion, entry, hiddenEntries) {\n        if (this.allowReslicing && insertion.touchingEntry) {\n            const hiddenEntry = Object.assign(Object.assign({}, entry), { span: intersectSpans(entry.span, insertion.touchingEntry.span) });\n            hiddenEntries.push(hiddenEntry);\n            this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);\n        }\n        else {\n            hiddenEntries.push(entry);\n        }\n    }\n    /*\n    Does NOT add what hit the `barrier` into hiddenEntries. Should already be done.\n    */\n    splitEntry(entry, barrier, hiddenEntries) {\n        let entrySpan = entry.span;\n        let barrierSpan = barrier.span;\n        if (entrySpan.start < barrierSpan.start) {\n            this.insertEntry({\n                index: entry.index,\n                thickness: entry.thickness,\n                span: { start: entrySpan.start, end: barrierSpan.start },\n            }, hiddenEntries);\n        }\n        if (entrySpan.end > barrierSpan.end) {\n            this.insertEntry({\n                index: entry.index,\n                thickness: entry.thickness,\n                span: { start: barrierSpan.end, end: entrySpan.end },\n            }, hiddenEntries);\n        }\n    }\n    insertEntryAt(entry, insertion) {\n        let { entriesByLevel, levelCoords } = this;\n        if (insertion.lateral === -1) {\n            // create a new level\n            insertAt(levelCoords, insertion.level, insertion.levelCoord);\n            insertAt(entriesByLevel, insertion.level, [entry]);\n        }\n        else {\n            // insert into existing level\n            insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);\n        }\n        this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;\n    }\n    /*\n    does not care about limits\n    */\n    findInsertion(newEntry) {\n        let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this;\n        let levelCnt = levelCoords.length;\n        let candidateCoord = 0;\n        let touchingLevel = -1;\n        let touchingLateral = -1;\n        let touchingEntry = null;\n        let stackCnt = 0;\n        for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {\n            const trackingCoord = levelCoords[trackingLevel];\n            // if the current level is past the placed entry, we have found a good empty space and can stop.\n            // if strictOrder, keep finding more lateral intersections.\n            if (!strictOrder && trackingCoord >= candidateCoord + this.getEntryThickness(newEntry)) {\n                break;\n            }\n            let trackingEntries = entriesByLevel[trackingLevel];\n            let trackingEntry;\n            let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end\n            let lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one\n            while ( // loop through entries that horizontally intersect\n            (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list\n                trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry\n            ) {\n                let trackingEntryBottom = trackingCoord + this.getEntryThickness(trackingEntry);\n                // intersects into the top of the candidate?\n                if (trackingEntryBottom > candidateCoord) {\n                    candidateCoord = trackingEntryBottom;\n                    touchingEntry = trackingEntry;\n                    touchingLevel = trackingLevel;\n                    touchingLateral = lateralIndex;\n                }\n                // butts up against top of candidate? (will happen if just intersected as well)\n                if (trackingEntryBottom === candidateCoord) {\n                    // accumulate the highest possible stackCnt of the trackingEntries that butt up\n                    stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);\n                }\n                lateralIndex += 1;\n            }\n        }\n        // the destination level will be after touchingEntry's level. find it\n        let destLevel = 0;\n        if (touchingEntry) {\n            destLevel = touchingLevel + 1;\n            while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {\n                destLevel += 1;\n            }\n        }\n        // if adding to an existing level, find where to insert\n        let destLateral = -1;\n        if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {\n            destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];\n        }\n        return {\n            touchingLevel,\n            touchingLateral,\n            touchingEntry,\n            stackCnt,\n            levelCoord: candidateCoord,\n            level: destLevel,\n            lateral: destLateral,\n        };\n    }\n    // sorted by levelCoord (lowest to highest)\n    toRects() {\n        let { entriesByLevel, levelCoords } = this;\n        let levelCnt = entriesByLevel.length;\n        let rects = [];\n        for (let level = 0; level < levelCnt; level += 1) {\n            let entries = entriesByLevel[level];\n            let levelCoord = levelCoords[level];\n            for (let entry of entries) {\n                rects.push(Object.assign(Object.assign({}, entry), { thickness: this.getEntryThickness(entry), levelCoord }));\n            }\n        }\n        return rects;\n    }\n}\nfunction getEntrySpanEnd(entry) {\n    return entry.span.end;\n}\nfunction buildEntryKey(entry) {\n    return entry.index + ':' + entry.span.start;\n}\n// returns groups with entries sorted by input order\nfunction groupIntersectingEntries(entries) {\n    let merges = [];\n    for (let entry of entries) {\n        let filteredMerges = [];\n        let hungryMerge = {\n            span: entry.span,\n            entries: [entry],\n        };\n        for (let merge of merges) {\n            if (intersectSpans(merge.span, hungryMerge.span)) {\n                hungryMerge = {\n                    entries: merge.entries.concat(hungryMerge.entries),\n                    span: joinSpans(merge.span, hungryMerge.span),\n                };\n            }\n            else {\n                filteredMerges.push(merge);\n            }\n        }\n        filteredMerges.push(hungryMerge);\n        merges = filteredMerges;\n    }\n    return merges;\n}\nfunction joinSpans(span0, span1) {\n    return {\n        start: Math.min(span0.start, span1.start),\n        end: Math.max(span0.end, span1.end),\n    };\n}\nfunction intersectSpans(span0, span1) {\n    let start = Math.max(span0.start, span1.start);\n    let end = Math.min(span0.end, span1.end);\n    if (start < end) {\n        return { start, end };\n    }\n    return null;\n}\n// general util\n// ---------------------------------------------------------------------------------------------------------------------\nfunction insertAt(arr, index, item) {\n    arr.splice(index, 0, item);\n}\nfunction binarySearch(a, searchVal, getItemVal) {\n    let startIndex = 0;\n    let endIndex = a.length; // exclusive\n    if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item\n        return [0, 0];\n    }\n    if (searchVal > getItemVal(a[endIndex - 1])) { // after last item\n        return [endIndex, 0];\n    }\n    while (startIndex < endIndex) {\n        let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);\n        let middleVal = getItemVal(a[middleIndex]);\n        if (searchVal < middleVal) {\n            endIndex = middleIndex;\n        }\n        else if (searchVal > middleVal) {\n            startIndex = middleIndex + 1;\n        }\n        else { // equal!\n            return [middleIndex, 1];\n        }\n    }\n    return [startIndex, 0];\n}\n\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\nclass ElementDragging {\n    constructor(el, selector) {\n        this.emitter = new Emitter();\n    }\n    destroy() {\n    }\n    setMirrorIsVisible(bool) {\n        // optional if subclass doesn't want to support a mirror\n    }\n    setMirrorNeedsRevert(bool) {\n        // optional if subclass doesn't want to support a mirror\n    }\n    setAutoScrollEnabled(bool) {\n        // optional\n    }\n}\n\n// TODO: get rid of this in favor of options system,\n// tho it's really easy to access this globally rather than pass thru options.\nconst config = {};\n\n/*\nInformation about what will happen when an external element is dragged-and-dropped\nonto a calendar. Contains information for creating an event.\n*/\nconst DRAG_META_REFINERS = {\n    startTime: createDuration,\n    duration: createDuration,\n    create: Boolean,\n    sourceId: String,\n};\nfunction parseDragMeta(raw) {\n    let { refined, extra } = refineProps(raw, DRAG_META_REFINERS);\n    return {\n        startTime: refined.startTime || null,\n        duration: refined.duration || null,\n        create: refined.create != null ? refined.create : true,\n        sourceId: refined.sourceId,\n        leftoverProps: extra,\n    };\n}\n\n// Computes a default column header formatting string if `colFormat` is not explicitly defined\nfunction computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {\n    // if more than one week row, or if there are a lot of columns with not much space,\n    // put just the day numbers will be in each cell\n    if (!datesRepDistinctDays || dayCnt > 10) {\n        return createFormatter({ weekday: 'short' }); // \"Sat\"\n    }\n    if (dayCnt > 1) {\n        return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }); // \"Sat 11/12\"\n    }\n    return createFormatter({ weekday: 'long' }); // \"Saturday\"\n}\n\nconst CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no\nfunction renderInner$1(renderProps) {\n    return renderProps.text;\n}\n\n// BAD name for this class now. used in the Header\nclass TableDateCell extends BaseComponent {\n    render() {\n        let { dateEnv, options, theme, viewApi } = this.context;\n        let { props } = this;\n        let { date, dateProfile } = props;\n        let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);\n        let classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));\n        let text = dateEnv.format(date, props.dayHeaderFormat);\n        // if colCnt is 1, we are already in a day-view and don't need a navlink\n        let navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)\n            ? buildNavLinkAttrs(this.context, date)\n            : {};\n        let publicDate = dateEnv.toDate(date);\n        // workaround for Luxon (and maybe moment) returning prior-days when start-of-day\n        // in DST gap: https://github.com/fullcalendar/fullcalendar/issues/7633\n        if (dateEnv.namedTimeZoneImpl) {\n            publicDate = addMs(publicDate, 3600000); // add an hour\n        }\n        let renderProps = Object.assign(Object.assign(Object.assign({ date: publicDate, view: viewApi }, props.extraRenderProps), { text }), dayMeta);\n        return (preact.createElement(ContentContainer, { elTag: \"th\", elClasses: classNames, elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan, 'data-date': !dayMeta.isDisabled ? formatDayString(date) : undefined }, props.extraDataAttrs), renderProps: renderProps, generatorName: \"dayHeaderContent\", customGenerator: options.dayHeaderContent, defaultGenerator: renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContainer) => (preact.createElement(\"div\", { className: \"fc-scrollgrid-sync-inner\" }, !dayMeta.isDisabled && (preact.createElement(InnerContainer, { elTag: \"a\", elAttrs: navLinkAttrs, elClasses: [\n                'fc-col-header-cell-cushion',\n                props.isSticky && 'fc-sticky',\n            ] }))))));\n    }\n}\n\nconst WEEKDAY_FORMAT = createFormatter({ weekday: 'long' });\nclass TableDowCell extends BaseComponent {\n    render() {\n        let { props } = this;\n        let { dateEnv, theme, viewApi, options } = this.context;\n        let date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT\n        let dateMeta = {\n            dow: props.dow,\n            isDisabled: false,\n            isFuture: false,\n            isPast: false,\n            isToday: false,\n            isOther: false,\n        };\n        let text = dateEnv.format(date, props.dayHeaderFormat);\n        let renderProps = Object.assign(Object.assign(Object.assign(Object.assign({ // TODO: make this public?\n            date }, dateMeta), { view: viewApi }), props.extraRenderProps), { text });\n        return (preact.createElement(ContentContainer, { elTag: \"th\", elClasses: [\n                CLASS_NAME,\n                ...getDayClassNames(dateMeta, theme),\n                ...(props.extraClassNames || []),\n            ], elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan }, props.extraDataAttrs), renderProps: renderProps, generatorName: \"dayHeaderContent\", customGenerator: options.dayHeaderContent, defaultGenerator: renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => (preact.createElement(\"div\", { className: \"fc-scrollgrid-sync-inner\" },\n            preact.createElement(InnerContent, { elTag: \"a\", elClasses: [\n                    'fc-col-header-cell-cushion',\n                    props.isSticky && 'fc-sticky',\n                ], elAttrs: {\n                    'aria-label': dateEnv.format(date, WEEKDAY_FORMAT),\n                } })))));\n    }\n}\n\nclass DayHeader extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);\n    }\n    render() {\n        let { context } = this;\n        let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props;\n        let dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);\n        return (preact.createElement(NowTimer, { unit: \"day\" }, (nowDate, todayRange) => (preact.createElement(\"tr\", { role: \"row\" },\n            renderIntro && renderIntro('day'),\n            dates.map((date) => (datesRepDistinctDays ? (preact.createElement(TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat })) : (preact.createElement(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat }))))))));\n    }\n}\nfunction createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {\n    return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);\n}\n\nclass DaySeriesModel {\n    constructor(range, dateProfileGenerator) {\n        let date = range.start;\n        let { end } = range;\n        let indices = [];\n        let dates = [];\n        let dayIndex = -1;\n        while (date < end) { // loop each day from start to end\n            if (dateProfileGenerator.isHiddenDay(date)) {\n                indices.push(dayIndex + 0.5); // mark that it's between indices\n            }\n            else {\n                dayIndex += 1;\n                indices.push(dayIndex);\n                dates.push(date);\n            }\n            date = addDays(date, 1);\n        }\n        this.dates = dates;\n        this.indices = indices;\n        this.cnt = dates.length;\n    }\n    sliceRange(range) {\n        let firstIndex = this.getDateDayIndex(range.start); // inclusive first index\n        let lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index\n        let clippedFirstIndex = Math.max(0, firstIndex);\n        let clippedLastIndex = Math.min(this.cnt - 1, lastIndex);\n        // deal with in-between indices\n        clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell\n        clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell\n        if (clippedFirstIndex <= clippedLastIndex) {\n            return {\n                firstIndex: clippedFirstIndex,\n                lastIndex: clippedLastIndex,\n                isStart: firstIndex === clippedFirstIndex,\n                isEnd: lastIndex === clippedLastIndex,\n            };\n        }\n        return null;\n    }\n    // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n    // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n    // If before the first offset, returns a negative number.\n    // If after the last offset, returns an offset past the last cell offset.\n    // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n    getDateDayIndex(date) {\n        let { indices } = this;\n        let dayOffset = Math.floor(diffDays(this.dates[0], date));\n        if (dayOffset < 0) {\n            return indices[0] - 1;\n        }\n        if (dayOffset >= indices.length) {\n            return indices[indices.length - 1] + 1;\n        }\n        return indices[dayOffset];\n    }\n}\n\nclass DayTableModel {\n    constructor(daySeries, breakOnWeeks) {\n        let { dates } = daySeries;\n        let daysPerRow;\n        let firstDay;\n        let rowCnt;\n        if (breakOnWeeks) {\n            // count columns until the day-of-week repeats\n            firstDay = dates[0].getUTCDay();\n            for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {\n                if (dates[daysPerRow].getUTCDay() === firstDay) {\n                    break;\n                }\n            }\n            rowCnt = Math.ceil(dates.length / daysPerRow);\n        }\n        else {\n            rowCnt = 1;\n            daysPerRow = dates.length;\n        }\n        this.rowCnt = rowCnt;\n        this.colCnt = daysPerRow;\n        this.daySeries = daySeries;\n        this.cells = this.buildCells();\n        this.headerDates = this.buildHeaderDates();\n    }\n    buildCells() {\n        let rows = [];\n        for (let row = 0; row < this.rowCnt; row += 1) {\n            let cells = [];\n            for (let col = 0; col < this.colCnt; col += 1) {\n                cells.push(this.buildCell(row, col));\n            }\n            rows.push(cells);\n        }\n        return rows;\n    }\n    buildCell(row, col) {\n        let date = this.daySeries.dates[row * this.colCnt + col];\n        return {\n            key: date.toISOString(),\n            date,\n        };\n    }\n    buildHeaderDates() {\n        let dates = [];\n        for (let col = 0; col < this.colCnt; col += 1) {\n            dates.push(this.cells[0][col].date);\n        }\n        return dates;\n    }\n    sliceRange(range) {\n        let { colCnt } = this;\n        let seriesSeg = this.daySeries.sliceRange(range);\n        let segs = [];\n        if (seriesSeg) {\n            let { firstIndex, lastIndex } = seriesSeg;\n            let index = firstIndex;\n            while (index <= lastIndex) {\n                let row = Math.floor(index / colCnt);\n                let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);\n                segs.push({\n                    row,\n                    firstCol: index % colCnt,\n                    lastCol: (nextIndex - 1) % colCnt,\n                    isStart: seriesSeg.isStart && index === firstIndex,\n                    isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,\n                });\n                index = nextIndex;\n            }\n        }\n        return segs;\n    }\n}\n\nclass Slicer {\n    constructor() {\n        this.sliceBusinessHours = memoize(this._sliceBusinessHours);\n        this.sliceDateSelection = memoize(this._sliceDateSpan);\n        this.sliceEventStore = memoize(this._sliceEventStore);\n        this.sliceEventDrag = memoize(this._sliceInteraction);\n        this.sliceEventResize = memoize(this._sliceInteraction);\n        this.forceDayIfListItem = false; // hack\n    }\n    sliceProps(props, dateProfile, nextDayThreshold, context, ...extraArgs) {\n        let { eventUiBases } = props;\n        let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs);\n        return {\n            dateSelectionSegs: this.sliceDateSelection(props.dateSelection, dateProfile, nextDayThreshold, eventUiBases, context, ...extraArgs),\n            businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),\n            fgEventSegs: eventSegs.fg,\n            bgEventSegs: eventSegs.bg,\n            eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n            eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n            eventSelection: props.eventSelection,\n        }; // TODO: give interactionSegs?\n    }\n    sliceNowDate(// does not memoize\n    date, dateProfile, nextDayThreshold, context, ...extraArgs) {\n        return this._sliceDateSpan({ range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range\n        dateProfile, nextDayThreshold, {}, context, ...extraArgs);\n    }\n    _sliceBusinessHours(businessHours, dateProfile, nextDayThreshold, context, ...extraArgs) {\n        if (!businessHours) {\n            return [];\n        }\n        return this._sliceEventStore(expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context), {}, dateProfile, nextDayThreshold, ...extraArgs).bg;\n    }\n    _sliceEventStore(eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {\n        if (eventStore) {\n            let rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n            return {\n                bg: this.sliceEventRanges(rangeRes.bg, extraArgs),\n                fg: this.sliceEventRanges(rangeRes.fg, extraArgs),\n            };\n        }\n        return { bg: [], fg: [] };\n    }\n    _sliceInteraction(interaction, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {\n        if (!interaction) {\n            return null;\n        }\n        let rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n        return {\n            segs: this.sliceEventRanges(rangeRes.fg, extraArgs),\n            affectedInstances: interaction.affectedEvents.instances,\n            isEvent: interaction.isEvent,\n        };\n    }\n    _sliceDateSpan(dateSpan, dateProfile, nextDayThreshold, eventUiBases, context, ...extraArgs) {\n        if (!dateSpan) {\n            return [];\n        }\n        let activeRange = computeActiveRange(dateProfile, Boolean(nextDayThreshold));\n        let activeDateSpanRange = intersectRanges(dateSpan.range, activeRange);\n        if (activeDateSpanRange) {\n            dateSpan = Object.assign(Object.assign({}, dateSpan), { range: activeDateSpanRange });\n            let eventRange = fabricateEventRange(dateSpan, eventUiBases, context);\n            let segs = this.sliceRange(dateSpan.range, ...extraArgs);\n            for (let seg of segs) {\n                seg.eventRange = eventRange;\n            }\n            return segs;\n        }\n        return [];\n    }\n    /*\n    \"complete\" seg means it has component and eventRange\n    */\n    sliceEventRanges(eventRanges, extraArgs) {\n        let segs = [];\n        for (let eventRange of eventRanges) {\n            segs.push(...this.sliceEventRange(eventRange, extraArgs));\n        }\n        return segs;\n    }\n    /*\n    \"complete\" seg means it has component and eventRange\n    */\n    sliceEventRange(eventRange, extraArgs) {\n        let dateRange = eventRange.range;\n        // hack to make multi-day events that are being force-displayed as list-items to take up only one day\n        if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {\n            dateRange = {\n                start: dateRange.start,\n                end: addDays(dateRange.start, 1),\n            };\n        }\n        let segs = this.sliceRange(dateRange, ...extraArgs);\n        for (let seg of segs) {\n            seg.eventRange = eventRange;\n            seg.isStart = eventRange.isStart && seg.isStart;\n            seg.isEnd = eventRange.isEnd && seg.isEnd;\n        }\n        return segs;\n    }\n}\n/*\nfor incorporating slotMinTime/slotMaxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\nfunction computeActiveRange(dateProfile, isComponentAllDay) {\n    let range = dateProfile.activeRange;\n    if (isComponentAllDay) {\n        return range;\n    }\n    return {\n        start: addMs(range.start, dateProfile.slotMinTime.milliseconds),\n        end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day\n    };\n}\n\n// high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isInteractionValid(interaction, dateProfile, context) {\n    let { instances } = interaction.mutatedEvents;\n    for (let instanceId in instances) {\n        if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n            return false;\n        }\n    }\n    return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions\n}\nfunction isDateSelectionValid(dateSelection, dateProfile, context) {\n    if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {\n        return false;\n    }\n    return isNewPropsValid({ dateSelection }, context);\n}\nfunction isNewPropsValid(newProps, context) {\n    let calendarState = context.getCurrentData();\n    let props = Object.assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);\n    return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);\n}\nfunction isPropsValid(state, context, dateSpanMeta = {}, filterConfig) {\n    if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n        return false;\n    }\n    if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n        return false;\n    }\n    return true;\n}\n// Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {\n    let currentState = context.getCurrentData();\n    let interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions\n    let subjectEventStore = interaction.mutatedEvents;\n    let subjectDefs = subjectEventStore.defs;\n    let subjectInstances = subjectEventStore.instances;\n    let subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?\n        state.eventUiBases :\n        { '': currentState.selectionConfig });\n    if (filterConfig) {\n        subjectConfigs = mapHash(subjectConfigs, filterConfig);\n    }\n    // exclude the subject events. TODO: exclude defs too?\n    let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);\n    let otherDefs = otherEventStore.defs;\n    let otherInstances = otherEventStore.instances;\n    let otherConfigs = compileEventUis(otherDefs, state.eventUiBases);\n    for (let subjectInstanceId in subjectInstances) {\n        let subjectInstance = subjectInstances[subjectInstanceId];\n        let subjectRange = subjectInstance.range;\n        let subjectConfig = subjectConfigs[subjectInstance.defId];\n        let subjectDef = subjectDefs[subjectInstance.defId];\n        // constraint\n        if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {\n            return false;\n        }\n        // overlap\n        let { eventOverlap } = context.options;\n        let eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;\n        for (let otherInstanceId in otherInstances) {\n            let otherInstance = otherInstances[otherInstanceId];\n            // intersect! evaluate\n            if (rangesIntersect(subjectRange, otherInstance.range)) {\n                let otherOverlap = otherConfigs[otherInstance.defId].overlap;\n                // consider the other event's overlap. only do this if the subject event is a \"real\" event\n                if (otherOverlap === false && interaction.isEvent) {\n                    return false;\n                }\n                if (subjectConfig.overlap === false) {\n                    return false;\n                }\n                if (eventOverlapFunc && !eventOverlapFunc(new EventImpl(context, otherDefs[otherInstance.defId], otherInstance), // still event\n                new EventImpl(context, subjectDef, subjectInstance))) {\n                    return false;\n                }\n            }\n        }\n        // allow (a function)\n        let calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state\n        for (let subjectAllow of subjectConfig.allows) {\n            let subjectDateSpan = Object.assign(Object.assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });\n            let origDef = calendarEventStore.defs[subjectDef.defId];\n            let origInstance = calendarEventStore.instances[subjectInstanceId];\n            let eventApi;\n            if (origDef) { // was previously in the calendar\n                eventApi = new EventImpl(context, origDef, origInstance);\n            }\n            else { // was an external event\n                eventApi = new EventImpl(context, subjectDef); // no instance, because had no dates\n            }\n            if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n// Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {\n    let relevantEventStore = state.eventStore;\n    let relevantDefs = relevantEventStore.defs;\n    let relevantInstances = relevantEventStore.instances;\n    let selection = state.dateSelection;\n    let selectionRange = selection.range;\n    let { selectionConfig } = context.getCurrentData();\n    if (filterConfig) {\n        selectionConfig = filterConfig(selectionConfig);\n    }\n    // constraint\n    if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {\n        return false;\n    }\n    // overlap\n    let { selectOverlap } = context.options;\n    let selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;\n    for (let relevantInstanceId in relevantInstances) {\n        let relevantInstance = relevantInstances[relevantInstanceId];\n        // intersect! evaluate\n        if (rangesIntersect(selectionRange, relevantInstance.range)) {\n            if (selectionConfig.overlap === false) {\n                return false;\n            }\n            if (selectOverlapFunc && !selectOverlapFunc(new EventImpl(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {\n                return false;\n            }\n        }\n    }\n    // allow (a function)\n    for (let selectionAllow of selectionConfig.allows) {\n        let fullDateSpan = Object.assign(Object.assign({}, dateSpanMeta), selection);\n        if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {\n            return false;\n        }\n    }\n    return true;\n}\n// Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\nfunction allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {\n    for (let constraint of constraints) {\n        if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours\notherEventStore, // for if constraint is an even group ID\nbusinessHoursUnexpanded, // for if constraint is 'businessHours'\ncontext) {\n    if (constraint === 'businessHours') {\n        return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));\n    }\n    if (typeof constraint === 'string') { // an group ID\n        return eventStoreToRanges(filterEventStoreDefs(otherEventStore, (eventDef) => eventDef.groupId === constraint));\n    }\n    if (typeof constraint === 'object' && constraint) { // non-null object\n        return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));\n    }\n    return []; // if it's false\n}\n// TODO: move to event-store file?\nfunction eventStoreToRanges(eventStore) {\n    let { instances } = eventStore;\n    let ranges = [];\n    for (let instanceId in instances) {\n        ranges.push(instances[instanceId].range);\n    }\n    return ranges;\n}\n// TODO: move to geom file?\nfunction anyRangesContainRange(outerRanges, innerRange) {\n    for (let outerRange of outerRanges) {\n        if (rangeContainsRange(outerRange, innerRange)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nconst VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;\nclass Scroller extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.handleEl = (el) => {\n            this.el = el;\n            setRef(this.props.elRef, el);\n        };\n    }\n    render() {\n        let { props } = this;\n        let { liquid, liquidIsAbsolute } = props;\n        let isAbsolute = liquid && liquidIsAbsolute;\n        let className = ['fc-scroller'];\n        if (liquid) {\n            if (liquidIsAbsolute) {\n                className.push('fc-scroller-liquid-absolute');\n            }\n            else {\n                className.push('fc-scroller-liquid');\n            }\n        }\n        return (preact.createElement(\"div\", { ref: this.handleEl, className: className.join(' '), style: {\n                overflowX: props.overflowX,\n                overflowY: props.overflowY,\n                left: (isAbsolute && -(props.overcomeLeft || 0)) || '',\n                right: (isAbsolute && -(props.overcomeRight || 0)) || '',\n                bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',\n                marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',\n                marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',\n                marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',\n                maxHeight: props.maxHeight || '',\n            } }, props.children));\n    }\n    needsXScrolling() {\n        if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n            return false;\n        }\n        // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.\n        // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n        // inner-child margins and absolute positioning\n        let { el } = this;\n        let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();\n        let { children } = el;\n        for (let i = 0; i < children.length; i += 1) {\n            let childEl = children[i];\n            if (childEl.getBoundingClientRect().width > realClientWidth) {\n                return true;\n            }\n        }\n        return false;\n    }\n    needsYScrolling() {\n        if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n            return false;\n        }\n        // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.\n        // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n        // inner-child margins and absolute positioning\n        let { el } = this;\n        let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();\n        let { children } = el;\n        for (let i = 0; i < children.length; i += 1) {\n            let childEl = children[i];\n            if (childEl.getBoundingClientRect().height > realClientHeight) {\n                return true;\n            }\n        }\n        return false;\n    }\n    getXScrollbarWidth() {\n        if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n            return 0;\n        }\n        return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?\n    }\n    getYScrollbarWidth() {\n        if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n            return 0;\n        }\n        return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?\n    }\n}\n\n/*\nTODO: somehow infer OtherArgs from masterCallback?\nTODO: infer RefType from masterCallback if provided\n*/\nclass RefMap {\n    constructor(masterCallback) {\n        this.masterCallback = masterCallback;\n        this.currentMap = {};\n        this.depths = {};\n        this.callbackMap = {};\n        this.handleValue = (val, key) => {\n            let { depths, currentMap } = this;\n            let removed = false;\n            let added = false;\n            if (val !== null) {\n                // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore\n                removed = (key in currentMap);\n                currentMap[key] = val;\n                depths[key] = (depths[key] || 0) + 1;\n                added = true;\n            }\n            else {\n                depths[key] -= 1;\n                if (!depths[key]) {\n                    delete currentMap[key];\n                    delete this.callbackMap[key];\n                    removed = true;\n                }\n            }\n            if (this.masterCallback) {\n                if (removed) {\n                    this.masterCallback(null, String(key));\n                }\n                if (added) {\n                    this.masterCallback(val, String(key));\n                }\n            }\n        };\n    }\n    createRef(key) {\n        let refCallback = this.callbackMap[key];\n        if (!refCallback) {\n            refCallback = this.callbackMap[key] = (val) => {\n                this.handleValue(val, String(key));\n            };\n        }\n        return refCallback;\n    }\n    // TODO: check callers that don't care about order. should use getAll instead\n    // NOTE: this method has become less valuable now that we are encouraged to map order by some other index\n    // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and \"collect\"\n    collect(startIndex, endIndex, step) {\n        return collectFromHash(this.currentMap, startIndex, endIndex, step);\n    }\n    getAll() {\n        return hashValuesToArray(this.currentMap);\n    }\n}\n\nfunction computeShrinkWidth(chunkEls) {\n    let shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');\n    let largestWidth = 0;\n    for (let shrinkCell of shrinkCells) {\n        largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));\n    }\n    return Math.ceil(largestWidth); // <table> elements work best with integers. round up to ensure contents fits\n}\nfunction getSectionHasLiquidHeight(props, sectionConfig) {\n    return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)\n}\nfunction getAllowYScrolling(props, sectionConfig) {\n    return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars\n        getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars\n}\n// TODO: ONLY use `arg`. force out internal function to use same API\nfunction renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {\n    let { expandRows } = arg;\n    let content = typeof chunkConfig.content === 'function' ?\n        chunkConfig.content(arg) :\n        preact.createElement('table', {\n            role: 'presentation',\n            className: [\n                chunkConfig.tableClassName,\n                sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',\n            ].join(' '),\n            style: {\n                minWidth: arg.tableMinWidth,\n                width: arg.clientWidth,\n                height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height\n            },\n        }, arg.tableColGroupNode, preact.createElement(isHeader ? 'thead' : 'tbody', {\n            role: 'presentation',\n        }, typeof chunkConfig.rowContent === 'function'\n            ? chunkConfig.rowContent(arg)\n            : chunkConfig.rowContent));\n    return content;\n}\nfunction isColPropsEqual(cols0, cols1) {\n    return isArraysEqual(cols0, cols1, isPropsEqual);\n}\nfunction renderMicroColGroup(cols, shrinkWidth) {\n    let colNodes = [];\n    /*\n    for ColProps with spans, it would have been great to make a single <col span=\"\">\n    HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.\n    SOLUTION: making individual <col> elements makes Chrome behave.\n    */\n    for (let colProps of cols) {\n        let span = colProps.span || 1;\n        for (let i = 0; i < span; i += 1) {\n            colNodes.push(preact.createElement(\"col\", { style: {\n                    width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),\n                    minWidth: colProps.minWidth || '',\n                } }));\n        }\n    }\n    return preact.createElement('colgroup', {}, ...colNodes);\n}\nfunction sanitizeShrinkWidth(shrinkWidth) {\n    /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth\n    4 accounts for 2 2-pixel borders. TODO: better solution? */\n    return shrinkWidth == null ? 4 : shrinkWidth;\n}\nfunction hasShrinkWidth(cols) {\n    for (let col of cols) {\n        if (col.width === 'shrink') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction getScrollGridClassNames(liquid, context) {\n    let classNames = [\n        'fc-scrollgrid',\n        context.theme.getClass('table'),\n    ];\n    if (liquid) {\n        classNames.push('fc-scrollgrid-liquid');\n    }\n    return classNames;\n}\nfunction getSectionClassNames(sectionConfig, wholeTableVGrow) {\n    let classNames = [\n        'fc-scrollgrid-section',\n        `fc-scrollgrid-section-${sectionConfig.type}`,\n        sectionConfig.className, // used?\n    ];\n    if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {\n        classNames.push('fc-scrollgrid-section-liquid');\n    }\n    if (sectionConfig.isSticky) {\n        classNames.push('fc-scrollgrid-section-sticky');\n    }\n    return classNames;\n}\nfunction renderScrollShim(arg) {\n    return (preact.createElement(\"div\", { className: \"fc-scrollgrid-sticky-shim\", style: {\n            width: arg.clientWidth,\n            minWidth: arg.tableMinWidth,\n        } }));\n}\nfunction getStickyHeaderDates(options) {\n    let { stickyHeaderDates } = options;\n    if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {\n        stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';\n    }\n    return stickyHeaderDates;\n}\nfunction getStickyFooterScrollbar(options) {\n    let { stickyFooterScrollbar } = options;\n    if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {\n        stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';\n    }\n    return stickyFooterScrollbar;\n}\n\nclass SimpleScrollGrid extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.processCols = memoize((a) => a, isColPropsEqual); // so we get same `cols` props every time\n        // yucky to memoize VNodes, but much more efficient for consumers\n        this.renderMicroColGroup = memoize(renderMicroColGroup);\n        this.scrollerRefs = new RefMap();\n        this.scrollerElRefs = new RefMap(this._handleScrollerEl.bind(this));\n        this.state = {\n            shrinkWidth: null,\n            forceYScrollbars: false,\n            scrollerClientWidths: {},\n            scrollerClientHeights: {},\n        };\n        // TODO: can do a really simple print-view. dont need to join rows\n        this.handleSizing = () => {\n            this.safeSetState(Object.assign({ shrinkWidth: this.computeShrinkWidth() }, this.computeScrollerDims()));\n        };\n    }\n    render() {\n        let { props, state, context } = this;\n        let sectionConfigs = props.sections || [];\n        let cols = this.processCols(props.cols);\n        let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);\n        let classNames = getScrollGridClassNames(props.liquid, context);\n        if (props.collapsibleWidth) {\n            classNames.push('fc-scrollgrid-collapsible');\n        }\n        // TODO: make DRY\n        let configCnt = sectionConfigs.length;\n        let configI = 0;\n        let currentConfig;\n        let headSectionNodes = [];\n        let bodySectionNodes = [];\n        let footSectionNodes = [];\n        while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n            headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));\n            configI += 1;\n        }\n        while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n            bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));\n            configI += 1;\n        }\n        while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n            footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));\n            configI += 1;\n        }\n        // firefox bug: when setting height on table and there is a thead or tfoot,\n        // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)\n        // use getCanVGrowWithinCell as a way to detect table-stupid firefox.\n        // if so, use a simpler dom structure, jam everything into a lone tbody.\n        let isBuggy = !getCanVGrowWithinCell();\n        const roleAttrs = { role: 'rowgroup' };\n        return preact.createElement('table', {\n            role: 'grid',\n            className: classNames.join(' '),\n            style: { height: props.height },\n        }, Boolean(!isBuggy && headSectionNodes.length) && preact.createElement('thead', roleAttrs, ...headSectionNodes), Boolean(!isBuggy && bodySectionNodes.length) && preact.createElement('tbody', roleAttrs, ...bodySectionNodes), Boolean(!isBuggy && footSectionNodes.length) && preact.createElement('tfoot', roleAttrs, ...footSectionNodes), isBuggy && preact.createElement('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes));\n    }\n    renderSection(sectionConfig, microColGroupNode, isHeader) {\n        if ('outerContent' in sectionConfig) {\n            return (preact.createElement(preact.Fragment, { key: sectionConfig.key }, sectionConfig.outerContent));\n        }\n        return (preact.createElement(\"tr\", { key: sectionConfig.key, role: \"presentation\", className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)));\n    }\n    renderChunkTd(sectionConfig, microColGroupNode, chunkConfig, isHeader) {\n        if ('outerContent' in chunkConfig) {\n            return chunkConfig.outerContent;\n        }\n        let { props } = this;\n        let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state;\n        let needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?\n        let isLiquid = getSectionHasLiquidHeight(props, sectionConfig);\n        // for `!props.liquid` - is WHOLE scrollgrid natural height?\n        // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars\n        let overflowY = !props.liquid ? 'visible' :\n            forceYScrollbars ? 'scroll' :\n                !needsYScrolling ? 'hidden' :\n                    'auto';\n        let sectionKey = sectionConfig.key;\n        let content = renderChunkContent(sectionConfig, chunkConfig, {\n            tableColGroupNode: microColGroupNode,\n            tableMinWidth: '',\n            clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,\n            clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,\n            expandRows: sectionConfig.expandRows,\n            syncRowHeights: false,\n            rowSyncHeights: [],\n            reportRowHeightChange: () => { },\n        }, isHeader);\n        return preact.createElement(isHeader ? 'th' : 'td', {\n            ref: chunkConfig.elRef,\n            role: 'presentation',\n        }, preact.createElement(\"div\", { className: `fc-scroller-harness${isLiquid ? ' fc-scroller-harness-liquid' : ''}` },\n            preact.createElement(Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness\n                : true }, content)));\n    }\n    _handleScrollerEl(scrollerEl, key) {\n        let section = getSectionByKey(this.props.sections, key);\n        if (section) {\n            setRef(section.chunk.scrollerElRef, scrollerEl);\n        }\n    }\n    componentDidMount() {\n        this.handleSizing();\n        this.context.addResizeHandler(this.handleSizing);\n    }\n    componentDidUpdate() {\n        // TODO: need better solution when state contains non-sizing things\n        this.handleSizing();\n    }\n    componentWillUnmount() {\n        this.context.removeResizeHandler(this.handleSizing);\n    }\n    computeShrinkWidth() {\n        return hasShrinkWidth(this.props.cols)\n            ? computeShrinkWidth(this.scrollerElRefs.getAll())\n            : 0;\n    }\n    computeScrollerDims() {\n        let scrollbarWidth = getScrollbarWidths();\n        let { scrollerRefs, scrollerElRefs } = this;\n        let forceYScrollbars = false;\n        let scrollerClientWidths = {};\n        let scrollerClientHeights = {};\n        for (let sectionKey in scrollerRefs.currentMap) {\n            let scroller = scrollerRefs.currentMap[sectionKey];\n            if (scroller && scroller.needsYScrolling()) {\n                forceYScrollbars = true;\n                break;\n            }\n        }\n        for (let section of this.props.sections) {\n            let sectionKey = section.key;\n            let scrollerEl = scrollerElRefs.currentMap[sectionKey];\n            if (scrollerEl) {\n                let harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders\n                scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars\n                    ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n                    : 0));\n                scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);\n            }\n        }\n        return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights };\n    }\n}\nSimpleScrollGrid.addStateEquality({\n    scrollerClientWidths: isPropsEqual,\n    scrollerClientHeights: isPropsEqual,\n});\nfunction getSectionByKey(sections, key) {\n    for (let section of sections) {\n        if (section.key === key) {\n            return section;\n        }\n    }\n    return null;\n}\n\nclass EventContainer extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        // memo\n        this.buildPublicEvent = memoize((context, eventDef, eventInstance) => new EventImpl(context, eventDef, eventInstance));\n        this.handleEl = (el) => {\n            this.el = el;\n            setRef(this.props.elRef, el);\n            if (el) {\n                setElSeg(el, this.props.seg);\n            }\n        };\n    }\n    render() {\n        const { props, context } = this;\n        const { options } = context;\n        const { seg } = props;\n        const { eventRange } = seg;\n        const { ui } = eventRange;\n        const renderProps = {\n            event: this.buildPublicEvent(context, eventRange.def, eventRange.instance),\n            view: context.viewApi,\n            timeText: props.timeText,\n            textColor: ui.textColor,\n            backgroundColor: ui.backgroundColor,\n            borderColor: ui.borderColor,\n            isDraggable: !props.disableDragging && computeSegDraggable(seg, context),\n            isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),\n            isEndResizable: !props.disableResizing && computeSegEndResizable(seg),\n            isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),\n            isStart: Boolean(seg.isStart),\n            isEnd: Boolean(seg.isEnd),\n            isPast: Boolean(props.isPast),\n            isFuture: Boolean(props.isFuture),\n            isToday: Boolean(props.isToday),\n            isSelected: Boolean(props.isSelected),\n            isDragging: Boolean(props.isDragging),\n            isResizing: Boolean(props.isResizing),\n        };\n        return (preact.createElement(ContentContainer, { elRef: this.handleEl, elTag: props.elTag, elAttrs: props.elAttrs, elClasses: [\n                ...getEventClassNames(renderProps),\n                ...seg.eventRange.ui.classNames,\n                ...(props.elClasses || []),\n            ], elStyle: props.elStyle, renderProps: renderProps, generatorName: \"eventContent\", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount }, props.children));\n    }\n    componentDidUpdate(prevProps) {\n        if (this.el && this.props.seg !== prevProps.seg) {\n            setElSeg(this.el, this.props.seg);\n        }\n    }\n}\n\n// should not be a purecomponent\nclass StandardEvent extends BaseComponent {\n    render() {\n        let { props, context } = this;\n        let { options } = context;\n        let { seg } = props;\n        let { ui } = seg.eventRange;\n        let timeFormat = options.eventTimeFormat || props.defaultTimeFormat;\n        let timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);\n        return (preact.createElement(EventContainer, Object.assign({}, props /* includes elRef */, { elTag: \"a\", elStyle: {\n                borderColor: ui.borderColor,\n                backgroundColor: ui.backgroundColor,\n            }, elAttrs: getSegAnchorAttrs(seg, context), defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (preact.createElement(preact.Fragment, null,\n            preact.createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-event-main'], elStyle: { color: eventContentArg.textColor } }),\n            Boolean(eventContentArg.isStartResizable) && (preact.createElement(\"div\", { className: \"fc-event-resizer fc-event-resizer-start\" })),\n            Boolean(eventContentArg.isEndResizable) && (preact.createElement(\"div\", { className: \"fc-event-resizer fc-event-resizer-end\" }))))));\n    }\n}\nStandardEvent.addPropsEquality({\n    seg: isPropsEqual,\n});\nfunction renderInnerContent$1(innerProps) {\n    return (preact.createElement(\"div\", { className: \"fc-event-main-frame\" },\n        innerProps.timeText && (preact.createElement(\"div\", { className: \"fc-event-time\" }, innerProps.timeText)),\n        preact.createElement(\"div\", { className: \"fc-event-title-container\" },\n            preact.createElement(\"div\", { className: \"fc-event-title fc-sticky\" }, innerProps.event.title || preact.createElement(preact.Fragment, null, \"\\u00A0\")))));\n}\n\nconst NowIndicatorContainer = (props) => (preact.createElement(ViewContextType.Consumer, null, (context) => {\n    let { options } = context;\n    let renderProps = {\n        isAxis: props.isAxis,\n        date: context.dateEnv.toDate(props.date),\n        view: context.viewApi,\n    };\n    return (preact.createElement(ContentContainer, { elRef: props.elRef, elTag: props.elTag || 'div', elAttrs: props.elAttrs, elClasses: props.elClasses, elStyle: props.elStyle, renderProps: renderProps, generatorName: \"nowIndicatorContent\", customGenerator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount }, props.children));\n}));\n\nconst DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });\nclass DayCellContainer extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.refineRenderProps = memoizeObjArg(refineRenderProps);\n    }\n    render() {\n        let { props, context } = this;\n        let { options } = context;\n        let renderProps = this.refineRenderProps({\n            date: props.date,\n            dateProfile: props.dateProfile,\n            todayRange: props.todayRange,\n            isMonthStart: props.isMonthStart || false,\n            showDayNumber: props.showDayNumber,\n            extraRenderProps: props.extraRenderProps,\n            viewApi: context.viewApi,\n            dateEnv: context.dateEnv,\n            monthStartFormat: options.monthStartFormat,\n        });\n        return (preact.createElement(ContentContainer, { elRef: props.elRef, elTag: props.elTag, elAttrs: Object.assign(Object.assign({}, props.elAttrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), elClasses: [\n                ...getDayClassNames(renderProps, context.theme),\n                ...(props.elClasses || []),\n            ], elStyle: props.elStyle, renderProps: renderProps, generatorName: \"dayCellContent\", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator: \n            // don't use custom classNames if disabled\n            renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount }, props.children));\n    }\n}\nfunction hasCustomDayCellContent(options) {\n    return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));\n}\nfunction refineRenderProps(raw) {\n    let { date, dateEnv, dateProfile, isMonthStart } = raw;\n    let dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);\n    let dayNumberText = raw.showDayNumber ? (dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT)) : '';\n    return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { isMonthStart,\n        dayNumberText }), raw.extraRenderProps);\n}\n\nclass BgEvent extends BaseComponent {\n    render() {\n        let { props } = this;\n        let { seg } = props;\n        return (preact.createElement(EventContainer, { elTag: \"div\", elClasses: ['fc-bg-event'], elStyle: { backgroundColor: seg.eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, seg: seg, timeText: \"\", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));\n    }\n}\nfunction renderInnerContent(props) {\n    let { title } = props.event;\n    return title && (preact.createElement(\"div\", { className: \"fc-event-title\" }, props.event.title));\n}\nfunction renderFill(fillType) {\n    return (preact.createElement(\"div\", { className: `fc-${fillType}` }));\n}\n\nconst WeekNumberContainer = (props) => (preact.createElement(ViewContextType.Consumer, null, (context) => {\n    let { dateEnv, options } = context;\n    let { date } = props;\n    let format = options.weekNumberFormat || props.defaultFormat;\n    let num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?\n    let text = dateEnv.format(date, format);\n    let renderProps = { num, text, date };\n    return (preact.createElement(ContentContainer // why isn't WeekNumberContentArg being auto-detected?\n    , { elRef: props.elRef, elTag: props.elTag, elAttrs: props.elAttrs, elClasses: props.elClasses, elStyle: props.elStyle, renderProps: renderProps, generatorName: \"weekNumberContent\", customGenerator: options.weekNumberContent, defaultGenerator: renderInner, classNameGenerator: options.weekNumberClassNames, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));\n}));\nfunction renderInner(innerProps) {\n    return innerProps.text;\n}\n\nconst PADDING_FROM_VIEWPORT = 10;\nclass Popover extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            titleId: getUniqueDomId(),\n        };\n        this.handleRootEl = (el) => {\n            this.rootEl = el;\n            if (this.props.elRef) {\n                setRef(this.props.elRef, el);\n            }\n        };\n        // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n        this.handleDocumentMouseDown = (ev) => {\n            // only hide the popover if the click happened outside the popover\n            const target = getEventTargetViaRoot(ev);\n            if (!this.rootEl.contains(target)) {\n                this.handleCloseClick();\n            }\n        };\n        this.handleDocumentKeyDown = (ev) => {\n            if (ev.key === 'Escape') {\n                this.handleCloseClick();\n            }\n        };\n        this.handleCloseClick = () => {\n            let { onClose } = this.props;\n            if (onClose) {\n                onClose();\n            }\n        };\n    }\n    render() {\n        let { theme, options } = this.context;\n        let { props, state } = this;\n        let classNames = [\n            'fc-popover',\n            theme.getClass('popover'),\n        ].concat(props.extraClassNames || []);\n        return compat.createPortal(preact.createElement(\"div\", Object.assign({}, props.extraAttrs, { id: props.id, className: classNames.join(' '), \"aria-labelledby\": state.titleId, ref: this.handleRootEl }),\n            preact.createElement(\"div\", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },\n                preact.createElement(\"span\", { className: \"fc-popover-title\", id: state.titleId }, props.title),\n                preact.createElement(\"span\", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),\n            preact.createElement(\"div\", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);\n    }\n    componentDidMount() {\n        document.addEventListener('mousedown', this.handleDocumentMouseDown);\n        document.addEventListener('keydown', this.handleDocumentKeyDown);\n        this.updateSize();\n    }\n    componentWillUnmount() {\n        document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n        document.removeEventListener('keydown', this.handleDocumentKeyDown);\n    }\n    updateSize() {\n        let { isRtl } = this.context;\n        let { alignmentEl, alignGridTop } = this.props;\n        let { rootEl } = this;\n        let alignmentRect = computeClippedClientRect(alignmentEl);\n        if (alignmentRect) {\n            let popoverDims = rootEl.getBoundingClientRect();\n            // position relative to viewport\n            let popoverTop = alignGridTop\n                ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top\n                : alignmentRect.top;\n            let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;\n            // constrain\n            popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);\n            popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);\n            popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);\n            let origin = rootEl.offsetParent.getBoundingClientRect();\n            applyStyle(rootEl, {\n                top: popoverTop - origin.top,\n                left: popoverLeft - origin.left,\n            });\n        }\n    }\n}\n\nclass MorePopover extends DateComponent {\n    constructor() {\n        super(...arguments);\n        this.handleRootEl = (rootEl) => {\n            this.rootEl = rootEl;\n            if (rootEl) {\n                this.context.registerInteractiveComponent(this, {\n                    el: rootEl,\n                    useEventCenter: false,\n                });\n            }\n            else {\n                this.context.unregisterInteractiveComponent(this);\n            }\n        };\n    }\n    render() {\n        let { options, dateEnv } = this.context;\n        let { props } = this;\n        let { startDate, todayRange, dateProfile } = props;\n        let title = dateEnv.format(startDate, options.dayPopoverFormat);\n        return (preact.createElement(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, elAttrs) => (preact.createElement(Popover, { elRef: elAttrs.ref, id: props.id, title: title, extraClassNames: ['fc-more-popover'].concat(elAttrs.className || []), extraAttrs: elAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },\n            hasCustomDayCellContent(options) && (preact.createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-more-popover-misc'] })),\n            props.children))));\n    }\n    queryHit(positionLeft, positionTop, elWidth, elHeight) {\n        let { rootEl, props } = this;\n        if (positionLeft >= 0 && positionLeft < elWidth &&\n            positionTop >= 0 && positionTop < elHeight) {\n            return {\n                dateProfile: props.dateProfile,\n                dateSpan: Object.assign({ allDay: !props.forceTimed, range: {\n                        start: props.startDate,\n                        end: props.endDate,\n                    } }, props.extraDateSpan),\n                dayEl: rootEl,\n                rect: {\n                    left: 0,\n                    top: 0,\n                    right: elWidth,\n                    bottom: elHeight,\n                },\n                layer: 1, // important when comparing with hits from other components\n            };\n        }\n        return null;\n    }\n}\n\nclass MoreLinkContainer extends BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            isPopoverOpen: false,\n            popoverId: getUniqueDomId(),\n        };\n        this.handleLinkEl = (linkEl) => {\n            this.linkEl = linkEl;\n            if (this.props.elRef) {\n                setRef(this.props.elRef, linkEl);\n            }\n        };\n        this.handleClick = (ev) => {\n            let { props, context } = this;\n            let { moreLinkClick } = context.options;\n            let date = computeRange(props).start;\n            function buildPublicSeg(seg) {\n                let { def, instance, range } = seg.eventRange;\n                return {\n                    event: new EventImpl(context, def, instance),\n                    start: context.dateEnv.toDate(range.start),\n                    end: context.dateEnv.toDate(range.end),\n                    isStart: seg.isStart,\n                    isEnd: seg.isEnd,\n                };\n            }\n            if (typeof moreLinkClick === 'function') {\n                moreLinkClick = moreLinkClick({\n                    date,\n                    allDay: Boolean(props.allDayDate),\n                    allSegs: props.allSegs.map(buildPublicSeg),\n                    hiddenSegs: props.hiddenSegs.map(buildPublicSeg),\n                    jsEvent: ev,\n                    view: context.viewApi,\n                });\n            }\n            if (!moreLinkClick || moreLinkClick === 'popover') {\n                this.setState({ isPopoverOpen: true });\n            }\n            else if (typeof moreLinkClick === 'string') { // a view name\n                context.calendarApi.zoomTo(date, moreLinkClick);\n            }\n        };\n        this.handlePopoverClose = () => {\n            this.setState({ isPopoverOpen: false });\n        };\n    }\n    render() {\n        let { props, state } = this;\n        return (preact.createElement(ViewContextType.Consumer, null, (context) => {\n            let { viewApi, options, calendarApi } = context;\n            let { moreLinkText } = options;\n            let { moreCnt } = props;\n            let range = computeRange(props);\n            let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals\n                ? moreLinkText.call(calendarApi, moreCnt)\n                : `+${moreCnt} ${moreLinkText}`;\n            let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);\n            let renderProps = {\n                num: moreCnt,\n                shortText: `+${moreCnt}`,\n                text,\n                view: viewApi,\n            };\n            return (preact.createElement(preact.Fragment, null,\n                Boolean(props.moreCnt) && (preact.createElement(ContentContainer, { elTag: props.elTag || 'a', elRef: this.handleLinkEl, elClasses: [\n                        ...(props.elClasses || []),\n                        'fc-more-link',\n                    ], elStyle: props.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: \"moreLinkContent\", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),\n                state.isPopoverOpen && (preact.createElement(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: this.parentEl, alignmentEl: props.alignmentElRef ?\n                        props.alignmentElRef.current :\n                        this.linkEl, alignGridTop: props.alignGridTop, forceTimed: props.forceTimed, onClose: this.handlePopoverClose }, props.popoverContent()))));\n        }));\n    }\n    componentDidMount() {\n        this.updateParentEl();\n    }\n    componentDidUpdate() {\n        this.updateParentEl();\n    }\n    updateParentEl() {\n        if (this.linkEl) {\n            this.parentEl = elementClosest(this.linkEl, '.fc-view-harness');\n        }\n    }\n}\nfunction renderMoreLinkInner(props) {\n    return props.text;\n}\nfunction computeRange(props) {\n    if (props.allDayDate) {\n        return {\n            start: props.allDayDate,\n            end: addDays(props.allDayDate, 1),\n        };\n    }\n    let { hiddenSegs } = props;\n    return {\n        start: computeEarliestSegStart(hiddenSegs),\n        end: computeLatestSegEnd(hiddenSegs),\n    };\n}\nfunction computeEarliestSegStart(segs) {\n    return segs.reduce(pickEarliestStart).eventRange.range.start;\n}\nfunction pickEarliestStart(seg0, seg1) {\n    return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;\n}\nfunction computeLatestSegEnd(segs) {\n    return segs.reduce(pickLatestEnd).eventRange.range.end;\n}\nfunction pickLatestEnd(seg0, seg1) {\n    return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;\n}\n\nclass Store {\n    constructor() {\n        this.handlers = [];\n    }\n    set(value) {\n        this.currentValue = value;\n        for (let handler of this.handlers) {\n            handler(value);\n        }\n    }\n    subscribe(handler) {\n        this.handlers.push(handler);\n        if (this.currentValue !== undefined) {\n            handler(this.currentValue);\n        }\n    }\n}\n\n/*\nSubscribers will get a LIST of CustomRenderings\n*/\nclass CustomRenderingStore extends Store {\n    constructor() {\n        super(...arguments);\n        this.map = new Map();\n    }\n    // for consistent order\n    handle(customRendering) {\n        const { map } = this;\n        let updated = false;\n        if (customRendering.isActive) {\n            map.set(customRendering.id, customRendering);\n            updated = true;\n        }\n        else if (map.has(customRendering.id)) {\n            map.delete(customRendering.id);\n            updated = true;\n        }\n        if (updated) {\n            this.set(map);\n        }\n    }\n}\n\nexports.BASE_OPTION_DEFAULTS = BASE_OPTION_DEFAULTS;\nexports.BASE_OPTION_REFINERS = BASE_OPTION_REFINERS;\nexports.BaseComponent = BaseComponent;\nexports.BgEvent = BgEvent;\nexports.CALENDAR_LISTENER_REFINERS = CALENDAR_LISTENER_REFINERS;\nexports.CALENDAR_OPTION_REFINERS = CALENDAR_OPTION_REFINERS;\nexports.COMPLEX_OPTION_COMPARATORS = COMPLEX_OPTION_COMPARATORS;\nexports.CalendarImpl = CalendarImpl;\nexports.CalendarRoot = CalendarRoot;\nexports.ContentContainer = ContentContainer;\nexports.CustomRenderingStore = CustomRenderingStore;\nexports.DateComponent = DateComponent;\nexports.DateEnv = DateEnv;\nexports.DateProfileGenerator = DateProfileGenerator;\nexports.DayCellContainer = DayCellContainer;\nexports.DayHeader = DayHeader;\nexports.DaySeriesModel = DaySeriesModel;\nexports.DayTableModel = DayTableModel;\nexports.DelayedRunner = DelayedRunner;\nexports.ElementDragging = ElementDragging;\nexports.ElementScrollController = ElementScrollController;\nexports.Emitter = Emitter;\nexports.EventContainer = EventContainer;\nexports.EventImpl = EventImpl;\nexports.Interaction = Interaction;\nexports.JsonRequestError = JsonRequestError;\nexports.MoreLinkContainer = MoreLinkContainer;\nexports.NamedTimeZoneImpl = NamedTimeZoneImpl;\nexports.NowIndicatorContainer = NowIndicatorContainer;\nexports.NowTimer = NowTimer;\nexports.PositionCache = PositionCache;\nexports.PureComponent = PureComponent;\nexports.RefMap = RefMap;\nexports.RenderId = RenderId;\nexports.ScrollController = ScrollController;\nexports.ScrollResponder = ScrollResponder;\nexports.Scroller = Scroller;\nexports.SegHierarchy = SegHierarchy;\nexports.SimpleScrollGrid = SimpleScrollGrid;\nexports.Slicer = Slicer;\nexports.Splitter = Splitter;\nexports.StandardEvent = StandardEvent;\nexports.TableDateCell = TableDateCell;\nexports.TableDowCell = TableDowCell;\nexports.Theme = Theme;\nexports.VIEW_OPTION_REFINERS = VIEW_OPTION_REFINERS;\nexports.ViewContainer = ViewContainer;\nexports.ViewContextType = ViewContextType;\nexports.WeekNumberContainer = WeekNumberContainer;\nexports.WindowScrollController = WindowScrollController;\nexports.addDays = addDays;\nexports.addDurations = addDurations;\nexports.addMs = addMs;\nexports.addWeeks = addWeeks;\nexports.allowContextMenu = allowContextMenu;\nexports.allowSelection = allowSelection;\nexports.applyMutationToEventStore = applyMutationToEventStore;\nexports.applyStyle = applyStyle;\nexports.applyStyleProp = applyStyleProp;\nexports.arrayToHash = arrayToHash;\nexports.asCleanDays = asCleanDays;\nexports.asRoughMinutes = asRoughMinutes;\nexports.asRoughMs = asRoughMs;\nexports.asRoughSeconds = asRoughSeconds;\nexports.binarySearch = binarySearch;\nexports.buildElAttrs = buildElAttrs;\nexports.buildEntryKey = buildEntryKey;\nexports.buildEventApis = buildEventApis;\nexports.buildEventRangeKey = buildEventRangeKey;\nexports.buildEventSourceRefiners = buildEventSourceRefiners;\nexports.buildIsoString = buildIsoString;\nexports.buildNavLinkAttrs = buildNavLinkAttrs;\nexports.buildRangeApiWithTimeZone = buildRangeApiWithTimeZone;\nexports.buildSegTimeText = buildSegTimeText;\nexports.buildViewClassNames = buildViewClassNames;\nexports.buildViewContext = buildViewContext;\nexports.collectFromHash = collectFromHash;\nexports.combineEventUis = combineEventUis;\nexports.compareByFieldSpecs = compareByFieldSpecs;\nexports.compareNumbers = compareNumbers;\nexports.compareObjs = compareObjs;\nexports.computeEarliestSegStart = computeEarliestSegStart;\nexports.computeEdges = computeEdges;\nexports.computeFallbackHeaderFormat = computeFallbackHeaderFormat;\nexports.computeInnerRect = computeInnerRect;\nexports.computeRect = computeRect;\nexports.computeShrinkWidth = computeShrinkWidth;\nexports.computeVisibleDayRange = computeVisibleDayRange;\nexports.config = config;\nexports.constrainPoint = constrainPoint;\nexports.createContext = createContext;\nexports.createDuration = createDuration;\nexports.createEmptyEventStore = createEmptyEventStore;\nexports.createEventInstance = createEventInstance;\nexports.createEventUi = createEventUi;\nexports.createFormatter = createFormatter;\nexports.diffDates = diffDates;\nexports.diffDayAndTime = diffDayAndTime;\nexports.diffDays = diffDays;\nexports.diffPoints = diffPoints;\nexports.diffWeeks = diffWeeks;\nexports.diffWholeDays = diffWholeDays;\nexports.diffWholeWeeks = diffWholeWeeks;\nexports.disableCursor = disableCursor;\nexports.elementClosest = elementClosest;\nexports.elementMatches = elementMatches;\nexports.enableCursor = enableCursor;\nexports.ensureElHasStyles = ensureElHasStyles;\nexports.eventTupleToStore = eventTupleToStore;\nexports.filterHash = filterHash;\nexports.findDirectChildren = findDirectChildren;\nexports.findElements = findElements;\nexports.flexibleCompare = flexibleCompare;\nexports.flushSync = flushSync;\nexports.formatDayString = formatDayString;\nexports.formatIsoMonthStr = formatIsoMonthStr;\nexports.formatIsoTimeString = formatIsoTimeString;\nexports.formatWithOrdinals = formatWithOrdinals;\nexports.getAllowYScrolling = getAllowYScrolling;\nexports.getCanVGrowWithinCell = getCanVGrowWithinCell;\nexports.getClippingParents = getClippingParents;\nexports.getDateMeta = getDateMeta;\nexports.getDayClassNames = getDayClassNames;\nexports.getDefaultEventEnd = getDefaultEventEnd;\nexports.getElSeg = getElSeg;\nexports.getEntrySpanEnd = getEntrySpanEnd;\nexports.getEventTargetViaRoot = getEventTargetViaRoot;\nexports.getIsRtlScrollbarOnLeft = getIsRtlScrollbarOnLeft;\nexports.getRectCenter = getRectCenter;\nexports.getRelevantEvents = getRelevantEvents;\nexports.getScrollGridClassNames = getScrollGridClassNames;\nexports.getScrollbarWidths = getScrollbarWidths;\nexports.getSectionClassNames = getSectionClassNames;\nexports.getSectionHasLiquidHeight = getSectionHasLiquidHeight;\nexports.getSegAnchorAttrs = getSegAnchorAttrs;\nexports.getSegMeta = getSegMeta;\nexports.getSlotClassNames = getSlotClassNames;\nexports.getStickyFooterScrollbar = getStickyFooterScrollbar;\nexports.getStickyHeaderDates = getStickyHeaderDates;\nexports.getUniqueDomId = getUniqueDomId;\nexports.greatestDurationDenominator = greatestDurationDenominator;\nexports.groupIntersectingEntries = groupIntersectingEntries;\nexports.guid = guid;\nexports.hasBgRendering = hasBgRendering;\nexports.hasCustomDayCellContent = hasCustomDayCellContent;\nexports.hasShrinkWidth = hasShrinkWidth;\nexports.hashValuesToArray = hashValuesToArray;\nexports.identity = identity;\nexports.injectStyles = injectStyles;\nexports.interactionSettingsStore = interactionSettingsStore;\nexports.interactionSettingsToStore = interactionSettingsToStore;\nexports.intersectRanges = intersectRanges;\nexports.intersectRects = intersectRects;\nexports.intersectSpans = intersectSpans;\nexports.isArraysEqual = isArraysEqual;\nexports.isColPropsEqual = isColPropsEqual;\nexports.isDateSelectionValid = isDateSelectionValid;\nexports.isDateSpansEqual = isDateSpansEqual;\nexports.isInt = isInt;\nexports.isInteractionValid = isInteractionValid;\nexports.isMultiDayRange = isMultiDayRange;\nexports.isPropsEqual = isPropsEqual;\nexports.isPropsValid = isPropsValid;\nexports.isValidDate = isValidDate;\nexports.listenBySelector = listenBySelector;\nexports.listenToHoverBySelector = listenToHoverBySelector;\nexports.mapHash = mapHash;\nexports.memoize = memoize;\nexports.memoizeArraylike = memoizeArraylike;\nexports.memoizeHashlike = memoizeHashlike;\nexports.memoizeObjArg = memoizeObjArg;\nexports.mergeEventStores = mergeEventStores;\nexports.mergeProps = mergeProps;\nexports.mergeRawOptions = mergeRawOptions;\nexports.multiplyDuration = multiplyDuration;\nexports.padStart = padStart;\nexports.parse = parse;\nexports.parseBusinessHours = parseBusinessHours;\nexports.parseClassNames = parseClassNames;\nexports.parseDragMeta = parseDragMeta;\nexports.parseEventDef = parseEventDef;\nexports.parseEventSource = parseEventSource;\nexports.parseFieldSpecs = parseFieldSpecs;\nexports.parseInteractionSettings = parseInteractionSettings;\nexports.pointInsideRect = pointInsideRect;\nexports.preventContextMenu = preventContextMenu;\nexports.preventDefault = preventDefault;\nexports.preventSelection = preventSelection;\nexports.rangeContainsMarker = rangeContainsMarker;\nexports.rangeContainsRange = rangeContainsRange;\nexports.rangesEqual = rangesEqual;\nexports.rangesIntersect = rangesIntersect;\nexports.reduceEventStore = reduceEventStore;\nexports.refineEventDef = refineEventDef;\nexports.refineProps = refineProps;\nexports.removeElement = removeElement;\nexports.removeExact = removeExact;\nexports.renderChunkContent = renderChunkContent;\nexports.renderFill = renderFill;\nexports.renderMicroColGroup = renderMicroColGroup;\nexports.renderScrollShim = renderScrollShim;\nexports.requestJson = requestJson;\nexports.rezoneEventStoreDates = rezoneEventStoreDates;\nexports.sanitizeShrinkWidth = sanitizeShrinkWidth;\nexports.setRef = setRef;\nexports.sliceEventStore = sliceEventStore;\nexports.sortEventSegs = sortEventSegs;\nexports.startOfDay = startOfDay;\nexports.subtractDurations = subtractDurations;\nexports.translateRect = translateRect;\nexports.triggerDateSelect = triggerDateSelect;\nexports.unpromisify = unpromisify;\nexports.whenTransitionDone = whenTransitionDone;\nexports.wholeDivideDurations = wholeDivideDurations;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar internalCommon = require('./internal-common.cjs');\nrequire('preact');\nrequire('preact/compat');\n\n\n\nexports.BASE_OPTION_DEFAULTS = internalCommon.BASE_OPTION_DEFAULTS;\nexports.BaseComponent = internalCommon.BaseComponent;\nexports.BgEvent = internalCommon.BgEvent;\nexports.CalendarImpl = internalCommon.CalendarImpl;\nexports.CalendarRoot = internalCommon.CalendarRoot;\nexports.ContentContainer = internalCommon.ContentContainer;\nexports.CustomRenderingStore = internalCommon.CustomRenderingStore;\nexports.DateComponent = internalCommon.DateComponent;\nexports.DateEnv = internalCommon.DateEnv;\nexports.DateProfileGenerator = internalCommon.DateProfileGenerator;\nexports.DayCellContainer = internalCommon.DayCellContainer;\nexports.DayHeader = internalCommon.DayHeader;\nexports.DaySeriesModel = internalCommon.DaySeriesModel;\nexports.DayTableModel = internalCommon.DayTableModel;\nexports.DelayedRunner = internalCommon.DelayedRunner;\nexports.ElementDragging = internalCommon.ElementDragging;\nexports.ElementScrollController = internalCommon.ElementScrollController;\nexports.Emitter = internalCommon.Emitter;\nexports.EventContainer = internalCommon.EventContainer;\nexports.EventImpl = internalCommon.EventImpl;\nexports.Interaction = internalCommon.Interaction;\nexports.MoreLinkContainer = internalCommon.MoreLinkContainer;\nexports.NamedTimeZoneImpl = internalCommon.NamedTimeZoneImpl;\nexports.NowIndicatorContainer = internalCommon.NowIndicatorContainer;\nexports.NowTimer = internalCommon.NowTimer;\nexports.PositionCache = internalCommon.PositionCache;\nexports.RefMap = internalCommon.RefMap;\nexports.ScrollController = internalCommon.ScrollController;\nexports.ScrollResponder = internalCommon.ScrollResponder;\nexports.Scroller = internalCommon.Scroller;\nexports.SegHierarchy = internalCommon.SegHierarchy;\nexports.SimpleScrollGrid = internalCommon.SimpleScrollGrid;\nexports.Slicer = internalCommon.Slicer;\nexports.Splitter = internalCommon.Splitter;\nexports.StandardEvent = internalCommon.StandardEvent;\nexports.TableDateCell = internalCommon.TableDateCell;\nexports.TableDowCell = internalCommon.TableDowCell;\nexports.Theme = internalCommon.Theme;\nexports.ViewContainer = internalCommon.ViewContainer;\nexports.ViewContextType = internalCommon.ViewContextType;\nexports.WeekNumberContainer = internalCommon.WeekNumberContainer;\nexports.WindowScrollController = internalCommon.WindowScrollController;\nexports.addDays = internalCommon.addDays;\nexports.addDurations = internalCommon.addDurations;\nexports.addMs = internalCommon.addMs;\nexports.addWeeks = internalCommon.addWeeks;\nexports.allowContextMenu = internalCommon.allowContextMenu;\nexports.allowSelection = internalCommon.allowSelection;\nexports.applyMutationToEventStore = internalCommon.applyMutationToEventStore;\nexports.applyStyle = internalCommon.applyStyle;\nexports.asCleanDays = internalCommon.asCleanDays;\nexports.asRoughMinutes = internalCommon.asRoughMinutes;\nexports.asRoughMs = internalCommon.asRoughMs;\nexports.asRoughSeconds = internalCommon.asRoughSeconds;\nexports.binarySearch = internalCommon.binarySearch;\nexports.buildElAttrs = internalCommon.buildElAttrs;\nexports.buildEntryKey = internalCommon.buildEntryKey;\nexports.buildEventApis = internalCommon.buildEventApis;\nexports.buildEventRangeKey = internalCommon.buildEventRangeKey;\nexports.buildIsoString = internalCommon.buildIsoString;\nexports.buildNavLinkAttrs = internalCommon.buildNavLinkAttrs;\nexports.buildSegTimeText = internalCommon.buildSegTimeText;\nexports.collectFromHash = internalCommon.collectFromHash;\nexports.combineEventUis = internalCommon.combineEventUis;\nexports.compareByFieldSpecs = internalCommon.compareByFieldSpecs;\nexports.compareNumbers = internalCommon.compareNumbers;\nexports.compareObjs = internalCommon.compareObjs;\nexports.computeEarliestSegStart = internalCommon.computeEarliestSegStart;\nexports.computeEdges = internalCommon.computeEdges;\nexports.computeFallbackHeaderFormat = internalCommon.computeFallbackHeaderFormat;\nexports.computeInnerRect = internalCommon.computeInnerRect;\nexports.computeRect = internalCommon.computeRect;\nexports.computeShrinkWidth = internalCommon.computeShrinkWidth;\nexports.computeVisibleDayRange = internalCommon.computeVisibleDayRange;\nexports.config = internalCommon.config;\nexports.constrainPoint = internalCommon.constrainPoint;\nexports.createDuration = internalCommon.createDuration;\nexports.createEmptyEventStore = internalCommon.createEmptyEventStore;\nexports.createEventInstance = internalCommon.createEventInstance;\nexports.createEventUi = internalCommon.createEventUi;\nexports.createFormatter = internalCommon.createFormatter;\nexports.diffDates = internalCommon.diffDates;\nexports.diffDayAndTime = internalCommon.diffDayAndTime;\nexports.diffDays = internalCommon.diffDays;\nexports.diffPoints = internalCommon.diffPoints;\nexports.diffWeeks = internalCommon.diffWeeks;\nexports.diffWholeDays = internalCommon.diffWholeDays;\nexports.diffWholeWeeks = internalCommon.diffWholeWeeks;\nexports.disableCursor = internalCommon.disableCursor;\nexports.elementClosest = internalCommon.elementClosest;\nexports.elementMatches = internalCommon.elementMatches;\nexports.enableCursor = internalCommon.enableCursor;\nexports.eventTupleToStore = internalCommon.eventTupleToStore;\nexports.filterHash = internalCommon.filterHash;\nexports.findDirectChildren = internalCommon.findDirectChildren;\nexports.findElements = internalCommon.findElements;\nexports.flexibleCompare = internalCommon.flexibleCompare;\nexports.formatDayString = internalCommon.formatDayString;\nexports.formatIsoMonthStr = internalCommon.formatIsoMonthStr;\nexports.formatIsoTimeString = internalCommon.formatIsoTimeString;\nexports.getAllowYScrolling = internalCommon.getAllowYScrolling;\nexports.getCanVGrowWithinCell = internalCommon.getCanVGrowWithinCell;\nexports.getClippingParents = internalCommon.getClippingParents;\nexports.getDateMeta = internalCommon.getDateMeta;\nexports.getDayClassNames = internalCommon.getDayClassNames;\nexports.getDefaultEventEnd = internalCommon.getDefaultEventEnd;\nexports.getElSeg = internalCommon.getElSeg;\nexports.getEntrySpanEnd = internalCommon.getEntrySpanEnd;\nexports.getEventTargetViaRoot = internalCommon.getEventTargetViaRoot;\nexports.getIsRtlScrollbarOnLeft = internalCommon.getIsRtlScrollbarOnLeft;\nexports.getRectCenter = internalCommon.getRectCenter;\nexports.getRelevantEvents = internalCommon.getRelevantEvents;\nexports.getScrollGridClassNames = internalCommon.getScrollGridClassNames;\nexports.getScrollbarWidths = internalCommon.getScrollbarWidths;\nexports.getSectionClassNames = internalCommon.getSectionClassNames;\nexports.getSectionHasLiquidHeight = internalCommon.getSectionHasLiquidHeight;\nexports.getSegAnchorAttrs = internalCommon.getSegAnchorAttrs;\nexports.getSegMeta = internalCommon.getSegMeta;\nexports.getSlotClassNames = internalCommon.getSlotClassNames;\nexports.getStickyFooterScrollbar = internalCommon.getStickyFooterScrollbar;\nexports.getStickyHeaderDates = internalCommon.getStickyHeaderDates;\nexports.getUniqueDomId = internalCommon.getUniqueDomId;\nexports.greatestDurationDenominator = internalCommon.greatestDurationDenominator;\nexports.groupIntersectingEntries = internalCommon.groupIntersectingEntries;\nexports.guid = internalCommon.guid;\nexports.hasBgRendering = internalCommon.hasBgRendering;\nexports.hasCustomDayCellContent = internalCommon.hasCustomDayCellContent;\nexports.hasShrinkWidth = internalCommon.hasShrinkWidth;\nexports.identity = internalCommon.identity;\nexports.injectStyles = internalCommon.injectStyles;\nexports.interactionSettingsStore = internalCommon.interactionSettingsStore;\nexports.interactionSettingsToStore = internalCommon.interactionSettingsToStore;\nexports.intersectRanges = internalCommon.intersectRanges;\nexports.intersectRects = internalCommon.intersectRects;\nexports.intersectSpans = internalCommon.intersectSpans;\nexports.isArraysEqual = internalCommon.isArraysEqual;\nexports.isColPropsEqual = internalCommon.isColPropsEqual;\nexports.isDateSelectionValid = internalCommon.isDateSelectionValid;\nexports.isDateSpansEqual = internalCommon.isDateSpansEqual;\nexports.isInt = internalCommon.isInt;\nexports.isInteractionValid = internalCommon.isInteractionValid;\nexports.isMultiDayRange = internalCommon.isMultiDayRange;\nexports.isPropsEqual = internalCommon.isPropsEqual;\nexports.isPropsValid = internalCommon.isPropsValid;\nexports.isValidDate = internalCommon.isValidDate;\nexports.mapHash = internalCommon.mapHash;\nexports.memoize = internalCommon.memoize;\nexports.memoizeArraylike = internalCommon.memoizeArraylike;\nexports.memoizeHashlike = internalCommon.memoizeHashlike;\nexports.memoizeObjArg = internalCommon.memoizeObjArg;\nexports.mergeEventStores = internalCommon.mergeEventStores;\nexports.multiplyDuration = internalCommon.multiplyDuration;\nexports.padStart = internalCommon.padStart;\nexports.parseBusinessHours = internalCommon.parseBusinessHours;\nexports.parseClassNames = internalCommon.parseClassNames;\nexports.parseDragMeta = internalCommon.parseDragMeta;\nexports.parseEventDef = internalCommon.parseEventDef;\nexports.parseFieldSpecs = internalCommon.parseFieldSpecs;\nexports.parseMarker = internalCommon.parse;\nexports.pointInsideRect = internalCommon.pointInsideRect;\nexports.preventContextMenu = internalCommon.preventContextMenu;\nexports.preventDefault = internalCommon.preventDefault;\nexports.preventSelection = internalCommon.preventSelection;\nexports.rangeContainsMarker = internalCommon.rangeContainsMarker;\nexports.rangeContainsRange = internalCommon.rangeContainsRange;\nexports.rangesEqual = internalCommon.rangesEqual;\nexports.rangesIntersect = internalCommon.rangesIntersect;\nexports.refineEventDef = internalCommon.refineEventDef;\nexports.refineProps = internalCommon.refineProps;\nexports.removeElement = internalCommon.removeElement;\nexports.removeExact = internalCommon.removeExact;\nexports.renderChunkContent = internalCommon.renderChunkContent;\nexports.renderFill = internalCommon.renderFill;\nexports.renderMicroColGroup = internalCommon.renderMicroColGroup;\nexports.renderScrollShim = internalCommon.renderScrollShim;\nexports.requestJson = internalCommon.requestJson;\nexports.sanitizeShrinkWidth = internalCommon.sanitizeShrinkWidth;\nexports.setRef = internalCommon.setRef;\nexports.sliceEventStore = internalCommon.sliceEventStore;\nexports.sortEventSegs = internalCommon.sortEventSegs;\nexports.startOfDay = internalCommon.startOfDay;\nexports.translateRect = internalCommon.translateRect;\nexports.triggerDateSelect = internalCommon.triggerDateSelect;\nexports.unpromisify = internalCommon.unpromisify;\nexports.whenTransitionDone = internalCommon.whenTransitionDone;\nexports.wholeDivideDurations = internalCommon.wholeDivideDurations;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar preact = require('preact');\nvar compat = require('preact/compat');\nvar internalCommon = require('./internal-common.cjs');\n\n\n\nObject.defineProperty(exports, 'createPortal', {\n\tenumerable: true,\n\tget: function () { return compat.createPortal; }\n});\nexports.createContext = internalCommon.createContext;\nexports.flushSync = internalCommon.flushSync;\nObject.keys(preact).forEach(function (k) {\n\tif (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {\n\t\tenumerable: true,\n\t\tget: function () { return preact[k]; }\n\t});\n});\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar index_cjs = require('@fullcalendar/core/index.cjs');\nvar internalCommon = require('./internal.cjs');\nrequire('@fullcalendar/core/internal.cjs');\nrequire('@fullcalendar/core/preact.cjs');\n\nvar index = index_cjs.createPlugin({\n    name: '@fullcalendar/daygrid',\n    initialView: 'dayGridMonth',\n    views: {\n        dayGrid: {\n            component: internalCommon.DayGridView,\n            dateProfileGeneratorClass: internalCommon.TableDateProfileGenerator,\n        },\n        dayGridDay: {\n            type: 'dayGrid',\n            duration: { days: 1 },\n        },\n        dayGridWeek: {\n            type: 'dayGrid',\n            duration: { weeks: 1 },\n        },\n        dayGridMonth: {\n            type: 'dayGrid',\n            duration: { months: 1 },\n            fixedWeekCount: true,\n        },\n        dayGridYear: {\n            type: 'dayGrid',\n            duration: { years: 1 },\n        },\n    },\n});\n\nexports[\"default\"] = index;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar internal_cjs = require('@fullcalendar/core/internal.cjs');\nvar preact_cjs = require('@fullcalendar/core/preact.cjs');\n\n/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a Table subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\nclass TableView extends internal_cjs.DateComponent {\n    constructor() {\n        super(...arguments);\n        this.headerElRef = preact_cjs.createRef();\n    }\n    renderSimpleLayout(headerRowContent, bodyContent) {\n        let { props, context } = this;\n        let sections = [];\n        let stickyHeaderDates = internal_cjs.getStickyHeaderDates(context.options);\n        if (headerRowContent) {\n            sections.push({\n                type: 'header',\n                key: 'header',\n                isSticky: stickyHeaderDates,\n                chunk: {\n                    elRef: this.headerElRef,\n                    tableClassName: 'fc-col-header',\n                    rowContent: headerRowContent,\n                },\n            });\n        }\n        sections.push({\n            type: 'body',\n            key: 'body',\n            liquid: true,\n            chunk: { content: bodyContent },\n        });\n        return (preact_cjs.createElement(internal_cjs.ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },\n            preact_cjs.createElement(internal_cjs.SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [] /* TODO: make optional? */, sections: sections })));\n    }\n    renderHScrollLayout(headerRowContent, bodyContent, colCnt, dayMinWidth) {\n        let ScrollGrid = this.context.pluginHooks.scrollGridImpl;\n        if (!ScrollGrid) {\n            throw new Error('No ScrollGrid implementation');\n        }\n        let { props, context } = this;\n        let stickyHeaderDates = !props.forPrint && internal_cjs.getStickyHeaderDates(context.options);\n        let stickyFooterScrollbar = !props.forPrint && internal_cjs.getStickyFooterScrollbar(context.options);\n        let sections = [];\n        if (headerRowContent) {\n            sections.push({\n                type: 'header',\n                key: 'header',\n                isSticky: stickyHeaderDates,\n                chunks: [{\n                        key: 'main',\n                        elRef: this.headerElRef,\n                        tableClassName: 'fc-col-header',\n                        rowContent: headerRowContent,\n                    }],\n            });\n        }\n        sections.push({\n            type: 'body',\n            key: 'body',\n            liquid: true,\n            chunks: [{\n                    key: 'main',\n                    content: bodyContent,\n                }],\n        });\n        if (stickyFooterScrollbar) {\n            sections.push({\n                type: 'footer',\n                key: 'footer',\n                isSticky: true,\n                chunks: [{\n                        key: 'main',\n                        content: internal_cjs.renderScrollShim,\n                    }],\n            });\n        }\n        return (preact_cjs.createElement(internal_cjs.ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },\n            preact_cjs.createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections })));\n    }\n}\n\nfunction splitSegsByRow(segs, rowCnt) {\n    let byRow = [];\n    for (let i = 0; i < rowCnt; i += 1) {\n        byRow[i] = [];\n    }\n    for (let seg of segs) {\n        byRow[seg.row].push(seg);\n    }\n    return byRow;\n}\nfunction splitSegsByFirstCol(segs, colCnt) {\n    let byCol = [];\n    for (let i = 0; i < colCnt; i += 1) {\n        byCol[i] = [];\n    }\n    for (let seg of segs) {\n        byCol[seg.firstCol].push(seg);\n    }\n    return byCol;\n}\nfunction splitInteractionByRow(ui, rowCnt) {\n    let byRow = [];\n    if (!ui) {\n        for (let i = 0; i < rowCnt; i += 1) {\n            byRow[i] = null;\n        }\n    }\n    else {\n        for (let i = 0; i < rowCnt; i += 1) {\n            byRow[i] = {\n                affectedInstances: ui.affectedInstances,\n                isEvent: ui.isEvent,\n                segs: [],\n            };\n        }\n        for (let seg of ui.segs) {\n            byRow[seg.row].segs.push(seg);\n        }\n    }\n    return byRow;\n}\n\nconst DEFAULT_TABLE_EVENT_TIME_FORMAT = internal_cjs.createFormatter({\n    hour: 'numeric',\n    minute: '2-digit',\n    omitZeroMinute: true,\n    meridiem: 'narrow',\n});\nfunction hasListItemDisplay(seg) {\n    let { display } = seg.eventRange.ui;\n    return display === 'list-item' || (display === 'auto' &&\n        !seg.eventRange.def.allDay &&\n        seg.firstCol === seg.lastCol && // can't be multi-day\n        seg.isStart && // \"\n        seg.isEnd // \"\n    );\n}\n\nclass TableBlockEvent extends internal_cjs.BaseComponent {\n    render() {\n        let { props } = this;\n        return (preact_cjs.createElement(internal_cjs.StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));\n    }\n}\n\nclass TableListItemEvent extends internal_cjs.BaseComponent {\n    render() {\n        let { props, context } = this;\n        let { options } = context;\n        let { seg } = props;\n        let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;\n        let timeText = internal_cjs.buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);\n        return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { elTag: \"a\", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: internal_cjs.getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));\n    }\n}\nfunction renderInnerContent(renderProps) {\n    return (preact_cjs.createElement(preact_cjs.Fragment, null,\n        preact_cjs.createElement(\"div\", { className: \"fc-daygrid-event-dot\", style: { borderColor: renderProps.borderColor || renderProps.backgroundColor } }),\n        renderProps.timeText && (preact_cjs.createElement(\"div\", { className: \"fc-event-time\" }, renderProps.timeText)),\n        preact_cjs.createElement(\"div\", { className: \"fc-event-title\" }, renderProps.event.title || preact_cjs.createElement(preact_cjs.Fragment, null, \"\\u00A0\"))));\n}\n\nclass TableCellMoreLink extends internal_cjs.BaseComponent {\n    constructor() {\n        super(...arguments);\n        this.compileSegs = internal_cjs.memoize(compileSegs);\n    }\n    render() {\n        let { props } = this;\n        let { allSegs, invisibleSegs } = this.compileSegs(props.singlePlacements);\n        return (preact_cjs.createElement(internal_cjs.MoreLinkContainer, { elClasses: ['fc-daygrid-more-link'], dateProfile: props.dateProfile, todayRange: props.todayRange, allDayDate: props.allDayDate, moreCnt: props.moreCnt, allSegs: allSegs, hiddenSegs: invisibleSegs, alignmentElRef: props.alignmentElRef, alignGridTop: props.alignGridTop, extraDateSpan: props.extraDateSpan, popoverContent: () => {\n                let isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) ||\n                    (props.eventResize ? props.eventResize.affectedInstances : null) ||\n                    {};\n                return (preact_cjs.createElement(preact_cjs.Fragment, null, allSegs.map((seg) => {\n                    let instanceId = seg.eventRange.instance.instanceId;\n                    return (preact_cjs.createElement(\"div\", { className: \"fc-daygrid-event-harness\", key: instanceId, style: {\n                            visibility: isForcedInvisible[instanceId] ? 'hidden' : '',\n                        } }, hasListItemDisplay(seg) ? (preact_cjs.createElement(TableListItemEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal_cjs.getSegMeta(seg, props.todayRange)))) : (preact_cjs.createElement(TableBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal_cjs.getSegMeta(seg, props.todayRange))))));\n                })));\n            } }));\n    }\n}\nfunction compileSegs(singlePlacements) {\n    let allSegs = [];\n    let invisibleSegs = [];\n    for (let placement of singlePlacements) {\n        allSegs.push(placement.seg);\n        if (!placement.isVisible) {\n            invisibleSegs.push(placement.seg);\n        }\n    }\n    return { allSegs, invisibleSegs };\n}\n\nconst DEFAULT_WEEK_NUM_FORMAT = internal_cjs.createFormatter({ week: 'narrow' });\nclass TableCell extends internal_cjs.DateComponent {\n    constructor() {\n        super(...arguments);\n        this.rootElRef = preact_cjs.createRef();\n        this.state = {\n            dayNumberId: internal_cjs.getUniqueDomId(),\n        };\n        this.handleRootEl = (el) => {\n            internal_cjs.setRef(this.rootElRef, el);\n            internal_cjs.setRef(this.props.elRef, el);\n        };\n    }\n    render() {\n        let { context, props, state, rootElRef } = this;\n        let { options, dateEnv } = context;\n        let { date, dateProfile } = props;\n        // TODO: memoize this?\n        const isMonthStart = props.showDayNumber &&\n            shouldDisplayMonthStart(date, dateProfile.currentRange, dateEnv);\n        return (preact_cjs.createElement(internal_cjs.DayCellContainer, { elTag: \"td\", elRef: this.handleRootEl, elClasses: [\n                'fc-daygrid-day',\n                ...(props.extraClassNames || []),\n            ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), (props.showDayNumber ? { 'aria-labelledby': state.dayNumberId } : {})), { role: 'gridcell' }), defaultGenerator: renderTopInner, date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, isMonthStart: isMonthStart, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => (preact_cjs.createElement(\"div\", { ref: props.innerElRef, className: \"fc-daygrid-day-frame fc-scrollgrid-sync-inner\", style: { minHeight: props.minHeight } },\n            props.showWeekNumber && (preact_cjs.createElement(internal_cjs.WeekNumberContainer, { elTag: \"a\", elClasses: ['fc-daygrid-week-number'], elAttrs: internal_cjs.buildNavLinkAttrs(context, date, 'week'), date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT })),\n            !renderProps.isDisabled &&\n                (props.showDayNumber || internal_cjs.hasCustomDayCellContent(options) || props.forceDayTop) ? (preact_cjs.createElement(\"div\", { className: \"fc-daygrid-day-top\" },\n                preact_cjs.createElement(InnerContent, { elTag: \"a\", elClasses: [\n                        'fc-daygrid-day-number',\n                        isMonthStart && 'fc-daygrid-month-start',\n                    ], elAttrs: Object.assign(Object.assign({}, internal_cjs.buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) }))) : props.showDayNumber ? (\n            // for creating correct amount of space (see issue #7162)\n            preact_cjs.createElement(\"div\", { className: \"fc-daygrid-day-top\", style: { visibility: 'hidden' } },\n                preact_cjs.createElement(\"a\", { className: \"fc-daygrid-day-number\" }, \"\\u00A0\"))) : undefined,\n            preact_cjs.createElement(\"div\", { className: \"fc-daygrid-day-events\", ref: props.fgContentElRef },\n                props.fgContent,\n                preact_cjs.createElement(\"div\", { className: \"fc-daygrid-day-bottom\", style: { marginTop: props.moreMarginTop } },\n                    preact_cjs.createElement(TableCellMoreLink, { allDayDate: date, singlePlacements: props.singlePlacements, moreCnt: props.moreCnt, alignmentElRef: rootElRef, alignGridTop: !props.showDayNumber, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange }))),\n            preact_cjs.createElement(\"div\", { className: \"fc-daygrid-day-bg\" }, props.bgContent)))));\n    }\n}\nfunction renderTopInner(props) {\n    return props.dayNumberText || preact_cjs.createElement(preact_cjs.Fragment, null, \"\\u00A0\");\n}\nfunction shouldDisplayMonthStart(date, currentRange, dateEnv) {\n    const { start: currentStart, end: currentEnd } = currentRange;\n    const currentEndIncl = internal_cjs.addMs(currentEnd, -1);\n    const currentFirstYear = dateEnv.getYear(currentStart);\n    const currentFirstMonth = dateEnv.getMonth(currentStart);\n    const currentLastYear = dateEnv.getYear(currentEndIncl);\n    const currentLastMonth = dateEnv.getMonth(currentEndIncl);\n    // spans more than one month?\n    return !(currentFirstYear === currentLastYear && currentFirstMonth === currentLastMonth) &&\n        Boolean(\n        // first date in current view?\n        date.valueOf() === currentStart.valueOf() ||\n            // a month-start that's within the current range?\n            (dateEnv.getDay(date) === 1 && date.valueOf() < currentEnd.valueOf()));\n}\n\nfunction generateSegKey(seg) {\n    return seg.eventRange.instance.instanceId + ':' + seg.firstCol;\n}\nfunction generateSegUid(seg) {\n    return generateSegKey(seg) + ':' + seg.lastCol;\n}\nfunction computeFgSegPlacement(segs, // assumed already sorted\ndayMaxEvents, dayMaxEventRows, strictOrder, segHeights, maxContentHeight, cells) {\n    let hierarchy = new DayGridSegHierarchy((segEntry) => {\n        // TODO: more DRY with generateSegUid\n        let segUid = segs[segEntry.index].eventRange.instance.instanceId +\n            ':' + segEntry.span.start +\n            ':' + (segEntry.span.end - 1);\n        // if no thickness known, assume 1 (if 0, so small it always fits)\n        return segHeights[segUid] || 1;\n    });\n    hierarchy.allowReslicing = true;\n    hierarchy.strictOrder = strictOrder;\n    if (dayMaxEvents === true || dayMaxEventRows === true) {\n        hierarchy.maxCoord = maxContentHeight;\n        hierarchy.hiddenConsumes = true;\n    }\n    else if (typeof dayMaxEvents === 'number') {\n        hierarchy.maxStackCnt = dayMaxEvents;\n    }\n    else if (typeof dayMaxEventRows === 'number') {\n        hierarchy.maxStackCnt = dayMaxEventRows;\n        hierarchy.hiddenConsumes = true;\n    }\n    // create segInputs only for segs with known heights\n    let segInputs = [];\n    let unknownHeightSegs = [];\n    for (let i = 0; i < segs.length; i += 1) {\n        let seg = segs[i];\n        let segUid = generateSegUid(seg);\n        let eventHeight = segHeights[segUid];\n        if (eventHeight != null) {\n            segInputs.push({\n                index: i,\n                span: {\n                    start: seg.firstCol,\n                    end: seg.lastCol + 1,\n                },\n            });\n        }\n        else {\n            unknownHeightSegs.push(seg);\n        }\n    }\n    let hiddenEntries = hierarchy.addSegs(segInputs);\n    let segRects = hierarchy.toRects();\n    let { singleColPlacements, multiColPlacements, leftoverMargins } = placeRects(segRects, segs, cells);\n    let moreCnts = [];\n    let moreMarginTops = [];\n    // add segs with unknown heights\n    for (let seg of unknownHeightSegs) {\n        multiColPlacements[seg.firstCol].push({\n            seg,\n            isVisible: false,\n            isAbsolute: true,\n            absoluteTop: 0,\n            marginTop: 0,\n        });\n        for (let col = seg.firstCol; col <= seg.lastCol; col += 1) {\n            singleColPlacements[col].push({\n                seg: resliceSeg(seg, col, col + 1, cells),\n                isVisible: false,\n                isAbsolute: false,\n                absoluteTop: 0,\n                marginTop: 0,\n            });\n        }\n    }\n    // add the hidden entries\n    for (let col = 0; col < cells.length; col += 1) {\n        moreCnts.push(0);\n    }\n    for (let hiddenEntry of hiddenEntries) {\n        let seg = segs[hiddenEntry.index];\n        let hiddenSpan = hiddenEntry.span;\n        multiColPlacements[hiddenSpan.start].push({\n            seg: resliceSeg(seg, hiddenSpan.start, hiddenSpan.end, cells),\n            isVisible: false,\n            isAbsolute: true,\n            absoluteTop: 0,\n            marginTop: 0,\n        });\n        for (let col = hiddenSpan.start; col < hiddenSpan.end; col += 1) {\n            moreCnts[col] += 1;\n            singleColPlacements[col].push({\n                seg: resliceSeg(seg, col, col + 1, cells),\n                isVisible: false,\n                isAbsolute: false,\n                absoluteTop: 0,\n                marginTop: 0,\n            });\n        }\n    }\n    // deal with leftover margins\n    for (let col = 0; col < cells.length; col += 1) {\n        moreMarginTops.push(leftoverMargins[col]);\n    }\n    return { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops };\n}\n// rects ordered by top coord, then left\nfunction placeRects(allRects, segs, cells) {\n    let rectsByEachCol = groupRectsByEachCol(allRects, cells.length);\n    let singleColPlacements = [];\n    let multiColPlacements = [];\n    let leftoverMargins = [];\n    for (let col = 0; col < cells.length; col += 1) {\n        let rects = rectsByEachCol[col];\n        // compute all static segs in singlePlacements\n        let singlePlacements = [];\n        let currentHeight = 0;\n        let currentMarginTop = 0;\n        for (let rect of rects) {\n            let seg = segs[rect.index];\n            singlePlacements.push({\n                seg: resliceSeg(seg, col, col + 1, cells),\n                isVisible: true,\n                isAbsolute: false,\n                absoluteTop: rect.levelCoord,\n                marginTop: rect.levelCoord - currentHeight,\n            });\n            currentHeight = rect.levelCoord + rect.thickness;\n        }\n        // compute mixed static/absolute segs in multiPlacements\n        let multiPlacements = [];\n        currentHeight = 0;\n        currentMarginTop = 0;\n        for (let rect of rects) {\n            let seg = segs[rect.index];\n            let isAbsolute = rect.span.end - rect.span.start > 1; // multi-column?\n            let isFirstCol = rect.span.start === col;\n            currentMarginTop += rect.levelCoord - currentHeight; // amount of space since bottom of previous seg\n            currentHeight = rect.levelCoord + rect.thickness; // height will now be bottom of current seg\n            if (isAbsolute) {\n                currentMarginTop += rect.thickness;\n                if (isFirstCol) {\n                    multiPlacements.push({\n                        seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),\n                        isVisible: true,\n                        isAbsolute: true,\n                        absoluteTop: rect.levelCoord,\n                        marginTop: 0,\n                    });\n                }\n            }\n            else if (isFirstCol) {\n                multiPlacements.push({\n                    seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),\n                    isVisible: true,\n                    isAbsolute: false,\n                    absoluteTop: rect.levelCoord,\n                    marginTop: currentMarginTop, // claim the margin\n                });\n                currentMarginTop = 0;\n            }\n        }\n        singleColPlacements.push(singlePlacements);\n        multiColPlacements.push(multiPlacements);\n        leftoverMargins.push(currentMarginTop);\n    }\n    return { singleColPlacements, multiColPlacements, leftoverMargins };\n}\nfunction groupRectsByEachCol(rects, colCnt) {\n    let rectsByEachCol = [];\n    for (let col = 0; col < colCnt; col += 1) {\n        rectsByEachCol.push([]);\n    }\n    for (let rect of rects) {\n        for (let col = rect.span.start; col < rect.span.end; col += 1) {\n            rectsByEachCol[col].push(rect);\n        }\n    }\n    return rectsByEachCol;\n}\nfunction resliceSeg(seg, spanStart, spanEnd, cells) {\n    if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {\n        return seg;\n    }\n    let eventRange = seg.eventRange;\n    let origRange = eventRange.range;\n    let slicedRange = internal_cjs.intersectRanges(origRange, {\n        start: cells[spanStart].date,\n        end: internal_cjs.addDays(cells[spanEnd - 1].date, 1),\n    });\n    return Object.assign(Object.assign({}, seg), { firstCol: spanStart, lastCol: spanEnd - 1, eventRange: {\n            def: eventRange.def,\n            ui: Object.assign(Object.assign({}, eventRange.ui), { durationEditable: false }),\n            instance: eventRange.instance,\n            range: slicedRange,\n        }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() });\n}\nclass DayGridSegHierarchy extends internal_cjs.SegHierarchy {\n    constructor() {\n        super(...arguments);\n        // config\n        this.hiddenConsumes = false;\n        // allows us to keep hidden entries in the hierarchy so they take up space\n        this.forceHidden = {};\n    }\n    addSegs(segInputs) {\n        const hiddenSegs = super.addSegs(segInputs);\n        const { entriesByLevel } = this;\n        const excludeHidden = (entry) => !this.forceHidden[internal_cjs.buildEntryKey(entry)];\n        // remove the forced-hidden segs\n        for (let level = 0; level < entriesByLevel.length; level += 1) {\n            entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);\n        }\n        return hiddenSegs;\n    }\n    handleInvalidInsertion(insertion, entry, hiddenEntries) {\n        const { entriesByLevel, forceHidden } = this;\n        const { touchingEntry, touchingLevel, touchingLateral } = insertion;\n        // the entry that the new insertion is touching must be hidden\n        if (this.hiddenConsumes && touchingEntry) {\n            const touchingEntryId = internal_cjs.buildEntryKey(touchingEntry);\n            if (!forceHidden[touchingEntryId]) {\n                if (this.allowReslicing) {\n                    // split up the touchingEntry, reinsert it\n                    const hiddenEntry = Object.assign(Object.assign({}, touchingEntry), { span: internal_cjs.intersectSpans(touchingEntry.span, entry.span) });\n                    // reinsert the area that turned into a \"more\" link (so no other entries try to\n                    // occupy the space) but mark it forced-hidden\n                    const hiddenEntryId = internal_cjs.buildEntryKey(hiddenEntry);\n                    forceHidden[hiddenEntryId] = true;\n                    entriesByLevel[touchingLevel][touchingLateral] = hiddenEntry;\n                    hiddenEntries.push(hiddenEntry);\n                    this.splitEntry(touchingEntry, entry, hiddenEntries);\n                }\n                else {\n                    forceHidden[touchingEntryId] = true;\n                    hiddenEntries.push(touchingEntry);\n                }\n            }\n        }\n        // will try to reslice...\n        super.handleInvalidInsertion(insertion, entry, hiddenEntries);\n    }\n}\n\nclass TableRow extends internal_cjs.DateComponent {\n    constructor() {\n        super(...arguments);\n        this.cellElRefs = new internal_cjs.RefMap(); // the <td>\n        this.frameElRefs = new internal_cjs.RefMap(); // the fc-daygrid-day-frame\n        this.fgElRefs = new internal_cjs.RefMap(); // the fc-daygrid-day-events\n        this.segHarnessRefs = new internal_cjs.RefMap(); // indexed by \"instanceId:firstCol\"\n        this.rootElRef = preact_cjs.createRef();\n        this.state = {\n            framePositions: null,\n            maxContentHeight: null,\n            segHeights: {},\n        };\n        this.handleResize = (isForced) => {\n            if (isForced) {\n                this.updateSizing(true); // isExternal=true\n            }\n        };\n    }\n    render() {\n        let { props, state, context } = this;\n        let { options } = context;\n        let colCnt = props.cells.length;\n        let businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);\n        let bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);\n        let highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);\n        let mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);\n        let { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops } = computeFgSegPlacement(internal_cjs.sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.segHeights, state.maxContentHeight, props.cells);\n        let isForcedInvisible = // TODO: messy way to compute this\n         (props.eventDrag && props.eventDrag.affectedInstances) ||\n            (props.eventResize && props.eventResize.affectedInstances) ||\n            {};\n        return (preact_cjs.createElement(\"tr\", { ref: this.rootElRef, role: \"row\" },\n            props.renderIntro && props.renderIntro(),\n            props.cells.map((cell, col) => {\n                let normalFgNodes = this.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);\n                let mirrorFgNodes = this.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);\n                return (preact_cjs.createElement(TableCell, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), innerElRef: this.frameElRefs.createRef(cell.key) /* FF <td> problem, but okay to use for left/right. TODO: rename prop */, dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers, showWeekNumber: props.showWeekNumbers && col === 0, forceDayTop: props.showWeekNumbers /* even displaying weeknum for row, not necessarily day */, todayRange: props.todayRange, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, moreCnt: moreCnts[col], moreMarginTop: moreMarginTops[col], singlePlacements: singleColPlacements[col], fgContentElRef: this.fgElRefs.createRef(cell.key), fgContent: ( // Fragment scopes the keys\n                    preact_cjs.createElement(preact_cjs.Fragment, null,\n                        preact_cjs.createElement(preact_cjs.Fragment, null, normalFgNodes),\n                        preact_cjs.createElement(preact_cjs.Fragment, null, mirrorFgNodes))), bgContent: ( // Fragment scopes the keys\n                    preact_cjs.createElement(preact_cjs.Fragment, null,\n                        this.renderFillSegs(highlightSegsByCol[col], 'highlight'),\n                        this.renderFillSegs(businessHoursByCol[col], 'non-business'),\n                        this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))), minHeight: props.cellMinHeight }));\n            })));\n    }\n    componentDidMount() {\n        this.updateSizing(true);\n        this.context.addResizeHandler(this.handleResize);\n    }\n    componentDidUpdate(prevProps, prevState) {\n        let currentProps = this.props;\n        this.updateSizing(!internal_cjs.isPropsEqual(prevProps, currentProps));\n    }\n    componentWillUnmount() {\n        this.context.removeResizeHandler(this.handleResize);\n    }\n    getHighlightSegs() {\n        let { props } = this;\n        if (props.eventDrag && props.eventDrag.segs.length) { // messy check\n            return props.eventDrag.segs;\n        }\n        if (props.eventResize && props.eventResize.segs.length) { // messy check\n            return props.eventResize.segs;\n        }\n        return props.dateSelectionSegs;\n    }\n    getMirrorSegs() {\n        let { props } = this;\n        if (props.eventResize && props.eventResize.segs.length) { // messy check\n            return props.eventResize.segs;\n        }\n        return [];\n    }\n    renderFgSegs(col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {\n        let { context } = this;\n        let { eventSelection } = this.props;\n        let { framePositions } = this.state;\n        let defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1\n        let isMirror = isDragging || isResizing || isDateSelecting;\n        let nodes = [];\n        if (framePositions) {\n            for (let placement of segPlacements) {\n                let { seg } = placement;\n                let { instanceId } = seg.eventRange.instance;\n                let isVisible = placement.isVisible && !isForcedInvisible[instanceId];\n                let isAbsolute = placement.isAbsolute;\n                let left = '';\n                let right = '';\n                if (isAbsolute) {\n                    if (context.isRtl) {\n                        right = 0;\n                        left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];\n                    }\n                    else {\n                        left = 0;\n                        right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];\n                    }\n                }\n                /*\n                known bug: events that are force to be list-item but span multiple days still take up space in later columns\n                todo: in print view, for multi-day events, don't display title within non-start/end segs\n                */\n                nodes.push(preact_cjs.createElement(\"div\", { className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''), key: generateSegKey(seg), ref: isMirror ? null : this.segHarnessRefs.createRef(generateSegUid(seg)), style: {\n                        visibility: isVisible ? '' : 'hidden',\n                        marginTop: isAbsolute ? '' : placement.marginTop,\n                        top: isAbsolute ? placement.absoluteTop : '',\n                        left,\n                        right,\n                    } }, hasListItemDisplay(seg) ? (preact_cjs.createElement(TableListItemEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal_cjs.getSegMeta(seg, todayRange)))) : (preact_cjs.createElement(TableBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal_cjs.getSegMeta(seg, todayRange))))));\n            }\n        }\n        return nodes;\n    }\n    renderFillSegs(segs, fillType) {\n        let { isRtl } = this.context;\n        let { todayRange } = this.props;\n        let { framePositions } = this.state;\n        let nodes = [];\n        if (framePositions) {\n            for (let seg of segs) {\n                let leftRightCss = isRtl ? {\n                    right: 0,\n                    left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol],\n                } : {\n                    left: 0,\n                    right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol],\n                };\n                nodes.push(preact_cjs.createElement(\"div\", { key: internal_cjs.buildEventRangeKey(seg.eventRange), className: \"fc-daygrid-bg-harness\", style: leftRightCss }, fillType === 'bg-event' ?\n                    preact_cjs.createElement(internal_cjs.BgEvent, Object.assign({ seg: seg }, internal_cjs.getSegMeta(seg, todayRange))) :\n                    internal_cjs.renderFill(fillType)));\n            }\n        }\n        return preact_cjs.createElement(preact_cjs.Fragment, {}, ...nodes);\n    }\n    updateSizing(isExternalSizingChange) {\n        let { props, state, frameElRefs } = this;\n        if (!props.forPrint &&\n            props.clientWidth !== null // positioning ready?\n        ) {\n            if (isExternalSizingChange) {\n                let frameEls = props.cells.map((cell) => frameElRefs.currentMap[cell.key]);\n                if (frameEls.length) {\n                    let originEl = this.rootElRef.current;\n                    let newPositionCache = new internal_cjs.PositionCache(originEl, frameEls, true, // isHorizontal\n                    false);\n                    if (!state.framePositions || !state.framePositions.similarTo(newPositionCache)) {\n                        this.setState({\n                            framePositions: new internal_cjs.PositionCache(originEl, frameEls, true, // isHorizontal\n                            false),\n                        });\n                    }\n                }\n            }\n            const oldSegHeights = this.state.segHeights;\n            const newSegHeights = this.querySegHeights();\n            const limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;\n            this.safeSetState({\n                // HACK to prevent oscillations of events being shown/hidden from max-event-rows\n                // Essentially, once you compute an element's height, never null-out.\n                // TODO: always display all events, as visibility:hidden?\n                segHeights: Object.assign(Object.assign({}, oldSegHeights), newSegHeights),\n                maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null,\n            });\n        }\n    }\n    querySegHeights() {\n        let segElMap = this.segHarnessRefs.currentMap;\n        let segHeights = {};\n        // get the max height amongst instance segs\n        for (let segUid in segElMap) {\n            let height = Math.round(segElMap[segUid].getBoundingClientRect().height);\n            segHeights[segUid] = Math.max(segHeights[segUid] || 0, height);\n        }\n        return segHeights;\n    }\n    computeMaxContentHeight() {\n        let firstKey = this.props.cells[0].key;\n        let cellEl = this.cellElRefs.currentMap[firstKey];\n        let fcContainerEl = this.fgElRefs.currentMap[firstKey];\n        return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;\n    }\n    getCellEls() {\n        let elMap = this.cellElRefs.currentMap;\n        return this.props.cells.map((cell) => elMap[cell.key]);\n    }\n}\nTableRow.addStateEquality({\n    segHeights: internal_cjs.isPropsEqual,\n});\nfunction buildMirrorPlacements(mirrorSegs, colPlacements) {\n    if (!mirrorSegs.length) {\n        return [];\n    }\n    let topsByInstanceId = buildAbsoluteTopHash(colPlacements); // TODO: cache this at first render?\n    return mirrorSegs.map((seg) => ({\n        seg,\n        isVisible: true,\n        isAbsolute: true,\n        absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],\n        marginTop: 0,\n    }));\n}\nfunction buildAbsoluteTopHash(colPlacements) {\n    let topsByInstanceId = {};\n    for (let placements of colPlacements) {\n        for (let placement of placements) {\n            topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;\n        }\n    }\n    return topsByInstanceId;\n}\n\nclass TableRows extends internal_cjs.DateComponent {\n    constructor() {\n        super(...arguments);\n        this.splitBusinessHourSegs = internal_cjs.memoize(splitSegsByRow);\n        this.splitBgEventSegs = internal_cjs.memoize(splitAllDaySegsByRow);\n        this.splitFgEventSegs = internal_cjs.memoize(splitSegsByRow);\n        this.splitDateSelectionSegs = internal_cjs.memoize(splitSegsByRow);\n        this.splitEventDrag = internal_cjs.memoize(splitInteractionByRow);\n        this.splitEventResize = internal_cjs.memoize(splitInteractionByRow);\n        this.rowRefs = new internal_cjs.RefMap();\n    }\n    render() {\n        let { props, context } = this;\n        let rowCnt = props.cells.length;\n        let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);\n        let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);\n        let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);\n        let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);\n        let eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);\n        let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);\n        // for DayGrid view with many rows, force a min-height on cells so doesn't appear squished\n        // choose 7 because a month view will have max 6 rows\n        let cellMinHeight = (rowCnt >= 7 && props.clientWidth) ?\n            props.clientWidth / context.options.aspectRatio / 6 :\n            null;\n        return (preact_cjs.createElement(internal_cjs.NowTimer, { unit: \"day\" }, (nowDate, todayRange) => (preact_cjs.createElement(preact_cjs.Fragment, null, props.cells.map((cells, row) => (preact_cjs.createElement(TableRow, { ref: this.rowRefs.createRef(row), key: cells.length\n                ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */\n                : row // in case there are no cells (like when resource view is loading)\n            , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: props.dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row], fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, cellMinHeight: cellMinHeight, forPrint: props.forPrint })))))));\n    }\n    componentDidMount() {\n        this.registerInteractiveComponent();\n    }\n    componentDidUpdate() {\n        // for if started with zero cells\n        this.registerInteractiveComponent();\n    }\n    registerInteractiveComponent() {\n        if (!this.rootEl) {\n            // HACK: need a daygrid wrapper parent to do positioning\n            // NOTE: a daygrid resource view w/o resources can have zero cells\n            const firstCellEl = this.rowRefs.currentMap[0].getCellEls()[0];\n            const rootEl = firstCellEl ? firstCellEl.closest('.fc-daygrid-body') : null;\n            if (rootEl) {\n                this.rootEl = rootEl;\n                this.context.registerInteractiveComponent(this, {\n                    el: rootEl,\n                    isHitComboAllowed: this.props.isHitComboAllowed,\n                });\n            }\n        }\n    }\n    componentWillUnmount() {\n        if (this.rootEl) {\n            this.context.unregisterInteractiveComponent(this);\n            this.rootEl = null;\n        }\n    }\n    // Hit System\n    // ----------------------------------------------------------------------------------------------------\n    prepareHits() {\n        this.rowPositions = new internal_cjs.PositionCache(this.rootEl, this.rowRefs.collect().map((rowObj) => rowObj.getCellEls()[0]), // first cell el in each row. TODO: not optimal\n        false, true);\n        this.colPositions = new internal_cjs.PositionCache(this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row\n        true, // horizontal\n        false);\n    }\n    queryHit(positionLeft, positionTop) {\n        let { colPositions, rowPositions } = this;\n        let col = colPositions.leftToIndex(positionLeft);\n        let row = rowPositions.topToIndex(positionTop);\n        if (row != null && col != null) {\n            let cell = this.props.cells[row][col];\n            return {\n                dateProfile: this.props.dateProfile,\n                dateSpan: Object.assign({ range: this.getCellRange(row, col), allDay: true }, cell.extraDateSpan),\n                dayEl: this.getCellEl(row, col),\n                rect: {\n                    left: colPositions.lefts[col],\n                    right: colPositions.rights[col],\n                    top: rowPositions.tops[row],\n                    bottom: rowPositions.bottoms[row],\n                },\n                layer: 0,\n            };\n        }\n        return null;\n    }\n    getCellEl(row, col) {\n        return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal\n    }\n    getCellRange(row, col) {\n        let start = this.props.cells[row][col].date;\n        let end = internal_cjs.addDays(start, 1);\n        return { start, end };\n    }\n}\nfunction splitAllDaySegsByRow(segs, rowCnt) {\n    return splitSegsByRow(segs.filter(isSegAllDay), rowCnt);\n}\nfunction isSegAllDay(seg) {\n    return seg.eventRange.def.allDay;\n}\n\nclass Table extends internal_cjs.DateComponent {\n    constructor() {\n        super(...arguments);\n        this.elRef = preact_cjs.createRef();\n        this.needsScrollReset = false;\n    }\n    render() {\n        let { props } = this;\n        let { dayMaxEventRows, dayMaxEvents, expandRows } = props;\n        let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;\n        // if rows can't expand to fill fixed height, can't do balanced-height event limit\n        // TODO: best place to normalize these options?\n        if (limitViaBalanced && !expandRows) {\n            limitViaBalanced = false;\n            dayMaxEventRows = null;\n            dayMaxEvents = null;\n        }\n        let classNames = [\n            'fc-daygrid-body',\n            limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced',\n            expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others?\n        ];\n        return (preact_cjs.createElement(\"div\", { ref: this.elRef, className: classNames.join(' '), style: {\n                // these props are important to give this wrapper correct dimensions for interactions\n                // TODO: if we set it here, can we avoid giving to inner tables?\n                width: props.clientWidth,\n                minWidth: props.tableMinWidth,\n            } },\n            preact_cjs.createElement(\"table\", { role: \"presentation\", className: \"fc-scrollgrid-sync-table\", style: {\n                    width: props.clientWidth,\n                    minWidth: props.tableMinWidth,\n                    height: expandRows ? props.clientHeight : '',\n                } },\n                props.colGroupNode,\n                preact_cjs.createElement(\"tbody\", { role: \"presentation\" },\n                    preact_cjs.createElement(TableRows, { dateProfile: props.dateProfile, cells: props.cells, renderRowIntro: props.renderRowIntro, showWeekNumbers: props.showWeekNumbers, clientWidth: props.clientWidth, clientHeight: props.clientHeight, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed })))));\n    }\n    componentDidMount() {\n        this.requestScrollReset();\n    }\n    componentDidUpdate(prevProps) {\n        if (prevProps.dateProfile !== this.props.dateProfile) {\n            this.requestScrollReset();\n        }\n        else {\n            this.flushScrollReset();\n        }\n    }\n    requestScrollReset() {\n        this.needsScrollReset = true;\n        this.flushScrollReset();\n    }\n    flushScrollReset() {\n        if (this.needsScrollReset &&\n            this.props.clientWidth // sizes computed?\n        ) {\n            const subjectEl = getScrollSubjectEl(this.elRef.current, this.props.dateProfile);\n            if (subjectEl) {\n                const originEl = subjectEl.closest('.fc-daygrid-body');\n                const scrollEl = originEl.closest('.fc-scroller');\n                const scrollTop = subjectEl.getBoundingClientRect().top -\n                    originEl.getBoundingClientRect().top;\n                scrollEl.scrollTop = scrollTop ? (scrollTop + 1) : 0; // overcome border\n            }\n            this.needsScrollReset = false;\n        }\n    }\n}\nfunction getScrollSubjectEl(containerEl, dateProfile) {\n    let el;\n    if (dateProfile.currentRangeUnit.match(/year|month/)) {\n        el = containerEl.querySelector(`[data-date=\"${internal_cjs.formatIsoMonthStr(dateProfile.currentDate)}-01\"]`);\n        // even if view is month-based, first-of-month might be hidden...\n    }\n    if (!el) {\n        el = containerEl.querySelector(`[data-date=\"${internal_cjs.formatDayString(dateProfile.currentDate)}\"]`);\n        // could still be hidden if an interior-view hidden day\n    }\n    return el;\n}\n\nclass DayTableSlicer extends internal_cjs.Slicer {\n    constructor() {\n        super(...arguments);\n        this.forceDayIfListItem = true;\n    }\n    sliceRange(dateRange, dayTableModel) {\n        return dayTableModel.sliceRange(dateRange);\n    }\n}\n\nclass DayTable extends internal_cjs.DateComponent {\n    constructor() {\n        super(...arguments);\n        this.slicer = new DayTableSlicer();\n        this.tableRef = preact_cjs.createRef();\n    }\n    render() {\n        let { props, context } = this;\n        return (preact_cjs.createElement(Table, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })));\n    }\n}\n\nclass DayTableView extends TableView {\n    constructor() {\n        super(...arguments);\n        this.buildDayTableModel = internal_cjs.memoize(buildDayTableModel);\n        this.headerRef = preact_cjs.createRef();\n        this.tableRef = preact_cjs.createRef();\n        // can't override any lifecycle methods from parent\n    }\n    render() {\n        let { options, dateProfileGenerator } = this.context;\n        let { props } = this;\n        let dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);\n        let headerContent = options.dayHeaders && (preact_cjs.createElement(internal_cjs.DayHeader, { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 }));\n        let bodyContent = (contentArg) => (preact_cjs.createElement(DayTable, { ref: this.tableRef, dateProfile: props.dateProfile, dayTableModel: dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }));\n        return options.dayMinWidth\n            ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth)\n            : this.renderSimpleLayout(headerContent, bodyContent);\n    }\n}\nfunction buildDayTableModel(dateProfile, dateProfileGenerator) {\n    let daySeries = new internal_cjs.DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);\n    return new internal_cjs.DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));\n}\n\nclass TableDateProfileGenerator extends internal_cjs.DateProfileGenerator {\n    // Computes the date range that will be rendered\n    buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {\n        let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay);\n        let { props } = this;\n        return buildDayTableRenderRange({\n            currentRange: renderRange,\n            snapToWeek: /^(year|month)$/.test(currentRangeUnit),\n            fixedWeekCount: props.fixedWeekCount,\n            dateEnv: props.dateEnv,\n        });\n    }\n}\nfunction buildDayTableRenderRange(props) {\n    let { dateEnv, currentRange } = props;\n    let { start, end } = currentRange;\n    let endOfWeek;\n    // year and month views should be aligned with weeks. this is already done for week\n    if (props.snapToWeek) {\n        start = dateEnv.startOfWeek(start);\n        // make end-of-week if not already\n        endOfWeek = dateEnv.startOfWeek(end);\n        if (endOfWeek.valueOf() !== end.valueOf()) {\n            end = internal_cjs.addWeeks(endOfWeek, 1);\n        }\n    }\n    // ensure 6 weeks\n    if (props.fixedWeekCount) {\n        // TODO: instead of these date-math gymnastics (for multimonth view),\n        // compute dateprofiles of all months, then use start of first and end of last.\n        let lastMonthRenderStart = dateEnv.startOfWeek(dateEnv.startOfMonth(internal_cjs.addDays(currentRange.end, -1)));\n        let rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\n        internal_cjs.diffWeeks(lastMonthRenderStart, end));\n        end = internal_cjs.addWeeks(end, 6 - rowCnt);\n    }\n    return { start, end };\n}\n\nvar css_248z = \":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\\\"\\\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:\\\"\\\";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}\";\ninternal_cjs.injectStyles(css_248z);\n\nexports.DayGridView = DayTableView;\nexports.DayTable = DayTable;\nexports.DayTableSlicer = DayTableSlicer;\nexports.Table = Table;\nexports.TableDateProfileGenerator = TableDateProfileGenerator;\nexports.TableRows = TableRows;\nexports.TableView = TableView;\nexports.buildDayTableModel = buildDayTableModel;\nexports.buildDayTableRenderRange = buildDayTableRenderRange;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar index_cjs = require('@fullcalendar/core/index.cjs');\nvar internal_cjs = require('@fullcalendar/core/internal.cjs');\n\ninternal_cjs.config.touchMouseIgnoreWait = 500;\nlet ignoreMouseDepth = 0;\nlet listenerCnt = 0;\nlet isWindowTouchMoveCancelled = false;\n/*\nUses a \"pointer\" abstraction, which monitors UI events for both mouse and touch.\nTracks when the pointer \"drags\" on a certain element, meaning down+move+up.\n\nAlso, tracks if there was touch-scrolling.\nAlso, can prevent touch-scrolling from happening.\nAlso, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.\n\nemits:\n- pointerdown\n- pointermove\n- pointerup\n*/\nclass PointerDragging {\n    constructor(containerEl) {\n        this.subjectEl = null;\n        // options that can be directly assigned by caller\n        this.selector = ''; // will cause subjectEl in all emitted events to be this element\n        this.handleSelector = '';\n        this.shouldIgnoreMove = false;\n        this.shouldWatchScroll = true; // for simulating pointermove on scroll\n        // internal states\n        this.isDragging = false;\n        this.isTouchDragging = false;\n        this.wasTouchScroll = false;\n        // Mouse\n        // ----------------------------------------------------------------------------------------------------\n        this.handleMouseDown = (ev) => {\n            if (!this.shouldIgnoreMouse() &&\n                isPrimaryMouseButton(ev) &&\n                this.tryStart(ev)) {\n                let pev = this.createEventFromMouse(ev, true);\n                this.emitter.trigger('pointerdown', pev);\n                this.initScrollWatch(pev);\n                if (!this.shouldIgnoreMove) {\n                    document.addEventListener('mousemove', this.handleMouseMove);\n                }\n                document.addEventListener('mouseup', this.handleMouseUp);\n            }\n        };\n        this.handleMouseMove = (ev) => {\n            let pev = this.createEventFromMouse(ev);\n            this.recordCoords(pev);\n            this.emitter.trigger('pointermove', pev);\n        };\n        this.handleMouseUp = (ev) => {\n            document.removeEventListener('mousemove', this.handleMouseMove);\n            document.removeEventListener('mouseup', this.handleMouseUp);\n            this.emitter.trigger('pointerup', this.createEventFromMouse(ev));\n            this.cleanup(); // call last so that pointerup has access to props\n        };\n        // Touch\n        // ----------------------------------------------------------------------------------------------------\n        this.handleTouchStart = (ev) => {\n            if (this.tryStart(ev)) {\n                this.isTouchDragging = true;\n                let pev = this.createEventFromTouch(ev, true);\n                this.emitter.trigger('pointerdown', pev);\n                this.initScrollWatch(pev);\n                // unlike mouse, need to attach to target, not document\n                // https://stackoverflow.com/a/45760014\n                let targetEl = ev.target;\n                if (!this.shouldIgnoreMove) {\n                    targetEl.addEventListener('touchmove', this.handleTouchMove);\n                }\n                targetEl.addEventListener('touchend', this.handleTouchEnd);\n                targetEl.addEventListener('touchcancel', this.handleTouchEnd); // treat it as a touch end\n                // attach a handler to get called when ANY scroll action happens on the page.\n                // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n                // http://stackoverflow.com/a/32954565/96342\n                window.addEventListener('scroll', this.handleTouchScroll, true);\n            }\n        };\n        this.handleTouchMove = (ev) => {\n            let pev = this.createEventFromTouch(ev);\n            this.recordCoords(pev);\n            this.emitter.trigger('pointermove', pev);\n        };\n        this.handleTouchEnd = (ev) => {\n            if (this.isDragging) { // done to guard against touchend followed by touchcancel\n                let targetEl = ev.target;\n                targetEl.removeEventListener('touchmove', this.handleTouchMove);\n                targetEl.removeEventListener('touchend', this.handleTouchEnd);\n                targetEl.removeEventListener('touchcancel', this.handleTouchEnd);\n                window.removeEventListener('scroll', this.handleTouchScroll, true); // useCaptured=true\n                this.emitter.trigger('pointerup', this.createEventFromTouch(ev));\n                this.cleanup(); // call last so that pointerup has access to props\n                this.isTouchDragging = false;\n                startIgnoringMouse();\n            }\n        };\n        this.handleTouchScroll = () => {\n            this.wasTouchScroll = true;\n        };\n        this.handleScroll = (ev) => {\n            if (!this.shouldIgnoreMove) {\n                let pageX = (window.scrollX - this.prevScrollX) + this.prevPageX;\n                let pageY = (window.scrollY - this.prevScrollY) + this.prevPageY;\n                this.emitter.trigger('pointermove', {\n                    origEvent: ev,\n                    isTouch: this.isTouchDragging,\n                    subjectEl: this.subjectEl,\n                    pageX,\n                    pageY,\n                    deltaX: pageX - this.origPageX,\n                    deltaY: pageY - this.origPageY,\n                });\n            }\n        };\n        this.containerEl = containerEl;\n        this.emitter = new internal_cjs.Emitter();\n        containerEl.addEventListener('mousedown', this.handleMouseDown);\n        containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });\n        listenerCreated();\n    }\n    destroy() {\n        this.containerEl.removeEventListener('mousedown', this.handleMouseDown);\n        this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });\n        listenerDestroyed();\n    }\n    tryStart(ev) {\n        let subjectEl = this.querySubjectEl(ev);\n        let downEl = ev.target;\n        if (subjectEl &&\n            (!this.handleSelector || internal_cjs.elementClosest(downEl, this.handleSelector))) {\n            this.subjectEl = subjectEl;\n            this.isDragging = true; // do this first so cancelTouchScroll will work\n            this.wasTouchScroll = false;\n            return true;\n        }\n        return false;\n    }\n    cleanup() {\n        isWindowTouchMoveCancelled = false;\n        this.isDragging = false;\n        this.subjectEl = null;\n        // keep wasTouchScroll around for later access\n        this.destroyScrollWatch();\n    }\n    querySubjectEl(ev) {\n        if (this.selector) {\n            return internal_cjs.elementClosest(ev.target, this.selector);\n        }\n        return this.containerEl;\n    }\n    shouldIgnoreMouse() {\n        return ignoreMouseDepth || this.isTouchDragging;\n    }\n    // can be called by user of this class, to cancel touch-based scrolling for the current drag\n    cancelTouchScroll() {\n        if (this.isDragging) {\n            isWindowTouchMoveCancelled = true;\n        }\n    }\n    // Scrolling that simulates pointermoves\n    // ----------------------------------------------------------------------------------------------------\n    initScrollWatch(ev) {\n        if (this.shouldWatchScroll) {\n            this.recordCoords(ev);\n            window.addEventListener('scroll', this.handleScroll, true); // useCapture=true\n        }\n    }\n    recordCoords(ev) {\n        if (this.shouldWatchScroll) {\n            this.prevPageX = ev.pageX;\n            this.prevPageY = ev.pageY;\n            this.prevScrollX = window.scrollX;\n            this.prevScrollY = window.scrollY;\n        }\n    }\n    destroyScrollWatch() {\n        if (this.shouldWatchScroll) {\n            window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true\n        }\n    }\n    // Event Normalization\n    // ----------------------------------------------------------------------------------------------------\n    createEventFromMouse(ev, isFirst) {\n        let deltaX = 0;\n        let deltaY = 0;\n        // TODO: repeat code\n        if (isFirst) {\n            this.origPageX = ev.pageX;\n            this.origPageY = ev.pageY;\n        }\n        else {\n            deltaX = ev.pageX - this.origPageX;\n            deltaY = ev.pageY - this.origPageY;\n        }\n        return {\n            origEvent: ev,\n            isTouch: false,\n            subjectEl: this.subjectEl,\n            pageX: ev.pageX,\n            pageY: ev.pageY,\n            deltaX,\n            deltaY,\n        };\n    }\n    createEventFromTouch(ev, isFirst) {\n        let touches = ev.touches;\n        let pageX;\n        let pageY;\n        let deltaX = 0;\n        let deltaY = 0;\n        // if touch coords available, prefer,\n        // because FF would give bad ev.pageX ev.pageY\n        if (touches && touches.length) {\n            pageX = touches[0].pageX;\n            pageY = touches[0].pageY;\n        }\n        else {\n            pageX = ev.pageX;\n            pageY = ev.pageY;\n        }\n        // TODO: repeat code\n        if (isFirst) {\n            this.origPageX = pageX;\n            this.origPageY = pageY;\n        }\n        else {\n            deltaX = pageX - this.origPageX;\n            deltaY = pageY - this.origPageY;\n        }\n        return {\n            origEvent: ev,\n            isTouch: true,\n            subjectEl: this.subjectEl,\n            pageX,\n            pageY,\n            deltaX,\n            deltaY,\n        };\n    }\n}\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\nfunction isPrimaryMouseButton(ev) {\n    return ev.button === 0 && !ev.ctrlKey;\n}\n// Ignoring fake mouse events generated by touch\n// ----------------------------------------------------------------------------------------------------\nfunction startIgnoringMouse() {\n    ignoreMouseDepth += 1;\n    setTimeout(() => {\n        ignoreMouseDepth -= 1;\n    }, internal_cjs.config.touchMouseIgnoreWait);\n}\n// We want to attach touchmove as early as possible for Safari\n// ----------------------------------------------------------------------------------------------------\nfunction listenerCreated() {\n    listenerCnt += 1;\n    if (listenerCnt === 1) {\n        window.addEventListener('touchmove', onWindowTouchMove, { passive: false });\n    }\n}\nfunction listenerDestroyed() {\n    listenerCnt -= 1;\n    if (!listenerCnt) {\n        window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });\n    }\n}\nfunction onWindowTouchMove(ev) {\n    if (isWindowTouchMoveCancelled) {\n        ev.preventDefault();\n    }\n}\n\n/*\nAn effect in which an element follows the movement of a pointer across the screen.\nThe moving element is a clone of some other element.\nMust call start + handleMove + stop.\n*/\nclass ElementMirror {\n    constructor() {\n        this.isVisible = false; // must be explicitly enabled\n        this.sourceEl = null;\n        this.mirrorEl = null;\n        this.sourceElRect = null; // screen coords relative to viewport\n        // options that can be set directly by caller\n        this.parentNode = document.body; // HIGHLY SUGGESTED to set this to sidestep ShadowDOM issues\n        this.zIndex = 9999;\n        this.revertDuration = 0;\n    }\n    start(sourceEl, pageX, pageY) {\n        this.sourceEl = sourceEl;\n        this.sourceElRect = this.sourceEl.getBoundingClientRect();\n        this.origScreenX = pageX - window.scrollX;\n        this.origScreenY = pageY - window.scrollY;\n        this.deltaX = 0;\n        this.deltaY = 0;\n        this.updateElPosition();\n    }\n    handleMove(pageX, pageY) {\n        this.deltaX = (pageX - window.scrollX) - this.origScreenX;\n        this.deltaY = (pageY - window.scrollY) - this.origScreenY;\n        this.updateElPosition();\n    }\n    // can be called before start\n    setIsVisible(bool) {\n        if (bool) {\n            if (!this.isVisible) {\n                if (this.mirrorEl) {\n                    this.mirrorEl.style.display = '';\n                }\n                this.isVisible = bool; // needs to happen before updateElPosition\n                this.updateElPosition(); // because was not updating the position while invisible\n            }\n        }\n        else if (this.isVisible) {\n            if (this.mirrorEl) {\n                this.mirrorEl.style.display = 'none';\n            }\n            this.isVisible = bool;\n        }\n    }\n    // always async\n    stop(needsRevertAnimation, callback) {\n        let done = () => {\n            this.cleanup();\n            callback();\n        };\n        if (needsRevertAnimation &&\n            this.mirrorEl &&\n            this.isVisible &&\n            this.revertDuration && // if 0, transition won't work\n            (this.deltaX || this.deltaY) // if same coords, transition won't work\n        ) {\n            this.doRevertAnimation(done, this.revertDuration);\n        }\n        else {\n            setTimeout(done, 0);\n        }\n    }\n    doRevertAnimation(callback, revertDuration) {\n        let mirrorEl = this.mirrorEl;\n        let finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened\n        mirrorEl.style.transition =\n            'top ' + revertDuration + 'ms,' +\n                'left ' + revertDuration + 'ms';\n        internal_cjs.applyStyle(mirrorEl, {\n            left: finalSourceElRect.left,\n            top: finalSourceElRect.top,\n        });\n        internal_cjs.whenTransitionDone(mirrorEl, () => {\n            mirrorEl.style.transition = '';\n            callback();\n        });\n    }\n    cleanup() {\n        if (this.mirrorEl) {\n            internal_cjs.removeElement(this.mirrorEl);\n            this.mirrorEl = null;\n        }\n        this.sourceEl = null;\n    }\n    updateElPosition() {\n        if (this.sourceEl && this.isVisible) {\n            internal_cjs.applyStyle(this.getMirrorEl(), {\n                left: this.sourceElRect.left + this.deltaX,\n                top: this.sourceElRect.top + this.deltaY,\n            });\n        }\n    }\n    getMirrorEl() {\n        let sourceElRect = this.sourceElRect;\n        let mirrorEl = this.mirrorEl;\n        if (!mirrorEl) {\n            mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true\n            // we don't want long taps or any mouse interaction causing selection/menus.\n            // would use preventSelection(), but that prevents selectstart, causing problems.\n            mirrorEl.style.userSelect = 'none';\n            mirrorEl.style.webkitUserSelect = 'none';\n            mirrorEl.style.pointerEvents = 'none';\n            mirrorEl.classList.add('fc-event-dragging');\n            internal_cjs.applyStyle(mirrorEl, {\n                position: 'fixed',\n                zIndex: this.zIndex,\n                visibility: '',\n                boxSizing: 'border-box',\n                width: sourceElRect.right - sourceElRect.left,\n                height: sourceElRect.bottom - sourceElRect.top,\n                right: 'auto',\n                bottom: 'auto',\n                margin: 0,\n            });\n            this.parentNode.appendChild(mirrorEl);\n        }\n        return mirrorEl;\n    }\n}\n\n/*\nIs a cache for a given element's scroll information (all the info that ScrollController stores)\nin addition the \"client rectangle\" of the element.. the area within the scrollbars.\n\nThe cache can be in one of two modes:\n- doesListening:false - ignores when the container is scrolled by someone else\n- doesListening:true - watch for scrolling and update the cache\n*/\nclass ScrollGeomCache extends internal_cjs.ScrollController {\n    constructor(scrollController, doesListening) {\n        super();\n        this.handleScroll = () => {\n            this.scrollTop = this.scrollController.getScrollTop();\n            this.scrollLeft = this.scrollController.getScrollLeft();\n            this.handleScrollChange();\n        };\n        this.scrollController = scrollController;\n        this.doesListening = doesListening;\n        this.scrollTop = this.origScrollTop = scrollController.getScrollTop();\n        this.scrollLeft = this.origScrollLeft = scrollController.getScrollLeft();\n        this.scrollWidth = scrollController.getScrollWidth();\n        this.scrollHeight = scrollController.getScrollHeight();\n        this.clientWidth = scrollController.getClientWidth();\n        this.clientHeight = scrollController.getClientHeight();\n        this.clientRect = this.computeClientRect(); // do last in case it needs cached values\n        if (this.doesListening) {\n            this.getEventTarget().addEventListener('scroll', this.handleScroll);\n        }\n    }\n    destroy() {\n        if (this.doesListening) {\n            this.getEventTarget().removeEventListener('scroll', this.handleScroll);\n        }\n    }\n    getScrollTop() {\n        return this.scrollTop;\n    }\n    getScrollLeft() {\n        return this.scrollLeft;\n    }\n    setScrollTop(top) {\n        this.scrollController.setScrollTop(top);\n        if (!this.doesListening) {\n            // we are not relying on the element to normalize out-of-bounds scroll values\n            // so we need to sanitize ourselves\n            this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);\n            this.handleScrollChange();\n        }\n    }\n    setScrollLeft(top) {\n        this.scrollController.setScrollLeft(top);\n        if (!this.doesListening) {\n            // we are not relying on the element to normalize out-of-bounds scroll values\n            // so we need to sanitize ourselves\n            this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);\n            this.handleScrollChange();\n        }\n    }\n    getClientWidth() {\n        return this.clientWidth;\n    }\n    getClientHeight() {\n        return this.clientHeight;\n    }\n    getScrollWidth() {\n        return this.scrollWidth;\n    }\n    getScrollHeight() {\n        return this.scrollHeight;\n    }\n    handleScrollChange() {\n    }\n}\n\nclass ElementScrollGeomCache extends ScrollGeomCache {\n    constructor(el, doesListening) {\n        super(new internal_cjs.ElementScrollController(el), doesListening);\n    }\n    getEventTarget() {\n        return this.scrollController.el;\n    }\n    computeClientRect() {\n        return internal_cjs.computeInnerRect(this.scrollController.el);\n    }\n}\n\nclass WindowScrollGeomCache extends ScrollGeomCache {\n    constructor(doesListening) {\n        super(new internal_cjs.WindowScrollController(), doesListening);\n    }\n    getEventTarget() {\n        return window;\n    }\n    computeClientRect() {\n        return {\n            left: this.scrollLeft,\n            right: this.scrollLeft + this.clientWidth,\n            top: this.scrollTop,\n            bottom: this.scrollTop + this.clientHeight,\n        };\n    }\n    // the window is the only scroll object that changes it's rectangle relative\n    // to the document's topleft as it scrolls\n    handleScrollChange() {\n        this.clientRect = this.computeClientRect();\n    }\n}\n\n// If available we are using native \"performance\" API instead of \"Date\"\n// Read more about it on MDN:\n// https://developer.mozilla.org/en-US/docs/Web/API/Performance\nconst getTime = typeof performance === 'function' ? performance.now : Date.now;\n/*\nFor a pointer interaction, automatically scrolls certain scroll containers when the pointer\napproaches the edge.\n\nThe caller must call start + handleMove + stop.\n*/\nclass AutoScroller {\n    constructor() {\n        // options that can be set by caller\n        this.isEnabled = true;\n        this.scrollQuery = [window, '.fc-scroller'];\n        this.edgeThreshold = 50; // pixels\n        this.maxVelocity = 300; // pixels per second\n        // internal state\n        this.pointerScreenX = null;\n        this.pointerScreenY = null;\n        this.isAnimating = false;\n        this.scrollCaches = null;\n        // protect against the initial pointerdown being too close to an edge and starting the scroll\n        this.everMovedUp = false;\n        this.everMovedDown = false;\n        this.everMovedLeft = false;\n        this.everMovedRight = false;\n        this.animate = () => {\n            if (this.isAnimating) { // wasn't cancelled between animation calls\n                let edge = this.computeBestEdge(this.pointerScreenX + window.scrollX, this.pointerScreenY + window.scrollY);\n                if (edge) {\n                    let now = getTime();\n                    this.handleSide(edge, (now - this.msSinceRequest) / 1000);\n                    this.requestAnimation(now);\n                }\n                else {\n                    this.isAnimating = false; // will stop animation\n                }\n            }\n        };\n    }\n    start(pageX, pageY, scrollStartEl) {\n        if (this.isEnabled) {\n            this.scrollCaches = this.buildCaches(scrollStartEl);\n            this.pointerScreenX = null;\n            this.pointerScreenY = null;\n            this.everMovedUp = false;\n            this.everMovedDown = false;\n            this.everMovedLeft = false;\n            this.everMovedRight = false;\n            this.handleMove(pageX, pageY);\n        }\n    }\n    handleMove(pageX, pageY) {\n        if (this.isEnabled) {\n            let pointerScreenX = pageX - window.scrollX;\n            let pointerScreenY = pageY - window.scrollY;\n            let yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;\n            let xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;\n            if (yDelta < 0) {\n                this.everMovedUp = true;\n            }\n            else if (yDelta > 0) {\n                this.everMovedDown = true;\n            }\n            if (xDelta < 0) {\n                this.everMovedLeft = true;\n            }\n            else if (xDelta > 0) {\n                this.everMovedRight = true;\n            }\n            this.pointerScreenX = pointerScreenX;\n            this.pointerScreenY = pointerScreenY;\n            if (!this.isAnimating) {\n                this.isAnimating = true;\n                this.requestAnimation(getTime());\n            }\n        }\n    }\n    stop() {\n        if (this.isEnabled) {\n            this.isAnimating = false; // will stop animation\n            for (let scrollCache of this.scrollCaches) {\n                scrollCache.destroy();\n            }\n            this.scrollCaches = null;\n        }\n    }\n    requestAnimation(now) {\n        this.msSinceRequest = now;\n        requestAnimationFrame(this.animate);\n    }\n    handleSide(edge, seconds) {\n        let { scrollCache } = edge;\n        let { edgeThreshold } = this;\n        let invDistance = edgeThreshold - edge.distance;\n        let velocity = // the closer to the edge, the faster we scroll\n         ((invDistance * invDistance) / (edgeThreshold * edgeThreshold)) * // quadratic\n            this.maxVelocity * seconds;\n        let sign = 1;\n        switch (edge.name) {\n            case 'left':\n                sign = -1;\n            // falls through\n            case 'right':\n                scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);\n                break;\n            case 'top':\n                sign = -1;\n            // falls through\n            case 'bottom':\n                scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);\n                break;\n        }\n    }\n    // left/top are relative to document topleft\n    computeBestEdge(left, top) {\n        let { edgeThreshold } = this;\n        let bestSide = null;\n        let scrollCaches = this.scrollCaches || [];\n        for (let scrollCache of scrollCaches) {\n            let rect = scrollCache.clientRect;\n            let leftDist = left - rect.left;\n            let rightDist = rect.right - left;\n            let topDist = top - rect.top;\n            let bottomDist = rect.bottom - top;\n            // completely within the rect?\n            if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {\n                if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&\n                    (!bestSide || bestSide.distance > topDist)) {\n                    bestSide = { scrollCache, name: 'top', distance: topDist };\n                }\n                if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&\n                    (!bestSide || bestSide.distance > bottomDist)) {\n                    bestSide = { scrollCache, name: 'bottom', distance: bottomDist };\n                }\n                /*\n                TODO: fix broken RTL scrolling. canScrollLeft always returning false\n                https://github.com/fullcalendar/fullcalendar/issues/4837\n                */\n                if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&\n                    (!bestSide || bestSide.distance > leftDist)) {\n                    bestSide = { scrollCache, name: 'left', distance: leftDist };\n                }\n                if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&\n                    (!bestSide || bestSide.distance > rightDist)) {\n                    bestSide = { scrollCache, name: 'right', distance: rightDist };\n                }\n            }\n        }\n        return bestSide;\n    }\n    buildCaches(scrollStartEl) {\n        return this.queryScrollEls(scrollStartEl).map((el) => {\n            if (el === window) {\n                return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls\n            }\n            return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls\n        });\n    }\n    queryScrollEls(scrollStartEl) {\n        let els = [];\n        for (let query of this.scrollQuery) {\n            if (typeof query === 'object') {\n                els.push(query);\n            }\n            else {\n                /*\n                TODO: in the future, always have auto-scroll happen on element where current Hit came from\n                Ticket: https://github.com/fullcalendar/fullcalendar/issues/4593\n                */\n                els.push(...Array.prototype.slice.call(scrollStartEl.getRootNode().querySelectorAll(query)));\n            }\n        }\n        return els;\n    }\n}\n\n/*\nMonitors dragging on an element. Has a number of high-level features:\n- minimum distance required before dragging\n- minimum wait time (\"delay\") before dragging\n- a mirror element that follows the pointer\n*/\nclass FeaturefulElementDragging extends internal_cjs.ElementDragging {\n    constructor(containerEl, selector) {\n        super(containerEl);\n        this.containerEl = containerEl;\n        // options that can be directly set by caller\n        // the caller can also set the PointerDragging's options as well\n        this.delay = null;\n        this.minDistance = 0;\n        this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag\n        this.mirrorNeedsRevert = false;\n        this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup\n        this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation\n        this.isDelayEnded = false;\n        this.isDistanceSurpassed = false;\n        this.delayTimeoutId = null;\n        this.onPointerDown = (ev) => {\n            if (!this.isDragging) { // so new drag doesn't happen while revert animation is going\n                this.isInteracting = true;\n                this.isDelayEnded = false;\n                this.isDistanceSurpassed = false;\n                internal_cjs.preventSelection(document.body);\n                internal_cjs.preventContextMenu(document.body);\n                // prevent links from being visited if there's an eventual drag.\n                // also prevents selection in older browsers (maybe?).\n                // not necessary for touch, besides, browser would complain about passiveness.\n                if (!ev.isTouch) {\n                    ev.origEvent.preventDefault();\n                }\n                this.emitter.trigger('pointerdown', ev);\n                if (this.isInteracting && // not destroyed via pointerdown handler\n                    !this.pointer.shouldIgnoreMove) {\n                    // actions related to initiating dragstart+dragmove+dragend...\n                    this.mirror.setIsVisible(false); // reset. caller must set-visible\n                    this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down\n                    this.startDelay(ev);\n                    if (!this.minDistance) {\n                        this.handleDistanceSurpassed(ev);\n                    }\n                }\n            }\n        };\n        this.onPointerMove = (ev) => {\n            if (this.isInteracting) {\n                this.emitter.trigger('pointermove', ev);\n                if (!this.isDistanceSurpassed) {\n                    let minDistance = this.minDistance;\n                    let distanceSq; // current distance from the origin, squared\n                    let { deltaX, deltaY } = ev;\n                    distanceSq = deltaX * deltaX + deltaY * deltaY;\n                    if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n                        this.handleDistanceSurpassed(ev);\n                    }\n                }\n                if (this.isDragging) {\n                    // a real pointer move? (not one simulated by scrolling)\n                    if (ev.origEvent.type !== 'scroll') {\n                        this.mirror.handleMove(ev.pageX, ev.pageY);\n                        this.autoScroller.handleMove(ev.pageX, ev.pageY);\n                    }\n                    this.emitter.trigger('dragmove', ev);\n                }\n            }\n        };\n        this.onPointerUp = (ev) => {\n            if (this.isInteracting) {\n                this.isInteracting = false;\n                internal_cjs.allowSelection(document.body);\n                internal_cjs.allowContextMenu(document.body);\n                this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert\n                if (this.isDragging) {\n                    this.autoScroller.stop();\n                    this.tryStopDrag(ev); // which will stop the mirror\n                }\n                if (this.delayTimeoutId) {\n                    clearTimeout(this.delayTimeoutId);\n                    this.delayTimeoutId = null;\n                }\n            }\n        };\n        let pointer = this.pointer = new PointerDragging(containerEl);\n        pointer.emitter.on('pointerdown', this.onPointerDown);\n        pointer.emitter.on('pointermove', this.onPointerMove);\n        pointer.emitter.on('pointerup', this.onPointerUp);\n        if (selector) {\n            pointer.selector = selector;\n        }\n        this.mirror = new ElementMirror();\n        this.autoScroller = new AutoScroller();\n    }\n    destroy() {\n        this.pointer.destroy();\n        // HACK: simulate a pointer-up to end the current drag\n        // TODO: fire 'dragend' directly and stop interaction. discourage use of pointerup event (b/c might not fire)\n        this.onPointerUp({});\n    }\n    startDelay(ev) {\n        if (typeof this.delay === 'number') {\n            this.delayTimeoutId = setTimeout(() => {\n                this.delayTimeoutId = null;\n                this.handleDelayEnd(ev);\n            }, this.delay); // not assignable to number!\n        }\n        else {\n            this.handleDelayEnd(ev);\n        }\n    }\n    handleDelayEnd(ev) {\n        this.isDelayEnded = true;\n        this.tryStartDrag(ev);\n    }\n    handleDistanceSurpassed(ev) {\n        this.isDistanceSurpassed = true;\n        this.tryStartDrag(ev);\n    }\n    tryStartDrag(ev) {\n        if (this.isDelayEnded && this.isDistanceSurpassed) {\n            if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {\n                this.isDragging = true;\n                this.mirrorNeedsRevert = false;\n                this.autoScroller.start(ev.pageX, ev.pageY, this.containerEl);\n                this.emitter.trigger('dragstart', ev);\n                if (this.touchScrollAllowed === false) {\n                    this.pointer.cancelTouchScroll();\n                }\n            }\n        }\n    }\n    tryStopDrag(ev) {\n        // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events\n        // that come from the document to fire beforehand. much more convenient this way.\n        this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev));\n    }\n    stopDrag(ev) {\n        this.isDragging = false;\n        this.emitter.trigger('dragend', ev);\n    }\n    // fill in the implementations...\n    setIgnoreMove(bool) {\n        this.pointer.shouldIgnoreMove = bool;\n    }\n    setMirrorIsVisible(bool) {\n        this.mirror.setIsVisible(bool);\n    }\n    setMirrorNeedsRevert(bool) {\n        this.mirrorNeedsRevert = bool;\n    }\n    setAutoScrollEnabled(bool) {\n        this.autoScroller.isEnabled = bool;\n    }\n}\n\n/*\nWhen this class is instantiated, it records the offset of an element (relative to the document topleft),\nand continues to monitor scrolling, updating the cached coordinates if it needs to.\nDoes not access the DOM after instantiation, so highly performant.\n\nAlso keeps track of all scrolling/overflow:hidden containers that are parents of the given element\nand an determine if a given point is inside the combined clipping rectangle.\n*/\nclass OffsetTracker {\n    constructor(el) {\n        this.el = el;\n        this.origRect = internal_cjs.computeRect(el);\n        // will work fine for divs that have overflow:hidden\n        this.scrollCaches = internal_cjs.getClippingParents(el).map((scrollEl) => new ElementScrollGeomCache(scrollEl, true));\n    }\n    destroy() {\n        for (let scrollCache of this.scrollCaches) {\n            scrollCache.destroy();\n        }\n    }\n    computeLeft() {\n        let left = this.origRect.left;\n        for (let scrollCache of this.scrollCaches) {\n            left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();\n        }\n        return left;\n    }\n    computeTop() {\n        let top = this.origRect.top;\n        for (let scrollCache of this.scrollCaches) {\n            top += scrollCache.origScrollTop - scrollCache.getScrollTop();\n        }\n        return top;\n    }\n    isWithinClipping(pageX, pageY) {\n        let point = { left: pageX, top: pageY };\n        for (let scrollCache of this.scrollCaches) {\n            if (!isIgnoredClipping(scrollCache.getEventTarget()) &&\n                !internal_cjs.pointInsideRect(point, scrollCache.clientRect)) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n// certain clipping containers should never constrain interactions, like <html> and <body>\n// https://github.com/fullcalendar/fullcalendar/issues/3615\nfunction isIgnoredClipping(node) {\n    let tagName = node.tagName;\n    return tagName === 'HTML' || tagName === 'BODY';\n}\n\n/*\nTracks movement over multiple droppable areas (aka \"hits\")\nthat exist in one or more DateComponents.\nRelies on an existing draggable.\n\nemits:\n- pointerdown\n- dragstart\n- hitchange - fires initially, even if not over a hit\n- pointerup\n- (hitchange - again, to null, if ended over a hit)\n- dragend\n*/\nclass HitDragging {\n    constructor(dragging, droppableStore) {\n        // options that can be set by caller\n        this.useSubjectCenter = false;\n        this.requireInitial = true; // if doesn't start out on a hit, won't emit any events\n        this.disablePointCheck = false;\n        this.initialHit = null;\n        this.movingHit = null;\n        this.finalHit = null; // won't ever be populated if shouldIgnoreMove\n        this.handlePointerDown = (ev) => {\n            let { dragging } = this;\n            this.initialHit = null;\n            this.movingHit = null;\n            this.finalHit = null;\n            this.prepareHits();\n            this.processFirstCoord(ev);\n            if (this.initialHit || !this.requireInitial) {\n                dragging.setIgnoreMove(false);\n                // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(\n                this.emitter.trigger('pointerdown', ev);\n            }\n            else {\n                dragging.setIgnoreMove(true);\n            }\n        };\n        this.handleDragStart = (ev) => {\n            this.emitter.trigger('dragstart', ev);\n            this.handleMove(ev, true); // force = fire even if initially null\n        };\n        this.handleDragMove = (ev) => {\n            this.emitter.trigger('dragmove', ev);\n            this.handleMove(ev);\n        };\n        this.handlePointerUp = (ev) => {\n            this.releaseHits();\n            this.emitter.trigger('pointerup', ev);\n        };\n        this.handleDragEnd = (ev) => {\n            if (this.movingHit) {\n                this.emitter.trigger('hitupdate', null, true, ev);\n            }\n            this.finalHit = this.movingHit;\n            this.movingHit = null;\n            this.emitter.trigger('dragend', ev);\n        };\n        this.droppableStore = droppableStore;\n        dragging.emitter.on('pointerdown', this.handlePointerDown);\n        dragging.emitter.on('dragstart', this.handleDragStart);\n        dragging.emitter.on('dragmove', this.handleDragMove);\n        dragging.emitter.on('pointerup', this.handlePointerUp);\n        dragging.emitter.on('dragend', this.handleDragEnd);\n        this.dragging = dragging;\n        this.emitter = new internal_cjs.Emitter();\n    }\n    // sets initialHit\n    // sets coordAdjust\n    processFirstCoord(ev) {\n        let origPoint = { left: ev.pageX, top: ev.pageY };\n        let adjustedPoint = origPoint;\n        let subjectEl = ev.subjectEl;\n        let subjectRect;\n        if (subjectEl instanceof HTMLElement) { // i.e. not a Document/ShadowRoot\n            subjectRect = internal_cjs.computeRect(subjectEl);\n            adjustedPoint = internal_cjs.constrainPoint(adjustedPoint, subjectRect);\n        }\n        let initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);\n        if (initialHit) {\n            if (this.useSubjectCenter && subjectRect) {\n                let slicedSubjectRect = internal_cjs.intersectRects(subjectRect, initialHit.rect);\n                if (slicedSubjectRect) {\n                    adjustedPoint = internal_cjs.getRectCenter(slicedSubjectRect);\n                }\n            }\n            this.coordAdjust = internal_cjs.diffPoints(adjustedPoint, origPoint);\n        }\n        else {\n            this.coordAdjust = { left: 0, top: 0 };\n        }\n    }\n    handleMove(ev, forceHandle) {\n        let hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);\n        if (forceHandle || !isHitsEqual(this.movingHit, hit)) {\n            this.movingHit = hit;\n            this.emitter.trigger('hitupdate', hit, false, ev);\n        }\n    }\n    prepareHits() {\n        this.offsetTrackers = internal_cjs.mapHash(this.droppableStore, (interactionSettings) => {\n            interactionSettings.component.prepareHits();\n            return new OffsetTracker(interactionSettings.el);\n        });\n    }\n    releaseHits() {\n        let { offsetTrackers } = this;\n        for (let id in offsetTrackers) {\n            offsetTrackers[id].destroy();\n        }\n        this.offsetTrackers = {};\n    }\n    queryHitForOffset(offsetLeft, offsetTop) {\n        let { droppableStore, offsetTrackers } = this;\n        let bestHit = null;\n        for (let id in droppableStore) {\n            let component = droppableStore[id].component;\n            let offsetTracker = offsetTrackers[id];\n            if (offsetTracker && // wasn't destroyed mid-drag\n                offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {\n                let originLeft = offsetTracker.computeLeft();\n                let originTop = offsetTracker.computeTop();\n                let positionLeft = offsetLeft - originLeft;\n                let positionTop = offsetTop - originTop;\n                let { origRect } = offsetTracker;\n                let width = origRect.right - origRect.left;\n                let height = origRect.bottom - origRect.top;\n                if (\n                // must be within the element's bounds\n                positionLeft >= 0 && positionLeft < width &&\n                    positionTop >= 0 && positionTop < height) {\n                    let hit = component.queryHit(positionLeft, positionTop, width, height);\n                    if (hit && (\n                    // make sure the hit is within activeRange, meaning it's not a dead cell\n                    internal_cjs.rangeContainsRange(hit.dateProfile.activeRange, hit.dateSpan.range)) &&\n                        // Ensure the component we are querying for the hit is accessibly my the pointer\n                        // Prevents obscured calendars (ex: under a modal dialog) from accepting hit\n                        // https://github.com/fullcalendar/fullcalendar/issues/5026\n                        (this.disablePointCheck ||\n                            offsetTracker.el.contains(offsetTracker.el.getRootNode().elementFromPoint(\n                            // add-back origins to get coordinate relative to top-left of window viewport\n                            positionLeft + originLeft - window.scrollX, positionTop + originTop - window.scrollY))) &&\n                        (!bestHit || hit.layer > bestHit.layer)) {\n                        hit.componentId = id;\n                        hit.context = component.context;\n                        // TODO: better way to re-orient rectangle\n                        hit.rect.left += originLeft;\n                        hit.rect.right += originLeft;\n                        hit.rect.top += originTop;\n                        hit.rect.bottom += originTop;\n                        bestHit = hit;\n                    }\n                }\n            }\n        }\n        return bestHit;\n    }\n}\nfunction isHitsEqual(hit0, hit1) {\n    if (!hit0 && !hit1) {\n        return true;\n    }\n    if (Boolean(hit0) !== Boolean(hit1)) {\n        return false;\n    }\n    return internal_cjs.isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);\n}\n\nfunction buildDatePointApiWithContext(dateSpan, context) {\n    let props = {};\n    for (let transform of context.pluginHooks.datePointTransforms) {\n        Object.assign(props, transform(dateSpan, context));\n    }\n    Object.assign(props, buildDatePointApi(dateSpan, context.dateEnv));\n    return props;\n}\nfunction buildDatePointApi(span, dateEnv) {\n    return {\n        date: dateEnv.toDate(span.range.start),\n        dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),\n        allDay: span.allDay,\n    };\n}\n\n/*\nMonitors when the user clicks on a specific date/time of a component.\nA pointerdown+pointerup on the same \"hit\" constitutes a click.\n*/\nclass DateClicking extends internal_cjs.Interaction {\n    constructor(settings) {\n        super(settings);\n        this.handlePointerDown = (pev) => {\n            let { dragging } = this;\n            let downEl = pev.origEvent.target;\n            // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired\n            dragging.setIgnoreMove(!this.component.isValidDateDownEl(downEl));\n        };\n        // won't even fire if moving was ignored\n        this.handleDragEnd = (ev) => {\n            let { component } = this;\n            let { pointer } = this.dragging;\n            if (!pointer.wasTouchScroll) {\n                let { initialHit, finalHit } = this.hitDragging;\n                if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {\n                    let { context } = component;\n                    let arg = Object.assign(Object.assign({}, buildDatePointApiWithContext(initialHit.dateSpan, context)), { dayEl: initialHit.dayEl, jsEvent: ev.origEvent, view: context.viewApi || context.calendarApi.view });\n                    context.emitter.trigger('dateClick', arg);\n                }\n            }\n        };\n        // we DO want to watch pointer moves because otherwise finalHit won't get populated\n        this.dragging = new FeaturefulElementDragging(settings.el);\n        this.dragging.autoScroller.isEnabled = false;\n        let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal_cjs.interactionSettingsToStore(settings));\n        hitDragging.emitter.on('pointerdown', this.handlePointerDown);\n        hitDragging.emitter.on('dragend', this.handleDragEnd);\n    }\n    destroy() {\n        this.dragging.destroy();\n    }\n}\n\n/*\nTracks when the user selects a portion of time of a component,\nconstituted by a drag over date cells, with a possible delay at the beginning of the drag.\n*/\nclass DateSelecting extends internal_cjs.Interaction {\n    constructor(settings) {\n        super(settings);\n        this.dragSelection = null;\n        this.handlePointerDown = (ev) => {\n            let { component, dragging } = this;\n            let { options } = component.context;\n            let canSelect = options.selectable &&\n                component.isValidDateDownEl(ev.origEvent.target);\n            // don't bother to watch expensive moves if component won't do selection\n            dragging.setIgnoreMove(!canSelect);\n            // if touch, require user to hold down\n            dragging.delay = ev.isTouch ? getComponentTouchDelay$1(component) : null;\n        };\n        this.handleDragStart = (ev) => {\n            this.component.context.calendarApi.unselect(ev); // unselect previous selections\n        };\n        this.handleHitUpdate = (hit, isFinal) => {\n            let { context } = this.component;\n            let dragSelection = null;\n            let isInvalid = false;\n            if (hit) {\n                let initialHit = this.hitDragging.initialHit;\n                let disallowed = hit.componentId === initialHit.componentId\n                    && this.isHitComboAllowed\n                    && !this.isHitComboAllowed(initialHit, hit);\n                if (!disallowed) {\n                    dragSelection = joinHitsIntoSelection(initialHit, hit, context.pluginHooks.dateSelectionTransformers);\n                }\n                if (!dragSelection || !internal_cjs.isDateSelectionValid(dragSelection, hit.dateProfile, context)) {\n                    isInvalid = true;\n                    dragSelection = null;\n                }\n            }\n            if (dragSelection) {\n                context.dispatch({ type: 'SELECT_DATES', selection: dragSelection });\n            }\n            else if (!isFinal) { // only unselect if moved away while dragging\n                context.dispatch({ type: 'UNSELECT_DATES' });\n            }\n            if (!isInvalid) {\n                internal_cjs.enableCursor();\n            }\n            else {\n                internal_cjs.disableCursor();\n            }\n            if (!isFinal) {\n                this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging\n            }\n        };\n        this.handlePointerUp = (pev) => {\n            if (this.dragSelection) {\n                // selection is already rendered, so just need to report selection\n                internal_cjs.triggerDateSelect(this.dragSelection, pev, this.component.context);\n                this.dragSelection = null;\n            }\n        };\n        let { component } = settings;\n        let { options } = component.context;\n        let dragging = this.dragging = new FeaturefulElementDragging(settings.el);\n        dragging.touchScrollAllowed = false;\n        dragging.minDistance = options.selectMinDistance || 0;\n        dragging.autoScroller.isEnabled = options.dragScroll;\n        let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal_cjs.interactionSettingsToStore(settings));\n        hitDragging.emitter.on('pointerdown', this.handlePointerDown);\n        hitDragging.emitter.on('dragstart', this.handleDragStart);\n        hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n        hitDragging.emitter.on('pointerup', this.handlePointerUp);\n    }\n    destroy() {\n        this.dragging.destroy();\n    }\n}\nfunction getComponentTouchDelay$1(component) {\n    let { options } = component.context;\n    let delay = options.selectLongPressDelay;\n    if (delay == null) {\n        delay = options.longPressDelay;\n    }\n    return delay;\n}\nfunction joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {\n    let dateSpan0 = hit0.dateSpan;\n    let dateSpan1 = hit1.dateSpan;\n    let ms = [\n        dateSpan0.range.start,\n        dateSpan0.range.end,\n        dateSpan1.range.start,\n        dateSpan1.range.end,\n    ];\n    ms.sort(internal_cjs.compareNumbers);\n    let props = {};\n    for (let transformer of dateSelectionTransformers) {\n        let res = transformer(hit0, hit1);\n        if (res === false) {\n            return null;\n        }\n        if (res) {\n            Object.assign(props, res);\n        }\n    }\n    props.range = { start: ms[0], end: ms[3] };\n    props.allDay = dateSpan0.allDay;\n    return props;\n}\n\nclass EventDragging extends internal_cjs.Interaction {\n    constructor(settings) {\n        super(settings);\n        // internal state\n        this.subjectEl = null;\n        this.subjectSeg = null; // the seg being selected/dragged\n        this.isDragging = false;\n        this.eventRange = null;\n        this.relevantEvents = null; // the events being dragged\n        this.receivingContext = null;\n        this.validMutation = null;\n        this.mutatedRelevantEvents = null;\n        this.handlePointerDown = (ev) => {\n            let origTarget = ev.origEvent.target;\n            let { component, dragging } = this;\n            let { mirror } = dragging;\n            let { options } = component.context;\n            let initialContext = component.context;\n            this.subjectEl = ev.subjectEl;\n            let subjectSeg = this.subjectSeg = internal_cjs.getElSeg(ev.subjectEl);\n            let eventRange = this.eventRange = subjectSeg.eventRange;\n            let eventInstanceId = eventRange.instance.instanceId;\n            this.relevantEvents = internal_cjs.getRelevantEvents(initialContext.getCurrentData().eventStore, eventInstanceId);\n            dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;\n            dragging.delay =\n                // only do a touch delay if touch and this event hasn't been selected yet\n                (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?\n                    getComponentTouchDelay(component) :\n                    null;\n            if (options.fixedMirrorParent) {\n                mirror.parentNode = options.fixedMirrorParent;\n            }\n            else {\n                mirror.parentNode = internal_cjs.elementClosest(origTarget, '.fc');\n            }\n            mirror.revertDuration = options.dragRevertDuration;\n            let isValid = component.isValidSegDownEl(origTarget) &&\n                !internal_cjs.elementClosest(origTarget, '.fc-event-resizer'); // NOT on a resizer\n            dragging.setIgnoreMove(!isValid);\n            // disable dragging for elements that are resizable (ie, selectable)\n            // but are not draggable\n            this.isDragging = isValid &&\n                ev.subjectEl.classList.contains('fc-event-draggable');\n        };\n        this.handleDragStart = (ev) => {\n            let initialContext = this.component.context;\n            let eventRange = this.eventRange;\n            let eventInstanceId = eventRange.instance.instanceId;\n            if (ev.isTouch) {\n                // need to select a different event?\n                if (eventInstanceId !== this.component.props.eventSelection) {\n                    initialContext.dispatch({ type: 'SELECT_EVENT', eventInstanceId });\n                }\n            }\n            else {\n                // if now using mouse, but was previous touch interaction, clear selected event\n                initialContext.dispatch({ type: 'UNSELECT_EVENT' });\n            }\n            if (this.isDragging) {\n                initialContext.calendarApi.unselect(ev); // unselect *date* selection\n                initialContext.emitter.trigger('eventDragStart', {\n                    el: this.subjectEl,\n                    event: new internal_cjs.EventImpl(initialContext, eventRange.def, eventRange.instance),\n                    jsEvent: ev.origEvent,\n                    view: initialContext.viewApi,\n                });\n            }\n        };\n        this.handleHitUpdate = (hit, isFinal) => {\n            if (!this.isDragging) {\n                return;\n            }\n            let relevantEvents = this.relevantEvents;\n            let initialHit = this.hitDragging.initialHit;\n            let initialContext = this.component.context;\n            // states based on new hit\n            let receivingContext = null;\n            let mutation = null;\n            let mutatedRelevantEvents = null;\n            let isInvalid = false;\n            let interaction = {\n                affectedEvents: relevantEvents,\n                mutatedEvents: internal_cjs.createEmptyEventStore(),\n                isEvent: true,\n            };\n            if (hit) {\n                receivingContext = hit.context;\n                let receivingOptions = receivingContext.options;\n                if (initialContext === receivingContext ||\n                    (receivingOptions.editable && receivingOptions.droppable)) {\n                    mutation = computeEventMutation(initialHit, hit, this.eventRange.instance.range.start, receivingContext.getCurrentData().pluginHooks.eventDragMutationMassagers);\n                    if (mutation) {\n                        mutatedRelevantEvents = internal_cjs.applyMutationToEventStore(relevantEvents, receivingContext.getCurrentData().eventUiBases, mutation, receivingContext);\n                        interaction.mutatedEvents = mutatedRelevantEvents;\n                        if (!internal_cjs.isInteractionValid(interaction, hit.dateProfile, receivingContext)) {\n                            isInvalid = true;\n                            mutation = null;\n                            mutatedRelevantEvents = null;\n                            interaction.mutatedEvents = internal_cjs.createEmptyEventStore();\n                        }\n                    }\n                }\n                else {\n                    receivingContext = null;\n                }\n            }\n            this.displayDrag(receivingContext, interaction);\n            if (!isInvalid) {\n                internal_cjs.enableCursor();\n            }\n            else {\n                internal_cjs.disableCursor();\n            }\n            if (!isFinal) {\n                if (initialContext === receivingContext && // TODO: write test for this\n                    isHitsEqual(initialHit, hit)) {\n                    mutation = null;\n                }\n                this.dragging.setMirrorNeedsRevert(!mutation);\n                // render the mirror if no already-rendered mirror\n                // TODO: wish we could somehow wait for dispatch to guarantee render\n                this.dragging.setMirrorIsVisible(!hit || !this.subjectEl.getRootNode().querySelector('.fc-event-mirror'));\n                // assign states based on new hit\n                this.receivingContext = receivingContext;\n                this.validMutation = mutation;\n                this.mutatedRelevantEvents = mutatedRelevantEvents;\n            }\n        };\n        this.handlePointerUp = () => {\n            if (!this.isDragging) {\n                this.cleanup(); // because handleDragEnd won't fire\n            }\n        };\n        this.handleDragEnd = (ev) => {\n            if (this.isDragging) {\n                let initialContext = this.component.context;\n                let initialView = initialContext.viewApi;\n                let { receivingContext, validMutation } = this;\n                let eventDef = this.eventRange.def;\n                let eventInstance = this.eventRange.instance;\n                let eventApi = new internal_cjs.EventImpl(initialContext, eventDef, eventInstance);\n                let relevantEvents = this.relevantEvents;\n                let mutatedRelevantEvents = this.mutatedRelevantEvents;\n                let { finalHit } = this.hitDragging;\n                this.clearDrag(); // must happen after revert animation\n                initialContext.emitter.trigger('eventDragStop', {\n                    el: this.subjectEl,\n                    event: eventApi,\n                    jsEvent: ev.origEvent,\n                    view: initialView,\n                });\n                if (validMutation) {\n                    // dropped within same calendar\n                    if (receivingContext === initialContext) {\n                        let updatedEventApi = new internal_cjs.EventImpl(initialContext, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);\n                        initialContext.dispatch({\n                            type: 'MERGE_EVENTS',\n                            eventStore: mutatedRelevantEvents,\n                        });\n                        let eventChangeArg = {\n                            oldEvent: eventApi,\n                            event: updatedEventApi,\n                            relatedEvents: internal_cjs.buildEventApis(mutatedRelevantEvents, initialContext, eventInstance),\n                            revert() {\n                                initialContext.dispatch({\n                                    type: 'MERGE_EVENTS',\n                                    eventStore: relevantEvents, // the pre-change data\n                                });\n                            },\n                        };\n                        let transformed = {};\n                        for (let transformer of initialContext.getCurrentData().pluginHooks.eventDropTransformers) {\n                            Object.assign(transformed, transformer(validMutation, initialContext));\n                        }\n                        initialContext.emitter.trigger('eventDrop', Object.assign(Object.assign(Object.assign({}, eventChangeArg), transformed), { el: ev.subjectEl, delta: validMutation.datesDelta, jsEvent: ev.origEvent, view: initialView }));\n                        initialContext.emitter.trigger('eventChange', eventChangeArg);\n                        // dropped in different calendar\n                    }\n                    else if (receivingContext) {\n                        let eventRemoveArg = {\n                            event: eventApi,\n                            relatedEvents: internal_cjs.buildEventApis(relevantEvents, initialContext, eventInstance),\n                            revert() {\n                                initialContext.dispatch({\n                                    type: 'MERGE_EVENTS',\n                                    eventStore: relevantEvents,\n                                });\n                            },\n                        };\n                        initialContext.emitter.trigger('eventLeave', Object.assign(Object.assign({}, eventRemoveArg), { draggedEl: ev.subjectEl, view: initialView }));\n                        initialContext.dispatch({\n                            type: 'REMOVE_EVENTS',\n                            eventStore: relevantEvents,\n                        });\n                        initialContext.emitter.trigger('eventRemove', eventRemoveArg);\n                        let addedEventDef = mutatedRelevantEvents.defs[eventDef.defId];\n                        let addedEventInstance = mutatedRelevantEvents.instances[eventInstance.instanceId];\n                        let addedEventApi = new internal_cjs.EventImpl(receivingContext, addedEventDef, addedEventInstance);\n                        receivingContext.dispatch({\n                            type: 'MERGE_EVENTS',\n                            eventStore: mutatedRelevantEvents,\n                        });\n                        let eventAddArg = {\n                            event: addedEventApi,\n                            relatedEvents: internal_cjs.buildEventApis(mutatedRelevantEvents, receivingContext, addedEventInstance),\n                            revert() {\n                                receivingContext.dispatch({\n                                    type: 'REMOVE_EVENTS',\n                                    eventStore: mutatedRelevantEvents,\n                                });\n                            },\n                        };\n                        receivingContext.emitter.trigger('eventAdd', eventAddArg);\n                        if (ev.isTouch) {\n                            receivingContext.dispatch({\n                                type: 'SELECT_EVENT',\n                                eventInstanceId: eventInstance.instanceId,\n                            });\n                        }\n                        receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.context.viewApi }));\n                        receivingContext.emitter.trigger('eventReceive', Object.assign(Object.assign({}, eventAddArg), { draggedEl: ev.subjectEl, view: finalHit.context.viewApi }));\n                    }\n                }\n                else {\n                    initialContext.emitter.trigger('_noEventDrop');\n                }\n            }\n            this.cleanup();\n        };\n        let { component } = this;\n        let { options } = component.context;\n        let dragging = this.dragging = new FeaturefulElementDragging(settings.el);\n        dragging.pointer.selector = EventDragging.SELECTOR;\n        dragging.touchScrollAllowed = false;\n        dragging.autoScroller.isEnabled = options.dragScroll;\n        let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal_cjs.interactionSettingsStore);\n        hitDragging.useSubjectCenter = settings.useEventCenter;\n        hitDragging.emitter.on('pointerdown', this.handlePointerDown);\n        hitDragging.emitter.on('dragstart', this.handleDragStart);\n        hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n        hitDragging.emitter.on('pointerup', this.handlePointerUp);\n        hitDragging.emitter.on('dragend', this.handleDragEnd);\n    }\n    destroy() {\n        this.dragging.destroy();\n    }\n    // render a drag state on the next receivingCalendar\n    displayDrag(nextContext, state) {\n        let initialContext = this.component.context;\n        let prevContext = this.receivingContext;\n        // does the previous calendar need to be cleared?\n        if (prevContext && prevContext !== nextContext) {\n            // does the initial calendar need to be cleared?\n            // if so, don't clear all the way. we still need to to hide the affectedEvents\n            if (prevContext === initialContext) {\n                prevContext.dispatch({\n                    type: 'SET_EVENT_DRAG',\n                    state: {\n                        affectedEvents: state.affectedEvents,\n                        mutatedEvents: internal_cjs.createEmptyEventStore(),\n                        isEvent: true,\n                    },\n                });\n                // completely clear the old calendar if it wasn't the initial\n            }\n            else {\n                prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' });\n            }\n        }\n        if (nextContext) {\n            nextContext.dispatch({ type: 'SET_EVENT_DRAG', state });\n        }\n    }\n    clearDrag() {\n        let initialCalendar = this.component.context;\n        let { receivingContext } = this;\n        if (receivingContext) {\n            receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' });\n        }\n        // the initial calendar might have an dummy drag state from displayDrag\n        if (initialCalendar !== receivingContext) {\n            initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n        }\n    }\n    cleanup() {\n        this.subjectSeg = null;\n        this.isDragging = false;\n        this.eventRange = null;\n        this.relevantEvents = null;\n        this.receivingContext = null;\n        this.validMutation = null;\n        this.mutatedRelevantEvents = null;\n    }\n}\n// TODO: test this in IE11\n// QUESTION: why do we need it on the resizable???\nEventDragging.SELECTOR = '.fc-event-draggable, .fc-event-resizable';\nfunction computeEventMutation(hit0, hit1, eventInstanceStart, massagers) {\n    let dateSpan0 = hit0.dateSpan;\n    let dateSpan1 = hit1.dateSpan;\n    let date0 = dateSpan0.range.start;\n    let date1 = dateSpan1.range.start;\n    let standardProps = {};\n    if (dateSpan0.allDay !== dateSpan1.allDay) {\n        standardProps.allDay = dateSpan1.allDay;\n        standardProps.hasEnd = hit1.context.options.allDayMaintainDuration;\n        if (dateSpan1.allDay) {\n            // means date1 is already start-of-day,\n            // but date0 needs to be converted\n            date0 = internal_cjs.startOfDay(eventInstanceStart);\n        }\n        else {\n            // Moving from allDate->timed\n            // Doesn't matter where on the event the drag began, mutate the event's start-date to date1\n            date0 = eventInstanceStart;\n        }\n    }\n    let delta = internal_cjs.diffDates(date0, date1, hit0.context.dateEnv, hit0.componentId === hit1.componentId ?\n        hit0.largeUnit :\n        null);\n    if (delta.milliseconds) { // has hours/minutes/seconds\n        standardProps.allDay = false;\n    }\n    let mutation = {\n        datesDelta: delta,\n        standardProps,\n    };\n    for (let massager of massagers) {\n        massager(mutation, hit0, hit1);\n    }\n    return mutation;\n}\nfunction getComponentTouchDelay(component) {\n    let { options } = component.context;\n    let delay = options.eventLongPressDelay;\n    if (delay == null) {\n        delay = options.longPressDelay;\n    }\n    return delay;\n}\n\nclass EventResizing extends internal_cjs.Interaction {\n    constructor(settings) {\n        super(settings);\n        // internal state\n        this.draggingSegEl = null;\n        this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?\n        this.eventRange = null;\n        this.relevantEvents = null;\n        this.validMutation = null;\n        this.mutatedRelevantEvents = null;\n        this.handlePointerDown = (ev) => {\n            let { component } = this;\n            let segEl = this.querySegEl(ev);\n            let seg = internal_cjs.getElSeg(segEl);\n            let eventRange = this.eventRange = seg.eventRange;\n            this.dragging.minDistance = component.context.options.eventDragMinDistance;\n            // if touch, need to be working with a selected event\n            this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(ev.origEvent.target) ||\n                (ev.isTouch && this.component.props.eventSelection !== eventRange.instance.instanceId));\n        };\n        this.handleDragStart = (ev) => {\n            let { context } = this.component;\n            let eventRange = this.eventRange;\n            this.relevantEvents = internal_cjs.getRelevantEvents(context.getCurrentData().eventStore, this.eventRange.instance.instanceId);\n            let segEl = this.querySegEl(ev);\n            this.draggingSegEl = segEl;\n            this.draggingSeg = internal_cjs.getElSeg(segEl);\n            context.calendarApi.unselect();\n            context.emitter.trigger('eventResizeStart', {\n                el: segEl,\n                event: new internal_cjs.EventImpl(context, eventRange.def, eventRange.instance),\n                jsEvent: ev.origEvent,\n                view: context.viewApi,\n            });\n        };\n        this.handleHitUpdate = (hit, isFinal, ev) => {\n            let { context } = this.component;\n            let relevantEvents = this.relevantEvents;\n            let initialHit = this.hitDragging.initialHit;\n            let eventInstance = this.eventRange.instance;\n            let mutation = null;\n            let mutatedRelevantEvents = null;\n            let isInvalid = false;\n            let interaction = {\n                affectedEvents: relevantEvents,\n                mutatedEvents: internal_cjs.createEmptyEventStore(),\n                isEvent: true,\n            };\n            if (hit) {\n                let disallowed = hit.componentId === initialHit.componentId\n                    && this.isHitComboAllowed\n                    && !this.isHitComboAllowed(initialHit, hit);\n                if (!disallowed) {\n                    mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-event-resizer-start'), eventInstance.range);\n                }\n            }\n            if (mutation) {\n                mutatedRelevantEvents = internal_cjs.applyMutationToEventStore(relevantEvents, context.getCurrentData().eventUiBases, mutation, context);\n                interaction.mutatedEvents = mutatedRelevantEvents;\n                if (!internal_cjs.isInteractionValid(interaction, hit.dateProfile, context)) {\n                    isInvalid = true;\n                    mutation = null;\n                    mutatedRelevantEvents = null;\n                    interaction.mutatedEvents = null;\n                }\n            }\n            if (mutatedRelevantEvents) {\n                context.dispatch({\n                    type: 'SET_EVENT_RESIZE',\n                    state: interaction,\n                });\n            }\n            else {\n                context.dispatch({ type: 'UNSET_EVENT_RESIZE' });\n            }\n            if (!isInvalid) {\n                internal_cjs.enableCursor();\n            }\n            else {\n                internal_cjs.disableCursor();\n            }\n            if (!isFinal) {\n                if (mutation && isHitsEqual(initialHit, hit)) {\n                    mutation = null;\n                }\n                this.validMutation = mutation;\n                this.mutatedRelevantEvents = mutatedRelevantEvents;\n            }\n        };\n        this.handleDragEnd = (ev) => {\n            let { context } = this.component;\n            let eventDef = this.eventRange.def;\n            let eventInstance = this.eventRange.instance;\n            let eventApi = new internal_cjs.EventImpl(context, eventDef, eventInstance);\n            let relevantEvents = this.relevantEvents;\n            let mutatedRelevantEvents = this.mutatedRelevantEvents;\n            context.emitter.trigger('eventResizeStop', {\n                el: this.draggingSegEl,\n                event: eventApi,\n                jsEvent: ev.origEvent,\n                view: context.viewApi,\n            });\n            if (this.validMutation) {\n                let updatedEventApi = new internal_cjs.EventImpl(context, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);\n                context.dispatch({\n                    type: 'MERGE_EVENTS',\n                    eventStore: mutatedRelevantEvents,\n                });\n                let eventChangeArg = {\n                    oldEvent: eventApi,\n                    event: updatedEventApi,\n                    relatedEvents: internal_cjs.buildEventApis(mutatedRelevantEvents, context, eventInstance),\n                    revert() {\n                        context.dispatch({\n                            type: 'MERGE_EVENTS',\n                            eventStore: relevantEvents, // the pre-change events\n                        });\n                    },\n                };\n                context.emitter.trigger('eventResize', Object.assign(Object.assign({}, eventChangeArg), { el: this.draggingSegEl, startDelta: this.validMutation.startDelta || internal_cjs.createDuration(0), endDelta: this.validMutation.endDelta || internal_cjs.createDuration(0), jsEvent: ev.origEvent, view: context.viewApi }));\n                context.emitter.trigger('eventChange', eventChangeArg);\n            }\n            else {\n                context.emitter.trigger('_noEventResize');\n            }\n            // reset all internal state\n            this.draggingSeg = null;\n            this.relevantEvents = null;\n            this.validMutation = null;\n            // okay to keep eventInstance around. useful to set it in handlePointerDown\n        };\n        let { component } = settings;\n        let dragging = this.dragging = new FeaturefulElementDragging(settings.el);\n        dragging.pointer.selector = '.fc-event-resizer';\n        dragging.touchScrollAllowed = false;\n        dragging.autoScroller.isEnabled = component.context.options.dragScroll;\n        let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal_cjs.interactionSettingsToStore(settings));\n        hitDragging.emitter.on('pointerdown', this.handlePointerDown);\n        hitDragging.emitter.on('dragstart', this.handleDragStart);\n        hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n        hitDragging.emitter.on('dragend', this.handleDragEnd);\n    }\n    destroy() {\n        this.dragging.destroy();\n    }\n    querySegEl(ev) {\n        return internal_cjs.elementClosest(ev.subjectEl, '.fc-event');\n    }\n}\nfunction computeMutation(hit0, hit1, isFromStart, instanceRange) {\n    let dateEnv = hit0.context.dateEnv;\n    let date0 = hit0.dateSpan.range.start;\n    let date1 = hit1.dateSpan.range.start;\n    let delta = internal_cjs.diffDates(date0, date1, dateEnv, hit0.largeUnit);\n    if (isFromStart) {\n        if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {\n            return { startDelta: delta };\n        }\n    }\n    else if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {\n        return { endDelta: delta };\n    }\n    return null;\n}\n\nclass UnselectAuto {\n    constructor(context) {\n        this.context = context;\n        this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system\n        this.matchesCancel = false;\n        this.matchesEvent = false;\n        this.onSelect = (selectInfo) => {\n            if (selectInfo.jsEvent) {\n                this.isRecentPointerDateSelect = true;\n            }\n        };\n        this.onDocumentPointerDown = (pev) => {\n            let unselectCancel = this.context.options.unselectCancel;\n            let downEl = internal_cjs.getEventTargetViaRoot(pev.origEvent);\n            this.matchesCancel = !!internal_cjs.elementClosest(downEl, unselectCancel);\n            this.matchesEvent = !!internal_cjs.elementClosest(downEl, EventDragging.SELECTOR); // interaction started on an event?\n        };\n        this.onDocumentPointerUp = (pev) => {\n            let { context } = this;\n            let { documentPointer } = this;\n            let calendarState = context.getCurrentData();\n            // touch-scrolling should never unfocus any type of selection\n            if (!documentPointer.wasTouchScroll) {\n                if (calendarState.dateSelection && // an existing date selection?\n                    !this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?\n                ) {\n                    let unselectAuto = context.options.unselectAuto;\n                    if (unselectAuto && (!unselectAuto || !this.matchesCancel)) {\n                        context.calendarApi.unselect(pev);\n                    }\n                }\n                if (calendarState.eventSelection && // an existing event selected?\n                    !this.matchesEvent // interaction DIDN'T start on an event\n                ) {\n                    context.dispatch({ type: 'UNSELECT_EVENT' });\n                }\n            }\n            this.isRecentPointerDateSelect = false;\n        };\n        let documentPointer = this.documentPointer = new PointerDragging(document);\n        documentPointer.shouldIgnoreMove = true;\n        documentPointer.shouldWatchScroll = false;\n        documentPointer.emitter.on('pointerdown', this.onDocumentPointerDown);\n        documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);\n        /*\n        TODO: better way to know about whether there was a selection with the pointer\n        */\n        context.emitter.on('select', this.onSelect);\n    }\n    destroy() {\n        this.context.emitter.off('select', this.onSelect);\n        this.documentPointer.destroy();\n    }\n}\n\nconst OPTION_REFINERS = {\n    fixedMirrorParent: internal_cjs.identity,\n};\nconst LISTENER_REFINERS = {\n    dateClick: internal_cjs.identity,\n    eventDragStart: internal_cjs.identity,\n    eventDragStop: internal_cjs.identity,\n    eventDrop: internal_cjs.identity,\n    eventResizeStart: internal_cjs.identity,\n    eventResizeStop: internal_cjs.identity,\n    eventResize: internal_cjs.identity,\n    drop: internal_cjs.identity,\n    eventReceive: internal_cjs.identity,\n    eventLeave: internal_cjs.identity,\n};\n\n/*\nGiven an already instantiated draggable object for one-or-more elements,\nInterprets any dragging as an attempt to drag an events that lives outside\nof a calendar onto a calendar.\n*/\nclass ExternalElementDragging {\n    constructor(dragging, suppliedDragMeta) {\n        this.receivingContext = null;\n        this.droppableEvent = null; // will exist for all drags, even if create:false\n        this.suppliedDragMeta = null;\n        this.dragMeta = null;\n        this.handleDragStart = (ev) => {\n            this.dragMeta = this.buildDragMeta(ev.subjectEl);\n        };\n        this.handleHitUpdate = (hit, isFinal, ev) => {\n            let { dragging } = this.hitDragging;\n            let receivingContext = null;\n            let droppableEvent = null;\n            let isInvalid = false;\n            let interaction = {\n                affectedEvents: internal_cjs.createEmptyEventStore(),\n                mutatedEvents: internal_cjs.createEmptyEventStore(),\n                isEvent: this.dragMeta.create,\n            };\n            if (hit) {\n                receivingContext = hit.context;\n                if (this.canDropElOnCalendar(ev.subjectEl, receivingContext)) {\n                    droppableEvent = computeEventForDateSpan(hit.dateSpan, this.dragMeta, receivingContext);\n                    interaction.mutatedEvents = internal_cjs.eventTupleToStore(droppableEvent);\n                    isInvalid = !internal_cjs.isInteractionValid(interaction, hit.dateProfile, receivingContext);\n                    if (isInvalid) {\n                        interaction.mutatedEvents = internal_cjs.createEmptyEventStore();\n                        droppableEvent = null;\n                    }\n                }\n            }\n            this.displayDrag(receivingContext, interaction);\n            // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)\n            // TODO: wish we could somehow wait for dispatch to guarantee render\n            dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-event-mirror'));\n            if (!isInvalid) {\n                internal_cjs.enableCursor();\n            }\n            else {\n                internal_cjs.disableCursor();\n            }\n            if (!isFinal) {\n                dragging.setMirrorNeedsRevert(!droppableEvent);\n                this.receivingContext = receivingContext;\n                this.droppableEvent = droppableEvent;\n            }\n        };\n        this.handleDragEnd = (pev) => {\n            let { receivingContext, droppableEvent } = this;\n            this.clearDrag();\n            if (receivingContext && droppableEvent) {\n                let finalHit = this.hitDragging.finalHit;\n                let finalView = finalHit.context.viewApi;\n                let dragMeta = this.dragMeta;\n                receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView }));\n                if (dragMeta.create) {\n                    let addingEvents = internal_cjs.eventTupleToStore(droppableEvent);\n                    receivingContext.dispatch({\n                        type: 'MERGE_EVENTS',\n                        eventStore: addingEvents,\n                    });\n                    if (pev.isTouch) {\n                        receivingContext.dispatch({\n                            type: 'SELECT_EVENT',\n                            eventInstanceId: droppableEvent.instance.instanceId,\n                        });\n                    }\n                    // signal that an external event landed\n                    receivingContext.emitter.trigger('eventReceive', {\n                        event: new internal_cjs.EventImpl(receivingContext, droppableEvent.def, droppableEvent.instance),\n                        relatedEvents: [],\n                        revert() {\n                            receivingContext.dispatch({\n                                type: 'REMOVE_EVENTS',\n                                eventStore: addingEvents,\n                            });\n                        },\n                        draggedEl: pev.subjectEl,\n                        view: finalView,\n                    });\n                }\n            }\n            this.receivingContext = null;\n            this.droppableEvent = null;\n        };\n        let hitDragging = this.hitDragging = new HitDragging(dragging, internal_cjs.interactionSettingsStore);\n        hitDragging.requireInitial = false; // will start outside of a component\n        hitDragging.emitter.on('dragstart', this.handleDragStart);\n        hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n        hitDragging.emitter.on('dragend', this.handleDragEnd);\n        this.suppliedDragMeta = suppliedDragMeta;\n    }\n    buildDragMeta(subjectEl) {\n        if (typeof this.suppliedDragMeta === 'object') {\n            return internal_cjs.parseDragMeta(this.suppliedDragMeta);\n        }\n        if (typeof this.suppliedDragMeta === 'function') {\n            return internal_cjs.parseDragMeta(this.suppliedDragMeta(subjectEl));\n        }\n        return getDragMetaFromEl(subjectEl);\n    }\n    displayDrag(nextContext, state) {\n        let prevContext = this.receivingContext;\n        if (prevContext && prevContext !== nextContext) {\n            prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' });\n        }\n        if (nextContext) {\n            nextContext.dispatch({ type: 'SET_EVENT_DRAG', state });\n        }\n    }\n    clearDrag() {\n        if (this.receivingContext) {\n            this.receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' });\n        }\n    }\n    canDropElOnCalendar(el, receivingContext) {\n        let dropAccept = receivingContext.options.dropAccept;\n        if (typeof dropAccept === 'function') {\n            return dropAccept.call(receivingContext.calendarApi, el);\n        }\n        if (typeof dropAccept === 'string' && dropAccept) {\n            return Boolean(internal_cjs.elementMatches(el, dropAccept));\n        }\n        return true;\n    }\n}\n// Utils for computing event store from the DragMeta\n// ----------------------------------------------------------------------------------------------------\nfunction computeEventForDateSpan(dateSpan, dragMeta, context) {\n    let defProps = Object.assign({}, dragMeta.leftoverProps);\n    for (let transform of context.pluginHooks.externalDefTransforms) {\n        Object.assign(defProps, transform(dateSpan, dragMeta));\n    }\n    let { refined, extra } = internal_cjs.refineEventDef(defProps, context);\n    let def = internal_cjs.parseEventDef(refined, extra, dragMeta.sourceId, dateSpan.allDay, context.options.forceEventDuration || Boolean(dragMeta.duration), // hasEnd\n    context);\n    let start = dateSpan.range.start;\n    // only rely on time info if drop zone is all-day,\n    // otherwise, we already know the time\n    if (dateSpan.allDay && dragMeta.startTime) {\n        start = context.dateEnv.add(start, dragMeta.startTime);\n    }\n    let end = dragMeta.duration ?\n        context.dateEnv.add(start, dragMeta.duration) :\n        internal_cjs.getDefaultEventEnd(dateSpan.allDay, start, context);\n    let instance = internal_cjs.createEventInstance(def.defId, { start, end });\n    return { def, instance };\n}\n// Utils for extracting data from element\n// ----------------------------------------------------------------------------------------------------\nfunction getDragMetaFromEl(el) {\n    let str = getEmbeddedElData(el, 'event');\n    let obj = str ?\n        JSON.parse(str) :\n        { create: false }; // if no embedded data, assume no event creation\n    return internal_cjs.parseDragMeta(obj);\n}\ninternal_cjs.config.dataAttrPrefix = '';\nfunction getEmbeddedElData(el, name) {\n    let prefix = internal_cjs.config.dataAttrPrefix;\n    let prefixedName = (prefix ? prefix + '-' : '') + name;\n    return el.getAttribute('data-' + prefixedName) || '';\n}\n\n/*\nMakes an element (that is *external* to any calendar) draggable.\nCan pass in data that determines how an event will be created when dropped onto a calendar.\nLeverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.\n*/\nclass ExternalDraggable {\n    constructor(el, settings = {}) {\n        this.handlePointerDown = (ev) => {\n            let { dragging } = this;\n            let { minDistance, longPressDelay } = this.settings;\n            dragging.minDistance =\n                minDistance != null ?\n                    minDistance :\n                    (ev.isTouch ? 0 : internal_cjs.BASE_OPTION_DEFAULTS.eventDragMinDistance);\n            dragging.delay =\n                ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv\n                    (longPressDelay != null ? longPressDelay : internal_cjs.BASE_OPTION_DEFAULTS.longPressDelay) :\n                    0;\n        };\n        this.handleDragStart = (ev) => {\n            if (ev.isTouch &&\n                this.dragging.delay &&\n                ev.subjectEl.classList.contains('fc-event')) {\n                this.dragging.mirror.getMirrorEl().classList.add('fc-event-selected');\n            }\n        };\n        this.settings = settings;\n        let dragging = this.dragging = new FeaturefulElementDragging(el);\n        dragging.touchScrollAllowed = false;\n        if (settings.itemSelector != null) {\n            dragging.pointer.selector = settings.itemSelector;\n        }\n        if (settings.appendTo != null) {\n            dragging.mirror.parentNode = settings.appendTo; // TODO: write tests\n        }\n        dragging.emitter.on('pointerdown', this.handlePointerDown);\n        dragging.emitter.on('dragstart', this.handleDragStart);\n        new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new\n    }\n    destroy() {\n        this.dragging.destroy();\n    }\n}\n\n/*\nDetects when a *THIRD-PARTY* drag-n-drop system interacts with elements.\nThe third-party system is responsible for drawing the visuals effects of the drag.\nThis class simply monitors for pointer movements and fires events.\nIt also has the ability to hide the moving element (the \"mirror\") during the drag.\n*/\nclass InferredElementDragging extends internal_cjs.ElementDragging {\n    constructor(containerEl) {\n        super(containerEl);\n        this.shouldIgnoreMove = false;\n        this.mirrorSelector = '';\n        this.currentMirrorEl = null;\n        this.handlePointerDown = (ev) => {\n            this.emitter.trigger('pointerdown', ev);\n            if (!this.shouldIgnoreMove) {\n                // fire dragstart right away. does not support delay or min-distance\n                this.emitter.trigger('dragstart', ev);\n            }\n        };\n        this.handlePointerMove = (ev) => {\n            if (!this.shouldIgnoreMove) {\n                this.emitter.trigger('dragmove', ev);\n            }\n        };\n        this.handlePointerUp = (ev) => {\n            this.emitter.trigger('pointerup', ev);\n            if (!this.shouldIgnoreMove) {\n                // fire dragend right away. does not support a revert animation\n                this.emitter.trigger('dragend', ev);\n            }\n        };\n        let pointer = this.pointer = new PointerDragging(containerEl);\n        pointer.emitter.on('pointerdown', this.handlePointerDown);\n        pointer.emitter.on('pointermove', this.handlePointerMove);\n        pointer.emitter.on('pointerup', this.handlePointerUp);\n    }\n    destroy() {\n        this.pointer.destroy();\n    }\n    setIgnoreMove(bool) {\n        this.shouldIgnoreMove = bool;\n    }\n    setMirrorIsVisible(bool) {\n        if (bool) {\n            // restore a previously hidden element.\n            // use the reference in case the selector class has already been removed.\n            if (this.currentMirrorEl) {\n                this.currentMirrorEl.style.visibility = '';\n                this.currentMirrorEl = null;\n            }\n        }\n        else {\n            let mirrorEl = this.mirrorSelector\n                // TODO: somehow query FullCalendars WITHIN shadow-roots\n                ? document.querySelector(this.mirrorSelector)\n                : null;\n            if (mirrorEl) {\n                this.currentMirrorEl = mirrorEl;\n                mirrorEl.style.visibility = 'hidden';\n            }\n        }\n    }\n}\n\n/*\nBridges third-party drag-n-drop systems with FullCalendar.\nMust be instantiated and destroyed by caller.\n*/\nclass ThirdPartyDraggable {\n    constructor(containerOrSettings, settings) {\n        let containerEl = document;\n        if (\n        // wish we could just test instanceof EventTarget, but doesn't work in IE11\n        containerOrSettings === document ||\n            containerOrSettings instanceof Element) {\n            containerEl = containerOrSettings;\n            settings = settings || {};\n        }\n        else {\n            settings = (containerOrSettings || {});\n        }\n        let dragging = this.dragging = new InferredElementDragging(containerEl);\n        if (typeof settings.itemSelector === 'string') {\n            dragging.pointer.selector = settings.itemSelector;\n        }\n        else if (containerEl === document) {\n            dragging.pointer.selector = '[data-event]';\n        }\n        if (typeof settings.mirrorSelector === 'string') {\n            dragging.mirrorSelector = settings.mirrorSelector;\n        }\n        let externalDragging = new ExternalElementDragging(dragging, settings.eventData);\n        // The hit-detection system requires that the dnd-mirror-element be pointer-events:none,\n        // but this can't be guaranteed for third-party draggables, so disable\n        externalDragging.hitDragging.disablePointCheck = true;\n    }\n    destroy() {\n        this.dragging.destroy();\n    }\n}\n\nvar index = index_cjs.createPlugin({\n    name: '@fullcalendar/interaction',\n    componentInteractions: [DateClicking, DateSelecting, EventDragging, EventResizing],\n    calendarInteractions: [UnselectAuto],\n    elementDraggingImpl: FeaturefulElementDragging,\n    optionRefiners: OPTION_REFINERS,\n    listenerRefiners: LISTENER_REFINERS,\n});\n\nexports.Draggable = ExternalDraggable;\nexports.ThirdPartyDraggable = ThirdPartyDraggable;\nexports[\"default\"] = index;\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global[\"@kurkle/color\"] = factory());\n})(this, (function () { 'use strict';\n\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nvar color = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColor: Color,\nb2n: b2n,\nb2p: b2p,\ndefault: index_esm,\nhexParse: hexParse,\nhexString: hexString,\nhsl2rgb: hsl2rgb,\nhslString: hslString,\nhsv2rgb: hsv2rgb,\nhueParse: hueParse,\nhwb2rgb: hwb2rgb,\nlim: lim,\nn2b: n2b,\nn2p: n2p,\nnameParse: nameParse,\np2b: p2b,\nrgb2hsl: rgb2hsl,\nrgbParse: rgbParse,\nrgbString: rgbString,\nrotate: rotate,\nround: round\n});\n\nvar index = Object.assign(index_esm, color);\n\nreturn index;\n\n}));\n","'use strict';\n\nvar state = require('@tiptap/pm/state');\nvar view = require('@tiptap/pm/view');\nvar keymap = require('@tiptap/pm/keymap');\nvar model = require('@tiptap/pm/model');\nvar transform = require('@tiptap/pm/transform');\nvar commands$1 = require('@tiptap/pm/commands');\nvar schemaList = require('@tiptap/pm/schema-list');\n\n/**\n * Takes a Transaction & Editor State and turns it into a chainable state object\n * @param config The transaction and state to create the chainable state from\n * @returns A chainable Editor state object\n */\nfunction createChainableState(config) {\n    const { state, transaction } = config;\n    let { selection } = transaction;\n    let { doc } = transaction;\n    let { storedMarks } = transaction;\n    return {\n        ...state,\n        apply: state.apply.bind(state),\n        applyTransaction: state.applyTransaction.bind(state),\n        plugins: state.plugins,\n        schema: state.schema,\n        reconfigure: state.reconfigure.bind(state),\n        toJSON: state.toJSON.bind(state),\n        get storedMarks() {\n            return storedMarks;\n        },\n        get selection() {\n            return selection;\n        },\n        get doc() {\n            return doc;\n        },\n        get tr() {\n            selection = transaction.selection;\n            doc = transaction.doc;\n            storedMarks = transaction.storedMarks;\n            return transaction;\n        },\n    };\n}\n\nclass CommandManager {\n    constructor(props) {\n        this.editor = props.editor;\n        this.rawCommands = this.editor.extensionManager.commands;\n        this.customState = props.state;\n    }\n    get hasCustomState() {\n        return !!this.customState;\n    }\n    get state() {\n        return this.customState || this.editor.state;\n    }\n    get commands() {\n        const { rawCommands, editor, state } = this;\n        const { view } = editor;\n        const { tr } = state;\n        const props = this.buildProps(tr);\n        return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n            const method = (...args) => {\n                const callback = command(...args)(props);\n                if (!tr.getMeta('preventDispatch') && !this.hasCustomState) {\n                    view.dispatch(tr);\n                }\n                return callback;\n            };\n            return [name, method];\n        }));\n    }\n    get chain() {\n        return () => this.createChain();\n    }\n    get can() {\n        return () => this.createCan();\n    }\n    createChain(startTr, shouldDispatch = true) {\n        const { rawCommands, editor, state } = this;\n        const { view } = editor;\n        const callbacks = [];\n        const hasStartTransaction = !!startTr;\n        const tr = startTr || state.tr;\n        const run = () => {\n            if (!hasStartTransaction\n                && shouldDispatch\n                && !tr.getMeta('preventDispatch')\n                && !this.hasCustomState) {\n                view.dispatch(tr);\n            }\n            return callbacks.every(callback => callback === true);\n        };\n        const chain = {\n            ...Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n                const chainedCommand = (...args) => {\n                    const props = this.buildProps(tr, shouldDispatch);\n                    const callback = command(...args)(props);\n                    callbacks.push(callback);\n                    return chain;\n                };\n                return [name, chainedCommand];\n            })),\n            run,\n        };\n        return chain;\n    }\n    createCan(startTr) {\n        const { rawCommands, state } = this;\n        const dispatch = false;\n        const tr = startTr || state.tr;\n        const props = this.buildProps(tr, dispatch);\n        const formattedCommands = Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n            return [name, (...args) => command(...args)({ ...props, dispatch: undefined })];\n        }));\n        return {\n            ...formattedCommands,\n            chain: () => this.createChain(tr, dispatch),\n        };\n    }\n    buildProps(tr, shouldDispatch = true) {\n        const { rawCommands, editor, state } = this;\n        const { view } = editor;\n        const props = {\n            tr,\n            editor,\n            view,\n            state: createChainableState({\n                state,\n                transaction: tr,\n            }),\n            dispatch: shouldDispatch ? () => undefined : undefined,\n            chain: () => this.createChain(tr, shouldDispatch),\n            can: () => this.createCan(tr),\n            get commands() {\n                return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n                    return [name, (...args) => command(...args)(props)];\n                }));\n            },\n        };\n        return props;\n    }\n}\n\nclass EventEmitter {\n    constructor() {\n        this.callbacks = {};\n    }\n    on(event, fn) {\n        if (!this.callbacks[event]) {\n            this.callbacks[event] = [];\n        }\n        this.callbacks[event].push(fn);\n        return this;\n    }\n    emit(event, ...args) {\n        const callbacks = this.callbacks[event];\n        if (callbacks) {\n            callbacks.forEach(callback => callback.apply(this, args));\n        }\n        return this;\n    }\n    off(event, fn) {\n        const callbacks = this.callbacks[event];\n        if (callbacks) {\n            if (fn) {\n                this.callbacks[event] = callbacks.filter(callback => callback !== fn);\n            }\n            else {\n                delete this.callbacks[event];\n            }\n        }\n        return this;\n    }\n    once(event, fn) {\n        const onceFn = (...args) => {\n            this.off(event, onceFn);\n            fn.apply(this, args);\n        };\n        return this.on(event, onceFn);\n    }\n    removeAllListeners() {\n        this.callbacks = {};\n    }\n}\n\n/**\n * Returns a field from an extension\n * @param extension The Tiptap extension\n * @param field The field, for example `renderHTML` or `priority`\n * @param context The context object that should be passed as `this` into the function\n * @returns The field value\n */\nfunction getExtensionField(extension, field, context) {\n    if (extension.config[field] === undefined && extension.parent) {\n        return getExtensionField(extension.parent, field, context);\n    }\n    if (typeof extension.config[field] === 'function') {\n        const value = extension.config[field].bind({\n            ...context,\n            parent: extension.parent\n                ? getExtensionField(extension.parent, field, context)\n                : null,\n        });\n        return value;\n    }\n    return extension.config[field];\n}\n\nfunction splitExtensions(extensions) {\n    const baseExtensions = extensions.filter(extension => extension.type === 'extension');\n    const nodeExtensions = extensions.filter(extension => extension.type === 'node');\n    const markExtensions = extensions.filter(extension => extension.type === 'mark');\n    return {\n        baseExtensions,\n        nodeExtensions,\n        markExtensions,\n    };\n}\n\n/**\n * Get a list of all extension attributes defined in `addAttribute` and `addGlobalAttribute`.\n * @param extensions List of extensions\n */\nfunction getAttributesFromExtensions(extensions) {\n    const extensionAttributes = [];\n    const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n    const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\n    const defaultAttribute = {\n        default: null,\n        rendered: true,\n        renderHTML: null,\n        parseHTML: null,\n        keepOnSplit: true,\n        isRequired: false,\n    };\n    extensions.forEach(extension => {\n        const context = {\n            name: extension.name,\n            options: extension.options,\n            storage: extension.storage,\n            extensions: nodeAndMarkExtensions,\n        };\n        const addGlobalAttributes = getExtensionField(extension, 'addGlobalAttributes', context);\n        if (!addGlobalAttributes) {\n            return;\n        }\n        const globalAttributes = addGlobalAttributes();\n        globalAttributes.forEach(globalAttribute => {\n            globalAttribute.types.forEach(type => {\n                Object\n                    .entries(globalAttribute.attributes)\n                    .forEach(([name, attribute]) => {\n                    extensionAttributes.push({\n                        type,\n                        name,\n                        attribute: {\n                            ...defaultAttribute,\n                            ...attribute,\n                        },\n                    });\n                });\n            });\n        });\n    });\n    nodeAndMarkExtensions.forEach(extension => {\n        const context = {\n            name: extension.name,\n            options: extension.options,\n            storage: extension.storage,\n        };\n        const addAttributes = getExtensionField(extension, 'addAttributes', context);\n        if (!addAttributes) {\n            return;\n        }\n        // TODO: remove `as Attributes`\n        const attributes = addAttributes();\n        Object\n            .entries(attributes)\n            .forEach(([name, attribute]) => {\n            const mergedAttr = {\n                ...defaultAttribute,\n                ...attribute,\n            };\n            if (typeof (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === 'function') {\n                mergedAttr.default = mergedAttr.default();\n            }\n            if ((mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.isRequired) && (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === undefined) {\n                delete mergedAttr.default;\n            }\n            extensionAttributes.push({\n                type: extension.name,\n                name,\n                attribute: mergedAttr,\n            });\n        });\n    });\n    return extensionAttributes;\n}\n\nfunction getNodeType(nameOrType, schema) {\n    if (typeof nameOrType === 'string') {\n        if (!schema.nodes[nameOrType]) {\n            throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n        }\n        return schema.nodes[nameOrType];\n    }\n    return nameOrType;\n}\n\nfunction mergeAttributes(...objects) {\n    return objects\n        .filter(item => !!item)\n        .reduce((items, item) => {\n        const mergedAttributes = { ...items };\n        Object.entries(item).forEach(([key, value]) => {\n            const exists = mergedAttributes[key];\n            if (!exists) {\n                mergedAttributes[key] = value;\n                return;\n            }\n            if (key === 'class') {\n                const valueClasses = value ? String(value).split(' ') : [];\n                const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(' ') : [];\n                const insertClasses = valueClasses.filter(valueClass => !existingClasses.includes(valueClass));\n                mergedAttributes[key] = [...existingClasses, ...insertClasses].join(' ');\n            }\n            else if (key === 'style') {\n                const newStyles = value ? value.split(';').map((style) => style.trim()).filter(Boolean) : [];\n                const existingStyles = mergedAttributes[key] ? mergedAttributes[key].split(';').map((style) => style.trim()).filter(Boolean) : [];\n                const styleMap = new Map();\n                existingStyles.forEach(style => {\n                    const [property, val] = style.split(':').map(part => part.trim());\n                    styleMap.set(property, val);\n                });\n                newStyles.forEach(style => {\n                    const [property, val] = style.split(':').map(part => part.trim());\n                    styleMap.set(property, val);\n                });\n                mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join('; ');\n            }\n            else {\n                mergedAttributes[key] = value;\n            }\n        });\n        return mergedAttributes;\n    }, {});\n}\n\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\n    return extensionAttributes\n        .filter(attribute => attribute.type === nodeOrMark.type.name)\n        .filter(item => item.attribute.rendered)\n        .map(item => {\n        if (!item.attribute.renderHTML) {\n            return {\n                [item.name]: nodeOrMark.attrs[item.name],\n            };\n        }\n        return item.attribute.renderHTML(nodeOrMark.attrs) || {};\n    })\n        .reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction isFunction(value) {\n    return typeof value === 'function';\n}\n\n/**\n * Optionally calls `value` as a function.\n * Otherwise it is returned directly.\n * @param value Function or any value.\n * @param context Optional context to bind to function.\n * @param props Optional props to pass to function.\n */\nfunction callOrReturn(value, context = undefined, ...props) {\n    if (isFunction(value)) {\n        if (context) {\n            return value.bind(context)(...props);\n        }\n        return value(...props);\n    }\n    return value;\n}\n\nfunction isEmptyObject(value = {}) {\n    return Object.keys(value).length === 0 && value.constructor === Object;\n}\n\nfunction fromString(value) {\n    if (typeof value !== 'string') {\n        return value;\n    }\n    if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\n        return Number(value);\n    }\n    if (value === 'true') {\n        return true;\n    }\n    if (value === 'false') {\n        return false;\n    }\n    return value;\n}\n\n/**\n * This function merges extension attributes into parserule attributes (`attrs` or `getAttrs`).\n * Cancels when `getAttrs` returned `false`.\n * @param parseRule ProseMirror ParseRule\n * @param extensionAttributes List of attributes to inject\n */\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\n    if ('style' in parseRule) {\n        return parseRule;\n    }\n    return {\n        ...parseRule,\n        getAttrs: (node) => {\n            const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\n            if (oldAttributes === false) {\n                return false;\n            }\n            const newAttributes = extensionAttributes.reduce((items, item) => {\n                const value = item.attribute.parseHTML\n                    ? item.attribute.parseHTML(node)\n                    : fromString((node).getAttribute(item.name));\n                if (value === null || value === undefined) {\n                    return items;\n                }\n                return {\n                    ...items,\n                    [item.name]: value,\n                };\n            }, {});\n            return { ...oldAttributes, ...newAttributes };\n        },\n    };\n}\n\nfunction cleanUpSchemaItem(data) {\n    return Object.fromEntries(\n    // @ts-ignore\n    Object.entries(data).filter(([key, value]) => {\n        if (key === 'attrs' && isEmptyObject(value)) {\n            return false;\n        }\n        return value !== null && value !== undefined;\n    }));\n}\n/**\n * Creates a new Prosemirror schema based on the given extensions.\n * @param extensions An array of Tiptap extensions\n * @param editor The editor instance\n * @returns A Prosemirror schema\n */\nfunction getSchemaByResolvedExtensions(extensions, editor) {\n    var _a;\n    const allAttributes = getAttributesFromExtensions(extensions);\n    const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n    const topNode = (_a = nodeExtensions.find(extension => getExtensionField(extension, 'topNode'))) === null || _a === void 0 ? void 0 : _a.name;\n    const nodes = Object.fromEntries(nodeExtensions.map(extension => {\n        const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name);\n        const context = {\n            name: extension.name,\n            options: extension.options,\n            storage: extension.storage,\n            editor,\n        };\n        const extraNodeFields = extensions.reduce((fields, e) => {\n            const extendNodeSchema = getExtensionField(e, 'extendNodeSchema', context);\n            return {\n                ...fields,\n                ...(extendNodeSchema ? extendNodeSchema(extension) : {}),\n            };\n        }, {});\n        const schema = cleanUpSchemaItem({\n            ...extraNodeFields,\n            content: callOrReturn(getExtensionField(extension, 'content', context)),\n            marks: callOrReturn(getExtensionField(extension, 'marks', context)),\n            group: callOrReturn(getExtensionField(extension, 'group', context)),\n            inline: callOrReturn(getExtensionField(extension, 'inline', context)),\n            atom: callOrReturn(getExtensionField(extension, 'atom', context)),\n            selectable: callOrReturn(getExtensionField(extension, 'selectable', context)),\n            draggable: callOrReturn(getExtensionField(extension, 'draggable', context)),\n            code: callOrReturn(getExtensionField(extension, 'code', context)),\n            whitespace: callOrReturn(getExtensionField(extension, 'whitespace', context)),\n            linebreakReplacement: callOrReturn(getExtensionField(extension, 'linebreakReplacement', context)),\n            defining: callOrReturn(getExtensionField(extension, 'defining', context)),\n            isolating: callOrReturn(getExtensionField(extension, 'isolating', context)),\n            attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {\n                var _a;\n                return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }];\n            })),\n        });\n        const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context));\n        if (parseHTML) {\n            schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes));\n        }\n        const renderHTML = getExtensionField(extension, 'renderHTML', context);\n        if (renderHTML) {\n            schema.toDOM = node => renderHTML({\n                node,\n                HTMLAttributes: getRenderedAttributes(node, extensionAttributes),\n            });\n        }\n        const renderText = getExtensionField(extension, 'renderText', context);\n        if (renderText) {\n            schema.toText = renderText;\n        }\n        return [extension.name, schema];\n    }));\n    const marks = Object.fromEntries(markExtensions.map(extension => {\n        const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name);\n        const context = {\n            name: extension.name,\n            options: extension.options,\n            storage: extension.storage,\n            editor,\n        };\n        const extraMarkFields = extensions.reduce((fields, e) => {\n            const extendMarkSchema = getExtensionField(e, 'extendMarkSchema', context);\n            return {\n                ...fields,\n                ...(extendMarkSchema ? extendMarkSchema(extension) : {}),\n            };\n        }, {});\n        const schema = cleanUpSchemaItem({\n            ...extraMarkFields,\n            inclusive: callOrReturn(getExtensionField(extension, 'inclusive', context)),\n            excludes: callOrReturn(getExtensionField(extension, 'excludes', context)),\n            group: callOrReturn(getExtensionField(extension, 'group', context)),\n            spanning: callOrReturn(getExtensionField(extension, 'spanning', context)),\n            code: callOrReturn(getExtensionField(extension, 'code', context)),\n            attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {\n                var _a;\n                return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }];\n            })),\n        });\n        const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context));\n        if (parseHTML) {\n            schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes));\n        }\n        const renderHTML = getExtensionField(extension, 'renderHTML', context);\n        if (renderHTML) {\n            schema.toDOM = mark => renderHTML({\n                mark,\n                HTMLAttributes: getRenderedAttributes(mark, extensionAttributes),\n            });\n        }\n        return [extension.name, schema];\n    }));\n    return new model.Schema({\n        topNode,\n        nodes,\n        marks,\n    });\n}\n\n/**\n * Tries to get a node or mark type by its name.\n * @param name The name of the node or mark type\n * @param schema The Prosemiror schema to search in\n * @returns The node or mark type, or null if it doesn't exist\n */\nfunction getSchemaTypeByName(name, schema) {\n    return schema.nodes[name] || schema.marks[name] || null;\n}\n\nfunction isExtensionRulesEnabled(extension, enabled) {\n    if (Array.isArray(enabled)) {\n        return enabled.some(enabledExtension => {\n            const name = typeof enabledExtension === 'string'\n                ? enabledExtension\n                : enabledExtension.name;\n            return name === extension.name;\n        });\n    }\n    return enabled;\n}\n\nfunction getHTMLFromFragment(fragment, schema) {\n    const documentFragment = model.DOMSerializer.fromSchema(schema).serializeFragment(fragment);\n    const temporaryDocument = document.implementation.createHTMLDocument();\n    const container = temporaryDocument.createElement('div');\n    container.appendChild(documentFragment);\n    return container.innerHTML;\n}\n\n/**\n * Returns the text content of a resolved prosemirror position\n * @param $from The resolved position to get the text content from\n * @param maxMatch The maximum number of characters to match\n * @returns The text content\n */\nconst getTextContentFromNodes = ($from, maxMatch = 500) => {\n    let textBefore = '';\n    const sliceEndPos = $from.parentOffset;\n    $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\n        var _a, _b;\n        const chunk = ((_b = (_a = node.type.spec).toText) === null || _b === void 0 ? void 0 : _b.call(_a, {\n            node,\n            pos,\n            parent,\n            index,\n        }))\n            || node.textContent\n            || '%leaf%';\n        textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));\n    });\n    return textBefore;\n};\n\nfunction isRegExp(value) {\n    return Object.prototype.toString.call(value) === '[object RegExp]';\n}\n\nclass InputRule {\n    constructor(config) {\n        this.find = config.find;\n        this.handler = config.handler;\n    }\n}\nconst inputRuleMatcherHandler = (text, find) => {\n    if (isRegExp(find)) {\n        return find.exec(text);\n    }\n    const inputRuleMatch = find(text);\n    if (!inputRuleMatch) {\n        return null;\n    }\n    const result = [inputRuleMatch.text];\n    result.index = inputRuleMatch.index;\n    result.input = text;\n    result.data = inputRuleMatch.data;\n    if (inputRuleMatch.replaceWith) {\n        if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\n            console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\n        }\n        result.push(inputRuleMatch.replaceWith);\n    }\n    return result;\n};\nfunction run$1(config) {\n    var _a;\n    const { editor, from, to, text, rules, plugin, } = config;\n    const { view } = editor;\n    if (view.composing) {\n        return false;\n    }\n    const $from = view.state.doc.resolve(from);\n    if (\n    // check for code node\n    $from.parent.type.spec.code\n        // check for code mark\n        || !!((_a = ($from.nodeBefore || $from.nodeAfter)) === null || _a === void 0 ? void 0 : _a.marks.find(mark => mark.type.spec.code))) {\n        return false;\n    }\n    let matched = false;\n    const textBefore = getTextContentFromNodes($from) + text;\n    rules.forEach(rule => {\n        if (matched) {\n            return;\n        }\n        const match = inputRuleMatcherHandler(textBefore, rule.find);\n        if (!match) {\n            return;\n        }\n        const tr = view.state.tr;\n        const state = createChainableState({\n            state: view.state,\n            transaction: tr,\n        });\n        const range = {\n            from: from - (match[0].length - text.length),\n            to,\n        };\n        const { commands, chain, can } = new CommandManager({\n            editor,\n            state,\n        });\n        const handler = rule.handler({\n            state,\n            range,\n            match,\n            commands,\n            chain,\n            can,\n        });\n        // stop if there are no changes\n        if (handler === null || !tr.steps.length) {\n            return;\n        }\n        // store transform as meta data\n        // so we can undo input rules within the `undoInputRules` command\n        tr.setMeta(plugin, {\n            transform: tr,\n            from,\n            to,\n            text,\n        });\n        view.dispatch(tr);\n        matched = true;\n    });\n    return matched;\n}\n/**\n * Create an input rules plugin. When enabled, it will cause text\n * input that matches any of the given rules to trigger the rule’s\n * action.\n */\nfunction inputRulesPlugin(props) {\n    const { editor, rules } = props;\n    const plugin = new state.Plugin({\n        state: {\n            init() {\n                return null;\n            },\n            apply(tr, prev, state) {\n                const stored = tr.getMeta(plugin);\n                if (stored) {\n                    return stored;\n                }\n                // if InputRule is triggered by insertContent()\n                const simulatedInputMeta = tr.getMeta('applyInputRules');\n                const isSimulatedInput = !!simulatedInputMeta;\n                if (isSimulatedInput) {\n                    setTimeout(() => {\n                        let { text } = simulatedInputMeta;\n                        if (typeof text === 'string') {\n                            text = text;\n                        }\n                        else {\n                            text = getHTMLFromFragment(model.Fragment.from(text), state.schema);\n                        }\n                        const { from } = simulatedInputMeta;\n                        const to = from + text.length;\n                        run$1({\n                            editor,\n                            from,\n                            to,\n                            text,\n                            rules,\n                            plugin,\n                        });\n                    });\n                }\n                return tr.selectionSet || tr.docChanged ? null : prev;\n            },\n        },\n        props: {\n            handleTextInput(view, from, to, text) {\n                return run$1({\n                    editor,\n                    from,\n                    to,\n                    text,\n                    rules,\n                    plugin,\n                });\n            },\n            handleDOMEvents: {\n                compositionend: view => {\n                    setTimeout(() => {\n                        const { $cursor } = view.state.selection;\n                        if ($cursor) {\n                            run$1({\n                                editor,\n                                from: $cursor.pos,\n                                to: $cursor.pos,\n                                text: '',\n                                rules,\n                                plugin,\n                            });\n                        }\n                    });\n                    return false;\n                },\n            },\n            // add support for input rules to trigger on enter\n            // this is useful for example for code blocks\n            handleKeyDown(view, event) {\n                if (event.key !== 'Enter') {\n                    return false;\n                }\n                const { $cursor } = view.state.selection;\n                if ($cursor) {\n                    return run$1({\n                        editor,\n                        from: $cursor.pos,\n                        to: $cursor.pos,\n                        text: '\\n',\n                        rules,\n                        plugin,\n                    });\n                }\n                return false;\n            },\n        },\n        // @ts-ignore\n        isInputRules: true,\n    });\n    return plugin;\n}\n\n// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts\nfunction getType(value) {\n    return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n    if (getType(value) !== 'Object') {\n        return false;\n    }\n    return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n\nfunction mergeDeep(target, source) {\n    const output = { ...target };\n    if (isPlainObject(target) && isPlainObject(source)) {\n        Object.keys(source).forEach(key => {\n            if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n                output[key] = mergeDeep(target[key], source[key]);\n            }\n            else {\n                output[key] = source[key];\n            }\n        });\n    }\n    return output;\n}\n\n/**\n * The Mark class is used to create custom mark extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nclass Mark {\n    constructor(config = {}) {\n        this.type = 'mark';\n        this.name = 'mark';\n        this.parent = null;\n        this.child = null;\n        this.config = {\n            name: this.name,\n            defaultOptions: {},\n        };\n        this.config = {\n            ...this.config,\n            ...config,\n        };\n        this.name = this.config.name;\n        if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\n            console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\n        }\n        // TODO: remove `addOptions` fallback\n        this.options = this.config.defaultOptions;\n        if (this.config.addOptions) {\n            this.options = callOrReturn(getExtensionField(this, 'addOptions', {\n                name: this.name,\n            }));\n        }\n        this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\n            name: this.name,\n            options: this.options,\n        })) || {};\n    }\n    static create(config = {}) {\n        return new Mark(config);\n    }\n    configure(options = {}) {\n        // return a new instance so we can use the same extension\n        // with different calls of `configure`\n        const extension = this.extend({\n            ...this.config,\n            addOptions: () => {\n                return mergeDeep(this.options, options);\n            },\n        });\n        // Always preserve the current name\n        extension.name = this.name;\n        // Set the parent to be our parent\n        extension.parent = this.parent;\n        return extension;\n    }\n    extend(extendedConfig = {}) {\n        const extension = new Mark(extendedConfig);\n        extension.parent = this;\n        this.child = extension;\n        extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\n        if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {\n            console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\n        }\n        extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\n            name: extension.name,\n        }));\n        extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\n            name: extension.name,\n            options: extension.options,\n        }));\n        return extension;\n    }\n    static handleExit({ editor, mark }) {\n        const { tr } = editor.state;\n        const currentPos = editor.state.selection.$from;\n        const isAtEnd = currentPos.pos === currentPos.end();\n        if (isAtEnd) {\n            const currentMarks = currentPos.marks();\n            const isInMark = !!currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name);\n            if (!isInMark) {\n                return false;\n            }\n            const removeMark = currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name);\n            if (removeMark) {\n                tr.removeStoredMark(removeMark);\n            }\n            tr.insertText(' ', currentPos.pos);\n            editor.view.dispatch(tr);\n            return true;\n        }\n        return false;\n    }\n}\n\nfunction isNumber(value) {\n    return typeof value === 'number';\n}\n\n/**\n * Paste rules are used to react to pasted content.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#paste-rules\n */\nclass PasteRule {\n    constructor(config) {\n        this.find = config.find;\n        this.handler = config.handler;\n    }\n}\nconst pasteRuleMatcherHandler = (text, find, event) => {\n    if (isRegExp(find)) {\n        return [...text.matchAll(find)];\n    }\n    const matches = find(text, event);\n    if (!matches) {\n        return [];\n    }\n    return matches.map(pasteRuleMatch => {\n        const result = [pasteRuleMatch.text];\n        result.index = pasteRuleMatch.index;\n        result.input = text;\n        result.data = pasteRuleMatch.data;\n        if (pasteRuleMatch.replaceWith) {\n            if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\n                console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\n            }\n            result.push(pasteRuleMatch.replaceWith);\n        }\n        return result;\n    });\n};\nfunction run(config) {\n    const { editor, state, from, to, rule, pasteEvent, dropEvent, } = config;\n    const { commands, chain, can } = new CommandManager({\n        editor,\n        state,\n    });\n    const handlers = [];\n    state.doc.nodesBetween(from, to, (node, pos) => {\n        if (!node.isTextblock || node.type.spec.code) {\n            return;\n        }\n        const resolvedFrom = Math.max(from, pos);\n        const resolvedTo = Math.min(to, pos + node.content.size);\n        const textToMatch = node.textBetween(resolvedFrom - pos, resolvedTo - pos, undefined, '\\ufffc');\n        const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\n        matches.forEach(match => {\n            if (match.index === undefined) {\n                return;\n            }\n            const start = resolvedFrom + match.index + 1;\n            const end = start + match[0].length;\n            const range = {\n                from: state.tr.mapping.map(start),\n                to: state.tr.mapping.map(end),\n            };\n            const handler = rule.handler({\n                state,\n                range,\n                match,\n                commands,\n                chain,\n                can,\n                pasteEvent,\n                dropEvent,\n            });\n            handlers.push(handler);\n        });\n    });\n    const success = handlers.every(handler => handler !== null);\n    return success;\n}\n// When dragging across editors, must get another editor instance to delete selection content.\nlet tiptapDragFromOtherEditor = null;\nconst createClipboardPasteEvent = (text) => {\n    var _a;\n    const event = new ClipboardEvent('paste', {\n        clipboardData: new DataTransfer(),\n    });\n    (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.setData('text/html', text);\n    return event;\n};\n/**\n * Create an paste rules plugin. When enabled, it will cause pasted\n * text that matches any of the given rules to trigger the rule’s\n * action.\n */\nfunction pasteRulesPlugin(props) {\n    const { editor, rules } = props;\n    let dragSourceElement = null;\n    let isPastedFromProseMirror = false;\n    let isDroppedFromProseMirror = false;\n    let pasteEvent = typeof ClipboardEvent !== 'undefined' ? new ClipboardEvent('paste') : null;\n    let dropEvent;\n    try {\n        dropEvent = typeof DragEvent !== 'undefined' ? new DragEvent('drop') : null;\n    }\n    catch {\n        dropEvent = null;\n    }\n    const processEvent = ({ state, from, to, rule, pasteEvt, }) => {\n        const tr = state.tr;\n        const chainableState = createChainableState({\n            state,\n            transaction: tr,\n        });\n        const handler = run({\n            editor,\n            state: chainableState,\n            from: Math.max(from - 1, 0),\n            to: to.b - 1,\n            rule,\n            pasteEvent: pasteEvt,\n            dropEvent,\n        });\n        if (!handler || !tr.steps.length) {\n            return;\n        }\n        try {\n            dropEvent = typeof DragEvent !== 'undefined' ? new DragEvent('drop') : null;\n        }\n        catch {\n            dropEvent = null;\n        }\n        pasteEvent = typeof ClipboardEvent !== 'undefined' ? new ClipboardEvent('paste') : null;\n        return tr;\n    };\n    const plugins = rules.map(rule => {\n        return new state.Plugin({\n            // we register a global drag handler to track the current drag source element\n            view(view) {\n                const handleDragstart = (event) => {\n                    var _a;\n                    dragSourceElement = ((_a = view.dom.parentElement) === null || _a === void 0 ? void 0 : _a.contains(event.target))\n                        ? view.dom.parentElement\n                        : null;\n                    if (dragSourceElement) {\n                        tiptapDragFromOtherEditor = editor;\n                    }\n                };\n                const handleDragend = () => {\n                    if (tiptapDragFromOtherEditor) {\n                        tiptapDragFromOtherEditor = null;\n                    }\n                };\n                window.addEventListener('dragstart', handleDragstart);\n                window.addEventListener('dragend', handleDragend);\n                return {\n                    destroy() {\n                        window.removeEventListener('dragstart', handleDragstart);\n                        window.removeEventListener('dragend', handleDragend);\n                    },\n                };\n            },\n            props: {\n                handleDOMEvents: {\n                    drop: (view, event) => {\n                        isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\n                        dropEvent = event;\n                        if (!isDroppedFromProseMirror) {\n                            const dragFromOtherEditor = tiptapDragFromOtherEditor;\n                            if (dragFromOtherEditor === null || dragFromOtherEditor === void 0 ? void 0 : dragFromOtherEditor.isEditable) {\n                                // setTimeout to avoid the wrong content after drop, timeout arg can't be empty or 0\n                                setTimeout(() => {\n                                    const selection = dragFromOtherEditor.state.selection;\n                                    if (selection) {\n                                        dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });\n                                    }\n                                }, 10);\n                            }\n                        }\n                        return false;\n                    },\n                    paste: (_view, event) => {\n                        var _a;\n                        const html = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/html');\n                        pasteEvent = event;\n                        isPastedFromProseMirror = !!(html === null || html === void 0 ? void 0 : html.includes('data-pm-slice'));\n                        return false;\n                    },\n                },\n            },\n            appendTransaction: (transactions, oldState, state) => {\n                const transaction = transactions[0];\n                const isPaste = transaction.getMeta('uiEvent') === 'paste' && !isPastedFromProseMirror;\n                const isDrop = transaction.getMeta('uiEvent') === 'drop' && !isDroppedFromProseMirror;\n                // if PasteRule is triggered by insertContent()\n                const simulatedPasteMeta = transaction.getMeta('applyPasteRules');\n                const isSimulatedPaste = !!simulatedPasteMeta;\n                if (!isPaste && !isDrop && !isSimulatedPaste) {\n                    return;\n                }\n                // Handle simulated paste\n                if (isSimulatedPaste) {\n                    let { text } = simulatedPasteMeta;\n                    if (typeof text === 'string') {\n                        text = text;\n                    }\n                    else {\n                        text = getHTMLFromFragment(model.Fragment.from(text), state.schema);\n                    }\n                    const { from } = simulatedPasteMeta;\n                    const to = from + text.length;\n                    const pasteEvt = createClipboardPasteEvent(text);\n                    return processEvent({\n                        rule,\n                        state,\n                        from,\n                        to: { b: to },\n                        pasteEvt,\n                    });\n                }\n                // handle actual paste/drop\n                const from = oldState.doc.content.findDiffStart(state.doc.content);\n                const to = oldState.doc.content.findDiffEnd(state.doc.content);\n                // stop if there is no changed range\n                if (!isNumber(from) || !to || from === to.b) {\n                    return;\n                }\n                return processEvent({\n                    rule,\n                    state,\n                    from,\n                    to,\n                    pasteEvt: pasteEvent,\n                });\n            },\n        });\n    });\n    return plugins;\n}\n\nfunction findDuplicates(items) {\n    const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n    return Array.from(new Set(filtered));\n}\n\nclass ExtensionManager {\n    constructor(extensions, editor) {\n        this.splittableMarks = [];\n        this.editor = editor;\n        this.extensions = ExtensionManager.resolve(extensions);\n        this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\n        this.setupExtensions();\n    }\n    /**\n     * Returns a flattened and sorted extension list while\n     * also checking for duplicated extensions and warns the user.\n     * @param extensions An array of Tiptap extensions\n     * @returns An flattened and sorted array of Tiptap extensions\n     */\n    static resolve(extensions) {\n        const resolvedExtensions = ExtensionManager.sort(ExtensionManager.flatten(extensions));\n        const duplicatedNames = findDuplicates(resolvedExtensions.map(extension => extension.name));\n        if (duplicatedNames.length) {\n            console.warn(`[tiptap warn]: Duplicate extension names found: [${duplicatedNames\n                .map(item => `'${item}'`)\n                .join(', ')}]. This can lead to issues.`);\n        }\n        return resolvedExtensions;\n    }\n    /**\n     * Create a flattened array of extensions by traversing the `addExtensions` field.\n     * @param extensions An array of Tiptap extensions\n     * @returns A flattened array of Tiptap extensions\n     */\n    static flatten(extensions) {\n        return (extensions\n            .map(extension => {\n            const context = {\n                name: extension.name,\n                options: extension.options,\n                storage: extension.storage,\n            };\n            const addExtensions = getExtensionField(extension, 'addExtensions', context);\n            if (addExtensions) {\n                return [extension, ...this.flatten(addExtensions())];\n            }\n            return extension;\n        })\n            // `Infinity` will break TypeScript so we set a number that is probably high enough\n            .flat(10));\n    }\n    /**\n     * Sort extensions by priority.\n     * @param extensions An array of Tiptap extensions\n     * @returns A sorted array of Tiptap extensions by priority\n     */\n    static sort(extensions) {\n        const defaultPriority = 100;\n        return extensions.sort((a, b) => {\n            const priorityA = getExtensionField(a, 'priority') || defaultPriority;\n            const priorityB = getExtensionField(b, 'priority') || defaultPriority;\n            if (priorityA > priorityB) {\n                return -1;\n            }\n            if (priorityA < priorityB) {\n                return 1;\n            }\n            return 0;\n        });\n    }\n    /**\n     * Get all commands from the extensions.\n     * @returns An object with all commands where the key is the command name and the value is the command function\n     */\n    get commands() {\n        return this.extensions.reduce((commands, extension) => {\n            const context = {\n                name: extension.name,\n                options: extension.options,\n                storage: extension.storage,\n                editor: this.editor,\n                type: getSchemaTypeByName(extension.name, this.schema),\n            };\n            const addCommands = getExtensionField(extension, 'addCommands', context);\n            if (!addCommands) {\n                return commands;\n            }\n            return {\n                ...commands,\n                ...addCommands(),\n            };\n        }, {});\n    }\n    /**\n     * Get all registered Prosemirror plugins from the extensions.\n     * @returns An array of Prosemirror plugins\n     */\n    get plugins() {\n        const { editor } = this;\n        // With ProseMirror, first plugins within an array are executed first.\n        // In Tiptap, we provide the ability to override plugins,\n        // so it feels more natural to run plugins at the end of an array first.\n        // That’s why we have to reverse the `extensions` array and sort again\n        // based on the `priority` option.\n        const extensions = ExtensionManager.sort([...this.extensions].reverse());\n        const inputRules = [];\n        const pasteRules = [];\n        const allPlugins = extensions\n            .map(extension => {\n            const context = {\n                name: extension.name,\n                options: extension.options,\n                storage: extension.storage,\n                editor,\n                type: getSchemaTypeByName(extension.name, this.schema),\n            };\n            const plugins = [];\n            const addKeyboardShortcuts = getExtensionField(extension, 'addKeyboardShortcuts', context);\n            let defaultBindings = {};\n            // bind exit handling\n            if (extension.type === 'mark' && getExtensionField(extension, 'exitable', context)) {\n                defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\n            }\n            if (addKeyboardShortcuts) {\n                const bindings = Object.fromEntries(Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\n                    return [shortcut, () => method({ editor })];\n                }));\n                defaultBindings = { ...defaultBindings, ...bindings };\n            }\n            const keyMapPlugin = keymap.keymap(defaultBindings);\n            plugins.push(keyMapPlugin);\n            const addInputRules = getExtensionField(extension, 'addInputRules', context);\n            if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\n                inputRules.push(...addInputRules());\n            }\n            const addPasteRules = getExtensionField(extension, 'addPasteRules', context);\n            if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\n                pasteRules.push(...addPasteRules());\n            }\n            const addProseMirrorPlugins = getExtensionField(extension, 'addProseMirrorPlugins', context);\n            if (addProseMirrorPlugins) {\n                const proseMirrorPlugins = addProseMirrorPlugins();\n                plugins.push(...proseMirrorPlugins);\n            }\n            return plugins;\n        })\n            .flat();\n        return [\n            inputRulesPlugin({\n                editor,\n                rules: inputRules,\n            }),\n            ...pasteRulesPlugin({\n                editor,\n                rules: pasteRules,\n            }),\n            ...allPlugins,\n        ];\n    }\n    /**\n     * Get all attributes from the extensions.\n     * @returns An array of attributes\n     */\n    get attributes() {\n        return getAttributesFromExtensions(this.extensions);\n    }\n    /**\n     * Get all node views from the extensions.\n     * @returns An object with all node views where the key is the node name and the value is the node view function\n     */\n    get nodeViews() {\n        const { editor } = this;\n        const { nodeExtensions } = splitExtensions(this.extensions);\n        return Object.fromEntries(nodeExtensions\n            .filter(extension => !!getExtensionField(extension, 'addNodeView'))\n            .map(extension => {\n            const extensionAttributes = this.attributes.filter(attribute => attribute.type === extension.name);\n            const context = {\n                name: extension.name,\n                options: extension.options,\n                storage: extension.storage,\n                editor,\n                type: getNodeType(extension.name, this.schema),\n            };\n            const addNodeView = getExtensionField(extension, 'addNodeView', context);\n            if (!addNodeView) {\n                return [];\n            }\n            const nodeview = (node, view, getPos, decorations, innerDecorations) => {\n                const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\n                return addNodeView()({\n                    // pass-through\n                    node,\n                    view,\n                    getPos: getPos,\n                    decorations,\n                    innerDecorations,\n                    // tiptap-specific\n                    editor,\n                    extension,\n                    HTMLAttributes,\n                });\n            };\n            return [extension.name, nodeview];\n        }));\n    }\n    /**\n     * Go through all extensions, create extension storages & setup marks\n     * & bind editor event listener.\n     */\n    setupExtensions() {\n        this.extensions.forEach(extension => {\n            var _a;\n            // store extension storage in editor\n            this.editor.extensionStorage[extension.name] = extension.storage;\n            const context = {\n                name: extension.name,\n                options: extension.options,\n                storage: extension.storage,\n                editor: this.editor,\n                type: getSchemaTypeByName(extension.name, this.schema),\n            };\n            if (extension.type === 'mark') {\n                const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, 'keepOnSplit', context))) !== null && _a !== void 0 ? _a : true;\n                if (keepOnSplit) {\n                    this.splittableMarks.push(extension.name);\n                }\n            }\n            const onBeforeCreate = getExtensionField(extension, 'onBeforeCreate', context);\n            const onCreate = getExtensionField(extension, 'onCreate', context);\n            const onUpdate = getExtensionField(extension, 'onUpdate', context);\n            const onSelectionUpdate = getExtensionField(extension, 'onSelectionUpdate', context);\n            const onTransaction = getExtensionField(extension, 'onTransaction', context);\n            const onFocus = getExtensionField(extension, 'onFocus', context);\n            const onBlur = getExtensionField(extension, 'onBlur', context);\n            const onDestroy = getExtensionField(extension, 'onDestroy', context);\n            if (onBeforeCreate) {\n                this.editor.on('beforeCreate', onBeforeCreate);\n            }\n            if (onCreate) {\n                this.editor.on('create', onCreate);\n            }\n            if (onUpdate) {\n                this.editor.on('update', onUpdate);\n            }\n            if (onSelectionUpdate) {\n                this.editor.on('selectionUpdate', onSelectionUpdate);\n            }\n            if (onTransaction) {\n                this.editor.on('transaction', onTransaction);\n            }\n            if (onFocus) {\n                this.editor.on('focus', onFocus);\n            }\n            if (onBlur) {\n                this.editor.on('blur', onBlur);\n            }\n            if (onDestroy) {\n                this.editor.on('destroy', onDestroy);\n            }\n        });\n    }\n}\n\n/**\n * The Extension class is the base class for all extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nclass Extension {\n    constructor(config = {}) {\n        this.type = 'extension';\n        this.name = 'extension';\n        this.parent = null;\n        this.child = null;\n        this.config = {\n            name: this.name,\n            defaultOptions: {},\n        };\n        this.config = {\n            ...this.config,\n            ...config,\n        };\n        this.name = this.config.name;\n        if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\n            console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\n        }\n        // TODO: remove `addOptions` fallback\n        this.options = this.config.defaultOptions;\n        if (this.config.addOptions) {\n            this.options = callOrReturn(getExtensionField(this, 'addOptions', {\n                name: this.name,\n            }));\n        }\n        this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\n            name: this.name,\n            options: this.options,\n        })) || {};\n    }\n    static create(config = {}) {\n        return new Extension(config);\n    }\n    configure(options = {}) {\n        // return a new instance so we can use the same extension\n        // with different calls of `configure`\n        const extension = this.extend({\n            ...this.config,\n            addOptions: () => {\n                return mergeDeep(this.options, options);\n            },\n        });\n        // Always preserve the current name\n        extension.name = this.name;\n        // Set the parent to be our parent\n        extension.parent = this.parent;\n        return extension;\n    }\n    extend(extendedConfig = {}) {\n        const extension = new Extension({ ...this.config, ...extendedConfig });\n        extension.parent = this;\n        this.child = extension;\n        extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\n        if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {\n            console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\n        }\n        extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\n            name: extension.name,\n        }));\n        extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\n            name: extension.name,\n            options: extension.options,\n        }));\n        return extension;\n    }\n}\n\n/**\n * Gets the text between two positions in a Prosemirror node\n * and serializes it using the given text serializers and block separator (see getText)\n * @param startNode The Prosemirror node to start from\n * @param range The range of the text to get\n * @param options Options for the text serializer & block separator\n * @returns The text between the two positions\n */\nfunction getTextBetween(startNode, range, options) {\n    const { from, to } = range;\n    const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\n    let text = '';\n    startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n        var _a;\n        if (node.isBlock && pos > from) {\n            text += blockSeparator;\n        }\n        const textSerializer = textSerializers === null || textSerializers === void 0 ? void 0 : textSerializers[node.type.name];\n        if (textSerializer) {\n            if (parent) {\n                text += textSerializer({\n                    node,\n                    pos,\n                    parent,\n                    index,\n                    range,\n                });\n            }\n            // do not descend into child nodes when there exists a serializer\n            return false;\n        }\n        if (node.isText) {\n            text += (_a = node === null || node === void 0 ? void 0 : node.text) === null || _a === void 0 ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos); // eslint-disable-line\n        }\n    });\n    return text;\n}\n\n/**\n * Find text serializers `toText` in a Prosemirror schema\n * @param schema The Prosemirror schema to search in\n * @returns A record of text serializers by node name\n */\nfunction getTextSerializersFromSchema(schema) {\n    return Object.fromEntries(Object.entries(schema.nodes)\n        .filter(([, node]) => node.spec.toText)\n        .map(([name, node]) => [name, node.spec.toText]));\n}\n\nconst ClipboardTextSerializer = Extension.create({\n    name: 'clipboardTextSerializer',\n    addOptions() {\n        return {\n            blockSeparator: undefined,\n        };\n    },\n    addProseMirrorPlugins() {\n        return [\n            new state.Plugin({\n                key: new state.PluginKey('clipboardTextSerializer'),\n                props: {\n                    clipboardTextSerializer: () => {\n                        const { editor } = this;\n                        const { state, schema } = editor;\n                        const { doc, selection } = state;\n                        const { ranges } = selection;\n                        const from = Math.min(...ranges.map(range => range.$from.pos));\n                        const to = Math.max(...ranges.map(range => range.$to.pos));\n                        const textSerializers = getTextSerializersFromSchema(schema);\n                        const range = { from, to };\n                        return getTextBetween(doc, range, {\n                            ...(this.options.blockSeparator !== undefined\n                                ? { blockSeparator: this.options.blockSeparator }\n                                : {}),\n                            textSerializers,\n                        });\n                    },\n                },\n            }),\n        ];\n    },\n});\n\nconst blur = () => ({ editor, view }) => {\n    requestAnimationFrame(() => {\n        var _a;\n        if (!editor.isDestroyed) {\n            view.dom.blur();\n            // Browsers should remove the caret on blur but safari does not.\n            // See: https://github.com/ueberdosis/tiptap/issues/2405\n            (_a = window === null || window === void 0 ? void 0 : window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();\n        }\n    });\n    return true;\n};\n\nconst clearContent = (emitUpdate = false) => ({ commands }) => {\n    return commands.setContent('', emitUpdate);\n};\n\nconst clearNodes = () => ({ state, tr, dispatch }) => {\n    const { selection } = tr;\n    const { ranges } = selection;\n    if (!dispatch) {\n        return true;\n    }\n    ranges.forEach(({ $from, $to }) => {\n        state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n            if (node.type.isText) {\n                return;\n            }\n            const { doc, mapping } = tr;\n            const $mappedFrom = doc.resolve(mapping.map(pos));\n            const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\n            const nodeRange = $mappedFrom.blockRange($mappedTo);\n            if (!nodeRange) {\n                return;\n            }\n            const targetLiftDepth = transform.liftTarget(nodeRange);\n            if (node.type.isTextblock) {\n                const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\n                tr.setNodeMarkup(nodeRange.start, defaultType);\n            }\n            if (targetLiftDepth || targetLiftDepth === 0) {\n                tr.lift(nodeRange, targetLiftDepth);\n            }\n        });\n    });\n    return true;\n};\n\nconst command = fn => props => {\n    return fn(props);\n};\n\nconst createParagraphNear = () => ({ state, dispatch }) => {\n    return commands$1.createParagraphNear(state, dispatch);\n};\n\nconst cut = (originRange, targetPos) => ({ editor, tr }) => {\n    const { state: state$1 } = editor;\n    const contentSlice = state$1.doc.slice(originRange.from, originRange.to);\n    tr.deleteRange(originRange.from, originRange.to);\n    const newPos = tr.mapping.map(targetPos);\n    tr.insert(newPos, contentSlice.content);\n    tr.setSelection(new state.TextSelection(tr.doc.resolve(Math.max(newPos - 1, 0))));\n    return true;\n};\n\nconst deleteCurrentNode = () => ({ tr, dispatch }) => {\n    const { selection } = tr;\n    const currentNode = selection.$anchor.node();\n    // if there is content inside the current node, break out of this command\n    if (currentNode.content.size > 0) {\n        return false;\n    }\n    const $pos = tr.selection.$anchor;\n    for (let depth = $pos.depth; depth > 0; depth -= 1) {\n        const node = $pos.node(depth);\n        if (node.type === currentNode.type) {\n            if (dispatch) {\n                const from = $pos.before(depth);\n                const to = $pos.after(depth);\n                tr.delete(from, to).scrollIntoView();\n            }\n            return true;\n        }\n    }\n    return false;\n};\n\nconst deleteNode = typeOrName => ({ tr, state, dispatch }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    const $pos = tr.selection.$anchor;\n    for (let depth = $pos.depth; depth > 0; depth -= 1) {\n        const node = $pos.node(depth);\n        if (node.type === type) {\n            if (dispatch) {\n                const from = $pos.before(depth);\n                const to = $pos.after(depth);\n                tr.delete(from, to).scrollIntoView();\n            }\n            return true;\n        }\n    }\n    return false;\n};\n\nconst deleteRange = range => ({ tr, dispatch }) => {\n    const { from, to } = range;\n    if (dispatch) {\n        tr.delete(from, to);\n    }\n    return true;\n};\n\nconst deleteSelection = () => ({ state, dispatch }) => {\n    return commands$1.deleteSelection(state, dispatch);\n};\n\nconst enter = () => ({ commands }) => {\n    return commands.keyboardShortcut('Enter');\n};\n\nconst exitCode = () => ({ state, dispatch }) => {\n    return commands$1.exitCode(state, dispatch);\n};\n\n/**\n * Check if object1 includes object2\n * @param object1 Object\n * @param object2 Object\n */\nfunction objectIncludes(object1, object2, options = { strict: true }) {\n    const keys = Object.keys(object2);\n    if (!keys.length) {\n        return true;\n    }\n    return keys.every(key => {\n        if (options.strict) {\n            return object2[key] === object1[key];\n        }\n        if (isRegExp(object2[key])) {\n            return object2[key].test(object1[key]);\n        }\n        return object2[key] === object1[key];\n    });\n}\n\nfunction findMarkInSet(marks, type, attributes = {}) {\n    return marks.find(item => {\n        return (item.type === type\n            && objectIncludes(\n            // Only check equality for the attributes that are provided\n            Object.fromEntries(Object.keys(attributes).map(k => [k, item.attrs[k]])), attributes));\n    });\n}\nfunction isMarkInSet(marks, type, attributes = {}) {\n    return !!findMarkInSet(marks, type, attributes);\n}\n/**\n * Get the range of a mark at a resolved position.\n */\nfunction getMarkRange(\n/**\n * The position to get the mark range for.\n */\n$pos, \n/**\n * The mark type to get the range for.\n */\ntype, \n/**\n * The attributes to match against.\n * If not provided, only the first mark at the position will be matched.\n */\nattributes) {\n    var _a;\n    if (!$pos || !type) {\n        return;\n    }\n    let start = $pos.parent.childAfter($pos.parentOffset);\n    // If the cursor is at the start of a text node that does not have the mark, look backward\n    if (!start.node || !start.node.marks.some(mark => mark.type === type)) {\n        start = $pos.parent.childBefore($pos.parentOffset);\n    }\n    // If there is no text node with the mark even backward, return undefined\n    if (!start.node || !start.node.marks.some(mark => mark.type === type)) {\n        return;\n    }\n    // Default to only matching against the first mark's attributes\n    attributes = attributes || ((_a = start.node.marks[0]) === null || _a === void 0 ? void 0 : _a.attrs);\n    // We now know that the cursor is either at the start, middle or end of a text node with the specified mark\n    // so we can look it up on the targeted mark\n    const mark = findMarkInSet([...start.node.marks], type, attributes);\n    if (!mark) {\n        return;\n    }\n    let startIndex = start.index;\n    let startPos = $pos.start() + start.offset;\n    let endIndex = startIndex + 1;\n    let endPos = startPos + start.node.nodeSize;\n    while (startIndex > 0\n        && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {\n        startIndex -= 1;\n        startPos -= $pos.parent.child(startIndex).nodeSize;\n    }\n    while (endIndex < $pos.parent.childCount\n        && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n        endPos += $pos.parent.child(endIndex).nodeSize;\n        endIndex += 1;\n    }\n    return {\n        from: startPos,\n        to: endPos,\n    };\n}\n\nfunction getMarkType(nameOrType, schema) {\n    if (typeof nameOrType === 'string') {\n        if (!schema.marks[nameOrType]) {\n            throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n        }\n        return schema.marks[nameOrType];\n    }\n    return nameOrType;\n}\n\nconst extendMarkRange = (typeOrName, attributes = {}) => ({ tr, state: state$1, dispatch }) => {\n    const type = getMarkType(typeOrName, state$1.schema);\n    const { doc, selection } = tr;\n    const { $from, from, to } = selection;\n    if (dispatch) {\n        const range = getMarkRange($from, type, attributes);\n        if (range && range.from <= from && range.to >= to) {\n            const newSelection = state.TextSelection.create(doc, range.from, range.to);\n            tr.setSelection(newSelection);\n        }\n    }\n    return true;\n};\n\nconst first = commands => props => {\n    const items = typeof commands === 'function'\n        ? commands(props)\n        : commands;\n    for (let i = 0; i < items.length; i += 1) {\n        if (items[i](props)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nfunction isTextSelection(value) {\n    return value instanceof state.TextSelection;\n}\n\nfunction minMax(value = 0, min = 0, max = 0) {\n    return Math.min(Math.max(value, min), max);\n}\n\nfunction resolveFocusPosition(doc, position = null) {\n    if (!position) {\n        return null;\n    }\n    const selectionAtStart = state.Selection.atStart(doc);\n    const selectionAtEnd = state.Selection.atEnd(doc);\n    if (position === 'start' || position === true) {\n        return selectionAtStart;\n    }\n    if (position === 'end') {\n        return selectionAtEnd;\n    }\n    const minPos = selectionAtStart.from;\n    const maxPos = selectionAtEnd.to;\n    if (position === 'all') {\n        return state.TextSelection.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\n    }\n    return state.TextSelection.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\n}\n\nfunction isAndroid() {\n    return navigator.platform === 'Android' || /android/i.test(navigator.userAgent);\n}\n\nfunction isiOS() {\n    return [\n        'iPad Simulator',\n        'iPhone Simulator',\n        'iPod Simulator',\n        'iPad',\n        'iPhone',\n        'iPod',\n    ].includes(navigator.platform)\n        // iPad on iOS 13 detection\n        || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);\n}\n\n/**\n * Detects if the current browser is Safari (but not iOS Safari or Chrome).\n * @returns `true` if the browser is Safari, `false` otherwise.\n * @example\n * if (isSafari()) {\n *   // Safari-specific handling\n * }\n */\nfunction isSafari() {\n    return typeof navigator !== 'undefined' ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n}\n\nconst focus = (position = null, options = {}) => ({ editor, view, tr, dispatch, }) => {\n    options = {\n        scrollIntoView: true,\n        ...options,\n    };\n    const delayedFocus = () => {\n        // focus within `requestAnimationFrame` breaks focus on iOS and Android\n        // so we have to call this\n        if (isiOS() || isAndroid()) {\n            view.dom.focus();\n        }\n        // For React we have to focus asynchronously. Otherwise wild things happen.\n        // see: https://github.com/ueberdosis/tiptap/issues/1520\n        requestAnimationFrame(() => {\n            if (!editor.isDestroyed) {\n                view.focus();\n                // Safari requires preventScroll to avoid the browser scrolling to the\n                // top of the editor when focus is called before the selection is set.\n                // We exclude iOS and Android since they are already handled above.\n                // see: https://github.com/ueberdosis/tiptap/issues/7318\n                if (isSafari() && !isiOS() && !isAndroid()) {\n                    view.dom.focus({ preventScroll: true });\n                }\n            }\n        });\n    };\n    if ((view.hasFocus() && position === null) || position === false) {\n        return true;\n    }\n    // we don’t try to resolve a NodeSelection or CellSelection\n    if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n        delayedFocus();\n        return true;\n    }\n    // pass through tr.doc instead of editor.state.doc\n    // since transactions could change the editors state before this command has been run\n    const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\n    const isSameSelection = editor.state.selection.eq(selection);\n    if (dispatch) {\n        if (!isSameSelection) {\n            tr.setSelection(selection);\n        }\n        // `tr.setSelection` resets the stored marks\n        // so we’ll restore them if the selection is the same as before\n        if (isSameSelection && tr.storedMarks) {\n            tr.setStoredMarks(tr.storedMarks);\n        }\n        delayedFocus();\n    }\n    return true;\n};\n\nconst forEach = (items, fn) => props => {\n    return items.every((item, index) => fn(item, { ...props, index }));\n};\n\nconst insertContent = (value, options) => ({ tr, commands }) => {\n    return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\n};\n\nconst removeWhitespaces = (node) => {\n    const children = node.childNodes;\n    for (let i = children.length - 1; i >= 0; i -= 1) {\n        const child = children[i];\n        if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n            node.removeChild(child);\n        }\n        else if (child.nodeType === 1) {\n            removeWhitespaces(child);\n        }\n    }\n    return node;\n};\nfunction elementFromString(value) {\n    // add a wrapper to preserve leading and trailing whitespace\n    const wrappedValue = `<body>${value}</body>`;\n    const html = new window.DOMParser().parseFromString(wrappedValue, 'text/html').body;\n    return removeWhitespaces(html);\n}\n\n/**\n * Takes a JSON or HTML content and creates a Prosemirror node or fragment from it.\n * @param content The JSON or HTML content to create the node from\n * @param schema The Prosemirror schema to use for the node\n * @param options Options for the parser\n * @returns The created Prosemirror node or fragment\n */\nfunction createNodeFromContent(content, schema, options) {\n    if (content instanceof model.Node || content instanceof model.Fragment) {\n        return content;\n    }\n    options = {\n        slice: true,\n        parseOptions: {},\n        ...options,\n    };\n    const isJSONContent = typeof content === 'object' && content !== null;\n    const isTextContent = typeof content === 'string';\n    if (isJSONContent) {\n        try {\n            const isArrayContent = Array.isArray(content) && content.length > 0;\n            // if the JSON Content is an array of nodes, create a fragment for each node\n            if (isArrayContent) {\n                return model.Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)));\n            }\n            const node = schema.nodeFromJSON(content);\n            if (options.errorOnInvalidContent) {\n                node.check();\n            }\n            return node;\n        }\n        catch (error) {\n            if (options.errorOnInvalidContent) {\n                throw new Error('[tiptap error]: Invalid JSON content', { cause: error });\n            }\n            console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error);\n            return createNodeFromContent('', schema, options);\n        }\n    }\n    if (isTextContent) {\n        // Check for invalid content\n        if (options.errorOnInvalidContent) {\n            let hasInvalidContent = false;\n            let invalidContent = '';\n            // A copy of the current schema with a catch-all node at the end\n            const contentCheckSchema = new model.Schema({\n                topNode: schema.spec.topNode,\n                marks: schema.spec.marks,\n                // Prosemirror's schemas are executed such that: the last to execute, matches last\n                // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n                nodes: schema.spec.nodes.append({\n                    __tiptap__private__unknown__catch__all__node: {\n                        content: 'inline*',\n                        group: 'block',\n                        parseDOM: [\n                            {\n                                tag: '*',\n                                getAttrs: e => {\n                                    // If this is ever called, we know that the content has something that we don't know how to handle in the schema\n                                    hasInvalidContent = true;\n                                    // Try to stringify the element for a more helpful error message\n                                    invalidContent = typeof e === 'string' ? e : e.outerHTML;\n                                    return null;\n                                },\n                            },\n                        ],\n                    },\n                }),\n            });\n            if (options.slice) {\n                model.DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);\n            }\n            else {\n                model.DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);\n            }\n            if (options.errorOnInvalidContent && hasInvalidContent) {\n                throw new Error('[tiptap error]: Invalid HTML content', { cause: new Error(`Invalid element found: ${invalidContent}`) });\n            }\n        }\n        const parser = model.DOMParser.fromSchema(schema);\n        if (options.slice) {\n            return parser.parseSlice(elementFromString(content), options.parseOptions).content;\n        }\n        return parser.parse(elementFromString(content), options.parseOptions);\n    }\n    return createNodeFromContent('', schema, options);\n}\n\n// source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n    const last = tr.steps.length - 1;\n    if (last < startLen) {\n        return;\n    }\n    const step = tr.steps[last];\n    if (!(step instanceof transform.ReplaceStep || step instanceof transform.ReplaceAroundStep)) {\n        return;\n    }\n    const map = tr.mapping.maps[last];\n    let end = 0;\n    map.forEach((_from, _to, _newFrom, newTo) => {\n        if (end === 0) {\n            end = newTo;\n        }\n    });\n    tr.setSelection(state.Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst isFragment = (nodeOrFragment) => {\n    return !('type' in nodeOrFragment);\n};\nconst insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\n    var _a;\n    if (dispatch) {\n        options = {\n            parseOptions: editor.options.parseOptions,\n            updateSelection: true,\n            applyInputRules: false,\n            applyPasteRules: false,\n            ...options,\n        };\n        let content;\n        const emitContentError = (error) => {\n            editor.emit('contentError', {\n                editor,\n                error,\n                disableCollaboration: () => {\n                    if (editor.storage.collaboration) {\n                        editor.storage.collaboration.isDisabled = true;\n                    }\n                },\n            });\n        };\n        const parseOptions = {\n            preserveWhitespace: 'full',\n            ...options.parseOptions,\n        };\n        // If `emitContentError` is enabled, we want to check the content for errors\n        // but ignore them (do not remove the invalid content from the document)\n        if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {\n            try {\n                createNodeFromContent(value, editor.schema, {\n                    parseOptions,\n                    errorOnInvalidContent: true,\n                });\n            }\n            catch (e) {\n                emitContentError(e);\n            }\n        }\n        try {\n            content = createNodeFromContent(value, editor.schema, {\n                parseOptions,\n                errorOnInvalidContent: (_a = options.errorOnInvalidContent) !== null && _a !== void 0 ? _a : editor.options.enableContentCheck,\n            });\n        }\n        catch (e) {\n            emitContentError(e);\n            return false;\n        }\n        let { from, to } = typeof position === 'number' ? { from: position, to: position } : { from: position.from, to: position.to };\n        let isOnlyTextContent = true;\n        let isOnlyBlockContent = true;\n        const nodes = isFragment(content) ? content : [content];\n        nodes.forEach(node => {\n            // check if added node is valid\n            node.check();\n            isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\n            isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\n        });\n        // check if we can replace the wrapping node by\n        // the newly inserted content\n        // example:\n        // replace an empty paragraph by an inserted image\n        // instead of inserting the image below the paragraph\n        if (from === to && isOnlyBlockContent) {\n            const { parent } = tr.doc.resolve(from);\n            const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\n            if (isEmptyTextBlock) {\n                from -= 1;\n                to += 1;\n            }\n        }\n        let newContent;\n        // if there is only plain text we have to use `insertText`\n        // because this will keep the current marks\n        if (isOnlyTextContent) {\n            // if value is string, we can use it directly\n            // otherwise if it is an array, we have to join it\n            if (Array.isArray(value)) {\n                newContent = value.map(v => v.text || '').join('');\n            }\n            else if (value instanceof model.Fragment) {\n                let text = '';\n                value.forEach(node => {\n                    if (node.text) {\n                        text += node.text;\n                    }\n                });\n                newContent = text;\n            }\n            else if (typeof value === 'object' && !!value && !!value.text) {\n                newContent = value.text;\n            }\n            else {\n                newContent = value;\n            }\n            tr.insertText(newContent, from, to);\n        }\n        else {\n            newContent = content;\n            tr.replaceWith(from, to, newContent);\n        }\n        // set cursor at end of inserted content\n        if (options.updateSelection) {\n            selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\n        }\n        if (options.applyInputRules) {\n            tr.setMeta('applyInputRules', { from, text: newContent });\n        }\n        if (options.applyPasteRules) {\n            tr.setMeta('applyPasteRules', { from, text: newContent });\n        }\n    }\n    return true;\n};\n\nconst joinUp = () => ({ state, dispatch }) => {\n    return commands$1.joinUp(state, dispatch);\n};\nconst joinDown = () => ({ state, dispatch }) => {\n    return commands$1.joinDown(state, dispatch);\n};\nconst joinBackward = () => ({ state, dispatch }) => {\n    return commands$1.joinBackward(state, dispatch);\n};\nconst joinForward = () => ({ state, dispatch }) => {\n    return commands$1.joinForward(state, dispatch);\n};\n\nconst joinItemBackward = () => ({ state, dispatch, tr, }) => {\n    try {\n        const point = transform.joinPoint(state.doc, state.selection.$from.pos, -1);\n        if (point === null || point === undefined) {\n            return false;\n        }\n        tr.join(point, 2);\n        if (dispatch) {\n            dispatch(tr);\n        }\n        return true;\n    }\n    catch {\n        return false;\n    }\n};\n\nconst joinItemForward = () => ({ state, dispatch, tr, }) => {\n    try {\n        const point = transform.joinPoint(state.doc, state.selection.$from.pos, +1);\n        if (point === null || point === undefined) {\n            return false;\n        }\n        tr.join(point, 2);\n        if (dispatch) {\n            dispatch(tr);\n        }\n        return true;\n    }\n    catch {\n        return false;\n    }\n};\n\nconst joinTextblockBackward = () => ({ state, dispatch }) => {\n    return commands$1.joinTextblockBackward(state, dispatch);\n};\n\nconst joinTextblockForward = () => ({ state, dispatch }) => {\n    return commands$1.joinTextblockForward(state, dispatch);\n};\n\nfunction isMacOS() {\n    return typeof navigator !== 'undefined'\n        ? /Mac/.test(navigator.platform)\n        : false;\n}\n\nfunction normalizeKeyName(name) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result === 'Space') {\n        result = ' ';\n    }\n    let alt;\n    let ctrl;\n    let shift;\n    let meta;\n    for (let i = 0; i < parts.length - 1; i += 1) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod)) {\n            meta = true;\n        }\n        else if (/^a(lt)?$/i.test(mod)) {\n            alt = true;\n        }\n        else if (/^(c|ctrl|control)$/i.test(mod)) {\n            ctrl = true;\n        }\n        else if (/^s(hift)?$/i.test(mod)) {\n            shift = true;\n        }\n        else if (/^mod$/i.test(mod)) {\n            if (isiOS() || isMacOS()) {\n                meta = true;\n            }\n            else {\n                ctrl = true;\n            }\n        }\n        else {\n            throw new Error(`Unrecognized modifier name: ${mod}`);\n        }\n    }\n    if (alt) {\n        result = `Alt-${result}`;\n    }\n    if (ctrl) {\n        result = `Ctrl-${result}`;\n    }\n    if (meta) {\n        result = `Meta-${result}`;\n    }\n    if (shift) {\n        result = `Shift-${result}`;\n    }\n    return result;\n}\nconst keyboardShortcut = name => ({ editor, view, tr, dispatch, }) => {\n    const keys = normalizeKeyName(name).split(/-(?!$)/);\n    const key = keys.find(item => !['Alt', 'Ctrl', 'Meta', 'Shift'].includes(item));\n    const event = new KeyboardEvent('keydown', {\n        key: key === 'Space'\n            ? ' '\n            : key,\n        altKey: keys.includes('Alt'),\n        ctrlKey: keys.includes('Ctrl'),\n        metaKey: keys.includes('Meta'),\n        shiftKey: keys.includes('Shift'),\n        bubbles: true,\n        cancelable: true,\n    });\n    const capturedTransaction = editor.captureTransaction(() => {\n        view.someProp('handleKeyDown', f => f(view, event));\n    });\n    capturedTransaction === null || capturedTransaction === void 0 ? void 0 : capturedTransaction.steps.forEach(step => {\n        const newStep = step.map(tr.mapping);\n        if (newStep && dispatch) {\n            tr.maybeStep(newStep);\n        }\n    });\n    return true;\n};\n\nfunction isNodeActive(state, typeOrName, attributes = {}) {\n    const { from, to, empty } = state.selection;\n    const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\n    const nodeRanges = [];\n    state.doc.nodesBetween(from, to, (node, pos) => {\n        if (node.isText) {\n            return;\n        }\n        const relativeFrom = Math.max(from, pos);\n        const relativeTo = Math.min(to, pos + node.nodeSize);\n        nodeRanges.push({\n            node,\n            from: relativeFrom,\n            to: relativeTo,\n        });\n    });\n    const selectionRange = to - from;\n    const matchedNodeRanges = nodeRanges\n        .filter(nodeRange => {\n        if (!type) {\n            return true;\n        }\n        return type.name === nodeRange.node.type.name;\n    })\n        .filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\n    if (empty) {\n        return !!matchedNodeRanges.length;\n    }\n    const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\n    return range >= selectionRange;\n}\n\nconst lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    const isActive = isNodeActive(state, type, attributes);\n    if (!isActive) {\n        return false;\n    }\n    return commands$1.lift(state, dispatch);\n};\n\nconst liftEmptyBlock = () => ({ state, dispatch }) => {\n    return commands$1.liftEmptyBlock(state, dispatch);\n};\n\nconst liftListItem = typeOrName => ({ state, dispatch }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    return schemaList.liftListItem(type)(state, dispatch);\n};\n\nconst newlineInCode = () => ({ state, dispatch }) => {\n    return commands$1.newlineInCode(state, dispatch);\n};\n\n/**\n * Get the type of a schema item by its name.\n * @param name The name of the schema item\n * @param schema The Prosemiror schema to search in\n * @returns The type of the schema item (`node` or `mark`), or null if it doesn't exist\n */\nfunction getSchemaTypeNameByName(name, schema) {\n    if (schema.nodes[name]) {\n        return 'node';\n    }\n    if (schema.marks[name]) {\n        return 'mark';\n    }\n    return null;\n}\n\n/**\n * Remove a property or an array of properties from an object\n * @param obj Object\n * @param key Key to remove\n */\nfunction deleteProps(obj, propOrProps) {\n    const props = typeof propOrProps === 'string'\n        ? [propOrProps]\n        : propOrProps;\n    return Object\n        .keys(obj)\n        .reduce((newObj, prop) => {\n        if (!props.includes(prop)) {\n            newObj[prop] = obj[prop];\n        }\n        return newObj;\n    }, {});\n}\n\nconst resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n    let nodeType = null;\n    let markType = null;\n    const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\n    if (!schemaType) {\n        return false;\n    }\n    if (schemaType === 'node') {\n        nodeType = getNodeType(typeOrName, state.schema);\n    }\n    if (schemaType === 'mark') {\n        markType = getMarkType(typeOrName, state.schema);\n    }\n    if (dispatch) {\n        tr.selection.ranges.forEach(range => {\n            state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n                if (nodeType && nodeType === node.type) {\n                    tr.setNodeMarkup(pos, undefined, deleteProps(node.attrs, attributes));\n                }\n                if (markType && node.marks.length) {\n                    node.marks.forEach(mark => {\n                        if (markType === mark.type) {\n                            tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\n                        }\n                    });\n                }\n            });\n        });\n    }\n    return true;\n};\n\nconst scrollIntoView = () => ({ tr, dispatch }) => {\n    if (dispatch) {\n        tr.scrollIntoView();\n    }\n    return true;\n};\n\nconst selectAll = () => ({ tr, dispatch }) => {\n    if (dispatch) {\n        const selection = new state.AllSelection(tr.doc);\n        tr.setSelection(selection);\n    }\n    return true;\n};\n\nconst selectNodeBackward = () => ({ state, dispatch }) => {\n    return commands$1.selectNodeBackward(state, dispatch);\n};\n\nconst selectNodeForward = () => ({ state, dispatch }) => {\n    return commands$1.selectNodeForward(state, dispatch);\n};\n\nconst selectParentNode = () => ({ state, dispatch }) => {\n    return commands$1.selectParentNode(state, dispatch);\n};\n\n// @ts-ignore\n// TODO: add types to @types/prosemirror-commands\nconst selectTextblockEnd = () => ({ state, dispatch }) => {\n    return commands$1.selectTextblockEnd(state, dispatch);\n};\n\n// @ts-ignore\n// TODO: add types to @types/prosemirror-commands\nconst selectTextblockStart = () => ({ state, dispatch }) => {\n    return commands$1.selectTextblockStart(state, dispatch);\n};\n\n/**\n * Create a new Prosemirror document node from content.\n * @param content The JSON or HTML content to create the document from\n * @param schema The Prosemirror schema to use for the document\n * @param parseOptions Options for the parser\n * @returns The created Prosemirror document node\n */\nfunction createDocument(content, schema, parseOptions = {}, options = {}) {\n    return createNodeFromContent(content, schema, {\n        slice: false,\n        parseOptions,\n        errorOnInvalidContent: options.errorOnInvalidContent,\n    });\n}\n\nconst setContent = (content, emitUpdate = false, parseOptions = {}, options = {}) => ({ editor, tr, dispatch, commands, }) => {\n    var _a, _b;\n    const { doc } = tr;\n    // This is to keep backward compatibility with the previous behavior\n    // TODO remove this in the next major version\n    if (parseOptions.preserveWhitespace !== 'full') {\n        const document = createDocument(content, editor.schema, parseOptions, {\n            errorOnInvalidContent: (_a = options.errorOnInvalidContent) !== null && _a !== void 0 ? _a : editor.options.enableContentCheck,\n        });\n        if (dispatch) {\n            tr.replaceWith(0, doc.content.size, document).setMeta('preventUpdate', !emitUpdate);\n        }\n        return true;\n    }\n    if (dispatch) {\n        tr.setMeta('preventUpdate', !emitUpdate);\n    }\n    return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n        parseOptions,\n        errorOnInvalidContent: (_b = options.errorOnInvalidContent) !== null && _b !== void 0 ? _b : editor.options.enableContentCheck,\n    });\n};\n\nfunction getMarkAttributes(state, typeOrName) {\n    const type = getMarkType(typeOrName, state.schema);\n    const { from, to, empty } = state.selection;\n    const marks = [];\n    if (empty) {\n        if (state.storedMarks) {\n            marks.push(...state.storedMarks);\n        }\n        marks.push(...state.selection.$head.marks());\n    }\n    else {\n        state.doc.nodesBetween(from, to, node => {\n            marks.push(...node.marks);\n        });\n    }\n    const mark = marks.find(markItem => markItem.type.name === type.name);\n    if (!mark) {\n        return {};\n    }\n    return { ...mark.attrs };\n}\n\n/**\n * Returns a new `Transform` based on all steps of the passed transactions.\n * @param oldDoc The Prosemirror node to start from\n * @param transactions The transactions to combine\n * @returns A new `Transform` with all steps of the passed transactions\n */\nfunction combineTransactionSteps(oldDoc, transactions) {\n    const transform$1 = new transform.Transform(oldDoc);\n    transactions.forEach(transaction => {\n        transaction.steps.forEach(step => {\n            transform$1.step(step);\n        });\n    });\n    return transform$1;\n}\n\n/**\n * Gets the default block type at a given match\n * @param match The content match to get the default block type from\n * @returns The default block type or null\n */\nfunction defaultBlockAt(match) {\n    for (let i = 0; i < match.edgeCount; i += 1) {\n        const { type } = match.edge(i);\n        if (type.isTextblock && !type.hasRequiredAttrs()) {\n            return type;\n        }\n    }\n    return null;\n}\n\n/**\n * Find children inside a Prosemirror node that match a predicate.\n * @param node The Prosemirror node to search in\n * @param predicate The predicate to match\n * @returns An array of nodes with their positions\n */\nfunction findChildren(node, predicate) {\n    const nodesWithPos = [];\n    node.descendants((child, pos) => {\n        if (predicate(child)) {\n            nodesWithPos.push({\n                node: child,\n                pos,\n            });\n        }\n    });\n    return nodesWithPos;\n}\n\n/**\n * Same as `findChildren` but searches only within a `range`.\n * @param node The Prosemirror node to search in\n * @param range The range to search in\n * @param predicate The predicate to match\n * @returns An array of nodes with their positions\n */\nfunction findChildrenInRange(node, range, predicate) {\n    const nodesWithPos = [];\n    // if (range.from === range.to) {\n    //   const nodeAt = node.nodeAt(range.from)\n    //   if (nodeAt) {\n    //     nodesWithPos.push({\n    //       node: nodeAt,\n    //       pos: range.from,\n    //     })\n    //   }\n    // }\n    node.nodesBetween(range.from, range.to, (child, pos) => {\n        if (predicate(child)) {\n            nodesWithPos.push({\n                node: child,\n                pos,\n            });\n        }\n    });\n    return nodesWithPos;\n}\n\n/**\n * Finds the closest parent node to a resolved position that matches a predicate.\n * @param $pos The resolved position to search from\n * @param predicate The predicate to match\n * @returns The closest parent node to the resolved position that matches the predicate\n * @example ```js\n * findParentNodeClosestToPos($from, node => node.type.name === 'paragraph')\n * ```\n */\nfunction findParentNodeClosestToPos($pos, predicate) {\n    for (let i = $pos.depth; i > 0; i -= 1) {\n        const node = $pos.node(i);\n        if (predicate(node)) {\n            return {\n                pos: i > 0 ? $pos.before(i) : 0,\n                start: $pos.start(i),\n                depth: i,\n                node,\n            };\n        }\n    }\n}\n\n/**\n * Finds the closest parent node to the current selection that matches a predicate.\n * @param predicate The predicate to match\n * @returns A command that finds the closest parent node to the current selection that matches the predicate\n * @example ```js\n * findParentNode(node => node.type.name === 'paragraph')\n * ```\n */\nfunction findParentNode(predicate) {\n    return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\n}\n\nfunction getSchema(extensions, editor) {\n    const resolvedExtensions = ExtensionManager.resolve(extensions);\n    return getSchemaByResolvedExtensions(resolvedExtensions, editor);\n}\n\n/**\n * Generate HTML from a JSONContent\n * @param doc The JSONContent to generate HTML from\n * @param extensions The extensions to use for the schema\n * @returns The generated HTML\n */\nfunction generateHTML(doc, extensions) {\n    const schema = getSchema(extensions);\n    const contentNode = model.Node.fromJSON(schema, doc);\n    return getHTMLFromFragment(contentNode.content, schema);\n}\n\n/**\n * Generate JSONContent from HTML\n * @param html The HTML to generate JSONContent from\n * @param extensions The extensions to use for the schema\n * @returns The generated JSONContent\n */\nfunction generateJSON(html, extensions) {\n    const schema = getSchema(extensions);\n    const dom = elementFromString(html);\n    return model.DOMParser.fromSchema(schema).parse(dom).toJSON();\n}\n\n/**\n * Gets the text of a Prosemirror node\n * @param node The Prosemirror node\n * @param options Options for the text serializer & block separator\n * @returns The text of the node\n * @example ```js\n * const text = getText(node, { blockSeparator: '\\n' })\n * ```\n */\nfunction getText(node, options) {\n    const range = {\n        from: 0,\n        to: node.content.size,\n    };\n    return getTextBetween(node, range, options);\n}\n\n/**\n * Generate raw text from a JSONContent\n * @param doc The JSONContent to generate text from\n * @param extensions The extensions to use for the schema\n * @param options Options for the text generation f.e. blockSeparator or textSerializers\n * @returns The generated text\n */\nfunction generateText(doc, extensions, options) {\n    const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\n    const schema = getSchema(extensions);\n    const contentNode = model.Node.fromJSON(schema, doc);\n    return getText(contentNode, {\n        blockSeparator,\n        textSerializers: {\n            ...getTextSerializersFromSchema(schema),\n            ...textSerializers,\n        },\n    });\n}\n\nfunction getNodeAttributes(state, typeOrName) {\n    const type = getNodeType(typeOrName, state.schema);\n    const { from, to } = state.selection;\n    const nodes = [];\n    state.doc.nodesBetween(from, to, node => {\n        nodes.push(node);\n    });\n    const node = nodes.reverse().find(nodeItem => nodeItem.type.name === type.name);\n    if (!node) {\n        return {};\n    }\n    return { ...node.attrs };\n}\n\n/**\n * Get node or mark attributes by type or name on the current editor state\n * @param state The current editor state\n * @param typeOrName The node or mark type or name\n * @returns The attributes of the node or mark or an empty object\n */\nfunction getAttributes(state, typeOrName) {\n    const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\n    if (schemaType === 'node') {\n        return getNodeAttributes(state, typeOrName);\n    }\n    if (schemaType === 'mark') {\n        return getMarkAttributes(state, typeOrName);\n    }\n    return {};\n}\n\n/**\n * Removes duplicated values within an array.\n * Supports numbers, strings and objects.\n */\nfunction removeDuplicates(array, by = JSON.stringify) {\n    const seen = {};\n    return array.filter(item => {\n        const key = by(item);\n        return Object.prototype.hasOwnProperty.call(seen, key)\n            ? false\n            : (seen[key] = true);\n    });\n}\n\n/**\n * Removes duplicated ranges and ranges that are\n * fully captured by other ranges.\n */\nfunction simplifyChangedRanges(changes) {\n    const uniqueChanges = removeDuplicates(changes);\n    return uniqueChanges.length === 1\n        ? uniqueChanges\n        : uniqueChanges.filter((change, index) => {\n            const rest = uniqueChanges.filter((_, i) => i !== index);\n            return !rest.some(otherChange => {\n                return change.oldRange.from >= otherChange.oldRange.from\n                    && change.oldRange.to <= otherChange.oldRange.to\n                    && change.newRange.from >= otherChange.newRange.from\n                    && change.newRange.to <= otherChange.newRange.to;\n            });\n        });\n}\n/**\n * Returns a list of changed ranges\n * based on the first and last state of all steps.\n */\nfunction getChangedRanges(transform) {\n    const { mapping, steps } = transform;\n    const changes = [];\n    mapping.maps.forEach((stepMap, index) => {\n        const ranges = [];\n        // This accounts for step changes where no range was actually altered\n        // e.g. when setting a mark, node attribute, etc.\n        // @ts-ignore\n        if (!stepMap.ranges.length) {\n            const { from, to } = steps[index];\n            if (from === undefined || to === undefined) {\n                return;\n            }\n            ranges.push({ from, to });\n        }\n        else {\n            stepMap.forEach((from, to) => {\n                ranges.push({ from, to });\n            });\n        }\n        ranges.forEach(({ from, to }) => {\n            const newStart = mapping.slice(index).map(from, -1);\n            const newEnd = mapping.slice(index).map(to);\n            const oldStart = mapping.invert().map(newStart, -1);\n            const oldEnd = mapping.invert().map(newEnd);\n            changes.push({\n                oldRange: {\n                    from: oldStart,\n                    to: oldEnd,\n                },\n                newRange: {\n                    from: newStart,\n                    to: newEnd,\n                },\n            });\n        });\n    });\n    return simplifyChangedRanges(changes);\n}\n\nfunction getDebugJSON(node, startOffset = 0) {\n    const isTopNode = node.type === node.type.schema.topNodeType;\n    const increment = isTopNode ? 0 : 1;\n    const from = startOffset;\n    const to = from + node.nodeSize;\n    const marks = node.marks.map(mark => {\n        const output = {\n            type: mark.type.name,\n        };\n        if (Object.keys(mark.attrs).length) {\n            output.attrs = { ...mark.attrs };\n        }\n        return output;\n    });\n    const attrs = { ...node.attrs };\n    const output = {\n        type: node.type.name,\n        from,\n        to,\n    };\n    if (Object.keys(attrs).length) {\n        output.attrs = attrs;\n    }\n    if (marks.length) {\n        output.marks = marks;\n    }\n    if (node.content.childCount) {\n        output.content = [];\n        node.forEach((child, offset) => {\n            var _a;\n            (_a = output.content) === null || _a === void 0 ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\n        });\n    }\n    if (node.text) {\n        output.text = node.text;\n    }\n    return output;\n}\n\nfunction getMarksBetween(from, to, doc) {\n    const marks = [];\n    // get all inclusive marks on empty selection\n    if (from === to) {\n        doc\n            .resolve(from)\n            .marks()\n            .forEach(mark => {\n            const $pos = doc.resolve(from);\n            const range = getMarkRange($pos, mark.type);\n            if (!range) {\n                return;\n            }\n            marks.push({\n                mark,\n                ...range,\n            });\n        });\n    }\n    else {\n        doc.nodesBetween(from, to, (node, pos) => {\n            if (!node || (node === null || node === void 0 ? void 0 : node.nodeSize) === undefined) {\n                return;\n            }\n            marks.push(...node.marks.map(mark => ({\n                from: pos,\n                to: pos + node.nodeSize,\n                mark,\n            })));\n        });\n    }\n    return marks;\n}\n\n/**\n * Finds the first node of a given type or name in the current selection.\n * @param state The editor state.\n * @param typeOrName The node type or name.\n * @param pos The position to start searching from.\n * @param maxDepth The maximum depth to search.\n * @returns The node and the depth as an array.\n */\nconst getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\n    const $pos = state.doc.resolve(pos);\n    let currentDepth = maxDepth;\n    let node = null;\n    while (currentDepth > 0 && node === null) {\n        const currentNode = $pos.node(currentDepth);\n        if ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.type.name) === typeOrName) {\n            node = currentNode;\n        }\n        else {\n            currentDepth -= 1;\n        }\n    }\n    return [node, currentDepth];\n};\n\n/**\n * Return attributes of an extension that should be splitted by keepOnSplit flag\n * @param extensionAttributes Array of extension attributes\n * @param typeName The type of the extension\n * @param attributes The attributes of the extension\n * @returns The splitted attributes\n */\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\n    return Object.fromEntries(Object\n        .entries(attributes)\n        .filter(([name]) => {\n        const extensionAttribute = extensionAttributes.find(item => {\n            return item.type === typeName && item.name === name;\n        });\n        if (!extensionAttribute) {\n            return false;\n        }\n        return extensionAttribute.attribute.keepOnSplit;\n    }));\n}\n\nfunction isMarkActive(state, typeOrName, attributes = {}) {\n    const { empty, ranges } = state.selection;\n    const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\n    if (empty) {\n        return !!(state.storedMarks || state.selection.$from.marks())\n            .filter(mark => {\n            if (!type) {\n                return true;\n            }\n            return type.name === mark.type.name;\n        })\n            .find(mark => objectIncludes(mark.attrs, attributes, { strict: false }));\n    }\n    let selectionRange = 0;\n    const markRanges = [];\n    ranges.forEach(({ $from, $to }) => {\n        const from = $from.pos;\n        const to = $to.pos;\n        state.doc.nodesBetween(from, to, (node, pos) => {\n            if (!node.isText && !node.marks.length) {\n                return;\n            }\n            const relativeFrom = Math.max(from, pos);\n            const relativeTo = Math.min(to, pos + node.nodeSize);\n            const range = relativeTo - relativeFrom;\n            selectionRange += range;\n            markRanges.push(...node.marks.map(mark => ({\n                mark,\n                from: relativeFrom,\n                to: relativeTo,\n            })));\n        });\n    });\n    if (selectionRange === 0) {\n        return false;\n    }\n    // calculate range of matched mark\n    const matchedRange = markRanges\n        .filter(markRange => {\n        if (!type) {\n            return true;\n        }\n        return type.name === markRange.mark.type.name;\n    })\n        .filter(markRange => objectIncludes(markRange.mark.attrs, attributes, { strict: false }))\n        .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n    // calculate range of marks that excludes the searched mark\n    // for example `code` doesn’t allow any other marks\n    const excludedRange = markRanges\n        .filter(markRange => {\n        if (!type) {\n            return true;\n        }\n        return markRange.mark.type !== type && markRange.mark.type.excludes(type);\n    })\n        .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n    // we only include the result of `excludedRange`\n    // if there is a match at all\n    const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\n    return range >= selectionRange;\n}\n\nfunction isActive(state, name, attributes = {}) {\n    if (!name) {\n        return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\n    }\n    const schemaType = getSchemaTypeNameByName(name, state.schema);\n    if (schemaType === 'node') {\n        return isNodeActive(state, name, attributes);\n    }\n    if (schemaType === 'mark') {\n        return isMarkActive(state, name, attributes);\n    }\n    return false;\n}\n\nconst isAtEndOfNode = (state, nodeType) => {\n    const { $from, $to, $anchor } = state.selection;\n    if (nodeType) {\n        const parentNode = findParentNode(node => node.type.name === nodeType)(state.selection);\n        if (!parentNode) {\n            return false;\n        }\n        const $parentPos = state.doc.resolve(parentNode.pos + 1);\n        if ($anchor.pos + 1 === $parentPos.end()) {\n            return true;\n        }\n        return false;\n    }\n    if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\n        return false;\n    }\n    return true;\n};\n\nconst isAtStartOfNode = (state) => {\n    const { $from, $to } = state.selection;\n    if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\n        return false;\n    }\n    return true;\n};\n\nfunction isList(name, extensions) {\n    const { nodeExtensions } = splitExtensions(extensions);\n    const extension = nodeExtensions.find(item => item.name === name);\n    if (!extension) {\n        return false;\n    }\n    const context = {\n        name: extension.name,\n        options: extension.options,\n        storage: extension.storage,\n    };\n    const group = callOrReturn(getExtensionField(extension, 'group', context));\n    if (typeof group !== 'string') {\n        return false;\n    }\n    return group.split(' ').includes('list');\n}\n\n/**\n * Returns true if the given prosemirror node is empty.\n */\nfunction isNodeEmpty(node, { checkChildren = true, ignoreWhitespace = false, } = {}) {\n    var _a;\n    if (ignoreWhitespace) {\n        if (node.type.name === 'hardBreak') {\n            // Hard breaks are considered empty\n            return true;\n        }\n        if (node.isText) {\n            return /^\\s*$/m.test((_a = node.text) !== null && _a !== void 0 ? _a : '');\n        }\n    }\n    if (node.isText) {\n        return !node.text;\n    }\n    if (node.isAtom || node.isLeaf) {\n        return false;\n    }\n    if (node.content.childCount === 0) {\n        return true;\n    }\n    if (checkChildren) {\n        let isContentEmpty = true;\n        node.content.forEach(childNode => {\n            if (isContentEmpty === false) {\n                // Exit early for perf\n                return;\n            }\n            if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n                isContentEmpty = false;\n            }\n        });\n        return isContentEmpty;\n    }\n    return false;\n}\n\nfunction isNodeSelection(value) {\n    return value instanceof state.NodeSelection;\n}\n\nfunction posToDOMRect(view, from, to) {\n    const minPos = 0;\n    const maxPos = view.state.doc.content.size;\n    const resolvedFrom = minMax(from, minPos, maxPos);\n    const resolvedEnd = minMax(to, minPos, maxPos);\n    const start = view.coordsAtPos(resolvedFrom);\n    const end = view.coordsAtPos(resolvedEnd, -1);\n    const top = Math.min(start.top, end.top);\n    const bottom = Math.max(start.bottom, end.bottom);\n    const left = Math.min(start.left, end.left);\n    const right = Math.max(start.right, end.right);\n    const width = right - left;\n    const height = bottom - top;\n    const x = left;\n    const y = top;\n    const data = {\n        top,\n        bottom,\n        left,\n        right,\n        width,\n        height,\n        x,\n        y,\n    };\n    return {\n        ...data,\n        toJSON: () => data,\n    };\n}\n\n/**\n * The actual implementation of the rewriteUnknownContent function\n */\nfunction rewriteUnknownContentInner({ json, validMarks, validNodes, options, rewrittenContent = [], }) {\n    if (json.marks && Array.isArray(json.marks)) {\n        json.marks = json.marks.filter(mark => {\n            const name = typeof mark === 'string' ? mark : mark.type;\n            if (validMarks.has(name)) {\n                return true;\n            }\n            rewrittenContent.push({\n                original: JSON.parse(JSON.stringify(mark)),\n                unsupported: name,\n            });\n            // Just ignore any unknown marks\n            return false;\n        });\n    }\n    if (json.content && Array.isArray(json.content)) {\n        json.content = json.content\n            .map(value => rewriteUnknownContentInner({\n            json: value,\n            validMarks,\n            validNodes,\n            options,\n            rewrittenContent,\n        }).json)\n            .filter(a => a !== null && a !== undefined);\n    }\n    if (json.type && !validNodes.has(json.type)) {\n        rewrittenContent.push({\n            original: JSON.parse(JSON.stringify(json)),\n            unsupported: json.type,\n        });\n        if (json.content && Array.isArray(json.content) && ((options === null || options === void 0 ? void 0 : options.fallbackToParagraph) !== false)) {\n            // Just treat it like a paragraph and hope for the best\n            json.type = 'paragraph';\n            return {\n                json,\n                rewrittenContent,\n            };\n        }\n        // or just omit it entirely\n        return {\n            json: null,\n            rewrittenContent,\n        };\n    }\n    return { json, rewrittenContent };\n}\n/**\n * Rewrite unknown nodes and marks within JSON content\n * Allowing for user within the editor\n */\nfunction rewriteUnknownContent(\n/**\n * The JSON content to clean of unknown nodes and marks\n */\njson, \n/**\n * The schema to use for validation\n */\nschema, \n/**\n * Options for the cleaning process\n */\noptions) {\n    return rewriteUnknownContentInner({\n        json,\n        validNodes: new Set(Object.keys(schema.nodes)),\n        validMarks: new Set(Object.keys(schema.marks)),\n        options,\n    });\n}\n\nfunction canSetMark(state, tr, newMarkType) {\n    var _a;\n    const { selection } = tr;\n    let cursor = null;\n    if (isTextSelection(selection)) {\n        cursor = selection.$cursor;\n    }\n    if (cursor) {\n        const currentMarks = (_a = state.storedMarks) !== null && _a !== void 0 ? _a : cursor.marks();\n        // There can be no current marks that exclude the new mark\n        return (!!newMarkType.isInSet(currentMarks)\n            || !currentMarks.some(mark => mark.type.excludes(newMarkType)));\n    }\n    const { ranges } = selection;\n    return ranges.some(({ $from, $to }) => {\n        let someNodeSupportsMark = $from.depth === 0\n            ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType)\n            : false;\n        state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n            // If we already found a mark that we can enable, return false to bypass the remaining search\n            if (someNodeSupportsMark) {\n                return false;\n            }\n            if (node.isInline) {\n                const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\n                const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks)\n                    || !node.marks.some(otherMark => otherMark.type.excludes(newMarkType));\n                someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\n            }\n            return !someNodeSupportsMark;\n        });\n        return someNodeSupportsMark;\n    });\n}\nconst setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n    const { selection } = tr;\n    const { empty, ranges } = selection;\n    const type = getMarkType(typeOrName, state.schema);\n    if (dispatch) {\n        if (empty) {\n            const oldAttributes = getMarkAttributes(state, type);\n            tr.addStoredMark(type.create({\n                ...oldAttributes,\n                ...attributes,\n            }));\n        }\n        else {\n            ranges.forEach(range => {\n                const from = range.$from.pos;\n                const to = range.$to.pos;\n                state.doc.nodesBetween(from, to, (node, pos) => {\n                    const trimmedFrom = Math.max(pos, from);\n                    const trimmedTo = Math.min(pos + node.nodeSize, to);\n                    const someHasMark = node.marks.find(mark => mark.type === type);\n                    // if there is already a mark of this type\n                    // we know that we have to merge its attributes\n                    // otherwise we add a fresh new mark\n                    if (someHasMark) {\n                        node.marks.forEach(mark => {\n                            if (type === mark.type) {\n                                tr.addMark(trimmedFrom, trimmedTo, type.create({\n                                    ...mark.attrs,\n                                    ...attributes,\n                                }));\n                            }\n                        });\n                    }\n                    else {\n                        tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\n                    }\n                });\n            });\n        }\n    }\n    return canSetMark(state, tr, type);\n};\n\nconst setMeta = (key, value) => ({ tr }) => {\n    tr.setMeta(key, value);\n    return true;\n};\n\nconst setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    let attributesToCopy;\n    if (state.selection.$anchor.sameParent(state.selection.$head)) {\n        // only copy attributes if the selection is pointing to a node of the same type\n        attributesToCopy = state.selection.$anchor.parent.attrs;\n    }\n    // TODO: use a fallback like insertContent?\n    if (!type.isTextblock) {\n        console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\n        return false;\n    }\n    return (chain()\n        // try to convert node to default node if needed\n        .command(({ commands }) => {\n        const canSetBlock = commands$1.setBlockType(type, { ...attributesToCopy, ...attributes })(state);\n        if (canSetBlock) {\n            return true;\n        }\n        return commands.clearNodes();\n    })\n        .command(({ state: updatedState }) => {\n        return commands$1.setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch);\n    })\n        .run());\n};\n\nconst setNodeSelection = position => ({ tr, dispatch }) => {\n    if (dispatch) {\n        const { doc } = tr;\n        const from = minMax(position, 0, doc.content.size);\n        const selection = state.NodeSelection.create(doc, from);\n        tr.setSelection(selection);\n    }\n    return true;\n};\n\nconst setTextSelection = position => ({ tr, dispatch }) => {\n    if (dispatch) {\n        const { doc } = tr;\n        const { from, to } = typeof position === 'number' ? { from: position, to: position } : position;\n        const minPos = state.TextSelection.atStart(doc).from;\n        const maxPos = state.TextSelection.atEnd(doc).to;\n        const resolvedFrom = minMax(from, minPos, maxPos);\n        const resolvedEnd = minMax(to, minPos, maxPos);\n        const selection = state.TextSelection.create(doc, resolvedFrom, resolvedEnd);\n        tr.setSelection(selection);\n    }\n    return true;\n};\n\nconst sinkListItem = typeOrName => ({ state, dispatch }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    return schemaList.sinkListItem(type)(state, dispatch);\n};\n\nfunction ensureMarks(state, splittableMarks) {\n    const marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n    if (marks) {\n        const filteredMarks = marks.filter(mark => splittableMarks === null || splittableMarks === void 0 ? void 0 : splittableMarks.includes(mark.type.name));\n        state.tr.ensureMarks(filteredMarks);\n    }\n}\nconst splitBlock = ({ keepMarks = true } = {}) => ({ tr, state: state$1, dispatch, editor, }) => {\n    const { selection, doc } = tr;\n    const { $from, $to } = selection;\n    const extensionAttributes = editor.extensionManager.attributes;\n    const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\n    if (selection instanceof state.NodeSelection && selection.node.isBlock) {\n        if (!$from.parentOffset || !transform.canSplit(doc, $from.pos)) {\n            return false;\n        }\n        if (dispatch) {\n            if (keepMarks) {\n                ensureMarks(state$1, editor.extensionManager.splittableMarks);\n            }\n            tr.split($from.pos).scrollIntoView();\n        }\n        return true;\n    }\n    if (!$from.parent.isBlock) {\n        return false;\n    }\n    const atEnd = $to.parentOffset === $to.parent.content.size;\n    const deflt = $from.depth === 0\n        ? undefined\n        : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n    let types = atEnd && deflt\n        ? [\n            {\n                type: deflt,\n                attrs: newAttributes,\n            },\n        ]\n        : undefined;\n    let can = transform.canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n    if (!types\n        && !can\n        && transform.canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {\n        can = true;\n        types = deflt\n            ? [\n                {\n                    type: deflt,\n                    attrs: newAttributes,\n                },\n            ]\n            : undefined;\n    }\n    if (dispatch) {\n        if (can) {\n            if (selection instanceof state.TextSelection) {\n                tr.deleteSelection();\n            }\n            tr.split(tr.mapping.map($from.pos), 1, types);\n            if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n                const first = tr.mapping.map($from.before());\n                const $first = tr.doc.resolve(first);\n                if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n                    tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n                }\n            }\n        }\n        if (keepMarks) {\n            ensureMarks(state$1, editor.extensionManager.splittableMarks);\n        }\n        tr.scrollIntoView();\n    }\n    return can;\n};\n\nconst splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr, state: state$1, dispatch, editor, }) => {\n    var _a;\n    const type = getNodeType(typeOrName, state$1.schema);\n    const { $from, $to } = state$1.selection;\n    // @ts-ignore\n    // eslint-disable-next-line\n    const node = state$1.selection.node;\n    if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) {\n        return false;\n    }\n    const grandParent = $from.node(-1);\n    if (grandParent.type !== type) {\n        return false;\n    }\n    const extensionAttributes = editor.extensionManager.attributes;\n    if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n        // In an empty block. If this is a nested list, the wrapping\n        // list item should be split. Otherwise, bail out and let next\n        // command handle lifting.\n        if ($from.depth === 2\n            || $from.node(-3).type !== type\n            || $from.index(-2) !== $from.node(-2).childCount - 1) {\n            return false;\n        }\n        if (dispatch) {\n            let wrap = model.Fragment.empty;\n            // eslint-disable-next-line\n            const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n            // Build a fragment containing empty versions of the structure\n            // from the outer list item to the parent node of the cursor\n            for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n                wrap = model.Fragment.from($from.node(d).copy(wrap));\n            }\n            // eslint-disable-next-line\n            const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n            // Add a second list item with an empty default start node\n            const newNextTypeAttributes = {\n                ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n                ...overrideAttrs,\n            };\n            const nextType = ((_a = type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.createAndFill(newNextTypeAttributes)) || undefined;\n            wrap = wrap.append(model.Fragment.from(type.createAndFill(null, nextType) || undefined));\n            const start = $from.before($from.depth - (depthBefore - 1));\n            tr.replace(start, $from.after(-depthAfter), new model.Slice(wrap, 4 - depthBefore, 0));\n            let sel = -1;\n            tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n                if (sel > -1) {\n                    return false;\n                }\n                if (n.isTextblock && n.content.size === 0) {\n                    sel = pos + 1;\n                }\n            });\n            if (sel > -1) {\n                tr.setSelection(state.TextSelection.near(tr.doc.resolve(sel)));\n            }\n            tr.scrollIntoView();\n        }\n        return true;\n    }\n    const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n    const newTypeAttributes = {\n        ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n        ...overrideAttrs,\n    };\n    const newNextTypeAttributes = {\n        ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n        ...overrideAttrs,\n    };\n    tr.delete($from.pos, $to.pos);\n    const types = nextType\n        ? [\n            { type, attrs: newTypeAttributes },\n            { type: nextType, attrs: newNextTypeAttributes },\n        ]\n        : [{ type, attrs: newTypeAttributes }];\n    if (!transform.canSplit(tr.doc, $from.pos, 2)) {\n        return false;\n    }\n    if (dispatch) {\n        const { selection, storedMarks } = state$1;\n        const { splittableMarks } = editor.extensionManager;\n        const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\n        tr.split($from.pos, 2, types).scrollIntoView();\n        if (!marks || !dispatch) {\n            return true;\n        }\n        const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\n        tr.ensureMarks(filteredMarks);\n    }\n    return true;\n};\n\nconst joinListBackwards = (tr, listType) => {\n    const list = findParentNode(node => node.type === listType)(tr.selection);\n    if (!list) {\n        return true;\n    }\n    const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\n    if (before === undefined) {\n        return true;\n    }\n    const nodeBefore = tr.doc.nodeAt(before);\n    const canJoinBackwards = list.node.type === (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) && transform.canJoin(tr.doc, list.pos);\n    if (!canJoinBackwards) {\n        return true;\n    }\n    tr.join(list.pos);\n    return true;\n};\nconst joinListForwards = (tr, listType) => {\n    const list = findParentNode(node => node.type === listType)(tr.selection);\n    if (!list) {\n        return true;\n    }\n    const after = tr.doc.resolve(list.start).after(list.depth);\n    if (after === undefined) {\n        return true;\n    }\n    const nodeAfter = tr.doc.nodeAt(after);\n    const canJoinForwards = list.node.type === (nodeAfter === null || nodeAfter === void 0 ? void 0 : nodeAfter.type) && transform.canJoin(tr.doc, after);\n    if (!canJoinForwards) {\n        return true;\n    }\n    tr.join(after);\n    return true;\n};\nconst toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can, }) => {\n    const { extensions, splittableMarks } = editor.extensionManager;\n    const listType = getNodeType(listTypeOrName, state.schema);\n    const itemType = getNodeType(itemTypeOrName, state.schema);\n    const { selection, storedMarks } = state;\n    const { $from, $to } = selection;\n    const range = $from.blockRange($to);\n    const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\n    if (!range) {\n        return false;\n    }\n    const parentList = findParentNode(node => isList(node.type.name, extensions))(selection);\n    if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n        // remove list\n        if (parentList.node.type === listType) {\n            return commands.liftListItem(itemType);\n        }\n        // change list type\n        if (isList(parentList.node.type.name, extensions)\n            && listType.validContent(parentList.node.content)\n            && dispatch) {\n            return chain()\n                .command(() => {\n                tr.setNodeMarkup(parentList.pos, listType);\n                return true;\n            })\n                .command(() => joinListBackwards(tr, listType))\n                .command(() => joinListForwards(tr, listType))\n                .run();\n        }\n    }\n    if (!keepMarks || !marks || !dispatch) {\n        return chain()\n            // try to convert node to default node if needed\n            .command(() => {\n            const canWrapInList = can().wrapInList(listType, attributes);\n            if (canWrapInList) {\n                return true;\n            }\n            return commands.clearNodes();\n        })\n            .wrapInList(listType, attributes)\n            .command(() => joinListBackwards(tr, listType))\n            .command(() => joinListForwards(tr, listType))\n            .run();\n    }\n    return (chain()\n        // try to convert node to default node if needed\n        .command(() => {\n        const canWrapInList = can().wrapInList(listType, attributes);\n        const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\n        tr.ensureMarks(filteredMarks);\n        if (canWrapInList) {\n            return true;\n        }\n        return commands.clearNodes();\n    })\n        .wrapInList(listType, attributes)\n        .command(() => joinListBackwards(tr, listType))\n        .command(() => joinListForwards(tr, listType))\n        .run());\n};\n\nconst toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\n    const { extendEmptyMarkRange = false } = options;\n    const type = getMarkType(typeOrName, state.schema);\n    const isActive = isMarkActive(state, type, attributes);\n    if (isActive) {\n        return commands.unsetMark(type, { extendEmptyMarkRange });\n    }\n    return commands.setMark(type, attributes);\n};\n\nconst toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    const toggleType = getNodeType(toggleTypeOrName, state.schema);\n    const isActive = isNodeActive(state, type, attributes);\n    let attributesToCopy;\n    if (state.selection.$anchor.sameParent(state.selection.$head)) {\n        // only copy attributes if the selection is pointing to a node of the same type\n        attributesToCopy = state.selection.$anchor.parent.attrs;\n    }\n    if (isActive) {\n        return commands.setNode(toggleType, attributesToCopy);\n    }\n    // If the node is not active, we want to set the new node type with the given attributes\n    // Copying over the attributes from the current node if the selection is pointing to a node of the same type\n    return commands.setNode(type, { ...attributesToCopy, ...attributes });\n};\n\nconst toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    const isActive = isNodeActive(state, type, attributes);\n    if (isActive) {\n        return commands.lift(type);\n    }\n    return commands.wrapIn(type, attributes);\n};\n\nconst undoInputRule = () => ({ state, dispatch }) => {\n    const plugins = state.plugins;\n    for (let i = 0; i < plugins.length; i += 1) {\n        const plugin = plugins[i];\n        let undoable;\n        // @ts-ignore\n        // eslint-disable-next-line\n        if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n            if (dispatch) {\n                const tr = state.tr;\n                const toUndo = undoable.transform;\n                for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n                    tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n                }\n                if (undoable.text) {\n                    const marks = tr.doc.resolve(undoable.from).marks();\n                    tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n                }\n                else {\n                    tr.delete(undoable.from, undoable.to);\n                }\n            }\n            return true;\n        }\n    }\n    return false;\n};\n\nconst unsetAllMarks = () => ({ tr, dispatch }) => {\n    const { selection } = tr;\n    const { empty, ranges } = selection;\n    if (empty) {\n        return true;\n    }\n    if (dispatch) {\n        ranges.forEach(range => {\n            tr.removeMark(range.$from.pos, range.$to.pos);\n        });\n    }\n    return true;\n};\n\nconst unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\n    var _a;\n    const { extendEmptyMarkRange = false } = options;\n    const { selection } = tr;\n    const type = getMarkType(typeOrName, state.schema);\n    const { $from, empty, ranges } = selection;\n    if (!dispatch) {\n        return true;\n    }\n    if (empty && extendEmptyMarkRange) {\n        let { from, to } = selection;\n        const attrs = (_a = $from.marks().find(mark => mark.type === type)) === null || _a === void 0 ? void 0 : _a.attrs;\n        const range = getMarkRange($from, type, attrs);\n        if (range) {\n            from = range.from;\n            to = range.to;\n        }\n        tr.removeMark(from, to, type);\n    }\n    else {\n        ranges.forEach(range => {\n            tr.removeMark(range.$from.pos, range.$to.pos, type);\n        });\n    }\n    tr.removeStoredMark(type);\n    return true;\n};\n\nconst updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n    let nodeType = null;\n    let markType = null;\n    const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\n    if (!schemaType) {\n        return false;\n    }\n    if (schemaType === 'node') {\n        nodeType = getNodeType(typeOrName, state.schema);\n    }\n    if (schemaType === 'mark') {\n        markType = getMarkType(typeOrName, state.schema);\n    }\n    if (dispatch) {\n        tr.selection.ranges.forEach((range) => {\n            const from = range.$from.pos;\n            const to = range.$to.pos;\n            let lastPos;\n            let lastNode;\n            let trimmedFrom;\n            let trimmedTo;\n            if (tr.selection.empty) {\n                state.doc.nodesBetween(from, to, (node, pos) => {\n                    if (nodeType && nodeType === node.type) {\n                        trimmedFrom = Math.max(pos, from);\n                        trimmedTo = Math.min(pos + node.nodeSize, to);\n                        lastPos = pos;\n                        lastNode = node;\n                    }\n                });\n            }\n            else {\n                state.doc.nodesBetween(from, to, (node, pos) => {\n                    if (pos < from && nodeType && nodeType === node.type) {\n                        trimmedFrom = Math.max(pos, from);\n                        trimmedTo = Math.min(pos + node.nodeSize, to);\n                        lastPos = pos;\n                        lastNode = node;\n                    }\n                    if (pos >= from && pos <= to) {\n                        if (nodeType && nodeType === node.type) {\n                            tr.setNodeMarkup(pos, undefined, {\n                                ...node.attrs,\n                                ...attributes,\n                            });\n                        }\n                        if (markType && node.marks.length) {\n                            node.marks.forEach((mark) => {\n                                if (markType === mark.type) {\n                                    const trimmedFrom2 = Math.max(pos, from);\n                                    const trimmedTo2 = Math.min(pos + node.nodeSize, to);\n                                    tr.addMark(trimmedFrom2, trimmedTo2, markType.create({\n                                        ...mark.attrs,\n                                        ...attributes,\n                                    }));\n                                }\n                            });\n                        }\n                    }\n                });\n            }\n            if (lastNode) {\n                if (lastPos !== undefined) {\n                    tr.setNodeMarkup(lastPos, undefined, {\n                        ...lastNode.attrs,\n                        ...attributes,\n                    });\n                }\n                if (markType && lastNode.marks.length) {\n                    lastNode.marks.forEach((mark) => {\n                        if (markType === mark.type) {\n                            tr.addMark(trimmedFrom, trimmedTo, markType.create({\n                                ...mark.attrs,\n                                ...attributes,\n                            }));\n                        }\n                    });\n                }\n            }\n        });\n    }\n    return true;\n};\n\nconst wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    return commands$1.wrapIn(type, attributes)(state, dispatch);\n};\n\nconst wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n    const type = getNodeType(typeOrName, state.schema);\n    return schemaList.wrapInList(type, attributes)(state, dispatch);\n};\n\nvar commands = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  blur: blur,\n  clearContent: clearContent,\n  clearNodes: clearNodes,\n  command: command,\n  createParagraphNear: createParagraphNear,\n  cut: cut,\n  deleteCurrentNode: deleteCurrentNode,\n  deleteNode: deleteNode,\n  deleteRange: deleteRange,\n  deleteSelection: deleteSelection,\n  enter: enter,\n  exitCode: exitCode,\n  extendMarkRange: extendMarkRange,\n  first: first,\n  focus: focus,\n  forEach: forEach,\n  insertContent: insertContent,\n  insertContentAt: insertContentAt,\n  joinBackward: joinBackward,\n  joinDown: joinDown,\n  joinForward: joinForward,\n  joinItemBackward: joinItemBackward,\n  joinItemForward: joinItemForward,\n  joinTextblockBackward: joinTextblockBackward,\n  joinTextblockForward: joinTextblockForward,\n  joinUp: joinUp,\n  keyboardShortcut: keyboardShortcut,\n  lift: lift,\n  liftEmptyBlock: liftEmptyBlock,\n  liftListItem: liftListItem,\n  newlineInCode: newlineInCode,\n  resetAttributes: resetAttributes,\n  scrollIntoView: scrollIntoView,\n  selectAll: selectAll,\n  selectNodeBackward: selectNodeBackward,\n  selectNodeForward: selectNodeForward,\n  selectParentNode: selectParentNode,\n  selectTextblockEnd: selectTextblockEnd,\n  selectTextblockStart: selectTextblockStart,\n  setContent: setContent,\n  setMark: setMark,\n  setMeta: setMeta,\n  setNode: setNode,\n  setNodeSelection: setNodeSelection,\n  setTextSelection: setTextSelection,\n  sinkListItem: sinkListItem,\n  splitBlock: splitBlock,\n  splitListItem: splitListItem,\n  toggleList: toggleList,\n  toggleMark: toggleMark,\n  toggleNode: toggleNode,\n  toggleWrap: toggleWrap,\n  undoInputRule: undoInputRule,\n  unsetAllMarks: unsetAllMarks,\n  unsetMark: unsetMark,\n  updateAttributes: updateAttributes,\n  wrapIn: wrapIn,\n  wrapInList: wrapInList\n});\n\nconst Commands = Extension.create({\n    name: 'commands',\n    addCommands() {\n        return {\n            ...commands,\n        };\n    },\n});\n\nconst Drop = Extension.create({\n    name: 'drop',\n    addProseMirrorPlugins() {\n        return [\n            new state.Plugin({\n                key: new state.PluginKey('tiptapDrop'),\n                props: {\n                    handleDrop: (_, e, slice, moved) => {\n                        this.editor.emit('drop', {\n                            editor: this.editor,\n                            event: e,\n                            slice,\n                            moved,\n                        });\n                    },\n                },\n            }),\n        ];\n    },\n});\n\nconst Editable = Extension.create({\n    name: 'editable',\n    addProseMirrorPlugins() {\n        return [\n            new state.Plugin({\n                key: new state.PluginKey('editable'),\n                props: {\n                    editable: () => this.editor.options.editable,\n                },\n            }),\n        ];\n    },\n});\n\nconst focusEventsPluginKey = new state.PluginKey('focusEvents');\nconst FocusEvents = Extension.create({\n    name: 'focusEvents',\n    addProseMirrorPlugins() {\n        const { editor } = this;\n        return [\n            new state.Plugin({\n                key: focusEventsPluginKey,\n                props: {\n                    handleDOMEvents: {\n                        focus: (view, event) => {\n                            editor.isFocused = true;\n                            const transaction = editor.state.tr\n                                .setMeta('focus', { event })\n                                .setMeta('addToHistory', false);\n                            view.dispatch(transaction);\n                            return false;\n                        },\n                        blur: (view, event) => {\n                            editor.isFocused = false;\n                            const transaction = editor.state.tr\n                                .setMeta('blur', { event })\n                                .setMeta('addToHistory', false);\n                            view.dispatch(transaction);\n                            return false;\n                        },\n                    },\n                },\n            }),\n        ];\n    },\n});\n\nconst Keymap = Extension.create({\n    name: 'keymap',\n    addKeyboardShortcuts() {\n        const handleBackspace = () => this.editor.commands.first(({ commands }) => [\n            () => commands.undoInputRule(),\n            // maybe convert first text block node to default node\n            () => commands.command(({ tr }) => {\n                const { selection, doc } = tr;\n                const { empty, $anchor } = selection;\n                const { pos, parent } = $anchor;\n                const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor;\n                const parentIsIsolating = $parentPos.parent.type.spec.isolating;\n                const parentPos = $anchor.pos - $anchor.parentOffset;\n                const isAtStart = (parentIsIsolating && $parentPos.parent.childCount === 1)\n                    ? parentPos === $anchor.pos\n                    : state.Selection.atStart(doc).from === pos;\n                if (!empty\n                    || !parent.type.isTextblock\n                    || parent.textContent.length\n                    || !isAtStart\n                    || (isAtStart && $anchor.parent.type.name === 'paragraph') // prevent clearNodes when no nodes to clear, otherwise history stack is appended\n                ) {\n                    return false;\n                }\n                return commands.clearNodes();\n            }),\n            () => commands.deleteSelection(),\n            () => commands.joinBackward(),\n            () => commands.selectNodeBackward(),\n        ]);\n        const handleDelete = () => this.editor.commands.first(({ commands }) => [\n            () => commands.deleteSelection(),\n            () => commands.deleteCurrentNode(),\n            () => commands.joinForward(),\n            () => commands.selectNodeForward(),\n        ]);\n        const handleEnter = () => this.editor.commands.first(({ commands }) => [\n            () => commands.newlineInCode(),\n            () => commands.createParagraphNear(),\n            () => commands.liftEmptyBlock(),\n            () => commands.splitBlock(),\n        ]);\n        const baseKeymap = {\n            Enter: handleEnter,\n            'Mod-Enter': () => this.editor.commands.exitCode(),\n            Backspace: handleBackspace,\n            'Mod-Backspace': handleBackspace,\n            'Shift-Backspace': handleBackspace,\n            Delete: handleDelete,\n            'Mod-Delete': handleDelete,\n            'Mod-a': () => this.editor.commands.selectAll(),\n        };\n        const pcKeymap = {\n            ...baseKeymap,\n        };\n        const macKeymap = {\n            ...baseKeymap,\n            'Ctrl-h': handleBackspace,\n            'Alt-Backspace': handleBackspace,\n            'Ctrl-d': handleDelete,\n            'Ctrl-Alt-Backspace': handleDelete,\n            'Alt-Delete': handleDelete,\n            'Alt-d': handleDelete,\n            'Ctrl-a': () => this.editor.commands.selectTextblockStart(),\n            'Ctrl-e': () => this.editor.commands.selectTextblockEnd(),\n        };\n        if (isiOS() || isMacOS()) {\n            return macKeymap;\n        }\n        return pcKeymap;\n    },\n    addProseMirrorPlugins() {\n        return [\n            // With this plugin we check if the whole document was selected and deleted.\n            // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n            // to a paragraph if necessary.\n            // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n            // with many other commands.\n            new state.Plugin({\n                key: new state.PluginKey('clearDocument'),\n                appendTransaction: (transactions, oldState, newState) => {\n                    if (transactions.some(tr => tr.getMeta('composition'))) {\n                        return;\n                    }\n                    const docChanges = transactions.some(transaction => transaction.docChanged)\n                        && !oldState.doc.eq(newState.doc);\n                    const ignoreTr = transactions.some(transaction => transaction.getMeta('preventClearDocument'));\n                    if (!docChanges || ignoreTr) {\n                        return;\n                    }\n                    const { empty, from, to } = oldState.selection;\n                    const allFrom = state.Selection.atStart(oldState.doc).from;\n                    const allEnd = state.Selection.atEnd(oldState.doc).to;\n                    const allWasSelected = from === allFrom && to === allEnd;\n                    if (empty || !allWasSelected) {\n                        return;\n                    }\n                    const isEmpty = isNodeEmpty(newState.doc);\n                    if (!isEmpty) {\n                        return;\n                    }\n                    const tr = newState.tr;\n                    const state$1 = createChainableState({\n                        state: newState,\n                        transaction: tr,\n                    });\n                    const { commands } = new CommandManager({\n                        editor: this.editor,\n                        state: state$1,\n                    });\n                    commands.clearNodes();\n                    if (!tr.steps.length) {\n                        return;\n                    }\n                    return tr;\n                },\n            }),\n        ];\n    },\n});\n\nconst Paste = Extension.create({\n    name: 'paste',\n    addProseMirrorPlugins() {\n        return [\n            new state.Plugin({\n                key: new state.PluginKey('tiptapPaste'),\n                props: {\n                    handlePaste: (_view, e, slice) => {\n                        this.editor.emit('paste', {\n                            editor: this.editor,\n                            event: e,\n                            slice,\n                        });\n                    },\n                },\n            }),\n        ];\n    },\n});\n\nconst Tabindex = Extension.create({\n    name: 'tabindex',\n    addProseMirrorPlugins() {\n        return [\n            new state.Plugin({\n                key: new state.PluginKey('tabindex'),\n                props: {\n                    attributes: () => (this.editor.isEditable ? { tabindex: '0' } : {}),\n                },\n            }),\n        ];\n    },\n});\n\nvar index = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ClipboardTextSerializer: ClipboardTextSerializer,\n  Commands: Commands,\n  Drop: Drop,\n  Editable: Editable,\n  FocusEvents: FocusEvents,\n  Keymap: Keymap,\n  Paste: Paste,\n  Tabindex: Tabindex,\n  focusEventsPluginKey: focusEventsPluginKey\n});\n\nclass NodePos {\n    get name() {\n        return this.node.type.name;\n    }\n    constructor(pos, editor, isBlock = false, node = null) {\n        this.currentNode = null;\n        this.actualDepth = null;\n        this.isBlock = isBlock;\n        this.resolvedPos = pos;\n        this.editor = editor;\n        this.currentNode = node;\n    }\n    get node() {\n        return this.currentNode || this.resolvedPos.node();\n    }\n    get element() {\n        return this.editor.view.domAtPos(this.pos).node;\n    }\n    get depth() {\n        var _a;\n        return (_a = this.actualDepth) !== null && _a !== void 0 ? _a : this.resolvedPos.depth;\n    }\n    get pos() {\n        return this.resolvedPos.pos;\n    }\n    get content() {\n        return this.node.content;\n    }\n    set content(content) {\n        let from = this.from;\n        let to = this.to;\n        if (this.isBlock) {\n            if (this.content.size === 0) {\n                console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\n                return;\n            }\n            from = this.from + 1;\n            to = this.to - 1;\n        }\n        this.editor.commands.insertContentAt({ from, to }, content);\n    }\n    get attributes() {\n        return this.node.attrs;\n    }\n    get textContent() {\n        return this.node.textContent;\n    }\n    get size() {\n        return this.node.nodeSize;\n    }\n    get from() {\n        if (this.isBlock) {\n            return this.pos;\n        }\n        return this.resolvedPos.start(this.resolvedPos.depth);\n    }\n    get range() {\n        return {\n            from: this.from,\n            to: this.to,\n        };\n    }\n    get to() {\n        if (this.isBlock) {\n            return this.pos + this.size;\n        }\n        return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\n    }\n    get parent() {\n        if (this.depth === 0) {\n            return null;\n        }\n        const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\n        const $pos = this.resolvedPos.doc.resolve(parentPos);\n        return new NodePos($pos, this.editor);\n    }\n    get before() {\n        let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\n        if ($pos.depth !== this.depth) {\n            $pos = this.resolvedPos.doc.resolve(this.from - 3);\n        }\n        return new NodePos($pos, this.editor);\n    }\n    get after() {\n        let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\n        if ($pos.depth !== this.depth) {\n            $pos = this.resolvedPos.doc.resolve(this.to + 3);\n        }\n        return new NodePos($pos, this.editor);\n    }\n    get children() {\n        const children = [];\n        this.node.content.forEach((node, offset) => {\n            const isBlock = node.isBlock && !node.isTextblock;\n            const isNonTextAtom = node.isAtom && !node.isText;\n            const targetPos = this.pos + offset + (isNonTextAtom ? 0 : 1);\n            // Check if targetPos is within valid document range\n            if (targetPos < 0 || targetPos > this.resolvedPos.doc.nodeSize - 2) {\n                return;\n            }\n            const $pos = this.resolvedPos.doc.resolve(targetPos);\n            if (!isBlock && $pos.depth <= this.depth) {\n                return;\n            }\n            const childNodePos = new NodePos($pos, this.editor, isBlock, isBlock ? node : null);\n            if (isBlock) {\n                childNodePos.actualDepth = this.depth + 1;\n            }\n            children.push(new NodePos($pos, this.editor, isBlock, isBlock ? node : null));\n        });\n        return children;\n    }\n    get firstChild() {\n        return this.children[0] || null;\n    }\n    get lastChild() {\n        const children = this.children;\n        return children[children.length - 1] || null;\n    }\n    closest(selector, attributes = {}) {\n        let node = null;\n        let currentNode = this.parent;\n        while (currentNode && !node) {\n            if (currentNode.node.type.name === selector) {\n                if (Object.keys(attributes).length > 0) {\n                    const nodeAttributes = currentNode.node.attrs;\n                    const attrKeys = Object.keys(attributes);\n                    for (let index = 0; index < attrKeys.length; index += 1) {\n                        const key = attrKeys[index];\n                        if (nodeAttributes[key] !== attributes[key]) {\n                            break;\n                        }\n                    }\n                }\n                else {\n                    node = currentNode;\n                }\n            }\n            currentNode = currentNode.parent;\n        }\n        return node;\n    }\n    querySelector(selector, attributes = {}) {\n        return this.querySelectorAll(selector, attributes, true)[0] || null;\n    }\n    querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\n        let nodes = [];\n        if (!this.children || this.children.length === 0) {\n            return nodes;\n        }\n        const attrKeys = Object.keys(attributes);\n        /**\n         * Finds all children recursively that match the selector and attributes\n         * If firstItemOnly is true, it will return the first item found\n         */\n        this.children.forEach(childPos => {\n            // If we already found a node and we only want the first item, we dont need to keep going\n            if (firstItemOnly && nodes.length > 0) {\n                return;\n            }\n            if (childPos.node.type.name === selector) {\n                const doesAllAttributesMatch = attrKeys.every(key => attributes[key] === childPos.node.attrs[key]);\n                if (doesAllAttributesMatch) {\n                    nodes.push(childPos);\n                }\n            }\n            // If we already found a node and we only want the first item, we can stop here and skip the recursion\n            if (firstItemOnly && nodes.length > 0) {\n                return;\n            }\n            nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));\n        });\n        return nodes;\n    }\n    setAttribute(attributes) {\n        const { tr } = this.editor.state;\n        tr.setNodeMarkup(this.from, undefined, {\n            ...this.node.attrs,\n            ...attributes,\n        });\n        this.editor.view.dispatch(tr);\n    }\n}\n\nconst style = `.ProseMirror {\n  position: relative;\n}\n\n.ProseMirror {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  white-space: break-spaces;\n  -webkit-font-variant-ligatures: none;\n  font-variant-ligatures: none;\n  font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n  white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n  white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n  white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n  display: inline !important;\n  border: none !important;\n  margin: 0 !important;\n  width: 0 !important;\n  height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n  display: none;\n  pointer-events: none;\n  position: absolute;\n  margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n  content: \"\";\n  display: block;\n  position: absolute;\n  top: -2px;\n  width: 20px;\n  border-top: 1px solid black;\n  animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n  to {\n    visibility: hidden;\n  }\n}\n\n.ProseMirror-hideselection *::selection {\n  background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n  background: transparent;\n}\n\n.ProseMirror-hideselection * {\n  caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n  display: block;\n}\n\n.tippy-box[data-animation=fade][data-state=hidden] {\n  opacity: 0\n}`;\n\nfunction createStyleTag(style, nonce, suffix) {\n    const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : ''}]`);\n    if (tiptapStyleTag !== null) {\n        return tiptapStyleTag;\n    }\n    const styleNode = document.createElement('style');\n    if (nonce) {\n        styleNode.setAttribute('nonce', nonce);\n    }\n    styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : ''}`, '');\n    styleNode.innerHTML = style;\n    document.getElementsByTagName('head')[0].appendChild(styleNode);\n    return styleNode;\n}\n\nclass Editor extends EventEmitter {\n    constructor(options = {}) {\n        super();\n        this.isFocused = false;\n        /**\n         * The editor is considered initialized after the `create` event has been emitted.\n         */\n        this.isInitialized = false;\n        this.extensionStorage = {};\n        this.options = {\n            element: document.createElement('div'),\n            content: '',\n            injectCSS: true,\n            injectNonce: undefined,\n            extensions: [],\n            autofocus: false,\n            editable: true,\n            editorProps: {},\n            parseOptions: {},\n            coreExtensionOptions: {},\n            enableInputRules: true,\n            enablePasteRules: true,\n            enableCoreExtensions: true,\n            enableContentCheck: false,\n            emitContentError: false,\n            onBeforeCreate: () => null,\n            onCreate: () => null,\n            onUpdate: () => null,\n            onSelectionUpdate: () => null,\n            onTransaction: () => null,\n            onFocus: () => null,\n            onBlur: () => null,\n            onDestroy: () => null,\n            onContentError: ({ error }) => { throw error; },\n            onPaste: () => null,\n            onDrop: () => null,\n        };\n        this.isCapturingTransaction = false;\n        this.capturedTransaction = null;\n        this.setOptions(options);\n        this.createExtensionManager();\n        this.createCommandManager();\n        this.createSchema();\n        this.on('beforeCreate', this.options.onBeforeCreate);\n        this.emit('beforeCreate', { editor: this });\n        this.on('contentError', this.options.onContentError);\n        this.createView();\n        this.injectCSS();\n        this.on('create', this.options.onCreate);\n        this.on('update', this.options.onUpdate);\n        this.on('selectionUpdate', this.options.onSelectionUpdate);\n        this.on('transaction', this.options.onTransaction);\n        this.on('focus', this.options.onFocus);\n        this.on('blur', this.options.onBlur);\n        this.on('destroy', this.options.onDestroy);\n        this.on('drop', ({ event, slice, moved }) => this.options.onDrop(event, slice, moved));\n        this.on('paste', ({ event, slice }) => this.options.onPaste(event, slice));\n        window.setTimeout(() => {\n            if (this.isDestroyed) {\n                return;\n            }\n            this.commands.focus(this.options.autofocus);\n            this.emit('create', { editor: this });\n            this.isInitialized = true;\n        }, 0);\n    }\n    /**\n     * Returns the editor storage.\n     */\n    get storage() {\n        return this.extensionStorage;\n    }\n    /**\n     * An object of all registered commands.\n     */\n    get commands() {\n        return this.commandManager.commands;\n    }\n    /**\n     * Create a command chain to call multiple commands at once.\n     */\n    chain() {\n        return this.commandManager.chain();\n    }\n    /**\n     * Check if a command or a command chain can be executed. Without executing it.\n     */\n    can() {\n        return this.commandManager.can();\n    }\n    /**\n     * Inject CSS styles.\n     */\n    injectCSS() {\n        if (this.options.injectCSS && document) {\n            this.css = createStyleTag(style, this.options.injectNonce);\n        }\n    }\n    /**\n     * Update editor options.\n     *\n     * @param options A list of options\n     */\n    setOptions(options = {}) {\n        this.options = {\n            ...this.options,\n            ...options,\n        };\n        if (!this.view || !this.state || this.isDestroyed) {\n            return;\n        }\n        if (this.options.editorProps) {\n            this.view.setProps(this.options.editorProps);\n        }\n        this.view.updateState(this.state);\n    }\n    /**\n     * Update editable state of the editor.\n     */\n    setEditable(editable, emitUpdate = true) {\n        this.setOptions({ editable });\n        if (emitUpdate) {\n            this.emit('update', { editor: this, transaction: this.state.tr });\n        }\n    }\n    /**\n     * Returns whether the editor is editable.\n     */\n    get isEditable() {\n        // since plugins are applied after creating the view\n        // `editable` is always `true` for one tick.\n        // that’s why we also have to check for `options.editable`\n        return this.options.editable && this.view && this.view.editable;\n    }\n    /**\n     * Returns the editor state.\n     */\n    get state() {\n        return this.view.state;\n    }\n    /**\n     * Register a ProseMirror plugin.\n     *\n     * @param plugin A ProseMirror plugin\n     * @param handlePlugins Control how to merge the plugin into the existing plugins.\n     * @returns The new editor state\n     */\n    registerPlugin(plugin, handlePlugins) {\n        const plugins = isFunction(handlePlugins)\n            ? handlePlugins(plugin, [...this.state.plugins])\n            : [...this.state.plugins, plugin];\n        const state = this.state.reconfigure({ plugins });\n        this.view.updateState(state);\n        return state;\n    }\n    /**\n     * Unregister a ProseMirror plugin.\n     *\n     * @param nameOrPluginKeyToRemove The plugins name\n     * @returns The new editor state or undefined if the editor is destroyed\n     */\n    unregisterPlugin(nameOrPluginKeyToRemove) {\n        if (this.isDestroyed) {\n            return undefined;\n        }\n        const prevPlugins = this.state.plugins;\n        let plugins = prevPlugins;\n        [].concat(nameOrPluginKeyToRemove).forEach(nameOrPluginKey => {\n            // @ts-ignore\n            const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\n            // @ts-ignore\n            plugins = plugins.filter(plugin => !plugin.key.startsWith(name));\n        });\n        if (prevPlugins.length === plugins.length) {\n            // No plugin was removed, so we don’t need to update the state\n            return undefined;\n        }\n        const state = this.state.reconfigure({\n            plugins,\n        });\n        this.view.updateState(state);\n        return state;\n    }\n    /**\n     * Creates an extension manager.\n     */\n    createExtensionManager() {\n        var _a, _b;\n        const coreExtensions = this.options.enableCoreExtensions ? [\n            Editable,\n            ClipboardTextSerializer.configure({\n                blockSeparator: (_b = (_a = this.options.coreExtensionOptions) === null || _a === void 0 ? void 0 : _a.clipboardTextSerializer) === null || _b === void 0 ? void 0 : _b.blockSeparator,\n            }),\n            Commands,\n            FocusEvents,\n            Keymap,\n            Tabindex,\n            Drop,\n            Paste,\n        ].filter(ext => {\n            if (typeof this.options.enableCoreExtensions === 'object') {\n                return this.options.enableCoreExtensions[ext.name] !== false;\n            }\n            return true;\n        }) : [];\n        const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {\n            return ['extension', 'node', 'mark'].includes(extension === null || extension === void 0 ? void 0 : extension.type);\n        });\n        this.extensionManager = new ExtensionManager(allExtensions, this);\n    }\n    /**\n     * Creates an command manager.\n     */\n    createCommandManager() {\n        this.commandManager = new CommandManager({\n            editor: this,\n        });\n    }\n    /**\n     * Creates a ProseMirror schema.\n     */\n    createSchema() {\n        this.schema = this.extensionManager.schema;\n    }\n    /**\n     * Creates a ProseMirror view.\n     */\n    createView() {\n        var _a;\n        let doc;\n        try {\n            doc = createDocument(this.options.content, this.schema, this.options.parseOptions, { errorOnInvalidContent: this.options.enableContentCheck });\n        }\n        catch (e) {\n            if (!(e instanceof Error) || !['[tiptap error]: Invalid JSON content', '[tiptap error]: Invalid HTML content'].includes(e.message)) {\n                // Not the content error we were expecting\n                throw e;\n            }\n            this.emit('contentError', {\n                editor: this,\n                error: e,\n                disableCollaboration: () => {\n                    if (this.storage.collaboration) {\n                        this.storage.collaboration.isDisabled = true;\n                    }\n                    // To avoid syncing back invalid content, reinitialize the extensions without the collaboration extension\n                    this.options.extensions = this.options.extensions.filter(extension => extension.name !== 'collaboration');\n                    // Restart the initialization process by recreating the extension manager with the new set of extensions\n                    this.createExtensionManager();\n                },\n            });\n            // Content is invalid, but attempt to create it anyway, stripping out the invalid parts\n            doc = createDocument(this.options.content, this.schema, this.options.parseOptions, { errorOnInvalidContent: false });\n        }\n        const selection = resolveFocusPosition(doc, this.options.autofocus);\n        this.view = new view.EditorView(this.options.element, {\n            ...this.options.editorProps,\n            attributes: {\n                // add `role=\"textbox\"` to the editor element\n                role: 'textbox',\n                ...(_a = this.options.editorProps) === null || _a === void 0 ? void 0 : _a.attributes,\n            },\n            dispatchTransaction: this.dispatchTransaction.bind(this),\n            state: state.EditorState.create({\n                doc,\n                selection: selection || undefined,\n            }),\n        });\n        // `editor.view` is not yet available at this time.\n        // Therefore we will add all plugins and node views directly afterwards.\n        const newState = this.state.reconfigure({\n            plugins: this.extensionManager.plugins,\n        });\n        this.view.updateState(newState);\n        this.createNodeViews();\n        this.prependClass();\n        // Let’s store the editor instance in the DOM element.\n        // So we’ll have access to it for tests.\n        // @ts-ignore\n        const dom = this.view.dom;\n        dom.editor = this;\n    }\n    /**\n     * Creates all node views.\n     */\n    createNodeViews() {\n        if (this.view.isDestroyed) {\n            return;\n        }\n        this.view.setProps({\n            nodeViews: this.extensionManager.nodeViews,\n        });\n    }\n    /**\n     * Prepend class name to element.\n     */\n    prependClass() {\n        this.view.dom.className = `tiptap ${this.view.dom.className}`;\n    }\n    captureTransaction(fn) {\n        this.isCapturingTransaction = true;\n        fn();\n        this.isCapturingTransaction = false;\n        const tr = this.capturedTransaction;\n        this.capturedTransaction = null;\n        return tr;\n    }\n    /**\n     * The callback over which to send transactions (state updates) produced by the view.\n     *\n     * @param transaction An editor state transaction\n     */\n    dispatchTransaction(transaction) {\n        // if the editor / the view of the editor was destroyed\n        // the transaction should not be dispatched as there is no view anymore.\n        if (this.view.isDestroyed) {\n            return;\n        }\n        if (this.isCapturingTransaction) {\n            if (!this.capturedTransaction) {\n                this.capturedTransaction = transaction;\n                return;\n            }\n            transaction.steps.forEach(step => { var _a; return (_a = this.capturedTransaction) === null || _a === void 0 ? void 0 : _a.step(step); });\n            return;\n        }\n        const state = this.state.apply(transaction);\n        const selectionHasChanged = !this.state.selection.eq(state.selection);\n        this.emit('beforeTransaction', {\n            editor: this,\n            transaction,\n            nextState: state,\n        });\n        this.view.updateState(state);\n        this.emit('transaction', {\n            editor: this,\n            transaction,\n        });\n        if (selectionHasChanged) {\n            this.emit('selectionUpdate', {\n                editor: this,\n                transaction,\n            });\n        }\n        const focus = transaction.getMeta('focus');\n        const blur = transaction.getMeta('blur');\n        if (focus) {\n            this.emit('focus', {\n                editor: this,\n                event: focus.event,\n                transaction,\n            });\n        }\n        if (blur) {\n            this.emit('blur', {\n                editor: this,\n                event: blur.event,\n                transaction,\n            });\n        }\n        if (!transaction.docChanged || transaction.getMeta('preventUpdate')) {\n            return;\n        }\n        this.emit('update', {\n            editor: this,\n            transaction,\n        });\n    }\n    /**\n     * Get attributes of the currently selected node or mark.\n     */\n    getAttributes(nameOrType) {\n        return getAttributes(this.state, nameOrType);\n    }\n    isActive(nameOrAttributes, attributesOrUndefined) {\n        const name = typeof nameOrAttributes === 'string' ? nameOrAttributes : null;\n        const attributes = typeof nameOrAttributes === 'string' ? attributesOrUndefined : nameOrAttributes;\n        return isActive(this.state, name, attributes);\n    }\n    /**\n     * Get the document as JSON.\n     */\n    getJSON() {\n        return this.state.doc.toJSON();\n    }\n    /**\n     * Get the document as HTML.\n     */\n    getHTML() {\n        return getHTMLFromFragment(this.state.doc.content, this.schema);\n    }\n    /**\n     * Get the document as text.\n     */\n    getText(options) {\n        const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\n        return getText(this.state.doc, {\n            blockSeparator,\n            textSerializers: {\n                ...getTextSerializersFromSchema(this.schema),\n                ...textSerializers,\n            },\n        });\n    }\n    /**\n     * Check if there is no content.\n     */\n    get isEmpty() {\n        return isNodeEmpty(this.state.doc);\n    }\n    /**\n     * Get the number of characters for the current document.\n     *\n     * @deprecated\n     */\n    getCharacterCount() {\n        console.warn('[tiptap warn]: \"editor.getCharacterCount()\" is deprecated. Please use \"editor.storage.characterCount.characters()\" instead.');\n        return this.state.doc.content.size - 2;\n    }\n    /**\n     * Destroy the editor.\n     */\n    destroy() {\n        this.emit('destroy');\n        if (this.view) {\n            // Cleanup our reference to prevent circular references which caused memory leaks\n            // @ts-ignore\n            const dom = this.view.dom;\n            if (dom && dom.editor) {\n                delete dom.editor;\n            }\n            this.view.destroy();\n        }\n        this.removeAllListeners();\n    }\n    /**\n     * Check if the editor is already destroyed.\n     */\n    get isDestroyed() {\n        var _a;\n        // @ts-ignore\n        return !((_a = this.view) === null || _a === void 0 ? void 0 : _a.docView);\n    }\n    $node(selector, attributes) {\n        var _a;\n        return ((_a = this.$doc) === null || _a === void 0 ? void 0 : _a.querySelector(selector, attributes)) || null;\n    }\n    $nodes(selector, attributes) {\n        var _a;\n        return ((_a = this.$doc) === null || _a === void 0 ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\n    }\n    $pos(pos) {\n        const $pos = this.state.doc.resolve(pos);\n        return new NodePos($pos, this);\n    }\n    get $doc() {\n        return this.$pos(0);\n    }\n}\n\n/**\n * Build an input rule that adds a mark when the\n * matched text is typed into it.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#input-rules\n */\nfunction markInputRule(config) {\n    return new InputRule({\n        find: config.find,\n        handler: ({ state, range, match }) => {\n            const attributes = callOrReturn(config.getAttributes, undefined, match);\n            if (attributes === false || attributes === null) {\n                return null;\n            }\n            const { tr } = state;\n            const captureGroup = match[match.length - 1];\n            const fullMatch = match[0];\n            if (captureGroup) {\n                const startSpaces = fullMatch.search(/\\S/);\n                const textStart = range.from + fullMatch.indexOf(captureGroup);\n                const textEnd = textStart + captureGroup.length;\n                const excludedMarks = getMarksBetween(range.from, range.to, state.doc)\n                    .filter(item => {\n                    // @ts-ignore\n                    const excluded = item.mark.type.excluded;\n                    return excluded.find(type => type === config.type && type !== item.mark.type);\n                })\n                    .filter(item => item.to > textStart);\n                if (excludedMarks.length) {\n                    return null;\n                }\n                if (textEnd < range.to) {\n                    tr.delete(textEnd, range.to);\n                }\n                if (textStart > range.from) {\n                    tr.delete(range.from + startSpaces, textStart);\n                }\n                const markEnd = range.from + startSpaces + captureGroup.length;\n                tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n                tr.removeStoredMark(config.type);\n            }\n        },\n    });\n}\n\n/**\n * Build an input rule that adds a node when the\n * matched text is typed into it.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#input-rules\n */\nfunction nodeInputRule(config) {\n    return new InputRule({\n        find: config.find,\n        handler: ({ state, range, match }) => {\n            const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\n            const { tr } = state;\n            const start = range.from;\n            let end = range.to;\n            const newNode = config.type.create(attributes);\n            if (match[1]) {\n                const offset = match[0].lastIndexOf(match[1]);\n                let matchStart = start + offset;\n                if (matchStart > end) {\n                    matchStart = end;\n                }\n                else {\n                    end = matchStart + match[1].length;\n                }\n                // insert last typed character\n                const lastChar = match[0][match[0].length - 1];\n                tr.insertText(lastChar, start + match[0].length - 1);\n                // insert node from input rule\n                tr.replaceWith(matchStart, end, newNode);\n            }\n            else if (match[0]) {\n                const insertionStart = config.type.isInline ? start : start - 1;\n                tr.insert(insertionStart, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\n            }\n            tr.scrollIntoView();\n        },\n    });\n}\n\n/**\n * Build an input rule that changes the type of a textblock when the\n * matched text is typed into it. When using a regular expresion you’ll\n * probably want the regexp to start with `^`, so that the pattern can\n * only occur at the start of a textblock.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#input-rules\n */\nfunction textblockTypeInputRule(config) {\n    return new InputRule({\n        find: config.find,\n        handler: ({ state, range, match }) => {\n            const $start = state.doc.resolve(range.from);\n            const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\n            if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\n                return null;\n            }\n            state.tr\n                .delete(range.from, range.to)\n                .setBlockType(range.from, range.from, config.type, attributes);\n        },\n    });\n}\n\n/**\n * Build an input rule that replaces text when the\n * matched text is typed into it.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#input-rules\n */\nfunction textInputRule(config) {\n    return new InputRule({\n        find: config.find,\n        handler: ({ state, range, match }) => {\n            let insert = config.replace;\n            let start = range.from;\n            const end = range.to;\n            if (match[1]) {\n                const offset = match[0].lastIndexOf(match[1]);\n                insert += match[0].slice(offset + match[1].length);\n                start += offset;\n                const cutOff = start - end;\n                if (cutOff > 0) {\n                    insert = match[0].slice(offset - cutOff, offset) + insert;\n                    start = end;\n                }\n            }\n            state.tr.insertText(insert, start, end);\n        },\n    });\n}\n\n/**\n * Build an input rule for automatically wrapping a textblock when a\n * given string is typed. When using a regular expresion you’ll\n * probably want the regexp to start with `^`, so that the pattern can\n * only occur at the start of a textblock.\n *\n * `type` is the type of node to wrap in.\n *\n * By default, if there’s a node with the same type above the newly\n * wrapped node, the rule will try to join those\n * two nodes. You can pass a join predicate, which takes a regular\n * expression match and the node before the wrapped node, and can\n * return a boolean to indicate whether a join should happen.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#input-rules\n */\nfunction wrappingInputRule(config) {\n    return new InputRule({\n        find: config.find,\n        handler: ({ state, range, match, chain, }) => {\n            const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\n            const tr = state.tr.delete(range.from, range.to);\n            const $start = tr.doc.resolve(range.from);\n            const blockRange = $start.blockRange();\n            const wrapping = blockRange && transform.findWrapping(blockRange, config.type, attributes);\n            if (!wrapping) {\n                return null;\n            }\n            tr.wrap(blockRange, wrapping);\n            if (config.keepMarks && config.editor) {\n                const { selection, storedMarks } = state;\n                const { splittableMarks } = config.editor.extensionManager;\n                const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\n                if (marks) {\n                    const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\n                    tr.ensureMarks(filteredMarks);\n                }\n            }\n            if (config.keepAttributes) {\n                /** If the nodeType is `bulletList` or `orderedList` set the `nodeType` as `listItem` */\n                const nodeType = config.type.name === 'bulletList' || config.type.name === 'orderedList' ? 'listItem' : 'taskList';\n                chain().updateAttributes(nodeType, attributes).run();\n            }\n            const before = tr.doc.resolve(range.from - 1).nodeBefore;\n            if (before\n                && before.type === config.type\n                && transform.canJoin(tr.doc, range.from - 1)\n                && (!config.joinPredicate || config.joinPredicate(match, before))) {\n                tr.join(range.from - 1);\n            }\n        },\n    });\n}\n\n/**\n * The Node class is used to create custom node extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nclass Node {\n    constructor(config = {}) {\n        this.type = 'node';\n        this.name = 'node';\n        this.parent = null;\n        this.child = null;\n        this.config = {\n            name: this.name,\n            defaultOptions: {},\n        };\n        this.config = {\n            ...this.config,\n            ...config,\n        };\n        this.name = this.config.name;\n        if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\n            console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\n        }\n        // TODO: remove `addOptions` fallback\n        this.options = this.config.defaultOptions;\n        if (this.config.addOptions) {\n            this.options = callOrReturn(getExtensionField(this, 'addOptions', {\n                name: this.name,\n            }));\n        }\n        this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\n            name: this.name,\n            options: this.options,\n        })) || {};\n    }\n    static create(config = {}) {\n        return new Node(config);\n    }\n    configure(options = {}) {\n        // return a new instance so we can use the same extension\n        // with different calls of `configure`\n        const extension = this.extend({\n            ...this.config,\n            addOptions: () => {\n                return mergeDeep(this.options, options);\n            },\n        });\n        // Always preserve the current name\n        extension.name = this.name;\n        // Set the parent to be our parent\n        extension.parent = this.parent;\n        return extension;\n    }\n    extend(extendedConfig = {}) {\n        const extension = new Node(extendedConfig);\n        extension.parent = this;\n        this.child = extension;\n        extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\n        if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {\n            console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\n        }\n        extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\n            name: extension.name,\n        }));\n        extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\n            name: extension.name,\n            options: extension.options,\n        }));\n        return extension;\n    }\n}\n\n/**\n * Node views are used to customize the rendered DOM structure of a node.\n * @see https://tiptap.dev/guide/node-views\n */\nclass NodeView {\n    constructor(component, props, options) {\n        this.isDragging = false;\n        this.component = component;\n        this.editor = props.editor;\n        this.options = {\n            stopEvent: null,\n            ignoreMutation: null,\n            ...options,\n        };\n        this.extension = props.extension;\n        this.node = props.node;\n        this.decorations = props.decorations;\n        this.innerDecorations = props.innerDecorations;\n        this.view = props.view;\n        this.HTMLAttributes = props.HTMLAttributes;\n        this.getPos = props.getPos;\n        this.mount();\n    }\n    mount() {\n        // eslint-disable-next-line\n        return;\n    }\n    get dom() {\n        return this.editor.view.dom;\n    }\n    get contentDOM() {\n        return null;\n    }\n    onDragStart(event) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        const { view } = this.editor;\n        const target = event.target;\n        // get the drag handle element\n        // `closest` is not available for text nodes so we may have to use its parent\n        const dragHandle = target.nodeType === 3\n            ? (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.closest('[data-drag-handle]')\n            : target.closest('[data-drag-handle]');\n        if (!this.dom || ((_b = this.contentDOM) === null || _b === void 0 ? void 0 : _b.contains(target)) || !dragHandle) {\n            return;\n        }\n        let x = 0;\n        let y = 0;\n        // calculate offset for drag element if we use a different drag handle element\n        if (this.dom !== dragHandle) {\n            const domBox = this.dom.getBoundingClientRect();\n            const handleBox = dragHandle.getBoundingClientRect();\n            // In React, we have to go through nativeEvent to reach offsetX/offsetY.\n            const offsetX = (_c = event.offsetX) !== null && _c !== void 0 ? _c : (_d = event.nativeEvent) === null || _d === void 0 ? void 0 : _d.offsetX;\n            const offsetY = (_e = event.offsetY) !== null && _e !== void 0 ? _e : (_f = event.nativeEvent) === null || _f === void 0 ? void 0 : _f.offsetY;\n            x = handleBox.x - domBox.x + offsetX;\n            y = handleBox.y - domBox.y + offsetY;\n        }\n        const clonedNode = this.dom.cloneNode(true);\n        (_g = event.dataTransfer) === null || _g === void 0 ? void 0 : _g.setDragImage(clonedNode, x, y);\n        const pos = this.getPos();\n        if (typeof pos !== 'number') {\n            return;\n        }\n        // we need to tell ProseMirror that we want to move the whole node\n        // so we create a NodeSelection\n        const selection = state.NodeSelection.create(view.state.doc, pos);\n        const transaction = view.state.tr.setSelection(selection);\n        view.dispatch(transaction);\n    }\n    stopEvent(event) {\n        var _a;\n        if (!this.dom) {\n            return false;\n        }\n        if (typeof this.options.stopEvent === 'function') {\n            return this.options.stopEvent({ event });\n        }\n        const target = event.target;\n        const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) === null || _a === void 0 ? void 0 : _a.contains(target));\n        // any event from child nodes should be handled by ProseMirror\n        if (!isInElement) {\n            return false;\n        }\n        const isDragEvent = event.type.startsWith('drag');\n        const isDropEvent = event.type === 'drop';\n        const isInput = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(target.tagName) || target.isContentEditable;\n        // any input event within node views should be ignored by ProseMirror\n        if (isInput && !isDropEvent && !isDragEvent) {\n            return true;\n        }\n        const { isEditable } = this.editor;\n        const { isDragging } = this;\n        const isDraggable = !!this.node.type.spec.draggable;\n        const isSelectable = state.NodeSelection.isSelectable(this.node);\n        const isCopyEvent = event.type === 'copy';\n        const isPasteEvent = event.type === 'paste';\n        const isCutEvent = event.type === 'cut';\n        const isClickEvent = event.type === 'mousedown';\n        // ProseMirror tries to drag selectable nodes\n        // even if `draggable` is set to `false`\n        // this fix prevents that\n        if (!isDraggable && isSelectable && isDragEvent && event.target === this.dom) {\n            event.preventDefault();\n        }\n        if (isDraggable && isDragEvent && !isDragging && event.target === this.dom) {\n            event.preventDefault();\n            return false;\n        }\n        // we have to store that dragging started\n        if (isDraggable && isEditable && !isDragging && isClickEvent) {\n            const dragHandle = target.closest('[data-drag-handle]');\n            const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n            if (isValidDragHandle) {\n                this.isDragging = true;\n                document.addEventListener('dragend', () => {\n                    this.isDragging = false;\n                }, { once: true });\n                document.addEventListener('drop', () => {\n                    this.isDragging = false;\n                }, { once: true });\n                document.addEventListener('mouseup', () => {\n                    this.isDragging = false;\n                }, { once: true });\n            }\n        }\n        // these events are handled by prosemirror\n        if (isDragging\n            || isDropEvent\n            || isCopyEvent\n            || isPasteEvent\n            || isCutEvent\n            || (isClickEvent && isSelectable)) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Called when a DOM [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) or a selection change happens within the view.\n     * @return `false` if the editor should re-read the selection or re-parse the range around the mutation\n     * @return `true` if it can safely be ignored.\n     */\n    ignoreMutation(mutation) {\n        if (!this.dom || !this.contentDOM) {\n            return true;\n        }\n        if (typeof this.options.ignoreMutation === 'function') {\n            return this.options.ignoreMutation({ mutation });\n        }\n        // a leaf/atom node is like a black box for ProseMirror\n        // and should be fully handled by the node view\n        if (this.node.isLeaf || this.node.isAtom) {\n            return true;\n        }\n        // ProseMirror should handle any selections\n        if (mutation.type === 'selection') {\n            return false;\n        }\n        // try to prevent a bug on iOS and Android that will break node views on enter\n        // this is because ProseMirror can’t preventDispatch on enter\n        // this will lead to a re-render of the node view on enter\n        // see: https://github.com/ueberdosis/tiptap/issues/1214\n        // see: https://github.com/ueberdosis/tiptap/issues/2534\n        if (this.dom.contains(mutation.target)\n            && mutation.type === 'childList'\n            && (isiOS() || isAndroid())\n            && this.editor.isFocused) {\n            const changedNodes = [\n                ...Array.from(mutation.addedNodes),\n                ...Array.from(mutation.removedNodes),\n            ];\n            // we’ll check if every changed node is contentEditable\n            // to make sure it’s probably mutated by ProseMirror\n            if (changedNodes.every(node => node.isContentEditable)) {\n                return false;\n            }\n        }\n        // we will allow mutation contentDOM with attributes\n        // so we can for example adding classes within our node view\n        if (this.contentDOM === mutation.target && mutation.type === 'attributes') {\n            return true;\n        }\n        // ProseMirror should handle any changes within contentDOM\n        if (this.contentDOM.contains(mutation.target)) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Update the attributes of the prosemirror node.\n     */\n    updateAttributes(attributes) {\n        this.editor.commands.command(({ tr }) => {\n            const pos = this.getPos();\n            if (typeof pos !== 'number') {\n                return false;\n            }\n            tr.setNodeMarkup(pos, undefined, {\n                ...this.node.attrs,\n                ...attributes,\n            });\n            return true;\n        });\n    }\n    /**\n     * Delete the node.\n     */\n    deleteNode() {\n        const from = this.getPos();\n        if (typeof from !== 'number') {\n            return;\n        }\n        const to = from + this.node.nodeSize;\n        this.editor.commands.deleteRange({ from, to });\n    }\n}\n\n/**\n * Build an paste rule that adds a mark when the\n * matched text is pasted into it.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#paste-rules\n */\nfunction markPasteRule(config) {\n    return new PasteRule({\n        find: config.find,\n        handler: ({ state, range, match, pasteEvent, }) => {\n            const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent);\n            if (attributes === false || attributes === null) {\n                return null;\n            }\n            const { tr } = state;\n            const captureGroup = match[match.length - 1];\n            const fullMatch = match[0];\n            let markEnd = range.to;\n            if (captureGroup) {\n                const startSpaces = fullMatch.search(/\\S/);\n                const textStart = range.from + fullMatch.indexOf(captureGroup);\n                const textEnd = textStart + captureGroup.length;\n                const excludedMarks = getMarksBetween(range.from, range.to, state.doc)\n                    .filter(item => {\n                    // @ts-ignore\n                    const excluded = item.mark.type.excluded;\n                    return excluded.find(type => type === config.type && type !== item.mark.type);\n                })\n                    .filter(item => item.to > textStart);\n                if (excludedMarks.length) {\n                    return null;\n                }\n                if (textEnd < range.to) {\n                    tr.delete(textEnd, range.to);\n                }\n                if (textStart > range.from) {\n                    tr.delete(range.from + startSpaces, textStart);\n                }\n                markEnd = range.from + startSpaces + captureGroup.length;\n                tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n                tr.removeStoredMark(config.type);\n            }\n        },\n    });\n}\n\nfunction canInsertNode(state$1, nodeType) {\n    const { selection } = state$1;\n    const { $from } = selection;\n    // Special handling for NodeSelection\n    if (selection instanceof state.NodeSelection) {\n        const index = $from.index();\n        const parent = $from.parent;\n        // Can we replace the selected node with the horizontal rule?\n        return parent.canReplaceWith(index, index + 1, nodeType);\n    }\n    // Default: check if we can insert at the current position\n    let depth = $from.depth;\n    while (depth >= 0) {\n        const index = $from.index(depth);\n        const parent = $from.node(depth);\n        const match = parent.contentMatchAt(index);\n        if (match.matchType(nodeType)) {\n            return true;\n        }\n        depth -= 1;\n    }\n    return false;\n}\n\n// source: https://stackoverflow.com/a/6969486\nfunction escapeForRegEx(string) {\n    return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction isString(value) {\n    return typeof value === 'string';\n}\n\n/**\n * Build an paste rule that adds a node when the\n * matched text is pasted into it.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#paste-rules\n */\nfunction nodePasteRule(config) {\n    return new PasteRule({\n        find: config.find,\n        handler({ match, chain, range, pasteEvent, }) {\n            const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent);\n            const content = callOrReturn(config.getContent, undefined, attributes);\n            if (attributes === false || attributes === null) {\n                return null;\n            }\n            const node = { type: config.type.name, attrs: attributes };\n            if (content) {\n                node.content = content;\n            }\n            if (match.input) {\n                chain().deleteRange(range).insertContentAt(range.from, node);\n            }\n        },\n    });\n}\n\n/**\n * Build an paste rule that replaces text when the\n * matched text is pasted into it.\n * @see https://tiptap.dev/docs/editor/extensions/custom-extensions/extend-existing#paste-rules\n */\nfunction textPasteRule(config) {\n    return new PasteRule({\n        find: config.find,\n        handler: ({ state, range, match }) => {\n            let insert = config.replace;\n            let start = range.from;\n            const end = range.to;\n            if (match[1]) {\n                const offset = match[0].lastIndexOf(match[1]);\n                insert += match[0].slice(offset + match[1].length);\n                start += offset;\n                const cutOff = start - end;\n                if (cutOff > 0) {\n                    insert = match[0].slice(offset - cutOff, offset) + insert;\n                    start = end;\n                }\n            }\n            state.tr.insertText(insert, start, end);\n        },\n    });\n}\n\nclass Tracker {\n    constructor(transaction) {\n        this.transaction = transaction;\n        this.currentStep = this.transaction.steps.length;\n    }\n    map(position) {\n        let deleted = false;\n        const mappedPosition = this.transaction.steps\n            .slice(this.currentStep)\n            .reduce((newPosition, step) => {\n            const mapResult = step.getMap().mapResult(newPosition);\n            if (mapResult.deleted) {\n                deleted = true;\n            }\n            return mapResult.pos;\n        }, position);\n        return {\n            position: mappedPosition,\n            deleted,\n        };\n    }\n}\n\nexports.CommandManager = CommandManager;\nexports.Editor = Editor;\nexports.Extension = Extension;\nexports.InputRule = InputRule;\nexports.Mark = Mark;\nexports.Node = Node;\nexports.NodePos = NodePos;\nexports.NodeView = NodeView;\nexports.PasteRule = PasteRule;\nexports.Tracker = Tracker;\nexports.callOrReturn = callOrReturn;\nexports.canInsertNode = canInsertNode;\nexports.combineTransactionSteps = combineTransactionSteps;\nexports.createChainableState = createChainableState;\nexports.createDocument = createDocument;\nexports.createNodeFromContent = createNodeFromContent;\nexports.createStyleTag = createStyleTag;\nexports.defaultBlockAt = defaultBlockAt;\nexports.deleteProps = deleteProps;\nexports.elementFromString = elementFromString;\nexports.escapeForRegEx = escapeForRegEx;\nexports.extensions = index;\nexports.findChildren = findChildren;\nexports.findChildrenInRange = findChildrenInRange;\nexports.findDuplicates = findDuplicates;\nexports.findParentNode = findParentNode;\nexports.findParentNodeClosestToPos = findParentNodeClosestToPos;\nexports.fromString = fromString;\nexports.generateHTML = generateHTML;\nexports.generateJSON = generateJSON;\nexports.generateText = generateText;\nexports.getAttributes = getAttributes;\nexports.getAttributesFromExtensions = getAttributesFromExtensions;\nexports.getChangedRanges = getChangedRanges;\nexports.getDebugJSON = getDebugJSON;\nexports.getExtensionField = getExtensionField;\nexports.getHTMLFromFragment = getHTMLFromFragment;\nexports.getMarkAttributes = getMarkAttributes;\nexports.getMarkRange = getMarkRange;\nexports.getMarkType = getMarkType;\nexports.getMarksBetween = getMarksBetween;\nexports.getNodeAtPosition = getNodeAtPosition;\nexports.getNodeAttributes = getNodeAttributes;\nexports.getNodeType = getNodeType;\nexports.getRenderedAttributes = getRenderedAttributes;\nexports.getSchema = getSchema;\nexports.getSchemaByResolvedExtensions = getSchemaByResolvedExtensions;\nexports.getSchemaTypeByName = getSchemaTypeByName;\nexports.getSchemaTypeNameByName = getSchemaTypeNameByName;\nexports.getSplittedAttributes = getSplittedAttributes;\nexports.getText = getText;\nexports.getTextBetween = getTextBetween;\nexports.getTextContentFromNodes = getTextContentFromNodes;\nexports.getTextSerializersFromSchema = getTextSerializersFromSchema;\nexports.injectExtensionAttributesToParseRule = injectExtensionAttributesToParseRule;\nexports.inputRulesPlugin = inputRulesPlugin;\nexports.isActive = isActive;\nexports.isAtEndOfNode = isAtEndOfNode;\nexports.isAtStartOfNode = isAtStartOfNode;\nexports.isEmptyObject = isEmptyObject;\nexports.isExtensionRulesEnabled = isExtensionRulesEnabled;\nexports.isFunction = isFunction;\nexports.isList = isList;\nexports.isMacOS = isMacOS;\nexports.isMarkActive = isMarkActive;\nexports.isNodeActive = isNodeActive;\nexports.isNodeEmpty = isNodeEmpty;\nexports.isNodeSelection = isNodeSelection;\nexports.isNumber = isNumber;\nexports.isPlainObject = isPlainObject;\nexports.isRegExp = isRegExp;\nexports.isSafari = isSafari;\nexports.isString = isString;\nexports.isTextSelection = isTextSelection;\nexports.isiOS = isiOS;\nexports.markInputRule = markInputRule;\nexports.markPasteRule = markPasteRule;\nexports.mergeAttributes = mergeAttributes;\nexports.mergeDeep = mergeDeep;\nexports.minMax = minMax;\nexports.nodeInputRule = nodeInputRule;\nexports.nodePasteRule = nodePasteRule;\nexports.objectIncludes = objectIncludes;\nexports.pasteRulesPlugin = pasteRulesPlugin;\nexports.posToDOMRect = posToDOMRect;\nexports.removeDuplicates = removeDuplicates;\nexports.resolveFocusPosition = resolveFocusPosition;\nexports.rewriteUnknownContent = rewriteUnknownContent;\nexports.selectionToInsertionEnd = selectionToInsertionEnd;\nexports.splitExtensions = splitExtensions;\nexports.textInputRule = textInputRule;\nexports.textPasteRule = textPasteRule;\nexports.textblockTypeInputRule = textblockTypeInputRule;\nexports.wrappingInputRule = wrappingInputRule;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * Matches a blockquote to a `>` as input.\n */\nconst inputRegex = /^\\s*>\\s$/;\n/**\n * This extension allows you to create blockquotes.\n * @see https://tiptap.dev/api/nodes/blockquote\n */\nconst Blockquote = core.Node.create({\n    name: 'blockquote',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    content: 'block+',\n    group: 'block',\n    defining: true,\n    parseHTML() {\n        return [\n            { tag: 'blockquote' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['blockquote', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setBlockquote: () => ({ commands }) => {\n                return commands.wrapIn(this.name);\n            },\n            toggleBlockquote: () => ({ commands }) => {\n                return commands.toggleWrap(this.name);\n            },\n            unsetBlockquote: () => ({ commands }) => {\n                return commands.lift(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Shift-b': () => this.editor.commands.toggleBlockquote(),\n        };\n    },\n    addInputRules() {\n        return [\n            core.wrappingInputRule({\n                find: inputRegex,\n                type: this.type,\n            }),\n        ];\n    },\n});\n\nexports.Blockquote = Blockquote;\nexports.default = Blockquote;\nexports.inputRegex = inputRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * Matches bold text via `**` as input.\n */\nconst starInputRegex = /(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))$/;\n/**\n * Matches bold text via `**` while pasting.\n */\nconst starPasteRegex = /(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))/g;\n/**\n * Matches bold text via `__` as input.\n */\nconst underscoreInputRegex = /(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))$/;\n/**\n * Matches bold text via `__` while pasting.\n */\nconst underscorePasteRegex = /(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))/g;\n/**\n * This extension allows you to mark text as bold.\n * @see https://tiptap.dev/api/marks/bold\n */\nconst Bold = core.Mark.create({\n    name: 'bold',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'strong',\n            },\n            {\n                tag: 'b',\n                getAttrs: node => node.style.fontWeight !== 'normal' && null,\n            },\n            {\n                style: 'font-weight=400',\n                clearMark: mark => mark.type.name === this.name,\n            },\n            {\n                style: 'font-weight',\n                getAttrs: value => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['strong', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setBold: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleBold: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetBold: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-b': () => this.editor.commands.toggleBold(),\n            'Mod-B': () => this.editor.commands.toggleBold(),\n        };\n    },\n    addInputRules() {\n        return [\n            core.markInputRule({\n                find: starInputRegex,\n                type: this.type,\n            }),\n            core.markInputRule({\n                find: underscoreInputRegex,\n                type: this.type,\n            }),\n        ];\n    },\n    addPasteRules() {\n        return [\n            core.markPasteRule({\n                find: starPasteRegex,\n                type: this.type,\n            }),\n            core.markPasteRule({\n                find: underscorePasteRegex,\n                type: this.type,\n            }),\n        ];\n    },\n});\n\nexports.Bold = Bold;\nexports.default = Bold;\nexports.starInputRegex = starInputRegex;\nexports.starPasteRegex = starPasteRegex;\nexports.underscoreInputRegex = underscoreInputRegex;\nexports.underscorePasteRegex = underscorePasteRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\nconst ListItemName = 'listItem';\nconst TextStyleName = 'textStyle';\n/**\n * Matches a bullet list to a dash or asterisk.\n */\nconst inputRegex = /^\\s*([-+*])\\s$/;\n/**\n * This extension allows you to create bullet lists.\n * This requires the ListItem extension\n * @see https://tiptap.dev/api/nodes/bullet-list\n * @see https://tiptap.dev/api/nodes/list-item.\n */\nconst BulletList = core.Node.create({\n    name: 'bulletList',\n    addOptions() {\n        return {\n            itemTypeName: 'listItem',\n            HTMLAttributes: {},\n            keepMarks: false,\n            keepAttributes: false,\n        };\n    },\n    group: 'block list',\n    content() {\n        return `${this.options.itemTypeName}+`;\n    },\n    parseHTML() {\n        return [\n            { tag: 'ul' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['ul', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            toggleBulletList: () => ({ commands, chain }) => {\n                if (this.options.keepAttributes) {\n                    return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName, this.editor.getAttributes(TextStyleName)).run();\n                }\n                return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Shift-8': () => this.editor.commands.toggleBulletList(),\n        };\n    },\n    addInputRules() {\n        let inputRule = core.wrappingInputRule({\n            find: inputRegex,\n            type: this.type,\n        });\n        if (this.options.keepMarks || this.options.keepAttributes) {\n            inputRule = core.wrappingInputRule({\n                find: inputRegex,\n                type: this.type,\n                keepMarks: this.options.keepMarks,\n                keepAttributes: this.options.keepAttributes,\n                getAttributes: () => { return this.editor.getAttributes(TextStyleName); },\n                editor: this.editor,\n            });\n        }\n        return [\n            inputRule,\n        ];\n    },\n});\n\nexports.BulletList = BulletList;\nexports.default = BulletList;\nexports.inputRegex = inputRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar state = require('@tiptap/pm/state');\n\n/**\n * Matches a code block with backticks.\n */\nconst backtickInputRegex = /^```([a-z]+)?[\\s\\n]$/;\n/**\n * Matches a code block with tildes.\n */\nconst tildeInputRegex = /^~~~([a-z]+)?[\\s\\n]$/;\n/**\n * This extension allows you to create code blocks.\n * @see https://tiptap.dev/api/nodes/code-block\n */\nconst CodeBlock = core.Node.create({\n    name: 'codeBlock',\n    addOptions() {\n        return {\n            languageClassPrefix: 'language-',\n            exitOnTripleEnter: true,\n            exitOnArrowDown: true,\n            defaultLanguage: null,\n            HTMLAttributes: {},\n        };\n    },\n    content: 'text*',\n    marks: '',\n    group: 'block',\n    code: true,\n    defining: true,\n    addAttributes() {\n        return {\n            language: {\n                default: this.options.defaultLanguage,\n                parseHTML: element => {\n                    var _a;\n                    const { languageClassPrefix } = this.options;\n                    const classNames = [...(((_a = element.firstElementChild) === null || _a === void 0 ? void 0 : _a.classList) || [])];\n                    const languages = classNames\n                        .filter(className => className.startsWith(languageClassPrefix))\n                        .map(className => className.replace(languageClassPrefix, ''));\n                    const language = languages[0];\n                    if (!language) {\n                        return null;\n                    }\n                    return language;\n                },\n                rendered: false,\n            },\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'pre',\n                preserveWhitespace: 'full',\n            },\n        ];\n    },\n    renderHTML({ node, HTMLAttributes }) {\n        return [\n            'pre',\n            core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n            [\n                'code',\n                {\n                    class: node.attrs.language\n                        ? this.options.languageClassPrefix + node.attrs.language\n                        : null,\n                },\n                0,\n            ],\n        ];\n    },\n    addCommands() {\n        return {\n            setCodeBlock: attributes => ({ commands }) => {\n                return commands.setNode(this.name, attributes);\n            },\n            toggleCodeBlock: attributes => ({ commands }) => {\n                return commands.toggleNode(this.name, 'paragraph', attributes);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Alt-c': () => this.editor.commands.toggleCodeBlock(),\n            // remove code block when at start of document or code block is empty\n            Backspace: () => {\n                const { empty, $anchor } = this.editor.state.selection;\n                const isAtStart = $anchor.pos === 1;\n                if (!empty || $anchor.parent.type.name !== this.name) {\n                    return false;\n                }\n                if (isAtStart || !$anchor.parent.textContent.length) {\n                    return this.editor.commands.clearNodes();\n                }\n                return false;\n            },\n            // exit node on triple enter\n            Enter: ({ editor }) => {\n                if (!this.options.exitOnTripleEnter) {\n                    return false;\n                }\n                const { state } = editor;\n                const { selection } = state;\n                const { $from, empty } = selection;\n                if (!empty || $from.parent.type !== this.type) {\n                    return false;\n                }\n                const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n                const endsWithDoubleNewline = $from.parent.textContent.endsWith('\\n\\n');\n                if (!isAtEnd || !endsWithDoubleNewline) {\n                    return false;\n                }\n                return editor\n                    .chain()\n                    .command(({ tr }) => {\n                    tr.delete($from.pos - 2, $from.pos);\n                    return true;\n                })\n                    .exitCode()\n                    .run();\n            },\n            // exit node on arrow down\n            ArrowDown: ({ editor }) => {\n                if (!this.options.exitOnArrowDown) {\n                    return false;\n                }\n                const { state: state$1 } = editor;\n                const { selection, doc } = state$1;\n                const { $from, empty } = selection;\n                if (!empty || $from.parent.type !== this.type) {\n                    return false;\n                }\n                const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n                if (!isAtEnd) {\n                    return false;\n                }\n                const after = $from.after();\n                if (after === undefined) {\n                    return false;\n                }\n                const nodeAfter = doc.nodeAt(after);\n                if (nodeAfter) {\n                    return editor.commands.command(({ tr }) => {\n                        tr.setSelection(state.Selection.near(doc.resolve(after)));\n                        return true;\n                    });\n                }\n                return editor.commands.exitCode();\n            },\n        };\n    },\n    addInputRules() {\n        return [\n            core.textblockTypeInputRule({\n                find: backtickInputRegex,\n                type: this.type,\n                getAttributes: match => ({\n                    language: match[1],\n                }),\n            }),\n            core.textblockTypeInputRule({\n                find: tildeInputRegex,\n                type: this.type,\n                getAttributes: match => ({\n                    language: match[1],\n                }),\n            }),\n        ];\n    },\n    addProseMirrorPlugins() {\n        return [\n            // this plugin creates a code block for pasted content from VS Code\n            // we can also detect the copied code language\n            new state.Plugin({\n                key: new state.PluginKey('codeBlockVSCodeHandler'),\n                props: {\n                    handlePaste: (view, event) => {\n                        if (!event.clipboardData) {\n                            return false;\n                        }\n                        // don’t create a new code block within code blocks\n                        if (this.editor.isActive(this.type.name)) {\n                            return false;\n                        }\n                        const text = event.clipboardData.getData('text/plain');\n                        const vscode = event.clipboardData.getData('vscode-editor-data');\n                        const vscodeData = vscode ? JSON.parse(vscode) : undefined;\n                        const language = vscodeData === null || vscodeData === void 0 ? void 0 : vscodeData.mode;\n                        if (!text || !language) {\n                            return false;\n                        }\n                        const { tr, schema } = view.state;\n                        // prepare a text node\n                        // strip carriage return chars from text pasted as code\n                        // see: https://github.com/ProseMirror/prosemirror-view/commit/a50a6bcceb4ce52ac8fcc6162488d8875613aacd\n                        const textNode = schema.text(text.replace(/\\r\\n?/g, '\\n'));\n                        // create a code block with the text node\n                        // replace selection with the code block\n                        tr.replaceSelectionWith(this.type.create({ language }, textNode));\n                        if (tr.selection.$from.parent.type !== this.type) {\n                            // put cursor inside the newly created code block\n                            tr.setSelection(state.TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2))));\n                        }\n                        // store meta information\n                        // this is useful for other plugins that depends on the paste event\n                        // like the paste rule plugin\n                        tr.setMeta('paste', true);\n                        view.dispatch(tr);\n                        return true;\n                    },\n                },\n            }),\n        ];\n    },\n});\n\nexports.CodeBlock = CodeBlock;\nexports.backtickInputRegex = backtickInputRegex;\nexports.default = CodeBlock;\nexports.tildeInputRegex = tildeInputRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * Regular expressions to match inline code blocks enclosed in backticks.\n *  It matches:\n *     - An opening backtick, followed by\n *     - Any text that doesn't include a backtick (captured for marking), followed by\n *     - A closing backtick.\n *  This ensures that any text between backticks is formatted as code,\n *  regardless of the surrounding characters (exception being another backtick).\n */\nconst inputRegex = /(^|[^`])`([^`]+)`(?!`)/;\n/**\n * Matches inline code while pasting.\n */\nconst pasteRegex = /(^|[^`])`([^`]+)`(?!`)/g;\n/**\n * This extension allows you to mark text as inline code.\n * @see https://tiptap.dev/api/marks/code\n */\nconst Code = core.Mark.create({\n    name: 'code',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    excludes: '_',\n    code: true,\n    exitable: true,\n    parseHTML() {\n        return [\n            { tag: 'code' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['code', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setCode: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleCode: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetCode: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-e': () => this.editor.commands.toggleCode(),\n        };\n    },\n    addInputRules() {\n        return [\n            core.markInputRule({\n                find: inputRegex,\n                type: this.type,\n            }),\n        ];\n    },\n    addPasteRules() {\n        return [\n            core.markPasteRule({\n                find: pasteRegex,\n                type: this.type,\n            }),\n        ];\n    },\n});\n\nexports.Code = Code;\nexports.default = Code;\nexports.inputRegex = inputRegex;\nexports.pasteRegex = pasteRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nrequire('@tiptap/extension-text-style');\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to color your text.\n * @see https://tiptap.dev/api/extensions/color\n */\nconst Color = core.Extension.create({\n    name: 'color',\n    addOptions() {\n        return {\n            types: ['textStyle'],\n        };\n    },\n    addGlobalAttributes() {\n        return [\n            {\n                types: this.options.types,\n                attributes: {\n                    color: {\n                        default: null,\n                        parseHTML: element => { var _a; return (_a = element.style.color) === null || _a === void 0 ? void 0 : _a.replace(/['\"]+/g, ''); },\n                        renderHTML: attributes => {\n                            if (!attributes.color) {\n                                return {};\n                            }\n                            return {\n                                style: `color: ${attributes.color}`,\n                            };\n                        },\n                    },\n                },\n            },\n        ];\n    },\n    addCommands() {\n        return {\n            setColor: color => ({ chain }) => {\n                return chain()\n                    .setMark('textStyle', { color })\n                    .run();\n            },\n            unsetColor: () => ({ chain }) => {\n                return chain()\n                    .setMark('textStyle', { color: null })\n                    .removeEmptyTextStyle()\n                    .run();\n            },\n        };\n    },\n});\n\nexports.Color = Color;\nexports.default = Color;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * The default document node which represents the top level node of the editor.\n * @see https://tiptap.dev/api/nodes/document\n */\nconst Document = core.Node.create({\n    name: 'doc',\n    topNode: true,\n    content: 'block+',\n});\n\nexports.Document = Document;\nexports.default = Document;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar dropcursor = require('@tiptap/pm/dropcursor');\n\n/**\n * This extension allows you to add a drop cursor to your editor.\n * A drop cursor is a line that appears when you drag and drop content\n * inbetween nodes.\n * @see https://tiptap.dev/api/extensions/dropcursor\n */\nconst Dropcursor = core.Extension.create({\n    name: 'dropCursor',\n    addOptions() {\n        return {\n            color: 'currentColor',\n            width: 1,\n            class: undefined,\n        };\n    },\n    addProseMirrorPlugins() {\n        return [\n            dropcursor.dropCursor(this.options),\n        ];\n    },\n});\n\nexports.Dropcursor = Dropcursor;\nexports.default = Dropcursor;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nrequire('@tiptap/extension-text-style');\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to set a font family for text.\n * @see https://www.tiptap.dev/api/extensions/font-family\n */\nconst FontFamily = core.Extension.create({\n    name: 'fontFamily',\n    addOptions() {\n        return {\n            types: ['textStyle'],\n        };\n    },\n    addGlobalAttributes() {\n        return [\n            {\n                types: this.options.types,\n                attributes: {\n                    fontFamily: {\n                        default: null,\n                        parseHTML: element => element.style.fontFamily,\n                        renderHTML: attributes => {\n                            if (!attributes.fontFamily) {\n                                return {};\n                            }\n                            return {\n                                style: `font-family: ${attributes.fontFamily}`,\n                            };\n                        },\n                    },\n                },\n            },\n        ];\n    },\n    addCommands() {\n        return {\n            setFontFamily: fontFamily => ({ chain }) => {\n                return chain()\n                    .setMark('textStyle', { fontFamily })\n                    .run();\n            },\n            unsetFontFamily: () => ({ chain }) => {\n                return chain()\n                    .setMark('textStyle', { fontFamily: null })\n                    .removeEmptyTextStyle()\n                    .run();\n            },\n        };\n    },\n});\n\nexports.FontFamily = FontFamily;\nexports.default = FontFamily;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar gapcursor = require('@tiptap/pm/gapcursor');\n\n/**\n * This extension allows you to add a gap cursor to your editor.\n * A gap cursor is a cursor that appears when you click on a place\n * where no content is present, for example inbetween nodes.\n * @see https://tiptap.dev/api/extensions/gapcursor\n */\nconst Gapcursor = core.Extension.create({\n    name: 'gapCursor',\n    addProseMirrorPlugins() {\n        return [\n            gapcursor.gapCursor(),\n        ];\n    },\n    extendNodeSchema(extension) {\n        var _a;\n        const context = {\n            name: extension.name,\n            options: extension.options,\n            storage: extension.storage,\n        };\n        return {\n            allowGapCursor: (_a = core.callOrReturn(core.getExtensionField(extension, 'allowGapCursor', context))) !== null && _a !== void 0 ? _a : null,\n        };\n    },\n});\n\nexports.Gapcursor = Gapcursor;\nexports.default = Gapcursor;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to insert hard breaks.\n * @see https://www.tiptap.dev/api/nodes/hard-break\n */\nconst HardBreak = core.Node.create({\n    name: 'hardBreak',\n    addOptions() {\n        return {\n            keepMarks: true,\n            HTMLAttributes: {},\n        };\n    },\n    inline: true,\n    group: 'inline',\n    selectable: false,\n    linebreakReplacement: true,\n    parseHTML() {\n        return [\n            { tag: 'br' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['br', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n    },\n    renderText() {\n        return '\\n';\n    },\n    addCommands() {\n        return {\n            setHardBreak: () => ({ commands, chain, state, editor, }) => {\n                return commands.first([\n                    () => commands.exitCode(),\n                    () => commands.command(() => {\n                        const { selection, storedMarks } = state;\n                        if (selection.$from.parent.type.spec.isolating) {\n                            return false;\n                        }\n                        const { keepMarks } = this.options;\n                        const { splittableMarks } = editor.extensionManager;\n                        const marks = storedMarks\n                            || (selection.$to.parentOffset && selection.$from.marks());\n                        return chain()\n                            .insertContent({ type: this.name })\n                            .command(({ tr, dispatch }) => {\n                            if (dispatch && marks && keepMarks) {\n                                const filteredMarks = marks\n                                    .filter(mark => splittableMarks.includes(mark.type.name));\n                                tr.ensureMarks(filteredMarks);\n                            }\n                            return true;\n                        })\n                            .run();\n                    }),\n                ]);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Enter': () => this.editor.commands.setHardBreak(),\n            'Shift-Enter': () => this.editor.commands.setHardBreak(),\n        };\n    },\n});\n\nexports.HardBreak = HardBreak;\nexports.default = HardBreak;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create headings.\n * @see https://www.tiptap.dev/api/nodes/heading\n */\nconst Heading = core.Node.create({\n    name: 'heading',\n    addOptions() {\n        return {\n            levels: [1, 2, 3, 4, 5, 6],\n            HTMLAttributes: {},\n        };\n    },\n    content: 'inline*',\n    group: 'block',\n    defining: true,\n    addAttributes() {\n        return {\n            level: {\n                default: 1,\n                rendered: false,\n            },\n        };\n    },\n    parseHTML() {\n        return this.options.levels\n            .map((level) => ({\n            tag: `h${level}`,\n            attrs: { level },\n        }));\n    },\n    renderHTML({ node, HTMLAttributes }) {\n        const hasLevel = this.options.levels.includes(node.attrs.level);\n        const level = hasLevel\n            ? node.attrs.level\n            : this.options.levels[0];\n        return [`h${level}`, core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setHeading: attributes => ({ commands }) => {\n                if (!this.options.levels.includes(attributes.level)) {\n                    return false;\n                }\n                return commands.setNode(this.name, attributes);\n            },\n            toggleHeading: attributes => ({ commands }) => {\n                if (!this.options.levels.includes(attributes.level)) {\n                    return false;\n                }\n                return commands.toggleNode(this.name, 'paragraph', attributes);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return this.options.levels.reduce((items, level) => ({\n            ...items,\n            ...{\n                [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level }),\n            },\n        }), {});\n    },\n    addInputRules() {\n        return this.options.levels.map(level => {\n            return core.textblockTypeInputRule({\n                find: new RegExp(`^(#{${Math.min(...this.options.levels)},${level}})\\\\s$`),\n                type: this.type,\n                getAttributes: {\n                    level,\n                },\n            });\n        });\n    },\n});\n\nexports.Heading = Heading;\nexports.default = Heading;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar history = require('@tiptap/pm/history');\n\n/**\n * This extension allows you to undo and redo recent changes.\n * @see https://www.tiptap.dev/api/extensions/history\n *\n * **Important**: If the `@tiptap/extension-collaboration` package is used, make sure to remove\n * the `history` extension, as it is not compatible with the `collaboration` extension.\n *\n * `@tiptap/extension-collaboration` uses its own history implementation.\n */\nconst History = core.Extension.create({\n    name: 'history',\n    addOptions() {\n        return {\n            depth: 100,\n            newGroupDelay: 500,\n        };\n    },\n    addCommands() {\n        return {\n            undo: () => ({ state, dispatch }) => {\n                return history.undo(state, dispatch);\n            },\n            redo: () => ({ state, dispatch }) => {\n                return history.redo(state, dispatch);\n            },\n        };\n    },\n    addProseMirrorPlugins() {\n        return [\n            history.history(this.options),\n        ];\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-z': () => this.editor.commands.undo(),\n            'Shift-Mod-z': () => this.editor.commands.redo(),\n            'Mod-y': () => this.editor.commands.redo(),\n            // Russian keyboard layouts\n            'Mod-я': () => this.editor.commands.undo(),\n            'Shift-Mod-я': () => this.editor.commands.redo(),\n        };\n    },\n});\n\nexports.History = History;\nexports.default = History;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar state = require('@tiptap/pm/state');\n\n/**\n * This extension allows you to insert horizontal rules.\n * @see https://www.tiptap.dev/api/nodes/horizontal-rule\n */\nconst HorizontalRule = core.Node.create({\n    name: 'horizontalRule',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    group: 'block',\n    parseHTML() {\n        return [{ tag: 'hr' }];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['hr', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n    },\n    addCommands() {\n        return {\n            setHorizontalRule: () => ({ chain, state: state$1 }) => {\n                // Check if we can insert the node at the current selection\n                if (!core.canInsertNode(state$1, state$1.schema.nodes[this.name])) {\n                    return false;\n                }\n                const { selection } = state$1;\n                const { $from: $originFrom, $to: $originTo } = selection;\n                const currentChain = chain();\n                if ($originFrom.parentOffset === 0) {\n                    currentChain.insertContentAt({\n                        from: Math.max($originFrom.pos - 1, 0),\n                        to: $originTo.pos,\n                    }, {\n                        type: this.name,\n                    });\n                }\n                else if (core.isNodeSelection(selection)) {\n                    currentChain.insertContentAt($originTo.pos, {\n                        type: this.name,\n                    });\n                }\n                else {\n                    currentChain.insertContent({ type: this.name });\n                }\n                return (currentChain\n                    // set cursor after horizontal rule\n                    .command(({ tr, dispatch }) => {\n                    var _a;\n                    if (dispatch) {\n                        const { $to } = tr.selection;\n                        const posAfter = $to.end();\n                        if ($to.nodeAfter) {\n                            if ($to.nodeAfter.isTextblock) {\n                                tr.setSelection(state.TextSelection.create(tr.doc, $to.pos + 1));\n                            }\n                            else if ($to.nodeAfter.isBlock) {\n                                tr.setSelection(state.NodeSelection.create(tr.doc, $to.pos));\n                            }\n                            else {\n                                tr.setSelection(state.TextSelection.create(tr.doc, $to.pos));\n                            }\n                        }\n                        else {\n                            // add node after horizontal rule if it’s the end of the document\n                            const node = (_a = $to.parent.type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.create();\n                            if (node) {\n                                tr.insert(posAfter, node);\n                                tr.setSelection(state.TextSelection.create(tr.doc, posAfter + 1));\n                            }\n                        }\n                        tr.scrollIntoView();\n                    }\n                    return true;\n                })\n                    .run());\n            },\n        };\n    },\n    addInputRules() {\n        return [\n            core.nodeInputRule({\n                find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n                type: this.type,\n            }),\n        ];\n    },\n});\n\nexports.HorizontalRule = HorizontalRule;\nexports.default = HorizontalRule;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * Matches an image to a ![image](src \"title\") on input.\n */\nconst inputRegex = /(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/;\n/**\n * This extension allows you to insert images.\n * @see https://www.tiptap.dev/api/nodes/image\n */\nconst Image = core.Node.create({\n    name: 'image',\n    addOptions() {\n        return {\n            inline: false,\n            allowBase64: false,\n            HTMLAttributes: {},\n        };\n    },\n    inline() {\n        return this.options.inline;\n    },\n    group() {\n        return this.options.inline ? 'inline' : 'block';\n    },\n    draggable: true,\n    addAttributes() {\n        return {\n            src: {\n                default: null,\n            },\n            alt: {\n                default: null,\n            },\n            title: {\n                default: null,\n            },\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: this.options.allowBase64\n                    ? 'img[src]'\n                    : 'img[src]:not([src^=\"data:\"])',\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['img', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n    },\n    addCommands() {\n        return {\n            setImage: options => ({ commands }) => {\n                return commands.insertContent({\n                    type: this.name,\n                    attrs: options,\n                });\n            },\n        };\n    },\n    addInputRules() {\n        return [\n            core.nodeInputRule({\n                find: inputRegex,\n                type: this.type,\n                getAttributes: match => {\n                    const [, , alt, src, title] = match;\n                    return { src, alt, title };\n                },\n            }),\n        ];\n    },\n});\n\nexports.Image = Image;\nexports.default = Image;\nexports.inputRegex = inputRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * Matches an italic to a *italic* on input.\n */\nconst starInputRegex = /(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))$/;\n/**\n * Matches an italic to a *italic* on paste.\n */\nconst starPasteRegex = /(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))/g;\n/**\n * Matches an italic to a _italic_ on input.\n */\nconst underscoreInputRegex = /(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))$/;\n/**\n * Matches an italic to a _italic_ on paste.\n */\nconst underscorePasteRegex = /(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))/g;\n/**\n * This extension allows you to create italic text.\n * @see https://www.tiptap.dev/api/marks/italic\n */\nconst Italic = core.Mark.create({\n    name: 'italic',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'em',\n            },\n            {\n                tag: 'i',\n                getAttrs: node => node.style.fontStyle !== 'normal' && null,\n            },\n            {\n                style: 'font-style=normal',\n                clearMark: mark => mark.type.name === this.name,\n            },\n            {\n                style: 'font-style=italic',\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['em', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setItalic: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleItalic: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetItalic: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-i': () => this.editor.commands.toggleItalic(),\n            'Mod-I': () => this.editor.commands.toggleItalic(),\n        };\n    },\n    addInputRules() {\n        return [\n            core.markInputRule({\n                find: starInputRegex,\n                type: this.type,\n            }),\n            core.markInputRule({\n                find: underscoreInputRegex,\n                type: this.type,\n            }),\n        ];\n    },\n    addPasteRules() {\n        return [\n            core.markPasteRule({\n                find: starPasteRegex,\n                type: this.type,\n            }),\n            core.markPasteRule({\n                find: underscorePasteRegex,\n                type: this.type,\n            }),\n        ];\n    },\n});\n\nexports.Italic = Italic;\nexports.default = Italic;\nexports.starInputRegex = starInputRegex;\nexports.starPasteRegex = starPasteRegex;\nexports.underscoreInputRegex = underscoreInputRegex;\nexports.underscorePasteRegex = underscorePasteRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create list items.\n * @see https://www.tiptap.dev/api/nodes/list-item\n */\nconst ListItem = core.Node.create({\n    name: 'listItem',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n            bulletListTypeName: 'bulletList',\n            orderedListTypeName: 'orderedList',\n        };\n    },\n    content: 'paragraph block*',\n    defining: true,\n    parseHTML() {\n        return [\n            {\n                tag: 'li',\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['li', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addKeyboardShortcuts() {\n        return {\n            Enter: () => this.editor.commands.splitListItem(this.name),\n            Tab: () => this.editor.commands.sinkListItem(this.name),\n            'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n        };\n    },\n});\n\nexports.ListItem = ListItem;\nexports.default = ListItem;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\nconst ListItemName = 'listItem';\nconst TextStyleName = 'textStyle';\n/**\n * Matches an ordered list to a 1. on input (or any number followed by a dot).\n */\nconst inputRegex = /^(\\d+)\\.\\s$/;\n/**\n * This extension allows you to create ordered lists.\n * This requires the ListItem extension\n * @see https://www.tiptap.dev/api/nodes/ordered-list\n * @see https://www.tiptap.dev/api/nodes/list-item\n */\nconst OrderedList = core.Node.create({\n    name: 'orderedList',\n    addOptions() {\n        return {\n            itemTypeName: 'listItem',\n            HTMLAttributes: {},\n            keepMarks: false,\n            keepAttributes: false,\n        };\n    },\n    group: 'block list',\n    content() {\n        return `${this.options.itemTypeName}+`;\n    },\n    addAttributes() {\n        return {\n            start: {\n                default: 1,\n                parseHTML: element => {\n                    return element.hasAttribute('start')\n                        ? parseInt(element.getAttribute('start') || '', 10)\n                        : 1;\n                },\n            },\n            type: {\n                default: null,\n                parseHTML: element => element.getAttribute('type'),\n            },\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'ol',\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        const { start, ...attributesWithoutStart } = HTMLAttributes;\n        return start === 1\n            ? ['ol', core.mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n            : ['ol', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            toggleOrderedList: () => ({ commands, chain }) => {\n                if (this.options.keepAttributes) {\n                    return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName, this.editor.getAttributes(TextStyleName)).run();\n                }\n                return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n        };\n    },\n    addInputRules() {\n        let inputRule = core.wrappingInputRule({\n            find: inputRegex,\n            type: this.type,\n            getAttributes: match => ({ start: +match[1] }),\n            joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n        });\n        if (this.options.keepMarks || this.options.keepAttributes) {\n            inputRule = core.wrappingInputRule({\n                find: inputRegex,\n                type: this.type,\n                keepMarks: this.options.keepMarks,\n                keepAttributes: this.options.keepAttributes,\n                getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyleName) }),\n                joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n                editor: this.editor,\n            });\n        }\n        return [\n            inputRule,\n        ];\n    },\n});\n\nexports.OrderedList = OrderedList;\nexports.default = OrderedList;\nexports.inputRegex = inputRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create paragraphs.\n * @see https://www.tiptap.dev/api/nodes/paragraph\n */\nconst Paragraph = core.Node.create({\n    name: 'paragraph',\n    priority: 1000,\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    group: 'block',\n    content: 'inline*',\n    parseHTML() {\n        return [\n            { tag: 'p' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['p', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setParagraph: () => ({ commands }) => {\n                return commands.setNode(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Alt-0': () => this.editor.commands.setParagraph(),\n        };\n    },\n});\n\nexports.Paragraph = Paragraph;\nexports.default = Paragraph;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar state = require('@tiptap/pm/state');\nvar view = require('@tiptap/pm/view');\n\n/**\n * This extension allows you to add a placeholder to your editor.\n * A placeholder is a text that appears when the editor or a node is empty.\n * @see https://www.tiptap.dev/api/extensions/placeholder\n */\nconst Placeholder = core.Extension.create({\n    name: 'placeholder',\n    addOptions() {\n        return {\n            emptyEditorClass: 'is-editor-empty',\n            emptyNodeClass: 'is-empty',\n            placeholder: 'Write something …',\n            showOnlyWhenEditable: true,\n            showOnlyCurrent: true,\n            includeChildren: false,\n        };\n    },\n    addProseMirrorPlugins() {\n        return [\n            new state.Plugin({\n                key: new state.PluginKey('placeholder'),\n                props: {\n                    decorations: ({ doc, selection }) => {\n                        const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;\n                        const { anchor } = selection;\n                        const decorations = [];\n                        if (!active) {\n                            return null;\n                        }\n                        const isEmptyDoc = this.editor.isEmpty;\n                        doc.descendants((node, pos) => {\n                            const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n                            const isEmpty = !node.isLeaf && core.isNodeEmpty(node);\n                            if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {\n                                const classes = [this.options.emptyNodeClass];\n                                if (isEmptyDoc) {\n                                    classes.push(this.options.emptyEditorClass);\n                                }\n                                const decoration = view.Decoration.node(pos, pos + node.nodeSize, {\n                                    class: classes.join(' '),\n                                    'data-placeholder': typeof this.options.placeholder === 'function'\n                                        ? this.options.placeholder({\n                                            editor: this.editor,\n                                            node,\n                                            pos,\n                                            hasAnchor,\n                                        })\n                                        : this.options.placeholder,\n                                });\n                                decorations.push(decoration);\n                            }\n                            return this.options.includeChildren;\n                        });\n                        return view.DecorationSet.create(doc, decorations);\n                    },\n                },\n            }),\n        ];\n    },\n});\n\nexports.Placeholder = Placeholder;\nexports.default = Placeholder;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * Matches a strike to a ~~strike~~ on input.\n */\nconst inputRegex = /(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))$/;\n/**\n * Matches a strike to a ~~strike~~ on paste.\n */\nconst pasteRegex = /(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))/g;\n/**\n * This extension allows you to create strike text.\n * @see https://www.tiptap.dev/api/marks/strike\n */\nconst Strike = core.Mark.create({\n    name: 'strike',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 's',\n            },\n            {\n                tag: 'del',\n            },\n            {\n                tag: 'strike',\n            },\n            {\n                style: 'text-decoration',\n                consuming: false,\n                getAttrs: style => (style.includes('line-through') ? {} : false),\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['s', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setStrike: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleStrike: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetStrike: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Shift-s': () => this.editor.commands.toggleStrike(),\n        };\n    },\n    addInputRules() {\n        return [\n            core.markInputRule({\n                find: inputRegex,\n                type: this.type,\n            }),\n        ];\n    },\n    addPasteRules() {\n        return [\n            core.markPasteRule({\n                find: pasteRegex,\n                type: this.type,\n            }),\n        ];\n    },\n});\n\nexports.Strike = Strike;\nexports.default = Strike;\nexports.inputRegex = inputRegex;\nexports.pasteRegex = pasteRegex;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create subscript text.\n * @see https://www.tiptap.dev/api/marks/subscript\n */\nconst Subscript = core.Mark.create({\n    name: 'subscript',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'sub',\n            },\n            {\n                style: 'vertical-align',\n                getAttrs(value) {\n                    // Don’t match this rule if the vertical align isn’t sub.\n                    if (value !== 'sub') {\n                        return false;\n                    }\n                    // If it falls through we’ll match, and this mark will be applied.\n                    return null;\n                },\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['sub', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setSubscript: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleSubscript: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetSubscript: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-,': () => this.editor.commands.toggleSubscript(),\n        };\n    },\n});\n\nexports.Subscript = Subscript;\nexports.default = Subscript;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create superscript text.\n * @see https://www.tiptap.dev/api/marks/superscript\n */\nconst Superscript = core.Mark.create({\n    name: 'superscript',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'sup',\n            },\n            {\n                style: 'vertical-align',\n                getAttrs(value) {\n                    // Don’t match this rule if the vertical align isn’t super.\n                    if (value !== 'super') {\n                        return false;\n                    }\n                    // If it falls through we’ll match, and this mark will be applied.\n                    return null;\n                },\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['sup', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setSuperscript: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleSuperscript: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetSuperscript: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-.': () => this.editor.commands.toggleSuperscript(),\n        };\n    },\n});\n\nexports.Superscript = Superscript;\nexports.default = Superscript;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create table cells.\n * @see https://www.tiptap.dev/api/nodes/table-cell\n */\nconst TableCell = core.Node.create({\n    name: 'tableCell',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    content: 'block+',\n    addAttributes() {\n        return {\n            colspan: {\n                default: 1,\n            },\n            rowspan: {\n                default: 1,\n            },\n            colwidth: {\n                default: null,\n                parseHTML: element => {\n                    const colwidth = element.getAttribute('colwidth');\n                    const value = colwidth\n                        ? colwidth.split(',').map(width => parseInt(width, 10))\n                        : null;\n                    return value;\n                },\n            },\n        };\n    },\n    tableRole: 'cell',\n    isolating: true,\n    parseHTML() {\n        return [\n            { tag: 'td' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['td', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n});\n\nexports.TableCell = TableCell;\nexports.default = TableCell;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create table headers.\n * @see https://www.tiptap.dev/api/nodes/table-header\n */\nconst TableHeader = core.Node.create({\n    name: 'tableHeader',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    content: 'block+',\n    addAttributes() {\n        return {\n            colspan: {\n                default: 1,\n            },\n            rowspan: {\n                default: 1,\n            },\n            colwidth: {\n                default: null,\n                parseHTML: element => {\n                    const colwidth = element.getAttribute('colwidth');\n                    const value = colwidth\n                        ? colwidth.split(',').map(width => parseInt(width, 10))\n                        : null;\n                    return value;\n                },\n            },\n        };\n    },\n    tableRole: 'header_cell',\n    isolating: true,\n    parseHTML() {\n        return [\n            { tag: 'th' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['th', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n});\n\nexports.TableHeader = TableHeader;\nexports.default = TableHeader;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create table rows.\n * @see https://www.tiptap.dev/api/nodes/table-row\n */\nconst TableRow = core.Node.create({\n    name: 'tableRow',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    content: '(tableCell | tableHeader)*',\n    tableRole: 'row',\n    parseHTML() {\n        return [\n            { tag: 'tr' },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['tr', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n});\n\nexports.TableRow = TableRow;\nexports.default = TableRow;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar state = require('@tiptap/pm/state');\nvar tables = require('@tiptap/pm/tables');\n\nfunction getColStyleDeclaration(minWidth, width) {\n    if (width) {\n        // apply the stored width unless it is below the configured minimum cell width\n        return ['width', `${Math.max(width, minWidth)}px`];\n    }\n    // set the minimum with on the column if it has no stored width\n    return ['min-width', `${minWidth}px`];\n}\n\nfunction updateColumns(node, colgroup, // <colgroup> has the same prototype as <col>\ntable, cellMinWidth, overrideCol, overrideValue) {\n    var _a;\n    let totalWidth = 0;\n    let fixedWidth = true;\n    let nextDOM = colgroup.firstChild;\n    const row = node.firstChild;\n    if (row !== null) {\n        for (let i = 0, col = 0; i < row.childCount; i += 1) {\n            const { colspan, colwidth } = row.child(i).attrs;\n            for (let j = 0; j < colspan; j += 1, col += 1) {\n                const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]);\n                const cssWidth = hasWidth ? `${hasWidth}px` : '';\n                totalWidth += hasWidth || cellMinWidth;\n                if (!hasWidth) {\n                    fixedWidth = false;\n                }\n                if (!nextDOM) {\n                    const colElement = document.createElement('col');\n                    const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n                    colElement.style.setProperty(propertyKey, propertyValue);\n                    colgroup.appendChild(colElement);\n                }\n                else {\n                    if (nextDOM.style.width !== cssWidth) {\n                        const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n                        nextDOM.style.setProperty(propertyKey, propertyValue);\n                    }\n                    nextDOM = nextDOM.nextSibling;\n                }\n            }\n        }\n    }\n    while (nextDOM) {\n        const after = nextDOM.nextSibling;\n        (_a = nextDOM.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(nextDOM);\n        nextDOM = after;\n    }\n    if (fixedWidth) {\n        table.style.width = `${totalWidth}px`;\n        table.style.minWidth = '';\n    }\n    else {\n        table.style.width = '';\n        table.style.minWidth = `${totalWidth}px`;\n    }\n}\nclass TableView {\n    constructor(node, cellMinWidth) {\n        this.node = node;\n        this.cellMinWidth = cellMinWidth;\n        this.dom = document.createElement('div');\n        this.dom.className = 'tableWrapper';\n        this.table = this.dom.appendChild(document.createElement('table'));\n        this.colgroup = this.table.appendChild(document.createElement('colgroup'));\n        updateColumns(node, this.colgroup, this.table, cellMinWidth);\n        this.contentDOM = this.table.appendChild(document.createElement('tbody'));\n    }\n    update(node) {\n        if (node.type !== this.node.type) {\n            return false;\n        }\n        this.node = node;\n        updateColumns(node, this.colgroup, this.table, this.cellMinWidth);\n        return true;\n    }\n    ignoreMutation(mutation) {\n        return (mutation.type === 'attributes'\n            && (mutation.target === this.table || this.colgroup.contains(mutation.target)));\n    }\n}\n\nfunction createColGroup(node, cellMinWidth, overrideCol, overrideValue) {\n    let totalWidth = 0;\n    let fixedWidth = true;\n    const cols = [];\n    const row = node.firstChild;\n    if (!row) {\n        return {};\n    }\n    for (let i = 0, col = 0; i < row.childCount; i += 1) {\n        const { colspan, colwidth } = row.child(i).attrs;\n        for (let j = 0; j < colspan; j += 1, col += 1) {\n            const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];\n            totalWidth += hasWidth || cellMinWidth;\n            if (!hasWidth) {\n                fixedWidth = false;\n            }\n            const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth);\n            cols.push([\n                'col',\n                { style: `${property}: ${value}` },\n            ]);\n        }\n    }\n    const tableWidth = fixedWidth ? `${totalWidth}px` : '';\n    const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`;\n    const colgroup = ['colgroup', {}, ...cols];\n    return { colgroup, tableWidth, tableMinWidth };\n}\n\nfunction createCell(cellType, cellContent) {\n    if (cellContent) {\n        return cellType.createChecked(null, cellContent);\n    }\n    return cellType.createAndFill();\n}\n\nfunction getTableNodeTypes(schema) {\n    if (schema.cached.tableNodeTypes) {\n        return schema.cached.tableNodeTypes;\n    }\n    const roles = {};\n    Object.keys(schema.nodes).forEach(type => {\n        const nodeType = schema.nodes[type];\n        if (nodeType.spec.tableRole) {\n            roles[nodeType.spec.tableRole] = nodeType;\n        }\n    });\n    schema.cached.tableNodeTypes = roles;\n    return roles;\n}\n\nfunction createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {\n    const types = getTableNodeTypes(schema);\n    const headerCells = [];\n    const cells = [];\n    for (let index = 0; index < colsCount; index += 1) {\n        const cell = createCell(types.cell, cellContent);\n        if (cell) {\n            cells.push(cell);\n        }\n        if (withHeaderRow) {\n            const headerCell = createCell(types.header_cell, cellContent);\n            if (headerCell) {\n                headerCells.push(headerCell);\n            }\n        }\n    }\n    const rows = [];\n    for (let index = 0; index < rowsCount; index += 1) {\n        rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n    }\n    return types.table.createChecked(null, rows);\n}\n\nfunction isCellSelection(value) {\n    return value instanceof tables.CellSelection;\n}\n\nconst deleteTableWhenAllCellsSelected = ({ editor }) => {\n    const { selection } = editor.state;\n    if (!isCellSelection(selection)) {\n        return false;\n    }\n    let cellCount = 0;\n    const table = core.findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n        return node.type.name === 'table';\n    });\n    table === null || table === void 0 ? void 0 : table.node.descendants(node => {\n        if (node.type.name === 'table') {\n            return false;\n        }\n        if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n            cellCount += 1;\n        }\n    });\n    const allCellsSelected = cellCount === selection.ranges.length;\n    if (!allCellsSelected) {\n        return false;\n    }\n    editor.commands.deleteTable();\n    return true;\n};\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nconst Table = core.Node.create({\n    name: 'table',\n    // @ts-ignore\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n            resizable: false,\n            renderWrapper: false,\n            handleWidth: 5,\n            cellMinWidth: 25,\n            // TODO: fix\n            View: TableView,\n            lastColumnResizable: true,\n            allowTableNodeSelection: false,\n        };\n    },\n    content: 'tableRow+',\n    tableRole: 'table',\n    isolating: true,\n    group: 'block',\n    parseHTML() {\n        return [{ tag: 'table' }];\n    },\n    renderHTML({ node, HTMLAttributes }) {\n        const { colgroup, tableWidth, tableMinWidth } = createColGroup(node, this.options.cellMinWidth);\n        const table = [\n            'table',\n            core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n                style: tableWidth\n                    ? `width: ${tableWidth}`\n                    : `min-width: ${tableMinWidth}`,\n            }),\n            colgroup,\n            ['tbody', 0],\n        ];\n        return this.options.renderWrapper ? ['div', { class: 'tableWrapper' }, table] : table;\n    },\n    addCommands() {\n        return {\n            insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n                const node = createTable(editor.schema, rows, cols, withHeaderRow);\n                if (dispatch) {\n                    const offset = tr.selection.from + 1;\n                    tr.replaceSelectionWith(node)\n                        .scrollIntoView()\n                        .setSelection(state.TextSelection.near(tr.doc.resolve(offset)));\n                }\n                return true;\n            },\n            addColumnBefore: () => ({ state, dispatch }) => {\n                return tables.addColumnBefore(state, dispatch);\n            },\n            addColumnAfter: () => ({ state, dispatch }) => {\n                return tables.addColumnAfter(state, dispatch);\n            },\n            deleteColumn: () => ({ state, dispatch }) => {\n                return tables.deleteColumn(state, dispatch);\n            },\n            addRowBefore: () => ({ state, dispatch }) => {\n                return tables.addRowBefore(state, dispatch);\n            },\n            addRowAfter: () => ({ state, dispatch }) => {\n                return tables.addRowAfter(state, dispatch);\n            },\n            deleteRow: () => ({ state, dispatch }) => {\n                return tables.deleteRow(state, dispatch);\n            },\n            deleteTable: () => ({ state, dispatch }) => {\n                return tables.deleteTable(state, dispatch);\n            },\n            mergeCells: () => ({ state, dispatch }) => {\n                return tables.mergeCells(state, dispatch);\n            },\n            splitCell: () => ({ state, dispatch }) => {\n                return tables.splitCell(state, dispatch);\n            },\n            toggleHeaderColumn: () => ({ state, dispatch }) => {\n                return tables.toggleHeader('column')(state, dispatch);\n            },\n            toggleHeaderRow: () => ({ state, dispatch }) => {\n                return tables.toggleHeader('row')(state, dispatch);\n            },\n            toggleHeaderCell: () => ({ state, dispatch }) => {\n                return tables.toggleHeaderCell(state, dispatch);\n            },\n            mergeOrSplit: () => ({ state, dispatch }) => {\n                if (tables.mergeCells(state, dispatch)) {\n                    return true;\n                }\n                return tables.splitCell(state, dispatch);\n            },\n            setCellAttribute: (name, value) => ({ state, dispatch }) => {\n                return tables.setCellAttr(name, value)(state, dispatch);\n            },\n            goToNextCell: () => ({ state, dispatch }) => {\n                return tables.goToNextCell(1)(state, dispatch);\n            },\n            goToPreviousCell: () => ({ state, dispatch }) => {\n                return tables.goToNextCell(-1)(state, dispatch);\n            },\n            fixTables: () => ({ state, dispatch }) => {\n                if (dispatch) {\n                    tables.fixTables(state);\n                }\n                return true;\n            },\n            setCellSelection: position => ({ tr, dispatch }) => {\n                if (dispatch) {\n                    const selection = tables.CellSelection.create(tr.doc, position.anchorCell, position.headCell);\n                    // @ts-ignore\n                    tr.setSelection(selection);\n                }\n                return true;\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            Tab: () => {\n                if (this.editor.commands.goToNextCell()) {\n                    return true;\n                }\n                if (!this.editor.can().addRowAfter()) {\n                    return false;\n                }\n                return this.editor.chain().addRowAfter().goToNextCell().run();\n            },\n            'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n            Backspace: deleteTableWhenAllCellsSelected,\n            'Mod-Backspace': deleteTableWhenAllCellsSelected,\n            Delete: deleteTableWhenAllCellsSelected,\n            'Mod-Delete': deleteTableWhenAllCellsSelected,\n        };\n    },\n    addProseMirrorPlugins() {\n        const isResizable = this.options.resizable && this.editor.isEditable;\n        return [\n            ...(isResizable\n                ? [\n                    tables.columnResizing({\n                        handleWidth: this.options.handleWidth,\n                        cellMinWidth: this.options.cellMinWidth,\n                        defaultCellMinWidth: this.options.cellMinWidth,\n                        View: this.options.View,\n                        lastColumnResizable: this.options.lastColumnResizable,\n                    }),\n                ]\n                : []),\n            tables.tableEditing({\n                allowTableNodeSelection: this.options.allowTableNodeSelection,\n            }),\n        ];\n    },\n    extendNodeSchema(extension) {\n        const context = {\n            name: extension.name,\n            options: extension.options,\n            storage: extension.storage,\n        };\n        return {\n            tableRole: core.callOrReturn(core.getExtensionField(extension, 'tableRole', context)),\n        };\n    },\n});\n\nexports.Table = Table;\nexports.TableView = TableView;\nexports.createColGroup = createColGroup;\nexports.createTable = createTable;\nexports.default = Table;\nexports.updateColumns = updateColumns;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to align text.\n * @see https://www.tiptap.dev/api/extensions/text-align\n */\nconst TextAlign = core.Extension.create({\n    name: 'textAlign',\n    addOptions() {\n        return {\n            types: [],\n            alignments: ['left', 'center', 'right', 'justify'],\n            defaultAlignment: null,\n        };\n    },\n    addGlobalAttributes() {\n        return [\n            {\n                types: this.options.types,\n                attributes: {\n                    textAlign: {\n                        default: this.options.defaultAlignment,\n                        parseHTML: element => {\n                            const alignment = element.style.textAlign;\n                            return this.options.alignments.includes(alignment) ? alignment : this.options.defaultAlignment;\n                        },\n                        renderHTML: attributes => {\n                            if (!attributes.textAlign) {\n                                return {};\n                            }\n                            return { style: `text-align: ${attributes.textAlign}` };\n                        },\n                    },\n                },\n            },\n        ];\n    },\n    addCommands() {\n        return {\n            setTextAlign: (alignment) => ({ commands }) => {\n                if (!this.options.alignments.includes(alignment)) {\n                    return false;\n                }\n                return this.options.types\n                    .map(type => commands.updateAttributes(type, { textAlign: alignment }))\n                    .every(response => response);\n            },\n            unsetTextAlign: () => ({ commands }) => {\n                return this.options.types\n                    .map(type => commands.resetAttributes(type, 'textAlign'))\n                    .every(response => response);\n            },\n            toggleTextAlign: alignment => ({ editor, commands }) => {\n                if (!this.options.alignments.includes(alignment)) {\n                    return false;\n                }\n                if (editor.isActive({ textAlign: alignment })) {\n                    return commands.unsetTextAlign();\n                }\n                return commands.setTextAlign(alignment);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-Shift-l': () => this.editor.commands.setTextAlign('left'),\n            'Mod-Shift-e': () => this.editor.commands.setTextAlign('center'),\n            'Mod-Shift-r': () => this.editor.commands.setTextAlign('right'),\n            'Mod-Shift-j': () => this.editor.commands.setTextAlign('justify'),\n        };\n    },\n});\n\nexports.TextAlign = TextAlign;\nexports.default = TextAlign;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\nconst mergeNestedSpanStyles = (element) => {\n    if (!element.children.length) {\n        return;\n    }\n    const childSpans = element.querySelectorAll('span');\n    if (!childSpans) {\n        return;\n    }\n    childSpans.forEach(childSpan => {\n        var _a, _b;\n        const childStyle = childSpan.getAttribute('style');\n        const closestParentSpanStyleOfChild = (_b = (_a = childSpan.parentElement) === null || _a === void 0 ? void 0 : _a.closest('span')) === null || _b === void 0 ? void 0 : _b.getAttribute('style');\n        childSpan.setAttribute('style', `${closestParentSpanStyleOfChild};${childStyle}`);\n    });\n};\n/**\n * This extension allows you to create text styles. It is required by default\n * for the `textColor` and `backgroundColor` extensions.\n * @see https://www.tiptap.dev/api/marks/text-style\n */\nconst TextStyle = core.Mark.create({\n    name: 'textStyle',\n    priority: 101,\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n            mergeNestedSpanStyles: false,\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'span',\n                getAttrs: element => {\n                    const hasStyles = element.hasAttribute('style');\n                    if (!hasStyles) {\n                        return false;\n                    }\n                    if (this.options.mergeNestedSpanStyles) {\n                        mergeNestedSpanStyles(element);\n                    }\n                    return {};\n                },\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['span', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            removeEmptyTextStyle: () => ({ tr }) => {\n                const { selection } = tr;\n                // Gather all of the nodes within the selection range.\n                // We would need to go through each node individually\n                // to check if it has any inline style attributes.\n                // Otherwise, calling commands.unsetMark(this.name)\n                // removes everything from all the nodes\n                // within the selection range.\n                tr.doc.nodesBetween(selection.from, selection.to, (node, pos) => {\n                    // Check if it's a paragraph element, if so, skip this node as we apply\n                    // the text style to inline text nodes only (span).\n                    if (node.isTextblock) {\n                        return true;\n                    }\n                    // Check if the node has no inline style attributes.\n                    // Filter out non-`textStyle` marks.\n                    if (!node.marks.filter(mark => mark.type === this.type).some(mark => Object.values(mark.attrs).some(value => !!value))) {\n                        // Proceed with the removal of the `textStyle` mark for this node only\n                        tr.removeMark(pos, pos + node.nodeSize, this.type);\n                    }\n                });\n                return true;\n            },\n        };\n    },\n});\n\nexports.TextStyle = TextStyle;\nexports.default = TextStyle;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create text nodes.\n * @see https://www.tiptap.dev/api/nodes/text\n */\nconst Text = core.Node.create({\n    name: 'text',\n    group: 'inline',\n});\n\nexports.Text = Text;\nexports.default = Text;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\n/**\n * This extension allows you to create underline text.\n * @see https://www.tiptap.dev/api/marks/underline\n */\nconst Underline = core.Mark.create({\n    name: 'underline',\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'u',\n            },\n            {\n                style: 'text-decoration',\n                consuming: false,\n                getAttrs: style => (style.includes('underline') ? {} : false),\n            },\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        return ['u', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n    },\n    addCommands() {\n        return {\n            setUnderline: () => ({ commands }) => {\n                return commands.setMark(this.name);\n            },\n            toggleUnderline: () => ({ commands }) => {\n                return commands.toggleMark(this.name);\n            },\n            unsetUnderline: () => ({ commands }) => {\n                return commands.unsetMark(this.name);\n            },\n        };\n    },\n    addKeyboardShortcuts() {\n        return {\n            'Mod-u': () => this.editor.commands.toggleUnderline(),\n            'Mod-U': () => this.editor.commands.toggleUnderline(),\n        };\n    },\n});\n\nexports.Underline = Underline;\nexports.default = Underline;\n//# sourceMappingURL=index.cjs.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\n\nconst YOUTUBE_REGEX = /^((?:https?:)?\\/\\/)?((?:www|m|music)\\.)?((?:youtube\\.com|youtu\\.be|youtube-nocookie\\.com))(\\/(?:[\\w-]+\\?v=|embed\\/|v\\/)?)([\\w-]+)(\\S+)?$/;\nconst YOUTUBE_REGEX_GLOBAL = /^((?:https?:)?\\/\\/)?((?:www|m|music)\\.)?((?:youtube\\.com|youtu\\.be|youtube-nocookie\\.com))(\\/(?:[\\w-]+\\?v=|embed\\/|v\\/)?)([\\w-]+)(\\S+)?$/g;\nconst isValidYoutubeUrl = (url) => {\n    return url.match(YOUTUBE_REGEX);\n};\nconst getYoutubeEmbedUrl = (nocookie, isPlaylist) => {\n    if (isPlaylist) {\n        return 'https://www.youtube-nocookie.com/embed/videoseries?list=';\n    }\n    return nocookie ? 'https://www.youtube-nocookie.com/embed/' : 'https://www.youtube.com/embed/';\n};\nconst getYoutubeVideoOrPlaylistId = (url) => {\n    if (url.searchParams.has('v')) {\n        return { id: url.searchParams.get('v') };\n    }\n    if (url.hostname === 'youtu.be'\n        || url.pathname.includes('shorts')\n        || url.pathname.includes('live')) {\n        return { id: url.pathname.split('/').pop() };\n    }\n    if (url.searchParams.has('list')) {\n        return { id: url.searchParams.get('list'), isPlaylist: true };\n    }\n    return null;\n};\nconst getEmbedUrlFromYoutubeUrl = (options) => {\n    var _a;\n    const { url, allowFullscreen, autoplay, ccLanguage, ccLoadPolicy, controls, disableKBcontrols, enableIFrameApi, endTime, interfaceLanguage, ivLoadPolicy, loop, modestBranding, nocookie, origin, playlist, progressBarColor, startAt, rel, } = options;\n    if (!isValidYoutubeUrl(url)) {\n        return null;\n    }\n    // if is already an embed url, return it\n    if (url.includes('/embed/')) {\n        return url;\n    }\n    const urlObject = new URL(url);\n    const { id, isPlaylist } = (_a = getYoutubeVideoOrPlaylistId(urlObject)) !== null && _a !== void 0 ? _a : {};\n    if (!id) {\n        return null;\n    }\n    const embedUrl = new URL(`${getYoutubeEmbedUrl(nocookie, isPlaylist)}${id}`);\n    if (urlObject.searchParams.has('t')) {\n        embedUrl.searchParams.set('start', urlObject.searchParams.get('t').replaceAll('s', ''));\n    }\n    if (allowFullscreen === false) {\n        embedUrl.searchParams.set('fs', '0');\n    }\n    if (autoplay) {\n        embedUrl.searchParams.set('autoplay', '1');\n    }\n    if (ccLanguage) {\n        embedUrl.searchParams.set('cc_lang_pref', ccLanguage);\n    }\n    if (ccLoadPolicy) {\n        embedUrl.searchParams.set('cc_load_policy', '1');\n    }\n    if (!controls) {\n        embedUrl.searchParams.set('controls', '0');\n    }\n    if (disableKBcontrols) {\n        embedUrl.searchParams.set('disablekb', '1');\n    }\n    if (enableIFrameApi) {\n        embedUrl.searchParams.set('enablejsapi', '1');\n    }\n    if (endTime) {\n        embedUrl.searchParams.set('end', endTime.toString());\n    }\n    if (interfaceLanguage) {\n        embedUrl.searchParams.set('hl', interfaceLanguage);\n    }\n    if (ivLoadPolicy) {\n        embedUrl.searchParams.set('iv_load_policy', ivLoadPolicy.toString());\n    }\n    if (loop) {\n        embedUrl.searchParams.set('loop', '1');\n    }\n    if (modestBranding) {\n        embedUrl.searchParams.set('modestbranding', '1');\n    }\n    if (origin) {\n        embedUrl.searchParams.set('origin', origin);\n    }\n    if (playlist) {\n        embedUrl.searchParams.set('playlist', playlist);\n    }\n    if (startAt) {\n        embedUrl.searchParams.set('start', startAt.toString());\n    }\n    if (progressBarColor) {\n        embedUrl.searchParams.set('color', progressBarColor);\n    }\n    if (rel !== undefined) {\n        embedUrl.searchParams.set('rel', rel.toString());\n    }\n    return embedUrl.toString();\n};\n\n/**\n * This extension adds support for youtube videos.\n * @see https://www.tiptap.dev/api/nodes/youtube\n */\nconst Youtube = core.Node.create({\n    name: 'youtube',\n    addOptions() {\n        return {\n            addPasteHandler: true,\n            allowFullscreen: true,\n            autoplay: false,\n            ccLanguage: undefined,\n            ccLoadPolicy: undefined,\n            controls: true,\n            disableKBcontrols: false,\n            enableIFrameApi: false,\n            endTime: 0,\n            height: 480,\n            interfaceLanguage: undefined,\n            ivLoadPolicy: 0,\n            loop: false,\n            modestBranding: false,\n            HTMLAttributes: {},\n            inline: false,\n            nocookie: false,\n            origin: '',\n            playlist: '',\n            progressBarColor: undefined,\n            width: 640,\n            rel: 1,\n        };\n    },\n    inline() {\n        return this.options.inline;\n    },\n    group() {\n        return this.options.inline ? 'inline' : 'block';\n    },\n    draggable: true,\n    addAttributes() {\n        return {\n            src: {\n                default: null,\n            },\n            start: {\n                default: 0,\n            },\n            width: {\n                default: this.options.width,\n            },\n            height: {\n                default: this.options.height,\n            },\n        };\n    },\n    parseHTML() {\n        return [\n            {\n                tag: 'div[data-youtube-video] iframe',\n            },\n        ];\n    },\n    addCommands() {\n        return {\n            setYoutubeVideo: (options) => ({ commands }) => {\n                if (!isValidYoutubeUrl(options.src)) {\n                    return false;\n                }\n                return commands.insertContent({\n                    type: this.name,\n                    attrs: options,\n                });\n            },\n        };\n    },\n    addPasteRules() {\n        if (!this.options.addPasteHandler) {\n            return [];\n        }\n        return [\n            core.nodePasteRule({\n                find: YOUTUBE_REGEX_GLOBAL,\n                type: this.type,\n                getAttributes: match => {\n                    return { src: match.input };\n                },\n            }),\n        ];\n    },\n    renderHTML({ HTMLAttributes }) {\n        const embedUrl = getEmbedUrlFromYoutubeUrl({\n            url: HTMLAttributes.src,\n            allowFullscreen: this.options.allowFullscreen,\n            autoplay: this.options.autoplay,\n            ccLanguage: this.options.ccLanguage,\n            ccLoadPolicy: this.options.ccLoadPolicy,\n            controls: this.options.controls,\n            disableKBcontrols: this.options.disableKBcontrols,\n            enableIFrameApi: this.options.enableIFrameApi,\n            endTime: this.options.endTime,\n            interfaceLanguage: this.options.interfaceLanguage,\n            ivLoadPolicy: this.options.ivLoadPolicy,\n            loop: this.options.loop,\n            modestBranding: this.options.modestBranding,\n            nocookie: this.options.nocookie,\n            origin: this.options.origin,\n            playlist: this.options.playlist,\n            progressBarColor: this.options.progressBarColor,\n            startAt: HTMLAttributes.start || 0,\n            rel: this.options.rel,\n        });\n        HTMLAttributes.src = embedUrl;\n        return [\n            'div',\n            { 'data-youtube-video': '' },\n            [\n                'iframe',\n                core.mergeAttributes(this.options.HTMLAttributes, {\n                    width: this.options.width,\n                    height: this.options.height,\n                    allowfullscreen: this.options.allowFullscreen,\n                    autoplay: this.options.autoplay,\n                    ccLanguage: this.options.ccLanguage,\n                    ccLoadPolicy: this.options.ccLoadPolicy,\n                    disableKBcontrols: this.options.disableKBcontrols,\n                    enableIFrameApi: this.options.enableIFrameApi,\n                    endTime: this.options.endTime,\n                    interfaceLanguage: this.options.interfaceLanguage,\n                    ivLoadPolicy: this.options.ivLoadPolicy,\n                    loop: this.options.loop,\n                    modestBranding: this.options.modestBranding,\n                    origin: this.options.origin,\n                    playlist: this.options.playlist,\n                    progressBarColor: this.options.progressBarColor,\n                    rel: this.options.rel,\n                }, HTMLAttributes),\n            ],\n        ];\n    },\n});\n\nexports.Youtube = Youtube;\nexports.default = Youtube;\n//# sourceMappingURL=index.cjs.map\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// commands/index.ts\nvar _prosemirrorcommands = require('prosemirror-commands'); _createStarExport(_prosemirrorcommands);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// dropcursor/index.ts\nvar _prosemirrordropcursor = require('prosemirror-dropcursor'); _createStarExport(_prosemirrordropcursor);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// gapcursor/index.ts\nvar _prosemirrorgapcursor = require('prosemirror-gapcursor'); _createStarExport(_prosemirrorgapcursor);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// history/index.ts\nvar _prosemirrorhistory = require('prosemirror-history'); _createStarExport(_prosemirrorhistory);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// keymap/index.ts\nvar _prosemirrorkeymap = require('prosemirror-keymap'); _createStarExport(_prosemirrorkeymap);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// model/index.ts\nvar _prosemirrormodel = require('prosemirror-model'); _createStarExport(_prosemirrormodel);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// schema-list/index.ts\nvar _prosemirrorschemalist = require('prosemirror-schema-list'); _createStarExport(_prosemirrorschemalist);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// state/index.ts\nvar _prosemirrorstate = require('prosemirror-state'); _createStarExport(_prosemirrorstate);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// tables/index.ts\nvar _prosemirrortables = require('prosemirror-tables'); _createStarExport(_prosemirrortables);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// transform/index.ts\nvar _prosemirrortransform = require('prosemirror-transform'); _createStarExport(_prosemirrortransform);\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== \"default\" && key !== \"__esModule\") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// view/index.ts\nvar _prosemirrorview = require('prosemirror-view'); _createStarExport(_prosemirrorview);\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar core = require('@tiptap/core');\nvar extensionBlockquote = require('@tiptap/extension-blockquote');\nvar extensionBold = require('@tiptap/extension-bold');\nvar extensionBulletList = require('@tiptap/extension-bullet-list');\nvar extensionCode = require('@tiptap/extension-code');\nvar extensionCodeBlock = require('@tiptap/extension-code-block');\nvar extensionDocument = require('@tiptap/extension-document');\nvar extensionDropcursor = require('@tiptap/extension-dropcursor');\nvar extensionGapcursor = require('@tiptap/extension-gapcursor');\nvar extensionHardBreak = require('@tiptap/extension-hard-break');\nvar extensionHeading = require('@tiptap/extension-heading');\nvar extensionHistory = require('@tiptap/extension-history');\nvar extensionHorizontalRule = require('@tiptap/extension-horizontal-rule');\nvar extensionItalic = require('@tiptap/extension-italic');\nvar extensionListItem = require('@tiptap/extension-list-item');\nvar extensionOrderedList = require('@tiptap/extension-ordered-list');\nvar extensionParagraph = require('@tiptap/extension-paragraph');\nvar extensionStrike = require('@tiptap/extension-strike');\nvar extensionText = require('@tiptap/extension-text');\n\n/**\n * The starter kit is a collection of essential editor extensions.\n *\n * It’s a good starting point for building your own editor.\n */\nconst StarterKit = core.Extension.create({\n    name: 'starterKit',\n    addExtensions() {\n        const extensions = [];\n        if (this.options.bold !== false) {\n            extensions.push(extensionBold.Bold.configure(this.options.bold));\n        }\n        if (this.options.blockquote !== false) {\n            extensions.push(extensionBlockquote.Blockquote.configure(this.options.blockquote));\n        }\n        if (this.options.bulletList !== false) {\n            extensions.push(extensionBulletList.BulletList.configure(this.options.bulletList));\n        }\n        if (this.options.code !== false) {\n            extensions.push(extensionCode.Code.configure(this.options.code));\n        }\n        if (this.options.codeBlock !== false) {\n            extensions.push(extensionCodeBlock.CodeBlock.configure(this.options.codeBlock));\n        }\n        if (this.options.document !== false) {\n            extensions.push(extensionDocument.Document.configure(this.options.document));\n        }\n        if (this.options.dropcursor !== false) {\n            extensions.push(extensionDropcursor.Dropcursor.configure(this.options.dropcursor));\n        }\n        if (this.options.gapcursor !== false) {\n            extensions.push(extensionGapcursor.Gapcursor.configure(this.options.gapcursor));\n        }\n        if (this.options.hardBreak !== false) {\n            extensions.push(extensionHardBreak.HardBreak.configure(this.options.hardBreak));\n        }\n        if (this.options.heading !== false) {\n            extensions.push(extensionHeading.Heading.configure(this.options.heading));\n        }\n        if (this.options.history !== false) {\n            extensions.push(extensionHistory.History.configure(this.options.history));\n        }\n        if (this.options.horizontalRule !== false) {\n            extensions.push(extensionHorizontalRule.HorizontalRule.configure(this.options.horizontalRule));\n        }\n        if (this.options.italic !== false) {\n            extensions.push(extensionItalic.Italic.configure(this.options.italic));\n        }\n        if (this.options.listItem !== false) {\n            extensions.push(extensionListItem.ListItem.configure(this.options.listItem));\n        }\n        if (this.options.orderedList !== false) {\n            extensions.push(extensionOrderedList.OrderedList.configure(this.options.orderedList));\n        }\n        if (this.options.paragraph !== false) {\n            extensions.push(extensionParagraph.Paragraph.configure(this.options.paragraph));\n        }\n        if (this.options.strike !== false) {\n            extensions.push(extensionStrike.Strike.configure(this.options.strike));\n        }\n        if (this.options.text !== false) {\n            extensions.push(extensionText.Text.configure(this.options.text));\n        }\n        return extensions;\n    },\n});\n\nexports.StarterKit = StarterKit;\nexports.default = StarterKit;\n//# sourceMappingURL=index.cjs.map\n","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// index.ts\nvar _pointinpolygonhao = require('point-in-polygon-hao'); var _pointinpolygonhao2 = _interopRequireDefault(_pointinpolygonhao);\nvar _invariant = require('@turf/invariant');\nfunction booleanPointInPolygon(point, polygon, options = {}) {\n  if (!point) {\n    throw new Error(\"point is required\");\n  }\n  if (!polygon) {\n    throw new Error(\"polygon is required\");\n  }\n  const pt = _invariant.getCoord.call(void 0, point);\n  const geom = _invariant.getGeom.call(void 0, polygon);\n  const type = geom.type;\n  const bbox = polygon.bbox;\n  let polys = geom.coordinates;\n  if (bbox && inBBox(pt, bbox) === false) {\n    return false;\n  }\n  if (type === \"Polygon\") {\n    polys = [polys];\n  }\n  for (var i = 0; i < polys.length; ++i) {\n    const polyResult = _pointinpolygonhao2.default.call(void 0, pt, polys[i]);\n    if (polyResult === 0 && !options.ignoreBoundary) return true;\n    else if (polyResult) return true;\n  }\n  return false;\n}\nfunction inBBox(pt, bbox) {\n  return bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1];\n}\nvar index_default = booleanPointInPolygon;\n\n\n\nexports.booleanPointInPolygon = booleanPointInPolygon; exports.default = index_default;\n//# sourceMappingURL=index.cjs.map","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true});// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n  centimeters: earthRadius * 100,\n  centimetres: earthRadius * 100,\n  cm: earthRadius * 100,\n  degrees: 360 / (2 * Math.PI),\n  deg: 360 / (2 * Math.PI),\n  feet: earthRadius * 3.28084,\n  ft: earthRadius * 3.28084,\n  inches: earthRadius * 39.37,\n  in: earthRadius * 39.37,\n  kilometers: earthRadius / 1e3,\n  kilometres: earthRadius / 1e3,\n  km: earthRadius / 1e3,\n  meters: earthRadius,\n  metres: earthRadius,\n  m: earthRadius,\n  miles: earthRadius / 1609.344,\n  mi: earthRadius / 1609.344,\n  millimeters: earthRadius * 1e3,\n  millimetres: earthRadius * 1e3,\n  mm: earthRadius * 1e3,\n  nauticalmiles: earthRadius / 1852,\n  nmi: earthRadius / 1852,\n  radians: 1,\n  rad: 1,\n  yards: earthRadius * 1.0936,\n  yd: earthRadius * 1.0936\n};\nvar areaFactors = {\n  acres: 247105e-9,\n  ac: 247105e-9,\n  centimeters: 1e4,\n  centimetres: 1e4,\n  cm: 1e4,\n  feet: 10.763910417,\n  ft: 10.763910417,\n  hectares: 1e-4,\n  ha: 1e-4,\n  inches: 1550.003100006,\n  in: 1550.003100006,\n  kilometers: 1e-6,\n  kilometres: 1e-6,\n  km: 1e-6,\n  meters: 1,\n  metres: 1,\n  m: 1,\n  miles: 386e-9,\n  mi: 386e-9,\n  nauticalmiles: 29155334959812285e-23,\n  nmi: 29155334959812285e-23,\n  millimeters: 1e6,\n  millimetres: 1e6,\n  mm: 1e6,\n  yards: 1.195990046,\n  yd: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n  const feat = { type: \"Feature\" };\n  if (options.id === 0 || options.id) {\n    feat.id = options.id;\n  }\n  if (options.bbox) {\n    feat.bbox = options.bbox;\n  }\n  feat.properties = properties || {};\n  feat.geometry = geom;\n  return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n  switch (type) {\n    case \"Point\":\n      return point(coordinates).geometry;\n    case \"LineString\":\n      return lineString(coordinates).geometry;\n    case \"Polygon\":\n      return polygon(coordinates).geometry;\n    case \"MultiPoint\":\n      return multiPoint(coordinates).geometry;\n    case \"MultiLineString\":\n      return multiLineString(coordinates).geometry;\n    case \"MultiPolygon\":\n      return multiPolygon(coordinates).geometry;\n    default:\n      throw new Error(type + \" is invalid\");\n  }\n}\nfunction point(coordinates, properties, options = {}) {\n  if (!coordinates) {\n    throw new Error(\"coordinates is required\");\n  }\n  if (!Array.isArray(coordinates)) {\n    throw new Error(\"coordinates must be an Array\");\n  }\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be at least 2 numbers long\");\n  }\n  if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n    throw new Error(\"coordinates must contain numbers\");\n  }\n  const geom = {\n    type: \"Point\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return point(coords, properties);\n    }),\n    options\n  );\n}\nfunction polygon(coordinates, properties, options = {}) {\n  for (const ring of coordinates) {\n    if (ring.length < 4) {\n      throw new Error(\n        \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n      );\n    }\n    if (ring[ring.length - 1].length !== ring[0].length) {\n      throw new Error(\"First and last Position are not equivalent.\");\n    }\n    for (let j = 0; j < ring[ring.length - 1].length; j++) {\n      if (ring[ring.length - 1][j] !== ring[0][j]) {\n        throw new Error(\"First and last Position are not equivalent.\");\n      }\n    }\n  }\n  const geom = {\n    type: \"Polygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return polygon(coords, properties);\n    }),\n    options\n  );\n}\nfunction lineString(coordinates, properties, options = {}) {\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be an array of two or more positions\");\n  }\n  const geom = {\n    type: \"LineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return lineString(coords, properties);\n    }),\n    options\n  );\n}\nfunction featureCollection(features, options = {}) {\n  const fc = { type: \"FeatureCollection\" };\n  if (options.id) {\n    fc.id = options.id;\n  }\n  if (options.bbox) {\n    fc.bbox = options.bbox;\n  }\n  fc.features = features;\n  return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiLineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPoint\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPolygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n  const geom = {\n    type: \"GeometryCollection\",\n    geometries\n  };\n  return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n  if (precision && !(precision >= 0)) {\n    throw new Error(\"precision must be a positive number\");\n  }\n  const multiplier = Math.pow(10, precision || 0);\n  return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n  return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n  let angle = bearing % 360;\n  if (angle < 0) {\n    angle += 360;\n  }\n  return angle;\n}\nfunction azimuthToBearing(angle) {\n  angle = angle % 360;\n  if (angle > 180) {\n    return angle - 360;\n  } else if (angle < -180) {\n    return angle + 360;\n  }\n  return angle;\n}\nfunction radiansToDegrees(radians) {\n  const normalisedRadians = radians % (2 * Math.PI);\n  return normalisedRadians * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n  const normalisedDegrees = degrees % 360;\n  return normalisedDegrees * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n  if (!(length >= 0)) {\n    throw new Error(\"length must be a positive number\");\n  }\n  return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n  if (!(area >= 0)) {\n    throw new Error(\"area must be a positive number\");\n  }\n  const startFactor = areaFactors[originalUnit];\n  if (!startFactor) {\n    throw new Error(\"invalid original units\");\n  }\n  const finalFactor = areaFactors[finalUnit];\n  if (!finalFactor) {\n    throw new Error(\"invalid final units\");\n  }\n  return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n  return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n  return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction removeBbox(geojson) {\n  delete geojson.bbox;\n  if (geojson.type === \"Feature\") {\n    if (geojson.geometry) removeBbox(geojson.geometry);\n  } else if (geojson.type === \"FeatureCollection\") {\n    geojson.features.forEach(removeBbox);\n  } else if (geojson.type === \"GeometryCollection\") {\n    geojson.geometries.forEach(removeBbox);\n  }\n}\nfunction validateBBox(bbox) {\n  if (!bbox) {\n    throw new Error(\"bbox is required\");\n  }\n  if (!Array.isArray(bbox)) {\n    throw new Error(\"bbox must be an Array\");\n  }\n  if (bbox.length !== 4 && bbox.length !== 6) {\n    throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n  }\n  bbox.forEach((num) => {\n    if (!isNumber(num)) {\n      throw new Error(\"bbox must only contain numbers\");\n    }\n  });\n}\nfunction validateId(id) {\n  if (!id) {\n    throw new Error(\"id is required\");\n  }\n  if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n    throw new Error(\"id must be a number or a string\");\n  }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexports.areaFactors = areaFactors; exports.azimuthToBearing = azimuthToBearing; exports.bearingToAzimuth = bearingToAzimuth; exports.convertArea = convertArea; exports.convertLength = convertLength; exports.degreesToRadians = degreesToRadians; exports.earthRadius = earthRadius; exports.factors = factors; exports.feature = feature; exports.featureCollection = featureCollection; exports.geometry = geometry; exports.geometryCollection = geometryCollection; exports.isNumber = isNumber; exports.isObject = isObject; exports.lengthToDegrees = lengthToDegrees; exports.lengthToRadians = lengthToRadians; exports.lineString = lineString; exports.lineStrings = lineStrings; exports.multiLineString = multiLineString; exports.multiPoint = multiPoint; exports.multiPolygon = multiPolygon; exports.point = point; exports.points = points; exports.polygon = polygon; exports.polygons = polygons; exports.radiansToDegrees = radiansToDegrees; exports.radiansToLength = radiansToLength; exports.removeBbox = removeBbox; exports.round = round; exports.validateBBox = validateBBox; exports.validateId = validateId;\n//# sourceMappingURL=index.cjs.map","\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true});// index.ts\nvar _helpers = require('@turf/helpers');\nfunction getCoord(coord) {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n  if (!Array.isArray(coord)) {\n    if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n    return [...coord];\n  }\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\nfunction containsNumber(coordinates) {\n  if (coordinates.length > 1 && _helpers.isNumber.call(void 0, coordinates[0]) && _helpers.isNumber.call(void 0, coordinates[1])) {\n    return true;\n  }\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n    );\n  }\n}\nfunction featureOf(feature, type, name) {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n    );\n  }\n}\nfunction collectionOf(featureCollection, type, name) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n      );\n    }\n  }\n}\nfunction getGeom(geojson) {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\nfunction getType(geojson, _name) {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\n\n\n\n\n\n\n\n\n\nexports.collectionOf = collectionOf; exports.containsNumber = containsNumber; exports.featureOf = featureOf; exports.geojsonType = geojsonType; exports.getCoord = getCoord; exports.getCoords = getCoords; exports.getGeom = getGeom; exports.getType = getType;\n//# sourceMappingURL=index.cjs.map","const chartjs = require('../dist/chart.cjs');\nconst {Chart, registerables} = chartjs;\n\nChart.register(...registerables);\n\nmodule.exports = Object.assign(Chart, chartjs);\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\n'use strict';\n\nvar helpers_dataset = require('./chunks/helpers.dataset.cjs');\nrequire('@kurkle/color');\n\nclass Animator {\n    constructor(){\n        this._request = null;\n        this._charts = new Map();\n        this._running = false;\n        this._lastDate = undefined;\n    }\n _notify(chart, anims, date, type) {\n        const callbacks = anims.listeners[type];\n        const numSteps = anims.duration;\n        callbacks.forEach((fn)=>fn({\n                chart,\n                initial: anims.initial,\n                numSteps,\n                currentStep: Math.min(date - anims.start, numSteps)\n            }));\n    }\n _refresh() {\n        if (this._request) {\n            return;\n        }\n        this._running = true;\n        this._request = helpers_dataset.requestAnimFrame.call(window, ()=>{\n            this._update();\n            this._request = null;\n            if (this._running) {\n                this._refresh();\n            }\n        });\n    }\n _update(date = Date.now()) {\n        let remaining = 0;\n        this._charts.forEach((anims, chart)=>{\n            if (!anims.running || !anims.items.length) {\n                return;\n            }\n            const items = anims.items;\n            let i = items.length - 1;\n            let draw = false;\n            let item;\n            for(; i >= 0; --i){\n                item = items[i];\n                if (item._active) {\n                    if (item._total > anims.duration) {\n                        anims.duration = item._total;\n                    }\n                    item.tick(date);\n                    draw = true;\n                } else {\n                    items[i] = items[items.length - 1];\n                    items.pop();\n                }\n            }\n            if (draw) {\n                chart.draw();\n                this._notify(chart, anims, date, 'progress');\n            }\n            if (!items.length) {\n                anims.running = false;\n                this._notify(chart, anims, date, 'complete');\n                anims.initial = false;\n            }\n            remaining += items.length;\n        });\n        this._lastDate = date;\n        if (remaining === 0) {\n            this._running = false;\n        }\n    }\n _getAnims(chart) {\n        const charts = this._charts;\n        let anims = charts.get(chart);\n        if (!anims) {\n            anims = {\n                running: false,\n                initial: true,\n                items: [],\n                listeners: {\n                    complete: [],\n                    progress: []\n                }\n            };\n            charts.set(chart, anims);\n        }\n        return anims;\n    }\n listen(chart, event, cb) {\n        this._getAnims(chart).listeners[event].push(cb);\n    }\n add(chart, items) {\n        if (!items || !items.length) {\n            return;\n        }\n        this._getAnims(chart).items.push(...items);\n    }\n has(chart) {\n        return this._getAnims(chart).items.length > 0;\n    }\n start(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims) {\n            return;\n        }\n        anims.running = true;\n        anims.start = Date.now();\n        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n        this._refresh();\n    }\n    running(chart) {\n        if (!this._running) {\n            return false;\n        }\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.running || !anims.items.length) {\n            return false;\n        }\n        return true;\n    }\n stop(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.items.length) {\n            return;\n        }\n        const items = anims.items;\n        let i = items.length - 1;\n        for(; i >= 0; --i){\n            items[i].cancel();\n        }\n        anims.items = [];\n        this._notify(chart, anims, Date.now(), 'complete');\n    }\n remove(chart) {\n        return this._charts.delete(chart);\n    }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n    boolean (from, to, factor) {\n        return factor > 0.5 ? to : from;\n    },\n color (from, to, factor) {\n        const c0 = helpers_dataset.color(from || transparent);\n        const c1 = c0.valid && helpers_dataset.color(to || transparent);\n        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n    },\n    number (from, to, factor) {\n        return from + (to - from) * factor;\n    }\n};\nclass Animation {\n    constructor(cfg, target, prop, to){\n        const currentValue = target[prop];\n        to = helpers_dataset.resolve([\n            cfg.to,\n            to,\n            currentValue,\n            cfg.from\n        ]);\n        const from = helpers_dataset.resolve([\n            cfg.from,\n            currentValue,\n            to\n        ]);\n        this._active = true;\n        this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n        this._easing = helpers_dataset.effects[cfg.easing] || helpers_dataset.effects.linear;\n        this._start = Math.floor(Date.now() + (cfg.delay || 0));\n        this._duration = this._total = Math.floor(cfg.duration);\n        this._loop = !!cfg.loop;\n        this._target = target;\n        this._prop = prop;\n        this._from = from;\n        this._to = to;\n        this._promises = undefined;\n    }\n    active() {\n        return this._active;\n    }\n    update(cfg, to, date) {\n        if (this._active) {\n            this._notify(false);\n            const currentValue = this._target[this._prop];\n            const elapsed = date - this._start;\n            const remain = this._duration - elapsed;\n            this._start = date;\n            this._duration = Math.floor(Math.max(remain, cfg.duration));\n            this._total += elapsed;\n            this._loop = !!cfg.loop;\n            this._to = helpers_dataset.resolve([\n                cfg.to,\n                to,\n                currentValue,\n                cfg.from\n            ]);\n            this._from = helpers_dataset.resolve([\n                cfg.from,\n                currentValue,\n                to\n            ]);\n        }\n    }\n    cancel() {\n        if (this._active) {\n            this.tick(Date.now());\n            this._active = false;\n            this._notify(false);\n        }\n    }\n    tick(date) {\n        const elapsed = date - this._start;\n        const duration = this._duration;\n        const prop = this._prop;\n        const from = this._from;\n        const loop = this._loop;\n        const to = this._to;\n        let factor;\n        this._active = from !== to && (loop || elapsed < duration);\n        if (!this._active) {\n            this._target[prop] = to;\n            this._notify(true);\n            return;\n        }\n        if (elapsed < 0) {\n            this._target[prop] = from;\n            return;\n        }\n        factor = elapsed / duration % 2;\n        factor = loop && factor > 1 ? 2 - factor : factor;\n        factor = this._easing(Math.min(1, Math.max(0, factor)));\n        this._target[prop] = this._fn(from, to, factor);\n    }\n    wait() {\n        const promises = this._promises || (this._promises = []);\n        return new Promise((res, rej)=>{\n            promises.push({\n                res,\n                rej\n            });\n        });\n    }\n    _notify(resolved) {\n        const method = resolved ? 'res' : 'rej';\n        const promises = this._promises || [];\n        for(let i = 0; i < promises.length; i++){\n            promises[i][method]();\n        }\n    }\n}\n\nclass Animations {\n    constructor(chart, config){\n        this._chart = chart;\n        this._properties = new Map();\n        this.configure(config);\n    }\n    configure(config) {\n        if (!helpers_dataset.isObject(config)) {\n            return;\n        }\n        const animationOptions = Object.keys(helpers_dataset.defaults.animation);\n        const animatedProps = this._properties;\n        Object.getOwnPropertyNames(config).forEach((key)=>{\n            const cfg = config[key];\n            if (!helpers_dataset.isObject(cfg)) {\n                return;\n            }\n            const resolved = {};\n            for (const option of animationOptions){\n                resolved[option] = cfg[option];\n            }\n            (helpers_dataset.isArray(cfg.properties) && cfg.properties || [\n                key\n            ]).forEach((prop)=>{\n                if (prop === key || !animatedProps.has(prop)) {\n                    animatedProps.set(prop, resolved);\n                }\n            });\n        });\n    }\n _animateOptions(target, values) {\n        const newOptions = values.options;\n        const options = resolveTargetOptions(target, newOptions);\n        if (!options) {\n            return [];\n        }\n        const animations = this._createAnimations(options, newOptions);\n        if (newOptions.$shared) {\n            awaitAll(target.options.$animations, newOptions).then(()=>{\n                target.options = newOptions;\n            }, ()=>{\n            });\n        }\n        return animations;\n    }\n _createAnimations(target, values) {\n        const animatedProps = this._properties;\n        const animations = [];\n        const running = target.$animations || (target.$animations = {});\n        const props = Object.keys(values);\n        const date = Date.now();\n        let i;\n        for(i = props.length - 1; i >= 0; --i){\n            const prop = props[i];\n            if (prop.charAt(0) === '$') {\n                continue;\n            }\n            if (prop === 'options') {\n                animations.push(...this._animateOptions(target, values));\n                continue;\n            }\n            const value = values[prop];\n            let animation = running[prop];\n            const cfg = animatedProps.get(prop);\n            if (animation) {\n                if (cfg && animation.active()) {\n                    animation.update(cfg, value, date);\n                    continue;\n                } else {\n                    animation.cancel();\n                }\n            }\n            if (!cfg || !cfg.duration) {\n                target[prop] = value;\n                continue;\n            }\n            running[prop] = animation = new Animation(cfg, target, prop, value);\n            animations.push(animation);\n        }\n        return animations;\n    }\n update(target, values) {\n        if (this._properties.size === 0) {\n            Object.assign(target, values);\n            return;\n        }\n        const animations = this._createAnimations(target, values);\n        if (animations.length) {\n            animator.add(this._chart, animations);\n            return true;\n        }\n    }\n}\nfunction awaitAll(animations, properties) {\n    const running = [];\n    const keys = Object.keys(properties);\n    for(let i = 0; i < keys.length; i++){\n        const anim = animations[keys[i]];\n        if (anim && anim.active()) {\n            running.push(anim.wait());\n        }\n    }\n    return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n    if (!newOptions) {\n        return;\n    }\n    let options = target.options;\n    if (!options) {\n        target.options = newOptions;\n        return;\n    }\n    if (options.$shared) {\n        target.options = options = Object.assign({}, options, {\n            $shared: false,\n            $animations: {}\n        });\n    }\n    return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n    const opts = scale && scale.options || {};\n    const reverse = opts.reverse;\n    const min = opts.min === undefined ? allowedOverflow : 0;\n    const max = opts.max === undefined ? allowedOverflow : 0;\n    return {\n        start: reverse ? max : min,\n        end: reverse ? min : max\n    };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n    if (allowedOverflow === false) {\n        return false;\n    }\n    const x = scaleClip(xScale, allowedOverflow);\n    const y = scaleClip(yScale, allowedOverflow);\n    return {\n        top: y.end,\n        right: x.end,\n        bottom: y.start,\n        left: x.start\n    };\n}\nfunction toClip(value) {\n    let t, r, b, l;\n    if (helpers_dataset.isObject(value)) {\n        t = value.top;\n        r = value.right;\n        b = value.bottom;\n        l = value.left;\n    } else {\n        t = r = b = l = value;\n    }\n    return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        disabled: value === false\n    };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n    const keys = [];\n    const metasets = chart._getSortedDatasetMetas(filterVisible);\n    let i, ilen;\n    for(i = 0, ilen = metasets.length; i < ilen; ++i){\n        keys.push(metasets[i].index);\n    }\n    return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n    const keys = stack.keys;\n    const singleMode = options.mode === 'single';\n    let i, ilen, datasetIndex, otherValue;\n    if (value === null) {\n        return;\n    }\n    let found = false;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        datasetIndex = +keys[i];\n        if (datasetIndex === dsIndex) {\n            found = true;\n            if (options.all) {\n                continue;\n            }\n            break;\n        }\n        otherValue = stack.values[datasetIndex];\n        if (helpers_dataset.isNumberFinite(otherValue) && (singleMode || value === 0 || helpers_dataset.sign(value) === helpers_dataset.sign(otherValue))) {\n            value += otherValue;\n        }\n    }\n    if (!found && !options.all) {\n        return 0;\n    }\n    return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n    const { iScale , vScale  } = meta;\n    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n    const keys = Object.keys(data);\n    const adata = new Array(keys.length);\n    let i, ilen, key;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        key = keys[i];\n        adata[i] = {\n            [iAxisKey]: key,\n            [vAxisKey]: data[key]\n        };\n    }\n    return adata;\n}\nfunction isStacked(scale, meta) {\n    const stacked = scale && scale.options.stacked;\n    return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();\n    return {\n        min: minDefined ? min : Number.NEGATIVE_INFINITY,\n        max: maxDefined ? max : Number.POSITIVE_INFINITY\n    };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n    const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n    return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n        const value = stack[meta.index];\n        if (positive && value > 0 || !positive && value < 0) {\n            return meta.index;\n        }\n    }\n    return null;\n}\nfunction updateStacks(controller, parsed) {\n    const { chart , _cachedMeta: meta  } = controller;\n    const stacks = chart._stacks || (chart._stacks = {});\n    const { iScale , vScale , index: datasetIndex  } = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const key = getStackKey(iScale, vScale, meta);\n    const ilen = parsed.length;\n    let stack;\n    for(let i = 0; i < ilen; ++i){\n        const item = parsed[i];\n        const { [iAxis]: index , [vAxis]: value  } = item;\n        const itemStacks = item._stacks || (item._stacks = {});\n        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n        stack[datasetIndex] = value;\n        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n        const visualValues = stack._visualValues || (stack._visualValues = {});\n        visualValues[datasetIndex] = value;\n    }\n}\nfunction getFirstScaleId(chart, axis) {\n    const scales = chart.scales;\n    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n    return helpers_dataset.createContext(parent, {\n        active: false,\n        dataset: undefined,\n        datasetIndex: index,\n        index,\n        mode: 'default',\n        type: 'dataset'\n    });\n}\nfunction createDataContext(parent, index, element) {\n    return helpers_dataset.createContext(parent, {\n        active: false,\n        dataIndex: index,\n        parsed: undefined,\n        raw: undefined,\n        element,\n        index,\n        mode: 'default',\n        type: 'data'\n    });\n}\nfunction clearStacks(meta, items) {\n    const datasetIndex = meta.controller.index;\n    const axis = meta.vScale && meta.vScale.axis;\n    if (!axis) {\n        return;\n    }\n    items = items || meta._parsed;\n    for (const parsed of items){\n        const stacks = parsed._stacks;\n        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n            return;\n        }\n        delete stacks[axis][datasetIndex];\n        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n            delete stacks[axis]._visualValues[datasetIndex];\n        }\n    }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n        keys: getSortedDatasetIndices(chart, true),\n        values: null\n    };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n        this.chart = chart;\n        this._ctx = chart.ctx;\n        this.index = datasetIndex;\n        this._cachedDataOpts = {};\n        this._cachedMeta = this.getMeta();\n        this._type = this._cachedMeta.type;\n        this.options = undefined;\n         this._parsing = false;\n        this._data = undefined;\n        this._objectData = undefined;\n        this._sharedOptions = undefined;\n        this._drawStart = undefined;\n        this._drawCount = undefined;\n        this.enableOptionSharing = false;\n        this.supportsDecimation = false;\n        this.$context = undefined;\n        this._syncList = [];\n        this.datasetElementType = new.target.datasetElementType;\n        this.dataElementType = new.target.dataElementType;\n        this.initialize();\n    }\n    initialize() {\n        const meta = this._cachedMeta;\n        this.configure();\n        this.linkScales();\n        meta._stacked = isStacked(meta.vScale, meta);\n        this.addElements();\n        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n            console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n        }\n    }\n    updateIndex(datasetIndex) {\n        if (this.index !== datasetIndex) {\n            clearStacks(this._cachedMeta);\n        }\n        this.index = datasetIndex;\n    }\n    linkScales() {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n        const xid = meta.xAxisID = helpers_dataset.valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n        const yid = meta.yAxisID = helpers_dataset.valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n        const rid = meta.rAxisID = helpers_dataset.valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n        const indexAxis = meta.indexAxis;\n        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n        meta.xScale = this.getScaleForId(xid);\n        meta.yScale = this.getScaleForId(yid);\n        meta.rScale = this.getScaleForId(rid);\n        meta.iScale = this.getScaleForId(iid);\n        meta.vScale = this.getScaleForId(vid);\n    }\n    getDataset() {\n        return this.chart.data.datasets[this.index];\n    }\n    getMeta() {\n        return this.chart.getDatasetMeta(this.index);\n    }\n getScaleForId(scaleID) {\n        return this.chart.scales[scaleID];\n    }\n _getOtherScale(scale) {\n        const meta = this._cachedMeta;\n        return scale === meta.iScale ? meta.vScale : meta.iScale;\n    }\n    reset() {\n        this._update('reset');\n    }\n _destroy() {\n        const meta = this._cachedMeta;\n        if (this._data) {\n            helpers_dataset.unlistenArrayEvents(this._data, this);\n        }\n        if (meta._stacked) {\n            clearStacks(meta);\n        }\n    }\n _dataCheck() {\n        const dataset = this.getDataset();\n        const data = dataset.data || (dataset.data = []);\n        const _data = this._data;\n        if (helpers_dataset.isObject(data)) {\n            const meta = this._cachedMeta;\n            this._data = convertObjectDataToArray(data, meta);\n        } else if (_data !== data) {\n            if (_data) {\n                helpers_dataset.unlistenArrayEvents(_data, this);\n                const meta = this._cachedMeta;\n                clearStacks(meta);\n                meta._parsed = [];\n            }\n            if (data && Object.isExtensible(data)) {\n                helpers_dataset.listenArrayEvents(data, this);\n            }\n            this._syncList = [];\n            this._data = data;\n        }\n    }\n    addElements() {\n        const meta = this._cachedMeta;\n        this._dataCheck();\n        if (this.datasetElementType) {\n            meta.dataset = new this.datasetElementType();\n        }\n    }\n    buildOrUpdateElements(resetNewElements) {\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        let stackChanged = false;\n        this._dataCheck();\n        const oldStacked = meta._stacked;\n        meta._stacked = isStacked(meta.vScale, meta);\n        if (meta.stack !== dataset.stack) {\n            stackChanged = true;\n            clearStacks(meta);\n            meta.stack = dataset.stack;\n        }\n        this._resyncElements(resetNewElements);\n        if (stackChanged || oldStacked !== meta._stacked) {\n            updateStacks(this, meta._parsed);\n            meta._stacked = isStacked(meta.vScale, meta);\n        }\n    }\n configure() {\n        const config = this.chart.config;\n        const scopeKeys = config.datasetScopeKeys(this._type);\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n        this.options = config.createResolver(scopes, this.getContext());\n        this._parsing = this.options.parsing;\n        this._cachedDataOpts = {};\n    }\n parse(start, count) {\n        const { _cachedMeta: meta , _data: data  } = this;\n        const { iScale , _stacked  } = meta;\n        const iAxis = iScale.axis;\n        let sorted = start === 0 && count === data.length ? true : meta._sorted;\n        let prev = start > 0 && meta._parsed[start - 1];\n        let i, cur, parsed;\n        if (this._parsing === false) {\n            meta._parsed = data;\n            meta._sorted = true;\n            parsed = data;\n        } else {\n            if (helpers_dataset.isArray(data[start])) {\n                parsed = this.parseArrayData(meta, data, start, count);\n            } else if (helpers_dataset.isObject(data[start])) {\n                parsed = this.parseObjectData(meta, data, start, count);\n            } else {\n                parsed = this.parsePrimitiveData(meta, data, start, count);\n            }\n            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n            for(i = 0; i < count; ++i){\n                meta._parsed[i + start] = cur = parsed[i];\n                if (sorted) {\n                    if (isNotInOrderComparedToPrev()) {\n                        sorted = false;\n                    }\n                    prev = cur;\n                }\n            }\n            meta._sorted = sorted;\n        }\n        if (_stacked) {\n            updateStacks(this, parsed);\n        }\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const labels = iScale.getLabels();\n        const singleScale = iScale === vScale;\n        const parsed = new Array(count);\n        let i, ilen, index;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            parsed[i] = {\n                [iAxis]: singleScale || iScale.parse(labels[index], index),\n                [vAxis]: vScale.parse(data[index], index)\n            };\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(item[0], index),\n                y: yScale.parse(item[1], index)\n            };\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(helpers_dataset.resolveObjectKey(item, xAxisKey), index),\n                y: yScale.parse(helpers_dataset.resolveObjectKey(item, yAxisKey), index)\n            };\n        }\n        return parsed;\n    }\n getParsed(index) {\n        return this._cachedMeta._parsed[index];\n    }\n getDataElement(index) {\n        return this._cachedMeta.data[index];\n    }\n applyStack(scale, parsed, mode) {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const value = parsed[scale.axis];\n        const stack = {\n            keys: getSortedDatasetIndices(chart, true),\n            values: parsed._stacks[scale.axis]._visualValues\n        };\n        return applyStack(stack, value, meta.index, {\n            mode\n        });\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        const parsedValue = parsed[scale.axis];\n        let value = parsedValue === null ? NaN : parsedValue;\n        const values = stack && parsed._stacks[scale.axis];\n        if (stack && values) {\n            stack.values = values;\n            value = applyStack(stack, parsedValue, this._cachedMeta.index);\n        }\n        range.min = Math.min(range.min, value);\n        range.max = Math.max(range.max, value);\n    }\n getMinMax(scale, canStack) {\n        const meta = this._cachedMeta;\n        const _parsed = meta._parsed;\n        const sorted = meta._sorted && scale === meta.iScale;\n        const ilen = _parsed.length;\n        const otherScale = this._getOtherScale(scale);\n        const stack = createStack(canStack, meta, this.chart);\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);\n        let i, parsed;\n        function _skip() {\n            parsed = _parsed[i];\n            const otherValue = parsed[otherScale.axis];\n            return !helpers_dataset.isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n        }\n        for(i = 0; i < ilen; ++i){\n            if (_skip()) {\n                continue;\n            }\n            this.updateRangeFromParsed(range, scale, parsed, stack);\n            if (sorted) {\n                break;\n            }\n        }\n        if (sorted) {\n            for(i = ilen - 1; i >= 0; --i){\n                if (_skip()) {\n                    continue;\n                }\n                this.updateRangeFromParsed(range, scale, parsed, stack);\n                break;\n            }\n        }\n        return range;\n    }\n    getAllParsedValues(scale) {\n        const parsed = this._cachedMeta._parsed;\n        const values = [];\n        let i, ilen, value;\n        for(i = 0, ilen = parsed.length; i < ilen; ++i){\n            value = parsed[i][scale.axis];\n            if (helpers_dataset.isNumberFinite(value)) {\n                values.push(value);\n            }\n        }\n        return values;\n    }\n getMaxOverflow() {\n        return false;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const vScale = meta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n        };\n    }\n _update(mode) {\n        const meta = this._cachedMeta;\n        this.update(mode || 'default');\n        meta._clip = toClip(helpers_dataset.valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n    }\n update(mode) {}\n    draw() {\n        const ctx = this._ctx;\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const elements = meta.data || [];\n        const area = chart.chartArea;\n        const active = [];\n        const start = this._drawStart || 0;\n        const count = this._drawCount || elements.length - start;\n        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n        let i;\n        if (meta.dataset) {\n            meta.dataset.draw(ctx, area, start, count);\n        }\n        for(i = start; i < start + count; ++i){\n            const element = elements[i];\n            if (element.hidden) {\n                continue;\n            }\n            if (element.active && drawActiveElementsOnTop) {\n                active.push(element);\n            } else {\n                element.draw(ctx, area);\n            }\n        }\n        for(i = 0; i < active.length; ++i){\n            active[i].draw(ctx, area);\n        }\n    }\n getStyle(index, active) {\n        const mode = active ? 'active' : 'default';\n        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n    }\n getContext(index, active, mode) {\n        const dataset = this.getDataset();\n        let context;\n        if (index >= 0 && index < this._cachedMeta.data.length) {\n            const element = this._cachedMeta.data[index];\n            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n            context.parsed = this.getParsed(index);\n            context.raw = dataset.data[index];\n            context.index = context.dataIndex = index;\n        } else {\n            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n            context.dataset = dataset;\n            context.index = context.datasetIndex = this.index;\n        }\n        context.active = !!active;\n        context.mode = mode;\n        return context;\n    }\n resolveDatasetElementOptions(mode) {\n        return this._resolveElementOptions(this.datasetElementType.id, mode);\n    }\n resolveDataElementOptions(index, mode) {\n        return this._resolveElementOptions(this.dataElementType.id, mode, index);\n    }\n _resolveElementOptions(elementType, mode = 'default', index) {\n        const active = mode === 'active';\n        const cache = this._cachedDataOpts;\n        const cacheKey = elementType + '-' + mode;\n        const cached = cache[cacheKey];\n        const sharing = this.enableOptionSharing && helpers_dataset.defined(index);\n        if (cached) {\n            return cloneIfNotShared(cached, sharing);\n        }\n        const config = this.chart.config;\n        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n        const prefixes = active ? [\n            `${elementType}Hover`,\n            'hover',\n            elementType,\n            ''\n        ] : [\n            elementType,\n            ''\n        ];\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n        const names = Object.keys(helpers_dataset.defaults.elements[elementType]);\n        const context = ()=>this.getContext(index, active, mode);\n        const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n        if (values.$shared) {\n            values.$shared = sharing;\n            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n        }\n        return values;\n    }\n _resolveAnimations(index, transition, active) {\n        const chart = this.chart;\n        const cache = this._cachedDataOpts;\n        const cacheKey = `animation-${transition}`;\n        const cached = cache[cacheKey];\n        if (cached) {\n            return cached;\n        }\n        let options;\n        if (chart.options.animation !== false) {\n            const config = this.chart.config;\n            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n            options = config.createResolver(scopes, this.getContext(index, active, transition));\n        }\n        const animations = new Animations(chart, options && options.animations);\n        if (options && options._cacheable) {\n            cache[cacheKey] = Object.freeze(animations);\n        }\n        return animations;\n    }\n getSharedOptions(options) {\n        if (!options.$shared) {\n            return;\n        }\n        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n    }\n includeOptions(mode, sharedOptions) {\n        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n    }\n _getSharedOptions(start, mode) {\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const previouslySharedOptions = this._sharedOptions;\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n        return {\n            sharedOptions,\n            includeOptions\n        };\n    }\n updateElement(element, index, properties, mode) {\n        if (isDirectUpdateMode(mode)) {\n            Object.assign(element, properties);\n        } else {\n            this._resolveAnimations(index, mode).update(element, properties);\n        }\n    }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n        if (sharedOptions && !isDirectUpdateMode(mode)) {\n            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n        }\n    }\n _setStyle(element, index, mode, active) {\n        element.active = active;\n        const options = this.getStyle(index, active);\n        this._resolveAnimations(index, mode, active).update(element, {\n            options: !active && this.getSharedOptions(options) || options\n        });\n    }\n    removeHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', false);\n    }\n    setHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', true);\n    }\n _removeDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', false);\n        }\n    }\n _setDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', true);\n        }\n    }\n _resyncElements(resetNewElements) {\n        const data = this._data;\n        const elements = this._cachedMeta.data;\n        for (const [method, arg1, arg2] of this._syncList){\n            this[method](arg1, arg2);\n        }\n        this._syncList = [];\n        const numMeta = elements.length;\n        const numData = data.length;\n        const count = Math.min(numData, numMeta);\n        if (count) {\n            this.parse(0, count);\n        }\n        if (numData > numMeta) {\n            this._insertElements(numMeta, numData - numMeta, resetNewElements);\n        } else if (numData < numMeta) {\n            this._removeElements(numData, numMeta - numData);\n        }\n    }\n _insertElements(start, count, resetNewElements = true) {\n        const meta = this._cachedMeta;\n        const data = meta.data;\n        const end = start + count;\n        let i;\n        const move = (arr)=>{\n            arr.length += count;\n            for(i = arr.length - 1; i >= end; i--){\n                arr[i] = arr[i - count];\n            }\n        };\n        move(data);\n        for(i = start; i < end; ++i){\n            data[i] = new this.dataElementType();\n        }\n        if (this._parsing) {\n            move(meta._parsed);\n        }\n        this.parse(start, count);\n        if (resetNewElements) {\n            this.updateElements(data, start, count, 'reset');\n        }\n    }\n    updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n        const meta = this._cachedMeta;\n        if (this._parsing) {\n            const removed = meta._parsed.splice(start, count);\n            if (meta._stacked) {\n                clearStacks(meta, removed);\n            }\n        }\n        meta.data.splice(start, count);\n    }\n _sync(args) {\n        if (this._parsing) {\n            this._syncList.push(args);\n        } else {\n            const [method, arg1, arg2] = args;\n            this[method](arg1, arg2);\n        }\n        this.chart._dataChanges.push([\n            this.index,\n            ...args\n        ]);\n    }\n    _onDataPush() {\n        const count = arguments.length;\n        this._sync([\n            '_insertElements',\n            this.getDataset().data.length - count,\n            count\n        ]);\n    }\n    _onDataPop() {\n        this._sync([\n            '_removeElements',\n            this._cachedMeta.data.length - 1,\n            1\n        ]);\n    }\n    _onDataShift() {\n        this._sync([\n            '_removeElements',\n            0,\n            1\n        ]);\n    }\n    _onDataSplice(start, count) {\n        if (count) {\n            this._sync([\n                '_removeElements',\n                start,\n                count\n            ]);\n        }\n        const newCount = arguments.length - 2;\n        if (newCount) {\n            this._sync([\n                '_insertElements',\n                start,\n                newCount\n            ]);\n        }\n    }\n    _onDataUnshift() {\n        this._sync([\n            '_insertElements',\n            0,\n            arguments.length\n        ]);\n    }\n}\n\nfunction getAllScaleValues(scale, type) {\n    if (!scale._cache.$bar) {\n        const visibleMetas = scale.getMatchingVisibleMetas(type);\n        let values = [];\n        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n        }\n        scale._cache.$bar = helpers_dataset._arrayUnique(values.sort((a, b)=>a - b));\n    }\n    return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n    const scale = meta.iScale;\n    const values = getAllScaleValues(scale, meta.type);\n    let min = scale._length;\n    let i, ilen, curr, prev;\n    const updateMinAndPrev = ()=>{\n        if (curr === 32767 || curr === -32768) {\n            return;\n        }\n        if (helpers_dataset.defined(prev)) {\n            min = Math.min(min, Math.abs(curr - prev) || min);\n        }\n        prev = curr;\n    };\n    for(i = 0, ilen = values.length; i < ilen; ++i){\n        curr = scale.getPixelForValue(values[i]);\n        updateMinAndPrev();\n    }\n    prev = undefined;\n    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n        curr = scale.getPixelForTick(i);\n        updateMinAndPrev();\n    }\n    return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n    const thickness = options.barThickness;\n    let size, ratio;\n    if (helpers_dataset.isNullOrUndef(thickness)) {\n        size = ruler.min * options.categoryPercentage;\n        ratio = options.barPercentage;\n    } else {\n        size = thickness * stackCount;\n        ratio = 1;\n    }\n    return {\n        chunk: size / stackCount,\n        ratio,\n        start: ruler.pixels[index] - size / 2\n    };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n    const pixels = ruler.pixels;\n    const curr = pixels[index];\n    let prev = index > 0 ? pixels[index - 1] : null;\n    let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    const percent = options.categoryPercentage;\n    if (prev === null) {\n        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n    if (next === null) {\n        next = curr + curr - prev;\n    }\n    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    const size = Math.abs(next - prev) / 2 * percent;\n    return {\n        chunk: size / stackCount,\n        ratio: options.barPercentage,\n        start\n    };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n    const startValue = vScale.parse(entry[0], i);\n    const endValue = vScale.parse(entry[1], i);\n    const min = Math.min(startValue, endValue);\n    const max = Math.max(startValue, endValue);\n    let barStart = min;\n    let barEnd = max;\n    if (Math.abs(min) > Math.abs(max)) {\n        barStart = max;\n        barEnd = min;\n    }\n    item[vScale.axis] = barEnd;\n    item._custom = {\n        barStart,\n        barEnd,\n        start: startValue,\n        end: endValue,\n        min,\n        max\n    };\n}\nfunction parseValue(entry, item, vScale, i) {\n    if (helpers_dataset.isArray(entry)) {\n        parseFloatBar(entry, item, vScale, i);\n    } else {\n        item[vScale.axis] = vScale.parse(entry, i);\n    }\n    return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = [];\n    let i, ilen, item, entry;\n    for(i = start, ilen = start + count; i < ilen; ++i){\n        entry = data[i];\n        item = {};\n        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n        parsed.push(parseValue(entry, item, vScale, i));\n    }\n    return parsed;\n}\nfunction isFloatBar(custom) {\n    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n    if (size !== 0) {\n        return helpers_dataset.sign(size);\n    }\n    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n    let reverse, start, end, top, bottom;\n    if (properties.horizontal) {\n        reverse = properties.base > properties.x;\n        start = 'left';\n        end = 'right';\n    } else {\n        reverse = properties.base < properties.y;\n        start = 'bottom';\n        end = 'top';\n    }\n    if (reverse) {\n        top = 'end';\n        bottom = 'start';\n    } else {\n        top = 'start';\n        bottom = 'end';\n    }\n    return {\n        start,\n        end,\n        reverse,\n        top,\n        bottom\n    };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n    let edge = options.borderSkipped;\n    const res = {};\n    if (!edge) {\n        properties.borderSkipped = res;\n        return;\n    }\n    if (edge === true) {\n        properties.borderSkipped = {\n            top: true,\n            right: true,\n            bottom: true,\n            left: true\n        };\n        return;\n    }\n    const { start , end , reverse , top , bottom  } = borderProps(properties);\n    if (edge === 'middle' && stack) {\n        properties.enableBorderRadius = true;\n        if ((stack._top || 0) === index) {\n            edge = top;\n        } else if ((stack._bottom || 0) === index) {\n            edge = bottom;\n        } else {\n            res[parseEdge(bottom, start, end, reverse)] = true;\n            edge = top;\n        }\n    }\n    res[parseEdge(edge, start, end, reverse)] = true;\n    properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n    if (reverse) {\n        edge = swap(edge, a, b);\n        edge = startEnd(edge, b, a);\n    } else {\n        edge = startEnd(edge, a, b);\n    }\n    return edge;\n}\nfunction swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n    return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount  }, ratio) {\n    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n    static id = 'bar';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'bar',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        grouped: true,\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'base',\n                    'width',\n                    'height'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category',\n                offset: true,\n                grid: {\n                    offset: true\n                }\n            },\n            _value_: {\n                type: 'linear',\n                beginAtZero: true\n            }\n        }\n    };\n parsePrimitiveData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseArrayData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseObjectData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const parsed = [];\n        let i, ilen, item, obj;\n        for(i = start, ilen = start + count; i < ilen; ++i){\n            obj = data[i];\n            item = {};\n            item[iScale.axis] = iScale.parse(helpers_dataset.resolveObjectKey(obj, iAxisKey), i);\n            parsed.push(parseValue(helpers_dataset.resolveObjectKey(obj, vAxisKey), item, vScale, i));\n        }\n        return parsed;\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        super.updateRangeFromParsed(range, scale, parsed, stack);\n        const custom = parsed._custom;\n        if (custom && scale === this._cachedMeta.vScale) {\n            range.min = Math.min(range.min, custom.min);\n            range.max = Math.max(range.max, custom.max);\n        }\n    }\n getMaxOverflow() {\n        return 0;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const { iScale , vScale  } = meta;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n        return {\n            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n            value\n        };\n    }\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n        const meta = this._cachedMeta;\n        meta.stack = this.getDataset().stack;\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        this.updateElements(meta.data, 0, meta.data.length, mode);\n    }\n    updateElements(bars, start, count, mode) {\n        const reset = mode === 'reset';\n        const { index , _cachedMeta: { vScale  }  } = this;\n        const base = vScale.getBasePixel();\n        const horizontal = vScale.isHorizontal();\n        const ruler = this._getRuler();\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        for(let i = start; i < start + count; i++){\n            const parsed = this.getParsed(i);\n            const vpixels = reset || helpers_dataset.isNullOrUndef(parsed[vScale.axis]) ? {\n                base,\n                head: base\n            } : this._calculateBarValuePixels(i);\n            const ipixels = this._calculateBarIndexPixels(i, ruler);\n            const stack = (parsed._stacks || {})[vScale.axis];\n            const properties = {\n                horizontal,\n                base: vpixels.base,\n                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n                x: horizontal ? vpixels.head : ipixels.center,\n                y: horizontal ? ipixels.center : vpixels.head,\n                height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n                width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n            }\n            const options = properties.options || bars[i].options;\n            setBorderSkipped(properties, options, stack, index);\n            setInflateAmount(properties, options, ruler.ratio);\n            this.updateElement(bars[i], i, properties, mode);\n        }\n    }\n _getStacks(last, dataIndex) {\n        const { iScale  } = this._cachedMeta;\n        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n        const stacked = iScale.options.stacked;\n        const stacks = [];\n        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n        const iScaleValue = currentParsed && currentParsed[iScale.axis];\n        const skipNull = (meta)=>{\n            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n            const val = parsed && parsed[meta.vScale.axis];\n            if (helpers_dataset.isNullOrUndef(val) || isNaN(val)) {\n                return true;\n            }\n        };\n        for (const meta of metasets){\n            if (dataIndex !== undefined && skipNull(meta)) {\n                continue;\n            }\n            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n                stacks.push(meta.stack);\n            }\n            if (meta.index === last) {\n                break;\n            }\n        }\n        if (!stacks.length) {\n            stacks.push(undefined);\n        }\n        return stacks;\n    }\n _getStackCount(index) {\n        return this._getStacks(undefined, index).length;\n    }\n    _getAxisCount() {\n        return this._getAxis().length;\n    }\n    getFirstScaleIdForIndexAxis() {\n        const scales = this.chart.scales;\n        const indexScaleId = this.chart.options.indexAxis;\n        return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();\n    }\n    _getAxis() {\n        const axis = {};\n        const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n        for (const dataset of this.chart.data.datasets){\n            axis[helpers_dataset.valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n        }\n        return Object.keys(axis);\n    }\n _getStackIndex(datasetIndex, name, dataIndex) {\n        const stacks = this._getStacks(datasetIndex, dataIndex);\n        const index = name !== undefined ? stacks.indexOf(name) : -1;\n        return index === -1 ? stacks.length - 1 : index;\n    }\n _getRuler() {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const pixels = [];\n        let i, ilen;\n        for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n        }\n        const barThickness = opts.barThickness;\n        const min = barThickness || computeMinSampleSize(meta);\n        return {\n            min,\n            pixels,\n            start: iScale._startPixel,\n            end: iScale._endPixel,\n            stackCount: this._getStackCount(),\n            scale: iScale,\n            grouped: opts.grouped,\n            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n        };\n    }\n _calculateBarValuePixels(index) {\n        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;\n        const actualBase = baseValue || 0;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const floating = isFloatBar(custom);\n        let value = parsed[vScale.axis];\n        let start = 0;\n        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n        let head, size;\n        if (length !== value) {\n            start = length - value;\n            length = value;\n        }\n        if (floating) {\n            value = custom.barStart;\n            length = custom.barEnd - custom.barStart;\n            if (value !== 0 && helpers_dataset.sign(value) !== helpers_dataset.sign(custom.barEnd)) {\n                start = 0;\n            }\n            start += value;\n        }\n        const startValue = !helpers_dataset.isNullOrUndef(baseValue) && !floating ? baseValue : start;\n        let base = vScale.getPixelForValue(startValue);\n        if (this.chart.getDataVisibility(index)) {\n            head = vScale.getPixelForValue(start + length);\n        } else {\n            head = base;\n        }\n        size = head - base;\n        if (Math.abs(size) < minBarLength) {\n            size = barSign(size, vScale, actualBase) * minBarLength;\n            if (value === actualBase) {\n                base -= size / 2;\n            }\n            const startPixel = vScale.getPixelForDecimal(0);\n            const endPixel = vScale.getPixelForDecimal(1);\n            const min = Math.min(startPixel, endPixel);\n            const max = Math.max(startPixel, endPixel);\n            base = Math.max(Math.min(base, max), min);\n            head = base + size;\n            if (_stacked && !floating) {\n                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n            }\n        }\n        if (base === vScale.getPixelForValue(actualBase)) {\n            const halfGrid = helpers_dataset.sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n            base += halfGrid;\n            size -= halfGrid;\n        }\n        return {\n            size,\n            base,\n            head,\n            center: head + size / 2\n        };\n    }\n _calculateBarIndexPixels(index, ruler) {\n        const scale = ruler.scale;\n        const options = this.options;\n        const skipNull = options.skipNull;\n        const maxBarThickness = helpers_dataset.valueOrDefault(options.maxBarThickness, Infinity);\n        let center, size;\n        const axisCount = this._getAxisCount();\n        if (ruler.grouped) {\n            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n            const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n            const axisNumber = this._getAxis().indexOf(helpers_dataset.valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n            center = range.start + range.chunk * stackIndex + range.chunk / 2;\n            size = Math.min(maxBarThickness, range.chunk * range.ratio);\n        } else {\n            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n        }\n        return {\n            base: center - size / 2,\n            head: center + size / 2,\n            center,\n            size\n        };\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        const vScale = meta.vScale;\n        const rects = meta.data;\n        const ilen = rects.length;\n        let i = 0;\n        for(; i < ilen; ++i){\n            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n                rects[i].draw(this._ctx);\n            }\n        }\n    }\n}\n\nclass BubbleController extends DatasetController {\n    static id = 'bubble';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'borderWidth',\n                    'radius'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const parsed = super.parsePrimitiveData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const parsed = super.parseArrayData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = helpers_dataset.valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const parsed = super.parseObjectData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = helpers_dataset.valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n getMaxOverflow() {\n        const data = this._cachedMeta.data;\n        let max = 0;\n        for(let i = data.length - 1; i >= 0; --i){\n            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n        }\n        return max > 0 && max;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        const r = parsed._custom;\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n        };\n    }\n    update(mode) {\n        const points = this._cachedMeta.data;\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const parsed = !reset && this.getParsed(i);\n            const properties = {};\n            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel);\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n                if (reset) {\n                    properties.options.radius = 0;\n                }\n            }\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n resolveDataElementOptions(index, mode) {\n        const parsed = this.getParsed(index);\n        let values = super.resolveDataElementOptions(index, mode);\n        if (values.$shared) {\n            values = Object.assign({}, values, {\n                $shared: false\n            });\n        }\n        const radius = values.radius;\n        if (mode !== 'active') {\n            values.radius = 0;\n        }\n        values.radius += helpers_dataset.valueOrDefault(parsed && parsed._custom, radius);\n        return values;\n    }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n    let ratioX = 1;\n    let ratioY = 1;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (circumference < helpers_dataset.TAU) {\n        const startAngle = rotation;\n        const endAngle = startAngle + circumference;\n        const startX = Math.cos(startAngle);\n        const startY = Math.sin(startAngle);\n        const endX = Math.cos(endAngle);\n        const endY = Math.sin(endAngle);\n        const calcMax = (angle, a, b)=>helpers_dataset._angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n        const calcMin = (angle, a, b)=>helpers_dataset._angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n        const maxX = calcMax(0, startX, endX);\n        const maxY = calcMax(helpers_dataset.HALF_PI, startY, endY);\n        const minX = calcMin(helpers_dataset.PI, startX, endX);\n        const minY = calcMin(helpers_dataset.PI + helpers_dataset.HALF_PI, startY, endY);\n        ratioX = (maxX - minX) / 2;\n        ratioY = (maxY - minY) / 2;\n        offsetX = -(maxX + minX) / 2;\n        offsetY = -(maxY + minY) / 2;\n    }\n    return {\n        ratioX,\n        ratioY,\n        offsetX,\n        offsetY\n    };\n}\nclass DoughnutController extends DatasetController {\n    static id = 'doughnut';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: false\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'circumference',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius',\n                    'startAngle',\n                    'x',\n                    'y',\n                    'offset',\n                    'borderWidth',\n                    'spacing'\n                ]\n            }\n        },\n        cutout: '50%',\n        rotation: 0,\n        circumference: 360,\n        radius: '100%',\n        spacing: 0,\n        indexAxis: 'r'\n    };\n    static descriptors = {\n        _scriptable: (name)=>name !== 'spacing',\n        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        const { labels: { pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                        if (data.labels.length && data.datasets.length) {\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    fontColor: color,\n                                    hidden: !chart.getDataVisibility(i),\n                                    lineDash: style.borderDash,\n                                    lineDashOffset: style.borderDashOffset,\n                                    lineJoin: style.borderJoinStyle,\n                                    lineWidth: style.borderWidth,\n                                    strokeStyle: style.borderColor,\n                                    textAlign: textAlign,\n                                    pointStyle: pointStyle,\n                                    borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.enableOptionSharing = true;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.offsetX = undefined;\n        this.offsetY = undefined;\n    }\n    linkScales() {}\n parse(start, count) {\n        const data = this.getDataset().data;\n        const meta = this._cachedMeta;\n        if (this._parsing === false) {\n            meta._parsed = data;\n        } else {\n            let getter = (i)=>+data[i];\n            if (helpers_dataset.isObject(data[start])) {\n                const { key ='value'  } = this._parsing;\n                getter = (i)=>+helpers_dataset.resolveObjectKey(data[i], key);\n            }\n            let i, ilen;\n            for(i = start, ilen = start + count; i < ilen; ++i){\n                meta._parsed[i] = getter(i);\n            }\n        }\n    }\n _getRotation() {\n        return helpers_dataset.toRadians(this.options.rotation - 90);\n    }\n _getCircumference() {\n        return helpers_dataset.toRadians(this.options.circumference);\n    }\n _getRotationExtents() {\n        let min = helpers_dataset.TAU;\n        let max = -helpers_dataset.TAU;\n        for(let i = 0; i < this.chart.data.datasets.length; ++i){\n            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n                const controller = this.chart.getDatasetMeta(i).controller;\n                const rotation = controller._getRotation();\n                const circumference = controller._getCircumference();\n                min = Math.min(min, rotation);\n                max = Math.max(max, rotation + circumference);\n            }\n        }\n        return {\n            rotation: min,\n            circumference: max - min\n        };\n    }\n update(mode) {\n        const chart = this.chart;\n        const { chartArea  } = chart;\n        const meta = this._cachedMeta;\n        const arcs = meta.data;\n        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n        const cutout = Math.min(helpers_dataset.toPercentage(this.options.cutout, maxSize), 1);\n        const chartWeight = this._getRingWeight(this.index);\n        const { circumference , rotation  } = this._getRotationExtents();\n        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);\n        const maxWidth = (chartArea.width - spacing) / ratioX;\n        const maxHeight = (chartArea.height - spacing) / ratioY;\n        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n        const outerRadius = helpers_dataset.toDimension(this.options.radius, maxRadius);\n        const innerRadius = Math.max(outerRadius * cutout, 0);\n        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n        this.offsetX = offsetX * outerRadius;\n        this.offsetY = offsetY * outerRadius;\n        meta.total = this.calculateTotal();\n        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n _circumference(i, reset) {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const circumference = this._getCircumference();\n        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n            return 0;\n        }\n        return this.calculateCircumference(meta._parsed[i] * circumference / helpers_dataset.TAU);\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const centerX = (chartArea.left + chartArea.right) / 2;\n        const centerY = (chartArea.top + chartArea.bottom) / 2;\n        const animateScale = reset && animationOpts.animateScale;\n        const innerRadius = animateScale ? 0 : this.innerRadius;\n        const outerRadius = animateScale ? 0 : this.outerRadius;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        let startAngle = this._getRotation();\n        let i;\n        for(i = 0; i < start; ++i){\n            startAngle += this._circumference(i, reset);\n        }\n        for(i = start; i < start + count; ++i){\n            const circumference = this._circumference(i, reset);\n            const arc = arcs[i];\n            const properties = {\n                x: centerX + this.offsetX,\n                y: centerY + this.offsetY,\n                startAngle,\n                endAngle: startAngle + circumference,\n                circumference,\n                outerRadius,\n                innerRadius\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n            }\n            startAngle += circumference;\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    calculateTotal() {\n        const meta = this._cachedMeta;\n        const metaData = meta.data;\n        let total = 0;\n        let i;\n        for(i = 0; i < metaData.length; i++){\n            const value = meta._parsed[i];\n            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n                total += Math.abs(value);\n            }\n        }\n        return total;\n    }\n    calculateCircumference(value) {\n        const total = this._cachedMeta.total;\n        if (total > 0 && !isNaN(value)) {\n            return helpers_dataset.TAU * (Math.abs(value) / total);\n        }\n        return 0;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = helpers_dataset.formatNumber(meta._parsed[index], chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    getMaxBorderWidth(arcs) {\n        let max = 0;\n        const chart = this.chart;\n        let i, ilen, meta, controller, options;\n        if (!arcs) {\n            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n                if (chart.isDatasetVisible(i)) {\n                    meta = chart.getDatasetMeta(i);\n                    arcs = meta.data;\n                    controller = meta.controller;\n                    break;\n                }\n            }\n        }\n        if (!arcs) {\n            return 0;\n        }\n        for(i = 0, ilen = arcs.length; i < ilen; ++i){\n            options = controller.resolveDataElementOptions(i);\n            if (options.borderAlign !== 'inner') {\n                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n            }\n        }\n        return max;\n    }\n    getMaxOffset(arcs) {\n        let max = 0;\n        for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n            const options = this.resolveDataElementOptions(i);\n            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n        }\n        return max;\n    }\n _getRingWeightOffset(datasetIndex) {\n        let ringWeightOffset = 0;\n        for(let i = 0; i < datasetIndex; ++i){\n            if (this.chart.isDatasetVisible(i)) {\n                ringWeightOffset += this._getRingWeight(i);\n            }\n        }\n        return ringWeightOffset;\n    }\n _getRingWeight(datasetIndex) {\n        return Math.max(helpers_dataset.valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n    }\n _getVisibleDatasetWeightTotal() {\n        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n    }\n}\n\nclass LineController extends DatasetController {\n    static id = 'line';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        showLine: true,\n        spanGaps: false\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category'\n            },\n            _value_: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        this.supportsDecimation = true;\n        super.initialize();\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { dataset: line , data: points = [] , _dataset  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = helpers_dataset._getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (helpers_dataset._scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        line._chart = this.chart;\n        line._datasetIndex = this.index;\n        line._decimated = !!_dataset._decimated;\n        line.points = points;\n        const options = this.resolveDatasetElementOptions(mode);\n        if (!this.options.showLine) {\n            options.borderWidth = 0;\n        }\n        options.segment = this.options.segment;\n        this.updateElement(line, undefined, {\n            animated: !animationsDisabled,\n            options\n        }, mode);\n        this.updateElements(points, start, count, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = helpers_dataset.isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        const end = start + count;\n        const pointsCount = points.length;\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = 0; i < pointsCount; ++i){\n            const point = points[i];\n            const properties = directUpdate ? point : {};\n            if (i < start || i >= end) {\n                properties.skip = true;\n                continue;\n            }\n            const parsed = this.getParsed(i);\n            const nullData = helpers_dataset.isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        const data = meta.data || [];\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n        super.draw();\n    }\n}\n\nclass PolarAreaController extends DatasetController {\n    static id = 'polarArea';\n static defaults = {\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: true\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'startAngle',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius'\n                ]\n            }\n        },\n        indexAxis: 'r',\n        startAngle: 0\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        },\n        scales: {\n            r: {\n                type: 'radialLinear',\n                angleLines: {\n                    display: false\n                },\n                beginAtZero: true,\n                grid: {\n                    circular: true\n                },\n                pointLabels: {\n                    display: false\n                },\n                startAngle: 0\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = helpers_dataset.formatNumber(meta._parsed[index].r, chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return helpers_dataset._parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const arcs = this._cachedMeta.data;\n        this._updateRadius();\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n getMinMax() {\n        const meta = this._cachedMeta;\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        meta.data.forEach((element, index)=>{\n            const parsed = this.getParsed(index).r;\n            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n                if (parsed < range.min) {\n                    range.min = parsed;\n                }\n                if (parsed > range.max) {\n                    range.max = parsed;\n                }\n            }\n        });\n        return range;\n    }\n _updateRadius() {\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n        const outerRadius = Math.max(minSize / 2, 0);\n        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n        this.outerRadius = outerRadius - radiusLength * this.index;\n        this.innerRadius = this.outerRadius - radiusLength;\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const scale = this._cachedMeta.rScale;\n        const centerX = scale.xCenter;\n        const centerY = scale.yCenter;\n        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * helpers_dataset.PI;\n        let angle = datasetStartAngle;\n        let i;\n        const defaultAngle = 360 / this.countVisibleElements();\n        for(i = 0; i < start; ++i){\n            angle += this._computeAngle(i, mode, defaultAngle);\n        }\n        for(i = start; i < start + count; i++){\n            const arc = arcs[i];\n            let startAngle = angle;\n            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n            angle = endAngle;\n            if (reset) {\n                if (animationOpts.animateScale) {\n                    outerRadius = 0;\n                }\n                if (animationOpts.animateRotate) {\n                    startAngle = endAngle = datasetStartAngle;\n                }\n            }\n            const properties = {\n                x: centerX,\n                y: centerY,\n                innerRadius: 0,\n                outerRadius,\n                startAngle,\n                endAngle,\n                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n            };\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    countVisibleElements() {\n        const meta = this._cachedMeta;\n        let count = 0;\n        meta.data.forEach((element, index)=>{\n            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n                count++;\n            }\n        });\n        return count;\n    }\n _computeAngle(index, mode, defaultAngle) {\n        return this.chart.getDataVisibility(index) ? helpers_dataset.toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n    }\n}\n\nclass PieController extends DoughnutController {\n    static id = 'pie';\n static defaults = {\n        cutout: 0,\n        rotation: 0,\n        circumference: 360,\n        radius: '100%'\n    };\n}\n\nclass RadarController extends DatasetController {\n    static id = 'radar';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        indexAxis: 'r',\n        showLine: true,\n        elements: {\n            line: {\n                fill: 'start'\n            }\n        }\n    };\n static overrides = {\n        aspectRatio: 1,\n        scales: {\n            r: {\n                type: 'radialLinear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const vScale = this._cachedMeta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: vScale.getLabels()[index],\n            value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return helpers_dataset._parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const line = meta.dataset;\n        const points = meta.data || [];\n        const labels = meta.iScale.getLabels();\n        line.points = points;\n        if (mode !== 'resize') {\n            const options = this.resolveDatasetElementOptions(mode);\n            if (!this.options.showLine) {\n                options.borderWidth = 0;\n            }\n            const properties = {\n                _loop: true,\n                _fullLoop: labels.length === points.length,\n                options\n            };\n            this.updateElement(line, undefined, properties, mode);\n        }\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const scale = this._cachedMeta.rScale;\n        const reset = mode === 'reset';\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n            const x = reset ? scale.xCenter : pointPosition.x;\n            const y = reset ? scale.yCenter : pointPosition.y;\n            const properties = {\n                x,\n                y,\n                angle: pointPosition.angle,\n                skip: isNaN(x) || isNaN(y),\n                options\n            };\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n}\n\nclass ScatterController extends DatasetController {\n    static id = 'scatter';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        showLine: false,\n        fill: false\n    };\n static overrides = {\n        interaction: {\n            mode: 'point'\n        },\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + ')'\n        };\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { data: points = []  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = helpers_dataset._getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (helpers_dataset._scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        if (this.options.showLine) {\n            if (!this.datasetElementType) {\n                this.addElements();\n            }\n            const { dataset: line , _dataset  } = meta;\n            line._chart = this.chart;\n            line._datasetIndex = this.index;\n            line._decimated = !!_dataset._decimated;\n            line.points = points;\n            const options = this.resolveDatasetElementOptions(mode);\n            options.segment = this.options.segment;\n            this.updateElement(line, undefined, {\n                animated: !animationsDisabled,\n                options\n            }, mode);\n        } else if (this.datasetElementType) {\n            delete meta.dataset;\n            this.datasetElementType = false;\n        }\n        this.updateElements(points, start, count, mode);\n    }\n    addElements() {\n        const { showLine  } = this.options;\n        if (!this.datasetElementType && showLine) {\n            this.datasetElementType = this.chart.registry.getElement('line');\n        }\n        super.addElements();\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = helpers_dataset.isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = start; i < start + count; ++i){\n            const point = points[i];\n            const parsed = this.getParsed(i);\n            const properties = directUpdate ? point : {};\n            const nullData = helpers_dataset.isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const data = meta.data || [];\n        if (!this.options.showLine) {\n            let max = 0;\n            for(let i = data.length - 1; i >= 0; --i){\n                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n            }\n            return max > 0 && max;\n        }\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n    /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */ static override(members) {\n        Object.assign(DateAdapterBase.prototype, members);\n    }\n    options;\n    constructor(options){\n        this.options = options || {};\n    }\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    init() {}\n    formats() {\n        return abstract();\n    }\n    parse() {\n        return abstract();\n    }\n    format() {\n        return abstract();\n    }\n    add() {\n        return abstract();\n    }\n    diff() {\n        return abstract();\n    }\n    startOf() {\n        return abstract();\n    }\n    endOf() {\n        return abstract();\n    }\n}\nvar adapters = {\n    _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n    const { controller , data , _sorted  } = metaset;\n    const iScale = controller._cachedMeta.iScale;\n    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n        const lookupMethod = iScale._reversePixels ? helpers_dataset._rlookupByKey : helpers_dataset._lookupByKey;\n        if (!intersect) {\n            const result = lookupMethod(data, axis, value);\n            if (spanGaps) {\n                const { vScale  } = controller._cachedMeta;\n                const { _parsed  } = metaset;\n                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!helpers_dataset.isNullOrUndef(point[vScale.axis]));\n                result.lo -= Math.max(0, distanceToDefinedLo);\n                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!helpers_dataset.isNullOrUndef(point[vScale.axis]));\n                result.hi += Math.max(0, distanceToDefinedHi);\n            }\n            return result;\n        } else if (controller._sharedOptions) {\n            const el = data[0];\n            const range = typeof el.getRange === 'function' && el.getRange(axis);\n            if (range) {\n                const start = lookupMethod(data, axis, value - range);\n                const end = lookupMethod(data, axis, value + range);\n                return {\n                    lo: start.lo,\n                    hi: end.hi\n                };\n            }\n        }\n    }\n    return {\n        lo: 0,\n        hi: data.length - 1\n    };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const value = position[axis];\n    for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n        const { index , data  } = metasets[i];\n        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);\n        for(let j = lo; j <= hi; ++j){\n            const element = data[j];\n            if (!element.skip) {\n                handler(element, index, j);\n            }\n        }\n    }\n}\n function getDistanceMetricForAxis(axis) {\n    const useX = axis.indexOf('x') !== -1;\n    const useY = axis.indexOf('y') !== -1;\n    return function(pt1, pt2) {\n        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n    const items = [];\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return items;\n    }\n    const evaluationFunc = function(element, datasetIndex, index) {\n        if (!includeInvisible && !helpers_dataset._isPointInArea(element, chart.chartArea, 0)) {\n            return;\n        }\n        if (element.inRange(position.x, position.y, useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    };\n    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n    return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n    let items = [];\n    function evaluationFunc(element, datasetIndex, index) {\n        const { startAngle , endAngle  } = element.getProps([\n            'startAngle',\n            'endAngle'\n        ], useFinalPosition);\n        const { angle  } = helpers_dataset.getAngleFromPoint(element, {\n            x: position.x,\n            y: position.y\n        });\n        if (helpers_dataset._angleBetween(angle, startAngle, endAngle)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    let items = [];\n    const distanceMetric = getDistanceMetricForAxis(axis);\n    let minDistance = Number.POSITIVE_INFINITY;\n    function evaluationFunc(element, datasetIndex, index) {\n        const inRange = element.inRange(position.x, position.y, useFinalPosition);\n        if (intersect && !inRange) {\n            return;\n        }\n        const center = element.getCenterPoint(useFinalPosition);\n        const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n        if (!pointInArea && !inRange) {\n            return;\n        }\n        const distance = distanceMetric(position, center);\n        if (distance < minDistance) {\n            items = [\n                {\n                    element,\n                    datasetIndex,\n                    index\n                }\n            ];\n            minDistance = distance;\n        } else if (distance === minDistance) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return [];\n    }\n    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n    const items = [];\n    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n    let intersectsItem = false;\n    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n        }\n    });\n    if (intersect && !intersectsItem) {\n        return [];\n    }\n    return items;\n}\n var Interaction = {\n    evaluateInteractionItems,\n    modes: {\n index (chart, e, options, useFinalPosition) {\n            const position = helpers_dataset.getRelativePosition(e, chart);\n            const axis = options.axis || 'x';\n            const includeInvisible = options.includeInvisible || false;\n            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            const elements = [];\n            if (!items.length) {\n                return [];\n            }\n            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n                const index = items[0].index;\n                const element = meta.data[index];\n                if (element && !element.skip) {\n                    elements.push({\n                        element,\n                        datasetIndex: meta.index,\n                        index\n                    });\n                }\n            });\n            return elements;\n        },\n dataset (chart, e, options, useFinalPosition) {\n            const position = helpers_dataset.getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            if (items.length > 0) {\n                const datasetIndex = items[0].datasetIndex;\n                const data = chart.getDatasetMeta(datasetIndex).data;\n                items = [];\n                for(let i = 0; i < data.length; ++i){\n                    items.push({\n                        element: data[i],\n                        datasetIndex,\n                        index: i\n                    });\n                }\n            }\n            return items;\n        },\n point (chart, e, options, useFinalPosition) {\n            const position = helpers_dataset.getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n        },\n nearest (chart, e, options, useFinalPosition) {\n            const position = helpers_dataset.getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n        },\n x (chart, e, options, useFinalPosition) {\n            const position = helpers_dataset.getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n        },\n y (chart, e, options, useFinalPosition) {\n            const position = helpers_dataset.getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n        }\n    }\n};\n\nconst STATIC_POSITIONS = [\n    'left',\n    'top',\n    'right',\n    'bottom'\n];\nfunction filterByPosition(array, position) {\n    return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n    return array.sort((a, b)=>{\n        const v0 = reverse ? b : a;\n        const v1 = reverse ? a : b;\n        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n    });\n}\nfunction wrapBoxes(boxes) {\n    const layoutBoxes = [];\n    let i, ilen, box, pos, stack, stackWeight;\n    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n        box = boxes[i];\n        ({ position: pos , options: { stack , stackWeight =1  }  } = box);\n        layoutBoxes.push({\n            index: i,\n            box,\n            pos,\n            horizontal: box.isHorizontal(),\n            weight: box.weight,\n            stack: stack && pos + stack,\n            stackWeight\n        });\n    }\n    return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n    const stacks = {};\n    for (const wrap of layouts){\n        const { stack , pos , stackWeight  } = wrap;\n        if (!stack || !STATIC_POSITIONS.includes(pos)) {\n            continue;\n        }\n        const _stack = stacks[stack] || (stacks[stack] = {\n            count: 0,\n            placed: 0,\n            weight: 0,\n            size: 0\n        });\n        _stack.count++;\n        _stack.weight += stackWeight;\n    }\n    return stacks;\n}\n function setLayoutDims(layouts, params) {\n    const stacks = buildStacks(layouts);\n    const { vBoxMaxWidth , hBoxMaxHeight  } = params;\n    let i, ilen, layout;\n    for(i = 0, ilen = layouts.length; i < ilen; ++i){\n        layout = layouts[i];\n        const { fullSize  } = layout.box;\n        const stack = stacks[layout.stack];\n        const factor = stack && layout.stackWeight / stack.weight;\n        if (layout.horizontal) {\n            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n            layout.height = hBoxMaxHeight;\n        } else {\n            layout.width = vBoxMaxWidth;\n            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n        }\n    }\n    return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n    const layoutBoxes = wrapBoxes(boxes);\n    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n    return {\n        fullSize,\n        leftAndTop: left.concat(top),\n        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n        chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n        vertical: left.concat(right).concat(centerVertical),\n        horizontal: top.concat(bottom).concat(centerHorizontal)\n    };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n    const { pos , box  } = layout;\n    const maxPadding = chartArea.maxPadding;\n    if (!helpers_dataset.isObject(pos)) {\n        if (layout.size) {\n            chartArea[pos] -= layout.size;\n        }\n        const stack = stacks[layout.stack] || {\n            size: 0,\n            count: 1\n        };\n        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n        layout.size = stack.size / stack.count;\n        chartArea[pos] += layout.size;\n    }\n    if (box.getPadding) {\n        updateMaxPadding(maxPadding, box.getPadding());\n    }\n    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n    const widthChanged = newWidth !== chartArea.w;\n    const heightChanged = newHeight !== chartArea.h;\n    chartArea.w = newWidth;\n    chartArea.h = newHeight;\n    return layout.horizontal ? {\n        same: widthChanged,\n        other: heightChanged\n    } : {\n        same: heightChanged,\n        other: widthChanged\n    };\n}\nfunction handleMaxPadding(chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function updatePos(pos) {\n        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n        chartArea[pos] += change;\n        return change;\n    }\n    chartArea.y += updatePos('top');\n    chartArea.x += updatePos('left');\n    updatePos('right');\n    updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function marginForPositions(positions) {\n        const margin = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0\n        };\n        positions.forEach((pos)=>{\n            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n        });\n        return margin;\n    }\n    return horizontal ? marginForPositions([\n        'left',\n        'right'\n    ]) : marginForPositions([\n        'top',\n        'bottom'\n    ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n    const refitBoxes = [];\n    let i, ilen, layout, box, refit, changed;\n    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n        layout = boxes[i];\n        box = layout.box;\n        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n        const { same , other  } = updateDims(chartArea, params, layout, stacks);\n        refit |= same && refitBoxes.length;\n        changed = changed || other;\n        if (!box.fullSize) {\n            refitBoxes.push(layout);\n        }\n    }\n    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n    box.top = top;\n    box.left = left;\n    box.right = left + width;\n    box.bottom = top + height;\n    box.width = width;\n    box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n    const userPadding = params.padding;\n    let { x , y  } = chartArea;\n    for (const layout of boxes){\n        const box = layout.box;\n        const stack = stacks[layout.stack] || {\n            count: 1,\n            placed: 0,\n            weight: 1\n        };\n        const weight = layout.stackWeight / stack.weight || 1;\n        if (layout.horizontal) {\n            const width = chartArea.w * weight;\n            const height = stack.size || box.height;\n            if (helpers_dataset.defined(stack.start)) {\n                y = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n            } else {\n                setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n            }\n            stack.start = y;\n            stack.placed += width;\n            y = box.bottom;\n        } else {\n            const height = chartArea.h * weight;\n            const width = stack.size || box.width;\n            if (helpers_dataset.defined(stack.start)) {\n                x = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n            } else {\n                setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n            }\n            stack.start = x;\n            stack.placed += height;\n            x = box.right;\n        }\n    }\n    chartArea.x = x;\n    chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n        if (!chart.boxes) {\n            chart.boxes = [];\n        }\n        item.fullSize = item.fullSize || false;\n        item.position = item.position || 'top';\n        item.weight = item.weight || 0;\n        item._layers = item._layers || function() {\n            return [\n                {\n                    z: 0,\n                    draw (chartArea) {\n                        item.draw(chartArea);\n                    }\n                }\n            ];\n        };\n        chart.boxes.push(item);\n    },\n removeBox (chart, layoutItem) {\n        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n        if (index !== -1) {\n            chart.boxes.splice(index, 1);\n        }\n    },\n configure (chart, item, options) {\n        item.fullSize = options.fullSize;\n        item.position = options.position;\n        item.weight = options.weight;\n    },\n update (chart, width, height, minPadding) {\n        if (!chart) {\n            return;\n        }\n        const padding = helpers_dataset.toPadding(chart.options.layout.padding);\n        const availableWidth = Math.max(width - padding.width, 0);\n        const availableHeight = Math.max(height - padding.height, 0);\n        const boxes = buildLayoutBoxes(chart.boxes);\n        const verticalBoxes = boxes.vertical;\n        const horizontalBoxes = boxes.horizontal;\n        helpers_dataset.each(chart.boxes, (box)=>{\n            if (typeof box.beforeLayout === 'function') {\n                box.beforeLayout();\n            }\n        });\n        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n        const params = Object.freeze({\n            outerWidth: width,\n            outerHeight: height,\n            padding,\n            availableWidth,\n            availableHeight,\n            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n            hBoxMaxHeight: availableHeight / 2\n        });\n        const maxPadding = Object.assign({}, padding);\n        updateMaxPadding(maxPadding, helpers_dataset.toPadding(minPadding));\n        const chartArea = Object.assign({\n            maxPadding,\n            w: availableWidth,\n            h: availableHeight,\n            x: padding.left,\n            y: padding.top\n        }, padding);\n        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n        fitBoxes(boxes.fullSize, chartArea, params, stacks);\n        fitBoxes(verticalBoxes, chartArea, params, stacks);\n        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n            fitBoxes(verticalBoxes, chartArea, params, stacks);\n        }\n        handleMaxPadding(chartArea);\n        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n        chartArea.x += chartArea.w;\n        chartArea.y += chartArea.h;\n        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n        chart.chartArea = {\n            left: chartArea.left,\n            top: chartArea.top,\n            right: chartArea.left + chartArea.w,\n            bottom: chartArea.top + chartArea.h,\n            height: chartArea.h,\n            width: chartArea.w\n        };\n        helpers_dataset.each(boxes.chartArea, (layout)=>{\n            const box = layout.box;\n            Object.assign(box, chart.chartArea);\n            box.update(chartArea.w, chartArea.h, {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0\n            });\n        });\n    }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n        return false;\n    }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n        return 1;\n    }\n getMaximumSize(element, width, height, aspectRatio) {\n        width = Math.max(0, width || element.width);\n        height = height || element.height;\n        return {\n            width,\n            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n        };\n    }\n isAttached(canvas) {\n        return true;\n    }\n updateConfig(config) {\n    }\n}\n\nclass BasicPlatform extends BasePlatform {\n    acquireContext(item) {\n        return item && item.getContext && item.getContext('2d') || null;\n    }\n    updateConfig(config) {\n        config.options.animation = false;\n    }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n    const style = canvas.style;\n    const renderHeight = canvas.getAttribute('height');\n    const renderWidth = canvas.getAttribute('width');\n    canvas[EXPANDO_KEY] = {\n        initial: {\n            height: renderHeight,\n            width: renderWidth,\n            style: {\n                display: style.display,\n                height: style.height,\n                width: style.width\n            }\n        }\n    };\n    style.display = style.display || 'block';\n    style.boxSizing = style.boxSizing || 'border-box';\n    if (isNullOrEmpty(renderWidth)) {\n        const displayWidth = helpers_dataset.readUsedSize(canvas, 'width');\n        if (displayWidth !== undefined) {\n            canvas.width = displayWidth;\n        }\n    }\n    if (isNullOrEmpty(renderHeight)) {\n        if (canvas.style.height === '') {\n            canvas.height = canvas.width / (aspectRatio || 2);\n        } else {\n            const displayHeight = helpers_dataset.readUsedSize(canvas, 'height');\n            if (displayHeight !== undefined) {\n                canvas.height = displayHeight;\n            }\n        }\n    }\n    return canvas;\n}\nconst eventListenerOptions = helpers_dataset.supportsEventListenerOptions ? {\n    passive: true\n} : false;\nfunction addListener(node, type, listener) {\n    if (node) {\n        node.addEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction removeListener(chart, type, listener) {\n    if (chart && chart.canvas) {\n        chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction fromNativeEvent(event, chart) {\n    const type = EVENT_TYPES[event.type] || event.type;\n    const { x , y  } = helpers_dataset.getRelativePosition(event, chart);\n    return {\n        type,\n        chart,\n        native: event,\n        x: x !== undefined ? x : null,\n        y: y !== undefined ? y : null\n    };\n}\nfunction nodeListContains(nodeList, canvas) {\n    for (const node of nodeList){\n        if (node === canvas || node.contains(canvas)) {\n            return true;\n        }\n    }\n}\nfunction createAttachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n    const dpr = window.devicePixelRatio;\n    if (dpr === oldDevicePixelRatio) {\n        return;\n    }\n    oldDevicePixelRatio = dpr;\n    drpListeningCharts.forEach((resize, chart)=>{\n        if (chart.currentDevicePixelRatio !== dpr) {\n            resize();\n        }\n    });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n    if (!drpListeningCharts.size) {\n        window.addEventListener('resize', onWindowResize);\n    }\n    drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n    drpListeningCharts.delete(chart);\n    if (!drpListeningCharts.size) {\n        window.removeEventListener('resize', onWindowResize);\n    }\n}\nfunction createResizeObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const container = canvas && helpers_dataset._getParentNode(canvas);\n    if (!container) {\n        return;\n    }\n    const resize = helpers_dataset.throttled((width, height)=>{\n        const w = container.clientWidth;\n        listener(width, height);\n        if (w < container.clientWidth) {\n            listener();\n        }\n    }, window);\n    const observer = new ResizeObserver((entries)=>{\n        const entry = entries[0];\n        const width = entry.contentRect.width;\n        const height = entry.contentRect.height;\n        if (width === 0 && height === 0) {\n            return;\n        }\n        resize(width, height);\n    });\n    observer.observe(container);\n    listenDevicePixelRatioChanges(chart, resize);\n    return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n    if (observer) {\n        observer.disconnect();\n    }\n    if (type === 'resize') {\n        unlistenDevicePixelRatioChanges(chart);\n    }\n}\nfunction createProxyAndListen(chart, type, listener) {\n    const canvas = chart.canvas;\n    const proxy = helpers_dataset.throttled((event)=>{\n        if (chart.ctx !== null) {\n            listener(fromNativeEvent(event, chart));\n        }\n    }, chart);\n    addListener(canvas, type, proxy);\n    return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n        const context = canvas && canvas.getContext && canvas.getContext('2d');\n        if (context && context.canvas === canvas) {\n            initCanvas(canvas, aspectRatio);\n            return context;\n        }\n        return null;\n    }\n releaseContext(context) {\n        const canvas = context.canvas;\n        if (!canvas[EXPANDO_KEY]) {\n            return false;\n        }\n        const initial = canvas[EXPANDO_KEY].initial;\n        [\n            'height',\n            'width'\n        ].forEach((prop)=>{\n            const value = initial[prop];\n            if (helpers_dataset.isNullOrUndef(value)) {\n                canvas.removeAttribute(prop);\n            } else {\n                canvas.setAttribute(prop, value);\n            }\n        });\n        const style = initial.style || {};\n        Object.keys(style).forEach((key)=>{\n            canvas.style[key] = style[key];\n        });\n        canvas.width = canvas.width;\n        delete canvas[EXPANDO_KEY];\n        return true;\n    }\n addEventListener(chart, type, listener) {\n        this.removeEventListener(chart, type);\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const handlers = {\n            attach: createAttachObserver,\n            detach: createDetachObserver,\n            resize: createResizeObserver\n        };\n        const handler = handlers[type] || createProxyAndListen;\n        proxies[type] = handler(chart, type, listener);\n    }\n removeEventListener(chart, type) {\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const proxy = proxies[type];\n        if (!proxy) {\n            return;\n        }\n        const handlers = {\n            attach: releaseObserver,\n            detach: releaseObserver,\n            resize: releaseObserver\n        };\n        const handler = handlers[type] || removeListener;\n        handler(chart, type, proxy);\n        proxies[type] = undefined;\n    }\n    getDevicePixelRatio() {\n        return window.devicePixelRatio;\n    }\n getMaximumSize(canvas, width, height, aspectRatio) {\n        return helpers_dataset.getMaximumSize(canvas, width, height, aspectRatio);\n    }\n isAttached(canvas) {\n        const container = canvas && helpers_dataset._getParentNode(canvas);\n        return !!(container && container.isConnected);\n    }\n}\n\nfunction _detectPlatform(canvas) {\n    if (!helpers_dataset._isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n        return BasicPlatform;\n    }\n    return DomPlatform;\n}\n\nclass Element {\n    static defaults = {};\n    static defaultRoutes = undefined;\n    x;\n    y;\n    active = false;\n    options;\n    $animations;\n    tooltipPosition(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    hasValue() {\n        return helpers_dataset.isNumber(this.x) && helpers_dataset.isNumber(this.y);\n    }\n    getProps(props, final) {\n        const anims = this.$animations;\n        if (!final || !anims) {\n            // let's not create an object, if not needed\n            return this;\n        }\n        const ret = {};\n        props.forEach((prop)=>{\n            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n        });\n        return ret;\n    }\n}\n\nfunction autoSkip(scale, ticks) {\n    const tickOpts = scale.options.ticks;\n    const determinedMaxTicks = determineMaxTicks(scale);\n    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n    const numMajorIndices = majorIndices.length;\n    const first = majorIndices[0];\n    const last = majorIndices[numMajorIndices - 1];\n    const newTicks = [];\n    if (numMajorIndices > ticksLimit) {\n        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n        return newTicks;\n    }\n    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n    if (numMajorIndices > 0) {\n        let i, ilen;\n        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n        skip(ticks, newTicks, spacing, helpers_dataset.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n        }\n        skip(ticks, newTicks, spacing, last, helpers_dataset.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n        return newTicks;\n    }\n    skip(ticks, newTicks, spacing);\n    return newTicks;\n}\nfunction determineMaxTicks(scale) {\n    const offset = scale.options.offset;\n    const tickLength = scale._tickSize();\n    const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n    const maxChart = scale._maxLength / tickLength;\n    return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n    const evenMajorSpacing = getEvenSpacing(majorIndices);\n    const spacing = ticks.length / ticksLimit;\n    if (!evenMajorSpacing) {\n        return Math.max(spacing, 1);\n    }\n    const factors = helpers_dataset._factorize(evenMajorSpacing);\n    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n        const factor = factors[i];\n        if (factor > spacing) {\n            return factor;\n        }\n    }\n    return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n    const result = [];\n    let i, ilen;\n    for(i = 0, ilen = ticks.length; i < ilen; i++){\n        if (ticks[i].major) {\n            result.push(i);\n        }\n    }\n    return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n    let count = 0;\n    let next = majorIndices[0];\n    let i;\n    spacing = Math.ceil(spacing);\n    for(i = 0; i < ticks.length; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = majorIndices[count * spacing];\n        }\n    }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n    const start = helpers_dataset.valueOrDefault(majorStart, 0);\n    const end = Math.min(helpers_dataset.valueOrDefault(majorEnd, ticks.length), ticks.length);\n    let count = 0;\n    let length, i, next;\n    spacing = Math.ceil(spacing);\n    if (majorEnd) {\n        length = majorEnd - majorStart;\n        spacing = length / Math.floor(length / spacing);\n    }\n    next = start;\n    while(next < 0){\n        count++;\n        next = Math.round(start + count * spacing);\n    }\n    for(i = Math.max(start, 0); i < end; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = Math.round(start + count * spacing);\n        }\n    }\n}\n function getEvenSpacing(arr) {\n    const len = arr.length;\n    let i, diff;\n    if (len < 2) {\n        return false;\n    }\n    for(diff = arr[0], i = 1; i < len; ++i){\n        if (arr[i] - arr[i - 1] !== diff) {\n            return false;\n        }\n    }\n    return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n    const result = [];\n    const increment = arr.length / numItems;\n    const len = arr.length;\n    let i = 0;\n    for(; i < len; i += increment){\n        result.push(arr[Math.floor(i)]);\n    }\n    return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n    const length = scale.ticks.length;\n    const validIndex = Math.min(index, length - 1);\n    const start = scale._startPixel;\n    const end = scale._endPixel;\n    const epsilon = 1e-6;\n    let lineValue = scale.getPixelForTick(validIndex);\n    let offset;\n    if (offsetGridLines) {\n        if (length === 1) {\n            offset = Math.max(lineValue - start, end - lineValue);\n        } else if (index === 0) {\n            offset = (scale.getPixelForTick(1) - lineValue) / 2;\n        } else {\n            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n        }\n        lineValue += validIndex < index ? offset : -offset;\n        if (lineValue < start - epsilon || lineValue > end + epsilon) {\n            return;\n        }\n    }\n    return lineValue;\n}\n function garbageCollect(caches, length) {\n    helpers_dataset.each(caches, (cache)=>{\n        const gc = cache.gc;\n        const gcLen = gc.length / 2;\n        let i;\n        if (gcLen > length) {\n            for(i = 0; i < gcLen; ++i){\n                delete cache.data[gc[i]];\n            }\n            gc.splice(0, gcLen);\n        }\n    });\n}\n function getTickMarkLength(options) {\n    return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n    if (!options.display) {\n        return 0;\n    }\n    const font = helpers_dataset.toFont(options.font, fallback);\n    const padding = helpers_dataset.toPadding(options.padding);\n    const lines = helpers_dataset.isArray(options.text) ? options.text.length : 1;\n    return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n    return helpers_dataset.createContext(parent, {\n        scale,\n        type: 'scale'\n    });\n}\nfunction createTickContext(parent, index, tick) {\n    return helpers_dataset.createContext(parent, {\n        tick,\n        index,\n        type: 'tick'\n    });\n}\nfunction titleAlign(align, position, reverse) {\n     let ret = helpers_dataset._toLeftRightCenter(align);\n    if (reverse && position !== 'right' || !reverse && position === 'right') {\n        ret = reverseAlign(ret);\n    }\n    return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n    const { top , left , bottom , right , chart  } = scale;\n    const { chartArea , scales  } = chart;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    const height = bottom - top;\n    const width = right - left;\n    if (scale.isHorizontal()) {\n        titleX = helpers_dataset._alignStartEnd(align, left, right);\n        if (helpers_dataset.isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n        } else if (position === 'center') {\n            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n        } else {\n            titleY = offsetFromEdge(scale, position, offset);\n        }\n        maxWidth = right - left;\n    } else {\n        if (helpers_dataset.isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n        } else if (position === 'center') {\n            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n        } else {\n            titleX = offsetFromEdge(scale, position, offset);\n        }\n        titleY = helpers_dataset._alignStartEnd(align, bottom, top);\n        rotation = position === 'left' ? -helpers_dataset.HALF_PI : helpers_dataset.HALF_PI;\n    }\n    return {\n        titleX,\n        titleY,\n        maxWidth,\n        rotation\n    };\n}\nclass Scale extends Element {\n    constructor(cfg){\n        super();\n         this.id = cfg.id;\n         this.type = cfg.type;\n         this.options = undefined;\n         this.ctx = cfg.ctx;\n         this.chart = cfg.chart;\n         this.top = undefined;\n         this.bottom = undefined;\n         this.left = undefined;\n         this.right = undefined;\n         this.width = undefined;\n         this.height = undefined;\n        this._margins = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        };\n         this.maxWidth = undefined;\n         this.maxHeight = undefined;\n         this.paddingTop = undefined;\n         this.paddingBottom = undefined;\n         this.paddingLeft = undefined;\n         this.paddingRight = undefined;\n         this.axis = undefined;\n         this.labelRotation = undefined;\n        this.min = undefined;\n        this.max = undefined;\n        this._range = undefined;\n         this.ticks = [];\n         this._gridLineItems = null;\n         this._labelItems = null;\n         this._labelSizes = null;\n        this._length = 0;\n        this._maxLength = 0;\n        this._longestTextCache = {};\n         this._startPixel = undefined;\n         this._endPixel = undefined;\n        this._reversePixels = false;\n        this._userMax = undefined;\n        this._userMin = undefined;\n        this._suggestedMax = undefined;\n        this._suggestedMin = undefined;\n        this._ticksLength = 0;\n        this._borderValue = 0;\n        this._cache = {};\n        this._dataLimitsCached = false;\n        this.$context = undefined;\n    }\n init(options) {\n        this.options = options.setContext(this.getContext());\n        this.axis = options.axis;\n        this._userMin = this.parse(options.min);\n        this._userMax = this.parse(options.max);\n        this._suggestedMin = this.parse(options.suggestedMin);\n        this._suggestedMax = this.parse(options.suggestedMax);\n    }\n parse(raw, index) {\n        return raw;\n    }\n getUserBounds() {\n        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;\n        _userMin = helpers_dataset.finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n        _userMax = helpers_dataset.finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n        _suggestedMin = helpers_dataset.finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n        _suggestedMax = helpers_dataset.finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n        return {\n            min: helpers_dataset.finiteOrDefault(_userMin, _suggestedMin),\n            max: helpers_dataset.finiteOrDefault(_userMax, _suggestedMax),\n            minDefined: helpers_dataset.isNumberFinite(_userMin),\n            maxDefined: helpers_dataset.isNumberFinite(_userMax)\n        };\n    }\n getMinMax(canStack) {\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n        let range;\n        if (minDefined && maxDefined) {\n            return {\n                min,\n                max\n            };\n        }\n        const metas = this.getMatchingVisibleMetas();\n        for(let i = 0, ilen = metas.length; i < ilen; ++i){\n            range = metas[i].controller.getMinMax(this, canStack);\n            if (!minDefined) {\n                min = Math.min(min, range.min);\n            }\n            if (!maxDefined) {\n                max = Math.max(max, range.max);\n            }\n        }\n        min = maxDefined && min > max ? max : min;\n        max = minDefined && min > max ? min : max;\n        return {\n            min: helpers_dataset.finiteOrDefault(min, helpers_dataset.finiteOrDefault(max, min)),\n            max: helpers_dataset.finiteOrDefault(max, helpers_dataset.finiteOrDefault(min, max))\n        };\n    }\n getPadding() {\n        return {\n            left: this.paddingLeft || 0,\n            top: this.paddingTop || 0,\n            right: this.paddingRight || 0,\n            bottom: this.paddingBottom || 0\n        };\n    }\n getTicks() {\n        return this.ticks;\n    }\n getLabels() {\n        const data = this.chart.data;\n        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    }\n getLabelItems(chartArea = this.chart.chartArea) {\n        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n        return items;\n    }\n    beforeLayout() {\n        this._cache = {};\n        this._dataLimitsCached = false;\n    }\n    beforeUpdate() {\n        helpers_dataset.callback(this.options.beforeUpdate, [\n            this\n        ]);\n    }\n update(maxWidth, maxHeight, margins) {\n        const { beginAtZero , grace , ticks: tickOpts  } = this.options;\n        const sampleSize = tickOpts.sampleSize;\n        this.beforeUpdate();\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins = Object.assign({\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        }, margins);\n        this.ticks = null;\n        this._labelSizes = null;\n        this._gridLineItems = null;\n        this._labelItems = null;\n        this.beforeSetDimensions();\n        this.setDimensions();\n        this.afterSetDimensions();\n        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n        if (!this._dataLimitsCached) {\n            this.beforeDataLimits();\n            this.determineDataLimits();\n            this.afterDataLimits();\n            this._range = helpers_dataset._addGrace(this, grace, beginAtZero);\n            this._dataLimitsCached = true;\n        }\n        this.beforeBuildTicks();\n        this.ticks = this.buildTicks() || [];\n        this.afterBuildTicks();\n        const samplingEnabled = sampleSize < this.ticks.length;\n        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n        this.configure();\n        this.beforeCalculateLabelRotation();\n        this.calculateLabelRotation();\n        this.afterCalculateLabelRotation();\n        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n            this.ticks = autoSkip(this, this.ticks);\n            this._labelSizes = null;\n            this.afterAutoSkip();\n        }\n        if (samplingEnabled) {\n            this._convertTicksToLabels(this.ticks);\n        }\n        this.beforeFit();\n        this.fit();\n        this.afterFit();\n        this.afterUpdate();\n    }\n configure() {\n        let reversePixels = this.options.reverse;\n        let startPixel, endPixel;\n        if (this.isHorizontal()) {\n            startPixel = this.left;\n            endPixel = this.right;\n        } else {\n            startPixel = this.top;\n            endPixel = this.bottom;\n            reversePixels = !reversePixels;\n        }\n        this._startPixel = startPixel;\n        this._endPixel = endPixel;\n        this._reversePixels = reversePixels;\n        this._length = endPixel - startPixel;\n        this._alignToPixels = this.options.alignToPixels;\n    }\n    afterUpdate() {\n        helpers_dataset.callback(this.options.afterUpdate, [\n            this\n        ]);\n    }\n    beforeSetDimensions() {\n        helpers_dataset.callback(this.options.beforeSetDimensions, [\n            this\n        ]);\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = 0;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = 0;\n            this.bottom = this.height;\n        }\n        this.paddingLeft = 0;\n        this.paddingTop = 0;\n        this.paddingRight = 0;\n        this.paddingBottom = 0;\n    }\n    afterSetDimensions() {\n        helpers_dataset.callback(this.options.afterSetDimensions, [\n            this\n        ]);\n    }\n    _callHooks(name) {\n        this.chart.notifyPlugins(name, this.getContext());\n        helpers_dataset.callback(this.options[name], [\n            this\n        ]);\n    }\n    beforeDataLimits() {\n        this._callHooks('beforeDataLimits');\n    }\n    determineDataLimits() {}\n    afterDataLimits() {\n        this._callHooks('afterDataLimits');\n    }\n    beforeBuildTicks() {\n        this._callHooks('beforeBuildTicks');\n    }\n buildTicks() {\n        return [];\n    }\n    afterBuildTicks() {\n        this._callHooks('afterBuildTicks');\n    }\n    beforeTickToLabelConversion() {\n        helpers_dataset.callback(this.options.beforeTickToLabelConversion, [\n            this\n        ]);\n    }\n generateTickLabels(ticks) {\n        const tickOpts = this.options.ticks;\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            tick = ticks[i];\n            tick.label = helpers_dataset.callback(tickOpts.callback, [\n                tick.value,\n                i,\n                ticks\n            ], this);\n        }\n    }\n    afterTickToLabelConversion() {\n        helpers_dataset.callback(this.options.afterTickToLabelConversion, [\n            this\n        ]);\n    }\n    beforeCalculateLabelRotation() {\n        helpers_dataset.callback(this.options.beforeCalculateLabelRotation, [\n            this\n        ]);\n    }\n    calculateLabelRotation() {\n        const options = this.options;\n        const tickOpts = options.ticks;\n        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n        const minRotation = tickOpts.minRotation || 0;\n        const maxRotation = tickOpts.maxRotation;\n        let labelRotation = minRotation;\n        let tickWidth, maxHeight, maxLabelDiagonal;\n        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n            this.labelRotation = minRotation;\n            return;\n        }\n        const labelSizes = this._getLabelSizes();\n        const maxLabelWidth = labelSizes.widest.width;\n        const maxLabelHeight = labelSizes.highest.height;\n        const maxWidth = helpers_dataset._limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n        if (maxLabelWidth + 6 > tickWidth) {\n            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n            labelRotation = helpers_dataset.toDegrees(Math.min(Math.asin(helpers_dataset._limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(helpers_dataset._limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(helpers_dataset._limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n        }\n        this.labelRotation = labelRotation;\n    }\n    afterCalculateLabelRotation() {\n        helpers_dataset.callback(this.options.afterCalculateLabelRotation, [\n            this\n        ]);\n    }\n    afterAutoSkip() {}\n    beforeFit() {\n        helpers_dataset.callback(this.options.beforeFit, [\n            this\n        ]);\n    }\n    fit() {\n        const minSize = {\n            width: 0,\n            height: 0\n        };\n        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;\n        const display = this._isVisible();\n        const isHorizontal = this.isHorizontal();\n        if (display) {\n            const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n            if (isHorizontal) {\n                minSize.width = this.maxWidth;\n                minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n            } else {\n                minSize.height = this.maxHeight;\n                minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n            }\n            if (tickOpts.display && this.ticks.length) {\n                const { first , last , widest , highest  } = this._getLabelSizes();\n                const tickPadding = tickOpts.padding * 2;\n                const angleRadians = helpers_dataset.toRadians(this.labelRotation);\n                const cos = Math.cos(angleRadians);\n                const sin = Math.sin(angleRadians);\n                if (isHorizontal) {\n                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n                } else {\n                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n                }\n                this._calculatePadding(first, last, sin, cos);\n            }\n        }\n        this._handleMargins();\n        if (isHorizontal) {\n            this.width = this._length = chart.width - this._margins.left - this._margins.right;\n            this.height = minSize.height;\n        } else {\n            this.width = minSize.width;\n            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n        }\n    }\n    _calculatePadding(first, last, sin, cos) {\n        const { ticks: { align , padding  } , position  } = this.options;\n        const isRotated = this.labelRotation !== 0;\n        const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n        if (this.isHorizontal()) {\n            const offsetLeft = this.getPixelForTick(0) - this.left;\n            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n            let paddingLeft = 0;\n            let paddingRight = 0;\n            if (isRotated) {\n                if (labelsBelowTicks) {\n                    paddingLeft = cos * first.width;\n                    paddingRight = sin * last.height;\n                } else {\n                    paddingLeft = sin * first.height;\n                    paddingRight = cos * last.width;\n                }\n            } else if (align === 'start') {\n                paddingRight = last.width;\n            } else if (align === 'end') {\n                paddingLeft = first.width;\n            } else if (align !== 'inner') {\n                paddingLeft = first.width / 2;\n                paddingRight = last.width / 2;\n            }\n            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n        } else {\n            let paddingTop = last.height / 2;\n            let paddingBottom = first.height / 2;\n            if (align === 'start') {\n                paddingTop = 0;\n                paddingBottom = first.height;\n            } else if (align === 'end') {\n                paddingTop = last.height;\n                paddingBottom = 0;\n            }\n            this.paddingTop = paddingTop + padding;\n            this.paddingBottom = paddingBottom + padding;\n        }\n    }\n _handleMargins() {\n        if (this._margins) {\n            this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n            this._margins.top = Math.max(this.paddingTop, this._margins.top);\n            this._margins.right = Math.max(this.paddingRight, this._margins.right);\n            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n        }\n    }\n    afterFit() {\n        helpers_dataset.callback(this.options.afterFit, [\n            this\n        ]);\n    }\n isHorizontal() {\n        const { axis , position  } = this.options;\n        return position === 'top' || position === 'bottom' || axis === 'x';\n    }\n isFullSize() {\n        return this.options.fullSize;\n    }\n _convertTicksToLabels(ticks) {\n        this.beforeTickToLabelConversion();\n        this.generateTickLabels(ticks);\n        let i, ilen;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            if (helpers_dataset.isNullOrUndef(ticks[i].label)) {\n                ticks.splice(i, 1);\n                ilen--;\n                i--;\n            }\n        }\n        this.afterTickToLabelConversion();\n    }\n _getLabelSizes() {\n        let labelSizes = this._labelSizes;\n        if (!labelSizes) {\n            const sampleSize = this.options.ticks.sampleSize;\n            let ticks = this.ticks;\n            if (sampleSize < ticks.length) {\n                ticks = sample(ticks, sampleSize);\n            }\n            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n        }\n        return labelSizes;\n    }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n        const { ctx , _longestTextCache: caches  } = this;\n        const widths = [];\n        const heights = [];\n        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n        let widestLabelSize = 0;\n        let highestLabelSize = 0;\n        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n        for(i = 0; i < length; i += increment){\n            label = ticks[i].label;\n            tickFont = this._resolveTickFontOptions(i);\n            ctx.font = fontString = tickFont.string;\n            cache = caches[fontString] = caches[fontString] || {\n                data: {},\n                gc: []\n            };\n            lineHeight = tickFont.lineHeight;\n            width = height = 0;\n            if (!helpers_dataset.isNullOrUndef(label) && !helpers_dataset.isArray(label)) {\n                width = helpers_dataset._measureText(ctx, cache.data, cache.gc, width, label);\n                height = lineHeight;\n            } else if (helpers_dataset.isArray(label)) {\n                for(j = 0, jlen = label.length; j < jlen; ++j){\n                    nestedLabel =  label[j];\n                    if (!helpers_dataset.isNullOrUndef(nestedLabel) && !helpers_dataset.isArray(nestedLabel)) {\n                        width = helpers_dataset._measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n                        height += lineHeight;\n                    }\n                }\n            }\n            widths.push(width);\n            heights.push(height);\n            widestLabelSize = Math.max(width, widestLabelSize);\n            highestLabelSize = Math.max(height, highestLabelSize);\n        }\n        garbageCollect(caches, length);\n        const widest = widths.indexOf(widestLabelSize);\n        const highest = heights.indexOf(highestLabelSize);\n        const valueAt = (idx)=>({\n                width: widths[idx] || 0,\n                height: heights[idx] || 0\n            });\n        return {\n            first: valueAt(0),\n            last: valueAt(length - 1),\n            widest: valueAt(widest),\n            highest: valueAt(highest),\n            widths,\n            heights\n        };\n    }\n getLabelForValue(value) {\n        return value;\n    }\n getPixelForValue(value, index) {\n        return NaN;\n    }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n getPixelForDecimal(decimal) {\n        if (this._reversePixels) {\n            decimal = 1 - decimal;\n        }\n        const pixel = this._startPixel + decimal * this._length;\n        return helpers_dataset._int16Range(this._alignToPixels ? helpers_dataset._alignPixel(this.chart, pixel, 0) : pixel);\n    }\n getDecimalForPixel(pixel) {\n        const decimal = (pixel - this._startPixel) / this._length;\n        return this._reversePixels ? 1 - decimal : decimal;\n    }\n getBasePixel() {\n        return this.getPixelForValue(this.getBaseValue());\n    }\n getBaseValue() {\n        const { min , max  } = this;\n        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    }\n getContext(index) {\n        const ticks = this.ticks || [];\n        if (index >= 0 && index < ticks.length) {\n            const tick = ticks[index];\n            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n        }\n        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n    }\n _tickSize() {\n        const optionTicks = this.options.ticks;\n        const rot = helpers_dataset.toRadians(this.labelRotation);\n        const cos = Math.abs(Math.cos(rot));\n        const sin = Math.abs(Math.sin(rot));\n        const labelSizes = this._getLabelSizes();\n        const padding = optionTicks.autoSkipPadding || 0;\n        const w = labelSizes ? labelSizes.widest.width + padding : 0;\n        const h = labelSizes ? labelSizes.highest.height + padding : 0;\n        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    }\n _isVisible() {\n        const display = this.options.display;\n        if (display !== 'auto') {\n            return !!display;\n        }\n        return this.getMatchingVisibleMetas().length > 0;\n    }\n _computeGridLineItems(chartArea) {\n        const axis = this.axis;\n        const chart = this.chart;\n        const options = this.options;\n        const { grid , position , border  } = options;\n        const offset = grid.offset;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const ticksLength = ticks.length + (offset ? 1 : 0);\n        const tl = getTickMarkLength(grid);\n        const items = [];\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = borderOpts.display ? borderOpts.width : 0;\n        const axisHalfWidth = axisWidth / 2;\n        const alignBorderValue = function(pixel) {\n            return helpers_dataset._alignPixel(chart, pixel, axisWidth);\n        };\n        let borderValue, i, lineValue, alignedLineValue;\n        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n        if (position === 'top') {\n            borderValue = alignBorderValue(this.bottom);\n            ty1 = this.bottom - tl;\n            ty2 = borderValue - axisHalfWidth;\n            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n            y2 = chartArea.bottom;\n        } else if (position === 'bottom') {\n            borderValue = alignBorderValue(this.top);\n            y1 = chartArea.top;\n            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = this.top + tl;\n        } else if (position === 'left') {\n            borderValue = alignBorderValue(this.right);\n            tx1 = this.right - tl;\n            tx2 = borderValue - axisHalfWidth;\n            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n            x2 = chartArea.right;\n        } else if (position === 'right') {\n            borderValue = alignBorderValue(this.left);\n            x1 = chartArea.left;\n            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n            tx1 = borderValue + axisHalfWidth;\n            tx2 = this.left + tl;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n            } else if (helpers_dataset.isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            y1 = chartArea.top;\n            y2 = chartArea.bottom;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = ty1 + tl;\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n            } else if (helpers_dataset.isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            tx1 = borderValue - axisHalfWidth;\n            tx2 = tx1 - tl;\n            x1 = chartArea.left;\n            x2 = chartArea.right;\n        }\n        const limit = helpers_dataset.valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n        const step = Math.max(1, Math.ceil(ticksLength / limit));\n        for(i = 0; i < ticksLength; i += step){\n            const context = this.getContext(i);\n            const optsAtIndex = grid.setContext(context);\n            const optsAtIndexBorder = border.setContext(context);\n            const lineWidth = optsAtIndex.lineWidth;\n            const lineColor = optsAtIndex.color;\n            const borderDash = optsAtIndexBorder.dash || [];\n            const borderDashOffset = optsAtIndexBorder.dashOffset;\n            const tickWidth = optsAtIndex.tickWidth;\n            const tickColor = optsAtIndex.tickColor;\n            const tickBorderDash = optsAtIndex.tickBorderDash || [];\n            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n            lineValue = getPixelForGridLine(this, i, offset);\n            if (lineValue === undefined) {\n                continue;\n            }\n            alignedLineValue = helpers_dataset._alignPixel(chart, lineValue, lineWidth);\n            if (isHorizontal) {\n                tx1 = tx2 = x1 = x2 = alignedLineValue;\n            } else {\n                ty1 = ty2 = y1 = y2 = alignedLineValue;\n            }\n            items.push({\n                tx1,\n                ty1,\n                tx2,\n                ty2,\n                x1,\n                y1,\n                x2,\n                y2,\n                width: lineWidth,\n                color: lineColor,\n                borderDash,\n                borderDashOffset,\n                tickWidth,\n                tickColor,\n                tickBorderDash,\n                tickBorderDashOffset\n            });\n        }\n        this._ticksLength = ticksLength;\n        this._borderValue = borderValue;\n        return items;\n    }\n _computeLabelItems(chartArea) {\n        const axis = this.axis;\n        const options = this.options;\n        const { position , ticks: optionTicks  } = options;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const { align , crossAlign , padding , mirror  } = optionTicks;\n        const tl = getTickMarkLength(options.grid);\n        const tickAndPadding = tl + padding;\n        const hTickAndPadding = mirror ? -padding : tickAndPadding;\n        const rotation = -helpers_dataset.toRadians(this.labelRotation);\n        const items = [];\n        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n        let textBaseline = 'middle';\n        if (position === 'top') {\n            y = this.bottom - hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'bottom') {\n            y = this.top + hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'left') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (position === 'right') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n            } else if (helpers_dataset.isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n            }\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n            } else if (helpers_dataset.isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                x = this.chart.scales[positionAxisID].getPixelForValue(value);\n            }\n            textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n        }\n        if (axis === 'y') {\n            if (align === 'start') {\n                textBaseline = 'top';\n            } else if (align === 'end') {\n                textBaseline = 'bottom';\n            }\n        }\n        const labelSizes = this._getLabelSizes();\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            label = tick.label;\n            const optsAtIndex = optionTicks.setContext(this.getContext(i));\n            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n            font = this._resolveTickFontOptions(i);\n            lineHeight = font.lineHeight;\n            lineCount = helpers_dataset.isArray(label) ? label.length : 1;\n            const halfCount = lineCount / 2;\n            const color = optsAtIndex.color;\n            const strokeColor = optsAtIndex.textStrokeColor;\n            const strokeWidth = optsAtIndex.textStrokeWidth;\n            let tickTextAlign = textAlign;\n            if (isHorizontal) {\n                x = pixel;\n                if (textAlign === 'inner') {\n                    if (i === ilen - 1) {\n                        tickTextAlign = !this.options.reverse ? 'right' : 'left';\n                    } else if (i === 0) {\n                        tickTextAlign = !this.options.reverse ? 'left' : 'right';\n                    } else {\n                        tickTextAlign = 'center';\n                    }\n                }\n                if (position === 'top') {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = -lineCount * lineHeight + lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n                    } else {\n                        textOffset = -labelSizes.highest.height + lineHeight / 2;\n                    }\n                } else {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n                    } else {\n                        textOffset = labelSizes.highest.height - lineCount * lineHeight;\n                    }\n                }\n                if (mirror) {\n                    textOffset *= -1;\n                }\n                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n                    x += lineHeight / 2 * Math.sin(rotation);\n                }\n            } else {\n                y = pixel;\n                textOffset = (1 - lineCount) * lineHeight / 2;\n            }\n            let backdrop;\n            if (optsAtIndex.showLabelBackdrop) {\n                const labelPadding = helpers_dataset.toPadding(optsAtIndex.backdropPadding);\n                const height = labelSizes.heights[i];\n                const width = labelSizes.widths[i];\n                let top = textOffset - labelPadding.top;\n                let left = 0 - labelPadding.left;\n                switch(textBaseline){\n                    case 'middle':\n                        top -= height / 2;\n                        break;\n                    case 'bottom':\n                        top -= height;\n                        break;\n                }\n                switch(textAlign){\n                    case 'center':\n                        left -= width / 2;\n                        break;\n                    case 'right':\n                        left -= width;\n                        break;\n                    case 'inner':\n                        if (i === ilen - 1) {\n                            left -= width;\n                        } else if (i > 0) {\n                            left -= width / 2;\n                        }\n                        break;\n                }\n                backdrop = {\n                    left,\n                    top,\n                    width: width + labelPadding.width,\n                    height: height + labelPadding.height,\n                    color: optsAtIndex.backdropColor\n                };\n            }\n            items.push({\n                label,\n                font,\n                textOffset,\n                options: {\n                    rotation,\n                    color,\n                    strokeColor,\n                    strokeWidth,\n                    textAlign: tickTextAlign,\n                    textBaseline,\n                    translation: [\n                        x,\n                        y\n                    ],\n                    backdrop\n                }\n            });\n        }\n        return items;\n    }\n    _getXAxisLabelAlignment() {\n        const { position , ticks  } = this.options;\n        const rotation = -helpers_dataset.toRadians(this.labelRotation);\n        if (rotation) {\n            return position === 'top' ? 'left' : 'right';\n        }\n        let align = 'center';\n        if (ticks.align === 'start') {\n            align = 'left';\n        } else if (ticks.align === 'end') {\n            align = 'right';\n        } else if (ticks.align === 'inner') {\n            align = 'inner';\n        }\n        return align;\n    }\n    _getYAxisLabelAlignment(tl) {\n        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;\n        const labelSizes = this._getLabelSizes();\n        const tickAndPadding = tl + padding;\n        const widest = labelSizes.widest.width;\n        let textAlign;\n        let x;\n        if (position === 'left') {\n            if (mirror) {\n                x = this.right + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x += widest;\n                }\n            } else {\n                x = this.right - tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x = this.left;\n                }\n            }\n        } else if (position === 'right') {\n            if (mirror) {\n                x = this.left + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x -= widest;\n                }\n            } else {\n                x = this.left + tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x = this.right;\n                }\n            }\n        } else {\n            textAlign = 'right';\n        }\n        return {\n            textAlign,\n            x\n        };\n    }\n _computeLabelArea() {\n        if (this.options.ticks.mirror) {\n            return;\n        }\n        const chart = this.chart;\n        const position = this.options.position;\n        if (position === 'left' || position === 'right') {\n            return {\n                top: 0,\n                left: this.left,\n                bottom: chart.height,\n                right: this.right\n            };\n        }\n        if (position === 'top' || position === 'bottom') {\n            return {\n                top: this.top,\n                left: 0,\n                bottom: this.bottom,\n                right: chart.width\n            };\n        }\n    }\n drawBackground() {\n        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;\n        if (backgroundColor) {\n            ctx.save();\n            ctx.fillStyle = backgroundColor;\n            ctx.fillRect(left, top, width, height);\n            ctx.restore();\n        }\n    }\n    getLineWidthForValue(value) {\n        const grid = this.options.grid;\n        if (!this._isVisible() || !grid.display) {\n            return 0;\n        }\n        const ticks = this.ticks;\n        const index = ticks.findIndex((t)=>t.value === value);\n        if (index >= 0) {\n            const opts = grid.setContext(this.getContext(index));\n            return opts.lineWidth;\n        }\n        return 0;\n    }\n drawGrid(chartArea) {\n        const grid = this.options.grid;\n        const ctx = this.ctx;\n        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n        let i, ilen;\n        const drawLine = (p1, p2, style)=>{\n            if (!style.width || !style.color) {\n                return;\n            }\n            ctx.save();\n            ctx.lineWidth = style.width;\n            ctx.strokeStyle = style.color;\n            ctx.setLineDash(style.borderDash || []);\n            ctx.lineDashOffset = style.borderDashOffset;\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n            ctx.restore();\n        };\n        if (grid.display) {\n            for(i = 0, ilen = items.length; i < ilen; ++i){\n                const item = items[i];\n                if (grid.drawOnChartArea) {\n                    drawLine({\n                        x: item.x1,\n                        y: item.y1\n                    }, {\n                        x: item.x2,\n                        y: item.y2\n                    }, item);\n                }\n                if (grid.drawTicks) {\n                    drawLine({\n                        x: item.tx1,\n                        y: item.ty1\n                    }, {\n                        x: item.tx2,\n                        y: item.ty2\n                    }, {\n                        color: item.tickColor,\n                        width: item.tickWidth,\n                        borderDash: item.tickBorderDash,\n                        borderDashOffset: item.tickBorderDashOffset\n                    });\n                }\n            }\n        }\n    }\n drawBorder() {\n        const { chart , ctx , options: { border , grid  }  } = this;\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = border.display ? borderOpts.width : 0;\n        if (!axisWidth) {\n            return;\n        }\n        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n        const borderValue = this._borderValue;\n        let x1, x2, y1, y2;\n        if (this.isHorizontal()) {\n            x1 = helpers_dataset._alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n            x2 = helpers_dataset._alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n            y1 = y2 = borderValue;\n        } else {\n            y1 = helpers_dataset._alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n            y2 = helpers_dataset._alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n            x1 = x2 = borderValue;\n        }\n        ctx.save();\n        ctx.lineWidth = borderOpts.width;\n        ctx.strokeStyle = borderOpts.color;\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n        ctx.restore();\n    }\n drawLabels(chartArea) {\n        const optionTicks = this.options.ticks;\n        if (!optionTicks.display) {\n            return;\n        }\n        const ctx = this.ctx;\n        const area = this._computeLabelArea();\n        if (area) {\n            helpers_dataset.clipArea(ctx, area);\n        }\n        const items = this.getLabelItems(chartArea);\n        for (const item of items){\n            const renderTextOptions = item.options;\n            const tickFont = item.font;\n            const label = item.label;\n            const y = item.textOffset;\n            helpers_dataset.renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n        }\n        if (area) {\n            helpers_dataset.unclipArea(ctx);\n        }\n    }\n drawTitle() {\n        const { ctx , options: { position , title , reverse  }  } = this;\n        if (!title.display) {\n            return;\n        }\n        const font = helpers_dataset.toFont(title.font);\n        const padding = helpers_dataset.toPadding(title.padding);\n        const align = title.align;\n        let offset = font.lineHeight / 2;\n        if (position === 'bottom' || position === 'center' || helpers_dataset.isObject(position)) {\n            offset += padding.bottom;\n            if (helpers_dataset.isArray(title.text)) {\n                offset += font.lineHeight * (title.text.length - 1);\n            }\n        } else {\n            offset += padding.top;\n        }\n        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);\n        helpers_dataset.renderText(ctx, title.text, 0, 0, font, {\n            color: title.color,\n            maxWidth,\n            rotation,\n            textAlign: titleAlign(align, position, reverse),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n    draw(chartArea) {\n        if (!this._isVisible()) {\n            return;\n        }\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawBorder();\n        this.drawTitle();\n        this.drawLabels(chartArea);\n    }\n _layers() {\n        const opts = this.options;\n        const tz = opts.ticks && opts.ticks.z || 0;\n        const gz = helpers_dataset.valueOrDefault(opts.grid && opts.grid.z, -1);\n        const bz = helpers_dataset.valueOrDefault(opts.border && opts.border.z, 0);\n        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n            return [\n                {\n                    z: tz,\n                    draw: (chartArea)=>{\n                        this.draw(chartArea);\n                    }\n                }\n            ];\n        }\n        return [\n            {\n                z: gz,\n                draw: (chartArea)=>{\n                    this.drawBackground();\n                    this.drawGrid(chartArea);\n                    this.drawTitle();\n                }\n            },\n            {\n                z: bz,\n                draw: ()=>{\n                    this.drawBorder();\n                }\n            },\n            {\n                z: tz,\n                draw: (chartArea)=>{\n                    this.drawLabels(chartArea);\n                }\n            }\n        ];\n    }\n getMatchingVisibleMetas(type) {\n        const metas = this.chart.getSortedVisibleDatasetMetas();\n        const axisID = this.axis + 'AxisID';\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            const meta = metas[i];\n            if (meta[axisID] === this.id && (!type || meta.type === type)) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n _resolveTickFontOptions(index) {\n        const opts = this.options.ticks.setContext(this.getContext(index));\n        return helpers_dataset.toFont(opts.font);\n    }\n _maxDigits() {\n        const fontSize = this._resolveTickFontOptions(0).lineHeight;\n        return (this.isHorizontal() ? this.width : this.height) / fontSize;\n    }\n}\n\nclass TypedRegistry {\n    constructor(type, scope, override){\n        this.type = type;\n        this.scope = scope;\n        this.override = override;\n        this.items = Object.create(null);\n    }\n    isForType(type) {\n        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n    }\n register(item) {\n        const proto = Object.getPrototypeOf(item);\n        let parentScope;\n        if (isIChartComponent(proto)) {\n            parentScope = this.register(proto);\n        }\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope + '.' + id;\n        if (!id) {\n            throw new Error('class does not have id: ' + item);\n        }\n        if (id in items) {\n            return scope;\n        }\n        items[id] = item;\n        registerDefaults(item, scope, parentScope);\n        if (this.override) {\n            helpers_dataset.defaults.override(item.id, item.overrides);\n        }\n        return scope;\n    }\n get(id) {\n        return this.items[id];\n    }\n unregister(item) {\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope;\n        if (id in items) {\n            delete items[id];\n        }\n        if (scope && id in helpers_dataset.defaults[scope]) {\n            delete helpers_dataset.defaults[scope][id];\n            if (this.override) {\n                delete helpers_dataset.overrides[id];\n            }\n        }\n    }\n}\nfunction registerDefaults(item, scope, parentScope) {\n    const itemDefaults = helpers_dataset.merge(Object.create(null), [\n        parentScope ? helpers_dataset.defaults.get(parentScope) : {},\n        helpers_dataset.defaults.get(scope),\n        item.defaults\n    ]);\n    helpers_dataset.defaults.set(scope, itemDefaults);\n    if (item.defaultRoutes) {\n        routeDefaults(scope, item.defaultRoutes);\n    }\n    if (item.descriptors) {\n        helpers_dataset.defaults.describe(scope, item.descriptors);\n    }\n}\nfunction routeDefaults(scope, routes) {\n    Object.keys(routes).forEach((property)=>{\n        const propertyParts = property.split('.');\n        const sourceName = propertyParts.pop();\n        const sourceScope = [\n            scope\n        ].concat(propertyParts).join('.');\n        const parts = routes[property].split('.');\n        const targetName = parts.pop();\n        const targetScope = parts.join('.');\n        helpers_dataset.defaults.route(sourceScope, sourceName, targetScope, targetName);\n    });\n}\nfunction isIChartComponent(proto) {\n    return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n    constructor(){\n        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n        this.elements = new TypedRegistry(Element, 'elements');\n        this.plugins = new TypedRegistry(Object, 'plugins');\n        this.scales = new TypedRegistry(Scale, 'scales');\n        this._typedRegistries = [\n            this.controllers,\n            this.scales,\n            this.elements\n        ];\n    }\n add(...args) {\n        this._each('register', args);\n    }\n    remove(...args) {\n        this._each('unregister', args);\n    }\n addControllers(...args) {\n        this._each('register', args, this.controllers);\n    }\n addElements(...args) {\n        this._each('register', args, this.elements);\n    }\n addPlugins(...args) {\n        this._each('register', args, this.plugins);\n    }\n addScales(...args) {\n        this._each('register', args, this.scales);\n    }\n getController(id) {\n        return this._get(id, this.controllers, 'controller');\n    }\n getElement(id) {\n        return this._get(id, this.elements, 'element');\n    }\n getPlugin(id) {\n        return this._get(id, this.plugins, 'plugin');\n    }\n getScale(id) {\n        return this._get(id, this.scales, 'scale');\n    }\n removeControllers(...args) {\n        this._each('unregister', args, this.controllers);\n    }\n removeElements(...args) {\n        this._each('unregister', args, this.elements);\n    }\n removePlugins(...args) {\n        this._each('unregister', args, this.plugins);\n    }\n removeScales(...args) {\n        this._each('unregister', args, this.scales);\n    }\n _each(method, args, typedRegistry) {\n        [\n            ...args\n        ].forEach((arg)=>{\n            const reg = typedRegistry || this._getRegistryForType(arg);\n            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n                this._exec(method, reg, arg);\n            } else {\n                helpers_dataset.each(arg, (item)=>{\n                    const itemReg = typedRegistry || this._getRegistryForType(item);\n                    this._exec(method, itemReg, item);\n                });\n            }\n        });\n    }\n _exec(method, registry, component) {\n        const camelMethod = helpers_dataset._capitalize(method);\n        helpers_dataset.callback(component['before' + camelMethod], [], component);\n        registry[method](component);\n        helpers_dataset.callback(component['after' + camelMethod], [], component);\n    }\n _getRegistryForType(type) {\n        for(let i = 0; i < this._typedRegistries.length; i++){\n            const reg = this._typedRegistries[i];\n            if (reg.isForType(type)) {\n                return reg;\n            }\n        }\n        return this.plugins;\n    }\n _get(id, typedRegistry, type) {\n        const item = typedRegistry.get(id);\n        if (item === undefined) {\n            throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n        }\n        return item;\n    }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n    constructor(){\n        this._init = undefined;\n    }\n notify(chart, hook, args, filter) {\n        if (hook === 'beforeInit') {\n            this._init = this._createDescriptors(chart, true);\n            this._notify(this._init, chart, 'install');\n        }\n        if (this._init === undefined) {\n            return;\n        }\n        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n        const result = this._notify(descriptors, chart, hook, args);\n        if (hook === 'afterDestroy') {\n            this._notify(descriptors, chart, 'stop');\n            this._notify(this._init, chart, 'uninstall');\n            this._init = undefined;\n        }\n        return result;\n    }\n _notify(descriptors, chart, hook, args) {\n        args = args || {};\n        for (const descriptor of descriptors){\n            const plugin = descriptor.plugin;\n            const method = plugin[hook];\n            const params = [\n                chart,\n                args,\n                descriptor.options\n            ];\n            if (helpers_dataset.callback(method, params, plugin) === false && args.cancelable) {\n                return false;\n            }\n        }\n        return true;\n    }\n    invalidate() {\n        if (!helpers_dataset.isNullOrUndef(this._cache)) {\n            this._oldCache = this._cache;\n            this._cache = undefined;\n        }\n    }\n _descriptors(chart) {\n        if (this._cache) {\n            return this._cache;\n        }\n        const descriptors = this._cache = this._createDescriptors(chart);\n        this._notifyStateChanges(chart);\n        return descriptors;\n    }\n    _createDescriptors(chart, all) {\n        const config = chart && chart.config;\n        const options = helpers_dataset.valueOrDefault(config.options && config.options.plugins, {});\n        const plugins = allPlugins(config);\n        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n    }\n _notifyStateChanges(chart) {\n        const previousDescriptors = this._oldCache || [];\n        const descriptors = this._cache;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n        this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n    }\n}\n function allPlugins(config) {\n    const localIds = {};\n    const plugins = [];\n    const keys = Object.keys(registry.plugins.items);\n    for(let i = 0; i < keys.length; i++){\n        plugins.push(registry.getPlugin(keys[i]));\n    }\n    const local = config.plugins || [];\n    for(let i = 0; i < local.length; i++){\n        const plugin = local[i];\n        if (plugins.indexOf(plugin) === -1) {\n            plugins.push(plugin);\n            localIds[plugin.id] = true;\n        }\n    }\n    return {\n        plugins,\n        localIds\n    };\n}\nfunction getOpts(options, all) {\n    if (!all && options === false) {\n        return null;\n    }\n    if (options === true) {\n        return {};\n    }\n    return options;\n}\nfunction createDescriptors(chart, { plugins , localIds  }, options, all) {\n    const result = [];\n    const context = chart.getContext();\n    for (const plugin of plugins){\n        const id = plugin.id;\n        const opts = getOpts(options[id], all);\n        if (opts === null) {\n            continue;\n        }\n        result.push({\n            plugin,\n            options: pluginOpts(chart.config, {\n                plugin,\n                local: localIds[id]\n            }, opts, context)\n        });\n    }\n    return result;\n}\nfunction pluginOpts(config, { plugin , local  }, opts, context) {\n    const keys = config.pluginScopeKeys(plugin);\n    const scopes = config.getOptionScopes(opts, keys);\n    if (local && plugin.defaults) {\n        scopes.push(plugin.defaults);\n    }\n    return config.createResolver(scopes, context, [\n        ''\n    ], {\n        scriptable: false,\n        indexable: false,\n        allKeys: true\n    });\n}\n\nfunction getIndexAxis(type, options) {\n    const datasetDefaults = helpers_dataset.defaults.datasets[type] || {};\n    const datasetOptions = (options.datasets || {})[type] || {};\n    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n    let axis = id;\n    if (id === '_index_') {\n        axis = indexAxis;\n    } else if (id === '_value_') {\n        axis = indexAxis === 'x' ? 'y' : 'x';\n    }\n    return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n    return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n    if (id === 'x' || id === 'y' || id === 'r') {\n        return id;\n    }\n}\nfunction axisFromPosition(position) {\n    if (position === 'top' || position === 'bottom') {\n        return 'x';\n    }\n    if (position === 'left' || position === 'right') {\n        return 'y';\n    }\n}\nfunction determineAxis(id, ...scaleOptions) {\n    if (idMatchesAxis(id)) {\n        return id;\n    }\n    for (const opts of scaleOptions){\n        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n        if (axis) {\n            return axis;\n        }\n    }\n    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n    if (dataset[axis + 'AxisID'] === id) {\n        return {\n            axis\n        };\n    }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n    if (config.data && config.data.datasets) {\n        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n        if (boundDs.length) {\n            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n        }\n    }\n    return {};\n}\nfunction mergeScaleConfig(config, options) {\n    const chartDefaults = helpers_dataset.overrides[config.type] || {\n        scales: {}\n    };\n    const configScales = options.scales || {};\n    const chartIndexAxis = getIndexAxis(config.type, options);\n    const scales = Object.create(null);\n    Object.keys(configScales).forEach((id)=>{\n        const scaleConf = configScales[id];\n        if (!helpers_dataset.isObject(scaleConf)) {\n            return console.error(`Invalid scale configuration for scale: ${id}`);\n        }\n        if (scaleConf._proxy) {\n            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n        }\n        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), helpers_dataset.defaults.scales[scaleConf.type]);\n        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n        const defaultScaleOptions = chartDefaults.scales || {};\n        scales[id] = helpers_dataset.mergeIf(Object.create(null), [\n            {\n                axis\n            },\n            scaleConf,\n            defaultScaleOptions[axis],\n            defaultScaleOptions[defaultId]\n        ]);\n    });\n    config.data.datasets.forEach((dataset)=>{\n        const type = dataset.type || config.type;\n        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n        const datasetDefaults = helpers_dataset.overrides[type] || {};\n        const defaultScaleOptions = datasetDefaults.scales || {};\n        Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n            const id = dataset[axis + 'AxisID'] || axis;\n            scales[id] = scales[id] || Object.create(null);\n            helpers_dataset.mergeIf(scales[id], [\n                {\n                    axis\n                },\n                configScales[id],\n                defaultScaleOptions[defaultID]\n            ]);\n        });\n    });\n    Object.keys(scales).forEach((key)=>{\n        const scale = scales[key];\n        helpers_dataset.mergeIf(scale, [\n            helpers_dataset.defaults.scales[scale.type],\n            helpers_dataset.defaults.scale\n        ]);\n    });\n    return scales;\n}\nfunction initOptions(config) {\n    const options = config.options || (config.options = {});\n    options.plugins = helpers_dataset.valueOrDefault(options.plugins, {});\n    options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n    data = data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    return data;\n}\nfunction initConfig(config) {\n    config = config || {};\n    config.data = initData(config.data);\n    initOptions(config);\n    return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n    let keys = keyCache.get(cacheKey);\n    if (!keys) {\n        keys = generate();\n        keyCache.set(cacheKey, keys);\n        keysCached.add(keys);\n    }\n    return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n    const opts = helpers_dataset.resolveObjectKey(obj, key);\n    if (opts !== undefined) {\n        set.add(opts);\n    }\n};\nclass Config {\n    constructor(config){\n        this._config = initConfig(config);\n        this._scopeCache = new Map();\n        this._resolverCache = new Map();\n    }\n    get platform() {\n        return this._config.platform;\n    }\n    get type() {\n        return this._config.type;\n    }\n    set type(type) {\n        this._config.type = type;\n    }\n    get data() {\n        return this._config.data;\n    }\n    set data(data) {\n        this._config.data = initData(data);\n    }\n    get options() {\n        return this._config.options;\n    }\n    set options(options) {\n        this._config.options = options;\n    }\n    get plugins() {\n        return this._config.plugins;\n    }\n    update() {\n        const config = this._config;\n        this.clearCache();\n        initOptions(config);\n    }\n    clearCache() {\n        this._scopeCache.clear();\n        this._resolverCache.clear();\n    }\n datasetScopeKeys(datasetType) {\n        return cachedKeys(datasetType, ()=>[\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetAnimationScopeKeys(datasetType, transition) {\n        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n                [\n                    `datasets.${datasetType}.transitions.${transition}`,\n                    `transitions.${transition}`\n                ],\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetElementScopeKeys(datasetType, elementType) {\n        return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n                [\n                    `datasets.${datasetType}.elements.${elementType}`,\n                    `datasets.${datasetType}`,\n                    `elements.${elementType}`,\n                    ''\n                ]\n            ]);\n    }\n pluginScopeKeys(plugin) {\n        const id = plugin.id;\n        const type = this.type;\n        return cachedKeys(`${type}-plugin-${id}`, ()=>[\n                [\n                    `plugins.${id}`,\n                    ...plugin.additionalOptionScopes || []\n                ]\n            ]);\n    }\n _cachedScopes(mainScope, resetCache) {\n        const _scopeCache = this._scopeCache;\n        let cache = _scopeCache.get(mainScope);\n        if (!cache || resetCache) {\n            cache = new Map();\n            _scopeCache.set(mainScope, cache);\n        }\n        return cache;\n    }\n getOptionScopes(mainScope, keyLists, resetCache) {\n        const { options , type  } = this;\n        const cache = this._cachedScopes(mainScope, resetCache);\n        const cached = cache.get(keyLists);\n        if (cached) {\n            return cached;\n        }\n        const scopes = new Set();\n        keyLists.forEach((keys)=>{\n            if (mainScope) {\n                scopes.add(mainScope);\n                keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n            }\n            keys.forEach((key)=>addIfFound(scopes, options, key));\n            keys.forEach((key)=>addIfFound(scopes, helpers_dataset.overrides[type] || {}, key));\n            keys.forEach((key)=>addIfFound(scopes, helpers_dataset.defaults, key));\n            keys.forEach((key)=>addIfFound(scopes, helpers_dataset.descriptors, key));\n        });\n        const array = Array.from(scopes);\n        if (array.length === 0) {\n            array.push(Object.create(null));\n        }\n        if (keysCached.has(keyLists)) {\n            cache.set(keyLists, array);\n        }\n        return array;\n    }\n chartOptionScopes() {\n        const { options , type  } = this;\n        return [\n            options,\n            helpers_dataset.overrides[type] || {},\n            helpers_dataset.defaults.datasets[type] || {},\n            {\n                type\n            },\n            helpers_dataset.defaults,\n            helpers_dataset.descriptors\n        ];\n    }\n resolveNamedOptions(scopes, names, context, prefixes = [\n        ''\n    ]) {\n        const result = {\n            $shared: true\n        };\n        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);\n        let options = resolver;\n        if (needContext(resolver, names)) {\n            result.$shared = false;\n            context = helpers_dataset.isFunction(context) ? context() : context;\n            const subResolver = this.createResolver(scopes, context, subPrefixes);\n            options = helpers_dataset._attachContext(resolver, context, subResolver);\n        }\n        for (const prop of names){\n            result[prop] = options[prop];\n        }\n        return result;\n    }\n createResolver(scopes, context, prefixes = [\n        ''\n    ], descriptorDefaults) {\n        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);\n        return helpers_dataset.isObject(context) ? helpers_dataset._attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n    }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n    let cache = resolverCache.get(scopes);\n    if (!cache) {\n        cache = new Map();\n        resolverCache.set(scopes, cache);\n    }\n    const cacheKey = prefixes.join();\n    let cached = cache.get(cacheKey);\n    if (!cached) {\n        const resolver = helpers_dataset._createResolver(scopes, prefixes);\n        cached = {\n            resolver,\n            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n        };\n        cache.set(cacheKey, cached);\n    }\n    return cached;\n}\nconst hasFunction = (value)=>helpers_dataset.isObject(value) && Object.getOwnPropertyNames(value).some((key)=>helpers_dataset.isFunction(value[key]));\nfunction needContext(proxy, names) {\n    const { isScriptable , isIndexable  } = helpers_dataset._descriptors(proxy);\n    for (const prop of names){\n        const scriptable = isScriptable(prop);\n        const indexable = isIndexable(prop);\n        const value = (indexable || scriptable) && proxy[prop];\n        if (scriptable && (helpers_dataset.isFunction(value) || hasFunction(value)) || indexable && helpers_dataset.isArray(value)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar version = \"4.5.1\";\n\nconst KNOWN_POSITIONS = [\n    'top',\n    'bottom',\n    'left',\n    'right',\n    'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n    return function(a, b) {\n        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n    };\n}\nfunction onAnimationsComplete(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    chart.notifyPlugins('afterRender');\n    helpers_dataset.callback(animationOptions && animationOptions.onComplete, [\n        context\n    ], chart);\n}\nfunction onAnimationProgress(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    helpers_dataset.callback(animationOptions && animationOptions.onProgress, [\n        context\n    ], chart);\n}\n function getCanvas(item) {\n    if (helpers_dataset._isDomSupported() && typeof item === 'string') {\n        item = document.getElementById(item);\n    } else if (item && item.length) {\n        item = item[0];\n    }\n    if (item && item.canvas) {\n        item = item.canvas;\n    }\n    return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n    const canvas = getCanvas(key);\n    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n    const keys = Object.keys(obj);\n    for (const key of keys){\n        const intKey = +key;\n        if (intKey >= start) {\n            const value = obj[key];\n            delete obj[key];\n            if (move > 0 || intKey > start) {\n                obj[intKey + move] = value;\n            }\n        }\n    }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n    if (!inChartArea || e.type === 'mouseout') {\n        return null;\n    }\n    if (isClick) {\n        return lastEvent;\n    }\n    return e;\n}\nclass Chart {\n    static defaults = helpers_dataset.defaults;\n    static instances = instances;\n    static overrides = helpers_dataset.overrides;\n    static registry = registry;\n    static version = version;\n    static getChart = getChart;\n    static register(...items) {\n        registry.add(...items);\n        invalidatePlugins();\n    }\n    static unregister(...items) {\n        registry.remove(...items);\n        invalidatePlugins();\n    }\n    constructor(item, userConfig){\n        const config = this.config = new Config(userConfig);\n        const initialCanvas = getCanvas(item);\n        const existingChart = getChart(initialCanvas);\n        if (existingChart) {\n            throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n        }\n        const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n        this.platform.updateConfig(config);\n        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n        const canvas = context && context.canvas;\n        const height = canvas && canvas.height;\n        const width = canvas && canvas.width;\n        this.id = helpers_dataset.uid();\n        this.ctx = context;\n        this.canvas = canvas;\n        this.width = width;\n        this.height = height;\n        this._options = options;\n        this._aspectRatio = this.aspectRatio;\n        this._layers = [];\n        this._metasets = [];\n        this._stacks = undefined;\n        this.boxes = [];\n        this.currentDevicePixelRatio = undefined;\n        this.chartArea = undefined;\n        this._active = [];\n        this._lastEvent = undefined;\n        this._listeners = {};\n         this._responsiveListeners = undefined;\n        this._sortedMetasets = [];\n        this.scales = {};\n        this._plugins = new PluginService();\n        this.$proxies = {};\n        this._hiddenIndices = {};\n        this.attached = false;\n        this._animationsDisabled = undefined;\n        this.$context = undefined;\n        this._doResize = helpers_dataset.debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n        this._dataChanges = [];\n        instances[this.id] = this;\n        if (!context || !canvas) {\n            console.error(\"Failed to create chart: can't acquire context from the given item\");\n            return;\n        }\n        animator.listen(this, 'complete', onAnimationsComplete);\n        animator.listen(this, 'progress', onAnimationProgress);\n        this._initialize();\n        if (this.attached) {\n            this.update();\n        }\n    }\n    get aspectRatio() {\n        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;\n        if (!helpers_dataset.isNullOrUndef(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (maintainAspectRatio && _aspectRatio) {\n            return _aspectRatio;\n        }\n        return height ? width / height : null;\n    }\n    get data() {\n        return this.config.data;\n    }\n    set data(data) {\n        this.config.data = data;\n    }\n    get options() {\n        return this._options;\n    }\n    set options(options) {\n        this.config.options = options;\n    }\n    get registry() {\n        return registry;\n    }\n _initialize() {\n        this.notifyPlugins('beforeInit');\n        if (this.options.responsive) {\n            this.resize();\n        } else {\n            helpers_dataset.retinaScale(this, this.options.devicePixelRatio);\n        }\n        this.bindEvents();\n        this.notifyPlugins('afterInit');\n        return this;\n    }\n    clear() {\n        helpers_dataset.clearCanvas(this.canvas, this.ctx);\n        return this;\n    }\n    stop() {\n        animator.stop(this);\n        return this;\n    }\n resize(width, height) {\n        if (!animator.running(this)) {\n            this._resize(width, height);\n        } else {\n            this._resizeBeforeDraw = {\n                width,\n                height\n            };\n        }\n    }\n    _resize(width, height) {\n        const options = this.options;\n        const canvas = this.canvas;\n        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n        const mode = this.width ? 'resize' : 'attach';\n        this.width = newSize.width;\n        this.height = newSize.height;\n        this._aspectRatio = this.aspectRatio;\n        if (!helpers_dataset.retinaScale(this, newRatio, true)) {\n            return;\n        }\n        this.notifyPlugins('resize', {\n            size: newSize\n        });\n        helpers_dataset.callback(options.onResize, [\n            this,\n            newSize\n        ], this);\n        if (this.attached) {\n            if (this._doResize(mode)) {\n                this.render();\n            }\n        }\n    }\n    ensureScalesHaveIDs() {\n        const options = this.options;\n        const scalesOptions = options.scales || {};\n        helpers_dataset.each(scalesOptions, (axisOptions, axisID)=>{\n            axisOptions.id = axisID;\n        });\n    }\n buildOrUpdateScales() {\n        const options = this.options;\n        const scaleOpts = options.scales;\n        const scales = this.scales;\n        const updated = Object.keys(scales).reduce((obj, id)=>{\n            obj[id] = false;\n            return obj;\n        }, {});\n        let items = [];\n        if (scaleOpts) {\n            items = items.concat(Object.keys(scaleOpts).map((id)=>{\n                const scaleOptions = scaleOpts[id];\n                const axis = determineAxis(id, scaleOptions);\n                const isRadial = axis === 'r';\n                const isHorizontal = axis === 'x';\n                return {\n                    options: scaleOptions,\n                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n                };\n            }));\n        }\n        helpers_dataset.each(items, (item)=>{\n            const scaleOptions = item.options;\n            const id = scaleOptions.id;\n            const axis = determineAxis(id, scaleOptions);\n            const scaleType = helpers_dataset.valueOrDefault(scaleOptions.type, item.dtype);\n            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n                scaleOptions.position = item.dposition;\n            }\n            updated[id] = true;\n            let scale = null;\n            if (id in scales && scales[id].type === scaleType) {\n                scale = scales[id];\n            } else {\n                const scaleClass = registry.getScale(scaleType);\n                scale = new scaleClass({\n                    id,\n                    type: scaleType,\n                    ctx: this.ctx,\n                    chart: this\n                });\n                scales[scale.id] = scale;\n            }\n            scale.init(scaleOptions, options);\n        });\n        helpers_dataset.each(updated, (hasUpdated, id)=>{\n            if (!hasUpdated) {\n                delete scales[id];\n            }\n        });\n        helpers_dataset.each(scales, (scale)=>{\n            layouts.configure(this, scale, scale.options);\n            layouts.addBox(this, scale);\n        });\n    }\n _updateMetasets() {\n        const metasets = this._metasets;\n        const numData = this.data.datasets.length;\n        const numMeta = metasets.length;\n        metasets.sort((a, b)=>a.index - b.index);\n        if (numMeta > numData) {\n            for(let i = numData; i < numMeta; ++i){\n                this._destroyDatasetMeta(i);\n            }\n            metasets.splice(numData, numMeta - numData);\n        }\n        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n    }\n _removeUnreferencedMetasets() {\n        const { _metasets: metasets , data: { datasets  }  } = this;\n        if (metasets.length > datasets.length) {\n            delete this._stacks;\n        }\n        metasets.forEach((meta, index)=>{\n            if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n                this._destroyDatasetMeta(index);\n            }\n        });\n    }\n    buildOrUpdateControllers() {\n        const newControllers = [];\n        const datasets = this.data.datasets;\n        let i, ilen;\n        this._removeUnreferencedMetasets();\n        for(i = 0, ilen = datasets.length; i < ilen; i++){\n            const dataset = datasets[i];\n            let meta = this.getDatasetMeta(i);\n            const type = dataset.type || this.config.type;\n            if (meta.type && meta.type !== type) {\n                this._destroyDatasetMeta(i);\n                meta = this.getDatasetMeta(i);\n            }\n            meta.type = type;\n            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n            meta.order = dataset.order || 0;\n            meta.index = i;\n            meta.label = '' + dataset.label;\n            meta.visible = this.isDatasetVisible(i);\n            if (meta.controller) {\n                meta.controller.updateIndex(i);\n                meta.controller.linkScales();\n            } else {\n                const ControllerClass = registry.getController(type);\n                const { datasetElementType , dataElementType  } = helpers_dataset.defaults.datasets[type];\n                Object.assign(ControllerClass, {\n                    dataElementType: registry.getElement(dataElementType),\n                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n                });\n                meta.controller = new ControllerClass(this, i);\n                newControllers.push(meta.controller);\n            }\n        }\n        this._updateMetasets();\n        return newControllers;\n    }\n _resetElements() {\n        helpers_dataset.each(this.data.datasets, (dataset, datasetIndex)=>{\n            this.getDatasetMeta(datasetIndex).controller.reset();\n        }, this);\n    }\n reset() {\n        this._resetElements();\n        this.notifyPlugins('reset');\n    }\n    update(mode) {\n        const config = this.config;\n        config.update();\n        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        const animsDisabled = this._animationsDisabled = !options.animation;\n        this._updateScales();\n        this._checkEventBindings();\n        this._updateHiddenIndices();\n        this._plugins.invalidate();\n        if (this.notifyPlugins('beforeUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const newControllers = this.buildOrUpdateControllers();\n        this.notifyPlugins('beforeElementsUpdate');\n        let minPadding = 0;\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n            const { controller  } = this.getDatasetMeta(i);\n            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n            controller.buildOrUpdateElements(reset);\n            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n        }\n        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n        this._updateLayout(minPadding);\n        if (!animsDisabled) {\n            helpers_dataset.each(newControllers, (controller)=>{\n                controller.reset();\n            });\n        }\n        this._updateDatasets(mode);\n        this.notifyPlugins('afterUpdate', {\n            mode\n        });\n        this._layers.sort(compare2Level('z', '_idx'));\n        const { _active , _lastEvent  } = this;\n        if (_lastEvent) {\n            this._eventHandler(_lastEvent, true);\n        } else if (_active.length) {\n            this._updateHoverStyles(_active, _active, true);\n        }\n        this.render();\n    }\n _updateScales() {\n        helpers_dataset.each(this.scales, (scale)=>{\n            layouts.removeBox(this, scale);\n        });\n        this.ensureScalesHaveIDs();\n        this.buildOrUpdateScales();\n    }\n _checkEventBindings() {\n        const options = this.options;\n        const existingEvents = new Set(Object.keys(this._listeners));\n        const newEvents = new Set(options.events);\n        if (!helpers_dataset.setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n            this.unbindEvents();\n            this.bindEvents();\n        }\n    }\n _updateHiddenIndices() {\n        const { _hiddenIndices  } = this;\n        const changes = this._getUniformDataChanges() || [];\n        for (const { method , start , count  } of changes){\n            const move = method === '_removeElements' ? -count : count;\n            moveNumericKeys(_hiddenIndices, start, move);\n        }\n    }\n _getUniformDataChanges() {\n        const _dataChanges = this._dataChanges;\n        if (!_dataChanges || !_dataChanges.length) {\n            return;\n        }\n        this._dataChanges = [];\n        const datasetCount = this.data.datasets.length;\n        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n        const changeSet = makeSet(0);\n        for(let i = 1; i < datasetCount; i++){\n            if (!helpers_dataset.setsEqual(changeSet, makeSet(i))) {\n                return;\n            }\n        }\n        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n                method: a[1],\n                start: +a[2],\n                count: +a[3]\n            }));\n    }\n _updateLayout(minPadding) {\n        if (this.notifyPlugins('beforeLayout', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        layouts.update(this, this.width, this.height, minPadding);\n        const area = this.chartArea;\n        const noArea = area.width <= 0 || area.height <= 0;\n        this._layers = [];\n        helpers_dataset.each(this.boxes, (box)=>{\n            if (noArea && box.position === 'chartArea') {\n                return;\n            }\n            if (box.configure) {\n                box.configure();\n            }\n            this._layers.push(...box._layers());\n        }, this);\n        this._layers.forEach((item, index)=>{\n            item._idx = index;\n        });\n        this.notifyPlugins('afterLayout');\n    }\n _updateDatasets(mode) {\n        if (this.notifyPlugins('beforeDatasetsUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this.getDatasetMeta(i).controller.configure();\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._updateDataset(i, helpers_dataset.isFunction(mode) ? mode({\n                datasetIndex: i\n            }) : mode);\n        }\n        this.notifyPlugins('afterDatasetsUpdate', {\n            mode\n        });\n    }\n _updateDataset(index, mode) {\n        const meta = this.getDatasetMeta(index);\n        const args = {\n            meta,\n            index,\n            mode,\n            cancelable: true\n        };\n        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n            return;\n        }\n        meta.controller._update(mode);\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetUpdate', args);\n    }\n    render() {\n        if (this.notifyPlugins('beforeRender', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        if (animator.has(this)) {\n            if (this.attached && !animator.running(this)) {\n                animator.start(this);\n            }\n        } else {\n            this.draw();\n            onAnimationsComplete({\n                chart: this\n            });\n        }\n    }\n    draw() {\n        let i;\n        if (this._resizeBeforeDraw) {\n            const { width , height  } = this._resizeBeforeDraw;\n            this._resizeBeforeDraw = null;\n            this._resize(width, height);\n        }\n        this.clear();\n        if (this.width <= 0 || this.height <= 0) {\n            return;\n        }\n        if (this.notifyPlugins('beforeDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const layers = this._layers;\n        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this._drawDatasets();\n        for(; i < layers.length; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this.notifyPlugins('afterDraw');\n    }\n _getSortedDatasetMetas(filterVisible) {\n        const metasets = this._sortedMetasets;\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metasets.length; i < ilen; ++i){\n            const meta = metasets[i];\n            if (!filterVisible || meta.visible) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n getSortedVisibleDatasetMetas() {\n        return this._getSortedDatasetMetas(true);\n    }\n _drawDatasets() {\n        if (this.notifyPlugins('beforeDatasetsDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const metasets = this.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            this._drawDataset(metasets[i]);\n        }\n        this.notifyPlugins('afterDatasetsDraw');\n    }\n _drawDataset(meta) {\n        const ctx = this.ctx;\n        const args = {\n            meta,\n            index: meta.index,\n            cancelable: true\n        };\n        const clip = helpers_dataset.getDatasetClipArea(this, meta);\n        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n            return;\n        }\n        if (clip) {\n            helpers_dataset.clipArea(ctx, clip);\n        }\n        meta.controller.draw();\n        if (clip) {\n            helpers_dataset.unclipArea(ctx);\n        }\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetDraw', args);\n    }\n isPointInArea(point) {\n        return helpers_dataset._isPointInArea(point, this.chartArea, this._minPadding);\n    }\n    getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n        const method = Interaction.modes[mode];\n        if (typeof method === 'function') {\n            return method(this, e, options, useFinalPosition);\n        }\n        return [];\n    }\n    getDatasetMeta(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        const metasets = this._metasets;\n        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n        if (!meta) {\n            meta = {\n                type: null,\n                data: [],\n                dataset: null,\n                controller: null,\n                hidden: null,\n                xAxisID: null,\n                yAxisID: null,\n                order: dataset && dataset.order || 0,\n                index: datasetIndex,\n                _dataset: dataset,\n                _parsed: [],\n                _sorted: false\n            };\n            metasets.push(meta);\n        }\n        return meta;\n    }\n    getContext() {\n        return this.$context || (this.$context = helpers_dataset.createContext(null, {\n            chart: this,\n            type: 'chart'\n        }));\n    }\n    getVisibleDatasetCount() {\n        return this.getSortedVisibleDatasetMetas().length;\n    }\n    isDatasetVisible(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        if (!dataset) {\n            return false;\n        }\n        const meta = this.getDatasetMeta(datasetIndex);\n        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n    }\n    setDatasetVisibility(datasetIndex, visible) {\n        const meta = this.getDatasetMeta(datasetIndex);\n        meta.hidden = !visible;\n    }\n    toggleDataVisibility(index) {\n        this._hiddenIndices[index] = !this._hiddenIndices[index];\n    }\n    getDataVisibility(index) {\n        return !this._hiddenIndices[index];\n    }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n        const mode = visible ? 'show' : 'hide';\n        const meta = this.getDatasetMeta(datasetIndex);\n        const anims = meta.controller._resolveAnimations(undefined, mode);\n        if (helpers_dataset.defined(dataIndex)) {\n            meta.data[dataIndex].hidden = !visible;\n            this.update();\n        } else {\n            this.setDatasetVisibility(datasetIndex, visible);\n            anims.update(meta, {\n                visible\n            });\n            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n        }\n    }\n    hide(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, false);\n    }\n    show(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, true);\n    }\n _destroyDatasetMeta(datasetIndex) {\n        const meta = this._metasets[datasetIndex];\n        if (meta && meta.controller) {\n            meta.controller._destroy();\n        }\n        delete this._metasets[datasetIndex];\n    }\n    _stop() {\n        let i, ilen;\n        this.stop();\n        animator.remove(this);\n        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._destroyDatasetMeta(i);\n        }\n    }\n    destroy() {\n        this.notifyPlugins('beforeDestroy');\n        const { canvas , ctx  } = this;\n        this._stop();\n        this.config.clearCache();\n        if (canvas) {\n            this.unbindEvents();\n            helpers_dataset.clearCanvas(canvas, ctx);\n            this.platform.releaseContext(ctx);\n            this.canvas = null;\n            this.ctx = null;\n        }\n        delete instances[this.id];\n        this.notifyPlugins('afterDestroy');\n    }\n    toBase64Image(...args) {\n        return this.canvas.toDataURL(...args);\n    }\n bindEvents() {\n        this.bindUserEvents();\n        if (this.options.responsive) {\n            this.bindResponsiveEvents();\n        } else {\n            this.attached = true;\n        }\n    }\n bindUserEvents() {\n        const listeners = this._listeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const listener = (e, x, y)=>{\n            e.offsetX = x;\n            e.offsetY = y;\n            this._eventHandler(e);\n        };\n        helpers_dataset.each(this.options.events, (type)=>_add(type, listener));\n    }\n bindResponsiveEvents() {\n        if (!this._responsiveListeners) {\n            this._responsiveListeners = {};\n        }\n        const listeners = this._responsiveListeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const _remove = (type, listener)=>{\n            if (listeners[type]) {\n                platform.removeEventListener(this, type, listener);\n                delete listeners[type];\n            }\n        };\n        const listener = (width, height)=>{\n            if (this.canvas) {\n                this.resize(width, height);\n            }\n        };\n        let detached;\n        const attached = ()=>{\n            _remove('attach', attached);\n            this.attached = true;\n            this.resize();\n            _add('resize', listener);\n            _add('detach', detached);\n        };\n        detached = ()=>{\n            this.attached = false;\n            _remove('resize', listener);\n            this._stop();\n            this._resize(0, 0);\n            _add('attach', attached);\n        };\n        if (platform.isAttached(this.canvas)) {\n            attached();\n        } else {\n            detached();\n        }\n    }\n unbindEvents() {\n        helpers_dataset.each(this._listeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._listeners = {};\n        helpers_dataset.each(this._responsiveListeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._responsiveListeners = undefined;\n    }\n    updateHoverStyle(items, mode, enabled) {\n        const prefix = enabled ? 'set' : 'remove';\n        let meta, item, i, ilen;\n        if (mode === 'dataset') {\n            meta = this.getDatasetMeta(items[0].datasetIndex);\n            meta.controller['_' + prefix + 'DatasetHoverStyle']();\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            item = items[i];\n            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n            if (controller) {\n                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n            }\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements) {\n        const lastActive = this._active || [];\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('No dataset found at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !helpers_dataset._elementsEqual(active, lastActive);\n        if (changed) {\n            this._active = active;\n            this._lastEvent = null;\n            this._updateHoverStyles(active, lastActive);\n        }\n    }\n notifyPlugins(hook, args, filter) {\n        return this._plugins.notify(this, hook, args, filter);\n    }\n isPluginEnabled(pluginId) {\n        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n    }\n _updateHoverStyles(active, lastActive, replay) {\n        const hoverOptions = this.options.hover;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n        const deactivated = diff(lastActive, active);\n        const activated = replay ? active : diff(active, lastActive);\n        if (deactivated.length) {\n            this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n        }\n        if (activated.length && hoverOptions.mode) {\n            this.updateHoverStyle(activated, hoverOptions.mode, true);\n        }\n    }\n _eventHandler(e, replay) {\n        const args = {\n            event: e,\n            replay,\n            cancelable: true,\n            inChartArea: this.isPointInArea(e)\n        };\n        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n            return;\n        }\n        const changed = this._handleEvent(e, replay, args.inChartArea);\n        args.cancelable = false;\n        this.notifyPlugins('afterEvent', args, eventFilter);\n        if (changed || args.changed) {\n            this.render();\n        }\n        return this;\n    }\n _handleEvent(e, replay, inChartArea) {\n        const { _active: lastActive = [] , options  } = this;\n        const useFinalPosition = replay;\n        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n        const isClick = helpers_dataset._isClickEvent(e);\n        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n        if (inChartArea) {\n            this._lastEvent = null;\n            helpers_dataset.callback(options.onHover, [\n                e,\n                active,\n                this\n            ], this);\n            if (isClick) {\n                helpers_dataset.callback(options.onClick, [\n                    e,\n                    active,\n                    this\n                ], this);\n            }\n        }\n        const changed = !helpers_dataset._elementsEqual(active, lastActive);\n        if (changed || replay) {\n            this._active = active;\n            this._updateHoverStyles(active, lastActive, replay);\n        }\n        this._lastEvent = lastEvent;\n        return changed;\n    }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive;\n        }\n        const hoverOptions = this.options.hover;\n        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n    }\n}\nfunction invalidatePlugins() {\n    return helpers_dataset.each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipSelf(ctx, element, endAngle) {\n    const { startAngle , x , y , outerRadius , innerRadius , options  } = element;\n    const { borderWidth , borderJoinStyle  } = options;\n    const outerAngleClip = Math.min(borderWidth / outerRadius, helpers_dataset._normalizeAngle(startAngle - endAngle));\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n    if (innerRadius > 0) {\n        const innerAngleClip = Math.min(borderWidth / innerRadius, helpers_dataset._normalizeAngle(startAngle - endAngle));\n        ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n    } else {\n        const clipWidth = Math.min(borderWidth / 2, outerRadius * helpers_dataset._normalizeAngle(startAngle - endAngle));\n        if (borderJoinStyle === 'round') {\n            ctx.arc(x, y, clipWidth, endAngle - helpers_dataset.PI / 2, startAngle + helpers_dataset.PI / 2, true);\n        } else if (borderJoinStyle === 'bevel') {\n            const r = 2 * clipWidth * clipWidth;\n            const endX = -r * Math.cos(endAngle + helpers_dataset.PI / 2) + x;\n            const endY = -r * Math.sin(endAngle + helpers_dataset.PI / 2) + y;\n            const startX = r * Math.cos(startAngle + helpers_dataset.PI / 2) + x;\n            const startY = r * Math.sin(startAngle + helpers_dataset.PI / 2) + y;\n            ctx.lineTo(endX, endY);\n            ctx.lineTo(startX, startY);\n        }\n    }\n    ctx.closePath();\n    ctx.moveTo(0, 0);\n    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n    ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;\n    let angleMargin = pixelMargin / outerRadius;\n    // Draw an inner border by clipping the arc and drawing a double-width border\n    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n    if (innerRadius > pixelMargin) {\n        angleMargin = pixelMargin / innerRadius;\n        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n    } else {\n        ctx.arc(x, y, pixelMargin, endAngle + helpers_dataset.HALF_PI, startAngle - helpers_dataset.HALF_PI);\n    }\n    ctx.closePath();\n    ctx.clip();\n}\nfunction toRadiusCorners(value) {\n    return helpers_dataset._readValueToProps(value, [\n        'outerStart',\n        'outerEnd',\n        'innerStart',\n        'innerEnd'\n    ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n    const o = toRadiusCorners(arc.options.borderRadius);\n    const halfThickness = (outerRadius - innerRadius) / 2;\n    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n    // Outer limits are complicated. We want to compute the available angular distance at\n    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n    //\n    // If the borderRadius is large, that value can become negative.\n    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n    // we know that the thickness term will dominate and compute the limits at that point\n    const computeOuterLimit = (val)=>{\n        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n        return helpers_dataset._limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n    };\n    return {\n        outerStart: computeOuterLimit(o.outerStart),\n        outerEnd: computeOuterLimit(o.outerEnd),\n        innerStart: helpers_dataset._limitValue(o.innerStart, 0, innerLimit),\n        innerEnd: helpers_dataset._limitValue(o.innerEnd, 0, innerLimit)\n    };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n    return {\n        x: x + r * Math.cos(theta),\n        y: y + r * Math.sin(theta)\n    };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;\n    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n    let spacingOffset = 0;\n    const alpha = end - start;\n    if (spacing) {\n        // When spacing is present, it is the same for all items\n        // So we adjust the start and end angle of the arc such that\n        // the distance is the same as it would be without the spacing\n        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n        spacingOffset = (alpha - adjustedAngle) / 2;\n    }\n    const beta = Math.max(0.001, alpha * outerRadius - offset / helpers_dataset.PI) / outerRadius;\n    const angleOffset = (alpha - beta) / 2;\n    const startAngle = start + angleOffset + spacingOffset;\n    const endAngle = end - angleOffset - spacingOffset;\n    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n    const outerStartAdjustedRadius = outerRadius - outerStart;\n    const outerEndAdjustedRadius = outerRadius - outerEnd;\n    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n    const innerStartAdjustedRadius = innerRadius + innerStart;\n    const innerEndAdjustedRadius = innerRadius + innerEnd;\n    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n    ctx.beginPath();\n    if (circular) {\n        // The first arc segments from point 1 to point a to point 2\n        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n        // The corner segment from point 2 to point 3\n        if (outerEnd > 0) {\n            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + helpers_dataset.HALF_PI);\n        }\n        // The line from point 3 to point 4\n        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n        ctx.lineTo(p4.x, p4.y);\n        // The corner segment from point 4 to point 5\n        if (innerEnd > 0) {\n            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + helpers_dataset.HALF_PI, innerEndAdjustedAngle + Math.PI);\n        }\n        // The inner arc from point 5 to point b to point 6\n        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n        // The corner segment from point 6 to point 7\n        if (innerStart > 0) {\n            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - helpers_dataset.HALF_PI);\n        }\n        // The line from point 7 to point 8\n        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n        ctx.lineTo(p8.x, p8.y);\n        // The corner segment from point 8 to point 1\n        if (outerStart > 0) {\n            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - helpers_dataset.HALF_PI, outerStartAdjustedAngle);\n        }\n    } else {\n        ctx.moveTo(x, y);\n        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerStartX, outerStartY);\n        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerEndX, outerEndY);\n    }\n    ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference  } = element;\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.fill();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % helpers_dataset.TAU || helpers_dataset.TAU);\n        }\n    }\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.fill();\n    return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference , options  } = element;\n    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius  } = options;\n    const inner = options.borderAlign === 'inner';\n    if (!borderWidth) {\n        return;\n    }\n    ctx.setLineDash(borderDash || []);\n    ctx.lineDashOffset = borderDashOffset;\n    if (inner) {\n        ctx.lineWidth = borderWidth * 2;\n        ctx.lineJoin = borderJoinStyle || 'round';\n    } else {\n        ctx.lineWidth = borderWidth;\n        ctx.lineJoin = borderJoinStyle || 'bevel';\n    }\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.stroke();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % helpers_dataset.TAU || helpers_dataset.TAU);\n        }\n    }\n    if (inner) {\n        clipArc(ctx, element, endAngle);\n    }\n    if (options.selfJoin && endAngle - startAngle >= helpers_dataset.PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n        clipSelf(ctx, element, endAngle);\n    }\n    if (!fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        ctx.stroke();\n    }\n}\nclass ArcElement extends Element {\n    static id = 'arc';\n    static defaults = {\n        borderAlign: 'center',\n        borderColor: '#fff',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: undefined,\n        borderRadius: 0,\n        borderWidth: 2,\n        offset: 0,\n        spacing: 0,\n        angle: undefined,\n        circular: true,\n        selfJoin: false\n    };\n    static defaultRoutes = {\n        backgroundColor: 'backgroundColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash'\n    };\n    circumference;\n    endAngle;\n    fullCircles;\n    innerRadius;\n    outerRadius;\n    pixelMargin;\n    startAngle;\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.circumference = undefined;\n        this.startAngle = undefined;\n        this.endAngle = undefined;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.pixelMargin = 0;\n        this.fullCircles = 0;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(chartX, chartY, useFinalPosition) {\n        const point = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        const { angle , distance  } = helpers_dataset.getAngleFromPoint(point, {\n            x: chartX,\n            y: chartY\n        });\n        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius',\n            'circumference'\n        ], useFinalPosition);\n        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n        const _circumference = helpers_dataset.valueOrDefault(circumference, endAngle - startAngle);\n        const nonZeroBetween = helpers_dataset._angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n        const betweenAngles = _circumference >= helpers_dataset.TAU || nonZeroBetween;\n        const withinRadius = helpers_dataset._isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n        return betweenAngles && withinRadius;\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([\n            'x',\n            'y',\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius'\n        ], useFinalPosition);\n        const { offset , spacing  } = this.options;\n        const halfAngle = (startAngle + endAngle) / 2;\n        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n        return {\n            x: x + Math.cos(halfAngle) * halfRadius,\n            y: y + Math.sin(halfAngle) * halfRadius\n        };\n    }\n    tooltipPosition(useFinalPosition) {\n        return this.getCenterPoint(useFinalPosition);\n    }\n    draw(ctx) {\n        const { options , circumference  } = this;\n        const offset = (options.offset || 0) / 4;\n        const spacing = (options.spacing || 0) / 2;\n        const circular = options.circular;\n        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n        this.fullCircles = circumference > helpers_dataset.TAU ? Math.floor(circumference / helpers_dataset.TAU) : 0;\n        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n            return;\n        }\n        ctx.save();\n        const halfAngle = (this.startAngle + this.endAngle) / 2;\n        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n        const fix = 1 - Math.sin(Math.min(helpers_dataset.PI, circumference || 0));\n        const radiusOffset = offset * fix;\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        drawArc(ctx, this, radiusOffset, spacing, circular);\n        drawBorder(ctx, this, radiusOffset, spacing, circular);\n        ctx.restore();\n    }\n}\n\nfunction setStyle(ctx, options, style = options) {\n    ctx.lineCap = helpers_dataset.valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n    ctx.setLineDash(helpers_dataset.valueOrDefault(style.borderDash, options.borderDash));\n    ctx.lineDashOffset = helpers_dataset.valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n    ctx.lineJoin = helpers_dataset.valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n    ctx.lineWidth = helpers_dataset.valueOrDefault(style.borderWidth, options.borderWidth);\n    ctx.strokeStyle = helpers_dataset.valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n    ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n    if (options.stepped) {\n        return helpers_dataset._steppedLineTo;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return helpers_dataset._bezierCurveTo;\n    }\n    return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n    const count = points.length;\n    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;\n    const { start: segmentStart , end: segmentEnd  } = segment;\n    const start = Math.max(paramsStart, segmentStart);\n    const end = Math.min(paramsEnd, segmentEnd);\n    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n    return {\n        count,\n        start,\n        loop: segment.loop,\n        ilen: end < start && !outside ? count + end - start : end - start\n    };\n}\n function pathSegment(ctx, line, segment, params) {\n    const { points , options  } = line;\n    const { count , start , loop , ilen  } = pathVars(points, segment, params);\n    const lineMethod = getLineMethod(options);\n    let { move =true , reverse  } = params || {};\n    let i, point, prev;\n    for(i = 0; i <= ilen; ++i){\n        point = points[(start + (reverse ? ilen - i : i)) % count];\n        if (point.skip) {\n            continue;\n        } else if (move) {\n            ctx.moveTo(point.x, point.y);\n            move = false;\n        } else {\n            lineMethod(ctx, prev, point, reverse, options.stepped);\n        }\n        prev = point;\n    }\n    if (loop) {\n        point = points[(start + (reverse ? ilen : 0)) % count];\n        lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n    const points = line.points;\n    const { count , start , ilen  } = pathVars(points, segment, params);\n    const { move =true , reverse  } = params || {};\n    let avgX = 0;\n    let countX = 0;\n    let i, point, prevX, minY, maxY, lastY;\n    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n    const drawX = ()=>{\n        if (minY !== maxY) {\n            ctx.lineTo(avgX, maxY);\n            ctx.lineTo(avgX, minY);\n            ctx.lineTo(avgX, lastY);\n        }\n    };\n    if (move) {\n        point = points[pointIndex(0)];\n        ctx.moveTo(point.x, point.y);\n    }\n    for(i = 0; i <= ilen; ++i){\n        point = points[pointIndex(i)];\n        if (point.skip) {\n            continue;\n        }\n        const x = point.x;\n        const y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n            } else if (y > maxY) {\n                maxY = y;\n            }\n            avgX = (countX * avgX + x) / ++countX;\n        } else {\n            drawX();\n            ctx.lineTo(x, y);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n        }\n        lastY = y;\n    }\n    drawX();\n}\n function _getSegmentMethod(line) {\n    const opts = line.options;\n    const borderDash = opts.borderDash && opts.borderDash.length;\n    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n    return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n    if (options.stepped) {\n        return helpers_dataset._steppedInterpolation;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return helpers_dataset._bezierInterpolation;\n    }\n    return helpers_dataset._pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n    let path = line._path;\n    if (!path) {\n        path = line._path = new Path2D();\n        if (line.path(path, start, count)) {\n            path.closePath();\n        }\n    }\n    setStyle(ctx, line.options);\n    ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n    const { segments , options  } = line;\n    const segmentMethod = _getSegmentMethod(line);\n    for (const segment of segments){\n        setStyle(ctx, options, segment.style);\n        ctx.beginPath();\n        if (segmentMethod(ctx, line, segment, {\n            start,\n            end: start + count - 1\n        })) {\n            ctx.closePath();\n        }\n        ctx.stroke();\n    }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n    if (usePath2D && !line.options.segment) {\n        strokePathWithCache(ctx, line, start, count);\n    } else {\n        strokePathDirect(ctx, line, start, count);\n    }\n}\nclass LineElement extends Element {\n    static id = 'line';\n static defaults = {\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: 'miter',\n        borderWidth: 3,\n        capBezierPoints: true,\n        cubicInterpolationMode: 'default',\n        fill: false,\n        spanGaps: false,\n        stepped: false,\n        tension: 0\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n    };\n    constructor(cfg){\n        super();\n        this.animated = true;\n        this.options = undefined;\n        this._chart = undefined;\n        this._loop = undefined;\n        this._fullLoop = undefined;\n        this._path = undefined;\n        this._points = undefined;\n        this._segments = undefined;\n        this._decimated = false;\n        this._pointsUpdated = false;\n        this._datasetIndex = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    updateControlPoints(chartArea, indexAxis) {\n        const options = this.options;\n        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n            const loop = options.spanGaps ? this._loop : this._fullLoop;\n            helpers_dataset._updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n            this._pointsUpdated = true;\n        }\n    }\n    set points(points) {\n        this._points = points;\n        delete this._segments;\n        delete this._path;\n        this._pointsUpdated = false;\n    }\n    get points() {\n        return this._points;\n    }\n    get segments() {\n        return this._segments || (this._segments = helpers_dataset._computeSegments(this, this.options.segment));\n    }\n first() {\n        const segments = this.segments;\n        const points = this.points;\n        return segments.length && points[segments[0].start];\n    }\n last() {\n        const segments = this.segments;\n        const points = this.points;\n        const count = segments.length;\n        return count && points[segments[count - 1].end];\n    }\n interpolate(point, property) {\n        const options = this.options;\n        const value = point[property];\n        const points = this.points;\n        const segments = helpers_dataset._boundSegments(this, {\n            property,\n            start: value,\n            end: value\n        });\n        if (!segments.length) {\n            return;\n        }\n        const result = [];\n        const _interpolate = _getInterpolationMethod(options);\n        let i, ilen;\n        for(i = 0, ilen = segments.length; i < ilen; ++i){\n            const { start , end  } = segments[i];\n            const p1 = points[start];\n            const p2 = points[end];\n            if (p1 === p2) {\n                result.push(p1);\n                continue;\n            }\n            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n            const interpolated = _interpolate(p1, p2, t, options.stepped);\n            interpolated[property] = point[property];\n            result.push(interpolated);\n        }\n        return result.length === 1 ? result[0] : result;\n    }\n pathSegment(ctx, segment, params) {\n        const segmentMethod = _getSegmentMethod(this);\n        return segmentMethod(ctx, this, segment, params);\n    }\n path(ctx, start, count) {\n        const segments = this.segments;\n        const segmentMethod = _getSegmentMethod(this);\n        let loop = this._loop;\n        start = start || 0;\n        count = count || this.points.length - start;\n        for (const segment of segments){\n            loop &= segmentMethod(ctx, this, segment, {\n                start,\n                end: start + count - 1\n            });\n        }\n        return !!loop;\n    }\n draw(ctx, chartArea, start, count) {\n        const options = this.options || {};\n        const points = this.points || [];\n        if (points.length && options.borderWidth) {\n            ctx.save();\n            draw(ctx, this, start, count);\n            ctx.restore();\n        }\n        if (this.animated) {\n            this._pointsUpdated = false;\n            this._path = undefined;\n        }\n    }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n    const options = el.options;\n    const { [axis]: value  } = el.getProps([\n        axis\n    ], useFinalPosition);\n    return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n    static id = 'point';\n    parsed;\n    skip;\n    stop;\n    /**\n   * @type {any}\n   */ static defaults = {\n        borderWidth: 1,\n        hitRadius: 1,\n        hoverBorderWidth: 1,\n        hoverRadius: 4,\n        pointStyle: 'circle',\n        radius: 3,\n        rotation: 0\n    };\n    /**\n   * @type {any}\n   */ static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.parsed = undefined;\n        this.skip = undefined;\n        this.stop = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        const options = this.options;\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange$1(this, mouseX, 'x', useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange$1(this, mouseY, 'y', useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    size(options) {\n        options = options || this.options || {};\n        let radius = options.radius || 0;\n        radius = Math.max(radius, radius && options.hoverRadius || 0);\n        const borderWidth = radius && options.borderWidth || 0;\n        return (radius + borderWidth) * 2;\n    }\n    draw(ctx, area) {\n        const options = this.options;\n        if (this.skip || options.radius < 0.1 || !helpers_dataset._isPointInArea(this, area, this.size(options) / 2)) {\n            return;\n        }\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.fillStyle = options.backgroundColor;\n        helpers_dataset.drawPoint(ctx, options, this.x, this.y);\n    }\n    getRange() {\n        const options = this.options || {};\n        // @ts-expect-error Fallbacks should never be hit in practice\n        return options.radius + options.hitRadius;\n    }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n    const { x , y , base , width , height  } =  bar.getProps([\n        'x',\n        'y',\n        'base',\n        'width',\n        'height'\n    ], useFinalPosition);\n    let left, right, top, bottom, half;\n    if (bar.horizontal) {\n        half = height / 2;\n        left = Math.min(x, base);\n        right = Math.max(x, base);\n        top = y - half;\n        bottom = y + half;\n    } else {\n        half = width / 2;\n        left = x - half;\n        right = x + half;\n        top = Math.min(y, base);\n        bottom = Math.max(y, base);\n    }\n    return {\n        left,\n        top,\n        right,\n        bottom\n    };\n}\nfunction skipOrLimit(skip, value, min, max) {\n    return skip ? 0 : helpers_dataset._limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n    const value = bar.options.borderWidth;\n    const skip = bar.borderSkipped;\n    const o = helpers_dataset.toTRBL(value);\n    return {\n        t: skipOrLimit(skip.top, o.top, 0, maxH),\n        r: skipOrLimit(skip.right, o.right, 0, maxW),\n        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n        l: skipOrLimit(skip.left, o.left, 0, maxW)\n    };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n    const { enableBorderRadius  } = bar.getProps([\n        'enableBorderRadius'\n    ]);\n    const value = bar.options.borderRadius;\n    const o = helpers_dataset.toTRBLCorners(value);\n    const maxR = Math.min(maxW, maxH);\n    const skip = bar.borderSkipped;\n    const enableBorder = enableBorderRadius || helpers_dataset.isObject(value);\n    return {\n        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n    };\n}\nfunction boundingRects(bar) {\n    const bounds = getBarBounds(bar);\n    const width = bounds.right - bounds.left;\n    const height = bounds.bottom - bounds.top;\n    const border = parseBorderWidth(bar, width / 2, height / 2);\n    const radius = parseBorderRadius(bar, width / 2, height / 2);\n    return {\n        outer: {\n            x: bounds.left,\n            y: bounds.top,\n            w: width,\n            h: height,\n            radius\n        },\n        inner: {\n            x: bounds.left + border.l,\n            y: bounds.top + border.t,\n            w: width - border.l - border.r,\n            h: height - border.t - border.b,\n            radius: {\n                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n            }\n        }\n    };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n    const skipX = x === null;\n    const skipY = y === null;\n    const skipBoth = skipX && skipY;\n    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n    return bounds && (skipX || helpers_dataset._isBetween(x, bounds.left, bounds.right)) && (skipY || helpers_dataset._isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n    ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n    const x = rect.x !== refRect.x ? -amount : 0;\n    const y = rect.y !== refRect.y ? -amount : 0;\n    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n    return {\n        x: rect.x + x,\n        y: rect.y + y,\n        w: rect.w + w,\n        h: rect.h + h,\n        radius: rect.radius\n    };\n}\nclass BarElement extends Element {\n    static id = 'bar';\n static defaults = {\n        borderSkipped: 'start',\n        borderWidth: 0,\n        borderRadius: 0,\n        inflateAmount: 'auto',\n        pointStyle: undefined\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.horizontal = undefined;\n        this.base = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.inflateAmount = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    draw(ctx) {\n        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;\n        const { inner , outer  } = boundingRects(this);\n        const addRectPath = hasRadius(outer.radius) ? helpers_dataset.addRoundedRectPath : addNormalRectPath;\n        ctx.save();\n        if (outer.w !== inner.w || outer.h !== inner.h) {\n            ctx.beginPath();\n            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n            ctx.clip();\n            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n            ctx.fillStyle = borderColor;\n            ctx.fill('evenodd');\n        }\n        ctx.beginPath();\n        addRectPath(ctx, inflateRect(inner, inflateAmount));\n        ctx.fillStyle = backgroundColor;\n        ctx.fill();\n        ctx.restore();\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        return inRange(this, mouseX, mouseY, useFinalPosition);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange(this, mouseX, null, useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange(this, null, mouseY, useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , base , horizontal  } =  this.getProps([\n            'x',\n            'y',\n            'base',\n            'horizontal'\n        ], useFinalPosition);\n        return {\n            x: horizontal ? (x + base) / 2 : x,\n            y: horizontal ? y : (y + base) / 2\n        };\n    }\n    getRange(axis) {\n        return axis === 'x' ? this.width / 2 : this.height / 2;\n    }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n    'rgb(54, 162, 235)',\n    'rgb(255, 99, 132)',\n    'rgb(255, 159, 64)',\n    'rgb(255, 205, 86)',\n    'rgb(75, 192, 192)',\n    'rgb(153, 102, 255)',\n    'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n    return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n    dataset.borderColor = getBorderColor(i);\n    dataset.backgroundColor = getBackgroundColor(i);\n    return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n    return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n    return i;\n}\nfunction getColorizer(chart) {\n    let i = 0;\n    return (dataset, datasetIndex)=>{\n        const controller = chart.getDatasetMeta(datasetIndex).controller;\n        if (controller instanceof DoughnutController) {\n            i = colorizeDoughnutDataset(dataset, i);\n        } else if (controller instanceof PolarAreaController) {\n            i = colorizePolarAreaDataset(dataset, i);\n        } else if (controller) {\n            i = colorizeDefaultDataset(dataset, i);\n        }\n    };\n}\nfunction containsColorsDefinitions(descriptors) {\n    let k;\n    for(k in descriptors){\n        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction containsColorsDefinition(descriptor) {\n    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n    return helpers_dataset.defaults.borderColor !== 'rgba(0,0,0,0.1)' || helpers_dataset.defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n    id: 'colors',\n    defaults: {\n        enabled: true,\n        forceOverride: false\n    },\n    beforeLayout (chart, _args, options) {\n        if (!options.enabled) {\n            return;\n        }\n        const { data: { datasets  } , options: chartOptions  } = chart.config;\n        const { elements  } = chartOptions;\n        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n        if (!options.forceOverride && containsColorDefenition) {\n            return;\n        }\n        const colorizer = getColorizer(chart);\n        datasets.forEach(colorizer);\n    }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n    if (samples >= count) {\n        return data.slice(start, start + count);\n    }\n    const decimated = [];\n    const bucketWidth = (count - 2) / (samples - 2);\n    let sampledIndex = 0;\n    const endIndex = start + count - 1;\n    let a = start;\n    let i, maxAreaPoint, maxArea, area, nextA;\n    decimated[sampledIndex++] = data[a];\n    for(i = 0; i < samples - 2; i++){\n        let avgX = 0;\n        let avgY = 0;\n        let j;\n        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n        const avgRangeLength = avgRangeEnd - avgRangeStart;\n        for(j = avgRangeStart; j < avgRangeEnd; j++){\n            avgX += data[j].x;\n            avgY += data[j].y;\n        }\n        avgX /= avgRangeLength;\n        avgY /= avgRangeLength;\n        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n        const { x: pointAx , y: pointAy  } = data[a];\n        maxArea = area = -1;\n        for(j = rangeOffs; j < rangeTo; j++){\n            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n            if (area > maxArea) {\n                maxArea = area;\n                maxAreaPoint = data[j];\n                nextA = j;\n            }\n        }\n        decimated[sampledIndex++] = maxAreaPoint;\n        a = nextA;\n    }\n    decimated[sampledIndex++] = data[endIndex];\n    return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n    let avgX = 0;\n    let countX = 0;\n    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n    const decimated = [];\n    const endIndex = start + count - 1;\n    const xMin = data[start].x;\n    const xMax = data[endIndex].x;\n    const dx = xMax - xMin;\n    for(i = start; i < start + count; ++i){\n        point = data[i];\n        x = (point.x - xMin) / dx * availableWidth;\n        y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n                minIndex = i;\n            } else if (y > maxY) {\n                maxY = y;\n                maxIndex = i;\n            }\n            avgX = (countX * avgX + point.x) / ++countX;\n        } else {\n            const lastIndex = i - 1;\n            if (!helpers_dataset.isNullOrUndef(minIndex) && !helpers_dataset.isNullOrUndef(maxIndex)) {\n                const intermediateIndex1 = Math.min(minIndex, maxIndex);\n                const intermediateIndex2 = Math.max(minIndex, maxIndex);\n                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex1],\n                        x: avgX\n                    });\n                }\n                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex2],\n                        x: avgX\n                    });\n                }\n            }\n            if (i > 0 && lastIndex !== startIndex) {\n                decimated.push(data[lastIndex]);\n            }\n            decimated.push(point);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n            minIndex = maxIndex = startIndex = i;\n        }\n    }\n    return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n    if (dataset._decimated) {\n        const data = dataset._data;\n        delete dataset._decimated;\n        delete dataset._data;\n        Object.defineProperty(dataset, 'data', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: data\n        });\n    }\n}\nfunction cleanDecimatedData(chart) {\n    chart.data.datasets.forEach((dataset)=>{\n        cleanDecimatedDataset(dataset);\n    });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n    const pointCount = points.length;\n    let start = 0;\n    let count;\n    const { iScale  } = meta;\n    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n    if (minDefined) {\n        start = helpers_dataset._limitValue(helpers_dataset._lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n        count = helpers_dataset._limitValue(helpers_dataset._lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n    } else {\n        count = pointCount - start;\n    }\n    return {\n        start,\n        count\n    };\n}\nvar plugin_decimation = {\n    id: 'decimation',\n    defaults: {\n        algorithm: 'min-max',\n        enabled: false\n    },\n    beforeElementsUpdate: (chart, args, options)=>{\n        if (!options.enabled) {\n            cleanDecimatedData(chart);\n            return;\n        }\n        const availableWidth = chart.width;\n        chart.data.datasets.forEach((dataset, datasetIndex)=>{\n            const { _data , indexAxis  } = dataset;\n            const meta = chart.getDatasetMeta(datasetIndex);\n            const data = _data || dataset.data;\n            if (helpers_dataset.resolve([\n                indexAxis,\n                chart.options.indexAxis\n            ]) === 'y') {\n                return;\n            }\n            if (!meta.controller.supportsDecimation) {\n                return;\n            }\n            const xAxis = chart.scales[meta.xAxisID];\n            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n                return;\n            }\n            if (chart.options.parsing) {\n                return;\n            }\n            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n            const threshold = options.threshold || 4 * availableWidth;\n            if (count <= threshold) {\n                cleanDecimatedDataset(dataset);\n                return;\n            }\n            if (helpers_dataset.isNullOrUndef(_data)) {\n                dataset._data = data;\n                delete dataset.data;\n                Object.defineProperty(dataset, 'data', {\n                    configurable: true,\n                    enumerable: true,\n                    get: function() {\n                        return this._decimated;\n                    },\n                    set: function(d) {\n                        this._data = d;\n                    }\n                });\n            }\n            let decimated;\n            switch(options.algorithm){\n                case 'lttb':\n                    decimated = lttbDecimation(data, start, count, availableWidth, options);\n                    break;\n                case 'min-max':\n                    decimated = minMaxDecimation(data, start, count, availableWidth);\n                    break;\n                default:\n                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n            }\n            dataset._decimated = decimated;\n        });\n    },\n    destroy (chart) {\n        cleanDecimatedData(chart);\n    }\n};\n\nfunction _segments(line, target, property) {\n    const segments = line.segments;\n    const points = line.points;\n    const tpoints = target.points;\n    const parts = [];\n    for (const segment of segments){\n        let { start , end  } = segment;\n        end = _findSegmentEnd(start, end, points);\n        const bounds = _getBounds(property, points[start], points[end], segment.loop);\n        if (!target.segments) {\n            parts.push({\n                source: segment,\n                target: bounds,\n                start: points[start],\n                end: points[end]\n            });\n            continue;\n        }\n        const targetSegments = helpers_dataset._boundSegments(target, bounds);\n        for (const tgt of targetSegments){\n            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n            const fillSources = helpers_dataset._boundSegment(segment, points, subBounds);\n            for (const fillSource of fillSources){\n                parts.push({\n                    source: fillSource,\n                    target: tgt,\n                    start: {\n                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n                    },\n                    end: {\n                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n                    }\n                });\n            }\n        }\n    }\n    return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n    if (loop) {\n        return;\n    }\n    let start = first[property];\n    let end = last[property];\n    if (property === 'angle') {\n        start = helpers_dataset._normalizeAngle(start);\n        end = helpers_dataset._normalizeAngle(end);\n    }\n    return {\n        property,\n        start,\n        end\n    };\n}\nfunction _pointsFromSegments(boundary, line) {\n    const { x =null , y =null  } = boundary || {};\n    const linePoints = line.points;\n    const points = [];\n    line.segments.forEach(({ start , end  })=>{\n        end = _findSegmentEnd(start, end, linePoints);\n        const first = linePoints[start];\n        const last = linePoints[end];\n        if (y !== null) {\n            points.push({\n                x: first.x,\n                y\n            });\n            points.push({\n                x: last.x,\n                y\n            });\n        } else if (x !== null) {\n            points.push({\n                x,\n                y: first.y\n            });\n            points.push({\n                x,\n                y: last.y\n            });\n        }\n    });\n    return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n    for(; end > start; end--){\n        const point = points[end];\n        if (!isNaN(point.x) && !isNaN(point.y)) {\n            break;\n        }\n    }\n    return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n    if (a && b) {\n        return fn(a[prop], b[prop]);\n    }\n    return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n    let points = [];\n    let _loop = false;\n    if (helpers_dataset.isArray(boundary)) {\n        _loop = true;\n        points = boundary;\n    } else {\n        points = _pointsFromSegments(boundary, line);\n    }\n    return points.length ? new LineElement({\n        points,\n        options: {\n            tension: 0\n        },\n        _loop,\n        _fullLoop: _loop\n    }) : null;\n}\nfunction _shouldApplyFill(source) {\n    return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n    const source = sources[index];\n    let fill = source.fill;\n    const visited = [\n        index\n    ];\n    let target;\n    if (!propagate) {\n        return fill;\n    }\n    while(fill !== false && visited.indexOf(fill) === -1){\n        if (!helpers_dataset.isNumberFinite(fill)) {\n            return fill;\n        }\n        target = sources[fill];\n        if (!target) {\n            return false;\n        }\n        if (target.visible) {\n            return fill;\n        }\n        visited.push(fill);\n        fill = target.fill;\n    }\n    return false;\n}\n function _decodeFill(line, index, count) {\n     const fill = parseFillOption(line);\n    if (helpers_dataset.isObject(fill)) {\n        return isNaN(fill.value) ? false : fill;\n    }\n    let target = parseFloat(fill);\n    if (helpers_dataset.isNumberFinite(target) && Math.floor(target) === target) {\n        return decodeTargetIndex(fill[0], index, target, count);\n    }\n    return [\n        'origin',\n        'start',\n        'end',\n        'stack',\n        'shape'\n    ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n    if (firstCh === '-' || firstCh === '+') {\n        target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n        return false;\n    }\n    return target;\n}\n function _getTargetPixel(fill, scale) {\n    let pixel = null;\n    if (fill === 'start') {\n        pixel = scale.bottom;\n    } else if (fill === 'end') {\n        pixel = scale.top;\n    } else if (helpers_dataset.isObject(fill)) {\n        pixel = scale.getPixelForValue(fill.value);\n    } else if (scale.getBasePixel) {\n        pixel = scale.getBasePixel();\n    }\n    return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n    let value;\n    if (fill === 'start') {\n        value = startValue;\n    } else if (fill === 'end') {\n        value = scale.options.reverse ? scale.min : scale.max;\n    } else if (helpers_dataset.isObject(fill)) {\n        value = fill.value;\n    } else {\n        value = scale.getBaseValue();\n    }\n    return value;\n}\n function parseFillOption(line) {\n    const options = line.options;\n    const fillOption = options.fill;\n    let fill = helpers_dataset.valueOrDefault(fillOption && fillOption.target, fillOption);\n    if (fill === undefined) {\n        fill = !!options.backgroundColor;\n    }\n    if (fill === false || fill === null) {\n        return false;\n    }\n    if (fill === true) {\n        return 'origin';\n    }\n    return fill;\n}\n\nfunction _buildStackLine(source) {\n    const { scale , index , line  } = source;\n    const points = [];\n    const segments = line.segments;\n    const sourcePoints = line.points;\n    const linesBelow = getLinesBelow(scale, index);\n    linesBelow.push(_createBoundaryLine({\n        x: null,\n        y: scale.bottom\n    }, line));\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        for(let j = segment.start; j <= segment.end; j++){\n            addPointsBelow(points, sourcePoints[j], linesBelow);\n        }\n    }\n    return new LineElement({\n        points,\n        options: {}\n    });\n}\n function getLinesBelow(scale, index) {\n    const below = [];\n    const metas = scale.getMatchingVisibleMetas('line');\n    for(let i = 0; i < metas.length; i++){\n        const meta = metas[i];\n        if (meta.index === index) {\n            break;\n        }\n        if (!meta.hidden) {\n            below.unshift(meta.dataset);\n        }\n    }\n    return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n    const postponed = [];\n    for(let j = 0; j < linesBelow.length; j++){\n        const line = linesBelow[j];\n        const { first , last , point  } = findPoint(line, sourcePoint, 'x');\n        if (!point || first && last) {\n            continue;\n        }\n        if (first) {\n            postponed.unshift(point);\n        } else {\n            points.push(point);\n            if (!last) {\n                break;\n            }\n        }\n    }\n    points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n    const point = line.interpolate(sourcePoint, property);\n    if (!point) {\n        return {};\n    }\n    const pointValue = point[property];\n    const segments = line.segments;\n    const linePoints = line.points;\n    let first = false;\n    let last = false;\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        const firstValue = linePoints[segment.start][property];\n        const lastValue = linePoints[segment.end][property];\n        if (helpers_dataset._isBetween(pointValue, firstValue, lastValue)) {\n            first = pointValue === firstValue;\n            last = pointValue === lastValue;\n            break;\n        }\n    }\n    return {\n        first,\n        last,\n        point\n    };\n}\n\nclass simpleArc {\n    constructor(opts){\n        this.x = opts.x;\n        this.y = opts.y;\n        this.radius = opts.radius;\n    }\n    pathSegment(ctx, bounds, opts) {\n        const { x , y , radius  } = this;\n        bounds = bounds || {\n            start: 0,\n            end: helpers_dataset.TAU\n        };\n        ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n        return !opts.bounds;\n    }\n    interpolate(point) {\n        const { x , y , radius  } = this;\n        const angle = point.angle;\n        return {\n            x: x + Math.cos(angle) * radius,\n            y: y + Math.sin(angle) * radius,\n            angle\n        };\n    }\n}\n\nfunction _getTarget(source) {\n    const { chart , fill , line  } = source;\n    if (helpers_dataset.isNumberFinite(fill)) {\n        return getLineByIndex(chart, fill);\n    }\n    if (fill === 'stack') {\n        return _buildStackLine(source);\n    }\n    if (fill === 'shape') {\n        return true;\n    }\n    const boundary = computeBoundary(source);\n    if (boundary instanceof simpleArc) {\n        return boundary;\n    }\n    return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n    const meta = chart.getDatasetMeta(index);\n    const visible = meta && chart.isDatasetVisible(index);\n    return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n    const scale = source.scale || {};\n    if (scale.getPointPositionForValue) {\n        return computeCircularBoundary(source);\n    }\n    return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n    const { scale ={} , fill  } = source;\n    const pixel = _getTargetPixel(fill, scale);\n    if (helpers_dataset.isNumberFinite(pixel)) {\n        const horizontal = scale.isHorizontal();\n        return {\n            x: horizontal ? pixel : null,\n            y: horizontal ? null : pixel\n        };\n    }\n    return null;\n}\nfunction computeCircularBoundary(source) {\n    const { scale , fill  } = source;\n    const options = scale.options;\n    const length = scale.getLabels().length;\n    const start = options.reverse ? scale.max : scale.min;\n    const value = _getTargetValue(fill, scale, start);\n    const target = [];\n    if (options.grid.circular) {\n        const center = scale.getPointPositionForValue(0, start);\n        return new simpleArc({\n            x: center.x,\n            y: center.y,\n            radius: scale.getDistanceFromCenterForValue(value)\n        });\n    }\n    for(let i = 0; i < length; ++i){\n        target.push(scale.getPointPositionForValue(i, value));\n    }\n    return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n    const target = _getTarget(source);\n    const { chart , index , line , scale , axis  } = source;\n    const lineOpts = line.options;\n    const fillOption = lineOpts.fill;\n    const color = lineOpts.backgroundColor;\n    const { above =color , below =color  } = fillOption || {};\n    const meta = chart.getDatasetMeta(index);\n    const clip = helpers_dataset.getDatasetClipArea(chart, meta);\n    if (target && line.points.length) {\n        helpers_dataset.clipArea(ctx, area);\n        doFill(ctx, {\n            line,\n            target,\n            above,\n            below,\n            area,\n            scale,\n            axis,\n            clip\n        });\n        helpers_dataset.unclipArea(ctx);\n    }\n}\nfunction doFill(ctx, cfg) {\n    const { line , target , above , below , area , scale , clip  } = cfg;\n    const property = line._loop ? 'angle' : cfg.axis;\n    ctx.save();\n    let fillColor = below;\n    if (below !== above) {\n        if (property === 'x') {\n            clipVertical(ctx, target, area.top);\n            fill(ctx, {\n                line,\n                target,\n                color: above,\n                scale,\n                property,\n                clip\n            });\n            ctx.restore();\n            ctx.save();\n            clipVertical(ctx, target, area.bottom);\n        } else if (property === 'y') {\n            clipHorizontal(ctx, target, area.left);\n            fill(ctx, {\n                line,\n                target,\n                color: below,\n                scale,\n                property,\n                clip\n            });\n            ctx.restore();\n            ctx.save();\n            clipHorizontal(ctx, target, area.right);\n            fillColor = above;\n        }\n    }\n    fill(ctx, {\n        line,\n        target,\n        color: fillColor,\n        scale,\n        property,\n        clip\n    });\n    ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(firstPoint.x, clipY);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(lastPoint.x, clipY);\n        }\n    }\n    ctx.lineTo(target.first().x, clipY);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(clipX, firstPoint.y);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(clipX, lastPoint.y);\n        }\n    }\n    ctx.lineTo(clipX, target.first().y);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction fill(ctx, cfg) {\n    const { line , target , property , color , scale , clip  } = cfg;\n    const segments = _segments(line, target, property);\n    for (const { source: src , target: tgt , start , end  } of segments){\n        const { style: { backgroundColor =color  } = {}  } = src;\n        const notShape = target !== true;\n        ctx.save();\n        ctx.fillStyle = backgroundColor;\n        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n        ctx.beginPath();\n        const lineLoop = !!line.pathSegment(ctx, src);\n        let loop;\n        if (notShape) {\n            if (lineLoop) {\n                ctx.closePath();\n            } else {\n                interpolatedLineTo(ctx, target, end, property);\n            }\n            const targetLoop = !!target.pathSegment(ctx, tgt, {\n                move: lineLoop,\n                reverse: true\n            });\n            loop = lineLoop && targetLoop;\n            if (!loop) {\n                interpolatedLineTo(ctx, target, start, property);\n            }\n        }\n        ctx.closePath();\n        ctx.fill(loop ? 'evenodd' : 'nonzero');\n        ctx.restore();\n    }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n    const chartArea = scale.chart.chartArea;\n    const { property , start , end  } = bounds || {};\n    if (property === 'x' || property === 'y') {\n        let left, top, right, bottom;\n        if (property === 'x') {\n            left = start;\n            top = chartArea.top;\n            right = end;\n            bottom = chartArea.bottom;\n        } else {\n            left = chartArea.left;\n            top = start;\n            right = chartArea.right;\n            bottom = end;\n        }\n        ctx.beginPath();\n        if (clip) {\n            left = Math.max(left, clip.left);\n            right = Math.min(right, clip.right);\n            top = Math.max(top, clip.top);\n            bottom = Math.min(bottom, clip.bottom);\n        }\n        ctx.rect(left, top, right - left, bottom - top);\n        ctx.clip();\n    }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n    const interpolatedPoint = target.interpolate(point, property);\n    if (interpolatedPoint) {\n        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n    }\n}\n\nvar index = {\n    id: 'filler',\n    afterDatasetsUpdate (chart, _args, options) {\n        const count = (chart.data.datasets || []).length;\n        const sources = [];\n        let meta, i, line, source;\n        for(i = 0; i < count; ++i){\n            meta = chart.getDatasetMeta(i);\n            line = meta.dataset;\n            source = null;\n            if (line && line.options && line instanceof LineElement) {\n                source = {\n                    visible: chart.isDatasetVisible(i),\n                    index: i,\n                    fill: _decodeFill(line, i, count),\n                    chart,\n                    axis: meta.controller.options.indexAxis,\n                    scale: meta.vScale,\n                    line\n                };\n            }\n            meta.$filler = source;\n            sources.push(source);\n        }\n        for(i = 0; i < count; ++i){\n            source = sources[i];\n            if (!source || source.fill === false) {\n                continue;\n            }\n            source.fill = _resolveTarget(sources, i, options.propagate);\n        }\n    },\n    beforeDraw (chart, _args, options) {\n        const draw = options.drawTime === 'beforeDraw';\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        const area = chart.chartArea;\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (!source) {\n                continue;\n            }\n            source.line.updateControlPoints(area, source.axis);\n            if (draw && source.fill) {\n                _drawfill(chart.ctx, source, area);\n            }\n        }\n    },\n    beforeDatasetsDraw (chart, _args, options) {\n        if (options.drawTime !== 'beforeDatasetsDraw') {\n            return;\n        }\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (_shouldApplyFill(source)) {\n                _drawfill(chart.ctx, source, chart.chartArea);\n            }\n        }\n    },\n    beforeDatasetDraw (chart, args, options) {\n        const source = args.meta.$filler;\n        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n            return;\n        }\n        _drawfill(chart.ctx, source, chart.chartArea);\n    },\n    defaults: {\n        propagate: true,\n        drawTime: 'beforeDatasetDraw'\n    }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;\n    if (labelOpts.usePointStyle) {\n        boxHeight = Math.min(boxHeight, fontSize);\n        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n    }\n    return {\n        boxWidth,\n        boxHeight,\n        itemHeight: Math.max(fontSize, boxHeight)\n    };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n        super();\n        this._added = false;\n        this.legendHitBoxes = [];\n this._hoveredItem = null;\n        this.doughnutMode = false;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this.legendItems = undefined;\n        this.columnSizes = undefined;\n        this.lineWidths = undefined;\n        this.maxHeight = undefined;\n        this.maxWidth = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this._margins = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight, margins) {\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins;\n        this.setDimensions();\n        this.buildLabels();\n        this.fit();\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = this._margins.left;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = this._margins.top;\n            this.bottom = this.height;\n        }\n    }\n    buildLabels() {\n        const labelOpts = this.options.labels || {};\n        let legendItems = helpers_dataset.callback(labelOpts.generateLabels, [\n            this.chart\n        ], this) || [];\n        if (labelOpts.filter) {\n            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n        }\n        if (labelOpts.sort) {\n            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n        }\n        if (this.options.reverse) {\n            legendItems.reverse();\n        }\n        this.legendItems = legendItems;\n    }\n    fit() {\n        const { options , ctx  } = this;\n        if (!options.display) {\n            this.width = this.height = 0;\n            return;\n        }\n        const labelOpts = options.labels;\n        const labelFont = helpers_dataset.toFont(labelOpts.font);\n        const fontSize = labelFont.size;\n        const titleHeight = this._computeTitleHeight();\n        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        let width, height;\n        ctx.font = labelFont.string;\n        if (this.isHorizontal()) {\n            width = this.maxWidth;\n            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n        } else {\n            height = this.maxHeight;\n            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n        }\n        this.width = Math.min(width, options.maxWidth || this.maxWidth);\n        this.height = Math.min(height, options.maxHeight || this.maxHeight);\n    }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const lineWidths = this.lineWidths = [\n            0\n        ];\n        const lineHeight = itemHeight + padding;\n        let totalHeight = titleHeight;\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        let row = -1;\n        let top = -lineHeight;\n        this.legendItems.forEach((legendItem, i)=>{\n            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n                totalHeight += lineHeight;\n                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n                top += lineHeight;\n                row++;\n            }\n            hitboxes[i] = {\n                left: 0,\n                top,\n                row,\n                width: itemWidth,\n                height: itemHeight\n            };\n            lineWidths[lineWidths.length - 1] += itemWidth + padding;\n        });\n        return totalHeight;\n    }\n    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const columnSizes = this.columnSizes = [];\n        const heightLimit = maxHeight - titleHeight;\n        let totalWidth = padding;\n        let currentColWidth = 0;\n        let currentColHeight = 0;\n        let left = 0;\n        let col = 0;\n        this.legendItems.forEach((legendItem, i)=>{\n            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n                totalWidth += currentColWidth + padding;\n                columnSizes.push({\n                    width: currentColWidth,\n                    height: currentColHeight\n                });\n                left += currentColWidth + padding;\n                col++;\n                currentColWidth = currentColHeight = 0;\n            }\n            hitboxes[i] = {\n                left,\n                top: currentColHeight,\n                col,\n                width: itemWidth,\n                height: itemHeight\n            };\n            currentColWidth = Math.max(currentColWidth, itemWidth);\n            currentColHeight += itemHeight + padding;\n        });\n        totalWidth += currentColWidth;\n        columnSizes.push({\n            width: currentColWidth,\n            height: currentColHeight\n        });\n        return totalWidth;\n    }\n    adjustHitBoxes() {\n        if (!this.options.display) {\n            return;\n        }\n        const titleHeight = this._computeTitleHeight();\n        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;\n        const rtlHelper = helpers_dataset.getRtlAdapter(rtl, this.left, this.width);\n        if (this.isHorizontal()) {\n            let row = 0;\n            let left = helpers_dataset._alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n            for (const hitbox of hitboxes){\n                if (row !== hitbox.row) {\n                    row = hitbox.row;\n                    left = helpers_dataset._alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n                }\n                hitbox.top += this.top + titleHeight + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n                left += hitbox.width + padding;\n            }\n        } else {\n            let col = 0;\n            let top = helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n            for (const hitbox of hitboxes){\n                if (hitbox.col !== col) {\n                    col = hitbox.col;\n                    top = helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n                }\n                hitbox.top = top;\n                hitbox.left += this.left + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n                top += hitbox.height + padding;\n            }\n        }\n    }\n    isHorizontal() {\n        return this.options.position === 'top' || this.options.position === 'bottom';\n    }\n    draw() {\n        if (this.options.display) {\n            const ctx = this.ctx;\n            helpers_dataset.clipArea(ctx, this);\n            this._draw();\n            helpers_dataset.unclipArea(ctx);\n        }\n    }\n _draw() {\n        const { options: opts , columnSizes , lineWidths , ctx  } = this;\n        const { align , labels: labelOpts  } = opts;\n        const defaultColor = helpers_dataset.defaults.color;\n        const rtlHelper = helpers_dataset.getRtlAdapter(opts.rtl, this.left, this.width);\n        const labelFont = helpers_dataset.toFont(labelOpts.font);\n        const { padding  } = labelOpts;\n        const fontSize = labelFont.size;\n        const halfFontSize = fontSize / 2;\n        let cursor;\n        this.drawTitle();\n        ctx.textAlign = rtlHelper.textAlign('left');\n        ctx.textBaseline = 'middle';\n        ctx.lineWidth = 0.5;\n        ctx.font = labelFont.string;\n        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        const drawLegendBox = function(x, y, legendItem) {\n            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n                return;\n            }\n            ctx.save();\n            const lineWidth = helpers_dataset.valueOrDefault(legendItem.lineWidth, 1);\n            ctx.fillStyle = helpers_dataset.valueOrDefault(legendItem.fillStyle, defaultColor);\n            ctx.lineCap = helpers_dataset.valueOrDefault(legendItem.lineCap, 'butt');\n            ctx.lineDashOffset = helpers_dataset.valueOrDefault(legendItem.lineDashOffset, 0);\n            ctx.lineJoin = helpers_dataset.valueOrDefault(legendItem.lineJoin, 'miter');\n            ctx.lineWidth = lineWidth;\n            ctx.strokeStyle = helpers_dataset.valueOrDefault(legendItem.strokeStyle, defaultColor);\n            ctx.setLineDash(helpers_dataset.valueOrDefault(legendItem.lineDash, []));\n            if (labelOpts.usePointStyle) {\n                const drawOptions = {\n                    radius: boxHeight * Math.SQRT2 / 2,\n                    pointStyle: legendItem.pointStyle,\n                    rotation: legendItem.rotation,\n                    borderWidth: lineWidth\n                };\n                const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n                const centerY = y + halfFontSize;\n                helpers_dataset.drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n            } else {\n                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n                const borderRadius = helpers_dataset.toTRBLCorners(legendItem.borderRadius);\n                ctx.beginPath();\n                if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                    helpers_dataset.addRoundedRectPath(ctx, {\n                        x: xBoxLeft,\n                        y: yBoxTop,\n                        w: boxWidth,\n                        h: boxHeight,\n                        radius: borderRadius\n                    });\n                } else {\n                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n                }\n                ctx.fill();\n                if (lineWidth !== 0) {\n                    ctx.stroke();\n                }\n            }\n            ctx.restore();\n        };\n        const fillText = function(x, y, legendItem) {\n            helpers_dataset.renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n                strikethrough: legendItem.hidden,\n                textAlign: rtlHelper.textAlign(legendItem.textAlign)\n            });\n        };\n        const isHorizontal = this.isHorizontal();\n        const titleHeight = this._computeTitleHeight();\n        if (isHorizontal) {\n            cursor = {\n                x: helpers_dataset._alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n                y: this.top + padding + titleHeight,\n                line: 0\n            };\n        } else {\n            cursor = {\n                x: this.left + padding,\n                y: helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n                line: 0\n            };\n        }\n        helpers_dataset.overrideTextDirection(this.ctx, opts.textDirection);\n        const lineHeight = itemHeight + padding;\n        this.legendItems.forEach((legendItem, i)=>{\n            ctx.strokeStyle = legendItem.fontColor;\n            ctx.fillStyle = legendItem.fontColor;\n            const textWidth = ctx.measureText(legendItem.text).width;\n            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n            const width = boxWidth + halfFontSize + textWidth;\n            let x = cursor.x;\n            let y = cursor.y;\n            rtlHelper.setWidth(this.width);\n            if (isHorizontal) {\n                if (i > 0 && x + width + padding > this.right) {\n                    y = cursor.y += lineHeight;\n                    cursor.line++;\n                    x = cursor.x = helpers_dataset._alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n                }\n            } else if (i > 0 && y + lineHeight > this.bottom) {\n                x = cursor.x = x + columnSizes[cursor.line].width + padding;\n                cursor.line++;\n                y = cursor.y = helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n            }\n            const realX = rtlHelper.x(x);\n            drawLegendBox(realX, y, legendItem);\n            x = helpers_dataset._textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n            fillText(rtlHelper.x(x), y, legendItem);\n            if (isHorizontal) {\n                cursor.x += width + padding;\n            } else if (typeof legendItem.text !== 'string') {\n                const fontLineHeight = labelFont.lineHeight;\n                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n            } else {\n                cursor.y += lineHeight;\n            }\n        });\n        helpers_dataset.restoreTextDirection(this.ctx, opts.textDirection);\n    }\n drawTitle() {\n        const opts = this.options;\n        const titleOpts = opts.title;\n        const titleFont = helpers_dataset.toFont(titleOpts.font);\n        const titlePadding = helpers_dataset.toPadding(titleOpts.padding);\n        if (!titleOpts.display) {\n            return;\n        }\n        const rtlHelper = helpers_dataset.getRtlAdapter(opts.rtl, this.left, this.width);\n        const ctx = this.ctx;\n        const position = titleOpts.position;\n        const halfFontSize = titleFont.size / 2;\n        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n        let y;\n        let left = this.left;\n        let maxWidth = this.width;\n        if (this.isHorizontal()) {\n            maxWidth = Math.max(...this.lineWidths);\n            y = this.top + topPaddingPlusHalfFontSize;\n            left = helpers_dataset._alignStartEnd(opts.align, left, this.right - maxWidth);\n        } else {\n            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n            y = topPaddingPlusHalfFontSize + helpers_dataset._alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n        }\n        const x = helpers_dataset._alignStartEnd(position, left, left + maxWidth);\n        ctx.textAlign = rtlHelper.textAlign(helpers_dataset._toLeftRightCenter(position));\n        ctx.textBaseline = 'middle';\n        ctx.strokeStyle = titleOpts.color;\n        ctx.fillStyle = titleOpts.color;\n        ctx.font = titleFont.string;\n        helpers_dataset.renderText(ctx, titleOpts.text, x, y, titleFont);\n    }\n _computeTitleHeight() {\n        const titleOpts = this.options.title;\n        const titleFont = helpers_dataset.toFont(titleOpts.font);\n        const titlePadding = helpers_dataset.toPadding(titleOpts.padding);\n        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n    }\n _getLegendItemAt(x, y) {\n        let i, hitBox, lh;\n        if (helpers_dataset._isBetween(x, this.left, this.right) && helpers_dataset._isBetween(y, this.top, this.bottom)) {\n            lh = this.legendHitBoxes;\n            for(i = 0; i < lh.length; ++i){\n                hitBox = lh[i];\n                if (helpers_dataset._isBetween(x, hitBox.left, hitBox.left + hitBox.width) && helpers_dataset._isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n                    return this.legendItems[i];\n                }\n            }\n        }\n        return null;\n    }\n handleEvent(e) {\n        const opts = this.options;\n        if (!isListened(e.type, opts)) {\n            return;\n        }\n        const hoveredItem = this._getLegendItemAt(e.x, e.y);\n        if (e.type === 'mousemove' || e.type === 'mouseout') {\n            const previous = this._hoveredItem;\n            const sameItem = itemsEqual(previous, hoveredItem);\n            if (previous && !sameItem) {\n                helpers_dataset.callback(opts.onLeave, [\n                    e,\n                    previous,\n                    this\n                ], this);\n            }\n            this._hoveredItem = hoveredItem;\n            if (hoveredItem && !sameItem) {\n                helpers_dataset.callback(opts.onHover, [\n                    e,\n                    hoveredItem,\n                    this\n                ], this);\n            }\n        } else if (hoveredItem) {\n            helpers_dataset.callback(opts.onClick, [\n                e,\n                hoveredItem,\n                this\n            ], this);\n        }\n    }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n    return {\n        itemWidth,\n        itemHeight\n    };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n    let legendItemText = legendItem.text;\n    if (legendItemText && typeof legendItemText !== 'string') {\n        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n    }\n    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n    let itemHeight = _itemHeight;\n    if (typeof legendItem.text !== 'string') {\n        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n    }\n    return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n    const labelHeight = legendItem.text ? legendItem.text.length : 0;\n    return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n        return true;\n    }\n    if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n        return true;\n    }\n    return false;\n}\nvar plugin_legend = {\n    id: 'legend',\n _element: Legend,\n    start (chart, _args, options) {\n        const legend = chart.legend = new Legend({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, legend, options);\n        layouts.addBox(chart, legend);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, chart.legend);\n        delete chart.legend;\n    },\n    beforeUpdate (chart, _args, options) {\n        const legend = chart.legend;\n        layouts.configure(chart, legend, options);\n        legend.options = options;\n    },\n    afterUpdate (chart) {\n        const legend = chart.legend;\n        legend.buildLabels();\n        legend.adjustHitBoxes();\n    },\n    afterEvent (chart, args) {\n        if (!args.replay) {\n            chart.legend.handleEvent(args.event);\n        }\n    },\n    defaults: {\n        display: true,\n        position: 'top',\n        align: 'center',\n        fullSize: true,\n        reverse: false,\n        weight: 1000,\n        onClick (e, legendItem, legend) {\n            const index = legendItem.datasetIndex;\n            const ci = legend.chart;\n            if (ci.isDatasetVisible(index)) {\n                ci.hide(index);\n                legendItem.hidden = true;\n            } else {\n                ci.show(index);\n                legendItem.hidden = false;\n            }\n        },\n        onHover: null,\n        onLeave: null,\n        labels: {\n            color: (ctx)=>ctx.chart.options.color,\n            boxWidth: 40,\n            padding: 10,\n            generateLabels (chart) {\n                const datasets = chart.data.datasets;\n                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                return chart._getSortedDatasetMetas().map((meta)=>{\n                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n                    const borderWidth = helpers_dataset.toPadding(style.borderWidth);\n                    return {\n                        text: datasets[meta.index].label,\n                        fillStyle: style.backgroundColor,\n                        fontColor: color,\n                        hidden: !meta.visible,\n                        lineCap: style.borderCapStyle,\n                        lineDash: style.borderDash,\n                        lineDashOffset: style.borderDashOffset,\n                        lineJoin: style.borderJoinStyle,\n                        lineWidth: (borderWidth.width + borderWidth.height) / 4,\n                        strokeStyle: style.borderColor,\n                        pointStyle: pointStyle || style.pointStyle,\n                        rotation: style.rotation,\n                        textAlign: textAlign || style.textAlign,\n                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                        datasetIndex: meta.index\n                    };\n                }, this);\n            }\n        },\n        title: {\n            color: (ctx)=>ctx.chart.options.color,\n            display: false,\n            position: 'center',\n            text: ''\n        }\n    },\n    descriptors: {\n        _scriptable: (name)=>!name.startsWith('on'),\n        labels: {\n            _scriptable: (name)=>![\n                    'generateLabels',\n                    'filter',\n                    'sort'\n                ].includes(name)\n        }\n    }\n};\n\nclass Title extends Element {\n constructor(config){\n        super();\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this._padding = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight) {\n        const opts = this.options;\n        this.left = 0;\n        this.top = 0;\n        if (!opts.display) {\n            this.width = this.height = this.right = this.bottom = 0;\n            return;\n        }\n        this.width = this.right = maxWidth;\n        this.height = this.bottom = maxHeight;\n        const lineCount = helpers_dataset.isArray(opts.text) ? opts.text.length : 1;\n        this._padding = helpers_dataset.toPadding(opts.padding);\n        const textSize = lineCount * helpers_dataset.toFont(opts.font).lineHeight + this._padding.height;\n        if (this.isHorizontal()) {\n            this.height = textSize;\n        } else {\n            this.width = textSize;\n        }\n    }\n    isHorizontal() {\n        const pos = this.options.position;\n        return pos === 'top' || pos === 'bottom';\n    }\n    _drawArgs(offset) {\n        const { top , left , bottom , right , options  } = this;\n        const align = options.align;\n        let rotation = 0;\n        let maxWidth, titleX, titleY;\n        if (this.isHorizontal()) {\n            titleX = helpers_dataset._alignStartEnd(align, left, right);\n            titleY = top + offset;\n            maxWidth = right - left;\n        } else {\n            if (options.position === 'left') {\n                titleX = left + offset;\n                titleY = helpers_dataset._alignStartEnd(align, bottom, top);\n                rotation = helpers_dataset.PI * -0.5;\n            } else {\n                titleX = right - offset;\n                titleY = helpers_dataset._alignStartEnd(align, top, bottom);\n                rotation = helpers_dataset.PI * 0.5;\n            }\n            maxWidth = bottom - top;\n        }\n        return {\n            titleX,\n            titleY,\n            maxWidth,\n            rotation\n        };\n    }\n    draw() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        if (!opts.display) {\n            return;\n        }\n        const fontOpts = helpers_dataset.toFont(opts.font);\n        const lineHeight = fontOpts.lineHeight;\n        const offset = lineHeight / 2 + this._padding.top;\n        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);\n        helpers_dataset.renderText(ctx, opts.text, 0, 0, fontOpts, {\n            color: opts.color,\n            maxWidth,\n            rotation,\n            textAlign: helpers_dataset._toLeftRightCenter(opts.align),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n}\nfunction createTitle(chart, titleOpts) {\n    const title = new Title({\n        ctx: chart.ctx,\n        options: titleOpts,\n        chart\n    });\n    layouts.configure(chart, title, titleOpts);\n    layouts.addBox(chart, title);\n    chart.titleBlock = title;\n}\nvar plugin_title = {\n    id: 'title',\n _element: Title,\n    start (chart, _args, options) {\n        createTitle(chart, options);\n    },\n    stop (chart) {\n        const titleBlock = chart.titleBlock;\n        layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = chart.titleBlock;\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'bold'\n        },\n        fullSize: true,\n        padding: 10,\n        position: 'top',\n        text: '',\n        weight: 2000\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n    id: 'subtitle',\n    start (chart, _args, options) {\n        const title = new Title({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, title, options);\n        layouts.addBox(chart, title);\n        map.set(chart, title);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, map.get(chart));\n        map.delete(chart);\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = map.get(chart);\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'normal'\n        },\n        fullSize: true,\n        padding: 0,\n        position: 'top',\n        text: '',\n        weight: 1500\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst positioners = {\n average (items) {\n        if (!items.length) {\n            return false;\n        }\n        let i, len;\n        let xSet = new Set();\n        let y = 0;\n        let count = 0;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const pos = el.tooltipPosition();\n                xSet.add(pos.x);\n                y += pos.y;\n                ++count;\n            }\n        }\n        if (count === 0 || xSet.size === 0) {\n            return false;\n        }\n        const xAverage = [\n            ...xSet\n        ].reduce((a, b)=>a + b) / xSet.size;\n        return {\n            x: xAverage,\n            y: y / count\n        };\n    },\n nearest (items, eventPosition) {\n        if (!items.length) {\n            return false;\n        }\n        let x = eventPosition.x;\n        let y = eventPosition.y;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let i, len, nearestElement;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const center = el.getCenterPoint();\n                const d = helpers_dataset.distanceBetweenPoints(eventPosition, center);\n                if (d < minDistance) {\n                    minDistance = d;\n                    nearestElement = el;\n                }\n            }\n        }\n        if (nearestElement) {\n            const tp = nearestElement.tooltipPosition();\n            x = tp.x;\n            y = tp.y;\n        }\n        return {\n            x,\n            y\n        };\n    }\n};\nfunction pushOrConcat(base, toPush) {\n    if (toPush) {\n        if (helpers_dataset.isArray(toPush)) {\n            Array.prototype.push.apply(base, toPush);\n        } else {\n            base.push(toPush);\n        }\n    }\n    return base;\n}\n function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n        return str.split('\\n');\n    }\n    return str;\n}\n function createTooltipItem(chart, item) {\n    const { element , datasetIndex , index  } = item;\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n    const { label , value  } = controller.getLabelAndValue(index);\n    return {\n        chart,\n        label,\n        parsed: controller.getParsed(index),\n        raw: chart.data.datasets[datasetIndex].data[index],\n        formattedValue: value,\n        dataset: controller.getDataset(),\n        dataIndex: index,\n        datasetIndex,\n        element\n    };\n}\n function getTooltipSize(tooltip, options) {\n    const ctx = tooltip.chart.ctx;\n    const { body , footer , title  } = tooltip;\n    const { boxWidth , boxHeight  } = options;\n    const bodyFont = helpers_dataset.toFont(options.bodyFont);\n    const titleFont = helpers_dataset.toFont(options.titleFont);\n    const footerFont = helpers_dataset.toFont(options.footerFont);\n    const titleLineCount = title.length;\n    const footerLineCount = footer.length;\n    const bodyLineItemCount = body.length;\n    const padding = helpers_dataset.toPadding(options.padding);\n    let height = padding.height;\n    let width = 0;\n    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n    if (titleLineCount) {\n        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n    }\n    if (combinedBodyLength) {\n        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n    }\n    if (footerLineCount) {\n        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n    }\n    let widthPadding = 0;\n    const maxLineWidth = function(line) {\n        width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n    ctx.save();\n    ctx.font = titleFont.string;\n    helpers_dataset.each(tooltip.title, maxLineWidth);\n    ctx.font = bodyFont.string;\n    helpers_dataset.each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n    helpers_dataset.each(body, (bodyItem)=>{\n        helpers_dataset.each(bodyItem.before, maxLineWidth);\n        helpers_dataset.each(bodyItem.lines, maxLineWidth);\n        helpers_dataset.each(bodyItem.after, maxLineWidth);\n    });\n    widthPadding = 0;\n    ctx.font = footerFont.string;\n    helpers_dataset.each(tooltip.footer, maxLineWidth);\n    ctx.restore();\n    width += padding.width;\n    return {\n        width,\n        height\n    };\n}\nfunction determineYAlign(chart, size) {\n    const { y , height  } = size;\n    if (y < height / 2) {\n        return 'top';\n    } else if (y > chart.height - height / 2) {\n        return 'bottom';\n    }\n    return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n    const { x , width  } = size;\n    const caret = options.caretSize + options.caretPadding;\n    if (xAlign === 'left' && x + width + caret > chart.width) {\n        return true;\n    }\n    if (xAlign === 'right' && x - width - caret < 0) {\n        return true;\n    }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n    const { x , width  } = size;\n    const { width: chartWidth , chartArea: { left , right  }  } = chart;\n    let xAlign = 'center';\n    if (yAlign === 'center') {\n        xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n    } else if (x <= width / 2) {\n        xAlign = 'left';\n    } else if (x >= chartWidth - width / 2) {\n        xAlign = 'right';\n    }\n    if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n        xAlign = 'center';\n    }\n    return xAlign;\n}\n function determineAlignment(chart, options, size) {\n    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n    return {\n        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n        yAlign\n    };\n}\nfunction alignX(size, xAlign) {\n    let { x , width  } = size;\n    if (xAlign === 'right') {\n        x -= width;\n    } else if (xAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n    let { y , height  } = size;\n    if (yAlign === 'top') {\n        y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n        y -= height + paddingAndSize;\n    } else {\n        y -= height / 2;\n    }\n    return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n    const { caretSize , caretPadding , cornerRadius  } = options;\n    const { xAlign , yAlign  } = alignment;\n    const paddingAndSize = caretSize + caretPadding;\n    const { topLeft , topRight , bottomLeft , bottomRight  } = helpers_dataset.toTRBLCorners(cornerRadius);\n    let x = alignX(size, xAlign);\n    const y = alignY(size, yAlign, paddingAndSize);\n    if (yAlign === 'center') {\n        if (xAlign === 'left') {\n            x += paddingAndSize;\n        } else if (xAlign === 'right') {\n            x -= paddingAndSize;\n        }\n    } else if (xAlign === 'left') {\n        x -= Math.max(topLeft, bottomLeft) + caretSize;\n    } else if (xAlign === 'right') {\n        x += Math.max(topRight, bottomRight) + caretSize;\n    }\n    return {\n        x: helpers_dataset._limitValue(x, 0, chart.width - size.width),\n        y: helpers_dataset._limitValue(y, 0, chart.height - size.height)\n    };\n}\nfunction getAlignedX(tooltip, align, options) {\n    const padding = helpers_dataset.toPadding(options.padding);\n    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n    return helpers_dataset.createContext(parent, {\n        tooltip,\n        tooltipItems,\n        type: 'tooltip'\n    });\n}\nfunction overrideCallbacks(callbacks, context) {\n    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n    return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n    beforeTitle: helpers_dataset.noop,\n    title (tooltipItems) {\n        if (tooltipItems.length > 0) {\n            const item = tooltipItems[0];\n            const labels = item.chart.data.labels;\n            const labelCount = labels ? labels.length : 0;\n            if (this && this.options && this.options.mode === 'dataset') {\n                return item.dataset.label || '';\n            } else if (item.label) {\n                return item.label;\n            } else if (labelCount > 0 && item.dataIndex < labelCount) {\n                return labels[item.dataIndex];\n            }\n        }\n        return '';\n    },\n    afterTitle: helpers_dataset.noop,\n    beforeBody: helpers_dataset.noop,\n    beforeLabel: helpers_dataset.noop,\n    label (tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n            label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!helpers_dataset.isNullOrUndef(value)) {\n            label += value;\n        }\n        return label;\n    },\n    labelColor (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            borderColor: options.borderColor,\n            backgroundColor: options.backgroundColor,\n            borderWidth: options.borderWidth,\n            borderDash: options.borderDash,\n            borderDashOffset: options.borderDashOffset,\n            borderRadius: 0\n        };\n    },\n    labelTextColor () {\n        return this.options.bodyColor;\n    },\n    labelPointStyle (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            pointStyle: options.pointStyle,\n            rotation: options.rotation\n        };\n    },\n    afterLabel: helpers_dataset.noop,\n    afterBody: helpers_dataset.noop,\n    beforeFooter: helpers_dataset.noop,\n    footer: helpers_dataset.noop,\n    afterFooter: helpers_dataset.noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n    const result = callbacks[name].call(ctx, arg);\n    if (typeof result === 'undefined') {\n        return defaultCallbacks[name].call(ctx, arg);\n    }\n    return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n    constructor(config){\n        super();\n        this.opacity = 0;\n        this._active = [];\n        this._eventPosition = undefined;\n        this._size = undefined;\n        this._cachedAnimations = undefined;\n        this._tooltipItems = [];\n        this.$animations = undefined;\n        this.$context = undefined;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.dataPoints = undefined;\n        this.title = undefined;\n        this.beforeBody = undefined;\n        this.body = undefined;\n        this.afterBody = undefined;\n        this.footer = undefined;\n        this.xAlign = undefined;\n        this.yAlign = undefined;\n        this.x = undefined;\n        this.y = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this.caretX = undefined;\n        this.caretY = undefined;\n        this.labelColors = undefined;\n        this.labelPointStyles = undefined;\n        this.labelTextColors = undefined;\n    }\n    initialize(options) {\n        this.options = options;\n        this._cachedAnimations = undefined;\n        this.$context = undefined;\n    }\n _resolveAnimations() {\n        const cached = this._cachedAnimations;\n        if (cached) {\n            return cached;\n        }\n        const chart = this.chart;\n        const options = this.options.setContext(this.getContext());\n        const opts = options.enabled && chart.options.animation && options.animations;\n        const animations = new Animations(this.chart, opts);\n        if (opts._cacheable) {\n            this._cachedAnimations = Object.freeze(animations);\n        }\n        return animations;\n    }\n getContext() {\n        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n    }\n    getTitle(context, options) {\n        const { callbacks  } = options;\n        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n        lines = pushOrConcat(lines, splitNewlines(title));\n        lines = pushOrConcat(lines, splitNewlines(afterTitle));\n        return lines;\n    }\n    getBeforeBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n    }\n    getBody(tooltipItems, options) {\n        const { callbacks  } = options;\n        const bodyItems = [];\n        helpers_dataset.each(tooltipItems, (context)=>{\n            const bodyItem = {\n                before: [],\n                lines: [],\n                after: []\n            };\n            const scoped = overrideCallbacks(callbacks, context);\n            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n            bodyItems.push(bodyItem);\n        });\n        return bodyItems;\n    }\n    getAfterBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n    }\n    getFooter(tooltipItems, options) {\n        const { callbacks  } = options;\n        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n        lines = pushOrConcat(lines, splitNewlines(footer));\n        lines = pushOrConcat(lines, splitNewlines(afterFooter));\n        return lines;\n    }\n _createItems(options) {\n        const active = this._active;\n        const data = this.chart.data;\n        const labelColors = [];\n        const labelPointStyles = [];\n        const labelTextColors = [];\n        let tooltipItems = [];\n        let i, len;\n        for(i = 0, len = active.length; i < len; ++i){\n            tooltipItems.push(createTooltipItem(this.chart, active[i]));\n        }\n        if (options.filter) {\n            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n        }\n        if (options.itemSort) {\n            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n        }\n        helpers_dataset.each(tooltipItems, (context)=>{\n            const scoped = overrideCallbacks(options.callbacks, context);\n            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n        });\n        this.labelColors = labelColors;\n        this.labelPointStyles = labelPointStyles;\n        this.labelTextColors = labelTextColors;\n        this.dataPoints = tooltipItems;\n        return tooltipItems;\n    }\n    update(changed, replay) {\n        const options = this.options.setContext(this.getContext());\n        const active = this._active;\n        let properties;\n        let tooltipItems = [];\n        if (!active.length) {\n            if (this.opacity !== 0) {\n                properties = {\n                    opacity: 0\n                };\n            }\n        } else {\n            const position = positioners[options.position].call(this, active, this._eventPosition);\n            tooltipItems = this._createItems(options);\n            this.title = this.getTitle(tooltipItems, options);\n            this.beforeBody = this.getBeforeBody(tooltipItems, options);\n            this.body = this.getBody(tooltipItems, options);\n            this.afterBody = this.getAfterBody(tooltipItems, options);\n            this.footer = this.getFooter(tooltipItems, options);\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, size);\n            const alignment = determineAlignment(this.chart, options, positionAndSize);\n            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n            this.xAlign = alignment.xAlign;\n            this.yAlign = alignment.yAlign;\n            properties = {\n                opacity: 1,\n                x: backgroundPoint.x,\n                y: backgroundPoint.y,\n                width: size.width,\n                height: size.height,\n                caretX: position.x,\n                caretY: position.y\n            };\n        }\n        this._tooltipItems = tooltipItems;\n        this.$context = undefined;\n        if (properties) {\n            this._resolveAnimations().update(this, properties);\n        }\n        if (changed && options.external) {\n            options.external.call(this, {\n                chart: this.chart,\n                tooltip: this,\n                replay\n            });\n        }\n    }\n    drawCaret(tooltipPoint, ctx, size, options) {\n        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n        ctx.lineTo(caretPosition.x1, caretPosition.y1);\n        ctx.lineTo(caretPosition.x2, caretPosition.y2);\n        ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    }\n    getCaretPosition(tooltipPoint, size, options) {\n        const { xAlign , yAlign  } = this;\n        const { caretSize , cornerRadius  } = options;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = helpers_dataset.toTRBLCorners(cornerRadius);\n        const { x: ptX , y: ptY  } = tooltipPoint;\n        const { width , height  } = size;\n        let x1, x2, x3, y1, y2, y3;\n        if (yAlign === 'center') {\n            y2 = ptY + height / 2;\n            if (xAlign === 'left') {\n                x1 = ptX;\n                x2 = x1 - caretSize;\n                y1 = y2 + caretSize;\n                y3 = y2 - caretSize;\n            } else {\n                x1 = ptX + width;\n                x2 = x1 + caretSize;\n                y1 = y2 - caretSize;\n                y3 = y2 + caretSize;\n            }\n            x3 = x1;\n        } else {\n            if (xAlign === 'left') {\n                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n            } else if (xAlign === 'right') {\n                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n            } else {\n                x2 = this.caretX;\n            }\n            if (yAlign === 'top') {\n                y1 = ptY;\n                y2 = y1 - caretSize;\n                x1 = x2 - caretSize;\n                x3 = x2 + caretSize;\n            } else {\n                y1 = ptY + height;\n                y2 = y1 + caretSize;\n                x1 = x2 + caretSize;\n                x3 = x2 - caretSize;\n            }\n            y3 = y1;\n        }\n        return {\n            x1,\n            x2,\n            x3,\n            y1,\n            y2,\n            y3\n        };\n    }\n    drawTitle(pt, ctx, options) {\n        const title = this.title;\n        const length = title.length;\n        let titleFont, titleSpacing, i;\n        if (length) {\n            const rtlHelper = helpers_dataset.getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.titleAlign, options);\n            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n            ctx.textBaseline = 'middle';\n            titleFont = helpers_dataset.toFont(options.titleFont);\n            titleSpacing = options.titleSpacing;\n            ctx.fillStyle = options.titleColor;\n            ctx.font = titleFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n                pt.y += titleFont.lineHeight + titleSpacing;\n                if (i + 1 === length) {\n                    pt.y += options.titleMarginBottom - titleSpacing;\n                }\n            }\n        }\n    }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n        const labelColor = this.labelColors[i];\n        const labelPointStyle = this.labelPointStyles[i];\n        const { boxHeight , boxWidth  } = options;\n        const bodyFont = helpers_dataset.toFont(options.bodyFont);\n        const colorX = getAlignedX(this, 'left', options);\n        const rtlColorX = rtlHelper.x(colorX);\n        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n        const colorY = pt.y + yOffSet;\n        if (options.usePointStyle) {\n            const drawOptions = {\n                radius: Math.min(boxWidth, boxHeight) / 2,\n                pointStyle: labelPointStyle.pointStyle,\n                rotation: labelPointStyle.rotation,\n                borderWidth: 1\n            };\n            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n            const centerY = colorY + boxHeight / 2;\n            ctx.strokeStyle = options.multiKeyBackground;\n            ctx.fillStyle = options.multiKeyBackground;\n            helpers_dataset.drawPoint(ctx, drawOptions, centerX, centerY);\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.fillStyle = labelColor.backgroundColor;\n            helpers_dataset.drawPoint(ctx, drawOptions, centerX, centerY);\n        } else {\n            ctx.lineWidth = helpers_dataset.isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.setLineDash(labelColor.borderDash || []);\n            ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n            const borderRadius = helpers_dataset.toTRBLCorners(labelColor.borderRadius);\n            if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                ctx.beginPath();\n                ctx.fillStyle = options.multiKeyBackground;\n                helpers_dataset.addRoundedRectPath(ctx, {\n                    x: outerX,\n                    y: colorY,\n                    w: boxWidth,\n                    h: boxHeight,\n                    radius: borderRadius\n                });\n                ctx.fill();\n                ctx.stroke();\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.beginPath();\n                helpers_dataset.addRoundedRectPath(ctx, {\n                    x: innerX,\n                    y: colorY + 1,\n                    w: boxWidth - 2,\n                    h: boxHeight - 2,\n                    radius: borderRadius\n                });\n                ctx.fill();\n            } else {\n                ctx.fillStyle = options.multiKeyBackground;\n                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n            }\n        }\n        ctx.fillStyle = this.labelTextColors[i];\n    }\n    drawBody(pt, ctx, options) {\n        const { body  } = this;\n        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;\n        const bodyFont = helpers_dataset.toFont(options.bodyFont);\n        let bodyLineHeight = bodyFont.lineHeight;\n        let xLinePadding = 0;\n        const rtlHelper = helpers_dataset.getRtlAdapter(options.rtl, this.x, this.width);\n        const fillLineOfText = function(line) {\n            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n            pt.y += bodyLineHeight + bodySpacing;\n        };\n        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n        let bodyItem, textColor, lines, i, j, ilen, jlen;\n        ctx.textAlign = bodyAlign;\n        ctx.textBaseline = 'middle';\n        ctx.font = bodyFont.string;\n        pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n        ctx.fillStyle = options.bodyColor;\n        helpers_dataset.each(this.beforeBody, fillLineOfText);\n        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n        for(i = 0, ilen = body.length; i < ilen; ++i){\n            bodyItem = body[i];\n            textColor = this.labelTextColors[i];\n            ctx.fillStyle = textColor;\n            helpers_dataset.each(bodyItem.before, fillLineOfText);\n            lines = bodyItem.lines;\n            if (displayColors && lines.length) {\n                this._drawColorBox(ctx, pt, i, rtlHelper, options);\n                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n            }\n            for(j = 0, jlen = lines.length; j < jlen; ++j){\n                fillLineOfText(lines[j]);\n                bodyLineHeight = bodyFont.lineHeight;\n            }\n            helpers_dataset.each(bodyItem.after, fillLineOfText);\n        }\n        xLinePadding = 0;\n        bodyLineHeight = bodyFont.lineHeight;\n        helpers_dataset.each(this.afterBody, fillLineOfText);\n        pt.y -= bodySpacing;\n    }\n    drawFooter(pt, ctx, options) {\n        const footer = this.footer;\n        const length = footer.length;\n        let footerFont, i;\n        if (length) {\n            const rtlHelper = helpers_dataset.getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.footerAlign, options);\n            pt.y += options.footerMarginTop;\n            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n            ctx.textBaseline = 'middle';\n            footerFont = helpers_dataset.toFont(options.footerFont);\n            ctx.fillStyle = options.footerColor;\n            ctx.font = footerFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n                pt.y += footerFont.lineHeight + options.footerSpacing;\n            }\n        }\n    }\n    drawBackground(pt, ctx, tooltipSize, options) {\n        const { xAlign , yAlign  } = this;\n        const { x , y  } = pt;\n        const { width , height  } = tooltipSize;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = helpers_dataset.toTRBLCorners(options.cornerRadius);\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.beginPath();\n        ctx.moveTo(x + topLeft, y);\n        if (yAlign === 'top') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width - topRight, y);\n        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n        if (yAlign === 'center' && xAlign === 'right') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width, y + height - bottomRight);\n        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n        if (yAlign === 'bottom') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + bottomLeft, y + height);\n        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n        if (yAlign === 'center' && xAlign === 'left') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x, y + topLeft);\n        ctx.quadraticCurveTo(x, y, x + topLeft, y);\n        ctx.closePath();\n        ctx.fill();\n        if (options.borderWidth > 0) {\n            ctx.stroke();\n        }\n    }\n _updateAnimationTarget(options) {\n        const chart = this.chart;\n        const anims = this.$animations;\n        const animX = anims && anims.x;\n        const animY = anims && anims.y;\n        if (animX || animY) {\n            const position = positioners[options.position].call(this, this._active, this._eventPosition);\n            if (!position) {\n                return;\n            }\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, this._size);\n            const alignment = determineAlignment(chart, options, positionAndSize);\n            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n            if (animX._to !== point.x || animY._to !== point.y) {\n                this.xAlign = alignment.xAlign;\n                this.yAlign = alignment.yAlign;\n                this.width = size.width;\n                this.height = size.height;\n                this.caretX = position.x;\n                this.caretY = position.y;\n                this._resolveAnimations().update(this, point);\n            }\n        }\n    }\n _willRender() {\n        return !!this.opacity;\n    }\n    draw(ctx) {\n        const options = this.options.setContext(this.getContext());\n        let opacity = this.opacity;\n        if (!opacity) {\n            return;\n        }\n        this._updateAnimationTarget(options);\n        const tooltipSize = {\n            width: this.width,\n            height: this.height\n        };\n        const pt = {\n            x: this.x,\n            y: this.y\n        };\n        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n        const padding = helpers_dataset.toPadding(options.padding);\n        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n        if (options.enabled && hasTooltipContent) {\n            ctx.save();\n            ctx.globalAlpha = opacity;\n            this.drawBackground(pt, ctx, tooltipSize, options);\n            helpers_dataset.overrideTextDirection(ctx, options.textDirection);\n            pt.y += padding.top;\n            this.drawTitle(pt, ctx, options);\n            this.drawBody(pt, ctx, options);\n            this.drawFooter(pt, ctx, options);\n            helpers_dataset.restoreTextDirection(ctx, options.textDirection);\n            ctx.restore();\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements, eventPosition) {\n        const lastActive = this._active;\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.chart.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('Cannot find a dataset at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !helpers_dataset._elementsEqual(lastActive, active);\n        const positionChanged = this._positionChanged(active, eventPosition);\n        if (changed || positionChanged) {\n            this._active = active;\n            this._eventPosition = eventPosition;\n            this._ignoreReplayEvents = true;\n            this.update(true);\n        }\n    }\n handleEvent(e, replay, inChartArea = true) {\n        if (replay && this._ignoreReplayEvents) {\n            return false;\n        }\n        this._ignoreReplayEvents = false;\n        const options = this.options;\n        const lastActive = this._active || [];\n        const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n        const positionChanged = this._positionChanged(active, e);\n        const changed = replay || !helpers_dataset._elementsEqual(active, lastActive) || positionChanged;\n        if (changed) {\n            this._active = active;\n            if (options.enabled || options.external) {\n                this._eventPosition = {\n                    x: e.x,\n                    y: e.y\n                };\n                this.update(true, replay);\n            }\n        }\n        return changed;\n    }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n        const options = this.options;\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n        }\n        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n        if (options.reverse) {\n            active.reverse();\n        }\n        return active;\n    }\n _positionChanged(active, e) {\n        const { caretX , caretY , options  } = this;\n        const position = positioners[options.position].call(this, active, e);\n        return position !== false && (caretX !== position.x || caretY !== position.y);\n    }\n}\nvar plugin_tooltip = {\n    id: 'tooltip',\n    _element: Tooltip,\n    positioners,\n    afterInit (chart, _args, options) {\n        if (options) {\n            chart.tooltip = new Tooltip({\n                chart,\n                options\n            });\n        }\n    },\n    beforeUpdate (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    reset (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    afterDraw (chart) {\n        const tooltip = chart.tooltip;\n        if (tooltip && tooltip._willRender()) {\n            const args = {\n                tooltip\n            };\n            if (chart.notifyPlugins('beforeTooltipDraw', {\n                ...args,\n                cancelable: true\n            }) === false) {\n                return;\n            }\n            tooltip.draw(chart.ctx);\n            chart.notifyPlugins('afterTooltipDraw', args);\n        }\n    },\n    afterEvent (chart, args) {\n        if (chart.tooltip) {\n            const useFinalPosition = args.replay;\n            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n                args.changed = true;\n            }\n        }\n    },\n    defaults: {\n        enabled: true,\n        external: null,\n        position: 'average',\n        backgroundColor: 'rgba(0,0,0,0.8)',\n        titleColor: '#fff',\n        titleFont: {\n            weight: 'bold'\n        },\n        titleSpacing: 2,\n        titleMarginBottom: 6,\n        titleAlign: 'left',\n        bodyColor: '#fff',\n        bodySpacing: 2,\n        bodyFont: {},\n        bodyAlign: 'left',\n        footerColor: '#fff',\n        footerSpacing: 2,\n        footerMarginTop: 6,\n        footerFont: {\n            weight: 'bold'\n        },\n        footerAlign: 'left',\n        padding: 6,\n        caretPadding: 2,\n        caretSize: 5,\n        cornerRadius: 6,\n        boxHeight: (ctx, opts)=>opts.bodyFont.size,\n        boxWidth: (ctx, opts)=>opts.bodyFont.size,\n        multiKeyBackground: '#fff',\n        displayColors: true,\n        boxPadding: 0,\n        borderColor: 'rgba(0,0,0,0)',\n        borderWidth: 0,\n        animation: {\n            duration: 400,\n            easing: 'easeOutQuart'\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'width',\n                    'height',\n                    'caretX',\n                    'caretY'\n                ]\n            },\n            opacity: {\n                easing: 'linear',\n                duration: 200\n            }\n        },\n        callbacks: defaultCallbacks\n    },\n    defaultRoutes: {\n        bodyFont: 'font',\n        footerFont: 'font',\n        titleFont: 'font'\n    },\n    descriptors: {\n        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n        _indexable: false,\n        callbacks: {\n            _scriptable: false,\n            _indexable: false\n        },\n        animation: {\n            _fallback: false\n        },\n        animations: {\n            _fallback: 'animation'\n        }\n    },\n    additionalOptionScopes: [\n        'interaction'\n    ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n    if (typeof raw === 'string') {\n        index = labels.push(raw) - 1;\n        addedLabels.unshift({\n            index,\n            label: raw\n        });\n    } else if (isNaN(raw)) {\n        index = null;\n    }\n    return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n    const first = labels.indexOf(raw);\n    if (first === -1) {\n        return addIfString(labels, raw, index, addedLabels);\n    }\n    const last = labels.lastIndexOf(raw);\n    return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : helpers_dataset._limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n        return labels[value];\n    }\n    return value;\n}\nclass CategoryScale extends Scale {\n    static id = 'category';\n static defaults = {\n        ticks: {\n            callback: _getLabelForValue\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this._startValue = undefined;\n        this._valueRange = 0;\n        this._addedLabels = [];\n    }\n    init(scaleOptions) {\n        const added = this._addedLabels;\n        if (added.length) {\n            const labels = this.getLabels();\n            for (const { index , label  } of added){\n                if (labels[index] === label) {\n                    labels.splice(index, 1);\n                }\n            }\n            this._addedLabels = [];\n        }\n        super.init(scaleOptions);\n    }\n    parse(raw, index) {\n        if (helpers_dataset.isNullOrUndef(raw)) {\n            return null;\n        }\n        const labels = this.getLabels();\n        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, helpers_dataset.valueOrDefault(index, raw), this._addedLabels);\n        return validIndex(index, labels.length - 1);\n    }\n    determineDataLimits() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this.getMinMax(true);\n        if (this.options.bounds === 'ticks') {\n            if (!minDefined) {\n                min = 0;\n            }\n            if (!maxDefined) {\n                max = this.getLabels().length - 1;\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const min = this.min;\n        const max = this.max;\n        const offset = this.options.offset;\n        const ticks = [];\n        let labels = this.getLabels();\n        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n        this._startValue = this.min - (offset ? 0.5 : 0);\n        for(let value = min; value <= max; value++){\n            ticks.push({\n                value\n            });\n        }\n        return ticks;\n    }\n    getLabelForValue(value) {\n        return _getLabelForValue.call(this, value);\n    }\n configure() {\n        super.configure();\n        if (!this.isHorizontal()) {\n            this._reversePixels = !this._reversePixels;\n        }\n    }\n    getPixelForValue(value) {\n        if (typeof value !== 'number') {\n            value = this.parse(value);\n        }\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n    getValueForPixel(pixel) {\n        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n    }\n    getBasePixel() {\n        return this.bottom;\n    }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n    const ticks = [];\n    const MIN_SPACING = 1e-14;\n    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;\n    const unit = step || 1;\n    const maxSpaces = maxTicks - 1;\n    const { min: rmin , max: rmax  } = dataRange;\n    const minDefined = !helpers_dataset.isNullOrUndef(min);\n    const maxDefined = !helpers_dataset.isNullOrUndef(max);\n    const countDefined = !helpers_dataset.isNullOrUndef(count);\n    const minSpacing = (rmax - rmin) / (maxDigits + 1);\n    let spacing = helpers_dataset.niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n    let factor, niceMin, niceMax, numSpaces;\n    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n        return [\n            {\n                value: rmin\n            },\n            {\n                value: rmax\n            }\n        ];\n    }\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n    if (numSpaces > maxSpaces) {\n        spacing = helpers_dataset.niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n    }\n    if (!helpers_dataset.isNullOrUndef(precision)) {\n        factor = Math.pow(10, precision);\n        spacing = Math.ceil(spacing * factor) / factor;\n    }\n    if (bounds === 'ticks') {\n        niceMin = Math.floor(rmin / spacing) * spacing;\n        niceMax = Math.ceil(rmax / spacing) * spacing;\n    } else {\n        niceMin = rmin;\n        niceMax = rmax;\n    }\n    if (minDefined && maxDefined && step && helpers_dataset.almostWhole((max - min) / step, spacing / 1000)) {\n        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n        spacing = (max - min) / numSpaces;\n        niceMin = min;\n        niceMax = max;\n    } else if (countDefined) {\n        niceMin = minDefined ? min : niceMin;\n        niceMax = maxDefined ? max : niceMax;\n        numSpaces = count - 1;\n        spacing = (niceMax - niceMin) / numSpaces;\n    } else {\n        numSpaces = (niceMax - niceMin) / spacing;\n        if (helpers_dataset.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n            numSpaces = Math.round(numSpaces);\n        } else {\n            numSpaces = Math.ceil(numSpaces);\n        }\n    }\n    const decimalPlaces = Math.max(helpers_dataset._decimalPlaces(spacing), helpers_dataset._decimalPlaces(niceMin));\n    factor = Math.pow(10, helpers_dataset.isNullOrUndef(precision) ? decimalPlaces : precision);\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    let j = 0;\n    if (minDefined) {\n        if (includeBounds && niceMin !== min) {\n            ticks.push({\n                value: min\n            });\n            if (niceMin < min) {\n                j++;\n            }\n            if (helpers_dataset.almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n                j++;\n            }\n        } else if (niceMin < min) {\n            j++;\n        }\n    }\n    for(; j < numSpaces; ++j){\n        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n        if (maxDefined && tickValue > max) {\n            break;\n        }\n        ticks.push({\n            value: tickValue\n        });\n    }\n    if (maxDefined && includeBounds && niceMax !== max) {\n        if (ticks.length && helpers_dataset.almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n            ticks[ticks.length - 1].value = max;\n        } else {\n            ticks.push({\n                value: max\n            });\n        }\n    } else if (!maxDefined || niceMax === max) {\n        ticks.push({\n            value: niceMax\n        });\n    }\n    return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {\n    const rad = helpers_dataset.toRadians(minRotation);\n    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n    const length = 0.75 * minSpacing * ('' + value).length;\n    return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n         this._endValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        if (helpers_dataset.isNullOrUndef(raw)) {\n            return null;\n        }\n        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n            return null;\n        }\n        return +raw;\n    }\n    handleTickRangeOptions() {\n        const { beginAtZero  } = this.options;\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (beginAtZero) {\n            const minSign = helpers_dataset.sign(min);\n            const maxSign = helpers_dataset.sign(max);\n            if (minSign < 0 && maxSign < 0) {\n                setMax(0);\n            } else if (minSign > 0 && maxSign > 0) {\n                setMin(0);\n            }\n        }\n        if (min === max) {\n            let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n            setMax(max + offset);\n            if (!beginAtZero) {\n                setMin(min - offset);\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    getTickLimit() {\n        const tickOpts = this.options.ticks;\n        let { maxTicksLimit , stepSize  } = tickOpts;\n        let maxTicks;\n        if (stepSize) {\n            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n            if (maxTicks > 1000) {\n                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n                maxTicks = 1000;\n            }\n        } else {\n            maxTicks = this.computeTickLimit();\n            maxTicksLimit = maxTicksLimit || 11;\n        }\n        if (maxTicksLimit) {\n            maxTicks = Math.min(maxTicksLimit, maxTicks);\n        }\n        return maxTicks;\n    }\n computeTickLimit() {\n        return Number.POSITIVE_INFINITY;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        let maxTicks = this.getTickLimit();\n        maxTicks = Math.max(2, maxTicks);\n        const numericGeneratorOptions = {\n            maxTicks,\n            bounds: opts.bounds,\n            min: opts.min,\n            max: opts.max,\n            precision: tickOpts.precision,\n            step: tickOpts.stepSize,\n            count: tickOpts.count,\n            maxDigits: this._maxDigits(),\n            horizontal: this.isHorizontal(),\n            minRotation: tickOpts.minRotation || 0,\n            includeBounds: tickOpts.includeBounds !== false\n        };\n        const dataRange = this._range || this;\n        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n        if (opts.bounds === 'ticks') {\n            helpers_dataset._setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n configure() {\n        const ticks = this.ticks;\n        let start = this.min;\n        let end = this.max;\n        super.configure();\n        if (this.options.offset && ticks.length) {\n            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n            start -= offset;\n            end += offset;\n        }\n        this._startValue = start;\n        this._endValue = end;\n        this._valueRange = end - start;\n    }\n    getLabelForValue(value) {\n        return helpers_dataset.formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n}\n\nclass LinearScale extends LinearScaleBase {\n    static id = 'linear';\n static defaults = {\n        ticks: {\n            callback: helpers_dataset.Ticks.formatters.numeric\n        }\n    };\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = helpers_dataset.isNumberFinite(min) ? min : 0;\n        this.max = helpers_dataset.isNumberFinite(max) ? max : 1;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        const horizontal = this.isHorizontal();\n        const length = horizontal ? this.width : this.height;\n        const minRotation = helpers_dataset.toRadians(this.options.ticks.minRotation);\n        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n        const tickFont = this._resolveTickFontOptions(0);\n        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n    }\n    getPixelForValue(value) {\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    }\n}\n\nconst log10Floor = (v)=>Math.floor(helpers_dataset.log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n    const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n    return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n    const rangeStep = Math.pow(10, rangeExp);\n    const start = Math.floor(min / rangeStep);\n    const end = Math.ceil(max / rangeStep);\n    return end - start;\n}\nfunction startExp(min, max) {\n    const range = max - min;\n    let rangeExp = log10Floor(range);\n    while(steps(min, max, rangeExp) > 10){\n        rangeExp++;\n    }\n    while(steps(min, max, rangeExp) < 10){\n        rangeExp--;\n    }\n    return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max  }) {\n    min = helpers_dataset.finiteOrDefault(generationOptions.min, min);\n    const ticks = [];\n    const minExp = log10Floor(min);\n    let exp = startExp(min, max);\n    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n    const stepSize = Math.pow(10, exp);\n    const base = minExp > exp ? Math.pow(10, minExp) : 0;\n    const start = Math.round((min - base) * precision) / precision;\n    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n    let significand = Math.floor((start - offset) / Math.pow(10, exp));\n    let value = helpers_dataset.finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n    while(value < max){\n        ticks.push({\n            value,\n            major: isMajor(value),\n            significand\n        });\n        if (significand >= 10) {\n            significand = significand < 15 ? 15 : 20;\n        } else {\n            significand++;\n        }\n        if (significand >= 20) {\n            exp++;\n            significand = 2;\n            precision = exp >= 0 ? 1 : precision;\n        }\n        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n    }\n    const lastTick = helpers_dataset.finiteOrDefault(generationOptions.max, value);\n    ticks.push({\n        value: lastTick,\n        major: isMajor(lastTick),\n        significand\n    });\n    return ticks;\n}\nclass LogarithmicScale extends Scale {\n    static id = 'logarithmic';\n static defaults = {\n        ticks: {\n            callback: helpers_dataset.Ticks.formatters.logarithmic,\n            major: {\n                enabled: true\n            }\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        const value = LinearScaleBase.prototype.parse.apply(this, [\n            raw,\n            index\n        ]);\n        if (value === 0) {\n            this._zero = true;\n            return undefined;\n        }\n        return helpers_dataset.isNumberFinite(value) && value > 0 ? value : null;\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = helpers_dataset.isNumberFinite(min) ? Math.max(0, min) : null;\n        this.max = helpers_dataset.isNumberFinite(max) ? Math.max(0, max) : null;\n        if (this.options.beginAtZero) {\n            this._zero = true;\n        }\n        if (this._zero && this.min !== this._suggestedMin && !helpers_dataset.isNumberFinite(this._userMin)) {\n            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n        }\n        this.handleTickRangeOptions();\n    }\n    handleTickRangeOptions() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let min = this.min;\n        let max = this.max;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (min === max) {\n            if (min <= 0) {\n                setMin(1);\n                setMax(10);\n            } else {\n                setMin(changeExponent(min, -1));\n                setMax(changeExponent(max, +1));\n            }\n        }\n        if (min <= 0) {\n            setMin(changeExponent(max, -1));\n        }\n        if (max <= 0) {\n            setMax(changeExponent(min, +1));\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const generationOptions = {\n            min: this._userMin,\n            max: this._userMax\n        };\n        const ticks = generateTicks(generationOptions, this);\n        if (opts.bounds === 'ticks') {\n            helpers_dataset._setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n getLabelForValue(value) {\n        return value === undefined ? '0' : helpers_dataset.formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n configure() {\n        const start = this.min;\n        super.configure();\n        this._startValue = helpers_dataset.log10(start);\n        this._valueRange = helpers_dataset.log10(this.max) - helpers_dataset.log10(start);\n    }\n    getPixelForValue(value) {\n        if (value === undefined || value === 0) {\n            value = this.min;\n        }\n        if (value === null || isNaN(value)) {\n            return NaN;\n        }\n        return this.getPixelForDecimal(value === this.min ? 0 : (helpers_dataset.log10(value) - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        const decimal = this.getDecimalForPixel(pixel);\n        return Math.pow(10, this._startValue + decimal * this._valueRange);\n    }\n}\n\nfunction getTickBackdropHeight(opts) {\n    const tickOpts = opts.ticks;\n    if (tickOpts.display && opts.display) {\n        const padding = helpers_dataset.toPadding(tickOpts.backdropPadding);\n        return helpers_dataset.valueOrDefault(tickOpts.font && tickOpts.font.size, helpers_dataset.defaults.font.size) + padding.height;\n    }\n    return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n    label = helpers_dataset.isArray(label) ? label : [\n        label\n    ];\n    return {\n        w: helpers_dataset._longestText(ctx, font.string, label),\n        h: label.length * font.lineHeight\n    };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n        return {\n            start: pos - size / 2,\n            end: pos + size / 2\n        };\n    } else if (angle < min || angle > max) {\n        return {\n            start: pos - size,\n            end: pos\n        };\n    }\n    return {\n        start: pos,\n        end: pos + size\n    };\n}\n function fitWithPointLabels(scale) {\n    const orig = {\n        l: scale.left + scale._padding.left,\n        r: scale.right - scale._padding.right,\n        t: scale.top + scale._padding.top,\n        b: scale.bottom - scale._padding.bottom\n    };\n    const limits = Object.assign({}, orig);\n    const labelSizes = [];\n    const padding = [];\n    const valueCount = scale._pointLabels.length;\n    const pointLabelOpts = scale.options.pointLabels;\n    const additionalAngle = pointLabelOpts.centerPointLabels ? helpers_dataset.PI / valueCount : 0;\n    for(let i = 0; i < valueCount; i++){\n        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n        padding[i] = opts.padding;\n        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n        const plFont = helpers_dataset.toFont(opts.font);\n        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n        labelSizes[i] = textSize;\n        const angleRadians = helpers_dataset._normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n        const angle = Math.round(helpers_dataset.toDegrees(angleRadians));\n        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n        updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n    }\n    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n    const sin = Math.abs(Math.sin(angle));\n    const cos = Math.abs(Math.cos(angle));\n    let x = 0;\n    let y = 0;\n    if (hLimits.start < orig.l) {\n        x = (orig.l - hLimits.start) / sin;\n        limits.l = Math.min(limits.l, orig.l - x);\n    } else if (hLimits.end > orig.r) {\n        x = (hLimits.end - orig.r) / sin;\n        limits.r = Math.max(limits.r, orig.r + x);\n    }\n    if (vLimits.start < orig.t) {\n        y = (orig.t - vLimits.start) / cos;\n        limits.t = Math.min(limits.t, orig.t - y);\n    } else if (vLimits.end > orig.b) {\n        y = (vLimits.end - orig.b) / cos;\n        limits.b = Math.max(limits.b, orig.b + y);\n    }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n    const outerDistance = scale.drawingArea;\n    const { extra , additionalAngle , padding , size  } = itemOpts;\n    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n    const angle = Math.round(helpers_dataset.toDegrees(helpers_dataset._normalizeAngle(pointLabelPosition.angle + helpers_dataset.HALF_PI)));\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    return {\n        visible: true,\n        x: pointLabelPosition.x,\n        y,\n        textAlign,\n        left,\n        top: y,\n        right: left + size.w,\n        bottom: y + size.h\n    };\n}\nfunction isNotOverlapped(item, area) {\n    if (!area) {\n        return true;\n    }\n    const { left , top , right , bottom  } = item;\n    const apexesInArea = helpers_dataset._isPointInArea({\n        x: left,\n        y: top\n    }, area) || helpers_dataset._isPointInArea({\n        x: left,\n        y: bottom\n    }, area) || helpers_dataset._isPointInArea({\n        x: right,\n        y: top\n    }, area) || helpers_dataset._isPointInArea({\n        x: right,\n        y: bottom\n    }, area);\n    return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n    const items = [];\n    const valueCount = scale._pointLabels.length;\n    const opts = scale.options;\n    const { centerPointLabels , display  } = opts.pointLabels;\n    const itemOpts = {\n        extra: getTickBackdropHeight(opts) / 2,\n        additionalAngle: centerPointLabels ? helpers_dataset.PI / valueCount : 0\n    };\n    let area;\n    for(let i = 0; i < valueCount; i++){\n        itemOpts.padding = padding[i];\n        itemOpts.size = labelSizes[i];\n        const item = createPointLabelItem(scale, i, itemOpts);\n        items.push(item);\n        if (display === 'auto') {\n            item.visible = isNotOverlapped(item, area);\n            if (item.visible) {\n                area = item;\n            }\n        }\n    }\n    return items;\n}\nfunction getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n        return 'center';\n    } else if (angle < 180) {\n        return 'left';\n    }\n    return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n    if (align === 'right') {\n        x -= w;\n    } else if (align === 'center') {\n        x -= w / 2;\n    }\n    return x;\n}\nfunction yForAngle(y, h, angle) {\n    if (angle === 90 || angle === 270) {\n        y -= h / 2;\n    } else if (angle > 270 || angle < 90) {\n        y -= h;\n    }\n    return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n    const { left , top , right , bottom  } = item;\n    const { backdropColor  } = opts;\n    if (!helpers_dataset.isNullOrUndef(backdropColor)) {\n        const borderRadius = helpers_dataset.toTRBLCorners(opts.borderRadius);\n        const padding = helpers_dataset.toPadding(opts.backdropPadding);\n        ctx.fillStyle = backdropColor;\n        const backdropLeft = left - padding.left;\n        const backdropTop = top - padding.top;\n        const backdropWidth = right - left + padding.width;\n        const backdropHeight = bottom - top + padding.height;\n        if (Object.values(borderRadius).some((v)=>v !== 0)) {\n            ctx.beginPath();\n            helpers_dataset.addRoundedRectPath(ctx, {\n                x: backdropLeft,\n                y: backdropTop,\n                w: backdropWidth,\n                h: backdropHeight,\n                radius: borderRadius\n            });\n            ctx.fill();\n        } else {\n            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n        }\n    }\n}\nfunction drawPointLabels(scale, labelCount) {\n    const { ctx , options: { pointLabels  }  } = scale;\n    for(let i = labelCount - 1; i >= 0; i--){\n        const item = scale._pointLabelItems[i];\n        if (!item.visible) {\n            continue;\n        }\n        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n        drawPointLabelBox(ctx, optsAtIndex, item);\n        const plFont = helpers_dataset.toFont(optsAtIndex.font);\n        const { x , y , textAlign  } = item;\n        helpers_dataset.renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n            color: optsAtIndex.color,\n            textAlign: textAlign,\n            textBaseline: 'middle'\n        });\n    }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n    const { ctx  } = scale;\n    if (circular) {\n        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, helpers_dataset.TAU);\n    } else {\n        let pointPosition = scale.getPointPosition(0, radius);\n        ctx.moveTo(pointPosition.x, pointPosition.y);\n        for(let i = 1; i < labelCount; i++){\n            pointPosition = scale.getPointPosition(i, radius);\n            ctx.lineTo(pointPosition.x, pointPosition.y);\n        }\n    }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n    const ctx = scale.ctx;\n    const circular = gridLineOpts.circular;\n    const { color , lineWidth  } = gridLineOpts;\n    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n        return;\n    }\n    ctx.save();\n    ctx.strokeStyle = color;\n    ctx.lineWidth = lineWidth;\n    ctx.setLineDash(borderOpts.dash || []);\n    ctx.lineDashOffset = borderOpts.dashOffset;\n    ctx.beginPath();\n    pathRadiusLine(scale, radius, circular, labelCount);\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n    return helpers_dataset.createContext(parent, {\n        label,\n        index,\n        type: 'pointLabel'\n    });\n}\nclass RadialLinearScale extends LinearScaleBase {\n    static id = 'radialLinear';\n static defaults = {\n        display: true,\n        animate: true,\n        position: 'chartArea',\n        angleLines: {\n            display: true,\n            lineWidth: 1,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n        grid: {\n            circular: false\n        },\n        startAngle: 0,\n        ticks: {\n            showLabelBackdrop: true,\n            callback: helpers_dataset.Ticks.formatters.numeric\n        },\n        pointLabels: {\n            backdropColor: undefined,\n            backdropPadding: 2,\n            display: true,\n            font: {\n                size: 10\n            },\n            callback (label) {\n                return label;\n            },\n            padding: 5,\n            centerPointLabels: false\n        }\n    };\n    static defaultRoutes = {\n        'angleLines.color': 'borderColor',\n        'pointLabels.color': 'color',\n        'ticks.color': 'color'\n    };\n    static descriptors = {\n        angleLines: {\n            _fallback: 'grid'\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.xCenter = undefined;\n         this.yCenter = undefined;\n         this.drawingArea = undefined;\n         this._pointLabels = [];\n        this._pointLabelItems = [];\n    }\n    setDimensions() {\n        const padding = this._padding = helpers_dataset.toPadding(getTickBackdropHeight(this.options) / 2);\n        const w = this.width = this.maxWidth - padding.width;\n        const h = this.height = this.maxHeight - padding.height;\n        this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n        this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n        this.drawingArea = Math.floor(Math.min(w, h) / 2);\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(false);\n        this.min = helpers_dataset.isNumberFinite(min) && !isNaN(min) ? min : 0;\n        this.max = helpers_dataset.isNumberFinite(max) && !isNaN(max) ? max : 0;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    }\n    generateTickLabels(ticks) {\n        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n        this._pointLabels = this.getLabels().map((value, index)=>{\n            const label = helpers_dataset.callback(this.options.pointLabels.callback, [\n                value,\n                index\n            ], this);\n            return label || label === 0 ? label : '';\n        }).filter((v, i)=>this.chart.getDataVisibility(i));\n    }\n    fit() {\n        const opts = this.options;\n        if (opts.display && opts.pointLabels.display) {\n            fitWithPointLabels(this);\n        } else {\n            this.setCenterPoint(0, 0, 0, 0);\n        }\n    }\n    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n    }\n    getIndexAngle(index) {\n        const angleMultiplier = helpers_dataset.TAU / (this._pointLabels.length || 1);\n        const startAngle = this.options.startAngle || 0;\n        return helpers_dataset._normalizeAngle(index * angleMultiplier + helpers_dataset.toRadians(startAngle));\n    }\n    getDistanceFromCenterForValue(value) {\n        if (helpers_dataset.isNullOrUndef(value)) {\n            return NaN;\n        }\n        const scalingFactor = this.drawingArea / (this.max - this.min);\n        if (this.options.reverse) {\n            return (this.max - value) * scalingFactor;\n        }\n        return (value - this.min) * scalingFactor;\n    }\n    getValueForDistanceFromCenter(distance) {\n        if (helpers_dataset.isNullOrUndef(distance)) {\n            return NaN;\n        }\n        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n    }\n    getPointLabelContext(index) {\n        const pointLabels = this._pointLabels || [];\n        if (index >= 0 && index < pointLabels.length) {\n            const pointLabel = pointLabels[index];\n            return createPointLabelContext(this.getContext(), index, pointLabel);\n        }\n    }\n    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n        const angle = this.getIndexAngle(index) - helpers_dataset.HALF_PI + additionalAngle;\n        return {\n            x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n            y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n            angle\n        };\n    }\n    getPointPositionForValue(index, value) {\n        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    }\n    getBasePosition(index) {\n        return this.getPointPositionForValue(index || 0, this.getBaseValue());\n    }\n    getPointLabelPosition(index) {\n        const { left , top , right , bottom  } = this._pointLabelItems[index];\n        return {\n            left,\n            top,\n            right,\n            bottom\n        };\n    }\n drawBackground() {\n        const { backgroundColor , grid: { circular  }  } = this.options;\n        if (backgroundColor) {\n            const ctx = this.ctx;\n            ctx.save();\n            ctx.beginPath();\n            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n            ctx.closePath();\n            ctx.fillStyle = backgroundColor;\n            ctx.fill();\n            ctx.restore();\n        }\n    }\n drawGrid() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const { angleLines , grid , border  } = opts;\n        const labelCount = this._pointLabels.length;\n        let i, offset, position;\n        if (opts.pointLabels.display) {\n            drawPointLabels(this, labelCount);\n        }\n        if (grid.display) {\n            this.ticks.forEach((tick, index)=>{\n                if (index !== 0 || index === 0 && this.min < 0) {\n                    offset = this.getDistanceFromCenterForValue(tick.value);\n                    const context = this.getContext(index);\n                    const optsAtIndex = grid.setContext(context);\n                    const optsAtIndexBorder = border.setContext(context);\n                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n                }\n            });\n        }\n        if (angleLines.display) {\n            ctx.save();\n            for(i = labelCount - 1; i >= 0; i--){\n                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n                const { color , lineWidth  } = optsAtIndex;\n                if (!lineWidth || !color) {\n                    continue;\n                }\n                ctx.lineWidth = lineWidth;\n                ctx.strokeStyle = color;\n                ctx.setLineDash(optsAtIndex.borderDash);\n                ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n                position = this.getPointPosition(i, offset);\n                ctx.beginPath();\n                ctx.moveTo(this.xCenter, this.yCenter);\n                ctx.lineTo(position.x, position.y);\n                ctx.stroke();\n            }\n            ctx.restore();\n        }\n    }\n drawBorder() {}\n drawLabels() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        if (!tickOpts.display) {\n            return;\n        }\n        const startAngle = this.getIndexAngle(0);\n        let offset, width;\n        ctx.save();\n        ctx.translate(this.xCenter, this.yCenter);\n        ctx.rotate(startAngle);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        this.ticks.forEach((tick, index)=>{\n            if (index === 0 && this.min >= 0 && !opts.reverse) {\n                return;\n            }\n            const optsAtIndex = tickOpts.setContext(this.getContext(index));\n            const tickFont = helpers_dataset.toFont(optsAtIndex.font);\n            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n            if (optsAtIndex.showLabelBackdrop) {\n                ctx.font = tickFont.string;\n                width = ctx.measureText(tick.label).width;\n                ctx.fillStyle = optsAtIndex.backdropColor;\n                const padding = helpers_dataset.toPadding(optsAtIndex.backdropPadding);\n                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n            }\n            helpers_dataset.renderText(ctx, tick.label, 0, -offset, tickFont, {\n                color: optsAtIndex.color,\n                strokeColor: optsAtIndex.textStrokeColor,\n                strokeWidth: optsAtIndex.textStrokeWidth\n            });\n        });\n        ctx.restore();\n    }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n    millisecond: {\n        common: true,\n        size: 1,\n        steps: 1000\n    },\n    second: {\n        common: true,\n        size: 1000,\n        steps: 60\n    },\n    minute: {\n        common: true,\n        size: 60000,\n        steps: 60\n    },\n    hour: {\n        common: true,\n        size: 3600000,\n        steps: 24\n    },\n    day: {\n        common: true,\n        size: 86400000,\n        steps: 30\n    },\n    week: {\n        common: false,\n        size: 604800000,\n        steps: 4\n    },\n    month: {\n        common: true,\n        size: 2.628e9,\n        steps: 12\n    },\n    quarter: {\n        common: false,\n        size: 7.884e9,\n        steps: 4\n    },\n    year: {\n        common: true,\n        size: 3.154e10\n    }\n};\n const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n    return a - b;\n}\n function parse(scale, input) {\n    if (helpers_dataset.isNullOrUndef(input)) {\n        return null;\n    }\n    const adapter = scale._adapter;\n    const { parser , round , isoWeekday  } = scale._parseOpts;\n    let value = input;\n    if (typeof parser === 'function') {\n        value = parser(value);\n    }\n    if (!helpers_dataset.isNumberFinite(value)) {\n        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n    }\n    if (value === null) {\n        return null;\n    }\n    if (round) {\n        value = round === 'week' && (helpers_dataset.isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n    }\n    return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    const ilen = UNITS.length;\n    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n        const interval = INTERVALS[UNITS[i]];\n        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n            return UNITS[i];\n        }\n    }\n    return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n        const unit = UNITS[i];\n        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n            return unit;\n        }\n    }\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n        if (INTERVALS[UNITS[i]].common) {\n            return UNITS[i];\n        }\n    }\n}\n function addTick(ticks, time, timestamps) {\n    if (!timestamps) {\n        ticks[time] = true;\n    } else if (timestamps.length) {\n        const { lo , hi  } = helpers_dataset._lookup(timestamps, time);\n        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n        ticks[timestamp] = true;\n    }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n    const adapter = scale._adapter;\n    const first = +adapter.startOf(ticks[0].value, majorUnit);\n    const last = ticks[ticks.length - 1].value;\n    let major, index;\n    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n        index = map[major];\n        if (index >= 0) {\n            ticks[index].major = true;\n        }\n    }\n    return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n    const ticks = [];\n     const map = {};\n    const ilen = values.length;\n    let i, value;\n    for(i = 0; i < ilen; ++i){\n        value = values[i];\n        map[value] = i;\n        ticks.push({\n            value,\n            major: false\n        });\n    }\n    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n    static id = 'time';\n static defaults = {\n bounds: 'data',\n        adapters: {},\n        time: {\n            parser: false,\n            unit: false,\n            round: false,\n            isoWeekday: false,\n            minUnit: 'millisecond',\n            displayFormats: {}\n        },\n        ticks: {\n source: 'auto',\n            callback: false,\n            major: {\n                enabled: false\n            }\n        }\n    };\n constructor(props){\n        super(props);\n         this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n         this._unit = 'day';\n         this._majorUnit = undefined;\n        this._offsets = {};\n        this._normalized = false;\n        this._parseOpts = undefined;\n    }\n    init(scaleOpts, opts = {}) {\n        const time = scaleOpts.time || (scaleOpts.time = {});\n         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n        adapter.init(opts);\n        helpers_dataset.mergeIf(time.displayFormats, adapter.formats());\n        this._parseOpts = {\n            parser: time.parser,\n            round: time.round,\n            isoWeekday: time.isoWeekday\n        };\n        super.init(scaleOpts);\n        this._normalized = opts.normalized;\n    }\n parse(raw, index) {\n        if (raw === undefined) {\n            return null;\n        }\n        return parse(this, raw);\n    }\n    beforeLayout() {\n        super.beforeLayout();\n        this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n    }\n    determineDataLimits() {\n        const options = this.options;\n        const adapter = this._adapter;\n        const unit = options.time.unit || 'day';\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n function _applyBounds(bounds) {\n            if (!minDefined && !isNaN(bounds.min)) {\n                min = Math.min(min, bounds.min);\n            }\n            if (!maxDefined && !isNaN(bounds.max)) {\n                max = Math.max(max, bounds.max);\n            }\n        }\n        if (!minDefined || !maxDefined) {\n            _applyBounds(this._getLabelBounds());\n            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n                _applyBounds(this.getMinMax(false));\n            }\n        }\n        min = helpers_dataset.isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n        max = helpers_dataset.isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n        this.min = Math.min(min, max - 1);\n        this.max = Math.max(min + 1, max);\n    }\n _getLabelBounds() {\n        const arr = this.getLabelTimestamps();\n        let min = Number.POSITIVE_INFINITY;\n        let max = Number.NEGATIVE_INFINITY;\n        if (arr.length) {\n            min = arr[0];\n            max = arr[arr.length - 1];\n        }\n        return {\n            min,\n            max\n        };\n    }\n buildTicks() {\n        const options = this.options;\n        const timeOpts = options.time;\n        const tickOpts = options.ticks;\n        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n        if (options.bounds === 'ticks' && timestamps.length) {\n            this.min = this._userMin || timestamps[0];\n            this.max = this._userMax || timestamps[timestamps.length - 1];\n        }\n        const min = this.min;\n        const max = this.max;\n        const ticks = helpers_dataset._filterBetween(timestamps, min, max);\n        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n        this.initOffsets(timestamps);\n        if (options.reverse) {\n            ticks.reverse();\n        }\n        return ticksFromTimestamps(this, ticks, this._majorUnit);\n    }\n    afterAutoSkip() {\n        if (this.options.offsetAfterAutoskip) {\n            this.initOffsets(this.ticks.map((tick)=>+tick.value));\n        }\n    }\n initOffsets(timestamps = []) {\n        let start = 0;\n        let end = 0;\n        let first, last;\n        if (this.options.offset && timestamps.length) {\n            first = this.getDecimalForValue(timestamps[0]);\n            if (timestamps.length === 1) {\n                start = 1 - first;\n            } else {\n                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n            }\n            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n            if (timestamps.length === 1) {\n                end = last;\n            } else {\n                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n            }\n        }\n        const limit = timestamps.length < 3 ? 0.5 : 0.25;\n        start = helpers_dataset._limitValue(start, 0, limit);\n        end = helpers_dataset._limitValue(end, 0, limit);\n        this._offsets = {\n            start,\n            end,\n            factor: 1 / (start + 1 + end)\n        };\n    }\n _generate() {\n        const adapter = this._adapter;\n        const min = this.min;\n        const max = this.max;\n        const options = this.options;\n        const timeOpts = options.time;\n        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n        const stepSize = helpers_dataset.valueOrDefault(options.ticks.stepSize, 1);\n        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n        const hasWeekday = helpers_dataset.isNumber(weekday) || weekday === true;\n        const ticks = {};\n        let first = min;\n        let time, count;\n        if (hasWeekday) {\n            first = +adapter.startOf(first, 'isoWeek', weekday);\n        }\n        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n        if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n        }\n        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n            addTick(ticks, time, timestamps);\n        }\n        if (time === max || options.bounds === 'ticks' || count === 1) {\n            addTick(ticks, time, timestamps);\n        }\n        return Object.keys(ticks).sort(sorter).map((x)=>+x);\n    }\n getLabelForValue(value) {\n        const adapter = this._adapter;\n        const timeOpts = this.options.time;\n        if (timeOpts.tooltipFormat) {\n            return adapter.format(value, timeOpts.tooltipFormat);\n        }\n        return adapter.format(value, timeOpts.displayFormats.datetime);\n    }\n format(value, format) {\n        const options = this.options;\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const fmt = format || formats[unit];\n        return this._adapter.format(value, fmt);\n    }\n _tickFormatFunction(time, index, ticks, format) {\n        const options = this.options;\n        const formatter = options.ticks.callback;\n        if (formatter) {\n            return helpers_dataset.callback(formatter, [\n                time,\n                index,\n                ticks\n            ], this);\n        }\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const majorUnit = this._majorUnit;\n        const minorFormat = unit && formats[unit];\n        const majorFormat = majorUnit && formats[majorUnit];\n        const tick = ticks[index];\n        const major = majorUnit && majorFormat && tick && tick.major;\n        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    }\n generateTickLabels(ticks) {\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            tick.label = this._tickFormatFunction(tick.value, i, ticks);\n        }\n    }\n getDecimalForValue(value) {\n        return value === null ? NaN : (value - this.min) / (this.max - this.min);\n    }\n getPixelForValue(value) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForValue(value);\n        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return this.min + pos * (this.max - this.min);\n    }\n _getLabelSize(label) {\n        const ticksOpts = this.options.ticks;\n        const tickLabelWidth = this.ctx.measureText(label).width;\n        const angle = helpers_dataset.toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n        const cosRotation = Math.cos(angle);\n        const sinRotation = Math.sin(angle);\n        const tickFontSize = this._resolveTickFontOptions(0).size;\n        return {\n            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n        };\n    }\n _getLabelCapacity(exampleTime) {\n        const timeOpts = this.options.time;\n        const displayFormats = timeOpts.displayFormats;\n        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n            exampleTime\n        ], this._majorUnit), format);\n        const size = this._getLabelSize(exampleLabel);\n        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n        return capacity > 0 ? capacity : 1;\n    }\n getDataTimestamps() {\n        let timestamps = this._cache.data || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const metas = this.getMatchingVisibleMetas();\n        if (this._normalized && metas.length) {\n            return this._cache.data = metas[0].controller.getAllParsedValues(this);\n        }\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n        }\n        return this._cache.data = this.normalize(timestamps);\n    }\n getLabelTimestamps() {\n        const timestamps = this._cache.labels || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const labels = this.getLabels();\n        for(i = 0, ilen = labels.length; i < ilen; ++i){\n            timestamps.push(parse(this, labels[i]));\n        }\n        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n    }\n normalize(values) {\n        return helpers_dataset._arrayUnique(values.sort(sorter));\n    }\n}\n\nfunction interpolate(table, val, reverse) {\n    let lo = 0;\n    let hi = table.length - 1;\n    let prevSource, nextSource, prevTarget, nextTarget;\n    if (reverse) {\n        if (val >= table[lo].pos && val <= table[hi].pos) {\n            ({ lo , hi  } = helpers_dataset._lookupByKey(table, 'pos', val));\n        }\n        ({ pos: prevSource , time: prevTarget  } = table[lo]);\n        ({ pos: nextSource , time: nextTarget  } = table[hi]);\n    } else {\n        if (val >= table[lo].time && val <= table[hi].time) {\n            ({ lo , hi  } = helpers_dataset._lookupByKey(table, 'time', val));\n        }\n        ({ time: prevSource , pos: prevTarget  } = table[lo]);\n        ({ time: nextSource , pos: nextTarget  } = table[hi]);\n    }\n    const span = nextSource - prevSource;\n    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n    static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n        super(props);\n         this._table = [];\n         this._minPos = undefined;\n         this._tableRange = undefined;\n    }\n initOffsets() {\n        const timestamps = this._getTimestampsForTable();\n        const table = this._table = this.buildLookupTable(timestamps);\n        this._minPos = interpolate(table, this.min);\n        this._tableRange = interpolate(table, this.max) - this._minPos;\n        super.initOffsets(timestamps);\n    }\n buildLookupTable(timestamps) {\n        const { min , max  } = this;\n        const items = [];\n        const table = [];\n        let i, ilen, prev, curr, next;\n        for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n            curr = timestamps[i];\n            if (curr >= min && curr <= max) {\n                items.push(curr);\n            }\n        }\n        if (items.length < 2) {\n            return [\n                {\n                    time: min,\n                    pos: 0\n                },\n                {\n                    time: max,\n                    pos: 1\n                }\n            ];\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            next = items[i + 1];\n            prev = items[i - 1];\n            curr = items[i];\n            if (Math.round((next + prev) / 2) !== curr) {\n                table.push({\n                    time: curr,\n                    pos: i / (ilen - 1)\n                });\n            }\n        }\n        return table;\n    }\n _generate() {\n        const min = this.min;\n        const max = this.max;\n        let timestamps = super.getDataTimestamps();\n        if (!timestamps.includes(min) || !timestamps.length) {\n            timestamps.splice(0, 0, min);\n        }\n        if (!timestamps.includes(max) || timestamps.length === 1) {\n            timestamps.push(max);\n        }\n        return timestamps.sort((a, b)=>a - b);\n    }\n _getTimestampsForTable() {\n        let timestamps = this._cache.all || [];\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const data = this.getDataTimestamps();\n        const label = this.getLabelTimestamps();\n        if (data.length && label.length) {\n            timestamps = this.normalize(data.concat(label));\n        } else {\n            timestamps = data.length ? data : label;\n        }\n        timestamps = this._cache.all = timestamps;\n        return timestamps;\n    }\n getDecimalForValue(value) {\n        return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n    }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n    controllers,\n    elements,\n    plugins,\n    scales\n];\n\nexports.Ticks = helpers_dataset.Ticks;\nexports.defaults = helpers_dataset.defaults;\nexports.Animation = Animation;\nexports.Animations = Animations;\nexports.ArcElement = ArcElement;\nexports.BarController = BarController;\nexports.BarElement = BarElement;\nexports.BasePlatform = BasePlatform;\nexports.BasicPlatform = BasicPlatform;\nexports.BubbleController = BubbleController;\nexports.CategoryScale = CategoryScale;\nexports.Chart = Chart;\nexports.Colors = plugin_colors;\nexports.DatasetController = DatasetController;\nexports.Decimation = plugin_decimation;\nexports.DomPlatform = DomPlatform;\nexports.DoughnutController = DoughnutController;\nexports.Element = Element;\nexports.Filler = index;\nexports.Interaction = Interaction;\nexports.Legend = plugin_legend;\nexports.LineController = LineController;\nexports.LineElement = LineElement;\nexports.LinearScale = LinearScale;\nexports.LogarithmicScale = LogarithmicScale;\nexports.PieController = PieController;\nexports.PointElement = PointElement;\nexports.PolarAreaController = PolarAreaController;\nexports.RadarController = RadarController;\nexports.RadialLinearScale = RadialLinearScale;\nexports.Scale = Scale;\nexports.ScatterController = ScatterController;\nexports.SubTitle = plugin_subtitle;\nexports.TimeScale = TimeScale;\nexports.TimeSeriesScale = TimeSeriesScale;\nexports.Title = plugin_title;\nexports.Tooltip = plugin_tooltip;\nexports._adapters = adapters;\nexports._detectPlatform = _detectPlatform;\nexports.animator = animator;\nexports.controllers = controllers;\nexports.elements = elements;\nexports.layouts = layouts;\nexports.plugins = plugins;\nexports.registerables = registerables;\nexports.registry = registry;\nexports.scales = scales;\n//# sourceMappingURL=chart.cjs.map\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\n'use strict';\n\nvar color$1 = require('@kurkle/color');\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n    let id = 0;\n    return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n    return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n    if (Array.isArray && Array.isArray(value)) {\n        return true;\n    }\n    const type = Object.prototype.toString.call(value);\n    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n        return true;\n    }\n    return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */ function isNumberFinite(value) {\n    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n    return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n    return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n    if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n    }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n    let i, len, keys;\n    if (isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n            for(i = len - 1; i >= 0; i--){\n                fn.call(thisArg, loopable[i], i);\n            }\n        } else {\n            for(i = 0; i < len; i++){\n                fn.call(thisArg, loopable[i], i);\n            }\n        }\n    } else if (isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for(i = 0; i < len; i++){\n            fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n    }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n    let i, ilen, v0, v1;\n    if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n    }\n    for(i = 0, ilen = a0.length; i < ilen; ++i){\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n    if (isArray(source)) {\n        return source.map(clone);\n    }\n    if (isObject(source)) {\n        const target = Object.create(null);\n        const keys = Object.keys(source);\n        const klen = keys.length;\n        let k = 0;\n        for(; k < klen; ++k){\n            target[keys[k]] = clone(source[keys[k]]);\n        }\n        return target;\n    }\n    return source;\n}\nfunction isValidKey(key) {\n    return [\n        '__proto__',\n        'prototype',\n        'constructor'\n    ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        merge(tval, sval, options);\n    } else {\n        target[key] = clone(sval);\n    }\n}\nfunction merge(target, source, options) {\n    const sources = isArray(source) ? source : [\n        source\n    ];\n    const ilen = sources.length;\n    if (!isObject(target)) {\n        return target;\n    }\n    options = options || {};\n    const merger = options.merger || _merger;\n    let current;\n    for(let i = 0; i < ilen; ++i){\n        current = sources[i];\n        if (!isObject(current)) {\n            continue;\n        }\n        const keys = Object.keys(current);\n        for(let k = 0, klen = keys.length; k < klen; ++k){\n            merger(keys[k], target, current, options);\n        }\n    }\n    return target;\n}\nfunction mergeIf(target, source) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    return merge(target, source, {\n        merger: _mergerIf\n    });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        mergeIf(tval, sval);\n    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n        target[key] = clone(sval);\n    }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n    if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n    }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n    // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n    '': (v)=>v,\n    // default resolvers\n    x: (o)=>o.x,\n    y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n    const parts = key.split('.');\n    const keys = [];\n    let tmp = '';\n    for (const part of parts){\n        tmp += part;\n        if (tmp.endsWith('\\\\')) {\n            tmp = tmp.slice(0, -1) + '.';\n        } else {\n            keys.push(tmp);\n            tmp = '';\n        }\n    }\n    return keys;\n}\nfunction _getKeyResolver(key) {\n    const keys = _splitKey(key);\n    return (obj)=>{\n        for (const k of keys){\n            if (k === '') {\n                break;\n            }\n            obj = obj && obj[k];\n        }\n        return obj;\n    };\n}\nfunction resolveObjectKey(obj, key) {\n    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n    return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const item of a){\n        if (!b.has(item)) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n    return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n    const roundedRange = Math.round(range);\n    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n    const niceRange = Math.pow(10, Math.floor(log10(range)));\n    const fraction = range / niceRange;\n    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n    return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n    const result = [];\n    const sqrt = Math.sqrt(value);\n    let i;\n    for(i = 1; i < sqrt; i++){\n        if (value % i === 0) {\n            result.push(i);\n            result.push(value / i);\n        }\n    }\n    if (sqrt === (sqrt | 0)) {\n        result.push(sqrt);\n    }\n    result.sort((a, b)=>a - b).pop();\n    return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n    const rounded = Math.round(x);\n    return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n    let i, ilen, value;\n    for(i = 0, ilen = array.length; i < ilen; i++){\n        value = array[i][property];\n        if (!isNaN(value)) {\n            target.min = Math.min(target.min, value);\n            target.max = Math.max(target.max, value);\n        }\n    }\n}\nfunction toRadians(degrees) {\n    return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n    return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n    if (!isNumberFinite(x)) {\n        return;\n    }\n    let e = 1;\n    let p = 0;\n    while(Math.round(x * e) / e !== x){\n        e *= 10;\n        p++;\n    }\n    return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n    if (angle < -0.5 * PI) {\n        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n    }\n    return {\n        angle,\n        distance: radialDistanceFromCenter\n    };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n    return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n    return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n    const a = _normalizeAngle(angle);\n    const s = _normalizeAngle(start);\n    const e = _normalizeAngle(end);\n    const angleToStart = _normalizeAngle(s - a);\n    const angleToEnd = _normalizeAngle(e - a);\n    const startToAngle = _normalizeAngle(a - s);\n    const endToAngle = _normalizeAngle(a - e);\n    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n    return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n    cmp = cmp || ((index)=>table[index] < value);\n    let hi = table.length - 1;\n    let lo = 0;\n    let mid;\n    while(hi - lo > 1){\n        mid = lo + hi >> 1;\n        if (cmp(mid)) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return {\n        lo,\n        hi\n    };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n        const ti = table[index][key];\n        return ti < value || ti === value && table[index + 1][key] === value;\n    } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n    let start = 0;\n    let end = values.length;\n    while(start < end && values[start] < min){\n        start++;\n    }\n    while(end > start && values[end - 1] > max){\n        end--;\n    }\n    return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n    'push',\n    'pop',\n    'shift',\n    'splice',\n    'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n        array._chartjs.listeners.push(listener);\n        return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n        configurable: true,\n        enumerable: false,\n        value: {\n            listeners: [\n                listener\n            ]\n        }\n    });\n    arrayEvents.forEach((key)=>{\n        const method = '_onData' + _capitalize(key);\n        const base = array[key];\n        Object.defineProperty(array, key, {\n            configurable: true,\n            enumerable: false,\n            value (...args) {\n                const res = base.apply(this, args);\n                array._chartjs.listeners.forEach((object)=>{\n                    if (typeof object[method] === 'function') {\n                        object[method](...args);\n                    }\n                });\n                return res;\n            }\n        });\n    });\n}\nfunction unlistenArrayEvents(array, listener) {\n    const stub = array._chartjs;\n    if (!stub) {\n        return;\n    }\n    const listeners = stub.listeners;\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n        listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n        return;\n    }\n    arrayEvents.forEach((key)=>{\n        delete array[key];\n    });\n    delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n    const set = new Set(items);\n    if (set.size === items.length) {\n        return items;\n    }\n    return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n    if (typeof window === 'undefined') {\n        return function(callback) {\n            return callback();\n        };\n    }\n    return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n    let argsToUse = [];\n    let ticking = false;\n    return function(...args) {\n        // Save the args for use later\n        argsToUse = args;\n        if (!ticking) {\n            ticking = true;\n            requestAnimFrame.call(window, ()=>{\n                ticking = false;\n                fn.apply(thisArg, argsToUse);\n            });\n        }\n    };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n    let timeout;\n    return function(...args) {\n        if (delay) {\n            clearTimeout(timeout);\n            timeout = setTimeout(fn, delay, args);\n        } else {\n            fn.apply(this, args);\n        }\n        return delay;\n    };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n    const check = rtl ? 'left' : 'right';\n    return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n    const pointCount = points.length;\n    let start = 0;\n    let count = pointCount;\n    if (meta._sorted) {\n        const { iScale , vScale , _parsed  } = meta;\n        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n        const axis = iScale.axis;\n        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n        if (minDefined) {\n            start = Math.min(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n            if (spanGaps) {\n                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                start -= Math.max(0, distanceToDefinedLo);\n            }\n            start = _limitValue(start, 0, pointCount - 1);\n        }\n        if (maxDefined) {\n            let end = Math.max(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n            if (spanGaps) {\n                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                end += Math.max(0, distanceToDefinedHi);\n            }\n            count = _limitValue(end, start, pointCount) - start;\n        } else {\n            count = pointCount - start;\n        }\n    }\n    return {\n        start,\n        count\n    };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n    const { xScale , yScale , _scaleRanges  } = meta;\n    const newRanges = {\n        xmin: xScale.min,\n        xmax: xScale.max,\n        ymin: yScale.min,\n        ymax: yScale.max\n    };\n    if (!_scaleRanges) {\n        meta._scaleRanges = newRanges;\n        return true;\n    }\n    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n    Object.assign(_scaleRanges, newRanges);\n    return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n    linear: (t)=>t,\n    easeInQuad: (t)=>t * t,\n    easeOutQuad: (t)=>-t * (t - 2),\n    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n    easeInCubic: (t)=>t * t * t,\n    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n    easeInQuart: (t)=>t * t * t * t,\n    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n    easeInQuint: (t)=>t * t * t * t * t,\n    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n    easeInOutElastic (t) {\n        const s = 0.1125;\n        const p = 0.45;\n        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n    },\n    easeInBack (t) {\n        const s = 1.70158;\n        return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack (t) {\n        const s = 1.70158;\n        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack (t) {\n        let s = 1.70158;\n        if ((t /= 0.5) < 1) {\n            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n        }\n        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n    easeOutBounce (t) {\n        const m = 7.5625;\n        const d = 2.75;\n        if (t < 1 / d) {\n            return m * t * t;\n        }\n        if (t < 2 / d) {\n            return m * (t -= 1.5 / d) * t + 0.75;\n        }\n        if (t < 2.5 / d) {\n            return m * (t -= 2.25 / d) * t + 0.9375;\n        }\n        return m * (t -= 2.625 / d) * t + 0.984375;\n    },\n    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n    if (value && typeof value === 'object') {\n        const type = value.toString();\n        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n    }\n    return false;\n}\nfunction color(value) {\n    return isPatternOrGradient(value) ? value : new color$1.Color(value);\n}\nfunction getHoverColor(value) {\n    return isPatternOrGradient(value) ? value : new color$1.Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n    'x',\n    'y',\n    'borderWidth',\n    'radius',\n    'tension'\n];\nconst colors = [\n    'color',\n    'borderColor',\n    'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n    defaults.set('animation', {\n        delay: undefined,\n        duration: 1000,\n        easing: 'easeOutQuart',\n        fn: undefined,\n        from: undefined,\n        loop: undefined,\n        to: undefined,\n        type: undefined\n    });\n    defaults.describe('animation', {\n        _fallback: false,\n        _indexable: false,\n        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n    });\n    defaults.set('animations', {\n        colors: {\n            type: 'color',\n            properties: colors\n        },\n        numbers: {\n            type: 'number',\n            properties: numbers\n        }\n    });\n    defaults.describe('animations', {\n        _fallback: 'animation'\n    });\n    defaults.set('transitions', {\n        active: {\n            animation: {\n                duration: 400\n            }\n        },\n        resize: {\n            animation: {\n                duration: 0\n            }\n        },\n        show: {\n            animations: {\n                colors: {\n                    from: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    duration: 0\n                }\n            }\n        },\n        hide: {\n            animations: {\n                colors: {\n                    to: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    easing: 'linear',\n                    fn: (v)=>v | 0\n                }\n            }\n        }\n    });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n    defaults.set('layout', {\n        autoPadding: true,\n        padding: {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        }\n    });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n    options = options || {};\n    const cacheKey = locale + JSON.stringify(options);\n    let formatter = intlCache.get(cacheKey);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        intlCache.set(cacheKey, formatter);\n    }\n    return formatter;\n}\nfunction formatNumber(num, locale, options) {\n    return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n        return isArray(value) ?  value : '' + value;\n    },\n numeric (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const locale = this.chart.options.locale;\n        let notation;\n        let delta = tickValue;\n        if (ticks.length > 1) {\n            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n            if (maxTick < 1e-4 || maxTick > 1e+15) {\n                notation = 'scientific';\n            }\n            delta = calculateDelta(tickValue, ticks);\n        }\n        const logDelta = log10(Math.abs(delta));\n        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n        const options = {\n            notation,\n            minimumFractionDigits: numDecimal,\n            maximumFractionDigits: numDecimal\n        };\n        Object.assign(options, this.options.ticks.format);\n        return formatNumber(tickValue, locale, options);\n    },\n logarithmic (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n        if ([\n            1,\n            2,\n            3,\n            5,\n            10,\n            15\n        ].includes(remain) || index > 0.8 * ticks.length) {\n            return formatters.numeric.call(this, tickValue, index, ticks);\n        }\n        return '';\n    }\n};\nfunction calculateDelta(tickValue, ticks) {\n    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n        delta = tickValue - Math.floor(tickValue);\n    }\n    return delta;\n}\n var Ticks = {\n    formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n    defaults.set('scale', {\n        display: true,\n        offset: false,\n        reverse: false,\n        beginAtZero: false,\n bounds: 'ticks',\n        clip: true,\n grace: 0,\n        grid: {\n            display: true,\n            lineWidth: 1,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickLength: 8,\n            tickWidth: (_ctx, options)=>options.lineWidth,\n            tickColor: (_ctx, options)=>options.color,\n            offset: false\n        },\n        border: {\n            display: true,\n            dash: [],\n            dashOffset: 0.0,\n            width: 1\n        },\n        title: {\n            display: false,\n            text: '',\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n        ticks: {\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            textStrokeWidth: 0,\n            textStrokeColor: '',\n            padding: 3,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 3,\n            labelOffset: 0,\n            callback: Ticks.formatters.values,\n            minor: {},\n            major: {},\n            align: 'center',\n            crossAlign: 'near',\n            showLabelBackdrop: false,\n            backdropColor: 'rgba(255, 255, 255, 0.75)',\n            backdropPadding: 2\n        }\n    });\n    defaults.route('scale.ticks', 'color', '', 'color');\n    defaults.route('scale.grid', 'color', '', 'borderColor');\n    defaults.route('scale.border', 'color', '', 'borderColor');\n    defaults.route('scale.title', 'color', '', 'color');\n    defaults.describe('scale', {\n        _fallback: false,\n        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n    });\n    defaults.describe('scales', {\n        _fallback: 'scale'\n    });\n    defaults.describe('scale.ticks', {\n        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n        _indexable: (name)=>name !== 'backdropPadding'\n    });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n    if (!key) {\n        return node;\n    }\n    const keys = key.split('.');\n    for(let i = 0, n = keys.length; i < n; ++i){\n        const k = keys[i];\n        node = node[k] || (node[k] = Object.create(null));\n    }\n    return node;\n}\nfunction set(root, scope, values) {\n    if (typeof scope === 'string') {\n        return merge(getScope$1(root, scope), values);\n    }\n    return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n    constructor(_descriptors, _appliers){\n        this.animation = undefined;\n        this.backgroundColor = 'rgba(0,0,0,0.1)';\n        this.borderColor = 'rgba(0,0,0,0.1)';\n        this.color = '#666';\n        this.datasets = {};\n        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n        this.elements = {};\n        this.events = [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ];\n        this.font = {\n            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n            size: 12,\n            style: 'normal',\n            lineHeight: 1.2,\n            weight: null\n        };\n        this.hover = {};\n        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n        this.indexAxis = 'x';\n        this.interaction = {\n            mode: 'nearest',\n            intersect: true,\n            includeInvisible: false\n        };\n        this.maintainAspectRatio = true;\n        this.onHover = null;\n        this.onClick = null;\n        this.parsing = true;\n        this.plugins = {};\n        this.responsive = true;\n        this.scale = undefined;\n        this.scales = {};\n        this.showLine = true;\n        this.drawActiveElementsOnTop = true;\n        this.describe(_descriptors);\n        this.apply(_appliers);\n    }\n set(scope, values) {\n        return set(this, scope, values);\n    }\n get(scope) {\n        return getScope$1(this, scope);\n    }\n describe(scope, values) {\n        return set(descriptors, scope, values);\n    }\n    override(scope, values) {\n        return set(overrides, scope, values);\n    }\n route(scope, name, targetScope, targetName) {\n        const scopeObject = getScope$1(this, scope);\n        const targetScopeObject = getScope$1(this, targetScope);\n        const privateName = '_' + name;\n        Object.defineProperties(scopeObject, {\n            [privateName]: {\n                value: scopeObject[name],\n                writable: true\n            },\n            [name]: {\n                enumerable: true,\n                get () {\n                    const local = this[privateName];\n                    const target = targetScopeObject[targetName];\n                    if (isObject(local)) {\n                        return Object.assign({}, target, local);\n                    }\n                    return valueOrDefault(local, target);\n                },\n                set (value) {\n                    this[privateName] = value;\n                }\n            }\n        });\n    }\n    apply(appliers) {\n        appliers.forEach((apply)=>apply(this));\n    }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n    _scriptable: (name)=>!name.startsWith('on'),\n    _indexable: (name)=>name !== 'events',\n    hover: {\n        _fallback: 'interaction'\n    },\n    interaction: {\n        _scriptable: false,\n        _indexable: false\n    }\n}, [\n    applyAnimationsDefaults,\n    applyLayoutsDefaults,\n    applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n        return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n    let textWidth = data[string];\n    if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n    }\n    if (textWidth > longest) {\n        longest = textWidth;\n    }\n    return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n    cache = cache || {};\n    let data = cache.data = cache.data || {};\n    let gc = cache.garbageCollect = cache.garbageCollect || [];\n    if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n    }\n    ctx.save();\n    ctx.font = font;\n    let longest = 0;\n    const ilen = arrayOfThings.length;\n    let i, j, jlen, thing, nestedThing;\n    for(i = 0; i < ilen; i++){\n        thing = arrayOfThings[i];\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && !isArray(thing)) {\n            longest = _measureText(ctx, data, gc, longest, thing);\n        } else if (isArray(thing)) {\n            // if it is an array lets measure each element\n            // to do maybe simplify this function a bit so we can do this more recursively?\n            for(j = 0, jlen = thing.length; j < jlen; j++){\n                nestedThing = thing[j];\n                // Undefined strings and arrays should not be measured\n                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n                }\n            }\n        }\n    }\n    ctx.restore();\n    const gcLen = gc.length / 2;\n    if (gcLen > arrayOfThings.length) {\n        for(i = 0; i < gcLen; i++){\n            delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n    }\n    return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n    const devicePixelRatio = chart.currentDevicePixelRatio;\n    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n    if (!ctx && !canvas) {\n        return;\n    }\n    ctx = ctx || canvas.getContext('2d');\n    ctx.save();\n    // canvas.width and canvas.height do not consider the canvas transform,\n    // while clearRect does\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n    const style = options.pointStyle;\n    const rotation = options.rotation;\n    const radius = options.radius;\n    let rad = (rotation || 0) * RAD_PER_DEG;\n    if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n            ctx.save();\n            ctx.translate(x, y);\n            ctx.rotate(rad);\n            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n            ctx.restore();\n            return;\n        }\n    }\n    if (isNaN(radius) || radius <= 0) {\n        return;\n    }\n    ctx.beginPath();\n    switch(style){\n        // Default includes circle\n        default:\n            if (w) {\n                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n            } else {\n                ctx.arc(x, y, radius, 0, TAU);\n            }\n            ctx.closePath();\n            break;\n        case 'triangle':\n            width = w ? w / 2 : radius;\n            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            ctx.closePath();\n            break;\n        case 'rectRounded':\n            // NOTE: the rounded rect implementation changed to use `arc` instead of\n            // `quadraticCurveTo` since it generates better results when rect is\n            // almost a circle. 0.516 (instead of 0.5) produces results with visually\n            // closer proportion to the previous impl and it is inscribed in the\n            // circle with `radius`. For more details, see the following PRs:\n            // https://github.com/chartjs/Chart.js/issues/5597\n            // https://github.com/chartjs/Chart.js/issues/5858\n            cornerRadius = radius * 0.516;\n            size = radius - cornerRadius;\n            xOffset = Math.cos(rad + QUARTER_PI) * size;\n            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            yOffset = Math.sin(rad + QUARTER_PI) * size;\n            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n            ctx.closePath();\n            break;\n        case 'rect':\n            if (!rotation) {\n                size = Math.SQRT1_2 * radius;\n                width = w ? w / 2 : size;\n                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n                break;\n            }\n            rad += QUARTER_PI;\n        /* falls through */ case 'rectRot':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            ctx.closePath();\n            break;\n        case 'crossRot':\n            rad += QUARTER_PI;\n        /* falls through */ case 'cross':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'star':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            rad += QUARTER_PI;\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'line':\n            xOffset = w ? w / 2 : Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            ctx.moveTo(x - xOffset, y - yOffset);\n            ctx.lineTo(x + xOffset, y + yOffset);\n            break;\n        case 'dash':\n            ctx.moveTo(x, y);\n            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n            break;\n        case false:\n            ctx.closePath();\n            break;\n    }\n    ctx.fill();\n    if (options.borderWidth > 0) {\n        ctx.stroke();\n    }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n    margin = margin || 0.5; // margin - default is to match rounded decimals\n    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n    ctx.clip();\n}\nfunction unclipArea(ctx) {\n    ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    if (mode === 'middle') {\n        const midpoint = (previous.x + target.x) / 2.0;\n        ctx.lineTo(midpoint, previous.y);\n        ctx.lineTo(midpoint, target.y);\n    } else if (mode === 'after' !== !!flip) {\n        ctx.lineTo(previous.x, target.y);\n    } else {\n        ctx.lineTo(target.x, previous.y);\n    }\n    ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n    if (opts.translation) {\n        ctx.translate(opts.translation[0], opts.translation[1]);\n    }\n    if (!isNullOrUndef(opts.rotation)) {\n        ctx.rotate(opts.rotation);\n    }\n    if (opts.color) {\n        ctx.fillStyle = opts.color;\n    }\n    if (opts.textAlign) {\n        ctx.textAlign = opts.textAlign;\n    }\n    if (opts.textBaseline) {\n        ctx.textBaseline = opts.textBaseline;\n    }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n    if (opts.strikethrough || opts.underline) {\n        /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */ const metrics = ctx.measureText(line);\n        const left = x - metrics.actualBoundingBoxLeft;\n        const right = x + metrics.actualBoundingBoxRight;\n        const top = y - metrics.actualBoundingBoxAscent;\n        const bottom = y + metrics.actualBoundingBoxDescent;\n        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n        ctx.strokeStyle = ctx.fillStyle;\n        ctx.beginPath();\n        ctx.lineWidth = opts.decorationWidth || 2;\n        ctx.moveTo(left, yDecoration);\n        ctx.lineTo(right, yDecoration);\n        ctx.stroke();\n    }\n}\nfunction drawBackdrop(ctx, opts) {\n    const oldColor = ctx.fillStyle;\n    ctx.fillStyle = opts.color;\n    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n    ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n    const lines = isArray(text) ? text : [\n        text\n    ];\n    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n    let i, line;\n    ctx.save();\n    ctx.font = font.string;\n    setRenderOpts(ctx, opts);\n    for(i = 0; i < lines.length; ++i){\n        line = lines[i];\n        if (opts.backdrop) {\n            drawBackdrop(ctx, opts.backdrop);\n        }\n        if (stroke) {\n            if (opts.strokeColor) {\n                ctx.strokeStyle = opts.strokeColor;\n            }\n            if (!isNullOrUndef(opts.strokeWidth)) {\n                ctx.lineWidth = opts.strokeWidth;\n            }\n            ctx.strokeText(line, x, y, opts.maxWidth);\n        }\n        ctx.fillText(line, x, y, opts.maxWidth);\n        decorateText(ctx, x, y, line, opts);\n        y += Number(font.lineHeight);\n    }\n    ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n    const { x , y , w , h , radius  } = rect;\n    // top left arc\n    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n    // line from top left to bottom left\n    ctx.lineTo(x, y + h - radius.bottomLeft);\n    // bottom left arc\n    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n    // line from bottom left to bottom right\n    ctx.lineTo(x + w - radius.bottomRight, y + h);\n    // bottom right arc\n    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n    // line from bottom right to top right\n    ctx.lineTo(x + w, y + radius.topRight);\n    // top right arc\n    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n    // line from top right to top left\n    ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n    const matches = ('' + value).match(LINE_HEIGHT);\n    if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n    }\n    value = +matches[2];\n    switch(matches[3]){\n        case 'px':\n            return value;\n        case '%':\n            value /= 100;\n            break;\n    }\n    return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n    const ret = {};\n    const objProps = isObject(props);\n    const keys = objProps ? Object.keys(props) : props;\n    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n    for (const prop of keys){\n        ret[prop] = numberOrZero(read(prop));\n    }\n    return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n    return _readValueToProps(value, {\n        top: 'y',\n        right: 'x',\n        bottom: 'y',\n        left: 'x'\n    });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n    return _readValueToProps(value, [\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight'\n    ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n    const obj = toTRBL(value);\n    obj.width = obj.left + obj.right;\n    obj.height = obj.top + obj.bottom;\n    return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n    options = options || {};\n    fallback = fallback || defaults.font;\n    let size = valueOrDefault(options.size, fallback.size);\n    if (typeof size === 'string') {\n        size = parseInt(size, 10);\n    }\n    let style = valueOrDefault(options.style, fallback.style);\n    if (style && !('' + style).match(FONT_STYLE)) {\n        console.warn('Invalid font style specified: \"' + style + '\"');\n        style = undefined;\n    }\n    const font = {\n        family: valueOrDefault(options.family, fallback.family),\n        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n        size,\n        style,\n        weight: valueOrDefault(options.weight, fallback.weight),\n        string: ''\n    };\n    font.string = toFontString(font);\n    return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n    let cacheable = true;\n    let i, ilen, value;\n    for(i = 0, ilen = inputs.length; i < ilen; ++i){\n        value = inputs[i];\n        if (value === undefined) {\n            continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n            value = value(context);\n            cacheable = false;\n        }\n        if (index !== undefined && isArray(value)) {\n            value = value[index % value.length];\n            cacheable = false;\n        }\n        if (value !== undefined) {\n            if (info && !cacheable) {\n                info.cacheable = false;\n            }\n            return value;\n        }\n    }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n    const { min , max  } = minmax;\n    const change = toDimension(grace, (max - min) / 2);\n    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n    return {\n        min: keepZero(min, -Math.abs(change)),\n        max: keepZero(max, change)\n    };\n}\nfunction createContext(parentContext, context) {\n    return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n    ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n    const finalRootScopes = rootScopes || scopes;\n    if (typeof fallback === 'undefined') {\n        fallback = _resolve('_fallback', scopes);\n    }\n    const cache = {\n        [Symbol.toStringTag]: 'Object',\n        _cacheable: true,\n        _scopes: scopes,\n        _rootScopes: finalRootScopes,\n        _fallback: fallback,\n        _getTarget: getTarget,\n        override: (scope)=>_createResolver([\n                scope,\n                ...scopes\n            ], prefixes, finalRootScopes, fallback)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete target._keys; // remove cached keys\n            delete scopes[0][prop]; // remove from top level scope\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop) {\n            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(scopes[0]);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return getKeysFromAllScopes(target).includes(prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys (target) {\n            return getKeysFromAllScopes(target);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            const storage = target._storage || (target._storage = getTarget());\n            target[prop] = storage[prop] = value; // set to top level scope + cache\n            delete target._keys; // remove cached keys\n            return true;\n        }\n    });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n    const cache = {\n        _cacheable: false,\n        _proxy: proxy,\n        _context: context,\n        _subProxy: subProxy,\n        _stack: new Set(),\n        _descriptors: _descriptors(proxy, descriptorDefaults),\n        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete proxy[prop]; // remove from proxy\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop, receiver) {\n            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n                enumerable: true,\n                configurable: true\n            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(proxy);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return Reflect.has(proxy, prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys () {\n            return Reflect.ownKeys(proxy);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            proxy[prop] = value; // set to proxy\n            delete target[prop]; // remove from cache\n            return true;\n        }\n    });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n    scriptable: true,\n    indexable: true\n}) {\n    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n    return {\n        allKeys: _allKeys,\n        scriptable: _scriptable,\n        indexable: _indexable,\n        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n    };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n        return target[prop];\n    }\n    const value = resolve();\n    // cache the resolved value\n    target[prop] = value;\n    return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    let value = _proxy[prop]; // resolve from proxy\n    // resolve with context\n    if (isFunction(value) && descriptors.isScriptable(prop)) {\n        value = _resolveScriptable(prop, value, target, receiver);\n    }\n    if (isArray(value) && value.length) {\n        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n    }\n    if (needsSubResolver(prop, value)) {\n        // if the resolved value is an object, create a sub resolver for it\n        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n    }\n    return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n    const { _proxy , _context , _subProxy , _stack  } = target;\n    if (_stack.has(prop)) {\n        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n    }\n    _stack.add(prop);\n    let value = getValue(_context, _subProxy || receiver);\n    _stack.delete(prop);\n    if (needsSubResolver(prop, value)) {\n        // When scriptable option returns an object, create a resolver on that.\n        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n    }\n    return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n        return value[_context.index % value.length];\n    } else if (isObject(value[0])) {\n        // Array of objects, return array or resolvers\n        const arr = value;\n        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n        value = [];\n        for (const item of arr){\n            const resolver = createSubResolver(scopes, _proxy, prop, item);\n            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n        }\n    }\n    return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n    return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n    for (const parent of parentScopes){\n        const scope = getScope(key, parent);\n        if (scope) {\n            set.add(scope);\n            const fallback = resolveFallback(scope._fallback, key, value);\n            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n                // When we reach the descriptor that defines a new _fallback, return that.\n                // The fallback will resume to that new scope.\n                return fallback;\n            }\n        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n            // Fallback to `false` results to `false`, when falling back to different key.\n            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n            return null;\n        }\n    }\n    return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n    const rootScopes = resolver._rootScopes;\n    const fallback = resolveFallback(resolver._fallback, prop, value);\n    const allScopes = [\n        ...parentScopes,\n        ...rootScopes\n    ];\n    const set = new Set();\n    set.add(value);\n    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n    if (key === null) {\n        return false;\n    }\n    if (typeof fallback !== 'undefined' && fallback !== prop) {\n        key = addScopesFromKey(set, allScopes, fallback, key, value);\n        if (key === null) {\n            return false;\n        }\n    }\n    return _createResolver(Array.from(set), [\n        ''\n    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n    while(key){\n        key = addScopes(set, allScopes, key, fallback, item);\n    }\n    return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n    const parent = resolver._getTarget();\n    if (!(prop in parent)) {\n        parent[prop] = {};\n    }\n    const target = parent[prop];\n    if (isArray(target) && isObject(value)) {\n        // For array of objects, the object is used to store updated values\n        return value;\n    }\n    return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n    let value;\n    for (const prefix of prefixes){\n        value = _resolve(readKey(prefix, prop), scopes);\n        if (typeof value !== 'undefined') {\n            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n        }\n    }\n}\nfunction _resolve(key, scopes) {\n    for (const scope of scopes){\n        if (!scope) {\n            continue;\n        }\n        const value = scope[key];\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n}\nfunction getKeysFromAllScopes(target) {\n    let keys = target._keys;\n    if (!keys) {\n        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n    }\n    return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n    const set = new Set();\n    for (const scope of scopes){\n        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n            set.add(key);\n        }\n    }\n    return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n    const { iScale  } = meta;\n    const { key ='r'  } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for(i = 0, ilen = count; i < ilen; ++i){\n        index = i + start;\n        item = data[index];\n        parsed[i] = {\n            r: iScale.parse(resolveObjectKey(item, key), index)\n        };\n    }\n    return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n    // Props to Rob Spencer at scaled innovation for his post on splining between points\n    // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n    // This function must also respect \"skipped\" points\n    const previous = firstPoint.skip ? middlePoint : firstPoint;\n    const current = middlePoint;\n    const next = afterPoint.skip ? middlePoint : afterPoint;\n    const d01 = distanceBetweenPoints(current, previous);\n    const d12 = distanceBetweenPoints(next, current);\n    let s01 = d01 / (d01 + d12);\n    let s12 = d12 / (d01 + d12);\n    // If all points are the same, s01 & s02 will be inf\n    s01 = isNaN(s01) ? 0 : s01;\n    s12 = isNaN(s12) ? 0 : s12;\n    const fa = t * s01; // scaling factor for triangle Ta\n    const fb = t * s12;\n    return {\n        previous: {\n            x: current.x - fa * (next.x - previous.x),\n            y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n            x: current.x + fb * (next.x - previous.x),\n            y: current.y + fb * (next.y - previous.y)\n        }\n    };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n    const pointsLen = points.length;\n    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen - 1; ++i){\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent || !pointAfter) {\n            continue;\n        }\n        if (almostEquals(deltaK[i], 0, EPSILON)) {\n            mK[i] = mK[i + 1] = 0;\n            continue;\n        }\n        alphaK = mK[i] / deltaK[i];\n        betaK = mK[i + 1] / deltaK[i];\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n            continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        mK[i] = alphaK * tauK * deltaK[i];\n        mK[i + 1] = betaK * tauK * deltaK[i];\n    }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    let delta, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        const iPixel = pointCurrent[indexAxis];\n        const vPixel = pointCurrent[valueAxis];\n        if (pointBefore) {\n            delta = (iPixel - pointBefore[indexAxis]) / 3;\n            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n        }\n        if (pointAfter) {\n            delta = (pointAfter[indexAxis] - iPixel) / 3;\n            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n        }\n    }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    const deltaK = Array(pointsLen).fill(0);\n    const mK = Array(pointsLen);\n    // Calculate slopes (deltaK) and initialize tangents (mK)\n    let i, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        if (pointAfter) {\n            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n        }\n        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n    }\n    monotoneAdjust(points, deltaK, mK);\n    monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n    return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n    let i, ilen, point, inArea, inAreaPrev;\n    let inAreaNext = _isPointInArea(points[0], area);\n    for(i = 0, ilen = points.length; i < ilen; ++i){\n        inAreaPrev = inArea;\n        inArea = inAreaNext;\n        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n        if (!inArea) {\n            continue;\n        }\n        point = points[i];\n        if (inAreaPrev) {\n            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n        }\n        if (inAreaNext) {\n            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n        }\n    }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n    let i, ilen, point, controlPoints;\n    // Only consider points that are drawn in case the spanGaps option is used\n    if (options.spanGaps) {\n        points = points.filter((pt)=>!pt.skip);\n    }\n    if (options.cubicInterpolationMode === 'monotone') {\n        splineCurveMonotone(points, indexAxis);\n    } else {\n        let prev = loop ? points[points.length - 1] : points[0];\n        for(i = 0, ilen = points.length; i < ilen; ++i){\n            point = points[i];\n            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n            point.cp1x = controlPoints.previous.x;\n            point.cp1y = controlPoints.previous.y;\n            point.cp2x = controlPoints.next.x;\n            point.cp2y = controlPoints.next.y;\n            prev = point;\n        }\n    }\n    if (options.capBezierPoints) {\n        capBezierPoints(points, area);\n    }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n    return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n    let parent = domNode.parentNode;\n    if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n    }\n    return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n    let valueInPixels;\n    if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n            // percentage * size in dimension\n            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n    } else {\n        valueInPixels = styleValue;\n    }\n    return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n    return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n    const result = {};\n    suffix = suffix ? '-' + suffix : '';\n    for(let i = 0; i < 4; i++){\n        const pos = positions[i];\n        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n    }\n    result.width = result.left + result.right;\n    result.height = result.top + result.bottom;\n    return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n    const touches = e.touches;\n    const source = touches && touches.length ? touches[0] : e;\n    const { offsetX , offsetY  } = source;\n    let box = false;\n    let x, y;\n    if (useOffsetPos(offsetX, offsetY, e.target)) {\n        x = offsetX;\n        y = offsetY;\n    } else {\n        const rect = canvas.getBoundingClientRect();\n        x = source.clientX - rect.left;\n        y = source.clientY - rect.top;\n        box = true;\n    }\n    return {\n        x,\n        y,\n        box\n    };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n    if ('native' in event) {\n        return event;\n    }\n    const { canvas , currentDevicePixelRatio  } = chart;\n    const style = getComputedStyle(canvas);\n    const borderBox = style.boxSizing === 'border-box';\n    const paddings = getPositionedStyle(style, 'padding');\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const { x , y , box  } = getCanvasPosition(event, canvas);\n    const xOffset = paddings.left + (box && borders.left);\n    const yOffset = paddings.top + (box && borders.top);\n    let { width , height  } = chart;\n    if (borderBox) {\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    return {\n        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n    };\n}\nfunction getContainerSize(canvas, width, height) {\n    let maxWidth, maxHeight;\n    if (width === undefined || height === undefined) {\n        const container = canvas && _getParentNode(canvas);\n        if (!container) {\n            width = canvas.clientWidth;\n            height = canvas.clientHeight;\n        } else {\n            const rect = container.getBoundingClientRect(); // this is the border box of the container\n            const containerStyle = getComputedStyle(container);\n            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n            width = rect.width - containerPadding.width - containerBorder.width;\n            height = rect.height - containerPadding.height - containerBorder.height;\n            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n        }\n    }\n    return {\n        width,\n        height,\n        maxWidth: maxWidth || INFINITY,\n        maxHeight: maxHeight || INFINITY\n    };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n    const style = getComputedStyle(canvas);\n    const margins = getPositionedStyle(style, 'margin');\n    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n    let { width , height  } = containerSize;\n    if (style.boxSizing === 'content-box') {\n        const borders = getPositionedStyle(style, 'border', 'width');\n        const paddings = getPositionedStyle(style, 'padding');\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    width = Math.max(0, width - margins.width);\n    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n    if (width && !height) {\n        // https://github.com/chartjs/Chart.js/issues/4659\n        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n        height = round1(width / 2);\n    }\n    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n        height = containerSize.height;\n        width = round1(Math.floor(height * aspectRatio));\n    }\n    return {\n        width,\n        height\n    };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n    const pixelRatio = forceRatio || 1;\n    const deviceHeight = round1(chart.height * pixelRatio);\n    const deviceWidth = round1(chart.width * pixelRatio);\n    chart.height = round1(chart.height);\n    chart.width = round1(chart.width);\n    const canvas = chart.canvas;\n    // If no style has been set on the canvas, the render size is used as display size,\n    // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n    // See https://github.com/chartjs/Chart.js/issues/3575\n    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n        canvas.style.height = `${chart.height}px`;\n        canvas.style.width = `${chart.width}px`;\n    }\n    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n        chart.currentDevicePixelRatio = pixelRatio;\n        canvas.height = deviceHeight;\n        canvas.width = deviceWidth;\n        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        return true;\n    }\n    return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n    let passiveSupported = false;\n    try {\n        const options = {\n            get passive () {\n                passiveSupported = true;\n                return false;\n            }\n        };\n        if (_isDomSupported()) {\n            window.addEventListener('test', null, options);\n            window.removeEventListener('test', null, options);\n        }\n    } catch (e) {\n    // continue regardless of error\n    }\n    return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n    const value = getStyle(element, property);\n    const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: p1.y + t * (p2.y - p1.y)\n    };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n    };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n    const cp1 = {\n        x: p1.cp2x,\n        y: p1.cp2y\n    };\n    const cp2 = {\n        x: p2.cp1x,\n        y: p2.cp1y\n    };\n    const a = _pointInLine(p1, cp1, t);\n    const b = _pointInLine(cp1, cp2, t);\n    const c = _pointInLine(cp2, p2, t);\n    const d = _pointInLine(a, b, t);\n    const e = _pointInLine(b, c, t);\n    return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n    return {\n        x (x) {\n            return rectX + rectX + width - x;\n        },\n        setWidth (w) {\n            width = w;\n        },\n        textAlign (align) {\n            if (align === 'center') {\n                return align;\n            }\n            return align === 'right' ? 'left' : 'right';\n        },\n        xPlus (x, value) {\n            return x - value;\n        },\n        leftForLtr (x, itemWidth) {\n            return x - itemWidth;\n        }\n    };\n};\nconst getLeftToRightAdapter = function() {\n    return {\n        x (x) {\n            return x;\n        },\n        setWidth (w) {},\n        textAlign (align) {\n            return align;\n        },\n        xPlus (x, value) {\n            return x + value;\n        },\n        leftForLtr (x, _itemWidth) {\n            return x;\n        }\n    };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n    let style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n        style = ctx.canvas.style;\n        original = [\n            style.getPropertyValue('direction'),\n            style.getPropertyPriority('direction')\n        ];\n        style.setProperty('direction', direction, 'important');\n        ctx.prevTextDirection = original;\n    }\n}\nfunction restoreTextDirection(ctx, original) {\n    if (original !== undefined) {\n        delete ctx.prevTextDirection;\n        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n}\n\nfunction propertyFn(property) {\n    if (property === 'angle') {\n        return {\n            between: _angleBetween,\n            compare: _angleDiff,\n            normalize: _normalizeAngle\n        };\n    }\n    return {\n        between: _isBetween,\n        compare: (a, b)=>a - b,\n        normalize: (x)=>x\n    };\n}\nfunction normalizeSegment({ start , end , count , loop , style  }) {\n    return {\n        start: start % count,\n        end: end % count,\n        loop: loop && (end - start + 1) % count === 0,\n        style\n    };\n}\nfunction getSegment(segment, points, bounds) {\n    const { property , start: startBound , end: endBound  } = bounds;\n    const { between , normalize  } = propertyFn(property);\n    const count = points.length;\n    let { start , end , loop  } = segment;\n    let i, ilen;\n    if (loop) {\n        start += count;\n        end += count;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n                break;\n            }\n            start--;\n            end--;\n        }\n        start %= count;\n        end %= count;\n    }\n    if (end < start) {\n        end += count;\n    }\n    return {\n        start,\n        end,\n        loop,\n        style: segment.style\n    };\n}\n function _boundSegment(segment, points, bounds) {\n    if (!bounds) {\n        return [\n            segment\n        ];\n    }\n    const { property , start: startBound , end: endBound  } = bounds;\n    const count = points.length;\n    const { compare , between , normalize  } = propertyFn(property);\n    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n    const result = [];\n    let inside = false;\n    let subStart = null;\n    let value, point, prevValue;\n    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n    const shouldStart = ()=>inside || startIsBefore();\n    const shouldStop = ()=>!inside || endIsBefore();\n    for(let i = start, prev = start; i <= end; ++i){\n        point = points[i % count];\n        if (point.skip) {\n            continue;\n        }\n        value = normalize(point[property]);\n        if (value === prevValue) {\n            continue;\n        }\n        inside = between(value, startBound, endBound);\n        if (subStart === null && shouldStart()) {\n            subStart = compare(value, startBound) === 0 ? i : prev;\n        }\n        if (subStart !== null && shouldStop()) {\n            result.push(normalizeSegment({\n                start: subStart,\n                end: i,\n                loop,\n                count,\n                style\n            }));\n            subStart = null;\n        }\n        prev = i;\n        prevValue = value;\n    }\n    if (subStart !== null) {\n        result.push(normalizeSegment({\n            start: subStart,\n            end,\n            loop,\n            count,\n            style\n        }));\n    }\n    return result;\n}\n function _boundSegments(line, bounds) {\n    const result = [];\n    const segments = line.segments;\n    for(let i = 0; i < segments.length; i++){\n        const sub = _boundSegment(segments[i], line.points, bounds);\n        if (sub.length) {\n            result.push(...sub);\n        }\n    }\n    return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n    let start = 0;\n    let end = count - 1;\n    if (loop && !spanGaps) {\n        while(start < count && !points[start].skip){\n            start++;\n        }\n    }\n    while(start < count && points[start].skip){\n        start++;\n    }\n    start %= count;\n    if (loop) {\n        end += start;\n    }\n    while(end > start && points[end % count].skip){\n        end--;\n    }\n    end %= count;\n    return {\n        start,\n        end\n    };\n}\n function solidSegments(points, start, max, loop) {\n    const count = points.length;\n    const result = [];\n    let last = start;\n    let prev = points[start];\n    let end;\n    for(end = start + 1; end <= max; ++end){\n        const cur = points[end % count];\n        if (cur.skip || cur.stop) {\n            if (!prev.skip) {\n                loop = false;\n                result.push({\n                    start: start % count,\n                    end: (end - 1) % count,\n                    loop\n                });\n                start = last = cur.stop ? end : null;\n            }\n        } else {\n            last = end;\n            if (prev.skip) {\n                start = end;\n            }\n        }\n        prev = cur;\n    }\n    if (last !== null) {\n        result.push({\n            start: start % count,\n            end: last % count,\n            loop\n        });\n    }\n    return result;\n}\n function _computeSegments(line, segmentOptions) {\n    const points = line.points;\n    const spanGaps = line.options.spanGaps;\n    const count = points.length;\n    if (!count) {\n        return [];\n    }\n    const loop = !!line._loop;\n    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n    if (spanGaps === true) {\n        return splitByStyles(line, [\n            {\n                start,\n                end,\n                loop\n            }\n        ], points, segmentOptions);\n    }\n    const max = end < start ? end + count : end;\n    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n    if (!segmentOptions || !segmentOptions.setContext || !points) {\n        return segments;\n    }\n    return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n    const chartContext = line._chart.getContext();\n    const baseStyle = readStyle(line.options);\n    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n    const count = points.length;\n    const result = [];\n    let prevStyle = baseStyle;\n    let start = segments[0].start;\n    let i = start;\n    function addStyle(s, e, l, st) {\n        const dir = spanGaps ? -1 : 1;\n        if (s === e) {\n            return;\n        }\n        s += count;\n        while(points[s % count].skip){\n            s -= dir;\n        }\n        while(points[e % count].skip){\n            e += dir;\n        }\n        if (s % count !== e % count) {\n            result.push({\n                start: s % count,\n                end: e % count,\n                loop: l,\n                style: st\n            });\n            prevStyle = st;\n            start = e % count;\n        }\n    }\n    for (const segment of segments){\n        start = spanGaps ? start : segment.start;\n        let prev = points[start % count];\n        let style;\n        for(i = start + 1; i <= segment.end; i++){\n            const pt = points[i % count];\n            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n                type: 'segment',\n                p0: prev,\n                p1: pt,\n                p0DataIndex: (i - 1) % count,\n                p1DataIndex: i % count,\n                datasetIndex\n            })));\n            if (styleChanged(style, prevStyle)) {\n                addStyle(start, i - 1, segment.loop, prevStyle);\n            }\n            prev = pt;\n            prevStyle = style;\n        }\n        if (start < i - 1) {\n            addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n    }\n    return result;\n}\nfunction readStyle(options) {\n    return {\n        backgroundColor: options.backgroundColor,\n        borderCapStyle: options.borderCapStyle,\n        borderDash: options.borderDash,\n        borderDashOffset: options.borderDashOffset,\n        borderJoinStyle: options.borderJoinStyle,\n        borderWidth: options.borderWidth,\n        borderColor: options.borderColor\n    };\n}\nfunction styleChanged(style, prevStyle) {\n    if (!prevStyle) {\n        return false;\n    }\n    const cache = [];\n    const replacer = function(key, value) {\n        if (!isPatternOrGradient(value)) {\n            return value;\n        }\n        if (!cache.includes(value)) {\n            cache.push(value);\n        }\n        return cache.indexOf(value);\n    };\n    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n    return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n    const { xScale , yScale  } = meta;\n    if (xScale && yScale) {\n        return {\n            left: getSizeForArea(xScale, chartArea, 'left'),\n            right: getSizeForArea(xScale, chartArea, 'right'),\n            top: getSizeForArea(yScale, chartArea, 'top'),\n            bottom: getSizeForArea(yScale, chartArea, 'bottom')\n        };\n    }\n    return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n    const clip = meta._clip;\n    if (clip.disabled) {\n        return false;\n    }\n    const area = getDatasetArea(meta, chart.chartArea);\n    return {\n        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n    };\n}\n\nexports.HALF_PI = HALF_PI;\nexports.INFINITY = INFINITY;\nexports.PI = PI;\nexports.PITAU = PITAU;\nexports.QUARTER_PI = QUARTER_PI;\nexports.RAD_PER_DEG = RAD_PER_DEG;\nexports.TAU = TAU;\nexports.TWO_THIRDS_PI = TWO_THIRDS_PI;\nexports.Ticks = Ticks;\nexports._addGrace = _addGrace;\nexports._alignPixel = _alignPixel;\nexports._alignStartEnd = _alignStartEnd;\nexports._angleBetween = _angleBetween;\nexports._angleDiff = _angleDiff;\nexports._arrayUnique = _arrayUnique;\nexports._attachContext = _attachContext;\nexports._bezierCurveTo = _bezierCurveTo;\nexports._bezierInterpolation = _bezierInterpolation;\nexports._boundSegment = _boundSegment;\nexports._boundSegments = _boundSegments;\nexports._capitalize = _capitalize;\nexports._computeSegments = _computeSegments;\nexports._createResolver = _createResolver;\nexports._decimalPlaces = _decimalPlaces;\nexports._deprecated = _deprecated;\nexports._descriptors = _descriptors;\nexports._elementsEqual = _elementsEqual;\nexports._factorize = _factorize;\nexports._filterBetween = _filterBetween;\nexports._getParentNode = _getParentNode;\nexports._getStartAndCountOfVisiblePoints = _getStartAndCountOfVisiblePoints;\nexports._int16Range = _int16Range;\nexports._isBetween = _isBetween;\nexports._isClickEvent = _isClickEvent;\nexports._isDomSupported = _isDomSupported;\nexports._isPointInArea = _isPointInArea;\nexports._limitValue = _limitValue;\nexports._longestText = _longestText;\nexports._lookup = _lookup;\nexports._lookupByKey = _lookupByKey;\nexports._measureText = _measureText;\nexports._merger = _merger;\nexports._mergerIf = _mergerIf;\nexports._normalizeAngle = _normalizeAngle;\nexports._parseObjectDataRadialScale = _parseObjectDataRadialScale;\nexports._pointInLine = _pointInLine;\nexports._readValueToProps = _readValueToProps;\nexports._rlookupByKey = _rlookupByKey;\nexports._scaleRangesChanged = _scaleRangesChanged;\nexports._setMinAndMaxByKey = _setMinAndMaxByKey;\nexports._splitKey = _splitKey;\nexports._steppedInterpolation = _steppedInterpolation;\nexports._steppedLineTo = _steppedLineTo;\nexports._textX = _textX;\nexports._toLeftRightCenter = _toLeftRightCenter;\nexports._updateBezierControlPoints = _updateBezierControlPoints;\nexports.addRoundedRectPath = addRoundedRectPath;\nexports.almostEquals = almostEquals;\nexports.almostWhole = almostWhole;\nexports.callback = callback;\nexports.clearCanvas = clearCanvas;\nexports.clipArea = clipArea;\nexports.clone = clone;\nexports.color = color;\nexports.createContext = createContext;\nexports.debounce = debounce;\nexports.defaults = defaults;\nexports.defined = defined;\nexports.descriptors = descriptors;\nexports.distanceBetweenPoints = distanceBetweenPoints;\nexports.drawPoint = drawPoint;\nexports.drawPointLegend = drawPointLegend;\nexports.each = each;\nexports.effects = effects;\nexports.finiteOrDefault = finiteOrDefault;\nexports.fontString = fontString;\nexports.formatNumber = formatNumber;\nexports.getAngleFromPoint = getAngleFromPoint;\nexports.getDatasetClipArea = getDatasetClipArea;\nexports.getHoverColor = getHoverColor;\nexports.getMaximumSize = getMaximumSize;\nexports.getRelativePosition = getRelativePosition;\nexports.getRtlAdapter = getRtlAdapter;\nexports.getStyle = getStyle;\nexports.isArray = isArray;\nexports.isFunction = isFunction;\nexports.isNullOrUndef = isNullOrUndef;\nexports.isNumber = isNumber;\nexports.isNumberFinite = isNumberFinite;\nexports.isObject = isObject;\nexports.isPatternOrGradient = isPatternOrGradient;\nexports.listenArrayEvents = listenArrayEvents;\nexports.log10 = log10;\nexports.merge = merge;\nexports.mergeIf = mergeIf;\nexports.niceNum = niceNum;\nexports.noop = noop;\nexports.overrideTextDirection = overrideTextDirection;\nexports.overrides = overrides;\nexports.readUsedSize = readUsedSize;\nexports.renderText = renderText;\nexports.requestAnimFrame = requestAnimFrame;\nexports.resolve = resolve;\nexports.resolveObjectKey = resolveObjectKey;\nexports.restoreTextDirection = restoreTextDirection;\nexports.retinaScale = retinaScale;\nexports.setsEqual = setsEqual;\nexports.sign = sign;\nexports.splineCurve = splineCurve;\nexports.splineCurveMonotone = splineCurveMonotone;\nexports.supportsEventListenerOptions = supportsEventListenerOptions;\nexports.throttled = throttled;\nexports.toDegrees = toDegrees;\nexports.toDimension = toDimension;\nexports.toFont = toFont;\nexports.toFontString = toFontString;\nexports.toLineHeight = toLineHeight;\nexports.toPadding = toPadding;\nexports.toPercentage = toPercentage;\nexports.toRadians = toRadians;\nexports.toTRBL = toTRBL;\nexports.toTRBLCorners = toTRBLCorners;\nexports.uid = uid;\nexports.unclipArea = unclipArea;\nexports.unlistenArrayEvents = unlistenArrayEvents;\nexports.valueOrDefault = valueOrDefault;\n//# sourceMappingURL=helpers.dataset.cjs.map\n","'use strict';\n\n// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n  this.content = content;\n}\n\nOrderedMap.prototype = {\n  constructor: OrderedMap,\n\n  find: function(key) {\n    for (var i = 0; i < this.content.length; i += 2)\n      if (this.content[i] === key) return i\n    return -1\n  },\n\n  // :: (string) → ?any\n  // Retrieve the value stored under `key`, or return undefined when\n  // no such key exists.\n  get: function(key) {\n    var found = this.find(key);\n    return found == -1 ? undefined : this.content[found + 1]\n  },\n\n  // :: (string, any, ?string) → OrderedMap\n  // Create a new map by replacing the value of `key` with a new\n  // value, or adding a binding to the end of the map. If `newKey` is\n  // given, the key of the binding will be replaced with that key.\n  update: function(key, value, newKey) {\n    var self = newKey && newKey != key ? this.remove(newKey) : this;\n    var found = self.find(key), content = self.content.slice();\n    if (found == -1) {\n      content.push(newKey || key, value);\n    } else {\n      content[found + 1] = value;\n      if (newKey) content[found] = newKey;\n    }\n    return new OrderedMap(content)\n  },\n\n  // :: (string) → OrderedMap\n  // Return a map with the given key removed, if it existed.\n  remove: function(key) {\n    var found = this.find(key);\n    if (found == -1) return this\n    var content = this.content.slice();\n    content.splice(found, 2);\n    return new OrderedMap(content)\n  },\n\n  // :: (string, any) → OrderedMap\n  // Add a new key to the start of the map.\n  addToStart: function(key, value) {\n    return new OrderedMap([key, value].concat(this.remove(key).content))\n  },\n\n  // :: (string, any) → OrderedMap\n  // Add a new key to the end of the map.\n  addToEnd: function(key, value) {\n    var content = this.remove(key).content.slice();\n    content.push(key, value);\n    return new OrderedMap(content)\n  },\n\n  // :: (string, string, any) → OrderedMap\n  // Add a key after the given key. If `place` is not found, the new\n  // key is added to the end.\n  addBefore: function(place, key, value) {\n    var without = this.remove(key), content = without.content.slice();\n    var found = without.find(place);\n    content.splice(found == -1 ? content.length : found, 0, key, value);\n    return new OrderedMap(content)\n  },\n\n  // :: ((key: string, value: any))\n  // Call the given function for each key/value pair in the map, in\n  // order.\n  forEach: function(f) {\n    for (var i = 0; i < this.content.length; i += 2)\n      f(this.content[i], this.content[i + 1]);\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a new map by prepending the keys in this map that don't\n  // appear in `map` before the keys in `map`.\n  prepend: function(map) {\n    map = OrderedMap.from(map);\n    if (!map.size) return this\n    return new OrderedMap(map.content.concat(this.subtract(map).content))\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a new map by appending the keys in this map that don't\n  // appear in `map` after the keys in `map`.\n  append: function(map) {\n    map = OrderedMap.from(map);\n    if (!map.size) return this\n    return new OrderedMap(this.subtract(map).content.concat(map.content))\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a map containing all the keys in this map that don't\n  // appear in `map`.\n  subtract: function(map) {\n    var result = this;\n    map = OrderedMap.from(map);\n    for (var i = 0; i < map.content.length; i += 2)\n      result = result.remove(map.content[i]);\n    return result\n  },\n\n  // :: () → Object\n  // Turn ordered map into a plain object.\n  toObject: function() {\n    var result = {};\n    this.forEach(function(key, value) { result[key] = value; });\n    return result\n  },\n\n  // :: number\n  // The amount of keys in this map.\n  get size() {\n    return this.content.length >> 1\n  }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n  if (value instanceof OrderedMap) return value\n  var content = [];\n  if (value) for (var prop in value) content.push(prop, value[prop]);\n  return new OrderedMap(content)\n};\n\nmodule.exports = OrderedMap;\n","'use strict';\n\nvar epsilon = 1.1102230246251565e-16;\nvar splitter = 134217729;\nvar resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nfunction sum(elen, e, flen, f, h) {\n    var Q, Qnew, hh, bvirt;\n    var enow = e[0];\n    var fnow = f[0];\n    var eindex = 0;\n    var findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    var hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nfunction estimate(elen, e) {\n    var Q = e[0];\n    for (var i = 1; i < elen; i++) { Q += e[i]; }\n    return Q;\n}\n\nfunction vec(n) {\n    return new Float64Array(n);\n}\n\nvar ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nvar ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nvar ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nvar B = vec(4);\nvar C1 = vec(8);\nvar C2 = vec(12);\nvar D = vec(16);\nvar u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    var acxtail, acytail, bcxtail, bcytail;\n    var bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    var acx = ax - cx;\n    var bcx = bx - cx;\n    var acy = ay - cy;\n    var bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    var det = estimate(4, B);\n    var errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) { return det; }\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    var C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    var C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    var Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nfunction orient2d(ax, ay, bx, by, cx, cy) {\n    var detleft = (ay - cy) * (bx - cx);\n    var detright = (ax - cx) * (by - cy);\n    var det = detleft - detright;\n\n    var detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) { return det; }\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nfunction pointInPolygon(p, polygon) {\n    var i;\n    var ii;\n    var k = 0;\n    var f;\n    var u1;\n    var v1;\n    var u2;\n    var v2;\n    var currentP;\n    var nextP;\n\n    var x = p[0];\n    var y = p[1];\n\n    var numContours = polygon.length;\n    for (i = 0; i < numContours; i++) {\n        ii = 0;\n        var contour = polygon[i];\n        var contourLen = contour.length - 1;\n\n        currentP = contour[0];\n        if (currentP[0] !== contour[contourLen][0] &&\n            currentP[1] !== contour[contourLen][1]) {\n            throw new Error('First and last coordinates in a ring must be the same')\n        }\n\n        u1 = currentP[0] - x;\n        v1 = currentP[1] - y;\n\n        for (ii; ii < contourLen; ii++) {\n            nextP = contour[ii + 1];\n\n            u2 = nextP[0] - x;\n            v2 = nextP[1] - y;\n\n            if (v1 === 0 && v2 === 0) {\n                if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n            } else if ((v2 >= 0 && v1 <= 0) || (v2 <= 0 && v1 >= 0)) {\n                f = orient2d(u1, u2, v1, v2, 0, 0);\n                if (f === 0) { return 0 }\n                if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n            }\n            currentP = nextP;\n            v1 = v2;\n            u1 = u2;\n        }\n    }\n\n    if (k % 2 === 0) { return false }\n    return true\n}\n\nmodule.exports = pointInPolygon;\n","'use strict';\n\nvar prosemirrorTransform = require('prosemirror-transform');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorState = require('prosemirror-state');\nvar deleteSelection = function deleteSelection(state, dispatch) {\n  if (state.selection.empty) return false;\n  if (dispatch) dispatch(state.tr.deleteSelection().scrollIntoView());\n  return true;\n};\nfunction atBlockStart(state, view) {\n  var $cursor = state.selection.$cursor;\n  if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state) : $cursor.parentOffset > 0)) return null;\n  return $cursor;\n}\nvar joinBackward = function joinBackward(state, dispatch, view) {\n  var $cursor = atBlockStart(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutBefore($cursor);\n  if (!$cut) {\n    var range = $cursor.blockRange(),\n      target = range && prosemirrorTransform.liftTarget(range);\n    if (target == null) return false;\n    if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n    return true;\n  }\n  var before = $cut.nodeBefore;\n  if (deleteBarrier(state, $cut, dispatch, -1)) return true;\n  if ($cursor.parent.content.size == 0 && (textblockAt(before, \"end\") || prosemirrorState.NodeSelection.isSelectable(before))) {\n    for (var depth = $cursor.depth;; depth--) {\n      var delStep = prosemirrorTransform.replaceStep(state.doc, $cursor.before(depth), $cursor.after(depth), prosemirrorModel.Slice.empty);\n      if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n        if (dispatch) {\n          var tr = state.tr.step(delStep);\n          tr.setSelection(textblockAt(before, \"end\") ? prosemirrorState.Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1) : prosemirrorState.NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n          dispatch(tr.scrollIntoView());\n        }\n        return true;\n      }\n      if (depth == 1 || $cursor.node(depth - 1).childCount > 1) break;\n    }\n  }\n  if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n    if (dispatch) dispatch(state.tr[\"delete\"]($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n    return true;\n  }\n  return false;\n};\nvar joinTextblockBackward = function joinTextblockBackward(state, dispatch, view) {\n  var $cursor = atBlockStart(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutBefore($cursor);\n  return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nvar joinTextblockForward = function joinTextblockForward(state, dispatch, view) {\n  var $cursor = atBlockEnd(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutAfter($cursor);\n  return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nfunction joinTextblocksAround(state, $cut, dispatch) {\n  var before = $cut.nodeBefore,\n    beforeText = before,\n    beforePos = $cut.pos - 1;\n  for (; !beforeText.isTextblock; beforePos--) {\n    if (beforeText.type.spec.isolating) return false;\n    var child = beforeText.lastChild;\n    if (!child) return false;\n    beforeText = child;\n  }\n  var after = $cut.nodeAfter,\n    afterText = after,\n    afterPos = $cut.pos + 1;\n  for (; !afterText.isTextblock; afterPos++) {\n    if (afterText.type.spec.isolating) return false;\n    var _child = afterText.firstChild;\n    if (!_child) return false;\n    afterText = _child;\n  }\n  var step = prosemirrorTransform.replaceStep(state.doc, beforePos, afterPos, prosemirrorModel.Slice.empty);\n  if (!step || step.from != beforePos || step instanceof prosemirrorTransform.ReplaceStep && step.slice.size >= afterPos - beforePos) return false;\n  if (dispatch) {\n    var tr = state.tr.step(step);\n    tr.setSelection(prosemirrorState.TextSelection.create(tr.doc, beforePos));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n}\nfunction textblockAt(node, side) {\n  var only = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  for (var scan = node; scan; scan = side == \"start\" ? scan.firstChild : scan.lastChild) {\n    if (scan.isTextblock) return true;\n    if (only && scan.childCount != 1) return false;\n  }\n  return false;\n}\nvar selectNodeBackward = function selectNodeBackward(state, dispatch, view) {\n  var _state$selection = state.selection,\n    $head = _state$selection.$head,\n    empty = _state$selection.empty,\n    $cut = $head;\n  if (!empty) return false;\n  if ($head.parent.isTextblock) {\n    if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0) return false;\n    $cut = findCutBefore($head);\n  }\n  var node = $cut && $cut.nodeBefore;\n  if (!node || !prosemirrorState.NodeSelection.isSelectable(node)) return false;\n  if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n  return true;\n};\nfunction findCutBefore($pos) {\n  if (!$pos.parent.type.spec.isolating) for (var i = $pos.depth - 1; i >= 0; i--) {\n    if ($pos.index(i) > 0) return $pos.doc.resolve($pos.before(i + 1));\n    if ($pos.node(i).type.spec.isolating) break;\n  }\n  return null;\n}\nfunction atBlockEnd(state, view) {\n  var $cursor = state.selection.$cursor;\n  if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state) : $cursor.parentOffset < $cursor.parent.content.size)) return null;\n  return $cursor;\n}\nvar joinForward = function joinForward(state, dispatch, view) {\n  var $cursor = atBlockEnd(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutAfter($cursor);\n  if (!$cut) return false;\n  var after = $cut.nodeAfter;\n  if (deleteBarrier(state, $cut, dispatch, 1)) return true;\n  if ($cursor.parent.content.size == 0 && (textblockAt(after, \"start\") || prosemirrorState.NodeSelection.isSelectable(after))) {\n    var delStep = prosemirrorTransform.replaceStep(state.doc, $cursor.before(), $cursor.after(), prosemirrorModel.Slice.empty);\n    if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n      if (dispatch) {\n        var tr = state.tr.step(delStep);\n        tr.setSelection(textblockAt(after, \"start\") ? prosemirrorState.Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1) : prosemirrorState.NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n        dispatch(tr.scrollIntoView());\n      }\n      return true;\n    }\n  }\n  if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n    if (dispatch) dispatch(state.tr[\"delete\"]($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n    return true;\n  }\n  return false;\n};\nvar selectNodeForward = function selectNodeForward(state, dispatch, view) {\n  var _state$selection2 = state.selection,\n    $head = _state$selection2.$head,\n    empty = _state$selection2.empty,\n    $cut = $head;\n  if (!empty) return false;\n  if ($head.parent.isTextblock) {\n    if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size) return false;\n    $cut = findCutAfter($head);\n  }\n  var node = $cut && $cut.nodeAfter;\n  if (!node || !prosemirrorState.NodeSelection.isSelectable(node)) return false;\n  if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n  return true;\n};\nfunction findCutAfter($pos) {\n  if (!$pos.parent.type.spec.isolating) for (var i = $pos.depth - 1; i >= 0; i--) {\n    var parent = $pos.node(i);\n    if ($pos.index(i) + 1 < parent.childCount) return $pos.doc.resolve($pos.after(i + 1));\n    if (parent.type.spec.isolating) break;\n  }\n  return null;\n}\nvar joinUp = function joinUp(state, dispatch) {\n  var sel = state.selection,\n    nodeSel = sel instanceof prosemirrorState.NodeSelection,\n    point;\n  if (nodeSel) {\n    if (sel.node.isTextblock || !prosemirrorTransform.canJoin(state.doc, sel.from)) return false;\n    point = sel.from;\n  } else {\n    point = prosemirrorTransform.joinPoint(state.doc, sel.from, -1);\n    if (point == null) return false;\n  }\n  if (dispatch) {\n    var tr = state.tr.join(point);\n    if (nodeSel) tr.setSelection(prosemirrorState.NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n};\nvar joinDown = function joinDown(state, dispatch) {\n  var sel = state.selection,\n    point;\n  if (sel instanceof prosemirrorState.NodeSelection) {\n    if (sel.node.isTextblock || !prosemirrorTransform.canJoin(state.doc, sel.to)) return false;\n    point = sel.to;\n  } else {\n    point = prosemirrorTransform.joinPoint(state.doc, sel.to, 1);\n    if (point == null) return false;\n  }\n  if (dispatch) dispatch(state.tr.join(point).scrollIntoView());\n  return true;\n};\nvar lift = function lift(state, dispatch) {\n  var _state$selection3 = state.selection,\n    $from = _state$selection3.$from,\n    $to = _state$selection3.$to;\n  var range = $from.blockRange($to),\n    target = range && prosemirrorTransform.liftTarget(range);\n  if (target == null) return false;\n  if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n  return true;\n};\nvar newlineInCode = function newlineInCode(state, dispatch) {\n  var _state$selection4 = state.selection,\n    $head = _state$selection4.$head,\n    $anchor = _state$selection4.$anchor;\n  if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false;\n  if (dispatch) dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n  return true;\n};\nfunction defaultBlockAt(match) {\n  for (var i = 0; i < match.edgeCount; i++) {\n    var _match$edge = match.edge(i),\n      type = _match$edge.type;\n    if (type.isTextblock && !type.hasRequiredAttrs()) return type;\n  }\n  return null;\n}\nvar exitCode = function exitCode(state, dispatch) {\n  var _state$selection5 = state.selection,\n    $head = _state$selection5.$head,\n    $anchor = _state$selection5.$anchor;\n  if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false;\n  var above = $head.node(-1),\n    after = $head.indexAfter(-1),\n    type = defaultBlockAt(above.contentMatchAt(after));\n  if (!type || !above.canReplaceWith(after, after, type)) return false;\n  if (dispatch) {\n    var pos = $head.after(),\n      tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n    tr.setSelection(prosemirrorState.Selection.near(tr.doc.resolve(pos), 1));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n};\nvar createParagraphNear = function createParagraphNear(state, dispatch) {\n  var sel = state.selection,\n    $from = sel.$from,\n    $to = sel.$to;\n  if (sel instanceof prosemirrorState.AllSelection || $from.parent.inlineContent || $to.parent.inlineContent) return false;\n  var type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n  if (!type || !type.isTextblock) return false;\n  if (dispatch) {\n    var side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n    var tr = state.tr.insert(side, type.createAndFill());\n    tr.setSelection(prosemirrorState.TextSelection.create(tr.doc, side + 1));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n};\nvar liftEmptyBlock = function liftEmptyBlock(state, dispatch) {\n  var $cursor = state.selection.$cursor;\n  if (!$cursor || $cursor.parent.content.size) return false;\n  if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n    var before = $cursor.before();\n    if (prosemirrorTransform.canSplit(state.doc, before)) {\n      if (dispatch) dispatch(state.tr.split(before).scrollIntoView());\n      return true;\n    }\n  }\n  var range = $cursor.blockRange(),\n    target = range && prosemirrorTransform.liftTarget(range);\n  if (target == null) return false;\n  if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n  return true;\n};\nfunction splitBlockAs(splitNode) {\n  return function (state, dispatch) {\n    if (state.selection instanceof prosemirrorState.NodeSelection && state.selection.node.isBlock) {\n      var _$from = state.selection.$from;\n      if (!_$from.parentOffset || !prosemirrorTransform.canSplit(state.doc, _$from.pos)) return false;\n      if (dispatch) dispatch(state.tr.split(_$from.pos).scrollIntoView());\n      return true;\n    }\n    if (!state.selection.$from.depth) return false;\n    var tr = state.tr;\n    if (!state.selection.empty && (state.selection instanceof prosemirrorState.TextSelection || state.selection instanceof prosemirrorState.AllSelection)) tr.deleteSelection();\n    var $from = tr.selection.$from,\n      mapFrom = tr.steps.length;\n    var types = [];\n    var splitDepth,\n      deflt,\n      atEnd = false,\n      atStart = false;\n    for (var d = $from.depth;; d--) {\n      var node = $from.node(d);\n      if (node.isBlock) {\n        atEnd = $from.end(d) == $from.pos + ($from.depth - d);\n        atStart = $from.start(d) == $from.pos - ($from.depth - d);\n        deflt = defaultBlockAt($from.node(d - 1).contentMatchAt($from.indexAfter(d - 1)));\n        var splitType = splitNode && splitNode($from.parent, atEnd, $from);\n        types.unshift(splitType || (atEnd && deflt ? {\n          type: deflt\n        } : null));\n        splitDepth = d;\n        break;\n      } else {\n        if (d == 1) return false;\n        types.unshift(null);\n      }\n    }\n    var splitPos = $from.pos;\n    var can = prosemirrorTransform.canSplit(tr.doc, splitPos, types.length, types);\n    if (!can) {\n      types[0] = deflt ? {\n        type: deflt\n      } : null;\n      can = prosemirrorTransform.canSplit(tr.doc, splitPos, types.length, types);\n    }\n    if (!can) return false;\n    tr.split(splitPos, types.length, types);\n    if (!atEnd && atStart && $from.node(splitDepth).type != deflt) {\n      var mapping = tr.mapping.slice(mapFrom);\n      var first = mapping.map($from.before(splitDepth)),\n        $first = tr.doc.resolve(first);\n      if (deflt && $from.node(splitDepth - 1).canReplaceWith($first.index(), $first.index() + 1, deflt)) tr.setNodeMarkup(mapping.map($from.before(splitDepth)), deflt);\n    }\n    if (dispatch) dispatch(tr.scrollIntoView());\n    return true;\n  };\n}\nvar splitBlock = splitBlockAs();\nvar splitBlockKeepMarks = function splitBlockKeepMarks(state, dispatch) {\n  return splitBlock(state, dispatch && function (tr) {\n    var marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n    if (marks) tr.ensureMarks(marks);\n    dispatch(tr);\n  });\n};\nvar selectParentNode = function selectParentNode(state, dispatch) {\n  var _state$selection6 = state.selection,\n    $from = _state$selection6.$from,\n    to = _state$selection6.to,\n    pos;\n  var same = $from.sharedDepth(to);\n  if (same == 0) return false;\n  pos = $from.before(same);\n  if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.NodeSelection.create(state.doc, pos)));\n  return true;\n};\nvar selectAll = function selectAll(state, dispatch) {\n  if (dispatch) dispatch(state.tr.setSelection(new prosemirrorState.AllSelection(state.doc)));\n  return true;\n};\nfunction joinMaybeClear(state, $pos, dispatch) {\n  var before = $pos.nodeBefore,\n    after = $pos.nodeAfter,\n    index = $pos.index();\n  if (!before || !after || !before.type.compatibleContent(after.type)) return false;\n  if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n    if (dispatch) dispatch(state.tr[\"delete\"]($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n    return true;\n  }\n  if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || prosemirrorTransform.canJoin(state.doc, $pos.pos))) return false;\n  if (dispatch) dispatch(state.tr.join($pos.pos).scrollIntoView());\n  return true;\n}\nfunction deleteBarrier(state, $cut, dispatch, dir) {\n  var before = $cut.nodeBefore,\n    after = $cut.nodeAfter,\n    conn,\n    match;\n  var isolated = before.type.spec.isolating || after.type.spec.isolating;\n  if (!isolated && joinMaybeClear(state, $cut, dispatch)) return true;\n  var canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n  if (canDelAfter && (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match.matchType(conn[0] || after.type).validEnd) {\n    if (dispatch) {\n      var end = $cut.pos + after.nodeSize,\n        wrap = prosemirrorModel.Fragment.empty;\n      for (var i = conn.length - 1; i >= 0; i--) wrap = prosemirrorModel.Fragment.from(conn[i].create(null, wrap));\n      wrap = prosemirrorModel.Fragment.from(before.copy(wrap));\n      var tr = state.tr.step(new prosemirrorTransform.ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new prosemirrorModel.Slice(wrap, 1, 0), conn.length, true));\n      var $joinAt = tr.doc.resolve(end + 2 * conn.length);\n      if ($joinAt.nodeAfter && $joinAt.nodeAfter.type == before.type && prosemirrorTransform.canJoin(tr.doc, $joinAt.pos)) tr.join($joinAt.pos);\n      dispatch(tr.scrollIntoView());\n    }\n    return true;\n  }\n  var selAfter = after.type.spec.isolating || dir > 0 && isolated ? null : prosemirrorState.Selection.findFrom($cut, 1);\n  var range = selAfter && selAfter.$from.blockRange(selAfter.$to),\n    target = range && prosemirrorTransform.liftTarget(range);\n  if (target != null && target >= $cut.depth) {\n    if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n    return true;\n  }\n  if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n    var at = before,\n      _wrap = [];\n    for (;;) {\n      _wrap.push(at);\n      if (at.isTextblock) break;\n      at = at.lastChild;\n    }\n    var afterText = after,\n      afterDepth = 1;\n    for (; !afterText.isTextblock; afterText = afterText.firstChild) afterDepth++;\n    if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n      if (dispatch) {\n        var _end = prosemirrorModel.Fragment.empty;\n        for (var _i = _wrap.length - 1; _i >= 0; _i--) _end = prosemirrorModel.Fragment.from(_wrap[_i].copy(_end));\n        var _tr = state.tr.step(new prosemirrorTransform.ReplaceAroundStep($cut.pos - _wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new prosemirrorModel.Slice(_end, _wrap.length, 0), 0, true));\n        dispatch(_tr.scrollIntoView());\n      }\n      return true;\n    }\n  }\n  return false;\n}\nfunction selectTextblockSide(side) {\n  return function (state, dispatch) {\n    var sel = state.selection,\n      $pos = side < 0 ? sel.$from : sel.$to;\n    var depth = $pos.depth;\n    while ($pos.node(depth).isInline) {\n      if (!depth) return false;\n      depth--;\n    }\n    if (!$pos.node(depth).isTextblock) return false;\n    if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));\n    return true;\n  };\n}\nvar selectTextblockStart = selectTextblockSide(-1);\nvar selectTextblockEnd = selectTextblockSide(1);\nfunction wrapIn(nodeType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  return function (state, dispatch) {\n    var _state$selection7 = state.selection,\n      $from = _state$selection7.$from,\n      $to = _state$selection7.$to;\n    var range = $from.blockRange($to),\n      wrapping = range && prosemirrorTransform.findWrapping(range, nodeType, attrs);\n    if (!wrapping) return false;\n    if (dispatch) dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n    return true;\n  };\n}\nfunction setBlockType(nodeType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  return function (state, dispatch) {\n    var applicable = false;\n    for (var i = 0; i < state.selection.ranges.length && !applicable; i++) {\n      var _state$selection$rang = state.selection.ranges[i],\n        from = _state$selection$rang.$from.pos,\n        to = _state$selection$rang.$to.pos;\n      state.doc.nodesBetween(from, to, function (node, pos) {\n        if (applicable) return false;\n        if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) return;\n        if (node.type == nodeType) {\n          applicable = true;\n        } else {\n          var $pos = state.doc.resolve(pos),\n            index = $pos.index();\n          applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n        }\n      });\n    }\n    if (!applicable) return false;\n    if (dispatch) {\n      var tr = state.tr;\n      for (var _i2 = 0; _i2 < state.selection.ranges.length; _i2++) {\n        var _state$selection$rang2 = state.selection.ranges[_i2],\n          _from = _state$selection$rang2.$from.pos,\n          _to = _state$selection$rang2.$to.pos;\n        tr.setBlockType(_from, _to, nodeType, attrs);\n      }\n      dispatch(tr.scrollIntoView());\n    }\n    return true;\n  };\n}\nfunction markApplies(doc, ranges, type, enterAtoms) {\n  var _loop = function _loop() {\n      var _ranges$i = ranges[i],\n        $from = _ranges$i.$from,\n        $to = _ranges$i.$to;\n      var can = $from.depth == 0 ? doc.inlineContent && doc.type.allowsMarkType(type) : false;\n      doc.nodesBetween($from.pos, $to.pos, function (node, pos) {\n        if (can || !enterAtoms && node.isAtom && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) return false;\n        can = node.inlineContent && node.type.allowsMarkType(type);\n      });\n      if (can) return {\n        v: true\n      };\n    },\n    _ret;\n  for (var i = 0; i < ranges.length; i++) {\n    _ret = _loop();\n    if (_ret) return _ret.v;\n  }\n  return false;\n}\nfunction removeInlineAtoms(ranges) {\n  var result = [];\n  var _loop2 = function _loop2() {\n    var _ranges$i2 = ranges[i],\n      $from = _ranges$i2.$from,\n      $to = _ranges$i2.$to;\n    $from.doc.nodesBetween($from.pos, $to.pos, function (node, pos) {\n      if (node.isAtom && node.content.size && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) {\n        if (pos + 1 > $from.pos) result.push(new prosemirrorState.SelectionRange($from, $from.doc.resolve(pos + 1)));\n        $from = $from.doc.resolve(pos + 1 + node.content.size);\n        return false;\n      }\n    });\n    if ($from.pos < $to.pos) result.push(new prosemirrorState.SelectionRange($from, $to));\n  };\n  for (var i = 0; i < ranges.length; i++) {\n    _loop2();\n  }\n  return result;\n}\nfunction toggleMark(markType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var options = arguments.length > 2 ? arguments[2] : undefined;\n  var removeWhenPresent = (options && options.removeWhenPresent) !== false;\n  var enterAtoms = (options && options.enterInlineAtoms) !== false;\n  var dropSpace = !(options && options.includeWhitespace);\n  return function (state, dispatch) {\n    var _state$selection8 = state.selection,\n      empty = _state$selection8.empty,\n      $cursor = _state$selection8.$cursor,\n      ranges = _state$selection8.ranges;\n    if (empty && !$cursor || !markApplies(state.doc, ranges, markType, enterAtoms)) return false;\n    if (dispatch) {\n      if ($cursor) {\n        if (markType.isInSet(state.storedMarks || $cursor.marks())) dispatch(state.tr.removeStoredMark(markType));else dispatch(state.tr.addStoredMark(markType.create(attrs)));\n      } else {\n        var add,\n          tr = state.tr;\n        if (!enterAtoms) ranges = removeInlineAtoms(ranges);\n        if (removeWhenPresent) {\n          add = !ranges.some(function (r) {\n            return state.doc.rangeHasMark(r.$from.pos, r.$to.pos, markType);\n          });\n        } else {\n          add = !ranges.every(function (r) {\n            var missing = false;\n            tr.doc.nodesBetween(r.$from.pos, r.$to.pos, function (node, pos, parent) {\n              if (missing) return false;\n              missing = !markType.isInSet(node.marks) && !!parent && parent.type.allowsMarkType(markType) && !(node.isText && /^\\s*$/.test(node.textBetween(Math.max(0, r.$from.pos - pos), Math.min(node.nodeSize, r.$to.pos - pos))));\n            });\n            return !missing;\n          });\n        }\n        for (var i = 0; i < ranges.length; i++) {\n          var _ranges$i3 = ranges[i],\n            $from = _ranges$i3.$from,\n            $to = _ranges$i3.$to;\n          if (!add) {\n            tr.removeMark($from.pos, $to.pos, markType);\n          } else {\n            var from = $from.pos,\n              to = $to.pos,\n              start = $from.nodeAfter,\n              end = $to.nodeBefore;\n            var spaceStart = dropSpace && start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n            var spaceEnd = dropSpace && end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n            if (from + spaceStart < to) {\n              from += spaceStart;\n              to -= spaceEnd;\n            }\n            tr.addMark(from, to, markType.create(attrs));\n          }\n        }\n        dispatch(tr.scrollIntoView());\n      }\n    }\n    return true;\n  };\n}\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n  return function (tr) {\n    if (!tr.isGeneric) return dispatch(tr);\n    var ranges = [];\n    for (var i = 0; i < tr.mapping.maps.length; i++) {\n      var map = tr.mapping.maps[i];\n      for (var j = 0; j < ranges.length; j++) ranges[j] = map.map(ranges[j]);\n      map.forEach(function (_s, _e, from, to) {\n        return ranges.push(from, to);\n      });\n    }\n    var joinable = [];\n    for (var _i3 = 0; _i3 < ranges.length; _i3 += 2) {\n      var from = ranges[_i3],\n        to = ranges[_i3 + 1];\n      var $from = tr.doc.resolve(from),\n        depth = $from.sharedDepth(to),\n        parent = $from.node(depth);\n      for (var index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n        var after = parent.maybeChild(index);\n        if (!after) break;\n        if (index && joinable.indexOf(pos) == -1) {\n          var before = parent.child(index - 1);\n          if (before.type == after.type && isJoinable(before, after)) joinable.push(pos);\n        }\n        pos += after.nodeSize;\n      }\n    }\n    joinable.sort(function (a, b) {\n      return a - b;\n    });\n    for (var _i4 = joinable.length - 1; _i4 >= 0; _i4--) {\n      if (prosemirrorTransform.canJoin(tr.doc, joinable[_i4])) tr.join(joinable[_i4]);\n    }\n    dispatch(tr);\n  };\n}\nfunction autoJoin(command, isJoinable) {\n  var canJoin = Array.isArray(isJoinable) ? function (node) {\n    return isJoinable.indexOf(node.type.name) > -1;\n  } : isJoinable;\n  return function (state, dispatch, view) {\n    return command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin), view);\n  };\n}\nfunction chainCommands() {\n  for (var _len = arguments.length, commands = new Array(_len), _key = 0; _key < _len; _key++) {\n    commands[_key] = arguments[_key];\n  }\n  return function (state, dispatch, view) {\n    for (var i = 0; i < commands.length; i++) if (commands[i](state, dispatch, view)) return true;\n    return false;\n  };\n}\nvar backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nvar del = chainCommands(deleteSelection, joinForward, selectNodeForward);\nvar pcBaseKeymap = {\n  \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n  \"Mod-Enter\": exitCode,\n  \"Backspace\": backspace,\n  \"Mod-Backspace\": backspace,\n  \"Shift-Backspace\": backspace,\n  \"Delete\": del,\n  \"Mod-Delete\": del,\n  \"Mod-a\": selectAll\n};\nvar macBaseKeymap = {\n  \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n  \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n  \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n  \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n  \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n  \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"],\n  \"Ctrl-a\": selectTextblockStart,\n  \"Ctrl-e\": selectTextblockEnd\n};\nfor (var key in pcBaseKeymap) macBaseKeymap[key] = pcBaseKeymap[key];\nvar mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os != \"undefined\" && os.platform ? os.platform() == \"darwin\" : false;\nvar baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\nexports.autoJoin = autoJoin;\nexports.baseKeymap = baseKeymap;\nexports.chainCommands = chainCommands;\nexports.createParagraphNear = createParagraphNear;\nexports.deleteSelection = deleteSelection;\nexports.exitCode = exitCode;\nexports.joinBackward = joinBackward;\nexports.joinDown = joinDown;\nexports.joinForward = joinForward;\nexports.joinTextblockBackward = joinTextblockBackward;\nexports.joinTextblockForward = joinTextblockForward;\nexports.joinUp = joinUp;\nexports.lift = lift;\nexports.liftEmptyBlock = liftEmptyBlock;\nexports.macBaseKeymap = macBaseKeymap;\nexports.newlineInCode = newlineInCode;\nexports.pcBaseKeymap = pcBaseKeymap;\nexports.selectAll = selectAll;\nexports.selectNodeBackward = selectNodeBackward;\nexports.selectNodeForward = selectNodeForward;\nexports.selectParentNode = selectParentNode;\nexports.selectTextblockEnd = selectTextblockEnd;\nexports.selectTextblockStart = selectTextblockStart;\nexports.setBlockType = setBlockType;\nexports.splitBlock = splitBlock;\nexports.splitBlockAs = splitBlockAs;\nexports.splitBlockKeepMarks = splitBlockKeepMarks;\nexports.toggleMark = toggleMark;\nexports.wrapIn = wrapIn;\n","'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar prosemirrorState = require('prosemirror-state');\nvar prosemirrorTransform = require('prosemirror-transform');\nfunction dropCursor() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return new prosemirrorState.Plugin({\n    view: function view(editorView) {\n      return new DropCursorView(editorView, options);\n    }\n  });\n}\nvar DropCursorView = function () {\n  function DropCursorView(editorView, options) {\n    var _this = this;\n    _classCallCheck(this, DropCursorView);\n    var _a;\n    this.editorView = editorView;\n    this.cursorPos = null;\n    this.element = null;\n    this.timeout = -1;\n    this.lastDragEvent = null;\n    this.width = (_a = options.width) !== null && _a !== void 0 ? _a : 1;\n    this.color = options.color === false ? undefined : options.color || \"black\";\n    this[\"class\"] = options[\"class\"];\n    this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(function (name) {\n      var handler = function handler(e) {\n        _this[name](e);\n      };\n      editorView.dom.addEventListener(name, handler);\n      return {\n        name: name,\n        handler: handler\n      };\n    });\n  }\n  _createClass(DropCursorView, [{\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      this.handlers.forEach(function (_ref) {\n        var name = _ref.name,\n          handler = _ref.handler;\n        return _this2.editorView.dom.removeEventListener(name, handler);\n      });\n    }\n  }, {\n    key: \"update\",\n    value: function update(editorView, prevState) {\n      if (this.cursorPos != null && prevState.doc != editorView.state.doc) {\n        if (this.lastDragEvent) {\n          var target = this.computeTarget(this.lastDragEvent);\n          if (target == this.cursorPos) this.updateOverlay();else this.setCursor(target);\n        } else {\n          this.updateOverlay();\n        }\n      }\n    }\n  }, {\n    key: \"setCursor\",\n    value: function setCursor(pos) {\n      if (pos == this.cursorPos) return;\n      this.cursorPos = pos;\n      if (pos == null) {\n        this.element.parentNode.removeChild(this.element);\n        this.element = null;\n      } else {\n        this.updateOverlay();\n      }\n    }\n  }, {\n    key: \"updateOverlay\",\n    value: function updateOverlay() {\n      var $pos = this.editorView.state.doc.resolve(this.cursorPos);\n      var isBlock = !$pos.parent.inlineContent,\n        rect;\n      var editorDOM = this.editorView.dom,\n        editorRect = editorDOM.getBoundingClientRect();\n      var scaleX = editorRect.width / editorDOM.offsetWidth,\n        scaleY = editorRect.height / editorDOM.offsetHeight;\n      if (isBlock) {\n        var before = $pos.nodeBefore,\n          after = $pos.nodeAfter;\n        if (before || after) {\n          var node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0));\n          if (node) {\n            var nodeRect = node.getBoundingClientRect();\n            var top = before ? nodeRect.bottom : nodeRect.top;\n            if (before && after) top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2;\n            var halfWidth = this.width / 2 * scaleY;\n            rect = {\n              left: nodeRect.left,\n              right: nodeRect.right,\n              top: top - halfWidth,\n              bottom: top + halfWidth\n            };\n          }\n        }\n      }\n      if (!rect) {\n        var coords = this.editorView.coordsAtPos(this.cursorPos);\n        var _halfWidth = this.width / 2 * scaleX;\n        rect = {\n          left: coords.left - _halfWidth,\n          right: coords.left + _halfWidth,\n          top: coords.top,\n          bottom: coords.bottom\n        };\n      }\n      var parent = this.editorView.dom.offsetParent;\n      if (!this.element) {\n        this.element = parent.appendChild(document.createElement(\"div\"));\n        if (this[\"class\"]) this.element.className = this[\"class\"];\n        this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none;\";\n        if (this.color) {\n          this.element.style.backgroundColor = this.color;\n        }\n      }\n      this.element.classList.toggle(\"prosemirror-dropcursor-block\", isBlock);\n      this.element.classList.toggle(\"prosemirror-dropcursor-inline\", !isBlock);\n      var parentLeft, parentTop;\n      if (!parent || parent == document.body && getComputedStyle(parent).position == \"static\") {\n        parentLeft = -pageXOffset;\n        parentTop = -pageYOffset;\n      } else {\n        var _rect = parent.getBoundingClientRect();\n        var parentScaleX = _rect.width / parent.offsetWidth,\n          parentScaleY = _rect.height / parent.offsetHeight;\n        parentLeft = _rect.left - parent.scrollLeft * parentScaleX;\n        parentTop = _rect.top - parent.scrollTop * parentScaleY;\n      }\n      this.element.style.left = (rect.left - parentLeft) / scaleX + \"px\";\n      this.element.style.top = (rect.top - parentTop) / scaleY + \"px\";\n      this.element.style.width = (rect.right - rect.left) / scaleX + \"px\";\n      this.element.style.height = (rect.bottom - rect.top) / scaleY + \"px\";\n    }\n  }, {\n    key: \"scheduleRemoval\",\n    value: function scheduleRemoval(timeout) {\n      var _this3 = this;\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        return _this3.setCursor(null);\n      }, timeout);\n    }\n  }, {\n    key: \"computeTarget\",\n    value: function computeTarget(event) {\n      var pos = this.editorView.posAtCoords({\n        left: event.clientX,\n        top: event.clientY\n      });\n      var node = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside);\n      var disableDropCursor = node && node.type.spec.disableDropCursor;\n      var disabled = typeof disableDropCursor == \"function\" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor;\n      if (!pos || disabled) return null;\n      var target = pos.pos;\n      if (this.editorView.dragging && this.editorView.dragging.slice) {\n        var point = prosemirrorTransform.dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);\n        if (point != null) target = point;\n      }\n      return target;\n    }\n  }, {\n    key: \"dragover\",\n    value: function dragover(event) {\n      if (!this.editorView.editable) return;\n      this.lastDragEvent = event;\n      var target = this.computeTarget(event);\n      if (target != null) {\n        this.setCursor(target);\n        this.scheduleRemoval(5000);\n      }\n    }\n  }, {\n    key: \"dragend\",\n    value: function dragend() {\n      this.scheduleRemoval(20);\n    }\n  }, {\n    key: \"drop\",\n    value: function drop() {\n      this.scheduleRemoval(20);\n    }\n  }, {\n    key: \"dragleave\",\n    value: function dragleave(event) {\n      if (!this.editorView.dom.contains(event.relatedTarget)) this.setCursor(null);\n    }\n  }]);\n  return DropCursorView;\n}();\nexports.dropCursor = dropCursor;\n","'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar prosemirrorKeymap = require('prosemirror-keymap');\nvar prosemirrorState = require('prosemirror-state');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorView = require('prosemirror-view');\nvar GapCursor = function (_prosemirrorState$Sel) {\n  _inherits(GapCursor, _prosemirrorState$Sel);\n  var _super = _createSuper(GapCursor);\n  function GapCursor($pos) {\n    _classCallCheck(this, GapCursor);\n    return _super.call(this, $pos, $pos);\n  }\n  _createClass(GapCursor, [{\n    key: \"map\",\n    value: function map(doc, mapping) {\n      var $pos = doc.resolve(mapping.map(this.head));\n      return GapCursor.valid($pos) ? new GapCursor($pos) : prosemirrorState.Selection.near($pos);\n    }\n  }, {\n    key: \"content\",\n    value: function content() {\n      return prosemirrorModel.Slice.empty;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return other instanceof GapCursor && other.head == this.head;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        type: \"gapcursor\",\n        pos: this.head\n      };\n    }\n  }, {\n    key: \"getBookmark\",\n    value: function getBookmark() {\n      return new GapBookmark(this.anchor);\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(doc, json) {\n      if (typeof json.pos != \"number\") throw new RangeError(\"Invalid input for GapCursor.fromJSON\");\n      return new GapCursor(doc.resolve(json.pos));\n    }\n  }, {\n    key: \"valid\",\n    value: function valid($pos) {\n      var parent = $pos.parent;\n      if (parent.inlineContent || !closedBefore($pos) || !closedAfter($pos)) return false;\n      var override = parent.type.spec.allowGapCursor;\n      if (override != null) return override;\n      var deflt = parent.contentMatchAt($pos.index()).defaultType;\n      return deflt && deflt.isTextblock;\n    }\n  }, {\n    key: \"findGapCursorFrom\",\n    value: function findGapCursorFrom($pos, dir) {\n      var mustMove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      search: for (;;) {\n        if (!mustMove && GapCursor.valid($pos)) return $pos;\n        var pos = $pos.pos,\n          next = null;\n        for (var d = $pos.depth;; d--) {\n          var parent = $pos.node(d);\n          if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n            next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1);\n            break;\n          } else if (d == 0) {\n            return null;\n          }\n          pos += dir;\n          var $cur = $pos.doc.resolve(pos);\n          if (GapCursor.valid($cur)) return $cur;\n        }\n        for (;;) {\n          var inside = dir > 0 ? next.firstChild : next.lastChild;\n          if (!inside) {\n            if (next.isAtom && !next.isText && !prosemirrorState.NodeSelection.isSelectable(next)) {\n              $pos = $pos.doc.resolve(pos + next.nodeSize * dir);\n              mustMove = false;\n              continue search;\n            }\n            break;\n          }\n          next = inside;\n          pos += dir;\n          var _$cur = $pos.doc.resolve(pos);\n          if (GapCursor.valid(_$cur)) return _$cur;\n        }\n        return null;\n      }\n    }\n  }]);\n  return GapCursor;\n}(prosemirrorState.Selection);\nGapCursor.prototype.visible = false;\nGapCursor.findFrom = GapCursor.findGapCursorFrom;\nprosemirrorState.Selection.jsonID(\"gapcursor\", GapCursor);\nvar GapBookmark = function () {\n  function GapBookmark(pos) {\n    _classCallCheck(this, GapBookmark);\n    this.pos = pos;\n  }\n  _createClass(GapBookmark, [{\n    key: \"map\",\n    value: function map(mapping) {\n      return new GapBookmark(mapping.map(this.pos));\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(doc) {\n      var $pos = doc.resolve(this.pos);\n      return GapCursor.valid($pos) ? new GapCursor($pos) : prosemirrorState.Selection.near($pos);\n    }\n  }]);\n  return GapBookmark;\n}();\nfunction needsGap(type) {\n  return type.isAtom || type.spec.isolating || type.spec.createGapCursor;\n}\nfunction closedBefore($pos) {\n  for (var d = $pos.depth; d >= 0; d--) {\n    var index = $pos.index(d),\n      parent = $pos.node(d);\n    if (index == 0) {\n      if (parent.type.spec.isolating) return true;\n      continue;\n    }\n    for (var before = parent.child(index - 1);; before = before.lastChild) {\n      if (before.childCount == 0 && !before.inlineContent || needsGap(before.type)) return true;\n      if (before.inlineContent) return false;\n    }\n  }\n  return true;\n}\nfunction closedAfter($pos) {\n  for (var d = $pos.depth; d >= 0; d--) {\n    var index = $pos.indexAfter(d),\n      parent = $pos.node(d);\n    if (index == parent.childCount) {\n      if (parent.type.spec.isolating) return true;\n      continue;\n    }\n    for (var after = parent.child(index);; after = after.firstChild) {\n      if (after.childCount == 0 && !after.inlineContent || needsGap(after.type)) return true;\n      if (after.inlineContent) return false;\n    }\n  }\n  return true;\n}\nfunction gapCursor() {\n  return new prosemirrorState.Plugin({\n    props: {\n      decorations: drawGapCursor,\n      createSelectionBetween: function createSelectionBetween(_view, $anchor, $head) {\n        return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null;\n      },\n      handleClick: handleClick,\n      handleKeyDown: handleKeyDown,\n      handleDOMEvents: {\n        beforeinput: beforeinput\n      }\n    }\n  });\n}\nvar handleKeyDown = prosemirrorKeymap.keydownHandler({\n  \"ArrowLeft\": arrow(\"horiz\", -1),\n  \"ArrowRight\": arrow(\"horiz\", 1),\n  \"ArrowUp\": arrow(\"vert\", -1),\n  \"ArrowDown\": arrow(\"vert\", 1)\n});\nfunction arrow(axis, dir) {\n  var dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n  return function (state, dispatch, view) {\n    var sel = state.selection;\n    var $start = dir > 0 ? sel.$to : sel.$from,\n      mustMove = sel.empty;\n    if (sel instanceof prosemirrorState.TextSelection) {\n      if (!view.endOfTextblock(dirStr) || $start.depth == 0) return false;\n      mustMove = false;\n      $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());\n    }\n    var $found = GapCursor.findGapCursorFrom($start, dir, mustMove);\n    if (!$found) return false;\n    if (dispatch) dispatch(state.tr.setSelection(new GapCursor($found)));\n    return true;\n  };\n}\nfunction handleClick(view, pos, event) {\n  if (!view || !view.editable) return false;\n  var $pos = view.state.doc.resolve(pos);\n  if (!GapCursor.valid($pos)) return false;\n  var clickPos = view.posAtCoords({\n    left: event.clientX,\n    top: event.clientY\n  });\n  if (clickPos && clickPos.inside > -1 && prosemirrorState.NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside))) return false;\n  view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));\n  return true;\n}\nfunction beforeinput(view, event) {\n  if (event.inputType != \"insertCompositionText\" || !(view.state.selection instanceof GapCursor)) return false;\n  var $from = view.state.selection.$from;\n  var insert = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text);\n  if (!insert) return false;\n  var frag = prosemirrorModel.Fragment.empty;\n  for (var i = insert.length - 1; i >= 0; i--) frag = prosemirrorModel.Fragment.from(insert[i].createAndFill(null, frag));\n  var tr = view.state.tr.replace($from.pos, $from.pos, new prosemirrorModel.Slice(frag, 0, 0));\n  tr.setSelection(prosemirrorState.TextSelection.near(tr.doc.resolve($from.pos + 1)));\n  view.dispatch(tr);\n  return false;\n}\nfunction drawGapCursor(state) {\n  if (!(state.selection instanceof GapCursor)) return null;\n  var node = document.createElement(\"div\");\n  node.className = \"ProseMirror-gapcursor\";\n  return prosemirrorView.DecorationSet.create(state.doc, [prosemirrorView.Decoration.widget(state.selection.head, node, {\n    key: \"gapcursor\"\n  })]);\n}\nexports.GapCursor = GapCursor;\nexports.gapCursor = gapCursor;\n","'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar RopeSequence = require('rope-sequence');\nvar prosemirrorTransform = require('prosemirror-transform');\nvar prosemirrorState = require('prosemirror-state');\nvar max_empty_items = 500;\nvar Branch = function () {\n  function Branch(items, eventCount) {\n    _classCallCheck(this, Branch);\n    this.items = items;\n    this.eventCount = eventCount;\n  }\n  _createClass(Branch, [{\n    key: \"popEvent\",\n    value: function popEvent(state, preserveItems) {\n      var _this = this;\n      if (this.eventCount == 0) return null;\n      var end = this.items.length;\n      for (;; end--) {\n        var next = this.items.get(end - 1);\n        if (next.selection) {\n          --end;\n          break;\n        }\n      }\n      var remap, mapFrom;\n      if (preserveItems) {\n        remap = this.remapping(end, this.items.length);\n        mapFrom = remap.maps.length;\n      }\n      var transform = state.tr;\n      var selection, remaining;\n      var addAfter = [],\n        addBefore = [];\n      this.items.forEach(function (item, i) {\n        if (!item.step) {\n          if (!remap) {\n            remap = _this.remapping(end, i + 1);\n            mapFrom = remap.maps.length;\n          }\n          mapFrom--;\n          addBefore.push(item);\n          return;\n        }\n        if (remap) {\n          addBefore.push(new Item(item.map));\n          var step = item.step.map(remap.slice(mapFrom)),\n            map;\n          if (step && transform.maybeStep(step).doc) {\n            map = transform.mapping.maps[transform.mapping.maps.length - 1];\n            addAfter.push(new Item(map, undefined, undefined, addAfter.length + addBefore.length));\n          }\n          mapFrom--;\n          if (map) remap.appendMap(map, mapFrom);\n        } else {\n          transform.maybeStep(item.step);\n        }\n        if (item.selection) {\n          selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n          remaining = new Branch(_this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), _this.eventCount - 1);\n          return false;\n        }\n      }, this.items.length, 0);\n      return {\n        remaining: remaining,\n        transform: transform,\n        selection: selection\n      };\n    }\n  }, {\n    key: \"addTransform\",\n    value: function addTransform(transform, selection, histOptions, preserveItems) {\n      var newItems = [],\n        eventCount = this.eventCount;\n      var oldItems = this.items,\n        lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n      for (var i = 0; i < transform.steps.length; i++) {\n        var step = transform.steps[i].invert(transform.docs[i]);\n        var item = new Item(transform.mapping.maps[i], step, selection),\n          merged = void 0;\n        if (merged = lastItem && lastItem.merge(item)) {\n          item = merged;\n          if (i) newItems.pop();else oldItems = oldItems.slice(0, oldItems.length - 1);\n        }\n        newItems.push(item);\n        if (selection) {\n          eventCount++;\n          selection = undefined;\n        }\n        if (!preserveItems) lastItem = item;\n      }\n      var overflow = eventCount - histOptions.depth;\n      if (overflow > DEPTH_OVERFLOW) {\n        oldItems = cutOffEvents(oldItems, overflow);\n        eventCount -= overflow;\n      }\n      return new Branch(oldItems.append(newItems), eventCount);\n    }\n  }, {\n    key: \"remapping\",\n    value: function remapping(from, to) {\n      var maps = new prosemirrorTransform.Mapping();\n      this.items.forEach(function (item, i) {\n        var mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from ? maps.maps.length - item.mirrorOffset : undefined;\n        maps.appendMap(item.map, mirrorPos);\n      }, from, to);\n      return maps;\n    }\n  }, {\n    key: \"addMaps\",\n    value: function addMaps(array) {\n      if (this.eventCount == 0) return this;\n      return new Branch(this.items.append(array.map(function (map) {\n        return new Item(map);\n      })), this.eventCount);\n    }\n  }, {\n    key: \"rebased\",\n    value: function rebased(rebasedTransform, rebasedCount) {\n      if (!this.eventCount) return this;\n      var rebasedItems = [],\n        start = Math.max(0, this.items.length - rebasedCount);\n      var mapping = rebasedTransform.mapping;\n      var newUntil = rebasedTransform.steps.length;\n      var eventCount = this.eventCount;\n      this.items.forEach(function (item) {\n        if (item.selection) eventCount--;\n      }, start);\n      var iRebased = rebasedCount;\n      this.items.forEach(function (item) {\n        var pos = mapping.getMirror(--iRebased);\n        if (pos == null) return;\n        newUntil = Math.min(newUntil, pos);\n        var map = mapping.maps[pos];\n        if (item.step) {\n          var step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n          var selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n          if (selection) eventCount++;\n          rebasedItems.push(new Item(map, step, selection));\n        } else {\n          rebasedItems.push(new Item(map));\n        }\n      }, start);\n      var newMaps = [];\n      for (var i = rebasedCount; i < newUntil; i++) newMaps.push(new Item(mapping.maps[i]));\n      var items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n      var branch = new Branch(items, eventCount);\n      if (branch.emptyItemCount() > max_empty_items) branch = branch.compress(this.items.length - rebasedItems.length);\n      return branch;\n    }\n  }, {\n    key: \"emptyItemCount\",\n    value: function emptyItemCount() {\n      var count = 0;\n      this.items.forEach(function (item) {\n        if (!item.step) count++;\n      });\n      return count;\n    }\n  }, {\n    key: \"compress\",\n    value: function compress() {\n      var upto = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.items.length;\n      var remap = this.remapping(0, upto),\n        mapFrom = remap.maps.length;\n      var items = [],\n        events = 0;\n      this.items.forEach(function (item, i) {\n        if (i >= upto) {\n          items.push(item);\n          if (item.selection) events++;\n        } else if (item.step) {\n          var step = item.step.map(remap.slice(mapFrom)),\n            map = step && step.getMap();\n          mapFrom--;\n          if (map) remap.appendMap(map, mapFrom);\n          if (step) {\n            var selection = item.selection && item.selection.map(remap.slice(mapFrom));\n            if (selection) events++;\n            var newItem = new Item(map.invert(), step, selection),\n              merged,\n              last = items.length - 1;\n            if (merged = items.length && items[last].merge(newItem)) items[last] = merged;else items.push(newItem);\n          }\n        } else if (item.map) {\n          mapFrom--;\n        }\n      }, this.items.length, 0);\n      return new Branch(RopeSequence.from(items.reverse()), events);\n    }\n  }]);\n  return Branch;\n}();\nBranch.empty = new Branch(RopeSequence.empty, 0);\nfunction cutOffEvents(items, n) {\n  var cutPoint;\n  items.forEach(function (item, i) {\n    if (item.selection && n-- == 0) {\n      cutPoint = i;\n      return false;\n    }\n  });\n  return items.slice(cutPoint);\n}\nvar Item = function () {\n  function Item(map, step, selection, mirrorOffset) {\n    _classCallCheck(this, Item);\n    this.map = map;\n    this.step = step;\n    this.selection = selection;\n    this.mirrorOffset = mirrorOffset;\n  }\n  _createClass(Item, [{\n    key: \"merge\",\n    value: function merge(other) {\n      if (this.step && other.step && !other.selection) {\n        var step = other.step.merge(this.step);\n        if (step) return new Item(step.getMap().invert(), step, this.selection);\n      }\n    }\n  }]);\n  return Item;\n}();\nvar HistoryState = _createClass(function HistoryState(done, undone, prevRanges, prevTime, prevComposition) {\n  _classCallCheck(this, HistoryState);\n  this.done = done;\n  this.undone = undone;\n  this.prevRanges = prevRanges;\n  this.prevTime = prevTime;\n  this.prevComposition = prevComposition;\n});\nvar DEPTH_OVERFLOW = 20;\nfunction applyTransaction(history, state, tr, options) {\n  var historyTr = tr.getMeta(historyKey),\n    rebased;\n  if (historyTr) return historyTr.historyState;\n  if (tr.getMeta(closeHistoryKey)) history = new HistoryState(history.done, history.undone, null, 0, -1);\n  var appended = tr.getMeta(\"appendedTransaction\");\n  if (tr.steps.length == 0) {\n    return history;\n  } else if (appended && appended.getMeta(historyKey)) {\n    if (appended.getMeta(historyKey).redo) return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps), history.prevTime, history.prevComposition);else return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime, history.prevComposition);\n  } else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n    var composition = tr.getMeta(\"composition\");\n    var newGroup = history.prevTime == 0 || !appended && history.prevComposition != composition && (history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges));\n    var prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps);\n    return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time, composition == null ? history.prevComposition : composition);\n  } else if (rebased = tr.getMeta(\"rebased\")) {\n    return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n  } else {\n    return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n  }\n}\nfunction isAdjacentTo(transform, prevRanges) {\n  if (!prevRanges) return false;\n  if (!transform.docChanged) return true;\n  var adjacent = false;\n  transform.mapping.maps[0].forEach(function (start, end) {\n    for (var i = 0; i < prevRanges.length; i += 2) if (start <= prevRanges[i + 1] && end >= prevRanges[i]) adjacent = true;\n  });\n  return adjacent;\n}\nfunction rangesFor(maps) {\n  var result = [];\n  for (var i = maps.length - 1; i >= 0 && result.length == 0; i--) maps[i].forEach(function (_from, _to, from, to) {\n    return result.push(from, to);\n  });\n  return result;\n}\nfunction mapRanges(ranges, mapping) {\n  if (!ranges) return null;\n  var result = [];\n  for (var i = 0; i < ranges.length; i += 2) {\n    var from = mapping.map(ranges[i], 1),\n      to = mapping.map(ranges[i + 1], -1);\n    if (from <= to) result.push(from, to);\n  }\n  return result;\n}\nfunction histTransaction(history, state, redo) {\n  var preserveItems = mustPreserveItems(state);\n  var histOptions = historyKey.get(state).spec.config;\n  var pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n  if (!pop) return null;\n  var selection = pop.selection.resolve(pop.transform.doc);\n  var added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);\n  var newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0, -1);\n  return pop.transform.setSelection(selection).setMeta(historyKey, {\n    redo: redo,\n    historyState: newHist\n  });\n}\nvar cachedPreserveItems = false,\n  cachedPreserveItemsPlugins = null;\nfunction mustPreserveItems(state) {\n  var plugins = state.plugins;\n  if (cachedPreserveItemsPlugins != plugins) {\n    cachedPreserveItems = false;\n    cachedPreserveItemsPlugins = plugins;\n    for (var i = 0; i < plugins.length; i++) if (plugins[i].spec.historyPreserveItems) {\n      cachedPreserveItems = true;\n      break;\n    }\n  }\n  return cachedPreserveItems;\n}\nfunction closeHistory(tr) {\n  return tr.setMeta(closeHistoryKey, true);\n}\nvar historyKey = new prosemirrorState.PluginKey(\"history\");\nvar closeHistoryKey = new prosemirrorState.PluginKey(\"closeHistory\");\nfunction history() {\n  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  config = {\n    depth: config.depth || 100,\n    newGroupDelay: config.newGroupDelay || 500\n  };\n  return new prosemirrorState.Plugin({\n    key: historyKey,\n    state: {\n      init: function init() {\n        return new HistoryState(Branch.empty, Branch.empty, null, 0, -1);\n      },\n      apply: function apply(tr, hist, state) {\n        return applyTransaction(hist, state, tr, config);\n      }\n    },\n    config: config,\n    props: {\n      handleDOMEvents: {\n        beforeinput: function beforeinput(view, e) {\n          var inputType = e.inputType;\n          var command = inputType == \"historyUndo\" ? undo : inputType == \"historyRedo\" ? redo : null;\n          if (!command || !view.editable) return false;\n          e.preventDefault();\n          return command(view.state, view.dispatch);\n        }\n      }\n    }\n  });\n}\nfunction buildCommand(redo, scroll) {\n  return function (state, dispatch) {\n    var hist = historyKey.getState(state);\n    if (!hist || (redo ? hist.undone : hist.done).eventCount == 0) return false;\n    if (dispatch) {\n      var tr = histTransaction(hist, state, redo);\n      if (tr) dispatch(scroll ? tr.scrollIntoView() : tr);\n    }\n    return true;\n  };\n}\nvar undo = buildCommand(false, true);\nvar redo = buildCommand(true, true);\nvar undoNoScroll = buildCommand(false, false);\nvar redoNoScroll = buildCommand(true, false);\nfunction undoDepth(state) {\n  var hist = historyKey.getState(state);\n  return hist ? hist.done.eventCount : 0;\n}\nfunction redoDepth(state) {\n  var hist = historyKey.getState(state);\n  return hist ? hist.undone.eventCount : 0;\n}\nfunction isHistoryTransaction(tr) {\n  return tr.getMeta(historyKey) != null;\n}\nexports.closeHistory = closeHistory;\nexports.history = history;\nexports.isHistoryTransaction = isHistoryTransaction;\nexports.redo = redo;\nexports.redoDepth = redoDepth;\nexports.redoNoScroll = redoNoScroll;\nexports.undo = undo;\nexports.undoDepth = undoDepth;\nexports.undoNoScroll = undoNoScroll;\n","'use strict';\n\nvar w3cKeyname = require('w3c-keyname');\nvar prosemirrorState = require('prosemirror-state');\nvar mac = typeof navigator != \"undefined\" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\nvar windows = typeof navigator != \"undefined\" && /Win/.test(navigator.platform);\nfunction normalizeKeyName(name) {\n  var parts = name.split(/-(?!$)/),\n    result = parts[parts.length - 1];\n  if (result == \"Space\") result = \" \";\n  var alt, ctrl, shift, meta;\n  for (var i = 0; i < parts.length - 1; i++) {\n    var mod = parts[i];\n    if (/^(cmd|meta|m)$/i.test(mod)) meta = true;else if (/^a(lt)?$/i.test(mod)) alt = true;else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;else if (/^s(hift)?$/i.test(mod)) shift = true;else if (/^mod$/i.test(mod)) {\n      if (mac) meta = true;else ctrl = true;\n    } else throw new Error(\"Unrecognized modifier name: \" + mod);\n  }\n  if (alt) result = \"Alt-\" + result;\n  if (ctrl) result = \"Ctrl-\" + result;\n  if (meta) result = \"Meta-\" + result;\n  if (shift) result = \"Shift-\" + result;\n  return result;\n}\nfunction normalize(map) {\n  var copy = Object.create(null);\n  for (var prop in map) copy[normalizeKeyName(prop)] = map[prop];\n  return copy;\n}\nfunction modifiers(name, event) {\n  var shift = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n  if (event.altKey) name = \"Alt-\" + name;\n  if (event.ctrlKey) name = \"Ctrl-\" + name;\n  if (event.metaKey) name = \"Meta-\" + name;\n  if (shift && event.shiftKey) name = \"Shift-\" + name;\n  return name;\n}\nfunction keymap(bindings) {\n  return new prosemirrorState.Plugin({\n    props: {\n      handleKeyDown: keydownHandler(bindings)\n    }\n  });\n}\nfunction keydownHandler(bindings) {\n  var map = normalize(bindings);\n  return function (view, event) {\n    var name = w3cKeyname.keyName(event),\n      baseName,\n      direct = map[modifiers(name, event)];\n    if (direct && direct(view.state, view.dispatch, view)) return true;\n    if (name.length == 1 && name != \" \") {\n      if (event.shiftKey) {\n        var noShift = map[modifiers(name, event, false)];\n        if (noShift && noShift(view.state, view.dispatch, view)) return true;\n      }\n      if ((event.altKey || event.metaKey || event.ctrlKey) && !(windows && event.ctrlKey && event.altKey) && (baseName = w3cKeyname.base[event.keyCode]) && baseName != name) {\n        var fromCode = map[modifiers(baseName, event)];\n        if (fromCode && fromCode(view.state, view.dispatch, view)) return true;\n      }\n    }\n    return false;\n  };\n}\nexports.keydownHandler = keydownHandler;\nexports.keymap = keymap;\n","'use strict';\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; } catch (e) { return typeof fn === \"function\"; } }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar OrderedMap = require('orderedmap');\nfunction _findDiffStart(a, b, pos) {\n  for (var i = 0;; i++) {\n    if (i == a.childCount || i == b.childCount) return a.childCount == b.childCount ? null : pos;\n    var childA = a.child(i),\n      childB = b.child(i);\n    if (childA == childB) {\n      pos += childA.nodeSize;\n      continue;\n    }\n    if (!childA.sameMarkup(childB)) return pos;\n    if (childA.isText && childA.text != childB.text) {\n      var tA = childA.text,\n        tB = childB.text,\n        j = 0;\n      for (; tA[j] == tB[j]; j++) pos++;\n      if (j && j < tA.length && j < tB.length && surrogateHigh(tA.charCodeAt(j - 1)) && surrogateLow(tA.charCodeAt(j))) pos--;\n      return pos;\n    }\n    if (childA.content.size || childB.content.size) {\n      var inner = _findDiffStart(childA.content, childB.content, pos + 1);\n      if (inner != null) return inner;\n    }\n    pos += childA.nodeSize;\n  }\n}\nfunction _findDiffEnd(a, b, posA, posB) {\n  for (var iA = a.childCount, iB = b.childCount;;) {\n    if (iA == 0 || iB == 0) return iA == iB ? null : {\n      a: posA,\n      b: posB\n    };\n    var childA = a.child(--iA),\n      childB = b.child(--iB),\n      size = childA.nodeSize;\n    if (childA == childB) {\n      posA -= size;\n      posB -= size;\n      continue;\n    }\n    if (!childA.sameMarkup(childB)) return {\n      a: posA,\n      b: posB\n    };\n    if (childA.isText && childA.text != childB.text) {\n      var tA = childA.text,\n        tB = childB.text,\n        _iA = tA.length,\n        _iB = tB.length;\n      while (_iA > 0 && _iB > 0 && tA[_iA - 1] == tB[_iB - 1]) {\n        _iA--;\n        _iB--;\n        posA--;\n        posB--;\n      }\n      if (_iA && _iB && _iA < tA.length && surrogateHigh(tA.charCodeAt(_iA - 1)) && surrogateLow(tA.charCodeAt(_iA))) {\n        posA++;\n        posB++;\n      }\n      return {\n        a: posA,\n        b: posB\n      };\n    }\n    if (childA.content.size || childB.content.size) {\n      var inner = _findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n      if (inner) return inner;\n    }\n    posA -= size;\n    posB -= size;\n  }\n}\nfunction surrogateLow(ch) {\n  return ch >= 0xDC00 && ch < 0xE000;\n}\nfunction surrogateHigh(ch) {\n  return ch >= 0xD800 && ch < 0xDC00;\n}\nvar Fragment = function () {\n  function Fragment(content, size) {\n    _classCallCheck(this, Fragment);\n    this.content = content;\n    this.size = size || 0;\n    if (size == null) for (var i = 0; i < content.length; i++) this.size += content[i].nodeSize;\n  }\n  _createClass(Fragment, [{\n    key: \"nodesBetween\",\n    value: function nodesBetween(from, to, f) {\n      var nodeStart = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var parent = arguments.length > 4 ? arguments[4] : undefined;\n      for (var i = 0, pos = 0; pos < to; i++) {\n        var child = this.content[i],\n          end = pos + child.nodeSize;\n        if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n          var start = pos + 1;\n          child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n        }\n        pos = end;\n      }\n    }\n  }, {\n    key: \"descendants\",\n    value: function descendants(f) {\n      this.nodesBetween(0, this.size, f);\n    }\n  }, {\n    key: \"textBetween\",\n    value: function textBetween(from, to, blockSeparator, leafText) {\n      var text = \"\",\n        first = true;\n      this.nodesBetween(from, to, function (node, pos) {\n        var nodeText = node.isText ? node.text.slice(Math.max(from, pos) - pos, to - pos) : !node.isLeaf ? \"\" : leafText ? typeof leafText === \"function\" ? leafText(node) : leafText : node.type.spec.leafText ? node.type.spec.leafText(node) : \"\";\n        if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {\n          if (first) first = false;else text += blockSeparator;\n        }\n        text += nodeText;\n      }, 0);\n      return text;\n    }\n  }, {\n    key: \"append\",\n    value: function append(other) {\n      if (!other.size) return this;\n      if (!this.size) return other;\n      var last = this.lastChild,\n        first = other.firstChild,\n        content = this.content.slice(),\n        i = 0;\n      if (last.isText && last.sameMarkup(first)) {\n        content[content.length - 1] = last.withText(last.text + first.text);\n        i = 1;\n      }\n      for (; i < other.content.length; i++) content.push(other.content[i]);\n      return new Fragment(content, this.size + other.size);\n    }\n  }, {\n    key: \"cut\",\n    value: function cut(from) {\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.size;\n      if (from == 0 && to == this.size) return this;\n      var result = [],\n        size = 0;\n      if (to > from) for (var i = 0, pos = 0; pos < to; i++) {\n        var child = this.content[i],\n          end = pos + child.nodeSize;\n        if (end > from) {\n          if (pos < from || end > to) {\n            if (child.isText) child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));else child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n          }\n          result.push(child);\n          size += child.nodeSize;\n        }\n        pos = end;\n      }\n      return new Fragment(result, size);\n    }\n  }, {\n    key: \"cutByIndex\",\n    value: function cutByIndex(from, to) {\n      if (from == to) return Fragment.empty;\n      if (from == 0 && to == this.content.length) return this;\n      return new Fragment(this.content.slice(from, to));\n    }\n  }, {\n    key: \"replaceChild\",\n    value: function replaceChild(index, node) {\n      var current = this.content[index];\n      if (current == node) return this;\n      var copy = this.content.slice();\n      var size = this.size + node.nodeSize - current.nodeSize;\n      copy[index] = node;\n      return new Fragment(copy, size);\n    }\n  }, {\n    key: \"addToStart\",\n    value: function addToStart(node) {\n      return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n    }\n  }, {\n    key: \"addToEnd\",\n    value: function addToEnd(node) {\n      return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      if (this.content.length != other.content.length) return false;\n      for (var i = 0; i < this.content.length; i++) if (!this.content[i].eq(other.content[i])) return false;\n      return true;\n    }\n  }, {\n    key: \"firstChild\",\n    get: function get() {\n      return this.content.length ? this.content[0] : null;\n    }\n  }, {\n    key: \"lastChild\",\n    get: function get() {\n      return this.content.length ? this.content[this.content.length - 1] : null;\n    }\n  }, {\n    key: \"childCount\",\n    get: function get() {\n      return this.content.length;\n    }\n  }, {\n    key: \"child\",\n    value: function child(index) {\n      var found = this.content[index];\n      if (!found) throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n      return found;\n    }\n  }, {\n    key: \"maybeChild\",\n    value: function maybeChild(index) {\n      return this.content[index] || null;\n    }\n  }, {\n    key: \"forEach\",\n    value: function forEach(f) {\n      for (var i = 0, p = 0; i < this.content.length; i++) {\n        var child = this.content[i];\n        f(child, p, i);\n        p += child.nodeSize;\n      }\n    }\n  }, {\n    key: \"findDiffStart\",\n    value: function findDiffStart(other) {\n      var pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      return _findDiffStart(this, other, pos);\n    }\n  }, {\n    key: \"findDiffEnd\",\n    value: function findDiffEnd(other) {\n      var pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.size;\n      var otherPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : other.size;\n      return _findDiffEnd(this, other, pos, otherPos);\n    }\n  }, {\n    key: \"findIndex\",\n    value: function findIndex(pos) {\n      if (pos == 0) return retIndex(0, pos);\n      if (pos == this.size) return retIndex(this.content.length, pos);\n      if (pos > this.size || pos < 0) throw new RangeError(\"Position \".concat(pos, \" outside of fragment (\").concat(this, \")\"));\n      for (var i = 0, curPos = 0;; i++) {\n        var cur = this.child(i),\n          end = curPos + cur.nodeSize;\n        if (end >= pos) {\n          if (end == pos) return retIndex(i + 1, end);\n          return retIndex(i, curPos);\n        }\n        curPos = end;\n      }\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return \"<\" + this.toStringInner() + \">\";\n    }\n  }, {\n    key: \"toStringInner\",\n    value: function toStringInner() {\n      return this.content.join(\", \");\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.content.length ? this.content.map(function (n) {\n        return n.toJSON();\n      }) : null;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, value) {\n      if (!value) return Fragment.empty;\n      if (!Array.isArray(value)) throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n      return Fragment.fromArray(value.map(schema.nodeFromJSON));\n    }\n  }, {\n    key: \"fromArray\",\n    value: function fromArray(array) {\n      if (!array.length) return Fragment.empty;\n      var joined,\n        size = 0;\n      for (var i = 0; i < array.length; i++) {\n        var node = array[i];\n        size += node.nodeSize;\n        if (i && node.isText && array[i - 1].sameMarkup(node)) {\n          if (!joined) joined = array.slice(0, i);\n          joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text);\n        } else if (joined) {\n          joined.push(node);\n        }\n      }\n      return new Fragment(joined || array, size);\n    }\n  }, {\n    key: \"from\",\n    value: function from(nodes) {\n      if (!nodes) return Fragment.empty;\n      if (nodes instanceof Fragment) return nodes;\n      if (Array.isArray(nodes)) return this.fromArray(nodes);\n      if (nodes.attrs) return new Fragment([nodes], nodes.nodeSize);\n      throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" + (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n    }\n  }]);\n  return Fragment;\n}();\nFragment.empty = new Fragment([], 0);\nvar found = {\n  index: 0,\n  offset: 0\n};\nfunction retIndex(index, offset) {\n  found.index = index;\n  found.offset = offset;\n  return found;\n}\nfunction compareDeep(a, b) {\n  if (a === b) return true;\n  if (!(a && _typeof(a) == \"object\") || !(b && _typeof(b) == \"object\")) return false;\n  var array = Array.isArray(a);\n  if (Array.isArray(b) != array) return false;\n  if (array) {\n    if (a.length != b.length) return false;\n    for (var i = 0; i < a.length; i++) if (!compareDeep(a[i], b[i])) return false;\n  } else {\n    for (var p in a) if (!(p in b) || !compareDeep(a[p], b[p])) return false;\n    for (var _p in b) if (!(_p in a)) return false;\n  }\n  return true;\n}\nvar Mark = function () {\n  function Mark(type, attrs) {\n    _classCallCheck(this, Mark);\n    this.type = type;\n    this.attrs = attrs;\n  }\n  _createClass(Mark, [{\n    key: \"addToSet\",\n    value: function addToSet(set) {\n      var copy,\n        placed = false;\n      for (var i = 0; i < set.length; i++) {\n        var other = set[i];\n        if (this.eq(other)) return set;\n        if (this.type.excludes(other.type)) {\n          if (!copy) copy = set.slice(0, i);\n        } else if (other.type.excludes(this.type)) {\n          return set;\n        } else {\n          if (!placed && other.type.rank > this.type.rank) {\n            if (!copy) copy = set.slice(0, i);\n            copy.push(this);\n            placed = true;\n          }\n          if (copy) copy.push(other);\n        }\n      }\n      if (!copy) copy = set.slice();\n      if (!placed) copy.push(this);\n      return copy;\n    }\n  }, {\n    key: \"removeFromSet\",\n    value: function removeFromSet(set) {\n      for (var i = 0; i < set.length; i++) if (this.eq(set[i])) return set.slice(0, i).concat(set.slice(i + 1));\n      return set;\n    }\n  }, {\n    key: \"isInSet\",\n    value: function isInSet(set) {\n      for (var i = 0; i < set.length; i++) if (this.eq(set[i])) return true;\n      return false;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this == other || this.type == other.type && compareDeep(this.attrs, other.attrs);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var obj = {\n        type: this.type.name\n      };\n      for (var _ in this.attrs) {\n        obj.attrs = this.attrs;\n        break;\n      }\n      return obj;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (!json) throw new RangeError(\"Invalid input for Mark.fromJSON\");\n      var type = schema.marks[json.type];\n      if (!type) throw new RangeError(\"There is no mark type \".concat(json.type, \" in this schema\"));\n      var mark = type.create(json.attrs);\n      type.checkAttrs(mark.attrs);\n      return mark;\n    }\n  }, {\n    key: \"sameSet\",\n    value: function sameSet(a, b) {\n      if (a == b) return true;\n      if (a.length != b.length) return false;\n      for (var i = 0; i < a.length; i++) if (!a[i].eq(b[i])) return false;\n      return true;\n    }\n  }, {\n    key: \"setFrom\",\n    value: function setFrom(marks) {\n      if (!marks || Array.isArray(marks) && marks.length == 0) return Mark.none;\n      if (marks instanceof Mark) return [marks];\n      var copy = marks.slice();\n      copy.sort(function (a, b) {\n        return a.type.rank - b.type.rank;\n      });\n      return copy;\n    }\n  }]);\n  return Mark;\n}();\nMark.none = [];\nvar ReplaceError = function (_Error) {\n  _inherits(ReplaceError, _Error);\n  var _super = _createSuper(ReplaceError);\n  function ReplaceError() {\n    _classCallCheck(this, ReplaceError);\n    return _super.apply(this, arguments);\n  }\n  return _createClass(ReplaceError);\n}(_wrapNativeSuper(Error));\nvar Slice = function () {\n  function Slice(content, openStart, openEnd) {\n    _classCallCheck(this, Slice);\n    this.content = content;\n    this.openStart = openStart;\n    this.openEnd = openEnd;\n  }\n  _createClass(Slice, [{\n    key: \"size\",\n    get: function get() {\n      return this.content.size - this.openStart - this.openEnd;\n    }\n  }, {\n    key: \"insertAt\",\n    value: function insertAt(pos, fragment) {\n      var content = insertInto(this.content, pos + this.openStart, fragment, this.openStart + 1, this.openEnd + 1);\n      return content && new Slice(content, this.openStart, this.openEnd);\n    }\n  }, {\n    key: \"removeBetween\",\n    value: function removeBetween(from, to) {\n      return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      if (!this.content.size) return null;\n      var json = {\n        content: this.content.toJSON()\n      };\n      if (this.openStart > 0) json.openStart = this.openStart;\n      if (this.openEnd > 0) json.openEnd = this.openEnd;\n      return json;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (!json) return Slice.empty;\n      var openStart = json.openStart || 0,\n        openEnd = json.openEnd || 0;\n      if (typeof openStart != \"number\" || typeof openEnd != \"number\") throw new RangeError(\"Invalid input for Slice.fromJSON\");\n      return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n    }\n  }, {\n    key: \"maxOpen\",\n    value: function maxOpen(fragment) {\n      var openIsolating = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var openStart = 0,\n        openEnd = 0;\n      for (var n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild) openStart++;\n      for (var _n = fragment.lastChild; _n && !_n.isLeaf && (openIsolating || !_n.type.spec.isolating); _n = _n.lastChild) openEnd++;\n      return new Slice(fragment, openStart, openEnd);\n    }\n  }]);\n  return Slice;\n}();\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n  var _content$findIndex = content.findIndex(from),\n    index = _content$findIndex.index,\n    offset = _content$findIndex.offset,\n    child = content.maybeChild(index);\n  var _content$findIndex2 = content.findIndex(to),\n    indexTo = _content$findIndex2.index,\n    offsetTo = _content$findIndex2.offset;\n  if (offset == from || child.isText) {\n    if (offsetTo != to && !content.child(indexTo).isText) throw new RangeError(\"Removing non-flat range\");\n    return content.cut(0, from).append(content.cut(to));\n  }\n  if (index != indexTo) throw new RangeError(\"Removing non-flat range\");\n  return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, openStart, openEnd, parent) {\n  var _content$findIndex3 = content.findIndex(dist),\n    index = _content$findIndex3.index,\n    offset = _content$findIndex3.offset,\n    child = content.maybeChild(index);\n  if (offset == dist || child.isText) {\n    if (parent && openStart <= 0 && openEnd <= 0 && !parent.canReplace(index, index, insert)) return null;\n    return content.cut(0, dist).append(insert).append(content.cut(dist));\n  }\n  var inner = insertInto(child.content, dist - offset - 1, insert, index == 0 ? openStart - 1 : 0, index == content.childCount - 1 ? openEnd - 1 : 0, child);\n  return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction _replace($from, $to, slice) {\n  if (slice.openStart > $from.depth) throw new ReplaceError(\"Inserted content deeper than insertion position\");\n  if ($from.depth - slice.openStart != $to.depth - slice.openEnd) throw new ReplaceError(\"Inconsistent open depths\");\n  return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n  var index = $from.index(depth),\n    node = $from.node(depth);\n  if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n    var inner = replaceOuter($from, $to, slice, depth + 1);\n    return node.copy(node.content.replaceChild(index, inner));\n  } else if (!slice.content.size) {\n    return close(node, replaceTwoWay($from, $to, depth));\n  } else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) {\n    var parent = $from.parent,\n      content = parent.content;\n    return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n  } else {\n    var _prepareSliceForRepla = prepareSliceForReplace(slice, $from),\n      start = _prepareSliceForRepla.start,\n      end = _prepareSliceForRepla.end;\n    return close(node, replaceThreeWay($from, start, end, $to, depth));\n  }\n}\nfunction checkJoin(main, sub) {\n  if (!sub.type.compatibleContent(main.type)) throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n  var node = $before.node(depth);\n  checkJoin(node, $after.node(depth));\n  return node;\n}\nfunction addNode(child, target) {\n  var last = target.length - 1;\n  if (last >= 0 && child.isText && child.sameMarkup(target[last])) target[last] = child.withText(target[last].text + child.text);else target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n  var node = ($end || $start).node(depth);\n  var startIndex = 0,\n    endIndex = $end ? $end.index(depth) : node.childCount;\n  if ($start) {\n    startIndex = $start.index(depth);\n    if ($start.depth > depth) {\n      startIndex++;\n    } else if ($start.textOffset) {\n      addNode($start.nodeAfter, target);\n      startIndex++;\n    }\n  }\n  for (var i = startIndex; i < endIndex; i++) addNode(node.child(i), target);\n  if ($end && $end.depth == depth && $end.textOffset) addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n  if (!node.type.validContent(content)) throw new ReplaceError(\"Invalid content for node \" + node.type.name);\n  return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n  var openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n  var openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n  var content = [];\n  addRange(null, $from, depth, content);\n  if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n    checkJoin(openStart, openEnd);\n    addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n  } else {\n    if (openStart) addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n    addRange($start, $end, depth, content);\n    if (openEnd) addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n  }\n  addRange($to, null, depth, content);\n  return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n  var content = [];\n  addRange(null, $from, depth, content);\n  if ($from.depth > depth) {\n    var type = joinable($from, $to, depth + 1);\n    addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n  }\n  addRange($to, null, depth, content);\n  return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n  var extra = $along.depth - slice.openStart,\n    parent = $along.node(extra);\n  var node = parent.copy(slice.content);\n  for (var i = extra - 1; i >= 0; i--) node = $along.node(i).copy(Fragment.from(node));\n  return {\n    start: node.resolveNoCache(slice.openStart + extra),\n    end: node.resolveNoCache(node.content.size - slice.openEnd - extra)\n  };\n}\nvar ResolvedPos = function () {\n  function ResolvedPos(pos, path, parentOffset) {\n    _classCallCheck(this, ResolvedPos);\n    this.pos = pos;\n    this.path = path;\n    this.parentOffset = parentOffset;\n    this.depth = path.length / 3 - 1;\n  }\n  _createClass(ResolvedPos, [{\n    key: \"resolveDepth\",\n    value: function resolveDepth(val) {\n      if (val == null) return this.depth;\n      if (val < 0) return this.depth + val;\n      return val;\n    }\n  }, {\n    key: \"parent\",\n    get: function get() {\n      return this.node(this.depth);\n    }\n  }, {\n    key: \"doc\",\n    get: function get() {\n      return this.node(0);\n    }\n  }, {\n    key: \"node\",\n    value: function node(depth) {\n      return this.path[this.resolveDepth(depth) * 3];\n    }\n  }, {\n    key: \"index\",\n    value: function index(depth) {\n      return this.path[this.resolveDepth(depth) * 3 + 1];\n    }\n  }, {\n    key: \"indexAfter\",\n    value: function indexAfter(depth) {\n      depth = this.resolveDepth(depth);\n      return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n    }\n  }, {\n    key: \"start\",\n    value: function start(depth) {\n      depth = this.resolveDepth(depth);\n      return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n    }\n  }, {\n    key: \"end\",\n    value: function end(depth) {\n      depth = this.resolveDepth(depth);\n      return this.start(depth) + this.node(depth).content.size;\n    }\n  }, {\n    key: \"before\",\n    value: function before(depth) {\n      depth = this.resolveDepth(depth);\n      if (!depth) throw new RangeError(\"There is no position before the top-level node\");\n      return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n    }\n  }, {\n    key: \"after\",\n    value: function after(depth) {\n      depth = this.resolveDepth(depth);\n      if (!depth) throw new RangeError(\"There is no position after the top-level node\");\n      return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n    }\n  }, {\n    key: \"textOffset\",\n    get: function get() {\n      return this.pos - this.path[this.path.length - 1];\n    }\n  }, {\n    key: \"nodeAfter\",\n    get: function get() {\n      var parent = this.parent,\n        index = this.index(this.depth);\n      if (index == parent.childCount) return null;\n      var dOff = this.pos - this.path[this.path.length - 1],\n        child = parent.child(index);\n      return dOff ? parent.child(index).cut(dOff) : child;\n    }\n  }, {\n    key: \"nodeBefore\",\n    get: function get() {\n      var index = this.index(this.depth);\n      var dOff = this.pos - this.path[this.path.length - 1];\n      if (dOff) return this.parent.child(index).cut(0, dOff);\n      return index == 0 ? null : this.parent.child(index - 1);\n    }\n  }, {\n    key: \"posAtIndex\",\n    value: function posAtIndex(index, depth) {\n      depth = this.resolveDepth(depth);\n      var node = this.path[depth * 3],\n        pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n      for (var i = 0; i < index; i++) pos += node.child(i).nodeSize;\n      return pos;\n    }\n  }, {\n    key: \"marks\",\n    value: function marks() {\n      var parent = this.parent,\n        index = this.index();\n      if (parent.content.size == 0) return Mark.none;\n      if (this.textOffset) return parent.child(index).marks;\n      var main = parent.maybeChild(index - 1),\n        other = parent.maybeChild(index);\n      if (!main) {\n        var tmp = main;\n        main = other;\n        other = tmp;\n      }\n      var marks = main.marks;\n      for (var i = 0; i < marks.length; i++) if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks))) marks = marks[i--].removeFromSet(marks);\n      return marks;\n    }\n  }, {\n    key: \"marksAcross\",\n    value: function marksAcross($end) {\n      var after = this.parent.maybeChild(this.index());\n      if (!after || !after.isInline) return null;\n      var marks = after.marks,\n        next = $end.parent.maybeChild($end.index());\n      for (var i = 0; i < marks.length; i++) if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks))) marks = marks[i--].removeFromSet(marks);\n      return marks;\n    }\n  }, {\n    key: \"sharedDepth\",\n    value: function sharedDepth(pos) {\n      for (var depth = this.depth; depth > 0; depth--) if (this.start(depth) <= pos && this.end(depth) >= pos) return depth;\n      return 0;\n    }\n  }, {\n    key: \"blockRange\",\n    value: function blockRange() {\n      var other = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this;\n      var pred = arguments.length > 1 ? arguments[1] : undefined;\n      if (other.pos < this.pos) return other.blockRange(this);\n      for (var d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--) if (other.pos <= this.end(d) && (!pred || pred(this.node(d)))) return new NodeRange(this, other, d);\n      return null;\n    }\n  }, {\n    key: \"sameParent\",\n    value: function sameParent(other) {\n      return this.pos - this.parentOffset == other.pos - other.parentOffset;\n    }\n  }, {\n    key: \"max\",\n    value: function max(other) {\n      return other.pos > this.pos ? other : this;\n    }\n  }, {\n    key: \"min\",\n    value: function min(other) {\n      return other.pos < this.pos ? other : this;\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var str = \"\";\n      for (var i = 1; i <= this.depth; i++) str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n      return str + \":\" + this.parentOffset;\n    }\n  }], [{\n    key: \"resolve\",\n    value: function resolve(doc, pos) {\n      if (!(pos >= 0 && pos <= doc.content.size)) throw new RangeError(\"Position \" + pos + \" out of range\");\n      var path = [];\n      var start = 0,\n        parentOffset = pos;\n      for (var node = doc;;) {\n        var _node$content$findInd = node.content.findIndex(parentOffset),\n          index = _node$content$findInd.index,\n          offset = _node$content$findInd.offset;\n        var rem = parentOffset - offset;\n        path.push(node, index, start + offset);\n        if (!rem) break;\n        node = node.child(index);\n        if (node.isText) break;\n        parentOffset = rem - 1;\n        start += offset + 1;\n      }\n      return new ResolvedPos(pos, path, parentOffset);\n    }\n  }, {\n    key: \"resolveCached\",\n    value: function resolveCached(doc, pos) {\n      var cache = resolveCache.get(doc);\n      if (cache) {\n        for (var i = 0; i < cache.elts.length; i++) {\n          var elt = cache.elts[i];\n          if (elt.pos == pos) return elt;\n        }\n      } else {\n        resolveCache.set(doc, cache = new ResolveCache());\n      }\n      var result = cache.elts[cache.i] = ResolvedPos.resolve(doc, pos);\n      cache.i = (cache.i + 1) % resolveCacheSize;\n      return result;\n    }\n  }]);\n  return ResolvedPos;\n}();\nvar ResolveCache = _createClass(function ResolveCache() {\n  _classCallCheck(this, ResolveCache);\n  this.elts = [];\n  this.i = 0;\n});\nvar resolveCacheSize = 12,\n  resolveCache = new WeakMap();\nvar NodeRange = function () {\n  function NodeRange($from, $to, depth) {\n    _classCallCheck(this, NodeRange);\n    this.$from = $from;\n    this.$to = $to;\n    this.depth = depth;\n  }\n  _createClass(NodeRange, [{\n    key: \"start\",\n    get: function get() {\n      return this.$from.before(this.depth + 1);\n    }\n  }, {\n    key: \"end\",\n    get: function get() {\n      return this.$to.after(this.depth + 1);\n    }\n  }, {\n    key: \"parent\",\n    get: function get() {\n      return this.$from.node(this.depth);\n    }\n  }, {\n    key: \"startIndex\",\n    get: function get() {\n      return this.$from.index(this.depth);\n    }\n  }, {\n    key: \"endIndex\",\n    get: function get() {\n      return this.$to.indexAfter(this.depth);\n    }\n  }]);\n  return NodeRange;\n}();\nvar emptyAttrs = Object.create(null);\nvar Node = function () {\n  function Node(type, attrs, content) {\n    var marks = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Mark.none;\n    _classCallCheck(this, Node);\n    this.type = type;\n    this.attrs = attrs;\n    this.marks = marks;\n    this.content = content || Fragment.empty;\n  }\n  _createClass(Node, [{\n    key: \"children\",\n    get: function get() {\n      return this.content.content;\n    }\n  }, {\n    key: \"nodeSize\",\n    get: function get() {\n      return this.isLeaf ? 1 : 2 + this.content.size;\n    }\n  }, {\n    key: \"childCount\",\n    get: function get() {\n      return this.content.childCount;\n    }\n  }, {\n    key: \"child\",\n    value: function child(index) {\n      return this.content.child(index);\n    }\n  }, {\n    key: \"maybeChild\",\n    value: function maybeChild(index) {\n      return this.content.maybeChild(index);\n    }\n  }, {\n    key: \"forEach\",\n    value: function forEach(f) {\n      this.content.forEach(f);\n    }\n  }, {\n    key: \"nodesBetween\",\n    value: function nodesBetween(from, to, f) {\n      var startPos = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      this.content.nodesBetween(from, to, f, startPos, this);\n    }\n  }, {\n    key: \"descendants\",\n    value: function descendants(f) {\n      this.nodesBetween(0, this.content.size, f);\n    }\n  }, {\n    key: \"textContent\",\n    get: function get() {\n      return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, \"\");\n    }\n  }, {\n    key: \"textBetween\",\n    value: function textBetween(from, to, blockSeparator, leafText) {\n      return this.content.textBetween(from, to, blockSeparator, leafText);\n    }\n  }, {\n    key: \"firstChild\",\n    get: function get() {\n      return this.content.firstChild;\n    }\n  }, {\n    key: \"lastChild\",\n    get: function get() {\n      return this.content.lastChild;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this == other || this.sameMarkup(other) && this.content.eq(other.content);\n    }\n  }, {\n    key: \"sameMarkup\",\n    value: function sameMarkup(other) {\n      return this.hasMarkup(other.type, other.attrs, other.marks);\n    }\n  }, {\n    key: \"hasMarkup\",\n    value: function hasMarkup(type, attrs, marks) {\n      return this.type == type && compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) && Mark.sameSet(this.marks, marks || Mark.none);\n    }\n  }, {\n    key: \"copy\",\n    value: function copy() {\n      var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (content == this.content) return this;\n      return new Node(this.type, this.attrs, content, this.marks);\n    }\n  }, {\n    key: \"mark\",\n    value: function mark(marks) {\n      return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n    }\n  }, {\n    key: \"cut\",\n    value: function cut(from) {\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.content.size;\n      if (from == 0 && to == this.content.size) return this;\n      return this.copy(this.content.cut(from, to));\n    }\n  }, {\n    key: \"slice\",\n    value: function slice(from) {\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.content.size;\n      var includeParents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      if (from == to) return Slice.empty;\n      var $from = this.resolve(from),\n        $to = this.resolve(to);\n      var depth = includeParents ? 0 : $from.sharedDepth(to);\n      var start = $from.start(depth),\n        node = $from.node(depth);\n      var content = node.content.cut($from.pos - start, $to.pos - start);\n      return new Slice(content, $from.depth - depth, $to.depth - depth);\n    }\n  }, {\n    key: \"replace\",\n    value: function replace(from, to, slice) {\n      return _replace(this.resolve(from), this.resolve(to), slice);\n    }\n  }, {\n    key: \"nodeAt\",\n    value: function nodeAt(pos) {\n      for (var node = this;;) {\n        var _node$content$findInd2 = node.content.findIndex(pos),\n          index = _node$content$findInd2.index,\n          offset = _node$content$findInd2.offset;\n        node = node.maybeChild(index);\n        if (!node) return null;\n        if (offset == pos || node.isText) return node;\n        pos -= offset + 1;\n      }\n    }\n  }, {\n    key: \"childAfter\",\n    value: function childAfter(pos) {\n      var _this$content$findInd = this.content.findIndex(pos),\n        index = _this$content$findInd.index,\n        offset = _this$content$findInd.offset;\n      return {\n        node: this.content.maybeChild(index),\n        index: index,\n        offset: offset\n      };\n    }\n  }, {\n    key: \"childBefore\",\n    value: function childBefore(pos) {\n      if (pos == 0) return {\n        node: null,\n        index: 0,\n        offset: 0\n      };\n      var _this$content$findInd2 = this.content.findIndex(pos),\n        index = _this$content$findInd2.index,\n        offset = _this$content$findInd2.offset;\n      if (offset < pos) return {\n        node: this.content.child(index),\n        index: index,\n        offset: offset\n      };\n      var node = this.content.child(index - 1);\n      return {\n        node: node,\n        index: index - 1,\n        offset: offset - node.nodeSize\n      };\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(pos) {\n      return ResolvedPos.resolveCached(this, pos);\n    }\n  }, {\n    key: \"resolveNoCache\",\n    value: function resolveNoCache(pos) {\n      return ResolvedPos.resolve(this, pos);\n    }\n  }, {\n    key: \"rangeHasMark\",\n    value: function rangeHasMark(from, to, type) {\n      var found = false;\n      if (to > from) this.nodesBetween(from, to, function (node) {\n        if (type.isInSet(node.marks)) found = true;\n        return !found;\n      });\n      return found;\n    }\n  }, {\n    key: \"isBlock\",\n    get: function get() {\n      return this.type.isBlock;\n    }\n  }, {\n    key: \"isTextblock\",\n    get: function get() {\n      return this.type.isTextblock;\n    }\n  }, {\n    key: \"inlineContent\",\n    get: function get() {\n      return this.type.inlineContent;\n    }\n  }, {\n    key: \"isInline\",\n    get: function get() {\n      return this.type.isInline;\n    }\n  }, {\n    key: \"isText\",\n    get: function get() {\n      return this.type.isText;\n    }\n  }, {\n    key: \"isLeaf\",\n    get: function get() {\n      return this.type.isLeaf;\n    }\n  }, {\n    key: \"isAtom\",\n    get: function get() {\n      return this.type.isAtom;\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this);\n      var name = this.type.name;\n      if (this.content.size) name += \"(\" + this.content.toStringInner() + \")\";\n      return wrapMarks(this.marks, name);\n    }\n  }, {\n    key: \"contentMatchAt\",\n    value: function contentMatchAt(index) {\n      var match = this.type.contentMatch.matchFragment(this.content, 0, index);\n      if (!match) throw new Error(\"Called contentMatchAt on a node with invalid content\");\n      return match;\n    }\n  }, {\n    key: \"canReplace\",\n    value: function canReplace(from, to) {\n      var replacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Fragment.empty;\n      var start = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var end = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : replacement.childCount;\n      var one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n      var two = one && one.matchFragment(this.content, to);\n      if (!two || !two.validEnd) return false;\n      for (var i = start; i < end; i++) if (!this.type.allowsMarks(replacement.child(i).marks)) return false;\n      return true;\n    }\n  }, {\n    key: \"canReplaceWith\",\n    value: function canReplaceWith(from, to, type, marks) {\n      if (marks && !this.type.allowsMarks(marks)) return false;\n      var start = this.contentMatchAt(from).matchType(type);\n      var end = start && start.matchFragment(this.content, to);\n      return end ? end.validEnd : false;\n    }\n  }, {\n    key: \"canAppend\",\n    value: function canAppend(other) {\n      if (other.content.size) return this.canReplace(this.childCount, this.childCount, other.content);else return this.type.compatibleContent(other.type);\n    }\n  }, {\n    key: \"check\",\n    value: function check() {\n      this.type.checkContent(this.content);\n      this.type.checkAttrs(this.attrs);\n      var copy = Mark.none;\n      for (var i = 0; i < this.marks.length; i++) {\n        var mark = this.marks[i];\n        mark.type.checkAttrs(mark.attrs);\n        copy = mark.addToSet(copy);\n      }\n      if (!Mark.sameSet(copy, this.marks)) throw new RangeError(\"Invalid collection of marks for node \".concat(this.type.name, \": \").concat(this.marks.map(function (m) {\n        return m.type.name;\n      })));\n      this.content.forEach(function (node) {\n        return node.check();\n      });\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var obj = {\n        type: this.type.name\n      };\n      for (var _ in this.attrs) {\n        obj.attrs = this.attrs;\n        break;\n      }\n      if (this.content.size) obj.content = this.content.toJSON();\n      if (this.marks.length) obj.marks = this.marks.map(function (n) {\n        return n.toJSON();\n      });\n      return obj;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (!json) throw new RangeError(\"Invalid input for Node.fromJSON\");\n      var marks = undefined;\n      if (json.marks) {\n        if (!Array.isArray(json.marks)) throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n        marks = json.marks.map(schema.markFromJSON);\n      }\n      if (json.type == \"text\") {\n        if (typeof json.text != \"string\") throw new RangeError(\"Invalid text node in JSON\");\n        return schema.text(json.text, marks);\n      }\n      var content = Fragment.fromJSON(schema, json.content);\n      var node = schema.nodeType(json.type).create(json.attrs, content, marks);\n      node.type.checkAttrs(node.attrs);\n      return node;\n    }\n  }]);\n  return Node;\n}();\nNode.prototype.text = undefined;\nvar TextNode = function (_Node) {\n  _inherits(TextNode, _Node);\n  var _super2 = _createSuper(TextNode);\n  function TextNode(type, attrs, content, marks) {\n    var _this;\n    _classCallCheck(this, TextNode);\n    _this = _super2.call(this, type, attrs, null, marks);\n    if (!content) throw new RangeError(\"Empty text nodes are not allowed\");\n    _this.text = content;\n    return _this;\n  }\n  _createClass(TextNode, [{\n    key: \"toString\",\n    value: function toString() {\n      if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this);\n      return wrapMarks(this.marks, JSON.stringify(this.text));\n    }\n  }, {\n    key: \"textContent\",\n    get: function get() {\n      return this.text;\n    }\n  }, {\n    key: \"textBetween\",\n    value: function textBetween(from, to) {\n      return this.text.slice(from, to);\n    }\n  }, {\n    key: \"nodeSize\",\n    get: function get() {\n      return this.text.length;\n    }\n  }, {\n    key: \"mark\",\n    value: function mark(marks) {\n      return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n    }\n  }, {\n    key: \"withText\",\n    value: function withText(text) {\n      if (text == this.text) return this;\n      return new TextNode(this.type, this.attrs, text, this.marks);\n    }\n  }, {\n    key: \"cut\",\n    value: function cut() {\n      var from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.text.length;\n      if (from == 0 && to == this.text.length) return this;\n      return this.withText(this.text.slice(from, to));\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this.sameMarkup(other) && this.text == other.text;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var base = _get(_getPrototypeOf(TextNode.prototype), \"toJSON\", this).call(this);\n      base.text = this.text;\n      return base;\n    }\n  }]);\n  return TextNode;\n}(Node);\nfunction wrapMarks(marks, str) {\n  for (var i = marks.length - 1; i >= 0; i--) str = marks[i].type.name + \"(\" + str + \")\";\n  return str;\n}\nvar ContentMatch = function () {\n  function ContentMatch(validEnd) {\n    _classCallCheck(this, ContentMatch);\n    this.validEnd = validEnd;\n    this.next = [];\n    this.wrapCache = [];\n  }\n  _createClass(ContentMatch, [{\n    key: \"matchType\",\n    value: function matchType(type) {\n      for (var i = 0; i < this.next.length; i++) if (this.next[i].type == type) return this.next[i].next;\n      return null;\n    }\n  }, {\n    key: \"matchFragment\",\n    value: function matchFragment(frag) {\n      var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : frag.childCount;\n      var cur = this;\n      for (var i = start; cur && i < end; i++) cur = cur.matchType(frag.child(i).type);\n      return cur;\n    }\n  }, {\n    key: \"inlineContent\",\n    get: function get() {\n      return this.next.length != 0 && this.next[0].type.isInline;\n    }\n  }, {\n    key: \"defaultType\",\n    get: function get() {\n      for (var i = 0; i < this.next.length; i++) {\n        var type = this.next[i].type;\n        if (!(type.isText || type.hasRequiredAttrs())) return type;\n      }\n      return null;\n    }\n  }, {\n    key: \"compatible\",\n    value: function compatible(other) {\n      for (var i = 0; i < this.next.length; i++) for (var j = 0; j < other.next.length; j++) if (this.next[i].type == other.next[j].type) return true;\n      return false;\n    }\n  }, {\n    key: \"fillBefore\",\n    value: function fillBefore(after) {\n      var toEnd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      var seen = [this];\n      function search(match, types) {\n        var finished = match.matchFragment(after, startIndex);\n        if (finished && (!toEnd || finished.validEnd)) return Fragment.from(types.map(function (tp) {\n          return tp.createAndFill();\n        }));\n        for (var i = 0; i < match.next.length; i++) {\n          var _match$next$i = match.next[i],\n            type = _match$next$i.type,\n            next = _match$next$i.next;\n          if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n            seen.push(next);\n            var _found = search(next, types.concat(type));\n            if (_found) return _found;\n          }\n        }\n        return null;\n      }\n      return search(this, []);\n    }\n  }, {\n    key: \"findWrapping\",\n    value: function findWrapping(target) {\n      for (var i = 0; i < this.wrapCache.length; i += 2) if (this.wrapCache[i] == target) return this.wrapCache[i + 1];\n      var computed = this.computeWrapping(target);\n      this.wrapCache.push(target, computed);\n      return computed;\n    }\n  }, {\n    key: \"computeWrapping\",\n    value: function computeWrapping(target) {\n      var seen = Object.create(null),\n        active = [{\n          match: this,\n          type: null,\n          via: null\n        }];\n      while (active.length) {\n        var current = active.shift(),\n          match = current.match;\n        if (match.matchType(target)) {\n          var result = [];\n          for (var obj = current; obj.type; obj = obj.via) result.push(obj.type);\n          return result.reverse();\n        }\n        for (var i = 0; i < match.next.length; i++) {\n          var _match$next$i2 = match.next[i],\n            type = _match$next$i2.type,\n            next = _match$next$i2.next;\n          if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n            active.push({\n              match: type.contentMatch,\n              type: type,\n              via: current\n            });\n            seen[type.name] = true;\n          }\n        }\n      }\n      return null;\n    }\n  }, {\n    key: \"edgeCount\",\n    get: function get() {\n      return this.next.length;\n    }\n  }, {\n    key: \"edge\",\n    value: function edge(n) {\n      if (n >= this.next.length) throw new RangeError(\"There's no \".concat(n, \"th edge in this content match\"));\n      return this.next[n];\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var seen = [];\n      function scan(m) {\n        seen.push(m);\n        for (var i = 0; i < m.next.length; i++) if (seen.indexOf(m.next[i].next) == -1) scan(m.next[i].next);\n      }\n      scan(this);\n      return seen.map(function (m, i) {\n        var out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n        for (var _i = 0; _i < m.next.length; _i++) out += (_i ? \", \" : \"\") + m.next[_i].type.name + \"->\" + seen.indexOf(m.next[_i].next);\n        return out;\n      }).join(\"\\n\");\n    }\n  }], [{\n    key: \"parse\",\n    value: function parse(string, nodeTypes) {\n      var stream = new TokenStream(string, nodeTypes);\n      if (stream.next == null) return ContentMatch.empty;\n      var expr = parseExpr(stream);\n      if (stream.next) stream.err(\"Unexpected trailing text\");\n      var match = dfa(nfa(expr));\n      checkForDeadEnds(match, stream);\n      return match;\n    }\n  }]);\n  return ContentMatch;\n}();\nContentMatch.empty = new ContentMatch(true);\nvar TokenStream = function () {\n  function TokenStream(string, nodeTypes) {\n    _classCallCheck(this, TokenStream);\n    this.string = string;\n    this.nodeTypes = nodeTypes;\n    this.inline = null;\n    this.pos = 0;\n    this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n    if (this.tokens[this.tokens.length - 1] == \"\") this.tokens.pop();\n    if (this.tokens[0] == \"\") this.tokens.shift();\n  }\n  _createClass(TokenStream, [{\n    key: \"next\",\n    get: function get() {\n      return this.tokens[this.pos];\n    }\n  }, {\n    key: \"eat\",\n    value: function eat(tok) {\n      return this.next == tok && (this.pos++ || true);\n    }\n  }, {\n    key: \"err\",\n    value: function err(str) {\n      throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\");\n    }\n  }]);\n  return TokenStream;\n}();\nfunction parseExpr(stream) {\n  var exprs = [];\n  do {\n    exprs.push(parseExprSeq(stream));\n  } while (stream.eat(\"|\"));\n  return exprs.length == 1 ? exprs[0] : {\n    type: \"choice\",\n    exprs: exprs\n  };\n}\nfunction parseExprSeq(stream) {\n  var exprs = [];\n  do {\n    exprs.push(parseExprSubscript(stream));\n  } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n  return exprs.length == 1 ? exprs[0] : {\n    type: \"seq\",\n    exprs: exprs\n  };\n}\nfunction parseExprSubscript(stream) {\n  var expr = parseExprAtom(stream);\n  for (;;) {\n    if (stream.eat(\"+\")) expr = {\n      type: \"plus\",\n      expr: expr\n    };else if (stream.eat(\"*\")) expr = {\n      type: \"star\",\n      expr: expr\n    };else if (stream.eat(\"?\")) expr = {\n      type: \"opt\",\n      expr: expr\n    };else if (stream.eat(\"{\")) expr = parseExprRange(stream, expr);else break;\n  }\n  return expr;\n}\nfunction parseNum(stream) {\n  if (/\\D/.test(stream.next)) stream.err(\"Expected number, got '\" + stream.next + \"'\");\n  var result = Number(stream.next);\n  stream.pos++;\n  return result;\n}\nfunction parseExprRange(stream, expr) {\n  var min = parseNum(stream),\n    max = min;\n  if (stream.eat(\",\")) {\n    if (stream.next != \"}\") max = parseNum(stream);else max = -1;\n  }\n  if (!stream.eat(\"}\")) stream.err(\"Unclosed braced range\");\n  return {\n    type: \"range\",\n    min: min,\n    max: max,\n    expr: expr\n  };\n}\nfunction resolveName(stream, name) {\n  var types = stream.nodeTypes,\n    type = types[name];\n  if (type) return [type];\n  var result = [];\n  for (var typeName in types) {\n    var _type = types[typeName];\n    if (_type.isInGroup(name)) result.push(_type);\n  }\n  if (result.length == 0) stream.err(\"No node type or group '\" + name + \"' found\");\n  return result;\n}\nfunction parseExprAtom(stream) {\n  if (stream.eat(\"(\")) {\n    var expr = parseExpr(stream);\n    if (!stream.eat(\")\")) stream.err(\"Missing closing paren\");\n    return expr;\n  } else if (!/\\W/.test(stream.next)) {\n    var exprs = resolveName(stream, stream.next).map(function (type) {\n      if (stream.inline == null) stream.inline = type.isInline;else if (stream.inline != type.isInline) stream.err(\"Mixing inline and block content\");\n      return {\n        type: \"name\",\n        value: type\n      };\n    });\n    stream.pos++;\n    return exprs.length == 1 ? exprs[0] : {\n      type: \"choice\",\n      exprs: exprs\n    };\n  } else {\n    stream.err(\"Unexpected token '\" + stream.next + \"'\");\n  }\n}\nfunction nfa(expr) {\n  var nfa = [[]];\n  connect(compile(expr, 0), node());\n  return nfa;\n  function node() {\n    return nfa.push([]) - 1;\n  }\n  function edge(from, to, term) {\n    var edge = {\n      term: term,\n      to: to\n    };\n    nfa[from].push(edge);\n    return edge;\n  }\n  function connect(edges, to) {\n    edges.forEach(function (edge) {\n      return edge.to = to;\n    });\n  }\n  function compile(expr, from) {\n    if (expr.type == \"choice\") {\n      return expr.exprs.reduce(function (out, expr) {\n        return out.concat(compile(expr, from));\n      }, []);\n    } else if (expr.type == \"seq\") {\n      for (var i = 0;; i++) {\n        var next = compile(expr.exprs[i], from);\n        if (i == expr.exprs.length - 1) return next;\n        connect(next, from = node());\n      }\n    } else if (expr.type == \"star\") {\n      var loop = node();\n      edge(from, loop);\n      connect(compile(expr.expr, loop), loop);\n      return [edge(loop)];\n    } else if (expr.type == \"plus\") {\n      var _loop = node();\n      connect(compile(expr.expr, from), _loop);\n      connect(compile(expr.expr, _loop), _loop);\n      return [edge(_loop)];\n    } else if (expr.type == \"opt\") {\n      return [edge(from)].concat(compile(expr.expr, from));\n    } else if (expr.type == \"range\") {\n      var cur = from;\n      for (var _i2 = 0; _i2 < expr.min; _i2++) {\n        var _next = node();\n        connect(compile(expr.expr, cur), _next);\n        cur = _next;\n      }\n      if (expr.max == -1) {\n        connect(compile(expr.expr, cur), cur);\n      } else {\n        for (var _i3 = expr.min; _i3 < expr.max; _i3++) {\n          var _next2 = node();\n          edge(cur, _next2);\n          connect(compile(expr.expr, cur), _next2);\n          cur = _next2;\n        }\n      }\n      return [edge(cur)];\n    } else if (expr.type == \"name\") {\n      return [edge(from, undefined, expr.value)];\n    } else {\n      throw new Error(\"Unknown expr type\");\n    }\n  }\n}\nfunction cmp(a, b) {\n  return b - a;\n}\nfunction nullFrom(nfa, node) {\n  var result = [];\n  scan(node);\n  return result.sort(cmp);\n  function scan(node) {\n    var edges = nfa[node];\n    if (edges.length == 1 && !edges[0].term) return scan(edges[0].to);\n    result.push(node);\n    for (var i = 0; i < edges.length; i++) {\n      var _edges$i = edges[i],\n        term = _edges$i.term,\n        to = _edges$i.to;\n      if (!term && result.indexOf(to) == -1) scan(to);\n    }\n  }\n}\nfunction dfa(nfa) {\n  var labeled = Object.create(null);\n  return explore(nullFrom(nfa, 0));\n  function explore(states) {\n    var out = [];\n    states.forEach(function (node) {\n      nfa[node].forEach(function (_ref) {\n        var term = _ref.term,\n          to = _ref.to;\n        if (!term) return;\n        var set;\n        for (var i = 0; i < out.length; i++) if (out[i][0] == term) set = out[i][1];\n        nullFrom(nfa, to).forEach(function (node) {\n          if (!set) out.push([term, set = []]);\n          if (set.indexOf(node) == -1) set.push(node);\n        });\n      });\n    });\n    var state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n    for (var i = 0; i < out.length; i++) {\n      var _states = out[i][1].sort(cmp);\n      state.next.push({\n        type: out[i][0],\n        next: labeled[_states.join(\",\")] || explore(_states)\n      });\n    }\n    return state;\n  }\n}\nfunction checkForDeadEnds(match, stream) {\n  for (var i = 0, work = [match]; i < work.length; i++) {\n    var state = work[i],\n      dead = !state.validEnd,\n      nodes = [];\n    for (var j = 0; j < state.next.length; j++) {\n      var _state$next$j = state.next[j],\n        type = _state$next$j.type,\n        next = _state$next$j.next;\n      nodes.push(type.name);\n      if (dead && !(type.isText || type.hasRequiredAttrs())) dead = false;\n      if (work.indexOf(next) == -1) work.push(next);\n    }\n    if (dead) stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n  }\n}\nfunction defaultAttrs(attrs) {\n  var defaults = Object.create(null);\n  for (var attrName in attrs) {\n    var attr = attrs[attrName];\n    if (!attr.hasDefault) return null;\n    defaults[attrName] = attr[\"default\"];\n  }\n  return defaults;\n}\nfunction _computeAttrs(attrs, value) {\n  var built = Object.create(null);\n  for (var name in attrs) {\n    var given = value && value[name];\n    if (given === undefined) {\n      var attr = attrs[name];\n      if (attr.hasDefault) given = attr[\"default\"];else throw new RangeError(\"No value supplied for attribute \" + name);\n    }\n    built[name] = given;\n  }\n  return built;\n}\nfunction _checkAttrs(attrs, values, type, name) {\n  for (var attr in values) if (!(attr in attrs)) throw new RangeError(\"Unsupported attribute \".concat(attr, \" for \").concat(type, \" of type \").concat(name));\n  for (var _attr in attrs) {\n    if (attrs[_attr].validate) attrs[_attr].validate(values[_attr]);\n  }\n}\nfunction initAttrs(typeName, attrs) {\n  var result = Object.create(null);\n  if (attrs) for (var name in attrs) result[name] = new Attribute(typeName, name, attrs[name]);\n  return result;\n}\nvar NodeType = function () {\n  function NodeType(name, schema, spec) {\n    _classCallCheck(this, NodeType);\n    this.name = name;\n    this.schema = schema;\n    this.spec = spec;\n    this.markSet = null;\n    this.groups = spec.group ? spec.group.split(\" \") : [];\n    this.attrs = initAttrs(name, spec.attrs);\n    this.defaultAttrs = defaultAttrs(this.attrs);\n    this.contentMatch = null;\n    this.inlineContent = null;\n    this.isBlock = !(spec.inline || name == \"text\");\n    this.isText = name == \"text\";\n  }\n  _createClass(NodeType, [{\n    key: \"isInline\",\n    get: function get() {\n      return !this.isBlock;\n    }\n  }, {\n    key: \"isTextblock\",\n    get: function get() {\n      return this.isBlock && this.inlineContent;\n    }\n  }, {\n    key: \"isLeaf\",\n    get: function get() {\n      return this.contentMatch == ContentMatch.empty;\n    }\n  }, {\n    key: \"isAtom\",\n    get: function get() {\n      return this.isLeaf || !!this.spec.atom;\n    }\n  }, {\n    key: \"isInGroup\",\n    value: function isInGroup(group) {\n      return this.groups.indexOf(group) > -1;\n    }\n  }, {\n    key: \"whitespace\",\n    get: function get() {\n      return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n    }\n  }, {\n    key: \"hasRequiredAttrs\",\n    value: function hasRequiredAttrs() {\n      for (var n in this.attrs) if (this.attrs[n].isRequired) return true;\n      return false;\n    }\n  }, {\n    key: \"compatibleContent\",\n    value: function compatibleContent(other) {\n      return this == other || this.contentMatch.compatible(other.contentMatch);\n    }\n  }, {\n    key: \"computeAttrs\",\n    value: function computeAttrs(attrs) {\n      if (!attrs && this.defaultAttrs) return this.defaultAttrs;else return _computeAttrs(this.attrs, attrs);\n    }\n  }, {\n    key: \"create\",\n    value: function create() {\n      var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var content = arguments.length > 1 ? arguments[1] : undefined;\n      var marks = arguments.length > 2 ? arguments[2] : undefined;\n      if (this.isText) throw new Error(\"NodeType.create can't construct text nodes\");\n      return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n    }\n  }, {\n    key: \"createChecked\",\n    value: function createChecked() {\n      var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var content = arguments.length > 1 ? arguments[1] : undefined;\n      var marks = arguments.length > 2 ? arguments[2] : undefined;\n      content = Fragment.from(content);\n      this.checkContent(content);\n      return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n    }\n  }, {\n    key: \"createAndFill\",\n    value: function createAndFill() {\n      var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var content = arguments.length > 1 ? arguments[1] : undefined;\n      var marks = arguments.length > 2 ? arguments[2] : undefined;\n      attrs = this.computeAttrs(attrs);\n      content = Fragment.from(content);\n      if (content.size) {\n        var before = this.contentMatch.fillBefore(content);\n        if (!before) return null;\n        content = before.append(content);\n      }\n      var matched = this.contentMatch.matchFragment(content);\n      var after = matched && matched.fillBefore(Fragment.empty, true);\n      if (!after) return null;\n      return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n    }\n  }, {\n    key: \"validContent\",\n    value: function validContent(content) {\n      var result = this.contentMatch.matchFragment(content);\n      if (!result || !result.validEnd) return false;\n      for (var i = 0; i < content.childCount; i++) if (!this.allowsMarks(content.child(i).marks)) return false;\n      return true;\n    }\n  }, {\n    key: \"checkContent\",\n    value: function checkContent(content) {\n      if (!this.validContent(content)) throw new RangeError(\"Invalid content for node \".concat(this.name, \": \").concat(content.toString().slice(0, 50)));\n    }\n  }, {\n    key: \"checkAttrs\",\n    value: function checkAttrs(attrs) {\n      _checkAttrs(this.attrs, attrs, \"node\", this.name);\n    }\n  }, {\n    key: \"allowsMarkType\",\n    value: function allowsMarkType(markType) {\n      return this.markSet == null || this.markSet.indexOf(markType) > -1;\n    }\n  }, {\n    key: \"allowsMarks\",\n    value: function allowsMarks(marks) {\n      if (this.markSet == null) return true;\n      for (var i = 0; i < marks.length; i++) if (!this.allowsMarkType(marks[i].type)) return false;\n      return true;\n    }\n  }, {\n    key: \"allowedMarks\",\n    value: function allowedMarks(marks) {\n      if (this.markSet == null) return marks;\n      var copy;\n      for (var i = 0; i < marks.length; i++) {\n        if (!this.allowsMarkType(marks[i].type)) {\n          if (!copy) copy = marks.slice(0, i);\n        } else if (copy) {\n          copy.push(marks[i]);\n        }\n      }\n      return !copy ? marks : copy.length ? copy : Mark.none;\n    }\n  }], [{\n    key: \"compile\",\n    value: function compile(nodes, schema) {\n      var result = Object.create(null);\n      nodes.forEach(function (name, spec) {\n        return result[name] = new NodeType(name, schema, spec);\n      });\n      var topType = schema.spec.topNode || \"doc\";\n      if (!result[topType]) throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n      if (!result.text) throw new RangeError(\"Every schema needs a 'text' type\");\n      for (var _ in result.text.attrs) throw new RangeError(\"The text node type should not have attributes\");\n      return result;\n    }\n  }]);\n  return NodeType;\n}();\nfunction validateType(typeName, attrName, type) {\n  var types = type.split(\"|\");\n  return function (value) {\n    var name = value === null ? \"null\" : _typeof(value);\n    if (types.indexOf(name) < 0) throw new RangeError(\"Expected value of type \".concat(types, \" for attribute \").concat(attrName, \" on type \").concat(typeName, \", got \").concat(name));\n  };\n}\nvar Attribute = function () {\n  function Attribute(typeName, attrName, options) {\n    _classCallCheck(this, Attribute);\n    this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n    this[\"default\"] = options[\"default\"];\n    this.validate = typeof options.validate == \"string\" ? validateType(typeName, attrName, options.validate) : options.validate;\n  }\n  _createClass(Attribute, [{\n    key: \"isRequired\",\n    get: function get() {\n      return !this.hasDefault;\n    }\n  }]);\n  return Attribute;\n}();\nvar MarkType = function () {\n  function MarkType(name, rank, schema, spec) {\n    _classCallCheck(this, MarkType);\n    this.name = name;\n    this.rank = rank;\n    this.schema = schema;\n    this.spec = spec;\n    this.attrs = initAttrs(name, spec.attrs);\n    this.excluded = null;\n    var defaults = defaultAttrs(this.attrs);\n    this.instance = defaults ? new Mark(this, defaults) : null;\n  }\n  _createClass(MarkType, [{\n    key: \"create\",\n    value: function create() {\n      var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (!attrs && this.instance) return this.instance;\n      return new Mark(this, _computeAttrs(this.attrs, attrs));\n    }\n  }, {\n    key: \"removeFromSet\",\n    value: function removeFromSet(set) {\n      for (var i = 0; i < set.length; i++) if (set[i].type == this) {\n        set = set.slice(0, i).concat(set.slice(i + 1));\n        i--;\n      }\n      return set;\n    }\n  }, {\n    key: \"isInSet\",\n    value: function isInSet(set) {\n      for (var i = 0; i < set.length; i++) if (set[i].type == this) return set[i];\n    }\n  }, {\n    key: \"checkAttrs\",\n    value: function checkAttrs(attrs) {\n      _checkAttrs(this.attrs, attrs, \"mark\", this.name);\n    }\n  }, {\n    key: \"excludes\",\n    value: function excludes(other) {\n      return this.excluded.indexOf(other) > -1;\n    }\n  }], [{\n    key: \"compile\",\n    value: function compile(marks, schema) {\n      var result = Object.create(null),\n        rank = 0;\n      marks.forEach(function (name, spec) {\n        return result[name] = new MarkType(name, rank++, schema, spec);\n      });\n      return result;\n    }\n  }]);\n  return MarkType;\n}();\nvar Schema = function () {\n  function Schema(spec) {\n    var _this2 = this;\n    _classCallCheck(this, Schema);\n    this.linebreakReplacement = null;\n    this.cached = Object.create(null);\n    var instanceSpec = this.spec = {};\n    for (var prop in spec) instanceSpec[prop] = spec[prop];\n    instanceSpec.nodes = OrderedMap.from(spec.nodes), instanceSpec.marks = OrderedMap.from(spec.marks || {}), this.nodes = NodeType.compile(this.spec.nodes, this);\n    this.marks = MarkType.compile(this.spec.marks, this);\n    var contentExprCache = Object.create(null);\n    for (var _prop in this.nodes) {\n      if (_prop in this.marks) throw new RangeError(_prop + \" can not be both a node and a mark\");\n      var type = this.nodes[_prop],\n        contentExpr = type.spec.content || \"\",\n        markExpr = type.spec.marks;\n      type.contentMatch = contentExprCache[contentExpr] || (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n      type.inlineContent = type.contentMatch.inlineContent;\n      if (type.spec.linebreakReplacement) {\n        if (this.linebreakReplacement) throw new RangeError(\"Multiple linebreak nodes defined\");\n        if (!type.isInline || !type.isLeaf) throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");\n        this.linebreakReplacement = type;\n      }\n      type.markSet = markExpr == \"_\" ? null : markExpr ? gatherMarks(this, markExpr.split(\" \")) : markExpr == \"\" || !type.inlineContent ? [] : null;\n    }\n    for (var _prop2 in this.marks) {\n      var _type2 = this.marks[_prop2],\n        excl = _type2.spec.excludes;\n      _type2.excluded = excl == null ? [_type2] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n    }\n    this.nodeFromJSON = function (json) {\n      return Node.fromJSON(_this2, json);\n    };\n    this.markFromJSON = function (json) {\n      return Mark.fromJSON(_this2, json);\n    };\n    this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n    this.cached.wrappings = Object.create(null);\n  }\n  _createClass(Schema, [{\n    key: \"node\",\n    value: function node(type) {\n      var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var content = arguments.length > 2 ? arguments[2] : undefined;\n      var marks = arguments.length > 3 ? arguments[3] : undefined;\n      if (typeof type == \"string\") type = this.nodeType(type);else if (!(type instanceof NodeType)) throw new RangeError(\"Invalid node type: \" + type);else if (type.schema != this) throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n      return type.createChecked(attrs, content, marks);\n    }\n  }, {\n    key: \"text\",\n    value: function text(_text, marks) {\n      var type = this.nodes.text;\n      return new TextNode(type, type.defaultAttrs, _text, Mark.setFrom(marks));\n    }\n  }, {\n    key: \"mark\",\n    value: function mark(type, attrs) {\n      if (typeof type == \"string\") type = this.marks[type];\n      return type.create(attrs);\n    }\n  }, {\n    key: \"nodeType\",\n    value: function nodeType(name) {\n      var found = this.nodes[name];\n      if (!found) throw new RangeError(\"Unknown node type: \" + name);\n      return found;\n    }\n  }]);\n  return Schema;\n}();\nfunction gatherMarks(schema, marks) {\n  var found = [];\n  for (var i = 0; i < marks.length; i++) {\n    var name = marks[i],\n      mark = schema.marks[name],\n      ok = mark;\n    if (mark) {\n      found.push(mark);\n    } else {\n      for (var prop in schema.marks) {\n        var _mark = schema.marks[prop];\n        if (name == \"_\" || _mark.spec.group && _mark.spec.group.split(\" \").indexOf(name) > -1) found.push(ok = _mark);\n      }\n    }\n    if (!ok) throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n  }\n  return found;\n}\nfunction isTagRule(rule) {\n  return rule.tag != null;\n}\nfunction isStyleRule(rule) {\n  return rule.style != null;\n}\nvar DOMParser = function () {\n  function DOMParser(schema, rules) {\n    var _this3 = this;\n    _classCallCheck(this, DOMParser);\n    this.schema = schema;\n    this.rules = rules;\n    this.tags = [];\n    this.styles = [];\n    var matchedStyles = this.matchedStyles = [];\n    rules.forEach(function (rule) {\n      if (isTagRule(rule)) {\n        _this3.tags.push(rule);\n      } else if (isStyleRule(rule)) {\n        var prop = /[^=]*/.exec(rule.style)[0];\n        if (matchedStyles.indexOf(prop) < 0) matchedStyles.push(prop);\n        _this3.styles.push(rule);\n      }\n    });\n    this.normalizeLists = !this.tags.some(function (r) {\n      if (!/^(ul|ol)\\b/.test(r.tag) || !r.node) return false;\n      var node = schema.nodes[r.node];\n      return node.contentMatch.matchType(node);\n    });\n  }\n  _createClass(DOMParser, [{\n    key: \"parse\",\n    value: function parse(dom) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var context = new ParseContext(this, options, false);\n      context.addAll(dom, Mark.none, options.from, options.to);\n      return context.finish();\n    }\n  }, {\n    key: \"parseSlice\",\n    value: function parseSlice(dom) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var context = new ParseContext(this, options, true);\n      context.addAll(dom, Mark.none, options.from, options.to);\n      return Slice.maxOpen(context.finish());\n    }\n  }, {\n    key: \"matchTag\",\n    value: function matchTag(dom, context, after) {\n      for (var i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n        var rule = this.tags[i];\n        if (matches(dom, rule.tag) && (rule.namespace === undefined || dom.namespaceURI == rule.namespace) && (!rule.context || context.matchesContext(rule.context))) {\n          if (rule.getAttrs) {\n            var result = rule.getAttrs(dom);\n            if (result === false) continue;\n            rule.attrs = result || undefined;\n          }\n          return rule;\n        }\n      }\n    }\n  }, {\n    key: \"matchStyle\",\n    value: function matchStyle(prop, value, context, after) {\n      for (var i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n        var rule = this.styles[i],\n          style = rule.style;\n        if (style.indexOf(prop) != 0 || rule.context && !context.matchesContext(rule.context) || style.length > prop.length && (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value)) continue;\n        if (rule.getAttrs) {\n          var result = rule.getAttrs(value);\n          if (result === false) continue;\n          rule.attrs = result || undefined;\n        }\n        return rule;\n      }\n    }\n  }], [{\n    key: \"schemaRules\",\n    value: function schemaRules(schema) {\n      var result = [];\n      function insert(rule) {\n        var priority = rule.priority == null ? 50 : rule.priority,\n          i = 0;\n        for (; i < result.length; i++) {\n          var next = result[i],\n            nextPriority = next.priority == null ? 50 : next.priority;\n          if (nextPriority < priority) break;\n        }\n        result.splice(i, 0, rule);\n      }\n      var _loop2 = function _loop2(name) {\n        var rules = schema.marks[name].spec.parseDOM;\n        if (rules) rules.forEach(function (rule) {\n          insert(rule = copy(rule));\n          if (!(rule.mark || rule.ignore || rule.clearMark)) rule.mark = name;\n        });\n      };\n      for (var name in schema.marks) {\n        _loop2(name);\n      }\n      var _loop3 = function _loop3(_name) {\n        var rules = schema.nodes[_name].spec.parseDOM;\n        if (rules) rules.forEach(function (rule) {\n          insert(rule = copy(rule));\n          if (!(rule.node || rule.ignore || rule.mark)) rule.node = _name;\n        });\n      };\n      for (var _name in schema.nodes) {\n        _loop3(_name);\n      }\n      return result;\n    }\n  }, {\n    key: \"fromSchema\",\n    value: function fromSchema(schema) {\n      return schema.cached.domParser || (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n    }\n  }]);\n  return DOMParser;\n}();\nvar blockTags = {\n  address: true,\n  article: true,\n  aside: true,\n  blockquote: true,\n  body: true,\n  canvas: true,\n  dd: true,\n  div: true,\n  dl: true,\n  fieldset: true,\n  figcaption: true,\n  figure: true,\n  footer: true,\n  form: true,\n  h1: true,\n  h2: true,\n  h3: true,\n  h4: true,\n  h5: true,\n  h6: true,\n  header: true,\n  hgroup: true,\n  hr: true,\n  li: true,\n  noscript: true,\n  ol: true,\n  output: true,\n  p: true,\n  pre: true,\n  section: true,\n  table: true,\n  tfoot: true,\n  ul: true\n};\nvar ignoreTags = {\n  head: true,\n  noscript: true,\n  object: true,\n  script: true,\n  style: true,\n  title: true\n};\nvar listTags = {\n  ol: true,\n  ul: true\n};\nvar OPT_PRESERVE_WS = 1,\n  OPT_PRESERVE_WS_FULL = 2,\n  OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n  if (preserveWhitespace != null) return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n  return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nvar NodeContext = function () {\n  function NodeContext(type, attrs, marks, solid, match, options) {\n    _classCallCheck(this, NodeContext);\n    this.type = type;\n    this.attrs = attrs;\n    this.marks = marks;\n    this.solid = solid;\n    this.options = options;\n    this.content = [];\n    this.activeMarks = Mark.none;\n    this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n  }\n  _createClass(NodeContext, [{\n    key: \"findWrapping\",\n    value: function findWrapping(node) {\n      if (!this.match) {\n        if (!this.type) return [];\n        var fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n        if (fill) {\n          this.match = this.type.contentMatch.matchFragment(fill);\n        } else {\n          var start = this.type.contentMatch,\n            wrap;\n          if (wrap = start.findWrapping(node.type)) {\n            this.match = start;\n            return wrap;\n          } else {\n            return null;\n          }\n        }\n      }\n      return this.match.findWrapping(node.type);\n    }\n  }, {\n    key: \"finish\",\n    value: function finish(openEnd) {\n      if (!(this.options & OPT_PRESERVE_WS)) {\n        var last = this.content[this.content.length - 1],\n          m;\n        if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n          var text = last;\n          if (last.text.length == m[0].length) this.content.pop();else this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n        }\n      }\n      var content = Fragment.from(this.content);\n      if (!openEnd && this.match) content = content.append(this.match.fillBefore(Fragment.empty, true));\n      return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n    }\n  }, {\n    key: \"inlineContext\",\n    value: function inlineContext(node) {\n      if (this.type) return this.type.inlineContent;\n      if (this.content.length) return this.content[0].isInline;\n      return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n    }\n  }]);\n  return NodeContext;\n}();\nvar ParseContext = function () {\n  function ParseContext(parser, options, isOpen) {\n    _classCallCheck(this, ParseContext);\n    this.parser = parser;\n    this.options = options;\n    this.isOpen = isOpen;\n    this.open = 0;\n    this.localPreserveWS = false;\n    var topNode = options.topNode,\n      topContext;\n    var topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n    if (topNode) topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);else if (isOpen) topContext = new NodeContext(null, null, Mark.none, true, null, topOptions);else topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, true, null, topOptions);\n    this.nodes = [topContext];\n    this.find = options.findPositions;\n    this.needsBlock = false;\n  }\n  _createClass(ParseContext, [{\n    key: \"top\",\n    get: function get() {\n      return this.nodes[this.open];\n    }\n  }, {\n    key: \"addDOM\",\n    value: function addDOM(dom, marks) {\n      if (dom.nodeType == 3) this.addTextNode(dom, marks);else if (dom.nodeType == 1) this.addElement(dom, marks);\n    }\n  }, {\n    key: \"addTextNode\",\n    value: function addTextNode(dom, marks) {\n      var value = dom.nodeValue;\n      var top = this.top,\n        preserveWS = top.options & OPT_PRESERVE_WS_FULL ? \"full\" : this.localPreserveWS || (top.options & OPT_PRESERVE_WS) > 0;\n      var schema = this.parser.schema;\n      if (preserveWS === \"full\" || top.inlineContext(dom) || /[^ \\t\\r\\n\\u000c]/.test(value)) {\n        if (!preserveWS) {\n          value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n          if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n            var nodeBefore = top.content[top.content.length - 1];\n            var domNodeBefore = dom.previousSibling;\n            if (!nodeBefore || domNodeBefore && domNodeBefore.nodeName == 'BR' || nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)) value = value.slice(1);\n          }\n        } else if (preserveWS === \"full\") {\n          value = value.replace(/\\r\\n?/g, \"\\n\");\n        } else if (schema.linebreakReplacement && /[\\r\\n]/.test(value) && this.top.findWrapping(schema.linebreakReplacement.create())) {\n          var lines = value.split(/\\r?\\n|\\r/);\n          for (var i = 0; i < lines.length; i++) {\n            if (i) this.insertNode(schema.linebreakReplacement.create(), marks, true);\n            if (lines[i]) this.insertNode(schema.text(lines[i]), marks, !/\\S/.test(lines[i]));\n          }\n          value = \"\";\n        } else {\n          value = value.replace(/\\r?\\n|\\r/g, \" \");\n        }\n        if (value) this.insertNode(schema.text(value), marks, !/\\S/.test(value));\n        this.findInText(dom);\n      } else {\n        this.findInside(dom);\n      }\n    }\n  }, {\n    key: \"addElement\",\n    value: function addElement(dom, marks, matchAfter) {\n      var outerWS = this.localPreserveWS,\n        top = this.top;\n      if (dom.tagName == \"PRE\" || /pre/.test(dom.style && dom.style.whiteSpace)) this.localPreserveWS = true;\n      var name = dom.nodeName.toLowerCase(),\n        ruleID;\n      if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) normalizeList(dom);\n      var rule = this.options.ruleFromNode && this.options.ruleFromNode(dom) || (ruleID = this.parser.matchTag(dom, this, matchAfter));\n      out: if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n        this.findInside(dom);\n        this.ignoreFallback(dom, marks);\n      } else if (!rule || rule.skip || rule.closeParent) {\n        if (rule && rule.closeParent) this.open = Math.max(0, this.open - 1);else if (rule && rule.skip.nodeType) dom = rule.skip;\n        var sync,\n          oldNeedsBlock = this.needsBlock;\n        if (blockTags.hasOwnProperty(name)) {\n          if (top.content.length && top.content[0].isInline && this.open) {\n            this.open--;\n            top = this.top;\n          }\n          sync = true;\n          if (!top.type) this.needsBlock = true;\n        } else if (!dom.firstChild) {\n          this.leafFallback(dom, marks);\n          break out;\n        }\n        var innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);\n        if (innerMarks) this.addAll(dom, innerMarks);\n        if (sync) this.sync(top);\n        this.needsBlock = oldNeedsBlock;\n      } else {\n        var _innerMarks = this.readStyles(dom, marks);\n        if (_innerMarks) this.addElementByRule(dom, rule, _innerMarks, rule.consuming === false ? ruleID : undefined);\n      }\n      this.localPreserveWS = outerWS;\n    }\n  }, {\n    key: \"leafFallback\",\n    value: function leafFallback(dom, marks) {\n      if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent) this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"), marks);\n    }\n  }, {\n    key: \"ignoreFallback\",\n    value: function ignoreFallback(dom, marks) {\n      if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent)) this.findPlace(this.parser.schema.text(\"-\"), marks, true);\n    }\n  }, {\n    key: \"readStyles\",\n    value: function readStyles(dom, marks) {\n      var _this4 = this;\n      var styles = dom.style;\n      if (styles && styles.length) for (var i = 0; i < this.parser.matchedStyles.length; i++) {\n        var name = this.parser.matchedStyles[i],\n          value = styles.getPropertyValue(name);\n        if (value) {\n          var _loop4 = function _loop4(_after) {\n              var rule = _this4.parser.matchStyle(name, value, _this4, _after);\n              if (!rule) {\n                after = _after;\n                return 0;\n              }\n              if (rule.ignore) return {\n                v: null\n              };\n              if (rule.clearMark) marks = marks.filter(function (m) {\n                return !rule.clearMark(m);\n              });else marks = marks.concat(_this4.parser.schema.marks[rule.mark].create(rule.attrs));\n              if (rule.consuming === false) _after = rule;else {\n                after = _after;\n                return 0;\n              }\n              after = _after;\n            },\n            _ret;\n          for (var after = undefined;;) {\n            _ret = _loop4(after);\n            if (_ret === 0) break;\n            if (_ret) return _ret.v;\n          }\n        }\n      }\n      return marks;\n    }\n  }, {\n    key: \"addElementByRule\",\n    value: function addElementByRule(dom, rule, marks, continueAfter) {\n      var _this5 = this;\n      var sync, nodeType;\n      if (rule.node) {\n        nodeType = this.parser.schema.nodes[rule.node];\n        if (!nodeType.isLeaf) {\n          var inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);\n          if (inner) {\n            sync = true;\n            marks = inner;\n          }\n        } else if (!this.insertNode(nodeType.create(rule.attrs), marks, dom.nodeName == \"BR\")) {\n          this.leafFallback(dom, marks);\n        }\n      } else {\n        var markType = this.parser.schema.marks[rule.mark];\n        marks = marks.concat(markType.create(rule.attrs));\n      }\n      var startIn = this.top;\n      if (nodeType && nodeType.isLeaf) {\n        this.findInside(dom);\n      } else if (continueAfter) {\n        this.addElement(dom, marks, continueAfter);\n      } else if (rule.getContent) {\n        this.findInside(dom);\n        rule.getContent(dom, this.parser.schema).forEach(function (node) {\n          return _this5.insertNode(node, marks, false);\n        });\n      } else {\n        var contentDOM = dom;\n        if (typeof rule.contentElement == \"string\") contentDOM = dom.querySelector(rule.contentElement);else if (typeof rule.contentElement == \"function\") contentDOM = rule.contentElement(dom);else if (rule.contentElement) contentDOM = rule.contentElement;\n        this.findAround(dom, contentDOM, true);\n        this.addAll(contentDOM, marks);\n        this.findAround(dom, contentDOM, false);\n      }\n      if (sync && this.sync(startIn)) this.open--;\n    }\n  }, {\n    key: \"addAll\",\n    value: function addAll(parent, marks, startIndex, endIndex) {\n      var index = startIndex || 0;\n      for (var dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n        this.findAtPoint(parent, index);\n        this.addDOM(dom, marks);\n      }\n      this.findAtPoint(parent, index);\n    }\n  }, {\n    key: \"findPlace\",\n    value: function findPlace(node, marks, cautious) {\n      var route, sync;\n      for (var depth = this.open, penalty = 0; depth >= 0; depth--) {\n        var cx = this.nodes[depth];\n        var _found2 = cx.findWrapping(node);\n        if (_found2 && (!route || route.length > _found2.length + penalty)) {\n          route = _found2;\n          sync = cx;\n          if (!_found2.length) break;\n        }\n        if (cx.solid) {\n          if (cautious) break;\n          penalty += 2;\n        }\n      }\n      if (!route) return null;\n      this.sync(sync);\n      for (var i = 0; i < route.length; i++) marks = this.enterInner(route[i], null, marks, false);\n      return marks;\n    }\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node, marks, cautious) {\n      if (node.isInline && this.needsBlock && !this.top.type) {\n        var block = this.textblockFromContext();\n        if (block) marks = this.enterInner(block, null, marks);\n      }\n      var innerMarks = this.findPlace(node, marks, cautious);\n      if (innerMarks) {\n        this.closeExtra();\n        var top = this.top;\n        if (top.match) top.match = top.match.matchType(node.type);\n        var nodeMarks = Mark.none;\n        var _iterator = _createForOfIteratorHelper(innerMarks.concat(node.marks)),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var m = _step.value;\n            if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, node.type)) nodeMarks = m.addToSet(nodeMarks);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n        top.content.push(node.mark(nodeMarks));\n        return true;\n      }\n      return false;\n    }\n  }, {\n    key: \"enter\",\n    value: function enter(type, attrs, marks, preserveWS) {\n      var innerMarks = this.findPlace(type.create(attrs), marks, false);\n      if (innerMarks) innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);\n      return innerMarks;\n    }\n  }, {\n    key: \"enterInner\",\n    value: function enterInner(type, attrs, marks) {\n      var solid = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      var preserveWS = arguments.length > 4 ? arguments[4] : undefined;\n      this.closeExtra();\n      var top = this.top;\n      top.match = top.match && top.match.matchType(type);\n      var options = wsOptionsFor(type, preserveWS, top.options);\n      if (top.options & OPT_OPEN_LEFT && top.content.length == 0) options |= OPT_OPEN_LEFT;\n      var applyMarks = Mark.none;\n      marks = marks.filter(function (m) {\n        if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, type)) {\n          applyMarks = m.addToSet(applyMarks);\n          return false;\n        }\n        return true;\n      });\n      this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));\n      this.open++;\n      return marks;\n    }\n  }, {\n    key: \"closeExtra\",\n    value: function closeExtra() {\n      var openEnd = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var i = this.nodes.length - 1;\n      if (i > this.open) {\n        for (; i > this.open; i--) this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n        this.nodes.length = this.open + 1;\n      }\n    }\n  }, {\n    key: \"finish\",\n    value: function finish() {\n      this.open = 0;\n      this.closeExtra(this.isOpen);\n      return this.nodes[0].finish(!!(this.isOpen || this.options.topOpen));\n    }\n  }, {\n    key: \"sync\",\n    value: function sync(to) {\n      for (var i = this.open; i >= 0; i--) {\n        if (this.nodes[i] == to) {\n          this.open = i;\n          return true;\n        } else if (this.localPreserveWS) {\n          this.nodes[i].options |= OPT_PRESERVE_WS;\n        }\n      }\n      return false;\n    }\n  }, {\n    key: \"currentPos\",\n    get: function get() {\n      this.closeExtra();\n      var pos = 0;\n      for (var i = this.open; i >= 0; i--) {\n        var content = this.nodes[i].content;\n        for (var j = content.length - 1; j >= 0; j--) pos += content[j].nodeSize;\n        if (i) pos++;\n      }\n      return pos;\n    }\n  }, {\n    key: \"findAtPoint\",\n    value: function findAtPoint(parent, offset) {\n      if (this.find) for (var i = 0; i < this.find.length; i++) {\n        if (this.find[i].node == parent && this.find[i].offset == offset) this.find[i].pos = this.currentPos;\n      }\n    }\n  }, {\n    key: \"findInside\",\n    value: function findInside(parent) {\n      if (this.find) for (var i = 0; i < this.find.length; i++) {\n        if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) this.find[i].pos = this.currentPos;\n      }\n    }\n  }, {\n    key: \"findAround\",\n    value: function findAround(parent, content, before) {\n      if (parent != content && this.find) for (var i = 0; i < this.find.length; i++) {\n        if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n          var pos = content.compareDocumentPosition(this.find[i].node);\n          if (pos & (before ? 2 : 4)) this.find[i].pos = this.currentPos;\n        }\n      }\n    }\n  }, {\n    key: \"findInText\",\n    value: function findInText(textNode) {\n      if (this.find) for (var i = 0; i < this.find.length; i++) {\n        if (this.find[i].node == textNode) this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n      }\n    }\n  }, {\n    key: \"matchesContext\",\n    value: function matchesContext(context) {\n      var _this6 = this;\n      if (context.indexOf(\"|\") > -1) return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n      var parts = context.split(\"/\");\n      var option = this.options.context;\n      var useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n      var minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n      var match = function match(i, depth) {\n        for (; i >= 0; i--) {\n          var part = parts[i];\n          if (part == \"\") {\n            if (i == parts.length - 1 || i == 0) continue;\n            for (; depth >= minDepth; depth--) if (match(i - 1, depth)) return true;\n            return false;\n          } else {\n            var next = depth > 0 || depth == 0 && useRoot ? _this6.nodes[depth].type : option && depth >= minDepth ? option.node(depth - minDepth).type : null;\n            if (!next || next.name != part && !next.isInGroup(part)) return false;\n            depth--;\n          }\n        }\n        return true;\n      };\n      return match(parts.length - 1, this.open);\n    }\n  }, {\n    key: \"textblockFromContext\",\n    value: function textblockFromContext() {\n      var $context = this.options.context;\n      if ($context) for (var d = $context.depth; d >= 0; d--) {\n        var deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n        if (deflt && deflt.isTextblock && deflt.defaultAttrs) return deflt;\n      }\n      for (var name in this.parser.schema.nodes) {\n        var type = this.parser.schema.nodes[name];\n        if (type.isTextblock && type.defaultAttrs) return type;\n      }\n    }\n  }]);\n  return ParseContext;\n}();\nfunction normalizeList(dom) {\n  for (var child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n    var name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n    if (name && listTags.hasOwnProperty(name) && prevItem) {\n      prevItem.appendChild(child);\n      child = prevItem;\n    } else if (name == \"li\") {\n      prevItem = child;\n    } else if (name) {\n      prevItem = null;\n    }\n  }\n}\nfunction matches(dom, selector) {\n  return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\nfunction copy(obj) {\n  var copy = {};\n  for (var prop in obj) copy[prop] = obj[prop];\n  return copy;\n}\nfunction markMayApply(markType, nodeType) {\n  var nodes = nodeType.schema.nodes;\n  var _loop5 = function _loop5() {\n      var parent = nodes[name];\n      if (!parent.allowsMarkType(markType)) return 0;\n      var seen = [],\n        scan = function scan(match) {\n          seen.push(match);\n          for (var i = 0; i < match.edgeCount; i++) {\n            var _match$edge = match.edge(i),\n              type = _match$edge.type,\n              next = _match$edge.next;\n            if (type == nodeType) return true;\n            if (seen.indexOf(next) < 0 && scan(next)) return true;\n          }\n        };\n      if (scan(parent.contentMatch)) return {\n        v: true\n      };\n    },\n    _ret2;\n  for (var name in nodes) {\n    _ret2 = _loop5();\n    if (_ret2 === 0) continue;\n    if (_ret2) return _ret2.v;\n  }\n}\nvar DOMSerializer = function () {\n  function DOMSerializer(nodes, marks) {\n    _classCallCheck(this, DOMSerializer);\n    this.nodes = nodes;\n    this.marks = marks;\n  }\n  _createClass(DOMSerializer, [{\n    key: \"serializeFragment\",\n    value: function serializeFragment(fragment) {\n      var _this7 = this;\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var target = arguments.length > 2 ? arguments[2] : undefined;\n      if (!target) target = doc(options).createDocumentFragment();\n      var top = target,\n        active = [];\n      fragment.forEach(function (node) {\n        if (active.length || node.marks.length) {\n          var keep = 0,\n            rendered = 0;\n          while (keep < active.length && rendered < node.marks.length) {\n            var next = node.marks[rendered];\n            if (!_this7.marks[next.type.name]) {\n              rendered++;\n              continue;\n            }\n            if (!next.eq(active[keep][0]) || next.type.spec.spanning === false) break;\n            keep++;\n            rendered++;\n          }\n          while (keep < active.length) top = active.pop()[1];\n          while (rendered < node.marks.length) {\n            var add = node.marks[rendered++];\n            var markDOM = _this7.serializeMark(add, node.isInline, options);\n            if (markDOM) {\n              active.push([add, top]);\n              top.appendChild(markDOM.dom);\n              top = markDOM.contentDOM || markDOM.dom;\n            }\n          }\n        }\n        top.appendChild(_this7.serializeNodeInner(node, options));\n      });\n      return target;\n    }\n  }, {\n    key: \"serializeNodeInner\",\n    value: function serializeNodeInner(node, options) {\n      if (node.isText) return doc(options).createTextNode(node.text);\n      var _renderSpec2 = _renderSpec(doc(options), this.nodes[node.type.name](node), null, node.attrs),\n        dom = _renderSpec2.dom,\n        contentDOM = _renderSpec2.contentDOM;\n      if (contentDOM) {\n        if (node.isLeaf) throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n        this.serializeFragment(node.content, options, contentDOM);\n      }\n      return dom;\n    }\n  }, {\n    key: \"serializeNode\",\n    value: function serializeNode(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var dom = this.serializeNodeInner(node, options);\n      for (var i = node.marks.length - 1; i >= 0; i--) {\n        var wrap = this.serializeMark(node.marks[i], node.isInline, options);\n        if (wrap) {\n          (wrap.contentDOM || wrap.dom).appendChild(dom);\n          dom = wrap.dom;\n        }\n      }\n      return dom;\n    }\n  }, {\n    key: \"serializeMark\",\n    value: function serializeMark(mark, inline) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var toDOM = this.marks[mark.type.name];\n      return toDOM && _renderSpec(doc(options), toDOM(mark, inline), null, mark.attrs);\n    }\n  }], [{\n    key: \"renderSpec\",\n    value: function renderSpec(doc, structure) {\n      var xmlNS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      var blockArraysIn = arguments.length > 3 ? arguments[3] : undefined;\n      if (typeof structure == \"string\") return {\n        dom: doc.createTextNode(structure)\n      };\n      return _renderSpec(doc, structure, xmlNS, blockArraysIn);\n    }\n  }, {\n    key: \"fromSchema\",\n    value: function fromSchema(schema) {\n      return schema.cached.domSerializer || (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n    }\n  }, {\n    key: \"nodesFromSchema\",\n    value: function nodesFromSchema(schema) {\n      var result = gatherToDOM(schema.nodes);\n      if (!result.text) result.text = function (node) {\n        return node.text;\n      };\n      return result;\n    }\n  }, {\n    key: \"marksFromSchema\",\n    value: function marksFromSchema(schema) {\n      return gatherToDOM(schema.marks);\n    }\n  }]);\n  return DOMSerializer;\n}();\nfunction gatherToDOM(obj) {\n  var result = {};\n  for (var name in obj) {\n    var toDOM = obj[name].spec.toDOM;\n    if (toDOM) result[name] = toDOM;\n  }\n  return result;\n}\nfunction doc(options) {\n  return options.document || window.document;\n}\nvar suspiciousAttributeCache = new WeakMap();\nfunction suspiciousAttributes(attrs) {\n  var value = suspiciousAttributeCache.get(attrs);\n  if (value === undefined) suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));\n  return value;\n}\nfunction suspiciousAttributesInner(attrs) {\n  var result = null;\n  function scan(value) {\n    if (value && _typeof(value) == \"object\") {\n      if (Array.isArray(value)) {\n        if (typeof value[0] == \"string\") {\n          if (!result) result = [];\n          result.push(value);\n        } else {\n          for (var i = 0; i < value.length; i++) scan(value[i]);\n        }\n      } else {\n        for (var prop in value) scan(value[prop]);\n      }\n    }\n  }\n  scan(attrs);\n  return result;\n}\nfunction _renderSpec(doc, structure, xmlNS, blockArraysIn) {\n  if (structure.nodeType == 1) return {\n    dom: structure\n  };\n  if (structure.dom && structure.dom.nodeType == 1) return structure;\n  var tagName = structure[0],\n    suspicious;\n  if (typeof tagName != \"string\") throw new RangeError(\"Invalid array passed to renderSpec\");\n  if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) && suspicious.indexOf(structure) > -1) throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");\n  var space = tagName.indexOf(\" \");\n  if (space > 0) {\n    xmlNS = tagName.slice(0, space);\n    tagName = tagName.slice(space + 1);\n  }\n  var contentDOM;\n  var dom = xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName);\n  var attrs = structure[1],\n    start = 1;\n  if (attrs && _typeof(attrs) == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n    start = 2;\n    for (var name in attrs) if (attrs[name] != null) {\n      var _space = name.indexOf(\" \");\n      if (_space > 0) dom.setAttributeNS(name.slice(0, _space), name.slice(_space + 1), attrs[name]);else if (name == \"style\" && dom.style) dom.style.cssText = attrs[name];else dom.setAttribute(name, attrs[name]);\n    }\n  }\n  for (var i = start; i < structure.length; i++) {\n    var child = structure[i];\n    if (child === 0) {\n      if (i < structure.length - 1 || i > start) throw new RangeError(\"Content hole must be the only child of its parent node\");\n      return {\n        dom: dom,\n        contentDOM: dom\n      };\n    } else if (typeof child == \"string\") {\n      dom.appendChild(doc.createTextNode(child));\n    } else {\n      var _renderSpec3 = _renderSpec(doc, child, xmlNS, blockArraysIn),\n        inner = _renderSpec3.dom,\n        innerContent = _renderSpec3.contentDOM;\n      dom.appendChild(inner);\n      if (innerContent) {\n        if (contentDOM) throw new RangeError(\"Multiple content holes\");\n        contentDOM = innerContent;\n      }\n    }\n  }\n  return {\n    dom: dom,\n    contentDOM: contentDOM\n  };\n}\nexports.ContentMatch = ContentMatch;\nexports.DOMParser = DOMParser;\nexports.DOMSerializer = DOMSerializer;\nexports.Fragment = Fragment;\nexports.Mark = Mark;\nexports.MarkType = MarkType;\nexports.Node = Node;\nexports.NodeRange = NodeRange;\nexports.NodeType = NodeType;\nexports.ReplaceError = ReplaceError;\nexports.ResolvedPos = ResolvedPos;\nexports.Schema = Schema;\nexports.Slice = Slice;\n","'use strict';\n\nvar prosemirrorTransform = require('prosemirror-transform');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorState = require('prosemirror-state');\nvar olDOM = [\"ol\", 0],\n  ulDOM = [\"ul\", 0],\n  liDOM = [\"li\", 0];\nvar orderedList = {\n  attrs: {\n    order: {\n      \"default\": 1,\n      validate: \"number\"\n    }\n  },\n  parseDOM: [{\n    tag: \"ol\",\n    getAttrs: function getAttrs(dom) {\n      return {\n        order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1\n      };\n    }\n  }],\n  toDOM: function toDOM(node) {\n    return node.attrs.order == 1 ? olDOM : [\"ol\", {\n      start: node.attrs.order\n    }, 0];\n  }\n};\nvar bulletList = {\n  parseDOM: [{\n    tag: \"ul\"\n  }],\n  toDOM: function toDOM() {\n    return ulDOM;\n  }\n};\nvar listItem = {\n  parseDOM: [{\n    tag: \"li\"\n  }],\n  toDOM: function toDOM() {\n    return liDOM;\n  },\n  defining: true\n};\nfunction add(obj, props) {\n  var copy = {};\n  for (var prop in obj) copy[prop] = obj[prop];\n  for (var _prop in props) copy[_prop] = props[_prop];\n  return copy;\n}\nfunction addListNodes(nodes, itemContent, listGroup) {\n  return nodes.append({\n    ordered_list: add(orderedList, {\n      content: \"list_item+\",\n      group: listGroup\n    }),\n    bullet_list: add(bulletList, {\n      content: \"list_item+\",\n      group: listGroup\n    }),\n    list_item: add(listItem, {\n      content: itemContent\n    })\n  });\n}\nfunction wrapInList(listType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  return function (state, dispatch) {\n    var _state$selection = state.selection,\n      $from = _state$selection.$from,\n      $to = _state$selection.$to;\n    var range = $from.blockRange($to);\n    if (!range) return false;\n    var tr = dispatch ? state.tr : null;\n    if (!wrapRangeInList(tr, range, listType, attrs)) return false;\n    if (dispatch) dispatch(tr.scrollIntoView());\n    return true;\n  };\n}\nfunction wrapRangeInList(tr, range, listType) {\n  var attrs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n  var doJoin = false,\n    outerRange = range,\n    doc = range.$from.doc;\n  if (range.depth >= 2 && range.$from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n    if (range.$from.index(range.depth - 1) == 0) return false;\n    var $insert = doc.resolve(range.start - 2);\n    outerRange = new prosemirrorModel.NodeRange($insert, $insert, range.depth);\n    if (range.endIndex < range.parent.childCount) range = new prosemirrorModel.NodeRange(range.$from, doc.resolve(range.$to.end(range.depth)), range.depth);\n    doJoin = true;\n  }\n  var wrap = prosemirrorTransform.findWrapping(outerRange, listType, attrs, range);\n  if (!wrap) return false;\n  if (tr) doWrapInList(tr, range, wrap, doJoin, listType);\n  return true;\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n  var content = prosemirrorModel.Fragment.empty;\n  for (var i = wrappers.length - 1; i >= 0; i--) content = prosemirrorModel.Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n  tr.step(new prosemirrorTransform.ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new prosemirrorModel.Slice(content, 0, 0), wrappers.length, true));\n  var found = 0;\n  for (var _i = 0; _i < wrappers.length; _i++) if (wrappers[_i].type == listType) found = _i + 1;\n  var splitDepth = wrappers.length - found;\n  var splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0),\n    parent = range.parent;\n  for (var _i2 = range.startIndex, e = range.endIndex, first = true; _i2 < e; _i2++, first = false) {\n    if (!first && prosemirrorTransform.canSplit(tr.doc, splitPos, splitDepth)) {\n      tr.split(splitPos, splitDepth);\n      splitPos += 2 * splitDepth;\n    }\n    splitPos += parent.child(_i2).nodeSize;\n  }\n  return tr;\n}\nfunction splitListItem(itemType, itemAttrs) {\n  return function (state, dispatch) {\n    var _state$selection2 = state.selection,\n      $from = _state$selection2.$from,\n      $to = _state$selection2.$to,\n      node = _state$selection2.node;\n    if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) return false;\n    var grandParent = $from.node(-1);\n    if (grandParent.type != itemType) return false;\n    if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n      if ($from.depth == 3 || $from.node(-3).type != itemType || $from.index(-2) != $from.node(-2).childCount - 1) return false;\n      if (dispatch) {\n        var wrap = prosemirrorModel.Fragment.empty;\n        var depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n        for (var d = $from.depth - depthBefore; d >= $from.depth - 3; d--) wrap = prosemirrorModel.Fragment.from($from.node(d).copy(wrap));\n        var depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n        wrap = wrap.append(prosemirrorModel.Fragment.from(itemType.createAndFill()));\n        var start = $from.before($from.depth - (depthBefore - 1));\n        var _tr = state.tr.replace(start, $from.after(-depthAfter), new prosemirrorModel.Slice(wrap, 4 - depthBefore, 0));\n        var sel = -1;\n        _tr.doc.nodesBetween(start, _tr.doc.content.size, function (node, pos) {\n          if (sel > -1) return false;\n          if (node.isTextblock && node.content.size == 0) sel = pos + 1;\n        });\n        if (sel > -1) _tr.setSelection(prosemirrorState.Selection.near(_tr.doc.resolve(sel)));\n        dispatch(_tr.scrollIntoView());\n      }\n      return true;\n    }\n    var nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n    var tr = state.tr[\"delete\"]($from.pos, $to.pos);\n    var types = nextType ? [itemAttrs ? {\n      type: itemType,\n      attrs: itemAttrs\n    } : null, {\n      type: nextType\n    }] : undefined;\n    if (!prosemirrorTransform.canSplit(tr.doc, $from.pos, 2, types)) return false;\n    if (dispatch) dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n    return true;\n  };\n}\nfunction splitListItemKeepMarks(itemType, itemAttrs) {\n  var split = splitListItem(itemType, itemAttrs);\n  return function (state, dispatch) {\n    return split(state, dispatch && function (tr) {\n      var marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n      if (marks) tr.ensureMarks(marks);\n      dispatch(tr);\n    });\n  };\n}\nfunction liftListItem(itemType) {\n  return function (state, dispatch) {\n    var _state$selection3 = state.selection,\n      $from = _state$selection3.$from,\n      $to = _state$selection3.$to;\n    var range = $from.blockRange($to, function (node) {\n      return node.childCount > 0 && node.firstChild.type == itemType;\n    });\n    if (!range) return false;\n    if (!dispatch) return true;\n    if ($from.node(range.depth - 1).type == itemType) return liftToOuterList(state, dispatch, itemType, range);else return liftOutOfList(state, dispatch, range);\n  };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n  var tr = state.tr,\n    end = range.end,\n    endOfList = range.$to.end(range.depth);\n  if (end < endOfList) {\n    tr.step(new prosemirrorTransform.ReplaceAroundStep(end - 1, endOfList, end, endOfList, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n    range = new prosemirrorModel.NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n  }\n  var target = prosemirrorTransform.liftTarget(range);\n  if (target == null) return false;\n  tr.lift(range, target);\n  var $after = tr.doc.resolve(tr.mapping.map(end, -1) - 1);\n  if (prosemirrorTransform.canJoin(tr.doc, $after.pos) && $after.nodeBefore.type == $after.nodeAfter.type) tr.join($after.pos);\n  dispatch(tr.scrollIntoView());\n  return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n  var tr = state.tr,\n    list = range.parent;\n  for (var pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n    pos -= list.child(i).nodeSize;\n    tr[\"delete\"](pos - 1, pos + 1);\n  }\n  var $start = tr.doc.resolve(range.start),\n    item = $start.nodeAfter;\n  if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize) return false;\n  var atStart = range.startIndex == 0,\n    atEnd = range.endIndex == list.childCount;\n  var parent = $start.node(-1),\n    indexBefore = $start.index(-1);\n  if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? prosemirrorModel.Fragment.empty : prosemirrorModel.Fragment.from(list)))) return false;\n  var start = $start.pos,\n    end = start + item.nodeSize;\n  tr.step(new prosemirrorTransform.ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new prosemirrorModel.Slice((atStart ? prosemirrorModel.Fragment.empty : prosemirrorModel.Fragment.from(list.copy(prosemirrorModel.Fragment.empty))).append(atEnd ? prosemirrorModel.Fragment.empty : prosemirrorModel.Fragment.from(list.copy(prosemirrorModel.Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n  dispatch(tr.scrollIntoView());\n  return true;\n}\nfunction sinkListItem(itemType) {\n  return function (state, dispatch) {\n    var _state$selection4 = state.selection,\n      $from = _state$selection4.$from,\n      $to = _state$selection4.$to;\n    var range = $from.blockRange($to, function (node) {\n      return node.childCount > 0 && node.firstChild.type == itemType;\n    });\n    if (!range) return false;\n    var startIndex = range.startIndex;\n    if (startIndex == 0) return false;\n    var parent = range.parent,\n      nodeBefore = parent.child(startIndex - 1);\n    if (nodeBefore.type != itemType) return false;\n    if (dispatch) {\n      var nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n      var inner = prosemirrorModel.Fragment.from(nestedBefore ? itemType.create() : null);\n      var slice = new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(itemType.create(null, prosemirrorModel.Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n      var before = range.start,\n        after = range.end;\n      dispatch(state.tr.step(new prosemirrorTransform.ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true)).scrollIntoView());\n    }\n    return true;\n  };\n}\nexports.addListNodes = addListNodes;\nexports.bulletList = bulletList;\nexports.liftListItem = liftListItem;\nexports.listItem = listItem;\nexports.orderedList = orderedList;\nexports.sinkListItem = sinkListItem;\nexports.splitListItem = splitListItem;\nexports.splitListItemKeepMarks = splitListItemKeepMarks;\nexports.wrapInList = wrapInList;\nexports.wrapRangeInList = wrapRangeInList;\n","'use strict';\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorTransform = require('prosemirror-transform');\nvar classesById = Object.create(null);\nvar Selection = function () {\n  function Selection($anchor, $head, ranges) {\n    _classCallCheck(this, Selection);\n    this.$anchor = $anchor;\n    this.$head = $head;\n    this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n  }\n  _createClass(Selection, [{\n    key: \"anchor\",\n    get: function get() {\n      return this.$anchor.pos;\n    }\n  }, {\n    key: \"head\",\n    get: function get() {\n      return this.$head.pos;\n    }\n  }, {\n    key: \"from\",\n    get: function get() {\n      return this.$from.pos;\n    }\n  }, {\n    key: \"to\",\n    get: function get() {\n      return this.$to.pos;\n    }\n  }, {\n    key: \"$from\",\n    get: function get() {\n      return this.ranges[0].$from;\n    }\n  }, {\n    key: \"$to\",\n    get: function get() {\n      return this.ranges[0].$to;\n    }\n  }, {\n    key: \"empty\",\n    get: function get() {\n      var ranges = this.ranges;\n      for (var i = 0; i < ranges.length; i++) if (ranges[i].$from.pos != ranges[i].$to.pos) return false;\n      return true;\n    }\n  }, {\n    key: \"content\",\n    value: function content() {\n      return this.$from.doc.slice(this.from, this.to, true);\n    }\n  }, {\n    key: \"replace\",\n    value: function replace(tr) {\n      var content = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prosemirrorModel.Slice.empty;\n      var lastNode = content.content.lastChild,\n        lastParent = null;\n      for (var i = 0; i < content.openEnd; i++) {\n        lastParent = lastNode;\n        lastNode = lastNode.lastChild;\n      }\n      var mapFrom = tr.steps.length,\n        ranges = this.ranges;\n      for (var _i = 0; _i < ranges.length; _i++) {\n        var _ranges$_i = ranges[_i],\n          $from = _ranges$_i.$from,\n          $to = _ranges$_i.$to,\n          mapping = tr.mapping.slice(mapFrom);\n        tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), _i ? prosemirrorModel.Slice.empty : content);\n        if (_i == 0) selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n      }\n    }\n  }, {\n    key: \"replaceWith\",\n    value: function replaceWith(tr, node) {\n      var mapFrom = tr.steps.length,\n        ranges = this.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var _ranges$i = ranges[i],\n          $from = _ranges$i.$from,\n          $to = _ranges$i.$to,\n          mapping = tr.mapping.slice(mapFrom);\n        var from = mapping.map($from.pos),\n          to = mapping.map($to.pos);\n        if (i) {\n          tr.deleteRange(from, to);\n        } else {\n          tr.replaceRangeWith(from, to, node);\n          selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n        }\n      }\n    }\n  }, {\n    key: \"getBookmark\",\n    value: function getBookmark() {\n      return TextSelection.between(this.$anchor, this.$head).getBookmark();\n    }\n  }], [{\n    key: \"findFrom\",\n    value: function findFrom($pos, dir) {\n      var textOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var inner = $pos.parent.inlineContent ? new TextSelection($pos) : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n      if (inner) return inner;\n      for (var depth = $pos.depth - 1; depth >= 0; depth--) {\n        var found = dir < 0 ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly) : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n        if (found) return found;\n      }\n      return null;\n    }\n  }, {\n    key: \"near\",\n    value: function near($pos) {\n      var bias = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n    }\n  }, {\n    key: \"atStart\",\n    value: function atStart(doc) {\n      return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n    }\n  }, {\n    key: \"atEnd\",\n    value: function atEnd(doc) {\n      return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n    }\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(doc, json) {\n      if (!json || !json.type) throw new RangeError(\"Invalid input for Selection.fromJSON\");\n      var cls = classesById[json.type];\n      if (!cls) throw new RangeError(\"No selection type \".concat(json.type, \" defined\"));\n      return cls.fromJSON(doc, json);\n    }\n  }, {\n    key: \"jsonID\",\n    value: function jsonID(id, selectionClass) {\n      if (id in classesById) throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n      classesById[id] = selectionClass;\n      selectionClass.prototype.jsonID = id;\n      return selectionClass;\n    }\n  }]);\n  return Selection;\n}();\nSelection.prototype.visible = true;\nvar SelectionRange = _createClass(function SelectionRange($from, $to) {\n  _classCallCheck(this, SelectionRange);\n  this.$from = $from;\n  this.$to = $to;\n});\nvar warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n  if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n    warnedAboutTextSelection = true;\n    console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n  }\n}\nvar TextSelection = function (_Selection) {\n  _inherits(TextSelection, _Selection);\n  var _super = _createSuper(TextSelection);\n  function TextSelection($anchor) {\n    var $head = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : $anchor;\n    _classCallCheck(this, TextSelection);\n    checkTextSelection($anchor);\n    checkTextSelection($head);\n    return _super.call(this, $anchor, $head);\n  }\n  _createClass(TextSelection, [{\n    key: \"$cursor\",\n    get: function get() {\n      return this.$anchor.pos == this.$head.pos ? this.$head : null;\n    }\n  }, {\n    key: \"map\",\n    value: function map(doc, mapping) {\n      var $head = doc.resolve(mapping.map(this.head));\n      if (!$head.parent.inlineContent) return Selection.near($head);\n      var $anchor = doc.resolve(mapping.map(this.anchor));\n      return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n    }\n  }, {\n    key: \"replace\",\n    value: function replace(tr) {\n      var content = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prosemirrorModel.Slice.empty;\n      _get(_getPrototypeOf(TextSelection.prototype), \"replace\", this).call(this, tr, content);\n      if (content == prosemirrorModel.Slice.empty) {\n        var marks = this.$from.marksAcross(this.$to);\n        if (marks) tr.ensureMarks(marks);\n      }\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n    }\n  }, {\n    key: \"getBookmark\",\n    value: function getBookmark() {\n      return new TextBookmark(this.anchor, this.head);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        type: \"text\",\n        anchor: this.anchor,\n        head: this.head\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(doc, json) {\n      if (typeof json.anchor != \"number\" || typeof json.head != \"number\") throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n      return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n    }\n  }, {\n    key: \"create\",\n    value: function create(doc, anchor) {\n      var head = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : anchor;\n      var $anchor = doc.resolve(anchor);\n      return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n    }\n  }, {\n    key: \"between\",\n    value: function between($anchor, $head, bias) {\n      var dPos = $anchor.pos - $head.pos;\n      if (!bias || dPos) bias = dPos >= 0 ? 1 : -1;\n      if (!$head.parent.inlineContent) {\n        var found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n        if (found) $head = found.$head;else return Selection.near($head, bias);\n      }\n      if (!$anchor.parent.inlineContent) {\n        if (dPos == 0) {\n          $anchor = $head;\n        } else {\n          $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n          if ($anchor.pos < $head.pos != dPos < 0) $anchor = $head;\n        }\n      }\n      return new TextSelection($anchor, $head);\n    }\n  }]);\n  return TextSelection;\n}(Selection);\nSelection.jsonID(\"text\", TextSelection);\nvar TextBookmark = function () {\n  function TextBookmark(anchor, head) {\n    _classCallCheck(this, TextBookmark);\n    this.anchor = anchor;\n    this.head = head;\n  }\n  _createClass(TextBookmark, [{\n    key: \"map\",\n    value: function map(mapping) {\n      return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(doc) {\n      return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n    }\n  }]);\n  return TextBookmark;\n}();\nvar NodeSelection = function (_Selection2) {\n  _inherits(NodeSelection, _Selection2);\n  var _super2 = _createSuper(NodeSelection);\n  function NodeSelection($pos) {\n    var _this;\n    _classCallCheck(this, NodeSelection);\n    var node = $pos.nodeAfter;\n    var $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n    _this = _super2.call(this, $pos, $end);\n    _this.node = node;\n    return _this;\n  }\n  _createClass(NodeSelection, [{\n    key: \"map\",\n    value: function map(doc, mapping) {\n      var _mapping$mapResult = mapping.mapResult(this.anchor),\n        deleted = _mapping$mapResult.deleted,\n        pos = _mapping$mapResult.pos;\n      var $pos = doc.resolve(pos);\n      if (deleted) return Selection.near($pos);\n      return new NodeSelection($pos);\n    }\n  }, {\n    key: \"content\",\n    value: function content() {\n      return new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(this.node), 0, 0);\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return other instanceof NodeSelection && other.anchor == this.anchor;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        type: \"node\",\n        anchor: this.anchor\n      };\n    }\n  }, {\n    key: \"getBookmark\",\n    value: function getBookmark() {\n      return new NodeBookmark(this.anchor);\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(doc, json) {\n      if (typeof json.anchor != \"number\") throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n      return new NodeSelection(doc.resolve(json.anchor));\n    }\n  }, {\n    key: \"create\",\n    value: function create(doc, from) {\n      return new NodeSelection(doc.resolve(from));\n    }\n  }, {\n    key: \"isSelectable\",\n    value: function isSelectable(node) {\n      return !node.isText && node.type.spec.selectable !== false;\n    }\n  }]);\n  return NodeSelection;\n}(Selection);\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nvar NodeBookmark = function () {\n  function NodeBookmark(anchor) {\n    _classCallCheck(this, NodeBookmark);\n    this.anchor = anchor;\n  }\n  _createClass(NodeBookmark, [{\n    key: \"map\",\n    value: function map(mapping) {\n      var _mapping$mapResult2 = mapping.mapResult(this.anchor),\n        deleted = _mapping$mapResult2.deleted,\n        pos = _mapping$mapResult2.pos;\n      return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(doc) {\n      var $pos = doc.resolve(this.anchor),\n        node = $pos.nodeAfter;\n      if (node && NodeSelection.isSelectable(node)) return new NodeSelection($pos);\n      return Selection.near($pos);\n    }\n  }]);\n  return NodeBookmark;\n}();\nvar AllSelection = function (_Selection3) {\n  _inherits(AllSelection, _Selection3);\n  var _super3 = _createSuper(AllSelection);\n  function AllSelection(doc) {\n    _classCallCheck(this, AllSelection);\n    return _super3.call(this, doc.resolve(0), doc.resolve(doc.content.size));\n  }\n  _createClass(AllSelection, [{\n    key: \"replace\",\n    value: function replace(tr) {\n      var content = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prosemirrorModel.Slice.empty;\n      if (content == prosemirrorModel.Slice.empty) {\n        tr[\"delete\"](0, tr.doc.content.size);\n        var sel = Selection.atStart(tr.doc);\n        if (!sel.eq(tr.selection)) tr.setSelection(sel);\n      } else {\n        _get(_getPrototypeOf(AllSelection.prototype), \"replace\", this).call(this, tr, content);\n      }\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        type: \"all\"\n      };\n    }\n  }, {\n    key: \"map\",\n    value: function map(doc) {\n      return new AllSelection(doc);\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return other instanceof AllSelection;\n    }\n  }, {\n    key: \"getBookmark\",\n    value: function getBookmark() {\n      return AllBookmark;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(doc) {\n      return new AllSelection(doc);\n    }\n  }]);\n  return AllSelection;\n}(Selection);\nSelection.jsonID(\"all\", AllSelection);\nvar AllBookmark = {\n  map: function map() {\n    return this;\n  },\n  resolve: function resolve(doc) {\n    return new AllSelection(doc);\n  }\n};\nfunction findSelectionIn(doc, node, pos, index, dir) {\n  var text = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n  if (node.inlineContent) return TextSelection.create(doc, pos);\n  for (var i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n    var child = node.child(i);\n    if (!child.isAtom) {\n      var inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n      if (inner) return inner;\n    } else if (!text && NodeSelection.isSelectable(child)) {\n      return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n    }\n    pos += child.nodeSize * dir;\n  }\n  return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n  var last = tr.steps.length - 1;\n  if (last < startLen) return;\n  var step = tr.steps[last];\n  if (!(step instanceof prosemirrorTransform.ReplaceStep || step instanceof prosemirrorTransform.ReplaceAroundStep)) return;\n  var map = tr.mapping.maps[last],\n    end;\n  map.forEach(function (_from, _to, _newFrom, newTo) {\n    if (end == null) end = newTo;\n  });\n  tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\nvar UPDATED_SEL = 1,\n  UPDATED_MARKS = 2,\n  UPDATED_SCROLL = 4;\nvar Transaction = function (_prosemirrorTransform) {\n  _inherits(Transaction, _prosemirrorTransform);\n  var _super4 = _createSuper(Transaction);\n  function Transaction(state) {\n    var _this2;\n    _classCallCheck(this, Transaction);\n    _this2 = _super4.call(this, state.doc);\n    _this2.curSelectionFor = 0;\n    _this2.updated = 0;\n    _this2.meta = Object.create(null);\n    _this2.time = Date.now();\n    _this2.curSelection = state.selection;\n    _this2.storedMarks = state.storedMarks;\n    return _this2;\n  }\n  _createClass(Transaction, [{\n    key: \"selection\",\n    get: function get() {\n      if (this.curSelectionFor < this.steps.length) {\n        this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n        this.curSelectionFor = this.steps.length;\n      }\n      return this.curSelection;\n    }\n  }, {\n    key: \"setSelection\",\n    value: function setSelection(selection) {\n      if (selection.$from.doc != this.doc) throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n      this.curSelection = selection;\n      this.curSelectionFor = this.steps.length;\n      this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n      this.storedMarks = null;\n      return this;\n    }\n  }, {\n    key: \"selectionSet\",\n    get: function get() {\n      return (this.updated & UPDATED_SEL) > 0;\n    }\n  }, {\n    key: \"setStoredMarks\",\n    value: function setStoredMarks(marks) {\n      this.storedMarks = marks;\n      this.updated |= UPDATED_MARKS;\n      return this;\n    }\n  }, {\n    key: \"ensureMarks\",\n    value: function ensureMarks(marks) {\n      if (!prosemirrorModel.Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks)) this.setStoredMarks(marks);\n      return this;\n    }\n  }, {\n    key: \"addStoredMark\",\n    value: function addStoredMark(mark) {\n      return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n    }\n  }, {\n    key: \"removeStoredMark\",\n    value: function removeStoredMark(mark) {\n      return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n    }\n  }, {\n    key: \"storedMarksSet\",\n    get: function get() {\n      return (this.updated & UPDATED_MARKS) > 0;\n    }\n  }, {\n    key: \"addStep\",\n    value: function addStep(step, doc) {\n      _get(_getPrototypeOf(Transaction.prototype), \"addStep\", this).call(this, step, doc);\n      this.updated = this.updated & ~UPDATED_MARKS;\n      this.storedMarks = null;\n    }\n  }, {\n    key: \"setTime\",\n    value: function setTime(time) {\n      this.time = time;\n      return this;\n    }\n  }, {\n    key: \"replaceSelection\",\n    value: function replaceSelection(slice) {\n      this.selection.replace(this, slice);\n      return this;\n    }\n  }, {\n    key: \"replaceSelectionWith\",\n    value: function replaceSelectionWith(node) {\n      var inheritMarks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var selection = this.selection;\n      if (inheritMarks) node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : selection.$from.marksAcross(selection.$to) || prosemirrorModel.Mark.none));\n      selection.replaceWith(this, node);\n      return this;\n    }\n  }, {\n    key: \"deleteSelection\",\n    value: function deleteSelection() {\n      this.selection.replace(this);\n      return this;\n    }\n  }, {\n    key: \"insertText\",\n    value: function insertText(text, from, to) {\n      var schema = this.doc.type.schema;\n      if (from == null) {\n        if (!text) return this.deleteSelection();\n        return this.replaceSelectionWith(schema.text(text), true);\n      } else {\n        if (to == null) to = from;\n        if (!text) return this.deleteRange(from, to);\n        var marks = this.storedMarks;\n        if (!marks) {\n          var $from = this.doc.resolve(from);\n          marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n        }\n        this.replaceRangeWith(from, to, schema.text(text, marks));\n        if (!this.selection.empty && this.selection.to == from + text.length) this.setSelection(Selection.near(this.selection.$to));\n        return this;\n      }\n    }\n  }, {\n    key: \"setMeta\",\n    value: function setMeta(key, value) {\n      this.meta[typeof key == \"string\" ? key : key.key] = value;\n      return this;\n    }\n  }, {\n    key: \"getMeta\",\n    value: function getMeta(key) {\n      return this.meta[typeof key == \"string\" ? key : key.key];\n    }\n  }, {\n    key: \"isGeneric\",\n    get: function get() {\n      for (var _ in this.meta) return false;\n      return true;\n    }\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView() {\n      this.updated |= UPDATED_SCROLL;\n      return this;\n    }\n  }, {\n    key: \"scrolledIntoView\",\n    get: function get() {\n      return (this.updated & UPDATED_SCROLL) > 0;\n    }\n  }]);\n  return Transaction;\n}(prosemirrorTransform.Transform);\nfunction bind(f, self) {\n  return !self || !f ? f : f.bind(self);\n}\nvar FieldDesc = _createClass(function FieldDesc(name, desc, self) {\n  _classCallCheck(this, FieldDesc);\n  this.name = name;\n  this.init = bind(desc.init, self);\n  this.apply = bind(desc.apply, self);\n});\nvar baseFields = [new FieldDesc(\"doc\", {\n  init: function init(config) {\n    return config.doc || config.schema.topNodeType.createAndFill();\n  },\n  apply: function apply(tr) {\n    return tr.doc;\n  }\n}), new FieldDesc(\"selection\", {\n  init: function init(config, instance) {\n    return config.selection || Selection.atStart(instance.doc);\n  },\n  apply: function apply(tr) {\n    return tr.selection;\n  }\n}), new FieldDesc(\"storedMarks\", {\n  init: function init(config) {\n    return config.storedMarks || null;\n  },\n  apply: function apply(tr, _marks, _old, state) {\n    return state.selection.$cursor ? tr.storedMarks : null;\n  }\n}), new FieldDesc(\"scrollToSelection\", {\n  init: function init() {\n    return 0;\n  },\n  apply: function apply(tr, prev) {\n    return tr.scrolledIntoView ? prev + 1 : prev;\n  }\n})];\nvar Configuration = _createClass(function Configuration(schema, plugins) {\n  var _this3 = this;\n  _classCallCheck(this, Configuration);\n  this.schema = schema;\n  this.plugins = [];\n  this.pluginsByKey = Object.create(null);\n  this.fields = baseFields.slice();\n  if (plugins) plugins.forEach(function (plugin) {\n    if (_this3.pluginsByKey[plugin.key]) throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n    _this3.plugins.push(plugin);\n    _this3.pluginsByKey[plugin.key] = plugin;\n    if (plugin.spec.state) _this3.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n  });\n});\nvar EditorState = function () {\n  function EditorState(config) {\n    _classCallCheck(this, EditorState);\n    this.config = config;\n  }\n  _createClass(EditorState, [{\n    key: \"schema\",\n    get: function get() {\n      return this.config.schema;\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return this.config.plugins;\n    }\n  }, {\n    key: \"apply\",\n    value: function apply(tr) {\n      return this.applyTransaction(tr).state;\n    }\n  }, {\n    key: \"filterTransaction\",\n    value: function filterTransaction(tr) {\n      var ignore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n      for (var i = 0; i < this.config.plugins.length; i++) if (i != ignore) {\n        var plugin = this.config.plugins[i];\n        if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this)) return false;\n      }\n      return true;\n    }\n  }, {\n    key: \"applyTransaction\",\n    value: function applyTransaction(rootTr) {\n      if (!this.filterTransaction(rootTr)) return {\n        state: this,\n        transactions: []\n      };\n      var trs = [rootTr],\n        newState = this.applyInner(rootTr),\n        seen = null;\n      for (;;) {\n        var haveNew = false;\n        for (var i = 0; i < this.config.plugins.length; i++) {\n          var plugin = this.config.plugins[i];\n          if (plugin.spec.appendTransaction) {\n            var n = seen ? seen[i].n : 0,\n              oldState = seen ? seen[i].state : this;\n            var tr = n < trs.length && plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n            if (tr && newState.filterTransaction(tr, i)) {\n              tr.setMeta(\"appendedTransaction\", rootTr);\n              if (!seen) {\n                seen = [];\n                for (var j = 0; j < this.config.plugins.length; j++) seen.push(j < i ? {\n                  state: newState,\n                  n: trs.length\n                } : {\n                  state: this,\n                  n: 0\n                });\n              }\n              trs.push(tr);\n              newState = newState.applyInner(tr);\n              haveNew = true;\n            }\n            if (seen) seen[i] = {\n              state: newState,\n              n: trs.length\n            };\n          }\n        }\n        if (!haveNew) return {\n          state: newState,\n          transactions: trs\n        };\n      }\n    }\n  }, {\n    key: \"applyInner\",\n    value: function applyInner(tr) {\n      if (!tr.before.eq(this.doc)) throw new RangeError(\"Applying a mismatched transaction\");\n      var newInstance = new EditorState(this.config),\n        fields = this.config.fields;\n      for (var i = 0; i < fields.length; i++) {\n        var field = fields[i];\n        newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n      }\n      return newInstance;\n    }\n  }, {\n    key: \"tr\",\n    get: function get() {\n      return new Transaction(this);\n    }\n  }, {\n    key: \"reconfigure\",\n    value: function reconfigure(config) {\n      var $config = new Configuration(this.schema, config.plugins);\n      var fields = $config.fields,\n        instance = new EditorState($config);\n      for (var i = 0; i < fields.length; i++) {\n        var name = fields[i].name;\n        instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n      }\n      return instance;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON(pluginFields) {\n      var result = {\n        doc: this.doc.toJSON(),\n        selection: this.selection.toJSON()\n      };\n      if (this.storedMarks) result.storedMarks = this.storedMarks.map(function (m) {\n        return m.toJSON();\n      });\n      if (pluginFields && _typeof(pluginFields) == 'object') for (var prop in pluginFields) {\n        if (prop == \"doc\" || prop == \"selection\") throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n        var plugin = pluginFields[prop],\n          state = plugin.spec.state;\n        if (state && state.toJSON) result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n      }\n      return result;\n    }\n  }], [{\n    key: \"create\",\n    value: function create(config) {\n      var $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n      var instance = new EditorState($config);\n      for (var i = 0; i < $config.fields.length; i++) instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n      return instance;\n    }\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(config, json, pluginFields) {\n      if (!json) throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n      if (!config.schema) throw new RangeError(\"Required config field 'schema' missing\");\n      var $config = new Configuration(config.schema, config.plugins);\n      var instance = new EditorState($config);\n      $config.fields.forEach(function (field) {\n        if (field.name == \"doc\") {\n          instance.doc = prosemirrorModel.Node.fromJSON(config.schema, json.doc);\n        } else if (field.name == \"selection\") {\n          instance.selection = Selection.fromJSON(instance.doc, json.selection);\n        } else if (field.name == \"storedMarks\") {\n          if (json.storedMarks) instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n        } else {\n          if (pluginFields) for (var prop in pluginFields) {\n            var plugin = pluginFields[prop],\n              state = plugin.spec.state;\n            if (plugin.key == field.name && state && state.fromJSON && Object.prototype.hasOwnProperty.call(json, prop)) {\n              instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n              return;\n            }\n          }\n          instance[field.name] = field.init(config, instance);\n        }\n      });\n      return instance;\n    }\n  }]);\n  return EditorState;\n}();\nfunction bindProps(obj, self, target) {\n  for (var prop in obj) {\n    var val = obj[prop];\n    if (val instanceof Function) val = val.bind(self);else if (prop == \"handleDOMEvents\") val = bindProps(val, self, {});\n    target[prop] = val;\n  }\n  return target;\n}\nvar Plugin = function () {\n  function Plugin(spec) {\n    _classCallCheck(this, Plugin);\n    this.spec = spec;\n    this.props = {};\n    if (spec.props) bindProps(spec.props, this, this.props);\n    this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n  }\n  _createClass(Plugin, [{\n    key: \"getState\",\n    value: function getState(state) {\n      return state[this.key];\n    }\n  }]);\n  return Plugin;\n}();\nvar keys = Object.create(null);\nfunction createKey(name) {\n  if (name in keys) return name + \"$\" + ++keys[name];\n  keys[name] = 0;\n  return name + \"$\";\n}\nvar PluginKey = function () {\n  function PluginKey() {\n    var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"key\";\n    _classCallCheck(this, PluginKey);\n    this.key = createKey(name);\n  }\n  _createClass(PluginKey, [{\n    key: \"get\",\n    value: function get(state) {\n      return state.config.pluginsByKey[this.key];\n    }\n  }, {\n    key: \"getState\",\n    value: function getState(state) {\n      return state[this.key];\n    }\n  }]);\n  return PluginKey;\n}();\nexports.AllSelection = AllSelection;\nexports.EditorState = EditorState;\nexports.NodeSelection = NodeSelection;\nexports.Plugin = Plugin;\nexports.PluginKey = PluginKey;\nexports.Selection = Selection;\nexports.SelectionRange = SelectionRange;\nexports.TextSelection = TextSelection;\nexports.Transaction = Transaction;\n","let prosemirror_state = require(\"prosemirror-state\");\nlet prosemirror_model = require(\"prosemirror-model\");\nlet prosemirror_view = require(\"prosemirror-view\");\nlet prosemirror_keymap = require(\"prosemirror-keymap\");\nlet prosemirror_transform = require(\"prosemirror-transform\");\n\n//#region src/tablemap.ts\nlet readFromCache;\nlet addToCache;\nif (typeof WeakMap != \"undefined\") {\n\tlet cache = /* @__PURE__ */ new WeakMap();\n\treadFromCache = (key) => cache.get(key);\n\taddToCache = (key, value) => {\n\t\tcache.set(key, value);\n\t\treturn value;\n\t};\n} else {\n\tconst cache = [];\n\tconst cacheSize = 10;\n\tlet cachePos = 0;\n\treadFromCache = (key) => {\n\t\tfor (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1];\n\t};\n\taddToCache = (key, value) => {\n\t\tif (cachePos == cacheSize) cachePos = 0;\n\t\tcache[cachePos++] = key;\n\t\treturn cache[cachePos++] = value;\n\t};\n}\n/**\n* A table map describes the structure of a given table. To avoid\n* recomputing them all the time, they are cached per table node. To\n* be able to do that, positions saved in the map are relative to the\n* start of the table, rather than the start of the document.\n*\n* @public\n*/\nvar TableMap = class {\n\tconstructor(width, height, map, problems) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.map = map;\n\t\tthis.problems = problems;\n\t}\n\tfindCell(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) {\n\t\t\tconst curPos = this.map[i];\n\t\t\tif (curPos != pos) continue;\n\t\t\tconst left = i % this.width;\n\t\t\tconst top = i / this.width | 0;\n\t\t\tlet right = left + 1;\n\t\t\tlet bottom = top + 1;\n\t\t\tfor (let j = 1; right < this.width && this.map[i + j] == curPos; j++) right++;\n\t\t\tfor (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) bottom++;\n\t\t\treturn {\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom\n\t\t\t};\n\t\t}\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tcolCount(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tnextCell(pos, axis, dir) {\n\t\tconst { left, right, top, bottom } = this.findCell(pos);\n\t\tif (axis == \"horiz\") {\n\t\t\tif (dir < 0 ? left == 0 : right == this.width) return null;\n\t\t\treturn this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n\t\t} else {\n\t\t\tif (dir < 0 ? top == 0 : bottom == this.height) return null;\n\t\t\treturn this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n\t\t}\n\t}\n\trectBetween(a, b) {\n\t\tconst { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);\n\t\tconst { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b);\n\t\treturn {\n\t\t\tleft: Math.min(leftA, leftB),\n\t\t\ttop: Math.min(topA, topB),\n\t\t\tright: Math.max(rightA, rightB),\n\t\t\tbottom: Math.max(bottomA, bottomB)\n\t\t};\n\t}\n\tcellsInRect(rect) {\n\t\tconst result = [];\n\t\tconst seen = {};\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst index = row * this.width + col;\n\t\t\tconst pos = this.map[index];\n\t\t\tif (seen[pos]) continue;\n\t\t\tseen[pos] = true;\n\t\t\tif (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) continue;\n\t\t\tresult.push(pos);\n\t\t}\n\t\treturn result;\n\t}\n\tpositionAt(row, col, table) {\n\t\tfor (let i = 0, rowStart = 0;; i++) {\n\t\t\tconst rowEnd = rowStart + table.child(i).nodeSize;\n\t\t\tif (i == row) {\n\t\t\t\tlet index = col + row * this.width;\n\t\t\t\tconst rowEndIndex = (row + 1) * this.width;\n\t\t\t\twhile (index < rowEndIndex && this.map[index] < rowStart) index++;\n\t\t\t\treturn index == rowEndIndex ? rowEnd - 1 : this.map[index];\n\t\t\t}\n\t\t\trowStart = rowEnd;\n\t\t}\n\t}\n\tstatic get(table) {\n\t\treturn readFromCache(table) || addToCache(table, computeMap(table));\n\t}\n};\nfunction computeMap(table) {\n\tif (table.type.spec.tableRole != \"table\") throw new RangeError(\"Not a table node: \" + table.type.name);\n\tconst width = findWidth(table), height = table.childCount;\n\tconst map = [];\n\tlet mapPos = 0;\n\tlet problems = null;\n\tconst colWidths = [];\n\tfor (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n\tfor (let row = 0, pos = 0; row < height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tpos++;\n\t\tfor (let i = 0;; i++) {\n\t\t\twhile (mapPos < map.length && map[mapPos] != 0) mapPos++;\n\t\t\tif (i == rowNode.childCount) break;\n\t\t\tconst cellNode = rowNode.child(i);\n\t\t\tconst { colspan, rowspan, colwidth } = cellNode.attrs;\n\t\t\tfor (let h = 0; h < rowspan; h++) {\n\t\t\t\tif (h + row >= height) {\n\t\t\t\t\t(problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"overlong_rowspan\",\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: rowspan - h\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst start = mapPos + h * width;\n\t\t\t\tfor (let w = 0; w < colspan; w++) {\n\t\t\t\t\tif (map[start + w] == 0) map[start + w] = pos;\n\t\t\t\t\telse (problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: colspan - w\n\t\t\t\t\t});\n\t\t\t\t\tconst colW = colwidth && colwidth[w];\n\t\t\t\t\tif (colW) {\n\t\t\t\t\t\tconst widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n\t\t\t\t\t\tif (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n\t\t\t\t\t\t\tcolWidths[widthIndex] = colW;\n\t\t\t\t\t\t\tcolWidths[widthIndex + 1] = 1;\n\t\t\t\t\t\t} else if (prev == colW) colWidths[widthIndex + 1]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapPos += colspan;\n\t\t\tpos += cellNode.nodeSize;\n\t\t}\n\t\tconst expectedPos = (row + 1) * width;\n\t\tlet missing = 0;\n\t\twhile (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n\t\tif (missing) (problems || (problems = [])).push({\n\t\t\ttype: \"missing\",\n\t\t\trow,\n\t\t\tn: missing\n\t\t});\n\t\tpos++;\n\t}\n\tif (width === 0 || height === 0) (problems || (problems = [])).push({ type: \"zero_sized\" });\n\tconst tableMap = new TableMap(width, height, map, problems);\n\tlet badWidths = false;\n\tfor (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n\tif (badWidths) findBadColWidths(tableMap, colWidths, table);\n\treturn tableMap;\n}\nfunction findWidth(table) {\n\tlet width = -1;\n\tlet hasRowSpan = false;\n\tfor (let row = 0; row < table.childCount; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tlet rowWidth = 0;\n\t\tif (hasRowSpan) for (let j = 0; j < row; j++) {\n\t\t\tconst prevRow = table.child(j);\n\t\t\tfor (let i = 0; i < prevRow.childCount; i++) {\n\t\t\t\tconst cell = prevRow.child(i);\n\t\t\t\tif (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < rowNode.childCount; i++) {\n\t\t\tconst cell = rowNode.child(i);\n\t\t\trowWidth += cell.attrs.colspan;\n\t\t\tif (cell.attrs.rowspan > 1) hasRowSpan = true;\n\t\t}\n\t\tif (width == -1) width = rowWidth;\n\t\telse if (width != rowWidth) width = Math.max(width, rowWidth);\n\t}\n\treturn width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n\tif (!map.problems) map.problems = [];\n\tconst seen = {};\n\tfor (let i = 0; i < map.map.length; i++) {\n\t\tconst pos = map.map[i];\n\t\tif (seen[pos]) continue;\n\t\tseen[pos] = true;\n\t\tconst node = table.nodeAt(pos);\n\t\tif (!node) throw new RangeError(`No cell with offset ${pos} found`);\n\t\tlet updated = null;\n\t\tconst attrs = node.attrs;\n\t\tfor (let j = 0; j < attrs.colspan; j++) {\n\t\t\tconst colWidth = colWidths[(i + j) % map.width * 2];\n\t\t\tif (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n\t\t}\n\t\tif (updated) map.problems.unshift({\n\t\t\ttype: \"colwidth mismatch\",\n\t\t\tpos,\n\t\t\tcolwidth: updated\n\t\t});\n\t}\n}\nfunction freshColWidth(attrs) {\n\tif (attrs.colwidth) return attrs.colwidth.slice();\n\tconst result = [];\n\tfor (let i = 0; i < attrs.colspan; i++) result.push(0);\n\treturn result;\n}\n\n//#endregion\n//#region src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n\tif (typeof dom === \"string\") return {};\n\tconst widthAttr = dom.getAttribute(\"data-colwidth\");\n\tconst widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n\tconst colspan = Number(dom.getAttribute(\"colspan\") || 1);\n\tconst result = {\n\t\tcolspan,\n\t\trowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n\t\tcolwidth: widths && widths.length == colspan ? widths : null\n\t};\n\tfor (const prop in extraAttrs) {\n\t\tconst getter = extraAttrs[prop].getFromDOM;\n\t\tconst value = getter && getter(dom);\n\t\tif (value != null) result[prop] = value;\n\t}\n\treturn result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n\tconst attrs = {};\n\tif (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n\tif (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n\tif (node.attrs.colwidth) attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n\tfor (const prop in extraAttrs) {\n\t\tconst setter = extraAttrs[prop].setDOMAttr;\n\t\tif (setter) setter(node.attrs[prop], attrs);\n\t}\n\treturn attrs;\n}\nfunction validateColwidth(value) {\n\tif (value === null) return;\n\tif (!Array.isArray(value)) throw new TypeError(\"colwidth must be null or an array\");\n\tfor (const item of value) if (typeof item !== \"number\") throw new TypeError(\"colwidth must be null or an array of numbers\");\n}\n/**\n* This function creates a set of [node\n* specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n* `table`, `table_row`, and `table_cell` nodes types as used by this\n* module. The result can then be added to the set of nodes when\n* creating a schema.\n*\n* @public\n*/\nfunction tableNodes(options) {\n\tconst extraAttrs = options.cellAttributes || {};\n\tconst cellAttrs = {\n\t\tcolspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\trowspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\tcolwidth: {\n\t\t\tdefault: null,\n\t\t\tvalidate: validateColwidth\n\t\t}\n\t};\n\tfor (const prop in extraAttrs) cellAttrs[prop] = {\n\t\tdefault: extraAttrs[prop].default,\n\t\tvalidate: extraAttrs[prop].validate\n\t};\n\treturn {\n\t\ttable: {\n\t\t\tcontent: \"table_row+\",\n\t\t\ttableRole: \"table\",\n\t\t\tisolating: true,\n\t\t\tgroup: options.tableGroup,\n\t\t\tparseDOM: [{ tag: \"table\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"table\", [\"tbody\", 0]];\n\t\t\t}\n\t\t},\n\t\ttable_row: {\n\t\t\tcontent: \"(table_cell | table_header)*\",\n\t\t\ttableRole: \"row\",\n\t\t\tparseDOM: [{ tag: \"tr\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"tr\", 0];\n\t\t\t}\n\t\t},\n\t\ttable_cell: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"td\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"td\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\ttable_header: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"header_cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"th\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"th\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t};\n}\n/**\n* @public\n*/\nfunction tableNodeTypes(schema) {\n\tlet result = schema.cached.tableNodeTypes;\n\tif (!result) {\n\t\tresult = schema.cached.tableNodeTypes = {};\n\t\tfor (const name in schema.nodes) {\n\t\t\tconst type = schema.nodes[name], role = type.spec.tableRole;\n\t\t\tif (role) result[role] = type;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/util.ts\n/**\n* @public\n*/\nconst tableEditingKey = new prosemirror_state.PluginKey(\"selectingCells\");\n/**\n* @public\n*/\nfunction cellAround($pos) {\n\tfor (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"row\") return $pos.node(0).resolve($pos.before(d + 1));\n\treturn null;\n}\nfunction cellWrapping($pos) {\n\tfor (let d = $pos.depth; d > 0; d--) {\n\t\tconst role = $pos.node(d).type.spec.tableRole;\n\t\tif (role === \"cell\" || role === \"header_cell\") return $pos.node(d);\n\t}\n\treturn null;\n}\n/**\n* @public\n*/\nfunction isInTable(state) {\n\tconst $head = state.selection.$head;\n\tfor (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == \"row\") return true;\n\treturn false;\n}\n/**\n* @internal\n*/\nfunction selectionCell(state) {\n\tconst sel = state.selection;\n\tif (\"$anchorCell\" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n\telse if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") return sel.$anchor;\n\tconst $cell = cellAround(sel.$head) || cellNear(sel.$head);\n\tif ($cell) return $cell;\n\tthrow new RangeError(`No cell found around position ${sel.head}`);\n}\n/**\n* @public\n*/\nfunction cellNear($pos) {\n\tfor (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n\t\tconst role = after.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos);\n\t}\n\tfor (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n\t\tconst role = before.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos - before.nodeSize);\n\t}\n}\n/**\n* @public\n*/\nfunction pointsAtCell($pos) {\n\treturn $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\n/**\n* @public\n*/\nfunction moveCellForward($pos) {\n\treturn $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\n/**\n* @internal\n*/\nfunction inSameTable($cellA, $cellB) {\n\treturn $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\n/**\n* @public\n*/\nfunction findCell($pos) {\n\treturn TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction colCount($pos) {\n\treturn TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction nextCell($pos, axis, dir) {\n\tconst table = $pos.node(-1);\n\tconst map = TableMap.get(table);\n\tconst tableStart = $pos.start(-1);\n\tconst moved = map.nextCell($pos.pos - tableStart, axis, dir);\n\treturn moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\n/**\n* @public\n*/\nfunction removeColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan - n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tresult.colwidth.splice(pos, n);\n\t\tif (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction addColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan + n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tfor (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction columnIsHeader(map, table, col) {\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let row = 0; row < map.height; row++) if (table.nodeAt(map.map[col + row * map.width]).type != headerCell) return false;\n\treturn true;\n}\n\n//#endregion\n//#region src/cellselection.ts\n/**\n* A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n* subclass that represents a cell selection spanning part of a table.\n* With the plugin enabled, these will be created when the user\n* selects across cells, and will be drawn by giving selected cells a\n* `selectedCell` CSS class.\n*\n* @public\n*/\nvar CellSelection = class CellSelection extends prosemirror_state.Selection {\n\tconstructor($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst rect = map.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tconst cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n\t\tcells.unshift($headCell.pos - tableStart);\n\t\tconst ranges = cells.map((pos) => {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\tconst from = tableStart + pos + 1;\n\t\t\treturn new prosemirror_state.SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));\n\t\t});\n\t\tsuper(ranges[0].$from, ranges[0].$to, ranges);\n\t\tthis.$anchorCell = $anchorCell;\n\t\tthis.$headCell = $headCell;\n\t}\n\tmap(doc, mapping) {\n\t\tconst $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n\t\tconst $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n\t\tif (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n\t\t\tconst tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n\t\t\tif (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell);\n\t\t\telse if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell);\n\t\t\telse return new CellSelection($anchorCell, $headCell);\n\t\t}\n\t\treturn prosemirror_state.TextSelection.between($anchorCell, $headCell);\n\t}\n\tcontent() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst rect = map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);\n\t\tconst seen = {};\n\t\tconst rows = [];\n\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\tconst rowContent = [];\n\t\t\tfor (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n\t\t\t\tconst pos = map.map[index];\n\t\t\t\tif (seen[pos]) continue;\n\t\t\t\tseen[pos] = true;\n\t\t\t\tconst cellRect = map.findCell(pos);\n\t\t\t\tlet cell = table.nodeAt(pos);\n\t\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\t\tconst extraLeft = rect.left - cellRect.left;\n\t\t\t\tconst extraRight = cellRect.right - rect.right;\n\t\t\t\tif (extraLeft > 0 || extraRight > 0) {\n\t\t\t\t\tlet attrs = cell.attrs;\n\t\t\t\t\tif (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);\n\t\t\t\t\tif (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);\n\t\t\t\t\tif (cellRect.left < rect.left) {\n\t\t\t\t\t\tcell = cell.type.createAndFill(attrs);\n\t\t\t\t\t\tif (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);\n\t\t\t\t\t} else cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\tif (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t...cell.attrs,\n\t\t\t\t\t\trowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n\t\t\t\t\t};\n\t\t\t\t\tif (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);\n\t\t\t\t\telse cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\trowContent.push(cell);\n\t\t\t}\n\t\t\trows.push(table.child(row).copy(prosemirror_model.Fragment.from(rowContent)));\n\t\t}\n\t\tconst fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n\t\treturn new prosemirror_model.Slice(prosemirror_model.Fragment.from(fragment), 1, 1);\n\t}\n\treplace(tr, content = prosemirror_model.Slice.empty) {\n\t\tconst mapFrom = tr.steps.length, ranges = this.ranges;\n\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\tconst { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n\t\t\ttr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? prosemirror_model.Slice.empty : content);\n\t\t}\n\t\tconst sel = prosemirror_state.Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n\t\tif (sel) tr.setSelection(sel);\n\t}\n\treplaceWith(tr, node) {\n\t\tthis.replace(tr, new prosemirror_model.Slice(prosemirror_model.Fragment.from(node), 0, 0));\n\t}\n\tforEachCell(f) {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));\n\t\tfor (let i = 0; i < cells.length; i++) f(table.nodeAt(cells[i]), tableStart + cells[i]);\n\t}\n\tisColSelection() {\n\t\tconst anchorTop = this.$anchorCell.index(-1);\n\t\tconst headTop = this.$headCell.index(-1);\n\t\tif (Math.min(anchorTop, headTop) > 0) return false;\n\t\tconst anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n\t\tconst headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n\t\treturn Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n\t}\n\tstatic colSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.top <= headRect.top) {\n\t\t\tif (anchorRect.top > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n\t\t\tif (headRect.bottom < map.height) $headCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]);\n\t\t} else {\n\t\t\tif (headRect.top > 0) $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n\t\t\tif (anchorRect.bottom < map.height) $anchorCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\tisRowSelection() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n\t\tconst headLeft = map.colCount(this.$headCell.pos - tableStart);\n\t\tif (Math.min(anchorLeft, headLeft) > 0) return false;\n\t\tconst anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n\t\tconst headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n\t\treturn Math.max(anchorRight, headRight) == map.width;\n\t}\n\teq(other) {\n\t\treturn other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n\t}\n\tstatic rowSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.left <= headRect.left) {\n\t\t\tif (anchorRect.left > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.top * map.width]);\n\t\t\tif (headRect.right < map.width) $headCell = doc.resolve(tableStart + map.map[map.width * (headRect.top + 1) - 1]);\n\t\t} else {\n\t\t\tif (headRect.left > 0) $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n\t\t\tif (anchorRect.right < map.width) $anchorCell = doc.resolve(tableStart + map.map[map.width * (anchorRect.top + 1) - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\ttype: \"cell\",\n\t\t\tanchor: this.$anchorCell.pos,\n\t\t\thead: this.$headCell.pos\n\t\t};\n\t}\n\tstatic fromJSON(doc, json) {\n\t\treturn new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n\t}\n\tstatic create(doc, anchorCell, headCell = anchorCell) {\n\t\treturn new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n\t}\n\tgetBookmark() {\n\t\treturn new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n\t}\n};\nCellSelection.prototype.visible = false;\nprosemirror_state.Selection.jsonID(\"cell\", CellSelection);\n/**\n* @public\n*/\nvar CellBookmark = class CellBookmark {\n\tconstructor(anchor, head) {\n\t\tthis.anchor = anchor;\n\t\tthis.head = head;\n\t}\n\tmap(mapping) {\n\t\treturn new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n\t}\n\tresolve(doc) {\n\t\tconst $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n\t\tif ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);\n\t\telse return prosemirror_state.Selection.near($headCell, 1);\n\t}\n};\nfunction drawCellSelection(state) {\n\tif (!(state.selection instanceof CellSelection)) return null;\n\tconst cells = [];\n\tstate.selection.forEachCell((node, pos) => {\n\t\tcells.push(prosemirror_view.Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" }));\n\t});\n\treturn prosemirror_view.DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n\tif ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;\n\tlet afterFrom = $from.pos;\n\tlet beforeTo = $to.pos;\n\tlet depth = $from.depth;\n\tfor (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break;\n\tfor (let d = $to.depth; d >= 0; d--, beforeTo--) if ($to.before(d + 1) > $to.start(d)) break;\n\treturn afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n\tlet fromCellBoundaryNode;\n\tlet toCellBoundaryNode;\n\tfor (let i = $from.depth; i > 0; i--) {\n\t\tconst node = $from.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\tfromCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor (let i = $to.depth; i > 0; i--) {\n\t\tconst node = $to.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\ttoCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n\tconst sel = (tr || state).selection;\n\tconst doc = (tr || state).doc;\n\tlet normalize;\n\tlet role;\n\tif (sel instanceof prosemirror_state.NodeSelection && (role = sel.node.type.spec.tableRole)) {\n\t\tif (role == \"cell\" || role == \"header_cell\") normalize = CellSelection.create(doc, sel.from);\n\t\telse if (role == \"row\") {\n\t\t\tconst $cell = doc.resolve(sel.from + 1);\n\t\t\tnormalize = CellSelection.rowSelection($cell, $cell);\n\t\t} else if (!allowTableNodeSelection) {\n\t\t\tconst map = TableMap.get(sel.node);\n\t\t\tconst start = sel.from + 1;\n\t\t\tconst lastCell = start + map.map[map.width * map.height - 1];\n\t\t\tnormalize = CellSelection.create(doc, start + 1, lastCell);\n\t\t}\n\t} else if (sel instanceof prosemirror_state.TextSelection && isCellBoundarySelection(sel)) normalize = prosemirror_state.TextSelection.create(doc, sel.from);\n\telse if (sel instanceof prosemirror_state.TextSelection && isTextSelectionAcrossCells(sel)) normalize = prosemirror_state.TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n\tif (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n\treturn tr;\n}\n\n//#endregion\n//#region src/fixtables.ts\n/**\n* @public\n*/\nconst fixTablesKey = new prosemirror_state.PluginKey(\"fix-tables\");\n/**\n* Helper for iterating through the nodes in a document that changed\n* compared to the given previous document. Useful for avoiding\n* duplicate work on each transaction.\n*\n* @public\n*/\nfunction changedDescendants(old, cur, offset, f) {\n\tconst oldSize = old.childCount, curSize = cur.childCount;\n\touter: for (let i = 0, j = 0; i < curSize; i++) {\n\t\tconst child = cur.child(i);\n\t\tfor (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) if (old.child(scan) == child) {\n\t\t\tj = scan + 1;\n\t\t\toffset += child.nodeSize;\n\t\t\tcontinue outer;\n\t\t}\n\t\tf(child, offset);\n\t\tif (j < oldSize && old.child(j).sameMarkup(child)) changedDescendants(old.child(j), child, offset + 1, f);\n\t\telse child.nodesBetween(0, child.content.size, f, offset + 1);\n\t\toffset += child.nodeSize;\n\t}\n}\n/**\n* Inspect all tables in the given state's document and return a\n* transaction that fixes them, if necessary. If `oldState` was\n* provided, that is assumed to hold a previous, known-good state,\n* which will be used to avoid re-scanning unchanged parts of the\n* document.\n*\n* @public\n*/\nfunction fixTables(state, oldState) {\n\tlet tr;\n\tconst check = (node, pos) => {\n\t\tif (node.type.spec.tableRole == \"table\") tr = fixTable(state, node, pos, tr);\n\t};\n\tif (!oldState) state.doc.descendants(check);\n\telse if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check);\n\treturn tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n\tconst map = TableMap.get(table);\n\tif (!map.problems) return tr;\n\tif (!tr) tr = state.tr;\n\tconst mustAdd = [];\n\tfor (let i = 0; i < map.height; i++) mustAdd.push(0);\n\tfor (let i = 0; i < map.problems.length; i++) {\n\t\tconst prob = map.problems[i];\n\t\tif (prob.type == \"collision\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\tconst attrs = cell.attrs;\n\t\t\tfor (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n));\n\t\t} else if (prob.type == \"missing\") mustAdd[prob.row] += prob.n;\n\t\telse if (prob.type == \"overlong_rowspan\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - prob.n\n\t\t\t});\n\t\t} else if (prob.type == \"colwidth mismatch\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\tcolwidth: prob.colwidth\n\t\t\t});\n\t\t} else if (prob.type == \"zero_sized\") {\n\t\t\tconst pos = tr.mapping.map(tablePos);\n\t\t\ttr.delete(pos, pos + table.nodeSize);\n\t\t}\n\t}\n\tlet first, last;\n\tfor (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {\n\t\tif (first == null) first = i;\n\t\tlast = i;\n\t}\n\tfor (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n\t\tconst row = table.child(i);\n\t\tconst end = pos + row.nodeSize;\n\t\tconst add = mustAdd[i];\n\t\tif (add > 0) {\n\t\t\tlet role = \"cell\";\n\t\t\tif (row.firstChild) role = row.firstChild.type.spec.tableRole;\n\t\t\tconst nodes = [];\n\t\t\tfor (let j = 0; j < add; j++) {\n\t\t\t\tconst node = tableNodeTypes(state.schema)[role].createAndFill();\n\t\t\t\tif (node) nodes.push(node);\n\t\t\t}\n\t\t\tconst side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n\t\t\ttr.insert(tr.mapping.map(side), nodes);\n\t\t}\n\t\tpos = end;\n\t}\n\treturn tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n//#endregion\n//#region src/utils/convert.ts\n/**\n* This function will transform the table node into a matrix of rows and columns\n* respecting merged cells, for example this table:\n*\n* ```\n* ┌──────┬──────┬─────────────┐\n* │  A1  │  B1  │     C1      │\n* ├──────┼──────┴──────┬──────┤\n* │  A2  │     B2      │      │\n* ├──────┼─────────────┤  D1  │\n* │  A3  │  B3  │  C3  │      │\n* └──────┴──────┴──────┴──────┘\n* ```\n*\n* will be converted to the below:\n*\n* ```javascript\n* [\n*   [A1, B1, C1, null],\n*   [A2, B2, null, D1],\n*   [A3, B3, C3, null],\n* ]\n* ```\n* @internal\n*/\nfunction convertTableNodeToArrayOfRows(tableNode) {\n\tconst map = TableMap.get(tableNode);\n\tconst rows = [];\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst row = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cellIndex = rowIndex * colCount$1 + colIndex;\n\t\t\tconst cellPos = map.map[cellIndex];\n\t\t\tif (rowIndex > 0) {\n\t\t\t\tconst topCellIndex = cellIndex - colCount$1;\n\t\t\t\tif (cellPos === map.map[topCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (colIndex > 0) {\n\t\t\t\tconst leftCellIndex = cellIndex - 1;\n\t\t\t\tif (cellPos === map.map[leftCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.push(tableNode.nodeAt(cellPos));\n\t\t}\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n/**\n* Convert an array of rows to a table node.\n*\n* @internal\n*/\nfunction convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n\tconst newRows = [];\n\tconst map = TableMap.get(tableNode);\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst oldRow = tableNode.child(rowIndex);\n\t\tconst newCells = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cell = arrayOfNodes[rowIndex][colIndex];\n\t\t\tif (!cell) continue;\n\t\t\tconst cellPos = map.map[rowIndex * map.width + colIndex];\n\t\t\tconst oldCell = tableNode.nodeAt(cellPos);\n\t\t\tif (!oldCell) continue;\n\t\t\tconst newCell = oldCell.type.createChecked(cell.attrs, cell.content, cell.marks);\n\t\t\tnewCells.push(newCell);\n\t\t}\n\t\tconst newRow = oldRow.type.createChecked(oldRow.attrs, newCells, oldRow.marks);\n\t\tnewRows.push(newRow);\n\t}\n\treturn tableNode.type.createChecked(tableNode.attrs, newRows, tableNode.marks);\n}\n\n//#endregion\n//#region src/utils/move-row-in-array-of-rows.ts\n/**\n* Move a row in an array of rows.\n*\n* @internal\n*/\nfunction moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n\tconst direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\tconst rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n\tconst positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n\tlet target;\n\tif (directionOverride === -1 && direction === 1) target = indexesTarget[0] - 1;\n\telse if (directionOverride === 1 && direction === -1) target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n\telse target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n\trows.splice(target, 0, ...rowsExtracted);\n\treturn rows;\n}\n\n//#endregion\n//#region src/utils/query.ts\n/**\n* Checks if the given object is a `CellSelection` instance.\n*\n* @internal\n*/\nfunction isCellSelection(value) {\n\treturn value instanceof CellSelection;\n}\n/**\n* Find the closest table node for a given position.\n*\n* @public\n*/\nfunction findTable($pos) {\n\treturn findParentNode((node) => node.type.spec.tableRole === \"table\", $pos);\n}\n/**\n* Try to find the anchor and head cell in the same table by using the given\n* anchor and head as hit points, or fallback to the selection's anchor and\n* head.\n*\n* @public\n*/\nfunction findCellRange(selection, anchorHit, headHit) {\n\tvar _ref, _ref2;\n\tif (anchorHit == null && headHit == null && isCellSelection(selection)) return [selection.$anchorCell, selection.$headCell];\n\tconst anchor = (_ref = anchorHit !== null && anchorHit !== void 0 ? anchorHit : headHit) !== null && _ref !== void 0 ? _ref : selection.anchor;\n\tconst head = (_ref2 = headHit !== null && headHit !== void 0 ? headHit : anchorHit) !== null && _ref2 !== void 0 ? _ref2 : selection.head;\n\tconst doc = selection.$head.doc;\n\tconst $anchorCell = findCellPos(doc, anchor);\n\tconst $headCell = findCellPos(doc, head);\n\tif ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) return [$anchorCell, $headCell];\n\treturn null;\n}\n/**\n* Try to find a resolved pos of a cell by using the given pos as a hit point.\n*\n* @public\n*/\nfunction findCellPos(doc, pos) {\n\tconst $pos = doc.resolve(pos);\n\treturn cellAround($pos) || cellNear($pos);\n}\n/**\n* Find the closest parent node that satisfies the predicate.\n*\n* @internal\n*/\nfunction findParentNode(predicate, $pos) {\n\tfor (let depth = $pos.depth; depth >= 0; depth -= 1) {\n\t\tconst node = $pos.node(depth);\n\t\tif (predicate(node)) return {\n\t\t\tnode,\n\t\t\tpos: depth === 0 ? 0 : $pos.before(depth),\n\t\t\tstart: $pos.start(depth),\n\t\t\tdepth\n\t\t};\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/get-cells.ts\n/**\n* Returns an array of cells in a column at the specified column index.\n*\n* @internal\n*/\nfunction getCellsInColumn(columnIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (columnIndex < 0 || columnIndex > map.width - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: columnIndex,\n\t\tright: columnIndex + 1,\n\t\ttop: 0,\n\t\tbottom: map.height\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n/**\n* Returns an array of cells in a row at the specified row index.\n*\n* @internal\n*/\nfunction getCellsInRow(rowIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (rowIndex < 0 || rowIndex > map.height - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: 0,\n\t\tright: map.width,\n\t\ttop: rowIndex,\n\t\tbottom: rowIndex + 1\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/utils/selection-range.ts\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* column at index `columnIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-column.ts#editor/editor-tables/src/utils/get-selection-range-in-column.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInColumn(tr, startColIndex, endColIndex = startColIndex) {\n\tlet startIndex = startColIndex;\n\tlet endIndex = endColIndex;\n\tfor (let i = startColIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startColIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInColumn(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n\tconst firstRowCells = getCellsInRow(0, tr.selection);\n\tif (!firstSelectedColumnCells || !firstRowCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst columnCells = getCellsInColumn(i, tr.selection);\n\t\tif (columnCells && columnCells.length > 0) {\n\t\t\tfor (let j = firstRowCells.length - 1; j >= 0; j--) if (firstRowCells[j].pos === columnCells[0].pos) {\n\t\t\t\theadCell = columnCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* row at index `rowIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-row.ts#editor/editor-tables/src/utils/get-selection-range-in-row.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInRow(tr, startRowIndex, endRowIndex = startRowIndex) {\n\tlet startIndex = startRowIndex;\n\tlet endIndex = endRowIndex;\n\tfor (let i = startRowIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startRowIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInRow(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n\tconst firstColumnCells = getCellsInColumn(0, tr.selection);\n\tif (!firstSelectedRowCells || !firstColumnCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst rowCells = getCellsInRow(i, tr.selection);\n\t\tif (rowCells && rowCells.length > 0) {\n\t\t\tfor (let j = firstColumnCells.length - 1; j >= 0; j--) if (firstColumnCells[j].pos === rowCells[0].pos) {\n\t\t\t\theadCell = rowCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n\n//#endregion\n//#region src/utils/transpose.ts\n/**\n* Transposes a 2D array by flipping columns to rows.\n*\n* Transposition is a familiar algebra concept where the matrix is flipped\n* along its diagonal. For more details, see:\n* https://en.wikipedia.org/wiki/Transpose\n*\n* @example\n* ```javascript\n* const arr = [\n*   ['a1', 'a2', 'a3'],\n*   ['b1', 'b2', 'b3'],\n*   ['c1', 'c2', 'c3'],\n*   ['d1', 'd2', 'd3'],\n* ];\n*\n* const result = transpose(arr);\n* result === [\n*   ['a1', 'b1', 'c1', 'd1'],\n*   ['a2', 'b2', 'c2', 'd2'],\n*   ['a3', 'b3', 'c3', 'd3'],\n* ]\n* ```\n*/\nfunction transpose(array) {\n\treturn array[0].map((_, i) => {\n\t\treturn array.map((column) => column[i]);\n\t});\n}\n\n//#endregion\n//#region src/utils/move-column.ts\n/**\n* Move a column from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveColumn(moveColParams) {\n\tvar _getSelectionRangeInC, _getSelectionRangeInC2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveColParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginColumn = (_getSelectionRangeInC = getSelectionRangeInColumn(tr, originIndex)) === null || _getSelectionRangeInC === void 0 ? void 0 : _getSelectionRangeInC.indexes;\n\tconst indexesTargetColumn = (_getSelectionRangeInC2 = getSelectionRangeInColumn(tr, targetIndex)) === null || _getSelectionRangeInC2 === void 0 ? void 0 : _getSelectionRangeInC2.indexes;\n\tif (!indexesOriginColumn || !indexesTargetColumn) return false;\n\tif (indexesOriginColumn.includes(targetIndex)) return false;\n\tconst newTable = moveTableColumn$1(table.node, indexesOriginColumn, indexesTargetColumn, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(map.height - 1, index, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(0, index, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableColumn$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = transpose(convertTableNodeToArrayOfRows(table));\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\trows = transpose(rows);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/utils/move-row.ts\n/**\n* Move a row from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveRow(moveRowParams) {\n\tvar _getSelectionRangeInR, _getSelectionRangeInR2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginRow = (_getSelectionRangeInR = getSelectionRangeInRow(tr, originIndex)) === null || _getSelectionRangeInR === void 0 ? void 0 : _getSelectionRangeInR.indexes;\n\tconst indexesTargetRow = (_getSelectionRangeInR2 = getSelectionRangeInRow(tr, targetIndex)) === null || _getSelectionRangeInR2 === void 0 ? void 0 : _getSelectionRangeInR2.indexes;\n\tif (!indexesOriginRow || !indexesTargetRow) return false;\n\tif (indexesOriginRow.includes(targetIndex)) return false;\n\tconst newTable = moveTableRow$1(table.node, indexesOriginRow, indexesTargetRow, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(index, map.width - 1, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(index, 0, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableRow$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = convertTableNodeToArrayOfRows(table);\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/commands.ts\n/**\n* Helper to get the selected rectangle in a table, if any. Adds table\n* map, table node, and table start offset to the object for\n* convenience.\n*\n* @public\n*/\nfunction selectedRect(state) {\n\tconst sel = state.selection;\n\tconst $pos = selectionCell(state);\n\tconst table = $pos.node(-1);\n\tconst tableStart = $pos.start(-1);\n\tconst map = TableMap.get(table);\n\treturn {\n\t\t...sel instanceof CellSelection ? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map.findCell($pos.pos - tableStart),\n\t\ttableStart,\n\t\tmap,\n\t\ttable\n\t};\n}\n/**\n* Add a column at the given position in a table.\n*\n* @public\n*/\nfunction addColumn(tr, { map, tableStart, table }, col) {\n\tlet refColumn = col > 0 ? -1 : 0;\n\tif (columnIsHeader(map, table, col + refColumn)) refColumn = col == 0 || col == map.width ? null : 0;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = row * map.width + col;\n\t\tif (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n\t\t\tconst pos = map.map[index];\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map.colCount(pos)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t} else {\n\t\t\tconst type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n\t\t\tconst pos = map.positionAt(row, col, table);\n\t\t\ttr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n\t\t}\n\t}\n\treturn tr;\n}\n/**\n* Command to add a column before the column with the selection.\n*\n* @public\n*/\nfunction addColumnBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.left));\n\t}\n\treturn true;\n}\n/**\n* Command to add a column after the column with the selection.\n*\n* @public\n*/\nfunction addColumnAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.right));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n\tconst mapStart = tr.mapping.maps.length;\n\tfor (let row = 0; row < map.height;) {\n\t\tconst index = row * map.width + col;\n\t\tconst pos = map.map[index];\n\t\tconst cell = table.nodeAt(pos);\n\t\tconst attrs = cell.attrs;\n\t\tif (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map.colCount(pos)));\n\t\telse {\n\t\t\tconst start = tr.mapping.slice(mapStart).map(tableStart + pos);\n\t\t\ttr.delete(start, start + cell.nodeSize);\n\t\t}\n\t\trow += attrs.rowspan;\n\t}\n}\n/**\n* Command function that removes the selected columns from a table.\n*\n* @public\n*/\nfunction deleteColumn(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tconst tr = state.tr;\n\t\tif (rect.left == 0 && rect.right == rect.map.width) return false;\n\t\tfor (let i = rect.right - 1;; i--) {\n\t\t\tremoveColumn(tr, rect, i);\n\t\t\tif (i == rect.left) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction rowIsHeader(map, table, row) {\n\tvar _table$nodeAt;\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let col = 0; col < map.width; col++) if (((_table$nodeAt = table.nodeAt(map.map[col + row * map.width])) === null || _table$nodeAt === void 0 ? void 0 : _table$nodeAt.type) != headerCell) return false;\n\treturn true;\n}\n/**\n* @public\n*/\nfunction addRow(tr, { map, tableStart, table }, row) {\n\tlet rowPos = tableStart;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst cells = [];\n\tlet refRow = row > 0 ? -1 : 0;\n\tif (rowIsHeader(map, table, row + refRow)) refRow = row == 0 || row == map.height ? null : 0;\n\tfor (let col = 0, index = map.width * row; col < map.width; col++, index++) if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n\t\tconst pos = map.map[index];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\ttr.setNodeMarkup(tableStart + pos, null, {\n\t\t\t...attrs,\n\t\t\trowspan: attrs.rowspan + 1\n\t\t});\n\t\tcol += attrs.colspan - 1;\n\t} else {\n\t\tvar _table$nodeAt2;\n\t\tconst type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_table$nodeAt2 = table.nodeAt(map.map[index + refRow * map.width])) === null || _table$nodeAt2 === void 0 ? void 0 : _table$nodeAt2.type;\n\t\tconst node = type === null || type === void 0 ? void 0 : type.createAndFill();\n\t\tif (node) cells.push(node);\n\t}\n\ttr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n\treturn tr;\n}\n/**\n* Add a table row before the selection.\n*\n* @public\n*/\nfunction addRowBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.top));\n\t}\n\treturn true;\n}\n/**\n* Add a table row after the selection.\n*\n* @public\n*/\nfunction addRowAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.bottom));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeRow(tr, { map, table, tableStart }, row) {\n\tlet rowPos = 0;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst nextRow = rowPos + table.child(row).nodeSize;\n\tconst mapFrom = tr.mapping.maps.length;\n\ttr.delete(rowPos + tableStart, nextRow + tableStart);\n\tconst seen = /* @__PURE__ */ new Set();\n\tfor (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n\t\tconst pos = map.map[index];\n\t\tif (seen.has(pos)) continue;\n\t\tseen.add(pos);\n\t\tif (row > 0 && pos == map.map[index - map.width]) {\n\t\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n\t\t\t\t...attrs,\n\t\t\t\trowspan: attrs.rowspan - 1\n\t\t\t});\n\t\t\tcol += attrs.colspan - 1;\n\t\t} else if (row < map.height && pos == map.map[index + map.width]) {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst attrs = cell.attrs;\n\t\t\tconst copy = cell.type.create({\n\t\t\t\t...attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - 1\n\t\t\t}, cell.content);\n\t\t\tconst newPos = map.positionAt(row + 1, col, table);\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n\t\t\tcol += attrs.colspan - 1;\n\t\t}\n\t}\n}\n/**\n* Remove the selected rows from a table.\n*\n* @public\n*/\nfunction deleteRow(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\tif (rect.top == 0 && rect.bottom == rect.map.height) return false;\n\t\tfor (let i = rect.bottom - 1;; i--) {\n\t\t\tremoveRow(tr, rect, i);\n\t\t\tif (i == rect.top) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(rect.table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\nfunction isEmpty(cell) {\n\tconst c = cell.content;\n\treturn c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n\tlet indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n\tlet indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n\tfor (let i = rect.top; i < rect.bottom; i++) {\n\t\tif (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1]) return true;\n\t\tindexLeft += width;\n\t\tindexRight += width;\n\t}\n\tfor (let i = rect.left; i < rect.right; i++) {\n\t\tif (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true;\n\t\tindexTop++;\n\t\tindexBottom++;\n\t}\n\treturn false;\n}\n/**\n* Merge the selected cells into a single cell. Only available when\n* the selected cells' outline forms a rectangle.\n*\n* @public\n*/\nfunction mergeCells(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false;\n\tconst rect = selectedRect(state), { map } = rect;\n\tif (cellsOverlapRectangle(map, rect)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst seen = {};\n\t\tlet content = prosemirror_model.Fragment.empty;\n\t\tlet mergedPos;\n\t\tlet mergedCell;\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst cellPos = map.map[row * map.width + col];\n\t\t\tconst cell = rect.table.nodeAt(cellPos);\n\t\t\tif (seen[cellPos] || !cell) continue;\n\t\t\tseen[cellPos] = true;\n\t\t\tif (mergedPos == null) {\n\t\t\t\tmergedPos = cellPos;\n\t\t\t\tmergedCell = cell;\n\t\t\t} else {\n\t\t\t\tif (!isEmpty(cell)) content = content.append(cell.content);\n\t\t\t\tconst mapped = tr.mapping.map(cellPos + rect.tableStart);\n\t\t\t\ttr.delete(mapped, mapped + cell.nodeSize);\n\t\t\t}\n\t\t}\n\t\tif (mergedPos == null || mergedCell == null) return true;\n\t\ttr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n\t\t\t...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan),\n\t\t\trowspan: rect.bottom - rect.top\n\t\t});\n\t\tif (content.size > 0) {\n\t\t\tconst end = mergedPos + 1 + mergedCell.content.size;\n\t\t\tconst start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n\t\t\ttr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n\t\t}\n\t\ttr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells. Use the first cell type for the new cells.\n*\n* @public\n*/\nfunction splitCell(state, dispatch) {\n\tconst nodeTypes = tableNodeTypes(state.schema);\n\treturn splitCellWithType(({ node }) => {\n\t\treturn nodeTypes[node.type.spec.tableRole];\n\t})(state, dispatch);\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells with the cell type (th, td) returned by getType function.\n*\n* @public\n*/\nfunction splitCellWithType(getCellType) {\n\treturn (state, dispatch) => {\n\t\tconst sel = state.selection;\n\t\tlet cellNode;\n\t\tlet cellPos;\n\t\tif (!(sel instanceof CellSelection)) {\n\t\t\tvar _cellAround;\n\t\t\tcellNode = cellWrapping(sel.$from);\n\t\t\tif (!cellNode) return false;\n\t\t\tcellPos = (_cellAround = cellAround(sel.$from)) === null || _cellAround === void 0 ? void 0 : _cellAround.pos;\n\t\t} else {\n\t\t\tif (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n\t\t\tcellNode = sel.$anchorCell.nodeAfter;\n\t\t\tcellPos = sel.$anchorCell.pos;\n\t\t}\n\t\tif (cellNode == null || cellPos == null) return false;\n\t\tif (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) return false;\n\t\tif (dispatch) {\n\t\t\tlet baseAttrs = cellNode.attrs;\n\t\t\tconst attrs = [];\n\t\t\tconst colwidth = baseAttrs.colwidth;\n\t\t\tif (baseAttrs.rowspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\trowspan: 1\n\t\t\t};\n\t\t\tif (baseAttrs.colspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolspan: 1\n\t\t\t};\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tfor (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n\t\t\t} : baseAttrs);\n\t\t\tlet lastCell;\n\t\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\t\tlet pos = rect.map.positionAt(row, rect.left, rect.table);\n\t\t\t\tif (row == rect.top) pos += cellNode.nodeSize;\n\t\t\t\tfor (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n\t\t\t\t\tif (col == rect.left && row == rect.top) continue;\n\t\t\t\t\ttr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({\n\t\t\t\t\t\tnode: cellNode,\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tcol\n\t\t\t\t\t}).createAndFill(attrs[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\ttr.setNodeMarkup(cellPos, getCellType({\n\t\t\t\tnode: cellNode,\n\t\t\t\trow: rect.top,\n\t\t\t\tcol: rect.left\n\t\t\t}), attrs[0]);\n\t\t\tif (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0));\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Returns a command that sets the given attribute to the given value,\n* and is only available when the currently selected cell doesn't\n* already have that attribute set to that value.\n*\n* @public\n*/\nfunction setCellAttr(name, value) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst $cell = selectionCell(state);\n\t\tif ($cell.nodeAfter.attrs[name] === value) return false;\n\t\tif (dispatch) {\n\t\t\tconst tr = state.tr;\n\t\t\tif (state.selection instanceof CellSelection) state.selection.forEachCell((node, pos) => {\n\t\t\t\tif (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t[name]: value\n\t\t\t\t});\n\t\t\t});\n\t\t\telse tr.setNodeMarkup($cell.pos, null, {\n\t\t\t\t...$cell.nodeAfter.attrs,\n\t\t\t\t[name]: value\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction deprecated_toggleHeader(type) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst cells = rect.map.cellsInRect(type == \"column\" ? {\n\t\t\t\tleft: rect.left,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.right,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: rect.top,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: rect.bottom\n\t\t\t} : rect);\n\t\t\tconst nodes = cells.map((pos) => rect.table.nodeAt(pos));\n\t\t\tfor (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs);\n\t\t\tif (tr.steps.length === 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs);\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n\tconst cellPositions = rect.map.cellsInRect({\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: type == \"row\" ? rect.map.width : 1,\n\t\tbottom: type == \"column\" ? rect.map.height : 1\n\t});\n\tfor (let i = 0; i < cellPositions.length; i++) {\n\t\tconst cell = rect.table.nodeAt(cellPositions[i]);\n\t\tif (cell && cell.type !== types.header_cell) return false;\n\t}\n\treturn true;\n}\n/**\n* Toggles between row/column header and normal cells (Only applies to first row/column).\n* For deprecated behavior pass `useDeprecatedLogic` in options with true.\n*\n* @public\n*/\nfunction toggleHeader(type, options) {\n\toptions = options || { useDeprecatedLogic: false };\n\tif (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n\t\t\tconst isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types);\n\t\t\tconst selectionStartsAt = (type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false) ? 1 : 0;\n\t\t\tconst cellsRect = type == \"column\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: selectionStartsAt,\n\t\t\t\tright: 1,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: selectionStartsAt,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: 1\n\t\t\t} : rect;\n\t\t\tconst newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n\t\t\trect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n\t\t\t\tconst cellPos = relativeCellPos + rect.tableStart;\n\t\t\t\tconst cell = tr.doc.nodeAt(cellPos);\n\t\t\t\tif (cell) tr.setNodeMarkup(cellPos, newType, cell.attrs);\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Toggles whether the selected row contains header cells.\n*\n* @public\n*/\nconst toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected column contains header cells.\n*\n* @public\n*/\nconst toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected cells are header cells.\n*\n* @public\n*/\nconst toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true });\nfunction findNextCell($cell, dir) {\n\tif (dir < 0) {\n\t\tconst before = $cell.nodeBefore;\n\t\tif (before) return $cell.pos - before.nodeSize;\n\t\tfor (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n\t\t\tconst rowNode = $cell.node(-1).child(row);\n\t\t\tconst lastChild = rowNode.lastChild;\n\t\t\tif (lastChild) return rowEnd - 1 - lastChild.nodeSize;\n\t\t\trowEnd -= rowNode.nodeSize;\n\t\t}\n\t} else {\n\t\tif ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize;\n\t\tconst table = $cell.node(-1);\n\t\tfor (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n\t\t\tconst rowNode = table.child(row);\n\t\t\tif (rowNode.childCount) return rowStart + 1;\n\t\t\trowStart += rowNode.nodeSize;\n\t\t}\n\t}\n\treturn null;\n}\n/**\n* Returns a command for selecting the next (direction=1) or previous\n* (direction=-1) cell in a table.\n*\n* @public\n*/\nfunction goToNextCell(direction) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst cell = findNextCell(selectionCell(state), direction);\n\t\tif (cell == null) return false;\n\t\tif (dispatch) {\n\t\t\tconst $cell = state.doc.resolve(cell);\n\t\t\tdispatch(state.tr.setSelection(prosemirror_state.TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Deletes the table around the selection, if any.\n*\n* @public\n*/\nfunction deleteTable(state, dispatch) {\n\tconst $pos = state.selection.$anchor;\n\tfor (let d = $pos.depth; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"table\") {\n\t\tif (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView());\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Deletes the content of the selected cells, if they are not empty.\n*\n* @public\n*/\nfunction deleteCellSelection(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n\t\tsel.forEachCell((cell, pos) => {\n\t\t\tif (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new prosemirror_model.Slice(baseContent, 0, 0));\n\t\t});\n\t\tif (tr.docChanged) dispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Move a table row from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableRow(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveRow({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n* Move a table column from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableColumn(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveColumn({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n//#endregion\n//#region src/copypaste.ts\n/**\n* Get a rectangular area of cells from a slice, or null if the outer\n* nodes of the slice aren't table cells or rows.\n*\n* @internal\n*/\nfunction pastedCells(slice) {\n\tif (slice.size === 0) return null;\n\tlet { content, openStart, openEnd } = slice;\n\twhile (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n\t\topenStart--;\n\t\topenEnd--;\n\t\tcontent = content.child(0).content;\n\t}\n\tconst first = content.child(0);\n\tconst role = first.type.spec.tableRole;\n\tconst schema = first.type.schema, rows = [];\n\tif (role == \"row\") for (let i = 0; i < content.childCount; i++) {\n\t\tlet cells = content.child(i).content;\n\t\tconst left = i ? 0 : Math.max(0, openStart - 1);\n\t\tconst right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n\t\tif (left || right) cells = fitSlice(tableNodeTypes(schema).row, new prosemirror_model.Slice(cells, left, right)).content;\n\t\trows.push(cells);\n\t}\n\telse if (role == \"cell\" || role == \"header_cell\") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new prosemirror_model.Slice(content, openStart, openEnd)).content : content);\n\telse return null;\n\treturn ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n\tconst widths = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tfor (let j = row.childCount - 1; j >= 0; j--) {\n\t\t\tconst { rowspan, colspan } = row.child(j).attrs;\n\t\t\tfor (let r = i; r < i + rowspan; r++) widths[r] = (widths[r] || 0) + colspan;\n\t\t}\n\t}\n\tlet width = 0;\n\tfor (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n\tfor (let r = 0; r < widths.length; r++) {\n\t\tif (r >= rows.length) rows.push(prosemirror_model.Fragment.empty);\n\t\tif (widths[r] < width) {\n\t\t\tconst empty = tableNodeTypes(schema).cell.createAndFill();\n\t\t\tconst cells = [];\n\t\t\tfor (let i = widths[r]; i < width; i++) cells.push(empty);\n\t\t\trows[r] = rows[r].append(prosemirror_model.Fragment.from(cells));\n\t\t}\n\t}\n\treturn {\n\t\theight: rows.length,\n\t\twidth,\n\t\trows\n\t};\n}\nfunction fitSlice(nodeType, slice) {\n\tconst node = nodeType.createAndFill();\n\treturn new prosemirror_transform.Transform(node).replace(0, node.content.size, slice).doc;\n}\n/**\n* Clip or extend (repeat) the given set of cells to cover the given\n* width and height. Will clip rowspan/colspan cells at the edges when\n* they stick out.\n*\n* @internal\n*/\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n\tif (width != newWidth) {\n\t\tconst added = [];\n\t\tconst newRows = [];\n\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\tconst frag = rows[row], cells = [];\n\t\t\tfor (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n\t\t\t\tlet cell = frag.child(i % frag.childCount);\n\t\t\t\tif (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t\tcol += cell.attrs.colspan;\n\t\t\t\tfor (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n\t\t\t}\n\t\t\tnewRows.push(prosemirror_model.Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\twidth = newWidth;\n\t}\n\tif (height != newHeight) {\n\t\tconst newRows = [];\n\t\tfor (let row = 0, i = 0; row < newHeight; row++, i++) {\n\t\t\tconst cells = [], source = rows[i % height];\n\t\t\tfor (let j = 0; j < source.childCount; j++) {\n\t\t\t\tlet cell = source.child(j);\n\t\t\t\tif (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({\n\t\t\t\t\t...cell.attrs,\n\t\t\t\t\trowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n\t\t\t\t}, cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t\tnewRows.push(prosemirror_model.Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\theight = newHeight;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\trows\n\t};\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n\tconst schema = tr.doc.type.schema;\n\tconst types = tableNodeTypes(schema);\n\tlet empty;\n\tlet emptyHead;\n\tif (width > map.width) for (let row = 0, rowEnd = 0; row < map.height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\trowEnd += rowNode.nodeSize;\n\t\tconst cells = [];\n\t\tlet add;\n\t\tif (rowNode.lastChild == null || rowNode.lastChild.type == types.cell) add = empty || (empty = types.cell.createAndFill());\n\t\telse add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n\t\tfor (let i = map.width; i < width; i++) cells.push(add);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n\t}\n\tif (height > map.height) {\n\t\tconst cells = [];\n\t\tfor (let i = 0, start$1 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n\t\t\tconst header = i >= map.width ? false : table.nodeAt(map.map[start$1 + i]).type == types.header_cell;\n\t\t\tcells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));\n\t\t}\n\t\tconst emptyRow = types.row.create(null, prosemirror_model.Fragment.from(cells)), rows = [];\n\t\tfor (let i = map.height; i < height; i++) rows.push(emptyRow);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n\t}\n\treturn !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n\tif (top == 0 || top == map.height) return false;\n\tlet found = false;\n\tfor (let col = left; col < right; col++) {\n\t\tconst index = top * map.width + col, pos = map.map[index];\n\t\tif (map.map[index - map.width] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst { top: cellTop, left: cellLeft } = map.findCell(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: top - cellTop\n\t\t\t});\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), cell.type.createAndFill({\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cellTop + cell.attrs.rowspan - top\n\t\t\t}));\n\t\t\tcol += cell.attrs.colspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n\tif (left == 0 || left == map.width) return false;\n\tlet found = false;\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst index = row * map.width + left, pos = map.map[index];\n\t\tif (map.map[index - 1] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst cellLeft = map.colCount(pos);\n\t\t\tconst updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n\t\t\ttr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));\n\t\t\ttr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\n/**\n* Insert the given set of cells (as returned by `pastedCells`) into a\n* table, at the position pointed at by rect.\n*\n* @internal\n*/\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n\tlet table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n\tif (!table) throw new Error(\"No table found\");\n\tlet map = TableMap.get(table);\n\tconst { top, left } = rect;\n\tconst right = left + cells.width, bottom = top + cells.height;\n\tconst tr = state.tr;\n\tlet mapFrom = 0;\n\tfunction recomp() {\n\t\ttable = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n\t\tif (!table) throw new Error(\"No table found\");\n\t\tmap = TableMap.get(table);\n\t\tmapFrom = tr.mapping.maps.length;\n\t}\n\tif (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp();\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n\t\ttr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new prosemirror_model.Slice(cells.rows[row - top], 0, 0));\n\t}\n\trecomp();\n\ttr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));\n\tdispatch(tr);\n}\n\n//#endregion\n//#region src/input.ts\nconst handleKeyDown = (0, prosemirror_keymap.keydownHandler)({\n\tArrowLeft: arrow(\"horiz\", -1),\n\tArrowRight: arrow(\"horiz\", 1),\n\tArrowUp: arrow(\"vert\", -1),\n\tArrowDown: arrow(\"vert\", 1),\n\t\"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n\t\"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n\t\"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n\t\"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\tBackspace: deleteCellSelection,\n\t\"Mod-Backspace\": deleteCellSelection,\n\tDelete: deleteCellSelection,\n\t\"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n\tif (selection.eq(state.selection)) return false;\n\tif (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n\treturn true;\n}\n/**\n* @internal\n*/\nfunction arrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tif (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, prosemirror_state.Selection.near(sel.$headCell, dir));\n\t\tif (axis != \"horiz\" && !sel.empty) return false;\n\t\tconst end = atEndOfCell(view, axis, dir);\n\t\tif (end == null) return false;\n\t\tif (axis == \"horiz\") return maybeSetSelection(state, dispatch, prosemirror_state.Selection.near(state.doc.resolve(sel.head + dir), dir));\n\t\telse {\n\t\t\tconst $cell = state.doc.resolve(end);\n\t\t\tconst $next = nextCell($cell, axis, dir);\n\t\t\tlet newSel;\n\t\t\tif ($next) newSel = prosemirror_state.Selection.near($next, 1);\n\t\t\telse if (dir < 0) newSel = prosemirror_state.Selection.near(state.doc.resolve($cell.before(-1)), -1);\n\t\t\telse newSel = prosemirror_state.Selection.near(state.doc.resolve($cell.after(-1)), 1);\n\t\t\treturn maybeSetSelection(state, dispatch, newSel);\n\t\t}\n\t};\n}\nfunction shiftArrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tlet cellSel;\n\t\tif (sel instanceof CellSelection) cellSel = sel;\n\t\telse {\n\t\t\tconst end = atEndOfCell(view, axis, dir);\n\t\t\tif (end == null) return false;\n\t\t\tcellSel = new CellSelection(state.doc.resolve(end));\n\t\t}\n\t\tconst $head = nextCell(cellSel.$headCell, axis, dir);\n\t\tif (!$head) return false;\n\t\treturn maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head));\n\t};\n}\nfunction handleTripleClick(view, pos) {\n\tconst doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n\tif (!$cell) return false;\n\tview.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n\treturn true;\n}\n/**\n* @public\n*/\nfunction handlePaste(view, _, slice) {\n\tif (!isInTable(view.state)) return false;\n\tlet cells = pastedCells(slice);\n\tconst sel = view.state.selection;\n\tif (sel instanceof CellSelection) {\n\t\tif (!cells) cells = {\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\trows: [prosemirror_model.Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]\n\t\t};\n\t\tconst table = sel.$anchorCell.node(-1);\n\t\tconst start = sel.$anchorCell.start(-1);\n\t\tconst rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start);\n\t\tcells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n\t\tinsertCells(view.state, view.dispatch, start, rect, cells);\n\t\treturn true;\n\t} else if (cells) {\n\t\tconst $cell = selectionCell(view.state);\n\t\tconst start = $cell.start(-1);\n\t\tinsertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells);\n\t\treturn true;\n\t} else return false;\n}\nfunction handleMouseDown$1(view, startEvent) {\n\tvar _cellUnderMouse;\n\tif (startEvent.button != 0) return;\n\tif (startEvent.ctrlKey || startEvent.metaKey) return;\n\tconst startDOMCell = domInCell(view, startEvent.target);\n\tlet $anchor;\n\tif (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n\t\tsetCellSelection(view.state.selection.$anchorCell, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_cellUnderMouse = cellUnderMouse(view, startEvent)) === null || _cellUnderMouse === void 0 ? void 0 : _cellUnderMouse.pos) != $anchor.pos) {\n\t\tsetCellSelection($anchor, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (!startDOMCell) return;\n\tfunction setCellSelection($anchor$1, event) {\n\t\tlet $head = cellUnderMouse(view, event);\n\t\tconst starting = tableEditingKey.getState(view.state) == null;\n\t\tif (!$head || !inSameTable($anchor$1, $head)) if (starting) $head = $anchor$1;\n\t\telse return;\n\t\tconst selection = new CellSelection($anchor$1, $head);\n\t\tif (starting || !view.state.selection.eq(selection)) {\n\t\t\tconst tr = view.state.tr.setSelection(selection);\n\t\t\tif (starting) tr.setMeta(tableEditingKey, $anchor$1.pos);\n\t\t\tview.dispatch(tr);\n\t\t}\n\t}\n\tfunction stop() {\n\t\tview.root.removeEventListener(\"mouseup\", stop);\n\t\tview.root.removeEventListener(\"dragstart\", stop);\n\t\tview.root.removeEventListener(\"mousemove\", move);\n\t\tif (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n\t}\n\tfunction move(_event) {\n\t\tconst event = _event;\n\t\tconst anchor = tableEditingKey.getState(view.state);\n\t\tlet $anchor$1;\n\t\tif (anchor != null) $anchor$1 = view.state.doc.resolve(anchor);\n\t\telse if (domInCell(view, event.target) != startDOMCell) {\n\t\t\t$anchor$1 = cellUnderMouse(view, startEvent);\n\t\t\tif (!$anchor$1) return stop();\n\t\t}\n\t\tif ($anchor$1) setCellSelection($anchor$1, event);\n\t}\n\tview.root.addEventListener(\"mouseup\", stop);\n\tview.root.addEventListener(\"dragstart\", stop);\n\tview.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n\tif (!(view.state.selection instanceof prosemirror_state.TextSelection)) return null;\n\tconst { $head } = view.state.selection;\n\tfor (let d = $head.depth - 1; d >= 0; d--) {\n\t\tconst parent = $head.node(d);\n\t\tif ((dir < 0 ? $head.index(d) : $head.indexAfter(d)) != (dir < 0 ? 0 : parent.childCount)) return null;\n\t\tif (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n\t\t\tconst cellPos = $head.before(d);\n\t\t\tconst dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n\t\t\treturn view.endOfTextblock(dirStr) ? cellPos : null;\n\t\t}\n\t}\n\treturn null;\n}\nfunction domInCell(view, dom) {\n\tfor (; dom && dom != view.dom; dom = dom.parentNode) if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") return dom;\n\treturn null;\n}\nfunction cellUnderMouse(view, event) {\n\tconst mousePos = view.posAtCoords({\n\t\tleft: event.clientX,\n\t\ttop: event.clientY\n\t});\n\tif (!mousePos) return null;\n\tlet { inside, pos } = mousePos;\n\treturn inside >= 0 && cellAround(view.state.doc.resolve(inside)) || cellAround(view.state.doc.resolve(pos));\n}\n\n//#endregion\n//#region src/tableview.ts\n/**\n* @public\n*/\nvar TableView = class {\n\tconstructor(node, defaultCellMinWidth) {\n\t\tthis.node = node;\n\t\tthis.defaultCellMinWidth = defaultCellMinWidth;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"tableWrapper\";\n\t\tthis.table = this.dom.appendChild(document.createElement(\"table\"));\n\t\tthis.table.style.setProperty(\"--default-cell-min-width\", `${defaultCellMinWidth}px`);\n\t\tthis.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n\t\tthis.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n\t}\n\tupdate(node) {\n\t\tif (node.type != this.node.type) return false;\n\t\tthis.node = node;\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, this.defaultCellMinWidth);\n\t\treturn true;\n\t}\n\tignoreMutation(record) {\n\t\treturn record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n\t}\n};\n/**\n* @public\n*/\nfunction updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {\n\tlet totalWidth = 0;\n\tlet fixedWidth = true;\n\tlet nextDOM = colgroup.firstChild;\n\tconst row = node.firstChild;\n\tif (!row) return;\n\tfor (let i = 0, col = 0; i < row.childCount; i++) {\n\t\tconst { colspan, colwidth } = row.child(i).attrs;\n\t\tfor (let j = 0; j < colspan; j++, col++) {\n\t\t\tconst hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n\t\t\tconst cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n\t\t\ttotalWidth += hasWidth || defaultCellMinWidth;\n\t\t\tif (!hasWidth) fixedWidth = false;\n\t\t\tif (!nextDOM) {\n\t\t\t\tconst col$1 = document.createElement(\"col\");\n\t\t\t\tcol$1.style.width = cssWidth;\n\t\t\t\tcolgroup.appendChild(col$1);\n\t\t\t} else {\n\t\t\t\tif (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth;\n\t\t\t\tnextDOM = nextDOM.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\twhile (nextDOM) {\n\t\tvar _nextDOM$parentNode;\n\t\tconst after = nextDOM.nextSibling;\n\t\t(_nextDOM$parentNode = nextDOM.parentNode) === null || _nextDOM$parentNode === void 0 || _nextDOM$parentNode.removeChild(nextDOM);\n\t\tnextDOM = after;\n\t}\n\tif (fixedWidth) {\n\t\ttable.style.width = totalWidth + \"px\";\n\t\ttable.style.minWidth = \"\";\n\t} else {\n\t\ttable.style.width = \"\";\n\t\ttable.style.minWidth = totalWidth + \"px\";\n\t}\n}\n\n//#endregion\n//#region src/columnresizing.ts\n/**\n* @public\n*/\nconst columnResizingPluginKey = new prosemirror_state.PluginKey(\"tableColumnResizing\");\n/**\n* @public\n*/\nfunction columnResizing({ handleWidth = 5, cellMinWidth = 25, defaultCellMinWidth = 100, View = TableView, lastColumnResizable = true } = {}) {\n\tconst plugin = new prosemirror_state.Plugin({\n\t\tkey: columnResizingPluginKey,\n\t\tstate: {\n\t\t\tinit(_, state) {\n\t\t\t\tvar _plugin$spec;\n\t\t\t\tconst nodeViews = (_plugin$spec = plugin.spec) === null || _plugin$spec === void 0 || (_plugin$spec = _plugin$spec.props) === null || _plugin$spec === void 0 ? void 0 : _plugin$spec.nodeViews;\n\t\t\t\tconst tableName = tableNodeTypes(state.schema).table.name;\n\t\t\t\tif (View && nodeViews) nodeViews[tableName] = (node, view) => {\n\t\t\t\t\treturn new View(node, defaultCellMinWidth, view);\n\t\t\t\t};\n\t\t\t\treturn new ResizeState(-1, false);\n\t\t\t},\n\t\t\tapply(tr, prev) {\n\t\t\t\treturn prev.apply(tr);\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tattributes: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\treturn pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n\t\t\t},\n\t\t\thandleDOMEvents: {\n\t\t\t\tmousemove: (view, event) => {\n\t\t\t\t\thandleMouseMove(view, event, handleWidth, lastColumnResizable);\n\t\t\t\t},\n\t\t\t\tmouseleave: (view) => {\n\t\t\t\t\thandleMouseLeave(view);\n\t\t\t\t},\n\t\t\t\tmousedown: (view, event) => {\n\t\t\t\t\thandleMouseDown(view, event, cellMinWidth, defaultCellMinWidth);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecorations: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\tif (pluginState && pluginState.activeHandle > -1) return handleDecorations(state, pluginState.activeHandle);\n\t\t\t},\n\t\t\tnodeViews: {}\n\t\t}\n\t});\n\treturn plugin;\n}\n/**\n* @public\n*/\nvar ResizeState = class ResizeState {\n\tconstructor(activeHandle, dragging) {\n\t\tthis.activeHandle = activeHandle;\n\t\tthis.dragging = dragging;\n\t}\n\tapply(tr) {\n\t\tconst state = this;\n\t\tconst action = tr.getMeta(columnResizingPluginKey);\n\t\tif (action && action.setHandle != null) return new ResizeState(action.setHandle, false);\n\t\tif (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging);\n\t\tif (state.activeHandle > -1 && tr.docChanged) {\n\t\t\tlet handle = tr.mapping.map(state.activeHandle, -1);\n\t\t\tif (!pointsAtCell(tr.doc.resolve(handle))) handle = -1;\n\t\t\treturn new ResizeState(handle, state.dragging);\n\t\t}\n\t\treturn state;\n\t}\n};\nfunction handleMouseMove(view, event, handleWidth, lastColumnResizable) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState) return;\n\tif (!pluginState.dragging) {\n\t\tconst target = domCellAround(event.target);\n\t\tlet cell = -1;\n\t\tif (target) {\n\t\t\tconst { left, right } = target.getBoundingClientRect();\n\t\t\tif (event.clientX - left <= handleWidth) cell = edgeCell(view, event, \"left\", handleWidth);\n\t\t\telse if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, \"right\", handleWidth);\n\t\t}\n\t\tif (cell != pluginState.activeHandle) {\n\t\t\tif (!lastColumnResizable && cell !== -1) {\n\t\t\t\tconst $cell = view.state.doc.resolve(cell);\n\t\t\t\tconst table = $cell.node(-1);\n\t\t\t\tconst map = TableMap.get(table);\n\t\t\t\tconst tableStart = $cell.start(-1);\n\t\t\t\tif (map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1 == map.width - 1) return;\n\t\t\t}\n\t\t\tupdateHandle(view, cell);\n\t\t}\n\t}\n}\nfunction handleMouseLeave(view) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1);\n}\nfunction handleMouseDown(view, event, cellMinWidth, defaultCellMinWidth) {\n\tvar _view$dom$ownerDocume;\n\tif (!view.editable) return false;\n\tconst win = (_view$dom$ownerDocume = view.dom.ownerDocument.defaultView) !== null && _view$dom$ownerDocume !== void 0 ? _view$dom$ownerDocume : window;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false;\n\tconst cell = view.state.doc.nodeAt(pluginState.activeHandle);\n\tconst width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: {\n\t\tstartX: event.clientX,\n\t\tstartWidth: width\n\t} }));\n\tfunction finish(event$1) {\n\t\twin.removeEventListener(\"mouseup\", finish);\n\t\twin.removeEventListener(\"mousemove\", move);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (pluginState$1 === null || pluginState$1 === void 0 ? void 0 : pluginState$1.dragging) {\n\t\t\tupdateColumnWidth(view, pluginState$1.activeHandle, draggedWidth(pluginState$1.dragging, event$1, cellMinWidth));\n\t\t\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }));\n\t\t}\n\t}\n\tfunction move(event$1) {\n\t\tif (!event$1.which) return finish(event$1);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (!pluginState$1) return;\n\t\tif (pluginState$1.dragging) {\n\t\t\tconst dragged = draggedWidth(pluginState$1.dragging, event$1, cellMinWidth);\n\t\t\tdisplayColumnWidth(view, pluginState$1.activeHandle, dragged, defaultCellMinWidth);\n\t\t}\n\t}\n\tdisplayColumnWidth(view, pluginState.activeHandle, width, defaultCellMinWidth);\n\twin.addEventListener(\"mouseup\", finish);\n\twin.addEventListener(\"mousemove\", move);\n\tevent.preventDefault();\n\treturn true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n\tconst width = colwidth && colwidth[colwidth.length - 1];\n\tif (width) return width;\n\tconst dom = view.domAtPos(cellPos);\n\tlet domWidth = dom.node.childNodes[dom.offset].offsetWidth, parts = colspan;\n\tif (colwidth) {\n\t\tfor (let i = 0; i < colspan; i++) if (colwidth[i]) {\n\t\t\tdomWidth -= colwidth[i];\n\t\t\tparts--;\n\t\t}\n\t}\n\treturn domWidth / parts;\n}\nfunction domCellAround(target) {\n\twhile (target && target.nodeName != \"TD\" && target.nodeName != \"TH\") target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n\treturn target;\n}\nfunction edgeCell(view, event, side, handleWidth) {\n\tconst offset = side == \"right\" ? -handleWidth : handleWidth;\n\tconst found = view.posAtCoords({\n\t\tleft: event.clientX + offset,\n\t\ttop: event.clientY\n\t});\n\tif (!found) return -1;\n\tconst { pos } = found;\n\tconst $cell = cellAround(view.state.doc.resolve(pos));\n\tif (!$cell) return -1;\n\tif (side == \"right\") return $cell.pos;\n\tconst map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n\tconst index = map.map.indexOf($cell.pos - start);\n\treturn index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, resizeMinWidth) {\n\tconst offset = event.clientX - dragging.startX;\n\treturn Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }));\n}\nfunction updateColumnWidth(view, cell, width) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tconst tr = view.state.tr;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst mapIndex = row * map.width + col;\n\t\tif (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n\t\tconst pos = map.map[mapIndex];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\tconst index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n\t\tif (attrs.colwidth && attrs.colwidth[index] == width) continue;\n\t\tconst colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n\t\tcolwidth[index] = width;\n\t\ttr.setNodeMarkup(start + pos, null, {\n\t\t\t...attrs,\n\t\t\tcolwidth\n\t\t});\n\t}\n\tif (tr.docChanged) view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, defaultCellMinWidth) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), start = $cell.start(-1);\n\tconst col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tlet dom = view.domAtPos($cell.start(-1)).node;\n\twhile (dom && dom.nodeName != \"TABLE\") dom = dom.parentNode;\n\tif (!dom) return;\n\tupdateColumnsOnResize(table, dom.firstChild, dom, defaultCellMinWidth, col, width);\n}\nfunction zeroes(n) {\n\treturn Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n\tconst decorations = [];\n\tconst $cell = state.doc.resolve(cell);\n\tconst table = $cell.node(-1);\n\tif (!table) return prosemirror_view.DecorationSet.empty;\n\tconst map = TableMap.get(table);\n\tconst start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = col + row * map.width;\n\t\tif ((col == map.width - 1 || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index] != map.map[index - map.width])) {\n\t\t\tvar _columnResizingPlugin;\n\t\t\tconst cellPos = map.map[index];\n\t\t\tconst pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n\t\t\tconst dom = document.createElement(\"div\");\n\t\t\tdom.className = \"column-resize-handle\";\n\t\t\tif ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(prosemirror_view.Decoration.node(start + cellPos, start + cellPos + table.nodeAt(cellPos).nodeSize, { class: \"column-resize-dragging\" }));\n\t\t\tdecorations.push(prosemirror_view.Decoration.widget(pos, dom));\n\t\t}\n\t}\n\treturn prosemirror_view.DecorationSet.create(state.doc, decorations);\n}\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n* that, when added to an editor, enables cell-selection, handles\n* cell-based copy/paste, and makes sure tables stay well-formed (each\n* row has the same width, and cells don't overlap).\n*\n* You should probably put this plugin near the end of your array of\n* plugins, since it handles mouse and arrow key events in tables\n* rather broadly, and other plugins, like the gap cursor or the\n* column-width dragging plugin, might want to get a turn first to\n* perform more specific behavior.\n*\n* @public\n*/\nfunction tableEditing({ allowTableNodeSelection = false } = {}) {\n\treturn new prosemirror_state.Plugin({\n\t\tkey: tableEditingKey,\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tapply(tr, cur) {\n\t\t\t\tconst set = tr.getMeta(tableEditingKey);\n\t\t\t\tif (set != null) return set == -1 ? null : set;\n\t\t\t\tif (cur == null || !tr.docChanged) return cur;\n\t\t\t\tconst { deleted, pos } = tr.mapping.mapResult(cur);\n\t\t\t\treturn deleted ? null : pos;\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tdecorations: drawCellSelection,\n\t\t\thandleDOMEvents: { mousedown: handleMouseDown$1 },\n\t\t\tcreateSelectionBetween(view) {\n\t\t\t\treturn tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n\t\t\t},\n\t\t\thandleTripleClick,\n\t\t\thandleKeyDown,\n\t\t\thandlePaste\n\t\t},\n\t\tappendTransaction(_, oldState, state) {\n\t\t\treturn normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection);\n\t\t}\n\t});\n}\n\n//#endregion\nexports.CellBookmark = CellBookmark;\nexports.CellSelection = CellSelection;\nexports.ResizeState = ResizeState;\nexports.TableMap = TableMap;\nexports.TableView = TableView;\nexports.__clipCells = clipCells;\nexports.__insertCells = insertCells;\nexports.__pastedCells = pastedCells;\nexports.addColSpan = addColSpan;\nexports.addColumn = addColumn;\nexports.addColumnAfter = addColumnAfter;\nexports.addColumnBefore = addColumnBefore;\nexports.addRow = addRow;\nexports.addRowAfter = addRowAfter;\nexports.addRowBefore = addRowBefore;\nexports.cellAround = cellAround;\nexports.cellNear = cellNear;\nexports.colCount = colCount;\nexports.columnIsHeader = columnIsHeader;\nexports.columnResizing = columnResizing;\nexports.columnResizingPluginKey = columnResizingPluginKey;\nexports.deleteCellSelection = deleteCellSelection;\nexports.deleteColumn = deleteColumn;\nexports.deleteRow = deleteRow;\nexports.deleteTable = deleteTable;\nexports.findCell = findCell;\nexports.findCellPos = findCellPos;\nexports.findCellRange = findCellRange;\nexports.findTable = findTable;\nexports.fixTables = fixTables;\nexports.fixTablesKey = fixTablesKey;\nexports.goToNextCell = goToNextCell;\nexports.handlePaste = handlePaste;\nexports.inSameTable = inSameTable;\nexports.isInTable = isInTable;\nexports.mergeCells = mergeCells;\nexports.moveCellForward = moveCellForward;\nexports.moveTableColumn = moveTableColumn;\nexports.moveTableRow = moveTableRow;\nexports.nextCell = nextCell;\nexports.pointsAtCell = pointsAtCell;\nexports.removeColSpan = removeColSpan;\nexports.removeColumn = removeColumn;\nexports.removeRow = removeRow;\nexports.rowIsHeader = rowIsHeader;\nexports.selectedRect = selectedRect;\nexports.selectionCell = selectionCell;\nexports.setCellAttr = setCellAttr;\nexports.splitCell = splitCell;\nexports.splitCellWithType = splitCellWithType;\nexports.tableEditing = tableEditing;\nexports.tableEditingKey = tableEditingKey;\nexports.tableNodeTypes = tableNodeTypes;\nexports.tableNodes = tableNodes;\nexports.toggleHeader = toggleHeader;\nexports.toggleHeaderCell = toggleHeaderCell;\nexports.toggleHeaderColumn = toggleHeaderColumn;\nexports.toggleHeaderRow = toggleHeaderRow;\nexports.updateColumnsOnResize = updateColumnsOnResize;","'use strict';\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\nfunction _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; } catch (e) { return typeof fn === \"function\"; } }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar prosemirrorModel = require('prosemirror-model');\nvar lower16 = 0xffff;\nvar factor16 = Math.pow(2, 16);\nfunction makeRecover(index, offset) {\n  return index + offset * factor16;\n}\nfunction recoverIndex(value) {\n  return value & lower16;\n}\nfunction recoverOffset(value) {\n  return (value - (value & lower16)) / factor16;\n}\nvar DEL_BEFORE = 1,\n  DEL_AFTER = 2,\n  DEL_ACROSS = 4,\n  DEL_SIDE = 8;\nvar MapResult = function () {\n  function MapResult(pos, delInfo, recover) {\n    _classCallCheck(this, MapResult);\n    this.pos = pos;\n    this.delInfo = delInfo;\n    this.recover = recover;\n  }\n  _createClass(MapResult, [{\n    key: \"deleted\",\n    get: function get() {\n      return (this.delInfo & DEL_SIDE) > 0;\n    }\n  }, {\n    key: \"deletedBefore\",\n    get: function get() {\n      return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0;\n    }\n  }, {\n    key: \"deletedAfter\",\n    get: function get() {\n      return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0;\n    }\n  }, {\n    key: \"deletedAcross\",\n    get: function get() {\n      return (this.delInfo & DEL_ACROSS) > 0;\n    }\n  }]);\n  return MapResult;\n}();\nvar StepMap = function () {\n  function StepMap(ranges) {\n    var inverted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    _classCallCheck(this, StepMap);\n    this.ranges = ranges;\n    this.inverted = inverted;\n    if (!ranges.length && StepMap.empty) return StepMap.empty;\n  }\n  _createClass(StepMap, [{\n    key: \"recover\",\n    value: function recover(value) {\n      var diff = 0,\n        index = recoverIndex(value);\n      if (!this.inverted) for (var i = 0; i < index; i++) diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n      return this.ranges[index * 3] + diff + recoverOffset(value);\n    }\n  }, {\n    key: \"mapResult\",\n    value: function mapResult(pos) {\n      var assoc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return this._map(pos, assoc, false);\n    }\n  }, {\n    key: \"map\",\n    value: function map(pos) {\n      var assoc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return this._map(pos, assoc, true);\n    }\n  }, {\n    key: \"_map\",\n    value: function _map(pos, assoc, simple) {\n      var diff = 0,\n        oldIndex = this.inverted ? 2 : 1,\n        newIndex = this.inverted ? 1 : 2;\n      for (var i = 0; i < this.ranges.length; i += 3) {\n        var start = this.ranges[i] - (this.inverted ? diff : 0);\n        if (start > pos) break;\n        var oldSize = this.ranges[i + oldIndex],\n          newSize = this.ranges[i + newIndex],\n          end = start + oldSize;\n        if (pos <= end) {\n          var side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n          var result = start + diff + (side < 0 ? 0 : newSize);\n          if (simple) return result;\n          var recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n          var del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;\n          if (assoc < 0 ? pos != start : pos != end) del |= DEL_SIDE;\n          return new MapResult(result, del, recover);\n        }\n        diff += newSize - oldSize;\n      }\n      return simple ? pos + diff : new MapResult(pos + diff, 0, null);\n    }\n  }, {\n    key: \"touches\",\n    value: function touches(pos, recover) {\n      var diff = 0,\n        index = recoverIndex(recover);\n      var oldIndex = this.inverted ? 2 : 1,\n        newIndex = this.inverted ? 1 : 2;\n      for (var i = 0; i < this.ranges.length; i += 3) {\n        var start = this.ranges[i] - (this.inverted ? diff : 0);\n        if (start > pos) break;\n        var oldSize = this.ranges[i + oldIndex],\n          end = start + oldSize;\n        if (pos <= end && i == index * 3) return true;\n        diff += this.ranges[i + newIndex] - oldSize;\n      }\n      return false;\n    }\n  }, {\n    key: \"forEach\",\n    value: function forEach(f) {\n      var oldIndex = this.inverted ? 2 : 1,\n        newIndex = this.inverted ? 1 : 2;\n      for (var i = 0, diff = 0; i < this.ranges.length; i += 3) {\n        var start = this.ranges[i],\n          oldStart = start - (this.inverted ? diff : 0),\n          newStart = start + (this.inverted ? 0 : diff);\n        var oldSize = this.ranges[i + oldIndex],\n          newSize = this.ranges[i + newIndex];\n        f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n        diff += newSize - oldSize;\n      }\n    }\n  }, {\n    key: \"invert\",\n    value: function invert() {\n      return new StepMap(this.ranges, !this.inverted);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n    }\n  }], [{\n    key: \"offset\",\n    value: function offset(n) {\n      return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n    }\n  }]);\n  return StepMap;\n}();\nStepMap.empty = new StepMap([]);\nvar Mapping = function () {\n  function Mapping(maps, mirror) {\n    var from = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var to = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : maps ? maps.length : 0;\n    _classCallCheck(this, Mapping);\n    this.mirror = mirror;\n    this.from = from;\n    this.to = to;\n    this._maps = maps || [];\n    this.ownData = !(maps || mirror);\n  }\n  _createClass(Mapping, [{\n    key: \"maps\",\n    get: function get() {\n      return this._maps;\n    }\n  }, {\n    key: \"slice\",\n    value: function slice() {\n      var from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.maps.length;\n      return new Mapping(this._maps, this.mirror, from, to);\n    }\n  }, {\n    key: \"appendMap\",\n    value: function appendMap(map, mirrors) {\n      if (!this.ownData) {\n        this._maps = this._maps.slice();\n        this.mirror = this.mirror && this.mirror.slice();\n        this.ownData = true;\n      }\n      this.to = this._maps.push(map);\n      if (mirrors != null) this.setMirror(this._maps.length - 1, mirrors);\n    }\n  }, {\n    key: \"appendMapping\",\n    value: function appendMapping(mapping) {\n      for (var i = 0, startSize = this._maps.length; i < mapping._maps.length; i++) {\n        var mirr = mapping.getMirror(i);\n        this.appendMap(mapping._maps[i], mirr != null && mirr < i ? startSize + mirr : undefined);\n      }\n    }\n  }, {\n    key: \"getMirror\",\n    value: function getMirror(n) {\n      if (this.mirror) for (var i = 0; i < this.mirror.length; i++) if (this.mirror[i] == n) return this.mirror[i + (i % 2 ? -1 : 1)];\n    }\n  }, {\n    key: \"setMirror\",\n    value: function setMirror(n, m) {\n      if (!this.mirror) this.mirror = [];\n      this.mirror.push(n, m);\n    }\n  }, {\n    key: \"appendMappingInverted\",\n    value: function appendMappingInverted(mapping) {\n      for (var i = mapping.maps.length - 1, totalSize = this._maps.length + mapping._maps.length; i >= 0; i--) {\n        var mirr = mapping.getMirror(i);\n        this.appendMap(mapping._maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined);\n      }\n    }\n  }, {\n    key: \"invert\",\n    value: function invert() {\n      var inverse = new Mapping();\n      inverse.appendMappingInverted(this);\n      return inverse;\n    }\n  }, {\n    key: \"map\",\n    value: function map(pos) {\n      var assoc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      if (this.mirror) return this._map(pos, assoc, true);\n      for (var i = this.from; i < this.to; i++) pos = this._maps[i].map(pos, assoc);\n      return pos;\n    }\n  }, {\n    key: \"mapResult\",\n    value: function mapResult(pos) {\n      var assoc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return this._map(pos, assoc, false);\n    }\n  }, {\n    key: \"_map\",\n    value: function _map(pos, assoc, simple) {\n      var delInfo = 0;\n      for (var i = this.from; i < this.to; i++) {\n        var map = this._maps[i],\n          result = map.mapResult(pos, assoc);\n        if (result.recover != null) {\n          var corr = this.getMirror(i);\n          if (corr != null && corr > i && corr < this.to) {\n            i = corr;\n            pos = this._maps[corr].recover(result.recover);\n            continue;\n          }\n        }\n        delInfo |= result.delInfo;\n        pos = result.pos;\n      }\n      return simple ? pos : new MapResult(pos, delInfo, null);\n    }\n  }]);\n  return Mapping;\n}();\nvar stepsByID = Object.create(null);\nvar Step = function () {\n  function Step() {\n    _classCallCheck(this, Step);\n  }\n  _createClass(Step, [{\n    key: \"getMap\",\n    value: function getMap() {\n      return StepMap.empty;\n    }\n  }, {\n    key: \"merge\",\n    value: function merge(other) {\n      return null;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (!json || !json.stepType) throw new RangeError(\"Invalid input for Step.fromJSON\");\n      var type = stepsByID[json.stepType];\n      if (!type) throw new RangeError(\"No step type \".concat(json.stepType, \" defined\"));\n      return type.fromJSON(schema, json);\n    }\n  }, {\n    key: \"jsonID\",\n    value: function jsonID(id, stepClass) {\n      if (id in stepsByID) throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n      stepsByID[id] = stepClass;\n      stepClass.prototype.jsonID = id;\n      return stepClass;\n    }\n  }]);\n  return Step;\n}();\nvar StepResult = function () {\n  function StepResult(doc, failed) {\n    _classCallCheck(this, StepResult);\n    this.doc = doc;\n    this.failed = failed;\n  }\n  _createClass(StepResult, null, [{\n    key: \"ok\",\n    value: function ok(doc) {\n      return new StepResult(doc, null);\n    }\n  }, {\n    key: \"fail\",\n    value: function fail(message) {\n      return new StepResult(null, message);\n    }\n  }, {\n    key: \"fromReplace\",\n    value: function fromReplace(doc, from, to, slice) {\n      try {\n        return StepResult.ok(doc.replace(from, to, slice));\n      } catch (e) {\n        if (e instanceof prosemirrorModel.ReplaceError) return StepResult.fail(e.message);\n        throw e;\n      }\n    }\n  }]);\n  return StepResult;\n}();\nfunction mapFragment(fragment, f, parent) {\n  var mapped = [];\n  for (var i = 0; i < fragment.childCount; i++) {\n    var child = fragment.child(i);\n    if (child.content.size) child = child.copy(mapFragment(child.content, f, child));\n    if (child.isInline) child = f(child, parent, i);\n    mapped.push(child);\n  }\n  return prosemirrorModel.Fragment.fromArray(mapped);\n}\nvar AddMarkStep = function (_Step) {\n  _inherits(AddMarkStep, _Step);\n  var _super = _createSuper(AddMarkStep);\n  function AddMarkStep(from, to, mark) {\n    var _this;\n    _classCallCheck(this, AddMarkStep);\n    _this = _super.call(this);\n    _this.from = from;\n    _this.to = to;\n    _this.mark = mark;\n    return _this;\n  }\n  _createClass(AddMarkStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      var _this2 = this;\n      var oldSlice = doc.slice(this.from, this.to),\n        $from = doc.resolve(this.from);\n      var parent = $from.node($from.sharedDepth(this.to));\n      var slice = new prosemirrorModel.Slice(mapFragment(oldSlice.content, function (node, parent) {\n        if (!node.isAtom || !parent.type.allowsMarkType(_this2.mark.type)) return node;\n        return node.mark(_this2.mark.addToSet(node.marks));\n      }, parent), oldSlice.openStart, oldSlice.openEnd);\n      return StepResult.fromReplace(doc, this.from, this.to, slice);\n    }\n  }, {\n    key: \"invert\",\n    value: function invert() {\n      return new RemoveMarkStep(this.from, this.to, this.mark);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var from = mapping.mapResult(this.from, 1),\n        to = mapping.mapResult(this.to, -1);\n      if (from.deleted && to.deleted || from.pos >= to.pos) return null;\n      return new AddMarkStep(from.pos, to.pos, this.mark);\n    }\n  }, {\n    key: \"merge\",\n    value: function merge(other) {\n      if (other instanceof AddMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n      return null;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        stepType: \"addMark\",\n        mark: this.mark.toJSON(),\n        from: this.from,\n        to: this.to\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.from != \"number\" || typeof json.to != \"number\") throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n      return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n    }\n  }]);\n  return AddMarkStep;\n}(Step);\nStep.jsonID(\"addMark\", AddMarkStep);\nvar RemoveMarkStep = function (_Step2) {\n  _inherits(RemoveMarkStep, _Step2);\n  var _super2 = _createSuper(RemoveMarkStep);\n  function RemoveMarkStep(from, to, mark) {\n    var _this3;\n    _classCallCheck(this, RemoveMarkStep);\n    _this3 = _super2.call(this);\n    _this3.from = from;\n    _this3.to = to;\n    _this3.mark = mark;\n    return _this3;\n  }\n  _createClass(RemoveMarkStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      var _this4 = this;\n      var oldSlice = doc.slice(this.from, this.to);\n      var slice = new prosemirrorModel.Slice(mapFragment(oldSlice.content, function (node) {\n        return node.mark(_this4.mark.removeFromSet(node.marks));\n      }, doc), oldSlice.openStart, oldSlice.openEnd);\n      return StepResult.fromReplace(doc, this.from, this.to, slice);\n    }\n  }, {\n    key: \"invert\",\n    value: function invert() {\n      return new AddMarkStep(this.from, this.to, this.mark);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var from = mapping.mapResult(this.from, 1),\n        to = mapping.mapResult(this.to, -1);\n      if (from.deleted && to.deleted || from.pos >= to.pos) return null;\n      return new RemoveMarkStep(from.pos, to.pos, this.mark);\n    }\n  }, {\n    key: \"merge\",\n    value: function merge(other) {\n      if (other instanceof RemoveMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n      return null;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        stepType: \"removeMark\",\n        mark: this.mark.toJSON(),\n        from: this.from,\n        to: this.to\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.from != \"number\" || typeof json.to != \"number\") throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n      return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n    }\n  }]);\n  return RemoveMarkStep;\n}(Step);\nStep.jsonID(\"removeMark\", RemoveMarkStep);\nvar AddNodeMarkStep = function (_Step3) {\n  _inherits(AddNodeMarkStep, _Step3);\n  var _super3 = _createSuper(AddNodeMarkStep);\n  function AddNodeMarkStep(pos, mark) {\n    var _this5;\n    _classCallCheck(this, AddNodeMarkStep);\n    _this5 = _super3.call(this);\n    _this5.pos = pos;\n    _this5.mark = mark;\n    return _this5;\n  }\n  _createClass(AddNodeMarkStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      var node = doc.nodeAt(this.pos);\n      if (!node) return StepResult.fail(\"No node at mark step's position\");\n      var updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));\n      return StepResult.fromReplace(doc, this.pos, this.pos + 1, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n    }\n  }, {\n    key: \"invert\",\n    value: function invert(doc) {\n      var node = doc.nodeAt(this.pos);\n      if (node) {\n        var newSet = this.mark.addToSet(node.marks);\n        if (newSet.length == node.marks.length) {\n          for (var i = 0; i < node.marks.length; i++) if (!node.marks[i].isInSet(newSet)) return new AddNodeMarkStep(this.pos, node.marks[i]);\n          return new AddNodeMarkStep(this.pos, this.mark);\n        }\n      }\n      return new RemoveNodeMarkStep(this.pos, this.mark);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var pos = mapping.mapResult(this.pos, 1);\n      return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        stepType: \"addNodeMark\",\n        pos: this.pos,\n        mark: this.mark.toJSON()\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.pos != \"number\") throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");\n      return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n    }\n  }]);\n  return AddNodeMarkStep;\n}(Step);\nStep.jsonID(\"addNodeMark\", AddNodeMarkStep);\nvar RemoveNodeMarkStep = function (_Step4) {\n  _inherits(RemoveNodeMarkStep, _Step4);\n  var _super4 = _createSuper(RemoveNodeMarkStep);\n  function RemoveNodeMarkStep(pos, mark) {\n    var _this6;\n    _classCallCheck(this, RemoveNodeMarkStep);\n    _this6 = _super4.call(this);\n    _this6.pos = pos;\n    _this6.mark = mark;\n    return _this6;\n  }\n  _createClass(RemoveNodeMarkStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      var node = doc.nodeAt(this.pos);\n      if (!node) return StepResult.fail(\"No node at mark step's position\");\n      var updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));\n      return StepResult.fromReplace(doc, this.pos, this.pos + 1, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n    }\n  }, {\n    key: \"invert\",\n    value: function invert(doc) {\n      var node = doc.nodeAt(this.pos);\n      if (!node || !this.mark.isInSet(node.marks)) return this;\n      return new AddNodeMarkStep(this.pos, this.mark);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var pos = mapping.mapResult(this.pos, 1);\n      return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        stepType: \"removeNodeMark\",\n        pos: this.pos,\n        mark: this.mark.toJSON()\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.pos != \"number\") throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");\n      return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n    }\n  }]);\n  return RemoveNodeMarkStep;\n}(Step);\nStep.jsonID(\"removeNodeMark\", RemoveNodeMarkStep);\nvar ReplaceStep = function (_Step5) {\n  _inherits(ReplaceStep, _Step5);\n  var _super5 = _createSuper(ReplaceStep);\n  function ReplaceStep(from, to, slice) {\n    var _this7;\n    var structure = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    _classCallCheck(this, ReplaceStep);\n    _this7 = _super5.call(this);\n    _this7.from = from;\n    _this7.to = to;\n    _this7.slice = slice;\n    _this7.structure = structure;\n    return _this7;\n  }\n  _createClass(ReplaceStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      if (this.structure && contentBetween(doc, this.from, this.to)) return StepResult.fail(\"Structure replace would overwrite content\");\n      return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n    }\n  }, {\n    key: \"getMap\",\n    value: function getMap() {\n      return new StepMap([this.from, this.to - this.from, this.slice.size]);\n    }\n  }, {\n    key: \"invert\",\n    value: function invert(doc) {\n      return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var to = mapping.mapResult(this.to, -1);\n      var from = this.from == this.to && ReplaceStep.MAP_BIAS < 0 ? to : mapping.mapResult(this.from, 1);\n      if (from.deletedAcross && to.deletedAcross) return null;\n      return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice, this.structure);\n    }\n  }, {\n    key: \"merge\",\n    value: function merge(other) {\n      if (!(other instanceof ReplaceStep) || other.structure || this.structure) return null;\n      if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n        var slice = this.slice.size + other.slice.size == 0 ? prosemirrorModel.Slice.empty : new prosemirrorModel.Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n        return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n      } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n        var _slice = this.slice.size + other.slice.size == 0 ? prosemirrorModel.Slice.empty : new prosemirrorModel.Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n        return new ReplaceStep(other.from, this.to, _slice, this.structure);\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = {\n        stepType: \"replace\",\n        from: this.from,\n        to: this.to\n      };\n      if (this.slice.size) json.slice = this.slice.toJSON();\n      if (this.structure) json.structure = true;\n      return json;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.from != \"number\" || typeof json.to != \"number\") throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n      return new ReplaceStep(json.from, json.to, prosemirrorModel.Slice.fromJSON(schema, json.slice), !!json.structure);\n    }\n  }]);\n  return ReplaceStep;\n}(Step);\nReplaceStep.MAP_BIAS = 1;\nStep.jsonID(\"replace\", ReplaceStep);\nvar ReplaceAroundStep = function (_Step6) {\n  _inherits(ReplaceAroundStep, _Step6);\n  var _super6 = _createSuper(ReplaceAroundStep);\n  function ReplaceAroundStep(from, to, gapFrom, gapTo, slice, insert) {\n    var _this8;\n    var structure = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;\n    _classCallCheck(this, ReplaceAroundStep);\n    _this8 = _super6.call(this);\n    _this8.from = from;\n    _this8.to = to;\n    _this8.gapFrom = gapFrom;\n    _this8.gapTo = gapTo;\n    _this8.slice = slice;\n    _this8.insert = insert;\n    _this8.structure = structure;\n    return _this8;\n  }\n  _createClass(ReplaceAroundStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      if (this.structure && (contentBetween(doc, this.from, this.gapFrom) || contentBetween(doc, this.gapTo, this.to))) return StepResult.fail(\"Structure gap-replace would overwrite content\");\n      var gap = doc.slice(this.gapFrom, this.gapTo);\n      if (gap.openStart || gap.openEnd) return StepResult.fail(\"Gap is not a flat range\");\n      var inserted = this.slice.insertAt(this.insert, gap.content);\n      if (!inserted) return StepResult.fail(\"Content does not fit in gap\");\n      return StepResult.fromReplace(doc, this.from, this.to, inserted);\n    }\n  }, {\n    key: \"getMap\",\n    value: function getMap() {\n      return new StepMap([this.from, this.gapFrom - this.from, this.insert, this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n    }\n  }, {\n    key: \"invert\",\n    value: function invert(doc) {\n      var gap = this.gapTo - this.gapFrom;\n      return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var from = mapping.mapResult(this.from, 1),\n        to = mapping.mapResult(this.to, -1);\n      var gapFrom = this.from == this.gapFrom ? from.pos : mapping.map(this.gapFrom, -1);\n      var gapTo = this.to == this.gapTo ? to.pos : mapping.map(this.gapTo, 1);\n      if (from.deletedAcross && to.deletedAcross || gapFrom < from.pos || gapTo > to.pos) return null;\n      return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var json = {\n        stepType: \"replaceAround\",\n        from: this.from,\n        to: this.to,\n        gapFrom: this.gapFrom,\n        gapTo: this.gapTo,\n        insert: this.insert\n      };\n      if (this.slice.size) json.slice = this.slice.toJSON();\n      if (this.structure) json.structure = true;\n      return json;\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.from != \"number\" || typeof json.to != \"number\" || typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\") throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n      return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, prosemirrorModel.Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n    }\n  }]);\n  return ReplaceAroundStep;\n}(Step);\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\nfunction contentBetween(doc, from, to) {\n  var $from = doc.resolve(from),\n    dist = to - from,\n    depth = $from.depth;\n  while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n    depth--;\n    dist--;\n  }\n  if (dist > 0) {\n    var next = $from.node(depth).maybeChild($from.indexAfter(depth));\n    while (dist > 0) {\n      if (!next || next.isLeaf) return true;\n      next = next.firstChild;\n      dist--;\n    }\n  }\n  return false;\n}\nfunction _addMark(tr, from, to, mark) {\n  var removed = [],\n    added = [];\n  var removing, adding;\n  tr.doc.nodesBetween(from, to, function (node, pos, parent) {\n    if (!node.isInline) return;\n    var marks = node.marks;\n    if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n      var start = Math.max(pos, from),\n        end = Math.min(pos + node.nodeSize, to);\n      var newSet = mark.addToSet(marks);\n      for (var i = 0; i < marks.length; i++) {\n        if (!marks[i].isInSet(newSet)) {\n          if (removing && removing.to == start && removing.mark.eq(marks[i])) removing.to = end;else removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n        }\n      }\n      if (adding && adding.to == start) adding.to = end;else added.push(adding = new AddMarkStep(start, end, mark));\n    }\n  });\n  removed.forEach(function (s) {\n    return tr.step(s);\n  });\n  added.forEach(function (s) {\n    return tr.step(s);\n  });\n}\nfunction _removeMark(tr, from, to, mark) {\n  var matched = [],\n    step = 0;\n  tr.doc.nodesBetween(from, to, function (node, pos) {\n    if (!node.isInline) return;\n    step++;\n    var toRemove = null;\n    if (mark instanceof prosemirrorModel.MarkType) {\n      var set = node.marks,\n        found;\n      while (found = mark.isInSet(set)) {\n        (toRemove || (toRemove = [])).push(found);\n        set = found.removeFromSet(set);\n      }\n    } else if (mark) {\n      if (mark.isInSet(node.marks)) toRemove = [mark];\n    } else {\n      toRemove = node.marks;\n    }\n    if (toRemove && toRemove.length) {\n      var end = Math.min(pos + node.nodeSize, to);\n      for (var i = 0; i < toRemove.length; i++) {\n        var style = toRemove[i],\n          _found = void 0;\n        for (var j = 0; j < matched.length; j++) {\n          var m = matched[j];\n          if (m.step == step - 1 && style.eq(matched[j].style)) _found = m;\n        }\n        if (_found) {\n          _found.to = end;\n          _found.step = step;\n        } else {\n          matched.push({\n            style: style,\n            from: Math.max(pos, from),\n            to: end,\n            step: step\n          });\n        }\n      }\n    }\n  });\n  matched.forEach(function (m) {\n    return tr.step(new RemoveMarkStep(m.from, m.to, m.style));\n  });\n}\nfunction _clearIncompatible(tr, pos, parentType) {\n  var match = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : parentType.contentMatch;\n  var clearNewlines = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  var node = tr.doc.nodeAt(pos);\n  var replSteps = [],\n    cur = pos + 1;\n  for (var i = 0; i < node.childCount; i++) {\n    var child = node.child(i),\n      end = cur + child.nodeSize;\n    var allowed = match.matchType(child.type);\n    if (!allowed) {\n      replSteps.push(new ReplaceStep(cur, end, prosemirrorModel.Slice.empty));\n    } else {\n      match = allowed;\n      for (var j = 0; j < child.marks.length; j++) if (!parentType.allowsMarkType(child.marks[j].type)) tr.step(new RemoveMarkStep(cur, end, child.marks[j]));\n      if (clearNewlines && child.isText && parentType.whitespace != \"pre\") {\n        var m = void 0,\n          newline = /\\r?\\n|\\r/g,\n          slice = void 0;\n        while (m = newline.exec(child.text)) {\n          if (!slice) slice = new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(parentType.schema.text(\" \", parentType.allowedMarks(child.marks))), 0, 0);\n          replSteps.push(new ReplaceStep(cur + m.index, cur + m.index + m[0].length, slice));\n        }\n      }\n    }\n    cur = end;\n  }\n  if (!match.validEnd) {\n    var fill = match.fillBefore(prosemirrorModel.Fragment.empty, true);\n    tr.replace(cur, cur, new prosemirrorModel.Slice(fill, 0, 0));\n  }\n  for (var _i = replSteps.length - 1; _i >= 0; _i--) tr.step(replSteps[_i]);\n}\nfunction canCut(node, start, end) {\n  return (start == 0 || node.canReplace(start, node.childCount)) && (end == node.childCount || node.canReplace(0, end));\n}\nfunction liftTarget(range) {\n  var parent = range.parent;\n  var content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n  for (var depth = range.depth, contentBefore = 0, contentAfter = 0;; --depth) {\n    var node = range.$from.node(depth);\n    var index = range.$from.index(depth) + contentBefore,\n      endIndex = range.$to.indexAfter(depth) - contentAfter;\n    if (depth < range.depth && node.canReplace(index, endIndex, content)) return depth;\n    if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex)) break;\n    if (index) contentBefore = 1;\n    if (endIndex < node.childCount) contentAfter = 1;\n  }\n  return null;\n}\nfunction _lift(tr, range, target) {\n  var $from = range.$from,\n    $to = range.$to,\n    depth = range.depth;\n  var gapStart = $from.before(depth + 1),\n    gapEnd = $to.after(depth + 1);\n  var start = gapStart,\n    end = gapEnd;\n  var before = prosemirrorModel.Fragment.empty,\n    openStart = 0;\n  for (var d = depth, splitting = false; d > target; d--) if (splitting || $from.index(d) > 0) {\n    splitting = true;\n    before = prosemirrorModel.Fragment.from($from.node(d).copy(before));\n    openStart++;\n  } else {\n    start--;\n  }\n  var after = prosemirrorModel.Fragment.empty,\n    openEnd = 0;\n  for (var _d = depth, _splitting = false; _d > target; _d--) if (_splitting || $to.after(_d + 1) < $to.end(_d)) {\n    _splitting = true;\n    after = prosemirrorModel.Fragment.from($to.node(_d).copy(after));\n    openEnd++;\n  } else {\n    end++;\n  }\n  tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new prosemirrorModel.Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}\nfunction findWrapping(range, nodeType) {\n  var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n  var innerRange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : range;\n  var around = findWrappingOutside(range, nodeType);\n  var inner = around && findWrappingInside(innerRange, nodeType);\n  if (!inner) return null;\n  return around.map(withAttrs).concat({\n    type: nodeType,\n    attrs: attrs\n  }).concat(inner.map(withAttrs));\n}\nfunction withAttrs(type) {\n  return {\n    type: type,\n    attrs: null\n  };\n}\nfunction findWrappingOutside(range, type) {\n  var parent = range.parent,\n    startIndex = range.startIndex,\n    endIndex = range.endIndex;\n  var around = parent.contentMatchAt(startIndex).findWrapping(type);\n  if (!around) return null;\n  var outer = around.length ? around[0] : type;\n  return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\nfunction findWrappingInside(range, type) {\n  var parent = range.parent,\n    startIndex = range.startIndex,\n    endIndex = range.endIndex;\n  var inner = parent.child(startIndex);\n  var inside = type.contentMatch.findWrapping(inner.type);\n  if (!inside) return null;\n  var lastType = inside.length ? inside[inside.length - 1] : type;\n  var innerMatch = lastType.contentMatch;\n  for (var i = startIndex; innerMatch && i < endIndex; i++) innerMatch = innerMatch.matchType(parent.child(i).type);\n  if (!innerMatch || !innerMatch.validEnd) return null;\n  return inside;\n}\nfunction _wrap2(tr, range, wrappers) {\n  var content = prosemirrorModel.Fragment.empty;\n  for (var i = wrappers.length - 1; i >= 0; i--) {\n    if (content.size) {\n      var match = wrappers[i].type.contentMatch.matchFragment(content);\n      if (!match || !match.validEnd) throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\");\n    }\n    content = prosemirrorModel.Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n  }\n  var start = range.start,\n    end = range.end;\n  tr.step(new ReplaceAroundStep(start, end, start, end, new prosemirrorModel.Slice(content, 0, 0), wrappers.length, true));\n}\nfunction _setBlockType(tr, from, to, type, attrs) {\n  if (!type.isTextblock) throw new RangeError(\"Type given to setBlockType should be a textblock\");\n  var mapFrom = tr.steps.length;\n  tr.doc.nodesBetween(from, to, function (node, pos) {\n    var attrsHere = typeof attrs == \"function\" ? attrs(node) : attrs;\n    if (node.isTextblock && !node.hasMarkup(type, attrsHere) && canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) {\n      var convertNewlines = null;\n      if (type.schema.linebreakReplacement) {\n        var pre = type.whitespace == \"pre\",\n          supportLinebreak = !!type.contentMatch.matchType(type.schema.linebreakReplacement);\n        if (pre && !supportLinebreak) convertNewlines = false;else if (!pre && supportLinebreak) convertNewlines = true;\n      }\n      if (convertNewlines === false) replaceLinebreaks(tr, node, pos, mapFrom);\n      _clearIncompatible(tr, tr.mapping.slice(mapFrom).map(pos, 1), type, undefined, convertNewlines === null);\n      var mapping = tr.mapping.slice(mapFrom);\n      var startM = mapping.map(pos, 1),\n        endM = mapping.map(pos + node.nodeSize, 1);\n      tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));\n      if (convertNewlines === true) replaceNewlines(tr, node, pos, mapFrom);\n      return false;\n    }\n  });\n}\nfunction replaceNewlines(tr, node, pos, mapFrom) {\n  node.forEach(function (child, offset) {\n    if (child.isText) {\n      var m,\n        newline = /\\r?\\n|\\r/g;\n      while (m = newline.exec(child.text)) {\n        var start = tr.mapping.slice(mapFrom).map(pos + 1 + offset + m.index);\n        tr.replaceWith(start, start + 1, node.type.schema.linebreakReplacement.create());\n      }\n    }\n  });\n}\nfunction replaceLinebreaks(tr, node, pos, mapFrom) {\n  node.forEach(function (child, offset) {\n    if (child.type == child.type.schema.linebreakReplacement) {\n      var start = tr.mapping.slice(mapFrom).map(pos + 1 + offset);\n      tr.replaceWith(start, start + 1, node.type.schema.text(\"\\n\"));\n    }\n  });\n}\nfunction canChangeType(doc, pos, type) {\n  var $pos = doc.resolve(pos),\n    index = $pos.index();\n  return $pos.parent.canReplaceWith(index, index + 1, type);\n}\nfunction _setNodeMarkup(tr, pos, type, attrs, marks) {\n  var node = tr.doc.nodeAt(pos);\n  if (!node) throw new RangeError(\"No node at given position\");\n  if (!type) type = node.type;\n  var newNode = type.create(attrs, null, marks || node.marks);\n  if (node.isLeaf) return tr.replaceWith(pos, pos + node.nodeSize, newNode);\n  if (!type.validContent(node.content)) throw new RangeError(\"Invalid content for node type \" + type.name);\n  tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(newNode), 0, 0), 1, true));\n}\nfunction canSplit(doc, pos) {\n  var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n  var typesAfter = arguments.length > 3 ? arguments[3] : undefined;\n  var $pos = doc.resolve(pos),\n    base = $pos.depth - depth;\n  var innerType = typesAfter && typesAfter[typesAfter.length - 1] || $pos.parent;\n  if (base < 0 || $pos.parent.type.spec.isolating || !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) || !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount))) return false;\n  for (var d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n    var node = $pos.node(d),\n      _index = $pos.index(d);\n    if (node.type.spec.isolating) return false;\n    var rest = node.content.cutByIndex(_index, node.childCount);\n    var overrideChild = typesAfter && typesAfter[i + 1];\n    if (overrideChild) rest = rest.replaceChild(0, overrideChild.type.create(overrideChild.attrs));\n    var after = typesAfter && typesAfter[i] || node;\n    if (!node.canReplace(_index + 1, node.childCount) || !after.type.validContent(rest)) return false;\n  }\n  var index = $pos.indexAfter(base);\n  var baseType = typesAfter && typesAfter[0];\n  return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n}\nfunction _split(tr, pos) {\n  var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n  var typesAfter = arguments.length > 3 ? arguments[3] : undefined;\n  var $pos = tr.doc.resolve(pos),\n    before = prosemirrorModel.Fragment.empty,\n    after = prosemirrorModel.Fragment.empty;\n  for (var d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n    before = prosemirrorModel.Fragment.from($pos.node(d).copy(before));\n    var typeAfter = typesAfter && typesAfter[i];\n    after = prosemirrorModel.Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n  }\n  tr.step(new ReplaceStep(pos, pos, new prosemirrorModel.Slice(before.append(after), depth, depth), true));\n}\nfunction canJoin(doc, pos) {\n  var $pos = doc.resolve(pos),\n    index = $pos.index();\n  return joinable($pos.nodeBefore, $pos.nodeAfter) && $pos.parent.canReplace(index, index + 1);\n}\nfunction canAppendWithSubstitutedLinebreaks(a, b) {\n  if (!b.content.size) a.type.compatibleContent(b.type);\n  var match = a.contentMatchAt(a.childCount);\n  var linebreakReplacement = a.type.schema.linebreakReplacement;\n  for (var i = 0; i < b.childCount; i++) {\n    var child = b.child(i);\n    var type = child.type == linebreakReplacement ? a.type.schema.nodes.text : child.type;\n    match = match.matchType(type);\n    if (!match) return false;\n    if (!a.type.allowsMarks(child.marks)) return false;\n  }\n  return match.validEnd;\n}\nfunction joinable(a, b) {\n  return !!(a && b && !a.isLeaf && canAppendWithSubstitutedLinebreaks(a, b));\n}\nfunction joinPoint(doc, pos) {\n  var dir = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;\n  var $pos = doc.resolve(pos);\n  for (var d = $pos.depth;; d--) {\n    var before = void 0,\n      after = void 0,\n      index = $pos.index(d);\n    if (d == $pos.depth) {\n      before = $pos.nodeBefore;\n      after = $pos.nodeAfter;\n    } else if (dir > 0) {\n      before = $pos.node(d + 1);\n      index++;\n      after = $pos.node(d).maybeChild(index);\n    } else {\n      before = $pos.node(d).maybeChild(index - 1);\n      after = $pos.node(d + 1);\n    }\n    if (before && !before.isTextblock && joinable(before, after) && $pos.node(d).canReplace(index, index + 1)) return pos;\n    if (d == 0) break;\n    pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n  }\n}\nfunction _join(tr, pos, depth) {\n  var convertNewlines = null;\n  var linebreakReplacement = tr.doc.type.schema.linebreakReplacement;\n  var $before = tr.doc.resolve(pos - depth),\n    beforeType = $before.node().type;\n  if (linebreakReplacement && beforeType.inlineContent) {\n    var pre = beforeType.whitespace == \"pre\";\n    var supportLinebreak = !!beforeType.contentMatch.matchType(linebreakReplacement);\n    if (pre && !supportLinebreak) convertNewlines = false;else if (!pre && supportLinebreak) convertNewlines = true;\n  }\n  var mapFrom = tr.steps.length;\n  if (convertNewlines === false) {\n    var $after = tr.doc.resolve(pos + depth);\n    replaceLinebreaks(tr, $after.node(), $after.before(), mapFrom);\n  }\n  if (beforeType.inlineContent) _clearIncompatible(tr, pos + depth - 1, beforeType, $before.node().contentMatchAt($before.index()), convertNewlines == null);\n  var mapping = tr.mapping.slice(mapFrom),\n    start = mapping.map(pos - depth);\n  tr.step(new ReplaceStep(start, mapping.map(pos + depth, -1), prosemirrorModel.Slice.empty, true));\n  if (convertNewlines === true) {\n    var $full = tr.doc.resolve(start);\n    replaceNewlines(tr, $full.node(), $full.before(), tr.steps.length);\n  }\n  return tr;\n}\nfunction insertPoint(doc, pos, nodeType) {\n  var $pos = doc.resolve(pos);\n  if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType)) return pos;\n  if ($pos.parentOffset == 0) for (var d = $pos.depth - 1; d >= 0; d--) {\n    var index = $pos.index(d);\n    if ($pos.node(d).canReplaceWith(index, index, nodeType)) return $pos.before(d + 1);\n    if (index > 0) return null;\n  }\n  if ($pos.parentOffset == $pos.parent.content.size) for (var _d2 = $pos.depth - 1; _d2 >= 0; _d2--) {\n    var _index2 = $pos.indexAfter(_d2);\n    if ($pos.node(_d2).canReplaceWith(_index2, _index2, nodeType)) return $pos.after(_d2 + 1);\n    if (_index2 < $pos.node(_d2).childCount) return null;\n  }\n  return null;\n}\nfunction dropPoint(doc, pos, slice) {\n  var $pos = doc.resolve(pos);\n  if (!slice.content.size) return pos;\n  var content = slice.content;\n  for (var i = 0; i < slice.openStart; i++) content = content.firstChild.content;\n  for (var pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n    for (var d = $pos.depth; d >= 0; d--) {\n      var bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n      var insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n      var parent = $pos.node(d),\n        fits = false;\n      if (pass == 1) {\n        fits = parent.canReplace(insertPos, insertPos, content);\n      } else {\n        var wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n        fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n      }\n      if (fits) return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n    }\n  }\n  return null;\n}\nfunction replaceStep(doc, from) {\n  var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : from;\n  var slice = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : prosemirrorModel.Slice.empty;\n  if (from == to && !slice.size) return null;\n  var $from = doc.resolve(from),\n    $to = doc.resolve(to);\n  if (fitsTrivially($from, $to, slice)) return new ReplaceStep(from, to, slice);\n  return new Fitter($from, $to, slice).fit();\n}\nfunction fitsTrivially($from, $to, slice) {\n  return !slice.openStart && !slice.openEnd && $from.start() == $to.start() && $from.parent.canReplace($from.index(), $to.index(), slice.content);\n}\nvar Fitter = function () {\n  function Fitter($from, $to, unplaced) {\n    _classCallCheck(this, Fitter);\n    this.$from = $from;\n    this.$to = $to;\n    this.unplaced = unplaced;\n    this.frontier = [];\n    this.placed = prosemirrorModel.Fragment.empty;\n    for (var i = 0; i <= $from.depth; i++) {\n      var node = $from.node(i);\n      this.frontier.push({\n        type: node.type,\n        match: node.contentMatchAt($from.indexAfter(i))\n      });\n    }\n    for (var _i2 = $from.depth; _i2 > 0; _i2--) this.placed = prosemirrorModel.Fragment.from($from.node(_i2).copy(this.placed));\n  }\n  _createClass(Fitter, [{\n    key: \"depth\",\n    get: function get() {\n      return this.frontier.length - 1;\n    }\n  }, {\n    key: \"fit\",\n    value: function fit() {\n      while (this.unplaced.size) {\n        var fit = this.findFittable();\n        if (fit) this.placeNodes(fit);else this.openMore() || this.dropNode();\n      }\n      var moveInline = this.mustMoveInline(),\n        placedSize = this.placed.size - this.depth - this.$from.depth;\n      var $from = this.$from,\n        $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n      if (!$to) return null;\n      var content = this.placed,\n        openStart = $from.depth,\n        openEnd = $to.depth;\n      while (openStart && openEnd && content.childCount == 1) {\n        content = content.firstChild.content;\n        openStart--;\n        openEnd--;\n      }\n      var slice = new prosemirrorModel.Slice(content, openStart, openEnd);\n      if (moveInline > -1) return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n      if (slice.size || $from.pos != this.$to.pos) return new ReplaceStep($from.pos, $to.pos, slice);\n      return null;\n    }\n  }, {\n    key: \"findFittable\",\n    value: function findFittable() {\n      var startDepth = this.unplaced.openStart;\n      for (var cur = this.unplaced.content, d = 0, openEnd = this.unplaced.openEnd; d < startDepth; d++) {\n        var node = cur.firstChild;\n        if (cur.childCount > 1) openEnd = 0;\n        if (node.type.spec.isolating && openEnd <= d) {\n          startDepth = d;\n          break;\n        }\n        cur = node.content;\n      }\n      for (var pass = 1; pass <= 2; pass++) {\n        for (var sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n          var fragment = void 0,\n            parent = null;\n          if (sliceDepth) {\n            parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n            fragment = parent.content;\n          } else {\n            fragment = this.unplaced.content;\n          }\n          var first = fragment.firstChild;\n          for (var frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n            var _this$frontier$fronti = this.frontier[frontierDepth],\n              type = _this$frontier$fronti.type,\n              match = _this$frontier$fronti.match,\n              _wrap = void 0,\n              inject = null;\n            if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(prosemirrorModel.Fragment.from(first), false)) : parent && type.compatibleContent(parent.type))) return {\n              sliceDepth: sliceDepth,\n              frontierDepth: frontierDepth,\n              parent: parent,\n              inject: inject\n            };else if (pass == 2 && first && (_wrap = match.findWrapping(first.type))) return {\n              sliceDepth: sliceDepth,\n              frontierDepth: frontierDepth,\n              parent: parent,\n              wrap: _wrap\n            };\n            if (parent && match.matchType(parent.type)) break;\n          }\n        }\n      }\n    }\n  }, {\n    key: \"openMore\",\n    value: function openMore() {\n      var _this$unplaced = this.unplaced,\n        content = _this$unplaced.content,\n        openStart = _this$unplaced.openStart,\n        openEnd = _this$unplaced.openEnd;\n      var inner = contentAt(content, openStart);\n      if (!inner.childCount || inner.firstChild.isLeaf) return false;\n      this.unplaced = new prosemirrorModel.Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n      return true;\n    }\n  }, {\n    key: \"dropNode\",\n    value: function dropNode() {\n      var _this$unplaced2 = this.unplaced,\n        content = _this$unplaced2.content,\n        openStart = _this$unplaced2.openStart,\n        openEnd = _this$unplaced2.openEnd;\n      var inner = contentAt(content, openStart);\n      if (inner.childCount <= 1 && openStart > 0) {\n        var openAtEnd = content.size - openStart <= openStart + inner.size;\n        this.unplaced = new prosemirrorModel.Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n      } else {\n        this.unplaced = new prosemirrorModel.Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n      }\n    }\n  }, {\n    key: \"placeNodes\",\n    value: function placeNodes(_ref) {\n      var sliceDepth = _ref.sliceDepth,\n        frontierDepth = _ref.frontierDepth,\n        parent = _ref.parent,\n        inject = _ref.inject,\n        wrap = _ref.wrap;\n      while (this.depth > frontierDepth) this.closeFrontierNode();\n      if (wrap) for (var i = 0; i < wrap.length; i++) this.openFrontierNode(wrap[i]);\n      var slice = this.unplaced,\n        fragment = parent ? parent.content : slice.content;\n      var openStart = slice.openStart - sliceDepth;\n      var taken = 0,\n        add = [];\n      var _this$frontier$fronti2 = this.frontier[frontierDepth],\n        match = _this$frontier$fronti2.match,\n        type = _this$frontier$fronti2.type;\n      if (inject) {\n        for (var _i3 = 0; _i3 < inject.childCount; _i3++) add.push(inject.child(_i3));\n        match = match.matchFragment(inject);\n      }\n      var openEndCount = fragment.size + sliceDepth - (slice.content.size - slice.openEnd);\n      while (taken < fragment.childCount) {\n        var next = fragment.child(taken),\n          matches = match.matchType(next.type);\n        if (!matches) break;\n        taken++;\n        if (taken > 1 || openStart == 0 || next.content.size) {\n          match = matches;\n          add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n        }\n      }\n      var toEnd = taken == fragment.childCount;\n      if (!toEnd) openEndCount = -1;\n      this.placed = addToFragment(this.placed, frontierDepth, prosemirrorModel.Fragment.from(add));\n      this.frontier[frontierDepth].match = match;\n      if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1) this.closeFrontierNode();\n      for (var _i4 = 0, cur = fragment; _i4 < openEndCount; _i4++) {\n        var node = cur.lastChild;\n        this.frontier.push({\n          type: node.type,\n          match: node.contentMatchAt(node.childCount)\n        });\n        cur = node.content;\n      }\n      this.unplaced = !toEnd ? new prosemirrorModel.Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd) : sliceDepth == 0 ? prosemirrorModel.Slice.empty : new prosemirrorModel.Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n    }\n  }, {\n    key: \"mustMoveInline\",\n    value: function mustMoveInline() {\n      if (!this.$to.parent.isTextblock) return -1;\n      var top = this.frontier[this.depth],\n        level;\n      if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) || this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth) return -1;\n      var depth = this.$to.depth,\n        after = this.$to.after(depth);\n      while (depth > 1 && after == this.$to.end(--depth)) ++after;\n      return after;\n    }\n  }, {\n    key: \"findCloseLevel\",\n    value: function findCloseLevel($to) {\n      scan: for (var i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n        var _this$frontier$i = this.frontier[i],\n          match = _this$frontier$i.match,\n          type = _this$frontier$i.type;\n        var dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n        var fit = contentAfterFits($to, i, type, match, dropInner);\n        if (!fit) continue;\n        for (var d = i - 1; d >= 0; d--) {\n          var _this$frontier$d = this.frontier[d],\n            _match = _this$frontier$d.match,\n            _type = _this$frontier$d.type;\n          var matches = contentAfterFits($to, d, _type, _match, true);\n          if (!matches || matches.childCount) continue scan;\n        }\n        return {\n          depth: i,\n          fit: fit,\n          move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to\n        };\n      }\n    }\n  }, {\n    key: \"close\",\n    value: function close($to) {\n      var close = this.findCloseLevel($to);\n      if (!close) return null;\n      while (this.depth > close.depth) this.closeFrontierNode();\n      if (close.fit.childCount) this.placed = addToFragment(this.placed, close.depth, close.fit);\n      $to = close.move;\n      for (var d = close.depth + 1; d <= $to.depth; d++) {\n        var node = $to.node(d),\n          add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n        this.openFrontierNode(node.type, node.attrs, add);\n      }\n      return $to;\n    }\n  }, {\n    key: \"openFrontierNode\",\n    value: function openFrontierNode(type) {\n      var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var content = arguments.length > 2 ? arguments[2] : undefined;\n      var top = this.frontier[this.depth];\n      top.match = top.match.matchType(type);\n      this.placed = addToFragment(this.placed, this.depth, prosemirrorModel.Fragment.from(type.create(attrs, content)));\n      this.frontier.push({\n        type: type,\n        match: type.contentMatch\n      });\n    }\n  }, {\n    key: \"closeFrontierNode\",\n    value: function closeFrontierNode() {\n      var open = this.frontier.pop();\n      var add = open.match.fillBefore(prosemirrorModel.Fragment.empty, true);\n      if (add.childCount) this.placed = addToFragment(this.placed, this.frontier.length, add);\n    }\n  }]);\n  return Fitter;\n}();\nfunction dropFromFragment(fragment, depth, count) {\n  if (depth == 0) return fragment.cutByIndex(count, fragment.childCount);\n  return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\nfunction addToFragment(fragment, depth, content) {\n  if (depth == 0) return fragment.append(content);\n  return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\nfunction contentAt(fragment, depth) {\n  for (var i = 0; i < depth; i++) fragment = fragment.firstChild.content;\n  return fragment;\n}\nfunction closeNodeStart(node, openStart, openEnd) {\n  if (openStart <= 0) return node;\n  var frag = node.content;\n  if (openStart > 1) frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n  if (openStart > 0) {\n    frag = node.type.contentMatch.fillBefore(frag).append(frag);\n    if (openEnd <= 0) frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(prosemirrorModel.Fragment.empty, true));\n  }\n  return node.copy(frag);\n}\nfunction contentAfterFits($to, depth, type, match, open) {\n  var node = $to.node(depth),\n    index = open ? $to.indexAfter(depth) : $to.index(depth);\n  if (index == node.childCount && !type.compatibleContent(node.type)) return null;\n  var fit = match.fillBefore(node.content, true, index);\n  return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\nfunction invalidMarks(type, fragment, start) {\n  for (var i = start; i < fragment.childCount; i++) if (!type.allowsMarks(fragment.child(i).marks)) return true;\n  return false;\n}\nfunction definesContent(type) {\n  return type.spec.defining || type.spec.definingForContent;\n}\nfunction _replaceRange(tr, from, to, slice) {\n  if (!slice.size) return tr.deleteRange(from, to);\n  var $from = tr.doc.resolve(from),\n    $to = tr.doc.resolve(to);\n  if (fitsTrivially($from, $to, slice)) return tr.step(new ReplaceStep(from, to, slice));\n  var targetDepths = coveredDepths($from, $to);\n  if (targetDepths[targetDepths.length - 1] == 0) targetDepths.pop();\n  var preferredTarget = -($from.depth + 1);\n  targetDepths.unshift(preferredTarget);\n  for (var d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n    var spec = $from.node(d).type.spec;\n    if (spec.defining || spec.definingAsContext || spec.isolating) break;\n    if (targetDepths.indexOf(d) > -1) preferredTarget = d;else if ($from.before(d) == pos) targetDepths.splice(1, 0, -d);\n  }\n  var preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n  var leftNodes = [],\n    preferredDepth = slice.openStart;\n  for (var content = slice.content, i = 0;; i++) {\n    var node = content.firstChild;\n    leftNodes.push(node);\n    if (i == slice.openStart) break;\n    content = node.content;\n  }\n  for (var _d3 = preferredDepth - 1; _d3 >= 0; _d3--) {\n    var leftNode = leftNodes[_d3],\n      def = definesContent(leftNode.type);\n    if (def && !leftNode.sameMarkup($from.node(Math.abs(preferredTarget) - 1))) preferredDepth = _d3;else if (def || !leftNode.type.isTextblock) break;\n  }\n  for (var j = slice.openStart; j >= 0; j--) {\n    var openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n    var insert = leftNodes[openDepth];\n    if (!insert) continue;\n    for (var _i5 = 0; _i5 < targetDepths.length; _i5++) {\n      var targetDepth = targetDepths[(_i5 + preferredTargetIndex) % targetDepths.length],\n        expand = true;\n      if (targetDepth < 0) {\n        expand = false;\n        targetDepth = -targetDepth;\n      }\n      var parent = $from.node(targetDepth - 1),\n        index = $from.index(targetDepth - 1);\n      if (parent.canReplaceWith(index, index, insert.type, insert.marks)) return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new prosemirrorModel.Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n    }\n  }\n  var startSteps = tr.steps.length;\n  for (var _i6 = targetDepths.length - 1; _i6 >= 0; _i6--) {\n    tr.replace(from, to, slice);\n    if (tr.steps.length > startSteps) break;\n    var depth = targetDepths[_i6];\n    if (depth < 0) continue;\n    from = $from.before(depth);\n    to = $to.after(depth);\n  }\n}\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n  if (depth < oldOpen) {\n    var first = fragment.firstChild;\n    fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n  }\n  if (depth > newOpen) {\n    var match = parent.contentMatchAt(0);\n    var start = match.fillBefore(fragment).append(fragment);\n    fragment = start.append(match.matchFragment(start).fillBefore(prosemirrorModel.Fragment.empty, true));\n  }\n  return fragment;\n}\nfunction _replaceRangeWith(tr, from, to, node) {\n  if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) {\n    var point = insertPoint(tr.doc, from, node.type);\n    if (point != null) from = to = point;\n  }\n  tr.replaceRange(from, to, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(node), 0, 0));\n}\nfunction _deleteRange(tr, from, to) {\n  var $from = tr.doc.resolve(from),\n    $to = tr.doc.resolve(to);\n  if ($from.parent.isTextblock && $to.parent.isTextblock && $from.start() != $to.start() && $from.parentOffset == 0 && $to.parentOffset == 0) {\n    var shared = $from.sharedDepth(to),\n      isolated = false;\n    for (var d = $from.depth; d > shared; d--) if ($from.node(d).type.spec.isolating) isolated = true;\n    for (var _d4 = $to.depth; _d4 > shared; _d4--) if ($to.node(_d4).type.spec.isolating) isolated = true;\n    if (!isolated) {\n      for (var _d5 = $from.depth; _d5 > 0 && from == $from.start(_d5); _d5--) from = $from.before(_d5);\n      for (var _d6 = $to.depth; _d6 > 0 && to == $to.start(_d6); _d6--) to = $to.before(_d6);\n      $from = tr.doc.resolve(from);\n      $to = tr.doc.resolve(to);\n    }\n  }\n  var covered = coveredDepths($from, $to);\n  for (var i = 0; i < covered.length; i++) {\n    var depth = covered[i],\n      last = i == covered.length - 1;\n    if (last && depth == 0 || $from.node(depth).type.contentMatch.validEnd) return tr[\"delete\"]($from.start(depth), $to.end(depth));\n    if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1)))) return tr[\"delete\"]($from.before(depth), $to.after(depth));\n  }\n  for (var _d7 = 1; _d7 <= $from.depth && _d7 <= $to.depth; _d7++) {\n    if (from - $from.start(_d7) == $from.depth - _d7 && to > $from.end(_d7) && $to.end(_d7) - to != $to.depth - _d7 && $from.start(_d7 - 1) == $to.start(_d7 - 1) && $from.node(_d7 - 1).canReplace($from.index(_d7 - 1), $to.index(_d7 - 1))) return tr[\"delete\"]($from.before(_d7), to);\n  }\n  tr[\"delete\"](from, to);\n}\nfunction coveredDepths($from, $to) {\n  var result = [],\n    minDepth = Math.min($from.depth, $to.depth);\n  for (var d = minDepth; d >= 0; d--) {\n    var start = $from.start(d);\n    if (start < $from.pos - ($from.depth - d) || $to.end(d) > $to.pos + ($to.depth - d) || $from.node(d).type.spec.isolating || $to.node(d).type.spec.isolating) break;\n    if (start == $to.start(d) || d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent && d && $to.start(d - 1) == start - 1) result.push(d);\n  }\n  return result;\n}\nvar AttrStep = function (_Step7) {\n  _inherits(AttrStep, _Step7);\n  var _super7 = _createSuper(AttrStep);\n  function AttrStep(pos, attr, value) {\n    var _this9;\n    _classCallCheck(this, AttrStep);\n    _this9 = _super7.call(this);\n    _this9.pos = pos;\n    _this9.attr = attr;\n    _this9.value = value;\n    return _this9;\n  }\n  _createClass(AttrStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      var node = doc.nodeAt(this.pos);\n      if (!node) return StepResult.fail(\"No node at attribute step's position\");\n      var attrs = Object.create(null);\n      for (var name in node.attrs) attrs[name] = node.attrs[name];\n      attrs[this.attr] = this.value;\n      var updated = node.type.create(attrs, null, node.marks);\n      return StepResult.fromReplace(doc, this.pos, this.pos + 1, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n    }\n  }, {\n    key: \"getMap\",\n    value: function getMap() {\n      return StepMap.empty;\n    }\n  }, {\n    key: \"invert\",\n    value: function invert(doc) {\n      return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      var pos = mapping.mapResult(this.pos, 1);\n      return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        stepType: \"attr\",\n        pos: this.pos,\n        attr: this.attr,\n        value: this.value\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.pos != \"number\" || typeof json.attr != \"string\") throw new RangeError(\"Invalid input for AttrStep.fromJSON\");\n      return new AttrStep(json.pos, json.attr, json.value);\n    }\n  }]);\n  return AttrStep;\n}(Step);\nStep.jsonID(\"attr\", AttrStep);\nvar DocAttrStep = function (_Step8) {\n  _inherits(DocAttrStep, _Step8);\n  var _super8 = _createSuper(DocAttrStep);\n  function DocAttrStep(attr, value) {\n    var _this10;\n    _classCallCheck(this, DocAttrStep);\n    _this10 = _super8.call(this);\n    _this10.attr = attr;\n    _this10.value = value;\n    return _this10;\n  }\n  _createClass(DocAttrStep, [{\n    key: \"apply\",\n    value: function apply(doc) {\n      var attrs = Object.create(null);\n      for (var name in doc.attrs) attrs[name] = doc.attrs[name];\n      attrs[this.attr] = this.value;\n      var updated = doc.type.create(attrs, doc.content, doc.marks);\n      return StepResult.ok(updated);\n    }\n  }, {\n    key: \"getMap\",\n    value: function getMap() {\n      return StepMap.empty;\n    }\n  }, {\n    key: \"invert\",\n    value: function invert(doc) {\n      return new DocAttrStep(this.attr, doc.attrs[this.attr]);\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping) {\n      return this;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        stepType: \"docAttr\",\n        attr: this.attr,\n        value: this.value\n      };\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(schema, json) {\n      if (typeof json.attr != \"string\") throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");\n      return new DocAttrStep(json.attr, json.value);\n    }\n  }]);\n  return DocAttrStep;\n}(Step);\nStep.jsonID(\"docAttr\", DocAttrStep);\nexports.TransformError = function (_Error) {\n  _inherits(TransformError, _Error);\n  var _super9 = _createSuper(TransformError);\n  function TransformError() {\n    _classCallCheck(this, TransformError);\n    return _super9.apply(this, arguments);\n  }\n  return _createClass(TransformError);\n}(_wrapNativeSuper(Error));\nexports.TransformError = function TransformError(message) {\n  var err = Error.call(this, message);\n  err.__proto__ = TransformError.prototype;\n  return err;\n};\nexports.TransformError.prototype = Object.create(Error.prototype);\nexports.TransformError.prototype.constructor = exports.TransformError;\nexports.TransformError.prototype.name = \"TransformError\";\nvar Transform = function () {\n  function Transform(doc) {\n    _classCallCheck(this, Transform);\n    this.doc = doc;\n    this.steps = [];\n    this.docs = [];\n    this.mapping = new Mapping();\n  }\n  _createClass(Transform, [{\n    key: \"before\",\n    get: function get() {\n      return this.docs.length ? this.docs[0] : this.doc;\n    }\n  }, {\n    key: \"step\",\n    value: function step(_step) {\n      var result = this.maybeStep(_step);\n      if (result.failed) throw new exports.TransformError(result.failed);\n      return this;\n    }\n  }, {\n    key: \"maybeStep\",\n    value: function maybeStep(step) {\n      var result = step.apply(this.doc);\n      if (!result.failed) this.addStep(step, result.doc);\n      return result;\n    }\n  }, {\n    key: \"docChanged\",\n    get: function get() {\n      return this.steps.length > 0;\n    }\n  }, {\n    key: \"changedRange\",\n    value: function changedRange() {\n      var from = 1e9,\n        to = -1e9;\n      for (var i = 0; i < this.mapping.maps.length; i++) {\n        var map = this.mapping.maps[i];\n        if (i) {\n          from = map.map(from, 1);\n          to = map.map(to, -1);\n        }\n        map.forEach(function (_f, _t, fromB, toB) {\n          from = Math.min(from, fromB);\n          to = Math.max(to, toB);\n        });\n      }\n      return from == 1e9 ? null : {\n        from: from,\n        to: to\n      };\n    }\n  }, {\n    key: \"addStep\",\n    value: function addStep(step, doc) {\n      this.docs.push(this.doc);\n      this.steps.push(step);\n      this.mapping.appendMap(step.getMap());\n      this.doc = doc;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace(from) {\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : from;\n      var slice = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : prosemirrorModel.Slice.empty;\n      var step = replaceStep(this.doc, from, to, slice);\n      if (step) this.step(step);\n      return this;\n    }\n  }, {\n    key: \"replaceWith\",\n    value: function replaceWith(from, to, content) {\n      return this.replace(from, to, new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(content), 0, 0));\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(from, to) {\n      return this.replace(from, to, prosemirrorModel.Slice.empty);\n    }\n  }, {\n    key: \"insert\",\n    value: function insert(pos, content) {\n      return this.replaceWith(pos, pos, content);\n    }\n  }, {\n    key: \"replaceRange\",\n    value: function replaceRange(from, to, slice) {\n      _replaceRange(this, from, to, slice);\n      return this;\n    }\n  }, {\n    key: \"replaceRangeWith\",\n    value: function replaceRangeWith(from, to, node) {\n      _replaceRangeWith(this, from, to, node);\n      return this;\n    }\n  }, {\n    key: \"deleteRange\",\n    value: function deleteRange(from, to) {\n      _deleteRange(this, from, to);\n      return this;\n    }\n  }, {\n    key: \"lift\",\n    value: function lift(range, target) {\n      _lift(this, range, target);\n      return this;\n    }\n  }, {\n    key: \"join\",\n    value: function join(pos) {\n      var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      _join(this, pos, depth);\n      return this;\n    }\n  }, {\n    key: \"wrap\",\n    value: function wrap(range, wrappers) {\n      _wrap2(this, range, wrappers);\n      return this;\n    }\n  }, {\n    key: \"setBlockType\",\n    value: function setBlockType(from) {\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : from;\n      var type = arguments.length > 2 ? arguments[2] : undefined;\n      var attrs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n      _setBlockType(this, from, to, type, attrs);\n      return this;\n    }\n  }, {\n    key: \"setNodeMarkup\",\n    value: function setNodeMarkup(pos, type) {\n      var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      var marks = arguments.length > 3 ? arguments[3] : undefined;\n      _setNodeMarkup(this, pos, type, attrs, marks);\n      return this;\n    }\n  }, {\n    key: \"setNodeAttribute\",\n    value: function setNodeAttribute(pos, attr, value) {\n      this.step(new AttrStep(pos, attr, value));\n      return this;\n    }\n  }, {\n    key: \"setDocAttribute\",\n    value: function setDocAttribute(attr, value) {\n      this.step(new DocAttrStep(attr, value));\n      return this;\n    }\n  }, {\n    key: \"addNodeMark\",\n    value: function addNodeMark(pos, mark) {\n      this.step(new AddNodeMarkStep(pos, mark));\n      return this;\n    }\n  }, {\n    key: \"removeNodeMark\",\n    value: function removeNodeMark(pos, mark) {\n      var node = this.doc.nodeAt(pos);\n      if (!node) throw new RangeError(\"No node at position \" + pos);\n      if (mark instanceof prosemirrorModel.Mark) {\n        if (mark.isInSet(node.marks)) this.step(new RemoveNodeMarkStep(pos, mark));\n      } else {\n        var set = node.marks,\n          found,\n          steps = [];\n        while (found = mark.isInSet(set)) {\n          steps.push(new RemoveNodeMarkStep(pos, found));\n          set = found.removeFromSet(set);\n        }\n        for (var i = steps.length - 1; i >= 0; i--) this.step(steps[i]);\n      }\n      return this;\n    }\n  }, {\n    key: \"split\",\n    value: function split(pos) {\n      var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var typesAfter = arguments.length > 2 ? arguments[2] : undefined;\n      _split(this, pos, depth, typesAfter);\n      return this;\n    }\n  }, {\n    key: \"addMark\",\n    value: function addMark(from, to, mark) {\n      _addMark(this, from, to, mark);\n      return this;\n    }\n  }, {\n    key: \"removeMark\",\n    value: function removeMark(from, to, mark) {\n      _removeMark(this, from, to, mark);\n      return this;\n    }\n  }, {\n    key: \"clearIncompatible\",\n    value: function clearIncompatible(pos, parentType, match) {\n      _clearIncompatible(this, pos, parentType, match);\n      return this;\n    }\n  }]);\n  return Transform;\n}();\nexports.AddMarkStep = AddMarkStep;\nexports.AddNodeMarkStep = AddNodeMarkStep;\nexports.AttrStep = AttrStep;\nexports.DocAttrStep = DocAttrStep;\nexports.MapResult = MapResult;\nexports.Mapping = Mapping;\nexports.RemoveMarkStep = RemoveMarkStep;\nexports.RemoveNodeMarkStep = RemoveNodeMarkStep;\nexports.ReplaceAroundStep = ReplaceAroundStep;\nexports.ReplaceStep = ReplaceStep;\nexports.Step = Step;\nexports.StepMap = StepMap;\nexports.StepResult = StepResult;\nexports.Transform = Transform;\nexports.canJoin = canJoin;\nexports.canSplit = canSplit;\nexports.dropPoint = dropPoint;\nexports.findWrapping = findWrapping;\nexports.insertPoint = insertPoint;\nexports.joinPoint = joinPoint;\nexports.liftTarget = liftTarget;\nexports.replaceStep = replaceStep;\n","'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar prosemirrorState = require('prosemirror-state');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorTransform = require('prosemirror-transform');\nvar domIndex = function domIndex(node) {\n  for (var index = 0;; index++) {\n    node = node.previousSibling;\n    if (!node) return index;\n  }\n};\nvar parentNode = function parentNode(node) {\n  var parent = node.assignedSlot || node.parentNode;\n  return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nvar reusedRange = null;\nvar textRange = function textRange(node, from, to) {\n  var range = reusedRange || (reusedRange = document.createRange());\n  range.setEnd(node, to == null ? node.nodeValue.length : to);\n  range.setStart(node, from || 0);\n  return range;\n};\nvar clearReusedRange = function clearReusedRange() {\n  reusedRange = null;\n};\nvar isEquivalentPosition = function isEquivalentPosition(node, off, targetNode, targetOff) {\n  return targetNode && (scanFor(node, off, targetNode, targetOff, -1) || scanFor(node, off, targetNode, targetOff, 1));\n};\nvar atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n  var _a;\n  for (;;) {\n    if (node == targetNode && off == targetOff) return true;\n    if (off == (dir < 0 ? 0 : nodeSize(node))) {\n      var parent = node.parentNode;\n      if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) || node.contentEditable == \"false\") return false;\n      off = domIndex(node) + (dir < 0 ? 0 : 1);\n      node = parent;\n    } else if (node.nodeType == 1) {\n      var child = node.childNodes[off + (dir < 0 ? -1 : 0)];\n      if (child.nodeType == 1 && child.contentEditable == \"false\") {\n        if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection) off += dir;else return false;\n      } else {\n        node = child;\n        off = dir < 0 ? nodeSize(node) : 0;\n      }\n    } else {\n      return false;\n    }\n  }\n}\nfunction nodeSize(node) {\n  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction textNodeBefore$1(node, offset) {\n  for (;;) {\n    if (node.nodeType == 3 && offset) return node;\n    if (node.nodeType == 1 && offset > 0) {\n      if (node.contentEditable == \"false\") return null;\n      node = node.childNodes[offset - 1];\n      offset = nodeSize(node);\n    } else if (node.parentNode && !hasBlockDesc(node)) {\n      offset = domIndex(node);\n      node = node.parentNode;\n    } else {\n      return null;\n    }\n  }\n}\nfunction textNodeAfter$1(node, offset) {\n  for (;;) {\n    if (node.nodeType == 3 && offset < node.nodeValue.length) return node;\n    if (node.nodeType == 1 && offset < node.childNodes.length) {\n      if (node.contentEditable == \"false\") return null;\n      node = node.childNodes[offset];\n      offset = 0;\n    } else if (node.parentNode && !hasBlockDesc(node)) {\n      offset = domIndex(node) + 1;\n      node = node.parentNode;\n    } else {\n      return null;\n    }\n  }\n}\nfunction isOnEdge(node, offset, parent) {\n  for (var atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n    if (node == parent) return true;\n    var index = domIndex(node);\n    node = node.parentNode;\n    if (!node) return false;\n    atStart = atStart && index == 0;\n    atEnd = atEnd && index == nodeSize(node);\n  }\n}\nfunction hasBlockDesc(dom) {\n  var desc;\n  for (var cur = dom; cur; cur = cur.parentNode) if (desc = cur.pmViewDesc) break;\n  return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\nvar selectionCollapsed = function selectionCollapsed(domSel) {\n  return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n  var event = document.createEvent(\"Event\");\n  event.initEvent(\"keydown\", true, true);\n  event.keyCode = keyCode;\n  event.key = event.code = key;\n  return event;\n}\nfunction deepActiveElement(doc) {\n  var elt = doc.activeElement;\n  while (elt && elt.shadowRoot) elt = elt.shadowRoot.activeElement;\n  return elt;\n}\nfunction caretFromPoint(doc, x, y) {\n  if (doc.caretPositionFromPoint) {\n    try {\n      var pos = doc.caretPositionFromPoint(x, y);\n      if (pos) return {\n        node: pos.offsetNode,\n        offset: Math.min(nodeSize(pos.offsetNode), pos.offset)\n      };\n    } catch (_) {}\n  }\n  if (doc.caretRangeFromPoint) {\n    var range = doc.caretRangeFromPoint(x, y);\n    if (range) return {\n      node: range.startContainer,\n      offset: Math.min(nodeSize(range.startContainer), range.startOffset)\n    };\n  }\n}\nvar nav = typeof navigator != \"undefined\" ? navigator : null;\nvar doc = typeof document != \"undefined\" ? document : null;\nvar agent = nav && nav.userAgent || \"\";\nvar ie_edge = /Edge\\/(\\d+)/.exec(agent);\nvar ie_upto10 = /MSIE \\d/.exec(agent);\nvar ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nvar ie = !!(ie_upto10 || ie_11up || ie_edge);\nvar ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nvar gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nvar _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nvar chrome = !!_chrome;\nvar chrome_version = _chrome ? +_chrome[1] : 0;\nvar safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\nvar ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nvar mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nvar windows = nav ? /Win/.test(nav.platform) : false;\nvar android = /Android \\d/.test(agent);\nvar webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nvar webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\nfunction windowRect(doc) {\n  var vp = doc.defaultView && doc.defaultView.visualViewport;\n  if (vp) return {\n    left: 0,\n    right: vp.width,\n    top: 0,\n    bottom: vp.height\n  };\n  return {\n    left: 0,\n    right: doc.documentElement.clientWidth,\n    top: 0,\n    bottom: doc.documentElement.clientHeight\n  };\n}\nfunction getSide(value, side) {\n  return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n  var rect = node.getBoundingClientRect();\n  var scaleX = rect.width / node.offsetWidth || 1;\n  var scaleY = rect.height / node.offsetHeight || 1;\n  return {\n    left: rect.left,\n    right: rect.left + node.clientWidth * scaleX,\n    top: rect.top,\n    bottom: rect.top + node.clientHeight * scaleY\n  };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n  if (!nonZero(rect) && rect.left == 0) return;\n  var scrollThreshold = view.someProp(\"scrollThreshold\") || 0,\n    scrollMargin = view.someProp(\"scrollMargin\") || 5;\n  var doc = view.dom.ownerDocument;\n  for (var parent = startDOM || view.dom;;) {\n    if (!parent) break;\n    if (parent.nodeType != 1) {\n      parent = parentNode(parent);\n      continue;\n    }\n    var elt = parent;\n    var atTop = elt == doc.body;\n    var bounding = atTop ? windowRect(doc) : clientRect(elt);\n    var moveX = 0,\n      moveY = 0;\n    if (rect.top < bounding.top + getSide(scrollThreshold, \"top\")) moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\")) moveY = rect.bottom - rect.top > bounding.bottom - bounding.top ? rect.top + getSide(scrollMargin, \"top\") - bounding.top : rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n    if (rect.left < bounding.left + getSide(scrollThreshold, \"left\")) moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\")) moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n    if (moveX || moveY) {\n      if (atTop) {\n        doc.defaultView.scrollBy(moveX, moveY);\n      } else {\n        var startX = elt.scrollLeft,\n          startY = elt.scrollTop;\n        if (moveY) elt.scrollTop += moveY;\n        if (moveX) elt.scrollLeft += moveX;\n        var dX = elt.scrollLeft - startX,\n          dY = elt.scrollTop - startY;\n        rect = {\n          left: rect.left - dX,\n          top: rect.top - dY,\n          right: rect.right - dX,\n          bottom: rect.bottom - dY\n        };\n      }\n    }\n    var pos = atTop ? \"fixed\" : getComputedStyle(parent).position;\n    if (/^(fixed|sticky)$/.test(pos)) break;\n    parent = pos == \"absolute\" ? parent.offsetParent : parentNode(parent);\n  }\n}\nfunction storeScrollPos(view) {\n  var rect = view.dom.getBoundingClientRect(),\n    startY = Math.max(0, rect.top);\n  var refDOM, refTop;\n  for (var x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n    var dom = view.root.elementFromPoint(x, y);\n    if (!dom || dom == view.dom || !view.dom.contains(dom)) continue;\n    var localRect = dom.getBoundingClientRect();\n    if (localRect.top >= startY - 20) {\n      refDOM = dom;\n      refTop = localRect.top;\n      break;\n    }\n  }\n  return {\n    refDOM: refDOM,\n    refTop: refTop,\n    stack: scrollStack(view.dom)\n  };\n}\nfunction scrollStack(dom) {\n  var stack = [],\n    doc = dom.ownerDocument;\n  for (var cur = dom; cur; cur = parentNode(cur)) {\n    stack.push({\n      dom: cur,\n      top: cur.scrollTop,\n      left: cur.scrollLeft\n    });\n    if (dom == doc) break;\n  }\n  return stack;\n}\nfunction resetScrollPos(_ref) {\n  var refDOM = _ref.refDOM,\n    refTop = _ref.refTop,\n    stack = _ref.stack;\n  var newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n  restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n  for (var i = 0; i < stack.length; i++) {\n    var _stack$i = stack[i],\n      dom = _stack$i.dom,\n      top = _stack$i.top,\n      left = _stack$i.left;\n    if (dom.scrollTop != top + dTop) dom.scrollTop = top + dTop;\n    if (dom.scrollLeft != left) dom.scrollLeft = left;\n  }\n}\nvar preventScrollSupported = null;\nfunction focusPreventScroll(dom) {\n  if (dom.setActive) return dom.setActive();\n  if (preventScrollSupported) return dom.focus(preventScrollSupported);\n  var stored = scrollStack(dom);\n  dom.focus(preventScrollSupported == null ? {\n    get preventScroll() {\n      preventScrollSupported = {\n        preventScroll: true\n      };\n      return true;\n    }\n  } : undefined);\n  if (!preventScrollSupported) {\n    preventScrollSupported = false;\n    restoreScrollStack(stored, 0);\n  }\n}\nfunction findOffsetInNode(node, coords) {\n  var closest,\n    dxClosest = 2e8,\n    coordsClosest,\n    offset = 0;\n  var rowBot = coords.top,\n    rowTop = coords.top;\n  var firstBelow, coordsBelow;\n  for (var child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n    var rects = void 0;\n    if (child.nodeType == 1) rects = child.getClientRects();else if (child.nodeType == 3) rects = textRange(child).getClientRects();else continue;\n    for (var i = 0; i < rects.length; i++) {\n      var rect = rects[i];\n      if (rect.top <= rowBot && rect.bottom >= rowTop) {\n        rowBot = Math.max(rect.bottom, rowBot);\n        rowTop = Math.min(rect.top, rowTop);\n        var dx = rect.left > coords.left ? rect.left - coords.left : rect.right < coords.left ? coords.left - rect.right : 0;\n        if (dx < dxClosest) {\n          closest = child;\n          dxClosest = dx;\n          coordsClosest = dx && closest.nodeType == 3 ? {\n            left: rect.right < coords.left ? rect.right : rect.left,\n            top: coords.top\n          } : coords;\n          if (child.nodeType == 1 && dx) offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n          continue;\n        }\n      } else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {\n        firstBelow = child;\n        coordsBelow = {\n          left: Math.max(rect.left, Math.min(rect.right, coords.left)),\n          top: rect.top\n        };\n      }\n      if (!closest && (coords.left >= rect.right && coords.top >= rect.top || coords.left >= rect.left && coords.top >= rect.bottom)) offset = childIndex + 1;\n    }\n  }\n  if (!closest && firstBelow) {\n    closest = firstBelow;\n    coordsClosest = coordsBelow;\n    dxClosest = 0;\n  }\n  if (closest && closest.nodeType == 3) return findOffsetInText(closest, coordsClosest);\n  if (!closest || dxClosest && closest.nodeType == 1) return {\n    node: node,\n    offset: offset\n  };\n  return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n  var len = node.nodeValue.length;\n  var range = document.createRange(),\n    result;\n  for (var i = 0; i < len; i++) {\n    range.setEnd(node, i + 1);\n    range.setStart(node, i);\n    var rect = singleRect(range, 1);\n    if (rect.top == rect.bottom) continue;\n    if (inRect(coords, rect)) {\n      result = {\n        node: node,\n        offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0)\n      };\n      break;\n    }\n  }\n  range.detach();\n  return result || {\n    node: node,\n    offset: 0\n  };\n}\nfunction inRect(coords, rect) {\n  return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 && coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n  var parent = dom.parentNode;\n  if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left) return parent;\n  return dom;\n}\nfunction posFromElement(view, elt, coords) {\n  var _findOffsetInNode = findOffsetInNode(elt, coords),\n    node = _findOffsetInNode.node,\n    offset = _findOffsetInNode.offset,\n    bias = -1;\n  if (node.nodeType == 1 && !node.firstChild) {\n    var rect = node.getBoundingClientRect();\n    bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n  }\n  return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n  var outsideBlock = -1;\n  for (var cur = node, sawBlock = false;;) {\n    if (cur == view.dom) break;\n    var desc = view.docView.nearestDesc(cur, true),\n      rect = void 0;\n    if (!desc) return null;\n    if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) && ((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {\n      if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {\n        if (!sawBlock && rect.left > coords.left || rect.top > coords.top) outsideBlock = desc.posBefore;else if (!sawBlock && rect.right < coords.left || rect.bottom < coords.top) outsideBlock = desc.posAfter;\n        sawBlock = true;\n      }\n      if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {\n        var before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2 : coords.left < (rect.left + rect.right) / 2;\n        return before ? desc.posBefore : desc.posAfter;\n      }\n    }\n    cur = desc.dom.parentNode;\n  }\n  return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset, -1);\n}\nfunction elementFromPoint(element, coords, box) {\n  var len = element.childNodes.length;\n  if (len && box.top < box.bottom) {\n    for (var startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n      var child = element.childNodes[i];\n      if (child.nodeType == 1) {\n        var rects = child.getClientRects();\n        for (var j = 0; j < rects.length; j++) {\n          var rect = rects[j];\n          if (inRect(coords, rect)) return elementFromPoint(child, coords, rect);\n        }\n      }\n      if ((i = (i + 1) % len) == startI) break;\n    }\n  }\n  return element;\n}\nfunction _posAtCoords(view, coords) {\n  var doc = view.dom.ownerDocument,\n    node,\n    offset = 0;\n  var caret = caretFromPoint(doc, coords.left, coords.top);\n  if (caret) {\n    node = caret.node;\n    offset = caret.offset;\n  }\n  var elt = (view.root.elementFromPoint ? view.root : doc).elementFromPoint(coords.left, coords.top);\n  var pos;\n  if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n    var box = view.dom.getBoundingClientRect();\n    if (!inRect(coords, box)) return null;\n    elt = elementFromPoint(view.dom, coords, box);\n    if (!elt) return null;\n  }\n  if (safari) {\n    for (var p = elt; node && p; p = parentNode(p)) if (p.draggable) node = undefined;\n  }\n  elt = targetKludge(elt, coords);\n  if (node) {\n    if (gecko && node.nodeType == 1) {\n      offset = Math.min(offset, node.childNodes.length);\n      if (offset < node.childNodes.length) {\n        var next = node.childNodes[offset],\n          _box;\n        if (next.nodeName == \"IMG\" && (_box = next.getBoundingClientRect()).right <= coords.left && _box.bottom > coords.top) offset++;\n      }\n    }\n    var prev;\n    if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 && prev.contentEditable == \"false\" && prev.getBoundingClientRect().top >= coords.top) offset--;\n    if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 && coords.top > node.lastChild.getBoundingClientRect().bottom) pos = view.state.doc.content.size;else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\") pos = posFromCaret(view, node, offset, coords);\n  }\n  if (pos == null) pos = posFromElement(view, elt, coords);\n  var desc = view.docView.nearestDesc(elt, true);\n  return {\n    pos: pos,\n    inside: desc ? desc.posAtStart - desc.border : -1\n  };\n}\nfunction nonZero(rect) {\n  return rect.top < rect.bottom || rect.left < rect.right;\n}\nfunction singleRect(target, bias) {\n  var rects = target.getClientRects();\n  if (rects.length) {\n    var first = rects[bias < 0 ? 0 : rects.length - 1];\n    if (nonZero(first)) return first;\n  }\n  return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();\n}\nvar BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\nfunction _coordsAtPos(view, pos, side) {\n  var _view$docView$domFrom = view.docView.domFromPos(pos, side < 0 ? -1 : 1),\n    node = _view$docView$domFrom.node,\n    offset = _view$docView$domFrom.offset,\n    atom = _view$docView$domFrom.atom;\n  var supportEmptyRange = webkit || gecko;\n  if (node.nodeType == 3) {\n    if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n      var rect = singleRect(textRange(node, offset, offset), side);\n      if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n        var rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n        if (rectBefore.top == rect.top) {\n          var rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n          if (rectAfter.top != rect.top) return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n        }\n      }\n      return rect;\n    } else {\n      var from = offset,\n        to = offset,\n        takeSide = side < 0 ? 1 : -1;\n      if (side < 0 && !offset) {\n        to++;\n        takeSide = -1;\n      } else if (side >= 0 && offset == node.nodeValue.length) {\n        from--;\n        takeSide = 1;\n      } else if (side < 0) {\n        from--;\n      } else {\n        to++;\n      }\n      return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0);\n    }\n  }\n  var $dom = view.state.doc.resolve(pos - (atom || 0));\n  if (!$dom.parent.inlineContent) {\n    if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n      var before = node.childNodes[offset - 1];\n      if (before.nodeType == 1) return flattenH(before.getBoundingClientRect(), false);\n    }\n    if (atom == null && offset < nodeSize(node)) {\n      var after = node.childNodes[offset];\n      if (after.nodeType == 1) return flattenH(after.getBoundingClientRect(), true);\n    }\n    return flattenH(node.getBoundingClientRect(), side >= 0);\n  }\n  if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n    var _before = node.childNodes[offset - 1];\n    var target = _before.nodeType == 3 ? textRange(_before, nodeSize(_before) - (supportEmptyRange ? 0 : 1)) : _before.nodeType == 1 && (_before.nodeName != \"BR\" || !_before.nextSibling) ? _before : null;\n    if (target) return flattenV(singleRect(target, 1), false);\n  }\n  if (atom == null && offset < nodeSize(node)) {\n    var _after = node.childNodes[offset];\n    while (_after.pmViewDesc && _after.pmViewDesc.ignoreForCoords) _after = _after.nextSibling;\n    var _target = !_after ? null : _after.nodeType == 3 ? textRange(_after, 0, supportEmptyRange ? 0 : 1) : _after.nodeType == 1 ? _after : null;\n    if (_target) return flattenV(singleRect(_target, -1), true);\n  }\n  return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n  if (rect.width == 0) return rect;\n  var x = left ? rect.left : rect.right;\n  return {\n    top: rect.top,\n    bottom: rect.bottom,\n    left: x,\n    right: x\n  };\n}\nfunction flattenH(rect, top) {\n  if (rect.height == 0) return rect;\n  var y = top ? rect.top : rect.bottom;\n  return {\n    top: y,\n    bottom: y,\n    left: rect.left,\n    right: rect.right\n  };\n}\nfunction withFlushedState(view, state, f) {\n  var viewState = view.state,\n    active = view.root.activeElement;\n  if (viewState != state) view.updateState(state);\n  if (active != view.dom) view.focus();\n  try {\n    return f();\n  } finally {\n    if (viewState != state) view.updateState(viewState);\n    if (active != view.dom && active) active.focus();\n  }\n}\nfunction endOfTextblockVertical(view, state, dir) {\n  var sel = state.selection;\n  var $pos = dir == \"up\" ? sel.$from : sel.$to;\n  return withFlushedState(view, state, function () {\n    var _view$docView$domFrom2 = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1),\n      dom = _view$docView$domFrom2.node;\n    for (;;) {\n      var nearest = view.docView.nearestDesc(dom, true);\n      if (!nearest) break;\n      if (nearest.node.isBlock) {\n        dom = nearest.contentDOM || nearest.dom;\n        break;\n      }\n      dom = nearest.dom.parentNode;\n    }\n    var coords = _coordsAtPos(view, $pos.pos, 1);\n    for (var child = dom.firstChild; child; child = child.nextSibling) {\n      var boxes = void 0;\n      if (child.nodeType == 1) boxes = child.getClientRects();else if (child.nodeType == 3) boxes = textRange(child, 0, child.nodeValue.length).getClientRects();else continue;\n      for (var i = 0; i < boxes.length; i++) {\n        var box = boxes[i];\n        if (box.bottom > box.top + 1 && (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2 : box.bottom - coords.bottom > (coords.bottom - box.top) * 2)) return false;\n      }\n    }\n    return true;\n  });\n}\nvar maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n  var $head = state.selection.$head;\n  if (!$head.parent.isTextblock) return false;\n  var offset = $head.parentOffset,\n    atStart = !offset,\n    atEnd = offset == $head.parent.content.size;\n  var sel = view.domSelection();\n  if (!sel) return $head.pos == $head.start() || $head.pos == $head.end();\n  if (!maybeRTL.test($head.parent.textContent) || !sel.modify) return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n  return withFlushedState(view, state, function () {\n    var _view$domSelectionRan = view.domSelectionRange(),\n      oldNode = _view$domSelectionRan.focusNode,\n      oldOff = _view$domSelectionRan.focusOffset,\n      anchorNode = _view$domSelectionRan.anchorNode,\n      anchorOffset = _view$domSelectionRan.anchorOffset;\n    var oldBidiLevel = sel.caretBidiLevel;\n    sel.modify(\"move\", dir, \"character\");\n    var parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n    var _view$domSelectionRan2 = view.domSelectionRange(),\n      newNode = _view$domSelectionRan2.focusNode,\n      newOff = _view$domSelectionRan2.focusOffset;\n    var result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) || oldNode == newNode && oldOff == newOff;\n    try {\n      sel.collapse(anchorNode, anchorOffset);\n      if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend) sel.extend(oldNode, oldOff);\n    } catch (_) {}\n    if (oldBidiLevel != null) sel.caretBidiLevel = oldBidiLevel;\n    return result;\n  });\n}\nvar cachedState = null;\nvar cachedDir = null;\nvar cachedResult = false;\nfunction _endOfTextblock(view, state, dir) {\n  if (cachedState == state && cachedDir == dir) return cachedResult;\n  cachedState = state;\n  cachedDir = dir;\n  return cachedResult = dir == \"up\" || dir == \"down\" ? endOfTextblockVertical(view, state, dir) : endOfTextblockHorizontal(view, state, dir);\n}\nvar NOT_DIRTY = 0,\n  CHILD_DIRTY = 1,\n  CONTENT_DIRTY = 2,\n  NODE_DIRTY = 3;\nvar ViewDesc = function () {\n  function ViewDesc(parent, children, dom, contentDOM) {\n    _classCallCheck(this, ViewDesc);\n    this.parent = parent;\n    this.children = children;\n    this.dom = dom;\n    this.contentDOM = contentDOM;\n    this.dirty = NOT_DIRTY;\n    dom.pmViewDesc = this;\n  }\n  _createClass(ViewDesc, [{\n    key: \"matchesWidget\",\n    value: function matchesWidget(widget) {\n      return false;\n    }\n  }, {\n    key: \"matchesMark\",\n    value: function matchesMark(mark) {\n      return false;\n    }\n  }, {\n    key: \"matchesNode\",\n    value: function matchesNode(node, outerDeco, innerDeco) {\n      return false;\n    }\n  }, {\n    key: \"matchesHack\",\n    value: function matchesHack(nodeName) {\n      return false;\n    }\n  }, {\n    key: \"parseRule\",\n    value: function parseRule(addedNodes) {\n      return null;\n    }\n  }, {\n    key: \"stopEvent\",\n    value: function stopEvent(event) {\n      return false;\n    }\n  }, {\n    key: \"size\",\n    get: function get() {\n      var size = 0;\n      for (var i = 0; i < this.children.length; i++) size += this.children[i].size;\n      return size;\n    }\n  }, {\n    key: \"border\",\n    get: function get() {\n      return 0;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.parent = undefined;\n      if (this.dom.pmViewDesc == this) this.dom.pmViewDesc = undefined;\n      for (var i = 0; i < this.children.length; i++) this.children[i].destroy();\n    }\n  }, {\n    key: \"posBeforeChild\",\n    value: function posBeforeChild(child) {\n      for (var i = 0, pos = this.posAtStart;; i++) {\n        var cur = this.children[i];\n        if (cur == child) return pos;\n        pos += cur.size;\n      }\n    }\n  }, {\n    key: \"posBefore\",\n    get: function get() {\n      return this.parent.posBeforeChild(this);\n    }\n  }, {\n    key: \"posAtStart\",\n    get: function get() {\n      return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n    }\n  }, {\n    key: \"posAfter\",\n    get: function get() {\n      return this.posBefore + this.size;\n    }\n  }, {\n    key: \"posAtEnd\",\n    get: function get() {\n      return this.posAtStart + this.size - 2 * this.border;\n    }\n  }, {\n    key: \"localPosFromDOM\",\n    value: function localPosFromDOM(dom, offset, bias) {\n      if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n        if (bias < 0) {\n          var domBefore, desc;\n          if (dom == this.contentDOM) {\n            domBefore = dom.childNodes[offset - 1];\n          } else {\n            while (dom.parentNode != this.contentDOM) dom = dom.parentNode;\n            domBefore = dom.previousSibling;\n          }\n          while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this)) domBefore = domBefore.previousSibling;\n          return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n        } else {\n          var domAfter, _desc;\n          if (dom == this.contentDOM) {\n            domAfter = dom.childNodes[offset];\n          } else {\n            while (dom.parentNode != this.contentDOM) dom = dom.parentNode;\n            domAfter = dom.nextSibling;\n          }\n          while (domAfter && !((_desc = domAfter.pmViewDesc) && _desc.parent == this)) domAfter = domAfter.nextSibling;\n          return domAfter ? this.posBeforeChild(_desc) : this.posAtEnd;\n        }\n      }\n      var atEnd;\n      if (dom == this.dom && this.contentDOM) {\n        atEnd = offset > domIndex(this.contentDOM);\n      } else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n        atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n      } else if (this.dom.firstChild) {\n        if (offset == 0) for (var search = dom;; search = search.parentNode) {\n          if (search == this.dom) {\n            atEnd = false;\n            break;\n          }\n          if (search.previousSibling) break;\n        }\n        if (atEnd == null && offset == dom.childNodes.length) for (var _search = dom;; _search = _search.parentNode) {\n          if (_search == this.dom) {\n            atEnd = true;\n            break;\n          }\n          if (_search.nextSibling) break;\n        }\n      }\n      return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n    }\n  }, {\n    key: \"nearestDesc\",\n    value: function nearestDesc(dom) {\n      var onlyNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      for (var first = true, cur = dom; cur; cur = cur.parentNode) {\n        var desc = this.getDesc(cur),\n          nodeDOM = void 0;\n        if (desc && (!onlyNodes || desc.node)) {\n          if (first && (nodeDOM = desc.nodeDOM) && !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom)) first = false;else return desc;\n        }\n      }\n    }\n  }, {\n    key: \"getDesc\",\n    value: function getDesc(dom) {\n      var desc = dom.pmViewDesc;\n      for (var cur = desc; cur; cur = cur.parent) if (cur == this) return desc;\n    }\n  }, {\n    key: \"posFromDOM\",\n    value: function posFromDOM(dom, offset, bias) {\n      for (var scan = dom; scan; scan = scan.parentNode) {\n        var desc = this.getDesc(scan);\n        if (desc) return desc.localPosFromDOM(dom, offset, bias);\n      }\n      return -1;\n    }\n  }, {\n    key: \"descAt\",\n    value: function descAt(pos) {\n      for (var i = 0, offset = 0; i < this.children.length; i++) {\n        var child = this.children[i],\n          end = offset + child.size;\n        if (offset == pos && end != offset) {\n          while (!child.border && child.children.length) {\n            for (var _i = 0; _i < child.children.length; _i++) {\n              var inner = child.children[_i];\n              if (inner.size) {\n                child = inner;\n                break;\n              }\n            }\n          }\n          return child;\n        }\n        if (pos < end) return child.descAt(pos - offset - child.border);\n        offset = end;\n      }\n    }\n  }, {\n    key: \"domFromPos\",\n    value: function domFromPos(pos, side) {\n      if (!this.contentDOM) return {\n        node: this.dom,\n        offset: 0,\n        atom: pos + 1\n      };\n      var i = 0,\n        offset = 0;\n      for (var curPos = 0; i < this.children.length; i++) {\n        var child = this.children[i],\n          end = curPos + child.size;\n        if (end > pos || child instanceof TrailingHackViewDesc) {\n          offset = pos - curPos;\n          break;\n        }\n        curPos = end;\n      }\n      if (offset) return this.children[i].domFromPos(offset - this.children[i].border, side);\n      for (var prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) {}\n      if (side <= 0) {\n        var _prev,\n          enter = true;\n        for (;; i--, enter = false) {\n          _prev = i ? this.children[i - 1] : null;\n          if (!_prev || _prev.dom.parentNode == this.contentDOM) break;\n        }\n        if (_prev && side && enter && !_prev.border && !_prev.domAtom) return _prev.domFromPos(_prev.size, side);\n        return {\n          node: this.contentDOM,\n          offset: _prev ? domIndex(_prev.dom) + 1 : 0\n        };\n      } else {\n        var next,\n          _enter = true;\n        for (;; i++, _enter = false) {\n          next = i < this.children.length ? this.children[i] : null;\n          if (!next || next.dom.parentNode == this.contentDOM) break;\n        }\n        if (next && _enter && !next.border && !next.domAtom) return next.domFromPos(0, side);\n        return {\n          node: this.contentDOM,\n          offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length\n        };\n      }\n    }\n  }, {\n    key: \"parseRange\",\n    value: function parseRange(from, to) {\n      var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      if (this.children.length == 0) return {\n        node: this.contentDOM,\n        from: from,\n        to: to,\n        fromOffset: 0,\n        toOffset: this.contentDOM.childNodes.length\n      };\n      var fromOffset = -1,\n        toOffset = -1;\n      for (var offset = base, i = 0;; i++) {\n        var child = this.children[i],\n          end = offset + child.size;\n        if (fromOffset == -1 && from <= end) {\n          var childBase = offset + child.border;\n          if (from >= childBase && to <= end - child.border && child.node && child.contentDOM && this.contentDOM.contains(child.contentDOM)) return child.parseRange(from, to, childBase);\n          from = offset;\n          for (var j = i; j > 0; j--) {\n            var prev = this.children[j - 1];\n            if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n              fromOffset = domIndex(prev.dom) + 1;\n              break;\n            }\n            from -= prev.size;\n          }\n          if (fromOffset == -1) fromOffset = 0;\n        }\n        if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n          to = end;\n          for (var _j = i + 1; _j < this.children.length; _j++) {\n            var next = this.children[_j];\n            if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n              toOffset = domIndex(next.dom);\n              break;\n            }\n            to += next.size;\n          }\n          if (toOffset == -1) toOffset = this.contentDOM.childNodes.length;\n          break;\n        }\n        offset = end;\n      }\n      return {\n        node: this.contentDOM,\n        from: from,\n        to: to,\n        fromOffset: fromOffset,\n        toOffset: toOffset\n      };\n    }\n  }, {\n    key: \"emptyChildAt\",\n    value: function emptyChildAt(side) {\n      if (this.border || !this.contentDOM || !this.children.length) return false;\n      var child = this.children[side < 0 ? 0 : this.children.length - 1];\n      return child.size == 0 || child.emptyChildAt(side);\n    }\n  }, {\n    key: \"domAfterPos\",\n    value: function domAfterPos(pos) {\n      var _this$domFromPos = this.domFromPos(pos, 0),\n        node = _this$domFromPos.node,\n        offset = _this$domFromPos.offset;\n      if (node.nodeType != 1 || offset == node.childNodes.length) throw new RangeError(\"No node after pos \" + pos);\n      return node.childNodes[offset];\n    }\n  }, {\n    key: \"setSelection\",\n    value: function setSelection(anchor, head, view) {\n      var force = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      var from = Math.min(anchor, head),\n        to = Math.max(anchor, head);\n      for (var i = 0, offset = 0; i < this.children.length; i++) {\n        var child = this.children[i],\n          end = offset + child.size;\n        if (from > offset && to < end) return child.setSelection(anchor - offset - child.border, head - offset - child.border, view, force);\n        offset = end;\n      }\n      var anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n      var headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n      var domSel = view.root.getSelection();\n      var selRange = view.domSelectionRange();\n      var brKludge = false;\n      if ((gecko || safari) && anchor == head) {\n        var _anchorDOM = anchorDOM,\n          node = _anchorDOM.node,\n          _offset = _anchorDOM.offset;\n        if (node.nodeType == 3) {\n          brKludge = !!(_offset && node.nodeValue[_offset - 1] == \"\\n\");\n          if (brKludge && _offset == node.nodeValue.length) {\n            for (var scan = node, after; scan; scan = scan.parentNode) {\n              if (after = scan.nextSibling) {\n                if (after.nodeName == \"BR\") anchorDOM = headDOM = {\n                  node: after.parentNode,\n                  offset: domIndex(after) + 1\n                };\n                break;\n              }\n              var desc = scan.pmViewDesc;\n              if (desc && desc.node && desc.node.isBlock) break;\n            }\n          }\n        } else {\n          var prev = node.childNodes[_offset - 1];\n          brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n        }\n      }\n      if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode.nodeType == 1) {\n        var _after2 = selRange.focusNode.childNodes[selRange.focusOffset];\n        if (_after2 && _after2.contentEditable == \"false\") force = true;\n      }\n      if (!(force || brKludge && safari) && isEquivalentPosition(anchorDOM.node, anchorDOM.offset, selRange.anchorNode, selRange.anchorOffset) && isEquivalentPosition(headDOM.node, headDOM.offset, selRange.focusNode, selRange.focusOffset)) return;\n      var domSelExtended = false;\n      if ((domSel.extend || anchor == head) && !(brKludge && gecko)) {\n        domSel.collapse(anchorDOM.node, anchorDOM.offset);\n        try {\n          if (anchor != head) domSel.extend(headDOM.node, headDOM.offset);\n          domSelExtended = true;\n        } catch (_) {}\n      }\n      if (!domSelExtended) {\n        if (anchor > head) {\n          var tmp = anchorDOM;\n          anchorDOM = headDOM;\n          headDOM = tmp;\n        }\n        var range = document.createRange();\n        range.setEnd(headDOM.node, headDOM.offset);\n        range.setStart(anchorDOM.node, anchorDOM.offset);\n        domSel.removeAllRanges();\n        domSel.addRange(range);\n      }\n    }\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mutation) {\n      return !this.contentDOM && mutation.type != \"selection\";\n    }\n  }, {\n    key: \"contentLost\",\n    get: function get() {\n      return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n    }\n  }, {\n    key: \"markDirty\",\n    value: function markDirty(from, to) {\n      for (var offset = 0, i = 0; i < this.children.length; i++) {\n        var child = this.children[i],\n          end = offset + child.size;\n        if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n          var startInside = offset + child.border,\n            endInside = end - child.border;\n          if (from >= startInside && to <= endInside) {\n            this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n            if (from == startInside && to == endInside && (child.contentLost || child.dom.parentNode != this.contentDOM)) child.dirty = NODE_DIRTY;else child.markDirty(from - startInside, to - startInside);\n            return;\n          } else {\n            child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length ? CONTENT_DIRTY : NODE_DIRTY;\n          }\n        }\n        offset = end;\n      }\n      this.dirty = CONTENT_DIRTY;\n    }\n  }, {\n    key: \"markParentsDirty\",\n    value: function markParentsDirty() {\n      var level = 1;\n      for (var node = this.parent; node; node = node.parent, level++) {\n        var dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n        if (node.dirty < dirty) node.dirty = dirty;\n      }\n    }\n  }, {\n    key: \"domAtom\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"ignoreForCoords\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"ignoreForSelection\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"isText\",\n    value: function isText(text) {\n      return false;\n    }\n  }]);\n  return ViewDesc;\n}();\nvar WidgetViewDesc = function (_ViewDesc) {\n  _inherits(WidgetViewDesc, _ViewDesc);\n  var _super = _createSuper(WidgetViewDesc);\n  function WidgetViewDesc(parent, widget, view, pos) {\n    var _this;\n    _classCallCheck(this, WidgetViewDesc);\n    var self,\n      dom = widget.type.toDOM;\n    if (typeof dom == \"function\") dom = dom(view, function () {\n      if (!self) return pos;\n      if (self.parent) return self.parent.posBeforeChild(self);\n    });\n    if (!widget.type.spec.raw) {\n      if (dom.nodeType != 1) {\n        var wrap = document.createElement(\"span\");\n        wrap.appendChild(dom);\n        dom = wrap;\n      }\n      dom.contentEditable = \"false\";\n      dom.classList.add(\"ProseMirror-widget\");\n    }\n    _this = _super.call(this, parent, [], dom, null);\n    _this.widget = widget;\n    _this.widget = widget;\n    self = _assertThisInitialized(_this);\n    return _this;\n  }\n  _createClass(WidgetViewDesc, [{\n    key: \"matchesWidget\",\n    value: function matchesWidget(widget) {\n      return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n    }\n  }, {\n    key: \"parseRule\",\n    value: function parseRule() {\n      return {\n        ignore: true\n      };\n    }\n  }, {\n    key: \"stopEvent\",\n    value: function stopEvent(event) {\n      var stop = this.widget.spec.stopEvent;\n      return stop ? stop(event) : false;\n    }\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mutation) {\n      return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.widget.type.destroy(this.dom);\n      _get(_getPrototypeOf(WidgetViewDesc.prototype), \"destroy\", this).call(this);\n    }\n  }, {\n    key: \"domAtom\",\n    get: function get() {\n      return true;\n    }\n  }, {\n    key: \"ignoreForSelection\",\n    get: function get() {\n      return !!this.widget.type.spec.relaxedSide;\n    }\n  }, {\n    key: \"side\",\n    get: function get() {\n      return this.widget.type.side;\n    }\n  }]);\n  return WidgetViewDesc;\n}(ViewDesc);\nvar CompositionViewDesc = function (_ViewDesc2) {\n  _inherits(CompositionViewDesc, _ViewDesc2);\n  var _super2 = _createSuper(CompositionViewDesc);\n  function CompositionViewDesc(parent, dom, textDOM, text) {\n    var _this2;\n    _classCallCheck(this, CompositionViewDesc);\n    _this2 = _super2.call(this, parent, [], dom, null);\n    _this2.textDOM = textDOM;\n    _this2.text = text;\n    return _this2;\n  }\n  _createClass(CompositionViewDesc, [{\n    key: \"size\",\n    get: function get() {\n      return this.text.length;\n    }\n  }, {\n    key: \"localPosFromDOM\",\n    value: function localPosFromDOM(dom, offset) {\n      if (dom != this.textDOM) return this.posAtStart + (offset ? this.size : 0);\n      return this.posAtStart + offset;\n    }\n  }, {\n    key: \"domFromPos\",\n    value: function domFromPos(pos) {\n      return {\n        node: this.textDOM,\n        offset: pos\n      };\n    }\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mut) {\n      return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n    }\n  }]);\n  return CompositionViewDesc;\n}(ViewDesc);\nvar MarkViewDesc = function (_ViewDesc3) {\n  _inherits(MarkViewDesc, _ViewDesc3);\n  var _super3 = _createSuper(MarkViewDesc);\n  function MarkViewDesc(parent, mark, dom, contentDOM, spec) {\n    var _this3;\n    _classCallCheck(this, MarkViewDesc);\n    _this3 = _super3.call(this, parent, [], dom, contentDOM);\n    _this3.mark = mark;\n    _this3.spec = spec;\n    return _this3;\n  }\n  _createClass(MarkViewDesc, [{\n    key: \"parseRule\",\n    value: function parseRule() {\n      if (this.dirty & NODE_DIRTY || this.mark.type.spec.reparseInView) return null;\n      return {\n        mark: this.mark.type.name,\n        attrs: this.mark.attrs,\n        contentElement: this.contentDOM\n      };\n    }\n  }, {\n    key: \"matchesMark\",\n    value: function matchesMark(mark) {\n      return this.dirty != NODE_DIRTY && this.mark.eq(mark);\n    }\n  }, {\n    key: \"markDirty\",\n    value: function markDirty(from, to) {\n      _get(_getPrototypeOf(MarkViewDesc.prototype), \"markDirty\", this).call(this, from, to);\n      if (this.dirty != NOT_DIRTY) {\n        var parent = this.parent;\n        while (!parent.node) parent = parent.parent;\n        if (parent.dirty < this.dirty) parent.dirty = this.dirty;\n        this.dirty = NOT_DIRTY;\n      }\n    }\n  }, {\n    key: \"slice\",\n    value: function slice(from, to, view) {\n      var copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n      var nodes = this.children,\n        size = this.size;\n      if (to < size) nodes = replaceNodes(nodes, to, size, view);\n      if (from > 0) nodes = replaceNodes(nodes, 0, from, view);\n      for (var i = 0; i < nodes.length; i++) nodes[i].parent = copy;\n      copy.children = nodes;\n      return copy;\n    }\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mutation) {\n      return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : _get(_getPrototypeOf(MarkViewDesc.prototype), \"ignoreMutation\", this).call(this, mutation);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.spec.destroy) this.spec.destroy();\n      _get(_getPrototypeOf(MarkViewDesc.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"create\",\n    value: function create(parent, mark, inline, view) {\n      var custom = view.nodeViews[mark.type.name];\n      var spec = custom && custom(mark, view, inline);\n      if (!spec || !spec.dom) spec = prosemirrorModel.DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);\n      return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom, spec);\n    }\n  }]);\n  return MarkViewDesc;\n}(ViewDesc);\nvar NodeViewDesc = function (_ViewDesc4) {\n  _inherits(NodeViewDesc, _ViewDesc4);\n  var _super4 = _createSuper(NodeViewDesc);\n  function NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM) {\n    var _this4;\n    _classCallCheck(this, NodeViewDesc);\n    _this4 = _super4.call(this, parent, [], dom, contentDOM);\n    _this4.node = node;\n    _this4.outerDeco = outerDeco;\n    _this4.innerDeco = innerDeco;\n    _this4.nodeDOM = nodeDOM;\n    return _this4;\n  }\n  _createClass(NodeViewDesc, [{\n    key: \"parseRule\",\n    value: function parseRule(addedNodes) {\n      var _this5 = this;\n      if (this.node.type.spec.reparseInView) return null;\n      var rule = {\n        node: this.node.type.name,\n        attrs: this.node.attrs\n      };\n      if (this.node.type.whitespace == \"pre\") rule.preserveWhitespace = \"full\";\n      if (!this.contentDOM) {\n        rule.getContent = function () {\n          return _this5.node.content;\n        };\n      } else if (!this.contentLost) {\n        rule.contentElement = this.contentDOM;\n      } else {\n        for (var i = this.children.length - 1; i >= 0; i--) {\n          var child = this.children[i];\n          if (this.dom.contains(child.dom.parentNode)) {\n            rule.contentElement = child.dom.parentNode;\n            break;\n          }\n        }\n        if (!rule.contentElement) {\n          var found = addedNodes && addedNodes.find(function (n) {\n            return n.nodeType == 1 && addedNodes.indexOf(n.parentNode) < 0 && _this5.dom.contains(n);\n          });\n          if (found) rule.contentElement = found;else rule.getContent = function () {\n            return prosemirrorModel.Fragment.empty;\n          };\n        }\n      }\n      return rule;\n    }\n  }, {\n    key: \"matchesNode\",\n    value: function matchesNode(node, outerDeco, innerDeco) {\n      return this.dirty == NOT_DIRTY && node.eq(this.node) && sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n    }\n  }, {\n    key: \"size\",\n    get: function get() {\n      return this.node.nodeSize;\n    }\n  }, {\n    key: \"border\",\n    get: function get() {\n      return this.node.isLeaf ? 0 : 1;\n    }\n  }, {\n    key: \"updateChildren\",\n    value: function updateChildren(view, pos) {\n      var _this6 = this;\n      var inline = this.node.inlineContent,\n        off = pos;\n      var composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n      var localComposition = composition && composition.pos > -1 ? composition : null;\n      var compositionInChild = composition && composition.pos < 0;\n      var updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n      iterDeco(this.node, this.innerDeco, function (widget, i, insideNode) {\n        if (widget.spec.marks) updater.syncToMarks(widget.spec.marks, inline, view, i);else if (widget.type.side >= 0 && !insideNode) updater.syncToMarks(i == _this6.node.childCount ? prosemirrorModel.Mark.none : _this6.node.child(i).marks, inline, view, i);\n        updater.placeWidget(widget, view, off);\n      }, function (child, outerDeco, innerDeco, i) {\n        updater.syncToMarks(child.marks, inline, view, i);\n        var compIndex;\n        if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;else if (compositionInChild && view.state.selection.from > off && view.state.selection.to < off + child.nodeSize && (compIndex = updater.findIndexWithChild(composition.node)) > -1 && updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i, off)) ;else {\n          updater.addNode(child, outerDeco, innerDeco, view, off);\n        }\n        off += child.nodeSize;\n      });\n      updater.syncToMarks([], inline, view, 0);\n      if (this.node.isTextblock) updater.addTextblockHacks();\n      updater.destroyRest();\n      if (updater.changed || this.dirty == CONTENT_DIRTY) {\n        if (localComposition) this.protectLocalComposition(view, localComposition);\n        renderDescs(this.contentDOM, this.children, view);\n        if (ios) iosHacks(this.dom);\n      }\n    }\n  }, {\n    key: \"localCompositionInfo\",\n    value: function localCompositionInfo(view, pos) {\n      var _view$state$selection = view.state.selection,\n        from = _view$state$selection.from,\n        to = _view$state$selection.to;\n      if (!(view.state.selection instanceof prosemirrorState.TextSelection) || from < pos || to > pos + this.node.content.size) return null;\n      var textNode = view.input.compositionNode;\n      if (!textNode || !this.dom.contains(textNode.parentNode)) return null;\n      if (this.node.inlineContent) {\n        var text = textNode.nodeValue;\n        var textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n        return textPos < 0 ? null : {\n          node: textNode,\n          pos: textPos,\n          text: text\n        };\n      } else {\n        return {\n          node: textNode,\n          pos: -1,\n          text: \"\"\n        };\n      }\n    }\n  }, {\n    key: \"protectLocalComposition\",\n    value: function protectLocalComposition(view, _ref2) {\n      var node = _ref2.node,\n        pos = _ref2.pos,\n        text = _ref2.text;\n      if (this.getDesc(node)) return;\n      var topNode = node;\n      for (;; topNode = topNode.parentNode) {\n        if (topNode.parentNode == this.contentDOM) break;\n        while (topNode.previousSibling) topNode.parentNode.removeChild(topNode.previousSibling);\n        while (topNode.nextSibling) topNode.parentNode.removeChild(topNode.nextSibling);\n        if (topNode.pmViewDesc) topNode.pmViewDesc = undefined;\n      }\n      var desc = new CompositionViewDesc(this, topNode, node, text);\n      view.input.compositionNodes.push(desc);\n      this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n    }\n  }, {\n    key: \"update\",\n    value: function update(node, outerDeco, innerDeco, view) {\n      if (this.dirty == NODE_DIRTY || !node.sameMarkup(this.node)) return false;\n      this.updateInner(node, outerDeco, innerDeco, view);\n      return true;\n    }\n  }, {\n    key: \"updateInner\",\n    value: function updateInner(node, outerDeco, innerDeco, view) {\n      this.updateOuterDeco(outerDeco);\n      this.node = node;\n      this.innerDeco = innerDeco;\n      if (this.contentDOM) this.updateChildren(view, this.posAtStart);\n      this.dirty = NOT_DIRTY;\n    }\n  }, {\n    key: \"updateOuterDeco\",\n    value: function updateOuterDeco(outerDeco) {\n      if (sameOuterDeco(outerDeco, this.outerDeco)) return;\n      var needsWrap = this.nodeDOM.nodeType != 1;\n      var oldDOM = this.dom;\n      this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n      if (this.dom != oldDOM) {\n        oldDOM.pmViewDesc = undefined;\n        this.dom.pmViewDesc = this;\n      }\n      this.outerDeco = outerDeco;\n    }\n  }, {\n    key: \"selectNode\",\n    value: function selectNode() {\n      if (this.nodeDOM.nodeType == 1) {\n        this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n        if (this.contentDOM || !this.node.type.spec.draggable) this.nodeDOM.draggable = true;\n      }\n    }\n  }, {\n    key: \"deselectNode\",\n    value: function deselectNode() {\n      if (this.nodeDOM.nodeType == 1) {\n        this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n        if (this.contentDOM || !this.node.type.spec.draggable) this.nodeDOM.removeAttribute(\"draggable\");\n      }\n    }\n  }, {\n    key: \"domAtom\",\n    get: function get() {\n      return this.node.isAtom;\n    }\n  }], [{\n    key: \"create\",\n    value: function create(parent, node, outerDeco, innerDeco, view, pos) {\n      var custom = view.nodeViews[node.type.name],\n        descObj;\n      var spec = custom && custom(node, view, function () {\n        if (!descObj) return pos;\n        if (descObj.parent) return descObj.parent.posBeforeChild(descObj);\n      }, outerDeco, innerDeco);\n      var dom = spec && spec.dom,\n        contentDOM = spec && spec.contentDOM;\n      if (node.isText) {\n        if (!dom) dom = document.createTextNode(node.text);else if (dom.nodeType != 3) throw new RangeError(\"Text must be rendered as a DOM text node\");\n      } else if (!dom) {\n        var _spec = prosemirrorModel.DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);\n        dom = _spec.dom;\n        contentDOM = _spec.contentDOM;\n      }\n      if (!contentDOM && !node.isText && dom.nodeName != \"BR\") {\n        if (!dom.hasAttribute(\"contenteditable\")) dom.contentEditable = \"false\";\n        if (node.type.spec.draggable) dom.draggable = true;\n      }\n      var nodeDOM = dom;\n      dom = applyOuterDeco(dom, outerDeco, node);\n      if (spec) return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec);else if (node.isText) return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM);else return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM);\n    }\n  }]);\n  return NodeViewDesc;\n}(ViewDesc);\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n  applyOuterDeco(dom, outerDeco, doc);\n  var docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom);\n  if (docView.contentDOM) docView.updateChildren(view, 0);\n  return docView;\n}\nvar TextViewDesc = function (_NodeViewDesc) {\n  _inherits(TextViewDesc, _NodeViewDesc);\n  var _super5 = _createSuper(TextViewDesc);\n  function TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM) {\n    _classCallCheck(this, TextViewDesc);\n    return _super5.call(this, parent, node, outerDeco, innerDeco, dom, null, nodeDOM);\n  }\n  _createClass(TextViewDesc, [{\n    key: \"parseRule\",\n    value: function parseRule() {\n      var skip = this.nodeDOM.parentNode;\n      while (skip && skip != this.dom && !skip.pmIsDeco) skip = skip.parentNode;\n      return {\n        skip: skip || true\n      };\n    }\n  }, {\n    key: \"update\",\n    value: function update(node, outerDeco, innerDeco, view) {\n      if (this.dirty == NODE_DIRTY || this.dirty != NOT_DIRTY && !this.inParent() || !node.sameMarkup(this.node)) return false;\n      this.updateOuterDeco(outerDeco);\n      if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n        this.nodeDOM.nodeValue = node.text;\n        if (view.trackWrites == this.nodeDOM) view.trackWrites = null;\n      }\n      this.node = node;\n      this.dirty = NOT_DIRTY;\n      return true;\n    }\n  }, {\n    key: \"inParent\",\n    value: function inParent() {\n      var parentDOM = this.parent.contentDOM;\n      for (var n = this.nodeDOM; n; n = n.parentNode) if (n == parentDOM) return true;\n      return false;\n    }\n  }, {\n    key: \"domFromPos\",\n    value: function domFromPos(pos) {\n      return {\n        node: this.nodeDOM,\n        offset: pos\n      };\n    }\n  }, {\n    key: \"localPosFromDOM\",\n    value: function localPosFromDOM(dom, offset, bias) {\n      if (dom == this.nodeDOM) return this.posAtStart + Math.min(offset, this.node.text.length);\n      return _get(_getPrototypeOf(TextViewDesc.prototype), \"localPosFromDOM\", this).call(this, dom, offset, bias);\n    }\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mutation) {\n      return mutation.type != \"characterData\" && mutation.type != \"selection\";\n    }\n  }, {\n    key: \"slice\",\n    value: function slice(from, to, _view) {\n      var node = this.node.cut(from, to),\n        dom = document.createTextNode(node.text);\n      return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom);\n    }\n  }, {\n    key: \"markDirty\",\n    value: function markDirty(from, to) {\n      _get(_getPrototypeOf(TextViewDesc.prototype), \"markDirty\", this).call(this, from, to);\n      if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length)) this.dirty = NODE_DIRTY;\n    }\n  }, {\n    key: \"domAtom\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"isText\",\n    value: function isText(text) {\n      return this.node.text == text;\n    }\n  }]);\n  return TextViewDesc;\n}(NodeViewDesc);\nvar TrailingHackViewDesc = function (_ViewDesc5) {\n  _inherits(TrailingHackViewDesc, _ViewDesc5);\n  var _super6 = _createSuper(TrailingHackViewDesc);\n  function TrailingHackViewDesc() {\n    _classCallCheck(this, TrailingHackViewDesc);\n    return _super6.apply(this, arguments);\n  }\n  _createClass(TrailingHackViewDesc, [{\n    key: \"parseRule\",\n    value: function parseRule() {\n      return {\n        ignore: true\n      };\n    }\n  }, {\n    key: \"matchesHack\",\n    value: function matchesHack(nodeName) {\n      return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName;\n    }\n  }, {\n    key: \"domAtom\",\n    get: function get() {\n      return true;\n    }\n  }, {\n    key: \"ignoreForCoords\",\n    get: function get() {\n      return this.dom.nodeName == \"IMG\";\n    }\n  }]);\n  return TrailingHackViewDesc;\n}(ViewDesc);\nvar CustomNodeViewDesc = function (_NodeViewDesc2) {\n  _inherits(CustomNodeViewDesc, _NodeViewDesc2);\n  var _super7 = _createSuper(CustomNodeViewDesc);\n  function CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec) {\n    var _this7;\n    _classCallCheck(this, CustomNodeViewDesc);\n    _this7 = _super7.call(this, parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM);\n    _this7.spec = spec;\n    return _this7;\n  }\n  _createClass(CustomNodeViewDesc, [{\n    key: \"update\",\n    value: function update(node, outerDeco, innerDeco, view) {\n      if (this.dirty == NODE_DIRTY) return false;\n      if (this.spec.update && (this.node.type == node.type || this.spec.multiType)) {\n        var result = this.spec.update(node, outerDeco, innerDeco);\n        if (result) this.updateInner(node, outerDeco, innerDeco, view);\n        return result;\n      } else if (!this.contentDOM && !node.isLeaf) {\n        return false;\n      } else {\n        return _get(_getPrototypeOf(CustomNodeViewDesc.prototype), \"update\", this).call(this, node, outerDeco, innerDeco, view);\n      }\n    }\n  }, {\n    key: \"selectNode\",\n    value: function selectNode() {\n      this.spec.selectNode ? this.spec.selectNode() : _get(_getPrototypeOf(CustomNodeViewDesc.prototype), \"selectNode\", this).call(this);\n    }\n  }, {\n    key: \"deselectNode\",\n    value: function deselectNode() {\n      this.spec.deselectNode ? this.spec.deselectNode() : _get(_getPrototypeOf(CustomNodeViewDesc.prototype), \"deselectNode\", this).call(this);\n    }\n  }, {\n    key: \"setSelection\",\n    value: function setSelection(anchor, head, view, force) {\n      this.spec.setSelection ? this.spec.setSelection(anchor, head, view.root) : _get(_getPrototypeOf(CustomNodeViewDesc.prototype), \"setSelection\", this).call(this, anchor, head, view, force);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.spec.destroy) this.spec.destroy();\n      _get(_getPrototypeOf(CustomNodeViewDesc.prototype), \"destroy\", this).call(this);\n    }\n  }, {\n    key: \"stopEvent\",\n    value: function stopEvent(event) {\n      return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n    }\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mutation) {\n      return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : _get(_getPrototypeOf(CustomNodeViewDesc.prototype), \"ignoreMutation\", this).call(this, mutation);\n    }\n  }]);\n  return CustomNodeViewDesc;\n}(NodeViewDesc);\nfunction renderDescs(parentDOM, descs, view) {\n  var dom = parentDOM.firstChild,\n    written = false;\n  for (var i = 0; i < descs.length; i++) {\n    var desc = descs[i],\n      childDOM = desc.dom;\n    if (childDOM.parentNode == parentDOM) {\n      while (childDOM != dom) {\n        dom = rm(dom);\n        written = true;\n      }\n      dom = dom.nextSibling;\n    } else {\n      written = true;\n      parentDOM.insertBefore(childDOM, dom);\n    }\n    if (desc instanceof MarkViewDesc) {\n      var pos = dom ? dom.previousSibling : parentDOM.lastChild;\n      renderDescs(desc.contentDOM, desc.children, view);\n      dom = pos ? pos.nextSibling : parentDOM.firstChild;\n    }\n  }\n  while (dom) {\n    dom = rm(dom);\n    written = true;\n  }\n  if (written && view.trackWrites == parentDOM) view.trackWrites = null;\n}\nvar OuterDecoLevel = function OuterDecoLevel(nodeName) {\n  if (nodeName) this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nvar noDeco = [new OuterDecoLevel()];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n  if (outerDeco.length == 0) return noDeco;\n  var top = needsWrap ? noDeco[0] : new OuterDecoLevel(),\n    result = [top];\n  for (var i = 0; i < outerDeco.length; i++) {\n    var attrs = outerDeco[i].type.attrs;\n    if (!attrs) continue;\n    if (attrs.nodeName) result.push(top = new OuterDecoLevel(attrs.nodeName));\n    for (var name in attrs) {\n      var val = attrs[name];\n      if (val == null) continue;\n      if (needsWrap && result.length == 1) result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n      if (name == \"class\") top[\"class\"] = (top[\"class\"] ? top[\"class\"] + \" \" : \"\") + val;else if (name == \"style\") top.style = (top.style ? top.style + \";\" : \"\") + val;else if (name != \"nodeName\") top[name] = val;\n    }\n  }\n  return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n  if (prevComputed == noDeco && curComputed == noDeco) return nodeDOM;\n  var curDOM = nodeDOM;\n  for (var i = 0; i < curComputed.length; i++) {\n    var deco = curComputed[i],\n      prev = prevComputed[i];\n    if (i) {\n      var parent = void 0;\n      if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM && (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n        curDOM = parent;\n      } else {\n        parent = document.createElement(deco.nodeName);\n        parent.pmIsDeco = true;\n        parent.appendChild(curDOM);\n        prev = noDeco[0];\n        curDOM = parent;\n      }\n    }\n    patchAttributes(curDOM, prev || noDeco[0], deco);\n  }\n  return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n  for (var name in prev) if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur)) dom.removeAttribute(name);\n  for (var _name in cur) if (_name != \"class\" && _name != \"style\" && _name != \"nodeName\" && cur[_name] != prev[_name]) dom.setAttribute(_name, cur[_name]);\n  if (prev[\"class\"] != cur[\"class\"]) {\n    var prevList = prev[\"class\"] ? prev[\"class\"].split(\" \").filter(Boolean) : [];\n    var curList = cur[\"class\"] ? cur[\"class\"].split(\" \").filter(Boolean) : [];\n    for (var i = 0; i < prevList.length; i++) if (curList.indexOf(prevList[i]) == -1) dom.classList.remove(prevList[i]);\n    for (var _i2 = 0; _i2 < curList.length; _i2++) if (prevList.indexOf(curList[_i2]) == -1) dom.classList.add(curList[_i2]);\n    if (dom.classList.length == 0) dom.removeAttribute(\"class\");\n  }\n  if (prev.style != cur.style) {\n    if (prev.style) {\n      var prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g,\n        m;\n      while (m = prop.exec(prev.style)) dom.style.removeProperty(m[1]);\n    }\n    if (cur.style) dom.style.cssText += cur.style;\n  }\n}\nfunction applyOuterDeco(dom, deco, node) {\n  return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n  if (a.length != b.length) return false;\n  for (var i = 0; i < a.length; i++) if (!a[i].type.eq(b[i].type)) return false;\n  return true;\n}\nfunction rm(dom) {\n  var next = dom.nextSibling;\n  dom.parentNode.removeChild(dom);\n  return next;\n}\nvar ViewTreeUpdater = function () {\n  function ViewTreeUpdater(top, lock, view) {\n    _classCallCheck(this, ViewTreeUpdater);\n    this.lock = lock;\n    this.view = view;\n    this.index = 0;\n    this.stack = [];\n    this.changed = false;\n    this.top = top;\n    this.preMatch = preMatch(top.node.content, top);\n  }\n  _createClass(ViewTreeUpdater, [{\n    key: \"destroyBetween\",\n    value: function destroyBetween(start, end) {\n      if (start == end) return;\n      for (var i = start; i < end; i++) this.top.children[i].destroy();\n      this.top.children.splice(start, end - start);\n      this.changed = true;\n    }\n  }, {\n    key: \"destroyRest\",\n    value: function destroyRest() {\n      this.destroyBetween(this.index, this.top.children.length);\n    }\n  }, {\n    key: \"syncToMarks\",\n    value: function syncToMarks(marks, inline, view, parentIndex) {\n      var keep = 0,\n        depth = this.stack.length >> 1;\n      var maxKeep = Math.min(depth, marks.length);\n      while (keep < maxKeep && (keep == depth - 1 ? this.top : this.stack[keep + 1 << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false) keep++;\n      while (keep < depth) {\n        this.destroyRest();\n        this.top.dirty = NOT_DIRTY;\n        this.index = this.stack.pop();\n        this.top = this.stack.pop();\n        depth--;\n      }\n      while (depth < marks.length) {\n        this.stack.push(this.top, this.index + 1);\n        var found = -1,\n          scanTo = this.top.children.length;\n        if (parentIndex < this.preMatch.index) scanTo = Math.min(this.index + 3, scanTo);\n        for (var i = this.index; i < scanTo; i++) {\n          var next = this.top.children[i];\n          if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {\n            found = i;\n            break;\n          }\n        }\n        if (found < 0 && this.index < this.top.children.length) {\n          var cur = this.top.children[this.index];\n          if (cur instanceof MarkViewDesc && cur.dirty != NODE_DIRTY && cur.mark.type == marks[depth].type && cur.spec.update && !this.isLocked(cur.dom) && cur.spec.update(marks[depth])) {\n            cur.mark = marks[depth];\n            found = this.index;\n            this.changed = true;\n          }\n        }\n        if (found > -1) {\n          if (found > this.index) {\n            this.changed = true;\n            this.destroyBetween(this.index, found);\n          }\n          this.top = this.top.children[this.index];\n        } else {\n          var markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n          this.top.children.splice(this.index, 0, markDesc);\n          this.top = markDesc;\n          this.changed = true;\n        }\n        this.index = 0;\n        depth++;\n      }\n    }\n  }, {\n    key: \"findNodeMatch\",\n    value: function findNodeMatch(node, outerDeco, innerDeco, index) {\n      var found = -1,\n        targetDesc;\n      if (index >= this.preMatch.index && (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top && targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n        found = this.top.children.indexOf(targetDesc, this.index);\n      } else {\n        for (var i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n          var child = this.top.children[i];\n          if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n            found = i;\n            break;\n          }\n        }\n      }\n      if (found < 0) return false;\n      this.destroyBetween(this.index, found);\n      this.index++;\n      return true;\n    }\n  }, {\n    key: \"updateNodeAt\",\n    value: function updateNodeAt(node, outerDeco, innerDeco, index, view) {\n      var child = this.top.children[index];\n      if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM) child.dirty = CONTENT_DIRTY;\n      if (!child.update(node, outerDeco, innerDeco, view)) return false;\n      this.destroyBetween(this.index, index);\n      this.index++;\n      return true;\n    }\n  }, {\n    key: \"findIndexWithChild\",\n    value: function findIndexWithChild(domNode) {\n      for (;;) {\n        var parent = domNode.parentNode;\n        if (!parent) return -1;\n        if (parent == this.top.contentDOM) {\n          var desc = domNode.pmViewDesc;\n          if (desc) for (var i = this.index; i < this.top.children.length; i++) {\n            if (this.top.children[i] == desc) return i;\n          }\n          return -1;\n        }\n        domNode = parent;\n      }\n    }\n  }, {\n    key: \"updateNextNode\",\n    value: function updateNextNode(node, outerDeco, innerDeco, view, index, pos) {\n      for (var i = this.index; i < this.top.children.length; i++) {\n        var next = this.top.children[i];\n        if (next instanceof NodeViewDesc) {\n          var _preMatch = this.preMatch.matched.get(next);\n          if (_preMatch != null && _preMatch != index) return false;\n          var nextDOM = next.dom,\n            updated = void 0;\n          var locked = this.isLocked(nextDOM) && !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text && next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n          if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n            this.destroyBetween(this.index, i);\n            if (next.dom != nextDOM) this.changed = true;\n            this.index++;\n            return true;\n          } else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {\n            this.destroyBetween(this.index, i);\n            this.top.children[this.index] = updated;\n            if (updated.contentDOM) {\n              updated.dirty = CONTENT_DIRTY;\n              updated.updateChildren(view, pos + 1);\n              updated.dirty = NOT_DIRTY;\n            }\n            this.changed = true;\n            this.index++;\n            return true;\n          }\n          break;\n        }\n      }\n      return false;\n    }\n  }, {\n    key: \"recreateWrapper\",\n    value: function recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {\n      if (next.dirty || node.isAtom || !next.children.length || !next.node.content.eq(node.content) || !sameOuterDeco(outerDeco, next.outerDeco) || !innerDeco.eq(next.innerDeco)) return null;\n      var wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n      if (wrapper.contentDOM) {\n        wrapper.children = next.children;\n        next.children = [];\n        var _iterator = _createForOfIteratorHelper(wrapper.children),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var ch = _step.value;\n            ch.parent = wrapper;\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n      next.destroy();\n      return wrapper;\n    }\n  }, {\n    key: \"addNode\",\n    value: function addNode(node, outerDeco, innerDeco, view, pos) {\n      var desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n      if (desc.contentDOM) desc.updateChildren(view, pos + 1);\n      this.top.children.splice(this.index++, 0, desc);\n      this.changed = true;\n    }\n  }, {\n    key: \"placeWidget\",\n    value: function placeWidget(widget, view, pos) {\n      var next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n      if (next && next.matchesWidget(widget) && (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n        this.index++;\n      } else {\n        var desc = new WidgetViewDesc(this.top, widget, view, pos);\n        this.top.children.splice(this.index++, 0, desc);\n        this.changed = true;\n      }\n    }\n  }, {\n    key: \"addTextblockHacks\",\n    value: function addTextblockHacks() {\n      var lastChild = this.top.children[this.index - 1],\n        parent = this.top;\n      while (lastChild instanceof MarkViewDesc) {\n        parent = lastChild;\n        lastChild = parent.children[parent.children.length - 1];\n      }\n      if (!lastChild || !(lastChild instanceof TextViewDesc) || /\\n$/.test(lastChild.node.text) || this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text)) {\n        if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\") this.addHackNode(\"IMG\", parent);\n        this.addHackNode(\"BR\", this.top);\n      }\n    }\n  }, {\n    key: \"addHackNode\",\n    value: function addHackNode(nodeName, parent) {\n      if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n        this.index++;\n      } else {\n        var dom = document.createElement(nodeName);\n        if (nodeName == \"IMG\") {\n          dom.className = \"ProseMirror-separator\";\n          dom.alt = \"\";\n        }\n        if (nodeName == \"BR\") dom.className = \"ProseMirror-trailingBreak\";\n        var hack = new TrailingHackViewDesc(this.top, [], dom, null);\n        if (parent != this.top) parent.children.push(hack);else parent.children.splice(this.index++, 0, hack);\n        this.changed = true;\n      }\n    }\n  }, {\n    key: \"isLocked\",\n    value: function isLocked(node) {\n      return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));\n    }\n  }]);\n  return ViewTreeUpdater;\n}();\nfunction preMatch(frag, parentDesc) {\n  var curDesc = parentDesc,\n    descI = curDesc.children.length;\n  var fI = frag.childCount,\n    matched = new Map(),\n    matches = [];\n  outer: while (fI > 0) {\n    var desc = void 0;\n    for (;;) {\n      if (descI) {\n        var next = curDesc.children[descI - 1];\n        if (next instanceof MarkViewDesc) {\n          curDesc = next;\n          descI = next.children.length;\n        } else {\n          desc = next;\n          descI--;\n          break;\n        }\n      } else if (curDesc == parentDesc) {\n        break outer;\n      } else {\n        descI = curDesc.parent.children.indexOf(curDesc);\n        curDesc = curDesc.parent;\n      }\n    }\n    var node = desc.node;\n    if (!node) continue;\n    if (node != frag.child(fI - 1)) break;\n    --fI;\n    matched.set(desc, fI);\n    matches.push(desc);\n  }\n  return {\n    index: fI,\n    matched: matched,\n    matches: matches.reverse()\n  };\n}\nfunction compareSide(a, b) {\n  return a.type.side - b.type.side;\n}\nfunction iterDeco(parent, deco, onWidget, onNode) {\n  var locals = deco.locals(parent),\n    offset = 0;\n  if (locals.length == 0) {\n    for (var i = 0; i < parent.childCount; i++) {\n      var child = parent.child(i);\n      onNode(child, locals, deco.forChild(offset, child), i);\n      offset += child.nodeSize;\n    }\n    return;\n  }\n  var decoIndex = 0,\n    active = [],\n    restNode = null;\n  for (var parentIndex = 0;;) {\n    var widget = void 0,\n      widgets = void 0;\n    while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n      var next = locals[decoIndex++];\n      if (next.widget) {\n        if (!widget) widget = next;else (widgets || (widgets = [widget])).push(next);\n      }\n    }\n    if (widget) {\n      if (widgets) {\n        widgets.sort(compareSide);\n        for (var _i3 = 0; _i3 < widgets.length; _i3++) onWidget(widgets[_i3], parentIndex, !!restNode);\n      } else {\n        onWidget(widget, parentIndex, !!restNode);\n      }\n    }\n    var _child = void 0,\n      index = void 0;\n    if (restNode) {\n      index = -1;\n      _child = restNode;\n      restNode = null;\n    } else if (parentIndex < parent.childCount) {\n      index = parentIndex;\n      _child = parent.child(parentIndex++);\n    } else {\n      break;\n    }\n    for (var _i4 = 0; _i4 < active.length; _i4++) if (active[_i4].to <= offset) active.splice(_i4--, 1);\n    while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset) active.push(locals[decoIndex++]);\n    var end = offset + _child.nodeSize;\n    if (_child.isText) {\n      var cutAt = end;\n      if (decoIndex < locals.length && locals[decoIndex].from < cutAt) cutAt = locals[decoIndex].from;\n      for (var _i5 = 0; _i5 < active.length; _i5++) if (active[_i5].to < cutAt) cutAt = active[_i5].to;\n      if (cutAt < end) {\n        restNode = _child.cut(cutAt - offset);\n        _child = _child.cut(0, cutAt - offset);\n        end = cutAt;\n        index = -1;\n      }\n    } else {\n      while (decoIndex < locals.length && locals[decoIndex].to < end) decoIndex++;\n    }\n    var outerDeco = _child.isInline && !_child.isLeaf ? active.filter(function (d) {\n      return !d.inline;\n    }) : active.slice();\n    onNode(_child, outerDeco, deco.forChild(offset, _child), index);\n    offset = end;\n  }\n}\nfunction iosHacks(dom) {\n  if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n    var oldCSS = dom.style.cssText;\n    dom.style.cssText = oldCSS + \"; list-style: square !important\";\n    window.getComputedStyle(dom).listStyle;\n    dom.style.cssText = oldCSS;\n  }\n}\nfunction findTextInFragment(frag, text, from, to) {\n  for (var i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n    var child = frag.child(i++),\n      childStart = pos;\n    pos += child.nodeSize;\n    if (!child.isText) continue;\n    var str = child.text;\n    while (i < frag.childCount) {\n      var next = frag.child(i++);\n      pos += next.nodeSize;\n      if (!next.isText) break;\n      str += next.text;\n    }\n    if (pos >= from) {\n      if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text) return to - text.length;\n      var found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n      if (found >= 0 && found + text.length + childStart >= from) return childStart + found;\n      if (from == to && str.length >= to + text.length - childStart && str.slice(to - childStart, to - childStart + text.length) == text) return to;\n    }\n  }\n  return -1;\n}\nfunction replaceNodes(nodes, from, to, view, replacement) {\n  var result = [];\n  for (var i = 0, off = 0; i < nodes.length; i++) {\n    var child = nodes[i],\n      start = off,\n      end = off += child.size;\n    if (start >= to || end <= from) {\n      result.push(child);\n    } else {\n      if (start < from) result.push(child.slice(0, from - start, view));\n      if (replacement) {\n        result.push(replacement);\n        replacement = undefined;\n      }\n      if (end > to) result.push(child.slice(to - start, child.size, view));\n    }\n  }\n  return result;\n}\nfunction selectionFromDOM(view) {\n  var origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var domSel = view.domSelectionRange(),\n    doc = view.state.doc;\n  if (!domSel.focusNode) return null;\n  var nearestDesc = view.docView.nearestDesc(domSel.focusNode),\n    inWidget = nearestDesc && nearestDesc.size == 0;\n  var head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n  if (head < 0) return null;\n  var $head = doc.resolve(head),\n    anchor,\n    selection;\n  if (selectionCollapsed(domSel)) {\n    anchor = head;\n    while (nearestDesc && !nearestDesc.node) nearestDesc = nearestDesc.parent;\n    var nearestDescNode = nearestDesc.node;\n    if (nearestDesc && nearestDescNode.isAtom && prosemirrorState.NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n      var pos = nearestDesc.posBefore;\n      selection = new prosemirrorState.NodeSelection(head == pos ? $head : doc.resolve(pos));\n    }\n  } else {\n    if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {\n      var min = head,\n        max = head;\n      for (var i = 0; i < domSel.rangeCount; i++) {\n        var range = domSel.getRangeAt(i);\n        min = Math.min(min, view.docView.posFromDOM(range.startContainer, range.startOffset, 1));\n        max = Math.max(max, view.docView.posFromDOM(range.endContainer, range.endOffset, -1));\n      }\n      if (min < 0) return null;\n      var _ref3 = max == view.state.selection.anchor ? [max, min] : [min, max];\n      var _ref4 = _slicedToArray(_ref3, 2);\n      anchor = _ref4[0];\n      head = _ref4[1];\n      $head = doc.resolve(head);\n    } else {\n      anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n    }\n    if (anchor < 0) return null;\n  }\n  var $anchor = doc.resolve(anchor);\n  if (!selection) {\n    var bias = origin == \"pointer\" || view.state.selection.head < $head.pos && !inWidget ? 1 : -1;\n    selection = selectionBetween(view, $anchor, $head, bias);\n  }\n  return selection;\n}\nfunction editorOwnsSelection(view) {\n  return view.editable ? view.hasFocus() : hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view) {\n  var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var sel = view.state.selection;\n  syncNodeSelection(view, sel);\n  if (!editorOwnsSelection(view)) return;\n  var mouseDown = view.input.mouseDown;\n  if (!force && chrome && mouseDown) {\n    var domSel = view.domSelectionRange(),\n      curSel = view.domObserver.currentSelection;\n    if (domSel.anchorNode && curSel.anchorNode && isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset) && mouseDown.delaySelUpdate()) {\n      view.domObserver.setCurSelection();\n      return;\n    }\n  }\n  view.domObserver.disconnectSelection();\n  if (view.cursorWrapper) {\n    selectCursorWrapper(view);\n  } else {\n    var anchor = sel.anchor,\n      head = sel.head,\n      resetEditableFrom,\n      resetEditableTo;\n    if (brokenSelectBetweenUneditable && !(sel instanceof prosemirrorState.TextSelection)) {\n      if (!sel.$from.parent.inlineContent) resetEditableFrom = temporarilyEditableNear(view, sel.from);\n      if (!sel.empty && !sel.$from.parent.inlineContent) resetEditableTo = temporarilyEditableNear(view, sel.to);\n    }\n    view.docView.setSelection(anchor, head, view, force);\n    if (brokenSelectBetweenUneditable) {\n      if (resetEditableFrom) resetEditable(resetEditableFrom);\n      if (resetEditableTo) resetEditable(resetEditableTo);\n    }\n    if (sel.visible) {\n      view.dom.classList.remove(\"ProseMirror-hideselection\");\n    } else {\n      view.dom.classList.add(\"ProseMirror-hideselection\");\n      if (\"onselectionchange\" in document) removeClassOnSelectionChange(view);\n    }\n  }\n  view.domObserver.setCurSelection();\n  view.domObserver.connectSelection();\n}\nvar brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n  var _view$docView$domFrom3 = view.docView.domFromPos(pos, 0),\n    node = _view$docView$domFrom3.node,\n    offset = _view$docView$domFrom3.offset;\n  var after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n  var before = offset ? node.childNodes[offset - 1] : null;\n  if (safari && after && after.contentEditable == \"false\") return setEditable(after);\n  if ((!after || after.contentEditable == \"false\") && (!before || before.contentEditable == \"false\")) {\n    if (after) return setEditable(after);else if (before) return setEditable(before);\n  }\n}\nfunction setEditable(element) {\n  element.contentEditable = \"true\";\n  if (safari && element.draggable) {\n    element.draggable = false;\n    element.wasDraggable = true;\n  }\n  return element;\n}\nfunction resetEditable(element) {\n  element.contentEditable = \"false\";\n  if (element.wasDraggable) {\n    element.draggable = true;\n    element.wasDraggable = null;\n  }\n}\nfunction removeClassOnSelectionChange(view) {\n  var doc = view.dom.ownerDocument;\n  doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n  var domSel = view.domSelectionRange();\n  var node = domSel.anchorNode,\n    offset = domSel.anchorOffset;\n  doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = function () {\n    if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n      doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n      setTimeout(function () {\n        if (!editorOwnsSelection(view) || view.state.selection.visible) view.dom.classList.remove(\"ProseMirror-hideselection\");\n      }, 20);\n    }\n  });\n}\nfunction selectCursorWrapper(view) {\n  var domSel = view.domSelection();\n  if (!domSel) return;\n  var node = view.cursorWrapper.dom,\n    img = node.nodeName == \"IMG\";\n  if (img) domSel.collapse(node.parentNode, domIndex(node) + 1);else domSel.collapse(node, 0);\n  if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n    node.disabled = true;\n    node.disabled = false;\n  }\n}\nfunction syncNodeSelection(view, sel) {\n  if (sel instanceof prosemirrorState.NodeSelection) {\n    var desc = view.docView.descAt(sel.from);\n    if (desc != view.lastSelectedViewDesc) {\n      clearNodeSelection(view);\n      if (desc) desc.selectNode();\n      view.lastSelectedViewDesc = desc;\n    }\n  } else {\n    clearNodeSelection(view);\n  }\n}\nfunction clearNodeSelection(view) {\n  if (view.lastSelectedViewDesc) {\n    if (view.lastSelectedViewDesc.parent) view.lastSelectedViewDesc.deselectNode();\n    view.lastSelectedViewDesc = undefined;\n  }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n  return view.someProp(\"createSelectionBetween\", function (f) {\n    return f(view, $anchor, $head);\n  }) || prosemirrorState.TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n  if (view.editable && !view.hasFocus()) return false;\n  return hasSelection(view);\n}\nfunction hasSelection(view) {\n  var sel = view.domSelectionRange();\n  if (!sel.anchorNode) return false;\n  try {\n    return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) && (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n  } catch (_) {\n    return false;\n  }\n}\nfunction anchorInRightPlace(view) {\n  var anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n  var domSel = view.domSelectionRange();\n  return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\nfunction moveSelectionBlock(state, dir) {\n  var _state$selection = state.selection,\n    $anchor = _state$selection.$anchor,\n    $head = _state$selection.$head;\n  var $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n  var $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n  return $start && prosemirrorState.Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n  view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n  return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n  var sel = view.state.selection;\n  if (sel instanceof prosemirrorState.TextSelection) {\n    if (mods.indexOf(\"s\") > -1) {\n      var $head = sel.$head,\n        node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;\n      if (!node || node.isText || !node.isLeaf) return false;\n      var $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));\n      return apply(view, new prosemirrorState.TextSelection(sel.$anchor, $newHead));\n    } else if (!sel.empty) {\n      return false;\n    } else if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\n      var next = moveSelectionBlock(view.state, dir);\n      if (next && next instanceof prosemirrorState.NodeSelection) return apply(view, next);\n      return false;\n    } else if (!(mac && mods.indexOf(\"m\") > -1)) {\n      var _$head = sel.$head,\n        _node = _$head.textOffset ? null : dir < 0 ? _$head.nodeBefore : _$head.nodeAfter,\n        desc;\n      if (!_node || _node.isText) return false;\n      var nodePos = dir < 0 ? _$head.pos - _node.nodeSize : _$head.pos;\n      if (!(_node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM)) return false;\n      if (prosemirrorState.NodeSelection.isSelectable(_node)) {\n        return apply(view, new prosemirrorState.NodeSelection(dir < 0 ? view.state.doc.resolve(_$head.pos - _node.nodeSize) : _$head));\n      } else if (webkit) {\n        return apply(view, new prosemirrorState.TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + _node.nodeSize)));\n      } else {\n        return false;\n      }\n    }\n  } else if (sel instanceof prosemirrorState.NodeSelection && sel.node.isInline) {\n    return apply(view, new prosemirrorState.TextSelection(dir > 0 ? sel.$to : sel.$from));\n  } else {\n    var _next = moveSelectionBlock(view.state, dir);\n    if (_next) return apply(view, _next);\n    return false;\n  }\n}\nfunction nodeLen(node) {\n  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom, dir) {\n  var desc = dom.pmViewDesc;\n  return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != \"BR\");\n}\nfunction skipIgnoredNodes(view, dir) {\n  return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);\n}\nfunction skipIgnoredNodesBefore(view) {\n  var sel = view.domSelectionRange();\n  var node = sel.focusNode,\n    offset = sel.focusOffset;\n  if (!node) return;\n  var moveNode,\n    moveOffset,\n    force = false;\n  if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset], -1)) force = true;\n  for (;;) {\n    if (offset > 0) {\n      if (node.nodeType != 1) {\n        break;\n      } else {\n        var before = node.childNodes[offset - 1];\n        if (isIgnorable(before, -1)) {\n          moveNode = node;\n          moveOffset = --offset;\n        } else if (before.nodeType == 3) {\n          node = before;\n          offset = node.nodeValue.length;\n        } else break;\n      }\n    } else if (isBlockNode(node)) {\n      break;\n    } else {\n      var prev = node.previousSibling;\n      while (prev && isIgnorable(prev, -1)) {\n        moveNode = node.parentNode;\n        moveOffset = domIndex(prev);\n        prev = prev.previousSibling;\n      }\n      if (!prev) {\n        node = node.parentNode;\n        if (node == view.dom) break;\n        offset = 0;\n      } else {\n        node = prev;\n        offset = nodeLen(node);\n      }\n    }\n  }\n  if (force) setSelFocus(view, node, offset);else if (moveNode) setSelFocus(view, moveNode, moveOffset);\n}\nfunction skipIgnoredNodesAfter(view) {\n  var sel = view.domSelectionRange();\n  var node = sel.focusNode,\n    offset = sel.focusOffset;\n  if (!node) return;\n  var len = nodeLen(node);\n  var moveNode, moveOffset;\n  for (;;) {\n    if (offset < len) {\n      if (node.nodeType != 1) break;\n      var after = node.childNodes[offset];\n      if (isIgnorable(after, 1)) {\n        moveNode = node;\n        moveOffset = ++offset;\n      } else break;\n    } else if (isBlockNode(node)) {\n      break;\n    } else {\n      var next = node.nextSibling;\n      while (next && isIgnorable(next, 1)) {\n        moveNode = next.parentNode;\n        moveOffset = domIndex(next) + 1;\n        next = next.nextSibling;\n      }\n      if (!next) {\n        node = node.parentNode;\n        if (node == view.dom) break;\n        offset = len = 0;\n      } else {\n        node = next;\n        offset = 0;\n        len = nodeLen(node);\n      }\n    }\n  }\n  if (moveNode) setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n  var desc = dom.pmViewDesc;\n  return desc && desc.node && desc.node.isBlock;\n}\nfunction textNodeAfter(node, offset) {\n  while (node && offset == node.childNodes.length && !hasBlockDesc(node)) {\n    offset = domIndex(node) + 1;\n    node = node.parentNode;\n  }\n  while (node && offset < node.childNodes.length) {\n    var next = node.childNodes[offset];\n    if (next.nodeType == 3) return next;\n    if (next.nodeType == 1 && next.contentEditable == \"false\") break;\n    node = next;\n    offset = 0;\n  }\n}\nfunction textNodeBefore(node, offset) {\n  while (node && !offset && !hasBlockDesc(node)) {\n    offset = domIndex(node);\n    node = node.parentNode;\n  }\n  while (node && offset) {\n    var next = node.childNodes[offset - 1];\n    if (next.nodeType == 3) return next;\n    if (next.nodeType == 1 && next.contentEditable == \"false\") break;\n    node = next;\n    offset = node.childNodes.length;\n  }\n}\nfunction setSelFocus(view, node, offset) {\n  if (node.nodeType != 3) {\n    var before, after;\n    if (after = textNodeAfter(node, offset)) {\n      node = after;\n      offset = 0;\n    } else if (before = textNodeBefore(node, offset)) {\n      node = before;\n      offset = before.nodeValue.length;\n    }\n  }\n  var sel = view.domSelection();\n  if (!sel) return;\n  if (selectionCollapsed(sel)) {\n    var range = document.createRange();\n    range.setEnd(node, offset);\n    range.setStart(node, offset);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  } else if (sel.extend) {\n    sel.extend(node, offset);\n  }\n  view.domObserver.setCurSelection();\n  var state = view.state;\n  setTimeout(function () {\n    if (view.state == state) selectionToDOM(view);\n  }, 50);\n}\nfunction findDirection(view, pos) {\n  var $pos = view.state.doc.resolve(pos);\n  if (!(chrome || windows) && $pos.parent.inlineContent) {\n    var coords = view.coordsAtPos(pos);\n    if (pos > $pos.start()) {\n      var before = view.coordsAtPos(pos - 1);\n      var mid = (before.top + before.bottom) / 2;\n      if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1) return before.left < coords.left ? \"ltr\" : \"rtl\";\n    }\n    if (pos < $pos.end()) {\n      var after = view.coordsAtPos(pos + 1);\n      var _mid = (after.top + after.bottom) / 2;\n      if (_mid > coords.top && _mid < coords.bottom && Math.abs(after.left - coords.left) > 1) return after.left > coords.left ? \"ltr\" : \"rtl\";\n    }\n  }\n  var computed = getComputedStyle(view.dom).direction;\n  return computed == \"rtl\" ? \"rtl\" : \"ltr\";\n}\nfunction selectVertically(view, dir, mods) {\n  var sel = view.state.selection;\n  if (sel instanceof prosemirrorState.TextSelection && !sel.empty || mods.indexOf(\"s\") > -1) return false;\n  if (mac && mods.indexOf(\"m\") > -1) return false;\n  var $from = sel.$from,\n    $to = sel.$to;\n  if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n    var next = moveSelectionBlock(view.state, dir);\n    if (next && next instanceof prosemirrorState.NodeSelection) return apply(view, next);\n  }\n  if (!$from.parent.inlineContent) {\n    var side = dir < 0 ? $from : $to;\n    var beyond = sel instanceof prosemirrorState.AllSelection ? prosemirrorState.Selection.near(side, dir) : prosemirrorState.Selection.findFrom(side, dir);\n    return beyond ? apply(view, beyond) : false;\n  }\n  return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n  if (!(view.state.selection instanceof prosemirrorState.TextSelection)) return true;\n  var _view$state$selection2 = view.state.selection,\n    $head = _view$state$selection2.$head,\n    $anchor = _view$state$selection2.$anchor,\n    empty = _view$state$selection2.empty;\n  if (!$head.sameParent($anchor)) return true;\n  if (!empty) return false;\n  if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) return true;\n  var nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n  if (nextNode && !nextNode.isText) {\n    var tr = view.state.tr;\n    if (dir < 0) tr[\"delete\"]($head.pos - nextNode.nodeSize, $head.pos);else tr[\"delete\"]($head.pos, $head.pos + nextNode.nodeSize);\n    view.dispatch(tr);\n    return true;\n  }\n  return false;\n}\nfunction switchEditable(view, node, state) {\n  view.domObserver.stop();\n  node.contentEditable = state;\n  view.domObserver.start();\n}\nfunction safariDownArrowBug(view) {\n  if (!safari || view.state.selection.$head.parentOffset > 0) return false;\n  var _view$domSelectionRan3 = view.domSelectionRange(),\n    focusNode = _view$domSelectionRan3.focusNode,\n    focusOffset = _view$domSelectionRan3.focusOffset;\n  if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 && focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n    var child = focusNode.firstChild;\n    switchEditable(view, child, \"true\");\n    setTimeout(function () {\n      return switchEditable(view, child, \"false\");\n    }, 20);\n  }\n  return false;\n}\nfunction getMods(event) {\n  var result = \"\";\n  if (event.ctrlKey) result += \"c\";\n  if (event.metaKey) result += \"m\";\n  if (event.altKey) result += \"a\";\n  if (event.shiftKey) result += \"s\";\n  return result;\n}\nfunction captureKeyDown(view, event) {\n  var code = event.keyCode,\n    mods = getMods(event);\n  if (code == 8 || mac && code == 72 && mods == \"c\") {\n    return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodes(view, -1);\n  } else if (code == 46 && !event.shiftKey || mac && code == 68 && mods == \"c\") {\n    return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);\n  } else if (code == 13 || code == 27) {\n    return true;\n  } else if (code == 37 || mac && code == 66 && mods == \"c\") {\n    var dir = code == 37 ? findDirection(view, view.state.selection.from) == \"ltr\" ? -1 : 1 : -1;\n    return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n  } else if (code == 39 || mac && code == 70 && mods == \"c\") {\n    var _dir = code == 39 ? findDirection(view, view.state.selection.from) == \"ltr\" ? 1 : -1 : 1;\n    return selectHorizontally(view, _dir, mods) || skipIgnoredNodes(view, _dir);\n  } else if (code == 38 || mac && code == 80 && mods == \"c\") {\n    return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);\n  } else if (code == 40 || mac && code == 78 && mods == \"c\") {\n    return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodes(view, 1);\n  } else if (mods == (mac ? \"m\" : \"c\") && (code == 66 || code == 73 || code == 89 || code == 90)) {\n    return true;\n  }\n  return false;\n}\nfunction _serializeForClipboard(view, slice) {\n  view.someProp(\"transformCopied\", function (f) {\n    slice = f(slice, view);\n  });\n  var context = [],\n    _slice = slice,\n    content = _slice.content,\n    openStart = _slice.openStart,\n    openEnd = _slice.openEnd;\n  while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n    openStart--;\n    openEnd--;\n    var node = content.firstChild;\n    context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n    content = node.content;\n  }\n  var serializer = view.someProp(\"clipboardSerializer\") || prosemirrorModel.DOMSerializer.fromSchema(view.state.schema);\n  var doc = detachedDoc(),\n    wrap = doc.createElement(\"div\");\n  wrap.appendChild(serializer.serializeFragment(content, {\n    document: doc\n  }));\n  var firstChild = wrap.firstChild,\n    needsWrap,\n    wrappers = 0;\n  while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n    for (var i = needsWrap.length - 1; i >= 0; i--) {\n      var wrapper = doc.createElement(needsWrap[i]);\n      while (wrap.firstChild) wrapper.appendChild(wrap.firstChild);\n      wrap.appendChild(wrapper);\n      wrappers++;\n    }\n    firstChild = wrap.firstChild;\n  }\n  if (firstChild && firstChild.nodeType == 1) firstChild.setAttribute(\"data-pm-slice\", \"\".concat(openStart, \" \").concat(openEnd).concat(wrappers ? \" -\".concat(wrappers) : \"\", \" \").concat(JSON.stringify(context)));\n  var text = view.someProp(\"clipboardTextSerializer\", function (f) {\n    return f(slice, view);\n  }) || slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n  return {\n    dom: wrap,\n    text: text,\n    slice: slice\n  };\n}\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n  var inCode = $context.parent.type.spec.code;\n  var dom, slice;\n  if (!html && !text) return null;\n  var asText = !!text && (plainText || inCode || !html);\n  if (asText) {\n    view.someProp(\"transformPastedText\", function (f) {\n      text = f(text, inCode || plainText, view);\n    });\n    if (inCode) {\n      slice = new prosemirrorModel.Slice(prosemirrorModel.Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0);\n      view.someProp(\"transformPasted\", function (f) {\n        slice = f(slice, view, true);\n      });\n      return slice;\n    }\n    var parsed = view.someProp(\"clipboardTextParser\", function (f) {\n      return f(text, $context, plainText, view);\n    });\n    if (parsed) {\n      slice = parsed;\n    } else {\n      var marks = $context.marks();\n      var schema = view.state.schema,\n        serializer = prosemirrorModel.DOMSerializer.fromSchema(schema);\n      dom = document.createElement(\"div\");\n      text.split(/(?:\\r\\n?|\\n)+/).forEach(function (block) {\n        var p = dom.appendChild(document.createElement(\"p\"));\n        if (block) p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n      });\n    }\n  } else {\n    view.someProp(\"transformPastedHTML\", function (f) {\n      html = f(html, view);\n    });\n    dom = readHTML(html);\n    if (webkit) restoreReplacedSpaces(dom);\n  }\n  var contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n  var sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n  if (sliceData && sliceData[3]) for (var i = +sliceData[3]; i > 0; i--) {\n    var child = dom.firstChild;\n    while (child && child.nodeType != 1) child = child.nextSibling;\n    if (!child) break;\n    dom = child;\n  }\n  if (!slice) {\n    var parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || prosemirrorModel.DOMParser.fromSchema(view.state.schema);\n    slice = parser.parseSlice(dom, {\n      preserveWhitespace: !!(asText || sliceData),\n      context: $context,\n      ruleFromNode: function ruleFromNode(dom) {\n        if (dom.nodeName == \"BR\" && !dom.nextSibling && dom.parentNode && !inlineParents.test(dom.parentNode.nodeName)) return {\n          ignore: true\n        };\n        return null;\n      }\n    });\n  }\n  if (sliceData) {\n    slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n  } else {\n    slice = prosemirrorModel.Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n    if (slice.openStart || slice.openEnd) {\n      var openStart = 0,\n        openEnd = 0;\n      for (var node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) {}\n      for (var _node2 = slice.content.lastChild; openEnd < slice.openEnd && !_node2.type.spec.isolating; openEnd++, _node2 = _node2.lastChild) {}\n      slice = closeSlice(slice, openStart, openEnd);\n    }\n  }\n  view.someProp(\"transformPasted\", function (f) {\n    slice = f(slice, view, asText);\n  });\n  return slice;\n}\nvar inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;\nfunction normalizeSiblings(fragment, $context) {\n  if (fragment.childCount < 2) return fragment;\n  var _loop = function _loop() {\n      var parent = $context.node(d);\n      var match = parent.contentMatchAt($context.index(d));\n      var lastWrap,\n        result = [];\n      fragment.forEach(function (node) {\n        if (!result) return;\n        var wrap = match.findWrapping(node.type),\n          inLast;\n        if (!wrap) return result = null;\n        if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n          result[result.length - 1] = inLast;\n        } else {\n          if (result.length) result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n          var wrapped = withWrappers(node, wrap);\n          result.push(wrapped);\n          match = match.matchType(wrapped.type);\n          lastWrap = wrap;\n        }\n      });\n      if (result) return {\n        v: prosemirrorModel.Fragment.from(result)\n      };\n    },\n    _ret;\n  for (var d = $context.depth; d >= 0; d--) {\n    _ret = _loop();\n    if (_ret) return _ret.v;\n  }\n  return fragment;\n}\nfunction withWrappers(node, wrap) {\n  var from = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  for (var i = wrap.length - 1; i >= from; i--) node = wrap[i].create(null, prosemirrorModel.Fragment.from(node));\n  return node;\n}\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n  if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n    var inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n    if (inner) return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n    var match = sibling.contentMatchAt(sibling.childCount);\n    if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1])) return sibling.copy(sibling.content.append(prosemirrorModel.Fragment.from(withWrappers(node, wrap, depth + 1))));\n  }\n}\nfunction closeRight(node, depth) {\n  if (depth == 0) return node;\n  var fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n  var fill = node.contentMatchAt(node.childCount).fillBefore(prosemirrorModel.Fragment.empty, true);\n  return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n  var node = side < 0 ? fragment.firstChild : fragment.lastChild,\n    inner = node.content;\n  if (fragment.childCount > 1) openEnd = 0;\n  if (depth < to - 1) inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n  if (depth >= from) inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner) : inner.append(node.contentMatchAt(node.childCount).fillBefore(prosemirrorModel.Fragment.empty, true));\n  return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n  if (openStart < slice.openStart) slice = new prosemirrorModel.Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n  if (openEnd < slice.openEnd) slice = new prosemirrorModel.Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n  return slice;\n}\nvar wrapMap = {\n  thead: [\"table\"],\n  tbody: [\"table\"],\n  tfoot: [\"table\"],\n  caption: [\"table\"],\n  colgroup: [\"table\"],\n  col: [\"table\", \"colgroup\"],\n  tr: [\"table\", \"tbody\"],\n  td: [\"table\", \"tbody\", \"tr\"],\n  th: [\"table\", \"tbody\", \"tr\"]\n};\nfunction detachedDoc() {\n  return document.implementation.createHTMLDocument(\"title\");\n}\nvar _policy = null;\nfunction maybeWrapTrusted(html) {\n  var trustedTypes = window.trustedTypes;\n  if (!trustedTypes) return html;\n  if (!_policy) _policy = trustedTypes.defaultPolicy || trustedTypes.createPolicy(\"ProseMirrorClipboard\", {\n    createHTML: function createHTML(s) {\n      return s;\n    }\n  });\n  return _policy.createHTML(html);\n}\nfunction readHTML(html) {\n  var metas = /^(\\s*<meta [^>]*>)*/.exec(html);\n  if (metas) html = html.slice(metas[0].length);\n  var doc = detachedDoc(),\n    elt = doc.body;\n  var firstTag = /<([a-z][^>\\s]+)/i.exec(html),\n    wrap;\n  if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()]) html = wrap.map(function (n) {\n    return \"<\" + n + \">\";\n  }).join(\"\") + html + wrap.map(function (n) {\n    return \"</\" + n + \">\";\n  }).reverse().join(\"\");\n  elt.innerHTML = maybeWrapTrusted(html);\n  if (wrap) for (var i = 0; i < wrap.length; i++) elt = elt.querySelector(wrap[i]) || elt;\n  for (var _i6 = 0; _i6 < doc.styleSheets.length; _i6++) {\n    var style = doc.styleSheets[_i6];\n    for (var j = 0; j < style.rules.length; j++) {\n      var rule = style.rules[j];\n      if (rule instanceof CSSStyleRule) {\n        var matches = elt.querySelectorAll(rule.selectorText);\n        for (var k = 0; k < matches.length; k++) matches[k].style.cssText += rule.style.cssText;\n      }\n    }\n  }\n  return elt;\n}\nfunction restoreReplacedSpaces(dom) {\n  var nodes = dom.querySelectorAll(chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n  for (var i = 0; i < nodes.length; i++) {\n    var node = nodes[i];\n    if (node.childNodes.length == 1 && node.textContent == \"\\xA0\" && node.parentNode) node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node);\n  }\n}\nfunction addContext(slice, context) {\n  if (!slice.size) return slice;\n  var schema = slice.content.firstChild.type.schema,\n    array;\n  try {\n    array = JSON.parse(context);\n  } catch (e) {\n    return slice;\n  }\n  var content = slice.content,\n    openStart = slice.openStart,\n    openEnd = slice.openEnd;\n  for (var i = array.length - 2; i >= 0; i -= 2) {\n    var type = schema.nodes[array[i]];\n    if (!type || type.hasRequiredAttrs()) break;\n    content = prosemirrorModel.Fragment.from(type.create(array[i + 1], content));\n    openStart++;\n    openEnd++;\n  }\n  return new prosemirrorModel.Slice(content, openStart, openEnd);\n}\nvar handlers = {};\nvar editHandlers = {};\nvar passiveHandlers = {\n  touchstart: true,\n  touchmove: true\n};\nvar InputState = _createClass(function InputState() {\n  _classCallCheck(this, InputState);\n  this.shiftKey = false;\n  this.mouseDown = null;\n  this.lastKeyCode = null;\n  this.lastKeyCodeTime = 0;\n  this.lastClick = {\n    time: 0,\n    x: 0,\n    y: 0,\n    type: \"\",\n    button: 0\n  };\n  this.lastSelectionOrigin = null;\n  this.lastSelectionTime = 0;\n  this.lastIOSEnter = 0;\n  this.lastIOSEnterFallbackTimeout = -1;\n  this.lastFocus = 0;\n  this.lastTouch = 0;\n  this.lastChromeDelete = 0;\n  this.composing = false;\n  this.compositionNode = null;\n  this.composingTimeout = -1;\n  this.compositionNodes = [];\n  this.compositionEndedAt = -2e8;\n  this.compositionID = 1;\n  this.badSafariComposition = false;\n  this.compositionPendingChanges = 0;\n  this.domChangeCount = 0;\n  this.eventHandlers = Object.create(null);\n  this.hideSelectionGuard = null;\n});\nfunction initInput(view) {\n  var _loop2 = function _loop2() {\n    var handler = handlers[event];\n    view.dom.addEventListener(event, view.input.eventHandlers[event] = function (event) {\n      if (eventBelongsToView(view, event) && !runCustomHandler(view, event) && (view.editable || !(event.type in editHandlers))) handler(view, event);\n    }, passiveHandlers[event] ? {\n      passive: true\n    } : undefined);\n  };\n  for (var event in handlers) {\n    _loop2();\n  }\n  if (safari) view.dom.addEventListener(\"input\", function () {\n    return null;\n  });\n  ensureListeners(view);\n}\nfunction setSelectionOrigin(view, origin) {\n  view.input.lastSelectionOrigin = origin;\n  view.input.lastSelectionTime = Date.now();\n}\nfunction destroyInput(view) {\n  if (view.input.mouseDown) view.input.mouseDown.done();\n  view.domObserver.stop();\n  for (var type in view.input.eventHandlers) view.dom.removeEventListener(type, view.input.eventHandlers[type]);\n  clearTimeout(view.input.composingTimeout);\n  clearTimeout(view.input.lastIOSEnterFallbackTimeout);\n}\nfunction ensureListeners(view) {\n  view.someProp(\"handleDOMEvents\", function (currentHandlers) {\n    for (var type in currentHandlers) if (!view.input.eventHandlers[type]) view.dom.addEventListener(type, view.input.eventHandlers[type] = function (event) {\n      return runCustomHandler(view, event);\n    });\n  });\n}\nfunction runCustomHandler(view, event) {\n  return view.someProp(\"handleDOMEvents\", function (handlers) {\n    var handler = handlers[event.type];\n    return handler ? handler(view, event) || event.defaultPrevented : false;\n  });\n}\nfunction eventBelongsToView(view, event) {\n  if (!event.bubbles) return true;\n  if (event.defaultPrevented) return false;\n  for (var node = event.target; node != view.dom; node = node.parentNode) if (!node || node.nodeType == 11 || node.pmViewDesc && node.pmViewDesc.stopEvent(event)) return false;\n  return true;\n}\nfunction _dispatchEvent(view, event) {\n  if (!runCustomHandler(view, event) && handlers[event.type] && (view.editable || !(event.type in editHandlers))) handlers[event.type](view, event);\n}\neditHandlers.keydown = function (view, _event) {\n  var event = _event;\n  view.input.shiftKey = event.keyCode == 16 || event.shiftKey;\n  if (inOrNearComposition(view)) return;\n  view.input.lastKeyCode = event.keyCode;\n  view.input.lastKeyCodeTime = Date.now();\n  if (android && chrome && event.keyCode == 13) return;\n  if (event.keyCode != 229) view.domObserver.forceFlush();\n  if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n    var now = Date.now();\n    view.input.lastIOSEnter = now;\n    view.input.lastIOSEnterFallbackTimeout = setTimeout(function () {\n      if (view.input.lastIOSEnter == now) {\n        view.someProp(\"handleKeyDown\", function (f) {\n          return f(view, keyEvent(13, \"Enter\"));\n        });\n        view.input.lastIOSEnter = 0;\n      }\n    }, 200);\n  } else if (view.someProp(\"handleKeyDown\", function (f) {\n    return f(view, event);\n  }) || captureKeyDown(view, event)) {\n    event.preventDefault();\n  } else {\n    setSelectionOrigin(view, \"key\");\n  }\n};\neditHandlers.keyup = function (view, event) {\n  if (event.keyCode == 16) view.input.shiftKey = false;\n};\neditHandlers.keypress = function (view, _event) {\n  var event = _event;\n  if (inOrNearComposition(view) || !event.charCode || event.ctrlKey && !event.altKey || mac && event.metaKey) return;\n  if (view.someProp(\"handleKeyPress\", function (f) {\n    return f(view, event);\n  })) {\n    event.preventDefault();\n    return;\n  }\n  var sel = view.state.selection;\n  if (!(sel instanceof prosemirrorState.TextSelection) || !sel.$from.sameParent(sel.$to)) {\n    var text = String.fromCharCode(event.charCode);\n    var deflt = function deflt() {\n      return view.state.tr.insertText(text).scrollIntoView();\n    };\n    if (!/[\\r\\n]/.test(text) && !view.someProp(\"handleTextInput\", function (f) {\n      return f(view, sel.$from.pos, sel.$to.pos, text, deflt);\n    })) view.dispatch(deflt());\n    event.preventDefault();\n  }\n};\nfunction eventCoords(event) {\n  return {\n    left: event.clientX,\n    top: event.clientY\n  };\n}\nfunction isNear(event, click) {\n  var dx = click.x - event.clientX,\n    dy = click.y - event.clientY;\n  return dx * dx + dy * dy < 100;\n}\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n  if (inside == -1) return false;\n  var $pos = view.state.doc.resolve(inside);\n  var _loop3 = function _loop3(i) {\n      if (view.someProp(propName, function (f) {\n        return i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true) : f(view, pos, $pos.node(i), $pos.before(i), event, false);\n      })) return {\n        v: true\n      };\n    },\n    _ret2;\n  for (var i = $pos.depth + 1; i > 0; i--) {\n    _ret2 = _loop3(i);\n    if (_ret2) return _ret2.v;\n  }\n  return false;\n}\nfunction updateSelection(view, selection, origin) {\n  if (!view.focused) view.focus();\n  if (view.state.selection.eq(selection)) return;\n  var tr = view.state.tr.setSelection(selection);\n  if (origin == \"pointer\") tr.setMeta(\"pointer\", true);\n  view.dispatch(tr);\n}\nfunction selectClickedLeaf(view, inside) {\n  if (inside == -1) return false;\n  var $pos = view.state.doc.resolve(inside),\n    node = $pos.nodeAfter;\n  if (node && node.isAtom && prosemirrorState.NodeSelection.isSelectable(node)) {\n    updateSelection(view, new prosemirrorState.NodeSelection($pos), \"pointer\");\n    return true;\n  }\n  return false;\n}\nfunction selectClickedNode(view, inside) {\n  if (inside == -1) return false;\n  var sel = view.state.selection,\n    selectedNode,\n    selectAt;\n  if (sel instanceof prosemirrorState.NodeSelection) selectedNode = sel.node;\n  var $pos = view.state.doc.resolve(inside);\n  for (var i = $pos.depth + 1; i > 0; i--) {\n    var node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n    if (prosemirrorState.NodeSelection.isSelectable(node)) {\n      if (selectedNode && sel.$from.depth > 0 && i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos) selectAt = $pos.before(sel.$from.depth);else selectAt = $pos.before(i);\n      break;\n    }\n  }\n  if (selectAt != null) {\n    updateSelection(view, prosemirrorState.NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n    return true;\n  } else {\n    return false;\n  }\n}\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n  return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) || view.someProp(\"handleClick\", function (f) {\n    return f(view, pos, event);\n  }) || (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\nfunction handleDoubleClick(view, pos, inside, event) {\n  return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) || view.someProp(\"handleDoubleClick\", function (f) {\n    return f(view, pos, event);\n  });\n}\nfunction handleTripleClick(view, pos, inside, event) {\n  return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) || view.someProp(\"handleTripleClick\", function (f) {\n    return f(view, pos, event);\n  }) || defaultTripleClick(view, inside, event);\n}\nfunction defaultTripleClick(view, inside, event) {\n  if (event.button != 0) return false;\n  var selection = selectionForTripleClick(view, inside, true),\n    doc = view.state.doc;\n  if (!selection) return false;\n  updateSelection(view, selection, \"pointer\");\n  if (selection instanceof prosemirrorState.TextSelection && doc.eq(view.state.doc)) view.input.mouseDown = new TripleClickDrag(view, selection);\n  return true;\n}\nfunction selectionForTripleClick(view, inside, selectNodes) {\n  var doc = view.state.doc;\n  if (inside == -1) return doc.inlineContent ? prosemirrorState.TextSelection.create(doc, 0, doc.content.size) : null;\n  var $pos = doc.resolve(inside);\n  for (var i = $pos.depth + 1; i > 0; i--) {\n    var node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n    var nodePos = $pos.before(i);\n    if (node.inlineContent) return prosemirrorState.TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size);else if (selectNodes && prosemirrorState.NodeSelection.isSelectable(node)) return prosemirrorState.NodeSelection.create(doc, nodePos);\n  }\n  return null;\n}\nfunction forceDOMFlush(view) {\n  return endComposition(view);\n}\nvar selectNodeModifier = mac ? \"metaKey\" : \"ctrlKey\";\nhandlers.mousedown = function (view, _event) {\n  var event = _event;\n  view.input.shiftKey = event.shiftKey;\n  var flushed = forceDOMFlush(view);\n  var now = Date.now(),\n    type = \"singleClick\";\n  if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier] && view.input.lastClick.button == event.button) {\n    if (view.input.lastClick.type == \"singleClick\") type = \"doubleClick\";else if (view.input.lastClick.type == \"doubleClick\") type = \"tripleClick\";\n  }\n  view.input.lastClick = {\n    time: now,\n    x: event.clientX,\n    y: event.clientY,\n    type: type,\n    button: event.button\n  };\n  if (view.input.mouseDown) view.input.mouseDown.done();\n  var pos = view.posAtCoords(eventCoords(event));\n  if (!pos) return;\n  if (type == \"singleClick\") {\n    view.input.mouseDown = new LeftMouseDown(view, pos, event, !!flushed);\n  } else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n    event.preventDefault();\n  } else {\n    setSelectionOrigin(view, \"pointer\");\n  }\n};\nvar MouseDown = function () {\n  function MouseDown(view) {\n    _classCallCheck(this, MouseDown);\n    this.view = view;\n    this.mightDrag = null;\n    view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n    view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n  }\n  _createClass(MouseDown, [{\n    key: \"up\",\n    value: function up(event) {\n      this.done();\n    }\n  }, {\n    key: \"move\",\n    value: function move(event) {\n      if (event.buttons == 0) this.done();\n    }\n  }, {\n    key: \"done\",\n    value: function done() {\n      this.view.root.removeEventListener(\"mouseup\", this.up);\n      this.view.root.removeEventListener(\"mousemove\", this.move);\n      if (this.view.input.mouseDown == this) this.view.input.mouseDown = null;\n    }\n  }, {\n    key: \"delaySelUpdate\",\n    value: function delaySelUpdate() {\n      return false;\n    }\n  }]);\n  return MouseDown;\n}();\nvar LeftMouseDown = function (_MouseDown) {\n  _inherits(LeftMouseDown, _MouseDown);\n  var _super8 = _createSuper(LeftMouseDown);\n  function LeftMouseDown(view, pos, event, flushed) {\n    var _this8;\n    _classCallCheck(this, LeftMouseDown);\n    _this8 = _super8.call(this, view);\n    _this8.pos = pos;\n    _this8.event = event;\n    _this8.flushed = flushed;\n    _this8.delayedSelectionSync = false;\n    _this8.startDoc = view.state.doc;\n    _this8.selectNode = !!event[selectNodeModifier];\n    _this8.allowDefault = event.shiftKey;\n    var targetNode, targetPos;\n    if (pos.inside > -1) {\n      targetNode = view.state.doc.nodeAt(pos.inside);\n      targetPos = pos.inside;\n    } else {\n      var $pos = view.state.doc.resolve(pos.pos);\n      targetNode = $pos.parent;\n      targetPos = $pos.depth ? $pos.before() : 0;\n    }\n    var target = flushed ? null : event.target;\n    var targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n    _this8.target = targetDesc && targetDesc.nodeDOM.nodeType == 1 ? targetDesc.nodeDOM : null;\n    var selection = view.state.selection;\n    if (event.button == 0 && (targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false || selection instanceof prosemirrorState.NodeSelection && selection.from <= targetPos && selection.to > targetPos)) _this8.mightDrag = {\n      node: targetNode,\n      pos: targetPos,\n      addAttr: !!(_this8.target && !_this8.target.draggable),\n      setUneditable: !!(_this8.target && gecko && !_this8.target.hasAttribute(\"contentEditable\"))\n    };\n    if (_this8.target && _this8.mightDrag && (_this8.mightDrag.addAttr || _this8.mightDrag.setUneditable)) {\n      _this8.view.domObserver.stop();\n      if (_this8.mightDrag.addAttr) _this8.target.draggable = true;\n      if (_this8.mightDrag.setUneditable) setTimeout(function () {\n        if (_this8.view.input.mouseDown == _assertThisInitialized(_this8)) _this8.target.setAttribute(\"contentEditable\", \"false\");\n      }, 20);\n      _this8.view.domObserver.start();\n    }\n    setSelectionOrigin(view, \"pointer\");\n    return _this8;\n  }\n  _createClass(LeftMouseDown, [{\n    key: \"done\",\n    value: function done() {\n      var _this9 = this;\n      _get(_getPrototypeOf(LeftMouseDown.prototype), \"done\", this).call(this);\n      if (this.mightDrag && this.target) {\n        this.view.domObserver.stop();\n        if (this.mightDrag.addAttr) this.target.removeAttribute(\"draggable\");\n        if (this.mightDrag.setUneditable) this.target.removeAttribute(\"contentEditable\");\n        this.view.domObserver.start();\n      }\n      if (this.delayedSelectionSync) setTimeout(function () {\n        if (!_this9.view.isDestroyed) selectionToDOM(_this9.view);\n      });\n    }\n  }, {\n    key: \"up\",\n    value: function up(event) {\n      this.done();\n      if (!this.view.dom.contains(event.target)) return;\n      var pos = this.pos;\n      if (this.view.state.doc != this.startDoc) pos = this.view.posAtCoords(eventCoords(event));\n      this.updateAllowDefault(event);\n      if (this.allowDefault || !pos) {\n        setSelectionOrigin(this.view, \"pointer\");\n      } else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n        event.preventDefault();\n      } else if (event.button == 0 && (this.flushed || safari && this.mightDrag && !this.mightDrag.node.isAtom || chrome && !this.view.state.selection.visible && Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2)) {\n        updateSelection(this.view, prosemirrorState.Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n        event.preventDefault();\n      } else {\n        setSelectionOrigin(this.view, \"pointer\");\n      }\n    }\n  }, {\n    key: \"move\",\n    value: function move(event) {\n      this.updateAllowDefault(event);\n      setSelectionOrigin(this.view, \"pointer\");\n      _get(_getPrototypeOf(LeftMouseDown.prototype), \"move\", this).call(this, event);\n    }\n  }, {\n    key: \"updateAllowDefault\",\n    value: function updateAllowDefault(event) {\n      if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 || Math.abs(this.event.y - event.clientY) > 4)) this.allowDefault = true;\n    }\n  }, {\n    key: \"delaySelUpdate\",\n    value: function delaySelUpdate() {\n      if (!this.allowDefault) return false;\n      this.delayedSelectionSync = true;\n      return true;\n    }\n  }]);\n  return LeftMouseDown;\n}(MouseDown);\nvar TripleClickDrag = function (_MouseDown2) {\n  _inherits(TripleClickDrag, _MouseDown2);\n  var _super9 = _createSuper(TripleClickDrag);\n  function TripleClickDrag(view, startSelection) {\n    var _this10;\n    _classCallCheck(this, TripleClickDrag);\n    _this10 = _super9.call(this, view);\n    _this10.startSelection = startSelection;\n    _this10.startDoc = view.state.doc;\n    return _this10;\n  }\n  _createClass(TripleClickDrag, [{\n    key: \"move\",\n    value: function move(event) {\n      if (event.buttons == 0 || this.view.isDestroyed || !this.view.state.doc.eq(this.startDoc)) {\n        this.done();\n        return;\n      }\n      event.preventDefault();\n      setSelectionOrigin(this.view, \"pointer\");\n      var pos = this.view.posAtCoords(eventCoords(event));\n      var target = pos && selectionForTripleClick(this.view, pos.inside, false);\n      if (!target) return;\n      var doc = this.view.state.doc,\n        start = this.startSelection;\n      var _ref5 = target.from < start.from ? [start.to, target.from] : [start.from, target.to],\n        _ref6 = _slicedToArray(_ref5, 2),\n        anchor = _ref6[0],\n        head = _ref6[1];\n      updateSelection(this.view, prosemirrorState.TextSelection.create(doc, anchor, head), \"pointer\");\n    }\n  }]);\n  return TripleClickDrag;\n}(MouseDown);\nhandlers.touchstart = function (view) {\n  view.input.lastTouch = Date.now();\n  forceDOMFlush(view);\n  setSelectionOrigin(view, \"pointer\");\n};\nhandlers.touchmove = function (view) {\n  view.input.lastTouch = Date.now();\n  setSelectionOrigin(view, \"pointer\");\n};\nhandlers.contextmenu = function (view) {\n  return forceDOMFlush(view);\n};\nfunction inOrNearComposition(view, event) {\n  if (view.composing) return true;\n  if (safari && Math.abs(Date.now() - view.input.compositionEndedAt) < 500) {\n    view.input.compositionEndedAt = -2e8;\n    return true;\n  }\n  return false;\n}\nvar timeoutComposition = android ? 5000 : -1;\neditHandlers.compositionstart = editHandlers.compositionupdate = function (view) {\n  if (!view.composing) {\n    view.domObserver.flush();\n    var state = view.state,\n      $pos = state.selection.$to;\n    if (state.selection instanceof prosemirrorState.TextSelection && (state.storedMarks || !$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(function (m) {\n      return m.type.spec.inclusive === false;\n    }) || chrome && windows && selectionBeforeUneditable(view))) {\n      view.markCursor = view.state.storedMarks || $pos.marks();\n      endComposition(view, true);\n      view.markCursor = null;\n    } else {\n      endComposition(view, !state.selection.empty);\n      if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n        var sel = view.domSelectionRange();\n        for (var node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n          var before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n          if (!before) break;\n          if (before.nodeType == 3) {\n            var _sel = view.domSelection();\n            if (_sel) _sel.collapse(before, before.nodeValue.length);\n            break;\n          } else {\n            node = before;\n            offset = -1;\n          }\n        }\n      }\n    }\n    view.input.composing = true;\n  }\n  scheduleComposeEnd(view, timeoutComposition);\n};\nfunction selectionBeforeUneditable(view) {\n  var _view$domSelectionRan4 = view.domSelectionRange(),\n    focusNode = _view$domSelectionRan4.focusNode,\n    focusOffset = _view$domSelectionRan4.focusOffset;\n  if (!focusNode || focusNode.nodeType != 1 || focusOffset >= focusNode.childNodes.length) return false;\n  var next = focusNode.childNodes[focusOffset];\n  return next.nodeType == 1 && next.contentEditable == \"false\";\n}\neditHandlers.compositionend = function (view, event) {\n  if (view.composing) {\n    view.input.composing = false;\n    view.input.compositionEndedAt = Date.now();\n    view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;\n    view.input.compositionNode = null;\n    if (view.input.badSafariComposition) view.domObserver.forceFlush();else if (view.input.compositionPendingChanges) Promise.resolve().then(function () {\n      return view.domObserver.flush();\n    });\n    view.input.compositionID++;\n    scheduleComposeEnd(view, 20);\n  }\n};\nfunction scheduleComposeEnd(view, delay) {\n  clearTimeout(view.input.composingTimeout);\n  if (delay > -1) view.input.composingTimeout = setTimeout(function () {\n    return endComposition(view);\n  }, delay);\n}\nfunction clearComposition(view) {\n  if (view.composing) {\n    view.input.composing = false;\n    view.input.compositionEndedAt = Date.now();\n  }\n  while (view.input.compositionNodes.length > 0) view.input.compositionNodes.pop().markParentsDirty();\n}\nfunction findCompositionNode(view) {\n  var sel = view.domSelectionRange();\n  if (!sel.focusNode) return null;\n  var textBefore = textNodeBefore$1(sel.focusNode, sel.focusOffset);\n  var textAfter = textNodeAfter$1(sel.focusNode, sel.focusOffset);\n  if (textBefore && textAfter && textBefore != textAfter) {\n    var descAfter = textAfter.pmViewDesc,\n      lastChanged = view.domObserver.lastChangedTextNode;\n    if (textBefore == lastChanged || textAfter == lastChanged) return lastChanged;\n    if (!descAfter || !descAfter.isText(textAfter.nodeValue)) {\n      return textAfter;\n    } else if (view.input.compositionNode == textAfter) {\n      var descBefore = textBefore.pmViewDesc;\n      if (!(!descBefore || !descBefore.isText(textBefore.nodeValue))) return textAfter;\n    }\n  }\n  return textBefore || textAfter;\n}\nfunction endComposition(view) {\n  var restarting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  if (android && view.domObserver.flushingSoon >= 0) return;\n  view.domObserver.forceFlush();\n  clearComposition(view);\n  if (restarting || view.docView && view.docView.dirty) {\n    var sel = selectionFromDOM(view),\n      cur = view.state.selection;\n    if (sel && !sel.eq(cur)) view.dispatch(view.state.tr.setSelection(sel));else if ((view.markCursor || restarting) && !cur.$from.node(cur.$from.sharedDepth(cur.to)).inlineContent) view.dispatch(view.state.tr.deleteSelection());else view.updateState(view.state);\n    return true;\n  }\n  return false;\n}\nfunction captureCopy(view, dom) {\n  if (!view.dom.parentNode) return;\n  var wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n  wrap.appendChild(dom);\n  wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n  var sel = getSelection(),\n    range = document.createRange();\n  range.selectNodeContents(dom);\n  view.dom.blur();\n  sel.removeAllRanges();\n  sel.addRange(range);\n  setTimeout(function () {\n    if (wrap.parentNode) wrap.parentNode.removeChild(wrap);\n    view.focus();\n  }, 50);\n}\nvar brokenClipboardAPI = ie && ie_version < 15 || ios && webkit_version < 604;\nhandlers.copy = editHandlers.cut = function (view, _event) {\n  var event = _event;\n  var sel = view.state.selection,\n    cut = event.type == \"cut\";\n  if (sel.empty) return;\n  var data = brokenClipboardAPI ? null : event.clipboardData;\n  var slice = sel.content(),\n    _serializeForClipboar = _serializeForClipboard(view, slice),\n    dom = _serializeForClipboar.dom,\n    text = _serializeForClipboar.text;\n  if (data) {\n    event.preventDefault();\n    data.clearData();\n    data.setData(\"text/html\", dom.innerHTML);\n    data.setData(\"text/plain\", text);\n  } else {\n    captureCopy(view, dom);\n  }\n  if (cut) view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n};\nfunction sliceSingleNode(slice) {\n  return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\nfunction capturePaste(view, event) {\n  if (!view.dom.parentNode) return;\n  var plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;\n  var target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n  if (!plainText) target.contentEditable = \"true\";\n  target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n  target.focus();\n  var plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n  setTimeout(function () {\n    view.focus();\n    if (target.parentNode) target.parentNode.removeChild(target);\n    if (plainText) doPaste(view, target.value, null, plain, event);else doPaste(view, target.textContent, target.innerHTML, plain, event);\n  }, 50);\n}\nfunction doPaste(view, text, html, preferPlain, event) {\n  var slice = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from);\n  if (view.someProp(\"handlePaste\", function (f) {\n    return f(view, event, slice || prosemirrorModel.Slice.empty);\n  })) return true;\n  if (!slice) return false;\n  var singleNode = sliceSingleNode(slice);\n  var tr = singleNode ? view.state.tr.replaceSelectionWith(singleNode, preferPlain) : view.state.tr.replaceSelection(slice);\n  view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n  return true;\n}\nfunction getText(clipboardData) {\n  var text = clipboardData.getData(\"text/plain\") || clipboardData.getData(\"Text\");\n  if (text) return text;\n  var uris = clipboardData.getData(\"text/uri-list\");\n  return uris ? uris.replace(/\\r?\\n/g, \" \") : \"\";\n}\neditHandlers.paste = function (view, _event) {\n  var event = _event;\n  if (view.composing && !android) return;\n  var data = brokenClipboardAPI ? null : event.clipboardData;\n  var plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n  if (data && doPaste(view, getText(data), data.getData(\"text/html\"), plain, event)) event.preventDefault();else capturePaste(view, event);\n};\nvar Dragging = _createClass(function Dragging(slice, move, node) {\n  _classCallCheck(this, Dragging);\n  this.slice = slice;\n  this.move = move;\n  this.node = node;\n});\nvar dragCopyModifier = mac ? \"altKey\" : \"ctrlKey\";\nfunction dragMoves(view, event) {\n  var copy;\n  view.someProp(\"dragCopies\", function (test) {\n    copy = copy || test(event);\n  });\n  return copy != null ? !copy : !event[dragCopyModifier];\n}\nhandlers.dragstart = function (view, _event) {\n  var event = _event;\n  var mouseDown = view.input.mouseDown;\n  if (mouseDown) mouseDown.done();\n  if (!event.dataTransfer) return;\n  var sel = view.state.selection;\n  var pos = sel.empty ? null : view.posAtCoords(eventCoords(event));\n  var node;\n  if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof prosemirrorState.NodeSelection ? sel.to - 1 : sel.to)) ;else if (mouseDown && mouseDown.mightDrag) {\n    node = prosemirrorState.NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);\n  } else if (event.target && event.target.nodeType == 1) {\n    var desc = view.docView.nearestDesc(event.target, true);\n    if (desc && desc.node.type.spec.draggable && desc != view.docView) node = prosemirrorState.NodeSelection.create(view.state.doc, desc.posBefore);\n  }\n  var draggedSlice = (node || view.state.selection).content();\n  var _serializeForClipboar2 = _serializeForClipboard(view, draggedSlice),\n    dom = _serializeForClipboar2.dom,\n    text = _serializeForClipboar2.text,\n    slice = _serializeForClipboar2.slice;\n  if (!event.dataTransfer.files.length || !chrome || chrome_version > 120) event.dataTransfer.clearData();\n  event.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n  event.dataTransfer.effectAllowed = \"copyMove\";\n  if (!brokenClipboardAPI) event.dataTransfer.setData(\"text/plain\", text);\n  view.dragging = new Dragging(slice, dragMoves(view, event), node);\n};\nhandlers.dragend = function (view) {\n  var dragging = view.dragging;\n  window.setTimeout(function () {\n    if (view.dragging == dragging) view.dragging = null;\n  }, 50);\n};\neditHandlers.dragover = editHandlers.dragenter = function (_, e) {\n  return e.preventDefault();\n};\neditHandlers.drop = function (view, event) {\n  try {\n    handleDrop(view, event, view.dragging);\n  } finally {\n    view.dragging = null;\n  }\n};\nfunction handleDrop(view, event, dragging) {\n  if (!event.dataTransfer) return;\n  var eventPos = view.posAtCoords(eventCoords(event));\n  if (!eventPos) return;\n  var $mouse = view.state.doc.resolve(eventPos.pos);\n  var slice = dragging && dragging.slice;\n  if (slice) {\n    view.someProp(\"transformPasted\", function (f) {\n      slice = f(slice, view, false);\n    });\n  } else {\n    slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData(\"text/html\"), false, $mouse);\n  }\n  var move = !!(dragging && dragMoves(view, event));\n  if (view.someProp(\"handleDrop\", function (f) {\n    return f(view, event, slice || prosemirrorModel.Slice.empty, move);\n  })) {\n    event.preventDefault();\n    return;\n  }\n  if (!slice) return;\n  event.preventDefault();\n  var insertPos = slice ? prosemirrorTransform.dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n  if (insertPos == null) insertPos = $mouse.pos;\n  var tr = view.state.tr;\n  if (move) {\n    var node = dragging.node;\n    if (node) node.replace(tr);else tr.deleteSelection();\n  }\n  var pos = tr.mapping.map(insertPos);\n  var isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n  var beforeInsert = tr.doc;\n  if (isNode) tr.replaceRangeWith(pos, pos, slice.content.firstChild);else tr.replaceRange(pos, pos, slice);\n  if (tr.doc.eq(beforeInsert)) return;\n  var $pos = tr.doc.resolve(pos);\n  if (isNode && prosemirrorState.NodeSelection.isSelectable(slice.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n    tr.setSelection(new prosemirrorState.NodeSelection($pos));\n  } else {\n    var end = tr.mapping.map(insertPos);\n    tr.mapping.maps[tr.mapping.maps.length - 1].forEach(function (_from, _to, _newFrom, newTo) {\n      return end = newTo;\n    });\n    tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n  }\n  view.focus();\n  view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n}\nhandlers.focus = function (view) {\n  view.input.lastFocus = Date.now();\n  if (!view.focused) {\n    view.domObserver.stop();\n    view.dom.classList.add(\"ProseMirror-focused\");\n    view.domObserver.start();\n    view.focused = true;\n    setTimeout(function () {\n      if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange())) selectionToDOM(view);\n    }, 20);\n  }\n};\nhandlers.blur = function (view, _event) {\n  var event = _event;\n  if (view.focused) {\n    view.domObserver.stop();\n    view.dom.classList.remove(\"ProseMirror-focused\");\n    view.domObserver.start();\n    if (event.relatedTarget && view.dom.contains(event.relatedTarget)) view.domObserver.currentSelection.clear();\n    view.focused = false;\n  }\n};\nhandlers.beforeinput = function (view, _event) {\n  var event = _event;\n  if (android && event.inputType == \"deleteContentBackward\") {\n    view.domObserver.flushSoon();\n    var domChangeCount = view.input.domChangeCount;\n    setTimeout(function () {\n      if (view.input.domChangeCount != domChangeCount) return;\n      view.dom.blur();\n      view.focus();\n      if (view.someProp(\"handleKeyDown\", function (f) {\n        return f(view, keyEvent(8, \"Backspace\"));\n      })) return;\n      var $cursor = view.state.selection.$cursor;\n      if ($cursor && $cursor.pos > 0) view.dispatch(view.state.tr[\"delete\"]($cursor.pos - 1, $cursor.pos).scrollIntoView());\n    }, 50);\n  }\n};\nfor (var prop in editHandlers) handlers[prop] = editHandlers[prop];\nfunction compareObjs(a, b) {\n  if (a == b) return true;\n  for (var p in a) if (a[p] !== b[p]) return false;\n  for (var _p in b) if (!(_p in a)) return false;\n  return true;\n}\nvar WidgetType = function () {\n  function WidgetType(toDOM, spec) {\n    _classCallCheck(this, WidgetType);\n    this.toDOM = toDOM;\n    this.spec = spec || noSpec;\n    this.side = this.spec.side || 0;\n  }\n  _createClass(WidgetType, [{\n    key: \"map\",\n    value: function map(mapping, span, offset, oldOffset) {\n      var _mapping$mapResult = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1),\n        pos = _mapping$mapResult.pos,\n        deleted = _mapping$mapResult.deleted;\n      return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n    }\n  }, {\n    key: \"valid\",\n    value: function valid() {\n      return true;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this == other || other instanceof WidgetType && (this.spec.key && this.spec.key == other.spec.key || this.toDOM == other.toDOM && compareObjs(this.spec, other.spec));\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy(node) {\n      if (this.spec.destroy) this.spec.destroy(node);\n    }\n  }]);\n  return WidgetType;\n}();\nvar InlineType = function () {\n  function InlineType(attrs, spec) {\n    _classCallCheck(this, InlineType);\n    this.attrs = attrs;\n    this.spec = spec || noSpec;\n  }\n  _createClass(InlineType, [{\n    key: \"map\",\n    value: function map(mapping, span, offset, oldOffset) {\n      var from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n      var to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n      return from >= to ? null : new Decoration(from, to, this);\n    }\n  }, {\n    key: \"valid\",\n    value: function valid(_, span) {\n      return span.from < span.to;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this == other || other instanceof InlineType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {}\n  }], [{\n    key: \"is\",\n    value: function is(span) {\n      return span.type instanceof InlineType;\n    }\n  }]);\n  return InlineType;\n}();\nvar NodeType = function () {\n  function NodeType(attrs, spec) {\n    _classCallCheck(this, NodeType);\n    this.attrs = attrs;\n    this.spec = spec || noSpec;\n  }\n  _createClass(NodeType, [{\n    key: \"map\",\n    value: function map(mapping, span, offset, oldOffset) {\n      var from = mapping.mapResult(span.from + oldOffset, 1);\n      if (from.deleted) return null;\n      var to = mapping.mapResult(span.to + oldOffset, -1);\n      if (to.deleted || to.pos <= from.pos) return null;\n      return new Decoration(from.pos - offset, to.pos - offset, this);\n    }\n  }, {\n    key: \"valid\",\n    value: function valid(node, span) {\n      var _node$content$findInd = node.content.findIndex(span.from),\n        index = _node$content$findInd.index,\n        offset = _node$content$findInd.offset,\n        child;\n      return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return this == other || other instanceof NodeType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {}\n  }]);\n  return NodeType;\n}();\nvar Decoration = function () {\n  function Decoration(from, to, type) {\n    _classCallCheck(this, Decoration);\n    this.from = from;\n    this.to = to;\n    this.type = type;\n  }\n  _createClass(Decoration, [{\n    key: \"copy\",\n    value: function copy(from, to) {\n      return new Decoration(from, to, this.type);\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping, offset, oldOffset) {\n      return this.type.map(mapping, this, offset, oldOffset);\n    }\n  }, {\n    key: \"spec\",\n    get: function get() {\n      return this.type.spec;\n    }\n  }, {\n    key: \"inline\",\n    get: function get() {\n      return this.type instanceof InlineType;\n    }\n  }, {\n    key: \"widget\",\n    get: function get() {\n      return this.type instanceof WidgetType;\n    }\n  }], [{\n    key: \"widget\",\n    value: function widget(pos, toDOM, spec) {\n      return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n    }\n  }, {\n    key: \"inline\",\n    value: function inline(from, to, attrs, spec) {\n      return new Decoration(from, to, new InlineType(attrs, spec));\n    }\n  }, {\n    key: \"node\",\n    value: function node(from, to, attrs, spec) {\n      return new Decoration(from, to, new NodeType(attrs, spec));\n    }\n  }]);\n  return Decoration;\n}();\nvar none = [],\n  noSpec = {};\nvar DecorationSet = function () {\n  function DecorationSet(local, children) {\n    _classCallCheck(this, DecorationSet);\n    this.local = local.length ? local : none;\n    this.children = children.length ? children : none;\n  }\n  _createClass(DecorationSet, [{\n    key: \"find\",\n    value: function find(start, end, predicate) {\n      var result = [];\n      this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n      return result;\n    }\n  }, {\n    key: \"findInner\",\n    value: function findInner(start, end, result, offset, predicate) {\n      for (var i = 0; i < this.local.length; i++) {\n        var span = this.local[i];\n        if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec))) result.push(span.copy(span.from + offset, span.to + offset));\n      }\n      for (var _i7 = 0; _i7 < this.children.length; _i7 += 3) {\n        if (this.children[_i7] < end && this.children[_i7 + 1] > start) {\n          var childOff = this.children[_i7] + 1;\n          this.children[_i7 + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n        }\n      }\n    }\n  }, {\n    key: \"map\",\n    value: function map(mapping, doc, options) {\n      if (this == empty || mapping.maps.length == 0) return this;\n      return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n    }\n  }, {\n    key: \"mapInner\",\n    value: function mapInner(mapping, node, offset, oldOffset, options) {\n      var newLocal;\n      for (var i = 0; i < this.local.length; i++) {\n        var mapped = this.local[i].map(mapping, offset, oldOffset);\n        if (mapped && mapped.type.valid(node, mapped)) (newLocal || (newLocal = [])).push(mapped);else if (options.onRemove) options.onRemove(this.local[i].spec);\n      }\n      if (this.children.length) return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);else return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;\n    }\n  }, {\n    key: \"add\",\n    value: function add(doc, decorations) {\n      if (!decorations.length) return this;\n      if (this == empty) return DecorationSet.create(doc, decorations);\n      return this.addInner(doc, decorations, 0);\n    }\n  }, {\n    key: \"addInner\",\n    value: function addInner(doc, decorations, offset) {\n      var _this11 = this;\n      var children,\n        childIndex = 0;\n      doc.forEach(function (childNode, childOffset) {\n        var baseOffset = childOffset + offset,\n          found;\n        if (!(found = takeSpansForNode(decorations, childNode, baseOffset))) return;\n        if (!children) children = _this11.children.slice();\n        while (childIndex < children.length && children[childIndex] < childOffset) childIndex += 3;\n        if (children[childIndex] == childOffset) children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);else children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n        childIndex += 3;\n      });\n      var local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n      for (var i = 0; i < local.length; i++) if (!local[i].type.valid(doc, local[i])) local.splice(i--, 1);\n      return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(decorations) {\n      if (decorations.length == 0 || this == empty) return this;\n      return this.removeInner(decorations, 0);\n    }\n  }, {\n    key: \"removeInner\",\n    value: function removeInner(decorations, offset) {\n      var children = this.children,\n        local = this.local;\n      for (var i = 0; i < children.length; i += 3) {\n        var found = void 0;\n        var from = children[i] + offset,\n          to = children[i + 1] + offset;\n        for (var j = 0, span; j < decorations.length; j++) if (span = decorations[j]) {\n          if (span.from > from && span.to < to) {\n            decorations[j] = null;\n            (found || (found = [])).push(span);\n          }\n        }\n        if (!found) continue;\n        if (children == this.children) children = this.children.slice();\n        var removed = children[i + 2].removeInner(found, from + 1);\n        if (removed != empty) {\n          children[i + 2] = removed;\n        } else {\n          children.splice(i, 3);\n          i -= 3;\n        }\n      }\n      if (local.length) for (var _i8 = 0, _span; _i8 < decorations.length; _i8++) if (_span = decorations[_i8]) {\n        for (var _j2 = 0; _j2 < local.length; _j2++) if (local[_j2].eq(_span, offset)) {\n          if (local == this.local) local = this.local.slice();\n          local.splice(_j2--, 1);\n        }\n      }\n      if (children == this.children && local == this.local) return this;\n      return local.length || children.length ? new DecorationSet(local, children) : empty;\n    }\n  }, {\n    key: \"forChild\",\n    value: function forChild(offset, node) {\n      if (this == empty) return this;\n      if (node.isLeaf) return DecorationSet.empty;\n      var child, local;\n      for (var i = 0; i < this.children.length; i += 3) if (this.children[i] >= offset) {\n        if (this.children[i] == offset) child = this.children[i + 2];\n        break;\n      }\n      var start = offset + 1,\n        end = start + node.content.size;\n      for (var _i9 = 0; _i9 < this.local.length; _i9++) {\n        var dec = this.local[_i9];\n        if (dec.from < end && dec.to > start && dec.type instanceof InlineType) {\n          var from = Math.max(start, dec.from) - start,\n            to = Math.min(end, dec.to) - start;\n          if (from < to) (local || (local = [])).push(dec.copy(from, to));\n        }\n      }\n      if (local) {\n        var localSet = new DecorationSet(local.sort(byPos), none);\n        return child ? new DecorationGroup([localSet, child]) : localSet;\n      }\n      return child || empty;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      if (this == other) return true;\n      if (!(other instanceof DecorationSet) || this.local.length != other.local.length || this.children.length != other.children.length) return false;\n      for (var i = 0; i < this.local.length; i++) if (!this.local[i].eq(other.local[i])) return false;\n      for (var _i10 = 0; _i10 < this.children.length; _i10 += 3) if (this.children[_i10] != other.children[_i10] || this.children[_i10 + 1] != other.children[_i10 + 1] || !this.children[_i10 + 2].eq(other.children[_i10 + 2])) return false;\n      return true;\n    }\n  }, {\n    key: \"locals\",\n    value: function locals(node) {\n      return removeOverlap(this.localsInner(node));\n    }\n  }, {\n    key: \"localsInner\",\n    value: function localsInner(node) {\n      if (this == empty) return none;\n      if (node.inlineContent || !this.local.some(InlineType.is)) return this.local;\n      var result = [];\n      for (var i = 0; i < this.local.length; i++) {\n        if (!(this.local[i].type instanceof InlineType)) result.push(this.local[i]);\n      }\n      return result;\n    }\n  }, {\n    key: \"forEachSet\",\n    value: function forEachSet(f) {\n      f(this);\n    }\n  }], [{\n    key: \"create\",\n    value: function create(doc, decorations) {\n      return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n    }\n  }]);\n  return DecorationSet;\n}();\nDecorationSet.empty = new DecorationSet([], []);\nDecorationSet.removeOverlap = removeOverlap;\nvar empty = DecorationSet.empty;\nvar DecorationGroup = function () {\n  function DecorationGroup(members) {\n    _classCallCheck(this, DecorationGroup);\n    this.members = members;\n  }\n  _createClass(DecorationGroup, [{\n    key: \"map\",\n    value: function map(mapping, doc) {\n      var mappedDecos = this.members.map(function (member) {\n        return member.map(mapping, doc, noSpec);\n      });\n      return DecorationGroup.from(mappedDecos);\n    }\n  }, {\n    key: \"forChild\",\n    value: function forChild(offset, child) {\n      if (child.isLeaf) return DecorationSet.empty;\n      var found = [];\n      for (var i = 0; i < this.members.length; i++) {\n        var result = this.members[i].forChild(offset, child);\n        if (result == empty) continue;\n        if (result instanceof DecorationGroup) found = found.concat(result.members);else found.push(result);\n      }\n      return DecorationGroup.from(found);\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      if (!(other instanceof DecorationGroup) || other.members.length != this.members.length) return false;\n      for (var i = 0; i < this.members.length; i++) if (!this.members[i].eq(other.members[i])) return false;\n      return true;\n    }\n  }, {\n    key: \"locals\",\n    value: function locals(node) {\n      var result,\n        sorted = true;\n      for (var i = 0; i < this.members.length; i++) {\n        var locals = this.members[i].localsInner(node);\n        if (!locals.length) continue;\n        if (!result) {\n          result = locals;\n        } else {\n          if (sorted) {\n            result = result.slice();\n            sorted = false;\n          }\n          for (var j = 0; j < locals.length; j++) result.push(locals[j]);\n        }\n      }\n      return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n    }\n  }, {\n    key: \"forEachSet\",\n    value: function forEachSet(f) {\n      for (var i = 0; i < this.members.length; i++) this.members[i].forEachSet(f);\n    }\n  }], [{\n    key: \"from\",\n    value: function from(members) {\n      switch (members.length) {\n        case 0:\n          return empty;\n        case 1:\n          return members[0];\n        default:\n          return new DecorationGroup(members.every(function (m) {\n            return m instanceof DecorationSet;\n          }) ? members : members.reduce(function (r, m) {\n            return r.concat(m instanceof DecorationSet ? m : m.members);\n          }, []));\n      }\n    }\n  }]);\n  return DecorationGroup;\n}();\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n  var children = oldChildren.slice();\n  var _loop4 = function _loop4(_baseOffset) {\n    var moved = 0;\n    mapping.maps[i].forEach(function (oldStart, oldEnd, newStart, newEnd) {\n      var dSize = newEnd - newStart - (oldEnd - oldStart);\n      for (var _i14 = 0; _i14 < children.length; _i14 += 3) {\n        var end = children[_i14 + 1];\n        if (end < 0 || oldStart > end + _baseOffset - moved) continue;\n        var start = children[_i14] + _baseOffset - moved;\n        if (oldEnd >= start) {\n          children[_i14 + 1] = oldStart <= start ? -2 : -1;\n        } else if (oldStart >= _baseOffset && dSize) {\n          children[_i14] += dSize;\n          children[_i14 + 1] += dSize;\n        }\n      }\n      moved += dSize;\n    });\n    _baseOffset = mapping.maps[i].map(_baseOffset, -1);\n    baseOffset = _baseOffset;\n  };\n  for (var i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {\n    _loop4(baseOffset);\n  }\n  var mustRebuild = false;\n  for (var _i11 = 0; _i11 < children.length; _i11 += 3) if (children[_i11 + 1] < 0) {\n    if (children[_i11 + 1] == -2) {\n      mustRebuild = true;\n      children[_i11 + 1] = -1;\n      continue;\n    }\n    var from = mapping.map(oldChildren[_i11] + oldOffset),\n      fromLocal = from - offset;\n    if (fromLocal < 0 || fromLocal >= node.content.size) {\n      mustRebuild = true;\n      continue;\n    }\n    var to = mapping.map(oldChildren[_i11 + 1] + oldOffset, -1),\n      toLocal = to - offset;\n    var _node$content$findInd2 = node.content.findIndex(fromLocal),\n      index = _node$content$findInd2.index,\n      childOffset = _node$content$findInd2.offset;\n    var childNode = node.maybeChild(index);\n    if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n      var mapped = children[_i11 + 2].mapInner(mapping, childNode, from + 1, oldChildren[_i11] + oldOffset + 1, options);\n      if (mapped != empty) {\n        children[_i11] = fromLocal;\n        children[_i11 + 1] = toLocal;\n        children[_i11 + 2] = mapped;\n      } else {\n        children[_i11 + 1] = -2;\n        mustRebuild = true;\n      }\n    } else {\n      mustRebuild = true;\n    }\n  }\n  if (mustRebuild) {\n    var decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options);\n    var built = buildTree(decorations, node, 0, options);\n    newLocal = built.local;\n    for (var _i12 = 0; _i12 < children.length; _i12 += 3) if (children[_i12 + 1] < 0) {\n      children.splice(_i12, 3);\n      _i12 -= 3;\n    }\n    for (var _i13 = 0, j = 0; _i13 < built.children.length; _i13 += 3) {\n      var _from2 = built.children[_i13];\n      while (j < children.length && children[j] < _from2) j += 3;\n      children.splice(j, 0, built.children[_i13], built.children[_i13 + 1], built.children[_i13 + 2]);\n    }\n  }\n  return new DecorationSet(newLocal.sort(byPos), children);\n}\nfunction moveSpans(spans, offset) {\n  if (!offset || !spans.length) return spans;\n  var result = [];\n  for (var i = 0; i < spans.length; i++) {\n    var span = spans[i];\n    result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n  }\n  return result;\n}\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n  function gather(set, oldOffset) {\n    for (var i = 0; i < set.local.length; i++) {\n      var mapped = set.local[i].map(mapping, offset, oldOffset);\n      if (mapped) decorations.push(mapped);else if (options.onRemove) options.onRemove(set.local[i].spec);\n    }\n    for (var _i15 = 0; _i15 < set.children.length; _i15 += 3) gather(set.children[_i15 + 2], set.children[_i15] + oldOffset + 1);\n  }\n  for (var i = 0; i < children.length; i += 3) if (children[i + 1] == -1) gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n  return decorations;\n}\nfunction takeSpansForNode(spans, node, offset) {\n  if (node.isLeaf) return null;\n  var end = offset + node.nodeSize,\n    found = null;\n  for (var i = 0, span; i < spans.length; i++) {\n    if ((span = spans[i]) && span.from > offset && span.to < end) {\n      (found || (found = [])).push(span);\n      spans[i] = null;\n    }\n  }\n  return found;\n}\nfunction withoutNulls(array) {\n  var result = [];\n  for (var i = 0; i < array.length; i++) if (array[i] != null) result.push(array[i]);\n  return result;\n}\nfunction buildTree(spans, node, offset, options) {\n  var children = [],\n    hasNulls = false;\n  node.forEach(function (childNode, localStart) {\n    var found = takeSpansForNode(spans, childNode, localStart + offset);\n    if (found) {\n      hasNulls = true;\n      var subtree = buildTree(found, childNode, offset + localStart + 1, options);\n      if (subtree != empty) children.push(localStart, localStart + childNode.nodeSize, subtree);\n    }\n  });\n  var locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n  for (var i = 0; i < locals.length; i++) if (!locals[i].type.valid(node, locals[i])) {\n    if (options.onRemove) options.onRemove(locals[i].spec);\n    locals.splice(i--, 1);\n  }\n  return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n}\nfunction byPos(a, b) {\n  return a.from - b.from || a.to - b.to;\n}\nfunction removeOverlap(spans) {\n  var working = spans;\n  for (var i = 0; i < working.length - 1; i++) {\n    var span = working[i];\n    if (span.from != span.to) for (var j = i + 1; j < working.length; j++) {\n      var next = working[j];\n      if (next.from == span.from) {\n        if (next.to != span.to) {\n          if (working == spans) working = spans.slice();\n          working[j] = next.copy(next.from, span.to);\n          insertAhead(working, j + 1, next.copy(span.to, next.to));\n        }\n        continue;\n      } else {\n        if (next.from < span.to) {\n          if (working == spans) working = spans.slice();\n          working[i] = span.copy(span.from, next.from);\n          insertAhead(working, j, span.copy(next.from, span.to));\n        }\n        break;\n      }\n    }\n  }\n  return working;\n}\nfunction insertAhead(array, i, deco) {\n  while (i < array.length && byPos(deco, array[i]) > 0) i++;\n  array.splice(i, 0, deco);\n}\nfunction viewDecorations(view) {\n  var found = [];\n  view.someProp(\"decorations\", function (f) {\n    var result = f(view.state);\n    if (result && result != empty) found.push(result);\n  });\n  if (view.cursorWrapper) found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n  return DecorationGroup.from(found);\n}\nvar observeOptions = {\n  childList: true,\n  characterData: true,\n  characterDataOldValue: true,\n  attributes: true,\n  attributeOldValue: true,\n  subtree: true\n};\nvar useCharData = ie && ie_version <= 11;\nvar SelectionState = function () {\n  function SelectionState() {\n    _classCallCheck(this, SelectionState);\n    this.anchorNode = null;\n    this.anchorOffset = 0;\n    this.focusNode = null;\n    this.focusOffset = 0;\n  }\n  _createClass(SelectionState, [{\n    key: \"set\",\n    value: function set(sel) {\n      this.anchorNode = sel.anchorNode;\n      this.anchorOffset = sel.anchorOffset;\n      this.focusNode = sel.focusNode;\n      this.focusOffset = sel.focusOffset;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.anchorNode = this.focusNode = null;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(sel) {\n      return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset && sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n    }\n  }]);\n  return SelectionState;\n}();\nvar DOMObserver = function () {\n  function DOMObserver(view, handleDOMChange) {\n    var _this12 = this;\n    _classCallCheck(this, DOMObserver);\n    this.view = view;\n    this.handleDOMChange = handleDOMChange;\n    this.queue = [];\n    this.flushingSoon = -1;\n    this.observer = null;\n    this.currentSelection = new SelectionState();\n    this.onCharData = null;\n    this.suppressingSelectionUpdates = false;\n    this.lastChangedTextNode = null;\n    this.observer = window.MutationObserver && new window.MutationObserver(function (mutations) {\n      for (var i = 0; i < mutations.length; i++) _this12.queue.push(mutations[i]);\n      if (ie && ie_version <= 11 && mutations.some(function (m) {\n        return m.type == \"childList\" && m.removedNodes.length || m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length;\n      })) {\n        _this12.flushSoon();\n      } else if (safari && view.composing && mutations.some(function (m) {\n        return m.type == \"childList\" && m.target.nodeName == \"TR\";\n      })) {\n        view.input.badSafariComposition = true;\n        _this12.flushSoon();\n      } else {\n        _this12.flush();\n      }\n    });\n    if (useCharData) {\n      this.onCharData = function (e) {\n        _this12.queue.push({\n          target: e.target,\n          type: \"characterData\",\n          oldValue: e.prevValue\n        });\n        _this12.flushSoon();\n      };\n    }\n    this.onSelectionChange = this.onSelectionChange.bind(this);\n  }\n  _createClass(DOMObserver, [{\n    key: \"flushSoon\",\n    value: function flushSoon() {\n      var _this13 = this;\n      if (this.flushingSoon < 0) this.flushingSoon = window.setTimeout(function () {\n        _this13.flushingSoon = -1;\n        _this13.flush();\n      }, 20);\n    }\n  }, {\n    key: \"forceFlush\",\n    value: function forceFlush() {\n      if (this.flushingSoon > -1) {\n        window.clearTimeout(this.flushingSoon);\n        this.flushingSoon = -1;\n        this.flush();\n      }\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      if (this.observer) {\n        this.observer.takeRecords();\n        this.observer.observe(this.view.dom, observeOptions);\n      }\n      if (this.onCharData) this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n      this.connectSelection();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      var _this14 = this;\n      if (this.observer) {\n        var take = this.observer.takeRecords();\n        if (take.length) {\n          for (var i = 0; i < take.length; i++) this.queue.push(take[i]);\n          window.setTimeout(function () {\n            return _this14.flush();\n          }, 20);\n        }\n        this.observer.disconnect();\n      }\n      if (this.onCharData) this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n      this.disconnectSelection();\n    }\n  }, {\n    key: \"connectSelection\",\n    value: function connectSelection() {\n      this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n  }, {\n    key: \"disconnectSelection\",\n    value: function disconnectSelection() {\n      this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n  }, {\n    key: \"suppressSelectionUpdates\",\n    value: function suppressSelectionUpdates() {\n      var _this15 = this;\n      this.suppressingSelectionUpdates = true;\n      setTimeout(function () {\n        return _this15.suppressingSelectionUpdates = false;\n      }, 50);\n    }\n  }, {\n    key: \"onSelectionChange\",\n    value: function onSelectionChange() {\n      if (!hasFocusAndSelection(this.view)) return;\n      if (this.suppressingSelectionUpdates) return selectionToDOM(this.view);\n      if (ie && ie_version <= 11 && !this.view.state.selection.empty) {\n        var sel = this.view.domSelectionRange();\n        if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset)) return this.flushSoon();\n      }\n      this.flush();\n    }\n  }, {\n    key: \"setCurSelection\",\n    value: function setCurSelection() {\n      this.currentSelection.set(this.view.domSelectionRange());\n    }\n  }, {\n    key: \"ignoreSelectionChange\",\n    value: function ignoreSelectionChange(sel) {\n      if (!sel.focusNode) return true;\n      var ancestors = new Set(),\n        container;\n      for (var scan = sel.focusNode; scan; scan = parentNode(scan)) ancestors.add(scan);\n      for (var _scan = sel.anchorNode; _scan; _scan = parentNode(_scan)) if (ancestors.has(_scan)) {\n        container = _scan;\n        break;\n      }\n      var desc = container && this.view.docView.nearestDesc(container);\n      if (desc && desc.ignoreMutation({\n        type: \"selection\",\n        target: container.nodeType == 3 ? container.parentNode : container\n      })) {\n        this.setCurSelection();\n        return true;\n      }\n    }\n  }, {\n    key: \"pendingRecords\",\n    value: function pendingRecords() {\n      if (this.observer) {\n        var _iterator2 = _createForOfIteratorHelper(this.observer.takeRecords()),\n          _step2;\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var mut = _step2.value;\n            this.queue.push(mut);\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      }\n      return this.queue;\n    }\n  }, {\n    key: \"flush\",\n    value: function flush() {\n      var view = this.view;\n      if (!view.docView || this.flushingSoon > -1) return;\n      var mutations = this.pendingRecords();\n      if (mutations.length) this.queue = [];\n      var sel = view.domSelectionRange();\n      var newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);\n      var from = -1,\n        to = -1,\n        typeOver = false,\n        added = [];\n      if (view.editable) {\n        for (var i = 0; i < mutations.length; i++) {\n          var result = this.registerMutation(mutations[i], added);\n          if (result) {\n            from = from < 0 ? result.from : Math.min(result.from, from);\n            to = to < 0 ? result.to : Math.max(result.to, to);\n            if (result.typeOver) typeOver = true;\n          }\n        }\n      }\n      if (added.some(function (n) {\n        return n.nodeName == \"BR\";\n      }) && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46 || chrome && (view.composing || view.input.compositionEndedAt > Date.now() - 50) && mutations.some(function (m) {\n        return m.type == \"childList\" && m.removedNodes.length;\n      }))) {\n        var _iterator3 = _createForOfIteratorHelper(added),\n          _step3;\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var node = _step3.value;\n            if (node.nodeName == \"BR\" && node.parentNode) {\n              var after = node.nextSibling;\n              while (after && after.nodeType == 1) {\n                if (after.contentEditable == \"false\") {\n                  node.parentNode.removeChild(node);\n                  break;\n                }\n                after = after.firstChild;\n              }\n            }\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n      } else if (gecko && added.length) {\n        var brs = added.filter(function (n) {\n          return n.nodeName == \"BR\";\n        });\n        if (brs.length == 2) {\n          var _brs = _slicedToArray(brs, 2),\n            a = _brs[0],\n            b = _brs[1];\n          if (a.parentNode && a.parentNode.parentNode == b.parentNode) b.remove();else a.remove();\n        } else {\n          var focusNode = this.currentSelection.focusNode;\n          var _iterator4 = _createForOfIteratorHelper(brs),\n            _step4;\n          try {\n            for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n              var br = _step4.value;\n              var parent = br.parentNode;\n              if (parent && parent.nodeName == \"LI\" && (!focusNode || blockParent(view, focusNode) != parent)) br.remove();\n            }\n          } catch (err) {\n            _iterator4.e(err);\n          } finally {\n            _iterator4.f();\n          }\n        }\n      }\n      var readSel = null;\n      if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 && Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 && selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) && readSel.eq(prosemirrorState.Selection.near(view.state.doc.resolve(0), 1))) {\n        view.input.lastFocus = 0;\n        selectionToDOM(view);\n        this.currentSelection.set(sel);\n        view.scrollToSelection();\n      } else if (from > -1 || newSel) {\n        if (from > -1) {\n          view.docView.markDirty(from, to);\n          checkCSS(view);\n        }\n        if (view.input.badSafariComposition) {\n          view.input.badSafariComposition = false;\n          fixUpBadSafariComposition(view, added);\n        }\n        this.handleDOMChange(from, to, typeOver, added);\n        if (view.docView && view.docView.dirty) view.updateState(view.state);else if (!this.currentSelection.eq(sel)) selectionToDOM(view);\n        this.currentSelection.set(sel);\n      }\n    }\n  }, {\n    key: \"registerMutation\",\n    value: function registerMutation(mut, added) {\n      if (added.indexOf(mut.target) > -1) return null;\n      var desc = this.view.docView.nearestDesc(mut.target);\n      if (mut.type == \"attributes\" && (desc == this.view.docView || mut.attributeName == \"contenteditable\" || mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))) return null;\n      if (!desc || desc.ignoreMutation(mut)) return null;\n      if (mut.type == \"childList\") {\n        for (var i = 0; i < mut.addedNodes.length; i++) {\n          var node = mut.addedNodes[i];\n          added.push(node);\n          if (node.nodeType == 3) this.lastChangedTextNode = node;\n        }\n        if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target)) return {\n          from: desc.posBefore,\n          to: desc.posAfter\n        };\n        var prev = mut.previousSibling,\n          next = mut.nextSibling;\n        if (ie && ie_version <= 11 && mut.addedNodes.length) {\n          for (var _i16 = 0; _i16 < mut.addedNodes.length; _i16++) {\n            var _mut$addedNodes$_i = mut.addedNodes[_i16],\n              previousSibling = _mut$addedNodes$_i.previousSibling,\n              nextSibling = _mut$addedNodes$_i.nextSibling;\n            if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0) prev = previousSibling;\n            if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0) next = nextSibling;\n          }\n        }\n        var fromOffset = prev && prev.parentNode == mut.target ? domIndex(prev) + 1 : 0;\n        var from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n        var toOffset = next && next.parentNode == mut.target ? domIndex(next) : mut.target.childNodes.length;\n        var to = desc.localPosFromDOM(mut.target, toOffset, 1);\n        return {\n          from: from,\n          to: to\n        };\n      } else if (mut.type == \"attributes\") {\n        return {\n          from: desc.posAtStart - desc.border,\n          to: desc.posAtEnd + desc.border\n        };\n      } else {\n        this.lastChangedTextNode = mut.target;\n        return {\n          from: desc.posAtStart,\n          to: desc.posAtEnd,\n          typeOver: mut.target.nodeValue == mut.oldValue\n        };\n      }\n    }\n  }]);\n  return DOMObserver;\n}();\nvar cssChecked = new WeakMap();\nvar cssCheckWarned = false;\nfunction checkCSS(view) {\n  if (cssChecked.has(view)) return;\n  cssChecked.set(view, null);\n  if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {\n    view.requiresGeckoHackNode = gecko;\n    if (cssCheckWarned) return;\n    console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\");\n    cssCheckWarned = true;\n  }\n}\nfunction rangeToSelectionRange(view, range) {\n  var anchorNode = range.startContainer,\n    anchorOffset = range.startOffset;\n  var focusNode = range.endContainer,\n    focusOffset = range.endOffset;\n  var currentAnchor = view.domAtPos(view.state.selection.anchor);\n  if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset)) {\n    var _ref7 = [focusNode, focusOffset, anchorNode, anchorOffset];\n    anchorNode = _ref7[0];\n    anchorOffset = _ref7[1];\n    focusNode = _ref7[2];\n    focusOffset = _ref7[3];\n  }\n  return {\n    anchorNode: anchorNode,\n    anchorOffset: anchorOffset,\n    focusNode: focusNode,\n    focusOffset: focusOffset\n  };\n}\nfunction safariShadowSelectionRange(view, selection) {\n  if (selection.getComposedRanges) {\n    var range = selection.getComposedRanges(view.root)[0];\n    if (range) return rangeToSelectionRange(view, range);\n  }\n  var found;\n  function read(event) {\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    found = event.getTargetRanges()[0];\n  }\n  view.dom.addEventListener(\"beforeinput\", read, true);\n  document.execCommand(\"indent\");\n  view.dom.removeEventListener(\"beforeinput\", read, true);\n  return found ? rangeToSelectionRange(view, found) : null;\n}\nfunction blockParent(view, node) {\n  for (var p = node.parentNode; p && p != view.dom; p = p.parentNode) {\n    var desc = view.docView.nearestDesc(p, true);\n    if (desc && desc.node.isBlock) return p;\n  }\n  return null;\n}\nfunction fixUpBadSafariComposition(view, addedNodes) {\n  var _a;\n  var _view$domSelectionRan5 = view.domSelectionRange(),\n    focusNode = _view$domSelectionRan5.focusNode,\n    focusOffset = _view$domSelectionRan5.focusOffset;\n  var _iterator5 = _createForOfIteratorHelper(addedNodes),\n    _step5;\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var node = _step5.value;\n      if (((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName) == \"TR\") {\n        var nextCell = node.nextSibling;\n        while (nextCell && nextCell.nodeName != \"TD\" && nextCell.nodeName != \"TH\") nextCell = nextCell.nextSibling;\n        if (nextCell) {\n          var parent = nextCell;\n          for (;;) {\n            var first = parent.firstChild;\n            if (!first || first.nodeType != 1 || first.contentEditable == \"false\" || /^(BR|IMG)$/.test(first.nodeName)) break;\n            parent = first;\n          }\n          parent.insertBefore(node, parent.firstChild);\n          if (focusNode == node) view.domSelection().collapse(node, focusOffset);\n        } else {\n          node.parentNode.removeChild(node);\n        }\n      }\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n}\nfunction parseBetween(view, from_, to_, addedNodes) {\n  var _view$docView$parseRa = view.docView.parseRange(from_, to_),\n    parent = _view$docView$parseRa.node,\n    fromOffset = _view$docView$parseRa.fromOffset,\n    toOffset = _view$docView$parseRa.toOffset,\n    from = _view$docView$parseRa.from,\n    to = _view$docView$parseRa.to;\n  var domSel = view.domSelectionRange();\n  var find;\n  var anchor = domSel.anchorNode;\n  if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n    find = [{\n      node: anchor,\n      offset: domSel.anchorOffset\n    }];\n    if (!selectionCollapsed(domSel)) find.push({\n      node: domSel.focusNode,\n      offset: domSel.focusOffset\n    });\n  }\n  if (chrome && view.input.lastKeyCode === 8) {\n    for (var off = toOffset; off > fromOffset; off--) {\n      var node = parent.childNodes[off - 1],\n        desc = node.pmViewDesc;\n      if (node.nodeName == \"BR\" && !desc) {\n        toOffset = off;\n        break;\n      }\n      if (!desc || desc.size) break;\n    }\n  }\n  var startDoc = view.state.doc;\n  var parser = view.someProp(\"domParser\") || prosemirrorModel.DOMParser.fromSchema(view.state.schema);\n  var $from = startDoc.resolve(from);\n  var sel = null,\n    doc = parser.parse(parent, {\n      topNode: $from.parent,\n      topMatch: $from.parent.contentMatchAt($from.index()),\n      topOpen: true,\n      from: fromOffset,\n      to: toOffset,\n      preserveWhitespace: $from.parent.type.whitespace == \"pre\" ? \"full\" : true,\n      findPositions: find,\n      ruleFromNode: ruleFromNode(addedNodes),\n      context: $from\n    });\n  if (find && find[0].pos != null) {\n    var _anchor = find[0].pos,\n      head = find[1] && find[1].pos;\n    if (head == null) head = _anchor;\n    sel = {\n      anchor: _anchor + from,\n      head: head + from\n    };\n  }\n  return {\n    doc: doc,\n    sel: sel,\n    from: from,\n    to: to\n  };\n}\nvar ruleFromNode = function ruleFromNode(added) {\n  return function (dom) {\n    var desc = dom.pmViewDesc;\n    if (desc) {\n      return desc.parseRule(added);\n    } else if (dom.nodeName == \"BR\" && dom.parentNode) {\n      if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n        var skip = document.createElement(\"div\");\n        skip.appendChild(document.createElement(\"li\"));\n        return {\n          skip: skip\n        };\n      } else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n        return {\n          ignore: true\n        };\n      }\n    } else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n      return {\n        ignore: true\n      };\n    }\n    return null;\n  };\n};\nvar isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n  var compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);\n  view.input.compositionPendingChanges = 0;\n  if (from < 0) {\n    var origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;\n    var newSel = selectionFromDOM(view, origin);\n    if (newSel && !view.state.selection.eq(newSel)) {\n      if (chrome && android && view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime && view.someProp(\"handleKeyDown\", function (f) {\n        return f(view, keyEvent(13, \"Enter\"));\n      })) return;\n      var tr = view.state.tr.setSelection(newSel);\n      if (origin == \"pointer\") tr.setMeta(\"pointer\", true);else if (origin == \"key\") tr.scrollIntoView();\n      if (compositionID) tr.setMeta(\"composition\", compositionID);\n      view.dispatch(tr);\n    }\n    return;\n  }\n  var $before = view.state.doc.resolve(from);\n  var shared = $before.sharedDepth(to);\n  from = $before.before(shared + 1);\n  to = view.state.doc.resolve(to).after(shared + 1);\n  var sel = view.state.selection;\n  var parse = parseBetween(view, from, to, addedNodes);\n  var doc = view.state.doc,\n    compare = doc.slice(parse.from, parse.to);\n  var preferredPos, preferredSide;\n  if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {\n    preferredPos = view.state.selection.to;\n    preferredSide = \"end\";\n  } else {\n    preferredPos = view.state.selection.from;\n    preferredSide = \"start\";\n  }\n  view.input.lastKeyCode = null;\n  var change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n  if (change) view.input.domChangeCount++;\n  if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) && addedNodes.some(function (n) {\n    return n.nodeType == 1 && !isInline.test(n.nodeName);\n  }) && (!change || change.endA >= change.endB) && view.someProp(\"handleKeyDown\", function (f) {\n    return f(view, keyEvent(13, \"Enter\"));\n  })) {\n    view.input.lastIOSEnter = 0;\n    return;\n  }\n  if (!change) {\n    if (typeOver && sel instanceof prosemirrorState.TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) && !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n      change = {\n        start: sel.from,\n        endA: sel.to,\n        endB: sel.to\n      };\n    } else {\n      if (parse.sel) {\n        var _sel2 = resolveSelection(view, view.state.doc, parse.sel);\n        if (_sel2 && !_sel2.eq(view.state.selection)) {\n          var _tr = view.state.tr.setSelection(_sel2);\n          if (compositionID) _tr.setMeta(\"composition\", compositionID);\n          view.dispatch(_tr);\n        }\n      }\n      return;\n    }\n  }\n  if (view.state.selection.from < view.state.selection.to && change.start == change.endB && view.state.selection instanceof prosemirrorState.TextSelection) {\n    if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 && view.state.selection.from >= parse.from) {\n      change.start = view.state.selection.from;\n    } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 && view.state.selection.to <= parse.to) {\n      change.endB += view.state.selection.to - change.endA;\n      change.endA = view.state.selection.to;\n    }\n  }\n  if (ie && ie_version <= 11 && change.endB == change.start + 1 && change.endA == change.start && change.start > parse.from && parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\xA0\") {\n    change.start--;\n    change.endA--;\n    change.endB--;\n  }\n  var $from = parse.doc.resolveNoCache(change.start - parse.from);\n  var $to = parse.doc.resolveNoCache(change.endB - parse.from);\n  var $fromA = doc.resolve(change.start);\n  var inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;\n  if ((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some(function (n) {\n    return n.nodeName == \"DIV\" || n.nodeName == \"P\";\n  })) || !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && $from.pos < $to.pos && !/\\S/.test(parse.doc.textBetween($from.pos, $to.pos, \"\", \"\"))) && view.someProp(\"handleKeyDown\", function (f) {\n    return f(view, keyEvent(13, \"Enter\"));\n  })) {\n    view.input.lastIOSEnter = 0;\n    return;\n  }\n  if (view.state.selection.anchor > change.start && looksLikeBackspace(doc, change.start, change.endA, $from, $to) && view.someProp(\"handleKeyDown\", function (f) {\n    return f(view, keyEvent(8, \"Backspace\"));\n  })) {\n    if (android && chrome) view.domObserver.suppressSelectionUpdates();\n    return;\n  }\n  if (chrome && change.endB == change.start) view.input.lastChromeDelete = Date.now();\n  if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth && parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n    change.endB -= 2;\n    $to = parse.doc.resolveNoCache(change.endB - parse.from);\n    setTimeout(function () {\n      view.someProp(\"handleKeyDown\", function (f) {\n        return f(view, keyEvent(13, \"Enter\"));\n      });\n    }, 20);\n  }\n  var chFrom = change.start,\n    chTo = change.endA;\n  var mkTr = function mkTr(base) {\n    var tr = base || view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n    if (parse.sel) {\n      var _sel3 = resolveSelection(view, tr.doc, parse.sel);\n      if (_sel3 && !(chrome && view.composing && _sel3.empty && (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) && (_sel3.head == chFrom || _sel3.head == tr.mapping.map(chTo) - 1) || ie && _sel3.empty && _sel3.head == chFrom)) tr.setSelection(_sel3);\n    }\n    if (compositionID) tr.setMeta(\"composition\", compositionID);\n    return tr.scrollIntoView();\n  };\n  var markChange;\n  if (inlineChange) {\n    if ($from.pos == $to.pos) {\n      if (ie && ie_version <= 11 && $from.parentOffset == 0) {\n        view.domObserver.suppressSelectionUpdates();\n        setTimeout(function () {\n          return selectionToDOM(view);\n        }, 20);\n      }\n      var _tr2 = mkTr(view.state.tr[\"delete\"](chFrom, chTo));\n      var marks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n      if (marks) _tr2.ensureMarks(marks);\n      view.dispatch(_tr2);\n    } else if (change.endA == change.endB && (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {\n      var _tr3 = mkTr(view.state.tr);\n      if (markChange.type == \"add\") _tr3.addMark(chFrom, chTo, markChange.mark);else _tr3.removeMark(chFrom, chTo, markChange.mark);\n      view.dispatch(_tr3);\n    } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n      var text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n      var deflt = function deflt() {\n        return mkTr(view.state.tr.insertText(text, chFrom, chTo));\n      };\n      if (!view.someProp(\"handleTextInput\", function (f) {\n        return f(view, chFrom, chTo, text, deflt);\n      })) view.dispatch(deflt());\n    } else {\n      view.dispatch(mkTr());\n    }\n  } else {\n    view.dispatch(mkTr());\n  }\n}\nfunction resolveSelection(view, doc, parsedSel) {\n  if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size) return null;\n  return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n}\nfunction isMarkChange(cur, prev) {\n  var curMarks = cur.firstChild.marks,\n    prevMarks = prev.firstChild.marks;\n  var added = curMarks,\n    removed = prevMarks,\n    type,\n    mark,\n    update;\n  for (var i = 0; i < prevMarks.length; i++) added = prevMarks[i].removeFromSet(added);\n  for (var _i17 = 0; _i17 < curMarks.length; _i17++) removed = curMarks[_i17].removeFromSet(removed);\n  if (added.length == 1 && removed.length == 0) {\n    mark = added[0];\n    type = \"add\";\n    update = function update(node) {\n      return node.mark(mark.addToSet(node.marks));\n    };\n  } else if (added.length == 0 && removed.length == 1) {\n    mark = removed[0];\n    type = \"remove\";\n    update = function update(node) {\n      return node.mark(mark.removeFromSet(node.marks));\n    };\n  } else {\n    return null;\n  }\n  var updated = [];\n  for (var _i18 = 0; _i18 < prev.childCount; _i18++) updated.push(update(prev.child(_i18)));\n  if (prosemirrorModel.Fragment.from(updated).eq(cur)) return {\n    mark: mark,\n    type: type\n  };\n}\nfunction looksLikeBackspace(old, start, end, $newStart, $newEnd) {\n  if (end - start <= $newEnd.pos - $newStart.pos || skipClosingAndOpening($newStart, true, false) < $newEnd.pos) return false;\n  var $start = old.resolve(start);\n  if (!$newStart.parent.isTextblock) {\n    var after = $start.nodeAfter;\n    return after != null && end == start + after.nodeSize;\n  }\n  if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock) return false;\n  var $next = old.resolve(skipClosingAndOpening($start, true, true));\n  if (!$next.parent.isTextblock || $next.pos > end || skipClosingAndOpening($next, true, false) < end) return false;\n  return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n  var depth = $pos.depth,\n    end = fromEnd ? $pos.end() : $pos.pos;\n  while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n    depth--;\n    end++;\n    fromEnd = false;\n  }\n  if (mayOpen) {\n    var next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n    while (next && !next.isLeaf) {\n      next = next.firstChild;\n      end++;\n    }\n  }\n  return end;\n}\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n  var start = a.findDiffStart(b, pos),\n    lenA = pos + a.size,\n    lenB = pos + b.size;\n  if (start == null) return null;\n  var _a$findDiffEnd = a.findDiffEnd(b, lenA, lenB),\n    endA = _a$findDiffEnd.a,\n    endB = _a$findDiffEnd.b;\n  if (preferredSide == \"end\") {\n    var adjust = Math.max(0, start - Math.min(endA, endB));\n    preferredPos -= endA + adjust - start;\n  }\n  if (endA < start && lenA < lenB) {\n    var move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n    start -= move;\n    endB = start + (endB - endA);\n    endA = start;\n  } else if (endB < start) {\n    var _move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n    start -= _move;\n    endA = start + (endA - endB);\n    endB = start;\n  }\n  return {\n    start: start,\n    endA: endA,\n    endB: endB\n  };\n}\nvar __parseFromClipboard = parseFromClipboard;\nvar __endComposition = endComposition;\nvar EditorView = function () {\n  function EditorView(place, props) {\n    var _this16 = this;\n    _classCallCheck(this, EditorView);\n    this._root = null;\n    this.focused = false;\n    this.trackWrites = null;\n    this.mounted = false;\n    this.markCursor = null;\n    this.cursorWrapper = null;\n    this.lastSelectedViewDesc = undefined;\n    this.input = new InputState();\n    this.prevDirectPlugins = [];\n    this.pluginViews = [];\n    this.requiresGeckoHackNode = false;\n    this.dragging = null;\n    this._props = props;\n    this.state = props.state;\n    this.directPlugins = props.plugins || [];\n    this.directPlugins.forEach(checkStateComponent);\n    this.dispatch = this.dispatch.bind(this);\n    this.dom = place && place.mount || document.createElement(\"div\");\n    if (place) {\n      if (place.appendChild) place.appendChild(this.dom);else if (typeof place == \"function\") place(this.dom);else if (place.mount) this.mounted = true;\n    }\n    this.editable = getEditable(this);\n    updateCursorWrapper(this);\n    this.nodeViews = buildNodeViews(this);\n    this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n    this.domObserver = new DOMObserver(this, function (from, to, typeOver, added) {\n      return readDOMChange(_this16, from, to, typeOver, added);\n    });\n    this.domObserver.start();\n    initInput(this);\n    this.updatePluginViews();\n  }\n  _createClass(EditorView, [{\n    key: \"composing\",\n    get: function get() {\n      return this.input.composing;\n    }\n  }, {\n    key: \"props\",\n    get: function get() {\n      if (this._props.state != this.state) {\n        var prev = this._props;\n        this._props = {};\n        for (var name in prev) this._props[name] = prev[name];\n        this._props.state = this.state;\n      }\n      return this._props;\n    }\n  }, {\n    key: \"update\",\n    value: function update(props) {\n      if (props.handleDOMEvents != this._props.handleDOMEvents) ensureListeners(this);\n      var prevProps = this._props;\n      this._props = props;\n      if (props.plugins) {\n        props.plugins.forEach(checkStateComponent);\n        this.directPlugins = props.plugins;\n      }\n      this.updateStateInner(props.state, prevProps);\n    }\n  }, {\n    key: \"setProps\",\n    value: function setProps(props) {\n      var updated = {};\n      for (var name in this._props) updated[name] = this._props[name];\n      updated.state = this.state;\n      for (var _name2 in props) updated[_name2] = props[_name2];\n      this.update(updated);\n    }\n  }, {\n    key: \"updateState\",\n    value: function updateState(state) {\n      this.updateStateInner(state, this._props);\n    }\n  }, {\n    key: \"updateStateInner\",\n    value: function updateStateInner(state, prevProps) {\n      var _a;\n      var prev = this.state,\n        redraw = false,\n        updateSel = false;\n      if (state.storedMarks && this.composing) {\n        clearComposition(this);\n        updateSel = true;\n      }\n      this.state = state;\n      var pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;\n      if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {\n        var nodeViews = buildNodeViews(this);\n        if (changedNodeViews(nodeViews, this.nodeViews)) {\n          this.nodeViews = nodeViews;\n          redraw = true;\n        }\n      }\n      if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {\n        ensureListeners(this);\n      }\n      this.editable = getEditable(this);\n      updateCursorWrapper(this);\n      var innerDeco = viewDecorations(this),\n        outerDeco = computeDocDeco(this);\n      var scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? \"reset\" : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n      var updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n      if (updateDoc || !state.selection.eq(prev.selection)) updateSel = true;\n      var oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n      if (updateSel) {\n        this.domObserver.stop();\n        var forceSelUpdate = updateDoc && (ie || chrome) && !this.composing && !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n        if (updateDoc) {\n          var chromeKludge = chrome ? this.trackWrites = this.domSelectionRange().focusNode : null;\n          if (this.composing) this.input.compositionNode = findCompositionNode(this);\n          if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n            this.docView.updateOuterDeco(outerDeco);\n            this.docView.destroy();\n            this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n          }\n          if (chromeKludge && (!this.trackWrites || !this.dom.contains(this.trackWrites))) forceSelUpdate = true;\n        }\n        var mouseDown = this.input.mouseDown;\n        if (forceSelUpdate || !(mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) && anchorInRightPlace(this) && mouseDown.delaySelUpdate())) {\n          selectionToDOM(this, forceSelUpdate);\n        } else {\n          syncNodeSelection(this, state.selection);\n          this.domObserver.setCurSelection();\n        }\n        this.domObserver.start();\n      }\n      this.updatePluginViews(prev);\n      if (((_a = this.dragging) === null || _a === void 0 ? void 0 : _a.node) && !prev.doc.eq(state.doc)) this.updateDraggedNode(this.dragging, prev);\n      if (scroll == \"reset\") {\n        this.dom.scrollTop = 0;\n      } else if (scroll == \"to selection\") {\n        this.scrollToSelection();\n      } else if (oldScrollPos) {\n        resetScrollPos(oldScrollPos);\n      }\n    }\n  }, {\n    key: \"scrollToSelection\",\n    value: function scrollToSelection() {\n      var _this17 = this;\n      var startDOM = this.domSelectionRange().focusNode;\n      if (!startDOM || !this.dom.contains(startDOM.nodeType == 1 ? startDOM : startDOM.parentNode)) ;else if (this.someProp(\"handleScrollToSelection\", function (f) {\n        return f(_this17);\n      })) ;else if (this.state.selection instanceof prosemirrorState.NodeSelection) {\n        var target = this.docView.domAfterPos(this.state.selection.from);\n        if (target.nodeType == 1) scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);\n      } else {\n        scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);\n      }\n    }\n  }, {\n    key: \"destroyPluginViews\",\n    value: function destroyPluginViews() {\n      var view;\n      while (view = this.pluginViews.pop()) if (view.destroy) view.destroy();\n    }\n  }, {\n    key: \"updatePluginViews\",\n    value: function updatePluginViews(prevState) {\n      if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n        this.prevDirectPlugins = this.directPlugins;\n        this.destroyPluginViews();\n        for (var i = 0; i < this.directPlugins.length; i++) {\n          var plugin = this.directPlugins[i];\n          if (plugin.spec.view) this.pluginViews.push(plugin.spec.view(this));\n        }\n        for (var _i19 = 0; _i19 < this.state.plugins.length; _i19++) {\n          var _plugin = this.state.plugins[_i19];\n          if (_plugin.spec.view) this.pluginViews.push(_plugin.spec.view(this));\n        }\n      } else {\n        for (var _i20 = 0; _i20 < this.pluginViews.length; _i20++) {\n          var pluginView = this.pluginViews[_i20];\n          if (pluginView.update) pluginView.update(this, prevState);\n        }\n      }\n    }\n  }, {\n    key: \"updateDraggedNode\",\n    value: function updateDraggedNode(dragging, prev) {\n      var sel = dragging.node,\n        found = -1;\n      if (sel.from < this.state.doc.content.size && this.state.doc.nodeAt(sel.from) == sel.node) {\n        found = sel.from;\n      } else {\n        var movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);\n        var moved = movedPos > 0 && movedPos < this.state.doc.content.size && this.state.doc.nodeAt(movedPos);\n        if (moved == sel.node) found = movedPos;\n      }\n      this.dragging = new Dragging(dragging.slice, dragging.move, found < 0 ? undefined : prosemirrorState.NodeSelection.create(this.state.doc, found));\n    }\n  }, {\n    key: \"someProp\",\n    value: function someProp(propName, f) {\n      var prop = this._props && this._props[propName],\n        value;\n      if (prop != null && (value = f ? f(prop) : prop)) return value;\n      for (var i = 0; i < this.directPlugins.length; i++) {\n        var _prop = this.directPlugins[i].props[propName];\n        if (_prop != null && (value = f ? f(_prop) : _prop)) return value;\n      }\n      var plugins = this.state.plugins;\n      if (plugins) for (var _i21 = 0; _i21 < plugins.length; _i21++) {\n        var _prop2 = plugins[_i21].props[propName];\n        if (_prop2 != null && (value = f ? f(_prop2) : _prop2)) return value;\n      }\n    }\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      if (ie) {\n        var node = this.root.activeElement;\n        if (node == this.dom) return true;\n        if (!node || !this.dom.contains(node)) return false;\n        while (node && this.dom != node && this.dom.contains(node)) {\n          if (node.contentEditable == 'false') return false;\n          node = node.parentElement;\n        }\n        return true;\n      }\n      return this.root.activeElement == this.dom;\n    }\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.domObserver.stop();\n      if (this.editable) focusPreventScroll(this.dom);\n      selectionToDOM(this);\n      this.domObserver.start();\n    }\n  }, {\n    key: \"root\",\n    get: function get() {\n      var _this18 = this;\n      var cached = this._root;\n      if (cached == null) {\n        var _loop5 = function _loop5(search) {\n            if (search.nodeType == 9 || search.nodeType == 11 && search.host) {\n              if (!search.getSelection) Object.getPrototypeOf(search).getSelection = function () {\n                return search.ownerDocument.getSelection();\n              };\n              return {\n                v: _this18._root = search\n              };\n            }\n          },\n          _ret3;\n        for (var search = this.dom.parentNode; search; search = search.parentNode) {\n          _ret3 = _loop5(search);\n          if (_ret3) return _ret3.v;\n        }\n      }\n      return cached || document;\n    }\n  }, {\n    key: \"updateRoot\",\n    value: function updateRoot() {\n      this._root = null;\n    }\n  }, {\n    key: \"posAtCoords\",\n    value: function posAtCoords(coords) {\n      return _posAtCoords(this, coords);\n    }\n  }, {\n    key: \"coordsAtPos\",\n    value: function coordsAtPos(pos) {\n      var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return _coordsAtPos(this, pos, side);\n    }\n  }, {\n    key: \"domAtPos\",\n    value: function domAtPos(pos) {\n      var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      return this.docView.domFromPos(pos, side);\n    }\n  }, {\n    key: \"nodeDOM\",\n    value: function nodeDOM(pos) {\n      var desc = this.docView.descAt(pos);\n      return desc ? desc.nodeDOM : null;\n    }\n  }, {\n    key: \"posAtDOM\",\n    value: function posAtDOM(node, offset) {\n      var bias = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;\n      var pos = this.docView.posFromDOM(node, offset, bias);\n      if (pos == null) throw new RangeError(\"DOM position not inside the editor\");\n      return pos;\n    }\n  }, {\n    key: \"endOfTextblock\",\n    value: function endOfTextblock(dir, state) {\n      return _endOfTextblock(this, state || this.state, dir);\n    }\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(html, event) {\n      return doPaste(this, \"\", html, false, event || new ClipboardEvent(\"paste\"));\n    }\n  }, {\n    key: \"pasteText\",\n    value: function pasteText(text, event) {\n      return doPaste(this, text, null, true, event || new ClipboardEvent(\"paste\"));\n    }\n  }, {\n    key: \"serializeForClipboard\",\n    value: function serializeForClipboard(slice) {\n      return _serializeForClipboard(this, slice);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (!this.docView) return;\n      destroyInput(this);\n      this.destroyPluginViews();\n      if (this.mounted) {\n        this.docView.update(this.state.doc, [], viewDecorations(this), this);\n        this.dom.textContent = \"\";\n      } else if (this.dom.parentNode) {\n        this.dom.parentNode.removeChild(this.dom);\n      }\n      this.docView.destroy();\n      this.docView = null;\n      clearReusedRange();\n    }\n  }, {\n    key: \"isDestroyed\",\n    get: function get() {\n      return this.docView == null;\n    }\n  }, {\n    key: \"dispatchEvent\",\n    value: function dispatchEvent(event) {\n      return _dispatchEvent(this, event);\n    }\n  }, {\n    key: \"domSelectionRange\",\n    value: function domSelectionRange() {\n      var sel = this.domSelection();\n      if (!sel) return {\n        focusNode: null,\n        focusOffset: 0,\n        anchorNode: null,\n        anchorOffset: 0\n      };\n      return safari && this.root.nodeType === 11 && deepActiveElement(this.dom.ownerDocument) == this.dom && safariShadowSelectionRange(this, sel) || sel;\n    }\n  }, {\n    key: \"domSelection\",\n    value: function domSelection() {\n      return this.root.getSelection();\n    }\n  }]);\n  return EditorView;\n}();\nEditorView.prototype.dispatch = function (tr) {\n  var dispatchTransaction = this._props.dispatchTransaction;\n  if (dispatchTransaction) dispatchTransaction.call(this, tr);else this.updateState(this.state.apply(tr));\n};\nfunction computeDocDeco(view) {\n  var attrs = Object.create(null);\n  attrs[\"class\"] = \"ProseMirror\";\n  attrs.contenteditable = String(view.editable);\n  view.someProp(\"attributes\", function (value) {\n    if (typeof value == \"function\") value = value(view.state);\n    if (value) for (var attr in value) {\n      if (attr == \"class\") attrs[\"class\"] += \" \" + value[attr];else if (attr == \"style\") attrs.style = (attrs.style ? attrs.style + \";\" : \"\") + value[attr];else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\") attrs[attr] = String(value[attr]);\n    }\n  });\n  if (!attrs.translate) attrs.translate = \"no\";\n  return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\nfunction updateCursorWrapper(view) {\n  if (view.markCursor) {\n    var dom = document.createElement(\"img\");\n    dom.className = \"ProseMirror-separator\";\n    dom.setAttribute(\"mark-placeholder\", \"true\");\n    dom.setAttribute(\"alt\", \"\");\n    view.cursorWrapper = {\n      dom: dom,\n      deco: Decoration.widget(view.state.selection.from, dom, {\n        raw: true,\n        marks: view.markCursor\n      })\n    };\n  } else {\n    view.cursorWrapper = null;\n  }\n}\nfunction getEditable(view) {\n  return !view.someProp(\"editable\", function (value) {\n    return value(view.state) === false;\n  });\n}\nfunction selectionContextChanged(sel1, sel2) {\n  var depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n  return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\nfunction buildNodeViews(view) {\n  var result = Object.create(null);\n  function add(obj) {\n    for (var _prop3 in obj) if (!Object.prototype.hasOwnProperty.call(result, _prop3)) result[_prop3] = obj[_prop3];\n  }\n  view.someProp(\"nodeViews\", add);\n  view.someProp(\"markViews\", add);\n  return result;\n}\nfunction changedNodeViews(a, b) {\n  var nA = 0,\n    nB = 0;\n  for (var _prop4 in a) {\n    if (a[_prop4] != b[_prop4]) return true;\n    nA++;\n  }\n  for (var _ in b) nB++;\n  return nA != nB;\n}\nfunction checkStateComponent(plugin) {\n  if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction) throw new RangeError(\"Plugins passed directly to the view must not have a state component\");\n}\nexports.Decoration = Decoration;\nexports.DecorationSet = DecorationSet;\nexports.EditorView = EditorView;\nexports.__endComposition = __endComposition;\nexports.__parseFromClipboard = __parseFromClipboard;\n","'use strict';\n\nvar GOOD_LEAF_SIZE = 200;\n\n// :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n  if (!other.length) { return this }\n  other = RopeSequence.from(other);\n\n  return (!this.length && other) ||\n    (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n    (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n    this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n  if (!other.length) { return this }\n  return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n  return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n    if ( from === void 0 ) from = 0;\n    if ( to === void 0 ) to = this.length;\n\n  if (from >= to) { return RopeSequence.empty }\n  return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n  if (i < 0 || i >= this.length) { return undefined }\n  return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n    if ( from === void 0 ) from = 0;\n    if ( to === void 0 ) to = this.length;\n\n  if (from <= to)\n    { this.forEachInner(f, from, to, 0); }\n  else\n    { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n    if ( from === void 0 ) from = 0;\n    if ( to === void 0 ) to = this.length;\n\n  var result = [];\n  this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n  return result\n};\n\n// :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n  if (values instanceof RopeSequence) { return values }\n  return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n  function Leaf(values) {\n    RopeSequence.call(this);\n    this.values = values;\n  }\n\n  if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n  Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n  Leaf.prototype.constructor = Leaf;\n\n  var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n  Leaf.prototype.flatten = function flatten () {\n    return this.values\n  };\n\n  Leaf.prototype.sliceInner = function sliceInner (from, to) {\n    if (from == 0 && to == this.length) { return this }\n    return new Leaf(this.values.slice(from, to))\n  };\n\n  Leaf.prototype.getInner = function getInner (i) {\n    return this.values[i]\n  };\n\n  Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n    for (var i = from; i < to; i++)\n      { if (f(this.values[i], start + i) === false) { return false } }\n  };\n\n  Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n    for (var i = from - 1; i >= to; i--)\n      { if (f(this.values[i], start + i) === false) { return false } }\n  };\n\n  Leaf.prototype.leafAppend = function leafAppend (other) {\n    if (this.length + other.length <= GOOD_LEAF_SIZE)\n      { return new Leaf(this.values.concat(other.flatten())) }\n  };\n\n  Leaf.prototype.leafPrepend = function leafPrepend (other) {\n    if (this.length + other.length <= GOOD_LEAF_SIZE)\n      { return new Leaf(other.flatten().concat(this.values)) }\n  };\n\n  prototypeAccessors.length.get = function () { return this.values.length };\n\n  prototypeAccessors.depth.get = function () { return 0 };\n\n  Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n  return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n  function Append(left, right) {\n    RopeSequence.call(this);\n    this.left = left;\n    this.right = right;\n    this.length = left.length + right.length;\n    this.depth = Math.max(left.depth, right.depth) + 1;\n  }\n\n  if ( RopeSequence ) Append.__proto__ = RopeSequence;\n  Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n  Append.prototype.constructor = Append;\n\n  Append.prototype.flatten = function flatten () {\n    return this.left.flatten().concat(this.right.flatten())\n  };\n\n  Append.prototype.getInner = function getInner (i) {\n    return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n  };\n\n  Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n    var leftLen = this.left.length;\n    if (from < leftLen &&\n        this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n      { return false }\n    if (to > leftLen &&\n        this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n      { return false }\n  };\n\n  Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n    var leftLen = this.left.length;\n    if (from > leftLen &&\n        this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n      { return false }\n    if (to < leftLen &&\n        this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n      { return false }\n  };\n\n  Append.prototype.sliceInner = function sliceInner (from, to) {\n    if (from == 0 && to == this.length) { return this }\n    var leftLen = this.left.length;\n    if (to <= leftLen) { return this.left.slice(from, to) }\n    if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n    return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n  };\n\n  Append.prototype.leafAppend = function leafAppend (other) {\n    var inner = this.right.leafAppend(other);\n    if (inner) { return new Append(this.left, inner) }\n  };\n\n  Append.prototype.leafPrepend = function leafPrepend (other) {\n    var inner = this.left.leafPrepend(other);\n    if (inner) { return new Append(inner, this.right) }\n  };\n\n  Append.prototype.appendInner = function appendInner (other) {\n    if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n      { return new Append(this.left, new Append(this.right, other)) }\n    return new Append(this, other)\n  };\n\n  return Append;\n}(RopeSequence));\n\nmodule.exports = RopeSequence;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n};\n\nvar shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n};\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform);\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i);\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i;\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32);\n  shift[i] = String.fromCharCode(i);\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code];\n\nfunction keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\";\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\";\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\";\n  if (name == \"Del\") name = \"Delete\";\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\";\n  if (name == \"Up\") name = \"ArrowUp\";\n  if (name == \"Right\") name = \"ArrowRight\";\n  if (name == \"Down\") name = \"ArrowDown\";\n  return name\n}\n\nexports.base = base;\nexports.keyName = keyName;\nexports.shift = shift;\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var includes = Array.prototype.includes;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\nexport var has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template [T=void]\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n","// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\n/** Set once a reaction has run for the first time */\nexport const REACTION_RAN = 1 << 15;\n/** Effect is in the process of getting destroyed. Can be observed in child teardown functions */\nexport const DESTROYING = 1 << 25;\n\n// Flags exclusive to effects\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags exclusive to deriveds\n/**\n * Tells that we marked this derived and its reactions as visited during the \"mark as (maybe) dirty\"-phase.\n * Will be lifted during execution of the derived and during checking its dirty state (both are necessary\n * because a derived might be checked but not executed). This is a pure performance optimization flag and\n * should not be used for any other purpose!\n */\nexport const WAS_MARKED = 1 << 16;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\nexport const ATTRIBUTES_CACHE = Symbol('attributes');\nexport const CLASS_CACHE = Symbol('class');\nexport const STYLE_CACHE = Symbol('style');\nexport const TEXT_CACHE = Symbol('text');\nexport const FORM_RESET_HANDLER = Symbol('form reset');\n/** An anchor might change, via this symbol on the original anchor we can tell HMR about the updated anchor */\nexport const HMR_ANCHOR = Symbol('hmr anchor');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const IS_XHTML =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\t!!globalThis.document?.contentType &&\n\t/* @__PURE__ */ globalThis.document.contentType.includes('xml');\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\n/** used to indicate that a boundary's `failed` snippet was rendered on the server */\nexport const HYDRATION_START_FAILED = '[?';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol('uninitialized');\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * Reading a derived belonging to a now-destroyed effect may result in stale values\n */\nexport function derived_inert() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] derived_inert\\n%cReading a derived belonging to a now-destroyed effect may result in stale values\\nhttps://svelte.dev/e/derived_inert`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/derived_inert`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode | null} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(get_next_sibling(hydrate_node));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Skips or removes (depending on {@link remove}) all nodes starting at `hydrate_node` up until the next hydration end comment\n * @param {boolean} remove\n */\nexport function skip_nodes(remove = true) {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (\n\t\t\t\tdata === HYDRATION_START ||\n\t\t\t\tdata === HYDRATION_START_ELSE ||\n\t\t\t\t// \"[1\", \"[2\", etc. for if blocks\n\t\t\t\t(data[0] === '[' && !isNaN(Number(data.slice(1))))\n\t\t\t) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tif (remove) node.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n * @param {string} message\n * @returns {never}\n */\nexport function invariant_violation(message) {\n\tif (DEV) {\n\t\tconst error = new Error(`invariant_violation\\nAn invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"${message}\"\\nhttps://svelte.dev/e/invariant_violation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invariant_violation`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Context was not set in a parent component\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in a parent component\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n *   <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if no parent component called `set`.\n *\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tr: /** @type {Effect} */ (active_effect),\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcontext.i = true;\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n","import { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, REACTION_RAN, EFFECT, DESTROYED } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\t// if the error occurred while creating this subtree, we let it\n\t// bubble up until it hits a boundary that can handle it, unless\n\t// it's an $effect in which case it doesn't run immediately\n\tif ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {\n\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\tapply_adjustments(error);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// otherwise we bubble up the effect tree ourselves\n\tinvoke_error_boundary(error, effect);\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\tif (effect !== null && (effect.f & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\tif ((effect.f & REACTION_RAN) === 0) {\n\t\t\t\t// we are still creating the boundary effect\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (DEV && error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? '  ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","/** @import { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n","/** @import { Derived, Effect, Value } from '#client' */\nimport { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Value[] | null} deps\n */\nfunction clear_marked(deps) {\n\tif (deps === null) return;\n\n\tfor (const dep of deps) {\n\t\tif ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdep.f ^= WAS_MARKED;\n\n\t\tclear_marked(/** @type {Derived} */ (dep).deps);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// Since we're not executing these effects now, we need to clear any WAS_MARKED flags\n\t// so that other batches can correctly reach these effects during their own traversal\n\tclear_marked(effect.deps);\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n","/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { get as get_store } from '../../../store/shared/index.js';\nimport { define_property, noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\nimport { DEV } from 'esm-env';\n\n/**\n * We set this to `true` when updating a store so that we correctly\n * schedule effects if the update takes place inside a `$:` effect\n */\nexport let legacy_is_updating_store = false;\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\nlet IS_UNMOUNTED = Symbol('unmounted');\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (DEV) {\n\t\tentry.source.label = store_name;\n\t}\n\n\t// if the component that setup this is already unmounted we don't want to register a subscription\n\tif (entry.store !== store && !(IS_UNMOUNTED in stores)) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\t// if the component that setup this stores is already unmounted the source will be out of sync\n\t// so we just use the `get` for the stores, less performant but it avoids to create a memory leak\n\t// and it will keep the value consistent\n\tif (store && IS_UNMOUNTED in stores) {\n\t\treturn get_store(store);\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {[StoreReferencesContainer, ()=>void]}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tfunction cleanup() {\n\t\tteardown(() => {\n\t\t\tfor (var store_name in stores) {\n\t\t\t\tconst ref = stores[store_name];\n\t\t\t\tref.unsubscribe();\n\t\t\t}\n\t\t\tdefine_property(stores, IS_UNMOUNTED, {\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t});\n\t}\n\n\treturn [stores, cleanup];\n}\n\n/**\n * @param {Store<V>} store\n * @param {V} value\n * @template V\n */\nfunction update_with_flag(store, value) {\n\tlegacy_is_updating_store = true;\n\n\ttry {\n\t\tstore.set(value);\n\t} finally {\n\t\tlegacy_is_updating_store = false;\n\t}\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store  the store to update\n * @param {any} expression  the expression that mutates the store\n * @param {V} new_value  the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tupdate_with_flag(store, new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tupdate_with_flag(store, store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { FORM_RESET_HANDLER } from '../../../constants.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\tconst prev = /** @type {any} */ (element)[FORM_RESET_HANDLER];\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t/** @type {any} */ (element)[FORM_RESET_HANDLER] = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t/** @type {any} */ (element)[FORM_RESET_HANDLER] = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { HYDRATION_START_ELSE, HYDRATION_START_FAILED } from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\n\n/**\n * @typedef {{\n * \t onerror?: ((error: unknown, reset: () => void) => void) | null;\n *   failed?: ((anchor: Node, error: () => unknown, reset: () => () => void) => void) | null;\n *   pending?: ((anchor: Node) => void) | null;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @param {((error: unknown) => unknown) | undefined} [transform_error]\n * @returns {void}\n */\nexport function boundary(node, props, children, transform_error) {\n\tnew Boundary(node, props, children, transform_error);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/**\n\t * API-level transformError transform function. Transforms errors before they reach the `failed` snippet.\n\t * Inherited from parent boundary, or defaults to identity.\n\t * @type {(error: unknown) => unknown}\n\t */\n\ttransform_error;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t * @param {((error: unknown) => unknown) | undefined} [transform_error]\n\t */\n\tconstructor(node, props, children, transform_error) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\n\t\tthis.#children = (anchor) => {\n\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\teffect.b = this;\n\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\tchildren(anchor);\n\t\t};\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\t// Inherit transform_error from parent boundary, or use the provided one, or default to identity\n\t\tthis.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);\n\n\t\tthis.#effect = block(() => {\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment = /** @type {Comment} */ (this.#hydrate_open);\n\t\t\t\thydrate_next();\n\n\t\t\t\tconst server_rendered_pending = comment.data === HYDRATION_START_ELSE;\n\t\t\t\tconst server_rendered_failed = comment.data.startsWith(HYDRATION_START_FAILED);\n\n\t\t\t\tif (server_rendered_failed) {\n\t\t\t\t\t// Server rendered the failed snippet - hydrate it.\n\t\t\t\t\t// The serialized error is embedded in the comment: <!--[?<json>-->\n\t\t\t\t\tconst serialized_error = JSON.parse(comment.data.slice(HYDRATION_START_FAILED.length));\n\t\t\t\t\tthis.#hydrate_failed_content(serialized_error);\n\t\t\t\t} else if (server_rendered_pending) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.#render();\n\t\t\t}\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error The deserialized error from the server's hydration comment\n\t */\n\t#hydrate_failed_content(error) {\n\t\tconst failed = this.#props.failed;\n\t\tconst { reset, invoke_onerror } = this.#create_reset(error);\n\n\t\t// `onerror` may mutate state, which is disallowed while hydrating\n\t\tqueue_micro_task(invoke_onerror);\n\n\t\tif (!failed) return;\n\n\t\tthis.#failed_effect = branch(() => {\n\t\t\tfailed(\n\t\t\t\tthis.#anchor,\n\t\t\t\t() => error,\n\t\t\t\t() => reset\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Creates the `reset` function for a failed boundary, along with a function\n\t * that invokes `onerror` with it (if provided)\n\t * @param {unknown} error\n\t * @returns {{ reset: () => void, invoke_onerror: () => void }}\n\t */\n\t#create_reset(error) {\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.#run(() => {\n\t\t\t\tthis.#render();\n\t\t\t});\n\t\t};\n\n\t\tconst invoke_onerror = () => {\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tthis.#props.onerror?.(error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (err) {\n\t\t\t\tinvoke_error_boundary(err, this.#effect && this.#effect.parent);\n\t\t\t}\n\t\t};\n\n\t\treturn { reset, invoke_onerror };\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.is_pending = true;\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\tvar anchor = create_text();\n\n\t\t\tfragment.append(anchor);\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count === 0) {\n\t\t\t\tthis.#anchor.before(fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t});\n\t}\n\n\t#render() {\n\t\ttry {\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\t\t\tthis.#pending_count = 0;\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tthis.#main_effect = branch(() => {\n\t\t\t\tthis.#children(this.#anchor);\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\t\tmove_effect(this.#main_effect, fragment);\n\n\t\t\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t\t} else {\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#resolve(batch) {\n\t\tthis.is_pending = false;\n\n\t\t// any effects that were previously deferred should be transferred\n\t\t// to the batch, which will flush in the next microtask\n\t\tbatch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\tBatch.ensure();\n\t\t\treturn fn();\n\t\t} catch (e) {\n\t\t\thandle_error(e);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\t#update_pending_count(d, batch) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d, batch);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.#resolve(batch);\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\tupdate_pending_count(d, batch) {\n\t\tthis.#update_pending_count(d, batch);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (!this.#props.onerror && !this.#props.failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (current_batch?.is_fork) {\n\t\t\tif (this.#main_effect) current_batch.skip_effect(this.#main_effect);\n\t\t\tif (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);\n\t\t\tif (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);\n\n\t\t\tcurrent_batch.oncommit(() => {\n\t\t\t\tthis.#handle_error(error);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.#handle_error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error\n\t */\n\t#handle_error(error) {\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tlet failed = this.#props.failed;\n\n\t\t/** @param {unknown} transformed_error */\n\t\tconst handle_error_result = (transformed_error) => {\n\t\t\tconst { reset, invoke_onerror } = this.#create_reset(transformed_error);\n\n\t\t\tinvoke_onerror();\n\n\t\t\tif (failed) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\t// errors in `failed` snippets cause the boundary to error again\n\t\t\t\t\t\t\t// TODO Svelte 6: revisit this decision, most likely better to go to parent boundary instead\n\t\t\t\t\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\t\t\t\t\teffect.b = this;\n\t\t\t\t\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => transformed_error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\t// Run the error through the API-level transformError transform (e.g. SvelteKit's handleError)\n\t\t\t/** @type {unknown} */\n\t\t\tvar result;\n\t\t\ttry {\n\t\t\t\tresult = this.transform_error(error);\n\t\t\t} catch (e) {\n\t\t\t\tinvoke_error_boundary(e, this.#effect && this.#effect.parent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult !== null &&\n\t\t\t\ttypeof result === 'object' &&\n\t\t\t\ttypeof (/** @type {any} */ (result).then) === 'function'\n\t\t\t) {\n\t\t\t\t// transformError returned a Promise — wait for it\n\t\t\t\t/** @type {any} */ (result).then(\n\t\t\t\t\thandle_error_result,\n\t\t\t\t\t/** @param {unknown} e */\n\t\t\t\t\t(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Synchronous result — handle immediately\n\t\t\t\thandle_error_result(result);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n","import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n}\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport *  from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n * @param {string} index\n * @param {string} a\n * @param {string} b\n * @returns {never}\n */\nexport function each_key_volatile(index, a, b) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_volatile\\nKeyed each block has key that is not idempotent — the key for item at index ${index} was \\`${a}\\` but is now \\`${b}\\`. Keys must be the same each time for a given item\\nhttps://svelte.dev/e/each_key_volatile`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_volatile`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","/** @import { Blocker, Effect, Source, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\treactivity_loss_tracker,\n\tderived,\n\tderived_safe_equal,\n\tset_reactivity_loss_tracker\n} from './deriveds.js';\nimport { aborted } from './effects.js';\nimport { queue_micro_task } from '../dom/task.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tvar deriveds = sync.map(d);\n\n\tif (DEV) {\n\t\tderiveds.forEach((d, i) => {\n\t\t\t// TODO this is kinda useful for debugging but a lousy implementation —\n\t\t\t// maybe the compiler could pass through the template string\n\t\t\td.label = sync[i]\n\t\t\t\t.toString()\n\t\t\t\t.replace('() => ', '')\n\t\t\t\t.replaceAll('$.eager(() => ', '$state.eager(')\n\t\t\t\t.replace(/\\$\\.get\\((.+?)\\)/g, (_, id) => id);\n\t\t});\n\t}\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(deriveds);\n\t\treturn;\n\t}\n\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/**\n\t * @param {Source[]} async\n\t */\n\tfunction finish(async) {\n\t\tif ((parent.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn([...deriveds, ...async]);\n\t\t} catch (error) {\n\t\t\tinvoke_error_boundary(error, parent);\n\t\t}\n\n\t\tunset_context();\n\t}\n\n\tvar decrement_pending = increment_pending();\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish([])).finally(decrement_pending);\n\t\treturn;\n\t}\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then(finish)\n\t\t\t.catch((error) => invoke_error_boundary(error, parent))\n\t\t\t.finally(decrement_pending);\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(() => {\n\t\t\trestore();\n\t\t\trun();\n\t\t\tunset_context();\n\t\t});\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nexport function capture() {\n\tvar previous_effect = /** @type {Effect} */ (active_effect);\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = /** @type {Batch} */ (current_batch);\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\n\t\tif (activate_batch && (previous_effect.f & DESTROYED) === 0) {\n\t\t\t// TODO we only need optional chaining here because `{#await ...}` blocks\n\t\t\t// are anomalous. Once we retire them we can get rid of it\n\t\t\tprevious_batch?.activate();\n\t\t\tprevious_batch?.apply();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t\tset_dev_stack(previous_dev_stack);\n\t\t}\n\t};\n}\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\tqueue_micro_task(unset_context);\n\t\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_reactivity_loss_tracker = reactivity_loss_tracker;\n\t// Ensure that unrelated reads after an async operation is kicked off don't cause false positives\n\tqueueMicrotask(() => {\n\t\tif (reactivity_loss_tracker === previous_reactivity_loss_tracker) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t}\n\t});\n\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_reactivity_loss_tracker(previous_reactivity_loss_tracker);\n\t\t// While this can result in false negatives it also guards against the more important\n\t\t// false positives that would occur if this is the last in a chain of async operations,\n\t\t// and the reactivity_loss_tracker would then stay around until the next async operation happens.\n\t\tqueueMicrotask(() => {\n\t\t\tif (reactivity_loss_tracker === previous_reactivity_loss_tracker) {\n\t\t\t\tset_reactivity_loss_tracker(null);\n\t\t\t}\n\t\t});\n\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t// eslint-disable-next-line no-useless-assignment\n\tlet invoke_return = true;\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tinvoke_return = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar prev = reactivity_loss_tracker;\n\t\t\ttry {\n\t\t\t\tyield value;\n\t\t\t} catch (e) {\n\t\t\t\tset_reactivity_loss_tracker(prev);\n\t\t\t\t// If the yield throws, we need to call `return` but not return its value, instead rethrow\n\t\t\t\tif (iterator.return !== undefined) {\n\t\t\t\t\t(await track_reactivity_loss(iterator.return()))();\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tset_reactivity_loss_tracker(prev);\n\t\t}\n\t} catch (error) {\n\t\tinvoke_return = false;\n\t\tthrow error;\n\t} finally {\n\t\t// If the iterator had an abrupt completion (break) and `return` is defined on the iterator, call it and return the value\n\t\tif (invoke_return && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context(deactivate_batch = true) {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\tif (deactivate_batch) current_batch?.deactivate();\n\n\tif (DEV) {\n\t\tset_reactivity_loss_tracker(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tconst decrement_pending = increment_pending();\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t\tunset_context();\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\trestore();\n\n\t\t\t\ttry {\n\t\t\t\t\tif (errored) {\n\t\t\t\t\t\tthrow errored.error;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aborted(active)) {\n\t\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\t// We gotta unset context directly in case the function returns a promise, in which case\n\t\t\t\t\t// unset_context in .finally() would be too late ...\n\t\t\t\t\tunset_context();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\t\t\t// ... but we also need it after such a promise has resolved in case it restores our context\n\t\t\tunset_context();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(decrement_pending);\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n\n/**\n * @returns {(skip?: boolean) => void}\n */\nexport function increment_pending() {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tvar boundary = effect.b; // undefined if called outside the render tree, e.g. a standalone $effect.root\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = !!boundary?.is_rendered();\n\n\tboundary?.update_pending_count(1, batch);\n\tbatch.increment(blocking, effect);\n\n\treturn () => {\n\t\tboundary?.update_pending_count(-1, batch);\n\t\tbatch.decrement(blocking, effect);\n\t};\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\n/** @import { Batch } from './batch.js'; */\n/** @import { Boundary } from '../dom/blocks/boundary.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tWAS_MARKED,\n\tDESTROYED,\n\tCLEAN,\n\tREACTION_RAN,\n\tINERT\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect,\n\tupdate_effect,\n\tremove_reactions,\n\tskipped_deps,\n\tnew_deps\n} from '../runtime.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport {\n\tasync_effect,\n\tdestroy_effect,\n\tdestroy_effect_children,\n\teffect_tracking,\n\tteardown\n} from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch, previous_batch } from './batch.js';\nimport { increment_pending, unset_context } from './async.js';\nimport { deferred, includes, noop } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/**\n * This allows us to track 'reactivity loss' that occurs when signals\n * are read after a non-context-restoring `await`. Dev-only\n * @type {{ effect: Effect, effect_deps: Set<Value>, warned: boolean } | null}\n */\nexport let reactivity_loss_tracker = null;\n\n/** @param {{ effect: Effect, effect_deps: Set<Value>, warned: boolean } | null} v */\nexport function set_reactivity_loss_tracker(v) {\n\treactivity_loss_tracker = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\nexport const OBSOLETE = Symbol('obsolete');\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, label, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label ?? fn.toString();\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Set<ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Set();\n\n\tasync_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = { effect, effect_deps: new Set(), warned: false };\n\t\t}\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn())\n\t\t\t\t.then(d.resolve, (e) => {\n\t\t\t\t\t// if the promise was rejected by the user, via `getAbortSignal`, then\n\t\t\t\t\t// wait for a subsequent resolution instead of flushing the batch\n\t\t\t\t\tif (e !== STALE_REACTION) d.reject(e);\n\t\t\t\t})\n\t\t\t\t.finally(unset_context);\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tif (reactivity_loss_tracker) {\n\t\t\t\t// Reused deps from previous run (indices 0 to skipped_deps-1)\n\t\t\t\t// We deliberately only track direct dependencies of the async expression to encourage\n\t\t\t\t// dependencies being directly visible at the point of the expression\n\t\t\t\tif (effect.deps !== null) {\n\t\t\t\t\tfor (let i = 0; i < skipped_deps; i += 1) {\n\t\t\t\t\t\treactivity_loss_tracker.effect_deps.add(effect.deps[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// New deps discovered this run\n\t\t\t\tif (new_deps !== null) {\n\t\t\t\t\tfor (let i = 0; i < new_deps.length; i += 1) {\n\t\t\t\t\t\treactivity_loss_tracker.effect_deps.add(new_deps[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treactivity_loss_tracker = null;\n\t\t}\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\t// we only increment the batch's pending state for updates, not creation, otherwise\n\t\t\t// we will decrement to zero before the work that depends on this promise (e.g. a\n\t\t\t// template effect) has initialized, causing the batch to resolve prematurely\n\t\t\tif ((effect.f & REACTION_RAN) !== 0) {\n\t\t\t\tvar decrement_pending = increment_pending();\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// boundary can be null if the async derived is inside an $effect.root not connected to the component render tree\n\t\t\t\tparent.b?.is_rendered()\n\t\t\t) {\n\t\t\t\tbatch.async_deriveds.get(effect)?.reject(OBSOLETE);\n\t\t\t} else {\n\t\t\t\t// While the boundary is still showing pending, a new run supersedes all older in-flight runs\n\t\t\t\t// for this async expression. Cancel eagerly so resolution cannot commit stale values.\n\t\t\t\tfor (const d of deferreds.values()) {\n\t\t\t\t\td.reject(OBSOLETE);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdeferreds.add(d);\n\t\t\tbatch.async_deriveds.set(effect, d);\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tif (DEV) {\n\t\t\t\treactivity_loss_tracker = null;\n\t\t\t}\n\n\t\t\tdecrement_pending?.();\n\t\t\tdeferreds.delete(d);\n\n\t\t\tif (error === OBSOLETE) return;\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\tinternal_set(signal, error);\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined && !signal.equals(value)) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal) && (effect.f & DESTROYED) === 0) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\t\t\t}\n\n\t\t\tbatch.deactivate();\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds) {\n\t\t\td.reject(OBSOLETE);\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tif (!async_mode_flag) push_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\tvar parent = derived.parent;\n\n\tif (\n\t\t!is_destroying_effect &&\n\t\tparent !== null &&\n\t\tderived.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead\n\t\t(parent.f & (DESTROYED | INERT)) !== 0\n\t) {\n\t\tw.derived_inert();\n\n\t\treturn derived.v;\n\t}\n\n\tset_active_effect(parent);\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tif (current_batch !== null) {\n\t\t\t\t// We also write to previous_batch because if it exists, it is a sign that we're\n\t\t\t\t// currently in the process of flushing effects. These updates to deriveds may belong\n\t\t\t\t// to the previous batch, not the new one (which can already exist if an earlier\n\t\t\t\t// effect wrote to a source). This can cause bugs when running batch.#commit() later,\n\t\t\t\t// but not adding it to current_batch can, too, so we add it to both.\n\t\t\t\t// See https://github.com/sveltejs/svelte/pull/18117 for more details.\n\t\t\t\tcurrent_batch.capture(derived, value, true);\n\t\t\t\tprevious_batch?.capture(derived, value, true);\n\t\t\t} else {\n\t\t\t\tderived.v = value;\n\t\t\t}\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function freeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect has a teardown function or abort signal, call it\n\t\tif (e.teardown || e.ac) {\n\t\t\te.teardown?.();\n\t\t\tif (e.ac !== null) {\n\t\t\t\twithout_reactive_context(() => {\n\t\t\t\t\t/** @type {AbortController} */ (e.ac).abort(STALE_REACTION);\n\t\t\t\t\te.ac = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// make it a noop so it doesn't get called again if the derived\n\t\t\t// is unfrozen. we don't set it to `null`, because the existence\n\t\t\t// of a teardown function is what determines whether the\n\t\t\t// effect runs again during unfreezing (but not for teardown-only effects)\n\t\t\tif (e.fn !== null) e.teardown = noop;\n\n\t\t\tremove_reactions(e, 0);\n\t\t\tdestroy_effect_children(e);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function unfreeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect was previously frozen — indicated by the presence\n\t\t// of a teardown function — unfreeze it\n\t\tif (e.teardown && e.fn !== null) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\n}\n","/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tMAYBE_DIRTY,\n\tDERIVED,\n\tEAGER_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN,\n\tDESTROYING\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, teardown, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\nimport { legacy_is_updating_store } from './store.js';\nimport { invariant } from '../../shared/dev.js';\nimport { log_effect_tree } from '../dev/debug.js';\nimport { OBSOLETE } from './deriveds.js';\n\n/** @type {Batch | null} */\nlet first_batch = null;\n\n/** @type {Batch | null} */\nlet last_batch = null;\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nexport let is_flushing_sync = false;\nlet is_processing = false;\n\n/**\n * During traversal, this is an array. Newly created effects are (if not immediately\n * executed) pushed to this array, rather than going through the scheduling\n * rigamarole that would cause another turn of the flush loop.\n * @type {Effect[] | null}\n */\nexport let collected_effects = null;\n\n/**\n * An array of effects that are marked during traversal as a result of a `set`\n * (not `internal_set`) call. These will be added to the next batch and\n * trigger another `batch.process()`\n * @type {Effect[] | null}\n * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n */\nexport let legacy_updates = null;\n\nvar flush_count = 0;\n\n/** @type {Set<Value>} */\nvar source_stacks = new Set();\n\nlet uid = 1;\n\nexport class Batch {\n\tid = uid++;\n\n\t/** True as soon as `#process` was called */\n\t#started = false;\n\n\tlinked = true;\n\n\t/** @type {Batch | null} */\n\t#prev = null;\n\n\t/** @type {Batch | null} */\n\t#next = null;\n\n\t/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */\n\tasync_deriveds = new Map();\n\n\t/**\n\t * The current values of any signals that are updated in this batch.\n\t * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Value, [any, boolean]>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Value, any>}\n\t */\n\tprevious = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_callbacks = new Set();\n\n\t/**\n\t * The number of async effects that are currently in flight\n\t */\n\t#pending = 0;\n\n\t/**\n\t * Async effects that are currently in flight, _not_ inside a pending boundary\n\t * @type {Map<Effect, number>}\n\t */\n\t#blocking_pending = new Map();\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * The root effects that need to be flushed\n\t * @type {Effect[]}\n\t */\n\t#roots = [];\n\n\t/**\n\t * Effects created while this batch was active.\n\t * @type {Effect[]}\n\t */\n\t#new_effects = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A map of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`.\n\t * The value contains child effects that were dirty/maybe_dirty before being reset,\n\t * so they can be rescheduled if the branch survives.\n\t * @type {Map<Effect, { d: Effect[], m: Effect[] }>}\n\t */\n\t#skipped_branches = new Map();\n\n\t/**\n\t * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing\n\t * @type {Set<Effect>}\n\t */\n\t#unskipped_branches = new Set();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\tconstructor() {\n\t\t// link batch\n\t\tif (last_batch === null) {\n\t\t\tfirst_batch = last_batch = this;\n\t\t} else {\n\t\t\tlast_batch.#next = this;\n\t\t\tthis.#prev = last_batch;\n\t\t}\n\n\t\tlast_batch = this;\n\t}\n\n\t#is_deferred() {\n\t\tif (this.is_fork) return true;\n\n\t\tfor (const effect of this.#blocking_pending.keys()) {\n\t\t\tvar e = effect;\n\t\t\tvar skipped = false;\n\n\t\t\twhile (e.parent !== null) {\n\t\t\t\tif (this.#skipped_branches.has(e)) {\n\t\t\t\t\tskipped = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\te = e.parent;\n\t\t\t}\n\n\t\t\tif (!skipped) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add an effect to the #skipped_branches map and reset its children\n\t * @param {Effect} effect\n\t */\n\tskip_effect(effect) {\n\t\tif (!this.#skipped_branches.has(effect)) {\n\t\t\tthis.#skipped_branches.set(effect, { d: [], m: [] });\n\t\t}\n\t\tthis.#unskipped_branches.delete(effect);\n\t}\n\n\t/**\n\t * Remove an effect from the #skipped_branches map and reschedule\n\t * any tracked dirty/maybe_dirty child effects\n\t * @param {Effect} effect\n\t * @param {(e: Effect) => void} callback\n\t */\n\tunskip_effect(effect, callback = (e) => this.schedule(e)) {\n\t\tvar tracked = this.#skipped_branches.get(effect);\n\t\tif (tracked) {\n\t\t\tthis.#skipped_branches.delete(effect);\n\n\t\t\tfor (var e of tracked.d) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tcallback(e);\n\t\t\t}\n\n\t\t\tfor (e of tracked.m) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tcallback(e);\n\t\t\t}\n\t\t}\n\t\tthis.#unskipped_branches.add(effect);\n\t}\n\n\t#process() {\n\t\tthis.#started = true;\n\n\t\tif (flush_count++ > 1000) {\n\t\t\tthis.#unlink();\n\t\t\tinfinite_loop_guard();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\t// track all the values that were updated during this flush,\n\t\t\t// so that they can be reset afterwards\n\t\t\tfor (const value of this.current.keys()) {\n\t\t\t\tsource_stacks.add(value);\n\t\t\t}\n\t\t}\n\n\t\t// We always reschedule previously-deferred effects, not just when\n\t\t// #is_deferred() is true, because traversing the tree could make\n\t\t// an if block that contains the last blocking pending effect falsy,\n\t\t// causing the block to no longer be deferred.\n\t\tfor (const e of this.#dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\tset_signal_status(e, DIRTY);\n\t\t\tthis.schedule(e);\n\t\t}\n\n\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\tthis.schedule(e);\n\t\t}\n\n\t\tconst roots = this.#roots;\n\t\tthis.#roots = [];\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = (collected_effects = []);\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\t/**\n\t\t * @type {Effect[]}\n\t\t * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n\t\t */\n\t\tvar updates = (legacy_updates = []);\n\n\t\tfor (const root of roots) {\n\t\t\ttry {\n\t\t\t\tthis.#traverse(root, effects, render_effects);\n\t\t\t} catch (e) {\n\t\t\t\treset_all(root);\n\t\t\t\t// If there's no async work left, this branch is now dead and needs\n\t\t\t\t// to be discarded to not become a zombie that is never cleaned up.\n\t\t\t\t// See https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414\n\t\t\t\t// for a (non-minimal) reproduction that demonstrates a case where this is necessary\n\t\t\t\t// to not get follow-up false-positives via \"batch has scheduled roots\" invariant errors.\n\t\t\t\tif (!this.#is_deferred()) this.discard();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\t// any writes should take effect in a subsequent batch\n\t\tcurrent_batch = null;\n\n\t\tif (updates.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\t\t\tfor (const e of updates) {\n\t\t\t\tbatch.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tcollected_effects = null;\n\t\tlegacy_updates = null;\n\n\t\t// if the batch has outstanding pending work, stash effects and bail\n\t\tif (this.#is_deferred()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const [e, t] of this.#skipped_branches) {\n\t\t\t\treset_branch(e, t);\n\t\t\t}\n\n\t\t\tif (updates.length > 0) {\n\t\t\t\t/** @type {Batch} */ (/** @type {unknown} */ (current_batch)).#process();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst earlier_batch = this.#find_earlier_batch();\n\n\t\tif (earlier_batch) {\n\t\t\t// If this batch collected deferred effects during traversal, they still need\n\t\t\t// to run after being merged into the earlier batch.\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\t\t\tearlier_batch.#merge(this);\n\t\t\treturn;\n\t\t}\n\n\t\t// clear effects. Those that are still needed will be rescheduled through unskipping the skipped branches.\n\t\tthis.#dirty_effects.clear();\n\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t// append/remove branches\n\t\tfor (const fn of this.#commit_callbacks) fn(this);\n\t\tthis.#commit_callbacks.clear();\n\n\t\tprevious_batch = this;\n\t\tflush_queued_effects(render_effects);\n\t\tflush_queued_effects(effects);\n\t\tprevious_batch = null;\n\n\t\tthis.#deferred?.resolve();\n\n\t\tvar next_batch = /** @type {Batch | null} */ (/** @type {unknown} */ (current_batch));\n\n\t\tif (this.#pending === 0 && (this.#roots.length === 0 || next_batch !== null)) {\n\t\t\tthis.#unlink();\n\n\t\t\t// Order matters here - we need to commit and THEN continue flushing new batches, not the other way around,\n\t\t\t// else we could start flushing a new batch and then, if it has pending work, rebase it right afterwards, which is wrong.\n\t\t\t// In sync mode flushSync can cause #commit to wrongfully think that there needs to be a rebase, so we only do it in async mode\n\t\t\t// TODO fix the underlying cause, otherwise this will likely regress when non-async mode is removed\n\t\t\tif (async_mode_flag) {\n\t\t\t\tthis.#commit();\n\t\t\t\t// Rebases can activate other batches or null it out, therefore restore the new one here\n\t\t\t\tcurrent_batch = next_batch;\n\t\t\t}\n\t\t}\n\n\t\t// Edge case: During traversal new branches might create effects that run immediately and set state,\n\t\t// causing an effect and therefore a root to be scheduled again. We need to traverse the current batch\n\t\t// once more in that case - most of the time this will just clean up dirty branches.\n\t\tif (this.#roots.length > 0) {\n\t\t\tif (next_batch !== null) {\n\t\t\t\tconst batch = next_batch;\n\t\t\t\tbatch.#roots.push(...this.#roots.filter((r) => !batch.#roots.includes(r)));\n\t\t\t} else {\n\t\t\t\tnext_batch = this;\n\t\t\t}\n\t\t}\n\n\t\tif (next_batch !== null) {\n\t\t\tnext_batch.#process();\n\t\t}\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse(root, effects, render_effects) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (effect !== null) {\n\t\t\t\tvar next = effect.next;\n\n\t\t\t\tif (next !== null) {\n\t\t\t\t\teffect = next;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\teffect = effect.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t#find_earlier_batch() {\n\t\tvar batch = this.#prev;\n\n\t\twhile (batch !== null) {\n\t\t\tif (!batch.is_fork) {\n\t\t\t\t// if the batches are connected, break\n\t\t\t\tfor (const [value, [, is_derived]] of this.current) {\n\t\t\t\t\tif (batch.current.has(value) && !is_derived) {\n\t\t\t\t\t\treturn batch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch = batch.#prev;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#merge(batch) {\n\t\tfor (const [source, value] of batch.current) {\n\t\t\tif (!this.previous.has(source) && batch.previous.has(source)) {\n\t\t\t\tthis.previous.set(source, batch.previous.get(source));\n\t\t\t}\n\n\t\t\tthis.current.set(source, value);\n\t\t}\n\n\t\tfor (const [effect, deferred] of batch.async_deriveds) {\n\t\t\tconst d = this.async_deriveds.get(effect);\n\t\t\tif (d) deferred.promise.then(d.resolve).catch(d.reject);\n\t\t}\n\n\t\t// Clear them or else those that are still pending might get rejected on discard (after merged-into batch is done).\n\t\t// This can happen when batch Y merged into X and Y has a pending boundary and therefore still-pending async deriveds inside.\n\t\tbatch.async_deriveds.clear();\n\n\t\t// Mark is not guaranteed not touch these, so we transfer them\n\t\tthis.transfer_effects(batch.#dirty_effects, batch.#maybe_dirty_effects);\n\n\t\t/**\n\t\t * mark all effects that depend on `batch.current`, except the\n\t\t * async effects that we just resolved (TODO unless they depend\n\t\t * on values in this batch that are NOT in the later batch?).\n\t\t * Through this we also will populate the correct #skipped_branches,\n\t\t * oncommit callbacks etc, so we don't need to merge them separately.\n\t\t * @param {Value} value\n\t\t */\n\t\tconst mark = (value) => {\n\t\t\tvar reactions = value.reactions;\n\t\t\tif (reactions === null) return;\n\t\t\t// skip if value is derived and is neither dirty nor maybe dirty. transitive\n\t\t\t// deriveds (a derived depending on another derived) are only MAYBE_DIRTY, so\n\t\t\t// we must continue traversing them to reach the effects that depend on them\n\t\t\tif ((value.f & DERIVED) !== 0 && (value.f & (DIRTY | MAYBE_DIRTY)) === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const reaction of reactions) {\n\t\t\t\tvar flags = reaction.f;\n\n\t\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\t\tmark(/** @type {Derived} */ (reaction));\n\t\t\t\t} else {\n\t\t\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\t\t\tif (flags & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect)) {\n\t\t\t\t\t\tthis.#maybe_dirty_effects.delete(effect);\n\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\tthis.schedule(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const source of this.current.keys()) {\n\t\t\tmark(source);\n\t\t}\n\n\t\tthis.oncommit(() => batch.discard());\n\t\tbatch.#unlink();\n\n\t\tcurrent_batch = this;\n\t\tthis.#process();\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Value} source\n\t * @param {any} value\n\t * @param {boolean} [is_derived]\n\t */\n\tcapture(source, value, is_derived = false) {\n\t\tif (source.v !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, source.v);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, [value, is_derived]);\n\t\t\tbatch_values?.set(source, value);\n\t\t}\n\n\t\tif (!this.is_fork) {\n\t\t\tsource.v = value;\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\ttry {\n\t\t\tif (DEV) {\n\t\t\t\tsource_stacks.clear();\n\t\t\t}\n\n\t\t\tis_processing = true;\n\t\t\tcurrent_batch = this;\n\n\t\t\tthis.#process();\n\t\t} finally {\n\t\t\tflush_count = 0;\n\t\t\tlast_scheduled_effect = null;\n\t\t\tcollected_effects = null;\n\t\t\tlegacy_updates = null;\n\t\t\tis_processing = false;\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = null;\n\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of source_stacks) {\n\t\t\t\t\tsource.updated = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\n\t\tfor (const deferred of this.async_deriveds.values()) {\n\t\t\tdeferred.reject(OBSOLETE);\n\t\t}\n\n\t\tthis.#unlink();\n\t\tthis.#deferred?.resolve();\n\t}\n\n\t/**\n\t * @param {Effect} effect\n\t */\n\tregister_created_effect(effect) {\n\t\tthis.#new_effects.push(effect);\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tfor (let batch = first_batch; batch !== null; batch = batch.#next) {\n\t\t\tvar is_earlier = batch.id < this.id;\n\n\t\t\t/** @type {Source[]} */\n\t\t\tvar sources = [];\n\n\t\t\tfor (const [source, [value, is_derived]] of this.current) {\n\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\tvar batch_value = /** @type {[any, boolean]} */ (batch.current.get(source))[0]; // faster than destructuring\n\n\t\t\t\t\tif (is_earlier && value !== batch_value) {\n\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\tbatch.current.set(source, [value, is_derived]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsources.push(source);\n\t\t\t}\n\n\t\t\tif (is_earlier) {\n\t\t\t\t// TODO do we need to restart these in some cases, instead of\n\t\t\t\t// immediately resolving them? Likely not because of how this.apply() works.\n\t\t\t\tfor (const [effect, deferred] of this.async_deriveds) {\n\t\t\t\t\tconst d = batch.async_deriveds.get(effect);\n\t\t\t\t\tif (d) deferred.promise.then(d.resolve).catch(d.reject);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar current = [...batch.current.keys()].filter(\n\t\t\t\t(source) => !(/** @type {[any, boolean]} */ (batch.current.get(source))[1])\n\t\t\t);\n\n\t\t\t// If not started yet or no sources to update (which is e.g. possible for the very first batch) then bail\n\t\t\tif (!batch.#started || current.length === 0) continue;\n\n\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches (ignoring deriveds)\n\t\t\tvar others = current.filter((source) => !this.current.has(source));\n\n\t\t\tif (others.length === 0) {\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\t// this batch is now obsolete and can be discarded\n\t\t\t\t\tbatch.discard();\n\t\t\t\t}\n\t\t\t} else if (sources.length > 0) {\n\t\t\t\t// The microtask queue can contain the batch already scheduled to run right\n\t\t\t\t// after this one is finished, so throwing the invariant would be wrong here.\n\t\t\t\tif (DEV && !batch.#decrement_queued) {\n\t\t\t\t\tinvariant(batch.#roots.length === 0, 'Batch has scheduled roots');\n\t\t\t\t}\n\n\t\t\t\t// A batch was unskipped in a later batch -> tell prior batches to unskip it, too\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\tfor (const unskipped of this.#unskipped_branches) {\n\t\t\t\t\t\tbatch.unskip_effect(unskipped, (e) => {\n\t\t\t\t\t\t\tif ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {\n\t\t\t\t\t\t\t\tbatch.schedule(e);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbatch.#defer_effects([e]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.activate();\n\n\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\tvar marked = new Set();\n\n\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\tvar checked = new Map();\n\n\t\t\t\tfor (var source of sources) {\n\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t}\n\n\t\t\t\tchecked = new Map();\n\t\t\t\tvar current_unequal = [...batch.current]\n\t\t\t\t\t.filter(([c, v1]) => {\n\t\t\t\t\t\tconst v2 = this.current.get(c);\n\t\t\t\t\t\tif (!v2) return true;\n\t\t\t\t\t\t// Either their values are different or one is a derived but not the other\n\t\t\t\t\t\treturn v2[0] !== v1[0] || v2[1] !== v1[1];\n\t\t\t\t\t})\n\t\t\t\t\t.map(([c]) => c);\n\n\t\t\t\tif (current_unequal.length > 0) {\n\t\t\t\t\tfor (const effect of this.#new_effects) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(effect.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 &&\n\t\t\t\t\t\t\tdepends_on(effect, current_unequal, checked)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif ((effect.f & (ASYNC | BLOCK_EFFECT)) !== 0) {\n\t\t\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\t\t\tbatch.schedule(effect);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbatch.#dirty_effects.add(effect);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Only apply and traverse when we know we triggered async work with marking the effects\n\t\t\t\t// and know this won't run anyway right afterwards\n\t\t\t\tif (batch.#roots.length > 0 && !batch.#decrement_queued) {\n\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\tfor (var root of batch.#roots) {\n\t\t\t\t\t\tbatch.#traverse(root, [], []);\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.#roots = [];\n\t\t\t\t}\n\n\t\t\t\tbatch.deactivate();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tincrement(blocking, effect) {\n\t\tthis.#pending += 1;\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count + 1);\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tdecrement(blocking, effect) {\n\t\tthis.#pending -= 1;\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\n\t\t\tif (blocking_pending_count === 1) {\n\t\t\t\tthis.#blocking_pending.delete(effect);\n\t\t\t} else {\n\t\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#decrement_queued) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\n\t\t\tif (this.linked) {\n\t\t\t\tthis.flush();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @param {Set<Effect>} dirty_effects\n\t * @param {Set<Effect>} maybe_dirty_effects\n\t */\n\ttransfer_effects(dirty_effects, maybe_dirty_effects) {\n\t\tfor (const e of dirty_effects) {\n\t\t\tthis.#dirty_effects.add(e);\n\t\t}\n\n\t\tfor (const e of maybe_dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.add(e);\n\t\t}\n\n\t\tdirty_effects.clear();\n\t\tmaybe_dirty_effects.clear();\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\n\t\t\tif (!is_processing && !is_flushing_sync) {\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!batch.#started) {\n\t\t\t\t\t\tbatch.flush();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && this.#prev === null && this.#next === null)) {\n\t\t\tbatch_values = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map();\n\t\tfor (const [source, [value]] of this.current) {\n\t\t\tbatch_values.set(source, value);\n\t\t}\n\n\t\t// ...and undo changes belonging to other batches unless they intersect\n\t\tfor (let batch = first_batch; batch !== null; batch = batch.#next) {\n\t\t\tif (batch === this || batch.is_fork) continue;\n\n\t\t\t// If two batches intersect, the latter batch will be merged into the earlier batch,\n\t\t\t// and we should treat them as a single set of changes\n\t\t\tvar intersects = false;\n\n\t\t\tif (batch.id < this.id) {\n\t\t\t\tfor (const [source, [, is_derived]] of batch.current) {\n\t\t\t\t\t// Derived values don't partake in the intersection mechanism, because a derived could\n\t\t\t\t\t// be triggered in one batch already but not the other one yet, causing a false-positive\n\t\t\t\t\tif (is_derived) continue;\n\n\t\t\t\t\tif (this.current.has(source)) {\n\t\t\t\t\t\tintersects = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Since the latter batch merges into the earlier (if it resolves before the earlier one),\n\t\t\t// we treat the earlier values as \"already applied\". This way we don't need to rerun async\n\t\t\t// effects of the earlier batch in case they are merged.\n\t\t\t// As a result you can think of batch_values as having the latest values of all intersecting\n\t\t\t// batches up until this batch.\n\t\t\tif (!intersects) {\n\t\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\t\tbatch_values.set(source, previous);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Effect} effect\n\t */\n\tschedule(effect) {\n\t\tlast_scheduled_effect = effect;\n\n\t\t// defer render effects inside a pending boundary\n\t\t// TODO the `REACTION_RAN` check is only necessary because of legacy `$:` effects AFAICT — we can remove later\n\t\tif (\n\t\t\teffect.b?.is_pending &&\n\t\t\t(effect.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 &&\n\t\t\t(effect.f & REACTION_RAN) === 0\n\t\t) {\n\t\t\teffect.b.defer_effect(effect);\n\t\t\treturn;\n\t\t}\n\n\t\tvar e = effect;\n\n\t\twhile (e.parent !== null) {\n\t\t\te = e.parent;\n\t\t\tvar flags = e.f;\n\n\t\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t\t// updated an internal source, or because a branch is being unskipped,\n\t\t\t// bail out or we'll cause a second flush\n\t\t\tif (collected_effects !== null && e === active_effect) {\n\t\t\t\tif (async_mode_flag) return;\n\n\t\t\t\t// in sync mode, render effects run during traversal. in an extreme edge case\n\t\t\t\t// — namely that we're setting a value inside a derived read during traversal —\n\t\t\t\t// they can be made dirty after they have already been visited, in which\n\t\t\t\t// case we shouldn't bail out. we also shouldn't bail out if we're\n\t\t\t\t// updating a store inside a `$:`, since this might invalidate\n\t\t\t\t// effects that were already visited\n\t\t\t\tif (\n\t\t\t\t\t(active_reaction === null || (active_reaction.f & DERIVED) === 0) &&\n\t\t\t\t\t!legacy_is_updating_store\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\tif ((flags & CLEAN) === 0) {\n\t\t\t\t\t// branch is already dirty, bail\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.f ^= CLEAN;\n\t\t\t}\n\t\t}\n\n\t\tthis.#roots.push(e);\n\t}\n\n\t#unlink() {\n\t\t// #merge calls #unlink, discard later on does it again - prevent\n\t\t// running it multiple times to not corrupt the linked list\n\t\tif (!this.linked) return;\n\n\t\tvar prev = this.#prev;\n\t\tvar next = this.#next;\n\n\t\tif (prev === null) {\n\t\t\tfirst_batch = next;\n\t\t} else {\n\t\t\tprev.#next = next;\n\t\t}\n\n\t\tif (next === null) {\n\t\t\tlast_batch = prev;\n\t\t} else {\n\t\t\tnext.#prev = prev;\n\t\t}\n\n\t\tthis.linked = false;\n\t}\n}\n\n// TODO Svelte@6 think about removing the callback argument.\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tif (current_batch !== null && !current_batch.is_fork) {\n\t\t\t\tcurrent_batch.flush();\n\t\t\t}\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (current_batch === null) {\n\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t}\n\n\t\t\tcurrent_batch.flush();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\tif (DEV) {\n\t\tvar updates = new Map();\n\n\t\tfor (const source of /** @type {Batch} */ (current_batch).current.keys()) {\n\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\tif (!entry) {\n\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t}\n\n\t\t\t\tentry.count += update.count;\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of updates.values()) {\n\t\t\tif (update.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(update.error);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = new Set();\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (\n\t\t\t\teffect.deps === null &&\n\t\t\t\teffect.first === null &&\n\t\t\t\teffect.nodes === null &&\n\t\t\t\teffect.teardown === null &&\n\t\t\t\teffect.ac === null\n\t\t\t) {\n\t\t\t\t// remove this effect from the graph\n\t\t\t\tunlink_effect(effect);\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function schedule_effect(effect) {\n\t/** @type {Batch} */ (current_batch).schedule(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\tflushSync(() => {\n\t\tconst eager = eager_versions;\n\t\teager_versions = [];\n\t\tfor (const version of eager) {\n\t\t\tupdate(version);\n\t\t}\n\t});\n}\n\n/** @type {Map<Reaction, Source<number>>} */\nvar version_map = new Map();\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tif (active_reaction === null) {\n\t\treturn fn();\n\t}\n\n\tlet parent = active_reaction;\n\n\tlet version = version_map.get(parent) ?? source(0);\n\tversion_map.set(parent, version);\n\n\tteardown(() => {\n\t\tif (parent.f & DESTROYING) version_map.delete(parent);\n\t});\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later. Tracks dirty and maybe_dirty\n * effects so they can be rescheduled if the branch survives.\n * @param {Effect} effect\n * @param {{ d: Effect[], m: Effect[] }} tracked\n */\nfunction reset_branch(effect, tracked) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tif ((effect.f & DIRTY) !== 0) {\n\t\ttracked.d.push(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\ttracked.m.push(effect);\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e, tracked);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Mark an entire effect tree clean following an error\n * @param {Effect} effect\n */\nfunction reset_all(effect) {\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_all(e);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tflushSync(fn);\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batch.linked) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, [value]] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.flush();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batch.linked) {\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tfirst_batch = last_batch = null;\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC,\n\tWAS_MARKED,\n\tCONNECTED,\n\tREACTION_IS_UPDATING\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\teager_block_effects,\n\tschedule_effect,\n\tlegacy_updates\n} from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<Effect>} */\nexport let eager_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_error('created at');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !current_sources.has(source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value, legacy_updates);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {Effect[] | null} [updated_during_traversal]\n * @returns {V}\n */\nexport function internal_set(source, value, updated_during_traversal = null) {\n\tif (!source.equals(value)) {\n\t\told_values.set(source, is_destroying_effect ? value : source.v);\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tconst derived = /** @type {Derived} */ (source);\n\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(derived);\n\t\t\t}\n\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tif (batch_values === null) {\n\t\t\t\tupdate_derived_status(derived);\n\t\t\t}\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tmark_reactions(source, DIRTY, updated_during_traversal);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tlet dirty;\n\n\t\ttry {\n\t\t\tdirty = is_dirty(effect);\n\t\t} catch {\n\t\t\t// Dirty-checking can evaluate derived dependencies and throw in cases where\n\t\t\t// parent effects are about to destroy this eager effect. Run the effect so\n\t\t\t// its own error handling can deal with transient failures.\n\t\t\tdirty = true;\n\t\t}\n\n\t\tif (dirty) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\t// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @param {Effect[] | null} updated_during_traversal\n * @returns {void}\n */\nfunction mark_reactions(signal, status, updated_during_traversal) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & EAGER_EFFECT) !== 0) {\n\t\t\t// Eager effects need to run immediately:\n\t\t\t// - for $inspect so that the stack trace makes sense\n\t\t\t// - for $state.eager because they might be without an effect parent\n\t\t\teager_effects.add(/** @type {Effect} */ (reaction));\n\t\t} else if ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\n\t\t\tif ((flags & WAS_MARKED) === 0) {\n\t\t\t\t// Only connected deriveds being executed outside the update cycle can be reliably unmarked right away\n\t\t\t\tif (\n\t\t\t\t\tflags & CONNECTED &&\n\t\t\t\t\t(active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)\n\t\t\t\t) {\n\t\t\t\t\treaction.f |= WAS_MARKED;\n\t\t\t\t}\n\n\t\t\t\tmark_reactions(derived, MAYBE_DIRTY, updated_during_traversal);\n\t\t\t}\n\t\t} else if (not_dirty) {\n\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(effect);\n\t\t\t}\n\n\t\t\tif (updated_during_traversal !== null) {\n\t\t\t\tupdated_during_traversal.push(effect);\n\t\t\t} else {\n\t\t\t\tschedule_effect(effect);\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tWAS_MARKED,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\treactivity_loss_tracker,\n\texecute_derived,\n\tfreeze_derived_effects,\n\trecent_async_deriveds,\n\tunfreeze_derived_effects,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tprevious_batch,\n\tschedule_effect\n} from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\nimport * as w from './warnings.js';\n\n/**\n * True if updating in an effect context that is reactive (i.e. not branch/root effects)\n */\nlet is_updating_effect = false;\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Set<Source>}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\t(current_sources ??= new Set()).add(value);\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nexport let new_deps = null;\n\nexport let skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif (flags & DERIVED) {\n\t\treaction.f &= ~WAS_MARKED;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources !== null && current_sources.has(signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\treaction.f |= REACTION_RAN;\n\t\tvar deps = reaction.deps;\n\n\t\t// Don't remove reactions during fork;\n\t\t// they must remain for when fork is discarded\n\t\tvar is_fork = current_batch?.is_fork;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tif (!is_fork) {\n\t\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\t}\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!is_fork && deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected and remove the mark flag, as it cannot be reliably removed otherwise\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t}\n\n\t\t// In a fork it's possible that a derived is executed and gets reactions, then commits, but is\n\t\t// never re-executed. This is possible when the derived is only executed once in the context\n\t\t// of a new branch which happens before fork.commit() runs. In this case, the derived still has\n\t\t// UNINITIALIZED as its value, and then when it's loosing its reactions we need to ensure it stays\n\t\t// DIRTY so it is reexecuted once someone wants its value again.\n\t\tif (derived.v !== UNINITIALIZED) {\n\t\t\tupdate_derived_status(derived);\n\t\t}\n\n\t\t// Call abort controller, noone's listening to this derived anymore\n\t\tif (derived.ac !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\t/** @type {AbortController} */ (derived.ac).abort(STALE_REACTION);\n\t\t\t\tderived.ac = null;\n\t\t\t\t// ensure it reruns right away next time instead of potentially returning a rejected promise as its value\n\t\t\t\tset_signal_status(derived, DIRTY);\n\t\t\t});\n\t\t}\n\n\t\t// freeze any effects inside this derived\n\t\tfreeze_derived_effects(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tremove_reactions(derived, 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0; // Branch/root effects are not reactive contexts\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && (current_sources === null || !current_sources.has(signal))) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We're adding a dependency outside the init/update cycle (i.e. after an `await`).\n\t\t\t\t// We have to deduplicate deps/reactions in this case or remove_reactions could\n\t\t\t\t// disconnect deps/reactions that are actually still in use (if skip_deps says\n\t\t\t\t// \"disconnect all after this index\" and some of the signals are also present in\n\t\t\t\t// list prior to the cutoff index, i.e. that should be kept).\n\t\t\t\tactive_reaction.deps ??= [];\n\t\t\t\tif (!includes.call(active_reaction.deps, signal)) {\n\t\t\t\t\tactive_reaction.deps.push(signal);\n\t\t\t\t}\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!includes.call(reactions, active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\tif (\n\t\t\t!untracking &&\n\t\t\treactivity_loss_tracker &&\n\t\t\t// By checking that current/previous batch are null we filter out false positives.\n\t\t\t// reactivity_loss_tracker is only reset after a microtask, so if a flush happens\n\t\t\t// before that, we get warnings for things we shouldn't warn on.\n\t\t\tcurrent_batch === null &&\n\t\t\tprevious_batch === null &&\n\t\t\t!reactivity_loss_tracker.warned &&\n\t\t\t(reactivity_loss_tracker.effect.f & REACTION_IS_UPDATING) === 0 &&\n\t\t\t!reactivity_loss_tracker.effect_deps.has(signal)\n\t\t) {\n\t\t\treactivity_loss_tracker.warned = true;\n\n\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\tvar trace = get_error('traced at');\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tif (trace) console.warn(trace);\n\t\t}\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\ttrace = get_error('traced at');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t// connect disconnected deriveds if we are reading them inside an effect,\n\t\t// or inside another derived that is already connected\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(is_updating_effect || (active_reaction.f & CONNECTED) !== 0);\n\n\t\tvar is_new = (derived.f & REACTION_RAN) === 0;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\tunfreeze_derived_effects(derived);\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tderived.f |= CONNECTED;\n\n\tif (derived.deps === null) return;\n\n\tfor (const dep of derived.deps) {\n\t\t(dep.reactions ??= []).push(derived);\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\tunfreeze_derived_effects(/** @type {Derived} */ (dep));\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n *   // this will run when `data` changes, but not when `time` changes\n *   save(data, {\n *     timestamp: untrack(() => time)\n *   });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_eager_effects,\n\tset_eager_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_error('created at') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\twith_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create an uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport {\n\tATTRIBUTES_CACHE,\n\tCLASS_CACHE,\n\tREACTION_RAN,\n\tSTYLE_CACHE,\n\tTEXT_CACHE,\n\tTEXT_NODE\n} from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\nimport { NAMESPACE_HTML } from '../../../constants.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t/** @type {any} */ (element_prototype)[CLASS_CACHE] = undefined;\n\t\t/** @type {any} */ (element_prototype)[ATTRIBUTES_CACHE] = null;\n\t\t/** @type {any} */ (element_prototype)[STYLE_CACHE] = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t/** @type {any} */ (text_prototype)[TEXT_CACHE] = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (next_sibling_getter.call(node));\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = get_first_child(hydrate_node);\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn next_sibling;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & REACTION_RAN) !== 0;\n}\n\n/**\n * Branching here is intentional and load-bearing for perf. `createElement(tag)`\n * hits a fast path in Blink that `createElementNS(NAMESPACE_HTML, tag)` doesn't,\n * and passing an explicit `undefined` as the trailing options arg measurably\n * slows both APIs. Funnelling every case through a single `createElementNS(ns,\n * tag, options)` call would be smaller but slower on the HTML path.\n *\n * @template {keyof HTMLElementTagNameMap | string} T\n * @param {T} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element}\n */\nexport function create_element(tag, namespace, is) {\n\tif (namespace == null || namespace === NAMESPACE_HTML) {\n\t\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\t\tis ? document.createElement(tag, { is }) : document.createElement(tag)\n\t\t);\n\t}\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tis ? document.createElementNS(namespace, tag, { is }) : document.createElementNS(namespace, tag)\n\t);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n","/** @import { Blocker, ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tuntrack,\n\tuntracking,\n\tset_active_effect\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT,\n\tDESTROYING\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, collected_effects, current_batch } from './batch.js';\nimport { flatten } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @returns {Effect}\n */\nfunction create_effect(type, fn) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes: null,\n\t\tf: type | DIRTY | CONNECTED,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tcurrent_batch?.register_created_effect(effect);\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\tif ((type & EFFECT) !== 0) {\n\t\tif (collected_effects !== null) {\n\t\t\t// created during traversal — collect and run afterwards\n\t\t\tcollected_effects.push(effect);\n\t\t} else {\n\t\t\t// schedule for later\n\t\t\tBatch.ensure().schedule(effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// if an effect doesn't need to be kept in the tree (because it\n\t\t// won't re-run, has no DOM, and has no teardown etc)\n\t\t// then we skip it and go to its child (if any)\n\t\tif (\n\t\t\te.deps === null &&\n\t\t\te.teardown === null &&\n\t\t\te.nodes === null &&\n\t\t\te.first === e.last && // either `null`, or a singular child\n\t\t\t(e.f & EFFECT_PRESERVED) === 0\n\t\t) {\n\t\t\te = e.first;\n\t\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(e);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer =\n\t\t!active_reaction &&\n\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\tcomponent_context !== null &&\n\t\t!component_context.i;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t// here, we lie: by setting `active_effect` to be the parent branch, any writes\n\t\t// that happen inside `fn` will _not_ cause an unnecessary reschedule, because\n\t\t// the affected effects will be children of `active_effect`. this is safe\n\t\t// because these effects are known to run in the correct order\n\t\ttry {\n\t\t\tset_active_effect(effect.parent);\n\t\t\tuntrack(fn);\n\t\t} finally {\n\t\t\tset_active_effect(effect);\n\t\t}\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0 && effect.deps !== null) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => {\n\t\t\tfn(...values.map(get));\n\t\t});\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)));\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes !== null &&\n\t\teffect.nodes.end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\tremoved = true;\n\t}\n\n\teffect.f |= DESTROYING;\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\teffect.f ^= DESTROYING;\n\teffect.f |= DESTROYED;\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes =\n\t\teffect.ac =\n\t\teffect.b =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\n\t\t// If this child is a root effect, then it will become an independent root when its parent\n\t\t// is destroyed, it should therefore not become inert nor partake in transitions.\n\t\tif ((child.f & ROOT_EFFECT) === 0) {\n\t\t\tvar transparent =\n\t\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t\t// through the tree.\n\t\t\tpause_children(child, transitions, transparent ? local : false);\n\t\t}\n\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tBatch.ensure().schedule(effect); // Assumption: This happens during the commit phase of the batch, causing another flush, but it's safe\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n","/** @import { Value } from '#client' */\nimport { internal_set } from './reactivity/sources.js';\nimport { untrack } from './runtime.js';\n\n/**\n * @type {Set<Value> | null}\n * @deprecated\n */\nexport let captured_signals = null;\n\n/**\n * Capture an array of all the signals that are read when `fn` is called\n * @template T\n * @param {() => T} fn\n */\nfunction capture_signals(fn) {\n\tvar previous_captured_signals = captured_signals;\n\n\ttry {\n\t\tcaptured_signals = new Set();\n\n\t\tuntrack(fn);\n\n\t\tif (previous_captured_signals !== null) {\n\t\t\tfor (var signal of captured_signals) {\n\t\t\t\tprevious_captured_signals.add(signal);\n\t\t\t}\n\t\t}\n\n\t\treturn captured_signals;\n\t} finally {\n\t\tcaptured_signals = previous_captured_signals;\n\t}\n}\n\n/**\n * Invokes a function and captures all signals that are read during the invocation,\n * then invalidates them.\n * @param {() => any} fn\n * @deprecated\n */\nexport function invalidate_inner_signals(fn) {\n\tfor (var signal of capture_signals(fn)) {\n\t\tinternal_set(signal, signal.v);\n\t}\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function can_delegate_event(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nexport const RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n// Matches valid HTML/SVG/MathML element names and custom element names.\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n//\n// Standard elements: ASCII alpha start, followed by ASCII alphanumerics.\n// Custom elements: ASCII alpha start, followed by any mix of PCENChar (which\n// includes ASCII alphanumerics, `-`, `.`, `_`, and specified Unicode ranges),\n// with at least one hyphen required somewhere after the first character.\n//\n// Rejects strings containing whitespace, quotes, angle brackets, slashes, equals,\n// or other characters that could break out of a tag-name token and enable markup injection.\nexport const REGEX_VALID_TAG_NAME =\n\t/^[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9.\\-_\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u{10000}-\\u{EFFFF}]*)?$/u;\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","/** @type {Map<String, Set<HTMLStyleElement>>} */\nvar all_styles = new Map();\n\n/**\n * @param {String} hash\n * @param {HTMLStyleElement} style\n */\nexport function register_style(hash, style) {\n\tvar styles = all_styles.get(hash);\n\n\tif (!styles) {\n\t\tstyles = new Set();\n\t\tall_styles.set(hash, styles);\n\t}\n\n\tstyles.add(style);\n}\n\n/**\n * @param {String} hash\n */\nexport function cleanup_styles(hash) {\n\tvar styles = all_styles.get(hash);\n\tif (!styles) return;\n\n\tfor (const style of styles) {\n\t\tstyle.remove();\n\t}\n\n\tall_styles.delete(hash);\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * Used on elements, as a map of event type -> event handler,\n * and on events themselves to track which element handled an event\n */\nexport const event_symbol = Symbol('events');\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {Element} element\n * @param {EventListener} [handler]\n * @returns {void}\n */\nexport function delegated(event_name, element, handler) {\n\t// @ts-expect-error\n\t(element[event_symbol] ??= {})[event_name] = handler;\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check `event_symbol` to skip all nodes below it in case this is a\n\t// parent of the `event_symbol` node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event[event_symbol];\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent[event_symbol] = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all events handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\tif (current_target === handler_element) break;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_symbol]?.[event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble) break;\n\n\t\t\tpath_idx++;\n\t\t\tcurrent_target = path_idx < path.length ? /** @type {Element} */ (path[path_idx]) : null;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent[event_symbol] = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","import { create_element } from './operations.js';\n\nconst policy =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\tglobalThis?.window?.trustedTypes &&\n\t/* @__PURE__ */ globalThis.window.trustedTypes.createPolicy('svelte-trusted-html', {\n\t\t/** @param {string} html */\n\t\tcreateHTML: (html) => {\n\t\t\treturn html;\n\t\t}\n\t});\n\n/** @param {string} html */\nexport function create_trusted_html(html) {\n\treturn /** @type {string} */ (policy?.createHTML(html) ?? html);\n}\n\n/**\n * @param {string} html\n */\nexport function create_fragment_from_html(html) {\n\tvar elem = create_element('template');\n\telem.innerHTML = create_trusted_html(html.replaceAll('<!>', '<!---->')); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport {\n\tCOMMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE,\n\tIS_XHTML,\n\tREACTION_RAN,\n\tTEXT_NODE\n} from '#client/constants';\n\nconst TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';\nconst SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {TemplateNode} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.nodeName === TEMPLATE_TAG\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.nodeName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).nodeName === SCRIPT_TAG\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = create_element('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes.start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes.end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\n */\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & REACTION_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`$`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","/** @import { ComponentContext, Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE, STATE_SYMBOL, TEXT_CACHE } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? `${value}` : value;\n\t// prettier-ignore\n\tif (str !== (/** @type {any} */ (text)[TEXT_CACHE] ??= text.nodeValue)) {\n\t\t/** @type {any} */ (text)[TEXT_CACHE] = str;\n\t\ttext.nodeValue = `${str}`;\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = get_first_child(target);\n\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = get_next_sibling(anchor);\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tset_hydrating(false);\n\n\t\treturn /**  @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occurred above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t}\n}\n\n/** @type {Map<EventTarget, Map<string, number>>} */\nconst listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(\n\tComponent,\n\t{ target, anchor, props = {}, events, context, intro = true, transformError }\n) {\n\tinit_operations();\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tif (context) ctx.c = context;\n\n\t\t\t\tif (events) {\n\t\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpop();\n\t\t\t},\n\t\t\ttransformError\n\t\t);\n\n\t\t// Setup event delegation _after_ component is mounted - if an error would happen during mount, it would otherwise not be cleaned up\n\t\t/** @type {Set<string>} */\n\t\tvar registered_events = new Set();\n\n\t\t/** @param {Array<string>} events */\n\t\tvar event_handle = (events) => {\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tvar event_name = events[i];\n\n\t\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\t\tregistered_events.add(event_name);\n\n\t\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t\t// Add the event listener to both the container and the document.\n\t\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t\t// the outer content stops propagation of the event.\n\t\t\t\t//\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = listeners.get(node);\n\n\t\t\t\t\tif (counts === undefined) {\n\t\t\t\t\t\tcounts = new Map();\n\t\t\t\t\t\tlisteners.set(node, counts);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar count = counts.get(event_name);\n\n\t\t\t\t\tif (count === undefined) {\n\t\t\t\t\t\tnode.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\t\t\tcounts.set(event_name, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tevent_handle(array_from(all_registered_events));\n\t\troot_event_handles.add(event_handle);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = /** @type {Map<string, number>} */ (listeners.get(node));\n\t\t\t\t\tvar count = /** @type {number} */ (counts.get(event_name));\n\n\t\t\t\t\tif (--count == 0) {\n\t\t\t\t\t\tnode.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\t\tcounts.delete(event_name);\n\n\t\t\t\t\t\tif (counts.size === 0) {\n\t\t\t\t\t\t\tlisteners.delete(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tif (STATE_SYMBOL in component) {\n\t\t\tw.state_proxy_unmount();\n\t\t} else {\n\t\t\tw.lifecycle_double_unmount();\n\t\t}\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { HMR_ANCHOR } from '../../constants.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\nimport { DEV } from 'esm-env';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#commit = (batch) => {\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// effect could have been outro'ed before through a prior batch — resume if necessary\n\t\t\t\tresume_effect(offscreen.effect);\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\t// Tell hmr.js about the anchor it should use for updates,\n\t\t\t\t\t// since the initial one will be removed\n\t\t\t\t\t/** @type {any} */ (offscreen.fragment.lastChild)[HMR_ANCHOR] = this.anchor;\n\t\t\t\t}\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t//    or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit(batch);\n\t\t}\n\t}\n}\n","/** @import { EachItem, EachOutroGroup, EachState, Effect, EffectNodes, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tshould_defer_append\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { BRANCH_EFFECT, COMMENT_NODE, DESTROYED, EFFECT_OFFSCREEN, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport * as e from '../../errors.js';\nimport { tag } from '../../dev/tracing.js';\n\n// When making substantive changes to this file, validate them with the each block stress test:\n// https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b\n// This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, to_destroy, controlled_anchor) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = to_destroy.length;\n\n\t/** @type {EachOutroGroup} */\n\tvar group;\n\tvar remaining = to_destroy.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tlet effect = to_destroy[i];\n\n\t\tpause_effect(\n\t\t\teffect,\n\t\t\t() => {\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\t\tgroup.done.add(effect);\n\n\t\t\t\t\tif (group.pending.size === 0) {\n\t\t\t\t\t\tvar groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);\n\n\t\t\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\t\t\tgroups.delete(group);\n\n\t\t\t\t\t\tif (groups.size === 0) {\n\t\t\t\t\t\t\tstate.outrogroups = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremaining -= 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t}\n\n\tif (remaining === 0) {\n\t\t// If we're in a controlled each block (i.e. the block is the only child of an\n\t\t// element), and we are removing all items, _and_ there are no out transitions,\n\t\t// we can use the fast path — emptying the element and replacing the anchor\n\t\tvar fast_path = transitions.length === 0 && controlled_anchor !== null;\n\n\t\tif (fast_path) {\n\t\t\tvar anchor = /** @type {Element} */ (controlled_anchor);\n\t\t\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\n\t\t\tclear_text_content(parent_node);\n\t\t\tparent_node.append(anchor);\n\n\t\t\tstate.items.clear();\n\t\t}\n\n\t\tdestroy_effects(state, to_destroy, !fast_path);\n\t} else {\n\t\tgroup = {\n\t\t\tpending: new Set(to_destroy),\n\t\t\tdone: new Set()\n\t\t};\n\n\t\t(state.outrogroups ??= new Set()).add(group);\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {boolean} remove_dom\n */\nfunction destroy_effects(state, to_destroy, remove_dom = true) {\n\t/** @type {Set<Effect> | undefined} */\n\tvar preserved_effects;\n\n\t// The loop-in-a-loop isn't ideal, but we should only hit this in relatively rare cases\n\tif (state.pending.size > 0) {\n\t\tpreserved_effects = new Set();\n\n\t\tfor (const keys of state.pending.values()) {\n\t\t\tfor (const key of keys) {\n\t\t\t\tpreserved_effects.add(/** @type {EachItem} */ (state.items.get(key)).e);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < to_destroy.length; i++) {\n\t\tvar e = to_destroy[i];\n\n\t\tif (preserved_effects?.has(e)) {\n\t\t\te.f |= EFFECT_OFFSCREEN;\n\n\t\t\tconst fragment = document.createDocumentFragment();\n\t\t\tmove_effect(e, fragment);\n\t\t} else {\n\t\t\tdestroy_effect(to_destroy[i], remove_dom);\n\t\t}\n\t}\n}\n\n/** @type {TemplateNode} */\nvar offscreen_anchor;\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {Map<any, EachItem>} */\n\tvar items = new Map();\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(get_first_child(parent_node))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\t// TODO: ideally we could use derived for runes mode but because of the ability\n\t// to use a store which can be mutated, we can't do that here as mutating a store\n\t// will still result in the collection array being the same from the store\n\tvar each_array = derived_safe_equal(() => {\n\t\tvar collection = get_collection();\n\n\t\treturn /** @type {V[]} */ (\n\t\t\tis_array(collection) ? collection : collection == null ? [] : array_from(collection)\n\t\t);\n\t});\n\n\tif (DEV) {\n\t\ttag(each_array, '{#each ...}');\n\t}\n\n\t/** @type {V[]} */\n\tvar array;\n\n\t/** @type {Map<Batch, Set<any>>} */\n\tvar pending = new Map();\n\n\tvar first_run = true;\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction commit(batch) {\n\t\tif ((state.effect.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tstate.pending.delete(batch);\n\n\t\tstate.fallback = fallback;\n\t\treconcile(state, array, anchor, flags, get_key);\n\n\t\tif (fallback !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif ((fallback.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback.f ^= EFFECT_OFFSCREEN;\n\t\t\t\t\tmove(fallback, null, anchor);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\t// TODO only null out if no pending batch needs it,\n\t\t\t\t\t// otherwise re-add `fallback.fragment` and move the\n\t\t\t\t\t// effect into it\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction discard(batch) {\n\t\tstate.pending.delete(batch);\n\t}\n\n\tvar effect = block(() => {\n\t\tarray = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tvar keys = new Set();\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tfor (var index = 0; index < length; index += 1) {\n\t\t\tif (\n\t\t\t\thydrating &&\n\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t) {\n\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\tmismatch = true;\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tvar value = array[index];\n\t\t\tvar key = get_key(value, index);\n\n\t\t\tif (DEV) {\n\t\t\t\t// Check that the key function is idempotent (returns the same value when called twice)\n\t\t\t\tvar key_again = get_key(value, index);\n\t\t\t\tif (key !== key_again) {\n\t\t\t\t\te.each_key_volatile(String(index), String(key), String(key_again));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar item = first_run ? null : items.get(key);\n\n\t\t\tif (item) {\n\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\tif (item.v) internal_set(item.v, value);\n\t\t\t\tif (item.i) internal_set(item.i, index);\n\n\t\t\t\tif (defer) {\n\t\t\t\t\tbatch.unskip_effect(item.e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = create_item(\n\t\t\t\t\titems,\n\t\t\t\t\tfirst_run ? anchor : (offscreen_anchor ??= create_text()),\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\n\t\t\t\tif (!first_run) {\n\t\t\t\t\titem.e.f |= EFFECT_OFFSCREEN;\n\t\t\t\t}\n\n\t\t\t\titems.set(key, item);\n\t\t\t}\n\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tif (length === 0 && fallback_fn && !fallback) {\n\t\t\tif (first_run) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t} else {\n\t\t\t\tfallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));\n\t\t\t\tfallback.f |= EFFECT_OFFSCREEN;\n\t\t\t}\n\t\t}\n\n\t\tif (length > keys.size) {\n\t\t\tif (DEV) {\n\t\t\t\tvalidate_each_keys(array, get_key);\n\t\t\t} else {\n\t\t\t\t// in prod, the additional information isn't printed, so don't bother computing it\n\t\t\t\te.each_key_duplicate('', '', '');\n\t\t\t}\n\t\t}\n\n\t\t// remove excess nodes\n\t\tif (hydrating && length > 0) {\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tif (!first_run) {\n\t\t\tpending.set(batch, keys);\n\n\t\t\tif (defer) {\n\t\t\t\tfor (const [key, item] of items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skip_effect(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.oncommit(commit);\n\t\t\t\tbatch.ondiscard(discard);\n\t\t\t} else {\n\t\t\t\tcommit(batch);\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget(each_array);\n\t});\n\n\t/** @type {EachState} */\n\tvar state = { effect, flags, items, pending, outrogroups: null, fallback };\n\n\tfirst_run = false;\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect\n * @param {Effect | null} effect\n * @returns {Effect | null}\n */\nfunction skip_to_branch(effect) {\n\twhile (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {\n\t\teffect = effect.next;\n\t}\n\treturn effect;\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {EachState} state\n * @param {Array<V>} array\n * @param {Element | Comment | Text} anchor\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @returns {void}\n */\nfunction reconcile(state, array, anchor, flags, get_key) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar current = skip_to_branch(state.effect.first);\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar seen;\n\n\t/** @type {Effect | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar to_animate;\n\n\t/** @type {Effect[]} */\n\tvar matched = [];\n\n\t/** @type {Effect[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {Effect | undefined} */\n\tvar effect;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\t\t// offscreen == coming in now, no animation in that case,\n\t\t\t// else this would happen https://github.com/sveltejs/svelte/issues/17181\n\t\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\teffect.nodes?.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(effect);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\n\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\tif (state.outrogroups !== null) {\n\t\t\tfor (const group of state.outrogroups) {\n\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\tgroup.done.delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & INERT) !== 0) {\n\t\t\tresume_effect(effect);\n\t\t\tif (is_animated) {\n\t\t\t\teffect.nodes?.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) !== 0) {\n\t\t\teffect.f ^= EFFECT_OFFSCREEN;\n\n\t\t\tif (effect === current) {\n\t\t\t\tmove(effect, null, anchor);\n\t\t\t} else {\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tif (effect === state.effect.last) {\n\t\t\t\t\tstate.effect.last = effect.prev;\n\t\t\t\t}\n\n\t\t\t\tif (effect.prev) effect.prev.next = effect.next;\n\t\t\t\tif (effect.next) effect.next.prev = effect.prev;\n\t\t\t\tlink(state, prev, effect);\n\t\t\t\tlink(state, effect, next);\n\n\t\t\t\tmove(effect, next, anchor);\n\t\t\t\tprev = effect;\n\n\t\t\t\tmatched = [];\n\t\t\t\tstashed = [];\n\n\t\t\t\tcurrent = skip_to_branch(prev.next);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (effect !== current) {\n\t\t\tif (seen !== undefined && seen.has(effect)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(effect);\n\t\t\t\t\tmove(effect, current, anchor);\n\n\t\t\t\t\tlink(state, effect.prev, effect.next);\n\t\t\t\t\tlink(state, effect, prev === null ? state.effect.first : prev.next);\n\t\t\t\t\tlink(state, prev, effect);\n\n\t\t\t\t\tprev = effect;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current !== effect) {\n\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = skip_to_branch(current.next);\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\tmatched.push(effect);\n\t\t}\n\n\t\tprev = effect;\n\t\tcurrent = skip_to_branch(effect.next);\n\t}\n\n\tif (state.outrogroups !== null) {\n\t\tfor (const group of state.outrogroups) {\n\t\t\tif (group.pending.size === 0) {\n\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\tstate.outrogroups?.delete(group);\n\t\t\t}\n\t\t}\n\n\t\tif (state.outrogroups.size === 0) {\n\t\t\tstate.outrogroups = null;\n\t\t}\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\t/** @type {Effect[]} */\n\t\tvar to_destroy = [];\n\n\t\tif (seen !== undefined) {\n\t\t\tfor (effect of seen) {\n\t\t\t\tif ((effect.f & INERT) === 0) {\n\t\t\t\t\tto_destroy.push(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif ((current.f & INERT) === 0 && current !== state.fallback) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\n\t\t\tcurrent = skip_to_branch(current.next);\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (effect of to_animate) {\n\t\t\t\teffect.nodes?.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @template V\n * @param {Map<any, EachItem>} items\n * @param {Node} anchor\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @returns {EachItem}\n */\nfunction create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {\n\tvar v =\n\t\t(flags & EACH_ITEM_REACTIVE) !== 0\n\t\t\t? (flags & EACH_ITEM_IMMUTABLE) === 0\n\t\t\t\t? mutable_source(value, false, false)\n\t\t\t\t: source(value)\n\t\t\t: null;\n\n\tvar i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;\n\n\tif (DEV && v) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\tv.trace = () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[i?.v ?? index];\n\t\t};\n\t}\n\n\treturn {\n\t\tv,\n\t\ti,\n\t\te: branch(() => {\n\t\t\trender_fn(anchor, v ?? value, i ?? index, get_collection);\n\n\t\t\treturn () => {\n\t\t\t\titems.delete(key);\n\t\t\t};\n\t\t})\n\t};\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(effect, next, anchor) {\n\tif (!effect.nodes) return;\n\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\tvar dest =\n\t\tnext && (next.f & EFFECT_OFFSCREEN) === 0\n\t\t\t? /** @type {EffectNodes} */ (next.nodes).start\n\t\t\t: anchor;\n\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\n\t\tif (node === end) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect | null} prev\n * @param {Effect | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.effect.first = next;\n\t} else {\n\t\tprev.next = next;\n\t}\n\n\tif (next === null) {\n\t\tstate.effect.last = prev;\n\t} else {\n\t\tnext.prev = prev;\n\t}\n}\n\n/**\n * @param {Array<any>} array\n * @param {(item: any, index: number) => string} key_fn\n * @returns {void}\n */\nfunction validate_each_keys(array, key_fn) {\n\tconst keys = new Map();\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst key = key_fn(array[i], i);\n\n\t\tif (keys.has(key)) {\n\t\t\tconst a = String(keys.get(key));\n\t\t\tconst b = String(i);\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet k = String(key);\n\t\t\tif (k.startsWith('[object ')) k = null;\n\n\t\t\te.each_key_duplicate(a, b, k);\n\t\t}\n\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating,\n\thydrate_node\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, key?: number | false) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\t/** @type {TemplateNode | undefined} */\n\tvar marker;\n\tif (hydrating) {\n\t\tmarker = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {number | false} key\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(key, fn) {\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (marker));\n\n\t\t\t// \"[n\" = branch n, \"[-1\" = else\n\t\t\tif (key !== parseInt(data.substring(1))) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(key, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(key, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, key = 0) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(key, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(-1, null);\n\t\t}\n\t}, flags);\n}\n","/** @import { Snippet } from 'svelte' */\n/** @import { TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport {\n\tdev_current_component_function,\n\tset_dev_current_component_function\n} from '../../context.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport * as e from '../../errors.js';\nimport { DEV } from 'esm-env';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { prevent_snippet_stringification } from '../../../shared/validate.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @template {(node: TemplateNode, ...args: any[]) => void} SnippetFn\n * @param {TemplateNode} node\n * @param {() => SnippetFn | null | undefined} get_snippet\n * @param {(() => any)[]} args\n * @returns {void}\n */\nexport function snippet(node, get_snippet, ...args) {\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tconst snippet = get_snippet() ?? null;\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tbranches.ensure(snippet, snippet && ((anchor) => snippet(anchor, ...args)));\n\t}, EFFECT_TRANSPARENT);\n}\n\n/**\n * In development, wrap the snippet function so that it passes validation, and so that the\n * correct component context is set for ownership checks\n * @param {any} component\n * @param {(node: TemplateNode, ...args: any[]) => void} fn\n */\nexport function wrap_snippet(component, fn) {\n\tconst snippet = (/** @type {TemplateNode} */ node, /** @type {any[]} */ ...args) => {\n\t\tvar previous_component_function = dev_current_component_function;\n\t\tset_dev_current_component_function(component);\n\n\t\ttry {\n\t\t\treturn fn(node, ...args);\n\t\t} finally {\n\t\t\tset_dev_current_component_function(previous_component_function);\n\t\t}\n\t};\n\n\tprevent_snippet_stringification(snippet);\n\n\treturn snippet;\n}\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n *   render: () => string\n *   setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {\n\t\tvar snippet = fn(...params);\n\n\t\t/** @type {Element} */\n\t\tvar element;\n\n\t\tif (hydrating) {\n\t\t\telement = /** @type {Element} */ (hydrate_node);\n\t\t\thydrate_next();\n\t\t} else {\n\t\t\tvar html = snippet.render().trim();\n\t\t\tvar fragment = create_fragment_from_html(html);\n\t\t\telement = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (DEV && (get_next_sibling(element) !== null || element.nodeType !== ELEMENT_NODE)) {\n\t\t\t\tw.invalid_raw_snippet_render();\n\t\t\t}\n\n\t\t\tanchor.before(element);\n\t\t}\n\n\t\tconst result = snippet.setup?.(element);\n\t\tassign_nodes(element, element);\n\n\t\tif (typeof result === 'function') {\n\t\t\tteardown(result);\n\t\t}\n\t};\n}\n","/** @import { TemplateNode, Dom } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { block } from '../../reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\nimport { BranchManager } from './branches.js';\nimport { HYDRATION_START, HYDRATION_START_ELSE } from '../../../../constants.js';\n\n/**\n * @template P\n * @template {(props: P) => void} C\n * @param {TemplateNode} node\n * @param {() => C} get_component\n * @param {(anchor: TemplateNode, component: C) => Dom | void} render_fn\n * @returns {void}\n */\nexport function component(node, get_component, render_fn) {\n\t/** @type {TemplateNode | undefined} */\n\tvar hydration_start_node;\n\n\tif (hydrating) {\n\t\thydration_start_node = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar component = get_component() ?? null;\n\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (hydration_start_node));\n\n\t\t\tvar server_had_component = data === HYDRATION_START;\n\t\t\tvar client_has_component = component !== null;\n\n\t\t\tif (server_had_component !== client_has_component) {\n\t\t\t\t// Hydration mismatch: skip the server-rendered nodes and render fresh\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t}, EFFECT_TRANSPARENT);\n}\n","/** @import { Effect } from '#client' */\nimport { branch, effect, destroy_effect, managed } from '../../reactivity/effects.js';\n\n// TODO in 6.0 or 7.0, when we remove legacy mode, we can simplify this by\n// getting rid of the block/branch stuff and just letting the effect rip.\n// see https://github.com/sveltejs/svelte/pull/15962\n\n/**\n * @param {Element} node\n * @param {() => (node: Element) => void} get_fn\n */\nexport function attach(node, get_fn) {\n\t/** @type {false | undefined | ((node: Element) => void)} */\n\tvar fn = undefined;\n\n\t/** @type {Effect | null} */\n\tvar e;\n\n\tmanaged(() => {\n\t\tif (fn !== (fn = get_fn())) {\n\t\t\tif (e) {\n\t\t\t\tdestroy_effect(e);\n\t\t\t\te = null;\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\te = branch(() => {\n\t\t\t\t\teffect(() => /** @type {(node: Element) => void} */ (fn)(node));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\nimport { has_own_property } from './utils.js';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized =\n\t\t(has_own_property.call(replacements, name) && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? `=\"\"` : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param  {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key of Object.keys(directives)) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key of Object.keys(styles)) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n","/** @import { TemplateNode } from '#client' */\nimport { is_runes } from '../../context.js';\nimport { block } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrating } from '../hydration.js';\nimport { BranchManager } from './branches.js';\n\nconst NAN = Symbol('NaN');\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {() => V} get_key\n * @param {(anchor: Node) => TemplateNode | void} render_fn\n * @returns {void}\n */\nexport function key(node, get_key, render_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tvar legacy = !is_runes();\n\n\tblock(() => {\n\t\tvar key = get_key();\n\n\t\t// NaN !== NaN, hence we do this workaround to not trigger remounts unnecessarily\n\t\tif (key !== key) {\n\t\t\tkey = /** @type {any} */ (NAN);\n\t\t}\n\n\t\t// key blocks in Svelte <5 had stupid semantics\n\t\tif (legacy && key !== null && typeof key === 'object') {\n\t\t\tkey = /** @type {V} */ ({});\n\t\t}\n\n\t\tbranches.ensure(key, render_fn);\n\t});\n}\n","/** @import { Raf } from '#client' */\nimport { noop } from '../shared/utils.js';\n\nimport { BROWSER } from 'esm-env';\n\nconst now = BROWSER ? () => performance.now() : () => Date.now();\n\n/** @type {Raf} */\nexport const raf = {\n\t// don't access requestAnimationFrame eagerly outside method\n\t// this allows basic testing of user code without JSDOM\n\t// bunder will eval and remove ternary when the user's app is built\n\ttick: /** @param {any} _ */ (_) => (BROWSER ? requestAnimationFrame : noop)(_),\n\tnow: () => now(),\n\ttasks: new Set()\n};\n","import { to_class } from '../../../shared/attributes.js';\nimport { CLASS_CACHE } from '../../constants.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\tvar prev = /** @type {any} */ (dom)[CLASS_CACHE];\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {any} */ (dom)[CLASS_CACHE] = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n","import { to_style } from '../../../shared/attributes.js';\nimport { STYLE_CACHE } from '../../constants.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\tvar prev = /** @type {any} */ (dom)[STYLE_CACHE];\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t/** @type {any} */ (dom)[STYLE_CACHE] = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n","/** @import { Blocker, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate, delegated, event, event_symbol } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport {\n\tATTRIBUTES_CACHE,\n\tFORM_RESET_HANDLER,\n\tIS_XHTML,\n\tLOADING_ATTR_SYMBOL\n} from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { branch, destroy_effect, effect, managed } from '../../reactivity/effects.js';\nimport { init_select, select_option } from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\nconst LINK_TAG = IS_XHTML ? 'link' : 'LINK';\nconst INPUT_TAG = IS_XHTML ? 'input' : 'INPUT';\nconst OPTION_TAG = IS_XHTML ? 'option' : 'OPTION';\nconst SELECT_TAG = IS_XHTML ? 'select' : 'SELECT';\nconst PROGRESS_TAG = IS_XHTML ? 'progress' : 'PROGRESS';\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t/** @type {any} */ (input)[FORM_RESET_HANDLER] = remove_defaults;\n\tqueue_micro_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === LINK_TAG)\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.getAttribute('is') || node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.getAttribute('is') || node.nodeName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) {\n\t\tvar input = /** @type {HTMLInputElement} */ (element);\n\t\tvar attribute = input.type === 'checkbox' ? 'defaultChecked' : 'defaultValue';\n\n\t\tif (!(attribute in next)) {\n\t\t\tremove_input_defaults(input);\n\t\t}\n\t}\n\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.nodeName === OPTION_TAG;\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t} else if (css_hash || next[CLASS]) {\n\t\tnext.class = null; /* force call to set_class() */\n\t}\n\n\tif (next[STYLE]) {\n\t\tnext.style ??= null; /* force call to set_style() */\n\t}\n\n\tvar setters = get_setters(element);\n\n\tif (element.nodeName === INPUT_TAG && 'type' in next && ('value' in next || '__value' in next)) {\n\t\tvar type = next.type;\n\n\t\tif (type !== current.type || (type === undefined && element.hasAttribute('type'))) {\n\t\t\tcurrent.type = type;\n\t\t\tset_attribute(element, 'type', type, skip_warning);\n\t\t}\n\t}\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'class') {\n\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'style') {\n\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\n\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar is_delegated = can_delegate_event(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!is_delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (is_delegated) {\n\t\t\t\tdelegated(event_name, element, value);\n\t\t\t\tdelegate([event_name]);\n\t\t\t} else if (value != null) {\n\t\t\t\t/**\n\t\t\t\t * @this {any}\n\t\t\t\t * @param {Event} evt\n\t\t\t\t */\n\t\t\t\tfunction handle(evt) {\n\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t}\n\n\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t}\n\t\t} else if (key === 'style') {\n\t\t\t// avoid using the setter\n\t\t\tset_attribute(element, key, value);\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\telement.value = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t\t// remove it from attributes's cache\n\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(true);\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === SELECT_TAG;\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\n\n\t\t\tif (inited && is_select && 'value' in next) {\n\t\t\t\tselect_option(/** @type {HTMLSelectElement} */ (element), next.value);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tselect_option(select, /** @type {Record<string | symbol, any>} */ (prev).value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t/** @type {any} */ (element)[ATTRIBUTES_CACHE] ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary (and dangerous, like innerHTML) setters we're not interested in\n\t// Do not use constructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (\n\t\t\t\tdescriptors[key].set &&\n\t\t\t\t// better safe than sorry, we don't want spread attributes to mess with HTML content\n\t\t\t\tkey !== 'innerHTML' &&\n\t\t\t\tkey !== 'textContent' &&\n\t\t\t\tkey !== 'innerText'\n\t\t\t) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { tick, untrack } from '../../../runtime.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', async (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\n\t\t// Because `{#each ...}` blocks work by updating sources inside the flush,\n\t\t// we need to wait a tick before checking to see if we should forcibly\n\t\t// update the input and reset the selection state\n\t\tawait tick();\n\n\t\t// Respect any validation in accessors\n\t\tif (value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\t\t\tvar length = input.value.length;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tvar new_length = input.value.length;\n\t\t\t\t// If cursor was at end and new input is longer, move cursor to new end\n\t\t\t\tif (start === end && end === length && new_length > length) {\n\t\t\t\t\tinput.selectionStart = new_length;\n\t\t\t\t\tinput.selectionEnd = new_length;\n\t\t\t\t} else {\n\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\tinput.selectionEnd = Math.min(end, new_length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (input === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Never rewrite the contents of a focused input. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the input:\n\t\t\t//\n\t\t\t// <input bind:value={query}>\n\t\t\t// <p>{await find(query)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\t/** @type {Set<V>} */\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\thydrating &&\n\t\tinput.files\n\t) {\n\t\tset(input.files);\n\t}\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t))\n\t\t);\n\t}\n}\n\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n","/** @import { ComponentContext, Effect } from '#client' */\nimport { DESTROYING, STATE_SYMBOL } from '#client/constants';\nimport { component_context } from '../../../context.js';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../../runtime.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\tvar component_effect = /** @type {ComponentContext} */ (component_context).r;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (!is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullify the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// When the bind:this effect is destroyed, we go up the effect parent chain until we find the last parent effect that is destroyed,\n\t\t\t// or the effect containing the component bind:this is in (whichever comes first). That way we can time the nulling of the binding\n\t\t\t// as close to user/developer expectation as possible.\n\t\t\t// TODO Svelte 6: Decide if we want to keep this logic or just always null the binding in the component effect's teardown\n\t\t\t// (which would be simpler, but less intuitive in some cases, and breaks the `ondestroy-before-cleanup` test)\n\t\t\tlet p = parent;\n\t\t\twhile (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) {\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\tconst teardown = () => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst original_teardown = p.teardown;\n\t\t\tp.teardown = () => {\n\t\t\t\tteardown();\n\t\t\t\toriginal_teardown?.();\n\t\t\t};\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","/** @import { Derived, Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\nimport { effect, render_effect } from './effects.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Set<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.has(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.has(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.has(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.has(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {Set<string>} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(DEV ? { props, exclude, name } : { props, exclude }, rest_props_handler);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\tvar fallback_signal = /** @type {Derived<V> | undefined} */ (undefined);\n\n\tvar get_fallback = () => {\n\t\tif (lazy && runes) {\n\t\t\tfallback_signal ??= derived(/** @type {() => V} */ (fallback));\n\t\t\treturn get(fallback_signal);\n\t\t}\n\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tlet setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\t/** @type {V} */\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (people could access props in a timeout)\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */\nimport { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.js';\nimport { user_pre_effect } from '../internal/client/reactivity/effects.js';\nimport { mutable_source, set } from '../internal/client/reactivity/sources.js';\nimport { hydrate, mount, unmount } from '../internal/client/render.js';\nimport { active_effect, get } from '../internal/client/runtime.js';\nimport { flushSync } from '../internal/client/reactivity/batch.js';\nimport { define_property, is_array } from '../internal/shared/utils.js';\nimport * as e from '../internal/client/errors.js';\nimport * as w from '../internal/client/warnings.js';\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../constants.js';\nimport { component_context, dev_current_component_function } from '../internal/client/context.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\nimport { set_signal_status } from '../internal/client/reactivity/status.js';\n\n/**\n * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {ComponentConstructorOptions<Props> & {\n * \tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n * }} options\n * @returns {SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function createClassComponent(options) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn new Svelte4Component(options);\n}\n\n/**\n * Takes the component function and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots> | Component<Props>} component\n * @returns {ComponentType<SvelteComponent<Props, Events, Slots> & Exports>}\n */\nexport function asClassComponent(component) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn class extends Svelte4Component {\n\t\t/** @param {any} options */\n\t\tconstructor(options) {\n\t\t\tsuper({\n\t\t\t\tcomponent,\n\t\t\t\t...options\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Support using the component as both a class and function during the transition period\n * @typedef  {{new (o: ComponentConstructorOptions): SvelteComponent;(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;}} LegacyComponentType\n */\n\nclass Svelte4Component {\n\t/** @type {any} */\n\t#events;\n\n\t/** @type {Record<string, any>} */\n\t#instance;\n\n\t/**\n\t * @param {ComponentConstructorOptions & {\n\t *  component: any;\n\t * }} options\n\t */\n\tconstructor(options) {\n\t\tvar sources = new Map();\n\n\t\t/**\n\t\t * @param {string | symbol} key\n\t\t * @param {unknown} value\n\t\t */\n\t\tvar add_source = (key, value) => {\n\t\t\tvar s = mutable_source(value, false, false);\n\t\t\tsources.set(key, s);\n\t\t\treturn s;\n\t\t};\n\n\t\t// Replicate coarse-grained props through a proxy that has a version source for\n\t\t// each property, which is incremented on updates to the property itself. Do not\n\t\t// use our $state proxy because that one has fine-grained reactivity.\n\t\tconst props = new Proxy(\n\t\t\t{ ...(options.props || {}), $$events: {} },\n\t\t\t{\n\t\t\t\tget(target, prop) {\n\t\t\t\t\treturn get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\t// Necessary to not throw \"invalid binding\" validation errors on the component side\n\t\t\t\t\tif (prop === LEGACY_PROPS) return true;\n\n\t\t\t\t\tget(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tset(sources.get(prop) ?? add_source(prop, value), value);\n\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.#instance = (options.hydrate ? hydrate : mount)(options.component, {\n\t\t\ttarget: options.target,\n\t\t\tanchor: options.anchor,\n\t\t\tprops,\n\t\t\tcontext: options.context,\n\t\t\tintro: options.intro ?? false,\n\t\t\trecover: options.recover,\n\t\t\ttransformError: options.transformError\n\t\t});\n\n\t\t// We don't flushSync for custom element wrappers or if the user doesn't want it,\n\t\t// or if we're in async mode since `flushSync()` will fail\n\t\tif (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {\n\t\t\tflushSync();\n\t\t}\n\n\t\tthis.#events = props.$$events;\n\n\t\tfor (const key of Object.keys(this.#instance)) {\n\t\t\tif (key === '$set' || key === '$destroy' || key === '$on') continue;\n\t\t\tdefine_property(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#instance[key];\n\t\t\t\t},\n\t\t\t\t/** @param {any} value */\n\t\t\t\tset(value) {\n\t\t\t\t\tthis.#instance[key] = value;\n\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\n\t\tthis.#instance.$set = /** @param {Record<string, any>} next */ (next) => {\n\t\t\tObject.assign(props, next);\n\t\t};\n\n\t\tthis.#instance.$destroy = () => {\n\t\t\tunmount(this.#instance);\n\t\t};\n\t}\n\n\t/** @param {Record<string, any>} props */\n\t$set(props) {\n\t\tthis.#instance.$set(props);\n\t}\n\n\t/**\n\t * @param {string} event\n\t * @param {(...args: any[]) => any} callback\n\t * @returns {any}\n\t */\n\t$on(event, callback) {\n\t\tthis.#events[event] = this.#events[event] || [];\n\n\t\t/** @param {any[]} args */\n\t\tconst cb = (...args) => callback.call(this, ...args);\n\t\tthis.#events[event].push(cb);\n\t\treturn () => {\n\t\t\tthis.#events[event] = this.#events[event].filter(/** @param {any} fn */ (fn) => fn !== cb);\n\t\t};\n\t}\n\n\t$destroy() {\n\t\tthis.#instance.$destroy();\n\t}\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tuser_pre_effect(() => {\n\t\tfn();\n\t\tvar effect = /** @type {import('#client').Effect} */ (active_effect);\n\t\t// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour\n\t\tif ((effect.f & DIRTY) !== 0) {\n\t\t\tlet filename = \"a file (we can't know which one)\";\n\t\t\tif (DEV) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfilename = dev_current_component_function?.[FILENAME] ?? filename;\n\t\t\t}\n\t\t\tw.legacy_recursive_reactive_block(filename);\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\t});\n}\n\n/**\n * Function to mimic the multiple listeners available in svelte 4\n * @deprecated\n * @param {EventListener[]} handlers\n * @returns {EventListener}\n */\nexport function handlers(...handlers) {\n\treturn function (event) {\n\t\tconst { stopImmediatePropagation } = event;\n\t\tlet stopped = false;\n\n\t\tevent.stopImmediatePropagation = () => {\n\t\t\tstopped = true;\n\t\t\tstopImmediatePropagation.call(event);\n\t\t};\n\n\t\tconst errors = [];\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error `this` is not typed\n\t\t\t\thandler?.call(this, event);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\n\t\t\tif (stopped) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n */\nexport function createBubbler() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createBubbler');\n\t}\n\n\treturn (/**@type {string}*/ type) => (/**@type {Event}*/ event) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted,\n\tpassive,\n\tnonpassive\n} from '../internal/client/dom/legacy/event-modifiers.js';\n","import { createClassComponent } from '../../../../legacy/legacy-client.js';\nimport { effect_root, render_effect } from '../../reactivity/effects.js';\nimport { append } from '../template.js';\nimport { define_property, get_descriptor, object_keys } from '../../../shared/utils.js';\nimport { create_element } from '../operations.js';\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n\n/** @type {any} */\nlet SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** @type {any} The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** @type {Record<string, any>} Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\t\t/** @type {any} The managed render effect for reflecting attributes */\n\t\t$$me;\n\t\t/** @type {ShadowRoot | null} The ShadowRoot of the custom element */\n\t\t$$shadowRoot = null;\n\n\t\t/**\n\t\t * @param {*} $$componentCtor\n\t\t * @param {*} $$slots\n\t\t * @param {ShadowRootInit | undefined} shadow_root_init\n\t\t */\n\t\tconstructor($$componentCtor, $$slots, shadow_root_init) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\n\t\t\tif (shadow_root_init) {\n\t\t\t\t// We need to store the reference to shadow root, because `closed` shadow root cannot be\n\t\t\t\t// accessed with `this.shadowRoot`.\n\t\t\t\tthis.$$shadowRoot = this.attachShadow(shadow_root_init);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t/** @param {string} name */\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Element} anchor\n\t\t\t\t\t */\n\t\t\t\t\treturn (anchor) => {\n\t\t\t\t\t\tconst slot = create_element('slot');\n\t\t\t\t\t\tif (name !== 'default') slot.name = name;\n\n\t\t\t\t\t\tappend(anchor, slot);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t/** @type {Record<string, any>} */\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\tif (name === 'default' && !this.$$d.children) {\n\t\t\t\t\t\t\tthis.$$d.children = create_slot(name);\n\t\t\t\t\t\t\t$$slots.default = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$slots[name] = create_slot(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = createClassComponent({\n\t\t\t\t\tcomponent: this.$$ctor,\n\t\t\t\t\ttarget: this.$$shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$host: this\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tthis.$$me = effect_root(() => {\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\t\tfor (const key of object_keys(this.$$c)) {\n\t\t\t\t\t\t\tif (!this.$$p_d[key]?.reflect) continue;\n\t\t\t\t\t\t\tthis.$$d[key] = this.$$c[key];\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.$$r = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\n\t\t/**\n\t\t * @param {string} attr\n\t\t * @param {string} _oldValue\n\t\t * @param {string} newValue\n\t\t */\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$me();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * @param {string} attribute_name\n\t\t */\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tobject_keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction get_custom_elements_slots(element) {\n\t/** @type {Record<string, true>} */\n\tconst result = {};\n\telement.childNodes.forEach((node) => {\n\t\tresult[/** @type {Element} node */ (node).slot || 'default'] = true;\n\t});\n\treturn result;\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {any} Component  A Svelte component function\n * @param {Record<string, CustomElementPropDefinition>} props_definition  The props to observe\n * @param {string[]} slots  The slots to create\n * @param {string[]} exports  Explicitly exported values, other than props\n * @param {ShadowRootInit | undefined} shadow_root_init  Options passed to shadow DOM constructor\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\texports,\n\tshadow_root_init,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, shadow_root_init);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn object_keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tobject_keys(props_definition).forEach((prop) => {\n\t\tdefine_property(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tvar component = this.$$c;\n\n\t\t\t\tif (component) {\n\t\t\t\t\t// // If the instance has an accessor, use that instead\n\t\t\t\t\tvar setter = get_descriptor(component, prop)?.get;\n\n\t\t\t\t\tif (setter) {\n\t\t\t\t\t\tcomponent[prop] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomponent.$set({ [prop]: value });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\texports.forEach((property) => {\n\t\tdefine_property(Class.prototype, property, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[property];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ Class;\n\treturn Class;\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: null; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","/** @import { Source } from '#client' */\nimport { derived } from '../internal/client/index.js';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { active_reaction, get, set_active_reaction } from '../internal/client/runtime.js';\nimport { DEV } from 'esm-env';\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object.\n * Reading the date (whether with methods like `date.getTime()` or `date.toString()`, or via things like [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))\n * in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated when the value of the date changes.\n *\n * ```svelte\n * <script>\n * \timport { SvelteDate } from 'svelte/reactivity';\n *\n * \tconst date = new SvelteDate();\n *\n * \tconst formatter = new Intl.DateTimeFormat(undefined, {\n * \t  hour: 'numeric',\n * \t  minute: 'numeric',\n * \t  second: 'numeric'\n * \t});\n *\n * \t$effect(() => {\n * \t\tconst interval = setInterval(() => {\n * \t\t\tdate.setTime(Date.now());\n * \t\t}, 1000);\n *\n * \t\treturn () => {\n * \t\t\tclearInterval(interval);\n * \t\t};\n * \t});\n * </script>\n *\n * <p>The time is {formatter.format(date)}</p>\n * ```\n */\nexport class SvelteDate extends Date {\n\t#time = state(super.getTime());\n\n\t/** @type {Map<keyof Date, Source<unknown>>} */\n\t#deriveds = new Map();\n\n\t#reaction = active_reaction;\n\n\t/** @param {any[]} params */\n\tconstructor(...params) {\n\t\t// @ts-ignore\n\t\tsuper(...params);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#time, 'SvelteDate.#time');\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteDate.prototype;\n\t\tvar date_proto = Date.prototype;\n\n\t\tvar methods = /** @type {Array<keyof Date & string>} */ (\n\t\t\tObject.getOwnPropertyNames(date_proto)\n\t\t);\n\n\t\tfor (const method of methods) {\n\t\t\tif (method.startsWith('get') || method.startsWith('to') || method === 'valueOf') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tproto[method] = function (...args) {\n\t\t\t\t\t// don't memoize if there are arguments\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (args.length > 0) {\n\t\t\t\t\t\tget(this.#time);\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\treturn date_proto[method].apply(this, args);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar d = this.#deriveds.get(method);\n\n\t\t\t\t\tif (d === undefined) {\n\t\t\t\t\t\t// lazily create the derived, but as though it were being\n\t\t\t\t\t\t// created at the same time as the class instance\n\t\t\t\t\t\tconst reaction = active_reaction;\n\t\t\t\t\t\tset_active_reaction(this.#reaction);\n\n\t\t\t\t\t\td = derived(() => {\n\t\t\t\t\t\t\tget(this.#time);\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn date_proto[method].apply(this, args);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(d, `SvelteDate.${method}()`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.#deriveds.set(method, d);\n\n\t\t\t\t\t\tset_active_reaction(reaction);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn get(d);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (method.startsWith('set')) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tproto[method] = function (...args) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tvar result = date_proto[method].apply(this, args);\n\t\t\t\t\tset(this.#time, date_proto.getTime.call(this));\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { source, set, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\nvar read_methods = ['forEach', 'isDisjointFrom', 'isSubsetOf', 'isSupersetOf'];\nvar set_like_methods = ['difference', 'intersection', 'symmetricDifference', 'union'];\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) object.\n * Reading contents of the set (by iterating, or by reading `set.size` or calling `set.has(...)` as in the [example](https://svelte.dev/playground/53438b51194b4882bcc18cddf9f96f15) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the set is updated.\n *\n * Note that values in a reactive set are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteSet } from 'svelte/reactivity';\n * \tlet monkeys = new SvelteSet();\n *\n * \tfunction toggle(monkey) {\n * \t\tif (monkeys.has(monkey)) {\n * \t\t\tmonkeys.delete(monkey);\n * \t\t} else {\n * \t\t\tmonkeys.add(monkey);\n * \t\t}\n * \t}\n * </script>\n *\n * {#each ['🙈', '🙉', '🙊'] as monkey}\n * \t<button onclick={() => toggle(monkey)}>{monkey}</button>\n * {/each}\n *\n * <button onclick={() => monkeys.clear()}>clear</button>\n *\n * {#if monkeys.has('🙈')}<p>see no evil</p>{/if}\n * {#if monkeys.has('🙉')}<p>hear no evil</p>{/if}\n * {#if monkeys.has('🙊')}<p>speak no evil</p>{/if}\n * ```\n *\n * @template T\n * @extends {Set<T>}\n */\nexport class SvelteSet extends Set {\n\t/** @type {Map<T, Source<boolean>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<T> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Set(value);\n\n\t\t\ttag(this.#version, 'SvelteSet version');\n\t\t\ttag(this.#size, 'SvelteSet.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var element of value) {\n\t\t\t\tsuper.add(element);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteSet instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t// We init as part of the first instance so that we can treeshake this class\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteSet.prototype;\n\t\tvar set_proto = Set.prototype;\n\n\t\tfor (const method of read_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn set_proto[method].apply(this, v);\n\t\t\t};\n\t\t}\n\n\t\tfor (const method of set_like_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar set = /** @type {Set<T>} */ (set_proto[method].apply(this, v));\n\t\t\t\treturn new SvelteSet(set);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @param {T} value */\n\thas(value) {\n\t\tvar has = super.has(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s === undefined) {\n\t\t\tif (!has) {\n\t\t\t\t// If the value doesn't exist, track the version in case it's added later\n\t\t\t\t// but don't create sources willy-nilly to track all possible values\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ts = this.#source(true);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteSet has(${label(value)})`);\n\t\t\t}\n\n\t\t\tsources.set(value, s);\n\t\t}\n\n\t\tget(s);\n\t\treturn has;\n\t}\n\n\t/** @param {T} value */\n\tadd(value) {\n\t\tif (!super.has(value)) {\n\t\t\tsuper.add(value);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @param {T} value */\n\tdelete(value) {\n\t\tvar deleted = super.delete(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(value);\n\t\t\tset(s, false);\n\t\t}\n\n\t\tif (deleted) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn deleted;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, false);\n\t\t}\n\n\t\tsources.clear();\n\t\tset(this.#size, 0);\n\t\tincrement(this.#version);\n\t}\n\n\tkeys() {\n\t\treturn this.values();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.keys();\n\t}\n\n\tget size() {\n\t\treturn get(this.#size);\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { set, source, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\n/**\n * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.\n * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the map is updated.\n *\n * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteMap } from 'svelte/reactivity';\n * \timport { result } from './game.js';\n *\n * \tlet board = new SvelteMap();\n * \tlet player = $state('x');\n * \tlet winner = $derived(result(board));\n *\n * \tfunction reset() {\n * \t\tplayer = 'x';\n * \t\tboard.clear();\n * \t}\n * </script>\n *\n * <div class=\"board\">\n * \t{#each Array(9), i}\n * \t\t<button\n * \t\t\tdisabled={board.has(i) || winner}\n * \t\t\tonclick={() => {\n * \t\t\t\tboard.set(i, player);\n * \t\t\t\tplayer = player === 'x' ? 'o' : 'x';\n * \t\t\t}}\n * \t\t>{board.get(i)}</button>\n * \t{/each}\n * </div>\n *\n * {#if winner}\n * \t<p>{winner} wins!</p>\n * \t<button onclick={reset}>reset</button>\n * {:else}\n * \t<p>{player} is next</p>\n * {/if}\n * ```\n *\n * @template K\n * @template V\n * @extends {Map<K, V>}\n */\nexport class SvelteMap extends Map {\n\t/** @type {Map<K, Source<number>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<readonly [K, V]> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Map(value);\n\n\t\t\ttag(this.#version, 'SvelteMap version');\n\t\t\ttag(this.#size, 'SvelteMap.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var [key, v] of value) {\n\t\t\t\tsuper.set(key, v);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteMap instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t/** @param {K} key */\n\thas(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn\n\t * @param {any} [this_arg]\n\t */\n\tforEach(callbackfn, this_arg) {\n\t\tthis.#read_all();\n\t\tsuper.forEach(callbackfn, this_arg);\n\t}\n\n\t/** @param {K} key */\n\tget(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn super.get(key);\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @param {V} value\n\t * */\n\tset(key, value) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar prev_res = super.get(key);\n\t\tvar res = super.set(key, value);\n\t\tvar version = this.#version;\n\n\t\tif (s === undefined) {\n\t\t\ts = this.#source(0);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t}\n\n\t\t\tsources.set(key, s);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(version);\n\t\t} else if (prev_res !== value) {\n\t\t\tincrement(s);\n\n\t\t\t// if not every reaction of s is a reaction of version we need to also include version\n\t\t\tvar v_reactions = version.reactions === null ? null : new Set(version.reactions);\n\t\t\tvar needs_version_increase =\n\t\t\t\tv_reactions === null ||\n\t\t\t\t!s.reactions?.every((r) =>\n\t\t\t\t\t/** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)\n\t\t\t\t);\n\t\t\tif (needs_version_increase) {\n\t\t\t\tincrement(version);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/** @param {K} key */\n\tdelete(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar res = super.delete(key);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(key);\n\t\t\tset(s, -1);\n\t\t}\n\n\t\tif (res) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\t\tset(this.#size, 0);\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, -1);\n\t\t}\n\t\tincrement(this.#version);\n\t\tsources.clear();\n\t}\n\n\t#read_all() {\n\t\tget(this.#version);\n\n\t\tvar sources = this.#sources;\n\t\tif (this.#size.v !== sources.size) {\n\t\t\tfor (var key of super.keys()) {\n\t\t\t\tif (!sources.has(key)) {\n\t\t\t\t\tvar s = this.#source(0);\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.set(key, s);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ([, s] of this.#sources) {\n\t\t\tget(s);\n\t\t}\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\tvalues() {\n\t\tthis.#read_all();\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tthis.#read_all();\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#size);\n\t\treturn super.size;\n\t}\n}\n","import { DEV } from 'esm-env';\nimport { state, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { get_current_url } from './url.js';\n\nexport const REPLACE = Symbol('replace');\n\n/**\n * A reactive version of the built-in [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object.\n * Reading its contents (by iterating, or by calling `params.get(...)` or `params.getAll(...)` as in the [example](https://svelte.dev/playground/b3926c86c5384bab9f2cf993bc08c1c8) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the params are updated.\n *\n * ```svelte\n * <script>\n * \timport { SvelteURLSearchParams } from 'svelte/reactivity';\n *\n * \tconst params = new SvelteURLSearchParams('message=hello');\n *\n * \tlet key = $state('key');\n * \tlet value = $state('value');\n * </script>\n *\n * <input bind:value={key} />\n * <input bind:value={value} />\n * <button onclick={() => params.append(key, value)}>append</button>\n *\n * <p>?{params.toString()}</p>\n *\n * {#each params as [key, value]}\n * \t<p>{key}: {value}</p>\n * {/each}\n * ```\n */\nexport class SvelteURLSearchParams extends URLSearchParams {\n\t#version = DEV ? tag(state(0), 'SvelteURLSearchParams version') : state(0);\n\t#url = get_current_url();\n\n\t#updating = false;\n\n\t#update_url() {\n\t\tif (!this.#url || this.#updating) return;\n\t\tthis.#updating = true;\n\n\t\tconst search = this.toString();\n\t\tthis.#url.search = search && `?${search}`;\n\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {URLSearchParams} params\n\t * @internal\n\t */\n\t[REPLACE](params) {\n\t\tif (this.#updating) return;\n\n\t\t// the URL may have changed in a way that leaves the search string untouched —\n\t\t// don't rebuild the params or notify readers if nothing changed\n\t\tif (params.toString() === super.toString()) return;\n\n\t\tthis.#updating = true;\n\n\t\tfor (const key of [...super.keys()]) {\n\t\t\tsuper.delete(key);\n\t\t}\n\n\t\tfor (const [key, value] of params) {\n\t\t\tsuper.append(key, value);\n\t\t}\n\n\t\tincrement(this.#version);\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tappend(name, value) {\n\t\tsuper.append(name, value);\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {void}\n\t */\n\tdelete(name, value) {\n\t\tvar has_value = super.has(name, value);\n\t\tsuper.delete(name, value);\n\t\tif (has_value) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string|null}\n\t */\n\tget(name) {\n\t\tget(this.#version);\n\t\treturn super.get(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string[]}\n\t */\n\tgetAll(name) {\n\t\tget(this.#version);\n\t\treturn super.getAll(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {boolean}\n\t */\n\thas(name, value) {\n\t\tget(this.#version);\n\t\treturn super.has(name, value);\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\t/**\n\t * @param {(value: string, key: string, parent: URLSearchParams) => void} callback\n\t * @param {any} [this_arg]\n\t * @returns {void}\n\t */\n\tforEach(callback, this_arg) {\n\t\tget(this.#version);\n\t\tsuper.forEach(callback, this_arg);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tset(name, value) {\n\t\tvar previous = super.getAll(name);\n\t\tsuper.set(name, value);\n\t\t// can't use has(name, value), because for something like https://svelte.dev?foo=1&bar=2&foo=3\n\t\t// if you set `foo` to 1, then foo=3 gets deleted whilst `has(\"foo\", \"1\")` returns true\n\t\tvar current = super.getAll(name);\n\t\tif (previous.length !== current.length || previous.some((value, i) => value !== current[i])) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\tsort() {\n\t\tsuper.sort();\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\ttoString() {\n\t\tget(this.#version);\n\t\treturn super.toString();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#version);\n\t\treturn super.size;\n\t}\n}\n","/*!\n * EventCalendar v5.12.0\n * https://github.com/vkurko/calendar\n */\nimport { getAbortSignal, getContext, mount, onMount, setContext, tick, unmount, untrack } from \"svelte\";\nimport * as $ from \"svelte/internal/client\";\nimport \"svelte/internal/disclose-version\";\nimport { SvelteMap } from \"svelte/reactivity\";\n//#region packages/core/src/lib/a11y.js\nfunction keyEnter(fn, _this = void 0) {\n\treturn function(e) {\n\t\treturn e.key === \"Enter\" || e.key === \" \" && !e.preventDefault() ? fn.call(_this, e) : void 0;\n\t};\n}\n//#endregion\n//#region packages/core/src/lib/attachments.js\nfunction contentFrom(content, snippet) {\n\tif (snippet) return null;\n\treturn (el) => {\n\t\tif (typeof content == \"string\") el.innerText = content;\n\t\telse if (content?.domNodes) el.replaceChildren(...content.domNodes);\n\t\telse if (content?.html) el.innerHTML = content.html;\n\t};\n}\n/** Dispatch event occurred outside of node */\nfunction outsideEvent(type) {\n\treturn (el) => {\n\t\tlet listener = (jsEvent) => {\n\t\t\tif (el && !el.contains(jsEvent.target)) el.dispatchEvent(new CustomEvent(type + \"outside\", { detail: { jsEvent } }));\n\t\t};\n\t\tdocument.addEventListener(type, listener, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(type, listener, true);\n\t\t};\n\t};\n}\nfunction resizeObserver(callback) {\n\treturn (el) => {\n\t\tlet observer = new ResizeObserver((entries) => {\n\t\t\tfor (let entry of entries) callback(el, entry);\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => {\n\t\t\tobserver.unobserve(el);\n\t\t};\n\t};\n}\nfunction intersectionObserver(callback, options) {\n\treturn (el) => {\n\t\tlet observer = new IntersectionObserver((entries) => {\n\t\t\tfor (let entry of entries) callback(el, entry);\n\t\t}, options);\n\t\tobserver.observe(el);\n\t\treturn () => {\n\t\t\tobserver.unobserve(el);\n\t\t};\n\t};\n}\n//#endregion\n//#region packages/core/src/lib/utils.js\nfunction assign(...args) {\n\treturn Object.assign(...args);\n}\nfunction keys(object) {\n\treturn Object.keys(object);\n}\nfunction entries(object) {\n\treturn Object.entries(object);\n}\nfunction hasOwn(object, property) {\n\treturn Object.hasOwn(object, property);\n}\nfunction floor(value) {\n\treturn Math.floor(value);\n}\nfunction ceil(value) {\n\treturn Math.ceil(value);\n}\nfunction min(...args) {\n\treturn Math.min(...args);\n}\nfunction max(...args) {\n\treturn Math.max(...args);\n}\nfunction symbol() {\n\treturn Symbol(\"ec\");\n}\nfunction length(array) {\n\treturn array.length;\n}\nfunction empty(array) {\n\treturn !length(array);\n}\nfunction tzOffset(date = /* @__PURE__ */ new Date()) {\n\treturn -date.getTimezoneOffset();\n}\nfunction isArray(value) {\n\treturn Array.isArray(value);\n}\nfunction isFunction(value) {\n\treturn typeof value === \"function\";\n}\nfunction isPlainObject(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n}\nfunction isDate(value) {\n\treturn value instanceof Date;\n}\nfunction run(fn) {\n\treturn fn();\n}\nfunction runAll(fns) {\n\tfns.forEach(run);\n}\nfunction noop() {}\nvar identity = (x) => x;\nfunction isRtl() {\n\treturn window.getComputedStyle(document.documentElement).direction === \"rtl\";\n}\nfunction undefinedOr(fn) {\n\treturn (input) => input === void 0 ? void 0 : fn(input);\n}\n//#endregion\n//#region packages/core/src/lib/content.js\n/**\n* Resolve the content of an option, which can be given as a value, as a function or as a Svelte snippet.\n* `arg` and `fallback` are functions, so that they are evaluated only when they are actually needed.\n* Returns `{content}` for the value/function form and `{snippet, arg}` for the snippet form.\n*/\nfunction createContent(option, arg, fallback, snippet) {\n\tif (snippet) return {\n\t\tsnippet,\n\t\targ: arg?.()\n\t};\n\treturn { content: (isFunction(option) ? option(arg?.()) : option) ?? (isFunction(fallback) ? fallback() : fallback) };\n}\n//#endregion\n//#region packages/core/src/lib/date.js\nvar DAY_IN_SECONDS = 86400;\nfunction createDate(input = /* @__PURE__ */ new Date(), offset = void 0) {\n\treturn isDate(input) ? _fromLocalDate(input, offset) : _fromISOString(input, offset);\n}\nfunction createDuration(input) {\n\tif (typeof input === \"number\") input = { seconds: input };\n\telse if (typeof input === \"string\") {\n\t\tlet seconds = 0, exp = 2;\n\t\tfor (let part of input.split(\":\", 3)) seconds += parseInt(part, 10) * Math.pow(60, exp--);\n\t\tinput = { seconds };\n\t} else if (isDate(input)) input = {\n\t\thours: input.getUTCHours(),\n\t\tminutes: input.getUTCMinutes(),\n\t\tseconds: input.getUTCSeconds()\n\t};\n\tlet weeks = input.weeks || input.week || 0;\n\treturn {\n\t\tyears: input.years || input.year || 0,\n\t\tmonths: input.months || input.month || 0,\n\t\tdays: weeks * 7 + (input.days || input.day || 0),\n\t\tseconds: (input.hours || input.hour || 0) * 60 * 60 + (input.minutes || input.minute || 0) * 60 + (input.seconds || input.second || 0),\n\t\tinWeeks: !!weeks\n\t};\n}\nfunction cloneDate(date) {\n\tlet result = new Date(date.getTime());\n\tsetOffset(result, getOffset(date));\n\treturn result;\n}\nfunction addDuration(date, duration, x = 1) {\n\tdate.setUTCFullYear(date.getUTCFullYear() + x * duration.years);\n\tlet month = date.getUTCMonth() + x * duration.months;\n\tdate.setUTCMonth(month);\n\tmonth %= 12;\n\tif (month < 0) month += 12;\n\twhile (date.getUTCMonth() !== month) subtractDay(date);\n\tdate.setUTCDate(date.getUTCDate() + x * duration.days);\n\tdate.setUTCSeconds(date.getUTCSeconds() + x * duration.seconds);\n\treturn date;\n}\nfunction subtractDuration(date, duration, x = 1) {\n\treturn addDuration(date, duration, -x);\n}\nfunction addDay(date, x = 1) {\n\tdate.setUTCDate(date.getUTCDate() + x);\n\treturn date;\n}\nfunction subtractDay(date, x = 1) {\n\treturn addDay(date, -x);\n}\nfunction setMidnight(date) {\n\tdate.setUTCHours(0, 0, 0, 0);\n\treturn date;\n}\nfunction toLocalDate(date) {\n\treturn new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\n}\nfunction toISOString(date, len = 19) {\n\treturn date.toISOString().substring(0, len);\n}\nfunction datesEqual(date1, ...dates2) {\n\treturn dates2.every((date2) => date1.getTime() === date2.getTime());\n}\nfunction nextClosestDay(date, day) {\n\tlet diff = day - date.getUTCDay();\n\tdate.setUTCDate(date.getUTCDate() + (diff >= 0 ? diff : diff + 7));\n\treturn date;\n}\nfunction prevClosestDay(date, day) {\n\tlet diff = day - date.getUTCDay();\n\tdate.setUTCDate(date.getUTCDate() + (diff <= 0 ? diff : diff - 7));\n\treturn date;\n}\n/**\n* Check whether given date is string which contains no time part\n*/\nfunction noTimePart(date) {\n\treturn typeof date === \"string\" && date.length <= 10;\n}\n/**\n* Copy time from one date to another\n*/\nfunction copyTime(toDate, fromDate) {\n\ttoDate.setUTCHours(fromDate.getUTCHours(), fromDate.getUTCMinutes(), fromDate.getUTCSeconds(), 0);\n\treturn toDate;\n}\n/**\n* Get duration value in seconds\n*/\nfunction toSeconds(duration) {\n\treturn duration.seconds;\n}\n/**\n* Move the date forward (when pressing the next button)\n*/\nfunction nextDate(date, duration, hiddenDays) {\n\taddDuration(date, duration);\n\t_skipHiddenDays(date, hiddenDays, addDay);\n\treturn date;\n}\n/**\n* Move the date backward (when pressing the prev button)\n*/\nfunction prevDate(date, duration, hiddenDays) {\n\tsubtractDuration(date, duration);\n\t_skipHiddenDays(date, hiddenDays, subtractDay);\n\treturn date;\n}\n/**\n* For a given date, get its week number\n*  - ISO @see https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php\n*  - Western @see https://en.wikipedia.org/wiki/Week#Other_week_numbering_systems\n*/\nfunction getWeekNumber(date, firstDay) {\n\tdate = cloneDate(date);\n\tif (firstDay === 0) date.setUTCDate(date.getUTCDate() + 6 - date.getUTCDay());\n\telse date.setUTCDate(date.getUTCDate() + 4 - (date.getUTCDay() || 7));\n\tlet yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\n\treturn Math.ceil(((date - yearStart) / 1e3 / DAY_IN_SECONDS + 1) / 7);\n}\nfunction createWeekNumberContent(week, date, weekNumberContent, snippet) {\n\treturn createContent(weekNumberContent, () => ({\n\t\tdate: toLocalDate(date),\n\t\tweek\n\t}), () => \"W\" + String(week).padStart(2, \"0\"), snippet);\n}\nfunction parseOffset(str, match = {}) {\n\tlet parts = str.match(/([+-])(\\d{2}):(\\d{2})$/);\n\tif (parts) {\n\t\tassign(match, parts);\n\t\treturn +(parts[1] + \"1\") * (+parts[2] * 60 + +parts[3]);\n\t}\n}\n/**\n* Apply timezone offset difference in minutes to a date\n*/\nfunction applyOffsetDiff(date, offsetDiff) {\n\tif (offsetDiff) date.setUTCMinutes(date.getUTCMinutes() + offsetDiff);\n\treturn date;\n}\nvar offsetSymbol = Symbol(\"ec\");\nfunction setOffset(date, offset) {\n\tdate[offsetSymbol] = offset;\n\treturn date;\n}\nfunction getOffset(date) {\n\treturn date[offsetSymbol];\n}\n/**\n* Private functions\n*/\nfunction _fromLocalDate(date, offset = void 0) {\n\tlet result = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));\n\tapplyOffsetDiff(result, offset ? offset - tzOffset(result) : 0);\n\tsetOffset(result, offset ?? tzOffset(result));\n\treturn result;\n}\nfunction _fromISOString(str, offset = void 0) {\n\tlet match = {};\n\tlet inputOffset = parseOffset(str, match);\n\tif (inputOffset !== void 0) str = str.substring(0, match.index);\n\tlet parts = str.match(/\\d+/g);\n\tlet result = new Date(Date.UTC(+parts[0], +parts[1] - 1, +parts[2], +parts[3] || 0, +parts[4] || 0, +parts[5] || 0));\n\tif (offset !== void 0 && inputOffset !== void 0) applyOffsetDiff(result, offset - inputOffset);\n\tsetOffset(result, offset ?? inputOffset);\n\treturn result;\n}\nfunction _skipHiddenDays(date, hiddenDays, dateFn) {\n\tif (hiddenDays.length && hiddenDays.length < 7) while (hiddenDays.includes(date.getUTCDay())) dateFn(date);\n}\n//#endregion\n//#region packages/core/src/lib/payload.js\nvar payloadProp = symbol();\nfunction setPayload(obj, payload) {\n\tobj[payloadProp] = payload;\n}\nfunction hasPayload(obj) {\n\treturn !!obj?.[payloadProp];\n}\nfunction getPayload(obj) {\n\treturn obj[payloadProp];\n}\n//#endregion\n//#region packages/core/src/lib/dom.js\nfunction createElement(tag, className, content, attrs = []) {\n\tlet el = document.createElement(tag);\n\tel.className = className;\n\tif (typeof content == \"string\") el.innerText = content;\n\telse if (content.domNodes) el.replaceChildren(...content.domNodes);\n\telse if (content.html) el.innerHTML = content.html;\n\tfor (let attr of attrs) el.setAttribute(...attr);\n\treturn el;\n}\nfunction rect(el) {\n\treturn el.getBoundingClientRect();\n}\nfunction ancestor(el, up) {\n\twhile (up--) el = el.parentElement;\n\treturn el;\n}\nfunction height(el) {\n\treturn rect(el).height;\n}\nfunction getElementWithPayload(x, y, root = document, processed = []) {\n\tprocessed.push(root);\n\tfor (let el of root.elementsFromPoint(x, y)) {\n\t\tif (hasPayload(el)) return el;\n\t\t/** @see https://github.com/vkurko/calendar/issues/142 */\n\t\tif (el.shadowRoot && !processed.includes(el.shadowRoot)) {\n\t\t\tlet shadowEl = getElementWithPayload(x, y, el.shadowRoot, processed);\n\t\t\tif (shadowEl) return shadowEl;\n\t\t}\n\t}\n\treturn null;\n}\nfunction listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\nfunction stopPropagation(fn, _this = void 0) {\n\treturn function(jsEvent) {\n\t\tjsEvent.stopPropagation();\n\t\tif (fn) fn.call(_this, jsEvent);\n\t};\n}\n//#endregion\n//#region packages/core/src/lib/view.js\nfunction createView(view, _viewTitle, _currentRange, _activeRange) {\n\treturn {\n\t\ttype: view,\n\t\ttitle: _viewTitle,\n\t\tcurrentStart: _currentRange.start,\n\t\tcurrentEnd: _currentRange.end,\n\t\tactiveStart: _activeRange.start,\n\t\tactiveEnd: _activeRange.end,\n\t\tcalendar: void 0\n\t};\n}\nfunction toViewWithLocalDates(view) {\n\tview = assign({}, view);\n\tview.currentStart = toLocalDate(view.currentStart);\n\tview.currentEnd = toLocalDate(view.currentEnd);\n\tview.activeStart = toLocalDate(view.activeStart);\n\tview.activeEnd = toLocalDate(view.activeEnd);\n\treturn view;\n}\n//#endregion\n//#region packages/core/src/lib/events.js\nvar eventId = 1;\nfunction createEvents(input, offset = void 0) {\n\treturn input.map((event) => {\n\t\tlet result = {\n\t\t\tid: \"id\" in event ? String(event.id) : `{generated-${eventId++}}`,\n\t\t\tresourceIds: toArrayProp(event, \"resourceId\").map(String),\n\t\t\tallDay: event.allDay ?? (noTimePart(event.start) && noTimePart(event.end)),\n\t\t\tstart: createDate(event.start, offset),\n\t\t\tend: createDate(event.end, offset),\n\t\t\ttitle: event.title ?? \"\",\n\t\t\teditable: event.editable,\n\t\t\tstartEditable: event.startEditable,\n\t\t\tdurationEditable: event.durationEditable,\n\t\t\tdisplay: event.display ?? \"auto\",\n\t\t\textendedProps: event.extendedProps ?? {},\n\t\t\tbackgroundColor: event.backgroundColor ?? event.color,\n\t\t\ttextColor: event.textColor,\n\t\t\tclassNames: toArrayProp(event, \"className\"),\n\t\t\tstyles: toArrayProp(event, \"style\")\n\t\t};\n\t\tif (result.allDay) {\n\t\t\tsetMidnight(result.start);\n\t\t\tlet end = cloneDate(result.end);\n\t\t\tsetMidnight(result.end);\n\t\t\tif (!datesEqual(result.end, end) || datesEqual(result.end, result.start)) addDay(result.end);\n\t\t}\n\t\treturn result;\n\t});\n}\nfunction toArrayProp(input, propName) {\n\tlet result = input[propName + \"s\"] ?? input[propName] ?? [];\n\treturn isArray(result) ? result : [result];\n}\nfunction createEventSources(input) {\n\treturn input.map((source) => ({\n\t\tevents: source.events,\n\t\turl: source.url && source.url.trimEnd(\"&\") || \"\",\n\t\tmethod: source.method && source.method.toUpperCase() || \"GET\",\n\t\textraParams: source.extraParams || {}\n\t}));\n}\nfunction createEventTimeText(chunk, displayEventEnd, _intlEventTime) {\n\treturn _intlEventTime.formatRange(chunk.start, displayEventEnd && chunk.event.display !== \"pointer\" && !chunk.zeroDuration ? copyTime(cloneDate(chunk.start), chunk.end) : chunk.start);\n}\nfunction createDefaultEventContent(chunk, timeText, theme) {\n\tlet domNodes;\n\tswitch (chunk.event.display) {\n\t\tcase \"background\":\n\t\t\tdomNodes = [];\n\t\t\tbreak;\n\t\tcase \"pointer\":\n\t\t\tdomNodes = chunk.event.allDay ? [] : [createTimeElement(timeText, chunk, theme)];\n\t\t\tbreak;\n\t\tdefault: domNodes = [...chunk.event.allDay ? [] : [createTimeElement(timeText, chunk, theme)], createElement(\"h4\", theme.eventTitle, chunk.event.title)];\n\t}\n\treturn { domNodes };\n}\nfunction createTimeElement(timeText, chunk, theme) {\n\treturn createElement(\"time\", theme.eventTime, timeText, [[\"datetime\", toISOString(chunk.start)]]);\n}\nfunction createEventClasses(eventClassNames, event, _view) {\n\tlet result = event.classNames;\n\tif (eventClassNames) {\n\t\tif (isFunction(eventClassNames)) eventClassNames = eventClassNames({\n\t\t\tevent: toEventWithLocalDates(event),\n\t\t\tview: toViewWithLocalDates(_view)\n\t\t});\n\t\tresult = [...isArray(eventClassNames) ? eventClassNames : [eventClassNames], ...result];\n\t}\n\treturn result;\n}\nfunction toEventWithLocalDates(event) {\n\treturn _cloneEvent(event, toLocalDate);\n}\nfunction cloneEvent(event) {\n\treturn _cloneEvent(event, cloneDate);\n}\nfunction _cloneEvent(event, dateFn) {\n\tevent = assign({}, event);\n\tevent.start = dateFn(event.start);\n\tevent.end = dateFn(event.end);\n\treturn event;\n}\nfunction runReposition(refs, data) {\n\trefs.length = data.length;\n\tfor (let ref of refs) ref?.reposition();\n}\n/**\n* Check whether the event intersects with the given date range and resource\n* @param event\n* @param start\n* @param end\n* @param resource\n* @return boolean\n*/\nfunction eventIntersects(event, start, end, resource = void 0) {\n\treturn (!resource || event.resourceIds.includes(resource.id)) && event.start < end && event.end > start;\n}\nfunction helperEvent(display) {\n\treturn previewEvent(display) || ghostEvent(display) || pointerEvent(display);\n}\nfunction bgEvent(display) {\n\treturn display === \"background\";\n}\nfunction previewEvent(display) {\n\treturn display === \"preview\";\n}\nfunction ghostEvent(display) {\n\treturn display === \"ghost\";\n}\nfunction pointerEvent(display) {\n\treturn display === \"pointer\";\n}\n//#endregion\n//#region packages/core/src/lib/chunks.js\n/**\n* @returns {{\n*   id?: String,  // this can be used as key in Svelte keyed each block\n*   start: Date,\n*   end: Date,\n*   event: Object,\n*   zeroDuration: boolean,\n*   gridColumn?: Number,\n*   gridRow?: Number,\n*   resource?: Object,\n*   group?: Object,\n*   groupColumn?: Number,\n*   dates?: Array\n*   day?: Array,\n*   long?: Object,\n*   prev?: Object,\n*   top?: Number,\n*   bottom?: Number,\n*   left?: Number,\n*   height?: Number,\n*   width?: Number,\n*   maxHeight?: Number\n* }}\n*/\nfunction createEventChunk(event, start, end) {\n\tstart = event.start > start ? event.start : start;\n\tend = event.end < end ? event.end : end;\n\treturn {\n\t\tstart,\n\t\tend,\n\t\tevent,\n\t\tzeroDuration: datesEqual(start, end)\n\t};\n}\n/**\n* Create event chunk for month view and all-day slot in week view\n*/\nfunction createAllDayChunks(event, days, withId = true) {\n\tlet dates = [];\n\tlet lastEnd;\n\tlet gridColumn;\n\tlet gridRow;\n\tlet resource;\n\tfor (let { gridColumn: column, gridRow: row, resource: dayResource, dayStart, dayEnd, disabled } of days) if (!disabled && eventIntersects(event, dayStart, dayEnd, dayResource)) {\n\t\tdates.push(dayStart);\n\t\tlastEnd = dayEnd;\n\t\tif (!gridColumn) {\n\t\t\tgridColumn = column;\n\t\t\tgridRow = row;\n\t\t\tresource = dayResource;\n\t\t}\n\t}\n\tif (dates.length) {\n\t\tlet chunk = createEventChunk(event, dates[0], lastEnd);\n\t\tassign(chunk, {\n\t\t\tgridColumn,\n\t\t\tgridRow,\n\t\t\tresource,\n\t\t\tdates\n\t\t});\n\t\tif (withId) assignChunkId(chunk);\n\t\treturn [chunk];\n\t}\n\treturn [];\n}\n/**\n* Prepare event chunks for month view and all-day slot in week view\n*/\nfunction prepareAllDayChunks(chunks) {\n\tlet prevChunks = {};\n\tlet longChunks = {};\n\tfor (let chunk of chunks) {\n\t\tlet { gridColumn, gridRow } = chunk;\n\t\tfor (let i = 1; i < chunk.dates.length; ++i) {\n\t\t\tlet key = `${gridRow}_${gridColumn + i}`;\n\t\t\tif (longChunks[key]) longChunks[key].chunks.push(chunk);\n\t\t\telse longChunks[key] = {\n\t\t\t\tsorted: false,\n\t\t\t\tchunks: [chunk]\n\t\t\t};\n\t\t}\n\t\tlet key = `${gridRow}_${gridColumn}`;\n\t\tchunk.long = longChunks[key];\n\t\tchunk.prev = prevChunks[key];\n\t\tprevChunks[key] = chunk;\n\t}\n}\nfunction repositionEvent$1(chunk, height, top = 1, gap = 1) {\n\tif (chunk.prev) top = chunk.prev.bottom + gap;\n\tlet bottom = top + height;\n\tif (chunk.long) {\n\t\tlet longChunks = chunk.long;\n\t\tif (!longChunks.sorted) {\n\t\t\tlongChunks.chunks.sort((a, b) => a.top - b.top);\n\t\t\tlongChunks.sorted = true;\n\t\t}\n\t\tfor (let longChunk of longChunks.chunks) if (top < longChunk.bottom && bottom > longChunk.top) {\n\t\t\tlet offset = longChunk.bottom - top + gap;\n\t\t\ttop += offset;\n\t\t\tbottom += offset;\n\t\t}\n\t}\n\tassign(chunk, {\n\t\ttop,\n\t\tbottom\n\t});\n\treturn top;\n}\nvar ids = /* @__PURE__ */ new WeakMap();\nvar idCounter = 1;\nfunction assignChunkId(chunk) {\n\tlet { event, gridColumn, gridRow } = chunk;\n\tlet id = ids.get(event);\n\tif (!id) {\n\t\tid = idCounter++;\n\t\tids.set(event, id);\n\t}\n\tchunk.id = `${id}-${gridColumn}-${gridRow}`;\n}\n//#endregion\n//#region packages/core/src/lib/derived.js\nfunction intl(mainState, option) {\n\treturn () => {\n\t\tlet { options: { locale } } = mainState;\n\t\tlet format = mainState.options[option];\n\t\tlet intl;\n\t\tuntrack(() => {\n\t\t\tintl = isFunction(format) ? { format } : new Intl.DateTimeFormat(locale, format);\n\t\t});\n\t\treturn { format: (date) => intl.format(toLocalDate(date)) };\n\t};\n}\nfunction intlRange(mainState, option) {\n\treturn () => {\n\t\tlet { options: { locale } } = mainState;\n\t\tlet format = mainState.options[option];\n\t\tlet formatRange;\n\t\tuntrack(() => {\n\t\t\tif (isFunction(format)) formatRange = format;\n\t\t\telse {\n\t\t\t\tlet intl = new Intl.DateTimeFormat(locale, format);\n\t\t\t\tformatRange = (start, end) => {\n\t\t\t\t\tif (start <= end) return intl.formatRange(start, end);\n\t\t\t\t\telse {\n\t\t\t\t\t\t/** @see https://github.com/vkurko/calendar/issues/227 */\n\t\t\t\t\t\tlet parts = intl.formatRangeToParts(end, start);\n\t\t\t\t\t\tlet result = \"\";\n\t\t\t\t\t\tlet sources = [\"startRange\", \"endRange\"];\n\t\t\t\t\t\tlet processed = [false, false];\n\t\t\t\t\t\tfor (let part of parts) {\n\t\t\t\t\t\t\tlet i = sources.indexOf(part.source);\n\t\t\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\t\t\tif (!processed[i]) {\n\t\t\t\t\t\t\t\t\tresult += _getParts(sources[1 - i], parts);\n\t\t\t\t\t\t\t\t\tprocessed[i] = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else result += part.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\treturn { formatRange: (start, end) => formatRange(toLocalDate(start), toLocalDate(end)) };\n\t};\n}\nfunction _getParts(source, parts) {\n\tlet result = \"\";\n\tfor (let part of parts) if (part.source == source) result += part.value;\n\treturn result;\n}\n//#endregion\n//#region packages/core/src/lib/options.js\nfunction btnTextDay(text) {\n\treturn btnText(text, \"day\");\n}\nfunction btnTextWeek(text) {\n\treturn btnText(text, \"week\");\n}\nfunction btnTextMonth(text) {\n\treturn btnText(text, \"month\");\n}\nfunction btnTextYear(text) {\n\treturn btnText(text, \"year\");\n}\nfunction btnText(text, period) {\n\treturn {\n\t\t...text,\n\t\tnext: \"Next \" + period,\n\t\tprev: \"Previous \" + period\n\t};\n}\nfunction themeView(view) {\n\treturn (theme) => ({\n\t\t...theme,\n\t\tview\n\t});\n}\n//#endregion\n//#region packages/core/src/lib/range.js\nfunction createDateRange(input) {\n\tlet start, end;\n\tif (input) {\n\t\t({start, end} = input);\n\t\tif (start) start = setMidnight(createDate(start));\n\t\tif (end) end = setMidnight(createDate(end));\n\t}\n\treturn {\n\t\tstart,\n\t\tend\n\t};\n}\nfunction outsideRange(date, range) {\n\treturn range.start && date < range.start || range.end && date > range.end;\n}\n//#endregion\n//#region packages/core/src/lib/resources.js\nfunction createResources(input) {\n\tlet result = [];\n\t_createResources(input, 0, false, result);\n\treturn result;\n}\nfunction _createResources(input, level, hidden, flat) {\n\tlet result = [];\n\tfor (let item of input) {\n\t\tlet resource = createResource(item);\n\t\tresult.push(resource);\n\t\tflat.push(resource);\n\t\tlet payload = {\n\t\t\tlevel,\n\t\t\tchildren: [],\n\t\t\thidden\n\t\t};\n\t\tsetPayload(resource, payload);\n\t\tif (item.children) payload.children = _createResources(item.children, level + 1, hidden || !resource.expanded, flat);\n\t}\n\treturn result;\n}\nfunction createResource(input) {\n\treturn {\n\t\tid: String(input.id),\n\t\ttitle: input.title || \"\",\n\t\teventBackgroundColor: eventBackgroundColor(input),\n\t\teventTextColor: eventTextColor(input),\n\t\texpanded: input.expanded ?? true,\n\t\textendedProps: input.extendedProps ?? {}\n\t};\n}\nfunction eventBackgroundColor(resource) {\n\treturn resource?.eventBackgroundColor;\n}\nfunction eventTextColor(resource) {\n\treturn resource?.eventTextColor;\n}\nfunction findFirstResource(event, resources) {\n\treturn empty(event.resourceIds) ? void 0 : resources.find((resource) => event.resourceIds.includes(resource.id));\n}\n//#endregion\n//#region packages/core/src/lib/slots.js\nfunction createSlots(date, slotDuration, slotLabelPeriodicity, slotTimeLimits, intlSlotLabel) {\n\tlet slots = [];\n\tdate = cloneDate(date);\n\tlet end = cloneDate(date);\n\taddDuration(date, slotTimeLimits.min);\n\taddDuration(end, slotTimeLimits.max);\n\twhile (date < end) {\n\t\tslots.push([toISOString(date), intlSlotLabel.format(date)]);\n\t\taddDuration(date, slotDuration, slotLabelPeriodicity);\n\t}\n\tlet span = floor((date - end) / 1e3 / toSeconds(slotDuration));\n\tif (span && span !== slotLabelPeriodicity) slots.at(-1)[2] = slotLabelPeriodicity - span;\n\treturn slots;\n}\nfunction createSlotTimeLimits(slotMinTime, slotMaxTime, flexibleSlotTimeLimits, viewDates, filteredEvents) {\n\tlet min$1 = createDuration(slotMinTime);\n\tlet max$1 = createDuration(slotMaxTime);\n\tif (flexibleSlotTimeLimits) {\n\t\tlet minMin = createDuration(min(toSeconds(min$1), max(0, toSeconds(max$1) - DAY_IN_SECONDS)));\n\t\tlet maxMax = createDuration(max(toSeconds(max$1), toSeconds(minMin) + DAY_IN_SECONDS));\n\t\tlet filter = isFunction(flexibleSlotTimeLimits?.eventFilter) ? flexibleSlotTimeLimits.eventFilter : (event) => !bgEvent(event.display);\n\t\tloop: for (let date of viewDates) {\n\t\t\tlet start = addDuration(cloneDate(date), min$1);\n\t\t\tlet end = addDuration(cloneDate(date), max$1);\n\t\t\tlet minStart = addDuration(cloneDate(date), minMin);\n\t\t\tlet maxEnd = addDuration(cloneDate(date), maxMax);\n\t\t\tfor (let event of filteredEvents) if (!event.allDay && filter(event) && event.start < maxEnd && event.end > minStart) {\n\t\t\t\tif (event.start < start) {\n\t\t\t\t\tlet seconds = max((event.start - date) / 1e3, toSeconds(minMin));\n\t\t\t\t\tif (seconds < toSeconds(min$1)) min$1.seconds = seconds;\n\t\t\t\t}\n\t\t\t\tif (event.end > end) {\n\t\t\t\t\tlet seconds = min((event.end - date) / 1e3, toSeconds(maxMax));\n\t\t\t\t\tif (seconds > toSeconds(max$1)) max$1.seconds = seconds;\n\t\t\t\t}\n\t\t\t\tif (toSeconds(min$1) === toSeconds(minMin) && toSeconds(max$1) === toSeconds(maxMax)) break loop;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tmin: min$1,\n\t\tmax: max$1\n\t};\n}\n//#endregion\n//#region packages/core/src/storage/proxy.svelte.js\nfunction arrayProxy(array) {\n\tlet counter = 0;\n\tlet version = $.state($.proxy(counter));\n\treturn proxy(array, () => $.get(version), () => true, () => $.set(version, ++counter, true));\n}\n/**\n* Object proxy that triggers the effect on changes to first-level properties\n*/\nfunction objectProxy(object) {\n\tlet counter = 0;\n\tlet versions = $.proxy({});\n\treturn proxy(object, (prop) => versions[prop], (a, b) => a !== b, (prop) => versions[prop] = ++counter);\n}\nfunction proxy(target, setDependency, hasEffect, invokeEffect) {\n\treturn new Proxy(target, {\n\t\tget(target, prop, receiver) {\n\t\t\tif (hasOwn(target, prop)) setDependency(prop);\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\t\tset(target, prop, value, receiver) {\n\t\t\tlet has = hasEffect(target[prop], value);\n\t\t\tlet result = Reflect.set(target, prop, value, receiver);\n\t\t\tif (has) invokeEffect(prop);\n\t\t\treturn result;\n\t\t}\n\t});\n}\n//#endregion\n//#region packages/core/src/storage/options.js\nfunction createOptions(plugins) {\n\tlet options = {\n\t\tbuttonText: { today: \"today\" },\n\t\tcustomButtons: {},\n\t\tcustomScrollbars: false,\n\t\tdate: /* @__PURE__ */ new Date(),\n\t\tdateIncrement: void 0,\n\t\tdatesSet: void 0,\n\t\tdayCellContent: void 0,\n\t\tdayHeaderFormat: {\n\t\t\tweekday: \"short\",\n\t\t\tmonth: \"numeric\",\n\t\t\tday: \"numeric\"\n\t\t},\n\t\tdayHeaderAriaLabelFormat: { dateStyle: \"full\" },\n\t\tdisplayEventEnd: true,\n\t\tduration: { weeks: 1 },\n\t\tevents: [],\n\t\teventAllUpdated: void 0,\n\t\teventBackgroundColor: void 0,\n\t\teventClassNames: void 0,\n\t\teventClick: void 0,\n\t\teventColor: void 0,\n\t\teventContent: void 0,\n\t\teventDidMount: void 0,\n\t\teventFilter: void 0,\n\t\teventGap: 1,\n\t\teventMouseEnter: void 0,\n\t\teventMouseLeave: void 0,\n\t\teventOrder: void 0,\n\t\teventOrderStrict: false,\n\t\teventSources: [],\n\t\teventTextColor: void 0,\n\t\teventTimeFormat: {\n\t\t\thour: \"numeric\",\n\t\t\tminute: \"2-digit\"\n\t\t},\n\t\tfilterEventsWithResources: false,\n\t\tfirstDay: 0,\n\t\theaderToolbar: {\n\t\t\tstart: \"title\",\n\t\t\tcenter: \"\",\n\t\t\tend: \"today prev,next\"\n\t\t},\n\t\theight: void 0,\n\t\thiddenDays: [],\n\t\thighlightedDates: [],\n\t\ticons: {},\n\t\tlazyFetching: true,\n\t\tloading: void 0,\n\t\tlocale: void 0,\n\t\trefetchResourcesOnNavigate: false,\n\t\tresources: [],\n\t\tselectable: false,\n\t\ttheme: {\n\t\t\tactive: \"ec-active\",\n\t\t\tbgEvent: \"ec-bg-event\",\n\t\t\tbgEvents: \"ec-bg-events\",\n\t\t\tbody: \"ec-body\",\n\t\t\tbutton: \"ec-button\",\n\t\t\tbuttonGroup: \"ec-button-group\",\n\t\t\tcalendar: \"ec\",\n\t\t\tcolHead: \"ec-col-head\",\n\t\t\tcustomScrollbars: \"ec-custom-scrollbars\",\n\t\t\tday: \"ec-day\",\n\t\t\tdayHead: \"ec-day-head\",\n\t\t\tdisabled: \"ec-disabled\",\n\t\t\tendClipped: \"ec-end-clipped\",\n\t\t\tevent: \"ec-event\",\n\t\t\teventBody: \"ec-event-body\",\n\t\t\teventTime: \"ec-event-time\",\n\t\t\teventTitle: \"ec-event-title\",\n\t\t\tevents: \"ec-events\",\n\t\t\tgrid: \"ec-grid\",\n\t\t\theader: \"ec-header\",\n\t\t\thidden: \"ec-hidden\",\n\t\t\thighlight: \"ec-highlight\",\n\t\t\ticon: \"ec-icon\",\n\t\t\tmain: \"ec-main\",\n\t\t\tnoBeb: \"ec-no-beb\",\n\t\t\tnoIeb: \"ec-no-ieb\",\n\t\t\tstartClipped: \"ec-start-clipped\",\n\t\t\ttoday: \"ec-today\",\n\t\t\ttitle: \"ec-title\",\n\t\t\ttoolbar: \"ec-toolbar\",\n\t\t\tview: \"\",\n\t\t\tweekdays: [\n\t\t\t\t\"ec-sun\",\n\t\t\t\t\"ec-mon\",\n\t\t\t\t\"ec-tue\",\n\t\t\t\t\"ec-wed\",\n\t\t\t\t\"ec-thu\",\n\t\t\t\t\"ec-fri\",\n\t\t\t\t\"ec-sat\"\n\t\t\t],\n\t\t\tweekNumber: \"ec-week-number\"\n\t\t},\n\t\ttimeZone: \"local\",\n\t\ttitleFormat: {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"short\",\n\t\t\tday: \"numeric\"\n\t\t},\n\t\tvalidRange: void 0,\n\t\tview: void 0,\n\t\tviewDidMount: void 0,\n\t\tviews: {}\n\t};\n\tfor (let plugin of plugins) plugin.createOptions?.(options);\n\treturn options;\n}\nfunction createParsers(plugins) {\n\tlet parsers = {\n\t\tdate: (input) => setMidnight(createDate(input)),\n\t\tdateIncrement: undefinedOr(createDuration),\n\t\tduration: createDuration,\n\t\tevents: createEvents,\n\t\teventSources: createEventSources,\n\t\thiddenDays: (input) => [...new Set(input)],\n\t\thighlightedDates: (input) => input.map((item) => setMidnight(createDate(item))),\n\t\tresources: (input) => isArray(input) ? createResources(input) : input,\n\t\tvalidRange: createDateRange\n\t};\n\tfor (let plugin of plugins) plugin.createParsers?.(parsers);\n\treturn parsers;\n}\nvar specialOptions = [\n\t\"buttonText\",\n\t\"customButtons\",\n\t\"icons\",\n\t\"theme\"\n];\nfunction optionsState(plugins, userOptions) {\n\tlet defOptions = createOptions(plugins);\n\tlet parsers = createParsers(plugins);\n\tdefOptions = parseOptions(defOptions, parsers);\n\tuserOptions = parseOptions(userOptions, parsers);\n\tlet defViews = extractOption(defOptions, \"views\") ?? {};\n\tlet userViews = extractOption(userOptions, \"views\") ?? {};\n\tlet options = objectProxy({});\n\tassign(options, defOptions);\n\tif (userOptions.view) options.view = userOptions.view;\n\tlet setters = {};\n\tlet viewOptions = {};\n\tlet viewComponents = {};\n\tlet views = /* @__PURE__ */ new Set([...keys(defViews), ...keys(userViews)]);\n\tfor (let view of views) {\n\t\tlet userViewOptions = userViews[view] ?? {};\n\t\tlet defOpts = mergeOpts(defOptions, defViews[view] ?? defViews[userViewOptions.type] ?? {});\n\t\tlet opts = mergeOpts(defOpts, userOptions, userViewOptions);\n\t\tlet component = extractOption(opts, \"component\");\n\t\tdelete opts.view;\n\t\tfor (let key of keys(opts)) if (hasOwn(options, key)) {\n\t\t\tsetters[key] ??= [];\n\t\t\tsetters[key].push(specialOptions.includes(key) ? (value) => opts[key] = isFunction(value) ? value(defOpts[key]) : value : (value) => opts[key] = value);\n\t\t} else delete opts[key];\n\t\tviewOptions[view] = opts;\n\t\tviewComponents[view] = component;\n\t}\n\tassign(options, viewOptions[options.view]);\n\treturn [\n\t\toptions,\n\t\tfunction setOption(key, value, parsed = true) {\n\t\t\tif (hasOwn(options, key)) {\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tif (key in parsers) value = parsers[key](value);\n\t\t\t\t\telse if (isPlainObject(value)) value = { ...value };\n\t\t\t\t\telse if (isArray(value)) value = [...value];\n\t\t\t\t}\n\t\t\t\tsetters[key]?.forEach((set) => set(value));\n\t\t\t\toptions[key] = value;\n\t\t\t}\n\t\t},\n\t\tfunction setViewOptions(view) {\n\t\t\tassign(options, viewOptions[view]);\n\t\t\treturn viewComponents[view];\n\t\t}\n\t];\n}\nfunction parseOptions(opts, parsers) {\n\tlet result = { ...opts };\n\tfor (let key of keys(parsers)) if (key in result) result[key] = parsers[key](result[key]);\n\tif (opts.views) {\n\t\tresult.views = {};\n\t\tfor (let view of keys(opts.views)) result.views[view] = parseOptions(opts.views[view], parsers);\n\t}\n\treturn result;\n}\nfunction extractOption(options, name) {\n\tlet extracted = options[name];\n\tdelete options[name];\n\treturn extracted;\n}\nfunction mergeOpts(...args) {\n\tlet result = {};\n\tfor (let opts of args) {\n\t\tlet override = {};\n\t\tfor (let key of specialOptions) if (isFunction(opts[key])) override[key] = opts[key](result[key]);\n\t\tresult = {\n\t\t\t...result,\n\t\t\t...opts,\n\t\t\t...override\n\t\t};\n\t}\n\treturn result;\n}\nfunction diff(options, prevOptions) {\n\tlet diff = [];\n\tfor (let key of keys(options)) if (options[key] !== prevOptions[key]) diff.push([key, options[key]]);\n\treturn diff;\n}\n//#endregion\n//#region packages/core/src/storage/effects.js\nfunction switchView(mainState) {\n\treturn () => {\n\t\tlet { options: { view } } = mainState;\n\t\tuntrack(() => {\n\t\t\tlet initComponent = mainState.setViewOptions(view);\n\t\t\tmainState.extensions = {};\n\t\t\tmainState.features = [];\n\t\t\tmainState.viewComponent = initComponent(mainState);\n\t\t});\n\t};\n}\nfunction loadEvents(mainState, loadingInvoker) {\n\treturn () => {\n\t\tlet { activeRange, fetchedRange: { events: fetchedRange }, offset, viewDates, options: { events, eventSources, lazyFetching, timeZone } } = mainState;\n\t\tuntrack(() => {\n\t\t\tload(eventSources.map((source) => isFunction(source.events) ? source.events : source), events, (input) => createEvents(input, offset), (result) => mainState.events = arrayProxy(result), timeZone, activeRange, fetchedRange, viewDates, true, lazyFetching, loadingInvoker);\n\t\t});\n\t};\n}\nfunction loadResources(mainState, loadingInvoker) {\n\treturn () => {\n\t\tlet { activeRange, fetchedRange: { resources: fetchedRange }, viewDates, options: { lazyFetching, refetchResourcesOnNavigate, resources, timeZone } } = mainState;\n\t\tuntrack(() => {\n\t\t\tload(isArray(resources) ? [] : [resources], resources, createResources, (result) => mainState.resources = arrayProxy(result), timeZone, activeRange, fetchedRange, viewDates, refetchResourcesOnNavigate, lazyFetching, loadingInvoker);\n\t\t});\n\t};\n}\nfunction load(sources, defaultResult, parseResult, applyResult, timeZone, activeRange, fetchedRange, viewDates, refetchOnNavigate, lazyFetching, loading) {\n\tif (empty(viewDates)) return;\n\tif (empty(sources)) {\n\t\tapplyResult(defaultResult);\n\t\treturn;\n\t}\n\tif ((refetchOnNavigate || !fetchedRange.start) && (!lazyFetching || !fetchedRange.start || fetchedRange.start > activeRange.start || fetchedRange.end < activeRange.end || fetchedRange.timeZone !== timeZone)) {\n\t\tlet result = [];\n\t\tlet failure = (e) => loading.stop();\n\t\tlet success = (data) => {\n\t\t\tresult = result.concat(parseResult(data));\n\t\t\tapplyResult(result);\n\t\t\tloading.stop();\n\t\t};\n\t\tlet startStr = toISOString(activeRange.start);\n\t\tlet endStr = toISOString(activeRange.end);\n\t\tfor (let source of sources) {\n\t\t\tloading.start();\n\t\t\tif (isFunction(source)) {\n\t\t\t\tlet result = source(refetchOnNavigate ? {\n\t\t\t\t\tstart: toLocalDate(activeRange.start),\n\t\t\t\t\tend: toLocalDate(activeRange.end),\n\t\t\t\t\tstartStr,\n\t\t\t\t\tendStr,\n\t\t\t\t\ttimeZone\n\t\t\t\t} : {}, success, failure);\n\t\t\t\tif (result !== void 0) Promise.resolve(result).then(success, failure);\n\t\t\t} else {\n\t\t\t\tlet params = isFunction(source.extraParams) ? source.extraParams() : assign({}, source.extraParams);\n\t\t\t\tif (refetchOnNavigate) {\n\t\t\t\t\tparams.start = startStr;\n\t\t\t\t\tparams.end = endStr;\n\t\t\t\t\tif (timeZone !== \"local\") params.timeZone = timeZone;\n\t\t\t\t}\n\t\t\t\tparams = new URLSearchParams(params);\n\t\t\t\tlet url = source.url, headers = {}, body;\n\t\t\t\tif ([\"GET\", \"HEAD\"].includes(source.method)) url += (url.includes(\"?\") ? \"&\" : \"?\") + params;\n\t\t\t\telse {\n\t\t\t\t\theaders[\"content-type\"] = \"application/x-www-form-urlencoded;charset=UTF-8\";\n\t\t\t\t\tbody = String(params);\n\t\t\t\t}\n\t\t\t\tfetch(url, {\n\t\t\t\t\tmethod: source.method,\n\t\t\t\t\theaders,\n\t\t\t\t\tbody,\n\t\t\t\t\tsignal: getAbortSignal(),\n\t\t\t\t\tcredentials: \"same-origin\"\n\t\t\t\t}).then((response) => response.json()).then(success).catch(failure);\n\t\t\t}\n\t\t}\n\t\tassign(fetchedRange, {\n\t\t\t...activeRange,\n\t\t\ttimeZone\n\t\t});\n\t}\n}\nfunction createLoadingInvoker(mainState) {\n\tlet counter = 0;\n\tfunction invoke(value) {\n\t\tlet { options: { loading } } = mainState;\n\t\tif (isFunction(loading)) loading(value);\n\t}\n\treturn {\n\t\tstart: () => ++counter === 1 && invoke(true),\n\t\tstop: () => --counter === 0 && invoke(false)\n\t};\n}\nfunction setNowAndToday(mainState) {\n\treturn () => {\n\t\tlet { offset } = mainState;\n\t\tlet interval = setInterval(() => {\n\t\t\tlet now = createDate(void 0, offset);\n\t\t\tlet today = setMidnight(cloneDate(now));\n\t\t\tmainState.now = now;\n\t\t\tif (!datesEqual(mainState.today, today)) mainState.today = today;\n\t\t}, 1e3);\n\t\treturn () => clearInterval(interval);\n\t};\n}\nfunction handleTimeZoneChange(mainState) {\n\treturn () => {\n\t\tlet { offset, options } = mainState;\n\t\tuntrack(() => {\n\t\t\tfor (let event of mainState.events) if (!event.allDay) for (let prop of [\"start\", \"end\"]) {\n\t\t\t\tlet dateOffset = getOffset(event[prop]);\n\t\t\t\tif (dateOffset !== void 0) applyOffsetDiff(event[prop], offset - dateOffset);\n\t\t\t\tsetOffset(event[prop], offset);\n\t\t\t}\n\t\t\tlet dateOffset = getOffset(options.date);\n\t\t\tif (dateOffset !== void 0) {\n\t\t\t\tlet diff = createDate(void 0, offset).getUTCDay() - createDate(void 0, dateOffset).getUTCDay();\n\t\t\t\tlet date = addDay(cloneDate(options.date), diff);\n\t\t\t\tmainState.setOption(\"date\", date);\n\t\t\t}\n\t\t\tsetOffset(options.date, offset);\n\t\t});\n\t};\n}\nfunction runDatesSet(mainState) {\n\treturn () => {\n\t\tlet { activeRange, options: { datesSet } } = mainState;\n\t\tuntrack(() => {\n\t\t\tif (isFunction(datesSet)) datesSet({\n\t\t\t\tstart: toLocalDate(activeRange.start),\n\t\t\t\tend: toLocalDate(activeRange.end),\n\t\t\t\tstartStr: toISOString(activeRange.start),\n\t\t\t\tendStr: toISOString(activeRange.end),\n\t\t\t\tview: toViewWithLocalDates(mainState.view)\n\t\t\t});\n\t\t});\n\t};\n}\nfunction runEventAllUpdated(mainState) {\n\tlet timer;\n\treturn () => {\n\t\tlet { filteredEvents, options: { eventAllUpdated } } = mainState;\n\t\tuntrack(() => {\n\t\t\tif (isFunction(eventAllUpdated)) {\n\t\t\t\tif (!timer) timer = setTimeout(() => {\n\t\t\t\t\ttimer = null;\n\t\t\t\t\teventAllUpdated({ view: toViewWithLocalDates(mainState.view) });\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n}\nfunction runViewDidMount(mainState) {\n\treturn () => {\n\t\tlet { options: { view, viewDidMount } } = mainState;\n\t\tuntrack(() => {\n\t\t\tif (isFunction(viewDidMount)) tick().then(() => viewDidMount({ view: toViewWithLocalDates(mainState.view) }));\n\t\t});\n\t};\n}\n//#endregion\n//#region packages/core/src/storage/derived.js\nfunction currentRange(mainState) {\n\treturn () => {\n\t\tlet { options: { date, duration, firstDay } } = mainState;\n\t\tlet start, end;\n\t\tuntrack(() => {\n\t\t\tstart = cloneDate(date);\n\t\t\tif (duration.years) {\n\t\t\t\tstart.setUTCMonth(0);\n\t\t\t\tstart.setUTCDate(1);\n\t\t\t} else if (duration.months) start.setUTCDate(1);\n\t\t\telse if (duration.inWeeks) prevClosestDay(start, firstDay);\n\t\t\tend = addDuration(cloneDate(start), duration);\n\t\t});\n\t\treturn {\n\t\t\tstart,\n\t\t\tend\n\t\t};\n\t};\n}\nfunction activeRange(mainState) {\n\treturn () => {\n\t\tlet { currentRange, extensions: { activeRange } } = mainState;\n\t\tlet start, end;\n\t\tuntrack(() => {\n\t\t\tstart = cloneDate(currentRange.start);\n\t\t\tend = cloneDate(currentRange.end);\n\t\t});\n\t\treturn activeRange ? activeRange(start, end) : {\n\t\t\tstart,\n\t\t\tend\n\t\t};\n\t};\n}\nfunction filteredEvents(mainState) {\n\treturn () => {\n\t\tlet { events, options: { eventFilter, eventOrder, filterEventsWithResources, resources, view } } = mainState;\n\t\tlet result = [...events];\n\t\tuntrack(() => {\n\t\t\tif (isFunction(eventFilter)) {\n\t\t\t\tlet events2 = events.map(toEventWithLocalDates);\n\t\t\t\tlet view = toViewWithLocalDates(mainState.view);\n\t\t\t\tresult = result.filter((event, index) => eventFilter({\n\t\t\t\t\tevent: toEventWithLocalDates(event),\n\t\t\t\t\tindex,\n\t\t\t\t\tevents: events2,\n\t\t\t\t\tview\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (filterEventsWithResources) result = result.filter((event) => resources.some((resource) => event.resourceIds.includes(resource.id)));\n\t\t\tif (isFunction(eventOrder)) result.sort((a, b) => eventOrder(toEventWithLocalDates(a), toEventWithLocalDates(b)));\n\t\t\telse result.sort((a, b) => a.start - b.start || b.allDay - a.allDay);\n\t\t});\n\t\treturn result;\n\t};\n}\nfunction offset(mainState) {\n\treturn () => {\n\t\tlet { options: { timeZone } } = mainState;\n\t\tlet offset;\n\t\tuntrack(() => {\n\t\t\toffset = timeZone === \"local\" ? tzOffset() : timeZone === \"UTC\" ? 0 : parseOffset(timeZone) ?? tzOffset();\n\t\t});\n\t\treturn offset;\n\t};\n}\nfunction viewDates(mainState) {\n\treturn () => {\n\t\tlet { options, activeRange } = mainState;\n\t\tlet { hiddenDays } = options;\n\t\tlet dates = [];\n\t\tuntrack(() => {\n\t\t\tlet date = setMidnight(cloneDate(activeRange.start));\n\t\t\tlet end = setMidnight(cloneDate(activeRange.end));\n\t\t\twhile (date < end) {\n\t\t\t\tif (!hiddenDays.includes(date.getUTCDay())) dates.push(cloneDate(date));\n\t\t\t\taddDay(date);\n\t\t\t}\n\t\t\tif (!dates.length && hiddenDays.length && hiddenDays.length < 7) {\n\t\t\t\twhile (hiddenDays.includes(date.getUTCDay())) addDay(date);\n\t\t\t\ttick().then(() => {\n\t\t\t\t\tmainState.setOption(\"date\", date);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\treturn dates;\n\t};\n}\nfunction viewTitle(mainState) {\n\treturn () => {\n\t\tlet { currentRange, intlTitle } = mainState;\n\t\tlet title;\n\t\tuntrack(() => {\n\t\t\ttitle = intlTitle.formatRange(currentRange.start, subtractDay(cloneDate(currentRange.end)));\n\t\t});\n\t\treturn title;\n\t};\n}\nfunction view(mainState) {\n\treturn () => {\n\t\tlet { activeRange, currentRange, viewTitle, options: { view } } = mainState;\n\t\tlet viewObj;\n\t\tuntrack(() => {\n\t\t\tviewObj = createView(view, viewTitle, currentRange, activeRange);\n\t\t});\n\t\treturn viewObj;\n\t};\n}\n//#endregion\n//#region packages/core/src/storage/state.svelte.js\nvar State = class {\n\t#auxComponents;\n\tget auxComponents() {\n\t\treturn $.get(this.#auxComponents);\n\t}\n\tset auxComponents(value) {\n\t\t$.set(this.#auxComponents, value, true);\n\t}\n\t#offset;\n\tget offset() {\n\t\treturn $.get(this.#offset);\n\t}\n\tset offset(value) {\n\t\t$.set(this.#offset, value);\n\t}\n\t#currentRange;\n\tget currentRange() {\n\t\treturn $.get(this.#currentRange);\n\t}\n\tset currentRange(value) {\n\t\t$.set(this.#currentRange, value);\n\t}\n\t#activeRange;\n\tget activeRange() {\n\t\treturn $.get(this.#activeRange);\n\t}\n\tset activeRange(value) {\n\t\t$.set(this.#activeRange, value);\n\t}\n\t#fetchedRange;\n\tget fetchedRange() {\n\t\treturn $.get(this.#fetchedRange);\n\t}\n\tset fetchedRange(value) {\n\t\t$.set(this.#fetchedRange, value, true);\n\t}\n\t#events;\n\tget events() {\n\t\treturn $.get(this.#events);\n\t}\n\tset events(value) {\n\t\t$.set(this.#events, value);\n\t}\n\t#filteredEvents;\n\tget filteredEvents() {\n\t\treturn $.get(this.#filteredEvents);\n\t}\n\tset filteredEvents(value) {\n\t\t$.set(this.#filteredEvents, value);\n\t}\n\t#mainEl;\n\tget mainEl() {\n\t\treturn $.get(this.#mainEl);\n\t}\n\tset mainEl(value) {\n\t\t$.set(this.#mainEl, value, true);\n\t}\n\t#now;\n\tget now() {\n\t\treturn $.get(this.#now);\n\t}\n\tset now(value) {\n\t\t$.set(this.#now, value, true);\n\t}\n\t#resources;\n\tget resources() {\n\t\treturn $.get(this.#resources);\n\t}\n\tset resources(value) {\n\t\t$.set(this.#resources, value);\n\t}\n\t#scrollDate;\n\tget scrollDate() {\n\t\treturn $.get(this.#scrollDate);\n\t}\n\tset scrollDate(value) {\n\t\t$.set(this.#scrollDate, value, true);\n\t}\n\t#today;\n\tget today() {\n\t\treturn $.get(this.#today);\n\t}\n\tset today(value) {\n\t\t$.set(this.#today, value, true);\n\t}\n\t#intlEventTime;\n\tget intlEventTime() {\n\t\treturn $.get(this.#intlEventTime);\n\t}\n\tset intlEventTime(value) {\n\t\t$.set(this.#intlEventTime, value);\n\t}\n\t#intlDayHeader;\n\tget intlDayHeader() {\n\t\treturn $.get(this.#intlDayHeader);\n\t}\n\tset intlDayHeader(value) {\n\t\t$.set(this.#intlDayHeader, value);\n\t}\n\t#intlDayHeaderAL;\n\tget intlDayHeaderAL() {\n\t\treturn $.get(this.#intlDayHeaderAL);\n\t}\n\tset intlDayHeaderAL(value) {\n\t\t$.set(this.#intlDayHeaderAL, value);\n\t}\n\t#intlTitle;\n\tget intlTitle() {\n\t\treturn $.get(this.#intlTitle);\n\t}\n\tset intlTitle(value) {\n\t\t$.set(this.#intlTitle, value);\n\t}\n\t#viewDates;\n\tget viewDates() {\n\t\treturn $.get(this.#viewDates);\n\t}\n\tset viewDates(value) {\n\t\t$.set(this.#viewDates, value);\n\t}\n\t#viewTitle;\n\tget viewTitle() {\n\t\treturn $.get(this.#viewTitle);\n\t}\n\tset viewTitle(value) {\n\t\t$.set(this.#viewTitle, value);\n\t}\n\t#view;\n\tget view() {\n\t\treturn $.get(this.#view);\n\t}\n\tset view(value) {\n\t\t$.set(this.#view, value);\n\t}\n\t#viewComponent;\n\tget viewComponent() {\n\t\treturn $.get(this.#viewComponent);\n\t}\n\tset viewComponent(value) {\n\t\t$.set(this.#viewComponent, value, true);\n\t}\n\t#extensions;\n\tget extensions() {\n\t\treturn $.get(this.#extensions);\n\t}\n\tset extensions(value) {\n\t\t$.set(this.#extensions, value, true);\n\t}\n\t#features;\n\tget features() {\n\t\treturn $.get(this.#features);\n\t}\n\tset features(value) {\n\t\t$.set(this.#features, value, true);\n\t}\n\t#interaction;\n\tget interaction() {\n\t\treturn $.get(this.#interaction);\n\t}\n\tset interaction(value) {\n\t\t$.set(this.#interaction, value, true);\n\t}\n\t#iClasses;\n\tget iClasses() {\n\t\treturn $.get(this.#iClasses);\n\t}\n\tset iClasses(value) {\n\t\t$.set(this.#iClasses, value, true);\n\t}\n\t#iClass;\n\tget iClass() {\n\t\treturn $.get(this.#iClass);\n\t}\n\tset iClass(value) {\n\t\t$.set(this.#iClass, value, true);\n\t}\n\toptions;\n\tsetOption;\n\tsetViewOptions;\n\tconstructor(plugins, options) {\n\t\t[this.options, this.setOption, this.setViewOptions] = optionsState(plugins, options);\n\t\tthis.#auxComponents = $.state($.proxy([]));\n\t\tthis.#offset = $.derived(offset(this));\n\t\tthis.#currentRange = $.derived(currentRange(this));\n\t\tthis.#activeRange = $.derived(activeRange(this));\n\t\tthis.#fetchedRange = $.state($.proxy({\n\t\t\tevents: {},\n\t\t\tresources: {}\n\t\t}));\n\t\tthis.#events = $.state(arrayProxy(this.options.events));\n\t\tthis.#filteredEvents = $.derived(filteredEvents(this));\n\t\tthis.#mainEl = $.state();\n\t\tthis.#now = $.state($.proxy(createDate(void 0, this.offset)));\n\t\tthis.#resources = $.state(arrayProxy(isArray(this.options.resources) ? this.options.resources : []));\n\t\tthis.#scrollDate = $.state();\n\t\tthis.#today = $.state($.proxy(setMidnight(cloneDate(this.now))));\n\t\tthis.#intlEventTime = $.derived(intlRange(this, \"eventTimeFormat\"));\n\t\tthis.#intlDayHeader = $.derived(intl(this, \"dayHeaderFormat\"));\n\t\tthis.#intlDayHeaderAL = $.derived(intl(this, \"dayHeaderAriaLabelFormat\"));\n\t\tthis.#intlTitle = $.derived(intlRange(this, \"titleFormat\"));\n\t\tthis.#viewDates = $.derived(viewDates(this));\n\t\tthis.#viewTitle = $.derived(viewTitle(this));\n\t\tthis.#view = $.derived(view(this));\n\t\tthis.#viewComponent = $.state();\n\t\tthis.#extensions = $.state($.proxy({}));\n\t\tthis.#features = $.state($.proxy([]));\n\t\tthis.snippets = {};\n\t\tthis.#interaction = $.state($.proxy({}));\n\t\tthis.iEvents = new SvelteMap();\n\t\tthis.#iClasses = $.state($.proxy(identity));\n\t\tthis.#iClass = $.state();\n\t\tfor (let plugin of plugins) plugin.initState?.(this);\n\t\tthis.#initEffects();\n\t}\n\t#initEffects() {\n\t\tlet loading = createLoadingInvoker(this);\n\t\t$.user_pre_effect(switchView(this));\n\t\t$.user_pre_effect(handleTimeZoneChange(this));\n\t\t$.user_pre_effect(setNowAndToday(this));\n\t\t$.user_effect(loadEvents(this, loading));\n\t\t$.user_effect(loadResources(this, loading));\n\t\t$.user_effect(runDatesSet(this));\n\t\t$.user_effect(runEventAllUpdated(this));\n\t\t$.user_effect(runViewDidMount(this));\n\t}\n};\n//#endregion\n//#region packages/core/src/Buttons.svelte\nvar root$21 = $.from_html(`<h2></h2>`);\nvar root_1$9 = $.from_html(`<button><i></i></button>`);\nvar root_2$5 = $.from_html(`<button> </button>`);\nvar root_3$1 = $.from_html(`<button></button>`);\nfunction Buttons($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tlet currentRange = $.derived(() => mainState.currentRange), today = $.derived(() => mainState.today), viewTitle = $.derived(() => mainState.viewTitle), viewDates = $.derived(() => mainState.viewDates), buttonText = $.derived(() => mainState.options.buttonText), customButtons = $.derived(() => mainState.options.customButtons), date = $.derived(() => mainState.options.date), dateIncrement = $.derived(() => mainState.options.dateIncrement), duration = $.derived(() => mainState.options.duration), hiddenDays = $.derived(() => mainState.options.hiddenDays), theme = $.derived(() => mainState.options.theme), validRange = $.derived(() => mainState.options.validRange), view = $.derived(() => mainState.options.view);\n\tlet prevDisabled = $.state(false);\n\tlet nextDisabled = $.state(false);\n\tlet todayDisabled = $.state(false);\n\tlet running = false;\n\t$.user_pre_effect(() => {\n\t\t$.get(viewDates);\n\t\t$.get(validRange);\n\t\t$$props.buttons;\n\t\tuntrack(() => {\n\t\t\tif (!running) {\n\t\t\t\trunning = true;\n\t\t\t\tif ($$props.buttons.includes(\"prev\")) {\n\t\t\t\t\t$.set(prevDisabled, false);\n\t\t\t\t\tif ($.get(validRange).start) $.set(prevDisabled, test(prev), true);\n\t\t\t\t}\n\t\t\t\tif ($$props.buttons.includes(\"next\")) {\n\t\t\t\t\t$.set(nextDisabled, false);\n\t\t\t\t\tif ($.get(validRange).end) $.set(nextDisabled, test(next), true);\n\t\t\t\t}\n\t\t\t\tif ($$props.buttons.includes(\"today\")) {\n\t\t\t\t\t$.set(todayDisabled, $.get(today) >= $.get(currentRange).start && $.get(today) < $.get(currentRange).end, true);\n\t\t\t\t\tif (!$.get(todayDisabled) && ($.get(validRange).start || $.get(validRange).end)) $.set(todayDisabled, test(setToday), true);\n\t\t\t\t}\n\t\t\t\ttick().then(() => running = false);\n\t\t\t}\n\t\t});\n\t});\n\tfunction test(fn) {\n\t\tlet currentDate = $.get(date);\n\t\tfn();\n\t\tlet result = $.get(viewDates).every((date) => outsideRange(date, $.get(validRange)));\n\t\tmainState.setOption(\"date\", currentDate);\n\t\treturn result;\n\t}\n\tfunction prev() {\n\t\tmainState.setOption(\"date\", prevDate(cloneDate($.get(date)), $.get(dateIncrement) ?? $.get(duration), $.get(hiddenDays)));\n\t}\n\tfunction next() {\n\t\tmainState.setOption(\"date\", nextDate(cloneDate($.get(date)), $.get(dateIncrement) ?? $.get(duration), $.get(hiddenDays)));\n\t}\n\tfunction setToday() {\n\t\tmainState.setOption(\"date\", cloneDate($.get(today)));\n\t}\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\t$.each(node, 17, () => $$props.buttons, $.index, ($$anchor, button) => {\n\t\tvar fragment_1 = $.comment();\n\t\tvar node_1 = $.first_child(fragment_1);\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar h2 = root$21();\n\t\t\t$.attach(h2, () => contentFrom($.get(viewTitle)));\n\t\t\t$.template_effect(() => $.set_class(h2, 1, $.get(theme).title));\n\t\t\t$.append($$anchor, h2);\n\t\t};\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar button_1 = root_1$9();\n\t\t\tvar i = $.child(button_1);\n\t\t\t$.reset(button_1);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(button_1, 1, `${$.get(theme).button ?? \"\"} ec-${$.get(button) ?? \"\"}`);\n\t\t\t\t$.set_attribute(button_1, \"aria-label\", $.get(buttonText).prev);\n\t\t\t\t$.set_attribute(button_1, \"title\", $.get(buttonText).prev);\n\t\t\t\tbutton_1.disabled = $.get(prevDisabled);\n\t\t\t\t$.set_class(i, 1, `${$.get(theme).icon ?? \"\"} ec-${$.get(button) ?? \"\"}`);\n\t\t\t});\n\t\t\t$.delegated(\"click\", button_1, prev);\n\t\t\t$.append($$anchor, button_1);\n\t\t};\n\t\tvar consequent_2 = ($$anchor) => {\n\t\t\tvar button_2 = root_1$9();\n\t\t\tvar i_1 = $.child(button_2);\n\t\t\t$.reset(button_2);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(button_2, 1, `${$.get(theme).button ?? \"\"} ec-${$.get(button) ?? \"\"}`);\n\t\t\t\t$.set_attribute(button_2, \"aria-label\", $.get(buttonText).next);\n\t\t\t\t$.set_attribute(button_2, \"title\", $.get(buttonText).next);\n\t\t\t\tbutton_2.disabled = $.get(nextDisabled);\n\t\t\t\t$.set_class(i_1, 1, `${$.get(theme).icon ?? \"\"} ec-${$.get(button) ?? \"\"}`);\n\t\t\t});\n\t\t\t$.delegated(\"click\", button_2, next);\n\t\t\t$.append($$anchor, button_2);\n\t\t};\n\t\tvar consequent_3 = ($$anchor) => {\n\t\t\tvar button_3 = root_2$5();\n\t\t\tvar text = $.child(button_3, true);\n\t\t\t$.reset(button_3);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(button_3, 1, `${$.get(theme).button ?? \"\"} ec-${$.get(button) ?? \"\"}`);\n\t\t\t\tbutton_3.disabled = $.get(todayDisabled);\n\t\t\t\t$.set_text(text, $.get(buttonText)[$.get(button)]);\n\t\t\t});\n\t\t\t$.delegated(\"click\", button_3, setToday);\n\t\t\t$.append($$anchor, button_3);\n\t\t};\n\t\tvar consequent_4 = ($$anchor) => {\n\t\t\tvar button_4 = root_3$1();\n\t\t\t$.attach(button_4, () => contentFrom($.get(customButtons)[$.get(button)].text));\n\t\t\t$.template_effect(() => $.set_class(button_4, 1, $.clsx([\n\t\t\t\t$.get(theme).button,\n\t\t\t\t`ec-${$.get(button)}`,\n\t\t\t\t$.get(customButtons)[$.get(button)].active && $.get(theme).active\n\t\t\t])));\n\t\t\t$.delegated(\"click\", button_4, function(...$$args) {\n\t\t\t\t$.get(customButtons)[$.get(button)].click?.apply(this, $$args);\n\t\t\t});\n\t\t\t$.append($$anchor, button_4);\n\t\t};\n\t\tvar consequent_5 = ($$anchor) => {\n\t\t\tvar button_5 = root_2$5();\n\t\t\tvar text_1 = $.child(button_5, true);\n\t\t\t$.reset(button_5);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(button_5, 1, $.clsx([\n\t\t\t\t\t$.get(theme).button,\n\t\t\t\t\t`ec-${$.get(button)}`,\n\t\t\t\t\t$.get(view) === $.get(button) && $.get(theme).active\n\t\t\t\t]));\n\t\t\t\t$.set_text(text_1, $.get(buttonText)[$.get(button)]);\n\t\t\t});\n\t\t\t$.delegated(\"click\", button_5, () => mainState.setOption(\"view\", $.get(button)));\n\t\t\t$.append($$anchor, button_5);\n\t\t};\n\t\t$.if(node_1, ($$render) => {\n\t\t\tif ($.get(button) === \"title\") $$render(consequent);\n\t\t\telse if ($.get(button) === \"prev\") $$render(consequent_1, 1);\n\t\t\telse if ($.get(button) === \"next\") $$render(consequent_2, 2);\n\t\t\telse if ($.get(button) === \"today\") $$render(consequent_3, 3);\n\t\t\telse if ($.get(customButtons)[$.get(button)]) $$render(consequent_4, 4);\n\t\t\telse if ($.get(button) !== \"\") $$render(consequent_5, 5);\n\t\t});\n\t\t$.append($$anchor, fragment_1);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n$.delegate([\"click\"]);\n//#endregion\n//#region packages/core/src/Toolbar.svelte\nvar root$20 = $.from_html(`<div><!></div>`);\nvar root_1$8 = $.from_html(`<div></div>`);\nvar root_2$4 = $.from_html(`<nav></nav>`);\nfunction Toolbar($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), headerToolbar = $.derived(() => $.get($$d).options.headerToolbar), theme = $.derived(() => $.get($$d).options.theme);\n\tlet sections = $.derived(() => {\n\t\tlet sections = {};\n\t\tfor (let key of [\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\"\n\t\t]) sections[key] = $.get(headerToolbar)[key]?.split(\" \").map((group) => group.split(\",\")) ?? [];\n\t\treturn sections;\n\t});\n\tvar nav = root_2$4();\n\t$.each(nav, 21, () => keys($.get(sections)), $.index, ($$anchor, key) => {\n\t\tvar div = root_1$8();\n\t\t$.each(div, 21, () => $.get(sections)[$.get(key)], $.index, ($$anchor, buttons) => {\n\t\t\tvar fragment = $.comment();\n\t\t\tvar node = $.first_child(fragment);\n\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\tvar div_1 = root$20();\n\t\t\t\tButtons($.child(div_1), { get buttons() {\n\t\t\t\t\treturn $.get(buttons);\n\t\t\t\t} });\n\t\t\t\t$.reset(div_1);\n\t\t\t\t$.template_effect(() => $.set_class(div_1, 1, $.get(theme).buttonGroup));\n\t\t\t\t$.append($$anchor, div_1);\n\t\t\t};\n\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\tButtons($$anchor, { get buttons() {\n\t\t\t\t\treturn $.get(buttons);\n\t\t\t\t} });\n\t\t\t};\n\t\t\t$.if(node, ($$render) => {\n\t\t\t\tif ($.get(buttons).length > 1) $$render(consequent);\n\t\t\t\telse $$render(alternate, -1);\n\t\t\t});\n\t\t\t$.append($$anchor, fragment);\n\t\t});\n\t\t$.reset(div);\n\t\t$.template_effect(() => $.set_class(div, 1, `ec-${$.get(key) ?? \"\"}`));\n\t\t$.append($$anchor, div);\n\t});\n\t$.reset(nav);\n\t$.template_effect(() => $.set_class(nav, 1, $.get(theme).toolbar));\n\t$.append($$anchor, nav);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/Calendar.svelte\nvar rest_excludes = /* @__PURE__ */ new Set([\n\t\"$$slots\",\n\t\"$$events\",\n\t\"$$legacy\",\n\t\"plugins\",\n\t\"options\"\n]);\nvar root$19 = $.from_html(`<div><!> <!> <!></div>`);\nfunction Calendar($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet plugins = $.prop($$props, \"plugins\", 19, () => []), options = $.prop($$props, \"options\", 19, () => ({})), snippets = $.rest_props($$props, rest_excludes);\n\tlet mainState = new State(plugins(), options());\n\tmainState.snippets = snippets;\n\tsetContext(\"state\", mainState);\n\tlet auxComponents = $.derived(() => mainState.auxComponents), features = $.derived(() => mainState.features), events = $.derived(() => mainState.events), interaction = $.derived(() => mainState.interaction), iClass = $.derived(() => mainState.iClass), offset = $.derived(() => mainState.offset), view = $.derived(() => mainState.view), View = $.derived(() => mainState.viewComponent), date = $.derived(() => mainState.options.date), dateIncrement = $.derived(() => mainState.options.dateIncrement), duration = $.derived(() => mainState.options.duration), height = $.derived(() => mainState.options.height), hiddenDays = $.derived(() => mainState.options.hiddenDays), customScrollbars = $.derived(() => mainState.options.customScrollbars), theme = $.derived(() => mainState.options.theme);\n\tlet prevOptions = { ...options() };\n\t$.user_pre_effect(() => {\n\t\tfor (let [name, value] of diff(options(), prevOptions)) untrack(() => {\n\t\t\tsetOption(name, value);\n\t\t});\n\t\tassign(prevOptions, options());\n\t});\n\tfunction setOption(name, value) {\n\t\tmainState.setOption(name, value, false);\n\t\treturn this;\n\t}\n\tfunction getOption(name) {\n\t\tlet value = mainState.options[name];\n\t\treturn isDate(value) ? toLocalDate(value) : value;\n\t}\n\tfunction refetchResources() {\n\t\tmainState.fetchedRange.resources = {};\n\t\treturn this;\n\t}\n\tfunction refetchEvents() {\n\t\tmainState.fetchedRange.events = {};\n\t\treturn this;\n\t}\n\tfunction getEvents() {\n\t\treturn $.get(events).map(toEventWithLocalDates);\n\t}\n\tfunction getEventById(id) {\n\t\tid = String(id);\n\t\tfor (let event of $.get(events)) if (event.id === id) return toEventWithLocalDates(event);\n\t\treturn null;\n\t}\n\tfunction addEvent(event) {\n\t\tevent = createEvents([event], $.get(offset))[0];\n\t\t$.get(events).push(event);\n\t\treturn toEventWithLocalDates(event);\n\t}\n\tfunction updateEvent(event) {\n\t\tlet id = String(event.id);\n\t\tlet idx = $.get(events).findIndex((event) => event.id === id);\n\t\tif (idx >= 0) {\n\t\t\tevent = createEvents([event], $.get(offset))[0];\n\t\t\t$.get(events)[idx] = event;\n\t\t\treturn toEventWithLocalDates(event);\n\t\t}\n\t\treturn null;\n\t}\n\tfunction removeEventById(id) {\n\t\tid = String(id);\n\t\tlet idx = $.get(events).findIndex((event) => event.id === id);\n\t\tif (idx >= 0) $.get(events).splice(idx, 1);\n\t\treturn this;\n\t}\n\tfunction getView() {\n\t\treturn toViewWithLocalDates($.get(view));\n\t}\n\tfunction unselect() {\n\t\t$.get(interaction).action?.unselect();\n\t\treturn this;\n\t}\n\tfunction dateFromPoint(x, y) {\n\t\tlet dayEl = getElementWithPayload(x, y);\n\t\tif (dayEl) {\n\t\t\tlet info = getPayload(dayEl)(x, y);\n\t\t\tinfo.date = toLocalDate(info.date);\n\t\t\treturn info;\n\t\t}\n\t\treturn null;\n\t}\n\tfunction gotoDate(date) {\n\t\tdate = setMidnight(createDate(date));\n\t\tmainState.setOption(\"date\", cloneDate(date));\n\t\tmainState.scrollDate = date;\n\t\treturn this;\n\t}\n\tfunction next() {\n\t\tmainState.setOption(\"date\", nextDate(cloneDate($.get(date)), $.get(dateIncrement) ?? $.get(duration), $.get(hiddenDays)));\n\t\treturn this;\n\t}\n\tfunction prev() {\n\t\tmainState.setOption(\"date\", prevDate(cloneDate($.get(date)), $.get(dateIncrement) ?? $.get(duration), $.get(hiddenDays)));\n\t\treturn this;\n\t}\n\tvar $$exports = {\n\t\tsetOption,\n\t\tgetOption,\n\t\trefetchResources,\n\t\trefetchEvents,\n\t\tgetEvents,\n\t\tgetEventById,\n\t\taddEvent,\n\t\tupdateEvent,\n\t\tremoveEventById,\n\t\tgetView,\n\t\tunselect,\n\t\tdateFromPoint,\n\t\tgotoDate,\n\t\tnext,\n\t\tprev\n\t};\n\tvar div = root$19();\n\tlet styles;\n\tvar node = $.child(div);\n\tToolbar(node, {});\n\tvar node_1 = $.sibling(node, 2);\n\t$.component(node_1, () => $.get(View), ($$anchor, View_1) => {\n\t\tView_1($$anchor, {});\n\t});\n\tvar node_2 = $.sibling(node_1, 2);\n\t$.each(node_2, 17, () => $.get(auxComponents), $.index, ($$anchor, AuxComponent) => {\n\t\tvar fragment = $.comment();\n\t\tvar node_3 = $.first_child(fragment);\n\t\t$.component(node_3, () => $.get(AuxComponent), ($$anchor, AuxComponent_1) => {\n\t\t\tAuxComponent_1($$anchor, {});\n\t\t});\n\t\t$.append($$anchor, fragment);\n\t});\n\t$.reset(div);\n\t$.template_effect(($0) => {\n\t\t$.set_class(div, 1, $.clsx([\n\t\t\t$.get(theme).calendar,\n\t\t\t$.get(theme).view,\n\t\t\t$.get(iClass) && $.get(theme)[$.get(iClass)],\n\t\t\t$.get(customScrollbars) && $.get(theme).customScrollbars\n\t\t]));\n\t\t$.set_attribute(div, \"role\", $0);\n\t\tstyles = $.set_style(div, \"\", styles, { height: $.get(height) });\n\t}, [() => $.get(features).includes(\"list\") ? \"list\" : \"table\"]);\n\t$.append($$anchor, div);\n\treturn $.pop($$exports);\n}\n//#endregion\n//#region packages/core/src/plugins/day-grid/options.js\n/**\n* DayGrid + ResourceTimeline\n*/\nfunction createDROptions(options) {\n\tif (!(\"weekNumbers\" in options)) assign(options, {\n\t\tweekNumbers: false,\n\t\tweekNumberContent: void 0\n\t});\n}\n//#endregion\n//#region packages/core/src/plugins/day-grid/derived.js\nfunction colsCount(mainState) {\n\treturn () => {\n\t\tlet { viewDates, options: { duration, hiddenDays } } = mainState;\n\t\tlet count;\n\t\tuntrack(() => count = duration.months || duration.inWeeks ? 7 - hiddenDays.length : viewDates.length);\n\t\treturn count;\n\t};\n}\nfunction grid$3(mainState, viewState) {\n\treturn () => {\n\t\tlet { options: { highlightedDates, validRange }, viewDates } = mainState;\n\t\tlet { colsCount } = viewState;\n\t\tlet grid = [];\n\t\tuntrack(() => {\n\t\t\tlet days = [];\n\t\t\tlet gridColumn = 1;\n\t\t\tlet gridRow = 1;\n\t\t\tfor (let date of viewDates) {\n\t\t\t\tdays.push({\n\t\t\t\t\tgridColumn,\n\t\t\t\t\tgridRow,\n\t\t\t\t\tresource: void 0,\n\t\t\t\t\tdayStart: date,\n\t\t\t\t\tdayEnd: addDay(cloneDate(date)),\n\t\t\t\t\tdisabled: outsideRange(date, validRange),\n\t\t\t\t\thighlight: highlightedDates.some((d) => datesEqual(d, date))\n\t\t\t\t});\n\t\t\t\tif (gridColumn === colsCount) {\n\t\t\t\t\tgrid.push(days);\n\t\t\t\t\tdays = [];\n\t\t\t\t\tgridColumn = 0;\n\t\t\t\t\t++gridRow;\n\t\t\t\t}\n\t\t\t\t++gridColumn;\n\t\t\t}\n\t\t});\n\t\treturn grid;\n\t};\n}\nfunction eventChunks$2(mainState, viewState) {\n\treturn () => {\n\t\tlet { filteredEvents } = mainState;\n\t\tlet { grid } = viewState;\n\t\tlet chunks = [];\n\t\tlet bgChunks = [];\n\t\tuntrack(() => {\n\t\t\tfor (let event of filteredEvents) for (let days of grid) if (bgEvent(event.display)) {\n\t\t\t\tif (event.allDay) bgChunks = bgChunks.concat(createAllDayChunks(event, days));\n\t\t\t} else chunks = chunks.concat(createAllDayChunks(event, days));\n\t\t\tprepareAllDayChunks(chunks);\n\t\t});\n\t\treturn {\n\t\t\tchunks,\n\t\t\tbgChunks\n\t\t};\n\t};\n}\nfunction iEventChunks$2(mainState, viewState) {\n\treturn () => {\n\t\tlet { iEvents } = mainState;\n\t\tlet { grid } = viewState;\n\t\tlet iChunks = [];\n\t\tfor (let [, event] of iEvents) {\n\t\t\tif (!event) continue;\n\t\t\tuntrack(() => {\n\t\t\t\tfor (let days of grid) iChunks = iChunks.concat(createAllDayChunks(event, days, false));\n\t\t\t});\n\t\t}\n\t\treturn iChunks;\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/day-grid/state.svelte.js\nvar ViewState$4 = class {\n\t#colsCount;\n\tget colsCount() {\n\t\treturn $.get(this.#colsCount);\n\t}\n\tset colsCount(value) {\n\t\t$.set(this.#colsCount, value);\n\t}\n\t#grid;\n\tget grid() {\n\t\treturn $.get(this.#grid);\n\t}\n\tset grid(value) {\n\t\t$.set(this.#grid, value);\n\t}\n\t#gridEl;\n\tget gridEl() {\n\t\treturn $.get(this.#gridEl);\n\t}\n\tset gridEl(value) {\n\t\t$.set(this.#gridEl, value, true);\n\t}\n\t#chunks;\n\tget chunks() {\n\t\treturn $.get(this.#chunks);\n\t}\n\tset chunks(value) {\n\t\t$.set(this.#chunks, value);\n\t}\n\t#bgChunks;\n\tget bgChunks() {\n\t\treturn $.get(this.#bgChunks);\n\t}\n\tset bgChunks(value) {\n\t\t$.set(this.#bgChunks, value);\n\t}\n\t#iChunks;\n\tget iChunks() {\n\t\treturn $.get(this.#iChunks);\n\t}\n\tset iChunks(value) {\n\t\t$.set(this.#iChunks, value);\n\t}\n\t#intlDayCell;\n\tget intlDayCell() {\n\t\treturn $.get(this.#intlDayCell);\n\t}\n\tset intlDayCell(value) {\n\t\t$.set(this.#intlDayCell, value);\n\t}\n\t#intlDayPopover;\n\tget intlDayPopover() {\n\t\treturn $.get(this.#intlDayPopover);\n\t}\n\tset intlDayPopover(value) {\n\t\t$.set(this.#intlDayPopover, value);\n\t}\n\t#popupDay;\n\tget popupDay() {\n\t\treturn $.get(this.#popupDay);\n\t}\n\tset popupDay(value) {\n\t\t$.set(this.#popupDay, value, true);\n\t}\n\tconstructor(mainState) {\n\t\tthis.#colsCount = $.derived(colsCount(mainState));\n\t\tthis.#grid = $.derived(grid$3(mainState, this));\n\t\tthis.#gridEl = $.state();\n\t\tlet $$d = $.derived(eventChunks$2(mainState, this)), chunks = $.derived(() => $.get($$d).chunks), bgChunks = $.derived(() => $.get($$d).bgChunks);\n\t\tthis.#chunks = $.derived(() => $.get(chunks));\n\t\tthis.#bgChunks = $.derived(() => $.get(bgChunks));\n\t\tthis.#iChunks = $.derived(iEventChunks$2(mainState, this));\n\t\tthis.hiddenChunks = new SvelteMap();\n\t\tthis.#intlDayCell = $.derived(intl(mainState, \"dayCellFormat\"));\n\t\tthis.#intlDayPopover = $.derived(intl(mainState, \"dayPopoverFormat\"));\n\t\tthis.#popupDay = $.state(null);\n\t}\n};\n//#endregion\n//#region packages/core/src/lib/components/BaseDay.svelte\nvar root$18 = $.from_html(`<div><!></div>`);\nfunction BaseDay($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet el = $.prop($$props, \"el\", 15), allDay = $.prop($$props, \"allDay\", 3, false), resource = $.prop($$props, \"resource\", 3, void 0), dateFromPoint = $.prop($$props, \"dateFromPoint\", 3, () => $$props.date), classes = $.prop($$props, \"classes\", 3, identity), disabled = $.prop($$props, \"disabled\", 3, false), highlight = $.prop($$props, \"highlight\", 3, false), role = $.prop($$props, \"role\", 3, \"cell\"), noIeb = $.prop($$props, \"noIeb\", 3, false), noBeb = $.prop($$props, \"noBeb\", 3, false), defaultContent = $.prop($$props, \"defaultContent\", 3, void 0);\n\tlet $$d = $.derived(() => getContext(\"state\")), today = $.derived(() => $.get($$d).today), snippets = $.derived(() => $.get($$d).snippets), action = $.derived(() => $.get($$d).interaction.action), dayCellContent = $.derived(() => $.get($$d).options.dayCellContent), theme = $.derived(() => $.get($$d).options.theme);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), snap = $.derived(() => $.get($$d_1).snap);\n\tlet isToday = $.derived(() => datesEqual($$props.date, $.get(today)));\n\tlet dayCell = $.derived(() => createContent($.get(dayCellContent), () => ({\n\t\tallDay: allDay(),\n\t\tdate: toLocalDate($$props.date),\n\t\tisToday: $.get(isToday),\n\t\tresource: resource()\n\t}), defaultContent(), $.get(snippets).dayCellContent));\n\tlet classNames = $.derived(() => classes()([\n\t\t$.get(theme).day,\n\t\t$.get(theme).weekdays?.[$$props.date.getUTCDay()],\n\t\t$.get(isToday) && $.get(theme).today,\n\t\thighlight() && $.get(theme).highlight,\n\t\tdisabled() && $.get(theme).disabled,\n\t\tnoIeb() && $.get(theme).noIeb,\n\t\tnoBeb() && $.get(theme).noBeb\n\t]));\n\tonMount(() => {\n\t\tsetPayload(el(), (x, y) => {\n\t\t\treturn {\n\t\t\t\tallDay: allDay(),\n\t\t\t\tdate: dateFromPoint()(x, y),\n\t\t\t\tresource: resource(),\n\t\t\t\tdayEl: el(),\n\t\t\t\tdisabled: disabled()\n\t\t\t};\n\t\t});\n\t});\n\tlet onpointerdown = $.derived(() => !disabled() && $.get(action) ? (jsEvent) => $.get(action).select(jsEvent, $.get(snap)) : void 0);\n\tvar div = root$18();\n\tvar node = $.child(div);\n\tvar consequent = ($$anchor) => {\n\t\tvar fragment = $.comment();\n\t\tvar node_1 = $.first_child(fragment);\n\t\t$.snippet(node_1, () => $$props.content, () => $.get(dayCell));\n\t\t$.append($$anchor, fragment);\n\t};\n\tvar alternate = ($$anchor) => {\n\t\tvar fragment_1 = $.comment();\n\t\tvar node_2 = $.first_child(fragment_1);\n\t\t$.snippet(node_2, () => $.get(dayCell).snippet ?? $.noop, () => $.get(dayCell).arg);\n\t\t$.append($$anchor, fragment_1);\n\t};\n\t$.if(node, ($$render) => {\n\t\tif ($$props.content) $$render(consequent);\n\t\telse $$render(alternate, -1);\n\t});\n\t$.reset(div);\n\t$.bind_this(div, ($$value) => el($$value), () => el());\n\t$.attach(div, () => $$props.content ? null : contentFrom($.get(dayCell).content, $.get(dayCell).snippet));\n\t$.template_effect(() => {\n\t\t$.set_class(div, 1, $.clsx($.get(classNames)));\n\t\t$.set_attribute(div, \"role\", role());\n\t});\n\t$.delegated(\"pointerdown\", div, function(...$$args) {\n\t\t$.get(onpointerdown)?.apply(this, $$args);\n\t});\n\t$.append($$anchor, div);\n\t$.pop();\n}\n$.delegate([\"pointerdown\"]);\n//#endregion\n//#region packages/core/src/lib/components/BaseEvent.svelte\nvar root$17 = $.from_html(`<div><!></div>`);\nvar root_1$7 = $.from_html(`<article><!></article>`);\nfunction BaseEvent($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet el = $.prop($$props, \"el\", 15), classes = $.prop($$props, \"classes\", 3, identity), styles = $.prop($$props, \"styles\", 3, identity);\n\tlet $$d = $.derived(() => getContext(\"state\")), intlEventTime = $.derived(() => $.get($$d).intlEventTime), resources = $.derived(() => $.get($$d).resources), snippets = $.derived(() => $.get($$d).snippets), view = $.derived(() => $.get($$d).view), displayEventEnd = $.derived(() => $.get($$d).options.displayEventEnd), eventBackgroundColor$1 = $.derived(() => $.get($$d).options.eventBackgroundColor), eventColor = $.derived(() => $.get($$d).options.eventColor), eventContent = $.derived(() => $.get($$d).options.eventContent), eventClick = $.derived(() => $.get($$d).options.eventClick), eventDidMount = $.derived(() => $.get($$d).options.eventDidMount), eventClassNames = $.derived(() => $.get($$d).options.eventClassNames), eventMouseEnter = $.derived(() => $.get($$d).options.eventMouseEnter), eventMouseLeave = $.derived(() => $.get($$d).options.eventMouseLeave), eventTextColor$1 = $.derived(() => $.get($$d).options.eventTextColor), theme = $.derived(() => $.get($$d).options.theme);\n\tlet event = $.derived(() => $$props.chunk.event);\n\tlet display = $.derived(() => $$props.chunk.event.display);\n\tlet bgColor = $.derived(() => $.get(event).backgroundColor ?? eventBackgroundColor($$props.chunk.resource ?? findFirstResource($.get(event), $.get(resources))) ?? $.get(eventBackgroundColor$1) ?? $.get(eventColor));\n\tlet txtColor = $.derived(() => $.get(event).textColor ?? eventTextColor($$props.chunk.resource ?? findFirstResource($.get(event), $.get(resources))) ?? $.get(eventTextColor$1));\n\tlet style = $.derived(() => entries(styles()({\n\t\t\"background-color\": $.get(bgColor),\n\t\t\"color\": $.get(txtColor)\n\t})).map((entry) => `${entry[0]}:${entry[1]}`).concat($.get(event).styles).join(\";\"));\n\tlet classNames = $.derived(() => {\n\t\tlet classNames = [bgEvent($.get(display)) ? $.get(theme).bgEvent : $.get(theme).event];\n\t\tif ($.get(event).allDay) {\n\t\t\tif (!datesEqual(setMidnight(cloneDate($$props.chunk.start)), $.get(event).start)) classNames.push($.get(theme).startClipped);\n\t\t\tlet end1 = cloneDate($$props.chunk.end);\n\t\t\tlet end2 = cloneDate($.get(event).end);\n\t\t\tend1.setUTCSeconds(end1.getUTCSeconds() - 1);\n\t\t\tend2.setUTCSeconds(end2.getUTCSeconds() - 1);\n\t\t\tif (!datesEqual(setMidnight(end1), setMidnight(end2))) classNames.push($.get(theme).endClipped);\n\t\t} else {\n\t\t\tif (!datesEqual($$props.chunk.start, $.get(event).start)) classNames.push($.get(theme).startClipped);\n\t\t\tif (!datesEqual($$props.chunk.end, $.get(event).end)) classNames.push($.get(theme).endClipped);\n\t\t}\n\t\treturn classes()(classNames.concat(createEventClasses($.get(eventClassNames), $.get(event), $.get(view))));\n\t});\n\tlet timeText = $.derived(() => createEventTimeText($$props.chunk, $.get(displayEventEnd), $.get(intlEventTime)));\n\tlet content = $.derived(() => createContent($.get(eventContent), () => ({\n\t\tevent: toEventWithLocalDates($.get(event)),\n\t\ttimeText: $.get(timeText),\n\t\tview: toViewWithLocalDates($.get(view))\n\t}), () => createDefaultEventContent($$props.chunk, $.get(timeText), $.get(theme)), $.get(snippets).eventContent));\n\tonMount(() => {\n\t\tif (isFunction($.get(eventDidMount))) $.get(eventDidMount)({\n\t\t\tevent: toEventWithLocalDates($.get(event)),\n\t\t\ttimeText: $.get(timeText),\n\t\t\tel: el(),\n\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t});\n\t});\n\tfunction createHandler(fn, display) {\n\t\treturn isFunction(fn) && !helperEvent(display) ? (jsEvent) => fn({\n\t\t\tevent: toEventWithLocalDates($.get(event)),\n\t\t\tel: el(),\n\t\t\tjsEvent,\n\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t}) : void 0;\n\t}\n\tlet onclick = $.derived(() => !bgEvent($.get(display)) && createHandler($.get(eventClick), $.get(display)) || void 0);\n\tlet onkeydown = $.derived(() => $.get(onclick) && keyEnter($.get(onclick)));\n\tlet onmouseenter = $.derived(() => createHandler($.get(eventMouseEnter), $.get(display)));\n\tlet onmouseleave = $.derived(() => createHandler($.get(eventMouseLeave), $.get(display)));\n\tvar article = root_1$7();\n\t{\n\t\tconst defaultBody = ($$anchor) => {\n\t\t\tvar div = root$17();\n\t\t\tvar node = $.child(div);\n\t\t\t$.snippet(node, () => $.get(content).snippet ?? $.noop, () => $.get(content).arg);\n\t\t\t$.reset(div);\n\t\t\t$.attach(div, () => contentFrom($.get(content).content, $.get(content).snippet));\n\t\t\t$.template_effect(() => $.set_class(div, 1, $.clsx($.get(theme).eventBody)));\n\t\t\t$.append($$anchor, div);\n\t\t};\n\t\tvar node_1 = $.child(article);\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar fragment = $.comment();\n\t\t\tvar node_2 = $.first_child(fragment);\n\t\t\t$.snippet(node_2, () => $$props.body, () => defaultBody, () => $.get(bgColor), () => $.get(txtColor));\n\t\t\t$.append($$anchor, fragment);\n\t\t};\n\t\tvar alternate = ($$anchor) => {\n\t\t\tdefaultBody($$anchor);\n\t\t};\n\t\t$.if(node_1, ($$render) => {\n\t\t\tif ($$props.body) $$render(consequent);\n\t\t\telse $$render(alternate, -1);\n\t\t});\n\t\t$.reset(article);\n\t\t$.bind_this(article, ($$value) => el($$value), () => el());\n\t}\n\t$.template_effect(() => {\n\t\t$.set_class(article, 1, $.clsx($.get(classNames)));\n\t\t$.set_style(article, $.get(style));\n\t\t$.set_attribute(article, \"role\", $.get(onclick) ? \"button\" : void 0);\n\t\t$.set_attribute(article, \"tabindex\", $.get(onclick) ? 0 : void 0);\n\t});\n\t$.delegated(\"click\", article, function(...$$args) {\n\t\t$.get(onclick)?.apply(this, $$args);\n\t});\n\t$.delegated(\"keydown\", article, function(...$$args) {\n\t\t$.get(onkeydown)?.apply(this, $$args);\n\t});\n\t$.event(\"mouseenter\", article, function(...$$args) {\n\t\t$.get(onmouseenter)?.apply(this, $$args);\n\t});\n\t$.event(\"mouseleave\", article, function(...$$args) {\n\t\t$.get(onmouseleave)?.apply(this, $$args);\n\t});\n\t$.delegated(\"pointerdown\", article, function(...$$args) {\n\t\t$$props.onpointerdown?.apply(this, $$args);\n\t});\n\t$.append($$anchor, article);\n\t$.pop();\n}\n$.delegate([\n\t\"click\",\n\t\"keydown\",\n\t\"pointerdown\"\n]);\n//#endregion\n//#region packages/core/src/lib/components/ColHead.svelte\nvar root$16 = $.from_html(`<div><!></div>`);\nfunction ColHead($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet weekday = $.prop($$props, \"weekday\", 3, true), colSpan = $.prop($$props, \"colSpan\", 3, 1), ariaHidden = $.prop($$props, \"ariaHidden\", 3, false), disabled = $.prop($$props, \"disabled\", 3, false), highlight = $.prop($$props, \"highlight\", 3, false), cssSpan = $.prop($$props, \"cssSpan\", 3, false);\n\tlet $$d = $.derived(() => getContext(\"state\")), today = $.derived(() => $.get($$d).today), theme = $.derived(() => $.get($$d).options.theme);\n\tvar div = root$16();\n\tlet styles;\n\tvar node = $.child(div);\n\t$.snippet(node, () => $$props.children);\n\t$.reset(div);\n\t$.template_effect(($0) => {\n\t\t$.set_class(div, 1, $0);\n\t\t$.set_attribute(div, \"role\", ariaHidden() ? null : \"columnheader\");\n\t\t$.set_attribute(div, \"aria-colspan\", ariaHidden() || colSpan() <= 1 ? null : colSpan());\n\t\t$.set_attribute(div, \"aria-colindex\", ariaHidden() ? null : $$props.colIndex);\n\t\t$.set_attribute(div, \"aria-hidden\", ariaHidden() ? \"true\" : null);\n\t\tstyles = $.set_style(div, \"\", styles, { \"--ec-col-group-span\": cssSpan() ? colSpan() : void 0 });\n\t}, [() => $.clsx([\n\t\t$$props.className ?? $.get(theme).colHead,\n\t\tweekday() && $.get(theme).weekdays?.[$$props.date.getUTCDay()],\n\t\tweekday() && datesEqual($$props.date, $.get(today)) && $.get(theme).today,\n\t\thighlight() && $.get(theme).highlight,\n\t\tdisabled() && $.get(theme).disabled\n\t])]);\n\t$.append($$anchor, div);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/lib/components/DayHeader.svelte\nvar root$15 = $.from_html(`<time></time>`);\nfunction DayHeader($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet alPrefix = $.prop($$props, \"alPrefix\", 3, \"\");\n\tlet $$d = $.derived(() => getContext(\"state\")), intlDayHeader = $.derived(() => $.get($$d).intlDayHeader), intlDayHeaderAL = $.derived(() => $.get($$d).intlDayHeaderAL);\n\tvar time = root$15();\n\t$.attach(time, () => contentFrom($.get(intlDayHeader).format($$props.date)));\n\t$.template_effect(($0, $1) => {\n\t\t$.set_attribute(time, \"datetime\", $0);\n\t\t$.set_attribute(time, \"aria-label\", `${alPrefix() ?? \"\"}${$1 ?? \"\"}`);\n\t}, [() => toISOString($$props.date, 10), () => $.get(intlDayHeaderAL).format($$props.date)]);\n\t$.append($$anchor, time);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/lib/components/InteractableEvent.svelte\nfunction InteractableEvent($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet el = $.prop($$props, \"el\", 15);\n\tlet $$d = $.derived(() => getContext(\"state\")), iClasses = $.derived(() => $.get($$d).iClasses), action = $.derived(() => $.get($$d).interaction.action), Resizer = $.derived(() => $.get($$d).interaction.resizer);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), snap = $.derived(() => $.get($$d_1).snap);\n\tlet event = $.derived(() => $$props.chunk.event);\n\tlet display = $.derived(() => $$props.chunk.event.display);\n\tlet classes = $.derived(() => (classNames) => $.get(iClasses)(classNames, $.get(event)));\n\tfunction createDragHandler(event) {\n\t\treturn $.get(action)?.draggable(event) ? (jsEvent) => $.get(action).drag(event, jsEvent, $$props.forceDate, $$props.forceMargin, $.get(snap)) : $.get(action)?.noAction;\n\t}\n\tlet onpointerdown = $.derived(() => !bgEvent($.get(display)) && !helperEvent($.get(display)) ? createDragHandler($.get(event)) : void 0);\n\t{\n\t\tconst body = ($$anchor, defaultBody = $.noop) => {\n\t\t\tvar fragment_1 = $.comment();\n\t\t\tvar node = $.first_child(fragment_1);\n\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\tvar fragment_2 = $.comment();\n\t\t\t\tvar node_1 = $.first_child(fragment_2);\n\t\t\t\t$.component(node_1, () => $.get(Resizer), ($$anchor, Resizer_1) => {\n\t\t\t\t\tResizer_1($$anchor, {\n\t\t\t\t\t\tget chunk() {\n\t\t\t\t\t\t\treturn $$props.chunk;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget axis() {\n\t\t\t\t\t\t\treturn $$props.axis;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget forceDate() {\n\t\t\t\t\t\t\treturn $$props.forceDate;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget forceMargin() {\n\t\t\t\t\t\t\treturn $$props.forceMargin;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\t\tvar fragment_3 = $.comment();\n\t\t\t\t\t\t\tvar node_2 = $.first_child(fragment_3);\n\t\t\t\t\t\t\t$.snippet(node_2, defaultBody);\n\t\t\t\t\t\t\t$.append($$anchor, fragment_3);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t$.append($$anchor, fragment_2);\n\t\t\t};\n\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\tvar fragment_4 = $.comment();\n\t\t\t\tvar node_3 = $.first_child(fragment_4);\n\t\t\t\t$.snippet(node_3, defaultBody);\n\t\t\t\t$.append($$anchor, fragment_4);\n\t\t\t};\n\t\t\t$.if(node, ($$render) => {\n\t\t\t\tif ($.get(Resizer)) $$render(consequent);\n\t\t\t\telse $$render(alternate, -1);\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\t\tBaseEvent($$anchor, {\n\t\t\tget chunk() {\n\t\t\t\treturn $$props.chunk;\n\t\t\t},\n\t\t\tget classes() {\n\t\t\t\treturn $.get(classes);\n\t\t\t},\n\t\t\tget styles() {\n\t\t\t\treturn $$props.styles;\n\t\t\t},\n\t\t\tget onpointerdown() {\n\t\t\t\treturn $.get(onpointerdown);\n\t\t\t},\n\t\t\tget el() {\n\t\t\t\treturn el();\n\t\t\t},\n\t\t\tset el($$value) {\n\t\t\t\tel($$value);\n\t\t\t},\n\t\t\tbody,\n\t\t\t$$slots: { body: true }\n\t\t});\n\t}\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/day-grid/Day.svelte\nvar root$14 = $.from_html(`<span><!></span>`);\nvar root_1$6 = $.from_html(`<a role=\"button\" tabindex=\"0\" aria-haspopup=\"dialog\"><!></a>`);\nvar root_2$3 = $.from_html(`<div><time><!></time> <!></div> <div><!></div>`, 1);\nfunction Day$3($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tlet viewState = getContext(\"view-state\");\n\t$.derived(() => mainState.features);\n\tlet snippets = $.derived(() => mainState.snippets), date = $.derived(() => mainState.options.date), firstDay = $.derived(() => mainState.options.firstDay), moreLinkContent = $.derived(() => mainState.options.moreLinkContent), theme = $.derived(() => mainState.options.theme), weekNumbers = $.derived(() => mainState.options.weekNumbers), weekNumberContent = $.derived(() => mainState.options.weekNumberContent);\n\tlet hiddenChunks = $.derived(() => viewState.hiddenChunks), intlDayCell = $.derived(() => viewState.intlDayCell);\n\tlet dayStart = $.derived(() => $$props.day.dayStart), disabled = $.derived(() => $$props.day.disabled), highlight = $.derived(() => $$props.day.highlight);\n\tlet otherMonth = $.derived(() => $.get(dayStart).getUTCMonth() !== $.get(date).getUTCMonth());\n\tlet classes = $.derived(() => (classNames) => [...classNames, $.get(otherMonth) && $.get(theme).otherMonth]);\n\tlet showWeekNumber = $.derived(() => $.get(weekNumbers) && $.get(dayStart).getUTCDay() === ($.get(firstDay) ? 1 : 0));\n\tlet weekNumber = $.derived(() => $.get(showWeekNumber) ? createWeekNumberContent(getWeekNumber($.get(dayStart), $.get(firstDay)), $.get(dayStart), $.get(weekNumberContent), $.get(snippets).weekNumberContent) : {});\n\tlet dayHiddenChunks = $.derived(() => $.get(hiddenChunks).get($.get(dayStart).getTime()));\n\tlet moreLink = $.derived(() => {\n\t\tif (!$.get(dayHiddenChunks)) return {};\n\t\tlet num = $.get(dayHiddenChunks).length;\n\t\tlet text = \"+\" + num + \" more\";\n\t\treturn createContent($.get(moreLinkContent), () => ({\n\t\t\tnum,\n\t\t\ttext\n\t\t}), text, $.get(snippets).moreLinkContent);\n\t});\n\tfunction showMore() {\n\t\tviewState.popupDay = $$props.day;\n\t}\n\t{\n\t\tconst content = ($$anchor, dayCell = $.noop) => {\n\t\t\tvar fragment_1 = root_2$3();\n\t\t\tvar div = $.first_child(fragment_1);\n\t\t\tvar time = $.child(div);\n\t\t\tvar node = $.child(time);\n\t\t\t$.snippet(node, () => dayCell().snippet ?? $.noop, () => dayCell().arg);\n\t\t\t$.reset(time);\n\t\t\t$.attach(time, () => contentFrom(dayCell().content, dayCell().snippet));\n\t\t\tvar node_1 = $.sibling(time, 2);\n\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\tvar span = root$14();\n\t\t\t\tvar node_2 = $.child(span);\n\t\t\t\t$.snippet(node_2, () => $.get(weekNumber).snippet ?? $.noop, () => $.get(weekNumber).arg);\n\t\t\t\t$.reset(span);\n\t\t\t\t$.attach(span, () => contentFrom($.get(weekNumber).content, $.get(weekNumber).snippet));\n\t\t\t\t$.template_effect(() => $.set_class(span, 1, $.get(theme).weekNumber));\n\t\t\t\t$.append($$anchor, span);\n\t\t\t};\n\t\t\t$.if(node_1, ($$render) => {\n\t\t\t\tif ($.get(showWeekNumber)) $$render(consequent);\n\t\t\t});\n\t\t\t$.reset(div);\n\t\t\tvar div_1 = $.sibling(div, 2);\n\t\t\tvar node_3 = $.child(div_1);\n\t\t\tvar consequent_1 = ($$anchor) => {\n\t\t\t\tvar a = root_1$6();\n\t\t\t\tvar event_handler = $.derived(() => stopPropagation(showMore));\n\t\t\t\tvar event_handler_1 = $.derived(() => keyEnter(showMore));\n\t\t\t\tvar event_handler_2 = $.derived(stopPropagation);\n\t\t\t\tvar node_4 = $.child(a);\n\t\t\t\t$.snippet(node_4, () => $.get(moreLink).snippet ?? $.noop, () => $.get(moreLink).arg);\n\t\t\t\t$.reset(a);\n\t\t\t\t$.attach(a, () => contentFrom($.get(moreLink).content, $.get(moreLink).snippet));\n\t\t\t\t$.delegated(\"click\", a, function(...$$args) {\n\t\t\t\t\t$.get(event_handler)?.apply(this, $$args);\n\t\t\t\t});\n\t\t\t\t$.delegated(\"keydown\", a, function(...$$args) {\n\t\t\t\t\t$.get(event_handler_1)?.apply(this, $$args);\n\t\t\t\t});\n\t\t\t\t$.delegated(\"pointerdown\", a, function(...$$args) {\n\t\t\t\t\t$.get(event_handler_2)?.apply(this, $$args);\n\t\t\t\t});\n\t\t\t\t$.append($$anchor, a);\n\t\t\t};\n\t\t\t$.if(node_3, ($$render) => {\n\t\t\t\tif ($.get(dayHiddenChunks)) $$render(consequent_1);\n\t\t\t});\n\t\t\t$.reset(div_1);\n\t\t\t$.template_effect(($0) => {\n\t\t\t\t$.set_class(div, 1, $.get(theme).dayHead);\n\t\t\t\t$.set_attribute(time, \"datetime\", $0);\n\t\t\t\t$.set_class(div_1, 1, $.get(theme).dayFoot);\n\t\t\t}, [() => toISOString($.get(dayStart), 10)]);\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\t\tBaseDay($$anchor, {\n\t\t\tget date() {\n\t\t\t\treturn $.get(dayStart);\n\t\t\t},\n\t\t\tallDay: true,\n\t\t\tget classes() {\n\t\t\t\treturn $.get(classes);\n\t\t\t},\n\t\t\tget disabled() {\n\t\t\t\treturn $.get(disabled);\n\t\t\t},\n\t\t\tget highlight() {\n\t\t\t\treturn $.get(highlight);\n\t\t\t},\n\t\t\tget noIeb() {\n\t\t\t\treturn $$props.noIeb;\n\t\t\t},\n\t\t\tget noBeb() {\n\t\t\t\treturn $$props.noBeb;\n\t\t\t},\n\t\t\tdefaultContent: () => $.get(intlDayCell).format($.get(dayStart)),\n\t\t\tcontent,\n\t\t\t$$slots: { content: true }\n\t\t});\n\t}\n\t$.pop();\n}\n$.delegate([\n\t\"click\",\n\t\"keydown\",\n\t\"pointerdown\"\n]);\n//#endregion\n//#region packages/core/src/plugins/day-grid/Event.svelte\nfunction Event$3($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet inPopup = $.prop($$props, \"inPopup\", 3, false);\n\tlet $$d = $.derived(() => getContext(\"state\")), dayMaxEvents = $.derived(() => $.get($$d).options.dayMaxEvents), eventGap = $.derived(() => $.get($$d).options.eventGap);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), colsCount = $.derived(() => $.get($$d_1).colsCount), gridEl = $.derived(() => $.get($$d_1).gridEl), hiddenChunks = $.derived(() => $.get($$d_1).hiddenChunks), popupDay = $.derived(() => $.get($$d_1).popupDay);\n\tlet el = $.state(void 0);\n\tlet margin = $.state(1);\n\tlet hidden = $.state(false);\n\tlet event = $.derived(() => $$props.chunk.event);\n\tlet display = $.derived(() => $$props.chunk.event.display);\n\tlet dayEl = $.derived(() => $.get(gridEl).children.item(($$props.chunk.gridRow - 1) * $.get(colsCount) + $$props.chunk.gridColumn - 1));\n\t$.user_effect(() => {\n\t\tif (!inPopup()) $.set(margin, height($.get(dayEl).firstElementChild) || 1, true);\n\t});\n\tlet styles = $.derived(() => (style) => {\n\t\tstyle[\"grid-column\"] = `${$$props.chunk.gridColumn} / span ${$$props.chunk.dates.length}`;\n\t\tstyle[\"grid-row\"] = $$props.chunk.gridRow;\n\t\tif (!bgEvent($.get(display))) {\n\t\t\tlet marginTop = inPopup() ? 1 : $.get(margin);\n\t\t\tif ($.get(event)._margin) {\n\t\t\t\tlet [_margin, _gridRow] = $.get(event)._margin;\n\t\t\t\tif (_margin > marginTop && $$props.chunk.gridRow === _gridRow) marginTop = _margin;\n\t\t\t}\n\t\t\tstyle[\"margin-block-start\"] = `${marginTop}px`;\n\t\t}\n\t\tif ($.get(hidden)) style[\"visibility\"] = \"hidden\";\n\t\treturn style;\n\t});\n\tfunction reposition() {\n\t\t$.set(margin, repositionEvent$1($$props.chunk, height($.get(el)), height($.get(dayEl).firstElementChild) || 1, $.get(eventGap)), true);\n\t}\n\tfunction hide() {\n\t\tif ($.get(dayMaxEvents) === true) {\n\t\t\tlet h = height($.get(dayEl)) - footHeight($.get(dayEl));\n\t\t\t$.set(hidden, $$props.chunk.bottom > h);\n\t\t\tif ($.get(hidden)) for (let date of $$props.chunk.dates) {\n\t\t\t\tlet key = date.getTime();\n\t\t\t\tif ($.get(hiddenChunks).has(key)) {\n\t\t\t\t\tlet chunks = $.get(hiddenChunks).get(key);\n\t\t\t\t\tif (!chunks.includes($$props.chunk)) $.get(hiddenChunks).set(key, [...chunks, $$props.chunk]);\n\t\t\t\t} else $.get(hiddenChunks).set(key, [$$props.chunk]);\n\t\t\t}\n\t\t} else {\n\t\t\t$.set(hidden, false);\n\t\t\tif ($.get(hiddenChunks).size) $.get(hiddenChunks).clear();\n\t\t}\n\t}\n\tfunction footHeight(dayEl) {\n\t\tlet h = 0;\n\t\tfor (let i = 0; i < $$props.chunk.dates.length; ++i) {\n\t\t\th = max(h, height(dayEl.lastElementChild));\n\t\t\tdayEl = dayEl.nextElementSibling;\n\t\t\tif (!dayEl) break;\n\t\t}\n\t\treturn h;\n\t}\n\tvar $$exports = {\n\t\treposition,\n\t\thide\n\t};\n\t{\n\t\tlet $0 = $.derived(() => inPopup() && $.get(popupDay).dayStart);\n\t\tlet $1 = $.derived(() => [$.get(margin), $$props.chunk.gridRow]);\n\t\tInteractableEvent($$anchor, {\n\t\t\tget chunk() {\n\t\t\t\treturn $$props.chunk;\n\t\t\t},\n\t\t\tget styles() {\n\t\t\t\treturn $.get(styles);\n\t\t\t},\n\t\t\taxis: \"x\",\n\t\t\tget forceDate() {\n\t\t\t\treturn $.get($0);\n\t\t\t},\n\t\t\tget forceMargin() {\n\t\t\t\treturn $.get($1);\n\t\t\t},\n\t\t\tget el() {\n\t\t\t\treturn $.get(el);\n\t\t\t},\n\t\t\tset el($$value) {\n\t\t\t\t$.set(el, $$value, true);\n\t\t\t}\n\t\t});\n\t}\n\treturn $.pop($$exports);\n}\n//#endregion\n//#region packages/core/src/plugins/day-grid/Popup.svelte\nvar root$13 = $.from_html(`<dialog closedby=\"closerequest\"><header><time></time>  <a role=\"button\" tabindex=\"0\">&times;</a></header> <div></div></dialog>`);\nfunction Popup($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet viewState = getContext(\"view-state\");\n\tlet $$d = $.derived(() => getContext(\"state\")), interaction = $.derived(() => $.get($$d).interaction), buttonText = $.derived(() => $.get($$d).options.buttonText), theme = $.derived(() => $.get($$d).options.theme);\n\tlet colsCount = $.derived(() => viewState.colsCount), chunks = $.derived(() => viewState.chunks), gridEl = $.derived(() => viewState.gridEl), intlDayPopover = $.derived(() => viewState.intlDayPopover), popupDay = $.derived(() => viewState.popupDay);\n\tlet el = $.state(void 0);\n\tlet style = $.state(\"\");\n\tlet gridColumn = $.derived(() => $.get(popupDay).gridColumn), gridRow = $.derived(() => $.get(popupDay).gridRow), dayStart = $.derived(() => $.get(popupDay).dayStart), dayEnd = $.derived(() => $.get(popupDay).dayEnd);\n\tlet popupChunks = $.derived(() => {\n\t\tlet result = [];\n\t\tfor (let chunk of $.get(chunks)) if (chunk.gridRow === $.get(gridRow) && chunk.gridColumn <= $.get(gridColumn) && chunk.gridColumn + chunk.dates.length > $.get(gridColumn)) result.push(assign({}, chunk, createEventChunk(chunk.event, $.get(dayStart), $.get(dayEnd))));\n\t\tresult.sort((a, b) => a.top - b.top);\n\t\treturn result;\n\t});\n\tonMount(() => {\n\t\t$.get(el).show();\n\t});\n\t$.user_effect(() => {\n\t\tif ($.get(popupChunks).length) untrack(position);\n\t\telse close();\n\t});\n\tfunction position() {\n\t\tlet dayEl = $.get(gridEl).children.item(($.get(gridRow) - 1) * $.get(colsCount) + $.get(gridColumn) - 1);\n\t\tlet popupRect = rect($.get(el));\n\t\tlet dayRect = rect(dayEl);\n\t\tlet gridRect = rect($.get(gridEl));\n\t\t$.set(style, \"\");\n\t\tlet left;\n\t\tif (popupRect.width >= gridRect.width) {\n\t\t\tleft = gridRect.left - dayRect.left;\n\t\t\tlet right = dayRect.right - gridRect.right;\n\t\t\t$.set(style, $.get(style) + `inset-inline-end:${right}px;`);\n\t\t} else {\n\t\t\tleft = (dayRect.width - popupRect.width) / 2;\n\t\t\tif (dayRect.left + left < gridRect.left) left = gridRect.left - dayRect.left;\n\t\t\telse if (dayRect.left + left + popupRect.width > gridRect.right) left = gridRect.right - dayRect.left - popupRect.width;\n\t\t}\n\t\t$.set(style, $.get(style) + `inset-inline-start:${left}px;`);\n\t\tlet top;\n\t\tif (popupRect.height >= gridRect.height) {\n\t\t\ttop = gridRect.top - dayRect.top;\n\t\t\t$.set(style, $.get(style) + `block-size:${gridRect.height}px;`);\n\t\t} else {\n\t\t\ttop = (dayRect.height - popupRect.height) / 2;\n\t\t\tif (dayRect.top + top < gridRect.top) top = gridRect.top - dayRect.top;\n\t\t\telse if (dayRect.top + top + popupRect.height > gridRect.bottom) top = gridRect.bottom - dayRect.top - popupRect.height;\n\t\t}\n\t\t$.set(style, $.get(style) + `inset-block-start:${top}px;`);\n\t}\n\tfunction close() {\n\t\tviewState.popupDay = null;\n\t}\n\tfunction handlePointerDownOutside() {\n\t\tclose();\n\t\t$.get(interaction).action?.noClick();\n\t}\n\tvar dialog = root$13();\n\tlet styles;\n\tvar header = $.child(dialog);\n\tvar time = $.child(header);\n\t$.attach(time, () => contentFrom($.get(intlDayPopover).format($.get(dayStart))));\n\tvar a_1 = $.sibling(time, 2);\n\t$.autofocus(a_1, true);\n\tvar event_handler = $.derived(() => stopPropagation(close));\n\tvar event_handler_1 = $.derived(() => keyEnter(close));\n\t$.reset(header);\n\tvar div = $.sibling(header, 2);\n\t$.each(div, 21, () => $.get(popupChunks), $.index, ($$anchor, chunk) => {\n\t\tEvent$3($$anchor, {\n\t\t\tget chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t},\n\t\t\tinPopup: true\n\t\t});\n\t});\n\t$.reset(div);\n\t$.reset(dialog);\n\t$.bind_this(dialog, ($$value) => $.set(el, $$value), () => $.get(el));\n\t$.attach(dialog, () => outsideEvent(\"pointerdown\"));\n\t$.template_effect(($0) => {\n\t\t$.set_class(dialog, 1, $.get(theme).popup);\n\t\tstyles = $.set_style(dialog, $.get(style), styles, { \"grid-area\": `${$.get(gridRow) + 1} / ${$.get(gridColumn)}` });\n\t\t$.set_class(header, 1, $.get(theme).dayHead);\n\t\t$.set_attribute(time, \"datetime\", $0);\n\t\t$.set_attribute(a_1, \"aria-label\", $.get(buttonText).close);\n\t\t$.set_class(div, 1, $.get(theme).events);\n\t}, [() => toISOString($.get(dayStart), 10)]);\n\t$.event(\"pointerdownoutside\", dialog, handlePointerDownOutside);\n\t$.event(\"close\", dialog, close);\n\t$.delegated(\"click\", a_1, function(...$$args) {\n\t\t$.get(event_handler)?.apply(this, $$args);\n\t});\n\t$.delegated(\"keydown\", a_1, function(...$$args) {\n\t\t$.get(event_handler_1)?.apply(this, $$args);\n\t});\n\t$.append($$anchor, dialog);\n\t$.pop();\n}\n$.delegate([\"click\", \"keydown\"]);\n//#endregion\n//#region packages/core/src/plugins/day-grid/View.svelte\nvar root$12 = $.from_html(`<div role=\"columnheader\"><span></span></div>`);\nvar root_1$5 = $.from_html(`<section><header><div role=\"row\"></div></header> <div><div></div> <div><!> <!> <!></div></div> <!></section>`);\nfunction View$3($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tlet viewState = new ViewState$4(mainState);\n\tsetContext(\"view-state\", viewState);\n\tlet intlDayHeader = $.derived(() => mainState.intlDayHeader), intlDayHeaderAL = $.derived(() => mainState.intlDayHeaderAL), dayMaxEvents = $.derived(() => mainState.options.dayMaxEvents), eventGap = $.derived(() => mainState.options.eventGap), theme = $.derived(() => mainState.options.theme);\n\tlet grid = $.derived(() => viewState.grid), chunks = $.derived(() => viewState.chunks), bgChunks = $.derived(() => viewState.bgChunks), iChunks = $.derived(() => viewState.iChunks), hiddenChunks = $.derived(() => viewState.hiddenChunks), popupDay = $.derived(() => viewState.popupDay);\n\tlet refs = [];\n\tfunction reposition() {\n\t\trunReposition(refs, $.get(chunks));\n\t\t$.get(hiddenChunks).clear();\n\t\ttick().then(hide);\n\t}\n\tfunction hide() {\n\t\t$.get(hiddenChunks).size;\n\t\trefs.forEach((ref) => ref?.hide());\n\t}\n\t$.user_effect(() => {\n\t\t$.get(eventGap);\n\t\treposition();\n\t});\n\t$.user_effect(hide);\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\tvar consequent_1 = ($$anchor) => {\n\t\tvar section = root_1$5();\n\t\tlet styles;\n\t\tvar header = $.child(section);\n\t\tvar div = $.child(header);\n\t\t$.each(div, 21, () => $.get(grid)[0], $.index, ($$anchor, $$item, i) => {\n\t\t\tlet dayStart = () => $.get($$item).dayStart;\n\t\t\tvar div_1 = root$12();\n\t\t\t$.set_attribute(div_1, \"aria-colindex\", 1 + i);\n\t\t\tvar span = $.child(div_1);\n\t\t\t$.attach(span, () => contentFrom($.get(intlDayHeader).format(dayStart())));\n\t\t\t$.reset(div_1);\n\t\t\t$.template_effect(($0, $1) => {\n\t\t\t\t$.set_class(div_1, 1, $0);\n\t\t\t\t$.set_attribute(span, \"aria-label\", $1);\n\t\t\t}, [() => $.clsx([$.get(theme).colHead, $.get(theme).weekdays?.[dayStart().getUTCDay()]]), () => $.get(intlDayHeaderAL).format(dayStart())]);\n\t\t\t$.append($$anchor, div_1);\n\t\t});\n\t\t$.reset(div);\n\t\t$.reset(header);\n\t\tvar div_2 = $.sibling(header, 2);\n\t\tvar div_3 = $.child(div_2);\n\t\t$.each(div_3, 21, () => $.get(grid), $.index, ($$anchor, days, i) => {\n\t\t\tvar fragment_1 = $.comment();\n\t\t\tvar node_1 = $.first_child(fragment_1);\n\t\t\t$.each(node_1, 17, () => $.get(days), $.index, ($$anchor, day, j) => {\n\t\t\t\t{\n\t\t\t\t\tlet $0 = $.derived(() => j + 1 === length($.get(days)));\n\t\t\t\t\tlet $1 = $.derived(() => i + 1 === length($.get(grid)));\n\t\t\t\t\tDay$3($$anchor, {\n\t\t\t\t\t\tget day() {\n\t\t\t\t\t\t\treturn $.get(day);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget noIeb() {\n\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget noBeb() {\n\t\t\t\t\t\t\treturn $.get($1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_1);\n\t\t});\n\t\t$.reset(div_3);\n\t\t$.bind_this(div_3, ($$value) => viewState.gridEl = $$value, () => viewState?.gridEl);\n\t\tvar div_4 = $.sibling(div_3, 2);\n\t\tvar node_2 = $.child(div_4);\n\t\t$.each(node_2, 19, () => $.get(chunks), (chunk) => chunk.id, ($$anchor, chunk, i) => {\n\t\t\t$.bind_this(Event$3($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} }), ($$value, i) => refs[i] = $$value, (i) => refs?.[i], () => [$.get(i)]);\n\t\t});\n\t\tvar node_3 = $.sibling(node_2, 2);\n\t\t$.each(node_3, 17, () => $.get(bgChunks), (chunk) => chunk.id, ($$anchor, chunk) => {\n\t\t\tEvent$3($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\tvar node_4 = $.sibling(node_3, 2);\n\t\t$.each(node_4, 17, () => $.get(iChunks), $.index, ($$anchor, chunk) => {\n\t\t\tEvent$3($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\t$.reset(div_4);\n\t\t$.reset(div_2);\n\t\tvar node_5 = $.sibling(div_2, 2);\n\t\tvar consequent = ($$anchor) => {\n\t\t\tPopup($$anchor, {});\n\t\t};\n\t\t$.if(node_5, ($$render) => {\n\t\t\tif ($.get(popupDay)) $$render(consequent);\n\t\t});\n\t\t$.reset(section);\n\t\t$.bind_this(section, ($$value) => mainState.mainEl = $$value, () => mainState?.mainEl);\n\t\t$.attach(section, () => resizeObserver(reposition));\n\t\t$.template_effect(($0) => {\n\t\t\t$.set_class(section, 1, $.clsx([$.get(theme).main, $.get(dayMaxEvents) === true && $.get(theme).uniform]));\n\t\t\tstyles = $.set_style(section, \"\", styles, $0);\n\t\t\t$.set_class(header, 1, $.get(theme).header);\n\t\t\t$.set_class(div, 1, $.get(theme).grid);\n\t\t\t$.set_class(div_2, 1, $.get(theme).body);\n\t\t\t$.set_class(div_3, 1, $.get(theme).grid);\n\t\t\t$.set_class(div_4, 1, $.get(theme).events);\n\t\t}, [() => ({\n\t\t\t\"--ec-grid-cols\": length($.get(grid)[0]),\n\t\t\t\"--ec-grid-rows\": length($.get(grid))\n\t\t})]);\n\t\t$.append($$anchor, section);\n\t};\n\tvar d = $.derived(() => !empty($.get(grid)) && !empty($.get(grid)[0]));\n\t$.if(node, ($$render) => {\n\t\tif ($.get(d)) $$render(consequent_1);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/day-grid/index.js\nvar day_grid_default = { createOptions(options) {\n\tcreateDROptions(options);\n\tassign(options, {\n\t\tdayMaxEvents: false,\n\t\tdayCellFormat: { day: \"numeric\" },\n\t\tdayPopoverFormat: {\n\t\t\tmonth: \"long\",\n\t\t\tday: \"numeric\",\n\t\t\tyear: \"numeric\"\n\t\t},\n\t\tmoreLinkContent: void 0,\n\t\tview: \"dayGridMonth\"\n\t});\n\tassign(options.buttonText, {\n\t\tdayGridDay: \"day\",\n\t\tdayGridMonth: \"month\",\n\t\tdayGridWeek: \"week\",\n\t\tclose: \"Close\"\n\t});\n\tassign(options.theme, {\n\t\tuniform: \"ec-uniform\",\n\t\tdayFoot: \"ec-day-foot\",\n\t\totherMonth: \"ec-other-month\",\n\t\tpopup: \"ec-popup\"\n\t});\n\tassign(options.views, {\n\t\tdayGridDay: {\n\t\t\tbuttonText: btnTextDay,\n\t\t\tcomponent: () => View$3,\n\t\t\tdayHeaderFormat: { weekday: \"long\" },\n\t\t\tdisplayEventEnd: false,\n\t\t\tduration: { days: 1 },\n\t\t\ttheme: themeView(\"ec-day-grid ec-day-view\")\n\t\t},\n\t\tdayGridWeek: {\n\t\t\tbuttonText: btnTextWeek,\n\t\t\tcomponent: () => View$3,\n\t\t\tdisplayEventEnd: false,\n\t\t\ttheme: themeView(\"ec-day-grid ec-week-view\")\n\t\t},\n\t\tdayGridMonth: {\n\t\t\tbuttonText: btnTextMonth,\n\t\t\tcomponent: initMonthViewComponent$1,\n\t\t\tdayHeaderFormat: { weekday: \"short\" },\n\t\t\tdayHeaderAriaLabelFormat: { weekday: \"long\" },\n\t\t\tdisplayEventEnd: false,\n\t\t\tduration: { months: 1 },\n\t\t\ttheme: themeView(\"ec-day-grid ec-month-view\"),\n\t\t\ttitleFormat: {\n\t\t\t\tyear: \"numeric\",\n\t\t\t\tmonth: \"long\"\n\t\t\t}\n\t\t}\n\t});\n} };\nfunction initMonthViewComponent$1(mainState) {\n\tmainState.features = [\"dayNumber\"];\n\tmainState.extensions.activeRange = (start, end) => {\n\t\tlet { options: { firstDay } } = mainState;\n\t\treturn {\n\t\t\tstart: prevClosestDay(start, firstDay),\n\t\t\tend: nextClosestDay(end, firstDay)\n\t\t};\n\t};\n\treturn View$3;\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/lib/events.js\nfunction eventDraggable(event, $eventStartEditable, $editable) {\n\treturn event.startEditable ?? $eventStartEditable ?? event.editable ?? $editable;\n}\nfunction eventResizable(event, $eventDurationEditable, $editable) {\n\treturn event.durationEditable ?? $eventDurationEditable ?? event.editable ?? $editable;\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/lib/utils.js\nvar busy = false;\nfunction animate(fn) {\n\tif (!busy) {\n\t\tbusy = true;\n\t\twindow.requestAnimationFrame(() => {\n\t\t\tfn();\n\t\t\tbusy = false;\n\t\t});\n\t}\n}\nfunction limit(value, minLimit, maxLimit) {\n\treturn max(minLimit, min(maxLimit, value));\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/effects.js\nfunction setIClasses(mainState) {\n\treturn () => {\n\t\tlet { options: { editable, eventStartEditable, theme } } = mainState;\n\t\tmainState.iClasses = (classNames, event) => {\n\t\t\tlet { display } = event;\n\t\t\treturn [...classNames, helperEvent(display) ? [theme[display]] : !bgEvent(display) && eventDraggable(event, eventStartEditable, editable) ? [theme.draggable] : []];\n\t\t};\n\t};\n}\nfunction handleScroll(mainState) {\n\treturn () => {\n\t\tlet { interaction, mainEl } = mainState;\n\t\tif (mainEl) return listen(mainEl, \"scroll\", () => {\n\t\t\tinteraction.action.handleScroll();\n\t\t\tinteraction.pointer?.handleScroll();\n\t\t});\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/state.svelte.js\nvar AuxState = class {\n\tconstructor(mainState) {\n\t\tthis.#setupEffects(mainState);\n\t}\n\t#setupEffects(mainState) {\n\t\t$.user_pre_effect(setIClasses(mainState));\n\t\t$.user_effect(handleScroll(mainState));\n\t}\n};\n//#endregion\n//#region packages/core/src/plugins/interaction/Action.svelte\nfunction Action($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tlet events = $.derived(() => mainState.events), iEvents = $.derived(() => mainState.iEvents), features = $.derived(() => mainState.features), view = $.derived(() => mainState.view), mainEl = $.derived(() => mainState.mainEl), dateClick = $.derived(() => mainState.options.dateClick), dragConstraint = $.derived(() => mainState.options.dragConstraint), dragScroll = $.derived(() => mainState.options.dragScroll), editable = $.derived(() => mainState.options.editable), eventStartEditable = $.derived(() => mainState.options.eventStartEditable), eventDragMinDistance = $.derived(() => mainState.options.eventDragMinDistance), eventDragStart = $.derived(() => mainState.options.eventDragStart), eventDragStop = $.derived(() => mainState.options.eventDragStop), eventDrop = $.derived(() => mainState.options.eventDrop), eventLongPressDelay = $.derived(() => mainState.options.eventLongPressDelay), eventResizeStart = $.derived(() => mainState.options.eventResizeStart), eventResizeStop = $.derived(() => mainState.options.eventResizeStop), eventResize = $.derived(() => mainState.options.eventResize), longPressDelay = $.derived(() => mainState.options.longPressDelay), resizeConstraint = $.derived(() => mainState.options.resizeConstraint), selectable = $.derived(() => mainState.options.selectable), selectFn = $.derived(() => mainState.options.select), selectBackgroundColor = $.derived(() => mainState.options.selectBackgroundColor), selectConstraint = $.derived(() => mainState.options.selectConstraint), selectLongPressDelay = $.derived(() => mainState.options.selectLongPressDelay), selectMinDistance = $.derived(() => mainState.options.selectMinDistance), unselectFn = $.derived(() => mainState.options.unselect), unselectAuto = $.derived(() => mainState.options.unselectAuto), unselectCancel = $.derived(() => mainState.options.unselectCancel), validRange = $.derived(() => mainState.options.validRange);\n\tconst ACTION_DRAG = 1;\n\tconst ACTION_RESIZE_END = 2;\n\tconst ACTION_RESIZE_START = 3;\n\tconst ACTION_SELECT = 4;\n\tconst ACTION_CLICK = 5;\n\tconst ACTION_NO_ACTION = 6;\n\tlet action;\n\tlet interacting;\n\tlet event;\n\tlet iEvent;\n\tlet display;\n\tlet date;\n\tlet newDate;\n\tlet resource;\n\tlet newResource;\n\tlet fromX;\n\tlet fromY;\n\tlet toX;\n\tlet toY;\n\tlet gridEl;\n\tlet allDaySlot;\n\tlet delta;\n\tlet allDay;\n\tlet iClass;\n\tlet minResize;\n\tlet selectStep;\n\tlet selected;\n\tlet noDateClick;\n\tlet timer;\n\tlet viewport;\n\tlet margin;\n\tlet snapDuration;\n\tlet extraDuration;\n\tfunction draggable(event) {\n\t\treturn eventDraggable(event, $.get(eventStartEditable), $.get(editable));\n\t}\n\tfunction drag(eventToDrag, jsEvent, forceDate, forceMargin, snap) {\n\t\tif (!action) {\n\t\t\taction = validJsEvent(jsEvent) ? ACTION_DRAG : ACTION_NO_ACTION;\n\t\t\tif (complexAction()) {\n\t\t\t\tevent = eventToDrag;\n\t\t\t\tcommon(jsEvent, snap);\n\t\t\t\tif (forceDate) date = forceDate;\n\t\t\t\tif (forceMargin) margin = forceMargin;\n\t\t\t\tiClass = \"dragging\";\n\t\t\t\tmove(jsEvent);\n\t\t\t}\n\t\t}\n\t}\n\tfunction resize(chunk, jsEvent, start, axis, forceDate, forceMargin, snap) {\n\t\tif (!action) {\n\t\t\taction = validJsEvent(jsEvent) ? start ? ACTION_RESIZE_START : ACTION_RESIZE_END : ACTION_NO_ACTION;\n\t\t\tif (complexAction()) {\n\t\t\t\tlet { zeroDuration } = chunk;\n\t\t\t\tevent = chunk.event;\n\t\t\t\tcommon(jsEvent, snap);\n\t\t\t\tif (forceMargin) margin = forceMargin;\n\t\t\t\tiClass = axis === \"x\" ? \"resizingX\" : \"resizingY\";\n\t\t\t\tif (resizingStart()) {\n\t\t\t\t\tminResize = cloneDate(event.end);\n\t\t\t\t\tif (allDay) {\n\t\t\t\t\t\tcopyTime(minResize, event.start);\n\t\t\t\t\t\tif (minResize >= event.end) subtractDay(minResize);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsubtractDuration(minResize, snapDuration);\n\t\t\t\t\t\tif (minResize < event.start) minResize = event.start;\n\t\t\t\t\t}\n\t\t\t\t\tdate = allDay ? setMidnight(cloneDate(event.start)) : event.start;\n\t\t\t\t} else {\n\t\t\t\t\tminResize = cloneDate(event.start);\n\t\t\t\t\tif (allDay) {\n\t\t\t\t\t\tcopyTime(minResize, event.end);\n\t\t\t\t\t\tif (minResize <= event.start && !zeroDuration) addDay(minResize);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddDuration(minResize, snapDuration);\n\t\t\t\t\t\tif (minResize > event.end) minResize = event.end;\n\t\t\t\t\t}\n\t\t\t\t\tif (allDay) {\n\t\t\t\t\t\tdate = setMidnight(cloneDate(event.end));\n\t\t\t\t\t\tif (!zeroDuration && datesEqual(date, event.end)) subtractDay(date);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdate = event.end;\n\t\t\t\t\t\tif (!zeroDuration) date = subtractDuration(cloneDate(date), snapDuration);\n\t\t\t\t\t}\n\t\t\t\t\tif (zeroDuration && !allDay) extraDuration = snapDuration;\n\t\t\t\t}\n\t\t\t\tif (forceDate) date = forceDate;\n\t\t\t\tmove(jsEvent);\n\t\t\t}\n\t\t}\n\t}\n\tfunction select(jsEvent, snap) {\n\t\tif (!action) {\n\t\t\taction = validJsEvent(jsEvent) ? $.get(selectable) && !$.get(features).includes(\"list\") ? ACTION_SELECT : ACTION_CLICK : ACTION_NO_ACTION;\n\t\t\tif (complexAction()) {\n\t\t\t\tcommon(jsEvent, snap);\n\t\t\t\tiClass = \"selecting\";\n\t\t\t\tselectStep = allDay ? createDuration({ day: 1 }) : snapDuration;\n\t\t\t\tevent = {\n\t\t\t\t\tallDay,\n\t\t\t\t\tstart: date,\n\t\t\t\t\tend: addDuration(cloneDate(date), selectStep),\n\t\t\t\t\tresourceIds: resource ? [resource.id] : []\n\t\t\t\t};\n\t\t\t\tmove(jsEvent);\n\t\t\t}\n\t\t}\n\t}\n\tfunction noAction() {\n\t\tif (!action) action = ACTION_NO_ACTION;\n\t}\n\tfunction common(jsEvent, snap) {\n\t\twindow.getSelection().removeAllRanges();\n\t\tfromX = toX = jsEvent.clientX;\n\t\tfromY = toY = jsEvent.clientY;\n\t\tsnapDuration = snap?.duration;\n\t\tlet dayEl = getElementWithPayload(toX, toY);\n\t\t({allDay, date, resource} = getPayload(dayEl)(toX, toY));\n\t\tallDaySlot = $.get(mainEl) !== ancestor(dayEl, 3);\n\t\tgridEl = ancestor(dayEl, 1);\n\t\tcalcViewport();\n\t\tif (jsEvent.pointerType !== \"mouse\") timer = setTimeout(() => {\n\t\t\tif (action) {\n\t\t\t\tinteracting = true;\n\t\t\t\tmove(jsEvent);\n\t\t\t}\n\t\t}, (selecting() ? $.get(selectLongPressDelay) : $.get(eventLongPressDelay)) ?? $.get(longPressDelay));\n\t}\n\tfunction move(jsEvent) {\n\t\tif (interacting || jsEvent && jsEvent.pointerType === \"mouse\" && distance() >= (selecting() ? $.get(selectMinDistance) : $.get(eventDragMinDistance))) {\n\t\t\tinteracting = true;\n\t\t\tunselect(jsEvent);\n\t\t\tmainState.iClass = iClass;\n\t\t\tif (!iEvent) if (selecting()) createIEventSelect();\n\t\t\telse createIEvent(jsEvent, resizing() ? $.get(eventResizeStart) : $.get(eventDragStart));\n\t\t\tlet payload = findPayload(findDayEl());\n\t\t\tif (payload) {\n\t\t\t\tlet newAllDay;\n\t\t\t\t({allDay: newAllDay, date: newDate, resource: newResource} = payload);\n\t\t\t\tif (newAllDay === allDay) {\n\t\t\t\t\tlet candidate = copyIEventData({}, iEvent);\n\t\t\t\t\tlet constraintFn = $.get(resizeConstraint);\n\t\t\t\t\tdelta = createDuration((newDate - date) / 1e3);\n\t\t\t\t\tif (resizingStart()) {\n\t\t\t\t\t\tcandidate.start = addDuration(cloneDate(event.start), delta);\n\t\t\t\t\t\tif (candidate.start > minResize) {\n\t\t\t\t\t\t\tcandidate.start = minResize;\n\t\t\t\t\t\t\tdelta = createDuration((minResize - event.start) / 1e3);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcandidate.end = addDuration(cloneDate(event.end), delta);\n\t\t\t\t\t\tif (extraDuration) addDuration(candidate.end, extraDuration);\n\t\t\t\t\t\tif (resizing()) {\n\t\t\t\t\t\t\tif (candidate.end < minResize) {\n\t\t\t\t\t\t\t\tcandidate.end = minResize;\n\t\t\t\t\t\t\t\tdelta = createDuration((minResize - event.end) / 1e3);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (selecting()) {\n\t\t\t\t\t\t\tif (candidate.end < event.end) {\n\t\t\t\t\t\t\t\tcandidate.start = subtractDuration(candidate.end, selectStep);\n\t\t\t\t\t\t\t\tcandidate.end = event.end;\n\t\t\t\t\t\t\t} else candidate.start = event.start;\n\t\t\t\t\t\t\tconstraintFn = $.get(selectConstraint);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcandidate.start = addDuration(cloneDate(event.start), delta);\n\t\t\t\t\t\t\tif (resource) {\n\t\t\t\t\t\t\t\tcandidate.resourceIds = event.resourceIds.filter((id) => id !== resource.id);\n\t\t\t\t\t\t\t\tcandidate.resourceIds.push(newResource.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconstraintFn = $.get(dragConstraint);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (constraintFn !== void 0) {\n\t\t\t\t\t\t\tcandidate = copyIEventData(cloneEvent(event), candidate);\n\t\t\t\t\t\t\tif (constraintFn(selecting() ? createSelectCallbackInfo(candidate, jsEvent) : createCallbackInfo(candidate, event, jsEvent)) === false) {\n\t\t\t\t\t\t\t\tupdateIEvent(event);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tupdateIEvent(candidate);\n\t\t\t\t\t} while (0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ($.get(dragScroll)) {\n\t\t\tlet thresholdY = 24;\n\t\t\tlet thresholdX = 24;\n\t\t\tanimate(() => {\n\t\t\t\tif (viewport) {\n\t\t\t\t\tif (!allDaySlot) {\n\t\t\t\t\t\tif (toY < viewport.top + thresholdY) $.get(mainEl).scrollTop += max(-8, (toY - viewport.top - thresholdY) / 3);\n\t\t\t\t\t\tif (toY > viewport.bottom - thresholdY) $.get(mainEl).scrollTop += min(8, (toY - viewport.bottom + thresholdY) / 3);\n\t\t\t\t\t}\n\t\t\t\t\tif (toX < viewport.left + thresholdX) $.get(mainEl).scrollLeft += max(-8, (toX - viewport.left - thresholdX) / 3);\n\t\t\t\t\tif (toX > viewport.right - thresholdX) $.get(mainEl).scrollLeft += min(8, (toX - viewport.right + thresholdX) / 3);\n\t\t\t\t\tif (toY < thresholdY) window.scrollBy(0, max(-8, (toY - thresholdY) / 3));\n\t\t\t\t\tif (toY > window.innerHeight - thresholdY) window.scrollBy(0, min(8, (toY - window.innerHeight + thresholdY) / 3));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tfunction handleScroll() {\n\t\tif (complexAction()) {\n\t\t\tcalcViewport();\n\t\t\tmove();\n\t\t}\n\t}\n\tfunction handlePointerMove(jsEvent) {\n\t\tif (complexAction() && jsEvent.isPrimary) {\n\t\t\ttoX = jsEvent.clientX;\n\t\t\ttoY = jsEvent.clientY;\n\t\t\tmove(jsEvent);\n\t\t}\n\t}\n\tfunction handlePointerUp(jsEvent) {\n\t\tif (selected && $.get(unselectAuto) && !($.get(unselectCancel) && jsEvent.target.closest($.get(unselectCancel)))) unselect(jsEvent);\n\t\tif (action && jsEvent.isPrimary) {\n\t\t\tif (interacting) if (selecting()) {\n\t\t\t\tselected = true;\n\t\t\t\tif (isFunction($.get(selectFn))) {\n\t\t\t\t\tlet info = createSelectCallbackInfo(iEvent, jsEvent);\n\t\t\t\t\t$.get(selectFn)(info);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tevent.display = display;\n\t\t\t\tlet callback = resizing() ? $.get(eventResizeStop) : $.get(eventDragStop);\n\t\t\t\tif (isFunction(callback)) callback({\n\t\t\t\t\tevent: toEventWithLocalDates(event),\n\t\t\t\t\tjsEvent,\n\t\t\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t\t\t});\n\t\t\t\tlet oldEvent = cloneEvent(event);\n\t\t\t\tupdateEvent(event, iEvent);\n\t\t\t\tdestroyIEvent();\n\t\t\t\tcallback = resizing() ? $.get(eventResize) : $.get(eventDrop);\n\t\t\t\tif (isFunction(callback)) {\n\t\t\t\t\tlet eventRef = event;\n\t\t\t\t\tlet info = createCallbackInfo(event, oldEvent, jsEvent);\n\t\t\t\t\tcallback(assign(info, { revert() {\n\t\t\t\t\t\tupdateEvent(eventRef, oldEvent);\n\t\t\t\t\t} }));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (clicking() || selecting()) {\n\t\t\t\tif (isFunction($.get(dateClick)) && !noDateClick) {\n\t\t\t\t\ttoX = jsEvent.clientX;\n\t\t\t\t\ttoY = jsEvent.clientY;\n\t\t\t\t\tlet dayEl = getElementWithPayload(toX, toY);\n\t\t\t\t\tif (dayEl) {\n\t\t\t\t\t\tlet { allDay, date, resource } = getPayload(dayEl)(toX, toY);\n\t\t\t\t\t\t$.get(dateClick)({\n\t\t\t\t\t\t\tallDay,\n\t\t\t\t\t\t\tdate: toLocalDate(date),\n\t\t\t\t\t\t\tdateStr: toISOString(date),\n\t\t\t\t\t\t\tdayEl,\n\t\t\t\t\t\t\tjsEvent,\n\t\t\t\t\t\t\tview: toViewWithLocalDates($.get(view)),\n\t\t\t\t\t\t\tresource\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\thandlePointerCancel();\n\t\t}\n\t\tnoDateClick = false;\n\t}\n\tfunction handlePointerCancel() {\n\t\tinteracting = false;\n\t\taction = fromX = fromY = toX = toY = event = display = date = newDate = resource = newResource = delta = extraDuration = allDay = minResize = selectStep = margin = gridEl = viewport = snapDuration = void 0;\n\t\tmainState.iClass = void 0;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction findDayEl() {\n\t\treturn getElementWithPayload(limit(toX, viewport.left, viewport.right), limit(toY, viewport.top, viewport.bottom));\n\t}\n\tfunction findPayload(dayEl) {\n\t\tif (dayEl) {\n\t\t\tlet payload = getPayload(dayEl)(toX, toY);\n\t\t\tif (payload.disabled) {\n\t\t\t\tif (!$.get(validRange).end || payload.date < $.get(validRange).end) return findPayload(dayEl.nextElementSibling);\n\t\t\t\tif (!$.get(validRange).start || payload.date > $.get(validRange).start) return findPayload(dayEl.previousElementSibling);\n\t\t\t} else {\n\t\t\t\tif ((selecting() || resizing()) && payload.resource && !iEvent.resourceIds.includes(payload.resource.id) && !$.get(features).includes(\"timeline\")) if (toX > fromX) return findPayload(dayEl.previousElementSibling);\n\t\t\t\telse return findPayload(dayEl.nextElementSibling);\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\tfunction calcViewport() {\n\t\tlet mainRect = rect($.get(mainEl));\n\t\tlet gridRect = rect(gridEl);\n\t\tlet scaleX = mainRect.width / $.get(mainEl).offsetWidth;\n\t\tlet scaleY = mainRect.height / $.get(mainEl).offsetHeight;\n\t\tlet rtl = isRtl();\n\t\tviewport = {\n\t\t\tleft: max(0, rtl ? mainRect.right - $.get(mainEl).clientWidth * scaleX : gridRect.left + $.get(mainEl).scrollLeft * scaleX),\n\t\t\tright: min(document.documentElement.clientWidth, rtl ? gridRect.right + $.get(mainEl).scrollLeft * scaleX : mainRect.left + $.get(mainEl).clientWidth * scaleX) - 2,\n\t\t\ttop: max(0, gridRect.top + (!allDaySlot ? $.get(mainEl).scrollTop : 0) * scaleY),\n\t\t\tbottom: min(document.documentElement.clientHeight, !allDaySlot ? mainRect.top + $.get(mainEl).clientHeight * scaleY : gridRect.bottom) - 2\n\t\t};\n\t}\n\tfunction createIEvent(jsEvent, callback) {\n\t\tif (isFunction(callback)) callback({\n\t\t\tevent: toEventWithLocalDates(event),\n\t\t\tjsEvent,\n\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t});\n\t\tdisplay = event.display;\n\t\tevent.display = \"preview\";\n\t\tiEvent = cloneEvent(event);\n\t\tif (margin !== void 0) iEvent._margin = margin;\n\t\tif (extraDuration) addDuration(iEvent.end, extraDuration);\n\t\tevent.display = \"ghost\";\n\t\t$.get(events).length = $.get(events).length;\n\t}\n\tfunction createIEventSelect() {\n\t\tiEvent = {\n\t\t\tid: \"{select}\",\n\t\t\tallDay: event.allDay,\n\t\t\tstart: event.start,\n\t\t\ttitle: \"\",\n\t\t\tdisplay: \"preview\",\n\t\t\textendedProps: {},\n\t\t\tbackgroundColor: $.get(selectBackgroundColor),\n\t\t\tresourceIds: event.resourceIds,\n\t\t\tclassNames: [],\n\t\t\tstyles: []\n\t\t};\n\t}\n\tfunction destroyIEvent() {\n\t\tiEvent = void 0;\n\t\t$.get(iEvents).delete(\"action\");\n\t}\n\tfunction copyIEventData(target, source) {\n\t\ttarget.start = source.start;\n\t\ttarget.end = source.end;\n\t\ttarget.resourceIds = source.resourceIds;\n\t\treturn { ...target };\n\t}\n\tfunction updateEvent(target, source) {\n\t\tcopyIEventData(target, source);\n\t\t$.get(events).length = $.get(events).length;\n\t}\n\tfunction updateIEvent(source) {\n\t\tiEvent = copyIEventData(iEvent, source);\n\t\t$.get(iEvents).set(\"action\", iEvent);\n\t}\n\tfunction createSelectCallbackInfo(event, jsEvent) {\n\t\tlet { start, end } = toEventWithLocalDates(event);\n\t\treturn {\n\t\t\tstart,\n\t\t\tend,\n\t\t\tstartStr: toISOString(event.start),\n\t\t\tendStr: toISOString(event.end),\n\t\t\tallDay,\n\t\t\tview: toViewWithLocalDates($.get(view)),\n\t\t\tresource,\n\t\t\tjsEvent\n\t\t};\n\t}\n\tfunction createCallbackInfo(event, oldEvent, jsEvent) {\n\t\tlet info;\n\t\tif (resizing()) info = resizingStart() ? {\n\t\t\tstartDelta: delta,\n\t\t\tendDelta: createDuration(0)\n\t\t} : {\n\t\t\tstartDelta: createDuration(0),\n\t\t\tendDelta: delta\n\t\t};\n\t\telse info = {\n\t\t\tdelta,\n\t\t\toldResource: resource !== newResource ? resource : void 0,\n\t\t\tnewResource: resource !== newResource ? newResource : void 0\n\t\t};\n\t\tassign(info, {\n\t\t\tevent: toEventWithLocalDates(event),\n\t\t\toldEvent: toEventWithLocalDates(oldEvent),\n\t\t\tview: toViewWithLocalDates($.get(view)),\n\t\t\tjsEvent\n\t\t});\n\t\treturn info;\n\t}\n\tfunction distance() {\n\t\treturn Math.sqrt(Math.pow(toX - fromX, 2) + Math.pow(toY - fromY, 2));\n\t}\n\tfunction resizing() {\n\t\treturn action === ACTION_RESIZE_END || resizingStart();\n\t}\n\tfunction resizingStart() {\n\t\treturn action === ACTION_RESIZE_START;\n\t}\n\tfunction clicking() {\n\t\treturn action === ACTION_CLICK;\n\t}\n\tfunction selecting() {\n\t\treturn action === ACTION_SELECT;\n\t}\n\tfunction complexAction() {\n\t\treturn action && action < ACTION_CLICK;\n\t}\n\tfunction validJsEvent(jsEvent) {\n\t\treturn jsEvent.isPrimary && (jsEvent.pointerType !== \"mouse\" || jsEvent.buttons & 1);\n\t}\n\tfunction unselect(jsEvent) {\n\t\tif (selected) {\n\t\t\tselected = false;\n\t\t\tdestroyIEvent();\n\t\t\tif (isFunction($.get(unselectFn))) $.get(unselectFn)({\n\t\t\t\tjsEvent,\n\t\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t\t});\n\t\t}\n\t}\n\t$.user_pre_effect(() => {\n\t\t$.get(view);\n\t\tunselect();\n\t});\n\tfunction noClick() {\n\t\tnoDateClick = true;\n\t}\n\tfunction handleTouchStart(jsEvent) {\n\t\tif (complexAction()) {\n\t\t\tlet target = jsEvent.target;\n\t\t\tlet stops = [];\n\t\t\tlet stop = () => runAll(stops);\n\t\t\tstops.push(listen(target, \"touchmove\", createPreventDefaultHandler(() => interacting)));\n\t\t\tstops.push(listen(target, \"touchend\", stop));\n\t\t\tstops.push(listen(target, \"touchcancel\", stop));\n\t\t}\n\t}\n\tfunction createPreventDefaultHandler(condition) {\n\t\treturn (jsEvent) => {\n\t\t\tif (condition()) jsEvent.preventDefault();\n\t\t};\n\t}\n\tonMount(() => listen(window, \"touchmove\", noop, { passive: false }));\n\tvar $$exports = {\n\t\tdraggable,\n\t\tdrag,\n\t\tresize,\n\t\tselect,\n\t\tnoAction,\n\t\thandleScroll,\n\t\tunselect,\n\t\tnoClick\n\t};\n\t$.event(\"pointermove\", $.window, handlePointerMove);\n\t$.event(\"pointerup\", $.window, handlePointerUp);\n\t$.event(\"pointercancel\", $.window, handlePointerCancel);\n\t$.event(\"scroll\", $.window, handleScroll);\n\tvar event_handler = $.derived(() => createPreventDefaultHandler(complexAction));\n\t$.event(\"selectstart\", $.window, function(...$$args) {\n\t\t$.get(event_handler)?.apply(this, $$args);\n\t});\n\tvar event_handler_1 = $.derived(() => createPreventDefaultHandler(() => timer));\n\t$.event(\"contextmenu\", $.window, function(...$$args) {\n\t\t$.get(event_handler_1)?.apply(this, $$args);\n\t});\n\t$.event(\"touchstart\", $.window, handleTouchStart, void 0, true);\n\treturn $.pop($$exports);\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/Pointer.svelte\nfunction Pointer($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), iEvents = $.derived(() => $.get($$d).iEvents), slotDuration = $.derived(() => $.get($$d).options.slotDuration);\n\tlet x = 0;\n\tlet y = 0;\n\tlet iEvent;\n\tfunction move() {\n\t\tlet dayEl = getElementWithPayload(x, y);\n\t\tif (dayEl && !$.get(iEvents).has(\"action\")) {\n\t\t\tlet { allDay, date, resource, disabled } = getPayload(dayEl)(x, y);\n\t\t\tif (!disabled) {\n\t\t\t\tif (!iEvent) createPointerEvent();\n\t\t\t\tiEvent.allDay = allDay;\n\t\t\t\tiEvent.start = date;\n\t\t\t\tiEvent.end = addDuration(cloneDate(date), $.get(slotDuration));\n\t\t\t\tiEvent.resourceIds = resource ? [resource.id] : [];\n\t\t\t\t$.get(iEvents).set(\"pointer\", { ...iEvent });\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tremovePointerEvent();\n\t}\n\tfunction handleScroll() {\n\t\tmove();\n\t}\n\tfunction handlePointerMove(jsEvent) {\n\t\tif (validEvent(jsEvent)) {\n\t\t\tx = jsEvent.clientX;\n\t\t\ty = jsEvent.clientY;\n\t\t\tmove();\n\t\t}\n\t}\n\tfunction createPointerEvent() {\n\t\tiEvent = {\n\t\t\tid: \"{pointer}\",\n\t\t\ttitle: \"\",\n\t\t\tdisplay: \"pointer\",\n\t\t\textendedProps: {},\n\t\t\tbackgroundColor: \"transparent\",\n\t\t\tclassNames: [],\n\t\t\tstyles: []\n\t\t};\n\t}\n\tfunction removePointerEvent() {\n\t\tiEvent = void 0;\n\t\t$.get(iEvents).delete(\"pointer\");\n\t}\n\tfunction validEvent(jsEvent) {\n\t\treturn jsEvent.isPrimary && jsEvent.pointerType === \"mouse\";\n\t}\n\tvar $$exports = { handleScroll };\n\t$.event(\"pointermove\", $.window, handlePointerMove);\n\t$.event(\"scroll\", $.window, handleScroll);\n\treturn $.pop($$exports);\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/Resizer.svelte\nvar root$11 = $.from_html(`<div></div>`);\nvar root_1$4 = $.from_html(`<!> <!> <!>`, 1);\nfunction Resizer($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet forceDate = $.prop($$props, \"forceDate\", 3, void 0), forceMargin = $.prop($$props, \"forceMargin\", 3, void 0);\n\tlet $$d = $.derived(() => getContext(\"state\")), action = $.derived(() => $.get($$d).interaction.action), editable = $.derived(() => $.get($$d).options.editable), eventDurationEditable = $.derived(() => $.get($$d).options.eventDurationEditable), eventResizableFromStart = $.derived(() => $.get($$d).options.eventResizableFromStart), theme = $.derived(() => $.get($$d).options.theme);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), snap = $.derived(() => $.get($$d_1).snap);\n\tlet event = $.derived(() => $$props.chunk.event);\n\tlet display = $.derived(() => $$props.chunk.event.display);\n\tlet resizable = $.derived(() => !bgEvent($.get(display)) && !helperEvent($.get(display)) && eventResizable($.get(event), $.get(eventDurationEditable), $.get(editable)));\n\tfunction createResizeHandler(start) {\n\t\treturn (jsEvent) => $.get(action).resize($$props.chunk, jsEvent, start, $$props.axis, forceDate(), forceMargin(), $.get(snap));\n\t}\n\tvar fragment = root_1$4();\n\tvar node = $.first_child(fragment);\n\tvar consequent = ($$anchor) => {\n\t\tvar div = root$11();\n\t\tvar event_handler = $.derived(() => createResizeHandler(true));\n\t\t$.template_effect(() => $.set_class(div, 1, `${$.get(theme).resizer ?? \"\"} ${$.get(theme).start ?? \"\"}`));\n\t\t$.delegated(\"pointerdown\", div, function(...$$args) {\n\t\t\t$.get(event_handler)?.apply(this, $$args);\n\t\t});\n\t\t$.append($$anchor, div);\n\t};\n\t$.if(node, ($$render) => {\n\t\tif ($.get(resizable) && $.get(eventResizableFromStart)) $$render(consequent);\n\t});\n\tvar node_1 = $.sibling(node, 2);\n\t$.snippet(node_1, () => $$props.children);\n\tvar node_2 = $.sibling(node_1, 2);\n\tvar consequent_1 = ($$anchor) => {\n\t\tvar div_1 = root$11();\n\t\tvar event_handler_1 = $.derived(() => createResizeHandler(false));\n\t\t$.template_effect(() => $.set_class(div_1, 1, $.get(theme).resizer));\n\t\t$.delegated(\"pointerdown\", div_1, function(...$$args) {\n\t\t\t$.get(event_handler_1)?.apply(this, $$args);\n\t\t});\n\t\t$.append($$anchor, div_1);\n\t};\n\t$.if(node_2, ($$render) => {\n\t\tif ($.get(resizable)) $$render(consequent_1);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n$.delegate([\"pointerdown\"]);\n//#endregion\n//#region packages/core/src/plugins/interaction/Auxiliary.svelte\nvar root$10 = $.from_html(`<!> <!>`, 1);\nfunction Auxiliary($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tnew AuxState(mainState);\n\tlet interaction = $.derived(() => mainState.interaction), pointer = $.derived(() => mainState.options.pointer);\n\t$.get(interaction).resizer = Resizer;\n\tvar fragment = root$10();\n\tvar node = $.first_child(fragment);\n\t$.bind_this(Action(node, {}), ($$value) => $.get(interaction).action = $$value, () => $.get(interaction)?.action);\n\tvar node_1 = $.sibling(node, 2);\n\tvar consequent = ($$anchor) => {\n\t\t$.bind_this(Pointer($$anchor, {}), ($$value) => $.get(interaction).pointer = $$value, () => $.get(interaction)?.pointer);\n\t};\n\t$.if(node_1, ($$render) => {\n\t\tif ($.get(pointer)) $$render(consequent);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/interaction/index.js\nvar interaction_default = {\n\tcreateOptions(options) {\n\t\tassign(options, {\n\t\t\tdateClick: void 0,\n\t\t\tdragConstraint: void 0,\n\t\t\tdragScroll: true,\n\t\t\teditable: false,\n\t\t\teventDragMinDistance: 5,\n\t\t\teventDragStart: void 0,\n\t\t\teventDragStop: void 0,\n\t\t\teventDrop: void 0,\n\t\t\teventDurationEditable: true,\n\t\t\teventLongPressDelay: void 0,\n\t\t\teventResizableFromStart: false,\n\t\t\teventResizeStart: void 0,\n\t\t\teventResizeStop: void 0,\n\t\t\teventResize: void 0,\n\t\t\teventStartEditable: true,\n\t\t\tlongPressDelay: 1e3,\n\t\t\tpointer: false,\n\t\t\tresizeConstraint: void 0,\n\t\t\tselect: void 0,\n\t\t\tselectBackgroundColor: void 0,\n\t\t\tselectConstraint: void 0,\n\t\t\tselectLongPressDelay: void 0,\n\t\t\tselectMinDistance: 5,\n\t\t\tsnapDuration: void 0,\n\t\t\tunselect: void 0,\n\t\t\tunselectAuto: true,\n\t\t\tunselectCancel: \"\"\n\t\t});\n\t\tassign(options.theme, {\n\t\t\tdraggable: \"ec-draggable\",\n\t\t\tghost: \"ec-ghost\",\n\t\t\tpreview: \"ec-preview\",\n\t\t\tpointer: \"ec-pointer\",\n\t\t\tresizer: \"ec-resizer\",\n\t\t\tstart: \"ec-start\",\n\t\t\tdragging: \"ec-dragging\",\n\t\t\tresizingY: \"ec-resizing-y\",\n\t\t\tresizingX: \"ec-resizing-x\",\n\t\t\tselecting: \"ec-selecting\"\n\t\t});\n\t},\n\tinitState(mainState) {\n\t\tmainState.auxComponents.push(Auxiliary);\n\t}\n};\n//#endregion\n//#region packages/core/src/plugins/list/state.svelte.js\nvar ViewState$3 = class {\n\t#intlListDay;\n\tget intlListDay() {\n\t\treturn $.get(this.#intlListDay);\n\t}\n\tset intlListDay(value) {\n\t\t$.set(this.#intlListDay, value);\n\t}\n\t#intlListDaySide;\n\tget intlListDaySide() {\n\t\treturn $.get(this.#intlListDaySide);\n\t}\n\tset intlListDaySide(value) {\n\t\t$.set(this.#intlListDaySide, value);\n\t}\n\tconstructor(mainState) {\n\t\tthis.#intlListDay = $.derived(intl(mainState, \"listDayFormat\"));\n\t\tthis.#intlListDaySide = $.derived(intl(mainState, \"listDaySideFormat\"));\n\t}\n};\n//#endregion\n//#region packages/core/src/plugins/list/Event.svelte\nvar root$9 = $.from_html(`<div></div> <!>`, 1);\nfunction Event$2($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), interaction = $.derived(() => $.get($$d).interaction), theme = $.derived(() => $.get($$d).options.theme);\n\tlet styles = $.derived(() => (style) => {\n\t\tdelete style[\"background-color\"];\n\t\tdelete style[\"color\"];\n\t\treturn style;\n\t});\n\t{\n\t\tconst body = ($$anchor, defaultBody = $.noop, bgColor = $.noop, txtColor = $.noop) => {\n\t\t\tvar fragment_1 = root$9();\n\t\t\tvar div = $.first_child(fragment_1);\n\t\t\tlet styles_1;\n\t\t\tvar node = $.sibling(div, 2);\n\t\t\t$.snippet(node, defaultBody);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(div, 1, $.get(theme).eventTag);\n\t\t\t\tstyles_1 = $.set_style(div, \"\", styles_1, { \"background-color\": bgColor() });\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\t\tlet $0 = $.derived(() => $.get(interaction).action?.noAction);\n\t\tBaseEvent($$anchor, {\n\t\t\tget chunk() {\n\t\t\t\treturn $$props.chunk;\n\t\t\t},\n\t\t\tget styles() {\n\t\t\t\treturn $.get(styles);\n\t\t\t},\n\t\t\tget onpointerdown() {\n\t\t\t\treturn $.get($0);\n\t\t\t},\n\t\t\tbody,\n\t\t\t$$slots: { body: true }\n\t\t});\n\t}\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/list/Day.svelte\nvar root$8 = $.from_html(`<h4><time><!></time> <time></time></h4> <!>`, 1);\nfunction Day$2($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), filteredEvents = $.derived(() => $.get($$d).filteredEvents), highlightedDates = $.derived(() => $.get($$d).options.highlightedDates), theme = $.derived(() => $.get($$d).options.theme), validRange = $.derived(() => $.get($$d).options.validRange);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), intlListDay = $.derived(() => $.get($$d_1).intlListDay), intlListDaySide = $.derived(() => $.get($$d_1).intlListDaySide);\n\tlet highlight = $.derived(() => $.get(highlightedDates).some((d) => datesEqual(d, $$props.date)));\n\tlet disabled = $.derived(() => outsideRange($$props.date, $.get(validRange)));\n\tlet datetime = $.derived(() => toISOString($$props.date, 10));\n\tlet chunks = $.derived(() => {\n\t\tlet chunks = [];\n\t\tif (!$.get(disabled)) {\n\t\t\tlet start = $$props.date;\n\t\t\tlet end = addDay(cloneDate($$props.date));\n\t\t\tfor (let event of $.get(filteredEvents)) if (!bgEvent(event.display) && eventIntersects(event, start, end)) {\n\t\t\t\tlet chunk = createEventChunk(event, start, end);\n\t\t\t\tchunks.push(chunk);\n\t\t\t}\n\t\t}\n\t\treturn chunks;\n\t});\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\tvar consequent = ($$anchor) => {\n\t\t{\n\t\t\tconst content = ($$anchor, dayCell = $.noop) => {\n\t\t\t\tvar fragment_2 = root$8();\n\t\t\t\tvar h4 = $.first_child(fragment_2);\n\t\t\t\tvar time = $.child(h4);\n\t\t\t\tvar node_1 = $.child(time);\n\t\t\t\t$.snippet(node_1, () => dayCell().snippet ?? $.noop, () => dayCell().arg);\n\t\t\t\t$.reset(time);\n\t\t\t\t$.attach(time, () => contentFrom(dayCell().content, dayCell().snippet));\n\t\t\t\tvar time_1 = $.sibling(time, 2);\n\t\t\t\t$.attach(time_1, () => contentFrom($.get(intlListDaySide).format($$props.date)));\n\t\t\t\t$.reset(h4);\n\t\t\t\tvar node_2 = $.sibling(h4, 2);\n\t\t\t\t$.each(node_2, 17, () => $.get(chunks), (chunk) => chunk.event, ($$anchor, chunk) => {\n\t\t\t\t\tEvent$2($$anchor, { get chunk() {\n\t\t\t\t\t\treturn $.get(chunk);\n\t\t\t\t\t} });\n\t\t\t\t});\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_class(h4, 1, $.get(theme).dayHead);\n\t\t\t\t\t$.set_attribute(time, \"datetime\", $.get(datetime));\n\t\t\t\t\t$.set_class(time_1, 1, $.get(theme).daySide);\n\t\t\t\t\t$.set_attribute(time_1, \"datetime\", $.get(datetime));\n\t\t\t\t});\n\t\t\t\t$.append($$anchor, fragment_2);\n\t\t\t};\n\t\t\tBaseDay($$anchor, {\n\t\t\t\tget date() {\n\t\t\t\t\treturn $$props.date;\n\t\t\t\t},\n\t\t\t\tallDay: true,\n\t\t\t\trole: \"listitem\",\n\t\t\t\tget disabled() {\n\t\t\t\t\treturn $.get(disabled);\n\t\t\t\t},\n\t\t\t\tget highlight() {\n\t\t\t\t\treturn $.get(highlight);\n\t\t\t\t},\n\t\t\t\tdefaultContent: () => $.get(intlListDay).format($$props.date),\n\t\t\t\tcontent,\n\t\t\t\t$$slots: { content: true }\n\t\t\t});\n\t\t}\n\t};\n\t$.if(node, ($$render) => {\n\t\tif ($.get(chunks).length) $$render(consequent);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/list/View.svelte\nvar root$7 = $.from_html(`<div><!></div>`);\nvar root_1$3 = $.from_html(`<section><!></section>`);\nfunction View$2($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tsetContext(\"view-state\", new ViewState$3(mainState));\n\tlet filteredEvents = $.derived(() => mainState.filteredEvents), snippets = $.derived(() => mainState.snippets), view = $.derived(() => mainState.view), viewDates = $.derived(() => mainState.viewDates), noEventsClick = $.derived(() => mainState.options.noEventsClick), noEventsContent = $.derived(() => mainState.options.noEventsContent), theme = $.derived(() => mainState.options.theme);\n\tlet noEvents = $.derived(() => {\n\t\tlet noEvents = true;\n\t\tif (!empty($.get(viewDates))) {\n\t\t\tlet start = $.get(viewDates)[0];\n\t\t\tlet end = addDay(cloneDate($.get(viewDates).at(-1)));\n\t\t\tfor (let event of $.get(filteredEvents)) if (!bgEvent(event.display) && event.start < end && event.end > start) {\n\t\t\t\tnoEvents = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn noEvents;\n\t});\n\tlet content = $.derived(() => createContent($.get(noEventsContent), void 0, void 0, $.get(snippets).noEventsContent));\n\tfunction onclick(jsEvent) {\n\t\tif (isFunction($.get(noEventsClick))) $.get(noEventsClick)({\n\t\t\tjsEvent,\n\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t});\n\t}\n\tvar section = root_1$3();\n\tvar node = $.child(section);\n\tvar consequent = ($$anchor) => {\n\t\tvar div = root$7();\n\t\tvar node_1 = $.child(div);\n\t\t$.snippet(node_1, () => $.get(content).snippet ?? $.noop, () => $.get(content).arg);\n\t\t$.reset(div);\n\t\t$.attach(div, () => contentFrom($.get(content).content, $.get(content).snippet));\n\t\t$.template_effect(() => $.set_class(div, 1, $.get(theme).noEvents));\n\t\t$.delegated(\"click\", div, onclick);\n\t\t$.append($$anchor, div);\n\t};\n\tvar alternate = ($$anchor) => {\n\t\tvar fragment = $.comment();\n\t\tvar node_2 = $.first_child(fragment);\n\t\t$.each(node_2, 17, () => $.get(viewDates), $.index, ($$anchor, date) => {\n\t\t\tDay$2($$anchor, { get date() {\n\t\t\t\treturn $.get(date);\n\t\t\t} });\n\t\t});\n\t\t$.append($$anchor, fragment);\n\t};\n\t$.if(node, ($$render) => {\n\t\tif ($.get(noEvents)) $$render(consequent);\n\t\telse $$render(alternate, -1);\n\t});\n\t$.reset(section);\n\t$.bind_this(section, ($$value) => mainState.mainEl = $$value, () => mainState?.mainEl);\n\t$.template_effect(() => $.set_class(section, 1, $.get(theme).main));\n\t$.append($$anchor, section);\n\t$.pop();\n}\n$.delegate([\"click\"]);\n//#endregion\n//#region packages/core/src/plugins/list/index.js\nvar list_default = { createOptions(options) {\n\tassign(options, {\n\t\tlistDayFormat: { weekday: \"long\" },\n\t\tlistDaySideFormat: {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"long\",\n\t\t\tday: \"numeric\"\n\t\t},\n\t\tnoEventsClick: void 0,\n\t\tnoEventsContent: \"No events\",\n\t\tview: \"listWeek\"\n\t});\n\tassign(options.buttonText, {\n\t\tlistDay: \"day\",\n\t\tlistWeek: \"week\",\n\t\tlistMonth: \"month\",\n\t\tlistYear: \"year\"\n\t});\n\tassign(options.theme, {\n\t\tdaySide: \"ec-day-side\",\n\t\teventTag: \"ec-event-tag\",\n\t\tnoEvents: \"ec-no-events\"\n\t});\n\tassign(options.views, {\n\t\tlistDay: {\n\t\t\tbuttonText: btnTextDay,\n\t\t\tcomponent: initViewComponent$3,\n\t\t\tduration: { days: 1 },\n\t\t\ttheme: themeView(\"ec-list ec-day-view\"),\n\t\t\ttitleFormat: {\n\t\t\t\tyear: \"numeric\",\n\t\t\t\tmonth: \"long\",\n\t\t\t\tday: \"numeric\"\n\t\t\t}\n\t\t},\n\t\tlistWeek: {\n\t\t\tbuttonText: btnTextWeek,\n\t\t\tcomponent: initViewComponent$3,\n\t\t\tduration: { weeks: 1 },\n\t\t\ttheme: themeView(\"ec-list ec-week-view\")\n\t\t},\n\t\tlistMonth: {\n\t\t\tbuttonText: btnTextMonth,\n\t\t\tcomponent: initViewComponent$3,\n\t\t\tduration: { months: 1 },\n\t\t\ttheme: themeView(\"ec-list ec-month-view\"),\n\t\t\ttitleFormat: {\n\t\t\t\tyear: \"numeric\",\n\t\t\t\tmonth: \"long\"\n\t\t\t}\n\t\t},\n\t\tlistYear: {\n\t\t\tbuttonText: btnTextYear,\n\t\t\tcomponent: initViewComponent$3,\n\t\t\tduration: { years: 1 },\n\t\t\ttheme: themeView(\"ec-list ec-year-view\"),\n\t\t\ttitleFormat: { year: \"numeric\" }\n\t\t}\n\t});\n} };\nfunction initViewComponent$3(mainState) {\n\tmainState.features = [\"list\"];\n\treturn View$2;\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/lib.js\nfunction createChunks$1(event, days, withId = true) {\n\tlet chunks = [];\n\tfor (let { gridColumn, gridRow, resource, start, end, disabled } of days) if (!disabled && eventIntersects(event, start, end, resource)) {\n\t\tlet chunk = createEventChunk(event, start, end);\n\t\tassign(chunk, {\n\t\t\tgridColumn,\n\t\t\tgridRow,\n\t\t\tresource,\n\t\t\ttop: (chunk.start - start) / 1e3,\n\t\t\theight: (chunk.end - chunk.start) / 1e3,\n\t\t\tmaxHeight: (end - chunk.start) / 1e3\n\t\t});\n\t\tif (withId) assignChunkId(chunk);\n\t\tchunks.push(chunk);\n\t}\n\treturn chunks;\n}\nfunction groupChunks(chunks) {\n\tlet groups = {};\n\tfor (let chunk of chunks) {\n\t\tlet { gridColumn } = chunk;\n\t\tlet group = groups[gridColumn];\n\t\tlet column = 0;\n\t\tif (group && chunk.start < group.end) {\n\t\t\tfor (; column < group.columns.length; ++column) if (group.columns[column].at(-1).end <= chunk.start) break;\n\t\t\tif (chunk.end > group.end) group.end = chunk.end;\n\t\t} else group = {\n\t\t\tcolumns: [],\n\t\t\tend: chunk.end\n\t\t};\n\t\tif (group.columns.length < column + 1) group.columns.push([]);\n\t\tgroup.columns[column].push(chunk);\n\t\tgroups[gridColumn] = group;\n\t\tchunk.group = group;\n\t\tchunk.groupColumn = column;\n\t}\n}\nfunction createAllDayContent(allDayContent, snippet) {\n\tlet text = \"all-day\";\n\tlet allDay = createContent(allDayContent, () => ({ text }), { html: text }, snippet);\n\tif (typeof allDay.content === \"string\") allDay.content = { html: allDay.content };\n\treturn allDay;\n}\nfunction setExtensions(mainState) {\n\tmainState.extensions.activeRange = (start, end) => {\n\t\tlet { options: { slotMaxTime } } = mainState;\n\t\tif (slotMaxTime.days || slotMaxTime.seconds > 86400) {\n\t\t\taddDuration(subtractDay(end), slotMaxTime);\n\t\t\tlet start2 = subtractDay(cloneDate(end));\n\t\t\tif (start2 < start) start = start2;\n\t\t}\n\t\treturn {\n\t\t\tstart,\n\t\t\tend\n\t\t};\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/options.js\n/**\n* TimeGrid + ResourceTimeGrid + ResourceTimeline\n*/\nfunction createTRROptions(options) {\n\tif (!(\"scrollTime\" in options)) {\n\t\tassign(options, {\n\t\t\tcolumnWidth: void 0,\n\t\t\tflexibleSlotTimeLimits: false,\n\t\t\tnowIndicator: false,\n\t\t\tscrollTime: \"06:00:00\",\n\t\t\tslotDuration: \"00:30:00\",\n\t\t\tslotHeight: 24,\n\t\t\tslotLabelInterval: void 0,\n\t\t\tslotLabelFormat: {\n\t\t\t\thour: \"numeric\",\n\t\t\t\tminute: \"2-digit\"\n\t\t\t},\n\t\t\tslotMaxTime: \"24:00:00\",\n\t\t\tslotMinTime: \"00:00:00\",\n\t\t\tsnapDuration: void 0\n\t\t});\n\t\tassign(options.theme, {\n\t\t\tnowIndicator: \"ec-now-indicator\",\n\t\t\tsidebar: \"ec-sidebar\",\n\t\t\tslot: \"ec-slot\"\n\t\t});\n\t}\n}\n/**\n* TimeGrid + ResourceTimeGrid\n*/\nfunction createTROptions(options) {\n\tif (!(\"allDaySlot\" in options)) {\n\t\tassign(options, {\n\t\t\tallDayContent: void 0,\n\t\t\tallDaySlot: true,\n\t\t\tslotEventOverlap: true\n\t\t});\n\t\tassign(options.theme, { allDay: \"ec-all-day\" });\n\t}\n}\n/**\n* TimeGrid + ResourceTimeGrid + ResourceTimeline\n*/\nfunction createTRRParsers(parsers) {\n\tif (!(\"scrollTime\" in parsers)) assign(parsers, {\n\t\tscrollTime: createDuration,\n\t\tslotDuration: createDuration,\n\t\tslotLabelInterval: undefinedOr(createDuration),\n\t\tslotMaxTime: createDuration,\n\t\tslotMinTime: createDuration,\n\t\tsnapDuration: undefinedOr(createDuration)\n\t});\n}\n//#endregion\n//#region packages/core/src/plugins/resource-time-grid/options.js\n/**\n* ResourceTimeGrid + ResourceTimeline\n*/\nfunction createRROptions(options) {\n\tif (!(\"resourceLabelContent\" in options)) {\n\t\toptions.filterResourcesWithEvents = false;\n\t\toptions.resourceLabelContent = void 0;\n\t\toptions.resourceLabelDidMount = void 0;\n\t\toptions.theme.colGroup = \"ec-col-group\";\n\t}\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/derived.js\nfunction grid$2(mainState, viewState) {\n\treturn () => {\n\t\tlet { viewDates, options: { highlightedDates, validRange } } = mainState;\n\t\tlet { slotTimeLimits } = viewState;\n\t\tlet days = [];\n\t\tuntrack(() => {\n\t\t\tlet gridColumn = 1;\n\t\t\tfor (let date of viewDates) {\n\t\t\t\tdays.push({\n\t\t\t\t\tgridColumn,\n\t\t\t\t\tgridRow: 1,\n\t\t\t\t\tresource: void 0,\n\t\t\t\t\tstart: addDuration(cloneDate(date), slotTimeLimits.min),\n\t\t\t\t\tend: addDuration(cloneDate(date), slotTimeLimits.max),\n\t\t\t\t\tdayStart: date,\n\t\t\t\t\tdayEnd: addDay(cloneDate(date)),\n\t\t\t\t\tdisabled: outsideRange(date, validRange),\n\t\t\t\t\thighlight: highlightedDates.some((d) => datesEqual(d, date))\n\t\t\t\t});\n\t\t\t\t++gridColumn;\n\t\t\t}\n\t\t});\n\t\treturn [days];\n\t};\n}\nfunction eventChunks$1(mainState, viewState) {\n\treturn () => {\n\t\tlet { filteredEvents } = mainState;\n\t\tlet { grid } = viewState;\n\t\tlet chunks = [];\n\t\tlet bgChunks = [];\n\t\tlet allDayChunks = [];\n\t\tlet allDayBgChunks = [];\n\t\tuntrack(() => {\n\t\t\tfor (let event of filteredEvents) for (let days of grid) if (bgEvent(event.display)) {\n\t\t\t\tbgChunks = bgChunks.concat(createChunks$1(event, days));\n\t\t\t\tif (event.allDay) allDayBgChunks = allDayBgChunks.concat(createAllDayChunks(event, days));\n\t\t\t} else if (event.allDay) allDayChunks = allDayChunks.concat(createAllDayChunks(event, days));\n\t\t\telse chunks = chunks.concat(createChunks$1(event, days));\n\t\t\tgroupChunks(chunks);\n\t\t\tprepareAllDayChunks(allDayChunks);\n\t\t});\n\t\treturn {\n\t\t\tchunks,\n\t\t\tbgChunks,\n\t\t\tallDayChunks,\n\t\t\tallDayBgChunks\n\t\t};\n\t};\n}\nfunction iEventChunks$1(mainState, viewState) {\n\treturn () => {\n\t\tlet { iEvents } = mainState;\n\t\tlet { grid } = viewState;\n\t\tlet iChunks = [];\n\t\tlet allDayIChunks = [];\n\t\tfor (let [, event] of iEvents) {\n\t\t\tif (!event) continue;\n\t\t\tuntrack(() => {\n\t\t\t\tfor (let days of grid) if (event.allDay) allDayIChunks = allDayIChunks.concat(createAllDayChunks(event, days, false));\n\t\t\t\telse iChunks = iChunks.concat(createChunks$1(event, days, false));\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tiChunks,\n\t\t\tallDayIChunks\n\t\t};\n\t};\n}\nfunction slotTimeLimits(mainState) {\n\treturn () => {\n\t\tlet { filteredEvents, viewDates, options: { flexibleSlotTimeLimits, slotMinTime, slotMaxTime } } = mainState;\n\t\tlet limits;\n\t\tuntrack(() => {\n\t\t\tlimits = createSlotTimeLimits(slotMinTime, slotMaxTime, flexibleSlotTimeLimits, viewDates, filteredEvents);\n\t\t});\n\t\treturn limits;\n\t};\n}\nfunction slotLabelPeriodicity(mainState) {\n\treturn () => {\n\t\tlet { options: { slotDuration, slotLabelInterval } } = mainState;\n\t\tlet periodicity;\n\t\tuntrack(() => {\n\t\t\tperiodicity = slotLabelInterval === void 0 ? toSeconds(slotDuration) < 3600 ? 2 : 1 : ceil(toSeconds(slotLabelInterval) / toSeconds(slotDuration)) || 1;\n\t\t});\n\t\treturn periodicity;\n\t};\n}\nfunction slots(mainState, viewState) {\n\treturn () => {\n\t\tlet { offset, options: { slotDuration } } = mainState;\n\t\tlet { intlSlotLabel, slotLabelPeriodicity, slotTimeLimits } = viewState;\n\t\tlet slots;\n\t\tuntrack(() => {\n\t\t\tslots = createSlots(setMidnight(createDate(void 0, offset)), slotDuration, slotLabelPeriodicity, slotTimeLimits, intlSlotLabel);\n\t\t});\n\t\treturn slots;\n\t};\n}\nfunction snap(mainState) {\n\treturn () => {\n\t\tlet { options: { slotDuration, snapDuration } } = mainState;\n\t\tsnapDuration ??= slotDuration;\n\t\treturn {\n\t\t\tduration: snapDuration,\n\t\t\tratio: toSeconds(snapDuration) / toSeconds(slotDuration)\n\t\t};\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/state.svelte.js\nfunction TRRState() {\n\treturn class {\n\t\t#intlSlotLabel;\n\t\tget intlSlotLabel() {\n\t\t\treturn $.get(this.#intlSlotLabel);\n\t\t}\n\t\tset intlSlotLabel(value) {\n\t\t\t$.set(this.#intlSlotLabel, value);\n\t\t}\n\t\t#slotLabelPeriodicity;\n\t\tget slotLabelPeriodicity() {\n\t\t\treturn $.get(this.#slotLabelPeriodicity);\n\t\t}\n\t\tset slotLabelPeriodicity(value) {\n\t\t\t$.set(this.#slotLabelPeriodicity, value);\n\t\t}\n\t\t#sidebarWidth;\n\t\tget sidebarWidth() {\n\t\t\treturn $.get(this.#sidebarWidth);\n\t\t}\n\t\tset sidebarWidth(value) {\n\t\t\t$.set(this.#sidebarWidth, value, true);\n\t\t}\n\t\t#snap;\n\t\tget snap() {\n\t\t\treturn $.get(this.#snap);\n\t\t}\n\t\tset snap(value) {\n\t\t\t$.set(this.#snap, value);\n\t\t}\n\t\tconstructor(mainState) {\n\t\t\tthis.#intlSlotLabel = $.derived(intl(mainState, \"slotLabelFormat\"));\n\t\t\tthis.#slotLabelPeriodicity = $.derived(slotLabelPeriodicity(mainState));\n\t\t\tthis.#sidebarWidth = $.state(0);\n\t\t\tthis.#snap = $.derived(snap(mainState));\n\t\t}\n\t};\n}\n/**\n* TimeGrid + ResourceTimeGrid\n*/\nfunction TRState(Base) {\n\treturn class extends Base {\n\t\t#slotTimeLimits;\n\t\tget slotTimeLimits() {\n\t\t\treturn $.get(this.#slotTimeLimits);\n\t\t}\n\t\tset slotTimeLimits(value) {\n\t\t\t$.set(this.#slotTimeLimits, value);\n\t\t}\n\t\t#slots;\n\t\tget slots() {\n\t\t\treturn $.get(this.#slots);\n\t\t}\n\t\tset slots(value) {\n\t\t\t$.set(this.#slots, value);\n\t\t}\n\t\t#chunks;\n\t\tget chunks() {\n\t\t\treturn $.get(this.#chunks);\n\t\t}\n\t\tset chunks(value) {\n\t\t\t$.set(this.#chunks, value);\n\t\t}\n\t\t#bgChunks;\n\t\tget bgChunks() {\n\t\t\treturn $.get(this.#bgChunks);\n\t\t}\n\t\tset bgChunks(value) {\n\t\t\t$.set(this.#bgChunks, value);\n\t\t}\n\t\t#allDayChunks;\n\t\tget allDayChunks() {\n\t\t\treturn $.get(this.#allDayChunks);\n\t\t}\n\t\tset allDayChunks(value) {\n\t\t\t$.set(this.#allDayChunks, value);\n\t\t}\n\t\t#allDayBgChunks;\n\t\tget allDayBgChunks() {\n\t\t\treturn $.get(this.#allDayBgChunks);\n\t\t}\n\t\tset allDayBgChunks(value) {\n\t\t\t$.set(this.#allDayBgChunks, value);\n\t\t}\n\t\t#iChunks;\n\t\tget iChunks() {\n\t\t\treturn $.get(this.#iChunks);\n\t\t}\n\t\tset iChunks(value) {\n\t\t\t$.set(this.#iChunks, value);\n\t\t}\n\t\t#allDayIChunks;\n\t\tget allDayIChunks() {\n\t\t\treturn $.get(this.#allDayIChunks);\n\t\t}\n\t\tset allDayIChunks(value) {\n\t\t\t$.set(this.#allDayIChunks, value);\n\t\t}\n\t\tconstructor(mainState) {\n\t\t\tsuper(mainState);\n\t\t\tthis.#slotTimeLimits = $.derived(slotTimeLimits(mainState));\n\t\t\tthis.#slots = $.derived(slots(mainState, this));\n\t\t\tlet $$d = $.derived(eventChunks$1(mainState, this)), chunks = $.derived(() => $.get($$d).chunks), bgChunks = $.derived(() => $.get($$d).bgChunks), allDayChunks = $.derived(() => $.get($$d).allDayChunks), allDayBgChunks = $.derived(() => $.get($$d).allDayBgChunks);\n\t\t\tthis.#chunks = $.derived(() => $.get(chunks));\n\t\t\tthis.#bgChunks = $.derived(() => $.get(bgChunks));\n\t\t\tthis.#allDayChunks = $.derived(() => $.get(allDayChunks));\n\t\t\tthis.#allDayBgChunks = $.derived(() => $.get(allDayBgChunks));\n\t\t\tlet $$d_1 = $.derived(iEventChunks$1(mainState, this)), iChunks = $.derived(() => $.get($$d_1).iChunks), allDayIChunks = $.derived(() => $.get($$d_1).allDayIChunks);\n\t\t\tthis.#iChunks = $.derived(() => $.get(iChunks));\n\t\t\tthis.#allDayIChunks = $.derived(() => $.get(allDayIChunks));\n\t\t}\n\t};\n}\nvar ViewState$2 = class extends TRState(TRRState()) {\n\t#grid;\n\tget grid() {\n\t\treturn $.get(this.#grid);\n\t}\n\tset grid(value) {\n\t\t$.set(this.#grid, value);\n\t}\n\tconstructor(mainState) {\n\t\tsuper(mainState);\n\t\tthis.#grid = $.derived(grid$2(mainState, this));\n\t}\n};\n//#endregion\n//#region packages/core/src/plugins/resource-time-grid/derived.js\nfunction viewResources(mainState) {\n\treturn () => {\n\t\tlet { activeRange, filteredEvents, resources, options: { filterResourcesWithEvents }, extensions: { viewResources } } = mainState;\n\t\tlet result = viewResources ? viewResources(resources) : resources;\n\t\tuntrack(() => {\n\t\t\tif (filterResourcesWithEvents) result = resources.filter((resource) => filteredEvents.some((event) => !bgEvent(event.display) && eventIntersects(event, activeRange.start, activeRange.end, resource)));\n\t\t\tif (!result.length) result = createResources([{}]);\n\t\t});\n\t\treturn result;\n\t};\n}\nfunction grid$1(mainState, viewState) {\n\treturn () => {\n\t\tlet { viewDates, options: { datesAboveResources, highlightedDates, validRange } } = mainState;\n\t\tlet { slotTimeLimits, viewResources } = viewState;\n\t\tlet grid = [];\n\t\tuntrack(() => {\n\t\t\tlet gridColumn = 1;\n\t\t\tlet loop = datesAboveResources ? [viewDates, viewResources] : [viewResources, viewDates];\n\t\t\tfor (let item0 of loop[0]) {\n\t\t\t\tlet days = [];\n\t\t\t\tfor (let item1 of loop[1]) {\n\t\t\t\t\tlet date = datesAboveResources ? item0 : item1;\n\t\t\t\t\tlet resource = datesAboveResources ? item1 : item0;\n\t\t\t\t\tdays.push({\n\t\t\t\t\t\tgridColumn,\n\t\t\t\t\t\tgridRow: 1,\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tstart: addDuration(cloneDate(date), slotTimeLimits.min),\n\t\t\t\t\t\tend: addDuration(cloneDate(date), slotTimeLimits.max),\n\t\t\t\t\t\tdayStart: date,\n\t\t\t\t\t\tdayEnd: addDay(cloneDate(date)),\n\t\t\t\t\t\tdisabled: outsideRange(date, validRange),\n\t\t\t\t\t\thighlight: highlightedDates.some((d) => datesEqual(d, date))\n\t\t\t\t\t});\n\t\t\t\t\t++gridColumn;\n\t\t\t\t}\n\t\t\t\tgrid.push(days);\n\t\t\t}\n\t\t});\n\t\treturn grid;\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/resource-time-grid/state.svelte.js\nfunction RRState(Base) {\n\treturn class extends Base {\n\t\t#viewResources;\n\t\tget viewResources() {\n\t\t\treturn $.get(this.#viewResources);\n\t\t}\n\t\tset viewResources(value) {\n\t\t\t$.set(this.#viewResources, value);\n\t\t}\n\t\tconstructor(mainState) {\n\t\t\tsuper(mainState);\n\t\t\tthis.#viewResources = $.derived(viewResources(mainState));\n\t\t}\n\t};\n}\nvar ViewState$1 = class extends RRState(TRState(TRRState())) {\n\t#grid;\n\tget grid() {\n\t\treturn $.get(this.#grid);\n\t}\n\tset grid(value) {\n\t\t$.set(this.#grid, value);\n\t}\n\tconstructor(mainState) {\n\t\tsuper(mainState);\n\t\tthis.#grid = $.derived(grid$1(mainState, this));\n\t}\n};\n//#endregion\n//#region packages/core/src/plugins/resource-time-grid/Label.svelte\nvar root$6 = $.from_html(`<span><!></span>`);\nfunction Label($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet date = $.prop($$props, \"date\", 3, void 0), setLabel = $.prop($$props, \"setLabel\", 3, void 0);\n\tlet $$d = $.derived(() => getContext(\"state\")), intlDayHeaderAL = $.derived(() => $.get($$d).intlDayHeaderAL), snippets = $.derived(() => $.get($$d).snippets), resourceLabelContent = $.derived(() => $.get($$d).options.resourceLabelContent), resourceLabelDidMount = $.derived(() => $.get($$d).options.resourceLabelDidMount);\n\tlet el = $.state(void 0);\n\tlet content = $.derived(() => createContent($.get(resourceLabelContent), () => ({\n\t\tresource: $$props.resource,\n\t\tdate: date() ? toLocalDate(date()) : void 0\n\t}), () => $$props.resource.title, $.get(snippets).resourceLabelContent));\n\tlet ariaLabel = $.state(void 0);\n\t$.user_effect(() => {\n\t\t$.get(content);\n\t\t$$props.resource;\n\t\tdate();\n\t\tuntrack(() => {\n\t\t\tif (date()) tick().then(() => $.get(el) && $.set(ariaLabel, $.get(intlDayHeaderAL).format(date()) + \", \" + $.get(el).innerText));\n\t\t\telse if (setLabel()) {\n\t\t\t\t$.set(ariaLabel, void 0);\n\t\t\t\ttick().then(() => $.get(el) && setLabel()($.get(el).innerText));\n\t\t\t}\n\t\t});\n\t});\n\tonMount(() => {\n\t\tif (isFunction($.get(resourceLabelDidMount))) $.get(resourceLabelDidMount)({\n\t\t\tresource: $$props.resource,\n\t\t\tdate: date() ? toLocalDate(date()) : void 0,\n\t\t\tel: $.get(el)\n\t\t});\n\t});\n\tvar span = root$6();\n\tvar node = $.child(span);\n\t$.snippet(node, () => $.get(content).snippet ?? $.noop, () => $.get(content).arg);\n\t$.reset(span);\n\t$.bind_this(span, ($$value) => $.set(el, $$value), () => $.get(el));\n\t$.attach(span, () => contentFrom($.get(content).content, $.get(content).snippet));\n\t$.template_effect(() => $.set_attribute(span, \"aria-label\", $.get(ariaLabel)));\n\t$.append($$anchor, span);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/Day.svelte\nfunction Day$1($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet allDay = $.prop($$props, \"allDay\", 3, false);\n\tlet $$d = $.derived(() => getContext(\"state\")), slotHeight = $.derived(() => $.get($$d).options.slotHeight);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), snap = $.derived(() => $.get($$d_1).snap);\n\tlet date = $.derived(() => $$props.day.dayStart), start = $.derived(() => $$props.day.start), resource = $.derived(() => $$props.day.resource), disabled = $.derived(() => $$props.day.disabled), highlight = $.derived(() => $$props.day.highlight);\n\tlet el = $.state(void 0);\n\tfunction dateFromPoint(x, y) {\n\t\tif (allDay()) return $.get(date);\n\t\telse {\n\t\t\tlet dayRect = rect($.get(el));\n\t\t\tlet scaleY = dayRect.height / $.get(el).offsetHeight;\n\t\t\treturn addDuration(cloneDate($.get(start)), $.get(snap).duration, floor((y - dayRect.top) / ($.get(slotHeight) * $.get(snap).ratio * scaleY)));\n\t\t}\n\t}\n\tBaseDay($$anchor, {\n\t\tget date() {\n\t\t\treturn $.get(date);\n\t\t},\n\t\tget allDay() {\n\t\t\treturn allDay();\n\t\t},\n\t\tget resource() {\n\t\t\treturn $.get(resource);\n\t\t},\n\t\tdateFromPoint,\n\t\tget disabled() {\n\t\t\treturn $.get(disabled);\n\t\t},\n\t\tget highlight() {\n\t\t\treturn $.get(highlight);\n\t\t},\n\t\tget noIeb() {\n\t\t\treturn $$props.noIeb;\n\t\t},\n\t\tget noBeb() {\n\t\t\treturn $$props.noBeb;\n\t\t},\n\t\tget el() {\n\t\t\treturn $.get(el);\n\t\t},\n\t\tset el($$value) {\n\t\t\t$.set(el, $$value, true);\n\t\t}\n\t});\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/Event.svelte\nfunction Event$1($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), slotEventOverlap = $.derived(() => $.get($$d).options.slotEventOverlap), slotDuration = $.derived(() => $.get($$d).options.slotDuration), slotHeight = $.derived(() => $.get($$d).options.slotHeight);\n\tlet styles = $.derived(() => (style) => {\n\t\tlet step = toSeconds($.get(slotDuration));\n\t\tlet top = $$props.chunk.top / step * $.get(slotHeight);\n\t\tlet height = $$props.chunk.height / step * $.get(slotHeight) || $.get(slotHeight);\n\t\tlet maxHeight = $$props.chunk.maxHeight / step * $.get(slotHeight);\n\t\tstyle[\"grid-column\"] = $$props.chunk.gridColumn;\n\t\tstyle[\"inset-block-start\"] = `${top}px`;\n\t\tstyle[\"min-block-size\"] = `${height}px`;\n\t\tstyle[\"block-size\"] = `${height}px`;\n\t\tstyle[\"max-block-size\"] = `${maxHeight}px`;\n\t\tlet maxWidth = \"100% - var(--ec-event-col-gap)\";\n\t\tif ($$props.chunk.group) {\n\t\t\tlet groupColumns = $$props.chunk.group.columns.length;\n\t\t\tstyle[\"z-index\"] = `${$$props.chunk.groupColumn + 1}`;\n\t\t\tstyle[\"inset-inline-start\"] = `calc((${maxWidth}) / ${groupColumns} * ${$$props.chunk.groupColumn})`;\n\t\t\tstyle[\"inline-size\"] = `calc((${maxWidth}) / ${groupColumns} * ${$.get(slotEventOverlap) ? .5 * (1 + groupColumns - $$props.chunk.groupColumn) : 1})`;\n\t\t}\n\t\treturn style;\n\t});\n\tInteractableEvent($$anchor, {\n\t\tget chunk() {\n\t\t\treturn $$props.chunk;\n\t\t},\n\t\tget styles() {\n\t\t\treturn $.get(styles);\n\t\t},\n\t\taxis: \"y\"\n\t});\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/AllDayEvent.svelte\nfunction AllDayEvent($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), eventGap = $.derived(() => $.get($$d).options.eventGap);\n\tlet el = $.state(void 0);\n\tlet margin = $.state(0);\n\tlet event = $.derived(() => $$props.chunk.event);\n\tlet styles = $.derived(() => (style) => {\n\t\tstyle[\"grid-column\"] = `${$$props.chunk.gridColumn} / span ${$$props.chunk.dates.length}`;\n\t\tif ($.get(margin) || $.get(event)._margin) style[\"margin-block-start\"] = `${$.get(event)._margin ?? $.get(margin)}px`;\n\t\treturn style;\n\t});\n\tfunction reposition() {\n\t\t$.set(margin, repositionEvent$1($$props.chunk, height($.get(el)), 1, $.get(eventGap)), true);\n\t}\n\tvar $$exports = { reposition };\n\tInteractableEvent($$anchor, {\n\t\tget chunk() {\n\t\t\treturn $$props.chunk;\n\t\t},\n\t\tget styles() {\n\t\t\treturn $.get(styles);\n\t\t},\n\t\taxis: \"x\",\n\t\tget forceMargin() {\n\t\t\treturn $.get(margin);\n\t\t},\n\t\tget el() {\n\t\t\treturn $.get(el);\n\t\t},\n\t\tset el($$value) {\n\t\t\t$.set(el, $$value, true);\n\t\t}\n\t});\n\treturn $.pop($$exports);\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/NowIndicator.svelte\nvar root$5 = $.from_html(`<div></div>`);\nfunction NowIndicator$1($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet span = $.prop($$props, \"span\", 3, 1);\n\tlet $$d = $.derived(() => getContext(\"state\")), mainEl = $.derived(() => $.get($$d).mainEl), now = $.derived(() => $.get($$d).now), today = $.derived(() => $.get($$d).today), slotDuration = $.derived(() => $.get($$d).options.slotDuration), slotHeight = $.derived(() => $.get($$d).options.slotHeight), theme = $.derived(() => $.get($$d).options.theme);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), sidebarWidth = $.derived(() => $.get($$d_1).sidebarWidth);\n\tlet $$d_2 = $.derived(() => {\n\t\tfor (let day of $$props.days) if (datesEqual(day.dayStart, $.get(today))) return day;\n\t\treturn {};\n\t}), gridColumn = $.derived(() => $.get($$d_2).gridColumn), start = $.derived(() => $.get($$d_2).start), end = $.derived(() => $.get($$d_2).end);\n\tlet top = $.derived(() => {\n\t\tif ($.get(now) < $.get(start) || $.get(now) > $.get(end)) return null;\n\t\tlet step = toSeconds($.get(slotDuration));\n\t\treturn ($.get(now) - $.get(start)) / 1e3 / step * $.get(slotHeight);\n\t});\n\tlet observerOptions = $.derived(() => ({\n\t\troot: $.get(mainEl),\n\t\trootMargin: isRtl() ? `0px -${$.get(sidebarWidth) + 5.5}px 0px 0px` : `0px 0px 0px -${$.get(sidebarWidth) + 5.5}px`,\n\t\tthreshold: 0\n\t}));\n\tfunction onIntersect(el, entry) {\n\t\tel.classList.toggle($.get(theme).hidden, !entry.isIntersecting);\n\t}\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\tvar consequent = ($$anchor) => {\n\t\tvar div = root$5();\n\t\tlet styles;\n\t\t$.attach(div, () => intersectionObserver(onIntersect, $.get(observerOptions)));\n\t\t$.template_effect(() => {\n\t\t\t$.set_class(div, 1, $.get(theme).nowIndicator);\n\t\t\tstyles = $.set_style(div, \"\", styles, {\n\t\t\t\t\"grid-column\": `${$.get(gridColumn) + 1} / span ${span() ?? \"\"}`,\n\t\t\t\t\"inset-block-start\": `${$.get(top) ?? \"\"}px`\n\t\t\t});\n\t\t});\n\t\t$.append($$anchor, div);\n\t};\n\t$.if(node, ($$render) => {\n\t\tif ($.get(gridColumn) && $.get(top) !== null) $$render(consequent);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/View.svelte\nvar root$4 = $.from_html(`<div><aside><!></aside> <div role=\"row\"></div> <div><!> <!> <!></div></div>`);\nvar root_1$2 = $.from_html(`<div><time></time></div>`);\nvar root_2$2 = $.from_html(`<section><header><aside></aside> <div role=\"row\"><!></div> <!></header> <div role=\"rowgroup\"><aside aria-hidden=\"true\"></aside> <div role=\"row\"></div> <div><!> <!> <!></div></div> <!></section>`);\nfunction View$1($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet viewState = $.prop($$props, \"viewState\", 7);\n\tlet mainState = getContext(\"state\");\n\tif (!viewState()) viewState(new ViewState$2(mainState));\n\tsetContext(\"view-state\", viewState());\n\tlet mainEl = $.derived(() => mainState.mainEl), snippets = $.derived(() => mainState.snippets), viewDates = $.derived(() => mainState.viewDates), allDayContent = $.derived(() => mainState.options.allDayContent), allDaySlot = $.derived(() => mainState.options.allDaySlot), columnWidth = $.derived(() => mainState.options.columnWidth), eventGap = $.derived(() => mainState.options.eventGap), showNowIndicator = $.derived(() => mainState.options.nowIndicator), scrollTime = $.derived(() => mainState.options.scrollTime), slotHeight = $.derived(() => mainState.options.slotHeight), slotDuration = $.derived(() => mainState.options.slotDuration), theme = $.derived(() => mainState.options.theme);\n\tlet allDayChunks = $.derived(() => viewState().allDayChunks), allDayBgChunks = $.derived(() => viewState().allDayBgChunks), allDayIChunks = $.derived(() => viewState().allDayIChunks), bgChunks = $.derived(() => viewState().bgChunks), chunks = $.derived(() => viewState().chunks), iChunks = $.derived(() => viewState().iChunks), grid = $.derived(() => viewState().grid), sidebarWidth = $.derived(() => viewState().sidebarWidth), slots = $.derived(() => viewState().slots), slotLabelPeriodicity = $.derived(() => viewState().slotLabelPeriodicity), slotTimeLimits = $.derived(() => viewState().slotTimeLimits);\n\tlet headerHeight = $.state(0);\n\tlet allDay = $.derived(() => createAllDayContent($.get(allDayContent), $.get(snippets).allDayContent));\n\t$.user_effect(() => {\n\t\t$.get(scrollTime);\n\t\tif (!empty($.get(viewDates))) tick().then(scrollToTime);\n\t});\n\tfunction scrollToTime() {\n\t\t$.get(mainEl).scrollTop = ((toSeconds($.get(scrollTime)) - toSeconds($.get(slotTimeLimits).min)) / toSeconds($.get(slotDuration)) - .5) * $.get(slotHeight);\n\t}\n\tlet refs = [];\n\tfunction reposition() {\n\t\trunReposition(refs, $.get(allDayChunks));\n\t}\n\t$.user_effect(() => {\n\t\t$.get(eventGap);\n\t\treposition();\n\t});\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\tvar consequent_4 = ($$anchor) => {\n\t\tvar section = root_2$2();\n\t\tlet styles;\n\t\tvar header_1 = $.child(section);\n\t\tvar aside = $.child(header_1);\n\t\tvar div = $.sibling(aside, 2);\n\t\tvar node_1 = $.child(div);\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar fragment_1 = $.comment();\n\t\t\tvar node_2 = $.first_child(fragment_1);\n\t\t\t$.snippet(node_2, () => $$props.header);\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\t\tvar alternate = ($$anchor) => {\n\t\t\tvar fragment_2 = $.comment();\n\t\t\tvar node_3 = $.first_child(fragment_2);\n\t\t\t$.each(node_3, 17, () => $.get(grid)[0], $.index, ($$anchor, $$item, i) => {\n\t\t\t\tlet date = () => $.get($$item).dayStart;\n\t\t\t\tlet disabled = () => $.get($$item).disabled;\n\t\t\t\tlet highlight = () => $.get($$item).highlight;\n\t\t\t\tColHead($$anchor, {\n\t\t\t\t\tget date() {\n\t\t\t\t\t\treturn date();\n\t\t\t\t\t},\n\t\t\t\t\tcolIndex: 1 + i,\n\t\t\t\t\tget disabled() {\n\t\t\t\t\t\treturn disabled();\n\t\t\t\t\t},\n\t\t\t\t\tget highlight() {\n\t\t\t\t\t\treturn highlight();\n\t\t\t\t\t},\n\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\tDayHeader($$anchor, { get date() {\n\t\t\t\t\t\t\treturn date();\n\t\t\t\t\t\t} });\n\t\t\t\t\t},\n\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t});\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_2);\n\t\t};\n\t\t$.if(node_1, ($$render) => {\n\t\t\tif ($$props.header) $$render(consequent);\n\t\t\telse $$render(alternate, -1);\n\t\t});\n\t\t$.reset(div);\n\t\tvar node_4 = $.sibling(div, 2);\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar div_1 = root$4();\n\t\t\tvar aside_1 = $.child(div_1);\n\t\t\tvar node_5 = $.child(aside_1);\n\t\t\t$.snippet(node_5, () => $.get(allDay).snippet ?? $.noop, () => $.get(allDay).arg);\n\t\t\t$.reset(aside_1);\n\t\t\t$.attach(aside_1, () => contentFrom($.get(allDay).content, $.get(allDay).snippet));\n\t\t\tvar div_2 = $.sibling(aside_1, 2);\n\t\t\t$.each(div_2, 21, () => $.get(grid), $.index, ($$anchor, days, i) => {\n\t\t\t\tvar fragment_5 = $.comment();\n\t\t\t\tvar node_6 = $.first_child(fragment_5);\n\t\t\t\t$.each(node_6, 17, () => $.get(days), $.index, ($$anchor, day, j) => {\n\t\t\t\t\t{\n\t\t\t\t\t\tlet $0 = $.derived(() => i + 1 === length($.get(grid)) && j + 1 === length($.get(days)));\n\t\t\t\t\t\tDay$1($$anchor, {\n\t\t\t\t\t\t\tget day() {\n\t\t\t\t\t\t\t\treturn $.get(day);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tallDay: true,\n\t\t\t\t\t\t\tget noIeb() {\n\t\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t$.append($$anchor, fragment_5);\n\t\t\t});\n\t\t\t$.reset(div_2);\n\t\t\tvar div_3 = $.sibling(div_2, 2);\n\t\t\tvar node_7 = $.child(div_3);\n\t\t\t$.each(node_7, 19, () => $.get(allDayChunks), (chunk) => chunk.id, ($$anchor, chunk, i) => {\n\t\t\t\t$.bind_this(AllDayEvent($$anchor, { get chunk() {\n\t\t\t\t\treturn $.get(chunk);\n\t\t\t\t} }), ($$value, i) => refs[i] = $$value, (i) => refs?.[i], () => [$.get(i)]);\n\t\t\t});\n\t\t\tvar node_8 = $.sibling(node_7, 2);\n\t\t\t$.each(node_8, 17, () => $.get(allDayBgChunks), (chunk) => chunk.id, ($$anchor, chunk) => {\n\t\t\t\tAllDayEvent($$anchor, { get chunk() {\n\t\t\t\t\treturn $.get(chunk);\n\t\t\t\t} });\n\t\t\t});\n\t\t\tvar node_9 = $.sibling(node_8, 2);\n\t\t\t$.each(node_9, 17, () => $.get(allDayIChunks), $.index, ($$anchor, chunk) => {\n\t\t\t\tAllDayEvent($$anchor, { get chunk() {\n\t\t\t\t\treturn $.get(chunk);\n\t\t\t\t} });\n\t\t\t});\n\t\t\t$.reset(div_3);\n\t\t\t$.reset(div_1);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(div_1, 1, $.get(theme).allDay);\n\t\t\t\t$.set_class(aside_1, 1, $.get(theme).sidebar);\n\t\t\t\t$.set_class(div_2, 1, $.get(theme).grid);\n\t\t\t\t$.set_class(div_3, 1, $.get(theme).events);\n\t\t\t});\n\t\t\t$.append($$anchor, div_1);\n\t\t};\n\t\t$.if(node_4, ($$render) => {\n\t\t\tif ($.get(allDaySlot)) $$render(consequent_1);\n\t\t});\n\t\t$.reset(header_1);\n\t\tvar div_4 = $.sibling(header_1, 2);\n\t\tvar aside_2 = $.child(div_4);\n\t\t$.each(aside_2, 21, () => $.get(slots), $.index, ($$anchor, slot, i) => {\n\t\t\tvar div_5 = root_1$2();\n\t\t\tlet styles_1;\n\t\t\tvar time = $.child(div_5);\n\t\t\t$.attach(time, () => contentFrom($.get(slot)[1]));\n\t\t\t$.reset(div_5);\n\t\t\t$.template_effect(() => {\n\t\t\t\t$.set_class(div_5, 1, $.clsx([$.get(theme).slot, !i && $.get(theme).hidden]));\n\t\t\t\tstyles_1 = $.set_style(div_5, \"\", styles_1, { \"--ec-slot-label-periodicity\": $.get(slot)[2] });\n\t\t\t\t$.set_attribute(time, \"datetime\", $.get(slot)[0]);\n\t\t\t});\n\t\t\t$.append($$anchor, div_5);\n\t\t});\n\t\t$.reset(aside_2);\n\t\tvar div_6 = $.sibling(aside_2, 2);\n\t\t$.each(div_6, 21, () => $.get(grid), $.index, ($$anchor, days, i) => {\n\t\t\tvar fragment_10 = $.comment();\n\t\t\tvar node_10 = $.first_child(fragment_10);\n\t\t\t$.each(node_10, 17, () => $.get(days), $.index, ($$anchor, day, j) => {\n\t\t\t\t{\n\t\t\t\t\tlet $0 = $.derived(() => i + 1 === length($.get(grid)) && j + 1 === length($.get(days)));\n\t\t\t\t\tDay$1($$anchor, {\n\t\t\t\t\t\tget day() {\n\t\t\t\t\t\t\treturn $.get(day);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget noIeb() {\n\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnoBeb: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_10);\n\t\t});\n\t\t$.reset(div_6);\n\t\tvar div_7 = $.sibling(div_6, 2);\n\t\tvar node_11 = $.child(div_7);\n\t\t$.each(node_11, 17, () => $.get(chunks), (chunk) => chunk.id, ($$anchor, chunk) => {\n\t\t\tEvent$1($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\tvar node_12 = $.sibling(node_11, 2);\n\t\t$.each(node_12, 17, () => $.get(bgChunks), (chunk) => chunk.id, ($$anchor, chunk) => {\n\t\t\tEvent$1($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\tvar node_13 = $.sibling(node_12, 2);\n\t\t$.each(node_13, 17, () => $.get(iChunks), $.index, ($$anchor, chunk) => {\n\t\t\tEvent$1($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\t$.reset(div_7);\n\t\t$.reset(div_4);\n\t\tvar node_14 = $.sibling(div_4, 2);\n\t\tvar consequent_3 = ($$anchor) => {\n\t\t\tvar fragment_15 = $.comment();\n\t\t\tvar node_15 = $.first_child(fragment_15);\n\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\tvar fragment_16 = $.comment();\n\t\t\t\tvar node_16 = $.first_child(fragment_16);\n\t\t\t\t$.snippet(node_16, () => $$props.nowIndicator);\n\t\t\t\t$.append($$anchor, fragment_16);\n\t\t\t};\n\t\t\tvar alternate_1 = ($$anchor) => {\n\t\t\t\tNowIndicator$1($$anchor, { get days() {\n\t\t\t\t\treturn $.get(grid)[0];\n\t\t\t\t} });\n\t\t\t};\n\t\t\t$.if(node_15, ($$render) => {\n\t\t\t\tif ($$props.nowIndicator) $$render(consequent_2);\n\t\t\t\telse $$render(alternate_1, -1);\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_15);\n\t\t};\n\t\t$.if(node_14, ($$render) => {\n\t\t\tif ($.get(showNowIndicator)) $$render(consequent_3);\n\t\t});\n\t\t$.reset(section);\n\t\t$.bind_this(section, ($$value) => mainState.mainEl = $$value, () => mainState?.mainEl);\n\t\t$.attach(section, () => resizeObserver(reposition));\n\t\t$.template_effect(($0) => {\n\t\t\t$.set_class(section, 1, $.get(theme).main);\n\t\t\tstyles = $.set_style(section, \"\", styles, $0);\n\t\t\t$.set_class(header_1, 1, $.get(theme).header);\n\t\t\t$.set_class(aside, 1, $.get(theme).sidebar);\n\t\t\t$.set_class(div, 1, $.get(theme).grid);\n\t\t\t$.set_class(div_4, 1, $.get(theme).body);\n\t\t\t$.set_class(aside_2, 1, $.get(theme).sidebar);\n\t\t\t$.set_class(div_6, 1, $.get(theme).grid);\n\t\t\t$.set_class(div_7, 1, $.get(theme).events);\n\t\t}, [() => ({\n\t\t\t\"--ec-grid-cols\": length($.get(grid)) * length($.get(grid)[0]),\n\t\t\t\"--ec-col-group-span\": length($.get(grid)[0]),\n\t\t\t\"--ec-col-width\": $.get(columnWidth) ?? \"minmax(0, 1fr)\",\n\t\t\t\"--ec-slot-label-periodicity\": $.get(slotLabelPeriodicity),\n\t\t\t\"--ec-slot-height\": `${$.get(slotHeight) ?? \"\"}px`,\n\t\t\t\"--ec-header-height\": `${$.get(headerHeight) ?? \"\"}px`,\n\t\t\t\"--ec-sidebar-width\": `${$.get(sidebarWidth) ?? \"\"}px`\n\t\t})]);\n\t\t$.bind_element_size(aside, \"offsetWidth\", ($$value) => viewState().sidebarWidth = $$value);\n\t\t$.bind_element_size(header_1, \"offsetHeight\", ($$value) => $.set(headerHeight, $$value));\n\t\t$.append($$anchor, section);\n\t};\n\tvar d = $.derived(() => !empty($.get(grid)) && !empty($.get(grid)[0]));\n\t$.if(node, ($$render) => {\n\t\tif ($.get(d)) $$render(consequent_4);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/resource-time-grid/View.svelte\nvar root$3 = $.from_html(`<!> <!>`, 1);\nfunction View_1($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tlet viewState = new ViewState$1(mainState);\n\tlet today = $.derived(() => mainState.today), mainEl = $.derived(() => mainState.mainEl), scrollDate = $.derived(() => mainState.scrollDate), viewDates = $.derived(() => mainState.viewDates), scrollTime = $.derived(() => mainState.options.scrollTime), datesAboveResources = $.derived(() => mainState.options.datesAboveResources), theme = $.derived(() => mainState.options.theme);\n\tlet grid = $.derived(() => viewState.grid), sidebarWidth = $.derived(() => viewState.sidebarWidth);\n\tlet resourceLabels = $.proxy([]);\n\tlet scrolledTo;\n\t$.user_effect(() => {\n\t\tif ($.get(datesAboveResources)) {\n\t\t\t$.get(viewDates);\n\t\t\t$.get(scrollTime);\n\t\t\t$.get(scrollDate);\n\t\t\ttick().then(scrollToTime);\n\t\t}\n\t});\n\tfunction scrollToTime() {\n\t\tlet target = $.get(scrollDate) && $.get(scrollDate) !== scrolledTo ? $.get(scrollDate) : $.get(today);\n\t\tscrolledTo = $.get(scrollDate);\n\t\tif (target >= $.get(viewDates)[0] && target <= $.get(viewDates).at(-1)) for (let days of $.get(grid)) {\n\t\t\tlet day = days[0];\n\t\t\tif (day.dayStart >= target) {\n\t\t\t\t$.get(mainEl).scrollLeft = ($.get(mainEl).scrollWidth - $.get(sidebarWidth)) / (length($.get(grid)) * length(days)) * (day.gridColumn - 1) * (isRtl() ? -1 : 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t{\n\t\tconst header = ($$anchor) => {\n\t\t\tvar fragment_1 = root$3();\n\t\t\tvar node = $.first_child(fragment_1);\n\t\t\t$.each(node, 17, () => $.get(grid), $.index, ($$anchor, days, i) => {\n\t\t\t\tconst computed_const = $.derived(() => {\n\t\t\t\t\tconst { dayStart: date, resource, disabled, highlight } = $.get(days)[0];\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdate,\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\thighlight\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\t{\n\t\t\t\t\tlet $0 = $.derived(() => length($.get(grid)[0]) > 1 ? $.get(theme).colGroup : void 0);\n\t\t\t\t\tlet $1 = $.derived(() => length($.get(days)));\n\t\t\t\t\tlet $2 = $.derived(() => 1 + i * length($.get(days)));\n\t\t\t\t\tlet $3 = $.derived(() => $.get(datesAboveResources) && $.get(computed_const).disabled);\n\t\t\t\t\tlet $4 = $.derived(() => $.get(datesAboveResources) && $.get(computed_const).highlight);\n\t\t\t\t\tColHead($$anchor, {\n\t\t\t\t\t\tget date() {\n\t\t\t\t\t\t\treturn $.get(computed_const).date;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget className() {\n\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget weekday() {\n\t\t\t\t\t\t\treturn $.get(datesAboveResources);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget colSpan() {\n\t\t\t\t\t\t\treturn $.get($1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget colIndex() {\n\t\t\t\t\t\t\treturn $.get($2);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget disabled() {\n\t\t\t\t\t\t\treturn $.get($3);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget highlight() {\n\t\t\t\t\t\t\treturn $.get($4);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\t\tvar fragment_3 = $.comment();\n\t\t\t\t\t\t\tvar node_1 = $.first_child(fragment_3);\n\t\t\t\t\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\t\t\t\t\tDayHeader($$anchor, { get date() {\n\t\t\t\t\t\t\t\t\treturn $.get(computed_const).date;\n\t\t\t\t\t\t\t\t} });\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\t\t\t\t\tLabel($$anchor, {\n\t\t\t\t\t\t\t\t\tget resource() {\n\t\t\t\t\t\t\t\t\t\treturn $.get(computed_const).resource;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tsetLabel: (label) => resourceLabels[i] = label + \", \"\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t$.if(node_1, ($$render) => {\n\t\t\t\t\t\t\t\tif ($.get(datesAboveResources)) $$render(consequent);\n\t\t\t\t\t\t\t\telse $$render(alternate, -1);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t$.append($$anchor, fragment_3);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tvar node_2 = $.sibling(node, 2);\n\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\tvar fragment_6 = $.comment();\n\t\t\t\tvar node_3 = $.first_child(fragment_6);\n\t\t\t\t$.each(node_3, 17, () => $.get(grid), $.index, ($$anchor, days, i) => {\n\t\t\t\t\tvar fragment_7 = $.comment();\n\t\t\t\t\tvar node_4 = $.first_child(fragment_7);\n\t\t\t\t\t$.each(node_4, 17, () => $.get(days), $.index, ($$anchor, day, j) => {\n\t\t\t\t\t\tconst computed_const_1 = $.derived(() => {\n\t\t\t\t\t\t\tconst { dayStart: date, resource, disabled, highlight } = $.get(day);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdate,\n\t\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\t\thighlight\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet $0 = $.derived(() => 1 + j + i * length($.get(days)));\n\t\t\t\t\t\t\tColHead($$anchor, {\n\t\t\t\t\t\t\t\tget date() {\n\t\t\t\t\t\t\t\t\treturn $.get(computed_const_1).date;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tget colIndex() {\n\t\t\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tget disabled() {\n\t\t\t\t\t\t\t\t\treturn $.get(computed_const_1).disabled;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tget highlight() {\n\t\t\t\t\t\t\t\t\treturn $.get(computed_const_1).highlight;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\t\t\t\tvar fragment_9 = $.comment();\n\t\t\t\t\t\t\t\t\tvar node_5 = $.first_child(fragment_9);\n\t\t\t\t\t\t\t\t\tvar consequent_1 = ($$anchor) => {\n\t\t\t\t\t\t\t\t\t\tLabel($$anchor, {\n\t\t\t\t\t\t\t\t\t\t\tget resource() {\n\t\t\t\t\t\t\t\t\t\t\t\treturn $.get(computed_const_1).resource;\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tget date() {\n\t\t\t\t\t\t\t\t\t\t\t\treturn $.get(computed_const_1).date;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tvar alternate_1 = ($$anchor) => {\n\t\t\t\t\t\t\t\t\t\tDayHeader($$anchor, {\n\t\t\t\t\t\t\t\t\t\t\tget date() {\n\t\t\t\t\t\t\t\t\t\t\t\treturn $.get(computed_const_1).date;\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tget alPrefix() {\n\t\t\t\t\t\t\t\t\t\t\t\treturn resourceLabels[i];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t$.if(node_5, ($$render) => {\n\t\t\t\t\t\t\t\t\t\tif ($.get(datesAboveResources)) $$render(consequent_1);\n\t\t\t\t\t\t\t\t\t\telse $$render(alternate_1, -1);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t$.append($$anchor, fragment_9);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t$.append($$anchor, fragment_7);\n\t\t\t\t});\n\t\t\t\t$.append($$anchor, fragment_6);\n\t\t\t};\n\t\t\tvar d = $.derived(() => length($.get(grid)[0]) > 1);\n\t\t\t$.if(node_2, ($$render) => {\n\t\t\t\tif ($.get(d)) $$render(consequent_2);\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\t\tconst nowIndicator = ($$anchor) => {\n\t\t\tvar fragment_12 = $.comment();\n\t\t\tvar node_6 = $.first_child(fragment_12);\n\t\t\tvar consequent_3 = ($$anchor) => {\n\t\t\t\t{\n\t\t\t\t\tlet $0 = $.derived(() => $.get(grid).flat());\n\t\t\t\t\tlet $1 = $.derived(() => length($.get(grid)[0]));\n\t\t\t\t\tNowIndicator$1($$anchor, {\n\t\t\t\t\t\tget days() {\n\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget span() {\n\t\t\t\t\t\t\treturn $.get($1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar alternate_3 = ($$anchor) => {\n\t\t\t\tvar fragment_14 = $.comment();\n\t\t\t\tvar node_7 = $.first_child(fragment_14);\n\t\t\t\tvar consequent_4 = ($$anchor) => {\n\t\t\t\t\tvar fragment_15 = $.comment();\n\t\t\t\t\tvar node_8 = $.first_child(fragment_15);\n\t\t\t\t\t$.each(node_8, 17, () => $.get(grid), $.index, ($$anchor, days) => {\n\t\t\t\t\t\tNowIndicator$1($$anchor, { get days() {\n\t\t\t\t\t\t\treturn $.get(days);\n\t\t\t\t\t\t} });\n\t\t\t\t\t});\n\t\t\t\t\t$.append($$anchor, fragment_15);\n\t\t\t\t};\n\t\t\t\tvar d_1 = $.derived(() => length($.get(grid)[0]) > 1);\n\t\t\t\tvar alternate_2 = ($$anchor) => {\n\t\t\t\t\t{\n\t\t\t\t\t\tlet $0 = $.derived(() => $.get(grid).flat());\n\t\t\t\t\t\tlet $1 = $.derived(() => length($.get(grid)));\n\t\t\t\t\t\tNowIndicator$1($$anchor, {\n\t\t\t\t\t\t\tget days() {\n\t\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tget span() {\n\t\t\t\t\t\t\t\treturn $.get($1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t$.if(node_7, ($$render) => {\n\t\t\t\t\tif ($.get(d_1)) $$render(consequent_4);\n\t\t\t\t\telse $$render(alternate_2, -1);\n\t\t\t\t});\n\t\t\t\t$.append($$anchor, fragment_14);\n\t\t\t};\n\t\t\t$.if(node_6, ($$render) => {\n\t\t\t\tif ($.get(datesAboveResources)) $$render(consequent_3);\n\t\t\t\telse $$render(alternate_3, -1);\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_12);\n\t\t};\n\t\tView$1($$anchor, {\n\t\t\tget viewState() {\n\t\t\t\treturn viewState;\n\t\t\t},\n\t\t\theader,\n\t\t\tnowIndicator,\n\t\t\t$$slots: {\n\t\t\t\theader: true,\n\t\t\t\tnowIndicator: true\n\t\t\t}\n\t\t});\n\t}\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/resource-time-grid/index.js\nvar resource_time_grid_default = {\n\tcreateOptions(options) {\n\t\tcreateTROptions(options);\n\t\tcreateTRROptions(options);\n\t\tcreateRROptions(options);\n\t\tassign(options, {\n\t\t\tdatesAboveResources: false,\n\t\t\tview: \"resourceTimeGridWeek\"\n\t\t});\n\t\tassign(options.buttonText, {\n\t\t\tresourceTimeGridDay: \"day\",\n\t\t\tresourceTimeGridWeek: \"week\"\n\t\t});\n\t\tassign(options.views, {\n\t\t\tresourceTimeGridDay: {\n\t\t\t\tbuttonText: btnTextDay,\n\t\t\t\tcomponent: initViewComponent$2,\n\t\t\t\tdayHeaderFormat: { weekday: \"long\" },\n\t\t\t\tduration: { days: 1 },\n\t\t\t\ttheme: themeView(\"ec-resource ec-time-grid ec-day-view\")\n\t\t\t},\n\t\t\tresourceTimeGridWeek: {\n\t\t\t\tbuttonText: btnTextWeek,\n\t\t\t\tcomponent: initViewComponent$2,\n\t\t\t\tduration: { weeks: 1 },\n\t\t\t\ttheme: themeView(\"ec-resource ec-time-grid ec-week-view\")\n\t\t\t}\n\t\t});\n\t},\n\tcreateParsers(parsers) {\n\t\tcreateTRRParsers(parsers);\n\t}\n};\nfunction initViewComponent$2(mainState) {\n\tsetExtensions(mainState);\n\treturn View_1;\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/lib.js\nfunction createChunks(event, days, monthView, withId = true) {\n\tlet dates = [];\n\tlet firstStart;\n\tlet lastEnd;\n\tlet gridColumn;\n\tlet gridRow;\n\tlet resource;\n\tlet left;\n\tlet width = 0;\n\tfor (let { gridColumn: column, gridRow: row, resource: dayResource, dayStart, dayEnd, start, end, disabled } of days) if (!disabled) {\n\t\tif (monthView) {\n\t\t\tif (eventIntersects(event, dayStart, dayEnd, dayResource)) {\n\t\t\t\tif (!dates.length) {\n\t\t\t\t\tfirstStart = dayStart;\n\t\t\t\t\tgridColumn = column;\n\t\t\t\t\tgridRow = row;\n\t\t\t\t\tresource = dayResource;\n\t\t\t\t}\n\t\t\t\tdates.push(dayStart);\n\t\t\t\tlastEnd = dayEnd;\n\t\t\t}\n\t\t} else if (eventIntersects(event, start, end, dayResource)) {\n\t\t\tif (!dates.length) {\n\t\t\t\tfirstStart = start;\n\t\t\t\tgridColumn = column;\n\t\t\t\tgridRow = row;\n\t\t\t\tresource = dayResource;\n\t\t\t\tleft = max(event.start - start, 0) / 1e3;\n\t\t\t}\n\t\t\tdates.push(dayStart);\n\t\t\tlastEnd = end;\n\t\t\twidth += (min(end, event.end) - max(start, event.start)) / 1e3;\n\t\t}\n\t}\n\tif (dates.length) {\n\t\tlet chunk = createEventChunk(event, firstStart, lastEnd);\n\t\tassign(chunk, {\n\t\t\tgridColumn,\n\t\t\tgridRow,\n\t\t\tresource,\n\t\t\tdates,\n\t\t\tleft,\n\t\t\twidth\n\t\t});\n\t\tif (withId) assignChunkId(chunk);\n\t\treturn [chunk];\n\t}\n\treturn [];\n}\nfunction prepareChunks(chunks, strict) {\n\tlet dayChunks = {};\n\tfor (let i = 0; i < chunks.length; ++i) {\n\t\tlet chunk = chunks[i];\n\t\tlet { gridColumn, gridRow } = chunk;\n\t\tchunk.order = i;\n\t\tfor (let j = 0; j < chunk.dates.length; ++j) {\n\t\t\tlet key = `${gridRow}_${gridColumn + j}`;\n\t\t\tif (dayChunks[key]) dayChunks[key].push(chunk);\n\t\t\telse dayChunks[key] = [chunk];\n\t\t}\n\t\tchunk.day = dayChunks[`${gridRow}_${gridColumn}`];\n\t}\n\tif (strict) for (let chunk of chunks) {\n\t\tlet { gridColumn, gridRow } = chunk;\n\t\tlet seen = /* @__PURE__ */ new Set([chunk]);\n\t\tlet group = [];\n\t\tfor (let j = 0; j < chunk.dates.length; ++j) for (let other of dayChunks[`${gridRow}_${gridColumn + j}`]) if (!seen.has(other)) {\n\t\t\tseen.add(other);\n\t\t\tgroup.push(other);\n\t\t}\n\t\tchunk.group = group;\n\t}\n}\nfunction repositionEvent(chunk, height, monthView, gap = 1, strict = false) {\n\tlet top = 1;\n\tlet bottom = top + height;\n\tif (strict) {\n\t\tfor (let other of chunk.group) if (other.order < chunk.order && \"top\" in other && other.bottom + gap > top) top = other.bottom + gap;\n\t\tbottom = top + height;\n\t} else {\n\t\tlet dayChunks = chunk.day;\n\t\tdayChunks.sort((a, b) => (a.top ?? Number.POSITIVE_INFINITY) - (b.top ?? Number.POSITIVE_INFINITY));\n\t\tfor (let dayChunk of dayChunks) {\n\t\t\tif (dayChunk === chunk || !(\"top\" in dayChunk)) continue;\n\t\t\tif ((monthView || chunk.start < dayChunk.end && chunk.end > dayChunk.start) && top < dayChunk.bottom && bottom > dayChunk.top) {\n\t\t\t\tlet offset = dayChunk.bottom - top + gap;\n\t\t\t\ttop += offset;\n\t\t\t\tbottom += offset;\n\t\t\t}\n\t\t}\n\t}\n\tassign(chunk, {\n\t\ttop,\n\t\tbottom\n\t});\n\treturn top;\n}\nfunction getSlotTimeLimits(dayTimeLimits, date) {\n\treturn dayTimeLimits[date.getTime()] ?? {\n\t\tmin: createDuration(0),\n\t\tmax: createDuration(\"24:00:00\")\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/derived.js\nfunction grid(mainState, viewState) {\n\treturn () => {\n\t\tlet { viewDates, options: { highlightedDates, validRange } } = mainState;\n\t\tlet { dayTimeLimits, viewResources } = viewState;\n\t\tlet grid = [];\n\t\tuntrack(() => {\n\t\t\tlet gridRow = 1;\n\t\t\tfor (let resource of viewResources) {\n\t\t\t\tlet days = [];\n\t\t\t\tlet gridColumn = 1;\n\t\t\t\tfor (let date of viewDates) {\n\t\t\t\t\tlet slotTimeLimits = dayTimeLimits[date.getTime()];\n\t\t\t\t\tdays.push({\n\t\t\t\t\t\tgridColumn,\n\t\t\t\t\t\tgridRow,\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tstart: addDuration(cloneDate(date), slotTimeLimits.min),\n\t\t\t\t\t\tend: addDuration(cloneDate(date), slotTimeLimits.max),\n\t\t\t\t\t\tdayStart: date,\n\t\t\t\t\t\tdayEnd: addDay(cloneDate(date)),\n\t\t\t\t\t\tdisabled: outsideRange(date, validRange),\n\t\t\t\t\t\thighlight: highlightedDates.some((d) => datesEqual(d, date))\n\t\t\t\t\t});\n\t\t\t\t\t++gridColumn;\n\t\t\t\t}\n\t\t\t\tgrid.push(days);\n\t\t\t\t++gridRow;\n\t\t\t}\n\t\t});\n\t\treturn grid;\n\t};\n}\nfunction extraHeads(mainState, viewState) {\n\treturn () => {\n\t\tlet { features, options: { firstDay, weekNumbers } } = mainState;\n\t\tlet { grid } = viewState;\n\t\tlet months = [];\n\t\tlet weeks = [];\n\t\tuntrack(() => {\n\t\t\tlet month;\n\t\t\tlet week;\n\t\t\tif (!empty(grid)) for (let { dayStart, gridColumn } of grid[0]) {\n\t\t\t\tif (features.includes(\"month\")) if (month && month.date.getUTCMonth() === dayStart.getUTCMonth()) ++month.span;\n\t\t\t\telse {\n\t\t\t\t\tmonth = {\n\t\t\t\t\t\tdate: dayStart,\n\t\t\t\t\t\tgridColumn,\n\t\t\t\t\t\tspan: 1\n\t\t\t\t\t};\n\t\t\t\t\tmonths.push(month);\n\t\t\t\t}\n\t\t\t\tif (weekNumbers) {\n\t\t\t\t\tlet number = getWeekNumber(dayStart, firstDay);\n\t\t\t\t\tif (week && week.number === number) ++week.span;\n\t\t\t\t\telse {\n\t\t\t\t\t\tweek = {\n\t\t\t\t\t\t\tnumber,\n\t\t\t\t\t\t\tdate: dayStart,\n\t\t\t\t\t\t\tgridColumn,\n\t\t\t\t\t\t\tspan: 1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tweeks.push(week);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\tmonths,\n\t\t\tweeks\n\t\t};\n\t};\n}\nfunction eventChunks(mainState, viewState) {\n\treturn () => {\n\t\tlet { filteredEvents, options: { eventOrderStrict } } = mainState;\n\t\tlet { grid, monthView } = viewState;\n\t\tlet chunks = [];\n\t\tlet bgChunks = [];\n\t\tuntrack(() => {\n\t\t\tfor (let event of filteredEvents) for (let days of grid) if (bgEvent(event.display)) {\n\t\t\t\tif (!monthView || event.allDay) bgChunks = bgChunks.concat(createChunks(event, days, monthView));\n\t\t\t} else chunks = chunks.concat(createChunks(event, days, monthView));\n\t\t\tprepareChunks(chunks, eventOrderStrict);\n\t\t});\n\t\treturn {\n\t\t\tchunks,\n\t\t\tbgChunks\n\t\t};\n\t};\n}\nfunction iEventChunks(mainState, viewState) {\n\treturn () => {\n\t\tlet { iEvents } = mainState;\n\t\tlet { grid, monthView } = viewState;\n\t\tlet iChunks = [];\n\t\tfor (let [, event] of iEvents) {\n\t\t\tif (!event) continue;\n\t\t\tuntrack(() => {\n\t\t\t\tfor (let days of grid) iChunks = iChunks.concat(createChunks(event, days, monthView, false));\n\t\t\t});\n\t\t}\n\t\treturn iChunks;\n\t};\n}\nfunction dayTimeLimits(mainState) {\n\treturn () => {\n\t\tlet { filteredEvents, viewDates, options: { flexibleSlotTimeLimits, slotMinTime, slotMaxTime } } = mainState;\n\t\tlet dayTimeLimits = {};\n\t\tuntrack(() => {\n\t\t\tfor (let date of viewDates) dayTimeLimits[date.getTime()] = createSlotTimeLimits(slotMinTime, slotMaxTime, flexibleSlotTimeLimits, [date], filteredEvents);\n\t\t});\n\t\treturn dayTimeLimits;\n\t};\n}\nfunction daySlots(mainState, viewState) {\n\treturn () => {\n\t\tlet { viewDates, options: { slotDuration } } = mainState;\n\t\tlet { dayTimeLimits, intlSlotLabel, slotLabelPeriodicity } = viewState;\n\t\tlet slots = {};\n\t\tuntrack(() => {\n\t\t\tfor (let date of viewDates) {\n\t\t\t\tlet key = date.getTime();\n\t\t\t\tslots[key] = key in dayTimeLimits ? createSlots(date, slotDuration, slotLabelPeriodicity, dayTimeLimits[key], intlSlotLabel) : [];\n\t\t\t}\n\t\t});\n\t\treturn slots;\n\t};\n}\nfunction nestedResources(mainState) {\n\treturn () => {\n\t\tlet { resources } = mainState;\n\t\tlet nested;\n\t\tuntrack(() => {\n\t\t\tnested = resources.some((resource) => getPayload(resource).children.length);\n\t\t});\n\t\treturn nested;\n\t};\n}\nfunction monthView(mainState) {\n\treturn () => {\n\t\tlet { options: { slotDuration } } = mainState;\n\t\tlet monthView;\n\t\tuntrack(() => {\n\t\t\tmonthView = !toSeconds(slotDuration);\n\t\t});\n\t\treturn monthView;\n\t};\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/state.svelte.js\nvar ViewState = class extends RRState(TRRState()) {\n\t#dayTimeLimits;\n\tget dayTimeLimits() {\n\t\treturn $.get(this.#dayTimeLimits);\n\t}\n\tset dayTimeLimits(value) {\n\t\t$.set(this.#dayTimeLimits, value);\n\t}\n\t#daySlots;\n\tget daySlots() {\n\t\treturn $.get(this.#daySlots);\n\t}\n\tset daySlots(value) {\n\t\t$.set(this.#daySlots, value);\n\t}\n\t#grid;\n\tget grid() {\n\t\treturn $.get(this.#grid);\n\t}\n\tset grid(value) {\n\t\t$.set(this.#grid, value);\n\t}\n\t#extraHeads;\n\tget extraHeads() {\n\t\treturn $.get(this.#extraHeads);\n\t}\n\tset extraHeads(value) {\n\t\t$.set(this.#extraHeads, value);\n\t}\n\t#intlMonthHeader;\n\tget intlMonthHeader() {\n\t\treturn $.get(this.#intlMonthHeader);\n\t}\n\tset intlMonthHeader(value) {\n\t\t$.set(this.#intlMonthHeader, value);\n\t}\n\t#monthView;\n\tget monthView() {\n\t\treturn $.get(this.#monthView);\n\t}\n\tset monthView(value) {\n\t\t$.set(this.#monthView, value);\n\t}\n\t#chunks;\n\tget chunks() {\n\t\treturn $.get(this.#chunks);\n\t}\n\tset chunks(value) {\n\t\t$.set(this.#chunks, value);\n\t}\n\t#bgChunks;\n\tget bgChunks() {\n\t\treturn $.get(this.#bgChunks);\n\t}\n\tset bgChunks(value) {\n\t\t$.set(this.#bgChunks, value);\n\t}\n\t#iChunks;\n\tget iChunks() {\n\t\treturn $.get(this.#iChunks);\n\t}\n\tset iChunks(value) {\n\t\t$.set(this.#iChunks, value);\n\t}\n\t#nestedResources;\n\tget nestedResources() {\n\t\treturn $.get(this.#nestedResources);\n\t}\n\tset nestedResources(value) {\n\t\t$.set(this.#nestedResources, value);\n\t}\n\tconstructor(mainState) {\n\t\tsuper(mainState);\n\t\tthis.#dayTimeLimits = $.derived(dayTimeLimits(mainState));\n\t\tthis.#daySlots = $.derived(daySlots(mainState, this));\n\t\tthis.#grid = $.derived(grid(mainState, this));\n\t\tthis.#extraHeads = $.derived(extraHeads(mainState, this));\n\t\tthis.#intlMonthHeader = $.derived(intl(mainState, \"monthHeaderFormat\"));\n\t\tthis.#monthView = $.derived(monthView(mainState));\n\t\tlet $$d = $.derived(eventChunks(mainState, this)), chunks = $.derived(() => $.get($$d).chunks), bgChunks = $.derived(() => $.get($$d).bgChunks);\n\t\tthis.#chunks = $.derived(() => $.get(chunks));\n\t\tthis.#bgChunks = $.derived(() => $.get(bgChunks));\n\t\tthis.#iChunks = $.derived(iEventChunks(mainState, this));\n\t\tthis.#nestedResources = $.derived(nestedResources(mainState));\n\t}\n};\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/Day.svelte\nfunction Day($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), slotWidth = $.derived(() => $.get($$d).options.slotWidth);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), monthView = $.derived(() => $.get($$d_1).monthView), snap = $.derived(() => $.get($$d_1).snap);\n\tlet date = $.derived(() => $$props.day.dayStart), start = $.derived(() => $$props.day.start), resource = $.derived(() => $$props.day.resource), disabled = $.derived(() => $$props.day.disabled), highlight = $.derived(() => $$props.day.highlight);\n\tlet el = $.state(void 0);\n\tfunction dateFromPoint(x, y) {\n\t\tif ($.get(monthView)) return $.get(date);\n\t\telse {\n\t\t\tlet dayRect = rect($.get(el));\n\t\t\tlet scaleX = dayRect.width / $.get(el).offsetWidth;\n\t\t\treturn addDuration(cloneDate($.get(start)), $.get(snap).duration, floor((isRtl() ? dayRect.right - x : x - dayRect.left) / ($.get(slotWidth) * $.get(snap).ratio * scaleX)));\n\t\t}\n\t}\n\tBaseDay($$anchor, {\n\t\tget allDay() {\n\t\t\treturn $.get(monthView);\n\t\t},\n\t\tget date() {\n\t\t\treturn $.get(date);\n\t\t},\n\t\tget resource() {\n\t\t\treturn $.get(resource);\n\t\t},\n\t\tdateFromPoint,\n\t\tget disabled() {\n\t\t\treturn $.get(disabled);\n\t\t},\n\t\tget highlight() {\n\t\t\treturn $.get(highlight);\n\t\t},\n\t\tget noIeb() {\n\t\t\treturn $$props.noIeb;\n\t\t},\n\t\tget noBeb() {\n\t\t\treturn $$props.noBeb;\n\t\t},\n\t\tget el() {\n\t\t\treturn $.get(el);\n\t\t},\n\t\tset el($$value) {\n\t\t\t$.set(el, $$value, true);\n\t\t}\n\t});\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/Event.svelte\nfunction Event($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), eventGap = $.derived(() => $.get($$d).options.eventGap), eventOrderStrict = $.derived(() => $.get($$d).options.eventOrderStrict), slotDuration = $.derived(() => $.get($$d).options.slotDuration), slotWidth = $.derived(() => $.get($$d).options.slotWidth);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), monthView = $.derived(() => $.get($$d_1).monthView);\n\tlet el = $.state(void 0);\n\tlet margin = $.state(1);\n\tlet event = $.derived(() => $$props.chunk.event);\n\tlet styles = $.derived(() => (style) => {\n\t\tstyle[\"grid-column\"] = `${$$props.chunk.gridColumn} / span ${$$props.chunk.dates.length}`;\n\t\tstyle[\"grid-row\"] = $$props.chunk.gridRow;\n\t\tif (!$.get(monthView)) {\n\t\t\tstyle[\"inset-inline-start\"] = `${$$props.chunk.left / toSeconds($.get(slotDuration)) * $.get(slotWidth)}px`;\n\t\t\tstyle[\"inline-size\"] = `${$$props.chunk.width / toSeconds($.get(slotDuration)) * $.get(slotWidth)}px`;\n\t\t}\n\t\tlet marginTop = $.get(margin);\n\t\tif ($.get(event)._margin) {\n\t\t\tlet [_margin, _gridRow] = $.get(event)._margin;\n\t\t\tif ($$props.chunk.gridRow === _gridRow) marginTop = _margin;\n\t\t}\n\t\tstyle[\"margin-block-start\"] = `${marginTop}px`;\n\t\treturn style;\n\t});\n\tfunction reposition() {\n\t\t$.set(margin, repositionEvent($$props.chunk, height($.get(el)), $.get(monthView), $.get(eventGap), $.get(eventOrderStrict)), true);\n\t}\n\tvar $$exports = { reposition };\n\t{\n\t\tlet $0 = $.derived(() => [$.get(margin), $$props.chunk.gridRow]);\n\t\tInteractableEvent($$anchor, {\n\t\t\tget chunk() {\n\t\t\t\treturn $$props.chunk;\n\t\t\t},\n\t\t\tget styles() {\n\t\t\t\treturn $.get(styles);\n\t\t\t},\n\t\t\taxis: \"x\",\n\t\t\tget forceMargin() {\n\t\t\t\treturn $.get($0);\n\t\t\t},\n\t\t\tget el() {\n\t\t\t\treturn $.get(el);\n\t\t\t},\n\t\t\tset el($$value) {\n\t\t\t\t$.set(el, $$value, true);\n\t\t\t}\n\t\t});\n\t}\n\treturn $.pop($$exports);\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/Expander.svelte\nvar root$2 = $.from_html(`<span></span>`);\nvar root_1$1 = $.from_html(`<button></button>`);\nvar root_2$1 = $.from_html(`<!> <span><!></span>`, 1);\nfunction Expander($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet resource = $.prop($$props, \"resource\", 7);\n\tlet $$d = $.derived(() => getContext(\"state\")), resources = $.derived(() => $.get($$d).resources), view = $.derived(() => $.get($$d).view), buttonText = $.derived(() => $.get($$d).options.buttonText), icons = $.derived(() => $.get($$d).options.icons), resourceExpand = $.derived(() => $.get($$d).options.resourceExpand), theme = $.derived(() => $.get($$d).options.theme);\n\tlet payload = $.state({});\n\tlet expanded = $.derived(() => resource().expanded);\n\tlet title = $.derived(() => $.get(buttonText)[$.get(expanded) ? \"collapse\" : \"expand\"]);\n\t$.user_pre_effect(() => {\n\t\t$.set(payload, getPayload(resource()));\n\t});\n\tfunction onclick(jsEvent) {\n\t\tresource().expanded = $.set(expanded, !$.get(expanded));\n\t\ttoggle($.get(payload).children);\n\t\t$.get(resources).length = $.get(resources).length;\n\t\tif (isFunction($.get(resourceExpand))) $.get(resourceExpand)({\n\t\t\tresource: resource(),\n\t\t\tjsEvent,\n\t\t\tview: toViewWithLocalDates($.get(view))\n\t\t});\n\t}\n\tfunction toggle(children) {\n\t\tfor (let child of children) {\n\t\t\tlet payload = getPayload(child);\n\t\t\tpayload.hidden = !$.get(expanded);\n\t\t\tif (child.expanded) toggle(payload.children);\n\t\t}\n\t}\n\tvar fragment = root_2$1();\n\tvar node = $.first_child(fragment);\n\t$.each(node, 17, () => Array($.get(payload).level), $.index, ($$anchor, level) => {\n\t\tvar span = root$2();\n\t\t$.template_effect(() => $.set_class(span, 1, $.get(theme).expander));\n\t\t$.append($$anchor, span);\n\t});\n\tvar span_1 = $.sibling(node, 2);\n\tvar node_1 = $.child(span_1);\n\tvar consequent = ($$anchor) => {\n\t\tvar button = root_1$1();\n\t\t$.attach(button, () => contentFrom($.get(icons)[$.get(expanded) ? \"collapse\" : \"expand\"]));\n\t\t$.template_effect(() => {\n\t\t\t$.set_class(button, 1, $.get(theme).button);\n\t\t\t$.set_attribute(button, \"aria-label\", $.get(title));\n\t\t\t$.set_attribute(button, \"title\", $.get(title));\n\t\t});\n\t\t$.delegated(\"click\", button, onclick);\n\t\t$.append($$anchor, button);\n\t};\n\t$.if(node_1, ($$render) => {\n\t\tif ($.get(payload).children?.length) $$render(consequent);\n\t});\n\t$.reset(span_1);\n\t$.template_effect(() => $.set_class(span_1, 1, $.get(theme).expander));\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n$.delegate([\"click\"]);\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/NowIndicator.svelte\nvar root$1 = $.from_html(`<div></div>`);\nfunction NowIndicator($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet $$d = $.derived(() => getContext(\"state\")), mainEl = $.derived(() => $.get($$d).mainEl), now = $.derived(() => $.get($$d).now), today = $.derived(() => $.get($$d).today), slotDuration = $.derived(() => $.get($$d).options.slotDuration), slotWidth = $.derived(() => $.get($$d).options.slotWidth), theme = $.derived(() => $.get($$d).options.theme);\n\tlet $$d_1 = $.derived(() => getContext(\"view-state\")), grid = $.derived(() => $.get($$d_1).grid), sidebarWidth = $.derived(() => $.get($$d_1).sidebarWidth);\n\tlet $$d_2 = $.derived(() => {\n\t\tfor (let day of $.get(grid)[0]) if (datesEqual(day.dayStart, $.get(today))) return day;\n\t\treturn {};\n\t}), gridColumn = $.derived(() => $.get($$d_2).gridColumn), start = $.derived(() => $.get($$d_2).start), end = $.derived(() => $.get($$d_2).end);\n\tlet left = $.derived(() => {\n\t\tif ($.get(now) < $.get(start) || $.get(now) > $.get(end)) return null;\n\t\tlet step = toSeconds($.get(slotDuration));\n\t\treturn ($.get(now) - $.get(start)) / 1e3 / step * $.get(slotWidth);\n\t});\n\tlet observerOptions = $.derived(() => ({\n\t\troot: $.get(mainEl),\n\t\trootMargin: isRtl() ? `0px -${$.get(sidebarWidth) + 1}px 0px 0px` : `0px 0px 0px -${$.get(sidebarWidth) + 1}px`,\n\t\tthreshold: 0\n\t}));\n\tfunction onIntersect(el, entry) {\n\t\tel.classList.toggle($.get(theme).hidden, !entry.isIntersecting);\n\t}\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\tvar consequent = ($$anchor) => {\n\t\tvar div = root$1();\n\t\tlet styles;\n\t\t$.attach(div, () => intersectionObserver(onIntersect, $.get(observerOptions)));\n\t\t$.template_effect(() => {\n\t\t\t$.set_class(div, 1, $.get(theme).nowIndicator);\n\t\t\tstyles = $.set_style(div, \"\", styles, {\n\t\t\t\t\"grid-column\": $.get(gridColumn) + 1,\n\t\t\t\t\"grid-row\": `2 / span ${$.get(grid).length ?? \"\"}`,\n\t\t\t\t\"inset-inline-start\": `${$.get(left) ?? \"\"}px`\n\t\t\t});\n\t\t});\n\t\t$.append($$anchor, div);\n\t};\n\t$.if(node, ($$render) => {\n\t\tif ($.get(gridColumn) && $.get(left) !== null) $$render(consequent);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/View.svelte\nvar root = $.from_html(`<time></time>`);\nvar root_1 = $.from_html(`<span><!></span>`);\nvar root_2 = $.from_html(`<div><time></time></div>`);\nvar root_3 = $.from_html(`<div role=\"rowheader\"><!> <!></div>`);\nvar root_4 = $.from_html(`<section><header><aside></aside> <div role=\"row\"><!> <!> <!> <!></div></header> <div role=\"rowgroup\"><aside></aside> <div role=\"row\"></div> <div><!> <!> <!></div></div> <!></section>`);\nfunction View($$anchor, $$props) {\n\t$.push($$props, true);\n\tlet mainState = getContext(\"state\");\n\tlet viewState = new ViewState(mainState);\n\tsetContext(\"view-state\", viewState);\n\tlet mainEl = $.derived(() => mainState.mainEl), scrollDate = $.derived(() => mainState.scrollDate), snippets = $.derived(() => mainState.snippets), today = $.derived(() => mainState.today), viewDates = $.derived(() => mainState.viewDates), columnWidth = $.derived(() => mainState.options.columnWidth), eventGap = $.derived(() => mainState.options.eventGap), nowIndicator = $.derived(() => mainState.options.nowIndicator), scrollTime = $.derived(() => mainState.options.scrollTime), slotDuration = $.derived(() => mainState.options.slotDuration), slotHeight = $.derived(() => mainState.options.slotHeight), slotWidth = $.derived(() => mainState.options.slotWidth), theme = $.derived(() => mainState.options.theme), weekNumberContent = $.derived(() => mainState.options.weekNumberContent);\n\tlet chunks = $.derived(() => viewState.chunks), bgChunks = $.derived(() => viewState.bgChunks), iChunks = $.derived(() => viewState.iChunks), daySlots = $.derived(() => viewState.daySlots), dayTimeLimits = $.derived(() => viewState.dayTimeLimits), grid = $.derived(() => viewState.grid), extraHeads = $.derived(() => viewState.extraHeads), intlMonthHeader = $.derived(() => viewState.intlMonthHeader), monthView = $.derived(() => viewState.monthView), nestedResources = $.derived(() => viewState.nestedResources), sidebarWidth = $.derived(() => viewState.sidebarWidth), slotLabelPeriodicity = $.derived(() => viewState.slotLabelPeriodicity), viewResources = $.derived(() => viewState.viewResources);\n\tlet headerHeight = $.state(0);\n\tlet scrolledTo;\n\t$.user_effect(() => {\n\t\t$.get(scrollTime);\n\t\t$.get(scrollDate);\n\t\tif (!empty($.get(viewDates))) tick().then(scrollToTime);\n\t});\n\tfunction scrollToTime() {\n\t\tlet scrollLeft = 0;\n\t\tlet target = $.get(scrollDate) && $.get(scrollDate) !== scrolledTo ? $.get(scrollDate) : $.get(today);\n\t\tscrolledTo = $.get(scrollDate);\n\t\tlet targetOutOfView = target < $.get(viewDates)[0] || target > $.get(viewDates).at(-1);\n\t\tif ($.get(monthView)) {\n\t\t\tif (!targetOutOfView) {\n\t\t\t\tlet days = $.get(grid)[0];\n\t\t\t\tfor (let day of days) if (day.dayStart >= target) {\n\t\t\t\t\t$.get(mainEl).scrollLeft = ($.get(mainEl).scrollWidth - $.get(sidebarWidth)) / length(days) * (day.gridColumn - 1) * (isRtl() ? -1 : 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let date of $.get(viewDates)) {\n\t\t\t\tlet slotTimeLimits = getSlotTimeLimits($.get(dayTimeLimits), date);\n\t\t\t\tif (targetOutOfView || date >= target) {\n\t\t\t\t\tscrollLeft += max(min(toSeconds($.get(scrollTime)), toSeconds(slotTimeLimits.max)) - toSeconds(slotTimeLimits.min), 0);\n\t\t\t\t\tbreak;\n\t\t\t\t} else scrollLeft += toSeconds(slotTimeLimits.max) - toSeconds(slotTimeLimits.min);\n\t\t\t}\n\t\t\t$.get(mainEl).scrollLeft = scrollLeft / toSeconds($.get(slotDuration)) * $.get(slotWidth) * (isRtl() ? -1 : 1);\n\t\t}\n\t}\n\tlet refs = [];\n\tfunction reposition() {\n\t\trunReposition(refs, $.get(chunks));\n\t}\n\t$.user_effect(() => {\n\t\t$.get(eventGap);\n\t\treposition();\n\t});\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\tvar consequent_5 = ($$anchor) => {\n\t\tvar section = root_4();\n\t\tlet styles;\n\t\tvar header = $.child(section);\n\t\tvar aside = $.child(header);\n\t\tvar div = $.sibling(aside, 2);\n\t\tvar node_1 = $.child(div);\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar fragment_1 = $.comment();\n\t\t\tvar node_2 = $.first_child(fragment_1);\n\t\t\t$.each(node_2, 17, () => $.get(extraHeads).months, $.index, ($$anchor, $$item) => {\n\t\t\t\tlet date = () => $.get($$item).date;\n\t\t\t\tlet gridColumn = () => $.get($$item).gridColumn;\n\t\t\t\tlet span = () => $.get($$item).span;\n\t\t\t\tColHead($$anchor, {\n\t\t\t\t\tget className() {\n\t\t\t\t\t\treturn $.get(theme).colGroup;\n\t\t\t\t\t},\n\t\t\t\t\tget colIndex() {\n\t\t\t\t\t\treturn gridColumn();\n\t\t\t\t\t},\n\t\t\t\t\tget colSpan() {\n\t\t\t\t\t\treturn span();\n\t\t\t\t\t},\n\t\t\t\t\tcssSpan: true,\n\t\t\t\t\tweekday: false,\n\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\tvar time = root();\n\t\t\t\t\t\t$.attach(time, () => contentFrom($.get(intlMonthHeader).format(date())));\n\t\t\t\t\t\t$.template_effect(($0) => $.set_attribute(time, \"datetime\", $0), [() => toISOString(date(), 10)]);\n\t\t\t\t\t\t$.append($$anchor, time);\n\t\t\t\t\t},\n\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t});\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\t\tvar d = $.derived(() => length($.get(extraHeads).months) > 1);\n\t\t$.if(node_1, ($$render) => {\n\t\t\tif ($.get(d)) $$render(consequent);\n\t\t});\n\t\tvar node_3 = $.sibling(node_1, 2);\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar fragment_3 = $.comment();\n\t\t\tvar node_4 = $.first_child(fragment_3);\n\t\t\t$.each(node_4, 17, () => $.get(extraHeads).weeks, $.index, ($$anchor, $$item) => {\n\t\t\t\tlet number = () => $.get($$item).number;\n\t\t\t\tlet date = () => $.get($$item).date;\n\t\t\t\tlet gridColumn = () => $.get($$item).gridColumn;\n\t\t\t\tlet span = () => $.get($$item).span;\n\t\t\t\tconst weekNumber = $.derived(() => createWeekNumberContent(number(), date(), $.get(weekNumberContent), $.get(snippets).weekNumberContent));\n\t\t\t\tColHead($$anchor, {\n\t\t\t\t\tget className() {\n\t\t\t\t\t\treturn $.get(theme).colGroup;\n\t\t\t\t\t},\n\t\t\t\t\tget colIndex() {\n\t\t\t\t\t\treturn gridColumn();\n\t\t\t\t\t},\n\t\t\t\t\tget colSpan() {\n\t\t\t\t\t\treturn span();\n\t\t\t\t\t},\n\t\t\t\t\tcssSpan: true,\n\t\t\t\t\tweekday: false,\n\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\tvar span_1 = root_1();\n\t\t\t\t\t\tvar node_5 = $.child(span_1);\n\t\t\t\t\t\t$.snippet(node_5, () => $.get(weekNumber).snippet ?? $.noop, () => $.get(weekNumber).arg);\n\t\t\t\t\t\t$.reset(span_1);\n\t\t\t\t\t\t$.attach(span_1, () => contentFrom($.get(weekNumber).content, $.get(weekNumber).snippet));\n\t\t\t\t\t\t$.template_effect(() => $.set_class(span_1, 1, $.get(theme).weekNumber));\n\t\t\t\t\t\t$.append($$anchor, span_1);\n\t\t\t\t\t},\n\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t});\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_3);\n\t\t};\n\t\tvar d_1 = $.derived(() => length($.get(extraHeads).weeks) > 1);\n\t\t$.if(node_3, ($$render) => {\n\t\t\tif ($.get(d_1)) $$render(consequent_1);\n\t\t});\n\t\tvar node_6 = $.sibling(node_3, 2);\n\t\t$.each(node_6, 17, () => $.get(grid)[0], $.index, ($$anchor, $$item, i) => {\n\t\t\tlet date = () => $.get($$item).dayStart;\n\t\t\tlet disabled = () => $.get($$item).disabled;\n\t\t\tlet highlight = () => $.get($$item).highlight;\n\t\t\tColHead($$anchor, {\n\t\t\t\tget date() {\n\t\t\t\t\treturn date();\n\t\t\t\t},\n\t\t\t\tcolIndex: 1 + i,\n\t\t\t\tget disabled() {\n\t\t\t\t\treturn disabled();\n\t\t\t\t},\n\t\t\t\tget highlight() {\n\t\t\t\t\treturn highlight();\n\t\t\t\t},\n\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\tDayHeader($$anchor, { get date() {\n\t\t\t\t\t\treturn date();\n\t\t\t\t\t} });\n\t\t\t\t},\n\t\t\t\t$$slots: { default: true }\n\t\t\t});\n\t\t});\n\t\tvar node_7 = $.sibling(node_6, 2);\n\t\tvar consequent_2 = ($$anchor) => {\n\t\t\tvar fragment_7 = $.comment();\n\t\t\tvar node_8 = $.first_child(fragment_7);\n\t\t\t$.each(node_8, 17, () => $.get(grid)[0], $.index, ($$anchor, $$item) => {\n\t\t\t\tlet date = () => $.get($$item).dayStart;\n\t\t\t\tlet disabled = () => $.get($$item).disabled;\n\t\t\t\tlet highlight = () => $.get($$item).highlight;\n\t\t\t\tColHead($$anchor, {\n\t\t\t\t\tget date() {\n\t\t\t\t\t\treturn date();\n\t\t\t\t\t},\n\t\t\t\t\tget className() {\n\t\t\t\t\t\treturn $.get(theme).slots;\n\t\t\t\t\t},\n\t\t\t\t\tget disabled() {\n\t\t\t\t\t\treturn disabled();\n\t\t\t\t\t},\n\t\t\t\t\tget highlight() {\n\t\t\t\t\t\treturn highlight();\n\t\t\t\t\t},\n\t\t\t\t\tariaHidden: true,\n\t\t\t\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t\t\t\tvar fragment_9 = $.comment();\n\t\t\t\t\t\tvar node_9 = $.first_child(fragment_9);\n\t\t\t\t\t\t$.each(node_9, 17, () => $.get(daySlots)[date().getTime()], $.index, ($$anchor, slot) => {\n\t\t\t\t\t\t\tvar div_1 = root_2();\n\t\t\t\t\t\t\tlet styles_1;\n\t\t\t\t\t\t\tvar time_1 = $.child(div_1);\n\t\t\t\t\t\t\t$.attach(time_1, () => contentFrom($.get(slot)[1]));\n\t\t\t\t\t\t\t$.reset(div_1);\n\t\t\t\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t\t\t\t$.set_class(div_1, 1, $.get(theme).slot);\n\t\t\t\t\t\t\t\tstyles_1 = $.set_style(div_1, \"\", styles_1, { \"--ec-slot-label-periodicity\": $.get(slot)[2] });\n\t\t\t\t\t\t\t\t$.set_attribute(time_1, \"datetime\", $.get(slot)[0]);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t$.append($$anchor, div_1);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$.append($$anchor, fragment_9);\n\t\t\t\t\t},\n\t\t\t\t\t$$slots: { default: true }\n\t\t\t\t});\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_7);\n\t\t};\n\t\t$.if(node_7, ($$render) => {\n\t\t\tif (!$.get(monthView)) $$render(consequent_2);\n\t\t});\n\t\t$.reset(div);\n\t\t$.reset(header);\n\t\tvar div_2 = $.sibling(header, 2);\n\t\tvar aside_1 = $.child(div_2);\n\t\t$.each(aside_1, 21, () => $.get(viewResources), $.index, ($$anchor, resource) => {\n\t\t\tvar div_3 = root_3();\n\t\t\tvar node_10 = $.child(div_3);\n\t\t\tvar consequent_3 = ($$anchor) => {\n\t\t\t\tExpander($$anchor, { get resource() {\n\t\t\t\t\treturn $.get(resource);\n\t\t\t\t} });\n\t\t\t};\n\t\t\t$.if(node_10, ($$render) => {\n\t\t\t\tif ($.get(nestedResources)) $$render(consequent_3);\n\t\t\t});\n\t\t\tLabel($.sibling(node_10, 2), { get resource() {\n\t\t\t\treturn $.get(resource);\n\t\t\t} });\n\t\t\t$.reset(div_3);\n\t\t\t$.template_effect(() => $.set_class(div_3, 1, $.get(theme).rowHead));\n\t\t\t$.append($$anchor, div_3);\n\t\t});\n\t\t$.reset(aside_1);\n\t\tvar div_4 = $.sibling(aside_1, 2);\n\t\t$.each(div_4, 21, () => $.get(grid), $.index, ($$anchor, days, i) => {\n\t\t\tvar fragment_11 = $.comment();\n\t\t\tvar node_12 = $.first_child(fragment_11);\n\t\t\t$.each(node_12, 17, () => $.get(days), $.index, ($$anchor, day, j) => {\n\t\t\t\t{\n\t\t\t\t\tlet $0 = $.derived(() => j + 1 === length($.get(days)));\n\t\t\t\t\tlet $1 = $.derived(() => i + 1 === length($.get(grid)));\n\t\t\t\t\tDay($$anchor, {\n\t\t\t\t\t\tget day() {\n\t\t\t\t\t\t\treturn $.get(day);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget noIeb() {\n\t\t\t\t\t\t\treturn $.get($0);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget noBeb() {\n\t\t\t\t\t\t\treturn $.get($1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\t$.append($$anchor, fragment_11);\n\t\t});\n\t\t$.reset(div_4);\n\t\tvar div_5 = $.sibling(div_4, 2);\n\t\tvar node_13 = $.child(div_5);\n\t\t$.each(node_13, 19, () => $.get(chunks), (chunk) => chunk.id, ($$anchor, chunk, i) => {\n\t\t\t$.bind_this(Event($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} }), ($$value, i) => refs[i] = $$value, (i) => refs?.[i], () => [$.get(i)]);\n\t\t});\n\t\tvar node_14 = $.sibling(node_13, 2);\n\t\t$.each(node_14, 17, () => $.get(bgChunks), (chunk) => chunk.id, ($$anchor, chunk) => {\n\t\t\tEvent($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\tvar node_15 = $.sibling(node_14, 2);\n\t\t$.each(node_15, 17, () => $.get(iChunks), $.index, ($$anchor, chunk) => {\n\t\t\tEvent($$anchor, { get chunk() {\n\t\t\t\treturn $.get(chunk);\n\t\t\t} });\n\t\t});\n\t\t$.reset(div_5);\n\t\t$.reset(div_2);\n\t\tvar node_16 = $.sibling(div_2, 2);\n\t\tvar consequent_4 = ($$anchor) => {\n\t\t\tNowIndicator($$anchor, {});\n\t\t};\n\t\t$.if(node_16, ($$render) => {\n\t\t\tif ($.get(nowIndicator) && !$.get(monthView)) $$render(consequent_4);\n\t\t});\n\t\t$.reset(section);\n\t\t$.bind_this(section, ($$value) => mainState.mainEl = $$value, () => mainState?.mainEl);\n\t\t$.attach(section, () => resizeObserver(reposition));\n\t\t$.template_effect(($0) => {\n\t\t\t$.set_class(section, 1, $.get(theme).main);\n\t\t\tstyles = $.set_style(section, \"\", styles, $0);\n\t\t\t$.set_class(header, 1, $.get(theme).header);\n\t\t\t$.set_class(aside, 1, $.get(theme).sidebar);\n\t\t\t$.set_class(div, 1, $.get(theme).grid);\n\t\t\t$.set_class(div_2, 1, $.get(theme).body);\n\t\t\t$.set_class(aside_1, 1, $.get(theme).sidebar);\n\t\t\t$.set_class(div_4, 1, $.get(theme).grid);\n\t\t\t$.set_class(div_5, 1, $.get(theme).events);\n\t\t}, [() => ({\n\t\t\t\"--ec-grid-cols\": length($.get(grid)[0]),\n\t\t\t\"--ec-grid-rows\": `${length($.get(grid)) > 1 ? `repeat(${length($.get(grid)) - 1}, auto)` : \"\"} 1fr`,\n\t\t\t\"--ec-col-width\": $.get(columnWidth) ?? \"minmax(4em, 1fr)\",\n\t\t\t\"--ec-slot-label-periodicity\": $.get(slotLabelPeriodicity),\n\t\t\t\"--ec-slot-height\": `${$.get(slotHeight) ?? \"\"}px`,\n\t\t\t\"--ec-slot-width\": `${$.get(slotWidth) ?? \"\"}px`,\n\t\t\t\"--ec-header-height\": `${$.get(headerHeight) ?? \"\"}px`,\n\t\t\t\"--ec-sidebar-width\": `${$.get(sidebarWidth) ?? \"\"}px`\n\t\t})]);\n\t\t$.bind_element_size(aside, \"offsetWidth\", ($$value) => viewState.sidebarWidth = $$value);\n\t\t$.bind_element_size(header, \"offsetHeight\", ($$value) => $.set(headerHeight, $$value));\n\t\t$.append($$anchor, section);\n\t};\n\tvar d_2 = $.derived(() => !empty($.get(grid)) && !empty($.get(grid)[0]));\n\t$.if(node, ($$render) => {\n\t\tif ($.get(d_2)) $$render(consequent_5);\n\t});\n\t$.append($$anchor, fragment);\n\t$.pop();\n}\n//#endregion\n//#region packages/core/src/plugins/resource-timeline/index.js\nvar resource_timeline_default = {\n\tcreateOptions(options) {\n\t\tcreateTRROptions(options);\n\t\tcreateRROptions(options);\n\t\tcreateDROptions(options);\n\t\tassign(options, {\n\t\t\tmonthHeaderFormat: { month: \"long\" },\n\t\t\tresourceExpand: void 0,\n\t\t\tslotWidth: 32,\n\t\t\tview: \"resourceTimelineWeek\"\n\t\t});\n\t\tassign(options.buttonText, {\n\t\t\texpand: \"Expand\",\n\t\t\tcollapse: \"Collapse\",\n\t\t\tresourceTimelineDay: \"day\",\n\t\t\tresourceTimelineWeek: \"week\",\n\t\t\tresourceTimelineMonth: \"month\",\n\t\t\tresourceTimelineYear: \"year\"\n\t\t});\n\t\tassign(options.icons, {\n\t\t\tcollapse: { html: \"&minus;\" },\n\t\t\texpand: { html: \"&plus;\" }\n\t\t});\n\t\tassign(options.theme, {\n\t\t\texpander: \"ec-expander\",\n\t\t\trowHead: \"ec-row-head\",\n\t\t\tslots: \"ec-slots\"\n\t\t});\n\t\tassign(options.views, {\n\t\t\tresourceTimelineDay: {\n\t\t\t\tbuttonText: btnTextDay,\n\t\t\t\tcomponent: initViewComponent$1,\n\t\t\t\tdisplayEventEnd: false,\n\t\t\t\tdayHeaderFormat: { weekday: \"long\" },\n\t\t\t\tduration: { days: 1 },\n\t\t\t\ttheme: themeView(\"ec-resource ec-timeline ec-day-view\"),\n\t\t\t\ttitleFormat: {\n\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tresourceTimelineWeek: {\n\t\t\t\tbuttonText: btnTextWeek,\n\t\t\t\tcomponent: initViewComponent$1,\n\t\t\t\tdisplayEventEnd: false,\n\t\t\t\tduration: { weeks: 1 },\n\t\t\t\ttheme: themeView(\"ec-resource ec-timeline ec-week-view\")\n\t\t\t},\n\t\t\tresourceTimelineMonth: {\n\t\t\t\tbuttonText: btnTextMonth,\n\t\t\t\tcomponent: initMonthViewComponent,\n\t\t\t\tdisplayEventEnd: false,\n\t\t\t\tdayHeaderFormat: {\n\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\tday: \"numeric\"\n\t\t\t\t},\n\t\t\t\tduration: { months: 1 },\n\t\t\t\tslotDuration: { days: 1 },\n\t\t\t\ttheme: themeView(\"ec-resource ec-timeline ec-month-view\"),\n\t\t\t\ttitleFormat: {\n\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\tmonth: \"long\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tresourceTimelineYear: {\n\t\t\t\tbuttonText: btnTextYear,\n\t\t\t\tcomponent: initMonthViewComponent,\n\t\t\t\tdisplayEventEnd: false,\n\t\t\t\tdayHeaderFormat: {\n\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\tday: \"numeric\"\n\t\t\t\t},\n\t\t\t\tduration: { years: 1 },\n\t\t\t\tslotDuration: { days: 1 },\n\t\t\t\ttheme: themeView(\"ec-resource ec-timeline ec-year-view\"),\n\t\t\t\ttitleFormat: { year: \"numeric\" }\n\t\t\t}\n\t\t});\n\t},\n\tcreateParsers(parsers) {\n\t\tcreateTRRParsers(parsers);\n\t}\n};\nfunction initViewComponent$1(mainState) {\n\tsetExtensions(mainState);\n\treturn _initViewComponent(mainState);\n}\nfunction initMonthViewComponent(mainState) {\n\treturn _initViewComponent(mainState, [\"month\"]);\n}\nfunction _initViewComponent(mainState, extraFeatures = []) {\n\tmainState.features = [\"timeline\", ...extraFeatures];\n\tmainState.extensions.viewResources = (resources) => resources.filter((resource) => !getPayload(resource).hidden);\n\treturn View;\n}\n//#endregion\n//#region packages/core/src/plugins/time-grid/index.js\nvar time_grid_default = {\n\tcreateOptions(options) {\n\t\tcreateTRROptions(options);\n\t\tcreateTROptions(options);\n\t\tassign(options.buttonText, {\n\t\t\ttimeGridDay: \"day\",\n\t\t\ttimeGridWeek: \"week\"\n\t\t});\n\t\tassign(options, { view: \"timeGridWeek\" });\n\t\tassign(options.views, {\n\t\t\ttimeGridDay: {\n\t\t\t\tbuttonText: btnTextDay,\n\t\t\t\tcomponent: initViewComponent,\n\t\t\t\tdayHeaderFormat: { weekday: \"long\" },\n\t\t\t\tduration: { days: 1 },\n\t\t\t\ttheme: themeView(\"ec-time-grid ec-day-view\"),\n\t\t\t\ttitleFormat: {\n\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttimeGridWeek: {\n\t\t\t\tbuttonText: btnTextWeek,\n\t\t\t\tcomponent: initViewComponent,\n\t\t\t\tduration: { weeks: 1 },\n\t\t\t\ttheme: themeView(\"ec-time-grid ec-week-view\")\n\t\t\t}\n\t\t});\n\t},\n\tcreateParsers(parsers) {\n\t\tcreateTRRParsers(parsers);\n\t}\n};\nfunction initViewComponent(mainState) {\n\tsetExtensions(mainState);\n\treturn View$1;\n}\n//#endregion\n//#region packages/core/src/index.es.js\nfunction createCalendar(target, plugins, options) {\n\treturn mount(Calendar, {\n\t\ttarget,\n\t\tprops: {\n\t\t\tplugins,\n\t\t\toptions\n\t\t}\n\t});\n}\nfunction destroyCalendar(calendar) {\n\treturn unmount(calendar);\n}\n//#endregion\nexport { day_grid_default as DayGrid, interaction_default as Interaction, list_default as List, resource_time_grid_default as ResourceTimeGrid, resource_timeline_default as ResourceTimeline, time_grid_default as TimeGrid, createCalendar, destroyCalendar };\n","import { DEV } from 'esm-env';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { REPLACE, SvelteURLSearchParams } from './url-search-params.js';\n\n/** @type {SvelteURL | null} */\nlet current_url = null;\n\nexport function get_current_url() {\n\t// ideally we'd just export `current_url` directly, but it seems Vitest doesn't respect live bindings\n\treturn current_url;\n}\n\n/**\n * A reactive version of the built-in [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) object.\n * Reading properties of the URL (such as `url.href` or `url.pathname`) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the URL changes.\n *\n * The `searchParams` property is an instance of [SvelteURLSearchParams](https://svelte.dev/docs/svelte/svelte-reactivity#SvelteURLSearchParams).\n *\n * [Example](https://svelte.dev/playground/5a694758901b448c83dc40dc31c71f2a):\n *\n * ```svelte\n * <script>\n * \timport { SvelteURL } from 'svelte/reactivity';\n *\n * \tconst url = new SvelteURL('https://example.com/path');\n * </script>\n *\n * <!-- changes to these... -->\n * <input bind:value={url.protocol} />\n * <input bind:value={url.hostname} />\n * <input bind:value={url.pathname} />\n *\n * <hr />\n *\n * <!-- will update `href` and vice versa -->\n * <input bind:value={url.href} size=\"65\" />\n * ```\n */\nexport class SvelteURL extends URL {\n\t#protocol = state(super.protocol);\n\t#username = state(super.username);\n\t#password = state(super.password);\n\t#hostname = state(super.hostname);\n\t#port = state(super.port);\n\t#pathname = state(super.pathname);\n\t#hash = state(super.hash);\n\t#search = state(super.search);\n\t#searchParams;\n\n\t/**\n\t * @param {string | URL} url\n\t * @param {string | URL} [base]\n\t */\n\tconstructor(url, base) {\n\t\turl = new URL(url, base);\n\t\tsuper(url);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#protocol, 'SvelteURL.protocol');\n\t\t\ttag(this.#username, 'SvelteURL.username');\n\t\t\ttag(this.#password, 'SvelteURL.password');\n\t\t\ttag(this.#hostname, 'SvelteURL.hostname');\n\t\t\ttag(this.#port, 'SvelteURL.port');\n\t\t\ttag(this.#pathname, 'SvelteURL.pathname');\n\t\t\ttag(this.#hash, 'SvelteURL.hash');\n\t\t\ttag(this.#search, 'SvelteURL.search');\n\t\t}\n\n\t\tcurrent_url = this;\n\t\tthis.#searchParams = new SvelteURLSearchParams(url.searchParams);\n\t\tcurrent_url = null;\n\t}\n\n\tget hash() {\n\t\treturn get(this.#hash);\n\t}\n\n\tset hash(value) {\n\t\tsuper.hash = value;\n\t\tset(this.#hash, super.hash);\n\t}\n\n\tget host() {\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.host;\n\t}\n\n\tset host(value) {\n\t\tsuper.host = value;\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t}\n\n\tget hostname() {\n\t\treturn get(this.#hostname);\n\t}\n\n\tset hostname(value) {\n\t\tsuper.hostname = value;\n\t\tset(this.#hostname, super.hostname);\n\t}\n\n\tget href() {\n\t\tget(this.#protocol);\n\t\tget(this.#username);\n\t\tget(this.#password);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\tget(this.#pathname);\n\t\tget(this.#hash);\n\t\tget(this.#search);\n\t\treturn super.href;\n\t}\n\n\tset href(value) {\n\t\tsuper.href = value;\n\t\tset(this.#protocol, super.protocol);\n\t\tset(this.#username, super.username);\n\t\tset(this.#password, super.password);\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t\tset(this.#pathname, super.pathname);\n\t\tset(this.#hash, super.hash);\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget password() {\n\t\treturn get(this.#password);\n\t}\n\n\tset password(value) {\n\t\tsuper.password = value;\n\t\tset(this.#password, super.password);\n\t}\n\n\tget pathname() {\n\t\treturn get(this.#pathname);\n\t}\n\n\tset pathname(value) {\n\t\tsuper.pathname = value;\n\t\tset(this.#pathname, super.pathname);\n\t}\n\n\tget port() {\n\t\treturn get(this.#port);\n\t}\n\n\tset port(value) {\n\t\tsuper.port = value;\n\t\tset(this.#port, super.port);\n\t}\n\n\tget protocol() {\n\t\treturn get(this.#protocol);\n\t}\n\n\tset protocol(value) {\n\t\tsuper.protocol = value;\n\t\tset(this.#protocol, super.protocol);\n\t}\n\n\tget search() {\n\t\treturn get(this.#search);\n\t}\n\n\tset search(value) {\n\t\tsuper.search = value;\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget username() {\n\t\treturn get(this.#username);\n\t}\n\n\tset username(value) {\n\t\tsuper.username = value;\n\t\tset(this.#username, super.username);\n\t}\n\n\tget origin() {\n\t\tget(this.#protocol);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.origin;\n\t}\n\n\tget searchParams() {\n\t\treturn this.#searchParams;\n\t}\n\n\ttoString() {\n\t\treturn this.href;\n\t}\n\n\ttoJSON() {\n\t\treturn this.href;\n\t}\n}\n","import { on } from '../events/index.js';\nimport { ReactiveValue } from './reactive-value.js';\n\nconst parenthesis_regex = /\\(.+\\)/;\n\n// these keywords are valid media queries but they need to be without parenthesis\n//\n// eg: new MediaQuery('screen')\n//\n// however because of the auto-parenthesis logic in the constructor since there's no parenthesis\n// in the media query they'll be surrounded by parenthesis\n//\n// however we can check if the media query is only composed of these keywords\n// and skip the auto-parenthesis\n//\n// https://github.com/sveltejs/svelte/issues/15930\nconst non_parenthesized_keywords = new Set(['all', 'print', 'screen', 'and', 'or', 'not', 'only']);\n\n/**\n * Creates a media query and provides a `current` property that reflects whether or not it matches.\n *\n * Use it carefully — during server-side rendering, there is no way to know what the correct value should be, potentially causing content to change upon hydration.\n * If you can use the media query in CSS to achieve the same effect, do that.\n *\n * ```svelte\n * <script>\n * \timport { MediaQuery } from 'svelte/reactivity';\n *\n * \tconst large = new MediaQuery('min-width: 800px');\n * </script>\n *\n * <h1>{large.current ? 'large screen' : 'small screen'}</h1>\n * ```\n * @extends {ReactiveValue<boolean>}\n * @since 5.7.0\n */\nexport class MediaQuery extends ReactiveValue {\n\t/**\n\t * @param {string} query A media query string\n\t * @param {boolean} [fallback] Fallback value for the server\n\t */\n\tconstructor(query, fallback) {\n\t\tlet final_query =\n\t\t\tparenthesis_regex.test(query) ||\n\t\t\t// we need to use `some` here because technically this `window.matchMedia('random,screen')` still returns true\n\t\t\tquery.split(/[\\s,]+/).some((keyword) => non_parenthesized_keywords.has(keyword.trim()))\n\t\t\t\t? query\n\t\t\t\t: `(${query})`;\n\t\tconst q = window.matchMedia(final_query);\n\t\tsuper(\n\t\t\t() => q.matches,\n\t\t\t(update) => on(q, 'change', update)\n\t\t);\n\t}\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\nimport { FORM_RESET_HANDLER } from '../../constants.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t/** @type {any} */ (e)[FORM_RESET_HANDLER]?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n","function ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\n\nfunction _wrapRegExp() {\n  _wrapRegExp = function (re, groups) {\n    return new BabelRegExp(re, void 0, groups);\n  };\n\n  var _super = RegExp.prototype,\n      _groups = new WeakMap();\n\n  function BabelRegExp(re, flags, groups) {\n    var _this = new RegExp(re, flags);\n\n    return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype);\n  }\n\n  function buildGroups(result, re) {\n    var g = _groups.get(re);\n\n    return Object.keys(g).reduce(function (groups, name) {\n      return groups[name] = result[g[name]], groups;\n    }, Object.create(null));\n  }\n\n  return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) {\n    var result = _super.exec.call(this, str);\n\n    return result && (result.groups = buildGroups(result, this)), result;\n  }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n    if (\"string\" == typeof substitution) {\n      var groups = _groups.get(this);\n\n      return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n        return \"$\" + groups[name];\n      }));\n    }\n\n    if (\"function\" == typeof substitution) {\n      var _this = this;\n\n      return _super[Symbol.replace].call(this, str, function () {\n        var args = arguments;\n        return \"object\" != typeof args[args.length - 1] && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args);\n      });\n    }\n\n    return _super[Symbol.replace].call(this, str, substitution);\n  }, _wrapRegExp.apply(this, arguments);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperty(subClass, \"prototype\", {\n    writable: false\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar noop = function noop() {};\n\nvar _WINDOW = {};\nvar _DOCUMENT = {};\nvar _MUTATION_OBSERVER = null;\nvar _PERFORMANCE = {\n  mark: noop,\n  measure: noop\n};\n\ntry {\n  if (typeof window !== 'undefined') _WINDOW = window;\n  if (typeof document !== 'undefined') _DOCUMENT = document;\n  if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n  if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\n\nvar _ref = _WINDOW.navigator || {},\n    _ref$userAgent = _ref.userAgent,\n    userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\nvar WINDOW = _WINDOW;\nvar DOCUMENT = _DOCUMENT;\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\nvar PERFORMANCE = _PERFORMANCE;\nvar IS_BROWSER = !!WINDOW.document;\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar _familyProxy, _familyProxy2, _familyProxy3, _familyProxy4, _familyProxy5;\n\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nvar UNITS_IN_GRID = 16;\nvar DEFAULT_CSS_PREFIX = 'fa';\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nvar DATA_PREFIX = 'data-prefix';\nvar DATA_ICON = 'data-icon';\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nvar MUTATION_APPROACH_ASYNC = 'async';\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nvar PRODUCTION = function () {\n  try {\n    return process.env.NODE_ENV === 'production';\n  } catch (e) {\n    return false;\n  }\n}();\nvar FAMILY_CLASSIC = 'classic';\nvar FAMILY_SHARP = 'sharp';\nvar FAMILIES = [FAMILY_CLASSIC, FAMILY_SHARP];\n\nfunction familyProxy(obj) {\n  // Defaults to the classic family if family is not available\n  return new Proxy(obj, {\n    get: function get(target, prop) {\n      return prop in target ? target[prop] : target[FAMILY_CLASSIC];\n    }\n  });\n}\nvar PREFIX_TO_STYLE = familyProxy((_familyProxy = {}, _defineProperty(_familyProxy, FAMILY_CLASSIC, {\n  'fa': 'solid',\n  'fas': 'solid',\n  'fa-solid': 'solid',\n  'far': 'regular',\n  'fa-regular': 'regular',\n  'fal': 'light',\n  'fa-light': 'light',\n  'fat': 'thin',\n  'fa-thin': 'thin',\n  'fad': 'duotone',\n  'fa-duotone': 'duotone',\n  'fab': 'brands',\n  'fa-brands': 'brands',\n  'fak': 'kit',\n  'fa-kit': 'kit'\n}), _defineProperty(_familyProxy, FAMILY_SHARP, {\n  'fa': 'solid',\n  'fass': 'solid',\n  'fa-solid': 'solid',\n  'fasr': 'regular',\n  'fa-regular': 'regular',\n  'fasl': 'light',\n  'fa-light': 'light'\n}), _familyProxy));\nvar STYLE_TO_PREFIX = familyProxy((_familyProxy2 = {}, _defineProperty(_familyProxy2, FAMILY_CLASSIC, {\n  'solid': 'fas',\n  'regular': 'far',\n  'light': 'fal',\n  'thin': 'fat',\n  'duotone': 'fad',\n  'brands': 'fab',\n  'kit': 'fak'\n}), _defineProperty(_familyProxy2, FAMILY_SHARP, {\n  'solid': 'fass',\n  'regular': 'fasr',\n  'light': 'fasl'\n}), _familyProxy2));\nvar PREFIX_TO_LONG_STYLE = familyProxy((_familyProxy3 = {}, _defineProperty(_familyProxy3, FAMILY_CLASSIC, {\n  'fab': 'fa-brands',\n  'fad': 'fa-duotone',\n  'fak': 'fa-kit',\n  'fal': 'fa-light',\n  'far': 'fa-regular',\n  'fas': 'fa-solid',\n  'fat': 'fa-thin'\n}), _defineProperty(_familyProxy3, FAMILY_SHARP, {\n  'fass': 'fa-solid',\n  'fasr': 'fa-regular',\n  'fasl': 'fa-light'\n}), _familyProxy3));\nvar LONG_STYLE_TO_PREFIX = familyProxy((_familyProxy4 = {}, _defineProperty(_familyProxy4, FAMILY_CLASSIC, {\n  'fa-brands': 'fab',\n  'fa-duotone': 'fad',\n  'fa-kit': 'fak',\n  'fa-light': 'fal',\n  'fa-regular': 'far',\n  'fa-solid': 'fas',\n  'fa-thin': 'fat'\n}), _defineProperty(_familyProxy4, FAMILY_SHARP, {\n  'fa-solid': 'fass',\n  'fa-regular': 'fasr',\n  'fa-light': 'fasl'\n}), _familyProxy4));\nvar ICON_SELECTION_SYNTAX_PATTERN = /fa(s|r|l|t|d|b|k|ss|sr|sl)?[\\-\\ ]/; // eslint-disable-line no-useless-escape\n\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nvar FONT_FAMILY_PATTERN = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i;\nvar FONT_WEIGHT_TO_PREFIX = familyProxy((_familyProxy5 = {}, _defineProperty(_familyProxy5, FAMILY_CLASSIC, {\n  '900': 'fas',\n  '400': 'far',\n  'normal': 'far',\n  '300': 'fal',\n  '100': 'fat'\n}), _defineProperty(_familyProxy5, FAMILY_SHARP, {\n  '900': 'fass',\n  '400': 'fasr',\n  '300': 'fasl'\n}), _familyProxy5));\nvar oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nvar DUOTONE_CLASSES = {\n  GROUP: 'duotone-group',\n  SWAP_OPACITY: 'swap-opacity',\n  PRIMARY: 'primary',\n  SECONDARY: 'secondary'\n};\nvar prefixes = new Set();\nObject.keys(STYLE_TO_PREFIX[FAMILY_CLASSIC]).map(prefixes.add.bind(prefixes));\nObject.keys(STYLE_TO_PREFIX[FAMILY_SHARP]).map(prefixes.add.bind(prefixes));\nvar RESERVED_CLASSES = [].concat(FAMILIES, _toConsumableArray(prefixes), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n  return \"\".concat(n, \"x\");\n})).concat(oneToTwenty.map(function (n) {\n  return \"w-\".concat(n);\n}));\n\nvar initial = WINDOW.FontAwesomeConfig || {};\n\nfunction getAttrConfig(attr) {\n  var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n  if (element) {\n    return element.getAttribute(attr);\n  }\n}\n\nfunction coerce(val) {\n  // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n  // We'll assume that this is an indication that it should be toggled to true\n  if (val === '') return true;\n  if (val === 'false') return false;\n  if (val === 'true') return true;\n  return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n  var attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n  attrs.forEach(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        attr = _ref2[0],\n        key = _ref2[1];\n\n    var val = coerce(getAttrConfig(attr));\n\n    if (val !== undefined && val !== null) {\n      initial[key] = val;\n    }\n  });\n}\n\nvar _default = {\n  styleDefault: 'solid',\n  familyDefault: 'classic',\n  cssPrefix: DEFAULT_CSS_PREFIX,\n  replacementClass: DEFAULT_REPLACEMENT_CLASS,\n  autoReplaceSvg: true,\n  autoAddCss: true,\n  autoA11y: true,\n  searchPseudoElements: false,\n  observeMutations: true,\n  mutateApproach: 'async',\n  keepOriginalSource: true,\n  measurePerformance: false,\n  showMissingIcons: true\n}; // familyPrefix is deprecated but we must still support it if present\n\nif (initial.familyPrefix) {\n  initial.cssPrefix = initial.familyPrefix;\n}\n\nvar _config = _objectSpread2(_objectSpread2({}, _default), initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nvar config = {};\nObject.keys(_default).forEach(function (key) {\n  Object.defineProperty(config, key, {\n    enumerable: true,\n    set: function set(val) {\n      _config[key] = val;\n\n      _onChangeCb.forEach(function (cb) {\n        return cb(config);\n      });\n    },\n    get: function get() {\n      return _config[key];\n    }\n  });\n}); // familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\n\nObject.defineProperty(config, 'familyPrefix', {\n  enumerable: true,\n  set: function set(val) {\n    _config.cssPrefix = val;\n\n    _onChangeCb.forEach(function (cb) {\n      return cb(config);\n    });\n  },\n  get: function get() {\n    return _config.cssPrefix;\n  }\n});\nWINDOW.FontAwesomeConfig = config;\nvar _onChangeCb = [];\nfunction onChange(cb) {\n  _onChangeCb.push(cb);\n\n  return function () {\n    _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n  };\n}\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n  size: 16,\n  x: 0,\n  y: 0,\n  rotate: 0,\n  flipX: false,\n  flipY: false\n};\nfunction insertCss(css) {\n  if (!css || !IS_DOM) {\n    return;\n  }\n\n  var style = DOCUMENT.createElement('style');\n  style.setAttribute('type', 'text/css');\n  style.innerHTML = css;\n  var headChildren = DOCUMENT.head.childNodes;\n  var beforeChild = null;\n\n  for (var i = headChildren.length - 1; i > -1; i--) {\n    var child = headChildren[i];\n    var tagName = (child.tagName || '').toUpperCase();\n\n    if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n      beforeChild = child;\n    }\n  }\n\n  DOCUMENT.head.insertBefore(style, beforeChild);\n  return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n  var size = 12;\n  var id = '';\n\n  while (size-- > 0) {\n    id += idPool[Math.random() * 62 | 0];\n  }\n\n  return id;\n}\nfunction toArray(obj) {\n  var array = [];\n\n  for (var i = (obj || []).length >>> 0; i--;) {\n    array[i] = obj[i];\n  }\n\n  return array;\n}\nfunction classArray(node) {\n  if (node.classList) {\n    return toArray(node.classList);\n  } else {\n    return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n      return i;\n    });\n  }\n}\nfunction htmlEscape(str) {\n  return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nfunction joinAttributes(attributes) {\n  return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n    return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n  }, '').trim();\n}\nfunction joinStyles(styles) {\n  return Object.keys(styles || {}).reduce(function (acc, styleName) {\n    return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n  }, '');\n}\nfunction transformIsMeaningful(transform) {\n  return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n  var transform = _ref.transform,\n      containerWidth = _ref.containerWidth,\n      iconWidth = _ref.iconWidth;\n  var outer = {\n    transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n  };\n  var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n  var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n  var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n  var inner = {\n    transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n  };\n  var path = {\n    transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n  };\n  return {\n    outer: outer,\n    inner: inner,\n    path: path\n  };\n}\nfunction transformForCss(_ref2) {\n  var transform = _ref2.transform,\n      _ref2$width = _ref2.width,\n      width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n      _ref2$height = _ref2.height,\n      height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n      _ref2$startCentered = _ref2.startCentered,\n      startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n  var val = '';\n\n  if (startCentered && IS_IE) {\n    val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n  } else if (startCentered) {\n    val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n  } else {\n    val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n  }\n\n  val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n  val += \"rotate(\".concat(transform.rotate, \"deg) \");\n  return val;\n}\n\nvar baseStyles = \":root, :host {\\n  --fa-font-solid: normal 900 1em/1 \\\"Font Awesome 6 Solid\\\";\\n  --fa-font-regular: normal 400 1em/1 \\\"Font Awesome 6 Regular\\\";\\n  --fa-font-light: normal 300 1em/1 \\\"Font Awesome 6 Light\\\";\\n  --fa-font-thin: normal 100 1em/1 \\\"Font Awesome 6 Thin\\\";\\n  --fa-font-duotone: normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-sharp-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-brands: normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";\\n}\\n\\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\\n  overflow: visible;\\n  box-sizing: content-box;\\n}\\n\\n.svg-inline--fa {\\n  display: var(--fa-display, inline-block);\\n  height: 1em;\\n  overflow: visible;\\n  vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-2xs {\\n  vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n  vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n  vertical-align: -0.0714285705em;\\n}\\n.svg-inline--fa.fa-lg {\\n  vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n  vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n  vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n  margin-right: var(--fa-pull-margin, 0.3em);\\n  width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n  margin-left: var(--fa-pull-margin, 0.3em);\\n  width: auto;\\n}\\n.svg-inline--fa.fa-li {\\n  width: var(--fa-li-width, 2em);\\n  top: 0.25em;\\n}\\n.svg-inline--fa.fa-fw {\\n  width: var(--fa-fw-width, 1.25em);\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n  display: inline-block;\\n  position: absolute;\\n  text-align: center;\\n}\\n\\n.fa-layers {\\n  display: inline-block;\\n  height: 1em;\\n  position: relative;\\n  text-align: center;\\n  vertical-align: -0.125em;\\n  width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n  -webkit-transform-origin: center center;\\n          transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n  left: 50%;\\n  top: 50%;\\n  -webkit-transform: translate(-50%, -50%);\\n          transform: translate(-50%, -50%);\\n  -webkit-transform-origin: center center;\\n          transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n  background-color: var(--fa-counter-background-color, #ff253a);\\n  border-radius: var(--fa-counter-border-radius, 1em);\\n  box-sizing: border-box;\\n  color: var(--fa-inverse, #fff);\\n  line-height: var(--fa-counter-line-height, 1);\\n  max-width: var(--fa-counter-max-width, 5em);\\n  min-width: var(--fa-counter-min-width, 1.5em);\\n  overflow: hidden;\\n  padding: var(--fa-counter-padding, 0.25em 0.5em);\\n  right: var(--fa-right, 0);\\n  text-overflow: ellipsis;\\n  top: var(--fa-top, 0);\\n  -webkit-transform: scale(var(--fa-counter-scale, 0.25));\\n          transform: scale(var(--fa-counter-scale, 0.25));\\n  -webkit-transform-origin: top right;\\n          transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n  bottom: var(--fa-bottom, 0);\\n  right: var(--fa-right, 0);\\n  top: auto;\\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n          transform: scale(var(--fa-layers-scale, 0.25));\\n  -webkit-transform-origin: bottom right;\\n          transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n  bottom: var(--fa-bottom, 0);\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: auto;\\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n          transform: scale(var(--fa-layers-scale, 0.25));\\n  -webkit-transform-origin: bottom left;\\n          transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n  top: var(--fa-top, 0);\\n  right: var(--fa-right, 0);\\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n          transform: scale(var(--fa-layers-scale, 0.25));\\n  -webkit-transform-origin: top right;\\n          transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: var(--fa-top, 0);\\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n          transform: scale(var(--fa-layers-scale, 0.25));\\n  -webkit-transform-origin: top left;\\n          transform-origin: top left;\\n}\\n\\n.fa-1x {\\n  font-size: 1em;\\n}\\n\\n.fa-2x {\\n  font-size: 2em;\\n}\\n\\n.fa-3x {\\n  font-size: 3em;\\n}\\n\\n.fa-4x {\\n  font-size: 4em;\\n}\\n\\n.fa-5x {\\n  font-size: 5em;\\n}\\n\\n.fa-6x {\\n  font-size: 6em;\\n}\\n\\n.fa-7x {\\n  font-size: 7em;\\n}\\n\\n.fa-8x {\\n  font-size: 8em;\\n}\\n\\n.fa-9x {\\n  font-size: 9em;\\n}\\n\\n.fa-10x {\\n  font-size: 10em;\\n}\\n\\n.fa-2xs {\\n  font-size: 0.625em;\\n  line-height: 0.1em;\\n  vertical-align: 0.225em;\\n}\\n\\n.fa-xs {\\n  font-size: 0.75em;\\n  line-height: 0.0833333337em;\\n  vertical-align: 0.125em;\\n}\\n\\n.fa-sm {\\n  font-size: 0.875em;\\n  line-height: 0.0714285718em;\\n  vertical-align: 0.0535714295em;\\n}\\n\\n.fa-lg {\\n  font-size: 1.25em;\\n  line-height: 0.05em;\\n  vertical-align: -0.075em;\\n}\\n\\n.fa-xl {\\n  font-size: 1.5em;\\n  line-height: 0.0416666682em;\\n  vertical-align: -0.125em;\\n}\\n\\n.fa-2xl {\\n  font-size: 2em;\\n  line-height: 0.03125em;\\n  vertical-align: -0.1875em;\\n}\\n\\n.fa-fw {\\n  text-align: center;\\n  width: 1.25em;\\n}\\n\\n.fa-ul {\\n  list-style-type: none;\\n  margin-left: var(--fa-li-margin, 2.5em);\\n  padding-left: 0;\\n}\\n.fa-ul > li {\\n  position: relative;\\n}\\n\\n.fa-li {\\n  left: calc(var(--fa-li-width, 2em) * -1);\\n  position: absolute;\\n  text-align: center;\\n  width: var(--fa-li-width, 2em);\\n  line-height: inherit;\\n}\\n\\n.fa-border {\\n  border-color: var(--fa-border-color, #eee);\\n  border-radius: var(--fa-border-radius, 0.1em);\\n  border-style: var(--fa-border-style, solid);\\n  border-width: var(--fa-border-width, 0.08em);\\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\\n}\\n\\n.fa-pull-left {\\n  float: left;\\n  margin-right: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right {\\n  float: right;\\n  margin-left: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n  -webkit-animation-name: fa-beat;\\n          animation-name: fa-beat;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n          animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n  -webkit-animation-name: fa-bounce;\\n          animation-name: fa-bounce;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n  -webkit-animation-name: fa-fade;\\n          animation-name: fa-fade;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-beat-fade {\\n  -webkit-animation-name: fa-beat-fade;\\n          animation-name: fa-beat-fade;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-flip {\\n  -webkit-animation-name: fa-flip;\\n          animation-name: fa-flip;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n          animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n  -webkit-animation-name: fa-shake;\\n          animation-name: fa-shake;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\\n          animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin {\\n  -webkit-animation-name: fa-spin;\\n          animation-name: fa-spin;\\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n          animation-delay: var(--fa-animation-delay, 0s);\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 2s);\\n          animation-duration: var(--fa-animation-duration, 2s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\\n          animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n  --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n  -webkit-animation-name: fa-spin;\\n          animation-name: fa-spin;\\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\\n          animation-direction: var(--fa-animation-direction, normal);\\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n          animation-duration: var(--fa-animation-duration, 1s);\\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\\n          animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n  .fa-beat,\\n.fa-bounce,\\n.fa-fade,\\n.fa-beat-fade,\\n.fa-flip,\\n.fa-pulse,\\n.fa-shake,\\n.fa-spin,\\n.fa-spin-pulse {\\n    -webkit-animation-delay: -1ms;\\n            animation-delay: -1ms;\\n    -webkit-animation-duration: 1ms;\\n            animation-duration: 1ms;\\n    -webkit-animation-iteration-count: 1;\\n            animation-iteration-count: 1;\\n    -webkit-transition-delay: 0s;\\n            transition-delay: 0s;\\n    -webkit-transition-duration: 0s;\\n            transition-duration: 0s;\\n  }\\n}\\n@-webkit-keyframes fa-beat {\\n  0%, 90% {\\n    -webkit-transform: scale(1);\\n            transform: scale(1);\\n  }\\n  45% {\\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\\n            transform: scale(var(--fa-beat-scale, 1.25));\\n  }\\n}\\n@keyframes fa-beat {\\n  0%, 90% {\\n    -webkit-transform: scale(1);\\n            transform: scale(1);\\n  }\\n  45% {\\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\\n            transform: scale(var(--fa-beat-scale, 1.25));\\n  }\\n}\\n@-webkit-keyframes fa-bounce {\\n  0% {\\n    -webkit-transform: scale(1, 1) translateY(0);\\n            transform: scale(1, 1) translateY(0);\\n  }\\n  10% {\\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n  }\\n  30% {\\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n  }\\n  50% {\\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n  }\\n  57% {\\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n  }\\n  64% {\\n    -webkit-transform: scale(1, 1) translateY(0);\\n            transform: scale(1, 1) translateY(0);\\n  }\\n  100% {\\n    -webkit-transform: scale(1, 1) translateY(0);\\n            transform: scale(1, 1) translateY(0);\\n  }\\n}\\n@keyframes fa-bounce {\\n  0% {\\n    -webkit-transform: scale(1, 1) translateY(0);\\n            transform: scale(1, 1) translateY(0);\\n  }\\n  10% {\\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n  }\\n  30% {\\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n  }\\n  50% {\\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n  }\\n  57% {\\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n  }\\n  64% {\\n    -webkit-transform: scale(1, 1) translateY(0);\\n            transform: scale(1, 1) translateY(0);\\n  }\\n  100% {\\n    -webkit-transform: scale(1, 1) translateY(0);\\n            transform: scale(1, 1) translateY(0);\\n  }\\n}\\n@-webkit-keyframes fa-fade {\\n  50% {\\n    opacity: var(--fa-fade-opacity, 0.4);\\n  }\\n}\\n@keyframes fa-fade {\\n  50% {\\n    opacity: var(--fa-fade-opacity, 0.4);\\n  }\\n}\\n@-webkit-keyframes fa-beat-fade {\\n  0%, 100% {\\n    opacity: var(--fa-beat-fade-opacity, 0.4);\\n    -webkit-transform: scale(1);\\n            transform: scale(1);\\n  }\\n  50% {\\n    opacity: 1;\\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\\n            transform: scale(var(--fa-beat-fade-scale, 1.125));\\n  }\\n}\\n@keyframes fa-beat-fade {\\n  0%, 100% {\\n    opacity: var(--fa-beat-fade-opacity, 0.4);\\n    -webkit-transform: scale(1);\\n            transform: scale(1);\\n  }\\n  50% {\\n    opacity: 1;\\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\\n            transform: scale(var(--fa-beat-fade-scale, 1.125));\\n  }\\n}\\n@-webkit-keyframes fa-flip {\\n  50% {\\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n  }\\n}\\n@keyframes fa-flip {\\n  50% {\\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n  }\\n}\\n@-webkit-keyframes fa-shake {\\n  0% {\\n    -webkit-transform: rotate(-15deg);\\n            transform: rotate(-15deg);\\n  }\\n  4% {\\n    -webkit-transform: rotate(15deg);\\n            transform: rotate(15deg);\\n  }\\n  8%, 24% {\\n    -webkit-transform: rotate(-18deg);\\n            transform: rotate(-18deg);\\n  }\\n  12%, 28% {\\n    -webkit-transform: rotate(18deg);\\n            transform: rotate(18deg);\\n  }\\n  16% {\\n    -webkit-transform: rotate(-22deg);\\n            transform: rotate(-22deg);\\n  }\\n  20% {\\n    -webkit-transform: rotate(22deg);\\n            transform: rotate(22deg);\\n  }\\n  32% {\\n    -webkit-transform: rotate(-12deg);\\n            transform: rotate(-12deg);\\n  }\\n  36% {\\n    -webkit-transform: rotate(12deg);\\n            transform: rotate(12deg);\\n  }\\n  40%, 100% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg);\\n  }\\n}\\n@keyframes fa-shake {\\n  0% {\\n    -webkit-transform: rotate(-15deg);\\n            transform: rotate(-15deg);\\n  }\\n  4% {\\n    -webkit-transform: rotate(15deg);\\n            transform: rotate(15deg);\\n  }\\n  8%, 24% {\\n    -webkit-transform: rotate(-18deg);\\n            transform: rotate(-18deg);\\n  }\\n  12%, 28% {\\n    -webkit-transform: rotate(18deg);\\n            transform: rotate(18deg);\\n  }\\n  16% {\\n    -webkit-transform: rotate(-22deg);\\n            transform: rotate(-22deg);\\n  }\\n  20% {\\n    -webkit-transform: rotate(22deg);\\n            transform: rotate(22deg);\\n  }\\n  32% {\\n    -webkit-transform: rotate(-12deg);\\n            transform: rotate(-12deg);\\n  }\\n  36% {\\n    -webkit-transform: rotate(12deg);\\n            transform: rotate(12deg);\\n  }\\n  40%, 100% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg);\\n  }\\n}\\n@-webkit-keyframes fa-spin {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg);\\n  }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg);\\n  }\\n}\\n@keyframes fa-spin {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg);\\n  }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg);\\n  }\\n}\\n.fa-rotate-90 {\\n  -webkit-transform: rotate(90deg);\\n          transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n  -webkit-transform: rotate(180deg);\\n          transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n  -webkit-transform: rotate(270deg);\\n          transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n  -webkit-transform: scale(-1, 1);\\n          transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n  -webkit-transform: scale(1, -1);\\n          transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n  -webkit-transform: scale(-1, -1);\\n          transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n  -webkit-transform: rotate(var(--fa-rotate-angle, none));\\n          transform: rotate(var(--fa-rotate-angle, none));\\n}\\n\\n.fa-stack {\\n  display: inline-block;\\n  vertical-align: middle;\\n  height: 2em;\\n  position: relative;\\n  width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n  z-index: var(--fa-stack-z-index, auto);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n  height: 1em;\\n  width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n  height: 2em;\\n  width: 2.5em;\\n}\\n\\n.fa-inverse {\\n  color: var(--fa-inverse, #fff);\\n}\\n\\n.sr-only,\\n.fa-sr-only {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border-width: 0;\\n}\\n\\n.sr-only-focusable:not(:focus),\\n.fa-sr-only-focusable:not(:focus) {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border-width: 0;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n  fill: var(--fa-primary-color, currentColor);\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n  fill: var(--fa-secondary-color, currentColor);\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n  fill: black;\\n}\\n\\n.fad.fa-inverse,\\n.fa-duotone.fa-inverse {\\n  color: var(--fa-inverse, #fff);\\n}\";\n\nfunction css() {\n  var dcp = DEFAULT_CSS_PREFIX;\n  var drc = DEFAULT_REPLACEMENT_CLASS;\n  var fp = config.cssPrefix;\n  var rc = config.replacementClass;\n  var s = baseStyles;\n\n  if (fp !== dcp || rc !== drc) {\n    var dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n    var customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n    var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n    s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n  }\n\n  return s;\n}\n\nvar _cssInserted = false;\n\nfunction ensureCss() {\n  if (config.autoAddCss && !_cssInserted) {\n    insertCss(css());\n    _cssInserted = true;\n  }\n}\n\nvar InjectCSS = {\n  mixout: function mixout() {\n    return {\n      dom: {\n        css: css,\n        insertCss: ensureCss\n      }\n    };\n  },\n  hooks: function hooks() {\n    return {\n      beforeDOMElementCreation: function beforeDOMElementCreation() {\n        ensureCss();\n      },\n      beforeI2svg: function beforeI2svg() {\n        ensureCss();\n      }\n    };\n  }\n};\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n  DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n  loaded = 1;\n  functions.map(function (fn) {\n    return fn();\n  });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n  loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n  if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n  if (!IS_DOM) return;\n  loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n  var tag = abstractNodes.tag,\n      _abstractNodes$attrib = abstractNodes.attributes,\n      attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n      _abstractNodes$childr = abstractNodes.children,\n      children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n  if (typeof abstractNodes === 'string') {\n    return htmlEscape(abstractNodes);\n  } else {\n    return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n  }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n  if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n    return {\n      prefix: prefix,\n      iconName: iconName,\n      icon: mapping[prefix][iconName]\n    };\n  }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n  return function (a, b, c, d) {\n    return func.call(thisContext, a, b, c, d);\n  };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param  {Object}   subject      The object to reduce over.\n * @param  {Function} fn           The reducer function.\n * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n * @param  {Object}   thisContext  The context for the reducer.\n * @return {mixed}                 The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n  var keys = Object.keys(subject),\n      length = keys.length,\n      iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n      i,\n      key,\n      result;\n\n  if (initialValue === undefined) {\n    i = 1;\n    result = subject[keys[0]];\n  } else {\n    i = 0;\n    result = initialValue;\n  }\n\n  for (; i < length; i++) {\n    key = keys[i];\n    result = iterator(result, subject[key], key, subject);\n  }\n\n  return result;\n};\n\n/**\n * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n *\n * Copyright Mathias Bynens <https://mathiasbynens.be/>\n\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nfunction ucs2decode(string) {\n  var output = [];\n  var counter = 0;\n  var length = string.length;\n\n  while (counter < length) {\n    var value = string.charCodeAt(counter++);\n\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      var extra = string.charCodeAt(counter++);\n\n      if ((extra & 0xFC00) == 0xDC00) {\n        // eslint-disable-line eqeqeq\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n\n  return output;\n}\n\nfunction toHex(unicode) {\n  var decoded = ucs2decode(unicode);\n  return decoded.length === 1 ? decoded[0].toString(16) : null;\n}\nfunction codePointAt(string, index) {\n  var size = string.length;\n  var first = string.charCodeAt(index);\n  var second;\n\n  if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n    second = string.charCodeAt(index + 1);\n\n    if (second >= 0xDC00 && second <= 0xDFFF) {\n      return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n    }\n  }\n\n  return first;\n}\n\nfunction normalizeIcons(icons) {\n  return Object.keys(icons).reduce(function (acc, iconName) {\n    var icon = icons[iconName];\n    var expanded = !!icon.icon;\n\n    if (expanded) {\n      acc[icon.iconName] = icon.icon;\n    } else {\n      acc[iconName] = icon;\n    }\n\n    return acc;\n  }, {});\n}\n\nfunction defineIcons(prefix, icons) {\n  var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var _params$skipHooks = params.skipHooks,\n      skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n  var normalized = normalizeIcons(icons);\n\n  if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n    namespace.hooks.addPack(prefix, normalizeIcons(icons));\n  } else {\n    namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n  }\n  /**\n   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n   * for `fas` so we'll ease the upgrade process for our users by automatically defining\n   * this as well.\n   */\n\n\n  if (prefix === 'fas') {\n    defineIcons('fa', icons);\n  }\n}\n\nvar duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"((?:(?!\")[\\s\\S])+)\".*path d=\"((?:(?!\")[\\s\\S])+)\"/, {\n  d1: 1,\n  d2: 2\n}), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\".*path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n  cls1: 1,\n  d1: 2,\n  cls2: 3,\n  d2: 4\n}), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n  cls1: 1,\n  d1: 2\n})];\n\nvar _LONG_STYLE, _PREFIXES, _PREFIXES_FOR_FAMILY;\nvar styles = namespace.styles,\n    shims = namespace.shims;\nvar LONG_STYLE = (_LONG_STYLE = {}, _defineProperty(_LONG_STYLE, FAMILY_CLASSIC, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty(_LONG_STYLE, FAMILY_SHARP, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _LONG_STYLE);\nvar _defaultUsablePrefix = null;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar _byOldUnicode = {};\nvar _byAlias = {};\nvar PREFIXES = (_PREFIXES = {}, _defineProperty(_PREFIXES, FAMILY_CLASSIC, Object.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC])), _defineProperty(_PREFIXES, FAMILY_SHARP, Object.keys(PREFIX_TO_STYLE[FAMILY_SHARP])), _PREFIXES);\n\nfunction isReserved(name) {\n  return ~RESERVED_CLASSES.indexOf(name);\n}\n\nfunction getIconName(cssPrefix, cls) {\n  var parts = cls.split('-');\n  var prefix = parts[0];\n  var iconName = parts.slice(1).join('-');\n\n  if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n    return iconName;\n  } else {\n    return null;\n  }\n}\nvar build = function build() {\n  var lookup = function lookup(reducer) {\n    return reduce(styles, function (o, style, prefix) {\n      o[prefix] = reduce(style, reducer, {});\n      return o;\n    }, {});\n  };\n\n  _byUnicode = lookup(function (acc, icon, iconName) {\n    if (icon[3]) {\n      acc[icon[3]] = iconName;\n    }\n\n    if (icon[2]) {\n      var aliases = icon[2].filter(function (a) {\n        return typeof a === 'number';\n      });\n      aliases.forEach(function (alias) {\n        acc[alias.toString(16)] = iconName;\n      });\n    }\n\n    return acc;\n  });\n  _byLigature = lookup(function (acc, icon, iconName) {\n    acc[iconName] = iconName;\n\n    if (icon[2]) {\n      var aliases = icon[2].filter(function (a) {\n        return typeof a === 'string';\n      });\n      aliases.forEach(function (alias) {\n        acc[alias] = iconName;\n      });\n    }\n\n    return acc;\n  });\n  _byAlias = lookup(function (acc, icon, iconName) {\n    var aliases = icon[2];\n    acc[iconName] = iconName;\n    aliases.forEach(function (alias) {\n      acc[alias] = iconName;\n    });\n    return acc;\n  }); // If we have a Kit, we can't determine if regular is available since we\n  // could be auto-fetching it. We'll have to assume that it is available.\n\n  var hasRegular = 'far' in styles || config.autoFetchSvg;\n  var shimLookups = reduce(shims, function (acc, shim) {\n    var maybeNameMaybeUnicode = shim[0];\n    var prefix = shim[1];\n    var iconName = shim[2];\n\n    if (prefix === 'far' && !hasRegular) {\n      prefix = 'fas';\n    }\n\n    if (typeof maybeNameMaybeUnicode === 'string') {\n      acc.names[maybeNameMaybeUnicode] = {\n        prefix: prefix,\n        iconName: iconName\n      };\n    }\n\n    if (typeof maybeNameMaybeUnicode === 'number') {\n      acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n        prefix: prefix,\n        iconName: iconName\n      };\n    }\n\n    return acc;\n  }, {\n    names: {},\n    unicodes: {}\n  });\n  _byOldName = shimLookups.names;\n  _byOldUnicode = shimLookups.unicodes;\n  _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n    family: config.familyDefault\n  });\n};\nonChange(function (c) {\n  _defaultUsablePrefix = getCanonicalPrefix(c.styleDefault, {\n    family: config.familyDefault\n  });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n  return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n  return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n  return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n  return _byOldName[name] || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction byOldUnicode(unicode) {\n  var oldUnicode = _byOldUnicode[unicode];\n  var newUnicode = byUnicode('fas', unicode);\n  return oldUnicode || (newUnicode ? {\n    prefix: 'fas',\n    iconName: newUnicode\n  } : null) || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction getDefaultUsablePrefix() {\n  return _defaultUsablePrefix;\n}\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n  return {\n    prefix: null,\n    iconName: null,\n    rest: []\n  };\n};\nfunction getCanonicalPrefix(styleOrPrefix) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$family = params.family,\n      family = _params$family === void 0 ? FAMILY_CLASSIC : _params$family;\n  var style = PREFIX_TO_STYLE[family][styleOrPrefix];\n  var prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n  var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n  return prefix || defined || null;\n}\nvar PREFIXES_FOR_FAMILY = (_PREFIXES_FOR_FAMILY = {}, _defineProperty(_PREFIXES_FOR_FAMILY, FAMILY_CLASSIC, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty(_PREFIXES_FOR_FAMILY, FAMILY_SHARP, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _PREFIXES_FOR_FAMILY);\nfunction getCanonicalIcon(values) {\n  var _famProps;\n\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$skipLookups = params.skipLookups,\n      skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups;\n  var famProps = (_famProps = {}, _defineProperty(_famProps, FAMILY_CLASSIC, \"\".concat(config.cssPrefix, \"-\").concat(FAMILY_CLASSIC)), _defineProperty(_famProps, FAMILY_SHARP, \"\".concat(config.cssPrefix, \"-\").concat(FAMILY_SHARP)), _famProps);\n  var givenPrefix = null;\n  var family = FAMILY_CLASSIC;\n\n  if (values.includes(famProps[FAMILY_CLASSIC]) || values.some(function (v) {\n    return PREFIXES_FOR_FAMILY[FAMILY_CLASSIC].includes(v);\n  })) {\n    family = FAMILY_CLASSIC;\n  }\n\n  if (values.includes(famProps[FAMILY_SHARP]) || values.some(function (v) {\n    return PREFIXES_FOR_FAMILY[FAMILY_SHARP].includes(v);\n  })) {\n    family = FAMILY_SHARP;\n  }\n\n  var canonical = values.reduce(function (acc, cls) {\n    var iconName = getIconName(config.cssPrefix, cls);\n\n    if (styles[cls]) {\n      cls = LONG_STYLE[family].includes(cls) ? LONG_STYLE_TO_PREFIX[family][cls] : cls;\n      givenPrefix = cls;\n      acc.prefix = cls;\n    } else if (PREFIXES[family].indexOf(cls) > -1) {\n      givenPrefix = cls;\n      acc.prefix = getCanonicalPrefix(cls, {\n        family: family\n      });\n    } else if (iconName) {\n      acc.iconName = iconName;\n    } else if (cls !== config.replacementClass && cls !== famProps[FAMILY_CLASSIC] && cls !== famProps[FAMILY_SHARP]) {\n      acc.rest.push(cls);\n    }\n\n    if (!skipLookups && acc.prefix && acc.iconName) {\n      var shim = givenPrefix === 'fa' ? byOldName(acc.iconName) : {};\n      var aliasIconName = byAlias(acc.prefix, acc.iconName);\n\n      if (shim.prefix) {\n        givenPrefix = null;\n      }\n\n      acc.iconName = shim.iconName || aliasIconName || acc.iconName;\n      acc.prefix = shim.prefix || acc.prefix;\n\n      if (acc.prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n        // Allow a fallback from the regular style to solid if regular is not available\n        // but only if we aren't auto-fetching SVGs\n        acc.prefix = 'fas';\n      }\n    }\n\n    return acc;\n  }, emptyCanonicalIcon());\n\n  if (values.includes('fa-brands') || values.includes('fab')) {\n    canonical.prefix = 'fab';\n  }\n\n  if (values.includes('fa-duotone') || values.includes('fad')) {\n    canonical.prefix = 'fad';\n  }\n\n  if (!canonical.prefix && family === FAMILY_SHARP && (styles['fass'] || config.autoFetchSvg)) {\n    canonical.prefix = 'fass';\n    canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n  }\n\n  if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n    // The fa prefix is not canonical. So if it has made it through until this point\n    // we will shift it to the correct prefix.\n    canonical.prefix = getDefaultUsablePrefix() || 'fas';\n  }\n\n  return canonical;\n}\n\nvar Library = /*#__PURE__*/function () {\n  function Library() {\n    _classCallCheck(this, Library);\n\n    this.definitions = {};\n  }\n\n  _createClass(Library, [{\n    key: \"add\",\n    value: function add() {\n      var _this = this;\n\n      for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n        definitions[_key] = arguments[_key];\n      }\n\n      var additions = definitions.reduce(this._pullDefinitions, {});\n      Object.keys(additions).forEach(function (key) {\n        _this.definitions[key] = _objectSpread2(_objectSpread2({}, _this.definitions[key] || {}), additions[key]);\n        defineIcons(key, additions[key]); // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n\n        var longPrefix = PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC][key];\n        if (longPrefix) defineIcons(longPrefix, additions[key]);\n        build();\n      });\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.definitions = {};\n    }\n  }, {\n    key: \"_pullDefinitions\",\n    value: function _pullDefinitions(additions, definition) {\n      var normalized = definition.prefix && definition.iconName && definition.icon ? {\n        0: definition\n      } : definition;\n      Object.keys(normalized).map(function (key) {\n        var _normalized$key = normalized[key],\n            prefix = _normalized$key.prefix,\n            iconName = _normalized$key.iconName,\n            icon = _normalized$key.icon;\n        var aliases = icon[2];\n        if (!additions[prefix]) additions[prefix] = {};\n\n        if (aliases.length > 0) {\n          aliases.forEach(function (alias) {\n            if (typeof alias === 'string') {\n              additions[prefix][alias] = icon;\n            }\n          });\n        }\n\n        additions[prefix][iconName] = icon;\n      });\n      return additions;\n    }\n  }]);\n\n  return Library;\n}();\n\nvar _plugins = [];\nvar _hooks = {};\nvar providers = {};\nvar defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n  var obj = _ref.mixoutsTo;\n  _plugins = nextPlugins;\n  _hooks = {};\n  Object.keys(providers).forEach(function (k) {\n    if (defaultProviderKeys.indexOf(k) === -1) {\n      delete providers[k];\n    }\n  });\n\n  _plugins.forEach(function (plugin) {\n    var mixout = plugin.mixout ? plugin.mixout() : {};\n    Object.keys(mixout).forEach(function (tk) {\n      if (typeof mixout[tk] === 'function') {\n        obj[tk] = mixout[tk];\n      }\n\n      if (_typeof(mixout[tk]) === 'object') {\n        Object.keys(mixout[tk]).forEach(function (sk) {\n          if (!obj[tk]) {\n            obj[tk] = {};\n          }\n\n          obj[tk][sk] = mixout[tk][sk];\n        });\n      }\n    });\n\n    if (plugin.hooks) {\n      var hooks = plugin.hooks();\n      Object.keys(hooks).forEach(function (hook) {\n        if (!_hooks[hook]) {\n          _hooks[hook] = [];\n        }\n\n        _hooks[hook].push(hooks[hook]);\n      });\n    }\n\n    if (plugin.provides) {\n      plugin.provides(providers);\n    }\n  });\n\n  return obj;\n}\nfunction chainHooks(hook, accumulator) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  var hookFns = _hooks[hook] || [];\n  hookFns.forEach(function (hookFn) {\n    accumulator = hookFn.apply(null, [accumulator].concat(args)); // eslint-disable-line no-useless-call\n  });\n  return accumulator;\n}\nfunction callHooks(hook) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n\n  var hookFns = _hooks[hook] || [];\n  hookFns.forEach(function (hookFn) {\n    hookFn.apply(null, args);\n  });\n  return undefined;\n}\nfunction callProvided() {\n  var hook = arguments[0];\n  var args = Array.prototype.slice.call(arguments, 1);\n  return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n  if (iconLookup.prefix === 'fa') {\n    iconLookup.prefix = 'fas';\n  }\n\n  var iconName = iconLookup.iconName;\n  var prefix = iconLookup.prefix || getDefaultUsablePrefix();\n  if (!iconName) return;\n  iconName = byAlias(prefix, iconName) || iconName;\n  return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nvar library = new Library();\nvar noAuto = function noAuto() {\n  config.autoReplaceSvg = false;\n  config.observeMutations = false;\n  callHooks('noAuto');\n};\nvar dom = {\n  i2svg: function i2svg() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    if (IS_DOM) {\n      callHooks('beforeI2svg', params);\n      callProvided('pseudoElements2svg', params);\n      return callProvided('i2svg', params);\n    } else {\n      return Promise.reject('Operation requires a DOM of some kind.');\n    }\n  },\n  watch: function watch() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var autoReplaceSvgRoot = params.autoReplaceSvgRoot;\n\n    if (config.autoReplaceSvg === false) {\n      config.autoReplaceSvg = true;\n    }\n\n    config.observeMutations = true;\n    domready(function () {\n      autoReplace({\n        autoReplaceSvgRoot: autoReplaceSvgRoot\n      });\n      callHooks('watch', params);\n    });\n  }\n};\nvar parse = {\n  icon: function icon(_icon) {\n    if (_icon === null) {\n      return null;\n    }\n\n    if (_typeof(_icon) === 'object' && _icon.prefix && _icon.iconName) {\n      return {\n        prefix: _icon.prefix,\n        iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName\n      };\n    }\n\n    if (Array.isArray(_icon) && _icon.length === 2) {\n      var iconName = _icon[1].indexOf('fa-') === 0 ? _icon[1].slice(3) : _icon[1];\n      var prefix = getCanonicalPrefix(_icon[0]);\n      return {\n        prefix: prefix,\n        iconName: byAlias(prefix, iconName) || iconName\n      };\n    }\n\n    if (typeof _icon === 'string' && (_icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n      var canonicalIcon = getCanonicalIcon(_icon.split(' '), {\n        skipLookups: true\n      });\n      return {\n        prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n        iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n      };\n    }\n\n    if (typeof _icon === 'string') {\n      var _prefix = getDefaultUsablePrefix();\n\n      return {\n        prefix: _prefix,\n        iconName: byAlias(_prefix, _icon) || _icon\n      };\n    }\n  }\n};\nvar api = {\n  noAuto: noAuto,\n  config: config,\n  dom: dom,\n  parse: parse,\n  library: library,\n  findIconDefinition: findIconDefinition,\n  toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n      autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n  if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n    node: autoReplaceSvgRoot\n  });\n};\n\nfunction domVariants(val, abstractCreator) {\n  Object.defineProperty(val, 'abstract', {\n    get: abstractCreator\n  });\n  Object.defineProperty(val, 'html', {\n    get: function get() {\n      return val.abstract.map(function (a) {\n        return toHtml(a);\n      });\n    }\n  });\n  Object.defineProperty(val, 'node', {\n    get: function get() {\n      if (!IS_DOM) return;\n      var container = DOCUMENT.createElement('div');\n      container.innerHTML = val.html;\n      return container.children;\n    }\n  });\n  return val;\n}\n\nfunction asIcon (_ref) {\n  var children = _ref.children,\n      main = _ref.main,\n      mask = _ref.mask,\n      attributes = _ref.attributes,\n      styles = _ref.styles,\n      transform = _ref.transform;\n\n  if (transformIsMeaningful(transform) && main.found && !mask.found) {\n    var width = main.width,\n        height = main.height;\n    var offset = {\n      x: width / height / 2,\n      y: 0.5\n    };\n    attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n      'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n    }));\n  }\n\n  return [{\n    tag: 'svg',\n    attributes: attributes,\n    children: children\n  }];\n}\n\nfunction asSymbol (_ref) {\n  var prefix = _ref.prefix,\n      iconName = _ref.iconName,\n      children = _ref.children,\n      attributes = _ref.attributes,\n      symbol = _ref.symbol;\n  var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n  return [{\n    tag: 'svg',\n    attributes: {\n      style: 'display: none;'\n    },\n    children: [{\n      tag: 'symbol',\n      attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n        id: id\n      }),\n      children: children\n    }]\n  }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n  var _params$icons = params.icons,\n      main = _params$icons.main,\n      mask = _params$icons.mask,\n      prefix = params.prefix,\n      iconName = params.iconName,\n      transform = params.transform,\n      symbol = params.symbol,\n      title = params.title,\n      maskId = params.maskId,\n      titleId = params.titleId,\n      extra = params.extra,\n      _params$watchable = params.watchable,\n      watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n  var _ref = mask.found ? mask : main,\n      width = _ref.width,\n      height = _ref.height;\n\n  var isUploadedIcon = prefix === 'fak';\n  var attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(function (c) {\n    return extra.classes.indexOf(c) === -1;\n  }).filter(function (c) {\n    return c !== '' || !!c;\n  }).concat(extra.classes).join(' ');\n  var content = {\n    children: [],\n    attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n      'data-prefix': prefix,\n      'data-icon': iconName,\n      'class': attrClass,\n      'role': extra.attributes.role || 'img',\n      'xmlns': 'http://www.w3.org/2000/svg',\n      'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n    })\n  };\n  var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n    width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n  } : {};\n\n  if (watchable) {\n    content.attributes[DATA_FA_I2SVG] = '';\n  }\n\n  if (title) {\n    content.children.push({\n      tag: 'title',\n      attributes: {\n        id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n      },\n      children: [title]\n    });\n    delete content.attributes.title;\n  }\n\n  var args = _objectSpread2(_objectSpread2({}, content), {}, {\n    prefix: prefix,\n    iconName: iconName,\n    main: main,\n    mask: mask,\n    maskId: maskId,\n    transform: transform,\n    symbol: symbol,\n    styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n  });\n\n  var _ref2 = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n    children: [],\n    attributes: {}\n  } : callProvided('generateAbstractIcon', args) || {\n    children: [],\n    attributes: {}\n  },\n      children = _ref2.children,\n      attributes = _ref2.attributes;\n\n  args.children = children;\n  args.attributes = attributes;\n\n  if (symbol) {\n    return asSymbol(args);\n  } else {\n    return asIcon(args);\n  }\n}\nfunction makeLayersTextAbstract(params) {\n  var content = params.content,\n      width = params.width,\n      height = params.height,\n      transform = params.transform,\n      title = params.title,\n      extra = params.extra,\n      _params$watchable2 = params.watchable,\n      watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n  var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n    'title': title\n  } : {}), {}, {\n    'class': extra.classes.join(' ')\n  });\n\n  if (watchable) {\n    attributes[DATA_FA_I2SVG] = '';\n  }\n\n  var styles = _objectSpread2({}, extra.styles);\n\n  if (transformIsMeaningful(transform)) {\n    styles['transform'] = transformForCss({\n      transform: transform,\n      startCentered: true,\n      width: width,\n      height: height\n    });\n    styles['-webkit-transform'] = styles['transform'];\n  }\n\n  var styleString = joinStyles(styles);\n\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n\n  var val = [];\n  val.push({\n    tag: 'span',\n    attributes: attributes,\n    children: [content]\n  });\n\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n\n  return val;\n}\nfunction makeLayersCounterAbstract(params) {\n  var content = params.content,\n      title = params.title,\n      extra = params.extra;\n\n  var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n    'title': title\n  } : {}), {}, {\n    'class': extra.classes.join(' ')\n  });\n\n  var styleString = joinStyles(extra.styles);\n\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n\n  var val = [];\n  val.push({\n    tag: 'span',\n    attributes: attributes,\n    children: [content]\n  });\n\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n\n  return val;\n}\n\nvar styles$1 = namespace.styles;\nfunction asFoundIcon(icon) {\n  var width = icon[0];\n  var height = icon[1];\n\n  var _icon$slice = icon.slice(4),\n      _icon$slice2 = _slicedToArray(_icon$slice, 1),\n      vectorData = _icon$slice2[0];\n\n  var element = null;\n\n  if (Array.isArray(vectorData)) {\n    element = {\n      tag: 'g',\n      attributes: {\n        class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n      },\n      children: [{\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n          fill: 'currentColor',\n          d: vectorData[0]\n        }\n      }, {\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n          fill: 'currentColor',\n          d: vectorData[1]\n        }\n      }]\n    };\n  } else {\n    element = {\n      tag: 'path',\n      attributes: {\n        fill: 'currentColor',\n        d: vectorData\n      }\n    };\n  }\n\n  return {\n    found: true,\n    width: width,\n    height: height,\n    icon: element\n  };\n}\nvar missingIconResolutionMixin = {\n  found: false,\n  width: 512,\n  height: 512\n};\n\nfunction maybeNotifyMissing(iconName, prefix) {\n  if (!PRODUCTION && !config.showMissingIcons && iconName) {\n    console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n  }\n}\n\nfunction findIcon(iconName, prefix) {\n  var givenPrefix = prefix;\n\n  if (prefix === 'fa' && config.styleDefault !== null) {\n    prefix = getDefaultUsablePrefix();\n  }\n\n  return new Promise(function (resolve, reject) {\n    var val = {\n      found: false,\n      width: 512,\n      height: 512,\n      icon: callProvided('missingIconAbstract') || {}\n    };\n\n    if (givenPrefix === 'fa') {\n      var shim = byOldName(iconName) || {};\n      iconName = shim.iconName || iconName;\n      prefix = shim.prefix || prefix;\n    }\n\n    if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n      var icon = styles$1[prefix][iconName];\n      return resolve(asFoundIcon(icon));\n    }\n\n    maybeNotifyMissing(iconName, prefix);\n    resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n      icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n    }));\n  });\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n  mark: noop$1,\n  measure: noop$1\n};\nvar preamble = \"FA \\\"6.4.0\\\"\";\n\nvar begin = function begin(name) {\n  p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n  return function () {\n    return end(name);\n  };\n};\n\nvar end = function end(name) {\n  p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n  p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n  begin: begin,\n  end: end\n};\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n  var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n  return typeof i2svg === 'string';\n}\n\nfunction hasPrefixAndIcon(node) {\n  var prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n  var icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n  return prefix && icon;\n}\n\nfunction hasBeenReplaced(node) {\n  return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\n\nfunction getMutator() {\n  if (config.autoReplaceSvg === true) {\n    return mutators.replace;\n  }\n\n  var mutator = mutators[config.autoReplaceSvg];\n  return mutator || mutators.replace;\n}\n\nfunction createElementNS(tag) {\n  return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\n\nfunction createElement(tag) {\n  return DOCUMENT.createElement(tag);\n}\n\nfunction convertSVG(abstractObj) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$ceFn = params.ceFn,\n      ceFn = _params$ceFn === void 0 ? abstractObj.tag === 'svg' ? createElementNS : createElement : _params$ceFn;\n\n  if (typeof abstractObj === 'string') {\n    return DOCUMENT.createTextNode(abstractObj);\n  }\n\n  var tag = ceFn(abstractObj.tag);\n  Object.keys(abstractObj.attributes || []).forEach(function (key) {\n    tag.setAttribute(key, abstractObj.attributes[key]);\n  });\n  var children = abstractObj.children || [];\n  children.forEach(function (child) {\n    tag.appendChild(convertSVG(child, {\n      ceFn: ceFn\n    }));\n  });\n  return tag;\n}\n\nfunction nodeAsComment(node) {\n  var comment = \" \".concat(node.outerHTML, \" \");\n  /* BEGIN.ATTRIBUTION */\n\n  comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n  /* END.ATTRIBUTION */\n\n  return comment;\n}\n\nvar mutators = {\n  replace: function replace(mutation) {\n    var node = mutation[0];\n\n    if (node.parentNode) {\n      mutation[1].forEach(function (_abstract) {\n        node.parentNode.insertBefore(convertSVG(_abstract), node);\n      });\n\n      if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n        var comment = DOCUMENT.createComment(nodeAsComment(node));\n        node.parentNode.replaceChild(comment, node);\n      } else {\n        node.remove();\n      }\n    }\n  },\n  nest: function nest(mutation) {\n    var node = mutation[0];\n    var _abstract2 = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n    // Short-circuit to the standard replacement\n\n    if (~classArray(node).indexOf(config.replacementClass)) {\n      return mutators.replace(mutation);\n    }\n\n    var forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n    delete _abstract2[0].attributes.id;\n\n    if (_abstract2[0].attributes.class) {\n      var splitClasses = _abstract2[0].attributes.class.split(' ').reduce(function (acc, cls) {\n        if (cls === config.replacementClass || cls.match(forSvg)) {\n          acc.toSvg.push(cls);\n        } else {\n          acc.toNode.push(cls);\n        }\n\n        return acc;\n      }, {\n        toNode: [],\n        toSvg: []\n      });\n\n      _abstract2[0].attributes.class = splitClasses.toSvg.join(' ');\n\n      if (splitClasses.toNode.length === 0) {\n        node.removeAttribute('class');\n      } else {\n        node.setAttribute('class', splitClasses.toNode.join(' '));\n      }\n    }\n\n    var newInnerHTML = _abstract2.map(function (a) {\n      return toHtml(a);\n    }).join('\\n');\n\n    node.setAttribute(DATA_FA_I2SVG, '');\n    node.innerHTML = newInnerHTML;\n  }\n};\n\nfunction performOperationSync(op) {\n  op();\n}\n\nfunction perform(mutations, callback) {\n  var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n  if (mutations.length === 0) {\n    callbackFunction();\n  } else {\n    var frame = performOperationSync;\n\n    if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n      frame = WINDOW.requestAnimationFrame || performOperationSync;\n    }\n\n    frame(function () {\n      var mutator = getMutator();\n      var mark = perf.begin('mutate');\n      mutations.map(mutator);\n      mark();\n      callbackFunction();\n    });\n  }\n}\nvar disabled = false;\nfunction disableObservation() {\n  disabled = true;\n}\nfunction enableObservation() {\n  disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n  if (!MUTATION_OBSERVER) {\n    return;\n  }\n\n  if (!config.observeMutations) {\n    return;\n  }\n\n  var _options$treeCallback = options.treeCallback,\n      treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback,\n      _options$nodeCallback = options.nodeCallback,\n      nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback,\n      _options$pseudoElemen = options.pseudoElementsCallback,\n      pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen,\n      _options$observeMutat = options.observeMutationsRoot,\n      observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n  mo = new MUTATION_OBSERVER(function (objects) {\n    if (disabled) return;\n    var defaultPrefix = getDefaultUsablePrefix();\n    toArray(objects).forEach(function (mutationRecord) {\n      if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n        if (config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target);\n        }\n\n        treeCallback(mutationRecord.target);\n      }\n\n      if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n        pseudoElementsCallback(mutationRecord.target.parentNode);\n      }\n\n      if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n        if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n          var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n              prefix = _getCanonicalIcon.prefix,\n              iconName = _getCanonicalIcon.iconName;\n\n          mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n          if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n        } else if (hasBeenReplaced(mutationRecord.target)) {\n          nodeCallback(mutationRecord.target);\n        }\n      }\n    });\n  });\n  if (!IS_DOM) return;\n  mo.observe(observeMutationsRoot, {\n    childList: true,\n    attributes: true,\n    characterData: true,\n    subtree: true\n  });\n}\nfunction disconnect() {\n  if (!mo) return;\n  mo.disconnect();\n}\n\nfunction styleParser (node) {\n  var style = node.getAttribute('style');\n  var val = [];\n\n  if (style) {\n    val = style.split(';').reduce(function (acc, style) {\n      var styles = style.split(':');\n      var prop = styles[0];\n      var value = styles.slice(1);\n\n      if (prop && value.length > 0) {\n        acc[prop] = value.join(':').trim();\n      }\n\n      return acc;\n    }, {});\n  }\n\n  return val;\n}\n\nfunction classParser (node) {\n  var existingPrefix = node.getAttribute('data-prefix');\n  var existingIconName = node.getAttribute('data-icon');\n  var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n  var val = getCanonicalIcon(classArray(node));\n\n  if (!val.prefix) {\n    val.prefix = getDefaultUsablePrefix();\n  }\n\n  if (existingPrefix && existingIconName) {\n    val.prefix = existingPrefix;\n    val.iconName = existingIconName;\n  }\n\n  if (val.iconName && val.prefix) {\n    return val;\n  }\n\n  if (val.prefix && innerText.length > 0) {\n    val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n  }\n\n  if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n    val.iconName = node.firstChild.data;\n  }\n\n  return val;\n}\n\nfunction attributesParser (node) {\n  var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n    if (acc.name !== 'class' && acc.name !== 'style') {\n      acc[attr.name] = attr.value;\n    }\n\n    return acc;\n  }, {});\n  var title = node.getAttribute('title');\n  var titleId = node.getAttribute('data-fa-title-id');\n\n  if (config.autoA11y) {\n    if (title) {\n      extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n    } else {\n      extraAttributes['aria-hidden'] = 'true';\n      extraAttributes['focusable'] = 'false';\n    }\n  }\n\n  return extraAttributes;\n}\n\nfunction blankMeta() {\n  return {\n    iconName: null,\n    title: null,\n    titleId: null,\n    prefix: null,\n    transform: meaninglessTransform,\n    symbol: false,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    extra: {\n      classes: [],\n      styles: {},\n      attributes: {}\n    }\n  };\n}\nfunction parseMeta(node) {\n  var parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    styleParser: true\n  };\n\n  var _classParser = classParser(node),\n      iconName = _classParser.iconName,\n      prefix = _classParser.prefix,\n      extraClasses = _classParser.rest;\n\n  var extraAttributes = attributesParser(node);\n  var pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n  var extraStyles = parser.styleParser ? styleParser(node) : [];\n  return _objectSpread2({\n    iconName: iconName,\n    title: node.getAttribute('title'),\n    titleId: node.getAttribute('data-fa-title-id'),\n    prefix: prefix,\n    transform: meaninglessTransform,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    symbol: false,\n    extra: {\n      classes: extraClasses,\n      styles: extraStyles,\n      attributes: extraAttributes\n    }\n  }, pluginMeta);\n}\n\nvar styles$2 = namespace.styles;\n\nfunction generateMutation(node) {\n  var nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n    styleParser: false\n  }) : parseMeta(node);\n\n  if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n    return callProvided('generateLayersText', node, nodeMeta);\n  } else {\n    return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n  }\n}\n\nvar knownPrefixes = new Set();\nFAMILIES.map(function (family) {\n  knownPrefixes.add(\"fa-\".concat(family));\n});\nObject.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC]).map(knownPrefixes.add.bind(knownPrefixes));\nObject.keys(PREFIX_TO_STYLE[FAMILY_SHARP]).map(knownPrefixes.add.bind(knownPrefixes));\nknownPrefixes = _toConsumableArray(knownPrefixes);\n\nfunction onTree(root) {\n  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  if (!IS_DOM) return Promise.resolve();\n  var htmlClassList = DOCUMENT.documentElement.classList;\n\n  var hclAdd = function hclAdd(suffix) {\n    return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  };\n\n  var hclRemove = function hclRemove(suffix) {\n    return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  };\n\n  var prefixes = config.autoFetchSvg ? knownPrefixes : FAMILIES.map(function (f) {\n    return \"fa-\".concat(f);\n  }).concat(Object.keys(styles$2));\n\n  if (!prefixes.includes('fa')) {\n    prefixes.push('fa');\n  }\n\n  var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n    return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n  })).join(', ');\n\n  if (prefixesDomQuery.length === 0) {\n    return Promise.resolve();\n  }\n\n  var candidates = [];\n\n  try {\n    candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n  } catch (e) {// noop\n  }\n\n  if (candidates.length > 0) {\n    hclAdd('pending');\n    hclRemove('complete');\n  } else {\n    return Promise.resolve();\n  }\n\n  var mark = perf.begin('onTree');\n  var mutations = candidates.reduce(function (acc, node) {\n    try {\n      var mutation = generateMutation(node);\n\n      if (mutation) {\n        acc.push(mutation);\n      }\n    } catch (e) {\n      if (!PRODUCTION) {\n        if (e.name === 'MissingIcon') {\n          console.error(e);\n        }\n      }\n    }\n\n    return acc;\n  }, []);\n  return new Promise(function (resolve, reject) {\n    Promise.all(mutations).then(function (resolvedMutations) {\n      perform(resolvedMutations, function () {\n        hclAdd('active');\n        hclAdd('complete');\n        hclRemove('pending');\n        if (typeof callback === 'function') callback();\n        mark();\n        resolve();\n      });\n    }).catch(function (e) {\n      mark();\n      reject(e);\n    });\n  });\n}\n\nfunction onNode(node) {\n  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  generateMutation(node).then(function (mutation) {\n    if (mutation) {\n      perform([mutation], callback);\n    }\n  });\n}\n\nfunction resolveIcons(next) {\n  return function (maybeIconDefinition) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n    var mask = params.mask;\n\n    if (mask) {\n      mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n    }\n\n    return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n      mask: mask\n    }));\n  };\n}\n\nvar render = function render(iconDefinition) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$transform = params.transform,\n      transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n      _params$symbol = params.symbol,\n      symbol = _params$symbol === void 0 ? false : _params$symbol,\n      _params$mask = params.mask,\n      mask = _params$mask === void 0 ? null : _params$mask,\n      _params$maskId = params.maskId,\n      maskId = _params$maskId === void 0 ? null : _params$maskId,\n      _params$title = params.title,\n      title = _params$title === void 0 ? null : _params$title,\n      _params$titleId = params.titleId,\n      titleId = _params$titleId === void 0 ? null : _params$titleId,\n      _params$classes = params.classes,\n      classes = _params$classes === void 0 ? [] : _params$classes,\n      _params$attributes = params.attributes,\n      attributes = _params$attributes === void 0 ? {} : _params$attributes,\n      _params$styles = params.styles,\n      styles = _params$styles === void 0 ? {} : _params$styles;\n  if (!iconDefinition) return;\n  var prefix = iconDefinition.prefix,\n      iconName = iconDefinition.iconName,\n      icon = iconDefinition.icon;\n  return domVariants(_objectSpread2({\n    type: 'icon'\n  }, iconDefinition), function () {\n    callHooks('beforeDOMElementCreation', {\n      iconDefinition: iconDefinition,\n      params: params\n    });\n\n    if (config.autoA11y) {\n      if (title) {\n        attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n      } else {\n        attributes['aria-hidden'] = 'true';\n        attributes['focusable'] = 'false';\n      }\n    }\n\n    return makeInlineSvgAbstract({\n      icons: {\n        main: asFoundIcon(icon),\n        mask: mask ? asFoundIcon(mask.icon) : {\n          found: false,\n          width: null,\n          height: null,\n          icon: {}\n        }\n      },\n      prefix: prefix,\n      iconName: iconName,\n      transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n      symbol: symbol,\n      title: title,\n      maskId: maskId,\n      titleId: titleId,\n      extra: {\n        attributes: attributes,\n        styles: styles,\n        classes: classes\n      }\n    });\n  });\n};\nvar ReplaceElements = {\n  mixout: function mixout() {\n    return {\n      icon: resolveIcons(render)\n    };\n  },\n  hooks: function hooks() {\n    return {\n      mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n        accumulator.treeCallback = onTree;\n        accumulator.nodeCallback = onNode;\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers$$1) {\n    providers$$1.i2svg = function (params) {\n      var _params$node = params.node,\n          node = _params$node === void 0 ? DOCUMENT : _params$node,\n          _params$callback = params.callback,\n          callback = _params$callback === void 0 ? function () {} : _params$callback;\n      return onTree(node, callback);\n    };\n\n    providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n      var iconName = nodeMeta.iconName,\n          title = nodeMeta.title,\n          titleId = nodeMeta.titleId,\n          prefix = nodeMeta.prefix,\n          transform = nodeMeta.transform,\n          symbol = nodeMeta.symbol,\n          mask = nodeMeta.mask,\n          maskId = nodeMeta.maskId,\n          extra = nodeMeta.extra;\n      return new Promise(function (resolve, reject) {\n        Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n          found: false,\n          width: 512,\n          height: 512,\n          icon: {}\n        })]).then(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n              main = _ref2[0],\n              mask = _ref2[1];\n\n          resolve([node, makeInlineSvgAbstract({\n            icons: {\n              main: main,\n              mask: mask\n            },\n            prefix: prefix,\n            iconName: iconName,\n            transform: transform,\n            symbol: symbol,\n            maskId: maskId,\n            title: title,\n            titleId: titleId,\n            extra: extra,\n            watchable: true\n          })]);\n        }).catch(reject);\n      });\n    };\n\n    providers$$1.generateAbstractIcon = function (_ref3) {\n      var children = _ref3.children,\n          attributes = _ref3.attributes,\n          main = _ref3.main,\n          transform = _ref3.transform,\n          styles = _ref3.styles;\n      var styleString = joinStyles(styles);\n\n      if (styleString.length > 0) {\n        attributes['style'] = styleString;\n      }\n\n      var nextChild;\n\n      if (transformIsMeaningful(transform)) {\n        nextChild = callProvided('generateAbstractTransformGrouping', {\n          main: main,\n          transform: transform,\n          containerWidth: main.width,\n          iconWidth: main.width\n        });\n      }\n\n      children.push(nextChild || main.icon);\n      return {\n        children: children,\n        attributes: attributes\n      };\n    };\n  }\n};\n\nvar Layers = {\n  mixout: function mixout() {\n    return {\n      layer: function layer(assembler) {\n        var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var _params$classes = params.classes,\n            classes = _params$classes === void 0 ? [] : _params$classes;\n        return domVariants({\n          type: 'layer'\n        }, function () {\n          callHooks('beforeDOMElementCreation', {\n            assembler: assembler,\n            params: params\n          });\n          var children = [];\n          assembler(function (args) {\n            Array.isArray(args) ? args.map(function (a) {\n              children = children.concat(a.abstract);\n            }) : children = children.concat(args.abstract);\n          });\n          return [{\n            tag: 'span',\n            attributes: {\n              class: [\"\".concat(config.cssPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n            },\n            children: children\n          }];\n        });\n      }\n    };\n  }\n};\n\nvar LayersCounter = {\n  mixout: function mixout() {\n    return {\n      counter: function counter(content) {\n        var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var _params$title = params.title,\n            title = _params$title === void 0 ? null : _params$title,\n            _params$classes = params.classes,\n            classes = _params$classes === void 0 ? [] : _params$classes,\n            _params$attributes = params.attributes,\n            attributes = _params$attributes === void 0 ? {} : _params$attributes,\n            _params$styles = params.styles,\n            styles = _params$styles === void 0 ? {} : _params$styles;\n        return domVariants({\n          type: 'counter',\n          content: content\n        }, function () {\n          callHooks('beforeDOMElementCreation', {\n            content: content,\n            params: params\n          });\n          return makeLayersCounterAbstract({\n            content: content.toString(),\n            title: title,\n            extra: {\n              attributes: attributes,\n              styles: styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n            }\n          });\n        });\n      }\n    };\n  }\n};\n\nvar LayersText = {\n  mixout: function mixout() {\n    return {\n      text: function text(content) {\n        var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var _params$transform = params.transform,\n            transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n            _params$title = params.title,\n            title = _params$title === void 0 ? null : _params$title,\n            _params$classes = params.classes,\n            classes = _params$classes === void 0 ? [] : _params$classes,\n            _params$attributes = params.attributes,\n            attributes = _params$attributes === void 0 ? {} : _params$attributes,\n            _params$styles = params.styles,\n            styles = _params$styles === void 0 ? {} : _params$styles;\n        return domVariants({\n          type: 'text',\n          content: content\n        }, function () {\n          callHooks('beforeDOMElementCreation', {\n            content: content,\n            params: params\n          });\n          return makeLayersTextAbstract({\n            content: content,\n            transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n            title: title,\n            extra: {\n              attributes: attributes,\n              styles: styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n            }\n          });\n        });\n      }\n    };\n  },\n  provides: function provides(providers$$1) {\n    providers$$1.generateLayersText = function (node, nodeMeta) {\n      var title = nodeMeta.title,\n          transform = nodeMeta.transform,\n          extra = nodeMeta.extra;\n      var width = null;\n      var height = null;\n\n      if (IS_IE) {\n        var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n        var boundingClientRect = node.getBoundingClientRect();\n        width = boundingClientRect.width / computedFontSize;\n        height = boundingClientRect.height / computedFontSize;\n      }\n\n      if (config.autoA11y && !title) {\n        extra.attributes['aria-hidden'] = 'true';\n      }\n\n      return Promise.resolve([node, makeLayersTextAbstract({\n        content: node.innerHTML,\n        width: width,\n        height: height,\n        transform: transform,\n        title: title,\n        extra: extra,\n        watchable: true\n      })]);\n    };\n  }\n};\n\nvar CLEAN_CONTENT_PATTERN = new RegExp(\"\\\"\", 'ug');\nvar SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nfunction hexValueFromContent(content) {\n  var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n  var codePoint = codePointAt(cleaned, 0);\n  var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n  var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n  return {\n    value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n    isSecondary: isPrependTen || isDoubled\n  };\n}\n\nfunction replaceForPosition(node, position) {\n  var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n  return new Promise(function (resolve, reject) {\n    if (node.getAttribute(pendingAttribute) !== null) {\n      // This node is already being processed\n      return resolve();\n    }\n\n    var children = toArray(node.children);\n    var alreadyProcessedPseudoElement = children.filter(function (c) {\n      return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n    })[0];\n    var styles = WINDOW.getComputedStyle(node, position);\n    var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n    var fontWeight = styles.getPropertyValue('font-weight');\n    var content = styles.getPropertyValue('content');\n\n    if (alreadyProcessedPseudoElement && !fontFamily) {\n      // If we've already processed it but the current computed style does not result in a font-family,\n      // that probably means that a class name that was previously present to make the icon has been\n      // removed. So we now should delete the icon.\n      node.removeChild(alreadyProcessedPseudoElement);\n      return resolve();\n    } else if (fontFamily && content !== 'none' && content !== '') {\n      var _content = styles.getPropertyValue('content');\n\n      var family = ~['Sharp'].indexOf(fontFamily[2]) ? FAMILY_SHARP : FAMILY_CLASSIC;\n      var prefix = ~['Solid', 'Regular', 'Light', 'Thin', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[family][fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[family][fontWeight];\n\n      var _hexValueFromContent = hexValueFromContent(_content),\n          hexValue = _hexValueFromContent.value,\n          isSecondary = _hexValueFromContent.isSecondary;\n\n      var isV4 = fontFamily[0].startsWith('FontAwesome');\n      var iconName = byUnicode(prefix, hexValue);\n      var iconIdentifier = iconName;\n\n      if (isV4) {\n        var iconName4 = byOldUnicode(hexValue);\n\n        if (iconName4.iconName && iconName4.prefix) {\n          iconName = iconName4.iconName;\n          prefix = iconName4.prefix;\n        }\n      } // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n      // already done so with the same prefix and iconName\n\n\n      if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n        node.setAttribute(pendingAttribute, iconIdentifier);\n\n        if (alreadyProcessedPseudoElement) {\n          // Delete the old one, since we're replacing it with a new one\n          node.removeChild(alreadyProcessedPseudoElement);\n        }\n\n        var meta = blankMeta();\n        var extra = meta.extra;\n        extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n        findIcon(iconName, prefix).then(function (main) {\n          var _abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n            icons: {\n              main: main,\n              mask: emptyCanonicalIcon()\n            },\n            prefix: prefix,\n            iconName: iconIdentifier,\n            extra: extra,\n            watchable: true\n          }));\n\n          var element = DOCUMENT.createElement('svg');\n\n          if (position === '::before') {\n            node.insertBefore(element, node.firstChild);\n          } else {\n            node.appendChild(element);\n          }\n\n          element.outerHTML = _abstract.map(function (a) {\n            return toHtml(a);\n          }).join('\\n');\n          node.removeAttribute(pendingAttribute);\n          resolve();\n        }).catch(reject);\n      } else {\n        resolve();\n      }\n    } else {\n      resolve();\n    }\n  });\n}\n\nfunction replace(node) {\n  return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\n\nfunction processable(node) {\n  return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements(root) {\n  if (!IS_DOM) return;\n  return new Promise(function (resolve, reject) {\n    var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n    var end = perf.begin('searchPseudoElements');\n    disableObservation();\n    Promise.all(operations).then(function () {\n      end();\n      enableObservation();\n      resolve();\n    }).catch(function () {\n      end();\n      enableObservation();\n      reject();\n    });\n  });\n}\n\nvar PseudoElements = {\n  hooks: function hooks() {\n    return {\n      mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n        accumulator.pseudoElementsCallback = searchPseudoElements;\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers$$1) {\n    providers$$1.pseudoElements2svg = function (params) {\n      var _params$node = params.node,\n          node = _params$node === void 0 ? DOCUMENT : _params$node;\n\n      if (config.searchPseudoElements) {\n        searchPseudoElements(node);\n      }\n    };\n  }\n};\n\nvar _unwatched = false;\nvar MutationObserver$1 = {\n  mixout: function mixout() {\n    return {\n      dom: {\n        unwatch: function unwatch() {\n          disableObservation();\n          _unwatched = true;\n        }\n      }\n    };\n  },\n  hooks: function hooks() {\n    return {\n      bootstrap: function bootstrap() {\n        observe(chainHooks('mutationObserverCallbacks', {}));\n      },\n      noAuto: function noAuto() {\n        disconnect();\n      },\n      watch: function watch(params) {\n        var observeMutationsRoot = params.observeMutationsRoot;\n\n        if (_unwatched) {\n          enableObservation();\n        } else {\n          observe(chainHooks('mutationObserverCallbacks', {\n            observeMutationsRoot: observeMutationsRoot\n          }));\n        }\n      }\n    };\n  }\n};\n\nvar parseTransformString = function parseTransformString(transformString) {\n  var transform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    flipX: false,\n    flipY: false,\n    rotate: 0\n  };\n  return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n    var parts = n.toLowerCase().split('-');\n    var first = parts[0];\n    var rest = parts.slice(1).join('-');\n\n    if (first && rest === 'h') {\n      acc.flipX = true;\n      return acc;\n    }\n\n    if (first && rest === 'v') {\n      acc.flipY = true;\n      return acc;\n    }\n\n    rest = parseFloat(rest);\n\n    if (isNaN(rest)) {\n      return acc;\n    }\n\n    switch (first) {\n      case 'grow':\n        acc.size = acc.size + rest;\n        break;\n\n      case 'shrink':\n        acc.size = acc.size - rest;\n        break;\n\n      case 'left':\n        acc.x = acc.x - rest;\n        break;\n\n      case 'right':\n        acc.x = acc.x + rest;\n        break;\n\n      case 'up':\n        acc.y = acc.y - rest;\n        break;\n\n      case 'down':\n        acc.y = acc.y + rest;\n        break;\n\n      case 'rotate':\n        acc.rotate = acc.rotate + rest;\n        break;\n    }\n\n    return acc;\n  }, transform);\n};\nvar PowerTransforms = {\n  mixout: function mixout() {\n    return {\n      parse: {\n        transform: function transform(transformString) {\n          return parseTransformString(transformString);\n        }\n      }\n    };\n  },\n  hooks: function hooks() {\n    return {\n      parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n        var transformString = node.getAttribute('data-fa-transform');\n\n        if (transformString) {\n          accumulator.transform = parseTransformString(transformString);\n        }\n\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers) {\n    providers.generateAbstractTransformGrouping = function (_ref) {\n      var main = _ref.main,\n          transform = _ref.transform,\n          containerWidth = _ref.containerWidth,\n          iconWidth = _ref.iconWidth;\n      var outer = {\n        transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n      };\n      var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n      var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n      var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n      var inner = {\n        transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n      };\n      var path = {\n        transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n      };\n      var operations = {\n        outer: outer,\n        inner: inner,\n        path: path\n      };\n      return {\n        tag: 'g',\n        attributes: _objectSpread2({}, operations.outer),\n        children: [{\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.inner),\n          children: [{\n            tag: main.icon.tag,\n            children: main.icon.children,\n            attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n          }]\n        }]\n      };\n    };\n  }\n};\n\nvar ALL_SPACE = {\n  x: 0,\n  y: 0,\n  width: '100%',\n  height: '100%'\n};\n\nfunction fillBlack(_abstract) {\n  var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n  if (_abstract.attributes && (_abstract.attributes.fill || force)) {\n    _abstract.attributes.fill = 'black';\n  }\n\n  return _abstract;\n}\n\nfunction deGroup(_abstract2) {\n  if (_abstract2.tag === 'g') {\n    return _abstract2.children;\n  } else {\n    return [_abstract2];\n  }\n}\n\nvar Masks = {\n  hooks: function hooks() {\n    return {\n      parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n        var maskData = node.getAttribute('data-fa-mask');\n        var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(function (i) {\n          return i.trim();\n        }));\n\n        if (!mask.prefix) {\n          mask.prefix = getDefaultUsablePrefix();\n        }\n\n        accumulator.mask = mask;\n        accumulator.maskId = node.getAttribute('data-fa-mask-id');\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers) {\n    providers.generateAbstractMask = function (_ref) {\n      var children = _ref.children,\n          attributes = _ref.attributes,\n          main = _ref.main,\n          mask = _ref.mask,\n          explicitMaskId = _ref.maskId,\n          transform = _ref.transform;\n      var mainWidth = main.width,\n          mainPath = main.icon;\n      var maskWidth = mask.width,\n          maskPath = mask.icon;\n      var trans = transformForSvg({\n        transform: transform,\n        containerWidth: maskWidth,\n        iconWidth: mainWidth\n      });\n      var maskRect = {\n        tag: 'rect',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          fill: 'white'\n        })\n      };\n      var maskInnerGroupChildrenMixin = mainPath.children ? {\n        children: mainPath.children.map(fillBlack)\n      } : {};\n      var maskInnerGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.inner),\n        children: [fillBlack(_objectSpread2({\n          tag: mainPath.tag,\n          attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n        }, maskInnerGroupChildrenMixin))]\n      };\n      var maskOuterGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.outer),\n        children: [maskInnerGroup]\n      };\n      var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n      var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n      var maskTag = {\n        tag: 'mask',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          id: maskId,\n          maskUnits: 'userSpaceOnUse',\n          maskContentUnits: 'userSpaceOnUse'\n        }),\n        children: [maskRect, maskOuterGroup]\n      };\n      var defs = {\n        tag: 'defs',\n        children: [{\n          tag: 'clipPath',\n          attributes: {\n            id: clipId\n          },\n          children: deGroup(maskPath)\n        }, maskTag]\n      };\n      children.push(defs, {\n        tag: 'rect',\n        attributes: _objectSpread2({\n          fill: 'currentColor',\n          'clip-path': \"url(#\".concat(clipId, \")\"),\n          mask: \"url(#\".concat(maskId, \")\")\n        }, ALL_SPACE)\n      });\n      return {\n        children: children,\n        attributes: attributes\n      };\n    };\n  }\n};\n\nvar MissingIconIndicator = {\n  provides: function provides(providers) {\n    var reduceMotion = false;\n\n    if (WINDOW.matchMedia) {\n      reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n\n    providers.missingIconAbstract = function () {\n      var gChildren = [];\n      var FILL = {\n        fill: 'currentColor'\n      };\n      var ANIMATION_BASE = {\n        attributeType: 'XML',\n        repeatCount: 'indefinite',\n        dur: '2s'\n      }; // Ring\n\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n        })\n      });\n\n      var OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n        attributeName: 'opacity'\n      });\n\n      var dot = {\n        tag: 'circle',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          cx: '256',\n          cy: '364',\n          r: '28'\n        }),\n        children: []\n      };\n\n      if (!reduceMotion) {\n        dot.children.push({\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n            attributeName: 'r',\n            values: '28;14;28;28;14;28;'\n          })\n        }, {\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;1;1;0;1;'\n          })\n        });\n      }\n\n      gChildren.push(dot);\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          opacity: '1',\n          d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n        }),\n        children: reduceMotion ? [] : [{\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;0;0;0;1;'\n          })\n        }]\n      });\n\n      if (!reduceMotion) {\n        // Exclamation\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '0',\n            d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n          }),\n          children: [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '0;0;1;1;0;0;'\n            })\n          }]\n        });\n      }\n\n      return {\n        tag: 'g',\n        attributes: {\n          'class': 'missing'\n        },\n        children: gChildren\n      };\n    };\n  }\n};\n\nvar SvgSymbols = {\n  hooks: function hooks() {\n    return {\n      parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n        var symbolData = node.getAttribute('data-fa-symbol');\n        var symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n        accumulator['symbol'] = symbol;\n        return accumulator;\n      }\n    };\n  }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n  mixoutsTo: api\n});\nvar noAuto$1 = api.noAuto;\nvar config$1 = api.config;\nvar library$1 = api.library;\nvar dom$1 = api.dom;\nvar parse$1 = api.parse;\nvar findIconDefinition$1 = api.findIconDefinition;\nvar toHtml$1 = api.toHtml;\nvar icon = api.icon;\nvar layer = api.layer;\nvar text = api.text;\nvar counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\n","export interface Descriptor {\n  configurable?: boolean;\n  enumerable?: boolean;\n  writable?: boolean;\n  get?(): any;\n  set?(v: any): void;\n  initializer?: null | (() => any);\n  value?: any;\n}\nexport type LegacyDecorator = (\n  target: object,\n  prop: unknown,\n  desc: Descriptor,\n) => Descriptor | null | undefined | void;\n\nexport type LegacyClassDecorator = (target: new (...args: any) => any) =>\n  | {\n      new (...args: any): any;\n    }\n  | null\n  | undefined\n  | void;\n\nconst deferred: WeakMap<\n  object,\n  Map<string | number | symbol, Descriptor>\n> = new WeakMap();\n\nfunction deferDecorator(\n  proto: object,\n  prop: string | number | symbol,\n  desc: Descriptor,\n): void {\n  let map = deferred.get(proto);\n  if (!map) {\n    map = new Map();\n    deferred.set(proto, map);\n  }\n  map.set(prop, desc);\n}\n\nfunction findDeferredDecorator(\n  target: object,\n  prop: string | number | symbol,\n): Descriptor | undefined {\n  let cursor: object = (target as any).prototype;\n  while (cursor) {\n    let desc = deferred.get(cursor)?.get(prop);\n    if (desc) {\n      return desc;\n    }\n    cursor = Object.getPrototypeOf(cursor);\n  }\n}\n\nfunction decorateFieldV1(\n  target: { prototype: object },\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n  initializer?: () => any,\n): void {\n  return decorateFieldV2(target.prototype, prop, decorators, initializer);\n}\n\nfunction decorateFieldV2(\n  prototype: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n  initializer?: () => any,\n): void {\n  let desc: Descriptor = {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null,\n  };\n  if (initializer) {\n    desc.initializer = initializer;\n  }\n  for (let decorator of decorators) {\n    desc = decorator(prototype, prop, desc) || desc;\n  }\n  if (desc.initializer === undefined) {\n    Object.defineProperty(prototype, prop, desc);\n  } else {\n    deferDecorator(prototype, prop, desc);\n  }\n}\n\nfunction decorateMethodV1(\n  { prototype }: { prototype: object },\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n): void {\n  return decorateMethodV2(prototype, prop, decorators);\n}\n\nfunction decorateMethodV2(\n  prototype: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n): void {\n  const origDesc = Object.getOwnPropertyDescriptor(prototype, prop);\n  let desc: Descriptor = { ...origDesc };\n  for (let decorator of decorators) {\n    desc = decorator(prototype, prop, desc) || desc;\n  }\n  if (desc.initializer !== undefined) {\n    desc.value = desc.initializer ? desc.initializer.call(prototype) : void 0;\n    desc.initializer = undefined;\n  }\n  Object.defineProperty(prototype, prop, desc);\n}\n\nfunction initializeDeferredDecorator(\n  target: object,\n  prop: string | number | symbol,\n): void {\n  let desc = findDeferredDecorator(target.constructor, prop);\n  if (desc) {\n    Object.defineProperty(target, prop, {\n      enumerable: desc.enumerable,\n      configurable: desc.configurable,\n      writable: desc.writable,\n      value: desc.initializer ? desc.initializer.call(target) : undefined,\n    });\n  }\n}\n\nfunction decorateClass(\n  target: new (...args: any) => any,\n  decorators: LegacyClassDecorator[],\n): new (...args: any) => any {\n  return decorators.reduce(\n    (accum, decorator) => decorator(accum) || accum,\n    target,\n  );\n}\n\nfunction decoratePOJO(\n  pojo: object,\n  decorated: [\n    'field' | 'method',\n    string | number | symbol,\n    LegacyDecorator[],\n  ][],\n) {\n  for (let [type, prop, decorators] of decorated) {\n    if (type === 'field') {\n      decoratePojoField(pojo, prop, decorators);\n    } else {\n      decorateMethodV2(pojo, prop, decorators);\n    }\n  }\n  return pojo;\n}\nfunction decoratePojoField(\n  pojo: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n) {\n  let desc: Descriptor = {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: () => Object.getOwnPropertyDescriptor(pojo, prop)?.value,\n  };\n  for (let decorator of decorators) {\n    desc = decorator(pojo, prop, desc) || desc;\n  }\n  if (desc.initializer) {\n    desc.value = desc.initializer.call(pojo);\n    delete desc.initializer;\n  }\n  Object.defineProperty(pojo, prop, desc);\n}\n\nexport {\n  decorateFieldV1 as f,\n  decorateFieldV2 as g,\n  decorateMethodV1 as m,\n  decorateMethodV2 as n,\n  initializeDeferredDecorator as i,\n  decorateClass as c,\n  decoratePOJO as p,\n};\n","var U=Object.defineProperty;var q=Object.prototype.hasOwnProperty;var h=Object.getOwnPropertySymbols,B=Object.prototype.propertyIsEnumerable;var f=(n,o,t)=>o in n?U(n,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[o]=t,e=(n,o)=>{for(var t in o||(o={}))q.call(o,t)&&f(n,t,o[t]);if(h)for(var t of h(o))B.call(o,t)&&f(n,t,o[t]);return n};function R(n){let o=\"eq neq\",t=\"gt gte le lte\",x=\"and or not\",A=\"let each each-in if else unless\",y=\"log debugger\",I=\"has-block concat fn component helper modifier get hash query-params\",L=\"action on\",O=\"outlet yield\",k=\"true false undefined null\";function i(H){return new RegExp(`\\\\b(?:${H.split(\" \").join(\"|\")})\\\\b`)}let w=\"(\\\\()\",M=\"(\\\\{\\\\{\\\\{?)\",b=\"[-+*/_~!@$%^=<>{}\\\\w]+\",a=/[A-Za-z0-9]+/,P=l.either(a,/[a-zA-Z0-9]+\\.[a-zA-Z0-9-]+/,l.concat(a,/::/,/-?/,a)),u=/\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][+-]?\\d+)?/,m=new RegExp(l.either(/\"[^{\"]+/,/\"/,/'[^{']+/,/'/,/\"[^\"]+\"/,/'[^']+'/)),c={\"parameter argument property\":{pattern:/@[\\w\\d-_]+/}},r={punctuation:[{pattern:/[!#%&:()*+,.\\/;<=>\\[\\\\\\]^`{|}~]+/},{pattern:/^=/,alias:\"attr-equals\"},{pattern:/\\/?>/}]},S={\"function-name\":[{pattern:new RegExp(w+b),lookbehind:!0},{pattern:new RegExp(M+b),lookbehind:!0}]},_={builtin:i([L,O,y,A].join(\" \")),keyword:i([I,k].join(\" \")),operator:i([o,t,x,\"as\"].join(\" \"))},j={function:{greedy:!0,pattern:/\\([\\S-_\\d]+\\b/,inside:e(e(e({},r),S),_)}},T={\"this-expression\":{pattern:/this\\.[\\S]+/,lookbehind:!0,greedy:!0,inside:e(e({},r),{namespace:/this/,property:/[\\S]+/})}},C={\"member-expression\":{pattern:/[\\S]+\\.[\\S]+/,lookbehind:!0,greedy:!0,inside:e(e({},r),{constant:/[\\S]+/,property:/[\\S]+/})}},p=e(e(e(e(e(e(e(e(e({},j),r),T),C),c),{number:u,boolean:/\\b(?:true|false)\\b/}),_),S),{\"attr-name\":/^[^=]+=/,string:m,variable:/\\b[A-Za-z0-9_-]+\\b/}),s={mustache:{pattern:/\\{\\{\\{?\\/?[^}]+?\\}?\\}\\}/,lookbehind:!0,alias:\"punctuation\",greedy:!0,inside:e(e({},{\"sub-expression\":{alias:\"punctuation\",pattern:/\\([^)]+\\)/,lookbehind:!0,greedy:!0,inside:p}}),p)}},d={string:{pattern:m,inside:s}};p.string=d.string;let E=n.languages.markup;if(!E)throw new Error(\"prism-markup is required\");n.languages.glimmer=e(e({comment:[{pattern:/\\{\\{!--[\\s\\S]*?--\\}\\}/},{pattern:/\\{\\{![\\s\\S]*?\\}\\}/}],number:u},s),{tag:e(e({},E.tag),{inside:e(e(e(e(e({number:u},c),s),{tag:e(e({},E.tag.inside.tag),{inside:e(e({},r),{\"class-name\":new RegExp(P)})}),\"attr-name\":{pattern:/\\b[^=\\b]+=/,inside:e(e(e(e({},d),r),c),s)}}),r),d)})})}function z(n){return g(\"(?=\",n,\")\")}function D(n){return g(\"(\",n,\")?\")}function g(...n){return n.map(t=>N(t)).join(\"\")}function G(...n){return\"(\"+n.map(t=>N(t)).join(\"|\")+\")\"}function N(n){return n?typeof n==\"string\"?n:n.source:null}var l={lookahead:z,either:G,optional:D,concat:g};export{R as setup};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.18.5';\nvar current_codepage = 1200, current_ansi = 1252;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t/*::[*/0/*::]*/:    1252, /* ANSI */\n\t/*::[*/1/*::]*/:   65001, /* DEFAULT */\n\t/*::[*/2/*::]*/:   65001, /* SYMBOL */\n\t/*::[*/77/*::]*/:  10000, /* MAC */\n\t/*::[*/128/*::]*/:   932, /* SHIFTJIS */\n\t/*::[*/129/*::]*/:   949, /* HANGUL */\n\t/*::[*/130/*::]*/:  1361, /* JOHAB */\n\t/*::[*/134/*::]*/:   936, /* GB2312 */\n\t/*::[*/136/*::]*/:   950, /* CHINESEBIG5 */\n\t/*::[*/161/*::]*/:  1253, /* GREEK */\n\t/*::[*/162/*::]*/:  1254, /* TURKISH */\n\t/*::[*/163/*::]*/:  1258, /* VIETNAMESE */\n\t/*::[*/177/*::]*/:  1255, /* HEBREW */\n\t/*::[*/178/*::]*/:  1256, /* ARABIC */\n\t/*::[*/186/*::]*/:  1257, /* BALTIC */\n\t/*::[*/204/*::]*/:  1251, /* RUSSIAN */\n\t/*::[*/222/*::]*/:   874, /* THAI */\n\t/*::[*/238/*::]*/:  1250, /* EASTEUROPE */\n\t/*::[*/255/*::]*/:  1252, /* OEM */\n\t/*::[*/69/*::]*/:   6969  /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array<number>*/ { var o/*:Array<number>*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nvar $cptable;\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nexport { set_cptable };\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n  var o = \"\";\n  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n  for (var i = 0; i < input.length; ) {\n    c1 = input.charCodeAt(i++);\n    e1 = c1 >> 2;\n    c2 = input.charCodeAt(i++);\n    e2 = (c1 & 3) << 4 | c2 >> 4;\n    c3 = input.charCodeAt(i++);\n    e3 = (c2 & 15) << 2 | c3 >> 6;\n    e4 = c3 & 63;\n    if (isNaN(c2)) {\n      e3 = e4 = 64;\n    } else if (isNaN(c3)) {\n      e4 = 64;\n    }\n    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n  }\n  return o;\n}\nfunction Base64_decode(input) {\n  var o = \"\";\n  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n  input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n  for (var i = 0; i < input.length; ) {\n    e1 = Base64_map.indexOf(input.charAt(i++));\n    e2 = Base64_map.indexOf(input.charAt(i++));\n    c1 = e1 << 2 | e2 >> 4;\n    o += String.fromCharCode(c1);\n    e3 = Base64_map.indexOf(input.charAt(i++));\n    c2 = (e2 & 15) << 4 | e3 >> 2;\n    if (e3 !== 64) {\n      o += String.fromCharCode(c2);\n    }\n    e4 = Base64_map.indexOf(input.charAt(i++));\n    c3 = (e3 & 3) << 6 | e4;\n    if (e4 !== 64) {\n      o += String.fromCharCode(c3);\n    }\n  }\n  return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array<string>*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array<number>*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array<number>*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") { throw \"wtf\"; }\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array<string>};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days/*:Array<Array<string> >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array<Array<string> >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]=  'General';\n\tt[1]=  '0';\n\tt[2]=  '0.00';\n\tt[3]=  '#,##0';\n\tt[4]=  '#,##0.00';\n\tt[9]=  '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0:  'General',\n\t1:  '0',\n\t2:  '0.00',\n\t3:  '#,##0',\n\t4:  '#,##0.00',\n\t9:  '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5:  37, 6:  38, 7:  39, 8:  40,         //  5 -> 37 ...  8 -> 40\n\n\t23:  0, 24:  0, 25:  0, 26:  0,         // 23 ->  0 ... 26 ->  0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59:  1, 60:  2, 61:  3, 62:  4,         // 59 ->  1 ... 62 ->  4\n\n\t67:  9, 68: 10,                         // 67 ->  9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14,                 // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17,         // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22,                 // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47,                 // 79 -> 45 ... 81 -> 47\n\t82: 0                                   // 82 ->  0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t//  5 -- Currency,   0 decimal, black negative\n\t5:  '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t//  6 -- Currency,   0 decimal, red   negative\n\t6:  '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t//  7 -- Currency,   2 decimal, black negative\n\t7:  '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t//  8 -- Currency,   2 decimal, red   negative\n\t8:  '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $  Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $  Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array<number>*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nvar SSFbasedate = /*#__PURE__*/new Date(1899, 11, 31, 0, 0, 0);\nvar SSFdnthresh = /*#__PURE__*/SSFbasedate.getTime();\nvar SSFbase1904 = /*#__PURE__*/new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= SSFbase1904) epoch += 24*60*60*1000;\n\treturn (epoch - (SSFdnthresh + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/SSFbasedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n  /* TODO: properly adjust y/m/d and  */\n  o[0] -= 581;\n  var dow = date.getDay();\n  if(date < 60) dow = (dow + 6) % 7;\n  return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array<string>*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone)) {\n\t\to = write_num_flt(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(/*::String(*/r[4]/*::)*/.length,7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", /*::String(*/r[1]/*::)*/, ff[1]);\n\t\tif(oa.charAt(oa.length-1) == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + /*::String(*/r[2]/*::)*/ + \"/\" + /*::String(*/r[3]/*::)*/;\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/))) {\n\t\to = pad0r(val, 0);\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0?]+)\\.([#0]+)$/))) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n\t\tri = dec(val, r[1].length);\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(ri,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"###,##0.00\": return write_num_flt(type, \"#,##0.00\", val);\n\t\tcase \"###,###\":\n\t\tcase \"##,###\":\n\t\tcase \"#,###\": var x = commaify(pad0r(aval,0)); return x !== \"0\" ? sign + x : \"\";\n\t\tcase \"###,###.00\": return write_num_flt(type, \"###,##0.00\",val).replace(/^0\\./,\".\");\n\t\tcase \"#,###.00\": return write_num_flt(type, \"#,##0.00\",val).replace(/^0\\./,\".\");\n\t\tdefault:\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nfunction write_num_cm2(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_pct2(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_exp2(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp2(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(!o.match(/[Ee]/)) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nfunction write_num_int(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array<string>*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone)) {\n\t\to = write_num_int(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(/*::String(*/r[4]/*::)*/.length,7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", /*::String(*/r[1]/*::)*/, ff[1]);\n\t\tif(oa.charAt(oa.length-1) == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + /*::String(*/r[2]/*::)*/ + \"/\" + /*::String(*/r[3]/*::)*/;\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/))) {\n\t\to = \"\" + val;\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0]+)\\.([#0]+)$/))) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\"+val).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(0,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"###,###\":\n\t\tcase \"##,###\":\n\t\tcase \"#,###\": var x = commaify(\"\"+aval); return x !== \"0\" ? sign + x : \"\";\n\t\tdefault:\n\t\t\tif(fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nfunction write_num(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\treturn (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n}\nfunction SSF_split_fmt(fmt/*:string*/)/*:Array<string>*/ {\n\tvar out/*:Array<string>*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >=  60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >=  60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >=  60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t}\n\t\telse if(decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tjj = ostr.indexOf(\".\")-1;\n\t\t\tfor(i=decpt; i>= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t\tjj = ostr.indexOf(\".\")+1;\n\t\t\tfor(i=decpt; i<out.length; ++i) {\n\t\t\t\tif(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j<out[i].v.length; ++j) {\n\t\t\t\t\tif(jj<ostr.length) vv += ostr.charAt(jj++);\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t}\n\t}\n\tfor(i=0; i<out.length; ++i) if(out[i] != null && 'n?'.indexOf(out[i].t)>-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\":  if(v == thresh) return true; break;\n\t\tcase \">\":  if(v >  thresh) return true; break;\n\t\tcase \"<\":  if(v <  thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array<string>*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array<number>;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array<number>;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array<number>*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array<number>*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0],  T2 = TT[1],  T3 = TT[2],  T4 = TT[3],  T5 = TT[4];\nvar T6 = TT[5],  T7 = TT[6],  T8 = TT[7],  T9 = TT[8],  Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array<number>*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports = {};\nexports.version = '1.2.1';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n   high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n   add 1980 to stored year\n   stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = {}); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array<number>*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array<RawBytes>*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array<RawBytes>*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array<RawBytes>*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array<number>*/ = [], q/*:Array<number>*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n    DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array<RawBytes>*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array<RawBytes>*/, start/*:number*/, fat_addrs/*:Array<number>*/, ssz/*:number*/, chkd/*:?Array<boolean>*/)/*:SectorEntry*/ {\n\tvar buf/*:Array<number>*/ = [], buf_chain/*:Array<any>*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array<RawBytes>*/, dir_start/*:number*/, fat_addrs/*:Array<number>*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array<boolean>*/ = [], buf/*:Array<number>*/ = [], buf_chain/*:Array<RawBytes>*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array<number>*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname:  name,\n\t\t\ttype:  blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL:     blob.read_shift(4, 'i'),\n\t\t\tR:     blob.read_shift(4, 'i'),\n\t\t\tC:     blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\tif(!s) {\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name =  filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array<number>*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L =  [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i<T-1; ++i) o.write_shift(-4, i+1);\n\t\tif(w) { ++i; o.write_shift(-4, ENDOFCHAIN); }\n\t};\n\tT = i = 0;\n\tfor(T+=L[1]; i<T; ++i) o.write_shift(-4, consts.DIFSECT);\n\tfor(T+=L[2]; i<T; ++i) o.write_shift(-4, consts.FATSECT);\n\tchainit(L[3]);\n\tchainit(L[4]);\n\tvar j/*:number*/ = 0, flen/*:number*/ = 0;\n\tvar file/*:CFBEntry*/ = cfb.FileIndex[0];\n\tfor(; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(flen < 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x01FF) >> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array<string>*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array<string>*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/*  LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [   3,   4,   5,   6,   7,   8,   9,  10,  11,  13 , 15,  17,  19,  23,  27,  31,  35,  43,  51,  59,  67,  83,  99, 115, 131, 163, 195, 227, 258 ];\n\n/*  DST_ID = [  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,  14,  15,  16,  17,  18,  19,   20,   21,   22,   23,   24,   25,   26,    27,    28,    29 ]; */\nvar DST_LN = [  1,  2,  3,  4,  5,  7,  9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<<n)-1);\n\tvar v = buf[h] >>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |=  v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |=  v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count  = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<<cleni)] = (cleni&15) | (i<<4);\n\t\t}\n\t}\n\treturn maxlen;\n}\n\n/* Fixed Huffman */\nvar fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\nvar fix_dmap = use_typed_arrays ? new Uint16Array(32)  : zero_fill_array(32);\nif(!use_typed_arrays) {\n\tfor(var i = 0; i < 512; ++i) fix_lmap[i] = 0;\n\tfor(i = 0; i < 32; ++i) fix_dmap[i] = 0;\n}\n(function() {\n\tvar dlens/*:Array<number>*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array<number>*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token  */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128)   : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count =  use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<<cleni)] = (cleni&7) | (i<<3);\n\t\t}\n\t}\n\n\t/* read literal and dist codes at once */\n\tvar hcodes/*:Array<number>*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4,  (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4,  (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n<table class=3DMsoTableGrid border=3D1 cellspacing=3D0 cellpadding=3D0 width=\n=\"70%\"\n```\n*/\nfunction write_quoted_printable(text/*:string*/)/*:string*/ {\n\tvar encoded = text.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF=]/g, function(c) {\n\t\tvar w = c.charCodeAt(0).toString(16).toUpperCase();\n\t\treturn \"=\" + (w.length == 1 ? \"0\" + w : w);\n\t});\n\n\tencoded = encoded.replace(/ $/mg, \"=20\").replace(/\\t$/mg, \"=09\");\n\n\tif(encoded.charAt(0) == \"\\n\") encoded = \"=0D\" + encoded.slice(1);\n\tencoded = encoded.replace(/\\r(?!\\n)/mg, \"=0D\").replace(/\\n\\n/mg, \"\\n=0A\").replace(/([^\\r\\n])\\n/mg, \"$1=0A\");\n\n\tvar o/*:Array<string>*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array<string>*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array<string>*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nlet _fs = void 0;\nfunction set_fs(fs) { _fs = fs; }\nexport { set_fs };\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array<any>*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = /*#__PURE__*/new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = /*#__PURE__*/new Date();\nvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/refdate.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\nvar refoffset = /*#__PURE__*/refdate.getTimezoneOffset();\nfunction numdate(v/*:number*/)/*:Date*/ {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date_1 = /*#__PURE__*/new Date('2017-02-19T19:06:09.000Z');\nvar good_pd_date = /*#__PURE__*/isNaN(/*#__PURE__*/good_pd_date_1.getFullYear()) ? /*#__PURE__*/new Date('2/19/17') : good_pd_date_1;\nvar good_pd = /*#__PURE__*/good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str/*:string|Date*/, fixdate/*:?number*/)/*:Date*/ {\n\tvar d = new Date(str);\n\tif(good_pd) {\n\t\t/*:: if(fixdate == null) fixdate = 0; */\n\t\tif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr/*:Array<number>*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [];\n\tfor(var i = 0; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tvar lower = s.toLowerCase();\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099) return n;\n\tif((m > 0 || d > 1) && y != 101) return o;\n\tif(s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array<string>*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i<k.length; ++i) {\n\t\tvar n = k[i].replace(/^Root Entry[\\/]/,\"\").toLowerCase();\n\t\tif(f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];\n\t}\n\treturn null;\n}\n\nfunction getzipfile(zip, file/*:string*/) {\n\tvar o = safegetzipfile(zip, file);\n\tif(o == null) throw new Error(\"Cannot find file \" + file + \" in zip\");\n\treturn o;\n}\n\nfunction getzipdata(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {\n\tif(!safe) return getdata(getzipfile(zip, file));\n\tif(!file) return null;\n\ttry { return getzipdata(zip, file); } catch(e) { return null; }\n}\n\nfunction getzipstr(zip, file/*:string*/, safe/*:?boolean*/)/*:?string*/ {\n\tif(!safe) return getdatastr(getzipfile(zip, file));\n\tif(!file) return null;\n\ttry { return getzipstr(zip, file); } catch(e) { return null; }\n}\n\nfunction getzipbin(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {\n\tif(!safe) return getdatabin(getzipfile(zip, file));\n\tif(!file) return null;\n\ttry { return getzipbin(zip, file); } catch(e) { return null; }\n}\n\nfunction zipentries(zip) {\n\tvar k = zip.FullPaths || keys(zip.files), o = [];\n\tfor(var i = 0; i < k.length; ++i) if(k[i].slice(-1) != '/') o.push(k[i].replace(/^Root Entry[\\/]/, \"\"));\n\treturn o.sort();\n}\n\nfunction zip_add_file(zip, path, content) {\n\tif(zip.FullPaths) {\n\t\tif(typeof content == \"string\") {\n\t\t\tvar res;\n\t\t\tif(has_buf) res = Buffer_from(content);\n\t\t\t/* TODO: investigate performance in Edge 13 */\n\t\t\t//else if(typeof TextEncoder !== \"undefined\") res = new TextEncoder().encode(content);\n\t\t\telse res = utf8decode(content);\n\t\t\treturn CFB.utils.cfb_add(zip, path, res);\n\t\t}\n\t\tCFB.utils.cfb_add(zip, path, content);\n\t}\n\telse zip.file(path, content);\n}\n\nfunction zip_new() { return CFB.utils.cfb_new(); }\n\nfunction zip_read(d, o) {\n\tswitch(o.type) {\n\t\tcase \"base64\": return CFB.read(d, { type: \"base64\" });\n\t\tcase \"binary\": return CFB.read(d, { type: \"binary\" });\n\t\tcase \"buffer\": case \"array\": return CFB.read(d, { type: \"buffer\" });\n\t}\n\tthrow new Error(\"Unrecognized type \" + o.type);\n}\n\nfunction resolve_path(path/*:string*/, base/*:string*/)/*:string*/ {\n\tif(path.charAt(0) == \"/\") return path.slice(1);\n\tvar result = base.split('/');\n\tif(base.slice(-1) != \"/\") result.pop(); // folder path\n\tvar target = path.split('/');\n\twhile (target.length !== 0) {\n\t\tvar step = target.shift();\n\t\tif (step === '..') result.pop();\n\t\telse if (step !== '.') result.push(step);\n\t}\n\treturn result.join('/');\n}\nvar XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n';\nvar attregexg=/([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'&quot;': '\"',\n\t'&apos;': \"'\",\n\t'&gt;': '>',\n\t'&lt;': '<',\n\t'&amp;': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\treturn function unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"<![CDATA[\");\n\t\tif(i == -1) return s.replace(encregex, function($$, $1) { return encodings[$$]||String.fromCharCode(parseInt($1,$$.indexOf(\"x\")>-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3));\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"<br/>\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\&#10;\"); }\n\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': case 'TRUE': return true;\n\t\t/* case '0': case 'false': case 'FALSE':*/\n\t\tdefault: return false;\n\t}\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array<string>*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\n// matches <foo>...</foo> extracts content\nvar matchtag = /*#__PURE__*/(function() {\n\tvar mtcache/*:{[k:string]:RegExp}*/ = ({}/*:any*/);\n\treturn function matchtag(f/*:string*/,g/*:?string*/)/*:RegExp*/ {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)</(?:\\\\w+:)?'+f+'>',((g||\"\")/*:any*/)));\n\t};\n})();\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt',   '>'], ['lt',   '<'], ['amp',  '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+</g,\"<\")\n\t\t\t\t// Replace remaining new lines and spaces with space\n\t\t\t\t.replace(/[\\t\\n\\r ]+/g, \" \")\n\t\t\t\t// Replace <br> tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = /*#__PURE__*/(function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)</(?:vt:)?\" + bt + \">\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)</;\nfunction parseVector(data/*:string*/, opts)/*:Array<{v:string,t:string}>*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array<string>*/ = data.match(vtregex(h.baseType))||[];\n\tvar res/*:Array<any>*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '</' + f + '>'; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '</' + f : \"/\") + '>';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/&quot;/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?><!\\/:]*:|)([^\\s?<>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o':    'urn:schemas-microsoft-com:office:office',\n\t'x':    'urn:schemas-microsoft-com:office:excel',\n\t'ss':   'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt':   'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv':   'http://macVmlSchemaUri',\n\t'v':    'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array<Array<RawBytes> >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };\nvar __toBuffer = has_buf ? function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(\"\").replace(chr0,''); };\nvar __utf16le = has_buf ? function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; } : ___utf16le;\n\nvar ___hexlify = function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<s+l; ++i) ss.push((\"0\" + b[i].toString(16)).slice(-2)); return ss.join(\"\"); };\nvar __hexlify = has_buf ? function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { return Buffer.isBuffer(b)/*:: && b instanceof Buffer*/ ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); } : ___hexlify;\n\nvar ___utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(\"\"); };\nvar __utf8 = has_buf ? function utf8_b(b/*:RawBytes|CFBlob*/, s/*:number*/, e/*:number*/) { return (Buffer.isBuffer(b)/*:: && (b instanceof Buffer)*/) ? b.toString('utf8',s,e) : ___utf8(b,s,e); } : ___utf8;\n\nvar ___lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 +  __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 +  __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE  = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cppayload = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cppayload[0];\n\t\t\t}\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t}\n\t\tsize = val.length;\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase  1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase  2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase  3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase  4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase  8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array<Block>*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array<string>*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\n//function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\n//function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); }\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range.  If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0),  q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? Array.isArray(_ws) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || (dense ? ([]/*:any*/) : ({}/*:any*/));\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __R = _R + R, __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(!ws[__R]) ws[__R] = [];\n\t\t\t\tif(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n\t\t\t\tws[__R][__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_cell(({c:__C,r:__R}/*:any*/));\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY    = 0x0000;\n//var VT_NULL     = 0x0001;\nvar VT_I2       = 0x0002;\nvar VT_I4       = 0x0003;\n//var VT_R4       = 0x0004;\n//var VT_R8       = 0x0005;\n//var VT_CY       = 0x0006;\n//var VT_DATE     = 0x0007;\n//var VT_BSTR     = 0x0008;\n//var VT_ERROR    = 0x000A;\nvar VT_BOOL     = 0x000B;\nvar VT_VARIANT  = 0x000C;\n//var VT_DECIMAL  = 0x000E;\n//var VT_I1       = 0x0010;\n//var VT_UI1      = 0x0011;\n//var VT_UI2      = 0x0012;\nvar VT_UI4      = 0x0013;\n//var VT_I8       = 0x0014;\n//var VT_UI8      = 0x0015;\n//var VT_INT      = 0x0016;\n//var VT_UINT     = 0x0017;\nvar VT_LPSTR    = 0x001E;\n//var VT_LPWSTR   = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB     = 0x0041;\n//var VT_STREAM   = 0x0042;\n//var VT_STORAGE  = 0x0043;\n//var VT_STREAMED_Object  = 0x0044;\n//var VT_STORED_Object    = 0x0045;\n//var VT_BLOB_Object      = 0x0046;\nvar VT_CF       = 0x0047;\n//var VT_CLSID    = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\nvar VT_VECTOR   = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR   = 0x101E;\n//var VT_ARRAY    = 0x2000;\n\nvar VT_STRING   = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR     = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM   = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Category', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'PresentationFormat', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'ByteCount', t: VT_I4 },\n\t/*::[*/0x05/*::]*/: { n: 'LineCount', t: VT_I4 },\n\t/*::[*/0x06/*::]*/: { n: 'ParagraphCount', t: VT_I4 },\n\t/*::[*/0x07/*::]*/: { n: 'SlideCount', t: VT_I4 },\n\t/*::[*/0x08/*::]*/: { n: 'NoteCount', t: VT_I4 },\n\t/*::[*/0x09/*::]*/: { n: 'HiddenCount', t: VT_I4 },\n\t/*::[*/0x0a/*::]*/: { n: 'MultimediaClipCount', t: VT_I4 },\n\t/*::[*/0x0b/*::]*/: { n: 'ScaleCrop', t: VT_BOOL },\n\t/*::[*/0x0c/*::]*/: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t/*::[*/0x0d/*::]*/: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t/*::[*/0x0e/*::]*/: { n: 'Manager', t: VT_STRING },\n\t/*::[*/0x0f/*::]*/: { n: 'Company', t: VT_STRING },\n\t/*::[*/0x10/*::]*/: { n: 'LinksUpToDate', t: VT_BOOL },\n\t/*::[*/0x11/*::]*/: { n: 'CharacterCount', t: VT_I4 },\n\t/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },\n\t/*::[*/0x16/*::]*/: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },\n\t/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },\n\t/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },\n\t/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },\n\t/*::[*/0x1D/*::]*/: { n: 'Version', t: VT_STRING },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Title', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'Subject', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'Author', t: VT_STRING },\n\t/*::[*/0x05/*::]*/: { n: 'Keywords', t: VT_STRING },\n\t/*::[*/0x06/*::]*/: { n: 'Comments', t: VT_STRING },\n\t/*::[*/0x07/*::]*/: { n: 'Template', t: VT_STRING },\n\t/*::[*/0x08/*::]*/: { n: 'LastAuthor', t: VT_STRING },\n\t/*::[*/0x09/*::]*/: { n: 'RevNumber', t: VT_STRING },\n\t/*::[*/0x0A/*::]*/: { n: 'EditTime', t: VT_FILETIME },\n\t/*::[*/0x0B/*::]*/: { n: 'LastPrinted', t: VT_FILETIME },\n\t/*::[*/0x0C/*::]*/: { n: 'CreatedDate', t: VT_FILETIME },\n\t/*::[*/0x0D/*::]*/: { n: 'ModifiedDate', t: VT_FILETIME },\n\t/*::[*/0x0E/*::]*/: { n: 'PageCount', t: VT_I4 },\n\t/*::[*/0x0F/*::]*/: { n: 'WordCount', t: VT_I4 },\n\t/*::[*/0x10/*::]*/: { n: 'CharCount', t: VT_I4 },\n\t/*::[*/0x11/*::]*/: { n: 'Thumbnail', t: VT_CF },\n\t/*::[*/0x12/*::]*/: { n: 'Application', t: VT_STRING },\n\t/*::[*/0x13/*::]*/: { n: 'DocSecurity', t: VT_I4 },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t/*::[*/0x0001/*::]*/: \"US\", // United States\n\t/*::[*/0x0002/*::]*/: \"CA\", // Canada\n\t/*::[*/0x0003/*::]*/: \"\", // Latin America (except Brazil)\n\t/*::[*/0x0007/*::]*/: \"RU\", // Russia\n\t/*::[*/0x0014/*::]*/: \"EG\", // Egypt\n\t/*::[*/0x001E/*::]*/: \"GR\", // Greece\n\t/*::[*/0x001F/*::]*/: \"NL\", // Netherlands\n\t/*::[*/0x0020/*::]*/: \"BE\", // Belgium\n\t/*::[*/0x0021/*::]*/: \"FR\", // France\n\t/*::[*/0x0022/*::]*/: \"ES\", // Spain\n\t/*::[*/0x0024/*::]*/: \"HU\", // Hungary\n\t/*::[*/0x0027/*::]*/: \"IT\", // Italy\n\t/*::[*/0x0029/*::]*/: \"CH\", // Switzerland\n\t/*::[*/0x002B/*::]*/: \"AT\", // Austria\n\t/*::[*/0x002C/*::]*/: \"GB\", // United Kingdom\n\t/*::[*/0x002D/*::]*/: \"DK\", // Denmark\n\t/*::[*/0x002E/*::]*/: \"SE\", // Sweden\n\t/*::[*/0x002F/*::]*/: \"NO\", // Norway\n\t/*::[*/0x0030/*::]*/: \"PL\", // Poland\n\t/*::[*/0x0031/*::]*/: \"DE\", // Germany\n\t/*::[*/0x0034/*::]*/: \"MX\", // Mexico\n\t/*::[*/0x0037/*::]*/: \"BR\", // Brazil\n\t/*::[*/0x003d/*::]*/: \"AU\", // Australia\n\t/*::[*/0x0040/*::]*/: \"NZ\", // New Zealand\n\t/*::[*/0x0042/*::]*/: \"TH\", // Thailand\n\t/*::[*/0x0051/*::]*/: \"JP\", // Japan\n\t/*::[*/0x0052/*::]*/: \"KR\", // Korea\n\t/*::[*/0x0054/*::]*/: \"VN\", // Viet Nam\n\t/*::[*/0x0056/*::]*/: \"CN\", // China\n\t/*::[*/0x005A/*::]*/: \"TR\", // Turkey\n\t/*::[*/0x0069/*::]*/: \"JS\", // Ramastan\n\t/*::[*/0x00D5/*::]*/: \"DZ\", // Algeria\n\t/*::[*/0x00D8/*::]*/: \"MA\", // Morocco\n\t/*::[*/0x00DA/*::]*/: \"LY\", // Libya\n\t/*::[*/0x015F/*::]*/: \"PT\", // Portugal\n\t/*::[*/0x0162/*::]*/: \"IS\", // Iceland\n\t/*::[*/0x0166/*::]*/: \"FI\", // Finland\n\t/*::[*/0x01A4/*::]*/: \"CZ\", // Czech Republic\n\t/*::[*/0x0376/*::]*/: \"TW\", // Taiwan\n\t/*::[*/0x03C1/*::]*/: \"LB\", // Lebanon\n\t/*::[*/0x03C2/*::]*/: \"JO\", // Jordan\n\t/*::[*/0x03C3/*::]*/: \"SY\", // Syria\n\t/*::[*/0x03C4/*::]*/: \"IQ\", // Iraq\n\t/*::[*/0x03C5/*::]*/: \"KW\", // Kuwait\n\t/*::[*/0x03C6/*::]*/: \"SA\", // Saudi Arabia\n\t/*::[*/0x03CB/*::]*/: \"AE\", // United Arab Emirates\n\t/*::[*/0x03CC/*::]*/: \"IL\", // Israel\n\t/*::[*/0x03CE/*::]*/: \"QA\", // Qatar\n\t/*::[*/0x03D5/*::]*/: \"IR\", // Iran\n\t/*::[*/0xFFFF/*::]*/: \"US\"  // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array<number>*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0xFFFFFF, /* 0x40 icvForeground ?? */\n\t0x000000, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t/*::[*/0x00/*::]*/: \"#NULL!\",\n\t/*::[*/0x07/*::]*/: \"#DIV/0!\",\n\t/*::[*/0x0F/*::]*/: \"#VALUE!\",\n\t/*::[*/0x17/*::]*/: \"#REF!\",\n\t/*::[*/0x1D/*::]*/: \"#NAME?\",\n\t/*::[*/0x24/*::]*/: \"#NUM!\",\n\t/*::[*/0x2A/*::]*/: \"#N/A\",\n\t/*::[*/0x2B/*::]*/: \"#GETTING_DATA\",\n\t/*::[*/0xFF/*::]*/: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\":        0x00,\n\t\"#DIV/0!\":       0x07,\n\t\"#VALUE!\":       0x0F,\n\t\"#REF!\":         0x17,\n\t\"#NAME?\":        0x1D,\n\t\"#NUM!\":         0x24,\n\t\"#N/A\":          0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\":         0xFF\n};\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary <SpreadsheetML> */\n/* 14.2 Part Summary <DrawingML> */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\t\tworkbooks: {\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t\t},\n\t\tstrs: { /* Shared Strings */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t\t},\n\t\tcomments: { /* Comments */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t\t},\n\t\tsheets: { /* Worksheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t\t},\n\t\tcharts: { /* Chartsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t\t},\n\t\tdialogs: { /* Dialogsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t\t},\n\t\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t\t},\n\t\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t\t},\n\t\tstyles: { /* Styles */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase '<?xml': break;\n\t\t\tcase '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\\w+):/)||[\"\",\"\"])[1] ]; break;\n\t\t\tcase '<Default': ctext[y.Extension] = y.ContentType; break;\n\t\t\tcase '<Override':\n\t\t\t\tif(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\tif(ct.xmlns !== XMLNS.CT) throw new Error(\"Unknown Namespace: \" + ct.xmlns);\n\tct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts)/*:string*/ {\n\tvar type2ct/*{[string]:Array<string>}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array<string>*/ = [], v;\n\to[o.length] = (XML_HEADER);\n\to[o.length] = writextag('Types', null, {\n\t\t'xmlns': XMLNS.CT,\n\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t});\n\n\to = o.concat([\n\t\t['xml', 'application/xml'],\n\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t/* from test files */\n\t\t['bmp', 'image/bmp'],\n\t\t['png', 'image/png'],\n\t\t['gif', 'image/gif'],\n\t\t['emf', 'image/x-emf'],\n\t\t['wmf', 'image/x-wmf'],\n\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t['pdf', 'application/pdf'],\n\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t].map(function(x) {\n\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t}));\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '<Relationship') {\n\t\t\tvar rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; if(y.TargetMode) rel.TargetMode = y.TargetMode;\n\t\t\tvar canonictarget = y.TargetMode === 'External' ? y.Target : resolve_path(y.Target, currentFilePath);\n\t\t\trels[canonictarget] = rel;\n\t\t\thash[y.Id] = rel;\n\t\t}\n\t});\n\trels[\"!id\"] = hash;\n\treturn rels;\n}\n\n\n/* TODO */\nfunction write_rels(rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('Relationships', null, {\n\t\t//'xmlns:ns0': XMLNS.RELS,\n\t\t'xmlns': XMLNS.RELS\n\t})];\n\tkeys(rels['!id']).forEach(function(rid) {\n\t\to[o.length] = (writextag('Relationship', null, rels['!id'][rid]));\n\t});\n\tif(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 <manifest:manifest>\n\t\tcase 'file-entry': // 4.3 <manifest:file-entry>\n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 <manifest:encryption-data>\n\t\tcase 'algorithm': // 4.5 <manifest:algorithm>\n\t\tcase 'start-key-generation': // 4.6 <manifest:start-key-generation>\n\t\tcase 'key-derivation': // 4.7 <manifest:key-derivation>\n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest/*:Array<Array<string> >*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to.push('<manifest:manifest xmlns:manifest=\"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\" manifest:version=\"1.2\">\\n');\n\to.push('  <manifest:file-entry manifest:full-path=\"/\" manifest:version=\"1.2\" manifest:media-type=\"application/vnd.oasis.opendocument.spreadsheet\"/>\\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path=\"' + manifest[i][0] + '\" manifest:media-type=\"' + manifest[i][1] + '\"/>\\n');\n\to.push('</manifest:manifest>');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) {\n\treturn [\n\t\t'  <rdf:Description rdf:about=\"' + file + '\">\\n',\n\t\t'    <rdf:type rdf:resource=\"http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || \"odf\") + '#' + res + '\"/>\\n',\n\t\t'  </rdf:Description>\\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base/*:string*/, file/*:string*/) {\n\treturn [\n\t\t'  <rdf:Description rdf:about=\"' + base + '\">\\n',\n\t\t'    <ns0:hasPart xmlns:ns0=\"http://docs.oasis-open.org/ns/office/1.2/meta/pkg#\" rdf:resource=\"' + file + '\"/>\\n',\n\t\t'  </rdf:Description>\\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('</rdf:RDF>');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nfunction write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ {\n\treturn '<office:document-meta xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" office:version=\"1.2\"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>';\n}\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array<Array<string> >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nvar CORE_PROPS_REGEX/*:Array<RegExp>*/ = /*#__PURE__*/(function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array<Array<string> >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\",  \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array<Array<any>>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"<vt:lpstr>\" + escapexml(s) + \"</vt:lpstr>\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '<?xml': break;\n\t\t\tcase '<Properties': break;\n\t\t\tcase '<property': name = unescapexml(y.name); break;\n\t\t\tcase '</property>': name = null; break;\n\t\t\tdefault: if (x.indexOf('<vt:') === 0) {\n\t\t\t\tvar toks = x.split('>');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"</\") {/* empty */\n\t\t\t} else if(opts.WTF) throw new Error(x);\n\t\t}\n\t}\n\treturn p;\n}\n\nfunction write_cust_props(cp/*::, opts*/)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('Properties', null, {\n\t\t'xmlns': XMLNS.CUST_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t})];\n\tif(!cp) return o.join(\"\");\n\tvar pid = 1;\n\tkeys(cp).forEach(function custprop(k) { ++pid;\n\t\to[o.length] = (writextag('property', write_vt(cp[k], true), {\n\t\t\t'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',\n\t\t\t'pid': pid,\n\t\t\t'name': escapexml(k)\n\t\t}));\n\t});\n\tif(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array<string>*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array<string>*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '</' + T + '>';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array<string>*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array<string>*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array<string>*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array<string>*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ]; //.concat(PseudoPropsPairs);\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j<n; ++j) o.write_shift(1, 0); return o; }\n\nfunction parslurp(blob, length, cb) {\n\tvar arr = [], target = blob.l + length;\n\twhile(blob.l < target) arr.push(cb(blob, target - blob.l));\n\tif(target !== blob.l) throw new Error(\"Slurp error\");\n\treturn arr;\n}\n\nfunction parsebool(blob, length/*:number*/) { return blob.read_shift(length) === 0x1; }\nfunction writebool(v/*:any*/, o) { if(!o) o=new_buf(2); o.write_shift(2, +!!v); return o; }\n\nfunction parseuint16(blob/*::, length:?number, opts:?any*/) { return blob.read_shift(2, 'u'); }\nfunction writeuint16(v/*:number*/, o) { if(!o) o=new_buf(2); o.write_shift(2, v); return o; }\nfunction parseuint16a(blob, length/*:: :?number, opts:?any*/) { return parslurp(blob,length,parseuint16);}\n\n/* --- 2.5 Structures --- */\n\n/* [MS-XLS] 2.5.10 Bes (boolean or error) */\nfunction parse_Bes(blob/*::, length*/) {\n\tvar v = blob.read_shift(1), t = blob.read_shift(1);\n\treturn t === 0x01 ? v : v === 0x01;\n}\nfunction write_Bes(v, t/*:string*/, o) {\n\tif(!o) o = new_buf(2);\n\to.write_shift(1, ((t == 'e') ? +v : +!!v));\n\to.write_shift(1, ((t == 'e') ? 1 : 0));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.240 ShortXLUnicodeString */\nfunction parse_ShortXLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"<t>\" + z.t + \"</t>\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob/*::, length*/)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe}/*:any*/);\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t/*::[*/0x00/*::]*/: parse_FtSkip,      /* FtEnd */\n\t/*::[*/0x04/*::]*/: parse_FtSkip,      /* FtMacro */\n\t/*::[*/0x05/*::]*/: parse_FtSkip,      /* FtButton */\n\t/*::[*/0x06/*::]*/: parse_FtSkip,      /* FtGmo */\n\t/*::[*/0x07/*::]*/: parse_FtCf,        /* FtCf */\n\t/*::[*/0x08/*::]*/: parse_FtSkip,      /* FtPioGrbit */\n\t/*::[*/0x09/*::]*/: parse_FtSkip,      /* FtPictFmla */\n\t/*::[*/0x0A/*::]*/: parse_FtSkip,      /* FtCbls */\n\t/*::[*/0x0B/*::]*/: parse_FtSkip,      /* FtRbo */\n\t/*::[*/0x0C/*::]*/: parse_FtSkip,      /* FtSbs */\n\t/*::[*/0x0D/*::]*/: parse_FtNts,       /* FtNts */\n\t/*::[*/0x0E/*::]*/: parse_FtSkip,      /* FtSbsFmla */\n\t/*::[*/0x0F/*::]*/: parse_FtSkip,      /* FtGboData */\n\t/*::[*/0x10/*::]*/: parse_FtSkip,      /* FtEdoData */\n\t/*::[*/0x11/*::]*/: parse_FtSkip,      /* FtRboData */\n\t/*::[*/0x12/*::]*/: parse_FtSkip,      /* FtCblsData */\n\t/*::[*/0x13/*::]*/: parse_FtSkip,      /* FtLbsData */\n\t/*::[*/0x14/*::]*/: parse_FtSkip,      /* FtCblsFmla */\n\t/*::[*/0x15/*::]*/: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array<number>*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2 || length == 9) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array<Range>*/ {\n\tvar merges/*:Array<Range>*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array<Range>*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob/*::, length*/) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n/* from js-harb (C) 2014-present  SheetJS */\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t/*::[*/0x01/*::]*/:   437,           /*::[*/0x02/*::]*/:   850,\n\t/*::[*/0x03/*::]*/:  1252,           /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/:   852,           /*::[*/0x65/*::]*/:   866,\n\t/*::[*/0x66/*::]*/:   865,           /*::[*/0x67/*::]*/:   861,\n\t/*::[*/0x68/*::]*/:   895,           /*::[*/0x69/*::]*/:   620,\n\t/*::[*/0x6A/*::]*/:   737,           /*::[*/0x6B/*::]*/:   857,\n\t/*::[*/0x78/*::]*/:   950,           /*::[*/0x79/*::]*/:   949,\n\t/*::[*/0x7A/*::]*/:   936,           /*::[*/0x7B/*::]*/:   932,\n\t/*::[*/0x7C/*::]*/:   874,           /*::[*/0x7D/*::]*/:  1255,\n\t/*::[*/0x7E/*::]*/:  1256,           /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029,           /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/:  1250,           /*::[*/0xC9/*::]*/:  1251,\n\t/*::[*/0xCA/*::]*/:  1254,           /*::[*/0xCB/*::]*/:  1253,\n\n\t/* shapefile DBF extension */\n\t/*::[*/0x00/*::]*/: 20127,           /*::[*/0x08/*::]*/:   865,\n\t/*::[*/0x09/*::]*/:   437,           /*::[*/0x0A/*::]*/:   850,\n\t/*::[*/0x0B/*::]*/:   437,           /*::[*/0x0D/*::]*/:   437,\n\t/*::[*/0x0E/*::]*/:   850,           /*::[*/0x0F/*::]*/:   437,\n\t/*::[*/0x10/*::]*/:   850,           /*::[*/0x11/*::]*/:   437,\n\t/*::[*/0x12/*::]*/:   850,           /*::[*/0x13/*::]*/:   932,\n\t/*::[*/0x14/*::]*/:   850,           /*::[*/0x15/*::]*/:   437,\n\t/*::[*/0x16/*::]*/:   850,           /*::[*/0x17/*::]*/:   865,\n\t/*::[*/0x18/*::]*/:   437,           /*::[*/0x19/*::]*/:   437,\n\t/*::[*/0x1A/*::]*/:   850,           /*::[*/0x1B/*::]*/:   437,\n\t/*::[*/0x1C/*::]*/:   863,           /*::[*/0x1D/*::]*/:   850,\n\t/*::[*/0x1F/*::]*/:   852,           /*::[*/0x22/*::]*/:   852,\n\t/*::[*/0x23/*::]*/:   852,           /*::[*/0x24/*::]*/:   860,\n\t/*::[*/0x25/*::]*/:   850,           /*::[*/0x26/*::]*/:   866,\n\t/*::[*/0x37/*::]*/:   850,           /*::[*/0x40/*::]*/:   852,\n\t/*::[*/0x4D/*::]*/:   936,           /*::[*/0x4E/*::]*/:   949,\n\t/*::[*/0x4F/*::]*/:   950,           /*::[*/0x50/*::]*/:   874,\n\t/*::[*/0x57/*::]*/:  1252,           /*::[*/0x58/*::]*/:  1252,\n\t/*::[*/0x59/*::]*/:  1252,           /*::[*/0x6C/*::]*/:   863,\n\t/*::[*/0x86/*::]*/:   737,           /*::[*/0x87/*::]*/:   852,\n\t/*::[*/0x88/*::]*/:   857,           /*::[*/0xCC/*::]*/:  1257,\n\n\t/*::[*/0xFF/*::]*/: 16969\n};\nvar dbf_reverse_map = evert({\n\t/*::[*/0x01/*::]*/:   437,           /*::[*/0x02/*::]*/:   850,\n\t/*::[*/0x03/*::]*/:  1252,           /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/:   852,           /*::[*/0x65/*::]*/:   866,\n\t/*::[*/0x66/*::]*/:   865,           /*::[*/0x67/*::]*/:   861,\n\t/*::[*/0x68/*::]*/:   895,           /*::[*/0x69/*::]*/:   620,\n\t/*::[*/0x6A/*::]*/:   737,           /*::[*/0x6B/*::]*/:   857,\n\t/*::[*/0x78/*::]*/:   950,           /*::[*/0x79/*::]*/:   949,\n\t/*::[*/0x7A/*::]*/:   936,           /*::[*/0x7B/*::]*/:   932,\n\t/*::[*/0x7C/*::]*/:   874,           /*::[*/0x7D/*::]*/:  1255,\n\t/*::[*/0x7E/*::]*/:  1256,           /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029,           /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/:  1250,           /*::[*/0xC9/*::]*/:  1251,\n\t/*::[*/0xCA/*::]*/:  1254,           /*::[*/0xCB/*::]*/:  1253,\n\t/*::[*/0x00/*::]*/: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array<DBFField>*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = $cptable.utils.decode(current_cp, dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write '  /  /  ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/\\s+$/,\"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \"  .  \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry { return sheet_to_workbook(dbf_to_sheet(buf, opts), opts); }\n\tcatch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array<string>*/ = [];\n\tvar colwidths/*:Array<number>*/ = [];\n\tvar coldecimals/*:Array<number>*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array<any>*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\tmaxlen = Math.max(maxlen, String(col[j]).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\th.write_shift(4, 0x00000000 | ((+dbf_reverse_map[/*::String(*/current_ansi/*::)*/] || 0x03)<<8));\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j<headers.length; ++j) {\n\t\t\tif(headers[j] == null) continue;\n\t\t\tswitch(coltypes[j]) {\n\t\t\t\tcase 'L': rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46); break;\n\t\t\t\tcase 'B': rout.write_shift(8, data[i][j]||0, 'f'); break;\n\t\t\t\tcase 'N':\n\t\t\t\t\tvar _n = \"0\";\n\t\t\t\t\tif(typeof data[i][j] == \"number\") _n = data[i][j].toFixed(coldecimals[j]||0);\n\t\t\t\t\tfor(hcnt=0; hcnt < colwidths[j]-_n.length; ++hcnt) rout.write_shift(1, 0x20);\n\t\t\t\t\trout.write_shift(1, _n, \"sbcs\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");\n\t\t\t\t\telse {\n\t\t\t\t\t\trout.write_shift(4, (\"0000\"+data[i][j].getFullYear()).slice(-4), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+(data[i][j].getMonth()+1)).slice(-2), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+data[i][j].getDate()).slice(-2), \"sbcs\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C':\n\t\t\t\t\tvar _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\t\t\t\t\trout.write_shift(1, _s, \"sbcs\");\n\t\t\t\t\tfor(hcnt=0; hcnt < colwidths[j]-_s.length; ++hcnt) rout.write_shift(1, 0x20); break;\n\t\t\t}\n\t\t}\n\t\t// data\n\t}\n\tba.next(1).write_shift(1, 0x1A);\n\treturn ba.end();\n}\n\treturn {\n\t\tto_workbook: dbf_to_workbook,\n\t\tto_sheet: dbf_to_sheet,\n\t\tfrom_sheet: sheet_to_dbf\n\t};\n})();\n\nvar SYLK = /*#__PURE__*/(function() {\n\t/* TODO: stress test sequences */\n\tvar sylk_escapes = ({\n\t\tAA:'À', BA:'Á', CA:'Â', DA:195, HA:'Ä', JA:197,\n\t\tAE:'È', BE:'É', CE:'Ê',         HE:'Ë',\n\t\tAI:'Ì', BI:'Í', CI:'Î',         HI:'Ï',\n\t\tAO:'Ò', BO:'Ó', CO:'Ô', DO:213, HO:'Ö',\n\t\tAU:'Ù', BU:'Ú', CU:'Û',         HU:'Ü',\n\t\tAa:'à', Ba:'á', Ca:'â', Da:227, Ha:'ä', Ja:229,\n\t\tAe:'è', Be:'é', Ce:'ê',         He:'ë',\n\t\tAi:'ì', Bi:'í', Ci:'î',         Hi:'ï',\n\t\tAo:'ò', Bo:'ó', Co:'ô', Do:245, Ho:'ö',\n\t\tAu:'ù', Bu:'ú', Cu:'û',         Hu:'ü',\n\t\tKC:'Ç', Kc:'ç', q:'æ',  z:'œ',  a:'Æ',  j:'Œ',\n\t\tDN:209, Dn:241, Hy:255,\n\t\tS:169,  c:170,  R:174,  \"B \":180,\n\t\t/*::[*/0/*::]*/:176,    /*::[*/1/*::]*/:177,  /*::[*/2/*::]*/:178,\n\t\t/*::[*/3/*::]*/:179,    /*::[*/5/*::]*/:181,  /*::[*/6/*::]*/:182,\n\t\t/*::[*/7/*::]*/:183,    Q:185,  k:186,  b:208,  i:216,  l:222,  s:240,  y:248,\n\t\t\"!\":161, '\"':162, \"#\":163, \"(\":164, \"%\":165, \"'\":167, \"H \":168,\n\t\t\"+\":171, \";\":187, \"<\":188, \"=\":189, \">\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: find an actual specification */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array<string>*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array<RowInfo>*/ = [], colinfo/*:Array<ColInfo>*/ = [], cw/*:Array<string>*/ = [];\n\t\tvar Mval = 0, j;\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': break; /* options? */\n\t\t\tcase 'W': break; /* window? */\n\t\t\tcase 'P':\n\t\t\t\tif(record[1].charAt(0) == 'P')\n\t\t\t\t\tformats.push(rstr.slice(3).replace(/;;/g, \";\"));\n\t\t\t\tbreak;\n\t\t\tcase 'C':\n\t\t\tvar C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1;\n\t\t\tfor(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {\n\t\t\t\tcase 'A': break; // TODO: comment\n\t\t\t\tcase 'X': C = parseInt(record[rj].slice(1))-1; C_seen_X = true; break;\n\t\t\t\tcase 'Y':\n\t\t\t\t\tR = parseInt(record[rj].slice(1))-1; if(!C_seen_X) C = 0;\n\t\t\t\t\tfor(j = arr.length; j <= R; ++j) arr[j] = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'K':\n\t\t\t\t\tval = record[rj].slice(1);\n\t\t\t\t\tif(val.charAt(0) === '\"') val = val.slice(1,val.length - 1);\n\t\t\t\t\telse if(val === 'TRUE') val = true;\n\t\t\t\t\telse if(val === 'FALSE') val = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(val))) {\n\t\t\t\t\t\tval = fuzzynum(val);\n\t\t\t\t\t\tif(next_cell_format !== null && fmt_is_date(next_cell_format)) val = numdate(val);\n\t\t\t\t\t} else if(!isNaN(fuzzydate(val).getDate())) {\n\t\t\t\t\t\tval = parseDate(val);\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof $cptable !== 'undefined' && typeof val == \"string\" && ((opts||{}).type != \"string\") && (opts||{}).codepage) val = $cptable.utils.decode(opts.codepage, val);\n\t\t\t\t\tC_seen_K = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'E':\n\t\t\t\t\tC_seen_E = true;\n\t\t\t\t\tvar formula = rc_to_a1(record[rj].slice(1), {r:R,c:C});\n\t\t\t\t\tarr[R][C] = [arr[R][C], formula];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'S':\n\t\t\t\t\tC_seen_S = true;\n\t\t\t\t\tarr[R][C] = [arr[R][C], \"S5S\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'G': break; // unknown\n\t\t\t\tcase 'R': _R = parseInt(record[rj].slice(1))-1; break;\n\t\t\t\tcase 'C': _C = parseInt(record[rj].slice(1))-1; break;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(C_seen_K) {\n\t\t\t\tif(arr[R][C] && arr[R][C].length == 2) arr[R][C][0] = val;\n\t\t\t\telse arr[R][C] = val;\n\t\t\t\tnext_cell_format = null;\n\t\t\t}\n\t\t\tif(C_seen_S) {\n\t\t\t\tif(C_seen_E) throw new Error(\"SYLK shared formula cannot have own formula\");\n\t\t\t\tvar shrbase = _R > -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tarr[R][C][1] = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F':\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {\n\t\t\t\tcase 'X': C = parseInt(record[rj].slice(1))-1; ++F_seen; break;\n\t\t\t\tcase 'Y':\n\t\t\t\t\tR = parseInt(record[rj].slice(1))-1; /*C = 0;*/\n\t\t\t\t\tfor(j = arr.length; j <= R; ++j) arr[j] = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'M': Mval = parseInt(record[rj].slice(1)) / 20; break;\n\t\t\t\tcase 'F': break; /* ??? */\n\t\t\t\tcase 'G': break; /* hide grid */\n\t\t\t\tcase 'P':\n\t\t\t\t\tnext_cell_format = formats[parseInt(record[rj].slice(1))];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'S': break; /* cell style */\n\t\t\t\tcase 'D': break; /* column */\n\t\t\t\tcase 'N': break; /* font */\n\t\t\t\tcase 'W':\n\t\t\t\t\tcw = record[rj].slice(1).split(\" \");\n\t\t\t\t\tfor(j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {\n\t\t\t\t\t\tMval = parseInt(cw[2], 10);\n\t\t\t\t\t\tcolinfo[j-1] = Mval === 0 ? {hidden:true}: {wch:Mval}; process_col(colinfo[j-1]);\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C': /* default column format */\n\t\t\t\t\tC = parseInt(record[rj].slice(1))-1;\n\t\t\t\t\tif(!colinfo[C]) colinfo[C] = {};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'R': /* row properties */\n\t\t\t\t\tR = parseInt(record[rj].slice(1))-1;\n\t\t\t\t\tif(!rowinfo[R]) rowinfo[R] = {};\n\t\t\t\t\tif(Mval > 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht];\n\t}\n\n\tfunction sylk_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1];\n\t\tvar o = aoa_to_sheet(aoa, opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\treturn o;\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); }\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*//*::, opts*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + cell.v.replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array<string>*/, rows/*:Array<RowInfo>*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/)/*:string*/ {\n\t\tvar preamble/*:Array<string>*/ = [\"ID;PWXL;N;E\"], o/*:Array<string>*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tvar RS = \"\\r\\n\";\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\to.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n\t\t\t}\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tto_sheet: sylk_to_sheet,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(dif_to_sheet(str, opts), opts); }\n\n\tvar sheet_to_dif = /*#__PURE__*/(function() {\n\t\tvar push_field = function pf(o/*:Array<string>*/, topic/*:string*/, v/*:number*/, n/*:number*/, s/*:string*/) {\n\t\t\to.push(topic);\n\t\t\to.push(v + \",\" + n);\n\t\t\to.push('\"' + s.replace(/\"/g,'\"\"') + '\"');\n\t\t};\n\t\tvar push_value = function po(o/*:Array<string>*/, type/*:number*/, v/*:any*/, s/*:string*/) {\n\t\t\to.push(type + \",\" + v);\n\t\t\to.push(type == 1 ? '\"' + s.replace(/\"/g,'\"\"') + '\"' : s);\n\t\t};\n\t\treturn function sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\t\tvar o/*:Array<string>*/ = [];\n\t\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tpush_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n\t\t\tpush_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1,\"\");\n\t\t\tpush_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1,\"\");\n\t\t\tpush_field(o, \"DATA\", 0, 0,\"\");\n\t\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\t\tpush_value(o, -1, 0, \"BOT\");\n\t\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\t\tif(!cell) { push_value(o, 1, 0, \"\"); continue;}\n\t\t\t\t\tswitch(cell.t) {\n\t\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t\tvar val = DIF_XL ? cell.w : cell.v;\n\t\t\t\t\t\t\tif(!val && cell.v != null) val = cell.v;\n\t\t\t\t\t\t\tif(val == null) {\n\t\t\t\t\t\t\t\tif(DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);\n\t\t\t\t\t\t\t\telse push_value(o, 1, 0, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse push_value(o, 0, val, \"V\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tpush_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tpush_value(o, 1, 0, (!DIF_XL || isNaN(cell.v)) ? cell.v : '=\"' + cell.v + '\"');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\t\tif(DIF_XL) push_value(o, 0, cell.w, \"V\");\n\t\t\t\t\t\t\telse push_value(o, 1, 0, cell.w);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: push_value(o, 1, 0, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpush_value(o, -1, 0, \"EOD\");\n\t\t\tvar RS = \"\\r\\n\";\n\t\t\tvar oo = o.join(RS);\n\t\t\t//while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\t\t\treturn oo;\n\t\t};\n\t})();\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array<string>*/ = [], oo/*:Array<string>*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t/*::[*/0x2C/*::]*/: ',',\n\t\t/*::[*/0x09/*::]*/: \"\\t\",\n\t\t/*::[*/0x3B/*::]*/: ';',\n\t\t/*::[*/0x7C/*::]*/: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t/*::[*/0x2C/*::]*/: 3,\n\t\t/*::[*/0x09/*::]*/: 2,\n\t\t/*::[*/0x3B/*::]*/: 1,\n\t\t/*::[*/0x7C/*::]*/: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tstr = str.replace(/\\r\\n/mg, \"\\n\");\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage)  str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array<string>*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array<string>*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\"          \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ((o.dense ? [] : {})/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif(!o.qpro) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (s[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tval[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = Array.isArray(ws);\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v));\n\t\t\t\t} else {\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, v) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, v) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t0x6F: [\"T\", 1]\n\t};\n\tvar BinOpTab = [\n\t\t  \"\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t  \"\",  \"+\",  \"-\",  \"*\",  \"/\",  \"^\",  \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\",  \"<\",  \">\",   \"\",   \"\",   \"\",   \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\"  // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 14);\n\t\tblob.l += length - 10; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\", f:parseuint16 },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"CALCMODE\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCORDER\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"SPLIT\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SYNC\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"RANGE\", f:parse_RANGE },\n\t\t/*::[*/0x0007/*::]*/: { n:\"WINDOW1\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"COLW1\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"WINTWO\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"COLW2\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"NAME\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"BLANK\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t/*::[*/0x000E/*::]*/: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t/*::[*/0x000F/*::]*/: { n:\"LABEL\", f:parse_LABEL },\n\t\t/*::[*/0x0010/*::]*/: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t/*::[*/0x0018/*::]*/: { n:\"TABLE\" },\n\t\t/*::[*/0x0019/*::]*/: { n:\"ORANGE\" },\n\t\t/*::[*/0x001A/*::]*/: { n:\"PRANGE\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"SRANGE\" },\n\t\t/*::[*/0x001C/*::]*/: { n:\"FRANGE\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"KRANGE1\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"HRANGE\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"KRANGE2\" },\n\t\t/*::[*/0x0024/*::]*/: { n:\"PROTEC\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"FOOTER\" },\n\t\t/*::[*/0x0026/*::]*/: { n:\"HEADER\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"SETUP\" },\n\t\t/*::[*/0x0028/*::]*/: { n:\"MARGINS\" },\n\t\t/*::[*/0x0029/*::]*/: { n:\"LABELFMT\" },\n\t\t/*::[*/0x002A/*::]*/: { n:\"TITLES\" },\n\t\t/*::[*/0x002B/*::]*/: { n:\"SHEETJS\" },\n\t\t/*::[*/0x002D/*::]*/: { n:\"GRAPH\" },\n\t\t/*::[*/0x002E/*::]*/: { n:\"NGRAPH\" },\n\t\t/*::[*/0x002F/*::]*/: { n:\"CALCCOUNT\" },\n\t\t/*::[*/0x0030/*::]*/: { n:\"UNFORMATTED\" },\n\t\t/*::[*/0x0031/*::]*/: { n:\"CURSORW12\" },\n\t\t/*::[*/0x0032/*::]*/: { n:\"WINDOW\" },\n\t\t/*::[*/0x0033/*::]*/: { n:\"STRING\", f:parse_LABEL },\n\t\t/*::[*/0x0037/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0038/*::]*/: { n:\"LOCKED\" },\n\t\t/*::[*/0x003C/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x003D/*::]*/: { n:\"QUERYNAME\" },\n\t\t/*::[*/0x003E/*::]*/: { n:\"PRINT\" },\n\t\t/*::[*/0x003F/*::]*/: { n:\"PRINTNAME\" },\n\t\t/*::[*/0x0040/*::]*/: { n:\"GRAPH2\" },\n\t\t/*::[*/0x0041/*::]*/: { n:\"GRAPHNAME\" },\n\t\t/*::[*/0x0042/*::]*/: { n:\"ZOOM\" },\n\t\t/*::[*/0x0043/*::]*/: { n:\"SYMSPLIT\" },\n\t\t/*::[*/0x0044/*::]*/: { n:\"NSROWS\" },\n\t\t/*::[*/0x0045/*::]*/: { n:\"NSCOLS\" },\n\t\t/*::[*/0x0046/*::]*/: { n:\"RULER\" },\n\t\t/*::[*/0x0047/*::]*/: { n:\"NNAME\" },\n\t\t/*::[*/0x0048/*::]*/: { n:\"ACOMM\" },\n\t\t/*::[*/0x0049/*::]*/: { n:\"AMACRO\" },\n\t\t/*::[*/0x004A/*::]*/: { n:\"PARSE\" },\n\t\t/*::[*/0x0066/*::]*/: { n:\"PRANGES??\" },\n\t\t/*::[*/0x0067/*::]*/: { n:\"RRANGES??\" },\n\t\t/*::[*/0x0068/*::]*/: { n:\"FNAME??\" },\n\t\t/*::[*/0x0069/*::]*/: { n:\"MRANGES??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00DE/*::]*/: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\" },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCSET\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"WINDOWSET\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SHEETCELLPTR\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"SHEETLAYOUT\" },\n\t\t/*::[*/0x0007/*::]*/: { n:\"COLUMNWIDTH\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"HIDDENCOLUMN\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"USERRANGE\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"SYSTEMRANGE\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"ZEROFORCE\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"SORTKEYDIR\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"FILESEAL\" },\n\t\t/*::[*/0x000E/*::]*/: { n:\"DATAFILLNUMS\" },\n\t\t/*::[*/0x000F/*::]*/: { n:\"PRINTMAIN\" },\n\t\t/*::[*/0x0010/*::]*/: { n:\"PRINTSTRING\" },\n\t\t/*::[*/0x0011/*::]*/: { n:\"GRAPHMAIN\" },\n\t\t/*::[*/0x0012/*::]*/: { n:\"GRAPHSTRING\" },\n\t\t/*::[*/0x0013/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0014/*::]*/: { n:\"ERRCELL\" },\n\t\t/*::[*/0x0015/*::]*/: { n:\"NACELL\" },\n\t\t/*::[*/0x0016/*::]*/: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t/*::[*/0x0017/*::]*/: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t/*::[*/0x0018/*::]*/: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t/*::[*/0x0019/*::]*/: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t/*::[*/0x001A/*::]*/: { n:\"FORMULA1A\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t/*::[*/0x001C/*::]*/: { n:\"DTLABELMISC\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"DTLABELCELL\" },\n\t\t/*::[*/0x001E/*::]*/: { n:\"GRAPHWINDOW\" },\n\t\t/*::[*/0x001F/*::]*/: { n:\"CPA\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"LPLAUTO\" },\n\t\t/*::[*/0x0021/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x0022/*::]*/: { n:\"HIDDENSHEET\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t/*::[*/0x0026/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t/*::[*/0x0028/*::]*/: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t/*::[*/0x008E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0093/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0096/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0097/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0098/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0099/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00A3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B1/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B8/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BA/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BB/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BC/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00CD/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00D0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0100/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0103/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0104/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0105/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0106/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0107/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0109/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010F/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0180/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0185/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0186/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0189/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x018C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0200/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0202/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0201/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0204/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0205/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0280/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0281/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0282/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0283/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0284/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0285/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0286/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0287/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0288/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0292/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0293/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0294/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0295/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0296/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0299/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x029A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0300/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0304/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0601/*::]*/: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t/*::[*/0x0640/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0642/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0701/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0702/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0703/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0704/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0780/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0800/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0801/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0804/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0A80/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x2AF6/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x3231/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6E49/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6F44/*::]*/: { n:\"??\" },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '<condense': break;\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '<extend': break;\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '<shadow':\n\t\t\t\tif(!y.val) break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<shadow>':\n\t\t\tcase '<shadow/>': font.shadow = 1; break;\n\t\t\tcase '</shadow>': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '<charset':\n\t\t\t\tif(y.val == '1') break;\n\t\t\t\tfont.cp = CS2CP[parseInt(y.val, 10)];\n\t\t\t\tbreak;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty TODO */\n\t\t\tcase '<outline':\n\t\t\t\tif(!y.val) break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<outline>':\n\t\t\tcase '<outline/>': font.outline = 1; break;\n\t\t\tcase '</outline>': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '<rFont': font.name = y.val; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '<sz': font.sz = y.val; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '<strike':\n\t\t\t\tif(!y.val) break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<strike>':\n\t\t\tcase '<strike/>': font.strike = 1; break;\n\t\t\tcase '</strike>': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '<u':\n\t\t\t\tif(!y.val) break;\n\t\t\t\tswitch(y.val) {\n\t\t\t\t\tcase 'double': font.uval = \"double\"; break;\n\t\t\t\t\tcase 'singleAccounting': font.uval = \"single-accounting\"; break;\n\t\t\t\t\tcase 'doubleAccounting': font.uval = \"double-accounting\"; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '<u>':\n\t\t\tcase '<u/>': font.u = 1; break;\n\t\t\tcase '</u>': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '<b':\n\t\t\t\tif(y.val == '0') break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<b>':\n\t\t\tcase '<b/>': font.b = 1; break;\n\t\t\tcase '</b>': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '<i':\n\t\t\t\tif(y.val == '0') break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<i>':\n\t\t\tcase '<i/>': font.i = 1; break;\n\t\t\tcase '</i>': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '<color':\n\t\t\t\tif(y.rgb) font.color = y.rgb.slice(2,8);\n\t\t\t\tbreak;\n\t\t\tcase '<color>': case '<color/>': case '</color>': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '<family': font.family = y.val; break;\n\t\t\tcase '<family>': case '<family/>': case '</family>': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '<vertAlign': font.valign = y.val; break;\n\t\t\tcase '<vertAlign>': case '<vertAlign/>': case '</vertAlign>': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '<scheme': break;\n\t\t\tcase '<scheme>': case '<scheme/>': case '</scheme>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of <r> tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array<string>*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('<span style=\"' + style.join(\"\") + '\">');\n\n\t\tif(font.b) { intro.push(\"<b>\"); outro.push(\"</b>\"); }\n\t\tif(font.i) { intro.push(\"<i>\"); outro.push(\"</i>\"); }\n\t\tif(font.strike) { intro.push(\"<s>\"); outro.push(\"</s>\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"</\" + align + \">\"); }\n\n\t\toutro.push(\"</span>\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array<string>, string, Array<string>]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'<br/>') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"<si>\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"<t\";\n\t\t\tif(!s.t) s.t = \"\";\n\t\t\tif(s.t.match(straywsregex)) sitag += ' xml:space=\"preserve\"';\n\t\t\tsitag += \">\" + escapexml(s.t) + \"</t>\";\n\t\t}\n\t\tsitag += \"</si>\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array<number>*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array<number>*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array<string>*/ {\n\tvar o/*:Array<string>*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5  EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6  EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\t\t\tcase '<encryption': case '</encryption>': break;\n\t\t\tcase '<keyData': KeyData.forEach(function(k) { o[k] = y[k]; }); break;\n\t\t\tcase '<dataIntegrity': o.encryptedHmacKey = y.encryptedHmacKey; o.encryptedHmacValue = y.encryptedHmacValue; break;\n\t\t\tcase '<keyEncryptors>': case '<keyEncryptors': o.encs = []; break;\n\t\t\tcase '</keyEncryptors>': break;\n\n\t\t\tcase '<keyEncryptor': o.uri = y.uri; break;\n\t\t\tcase '</keyEncryptor>': break;\n\t\t\tcase '<encryptedKey': o.encs.push(y); break;\n\t\t\tdefault: throw y[0];\n\t\t}\n\t});\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */\nfunction parse_RC4CryptoHeader(blob, length/*:number*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4); length -= 4;\n\tif(vers.Minor != 2) throw new Error('unrecognized minor version code: ' + vers.Minor);\n\tif(vers.Major > 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = /*#__PURE__*/(function() {\n\tfunction rtf_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array':  return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\t/* TODO: this is a stub */\n\tfunction rtf_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\n\t\tvar rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n\t\tif(!rows.length) throw new Error(\"RTF missing table\");\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:rows.length - 1}}/*:any*/);\n\t\trows.forEach(function(rowtf, R) {\n\t\t\tif(Array.isArray(ws)) ws[R] = [];\n\t\t\tvar rtfre = /\\\\\\w+\\b/g;\n\t\t\tvar last_index = 0;\n\t\t\tvar res;\n\t\t\tvar C = -1;\n\t\t\twhile((res = rtfre.exec(rowtf))) {\n\t\t\t\tswitch(res[0]) {\n\t\t\t\t\tcase \"\\\\cell\":\n\t\t\t\t\t\tvar data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n\t\t\t\t\t\tif(data[0] == \" \") data = data.slice(1);\n\t\t\t\t\t\t++C;\n\t\t\t\t\t\tif(data.length) {\n\t\t\t\t\t\t\t// TODO: value parsing, including codepage adjustments\n\t\t\t\t\t\t\tvar cell = {v: data, t:\"s\"};\n\t\t\t\t\t\t\tif(Array.isArray(ws)) ws[R][C] = cell;\n\t\t\t\t\t\t\telse ws[encode_cell({r:R, c:C})] = cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlast_index = rtfre.lastIndex;\n\t\t\t}\n\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t});\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws/*:Worksheet*//*::, opts*/)/*:string*/ {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW<MAX_MDW; ++MDW) if(Math.abs(collw - cycle_width(collw)) <= delta) { delta = Math.abs(collw - cycle_width(collw)); _MDW = MDW; }\n\tMDW = _MDW;\n}\n/* XLML specifies width in terms of pixels */\n/*function find_mdw_wpx(wpx) {\n\tvar delta = Infinity, guess = 0, _MDW = MIN_MDW;\n\tfor(MDW=MIN_MDW; MDW<MAX_MDW; ++MDW) {\n\t\tguess = char2width_(px2char_(wpx))*256;\n\t\tguess = (guess) % 1;\n\t\tif(guess > 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<borders': case '<borders>': case '</borders>': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '<border': case '<border>': case '<border/>':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '</border>': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '<left/>': break;\n\t\t\tcase '<left': case '<left>': break;\n\t\t\tcase '</left>': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '<right/>': break;\n\t\t\tcase '<right': case '<right>': break;\n\t\t\tcase '</right>': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '<top/>': break;\n\t\t\tcase '<top': case '<top>': break;\n\t\t\tcase '</top>': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '<bottom/>': break;\n\t\t\tcase '<bottom': case '<bottom>': break;\n\t\t\tcase '</bottom>': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '<diagonal': case '<diagonal>': case '<diagonal/>': break;\n\t\t\tcase '</diagonal>': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '<horizontal': case '<horizontal>': case '<horizontal/>': break;\n\t\t\tcase '</horizontal>': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '<vertical': case '<vertical>': case '<vertical/>': break;\n\t\t\tcase '</vertical>': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '<start': case '<start>': case '<start/>': break;\n\t\t\tcase '</start>': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '<end': case '<end>': case '<end/>': break;\n\t\t\tcase '</end>': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '<color': case '<color>':\n\t\t\t\tbreak;\n\t\t\tcase '<color/>': case '</color>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<fills': case '<fills>': case '</fills>': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '<fill>': case '<fill': case '<fill/>':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '</fill>': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '<gradientFill>': break;\n\t\t\tcase '<gradientFill':\n\t\t\tcase '</gradientFill>': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '<patternFill': case '<patternFill>':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '<patternFill/>': case '</patternFill>': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '<bgColor':\n\t\t\t\tif(!fill.bgColor) fill.bgColor = {};\n\t\t\t\tif(y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);\n\t\t\t\tif(y.theme) fill.bgColor.theme = parseInt(y.theme, 10);\n\t\t\t\tif(y.tint) fill.bgColor.tint = parseFloat(y.tint);\n\t\t\t\t/* Excel uses ARGB strings */\n\t\t\t\tif(y.rgb) fill.bgColor.rgb = y.rgb.slice(-6);\n\t\t\t\tbreak;\n\t\t\tcase '<bgColor/>': case '</bgColor>': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '<fgColor':\n\t\t\t\tif(!fill.fgColor) fill.fgColor = {};\n\t\t\t\tif(y.theme) fill.fgColor.theme = parseInt(y.theme, 10);\n\t\t\t\tif(y.tint) fill.fgColor.tint = parseFloat(y.tint);\n\t\t\t\t/* Excel uses ARGB strings */\n\t\t\t\tif(y.rgb != null) fill.fgColor.rgb = y.rgb.slice(-6);\n\t\t\t\tbreak;\n\t\t\tcase '<fgColor/>': case '</fgColor>': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '<stop': case '<stop/>': break;\n\t\t\tcase '</stop>': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '<color': case '<color/>': break;\n\t\t\tcase '</color>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<fonts': case '<fonts>': case '</fonts>': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '<font': case '<font>': break;\n\t\t\tcase '</font>': case '<font/>':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '<name': if(y.val) font.name = utf8read(y.val); break;\n\t\t\tcase '<name/>': case '</name>': break;\n\n\t\t\t/* 18.8.2  b CT_BooleanProperty */\n\t\t\tcase '<b': font.bold = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<b/>': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '<i': font.italic = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<i/>': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '<u':\n\t\t\t\tswitch(y.val) {\n\t\t\t\t\tcase \"none\": font.underline = 0x00; break;\n\t\t\t\t\tcase \"single\": font.underline = 0x01; break;\n\t\t\t\t\tcase \"double\": font.underline = 0x02; break;\n\t\t\t\t\tcase \"singleAccounting\": font.underline = 0x21; break;\n\t\t\t\t\tcase \"doubleAccounting\": font.underline = 0x22; break;\n\t\t\t\t} break;\n\t\t\tcase '<u/>': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '<strike': font.strike = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<strike/>': font.strike = 1; break;\n\n\t\t\t/* 18.4.2  outline CT_BooleanProperty */\n\t\t\tcase '<outline': font.outline = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<outline/>': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '<shadow': font.shadow = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<shadow/>': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '<condense': font.condense = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<condense/>': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '<extend': font.extend = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<extend/>': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '<sz': if(y.val) font.sz = +y.val; break;\n\t\t\tcase '<sz/>': case '</sz>': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '<vertAlign': if(y.val) font.vertAlign = y.val; break;\n\t\t\tcase '<vertAlign/>': case '</vertAlign>': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '<family': if(y.val) font.family = parseInt(y.val,10); break;\n\t\t\tcase '<family/>': case '</family>': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '<scheme': if(y.val) font.scheme = y.val; break;\n\t\t\tcase '<scheme/>': case '</scheme>': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '<charset':\n\t\t\t\tif(y.val == '1') break;\n\t\t\t\ty.codepage = CS2CP[parseInt(y.val, 10)];\n\t\t\t\tbreak;\n\n\t\t\t/* 18.?.? color CT_Color */\n\t\t\tcase '<color':\n\t\t\t\tif(!font.color) font.color = {};\n\t\t\t\tif(y.auto) font.color.auto = parsexmlbool(y.auto);\n\n\t\t\t\tif(y.rgb) font.color.rgb = y.rgb.slice(-6);\n\t\t\t\telse if(y.indexed) {\n\t\t\t\t\tfont.color.index = parseInt(y.indexed, 10);\n\t\t\t\t\tvar icv = XLSIcv[font.color.index];\n\t\t\t\t\tif(font.color.index == 81) icv = XLSIcv[1];\n\t\t\t\t\tif(!icv) icv = XLSIcv[1]; //throw new Error(x); // note: 206 is valid\n\t\t\t\t\tfont.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16);\n\t\t\t\t} else if(y.theme) {\n\t\t\t\t\tfont.color.theme = parseInt(y.theme, 10);\n\t\t\t\t\tif(y.tint) font.color.tint = parseFloat(y.tint);\n\t\t\t\t\tif(y.theme && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\t\tfont.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase '<color/>': case '</color>': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '<AlternateContent': pass = true; break;\n\t\t\tcase '</AlternateContent>': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array<number>*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<numFmts': case '</numFmts>': case '<numFmts/>': case '<numFmts>': break;\n\t\t\tcase '<numFmt': {\n\t\t\t\tvar f=unescapexml(utf8read(y.formatCode)), j=parseInt(y.numFmtId,10);\n\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\tif(j>0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF_load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '</numFmt>': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"<numFmts>\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"</numFmts>\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<cellXfs': case '<cellXfs>': case '<cellXfs/>': case '</cellXfs>': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '<xf': case '<xf/>':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '</xf>': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '<alignment': case '<alignment/>':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '</alignment>': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '<protection':\n\t\t\t\tbreak;\n\t\t\tcase '</protection>': case '<protection/>': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '<AlternateContent': pass = true; break;\n\t\t\tcase '</AlternateContent>': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"</cellXfs>\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(/<!--([\\s\\S]*?)-->/mg,\"\").replace(/<!DOCTYPE[^\\[]*\\[[^\\]]*\\]>/gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5  borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9  cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8  cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('<fonts count=\"1\"><font><sz val=\"12\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts>');\n\to[o.length] = ('<fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills>');\n\to[o.length] = ('<borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');\n\to[o.length] = ('<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>');\n\to[o.length] = ('<dxfs count=\"0\"/>');\n\to[o.length] = ('<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\"/>');\n\n\tif(o.length>2){ o[o.length] = ('</styleSheet>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF_load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId:   0,\n\t\tfillId:   0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'</a:lt1>', '</a:dk1>', '</a:lt2>', '</a:dk2>',\n\t'</a:accent1>', '</a:accent2>', '</a:accent3>',\n\t'</a:accent4>', '</a:accent5>', '</a:accent6>',\n\t'</a:hlink>', '</a:folHlink>'\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '<a:clrScheme': case '</a:clrScheme>': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '<a:srgbClr':\n\t\t\t\tcolor.rgb = y.val; break;\n\n\t\t\t/* 20.1.2.3.33 sysClr CT_SystemColor */\n\t\t\tcase '<a:sysClr':\n\t\t\t\tcolor.rgb = y.lastClr; break;\n\n\t\t\t/* 20.1.4.1.1 accent1 (Accent 1) */\n\t\t\t/* 20.1.4.1.2 accent2 (Accent 2) */\n\t\t\t/* 20.1.4.1.3 accent3 (Accent 3) */\n\t\t\t/* 20.1.4.1.4 accent4 (Accent 4) */\n\t\t\t/* 20.1.4.1.5 accent5 (Accent 5) */\n\t\t\t/* 20.1.4.1.6 accent6 (Accent 6) */\n\t\t\t/* 20.1.4.1.9 dk1 (Dark 1) */\n\t\t\t/* 20.1.4.1.10 dk2 (Dark 2) */\n\t\t\t/* 20.1.4.1.15 folHlink (Followed Hyperlink) */\n\t\t\t/* 20.1.4.1.19 hlink (Hyperlink) */\n\t\t\t/* 20.1.4.1.22 lt1 (Light 1) */\n\t\t\t/* 20.1.4.1.23 lt2 (Light 2) */\n\t\t\tcase '<a:dk1>': case '</a:dk1>':\n\t\t\tcase '<a:lt1>': case '</a:lt1>':\n\t\t\tcase '<a:dk2>': case '</a:dk2>':\n\t\t\tcase '<a:lt2>': case '</a:lt2>':\n\t\t\tcase '<a:accent1>': case '</a:accent1>':\n\t\t\tcase '<a:accent2>': case '</a:accent2>':\n\t\t\tcase '<a:accent3>': case '</a:accent3>':\n\t\t\tcase '<a:accent4>': case '</a:accent4>':\n\t\t\tcase '<a:accent5>': case '</a:accent5>':\n\t\t\tcase '<a:accent6>': case '</a:accent6>':\n\t\t\tcase '<a:hlink>': case '</a:hlink>':\n\t\t\tcase '<a:folHlink>': case '</a:folHlink>':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\nvar clrsregex = /<a:clrScheme([^>]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /<a:fontScheme([^>]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /<a:fmtScheme([^>]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /<a:themeElements([^>]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">';\n\to[o.length] =  '<a:themeElements>';\n\n\to[o.length] =   '<a:clrScheme name=\"Office\">';\n\to[o.length] =    '<a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>';\n\to[o.length] =    '<a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>';\n\to[o.length] =    '<a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2>';\n\to[o.length] =    '<a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>';\n\to[o.length] =    '<a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1>';\n\to[o.length] =    '<a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>';\n\to[o.length] =    '<a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>';\n\to[o.length] =    '<a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>';\n\to[o.length] =    '<a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>';\n\to[o.length] =    '<a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>';\n\to[o.length] =    '<a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>';\n\to[o.length] =    '<a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>';\n\to[o.length] =   '</a:clrScheme>';\n\n\to[o.length] =   '<a:fontScheme name=\"Office\">';\n\to[o.length] =    '<a:majorFont>';\n\to[o.length] =     '<a:latin typeface=\"Cambria\"/>';\n\to[o.length] =     '<a:ea typeface=\"\"/>';\n\to[o.length] =     '<a:cs typeface=\"\"/>';\n\to[o.length] =     '<a:font script=\"Jpan\" typeface=\"ＭＳ Ｐゴシック\"/>';\n\to[o.length] =     '<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>';\n\to[o.length] =     '<a:font script=\"Hans\" typeface=\"宋体\"/>';\n\to[o.length] =     '<a:font script=\"Hant\" typeface=\"新細明體\"/>';\n\to[o.length] =     '<a:font script=\"Arab\" typeface=\"Times New Roman\"/>';\n\to[o.length] =     '<a:font script=\"Hebr\" typeface=\"Times New Roman\"/>';\n\to[o.length] =     '<a:font script=\"Thai\" typeface=\"Tahoma\"/>';\n\to[o.length] =     '<a:font script=\"Ethi\" typeface=\"Nyala\"/>';\n\to[o.length] =     '<a:font script=\"Beng\" typeface=\"Vrinda\"/>';\n\to[o.length] =     '<a:font script=\"Gujr\" typeface=\"Shruti\"/>';\n\to[o.length] =     '<a:font script=\"Khmr\" typeface=\"MoolBoran\"/>';\n\to[o.length] =     '<a:font script=\"Knda\" typeface=\"Tunga\"/>';\n\to[o.length] =     '<a:font script=\"Guru\" typeface=\"Raavi\"/>';\n\to[o.length] =     '<a:font script=\"Cans\" typeface=\"Euphemia\"/>';\n\to[o.length] =     '<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>';\n\to[o.length] =     '<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>';\n\to[o.length] =     '<a:font script=\"Thaa\" typeface=\"MV Boli\"/>';\n\to[o.length] =     '<a:font script=\"Deva\" typeface=\"Mangal\"/>';\n\to[o.length] =     '<a:font script=\"Telu\" typeface=\"Gautami\"/>';\n\to[o.length] =     '<a:font script=\"Taml\" typeface=\"Latha\"/>';\n\to[o.length] =     '<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>';\n\to[o.length] =     '<a:font script=\"Orya\" typeface=\"Kalinga\"/>';\n\to[o.length] =     '<a:font script=\"Mlym\" typeface=\"Kartika\"/>';\n\to[o.length] =     '<a:font script=\"Laoo\" typeface=\"DokChampa\"/>';\n\to[o.length] =     '<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>';\n\to[o.length] =     '<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Viet\" typeface=\"Times New Roman\"/>';\n\to[o.length] =     '<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>';\n\to[o.length] =     '<a:font script=\"Geor\" typeface=\"Sylfaen\"/>';\n\to[o.length] =    '</a:majorFont>';\n\to[o.length] =    '<a:minorFont>';\n\to[o.length] =     '<a:latin typeface=\"Calibri\"/>';\n\to[o.length] =     '<a:ea typeface=\"\"/>';\n\to[o.length] =     '<a:cs typeface=\"\"/>';\n\to[o.length] =     '<a:font script=\"Jpan\" typeface=\"ＭＳ Ｐゴシック\"/>';\n\to[o.length] =     '<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>';\n\to[o.length] =     '<a:font script=\"Hans\" typeface=\"宋体\"/>';\n\to[o.length] =     '<a:font script=\"Hant\" typeface=\"新細明體\"/>';\n\to[o.length] =     '<a:font script=\"Arab\" typeface=\"Arial\"/>';\n\to[o.length] =     '<a:font script=\"Hebr\" typeface=\"Arial\"/>';\n\to[o.length] =     '<a:font script=\"Thai\" typeface=\"Tahoma\"/>';\n\to[o.length] =     '<a:font script=\"Ethi\" typeface=\"Nyala\"/>';\n\to[o.length] =     '<a:font script=\"Beng\" typeface=\"Vrinda\"/>';\n\to[o.length] =     '<a:font script=\"Gujr\" typeface=\"Shruti\"/>';\n\to[o.length] =     '<a:font script=\"Khmr\" typeface=\"DaunPenh\"/>';\n\to[o.length] =     '<a:font script=\"Knda\" typeface=\"Tunga\"/>';\n\to[o.length] =     '<a:font script=\"Guru\" typeface=\"Raavi\"/>';\n\to[o.length] =     '<a:font script=\"Cans\" typeface=\"Euphemia\"/>';\n\to[o.length] =     '<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>';\n\to[o.length] =     '<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>';\n\to[o.length] =     '<a:font script=\"Thaa\" typeface=\"MV Boli\"/>';\n\to[o.length] =     '<a:font script=\"Deva\" typeface=\"Mangal\"/>';\n\to[o.length] =     '<a:font script=\"Telu\" typeface=\"Gautami\"/>';\n\to[o.length] =     '<a:font script=\"Taml\" typeface=\"Latha\"/>';\n\to[o.length] =     '<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>';\n\to[o.length] =     '<a:font script=\"Orya\" typeface=\"Kalinga\"/>';\n\to[o.length] =     '<a:font script=\"Mlym\" typeface=\"Kartika\"/>';\n\to[o.length] =     '<a:font script=\"Laoo\" typeface=\"DokChampa\"/>';\n\to[o.length] =     '<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>';\n\to[o.length] =     '<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Viet\" typeface=\"Arial\"/>';\n\to[o.length] =     '<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>';\n\to[o.length] =     '<a:font script=\"Geor\" typeface=\"Sylfaen\"/>';\n\to[o.length] =    '</a:minorFont>';\n\to[o.length] =   '</a:fontScheme>';\n\n\to[o.length] =   '<a:fmtScheme name=\"Office\">';\n\to[o.length] =    '<a:fillStyleLst>';\n\to[o.length] =     '<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:lin ang=\"16200000\" scaled=\"1\"/>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"100000\"/><a:shade val=\"100000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:shade val=\"100000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:lin ang=\"16200000\" scaled=\"0\"/>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =    '</a:fillStyleLst>';\n\to[o.length] =    '<a:lnStyleLst>';\n\to[o.length] =     '<a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"><a:shade val=\"95000\"/><a:satMod val=\"105000\"/></a:schemeClr></a:solidFill><a:prstDash val=\"solid\"/></a:ln>';\n\to[o.length] =     '<a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>';\n\to[o.length] =     '<a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>';\n\to[o.length] =    '</a:lnStyleLst>';\n\to[o.length] =    '<a:effectStyleLst>';\n\to[o.length] =     '<a:effectStyle>';\n\to[o.length] =      '<a:effectLst>';\n\to[o.length] =       '<a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"38000\"/></a:srgbClr></a:outerShdw>';\n\to[o.length] =      '</a:effectLst>';\n\to[o.length] =     '</a:effectStyle>';\n\to[o.length] =     '<a:effectStyle>';\n\to[o.length] =      '<a:effectLst>';\n\to[o.length] =       '<a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw>';\n\to[o.length] =      '</a:effectLst>';\n\to[o.length] =     '</a:effectStyle>';\n\to[o.length] =     '<a:effectStyle>';\n\to[o.length] =      '<a:effectLst>';\n\to[o.length] =       '<a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw>';\n\to[o.length] =      '</a:effectLst>';\n\to[o.length] =      '<a:scene3d><a:camera prst=\"orthographicFront\"><a:rot lat=\"0\" lon=\"0\" rev=\"0\"/></a:camera><a:lightRig rig=\"threePt\" dir=\"t\"><a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/></a:lightRig></a:scene3d>';\n\to[o.length] =      '<a:sp3d><a:bevelT w=\"63500\" h=\"25400\"/></a:sp3d>';\n\to[o.length] =     '</a:effectStyle>';\n\to[o.length] =    '</a:effectStyleLst>';\n\to[o.length] =    '<a:bgFillStyleLst>';\n\to[o.length] =     '<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"40000\"><a:schemeClr val=\"phClr\"><a:tint val=\"45000\"/><a:shade val=\"99000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =    '</a:bgFillStyleLst>';\n\to[o.length] =   '</a:fmtScheme>';\n\to[o.length] =  '</a:themeElements>';\n\n\to[o.length] =  '<a:objectDefaults>';\n\to[o.length] =   '<a:spDef>';\n\to[o.length] =    '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"3\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"lt1\"/></a:fontRef></a:style>';\n\to[o.length] =   '</a:spDef>';\n\to[o.length] =   '<a:lnDef>';\n\to[o.length] =    '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"0\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"tx1\"/></a:fontRef></a:style>';\n\to[o.length] =   '</a:lnDef>';\n\to[o.length] =  '</a:objectDefaults>';\n\to[o.length] =  '<a:extraClrSchemeLst/>';\n\to[o.length] = '</a:theme>';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array<any>*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n  return {\n    flags: data.read_shift(4),\n    version: data.read_shift(4),\n    name: parse_XLWideString(data, length - 8)\n  };\n}\nfunction write_BrtMdtinfo(data) {\n  var o = new_buf(12 + 2 * data.name.length);\n  o.write_shift(4, data.flags);\n  o.write_shift(4, data.version);\n  write_XLWideString(data.name, o);\n  return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n  var out = [];\n  var cnt = data.read_shift(4);\n  while (cnt-- > 0)\n    out.push([data.read_shift(4), data.read_shift(4)]);\n  return out;\n}\nfunction write_BrtMdb(mdb) {\n  var o = new_buf(4 + 8 * mdb.length);\n  o.write_shift(4, mdb.length);\n  for (var i = 0; i < mdb.length; ++i) {\n    o.write_shift(4, mdb[i][0]);\n    o.write_shift(4, mdb[i][1]);\n  }\n  return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n  var o = new_buf(8 + 2 * name.length);\n  o.write_shift(4, cnt);\n  write_XLWideString(name, o);\n  return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n  data.l += 4;\n  return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n  var o = new_buf(8);\n  o.write_shift(4, cnt);\n  o.write_shift(4, cm ? 1 : 0);\n  return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n  var out = { Types: [], Cell: [], Value: [] };\n  var opts = _opts || {};\n  var state = [];\n  var pass = false;\n  var metatype = 2;\n  recordhopper(data, function(val, R, RT) {\n    switch (RT) {\n      case 335:\n        out.Types.push({ name: val.name });\n        break;\n      case 51:\n        val.forEach(function(r) {\n          if (metatype == 1)\n            out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n          else if (metatype == 0)\n            out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n        });\n        break;\n      case 337:\n        metatype = val ? 1 : 0;\n        break;\n      case 338:\n        metatype = 2;\n        break;\n      case 35:\n        state.push(RT);\n        pass = true;\n        break;\n      case 36:\n        state.pop();\n        pass = false;\n        break;\n      default:\n        if (R.T) {\n        } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n          throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n    }\n  });\n  return out;\n}\nfunction write_xlmeta_bin() {\n  var ba = buf_array();\n  write_record(ba, 332);\n  write_record(ba, 334, write_UInt32LE(1));\n  write_record(ba, 335, write_BrtMdtinfo({\n    name: \"XLDAPR\",\n    version: 12e4,\n    flags: 3496657072\n  }));\n  write_record(ba, 336);\n  write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n  write_record(ba, 52);\n  write_record(ba, 35, write_UInt32LE(514));\n  write_record(ba, 4096, write_UInt32LE(0));\n  write_record(ba, 4097, writeuint16(1));\n  write_record(ba, 36);\n  write_record(ba, 53);\n  write_record(ba, 340);\n  write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n  write_record(ba, 51, write_BrtMdb([[1, 0]]));\n  write_record(ba, 338);\n  write_record(ba, 333);\n  return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n  var out = { Types: [], Cell: [], Value: [] };\n  if (!data)\n    return out;\n  var pass = false;\n  var metatype = 2;\n  var lastmeta;\n  data.replace(tagregex, function(x) {\n    var y = parsexmltag(x);\n    switch (strip_ns(y[0])) {\n      case \"<?xml\":\n        break;\n      case \"<metadata\":\n      case \"</metadata>\":\n        break;\n      case \"<metadataTypes\":\n      case \"</metadataTypes>\":\n        break;\n      case \"<metadataType\":\n        out.Types.push({ name: y.name });\n        break;\n      case \"</metadataType>\":\n        break;\n      case \"<futureMetadata\":\n        for (var j = 0; j < out.Types.length; ++j)\n          if (out.Types[j].name == y.name)\n            lastmeta = out.Types[j];\n        break;\n      case \"</futureMetadata>\":\n        break;\n      case \"<bk>\":\n        break;\n      case \"</bk>\":\n        break;\n      case \"<rc\":\n        if (metatype == 1)\n          out.Cell.push({ type: out.Types[y.t - 1].name, index: +y.v });\n        else if (metatype == 0)\n          out.Value.push({ type: out.Types[y.t - 1].name, index: +y.v });\n        break;\n      case \"</rc>\":\n        break;\n      case \"<cellMetadata\":\n        metatype = 1;\n        break;\n      case \"</cellMetadata>\":\n        metatype = 2;\n        break;\n      case \"<valueMetadata\":\n        metatype = 0;\n        break;\n      case \"</valueMetadata>\":\n        metatype = 2;\n        break;\n      case \"<extLst\":\n      case \"<extLst>\":\n      case \"</extLst>\":\n      case \"<extLst/>\":\n        break;\n      case \"<ext\":\n        pass = true;\n        break;\n      case \"</ext>\":\n        pass = false;\n        break;\n      case \"<rvb\":\n        if (!lastmeta)\n          break;\n        if (!lastmeta.offsets)\n          lastmeta.offsets = [];\n        lastmeta.offsets.push(+y.i);\n        break;\n      default:\n        if (!pass && opts.WTF)\n          throw new Error(\"unrecognized \" + y[0] + \" in metadata\");\n    }\n    return x;\n  });\n  return out;\n}\nfunction write_xlmeta_xml() {\n  var o = [XML_HEADER];\n  o.push('<metadata xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:xlrd=\"http://schemas.microsoft.com/office/spreadsheetml/2017/richdata\" xmlns:xda=\"http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray\">\\n  <metadataTypes count=\"1\">\\n    <metadataType name=\"XLDAPR\" minSupportedVersion=\"120000\" copy=\"1\" pasteAll=\"1\" pasteValues=\"1\" merge=\"1\" splitFirst=\"1\" rowColShift=\"1\" clearFormats=\"1\" clearComments=\"1\" assign=\"1\" coerce=\"1\" cellMeta=\"1\"/>\\n  </metadataTypes>\\n  <futureMetadata name=\"XLDAPR\" count=\"1\">\\n    <bk>\\n      <extLst>\\n        <ext uri=\"{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}\">\\n          <xda:dynamicArrayProperties fDynamic=\"1\" fCollapsed=\"0\"/>\\n        </ext>\\n      </extLst>\\n    </bk>\\n  </futureMetadata>\\n  <cellMetadata count=\"1\">\\n    <bk>\\n      <rc t=\"1\" v=\"0\"/>\\n    </bk>\\n  </cellMetadata>\\n</metadata>');\n  return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array<any>*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '<?xml': break;\n\t\t\t/* 18.6.2  calcChain CT_CalcChain 1 */\n\t\t\tcase '<calcChain': case '<calcChain>': case '</calcChain>': break;\n\t\t\t/* 18.6.1  c CT_CalcCell 1 */\n\t\t\tcase '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;\n\t\t}\n\t});\n\treturn d;\n}\n\n//function write_cc_xml(data, opts) { }\n\n/* [MS-XLSB] 2.6.4.1 */\nfunction parse_BrtCalcChainItem$(data) {\n\tvar out = {};\n\tout.i = data.read_shift(4);\n\tvar cell = {};\n\tcell.r = data.read_shift(4);\n\tcell.c = data.read_shift(4);\n\tout.r = encode_cell(cell);\n\tvar flags = data.read_shift(1);\n\tif(flags & 0x2) out.l = '1';\n\tif(flags & 0x8) out.a = '1';\n\treturn out;\n}\n\n/* 18.6 Calculation Chain */\nfunction parse_cc_bin(data, name, opts) {\n\tvar out = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_cc(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x003F: /* 'BrtCalcChainItem$' */\n\t\t\t\tout.push(val); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\n//function write_cc_bin(data, opts) { }\n/* 18.14 Supplementary Workbook Data */\nfunction parse_xlink_xml(/*::data, rel, name:string, _opts*/) {\n\t//var opts = _opts || {};\n\t//if(opts.WTF) throw \"XLSX External Link\";\n}\n\n/* [MS-XLSB] 2.1.7.25 External Link */\nfunction parse_xlink_bin(data, rel, name/*:string*/, _opts) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\n\tvar pass = false, end = false;\n\n\trecordhopper(data, function xlink_parse(val, R, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0167: /* 'BrtSupTabs' */\n\t\t\tcase 0x016B: /* 'BrtExternTableStart' */\n\t\t\tcase 0x016C: /* 'BrtExternTableEnd' */\n\t\t\tcase 0x016E: /* 'BrtExternRowHdr' */\n\t\t\tcase 0x016F: /* 'BrtExternCellBlank' */\n\t\t\tcase 0x0170: /* 'BrtExternCellReal' */\n\t\t\tcase 0x0171: /* 'BrtExternCellBool' */\n\t\t\tcase 0x0172: /* 'BrtExternCellError' */\n\t\t\tcase 0x0173: /* 'BrtExternCellString' */\n\t\t\tcase 0x01D8: /* 'BrtExternValueMeta' */\n\t\t\tcase 0x0241: /* 'BrtSupNameStart' */\n\t\t\tcase 0x0242: /* 'BrtSupNameValueStart' */\n\t\t\tcase 0x0243: /* 'BrtSupNameValueEnd' */\n\t\t\tcase 0x0244: /* 'BrtSupNameNum' */\n\t\t\tcase 0x0245: /* 'BrtSupNameErr' */\n\t\t\tcase 0x0246: /* 'BrtSupNameSt' */\n\t\t\tcase 0x0247: /* 'BrtSupNameNil' */\n\t\t\tcase 0x0248: /* 'BrtSupNameBool' */\n\t\t\tcase 0x0249: /* 'BrtSupNameFmla' */\n\t\t\tcase 0x024A: /* 'BrtSupNameBits' */\n\t\t\tcase 0x024B: /* 'BrtSupNameEnd' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\n/* 20.5.2.35 wsDr CT_Drawing */\nfunction parse_drawing(data, rels/*:any*/) {\n\tif(!data) return \"??\";\n\t/*\n\t  Chartsheet Drawing:\n\t   - 20.5.2.35 wsDr CT_Drawing\n\t    - 20.5.2.1  absoluteAnchor CT_AbsoluteAnchor\n\t     - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n\t      - 20.1.2.2.16 graphic CT_GraphicalObject\n\t       - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n          - chart reference\n\t   the actual type is based on the URI of the graphicData\n\t\tTODO: handle embedded charts and other types of graphics\n\t*/\n\tvar id = (data.match(/<c:chart [^>]*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId/*:number*/, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\t++_shapeid;\n\n\to = o.concat([\n\t'<v:shape' + wxt_helper({\n\t\tid:'_x0000_s' + _shapeid,\n\t\ttype:\"#_x0000_t202\",\n\t\tstyle:\"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10\" + (x[1].hidden ? \";visibility:hidden\" : \"\") ,\n\t\tfillcolor:\"#ECFAD4\",\n\t\tstrokecolor:\"#edeaa1\"\n\t}) + '>',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'<v:textbox><div style=\"text-align:left\"></div></v:textbox>',\n\t\t'<x:ClientData ObjectType=\"Note\">',\n\t\t\t'<x:MoveWithCells/>',\n\t\t\t'<x:SizeWithCells/>',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '<x:Visible/>',\n\t\t'</x:ClientData>',\n\t'</v:shape>'\n\t]); });\n\to.push('</xml>');\n\treturn o.join(\"\");\n}\nfunction sheet_insert_comments(sheet, comments/*:Array<RawComment>*/, threaded/*:boolean*/, people/*:?Array<any>*/) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array<string>*/ = [];\n\tvar commentList/*:Array<RawComment>*/ = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"<t></t>\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array<string>*/ = [];\n\to.push(\"<authors>\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"<author>\" + a + \"</author>\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"<author>\" + \"tc=\" + w.ID + \"</author>\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"<author>SheetJ5</author>\"); }\n\to.push(\"</authors>\");\n\to.push(\"<commentList>\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [];\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\telse d[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tts.push(c.t||\"\");\n\t\t});\n\t\to.push('<comment ref=\"' + d[0] + '\" authorId=\"' + lastauthor + '\"><text>');\n\t\tif(ts.length <= 1) o.push(writetag(\"t\", escapexml(ts[0]||\"\")));\n\t\telse {\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\tvar t = \"Comment:\\n    \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n    \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t}\n\t\to.push('</text></comment>');\n\t});\n\to.push(\"</commentList>\");\n\tif(o.length>2) { o[o.length] = ('</comments>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\n\t\t\t/* 2.6.207 ThreadedComments CT_ThreadedComments */\n\t\t\tcase '<ThreadedComments': break;\n\t\t\tcase '</ThreadedComments>': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '<threadedComment': comment = {author: y.personId, guid: y.id, ref: y.ref, T: 1}; break;\n\t\t\tcase '</threadedComment>': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '<text>': case '<text': tidx = idx + x.length; break;\n\t\t\tcase '</text>': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '<mentions': case '<mentions>': pass = true; break;\n\t\t\tcase '</mentions>': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;\n\t\t\t/* 18.2.7  ext CT_Extension + */\n\t\t\tcase '<ext': pass=true; break;\n\t\t\tcase '</ext>': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('</ThreadedComments>');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\n\t\t\t/* 2.4.85 personList CT_PersonList */\n\t\t\tcase '<personList': break;\n\t\t\tcase '</personList>': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '<person': out.push({name: y.displayname, id: y.id }); break;\n\t\t\tcase '</person>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;\n\t\t\t/* 18.2.7  ext CT_Extension + */\n\t\t\tcase '<ext': pass=true; break;\n\t\t\tcase '</ext>': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"</personList>\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array<RawComment>*/ {\n\tvar out/*:Array<RawComment>*/ = [];\n\tvar authors/*:Array<string>*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array<string>*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n  var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n  cfb.FullPaths.forEach(function(p, i) {\n    if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n      return;\n    var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n    CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n  });\n  return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n  vba.FullPaths.forEach(function(p, i) {\n    if (i == 0)\n      return;\n    var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n    if (newpath.slice(-1) !== \"/\")\n      CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n  });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array<number>*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array<number>*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array<Range>*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array<Array<any>>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73  ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t/*::[*/0x01/*::]*/: { n:'PtgExp', f:parse_PtgExp },\n\t/*::[*/0x02/*::]*/: { n:'PtgTbl', f:parse_PtgTbl },\n\t/*::[*/0x03/*::]*/: { n:'PtgAdd', f:parseread1 },\n\t/*::[*/0x04/*::]*/: { n:'PtgSub', f:parseread1 },\n\t/*::[*/0x05/*::]*/: { n:'PtgMul', f:parseread1 },\n\t/*::[*/0x06/*::]*/: { n:'PtgDiv', f:parseread1 },\n\t/*::[*/0x07/*::]*/: { n:'PtgPower', f:parseread1 },\n\t/*::[*/0x08/*::]*/: { n:'PtgConcat', f:parseread1 },\n\t/*::[*/0x09/*::]*/: { n:'PtgLt', f:parseread1 },\n\t/*::[*/0x0A/*::]*/: { n:'PtgLe', f:parseread1 },\n\t/*::[*/0x0B/*::]*/: { n:'PtgEq', f:parseread1 },\n\t/*::[*/0x0C/*::]*/: { n:'PtgGe', f:parseread1 },\n\t/*::[*/0x0D/*::]*/: { n:'PtgGt', f:parseread1 },\n\t/*::[*/0x0E/*::]*/: { n:'PtgNe', f:parseread1 },\n\t/*::[*/0x0F/*::]*/: { n:'PtgIsect', f:parseread1 },\n\t/*::[*/0x10/*::]*/: { n:'PtgUnion', f:parseread1 },\n\t/*::[*/0x11/*::]*/: { n:'PtgRange', f:parseread1 },\n\t/*::[*/0x12/*::]*/: { n:'PtgUplus', f:parseread1 },\n\t/*::[*/0x13/*::]*/: { n:'PtgUminus', f:parseread1 },\n\t/*::[*/0x14/*::]*/: { n:'PtgPercent', f:parseread1 },\n\t/*::[*/0x15/*::]*/: { n:'PtgParen', f:parseread1 },\n\t/*::[*/0x16/*::]*/: { n:'PtgMissArg', f:parseread1 },\n\t/*::[*/0x17/*::]*/: { n:'PtgStr', f:parse_PtgStr },\n\t/*::[*/0x1A/*::]*/: { n:'PtgSheet', f:parse_PtgSheet },\n\t/*::[*/0x1B/*::]*/: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t/*::[*/0x1C/*::]*/: { n:'PtgErr', f:parse_PtgErr },\n\t/*::[*/0x1D/*::]*/: { n:'PtgBool', f:parse_PtgBool },\n\t/*::[*/0x1E/*::]*/: { n:'PtgInt', f:parse_PtgInt },\n\t/*::[*/0x1F/*::]*/: { n:'PtgNum', f:parse_PtgNum },\n\t/*::[*/0x20/*::]*/: { n:'PtgArray', f:parse_PtgArray },\n\t/*::[*/0x21/*::]*/: { n:'PtgFunc', f:parse_PtgFunc },\n\t/*::[*/0x22/*::]*/: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t/*::[*/0x23/*::]*/: { n:'PtgName', f:parse_PtgName },\n\t/*::[*/0x24/*::]*/: { n:'PtgRef', f:parse_PtgRef },\n\t/*::[*/0x25/*::]*/: { n:'PtgArea', f:parse_PtgArea },\n\t/*::[*/0x26/*::]*/: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t/*::[*/0x27/*::]*/: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t/*::[*/0x28/*::]*/: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t/*::[*/0x29/*::]*/: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t/*::[*/0x2A/*::]*/: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t/*::[*/0x2B/*::]*/: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t/*::[*/0x2C/*::]*/: { n:'PtgRefN', f:parse_PtgRefN },\n\t/*::[*/0x2D/*::]*/: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t/*::[*/0x2E/*::]*/: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t/*::[*/0x2F/*::]*/: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t/*::[*/0x39/*::]*/: { n:'PtgNameX', f:parse_PtgNameX },\n\t/*::[*/0x3A/*::]*/: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t/*::[*/0x3B/*::]*/: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t/*::[*/0x3C/*::]*/: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t/*::[*/0x3D/*::]*/: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t/*::[*/0xFF/*::]*/: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t/*::[*/0x40/*::]*/: 0x20, /*::[*/0x60/*::]*/: 0x20,\n\t/*::[*/0x41/*::]*/: 0x21, /*::[*/0x61/*::]*/: 0x21,\n\t/*::[*/0x42/*::]*/: 0x22, /*::[*/0x62/*::]*/: 0x22,\n\t/*::[*/0x43/*::]*/: 0x23, /*::[*/0x63/*::]*/: 0x23,\n\t/*::[*/0x44/*::]*/: 0x24, /*::[*/0x64/*::]*/: 0x24,\n\t/*::[*/0x45/*::]*/: 0x25, /*::[*/0x65/*::]*/: 0x25,\n\t/*::[*/0x46/*::]*/: 0x26, /*::[*/0x66/*::]*/: 0x26,\n\t/*::[*/0x47/*::]*/: 0x27, /*::[*/0x67/*::]*/: 0x27,\n\t/*::[*/0x48/*::]*/: 0x28, /*::[*/0x68/*::]*/: 0x28,\n\t/*::[*/0x49/*::]*/: 0x29, /*::[*/0x69/*::]*/: 0x29,\n\t/*::[*/0x4A/*::]*/: 0x2A, /*::[*/0x6A/*::]*/: 0x2A,\n\t/*::[*/0x4B/*::]*/: 0x2B, /*::[*/0x6B/*::]*/: 0x2B,\n\t/*::[*/0x4C/*::]*/: 0x2C, /*::[*/0x6C/*::]*/: 0x2C,\n\t/*::[*/0x4D/*::]*/: 0x2D, /*::[*/0x6D/*::]*/: 0x2D,\n\t/*::[*/0x4E/*::]*/: 0x2E, /*::[*/0x6E/*::]*/: 0x2E,\n\t/*::[*/0x4F/*::]*/: 0x2F, /*::[*/0x6F/*::]*/: 0x2F,\n\t/*::[*/0x58/*::]*/: 0x22, /*::[*/0x78/*::]*/: 0x22,\n\t/*::[*/0x59/*::]*/: 0x39, /*::[*/0x79/*::]*/: 0x39,\n\t/*::[*/0x5A/*::]*/: 0x3A, /*::[*/0x7A/*::]*/: 0x3A,\n\t/*::[*/0x5B/*::]*/: 0x3B, /*::[*/0x7B/*::]*/: 0x3B,\n\t/*::[*/0x5C/*::]*/: 0x3C, /*::[*/0x7C/*::]*/: 0x3C,\n\t/*::[*/0x5D/*::]*/: 0x3D, /*::[*/0x7D/*::]*/: 0x3D\n};\n\nvar Ptg18 = {\n\t/*::[*/0x01/*::]*/: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t/*::[*/0x02/*::]*/: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t/*::[*/0x03/*::]*/: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t/*::[*/0x06/*::]*/: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t/*::[*/0x07/*::]*/: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t/*::[*/0x0A/*::]*/: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t/*::[*/0x0B/*::]*/: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t/*::[*/0x0D/*::]*/: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t/*::[*/0x0F/*::]*/: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t/*::[*/0x10/*::]*/: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t/*::[*/0x19/*::]*/: { n:'PtgList', f:parse_PtgList },\n\t/*::[*/0x1D/*::]*/: { n:'PtgSxName', f:parse_PtgSxName },\n\t/*::[*/0xFF/*::]*/: {}\n};\nvar Ptg19 = {\n\t/*::[*/0x00/*::]*/: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t/*::[*/0x01/*::]*/: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t/*::[*/0x02/*::]*/: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t/*::[*/0x04/*::]*/: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t/*::[*/0x08/*::]*/: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t/*::[*/0x10/*::]*/: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t/*::[*/0x20/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x21/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x40/*::]*/: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t/*::[*/0x41/*::]*/: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t/*::[*/0x80/*::]*/: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t/*::[*/0xFF/*::]*/: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array<Array<string>>*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array<string>*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array<string>*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd':    /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv':    /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq':     /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe':     /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt':     /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe':     /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt':     /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul':    /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe':     /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower':  /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub':    /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\nvar Cetab = {\n  0: \"BEEP\",\n  1: \"OPEN\",\n  2: \"OPEN.LINKS\",\n  3: \"CLOSE.ALL\",\n  4: \"SAVE\",\n  5: \"SAVE.AS\",\n  6: \"FILE.DELETE\",\n  7: \"PAGE.SETUP\",\n  8: \"PRINT\",\n  9: \"PRINTER.SETUP\",\n  10: \"QUIT\",\n  11: \"NEW.WINDOW\",\n  12: \"ARRANGE.ALL\",\n  13: \"WINDOW.SIZE\",\n  14: \"WINDOW.MOVE\",\n  15: \"FULL\",\n  16: \"CLOSE\",\n  17: \"RUN\",\n  22: \"SET.PRINT.AREA\",\n  23: \"SET.PRINT.TITLES\",\n  24: \"SET.PAGE.BREAK\",\n  25: \"REMOVE.PAGE.BREAK\",\n  26: \"FONT\",\n  27: \"DISPLAY\",\n  28: \"PROTECT.DOCUMENT\",\n  29: \"PRECISION\",\n  30: \"A1.R1C1\",\n  31: \"CALCULATE.NOW\",\n  32: \"CALCULATION\",\n  34: \"DATA.FIND\",\n  35: \"EXTRACT\",\n  36: \"DATA.DELETE\",\n  37: \"SET.DATABASE\",\n  38: \"SET.CRITERIA\",\n  39: \"SORT\",\n  40: \"DATA.SERIES\",\n  41: \"TABLE\",\n  42: \"FORMAT.NUMBER\",\n  43: \"ALIGNMENT\",\n  44: \"STYLE\",\n  45: \"BORDER\",\n  46: \"CELL.PROTECTION\",\n  47: \"COLUMN.WIDTH\",\n  48: \"UNDO\",\n  49: \"CUT\",\n  50: \"COPY\",\n  51: \"PASTE\",\n  52: \"CLEAR\",\n  53: \"PASTE.SPECIAL\",\n  54: \"EDIT.DELETE\",\n  55: \"INSERT\",\n  56: \"FILL.RIGHT\",\n  57: \"FILL.DOWN\",\n  61: \"DEFINE.NAME\",\n  62: \"CREATE.NAMES\",\n  63: \"FORMULA.GOTO\",\n  64: \"FORMULA.FIND\",\n  65: \"SELECT.LAST.CELL\",\n  66: \"SHOW.ACTIVE.CELL\",\n  67: \"GALLERY.AREA\",\n  68: \"GALLERY.BAR\",\n  69: \"GALLERY.COLUMN\",\n  70: \"GALLERY.LINE\",\n  71: \"GALLERY.PIE\",\n  72: \"GALLERY.SCATTER\",\n  73: \"COMBINATION\",\n  74: \"PREFERRED\",\n  75: \"ADD.OVERLAY\",\n  76: \"GRIDLINES\",\n  77: \"SET.PREFERRED\",\n  78: \"AXES\",\n  79: \"LEGEND\",\n  80: \"ATTACH.TEXT\",\n  81: \"ADD.ARROW\",\n  82: \"SELECT.CHART\",\n  83: \"SELECT.PLOT.AREA\",\n  84: \"PATTERNS\",\n  85: \"MAIN.CHART\",\n  86: \"OVERLAY\",\n  87: \"SCALE\",\n  88: \"FORMAT.LEGEND\",\n  89: \"FORMAT.TEXT\",\n  90: \"EDIT.REPEAT\",\n  91: \"PARSE\",\n  92: \"JUSTIFY\",\n  93: \"HIDE\",\n  94: \"UNHIDE\",\n  95: \"WORKSPACE\",\n  96: \"FORMULA\",\n  97: \"FORMULA.FILL\",\n  98: \"FORMULA.ARRAY\",\n  99: \"DATA.FIND.NEXT\",\n  100: \"DATA.FIND.PREV\",\n  101: \"FORMULA.FIND.NEXT\",\n  102: \"FORMULA.FIND.PREV\",\n  103: \"ACTIVATE\",\n  104: \"ACTIVATE.NEXT\",\n  105: \"ACTIVATE.PREV\",\n  106: \"UNLOCKED.NEXT\",\n  107: \"UNLOCKED.PREV\",\n  108: \"COPY.PICTURE\",\n  109: \"SELECT\",\n  110: \"DELETE.NAME\",\n  111: \"DELETE.FORMAT\",\n  112: \"VLINE\",\n  113: \"HLINE\",\n  114: \"VPAGE\",\n  115: \"HPAGE\",\n  116: \"VSCROLL\",\n  117: \"HSCROLL\",\n  118: \"ALERT\",\n  119: \"NEW\",\n  120: \"CANCEL.COPY\",\n  121: \"SHOW.CLIPBOARD\",\n  122: \"MESSAGE\",\n  124: \"PASTE.LINK\",\n  125: \"APP.ACTIVATE\",\n  126: \"DELETE.ARROW\",\n  127: \"ROW.HEIGHT\",\n  128: \"FORMAT.MOVE\",\n  129: \"FORMAT.SIZE\",\n  130: \"FORMULA.REPLACE\",\n  131: \"SEND.KEYS\",\n  132: \"SELECT.SPECIAL\",\n  133: \"APPLY.NAMES\",\n  134: \"REPLACE.FONT\",\n  135: \"FREEZE.PANES\",\n  136: \"SHOW.INFO\",\n  137: \"SPLIT\",\n  138: \"ON.WINDOW\",\n  139: \"ON.DATA\",\n  140: \"DISABLE.INPUT\",\n  142: \"OUTLINE\",\n  143: \"LIST.NAMES\",\n  144: \"FILE.CLOSE\",\n  145: \"SAVE.WORKBOOK\",\n  146: \"DATA.FORM\",\n  147: \"COPY.CHART\",\n  148: \"ON.TIME\",\n  149: \"WAIT\",\n  150: \"FORMAT.FONT\",\n  151: \"FILL.UP\",\n  152: \"FILL.LEFT\",\n  153: \"DELETE.OVERLAY\",\n  155: \"SHORT.MENUS\",\n  159: \"SET.UPDATE.STATUS\",\n  161: \"COLOR.PALETTE\",\n  162: \"DELETE.STYLE\",\n  163: \"WINDOW.RESTORE\",\n  164: \"WINDOW.MAXIMIZE\",\n  166: \"CHANGE.LINK\",\n  167: \"CALCULATE.DOCUMENT\",\n  168: \"ON.KEY\",\n  169: \"APP.RESTORE\",\n  170: \"APP.MOVE\",\n  171: \"APP.SIZE\",\n  172: \"APP.MINIMIZE\",\n  173: \"APP.MAXIMIZE\",\n  174: \"BRING.TO.FRONT\",\n  175: \"SEND.TO.BACK\",\n  185: \"MAIN.CHART.TYPE\",\n  186: \"OVERLAY.CHART.TYPE\",\n  187: \"SELECT.END\",\n  188: \"OPEN.MAIL\",\n  189: \"SEND.MAIL\",\n  190: \"STANDARD.FONT\",\n  191: \"CONSOLIDATE\",\n  192: \"SORT.SPECIAL\",\n  193: \"GALLERY.3D.AREA\",\n  194: \"GALLERY.3D.COLUMN\",\n  195: \"GALLERY.3D.LINE\",\n  196: \"GALLERY.3D.PIE\",\n  197: \"VIEW.3D\",\n  198: \"GOAL.SEEK\",\n  199: \"WORKGROUP\",\n  200: \"FILL.GROUP\",\n  201: \"UPDATE.LINK\",\n  202: \"PROMOTE\",\n  203: \"DEMOTE\",\n  204: \"SHOW.DETAIL\",\n  206: \"UNGROUP\",\n  207: \"OBJECT.PROPERTIES\",\n  208: \"SAVE.NEW.OBJECT\",\n  209: \"SHARE\",\n  210: \"SHARE.NAME\",\n  211: \"DUPLICATE\",\n  212: \"APPLY.STYLE\",\n  213: \"ASSIGN.TO.OBJECT\",\n  214: \"OBJECT.PROTECTION\",\n  215: \"HIDE.OBJECT\",\n  216: \"SET.EXTRACT\",\n  217: \"CREATE.PUBLISHER\",\n  218: \"SUBSCRIBE.TO\",\n  219: \"ATTRIBUTES\",\n  220: \"SHOW.TOOLBAR\",\n  222: \"PRINT.PREVIEW\",\n  223: \"EDIT.COLOR\",\n  224: \"SHOW.LEVELS\",\n  225: \"FORMAT.MAIN\",\n  226: \"FORMAT.OVERLAY\",\n  227: \"ON.RECALC\",\n  228: \"EDIT.SERIES\",\n  229: \"DEFINE.STYLE\",\n  240: \"LINE.PRINT\",\n  243: \"ENTER.DATA\",\n  249: \"GALLERY.RADAR\",\n  250: \"MERGE.STYLES\",\n  251: \"EDITION.OPTIONS\",\n  252: \"PASTE.PICTURE\",\n  253: \"PASTE.PICTURE.LINK\",\n  254: \"SPELLING\",\n  256: \"ZOOM\",\n  259: \"INSERT.OBJECT\",\n  260: \"WINDOW.MINIMIZE\",\n  265: \"SOUND.NOTE\",\n  266: \"SOUND.PLAY\",\n  267: \"FORMAT.SHAPE\",\n  268: \"EXTEND.POLYGON\",\n  269: \"FORMAT.AUTO\",\n  272: \"GALLERY.3D.BAR\",\n  273: \"GALLERY.3D.SURFACE\",\n  274: \"FILL.AUTO\",\n  276: \"CUSTOMIZE.TOOLBAR\",\n  277: \"ADD.TOOL\",\n  278: \"EDIT.OBJECT\",\n  279: \"ON.DOUBLECLICK\",\n  280: \"ON.ENTRY\",\n  281: \"WORKBOOK.ADD\",\n  282: \"WORKBOOK.MOVE\",\n  283: \"WORKBOOK.COPY\",\n  284: \"WORKBOOK.OPTIONS\",\n  285: \"SAVE.WORKSPACE\",\n  288: \"CHART.WIZARD\",\n  289: \"DELETE.TOOL\",\n  290: \"MOVE.TOOL\",\n  291: \"WORKBOOK.SELECT\",\n  292: \"WORKBOOK.ACTIVATE\",\n  293: \"ASSIGN.TO.TOOL\",\n  295: \"COPY.TOOL\",\n  296: \"RESET.TOOL\",\n  297: \"CONSTRAIN.NUMERIC\",\n  298: \"PASTE.TOOL\",\n  302: \"WORKBOOK.NEW\",\n  305: \"SCENARIO.CELLS\",\n  306: \"SCENARIO.DELETE\",\n  307: \"SCENARIO.ADD\",\n  308: \"SCENARIO.EDIT\",\n  309: \"SCENARIO.SHOW\",\n  310: \"SCENARIO.SHOW.NEXT\",\n  311: \"SCENARIO.SUMMARY\",\n  312: \"PIVOT.TABLE.WIZARD\",\n  313: \"PIVOT.FIELD.PROPERTIES\",\n  314: \"PIVOT.FIELD\",\n  315: \"PIVOT.ITEM\",\n  316: \"PIVOT.ADD.FIELDS\",\n  318: \"OPTIONS.CALCULATION\",\n  319: \"OPTIONS.EDIT\",\n  320: \"OPTIONS.VIEW\",\n  321: \"ADDIN.MANAGER\",\n  322: \"MENU.EDITOR\",\n  323: \"ATTACH.TOOLBARS\",\n  324: \"VBAActivate\",\n  325: \"OPTIONS.CHART\",\n  328: \"VBA.INSERT.FILE\",\n  330: \"VBA.PROCEDURE.DEFINITION\",\n  336: \"ROUTING.SLIP\",\n  338: \"ROUTE.DOCUMENT\",\n  339: \"MAIL.LOGON\",\n  342: \"INSERT.PICTURE\",\n  343: \"EDIT.TOOL\",\n  344: \"GALLERY.DOUGHNUT\",\n  350: \"CHART.TREND\",\n  352: \"PIVOT.ITEM.PROPERTIES\",\n  354: \"WORKBOOK.INSERT\",\n  355: \"OPTIONS.TRANSITION\",\n  356: \"OPTIONS.GENERAL\",\n  370: \"FILTER.ADVANCED\",\n  373: \"MAIL.ADD.MAILER\",\n  374: \"MAIL.DELETE.MAILER\",\n  375: \"MAIL.REPLY\",\n  376: \"MAIL.REPLY.ALL\",\n  377: \"MAIL.FORWARD\",\n  378: \"MAIL.NEXT.LETTER\",\n  379: \"DATA.LABEL\",\n  380: \"INSERT.TITLE\",\n  381: \"FONT.PROPERTIES\",\n  382: \"MACRO.OPTIONS\",\n  383: \"WORKBOOK.HIDE\",\n  384: \"WORKBOOK.UNHIDE\",\n  385: \"WORKBOOK.DELETE\",\n  386: \"WORKBOOK.NAME\",\n  388: \"GALLERY.CUSTOM\",\n  390: \"ADD.CHART.AUTOFORMAT\",\n  391: \"DELETE.CHART.AUTOFORMAT\",\n  392: \"CHART.ADD.DATA\",\n  393: \"AUTO.OUTLINE\",\n  394: \"TAB.ORDER\",\n  395: \"SHOW.DIALOG\",\n  396: \"SELECT.ALL\",\n  397: \"UNGROUP.SHEETS\",\n  398: \"SUBTOTAL.CREATE\",\n  399: \"SUBTOTAL.REMOVE\",\n  400: \"RENAME.OBJECT\",\n  412: \"WORKBOOK.SCROLL\",\n  413: \"WORKBOOK.NEXT\",\n  414: \"WORKBOOK.PREV\",\n  415: \"WORKBOOK.TAB.SPLIT\",\n  416: \"FULL.SCREEN\",\n  417: \"WORKBOOK.PROTECT\",\n  420: \"SCROLLBAR.PROPERTIES\",\n  421: \"PIVOT.SHOW.PAGES\",\n  422: \"TEXT.TO.COLUMNS\",\n  423: \"FORMAT.CHARTTYPE\",\n  424: \"LINK.FORMAT\",\n  425: \"TRACER.DISPLAY\",\n  430: \"TRACER.NAVIGATE\",\n  431: \"TRACER.CLEAR\",\n  432: \"TRACER.ERROR\",\n  433: \"PIVOT.FIELD.GROUP\",\n  434: \"PIVOT.FIELD.UNGROUP\",\n  435: \"CHECKBOX.PROPERTIES\",\n  436: \"LABEL.PROPERTIES\",\n  437: \"LISTBOX.PROPERTIES\",\n  438: \"EDITBOX.PROPERTIES\",\n  439: \"PIVOT.REFRESH\",\n  440: \"LINK.COMBO\",\n  441: \"OPEN.TEXT\",\n  442: \"HIDE.DIALOG\",\n  443: \"SET.DIALOG.FOCUS\",\n  444: \"ENABLE.OBJECT\",\n  445: \"PUSHBUTTON.PROPERTIES\",\n  446: \"SET.DIALOG.DEFAULT\",\n  447: \"FILTER\",\n  448: \"FILTER.SHOW.ALL\",\n  449: \"CLEAR.OUTLINE\",\n  450: \"FUNCTION.WIZARD\",\n  451: \"ADD.LIST.ITEM\",\n  452: \"SET.LIST.ITEM\",\n  453: \"REMOVE.LIST.ITEM\",\n  454: \"SELECT.LIST.ITEM\",\n  455: \"SET.CONTROL.VALUE\",\n  456: \"SAVE.COPY.AS\",\n  458: \"OPTIONS.LISTS.ADD\",\n  459: \"OPTIONS.LISTS.DELETE\",\n  460: \"SERIES.AXES\",\n  461: \"SERIES.X\",\n  462: \"SERIES.Y\",\n  463: \"ERRORBAR.X\",\n  464: \"ERRORBAR.Y\",\n  465: \"FORMAT.CHART\",\n  466: \"SERIES.ORDER\",\n  467: \"MAIL.LOGOFF\",\n  468: \"CLEAR.ROUTING.SLIP\",\n  469: \"APP.ACTIVATE.MICROSOFT\",\n  470: \"MAIL.EDIT.MAILER\",\n  471: \"ON.SHEET\",\n  472: \"STANDARD.WIDTH\",\n  473: \"SCENARIO.MERGE\",\n  474: \"SUMMARY.INFO\",\n  475: \"FIND.FILE\",\n  476: \"ACTIVE.CELL.FONT\",\n  477: \"ENABLE.TIPWIZARD\",\n  478: \"VBA.MAKE.ADDIN\",\n  480: \"INSERTDATATABLE\",\n  481: \"WORKGROUP.OPTIONS\",\n  482: \"MAIL.SEND.MAILER\",\n  485: \"AUTOCORRECT\",\n  489: \"POST.DOCUMENT\",\n  491: \"PICKLIST\",\n  493: \"VIEW.SHOW\",\n  494: \"VIEW.DEFINE\",\n  495: \"VIEW.DELETE\",\n  509: \"SHEET.BACKGROUND\",\n  510: \"INSERT.MAP.OBJECT\",\n  511: \"OPTIONS.MENONO\",\n  517: \"MSOCHECKS\",\n  518: \"NORMAL\",\n  519: \"LAYOUT\",\n  520: \"RM.PRINT.AREA\",\n  521: \"CLEAR.PRINT.AREA\",\n  522: \"ADD.PRINT.AREA\",\n  523: \"MOVE.BRK\",\n  545: \"HIDECURR.NOTE\",\n  546: \"HIDEALL.NOTES\",\n  547: \"DELETE.NOTE\",\n  548: \"TRAVERSE.NOTES\",\n  549: \"ACTIVATE.NOTES\",\n  620: \"PROTECT.REVISIONS\",\n  621: \"UNPROTECT.REVISIONS\",\n  647: \"OPTIONS.ME\",\n  653: \"WEB.PUBLISH\",\n  667: \"NEWWEBQUERY\",\n  673: \"PIVOT.TABLE.CHART\",\n  753: \"OPTIONS.SAVE\",\n  755: \"OPTIONS.SPELL\",\n  808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n  0: \"COUNT\",\n  1: \"IF\",\n  2: \"ISNA\",\n  3: \"ISERROR\",\n  4: \"SUM\",\n  5: \"AVERAGE\",\n  6: \"MIN\",\n  7: \"MAX\",\n  8: \"ROW\",\n  9: \"COLUMN\",\n  10: \"NA\",\n  11: \"NPV\",\n  12: \"STDEV\",\n  13: \"DOLLAR\",\n  14: \"FIXED\",\n  15: \"SIN\",\n  16: \"COS\",\n  17: \"TAN\",\n  18: \"ATAN\",\n  19: \"PI\",\n  20: \"SQRT\",\n  21: \"EXP\",\n  22: \"LN\",\n  23: \"LOG10\",\n  24: \"ABS\",\n  25: \"INT\",\n  26: \"SIGN\",\n  27: \"ROUND\",\n  28: \"LOOKUP\",\n  29: \"INDEX\",\n  30: \"REPT\",\n  31: \"MID\",\n  32: \"LEN\",\n  33: \"VALUE\",\n  34: \"TRUE\",\n  35: \"FALSE\",\n  36: \"AND\",\n  37: \"OR\",\n  38: \"NOT\",\n  39: \"MOD\",\n  40: \"DCOUNT\",\n  41: \"DSUM\",\n  42: \"DAVERAGE\",\n  43: \"DMIN\",\n  44: \"DMAX\",\n  45: \"DSTDEV\",\n  46: \"VAR\",\n  47: \"DVAR\",\n  48: \"TEXT\",\n  49: \"LINEST\",\n  50: \"TREND\",\n  51: \"LOGEST\",\n  52: \"GROWTH\",\n  53: \"GOTO\",\n  54: \"HALT\",\n  55: \"RETURN\",\n  56: \"PV\",\n  57: \"FV\",\n  58: \"NPER\",\n  59: \"PMT\",\n  60: \"RATE\",\n  61: \"MIRR\",\n  62: \"IRR\",\n  63: \"RAND\",\n  64: \"MATCH\",\n  65: \"DATE\",\n  66: \"TIME\",\n  67: \"DAY\",\n  68: \"MONTH\",\n  69: \"YEAR\",\n  70: \"WEEKDAY\",\n  71: \"HOUR\",\n  72: \"MINUTE\",\n  73: \"SECOND\",\n  74: \"NOW\",\n  75: \"AREAS\",\n  76: \"ROWS\",\n  77: \"COLUMNS\",\n  78: \"OFFSET\",\n  79: \"ABSREF\",\n  80: \"RELREF\",\n  81: \"ARGUMENT\",\n  82: \"SEARCH\",\n  83: \"TRANSPOSE\",\n  84: \"ERROR\",\n  85: \"STEP\",\n  86: \"TYPE\",\n  87: \"ECHO\",\n  88: \"SET.NAME\",\n  89: \"CALLER\",\n  90: \"DEREF\",\n  91: \"WINDOWS\",\n  92: \"SERIES\",\n  93: \"DOCUMENTS\",\n  94: \"ACTIVE.CELL\",\n  95: \"SELECTION\",\n  96: \"RESULT\",\n  97: \"ATAN2\",\n  98: \"ASIN\",\n  99: \"ACOS\",\n  100: \"CHOOSE\",\n  101: \"HLOOKUP\",\n  102: \"VLOOKUP\",\n  103: \"LINKS\",\n  104: \"INPUT\",\n  105: \"ISREF\",\n  106: \"GET.FORMULA\",\n  107: \"GET.NAME\",\n  108: \"SET.VALUE\",\n  109: \"LOG\",\n  110: \"EXEC\",\n  111: \"CHAR\",\n  112: \"LOWER\",\n  113: \"UPPER\",\n  114: \"PROPER\",\n  115: \"LEFT\",\n  116: \"RIGHT\",\n  117: \"EXACT\",\n  118: \"TRIM\",\n  119: \"REPLACE\",\n  120: \"SUBSTITUTE\",\n  121: \"CODE\",\n  122: \"NAMES\",\n  123: \"DIRECTORY\",\n  124: \"FIND\",\n  125: \"CELL\",\n  126: \"ISERR\",\n  127: \"ISTEXT\",\n  128: \"ISNUMBER\",\n  129: \"ISBLANK\",\n  130: \"T\",\n  131: \"N\",\n  132: \"FOPEN\",\n  133: \"FCLOSE\",\n  134: \"FSIZE\",\n  135: \"FREADLN\",\n  136: \"FREAD\",\n  137: \"FWRITELN\",\n  138: \"FWRITE\",\n  139: \"FPOS\",\n  140: \"DATEVALUE\",\n  141: \"TIMEVALUE\",\n  142: \"SLN\",\n  143: \"SYD\",\n  144: \"DDB\",\n  145: \"GET.DEF\",\n  146: \"REFTEXT\",\n  147: \"TEXTREF\",\n  148: \"INDIRECT\",\n  149: \"REGISTER\",\n  150: \"CALL\",\n  151: \"ADD.BAR\",\n  152: \"ADD.MENU\",\n  153: \"ADD.COMMAND\",\n  154: \"ENABLE.COMMAND\",\n  155: \"CHECK.COMMAND\",\n  156: \"RENAME.COMMAND\",\n  157: \"SHOW.BAR\",\n  158: \"DELETE.MENU\",\n  159: \"DELETE.COMMAND\",\n  160: \"GET.CHART.ITEM\",\n  161: \"DIALOG.BOX\",\n  162: \"CLEAN\",\n  163: \"MDETERM\",\n  164: \"MINVERSE\",\n  165: \"MMULT\",\n  166: \"FILES\",\n  167: \"IPMT\",\n  168: \"PPMT\",\n  169: \"COUNTA\",\n  170: \"CANCEL.KEY\",\n  171: \"FOR\",\n  172: \"WHILE\",\n  173: \"BREAK\",\n  174: \"NEXT\",\n  175: \"INITIATE\",\n  176: \"REQUEST\",\n  177: \"POKE\",\n  178: \"EXECUTE\",\n  179: \"TERMINATE\",\n  180: \"RESTART\",\n  181: \"HELP\",\n  182: \"GET.BAR\",\n  183: \"PRODUCT\",\n  184: \"FACT\",\n  185: \"GET.CELL\",\n  186: \"GET.WORKSPACE\",\n  187: \"GET.WINDOW\",\n  188: \"GET.DOCUMENT\",\n  189: \"DPRODUCT\",\n  190: \"ISNONTEXT\",\n  191: \"GET.NOTE\",\n  192: \"NOTE\",\n  193: \"STDEVP\",\n  194: \"VARP\",\n  195: \"DSTDEVP\",\n  196: \"DVARP\",\n  197: \"TRUNC\",\n  198: \"ISLOGICAL\",\n  199: \"DCOUNTA\",\n  200: \"DELETE.BAR\",\n  201: \"UNREGISTER\",\n  204: \"USDOLLAR\",\n  205: \"FINDB\",\n  206: \"SEARCHB\",\n  207: \"REPLACEB\",\n  208: \"LEFTB\",\n  209: \"RIGHTB\",\n  210: \"MIDB\",\n  211: \"LENB\",\n  212: \"ROUNDUP\",\n  213: \"ROUNDDOWN\",\n  214: \"ASC\",\n  215: \"DBCS\",\n  216: \"RANK\",\n  219: \"ADDRESS\",\n  220: \"DAYS360\",\n  221: \"TODAY\",\n  222: \"VDB\",\n  223: \"ELSE\",\n  224: \"ELSE.IF\",\n  225: \"END.IF\",\n  226: \"FOR.CELL\",\n  227: \"MEDIAN\",\n  228: \"SUMPRODUCT\",\n  229: \"SINH\",\n  230: \"COSH\",\n  231: \"TANH\",\n  232: \"ASINH\",\n  233: \"ACOSH\",\n  234: \"ATANH\",\n  235: \"DGET\",\n  236: \"CREATE.OBJECT\",\n  237: \"VOLATILE\",\n  238: \"LAST.ERROR\",\n  239: \"CUSTOM.UNDO\",\n  240: \"CUSTOM.REPEAT\",\n  241: \"FORMULA.CONVERT\",\n  242: \"GET.LINK.INFO\",\n  243: \"TEXT.BOX\",\n  244: \"INFO\",\n  245: \"GROUP\",\n  246: \"GET.OBJECT\",\n  247: \"DB\",\n  248: \"PAUSE\",\n  251: \"RESUME\",\n  252: \"FREQUENCY\",\n  253: \"ADD.TOOLBAR\",\n  254: \"DELETE.TOOLBAR\",\n  255: \"User\",\n  256: \"RESET.TOOLBAR\",\n  257: \"EVALUATE\",\n  258: \"GET.TOOLBAR\",\n  259: \"GET.TOOL\",\n  260: \"SPELLING.CHECK\",\n  261: \"ERROR.TYPE\",\n  262: \"APP.TITLE\",\n  263: \"WINDOW.TITLE\",\n  264: \"SAVE.TOOLBAR\",\n  265: \"ENABLE.TOOL\",\n  266: \"PRESS.TOOL\",\n  267: \"REGISTER.ID\",\n  268: \"GET.WORKBOOK\",\n  269: \"AVEDEV\",\n  270: \"BETADIST\",\n  271: \"GAMMALN\",\n  272: \"BETAINV\",\n  273: \"BINOMDIST\",\n  274: \"CHIDIST\",\n  275: \"CHIINV\",\n  276: \"COMBIN\",\n  277: \"CONFIDENCE\",\n  278: \"CRITBINOM\",\n  279: \"EVEN\",\n  280: \"EXPONDIST\",\n  281: \"FDIST\",\n  282: \"FINV\",\n  283: \"FISHER\",\n  284: \"FISHERINV\",\n  285: \"FLOOR\",\n  286: \"GAMMADIST\",\n  287: \"GAMMAINV\",\n  288: \"CEILING\",\n  289: \"HYPGEOMDIST\",\n  290: \"LOGNORMDIST\",\n  291: \"LOGINV\",\n  292: \"NEGBINOMDIST\",\n  293: \"NORMDIST\",\n  294: \"NORMSDIST\",\n  295: \"NORMINV\",\n  296: \"NORMSINV\",\n  297: \"STANDARDIZE\",\n  298: \"ODD\",\n  299: \"PERMUT\",\n  300: \"POISSON\",\n  301: \"TDIST\",\n  302: \"WEIBULL\",\n  303: \"SUMXMY2\",\n  304: \"SUMX2MY2\",\n  305: \"SUMX2PY2\",\n  306: \"CHITEST\",\n  307: \"CORREL\",\n  308: \"COVAR\",\n  309: \"FORECAST\",\n  310: \"FTEST\",\n  311: \"INTERCEPT\",\n  312: \"PEARSON\",\n  313: \"RSQ\",\n  314: \"STEYX\",\n  315: \"SLOPE\",\n  316: \"TTEST\",\n  317: \"PROB\",\n  318: \"DEVSQ\",\n  319: \"GEOMEAN\",\n  320: \"HARMEAN\",\n  321: \"SUMSQ\",\n  322: \"KURT\",\n  323: \"SKEW\",\n  324: \"ZTEST\",\n  325: \"LARGE\",\n  326: \"SMALL\",\n  327: \"QUARTILE\",\n  328: \"PERCENTILE\",\n  329: \"PERCENTRANK\",\n  330: \"MODE\",\n  331: \"TRIMMEAN\",\n  332: \"TINV\",\n  334: \"MOVIE.COMMAND\",\n  335: \"GET.MOVIE\",\n  336: \"CONCATENATE\",\n  337: \"POWER\",\n  338: \"PIVOT.ADD.DATA\",\n  339: \"GET.PIVOT.TABLE\",\n  340: \"GET.PIVOT.FIELD\",\n  341: \"GET.PIVOT.ITEM\",\n  342: \"RADIANS\",\n  343: \"DEGREES\",\n  344: \"SUBTOTAL\",\n  345: \"SUMIF\",\n  346: \"COUNTIF\",\n  347: \"COUNTBLANK\",\n  348: \"SCENARIO.GET\",\n  349: \"OPTIONS.LISTS.GET\",\n  350: \"ISPMT\",\n  351: \"DATEDIF\",\n  352: \"DATESTRING\",\n  353: \"NUMBERSTRING\",\n  354: \"ROMAN\",\n  355: \"OPEN.DIALOG\",\n  356: \"SAVE.DIALOG\",\n  357: \"VIEW.GET\",\n  358: \"GETPIVOTDATA\",\n  359: \"HYPERLINK\",\n  360: \"PHONETIC\",\n  361: \"AVERAGEA\",\n  362: \"MAXA\",\n  363: \"MINA\",\n  364: \"STDEVPA\",\n  365: \"VARPA\",\n  366: \"STDEVA\",\n  367: \"VARA\",\n  368: \"BAHTTEXT\",\n  369: \"THAIDAYOFWEEK\",\n  370: \"THAIDIGIT\",\n  371: \"THAIMONTHOFYEAR\",\n  372: \"THAINUMSOUND\",\n  373: \"THAINUMSTRING\",\n  374: \"THAISTRINGLENGTH\",\n  375: \"ISTHAIDIGIT\",\n  376: \"ROUNDBAHTDOWN\",\n  377: \"ROUNDBAHTUP\",\n  378: \"THAIYEAR\",\n  379: \"RTD\",\n  380: \"CUBEVALUE\",\n  381: \"CUBEMEMBER\",\n  382: \"CUBEMEMBERPROPERTY\",\n  383: \"CUBERANKEDMEMBER\",\n  384: \"HEX2BIN\",\n  385: \"HEX2DEC\",\n  386: \"HEX2OCT\",\n  387: \"DEC2BIN\",\n  388: \"DEC2HEX\",\n  389: \"DEC2OCT\",\n  390: \"OCT2BIN\",\n  391: \"OCT2HEX\",\n  392: \"OCT2DEC\",\n  393: \"BIN2DEC\",\n  394: \"BIN2OCT\",\n  395: \"BIN2HEX\",\n  396: \"IMSUB\",\n  397: \"IMDIV\",\n  398: \"IMPOWER\",\n  399: \"IMABS\",\n  400: \"IMSQRT\",\n  401: \"IMLN\",\n  402: \"IMLOG2\",\n  403: \"IMLOG10\",\n  404: \"IMSIN\",\n  405: \"IMCOS\",\n  406: \"IMEXP\",\n  407: \"IMARGUMENT\",\n  408: \"IMCONJUGATE\",\n  409: \"IMAGINARY\",\n  410: \"IMREAL\",\n  411: \"COMPLEX\",\n  412: \"IMSUM\",\n  413: \"IMPRODUCT\",\n  414: \"SERIESSUM\",\n  415: \"FACTDOUBLE\",\n  416: \"SQRTPI\",\n  417: \"QUOTIENT\",\n  418: \"DELTA\",\n  419: \"GESTEP\",\n  420: \"ISEVEN\",\n  421: \"ISODD\",\n  422: \"MROUND\",\n  423: \"ERF\",\n  424: \"ERFC\",\n  425: \"BESSELJ\",\n  426: \"BESSELK\",\n  427: \"BESSELY\",\n  428: \"BESSELI\",\n  429: \"XIRR\",\n  430: \"XNPV\",\n  431: \"PRICEMAT\",\n  432: \"YIELDMAT\",\n  433: \"INTRATE\",\n  434: \"RECEIVED\",\n  435: \"DISC\",\n  436: \"PRICEDISC\",\n  437: \"YIELDDISC\",\n  438: \"TBILLEQ\",\n  439: \"TBILLPRICE\",\n  440: \"TBILLYIELD\",\n  441: \"PRICE\",\n  442: \"YIELD\",\n  443: \"DOLLARDE\",\n  444: \"DOLLARFR\",\n  445: \"NOMINAL\",\n  446: \"EFFECT\",\n  447: \"CUMPRINC\",\n  448: \"CUMIPMT\",\n  449: \"EDATE\",\n  450: \"EOMONTH\",\n  451: \"YEARFRAC\",\n  452: \"COUPDAYBS\",\n  453: \"COUPDAYS\",\n  454: \"COUPDAYSNC\",\n  455: \"COUPNCD\",\n  456: \"COUPNUM\",\n  457: \"COUPPCD\",\n  458: \"DURATION\",\n  459: \"MDURATION\",\n  460: \"ODDLPRICE\",\n  461: \"ODDLYIELD\",\n  462: \"ODDFPRICE\",\n  463: \"ODDFYIELD\",\n  464: \"RANDBETWEEN\",\n  465: \"WEEKNUM\",\n  466: \"AMORDEGRC\",\n  467: \"AMORLINC\",\n  468: \"CONVERT\",\n  724: \"SHEETJS\",\n  469: \"ACCRINT\",\n  470: \"ACCRINTM\",\n  471: \"WORKDAY\",\n  472: \"NETWORKDAYS\",\n  473: \"GCD\",\n  474: \"MULTINOMIAL\",\n  475: \"LCM\",\n  476: \"FVSCHEDULE\",\n  477: \"CUBEKPIMEMBER\",\n  478: \"CUBESET\",\n  479: \"CUBESETCOUNT\",\n  480: \"IFERROR\",\n  481: \"COUNTIFS\",\n  482: \"SUMIFS\",\n  483: \"AVERAGEIF\",\n  484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n  2: 1,\n  3: 1,\n  10: 0,\n  15: 1,\n  16: 1,\n  17: 1,\n  18: 1,\n  19: 0,\n  20: 1,\n  21: 1,\n  22: 1,\n  23: 1,\n  24: 1,\n  25: 1,\n  26: 1,\n  27: 2,\n  30: 2,\n  31: 3,\n  32: 1,\n  33: 1,\n  34: 0,\n  35: 0,\n  38: 1,\n  39: 2,\n  40: 3,\n  41: 3,\n  42: 3,\n  43: 3,\n  44: 3,\n  45: 3,\n  47: 3,\n  48: 2,\n  53: 1,\n  61: 3,\n  63: 0,\n  65: 3,\n  66: 3,\n  67: 1,\n  68: 1,\n  69: 1,\n  70: 1,\n  71: 1,\n  72: 1,\n  73: 1,\n  74: 0,\n  75: 1,\n  76: 1,\n  77: 1,\n  79: 2,\n  80: 2,\n  83: 1,\n  85: 0,\n  86: 1,\n  89: 0,\n  90: 1,\n  94: 0,\n  95: 0,\n  97: 2,\n  98: 1,\n  99: 1,\n  101: 3,\n  102: 3,\n  105: 1,\n  106: 1,\n  108: 2,\n  111: 1,\n  112: 1,\n  113: 1,\n  114: 1,\n  117: 2,\n  118: 1,\n  119: 4,\n  121: 1,\n  126: 1,\n  127: 1,\n  128: 1,\n  129: 1,\n  130: 1,\n  131: 1,\n  133: 1,\n  134: 1,\n  135: 1,\n  136: 2,\n  137: 2,\n  138: 2,\n  140: 1,\n  141: 1,\n  142: 3,\n  143: 4,\n  144: 4,\n  161: 1,\n  162: 1,\n  163: 1,\n  164: 1,\n  165: 2,\n  172: 1,\n  175: 2,\n  176: 2,\n  177: 3,\n  178: 2,\n  179: 1,\n  184: 1,\n  186: 1,\n  189: 3,\n  190: 1,\n  195: 3,\n  196: 3,\n  197: 1,\n  198: 1,\n  199: 3,\n  201: 1,\n  207: 4,\n  210: 3,\n  211: 1,\n  212: 2,\n  213: 2,\n  214: 1,\n  215: 1,\n  225: 0,\n  229: 1,\n  230: 1,\n  231: 1,\n  232: 1,\n  233: 1,\n  234: 1,\n  235: 3,\n  244: 1,\n  247: 4,\n  252: 2,\n  257: 1,\n  261: 1,\n  271: 1,\n  273: 4,\n  274: 2,\n  275: 2,\n  276: 2,\n  277: 3,\n  278: 3,\n  279: 1,\n  280: 3,\n  281: 3,\n  282: 3,\n  283: 1,\n  284: 1,\n  285: 2,\n  286: 4,\n  287: 3,\n  288: 2,\n  289: 4,\n  290: 3,\n  291: 3,\n  292: 3,\n  293: 4,\n  294: 1,\n  295: 3,\n  296: 1,\n  297: 3,\n  298: 1,\n  299: 2,\n  300: 3,\n  301: 3,\n  302: 4,\n  303: 2,\n  304: 2,\n  305: 2,\n  306: 2,\n  307: 2,\n  308: 2,\n  309: 3,\n  310: 2,\n  311: 2,\n  312: 2,\n  313: 2,\n  314: 2,\n  315: 2,\n  316: 4,\n  325: 2,\n  326: 2,\n  327: 2,\n  328: 2,\n  331: 2,\n  332: 2,\n  337: 2,\n  342: 1,\n  343: 1,\n  346: 2,\n  347: 1,\n  350: 4,\n  351: 3,\n  352: 1,\n  353: 2,\n  360: 1,\n  368: 1,\n  369: 1,\n  370: 1,\n  371: 1,\n  372: 1,\n  373: 1,\n  374: 1,\n  375: 1,\n  376: 1,\n  377: 1,\n  378: 1,\n  382: 3,\n  385: 1,\n  392: 1,\n  393: 1,\n  396: 2,\n  397: 2,\n  398: 2,\n  399: 1,\n  400: 1,\n  401: 1,\n  402: 1,\n  403: 1,\n  404: 1,\n  405: 1,\n  406: 1,\n  407: 1,\n  408: 1,\n  409: 1,\n  410: 1,\n  414: 4,\n  415: 1,\n  416: 1,\n  417: 2,\n  420: 1,\n  421: 1,\n  422: 2,\n  424: 1,\n  425: 2,\n  426: 2,\n  427: 2,\n  428: 2,\n  430: 3,\n  438: 3,\n  439: 3,\n  440: 3,\n  443: 2,\n  444: 2,\n  445: 2,\n  446: 2,\n  447: 6,\n  448: 6,\n  449: 2,\n  450: 2,\n  464: 2,\n  468: 3,\n  476: 2,\n  479: 1,\n  480: 2,\n  65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left   == null) margins.left   = defs[0];\n\tif(margins.right  == null) margins.right  = defs[1];\n\tif(margins.top    == null) margins.top    = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array<any>*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF_load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2= /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = data1.match(sheetprregex2))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array<ColInfo>*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2  autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array<Range>*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array<Range>*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '<mergeCells count=\"' + merges.length + '\">';\n\tfor(var i = 0; i != merges.length; ++i) o += '<mergeCell ref=\"' + encode_range(merges[i]) + '\"/>';\n\treturn o + '</mergeCells>';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array<string>*/, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"<cols>\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"</cols>\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array<any> */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref  });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z' && !cell.f) return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles) {\n\tvar ri = 0, x = \"\", cells/*:Array<string>*/ = [], cref/*:?Array<string>*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows/*:Array<RowInfo>*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"<c \" + (x.slice(0,1)==\"<\"?\">\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=d.match(match_v))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && /*::cref != null && */cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/<f[^>]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [], r/*:Array<string>*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array<string>*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '<sheetData/>';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = ('</sheetData>'); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"<hyperlinks>\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"</hyperlinks>\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] =  write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left  = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left)  f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(8 + 4 * cell.v.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\",             false], // fObjects\n\t\t[\"scenarios\",           false], // fScenarios\n\t\t[\"formatCells\",          true], // fFormatCells\n\t\t[\"formatColumns\",        true], // fFormatColumns\n\t\t[\"formatRows\",           true], // fFormatRows\n\t\t[\"insertColumns\",        true], // fInsertColumns\n\t\t[\"insertRows\",           true], // fInsertRows\n\t\t[\"insertHyperlinks\",     true], // fInsertHyperlinks\n\t\t[\"deleteColumns\",        true], // fDeleteColumns\n\t\t[\"deleteRows\",           true], // fDeleteRows\n\t\t[\"selectLockedCells\",   false], // fSelLockedCells\n\t\t[\"sort\",                 true], // fSort\n\t\t[\"autoFilter\",           true], // fAutoFilter\n\t\t[\"pivotTables\",          true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false]  // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse      o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array<Range>*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array<ColInfo>*/ = [], rowinfo/*:Array<RowInfo>*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/)/*:boolean*/ {\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array<string>*/ = [];\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array<any> */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref  });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array<number|string>, string, ?string]*/ {\n\tvar col/*:Array<number|string>*/ = [];\n\tvar num = data.match(/^<c:numCache>/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/<c:pt idx=\"(\\d*)\">(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/<c:pt idx=\"(\\d*?)\"><c:v>(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/<c:formatCode>([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/<c:f>(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/<c:numCache>[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery',           false, \"bool\"],\n\t['autoCompressPictures',        true,  \"bool\"],\n\t['backupFile',                  false, \"bool\"],\n\t['checkCompatibility',          false, \"bool\"],\n\t['CodeName',                    ''],\n\t['date1904',                    false, \"bool\"],\n\t['defaultThemeVersion',         0,      \"int\"],\n\t['filterPrivacy',               false, \"bool\"],\n\t['hidePivotFieldList',          false, \"bool\"],\n\t['promptedSolutions',           false, \"bool\"],\n\t['publishItems',                false, \"bool\"],\n\t['refreshAllConnections',       false, \"bool\"],\n\t['saveExternalLinkValues',      true,  \"bool\"],\n\t['showBorderUnselectedTables',  true,  \"bool\"],\n\t['showInkAnnotation',           true,  \"bool\"],\n\t['showObjects',                 'all'],\n\t['showPivotChartFilter',        false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab',                   0,      \"int\"],\n\t['autoFilterDateGrouping',      true,  \"bool\"],\n\t['firstSheet',                  0,      \"int\"],\n\t['minimized',                   false, \"bool\"],\n\t['showHorizontalScroll',        true,  \"bool\"],\n\t['showSheetTabs',               true,  \"bool\"],\n\t['showVerticalScroll',          true,  \"bool\"],\n\t['tabRatio',                    600,    \"int\"],\n\t['visibility',                  'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2  (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\n\t\t\t/* 18.2.27 workbook CT_Workbook 1 */\n\t\t\tcase '<workbook':\n\t\t\t\tif(x.match(wbnsregex)) xmlns = \"xmlns\" + x.match(/<(\\w+):/)[1];\n\t\t\t\twb.xmlns = y[xmlns];\n\t\t\t\tbreak;\n\t\t\tcase '</workbook>': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '<fileVersion': delete y[0]; wb.AppVersion = y; break;\n\t\t\tcase '<fileVersion/>': case '</fileVersion>': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '<fileSharing':\n\t\t\t\tbreak;\n\t\t\tcase '<fileSharing/>': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '<workbookPr':\n\t\t\tcase '<workbookPr/>':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '</workbookPr>': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '<workbookProtection':\n\t\t\t\tbreak;\n\t\t\tcase '<workbookProtection/>': break;\n\n\t\t\t/* 18.2.1  bookViews CT_BookViews ? */\n\t\t\tcase '<bookViews': case '<bookViews>': case '</bookViews>': break;\n\t\t\t/* 18.2.30   workbookView CT_BookView + */\n\t\t\tcase '<workbookView': case '<workbookView/>': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '</workbookView>': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '<sheets': case '<sheets>': case '</sheets>': break; // aggregate sheet\n\t\t\t/* 18.2.19   sheet CT_Sheet + */\n\t\t\tcase '<sheet':\n\t\t\t\tswitch(y.state) {\n\t\t\t\t\tcase \"hidden\": y.Hidden = 1; break;\n\t\t\t\t\tcase \"veryHidden\": y.Hidden = 2; break;\n\t\t\t\t\tdefault: y.Hidden = 0;\n\t\t\t\t}\n\t\t\t\tdelete y.state;\n\t\t\t\ty.name = unescapexml(utf8read(y.name));\n\t\t\t\tdelete y[0]; wb.Sheets.push(y); break;\n\t\t\tcase '</sheet>': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '<functionGroups': case '<functionGroups/>': break;\n\t\t\t/* 18.2.14   functionGroup CT_FunctionGroup + */\n\t\t\tcase '<functionGroup': break;\n\n\t\t\t/* 18.2.9  externalReferences CT_ExternalReferences ? */\n\t\t\tcase '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;\n\t\t\t/* 18.2.8    externalReference CT_ExternalReference + */\n\t\t\tcase '<externalReference': break;\n\n\t\t\t/* 18.2.6  definedNames CT_DefinedNames ? */\n\t\t\tcase '<definedNames/>': break;\n\t\t\tcase '<definedNames>': case '<definedNames': pass=true; break;\n\t\t\tcase '</definedNames>': pass=false; break;\n\t\t\t/* 18.2.5    definedName CT_DefinedName + */\n\t\t\tcase '<definedName': {\n\t\t\t\tdname = {};\n\t\t\t\tdname.Name = utf8read(y.name);\n\t\t\t\tif(y.comment) dname.Comment = y.comment;\n\t\t\t\tif(y.localSheetId) dname.Sheet = +y.localSheetId;\n\t\t\t\tif(parsexmlbool(y.hidden||\"0\")) dname.Hidden = true;\n\t\t\t\tdnstart = idx + x.length;\n\t\t\t}\tbreak;\n\t\t\tcase '</definedName>': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '<definedName/>': break;\n\n\t\t\t/* 18.2.2  calcPr CT_CalcPr ? */\n\t\t\tcase '<calcPr': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '<calcPr/>': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '</calcPr>': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '<oleSize': break;\n\n\t\t\t/* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */\n\t\t\tcase '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;\n\t\t\t/* 18.2.3  customWorkbookView CT_CustomWorkbookView + */\n\t\t\tcase '<customWorkbookView': case '</customWorkbookView>': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;\n\t\t\t/* 18.2.17 pivotCache CT_PivotCache ? */\n\t\t\tcase '<pivotCache': break;\n\n\t\t\t/* 18.2.21 smartTagPr CT_SmartTagPr ? */\n\t\t\tcase '<smartTagPr': case '<smartTagPr/>': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '<smartTagType': break;\n\n\t\t\t/* 18.2.24 webPublishing CT_WebPublishing ? */\n\t\t\tcase '<webPublishing': case '<webPublishing/>': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '<fileRecoveryPr': case '<fileRecoveryPr/>': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '<webPublishObject': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;\n\t\t\t/* 18.2.7  ext CT_Extension + */\n\t\t\tcase '<ext': pass=true; break; //TODO: check with versions of excel\n\t\t\tcase '</ext>': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '<ArchID': break;\n\t\t\tcase '<AlternateContent':\n\t\t\tcase '<AlternateContent>': pass=true; break;\n\t\t\tcase '</AlternateContent>': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase '<revisionPtr': break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in workbook');\n\t\t}\n\t\treturn x;\n\t});\n\tif(XMLNS_main.indexOf(wb.xmlns) === -1) throw new Error(\"Unknown Namespace: \" + wb.xmlns);\n\n\tparse_wb_defaults(wb);\n\n\treturn wb;\n}\n\nfunction write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to[o.length] = writextag('workbook', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t//'xmlns:mx': XMLNS.mx,\n\t\t//'xmlns:s': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t});\n\n\tvar write_names = (wb.Workbook && (wb.Workbook.Names||[]).length > 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"<bookViews>\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '<workbookView firstSheet=\"' + i + '\" activeTab=\"' + i + '\"/>';\n\t\to[o.length] = \"</bookViews>\";\n\t}\n\n\to[o.length] = \"<sheets>\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"</sheets>\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"<definedNames>\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"</definedNames>\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4,  28800);\n\to.write_shift(4,  17600);\n\to.write_shift(4,  500);\n\to.write_shift(4,  idx);\n\to.write_shift(4,  idx);\n\tvar flags = 0x78;\n\to.write_shift(1,  flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_theme(data/*:string*/, name/*:string*/, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array<RawComment>*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\n\nfunction write_wb(wb, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data/*:SST*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data/*:Array<any>*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\n\nfunction write_xlmeta(name/*:string*/) {\n\treturn (name.slice(-4)===\".bin\" ? write_xlmeta_bin : write_xlmeta_xml)();\n}\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"<?xml\") == -1) [\"html\", \"table\", \"head\", \"meta\", \"script\", \"style\", \"div\"].forEach(function(tag) { if(opening.indexOf(\"<\" + tag) >= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array<string>*/ = [], cursheet/*:Worksheet*/ = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag('<Data ss:Type=\"String\">'), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array<Range>*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array<Comment>*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array<RowInfo>*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(/<!--([\\s\\S]*?)-->/mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF_load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is <office:document> */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is <uof:UOF> */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(/*::wb, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array<string>*/ = ['<Style ss:ID=\"Default\" ss:Name=\"Normal\"><NumberFormat/></Style>'];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array<string>*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array<any>*/ = wb.Workbook.Names;\n\tvar out/*:Array<string>*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array<any>*/ = wb.Workbook.Names;\n\tvar out/*:Array<string>*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array<string>*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"<PageSetup>\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"</PageSetup>\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"<Selected/>\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"<DisplayRightToLeft/>\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array<any>*/)/*:string*/ {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('<Data ss:Type=\"' + t + '\">' + _v + '</Data>');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '<Row ss:Index=\"' + (R+1) + '\"';\n\tif(row) {\n\t\tif(row.hpt && !row.hpx) row.hpx = pt2px(row.hpt);\n\t\tif(row.hpx) o += ' ss:AutoFitHeight=\"0\" ss:Height=\"' + row.hpx + '\"';\n\t\tif(row.hidden) o += ' ss:Hidden=\"1\"';\n\t}\n\treturn o + '>';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array<Range>*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array<string>*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"</Row>\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"<Names>\" + t + \"</Names>\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"<Table>\" + t + \"</Table>\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array<string>*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns':      XLMLNS.ss,\n\t\t'xmlns:o':    XLMLNS.o,\n\t\t'xmlns:x':    XLMLNS.x,\n\t\t'xmlns:ss':   XLMLNS.ss,\n\t\t'xmlns:dt':   XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue          0x003c\n\t- 2.4.59 ContinueBigName   0x043c\n\t- 2.4.60 ContinueFrt       0x0812\n\t- 2.4.61 ContinueFrt11     0x0875\n\t- 2.4.62 ContinueFrt12     0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002f /* FilePass */: case 0x0195 /* FileLock */: case 0x00e1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ((options.dense ? [] : {})/*:any*/);\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array<Range>*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array<ColInfo>*/ = [], rowinfo/*:Array<RowInfo>*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array<string>*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* 'BOF' */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval =  1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval =  1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t/*::[*/0x0009/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0209/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0409/*::]*/:4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t/*::[*/0x0200/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0300/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0400/*::]*/:4,\n\t\t\t\t\t\t/*::[*/0x0500/*::]*/:5,\n\t\t\t\t\t\t/*::[*/0x0600/*::]*/:8,\n\t\t\t\t\t\t/*::[*/0x0002/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0007/*::]*/:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\n\t\t\t\t\tif(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF_load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t/*::[*/0x0000/*::]*/: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t/*::[*/0x0006/*::]*/: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t/*::[*/0x0007/*::]*/: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t/*::[*/0x000A/*::]*/: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t/*::[*/0x000B/*::]*/: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t/*::[*/0x000C/*::]*/: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t/*::[*/0x000D/*::]*/: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t/*::[*/0x000E/*::]*/: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t/*::[*/0x000F/*::]*/: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t/*::[*/0x0010/*::]*/: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t/*::[*/0x0011/*::]*/: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t/*::[*/0x0012/*::]*/: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t/*::[*/0x0013/*::]*/: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t/*::[*/0x0014/*::]*/: { /* n:\"BrtPCDIMissing\" */ },\n\t/*::[*/0x0015/*::]*/: { /* n:\"BrtPCDINumber\" */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"BrtPCDIBoolean\" */ },\n\t/*::[*/0x0017/*::]*/: { /* n:\"BrtPCDIError\" */ },\n\t/*::[*/0x0018/*::]*/: { /* n:\"BrtPCDIString\" */ },\n\t/*::[*/0x0019/*::]*/: { /* n:\"BrtPCDIDatetime\" */ },\n\t/*::[*/0x001A/*::]*/: { /* n:\"BrtPCDIIndex\" */ },\n\t/*::[*/0x001B/*::]*/: { /* n:\"BrtPCDIAMissing\" */ },\n\t/*::[*/0x001C/*::]*/: { /* n:\"BrtPCDIANumber\" */ },\n\t/*::[*/0x001D/*::]*/: { /* n:\"BrtPCDIABoolean\" */ },\n\t/*::[*/0x001E/*::]*/: { /* n:\"BrtPCDIAError\" */ },\n\t/*::[*/0x001F/*::]*/: { /* n:\"BrtPCDIAString\" */ },\n\t/*::[*/0x0020/*::]*/: { /* n:\"BrtPCDIADatetime\" */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"BrtPCRRecord\" */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"BrtPCRRecordDt\" */ },\n\t/*::[*/0x0023/*::]*/: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t/*::[*/0x0024/*::]*/: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t/*::[*/0x0025/*::]*/: { /* n:\"BrtACBegin\", */ T:1 },\n\t/*::[*/0x0026/*::]*/: { /* n:\"BrtACEnd\", */ T:-1 },\n\t/*::[*/0x0027/*::]*/: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t/*::[*/0x0028/*::]*/: { /* n:\"BrtIndexRowBlock\" */ },\n\t/*::[*/0x002A/*::]*/: { /* n:\"BrtIndexBlock\" */ },\n\t/*::[*/0x002B/*::]*/: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t/*::[*/0x002C/*::]*/: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t/*::[*/0x002D/*::]*/: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t/*::[*/0x002E/*::]*/: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t/*::[*/0x002F/*::]*/: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t/*::[*/0x0030/*::]*/: { /* n:\"BrtStyle\" */ },\n\t/*::[*/0x0031/*::]*/: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t/*::[*/0x0032/*::]*/: { /* n:\"BrtValueMeta\" */ },\n\t/*::[*/0x0033/*::]*/: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t/*::[*/0x0034/*::]*/: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t/*::[*/0x0035/*::]*/: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t/*::[*/0x0036/*::]*/: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t/*::[*/0x0037/*::]*/: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t/*::[*/0x0038/*::]*/: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t/*::[*/0x0039/*::]*/: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t/*::[*/0x003A/*::]*/: { /* n:\"BrtMdxMbrIstr\" */ },\n\t/*::[*/0x003B/*::]*/: { /* n:\"BrtStr\" */ },\n\t/*::[*/0x003C/*::]*/: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x003E/*::]*/: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t/*::[*/0x003F/*::]*/: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t/*::[*/0x0040/*::]*/: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t/*::[*/0x0041/*::]*/: { /* n:\"BrtSxvcellNum\" */ },\n\t/*::[*/0x0042/*::]*/: { /* n:\"BrtSxvcellStr\" */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BrtSxvcellBool\" */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BrtSxvcellErr\" */ },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BrtSxvcellDate\" */ },\n\t/*::[*/0x0046/*::]*/: { /* n:\"BrtSxvcellNil\" */ },\n\t/*::[*/0x0080/*::]*/: { /* n:\"BrtFileVersion\" */ },\n\t/*::[*/0x0081/*::]*/: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t/*::[*/0x0082/*::]*/: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t/*::[*/0x0084/*::]*/: { /* n:\"BrtEndBook\", */ T:-1 },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t/*::[*/0x0087/*::]*/: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t/*::[*/0x0088/*::]*/: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t/*::[*/0x0089/*::]*/: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t/*::[*/0x008A/*::]*/: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t/*::[*/0x008B/*::]*/: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t/*::[*/0x008C/*::]*/: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t/*::[*/0x008D/*::]*/: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t/*::[*/0x008E/*::]*/: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t/*::[*/0x008F/*::]*/: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t/*::[*/0x0091/*::]*/: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t/*::[*/0x0092/*::]*/: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t/*::[*/0x0093/*::]*/: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t/*::[*/0x0094/*::]*/: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t/*::[*/0x0097/*::]*/: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t/*::[*/0x0098/*::]*/: { /* n:\"BrtSel\" */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t/*::[*/0x009A/*::]*/: { /* n:\"BrtWbFactoid\" */ },\n\t/*::[*/0x009B/*::]*/: { /* n:\"BrtFileRecover\" */ },\n\t/*::[*/0x009C/*::]*/: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t/*::[*/0x009D/*::]*/: { /* n:\"BrtCalcProp\" */ },\n\t/*::[*/0x009E/*::]*/: { /* n:\"BrtBookView\" */ },\n\t/*::[*/0x009F/*::]*/: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t/*::[*/0x00A0/*::]*/: { /* n:\"BrtEndSst\", */ T:-1 },\n\t/*::[*/0x00A1/*::]*/: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t/*::[*/0x00A2/*::]*/: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t/*::[*/0x00A3/*::]*/: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t/*::[*/0x00A4/*::]*/: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t/*::[*/0x00A5/*::]*/: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t/*::[*/0x00A6/*::]*/: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t/*::[*/0x00A7/*::]*/: { /* n:\"BrtFilter\" */ },\n\t/*::[*/0x00A8/*::]*/: { /* n:\"BrtColorFilter\" */ },\n\t/*::[*/0x00A9/*::]*/: { /* n:\"BrtIconFilter\" */ },\n\t/*::[*/0x00AA/*::]*/: { /* n:\"BrtTop10Filter\" */ },\n\t/*::[*/0x00AB/*::]*/: { /* n:\"BrtDynamicFilter\" */ },\n\t/*::[*/0x00AC/*::]*/: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t/*::[*/0x00AD/*::]*/: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t/*::[*/0x00AE/*::]*/: { /* n:\"BrtCustomFilter\" */ },\n\t/*::[*/0x00AF/*::]*/: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t/*::[*/0x00B0/*::]*/: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t/*::[*/0x00B1/*::]*/: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t/*::[*/0x00B2/*::]*/: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t/*::[*/0x00B3/*::]*/: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t/*::[*/0x00B4/*::]*/: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t/*::[*/0x00B5/*::]*/: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t/*::[*/0x00B6/*::]*/: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t/*::[*/0x00B7/*::]*/: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t/*::[*/0x00B8/*::]*/: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t/*::[*/0x00B9/*::]*/: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t/*::[*/0x00BA/*::]*/: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t/*::[*/0x00BB/*::]*/: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t/*::[*/0x00BC/*::]*/: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t/*::[*/0x00BD/*::]*/: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t/*::[*/0x00BE/*::]*/: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t/*::[*/0x00BF/*::]*/: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t/*::[*/0x00C0/*::]*/: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t/*::[*/0x00C1/*::]*/: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t/*::[*/0x00C2/*::]*/: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t/*::[*/0x00C3/*::]*/: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t/*::[*/0x00C4/*::]*/: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t/*::[*/0x00C5/*::]*/: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t/*::[*/0x00C6/*::]*/: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t/*::[*/0x00C7/*::]*/: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t/*::[*/0x00C8/*::]*/: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t/*::[*/0x00C9/*::]*/: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t/*::[*/0x00CA/*::]*/: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t/*::[*/0x00CB/*::]*/: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t/*::[*/0x00CC/*::]*/: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t/*::[*/0x00CD/*::]*/: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t/*::[*/0x00CE/*::]*/: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t/*::[*/0x00CF/*::]*/: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t/*::[*/0x00D0/*::]*/: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t/*::[*/0x00D1/*::]*/: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t/*::[*/0x00D2/*::]*/: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t/*::[*/0x00D3/*::]*/: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t/*::[*/0x00D4/*::]*/: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t/*::[*/0x00D5/*::]*/: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t/*::[*/0x00D6/*::]*/: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t/*::[*/0x00D7/*::]*/: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t/*::[*/0x00D8/*::]*/: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t/*::[*/0x00D9/*::]*/: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t/*::[*/0x00DA/*::]*/: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t/*::[*/0x00DB/*::]*/: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t/*::[*/0x00DC/*::]*/: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t/*::[*/0x00DD/*::]*/: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t/*::[*/0x00DE/*::]*/: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t/*::[*/0x00DF/*::]*/: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t/*::[*/0x00E0/*::]*/: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t/*::[*/0x00E1/*::]*/: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t/*::[*/0x00E2/*::]*/: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t/*::[*/0x00E3/*::]*/: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t/*::[*/0x00E4/*::]*/: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t/*::[*/0x00E5/*::]*/: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t/*::[*/0x00E6/*::]*/: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t/*::[*/0x00E7/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t/*::[*/0x00E8/*::]*/: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t/*::[*/0x00E9/*::]*/: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t/*::[*/0x00EA/*::]*/: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t/*::[*/0x00EB/*::]*/: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t/*::[*/0x00EC/*::]*/: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t/*::[*/0x00ED/*::]*/: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t/*::[*/0x00EE/*::]*/: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t/*::[*/0x00EF/*::]*/: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t/*::[*/0x00F0/*::]*/: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t/*::[*/0x00F1/*::]*/: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t/*::[*/0x00F2/*::]*/: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t/*::[*/0x00F3/*::]*/: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t/*::[*/0x00F4/*::]*/: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t/*::[*/0x00F5/*::]*/: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t/*::[*/0x00F6/*::]*/: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t/*::[*/0x00F7/*::]*/: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t/*::[*/0x00F8/*::]*/: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t/*::[*/0x00F9/*::]*/: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t/*::[*/0x00FA/*::]*/: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t/*::[*/0x00FB/*::]*/: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t/*::[*/0x00FC/*::]*/: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t/*::[*/0x00FD/*::]*/: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t/*::[*/0x00FE/*::]*/: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t/*::[*/0x00FF/*::]*/: { /* n:\"BrtBeginPName\", */ T:1 },\n\t/*::[*/0x0100/*::]*/: { /* n:\"BrtEndPName\", */ T:-1 },\n\t/*::[*/0x0101/*::]*/: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t/*::[*/0x0102/*::]*/: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t/*::[*/0x0103/*::]*/: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t/*::[*/0x0104/*::]*/: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t/*::[*/0x0105/*::]*/: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t/*::[*/0x0106/*::]*/: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t/*::[*/0x0107/*::]*/: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t/*::[*/0x0108/*::]*/: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t/*::[*/0x0109/*::]*/: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t/*::[*/0x010A/*::]*/: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t/*::[*/0x010B/*::]*/: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t/*::[*/0x010C/*::]*/: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t/*::[*/0x010D/*::]*/: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t/*::[*/0x010E/*::]*/: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t/*::[*/0x010F/*::]*/: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t/*::[*/0x0110/*::]*/: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t/*::[*/0x0111/*::]*/: { /* n:\"BrtBeginDims\", */ T:1 },\n\t/*::[*/0x0112/*::]*/: { /* n:\"BrtEndDims\", */ T:-1 },\n\t/*::[*/0x0113/*::]*/: { /* n:\"BrtBeginDim\", */ T:1 },\n\t/*::[*/0x0114/*::]*/: { /* n:\"BrtEndDim\", */ T:-1 },\n\t/*::[*/0x0115/*::]*/: { /* n:\"BrtIndexPartEnd\" */ },\n\t/*::[*/0x0116/*::]*/: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t/*::[*/0x0117/*::]*/: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t/*::[*/0x0118/*::]*/: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t/*::[*/0x0119/*::]*/: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t/*::[*/0x011A/*::]*/: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t/*::[*/0x011B/*::]*/: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t/*::[*/0x011C/*::]*/: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t/*::[*/0x011D/*::]*/: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t/*::[*/0x011E/*::]*/: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t/*::[*/0x011F/*::]*/: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t/*::[*/0x0120/*::]*/: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t/*::[*/0x0121/*::]*/: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t/*::[*/0x0122/*::]*/: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t/*::[*/0x0123/*::]*/: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t/*::[*/0x0124/*::]*/: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t/*::[*/0x0125/*::]*/: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t/*::[*/0x0126/*::]*/: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t/*::[*/0x0127/*::]*/: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t/*::[*/0x0128/*::]*/: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t/*::[*/0x0129/*::]*/: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t/*::[*/0x012A/*::]*/: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t/*::[*/0x012B/*::]*/: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t/*::[*/0x012C/*::]*/: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t/*::[*/0x012D/*::]*/: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t/*::[*/0x012E/*::]*/: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t/*::[*/0x012F/*::]*/: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t/*::[*/0x0130/*::]*/: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t/*::[*/0x0131/*::]*/: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t/*::[*/0x0132/*::]*/: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t/*::[*/0x0133/*::]*/: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t/*::[*/0x0134/*::]*/: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t/*::[*/0x0135/*::]*/: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t/*::[*/0x0136/*::]*/: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t/*::[*/0x0137/*::]*/: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t/*::[*/0x0138/*::]*/: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t/*::[*/0x0139/*::]*/: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t/*::[*/0x013A/*::]*/: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t/*::[*/0x013B/*::]*/: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t/*::[*/0x013C/*::]*/: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t/*::[*/0x013D/*::]*/: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t/*::[*/0x013E/*::]*/: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t/*::[*/0x013F/*::]*/: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t/*::[*/0x0140/*::]*/: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t/*::[*/0x0141/*::]*/: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t/*::[*/0x0142/*::]*/: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t/*::[*/0x0143/*::]*/: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t/*::[*/0x0144/*::]*/: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t/*::[*/0x0145/*::]*/: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t/*::[*/0x0146/*::]*/: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t/*::[*/0x0147/*::]*/: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t/*::[*/0x0148/*::]*/: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t/*::[*/0x0149/*::]*/: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t/*::[*/0x014A/*::]*/: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t/*::[*/0x014B/*::]*/: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t/*::[*/0x014C/*::]*/: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t/*::[*/0x014D/*::]*/: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t/*::[*/0x014E/*::]*/: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t/*::[*/0x014F/*::]*/: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t/*::[*/0x0150/*::]*/: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t/*::[*/0x0151/*::]*/: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t/*::[*/0x0152/*::]*/: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t/*::[*/0x0153/*::]*/: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t/*::[*/0x0154/*::]*/: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t/*::[*/0x0155/*::]*/: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t/*::[*/0x0156/*::]*/: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t/*::[*/0x0157/*::]*/: { /* n:\"BrtBeginList\", */ T:1 },\n\t/*::[*/0x0158/*::]*/: { /* n:\"BrtEndList\", */ T:-1 },\n\t/*::[*/0x0159/*::]*/: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t/*::[*/0x015A/*::]*/: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t/*::[*/0x015B/*::]*/: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t/*::[*/0x015C/*::]*/: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t/*::[*/0x015D/*::]*/: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t/*::[*/0x015E/*::]*/: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t/*::[*/0x015F/*::]*/: { /* n:\"BrtListCCFmla\" */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"BrtListTrFmla\" */ },\n\t/*::[*/0x0161/*::]*/: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t/*::[*/0x0162/*::]*/: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t/*::[*/0x0163/*::]*/: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t/*::[*/0x0165/*::]*/: { /* n:\"BrtSupSelf\" */ },\n\t/*::[*/0x0166/*::]*/: { /* n:\"BrtSupSame\" */ },\n\t/*::[*/0x0167/*::]*/: { /* n:\"BrtSupTabs\" */ },\n\t/*::[*/0x0168/*::]*/: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t/*::[*/0x0169/*::]*/: { /* n:\"BrtPlaceholderName\" */ },\n\t/*::[*/0x016A/*::]*/: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x016B/*::]*/: { /* n:\"BrtExternTableStart\" */ },\n\t/*::[*/0x016C/*::]*/: { /* n:\"BrtExternTableEnd\" */ },\n\t/*::[*/0x016E/*::]*/: { /* n:\"BrtExternRowHdr\" */ },\n\t/*::[*/0x016F/*::]*/: { /* n:\"BrtExternCellBlank\" */ },\n\t/*::[*/0x0170/*::]*/: { /* n:\"BrtExternCellReal\" */ },\n\t/*::[*/0x0171/*::]*/: { /* n:\"BrtExternCellBool\" */ },\n\t/*::[*/0x0172/*::]*/: { /* n:\"BrtExternCellError\" */ },\n\t/*::[*/0x0173/*::]*/: { /* n:\"BrtExternCellString\" */ },\n\t/*::[*/0x0174/*::]*/: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t/*::[*/0x0175/*::]*/: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t/*::[*/0x0176/*::]*/: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t/*::[*/0x0177/*::]*/: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t/*::[*/0x0178/*::]*/: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t/*::[*/0x0179/*::]*/: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t/*::[*/0x017A/*::]*/: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t/*::[*/0x017B/*::]*/: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t/*::[*/0x017C/*::]*/: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t/*::[*/0x017D/*::]*/: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t/*::[*/0x017E/*::]*/: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t/*::[*/0x017F/*::]*/: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t/*::[*/0x0180/*::]*/: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0181/*::]*/: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0182/*::]*/: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t/*::[*/0x0183/*::]*/: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t/*::[*/0x0184/*::]*/: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t/*::[*/0x0185/*::]*/: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t/*::[*/0x0186/*::]*/: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t/*::[*/0x0187/*::]*/: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t/*::[*/0x0188/*::]*/: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t/*::[*/0x0189/*::]*/: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t/*::[*/0x018A/*::]*/: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t/*::[*/0x018B/*::]*/: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t/*::[*/0x018C/*::]*/: { /* n:\"BrtBrk\" */ },\n\t/*::[*/0x018D/*::]*/: { /* n:\"BrtUserBookView\" */ },\n\t/*::[*/0x018E/*::]*/: { /* n:\"BrtInfo\" */ },\n\t/*::[*/0x018F/*::]*/: { /* n:\"BrtCUsr\" */ },\n\t/*::[*/0x0190/*::]*/: { /* n:\"BrtUsr\" */ },\n\t/*::[*/0x0191/*::]*/: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t/*::[*/0x0193/*::]*/: { /* n:\"BrtEOF\" */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"BrtUCR\" */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"BrtRRInsDel\" */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"BrtRREndInsDel\" */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BrtRRMove\" */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"BrtRREndMove\" */ },\n\t/*::[*/0x0199/*::]*/: { /* n:\"BrtRRChgCell\" */ },\n\t/*::[*/0x019A/*::]*/: { /* n:\"BrtRREndChgCell\" */ },\n\t/*::[*/0x019B/*::]*/: { /* n:\"BrtRRHeader\" */ },\n\t/*::[*/0x019C/*::]*/: { /* n:\"BrtRRUserView\" */ },\n\t/*::[*/0x019D/*::]*/: { /* n:\"BrtRRRenSheet\" */ },\n\t/*::[*/0x019E/*::]*/: { /* n:\"BrtRRInsertSh\" */ },\n\t/*::[*/0x019F/*::]*/: { /* n:\"BrtRRDefName\" */ },\n\t/*::[*/0x01A0/*::]*/: { /* n:\"BrtRRNote\" */ },\n\t/*::[*/0x01A1/*::]*/: { /* n:\"BrtRRConflict\" */ },\n\t/*::[*/0x01A2/*::]*/: { /* n:\"BrtRRTQSIF\" */ },\n\t/*::[*/0x01A3/*::]*/: { /* n:\"BrtRRFormat\" */ },\n\t/*::[*/0x01A4/*::]*/: { /* n:\"BrtRREndFormat\" */ },\n\t/*::[*/0x01A5/*::]*/: { /* n:\"BrtRRAutoFmt\" */ },\n\t/*::[*/0x01A6/*::]*/: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t/*::[*/0x01A7/*::]*/: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t/*::[*/0x01A8/*::]*/: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t/*::[*/0x01A9/*::]*/: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t/*::[*/0x01AA/*::]*/: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t/*::[*/0x01AB/*::]*/: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t/*::[*/0x01AC/*::]*/: { /* n:\"BrtTable\" */ },\n\t/*::[*/0x01AD/*::]*/: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t/*::[*/0x01AE/*::]*/: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t/*::[*/0x01AF/*::]*/: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t/*::[*/0x01B0/*::]*/: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t/*::[*/0x01B1/*::]*/: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t/*::[*/0x01B2/*::]*/: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t/*::[*/0x01B3/*::]*/: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t/*::[*/0x01B4/*::]*/: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t/*::[*/0x01B5/*::]*/: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t/*::[*/0x01B6/*::]*/: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t/*::[*/0x01B7/*::]*/: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t/*::[*/0x01B8/*::]*/: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t/*::[*/0x01B9/*::]*/: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t/*::[*/0x01BA/*::]*/: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t/*::[*/0x01BB/*::]*/: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t/*::[*/0x01BC/*::]*/: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t/*::[*/0x01BD/*::]*/: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t/*::[*/0x01BE/*::]*/: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t/*::[*/0x01BF/*::]*/: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t/*::[*/0x01C0/*::]*/: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t/*::[*/0x01C1/*::]*/: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t/*::[*/0x01C2/*::]*/: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t/*::[*/0x01C3/*::]*/: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t/*::[*/0x01C4/*::]*/: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t/*::[*/0x01C5/*::]*/: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t/*::[*/0x01C6/*::]*/: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t/*::[*/0x01C7/*::]*/: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t/*::[*/0x01C8/*::]*/: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t/*::[*/0x01C9/*::]*/: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t/*::[*/0x01CA/*::]*/: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t/*::[*/0x01CB/*::]*/: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t/*::[*/0x01CC/*::]*/: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t/*::[*/0x01CD/*::]*/: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t/*::[*/0x01CE/*::]*/: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t/*::[*/0x01CF/*::]*/: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t/*::[*/0x01D0/*::]*/: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t/*::[*/0x01D1/*::]*/: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t/*::[*/0x01D2/*::]*/: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t/*::[*/0x01D3/*::]*/: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t/*::[*/0x01D4/*::]*/: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t/*::[*/0x01D5/*::]*/: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t/*::[*/0x01D6/*::]*/: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t/*::[*/0x01D7/*::]*/: { /* n:\"BrtCFVO\" */ },\n\t/*::[*/0x01D8/*::]*/: { /* n:\"BrtExternValueMeta\" */ },\n\t/*::[*/0x01D9/*::]*/: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t/*::[*/0x01DA/*::]*/: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t/*::[*/0x01DB/*::]*/: { /* n:\"BrtIndexedColor\" */ },\n\t/*::[*/0x01DC/*::]*/: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t/*::[*/0x01DD/*::]*/: { /* n:\"BrtPrintOptions\" */ },\n\t/*::[*/0x01DE/*::]*/: { /* n:\"BrtPageSetup\" */ },\n\t/*::[*/0x01DF/*::]*/: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t/*::[*/0x01E0/*::]*/: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t/*::[*/0x01E1/*::]*/: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t/*::[*/0x01E2/*::]*/: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t/*::[*/0x01E3/*::]*/: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t/*::[*/0x01E4/*::]*/: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t/*::[*/0x01E5/*::]*/: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t/*::[*/0x01E6/*::]*/: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t/*::[*/0x01E7/*::]*/: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t/*::[*/0x01E8/*::]*/: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t/*::[*/0x01E9/*::]*/: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t/*::[*/0x01EA/*::]*/: { /* n:\"BrtBeginMG\", */ T:1 },\n\t/*::[*/0x01EB/*::]*/: { /* n:\"BrtEndMG\", */ T:-1 },\n\t/*::[*/0x01EC/*::]*/: { /* n:\"BrtBeginMap\", */ T:1 },\n\t/*::[*/0x01ED/*::]*/: { /* n:\"BrtEndMap\", */ T:-1 },\n\t/*::[*/0x01EE/*::]*/: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t/*::[*/0x01EF/*::]*/: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t/*::[*/0x01F0/*::]*/: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t/*::[*/0x01F1/*::]*/: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t/*::[*/0x01F2/*::]*/: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t/*::[*/0x01F3/*::]*/: { /* n:\"BrtDRef\" */ },\n\t/*::[*/0x01F4/*::]*/: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t/*::[*/0x01F5/*::]*/: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t/*::[*/0x01F6/*::]*/: { /* n:\"BrtBeginSct\", */ T:1 },\n\t/*::[*/0x01F7/*::]*/: { /* n:\"BrtEndSct\", */ T:-1 },\n\t/*::[*/0x01F8/*::]*/: { /* n:\"BrtSlc\" */ },\n\t/*::[*/0x01F9/*::]*/: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t/*::[*/0x01FA/*::]*/: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t/*::[*/0x01FB/*::]*/: { /* n:\"BrtDXF\" */ },\n\t/*::[*/0x01FC/*::]*/: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t/*::[*/0x01FD/*::]*/: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t/*::[*/0x01FE/*::]*/: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t/*::[*/0x01FF/*::]*/: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"BrtTableStyleElement\" */ },\n\t/*::[*/0x0201/*::]*/: { /* n:\"BrtTableStyleClient\" */ },\n\t/*::[*/0x0202/*::]*/: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t/*::[*/0x0203/*::]*/: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t/*::[*/0x0204/*::]*/: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t/*::[*/0x0206/*::]*/: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t/*::[*/0x0207/*::]*/: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t/*::[*/0x0208/*::]*/: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t/*::[*/0x020A/*::]*/: { /* n:\"BrtVolSubtopic\" */ },\n\t/*::[*/0x020B/*::]*/: { /* n:\"BrtVolRef\" */ },\n\t/*::[*/0x020C/*::]*/: { /* n:\"BrtVolNum\" */ },\n\t/*::[*/0x020D/*::]*/: { /* n:\"BrtVolErr\" */ },\n\t/*::[*/0x020E/*::]*/: { /* n:\"BrtVolStr\" */ },\n\t/*::[*/0x020F/*::]*/: { /* n:\"BrtVolBool\" */ },\n\t/*::[*/0x0210/*::]*/: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t/*::[*/0x0211/*::]*/: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t/*::[*/0x0212/*::]*/: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t/*::[*/0x0213/*::]*/: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t/*::[*/0x0214/*::]*/: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t/*::[*/0x0215/*::]*/: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t/*::[*/0x0216/*::]*/: { /* n:\"BrtBookProtection\" */ },\n\t/*::[*/0x0217/*::]*/: { /* n:\"BrtSheetProtection\" */ },\n\t/*::[*/0x0218/*::]*/: { /* n:\"BrtRangeProtection\" */ },\n\t/*::[*/0x0219/*::]*/: { /* n:\"BrtPhoneticInfo\" */ },\n\t/*::[*/0x021A/*::]*/: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t/*::[*/0x021B/*::]*/: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t/*::[*/0x021C/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t/*::[*/0x021D/*::]*/: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t/*::[*/0x021E/*::]*/: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t/*::[*/0x0224/*::]*/: { /* n:\"BrtFileSharing\" */ },\n\t/*::[*/0x0225/*::]*/: { /* n:\"BrtOleSize\" */ },\n\t/*::[*/0x0226/*::]*/: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t/*::[*/0x0227/*::]*/: { /* n:\"BrtLegacyDrawing\" */ },\n\t/*::[*/0x0228/*::]*/: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t/*::[*/0x0229/*::]*/: { /* n:\"BrtWebOpt\" */ },\n\t/*::[*/0x022A/*::]*/: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t/*::[*/0x022B/*::]*/: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t/*::[*/0x022C/*::]*/: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t/*::[*/0x022D/*::]*/: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t/*::[*/0x022E/*::]*/: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t/*::[*/0x022F/*::]*/: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t/*::[*/0x0230/*::]*/: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t/*::[*/0x0231/*::]*/: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t/*::[*/0x0232/*::]*/: { /* n:\"BrtBkHim\" */ },\n\t/*::[*/0x0234/*::]*/: { /* n:\"BrtColor\" */ },\n\t/*::[*/0x0235/*::]*/: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t/*::[*/0x0236/*::]*/: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t/*::[*/0x0239/*::]*/: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t/*::[*/0x023A/*::]*/: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t/*::[*/0x023C/*::]*/: { /* n:\"BrtMRUColor\" */ },\n\t/*::[*/0x023D/*::]*/: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t/*::[*/0x023E/*::]*/: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t/*::[*/0x0241/*::]*/: { /* n:\"BrtSupNameStart\" */ },\n\t/*::[*/0x0242/*::]*/: { /* n:\"BrtSupNameValueStart\" */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BrtSupNameValueEnd\" */ },\n\t/*::[*/0x0244/*::]*/: { /* n:\"BrtSupNameNum\" */ },\n\t/*::[*/0x0245/*::]*/: { /* n:\"BrtSupNameErr\" */ },\n\t/*::[*/0x0246/*::]*/: { /* n:\"BrtSupNameSt\" */ },\n\t/*::[*/0x0247/*::]*/: { /* n:\"BrtSupNameNil\" */ },\n\t/*::[*/0x0248/*::]*/: { /* n:\"BrtSupNameBool\" */ },\n\t/*::[*/0x0249/*::]*/: { /* n:\"BrtSupNameFmla\" */ },\n\t/*::[*/0x024A/*::]*/: { /* n:\"BrtSupNameBits\" */ },\n\t/*::[*/0x024B/*::]*/: { /* n:\"BrtSupNameEnd\" */ },\n\t/*::[*/0x024C/*::]*/: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t/*::[*/0x024D/*::]*/: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t/*::[*/0x024E/*::]*/: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t/*::[*/0x024F/*::]*/: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t/*::[*/0x0250/*::]*/: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t/*::[*/0x0251/*::]*/: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t/*::[*/0x0252/*::]*/: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t/*::[*/0x0253/*::]*/: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t/*::[*/0x0254/*::]*/: { /* n:\"BrtSmartTagType\" */ },\n\t/*::[*/0x0255/*::]*/: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t/*::[*/0x0256/*::]*/: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t/*::[*/0x0257/*::]*/: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t/*::[*/0x0258/*::]*/: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t/*::[*/0x0259/*::]*/: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t/*::[*/0x025A/*::]*/: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t/*::[*/0x025B/*::]*/: { /* n:\"BrtBeginFills\", */ T:1 },\n\t/*::[*/0x025C/*::]*/: { /* n:\"BrtEndFills\", */ T:-1 },\n\t/*::[*/0x025D/*::]*/: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t/*::[*/0x025E/*::]*/: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t/*::[*/0x025F/*::]*/: { /* n:\"BrtCellWatch\" */ },\n\t/*::[*/0x0260/*::]*/: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t/*::[*/0x0261/*::]*/: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t/*::[*/0x0262/*::]*/: { /* n:\"BrtCrashRecErr\" */ },\n\t/*::[*/0x0263/*::]*/: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t/*::[*/0x0264/*::]*/: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t/*::[*/0x0265/*::]*/: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t/*::[*/0x0266/*::]*/: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t/*::[*/0x0267/*::]*/: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t/*::[*/0x0268/*::]*/: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t/*::[*/0x0269/*::]*/: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t/*::[*/0x026A/*::]*/: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t/*::[*/0x026B/*::]*/: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t/*::[*/0x026C/*::]*/: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t/*::[*/0x0271/*::]*/: { /* n:\"BrtBigName\" */ },\n\t/*::[*/0x0272/*::]*/: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t/*::[*/0x0273/*::]*/: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t/*::[*/0x0274/*::]*/: { /* n:\"BrtBeginComments\", */ T:1 },\n\t/*::[*/0x0275/*::]*/: { /* n:\"BrtEndComments\", */ T:-1 },\n\t/*::[*/0x0276/*::]*/: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t/*::[*/0x0277/*::]*/: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t/*::[*/0x0278/*::]*/: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t/*::[*/0x0279/*::]*/: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t/*::[*/0x027A/*::]*/: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t/*::[*/0x027B/*::]*/: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t/*::[*/0x027C/*::]*/: { /* n:\"BrtEndComment\", */ T:-1 },\n\t/*::[*/0x027D/*::]*/: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t/*::[*/0x027E/*::]*/: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t/*::[*/0x027F/*::]*/: { /* n:\"BrtOleObject\" */ },\n\t/*::[*/0x0280/*::]*/: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t/*::[*/0x0281/*::]*/: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t/*::[*/0x0282/*::]*/: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t/*::[*/0x0283/*::]*/: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t/*::[*/0x0284/*::]*/: { /* n:\"BrtActiveX\" */ },\n\t/*::[*/0x0285/*::]*/: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t/*::[*/0x0286/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t/*::[*/0x0288/*::]*/: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t/*::[*/0x0289/*::]*/: { /* n:\"BrtCellIgnoreEC\" */ },\n\t/*::[*/0x028A/*::]*/: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t/*::[*/0x028B/*::]*/: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t/*::[*/0x028C/*::]*/: { /* n:\"BrtCsPageSetup\" */ },\n\t/*::[*/0x028D/*::]*/: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t/*::[*/0x028E/*::]*/: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t/*::[*/0x028F/*::]*/: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t/*::[*/0x0290/*::]*/: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t/*::[*/0x0291/*::]*/: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t/*::[*/0x0292/*::]*/: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t/*::[*/0x0293/*::]*/: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t/*::[*/0x0294/*::]*/: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t/*::[*/0x0295/*::]*/: { /* n:\"BrtListPart\" */ },\n\t/*::[*/0x0296/*::]*/: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t/*::[*/0x0297/*::]*/: { /* n:\"BrtSheetCalcProp\" */ },\n\t/*::[*/0x0298/*::]*/: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t/*::[*/0x0299/*::]*/: { /* n:\"BrtFnGroup\" */ },\n\t/*::[*/0x029A/*::]*/: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t/*::[*/0x029B/*::]*/: { /* n:\"BrtSupAddin\" */ },\n\t/*::[*/0x029C/*::]*/: { /* n:\"BrtSXTDMPOrder\" */ },\n\t/*::[*/0x029D/*::]*/: { /* n:\"BrtCsProtection\" */ },\n\t/*::[*/0x029F/*::]*/: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t/*::[*/0x02A0/*::]*/: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t/*::[*/0x02A1/*::]*/: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t/*::[*/0x02A2/*::]*/: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t/*::[*/0x02A3/*::]*/: { /* n:\"BrtRRSortItem\" */ },\n\t/*::[*/0x02A4/*::]*/: { /* n:\"BrtFileSharingIso\" */ },\n\t/*::[*/0x02A5/*::]*/: { /* n:\"BrtBookProtectionIso\" */ },\n\t/*::[*/0x02A6/*::]*/: { /* n:\"BrtSheetProtectionIso\" */ },\n\t/*::[*/0x02A7/*::]*/: { /* n:\"BrtCsProtectionIso\" */ },\n\t/*::[*/0x02A8/*::]*/: { /* n:\"BrtRangeProtectionIso\" */ },\n\t/*::[*/0x02A9/*::]*/: { /* n:\"BrtDValList\" */ },\n\t/*::[*/0x0400/*::]*/: { /* n:\"BrtRwDescent\" */ },\n\t/*::[*/0x0401/*::]*/: { /* n:\"BrtKnownFonts\" */ },\n\t/*::[*/0x0402/*::]*/: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t/*::[*/0x0403/*::]*/: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t/*::[*/0x0404/*::]*/: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t/*::[*/0x0405/*::]*/: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t/*::[*/0x0406/*::]*/: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t/*::[*/0x0407/*::]*/: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t/*::[*/0x0408/*::]*/: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t/*::[*/0x040A/*::]*/: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t/*::[*/0x040B/*::]*/: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t/*::[*/0x040C/*::]*/: { /* n:\"BrtNameExt\" */ },\n\t/*::[*/0x040D/*::]*/: { /* n:\"BrtPCDH14\" */ },\n\t/*::[*/0x040E/*::]*/: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t/*::[*/0x040F/*::]*/: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t/*::[*/0x0410/*::]*/: { /* n:\"BrtSXTH14\" */ },\n\t/*::[*/0x0411/*::]*/: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t/*::[*/0x0412/*::]*/: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t/*::[*/0x0413/*::]*/: { /* n:\"BrtSparkline\" */ },\n\t/*::[*/0x0414/*::]*/: { /* n:\"BrtSXDI14\" */ },\n\t/*::[*/0x0415/*::]*/: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t/*::[*/0x0416/*::]*/: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t/*::[*/0x0417/*::]*/: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t/*::[*/0x0419/*::]*/: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t/*::[*/0x041A/*::]*/: { /* n:\"BrtCFVO14\" */ },\n\t/*::[*/0x041B/*::]*/: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t/*::[*/0x041C/*::]*/: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t/*::[*/0x041D/*::]*/: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t/*::[*/0x041E/*::]*/: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t/*::[*/0x041F/*::]*/: { /* n:\"BrtColor14\" */ },\n\t/*::[*/0x0420/*::]*/: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t/*::[*/0x0421/*::]*/: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t/*::[*/0x0422/*::]*/: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t/*::[*/0x0423/*::]*/: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t/*::[*/0x0425/*::]*/: { /* n:\"BrtSXVD14\" */ },\n\t/*::[*/0x0426/*::]*/: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t/*::[*/0x0427/*::]*/: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t/*::[*/0x0428/*::]*/: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t/*::[*/0x0429/*::]*/: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t/*::[*/0x042A/*::]*/: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t/*::[*/0x042B/*::]*/: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t/*::[*/0x042C/*::]*/: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t/*::[*/0x042D/*::]*/: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t/*::[*/0x042E/*::]*/: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t/*::[*/0x042F/*::]*/: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t/*::[*/0x0430/*::]*/: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t/*::[*/0x0431/*::]*/: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t/*::[*/0x0433/*::]*/: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t/*::[*/0x0434/*::]*/: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t/*::[*/0x0435/*::]*/: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t/*::[*/0x0436/*::]*/: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t/*::[*/0x0437/*::]*/: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t/*::[*/0x0438/*::]*/: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t/*::[*/0x0439/*::]*/: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t/*::[*/0x043A/*::]*/: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t/*::[*/0x043B/*::]*/: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t/*::[*/0x043C/*::]*/: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t/*::[*/0x043D/*::]*/: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t/*::[*/0x043E/*::]*/: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t/*::[*/0x043F/*::]*/: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t/*::[*/0x0440/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t/*::[*/0x0441/*::]*/: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t/*::[*/0x0442/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t/*::[*/0x0444/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t/*::[*/0x0445/*::]*/: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t/*::[*/0x0446/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t/*::[*/0x0447/*::]*/: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t/*::[*/0x0448/*::]*/: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t/*::[*/0x0449/*::]*/: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t/*::[*/0x044A/*::]*/: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t/*::[*/0x044B/*::]*/: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t/*::[*/0x044C/*::]*/: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t/*::[*/0x044D/*::]*/: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t/*::[*/0x044E/*::]*/: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t/*::[*/0x044F/*::]*/: { /* n:\"BrtRangeProtection14\" */ },\n\t/*::[*/0x0450/*::]*/: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t/*::[*/0x0451/*::]*/: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t/*::[*/0x0457/*::]*/: { /* n:\"BrtList14\" */ },\n\t/*::[*/0x0458/*::]*/: { /* n:\"BrtCFIcon\" */ },\n\t/*::[*/0x0459/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x045A/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x045B/*::]*/: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t/*::[*/0x045C/*::]*/: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t/*::[*/0x045D/*::]*/: { /* n:\"BrtWbProp14\" */ },\n\t/*::[*/0x045E/*::]*/: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t/*::[*/0x045F/*::]*/: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t/*::[*/0x0460/*::]*/: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t/*::[*/0x0461/*::]*/: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t/*::[*/0x0462/*::]*/: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t/*::[*/0x0463/*::]*/: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t/*::[*/0x0464/*::]*/: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t/*::[*/0x0465/*::]*/: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t/*::[*/0x0466/*::]*/: { /* n:\"BrtSXTupleItems\" */ },\n\t/*::[*/0x0468/*::]*/: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t/*::[*/0x0469/*::]*/: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t/*::[*/0x046A/*::]*/: { /* n:\"BrtSlicerStyleElement\" */ },\n\t/*::[*/0x046B/*::]*/: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t/*::[*/0x046C/*::]*/: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t/*::[*/0x046D/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t/*::[*/0x046E/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t/*::[*/0x046F/*::]*/: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t/*::[*/0x0470/*::]*/: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t/*::[*/0x0471/*::]*/: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t/*::[*/0x0472/*::]*/: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t/*::[*/0x0473/*::]*/: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t/*::[*/0x0474/*::]*/: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t/*::[*/0x0475/*::]*/: { /* n:\"BrtPCDField14\" */ },\n\t/*::[*/0x0476/*::]*/: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t/*::[*/0x0477/*::]*/: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t/*::[*/0x0478/*::]*/: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t/*::[*/0x0479/*::]*/: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t/*::[*/0x047A/*::]*/: { /* n:\"BrtCFRuleExt\" */ },\n\t/*::[*/0x047B/*::]*/: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t/*::[*/0x047C/*::]*/: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t/*::[*/0x047D/*::]*/: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t/*::[*/0x047E/*::]*/: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t/*::[*/0x0480/*::]*/: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t/*::[*/0x0481/*::]*/: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t/*::[*/0x0482/*::]*/: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t/*::[*/0x0483/*::]*/: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t/*::[*/0x0484/*::]*/: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t/*::[*/0x0485/*::]*/: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t/*::[*/0x0486/*::]*/: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t/*::[*/0x0487/*::]*/: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t/*::[*/0x0488/*::]*/: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t/*::[*/0x0489/*::]*/: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t/*::[*/0x048A/*::]*/: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t/*::[*/0x048B/*::]*/: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t/*::[*/0x048C/*::]*/: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t/*::[*/0x048D/*::]*/: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t/*::[*/0x048E/*::]*/: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t/*::[*/0x048F/*::]*/: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t/*::[*/0x0490/*::]*/: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t/*::[*/0x0491/*::]*/: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t/*::[*/0x0492/*::]*/: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t/*::[*/0x0493/*::]*/: { /* n:\"BrtDxf14\" */ },\n\t/*::[*/0x0494/*::]*/: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t/*::[*/0x0495/*::]*/: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t/*::[*/0x0499/*::]*/: { /* n:\"BrtFilter14\" */ },\n\t/*::[*/0x049A/*::]*/: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t/*::[*/0x049C/*::]*/: { /* n:\"BrtCustomFilter14\" */ },\n\t/*::[*/0x049D/*::]*/: { /* n:\"BrtIconFilter14\" */ },\n\t/*::[*/0x049E/*::]*/: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t/*::[*/0x0800/*::]*/: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0801/*::]*/: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0802/*::]*/: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t/*::[*/0x0804/*::]*/: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t/*::[*/0x0805/*::]*/: { /* n:\"BrtPivotTableRef\" */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t/*::[*/0x0808/*::]*/: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t/*::[*/0x080A/*::]*/: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t/*::[*/0x080C/*::]*/: { /* n:\"BrtPcdCalcMem15\" */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"BrtQsi15\" */ },\n\t/*::[*/0x0814/*::]*/: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t/*::[*/0x0815/*::]*/: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t/*::[*/0x0816/*::]*/: { /* n:\"BrtWebExtension\" */ },\n\t/*::[*/0x0817/*::]*/: { /* n:\"BrtAbsPath15\" */ },\n\t/*::[*/0x0818/*::]*/: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t/*::[*/0x0819/*::]*/: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t/*::[*/0x081B/*::]*/: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t/*::[*/0x081C/*::]*/: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t/*::[*/0x081D/*::]*/: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t/*::[*/0x081E/*::]*/: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t/*::[*/0x081F/*::]*/: { /* n:\"BrtSxFilter15\" */ },\n\t/*::[*/0x0820/*::]*/: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0821/*::]*/: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0822/*::]*/: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t/*::[*/0x0823/*::]*/: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t/*::[*/0x0824/*::]*/: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t/*::[*/0x0825/*::]*/: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t/*::[*/0x0826/*::]*/: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t/*::[*/0x0827/*::]*/: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t/*::[*/0x0828/*::]*/: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t/*::[*/0x0829/*::]*/: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t/*::[*/0x082A/*::]*/: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t/*::[*/0x082B/*::]*/: { /* n:\"BrtWorkBookPr15\" */ },\n\t/*::[*/0x082C/*::]*/: { /* n:\"BrtPCDH15\" */ },\n\t/*::[*/0x082D/*::]*/: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t/*::[*/0x082E/*::]*/: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t/*::[*/0x082F/*::]*/: { /* n:\"BrtTimelineStyleElement\" */ },\n\t/*::[*/0x0830/*::]*/: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t/*::[*/0x0831/*::]*/: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t/*::[*/0x0832/*::]*/: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t/*::[*/0x0833/*::]*/: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t/*::[*/0x0834/*::]*/: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t/*::[*/0x0835/*::]*/: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t/*::[*/0x0836/*::]*/: { /* n:\"BrtDxf15\" */ },\n\t/*::[*/0x0837/*::]*/: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t/*::[*/0x0838/*::]*/: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t/*::[*/0x0839/*::]*/: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t/*::[*/0x083A/*::]*/: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t/*::[*/0x083B/*::]*/: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t/*::[*/0x083C/*::]*/: { /* n:\"BrtItemUniqueName\" */ },\n\t/*::[*/0x083D/*::]*/: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t/*::[*/0x083E/*::]*/: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t/*::[*/0x083F/*::]*/: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t/*::[*/0x0840/*::]*/: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t/*::[*/0x0841/*::]*/: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t/*::[*/0x0842/*::]*/: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t/*::[*/0x0843/*::]*/: { /* n:\"BrtTextPr15\" */ },\n\t/*::[*/0x0844/*::]*/: { /* n:\"BrtRangePr15\" */ },\n\t/*::[*/0x0845/*::]*/: { /* n:\"BrtDbCommand15\" */ },\n\t/*::[*/0x0846/*::]*/: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t/*::[*/0x0847/*::]*/: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t/*::[*/0x0848/*::]*/: { /* n:\"BrtDbTable15\" */ },\n\t/*::[*/0x0849/*::]*/: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t/*::[*/0x084A/*::]*/: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t/*::[*/0x084B/*::]*/: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t/*::[*/0x084C/*::]*/: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t/*::[*/0x084D/*::]*/: { /* n:\"BrtModelTable\" */ },\n\t/*::[*/0x084E/*::]*/: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t/*::[*/0x084F/*::]*/: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t/*::[*/0x0850/*::]*/: { /* n:\"BrtModelRelationship\" */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t/*::[*/0x0852/*::]*/: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t/*::[*/0x0853/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t/*::[*/0x0854/*::]*/: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t/*::[*/0x0855/*::]*/: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t/*::[*/0x0856/*::]*/: { /* n:\"BrtFieldListActiveItem\" */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"BrtSXDI15\" */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t/*::[*/0x085A/*::]*/: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t/*::[*/0x085B/*::]*/: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t/*::[*/0x085C/*::]*/: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t/*::[*/0x085D/*::]*/: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t/*::[*/0x0C00/*::]*/: { /* n:\"BrtUid\" */ },\n\t/*::[*/0x0C01/*::]*/: { /* n:\"BrtRevisionPtr\" */ },\n\t/*::[*/0x1000/*::]*/: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t/*::[*/0x1001/*::]*/: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t/*::[*/0x138A/*::]*/: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t/*::[*/0x138B/*::]*/: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t/*::[*/0x13D9/*::]*/: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t/*::[*/0x13DA/*::]*/: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t/*::[*/0x13DB/*::]*/: { /* n:\"BrtRichFilter\" */ },\n\t/*::[*/0x13DC/*::]*/: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t/*::[*/0x13DD/*::]*/: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t/*::[*/0x13DE/*::]*/: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t/*::[*/0x13DF/*::]*/: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t/*::[*/0x13E0/*::]*/: { /* n:\"BrtCustomRichFilter\" */ },\n\t/*::[*/0x13E1/*::]*/: { /* n:\"BrtTop10RichFilter\" */ },\n\t/*::[*/0x13E2/*::]*/: { /* n:\"BrtDynamicRichFilter\" */ },\n\t/*::[*/0x13E4/*::]*/: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t/*::[*/0x13E5/*::]*/: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t/*::[*/0x13E6/*::]*/: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t/*::[*/0x13E7/*::]*/: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t/*::[*/0x13E8/*::]*/: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t/*::[*/0x13E9/*::]*/: { /* n:\"BrtCalcFeature\" */ },\n\t/*::[*/0x13EB/*::]*/: { /* n:\"BrtExternalLinksPr\" */ },\n\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t/*::[*/0x0006/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x000a/*::]*/: { /* n:\"EOF\", */ f:parsenoop2 },\n\t/*::[*/0x000c/*::]*/: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t/*::[*/0x000d/*::]*/: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t/*::[*/0x000e/*::]*/: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t/*::[*/0x000f/*::]*/: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t/*::[*/0x0010/*::]*/: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t/*::[*/0x0011/*::]*/: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t/*::[*/0x0012/*::]*/: { /* n:\"Protect\", */ f:parsebool },\n\t/*::[*/0x0013/*::]*/: { /* n:\"Password\", */ f:parseuint16 },\n\t/*::[*/0x0014/*::]*/: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0015/*::]*/: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0017/*::]*/: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x0018/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0019/*::]*/: { /* n:\"WinProtect\", */ f:parsebool },\n\t/*::[*/0x001a/*::]*/: { /* n:\"VerticalPageBreaks\", */ },\n\t/*::[*/0x001b/*::]*/: { /* n:\"HorizontalPageBreaks\", */ },\n\t/*::[*/0x001c/*::]*/: { /* n:\"Note\", */ f:parse_Note },\n\t/*::[*/0x001d/*::]*/: { /* n:\"Selection\", */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"Date1904\", */ f:parsebool },\n\t/*::[*/0x0023/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0026/*::]*/: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0027/*::]*/: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0028/*::]*/: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0029/*::]*/: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x002a/*::]*/: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t/*::[*/0x002b/*::]*/: { /* n:\"PrintGrid\", */ f:parsebool },\n\t/*::[*/0x002f/*::]*/: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t/*::[*/0x0031/*::]*/: { /* n:\"Font\", */ f:parse_Font },\n\t/*::[*/0x0033/*::]*/: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t/*::[*/0x003c/*::]*/: { /* n:\"Continue\", */ },\n\t/*::[*/0x003d/*::]*/: { /* n:\"Window1\", */ f:parse_Window1 },\n\t/*::[*/0x0040/*::]*/: { /* n:\"Backup\", */ f:parsebool },\n\t/*::[*/0x0041/*::]*/: { /* n:\"Pane\", */ f:parse_Pane },\n\t/*::[*/0x0042/*::]*/: { /* n:\"CodePage\", */ f:parseuint16 },\n\t/*::[*/0x004d/*::]*/: { /* n:\"Pls\", */ },\n\t/*::[*/0x0050/*::]*/: { /* n:\"DCon\", */ },\n\t/*::[*/0x0051/*::]*/: { /* n:\"DConRef\", */ },\n\t/*::[*/0x0052/*::]*/: { /* n:\"DConName\", */ },\n\t/*::[*/0x0055/*::]*/: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t/*::[*/0x0059/*::]*/: { /* n:\"XCT\", */ },\n\t/*::[*/0x005a/*::]*/: { /* n:\"CRN\", */ },\n\t/*::[*/0x005b/*::]*/: { /* n:\"FileSharing\", */ },\n\t/*::[*/0x005c/*::]*/: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t/*::[*/0x005d/*::]*/: { /* n:\"Obj\", */ f:parse_Obj },\n\t/*::[*/0x005e/*::]*/: { /* n:\"Uncalced\", */ },\n\t/*::[*/0x005f/*::]*/: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t/*::[*/0x0060/*::]*/: { /* n:\"Template\", */ },\n\t/*::[*/0x0061/*::]*/: { /* n:\"Intl\", */ },\n\t/*::[*/0x0063/*::]*/: { /* n:\"ObjProtect\", */ f:parsebool },\n\t/*::[*/0x007d/*::]*/: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x0080/*::]*/: { /* n:\"Guts\", */ f:parse_Guts },\n\t/*::[*/0x0081/*::]*/: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t/*::[*/0x0082/*::]*/: { /* n:\"GridSet\", */ f:parseuint16 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"HCenter\", */ f:parsebool },\n\t/*::[*/0x0084/*::]*/: { /* n:\"VCenter\", */ f:parsebool },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"WriteProtect\", */ },\n\t/*::[*/0x008c/*::]*/: { /* n:\"Country\", */ f:parse_Country },\n\t/*::[*/0x008d/*::]*/: { /* n:\"HideObj\", */ f:parseuint16 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"Sort\", */ },\n\t/*::[*/0x0092/*::]*/: { /* n:\"Palette\", */ f:parse_Palette },\n\t/*::[*/0x0097/*::]*/: { /* n:\"Sync\", */ },\n\t/*::[*/0x0098/*::]*/: { /* n:\"LPr\", */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"DxGCol\", */ },\n\t/*::[*/0x009a/*::]*/: { /* n:\"FnGroupName\", */ },\n\t/*::[*/0x009b/*::]*/: { /* n:\"FilterMode\", */ },\n\t/*::[*/0x009c/*::]*/: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t/*::[*/0x009d/*::]*/: { /* n:\"AutoFilterInfo\", */ },\n\t/*::[*/0x009e/*::]*/: { /* n:\"AutoFilter\", */ },\n\t/*::[*/0x00a0/*::]*/: { /* n:\"Scl\", */ f:parse_Scl },\n\t/*::[*/0x00a1/*::]*/: { /* n:\"Setup\", */ f:parse_Setup },\n\t/*::[*/0x00ae/*::]*/: { /* n:\"ScenMan\", */ },\n\t/*::[*/0x00af/*::]*/: { /* n:\"SCENARIO\", */ },\n\t/*::[*/0x00b0/*::]*/: { /* n:\"SxView\", */ },\n\t/*::[*/0x00b1/*::]*/: { /* n:\"Sxvd\", */ },\n\t/*::[*/0x00b2/*::]*/: { /* n:\"SXVI\", */ },\n\t/*::[*/0x00b4/*::]*/: { /* n:\"SxIvd\", */ },\n\t/*::[*/0x00b5/*::]*/: { /* n:\"SXLI\", */ },\n\t/*::[*/0x00b6/*::]*/: { /* n:\"SXPI\", */ },\n\t/*::[*/0x00b8/*::]*/: { /* n:\"DocRoute\", */ },\n\t/*::[*/0x00b9/*::]*/: { /* n:\"RecipName\", */ },\n\t/*::[*/0x00bd/*::]*/: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t/*::[*/0x00be/*::]*/: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t/*::[*/0x00c1/*::]*/: { /* n:\"Mms\", */ f:parsenoop2 },\n\t/*::[*/0x00c5/*::]*/: { /* n:\"SXDI\", */ },\n\t/*::[*/0x00c6/*::]*/: { /* n:\"SXDB\", */ },\n\t/*::[*/0x00c7/*::]*/: { /* n:\"SXFDB\", */ },\n\t/*::[*/0x00c8/*::]*/: { /* n:\"SXDBB\", */ },\n\t/*::[*/0x00c9/*::]*/: { /* n:\"SXNum\", */ },\n\t/*::[*/0x00ca/*::]*/: { /* n:\"SxBool\", */ f:parsebool },\n\t/*::[*/0x00cb/*::]*/: { /* n:\"SxErr\", */ },\n\t/*::[*/0x00cc/*::]*/: { /* n:\"SXInt\", */ },\n\t/*::[*/0x00cd/*::]*/: { /* n:\"SXString\", */ },\n\t/*::[*/0x00ce/*::]*/: { /* n:\"SXDtr\", */ },\n\t/*::[*/0x00cf/*::]*/: { /* n:\"SxNil\", */ },\n\t/*::[*/0x00d0/*::]*/: { /* n:\"SXTbl\", */ },\n\t/*::[*/0x00d1/*::]*/: { /* n:\"SXTBRGIITM\", */ },\n\t/*::[*/0x00d2/*::]*/: { /* n:\"SxTbpg\", */ },\n\t/*::[*/0x00d3/*::]*/: { /* n:\"ObProj\", */ },\n\t/*::[*/0x00d5/*::]*/: { /* n:\"SXStreamID\", */ },\n\t/*::[*/0x00d7/*::]*/: { /* n:\"DBCell\", */ },\n\t/*::[*/0x00d8/*::]*/: { /* n:\"SXRng\", */ },\n\t/*::[*/0x00d9/*::]*/: { /* n:\"SxIsxoper\", */ },\n\t/*::[*/0x00da/*::]*/: { /* n:\"BookBool\", */ f:parseuint16 },\n\t/*::[*/0x00dc/*::]*/: { /* n:\"DbOrParamQry\", */ },\n\t/*::[*/0x00dd/*::]*/: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t/*::[*/0x00de/*::]*/: { /* n:\"OleObjectSize\", */ },\n\t/*::[*/0x00e0/*::]*/: { /* n:\"XF\", */ f:parse_XF },\n\t/*::[*/0x00e1/*::]*/: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t/*::[*/0x00e2/*::]*/: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t/*::[*/0x00e3/*::]*/: { /* n:\"SXVS\", */ },\n\t/*::[*/0x00e5/*::]*/: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t/*::[*/0x00e9/*::]*/: { /* n:\"BkHim\", */ },\n\t/*::[*/0x00eb/*::]*/: { /* n:\"MsoDrawingGroup\", */ },\n\t/*::[*/0x00ec/*::]*/: { /* n:\"MsoDrawing\", */ },\n\t/*::[*/0x00ed/*::]*/: { /* n:\"MsoDrawingSelection\", */ },\n\t/*::[*/0x00ef/*::]*/: { /* n:\"PhoneticInfo\", */ },\n\t/*::[*/0x00f0/*::]*/: { /* n:\"SxRule\", */ },\n\t/*::[*/0x00f1/*::]*/: { /* n:\"SXEx\", */ },\n\t/*::[*/0x00f2/*::]*/: { /* n:\"SxFilt\", */ },\n\t/*::[*/0x00f4/*::]*/: { /* n:\"SxDXF\", */ },\n\t/*::[*/0x00f5/*::]*/: { /* n:\"SxItm\", */ },\n\t/*::[*/0x00f6/*::]*/: { /* n:\"SxName\", */ },\n\t/*::[*/0x00f7/*::]*/: { /* n:\"SxSelect\", */ },\n\t/*::[*/0x00f8/*::]*/: { /* n:\"SXPair\", */ },\n\t/*::[*/0x00f9/*::]*/: { /* n:\"SxFmla\", */ },\n\t/*::[*/0x00fb/*::]*/: { /* n:\"SxFormat\", */ },\n\t/*::[*/0x00fc/*::]*/: { /* n:\"SST\", */ f:parse_SST },\n\t/*::[*/0x00fd/*::]*/: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t/*::[*/0x00ff/*::]*/: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t/*::[*/0x0100/*::]*/: { /* n:\"SXVDEx\", */ },\n\t/*::[*/0x0103/*::]*/: { /* n:\"SXFormula\", */ },\n\t/*::[*/0x0122/*::]*/: { /* n:\"SXDBEx\", */ },\n\t/*::[*/0x0137/*::]*/: { /* n:\"RRDInsDel\", */ },\n\t/*::[*/0x0138/*::]*/: { /* n:\"RRDHead\", */ },\n\t/*::[*/0x013b/*::]*/: { /* n:\"RRDChgCell\", */ },\n\t/*::[*/0x013d/*::]*/: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t/*::[*/0x013e/*::]*/: { /* n:\"RRDRenSheet\", */ },\n\t/*::[*/0x013f/*::]*/: { /* n:\"RRSort\", */ },\n\t/*::[*/0x0140/*::]*/: { /* n:\"RRDMove\", */ },\n\t/*::[*/0x014a/*::]*/: { /* n:\"RRFormat\", */ },\n\t/*::[*/0x014b/*::]*/: { /* n:\"RRAutoFmt\", */ },\n\t/*::[*/0x014d/*::]*/: { /* n:\"RRInsertSh\", */ },\n\t/*::[*/0x014e/*::]*/: { /* n:\"RRDMoveBegin\", */ },\n\t/*::[*/0x014f/*::]*/: { /* n:\"RRDMoveEnd\", */ },\n\t/*::[*/0x0150/*::]*/: { /* n:\"RRDInsDelBegin\", */ },\n\t/*::[*/0x0151/*::]*/: { /* n:\"RRDInsDelEnd\", */ },\n\t/*::[*/0x0152/*::]*/: { /* n:\"RRDConflict\", */ },\n\t/*::[*/0x0153/*::]*/: { /* n:\"RRDDefName\", */ },\n\t/*::[*/0x0154/*::]*/: { /* n:\"RRDRstEtxp\", */ },\n\t/*::[*/0x015f/*::]*/: { /* n:\"LRng\", */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"UsesELFs\", */ f:parsebool },\n\t/*::[*/0x0161/*::]*/: { /* n:\"DSF\", */ f:parsenoop2 },\n\t/*::[*/0x0191/*::]*/: { /* n:\"CUsr\", */ },\n\t/*::[*/0x0192/*::]*/: { /* n:\"CbUsr\", */ },\n\t/*::[*/0x0193/*::]*/: { /* n:\"UsrInfo\", */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"UsrExcl\", */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"FileLock\", */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"RRDInfo\", */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BCUsrs\", */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"UsrChk\", */ },\n\t/*::[*/0x01a9/*::]*/: { /* n:\"UserBView\", */ },\n\t/*::[*/0x01aa/*::]*/: { /* n:\"UserSViewBegin\", */ },\n\t/*::[*/0x01ab/*::]*/: { /* n:\"UserSViewEnd\", */ },\n\t/*::[*/0x01ac/*::]*/: { /* n:\"RRDUserView\", */ },\n\t/*::[*/0x01ad/*::]*/: { /* n:\"Qsi\", */ },\n\t/*::[*/0x01ae/*::]*/: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t/*::[*/0x01af/*::]*/: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t/*::[*/0x01b0/*::]*/: { /* n:\"CondFmt\", */ },\n\t/*::[*/0x01b1/*::]*/: { /* n:\"CF\", */ },\n\t/*::[*/0x01b2/*::]*/: { /* n:\"DVal\", */ },\n\t/*::[*/0x01b5/*::]*/: { /* n:\"DConBin\", */ },\n\t/*::[*/0x01b6/*::]*/: { /* n:\"TxO\", */ f:parse_TxO },\n\t/*::[*/0x01b7/*::]*/: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t/*::[*/0x01b8/*::]*/: { /* n:\"HLink\", */ f:parse_HLink },\n\t/*::[*/0x01b9/*::]*/: { /* n:\"Lel\", */ },\n\t/*::[*/0x01ba/*::]*/: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t/*::[*/0x01bb/*::]*/: { /* n:\"SXFDBType\", */ },\n\t/*::[*/0x01bc/*::]*/: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t/*::[*/0x01bd/*::]*/: { /* n:\"ObNoMacros\", */ },\n\t/*::[*/0x01be/*::]*/: { /* n:\"Dv\", */ },\n\t/*::[*/0x01c0/*::]*/: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t/*::[*/0x01c1/*::]*/: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t/*::[*/0x01c2/*::]*/: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0201/*::]*/: { /* n:\"Blank\", */ f:parse_Blank },\n\t/*::[*/0x0203/*::]*/: { /* n:\"Number\", */ f:parse_Number },\n\t/*::[*/0x0204/*::]*/: { /* n:\"Label\", */ f:parse_Label },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0207/*::]*/: { /* n:\"String\", */ f:parse_String },\n\t/*::[*/0x0208/*::]*/: { /* n:\"Row\", */ f:parse_Row },\n\t/*::[*/0x020b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0221/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0225/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t/*::[*/0x0236/*::]*/: { /* n:\"Table\", */ },\n\t/*::[*/0x023e/*::]*/: { /* n:\"Window2\", */ f:parse_Window2 },\n\t/*::[*/0x027e/*::]*/: { /* n:\"RK\", */ f:parse_RK },\n\t/*::[*/0x0293/*::]*/: { /* n:\"Style\", */ },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BigName\", */ },\n\t/*::[*/0x041e/*::]*/: { /* n:\"Format\", */ f:parse_Format },\n\t/*::[*/0x043c/*::]*/: { /* n:\"ContinueBigName\", */ },\n\t/*::[*/0x04bc/*::]*/: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t/*::[*/0x0800/*::]*/: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t/*::[*/0x0801/*::]*/: { /* n:\"WebPub\", */ },\n\t/*::[*/0x0802/*::]*/: { /* n:\"QsiSXTag\", */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"DBQueryExt\", */ },\n\t/*::[*/0x0804/*::]*/: { /* n:\"ExtString\", */ },\n\t/*::[*/0x0805/*::]*/: { /* n:\"TxtQry\", */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"Qsir\", */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"Qsif\", */ },\n\t/*::[*/0x0808/*::]*/: { /* n:\"RRDTQSIF\", */ },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x080a/*::]*/: { /* n:\"OleDbConn\", */ },\n\t/*::[*/0x080b/*::]*/: { /* n:\"WOpt\", */ },\n\t/*::[*/0x080c/*::]*/: { /* n:\"SXViewEx\", */ },\n\t/*::[*/0x080d/*::]*/: { /* n:\"SXTH\", */ },\n\t/*::[*/0x080e/*::]*/: { /* n:\"SXPIEx\", */ },\n\t/*::[*/0x080f/*::]*/: { /* n:\"SXVDTEx\", */ },\n\t/*::[*/0x0810/*::]*/: { /* n:\"SXViewEx9\", */ },\n\t/*::[*/0x0812/*::]*/: { /* n:\"ContinueFrt\", */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"RealTimeData\", */ },\n\t/*::[*/0x0850/*::]*/: { /* n:\"ChartFrtInfo\", */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"FrtWrapper\", */ },\n\t/*::[*/0x0852/*::]*/: { /* n:\"StartBlock\", */ },\n\t/*::[*/0x0853/*::]*/: { /* n:\"EndBlock\", */ },\n\t/*::[*/0x0854/*::]*/: { /* n:\"StartObject\", */ },\n\t/*::[*/0x0855/*::]*/: { /* n:\"EndObject\", */ },\n\t/*::[*/0x0856/*::]*/: { /* n:\"CatLab\", */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"YMult\", */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"SXViewLink\", */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"PivotChartBits\", */ },\n\t/*::[*/0x085a/*::]*/: { /* n:\"FrtFontList\", */ },\n\t/*::[*/0x0862/*::]*/: { /* n:\"SheetExt\", */ },\n\t/*::[*/0x0863/*::]*/: { /* n:\"BookExt\", */ r:12},\n\t/*::[*/0x0864/*::]*/: { /* n:\"SXAddl\", */ },\n\t/*::[*/0x0865/*::]*/: { /* n:\"CrErr\", */ },\n\t/*::[*/0x0866/*::]*/: { /* n:\"HFPicture\", */ },\n\t/*::[*/0x0867/*::]*/: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t/*::[*/0x0868/*::]*/: { /* n:\"Feat\", */ },\n\t/*::[*/0x086a/*::]*/: { /* n:\"DataLabExt\", */ },\n\t/*::[*/0x086b/*::]*/: { /* n:\"DataLabExtContents\", */ },\n\t/*::[*/0x086c/*::]*/: { /* n:\"CellWatch\", */ },\n\t/*::[*/0x0871/*::]*/: { /* n:\"FeatHdr11\", */ },\n\t/*::[*/0x0872/*::]*/: { /* n:\"Feature11\", */ },\n\t/*::[*/0x0874/*::]*/: { /* n:\"DropDownObjIds\", */ },\n\t/*::[*/0x0875/*::]*/: { /* n:\"ContinueFrt11\", */ },\n\t/*::[*/0x0876/*::]*/: { /* n:\"DConn\", */ },\n\t/*::[*/0x0877/*::]*/: { /* n:\"List12\", */ },\n\t/*::[*/0x0878/*::]*/: { /* n:\"Feature12\", */ },\n\t/*::[*/0x0879/*::]*/: { /* n:\"CondFmt12\", */ },\n\t/*::[*/0x087a/*::]*/: { /* n:\"CF12\", */ },\n\t/*::[*/0x087b/*::]*/: { /* n:\"CFEx\", */ },\n\t/*::[*/0x087c/*::]*/: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t/*::[*/0x087d/*::]*/: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t/*::[*/0x087e/*::]*/: { /* n:\"AutoFilter12\", */ },\n\t/*::[*/0x087f/*::]*/: { /* n:\"ContinueFrt12\", */ },\n\t/*::[*/0x0884/*::]*/: { /* n:\"MDTInfo\", */ },\n\t/*::[*/0x0885/*::]*/: { /* n:\"MDXStr\", */ },\n\t/*::[*/0x0886/*::]*/: { /* n:\"MDXTuple\", */ },\n\t/*::[*/0x0887/*::]*/: { /* n:\"MDXSet\", */ },\n\t/*::[*/0x0888/*::]*/: { /* n:\"MDXProp\", */ },\n\t/*::[*/0x0889/*::]*/: { /* n:\"MDXKPI\", */ },\n\t/*::[*/0x088a/*::]*/: { /* n:\"MDB\", */ },\n\t/*::[*/0x088b/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x088c/*::]*/: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t/*::[*/0x088d/*::]*/: { /* n:\"DXF\", */ },\n\t/*::[*/0x088e/*::]*/: { /* n:\"TableStyles\", */ r:12 },\n\t/*::[*/0x088f/*::]*/: { /* n:\"TableStyle\", */ },\n\t/*::[*/0x0890/*::]*/: { /* n:\"TableStyleElement\", */ },\n\t/*::[*/0x0892/*::]*/: { /* n:\"StyleExt\", */ },\n\t/*::[*/0x0893/*::]*/: { /* n:\"NamePublish\", */ },\n\t/*::[*/0x0894/*::]*/: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t/*::[*/0x0895/*::]*/: { /* n:\"SortData\", */ },\n\t/*::[*/0x0896/*::]*/: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t/*::[*/0x0897/*::]*/: { /* n:\"GUIDTypeLib\", */ },\n\t/*::[*/0x0898/*::]*/: { /* n:\"FnGrp12\", */ },\n\t/*::[*/0x0899/*::]*/: { /* n:\"NameFnGrp12\", */ },\n\t/*::[*/0x089a/*::]*/: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t/*::[*/0x089b/*::]*/: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t/*::[*/0x089c/*::]*/: { /* n:\"HeaderFooter\", */ },\n\t/*::[*/0x089d/*::]*/: { /* n:\"CrtLayout12\", */ },\n\t/*::[*/0x089e/*::]*/: { /* n:\"CrtMlFrt\", */ },\n\t/*::[*/0x089f/*::]*/: { /* n:\"CrtMlFrtContinue\", */ },\n\t/*::[*/0x08a3/*::]*/: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t/*::[*/0x08a4/*::]*/: { /* n:\"ShapePropsStream\", */ },\n\t/*::[*/0x08a5/*::]*/: { /* n:\"TextPropsStream\", */ },\n\t/*::[*/0x08a6/*::]*/: { /* n:\"RichTextStream\", */ },\n\t/*::[*/0x08a7/*::]*/: { /* n:\"CrtLayout12A\", */ },\n\t/*::[*/0x1001/*::]*/: { /* n:\"Units\", */ },\n\t/*::[*/0x1002/*::]*/: { /* n:\"Chart\", */ },\n\t/*::[*/0x1003/*::]*/: { /* n:\"Series\", */ },\n\t/*::[*/0x1006/*::]*/: { /* n:\"DataFormat\", */ },\n\t/*::[*/0x1007/*::]*/: { /* n:\"LineFormat\", */ },\n\t/*::[*/0x1009/*::]*/: { /* n:\"MarkerFormat\", */ },\n\t/*::[*/0x100a/*::]*/: { /* n:\"AreaFormat\", */ },\n\t/*::[*/0x100b/*::]*/: { /* n:\"PieFormat\", */ },\n\t/*::[*/0x100c/*::]*/: { /* n:\"AttachedLabel\", */ },\n\t/*::[*/0x100d/*::]*/: { /* n:\"SeriesText\", */ },\n\t/*::[*/0x1014/*::]*/: { /* n:\"ChartFormat\", */ },\n\t/*::[*/0x1015/*::]*/: { /* n:\"Legend\", */ },\n\t/*::[*/0x1016/*::]*/: { /* n:\"SeriesList\", */ },\n\t/*::[*/0x1017/*::]*/: { /* n:\"Bar\", */ },\n\t/*::[*/0x1018/*::]*/: { /* n:\"Line\", */ },\n\t/*::[*/0x1019/*::]*/: { /* n:\"Pie\", */ },\n\t/*::[*/0x101a/*::]*/: { /* n:\"Area\", */ },\n\t/*::[*/0x101b/*::]*/: { /* n:\"Scatter\", */ },\n\t/*::[*/0x101c/*::]*/: { /* n:\"CrtLine\", */ },\n\t/*::[*/0x101d/*::]*/: { /* n:\"Axis\", */ },\n\t/*::[*/0x101e/*::]*/: { /* n:\"Tick\", */ },\n\t/*::[*/0x101f/*::]*/: { /* n:\"ValueRange\", */ },\n\t/*::[*/0x1020/*::]*/: { /* n:\"CatSerRange\", */ },\n\t/*::[*/0x1021/*::]*/: { /* n:\"AxisLine\", */ },\n\t/*::[*/0x1022/*::]*/: { /* n:\"CrtLink\", */ },\n\t/*::[*/0x1024/*::]*/: { /* n:\"DefaultText\", */ },\n\t/*::[*/0x1025/*::]*/: { /* n:\"Text\", */ },\n\t/*::[*/0x1026/*::]*/: { /* n:\"FontX\", */ f:parseuint16 },\n\t/*::[*/0x1027/*::]*/: { /* n:\"ObjectLink\", */ },\n\t/*::[*/0x1032/*::]*/: { /* n:\"Frame\", */ },\n\t/*::[*/0x1033/*::]*/: { /* n:\"Begin\", */ },\n\t/*::[*/0x1034/*::]*/: { /* n:\"End\", */ },\n\t/*::[*/0x1035/*::]*/: { /* n:\"PlotArea\", */ },\n\t/*::[*/0x103a/*::]*/: { /* n:\"Chart3d\", */ },\n\t/*::[*/0x103c/*::]*/: { /* n:\"PicF\", */ },\n\t/*::[*/0x103d/*::]*/: { /* n:\"DropBar\", */ },\n\t/*::[*/0x103e/*::]*/: { /* n:\"Radar\", */ },\n\t/*::[*/0x103f/*::]*/: { /* n:\"Surf\", */ },\n\t/*::[*/0x1040/*::]*/: { /* n:\"RadarArea\", */ },\n\t/*::[*/0x1041/*::]*/: { /* n:\"AxisParent\", */ },\n\t/*::[*/0x1043/*::]*/: { /* n:\"LegendException\", */ },\n\t/*::[*/0x1044/*::]*/: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t/*::[*/0x1045/*::]*/: { /* n:\"SerToCrt\", */ },\n\t/*::[*/0x1046/*::]*/: { /* n:\"AxesUsed\", */ },\n\t/*::[*/0x1048/*::]*/: { /* n:\"SBaseRef\", */ },\n\t/*::[*/0x104a/*::]*/: { /* n:\"SerParent\", */ },\n\t/*::[*/0x104b/*::]*/: { /* n:\"SerAuxTrend\", */ },\n\t/*::[*/0x104e/*::]*/: { /* n:\"IFmtRecord\", */ },\n\t/*::[*/0x104f/*::]*/: { /* n:\"Pos\", */ },\n\t/*::[*/0x1050/*::]*/: { /* n:\"AlRuns\", */ },\n\t/*::[*/0x1051/*::]*/: { /* n:\"BRAI\", */ },\n\t/*::[*/0x105b/*::]*/: { /* n:\"SerAuxErrBar\", */ },\n\t/*::[*/0x105c/*::]*/: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t/*::[*/0x105d/*::]*/: { /* n:\"SerFmt\", */ },\n\t/*::[*/0x105f/*::]*/: { /* n:\"Chart3DBarShape\", */ },\n\t/*::[*/0x1060/*::]*/: { /* n:\"Fbi\", */ },\n\t/*::[*/0x1061/*::]*/: { /* n:\"BopPop\", */ },\n\t/*::[*/0x1062/*::]*/: { /* n:\"AxcExt\", */ },\n\t/*::[*/0x1063/*::]*/: { /* n:\"Dat\", */ },\n\t/*::[*/0x1064/*::]*/: { /* n:\"PlotGrowth\", */ },\n\t/*::[*/0x1065/*::]*/: { /* n:\"SIIndex\", */ },\n\t/*::[*/0x1066/*::]*/: { /* n:\"GelFrame\", */ },\n\t/*::[*/0x1067/*::]*/: { /* n:\"BopPopCustom\", */ },\n\t/*::[*/0x1068/*::]*/: { /* n:\"Fbi2\", */ },\n\n\t/*::[*/0x0000/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BIFF2BLANK\", */ },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0007/*::]*/: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BIFF2ROW\", */ },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x000b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t/*::[*/0x001e/*::]*/: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t/*::[*/0x001f/*::]*/: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t/*::[*/0x0020/*::]*/: { /* n:\"BIFF2COLINFO\", */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0024/*::]*/: { /* n:\"COLWIDTH\", */ },\n\t/*::[*/0x0025/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x2c ??\n\t// 0x2d ??\n\t// 0x2e ??\n\t// 0x30 FONTCOUNT: number of fonts\n\t/*::[*/0x0032/*::]*/: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x35: INFOOPTS\n\t// 0x36: TABLE (BIFF2 only)\n\t// 0x37: TABLE2 (BIFF2 only)\n\t// 0x38: WNDESK\n\t// 0x39 ??\n\t// 0x3a: BEGINPREF\n\t// 0x3b: ENDPREF\n\t/*::[*/0x003e/*::]*/: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x3f ??\n\t// 0x46: SHOWSCROLL\n\t// 0x47: SHOWFORMULA\n\t// 0x48: STATUSBAR\n\t// 0x49: SHORTMENUS\n\t// 0x4A:\n\t// 0x4B:\n\t// 0x4C:\n\t// 0x4E:\n\t// 0x4F:\n\t// 0x58: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t/*::[*/0x0034/*::]*/: { /* n:\"DDEObjName\", */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BIFF2XF\", */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BIFF2FONTCLR\", */ },\n\t/*::[*/0x0056/*::]*/: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t/*::[*/0x007e/*::]*/: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t/*::[*/0x007f/*::]*/: { /* n:\"ImData\", */ f:parse_ImData },\n\t/*::[*/0x0087/*::]*/: { /* n:\"Addin\", */ },\n\t/*::[*/0x0088/*::]*/: { /* n:\"Edg\", */ },\n\t/*::[*/0x0089/*::]*/: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t// 0x8F\n\t/*::[*/0x0091/*::]*/: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t/*::[*/0x0094/*::]*/: { /* n:\"LHRecord\", */ },\n\t/*::[*/0x0095/*::]*/: { /* n:\"LHNGraph\", */ },\n\t/*::[*/0x0096/*::]*/: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t/*::[*/0x00a9/*::]*/: { /* n:\"CoordList\", */ },\n\t/*::[*/0x00ab/*::]*/: { /* n:\"GCW\", */ },\n\t/*::[*/0x00bc/*::]*/: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t/*::[*/0x00bf/*::]*/: { /* n:\"ToolbarHdr\", */ },\n\t/*::[*/0x00c0/*::]*/: { /* n:\"ToolbarEnd\", */ },\n\t/*::[*/0x00c2/*::]*/: { /* n:\"AddMenu\", */ },\n\t/*::[*/0x00c3/*::]*/: { /* n:\"DelMenu\", */ },\n\t/*::[*/0x00d6/*::]*/: { /* n:\"RString\", */ f:parse_RString },\n\t/*::[*/0x00df/*::]*/: { /* n:\"UDDesc\", */ },\n\t/*::[*/0x00ea/*::]*/: { /* n:\"TabIdConf\", */ },\n\t/*::[*/0x0162/*::]*/: { /* n:\"XL5Modify\", */ },\n\t/*::[*/0x01a5/*::]*/: { /* n:\"FileSharing2\", */ },\n\t/*::[*/0x0206/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0218/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0223/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0231/*::]*/: { /* n:\"Font\", */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BIFF3XF\", */ },\n\t/*::[*/0x0406/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BIFF4XF\", */ },\n\t/*::[*/0x086d/*::]*/: { /* n:\"FeatInfo\", */ },\n\t/*::[*/0x0873/*::]*/: { /* n:\"FeatInfo11\", */ },\n\t/*::[*/0x0881/*::]*/: { /* n:\"SXAddl12\", */ },\n\t/*::[*/0x08c0/*::]*/: { /* n:\"AutoWebPub\", */ },\n\t/*::[*/0x08c1/*::]*/: { /* n:\"ListObj\", */ },\n\t/*::[*/0x08c2/*::]*/: { /* n:\"ListField\", */ },\n\t/*::[*/0x08c3/*::]*/: { /* n:\"ListDV\", */ },\n\t/*::[*/0x08c4/*::]*/: { /* n:\"ListCondFmt\", */ },\n\t/*::[*/0x08c5/*::]*/: { /* n:\"ListCF\", */ },\n\t/*::[*/0x08c6/*::]*/: { /* n:\"FMQry\", */ },\n\t/*::[*/0x08c7/*::]*/: { /* n:\"FMSQry\", */ },\n\t/*::[*/0x08c8/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x08c9/*::]*/: { /* n:\"LnExt\", */ },\n\t/*::[*/0x08ca/*::]*/: { /* n:\"MkrExt\", */ },\n\t/*::[*/0x08cb/*::]*/: { /* n:\"CrtCoopt\", */ },\n\t/*::[*/0x08d6/*::]*/: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/*::[*/0x7262/*::]*/: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*//*::, opts*/) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v||\"\").slice(0,255)));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref/*:string*/, rr = \"\", cols/*:Array<string>*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i<wb.SheetNames.length;++i) if(wb.SheetNames[i] == o.sheet) idx=i;\n\tif(idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error(\"Sheet not found: \" + o.sheet);\n\twrite_biff_rec(ba, (o.biff == 4 ? 0x0409 : (o.biff == 3 ? 0x0209 : 0x0009)), write_BOF(wb, 0x10, o));\n\t/* ... */\n\twrite_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n\t/* ... */\n\twrite_biff_rec(ba, 0x000A);\n\treturn ba.end();\n}\n\nfunction write_FONTS_biff8(ba, data, opts) {\n\twrite_biff_rec(ba, 0x0031 /* Font */, write_Font({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Arial\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}, opts));\n}\n\n\nfunction write_FMTS_biff8(ba, NF/*:?SSFTable*/, opts) {\n\tif(!NF) return;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_biff_rec(ba, 0x041E /* Format */, write_Format(i, NF[i], opts));\n\t});\n}\n\nfunction write_FEAT(ba, ws) {\n\t/* [MS-XLS] 2.4.112 */\n\tvar o = new_buf(19);\n\to.write_shift(4, 0x867); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 1); o.write_shift(4, 0);\n\twrite_biff_rec(ba, 0x0867 /* FeatHdr */, o);\n\t/* [MS-XLS] 2.4.111 */\n\to = new_buf(39);\n\to.write_shift(4, 0x868); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 0); o.write_shift(4, 0);\n\to.write_shift(2, 1); o.write_shift(4, 4); o.write_shift(2, 0);\n\twrite_Ref8U(safe_decode_range(ws['!ref']||\"A1\"), o);\n\to.write_shift(4, 4);\n\twrite_biff_rec(ba, 0x0868 /* Feat */, o);\n}\n\nfunction write_CELLXFS_biff8(ba, opts) {\n\tfor(var i = 0; i < 16; ++i) write_biff_rec(ba, 0x00e0 /* XF */, write_XF({numFmtId:0, style:true}, 0, opts));\n\topts.cellXfs.forEach(function(c) {\n\t\twrite_biff_rec(ba, 0x00e0 /* XF */, write_XF(c, 0, opts));\n\t});\n}\n\nfunction write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {\n\tfor(var R=0; R<ws['!links'].length; ++R) {\n\t\tvar HL = ws['!links'][R];\n\t\twrite_biff_rec(ba, 0x01b8 /* HLink */, write_HLink(HL));\n\t\tif(HL[1].Tooltip) write_biff_rec(ba, 0x0800 /* HLinkTooltip */, write_HLinkTooltip(HL));\n\t}\n\tdelete ws['!links'];\n}\n\nfunction write_ws_cols_biff8(ba, cols) {\n\tif(!cols) return;\n\tvar cnt = 0;\n\tcols.forEach(function(col, idx) {\n\t\tif(++cnt <= 256 && col) {\n\t\t\twrite_biff_rec(ba, 0x007d /* ColInfo */, write_ColInfo(col_obj_w(idx, col), idx));\n\t\t}\n\t});\n}\n\nfunction write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts) {\n\tvar os = 16 + get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.v == null && !cell.bf) {\n\t\twrite_biff_rec(ba, 0x0201 /* Blank */, write_XLSCell(R, C, os));\n\t\treturn;\n\t}\n\tif(cell.bf) write_biff_rec(ba, 0x0006 /* Formula */, write_Formula(cell, R, C, opts, os));\n\telse switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\t/* TODO: emit RK as appropriate */\n\t\t\twrite_biff_rec(ba, 0x0203 /* Number */, write_Number(R, C, v, os, opts));\n\t\t\tbreak;\n\t\tcase 'b': case 'e':\n\t\t\twrite_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, cell.v, os, opts, cell.t));\n\t\t\tbreak;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvar isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n\t\t\t\twrite_biff_rec(ba, 0x00fd /* LabelSst */, write_LabelSst(R, C, isst, os, opts));\n\t\t\t} else write_biff_rec(ba, 0x0204 /* Label */, write_Label(R, C, (cell.v||\"\").slice(0,255), os, opts));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\twrite_biff_rec(ba, 0x0201 /* Blank */, write_XLSCell(R, C, os));\n\t}\n}\n\n/* [MS-XLS] 2.1.7.20.5 */\nfunction write_ws_biff8(idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheet/*:WBWSProp*/ = ((_WB.Sheets||[])[idx]||{}/*:any*/);\n\tvar dense = Array.isArray(ws);\n\tvar b8 = opts.biff == 8;\n\tvar ref/*:string*/, rr = \"\", cols/*:Array<string>*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array<WBWSProp>*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255).  Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tstr = str.replace(/<!--.*?-->/g, \"\");\n\tvar mtch/*:any*/ = str.match(/<table/i);\n\tif(!mtch) throw new Error(\"Invalid HTML: could not find <table>\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?<tr[^>]*>)/i, \"<tr>\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array<Range>*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"<tr\") { ++R; if(opts.sheetRows && opts.sheetRows <= R) { --R; break; } C = 0; continue; }\n\t\tif(hd != \"<td\" && hd != \"<th\") continue;\n\t\tvar cells = row.split(/<\\/t[dh]>/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/<t[dh]/i)) continue;\n\t\t\tvar m = cell, cc = 0;\n\t\t\t/* TODO: parse styles etc */\n\t\t\twhile(m.charAt(0) == \"<\" && (cc = m.indexOf(\">\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array<Range>*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array<string>*/ = [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_cell({r:R,c:C});\n\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tvar sp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '<span contenteditable=\"true\">' + w + '</span>';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\tif(cell.v != null) sp[\"data-v\"] = cell.v;\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '<a href=\"' + cell.l.Target +'\">' + w + '</a>';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"<tr>\";\n\treturn preamble + oo.join(\"\") + \"</tr>\";\n}\n\nvar HTML_BEGIN = '<html><head><meta charset=\"utf-8\"/><title>SheetJS Table Export</title></head><body>';\nvar HTML_END = '</body></html>';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str.match(/<table[\\s\\S]*?>[\\s\\S]*?<\\/table>/gi);\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find <table>\");\n\tif(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array<string>*/ = [];\n\treturn out.join(\"\") + '<table' + (o && o.id ? ' id=\"' + o.id + '\"' : \"\") + '>';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array<string>*/ = [header];\n\tvar r = decode_range(ws['!ref']);\n\to.dense = Array.isArray(ws);\n\tout.push(make_html_preamble(ws, r, o));\n\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"</table>\" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar rows/*:HTMLCollection<HTMLTableRowElement>*/ = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array<Range>*/ = [], midx = 0;\n\tvar rowinfo/*:Array<RowInfo>*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection<HTMLTableCellElement>*/ = (row.children/*:any*/);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used.  Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new <a> */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\") o.l = ({ Target: l });\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array<any>*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(/<text:s\\/>/g,\" \")\n\t\t.replace(/<text:s text:c=\"(\\d+)\"\\/>/g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/<text:tab[^>]*\\/>/g,\"\\t\")\n\t\t.replace(/<text:line-break\\/>/g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\treturn [v];\n}\n\nvar number_formats_ods = {\n\t/* ods name: [short ssf fmt, long ssf fmt] */\n\tday:           [\"d\",   \"dd\"],\n\tmonth:         [\"m\",   \"mm\"],\n\tyear:          [\"y\",   \"yy\"],\n\thours:         [\"h\",   \"hh\"],\n\tminutes:       [\"m\",   \"mm\"],\n\tseconds:       [\"s\",   \"ss\"],\n\t\"am-pm\":       [\"A/P\", \"AM/PM\"],\n\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\tera:           [\"e\",   \"ee\"],\n\t/* there is no native representation of LO \"Q\" format */\n\tquarter:       [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n};\n\n\nfunction parse_content_xml(d/*:string*/, _opts)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array<any>*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array<string>*/ = [];\n\t\tvar ws = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges/*:Array<Range>*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array<RowInfo>*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array<Comment>*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(/<!--([\\s\\S]*?)-->/mg,\"\").replace(/<!DOCTYPE[^\\[]*\\[[^\\]]*\\]>/gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 <table:table>\n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]/*:any*/) : ({}/*:any*/); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 <table:table-row-group>\n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 <table:table-row>\n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 <table:covered-table-cell>\n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.t = 'd'; q.v = numdate(q.v); }\n\t\t\t\t\t\t\tq.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 <table:table-cell>\n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: <office:document> is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 <office:document-content>\n\t\t\tcase 'spreadsheet': case '主体': // 3.7 <office:spreadsheet>\n\t\t\tcase 'scripts': // 3.12 <office:scripts>\n\t\t\tcase 'styles': // TODO <office:styles>\n\t\t\tcase 'font-face-decls': // 3.14 <office:font-face-decls>\n\t\t\tcase 'master-styles': // 3.15.4 <office:master-styles> -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 <office:annotation>\n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 <dc:creator>\n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: <office:meta> <uof:元数据> FODS/UOF\n\t\t\tcase 'settings': // TODO: <office:settings>\n\t\t\tcase 'config-item-set': // TODO: <office:config-item-set>\n\t\t\tcase 'config-item-map-indexed': // TODO: <office:config-item-map-indexed>\n\t\t\tcase 'config-item-map-entry': // TODO: <office:config-item-map-entry>\n\t\t\tcase 'config-item-map-named': // TODO: <office:config-item-map-entry>\n\t\t\tcase 'shapes': // 9.2.8 <table:shapes>\n\t\t\tcase 'frame': // 10.4.2 <draw:frame>\n\t\t\tcase 'text-box': // 10.4.3 <draw:text-box>\n\t\t\tcase 'image': // 10.4.4 <draw:image>\n\t\t\tcase 'data-pilot-tables': // 9.6.2 <table:data-pilot-tables>\n\t\t\tcase 'list-style': // 16.30 <text:list-style>\n\t\t\tcase 'form': // 13.13 <form:form>\n\t\t\tcase 'dde-links': // 9.8 <table:dde-links>\n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: <number:scientific-number>\n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: <number:currency-symbol>\n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: <number:currency-style>\n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 <number:number-style>\n\t\t\tcase 'percentage-style': // 16.27.9 <number:percentage-style>\n\t\t\tcase 'date-style': // 16.27.10 <number:date-style>\n\t\t\tcase 'time-style': // 16.27.18 <number:time-style>\n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 <office:script>\n\t\t\tcase 'libraries': break; // TODO: <ooo:libraries>\n\t\t\tcase 'automatic-styles': break; // 3.15.3 <office:automatic-styles>\n\n\t\t\tcase 'default-style': // TODO: <style:default-style>\n\t\t\tcase 'page-layout': break; // TODO: <style:page-layout>\n\t\t\tcase 'style': // 16.2 <style:style>\n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 <style:map>\n\t\t\tcase 'font-face': break; // 16.21 <style:font-face>\n\n\t\t\tcase 'paragraph-properties': break; // 17.6 <style:paragraph-properties>\n\t\t\tcase 'table-properties': break; // 17.15 <style:table-properties>\n\t\t\tcase 'table-column-properties': break; // 17.16 <style:table-column-properties>\n\t\t\tcase 'table-row-properties': break; // 17.17 <style:table-row-properties>\n\t\t\tcase 'table-cell-properties': break; // 17.18 <style:table-cell-properties>\n\n\t\t\tcase 'number': // 16.27.3 <number:number>\n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats_ods[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 <number:fraction>\n\n\t\t\tcase 'day': // 16.27.11 <number:day>\n\t\t\tcase 'month': // 16.27.12 <number:month>\n\t\t\tcase 'year': // 16.27.13 <number:year>\n\t\t\tcase 'era': // 16.27.14 <number:era>\n\t\t\tcase 'day-of-week': // 16.27.15 <number:day-of-week>\n\t\t\tcase 'week-of-year': // 16.27.16 <number:week-of-year>\n\t\t\tcase 'quarter': // 16.27.17 <number:quarter>\n\t\t\tcase 'hours': // 16.27.19 <number:hours>\n\t\t\tcase 'minutes': // 16.27.20 <number:minutes>\n\t\t\tcase 'seconds': // 16.27.21 <number:seconds>\n\t\t\tcase 'am-pm': // 16.27.22 <number:am-pm>\n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats_ods[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 <number:boolean-style>\n\t\t\tcase 'boolean': break; // 16.27.24 <number:boolean>\n\t\t\tcase 'text-style': break; // 16.27.25 <number:text-style>\n\t\t\tcase 'text': // 16.27.26 <number:text>\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 <table:named-range>\n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 <number:text-content>\n\t\t\tcase 'text-properties': break; // 16.27.27 <style:text-properties>\n\t\t\tcase 'embedded-text': break; // 16.27.4 <number:embedded-text>\n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 <table:table-column>\n\t\t\tcase 'table-header-rows': break; // 9.1.7 <table:table-header-rows>\n\t\t\tcase 'table-rows': break; // 9.1.12 <table:table-rows>\n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 <table:table-column-group>\n\t\t\tcase 'table-header-columns': break; // 9.1.11 <table:table-header-columns>\n\t\t\tcase 'table-columns': break; // 9.1.12 <table:table-columns>\n\n\t\t\tcase 'null-date': break; // 9.4.2 <table:null-date> TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 <style:graphic-properties>\n\t\t\tcase 'calculation-settings': break; // 9.4.1 <table:calculation-settings>\n\t\t\tcase 'named-expressions': break; // 9.4.11 <table:named-expressions>\n\t\t\tcase 'label-range': break; // 9.4.9 <table:label-range>\n\t\t\tcase 'label-ranges': break; // 9.4.10 <table:label-ranges>\n\t\t\tcase 'named-expression': break; // 9.4.13 <table:named-expression>\n\t\t\tcase 'sort': break; // 9.4.19 <table:sort>\n\t\t\tcase 'sort-by': break; // 9.4.20 <table:sort-by>\n\t\t\tcase 'sort-groups': break; // 9.4.22 <table:sort-groups>\n\n\t\t\tcase 'tab': break; // 6.1.4 <text:tab>\n\t\t\tcase 'line-break': break; // 6.1.5 <text:line-break>\n\t\t\tcase 'span': break; // 6.1.7 <text:span>\n\t\t\tcase 'p': case '文本串': // 5.1.3 <text:p>\n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // <text:p>\n\t\t\tcase 's': break; // <text:s>\n\n\t\t\tcase 'database-range': // 9.4.15 <table:database-range>\n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 <draw:object>\n\t\t\tcase 'title': case '标题': break; // <*:title> OR <uof:标题>\n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 <table:iteration>\n\t\t\tcase 'content-validations': break; // 9.4.4 <table:\n\t\t\tcase 'content-validation': break; // 9.4.5 <table:\n\t\t\tcase 'help-message': break; // 9.4.6 <table:\n\t\t\tcase 'error-message': break; // 9.4.7 <table:\n\t\t\tcase 'database-ranges': break; // 9.4.14 <table:database-ranges>\n\t\t\tcase 'filter': break; // 9.5.2 <table:filter>\n\t\t\tcase 'filter-and': break; // 9.5.3 <table:filter-and>\n\t\t\tcase 'filter-or': break; // 9.5.4 <table:filter-or>\n\t\t\tcase 'filter-condition': break; // 9.5.5 <table:filter-condition>\n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 <text:\n\t\t\tcase 'list-level-style-number': break; // 16.32 <text:\n\t\t\tcase 'list-level-properties': break; // 17.19 <style:\n\n\t\t\t/* 7.3 Document Fields */\n\t\t\tcase 'sender-firstname': // 7.3.6.2\n\t\t\tcase 'sender-lastname': // 7.3.6.3\n\t\t\tcase 'sender-initials': // 7.3.6.4\n\t\t\tcase 'sender-title': // 7.3.6.5\n\t\t\tcase 'sender-position': // 7.3.6.6\n\t\t\tcase 'sender-email': // 7.3.6.7\n\t\t\tcase 'sender-phone-private': // 7.3.6.8\n\t\t\tcase 'sender-fax': // 7.3.6.9\n\t\t\tcase 'sender-company': // 7.3.6.10\n\t\t\tcase 'sender-phone-work': // 7.3.6.11\n\t\t\tcase 'sender-street': // 7.3.6.12\n\t\t\tcase 'sender-city': // 7.3.6.13\n\t\t\tcase 'sender-postal-code': // 7.3.6.14\n\t\t\tcase 'sender-country': // 7.3.6.15\n\t\t\tcase 'sender-state-or-province': // 7.3.6.16\n\t\t\tcase 'author-name': // 7.3.7.1\n\t\t\tcase 'author-initials': // 7.3.7.2\n\t\t\tcase 'chapter': // 7.3.8\n\t\t\tcase 'file-name': // 7.3.9\n\t\t\tcase 'template-name': // 7.3.9\n\t\t\tcase 'sheet-name': // 7.3.9\n\t\t\t\tbreak;\n\n\t\t\tcase 'event-listener':\n\t\t\t\tbreak;\n\t\t\t/* TODO: FODS Properties */\n\t\t\tcase 'initial-creator':\n\t\t\tcase 'creation-date':\n\t\t\tcase 'print-date':\n\t\t\tcase 'generator':\n\t\t\tcase 'document-statistic':\n\t\t\tcase 'user-defined':\n\t\t\tcase 'editing-duration':\n\t\t\tcase 'editing-cycles':\n\t\t\t\tbreak;\n\n\t\t\t/* TODO: FODS Config */\n\t\t\tcase 'config-item':\n\t\t\t\tbreak;\n\n\t\t\t/* TODO: style tokens */\n\t\t\tcase 'page-number': break; // TODO <text:page-number>\n\t\t\tcase 'page-count': break; // TODO <text:page-count>\n\t\t\tcase 'time': break; // TODO <text:time>\n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 <table:\n\t\t\tcase 'detective': break; // 9.3.2 <table:\n\t\t\tcase 'operation': break; // 9.3.3 <table:\n\t\t\tcase 'highlighted-range': break; // 9.3.4 <table:\n\n\t\t\t/* 9.6 Data Pilot Tables <table: */\n\t\t\tcase 'data-pilot-table': // 9.6.3\n\t\t\tcase 'source-cell-range': // 9.6.5\n\t\t\tcase 'source-service': // 9.6.6\n\t\t\tcase 'data-pilot-field': // 9.6.7\n\t\t\tcase 'data-pilot-level': // 9.6.8\n\t\t\tcase 'data-pilot-subtotals': // 9.6.9\n\t\t\tcase 'data-pilot-subtotal': // 9.6.10\n\t\t\tcase 'data-pilot-members': // 9.6.11\n\t\t\tcase 'data-pilot-member': // 9.6.12\n\t\t\tcase 'data-pilot-display-info': // 9.6.13\n\t\t\tcase 'data-pilot-sort-info': // 9.6.14\n\t\t\tcase 'data-pilot-layout-info': // 9.6.15\n\t\t\tcase 'data-pilot-field-reference': // 9.6.16\n\t\t\tcase 'data-pilot-groups': // 9.6.17\n\t\t\tcase 'data-pilot-group': // 9.6.18\n\t\t\tcase 'data-pilot-group-member': // 9.6.19\n\t\t\t\tbreak;\n\n\t\t\t/* 10.3 Drawing Shapes */\n\t\t\tcase 'rect': // 10.3.2\n\t\t\t\tbreak;\n\n\t\t\t/* 14.6 DDE Connections */\n\t\t\tcase 'dde-connection-decls': // 14.6.2 <text:\n\t\t\tcase 'dde-connection-decl': // 14.6.3 <text:\n\t\t\tcase 'dde-link': // 14.6.4 <table:\n\t\t\tcase 'dde-source': // 14.6.5 <office:\n\t\t\t\tbreak;\n\n\t\t\tcase 'properties': break; // 13.7 <form:properties>\n\t\t\tcase 'property': break; // 13.8 <form:property>\n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // <table:\n\t\t\tcase 'office-document-common-attrs': break; // bare\n\t\t\tdefault: switch(Rn[2]) {\n\t\t\t\tcase 'dc:':       // TODO: properties\n\t\t\t\tcase 'calcext:':  // ignore undocumented extensions\n\t\t\t\tcase 'loext:':    // ignore undocumented extensions\n\t\t\t\tcase 'ooo:':      // ignore undocumented extensions\n\t\t\t\tcase 'chartooo:': // ignore undocumented extensions\n\t\t\t\tcase 'draw:':     // TODO: drawing\n\t\t\t\tcase 'style:':    // TODO: styles\n\t\t\t\tcase 'chart:':    // TODO: charts\n\t\t\t\tcase 'form:':     // TODO: forms\n\t\t\t\tcase 'uof:':      // TODO: uof\n\t\t\t\tcase '表:':       // TODO: uof\n\t\t\t\tcase '字:':       // TODO: uof\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts.WTF) throw new Error(Rn);\n\t\t\t}\n\t\t}\n\t\tvar out/*:Workbook*/ = ({\n\t\t\tSheets: Sheets,\n\t\t\tSheetNames: SheetNames,\n\t\t\tWorkbook: WB\n\t\t}/*:any*/);\n\t\tif(opts.bookSheets) delete /*::(*/out/*:: :any)*/.Sheets;\n\t\treturn out;\n}\n\nfunction parse_ods(zip/*:ZIPFile*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\topts = opts || ({}/*:any*/);\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'), opts);\n\tvar content = getzipstr(zip, 'content.xml');\n\tif(!content) throw new Error(\"Missing content.xml in ODS / UOF file\");\n\tvar wb = parse_content_xml(utf8read(content), opts);\n\tif(safegetzipfile(zip, 'meta.xml')) wb.Props = parse_core_props(getzipdata(zip, 'meta.xml'));\n\treturn wb;\n}\nfunction parse_fods(data/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treturn parse_content_xml(data, opts);\n}\n\n/* OpenDocument */\nvar write_styles_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\tvar master_styles = [\n\t\t'<office:master-styles>',\n\t\t\t'<style:master-page style:name=\"mp1\" style:page-layout-name=\"mp1\">',\n\t\t\t\t'<style:header/>',\n\t\t\t\t'<style:header-left style:display=\"false\"/>',\n\t\t\t\t'<style:footer/>',\n\t\t\t\t'<style:footer-left style:display=\"false\"/>',\n\t\t\t'</style:master-page>',\n\t\t'</office:master-styles>'\n\t].join(\"\");\n\n\tvar payload = '<office:document-styles ' + wxt_helper({\n\t\t'xmlns:office':   \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t'xmlns:table':    \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t'xmlns:style':    \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t'xmlns:text':     \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t'xmlns:draw':     \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t'xmlns:fo':       \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t'xmlns:xlink':    \"http://www.w3.org/1999/xlink\",\n\t\t'xmlns:dc':       \"http://purl.org/dc/elements/1.1/\",\n\t\t'xmlns:number':   \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t'xmlns:svg':      \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t'xmlns:of':       \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t'office:version': \"1.2\"\n\t}) + '>' + master_styles + '</office:document-styles>';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/  +/g, function($$){return '<text:s text:c=\"'+$$.length+'\"/>';})\n\t\t\t.replace(/\\t/g, \"<text:tab/>\")\n\t\t\t.replace(/\\n/g, \"</text:p><text:p>\")\n\t\t\t.replace(/^ /, \"<text:s/>\").replace(/ $/, \"<text:s/>\");\n\t};\n\n\tvar null_cell_xml = '          <table:table-cell />\\n';\n\tvar covered_cell_xml = '          <table:covered-table-cell/>\\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*//*::, opts*/)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array<string>*/ = [];\n\t\to.push('      <table:table table:name=\"' + escapexml(wb.SheetNames[i]) + '\" table:style-name=\"ta1\">\\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array<Range>*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push('        <table:table-column' + (ws[\"!cols\"][C] ? ' table:style-name=\"co' + ws[\"!cols\"][C].ods + '\"' : '') + '></table:table-column>\\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push('        <table:table-row' + H + '></table:table-row>\\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push('        <table:table-row' + H + '>\\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] =    (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] =    (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&amp;\")});\n\t\t\t\t}\n\t\t\t\to.push('          ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push('        </table:table-row>\\n');\n\t\t}\n\t\to.push('      </table:table>\\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array<string>*/, wb) {\n\t\to.push(' <office:automatic-styles>\\n');\n\n\t\to.push('  <number:date-style style:name=\"N37\" number:automatic-order=\"true\">\\n');\n\t\to.push('   <number:month number:style=\"long\"/>\\n');\n\t\to.push('   <number:text>/</number:text>\\n');\n\t\to.push('   <number:day number:style=\"long\"/>\\n');\n\t\to.push('   <number:text>/</number:text>\\n');\n\t\to.push('   <number:year/>\\n');\n\t\to.push('  </number:date-style>\\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push('  <style:style style:name=\"co' + cidx + '\" style:family=\"table-column\">\\n');\n\t\t\t\t\to.push('   <style:table-column-properties fo:break-before=\"auto\" style:column-width=\"' + w + '\"/>\\n');\n\t\t\t\t\to.push('  </style:style>\\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push('  <style:style style:name=\"ro' + ridx + '\" style:family=\"table-row\">\\n');\n\t\t\t\t\to.push('   <style:table-row-properties fo:break-before=\"auto\" style:row-height=\"' + h + '\"/>\\n');\n\t\t\t\t\to.push('  </style:style>\\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push('  <style:style style:name=\"ta1\" style:family=\"table\" style:master-page-name=\"mp1\">\\n');\n\t\to.push('   <style:table-properties table:display=\"true\" style:writing-mode=\"lr-tb\"/>\\n');\n\t\to.push('  </style:style>\\n');\n\n\t\t/* table cells, text */\n\t\to.push('  <style:style style:name=\"ce1\" style:family=\"table-cell\" style:parent-style-name=\"Default\" style:data-style-name=\"N37\"/>\\n');\n\n\t\t/* page-layout */\n\n\t\to.push(' </office:automatic-styles>\\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office':       \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table':        \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style':        \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text':         \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw':         \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo':           \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink':        \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc':           \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta':         \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number':       \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg':          \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart':        \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d':         \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math':         \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form':         \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script':       \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo':          \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow':         \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc':         \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom':          \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms':       \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd':          \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi':          \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet':        \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt':          \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of':           \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml':        \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl':        \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo':     \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo':      \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext':      \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext':        \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field':        \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx':        \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t':        \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version':     \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config':    \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('<office:document' + attr + fods + '>\\n');\n\t\t\to.push(write_meta_ods().replace(/office:document-meta/g, \"office:meta\"));\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('<office:document-content' + attr  + '>\\n');\n\t\t// o.push('  <office:scripts/>\\n');\n\t\twrite_automatic_styles_ods(o, wb);\n\t\to.push('  <office:body>\\n');\n\t\to.push('    <office:spreadsheet>\\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push('    </office:spreadsheet>\\n');\n\t\to.push('  </office:body>\\n');\n\t\tif(opts.bookType == \"fods\") o.push('</office:document>');\n\t\telse o.push('</office:document-content>');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array<Array<string> >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nfunction u8_to_dataview(array) {\n  return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n  return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n  return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8contains(body, search) {\n  outer:\n    for (var L = 0; L <= body.length - search.length; ++L) {\n      for (var j = 0; j < search.length; ++j)\n        if (body[L + j] != search[j])\n          continue outer;\n      return true;\n    }\n  return false;\n}\nfunction u8concat(u8a) {\n  var len = u8a.reduce(function(acc, x) {\n    return acc + x.length;\n  }, 0);\n  var out = new Uint8Array(len);\n  var off = 0;\n  u8a.forEach(function(u8) {\n    out.set(u8, off);\n    off += u8.length;\n  });\n  return out;\n}\nfunction popcnt(x) {\n  x -= x >> 1 & 1431655765;\n  x = (x & 858993459) + (x >> 2 & 858993459);\n  return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n  var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n  var mantissa = buf[offset + 14] & 1;\n  for (var j = offset + 13; j >= offset; --j)\n    mantissa = mantissa * 256 + buf[j];\n  return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n  var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 20;\n  var mantissa = value / Math.pow(10, exp - 6176);\n  buf[offset + 15] |= exp >> 7;\n  buf[offset + 14] |= (exp & 127) << 1;\n  for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n    buf[offset + i] = mantissa & 255;\n  buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n  var l = ptr ? ptr[0] : 0;\n  var usz = buf[l] & 127;\n  varint:\n    if (buf[l++] >= 128) {\n      usz |= (buf[l] & 127) << 7;\n      if (buf[l++] < 128)\n        break varint;\n      usz |= (buf[l] & 127) << 14;\n      if (buf[l++] < 128)\n        break varint;\n      usz |= (buf[l] & 127) << 21;\n      if (buf[l++] < 128)\n        break varint;\n      usz += (buf[l] & 127) * Math.pow(2, 28);\n      ++l;\n      if (buf[l++] < 128)\n        break varint;\n      usz += (buf[l] & 127) * Math.pow(2, 35);\n      ++l;\n      if (buf[l++] < 128)\n        break varint;\n      usz += (buf[l] & 127) * Math.pow(2, 42);\n      ++l;\n      if (buf[l++] < 128)\n        break varint;\n    }\n  if (ptr)\n    ptr[0] = l;\n  return usz;\n}\nfunction write_varint49(v) {\n  var usz = new Uint8Array(7);\n  usz[0] = v & 127;\n  var L = 1;\n  sz:\n    if (v > 127) {\n      usz[L - 1] |= 128;\n      usz[L] = v >> 7 & 127;\n      ++L;\n      if (v <= 16383)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v >> 14 & 127;\n      ++L;\n      if (v <= 2097151)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v >> 21 & 127;\n      ++L;\n      if (v <= 268435455)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v / 256 >>> 21 & 127;\n      ++L;\n      if (v <= 34359738367)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v / 65536 >>> 21 & 127;\n      ++L;\n      if (v <= 4398046511103)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v / 16777216 >>> 21 & 127;\n      ++L;\n    }\n  return usz.slice(0, L);\n}\nfunction varint_to_i32(buf) {\n  var l = 0, i32 = buf[l] & 127;\n  varint:\n    if (buf[l++] >= 128) {\n      i32 |= (buf[l] & 127) << 7;\n      if (buf[l++] < 128)\n        break varint;\n      i32 |= (buf[l] & 127) << 14;\n      if (buf[l++] < 128)\n        break varint;\n      i32 |= (buf[l] & 127) << 21;\n      if (buf[l++] < 128)\n        break varint;\n      i32 |= (buf[l] & 127) << 28;\n    }\n  return i32;\n}\nfunction parse_shallow(buf) {\n  var out = [], ptr = [0];\n  while (ptr[0] < buf.length) {\n    var off = ptr[0];\n    var num = parse_varint49(buf, ptr);\n    var type = num & 7;\n    num = Math.floor(num / 8);\n    var len = 0;\n    var res;\n    if (num == 0)\n      break;\n    switch (type) {\n      case 0:\n        {\n          var l = ptr[0];\n          while (buf[ptr[0]++] >= 128)\n            ;\n          res = buf.slice(l, ptr[0]);\n        }\n        break;\n      case 5:\n        len = 4;\n        res = buf.slice(ptr[0], ptr[0] + len);\n        ptr[0] += len;\n        break;\n      case 1:\n        len = 8;\n        res = buf.slice(ptr[0], ptr[0] + len);\n        ptr[0] += len;\n        break;\n      case 2:\n        len = parse_varint49(buf, ptr);\n        res = buf.slice(ptr[0], ptr[0] + len);\n        ptr[0] += len;\n        break;\n      case 3:\n      case 4:\n      default:\n        throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n    }\n    var v = { data: res, type: type };\n    if (out[num] == null)\n      out[num] = [v];\n    else\n      out[num].push(v);\n  }\n  return out;\n}\nfunction write_shallow(proto) {\n  var out = [];\n  proto.forEach(function(field, idx) {\n    field.forEach(function(item) {\n      if (!item.data)\n        return;\n      out.push(write_varint49(idx * 8 + item.type));\n      if (item.type == 2)\n        out.push(write_varint49(item.data.length));\n      out.push(item.data);\n    });\n  });\n  return u8concat(out);\n}\nfunction mappa(data, cb) {\n  return (data == null ? void 0 : data.map(function(d) {\n    return cb(d.data);\n  })) || [];\n}\nfunction parse_iwa_file(buf) {\n  var _a;\n  var out = [], ptr = [0];\n  while (ptr[0] < buf.length) {\n    var len = parse_varint49(buf, ptr);\n    var ai = parse_shallow(buf.slice(ptr[0], ptr[0] + len));\n    ptr[0] += len;\n    var res = {\n      id: varint_to_i32(ai[1][0].data),\n      messages: []\n    };\n    ai[2].forEach(function(b) {\n      var mi = parse_shallow(b.data);\n      var fl = varint_to_i32(mi[3][0].data);\n      res.messages.push({\n        meta: mi,\n        data: buf.slice(ptr[0], ptr[0] + fl)\n      });\n      ptr[0] += fl;\n    });\n    if ((_a = ai[3]) == null ? void 0 : _a[0])\n      res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n    out.push(res);\n  }\n  return out;\n}\nfunction write_iwa_file(ias) {\n  var bufs = [];\n  ias.forEach(function(ia) {\n    var ai = [];\n    ai[1] = [{ data: write_varint49(ia.id), type: 0 }];\n    ai[2] = [];\n    if (ia.merge != null)\n      ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n    var midata = [];\n    ia.messages.forEach(function(mi) {\n      midata.push(mi.data);\n      mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n      ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n    });\n    var aipayload = write_shallow(ai);\n    bufs.push(write_varint49(aipayload.length));\n    bufs.push(aipayload);\n    midata.forEach(function(mid) {\n      return bufs.push(mid);\n    });\n  });\n  return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n  if (type != 0)\n    throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n  var ptr = [0];\n  var usz = parse_varint49(buf, ptr);\n  var chunks = [];\n  while (ptr[0] < buf.length) {\n    var tag = buf[ptr[0]] & 3;\n    if (tag == 0) {\n      var len = buf[ptr[0]++] >> 2;\n      if (len < 60)\n        ++len;\n      else {\n        var c = len - 59;\n        len = buf[ptr[0]];\n        if (c > 1)\n          len |= buf[ptr[0] + 1] << 8;\n        if (c > 2)\n          len |= buf[ptr[0] + 2] << 16;\n        if (c > 3)\n          len |= buf[ptr[0] + 3] << 24;\n        len >>>= 0;\n        len++;\n        ptr[0] += c;\n      }\n      chunks.push(buf.slice(ptr[0], ptr[0] + len));\n      ptr[0] += len;\n      continue;\n    } else {\n      var offset = 0, length = 0;\n      if (tag == 1) {\n        length = (buf[ptr[0]] >> 2 & 7) + 4;\n        offset = (buf[ptr[0]++] & 224) << 3;\n        offset |= buf[ptr[0]++];\n      } else {\n        length = (buf[ptr[0]++] >> 2) + 1;\n        if (tag == 2) {\n          offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8;\n          ptr[0] += 2;\n        } else {\n          offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0;\n          ptr[0] += 4;\n        }\n      }\n      chunks = [u8concat(chunks)];\n      if (offset == 0)\n        throw new Error(\"Invalid offset 0\");\n      if (offset > chunks[0].length)\n        throw new Error(\"Invalid offset beyond length\");\n      if (length >= offset) {\n        chunks.push(chunks[0].slice(-offset));\n        length -= offset;\n        while (length >= chunks[chunks.length - 1].length) {\n          chunks.push(chunks[chunks.length - 1]);\n          length -= chunks[chunks.length - 1].length;\n        }\n      }\n      chunks.push(chunks[0].slice(-offset, -offset + length));\n    }\n  }\n  var o = u8concat(chunks);\n  if (o.length != usz)\n    throw new Error(\"Unexpected length: \".concat(o.length, \" != \").concat(usz));\n  return o;\n}\nfunction decompress_iwa_file(buf) {\n  var out = [];\n  var l = 0;\n  while (l < buf.length) {\n    var t = buf[l++];\n    var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n    l += 3;\n    out.push(parse_snappy_chunk(t, buf.slice(l, l + len)));\n    l += len;\n  }\n  if (l !== buf.length)\n    throw new Error(\"data is not a valid framed stream!\");\n  return u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n  var out = [];\n  var l = 0;\n  while (l < buf.length) {\n    var c = Math.min(buf.length - l, 268435455);\n    var frame = new Uint8Array(4);\n    out.push(frame);\n    var usz = write_varint49(c);\n    var L = usz.length;\n    out.push(usz);\n    if (c <= 60) {\n      L++;\n      out.push(new Uint8Array([c - 1 << 2]));\n    } else if (c <= 256) {\n      L += 2;\n      out.push(new Uint8Array([240, c - 1 & 255]));\n    } else if (c <= 65536) {\n      L += 3;\n      out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n    } else if (c <= 16777216) {\n      L += 4;\n      out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n    } else if (c <= 4294967296) {\n      L += 5;\n      out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n    }\n    out.push(buf.slice(l, l + c));\n    L += c;\n    frame[0] = 0;\n    frame[1] = L & 255;\n    frame[2] = L >> 8 & 255;\n    frame[3] = L >> 16 & 255;\n    l += c;\n  }\n  return u8concat(out);\n}\nfunction parse_old_storage(buf, sst, rsst, v) {\n  var dv = u8_to_dataview(buf);\n  var flags = dv.getUint32(4, true);\n  var data_offset = (v > 1 ? 12 : 8) + popcnt(flags & (v > 1 ? 3470 : 398)) * 4;\n  var ridx = -1, sidx = -1, ieee = NaN, dt = new Date(2001, 0, 1);\n  if (flags & 512) {\n    ridx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n  data_offset += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n  if (flags & 16) {\n    sidx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n  if (flags & 32) {\n    ieee = dv.getFloat64(data_offset, true);\n    data_offset += 8;\n  }\n  if (flags & 64) {\n    dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n    data_offset += 8;\n  }\n  var ret;\n  switch (buf[2]) {\n    case 0:\n      break;\n    case 2:\n      ret = { t: \"n\", v: ieee };\n      break;\n    case 3:\n      ret = { t: \"s\", v: sst[sidx] };\n      break;\n    case 5:\n      ret = { t: \"d\", v: dt };\n      break;\n    case 6:\n      ret = { t: \"b\", v: ieee > 0 };\n      break;\n    case 7:\n      ret = { t: \"n\", v: ieee / 86400 };\n      break;\n    case 8:\n      ret = { t: \"e\", v: 0 };\n      break;\n    case 9:\n      {\n        if (ridx > -1)\n          ret = { t: \"s\", v: rsst[ridx] };\n        else if (sidx > -1)\n          ret = { t: \"s\", v: sst[sidx] };\n        else if (!isNaN(ieee))\n          ret = { t: \"n\", v: ieee };\n        else\n          throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n      }\n      break;\n    default:\n      throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n  }\n  return ret;\n}\nfunction parse_new_storage(buf, sst, rsst) {\n  var dv = u8_to_dataview(buf);\n  var flags = dv.getUint32(8, true);\n  var data_offset = 12;\n  var ridx = -1, sidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);\n  if (flags & 1) {\n    d128 = readDecimal128LE(buf, data_offset);\n    data_offset += 16;\n  }\n  if (flags & 2) {\n    ieee = dv.getFloat64(data_offset, true);\n    data_offset += 8;\n  }\n  if (flags & 4) {\n    dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n    data_offset += 8;\n  }\n  if (flags & 8) {\n    sidx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n  if (flags & 16) {\n    ridx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n  var ret;\n  switch (buf[1]) {\n    case 0:\n      break;\n    case 2:\n      ret = { t: \"n\", v: d128 };\n      break;\n    case 3:\n      ret = { t: \"s\", v: sst[sidx] };\n      break;\n    case 5:\n      ret = { t: \"d\", v: dt };\n      break;\n    case 6:\n      ret = { t: \"b\", v: ieee > 0 };\n      break;\n    case 7:\n      ret = { t: \"n\", v: ieee / 86400 };\n      break;\n    case 8:\n      ret = { t: \"e\", v: 0 };\n      break;\n    case 9:\n      {\n        if (ridx > -1)\n          ret = { t: \"s\", v: rsst[ridx] };\n        else\n          throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n      }\n      break;\n    case 10:\n      ret = { t: \"n\", v: d128 };\n      break;\n    default:\n      throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n  }\n  return ret;\n}\nfunction write_new_storage(cell, sst) {\n  var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n  out[0] = 5;\n  switch (cell.t) {\n    case \"n\":\n      out[1] = 2;\n      writeDecimal128LE(out, l, cell.v);\n      flags |= 1;\n      l += 16;\n      break;\n    case \"b\":\n      out[1] = 6;\n      dv.setFloat64(l, cell.v ? 1 : 0, true);\n      flags |= 2;\n      l += 8;\n      break;\n    case \"s\":\n      if (sst.indexOf(cell.v) == -1)\n        throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n      out[1] = 3;\n      dv.setUint32(l, sst.indexOf(cell.v), true);\n      flags |= 8;\n      l += 4;\n      break;\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n  dv.setUint32(8, flags, true);\n  return out.slice(0, l);\n}\nfunction write_old_storage(cell, sst) {\n  var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n  out[0] = 3;\n  switch (cell.t) {\n    case \"n\":\n      out[2] = 2;\n      dv.setFloat64(l, cell.v, true);\n      flags |= 32;\n      l += 8;\n      break;\n    case \"b\":\n      out[2] = 6;\n      dv.setFloat64(l, cell.v ? 1 : 0, true);\n      flags |= 32;\n      l += 8;\n      break;\n    case \"s\":\n      if (sst.indexOf(cell.v) == -1)\n        throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n      out[2] = 3;\n      dv.setUint32(l, sst.indexOf(cell.v), true);\n      flags |= 16;\n      l += 4;\n      break;\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n  dv.setUint32(4, flags, true);\n  return out.slice(0, l);\n}\nfunction parse_cell_storage(buf, sst, rsst) {\n  switch (buf[0]) {\n    case 0:\n    case 1:\n    case 2:\n    case 3:\n      return parse_old_storage(buf, sst, rsst, buf[0]);\n    case 5:\n      return parse_new_storage(buf, sst, rsst);\n    default:\n      throw new Error(\"Unsupported payload version \".concat(buf[0]));\n  }\n}\nfunction parse_TSP_Reference(buf) {\n  var pb = parse_shallow(buf);\n  return parse_varint49(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n  var out = [];\n  out[1] = [{ type: 0, data: write_varint49(idx) }];\n  return write_shallow(out);\n}\nfunction parse_TST_TableDataList(M, root) {\n  var pb = parse_shallow(root.data);\n  var type = varint_to_i32(pb[1][0].data);\n  var entries = pb[3];\n  var data = [];\n  (entries || []).forEach(function(entry) {\n    var le = parse_shallow(entry.data);\n    var key = varint_to_i32(le[1][0].data) >>> 0;\n    switch (type) {\n      case 1:\n        data[key] = u8str(le[3][0].data);\n        break;\n      case 8:\n        {\n          var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n          var rtp = parse_shallow(rt.data);\n          var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n          var mtype = varint_to_i32(rtpref.meta[1][0].data);\n          if (mtype != 2001)\n            throw new Error(\"2000 unexpected reference to \".concat(mtype));\n          var tswpsa = parse_shallow(rtpref.data);\n          data[key] = tswpsa[3].map(function(x) {\n            return u8str(x.data);\n          }).join(\"\");\n        }\n        break;\n    }\n  });\n  return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n  var pb = parse_shallow(u8);\n  var R = varint_to_i32(pb[1][0].data) >>> 0;\n  var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n  var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n  var used_storage_u8, used_storage;\n  if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n    used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n    used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n  } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n    used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n    used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n  } else\n    throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n  var width = wide_offsets ? 4 : 1;\n  var used_storage_offsets = u8_to_dataview(used_storage_u8);\n  var offsets = [];\n  for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n    var off = used_storage_offsets.getUint16(C * 2, true);\n    if (off < 65535)\n      offsets.push([C, off]);\n  }\n  if (offsets.length != cnt)\n    throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n  var cells = [];\n  for (C = 0; C < offsets.length - 1; ++C)\n    cells[offsets[C][0]] = used_storage.subarray(offsets[C][1] * width, offsets[C + 1][1] * width);\n  if (offsets.length >= 1)\n    cells[offsets[offsets.length - 1][0]] = used_storage.subarray(offsets[offsets.length - 1][1] * width);\n  return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n  var _a;\n  var pb = parse_shallow(root.data);\n  var storage = ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) ? varint_to_i32(pb[7][0].data) >>> 0 > 0 ? 1 : 0 : -1;\n  var ri = mappa(pb[5], function(u8) {\n    return parse_TST_TileRowInfo(u8, storage);\n  });\n  return {\n    nrows: varint_to_i32(pb[4][0].data) >>> 0,\n    data: ri.reduce(function(acc, x) {\n      if (!acc[x.R])\n        acc[x.R] = [];\n      x.cells.forEach(function(cell, C) {\n        if (acc[x.R][C])\n          throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n        acc[x.R][C] = cell;\n      });\n      return acc;\n    }, [])\n  };\n}\nfunction parse_TST_TableModelArchive(M, root, ws) {\n  var _a;\n  var pb = parse_shallow(root.data);\n  var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n  range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n  if (range.e.r < 0)\n    throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n  range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n  if (range.e.c < 0)\n    throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n  ws[\"!ref\"] = encode_range(range);\n  var store = parse_shallow(pb[4][0].data);\n  var sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n  var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]) : [];\n  var tile = parse_shallow(store[3][0].data);\n  var _R = 0;\n  tile[1].forEach(function(t) {\n    var tl = parse_shallow(t.data);\n    var ref = M[parse_TSP_Reference(tl[2][0].data)][0];\n    var mtype = varint_to_i32(ref.meta[1][0].data);\n    if (mtype != 6002)\n      throw new Error(\"6001 unexpected reference to \".concat(mtype));\n    var _tile = parse_TST_Tile(M, ref);\n    _tile.data.forEach(function(row, R) {\n      row.forEach(function(buf, C) {\n        var addr = encode_cell({ r: _R + R, c: C });\n        var res = parse_cell_storage(buf, sst, rsst);\n        if (res)\n          ws[addr] = res;\n      });\n    });\n    _R += _tile.nrows;\n  });\n}\nfunction parse_TST_TableInfoArchive(M, root) {\n  var pb = parse_shallow(root.data);\n  var out = { \"!ref\": \"A1\" };\n  var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n  var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n  if (mtype != 6001)\n    throw new Error(\"6000 unexpected reference to \".concat(mtype));\n  parse_TST_TableModelArchive(M, tableref[0], out);\n  return out;\n}\nfunction parse_TN_SheetArchive(M, root) {\n  var _a;\n  var pb = parse_shallow(root.data);\n  var out = {\n    name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n    sheets: []\n  };\n  var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n  shapeoffs.forEach(function(off) {\n    M[off].forEach(function(m) {\n      var mtype = varint_to_i32(m.meta[1][0].data);\n      if (mtype == 6e3)\n        out.sheets.push(parse_TST_TableInfoArchive(M, m));\n    });\n  });\n  return out;\n}\nfunction parse_TN_DocumentArchive(M, root) {\n  var out = book_new();\n  var pb = parse_shallow(root.data);\n  var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n  sheetoffs.forEach(function(off) {\n    M[off].forEach(function(m) {\n      var mtype = varint_to_i32(m.meta[1][0].data);\n      if (mtype == 2) {\n        var root2 = parse_TN_SheetArchive(M, m);\n        root2.sheets.forEach(function(sheet, idx) {\n          book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n        });\n      }\n    });\n  });\n  if (out.SheetNames.length == 0)\n    throw new Error(\"Empty NUMBERS file\");\n  return out;\n}\nfunction parse_numbers_iwa(cfb) {\n  var _a, _b, _c, _d;\n  var M = {}, indices = [];\n  cfb.FullPaths.forEach(function(p) {\n    if (p.match(/\\.iwpv2/))\n      throw new Error(\"Unsupported password protection\");\n  });\n  cfb.FileIndex.forEach(function(s) {\n    if (!s.name.match(/\\.iwa$/))\n      return;\n    var o;\n    try {\n      o = decompress_iwa_file(s.content);\n    } catch (e) {\n      return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n    }\n    var packets;\n    try {\n      packets = parse_iwa_file(o);\n    } catch (e) {\n      return console.log(\"## \" + (e.message || e));\n    }\n    packets.forEach(function(packet) {\n      M[packet.id] = packet.messages;\n      indices.push(packet.id);\n    });\n  });\n  if (!indices.length)\n    throw new Error(\"File has no messages\");\n  var docroot = ((_d = (_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.meta) == null ? void 0 : _c[1]) == null ? void 0 : _d[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n  if (!docroot)\n    indices.forEach(function(idx) {\n      M[idx].forEach(function(iwam) {\n        var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n        if (mtype == 1) {\n          if (!docroot)\n            docroot = iwam;\n          else\n            throw new Error(\"Document has multiple roots\");\n        }\n      });\n    });\n  if (!docroot)\n    throw new Error(\"Cannot find Document root\");\n  return parse_TN_DocumentArchive(M, docroot);\n}\nfunction write_tile_row(tri, data, SST) {\n  var _a, _b, _c, _d;\n  if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n    throw \"Mutation only works on post-BNC storages!\";\n  var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;\n  if (wide_offsets)\n    throw \"Math only works with normal offsets\";\n  var cnt = 0;\n  var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n  var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n  for (var C = 0; C < data.length; ++C) {\n    if (data[C] == null) {\n      dv.setUint16(C * 2, 65535, true);\n      _dv.setUint16(C * 2, 65535);\n      continue;\n    }\n    dv.setUint16(C * 2, last_offset, true);\n    _dv.setUint16(C * 2, _last_offset, true);\n    var celload, _celload;\n    switch (typeof data[C]) {\n      case \"string\":\n        celload = write_new_storage({ t: \"s\", v: data[C] }, SST);\n        _celload = write_old_storage({ t: \"s\", v: data[C] }, SST);\n        break;\n      case \"number\":\n        celload = write_new_storage({ t: \"n\", v: data[C] }, SST);\n        _celload = write_old_storage({ t: \"n\", v: data[C] }, SST);\n        break;\n      case \"boolean\":\n        celload = write_new_storage({ t: \"b\", v: data[C] }, SST);\n        _celload = write_old_storage({ t: \"b\", v: data[C] }, SST);\n        break;\n      default:\n        throw new Error(\"Unsupported value \" + data[C]);\n    }\n    cell_storage.push(celload);\n    last_offset += celload.length;\n    _cell_storage.push(_celload);\n    _last_offset += _celload.length;\n    ++cnt;\n  }\n  tri[2][0].data = write_varint49(cnt);\n  for (; C < tri[7][0].data.length / 2; ++C) {\n    dv.setUint16(C * 2, 65535, true);\n    _dv.setUint16(C * 2, 65535, true);\n  }\n  tri[6][0].data = u8concat(cell_storage);\n  tri[3][0].data = u8concat(_cell_storage);\n  return cnt;\n}\nfunction write_numbers_iwa(wb, opts) {\n  if (!opts || !opts.numbers)\n    throw new Error(\"Must pass a `numbers` option -- check the README\");\n  var ws = wb.Sheets[wb.SheetNames[0]];\n  if (wb.SheetNames.length > 1)\n    console.error(\"The Numbers writer currently writes only the first table\");\n  var range = decode_range(ws[\"!ref\"]);\n  range.s.r = range.s.c = 0;\n  var trunc = false;\n  if (range.e.c > 9) {\n    trunc = true;\n    range.e.c = 9;\n  }\n  if (range.e.r > 49) {\n    trunc = true;\n    range.e.r = 49;\n  }\n  if (trunc)\n    console.error(\"The Numbers writer is currently limited to \".concat(encode_range(range)));\n  var data = sheet_to_json(ws, { range: range, header: 1 });\n  var SST = [\"~Sh33tJ5~\"];\n  data.forEach(function(row) {\n    return row.forEach(function(cell) {\n      if (typeof cell == \"string\")\n        SST.push(cell);\n    });\n  });\n  var dependents = {};\n  var indices = [];\n  var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n  cfb.FileIndex.map(function(fi, idx) {\n    return [fi, cfb.FullPaths[idx]];\n  }).forEach(function(row) {\n    var fi = row[0], fp = row[1];\n    if (fi.type != 2)\n      return;\n    if (!fi.name.match(/\\.iwa/))\n      return;\n    var old_content = fi.content;\n    var raw1 = decompress_iwa_file(old_content);\n    var x2 = parse_iwa_file(raw1);\n    x2.forEach(function(packet2) {\n      indices.push(packet2.id);\n      dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };\n    });\n  });\n  indices.sort(function(x2, y2) {\n    return x2 - y2;\n  });\n  var indices_varint = indices.filter(function(x2) {\n    return x2 > 1;\n  }).map(function(x2) {\n    return [x2, write_varint49(x2)];\n  });\n  cfb.FileIndex.map(function(fi, idx) {\n    return [fi, cfb.FullPaths[idx]];\n  }).forEach(function(row) {\n    var fi = row[0], fp = row[1];\n    if (!fi.name.match(/\\.iwa/))\n      return;\n    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));\n    x2.forEach(function(ia) {\n      ia.messages.forEach(function(m) {\n        indices_varint.forEach(function(ivi) {\n          if (ia.messages.some(function(mess) {\n            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);\n          })) {\n            dependents[ivi[0]].deps.push(ia.id);\n          }\n        });\n      });\n    });\n  });\n  function get_unique_msgid() {\n    for (var i = 927262; i < 2e6; ++i)\n      if (!dependents[i])\n        return i;\n    throw new Error(\"Too many messages\");\n  }\n  var entry = CFB.find(cfb, dependents[1].location);\n  var x = parse_iwa_file(decompress_iwa_file(entry.content));\n  var docroot;\n  for (var xi = 0; xi < x.length; ++xi) {\n    var packet = x[xi];\n    if (packet.id == 1)\n      docroot = packet;\n  }\n  var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n  entry = CFB.find(cfb, dependents[sheetrootref].location);\n  x = parse_iwa_file(decompress_iwa_file(entry.content));\n  for (xi = 0; xi < x.length; ++xi) {\n    packet = x[xi];\n    if (packet.id == sheetrootref)\n      docroot = packet;\n  }\n  sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n  entry = CFB.find(cfb, dependents[sheetrootref].location);\n  x = parse_iwa_file(decompress_iwa_file(entry.content));\n  for (xi = 0; xi < x.length; ++xi) {\n    packet = x[xi];\n    if (packet.id == sheetrootref)\n      docroot = packet;\n  }\n  sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n  entry = CFB.find(cfb, dependents[sheetrootref].location);\n  x = parse_iwa_file(decompress_iwa_file(entry.content));\n  for (xi = 0; xi < x.length; ++xi) {\n    packet = x[xi];\n    if (packet.id == sheetrootref)\n      docroot = packet;\n  }\n  var pb = parse_shallow(docroot.messages[0].data);\n  {\n    pb[6][0].data = write_varint49(range.e.r + 1);\n    pb[7][0].data = write_varint49(range.e.c + 1);\n    var cruidsref = parse_TSP_Reference(pb[46][0].data);\n    var oldbucket = CFB.find(cfb, dependents[cruidsref].location);\n    var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n    {\n      for (var j = 0; j < _x.length; ++j) {\n        if (_x[j].id == cruidsref)\n          break;\n      }\n      if (_x[j].id != cruidsref)\n        throw \"Bad ColumnRowUIDMapArchive\";\n      var cruids = parse_shallow(_x[j].messages[0].data);\n      cruids[1] = [];\n      cruids[2] = [], cruids[3] = [];\n      for (var C = 0; C <= range.e.c; ++C) {\n        var uuid = [];\n        uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(C + 420690) }];\n        cruids[1].push({ type: 2, data: write_shallow(uuid) });\n        cruids[2].push({ type: 0, data: write_varint49(C) });\n        cruids[3].push({ type: 0, data: write_varint49(C) });\n      }\n      cruids[4] = [];\n      cruids[5] = [], cruids[6] = [];\n      for (var R = 0; R <= range.e.r; ++R) {\n        uuid = [];\n        uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(R + 726270) }];\n        cruids[4].push({ type: 2, data: write_shallow(uuid) });\n        cruids[5].push({ type: 0, data: write_varint49(R) });\n        cruids[6].push({ type: 0, data: write_varint49(R) });\n      }\n      _x[j].messages[0].data = write_shallow(cruids);\n    }\n    oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n    oldbucket.size = oldbucket.content.length;\n    delete pb[46];\n    var store = parse_shallow(pb[4][0].data);\n    {\n      store[7][0].data = write_varint49(range.e.r + 1);\n      var row_headers = parse_shallow(store[1][0].data);\n      var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);\n      oldbucket = CFB.find(cfb, dependents[row_header_ref].location);\n      _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n      {\n        if (_x[0].id != row_header_ref)\n          throw \"Bad HeaderStorageBucket\";\n        var base_bucket = parse_shallow(_x[0].messages[0].data);\n        for (R = 0; R < data.length; ++R) {\n          var _bucket = parse_shallow(base_bucket[2][0].data);\n          _bucket[1][0].data = write_varint49(R);\n          _bucket[4][0].data = write_varint49(data[R].length);\n          base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n        }\n        _x[0].messages[0].data = write_shallow(base_bucket);\n      }\n      oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n      oldbucket.size = oldbucket.content.length;\n      var col_header_ref = parse_TSP_Reference(store[2][0].data);\n      oldbucket = CFB.find(cfb, dependents[col_header_ref].location);\n      _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n      {\n        if (_x[0].id != col_header_ref)\n          throw \"Bad HeaderStorageBucket\";\n        base_bucket = parse_shallow(_x[0].messages[0].data);\n        for (C = 0; C <= range.e.c; ++C) {\n          _bucket = parse_shallow(base_bucket[2][0].data);\n          _bucket[1][0].data = write_varint49(C);\n          _bucket[4][0].data = write_varint49(range.e.r + 1);\n          base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n        }\n        _x[0].messages[0].data = write_shallow(base_bucket);\n      }\n      oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n      oldbucket.size = oldbucket.content.length;\n      var sstref = parse_TSP_Reference(store[4][0].data);\n      (function() {\n        var sentry = CFB.find(cfb, dependents[sstref].location);\n        var sx = parse_iwa_file(decompress_iwa_file(sentry.content));\n        var sstroot;\n        for (var sxi = 0; sxi < sx.length; ++sxi) {\n          var packet2 = sx[sxi];\n          if (packet2.id == sstref)\n            sstroot = packet2;\n        }\n        var sstdata = parse_shallow(sstroot.messages[0].data);\n        {\n          sstdata[3] = [];\n          var newsst = [];\n          SST.forEach(function(str, i) {\n            newsst[1] = [{ type: 0, data: write_varint49(i) }];\n            newsst[2] = [{ type: 0, data: write_varint49(1) }];\n            newsst[3] = [{ type: 2, data: stru8(str) }];\n            sstdata[3].push({ type: 2, data: write_shallow(newsst) });\n          });\n        }\n        sstroot.messages[0].data = write_shallow(sstdata);\n        var sy = write_iwa_file(sx);\n        var raw32 = compress_iwa_file(sy);\n        sentry.content = raw32;\n        sentry.size = sentry.content.length;\n      })();\n      var tile = parse_shallow(store[3][0].data);\n      {\n        var t = tile[1][0];\n        delete tile[2];\n        var tl = parse_shallow(t.data);\n        {\n          var tileref = parse_TSP_Reference(tl[2][0].data);\n          (function() {\n            var tentry = CFB.find(cfb, dependents[tileref].location);\n            var tx = parse_iwa_file(decompress_iwa_file(tentry.content));\n            var tileroot;\n            for (var sxi = 0; sxi < tx.length; ++sxi) {\n              var packet2 = tx[sxi];\n              if (packet2.id == tileref)\n                tileroot = packet2;\n            }\n            var tiledata = parse_shallow(tileroot.messages[0].data);\n            {\n              delete tiledata[6];\n              delete tile[7];\n              var rowload = new Uint8Array(tiledata[5][0].data);\n              tiledata[5] = [];\n              var cnt = 0;\n              for (var R2 = 0; R2 <= range.e.r; ++R2) {\n                var tilerow = parse_shallow(rowload);\n                cnt += write_tile_row(tilerow, data[R2], SST);\n                tilerow[1][0].data = write_varint49(R2);\n                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n              }\n              tiledata[1] = [{ type: 0, data: write_varint49(range.e.c + 1) }];\n              tiledata[2] = [{ type: 0, data: write_varint49(range.e.r + 1) }];\n              tiledata[3] = [{ type: 0, data: write_varint49(cnt) }];\n              tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];\n            }\n            tileroot.messages[0].data = write_shallow(tiledata);\n            var ty = write_iwa_file(tx);\n            var raw32 = compress_iwa_file(ty);\n            tentry.content = raw32;\n            tentry.size = tentry.content.length;\n          })();\n        }\n        t.data = write_shallow(tl);\n      }\n      store[3][0].data = write_shallow(tile);\n    }\n    pb[4][0].data = write_shallow(store);\n  }\n  docroot.messages[0].data = write_shallow(pb);\n  var y = write_iwa_file(x);\n  var raw3 = compress_iwa_file(y);\n  entry.content = raw3;\n  entry.size = entry.content.length;\n  return cfb;\n}\nfunction fix_opts_func(defaults/*:Array<Array<any> >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet':  _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart':  _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro':  _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tvar comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(opts.bookType == \"numbers\") return write_numbers_iwa(wb, opts);\n\tif(opts.bookType == \"xlsb\") return write_zip_xlsxb(wb, opts);\n\treturn write_zip_xlsx(wb, opts);\n}\n\n/* XLSX and XLSB writing are very similar.  Originally they were unified in one\n   export function.  This is horrible for tree shaking in the common case (most\n   applications need to export files in one format) so this function supports\n   both formats while write_zip_xlsx only handles XLSX */\nfunction write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\t_shapeid = 1024;\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta(f));\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\t_shapeid = 1024;\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".\" + wbext;\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".\" + wbext, RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array<number>*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array':  return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\td = $cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(RTF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array<string>*/, header/*:number*/, hdr/*:Array<any>*/, dense/*:boolean*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true;\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw && (val.t !== \"n\" || (val.t === \"n\" && o.rawNumbers !== false)) ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array<string>*/ = [];\n\tvar out/*:Array<any>*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array<string>*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array<string>*/ = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array<string>*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols/*:Array<string>*/ = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array<string>*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array<string>*/ = [], C;\n\tvar cmds/*:Array<string>*/ = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell/*:Cell*/;\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array<string>*/ = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = encode_cell({c:_C + C,r:_R + R + offset});\n\t\t\tcell = ws_get_cell_stub(ws, ref);\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\telse {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array<any>*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\t/* dense */\n\t\tif(Array.isArray(ws)) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[RC.r]) ws[RC.r] = [];\n\t\t\treturn ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nfunction book_new()/*:Workbook*/ {\n\treturn { SheetNames: [], Sheets: {} };\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0) {\n\t\tvar m = name.match(/(^.*?)(\\d+)$/);\n\t\ti = m && +m[2] || 0;\n\t\tvar root = m && m[1] || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row/*:?string*/ = \"\", cols/*:Array<string>*/ = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\to.dense = Array.isArray(ws);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"</table>\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array<string>*/ = [];\n\tvar counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n  set_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\n"],"mappings":"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ACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,KACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KACA,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJrtC,GAAM,CACF,KAEJstC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJrvC,GAAM,CACF,KAEJsvC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,SAAU,CACN,IACA,KACA,KACA,KAEJ,QAAS,CACL,IACA,IACA,MAEJ,SAAU,CACN,IACA,KACA,IACA,MAEJ,QAAS,CACL,IACA,KACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,KACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,KACA,KACA,IACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,KACA,KACA,IACA,KAEJ,QAAS,CACL,KACA,KACA,IACA,KAEJ,QAAS,CACL,KACA,IACA,KACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,IACA,KACA,KACA;AEv1CR,SAASC,EAA+BC,GACpC,IAAI1S,EAAY0S,EAAO1S;AASvB,QARkB5L,IAA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AANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,KAC7B,CEnrCA,SAASo0C,GAAiBC,EAAKC,QACT,IAAdA,IAAmBA,EAAO,IAAIphB,KAClCmhB,EAAIh+B,QAAQ,SAAU9Y,GAClB,GAAI+3B,EAAkB/3B,IAClBg4B,EAAch4B,IACd24B,EAAc34B,IACdm4B,EAAgBn4B,GAAK,CACrB,GAAIA,EAAGiB,SAAS81C,GAAQA,EAAKnsB,IAAI5qB,EAAGiB,SAAWjB,EAAGoC,KAC9C,MAAM,IAAIpD,MAAM,YAAY+R,OAAO/Q,EAAGiB,MAAO;AAEjD81C,EAAK5rB,IAAInrB,EAAGiB,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AAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,SAAU,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,MAAO,KAAM,QAAS,KAAM,UAAW,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,UAAW,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,KAAM,MAAO,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,MAAO,KAAM,KAAM,QAAS,KAAM,KAAM,MAAO,SAAU,SAAU,KAAM,MAAO,KAAM,KAAM,QAAS,QAAS,MAAO,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,UAAW,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,SAAU,KAAM,KAAM,MAAO,MAAO,KAAM,MAAO,MAAO,SAAU,MAAO,MAAO,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,WAAY,KAAM,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,QAAS,KAAM,MAAO,SAAU,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,MAAO,K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SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,SAGjB,CACIM,GAAI,CACAZ,SAAU,MACVC,UAAW,KACXK,QAAS,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,iBACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,aAAc,CACVD,SAAU,aACVC,UAAW,MAGnB,CACI,UAAW,CACPD,SAAU,cACVC,UAAW,MAGnB,CACI,cAAe,CACXD,SAAU,cACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,kBAAmB,CACfD,SAAU,kBACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,kBAAmB,CACfD,SAAU,kBACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,kBAAmB,CACfD,SAAU,kBACVC,UAAW,MAGnB,CACI,YAAa,CACTD,SAAU,YACVC,UAAW,MAGnB,CACI,QAAS,CACLD,SAAU,QACVC,UAAW,UCpjFxBsC,EAAU,CACjB,MAAO,CACH,MACA,sBACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,sBACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,MACA,MACA,MACA,sBACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJC,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJC,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJC,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,MAEJC,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,K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QAAS,QAAS,QAAS,KAAM,KAAM,SAAU,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,MAAO,KAAM,QAAS,KAAM,UAAW,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,UAAW,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,KAAM,MAAO,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,MAAO,KAAM,KAAM,QAAS,KAAM,KAAM,MAAO,SAAU,SAAU,KAAM,MAAO,KAAM,KAAM,QAAS,QAAS,MAAO,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,UAAW,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,SAAU,KAAM,KAAM,MAAO,MAAO,KAAM,MAAO,MAAO,SAAU,MAAO,MAAO,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,WAAY,KAAM,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,QAAS,KAAM,MAAO,SAAU,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,MAAO,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,QAAS,KAAM,KAAM,QAAS,KAAM,UAAW,UAAW,MAAO,KAAM,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,QAAS,QAAS,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,MAAO,KAAM,MAAO,MAAO,MAAO,WAAY,MAAO,KAAM,KAAM,UAAW,UAAW,KAAM,QAAS,QAAS,MAAO,MAAO,KAAM,MAAO,WAAY,WAAY,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,QAAS,QAAS,QAAS,KAAM,QAAS,QAAS,KAAM,UAAW,aAAc,aAAc,aAAc,UAAW,aAAc,aAAc,aAAc,KAAM,UAAW,KAAM,QAAS,QAAS,KAAM,QAAS,QAAS,QAAS,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,SAAU,KAAM,KAAM,KAAM,QAAS,KAAM,KAAM,KAAM,QAAS,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,QAAS,KAAM,UAAW,UAAW,UAAW,MAAO,WAAY,WAAY,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,QAAS,MAAO,SAAU,SAAU,MAAO,WAAY,WAAY,MAAO,KAAM,UAAW,aAAc,aAAc,aAAc,UAAW,aAAc,aAAc,aAAAh5C,EAAAvB,EAAA0B,GAAA;ACFjvJunB,sCAA+CplB,WAC/C02C,iBAUA,SAAwBtJ,GAEpB,QADoB,IAAhBA,IAAqBA,EAAS,QAC5B,gBAAiBuJ,OAEf,QADJ,IAAIA,KAAKuJ,YAAY,KAAM,CAAE5iB,sBAAuB,IAAK1wB,OAAO,KAVxE,SAA4BwgC,GACxB,IAAKA,EACD;AAEJ,IAAI8J,EAAUhmC,MAAM1T,QAAQ4vC,GAAUA,EAAS,CAACA;AAChD,OAAOuJ,KAAKuJ,YAAY/I,mBAAmBD,GAASt5C,SAAWs5C,EAAQt5C,MAC3E,CANA,CAY4BwvC,GACpB,OAAOA,KAAagK,EAAqBld,OAAO,CAACkT,GAASiK,EAA8BC,iBAAkB,WAAQxoB,CAE1H;AAjBA,IAAIsoB,EAAuBG,EAAQ,OAC/BF,EAAgCE,EAAQ,cAAA75C,EAAAvB,GAAA;ACH5CipB,sCAA+CplB,WAC/C02C,wBAAgC,EAChCA,mBAA2B,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,MAAO,KAAM,KAAM,QAAS,KAAM,KAAM,MAAO,KAAM,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,aAAAh5C,EAAAvB,EAAA0B,GAAA;ACF52CunB,sCAA+CplB,WAC/C02C,iBAsBA,SAAwBtJ,GAEpB,QADoB,IAAhBA,IAAqBA,EAAS,QAC5B,uBAAwBuJ,QArBlC,SAA4BvJ,GACxB,IAAKA,EACD;AAEJ,IAAI8J,EAAUhmC,MAAM1T,QAAQ4vC,GAAUA,EAAS,CAACA;AAChD,OAAQuJ,KAAKwJ,mBAAmBhJ,mBAAmBD,GAASt5C,SACxDs5C,EAAQt5C,MAChB,CAPA,CAsB4BwvC,KAd5B,SAA2CA,GACvC,IACI,MAAQ,oBACJ,IAAIuJ,KAAKwJ,mBAAmB/S,GAAU,KAAM,CACxCgT,QAAS,SACVnJ,iBACX,CACA,MAAOpqC,GACH,QACJ,CACJ,CAVA,CAe2CugC,GACnC,SAAWgK,EAAqBld,OAAO,CAACkT,GAASiK,EAA8BC,iBAAkB,KAEzG;AA5BA,IAAIF,EAAuBG,EAAQ,OAC/BF,EAAgCE,EAAQ,cAAA75C,EAAAvB,GAAA;ACH5CipB,sCAA+CplB,WAC/C02C,wBAAgC,EAChCA,mBAA2B,CAAC,KAAM,QAAS,MAAO,KAAM,KAAM,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,MAAO,MAAO,KAAM,UAAW,UAAW,MAAO,KAAM,YAAa,MAAO,MAAO,KAAM,KAAM,KAAM,QAAS,KAAM,QAAS,KAAM,MAAO,KAAM,UAAW,UAAW,KAAM,QAAS,iBAAkB,QAAS,QAAS,MAAO,SAAU,KAAM,MAAO,MAAO,MAAO,MAAO,SAAU,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,KAAM,QAAS,KAAM,QAAS,KAAM,SAAU,SAAU,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,SAAU,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,MAAO,KAAM,QAAS,KAAM,UAAW,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,UAAW,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,KAAM,MAAO,KAAM,QAAS,KAAM,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,MAAO,KAAM,KAAM,QAAS,KAAM,KAAM,MAAO,SAAU,SAAU,KAAM,MAAO,KAAM,KAAM,QAAS,QAAS,MAAO,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,QAAS,MAAO,KAAM,UAAW,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,KAAM,QAAS,QAAS,QAAS,KAAM,MAAO,SAAU,KAAM,KAAM,MAAO,MAAO,KAAM,MAA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A,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,KACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KACA,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJrtC,GAAM,CACF,KAEJstC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJrvC,GAAM,CACF,KAEJsvC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,SAAU,CACN,IACA,KACA,KACA,KAEJ,QAAS,CACL,IACA,IACA,MAEJ,SAAU,CACN,IACA,KACA,IACA,MAEJ,QAAS,CACL,IACA,KACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,KACA,IACA,MAEJ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,GAAcjuC,GACnB,OAASA,GAAK,GAAUA,GAAK,IACnB,KAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,CACR,CAKA,SAASkuC,GAAiBluC,GACtB,OAASA,GAAK,IAAUA,GAAK,IACnB,KAANA,GACCA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACCA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,KAAUA,GAAK,KACf,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,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IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,I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CA,GACA,CAAC,QAEH,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,IACA,EACA,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAE7X,CACE,KACA,OAEF,CACE,KACA,MACA,EACA,CAAC,IAAK,IAAK,MAEb,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,KACA,EACA,CAAC,UAEH,CACE,KACA,KACA,EACA,CAAC,UAEH,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,MACA,GAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,IACA,EACA,CAAC,MAAO,MAAO,QAEjB,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MACA,GAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,MACA,GAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,OAEF,CACE,KACA,KACA,EACA,CAAC,OAAQ,OAAQ,OAAQ,SAE3B,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,KACA,EACA,CAAC,OAAQ,QAAS,OAAQ,OAAQ,SAEpC,CACE,KACA,OAEF,CACE,KACA,KACA,GAEF,CACE,KACA,IACA,EACA,CAAC,MAAO,QAEV,CACE,KACA,MAEF,CACE,KACA,KACA,EACA,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAE3C,CACE,KACA,OAEF,CACE,KACA,IACA,EACA,CAAC,KAAM,MAET,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MACA,EACA,CAAC,MAAO,QAEV,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,MACA,GAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,KACA,GAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,IACA,EACA,CAAC,MAAO,QAEV,CACE,KACA,OAEF,CACE,KACA,MACA,GAEF,CACE,KACA,MAEF,CACE,KACA,IACA,GAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,MACA,GAEF,CACE,KACA,OAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,MACA,GAEF,CACE,KACA,OAEF,CACE,KACA,IACA,GACA,CAAC,QAEH,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,KACA,EACA,CAAC,OAEH,CACE,KACA,MAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KACA,MAEF,CACE,KACA,OAEF,CACE,KACA,OAEF,CACE,KA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,SACAC,OAAA,SACAC,MAAA,IACAC,aAAA,SACA90U,GAAA,KACA+0U,QAAA,SACAC,KAAA,SACAC,UAAA,SACAC,OAAA,SACAC,SAAA,SACAC,QAAA,SACAC,IAAA,SACAC,YAAA,SACAC,QAAA,SACAC,QAAA,SACAC,KAAA,OACAC,IAAA,KACAC,MAAA,OACAC,QAAA,SACAC,KAAA,SACAC,KAAA,OACAC,KAAA,SACAC,OAAA,SACAC,QAAA,SACAC,SAAA,SACAC,OAAA,SACAC,MAAA,SACAC,IAAA,SACAC,OAAA,SACAC,OAAA,SACAC,KAAA,SACAC,MAAA,SACAC,MAAA,SACAC,IAAA,OACAC,OAAA,SACAC,OAAA,SACAC,SAAA,OACAC,OAAA,SACAC,OAAA,SACAC,SAAA,SACAC,SAAA,SACAC,SAAA,SACAC,SAAA,SACAC,OAAA,SACAC,QAAA,SACAC,UAAA,SACAC,IAAA,SACAC,OAAA,SACAC,IAAA,SACAC,IAAA,OACAC,MAAA,SACAC,IAAA,SACAC,QAAA,SACAC,OAAA,SACAC,QAAA,SACAC,MAAA,SACAC,KAAA,SACAC,MAAA,SACAC,OAAA,SACAC,UAAA,SACAC,QAAA,SACAC,WAAA,SACAC,IAAA,SACAC,KAAA,SACAC,MAAA,SACAC,UAAA,SACAC,KAAA,SACAC,KAAA,SACAC,KAAA,SACAC,KAAA,SACAC,OAAA,SACAC,OAAA,SACAC,OAAA,SACAC,MAAA,SACAC,MAAA,SACAC,QAAA,SACAC,IAAA,SACAC,KAAA,OACAC,QAAA,SACAC,IAAA,SACAC,OAAA,SACAC,MAAA,SACAC,WAAA,SACAC,IAAA,KACAC,MAAA,SACAC,OAAA,SACAC,OAAA,SACAC,KAAA,SACAC,UAAA,OACAC,IAAA,SACAC,SAAA,SACAC,WAAA,SACAC,QAAA,SACAC,SAAA,SACAC,QAAA,SACAC,WAAA,SACAC,KAAA,KACAC,OAAA,SACAC,KAAA,SACAC,QAAA,SACAC,MAAA,SACAC,QAAA,SACAC,KAAA,SACAC,UAAA,SACAC,OAAA,SACAC,MAAA,SACAC,WAAA,SACAC,UAAA,SACAC,QAAA,SACAC,KAAA,SACAC,IAAA,SACAC,KAAA,SACAC,QAAA,SACAC,MAAA,SACAC,YAAA,SACAC,GAAA,SACAC,SAAA,SACAC,MAAA,SACAC,UAAA,SACAC,MAAA,SACAC,UAAA,SACAC,MAAA,SACAC,QAAA,SACAC,MAAA,SACAC,OAAA,SACAC,MAAA,SACAC,IAAA,SACAC,KAAA,SACAC,KAAA,SACAC,KAAA,SACAC,SAAA,OACAC,OAAA,SACAC,IAAA,SACAC,IAAA,OACAC,MAAA,SACAC,OAAA,SACA/8U,GAAA,SACAg9U,MAAA,SACAC,IAAA,SACAC,KAAA,SACAC,UAAA,SACAC,GAAA,SACAC,MAAA;AAmBA,IAAA77L;AACA,SAAA87L,EAAAnkW,GACAqoK,IACAA,EApBA,WACA,MAAA+7L,EAAA,GACA3pV,EAAA3wB,OAAA2wB,KAAAugV,GACAqJ,EAAAv6W,OAAA2wB,KAAA90B;AACA,IAAAtjB,EAAAqlF,EAAAjqE,EAAAw/P,EAAAqnH;AACA,IAAAjiY,EAAA,EAAcA,EAAAo4C,EAAAn4C,OAAiBD,IAAA,CAE/B,IADA46Q,EAAAqnH,EAAA7pV,EAAAp4C,GACAqlF,EAAA,EAAgBA,EAAA28S,EAAA/hY,OAAkBolF,IAClCjqE,EAAA4mX,EAAA38S,GACA48S,IAAA9hX,QAAA/E,EAAAkI,EAAAlI;AAEAA,EAAA7M,SAAAoqX,EAAA/9G,GAAA,IACAmnH,EAAAE,GAAA,CAAA7mX,GAAA,OAAAA,GAAA,UAAAA,EACA,CACA,OAAA2mX,CACA,CAfA,GAqBA/7L,EAAAk8L,YAAA;AAEA,MAAA1hY,EAAAwlM,EAAAroK,EAAA5Z;AACA,OAAAvjB,GAAA,CACAD,EAAAC,EAAA,GACAuO,EAAAvO,EAAA,GACAma,EAAAna,EAAA,GACAA,EAAA,IAAAA,EAAAP,OAAAO,EAAA,OAEA,CAEA,MAAA2hY,EAAA;AACA,SAAAC,EAAAzkW,GACA,MAAA9zB,EAAAs4X,EAAAhiY,KAAAw9B;AACA,IACAp9B,EAAAwO,EAAA4L,EADAna,EAAA;AAEA,GAAAqJ,EAAA,CAGA,GAAAA,EAAA,KAAAtJ,EAAA,CACA,MAAAyQ,GAAAnH,EAAA;AACArJ,EAAAqJ,EAAA,GAAAotX,EAAAjmX,GAAAgmX,EAAA,IAAAhmX,EAAA,MACA,CAOA,OANAzQ,GAAAsJ,EAAA,GACAkF,GAAAlF,EAAA,GACA8Q,GAAA9Q,EAAA,GACAtJ,EAAA,KAAAsJ,EAAA,GAAAotX,EAAA12X,GAAAy2X,EAAAz2X,EAAA,QACAwO,EAAA,KAAAlF,EAAA,GAAAotX,EAAAloX,GAAAioX,EAAAjoX,EAAA,QACA4L,EAAA,KAAA9Q,EAAA,GAAAotX,EAAAt8W,GAAAq8W,EAAAr8W,EAAA,QACA,CACApa,IACAwO,IACA4L,IACAna,IAfA,CAiBA,CACA,SAAA6hY,EAAArxX,GACA,OAAAA,IACAA,EAAAxQ,EAAA,IACA,QAAgBwQ,EAAAzQ,MAAQyQ,EAAAjC,MAAQiC,EAAA2J,MAAQw8W,EAAAnmX,EAAAxQ,MACxC,OAAewQ,EAAAzQ,MAAQyQ,EAAAjC,MAAQiC,EAAA2J,KAE/B,CAEA,MAAAwxC,EAAAn7C,MAAA,eAAAA,EAAA,MAAAvO,KAAAC,IAAAsO,EAAA,YACAic,EAAAjc,MAAA,OAAAA,EAAA,MAAAvO,KAAAC,KAAAsO,EAAA;AAaA,SAAAsxX,EAAAtxX,EAAAhR,EAAA8uB,GACA,GAAA9d,EAAA,CACA,IAAAuxX,EAAAvK,EAAAhnX;AACAuxX,EAAAviY,GAAAyC,KAAA+b,IAAA,EAAA/b,KAAA8b,IAAAgkX,EAAAviY,GAAAuiY,EAAAviY,GAAA8uB,EAAA,IAAA9uB,EAAA,QACAuiY,EAAArK,EAAAqK,GACAvxX,EAAAzQ,EAAAgiY,EAAA,GACAvxX,EAAAjC,EAAAwzX,EAAA,GACAvxX,EAAA2J,EAAA4nX,EAAA,EACA,CACA,CACA,SAAA9pN,EAAAznK,EAAAkxJ,GACA,OAAAlxJ,EAAAyW,OAAA4rD,OAAA6uF,GAAA,GAAsClxJ,IACtC,CACA,SAAAwxX,EAAAlzX,GACA,IAAA0B,EAAA,CAAWzQ,EAAA,EAAAwO,EAAA,EAAA4L,EAAA,EAAAna,EAAA;AAYX,OAXA+S,MAAA1T,QAAAyP,GACAA,EAAArP,QAAA,IACA+Q,EAAA,CAAWzQ,EAAA+O,EAAA,GAAAP,EAAAO,EAAA,GAAAqL,EAAArL,EAAA,GAAA9O,EAAA,KACX8O,EAAArP,OAAA,IACA+Q,EAAAxQ,EAAA02X,EAAA5nX,EAAA,OAIA0B,EAAAynK,EAAAnpK,EAAA,CAAsB/O,EAAA,EAAAwO,EAAA,EAAA4L,EAAA,EAAAna,EAAA,KACtBA,EAAA02X,EAAAlmX,EAAAxQ,GAEAwQ,CACA,CAOA,MAAAyxX,EACA,WAAAznT,CAAA1rE,GACA,GAAAA,aAAAmzX,EACA,OAAAnzX;AAEA,MAAA9L,SAAA8L;AACA,IAAA0B;AAZA,IAAA2sB;AAaA,WAAAn6B,EACAwN,EAAAwxX,EAAAlzX,GACM,WAAA9L,IACNwN,EAAAymX,EAAAnoX,IAAAwyX,EAAAxyX,KAfA,OADAquB,EAgBAruB,GAfA7L,OAAA,GACA2+X,EAAAzkW,GAEA26V,EAAA36V,KAcAj+B,KAAAgjY,KAAA1xX,EACAtR,KAAAijY,SAAA3xX,CACA,CACA,SAAAgzQ,GACA,OAAAtkR,KAAAijY,MACA,CACA,OAAA5K,GACA,IAAA/mX,EAAAynK,EAAA/4K,KAAAgjY;AAIA,OAHA1xX,IACAA,EAAAxQ,EAAA22X,EAAAnmX,EAAAxQ,IAEAwQ,CACA,CACA,OAAA+mX,CAAAxmV,GACA7xC,KAAAgjY,KAAAF,EAAAjxV,EACA,CACA,SAAA8wV,GACA,OAAA3iY,KAAAijY,OAAAN,EAAA3iY,KAAAgjY,WAAAvxW,CACA,CACA,SAAAumW,GACA,OAAAh4X,KAAAijY,OAAAjL,EAAAh4X,KAAAgjY,WAAAvxW,CACA,CACA,SAAAunW,GACA,OAAAh5X,KAAAijY,OAAAjK,EAAAh5X,KAAAgjY,WAAAvxW,CACA,CACA,GAAAyxW,CAAA59X,EAAAgF,GACA,GAAAhF,EAAA,CACA,MAAA0jD,EAAAhpD,KAAAq4X,IACApvU,EAAA3jD,EAAA+yX;AACA,IAAA8K;AACA,MAAAt+X,EAAAyF,IAAA64X,EAAA,GAAA74X,EACAuK,EAAA,EAAAhQ,EAAA,EACA/D,EAAAkoD,EAAAloD,EAAAmoD,EAAAnoD,EACAsiY,IAAAvuX,EAAA/T,KAAA,EAAA+T,KAAA/T,IAAA,EAAA+T,EAAA/T,IAAA;AACAqiY,EAAA,EAAAC,EACAp6U,EAAAnoD,EAAA,IAAAuiY,EAAAp6U,EAAAnoD,EAAAsiY,EAAAl6U,EAAApoD,EAAA,GACAmoD,EAAA35C,EAAA,IAAA+zX,EAAAp6U,EAAA35C,EAAA8zX,EAAAl6U,EAAA55C,EAAA,GACA25C,EAAA/tC,EAAA,IAAAmoX,EAAAp6U,EAAA/tC,EAAAkoX,EAAAl6U,EAAAhuC,EAAA,GACA+tC,EAAAloD,EAAA+D,EAAAmkD,EAAAloD,GAAA,EAAA+D,GAAAokD,EAAAnoD,EACAd,KAAAq4X,IAAArvU,CACA,CACA,OAAAhpD,IACA,CACA,WAAAqjY,CAAA/9X,EAAAxG,GAIA,OAHAwG,IACAtF,KAAAgjY,KAvGA,SAAAM,EAAAC,EAAAzkY,GACA,MAAA+B,EAAA0sB,EAAAkqW,EAAA6L,EAAAziY,IACAwO,EAAAke,EAAAkqW,EAAA6L,EAAAj0X,IACA4L,EAAAsS,EAAAkqW,EAAA6L,EAAAroX;AACA,OACApa,EAAA22X,EAAA/qU,EAAA5rD,EAAA/B,GAAAyuB,EAAAkqW,EAAA8L,EAAA1iY,SACAwO,EAAAmoX,EAAA/qU,EAAAp9C,EAAAvQ,GAAAyuB,EAAAkqW,EAAA8L,EAAAl0X,SACA4L,EAAAu8W,EAAA/qU,EAAAxxC,EAAAnc,GAAAyuB,EAAAkqW,EAAA8L,EAAAtoX,SACAna,EAAAwiY,EAAAxiY,EAAAhC,GAAAykY,EAAAziY,EAAAwiY,EAAAxiY,GAEA,CAVA,CAuGAd,KAAAgjY,KAAA19X,EAAA09X,KAAAlkY,IAEAkB,IACA,CACA,KAAA+4K,GACA,WAAAgqN,EAAA/iY,KAAAq4X,IACA,CACA,KAAAmL,CAAA1iY,GAEA,OADAd,KAAAgjY,KAAAliY,EAAA02X,EAAA12X,GACAd,IACA,CACA,OAAAyjY,CAAAr0W,GAGA,OAFApvB,KAAAgjY,KACAliY,GAAA,EAAAsuB,EACApvB,IACA,CACA,SAAA0jY,GACA,MAAArL,EAAAr4X,KAAAgjY,KACA7vV,EAAAjwC,EAAA,GAAAm1X,EAAAx3X,EAAA,IAAAw3X,EAAAhpX,EAAA,IAAAgpX,EAAAp9W;AAEA,OADAo9W,EAAAx3X,EAAAw3X,EAAAhpX,EAAAgpX,EAAAp9W,EAAAk4B,EACAnzC,IACA,CACA,OAAA2jY,CAAAv0W,GAGA,OAFApvB,KAAAgjY,KACAliY,GAAA,EAAAsuB,EACApvB,IACA,CACA,MAAA4jY,GACA,MAAAtyX,EAAAtR,KAAAgjY;AAIA,OAHA1xX,EAAAzQ,EAAA,IAAAyQ,EAAAzQ,EACAyQ,EAAAjC,EAAA,IAAAiC,EAAAjC,EACAiC,EAAA2J,EAAA,IAAA3J,EAAA2J,EACAjb,IACA,CACA,OAAA6jY,CAAAz0W,GAEA,OADAwzW,EAAA5iY,KAAAgjY,KAAA,EAAA5zW,GACApvB,IACA,CACA,MAAA8jY,CAAA10W,GAEA,OADAwzW,EAAA5iY,KAAAgjY,KAAA,GAAA5zW,GACApvB,IACA,CACA,QAAA+jY,CAAA30W,GAEA,OADAwzW,EAAA5iY,KAAAgjY,KAAA,EAAA5zW,GACApvB,IACA,CACA,UAAAgkY,CAAA50W,GAEA,OADAwzW,EAAA5iY,KAAAgjY,KAAA,GAAA5zW,GACApvB,IACA,CACA,MAAAmmB,CAAA4yW,GAEA,OADA5yW,EAAAnmB,KAAAgjY,KAAAjK,GACA/4X,IACA,EAGA,SAAAikY,EAAAr0X,GACA,WAAAmzX,EAAAnzX,EACA,CAEA,IAAAtK,EAAAyiB,OAAA4jE,OAAA,CACAgQ,UAAA,KACAonS,QACAtL,MACAyM,IAnkBA,SAAA5yX,GACA,OAAAgmX,EAAAp0X,EAAAoO,EAAA,YACA,EAkkBAsD,QAAAqvX,EACAlM,WACAC,YACAQ,UACAQ,YACAN,UACAE,WACAH,UACAnB,MACAE,MACAE,MACA0K,YACA7K,MACAe,UACAoK,WACAC,YACAx8W,SACAjjB;AAKA,OAFA6kB,OAAA4rD,OAAAswT,EAAA3+X,EAIC,CArmBA,EAH2DkmF;ACL5D,IAAAvpE,EAAYwpE,EAAQ,OACpBpU,EAAWoU,EAAQ,MACnB04S,EAAa14S,EAAQ,OACrBswE,EAAYtwE,EAAQ,OACpBzlE,EAAgBylE,EAAQ,OACxB24S,EAAiB34S,EAAQ,OACzB44S,EAAiB54S,EAAQ;AAOzB,SAAA64S,EAAA9sW,GACA,MAAAvV,MAAYA,EAAAsiX,eAAqB/sW;AACjC,IAAAu8E,UAAUA,GAAYwwR,GACtB55W,IAAUA,GAAM45W,GAChBC,YAAUA,GAAcD;AACxB,UACAtiX,EACAtP,MAAAsP,EAAAtP,MAAAlQ,KAAAwf,GACAwiX,iBAAAxiX,EAAAwiX,iBAAAhiY,KAAAwf,GACAmoT,QAAAnoT,EAAAmoT,QACAniN,OAAAhmG,EAAAgmG,OACAy8Q,YAAAziX,EAAAyiX,YAAAjiY,KAAAwf,GACAkoJ,OAAAloJ,EAAAkoJ,OAAA1nK,KAAAwf,GACA,eAAAuiX,GACA,OAAAA,CACA,EACA,aAAAzwR,GACA,OAAAA,CACA,EACA,OAAAppF,GACA,OAAAA,CACA,EACA,MAAAs0B,GAIA,OAHA80D,EAAAwwR,EAAAxwR,UACAppF,EAAA45W,EAAA55W,IACA65W,EAAAD,EAAAC,YACAD,CACA,EAEA,CAEA,MAAAI,EACA,WAAArpT,CAAAhxB,GACAtqD,KAAA4kY,OAAAt6U,EAAAs6U,OACA5kY,KAAA6kY,YAAA7kY,KAAA4kY,OAAAE,iBAAAC,SACA/kY,KAAAglY,YAAA16U,EAAAroC,KACA,CACA,kBAAAgjX,GACA,QAAAjlY,KAAAglY,WACA,CACA,SAAA/iX,GACA,OAAAjiB,KAAAglY,aAAAhlY,KAAA4kY,OAAA3iX,KACA,CACA,YAAA8iX,GACA,MAAAF,YAAgBA,EAAAD,SAAA3iX,SAA6BjiB,MAC7Cq3E,KAAgBA,GAAOutT,GACvB3lV,GAAgBA,GAAKh9B,EACrBqoC,EAAAtqD,KAAAklY,WAAAjmV;AACA,OAAAl3B,OAAAipB,YAAAjpB,OAAAoH,QAAA01W,GAAAjhX,IAAA,EAAAxb,EAAA+8X,KAQA,CAAA/8X,EAPA,IAAAswB,KACA,MAAA/e,EAAAwrX,KAAAzsW,EAAAysW,CAAA76U;AAIA,OAHArL,EAAAmmV,QAAA,oBAAAplY,KAAAilY,gBACA5tT,EAAAyuM,SAAA7mO,GAEAtlC,KAIA,CACA,SAAA0rX,GACA,UAAArlY,KAAAslY,aACA,CACA,OAAAt2M,GACA,UAAAhvL,KAAAulY,WACA,CACA,WAAAD,CAAAE,EAAAC,MACA,MAAAZ,YAAgBA,EAAAD,SAAA3iX,SAA6BjiB,MAC7Cq3E,KAAgBA,GAAOutT,EACvBc,EAAA,GACAC,IAAAH,EACAvmV,EAAAumV,GAAAvjX,EAAAg9B,GAUAomV,EAAA,IACAt9W,OAAAipB,YAAAjpB,OAAAoH,QAAA01W,GAAAjhX,IAAA,EAAAxb,EAAA+8X,KAOA,CAAA/8X,EANA,IAAAswB,KACA,MAAA4xB,EAAAtqD,KAAAklY,WAAAjmV,EAAAwmV,GACA9rX,EAAAwrX,KAAAzsW,EAAAysW,CAAA76U;AAEA,OADAo7U,EAAA99X,KAAA+R,GACA0rX,MAIA1rP,IAnBA,KACAgsP,IACAF,GACAxmV,EAAAmmV,QAAA,oBACAplY,KAAAilY,gBACA5tT,EAAAyuM,SAAA7mO,GAEAymV,EAAArzW,MAAA1Y;AAcA,OAAA0rX,CACA,CACA,SAAAE,CAAAC,GACA,MAAAX,YAAgBA,EAAA5iX,SAAqBjiB,KACrC8lR,KACA7mO,EAAAumV,GAAAvjX,EAAAg9B,GACAqL,EAAAtqD,KAAAklY,WAAAjmV,EAAA6mO;AAIA,UAHA/9P,OAAAipB,YAAAjpB,OAAAoH,QAAA01W,GAAAjhX,IAAA,EAAAxb,EAAA+8X,KACA,CAAA/8X,EAAA,IAAAswB,IAAAysW,KAAAzsW,EAAAysW,CAAA,IAA0D76U,EAAAw7N,cAAAr0P,OAI1D4zW,MAAA,IAAArlY,KAAAslY,YAAArmV,EAAA6mO,GAEA,CACA,UAAAo/G,CAAAjmV,EAAAwmV,MACA,MAAAZ,YAAgBA,EAAAD,SAAA3iX,SAA6BjiB,MAC7Cq3E,KAAgBA,GAAOutT,EACvBt6U,EAAA,CACArL,KACA2lV,SACAvtT,OACAp1D,MAAAqiX,EAAA,CACAriX,QACAsiX,YAAAtlV,IAEA6mO,SAAA2/G,EAAA,YAAAh0W,EACA4zW,MAAA,IAAArlY,KAAAslY,YAAArmV,EAAAwmV,GACAz2M,IAAA,IAAAhvL,KAAAulY,UAAAtmV,GACA,YAAA8lV,GACA,OAAAh9W,OAAAipB,YAAAjpB,OAAAoH,QAAA01W,GAAAjhX,IAAA,EAAAxb,EAAA+8X,KACA,CAAA/8X,EAAA,IAAAswB,IAAAysW,KAAAzsW,EAAAysW,CAAA76U,KAEA;AAEA,OAAAA,CACA,EAGA,MAAAmqM,EACA,WAAAn5K,GACAt7E,KAAA0lY,UAAA,EACA,CACA,EAAAr/X,CAAAqD,EAAA4mB,GAKA,OAJAtwB,KAAA0lY,UAAAh8X,KACA1J,KAAA0lY,UAAAh8X,GAAA,IAEA1J,KAAA0lY,UAAAh8X,GAAA9B,KAAA0oB,GACAtwB,IACA,CACA,IAAAq5J,CAAA3vJ,KAAAgvB,GACA,MAAAgtW,EAAA1lY,KAAA0lY,UAAAh8X;AAIA,OAHAg8X,GACAA,EAAAlrX,QAAAb,KAAAhH,MAAA3S,KAAA04B,IAEA14B,IACA,CACA,GAAAqU,CAAA3K,EAAA4mB,GACA,MAAAo1W,EAAA1lY,KAAA0lY,UAAAh8X;AASA,OARAg8X,IACAp1W,EACAtwB,KAAA0lY,UAAAh8X,GAAAg8X,EAAAn/W,OAAA5M,OAAA2W,UAGAtwB,KAAA0lY,UAAAh8X,IAGA1J,IACA,CACA,IAAA8mF,CAAAp9E,EAAA4mB,GACA,MAAAs1W,EAAA,IAAAltW,KACA14B,KAAAqU,IAAA3K,EAAAk8X,GACAt1W,EAAA3d,MAAA3S,KAAA04B;AAEA,OAAA14B,KAAAqG,GAAAqD,EAAAk8X,EACA,CACA,kBAAA/nO,GACA79J,KAAA0lY,UAAA,EACA,EAUA,SAAAG,EAAAtqV,EAAA68R,EAAAx/S,GACA,YAAAnH,IAAA8pB,EAAA/jB,OAAA4gT,IAAA78R,EAAAzzB,OACA+9W,EAAAtqV,EAAAzzB,OAAAswT,EAAAx/S,GAEA,mBAAA2iB,EAAA/jB,OAAA4gT,GACA78R,EAAA/jB,OAAA4gT,GAAA31U,KAAA,IACAm2B,EACA9Q,OAAAyzB,EAAAzzB,OACA+9W,EAAAtqV,EAAAzzB,OAAAswT,EAAAx/S,GACA,OAIA2iB,EAAA/jB,OAAA4gT,EACA,CAEA,SAAA0tD,EAAAC,GAIA,OACAC,eAJAD,EAAAx/W,OAAAg1B,GAAA,cAAAA,EAAAz3C,MAKAmiY,eAJAF,EAAAx/W,OAAAg1B,GAAA,SAAAA,EAAAz3C,MAKAoiY,eAJAH,EAAAx/W,OAAAg1B,GAAA,SAAAA,EAAAz3C,MAMA,CAMA,SAAAqiY,EAAAJ,GACA,MAAAK,EAAA,IACAH,eAAYA,EAAAC,kBAAiCJ,EAAAC,GAC7CM,EAAA,IAAAJ,KAAAC,GACAI,EAAA,CACA1xX,QAAA,KACA2xX,YACAC,WAAA,KACAC,UAAA,KACAC,eACAC;AA+DA,OA7DAZ,EAAAvrX,QAAA+gC,IACA,MAMAqrV,EAAAf,EAAAtqV,EAAA,sBANA,CACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAylF,WAAAM;AAGAO,GAGAA,IACApsX,QAAAqsX,IACAA,EAAA5yL,MAAAz5L,QAAA1W,IACAikB,OACAoH,QAAA03W,EAAAzqV,YACA5hC,QAAA,EAAApS,EAAA0+X,MACAV,EAAAx+X,KAAA,CACA9D,OACAsE,OACA0+X,UAAA,IACAR,KACAQ,aAOAT,EAAA7rX,QAAA+gC,IACA,MAAA3iB,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,SAEAymF,EAAAlB,EAAAtqV,EAAA,gBAAA3iB;AACA,IAAAmuW,EACA;AAGA,MAAA3qV,EAAA2qV;AACAh/W,OACAoH,QAAAitB,GACA5hC,QAAA,EAAApS,EAAA0+X,MACA,MAAAE,EAAA,IACAV,KACAQ;AAEA,mBAAAE,aAAA,EAAAA,EAAApyX,WACAoyX,EAAApyX,QAAAoyX,EAAApyX,YAEAoyX,aAAA,EAAAA,EAAAL,kBAAAl1W,KAAAu1W,aAAA,EAAAA,EAAApyX,iBACAoyX,EAAApyX,QAEAwxX,EAAAx+X,KAAA,CACA9D,KAAAy3C,EAAAnzC,KACAA,OACA0+X,UAAAE,QAIAZ,CACA,CAEA,SAAAa,EAAAC,EAAAj/Q,GACA,oBAAAi/Q,EAAA,CACA,IAAAj/Q,EAAAk4F,MAAA+mL,GACA,MAAAxmY,MAAA,gCAAwDwmY;AAExD,OAAAj/Q,EAAAk4F,MAAA+mL,EACA,CACA,OAAAA,CACA,CAEA,SAAAC,KAAAvgF,GACA,OAAAA,EACArgS,OAAA6xI,QACA15I,OAAA,CAAAo9J,EAAA1jB,KACA,MAAAgvO,EAAA,IAAmCtrN;AA+BnC,OA9BA/zJ,OAAAoH,QAAAipI,GAAA59I,QAAA,EAAAye,EAAAt2B,MAEA,GADAykY,EAAAnuW,GAKA,aAAAA,EAAA,CACA,MAAAouW,EAAA1kY,EAAAguC,OAAAhuC,GAAAsV,MAAA,QACAqvX,EAAAF,EAAAnuW,GAAAmuW,EAAAnuW,GAAAhhB,MAAA,QACAsvX,EAAAF,EAAA9gX,OAAAihX,IAAAF,EAAAviY,SAAAyiY;AACAJ,EAAAnuW,GAAA,IAAAquW,KAAAC,GAAAzvX,KAAA,IACA,MACA,aAAAmhB,EAAA,CACA,MAAAu6N,EAAA7wP,IAAAsV,MAAA,KAAwD2L,IAAAjW,KAAA2kG,QAAA/rF,OAAAk7B,SAAA,GACxDgyM,EAAA2zI,EAAAnuW,GAAAmuW,EAAAnuW,GAAAhhB,MAAA,KAA6F2L,IAAAjW,KAAA2kG,QAAA/rF,OAAAk7B,SAAA,GAC7FgmV,EAAA,IAAApwW;AACAo8N,EAAAj5O,QAAA7M,IACA,MAAA+/H,EAAAv6F,GAAAxlC,EAAAsK,MAAA,KAAA2L,IAAAmkC,KAAAuqD;AACAm1R,EAAA56W,IAAA6gH,EAAAv6F,KAEAqgN,EAAAh5O,QAAA7M,IACA,MAAA+/H,EAAAv6F,GAAAxlC,EAAAsK,MAAA,KAAA2L,IAAAmkC,KAAAuqD;AACAm1R,EAAA56W,IAAA6gH,EAAAv6F,KAEAi0V,EAAAnuW,GAAAplB,MAAA0Z,KAAAk6W,EAAAt4W,WAAAvL,IAAA,EAAA8pH,EAAAv6F,KAAA,GAAmGu6F,MAAav6F,KAAIr7B,KAAA,KACpH,MAEAsvX,EAAAnuW,GAAAt2B;KAxBAykY,EAAAnuW,GAAAt2B,IA2BAykY,GACK,GACL,CAEA,SAAAM,EAAAC,EAAAvB,GACA,OAAAA,EACA7/W,OAAAugX,KAAAhjY,OAAA6jY,EAAA7jY,KAAAsE,MACAme,OAAA6xI,KAAA0uO,UAAAP,UACA3iX,IAAAw0I,GACAA,EAAA0uO,UAAAN,WAKApuO,EAAA0uO,UAAAN,WAAAmB,EAAA7tT,QAAA,GAJA,CACA,CAAAs+E,EAAAhwJ,MAAAu/X,EAAA7tT,MAAAs+E,EAAAhwJ,QAKAsW,OAAA,CAAA09B,EAAA0qV,IAAAK,EAAA/qV,EAAA0qV,GAAA,GACA,CAGA,SAAA/gS,EAAApjG,GACA,yBAAAA,CACA,CASA,SAAAilY,EAAAjlY,EAAAi2B,OAAAnH,KAAA64B,GACA,OAAAy7C,EAAApjG,GACAi2B,EACAj2B,EAAAF,KAAAm2B,EAAAj2B,IAAA2nD,GAEA3nD,KAAA2nD,GAEA3nD,CACA,CAEA,SAAAklY,EAAAllY,EAAA,IACA,WAAAolB,OAAA2wB,KAAA/1C,GAAApC,QAAAoC,EAAA24E,cAAAvzD,MACA,CAEA,SAAA+/W,EAAAnlY,GACA,uBAAAA,EACAA,EAEAA,EAAAk6B,MAAA,wBACAvxB,OAAA3I,GAEA,SAAAA,GAGA,UAAAA,GAGAA,CACA,CAQA,SAAAolY,EAAAC,EAAA5B,GACA,gBAAA4B,EACAA,EAEA,IACAA,EACAC,SAAA/jX,IACA,MAAAgkX,EAAAF,EAAAC,SAAAD,EAAAC,SAAA/jX,GAAA8jX,EAAAluT;AACA,QAAAouT,EACA;AAEA,MAAAC,EAAA/B,EAAA1nX,OAAA,CAAAo9J,EAAA1jB,KACA,MAAAz1J,EAAAy1J,EAAA0uO,UAAAL,UACAruO,EAAA0uO,UAAAL,UAAAviX,GACA4jX,EAAAtnY,EAAAsO,aAAAspJ,EAAAhwJ;AACA,OAAAzF,QACAm5K,EAEA,IACAA,EACA,CAAA1jB,EAAAhwJ,MAAAzF,IAEa;AACb,UAAqBulY,KAAAC,IAGrB,CAEA,SAAAC,EAAAn7W,GACA,OAAAlF,OAAAipB,YAEAjpB,OAAAoH,QAAAlC,GAAA1G,OAAA,EAAA0S,EAAAt2B,MACA,UAAAs2B,IAAA4uW,EAAAllY,KAGAA,SAEA,CAOA,SAAA0lY,EAAAtC,EAAAnB,GACA,IAAAvkW;AACA,MAAAioW,EAAAnC,EAAAJ,IACAE,eAAYA,EAAAC,kBAAiCJ,EAAAC,GAC7CwC,EAAA,QAAAloW,EAAA4lW,EAAA5vW,KAAAklB,GAAAsqV,EAAAtqV,EAAA,uBAAAlb,OAAA,EAAAA,EAAAj4B,KACA+3M,EAAAp4L,OAAAipB,YAAAi1V,EAAAriX,IAAA23B,IACA,MAAA6qV,EAAAkC,EAAA/hX,OAAAugX,KAAAhjY,OAAAy3C,EAAAnzC,MACAwwB,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAskF,UASA38Q,EAAAmgR,EAAA,IAPArC,EAAArnX,OAAA,CAAA8pX,EAAAnoY,KACA,MAAAooY,EAAA5C,EAAAxlY,EAAA,mBAAAu4B;AACA,UACA4vW,KACAC,IAAAltV,GAAA,KAES,IAGTkmC,QAAAmmT,EAAA/B,EAAAtqV,EAAA,UAAA3iB,IACA8vW,MAAAd,EAAA/B,EAAAtqV,EAAA,QAAA3iB,IACAq5H,MAAA21O,EAAA/B,EAAAtqV,EAAA,QAAA3iB,IACAhb,OAAAgqX,EAAA/B,EAAAtqV,EAAA,SAAA3iB,IACA+vW,KAAAf,EAAA/B,EAAAtqV,EAAA,OAAA3iB,IACA4rT,WAAAojD,EAAA/B,EAAAtqV,EAAA,aAAA3iB,IACA1mB,UAAA01X,EAAA/B,EAAAtqV,EAAA,YAAA3iB,IACAniB,KAAAmxX,EAAA/B,EAAAtqV,EAAA,OAAA3iB,IACAgwW,WAAAhB,EAAA/B,EAAAtqV,EAAA,aAAA3iB,IACAiwW,qBAAAjB,EAAA/B,EAAAtqV,EAAA,uBAAA3iB,IACAkwW,SAAAlB,EAAA/B,EAAAtqV,EAAA,WAAA3iB,IACAmwW,UAAAnB,EAAA/B,EAAAtqV,EAAA,YAAA3iB,IACAkhD,MAAA/xD,OAAAipB,YAAAo1V,EAAAxiX,IAAAolX,IACA,IAAA3oW;AACA,OAAA2oW,EAAA5gY,KAAA,CAAmDwM,QAAA,QAAAyrB,EAAA2oW,aAAA,EAAAA,EAAAlC,iBAAA,IAAAzmW,OAAA,EAAAA,EAAAzrB,eAGnD6xX,EAAAmB,EAAA/B,EAAAtqV,EAAA,YAAA3iB;AACA6tW,IACAx+Q,EAAAghR,SAAAxC,EAAA7iX,IAAAokX,GAAAD,EAAAC,EAAA5B;AAEA,MAAAI,EAAAX,EAAAtqV,EAAA,aAAA3iB;AACA4tW,IACAv+Q,EAAAihR,MAAAhlX,GAAAsiX,EAAA,CACAtiX,OACAilX,eAAAzB,EAAAxjX,EAAAkiX;AAGA,MAAAgD,EAAAvD,EAAAtqV,EAAA,aAAA3iB;AAIA,OAHAwwW,IACAnhR,EAAAohR,OAAAD,GAEA,CAAA7tV,EAAAnzC,KAAA6/G,MAEAygR,EAAA3gX,OAAAipB,YAAAk1V,EAAAtiX,IAAA23B,IACA,MAAA6qV,EAAAkC,EAAA/hX,OAAAugX,KAAAhjY,OAAAy3C,EAAAnzC,MACAwwB,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAskF,UASA38Q,EAAAmgR,EAAA,IAPArC,EAAArnX,OAAA,CAAA8pX,EAAAnoY,KACA,MAAAipY,EAAAzD,EAAAxlY,EAAA,mBAAAu4B;AACA,UACA4vW,KACAc,IAAA/tV,GAAA,KAES,IAGT8vF,UAAAu8P,EAAA/B,EAAAtqV,EAAA,YAAA3iB,IACA2wW,SAAA3B,EAAA/B,EAAAtqV,EAAA,WAAA3iB,IACAq5H,MAAA21O,EAAA/B,EAAAtqV,EAAA,QAAA3iB,IACA4wW,SAAA5B,EAAA/B,EAAAtqV,EAAA,WAAA3iB,IACAniB,KAAAmxX,EAAA/B,EAAAtqV,EAAA,OAAA3iB,IACAkhD,MAAA/xD,OAAAipB,YAAAo1V,EAAAxiX,IAAAolX,IACA,IAAA3oW;AACA,OAAA2oW,EAAA5gY,KAAA,CAAmDwM,QAAA,QAAAyrB,EAAA2oW,aAAA,EAAAA,EAAAlC,iBAAA,IAAAzmW,OAAA,EAAAA,EAAAzrB,eAGnD6xX,EAAAmB,EAAA/B,EAAAtqV,EAAA,YAAA3iB;AACA6tW,IACAx+Q,EAAAghR,SAAAxC,EAAA7iX,IAAAokX,GAAAD,EAAAC,EAAA5B;AAEA,MAAAI,EAAAX,EAAAtqV,EAAA,aAAA3iB;AAOA,OANA4tW,IACAv+Q,EAAAihR,MAAA7qR,GAAAmoR,EAAA,CACAnoR,OACA8qR,eAAAzB,EAAArpR,EAAA+nR,MAGA,CAAA7qV,EAAAnzC,KAAA6/G;AAEA,WAAA8zC,EAAA0tO,OAAA,CACAlB,UACApoL,QACAuoL,SAEA,CAQA,SAAAgB,EAAAthY,EAAA6/G,GACA,OAAAA,EAAAk4F,MAAA/3M,IAAA6/G,EAAAygR,MAAAtgY,IAAA,IACA,CAEA,SAAAuhY,EAAApuV,EAAA9mC,GACA,OAAAZ,MAAA1T,QAAAsU,GACAA,EAAAgP,KAAAmmX,IACA,iBAAAA,EACAA,EACAA,EAAAxhY,QACAmzC,EAAAnzC,MAGAqM,CACA,CAEA,SAAAo1X,EAAAC,EAAA7hR,GACA,MAAA8hR,EAAAhuO,EAAAiuO,cAAAC,WAAAhiR,GAAAiiR,kBAAAJ,GAEAn6X,EADAhL,SAAAk/J,eAAA8kG,qBACA90L,cAAA;AAEA,OADAlkE,EAAAjL,YAAAqlY,GACAp6X,EAAAjH,SACA,CAQA,MAAAyhY,EAAA,CAAAC,EAAAC,EAAA,OACA,IAAAC,EAAA;AACA,MAAAC,EAAAH,EAAAI;AAaA,OAZAJ,EAAAtiX,OAAA2iX,aAAA1nY,KAAA+b,IAAA,EAAAyrX,EAAAF,GAAAE,EAAA,CAAArmX,EAAAo2B,EAAAxyB,EAAA/e,KACA,IAAAs3B,EAAAkiB;AACA,MAAA+3N,GAAA,QAAA/3N,GAAAliB,EAAAnc,EAAApgB,KAAAimW,MAAAs/B,cAAA,IAAA9mV,OAAA,EAAAA,EAAA33C,KAAAy1B,EAAA,CACAnc,OACAo2B,MACAxyB,SACA/e,YAEAmb,EAAAgzE,aACA;AACAozS,GAAApmX,EAAAwmX,SAAAxmX,EAAAymX,OAAArwH,IAAAl6Q,MAAA,EAAA2C,KAAA+b,IAAA,EAAAyrX,EAAAjwV,MAEAgwV;AAGA,SAAAM,EAAAjoY,GACA,0BAAAolB,OAAA9iB,UAAAoL,SAAAzF,KAAAjI,EACA,CAEA,MAAAkoY,EACA,WAAAvvT,CAAA9jD,GACAx3B,KAAAq2B,KAAAmB,EAAAnB,KACAr2B,KAAA2gK,QAAAnpI,EAAAmpI,OACA,EAsBA,SAAAmqO,EAAAtzW,GACA,IAAA6I;AACA,MAAAukW,OAAYA,EAAAr3W,OAAAk/B,KAAAppD,OAAAs6K,QAAAotN,UAAyCvzW,GACrD6/C,KAAYA,GAAOutT;AACnB,GAAAvtT,EAAA2zT,UACA;AAEA,MAAAZ,EAAA/yT,EAAAp1D,MAAA0I,IAAAqqD,QAAAznD;AACA,GAEA68W,EAAAtiX,OAAAhkB,KAAAimW,KAAAtzV,OAEA,QAAA4pB,EAAA+pW,EAAAa,YAAAb,EAAAc,iBAAA,IAAA7qW,OAAA,EAAAA,EAAAqoW,MAAAryW,KAAAgoF,KAAAv6G,KAAAimW,KAAAtzV,OACA;AAEA,IAAAi8G;AACA,MAAA43Q,EAAAH,EAAAC,GAAA/mY;AA6CA,OA5CAs6K,EAAAnjK,QAAAotC,IACA,GAAA8qE,EACA;AAEA,MAAA71F,EAzCA,EAAAx5B,EAAAgzB,KACA,GAAAu0W,EAAAv0W,GACA,OAAAA,EAAA51B,KAAA4C;AAEA,MAAA8nY,EAAA90W,EAAAhzB;AACA,IAAA8nY,EACA;AAEA,MAAAlkX,EAAA,CAAAkkX,EAAA9nY;AAUA,OATA4jB,EAAAle,MAAAoiY,EAAApiY,MACAke,EAAArX,MAAAvM,EACA4jB,EAAAgG,KAAAk+W,EAAAl+W,KACAk+W,EAAAC,cACAD,EAAA9nY,KAAA0B,SAAAomY,EAAAC,cACA71X,QAAAC,KAAA,sFAEAyR,EAAArf,KAAAujY,EAAAC,cAEAnkX,GAlBA,CAyCAqjX,EAAA1iV,EAAAvxB;AACA,IAAAwG,EACA;AAEA,MAAAoiB,EAAAo4B,EAAAp1D,MAAAg9B,GACAh9B,EAAAqiX,EAAA,CACAriX,MAAAo1D,EAAAp1D,MACAsiX,YAAAtlV,IAEAi5B,EAAA,CACA3qD,QAAAsP,EAAA,GAAAt8B,OAAA8C,EAAA9C,QACAksD,OAEAs4U,SAAgBA,EAAAM,QAAAr2M,OAAuB,IAAA21M,EAAA,CACvCC,SACA3iX;AAWA,OATA2lC,EAAA+4G,QAAA,CACA1+I,QACAi2D,QACAr7C,QACAkoW,WACAM,QACAr2M,SAGA/vI,EAAAhqC,MAAA1U,SAKA0+C,EAAAosV,QAAAN,EAAA,CACA/kX,UAAAi5B,EACA1xB,OACAk/B,KACAppD,SAEAg0E,EAAAyuM,SAAA7mO,GACAyzE,QAEAA,CACA,CAMA,SAAA44Q,EAAAhhV,GACA,MAAAs6U,OAAYA,EAAAjnN,SAAgBrzH,EAC5BygV,EAAA,IAAA9oX,EAAAspX,OAAA,CACAtpX,MAAA,CACA8wD,KAAA,IACA,KAEA,KAAApgE,CAAAssC,EAAAwxN,EAAAxuP,GACA,MAAAupX,EAAAvsV,EAAAmmV,QAAA2F;AACA,GAAAS,EACA,OAAAA;AAGA,MAAAC,EAAAxsV,EAAAmmV,QAAA;AAuBA,QAtBAqG,GAEAt8X,WAAA,KACA,IAAA9L,KAA8BA,GAAOooY;AACrC,iBAAApoY,IAIAA,EAAAwmY,EAAA9tO,EAAAiiJ,SAAAzwR,KAAAlqB,GAAA4e,EAAAgmG;AAEA,MAAA16F,KAAgCA,GAAOk+W,EACvCh/U,EAAAl/B,EAAAlqB,EAAA9C;AACAuqY,EAAA,CACAlG,SACAr3W,OACAk/B,KACAppD,OACAs6K,QACAotN,aAIA9rV,EAAAysV,cAAAzsV,EAAA0sV,WAAA,KAAAl7H,CACA,GAEAnmN,MAAA,CACAshV,gBAAA,CAAAv0T,EAAA9pD,EAAAk/B,EAAAppD,IACAynY,EAAA,CACAlG,SACAr3W,OACAk/B,KACAppD,OACAs6K,QACAotN,WAGAc,gBAAA,CACAC,eAAAz0T,IACAloE,WAAA,KACA,MAAA48X,QAAgCA,GAAU10T,EAAAp1D,MAAA8xF;AAC1Cg4R,GACAjB,EAAA,CACAlG,SACAr3W,KAAAw+W,EAAAzxV,IACAmS,GAAAs/U,EAAAzxV,IACAj3C,KAAA,GACAs6K,QACAotN,kBASA,aAAA7+M,CAAA70G,EAAA3tE,GACA,aAAAA,EAAAuvB,IACA;AAEA,MAAA8yW,QAAwBA,GAAU10T,EAAAp1D,MAAA8xF;AAClC,QAAAg4R,GACAjB,EAAA,CACAlG,SACAr3W,KAAAw+W,EAAAzxV,IACAmS,GAAAs/U,EAAAzxV,IACAj3C,KAAA,KACAs6K,QACAotN,UAIA,GAGAiB;AAEA,OAAAjB,CACA,CAMA,SAAAkB,EAAAtpY,GACA,iBAJA,SAAAA,GACA,OAAAolB,OAAA9iB,UAAAoL,SAAAzF,KAAAjI,GAAAvC,MAAA,KACA,CAFA,CAIAuC,IAGAA,EAAA24E,cAAAvzD,eAAAC,eAAArlB,KAAAolB,OAAA9iB,SACA,CAEA,SAAAs+S,EAAA/5S,EAAA+mC,GACA,MAAAs+B,EAAA,IAAqBrlE;AAWrB,OAVAyiY,EAAAziY,IAAAyiY,EAAA17V,IACAxoB,OAAA2wB,KAAAnI,GAAA/1B,QAAAye,IACAgzW,EAAA17V,EAAAtX,KAAAgzW,EAAAziY,EAAAyvB,IACA41C,EAAA51C,GAAAsqR,EAAA/5S,EAAAyvB,GAAAsX,EAAAtX,IAGA41C,EAAA51C,GAAAsX,EAAAtX,KAIA41C,CACA,CAMA,MAAAq9T,EACA,WAAA5wT,CAAA9jD,EAAA,IACAx3B,KAAA8D,KAAA,OACA9D,KAAAoI,KAAA,OACApI,KAAA8nB,OAAA,KACA9nB,KAAA8mK,MAAA,KACA9mK,KAAAw3B,OAAA,CACApvB,KAAApI,KAAAoI,KACA2hH,eAAA,IAEA/pH,KAAAw3B,OAAA,IACAx3B,KAAAw3B,UACAA,GAEAx3B,KAAAoI,KAAApI,KAAAw3B,OAAApvB,KACAovB,EAAAuyF,gBAAAhiG,OAAA2wB,KAAAlhB,EAAAuyF,gBAAAxpH,OAAA,GACAgV,QAAAC,KAAA,yHAAkJxV,KAAAoI,UAGlJpI,KAAAgC,QAAAhC,KAAAw3B,OAAAuyF,eACA/pH,KAAAw3B,OAAA20W,aACAnsY,KAAAgC,QAAA4lY,EAAA/B,EAAA7lY,KAAA,cACAoI,KAAApI,KAAAoI,SAGApI,KAAAsgT,QAAAsnF,EAAA/B,EAAA7lY,KAAA,cACAoI,KAAApI,KAAAoI,KACApG,QAAAhC,KAAAgC,YACS,EACT,CACA,aAAAuC,CAAAizB,EAAA,IACA,WAAA00W,EAAA10W,EACA,CACA,SAAA40W,CAAApqY,EAAA,IAGA,MAAAu5C,EAAAv7C,KAAAF,OAAA,IACAE,KAAAw3B,OACA20W,WAAA,IACA5oF,EAAAvjT,KAAAgC;AAOA,OAHAu5C,EAAAnzC,KAAApI,KAAAoI,KAEAmzC,EAAAzzB,OAAA9nB,KAAA8nB,OACAyzB,CACA,CACA,MAAAz7C,CAAAusY,EAAA,IACA,MAAA9wV,EAAA,IAAA2wV,EAAAG;AAcA,OAbA9wV,EAAAzzB,OAAA9nB,KACAA,KAAA8mK,MAAAvrH,EACAA,EAAAnzC,KAAAikY,EAAAjkY,KAAAikY,EAAAjkY,KAAAmzC,EAAAzzB,OAAA1f,KACAikY,EAAAtiR,gBAAAhiG,OAAA2wB,KAAA2zV,EAAAtiR,gBAAAxpH,OAAA,GACAgV,QAAAC,KAAA,yHAAkJ+lC,EAAAnzC,UAElJmzC,EAAAv5C,QAAA4lY,EAAA/B,EAAAtqV,EAAA,cACAnzC,KAAAmzC,EAAAnzC,QAEAmzC,EAAA+kQ,QAAAsnF,EAAA/B,EAAAtqV,EAAA,cACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,WAEAu5C,CACA,CACA,iBAAA+wV,EAAA1H,OAAwBA,EAAAvmR,SACxB,MAAAp/D,GAAgBA,GAAK2lV,EAAA3iX,MACrBsqX,EAAA3H,EAAA3iX,MAAA8xF,UAAAq2R;AAEA,GADAmC,EAAAjyV,MAAAiyV,EAAAptX,MACA,CACA,MAAAqtX,EAAAD,EAAA7D;AAEA,IADA8D,EAAAn2W,KAAAlsB,iBAAA,EAAAA,EAAArG,KAAAsE,QAAAi2G,EAAAj2G,MAEA;AAEA,MAAAqkY,EAAAD,EAAAn2W,KAAAlsB,iBAAA,EAAAA,EAAArG,KAAAsE,QAAAi2G,EAAAj2G;AAMA,OALAqkY,GACAxtV,EAAAytV,iBAAAD,GAEAxtV,EAAA0tV,WAAA,IAAAJ,EAAAjyV,KACAsqV,EAAAvtT,KAAAyuM,SAAA7mO,KAEA,CACA,QACA,EAGA,SAAAy1C,EAAA/xF,GACA,uBAAAA,CACA,CAMA,MAAAiqY,EACA,WAAAtxT,CAAA9jD,GACAx3B,KAAAq2B,KAAAmB,EAAAnB,KACAr2B,KAAA2gK,QAAAnpI,EAAAmpI,OACA,EAkEA,IAAAksO,EAAA;AAcA,SAAAC,EAAAxiV,GACA,MAAAs6U,OAAYA,EAAAjnN,SAAgBrzH;AAC5B,IAIAyiV,EAJAC,EAAA,KACAC,KACAC,KACAC,EAAA,oBAAAC,eAAA,IAAAA,eAAA;AAEA,IACAL,EAAA,oBAAAM,UAAA,IAAAA,UAAA,YACA,CACA,MACAN,EAAA,IACA,CACA,MAAAO,EAAA,EAA4BrrX,QAAAsL,OAAAk/B,KAAA7E,OAAA2lV,eAC5B,MAAAtuV,EAAAh9B,EAAAg9B,GACAuuV,EAAAlJ,EAAA,CACAriX,QACAsiX,YAAAtlV;AAWA,GApFA,SAAAznB,GACA,MAAAotW,OAAYA,EAAA3iX,QAAAsL,OAAAk/B,KAAA7E,OAAAulV,aAAAJ,aAAwDv1W,GACpEutW,SAAYA,EAAAM,QAAAr2M,OAAuB,IAAA21M,EAAA,CACnCC,SACA3iX,UAEA2xL,EAAA;AAiCA,OAhCA3xL,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACA,IAAAp2B,EAAAupX,aAAAvpX,EAAApgB,KAAAimW,KAAAtzV,KACA;AAEA,MAAAi3X,EAAA3qY,KAAA+b,IAAAyO,EAAA+sB,GACAqzV,EAAA5qY,KAAA8b,IAAA4tC,EAAAnS,EAAAp2B,EAAAu9D,QAAApjE,MAlCA,EAAAhb,EAAAgzB,EAAA3sB,KACA,GAAAkhY,EAAAv0W,GACA,UAAAhzB,EAAAuqY,SAAAv3W;AAEA,MAAA7Q,EAAA6Q,EAAAhzB,EAAAqG;AACA,OAAA8b,EAGAA,EAAA5B,IAAAiqX,IACA,MAAA5mX,EAAA,CAAA4mX,EAAAxqY;AAUA,OATA4jB,EAAAle,MAAA8kY,EAAA9kY,MACAke,EAAArX,MAAAvM,EACA4jB,EAAAgG,KAAA4gX,EAAA5gX,KACA4gX,EAAAzC,cACAyC,EAAAxqY,KAAA0B,SAAA8oY,EAAAzC,cACA71X,QAAAC,KAAA,sFAEAyR,EAAArf,KAAAimY,EAAAzC,cAEAnkX,IAbA,IANA,CAmCA/C,EAAA4pX,YAAAJ,EAAApzV,EAAAqzV,EAAArzV,OAAA7oB,EAAA,KACAm2B,EAAAvxB,KAAA82W,GACA3yX,QAAAqiB,IACA,QAAApL,IAAAoL,EAAA9zB,MACA;AAEA,MAAAmW,EAAAwuX,EAAA7wW,EAAA9zB,MAAA,EACAoW,EAAAD,EAAA2d,EAAA,GAAAt8B,OACA23E,EAAA,CACA3qD,KAAAtL,EAAAg9B,GAAAogI,QAAAz7J,IAAA1E,GACAutC,GAAAxqC,EAAAg9B,GAAAogI,QAAAz7J,IAAAzE,IAEAwhJ,EAAA/4G,EAAA+4G,QAAA,CACA1+I,QACAi2D,QACAr7C,QACAkoW,WACAM,QACAr2M,MACAm+M,aACAJ;AAEAn5L,EAAAhsM,KAAA+4J,OAGAizC,EAAAvhL,MAAAsuI,GAAA,OAAAA,EAEA,CAxCA,CA2EA,CACAikO,SACA3iX,MAAAurX,EACAjgX,KAAAxqB,KAAA+b,IAAAyO,EAAA,KACAk/B,KAAAxxC,EAAA,EACA2sC,OACAulV,WAAAI,EACAR,eAEA9tV,EAAAhqC,MAAA1U,OAAA,CAGA,IACAwsY,EAAA,oBAAAM,UAAA,IAAAA,UAAA,YACA,CACA,MACAN,EAAA,IACA,CAEA,OADAI,EAAA,oBAAAC,eAAA,IAAAA,eAAA,cACAnuV,CARA,GAUAmrR,EAAAzsJ,EAAA/5J,IAAAgkC,GACA,IAAA3lC,EAAAspX,OAAA,CAEA,IAAAl0T,IACA,MAAA02T,EAAArkY,IACA,IAAA22B;AACA2sW,GAAA,QAAA3sW,EAAAg3C,EAAA22T,IAAApkY,qBAAA,IAAAy2B,OAAA,EAAAA,EAAA7pB,SAAA9M,EAAAF,SACA6tE,EAAA22T,IAAApkY,cACA,KACAojY,IACAH,EAAAjI,IAGAqJ,EAAA,KACApB,IACAA,EAAA;AAKA,OAFApjY,OAAA0kB,iBAAA,YAAA4/W,GACAtkY,OAAA0kB,iBAAA,UAAA8/W,GACA,CACA,OAAA7wT,GACA3zE,OAAA+lB,oBAAA,YAAAu+W,GACAtkY,OAAA+lB,oBAAA,UAAAy+W,EACA,EAEA,EACA3jV,MAAA,CACAuhV,gBAAA,CACAtyO,KAAA,CAAAliF,EAAA3tE,KAGA,GAFAwjY,EAAAF,IAAA31T,EAAA22T,IAAApkY,cACAmjY,EAAArjY,GACAwjY,EAAA,CACA,MAAAgB,EAAArB,GACAqB,aAAA,EAAAA,EAAAl4O,aAEA7mJ,WAAA,KACA,MAAA4kG,EAAAm6R,EAAAjsX,MAAA8xF;AACAA,GACAm6R,EAAAnJ,SAAAoJ,YAAA,CAAmF5gX,KAAAwmF,EAAAxmF,KAAAk/B,GAAAsnD,EAAAtnD,MAElD,GAEjC,CACA,UAEA2hV,MAAA,CAAAC,EAAA3kY,KACA,IAAA22B;AACA,MAAA9V,EAAA,QAAA8V,EAAA32B,EAAAymG,qBAAA,IAAA9vE,OAAA,EAAAA,EAAA+vE,QAAA;AAGA,OAFA+8R,EAAAzjY,EACAujY,KAAA1iX,aAAA,EAAAA,EAAAxlB,SAAA,wBAKAupY,kBAAA,CAAAC,EAAAC,EAAAvsX,KACA,MAAAsiX,EAAAgK,EAAA,GACA5/F,EAAA,UAAA41F,EAAAa,QAAA,aAAA6H,EACAwB,EAAA,SAAAlK,EAAAa,QAAA,aAAA8H,EAEAwB,EAAAnK,EAAAa,QAAA,mBACAuJ,IAAAD;AACA,IAAA//F,IAAA8/F,IAAAE,EACA;AAGA,GAAAA,EAAA,CACA,IAAAtrY,KAA0BA,GAAOqrY;AACjC,iBAAArrY,IAIAA,EAAAwmY,EAAA9tO,EAAAiiJ,SAAAzwR,KAAAlqB,GAAA4e,EAAAgmG;AAEA,MAAA16F,KAA4BA,GAAOmhX,EACnCjiV,EAAAl/B,EAAAlqB,EAAA9C,OACAgtY,EAjIA,CAAAlqY,IACA,IAAAg9B;AACA,MAAA32B,EAAA,IAAA0jY,eAAA,SACAj9R,cAAA,IAAAy+R;AAGA,OADA,QAAAvuW,EAAA32B,EAAAymG,qBAAA,IAAA9vE,KAAAwuW,QAAA,YAAAxrY,GACAqG,GANA,CAiIArG;AACA,OAAAiqY,EAAA,CACA1lV,OACA3lC,QACAsL,OACAk/B,GAAA,CAA8BxxC,EAAAwxC,GAC9B8gV,YAEA,CAEA,MAAAhgX,EAAAihX,EAAA7jX,IAAA82D,QAAAqtT,cAAA7sX,EAAA0I,IAAA82D,SACAh1B,EAAA+hV,EAAA7jX,IAAA82D,QAAAstT,YAAA9sX,EAAA0I,IAAA82D;AAEA,OAAAiT,EAAAnnE,IAAAk/B,GAAAl/B,IAAAk/B,EAAAxxC,EAGAqyX,EAAA,CACA1lV,OACA3lC,QACAsL,OACAk/B,KACA8gV,SAAAJ,SARA;AAaA,OAAA/iE,CACA,CAEA,SAAA4kE,EAAAlzN,GACA,MAAArxH,EAAAqxH,EAAAv1J,OAAA,CAAA7kB,EAAAqH,IAAA+yK,EAAAjyK,QAAAnI,KAAAqH;AACA,OAAA8K,MAAA0Z,KAAA,IAAAxJ,IAAA0mC,GACA,CAEA,MAAAwkV,EACA,WAAA3zT,CAAAyqT,EAAAnB,GACA5kY,KAAAkvY,gBAAA,GACAlvY,KAAA4kY,SACA5kY,KAAA+lY,WAAAkJ,EAAAj6T,QAAA+wT,GACA/lY,KAAAioH,OAAAogR,EAAAroY,KAAA+lY,WAAAnB,GACA5kY,KAAAmvY,iBACA,CAOA,cAAAn6T,CAAA+wT,GACA,MAAAqJ,EAAAH,EAAA98W,KAAA88W,EAAAtxL,QAAAooL,IACAsJ,EAAAL,EAAAI,EAAAxrX,IAAA23B,KAAAnzC;AAMA,OALAinY,EAAA9uY,QACAgV,QAAAC,KAAA,oDAA6E65X,EAC7EzrX,IAAAw0I,GAAA,IAAiCA,MACjCtgJ,KAAA,oCAEAs3X,CACA,CAMA,cAAAzxL,CAAAooL,GACA,OAAAA,EACAniX,IAAA23B,IACA,MAKA+zV,EAAAzJ,EAAAtqV,EAAA,gBALA,CACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ;AAGA,OAAAgvF,EACA,CAAA/zV,KAAAv7C,KAAA29M,QAAA2xL,MAEA/zV,IAGAq4M,KAAA,GACA,CAMA,WAAAzhO,CAAA4zW,GAEA,OAAAA,EAAA5zW,KAAA,CAAArxB,EAAAma,KACA,MAAAs0X,EAAA1J,EAAA/kY,EAAA,aAFA,IAGA0uY,EAAA3J,EAAA5qX,EAAA,aAHA;AAIA,OAAAs0X,EAAAC,GACA,EAEAD,EAAAC,EACA,EAEA,GAEA,CAKA,YAAAzK,GACA,OAAA/kY,KAAA+lY,WAAArnX,OAAA,CAAAqmX,EAAAxpV,KACA,MAOAk0V,EAAA5J,EAAAtqV,EAAA,cAPA,CACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAskF,OAAA5kY,KAAA4kY,OACA9gY,KAAA4lY,EAAAnuV,EAAAnzC,KAAApI,KAAAioH;AAGA,OAAAwnR,EAGA,IACA1K,KACA0K,KAJA1K,GAMS,GACT,CAKA,WAAA36D,GACA,MAAAw6D,OAAgBA,GAAS5kY,KAMzB+lY,EAAAkJ,EAAA98W,KAAA,IAAAnyB,KAAA+lY,YAAA50X,WACAu+X,EAAA,GACAC,EAAA,GACAC,EAAA7J,EACAniX,IAAA23B,IACA,MAAA3iB,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAskF,SACA9gY,KAAA4lY,EAAAnuV,EAAAnzC,KAAApI,KAAAioH,SAEAmiN,EAAA,GACAylE,EAAAhK,EAAAtqV,EAAA,uBAAA3iB;AACA,IAAAk3W,EAAA;AAKA,GAHA,SAAAv0V,EAAAz3C,MAAA+hY,EAAAtqV,EAAA,WAAA3iB,KACAk3W,EAAAC,WAAA,IAAA7D,EAAAI,WAAA,CAAqE1H,SAAAvmR,KAAA9iE,KAErEs0V,EAAA,CACA,MAAAG,EAAAjoX,OAAAipB,YAAAjpB,OAAAoH,QAAA0gX,KAAAjsX,IAAA,EAAAqsX,EAAAj8T,KACA,CAAAi8T,EAAA,IAAAj8T,EAAA,CAAqD4wT;AAErDkL,EAAA,IAAoCA,KAAAE,EACpC,CACA,MAAAE,EAAA/L,SAAA2L;AACA1lE,EAAAxiU,KAAAsoY;AACA,MAAAC,EAAAtK,EAAAtqV,EAAA,gBAAA3iB;AACA+wW,EAAApuV,EAAAqpV,EAAA5iY,QAAAouY,mBAAAD,GACAT,EAAA9nY,QAAAuoY;AAEA,MAAAE,EAAAxK,EAAAtqV,EAAA,gBAAA3iB;AACA+wW,EAAApuV,EAAAqpV,EAAA5iY,QAAAsuY,mBAAAD,GACAV,EAAA/nY,QAAAyoY;AAEA,MAAAE,EAAA1K,EAAAtqV,EAAA,wBAAA3iB;AACA,GAAA23W,EAAA,CACA,MAAAC,EAAAD;AACAnmE,EAAAxiU,QAAA4oY,EACA,CACA,OAAApmE,IAEAx2E;AACA,OACA03I,EAAA,CACA1G,SACAjnN,MAAA+xN,OAEA5C,EAAA,CACAlI,SACAjnN,MAAAgyN,OAEAC,EAEA,CAKA,cAAAxzV,GACA,OAAA+pV,EAAAnmY,KAAA+lY,WACA,CAKA,aAAA0K,GACA,MAAA7L,OAAgBA,GAAS5kY,MACzBimY,eAAgBA,GAAiBH,EAAA9lY,KAAA+lY;AACjC,OAAAh+W,OAAAipB,YAAAi1V,EACA1/W,OAAAg1B,KAAAsqV,EAAAtqV,EAAA,gBACA33B,IAAA23B,IACA,MAAA6qV,EAAApmY,KAAAo8C,WAAA71B,OAAAugX,KAAAhjY,OAAAy3C,EAAAnzC,MACAwwB,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAskF,SACA9gY,KAAAmjY,EAAA1rV,EAAAnzC,KAAApI,KAAAioH,SAEAyoR,EAAA7K,EAAAtqV,EAAA,cAAA3iB;AACA,OAAA83W,EAkBA,CAAAn1V,EAAAnzC,KAfA,CAAA8b,EAAAmzD,EAAAs5T,EAAAC,EAAAC,KACA,MAAA1H,EAAAzB,EAAAxjX,EAAAkiX;AACA,OAAAsK,IAAA,CAEAxsX,OACAmzD,OACAs5T,SACAC,cACAC,mBAEAjM,SACArpV,YACA4tV,qBAdA,KAmBA,CAKA,eAAAgG,GACAnvY,KAAA+lY,WAAAvrX,QAAA+gC,IACA,IAAAlb;AAEArgC,KAAA4kY,OAAAkM,iBAAAv1V,EAAAnzC,MAAAmzC,EAAA+kQ;AACA,MAAA1nR,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ,QACAskF,OAAA5kY,KAAA4kY,OACA9gY,KAAA4lY,EAAAnuV,EAAAnzC,KAAApI,KAAAioH;AAEA,SAAA1sE,EAAAz3C,OACA,QAAAu8B,EAAAunW,EAAA/B,EAAAtqV,EAAA,cAAA3iB,WAAA,IAAAyH,OAEArgC,KAAAkvY,gBAAAtnY,KAAA2zC,EAAAnzC;AAGA,MAAA2oY,EAAAlL,EAAAtqV,EAAA,iBAAA3iB,GACAo4W,EAAAnL,EAAAtqV,EAAA,WAAA3iB,GACAq4W,EAAApL,EAAAtqV,EAAA,WAAA3iB,GACAs4W,EAAArL,EAAAtqV,EAAA,oBAAA3iB,GACAu4W,EAAAtL,EAAAtqV,EAAA,gBAAA3iB,GACA6qD,EAAAoiT,EAAAtqV,EAAA,UAAA3iB,GACA8qD,EAAAmiT,EAAAtqV,EAAA,SAAA3iB,GACAw4W,EAAAvL,EAAAtqV,EAAA,YAAA3iB;AACAm4W,GACA/wY,KAAA4kY,OAAAv+X,GAAA,eAAA0qY,GAEAC,GACAhxY,KAAA4kY,OAAAv+X,GAAA,SAAA2qY,GAEAC,GACAjxY,KAAA4kY,OAAAv+X,GAAA,SAAA4qY,GAEAC,GACAlxY,KAAA4kY,OAAAv+X,GAAA,kBAAA6qY,GAEAC,GACAnxY,KAAA4kY,OAAAv+X,GAAA,cAAA8qY,GAEA1tT,GACAzjF,KAAA4kY,OAAAv+X,GAAA,QAAAo9E,GAEAC,GACA1jF,KAAA4kY,OAAAv+X,GAAA,OAAAq9E,GAEA0tT,GACApxY,KAAA4kY,OAAAv+X,GAAA,UAAA+qY,IAGA,EAOA,MAAAC,EACA,WAAA/1T,CAAA9jD,EAAA,IACAx3B,KAAA8D,KAAA,YACA9D,KAAAoI,KAAA,YACApI,KAAA8nB,OAAA,KACA9nB,KAAA8mK,MAAA,KACA9mK,KAAAw3B,OAAA,CACApvB,KAAApI,KAAAoI,KACA2hH,eAAA,IAEA/pH,KAAAw3B,OAAA,IACAx3B,KAAAw3B,UACAA,GAEAx3B,KAAAoI,KAAApI,KAAAw3B,OAAApvB,KACAovB,EAAAuyF,gBAAAhiG,OAAA2wB,KAAAlhB,EAAAuyF,gBAAAxpH,OAAA,GACAgV,QAAAC,KAAA,yHAAkJxV,KAAAoI,UAGlJpI,KAAAgC,QAAAhC,KAAAw3B,OAAAuyF,eACA/pH,KAAAw3B,OAAA20W,aACAnsY,KAAAgC,QAAA4lY,EAAA/B,EAAA7lY,KAAA,cACAoI,KAAApI,KAAAoI,SAGApI,KAAAsgT,QAAAsnF,EAAA/B,EAAA7lY,KAAA,cACAoI,KAAApI,KAAAoI,KACApG,QAAAhC,KAAAgC,YACS,EACT,CACA,aAAAuC,CAAAizB,EAAA,IACA,WAAA65W,EAAA75W,EACA,CACA,SAAA40W,CAAApqY,EAAA,IAGA,MAAAu5C,EAAAv7C,KAAAF,OAAA,IACAE,KAAAw3B,OACA20W,WAAA,IACA5oF,EAAAvjT,KAAAgC;AAOA,OAHAu5C,EAAAnzC,KAAApI,KAAAoI,KAEAmzC,EAAAzzB,OAAA9nB,KAAA8nB,OACAyzB,CACA,CACA,MAAAz7C,CAAAusY,EAAA,IACA,MAAA9wV,EAAA,IAAA81V,EAAA,IAA0CrxY,KAAAw3B,UAAA60W;AAc1C,OAbA9wV,EAAAzzB,OAAA9nB,KACAA,KAAA8mK,MAAAvrH,EACAA,EAAAnzC,KAAAikY,EAAAjkY,KAAAikY,EAAAjkY,KAAAmzC,EAAAzzB,OAAA1f,KACAikY,EAAAtiR,gBAAAhiG,OAAA2wB,KAAA2zV,EAAAtiR,gBAAAxpH,OAAA,GACAgV,QAAAC,KAAA,yHAAkJ+lC,EAAAnzC,UAElJmzC,EAAAv5C,QAAA4lY,EAAA/B,EAAAtqV,EAAA,cACAnzC,KAAAmzC,EAAAnzC,QAEAmzC,EAAA+kQ,QAAAsnF,EAAA/B,EAAAtqV,EAAA,cACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,WAEAu5C,CACA,EAWA,SAAA+1V,EAAAC,EAAAr5T,EAAAl2E,GACA,MAAAurB,KAAYA,EAAAk/B,MAAWyrB,GACvBs5T,eAAYA,EAAA,OAAAC,kBAAA,IAAgDzvY,GAAA;AAC5D,IAAAqB,EAAA;AAwBA,OAvBAkuY,EAAA9G,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,EAAAxyB,EAAA/e,KACA,IAAAs3B;AACAnc,EAAAmlJ,SAAA/uH,EAAA/sB,IACAlqB,GAAAmuY;AAEA,MAAAE,EAAAD,aAAA,EAAAA,EAAAvtX,EAAApgB,KAAAsE;AACA,GAAAspY,EAWA,OAVA5pX,IACAzkB,GAAAquY,EAAA,CACAxtX,OACAo2B,MACAxyB,SACA/e,QACAmvE;AAMAh0D,EAAAymX,SACAtnY,GAAA,QAAAg9B,EAAAnc,aAAA,EAAAA,EAAA7gB,YAAA,IAAAg9B,OAAA,EAAAA,EAAAjgC,MAAA2C,KAAA+b,IAAAyO,EAAA+sB,KAAAmS,EAAAnS,MAGAj3C,CACA,CAOA,SAAAsuY,EAAA1pR,GACA,OAAAlgG,OAAAipB,YAAAjpB,OAAAoH,QAAA84F,EAAAk4F,OACA55L,OAAA,GAAArC,OAAA6lV,KAAAs/B,QACAzlX,IAAA,EAAAxb,EAAA8b,KAAA,CAAA9b,EAAA8b,EAAA6lV,KAAAs/B,SACA,CAEA,MAAAuI,EAAAP,EAAA9sY,OAAA,CACA6D,KAAA,0BACA+jY,WAAA,MAEAqF,oBAAA//W,IAGA,qBAAA8+W,GACA,OACA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,2BACAvnV,MAAA,CACAwnV,wBAAA,KACA,MAAAlN,OAAgCA,GAAS5kY,MACzCiiB,MAAgCA,EAAAgmG,UAAgB28Q,GAChDj6W,IAAgCA,EAAAopF,aAAiB9xF,GACjD2jF,OAAgCA,GAASmO,EACzCxmF,EAAAxqB,KAAA8b,OAAA+mF,EAAAhiF,IAAAs0D,KAAAkyT,MAAA9vV,MACAmS,EAAA1pD,KAAA+b,OAAA8mF,EAAAhiF,IAAAs0D,KAAA65T,IAAAz3V,MACAm3V,EAAAE,EAAA1pR;AAEA,OAAAqpR,EAAA3mX,EADA,CAAwC4C,OAAAk/B,MACxC,SACAh7B,IAAAzxB,KAAAgC,QAAAwvY,eACA,CAAoCA,eAAAxxY,KAAAgC,QAAAwvY,gBACpC,GACAC,wBAMA;AAqIA,SAAA98H,EAAAq9H,EAAAC,EAAAjwY,EAAA,CAAsDkjT,YACtD,MAAAxsQ,EAAA3wB,OAAA2wB,KAAAu5V;AACA,OAAAv5V,EAAAn4C,QAGAm4C,EAAArmB,MAAA4G,GACAj3B,EAAAkjT,OACA+sF,EAAAh5W,KAAA+4W,EAAA/4W,GAEA2xW,EAAAqH,EAAAh5W,IACAg5W,EAAAh5W,GAAA5T,KAAA2sX,EAAA/4W,IAEAg5W,EAAAh5W,KAAA+4W,EAAA/4W,GAEA,CAEA,SAAAi5W,EAAAxJ,EAAA5kY,EAAAs4C,EAAA,IACA,OAAAssV,EAAAryW,KAAA+hI,GACAA,EAAAt0J,UACA6wQ,EAEA5sP,OAAAipB,YAAAjpB,OAAA2wB,KAAA0D,GAAAx4B,IAAAlI,GAAA,CAAAA,EAAA08I,EAAAt+E,MAAAp+D,MAAA0gC,GAEA,CACA,SAAA+1V,EAAAzJ,EAAA5kY,EAAAs4C,EAAA,IACA,QAAA81V,EAAAxJ,EAAA5kY,EAAAs4C,EACA,CAIA,SAAAg2V,EAIAC,EAIAvuY,EAKAs4C,GACA,IAAA/b;AACA,IAAAgyW,IAAAvuY,EACA;AAEA,IAAAob,EAAAmzX,EAAAvqX,OAAAwqX,WAAAD,EAAA7H;AAMA,GAJAtrX,EAAAgF,MAAAhF,EAAAgF,KAAAwkX,MAAAjlX,KAAA46F,KAAAv6G,YACAob,EAAAmzX,EAAAvqX,OAAAyqX,YAAAF,EAAA7H,gBAGAtrX,EAAAgF,OAAAhF,EAAAgF,KAAAwkX,MAAAjlX,KAAA46F,KAAAv6G,UACA;AAOA,GAJAs4C,MAAA,QAAA/b,EAAAnhB,EAAAgF,KAAAwkX,MAAA,cAAAroW,OAAA,EAAAA,EAAAy5C,QAGAo4T,EAAA,IAAAhzX,EAAAgF,KAAAwkX,OAAA5kY,EAAAs4C,GAEA;AAEA,IAAAw+K,EAAA17M,EAAAnW,MACAypY,EAAAH,EAAAnzX,UAAAlB,OACA+pU,EAAAntH,EAAA,EACA63K,EAAAD,EAAAtzX,EAAAgF,KAAAwuX;AACA,KAAA93K,EAAA,GACAu3K,EAAA,IAAAE,EAAAvqX,OAAAg/I,MAAA8zD,EAAA,GAAA8tK,OAAA5kY,EAAAs4C,IACAw+K,GAAA,EACA43K,GAAAH,EAAAvqX,OAAAg/I,MAAA8zD,GAAA83K;AAEA,KAAA3qD,EAAAsqD,EAAAvqX,OAAA6qX,YACAR,EAAA,IAAAE,EAAAvqX,OAAAg/I,MAAAihL,GAAA2gD,OAAA5kY,EAAAs4C,IACAq2V,GAAAJ,EAAAvqX,OAAAg/I,MAAAihL,GAAA2qD,SACA3qD,GAAA;AAEA,OACAx6T,KAAAilX,EACA/lV,GAAAgmV,EAEA,CAEA,SAAAG,EAAA1L,EAAAj/Q,GACA,oBAAAi/Q,EAAA,CACA,IAAAj/Q,EAAAygR,MAAAxB,GACA,MAAAxmY,MAAA,gCAAwDwmY;AAExD,OAAAj/Q,EAAAygR,MAAAxB,EACA,CACA,OAAAA,CACA,CA4BA,SAAA2L,EAAAlwY,GACA,OAAAA,aAAAsf,EAAA6wX,aACA,CAEA,SAAAC,EAAApwY,EAAA,EAAAkc,EAAA,EAAAC,EAAA,GACA,OAAA/b,KAAA8b,IAAA9b,KAAA+b,IAAAnc,EAAAkc,GAAAC,EACA,CAEA,SAAAk0X,GAAAroX,EAAAiB,EAAA,MACA,IAAAA,EACA;AAEA,MAAAqnX,EAAAhxX,EAAAixX,UAAAC,QAAAxoX,GACAyoX,EAAAnxX,EAAAixX,UAAAG,MAAA1oX;AACA,aAAAiB,UACA,OAAAqnX;AAEA,WAAArnX,EACA,OAAAwnX;AAEA,MAAAE,EAAAL,EAAA1lX,KACAksP,EAAA25H,EAAA3mV;AACA,cAAA7gC,EACA3J,EAAA6wX,cAAAvuY,OAAAomB,EAAAooX,EAAA,EAAAO,EAAA75H,GAAAs5H,EAAApoX,EAAA82D,QAAApjE,KAAAi1X,EAAA75H,IAEAx3P,EAAA6wX,cAAAvuY,OAAAomB,EAAAooX,EAAAnnX,EAAA0nX,EAAA75H,GAAAs5H,EAAAnnX,EAAA0nX,EAAA75H,GACA,CAEA,SAAA85H,KACA,kBAAAnwT,UAAAllE,UAAA,WAAAmH,KAAA+9D,UAAAC,UACA,CAEA,SAAAmwT,KACA,OACA,iBACA,mBACA,iBACA,OACA,SACA,QACAzuY,SAAAq+E,UAAAllE,WAEAklE,UAAAC,UAAAt+E,SAAA,uBAAAJ,QACA,CAUA,SAAA8uY,KACA,0BAAArwT,WAAA,iCAAA/9D,KAAA+9D,UAAAC,UACA,CAEA,MA4DAqwT,GAAAxvX,IACA,MAAA1I,EAAA0I,EAAAopM;AACA,QAAAhtN,EAAAkb,EAAAjb,OAAA,EAAsCD,GAAA,EAAQA,GAAA,GAC9C,MAAAwmK,EAAAtrJ,EAAAlb;AACA,IAAAwmK,EAAA1vE,UAAA0vE,EAAArvE,WAAA,gBAAApyE,KAAAyhJ,EAAArvE,WACAvzE,EAAApb,YAAAg+J,GAEA,IAAAA,EAAA1vE,UACAs8S,GAAA5sO,EAEA,CACA,OAAA5iJ;AAEA,SAAAyvX,GAAAhxY,GAEA,MAAAixY,EAAA,SAAkCjxY,WAClC4nB,OAAA9gB,OAAAoqY,WAAAC,gBAAAF,EAAA,aAAArmY;AACA,OAAAmmY,GAAAnpX,EACA,CASA,SAAAwpX,GAAAtyT,EAAAwmC,EAAAjmH,GACA,GAAAy/E,aAAAs6E,EAAAr3I,MAAA+8D,aAAAs6E,EAAAiiJ,SACA,OAAAv8N;AAEAz/E,EAAA,CACA5B,SACA4zY,aAAA,MACAhyY;AAEA,MACAiyY,EAAA,iBAAAxyT;AACA,GAFA,iBAAAA,GAAA,OAAAA,EAGA,IAGA,GAFA5tE,MAAA1T,QAAAshF,MAAAlhF,OAAA,EAGA,OAAAw7J,EAAAiiJ,SAAAk2F,UAAAzyT,EAAA79D,IAAAw0I,GAAAnwC,EAAAksR,aAAA/7O;AAEA,MAAAl0I,EAAA+jG,EAAAksR,aAAA1yT;AAIA,OAHAz/E,EAAAoyY,uBACAlwX,EAAAmqQ,QAEAnqQ,CACA,CACA,MAAAnL,GACA,GAAA/W,EAAAoyY,sBACA,UAAA1zY,MAAA,wCAA0E2zY,MAAAt7X;AAG1E,OADAxD,QAAAC,KAAA,kDAAAisE,EAAA,SAAA1oE,GACAg7X,GAAA,GAAA9rR,EAAAjmH,EACA,CAEA,GAAAiyY,EAAA,CAEA,GAAAjyY,EAAAoyY,sBAAA,CACA,IAAAE,KACAC,EAAA;AAEA,MAAAC,EAAA,IAAAz4O,EAAA0tO,OAAA,CACAlB,QAAAtgR,EAAA8hP,KAAAw+B,QACAG,MAAAzgR,EAAA8hP,KAAA2+B,MAGAvoL,MAAAl4F,EAAA8hP,KAAA5pJ,MAAA7O,OAAA,CACAmjM,6CAAA,CACAhzT,QAAA,UACAwwE,MAAA,QACAg3O,SAAA,CACA,CACApuW,IAAA,IACAotW,SAAA5nY,IAEAi0Y,KAEAC,EAAA,iBAAAl0Y,MAAAq0Y,UACA;AAaA,GANA1yY,EAAA5B,MACA27J,EAAA83O,UAAA5J,WAAAuK,GAAAG,WAAAhB,GAAAlyT,GAAAz/E,EAAAgyY,cAGAj4O,EAAA83O,UAAA5J,WAAAuK,GAAAt+X,MAAAy9X,GAAAlyT,GAAAz/E,EAAAgyY,cAEAhyY,EAAAoyY,uBAAAE,EACA,UAAA5zY,MAAA,wCAA0E2zY,MAAA,IAAA3zY,MAAA,0BAA2C6zY,MAErH,CACA,MAAAl7P,EAAA0iB,EAAA83O,UAAA5J,WAAAhiR;AACA,OAAAjmH,EAAA5B,MACAi5I,EAAAs7P,WAAAhB,GAAAlyT,GAAAz/E,EAAAgyY,cAAAvyT,QAEA43D,EAAAnjI,MAAAy9X,GAAAlyT,GAAAz/E,EAAAgyY,aACA,CACA,OAAAD,GAAA,GAAA9rR,EAAAjmH,EACA,CAGA,SAAA4yY,GAAA31V,EAAA41V,EAAAC,GACA,MAAA5kN,EAAAjxI,EAAAhqC,MAAA1U,OAAA;AACA,GAAA2vL,EAAA2kN,EACA;AAEA,MAAAhoQ,EAAA5tF,EAAAhqC,MAAAi7K;AACA,KAAArjD,aAAA7mH,EAAA+uX,aAAAloQ,aAAA7mH,EAAAgvX,mBACA;AAEA,MAAApxX,EAAAq7B,EAAAogI,QAAA41N,KAAA/kN;AACA,IAAA/wK,EAAA;AACAyE,EAAApJ,QAAA,CAAA06X,EAAAC,EAAAC,EAAAC,KACA,IAAAl2X,IACAA,EAAAk2X,KAGAp2V,EAAAq2V,aAAArzX,EAAAixX,UAAAqC,KAAAt2V,EAAAt0B,IAAAqqD,QAAA71D,GAAA21X,GACA,CAgLA,SAAAU,KACA,0BAAApyT,WACA,MAAA/9D,KAAA+9D,UAAAllE,SAEA,CA8EA,SAAAu3X,GAAAxzX,EAAAyzX,EAAAt5V,EAAA,IACA,MAAA7uB,KAAYA,EAAAk/B,KAAA6wC,SAAkBr7E,EAAA8xF,UAC9BjwG,EAAA4xY,EAAAzO,EAAAyO,EAAAzzX,EAAAgmG,QAAA,KACA0tR,EAAA;AACA1zX,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACA,GAAAp2B,EAAAymX,OACA;AAEA,MAAAiL,EAAA7yY,KAAA+b,IAAAyO,EAAA+sB,GACAu7V,EAAA9yY,KAAA8b,IAAA4tC,EAAAnS,EAAAp2B,EAAAwuX;AACAiD,EAAA/tY,KAAA,CACAsc,OACAqJ,KAAAqoX,EACAnpV,GAAAopV;AAGA,MAAAt1C,EAAA9zS,EAAAl/B,EACAuoX,EAAAH,EACApvX,OAAAwvX,IACAjyY,GAGAA,EAAAsE,OAAA2tY,EAAA7xX,KAAApgB,KAAAsE,MAEAme,OAAAwvX,GAAAphI,EAAAohI,EAAA7xX,KAAA41D,MAAA19B,EAAA,CAAgF8oQ;AAChF,OAAA5nN,IACAw4S,EAAAv1Y,OAEAu1Y,EAAAp3X,OAAA,CAAAs3X,EAAAD,IAAAC,EAAAD,EAAAtpV,GAAAspV,EAAAxoX,KAAA,IACAgzU,CACA,CA8BA,SAAA01C,GAAA7tY,EAAA6/G,GACA,OAAAA,EAAAk4F,MAAA/3M,GACA,OAEA6/G,EAAAygR,MAAAtgY,GACA,OAEA,IACA,CAOA,SAAA8tY,GAAArkW,EAAAskW,GACA,MAAA7rV,EAAA,iBAAA6rV,EACA,CAAAA,GACAA;AACA,OAAApuX,OACA2wB,KAAA7G,GACAnzB,OAAA,CAAA0qS,EAAAl+H,KACA5gI,EAAAvlD,SAAAmmL,KACAk+H,EAAAl+H,GAAAr5I,EAAAq5I,IAEAk+H,GACK,GACL,CAgFA,SAAAgtF,GAAA30T,EAAAwmC,EAAA+rR,EAAA,GAA0DhyY,EAAA,IAC1D,OAAA+xY,GAAAtyT,EAAAwmC,EAAA,CACA7nH,SACA4zY,eACAI,sBAAApyY,EAAAoyY,uBAEA,CAyBA,SAAAiC,GAAAp0X,EAAAyzX,GACA,MAAA5xY,EAAA8uY,EAAA8C,EAAAzzX,EAAAgmG,SACA16F,KAAYA,EAAAk/B,KAAA6wC,SAAkBr7E,EAAA8xF,UAC9B20R,EAAA;AACAprS,GACAr7E,EAAAuiX,aACAkE,EAAA9gY,QAAAqa,EAAAuiX,aAEAkE,EAAA9gY,QAAAqa,EAAA8xF,UAAAuiS,MAAA5N,UAGAzmX,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAAvoC,IACAwkX,EAAA9gY,QAAAsc,EAAAwkX;AAGA,MAAArqR,EAAAqqR,EAAAryW,KAAAkgX,KAAAzyY,KAAAsE,OAAAtE,EAAAsE;AACA,OAAAi2G,EAGA,IAAaA,EAAAvkC,OAFb,EAGA,CAuBA,SAAA08T,GAAA35W,GACA,QAAAv8B,EAAA,EAAoBA,EAAAu8B,EAAA45W,UAAqBn2Y,GAAA,GACzC,MAAAwD,KAAgBA,GAAO+4B,EAAA8wV,KAAArtX;AACvB,GAAAwD,EAAA2pY,cAAA3pY,EAAA4yY,mBACA,OAAA5yY,CAEA,CACA,WACA,CA2DA,SAAA6yY,GAAAtE,EAAAtzP,GACA,QAAAz+I,EAAA+xY,EAAAuE,MAA6Bt2Y,EAAA,EAAOA,GAAA,GACpC,MAAA4jB,EAAAmuX,EAAAnuX,KAAA5jB;AACA,GAAAy+I,EAAA76H,GACA,OACAo2B,IAAAh6C,EAAA,EAAA+xY,EAAAr1N,OAAA18K,GAAA,EACA4e,MAAAmzX,EAAAnzX,MAAA5e,GACAs2Y,MAAAt2Y,EACA4jB,OAGA,CACA,CAUA,SAAA2yX,GAAA93P,GACA,OAAAhrC,GAAA4iS,GAAA5iS,EAAAq2R,MAAArrP,EACA,CAEA,SAAA52B,GAAA49Q,EAAAnB,GAEA,OAAAyD,EADA4G,EAAAj6T,QAAA+wT,GACAnB,EACA,CAmCA,SAAAkS,GAAA5yX,EAAAliB,GAKA,OAAAsvY,EAAAptX,EAJA,CACAqJ,KAAA,EACAk/B,GAAAvoC,EAAAu9D,QAAApjE,MAEArc,EACA,CAsBA,SAAA+0Y,GAAA90X,EAAAyzX,GACA,MAAA5xY,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG,SACA16F,KAAYA,EAAAk/B,MAAWxqC,EAAA8xF,UACvBosG,EAAA;AACAl+L,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAAvoC,IACAi8L,EAAAv4M,KAAAsc;AAEA,MAAAA,EAAAi8L,EAAAhvM,UAAAklB,KAAA2gX,KAAAlzY,KAAAsE,OAAAtE,EAAAsE;AACA,OAAA8b,EAGA,IAAaA,EAAA41D,OAFb,EAGA,CAQA,SAAAm9T,GAAAh1X,EAAAyzX,GACA,MAAAwB,EAAAjB,GAAA,iBAAAP,MAAAttY,KAAA6Z,EAAAgmG;AACA,eAAAivR,EACAH,GAAA90X,EAAAyzX,GAEA,SAAAwB,EACAb,GAAAp0X,EAAAyzX,GAEA,EACA,CAMA,SAAAyB,GAAAr9P,EAAAwlJ,EAAArpR,KAAA8iB,WACA,MAAAq+W,EAAA;AACA,OAAAt9P,EAAAvzH,OAAA6xI,IACA,MAAAn/H,EAAAqmQ,EAAAlnI;AACA,OAAArwI,OAAA9iB,UAAA4N,eAAAjI,KAAAwsY,EAAAn+W,KAEAm+W,EAAAn+W,QAEA,CAuGA,SAAAo+W,GAAA9pX,EAAAk/B,EAAA9hC,GACA,MAAA+9W,EAAA;AA8BA,OA5BAn7W,IAAAk/B,EACA9hC,EACAqqD,QAAAznD,GACAm7W,QACAluX,QAAA6jG,IACA,MACAnmC,EAAAk6T,EADAznX,EAAAqqD,QAAAznD,GACA8wF,EAAAv6G;AACAo0E,GAGAwwT,EAAA9gY,KAAA,CACAy2G,UACAnmC,MAKAvtD,EAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACAp2B,QAAAuN,KAAAvN,aAAA,EAAAA,EAAAwuX,WAGAhK,EAAA9gY,QAAAsc,EAAAwkX,MAAA9kX,IAAAy6F,KACA9wF,KAAA+sB,EACAmS,GAAAnS,EAAAp2B,EAAAwuX,SACAr0R,aAIAqqR,CACA,CAiCA,SAAA4O,GAAAlR,EAAAmR,EAAAn7V,GACA,OAAAr0B,OAAAipB,YAAAjpB,OACAoH,QAAAitB,GACA71B,OAAA,EAAAne,MACA,MAAA4gY,EAAA5C,EAAA/vW,KAAA+hI,GACAA,EAAAt0J,OAAAyzY,GAAAn/O,EAAAhwJ;AAEA,QAAA4gY,GAGAA,EAAAlC,UAAAJ,cAEA,CAEA,SAAA8Q,GAAAv1X,EAAAyzX,EAAAt5V,EAAA,IACA,MAAAkhD,MAAYA,EAAAsI,UAAgB3jF,EAAA8xF,UAC5BjwG,EAAA4xY,EAAA9C,EAAA8C,EAAAzzX,EAAAgmG,QAAA;AACA,GAAA3qB,EACA,SAAAr7E,EAAAuiX,aAAAviX,EAAA8xF,UAAAq2R,MAAA1B,SACAniX,OAAA83F,IACAv6G,GAGAA,EAAAsE,OAAAi2G,EAAAv6G,KAAAsE,MAEAiuB,KAAAgoF,GAAAs2J,EAAAt2J,EAAAvkC,MAAA19B,EAAA,CAAmE8oQ;AAEnE,IAAAq7C,EAAA;AACA,MAAAk3C,EAAA;AAmBA,GAlBA7xS,EAAAprF,QAAA,EAAsB4vX,QAAA2H,UACtB,MAAAxkX,EAAA68W,EAAA9vV,IACAmS,EAAAslV,EAAAz3V;AACAr4B,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACA,IAAAp2B,EAAAymX,SAAAzmX,EAAAwkX,MAAAnoY,OACA;AAEA,MAAAq1Y,EAAA7yY,KAAA+b,IAAAyO,EAAA+sB,GACAu7V,EAAA9yY,KAAA8b,IAAA4tC,EAAAnS,EAAAp2B,EAAAwuX;AAEAnyC,GADAs1C,EAAAD,EAEA6B,EAAA7vY,QAAAsc,EAAAwkX,MAAA9kX,IAAAy6F,KACAA,OACA9wF,KAAAqoX,EACAnpV,GAAAopV,UAIA,IAAAt1C,EACA;AAGA,MAAAm3C,EAAAD,EACAlxX,OAAAoxX,IACA7zY,GAGAA,EAAAsE,OAAAuvY,EAAAt5R,KAAAv6G,KAAAsE,MAEAme,OAAAoxX,GAAAhjI,EAAAgjI,EAAAt5R,KAAAvkC,MAAA19B,EAAA,CAAgF8oQ,aAChFxmS,OAAA,CAAAs3X,EAAA2B,IAAA3B,EAAA2B,EAAAlrV,GAAAkrV,EAAApqX,KAAA,GAGAqqX,EAAAH,EACAlxX,OAAAoxX,IACA7zY,GAGA6zY,EAAAt5R,KAAAv6G,UAAA6zY,EAAAt5R,KAAAv6G,KAAAylY,SAAAzlY,IAEA4a,OAAA,CAAAs3X,EAAA2B,IAAA3B,EAAA2B,EAAAlrV,GAAAkrV,EAAApqX,KAAA;AAIA,OADAmqX,EAAA,EAAAA,EAAAE,EAAAF,IACAn3C,CACA,CAEA,SAAA52I,GAAA1nM,EAAA7Z,EAAAg0C,EAAA,IACA,IAAAh0C,EACA,OAAAqtY,GAAAxzX,EAAA,KAAAm6B,IAAAo7V,GAAAv1X,EAAA,KAAAm6B;AAEA,MAAA86V,EAAAjB,GAAA7tY,EAAA6Z,EAAAgmG;AACA,eAAAivR,EACAzB,GAAAxzX,EAAA7Z,EAAAg0C,GAEA,SAAA86V,GACAM,GAAAv1X,EAAA7Z,EAAAg0C,EAGA,CA6BA,SAAAy7V,GAAAzvY,EAAA29X,GACA,MAAAE,eAAYA,GAAiBH,EAAAC,GAC7BxqV,EAAA0qV,EAAA5vW,KAAA+hI,KAAAhwJ;AACA,IAAAmzC,EACA;AAEA,MAKA02G,EAAA21O,EAAA/B,EAAAtqV,EAAA,QALA,CACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ;AAGA,uBAAAruJ,GAGAA,EAAAh6I,MAAA,KAAAlT,SAAA,OACA,CAKA,SAAA+yY,GAAA5zX,GAAA6zX,cAA6BA,KAAAC,uBAAkD,IAC/E,IAAA33W;AACA,GAAA23W,EAAA,CACA,iBAAA9zX,EAAApgB,KAAAsE,KAEA;AAEA,GAAA8b,EAAAymX,OACA,eAAAtlX,KAAA,QAAAgb,EAAAnc,EAAA7gB,YAAA,IAAAg9B,IAAA,GAEA,CACA,GAAAnc,EAAAymX,OACA,OAAAzmX,EAAA7gB;AAEA,GAAA6gB,EAAAwmX,QAAAxmX,EAAA+zX,OACA;AAEA,OAAA/zX,EAAAu9D,QAAAkxT,WACA;AAEA,GAAAoF,EAAA,CACA,IAAAG;AAUA,OATAh0X,EAAAu9D,QAAAjnE,QAAAmuS,SACAuvF,IAIAJ,GAAAnvF,EAAA,CAA0CqvF,mBAAAD,oBAC1CG,SAGAA,CACA,CACA,QACA,CAwCA,SAAAC,IAAAnzF,KAAsCA,EAAAozF,aAAAC,aAAAr2Y,UAAAs2Y,mBAAA,KA0BtC,OAzBAtzF,EAAA0jF,OAAA70X,MAAA1T,QAAA6kT,EAAA0jF,SACA1jF,EAAA0jF,MAAA1jF,EAAA0jF,MAAAniX,OAAA83F,IACA,MAAAj2G,EAAA,iBAAAi2G,MAAAv6G;AACA,QAAAs0Y,EAAAxnX,IAAAxoB,KAGAkwY,EAAA1wY,KAAA,CACA8lE,SAAAz3D,KAAAC,MAAAD,KAAA8iB,UAAAslF,IACAk6R,YAAAnwY,WAMA48S,EAAAvjO,SAAA5tE,MAAA1T,QAAA6kT,EAAAvjO,WACAujO,EAAAvjO,QAAAujO,EAAAvjO,QACA79D,IAAAjhB,GAAAw1Y,GAAA,CACAnzF,KAAAriT,EACAy1Y,aACAC,aACAr2Y,UACAs2Y,qBACStzF,MACTz+R,OAAAzlB,aAEAkkT,EAAAlhT,OAAAu0Y,EAAAznX,IAAAo0R,EAAAlhT,OACAw0Y,EAAA1wY,KAAA,CACA8lE,SAAAz3D,KAAAC,MAAAD,KAAA8iB,UAAAisR,IACAuzF,YAAAvzF,EAAAlhT,OAEAkhT,EAAAvjO,SAAA5tE,MAAA1T,QAAA6kT,EAAAvjO,gBAAAz/E,aAAA,EAAAA,EAAAw2Y,sBAEAxzF,EAAAlhT,KAAA,YACA,CACAkhT,OACAszF,qBAIA,CACAtzF,KAAA,KACAszF,qBAGA,CAAatzF,OAAAszF,mBACb,CAoKA,SAAAG,GAAAx2X,EAAAitX,GACA,MAAAxG,EAAAzmX,EAAAuiX,aAAAviX,EAAA8xF,UAAAg+R,IAAAvH,cAAAvoX,EAAA8xF,UAAAq2R,MAAA1B;AACA,GAAAA,EAAA,CACA,MAAAgQ,EAAAhQ,EAAAniX,OAAA83F,GAAA6wR,aAAA,EAAAA,EAAAnqY,SAAAs5G,EAAAv6G,KAAAsE;AACA6Z,EAAAg9B,GAAAw5V,YAAAC,EACA,CACA,CACA,MAiKAC,GAAA,CAAA15V,EAAA25V,KACA,MAAAvxX,EAAAwvX,GAAA3yX,KAAApgB,OAAA80Y,EAAA/B,CAAA53V,EAAA80D;AACA,IAAA1sF,EACA;AAEA,MAAA21J,EAAA/9H,EAAAt0B,IAAAqqD,QAAAjyE,KAAA+b,IAAA,EAAAuI,EAAAizB,IAAA,IAAA0iI,OAAA31J,EAAAuvX;AACA,QAAAnlX,IAAAurJ,EACA;AAEA,MAAAiuN,EAAAhsV,EAAAt0B,IAAAkuX,OAAA77N;AAEA,OADA31J,EAAAnD,KAAApgB,QAAAmnY,aAAA,EAAAA,EAAAnnY,QAAAkiB,EAAA8yX,QAAA75V,EAAAt0B,IAAAtD,EAAAizB,OAIA2E,EAAAnnC,KAAAuP,EAAAizB,UAGAy+V,GAAA,CAAA95V,EAAA25V,KACA,MAAAvxX,EAAAwvX,GAAA3yX,KAAApgB,OAAA80Y,EAAA/B,CAAA53V,EAAA80D;AACA,IAAA1sF,EACA;AAEA,MAAA41J,EAAAh+H,EAAAt0B,IAAAqqD,QAAA3tD,EAAAnI,OAAA+9J,MAAA51J,EAAAuvX;AACA,QAAAnlX,IAAAwrJ,EACA;AAEA,MAAAiuN,EAAAjsV,EAAAt0B,IAAAkuX,OAAA57N;AAEA,OADA51J,EAAAnD,KAAApgB,QAAAonY,aAAA,EAAAA,EAAApnY,QAAAkiB,EAAA8yX,QAAA75V,EAAAt0B,IAAAsyJ,KAIAh+H,EAAAnnC,KAAAmlK;AA0QA,IAAA8nN,GAAAh9W,OAAA4jE,OAAA,CACAgQ,UAAA,KACAjtF,KA5sEA,MAAsBk2X,SAAAvtT,WACtBtnD,sBAAA,KACA,IAAAsQ;AACAukW,EAAAp9S,cACAnQ,EAAA22T,IAAAt/X,OAGA,QAAA2xB,EAAA,OAAA52B,aAAA,IAAAA,YAAA,EAAAA,OAAAgsF,sBAAA,IAAAp1D,KAAA41D,yBAssEA+iT,aAhsEA,CAAAC,OAAA,EAAgDlU,cAChDA,EAAAmU,WAAA,GAAAD,GAgsEAE,WA7rEA,MAA4Bl3X,QAAAg9B,KAAA6mO,eAC5B,MAAA/xK,UAAYA,GAAY90D,GACxB2mD,OAAYA,GAASmO;AACrB,OAAA+xK,IAGAlgL,EAAAprF,QAAA,EAAsB4vX,QAAA2H,UACtB9vX,EAAA0I,IAAA8/W,aAAAL,EAAA9vV,IAAAy3V,EAAAz3V,IAAA,CAAAp2B,EAAAo2B,KACA,GAAAp2B,EAAApgB,KAAA6mY,OACA;AAEA,MAAAhgX,IAAoBA,EAAA00J,WAAepgI,EACnCm6V,EAAAzuX,EAAAqqD,QAAAqqG,EAAAz7J,IAAA02B,IACA++V,EAAA1uX,EAAAqqD,QAAAqqG,EAAAz7J,IAAA02B,EAAAp2B,EAAAwuX,WACAqD,EAAAqD,EAAAE,WAAAD;AACA,IAAAtD,EACA;AAEA,MAAAwD,EAAAvzX,EAAAwzX,WAAAzD;AACA,GAAA7xX,EAAApgB,KAAA2pY,YAAA,CACA,MAAAgM,YAAwBA,GAAcL,EAAAtxX,OAAA4xX,eAAAN,EAAArwY;AACtCk2C,EAAA06V,cAAA5D,EAAA72X,MAAAu6X,EACA,EACAF,GAAA,IAAAA,IACAt6V,EAAA26V,KAAA7D,EAAAwD,YAsqEApU,QA/pEA70W,GAAAg6B,GACAh6B,EAAAg6B,GA+pEAuvV,oBA5pEA,MAAqC53X,QAAA6jQ,cACrCs+G,EAAAyV,oBAAA53X,EAAA6jQ,GA4pEAg0H,IAzpEA,CAAAC,EAAAC,IAAA,EAA2CpV,SAAA3lV,SAC3C,MAAYh9B,MAAAg4X,GAAiBrV,EAC7BsV,EAAAD,EAAAtvX,IAAAvqB,MAAA25Y,EAAAxsX,KAAAwsX,EAAAttV;AACAxN,EAAAkvV,YAAA4L,EAAAxsX,KAAAwsX,EAAAttV;AACA,MAAA0tV,EAAAl7V,EAAAogI,QAAAz7J,IAAAo2X;AAGA,OAFA/6V,EAAAm7V,OAAAD,EAAAD,EAAAz4T,SACAxiC,EAAAq2V,aAAA,IAAArzX,EAAA6wX,cAAA7zV,EAAAt0B,IAAAqqD,QAAAjyE,KAAA+b,IAAAq7X,EAAA,YAopEAE,kBAhpEA,MAAmCp7V,KAAA6mO,eACnC,MAAA/xK,UAAYA,GAAY90D,EACxBhzB,EAAA8nF,EAAAumS,QAAAp2X;AAEA,GAAA+H,EAAAw1D,QAAApjE,KAAA,EACA;AAEA,MAAAg0X,EAAApzV,EAAA80D,UAAAumS;AACA,QAAA1D,EAAAvE,EAAAuE,MAAiCA,EAAA,EAAWA,GAAA,EAE5C,GADAvE,EAAAnuX,KAAA0yX,GACA9yY,OAAAmoB,EAAAnoB,KAAA,CACA,GAAAgiR,EAAA,CACA,MAAAv4P,EAAA8kX,EAAAr1N,OAAA45N,GACAnqV,EAAA4lV,EAAAp1N,MAAA25N;AACA33V,EAAAqmC,OAAA/3D,EAAAk/B,GAAA8tV,gBACA,CACA,QACA,CAEA,UA8nEAC,WA3nEA9E,GAAA,EAAoCz2V,KAAAh9B,QAAA6jQ,eACpC,MAAAhiR,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG,QACAoqR,EAAApzV,EAAA80D,UAAAumS;AACA,QAAA1D,EAAAvE,EAAAuE,MAAiCA,EAAA,EAAWA,GAAA,EAE5C,GADAvE,EAAAnuX,KAAA0yX,GACA9yY,SAAA,CACA,GAAAgiR,EAAA,CACA,MAAAv4P,EAAA8kX,EAAAr1N,OAAA45N,GACAnqV,EAAA4lV,EAAAp1N,MAAA25N;AACA33V,EAAAqmC,OAAA/3D,EAAAk/B,GAAA8tV,gBACA,CACA,QACA,CAEA,UA8mEApM,YA3mEAj2T,GAAA,EAAgCj5B,KAAA6mO,eAChC,MAAAv4P,KAAYA,EAAAk/B,MAAWyrB;AAIvB,OAHA4tM,GACA7mO,EAAAqmC,OAAA/3D,EAAAk/B,OAymEAguV,gBApmEA,MAAiCx4X,QAAA6jQ,cACjCs+G,EAAAqW,gBAAAx4X,EAAA6jQ,GAomEAyE,MAjmEA,MAAuBw6G,cACvBA,EAAA2V,iBAAA,SAimEAC,SA9lEA,MAA0B14X,QAAA6jQ,cAC1Bs+G,EAAAuW,SAAA14X,EAAA6jQ,GA8lEA80H,gBAv/DA,CAAAlF,EAAAt5V,EAAA,KAAoD,EAAQ6C,KAAAh9B,MAAAg4X,EAAAn0H,eAC5D,MAAAhiR,EAAA8uY,EAAA8C,EAAAuE,EAAAhyR,SACAt9F,IAAYA,EAAAopF,aAAiB90D,GAC7BmrV,MAAYA,EAAA78W,OAAAk/B,MAAkBsnD;AAC9B,GAAA+xK,EAAA,CACA,MAAA5tM,EAAAk6T,EAAAhI,EAAAtmY,EAAAs4C;AACA,GAAA87B,KAAA3qD,SAAA2qD,EAAAzrB,MAAA,CACA,MAAA+hK,EAAAvsM,EAAA6wX,cAAAvuY,OAAAomB,EAAAutD,EAAA3qD,KAAA2qD,EAAAzrB;AACAxN,EAAAq2V,aAAA9mL,EACA,CACA,CACA,UA6+DAz8K,MA1+DAgzV,GAAAz6U,IACA,MAAAwxH,EAAA,mBAAAipN,EACAA,EAAAz6U,GACAy6U;AACA,QAAAzkY,EAAA,EAAoBA,EAAAw7K,EAAAv7K,OAAkBD,GAAA,EACtC,GAAAw7K,EAAAx7K,GAAAgqD,GACA;AAGA,UAk+DAj5C,MAt6DA,CAAAua,EAAA,KAAA5pB,EAAA,KAA4C,EAAQ4iY,SAAAvtT,OAAAp4B,KAAA6mO,eACpD9jR,EAAA,CACAu4Y,qBACAv4Y;AAEA,MAAA64Y,EAAA,MAGArH,MAAAD,OACAl8T,EAAA22T,IAAA38X,QAIA0e,sBAAA,KACA60W,EAAAp9S,cACAnQ,EAAAhmE,SAKAoiY,MAAAD,MAAAD,MACAl8T,EAAA22T,IAAA38X,MAAA,CAAqCs1K;AAKrC,GAAAtvG,EAAAyjU,YAAA,OAAAlvX,UACA;AAGA,GAAAk6P,GAAA,OAAAl6P,IAAAinX,EAAAjO,EAAA3iX,MAAA8xF,WAEA,OADA8mS;AAKA,MAAA9mS,EAAAi/R,GAAA/zV,EAAAt0B,IAAAiB,IAAAg5W,EAAA3iX,MAAA8xF,UACAgnS,EAAAnW,EAAA3iX,MAAA8xF,UAAAggJ,GAAAhgJ;AAYA,OAXA+xK,IACAi1H,GACA97V,EAAAq2V,aAAAvhS,GAIAgnS,GAAA97V,EAAAulV,aACAvlV,EAAA+7V,eAAA/7V,EAAAulV,aAEAqW,SAw3DArgY,QAn3DA,CAAAshK,EAAAxrJ,IAAAg6B,GACAwxH,EAAAzpJ,MAAA,CAAA+lI,EAAArvJ,IAAAunB,EAAA8nI,EAAA,IAAmD9tG,EAAAvhD,WAm3DnDkyY,cAh3DA,CAAAt4Y,EAAAX,IAAA,EAA6Ci9C,KAAA8lV,cAC7CA,EAAAmW,gBAAA,CAAsC3tX,KAAA0xB,EAAA80D,UAAAxmF,KAAAk/B,GAAAxN,EAAA80D,UAAAtnD,IAA8C9pD,EAAAX,GAg3DpFk5Y,gBA1uDA,CAAAtvX,EAAAjpB,EAAAX,IAAA,EAAyDi9C,KAAA6mO,WAAA8+G,aACzD,IAAAvkW;AACA,GAAAylP,EAAA,CAQA,IAAArkM;AACA,MAAA05T,EAAApiY,IACA6rX,EAAAvrO,KAAA,gBACAurO,SACA7rX,QACAqiY,qBAAA,KACAxW,EAAAtkF,QAAA+6F,gBACAzW,EAAAtkF,QAAA+6F,cAAAz/T,mBAKAo4T,EAAA,CACAsH,mBAAA,WApBAt5Y,EAAA,CACAgyY,aAAApP,EAAA5iY,QAAAgyY,aACAuH,mBACAC,mBACAC,sBACAz5Y,IAgBAgyY;AAIA,IAAAhyY,EAAAoyY,wBAAAxP,EAAA5iY,QAAA05Y,oBAAA9W,EAAA5iY,QAAAm5Y,iBACA,IACApH,GAAApxY,EAAAiiY,EAAA38Q,OAAA,CACA+rR,eACAI,0BAEA,CACA,MAAA/zY,GACA86Y,EAAA96Y,EACA,CAEA,IACAohF,EAAAsyT,GAAApxY,EAAAiiY,EAAA38Q,OAAA,CACA+rR,eACAI,sBAAA,QAAA/zW,EAAAr+B,EAAAoyY,6BAAA,IAAA/zW,IAAAukW,EAAA5iY,QAAA05Y,oBAEA,CACA,MAAAr7Y,GAEA,OADA86Y,EAAA96Y,KAEA,CACA,IAuBAs7Y,GAvBApuX,KAAcA,EAAAk/B,MAAW,iBAAA7gC,EAAA,CAAmC2B,KAAA3B,EAAA6gC,GAAA7gC,GAA+B,CAAI2B,KAAA3B,EAAA2B,KAAAk/B,GAAA7gC,EAAA6gC,IAC/FmvV,KACAC;AAaA,IAlEA,SAsDAp6T,EAAA,CAAAA,MACAjnE,QAAA0J,IAEAA,EAAAmqQ,QACAutH,OAAA13X,EAAAymX,QAAA,IAAAzmX,EAAAwkX,MAAAnoY,OACAs7Y,OAAA33X,EAAAmlJ,UAOA97I,IAAAk/B,GAAAovV,EAAA,CACA,MAAA/zX,OAAoBA,GAASm3B,EAAAt0B,IAAAqqD,QAAAznD;AAC7BzF,EAAA2lX,cAAA3lX,EAAAhkB,KAAAimW,KAAAtzV,OAAAqR,EAAA6qX,aAEAplX,GAAA,EACAk/B,GAAA,EAEA,CAIA,GAAAmvV,EAAA,CAGA,GAAA/nY,MAAA1T,QAAAwC,GACAg5Y,EAAAh5Y,EAAAihB,IAAAtS,KAAAjO,MAAA,IAAAyU,KAAA;KAEA,GAAAnV,aAAAo5J,EAAAiiJ,SAAA,CACA,IAAA36S,EAAA;AACAV,EAAA6X,QAAA0J,IACAA,EAAA7gB,OACAA,GAAA6gB,EAAA7gB,QAGAs4Y,EAAAt4Y,CACA,MAEAs4Y,EADA,iBAAAh5Y,QAAAU,KACAV,EAAAU,KAGAV;AAEAs8C,EAAA0tV,WAAAgP,EAAApuX,EAAAk/B,EACA,MAEAkvV,EAAAl6T,EACAxiC,EAAAmsV,YAAA79W,EAAAk/B,EAAAkvV;AAGA35Y,EAAAu5Y,iBACA3G,GAAA31V,IAAAhqC,MAAA1U,OAAA,MAEAyB,EAAAw5Y,iBACAv8V,EAAAosV,QAAA,mBAA4C99W,OAAAlqB,KAAAs4Y,IAE5C35Y,EAAAy5Y,iBACAx8V,EAAAosV,QAAA,mBAA4C99W,OAAAlqB,KAAAs4Y,GAE5C,CACA,UA0nDAG,aAjnDA,MAA8B75X,QAAA6jQ,cAC9Bs+G,EAAA0X,aAAA75X,EAAA6jQ,GAinDAi2H,SArnDA,MAA0B95X,QAAA6jQ,cAC1Bs+G,EAAA2X,SAAA95X,EAAA6jQ,GAqnDAk2H,YAhnDA,MAA6B/5X,QAAA6jQ,cAC7Bs+G,EAAA4X,YAAA/5X,EAAA6jQ,GAgnDAm2H,iBA7mDA,MAAkCh6X,QAAA6jQ,WAAA7mO,SAClC,IACA,MAAAy2G,EAAA1vI,EAAAk2X,UAAAj6X,EAAA0I,IAAA1I,EAAA8xF,UAAAq2R,MAAA9vV,KAAA;AACA,OAAAo7G,UAGAz2G,EAAAnnC,KAAA49I,EAAA,GACAowH,GACAA,EAAA7mO,MAGA,CACA,MACA,QACA,GAgmDAk9V,gBA7lDA,MAAiCl6X,QAAA6jQ,WAAA7mO,SACjC,IACA,MAAAy2G,EAAA1vI,EAAAk2X,UAAAj6X,EAAA0I,IAAA1I,EAAA8xF,UAAAq2R,MAAA9vV,IAAA;AACA,OAAAo7G,UAGAz2G,EAAAnnC,KAAA49I,EAAA,GACAowH,GACAA,EAAA7mO,MAGA,CACA,MACA,QACA,GAglDAm9V,sBA7kDA,MAAuCn6X,QAAA6jQ,cACvCs+G,EAAAgY,sBAAAn6X,EAAA6jQ,GA6kDAu2H,qBA1kDA,MAAsCp6X,QAAA6jQ,cACtCs+G,EAAAiY,qBAAAp6X,EAAA6jQ,GA0kDAw2H,OA9nDA,MAAwBr6X,QAAA6jQ,cACxBs+G,EAAAkY,OAAAr6X,EAAA6jQ,GA8nDA40H,iBAhhDAtyY,GAAA,EAAoCw8X,SAAAvtT,OAAAp4B,KAAA6mO,eACpC,MAAAptO,EAnDA,SAAAtwC,GACA,MAAA0/C,EAAA1/C,EAAA6P,MAAA;AACA,IAIAskY,EACAC,EACA1oY,EACA6lS,EAPA1yR,EAAA6gC,IAAAvnD,OAAA;AACA,UAAA0mB,IACAA,EAAA;AAMA,QAAA3mB,EAAA,EAAoBA,EAAAwnD,EAAAvnD,OAAA,EAAsBD,GAAA,GAC1C,MAAAi+R,EAAAz2O,EAAAxnD;AACA,qBAAA+kB,KAAAk5Q,GACAob;KAEA,eAAAt0R,KAAAk5Q,GACAg+G;KAEA,yBAAAl3X,KAAAk5Q,GACAi+G;KAEA,iBAAAn3X,KAAAk5Q,GACAzqR;IAEA,cAAAuR,KAAAk5Q,GASA,UAAA79R,MAAA,+BAA2D69R;AAR3Di1G,MAAAgC,KACA77F,KAGA6iG,IAKA,CACA,CAaA,OAZAD,IACAt1X,EAAA,OAAwBA,KAExBu1X,IACAv1X,EAAA,QAAyBA,KAEzB0yR,IACA1yR,EAAA,QAAyBA,KAEzBnT,IACAmT,EAAA,SAA0BA,KAE1BA,CACA,CAjDA,CAmDA7e,GAAA6P,MAAA,UACAghB,EAAAyf,EAAAriB,KAAA+hI,IAAA,8BAAArzJ,SAAAqzJ,IACA1uJ,EAAA,IAAAuoG,cAAA,WACAh5E,IAAA,UAAAA,EACA,IACAA,EACAi0E,OAAAx0D,EAAA3zC,SAAA,OACAsqG,QAAA32D,EAAA3zC,SAAA,QACA0qG,QAAA/2D,EAAA3zC,SAAA,QACAuqG,SAAA52D,EAAA3zC,SAAA,SACA8xF,WACAC,gBAEA2lT,EAAA7X,EAAA8X,mBAAA,KACArlU,EAAAslU,SAAA,gBAAAzwY,KAAAmrE,EAAA3tE;AAQA,OANA+yY,WAAAxnY,MAAAuF,QAAAqyH,IACA,MAAA+vQ,EAAA/vQ,EAAAjpH,IAAAq7B,EAAAogI;AACAu9N,GAAA92H,GACA7mO,EAAA49V,UAAAD,SA6/CAhD,KAv9CA,CAAAlE,EAAAt5V,EAAA,KAAyC,EAAQn6B,QAAA6jQ,gBAEjD2vH,GAAAxzX,EADAglX,EAAAyO,EAAAzzX,EAAAgmG,QACA7rE,IAIAgoV,EAAAwV,KAAA33X,EAAA6jQ,GAk9CAg3H,eA/8CA,MAAgC76X,QAAA6jQ,cAChCs+G,EAAA0Y,eAAA76X,EAAA6jQ,GA+8CAi3H,aA58CArH,GAAA,EAAsCzzX,QAAA6jQ,eACtC,MAAAhiR,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG;AACA,OAAAo8Q,EAAA0Y,aAAAj5Y,EAAAugY,CAAApiX,EAAA6jQ,IA28CAk3H,cAx8CA,MAA+B/6X,QAAA6jQ,cAC/Bs+G,EAAA4Y,cAAA/6X,EAAA6jQ,GAw8CAm3H,gBAl6CA,CAAAvH,EAAAt5V,IAAA,EAAuD6C,KAAAh9B,QAAA6jQ,eACvD,IAAA1uL,EAAA,KACA8lT,EAAA;AACA,MAAAhG,EAAAjB,GAAA,iBAAAP,MAAAttY,KAAA6Z,EAAAgmG;AACA,QAAAivR,IAGA,SAAAA,IACA9/S,EAAA6vS,EAAAyO,EAAAzzX,EAAAgmG,SAEA,SAAAivR,IACAgG,EAAAtK,EAAA8C,EAAAzzX,EAAAgmG,SAEA69J,GACA7mO,EAAA80D,UAAAnO,OAAAprF,QAAA09D,IACAj2D,EAAA0I,IAAA8/W,aAAAvyT,EAAAkyT,MAAA9vV,IAAA49B,EAAA65T,IAAAz3V,IAAA,CAAAp2B,EAAAo2B,KACA88C,OAAAlzE,EAAApgB,MACAm7C,EAAA06V,cAAAr/V,OAAA7oB,EAAAykX,GAAAhyX,EAAA41D,MAAA19B,IAEA8gW,GAAAh5X,EAAAwkX,MAAAnoY,QACA2jB,EAAAwkX,MAAAluX,QAAA6jG,IACA6+R,IAAA7+R,EAAAv6G,MACAm7C,EAAAk+V,QAAA7iW,IAAAp2B,EAAAwuX,SAAAwK,EAAA34Y,OAAA2xY,GAAA73R,EAAAvkC,MAAA19B,gBA64CAm+V,eAn4CA,MAAgCt7V,KAAA6mO,eAChCA,GACA7mO,EAAAs7V,qBAk4CA/3R,UA73CA,MAA2BvjE,KAAA6mO,eAC3B,GAAAA,EAAA,CACA,MAAA/xK,EAAA,IAAA9xF,EAAAm7X,aAAAn+V,EAAAt0B;AACAs0B,EAAAq2V,aAAAvhS,EACA,CACA,UAy3CAspS,mBAt3CA,MAAoCp7X,QAAA6jQ,cACpCs+G,EAAAiZ,mBAAAp7X,EAAA6jQ,GAs3CAw3H,kBAn3CA,MAAmCr7X,QAAA6jQ,cACnCs+G,EAAAkZ,kBAAAr7X,EAAA6jQ,GAm3CAy3H,iBAh3CA,MAAkCt7X,QAAA6jQ,cAClCs+G,EAAAmZ,iBAAAt7X,EAAA6jQ,GAg3CA03H,mBA32CA,MAAoCv7X,QAAA6jQ,cACpCs+G,EAAAoZ,mBAAAv7X,EAAA6jQ,GA22CA23H,qBAt2CA,MAAsCx7X,QAAA6jQ,cACtCs+G,EAAAqZ,qBAAAx7X,EAAA6jQ,GAs2CAozH,WAp1CA,CAAAz3T,EAAAw3T,KAAAjF,EAAA,GAAkEhyY,EAAA,KAAc,EAAQ4iY,SAAA3lV,KAAA6mO,WAAAi/G,eACxF,IAAA1kW,EAAAkiB;AACA,MAAA53B,IAAYA,GAAMs0B;AAGlB,YAAA+0V,EAAAsH,mBAAA,CACA,MAAA32Y,EAAAyxY,GAAA30T,EAAAmjT,EAAA38Q,OAAA+rR,EAAA,CACAI,sBAAA,QAAA/zW,EAAAr+B,EAAAoyY,6BAAA,IAAA/zW,IAAAukW,EAAA5iY,QAAA05Y;AAKA,OAHA51H,GACA7mO,EAAAmsV,YAAA,EAAAzgX,EAAA82D,QAAApjE,KAAA1Z,GAAA0mY,QAAA,iBAAA4N,KAGA,CAIA,OAHAnzH,GACA7mO,EAAAosV,QAAA,iBAAA4N,GAEAlU,EAAAmW,gBAAA,CAAsC3tX,KAAA,EAAAk/B,GAAA9hC,EAAA82D,QAAApjE,MAA+BojE,EAAA,CACrEuyT,eACAI,sBAAA,QAAA7xV,EAAAvgD,EAAAoyY,6BAAA,IAAA7xV,IAAAqiV,EAAA5iY,QAAA05Y,sBAk0CAgC,QAnmBA,CAAAhI,EAAAt5V,EAAA,KAA4C,EAAQ6C,KAAAh9B,QAAA6jQ,eACpD,MAAA/xK,UAAYA,GAAY90D,GACxBq+C,MAAYA,EAAAsI,UAAgBmO,EAC5BjwG,EAAA8uY,EAAA8C,EAAAzzX,EAAAgmG;AACA,GAAA69J,EACA,GAAAxoL,EAAA,CACA,MAAA4qS,EAAAmO,GAAAp0X,EAAAne;AACAm7C,EAAA0+V,cAAA75Y,EAAAS,OAAA,IACA2jY,KACA9rV,IAEA,MAEAwpD,EAAAprF,QAAA09D,IACA,MAAA3qD,EAAA2qD,EAAAkyT,MAAA9vV,IACAmS,EAAAyrB,EAAA65T,IAAAz3V;AACAr4B,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACA,MAAAsjW,EAAA76Y,KAAA+b,IAAAw7B,EAAA/sB,GACAswX,EAAA96Y,KAAA8b,IAAAy7B,EAAAp2B,EAAAwuX,SAAAjmV;AACAvoC,EAAAwkX,MAAAryW,KAAAgoF,KAAAv6G,UAKAogB,EAAAwkX,MAAAluX,QAAA6jG,IACAv6G,IAAAu6G,EAAAv6G,MACAm7C,EAAAk+V,QAAAS,EAAAC,EAAA/5Y,EAAAS,OAAA,IACA85G,EAAAvkC,SACA19B,OAMA6C,EAAAk+V,QAAAS,EAAAC,EAAA/5Y,EAAAS,OAAA63C;AAMA,OA1EA,SAAAn6B,EAAAg9B,EAAA6+V,GACA,IAAAz9W;AACA,MAAA0zE,UAAYA,GAAY90D;AACxB,IAAAqyH,EAAA;AAIA,GAHAuhO,EAAA9+R,KACAu9D,EAAAv9D,EAAAg4R,SAEAz6N,EAAA,CACA,MAAAk7N,EAAA,QAAAnsW,EAAApe,EAAAuiX,mBAAA,IAAAnkW,IAAAixI,EAAAo3N;AAEA,QAAAoV,EAAAC,QAAAvR,KACAA,EAAA/oX,KAAA46F,KAAAv6G,KAAAylY,SAAAuU,GACA,CACA,MAAAl4S,OAAYA,GAASmO;AACrB,OAAAnO,EAAAniF,KAAA,EAA0B2mX,QAAA2H,UAC1B,IAAAiM,EAAA,IAAA5T,EAAAwM,OACA30X,EAAA0I,IAAAszX,eAAAh8X,EAAA0I,IAAA7mB,KAAAo6Y,eAAAJ;AAeA,OAbA77X,EAAA0I,IAAA8/W,aAAAL,EAAA9vV,IAAAy3V,EAAAz3V,IAAA,CAAAp2B,EAAAi6X,EAAAr2X,KAEA,GAAAk2X,EACA;AAEA,GAAA95X,EAAAk6X,SAAA,CACA,MAAAC,GAAAv2X,KAAAhkB,KAAAo6Y,eAAAJ,GACAQ,IAAAR,EAAAC,QAAA75X,EAAAwkX,SACAxkX,EAAAwkX,MAAAjlX,KAAA86X,KAAAz6Y,KAAAylY,SAAAuU;AACAE,EAAAK,GAAAC,CACA,CACA,OAAAN,IAEAA,GAEA,CAjCA,CA0EA/7X,EAAAg9B,EAAAn7C,IA4jBAunY,QAzjBA,CAAApyW,EAAAt2B,IAAA,EAAmCs8C,SACnCA,EAAAosV,QAAApyW,EAAAt2B,OAyjBA67Y,QArjBA,CAAA9I,EAAAt5V,EAAA,KAA4C,EAAQn6B,QAAA6jQ,WAAAu/G,YACpD,MAAAvhY,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG;AACA,IAAAw2R;AAMA,OALAx8X,EAAA8xF,UAAAumS,QAAAoE,WAAAz8X,EAAA8xF,UAAAuiS,SAEAmI,EAAAx8X,EAAA8xF,UAAAumS,QAAAxyX,OAAAgyD,OAGAh2E,EAAA2pY,YAIApI,IAEAF,QAAA,EAAoBJ,gBACpBX,EAAAua,aAAA76Y,EAAA,IAA4D26Y,KAAAriW,GAA5DgoV,CAAgGniX,IAIhG8iX,EAAAoU,cAEAhU,QAAA,EAAoBljX,MAAA28X,KACpBxa,EAAAua,aAAA76Y,EAAA,IAA+C26Y,KAAAriW,GAA/CgoV,CAAmFwa,EAAA94H,IAEnFnsI,OAfApkI,QAAAC,KAAA,6EA6iBAqpY,iBA3hBAjzX,GAAA,EAAwCqzB,KAAA6mO,eACxC,GAAAA,EAAA,CACA,MAAAn7P,IAAgBA,GAAMs0B,EACtB1xB,EAAAwlX,EAAAnnX,EAAA,EAAAjB,EAAA82D,QAAApjE,MACA01F,EAAA9xF,EAAA68X,cAAAv6Y,OAAAomB,EAAA4C;AACA0xB,EAAAq2V,aAAAvhS,EACA,CACA,UAqhBAgrS,iBAlhBAnzX,GAAA,EAAwCqzB,KAAA6mO,eACxC,GAAAA,EAAA,CACA,MAAAn7P,IAAgBA,GAAMs0B,GACtB1xB,KAAgBA,EAAAk/B,MAAW,iBAAA7gC,EAAA,CAAmC2B,KAAA3B,EAAA6gC,GAAA7gC,GAA+BA,EAC7F0nX,EAAArxX,EAAA6wX,cAAAK,QAAAxoX,GAAA4C,KACAksP,EAAAx3P,EAAA6wX,cAAAO,MAAA1oX,GAAA8hC,GACAihV,EAAAqF,EAAAxlX,EAAA+lX,EAAA75H,GACAulI,EAAAjM,EAAAtmV,EAAA6mV,EAAA75H,GACA1lK,EAAA9xF,EAAA6wX,cAAAvuY,OAAAomB,EAAA+iX,EAAAsR;AACA//V,EAAAq2V,aAAAvhS,EACA,CACA,UAwgBAkrS,aArgBAvJ,GAAA,EAAsCzzX,QAAA6jQ,eACtC,MAAAhiR,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG;AACA,OAAAo8Q,EAAA4a,aAAAn7Y,EAAAugY,CAAApiX,EAAA6jQ,IAogBAo5H,WA1fA,EAAsBC,gBAAmB,KAAI,EAAQlgW,KAAAh9B,MAAAg4X,EAAAn0H,WAAA8+G,aACrD,MAAA7wR,UAAYA,EAAAppF,OAAiBs0B,GAC7BmrV,MAAYA,EAAA2H,OAAah+R,EAEzBo0R,EAAAmP,GADA1S,EAAAE,iBAAA1oV,WACAguV,EAAAlmX,OAAApgB,KAAAsE,KAAAgiY,EAAAlmX,OAAA41D;AACA,GAAAi6B,aAAA9xF,EAAA68X,eAAA/qS,EAAA7vF,KAAAmlJ,QACA,SAAA+gO,EAAAI,eAAAxkX,EAAAo5X,SAAAz0X,EAAAy/W,EAAA9vV,OAGAwrO,IACAq5H,GACA1G,GAAAwB,EAAArV,EAAAE,iBAAAoK,iBAEAjwV,EAAAhnC,MAAAmyX,EAAA9vV,KAAAigW,kBAEA;AAEA,IAAAnQ,EAAAtiX,OAAAuhJ,QACA;AAEA,MAAAgqO,EAAAtB,EAAAvH,eAAAuH,EAAAjqX,OAAA25D,QAAApjE,KACAghY,EAAA,IAAAjV,EAAAwM,WACAnlX,EACA+kX,GAAApM,EAAAlmX,MAAA,GAAAw1X,eAAAtP,EAAAkV,YAAA;AACA,IAAArrM,EAAAo/L,GAAAgM,EACA,CACA,CACAv7Y,KAAAu7Y,EACAvlU,MAAAquT,SAGA12W,EACAu9J,EAAAhpK,EAAAo5X,SAAAngW,EAAAt0B,IAAAs0B,EAAAogI,QAAAz7J,IAAAwmX,EAAA9vV,KAAA,EAAA25J;AAcA,GAbAA,GACAjlB,IACAhpK,EAAAo5X,SAAAngW,EAAAt0B,IAAAs0B,EAAAogI,QAAAz7J,IAAAwmX,EAAA9vV,KAAA,EAAA+kW,EAAA,EAA+Ev7Y,KAAAu7Y,SAAa5tX,KAC5Fu9J,KACAilB,EAAAorM,EACA,CACA,CACAv7Y,KAAAu7Y,EACAvlU,MAAAquT,SAGA12W,GAEAq0P,EAAA,CACA,GAAA92F,IACAj7E,aAAA9xF,EAAA6wX,eACA7zV,EAAAw7V,kBAEAx7V,EAAAhnC,MAAAgnC,EAAAogI,QAAAz7J,IAAAwmX,EAAA9vV,KAAA,EAAA25J,GACAorM,IAAAhM,IAAAjJ,EAAAI,cAAAJ,EAAAtiX,OAAAhkB,OAAAu7Y,GAAA,CACA,MAAAttW,EAAAkN,EAAAogI,QAAAz7J,IAAAwmX,EAAAptN,UACAuiO,EAAAtgW,EAAAt0B,IAAAqqD,QAAAjjC;AACAq4V,EAAAlmX,MAAA,GAAAs7X,eAAAD,EAAAx2Y,QAAAw2Y,EAAAx2Y,QAAA,EAAAs2Y,IACApgW,EAAA06V,cAAA16V,EAAAogI,QAAAz7J,IAAAwmX,EAAAptN,UAAAqiO,EAEA,CAEAF,GACA1G,GAAAwB,EAAArV,EAAAE,iBAAAoK,iBAEAjwV,EAAAs7V,gBACA,CACA,OAAAvrN,GA0bAywN,cAvbA,CAAA/J,EAAAgK,EAAA,KAAqD,EAAQzgW,KAAAh9B,MAAAg4X,EAAAn0H,WAAA8+G,aAC7D,IAAAvkW;AACA,MAAAv8B,EAAAmjY,EAAAyO,EAAAuE,EAAAhyR,SACAmiR,MAAYA,EAAA2H,OAAakI,EAAAlmS,UAGzB7vF,EAAA+1X,EAAAlmS,UAAA7vF;AACA,GAAAA,KAAAmlJ,SAAA+gO,EAAAwM,MAAA,IAAAxM,EAAAsU,WAAA3M,GACA;AAEA,MAAA4N,EAAAvV,EAAAlmX,MAAA;AACA,GAAAy7X,EAAA77Y,SACA;AAEA,MAAAsiY,EAAAxB,EAAAE,iBAAA1oV;AACA,OAAAguV,EAAAtiX,OAAA25D,QAAApjE,MAAA+rX,EAAAlmX,MAAA,GAAAyuX,aAAAvI,EAAAkV,YAAA,IAIA,OAAAlV,EAAAwM,OACAxM,EAAAlmX,MAAA,GAAApgB,UACAsmY,EAAArhY,OAAA,KAAAqhY,EAAAlmX,MAAA,GAAAyuX,WAAA,EACA;AAEA,GAAA7sH,EAAA,CACA,IAAAqB,EAAAprH,EAAAiiJ,SAAA1gN;AAEA,MAAAsiT,EAAAxV,EAAArhY,OAAA,KAAAqhY,EAAArhY,OAAA;AAGA,QAAApJ,EAAAyqY,EAAAwM,MAAAgJ,EAAoDjgZ,GAAAyqY,EAAAwM,MAAA,EAAsBj3Y,GAAA,EAC1EwnR,EAAAprH,EAAAiiJ,SAAAzwR,KAAA68W,EAAAlmX,KAAAvkB,GAAAk4J,KAAAsvH;AAGA,MAAA04H,EAAAzV,EAAAkV,YAAA,GAAAlV,EAAAlmX,MAAA,GAAAyuX,WAAA,EAAAvI,EAAAkV,YAAA,GAAAlV,EAAAlmX,MAAA,GAAAyuX,WAAA,IAEAmN,EAAA,IACAxI,GAAAlR,EAAAgE,EAAAlmX,OAAApgB,KAAAsE,KAAAgiY,EAAAlmX,OAAA41D,UACA4lU,GAEAK,GAAA,QAAA1/W,EAAAv8B,EAAAk8Y,aAAAvG,mBAAA,IAAAp5W,OAAA,EAAAA,EAAA4/W,cAAAH,UAAAruX;AACA01P,IAAA71E,OAAAv1C,EAAAiiJ,SAAAzwR,KAAAzpB,EAAAm8Y,cAAA,KAAAF,SAAAtuX;AACA,MAAAvS,EAAAkrX,EAAAptN,OAAAotN,EAAAwM,OAAAgJ,EAAA;AACA3gW,EAAAx+B,QAAAvB,EAAAkrX,EAAAntN,OAAA4iO,GAAA,IAAA9jP,EAAAmkP,MAAA/4H,EAAA,EAAAy4H,EAAA;AACA,IAAAO,GAAA;AACAlhW,EAAAt0B,IAAA8/W,aAAAvrX,EAAA+/B,EAAAt0B,IAAA82D,QAAApjE,KAAA,CAAA7d,EAAA85C,KACA,GAAA6lW,GAAA,EACA;AAEA3/Y,EAAAitY,aAAA,IAAAjtY,EAAAihF,QAAApjE,OACA8hY,EAAA7lW,EAAA,KAGA6lW,GAAA,GACAlhW,EAAAq2V,aAAArzX,EAAA6wX,cAAAyC,KAAAt2V,EAAAt0B,IAAAqqD,QAAAmrU,KAEAlhW,EAAAs7V,gBACA,CACA,QACA,CACA,MAAAwF,EAAAhO,EAAAz3V,MAAA8vV,EAAAjrX,MAAAwgY,EAAAjG,eAAA,GAAAD,YAAA,KACA2G,EAAA,IACA9I,GAAAlR,EAAAuZ,EAAA77Y,KAAAsE,KAAAu3Y,EAAA7lU,UACA4lU,GAEAI,EAAA,IACAxI,GAAAlR,EAAAgE,EAAAlmX,OAAApgB,KAAAsE,KAAAgiY,EAAAlmX,OAAA41D,UACA4lU;AAEAzgW,EAAAqmC,OAAA8kT,EAAA9vV,IAAAy3V,EAAAz3V;AACA,MAAA25J,EAAA8rM,EACA,CACA,CAAcj8Y,OAAAg2E,MAAAsmU,GACd,CAAct8Y,KAAAi8Y,EAAAjmU,MAAAgmU,IAEd,EAAah8Y,OAAAg2E,MAAAsmU;AACb,IAAAp6X,EAAAo5X,SAAAngW,EAAAt0B,IAAAy/W,EAAA9vV,IAAA,GACA;AAEA,GAAAwrO,EAAA,CACA,MAAA/xK,UAAgBA,EAAAywR,eAAyByV,GACzC/K,gBAAgBA,GAAkBtK,EAAAE,iBAClC4D,EAAAlE,GAAAzwR,EAAAg+R,IAAAvH,cAAAz2R,EAAAq2R,MAAA1B;AAEA,GADAzpV,EAAAhnC,MAAAmyX,EAAA9vV,IAAA,EAAA25J,GAAAsmM,kBACA7R,IAAA5iH,EACA;AAEA,MAAA4yH,EAAAhQ,EAAAniX,OAAA83F,GAAA6wR,EAAAnqY,SAAAs5G,EAAAv6G,KAAAsE;AACA62C,EAAAw5V,YAAAC,EACA,CACA,UA8VA2H,WAzTA,CAAAC,EAAAC,EAAApB,EAAA/iW,EAAA,KAA8E,EAAQwoV,SAAA3lV,KAAAh9B,QAAA6jQ,WAAAu/G,QAAAN,WAAA/1M,UACtF,MAAA+2M,WAAYA,EAAAmJ,mBAA8BtK,EAAAE,iBAC1C8T,EAAA3R,EAAAqZ,EAAAr+X,EAAAgmG,QACAu4R,EAAAvZ,EAAAsZ,EAAAt+X,EAAAgmG,SACAlU,UAAYA,EAAAywR,eAAyBviX,GACrCmoX,MAAYA,EAAA2H,OAAah+R,EACzB77B,EAAAkyT,EAAAkP,WAAAvH,GACArJ,EAAAlE,GAAAzwR,EAAAg+R,IAAAvH,cAAAz2R,EAAAq2R,MAAA1B;AACA,IAAAxwT,EACA;AAEA,MAAAuoU,EAAA5J,GAAA3yX,GAAA2zX,GAAA3zX,EAAApgB,KAAAsE,KAAA29X,GAAA8Q,CAAA9iS;AACA,GAAA77B,EAAA0+T,OAAA,GAAA6J,GAAAvoU,EAAA0+T,MAAA6J,EAAA7J,OAAA,GAEA,GAAA6J,EAAAv8X,KAAApgB,OAAA80Y,EACA,OAAA7T,EAAAgY,aAAAyD;AAGA,GAAA3I,GAAA4I,EAAAv8X,KAAApgB,KAAAsE,KAAA29X,IACA6S,EAAA8H,aAAAD,EAAAv8X,KAAAu9D,UACAqkM,EACA,OAAAu/G,IACAF,QAAA,KACAlmV,EAAA06V,cAAA8G,EAAAnmW,IAAAs+V,QAGAzT,QAAA,IAAAwT,GAAA15V,EAAA25V,IACAzT,QAAA,IAAA4T,GAAA95V,EAAA25V,IACAj/P,KAEA,CACA,OAAAwlQ,GAAAzW,GAAA5iH,EAeAu/G,IAEAF,QAAA,KACA,MAAAwb,EAAA3xN,IAAA4xN,WAAAhI,EAAAx8V,GACAs8V,EAAAhQ,EAAAniX,OAAA83F,GAAA6wR,EAAAnqY,SAAAs5G,EAAAv6G,KAAAsE;AAEA,OADA62C,EAAAw5V,YAAAC,KACAiI,GAGA5b,EAAAoU,eAEAyH,WAAAhI,EAAAx8V,GACA+oV,QAAA,IAAAwT,GAAA15V,EAAA25V,IACAzT,QAAA,IAAA4T,GAAA95V,EAAA25V,IACAj/P,MA5BA0rP,IAEAF,QAAA,MACAn2M,IAAA4xN,WAAAhI,EAAAx8V,IAIA2oV,EAAAoU,cAEAyH,WAAAhI,EAAAx8V,GACA+oV,QAAA,IAAAwT,GAAA15V,EAAA25V,IACAzT,QAAA,IAAA4T,GAAA95V,EAAA25V,IACAj/P,OA8QAknQ,WA3PA,CAAAnL,EAAAt5V,EAAA,GAA+Cp6C,EAAA,KAAc,EAAQigB,QAAA8iX,eACrE,MAAA+b,qBAAYA,MAA+B9+Y,EAC3C8B,EAAA8uY,EAAA8C,EAAAzzX,EAAAgmG;AAEA,OADAuvR,GAAAv1X,EAAAne,EAAAs4C,GAEA2oV,EAAAgc,UAAAj9Y,EAAA,CAA0Cg9Y,yBAE1C/b,EAAA2Y,QAAA55Y,EAAAs4C,IAqPA4kW,WAlPA,CAAAtL,EAAAuL,EAAA7kW,EAAA,KAAiE,EAAQn6B,QAAA8iX,eACzE,MAAAjhY,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG,QACAi5R,EAAAja,EAAAga,EAAAh/X,EAAAgmG,QACA0hG,EAAA8rL,GAAAxzX,EAAAne,EAAAs4C;AACA,IAAAqiW;AAKA,OAJAx8X,EAAA8xF,UAAAumS,QAAAoE,WAAAz8X,EAAA8xF,UAAAuiS,SAEAmI,EAAAx8X,EAAA8xF,UAAAumS,QAAAxyX,OAAAgyD,OAEA6vI,EACAo7K,EAAAyZ,QAAA0C,EAAAzC,GAIA1Z,EAAAyZ,QAAA16Y,EAAA,IAAoC26Y,KAAAriW,KAqOpC+kW,WAlOA,CAAAzL,EAAAt5V,EAAA,KAA+C,EAAQn6B,QAAA8iX,eACvD,MAAAjhY,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG;AAEA,OADAwtR,GAAAxzX,EAAAne,EAAAs4C,GAEA2oV,EAAA6U,KAAA91Y,GAEAihY,EAAAqc,OAAAt9Y,EAAAs4C,IA6NAilW,cA1NA,MAA+Bp/X,QAAA6jQ,eAC/B,MAAAskD,EAAAnoT,EAAAmoT;AACA,QAAA9pU,EAAA,EAAoBA,EAAA8pU,EAAA7pU,OAAoBD,GAAA,GACxC,MAAAyqY,EAAA3gE,EAAA9pU;AACA,IAAAghZ;AAGA,GAAAvW,EAAAhhC,KAAAiiC,eAAAsV,EAAAvW,EAAAwW,SAAAt/X,IAAA,CACA,GAAA6jQ,EAAA,CACA,MAAA7mO,EAAAh9B,EAAAg9B,GACAuiW,EAAAF,EAAAt7X;AACA,QAAA2/D,EAAA67T,EAAAvsY,MAAA1U,OAAA,EAAsDolF,GAAA,EAAQA,GAAA,EAC9D1mC,EAAA4tF,KAAA20Q,EAAAvsY,MAAA0wE,GAAAmoM,OAAA0zH,EAAAC,KAAA97T;AAEA,GAAA27T,EAAAj+Y,KAAA,CACA,MAAAqlY,EAAAzpV,EAAAt0B,IAAAqqD,QAAAssU,EAAA/zX,MAAAm7W;AACAzpV,EAAAmsV,YAAAkW,EAAA/zX,KAAA+zX,EAAA70V,GAAAxqC,EAAAgmG,OAAA5kH,KAAAi+Y,EAAAj+Y,KAAAqlY,GACA,MAEAzpV,EAAAqmC,OAAAg8T,EAAA/zX,KAAA+zX,EAAA70V,GAEA,CACA,QACA,CACA,CACA,UAkMAi1V,cA/LA,MAA+BziW,KAAA6mO,eAC/B,MAAA/xK,UAAYA,GAAY90D,GACxBq+C,MAAYA,EAAAsI,UAAgBmO;AAC5B,OAAAzW,GAGAwoL,GACAlgL,EAAAprF,QAAA09D,IACAj5B,EAAAwtV,WAAAv0T,EAAAkyT,MAAA9vV,IAAA49B,EAAA65T,IAAAz3V,WAwLAymW,UAlLA,CAAArL,EAAA1zY,EAAA,KAA2C,EAAQi9C,KAAAh9B,QAAA6jQ,eACnD,IAAAzlP;AACA,MAAAygX,qBAAYA,MAA+B9+Y,GAC3C+xG,UAAYA,GAAY90D,EACxBn7C,EAAA8uY,EAAA8C,EAAAzzX,EAAAgmG,SACAmiR,MAAYA,EAAA9sS,QAAAsI,UAAuBmO;AACnC,IAAA+xK,EACA;AAEA,GAAAxoL,GAAAwjT,EAAA,CACA,IAAAvzX,KAAcA,EAAAk/B,MAAWsnD;AACzB,MAAAj6B,EAAA,QAAAz5C,EAAA+pW,EAAA1B,QAAAryW,KAAAgoF,KAAAv6G,iBAAA,IAAAu8B,OAAA,EAAAA,EAAAy5C,MACA5B,EAAAk6T,EAAAhI,EAAAtmY,EAAAg2E;AACA5B,IACA3qD,EAAA2qD,EAAA3qD,KACAk/B,EAAAyrB,EAAAzrB,IAEAxN,EAAAwtV,WAAAl/W,EAAAk/B,EAAA3oD,EACA,MAEA8hG,EAAAprF,QAAA09D,IACAj5B,EAAAwtV,WAAAv0T,EAAAkyT,MAAA9vV,IAAA49B,EAAA65T,IAAAz3V,IAAAx2C;AAIA,OADAm7C,EAAAytV,iBAAA5oY,OA2JA69Y,iBAvJA,CAAAjM,EAAAt5V,EAAA,KAAqD,EAAQ6C,KAAAh9B,QAAA6jQ,eAC7D,IAAA1uL,EAAA,KACA8lT,EAAA;AACA,MAAAhG,EAAAjB,GAAA,iBAAAP,MAAAttY,KAAA6Z,EAAAgmG;AACA,QAAAivR,IAGA,SAAAA,IACA9/S,EAAA6vS,EAAAyO,EAAAzzX,EAAAgmG,SAEA,SAAAivR,IACAgG,EAAAtK,EAAA8C,EAAAzzX,EAAAgmG,SAEA69J,GACA7mO,EAAA80D,UAAAnO,OAAAprF,QAAA09D,IACA,MAAA3qD,EAAA2qD,EAAAkyT,MAAA9vV,IACAmS,EAAAyrB,EAAA65T,IAAAz3V;AACA,IAAAsnW,EACA9/O,EACA87O,EACAC;AACA5+V,EAAA80D,UAAAzW,MACAr7E,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACA88C,OAAAlzE,EAAApgB,OACA85Y,EAAA76Y,KAAA+b,IAAAw7B,EAAA/sB,GACAswX,EAAA96Y,KAAA8b,IAAAy7B,EAAAp2B,EAAAwuX,SAAAjmV,GACAm1V,EAAAtnW,EACAwnH,EAAA59I,KAKAjC,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,CAAAvoC,EAAAo2B,KACAA,EAAA/sB,GAAA6pE,OAAAlzE,EAAApgB,OACA85Y,EAAA76Y,KAAA+b,IAAAw7B,EAAA/sB,GACAswX,EAAA96Y,KAAA8b,IAAAy7B,EAAAp2B,EAAAwuX,SAAAjmV,GACAm1V,EAAAtnW,EACAwnH,EAAA59I,GAEAo2B,GAAA/sB,GAAA+sB,GAAAmS,IACA2qC,OAAAlzE,EAAApgB,MACAm7C,EAAA06V,cAAAr/V,OAAA7oB,EAAA,IACAvN,EAAA41D,SACA19B,IAGA8gW,GAAAh5X,EAAAwkX,MAAAnoY,QACA2jB,EAAAwkX,MAAAluX,QAAA6jG,IACA,GAAA6+R,IAAA7+R,EAAAv6G,KAAA,CACA,MAAA+9Y,EAAA9+Y,KAAA+b,IAAAw7B,EAAA/sB,GACAu0X,EAAA/+Y,KAAA8b,IAAAy7B,EAAAp2B,EAAAwuX,SAAAjmV;AACAxN,EAAAk+V,QAAA0E,EAAAC,EAAA5E,EAAA34Y,OAAA,IACA85G,EAAAvkC,SACA19B,IAEA,OAMA0lH,SACArwI,IAAAmwX,GACA3iW,EAAA06V,cAAAiI,OAAAnwX,EAAA,IACAqwI,EAAAhoF,SACA19B,IAGA8gW,GAAAp7O,EAAA4mO,MAAAnoY,QACAuhK,EAAA4mO,MAAAluX,QAAA6jG,IACA6+R,IAAA7+R,EAAAv6G,MACAm7C,EAAAk+V,QAAAS,EAAAC,EAAAX,EAAA34Y,OAAA,IACA85G,EAAAvkC,SACA19B,eA+EAglW,OApEA,CAAA1L,EAAAt5V,EAAA,KAA2C,EAAQn6B,QAAA6jQ,eACnD,MAAAhiR,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG;AACA,OAAAm8Q,EAAAgd,OAAAt9Y,EAAAs4C,EAAAgoV,CAAAniX,EAAA6jQ,IAmEA86H,WAhEA,CAAAlL,EAAAt5V,EAAA,KAA+C,EAAQn6B,QAAA6jQ,eACvD,MAAAhiR,EAAAmjY,EAAAyO,EAAAzzX,EAAAgmG;AACA,OAAAo8Q,EAAAuc,WAAA98Y,EAAAs4C,EAAAioV,CAAApiX,EAAA6jQ;AAiEA,MAAAi8H,GAAA1Q,EAAA9sY,OAAA,CACA6D,KAAA,WACAqnY,YAAA,SAEA1K,OAKAid,GAAA3Q,EAAA9sY,OAAA,CACA6D,KAAA,OACA,qBAAAmoY,GACA,OACA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,cACAvnV,MAAA,CACA23V,WAAA,CAAAzyY,EAAAnP,EAAAD,EAAAi6J,KACAr6J,KAAA4kY,OAAAvrO,KAAA,QACAurO,OAAA5kY,KAAA4kY,OACAl7X,MAAArJ,EACAD,QACAi6J,cAMA,IAGA6nP,GAAA7Q,EAAA9sY,OAAA,CACA6D,KAAA,WACA,qBAAAmoY,GACA,OACA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,YACAvnV,MAAA,CACAgiR,SAAA,IAAAtsU,KAAA4kY,OAAA5iY,QAAAsqU,YAIA,IAGA61E,GAAA,IAAAlgY,EAAA4vX,UAAA,eACAuQ,GAAA/Q,EAAA9sY,OAAA,CACA6D,KAAA,cACA,qBAAAmoY,GACA,MAAA3L,OAAgBA,GAAS5kY;AACzB,OACA,IAAAiiB,EAAAspX,OAAA,CACAtyW,IAAAkpX,GACA73V,MAAA,CACAuhV,gBAAA,CACAx6X,MAAA,CAAAgmE,EAAA3tE,KACAk7X,EAAA1pS;AACA,MAAAqpS,EAAAK,EAAA3iX,MAAAg9B,GACAosV,QAAA,SAAoD3hY,UACpD2hY,QAAA;AAEA,OADAh0T,EAAAyuM,SAAAy+G,OAGA71X,KAAA,CAAA2oE,EAAA3tE,KACAk7X,EAAA1pS;AACA,MAAAqpS,EAAAK,EAAA3iX,MAAAg9B,GACAosV,QAAA,QAAmD3hY,UACnD2hY,QAAA;AAEA,OADAh0T,EAAAyuM,SAAAy+G,WAOA,IAGA8d,GAAAhR,EAAA9sY,OAAA,CACA6D,KAAA,SACA,oBAAAynY,GACA,MAAAyS,EAAA,IAAAtiZ,KAAA4kY,OAAAG,SAAAhzV,MAAA,EAAoEgzV,cAAU,CAC9E,IAAAA,EAAAsc,gBAEA,IAAAtc,EAAAI,QAAA,EAAsClmV,SACtC,MAAA80D,UAAwBA,EAAAppF,OAAiBs0B,GACzCq+C,MAAwBA,EAAAg9S,WAAiBvmS,GACzCz5D,IAAwBA,EAAAxyB,UAAcwyX,EACtCiI,EAAAjI,EAAAxyX,OAAA2lX,aAAAnzV,EAAA,EAAA2E,EAAAt0B,IAAAqqD,QAAA16B,EAAA,GAAAggW,EACAkI,EAAAD,EAAAz6X,OAAAhkB,KAAAimW,KAAAg/B,UACA0Z,EAAAnI,EAAAhgW,IAAAggW,EAAA9P,aACAkY,EAAAF,GAAA,IAAAD,EAAAz6X,OAAA6qX,WACA8P,IAAAnI,EAAAhgW,IACAr4B,EAAAixX,UAAAC,QAAAxoX,GAAA4C,OAAA+sB;AACA,SAAAgjD,IACAx1E,EAAAhkB,KAAA2pY,aACA3lX,EAAAovE,YAAA32F,SACAmiZ,GACAA,GAAA,cAAApI,EAAAxyX,OAAAhkB,KAAAsE,OAIA28X,EAAAoU,eAEA,IAAApU,EAAA0V,kBACA,IAAA1V,EAAA+W,eACA,IAAA/W,EAAAsY,uBAEAsF,EAAA,IAAA3iZ,KAAA4kY,OAAAG,SAAAhzV,MAAA,EAAiEgzV,cAAU,CAC3E,IAAAA,EAAA0V,kBACA,IAAA1V,EAAAsV,oBACA,IAAAtV,EAAAiX,cACA,IAAAjX,EAAAuY,sBAQAsF,EAAA,CACA51T,MAPA,IAAAhtF,KAAA4kY,OAAAG,SAAAhzV,MAAA,EAAgEgzV,cAAU,CAC1E,IAAAA,EAAAiY,gBACA,IAAAjY,EAAA8U,sBACA,IAAA9U,EAAA+X,iBACA,IAAA/X,EAAAma,eAIA,gBAAAl/Y,KAAA4kY,OAAAG,SAAA4V,WACAhtT,UAAA20T,EACA,gBAAAA,EACA,kBAAAA,EACAt0T,OAAA20T,EACA,aAAAA,EACA,YAAA3iZ,KAAA4kY,OAAAG,SAAAviR,aAEAqgS,EAAA,IACAD,GAEAE,EAAA,IACAF,EACA,SAAAN,EACA,gBAAAA,EACA,SAAAK,EACA,qBAAAA,EACA,aAAAA,EACA,QAAAA,EACA,aAAA3iZ,KAAA4kY,OAAAG,SAAA0Y,uBACA,aAAAz9Y,KAAA4kY,OAAAG,SAAAyY;AAEA,OAAAhK,MAAAgC,KACAsN,EAEAD,CACA,EACA,qBAAAtS,GACA,OAMA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,iBACAvD,kBAAA,CAAAC,EAAAC,EAAA1lE,KACA,GAAAylE,EAAA9qX,KAAAw7B,KAAAmmV,QAAA,gBACA;AAEA,MAAA2d,EAAAxU,EAAA9qX,KAAA8gX,KAAAoH,cACA6C,EAAA7jX,IAAAopO,GAAA+0E,EAAAn+S,KACAq4X,EAAAzU,EAAA9qX,KAAA8gX,KAAAa,QAAA;AACA,IAAA2d,GAAAC,EACA;AAEA,MAAA1lT,MAA4BA,EAAA/vE,OAAAk/B,MAAkB+hV,EAAAz6R,UAC9CkvS,EAAAhhY,EAAAixX,UAAAC,QAAA3E,EAAA7jX,KAAA4C,KACA21X,EAAAjhY,EAAAixX,UAAAG,MAAA7E,EAAA7jX,KAAA8hC;AAEA,GAAA6wC,GADA/vE,IAAA01X,GAAAx2V,IAAAy2V,EAEA;AAGA,IADApL,GAAAhvE,EAAAn+S,KAEA;AAEA,MAAAs0B,EAAA6pR,EAAA7pR,GACAg7V,EAAA3V,EAAA,CACAriX,MAAA6mT,EACAy7D,YAAAtlV,KAEA8lV,SAA4BA,GAAW,IAAAJ,EAAA,CACvCC,OAAA5kY,KAAA4kY,OACA3iX,MAAAg4X;AAGA,OADAlV,EAAAoU,aACAl6V,EAAAhqC,MAAA1U,OAGA0+C,OAHA,KAOA,IAGAmvC,GAAAijT,EAAA9sY,OAAA,CACA6D,KAAA,QACA,qBAAAmoY,GACA,OACA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,eACAvnV,MAAA,CACA64V,YAAA,CAAA9U,EAAAhuY,EAAAD,KACAJ,KAAA4kY,OAAAvrO,KAAA,SACAurO,OAAA5kY,KAAA4kY,OACAl7X,MAAArJ,EACAD,cAMA,IAGAgjZ,GAAA/R,EAAA9sY,OAAA,CACA6D,KAAA,WACA,qBAAAmoY,GACA,OACA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,YACAvnV,MAAA,CACAlO,WAAA,IAAAp8C,KAAA4kY,OAAA5uO,WAAA,CAAkE83D,SAAA,KAAgB,MAIlF;AAGA,IAAA/kN,GAAAgf,OAAA4jE,OAAA,CACAgQ,UAAA,KACAi2S,0BACAmQ,YACAC,QACAE,YACAE,eACAC,UACAj0T,SACAg1T,YACAjB;AAGA,MAAAkB,GACA,QAAAj7Y,GACA,OAAApI,KAAAkkB,KAAApgB,KAAAsE,IACA,CACA,WAAAkzE,CAAAhhC,EAAAsqV,EAAAv7N,KAAAnlJ,EAAA,MACAlkB,KAAAisB,YAAA,KACAjsB,KAAAsjZ,YAAA,KACAtjZ,KAAAqpK,UACArpK,KAAAujZ,YAAAjpW,EACAt6C,KAAA4kY,SACA5kY,KAAAisB,YAAA/H,CACA,CACA,QAAAA,GACA,OAAAlkB,KAAAisB,aAAAjsB,KAAAujZ,YAAAr/X,MACA,CACA,WAAAxB,GACA,OAAA1iB,KAAA4kY,OAAAvtT,KAAAmsU,SAAAxjZ,KAAAs6C,KAAAp2B,IACA,CACA,SAAA0yX,GACA,IAAAv2W;AACA,eAAAA,EAAArgC,KAAAsjZ,mBAAA,IAAAjjX,IAAArgC,KAAAujZ,YAAA3M,KACA,CACA,OAAAt8V,GACA,OAAAt6C,KAAAujZ,YAAAjpW,GACA,CACA,WAAAmnC,GACA,OAAAzhF,KAAAkkB,KAAAu9D,OACA,CACA,WAAAA,IACA,IAAAl0D,EAAAvtB,KAAAutB,KACAk/B,EAAAzsD,KAAAysD;AACA,GAAAzsD,KAAAqpK,QAAA,CACA,OAAArpK,KAAAyhF,QAAApjE,KAEA,YADA9I,QAAAwD,MAAA,kEAAgG/Y,KAAAoI,WAAgBpI,KAAAs6C;AAGhH/sB,EAAAvtB,KAAAutB,KAAA,EACAk/B,EAAAzsD,KAAAysD,GAAA,CACA,CACAzsD,KAAA4kY,OAAAG,SAAAmW,gBAAA,CAA+C3tX,OAAAk/B,MAAUg1B,EACzD,CACA,cAAArlC,GACA,OAAAp8C,KAAAkkB,KAAA41D,KACA,CACA,eAAAod,GACA,OAAAl3F,KAAAkkB,KAAAgzE,WACA,CACA,QAAA74E,GACA,OAAAre,KAAAkkB,KAAAwuX,QACA,CACA,QAAAnlX,GACA,OAAAvtB,KAAAqpK,QACArpK,KAAAs6C,IAEAt6C,KAAAujZ,YAAArkY,MAAAlf,KAAAujZ,YAAA3M,MACA,CACA,SAAA1+T,GACA,OACA3qD,KAAAvtB,KAAAutB,KACAk/B,GAAAzsD,KAAAysD,GAEA,CACA,MAAAA,GACA,OAAAzsD,KAAAqpK,QACArpK,KAAAs6C,IAAAt6C,KAAAqe,KAEAre,KAAAujZ,YAAApkY,IAAAnf,KAAAujZ,YAAA3M,QAAA52Y,KAAAkkB,KAAAymX,OAAA,IACA,CACA,UAAA7iX,GACA,OAAA9nB,KAAA42Y,MACA;AAEA,MAAA6L,EAAAziZ,KAAAujZ,YAAArkY,MAAAlf,KAAAujZ,YAAA3M,MAAA,GACAvE,EAAAryY,KAAAujZ,YAAA54X,IAAAqqD,QAAAytU;AACA,WAAAY,GAAAhR,EAAAryY,KAAA4kY,OACA,CACA,UAAA5nN,GACA,IAAAq1N,EAAAryY,KAAAujZ,YAAA54X,IAAAqqD,QAAAh1E,KAAAutB,MAAAvtB,KAAAqpK,QAAA;AAIA,OAHAgpO,EAAAuE,QAAA52Y,KAAA42Y,QACAvE,EAAAryY,KAAAujZ,YAAA54X,IAAAqqD,QAAAh1E,KAAAutB,KAAA,IAEA,IAAA81X,GAAAhR,EAAAryY,KAAA4kY,OACA,CACA,SAAA3nN,GACA,IAAAo1N,EAAAryY,KAAAujZ,YAAA54X,IAAAqqD,QAAAh1E,KAAAysD,IAAAzsD,KAAAqpK,QAAA;AAIA,OAHAgpO,EAAAuE,QAAA52Y,KAAA42Y,QACAvE,EAAAryY,KAAAujZ,YAAA54X,IAAAqqD,QAAAh1E,KAAAysD,GAAA,IAEA,IAAA42V,GAAAhR,EAAAryY,KAAA4kY,OACA,CACA,YAAAppX,GACA,MAAAA,EAAA;AAmBA,OAlBAxb,KAAAkkB,KAAAu9D,QAAAjnE,QAAA,CAAA0J,EAAAlG,KACA,MAAAqrJ,EAAAnlJ,EAAAmlJ,UAAAnlJ,EAAAupX,YACAgW,EAAAv/X,EAAAwmX,SAAAxmX,EAAAymX,OACAqP,EAAAh6Y,KAAAs6C,IAAAt8B,GAAAylY,EAAA;AAEA,GAAAzJ,EAAA,GAAAA,EAAAh6Y,KAAAujZ,YAAA54X,IAAA+nX,SAAA,EACA;AAEA,MAAAL,EAAAryY,KAAAujZ,YAAA54X,IAAAqqD,QAAAglU;AACA,IAAA3wO,GAAAgpO,EAAAuE,OAAA52Y,KAAA42Y,MACA;AAEA,MAAA8M,EAAA,IAAAL,GAAAhR,EAAAryY,KAAA4kY,OAAAv7N,IAAAnlJ,EAAA;AACAmlJ,IACAq6O,EAAAJ,YAAAtjZ,KAAA42Y,MAAA,GAEAp7X,EAAA5T,KAAA,IAAAy7Y,GAAAhR,EAAAryY,KAAA4kY,OAAAv7N,IAAAnlJ,EAAA,SAEA1I,CACA,CACA,cAAA/U,GACA,OAAAzG,KAAAwb,SAAA,QACA,CACA,aAAAolQ,GACA,MAAAplQ,EAAAxb,KAAAwb;AACA,OAAAA,IAAAjb,OAAA,QACA,CACA,OAAAu9E,CAAArmC,EAAA2E,EAAA,IACA,IAAAl4B,EAAA,KACA+H,EAAAjsB,KAAA8nB;AACA,KAAAmE,IAAA/H,GAAA,CACA,GAAA+H,EAAA/H,KAAApgB,KAAAsE,OAAAqvC,EACA,GAAA1vB,OAAA2wB,KAAA0D,GAAA77C,OAAA,GACA,MAAAojZ,EAAA13X,EAAA/H,KAAA41D,MACA8pU,EAAA77X,OAAA2wB,KAAA0D;AACA,QAAArzC,EAAA,EAAwCA,EAAA66Y,EAAArjZ,OAAyBwI,GAAA,GACjE,MAAAkwB,EAAA2qX,EAAA76Y;AACA,GAAA46Y,EAAA1qX,KAAAmjB,EAAAnjB,GACA,KAEA,CACA,MAEA/U,EAAA+H;AAGAA,IAAAnE,MACA,CACA,OAAA5D,CACA,CACA,aAAA01D,CAAAniC,EAAA2E,EAAA,IACA,OAAAp8C,KAAAi1E,iBAAAx9B,EAAA2E,MAAA,QACA,CACA,gBAAA64B,CAAAx9B,EAAA2E,EAAA,GAA8CynW,MAC9C,IAAA1jM,EAAA;AACA,IAAAngN,KAAAwb,UAAA,IAAAxb,KAAAwb,SAAAjb,OACA,OAAA4/M;AAEA,MAAAyjM,EAAA77X,OAAA2wB,KAAA0D;AAsBA,OAjBAp8C,KAAAwb,SAAAhB,QAAAspY,IAEAD,GAAA1jM,EAAA5/M,OAAA,IAGAujZ,EAAA5/X,KAAApgB,KAAAsE,OAAAqvC,GACAmsW,EAAAvxX,MAAA4G,GAAAmjB,EAAAnjB,KAAA6qX,EAAA5/X,KAAA41D,MAAA7gD,KAEAknL,EAAAv4M,KAAAk8Y,GAIAD,GAAA1jM,EAAA5/M,OAAA,IAGA4/M,IAAA1tM,OAAAqxY,EAAA7uU,iBAAAx9B,EAAA2E,EAAAynW,QAEA1jM,CACA,CACA,YAAA/xM,CAAAguC,GACA,MAAA6C,GAAgBA,GAAKj/C,KAAA4kY,OAAA3iX;AACrBg9B,EAAA06V,cAAA35Y,KAAAutB,UAAAkE,EAAA,IACAzxB,KAAAkkB,KAAA41D,SACA19B,IAEAp8C,KAAA4kY,OAAAvtT,KAAAyuM,SAAA7mO,EACA,EA+EA,SAAA8kW,GAAAp2Y,EAAAy/P,EAAAxkK,GACA,MAAAo7S,EAAAr/Y,SAAAi1E,cAAA,0BAA4EgvB,EAAA,IAAaA,IAAO;AAChG,UAAAo7S,EACA,OAAAA;AAEA,MAAAC,EAAAt/Y,SAAAkvE,cAAA;AAOA,OANAu5L,GACA62I,EAAA71Y,aAAA,QAAAg/P,GAEA62I,EAAA71Y,aAAA,qBAA+Cw6F,EAAA,IAAaA,IAAO,IAAO,IAC1Eq7S,EAAAv7Y,UAAAiF,EACAhJ,SAAAswG,qBAAA,WAAAvwG,YAAAu/Y,GACAA,CACA,CA2oBA,MAAAv/X,GACA,WAAA42D,CAAA9jD,EAAA,IACAx3B,KAAA8D,KAAA,OACA9D,KAAAoI,KAAA,OACApI,KAAA8nB,OAAA,KACA9nB,KAAA8mK,MAAA,KACA9mK,KAAAw3B,OAAA,CACApvB,KAAApI,KAAAoI,KACA2hH,eAAA,IAEA/pH,KAAAw3B,OAAA,IACAx3B,KAAAw3B,UACAA,GAEAx3B,KAAAoI,KAAApI,KAAAw3B,OAAApvB,KACAovB,EAAAuyF,gBAAAhiG,OAAA2wB,KAAAlhB,EAAAuyF,gBAAAxpH,OAAA,GACAgV,QAAAC,KAAA,yHAAkJxV,KAAAoI,UAGlJpI,KAAAgC,QAAAhC,KAAAw3B,OAAAuyF,eACA/pH,KAAAw3B,OAAA20W,aACAnsY,KAAAgC,QAAA4lY,EAAA/B,EAAA7lY,KAAA,cACAoI,KAAApI,KAAAoI,SAGApI,KAAAsgT,QAAAsnF,EAAA/B,EAAA7lY,KAAA,cACAoI,KAAApI,KAAAoI,KACApG,QAAAhC,KAAAgC,YACS,EACT,CACA,aAAAuC,CAAAizB,EAAA,IACA,WAAA9S,GAAA8S,EACA,CACA,SAAA40W,CAAApqY,EAAA,IAGA,MAAAu5C,EAAAv7C,KAAAF,OAAA,IACAE,KAAAw3B,OACA20W,WAAA,IACA5oF,EAAAvjT,KAAAgC;AAOA,OAHAu5C,EAAAnzC,KAAApI,KAAAoI,KAEAmzC,EAAAzzB,OAAA9nB,KAAA8nB,OACAyzB,CACA,CACA,MAAAz7C,CAAAusY,EAAA,IACA,MAAA9wV,EAAA,IAAA72B,GAAA2nX;AAcA,OAbA9wV,EAAAzzB,OAAA9nB,KACAA,KAAA8mK,MAAAvrH,EACAA,EAAAnzC,KAAAikY,EAAAjkY,KAAAikY,EAAAjkY,KAAAmzC,EAAAzzB,OAAA1f,KACAikY,EAAAtiR,gBAAAhiG,OAAA2wB,KAAA2zV,EAAAtiR,gBAAAxpH,OAAA,GACAgV,QAAAC,KAAA,yHAAkJ+lC,EAAAnzC,UAElJmzC,EAAAv5C,QAAA4lY,EAAA/B,EAAAtqV,EAAA,cACAnzC,KAAAmzC,EAAAnzC,QAEAmzC,EAAA+kQ,QAAAsnF,EAAA/B,EAAAtqV,EAAA,cACAnzC,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,WAEAu5C,CACA,EAoXAlC,EAAAsrV,eAAsBA,EACtBtrV,EAAA6qW,OA9jCA,cAAAzvJ,EACA,WAAAn5K,CAAAt5E,EAAA,IACAghK,QACAhjK,KAAAk7F,aAIAl7F,KAAA+1Q,iBACA/1Q,KAAA8wY,iBAAA,GACA9wY,KAAAgC,QAAA,CACA0gB,QAAA/d,SAAAkvE,cAAA,OACA4N,QAAA,GACA0iU,aACAC,iBAAA3yX,EACAs0W,WAAA,GACA3uK,aACAk1G,YACA+3E,YAAA,GACArQ,aAAA,GACAsQ,qBAAA,GACAlU,oBACAE,oBACAiU,wBACA7I,sBACAP,oBACApK,eAAA,SACAC,SAAA,SACAC,SAAA,SACAC,kBAAA,SACAC,cAAA,SACA1tT,QAAA,SACAC,OAAA,SACA0tT,UAAA,SACAoT,eAAA,EAA+BzrY,YAAc,MAAAA,GAC7C0rY,QAAA,SACA5uM,OAAA,UAEA71M,KAAA0kZ,0BACA1kZ,KAAAy8Y,oBAAA,KACAz8Y,KAAAqC,WAAAL,GACAhC,KAAA2kZ,yBACA3kZ,KAAA4kZ,uBACA5kZ,KAAA6kZ,eACA7kZ,KAAAqG,GAAA,eAAArG,KAAAgC,QAAA+uY,gBACA/wY,KAAAq5J,KAAA,gBAAoCurO,OAAA5kY,OACpCA,KAAAqG,GAAA,eAAArG,KAAAgC,QAAAwiZ,gBACAxkZ,KAAA8kZ,aACA9kZ,KAAAmkZ,YACAnkZ,KAAAqG,GAAA,SAAArG,KAAAgC,QAAAgvY,UACAhxY,KAAAqG,GAAA,SAAArG,KAAAgC,QAAAivY,UACAjxY,KAAAqG,GAAA,kBAAArG,KAAAgC,QAAAkvY,mBACAlxY,KAAAqG,GAAA,cAAArG,KAAAgC,QAAAmvY,eACAnxY,KAAAqG,GAAA,QAAArG,KAAAgC,QAAAyhF,SACAzjF,KAAAqG,GAAA,OAAArG,KAAAgC,QAAA0hF,QACA1jF,KAAAqG,GAAA,UAAArG,KAAAgC,QAAAovY,WACApxY,KAAAqG,GAAA,SAA2BqD,QAAAtJ,QAAAi6J,WAAqBr6J,KAAAgC,QAAA6zM,OAAAnsM,EAAAtJ,EAAAi6J,IAChDr6J,KAAAqG,GAAA,UAA4BqD,QAAAtJ,WAAcJ,KAAAgC,QAAAyiZ,QAAA/6Y,EAAAtJ,IAC1CqJ,OAAA0F,WAAA,KACAnP,KAAAwnF,cAGAxnF,KAAA+kY,SAAA1zX,MAAArR,KAAAgC,QAAAo1N,WACAp3N,KAAAq5J,KAAA,UAAkCurO,OAAA5kY,OAClCA,KAAA+1Q,mBACS,EACT,CAIA,WAAAuqC,GACA,OAAAtgT,KAAA8wY,gBACA,CAIA,YAAA/L,GACA,OAAA/kY,KAAA+kZ,eAAAhgB,QACA,CAIA,KAAAM,GACA,OAAArlY,KAAA+kZ,eAAA1f,OACA,CAIA,GAAAr2M,GACA,OAAAhvL,KAAA+kZ,eAAA/1N,KACA,CAIA,SAAAm1N,GACAnkZ,KAAAgC,QAAAmiZ,WAAAx/Y,WACA3E,KAAA+lB,IAAAg+X,GA1LA,o8CA0LA/jZ,KAAAgC,QAAAoiZ,aAEA,CAMA,UAAA/hZ,CAAAL,EAAA,IACAhC,KAAAgC,QAAA,IACAhC,KAAAgC,WACAA,GAEAhC,KAAAq3E,MAAAr3E,KAAAiiB,QAAAjiB,KAAAwnF,cAGAxnF,KAAAgC,QAAAqiZ,aACArkZ,KAAAq3E,KAAA2tU,SAAAhlZ,KAAAgC,QAAAqiZ,aAEArkZ,KAAAq3E,KAAA4tU,YAAAjlZ,KAAAiiB,OACA,CAIA,WAAAijY,CAAA54E,EAAA2sE,MACAj5Y,KAAAqC,WAAA,CAA0BiqU,aAC1B2sE,GACAj5Y,KAAAq5J,KAAA,UAAkCurO,OAAA5kY,KAAAukY,YAAAvkY,KAAAiiB,MAAAg9B,IAElC,CAIA,cAAA+2G,GAIA,OAAAh2J,KAAAgC,QAAAsqU,UAAAtsU,KAAAq3E,MAAAr3E,KAAAq3E,KAAAi1P,QACA,CAIA,SAAArqT,GACA,OAAAjiB,KAAAq3E,KAAAp1D,KACA,CAQA,cAAAkjY,CAAApa,EAAAqa,GACA,MAAAh7E,EAAArkO,EAAAq/S,GACAA,EAAAra,EAAA,IAAA/qY,KAAAiiB,MAAAmoT,UACA,IAAApqU,KAAAiiB,MAAAmoT,QAAA2gE,GACA9oX,EAAAjiB,KAAAiiB,MAAAyiX,YAAA,CAA+Ct6D;AAE/C,OADApqU,KAAAq3E,KAAA4tU,YAAAhjY,GACAA,CACA,CAOA,gBAAAojY,CAAAC,GACA,GAAAtlZ,KAAAwnF,YACA;AAEA,MAAA+9T,EAAAvlZ,KAAAiiB,MAAAmoT;AACA,IAAAA,EAAAm7E;AAOA,GANA,GAAA9yY,OAAA6yY,GAAA9qY,QAAAgrY,IAEA,MAAAp9Y,EAAA,iBAAAo9Y,EAAA,GAAkEA,KAAgBA,EAAAvsX;AAElFmxS,IAAA7jT,OAAAwkX,MAAA9xW,IAAA2X,WAAAxoC,MAEAm9Y,EAAAhlZ,SAAA6pU,EAAA7pU,OAEA;AAEA,MAAA0hB,EAAAjiB,KAAAiiB,MAAAyiX,YAAA,CACAt6D;AAGA,OADApqU,KAAAq3E,KAAA4tU,YAAAhjY,GACAA,CACA,CAIA,sBAAA0iY,GACA,IAAAtkX,EAAAkiB;AACA,MAiBAkjW,EAAA,IAjBAzlZ,KAAAgC,QAAAuiZ,qBAAA,CACArC,GACAtQ,EAAAxF,UAAA,CACAoF,eAAA,QAAAjvV,EAAA,QAAAliB,EAAArgC,KAAAgC,QAAAsiZ,4BAAA,IAAAjkX,OAAA,EAAAA,EAAAyxW,+BAAA,IAAAvvV,OAAA,EAAAA,EAAAivV,iBAEAuQ,GACAK,GACAC,GACAe,GACApB,GACA5zT,IACA7nE,OAAAm/X,GACA,iBAAA1lZ,KAAAgC,QAAAuiZ,2BACAvkZ,KAAAgC,QAAAuiZ,qBAAAmB,EAAAt9Y,OAGS,MACTpI,KAAAgC,QAAA+jY,YAAAx/W,OAAAg1B,GACA,4BAAAx2C,SAAAw2C,aAAA,EAAAA,EAAAz3C;AAEA9D,KAAA8kY,iBAAA,IAAAmK,EAAAwW,EAAAzlZ,KACA,CAIA,oBAAA4kZ,GACA5kZ,KAAA+kZ,eAAA,IAAApgB,EAAA,CACAC,OAAA5kY,MAEA,CAIA,YAAA6kZ,GACA7kZ,KAAAioH,OAAAjoH,KAAA8kY,iBAAA78Q,MACA,CAIA,UAAA68R,GACA,IAAAzkX;AACA,IAAA1V;AACA,IACAA,EAAAyrX,GAAAp2Y,KAAAgC,QAAAy/E,QAAAzhF,KAAAioH,OAAAjoH,KAAAgC,QAAAgyY,aAAA,CAAiGI,sBAAAp0Y,KAAAgC,QAAA05Y,oBACjG,CACA,MAAAr7Y,GACA,KAAAA,aAAAK,OAAA,gFAAAqE,SAAA1E,EAAAwV,UAEA,MAAAxV;AAEAL,KAAAq5J,KAAA,gBACAurO,OAAA5kY,KACA+Y,MAAA1Y,EACA+6Y,qBAAA,KACAp7Y,KAAAsgT,QAAA+6F,gBACAr7Y,KAAAsgT,QAAA+6F,cAAAz/T,eAGA57E,KAAAgC,QAAA+jY,WAAA/lY,KAAAgC,QAAA+jY,WAAAx/W,OAAAg1B,GAAA,kBAAAA,EAAAnzC,MAEApI,KAAA2kZ,4BAIAh6X,EAAAyrX,GAAAp2Y,KAAAgC,QAAAy/E,QAAAzhF,KAAAioH,OAAAjoH,KAAAgC,QAAAgyY,aAAA,CAAiGI,0BACjG,CACA,MAAArgS,EAAAi/R,GAAAroX,EAAA3qB,KAAAgC,QAAAo1N;AACAp3N,KAAAq3E,KAAA,IAAAA,EAAAsuU,WAAA3lZ,KAAAgC,QAAA0gB,QAAA,IACA1iB,KAAAgC,QAAAqiZ,YACAjoW,WAAA,CAEAsvP,KAAA,aACA,QAAArrQ,EAAArgC,KAAAgC,QAAAqiZ,mBAAA,IAAAhkX,OAAA,EAAAA,EAAA+b,YAEAwpW,oBAAA5lZ,KAAA4lZ,oBAAAnjZ,KAAAzC,MACAiiB,QAAA4jY,YAAAthZ,OAAA,CACAomB,MACAopF,kBAAAtiF;AAKA,MAAAq3S,EAAA9oU,KAAAiiB,MAAAyiX,YAAA,CACAt6D,QAAApqU,KAAA8kY,iBAAA16D;AAEApqU,KAAAq3E,KAAA4tU,YAAAn8E,GACA9oU,KAAA8lZ,kBACA9lZ,KAAA+lZ,eAIA/lZ,KAAAq3E,KAAA22T,IACApJ,OAAA5kY,IACA,CAIA,eAAA8lZ,GACA9lZ,KAAAq3E,KAAAmQ,aAGAxnF,KAAAq3E,KAAA2tU,SAAA,CACAvU,UAAAzwY,KAAA8kY,iBAAA2L,WAEA,CAIA,YAAAsV,GACA/lZ,KAAAq3E,KAAA22T,IAAAx9X,UAAA,UAA4CxQ,KAAAq3E,KAAA22T,IAAAx9X,WAC5C,CACA,kBAAAksY,CAAApsX,GACAtwB,KAAA0kZ,0BACAp0X,IACAtwB,KAAA0kZ;AACA,MAAAzlW,EAAAj/C,KAAAy8Y;AAEA,OADAz8Y,KAAAy8Y,oBAAA,KACAx9V,CACA,CAMA,mBAAA2mW,CAAArhB,GAGA,GAAAvkY,KAAAq3E,KAAAmQ,YACA;AAEA,GAAAxnF,KAAA0kZ,uBACA,OAAA1kZ,KAAAy8Y,yBAIAlY,EAAAtvX,MAAAuF,QAAAqyH,IAAgD,IAAAxsG;AAAQ,eAAAA,EAAArgC,KAAAy8Y,2BAAA,IAAAp8W,OAAA,EAAAA,EAAAwsG,eAHxD7sI,KAAAy8Y,oBAAAlY;AAMA,MAAAtiX,EAAAjiB,KAAAiiB,MAAAtP,MAAA4xX,GACAyhB,GAAAhmZ,KAAAiiB,MAAA8xF,UAAAggJ,GAAA9xO,EAAA8xF;AACA/zG,KAAAq5J,KAAA,qBACAurO,OAAA5kY,KACAukY,cACA36C,UAAA3nU,IAEAjiB,KAAAq3E,KAAA4tU,YAAAhjY,GACAjiB,KAAAq5J,KAAA,eACAurO,OAAA5kY,KACAukY,gBAEAyhB,GACAhmZ,KAAAq5J,KAAA,mBACAurO,OAAA5kY,KACAukY;AAGA,MAAAlzX,EAAAkzX,EAAAa,QAAA,SACA12X,EAAA61X,EAAAa,QAAA;AACA/zX,GACArR,KAAAq5J,KAAA,SACAurO,OAAA5kY,KACA0J,MAAA2H,EAAA3H,MACA66X,gBAGA71X,GACA1O,KAAAq5J,KAAA,QACAurO,OAAA5kY,KACA0J,MAAAgF,EAAAhF,MACA66X,gBAGAA,EAAAoH,aAAApH,EAAAa,QAAA,kBAGAplY,KAAAq5J,KAAA,UACAurO,OAAA5kY,KACAukY,eAEA,CAIA,aAAA0S,CAAA/P,GACA,OAAA+P,GAAAj3Y,KAAAiiB,MAAAilX,EACA,CACA,QAAAv9K,CAAAs8L,EAAAC,GACA,MAAA99Y,EAAA,iBAAA69Y,IAAA,KACA7pW,EAAA,iBAAA6pW,EAAAC,EAAAD;AACA,OAAAt8L,GAAA3pN,KAAAiiB,MAAA7Z,EAAAg0C,EACA,CAIA,OAAA+pW,GACA,OAAAnmZ,KAAAiiB,MAAA0I,IAAAw/I,QACA,CAIA,OAAAi8O,GACA,OAAAvc,EAAA7pY,KAAAiiB,MAAA0I,IAAA82D,QAAAzhF,KAAAioH,OACA,CAIA,OAAA6uR,CAAA90Y,GACA,MAAAwvY,eAAgBA,EAAA,OAAAC,kBAAA,IAAgDzvY,GAAA;AAChE,OAAA80Y,GAAA92Y,KAAAiiB,MAAA0I,IAAA,CACA6mX,iBACAC,gBAAA,IACAE,EAAA3xY,KAAAioH,WACAwpR,IAGA,CAIA,WAAAliM,GACA,OAAAuoM,GAAA93Y,KAAAiiB,MAAA0I,IACA,CAMA,iBAAA07X,GAEA,OADA9wY,QAAAC,KAAA,+HACAxV,KAAAiiB,MAAA0I,IAAA82D,QAAApjE,KAAA,CACA,CAIA,OAAA++D,GAEA,GADAp9E,KAAAq5J,KAAA,WACAr5J,KAAAq3E,KAAA,CAGA,MAAA22T,EAAAhuY,KAAAq3E,KAAA22T;AACAA,KAAApJ,eACAoJ,EAAApJ,OAEA5kY,KAAAq3E,KAAA+F,SACA,CACAp9E,KAAA69J,oBACA,CAIA,eAAAr2E,GACA,IAAAnnD;AAEA,gBAAAA,EAAArgC,KAAAq3E,YAAA,IAAAh3C,OAAA,EAAAA,EAAAimX,QACA,CACA,KAAAC,CAAA9uW,EAAA2E,GACA,IAAA/b;AACA,eAAAA,EAAArgC,KAAAwmZ,YAAA,IAAAnmX,OAAA,EAAAA,EAAAu5C,cAAAniC,EAAA2E,KAAA,IACA,CACA,MAAAqqW,CAAAhvW,EAAA2E,GACA,IAAA/b;AACA,eAAAA,EAAArgC,KAAAwmZ,YAAA,IAAAnmX,OAAA,EAAAA,EAAA40C,iBAAAx9B,EAAA2E,KAAA,IACA,CACA,IAAAi2V,CAAA/3V,GACA,MAAA+3V,EAAAryY,KAAAiiB,MAAA0I,IAAAqqD,QAAA16B;AACA,WAAA+oW,GAAAhR,EAAAryY,KACA,CACA,QAAAwmZ,GACA,OAAAxmZ,KAAAqyY,KAAA,EACA,GAsnBAh5V,EAAAg4V,UAAiBA,EACjBh4V,EAAAwxV,UAAiBA,EACjBxxV,EAAA6yV,KAAYA,EACZ7yV,EAAA30B,KAAYA,GACZ20B,EAAAgqW,QAAeA,GACfhqW,EAAAqtW,SApXA,MACA,WAAAprU,CAAA2+F,EAAA3vH,EAAAtoD,GACAhC,KAAAk3V,cACAl3V,KAAAi6K,YACAj6K,KAAA4kY,OAAAt6U,EAAAs6U,OACA5kY,KAAAgC,QAAA,CACA2kZ,UAAA,KACAC,eAAA,QACA5kZ,GAEAhC,KAAAu7C,UAAA+O,EAAA/O,UACAv7C,KAAAkkB,KAAAomC,EAAApmC,KACAlkB,KAAA4wY,YAAAtmV,EAAAsmV,YACA5wY,KAAA6wY,iBAAAvmV,EAAAumV,iBACA7wY,KAAAq3E,KAAA/sB,EAAA+sB,KACAr3E,KAAAmpY,eAAA7+U,EAAA6+U,eACAnpY,KAAA2wY,OAAArmV,EAAAqmV,OACA3wY,KAAA6mZ,OACA,CACA,KAAAA,GAGA,CACA,OAAA7Y,GACA,OAAAhuY,KAAA4kY,OAAAvtT,KAAA22T,GACA,CACA,cAAA8Y,GACA,WACA,CACA,WAAAC,CAAAr9Y,GACA,IAAA22B,EAAAkiB,EAAAz1B,EAAA23K,EAAAxmL,EAAA+oY,EAAAC;AACA,MAAA5vU,KAAgBA,GAAOr3E,KAAA4kY,OACvBp7X,EAAAE,EAAAF,OAGA09Y,EAAA,IAAA19Y,EAAA4tF,SACA,QAAA/2D,EAAA72B,EAAAI,qBAAA,IAAAy2B,OAAA,EAAAA,EAAAy9C,QAAA,sBACAt0E,EAAAs0E,QAAA;AACA,IAAA99E,KAAAguY,MAAA,QAAAzrV,EAAAviD,KAAA8mZ,kBAAA,IAAAvkW,OAAA,EAAAA,EAAA/rC,SAAAhN,MAAA09Y,EACA;AAEA,IAAAlgZ,EAAA,EACAwK,EAAA;AAEA,GAAAxR,KAAAguY,MAAAkZ,EAAA,CACA,MAAAC,EAAAnnZ,KAAAguY,IAAA5gY,wBACAg6Y,EAAAF,EAAA95Y,wBAEAwjK,EAAA,QAAA9jJ,EAAApjB,EAAAknK,eAAA,IAAA9jJ,IAAA,QAAA23K,EAAA/6L,EAAAyyS,mBAAA,IAAA13G,OAAA,EAAAA,EAAA7zB,QACAC,EAAA,QAAA5yJ,EAAAvU,EAAAmnK,eAAA,IAAA5yJ,IAAA,QAAA+oY,EAAAt9Y,EAAAyyS,mBAAA,IAAA6qG,OAAA,EAAAA,EAAAn2O;AACA7pK,EAAAogZ,EAAApgZ,EAAAmgZ,EAAAngZ,EAAA4pK,EACAp/J,EAAA41Y,EAAA51Y,EAAA21Y,EAAA31Y,EAAAq/J,CACA,CACA,MAAA0yF,EAAAvjQ,KAAAguY,IAAA70O;AACA,QAAA8tP,EAAAv9Y,EAAAkoG,oBAAA,IAAAq1S,KAAAI,aAAA9jJ,EAAAv8P,EAAAwK;AACA,MAAA8oC,EAAAt6C,KAAA2wY;AACA,oBAAAr2V,EACA;AAIA,MAAAy5D,EAAA9xF,EAAA68X,cAAAv6Y,OAAA8yE,EAAAp1D,MAAA0I,IAAA2vB,GACAiqV,EAAAltT,EAAAp1D,MAAAg9B,GAAAq2V,aAAAvhS;AACA18B,EAAAyuM,SAAAy+G,EACA,CACA,SAAAoiB,CAAAj9Y,GACA,IAAA22B;AACA,IAAArgC,KAAAguY,IACA;AAEA,sBAAAhuY,KAAAgC,QAAA2kZ,UACA,OAAA3mZ,KAAAgC,QAAA2kZ,UAAA,CAA4Cj9Y;AAE5C,MAAAF,EAAAE,EAAAF;AAGA,IAFAxJ,KAAAguY,IAAAx3X,SAAAhN,KAAA,QAAA62B,EAAArgC,KAAA8mZ,kBAAA,IAAAzmX,OAAA,EAAAA,EAAA7pB,SAAAhN,IAGA;AAEA,MAAA89Y,EAAA59Y,EAAA5F,KAAA8sC,WAAA,QACAuqD,EAAA,SAAAzxF,EAAA5F;AAGA,IAFA,uCAAAiB,SAAAyE,EAAAmqC,UAAAnqC,EAAAkxF,qBAEAS,IAAAmsT,EACA;AAEA,MAAAtxP,WAAgBA,GAAah2J,KAAA4kY,QAC7B1tC,WAAgBA,GAAal3V,KAC7B26P,IAAA36P,KAAAkkB,KAAApgB,KAAAimW,KAAA73V,UACAq1Y,EAAAtlY,EAAA68X,cAAAyI,aAAAvnZ,KAAAkkB,MACAsjY,EAAA,SAAA99Y,EAAA5F,KACA2jZ,EAAA,UAAA/9Y,EAAA5F,KACA4jZ,EAAA,QAAAh+Y,EAAA5F,KACA6jZ,EAAA,cAAAj+Y,EAAA5F;AAOA,IAHA62P,GAAA4sJ,GAAAD,GAAA59Y,EAAAF,SAAAxJ,KAAAguY,KACAtkY,EAAA4E,iBAEAqsP,GAAA2sJ,IAAApwD,GAAAxtV,EAAAF,SAAAxJ,KAAAguY,IAEA,OADAtkY,EAAA4E;AAIA,GAAAqsP,GAAA3kG,IAAAkhM,GAAAywD,EAAA,CACA,MAAAT,EAAA19Y,EAAAs0E,QAAA;AACAopU,IAAAlnZ,KAAAguY,MAAAkZ,GAAAlnZ,KAAAguY,IAAAx3X,SAAA0wY,MAEAlnZ,KAAAk3V,cACAvyV,SAAAwpB,iBAAA,eACAnuB,KAAAk3V,eACiB,CAAIpwQ,UACrBniF,SAAAwpB,iBAAA,YACAnuB,KAAAk3V,eACiB,CAAIpwQ,UACrBniF,SAAAwpB,iBAAA,eACAnuB,KAAAk3V,eACiB,CAAIpwQ,UAErB,CAEA,QAAAowQ,GACA/7P,GACAqsT,GACAC,GACAC,GACAC,GAAAJ,EAIA,CAMA,cAAAX,CAAA3/L,GACA,OAAAjnN,KAAAguY,MAAAhuY,KAAA8mZ,aAGA,mBAAA9mZ,KAAAgC,QAAA4kZ,eACA5mZ,KAAAgC,QAAA4kZ,eAAA,CAAiD3/L,gBAIjDjnN,KAAAkkB,KAAA+zX,SAAAj4Y,KAAAkkB,KAAAwmX,SAIA,cAAAzjL,EAAAnjN,MAQA9D,KAAAguY,IAAAx3X,SAAAywM,EAAAz9M,SACA,cAAAy9M,EAAAnjN,OACA0vY,MAAAD,OACAvzY,KAAA4kY,OAAA1pS,WACA,IACArnF,MAAA0Z,KAAA05L,EAAAhhC,eACApyK,MAAA0Z,KAAA05L,EAAA/gC,eAIA7zJ,MAAAnO,KAAAw2E,qBAMA16F,KAAA8mZ,aAAA7/L,EAAAz9M,QAAA,eAAAy9M,EAAAnjN,OAIA9D,KAAA8mZ,WAAAtwY,SAAAywM,EAAAz9M,UAIA,CAIA,gBAAAm4Y,CAAAvlW,GACAp8C,KAAA4kY,OAAAG,SAAAI,QAAA,EAAwClmV,SACxC,MAAA3E,EAAAt6C,KAAA2wY;AACA,uBAAAr2V,IAGA2E,EAAA06V,cAAAr/V,OAAA7oB,EAAA,IACAzxB,KAAAkkB,KAAA41D,SACA19B,SAIA,CAIA,UAAAo+V,GACA,MAAAjtX,EAAAvtB,KAAA2wY;AACA,oBAAApjX,EACA;AAEA,MAAAk/B,EAAAl/B,EAAAvtB,KAAAkkB,KAAAwuX;AACA1yY,KAAA4kY,OAAAG,SAAAoJ,YAAA,CAA2C5gX,OAAAk/B,MAC3C,GAoKApT,EAAAuzV,UAAiBA,EACjBvzV,EAAAuuW,QAhCA,MACA,WAAAtsU,CAAAipT,GACAvkY,KAAAukY,cACAvkY,KAAA6nZ,YAAA7nZ,KAAAukY,YAAAtvX,MAAA1U,MACA,CACA,GAAAqjB,CAAAgI,GACA,IAAAk8X;AAUA,OACAl8X,SAVA5rB,KAAAukY,YAAAtvX,MACA7U,MAAAJ,KAAA6nZ,aACAnpY,OAAA,CAAAqpY,EAAAl7Q,KACA,MAAAm7Q,EAAAn7Q,EAAAo7Q,SAAAD,UAAAD;AAIA,OAHAC,EAAAF,UACAA,MAEAE,EAAA1tW,KACS1uB,GAGTk8X,UAEA,GAaAzuW,EAAAuuV,aAAoBA,EACpBvuV,EAAA6uW,cAvHA,SAAAjO,EAAA7iT,GACA,MAAA2c,UAAYA,GAAYkmS,GACxB7P,MAAYA,GAAQr2R;AAEpB,GAAAA,aAAA9xF,EAAA68X,cAAA,CACA,MAAA/1Y,EAAAqhY,EAAArhY;AAGA,OAFAqhY,EAAAtiX,OAEA03X,eAAAz2Y,IAAA,EAAAquF,EACA,CAEA,IAAAw/S,EAAAxM,EAAAwM;AACA,KAAAA,GAAA,IACA,MAAA7tY,EAAAqhY,EAAArhY,MAAA6tY;AAGA,GAFAxM,EAAAlmX,KAAA0yX,GACA8C,eAAA3wY,GACAo/Y,UAAA/wT,GACA;AAEAw/S,GAAA,CACA,CACA,QACA,EAkGAv9V,EAAA+uW,wBAv4FA,SAAAC,EAAA9Z,GACA,MAAA+Z,EAAA,IAAAtiY,EAAAoiJ,UAAAigP;AAMA,OALA9Z,EAAA/zX,QAAA+pX,IACAA,EAAAtvX,MAAAuF,QAAAqyH,IACAy7Q,EAAAz7Q,YAGAy7Q,CACA,EAg4FAjvW,EAAAirV,qBAA4BA,EAC5BjrV,EAAA+8V,eAAsBA,GACtB/8V,EAAA06V,sBAA6BA,GAC7B16V,EAAA0qW,eAAsBA,GACtB1qW,EAAAm9V,eAAsBA,GACtBn9V,EAAA68V,YAAmBA,GACnB78V,EAAAs6V,kBAAyBA,GACzBt6V,EAAAkvW,eAvGA,SAAA/vS,GACA,OAAAA,EAAA/3F,QAAA,wBAA8C,OAC9C,EAsGA44B,EAAA0sV,WAAkBh9X,GAClBswC,EAAAmvW,aAl3FA,SAAAtkY,EAAA66H,GACA,MAAA0pQ,EAAA;AASA,OARAvkY,EAAAwkY,YAAA,CAAA5hP,EAAAxsH,KACAykG,EAAA+nB,IACA2hP,EAAA7gZ,KAAA,CACAsc,KAAA4iJ,EACAxsH,UAIAmuW,CACA,EAw2FApvW,EAAAsvW,oBA/1FA,SAAAzkY,EAAAg0D,EAAA6mE,GACA,MAAA0pQ,EAAA;AAkBA,OARAvkY,EAAAumX,aAAAvyT,EAAA3qD,KAAA2qD,EAAAzrB,GAAA,CAAAq6G,EAAAxsH,KACAykG,EAAA+nB,IACA2hP,EAAA7gZ,KAAA,CACAsc,KAAA4iJ,EACAxsH,UAIAmuW,CACA,EA40FApvW,EAAA21V,eAAsBA,EACtB31V,EAAAw9V,eAAsBA,GACtBx9V,EAAAs9V,2BAAkCA,GAClCt9V,EAAAyuV,WAAkBA,EAClBzuV,EAAAuvW,aAhyFA,SAAAj+X,EAAAo7W,GACA,MAAA99Q,EAAAE,GAAA49Q;AAEA,OAAA8D,EADA9tO,EAAAr3I,KAAAmkY,SAAA5gS,EAAAt9F,GACA82D,QAAAwmC,EACA,EA6xFA5uE,EAAAyvW,aArxFA,SAAAv+X,EAAAw7W,GACA,MAAA99Q,EAAAE,GAAA49Q,GACAiI,EAAA2F,GAAAppX;AACA,OAAAwxI,EAAA83O,UAAA5J,WAAAhiR,GAAA/xG,MAAA83X,GAAA7jO,QACA,EAkxFA9wH,EAAA0vW,aAxvFA,SAAAp+X,EAAAo7W,EAAA/jY,GACA,MAAAwvY,eAAYA,EAAA,OAAAC,kBAAA,IAAgDzvY,GAAA,GAC5DimH,EAAAE,GAAA49Q;AAEA,OAAA+Q,GADA/6O,EAAAr3I,KAAAmkY,SAAA5gS,EAAAt9F,GACA,CACA6mX,iBACAC,gBAAA,IACAE,EAAA1pR,MACAwpR,IAGA,EA8uFAp4V,EAAA49V,cAAqBA,GACrB59V,EAAA8sV,4BAAmCA,EACnC9sV,EAAA2vW,iBA3qFA,SAAAhjY,GACA,MAAAq5J,QAAYA,EAAApqK,SAAiB+Q,EAC7BglK,EAAA;AAmCA,OAlCA3L,EAAA41N,KAAAz6X,QAAA,CAAAyuY,EAAAlgZ,KACA,MAAA68F,EAAA;AAIA,GAAAqjT,EAAArjT,OAAArlG,OAQA0oZ,EAAAzuY,QAAA,CAAA+S,EAAAk/B,KACAm5C,EAAAh+F,KAAA,CAA8B2lB,OAAAk/B;IAT9B,CACA,MAAAl/B,KAAoBA,EAAAk/B,MAAWx3C,EAAAlM;AAC/B,QAAA0oB,IAAAlE,QAAAkE,IAAAg7B,EACA;AAEAm5C,EAAAh+F,KAAA,CAA0B2lB,OAAAk/B,MAC1B,CAMAm5C,EAAAprF,QAAA,EAA0B+S,OAAAk/B,SAC1B,MAAAy8V,EAAA7pO,EAAAj/K,MAAA2I,GAAA6a,IAAA2J,GAAA,GACA47X,EAAA9pO,EAAAj/K,MAAA2I,GAAA6a,IAAA6oC,GACA28V,EAAA/pO,EAAAyuG,SAAAlqQ,IAAAslY,GAAA,GACAG,EAAAhqO,EAAAyuG,SAAAlqQ,IAAAulY;AACAn+N,EAAApjL,KAAA,CACA0hZ,SAAA,CACA/7X,KAAA67X,EACA38V,GAAA48V,GAEAl9D,SAAA,CACA5+T,KAAA27X,EACAz8V,GAAA08V,SAlDA,SAAAn+N,GACA,MAAAu+N,EAAApS,GAAAnsN;AACA,WAAAu+N,EAAAhpZ,OACAgpZ,EACAA,EAAAhjY,OAAA,CAAAsoF,EAAA9lG,KACAwgZ,EAAAhjY,OAAA,CAAA/W,EAAAlP,QAAAyI,GACA0a,KAAA+lY,GACA36S,EAAAy6S,SAAA/7X,MAAAi8X,EAAAF,SAAA/7X,MACAshF,EAAAy6S,SAAA78V,IAAA+8V,EAAAF,SAAA78V,IACAoiD,EAAAs9O,SAAA5+T,MAAAi8X,EAAAr9D,SAAA5+T,MACAshF,EAAAs9O,SAAA1/R,IAAA+8V,EAAAr9D,SAAA1/R,IAGA,CAbA,CAuDAu+H,EACA,EAsoFA3xI,EAAAowW,aApoFA,SAAAA,EAAAvlY,EAAAgwB,EAAA,GACA,MACAw1W,EADAxlY,EAAApgB,OAAAogB,EAAApgB,KAAAmkH,OAAA0hS,YACA,IACAp8X,EAAA2mB,EACAuY,EAAAl/B,EAAArJ,EAAAwuX,SACAhK,EAAAxkX,EAAAwkX,MAAA9kX,IAAAy6F,IACA,MAAAxvC,EAAA,CACA/qE,KAAAu6G,EAAAv6G,KAAAsE;AAKA,OAHA2f,OAAA2wB,KAAA2lE,EAAAvkC,OAAAv5E,SACAsuE,EAAAiL,MAAA,IAA6BukC,EAAAvkC,QAE7BjL,IAEAiL,EAAA,IAAoB51D,EAAA41D,OACpBjL,EAAA,CACA/qE,KAAAogB,EAAApgB,KAAAsE,KACAmlB,OACAk/B;AAkBA,OAhBA1kC,OAAA2wB,KAAAohC,GAAAv5E,SACAsuE,EAAAiL,SAEA4uT,EAAAnoY,SACAsuE,EAAA65T,SAEAxkX,EAAAu9D,QAAAkxT,aACA9jU,EAAA4S,QAAA,GACAv9D,EAAA1J,QAAA,CAAAssJ,EAAA9oJ,KACA,IAAAqiB;AACA,QAAAA,EAAAwuC,EAAA4S,eAAA,IAAAphD,KAAAz4B,KAAA6hZ,EAAA3iP,EAAA5yH,EAAAl2B,EAAA0rY,OAGAxlY,EAAA7gB,OACAwrE,EAAAxrE,KAAA6gB,EAAA7gB,MAEAwrE,CACA,EAgmFAx1B,EAAAwsV,kBAAyBA,EACzBxsV,EAAAwwV,oBAA2BA,EAC3BxwV,EAAAg9V,kBAAyBA,GACzBh9V,EAAA+4V,aAAoBA,EACpB/4V,EAAAu5V,YAAmBA,EACnBv5V,EAAAg+V,gBAAuBA,GACvBh+V,EAAAuwW,kBA1jFA,CAAA3nY,EAAAyzX,EAAAp7V,EAAAuvW,EAAA,MACA,MAAAxX,EAAApwX,EAAA0I,IAAAqqD,QAAA16B;AACA,IAAAwvW,EAAAD,EACA3lY,EAAA;AACA,KAAA4lY,EAAA,UAAA5lY,GAAA,CACA,MAAA+H,EAAAomX,EAAAnuX,KAAA4lY,IACA79X,aAAA,EAAAA,EAAAnoB,KAAAsE,QAAAstY,EACAxxX,EAAA+H,EAGA69X,GAAA,CAEA,CACA,OAAA5lY,EAAA4lY,IA8iFAzwW,EAAA09V,kBAAyBA,GACzB19V,EAAA4tV,YAAmBA,EACnB5tV,EAAAquV,sBAA6BA,EAC7BruV,EAAA8uE,UAAiBA,GACjB9uE,EAAAgvV,8BAAqCA,EACrChvV,EAAAqwV,oBAA2BA,EAC3BrwV,EAAA48V,wBAA+BA,GAC/B58V,EAAAi+V,sBAA6BA,GAC7Bj+V,EAAAy9V,QAAeA,GACfz9V,EAAAi4V,eAAsBA,EACtBj4V,EAAA8wV,wBAA+BA,EAC/B9wV,EAAAs4V,6BAAoCA,EACpCt4V,EAAA0uV,qCAA4CA,EAC5C1uV,EAAAiyV,iBAAwBA,EACxBjyV,EAAAswK,SAAgBA,GAChBtwK,EAAA0wW,cAz9EA,CAAA9nY,EAAAm1E,KACA,MAAAgzS,MAAYA,EAAA2H,MAAAuI,WAAsBr4X,EAAA8xF;AAClC,GAAA3c,EAAA,CACA,MAAA5pF,EAAAqpY,GAAA3yX,KAAApgB,KAAAsE,OAAAgvF,EAAAy/S,CAAA50X,EAAA8xF;AACA,IAAAvmG,EACA;AAEA,MAAA+0Y,EAAAtgY,EAAA0I,IAAAqqD,QAAAxnE,EAAA8sC,IAAA;AACA,OAAAggW,EAAAhgW,IAAA,IAAAioW,EAAApjY,KAIA,CACA,QAAA4yX,EAAAvH,aAAAuH,EAAAjqX,OAAA4qX,SAAA,GAAAtI,EAAA9vV,MAAAy3V,EAAAz3V,MA68EAjB,EAAA2wW,gBAv8EA/nY,IACA,MAAAmoX,MAAYA,EAAA2H,OAAa9vX,EAAA8xF;AACzB,QAAAq2R,EAAAI,aAAA,GAAAJ,EAAA9vV,MAAAy3V,EAAAz3V,MAs8EAjB,EAAAwuV,cAAqBA,EACrBxuV,EAAAswV,wBAA+BA,EAC/BtwV,EAAA0sD,WAAkBA,EAClB1sD,EAAAw+V,OAAcA,GACdx+V,EAAAm8V,QAAeA,GACfn8V,EAAAm+V,aAAoBA,GACpBn+V,EAAAo8V,aAAoBA,GACpBp8V,EAAAy+V,YAAmBA,GACnBz+V,EAAA4wW,gBA/4EA,SAAAtnZ,GACA,OAAAA,aAAAsf,EAAA68X,aACA,EA84EAzlW,EAAAq7C,SAAgBA,EAChBr7C,EAAA4yV,cAAqBA,EACrB5yV,EAAAuxV,SAAgBA,EAChBvxV,EAAAo6V,SAAgBA,GAChBp6V,EAAAs7C,SAvJA,SAAAhyF,GACA,uBAAAA,CACA,EAsJA02C,EAAAw5V,gBAAuBA,EACvBx5V,EAAAm6V,MAAaA,GACbn6V,EAAA6wW,cAvrBA,SAAA1yX,GACA,WAAAqzW,EAAA,CACAx0W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,YACpB,MAAAuf,EAAAwrV,EAAApwW,EAAAy/W,mBAAAxlX,EAAAoL;AACA,QAAAuf,GAAA,OAAAA,EACA;AAEA,MAAA6C,GAAoBA,GAAKh9B,EACzBkoY,EAAAttX,IAAAt8B,OAAA,GACA6pZ,EAAAvtX,EAAA;AACA,GAAAstX,EAAA,CACA,MAAAE,EAAAD,EAAA14W,OAAA,MACA44W,EAAApyU,EAAA3qD,KAAA68X,EAAAvgZ,QAAAsgZ,GACAI,EAAAD,EAAAH,EAAA5pZ;AAQA,GAPA82Y,GAAAn/T,EAAA3qD,KAAA2qD,EAAAzrB,GAAAxqC,EAAA0I,KACApE,OAAA6xI,GAEAA,EAAA/5C,KAAAv6G,KAAAgvQ,SACAz8O,KAAAvyB,OAAA0zB,EAAA1zB,UAAAs0J,EAAA/5C,KAAAv6G,OAEAyiB,OAAA6xI,KAAA3rG,GAAA69V,GACA/pZ,OACA;AAEAgqZ,EAAAryU,EAAAzrB,IACAxN,EAAAqmC,OAAAilU,EAAAryU,EAAAzrB,IAEA69V,EAAApyU,EAAA3qD,MACA0xB,EAAAqmC,OAAApN,EAAA3qD,KAAA88X,EAAAC;AAEA,MAAAE,EAAAtyU,EAAA3qD,KAAA88X,EAAAF,EAAA5pZ;AACA0+C,EAAAk+V,QAAAjlU,EAAA3qD,KAAA88X,EAAAG,EAAAhzX,EAAA1zB,KAAAS,OAAA63C,GAAA,KACA6C,EAAAytV,iBAAAl1W,EAAA1zB,KACA,IAGA,EAmpBAu1C,EAAAoxW,cAhOA,SAAAjzX,GACA,WAAAo1W,EAAA,CACAv2W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,QAAAswW,iBACpB,MAAA/wV,EAAAwrV,EAAApwW,EAAAy/W,mBAAAxlX,EAAAoL,EAAAswW;AACA,QAAA/wV,GAAA,OAAAA,EACA;AAEA,MAAA6C,GAAoBA,GAAKh9B,EACzBkoY,EAAAttX,IAAAt8B,OAAA,GACA6pZ,EAAAvtX,EAAA;AACA,IAAA2tX,EAAAtyU,EAAAzrB;AACA,GAAA09V,EAAA,CACA,MAAAE,EAAAD,EAAA14W,OAAA,MACA44W,EAAApyU,EAAA3qD,KAAA68X,EAAAvgZ,QAAAsgZ,GACAI,EAAAD,EAAAH,EAAA5pZ;AAQA,GAPA82Y,GAAAn/T,EAAA3qD,KAAA2qD,EAAAzrB,GAAAxqC,EAAA0I,KACApE,OAAA6xI,GAEAA,EAAA/5C,KAAAv6G,KAAAgvQ,SACAz8O,KAAAvyB,OAAA0zB,EAAA1zB,UAAAs0J,EAAA/5C,KAAAv6G,OAEAyiB,OAAA6xI,KAAA3rG,GAAA69V,GACA/pZ,OACA;AAEAgqZ,EAAAryU,EAAAzrB,IACAxN,EAAAqmC,OAAAilU,EAAAryU,EAAAzrB,IAEA69V,EAAApyU,EAAA3qD,MACA0xB,EAAAqmC,OAAApN,EAAA3qD,KAAA88X,EAAAC,GAEAE,EAAAtyU,EAAA3qD,KAAA88X,EAAAF,EAAA5pZ,OACA0+C,EAAAk+V,QAAAjlU,EAAA3qD,KAAA88X,EAAAG,EAAAhzX,EAAA1zB,KAAAS,OAAA63C,GAAA,KACA6C,EAAAytV,iBAAAl1W,EAAA1zB,KACA,IAGA,EA2LAu1C,EAAA8tV,gBAAuBA,EACvB9tV,EAAAkqQ,UAAiBA,EACjBlqQ,EAAA05V,OAAcA,EACd15V,EAAAqxW,cAhpBA,SAAAlzX,GACA,WAAAqzW,EAAA,CACAx0W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,YACpB,MAAAuf,EAAAwrV,EAAApwW,EAAAy/W,mBAAAxlX,EAAAoL,IAAA,IACAoiB,GAAoBA,GAAKh9B,EACzB/C,EAAAg5D,EAAA3qD;AACA,IAAApO,EAAA+4D,EAAAzrB;AACA,MAAAw+R,EAAAzzT,EAAA1zB,KAAAS,OAAA63C;AACA,GAAAvf,EAAA,IAEA,IAAA8tX,EAAAzrY,EADA2d,EAAA,GAAA0d,YAAA1d,EAAA;AAEA8tX,EAAAxrY,EACAwrY,EAAAxrY,EAGAA,EAAAwrY,EAAA9tX,EAAA,GAAAt8B;AAGA,MAAAqqZ,EAAA/tX,EAAA,GAAAA,EAAA,GAAAt8B,OAAA;AACA0+C,EAAA0tV,WAAAie,EAAA1rY,EAAA2d,EAAA,GAAAt8B,OAAA,GAEA0+C,EAAAmsV,YAAAuf,EAAAxrY,EAAA8rU,EACA,MACA,GAAApuT,EAAA,IACA,MAAAguX,EAAArzX,EAAA1zB,KAAAs6Y,SAAAl/X,IAAA;AACA+/B,EAAAm7V,OAAAyQ,EAAArzX,EAAA1zB,KAAAS,OAAA63C,IAAAkpC,OAAArmC,EAAAogI,QAAAz7J,IAAA1E,GAAA+/B,EAAAogI,QAAAz7J,IAAAzE,GACA,CACA8/B,EAAAs7V,mBAGA,EAknBAlhW,EAAAyxW,cAvJA,SAAAtzX,GACA,WAAAo1W,EAAA,CACAv2W,KAAAmB,EAAAnB,KACA,OAAAsqI,EAAA9jI,MAAkBA,EAAAwoW,QAAAntT,QAAAi1T,eAClB,MAAA/wV,EAAAwrV,EAAApwW,EAAAy/W,mBAAAxlX,EAAAoL,EAAAswW,GACA1rT,EAAAmmT,EAAApwW,EAAAuzX,gBAAAt5X,EAAA2qB;AACA,QAAAA,GAAA,OAAAA,EACA;AAEA,MAAAl4B,EAAA,CAA2BpgB,KAAA0zB,EAAA1zB,KAAAsE,KAAA0xE,MAAA19B;AAC3BqlC,IACAv9D,EAAAu9D,WAEA5kD,EAAAjtB,OACAy1X,IAAA8I,YAAAj2T,GAAAgjU,gBAAAhjU,EAAA3qD,KAAArJ,EAEA,GAEA,EAsIAm1B,EAAAs7N,eAAsBA,EACtBt7N,EAAAyzV,iBAAwBA,EACxBzzV,EAAA2xW,aA55EA,SAAA3zU,EAAA9pD,EAAAk/B,GACA,MACAgtN,EAAApiM,EAAAp1D,MAAA0I,IAAA82D,QAAApjE,KACAqvX,EAAAqF,EAAAxlX,EAFA,EAEAksP,GACAulI,EAAAjM,EAAAtmV,EAHA,EAGAgtN,GACAv6P,EAAAm4D,EAAA4zU,YAAAvd,GACAvuX,EAAAk4D,EAAA4zU,YAAAjM,GAAA,GACAnxY,EAAA9K,KAAA8b,IAAAK,EAAArR,IAAAsR,EAAAtR,KACAC,EAAA/K,KAAA+b,IAAAI,EAAApR,OAAAqR,EAAArR,QACAF,EAAA7K,KAAA8b,IAAAK,EAAAtR,KAAAuR,EAAAvR,MACAI,EAAAjL,KAAA+b,IAAAI,EAAAlR,MAAAmR,EAAAnR,OAKAif,EAAA,CACApf,MACAC,SACAF,OACAI,QACAD,MATAC,EAAAJ,EAUA0T,OATAxT,EAAAD,EAUA7G,EATA4G,EAUA4D,EATA3D;AAWA,UACAof,EACAk9I,OAAA,IAAAl9I,EAEA,EAg4EAosB,EAAA89V,iBAAwBA,GACxB99V,EAAA25V,qBAA4BA,GAC5B35V,EAAA6xW,sBA10EA,SAIAlmG,EAIA/8L,EAIAjmH,GACA,OAAAm2Y,GAAA,CACAnzF,OACAqzF,WAAA,IAAAt0X,IAAAgE,OAAA2wB,KAAAuvE,EAAAk4F,QACAi4L,WAAA,IAAAr0X,IAAAgE,OAAA2wB,KAAAuvE,EAAAygR,QACA1mY,WAEA,EAwzEAq3C,EAAAu7V,wBAA+BA,GAC/Bv7V,EAAAysV,gBAAuBA,EACvBzsV,EAAA8xW,cA7lBA,SAAA3zX,GACA,WAAAqzW,EAAA,CACAx0W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,YACpB,IAAAu9W,EAAA5iX,EAAA/W,QACAvB,EAAAg5D,EAAA3qD;AACA,MAAApO,EAAA+4D,EAAAzrB;AACA,GAAA5vB,EAAA,IACA,MAAA7e,EAAA6e,EAAA,GAAA0d,YAAA1d,EAAA;AACAu9W,GAAAv9W,EAAA,GAAAz8B,MAAA4d,EAAA6e,EAAA,GAAAt8B,QACA2e,GAAAlB;AACA,MAAAotY,EAAAlsY,EAAAC;AACAisY,EAAA,IACAhR,EAAAv9W,EAAA,GAAAz8B,MAAA4d,EAAAotY,EAAAptY,GAAAo8X,EACAl7X,EAAAC,EAEA,CACA8C,EAAAg9B,GAAA0tV,WAAAyN,EAAAl7X,EAAAC,KAGA,EA0kBAk6B,EAAAgyW,cAxIA,SAAA7zX,GACA,WAAAo1W,EAAA,CACAv2W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,YACpB,IAAAu9W,EAAA5iX,EAAA/W,QACAvB,EAAAg5D,EAAA3qD;AACA,MAAApO,EAAA+4D,EAAAzrB;AACA,GAAA5vB,EAAA,IACA,MAAA7e,EAAA6e,EAAA,GAAA0d,YAAA1d,EAAA;AACAu9W,GAAAv9W,EAAA,GAAAz8B,MAAA4d,EAAA6e,EAAA,GAAAt8B,QACA2e,GAAAlB;AACA,MAAAotY,EAAAlsY,EAAAC;AACAisY,EAAA,IACAhR,EAAAv9W,EAAA,GAAAz8B,MAAA4d,EAAAotY,EAAAptY,GAAAo8X,EACAl7X,EAAAC,EAEA,CACA8C,EAAAg9B,GAAA0tV,WAAAyN,EAAAl7X,EAAAC,KAGA,EAqHAk6B,EAAAiyW,uBApnBA,SAAA9zX,GACA,WAAAqzW,EAAA,CACAx0W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,YACpB,MAAA0uX,EAAAtpY,EAAA0I,IAAAqqD,QAAAkD,EAAA3qD,MACA6uB,EAAAwrV,EAAApwW,EAAAy/W,mBAAAxlX,EAAAoL,IAAA;AACA,IAAA0uX,EAAArnY,MAAA,GAAAs7X,eAAA+L,EAAAxiZ,OAAA,GAAAwiZ,EAAAjM,YAAA,GAAA9nX,EAAA1zB,MACA;AAEAme,EAAAg9B,GACAqmC,OAAApN,EAAA3qD,KAAA2qD,EAAAzrB,IACAkyV,aAAAzmU,EAAA3qD,KAAA2qD,EAAA3qD,KAAAiK,EAAA1zB,KAAAs4C,KAGA,EAumBA/C,EAAAmyW,kBA3jBA,SAAAh0X,GACA,WAAAqzW,EAAA,CACAx0W,KAAAmB,EAAAnB,KACAsqI,QAAA,EAAoB1+I,QAAAi2D,QAAAr7C,QAAAwoW,YACpB,MAAAjpV,EAAAwrV,EAAApwW,EAAAy/W,mBAAAxlX,EAAAoL,IAAA,GACAoiB,EAAAh9B,EAAAg9B,GAAAqmC,OAAApN,EAAA3qD,KAAA2qD,EAAAzrB,IAEA6sV,EADAr6V,EAAAt0B,IAAAqqD,QAAAkD,EAAA3qD,MACA+rX,aACAmS,EAAAnS,GAAAtzX,EAAA0lY,aAAApS,EAAA9hX,EAAA1zB,KAAAs4C;AACA,IAAAqvW,EACA;AAGA,GADAxsW,EAAAkoO,KAAAmyH,EAAAmS,GACAj0X,EAAA2nX,WAAA3nX,EAAAotW,OAAA,CACA,MAAA7wR,UAAwBA,EAAAywR,eAAyBviX,GACjDitX,gBAAwBA,GAAkB13W,EAAAotW,OAAAE,iBAC1C4D,EAAAlE,GAAAzwR,EAAAg+R,IAAAvH,cAAAz2R,EAAAq2R,MAAA1B;AACA,GAAAA,EAAA,CACA,MAAAgQ,EAAAhQ,EAAAniX,OAAA83F,GAAA6wR,EAAAnqY,SAAAs5G,EAAAv6G,KAAAsE;AACA62C,EAAAw5V,YAAAC,EACA,CACA,CACA,GAAAlhX,EAAAm0X,eAAA,CAEA,MAAAv0T,EAAA,eAAA5/D,EAAA1zB,KAAAsE,MAAA,gBAAAovB,EAAA1zB,KAAAsE,KAAA;AACAi9X,IAAAsc,iBAAAvqT,EAAAh7C,GAAAu9F,KACA,CACA,MAAAqjC,EAAA/9H,EAAAt0B,IAAAqqD,QAAAkD,EAAA3qD,KAAA,GAAA09W;AACAjuN,GACAA,EAAAl5K,OAAA0zB,EAAA1zB,MACAkiB,EAAA8yX,QAAA75V,EAAAt0B,IAAAutD,EAAA3qD,KAAA,MACAiK,EAAAo0X,eAAAp0X,EAAAo0X,cAAA/uX,EAAAmgJ,KACA/9H,EAAAnnC,KAAAogE,EAAA3qD,KAAA,KAIA,SAAAltB,EAAAvB,EAAA0B,GAAA;AC57JAunB,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAKnB,MAAAqgU,EAAA,WAKAC,EAAAF,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,aACA+jY,WAAA,MAEAhD,eAAA,KAGA1nT,QAAA,SACAwwE,MAAA,QACA62O,YACArC,UAAA,IACA,CACA,CAAc5rW,IAAA,eAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,oBAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAuc,cAAA,MAAoCjnB,cACpCA,EAAAqc,OAAAphZ,KAAAoI,MAEA6jZ,iBAAA,MAAuClnB,cACvCA,EAAAoc,WAAAnhZ,KAAAoI,MAEA8jZ,gBAAA,MAAsCnnB,cACtCA,EAAA6U,KAAA55Y,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,kBAAA7vY,KAAA4kY,OAAAG,SAAAknB,mBAEA,EACA,aAAA9b,GACA,OACA0b,EAAAL,kBAAA,CACAn1X,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,OAGA;AAGAu1C,EAAA0yW,WAAkBA,EAClB1yW,EAAAzkC,QAAem3Y,EACf1yW,EAAAyyW,WAAkBA;AC5DlB/jY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAKnB,MAAA0gU,EAAA,uDAIAC,EAAA,uDAIAC,EAAA,+CAIAC,EAAA,+CAKAC,EAAAV,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,OACA+jY,WAAA,MAEAhD,eAAA,KAGA,SAAA1C,GACA,OACA,CACA5rW,IAAA,UAEA,CACAA,IAAA,IACAotW,SAAA/jX,GAAA,WAAAA,EAAAvW,MAAA6+Y,YAAA,MAEA,CACA7+Y,MAAA,kBACA8+Y,UAAApuS,KAAAv6G,KAAAsE,OAAApI,KAAAoI,MAEA,CACAuF,MAAA,cACAs6X,SAAAtlY,GAAA,4BAA2D0iB,KAAA1iB,IAAA,MAG3D,EACA,UAAA6jY,EAAA2C,eAAiBA,IACjB,gBAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAid,QAAA,MAA8B3nB,cAC9BA,EAAA2Y,QAAA19Y,KAAAoI,MAEAukZ,WAAA,MAAiC5nB,cACjCA,EAAA8b,WAAA7gZ,KAAAoI,MAEAwkZ,UAAA,MAAgC7nB,cAChCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAA4nB,aACA,YAAA3sZ,KAAA4kY,OAAAG,SAAA4nB,aAEA,EACA,aAAAxc,GACA,OACA0b,EAAA3B,cAAA,CACA7zX,KAAA81X,EACAroZ,KAAA9D,KAAA8D,OAEA+nZ,EAAA3B,cAAA,CACA7zX,KAAAg2X,EACAvoZ,KAAA9D,KAAA8D,OAGA,EACA,aAAAusY,GACA,OACAwb,EAAApB,cAAA,CACAp0X,KAAA+1X,EACAtoZ,KAAA9D,KAAA8D,OAEA+nZ,EAAApB,cAAA,CACAp0X,KAAAi2X,EACAxoZ,KAAA9D,KAAA8D,OAGA;AAGAu1C,EAAAkzW,KAAYA,EACZlzW,EAAAzkC,QAAe23Y,EACflzW,EAAA8yW,eAAsBA,EACtB9yW,EAAA+yW,eAAsBA,EACtB/yW,EAAAgzW,qBAA4BA,EAC5BhzW,EAAAizW,qBAA4BA;ACvG5BvkY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAEnB,MACAohU,EAAA,YAIAf,EAAA,iBAOAgB,EAAAjB,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,aACA+jY,WAAA,MAEA4gB,aAAA,WACA5jB,eAAA,GACAgW,aACAwM,oBAGA15P,MAAA,aACA,OAAAxwE,GACA,SAAkBzhF,KAAAgC,QAAA+qZ,eAClB,EACAtmB,UAAA,IACA,CACA,CAAc5rW,IAAA,OAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAud,iBAAA,MAAuCjoB,WAAAM,WACvCrlY,KAAAgC,QAAA2pZ,eACAtmB,IAAAgb,WAAArgZ,KAAAoI,KAAApI,KAAAgC,QAAA+qZ,aAAA/sZ,KAAAgC,QAAAm9Y,WAAAwC,iBAtCA,WAsCA3hZ,KAAA4kY,OAAAqS,cAAA4V,IAAAlzQ,MAEAorP,EAAAsb,WAAArgZ,KAAAoI,KAAApI,KAAAgC,QAAA+qZ,aAAA/sZ,KAAAgC,QAAAm9Y,WAGA,EACA,oBAAAtP,GACA,OACA,kBAAA7vY,KAAA4kY,OAAAG,SAAAioB,mBAEA,EACA,aAAA7c,GACA,IAAA8c,EAAApB,EAAAL,kBAAA,CACAn1X,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D;AAYA,OAVA9D,KAAAgC,QAAAm9Y,WAAAn/Y,KAAAgC,QAAA2pZ,kBACAsB,EAAApB,EAAAL,kBAAA,CACAn1X,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,KACAq7Y,UAAAn/Y,KAAAgC,QAAAm9Y,UACAwM,eAAA3rZ,KAAAgC,QAAA2pZ,eACA1U,cAAA,IAAuCj3Y,KAAA4kY,OAAAqS,cAAA4V,GACvCjoB,OAAA5kY,KAAA4kY,UAGA,CACAqoB,EAEA;AAGA5zW,EAAAyzW,WAAkBA,EAClBzzW,EAAAzkC,QAAek4Y,EACfzzW,EAAAyyW,WAAkBA;AC5ElB/jY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBxpE,EAAYwpE,EAAQ;AAKpB,MAAAyhU,EAAA,uBAIAC,EAAA,uBAKAC,EAAAvB,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,YACA+jY,WAAA,MAEAkhB,oBAAA,YACAC,qBACAC,mBACAC,gBAAA,KACArkB,eAAA,KAGA1nT,QAAA,QACAinT,MAAA,GACAz2O,MAAA,QACAx7I,QACAqyX,YACA,aAAA/B,GACA,OACA7kY,SAAA,CACA0S,QAAA5U,KAAAgC,QAAAwrZ,gBACA/mB,UAAA/jX,IACA,IAAA2d;AACA,MAAAgtX,oBAA4BA,GAAsBrtZ,KAAAgC;AAMlD,MALA,aAAAq+B,EAAA3d,EAAA8/J,yBAAA,IAAAniJ,OAAA,EAAAA,EAAA05C,YAAA,IAEAxzD,OAAA/V,KAAAogC,WAAAy8W,IACAzpY,IAAApT,KAAAiQ,QAAA4sY,EAAA,KACA,IAEA,MAIA9mB,aAGA,EACAE,UAAA,IACA,CACA,CACA5rW,IAAA,MACAygX,mBAAA,SAIA,UAAA9U,EAAAtiX,KAAiBA,EAAAilX,mBACjB,OACA,MACA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBACA,CACA,OACA,CACAtjS,MAAA3hF,EAAA41D,MAAA53E,SACAlC,KAAAgC,QAAAqrZ,oBAAAnpY,EAAA41D,MAAA53E,SACA,MAEA,GAGA,EACA,WAAAutY,GACA,OACAge,aAAArxW,GAAA,EAA2C2oV,cAC3CA,EAAAyZ,QAAAx+Y,KAAAoI,KAAAg0C,GAEAsxW,gBAAAtxW,GAAA,EAA8C2oV,cAC9CA,EAAAic,WAAAhhZ,KAAAoI,KAAA,YAAAg0C,GAGA,EACA,oBAAAyzV,GACA,OACA,gBAAA7vY,KAAA4kY,OAAAG,SAAA2oB,kBAEA//T,UAAA,KACA,MAAA2P,MAAwBA,EAAAg9S,WAAiBt6Y,KAAA4kY,OAAA3iX,MAAA8xF,UACzC2uS,EAAA,IAAApI,EAAAhgW;AACA,SAAAgjD,GAAAg9S,EAAAxyX,OAAAhkB,KAAAsE,OAAApI,KAAAoI,UAGAs6Y,GAAApI,EAAAxyX,OAAAovE,YAAA32F,SACAP,KAAA4kY,OAAAG,SAAAoU,cAKAnsT,MAAA,EAAsB43S,aACtB,IAAA5kY,KAAAgC,QAAAsrZ,kBACA;AAEA,MAAArrY,MAAwBA,GAAQ2iX,GAChC7wR,UAAwBA,GAAY9xF,GACpCmoX,MAAwBA,EAAA9sS,SAAeyW;AACvC,IAAAzW,GAAA8sS,EAAAtiX,OAAAhkB,OAAA9D,KAAA8D,KACA;AAEA,MAAA6pZ,EAAAvjB,EAAAI,eAAAJ,EAAAtiX,OAAA4qX,SAAA,EACAkb,EAAAxjB,EAAAtiX,OAAAovE,YAAA22T,SAAA;AACA,SAAAF,IAAAC,IAGAhpB,EACAS,QACAF,QAAA,EAAgClmV,SAChCA,EAAAqmC,OAAA8kT,EAAA9vV,IAAA,EAAA8vV,EAAA9vV,UAGAqgW,WACAhhQ,OAGAm0Q,UAAA,EAA0BlpB,aAC1B,IAAA5kY,KAAAgC,QAAAurZ,gBACA;AAEA,MAAwBtrY,MAAAg4X,GAAiBrV,GACzC7wR,UAAwBA,EAAAppF,OAAiBsvX,GACzC7P,MAAwBA,EAAA9sS,SAAeyW;AACvC,IAAAzW,GAAA8sS,EAAAtiX,OAAAhkB,OAAA9D,KAAA8D,KACA;AAGA,GADAsmY,EAAAI,eAAAJ,EAAAtiX,OAAA4qX,SAAA,EAEA;AAEA,MAAAz1N,EAAAmtN,EAAAntN;AACA,YAAAxrJ,IAAAwrJ,IAGAtyJ,EAAAkuX,OAAA57N,GAEA2nN,EAAAG,SAAAI,QAAA,EAAsDlmV,SACtDA,EAAAq2V,aAAArzX,EAAAixX,UAAAqC,KAAA5qX,EAAAqqD,QAAAioG,UAIA2nN,EAAAG,SAAA4V,aAGA,EACA,aAAAxK,GACA,OACA0b,EAAAP,uBAAA,CACAj1X,KAAA62X,EACAppZ,KAAA9D,KAAA8D,KACAmzY,cAAAp6W,KACA36B,SAAA26B,EAAA,OAGAgvX,EAAAP,uBAAA,CACAj1X,KAAA82X,EACArpZ,KAAA9D,KAAA8D,KACAmzY,cAAAp6W,KACA36B,SAAA26B,EAAA,OAIA,EACA,qBAAA0zW,GACA,OAGA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,0BACAvnV,MAAA,CACA64V,YAAA,CAAA9rU,EAAA3tE,KACA,IAAAA,EAAAymG,cACA;AAGA,GAAAnwG,KAAA4kY,OAAAj7K,SAAA3pN,KAAA8D,KAAAsE,MACA;AAEA,MAAA/E,EAAAqG,EAAAymG,cAAAC,QAAA,cACA29S,EAAArkZ,EAAAymG,cAAAC,QAAA,sBACA49S,EAAAD,EAAA93Y,KAAAC,MAAA63Y,QAAAt8X,EACAvvB,EAAA8rZ,aAAA,EAAAA,EAAAn2Y;AACA,IAAAxU,IAAAnB,EACA;AAEA,MAAA+8C,GAAgCA,EAAAgpE,UAAa5wC,EAAAp1D,MAI7CgsY,EAAAhmS,EAAA5kH,OAAAod,QAAA;AAaA,OAVAw+B,EAAAivW,qBAAAluZ,KAAA8D,KAAAS,OAAA,CAAmErC,YAAU+rZ,IAC7EhvW,EAAA80D,UAAAq2R,MAAAtiX,OAAAhkB,OAAA9D,KAAA8D,MAEAm7C,EAAAq2V,aAAArzX,EAAA6wX,cAAAyC,KAAAt2V,EAAAt0B,IAAAqqD,QAAAjyE,KAAA+b,IAAA,EAAAmgC,EAAA80D,UAAAxmF,KAAA,MAKA0xB,EAAAosV,QAAA,YACAh0T,EAAAyuM,SAAA7mO,UAMA;AAGA5F,EAAA+zW,UAAiBA,EACjB/zW,EAAA6zW,mBAA0BA,EAC1B7zW,EAAAzkC,QAAew4Y,EACf/zW,EAAA8zW,gBAAuBA;ACjOvBplY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAWnB,MAAAqgU,EAAA,yBAIAqC,EAAA,0BAKAC,EAAAvC,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,OACA+jY,WAAA,MAEAhD,eAAA,KAGAI,SAAA,IACA9yX,QACA43Y,YACA5nB,UAAA,IACA,CACA,CAAc5rW,IAAA,SAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,cAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACA6e,QAAA,MAA8BvpB,cAC9BA,EAAA2Y,QAAA19Y,KAAAoI,MAEAmmZ,WAAA,MAAiCxpB,cACjCA,EAAA8b,WAAA7gZ,KAAAoI,MAEAomZ,UAAA,MAAgCzpB,cAChCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAAwpB,aAEA,EACA,aAAApe,GACA,OACA0b,EAAA3B,cAAA,CACA7zX,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,OAGA,EACA,aAAAusY,GACA,OACAwb,EAAApB,cAAA,CACAp0X,KAAA83X,EACArqZ,KAAA9D,KAAA8D,OAGA;AAGAu1C,EAAA+0W,KAAYA,EACZ/0W,EAAAzkC,QAAew5Y,EACf/0W,EAAAyyW,WAAkBA,EAClBzyW,EAAA80W,WAAkBA;AC/ElBpmY,OAAAmhC,eAAA7P,EAAA,cAA+C12C,WAE/C8oF,EAAQ;AAOR,MAAAs3S,EANWt3S,EAAQ,OAMnB4lT,UAAA9sY,OAAA,CACA6D,KAAA,QACA+jY,WAAA,MAEAl4L,MAAA,gBAGA,mBAAA2yL,GACA,OACA,CACA3yL,MAAAj0M,KAAAgC,QAAAiyM,MACA73J,WAAA,CACA92C,MAAA,CACAsP,QAAA,KACA6xX,UAAA/jX,IAAgD,IAAA2d;AAAQ,eAAAA,EAAA3d,EAAA/U,MAAArI,aAAA,IAAA+6B,OAAA,EAAAA,EAAA5f,QAAA,cACxD+lX,WAAApqV,GACAA,EAAA92C,MAGA,CACAqI,MAAA,UAAiDyuC,EAAA92C,SAHjD,MAUA,EACAmqY,YAAA,MAEAgf,SAAAnpZ,GAAA,EAAkC+/X,WAClCA,IACAqY,QAAA,aAA4Cp4Y,UAC5Cq0I,MAEA+0Q,WAAA,MAAiCrpB,WACjCA,IACAqY,QAAA,aAA4Cp4Y,MAAA,OAC5CqpZ,uBACAh1Q;AAMAtgG,EAAA0pV,MAAaA,EACb1pV,EAAAzkC,QAAemuX;ACvDfh7W,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAQ/C,MAAA2jN,EANW76H,EAAQ,OAMnB/mE,KAAAngB,OAAA,CACA6D,KAAA,MACAmgY,WACA9mT,QAAA;AAGApoC,EAAAitK,SAAgBA,EAChBjtK,EAAAzkC,QAAe0xM;ACffv+L,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBmjU,EAAiBnjU,EAAQ;AAQzB,MAAAojU,EAAAhD,EAAAxa,UAAA9sY,OAAA,CACA6D,KAAA,aACA+jY,WAAA,MAEA7mY,MAAA,eACAyI,MAAA,EACA83F,WAAAp0E,IAGA,qBAAA8+W,GACA,OACAqe,EAAAE,WAAA9uZ,KAAAgC,SAEA;AAGAq3C,EAAAw1W,WAAkBA,EAClBx1W,EAAAzkC,QAAei6Y;AC5Bf9mY,OAAAmhC,eAAA7P,EAAA,cAA+C12C,WAE/C8oF,EAAQ;AAOR,MAAAsjU,EANWtjU,EAAQ,OAMnB4lT,UAAA9sY,OAAA,CACA6D,KAAA,aACA+jY,WAAA,MAEAl4L,MAAA,gBAGA,mBAAA2yL,GACA,OACA,CACA3yL,MAAAj0M,KAAAgC,QAAAiyM,MACA73J,WAAA,CACA4yW,WAAA,CACAp6Y,QAAA,KACA6xX,UAAA/jX,KAAA/U,MAAAqhZ,WACAxoB,WAAApqV,GACAA,EAAA4yW,WAGA,CACArhZ,MAAA,gBAAuDyuC,EAAA4yW,cAHvD,MAUA,EACAvf,YAAA,MAEAwf,cAAAD,GAAA,EAA4C3pB,WAC5CA,IACAqY,QAAA,aAA4CsR,eAC5Cr1Q,MAEAu1Q,gBAAA,MAAsC7pB,WACtCA,IACAqY,QAAA,aAA4CsR,WAAA,OAC5CL,uBACAh1Q;AAMAtgG,EAAA01W,WAAkBA,EAClB11W,EAAAzkC,QAAem6Y;ACvDfhnY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnB0jU,EAAgB1jU,EAAQ;AAQxB,MAAA2jU,EAAAvD,EAAAxa,UAAA9sY,OAAA,CACA6D,KAAA,YACAmoY,sBAAA,IACA,CACA4e,EAAAE,aAGA,gBAAA5mB,CAAAltV,GACA,IAAAlb;AACA,MAAAzH,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ;AAEA,OACAgvG,eAAA,QAAAjvX,EAAAwrX,EAAAjkB,aAAAikB,EAAAhmB,kBAAAtqV,EAAA,iBAAA3iB,WAAA,IAAAyH,IAAA,KAEA;AAGAgZ,EAAA+1W,UAAiBA,EACjB/1W,EAAAzkC,QAAew6Y;AChCfrnY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAA8jU,EAAA1D,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,YACA+jY,WAAA,MAEAgT,aACAhW,eAAA,KAGAvrX,UACAq0I,MAAA,SACAuyL,cACAqkD,wBACApC,UAAA,IACA,CACA,CAAc5rW,IAAA,OAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBACA,EACAC,WAAA,IACA,KAEA,WAAAqG,GACA,OACA+f,aAAA,MAAmCzqB,WAAAM,QAAApjX,QAAA2iX,YACnCG,EAAAhzV,MAAA,CACA,IAAAgzV,EAAA4V,WACA,IAAA5V,EAAAI,QAAA,KACA,MAAApxR,UAAgCA,EAAAywR,eAAyBviX;AACzD,GAAA8xF,EAAAq2R,MAAAtiX,OAAAhkB,KAAAimW,KAAAg/B,UACA;AAEA,MAAAoW,UAAgCA,GAAYn/Y,KAAAgC,SAC5CktY,gBAAgCA,GAAkBtK,EAAAE,iBAClD4D,EAAAlE,GACAzwR,EAAAg+R,IAAAvH,cAAAz2R,EAAAq2R,MAAA1B;AACA,OAAArD,IACA4V,cAAA,CAA6Cn3Y,KAAA9D,KAAAoI,OAC7C+8X,QAAA,EAAwClmV,KAAA6mO,eACxC,GAAAA,GAAA4iH,GAAAyW,EAAA,CACA,MAAAzG,EAAAhQ,EACAniX,OAAA83F,GAAA6wR,EAAAnqY,SAAAs5G,EAAAv6G,KAAAsE;AACA62C,EAAAw5V,YAAAC,EACA,CACA,WAEA/+P,UAKA,EACA,oBAAAk2P,GACA,OACA,gBAAA7vY,KAAA4kY,OAAAG,SAAAyqB,eACA,kBAAAxvZ,KAAA4kY,OAAAG,SAAAyqB,eAEA;AAGAn2W,EAAAk2W,UAAiBA,EACjBl2W,EAAAzkC,QAAe26Y;ACtEfxnY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAgkU,EAAA5D,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,UACA+jY,WAAA,MAEAujB,OAAA,cACAvmB,eAAA,KAGA1nT,QAAA,UACAwwE,MAAA,QACA62O,YACA/B,cAAA,MAEA3yB,MAAA,CACAx/V,QAAA,EACA2xX,eAIA,SAAAE,GACA,OAAAzmY,KAAAgC,QAAA0tZ,OACA9rY,IAAAwwV,KACAv5U,IAAA,IAAqBu5U,IACrBt6R,MAAA,CAAqBs6R,WAErB,EACA,UAAAoyB,EAAAtiX,KAAiBA,EAAAilX,mBAKjB,WAJAnpY,KAAAgC,QAAA0tZ,OAAA3qZ,SAAAmf,EAAA41D,MAAAs6R,OAEAlwV,EAAA41D,MAAAs6R,MACAp0W,KAAAgC,QAAA0tZ,OAAA,KAC0B7D,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EAC1B,EACA,WAAAsG,GACA,OACAkgB,WAAAvzW,GAAA,EAAyC2oV,gBACzC/kY,KAAAgC,QAAA0tZ,OAAA3qZ,SAAAq3C,EAAAg4T,QAGA2wB,EAAAyZ,QAAAx+Y,KAAAoI,KAAAg0C,GAEAwzW,cAAAxzW,GAAA,EAA4C2oV,gBAC5C/kY,KAAAgC,QAAA0tZ,OAAA3qZ,SAAAq3C,EAAAg4T,QAGA2wB,EAAAic,WAAAhhZ,KAAAoI,KAAA,YAAAg0C,GAGA,EACA,oBAAAyzV,GACA,OAAA7vY,KAAAgC,QAAA0tZ,OAAAhxY,OAAA,CAAAo9J,EAAAs4L,SACAt4L,EAEA,YAA4Bs4L,KAAM,IAAAp0W,KAAA4kY,OAAAG,SAAA6qB,cAAA,CAA+Cx7C,YAExE,GACT,EACA,aAAA+7B,GACA,OAAAnwY,KAAAgC,QAAA0tZ,OAAA9rY,IAAAwwV,GACAy3C,EAAAP,uBAAA,CACAj1X,KAAA,IAAAia,OAAA,OAAwCvtC,KAAA8b,OAAA7e,KAAAgC,QAAA0tZ,WAAoCt7C,WAC5EtwW,KAAA9D,KAAA8D,KACAmzY,cAAA,CACA7iC,WAIA;AAGA/6T,EAAAo2W,QAAeA,EACfp2W,EAAAzkC,QAAe66Y;AC/Ef1nY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBokU,EAAcpkU,EAAQ;AAWtB,MAAAqkU,EAAAjE,EAAAxa,UAAA9sY,OAAA,CACA6D,KAAA,UACA+jY,WAAA,MAEAyK,MAAA,IACAmZ,cAAA,MAGAtgB,YAAA,MAEAugB,KAAA,MAA2B/tY,QAAA6jQ,cAC3B+pI,EAAAG,KAAA/tY,EAAA6jQ,GAEAmqI,KAAA,MAA2BhuY,QAAA6jQ,cAC3B+pI,EAAAI,KAAAhuY,EAAA6jQ,KAIA,qBAAAyqH,GACA,OACAsf,UAAA7vZ,KAAAgC,SAEA,EACA,oBAAA6tY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAAirB,OACA,kBAAAhwZ,KAAA4kY,OAAAG,SAAAkrB,OACA,YAAAjwZ,KAAA4kY,OAAAG,SAAAkrB,OAEA,YAAAjwZ,KAAA4kY,OAAAG,SAAAirB,OACA,kBAAAhwZ,KAAA4kY,OAAAG,SAAAkrB,OAEA;AAGA52W,EAAAy2W,QAAeA,EACfz2W,EAAAzkC,QAAek7Y;AClDf/nY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBxpE,EAAYwpE,EAAQ;AAMpB,MAAAykU,EAAArE,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,iBACA+jY,WAAA,MAEAhD,eAAA,KAGAl3O,MAAA,QACAw0O,UAAA,IACA,EAAkB5rW,IAAA,OAElB,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBACA,EACA,WAAAsG,GACA,OACA0gB,kBAAA,MAAwC9qB,QAAApjX,MAAAg4X,MAExC,IAAA4R,EAAA3D,cAAAjO,IAAAhyR,OAAAk4F,MAAAngN,KAAAoI,OACA;AAEA,MAAA2rG,UAAwBA,GAAYkmS,GACZ7P,MAAAgmB,EAAAre,IAAAse,GAAqCt8S,EAC7Du8S,EAAAjrB;AAiBA,OAhBA,IAAA+qB,EAAA5lB,aACA8lB,EAAApV,gBAAA,CACA3tX,KAAAxqB,KAAA+b,IAAAsxY,EAAA91W,IAAA,KACAmS,GAAA4jW,EAAA/1W,KACqB,CACrBx2C,KAAA9D,KAAAoI,OAGAyjZ,EAAA5B,gBAAAl2S,GACAu8S,EAAApV,gBAAAmV,EAAA/1W,IAAA,CACAx2C,KAAA9D,KAAAoI,OAIAkoZ,EAAArV,cAAA,CAAiDn3Y,KAAA9D,KAAAoI,OAEjDkoZ,EAEAnrB,QAAA,EAAgClmV,KAAA6mO,eAChC,IAAAzlP;AACA,GAAAylP,EAAA,CACA,MAAAisH,IAAgCA,GAAM9yV,EAAA80D,UACtCw8S,EAAAxe,EAAA5yX;AACA,GAAA4yX,EAAA7G,UACA6G,EAAA7G,UAAAuC,YACAxuV,EAAAq2V,aAAArzX,EAAA6wX,cAAAvuY,OAAA06C,EAAAt0B,IAAAonX,EAAAz3V,IAAA,IAEAy3V,EAAA7G,UAAA7hO,QACApqH,EAAAq2V,aAAArzX,EAAA68X,cAAAv6Y,OAAA06C,EAAAt0B,IAAAonX,EAAAz3V,MAGA2E,EAAAq2V,aAAArzX,EAAA6wX,cAAAvuY,OAAA06C,EAAAt0B,IAAAonX,EAAAz3V;IAGA,CAEA,MAAAp2B,EAAA,QAAAmc,EAAA0xW,EAAAjqX,OAAAhkB,KAAAk8Y,aAAAvG,mBAAA,IAAAp5W,OAAA,EAAAA,EAAA97B;AACA2f,IACA+6B,EAAAm7V,OAAAmW,EAAArsY,GACA+6B,EAAAq2V,aAAArzX,EAAA6wX,cAAAvuY,OAAA06C,EAAAt0B,IAAA4lY,EAAA,IAEA,CACAtxW,EAAAs7V,gBACA,CACA,WAEA5gQ,OAGA,EACA,aAAAw2P,GACA,OACA0b,EAAAnB,cAAA,CACAr0X,KAAA,8BACAvyB,KAAA9D,KAAA8D,OAGA;AAGAu1C,EAAA62W,eAAsBA,EACtB72W,EAAAzkC,QAAes7Y;AC9FfnoY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAKnB,MAAAqgU,EAAA,2DAKA0E,EAAA3E,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,QACA+jY,WAAA,MAEAvuX,UACA6yY,eACAtnB,eAAA,KAGA,MAAAvrX,GACA,OAAA5d,KAAAgC,QAAA4b,MACA,EACA,KAAAq0I,GACA,OAAAjyJ,KAAAgC,QAAA4b,OAAA,gBACA,EACA1L,aACA60X,cAAA,MAEA5xT,IAAA,CACAvgE,QAAA,MAEA2nY,IAAA,CACA3nY,QAAA,MAEA2oJ,MAAA,CACA3oJ,QAAA,QAIA,SAAA6xX,GACA,OACA,CACA5rW,IAAA76B,KAAAgC,QAAAyuZ,YACA,WACA,gCAGA,EACA,UAAAjqB,EAAA2C,eAAiBA,IACjB,aAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBACA,EACA,WAAAsG,GACA,OACAihB,SAAA1uZ,GAAA,EAAoC+iY,cACpCA,EAAAkW,cAAA,CACAn3Y,KAAA9D,KAAAoI,KACA0xE,MAAA93E,IAIA,EACA,aAAAmuY,GACA,OACA0b,EAAAnB,cAAA,CACAr0X,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,KACAmzY,cAAAp6W,IACA,QAAA0/W,EAAApnU,EAAAooF,GAAA1gI;AACA,OAA6Bs4C,MAAAonU,MAAAh/O,YAI7B;AAGAlkH,EAAAm3W,MAAaA,EACbn3W,EAAAzkC,QAAe47Y,EACfn3W,EAAAyyW,WAAkBA;AC/ElB/jY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAKnB,MAAA0gU,EAAA,+CAIAC,EAAA,+CAIAC,EAAA,2CAIAC,EAAA,2CAKAqE,EAAA9E,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,SACA+jY,WAAA,MAEAhD,eAAA,KAGA,SAAA1C,GACA,OACA,CACA5rW,IAAA,MAEA,CACAA,IAAA,IACAotW,SAAA/jX,GAAA,WAAAA,EAAAvW,MAAAijZ,WAAA,MAEA,CACAjjZ,MAAA,oBACA8+Y,UAAApuS,KAAAv6G,KAAAsE,OAAApI,KAAAoI,MAEA,CACAuF,MAAA,qBAGA,EACA,UAAA64X,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAohB,UAAA,MAAgC9rB,cAChCA,EAAA2Y,QAAA19Y,KAAAoI,MAEA0oZ,aAAA,MAAmC/rB,cACnCA,EAAA8b,WAAA7gZ,KAAAoI,MAEA2oZ,YAAA,MAAkChsB,cAClCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAA+rB,eACA,YAAA9wZ,KAAA4kY,OAAAG,SAAA+rB,eAEA,EACA,aAAA3gB,GACA,OACA0b,EAAA3B,cAAA,CACA7zX,KAAA81X,EACAroZ,KAAA9D,KAAA8D,OAEA+nZ,EAAA3B,cAAA,CACA7zX,KAAAg2X,EACAvoZ,KAAA9D,KAAA8D,OAGA,EACA,aAAAusY,GACA,OACAwb,EAAApB,cAAA,CACAp0X,KAAA+1X,EACAtoZ,KAAA9D,KAAA8D,OAEA+nZ,EAAApB,cAAA,CACAp0X,KAAAi2X,EACAxoZ,KAAA9D,KAAA8D,OAGA;AAGAu1C,EAAAs3W,OAAcA,EACdt3W,EAAAzkC,QAAe+7Y,EACft3W,EAAA8yW,eAAsBA,EACtB9yW,EAAA+yW,eAAsBA,EACtB/yW,EAAAgzW,qBAA4BA,EAC5BhzW,EAAAizW,qBAA4BA;ACtG5BvkY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAulU,EAAAnF,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,WACA+jY,WAAA,MAEAhD,eAAA,GACA8nB,mBAAA,aACAC,oBAAA,gBAGAzvU,QAAA,mBACAqnT,YACArC,UAAA,IACA,CACA,CACA5rW,IAAA,OAIA,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,oBAAA0G,GACA,OACA7iT,MAAA,IAAAhtF,KAAA4kY,OAAAG,SAAA0a,cAAAz/Y,KAAAoI,MACA6kF,IAAA,IAAAjtF,KAAA4kY,OAAAG,SAAAka,aAAAj/Y,KAAAoI,MACA,gBAAApI,KAAA4kY,OAAAG,SAAAgY,aAAA/8Y,KAAAoI,MAEA;AAGAixC,EAAA23W,SAAgBA,EAChB33W,EAAAzkC,QAAeo8Y;ACvCfjpY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAEnB,MACAohU,EAAA,YAIAf,EAAA,cAOAqF,EAAAtF,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,cACA+jY,WAAA,MAEA4gB,aAAA,WACA5jB,eAAA,GACAgW,aACAwM,oBAGA15P,MAAA,aACA,OAAAxwE,GACA,SAAkBzhF,KAAAgC,QAAA+qZ,eAClB,EACAhmB,cAAA,MAEA7nX,MAAA,CACAtK,QAAA,EACA6xX,UAAA/jX,GACAA,EAAA6mF,aAAA,SACA16F,SAAA6T,EAAA5T,aAAA,iBACA,GAGAhL,KAAA,CACA8Q,QAAA,KACA6xX,UAAA/jX,KAAA5T,aAAA,WAIA23X,UAAA,IACA,CACA,CACA5rW,IAAA,OAIA,UAAA2rW,EAAA2C,eAAiBA,IACjB,MAAAjqX,MAAgBA,KAAAkyY,GAAmCjoB;AACnD,WAAAjqX,EACA,MAAA2sY,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,eAAAioB,GAAA,GACA,MAAAvF,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACA4hB,kBAAA,MAAwCtsB,WAAAM,WACxCrlY,KAAAgC,QAAA2pZ,eACAtmB,IAAAgb,WAAArgZ,KAAAoI,KAAApI,KAAAgC,QAAA+qZ,aAAA/sZ,KAAAgC,QAAAm9Y,WAAAwC,iBA3DA,WA2DA3hZ,KAAA4kY,OAAAqS,cAAA4V,IAAAlzQ,MAEAorP,EAAAsb,WAAArgZ,KAAAoI,KAAApI,KAAAgC,QAAA+qZ,aAAA/sZ,KAAAgC,QAAAm9Y,WAGA,EACA,oBAAAtP,GACA,OACA,kBAAA7vY,KAAA4kY,OAAAG,SAAAssB,oBAEA,EACA,aAAAlhB,GACA,IAAA8c,EAAApB,EAAAL,kBAAA,CACAn1X,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,KACAmzY,cAAAp6W,KAAuC3d,OAAA2d,EAAA,KACvC+uX,cAAA,CAAA/uX,EAAA3Y,MAAAyuX,WAAAzuX,EAAA41D,MAAA56D,SAAA2d,EAAA;AAaA,OAXA78B,KAAAgC,QAAAm9Y,WAAAn/Y,KAAAgC,QAAA2pZ,kBACAsB,EAAApB,EAAAL,kBAAA,CACAn1X,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,KACAq7Y,UAAAn/Y,KAAAgC,QAAAm9Y,UACAwM,eAAA3rZ,KAAAgC,QAAA2pZ,eACA1U,cAAAp6W,KAA2C3d,OAAA2d,EAAA,MAAA78B,KAAA4kY,OAAAqS,cAAA4V,KAC3CjB,cAAA,CAAA/uX,EAAA3Y,MAAAyuX,WAAAzuX,EAAA41D,MAAA56D,SAAA2d,EAAA,GACA+nW,OAAA5kY,KAAA4kY,UAGA,CACAqoB,EAEA;AAGA5zW,EAAA83W,YAAmBA,EACnB93W,EAAAzkC,QAAeu8Y,EACf93W,EAAAyyW,WAAkBA;ACpGlB/jY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAA6lU,EAAAzF,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,YACAsrI,SAAA,IACAy4P,WAAA,MAEAhD,eAAA,KAGAl3O,MAAA,QACAxwE,QAAA,UACAglT,UAAA,IACA,CACA,CAAc5rW,IAAA,MAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,WAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACA8hB,aAAA,MAAmCxsB,cACnCA,EAAAyZ,QAAAx+Y,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,gBAAA7vY,KAAA4kY,OAAAG,SAAAwsB,eAEA;AAGAl4W,EAAAi4W,UAAiBA,EACjBj4W,EAAAzkC,QAAe08Y;ACzCfvpY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBxpE,EAAYwpE,EAAQ,OACpBpU,EAAWoU,EAAQ;AAOnB,MAAA+lU,EAAA3F,EAAAxa,UAAA9sY,OAAA,CACA6D,KAAA,cACA+jY,WAAA,MAEAslB,iBAAA,kBACAC,eAAA,WACA3iM,YAAA,oBACA4iM,wBACAC,mBACAC,qBAGA,qBAAAthB,GACA,OACA,IAAAtuX,EAAAspX,OAAA,CACAtyW,IAAA,IAAAhX,EAAA4vX,UAAA,eACAvnV,MAAA,CACAsmV,YAAA,EAAoCjmX,MAAAopF,gBACpC,MAAAyrD,EAAAx/J,KAAA4kY,OAAA5uO,aAAAh2J,KAAAgC,QAAA2vZ,sBACAG,OAAgCA,GAAS/9S,EACzC68R,EAAA;AACA,IAAApxO,EACA;AAEA,MAAAuyP,EAAA/xZ,KAAA4kY,OAAAr1L;AAwBA,OAvBA5kL,EAAA+9X,YAAA,CAAAxkY,EAAAo2B,KACA,MAAA03W,EAAAF,GAAAx3W,GAAAw3W,GAAAx3W,EAAAp2B,EAAAwuX,SACAnjM,GAAArrL,EAAA+zX,QAAA4T,EAAA/T,YAAA5zX;AACA,IAAA8tY,IAAAhyZ,KAAAgC,QAAA4vZ,kBAAAriN,EAAA,CACA,MAAAp5H,EAAA,CAAAn2E,KAAAgC,QAAA0vZ;AACAK,GACA57U,EAAAvuE,KAAA5H,KAAAgC,QAAAyvZ;AAEA,MAAAQ,EAAA56U,EAAA66U,WAAAhuY,KAAAo2B,IAAAp2B,EAAAwuX,SAAA,CACA7sS,MAAA1vB,EAAAr+D,KAAA,KACA,sCAAA9X,KAAAgC,QAAA+sN,YACA/uN,KAAAgC,QAAA+sN,YAAA,CACA61K,OAAA5kY,KAAA4kY,OACA1gX,OACAo2B,MACA03W,cAEAhyZ,KAAAgC,QAAA+sN;AAEA6hL,EAAAhpY,KAAAqqZ,EACA,CACA,OAAAjyZ,KAAAgC,QAAA6vZ,kBAEAx6U,EAAA86U,cAAA5tZ,OAAAomB,EAAAimX,OAKA;AAGAv3V,EAAAm4W,YAAmBA,EACnBn4W,EAAAzkC,QAAe48Y;ACpEfzpY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAKnB,MAAAqgU,EAAA,+CAIAqC,EAAA,+CAKAiE,EAAAvG,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,SACA+jY,WAAA,MAEAhD,eAAA,KAGA1C,UAAA,IACA,CACA,CACA5rW,IAAA,KAEA,CACAA,IAAA,OAEA,CACAA,IAAA,UAEA,CACAltB,MAAA,kBACA0kZ,aACApqB,SAAAt6X,OAAA5I,SAAA,sBAIA,UAAAyhY,EAAA2C,eAAiBA,IACjB,WAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACA6iB,UAAA,MAAgCvtB,cAChCA,EAAA2Y,QAAA19Y,KAAAoI,MAEAmqZ,aAAA,MAAmCxtB,cACnCA,EAAA8b,WAAA7gZ,KAAAoI,MAEAoqZ,YAAA,MAAkCztB,cAClCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,kBAAA7vY,KAAA4kY,OAAAG,SAAAwtB,eAEA,EACA,aAAApiB,GACA,OACA0b,EAAA3B,cAAA,CACA7zX,KAAAy1X,EACAhoZ,KAAA9D,KAAA8D,OAGA,EACA,aAAAusY,GACA,OACAwb,EAAApB,cAAA,CACAp0X,KAAA83X,EACArqZ,KAAA9D,KAAA8D,OAGA;AAGAu1C,EAAA+4W,OAAcA,EACd/4W,EAAAzkC,QAAew9Y,EACf/4W,EAAAyyW,WAAkBA,EAClBzyW,EAAA80W,WAAkBA;ACnFlBpmY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAgnU,EAAA5G,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,YACA+jY,WAAA,MAEAhD,eAAA,KAGA1C,UAAA,IACA,CACA,CACA5rW,IAAA,OAEA,CACAltB,MAAA,iBACAs6X,SAAAtlY,GAEA,QAAAA,GAIA,OAKA,UAAA6jY,EAAA2C,eAAiBA,IACjB,aAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAijB,aAAA,MAAmC3tB,cACnCA,EAAA2Y,QAAA19Y,KAAAoI,MAEAuqZ,gBAAA,MAAsC5tB,cACtCA,EAAA8b,WAAA7gZ,KAAAoI,MAEAwqZ,eAAA,MAAqC7tB,cACrCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAA4tB,kBAEA;AAGAt5W,EAAAo5W,UAAiBA,EACjBp5W,EAAAzkC,QAAe69Y;ACzDf1qY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAonU,EAAAhH,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,cACA+jY,WAAA,MAEAhD,eAAA,KAGA1C,UAAA,IACA,CACA,CACA5rW,IAAA,OAEA,CACAltB,MAAA,iBACAs6X,SAAAtlY,GAEA,UAAAA,GAIA,OAKA,UAAA6jY,EAAA2C,eAAiBA,IACjB,aAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAqjB,eAAA,MAAqC/tB,cACrCA,EAAA2Y,QAAA19Y,KAAAoI,MAEA2qZ,kBAAA,MAAwChuB,cACxCA,EAAA8b,WAAA7gZ,KAAAoI,MAEA4qZ,iBAAA,MAAuCjuB,cACvCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAAguB,oBAEA;AAGA15W,EAAAw5W,YAAmBA,EACnBx5W,EAAAzkC,QAAei+Y;ACzDf9qY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAy1R,EAAA2qC,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,YACA+jY,WAAA,MAEAhD,eAAA,KAGA1nT,QAAA,SACAslT,cAAA,MAEAksB,QAAA,CACAr+Y,QAAA,GAEAs+Y,QAAA,CACAt+Y,QAAA,GAEAu+Y,SAAA,CACAv+Y,QAAA,KACA6xX,UAAA/jX,IACA,MAAAywY,EAAAzwY,EAAA5T,aAAA;AAIA,OAHAqkZ,EACAA,EAAAl7Y,MAAA,KAAA2L,IAAA7V,GAAAc,SAAAd,EAAA,KACA,SAMAqlZ,UAAA,OACArqB,aACAtC,UAAA,IACA,CACA,CAAc5rW,IAAA,OAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA;AAGA9vV,EAAA6nU,UAAiBA,EACjB7nU,EAAAzkC,QAAessW;ACjDfn5V,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAA4nU,EAAAxH,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,cACA+jY,WAAA,MAEAhD,eAAA,KAGA1nT,QAAA,SACAslT,cAAA,MAEAksB,QAAA,CACAr+Y,QAAA,GAEAs+Y,QAAA,CACAt+Y,QAAA,GAEAu+Y,SAAA,CACAv+Y,QAAA,KACA6xX,UAAA/jX,IACA,MAAAywY,EAAAzwY,EAAA5T,aAAA;AAIA,OAHAqkZ,EACAA,EAAAl7Y,MAAA,KAAA2L,IAAA7V,GAAAc,SAAAd,EAAA,KACA,SAMAqlZ,UAAA,cACArqB,aACAtC,UAAA,IACA,CACA,CAAc5rW,IAAA,OAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA;AAGA9vV,EAAAg6W,YAAmBA,EACnBh6W,EAAAzkC,QAAey+Y;ACjDftrY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAo3R,EAAAgpC,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,WACA+jY,WAAA,MAEAhD,eAAA,KAGA1nT,QAAA,6BACA2xU,UAAA,MACA3sB,UAAA,IACA,CACA,CAAc5rW,IAAA,OAGd,UAAA2rW,EAAA2C,eAAiBA,IACjB,YAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA;AAGA9vV,EAAAwpU,SAAgBA,EAChBxpU,EAAAzkC,QAAeiuW;AC5Bf96V,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBxpE,EAAYwpE,EAAQ,OACpB6nU,EAAa7nU,EAAQ;AAErB,SAAA8nU,EAAAp2J,EAAApvP,GACA,OAAAA,EAEA,YAA4BhL,KAAA+b,IAAA/Q,EAAAovP,QAG5B,gBAA4BA,MAC5B,CAEA,SAAAq2J,EAAAtvY,EAAAuvY,EACAC,EAAAC,EAAAC,EAAAC,GACA,IAAAxzX;AACA,IAAAyzX,EAAA,EACAC,KACAC,EAAAP,EAAAhtZ;AACA,MAAA29P,EAAAlgP,EAAAzd;AACA,UAAA29P,EACA,QAAA9jQ,EAAA,EAAAoxQ,EAAA,EAAiCpxQ,EAAA8jQ,EAAAuuI,WAAoBryY,GAAA,GACrD,MAAA2yZ,QAAoBA,EAAAE,YAAoB/uJ,EAAAt9F,MAAAxmK,GAAAw5E;AACxC,QAAA6L,EAAA,EAA4BA,EAAAstU,EAAattU,GAAA,EAAA+rL,GAAA,GACzC,MAAAuiJ,EAAAL,IAAAliJ,EAAAmiJ,EAAAV,KAAAxtU,GACAuuU,EAAAD,EAAA,GAA+CA,MAAS;AAKxD,GAJAH,GAAAG,GAAAN,EACAM,IACAF,MAEAC,EAMA,CACA,GAAAA,EAAArmZ,MAAAI,QAAAmmZ,EAAA,CACA,MAAAzqP,EAAA0qP,GAAAZ,EAAAI,EAAAM;AACAD,EAAArmZ,MAAA6jK,YAAA/H,EAAA0qP,EACA,CACAH,IAAAnqU,WACA,KAZA,CACA,MAAAuqU,EAAAzvZ,SAAAkvE,cAAA,QACA41F,EAAA0qP,GAAAZ,EAAAI,EAAAM;AACAG,EAAAzmZ,MAAA6jK,YAAA/H,EAAA0qP,GACAV,EAAA/uZ,YAAA0vZ,EACA,CAQA,CACA,CAEA,KAAAJ,GAAA,CACA,MAAA/2O,EAAA+2O,EAAAnqU;AACA,QAAAxpD,EAAA2zX,EAAAxmZ,kBAAA,IAAA6yB,KAAAv3B,YAAAkrZ,GACAA,EAAA/2O,CACA,CACA82O,GACAL,EAAA/lZ,MAAAI,MAAA,GAA+B+lZ,MAC/BJ,EAAA/lZ,MAAAwvP,SAAA,KAGAu2J,EAAA/lZ,MAAAI,MAAA,GACA2lZ,EAAA/lZ,MAAAwvP,SAAA,GAAkC22J,MAElC,CACA,MAAAn0C,EACA,WAAArkS,CAAAp3D,EAAAyvY,GACA3zZ,KAAAkkB,OACAlkB,KAAA2zZ,eACA3zZ,KAAAguY,IAAArpY,SAAAkvE,cAAA,OACA7zE,KAAAguY,IAAAx9X,UAAA,eACAxQ,KAAA0zZ,MAAA1zZ,KAAAguY,IAAAtpY,YAAAC,SAAAkvE,cAAA,UACA7zE,KAAAyzZ,SAAAzzZ,KAAA0zZ,MAAAhvZ,YAAAC,SAAAkvE,cAAA,aACA2/U,EAAAtvY,EAAAlkB,KAAAyzZ,SAAAzzZ,KAAA0zZ,MAAAC,GACA3zZ,KAAA8mZ,WAAA9mZ,KAAA0zZ,MAAAhvZ,YAAAC,SAAAkvE,cAAA,SACA,CACA,MAAAljE,CAAAuT,GACA,OAAAA,EAAApgB,OAAA9D,KAAAkkB,KAAApgB,OAGA9D,KAAAkkB,OACAsvY,EAAAtvY,EAAAlkB,KAAAyzZ,SAAAzzZ,KAAA0zZ,MAAA1zZ,KAAA2zZ,iBAEA,CACA,cAAA/M,CAAA3/L,GACA,qBAAAA,EAAAnjN,OACAmjN,EAAAz9M,SAAAxJ,KAAA0zZ,OAAA1zZ,KAAAyzZ,SAAAj9Y,SAAAywM,EAAAz9M,QACA,EAGA,SAAA6qZ,EAAAnwY,EAAAyvY,EAAAC,EAAAC,GACA,IAAAC,EAAA,EACAC;AACA,MAAArwD,EAAA,GACAt/F,EAAAlgP,EAAAzd;AACA,IAAA29P,EACA;AAEA,QAAA9jQ,EAAA,EAAAoxQ,EAAA,EAA6BpxQ,EAAA8jQ,EAAAuuI,WAAoBryY,GAAA,GACjD,MAAA2yZ,QAAgBA,EAAAE,YAAoB/uJ,EAAAt9F,MAAAxmK,GAAAw5E;AACpC,QAAA6L,EAAA,EAAwBA,EAAAstU,EAAattU,GAAA,EAAA+rL,GAAA,GACrC,MAAAuiJ,EAAAL,IAAAliJ,EAAAmiJ,EAAAV,KAAAxtU;AACAmuU,GAAAG,GAAAN,EACAM,IACAF;AAEA,MAAArmR,EAAA/qI,GAAA4wZ,EAAAI,EAAAM;AACAvwD,EAAA97V,KAAA,CACA,MACA,CAAkB+F,MAAA,GAAU+/H,MAAa/qI,MAEzC,CACA,CACA,MAAA2xZ,EAAAP,EAAA,GAAuCD,MAAW,GAClD3wD,EAAA4wD,EAAA,MAA+CD;AAE/C,OAAaL,SADb,kBAAoC/vD,GACvB4wD,aAAAnxD,gBACb,CAEA,SAAAoxD,EAAAn4U,EAAAo4U,GACA,OAAAA,EACAp4U,EAAAq4U,cAAA,KAAAD,GAEAp4U,EAAA6jU,eACA,CAiBA,SAAAyU,EAAAzsS,EAAA0sS,EAAAC,EAAAC,EAAAL,GACA,MAAAvgN,EAhBA,SAAAhsF,GACA,GAAAA,EAAAusC,OAAAsgQ,eACA,OAAA7sS,EAAAusC,OAAAsgQ;AAEA,MAAAC,EAAA;AAQA,OAPAhtY,OAAA2wB,KAAAuvE,EAAAk4F,OAAA3lM,QAAA1W,IACA,MAAAszF,EAAA6wB,EAAAk4F,MAAAr8M;AACAszF,EAAA2yQ,KAAAqpD,YACA2B,EAAA39T,EAAA2yQ,KAAAqpD,WAAAh8T,KAGA6wB,EAAAusC,OAAAsgQ,eAAAC,EACAA,CACA,CAbA,CAgBA9sS,GACA+sS,EAAA,GACA/1U,EAAA;AACA,QAAAl2E,EAAA,EAAwBA,EAAA6rZ,EAAmB7rZ,GAAA,GAC3C,MAAAg8W,EAAAwvC,EAAAtgN,EAAA8wK,KAAAyvC;AAIA,GAHAzvC,GACA9lS,EAAAr3E,KAAAm9W,GAEA8vC,EAAA,CACA,MAAAI,EAAAV,EAAAtgN,EAAAihN,YAAAV;AACAS,GACAD,EAAAptZ,KAAAqtZ,EAEA,CACA,CACA,MAAA3pJ,EAAA;AACA,QAAAviQ,EAAA,EAAwBA,EAAA4rZ,EAAmB5rZ,GAAA,EAC3CuiQ,EAAA1jQ,KAAAqsM,EAAAmwD,IAAAqwJ,cAAA,KAAAI,GAAA,IAAA9rZ,EAAAisZ,EAAA/1U;AAEA,OAAAg1H,EAAAy/M,MAAAe,cAAA,KAAAnpJ,EACA,CAMA,MAAA6pJ,EAAA,EAA2CvwB,aAC3C,MAAA7wR,UAAYA,GAAY6wR,EAAA3iX;AACxB,KAAA8xF,aALAu/S,EAAA8B,eAMA;AAEA,IAAAC,EAAA;AACA,MAAA3B,EAAA7H,EAAAlV,2BAAA5iS,EAAAnO,OAAA,GAAAwkS,MAAAlmX,GACA,UAAAA,EAAApgB,KAAAsE;AAWA,OATAsrZ,WAAAxvY,KAAAwkY,YAAAxkY,IACA,aAAAA,EAAApgB,KAAAsE,KACA,SAEA,4BAAArD,SAAAmf,EAAApgB,KAAAsE,QACAitZ,GAAA,KAGAA,IAAAthT,EAAAnO,OAAArlG,SAIAqkY,EAAAG,SAAAuwB,mBAQAttC,EAAA6jC,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,QAEA+jY,WAAA,MAEAhD,eAAA,GACAnvI,aACAu7J,iBACAC,YAAA,EACA7B,aAAA,GAEA8B,KAAA91C,EACA+1C,uBACAC,6BAGAl0U,QAAA,YACA2xU,UAAA,QACArqB,aACA92O,MAAA,QACAw0O,UAAA,IACA,EAAkB5rW,IAAA,UAElB,UAAA2rW,EAAAtiX,KAAiBA,EAAAilX,mBACjB,MAAAsqB,SAAgBA,EAAAa,aAAAnxD,iBAAsCkxD,EAAAnwY,EAAAlkB,KAAAgC,QAAA2xZ,cACtDD,EAAA,CACA,QACA7H,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,iBAAA,CACAx7X,MAAA2mZ,EACA,UAAgCA,IAChC,cAAoCnxD,MAEpCswD,EACA;AAEA,OAAAzzZ,KAAAgC,QAAAuzZ,cAAA,QAAsD1vT,MAAA,gBAAuB6tT,IAC7E,EACAjkB,YAAA,MAEAmmB,YAAA,EAA4BtqJ,OAAA,EAAAo4F,OAAA,EAAAmxD,oBAA2C,KAAI,EAAQ51W,KAAA6mO,WAAA8+G,aACnF,MAAA1gX,EAAAwwY,EAAA9vB,EAAA38Q,OAAAqjJ,EAAAo4F,EAAAmxD;AACA,GAAA/uI,EAAA,CACA,MAAA9nQ,EAAAihC,EAAA80D,UAAAxmF,KAAA;AACA0xB,EAAAivW,qBAAAhqY,GACAq2X,iBACAjF,aAAArzX,EAAA6wX,cAAAyC,KAAAt2V,EAAAt0B,IAAAqqD,QAAAh3D,IACA,CACA,UAEA63Y,gBAAA,MAAsC5zY,QAAA6jQ,cACtCwtI,EAAAuC,gBAAA5zY,EAAA6jQ,GAEAgwI,eAAA,MAAqC7zY,QAAA6jQ,cACrCwtI,EAAAwC,eAAA7zY,EAAA6jQ,GAEAiwI,aAAA,MAAmC9zY,QAAA6jQ,cACnCwtI,EAAAyC,aAAA9zY,EAAA6jQ,GAEAkwI,aAAA,MAAmC/zY,QAAA6jQ,cACnCwtI,EAAA0C,aAAA/zY,EAAA6jQ,GAEAmwI,YAAA,MAAkCh0Y,QAAA6jQ,cAClCwtI,EAAA2C,YAAAh0Y,EAAA6jQ,GAEAowI,UAAA,MAAgCj0Y,QAAA6jQ,cAChCwtI,EAAA4C,UAAAj0Y,EAAA6jQ,GAEAwvI,YAAA,MAAkCrzY,QAAA6jQ,cAClCwtI,EAAAgC,YAAArzY,EAAA6jQ,GAEAqwI,WAAA,MAAiCl0Y,QAAA6jQ,cACjCwtI,EAAA6C,WAAAl0Y,EAAA6jQ,GAEAswI,UAAA,MAAgCn0Y,QAAA6jQ,cAChCwtI,EAAA8C,UAAAn0Y,EAAA6jQ,GAEAuwI,mBAAA,MAAyCp0Y,QAAA6jQ,cACzCwtI,EAAAgD,aAAA,SAAAhD,CAAArxY,EAAA6jQ,GAEAywI,gBAAA,MAAsCt0Y,QAAA6jQ,cACtCwtI,EAAAgD,aAAA,MAAAhD,CAAArxY,EAAA6jQ,GAEA0wI,iBAAA,MAAuCv0Y,QAAA6jQ,cACvCwtI,EAAAkD,iBAAAv0Y,EAAA6jQ,GAEA2wI,aAAA,MAAmCx0Y,QAAA6jQ,gBACnCwtI,EAAA6C,WAAAl0Y,EAAA6jQ,IAGAwtI,EAAA8C,UAAAn0Y,EAAA6jQ,GAEA4wI,iBAAA,CAAAtuZ,EAAAzF,IAAA,EAAkDsf,QAAA6jQ,cAClDwtI,EAAAqD,YAAAvuZ,EAAAzF,EAAA2wZ,CAAArxY,EAAA6jQ,GAEA8wI,aAAA,MAAmC30Y,QAAA6jQ,cACnCwtI,EAAAsD,aAAA,EAAAtD,CAAArxY,EAAA6jQ,GAEA+wI,iBAAA,MAAuC50Y,QAAA6jQ,cACvCwtI,EAAAsD,cAAA,EAAAtD,CAAArxY,EAAA6jQ,GAEAgxI,UAAA,MAAgC70Y,QAAA6jQ,eAChCA,GACAwtI,EAAAwD,UAAA70Y,OAIA80Y,iBAAAnrY,GAAA,EAA6CqzB,KAAA6mO,eAC7C,GAAAA,EAAA,CACA,MAAA/xK,EAAAu/S,EAAA8B,cAAA7wZ,OAAA06C,EAAAt0B,IAAAiB,EAAAorY,WAAAprY,EAAAqrY;AAEAh4W,EAAAq2V,aAAAvhS,EACA,CACA,YAIA,oBAAA87R,GACA,OACA5iT,IAAA,MACAjtF,KAAA4kY,OAAAG,SAAA6xB,kBAGA52Z,KAAA4kY,OAAA51M,MAAAinO,eAGAj2Z,KAAA4kY,OAAAS,QAAA4wB,cAAAW,eAAAj9Q,MAEA,gBAAA35I,KAAA4kY,OAAAG,SAAA8xB,mBACAlpU,UAAAwnU,EACA,gBAAAA,EACAnnU,OAAAmnU,EACA,aAAAA,EAEA,EACA,qBAAA5kB,GAEA,UADAvwY,KAAAgC,QAAAg4P,WAAAh6P,KAAA4kY,OAAA5uO,WAGA,CACAs9P,EAAA4D,eAAA,CACA1B,YAAAx1Z,KAAAgC,QAAAwzZ,YACA7B,aAAA3zZ,KAAAgC,QAAA2xZ,aACAwD,oBAAAn3Z,KAAAgC,QAAA2xZ,aACA8B,KAAAz1Z,KAAAgC,QAAAyzZ,KACAC,oBAAA11Z,KAAAgC,QAAA0zZ,uBAGA,GACApC,EAAA8D,aAAA,CACAzB,wBAAA31Z,KAAAgC,QAAA2zZ,0BAGA,EACA,gBAAAltB,CAAAltV,GACA,MAAA3iB,EAAA,CACAxwB,KAAAmzC,EAAAnzC,KACApG,QAAAu5C,EAAAv5C,QACAs+S,QAAA/kQ,EAAA+kQ;AAEA,OACA8yG,UAAAvH,EAAAjkB,aAAAikB,EAAAhmB,kBAAAtqV,EAAA,YAAA3iB,IAEA;AAGAygB,EAAA2uU,MAAaA,EACb3uU,EAAAsmU,UAAiBA,EACjBtmU,EAAAg7W,eAAsBA,EACtBh7W,EAAAq7W,YAAmBA,EACnBr7W,EAAAzkC,QAAeozW,EACf3uU,EAAAm6W,cAAqBA;AC5WrBzrY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAQ/C,MAAA00Z,EANW5rU,EAAQ,OAMnB4lT,UAAA9sY,OAAA,CACA6D,KAAA,YACA+jY,WAAA,MAEAl4L,MAAA,GACAz1L,WAAA,oCACA84Y,iBAAA,OAGA,mBAAA1wB,GACA,OACA,CACA3yL,MAAAj0M,KAAAgC,QAAAiyM,MACA73J,WAAA,CACAm7W,UAAA,CACA3iZ,QAAA5U,KAAAgC,QAAAs1Z,iBACA7wB,UAAA/jX,IACA,MAAAxC,EAAAwC,EAAA/U,MAAA4pZ;AACA,OAAAv3Z,KAAAgC,QAAAwc,WAAAzZ,SAAAmb,KAAAlgB,KAAAgC,QAAAs1Z,kBAEA9wB,WAAApqV,GACAA,EAAAm7W,UAGA,CAAqC5pZ,MAAA,eAAsByuC,EAAAm7W,aAF3D,MAQA,EACA,WAAA9nB,GACA,OACA+nB,aAAAt3Y,GAAA,EAA4C6kX,gBAC5C/kY,KAAAgC,QAAAwc,WAAAzZ,SAAAmb,IAGAlgB,KAAAgC,QAAAiyM,MACArwL,IAAA9f,GAAAihY,EAAA4c,iBAAA79Y,EAAA,CAAmEyzZ,UAAAr3Y,KACnEmS,MAAA4+K,MAEAwmN,eAAA,MAAqC1yB,cACrC/kY,KAAAgC,QAAAiyM,MACArwL,IAAA9f,GAAAihY,EAAAkY,gBAAAn5Y,EAAA,cACAuuB,MAAA4+K,MAEAymN,gBAAAx3Y,GAAA,EAA6C0kX,SAAAG,gBAC7C/kY,KAAAgC,QAAAwc,WAAAzZ,SAAAmb,KAGA0kX,EAAAj7K,SAAA,CAAsC4tM,UAAAr3Y,IACtC6kX,EAAA0yB,iBAEA1yB,EAAAyyB,aAAAt3Y,IAGA,EACA,oBAAA2vX,GACA,OACA,kBAAA7vY,KAAA4kY,OAAAG,SAAAyyB,aAAA,QACA,kBAAAx3Z,KAAA4kY,OAAAG,SAAAyyB,aAAA,UACA,kBAAAx3Z,KAAA4kY,OAAAG,SAAAyyB,aAAA,SACA,kBAAAx3Z,KAAA4kY,OAAAG,SAAAyyB,aAAA,WAEA;AAGAn+W,EAAAg+W,UAAiBA,EACjBh+W,EAAAzkC,QAAeyiZ;AC5EftvY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAEnB,MAoBAksU,EAAA9L,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,YACAsrI,SAAA,IACAy4P,WAAA,MAEAhD,eAAA,GACAyuB,2BAGA,SAAAnxB,GACA,OACA,CACA5rW,IAAA,OACAotW,SAAAvlX,KACAA,EAAA6mF,aAAA,WAIAvpG,KAAAgC,QAAA41Z,uBAtCA,CAAAl1Y,IACA,IAAAA,EAAAlH,SAAAjb,OACA;AAEA,MAAAs3Z,EAAAn1Y,EAAAuyD,iBAAA;AACA4iV,GAGAA,EAAAr9Y,QAAAs9Y,IACA,IAAAz3X,EAAAkiB;AACA,MAAAw1W,EAAAD,EAAAhpZ,aAAA,SACAkpZ,EAAA,QAAAz1W,EAAA,QAAAliB,EAAAy3X,EAAAluZ,qBAAA,IAAAy2B,OAAA,EAAAA,EAAAy9C,QAAA,mBAAAv7B,OAAA,EAAAA,EAAAzzC,aAAA;AACAgpZ,EAAA1pZ,aAAA,WAA2C4pZ,KAAiCD,QAZ5E,CAuCAr1Y,GAEA,KAIA,EACA,UAAA8jX,EAAA2C,eAAiBA,IACjB,cAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACAkf,qBAAA,MAA2C1vW,SAC3C,MAAA80D,UAAwBA,GAAY90D;AAoBpC,OAbAA,EAAAt0B,IAAA8/W,aAAA12R,EAAAxmF,KAAAwmF,EAAAtnD,GAAA,CAAAvoC,EAAAo2B,KAGA,GAAAp2B,EAAAupX,YACA;AAIAvpX,EAAAwkX,MAAAniX,OAAA83F,KAAAv6G,OAAA9D,KAAA8D,MAAA2f,KAAA46F,GAAAt2F,OAAAi/B,OAAAq3D,EAAAvkC,OAAAr2D,KAAA9gB,UAEAs8C,EAAAwtV,WAAAnyV,IAAAp2B,EAAAwuX,SAAA1yY,KAAA8D,YAMA;AAGAu1C,EAAAs+W,UAAiBA,EACjBt+W,EAAAzkC,QAAe+iZ;ACnFf5vY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAQ/C,MAAAs1Z,EANWxsU,EAAQ,OAMnB/mE,KAAAngB,OAAA,CACA6D,KAAA,OACA6pJ,MAAA;AAGA54G,EAAA4+W,KAAYA,EACZ5+W,EAAAzkC,QAAeqjZ;ACdflwY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAMnB,MAAAysU,EAAArM,EAAA3f,KAAA3nY,OAAA,CACA6D,KAAA,YACA+jY,WAAA,MAEAhD,eAAA,KAGA1C,UAAA,IACA,CACA,CACA5rW,IAAA,KAEA,CACAltB,MAAA,kBACA0kZ,aACApqB,SAAAt6X,OAAA5I,SAAA,mBAIA,UAAAyhY,EAAA2C,eAAiBA,IACjB,WAAA0iB,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,kBAAA,EACA,EACA,WAAAsG,GACA,OACA0oB,aAAA,MAAmCpzB,cACnCA,EAAA2Y,QAAA19Y,KAAAoI,MAEAgwZ,gBAAA,MAAsCrzB,cACtCA,EAAA8b,WAAA7gZ,KAAAoI,MAEAiwZ,eAAA,MAAqCtzB,cACrCA,EAAAgc,UAAA/gZ,KAAAoI,MAGA,EACA,oBAAAynY,GACA,OACA,YAAA7vY,KAAA4kY,OAAAG,SAAAqzB,kBACA,YAAAp4Z,KAAA4kY,OAAAG,SAAAqzB,kBAEA;AAGA/+W,EAAA6+W,UAAiBA,EACjB7+W,EAAAzkC,QAAesjZ;ACpDfnwY,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ;AAEnB,MAAA6sU,EAAA,2IACAC,EAAA,4IACAC,EAAAriZ,GACAA,EAAA0mB,MAAAy7X,GAmGAG,EAAA5M,EAAAnnY,KAAAngB,OAAA,CACA6D,KAAA,UACA+jY,WAAA,MAEAusB,mBACAC,mBACAC,YACAC,gBAAApnY,EACAqnY,kBAAArnY,EACAsnY,YACAC,qBACAC,mBACAtsR,QAAA,EACArrH,OAAA,IACA43Y,uBAAAznY,EACA0nY,aAAA,EACAC,QACAC,kBACAlwB,eAAA,GACAvrX,UACA07Y,YACArwP,OAAA,GACAswP,SAAA,GACAC,sBAAA/nY,EACA1jB,MAAA,IACA0rZ,IAAA,IAGA,MAAA77Y,GACA,OAAA5d,KAAAgC,QAAA4b,MACA,EACA,KAAAq0I,GACA,OAAAjyJ,KAAAgC,QAAA4b,OAAA,gBACA,EACA1L,aACA,aAAA60X,GACA,OACA5xT,IAAA,CACAvgE,QAAA,MAEAsK,MAAA,CACAtK,QAAA,GAEA7G,MAAA,CACA6G,QAAA5U,KAAAgC,QAAA+L,OAEAuT,OAAA,CACA1M,QAAA5U,KAAAgC,QAAAsf,QAGA,EACAmlX,UAAA,IACA,CACA,CACA5rW,IAAA,mCAIA,WAAA40W,GACA,OACAiqB,gBAAA13Z,GAAA,EAA6C+iY,gBAC7CyzB,EAAAx2Z,EAAAmzE,MAGA4vT,EAAAkW,cAAA,CACAn3Y,KAAA9D,KAAAoI,KACA0xE,MAAA93E,IAIA,EACA,aAAAquY,GACA,OAAArwY,KAAAgC,QAAA02Z,gBAGA,CACA7M,EAAAf,cAAA,CACAz0X,KAAAkiY,EACAz0Z,KAAA9D,KAAA8D,KACAmzY,cAAAp6W,KAC6Bs4C,IAAAt4C,EAAAjtB,WAP7B,EAWA,EACA,UAAA42X,EAAA2C,eAAiBA,IACjB,MAAAwwB,EAnKA,CAAA33Z,IACA,IAAAq+B;AACA,MAAAlqB,IAAYA,EAAAwiZ,kBAAAC,WAAAC,aAAAC,eAAAC,WAAAC,oBAAAC,kBAAAtsR,UAAAusR,oBAAAC,eAAAC,OAAAC,iBAAAC,WAAArwP,SAAAswP,WAAAC,mBAAAI,UAAAH,OAAsOz3Z;AAClP,IAAAw2Z,EAAAriZ,GACA;AAGA,GAAAA,EAAApR,SAAA,WACA,OAAAoR;AAEA,MAAA0jZ,EAAA,IAAAC,IAAA3jZ,IACA6oC,GAAYA,EAAA+6W,cAAiB,QAAA15X,EAzB7B,CAAAlqB,GACAA,EAAA6jZ,aAAAppY,IAAA,KACA,CAAiBouB,GAAA7oC,EAAA6jZ,aAAA1tY,IAAA,MAEjB,aAAAnW,EAAAo3D,UACAp3D,EAAAm8L,SAAAvtM,SAAA,WACAoR,EAAAm8L,SAAAvtM,SAAA,QACA,CAAiBi6C,GAAA7oC,EAAAm8L,SAAAr6L,MAAA,KAAA05I,OAEjBx7I,EAAA6jZ,aAAAppY,IAAA,QACA,CAAiBouB,GAAA7oC,EAAA6jZ,aAAA1tY,IAAA,QAAAytY,eAEjB,KAZA,CAyB6BF,UAAA,IAAAx5X,IAAA;AAC7B,IAAA2e,EACA;AAEA,MAAA26W,EAAA,IAAAG,IAAA,GAnCA,EAAAR,EAAAS,IACAA,EACA,2DAEAT,EAAA,2EAJA,CAmCgCA,EAAAS,KAA2C/6W;AAuD3E,OAtDA66W,EAAAG,aAAAppY,IAAA,MACA+oY,EAAAK,aAAAntY,IAAA,QAAAgtY,EAAAG,aAAA1tY,IAAA,KAAA2tY,WAAA,cAEAtB,GACAgB,EAAAK,aAAAntY,IAAA,UAEA+rY,GACAe,EAAAK,aAAAntY,IAAA,gBAEAgsY,GACAc,EAAAK,aAAAntY,IAAA,eAAAgsY,GAEAC,GACAa,EAAAK,aAAAntY,IAAA,sBAEAksY,GACAY,EAAAK,aAAAntY,IAAA,gBAEAmsY,GACAW,EAAAK,aAAAntY,IAAA,iBAEAosY,GACAU,EAAAK,aAAAntY,IAAA,mBAEA8/G,GACAgtR,EAAAK,aAAAntY,IAAA,MAAA8/G,EAAAt8H,YAEA6oZ,GACAS,EAAAK,aAAAntY,IAAA,KAAAqsY,GAEAC,GACAQ,EAAAK,aAAAntY,IAAA,iBAAAssY,EAAA9oZ,YAEA+oZ,GACAO,EAAAK,aAAAntY,IAAA,YAEAwsY,GACAM,EAAAK,aAAAntY,IAAA,sBAEAo8I,GACA0wP,EAAAK,aAAAntY,IAAA,SAAAo8I,GAEAswP,GACAI,EAAAK,aAAAntY,IAAA,WAAA0sY,GAEAK,GACAD,EAAAK,aAAAntY,IAAA,QAAA+sY,EAAAvpZ,YAEAmpZ,GACAG,EAAAK,aAAAntY,IAAA,QAAA2sY,QAEA/nY,IAAAgoY,GACAE,EAAAK,aAAAntY,IAAA,MAAA4sY,EAAAppZ,YAEAspZ,EAAAtpZ,YAtEA,CAmKA,CACA8F,IAAAgzX,EAAAh0T,IACAwjV,gBAAA34Z,KAAAgC,QAAA22Z,gBACAC,SAAA54Z,KAAAgC,QAAA42Z,SACAC,WAAA74Z,KAAAgC,QAAA62Z,WACAC,aAAA94Z,KAAAgC,QAAA82Z,aACAC,SAAA/4Z,KAAAgC,QAAA+2Z,SACAC,kBAAAh5Z,KAAAgC,QAAAg3Z,kBACAC,gBAAAj5Z,KAAAgC,QAAAi3Z,gBACAtsR,QAAA3sI,KAAAgC,QAAA2qI,QACAusR,kBAAAl5Z,KAAAgC,QAAAk3Z,kBACAC,aAAAn5Z,KAAAgC,QAAAm3Z,aACAC,KAAAp5Z,KAAAgC,QAAAo3Z,KACAC,eAAAr5Z,KAAAgC,QAAAq3Z,eACAC,SAAAt5Z,KAAAgC,QAAAs3Z,SACArwP,OAAAjpK,KAAAgC,QAAAinK,OACAswP,SAAAv5Z,KAAAgC,QAAAu3Z,SACAC,iBAAAx5Z,KAAAgC,QAAAw3Z,iBACAI,QAAAzwB,EAAAjqX,OAAA,EACAu6Y,IAAAz5Z,KAAAgC,QAAAy3Z;AAGA,OADAtwB,EAAAh0T,IAAAwkV,EACA,CACA,MACA,CAAc,yBACd,CACA,SACA9N,EAAA1kB,gBAAAnnY,KAAAgC,QAAAmnY,eAAA,CACAp7X,MAAA/N,KAAAgC,QAAA+L,MACAuT,OAAAthB,KAAAgC,QAAAsf,OACA44Y,gBAAAl6Z,KAAAgC,QAAA22Z,gBACAC,SAAA54Z,KAAAgC,QAAA42Z,SACAC,WAAA74Z,KAAAgC,QAAA62Z,WACAC,aAAA94Z,KAAAgC,QAAA82Z,aACAE,kBAAAh5Z,KAAAgC,QAAAg3Z,kBACAC,gBAAAj5Z,KAAAgC,QAAAi3Z,gBACAtsR,QAAA3sI,KAAAgC,QAAA2qI,QACAusR,kBAAAl5Z,KAAAgC,QAAAk3Z,kBACAC,aAAAn5Z,KAAAgC,QAAAm3Z,aACAC,KAAAp5Z,KAAAgC,QAAAo3Z,KACAC,eAAAr5Z,KAAAgC,QAAAq3Z,eACApwP,OAAAjpK,KAAAgC,QAAAinK,OACAswP,SAAAv5Z,KAAAgC,QAAAu3Z,SACAC,iBAAAx5Z,KAAAgC,QAAAw3Z,iBACAC,IAAAz5Z,KAAAgC,QAAAy3Z,KACiBtwB,IAGjB;AAGA9vV,EAAAo/W,QAAeA,EACfp/W,EAAAzkC,QAAe6jZ;ACtPF1wY,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1EsoX,EAA2B1uU,EAAQ;AADuC55C,EACdsoX,EADgDpyY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1EuoX,EAA6B3uU,EAAQ;AADqC55C,EACVuoX,EAD4CryY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1EwoX,EAA4B5uU,EAAQ;AADsC55C,EACZwoX,EAD8CtyY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1EyoX,EAA0B7uU,EAAQ;AADwC55C,EAChByoX,EADkDvyY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1E0oX,EAAyB9uU,EAAQ;AADyC55C,EAClB0oX,EADoDxyY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1E2oX,EAAwB/uU,EAAQ;AAD0C55C,EACpB2oX,EADsDzyY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1E4oX,EAA6BhvU,EAAQ;AADqC55C,EACT4oX,EAD2C1yY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1E6oX,EAAwBjvU,EAAQ;AAD0C55C,EACpB6oX,EADsD3yY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1E8oX,EAAyBlvU,EAAQ;AADyC55C,EAClB8oX,EADoD5yY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1E+oX,EAA4BnvU,EAAQ;AADsC55C,EACZ+oX,EAD8C7yY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACAlRlR,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAC1EgpX,EAAuBpvU,EAAQ;AAD2C55C,EACtBgpX,EADwD9yY,OAAA2wB,KAAA7G,GAAAtrB,OAAA0S,GAAA,YAAAA,GAAA,eAAAA,GAAAze,QAAAye,IAAiGogB,EAAAxmC,eAAAomB,IAA6ClR,OAAAmhC,eAAA7P,EAAApgB,EAAA,CAAqCmwB,cAAAC,gBAAA/8B,IAAA,IAAAulB,EAAA5Y;ACE/RlR,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAE/C,IAAAkpZ,EAAWpgU,EAAQ,OACnBqvU,EAA0BrvU,EAAQ,OAClCsvU,EAAoBtvU,EAAQ,OAC5BuvU,EAA0BvvU,EAAQ,OAClCwvU,EAAoBxvU,EAAQ,OAC5ByvU,EAAyBzvU,EAAQ,OACjC0vU,EAAwB1vU,EAAQ,OAChC2vU,EAA0B3vU,EAAQ,OAClC4vU,EAAyB5vU,EAAQ,OACjC6vU,EAAyB7vU,EAAQ,OACjC8vU,EAAuB9vU,EAAQ,OAC/B+vU,EAAuB/vU,EAAQ,MAC/BgwU,EAA8BhwU,EAAQ,OACtCiwU,EAAsBjwU,EAAQ,OAC9BkwU,EAAwBlwU,EAAQ,MAChCmwU,EAA2BnwU,EAAQ,OACnCowU,EAAyBpwU,EAAQ,OACjCqwU,EAAsBrwU,EAAQ,OAC9BswU,EAAoBtwU,EAAQ;AAO5B,MAAAuwU,EAAAnQ,EAAAxa,UAAA9sY,OAAA,CACA6D,KAAA,aACA,aAAAknY,GACA,MAAAvJ,EAAA;AAuDA,WAtDA/lY,KAAAgC,QAAAi6Z,MACAl2B,EAAAn+X,KAAAmzZ,EAAAxO,KAAAngB,UAAApsY,KAAAgC,QAAAi6Z,YAEAj8Z,KAAAgC,QAAAk6Z,YACAn2B,EAAAn+X,KAAAkzZ,EAAA/O,WAAA3f,UAAApsY,KAAAgC,QAAAk6Z,kBAEAl8Z,KAAAgC,QAAAm6Z,YACAp2B,EAAAn+X,KAAAozZ,EAAAlO,WAAA1gB,UAAApsY,KAAAgC,QAAAm6Z,kBAEAn8Z,KAAAgC,QAAAyU,MACAsvX,EAAAn+X,KAAAqzZ,EAAA7M,KAAAhiB,UAAApsY,KAAAgC,QAAAyU,YAEAzW,KAAAgC,QAAAo6Z,WACAr2B,EAAAn+X,KAAAszZ,EAAA9N,UAAAhhB,UAAApsY,KAAAgC,QAAAo6Z,iBAEAp8Z,KAAAgC,QAAA2C,UACAohY,EAAAn+X,KAAAuzZ,EAAA70M,SAAA8lL,UAAApsY,KAAAgC,QAAA2C,gBAEA3E,KAAAgC,QAAA4sZ,YACA7oB,EAAAn+X,KAAAwzZ,EAAAvM,WAAAziB,UAAApsY,KAAAgC,QAAA4sZ,kBAEA5uZ,KAAAgC,QAAAmtZ,WACAppB,EAAAn+X,KAAAyzZ,EAAAjM,UAAAhjB,UAAApsY,KAAAgC,QAAAmtZ,iBAEAnvZ,KAAAgC,QAAAq6Z,WACAt2B,EAAAn+X,KAAA0zZ,EAAA/L,UAAAnjB,UAAApsY,KAAAgC,QAAAq6Z,iBAEAr8Z,KAAAgC,QAAAs6Z,SACAv2B,EAAAn+X,KAAA2zZ,EAAA9L,QAAArjB,UAAApsY,KAAAgC,QAAAs6Z,eAEAt8Z,KAAAgC,QAAA6tZ,SACA9pB,EAAAn+X,KAAA4zZ,EAAA1L,QAAA1jB,UAAApsY,KAAAgC,QAAA6tZ,eAEA7vZ,KAAAgC,QAAAu6Z,gBACAx2B,EAAAn+X,KAAA6zZ,EAAAvL,eAAA9jB,UAAApsY,KAAAgC,QAAAu6Z,sBAEAv8Z,KAAAgC,QAAAw6Z,QACAz2B,EAAAn+X,KAAA8zZ,EAAA/K,OAAAvkB,UAAApsY,KAAAgC,QAAAw6Z,cAEAx8Z,KAAAgC,QAAA0qS,UACAq5F,EAAAn+X,KAAA+zZ,EAAA3K,SAAA5kB,UAAApsY,KAAAgC,QAAA0qS,gBAEA1sS,KAAAgC,QAAAy6Z,aACA12B,EAAAn+X,KAAAg0Z,EAAAzK,YAAA/kB,UAAApsY,KAAAgC,QAAAy6Z,mBAEAz8Z,KAAAgC,QAAA06Z,WACA32B,EAAAn+X,KAAAi0Z,EAAAvK,UAAAllB,UAAApsY,KAAAgC,QAAA06Z,iBAEA18Z,KAAAgC,QAAA26Z,QACA52B,EAAAn+X,KAAAk0Z,EAAA1J,OAAAhmB,UAAApsY,KAAAgC,QAAA26Z,cAEA38Z,KAAAgC,QAAAqB,MACA0iY,EAAAn+X,KAAAm0Z,EAAA9D,KAAA7rB,UAAApsY,KAAAgC,QAAAqB,OAEA0iY,CACA;AAGA1sV,EAAA2iX,WAAkBA,EAClB3iX,EAAAzkC,QAAeonZ;AC5FFj0Y,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAD0EkvC,EAChB+qX,GADgB/qX,EACjD45C,EAAQ,SADgF55C,EAAAukS,WAAAvkS,EAAA,CAAuCj9B,QAAAi9B,GAExJgrX,EAAiBpxU,EAAQ;AACzB,SAAAqxU,EAAApnQ,EAAAqnQ,EAAA/6Z,EAAA,IACA,IAAA0zJ,EACA,UAAAh1J,MAAA;AAEA,IAAAq8Z,EACA,UAAAr8Z,MAAA;AAEA,MAAAc,EAAAq7Z,EAAAxmQ,SAAAzrJ,UAAA,EAAA8qJ,GACAsnQ,EAAAH,EAAAI,QAAAryZ,UAAA,EAAAmyZ,GACAj5Z,EAAAk5Z,EAAAl5Z,KACAo5Z,EAAAH,EAAAG;AACA,IAAAC,EAAAH,EAAA/zZ;AACA,GAAAi0Z,QAaA,SAAA17Z,EAAA07Z,GACA,OAAAA,EAAA,IAAA17Z,EAAA,IAAA07Z,EAAA,IAAA17Z,EAAA,IAAA07Z,EAAA,IAAA17Z,EAAA,IAAA07Z,EAAA,IAAA17Z,EAAA,EACA,CAFA,CAbAA,EAAA07Z,GACA;AAEA,YAAAp5Z,IACAq5Z,EAAA,CAAAA;AAEA,QAAA78Z,EAAA,EAAkBA,EAAA68Z,EAAA58Z,SAAkBD,EAAA,CACpC,MAAA88Z,EAAAR,EAAAhoZ,QAAAhK,UAAA,EAAApJ,EAAA27Z,EAAA78Z;AACA,OAAA88Z,IAAAp7Z,EAAAq7Z,eAAA;AACA,GAAAD,EAAA,QACA,CACA,QACA,CAIA,IAAAE,EAAAR;AAIAzjX,EAAAyjX,sBAA6BA,EAA0BzjX,EAAAzkC,QAAe0oZ;ACnCzDv1Y,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAAA46Z,EAAA,UACAC,EAAA,CACAC,YAAAF,UACAG,YAAAH,UACAv9H,GAAAu9H,UACAI,QAAA,OAAA56Z,KAAAyyK,IACAujN,IAAA,OAAAh2X,KAAAyyK,IACAooP,KAAAL,gBACAj5W,GAAAi5W,gBACAM,OAAA,MAAAN,EACAlqQ,GAAA,MAAAkqQ,EACAl+Z,WAAAk+Z,UACAO,WAAAP,UACAp4Q,GAAAo4Q,UACAn+Z,OAAAm+Z,EACAQ,OAAAR,EACApzZ,EAAAozZ,EACAh+Z,MAAAg+Z,kBACA7uQ,GAAA6uQ,kBACAS,YAAAT,WACAU,YAAAV,WACAtzU,GAAAszU,WACAW,cAAAX,EAAA,KACAY,IAAAZ,EAAA,KACAa,QAAA,EACAC,IAAA,EACA/+Z,MAAAi+Z,kBACAe,GAAAf,mBAEAgB,EAAA,CACAC,MAAA,UACAp3H,GAAA,UACAq2H,YAAA,IACAC,YAAA,IACA19H,GAAA,IACA49H,KAAA,aACAt5W,GAAA,aACAm6W,SAAA,KACA7hS,GAAA,KACAihS,OAAA,eACAxqQ,GAAA,eACAh0J,WAAA,KACAy+Z,WAAA,KACA34Q,GAAA,KACA/lJ,OAAA,EACA2+Z,OAAA,EACA5zZ,EAAA,EACA5K,MAAA,OACAmvJ,GAAA,OACAwvQ,cAAA,sBACAC,IAAA,sBACAH,YAAA,IACAC,YAAA,IACAh0U,GAAA,IACA3qF,MAAA,YACAg/Z,GAAA;AAEA,SAAAI,EAAA1B,EAAA1mZ,EAAAtU,EAAA,IACA,MAAA28Z,EAAA,CAAiB76Z,KAAA;AASjB,OARA,IAAA9B,EAAAg9C,IAAAh9C,EAAAg9C,MACA2/W,EAAA3/W,GAAAh9C,EAAAg9C,IAEAh9C,EAAAk7Z,OACAyB,EAAAzB,KAAAl7Z,EAAAk7Z,MAEAyB,EAAAroZ,cAAA,GACAqoZ,EAAAtnZ,SAAA2lZ,EACA2B,CACA,CAmBA,SAAAjpQ,EAAAzsJ,EAAAqN,EAAAtU,EAAA,IACA,IAAAiH,EACA,UAAAvI,MAAA;AAEA,IAAAmT,MAAA1T,QAAA8I,GACA,UAAAvI,MAAA;AAEA,GAAAuI,EAAA1I,OAAA,EACA,UAAAG,MAAA;AAEA,IAAAg0F,EAAAzrF,EAAA,MAAAyrF,EAAAzrF,EAAA,IACA,UAAAvI,MAAA;AAMA,OAAAg+Z,EAJA,CACA56Z,KAAA,QACAmF,eAEAqN,EAAAtU,EACA,CASA,SAAA+6Z,EAAA9zZ,EAAAqN,EAAAtU,EAAA,IACA,UAAA48Z,KAAA31Z,EAAA,CACA,GAAA21Z,EAAAr+Z,OAAA,EACA,UAAAG,MACA;AAGA,GAAAk+Z,IAAAr+Z,OAAA,GAAAA,SAAAq+Z,EAAA,GAAAr+Z,OACA,UAAAG,MAAA;AAEA,QAAAilF,EAAA,EAAoBA,EAAAi5U,IAAAr+Z,OAAA,GAAAA,OAAkColF,IACtD,GAAAi5U,IAAAr+Z,OAAA,GAAAolF,KAAAi5U,EAAA,GAAAj5U,GACA,UAAAjlF,MAAA,8CAGA,CAKA,OAAAg+Z,EAJA,CACA56Z,KAAA,UACAmF,eAEAqN,EAAAtU,EACA,CASA,SAAA68Z,EAAA51Z,EAAAqN,EAAAtU,EAAA,IACA,GAAAiH,EAAA1I,OAAA,EACA,UAAAG,MAAA;AAMA,OAAAg+Z,EAJA,CACA56Z,KAAA,aACAmF,eAEAqN,EAAAtU,EACA,CASA,SAAA88Z,EAAAC,EAAA/8Z,EAAA,IACA,MAAAg9Z,EAAA,CAAel7Z,KAAA;AAQf,OAPA9B,EAAAg9C,KACAggX,EAAAhgX,GAAAh9C,EAAAg9C,IAEAh9C,EAAAk7Z,OACA8B,EAAA9B,KAAAl7Z,EAAAk7Z,MAEA8B,EAAAD,WACAC,CACA,CACA,SAAAC,EAAAh2Z,EAAAqN,EAAAtU,EAAA,IAKA,OAAA08Z,EAJA,CACA56Z,KAAA,kBACAmF,eAEAqN,EAAAtU,EACA,CACA,SAAAk9Z,EAAAj2Z,EAAAqN,EAAAtU,EAAA,IAKA,OAAA08Z,EAJA,CACA56Z,KAAA,aACAmF,eAEAqN,EAAAtU,EACA,CACA,SAAAm9Z,EAAAl2Z,EAAAqN,EAAAtU,EAAA,IAKA,OAAA08Z,EAJA,CACA56Z,KAAA,eACAmF,eAEAqN,EAAAtU,EACA,CAeA,SAAAo9Z,EAAAhB,EAAAj/Z,EAAA,cACA,MAAAwvE,EAAA6uV,EAAAr+Z;AACA,IAAAwvE,EACA,UAAAjuE,MAAAvB,EAAA;AAEA,OAAAi/Z,EAAAzvV,CACA,CACA,SAAA0wV,EAAAh3Z,EAAAlJ,EAAA,cACA,MAAAwvE,EAAA6uV,EAAAr+Z;AACA,IAAAwvE,EACA,UAAAjuE,MAAAvB,EAAA;AAEA,OAAAkJ,EAAAsmE,CACA,CAoBA,SAAA2wV,EAAAlB,GAEA,OADAA,GAAA,EAAAr7Z,KAAAyyK,IACA,IAAAzyK,KAAAyyK,EACA,CAyBA,SAAA9gF,EAAAoyB,GACA,OAAA7rC,MAAA6rC,IAAA,OAAAA,IAAAjzG,MAAA1T,QAAA2mH,EACA,CAsEAztE,EAAAklX,YAAmBA,EAAgBllX,EAAAkmX,iBA7GnC,SAAA9yI,GAEA,OADAA,GAAA,KACA,IACAA,EAAA,IACIA,GAAA,IACJA,EAAA,IAEAA,CACA,EAqGgFpzO,EAAAmmX,iBApHhF,SAAAC,GACA,IAAAhzI,EAAAgzI,EAAA;AAIA,OAHAhzI,EAAA,IACAA,GAAA,KAEAA,CACA,EA8G6HpzO,EAAAqmX,YAtF7H,SAAAjgK,EAAAkgK,EAAA,SAAAC,EAAA,cACA,KAAAngK,GAAA,GACA,UAAA/+P,MAAA;AAEA,MAAAm/Z,EAAAtB,EAAAoB;AACA,IAAAE,EACA,UAAAn/Z,MAAA;AAEA,MAAAo/Z,EAAAvB,EAAAqB;AACA,IAAAE,EACA,UAAAp/Z,MAAA;AAEA,OAAA++P,EAAAogK,EAAAC,CACA,EAyEgKzmX,EAAA0mX,cA5FhK,SAAAx/Z,EAAAo/Z,EAAA,aAAAC,EAAA,cACA,KAAAr/Z,GAAA,GACA,UAAAG,MAAA;AAEA,OAAA0+Z,EAAAC,EAAA9+Z,EAAAo/Z,GAAAC,EACA,EAuFuMvmX,EAAA2mX,iBAhGvM,SAAArC,GAEA,OADAA,EAAA,IACA56Z,KAAAyyK,GAAA,GACA,EA6FoPn8H,EAAAkkX,YAAmBA,EAAgBlkX,EAAAmkX,QAAeA,EAAYnkX,EAAAqlX,QAAeA,EAAYrlX,EAAAylX,kBAAyBA,EAAsBzlX,EAAAhiC,SAhR5X,SAAAvT,EAAAmF,EAAAqqI,EAAA,IACA,OAAAxvI,GACA,YACA,OAAA4xJ,EAAAzsJ,GAAAoO;AACA,iBACA,OAAAwnZ,EAAA51Z,GAAAoO;AACA,cACA,OAAA0lZ,EAAA9zZ,GAAAoO;AACA,iBACA,OAAA6nZ,EAAAj2Z,GAAAoO;AACA,sBACA,OAAA4nZ,EAAAh2Z,GAAAoO;AACA,mBACA,OAAA8nZ,EAAAl2Z,GAAAoO;AACA,QACA,UAAA3W,MAAAoD,EAAA,eAEA,EA+PyZu1C,EAAA4mX,mBAnJzZ,SAAAC,EAAA5pZ,EAAAtU,EAAA,IAKA,OAAA08Z,EAJA,CACA56Z,KAAA,qBACAo8Z,cAEA5pZ,EAAAtU,EACA,EA6I0cq3C,EAAAq7C,SAAgBA,EAAar7C,EAAAw7D,SArEve,SAAAjlG,GACA,cAAAA,GAAA,iBAAAA,IAAAiE,MAAA1T,QAAAyP,EACA,EAmEogBypC,EAAA8mX,gBAvHpgB,SAAA93Z,EAAAlJ,GACA,OAAAmga,EAAAD,EAAAh3Z,EAAAlJ,GACA,EAqH+iBk6C,EAAAgmX,gBAAuBA,EAAoBhmX,EAAAwlX,WAAkBA,EAAexlX,EAAA+mX,YA3L3nB,SAAAn3Z,EAAAqN,EAAAtU,EAAA,IACA,OAAA88Z,EACA71Z,EAAA2a,IAAA7B,GACA88Y,EAAA98Y,EAAAzL,IAEAtU,EAEA,EAoL8pBq3C,EAAA4lX,gBAAuBA,EAAoB5lX,EAAA6lX,WAAkBA,EAAe7lX,EAAA8lX,aAAoBA,EAAiB9lX,EAAAq8G,MAAaA,EAAUr8G,EAAAgnX,OA3OtyB,SAAAp3Z,EAAAqN,EAAAtU,EAAA,IACA,OAAA88Z,EACA71Z,EAAA2a,IAAA7B,GACA2zI,EAAA3zI,EAAAzL,IAEAtU,EAEA,EAoO+zBq3C,EAAA0jX,QAAeA,EAAY1jX,EAAAinX,SA7M11B,SAAAr3Z,EAAAqN,EAAAtU,EAAA,IACA,OAAA88Z,EACA71Z,EAAA2a,IAAA7B,GACAg7Y,EAAAh7Y,EAAAzL,IAEAtU,EAEA,EAsMu3Bq3C,EAAAimX,iBAAwBA,EAAqBjmX,EAAA+lX,gBAAuBA,EAAoB/lX,EAAAknX,WAlE/8B,SAAAA,EAAApxV,UACAA,EAAA+tV,KACA,YAAA/tV,EAAArrE,KACAqrE,EAAA93D,UAAAkpZ,EAAApxV,EAAA93D,UACI,sBAAA83D,EAAArrE,KACJqrE,EAAA4vV,SAAAvkZ,QAAA+lZ,GACI,uBAAApxV,EAAArrE,MACJqrE,EAAA+wV,WAAA1lZ,QAAA+lZ,EAEA,EAyDg/BlnX,EAAAn2C,MA5Ih/B,SAAA4jH,EAAA/3C,EAAA,GACA,GAAAA,QAAA,GACA,UAAAruE,MAAA;AAEA,MAAA8/Z,EAAAz9Z,KAAAC,IAAA,GAAA+rE,GAAA;AACA,OAAAhsE,KAAAG,MAAA4jH,EAAA05S,IACA,EAsIugCnnX,EAAAonX,aAxDvgC,SAAAvD,GACA,IAAAA,EACA,UAAAx8Z,MAAA;AAEA,IAAAmT,MAAA1T,QAAA+8Z,GACA,UAAAx8Z,MAAA;AAEA,OAAAw8Z,EAAA38Z,QAAA,IAAA28Z,EAAA38Z,OACA,UAAAG,MAAA;AAEAw8Z,EAAA1iZ,QAAAssG,IACA,IAAApyB,EAAAoyB,GACA,UAAApmH,MAAA,mCAGA,EAyC4iC24C,EAAAqnX,WAxC5iC,SAAA1hX,GACA,IAAAA,EACA,UAAAt+C,MAAA;AAEA,4BAAAmJ,eAAAm1C,GACA,UAAAt+C,MAAA,kCAEA,SAAAL,EAAAvB,EAAA0B,GAAA;ACrTaunB,OAAAmhC,eAAA7P,EAAA,cAA8C12C;AAC3D,IAAAg+Z,EAAel1U,EAAQ;AA4HvBpyC,EAAAunX,aApDA,SAAA9B,EAAAh7Z,EAAAsE,GACA,IAAA02Z,EACA,UAAAp+Z,MAAA;AAEA,IAAA0H,EACA,UAAA1H,MAAA;AAEA,IAAAo+Z,GAAA,sBAAAA,EAAAh7Z,KACA,UAAApD,MACA,oBAAA0H,EAAA;AAGA,UAAAs2Z,KAAAI,EAAAC,SAAA,CACA,IAAAL,GAAA,YAAAA,EAAA56Z,OAAA46Z,EAAArnZ,SACA,UAAA3W,MACA,oBAAA0H,EAAA;AAGA,IAAAs2Z,EAAArnZ,UAAAqnZ,EAAArnZ,SAAAvT,SACA,UAAApD,MACA,oBAAA0H,EAAA,eAAAtE,EAAA,WAAA46Z,EAAArnZ,SAAAvT,KAGA,CACA,EA4BqCu1C,EAAAwnX,eAzFrC,SAAAA,EAAA53Z,GACA,GAAAA,EAAA1I,OAAA,GAAAoga,EAAAjsU,SAAA9pF,UAAA,EAAA3B,EAAA,KAAA03Z,EAAAjsU,SAAA9pF,UAAA,EAAA3B,EAAA,IACA;AAEA,GAAA4K,MAAA1T,QAAA8I,EAAA,KAAAA,EAAA,GAAA1I,OACA,OAAAsga,EAAA53Z,EAAA;AAEA,UAAAvI,MAAA,wCACA,EAiF8E24C,EAAAynX,UAtE9E,SAAApC,EAAA56Z,EAAAsE,GACA,IAAAs2Z,EACA,UAAAh+Z,MAAA;AAEA,IAAA0H,EACA,UAAA1H,MAAA;AAEA,IAAAg+Z,GAAA,YAAAA,EAAA56Z,OAAA46Z,EAAArnZ,SACA,UAAA3W,MACA,oBAAA0H,EAAA;AAGA,IAAAs2Z,EAAArnZ,UAAAqnZ,EAAArnZ,SAAAvT,SACA,UAAApD,MACA,oBAAA0H,EAAA,eAAAtE,EAAA,WAAA46Z,EAAArnZ,SAAAvT,KAGA,EAqD6Gu1C,EAAA0nX,YAhF7G,SAAAp+Z,EAAAmB,EAAAsE,GACA,IAAAtE,IAAAsE,EACA,UAAA1H,MAAA;AAEA,IAAAiC,KAAAmB,SACA,UAAApD,MACA,oBAAA0H,EAAA,eAAAtE,EAAA,WAAAnB,EAAAmB,KAGA,EAuEgJu1C,EAAAg9G,SA3HhJ,SAAAzjI,GACA,IAAAA,EACA,UAAAlyB,MAAA;AAEA,IAAAmT,MAAA1T,QAAAyyB,GAAA,CACA,eAAAA,EAAA9uB,MAAA,OAAA8uB,EAAAvb,UAAA,UAAAub,EAAAvb,SAAAvT,KACA,UAAA8uB,EAAAvb,SAAApO;AAEA,aAAA2pB,EAAA9uB,KACA,UAAA8uB,EAAA3pB,YAEA,CACA,GAAA4K,MAAA1T,QAAAyyB,MAAAryB,QAAA,IAAAsT,MAAA1T,QAAAyyB,EAAA,MAAA/e,MAAA1T,QAAAyyB,EAAA,IACA,UAAAA;AAEA,UAAAlyB,MAAA,qDACA,EA2G6K24C,EAAA2nX,UA1G7K,SAAAj/Y,GACA,GAAAlO,MAAA1T,QAAA4hB,GACA,OAAAA;AAEA,eAAAA,EAAAje,MACA,UAAAie,EAAA1K,SACA,OAAA0K,EAAA1K,SAAApO,iBAGA,GAAA8Y,EAAA9Y,YACA,OAAA8Y,EAAA9Y;AAGA,UAAAvI,MACA,8DAEA,EA0F4M24C,EAAA4jX,QA3B5M,SAAA9tV,GACA,kBAAAA,EAAArrE,KACAqrE,EAAA93D,SAEA83D,CACA,EAsBuO91B,EAAA4nX,QArBvO,SAAA9xV,EAAAmpI,GACA,4BAAAnpI,EAAArrE,KACA,oBAEA,uBAAAqrE,EAAArrE,KACA,qBAEA,YAAAqrE,EAAArrE,MAAA,OAAAqrE,EAAA93D,SACA83D,EAAA93D,SAAAvT,KAEAqrE,EAAArrE,IACA,SAAAzD,EAAAvB,EAAA0B,GCnHA,MAAA0ga,EAAgBz1U,EAAQ,QACxB01U,MAAOA,EAAAC,iBAAsBF;AAE7BC,EAAAppP,YAAAqpP,GAEAl0V,EAAA7zB,QAAAtxB,OAAA4rD,OAAAwtV,EAAAD;ACGA,IAAAG,EAAsB51U,EAAQ;AAC9BA,EAAQ;AAyIR,IAAAg1F,EAAA,IAvIA,MACA,WAAAnlG,GACAt7E,KAAAsha,SAAA,KACAtha,KAAAuha,QAAA,IAAAlqY,IACAr3B,KAAAwha,YACAxha,KAAAyha,eAAAhwY,CACA,CACA,OAAAstO,CAAA2iK,EAAAC,EAAAjnY,EAAA52B,GACA,MAAA4hY,EAAAi8B,EAAA3jQ,UAAAl6J,GACA89Z,EAAAD,EAAA3qZ;AACA0uX,EAAAlrX,QAAA8V,KAAA,CACAoxY,QACA5nQ,QAAA6nQ,EAAA7nQ,QACA8nQ,WACA/Z,YAAA9kZ,KAAA8b,IAAA6b,EAAAinY,EAAAziZ,MAAA0iZ,KAEA,CACA,QAAAC,GACA7ha,KAAAsha,WAGAtha,KAAAwha,YACAxha,KAAAsha,SAAAD,EAAAS,iBAAAl3Z,KAAAnB,OAAA,KACAzJ,KAAAoR,UACApR,KAAAsha,SAAA,KACAtha,KAAAwha,UACAxha,KAAA6ha,aAGA,CACA,OAAAzwZ,CAAAspB,EAAAif,KAAAmT,OACA,IAAA0nI,EAAA;AACAx0L,KAAAuha,QAAA/mZ,QAAA,CAAAmnZ,EAAAD,KACA,IAAAC,EAAA1yG,UAAA0yG,EAAA7lP,MAAAv7K,OACA;AAEA,MAAAu7K,EAAA6lP,EAAA7lP;AACA,IAEA1jB,EAFA93J,EAAAw7K,EAAAv7K,OAAA,EACAwha;AAEA,KAAkBzha,GAAA,IAAQA,EAC1B83J,EAAA0jB,EAAAx7K,GACA83J,EAAA4pQ,SACA5pQ,EAAA6pQ,OAAAN,EAAA3qZ,WACA2qZ,EAAA3qZ,SAAAohJ,EAAA6pQ,QAEA7pQ,EAAAiG,KAAA3jI,GACAqnY,OAEAjmP,EAAAx7K,GAAAw7K,IAAAv7K,OAAA,GACAu7K,EAAAnqB;AAGAowQ,IACAL,EAAAK,OACA/ha,KAAA++P,QAAA2iK,EAAAC,EAAAjnY,EAAA,aAEAohJ,EAAAv7K,SACAoha,EAAA1yG,WACAjvT,KAAA++P,QAAA2iK,EAAAC,EAAAjnY,EAAA,YACAinY,EAAA7nQ,YAEA06B,GAAA1Y,EAAAv7K,SAEAP,KAAAyha,UAAA/mY,EACA,IAAA85J,IACAx0L,KAAAwha,YAEA,CACA,SAAAU,CAAAR,GACA,MAAAS,EAAAnia,KAAAuha;AACA,IAAAI,EAAAQ,EAAA71Y,IAAAo1Y;AAaA,OAZAC,IACAA,EAAA,CACA1yG,WACAn1J,WACAgiB,MAAA,GACA9d,UAAA,CACAokQ,SAAA,GACA3pN,SAAA,KAGA0pN,EAAAt1Y,IAAA60Y,EAAAC,IAEAA,CACA,CACA,MAAA3mQ,CAAA0mQ,EAAAh4Z,EAAAi/G,GACA3oH,KAAAkia,UAAAR,GAAA1jQ,UAAAt0J,GAAA9B,KAAA+gH,EACA,CACA,GAAA/wE,CAAA8pX,EAAA5lP,GACAA,KAAAv7K,QAGAP,KAAAkia,UAAAR,GAAA5lP,MAAAl0K,QAAAk0K,EACA,CACA,GAAAlrJ,CAAA8wY,GACA,OAAA1ha,KAAAkia,UAAAR,GAAA5lP,MAAAv7K,OAAA,CACA,CACA,KAAA2e,CAAAwiZ,GACA,MAAAC,EAAA3ha,KAAAuha,QAAAj1Y,IAAAo1Y;AACAC,IAGAA,EAAA1yG,WACA0yG,EAAAziZ,MAAAy6B,KAAAmT,MACA60W,EAAA3qZ,SAAA2qZ,EAAA7lP,MAAAp9J,OAAA,CAAAC,EAAA+nJ,IAAA3jK,KAAA+b,IAAAH,EAAA+nJ,EAAAsL,WAAA,GACAhyK,KAAA6ha,WACA,CACA,OAAA5yG,CAAAyyG,GACA,IAAA1ha,KAAAwha,SACA;AAEA,MAAAG,EAAA3ha,KAAAuha,QAAAj1Y,IAAAo1Y;AACA,SAAAC,KAAA1yG,SAAA0yG,EAAA7lP,MAAAv7K,OAIA,CACA,IAAA2J,CAAAw3Z,GACA,MAAAC,EAAA3ha,KAAAuha,QAAAj1Y,IAAAo1Y;AACA,IAAAC,MAAA7lP,MAAAv7K,OACA;AAEA,MAAAu7K,EAAA6lP,EAAA7lP;AACA,IAAAx7K,EAAAw7K,EAAAv7K,OAAA;AACA,KAAcD,GAAA,IAAQA,EACtBw7K,EAAAx7K,GAAAg4J;AAEAqpQ,EAAA7lP,MAAA,GACA97K,KAAA++P,QAAA2iK,EAAAC,EAAAhoX,KAAAmT,MAAA,WACA,CACA,MAAA4uB,CAAAgmV,GACA,OAAA1ha,KAAAuha,QAAAj8U,OAAAo8U,EACA;AAIA,MAAAl/B,EAAA,cACA6/B,EAAA,CACAC,QAAA,CAAA/0Y,EAAAk/B,EAAAkiB,IACAA,EAAA,GAAAliB,EAAAl/B,EAEA,KAAAjoB,CAAAioB,EAAAk/B,EAAAkiB,GACA,MAAA4zV,EAAAlB,EAAA/7Z,MAAAioB,GAAAi1W,GACAx5U,EAAAu5W,EAAAj+I,OAAA+8I,EAAA/7Z,MAAAmnD,GAAA+1U;AACA,OAAAx5U,KAAAs7N,MAAAt7N,EAAAk6U,IAAAq/B,EAAA5zV,GAAAqpT,YAAAvrU,CACA,EACAhyB,OAAA,CAAAlN,EAAAk/B,EAAAkiB,IACAphD,GAAAk/B,EAAAl/B,GAAAohD;AAGA,MAAA6zV,EACA,WAAAlnV,CAAAmnV,EAAAj5Z,EAAA0hL,EAAAz+H,GACA,MAAAupH,EAAAxsK,EAAA0hL;AACAz+H,EAAA40W,EAAArsV,QAAA,CACAytV,EAAAh2W,GACAA,EACAupH,EACAysP,EAAAl1Y;AAEA,MAAAA,EAAA8zY,EAAArsV,QAAA,CACAytV,EAAAl1Y,KACAyoJ,EACAvpH;AAEAzsD,KAAAgia,WACAhia,KAAA0ia,IAAAD,EAAAnyY,IAAA+xY,EAAAI,EAAA3+Z,aAAAypB,GACAvtB,KAAA2ia,QAAAtB,EAAAuB,QAAAH,EAAA7sP,SAAAyrP,EAAAuB,QAAAC,OACA7ia,KAAA8ia,OAAA//Z,KAAAE,MAAA02C,KAAAmT,OAAA21W,EAAA1gN,OAAA,IACA/hN,KAAAgyK,UAAAhyK,KAAAiia,OAAAl/Z,KAAAE,MAAAw/Z,EAAAzrZ,UACAhX,KAAAo5I,QAAAqpR,EAAArJ,KACAp5Z,KAAAwsM,QAAAhjM,EACAxJ,KAAA+ia,MAAA73O,EACAlrL,KAAAk1Y,MAAA3nX,EACAvtB,KAAAm1Y,IAAA1oV,EACAzsD,KAAAgja,eAAAvxY,CACA,CACA,MAAA+tI,GACA,OAAAx/J,KAAAgia,OACA,CACA,MAAArxZ,CAAA8xZ,EAAAh2W,EAAA/xB,GACA,GAAA16B,KAAAgia,QAAA,CACAhia,KAAA++P;AACA,MAAA/oF,EAAAh2K,KAAAwsM,QAAAxsM,KAAA+ia,OACAtuO,EAAA/5J,EAAA16B,KAAA8ia,OACAG,EAAAjja,KAAAgyK,UAAAyiB;AACAz0L,KAAA8ia,OAAApoY,EACA16B,KAAAgyK,UAAAjvK,KAAAE,MAAAF,KAAA+b,IAAAmkZ,EAAAR,EAAAzrZ,WACAhX,KAAAiia,QAAAxtO,EACAz0L,KAAAo5I,QAAAqpR,EAAArJ,KACAp5Z,KAAAm1Y,IAAAksB,EAAArsV,QAAA,CACAytV,EAAAh2W,GACAA,EACAupH,EACAysP,EAAAl1Y,OAEAvtB,KAAAk1Y,MAAAmsB,EAAArsV,QAAA,CACAytV,EAAAl1Y,KACAyoJ,EACAvpH,GAEA,CACA,CACA,MAAA6rG,GACAt4J,KAAAgia,UACAhia,KAAAq+J,KAAA1kH,KAAAmT,OACA9sD,KAAAgia,WACAhia,KAAA++P,YAEA,CACA,IAAA1gG,CAAA3jI,GACA,MAAA+5J,EAAA/5J,EAAA16B,KAAA8ia,OACA9rZ,EAAAhX,KAAAgyK,UACAkZ,EAAAlrL,KAAA+ia,MACAx1Y,EAAAvtB,KAAAk1Y,MACAkkB,EAAAp5Z,KAAAo5I,MACA3sF,EAAAzsD,KAAAm1Y;AACA,IAAAxmU;AAEA,GADA3uE,KAAAgia,QAAAz0Y,IAAAk/B,IAAA2sW,GAAA3kO,EAAAz9K,IACAhX,KAAAgia,QAGA,OAFAhia,KAAAwsM,QAAAthB,GAAAz+H,OACAzsD,KAAA++P;AAGAtqE,EAAA,EACAz0L,KAAAwsM,QAAAthB,GAAA39J,GAGAohD,EAAA8lH,EAAAz9K,EAAA,EACA23D,EAAAyqV,GAAAzqV,EAAA,IAAAA,IACAA,EAAA3uE,KAAA2ia,QAAA5/Z,KAAA8b,IAAA,EAAA9b,KAAA+b,IAAA,EAAA6vD,KACA3uE,KAAAwsM,QAAAthB,GAAAlrL,KAAA0ia,IAAAn1Y,EAAAk/B,EAAAkiB,GACA,CACA,IAAAu0V,GACA,MAAAzhQ,EAAAzhK,KAAAgja,YAAAhja,KAAAgja,UAAA;AACA,WAAA3vV,QAAA,CAAAu0F,EAAAC,KACApG,EAAA75J,KAAA,CACAggK,MACAC,SAGA,CACA,OAAAk3F,CAAAz9E,GACA,MAAAttG,EAAAstG,EAAA,YACA7f,EAAAzhK,KAAAgja,WAAA;AACA,QAAA1ia,EAAA,EAAuBA,EAAAmhK,EAAAlhK,OAAqBD,IAC5CmhK,EAAAnhK,GAAA0zE,IAEA,EAGA,MAAAmvV,EACA,WAAA7nV,CAAAomV,EAAAlqY,GACAx3B,KAAAoja,OAAA1B,EACA1ha,KAAAqja,YAAA,IAAAhsY,IACAr3B,KAAAosY,UAAA50W,EACA,CACA,SAAA40W,CAAA50W,GACA,IAAA6pY,EAAAxsT,SAAAr9E,GACA;AAEA,MAAA8rY,EAAAv7Y,OAAA2wB,KAAA2oX,EAAA72W,SAAA+4W,WACAC,EAAAxja,KAAAqja;AACAt7Y,OAAAs7F,oBAAA7rF,GAAAhd,QAAAye,IACA,MAAAwpY,EAAAjrY,EAAAyB;AACA,IAAAooY,EAAAxsT,SAAA4tT,GACA;AAEA,MAAAnhP,EAAA;AACA,UAAAitC,KAAA+0M,EACAhiP,EAAAitC,GAAAk0M,EAAAl0M,IAEA8yM,EAAAlha,QAAAsia,EAAAnsZ,aAAAmsZ,EAAAnsZ,YAAA,CACA2iB,IACAze,QAAA0wK,IACAA,IAAAjyJ,GAAAuqY,EAAA5yY,IAAAs6J,IACAs4O,EAAA32Y,IAAAq+J,EAAA5J,MAIA,CACA,eAAAmiP,CAAAj6Z,EAAAw9C,GACA,MAAAkjE,EAAAljE,EAAAhlD,QACAA,EAwEA,SAAAwH,EAAA0gH,GACA,IAAAA,EACA;AAEA,IAAAloH,EAAAwH,EAAAxH;AACA,GAAAA,EAUA,OANAA,EAAA0ha,UACAl6Z,EAAAxH,UAAA+lB,OAAA4rD,OAAA,GAAmD3xE,EAAA,CACnD0ha,WACAC,YAAA,MAGA3ha;AATAwH,EAAAxH,QAAAkoH,CAUA,CAhBA,CAxEA1gH,EAAA0gH;AACA,IAAAloH,EACA;AAEA,MAAA4ha,EAAA5ja,KAAA6ja,kBAAA7ha,EAAAkoH;AAOA,OANAA,EAAAw5S,SAwDA,SAAAE,EAAAttZ,GACA,MAAA24S,EAAA,GACAv2Q,EAAA3wB,OAAA2wB,KAAApiC;AACA,QAAAhW,EAAA,EAAmBA,EAAAo4C,EAAAn4C,OAAiBD,IAAA,CACpC,MAAAwja,EAAAF,EAAAlrX,EAAAp4C;AACAwja,KAAAtkQ,UACAyvJ,EAAArnT,KAAAk8Z,EAAAZ,OAEA,CACA,OAAA7vV,QAAA3zC,IAAAuvR,EACA,CAVA,CAvDAzlT,EAAAxH,QAAA2ha,YAAAz5S,GAAAz2C,KAAA,KACAjqE,EAAAxH,QAAAkoH,GACa,QAGb05S,CACA,CACA,iBAAAC,CAAAr6Z,EAAAw9C,GACA,MAAAw8W,EAAAxja,KAAAqja,YACAO,EAAA,GACA30G,EAAAzlT,EAAAm6Z,cAAAn6Z,EAAAm6Z,YAAA,IACAr5W,EAAAviC,OAAA2wB,KAAAsO,GACAtsB,EAAAif,KAAAmT;AACA,IAAAxsD;AACA,IAAAA,EAAAgqD,EAAA/pD,OAAA,EAAkCD,GAAA,IAAQA,EAAA,CAC1C,MAAA4qL,EAAA5gI,EAAAhqD;AACA,SAAA4qL,EAAAnnL,OAAA,GACA;AAEA,eAAAmnL,EAAA,CACA04O,EAAAh8Z,QAAA5H,KAAAyja,gBAAAj6Z,EAAAw9C;AACA,QACA,CACA,MAAArkD,EAAAqkD,EAAAkkI;AACA,IAAAq4O,EAAAt0G,EAAA/jI;AACA,MAAAu3O,EAAAe,EAAAl3Y,IAAA4+J;AACA,GAAAq4O,EAAA,CACA,GAAAd,GAAAc,EAAA/jQ,SAAA,CACA+jQ,EAAA5yZ,OAAA8xZ,EAAA9/Z,EAAA+3B;AACA,QACA,CACA6oY,EAAAjrQ,QAEA,CACAmqQ,KAAAzrZ,UAIAi4S,EAAA/jI,GAAAq4O,EAAA,IAAAf,EAAAC,EAAAj5Z,EAAA0hL,EAAAvoL,GACAiha,EAAAh8Z,KAAA27Z,IAJA/5Z,EAAA0hL,GAAAvoL,CAKA,CACA,OAAAiha,CACA,CACA,MAAAjzZ,CAAAnH,EAAAw9C,GACA,OAAAhnD,KAAAqja,YAAAhlZ,KAEA,YADA0J,OAAA4rD,OAAAnqE,EAAAw9C;AAGA,MAAA48W,EAAA5ja,KAAA6ja,kBAAAr6Z,EAAAw9C;AACA,OAAA48W,EAAArja,QACAkgL,EAAA7oI,IAAA53C,KAAAoja,OAAAQ,YADA,CAIA,EA+BA,SAAAG,EAAA79Y,EAAA89Y,GACA,MAAA/qX,EAAA/yB,KAAAlkB,SAAA,GACAmP,EAAA8nC,EAAA9nC,QACA0N,OAAA4S,IAAAwnB,EAAAp6B,IAAAmlZ,EAAA,EACAllZ,OAAA2S,IAAAwnB,EAAAn6B,IAAAklZ,EAAA;AACA,OACA9kZ,MAAA/N,EAAA2N,EAAAD,EACAM,IAAAhO,EAAA0N,EAAAC,EAEA,CAgCA,SAAAmlZ,EAAAvC,EAAAwC,GACA,MAAAxrX,EAAA,GACAyrX,EAAAzC,EAAA0C,uBAAAF;AACA,IAAA5ja,EAAA+ja;AACA,IAAA/ja,EAAA,EAAA+ja,EAAAF,EAAA5ja,OAAuCD,EAAA+ja,IAAU/ja,EACjDo4C,EAAA9wC,KAAAu8Z,EAAA7ja,GAAAyI;AAEA,OAAA2vC,CACA,CACA,SAAA4rX,EAAAr6W,EAAAtnD,EAAA4ha,EAAAvia,EAAA,IACA,MAAA02C,EAAAuR,EAAAvR,KACA8rX,EAAA,WAAAxia,EAAA6V;AACA,IAAAvX,EAAA+ja,EAAAI,EAAAC;AACA,UAAA/ha,EACA;AAEA,IAAAu3N;AACA,IAAA55N,EAAA,EAAA+ja,EAAA3rX,EAAAn4C,OAAmCD,EAAA+ja,IAAU/ja,EAAA,CAE7C,GADAmka,GAAA/rX,EAAAp4C,GACAmka,IAAAF,EAAA,CAEA,GADArqM,KACAl4N,EAAA09B,IACA;AAEA,KACA,CACAglY,EAAAz6W,EAAAjD,OAAAy9W,GACApD,EAAAsD,eAAAD,KAAAF,GAAA,IAAA7ha,GAAA0+Z,EAAAtpX,KAAAp1C,KAAA0+Z,EAAAtpX,KAAA2sX,MACA/ha,GAAA+ha,EAEA,CACA,OAAAxqM,GAAAl4N,EAAA09B,IAGA/8B,EAFA,CAGA,CAiBA,SAAAiia,EAAA1+Y,EAAAyzR,GACA,MAAAkrH,EAAA3+Y,KAAAlkB,QAAA6ia;AACA,OAAAA,QAAApzY,IAAAozY,QAAApzY,IAAAkoR,EAAA1vP,KACA,CAWA,SAAA66W,EAAAC,EAAAC,EAAAC,GACA,MAAAC,EAAAH,EAAAC,KAAAD,EAAAC,GAAA;AACA,OAAAE,EAAAD,KAAAC,EAAAD,GAAA,GACA,CACA,SAAAE,EAAAl7W,EAAAm7W,EAAA5/T,EAAA1hG,GACA,UAAA61S,KAAAyrH,EAAAC,wBAAAvha,GAAAqN,UAAA,CACA,MAAAxO,EAAAsnD,EAAA0vP,EAAA5wS;AACA,GAAAy8F,GAAA7iG,EAAA,IAAA6iG,GAAA7iG,EAAA,EACA,OAAAg3S,EAAA5wS,KAEA,CACA,WACA,CACA,SAAAu8Z,EAAAC,EAAA52E,GACA,MAAA+yE,MAAYA,EAAA8D,YAAA7rH,GAA6B4rH,EACzCR,EAAArD,EAAA+D,UAAA/D,EAAA+D,QAAA,KACAC,OAAYA,EAAAN,SAAAr8Z,MAAA07Z,GAAyC9qH,EACrDgsH,EAAAD,EAAAhmZ,KACAkmZ,EAAAR,EAAA1lZ,KACAuZ,EA7BA,SAAA4sY,EAAAC,EAAAnsH,GACA,SAAcksH,EAAA7mX,MAAiB8mX,EAAA9mX,MAAiB26P,EAAA1vP,OAAA0vP,EAAA71S,MAChD,CAFA,CA6BA4ha,EAAAN,EAAAzrH,GACA0qH,EAAA11E,EAAApuV;AACA,IAAA0pD;AACA,QAAA3pD,EAAA,EAAmBA,EAAA+ja,IAAU/ja,EAAA,CAC7B,MAAA83J,EAAAu2L,EAAAruV,IACgBqla,IAAA58Z,EAAA68Z,IAAAjja,GAAmCy1J;AAEnDnuG,GADAmuG,EAAAqtQ,UAAArtQ,EAAAqtQ,QAAA,KACAG,GAAAd,EAAAC,EAAA9rY,EAAAlwB,GACAkhD,EAAAw6W,GAAA9ha,EACAsnD,EAAA0+H,KAAAw8O,EAAAl7W,EAAAm7W,KAAAzrH,EAAA71S,MACAmmD,EAAA87W,QAAAZ,EAAAl7W,EAAAm7W,KAAAzrH,EAAA71S,OACAmmD,EAAA+7W,gBAAA/7W,EAAA+7W,cAAA,KACAvB,GAAA9ha,CACA,CACA,CACA,SAAAsja,EAAAvE,EAAAhiZ,GACA,MAAAwmZ,EAAAxE,EAAAwE;AACA,OAAAn+Y,OAAA2wB,KAAAwtX,GAAA3/Y,OAAA0S,GAAAitY,EAAAjtY,GAAAvZ,UAAA5L,OACA,CAuBA,SAAAqyZ,EAAAxsH,EAAA79H,GACA,MAAA2oP,EAAA9qH,EAAA4rH,WAAAx8Z,MACA2W,EAAAi6R,EAAAyrH,QAAAzrH,EAAAyrH,OAAA1lZ;AACA,GAAAA,EAAA,CAGAo8J,KAAA69H,EAAAysH;AACA,UAAAz3E,KAAA7yK,EAAA,CACA,MAAAipP,EAAAp2E,EAAA82E;AACA,IAAAV,QAAAtzY,IAAAszY,EAAArlZ,SAAA+R,IAAAszY,EAAArlZ,GAAA+kZ,GACA;OAEAM,EAAArlZ,GAAA+kZ,QACAhzY,IAAAszY,EAAArlZ,GAAAsmZ,oBAAAv0Y,IAAAszY,EAAArlZ,GAAAsmZ,cAAAvB,WACAM,EAAArlZ,GAAAsmZ,cAAAvB,EAEA,CAXA,CAYA,CACA,MAAA4B,EAAAxuZ,GAAA,UAAAA,GAAA,SAAAA,EACAyuZ,EAAA,CAAA9xQ,EAAAgiB,MAAAhiB,EAAAzsI,OAAA4rD,OAAA,GAA6E6gF;AAK7E,MAAA+xQ,EACAC,gBAAA;AACAA,0BAAA;AACAA,uBAAA;AACA,WAAAlrV,CAAAomV,EAAA+C,GACAzka,KAAA0ha,QACA1ha,KAAAyma,KAAA/E,EAAAjnQ,IACAz6J,KAAA+I,MAAA07Z,EACAzka,KAAA0ma,gBAAA,GACA1ma,KAAAwla,YAAAxla,KAAAolY,UACAplY,KAAA2ma,MAAA3ma,KAAAwla,YAAA1ha,KACA9D,KAAAgC,aAAAyvB,EACAzxB,KAAA4ma,YACA5ma,KAAA4sP,WAAAn7N,EACAzxB,KAAA6ma,iBAAAp1Y,EACAzxB,KAAA8ma,oBAAAr1Y,EACAzxB,KAAA+ma,gBAAAt1Y,EACAzxB,KAAAgna,gBAAAv1Y,EACAzxB,KAAAina,uBACAjna,KAAAkna,sBACAlna,KAAAmna,cAAA11Y,EACAzxB,KAAAona,UAAA,GACApna,KAAAqna,iDACArna,KAAAsna,2CACAtna,KAAAD,YACA,CACA,UAAAA,GACA,MAAA45S,EAAA35S,KAAAwla;AACAxla,KAAAosY,YACApsY,KAAAuna,aACA5tH,EAAA6tH,SAAA5C,EAAAjrH,EAAAyrH,OAAAzrH,GACA35S,KAAAyna,cACAzna,KAAAgC,QAAA0la,OAAA1na,KAAA0ha,MAAAiG,gBAAA,WACApyZ,QAAAC,KAAA,qKAEA,CACA,WAAAoyZ,CAAAnD,GACAzka,KAAA+I,QAAA07Z,GACA0B,EAAAnma,KAAAwla,aAEAxla,KAAA+I,MAAA07Z,CACA,CACA,UAAA8C,GACA,MAAA7F,EAAA1ha,KAAA0ha,MACA/nH,EAAA35S,KAAAwla,YACA/kV,EAAAzgF,KAAA6na,aACAC,EAAA,CAAApoZ,EAAA1Y,EAAAwK,EAAA3Q,IAAA,MAAA6e,EAAA1Y,EAAA,MAAA0Y,EAAA7e,EAAA2Q,EACAu2Z,EAAApuH,EAAAquH,QAAA3G,EAAA4G,eAAAxnV,EAAAunV,QAAA/B,EAAAvE,EAAA,MACAwG,EAAAvuH,EAAAwuH,QAAA9G,EAAA4G,eAAAxnV,EAAA0nV,QAAAlC,EAAAvE,EAAA,MACA0G,EAAAzuH,EAAA0uH,QAAAhH,EAAA4G,eAAAxnV,EAAA4nV,QAAApC,EAAAvE,EAAA,MACA4G,EAAA3uH,EAAA2uH,UACAC,EAAA5uH,EAAA6uH,QAAAV,EAAAQ,EAAAP,EAAAG,EAAAE,GACAK,EAAA9uH,EAAA+uH,QAAAZ,EAAAQ,EAAAJ,EAAAH,EAAAK;AACAzuH,EAAAgvH,OAAA3oa,KAAA4oa,cAAAb,GACApuH,EAAAkvH,OAAA7oa,KAAA4oa,cAAAV,GACAvuH,EAAAmvH,OAAA9oa,KAAA4oa,cAAAR,GACAzuH,EAAA+rH,OAAA1la,KAAA4oa,cAAAL,GACA5uH,EAAAyrH,OAAApla,KAAA4oa,cAAAH,EACA,CACA,UAAAZ,GACA,OAAA7na,KAAA0ha,MAAAz0Y,KAAA87Y,SAAA/oa,KAAA+I,MACA,CACA,OAAAq8X,GACA,OAAAplY,KAAA0ha,MAAAsH,eAAAhpa,KAAA+I,MACA,CACA,aAAA6/Z,CAAAK,GACA,OAAAjpa,KAAA0ha,MAAAwE,OAAA+C,EACA,CACA,cAAAC,CAAAhjZ,GACA,MAAAyzR,EAAA35S,KAAAwla;AACA,OAAAt/Y,IAAAyzR,EAAA+rH,OAAA/rH,EAAAyrH,OAAAzrH,EAAA+rH,MACA,CACA,KAAA9zY,GACA5xB,KAAAoR,QAAA,QACA,CACA,QAAA+3Z,GACA,MAAAxvH,EAAA35S,KAAAwla;AACAxla,KAAA4sP,OACAy0K,EAAA+H,oBAAAppa,KAAA4sP,MAAA5sP,MAEA25S,EAAA6tH,UACArB,EAAAxsH,EAEA,CACA,UAAA0vH,GACA,MAAA5oV,EAAAzgF,KAAA6na,aACA56Y,EAAAwzD,EAAAxzD,OAAAwzD,EAAAxzD,KAAA,IACA2/N,EAAA5sP,KAAA4sP;AACA,GAAAy0K,EAAAxsT,SAAA5nF,GAAA,CACA,MAAA0sR,EAAA35S,KAAAwla;AACAxla,KAAA4sP,MA5MA,SAAA3/N,EAAA0sR,GACA,MAAA+rH,OAAYA,EAAAN,UAAmBzrH,EAC/B2vH,EAAA,MAAA5D,EAAAhmZ,KAAA,QACA6pZ,EAAA,MAAAnE,EAAA1lZ,KAAA,QACAg5B,EAAA3wB,OAAA2wB,KAAAzrB,GACAu8Y,EAAA,IAAA31Z,MAAA6kC,EAAAn4C;AACA,IAAAD,EAAA+ja,EAAAprY;AACA,IAAA34B,EAAA,EAAA+ja,EAAA3rX,EAAAn4C,OAAmCD,EAAA+ja,IAAU/ja,EAC7C24B,EAAAyf,EAAAp4C,GACAkpa,EAAAlpa,GAAA,CACAgpa,IAAArwY,EACAswY,IAAAt8Y,EAAAgM;AAGA,OAAAuwY,CACA,CAfA,CA4MAv8Y,EAAA0sR,EACA,MAAU,GAAA/sD,IAAA3/N,EAAA,CACV,GAAA2/N,EAAA,CACAy0K,EAAA+H,oBAAAx8K,EAAA5sP;AACA,MAAA25S,EAAA35S,KAAAwla;AACAW,EAAAxsH,GACAA,EAAAysH,QAAA,EACA,CACAn5Y,GAAAlF,OAAA0hZ,aAAAx8Y,IACAo0Y,EAAAqI,kBAAAz8Y,EAAAjtB,MAEAA,KAAAona,UAAA,GACApna,KAAA4sP,MAAA3/N,CACA,CACA,CACA,WAAAw6Y,GACA,MAAA9tH,EAAA35S,KAAAwla;AACAxla,KAAAqpa,aACArpa,KAAAqna,qBACA1tH,EAAAl5N,QAAA,IAAAzgF,KAAAqna,mBAEA,CACA,qBAAAsC,CAAAC,GACA,MAAAjwH,EAAA35S,KAAAwla,YACA/kV,EAAAzgF,KAAA6na;AACA,IAAAgC;AACA7pa,KAAAqpa;AACA,MAAAS,EAAAnwH,EAAA6tH;AACA7tH,EAAA6tH,SAAA5C,EAAAjrH,EAAAyrH,OAAAzrH,GACAA,EAAA1vP,QAAAw2B,EAAAx2B,QACA4/W,KACA1D,EAAAxsH,GACAA,EAAA1vP,MAAAw2B,EAAAx2B,OAEAjqD,KAAA+pa,gBAAAH,IACAC,GAAAC,IAAAnwH,EAAA6tH,YACAlC,EAAAtla,KAAA25S,EAAAysH,SACAzsH,EAAA6tH,SAAA5C,EAAAjrH,EAAAyrH,OAAAzrH,GAEA,CACA,SAAAyyF,GACA,MAAA50W,EAAAx3B,KAAA0ha,MAAAlqY,OACAwyY,EAAAxyY,EAAAyyY,iBAAAjqa,KAAA2ma,OACAuD,EAAA1yY,EAAA2yY,gBAAAnqa,KAAA6na,aAAAmC;AACAhqa,KAAAgC,QAAAw1B,EAAA4yY,eAAAF,EAAAlqa,KAAAqqa,cACArqa,KAAA4ma,SAAA5ma,KAAAgC,QAAAsoa,QACAtqa,KAAA0ma,gBAAA,EACA,CACA,KAAAxwZ,CAAAgJ,EAAAihI,GACA,MAAgBqlR,YAAA7rH,EAAA/sD,MAAA3/N,GAAmCjtB,MACnD0la,OAAgBA,EAAA8B,YAAqB7tH,EACrCgsH,EAAAD,EAAAhmZ;AACA,IAEApf,EAAAomK,EAAAioL,EAFA47E,EAAA,IAAArrZ,GAAAihI,IAAAlzH,EAAA1sB,QAAAo5S,EAAA6wH,QACA/5J,EAAAvxP,EAAA,GAAAy6R,EAAAysH,QAAAlnZ,EAAA;AAEA,QAAAlf,KAAA4ma,SACAjtH,EAAAysH,QAAAn5Y,EACA0sR,EAAA6wH,WACA77E,EAAA1hU;IACU,CAEV0hU,EADA0yE,EAAAlha,QAAA8sB,EAAA/N,IACAlf,KAAAyqa,eAAA9wH,EAAA1sR,EAAA/N,EAAAihI,GACckhR,EAAAxsT,SAAA5nF,EAAA/N,IACdlf,KAAA0qa,gBAAA/wH,EAAA1sR,EAAA/N,EAAAihI,GAEAngJ,KAAA2qa,mBAAAhxH,EAAA1sR,EAAA/N,EAAAihI;AAEA,MAAAyqR,EAAA,WAAAlkQ,EAAAi/P,IAAAl1J,GAAA/pG,EAAAi/P,GAAAl1J,EAAAk1J;AACA,IAAArla,EAAA,EAAuBA,EAAA6/I,IAAW7/I,EAClCq5S,EAAAysH,QAAA9la,EAAA4e,GAAAwnJ,EAAAioL,EAAAruV,GACAiqa,IACAK,MACAL,MAEA95J,EAAA/pG;AAGAizI,EAAA6wH,QAAAD,CACA,CACA/C,GACAlC,EAAAtla,KAAA2uV,EAEA,CACA,kBAAAg8E,CAAAhxH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAulR,OAAgBA,EAAAN,UAAmBzrH,EACnCgsH,EAAAD,EAAAhmZ,KACAkmZ,EAAAR,EAAA1lZ,KACAmrZ,EAAAnF,EAAAoF,YACAC,EAAArF,IAAAN,EACAz2E,EAAA,IAAA96U,MAAAssI;AACA,IAAA7/I,EAAA+ja,EAAAt7Z;AACA,IAAAzI,EAAA,EAAA+ja,EAAAlkR,EAAiC7/I,EAAA+ja,IAAU/ja,EAC3CyI,EAAAzI,EAAA4e,EACAyvU,EAAAruV,GAAA,CACAqla,IAAAoF,GAAArF,EAAAxvZ,MAAA20Z,EAAA9ha,MACA68Z,IAAAR,EAAAlvZ,MAAA+W,EAAAlkB;AAGA,OAAA4lV,CACA,CACA,cAAA87E,CAAA9wH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAwoR,OAAgBA,EAAAE,UAAmBlvH,EACnCg1C,EAAA,IAAA96U,MAAAssI;AACA,IAAA7/I,EAAA+ja,EAAAt7Z,EAAAqvJ;AACA,IAAA93J,EAAA,EAAA+ja,EAAAlkR,EAAiC7/I,EAAA+ja,IAAU/ja,EAC3CyI,EAAAzI,EAAA4e,EACAk5I,EAAAnrI,EAAAlkB,GACA4lV,EAAAruV,GAAA,CACA0G,EAAA2ha,EAAAzyZ,MAAAkiJ,EAAA,GAAArvJ,GACAyI,EAAAq3Z,EAAA3yZ,MAAAkiJ,EAAA,GAAArvJ;AAGA,OAAA4lV,CACA,CACA,eAAA+7E,CAAA/wH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAwoR,OAAgBA,EAAAE,UAAmBlvH,GACnCqxH,SAAgBA,EAAA,IAAAC,WAAA,KAAiCjra,KAAA4ma,SACjDj4E,EAAA,IAAA96U,MAAAssI;AACA,IAAA7/I,EAAA+ja,EAAAt7Z,EAAAqvJ;AACA,IAAA93J,EAAA,EAAA+ja,EAAAlkR,EAAiC7/I,EAAA+ja,IAAU/ja,EAC3CyI,EAAAzI,EAAA4e,EACAk5I,EAAAnrI,EAAAlkB,GACA4lV,EAAAruV,GAAA,CACA0G,EAAA2ha,EAAAzyZ,MAAAmrZ,EAAA6J,iBAAA9yQ,EAAA4yQ,GAAAjia,GACAyI,EAAAq3Z,EAAA3yZ,MAAAmrZ,EAAA6J,iBAAA9yQ,EAAA6yQ,GAAAlia;AAGA,OAAA4lV,CACA,CACA,SAAAw8E,CAAApia,GACA,OAAA/I,KAAAwla,YAAAY,QAAAr9Z,EACA,CACA,cAAAqia,CAAAria,GACA,OAAA/I,KAAAwla,YAAAv4Y,KAAAlkB,EACA,CACA,UAAAu7Z,CAAAp+Y,EAAAyoU,EAAA92U,GACA,MAAA6pZ,EAAA1ha,KAAA0ha,MACA/nH,EAAA35S,KAAAwla,YACA7ia,EAAAgsV,EAAAzoU,EAAAxG;AAKA,OAAA4kZ,EAJA,CACA5rX,KAAAurX,EAAAvC,MACA16W,OAAA2nS,EAAA82E,QAAAv/Y,EAAAxG,MAAAsmZ,eAEArja,EAAAg3S,EAAA5wS,MAAA,CACA8O,QAEA,CACA,qBAAAwzZ,CAAAnzV,EAAAhyD,EAAAyoU,EAAA1kS,GACA,MAAAqhX,EAAA38E,EAAAzoU,EAAAxG;AACA,IAAA/c,EAAA,OAAA2oa,EAAA3zU,IAAA2zU;AACA,MAAAtkX,EAAAiD,GAAA0kS,EAAA82E,QAAAv/Y,EAAAxG;AACAuqC,GAAAjD,IACAiD,EAAAjD,SACArkD,EAAA2ha,EAAAr6W,EAAAqhX,EAAAtra,KAAAwla,YAAAz8Z,QAEAmvE,EAAAr5D,IAAA9b,KAAA8b,IAAAq5D,EAAAr5D,IAAAlc,GACAu1E,EAAAp5D,IAAA/b,KAAA+b,IAAAo5D,EAAAp5D,IAAAnc,EACA,CACA,SAAA4oa,CAAArlZ,EAAAslZ,GACA,MAAA7xH,EAAA35S,KAAAwla,YACAY,EAAAzsH,EAAAysH,QACAmE,EAAA5wH,EAAA6wH,SAAAtkZ,IAAAyzR,EAAA+rH,OACArB,EAAA+B,EAAA7la,OACAkra,EAAAzra,KAAAkpa,eAAAhjZ,GACA+jC,EAlQA,EAAAuhX,EAAA7xH,EAAA+nH,IAAA8J,IAAA7xH,EAAAm+C,QAAAn+C,EAAA6tH,UAAA,CACA9uX,KAAAurX,EAAAvC,MACA16W,OAAA,MAFA,CAkQAwkX,EAAA7xH,EAAA35S,KAAA0ha,OACAxpV,EAAA,CACAr5D,IAAAvT,OAAAi9G,kBACAzpG,IAAAxT,OAAAk9G,oBAEgB3pG,IAAA6sZ,EAAA5sZ,IAAA6sZ,GA9VhB,SAAAzlZ,GACA,MAAArH,IAAYA,EAAAC,MAAA8sZ,aAAAC,cAAuC3lZ,EAAA4lZ;AACnD,OACAjtZ,IAAA+sZ,EAAA/sZ,EAAAvT,OAAAk9G,kBACA1pG,IAAA+sZ,EAAA/sZ,EAAAxT,OAAAi9G,kBAEA,CANA,CA8ViDkjT;AACjD,IAAAnra,EAAAquV;AACA,SAAAo9E,IACAp9E,EAAAy3E,EAAA9la;AACA,MAAAoka,EAAA/1E,EAAA88E,EAAA/rZ;AACA,OAAA2hZ,EAAAsD,eAAAh2E,EAAAzoU,EAAAxG,QAAAgsZ,EAAAhH,GAAAiH,EAAAjH,CACA,CACA,IAAApka,EAAA,EAAmBA,EAAA+ja,IACnB0H,MAGA/ra,KAAAqra,sBAAAnzV,EAAAhyD,EAAAyoU,EAAA1kS,IACAsgX,MAL6Bjqa,GAS7B,GAAAiqa,EACA,IAAAjqa,EAAA+ja,EAAA,EAA8B/ja,GAAA,IAAQA,EACtC,IAAAyra,IAAA,CAGA/ra,KAAAqra,sBAAAnzV,EAAAhyD,EAAAyoU,EAAA1kS;AACA,KAFA,CAKA,OAAAiuB,CACA,CACA,kBAAA8zV,CAAA9lZ,GACA,MAAAyoU,EAAA3uV,KAAAwla,YAAAY,QACAp/W,EAAA;AACA,IAAA1mD,EAAA+ja,EAAA1ha;AACA,IAAArC,EAAA,EAAA+ja,EAAA11E,EAAApuV,OAAyCD,EAAA+ja,IAAU/ja,EACnDqC,EAAAgsV,EAAAruV,GAAA4lB,EAAAxG,MACA2hZ,EAAAsD,eAAAhia,IACAqkD,EAAAp/C,KAAAjF;AAGA,OAAAqkD,CACA,CACA,cAAAilX,GACA,QACA,CACA,gBAAAC,CAAAnja,GACA,MAAA4wS,EAAA35S,KAAAwla,YACAE,EAAA/rH,EAAA+rH,OACAN,EAAAzrH,EAAAyrH,OACAz2E,EAAA3uV,KAAAmra,UAAApia;AACA,OACAy+J,MAAAk+P,EAAA,GAAAA,EAAAyG,iBAAAx9E,EAAA+2E,EAAAhmZ,OAAA,GACA/c,MAAAyia,EAAA,GAAAA,EAAA+G,iBAAAx9E,EAAAy2E,EAAA1lZ,OAAA,GAEA,CACA,OAAAtO,CAAAyG,GACA,MAAA8hS,EAAA35S,KAAAwla;AACAxla,KAAA2Q,OAAAkH,GAAA,WACA8hS,EAAAyyH,MAleA,SAAAzpa,GACA,IAAA7D,EAAA+B,EAAAoa,EAAAle;AASA,OARAska,EAAAxsT,SAAAlyG,IACA7D,EAAA6D,EAAAkL,IACAhN,EAAA8B,EAAAqL,MACAiN,EAAAtY,EAAAmL,OACA/Q,EAAA4F,EAAAiL,MAEA9O,EAAA+B,EAAAoa,EAAAle,EAAA4F,EAEA,CACAkL,IAAA/O,EACAkP,MAAAnN,EACAiN,OAAAmN,EACArN,KAAA7Q,EACA2S,cAAA/M,EAEA,CAjBA,CAkeA0+Z,EAAA4G,eAAAjoa,KAAAgC,QAAAqqa,KA/eA,SAAA1D,EAAAE,EAAA7E,GACA,QAAAA,EACA;AAEA,MAAAh9Z,EAAA+8Z,EAAA4E,EAAA3E,GACAxyZ,EAAAuyZ,EAAA8E,EAAA7E;AACA,OACAn2Z,IAAA2D,EAAA2N,IACAnR,MAAAhH,EAAAmY,IACArR,OAAA0D,EAAA0N,MACAtR,KAAA5G,EAAAkY,MAEA,CAZA,CA+eAy6R,EAAAgvH,OAAAhvH,EAAAkvH,OAAA7oa,KAAAisa,mBACA,CACA,MAAAt7Z,CAAAkH,GAAA,CACA,IAAAkqZ,GACA,MAAAtnQ,EAAAz6J,KAAAyma,KACA/E,EAAA1ha,KAAA0ha,MACA/nH,EAAA35S,KAAAwla,YACArjZ,EAAAw3R,EAAA1sR,MAAA,GACAwyO,EAAAiiK,EAAA4K,UACA9sQ,EAAA,GACAtgJ,EAAAlf,KAAA+ma,YAAA,EACA5mR,EAAAngJ,KAAAgna,YAAA7kZ,EAAA5hB,OAAA2e,EACAqtZ,EAAAvsa,KAAAgC,QAAAuqa;AACA,IAAAjsa;AAIA,IAHAq5S,EAAAl5N,SACAk5N,EAAAl5N,QAAAshV,KAAAtnQ,EAAAglG,EAAAvgP,EAAAihI,GAEA7/I,EAAA4e,EAAuB5e,EAAA4e,EAAAihI,IAAmB7/I,EAAA,CAC1C,MAAAoiB,EAAAP,EAAA7hB;AACAoiB,EAAAo1U,SAGAp1U,EAAA88I,QAAA+sQ,EACA/sQ,EAAA53J,KAAA8a,GAEAA,EAAAq/Y,KAAAtnQ,EAAAglG,GAEA,CACA,IAAAn/P,EAAA,EAAmBA,EAAAk/J,EAAAj/J,SAAmBD,EACtCk/J,EAAAl/J,GAAAyha,KAAAtnQ,EAAAglG,EAEA,CACA,QAAA+sK,CAAAzja,EAAAy2J,GACA,MAAA3nJ,EAAA2nJ,EAAA;AACA,YAAA/tI,IAAA1oB,GAAA/I,KAAAwla,YAAA/kV,QAAAzgF,KAAAysa,6BAAA50Z,GAAA7X,KAAA0sa,0BAAA3ja,GAAA,EAAA8O,EACA,CACA,UAAAwyZ,CAAAtha,EAAAy2J,EAAA3nJ,GACA,MAAA4oE,EAAAzgF,KAAA6na;AACA,IAAAjvY;AACA,GAAA7vB,GAAA,GAAAA,EAAA/I,KAAAwla,YAAAv4Y,KAAA1sB,OAAA,CACA,MAAAmiB,EAAA1iB,KAAAwla,YAAAv4Y,KAAAlkB;AACA6vB,EAAAlW,EAAAykZ,WAAAzkZ,EAAAykZ,SAvYA,SAAAr/Y,EAAA/e,EAAA2Z,GACA,OAAA2+Y,EAAAzjH,cAAA91R,EAAA,CACA03I,UACAmtQ,UAAA5ja,EACA4lV,YAAAl9T,EACAs9K,SAAAt9K,EACA/O,UACA3Z,QACA8O,KAAA,UACA/T,KAAA,QAEA,CAXA,CAuYA9D,KAAAqqa,aAAAtha,EAAA2Z,IACAkW,EAAA+1T,OAAA3uV,KAAAmra,UAAApia,GACA6vB,EAAAm2K,IAAAtuH,EAAAxzD,KAAAlkB,GACA6vB,EAAA7vB,MAAA6vB,EAAA+zY,UAAA5ja,CACA,MACA6vB,EAAA54B,KAAAmna,WAAAnna,KAAAmna,SAtZA,SAAAr/Y,EAAA/e,GACA,OAAAs4Z,EAAAzjH,cAAA91R,EAAA,CACA03I,UACA/+E,aAAAhvD,EACAgzY,aAAA17Z,EACAA,QACA8O,KAAA,UACA/T,KAAA,WAEA,CATA,CAsZA9D,KAAA0ha,MAAA2I,aAAArqa,KAAA+I,QACA6vB,EAAA6nD,UACA7nD,EAAA7vB,MAAA6vB,EAAA6rY,aAAAzka,KAAA+I;AAIA,OAFA6vB,EAAA4mI,WACA5mI,EAAA/gB,OACA+gB,CACA,CACA,4BAAA6zY,CAAA50Z,GACA,OAAA7X,KAAA4sa,uBAAA5sa,KAAAqna,mBAAAroX,GAAAnnC,EACA,CACA,yBAAA60Z,CAAA3ja,EAAA8O,GACA,OAAA7X,KAAA4sa,uBAAA5sa,KAAAsna,gBAAAtoX,GAAAnnC,EAAA9O,EACA,CACA,sBAAA6ja,CAAAC,EAAAh1Z,EAAA,UAAA9O,GACA,MAAAy2J,EAAA,WAAA3nJ,EACAuU,EAAApsB,KAAA0ma,gBACAnuY,EAAAs0Y,EAAA,IAAAh1Z,EACA28I,EAAApoI,EAAAmM,GACAu0Y,EAAA9sa,KAAAina,qBAAA5F,EAAA0L,QAAAhka;AACA,GAAAyrJ,EACA,OAAA8xQ,EAAA9xQ,EAAAs4Q;AAEA,MAAAt1Y,EAAAx3B,KAAA0ha,MAAAlqY,OACAwyY,EAAAxyY,EAAAw1Y,wBAAAhta,KAAA2ma,MAAAkG,GACAI,EAAAztQ,EAAA,CACA,GAAeqtQ,SACf,QACAA,EACA,IACA,CACAA,EACA,IAEA3C,EAAA1yY,EAAA2yY,gBAAAnqa,KAAA6na,aAAAmC,GACA1jO,EAAAv+K,OAAA2wB,KAAA2oX,EAAA72W,SAAAroC,SAAA0qZ,IAEA7lX,EAAAxvB,EAAA01Y,oBAAAhD,EAAA5jO,EADA,IAAAtmM,KAAAqqa,WAAAtha,EAAAy2J,EAAA3nJ,GACAo1Z;AAKA,OAJAjmX,EAAA08W,UACA18W,EAAA08W,QAAAoJ,EACA1gZ,EAAAmM,GAAAxQ,OAAA4jE,OAAA26U,EAAAt/W,EAAA8lX,KAEA9lX,CACA,CACA,kBAAAmmX,CAAApka,EAAA8oK,EAAArS,GACA,MAAAkiQ,EAAA1ha,KAAA0ha,MACAt1Y,EAAApsB,KAAA0ma,gBACAnuY,EAAA,aAAsCs5I,IACtCrd,EAAApoI,EAAAmM;AACA,GAAAi8H,EACA,OAAAA;AAEA,IAAAxyJ;AACA,QAAA0/Z,EAAA1/Z,QAAAuha,UAAA,CACA,MAAA/rY,EAAAx3B,KAAA0ha,MAAAlqY,OACAwyY,EAAAxyY,EAAA41Y,0BAAApta,KAAA2ma,MAAA90P,GACAq4P,EAAA1yY,EAAA2yY,gBAAAnqa,KAAA6na,aAAAmC;AACAhoa,EAAAw1B,EAAA4yY,eAAAF,EAAAlqa,KAAAqqa,WAAAtha,EAAAy2J,EAAAqS,GACA,CACA,MAAA+xP,EAAA,IAAAT,EAAAzB,EAAA1/Z,KAAA4ha;AAIA,OAHA5ha,KAAAqra,aACAjhZ,EAAAmM,GAAAxQ,OAAA4jE,OAAAi4U,IAEAA,CACA,CACA,gBAAA0J,CAAAtra,GACA,GAAAA,EAAA0ha,QAGA,OAAA1ja,KAAA8ma,iBAAA9ma,KAAA8ma,eAAA/+Y,OAAA4rD,OAAA,GAA6E3xE,GAC7E,CACA,cAAAura,CAAA11Z,EAAA21Z,GACA,OAAAA,GAAAnH,EAAAxuZ,IAAA7X,KAAA0ha,MAAA+L,mBACA,CACA,iBAAAC,CAAAxuZ,EAAArH,GACA,MAAA81Z,EAAA3ta,KAAA0sa,0BAAAxtZ,EAAArH,GACA+1Z,EAAA5ta,KAAA8ma,eACA0G,EAAAxta,KAAAsta,iBAAAK,GACAJ,EAAAvta,KAAAuta,eAAA11Z,EAAA21Z,QAAAI;AAEA,OADA5ta,KAAA6ta,oBAAAL,EAAA31Z,EAAA81Z,GACA,CACAH,gBACAD,iBAEA,CACA,aAAAO,CAAAprZ,EAAA3Z,EAAAuN,EAAAuB,GACAwuZ,EAAAxuZ,GACAkQ,OAAA4rD,OAAAjxD,EAAApM,GAEAtW,KAAAmta,mBAAApka,EAAA8O,GAAAlH,OAAA+R,EAAApM,EAEA,CACA,mBAAAu3Z,CAAAL,EAAA31Z,EAAAqyG,GACAsjT,IAAAnH,EAAAxuZ,IACA7X,KAAAmta,wBAAA17Y,EAAA5Z,GAAAlH,OAAA68Z,EAAAtjT,EAEA,CACA,SAAA6jT,CAAArrZ,EAAA3Z,EAAA8O,EAAA2nJ,GACA98I,EAAA88I;AACA,MAAAx9J,EAAAhC,KAAAwsa,SAAAzja,EAAAy2J;AACAx/J,KAAAmta,mBAAApka,EAAA8O,EAAA2nJ,GAAA7uJ,OAAA+R,EAAA,CACA1gB,SAAAw9J,GAAAx/J,KAAAsta,iBAAAtra,OAEA,CACA,gBAAAgsa,CAAAtrZ,EAAA+hZ,EAAA17Z,GACA/I,KAAA+ta,UAAArrZ,EAAA3Z,EAAA,YACA,CACA,aAAAkla,CAAAvrZ,EAAA+hZ,EAAA17Z,GACA/I,KAAA+ta,UAAArrZ,EAAA3Z,EAAA,YACA,CACA,wBAAAmla,GACA,MAAAxrZ,EAAA1iB,KAAAwla,YAAA/kV;AACA/9D,GACA1iB,KAAA+ta,UAAArrZ,OAAA+O,EAAA,YAEA,CACA,qBAAA08Y,GACA,MAAAzrZ,EAAA1iB,KAAAwla,YAAA/kV;AACA/9D,GACA1iB,KAAA+ta,UAAArrZ,OAAA+O,EAAA,YAEA,CACA,eAAAs4Y,CAAAH,GACA,MAAA38Y,EAAAjtB,KAAA4sP,MACAzqO,EAAAniB,KAAAwla,YAAAv4Y;AACA,UAAA+mD,EAAAo6V,EAAAC,KAAArua,KAAAona,UACApna,KAAAg0E,GAAAo6V,EAAAC;AAEArua,KAAAona,UAAA;AACA,MAAAkH,EAAAnsZ,EAAA5hB,OACAgua,EAAAthZ,EAAA1sB,OACA4/I,EAAAp9I,KAAA8b,IAAA0vZ,EAAAD;AACAnuR,GACAngJ,KAAAkW,MAAA,EAAAiqI,GAEAouR,EAAAD,EACAtua,KAAAwua,gBAAAF,EAAAC,EAAAD,EAAA1E,GACU2E,EAAAD,GACVtua,KAAAyua,gBAAAF,EAAAD,EAAAC,EAEA,CACA,eAAAC,CAAAtvZ,EAAAihI,EAAAypR,MACA,MAAAjwH,EAAA35S,KAAAwla,YACAv4Y,EAAA0sR,EAAA1sR,KACA9N,EAAAD,EAAAihI;AACA,IAAA7/I;AACA,MAAA47P,EAAAslD,IAEA,IADAA,EAAAjhT,QAAA4/I,EACA7/I,EAAAkhT,EAAAjhT,OAAA,EAAoCD,GAAA6e,EAAU7e,IAC9CkhT,EAAAlhT,GAAAkhT,EAAAlhT,EAAA6/I;AAIA,IADA+7G,EAAAjvO,GACA3sB,EAAA4e,EAAuB5e,EAAA6e,IAAS7e,EAChC2sB,EAAA3sB,GAAA,IAAAN,KAAAsna;AAEAtna,KAAA4ma,UACA1qK,EAAAy9C,EAAAysH,SAEApma,KAAAkW,MAAAgJ,EAAAihI,GACAypR,GACA5pa,KAAA0ua,eAAAzhZ,EAAA/N,EAAAihI,EAAA,QAEA,CACA,cAAAuuR,CAAAhsZ,EAAAxD,EAAAihI,EAAAtoI,GAAA,CACA,eAAA42Z,CAAAvvZ,EAAAihI,GACA,MAAAw5J,EAAA35S,KAAAwla;AACA,GAAAxla,KAAA4ma,SAAA,CACA,MAAA3mP,EAAA05H,EAAAysH,QAAAt8Z,OAAAoV,EAAAihI;AACAw5J,EAAA6tH,UACArB,EAAAxsH,EAAA15H,EAEA,CACA05H,EAAA1sR,KAAAnjB,OAAAoV,EAAAihI,EACA,CACA,KAAAwuR,CAAAj2Y,GACA,GAAA14B,KAAA4ma,SACA5ma,KAAAona,UAAAx/Z,KAAA8wB;IACU,CACV,MAAAs7C,EAAAo6V,EAAAC,GAAA31Y;AACA14B,KAAAg0E,GAAAo6V,EAAAC,EACA,CACArua,KAAA0ha,MAAAkN,aAAAhna,KAAA,CACA5H,KAAA+I,SACA2vB,GAEA,CACA,WAAAm2Y,GACA,MAAA1uR,EAAAvtI,UAAArS;AACAP,KAAA2ua,MAAA,CACA,kBACA3ua,KAAA6na,aAAA56Y,KAAA1sB,OAAA4/I,EACAA,GAEA,CACA,UAAA2uR,GACA9ua,KAAA2ua,MAAA,CACA,kBACA3ua,KAAAwla,YAAAv4Y,KAAA1sB,OAAA,EACA,GAEA,CACA,YAAAwua,GACA/ua,KAAA2ua,MAAA,CACA,kBACA,EACA,GAEA,CACA,aAAAK,CAAA9vZ,EAAAihI,GACAA,GACAngJ,KAAA2ua,MAAA,CACA,kBACAzvZ,EACAihI;AAGA,MAAA8uR,EAAAr8Z,UAAArS,OAAA;AACA0ua,GACAjva,KAAA2ua,MAAA,CACA,kBACAzvZ,EACA+vZ,GAGA,CACA,cAAAC,GACAlva,KAAA2ua,MAAA,CACA,kBACA,EACA/7Z,UAAArS,QAEA,EAcA,SAAA4ua,EAAAx1H,GACA,MAAAzzR,EAAAyzR,EAAA+rH,OACA1+W,EAbA,SAAA9gC,EAAApiB,GACA,IAAAoiB,EAAAkpZ,OAAAC,KAAA,CACA,MAAAC,EAAAppZ,EAAAm/Y,wBAAAvha;AACA,IAAAkjD,EAAA;AACA,QAAA1mD,EAAA,EAAA+ja,EAAAiL,EAAA/ua,OAAmDD,EAAA+ja,EAAU/ja,IAC7D0mD,IAAAv0C,OAAA68Z,EAAAhva,GAAAila,WAAAyG,mBAAA9lZ;AAEAA,EAAAkpZ,OAAAC,KAAAhO,EAAAkO,aAAAvoX,EAAA70B,KAAA,CAAArxB,EAAAma,IAAAna,EAAAma,GACA,CACA,OAAAiL,EAAAkpZ,OAAAC,IACA,CAVA,CAaAnpZ,EAAAyzR,EAAA71S;AACA,IACAxD,EAAA+ja,EAAAp4G,EAAAx7C,EADA5xP,EAAAqH,EAAAspZ;AAEA,MAAAC,EAAA,KACA,QAAAxjH,IAAA,QAAAA,IAGAo1G,EAAA0L,QAAAt8J,KACA5xP,EAAA9b,KAAA8b,MAAA9b,KAAAqN,IAAA67S,EAAAx7C,IAAA5xP,IAEA4xP,EAAAw7C;AAEA,IAAA3rT,EAAA,EAAA+ja,EAAAr9W,EAAAzmD,OAAqCD,EAAA+ja,IAAU/ja,EAC/C2rT,EAAA/lS,EAAAwpZ,iBAAA1oX,EAAA1mD,IACAmva;AAGA,IADAh/J,OAAAh/O,EACAnxB,EAAA,EAAA+ja,EAAAn+Y,EAAAypZ,MAAApva,OAA0CD,EAAA+ja,IAAU/ja,EACpD2rT,EAAA/lS,EAAA0pZ,gBAAAtva,GACAmva;AAEA,OAAA5wZ,CACA,CA0DA,SAAAgxZ,EAAAnzX,EAAA07G,EAAAgtQ,EAAA9ka,GAMA,OALA+ga,EAAAlha,QAAAu8C,GAtBA,SAAAA,EAAA07G,EAAAgtQ,EAAA9ka,GACA,MAAAwva,EAAA1K,EAAAlvZ,MAAAwmC,EAAA,GAAAp8C,GACAyva,EAAA3K,EAAAlvZ,MAAAwmC,EAAA,GAAAp8C,GACAue,EAAA9b,KAAA8b,IAAAixZ,EAAAC,GACAjxZ,EAAA/b,KAAA+b,IAAAgxZ,EAAAC;AACA,IAAAC,EAAAnxZ,EACAoxZ,EAAAnxZ;AACA/b,KAAAqN,IAAAyO,GAAA9b,KAAAqN,IAAA0O,KACAkxZ,EAAAlxZ,EACAmxZ,EAAApxZ,GAEAu5I,EAAAgtQ,EAAA1lZ,MAAAuwZ,EACA73Q,EAAA83Q,QAAA,CACAF,WACAC,SACA/wZ,MAAA4wZ,EACA3wZ,IAAA4wZ,EACAlxZ,MACAC,MAEA,CApBA,CAuBA49B,EAAA07G,EAAAgtQ,EAAA9ka,GAEA83J,EAAAgtQ,EAAA1lZ,MAAA0lZ,EAAAlvZ,MAAAwmC,EAAAp8C,GAEA83J,CACA,CACA,SAAA+3Q,EAAAx2H,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAulR,EAAA/rH,EAAA+rH,OACAN,EAAAzrH,EAAAyrH,OACAyF,EAAAnF,EAAAoF,YACAC,EAAArF,IAAAN,EACAz2E,EAAA;AACA,IAAAruV,EAAA+ja,EAAAjsQ,EAAA17G;AACA,IAAAp8C,EAAA4e,EAAAmlZ,EAAAnlZ,EAAAihI,EAAyC7/I,EAAA+ja,IAAU/ja,EACnDo8C,EAAAzvB,EAAA3sB,GACA83J,EAAA,GACAA,EAAAstQ,EAAAhmZ,MAAAqrZ,GAAArF,EAAAxvZ,MAAA20Z,EAAAvqa,MACAquV,EAAA/mV,KAAAioa,EAAAnzX,EAAA07G,EAAAgtQ,EAAA9ka;AAEA,OAAAquV,CACA,CACA,SAAAyhF,EAAAC,GACA,OAAAA,QAAA5+Y,IAAA4+Y,EAAAL,eAAAv+Y,IAAA4+Y,EAAAJ,MACA,CAiCA,SAAAK,EAAAh6Z,EAAAtU,EAAAioD,EAAAlhD,GACA,IAAA4kX,EAAA3rX,EAAAuua;AACA,MAAA3oQ,EAAA;AACA,IAAA+lN,EAEA,YADAr3W,EAAAi6Z,cAAA3oQ;AAGA,QAAA+lN,EAOA,YANAr3W,EAAAi6Z,cAAA,CACA1ia,OACAG,SACAF,UACAF;AAIA,MAAAsR,MAAYA,EAAAC,MAAAhO,UAAAtD,MAAAC,UA1CZ,SAAAwI,GACA,IAAAnF,EAAA+N,EAAAC,EAAAtR,EAAAC;AAiBA,OAhBAwI,EAAAgkJ,YACAnpJ,EAAAmF,EAAAq5Q,KAAAr5Q,EAAAtP,EACAkY,EAAA,OACAC,EAAA,UAEAhO,EAAAmF,EAAAq5Q,KAAAr5Q,EAAA9E,EACA0N,EAAA,SACAC,EAAA,OAEAhO,GACAtD,EAAA,MACAC,EAAA,UAEAD,EAAA,QACAC,EAAA,OAEA,CACAoR,QACAC,MACAhO,UACAtD,MACAC,SAEA,CAzBA,CA0CoDwI;AACpD,WAAAq3W,GAAA1jU,IACA3zC,EAAAk6Z,uBACAvmX,EAAA0+H,MAAA,KAAA5/K,EACA4kX,EAAA9/W,GACUo8C,EAAA87W,SAAA,KAAAh9Z,EACV4kX,EAAA7/W,GAEA85J,EAAA6oQ,EAAA3ia,EAAAoR,EAAAC,EAAAhO,OACAw8W,EAAA9/W,IAGA+5J,EAAA6oQ,EAAA9iD,EAAAzuW,EAAAC,EAAAhO,OACAmF,EAAAi6Z,cAAA3oQ,CACA,CACA,SAAA6oQ,EAAA9iD,EAAA7sX,EAAAma,EAAA9J,GASA,IAAAm2S,EAAAuE,EAAAD;AAFA,OANAz6S,GAQAy6S,EAPA3wS,EACA0yW,EAAA+iD,EADA/iD,GAOArmE,EAPAqmE,MAOA9hE,EAPA/qT,GAQA8qT,EAAAtE,IAAAsE,EAAAC,EAAAvE,EAPArsS,EAAAna,IAEA6sX,EAAA+iD,EAAA/iD,EAAA7sX,EAAAma,GAEA0yW,CACA,CAIA,SAAA+iD,EAAAp/Z,EAAA4N,EAAAC,GACA,gBAAA7N,EAAA4N,EAAA,QAAA5N,EAAA6N,EAAA7N,CACA,CACA,SAAAq/Z,EAAAr6Z,GAAAs6Z,cAAwCA,GAAgBxhZ,GACxD9Y,EAAAs6Z,cAAA,SAAAA,EAAA,IAAAxhZ,EAAA,MAAAwhZ,CACA,CACA,MAAAC,UAAAtK,EACAC,UAAA;AACAA,gBAAA,CACAa,sBACAC,gBAAA,MACAwJ,mBAAA,GACAC,cAAA,GACAC,WACApN,WAAA,CACAqN,QAAA,CACAnta,KAAA,SACAwS,WAAA,CACA,IACA,IACA,OACA,QACA;AAKAkwZ,iBAAA,CACAN,OAAA,CACAgL,QAAA,CACApta,KAAA,WACAka,UACA+4O,KAAA,CACA/4O,YAGAmzZ,QAAA,CACArta,KAAA,SACAsta;AAIA,kBAAAzG,CAAAhxH,EAAA1sR,EAAA/N,EAAAihI,GACA,OAAAgwR,EAAAx2H,EAAA1sR,EAAA/N,EAAAihI,EACA,CACA,cAAAsqR,CAAA9wH,EAAA1sR,EAAA/N,EAAAihI,GACA,OAAAgwR,EAAAx2H,EAAA1sR,EAAA/N,EAAAihI,EACA,CACA,eAAAuqR,CAAA/wH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAulR,OAAgBA,EAAAN,UAAmBzrH,GACnCqxH,SAAgBA,EAAA,IAAAC,WAAA,KAAiCjra,KAAA4ma,SACjD0C,EAAA,MAAA5D,EAAAhmZ,KAAAsrZ,EAAAC,EACA1B,EAAA,MAAAnE,EAAA1lZ,KAAAsrZ,EAAAC,EACAt8E,EAAA;AACA,IAAAruV,EAAA+ja,EAAAjsQ,EAAAvmH;AACA,IAAAvxC,EAAA4e,EAAAmlZ,EAAAnlZ,EAAAihI,EAA6C7/I,EAAA+ja,IAAU/ja,EACvDuxC,EAAA5kB,EAAA3sB,GACA83J,EAAA,GACAA,EAAAstQ,EAAAhmZ,MAAAgmZ,EAAAxvZ,MAAAmrZ,EAAA6J,iBAAAr5X,EAAAy3X,GAAAhpa,GACAquV,EAAA/mV,KAAAioa,EAAAxO,EAAA6J,iBAAAr5X,EAAA03X,GAAAnxQ,EAAAgtQ,EAAA9ka;AAEA,OAAAquV,CACA,CACA,qBAAA08E,CAAAnzV,EAAAhyD,EAAAyoU,EAAA1kS,GACA+4G,MAAAqoQ,sBAAAnzV,EAAAhyD,EAAAyoU,EAAA1kS;AACA,MAAAomX,EAAA1hF,EAAAuhF;AACAG,GAAAnqZ,IAAAlmB,KAAAwla,YAAAJ,SACAltV,EAAAr5D,IAAA9b,KAAA8b,IAAAq5D,EAAAr5D,IAAAwxZ,EAAAxxZ,KACAq5D,EAAAp5D,IAAA/b,KAAA+b,IAAAo5D,EAAAp5D,IAAAuxZ,EAAAvxZ,KAEA,CACA,cAAAmtZ,GACA,QACA,CACA,gBAAAC,CAAAnja,GACA,MAAA4wS,EAAA35S,KAAAwla,aACAE,OAAgBA,EAAAN,UAAmBzrH,EACnCg1C,EAAA3uV,KAAAmra,UAAApia,GACAsna,EAAA1hF,EAAAuhF,QACAvta,EAAAyta,EAAAC,GAAA,IAAAA,EAAAnxZ,MAAA,KAAAmxZ,EAAAlxZ,IAAA,OAAAimZ,EAAA+G,iBAAAx9E,EAAAy2E,EAAA1lZ;AACA,OACA8nJ,MAAA,GAAAk+P,EAAAyG,iBAAAx9E,EAAA+2E,EAAAhmZ,OACA/c,QAEA,CACA,UAAA5C,GACAC,KAAAina,uBACAjkQ,MAAAjjK,aACAC,KAAAwla,YACAv7W,MAAAjqD,KAAA6na,aAAA59W,KACA,CACA,MAAAt5C,CAAAkH,GACA,MAAA8hS,EAAA35S,KAAAwla;AACAxla,KAAA0ua,eAAA/0H,EAAA1sR,KAAA,EAAA0sR,EAAA1sR,KAAA1sB,OAAAsX,EACA,CACA,cAAA62Z,CAAA2C,EAAAnyZ,EAAAihI,EAAAtoI,GACA,MAAA+Z,EAAA,UAAA/Z,GACA9O,MAAgBA,EAAAy8Z,aAAAJ,OAAuBA,IAAapla,KACpD2vR,EAAAy1I,EAAAkM,eACAh3Q,EAAA8qQ,EAAA7zD,eACAggE,EAAAvxa,KAAAwxa,aACAhE,cAAgBA,EAAAD,kBAAkCvta,KAAA0ta,kBAAAxuZ,EAAArH;AAClD,QAAAvX,EAAA4e,EAA2B5e,EAAA4e,EAAAihI,EAAmB7/I,IAAA,CAC9C,MAAAquV,EAAA3uV,KAAAmra,UAAA7qa,GACAmxa,EAAA7/Y,GAAAyvY,EAAAqQ,cAAA/iF,EAAAy2E,EAAA1lZ,OAAA,CACAiwQ,OACAv6M,KAAAu6M,GACc3vR,KAAA2xa,yBAAArxa,GACdsxa,EAAA5xa,KAAA6xa,yBAAAvxa,EAAAixa,GACAtnX,GAAA0kS,EAAA82E,SAAA,IAA+CL,EAAA1lZ,MAC/CpJ,EAAA,CACAgkJ,aACAq1H,KAAA8hJ,EAAA9hJ,KACA6gJ,oBAAAvmX,GAAAmmX,EAAAzhF,EAAAuhF,UAAAnna,IAAAkhD,EAAA0+H,MAAA5/K,IAAAkhD,EAAA87W,QACA/+Z,EAAAszJ,EAAAm3Q,EAAAr8V,KAAAw8V,EAAA/ga,OACAW,EAAA8oJ,EAAAs3Q,EAAA/ga,OAAA4ga,EAAAr8V,KACA9zD,OAAAg5I,EAAAs3Q,EAAAvzZ,KAAAtb,KAAAqN,IAAAqha,EAAApzZ,MACAtQ,MAAAusJ,EAAAv3J,KAAAqN,IAAAqha,EAAApzZ,MAAAuzZ,EAAAvzZ;AAEAkvZ,IACAj3Z,EAAAtU,QAAAwra,GAAAxta,KAAA0sa,0BAAApsa,EAAA+wa,EAAA/wa,GAAAk/J,OAAA,SAAA3nJ;AAEA,MAAA7V,EAAAsU,EAAAtU,SAAAqva,EAAA/wa,GAAA0B;AACAsua,EAAAh6Z,EAAAtU,EAAAioD,EAAAlhD,GACA4na,EAAAr6Z,EAAAtU,EAAAuva,EAAAniZ,OACApvB,KAAA8ta,cAAAuD,EAAA/wa,KAAAgW,EAAAuB,EACA,CACA,CACA,UAAAi6Z,CAAA5hP,EAAAy8O,GACA,MAAAjH,OAAgBA,GAAU1la,KAAAwla,YAC1BrB,EAAAuB,EAAAL,wBAAArla,KAAA2ma,OAAApgZ,OAAAozR,KAAA4rH,WAAAvja,QAAAgva,SACAnM,EAAAa,EAAA1ja,QAAA6ia,QACAE,EAAA,GACAgN,EAAA/xa,KAAAwla,YAAAD,WAAA4F,UAAAwB,GACAqF,EAAAD,KAAArM,EAAAhmZ,MACAuyZ,EAAAt4H,IACA,MAAAg1C,EAAAh1C,EAAAysH,QAAA/vY,KAAA+hI,KAAAstQ,EAAAhmZ,QAAAsyZ,GACA7+X,EAAAw7S,KAAAh1C,EAAAyrH,OAAA1lZ;AACA,GAAA2hZ,EAAAqQ,cAAAv+X,IAAA8nC,MAAA9nC,GACA;AAGA,UAAAwmQ,KAAAwqH,EACA,SAAA1yY,IAAAk7Y,IAAAsF,EAAAt4H,YAGAkrH,IAAA,IAAAE,EAAAl7Z,QAAA8vS,EAAA1vP,aAAAx4B,IAAAozY,QAAApzY,IAAAkoR,EAAA1vP,QACA86W,EAAAn9Z,KAAA+xS,EAAA1vP,OAEA0vP,EAAA5wS,QAAAmnL,GACA;AAMA,OAHA60O,EAAAxka,QACAwka,EAAAn9Z,UAAA6pB,GAEAszY,CACA,CACA,cAAAmN,CAAAnpa,GACA,OAAA/I,KAAA8xa,gBAAArgZ,EAAA1oB,GAAAxI,MACA,CACA,aAAA4xa,GACA,OAAAnya,KAAAoya,WAAA7xa,MACA,CACA,2BAAA8xa,GACA,MAAAnM,EAAAlma,KAAA0ha,MAAAwE,OACAoM,EAAAtya,KAAA0ha,MAAA1/Z,QAAAsma;AACA,OAAAvgZ,OAAA2wB,KAAAwtX,GAAA3/Y,OAAA0S,GAAAitY,EAAAjtY,GAAAvZ,OAAA4yZ,GAAAx+Z,OACA,CACA,QAAAs+Z,GACA,MAAA1yZ,EAAA,GACA6yZ,EAAAvya,KAAAqya;AACA,UAAA5xV,KAAAzgF,KAAA0ha,MAAAz0Y,KAAA87Y,SACArpZ,EAAA2hZ,EAAA4G,eAAA,MAAAjoa,KAAA0ha,MAAA1/Z,QAAAsma,UAAA7nV,EAAAunV,QAAAvnV,EAAA0nV,QAAAoK;AAEA,OAAAxqZ,OAAA2wB,KAAAh5B,EACA,CACA,cAAA8yZ,CAAA/N,EAAAr8Z,EAAAuka,GACA,MAAA5H,EAAA/ka,KAAA8xa,WAAArN,EAAAkI,GACA5ja,OAAA0oB,IAAArpB,EAAA28Z,EAAAl7Z,QAAAzB,IAAA;AACA,WAAAW,EAAAg8Z,EAAAxka,OAAA,EAAAwI,CACA,CACA,SAAAyoa,GACA,MAAAv4X,EAAAj5C,KAAAgC,QACA23S,EAAA35S,KAAAwla,YACAE,EAAA/rH,EAAA+rH,OACA+M,EAAA;AACA,IAAAnya,EAAA+ja;AACA,IAAA/ja,EAAA,EAAA+ja,EAAA1qH,EAAA1sR,KAAA1sB,OAA4CD,EAAA+ja,IAAU/ja,EACtDmya,EAAA7qa,KAAA89Z,EAAAgK,iBAAA1va,KAAAmra,UAAA7qa,GAAAola,EAAAhmZ,MAAApf;AAEA,MAAAoya,EAAAz5X,EAAAy5X;AAEA,OACA7zZ,IAFA6zZ,GAAAvD,EAAAx1H,GAGA84H,SACAvzZ,MAAAwmZ,EAAAiN,YACAxzZ,IAAAumZ,EAAAkN,UACAC,WAAA7ya,KAAAkya,iBACAhsZ,MAAAw/Y,EACAsL,QAAA/3X,EAAA+3X,QACA5hZ,MAAAsjZ,EAAA,EAAAz5X,EAAA63X,mBAAA73X,EAAA83X,cAEA,CACA,wBAAAY,CAAA5oa,GACA,MAAgBy8Z,aAAAJ,OAAeA,EAAAoC,WAAAz+Z,MAAA07Z,GAA2Czia,SAAa2tR,KAAAmjJ,EAAAC,iBAAqC/ya,KAC5Hgza,EAAAF,GAAA,EACAnkF,EAAA3uV,KAAAmra,UAAApia,GACAsna,EAAA1hF,EAAAuhF,QACA5vZ,EAAA8vZ,EAAAC;AACA,IAGAj7V,EAAA/2D,EAHA1b,EAAAgsV,EAAAy2E,EAAA1lZ,MACAR,EAAA,EACA3e,EAAAina,EAAAxna,KAAAska,WAAAc,EAAAz2E,EAAA64E,GAAA7ka;AAEApC,IAAAoC,IACAuc,EAAA3e,EAAAoC,EACApC,EAAAoC,GAEA2d,IACA3d,EAAA0ta,EAAAL,SACAzva,EAAA8va,EAAAJ,OAAAI,EAAAL,SACA,IAAArta,GAAA0+Z,EAAAtpX,KAAAp1C,KAAA0+Z,EAAAtpX,KAAAs4X,EAAAJ,UACA/wZ,EAAA,GAEAA,GAAAvc;AAEA,MAAAmta,EAAAzO,EAAAqQ,cAAAoB,IAAAxyZ,EAAApB,EAAA4zZ;AACA,IAAAnjJ,EAAAy1I,EAAAsK,iBAAAI;AAOA,GALA16V,EADAp1E,KAAA0ha,MAAAuR,kBAAAlqa,GACAq8Z,EAAAsK,iBAAAxwZ,EAAA3e,GAEAovR,EAEAtxQ,EAAA+2D,EAAAu6M,EACA5sR,KAAAqN,IAAAiO,GAAA00Z,EAAA,CACA10Z,EAtTA,SAAAA,EAAA+mZ,EAAA4N,GACA,WAAA30Z,EACAgjZ,EAAAtpX,KAAA15B,IAEA+mZ,EAAA7zD,eAAA,OAAA6zD,EAAAvmZ,KAAAm0Z,EAAA,KACA,CALA,CAsTA30Z,EAAA+mZ,EAAA4N,GAAAD,EACApwa,IAAAqwa,IACArjJ,GAAAtxQ,EAAA;AAEA,MAAA60Z,EAAA9N,EAAA+N,mBAAA,GACAC,EAAAhO,EAAA+N,mBAAA,GACAt0Z,EAAA9b,KAAA8b,IAAAq0Z,EAAAE,GACAt0Z,EAAA/b,KAAA+b,IAAAo0Z,EAAAE;AACAzjJ,EAAA5sR,KAAA+b,IAAA/b,KAAA8b,IAAA8wQ,EAAA7wQ,GAAAD,GACAu2D,EAAAu6M,EAAAtxQ,EACAmpZ,IAAAlnZ,IACAquU,EAAA82E,QAAAL,EAAA1lZ,MAAAsmZ,cAAAvB,GAAAW,EAAAiO,iBAAAj+V,GAAAgwV,EAAAiO,iBAAA1jJ,GAEA,CACA,GAAAA,IAAAy1I,EAAAsK,iBAAAsD,GAAA,CACA,MAAAM,EAAAjS,EAAAtpX,KAAA15B,GAAA+mZ,EAAAmO,qBAAAP,GAAA;AACArjJ,GAAA2jJ,EACAj1Z,GAAAi1Z,CACA,CACA,OACAj1Z,OACAsxQ,OACAv6M,OACAvkE,OAAAukE,EAAA/2D,EAAA,EAEA,CACA,wBAAAwzZ,CAAA9oa,EAAAwoa,GACA,MAAArrZ,EAAAqrZ,EAAArrZ,MACAlkB,EAAAhC,KAAAgC,QACAiwa,EAAAjwa,EAAAiwa,SACAuB,EAAAnS,EAAA4G,eAAAjma,EAAAwxa,gBAAAzxX;AACA,IAAAlxC,EAAAwN;AACA,MAAAo1Z,EAAAzza,KAAAmya;AACA,GAAAZ,EAAAP,QAAA,CACA,MAAA6B,EAAAZ,EAAAjya,KAAAkya,eAAAnpa,GAAAwoa,EAAAsB,WACA36V,EAAA,SAAAl2E,EAAA0wa,aA5ZA,SAAA3pa,EAAAwoa,EAAAvva,EAAA6wa,GACA,MAAAJ,EAAAlB,EAAAkB,OACAxmH,EAAAwmH,EAAA1pa;AACA,IAAA0nQ,EAAA1nQ,EAAA,EAAA0pa,EAAA1pa,EAAA,QACAkwF,EAAAlwF,EAAA0pa,EAAAlya,OAAA,EAAAkya,EAAA1pa,EAAA;AACA,MAAAwgD,EAAAvnD,EAAA8ua;AACA,OAAArgK,IACAA,EAAAw7C,GAAA,OAAAhzN,EAAAs4U,EAAApyZ,IAAAoyZ,EAAAryZ,MAAA+5E,EAAAgzN,IAEA,OAAAhzN,IACAA,EAAAgzN,IAAAx7C;AAEA,MAAAvxP,EAAA+sS,KAAAlpT,KAAA8b,IAAA4xP,EAAAx3K,IAAA,EAAA1vC;AAEA,OACA+wN,MAFAv3Q,KAAAqN,IAAA6oF,EAAAw3K,GAAA,EAAAlnN,EAEAspX,EACAzjZ,MAAAptB,EAAA+ua,cACA7xZ,QAEA,CAnBA,CA4ZAnW,EAAAwoa,EAAAvva,EAAA6wa,EAAAY,GA5aA,SAAA1qa,EAAAwoa,EAAAvva,EAAA6wa,GACA,MAAAjgE,EAAA5wW,EAAA0wa;AACA,IAAAr0Z,EAAA+Q;AAQA,OAPAiyY,EAAAqQ,cAAA9+D,IACAv0V,EAAAkzZ,EAAA1yZ,IAAA7c,EAAA8ua,mBACA1hZ,EAAAptB,EAAA+ua,gBAEA1yZ,EAAAu0V,EAAAigE,EACAzjZ,EAAA,GAEA,CACAkrP,MAAAj8P,EAAAw0Z,EACAzjZ,QACAlQ,MAAAqyZ,EAAAkB,OAAA1pa,GAAAsV,EAAA,EAEA,CAfA,CA4aAtV,EAAAwoa,EAAAvva,EAAA6wa,EAAAY,GACAC,EAAA,MAAA1za,KAAA0ha,MAAA1/Z,QAAAsma,UAAAtoa,KAAA6na,aAAAG,QAAAhoa,KAAA6na,aAAAM,QACAwL,EAAA3za,KAAAoya,WAAAvoa,QAAAw3Z,EAAA4G,eAAAyL,EAAA1za,KAAAqya,gCACAuB,EAAA5za,KAAAwya,eAAAxya,KAAA+I,MAAA/I,KAAAwla,YAAAv7W,MAAAgoX,EAAAlpa,OAAA0oB,GAAAkiZ;AACA9ia,EAAAqnE,EAAAh5D,MAAAg5D,EAAAoiM,MAAAs5J,EAAA17V,EAAAoiM,MAAA,EACAj8P,EAAAtb,KAAA8b,IAAA20Z,EAAAt7V,EAAAoiM,MAAApiM,EAAA9oD,MACA,MACAve,EAAAqV,EAAAwpZ,iBAAA1va,KAAAmra,UAAApia,GAAAmd,EAAAxG,MAAA3W,GACAsV,EAAAtb,KAAA8b,IAAA20Z,EAAAjC,EAAA1yZ,IAAA0yZ,EAAAniZ;AAEA,OACAugQ,KAAA9+Q,EAAAwN,EAAA,EACA+2D,KAAAvkE,EAAAwN,EAAA,EACAxN,SACAwN,OAEA,CACA,IAAA0jZ,GACA,MAAApoH,EAAA35S,KAAAwla,YACAJ,EAAAzrH,EAAAyrH,OACAplZ,EAAA25R,EAAA1sR,KACAo3Y,EAAArkZ,EAAAzf;AACA,IAAAD,EAAA;AACA,KAAcA,EAAA+ja,IAAU/ja,EACxB,OAAAN,KAAAmra,UAAA7qa,GAAA8ka,EAAA1lZ,OAAAM,EAAA1f,GAAAw3V,QACA93U,EAAA1f,GAAAyha,KAAA/ha,KAAAyma,KAGA,EAGA,MAAAoN,UAAAtN,EACAC,UAAA;AACAA,gBAAA,CACAa,sBACAC,gBAAA,QACA1D,WAAA,CACAqN,QAAA,CACAnta,KAAA,SACAwS,WAAA,CACA,IACA,IACA,cACA;AAKAkwZ,iBAAA,CACAN,OAAA,CACAl/Z,EAAA,CACAlD,KAAA,UAEA0N,EAAA,CACA1N,KAAA;AAIA,UAAA/D,GACAC,KAAAina,uBACAjkQ,MAAAjjK,YACA,CACA,kBAAA4qa,CAAAhxH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAwuM,EAAA3rL,MAAA2nQ,mBAAAhxH,EAAA1sR,EAAA/N,EAAAihI;AACA,QAAA7/I,EAAA,EAAuBA,EAAAquV,EAAApuV,OAAmBD,IAC1CquV,EAAAruV,GAAA4va,QAAAlwa,KAAA0sa,0BAAApsa,EAAA4e,GAAA7Z;AAEA,OAAAspV,CACA,CACA,cAAA87E,CAAA9wH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAwuM,EAAA3rL,MAAAynQ,eAAA9wH,EAAA1sR,EAAA/N,EAAAihI;AACA,QAAA7/I,EAAA,EAAuBA,EAAAquV,EAAApuV,OAAmBD,IAAA,CAC1C,MAAA83J,EAAAnrI,EAAA/N,EAAA5e;AACAquV,EAAAruV,GAAA4va,QAAA7O,EAAA4G,eAAA7vQ,EAAA,GAAAp4J,KAAA0sa,0BAAApsa,EAAA4e,GAAA7Z,OACA,CACA,OAAAspV,CACA,CACA,eAAA+7E,CAAA/wH,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAwuM,EAAA3rL,MAAA0nQ,gBAAA/wH,EAAA1sR,EAAA/N,EAAAihI;AACA,QAAA7/I,EAAA,EAAuBA,EAAAquV,EAAApuV,OAAmBD,IAAA,CAC1C,MAAA83J,EAAAnrI,EAAA/N,EAAA5e;AACAquV,EAAAruV,GAAA4va,QAAA7O,EAAA4G,eAAA7vQ,KAAAv3J,IAAAu3J,EAAAv3J,EAAAb,KAAA0sa,0BAAApsa,EAAA4e,GAAA7Z,OACA,CACA,OAAAspV,CACA,CACA,cAAAs9E,GACA,MAAAh/Y,EAAAjtB,KAAAwla,YAAAv4Y;AACA,IAAAnO,EAAA;AACA,QAAAxe,EAAA2sB,EAAA1sB,OAAA,EAAqCD,GAAA,IAAQA,EAC7Cwe,EAAA/b,KAAA+b,MAAAmO,EAAA3sB,GAAA+d,KAAAre,KAAA0sa,0BAAApsa,IAAA;AAEA,OAAAwe,EAAA,GAAAA,CACA,CACA,gBAAAotZ,CAAAnja,GACA,MAAA4wS,EAAA35S,KAAAwla,YACAqF,EAAA7qa,KAAA0ha,MAAAz0Y,KAAA49Y,QAAA,IACAlC,OAAgBA,EAAAE,UAAmBlvH,EACnCg1C,EAAA3uV,KAAAmra,UAAApia,GACA/B,EAAA2ha,EAAAwD,iBAAAx9E,EAAA3nV,GACAwK,EAAAq3Z,EAAAsD,iBAAAx9E,EAAAn9U,GACA3Q,EAAA8tV,EAAAuhF;AACA,OACA1oQ,MAAAqjQ,EAAA9ha,IAAA,GACApG,MAAA,IAAAqE,EAAA,KAAAwK,GAAA3Q,EAAA,KAAAA,EAAA,QAEA,CACA,MAAA8P,CAAAkH,GACA,MAAAwoZ,EAAArga,KAAAwla,YAAAv4Y;AACAjtB,KAAA0ua,eAAArO,EAAA,EAAAA,EAAA9/Z,OAAAsX,EACA,CACA,cAAA62Z,CAAArO,EAAAnhZ,EAAAihI,EAAAtoI,GACA,MAAA+Z,EAAA,UAAA/Z,GACA6tZ,OAAgBA,EAAAN,UAAmBpla,KAAAwla,aACnCgI,cAAgBA,EAAAD,kBAAkCvta,KAAA0ta,kBAAAxuZ,EAAArH,GAClD8tZ,EAAAD,EAAAhmZ,KACAkmZ,EAAAR,EAAA1lZ;AACA,QAAApf,EAAA4e,EAA2B5e,EAAA4e,EAAAihI,EAAmB7/I,IAAA,CAC9C,MAAAo1J,EAAA2qQ,EAAA//Z,GACAquV,GAAA/8T,GAAA5xB,KAAAmra,UAAA7qa,GACAgW,EAAA,GACAw9Z,EAAAx9Z,EAAAqvZ,GAAA/zY,EAAA8zY,EAAAyN,mBAAA,IAAAzN,EAAAgK,iBAAA/gF,EAAAg3E,IACAoO,EAAAz9Z,EAAAsvZ,GAAAh0Y,EAAAwzY,EAAAkM,eAAAlM,EAAAsK,iBAAA/gF,EAAAi3E;AACAtvZ,EAAAuY,KAAAosD,MAAA64V,IAAA74V,MAAA84V,GACAxG,IACAj3Z,EAAAtU,QAAAwra,GAAAxta,KAAA0sa,0BAAApsa,EAAAo1J,EAAA8J,OAAA,SAAA3nJ,GACA+Z,IACAtb,EAAAtU,QAAAqD,OAAA,IAGArF,KAAA8ta,cAAAp4Q,EAAAp1J,EAAAgW,EAAAuB,EACA,CACA,CACA,yBAAA60Z,CAAA3ja,EAAA8O,GACA,MAAA82U,EAAA3uV,KAAAmra,UAAApia;AACA,IAAAi+C,EAAAg8G,MAAA0pQ,0BAAA3ja,EAAA8O;AACAmvC,EAAA08W,UACA18W,EAAAj/B,OAAA4rD,OAAA,GAAqC3sB,EAAA,CACrC08W;AAGA,MAAAr+Z,EAAA2hD,EAAA3hD;AAKA,MAJA,WAAAwS,IACAmvC,EAAA3hD,OAAA,GAEA2hD,EAAA3hD,QAAAg8Z,EAAA4G,eAAAt5E,KAAAuhF,QAAA7qa,GACA2hD,CACA,EAiCA,MAAAgtX,UAAAzN,EACAC,UAAA;AACAA,gBAAA,CACAa,sBACAC,gBAAA,MACA/D,UAAA,CACA0Q,iBACAC,iBAEAtQ,WAAA,CACAqN,QAAA,CACAnta,KAAA,SACAwS,WAAA,CACA,gBACA,WACA,cACA,cACA,aACA,IACA,IACA,SACA,cACA,aAIA69Z,OAAA,MACAC,SAAA,EACAC,cAAA,IACAhva,OAAA,OACAiva,QAAA,EACAhM,UAAA;AAEA9B,mBAAA,CACA+N,YAAAnsa,GAAA,YAAAA,EACAosa,WAAApsa,GAAA,YAAAA,MAAAwoC,WAAA,gBAAAxoC,EAAAwoC,WAAA;AAEA41X,iBAAA,CACAvrI,YAAA,EACAmvC,QAAA,CACAqqG,OAAA,CACA5J,OAAA,CACA,cAAA6J,CAAAhT,GACA,MAAAz0Y,EAAAy0Y,EAAAz0Y,MACgC49Y,QAAA8J,WAAUA,EAAApd,YAAAjyZ,QAAAsva,kBAAAC,iBAAsEnT,EAAA+S,OAAAzya;AAChH,OAAAirB,EAAA49Y,OAAAtqa,QAAA0sB,EAAA87Y,SAAAxoa,OACA0sB,EAAA49Y,OAAAjnZ,IAAA,CAAA4jJ,EAAAlnK,KACA,MACAqN,EADA+zZ,EAAAsH,eAAA,GACAzD,WAAAiH,SAAAlsa;AACA,OACA+C,KAAAmkK,EACAstQ,UAAAnna,EAAAo/T,gBACAgoG,UAAAzva,EACAwyV,QAAA4pE,EAAAuR,kBAAA3ya,GACA00a,SAAArna,EAAAsna,WACAC,eAAAvna,EAAAwna,iBACAC,SAAAzna,EAAA0na,gBACAC,UAAA3na,EAAA4na,YACAC,YAAA7na,EAAAs/T,YACAsqF,YACAod,aACAE,aAAAD,IAAAC,GAAAlna,EAAAkna,cACA9ra,MAAAzI,KAIA,EACA,GAEA,OAAAohF,CAAArhF,EAAAo1a,EAAAhB,GACAA,EAAA/S,MAAAgU,qBAAAD,EAAA1sa,OACA0ra,EAAA/S,MAAA/wZ,QACA;AAIA,WAAA2qE,CAAAomV,EAAA+C,GACAzhQ,MAAA0+P,EAAA+C,GACAzka,KAAAina,uBACAjna,KAAA21a,iBAAAlkZ,EACAzxB,KAAA41a,iBAAAnkZ,EACAzxB,KAAA4wK,aAAAn/I,EACAzxB,KAAA6wK,aAAAp/I,CACA,CACA,UAAA81Y,GAAA,CACA,KAAArxZ,CAAAgJ,EAAAihI,GACA,MAAAlzH,EAAAjtB,KAAA6na,aAAA56Y,KACA0sR,EAAA35S,KAAAwla;AACA,QAAAxla,KAAA4ma,SACAjtH,EAAAysH,QAAAn5Y;IACU,CACV,IAKA3sB,EAAA+ja,EALAwR,EAAAv1a,IAAA2sB,EAAA3sB;AACA,GAAA+ga,EAAAxsT,SAAA5nF,EAAA/N,IAAA,CACA,MAAA+Z,IAAwBA,EAAA,SAAgBj5B,KAAA4ma;AACxCiP,EAAAv1a,IAAA+ga,EAAA6J,iBAAAj+Y,EAAA3sB,GAAA24B,EACA,CAEA,IAAA34B,EAAA4e,EAAAmlZ,EAAAnlZ,EAAAihI,EAAiD7/I,EAAA+ja,IAAU/ja,EAC3Dq5S,EAAAysH,QAAA9la,GAAAu1a,EAAAv1a,EAEA,CACA,CACA,YAAAw1a,GACA,OAAAzU,EAAA0U,UAAA/1a,KAAAgC,QAAAoya,SAAA,GACA,CACA,iBAAA4B,GACA,OAAA3U,EAAA0U,UAAA/1a,KAAAgC,QAAAqya,cACA,CACA,mBAAA4B,GACA,IAAAp3Z,EAAAwiZ,EAAA6U,IACAp3Z,GAAAuiZ,EAAA6U;AACA,QAAA51a,EAAA,EAAuBA,EAAAN,KAAA0ha,MAAAz0Y,KAAA87Y,SAAAxoa,SAAqCD,EAC5D,GAAAN,KAAA0ha,MAAAyU,iBAAA71a,IAAAN,KAAA0ha,MAAAsH,eAAA1oa,GAAAwD,OAAA9D,KAAA2ma,MAAA,CACA,MAAApB,EAAAvla,KAAA0ha,MAAAsH,eAAA1oa,GAAAila,WACA6O,EAAA7O,EAAAuQ,eACAzB,EAAA9O,EAAAyQ;AACAn3Z,EAAA9b,KAAA8b,MAAAu1Z,GACAt1Z,EAAA/b,KAAA+b,MAAAs1Z,EAAAC,EACA,CAEA,OACAD,SAAAv1Z,EACAw1Z,cAAAv1Z,EAAAD,EAEA,CACA,MAAAlO,CAAAkH,GACA,MAAA6pZ,EAAA1ha,KAAA0ha,OACA4K,UAAgBA,GAAa5K,EAC7B/nH,EAAA35S,KAAAwla,YACA4Q,EAAAz8H,EAAA1sR,KACAqnZ,EAAAt0a,KAAAq2a,oBAAAr2a,KAAAs2a,aAAAF,GAAAp2a,KAAAgC,QAAAsya,QACAiC,EAAAxza,KAAA+b,KAAA/b,KAAA8b,IAAAytZ,EAAAv+Z,MAAAu+Z,EAAAhrZ,QAAAgzZ,GAAA,KACAH,EAAApxa,KAAA8b,IAAAwiZ,EAAAmV,aAAAx2a,KAAAgC,QAAAmya,OAAAoC,GAAA,GACAE,EAAAz2a,KAAA02a,eAAA12a,KAAA+I,QACAsra,cAAgBA,EAAAD,YAA4Bp0a,KAAAi2a,uBAC5CU,OAAgBA,EAAAC,SAAAhmQ,UAAAC,WArKhB,SAAAujQ,EAAAC,EAAAF,GACA,IAAAwC,EAAA,EACAC,EAAA,EACAhmQ,EAAA,EACAC,EAAA;AACA,GAAAwjQ,EAAAhT,EAAA6U,IAAA,CACA,MAAAtpJ,EAAAwnJ,EACAyC,EAAAjqJ,EAAAynJ,EACAyC,EAAA/za,KAAAwyK,IAAAq3G,GACAmqJ,EAAAh0a,KAAAi0a,IAAApqJ,GACAqqJ,EAAAl0a,KAAAwyK,IAAAshQ,GACAK,EAAAn0a,KAAAi0a,IAAAH,GACAM,EAAA,CAAA1qJ,EAAA3rR,EAAAma,IAAAomZ,EAAA+V,cAAA3qJ,EAAAG,EAAAiqJ,MAAA,EAAA9za,KAAA+b,IAAAhe,IAAAqza,EAAAl5Z,IAAAk5Z,GACAkD,EAAA,CAAA5qJ,EAAA3rR,EAAAma,IAAAomZ,EAAA+V,cAAA3qJ,EAAAG,EAAAiqJ,OAAA,EAAA9za,KAAA8b,IAAA/d,IAAAqza,EAAAl5Z,IAAAk5Z,GACAmD,EAAAH,EAAA,EAAAL,EAAAG,GACAM,EAAAJ,EAAA9V,EAAAmW,QAAAT,EAAAG,GACAvzZ,EAAA0zZ,EAAAhW,EAAA7rP,GAAAshQ,EAAAG,GACApzZ,EAAAwzZ,EAAAhW,EAAA7rP,GAAA6rP,EAAAmW,QAAAT,EAAAG;AACAP,GAAAW,EAAA3zZ,GAAA,EACAizZ,GAAAW,EAAA1zZ,GAAA,EACA+sJ,IAAA0mQ,EAAA3zZ,GAAA,EACAktJ,IAAA0mQ,EAAA1zZ,GAAA,CACA,CACA,OACA8yZ,SACAC,SACAhmQ,UACAC,UAEA,CA7BA,CAqKuDujQ,EAAAC,EAAAF,GACvDj3K,GAAAovK,EAAAv+Z,MAAAuma,GAAAqC,EACAv5K,GAAAkvK,EAAAhrZ,OAAAgzZ,GAAAsC,EACAa,EAAA10a,KAAA+b,IAAA/b,KAAA8b,IAAAq+O,EAAAE,GAAA,KACAw4K,EAAAvU,EAAAqW,YAAA13a,KAAAgC,QAAAqD,OAAAoya,GAEAE,GAAA/B,EADA7ya,KAAA+b,IAAA82Z,EAAAzB,EAAA,IACAn0a,KAAA43a;AACA53a,KAAA4wK,UAAAglQ,EACA51a,KAAA6wK,UAAA+kQ,EACAj8H,EAAAj+F,MAAA17M,KAAA63a,iBACA73a,KAAA41a,cAAA+B,EAAA33a,KAAA83a,qBAAA93a,KAAA+I,OACA/I,KAAA21a,YAAA5ya,KAAA+b,IAAA9e,KAAA41a,YAAA+B,EAAAlB,EAAA,GACAz2a,KAAA0ua,eAAA0H,EAAA,EAAAA,EAAA71a,OAAAsX,EACA,CACA,cAAAkga,CAAAz3a,EAAAsxB,GACA,MAAAqnB,EAAAj5C,KAAAgC,QACA23S,EAAA35S,KAAAwla,YACA6O,EAAAr0a,KAAAg2a;AACA,OAAApkZ,GAAAqnB,EAAAsqX,UAAA0Q,gBAAAj0a,KAAA0ha,MAAAuR,kBAAA3ya,IAAA,OAAAq5S,EAAAysH,QAAA9la,IAAAq5S,EAAA1sR,KAAA3sB,GAAAw3V,OACA,EAEA93V,KAAAg4a,uBAAAr+H,EAAAysH,QAAA9la,GAAA+za,EAAAhT,EAAA6U,IACA,CACA,cAAAxH,CAAA0H,EAAAl3Z,EAAAihI,EAAAtoI,GACA,MAAA+Z,EAAA,UAAA/Z,EACA6pZ,EAAA1ha,KAAA0ha,MACA4K,EAAA5K,EAAA4K,UAEA2L,EADAvW,EAAA1/Z,QACAuha,UACA2U,GAAA5L,EAAA1+Z,KAAA0+Z,EAAAt+Z,OAAA,EACAmqa,GAAA7L,EAAAz+Z,IAAAy+Z,EAAAx+Z,QAAA,EACAoma,EAAAtiZ,GAAAqmZ,EAAA/D,aACAyB,EAAAzB,EAAA,EAAAl0a,KAAA21a,YACAC,EAAA1B,EAAA,EAAAl0a,KAAA41a,aACApI,cAAgBA,EAAAD,kBAAkCvta,KAAA0ta,kBAAAxuZ,EAAArH;AAClD,IACAvX,EADAssR,EAAA5sR,KAAA81a;AAEA,IAAAx1a,EAAA,EAAmBA,EAAA4e,IAAW5e,EAC9BssR,GAAA5sR,KAAA+3a,eAAAz3a,EAAAsxB;AAEA,IAAAtxB,EAAA4e,EAAuB5e,EAAA4e,EAAAihI,IAAmB7/I,EAAA,CAC1C,MAAA+za,EAAAr0a,KAAA+3a,eAAAz3a,EAAAsxB,GACAwmZ,EAAAhC,EAAA91a,GACAgW,EAAA,CACAtP,EAAAkxa,EAAAl4a,KAAA4wK,QACAp/J,EAAA2ma,EAAAn4a,KAAA6wK,QACA+7G,aACAiqJ,SAAAjqJ,EAAAynJ,EACAA,gBACAuB,cACAD;AAEApI,IACAj3Z,EAAAtU,QAAAwra,GAAAxta,KAAA0sa,0BAAApsa,EAAA83a,EAAA54Q,OAAA,SAAA3nJ,IAEA+0Q,GAAAynJ,EACAr0a,KAAA8ta,cAAAsK,EAAA93a,EAAAgW,EAAAuB,EACA,CACA,CACA,cAAAgga,GACA,MAAAl+H,EAAA35S,KAAAwla,YACA6S,EAAA1+H,EAAA1sR;AACA,IACA3sB,EADAo7M,EAAA;AAEA,IAAAp7M,EAAA,EAAmBA,EAAA+3a,EAAA93a,OAAqBD,IAAA,CACxC,MAAAqC,EAAAg3S,EAAAysH,QAAA9la;AACA,OAAAqC,GAAAs4E,MAAAt4E,KAAA3C,KAAA0ha,MAAAuR,kBAAA3ya,IAAA+3a,EAAA/3a,GAAAw3V,SACAp8I,GAAA34M,KAAAqN,IAAAzN,GAEA,CACA,OAAA+4M,CACA,CACA,sBAAAs8N,CAAAr1a,GACA,MAAA+4M,EAAA17M,KAAAwla,YAAA9pN;AACA,OAAAA,EAAA,IAAAzgI,MAAAt4E,GACA0+Z,EAAA6U,KAAAnza,KAAAqN,IAAAzN,GAAA+4M,GAEA,CACA,CACA,gBAAAwwN,CAAAnja,GACA,MAAA4wS,EAAA35S,KAAAwla,YACA9D,EAAA1ha,KAAA0ha,MACAmJ,EAAAnJ,EAAAz0Y,KAAA49Y,QAAA,GACAloa,EAAA0+Z,EAAAn8W,aAAAy0P,EAAAysH,QAAAr9Z,GAAA24Z,EAAA1/Z,QAAA+tC;AACA,OACAy3H,MAAAqjQ,EAAA9ha,IAAA,GACApG,QAEA,CACA,iBAAA0za,CAAAD,GACA,IAAAt3Z,EAAA;AACA,MAAA4iZ,EAAA1ha,KAAA0ha;AACA,IAAApha,EAAA+ja,EAAA1qH,EAAA4rH,EAAAvja;AACA,IAAAo0a,EACA,IAAA91a,EAAA,EAAA+ja,EAAA3C,EAAAz0Y,KAAA87Y,SAAAxoa,OAA0DD,EAAA+ja,IAAU/ja,EACpE,GAAAoha,EAAAyU,iBAAA71a,GAAA,CACAq5S,EAAA+nH,EAAAsH,eAAA1oa,GACA81a,EAAAz8H,EAAA1sR,KACAs4Y,EAAA5rH,EAAA4rH;AACA,KACA,CAGA,IAAA6Q,EACA;AAEA,IAAA91a,EAAA,EAAA+ja,EAAA+R,EAAA71a,OAAuCD,EAAA+ja,IAAU/ja,EACjD0B,EAAAuja,EAAAmH,0BAAApsa,GACA,UAAA0B,EAAAs2a,cACAx5Z,EAAA/b,KAAA+b,MAAA9c,EAAAuza,aAAA,EAAAvza,EAAAu2a,kBAAA;AAGA,OAAAz5Z,CACA,CACA,YAAAw3Z,CAAAF,GACA,IAAAt3Z,EAAA;AACA,QAAAxe,EAAA,EAAA+ja,EAAA+R,EAAA71a,OAA2CD,EAAA+ja,IAAU/ja,EAAA,CACrD,MAAA0B,EAAAhC,KAAA0sa,0BAAApsa;AACAwe,EAAA/b,KAAA+b,MAAA9c,EAAAgc,QAAA,EAAAhc,EAAAw2a,aAAA,EACA,CACA,OAAA15Z,CACA,CACA,oBAAAg5Z,CAAArT,GACA,IAAAgU,EAAA;AACA,QAAAn4a,EAAA,EAAuBA,EAAAmka,IAAkBnka,EACzCN,KAAA0ha,MAAAyU,iBAAA71a,KACAm4a,GAAAz4a,KAAA02a,eAAAp2a;AAGA,OAAAm4a,CACA,CACA,cAAA/B,CAAAjS,GACA,OAAA1ha,KAAA+b,IAAAuiZ,EAAA4G,eAAAjoa,KAAA0ha,MAAAz0Y,KAAA87Y,SAAAtE,GAAAn6Z,OAAA,KACA,CACA,6BAAAsta,GACA,OAAA53a,KAAA83a,qBAAA93a,KAAA0ha,MAAAz0Y,KAAA87Y,SAAAxoa,SAAA,CACA,EAGA,MAAAm4a,UAAAnS,EACAC,UAAA;AACAA,gBAAA,CACAa,mBAAA,OACAC,gBAAA,QACAqR,YACAC;AAEApS,iBAAA,CACAN,OAAA,CACAgL,QAAA,CACApta,KAAA,YAEAqta,QAAA,CACArta,KAAA;AAIA,UAAA/D,GACAC,KAAAina,uBACAjna,KAAAkna,sBACAlkQ,MAAAjjK,YACA,CACA,MAAA4Q,CAAAkH,GACA,MAAA8hS,EAAA35S,KAAAwla,aACgB/kV,QAAA5kE,EAAAoR,KAAAozY,EAAA,GAAAwY,YAAgDl/H,EAChEm/H,EAAA94a,KAAA0ha,MAAA+L;AACA,IAAAvuZ,MAAcA,EAAAihI,SAAiBkhR,EAAA0X,iCAAAp/H,EAAA0mH,EAAAyY;AAC/B94a,KAAA+ma,WAAA7nZ,EACAlf,KAAAgna,WAAA7mR,EACAkhR,EAAA2X,oBAAAr/H,KACAz6R,EAAA,EACAihI,EAAAkgR,EAAA9/Z,QAEAsb,EAAAunZ,OAAApja,KAAA0ha,MACA7lZ,EAAAo9Z,cAAAj5a,KAAA+I,MACA8S,EAAAq9Z,aAAAL,EAAAK,WACAr9Z,EAAAwkZ;AACA,MAAAr+Z,EAAAhC,KAAAysa,6BAAA50Z;AACA7X,KAAAgC,QAAA22a,WACA32a,EAAAuza,YAAA,GAEAvza,EAAAm3a,QAAAn5a,KAAAgC,QAAAm3a,QACAn5a,KAAA8ta,cAAAjyZ,OAAA4V,EAAA,CACA2nZ,UAAAN,EACA92a,WACS6V,GACT7X,KAAA0ua,eAAArO,EAAAnhZ,EAAAihI,EAAAtoI,EACA,CACA,cAAA62Z,CAAArO,EAAAnhZ,EAAAihI,EAAAtoI,GACA,MAAA+Z,EAAA,UAAA/Z,GACA6tZ,OAAgBA,EAAAN,SAAAoC,WAAAqR,YAAyC74a,KAAAwla,aACzDgI,cAAgBA,EAAAD,kBAAkCvta,KAAA0ta,kBAAAxuZ,EAAArH,GAClD8tZ,EAAAD,EAAAhmZ,KACAkmZ,EAAAR,EAAA1lZ,MACAk5Z,SAAgBA,EAAAO,WAAsBn5a,KAAAgC,QACtCq3a,EAAAhY,EAAA3sU,SAAAkkV,KAAAtta,OAAAi9G,kBACA+wT,EAAAt5a,KAAA0ha,MAAA+L,qBAAA77Y,GAAA,SAAA/Z,EACAsH,EAAAD,EAAAihI,EACAo5R,EAAAlZ,EAAA9/Z;AACA,IAAAi5a,EAAAt6Z,EAAA,GAAAlf,KAAAmra,UAAAjsZ,EAAA;AACA,QAAA5e,EAAA,EAAuBA,EAAAi5a,IAAiBj5a,EAAA,CACxC,MAAAo1J,EAAA2qQ,EAAA//Z,GACAgW,EAAAgja,EAAA5jR,EAAA;AACA,GAAAp1J,EAAA4e,GAAA5e,GAAA6e,EAAA,CACA7I,EAAAuY;AACA,QACA,CACA,MAAA8/T,EAAA3uV,KAAAmra,UAAA7qa,GACAm5a,EAAApY,EAAAqQ,cAAA/iF,EAAAi3E,IACAkO,EAAAx9Z,EAAAqvZ,GAAAD,EAAAgK,iBAAA/gF,EAAAg3E,GAAArla,GACAyza,EAAAz9Z,EAAAsvZ,GAAAh0Y,GAAA6nZ,EAAArU,EAAAkM,eAAAlM,EAAAsK,iBAAAlI,EAAAxna,KAAAska,WAAAc,EAAAz2E,EAAA64E,GAAA74E,EAAAi3E,GAAAtla;AACAgW,EAAAuY,KAAAosD,MAAA64V,IAAA74V,MAAA84V,IAAA0F,EACAnja,EAAApM,KAAA5J,EAAA,GAAAyC,KAAAqN,IAAAu+U,EAAAg3E,GAAA6T,EAAA7T,IAAA0T,EACAF,IACA7ia,EAAAq4U,SACAr4U,EAAAy4L,IAAA8pO,EAAA5rZ,KAAA3sB,IAEAita,IACAj3Z,EAAAtU,QAAAwra,GAAAxta,KAAA0sa,0BAAApsa,EAAAo1J,EAAA8J,OAAA,SAAA3nJ,IAEAyha,GACAt5a,KAAA8ta,cAAAp4Q,EAAAp1J,EAAAgW,EAAAuB,GAEA2ha,EAAA7qF,CACA,CACA,CACA,cAAAs9E,GACA,MAAAtyH,EAAA35S,KAAAwla,YACA/kV,EAAAk5N,EAAAl5N,QACA2hG,EAAA3hG,EAAAz+E,SAAAy+E,EAAAz+E,QAAAuza,aAAA,EACAtoZ,EAAA0sR,EAAA1sR,MAAA;AACA,IAAAA,EAAA1sB,OACA,OAAA6hL;AAEA,MAAAs3P,EAAAzsZ,EAAA,GAAA5O,KAAAre,KAAA0sa,0BAAA,IACAiN,EAAA1sZ,IAAA1sB,OAAA,GAAA8d,KAAAre,KAAA0sa,0BAAAz/Y,EAAA1sB,OAAA;AACA,OAAAwC,KAAA+b,IAAAsjK,EAAAs3P,EAAAC,GAAA,CACA,CACA,IAAA5X,GACA,MAAApoH,EAAA35S,KAAAwla;AACA7rH,EAAAl5N,QAAAm5V,oBAAA55a,KAAA0ha,MAAA4K,UAAA3yH,EAAA+rH,OAAAhmZ,MACAsjJ,MAAA++P,MACA,EAGA,MAAA8X,UAAAtT,EACAC,UAAA;AACAA,gBAAA,CACAc,gBAAA,MACA/D,UAAA,CACA0Q,iBACAC,iBAEAtQ,WAAA,CACAqN,QAAA,CACAnta,KAAA,SACAwS,WAAA,CACA,IACA,IACA,aACA,WACA,cACA,iBAIAgyZ,UAAA,IACA17I,WAAA;AAEA45I,iBAAA,CACAvrI,YAAA,EACAmvC,QAAA,CACAqqG,OAAA,CACA5J,OAAA,CACA,cAAA6J,CAAAhT,GACA,MAAAz0Y,EAAAy0Y,EAAAz0Y;AACA,GAAAA,EAAA49Y,OAAAtqa,QAAA0sB,EAAA87Y,SAAAxoa,OAAA,CACA,MAAoCsqa,QAAA8J,WAAUA,EAAArva,UAAyBo8Z,EAAA+S,OAAAzya;AACvE,OAAAirB,EAAA49Y,OAAAjnZ,IAAA,CAAA4jJ,EAAAlnK,KACA,MACAqN,EADA+zZ,EAAAsH,eAAA,GACAzD,WAAAiH,SAAAlsa;AACA,OACA+C,KAAAmkK,EACAstQ,UAAAnna,EAAAo/T,gBACAyoG,YAAA7na,EAAAs/T,YACA8nG,UAAAzva,EACAgwa,UAAA3na,EAAA4na,YACAZ,aACA78E,QAAA4pE,EAAAuR,kBAAA3ya,GACAyI,MAAAzI,IAGA,CACA,QACA,GAEA,OAAAohF,CAAArhF,EAAAo1a,EAAAhB,GACAA,EAAA/S,MAAAgU,qBAAAD,EAAA1sa,OACA0ra,EAAA/S,MAAA/wZ,QACA,IAGAu1Z,OAAA,CACArla,EAAA,CACAiD,KAAA,eACAg2a,WAAA,CACA30Z,YAEAisZ,eACAr6K,KAAA,CACAgjL,aAEAC,YAAA,CACA70Z,YAEAynQ,WAAA;AAIA,WAAAtxM,CAAAomV,EAAA+C,GACAzhQ,MAAA0+P,EAAA+C,GACAzka,KAAA21a,iBAAAlkZ,EACAzxB,KAAA41a,iBAAAnkZ,CACA,CACA,gBAAAy6Y,CAAAnja,GACA,MAAA4wS,EAAA35S,KAAAwla,YACA9D,EAAA1ha,KAAA0ha,MACAmJ,EAAAnJ,EAAAz0Y,KAAA49Y,QAAA,GACAloa,EAAA0+Z,EAAAn8W,aAAAy0P,EAAAysH,QAAAr9Z,GAAAlI,EAAA6ga,EAAA1/Z,QAAA+tC;AACA,OACAy3H,MAAAqjQ,EAAA9ha,IAAA,GACApG,QAEA,CACA,eAAA+na,CAAA/wH,EAAA1sR,EAAA/N,EAAAihI,GACA,OAAAkhR,EAAA4Y,4BAAAx3a,KAAAzC,KAAAqha,CAAA1nH,EAAA1sR,EAAA/N,EAAAihI,EACA,CACA,MAAAxvI,CAAAkH,GACA,MAAAu+Z,EAAAp2a,KAAAwla,YAAAv4Y;AACAjtB,KAAAk6a,gBACAl6a,KAAA0ua,eAAA0H,EAAA,EAAAA,EAAA71a,OAAAsX,EACA,CACA,SAAA0zZ,GACA,MAAA5xH,EAAA35S,KAAAwla,YACAttV,EAAA,CACAr5D,IAAAvT,OAAAi9G,kBACAzpG,IAAAxT,OAAAk9G;AAaA,OAXAmxL,EAAA1sR,KAAAzS,QAAA,CAAAkI,EAAA3Z,KACA,MAAA4lV,EAAA3uV,KAAAmra,UAAApia,GAAAlI;CACAo6E,MAAA0zQ,IAAA3uV,KAAA0ha,MAAAuR,kBAAAlqa,KACA4lV,EAAAz2Q,EAAAr5D,MACAq5D,EAAAr5D,IAAA8vU,GAEAA,EAAAz2Q,EAAAp5D,MACAo5D,EAAAp5D,IAAA6vU,MAIAz2Q,CACA,CACA,aAAAgiW,GACA,MAAAxY,EAAA1ha,KAAA0ha,MACA4K,EAAA5K,EAAA4K,UACArzX,EAAAyoX,EAAA1/Z,QACAm4a,EAAAp3a,KAAA8b,IAAAytZ,EAAAt+Z,MAAAs+Z,EAAA1+Z,KAAA0+Z,EAAAx+Z,OAAAw+Z,EAAAz+Z,KACA+na,EAAA7ya,KAAA+b,IAAAq7Z,EAAA,KAEAxC,GAAA/B,EADA7ya,KAAA+b,IAAAm6B,EAAAmhY,iBAAAxE,EAAA,IAAA38X,EAAAmhY,iBAAA,MACA1Y,EAAA2Y;AACAr6a,KAAA41a,cAAA+B,EAAA33a,KAAA+I,MACA/I,KAAA21a,YAAA31a,KAAA41a,YAAA+B,CACA,CACA,cAAAjJ,CAAA0H,EAAAl3Z,EAAAihI,EAAAtoI,GACA,MAAA+Z,EAAA,UAAA/Z,EACA6pZ,EAAA1ha,KAAA0ha,MAEAuW,EADAvW,EAAA1/Z,QACAuha,UACAr9Y,EAAAlmB,KAAAwla,YAAAsD,OACAoP,EAAAhyZ,EAAAo0Z,QACAnC,EAAAjyZ,EAAAq0Z,QACAC,EAAAt0Z,EAAAu0Z,cAAA,MAAApZ,EAAA7rP;AACA,IACAl1K,EADAmsR,EAAA+tJ;AAEA,MAAAE,EAAA,IAAA16a,KAAA26a;AACA,IAAAr6a,EAAA,EAAmBA,EAAA4e,IAAW5e,EAC9BmsR,GAAAzsR,KAAA46a,cAAAt6a,EAAAuX,EAAA6ia;AAEA,IAAAp6a,EAAA4e,EAAuB5e,EAAA4e,EAAAihI,EAAmB7/I,IAAA,CAC1C,MAAA83a,EAAAhC,EAAA91a;AACA,IAAAssR,EAAAH,EACAoqJ,EAAApqJ,EAAAzsR,KAAA46a,cAAAt6a,EAAAuX,EAAA6ia,GACA9E,EAAAlU,EAAAuR,kBAAA3ya,GAAA4lB,EAAA20Z,8BAAA76a,KAAAmra,UAAA7qa,GAAAO,GAAA;AACA4rR,EAAAoqJ,EACAjlZ,IACAqmZ,EAAA/D,eACA0B,EAAA,GAEAqC,EAAAhE,gBACArnJ,EAAAiqJ,EAAA2D;AAGA,MAAAlka,EAAA,CACAtP,EAAAkxa,EACA1ma,EAAA2ma,EACAxC,YAAA,EACAC,cACAhpJ,aACAiqJ,WACA70a,QAAAhC,KAAA0sa,0BAAApsa,EAAA83a,EAAA54Q,OAAA,SAAA3nJ;AAEA7X,KAAA8ta,cAAAsK,EAAA93a,EAAAgW,EAAAuB,EACA,CACA,CACA,oBAAA8ia,GACA,MAAAhhI,EAAA35S,KAAAwla;AACA,IAAArlR,EAAA;AAMA,OALAw5J,EAAA1sR,KAAAzS,QAAA,CAAAkI,EAAA3Z,MACAkyE,MAAAj7E,KAAAmra,UAAApia,GAAAlI,IAAAb,KAAA0ha,MAAAuR,kBAAAlqa,IACAo3I,MAGAA,CACA,CACA,aAAAy6R,CAAA7xa,EAAA8O,EAAA6ia,GACA,OAAA16a,KAAA0ha,MAAAuR,kBAAAlqa,GAAAs4Z,EAAA0U,UAAA/1a,KAAA0sa,0BAAA3ja,EAAA8O,GAAA40Q,OAAAiuJ,GAAA,CACA,EAGA,MAAAI,UAAA9G,EACAxN,UAAA;AACAA,gBAAA,CACA2N,OAAA,EACAC,SAAA,EACAC,cAAA,IACAhva,OAAA,QAIA,MAAA01a,UAAAxU,EACAC,UAAA;AACAA,gBAAA,CACAa,mBAAA,OACAC,gBAAA,QACAgB,UAAA,IACAqQ,YACAx2Z,SAAA,CACAtG,KAAA,CACA6rZ,KAAA;AAIAlB,iBAAA,CACAvrI,YAAA,EACAirI,OAAA,CACArla,EAAA,CACAiD,KAAA;AAIA,gBAAAooa,CAAAnja,GACA,MAAAq8Z,EAAApla,KAAAwla,YAAAJ,OACAz2E,EAAA3uV,KAAAmra,UAAApia;AACA,OACAy+J,MAAA49P,EAAA0F,YAAA/ha,GACApG,MAAA,GAAAyia,EAAA+G,iBAAAx9E,EAAAy2E,EAAA1lZ,OAEA,CACA,eAAAgrZ,CAAA/wH,EAAA1sR,EAAA/N,EAAAihI,GACA,OAAAkhR,EAAA4Y,4BAAAx3a,KAAAzC,KAAAqha,CAAA1nH,EAAA1sR,EAAA/N,EAAAihI,EACA,CACA,MAAAxvI,CAAAkH,GACA,MAAA8hS,EAAA35S,KAAAwla,YACA3pZ,EAAA89R,EAAAl5N,QACA4/U,EAAA1mH,EAAA1sR,MAAA,GACA49Y,EAAAlxH,EAAA+rH,OAAAoF;AAEA,GADAjvZ,EAAAwkZ,SACA,WAAAxoZ,EAAA,CACA,MAAA7V,EAAAhC,KAAAysa,6BAAA50Z;AACA7X,KAAAgC,QAAA22a,WACA32a,EAAAuza,YAAA;AAEA,MAAAj/Z,EAAA,CACA8iI,SACA4hS,UAAAnQ,EAAAtqa,SAAA8/Z,EAAA9/Z,OACAyB;AAEAhC,KAAA8ta,cAAAjyZ,OAAA4V,EAAAnb,EAAAuB,EACA,CACA7X,KAAA0ua,eAAArO,EAAA,EAAAA,EAAA9/Z,OAAAsX,EACA,CACA,cAAA62Z,CAAArO,EAAAnhZ,EAAAihI,EAAAtoI,GACA,MAAAqO,EAAAlmB,KAAAwla,YAAAsD,OACAl3Y,EAAA,UAAA/Z;AACA,QAAAvX,EAAA4e,EAA2B5e,EAAA4e,EAAAihI,EAAmB7/I,IAAA,CAC9C,MAAAo1J,EAAA2qQ,EAAA//Z,GACA0B,EAAAhC,KAAA0sa,0BAAApsa,EAAAo1J,EAAA8J,OAAA,SAAA3nJ,GACAoja,EAAA/0Z,EAAAg1Z,yBAAA56a,EAAAN,KAAAmra,UAAA7qa,GAAAO,GACAmG,EAAA4qB,EAAA1L,EAAAo0Z,QAAAW,EAAAj0a,EACAwK,EAAAogB,EAAA1L,EAAAq0Z,QAAAU,EAAAzpa,EACA8E,EAAA,CACAtP,IACAwK,IACAi7Q,MAAAwuJ,EAAAxuJ,MACA59P,KAAAosD,MAAAj0E,IAAAi0E,MAAAzpE,GACAxP;AAEAhC,KAAA8ta,cAAAp4Q,EAAAp1J,EAAAgW,EAAAuB,EACA,CACA,EAGA,MAAAsja,UAAA5U,EACAC,UAAA;AACAA,gBAAA,CACAa,sBACAC,gBAAA,QACAqR,YACAjR;AAEAlB,iBAAA,CACAp/I,YAAA,CACAvvQ,KAAA,SAEAquZ,OAAA,CACAl/Z,EAAA,CACAlD,KAAA,UAEA0N,EAAA,CACA1N,KAAA;AAIA,gBAAAooa,CAAAnja,GACA,MAAA4wS,EAAA35S,KAAAwla,YACAqF,EAAA7qa,KAAA0ha,MAAAz0Y,KAAA49Y,QAAA,IACAlC,OAAgBA,EAAAE,UAAmBlvH,EACnCg1C,EAAA3uV,KAAAmra,UAAApia,GACA/B,EAAA2ha,EAAAwD,iBAAAx9E,EAAA3nV,GACAwK,EAAAq3Z,EAAAsD,iBAAAx9E,EAAAn9U;AACA,OACAg2J,MAAAqjQ,EAAA9ha,IAAA,GACApG,MAAA,IAAAqE,EAAA,KAAAwK,EAAA,IAEA,CACA,MAAAb,CAAAkH,GACA,MAAA8hS,EAAA35S,KAAAwla,aACgBv4Y,KAAAozY,EAAA,IAAqB1mH,EACrCm/H,EAAA94a,KAAA0ha,MAAA+L;AACA,IAAAvuZ,MAAcA,EAAAihI,SAAiBkhR,EAAA0X,iCAAAp/H,EAAA0mH,EAAAyY;AAO/B,GANA94a,KAAA+ma,WAAA7nZ,EACAlf,KAAAgna,WAAA7mR,EACAkhR,EAAA2X,oBAAAr/H,KACAz6R,EAAA,EACAihI,EAAAkgR,EAAA9/Z,QAEAP,KAAAgC,QAAA22a,SAAA,CACA34a,KAAAqna,oBACArna,KAAAyna;AAEA,MAAoBhnV,QAAA5kE,EAAAg9Z,YAA4Bl/H;AAChD99R,EAAAunZ,OAAApja,KAAA0ha,MACA7lZ,EAAAo9Z,cAAAj5a,KAAA+I,MACA8S,EAAAq9Z,aAAAL,EAAAK,WACAr9Z,EAAAwkZ;AACA,MAAAr+Z,EAAAhC,KAAAysa,6BAAA50Z;AACA7V,EAAAm3a,QAAAn5a,KAAAgC,QAAAm3a,QACAn5a,KAAA8ta,cAAAjyZ,OAAA4V,EAAA,CACA2nZ,UAAAN,EACA92a,WACa6V,EACb,MAAU7X,KAAAqna,4BACV1tH,EAAAl5N,QACAzgF,KAAAqna;AAEArna,KAAA0ua,eAAArO,EAAAnhZ,EAAAihI,EAAAtoI,EACA,CACA,WAAA4vZ,GACA,MAAAkR,SAAgBA,GAAY34a,KAAAgC;CAC5BhC,KAAAqna,oBAAAsR,IACA34a,KAAAqna,mBAAArna,KAAA0ha,MAAAhxK,SAAA6b,WAAA,SAEAvpG,MAAAykQ,aACA,CACA,cAAAiH,CAAArO,EAAAnhZ,EAAAihI,EAAAtoI,GACA,MAAA+Z,EAAA,UAAA/Z,GACA6tZ,OAAgBA,EAAAN,SAAAoC,WAAAqR,YAAyC74a,KAAAwla,YACzDmI,EAAA3ta,KAAA0sa,0BAAAxtZ,EAAArH,GACA21Z,EAAAxta,KAAAsta,iBAAAK,GACAJ,EAAAvta,KAAAuta,eAAA11Z,EAAA21Z,GACA7H,EAAAD,EAAAhmZ,KACAkmZ,EAAAR,EAAA1lZ,MACAk5Z,SAAgBA,EAAAO,WAAsBn5a,KAAAgC,QACtCq3a,EAAAhY,EAAA3sU,SAAAkkV,KAAAtta,OAAAi9G,kBACA+wT,EAAAt5a,KAAA0ha,MAAA+L,qBAAA77Y,GAAA,SAAA/Z;AACA,IAAA2ha,EAAAt6Z,EAAA,GAAAlf,KAAAmra,UAAAjsZ,EAAA;AACA,QAAA5e,EAAA4e,EAA2B5e,EAAA4e,EAAAihI,IAAmB7/I,EAAA,CAC9C,MAAAo1J,EAAA2qQ,EAAA//Z,GACAquV,EAAA3uV,KAAAmra,UAAA7qa,GACAgW,EAAAgja,EAAA5jR,EAAA,GACA+jR,EAAApY,EAAAqQ,cAAA/iF,EAAAi3E,IACAkO,EAAAx9Z,EAAAqvZ,GAAAD,EAAAgK,iBAAA/gF,EAAAg3E,GAAArla,GACAyza,EAAAz9Z,EAAAsvZ,GAAAh0Y,GAAA6nZ,EAAArU,EAAAkM,eAAAlM,EAAAsK,iBAAAlI,EAAAxna,KAAAska,WAAAc,EAAAz2E,EAAA64E,GAAA74E,EAAAi3E,GAAAtla;AACAgW,EAAAuY,KAAAosD,MAAA64V,IAAA74V,MAAA84V,IAAA0F,EACAnja,EAAApM,KAAA5J,EAAA,GAAAyC,KAAAqN,IAAAu+U,EAAAg3E,GAAA6T,EAAA7T,IAAA0T,EACAF,IACA7ia,EAAAq4U,SACAr4U,EAAAy4L,IAAA8pO,EAAA5rZ,KAAA3sB,IAEAita,IACAj3Z,EAAAtU,QAAAwra,GAAAxta,KAAA0sa,0BAAApsa,EAAAo1J,EAAA8J,OAAA,SAAA3nJ,IAEAyha,GACAt5a,KAAA8ta,cAAAp4Q,EAAAp1J,EAAAgW,EAAAuB,GAEA2ha,EAAA7qF,CACA,CACA3uV,KAAA6ta,oBAAAL,EAAA31Z,EAAA81Z,EACA,CACA,cAAA1B,GACA,MAAAtyH,EAAA35S,KAAAwla,YACAv4Y,EAAA0sR,EAAA1sR,MAAA;AACA,IAAAjtB,KAAAgC,QAAA22a,SAAA,CACA,IAAA75Z,EAAA;AACA,QAAAxe,EAAA2sB,EAAA1sB,OAAA,EAAyCD,GAAA,IAAQA,EACjDwe,EAAA/b,KAAA+b,MAAAmO,EAAA3sB,GAAA+d,KAAAre,KAAA0sa,0BAAApsa,IAAA;AAEA,OAAAwe,EAAA,GAAAA,CACA,CACA,MAAA2hE,EAAAk5N,EAAAl5N,QACA2hG,EAAA3hG,EAAAz+E,SAAAy+E,EAAAz+E,QAAAuza,aAAA;AACA,IAAAtoZ,EAAA1sB,OACA,OAAA6hL;AAEA,MAAAs3P,EAAAzsZ,EAAA,GAAA5O,KAAAre,KAAA0sa,0BAAA,IACAiN,EAAA1sZ,IAAA1sB,OAAA,GAAA8d,KAAAre,KAAA0sa,0BAAAz/Y,EAAA1sB,OAAA;AACA,OAAAwC,KAAA+b,IAAAsjK,EAAAs3P,EAAAC,GAAA,CACA,EAGA,IAAAyB,EAAArzZ,OAAA4jE,OAAA,CACAgQ,UAAA,KACAk1U,gBACAgD,mBACAG,qBACA0E,iBACAoC,gBACAjB,sBACAkB,kBACAI;AAOA,SAAAE,IACA,UAAA36a,MAAA,kFACA,CAMA,MAAA46a,EAUA,eAAAC,CAAAC,GACAzzZ,OAAA4rD,OAAA2nW,EAAAr2a,UAAAu2a,EACA,CACAx5a;AACA,WAAAs5E,CAAAt5E,GACAhC,KAAAgC,WAAA,EACA,CAEA,IAAA+wE,GAAA,CACA,OAAAhsB,GACA,OAAAs0X,GACA,CACA,KAAAnla,GACA,OAAAmla,GACA,CACA,MAAA3hY,GACA,OAAA2hY,GACA,CACA,GAAAzjY,GACA,OAAAyjY,GACA,CACA,IAAArvT,GACA,OAAAqvT,GACA,CACA,OAAAnjF,GACA,OAAAmjF,GACA,CACA,KAAAI,GACA,OAAAJ,GACA,EAEA,IAAAK,EAAA,CACA7lS,MAAAylS;AAGA,SAAAz+E,EAAA8+E,EAAAj8Z,EAAA/c,EAAAi5a,GACA,MAAArW,WAAYA,EAAAt4Y,OAAAu9Y,WAA+BmR,EAC3CjW,EAAAH,EAAAC,YAAAE,OACAkT,EAAA+C,EAAAl7V,SAAAk7V,EAAAl7V,QAAAz+E,QAAA25a,EAAAl7V,QAAAz+E,QAAA42a,SAAA;AACA,GAAAlT,GAAAhmZ,IAAAgmZ,EAAAhmZ,MAAA,MAAAA,GAAA8qZ,GAAAv9Y,EAAA1sB,OAAA,CACA,MAAAs7a,EAAAnW,EAAAoW,eAAAza,EAAA0a,cAAA1a,EAAA2a;AACA,IAAAJ,EAAA,CACA,MAAA30Z,EAAA40Z,EAAA5uZ,EAAAvN,EAAA/c;AACA,GAAAi2a,EAAA,CACA,MAAAxT,OAAwBA,GAAUG,EAAAC,aAClCY,QAAwBA,GAAWuV,EACnCM,EAAA7V,EAAAhma,MAAA,EAAA6mB,EAAA0iH,GAAA,GAAAx4H,UAAAoyM,UAAA7tD,IAAA2rQ,EAAAqQ,cAAAh8Q,EAAA0vQ,EAAA1lZ;AACAuH,EAAA0iH,IAAA5mI,KAAA+b,IAAA,EAAAm9Z;AACA,MAAAC,EAAA9V,EAAAhma,MAAA6mB,EAAA03B,IAAA4kK,UAAA7tD,IAAA2rQ,EAAAqQ,cAAAh8Q,EAAA0vQ,EAAA1lZ;AACAuH,EAAA03B,IAAA57C,KAAA+b,IAAA,EAAAo9Z,EACA,CACA,OAAAj1Z,CACA,CAAU,GAAAs+Y,EAAAuB,eAAA,CACV,MAAApla,EAAAurB,EAAA,GACAirD,EAAA,mBAAAx2E,EAAAy6a,UAAAz6a,EAAAy6a,SAAAz8Z;AACA,GAAAw4D,EAAA,CACA,MAAAh5D,EAAA28Z,EAAA5uZ,EAAAvN,EAAA/c,EAAAu1E,GACA/4D,EAAA08Z,EAAA5uZ,EAAAvN,EAAA/c,EAAAu1E;AACA,OACAyxD,GAAAzqH,EAAAyqH,GACAhrF,GAAAx/B,EAAAw/B,GAEA,CACA,CACA,CACA,OACAgrF,GAAA,EACAhrF,GAAA1xB,EAAA1sB,OAAA,EAEA,CACA,SAAA67a,EAAA1a,EAAAhiZ,EAAAkM,EAAA+0I,EAAAi7Q,GACA,MAAAzX,EAAAzC,EAAA2a,+BACA15a,EAAAipB,EAAAlM;AACA,QAAApf,EAAA,EAAA+ja,EAAAF,EAAA5ja,OAA2CD,EAAA+ja,IAAU/ja,EAAA,CACrD,MAAAyI,MAAgBA,EAAAkkB,QAAgBk3Y,EAAA7ja,IAChCqpI,GAAgBA,EAAAhrF,MAAWk+S,EAAAsnE,EAAA7ja,GAAAof,EAAA/c,EAAAi5a;AAC3B,QAAAj2V,EAAAgkD,EAAwBhkD,GAAAhnC,IAASgnC,EAAA,CACjC,MAAAjjE,EAAAuK,EAAA04D;AACAjjE,EAAAmM,MACA8xI,EAAAj+I,EAAA3Z,EAAA48E,EAEA,CACA,CACA,CAUA,SAAA22V,EAAA5a,EAAA91Y,EAAAlM,EAAA68Z,EAAAC,GACA,MAAA1gQ,EAAA;AACA,OAAA0gQ,GAAA9a,EAAA+a,cAAA7wZ,IAeAwwZ,EAAA1a,EAAAhiZ,EAAAkM,EAZA,SAAAlJ,EAAA+hZ,EAAA17Z,IACAyza,GAAAnb,EAAAqb,eAAAh6Z,EAAAg/Y,EAAA4K,UAAA,KAGA5pZ,EAAAm4Q,QAAAjvQ,EAAA5kB,EAAA4kB,EAAApa,EAAA+qa,IACAzgQ,EAAAl0K,KAAA,CACA8a,UACA+hZ,eACA17Z,SAGA,MAEA+yK,GAfAA,CAgBA,CA0DA,SAAA6gQ,EAAAjb,EAAA91Y,EAAAlM,EAAAk8Z,EAAAW,EAAAC,GACA,OAAAA,GAAA9a,EAAA+a,cAAA7wZ,GAGA,MAAAlM,GAAAk8Z,EAvCA,SAAAla,EAAA91Y,EAAAlM,EAAAk8Z,EAAAW,EAAAC,GACA,IAAA1gQ,EAAA;AACA,MAAA8gQ,EArDA,SAAAl9Z,GACA,MAAAm9Z,GAAA,IAAAn9Z,EAAA7V,QAAA,KACAiza,GAAA,IAAAp9Z,EAAA7V,QAAA;AACA,gBAAAkza,EAAAC,GACA,MAAA/6P,EAAA46P,EAAA95a,KAAAqN,IAAA2sa,EAAA/1a,EAAAg2a,EAAAh2a,GAAA,EACAqvF,EAAAymV,EAAA/5a,KAAAqN,IAAA2sa,EAAAvra,EAAAwra,EAAAxra,GAAA;AACA,OAAAzO,KAAA0mR,KAAA1mR,KAAAC,IAAAi/K,EAAA,GAAAl/K,KAAAC,IAAAqzF,EAAA,GACA,CACA,CARA,CAqDA32E;AACA,IAAAisH,EAAArgI,OAAAi9G;AA8BA,OADA6zT,EAAA1a,EAAAhiZ,EAAAkM,EA5BA,SAAAlJ,EAAA+hZ,EAAA17Z,GACA,MAAA8xR,EAAAn4Q,EAAAm4Q,QAAAjvQ,EAAA5kB,EAAA4kB,EAAApa,EAAA+qa;AACA,GAAAX,IAAA/gJ,EACA;AAEA,MAAAhqR,EAAA6R,EAAAu6Z,eAAAV;AAEA,IADAC,IAAA9a,EAAA+a,cAAA5ra,KACAgqR,EACA;AAEA,MAAAxyR,EAAAu0a,EAAAhxZ,EAAA/a;AACAxI,EAAAsjI,GACAmwC,EAAA,CACA,CACAp5J,UACA+hZ,eACA17Z,UAGA4iI,EAAAtjI,GACUA,IAAAsjI,GACVmwC,EAAAl0K,KAAA,CACA8a,UACA+hZ,eACA17Z,SAGA,GAEA+yK,CACA,CAlCA,CAuCA4lP,EAAA91Y,EAAAlM,EAAAk8Z,EAAAW,EAAAC,GA7DA,SAAA9a,EAAA91Y,EAAAlM,EAAA68Z,GACA,IAAAzgQ,EAAA;AAmBA,OADAsgQ,EAAA1a,EAAAhiZ,EAAAkM,EAjBA,SAAAlJ,EAAA+hZ,EAAA17Z,GACA,MAAA6jR,WAAgBA,EAAAiqJ,YAAyBn0Z,EAAAw6Z,SAAA,CACzC,aACA,YACAX,IACA9vJ,MAAgBA,GAAS40I,EAAA8b,kBAAAz6Z,EAAA,CACzB1b,EAAA4kB,EAAA5kB,EACAwK,EAAAoa,EAAApa;AAEA6vZ,EAAA+V,cAAA3qJ,EAAAG,EAAAiqJ,IACA/6P,EAAAl0K,KAAA,CACA8a,UACA+hZ,eACA17Z,SAGA,GAEA+yK,CACA,CArBA,CA6DA4lP,EAAA91Y,EAAAlM,EAAA68Z,GAFA,EAGA,CACA,SAAAa,EAAA1b,EAAA91Y,EAAAlM,EAAAk8Z,EAAAW,GACA,MAAAzgQ,EAAA,GACAuhQ,EAAA,MAAA39Z,EAAA;AACA,IAAA49Z;AAWA,OAVAlB,EAAA1a,EAAAhiZ,EAAAkM,EAAA,CAAAlJ,EAAA+hZ,EAAA17Z,KACA2Z,EAAA26Z,IAAA36Z,EAAA26Z,GAAAzxZ,EAAAlM,GAAA68Z,KACAzgQ,EAAAl0K,KAAA,CACA8a,UACA+hZ,eACA17Z,UAEAu0a,KAAA56Z,EAAAm4Q,QAAAjvQ,EAAA5kB,EAAA4kB,EAAApa,EAAA+qa,MAGAX,IAAA0B,EACA,GAEAxhQ,CACA,CACA,IAAAg4G,EAAA,CACAsoJ,2BACA9jI,MAAA,CACA,KAAAvvS,CAAA24Z,EAAArha,EAAA2B,EAAAu6a,GACA,MAAA3wZ,EAAAy1Y,EAAAkc,oBAAAl9a,EAAAqha,GACAhiZ,EAAA1d,EAAA0d,MAAA,IACA88Z,EAAAx6a,EAAAw6a,qBACA1gQ,EAAA95K,EAAA45a,UAAAU,EAAA5a,EAAA91Y,EAAAlM,EAAA68Z,EAAAC,GAAAG,EAAAjb,EAAA91Y,EAAAlM,KAAA68Z,EAAAC,GACAr6Z,EAAA;AACA,OAAA25J,EAAAv7K,QAGAmha,EAAA2a,+BAAA7ha,QAAAm/R,IACA,MAAA5wS,EAAA+yK,EAAA,GAAA/yK,MACA2Z,EAAAi3R,EAAA1sR,KAAAlkB;AACA2Z,MAAAmM,MACA1M,EAAAva,KAAA,CACA8a,UACA+hZ,aAAA9qH,EAAA5wS,MACAA,YAIAoZ,GAbA,EAcA,EACA,OAAAs+D,CAAAihV,EAAArha,EAAA2B,EAAAu6a,GACA,MAAA3wZ,EAAAy1Y,EAAAkc,oBAAAl9a,EAAAqha,GACAhiZ,EAAA1d,EAAA0d,MAAA,KACA88Z,EAAAx6a,EAAAw6a;AACA,IAAA1gQ,EAAA95K,EAAA45a,UAAAU,EAAA5a,EAAA91Y,EAAAlM,EAAA68Z,EAAAC,GAAAG,EAAAjb,EAAA91Y,EAAAlM,KAAA68Z,EAAAC;AACA,GAAA1gQ,EAAAv7K,OAAA,GACA,MAAAkka,EAAA3oP,EAAA,GAAA2oP,aACAx3Y,EAAAy0Y,EAAAsH,eAAAvE,GAAAx3Y;AACA6uJ,EAAA;AACA,QAAAx7K,EAAA,EAA+BA,EAAA2sB,EAAA1sB,SAAiBD,EAChDw7K,EAAAl0K,KAAA,CACA8a,QAAAuK,EAAA3sB,GACAmka,eACA17Z,MAAAzI,GAGA,CACA,OAAAw7K,CACA,EACApmB,MAAA,CAAAgsQ,EAAArha,EAAA2B,EAAAu6a,IAIAD,EAAA5a,EAHAL,EAAAkc,oBAAAl9a,EAAAqha,GACA1/Z,EAAA0d,MAAA,KAEA68Z,EADAv6a,EAAAw6a,sBAGA,OAAAgB,CAAA9b,EAAArha,EAAA2B,EAAAu6a,GACA,MAAA3wZ,EAAAy1Y,EAAAkc,oBAAAl9a,EAAAqha,GACAhiZ,EAAA1d,EAAA0d,MAAA,KACA88Z,EAAAx6a,EAAAw6a;AACA,OAAAG,EAAAjb,EAAA91Y,EAAAlM,EAAA1d,EAAA45a,UAAAW,EAAAC,EACA,EACAx1a,EAAA,CAAA06Z,EAAArha,EAAA2B,EAAAu6a,IAEAa,EAAA1b,EADAL,EAAAkc,oBAAAl9a,EAAAqha,GACA,IAAA1/Z,EAAA45a,UAAAW,GAEA/qa,EAAA,CAAAkwZ,EAAArha,EAAA2B,EAAAu6a,IAEAa,EAAA1b,EADAL,EAAAkc,oBAAAl9a,EAAAqha,GACA,IAAA1/Z,EAAA45a,UAAAW;AAKA,MAAAkB,EAAA,CACA,OACA,MACA,QACA;AAEA,SAAAC,EAAA5jS,EAAAluH,GACA,OAAAkuH,EAAAvzH,OAAAjV,KAAAgpC,MAAA1uB,EACA,CACA,SAAA+xZ,EAAA7jS,EAAAp6H,GACA,OAAAo6H,EAAAvzH,OAAAjV,IAAA,IAAAmsa,EAAA5za,QAAAyH,EAAAgpC,MAAAhpC,EAAAuxP,IAAAnjP,SACA,CACA,SAAAk+Z,EAAA9jS,EAAA3oI,GACA,OAAA2oI,EAAA3nH,KAAA,CAAArxB,EAAAma,KACA,MAAAo5Q,EAAAljR,EAAA8J,EAAAna,EACA+qT,EAAA16S,EAAArQ,EAAAma;AACA,OAAAo5Q,EAAA/pR,SAAAuhT,EAAAvhT,OAAA+pR,EAAAtrR,MAAA8iT,EAAA9iT,MAAAsrR,EAAA/pR,OAAAuhT,EAAAvhT,QAEA,CA0EA,SAAAuza,EAAAloZ,EAAA22Y,EAAAxra,EAAAma,GACA,OAAAlY,KAAA+b,IAAA6W,EAAA70B,GAAAwra,EAAAxra,IAAAiC,KAAA+b,IAAA6W,EAAA1a,GAAAqxZ,EAAArxZ,GACA,CACA,SAAA6ia,EAAAnoZ,EAAAooZ,GACApoZ,EAAA9nB,IAAA9K,KAAA+b,IAAA6W,EAAA9nB,IAAAkwa,EAAAlwa,KACA8nB,EAAA/nB,KAAA7K,KAAA+b,IAAA6W,EAAA/nB,KAAAmwa,EAAAnwa,MACA+nB,EAAA7nB,OAAA/K,KAAA+b,IAAA6W,EAAA7nB,OAAAiwa,EAAAjwa,QACA6nB,EAAA3nB,MAAAjL,KAAA+b,IAAA6W,EAAA3nB,MAAA+va,EAAA/va,MACA,CACA,SAAAgwa,EAAA1R,EAAA13V,EAAA4vL,EAAAugK,GACA,MAAAzqX,IAAYA,EAAAuoN,OAAa2B,EACzB7uO,EAAA22Y,EAAA32Y;AACA,IAAA0rY,EAAAxsT,SAAAv6D,GAAA,CACAkqN,EAAAnmP,OACAiuZ,EAAAhyX,IAAAkqN,EAAAnmP;AAEA,MAAA4rC,EAAA86W,EAAAvgK,EAAAv6M,QAAA,CACA5rC,KAAA,EACA8hI,MAAA;AAEAl2F,EAAA5rC,KAAAtb,KAAA+b,IAAAmrC,EAAA5rC,KAAAmmP,EAAAlqG,WAAAuoG,EAAAvhP,OAAAuhP,EAAA90P,OACAy2P,EAAAnmP,KAAA4rC,EAAA5rC,KAAA4rC,EAAAk2F,MACAmsR,EAAAhyX,IAAAkqN,EAAAnmP,IACA,CACAwkP,EAAAm3F,YACA8jF,EAAAnoZ,EAAAktO,EAAAm3F;AAEA,MAAAikF,EAAAl7a,KAAA+b,IAAA,EAAA81D,EAAAspW,WAAAL,EAAAloZ,EAAA22Y,EAAA,iBACA6R,EAAAp7a,KAAA+b,IAAA,EAAA81D,EAAAwpW,YAAAP,EAAAloZ,EAAA22Y,EAAA,iBACA+R,EAAAJ,IAAA3R,EAAAz3Z,EACAypa,EAAAH,IAAA7R,EAAAvra;AAGA,OAFAura,EAAAz3Z,EAAAopa,EACA3R,EAAAvra,EAAAo9a,EACA35K,EAAAlqG,WAAA,CACAkzG,KAAA6wK,EACA12X,MAAA22X,GACM,CACN9wK,KAAA8wK,EACA32X,MAAA02X,EAEA,CAaA,SAAAE,GAAAjkR,EAAAgyQ,GACA,MAAA32Y,EAAA22Y,EAAA32Y;AAaA,OAZA,SAAAo1J,GACA,MAAA+/E,EAAA,CACAl9P,KAAA,EACAC,IAAA,EACAG,MAAA,EACAF,OAAA;AAKA,OAHAi9K,EAAAvwK,QAAA8/B,IACAwwN,EAAAxwN,GAAAv3C,KAAA+b,IAAAwtZ,EAAAhyX,GAAA3kB,EAAA2kB,MAEAwwN,CACA,CAXA,CAYAxwG,EAAA,CACA,OACA,SACA,CACA,MACA,UAEA,CACA,SAAAkkR,GAAAC,EAAAnS,EAAA13V,EAAAmwV,GACA,MAAA2Z,EAAA;AACA,IAAAp+a,EAAA+ja,EAAA7/J,EAAA3B,EAAA87K,EAAAvkR;AACA,IAAA95J,EAAA,EAAA+ja,EAAAoa,EAAAl+a,OAAAo+a,EAAA,EAA+Cr+a,EAAA+ja,IAAU/ja,EAAA,CACzDkkQ,EAAAi6K,EAAAn+a,GACAuiQ,EAAA2B,EAAA3B,IACAA,EAAAlyP,OAAA6zP,EAAAz2P,OAAAu+Z,EAAAz3Z,EAAA2vP,EAAAljP,QAAAgrZ,EAAAvra,EAAAw9a,GAAA/5K,EAAAlqG,WAAAgyQ;AACA,MAAA9+J,KAAgBA,EAAA7lN,SAAgBq2X,EAAA1R,EAAA13V,EAAA4vL,EAAAugK;AAChC4Z,GAAAnxK,GAAAkxK,EAAAn+a,OACA65J,KAAAzyG,EACAk7M,EAAA+7K,UACAF,EAAA92a,KAAA48P,EAEA,CACA,OAAAm6K,GAAAH,GAAAE,EAAApS,EAAA13V,EAAAmwV,IAAA3qQ,CACA,CACA,SAAAykR,GAAAh8K,EAAAj1P,EAAAC,EAAAE,EAAAuT,GACAuhP,EAAAh1P,MACAg1P,EAAAj1P,OACAi1P,EAAA70P,MAAAJ,EAAAG,EACA80P,EAAA/0P,OAAAD,EAAAyT,EACAuhP,EAAA90P,QACA80P,EAAAvhP,QACA,CACA,SAAAw9Z,GAAAL,EAAAnS,EAAA13V,EAAAmwV,GACA,MAAAga,EAAAnqW,EAAA7zD;AACA,IAAA/Z,EAAUA,EAAAwK,KAAS86Z;AACnB,UAAA9nK,KAAAi6K,EAAA,CACA,MAAA57K,EAAA2B,EAAA3B,IACA54M,EAAA86W,EAAAvgK,EAAAv6M,QAAA,CACAk2F,MAAA,EACA6+R,OAAA,EACA10a,OAAA,GAEAA,EAAAk6P,EAAAy6K,YAAAh1X,EAAA3/C,QAAA;AACA,GAAAk6P,EAAAlqG,WAAA,CACA,MAAAvsJ,EAAAu+Z,EAAAz3Z,EAAAvK,EACAgX,EAAA2oC,EAAA5rC,MAAAwkP,EAAAvhP;AACA+/Y,EAAA0L,QAAA9iX,EAAA/qC,SACA1N,EAAAy4C,EAAA/qC,OAEA2jP,EAAA+7K,SACAC,GAAAh8K,EAAAk8K,EAAAnxa,KAAA4D,EAAAojE,EAAAspW,WAAAa,EAAA/wa,MAAA+wa,EAAAnxa,KAAA0T,GAEAu9Z,GAAAh8K,EAAAypK,EAAA1+Z,KAAAq8C,EAAA+0X,OAAAxta,EAAAzD,EAAAuT,GAEA2oC,EAAA/qC,MAAA1N,EACAy4C,EAAA+0X,QAAAjxa,EACAyD,EAAAqxP,EAAA/0P,MACA,KAAU,CACV,MAAAwT,EAAAgrZ,EAAAvra,EAAAuJ,EACAyD,EAAAk8C,EAAA5rC,MAAAwkP,EAAA90P;AACAszZ,EAAA0L,QAAA9iX,EAAA/qC,SACAlY,EAAAijD,EAAA/qC,OAEA2jP,EAAA+7K,SACAC,GAAAh8K,EAAA77P,EAAA+3a,EAAAlxa,IAAAE,EAAA6mE,EAAAwpW,YAAAW,EAAAjxa,OAAAixa,EAAAlxa,KAEAgxa,GAAAh8K,EAAA77P,EAAAsla,EAAAz+Z,IAAAo8C,EAAA+0X,OAAAjxa,EAAAuT,GAEA2oC,EAAA/qC,MAAAlY,EACAijD,EAAA+0X,QAAA19Z,EACAta,EAAA67P,EAAA70P,KACA,CACA,CACAs+Z,EAAAtla,IACAsla,EAAA96Z,GACA,CACA,IAAA0ta,GAAA,CACA,MAAAC,CAAAzd,EAAAtpQ,GACAspQ,EAAA+c,QACA/c,EAAA+c,MAAA,IAEArmR,EAAAwmR,SAAAxmR,EAAAwmR,aACAxmR,EAAAxsI,SAAAwsI,EAAAxsI,UAAA,MACAwsI,EAAA9tJ,OAAA8tJ,EAAA9tJ,QAAA,EACA8tJ,EAAAgnR,QAAAhnR,EAAAgnR,SAAA,WACA,OACA,CACApka,EAAA,EACA,IAAA+mZ,CAAAuK,GACAl0Q,EAAA2pQ,KAAAuK,EACA,GAGA,EACA5K,EAAA+c,MAAA72a,KAAAwwJ,EACA,EACA,SAAAinR,CAAA3d,EAAA4d,GACA,MAAAv2a,EAAA24Z,EAAA+c,MAAA/c,EAAA+c,MAAA50a,QAAAy1a,IAAA,GACA,IAAAv2a,GACA24Z,EAAA+c,MAAA30a,OAAAf,EAAA,EAEA,EACA,SAAAqjY,CAAAs1B,EAAAtpQ,EAAAp2J,GACAo2J,EAAAwmR,SAAA58a,EAAA48a,SACAxmR,EAAAxsI,SAAA5pB,EAAA4pB,SACAwsI,EAAA9tJ,OAAAtI,EAAAsI,MACA,EACA,MAAAqG,CAAA+wZ,EAAA3zZ,EAAAuT,EAAAoU,GACA,IAAAgsY,EACA;AAEA,MAAA3gZ,EAAAsgZ,EAAAke,UAAA7d,EAAA1/Z,QAAAwiQ,OAAAzjP,SACA2T,EAAA3xB,KAAA+b,IAAA/Q,EAAAgT,EAAAhT,MAAA,GACA0mB,EAAA1xB,KAAA+b,IAAAwC,EAAAP,EAAAO,OAAA,GACAm9Z,EAvMA,SAAAA,GACA,MAAAe,EAxDA,SAAAf,GACA,MAAAe,EAAA;AACA,IAAAl/a,EAAA+ja,EAAAxhK,EAAAvoN,EAAA2P,EAAAg1X;AACA,IAAA3+a,EAAA,EAAA+ja,GAAAoa,GAAA,IAAAl+a,OAA4CD,EAAA+ja,IAAU/ja,EACtDuiQ,EAAA47K,EAAAn+a,KACWsrB,SAAA0uB,EAAAt4C,SAA2BioD,QAAAg1X,cAAA,IAA6Bp8K,GACnE28K,EAAA53a,KAAA,CACAmB,MAAAzI,EACAuiQ,MACAvoN,MACAggH,WAAAuoG,EAAA0uG,eACAjnW,OAAAu4P,EAAAv4P,OACA2/C,SAAA3P,EAAA2P,EACAg1X;AAGA,OAAAO,CACA,CAjBA,CAwDAf,GACAG,EAAAhB,EAAA4B,EAAAj5Z,OAAA4gQ,KAAAtkB,IAAA+7K,cACAhxa,EAAAgwa,EAAAF,EAAA8B,EAAA,YACAxxa,EAAA4va,EAAAF,EAAA8B,EAAA,UACA3xa,EAAA+va,EAAAF,EAAA8B,EAAA,WACA1xa,EAAA8va,EAAAF,EAAA8B,EAAA,WACAC,EAAA9B,EAAA6B,EAAA,KACAE,EAAA/B,EAAA6B,EAAA;AACA,OACAZ,WACAe,WAAA/xa,EAAA6E,OAAA5E,GACA+xa,eAAA5xa,EAAAyE,OAAAita,GAAAjta,OAAA3E,GAAA2E,OAAAgta,GACAnT,UAAAoR,EAAA8B,EAAA,aACAK,SAAAjya,EAAA6E,OAAAzE,GAAAyE,OAAAita,GACAplR,WAAAzsJ,EAAA4E,OAAA3E,GAAA2E,OAAAgta,GAEA,CAjBA,CAuMA/d,EAAA+c,OACAqB,EAAArB,EAAAoB,SACAE,EAAAtB,EAAAnkR;AACA+mQ,EAAA2e,KAAAte,EAAA+c,MAAA57K,IACA,mBAAAA,EAAAo9K,cACAp9K,EAAAo9K;AAGA,MAAAC,EAAAJ,EAAApha,OAAA,CAAAg9L,EAAAyrE,MAAAtkB,IAAA7gQ,cAAAmlR,EAAAtkB,IAAA7gQ,QAAAmjB,QAAAu2L,IAAA,QACA9mI,EAAA7sD,OAAA4jE,OAAA,CACAuyV,WAAAnwa,EACAqwa,YAAA98Z,EACAP,UACA2T,iBACAD,kBACA0rZ,aAAAzrZ,EAAA,EAAAwrZ,EACAE,cAAA3rZ,EAAA,IAEAkB,EAAA5N,OAAA4rD,OAAA,GAA2C5yD;AAC3C+8Z,EAAAnoZ,EAAA0rY,EAAAke,UAAA7pZ;AACA,MAAA42Y,EAAAvkZ,OAAA4rD,OAAA,CACAh+C,aACA9gB,EAAA6f,EACA3zB,EAAA0zB,EACAztB,EAAA+Z,EAAAnT,KACA4D,EAAAuP,EAAAlT,KACSkT,GACTgkZ,EArPA,SAAAma,EAAAtqW,GACA,MAAAmwV,EAnBA,SAAAma,GACA,MAAAna,EAAA;AACA,UAAA59I,KAAA+3J,EAAA,CACA,MAAAj1X,MAAgBA,EAAA3P,MAAA2kY,eAA6B93J;AAC7C,IAAAl9N,IAAAwzX,EAAA14a,SAAAu1C,GACA;AAEA,MAAA+5J,EAAA0wN,EAAA96W,KAAA86W,EAAA96W,GAAA,CACAk2F,MAAA,EACA6+R,OAAA,EACA10a,OAAA,EACA+T,KAAA;AAEAg2L,EAAAl0D,QACAk0D,EAAA/pM,QAAA20a,CACA,CACA,OAAAla,CACA,CAjBA,CAmBAma,IACAiB,aAAYA,EAAAC,iBAAgCxrW;AAC5C,IAAAt0E,EAAA+ja,EAAA7/J;AACA,IAAAlkQ,EAAA,EAAA+ja,EAAA6a,EAAA3+a,OAAsCD,EAAA+ja,IAAU/ja,EAAA,CAChDkkQ,EAAA06K,EAAA5+a;AACA,MAAAs+a,SAAgBA,GAAYp6K,EAAA3B,IAC5B54M,EAAA86W,EAAAvgK,EAAAv6M,OACA0kB,EAAA1kB,GAAAu6M,EAAAy6K,YAAAh1X,EAAA3/C;AACAk6P,EAAAlqG,YACAkqG,EAAAz2P,MAAA4gE,IAAAwxW,EAAAvB,GAAAhqW,EAAAlgD,eACA8vO,EAAAljP,OAAA8+Z,IAEA57K,EAAAz2P,MAAAoya,EACA37K,EAAAljP,OAAAqtD,IAAAyxW,EAAAxB,GAAAhqW,EAAAngD,gBAEA,CACA,OAAAswY,CACA,CAlBA,CAqPA+a,EAAArta,OAAAsta,GAAAnrW;AACA4pW,GAAAC,EAAAG,SAAAtS,EAAA13V,EAAAmwV,GACAyZ,GAAAsB,EAAAxT,EAAA13V,EAAAmwV,GACAyZ,GAAAuB,EAAAzT,EAAA13V,EAAAmwV,IACAyZ,GAAAsB,EAAAxT,EAAA13V,EAAAmwV,GA3KA,SAAAuH,GACA,MAAA32Y,EAAA22Y,EAAA32Y;AACA,SAAA0qZ,EAAA/lY,GACA,MAAAu0D,EAAA9rG,KAAA+b,IAAA6W,EAAA2kB,GAAAgyX,EAAAhyX,GAAA;AAEA,OADAgyX,EAAAhyX,IAAAu0D,EACAA,CACA,CACAy9T,EAAA96Z,GAAA6ua,EAAA,OACA/T,EAAAtla,GAAAq5a,EAAA,QACAA,EAAA,SACAA,EAAA,SACA,CAXA,CA6KA/T,GACAwS,GAAAL,EAAAkB,WAAArT,EAAA13V,EAAAmwV,GACAuH,EAAAtla,GAAAsla,EAAAz3Z,EACAy3Z,EAAA96Z,GAAA86Z,EAAAvra,EACA+9a,GAAAL,EAAAmB,eAAAtT,EAAA13V,EAAAmwV,GACArD,EAAA4K,UAAA,CACA1+Z,KAAA0+Z,EAAA1+Z,KACAC,IAAAy+Z,EAAAz+Z,IACAG,MAAAs+Z,EAAA1+Z,KAAA0+Z,EAAAz3Z,EACA/G,OAAAw+Z,EAAAz+Z,IAAAy+Z,EAAAvra,EACAugB,OAAAgrZ,EAAAvra,EACAgN,MAAAu+Z,EAAAz3Z,GAEAwsZ,EAAA2e,KAAAvB,EAAAnS,UAAA9nK,IACA,MAAA3B,EAAA2B,EAAA3B;AACA96O,OAAA4rD,OAAAkvL,EAAA6+J,EAAA4K,WACAzpK,EAAAlyP,OAAA27Z,EAAAz3Z,EAAAy3Z,EAAAvra,EAAA,CACA6M,KAAA,EACAC,IAAA,EACAG,MAAA,EACAF,OAAA,KAGA;AAGA,MAAAwya,GACA,cAAAC,CAAAC,EAAAvlJ,GAAA,CACA,cAAAwlJ,CAAA7nZ,GACA,QACA,CACA,gBAAAzK,CAAAuzY,EAAA59Z,EAAA83J,GAAA,CACA,mBAAApsI,CAAAkyY,EAAA59Z,EAAA83J,GAAA,CACA,mBAAA8kR,GACA,QACA,CACA,cAAAC,CAAAj+Z,EAAA3U,EAAAuT,EAAA25Q,GAGA,OAFAltR,EAAAhL,KAAA+b,IAAA,EAAA/Q,GAAA2U,EAAA3U,OACAuT,KAAAoB,EAAApB,OACA,CACAvT,QACAuT,OAAAve,KAAA+b,IAAA,EAAAm8Q,EAAAl4R,KAAAE,MAAA8K,EAAAktR,GAAA35Q,GAEA,CACA,UAAAs/Z,CAAAJ,GACA,QACA,CACA,YAAAK,CAAArpZ,GACA,EAGA,MAAAspZ,WAAAR,GACA,cAAAC,CAAAnoR,GACA,OAAAA,KAAAiyQ,YAAAjyQ,EAAAiyQ,WAAA,WACA,CACA,YAAAwW,CAAArpZ,GACAA,EAAAx1B,QAAAuha,YACA,EAGA,MAAAwd,GAAA,WACAC,GAAA,CACAnrL,WAAA,YACAU,UAAA,YACAC,SAAA,UACAmC,aAAA,aACA7C,YAAA,YACAmrL,YAAA,YACAC,UAAA,UACAtoL,aAAA,WACAuoL,WAAA,YAEAC,GAAAz+a,GAAA,OAAAA,GAAA,KAAAA,EAoCA0+a,KAAAhgB,EAAAigB,8BAAA,CACAn6P;AAOA,SAAAvpB,GAAA8jQ,EAAA59Z,EAAA83J,GACA8lQ,KAAA8e,QACA9e,EAAA8e,OAAAhxZ,oBAAA1rB,EAAA83J,EAAAylR,GAEA,CAYA,SAAAE,GAAAj6P,EAAAk5P,GACA,UAAAt8Z,KAAAojK,EACA,GAAApjK,IAAAs8Z,GAAAt8Z,EAAA1N,SAAAgqa,GACA,QAGA,CACA,SAAAgB,GAAA9f,EAAA59Z,EAAA83J,GACA,MAAA4kR,EAAA9e,EAAA8e,OACAiB,EAAA,IAAA77P,iBAAAz2J,IACA,IAAAqzD;AACA,UAAA9lC,KAAAvtB,EACAqzD,KAAA++V,GAAA7kY,EAAAupI,WAAAu6P,GACAh+V,MAAA++V,GAAA7kY,EAAAwpI,aAAAs6P;AAEAh+V,GACAo5E;AAOA,OAJA6lR,EAAAnyZ,QAAA3qB,SAAA,CACAwhL,aACAC,aAEAq7P,CACA,CACA,SAAAC,GAAAhgB,EAAA59Z,EAAA83J,GACA,MAAA4kR,EAAA9e,EAAA8e,OACAiB,EAAA,IAAA77P,iBAAAz2J,IACA,IAAAqzD;AACA,UAAA9lC,KAAAvtB,EACAqzD,KAAA++V,GAAA7kY,EAAAwpI,aAAAs6P,GACAh+V,MAAA++V,GAAA7kY,EAAAupI,WAAAu6P;AAEAh+V,GACAo5E;AAOA,OAJA6lR,EAAAnyZ,QAAA3qB,SAAA,CACAwhL,aACAC,aAEAq7P,CACA,CACA,MAAAE,GAAA,IAAAtqZ;AACA,IAAAuqZ,GAAA;AACA,SAAAC,KACA,MAAAC,EAAAr4a,OAAAs4a;AACAD,IAAAF,KAGAA,GAAAE,EACAH,GAAAnna,QAAA,CAAA8/O,EAAAonK,KACAA,EAAAsgB,0BAAAF,GACAxnL,MAGA,CAaA,SAAA2nL,GAAAvgB,EAAA59Z,EAAA83J,GACA,MAAA4kR,EAAA9e,EAAA8e,OACA7wa,EAAA6wa,GAAAnf,EAAA6gB,eAAA1B;AACA,IAAA7wa,EACA;AAEA,MAAA2qP,EAAA+mK,EAAA8gB,UAAA,CAAAp0a,EAAAuT,KACA,MAAAzM,EAAAlF,EAAA6a;AACAoxI,EAAA7tJ,EAAAuT,GACAzM,EAAAlF,EAAA6a,aACAoxI,KAEKnyJ,QACLg4a,EAAA,IAAA5zZ,eAAAsB,IACA,MAAAutB,EAAAvtB,EAAA,GACAphB,EAAA2uC,EAAA0lY,YAAAr0a,MACAuT,EAAAo7B,EAAA0lY,YAAA9ga;AACA,IAAAvT,GAAA,IAAAuT,GAGAg5O,EAAAvsP,EAAAuT;AAIA,OAFAmga,EAAAnyZ,QAAA3f,GAlCA,SAAA+xZ,EAAApnK,GACAqnL,GAAAtja,MACA5U,OAAA0kB,iBAAA,SAAA0zZ,IAEAF,GAAA90Z,IAAA60Y,EAAApnK,EACA,CALA,CAmCAonK,EAAApnK,GACAmnL,CACA,CACA,SAAAY,GAAA3gB,EAAA59Z,EAAA29a,GACAA,GACAA,EAAA9yZ,aAEA,WAAA7qB,GApCA,SAAA49Z,GACAigB,GAAAr8V,OAAAo8U,GACAigB,GAAAtja,MACA5U,OAAA+lB,oBAAA,SAAAqyZ,GAEA,CALA,CAqCAngB,EAEA,CACA,SAAA4gB,GAAA5gB,EAAA59Z,EAAA83J,GACA,MAAA4kR,EAAA9e,EAAA8e,OACAr2O,EAAAk3N,EAAA8gB,UAAAz4a,IACA,OAAAg4Z,EAAAjnQ,KACAmB,EAtHA,SAAAlyJ,EAAAg4Z,GACA,MAAA59Z,EAAAk9a,GAAAt3a,EAAA5F,OAAA4F,EAAA5F,MACAkD,EAAYA,EAAAwK,KAAS6vZ,EAAAkc,oBAAA7za,EAAAg4Z;AACrB,OACA59Z,OACA49Z,QACA9yT,OAAAllG,EACA1C,OAAAyqB,IAAAzqB,IAAA,KACAwK,OAAAigB,IAAAjgB,IAAA,KAEA,CAVA,CAsHA9H,EAAAg4Z,KAEKA;AAEL,OApIA,SAAAx9Y,EAAApgB,EAAA83J,GACA13I,GACAA,EAAAiK,iBAAArqB,EAAA83J,EAAAylR,GAEA,CAJA,CAmIAb,EAAA18a,EAAAqmM,GACAA,CACA,CACA,MAAAo4O,WAAAjC,GACA,cAAAC,CAAAC,EAAAvlJ,GACA,MAAAriQ,EAAA4nZ,KAAAnW,YAAAmW,EAAAnW,WAAA;AACA,OAAAzxY,KAAA4nZ,YA/KA,SAAAA,EAAAvlJ,GACA,MAAAttR,EAAA6ya,EAAA7ya,MACA60a,EAAAhC,EAAA1xa,aAAA,UACA2za,EAAAjC,EAAA1xa,aAAA;AAcA,GAbA0xa,EAAAO,IAAA,CACAjnR,QAAA,CACAx4I,OAAAkha,EACAz0a,MAAA00a,EACA90a,MAAA,CACAwX,QAAAxX,EAAAwX,QACA7D,OAAA3T,EAAA2T,OACAvT,MAAAJ,EAAAI,SAIAJ,EAAAwX,QAAAxX,EAAAwX,SAAA,QACAxX,EAAAy+W,UAAAz+W,EAAAy+W,WAAA,aACAg1D,GAAAqB,GAAA,CACA,MAAAC,EAAArhB,EAAAshB,aAAAnC,EAAA;KACA/uZ,IAAAixZ,IACAlC,EAAAzya,MAAA20a,EAEA,CACA,GAAAtB,GAAAoB,GACA,QAAAhC,EAAA7ya,MAAA2T,OACAk/Z,EAAAl/Z,OAAAk/Z,EAAAzya,OAAAktR,GAAA;IACU,CACV,MAAA2nJ,EAAAvhB,EAAAshB,aAAAnC,EAAA;KACA/uZ,IAAAmxZ,IACApC,EAAAl/Z,OAAAsha,EAEA,CAGA,CAlCA,CAgLApC,EAAAvlJ,GACAriQ,GAEA,IACA,CACA,cAAA6nZ,CAAA7nZ,GACA,MAAA4nZ,EAAA5nZ,EAAA4nZ;AACA,IAAAA,EAAAO,IACA;AAEA,MAAAjnR,EAAA0mR,EAAAO,IAAAjnR,QACA,CACA,SACA,SACAt/I,QAAA0wK,IACA,MAAAvoL,EAAAm3J,EAAAoxB;AACAm2O,EAAAqQ,cAAA/ua,GACA69a,EAAA/2V,gBAAAyhG,GAEAs1P,EAAApya,aAAA88K,EAAAvoL;AAGA,MAAAgL,EAAAmsJ,EAAAnsJ,OAAA;AAMA,OALAoa,OAAA2wB,KAAA/qC,GAAA6M,QAAAye,IACAunZ,EAAA7ya,MAAAsrB,GAAAtrB,EAAAsrB,KAEAunZ,EAAAzya,MAAAyya,EAAAzya,aACAyya,EAAAO,MAEA,CACA,gBAAA5yZ,CAAAuzY,EAAA59Z,EAAA83J,GACA57J,KAAAwvB,oBAAAkyY,EAAA59Z;AACA,MAAA++a,EAAAnhB,EAAAohB,WAAAphB,EAAAohB,SAAA,IAMAniR,EALA,CACAoiR,OAAAvB,GACA/3F,OAAAi4F,GACApnL,OAAA2nL,IAEAn+a,IAAAw+a;AACAO,EAAA/+a,GAAA68J,EAAA+gQ,EAAA59Z,EAAA83J,EACA,CACA,mBAAApsI,CAAAkyY,EAAA59Z,GACA,MAAA++a,EAAAnhB,EAAAohB,WAAAphB,EAAAohB,SAAA,IACA34O,EAAA04O,EAAA/+a;AACAqmM,KAGA,CACA44O,OAAAV,GACA54F,OAAA44F,GACA/nL,OAAA+nL,IAEAv+a,IAAA85J,IACA8jQ,EAAA59Z,EAAAqmM,GACA04O,EAAA/+a,QAAA2tB,EACA,CACA,mBAAAivZ,GACA,OAAAj3a,OAAAs4a,gBACA,CACA,cAAApB,CAAAH,EAAAzya,EAAAuT,EAAA25Q,GACA,OAAAomI,EAAAsf,eAAAH,EAAAzya,EAAAuT,EAAA25Q,EACA,CACA,UAAA2lJ,CAAAJ,GACA,MAAA7wa,EAAA6wa,GAAAnf,EAAA6gB,eAAA1B;AACA,SAAA7wa,MAAAukE,YACA,EAGA,SAAA8uW,GAAAxC,GACA,OAAAnf,EAAA4hB,mBAAA,oBAAAC,iBAAA1C,aAAA0C,gBACApC,GAEAyB,EACA,CAEA,MAAA59Z,GACA6hZ,gBAAA;AACAA,0BAAA/0Y;AACAzqB;AACAwK;AACAguJ;AACAx9J;AACA2ha;AACA,eAAAwf,CAAA5G,GACA,MAAAv1a,EAAgBA,EAAAwK,KAASxR,KAAAk9a,SAAA,CACzB,IACA,KACAX;AACA,OACAv1a,IACAwK,IAEA,CACA,QAAAy3G,GACA,OAAAo4S,EAAA3sU,SAAA10F,KAAAgH,IAAAq6Z,EAAA3sU,SAAA10F,KAAAwR,EACA,CACA,QAAA0ra,CAAA5yX,EAAAymH,GACA,MAAA4wP,EAAA3ha,KAAA2ja;AACA,IAAA5yP,IAAA4wP,EAEA,OAAA3ha;AAEA,MAAA4yQ,EAAA;AAIA,OAHAtoN,EAAA9vC,QAAA0wK,IACA0nF,EAAA1nF,GAAAy2O,EAAAz2O,IAAAy2O,EAAAz2O,GAAA1rB,SAAAmiQ,EAAAz2O,GAAAiqN,IAAAn1Y,KAAAkrL,KAEA0nF,CACA,EA2EA,SAAA/jP,GAAA8gZ,EAAAyT,EAAA9O,EAAA+O,EAAAC,GACA,MAAApka,EAAAmiZ,EAAA4G,eAAAob,EAAA,GACAlka,EAAApc,KAAA8b,IAAAwiZ,EAAA4G,eAAAqb,EAAA3T,EAAApva,QAAAova,EAAApva;AACA,IACAA,EAAAD,EAAA24F,EADAknD,EAAA;AAQA,IANAm0R,EAAAvxa,KAAAq3G,KAAAk6T,GACAgP,IACA/ib,EAAA+ib,EAAAD,EACA/O,EAAA/za,EAAAwC,KAAAE,MAAA1C,EAAA+za,IAEAr7U,EAAA/5E,EACA+5E,EAAA,GACAknD,IACAlnD,EAAAl2F,KAAAG,MAAAgc,EAAAihI,EAAAm0R;AAEA,IAAAh0a,EAAAyC,KAAA+b,IAAAI,EAAA,GAAgC5e,EAAA6e,EAAS7e,IACzCA,IAAA24F,IACAmqV,EAAAx7a,KAAA+na,EAAArva,IACA6/I,IACAlnD,EAAAl2F,KAAAG,MAAAgc,EAAAihI,EAAAm0R,GAGA,CAeA,MACAiP,GAAA,CAAAr9Z,EAAAynW,EAAA3vW,IAAA,QAAA2vW,GAAA,SAAAA,EAAAznW,EAAAynW,GAAA3vW,EAAAkI,EAAAynW,GAAA3vW,EACAwla,GAAA,CAAAC,EAAAC,IAAA3gb,KAAA8b,IAAA6ka,GAAAD;AACA,SAAAE,GAAAniI,EAAAoiI,GACA,MAAA38Z,EAAA,GACAyiY,EAAAloG,EAAAjhT,OAAAqjb,EACA5sZ,EAAAwqR,EAAAjhT;AACA,IAAAD,EAAA;AACA,KAAUA,EAAA02B,EAAS12B,GAAAopZ,EACnBziY,EAAArf,KAAA45S,EAAAz+S,KAAAE,MAAA3C;AAEA,OAAA2mB,CACA,CACA,SAAA48Z,GAAA39Z,EAAAnd,EAAA+6a,GACA,MAAAvjb,EAAA2lB,EAAAypZ,MAAApva,OACAwjb,EAAAhhb,KAAA8b,IAAA9V,EAAAxI,EAAA,GACA2e,EAAAgH,EAAAysZ,YACAxzZ,EAAA+G,EAAA0sZ,UACAoR,EAAA;AACA,IACAhma,EADAima,EAAA/9Z,EAAA0pZ,gBAAAmU;AAEA,KAAAD,IAEA9la,EADA,IAAAzd,EACAwC,KAAA+b,IAAAmla,EAAA/ka,EAAAC,EAAA8ka,GACU,IAAAl7a,GACVmd,EAAA0pZ,gBAAA,GAAAqU,GAAA,GAEAA,EAAA/9Z,EAAA0pZ,gBAAAmU,EAAA,MAEAE,GAAAF,EAAAh7a,EAAAiV,KACAima,EAAA/ka,EAAA8ka,GAAAC,EAAA9ka,EAAA6ka,IAIA,OAAAC,CACA,CAcA,SAAAC,GAAAlib,GACA,OAAAA,EAAAmib,UAAAnib,EAAAoib,WAAA,CACA,CACA,SAAAC,GAAArib,EAAAm0B,GACA,IAAAn0B,EAAAmjB,QACA;AAEA,MAAAm/Z,EAAAjjB,EAAAkjB,OAAAvib,EAAAsib,KAAAnuZ,GACApV,EAAAsgZ,EAAAke,UAAAv9a,EAAA+e;AAEA,OADAsgZ,EAAAlha,QAAA6B,EAAAqB,MAAArB,EAAAqB,KAAA9C,OAAA,GACA+jb,EAAAE,WAAAzja,EAAAO,MACA,CAcA,SAAAmja,GAAAC,EAAA94Z,EAAAza,GACA,IAAAyhQ,EAAAyuJ,EAAAsjB,mBAAAD;AAIA,OAHAvza,GAAA,UAAAya,IAAAza,GAAA,UAAAya,KACAgnP,EA7EA,CAAA8xK,GAAA,SAAAA,EAAA,kBAAAA,EAAA,OAAAA,EAAA,CA6EA9xK,IAEAA,CACA,CAwCA,MAAAgyK,WAAAjga,GACA,WAAA22D,CAAAmnV,GACAz/P,QACAhjK,KAAAg/C,GAAAyjX,EAAAzjX,GACAh/C,KAAA8D,KAAA2+Z,EAAA3+Z,KACA9D,KAAAgC,aAAAyvB,EACAzxB,KAAAy6J,IAAAgoQ,EAAAhoQ,IACAz6J,KAAA0ha,MAAAe,EAAAf,MACA1ha,KAAA6N,SAAA4jB,EACAzxB,KAAA8N,YAAA2jB,EACAzxB,KAAA4N,UAAA6jB,EACAzxB,KAAAgO,WAAAyjB,EACAzxB,KAAA+N,WAAA0jB,EACAzxB,KAAAshB,YAAAmQ,EACAzxB,KAAA6kb,SAAA,CACAj3a,KAAA,EACAI,MAAA,EACAH,IAAA,EACAC,OAAA,GAEA9N,KAAAk9P,cAAAzrO,EACAzxB,KAAAo9P,eAAA3rO,EACAzxB,KAAA8pB,gBAAA2H,EACAzxB,KAAAwvU,mBAAA/9S,EACAzxB,KAAA4pB,iBAAA6H,EACAzxB,KAAAizS,kBAAAxhR,EACAzxB,KAAA0f,UAAA+R,EACAzxB,KAAA8kb,mBAAArzZ,EACAzxB,KAAA6e,SAAA4S,EACAzxB,KAAA8e,SAAA2S,EACAzxB,KAAA+kb,YAAAtzZ,EACAzxB,KAAA2va,MAAA,GACA3va,KAAAglb,eAAA,KACAhlb,KAAAilb,YAAA,KACAjlb,KAAAklb,YAAA,KACAllb,KAAAwva,QAAA,EACAxva,KAAAmlb,WAAA,EACAnlb,KAAAolb,kBAAA,GACAplb,KAAA2ya,iBAAAlhZ,EACAzxB,KAAA4ya,eAAAnhZ,EACAzxB,KAAA87a,kBACA97a,KAAAqlb,cAAA5zZ,EACAzxB,KAAAslb,cAAA7zZ,EACAzxB,KAAAulb,mBAAA9zZ,EACAzxB,KAAAwlb,mBAAA/zZ,EACAzxB,KAAAylb,aAAA,EACAzlb,KAAA0lb,aAAA,EACA1lb,KAAAova,OAAA,GACApva,KAAA2lb,qBACA3lb,KAAAmna,cAAA11Y,CACA,CACA,IAAAshD,CAAA/wE,GACAhC,KAAAgC,UAAA4jb,WAAA5lb,KAAAqqa,cACArqa,KAAA0f,KAAA1d,EAAA0d,KACA1f,KAAAslb,SAAAtlb,KAAAkW,MAAAlU,EAAA6c,KACA7e,KAAAqlb,SAAArlb,KAAAkW,MAAAlU,EAAA8c,KACA9e,KAAAwlb,cAAAxlb,KAAAkW,MAAAlU,EAAA6jb,cACA7lb,KAAAulb,cAAAvlb,KAAAkW,MAAAlU,EAAA8jb,aACA,CACA,KAAA5va,CAAA64L,EAAAhmM,GACA,OAAAgmM,CACA,CACA,aAAA+8N,GACA,IAAAwZ,SAAcA,EAAAD,WAAAG,gBAAAD,iBAAuDvlb;AAKrE,OAJAslb,EAAAjkB,EAAA0kB,gBAAAT,EAAAh6a,OAAAi9G,mBACA88T,EAAAhkB,EAAA0kB,gBAAAV,EAAA/5a,OAAAk9G,mBACAg9T,EAAAnkB,EAAA0kB,gBAAAP,EAAAl6a,OAAAi9G,mBACAg9T,EAAAlkB,EAAA0kB,gBAAAR,EAAAj6a,OAAAk9G,mBACA,CACA3pG,IAAAwiZ,EAAA0kB,gBAAAT,EAAAE,GACA1ma,IAAAuiZ,EAAA0kB,gBAAAV,EAAAE,GACA3Z,WAAAvK,EAAAsD,eAAA2gB,GACAzZ,WAAAxK,EAAAsD,eAAA0gB,GAEA,CACA,SAAA9Z,CAAAC,GACA,IACAtzV,GADAr5D,IAAcA,EAAAC,MAAA8sZ,aAAAC,cAAuC7ra,KAAA8ra;AAErD,GAAAF,GAAAC,EACA,OACAhtZ,MACAC;AAGA,MAAAkna,EAAAhmb,KAAAqla;AACA,QAAA/ka,EAAA,EAAA+ja,EAAA2hB,EAAAzlb,OAA4CD,EAAA+ja,IAAU/ja,EACtD43E,EAAA8tW,EAAA1lb,GAAAila,WAAAgG,UAAAvra,KAAAwra,GACAI,IACA/sZ,EAAA9b,KAAA8b,MAAAq5D,EAAAr5D,MAEAgtZ,IACA/sZ,EAAA/b,KAAA+b,MAAAo5D,EAAAp5D;AAKA,OAFAD,EAAAgtZ,GAAAhtZ,EAAAC,IAAAD,EACAC,EAAA8sZ,GAAA/sZ,EAAAC,EAAAD,EAAAC,EACA,CACAD,IAAAwiZ,EAAA0kB,gBAAAlna,EAAAwiZ,EAAA0kB,gBAAAjna,EAAAD,IACAC,IAAAuiZ,EAAA0kB,gBAAAjna,EAAAuiZ,EAAA0kB,gBAAAlna,EAAAC,IAEA,CACA,UAAAk7U,GACA,OACApsV,KAAA5N,KAAA4pB,aAAA,EACA/b,IAAA7N,KAAA8pB,YAAA,EACA9b,MAAAhO,KAAAizS,cAAA,EACAnlS,OAAA9N,KAAAwvU,eAAA,EAEA,CACA,QAAAy2G,GACA,OAAAjmb,KAAA2va,KACA,CACA,SAAA7E,GACA,MAAA79Y,EAAAjtB,KAAA0ha,MAAAz0Y;AACA,OAAAjtB,KAAAgC,QAAA6oa,SAAA7qa,KAAAuxW,eAAAtkV,EAAAi5Z,QAAAj5Z,EAAAk5Z,UAAAl5Z,EAAA49Y,QAAA,EACA,CACA,aAAAub,CAAA9Z,EAAAtsa,KAAA0ha,MAAA4K,WAEA,OADAtsa,KAAAilb,cAAAjlb,KAAAilb,YAAAjlb,KAAAqmb,mBAAA/Z,GAEA,CACA,YAAA2T,GACAjgb,KAAAova,OAAA,GACApva,KAAA2lb,oBACA,CACA,YAAAW,GACAjlB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAskb,aAAA,CACAtmb,MAEA,CACA,MAAA2Q,CAAAusP,EAAAE,EAAA8Q,GACA,MAAAkjK,YAAgBA,EAAAmV,QAAA5W,MAAA6W,GAAyCxmb,KAAAgC,QACzDykb,EAAAD,EAAAC;AACAzmb,KAAAsmb,eACAtmb,KAAAk9P,WACAl9P,KAAAo9P,YACAp9P,KAAA6kb,SAAA32K,EAAAnmP,OAAA4rD,OAAA,CACA/lE,KAAA,EACAI,MAAA,EACAH,IAAA,EACAC,OAAA,GACSogQ,GACTluQ,KAAA2va,MAAA,KACA3va,KAAAklb,YAAA,KACAllb,KAAAglb,eAAA,KACAhlb,KAAAilb,YAAA,KACAjlb,KAAA0mb,sBACA1mb,KAAA2mb,gBACA3mb,KAAA4mb,qBACA5mb,KAAAmlb,WAAAnlb,KAAAuxW,eAAAvxW,KAAA+N,MAAAmgQ,EAAAtgQ,KAAAsgQ,EAAAlgQ,MAAAhO,KAAAshB,OAAA4sP,EAAArgQ,IAAAqgQ,EAAApgQ,OACA9N,KAAA2lb,oBACA3lb,KAAA6mb,mBACA7mb,KAAA8mb,sBACA9mb,KAAA+mb,kBACA/mb,KAAA+kb,OAAA1jB,EAAA2lB,UAAAhnb,KAAAumb,EAAAnV,GACApxa,KAAA2lb,sBAEA3lb,KAAAinb,mBACAjnb,KAAA2va,MAAA3va,KAAAknb,cAAA,GACAlnb,KAAAmnb;AACA,MAAAC,EAAAX,EAAAzmb,KAAA2va,MAAApva;AACAP,KAAAqnb,sBAAAD,EAAAzD,GAAA3jb,KAAA2va,MAAA8W,GAAAzmb,KAAA2va,OACA3va,KAAAosY,YACApsY,KAAAsnb,+BACAtnb,KAAAunb,yBACAvnb,KAAAwnb,8BACAhB,EAAArha,UAAAqha,EAAAiB,UAAA,SAAAjB,EAAAj2Y,UACAvwC,KAAA2va,MA3YA,SAAAzpZ,EAAAypZ,GACA,MAAA6W,EAAAtga,EAAAlkB,QAAA2ta,MACA+X,EAyBA,SAAAxha,GACA,MAAAlI,EAAAkI,EAAAlkB,QAAAgc,OACAoma,EAAAl+Z,EAAAyha,YACAC,EAAA1ha,EAAAspZ,QAAA4U,GAAApma,EAAA,KACA6pa,EAAA3ha,EAAAi/Z,WAAAf;AACA,OAAArhb,KAAAE,MAAAF,KAAA8b,IAAA+oa,EAAAC,GACA,CANA,CAzBA3ha,GACA4ha,EAAA/kb,KAAA8b,IAAA2na,EAAA9C,eAAAgE,KACAK,EAAAvB,EAAAwB,MAAAvza,QA6CA,SAAAk7Z,GACA,MAAA1oZ,EAAA;AACA,IAAA3mB,EAAA+ja;AACA,IAAA/ja,EAAA,EAAA+ja,EAAAsL,EAAApva,OAAoCD,EAAA+ja,EAAU/ja,IAC9Cqva,EAAArva,GAAA0nb,OACA/ga,EAAArf,KAAAtH;AAGA,OAAA2mB,CACA,CATA,CA7CA0oZ,GAAA,GACAsY,EAAAF,EAAAxnb,OACAwxC,EAAAg2Y,EAAA,GACA73P,EAAA63P,EAAAE,EAAA,GACA7E,EAAA;AACA,GAAA6E,EAAAH,EAEA,OAgDA,SAAAnY,EAAAyT,EAAA2E,EAAAzT,GACA,IAEAh0a,EAFA6/I,EAAA,EACAlnD,EAAA8uV,EAAA;AAGA,IADAzT,EAAAvxa,KAAAq3G,KAAAk6T,GACAh0a,EAAA,EAAeA,EAAAqva,EAAApva,OAAkBD,IACjCA,IAAA24F,IACAmqV,EAAAx7a,KAAA+na,EAAArva,IACA6/I,IACAlnD,EAAA8uV,EAAA5nS,EAAAm0R,GAGA,CAZA,CAjDA3E,EAAAyT,EAAA2E,EAAAE,EAAAH,GACA1E;AAEA,MAAA9O,EAqBA,SAAAyT,EAAApY,EAAAmY,GACA,MAAAI,EA4DA,SAAA1mI,GACA,MAAAxqR,EAAAwqR,EAAAjhT;AACA,IAAAD,EAAA0rH;AACA,GAAAh1F,EAAA,EACA;AAEA,IAAAg1F,EAAAw1L,EAAA,GAAAlhT,EAAA,EAA8BA,EAAA02B,IAAS12B,EACvC,GAAAkhT,EAAAlhT,GAAAkhT,EAAAlhT,EAAA,KAAA0rH,EACA;AAGA,OAAAA,CACA,CAZA,CA5DA+7T,GACAzT,EAAA3E,EAAApva,OAAAunb;AACA,IAAAI,EACA,OAAAnlb,KAAA+b,IAAAw1Z,EAAA;AAEA,MAAA9W,EAAA6D,EAAA8mB,WAAAD;AACA,QAAA5nb,EAAA,EAAA+ja,EAAA7G,EAAAj9Z,OAAA,EAA8CD,EAAA+ja,EAAU/ja,IAAA,CACxD,MAAAquE,EAAA6uV,EAAAl9Z;AACA,GAAAquE,EAAA2lW,EACA,OAAA3lW,CAEA,CACA,OAAA5rE,KAAA+b,IAAAw1Z,EAAA,EACA,CAdA,CArBAyT,EAAApY,EAAAmY;AACA,GAAAG,EAAA,GACA,IAAA3nb,EAAA+ja;AACA,MAAA+jB,EAAAH,EAAA,EAAAllb,KAAAG,OAAAgtL,EAAAn+I,IAAAk2Y,EAAA;AAEA,IADAp5Z,GAAA8gZ,EAAAyT,EAAA9O,EAAAjT,EAAAqQ,cAAA0W,GAAA,EAAAr2Y,EAAAq2Y,EAAAr2Y,GACAzxC,EAAA,EAAA+ja,EAAA4jB,EAAA,EAA+C3nb,EAAA+ja,EAAU/ja,IACzDuuB,GAAA8gZ,EAAAyT,EAAA9O,EAAAyT,EAAAznb,GAAAynb,EAAAznb,EAAA;AAGA,OADAuuB,GAAA8gZ,EAAAyT,EAAA9O,EAAApkP,EAAAmxO,EAAAqQ,cAAA0W,GAAAzY,EAAApva,OAAA2vL,EAAAk4P,GACAhF,CACA,CAEA,OADAv0Z,GAAA8gZ,EAAAyT,EAAA9O,GACA8O,CACA,CA1BA,CA2YApjb,UAAA2va,OACA3va,KAAAklb,YAAA,KACAllb,KAAAqob,iBAEAjB,GACApnb,KAAAqnb,sBAAArnb,KAAA2va,OAEA3va,KAAAsob,YACAtob,KAAAuob,MACAvob,KAAAwob,WACAxob,KAAAyob,aACA,CACA,SAAAr8C,GACA,IACA8mC,EAAAE,EADAsV,EAAA1ob,KAAAgC,QAAAmP;AAEAnR,KAAAuxW,gBACA2hE,EAAAlza,KAAA4N,KACAwla,EAAApza,KAAAgO,QAEAkla,EAAAlza,KAAA6N,IACAula,EAAApza,KAAA8N,OACA46a,MAEA1ob,KAAA2ya,YAAAO,EACAlza,KAAA4ya,UAAAQ,EACApza,KAAA87a,eAAA4M,EACA1ob,KAAAwva,QAAA4D,EAAAF,EACAlza,KAAA2ob,eAAA3ob,KAAAgC,QAAA4mb,aACA,CACA,WAAAH,GACApnB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAymb,YAAA,CACAzob,MAEA,CACA,mBAAA0mb,GACArlB,EAAA1nZ,SAAA3Z,KAAAgC,QAAA0kb,oBAAA,CACA1mb,MAEA,CACA,aAAA2mb,GACA3mb,KAAAuxW,gBACAvxW,KAAA+N,MAAA/N,KAAAk9P,SACAl9P,KAAA4N,KAAA,EACA5N,KAAAgO,MAAAhO,KAAA+N,QAEA/N,KAAAshB,OAAAthB,KAAAo9P,UACAp9P,KAAA6N,IAAA,EACA7N,KAAA8N,OAAA9N,KAAAshB,QAEAthB,KAAA4pB,YAAA,EACA5pB,KAAA8pB,WAAA,EACA9pB,KAAAizS,aAAA,EACAjzS,KAAAwvU,cAAA,CACA,CACA,kBAAAo3G,GACAvlB,EAAA1nZ,SAAA3Z,KAAAgC,QAAA4kb,mBAAA,CACA5mb,MAEA,CACA,UAAA6ob,CAAAzgb,GACApI,KAAA0ha,MAAAonB,cAAA1gb,EAAApI,KAAAqqa,cACAhJ,EAAA1nZ,SAAA3Z,KAAAgC,QAAAoG,GAAA,CACApI,MAEA,CACA,gBAAA6mb,GACA7mb,KAAA6ob,WAAA,mBACA,CACA,mBAAA/B,GAAA,CACA,eAAAC,GACA/mb,KAAA6ob,WAAA,kBACA,CACA,gBAAA5B,GACAjnb,KAAA6ob,WAAA,mBACA,CACA,UAAA3B,GACA,QACA,CACA,eAAAC,GACAnnb,KAAA6ob,WAAA,kBACA,CACA,2BAAAE,GACA1nB,EAAA1nZ,SAAA3Z,KAAAgC,QAAA+mb,4BAAA,CACA/ob,MAEA,CACA,kBAAAgpb,CAAArZ,GACA,MAAA6W,EAAAxmb,KAAAgC,QAAA2ta;AACA,IAAArva,EAAA+ja,EAAAhmQ;AACA,IAAA/9J,EAAA,EAAA+ja,EAAAsL,EAAApva,OAAwCD,EAAA+ja,EAAU/ja,IAClD+9J,EAAAsxQ,EAAArva,GACA+9J,EAAAmJ,MAAA65P,EAAA1nZ,SAAA6sa,EAAA7sa,SAAA,CACA0kJ,EAAA17J,MACArC,EACAqva,GACA3va,KAEA,CACA,0BAAAipb,GACA5nB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAinb,2BAAA,CACAjpb,MAEA,CACA,4BAAAsnb,GACAjmB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAslb,6BAAA,CACAtnb,MAEA,CACA,sBAAAunb,GACA,MAAAvlb,EAAAhC,KAAAgC,QACAwkb,EAAAxkb,EAAA2ta,MACAuZ,EAAA1F,GAAAxjb,KAAA2va,MAAApva,OAAAyB,EAAA2ta,MAAA+T,eACAyF,EAAA3C,EAAA2C,aAAA,EACAC,EAAA5C,EAAA4C;AACA,IACAC,EAAAjsL,EAAAksL,EADAxE,EAAAqE;AAEA,IAAAnpb,KAAAupb,eAAA/C,EAAArha,SAAAgka,GAAAC,GAAAF,GAAA,IAAAlpb,KAAAuxW,eAEA,YADAvxW,KAAA8kb,cAAAqE;AAGA,MAAAK,EAAAxpb,KAAAypb,iBACAC,EAAAF,EAAAG,OAAA57a,MACA67a,EAAAJ,EAAAK,QAAAvoa,OACA47O,EAAAmkK,EAAAyoB,YAAA9pb,KAAA0ha,MAAA3zZ,MAAA27a,EAAA,EAAA1pb,KAAAk9P;AACAmsL,EAAArnb,EAAAgc,OAAAhe,KAAAk9P,SAAAgsL,EAAAhsL,GAAAgsL,EAAA,GACAQ,EAAA,EAAAL,IACAA,EAAAnsL,GAAAgsL,GAAAlnb,EAAAgc,OAAA,OACAo/O,EAAAp9P,KAAAo9P,UAAA8mL,GAAAlib,EAAA+0P,MAAAyvL,EAAAzla,QAAAsja,GAAArib,EAAAu7J,MAAAv9J,KAAA0ha,MAAA1/Z,QAAAsib,MACAgF,EAAAvmb,KAAA0mR,KAAAigK,IAAAE,KACA9E,EAAAzjB,EAAA0oB,UAAAhnb,KAAA8b,IAAA9b,KAAAinb,KAAA3oB,EAAAyoB,aAAAN,EAAAK,QAAAvoa,OAAA,GAAA+na,GAAA,MAAAtmb,KAAAinb,KAAA3oB,EAAAyoB,YAAA1sL,EAAAksL,GAAA,MAAAvmb,KAAAinb,KAAA3oB,EAAAyoB,YAAAF,EAAAN,GAAA,QACAxE,EAAA/hb,KAAA+b,IAAAqqa,EAAApmb,KAAA8b,IAAAuqa,EAAAtE,KAEA9kb,KAAA8kb,eACA,CACA,2BAAA0C,GACAnmB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAwlb,4BAAA,CACAxnb,MAEA,CACA,aAAAqob,GAAA,CACA,SAAAC,GACAjnB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAsmb,UAAA,CACAtob,MAEA,CACA,GAAAuob,GACA,MAAApO,EAAA,CACApsa,MAAA,EACAuT,OAAA,IAEAogZ,MAAgBA,EAAA1/Z,SAAmB2ta,MAAA6W,EAAAjpR,MAAA0sR,EAAAlzL,KAAAmzL,IAA0Dlqb,KAC7FmlB,EAAAnlB,KAAAupb,aACAh4E,EAAAvxW,KAAAuxW;AACA,GAAApsV,EAAA,CACA,MAAAgla,EAAA9F,GAAA4F,EAAAvoB,EAAA1/Z,QAAAsib;AAQA,GAPA/yE,GACA4oE,EAAApsa,MAAA/N,KAAAk9P,SACAi9K,EAAA74Z,OAAA4ia,GAAAgG,GAAAC,IAEAhQ,EAAA74Z,OAAAthB,KAAAo9P,UACA+8K,EAAApsa,MAAAm2a,GAAAgG,GAAAC,GAEA3D,EAAArha,SAAAnlB,KAAA2va,MAAApva,OAAA,CACA,MAAAwxC,MAAwBA,EAAAm+I,OAAAy5P,SAAAE,WAAmC7pb,KAAAypb,iBAC3DW,EAAA,EAAA5D,EAAAzla,QACAspa,EAAAhpB,EAAA0U,UAAA/1a,KAAA8kb,eACAvvQ,EAAAxyK,KAAAwyK,IAAA80Q,GACArT,EAAAj0a,KAAAi0a,IAAAqT;AACA,GAAA94E,EAAA,CACA,MAAA+4E,EAAA9D,EAAAp3D,OAAA,EAAA4nD,EAAA2S,EAAA57a,MAAAwnK,EAAAs0Q,EAAAvoa;AACA64Z,EAAA74Z,OAAAve,KAAA8b,IAAA7e,KAAAo9P,UAAA+8K,EAAA74Z,OAAAgpa,EAAAF,EACA,KAAkB,CAClB,MAAAG,EAAA/D,EAAAp3D,OAAA,EAAA75M,EAAAo0Q,EAAA57a,MAAAipa,EAAA6S,EAAAvoa;AACA64Z,EAAApsa,MAAAhL,KAAA8b,IAAA7e,KAAAk9P,SAAAi9K,EAAApsa,MAAAw8a,EAAAH,EACA,CACApqb,KAAAwqb,kBAAAz4Y,EAAAm+I,EAAA8mP,EAAAzhQ,EACA,CACA,CACAv1K,KAAAyqb,iBACAl5E,GACAvxW,KAAA+N,MAAA/N,KAAAwva,QAAA9N,EAAA3zZ,MAAA/N,KAAA6kb,SAAAj3a,KAAA5N,KAAA6kb,SAAA72a,MACAhO,KAAAshB,OAAA64Z,EAAA74Z,SAEAthB,KAAA+N,MAAAosa,EAAApsa,MACA/N,KAAAshB,OAAAthB,KAAAwva,QAAA9N,EAAApgZ,OAAAthB,KAAA6kb,SAAAh3a,IAAA7N,KAAA6kb,SAAA/2a,OAEA,CACA,iBAAA08a,CAAAz4Y,EAAAm+I,EAAA8mP,EAAAzhQ,GACA,MAAgBo6P,OAAA+U,MAASA,EAAA3ja,WAAmB6K,YAAc5rB,KAAAgC,QAC1D0ob,EAAA,IAAA1qb,KAAA8kb,cACA6F,EAAA,QAAA/+Z,GAAA,MAAA5rB,KAAA0f;AACA,GAAA1f,KAAAuxW,eAAA,CACA,MAAAzoV,EAAA9oB,KAAA4va,gBAAA,GAAA5va,KAAA4N,KACAg9a,EAAA5qb,KAAAgO,MAAAhO,KAAA4va,gBAAA5va,KAAA2va,MAAApva,OAAA;AACA,IAAAqpB,EAAA,EACAqpR,EAAA;AACAy3I,EACAC,GACA/ga,EAAA2rJ,EAAAxjI,EAAAhkC,MACAklS,EAAA+jI,EAAA9mP,EAAA5uK,SAEAsI,EAAAotZ,EAAAjlY,EAAAzwB,OACA2xR,EAAA19H,EAAA2a,EAAAniL,OAEc,UAAA22a,EACdzxI,EAAA/iH,EAAAniL,MACc,QAAA22a,EACd96Z,EAAAmoB,EAAAhkC,MACc,UAAA22a,IACd96Z,EAAAmoB,EAAAhkC,MAAA,EACAklS,EAAA/iH,EAAAniL,MAAA,GAEA/N,KAAA4pB,YAAA7mB,KAAA+b,KAAA8K,EAAAd,EAAA/H,GAAA/gB,KAAA+N,OAAA/N,KAAA+N,MAAA+a,GAAA,GACA9oB,KAAAizS,aAAAlwS,KAAA+b,KAAAm0R,EAAA23I,EAAA7pa,GAAA/gB,KAAA+N,OAAA/N,KAAA+N,MAAA68a,GAAA,EACA,KAAU,CACV,IAAA9ga,EAAAomK,EAAA5uK,OAAA,EACAkuT,EAAAz9R,EAAAzwB,OAAA;AACA,UAAAoja,GACA56Z,EAAA,EACA0lT,EAAAz9R,EAAAzwB,QACc,QAAAoja,IACd56Z,EAAAomK,EAAA5uK,OACAkuT,EAAA,GAEAxvU,KAAA8pB,aAAA/I,EACA/gB,KAAAwvU,gBAAAzuT,CACA,CACA,CACA,cAAA0pa,GACAzqb,KAAA6kb,WACA7kb,KAAA6kb,SAAAj3a,KAAA7K,KAAA+b,IAAA9e,KAAA4pB,YAAA5pB,KAAA6kb,SAAAj3a,MACA5N,KAAA6kb,SAAAh3a,IAAA9K,KAAA+b,IAAA9e,KAAA8pB,WAAA9pB,KAAA6kb,SAAAh3a,KACA7N,KAAA6kb,SAAA72a,MAAAjL,KAAA+b,IAAA9e,KAAAizS,aAAAjzS,KAAA6kb,SAAA72a,OACAhO,KAAA6kb,SAAA/2a,OAAA/K,KAAA+b,IAAA9e,KAAAwvU,cAAAxvU,KAAA6kb,SAAA/2a,QAEA,CACA,QAAA06a,GACAnnB,EAAA1nZ,SAAA3Z,KAAAgC,QAAAwmb,SAAA,CACAxob,MAEA,CACA,YAAAuxW,GACA,MAAA7xV,KAAgBA,EAAAkM,YAAmB5rB,KAAAgC;AACnC,cAAA4pB,GAAA,WAAAA,GAAA,MAAAlM,CACA,CACA,UAAAmra,GACA,OAAA7qb,KAAAgC,QAAA48a,QACA,CACA,qBAAAyI,CAAA1X,GAGA,IAAArva,EAAA+ja;AACA,IAHArka,KAAA+ob,8BACA/ob,KAAAgpb,mBAAArZ,GAEArva,EAAA,EAAA+ja,EAAAsL,EAAApva,OAAwCD,EAAA+ja,EAAU/ja,IAClD+ga,EAAAqQ,cAAA/B,EAAArva,GAAAknK,SACAmoQ,EAAA7la,OAAAxJ,EAAA,GACA+ja,IACA/ja;AAGAN,KAAAipb,4BACA,CACA,cAAAQ,GACA,IAAAD,EAAAxpb,KAAAklb;AACA,IAAAsE,EAAA,CACA,MAAA/C,EAAAzmb,KAAAgC,QAAA2ta,MAAA8W;AACA,IAAA9W,EAAA3va,KAAA2va;AACA8W,EAAA9W,EAAApva,SACAova,EAAAgU,GAAAhU,EAAA8W,IAEAzmb,KAAAklb,YAAAsE,EAAAxpb,KAAA8qb,mBAAAnb,IAAApva,OAAAP,KAAAgC,QAAA2ta,MAAA+T,cACA,CACA,OAAA8F,CACA,CACA,kBAAAsB,CAAAnb,EAAApva,EAAAmjb,GACA,MAAAjpR,IAAgBA,EAAA2qR,kBAAA2F,GAAmC/qb,KACnDgrb,EAAA,GACAC,EAAA,GACAvhC,EAAA3mZ,KAAAE,MAAA1C,EAAAijb,GAAAjjb,EAAAmjb;AACA,IAEApjb,EAAAqlF,EAAAulW,EAAA1jR,EAAA2jR,EAAAC,EAAAh/Z,EAAAo4Z,EAAAz2a,EAAAuT,EAAA+pa,EAFAC,EAAA,EACAC,EAAA;AAEA,IAAAjrb,EAAA,EAAmBA,EAAAC,EAAYD,GAAAopZ,EAAA,CAU/B,GATAliP,EAAAmoQ,EAAArva,GAAAknK,MACA2jR,EAAAnrb,KAAAwrb,wBAAAlrb,GACAm6J,EAAA6pR,KAAA8G,EAAAD,EAAA3yU,OACApsF,EAAA2+Z,EAAAK,GAAAL,EAAAK,IAAA,CACAn+Z,KAAA,GACAw+Z,GAAA,IAEAjH,EAAA2G,EAAA3G,WACAz2a,EAAAuT,EAAA,EACA+/Y,EAAAqQ,cAAAlqQ,IAAA65P,EAAAlha,QAAAqnK,IAGc,GAAA65P,EAAAlha,QAAAqnK,GACd,IAAA7hF,EAAA,EAAAulW,EAAA1jR,EAAAjnK,OAAgDolF,EAAAulW,IAAUvlW,EAC1D0lW,EAAA7jR,EAAA7hF,GACA07U,EAAAqQ,cAAA2Z,IAAAhqB,EAAAlha,QAAAkrb,KACAt9a,EAAAszZ,EAAAqqB,aAAAjxR,EAAAruI,EAAAa,KAAAb,EAAAq/Z,GAAA19a,EAAAs9a,GACA/pa,GAAAkja,QAPAz2a,EAAAszZ,EAAAqqB,aAAAjxR,EAAAruI,EAAAa,KAAAb,EAAAq/Z,GAAA19a,EAAAy5J,GACAlmJ,EAAAkja;AAUAwG,EAAApjb,KAAAmG,GACAk9a,EAAArjb,KAAA0Z,GACAgqa,EAAAvob,KAAA+b,IAAA/Q,EAAAu9a,GACAC,EAAAxob,KAAA+b,IAAAwC,EAAAiqa,EACA,EA7iBA,SAAAR,EAAAxqb,GACA8ga,EAAA2e,KAAA+K,EAAA3+Z,IACA,MAAAq/Z,EAAAr/Z,EAAAq/Z,GACAE,EAAAF,EAAAlrb,OAAA;AACA,IAAAD;AACA,GAAAqrb,EAAAprb,EAAA,CACA,IAAAD,EAAA,EAAuBA,EAAAqrb,IAAWrrb,SAClC8rB,EAAAa,KAAAw+Z,EAAAnrb;AAEAmrb,EAAA3hb,OAAA,EAAA6hb,EACA,GAEA,CAZA,CA8iBAZ,EAAAxqb;AACA,MAAAopb,EAAAqB,EAAAnhb,QAAAyhb,GACAzB,EAAAoB,EAAAphb,QAAA0hb,GACAK,EAAAn9N,KACA1gN,MAAAi9a,EAAAv8N,IAAA,EACAntM,OAAA2pa,EAAAx8N,IAAA;AAEA,OACA18K,MAAA65Y,EAAA,GACA17P,KAAA07P,EAAArrb,EAAA,GACAopb,OAAAiC,EAAAjC,GACAE,QAAA+B,EAAA/B,GACAmB,SACAC,UAEA,CACA,gBAAA9e,CAAAxpa,GACA,OAAAA,CACA,CACA,gBAAA+sa,CAAA/sa,EAAAoG,GACA,OAAA4uF,GACA,CACA,gBAAA07U,CAAAwY,GAAA,CACA,eAAAjc,CAAA7ma,GACA,MAAA4ma,EAAA3va,KAAA2va;AACA,OAAA5ma,EAAA,GAAAA,EAAA4ma,EAAApva,OAAA,EACA,KAEAP,KAAA0va,iBAAAC,EAAA5ma,GAAApG,MACA,CACA,kBAAAwwa,CAAAl7X,GACAj4C,KAAA87a,iBACA7jY,EAAA,EAAAA;AAEA,MAAA4zY,EAAA7rb,KAAA2ya,YAAA16X,EAAAj4C,KAAAwva;AACA,OAAAnO,EAAAyqB,YAAA9rb,KAAA2ob,eAAAtnB,EAAA0qB,YAAA/rb,KAAA0ha,MAAAmqB,EAAA,GAAAA,EACA,CACA,kBAAAG,CAAAH,GACA,MAAA5zY,GAAA4zY,EAAA7rb,KAAA2ya,aAAA3ya,KAAAwva;AACA,OAAAxva,KAAA87a,eAAA,EAAA7jY,GACA,CACA,YAAAq5X,GACA,OAAAtxa,KAAA0va,iBAAA1va,KAAAisb,eACA,CACA,YAAAA,GACA,MAAApta,IAAgBA,EAAAC,OAAa9e;AAC7B,OAAA6e,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAA,GAAAC,EAAA,EAAAD,EAAA,CACA,CACA,UAAAwrZ,CAAAtha,GACA,MAAA4ma,EAAA3va,KAAA2va,OAAA;AACA,GAAA5ma,GAAA,GAAAA,EAAA4ma,EAAApva,OAAA,CACA,MAAA89J,EAAAsxQ,EAAA5ma;AACA,OAAAs1J,EAAA8oQ,WAAA9oQ,EAAA8oQ,SAnkBA,SAAAr/Y,EAAA/e,EAAAs1J,GACA,OAAAgjQ,EAAAzjH,cAAA91R,EAAA,CACAu2I,OACAt1J,QACAjF,KAAA,QAEA,CANA,CAmkBA9D,KAAAqqa,aAAAtha,EAAAs1J,GACA,CACA,OAAAr+J,KAAAmna,WAAAnna,KAAAmna,UA3kBAr/Y,EA2kBA9nB,KAAA0ha,MAAA2I,aA1kBAhJ,EAAAzjH,cAAA91R,EAAA,CACA5B,MAykBAlmB,KAxkBA8D,KAAA;AAHA,IAAAgkB,CA4kBA,CACA,SAAA6/Z,GACA,MAAAuE,EAAAlsb,KAAAgC,QAAA2ta,MACAwc,EAAA9qB,EAAA0U,UAAA/1a,KAAA8kb,eACAvvQ,EAAAxyK,KAAAqN,IAAArN,KAAAwyK,IAAA42Q,IACAnV,EAAAj0a,KAAAqN,IAAArN,KAAAi0a,IAAAmV,IACA3C,EAAAxpb,KAAAypb,iBACA1oa,EAAAmra,EAAAE,iBAAA,EACAv3a,EAAA20a,IAAAG,OAAA57a,MAAAgT,EAAA,EACAhgB,EAAAyob,IAAAK,QAAAvoa,OAAAP,EAAA;AACA,OAAA/gB,KAAAuxW,eAAAxwW,EAAAw0K,EAAA1gK,EAAAmia,EAAAnia,EAAA0gK,EAAAx0K,EAAAi2a,EAAAj2a,EAAAi2a,EAAAnia,EAAA0gK,EAAAx0K,EAAAw0K,EAAA1gK,EAAAmia,CACA,CACA,UAAAuS,GACA,MAAApka,EAAAnlB,KAAAgC,QAAAmjB;AACA,eAAAA,IACAA,EAEAnlB,KAAAqla,0BAAA9ka,OAAA,CACA,CACA,qBAAA8rb,CAAA/f,GACA,MAAA5sZ,EAAA1f,KAAA0f,KACAgiZ,EAAA1ha,KAAA0ha,MACA1/Z,EAAAhC,KAAAgC,SACA+0P,KAAgBA,EAAAnrO,WAAAw2J,UAA4BpgL,EAC5Cgc,EAAA+4O,EAAA/4O,OACAuzV,EAAAvxW,KAAAuxW,eAEAkyE,EADAzjb,KAAA2va,MACApva,QAAAyd,EAAA,KACA+nR,EAAAm+I,GAAAntL,GACAj7E,EAAA,GACAwwQ,EAAAlqQ,EAAAwjQ,WAAA5lb,KAAAqqa,cACAkiB,EAAAD,EAAAnna,QAAAmna,EAAAv+a,MAAA,EACAy+a,EAAAD,EAAA,EACAE,EAAA,SAAAZ,GACA,OAAAxqB,EAAA0qB,YAAArqB,EAAAmqB,EAAAU,EACA;AACA,IAAAG,EAAApsb,EAAA2jb,EAAA0I,EACAC,EAAAC,EAAAC,EAAAC,EAAAx7K,EAAAE,EAAAu7K,EAAAC;AACA,WAAArha,EACA8ga,EAAAD,EAAAzsb,KAAA8N,QACA++a,EAAA7sb,KAAA8N,OAAAi4R,EACAgnJ,EAAAL,EAAAF,EACA/6K,EAAAg7K,EAAAngB,EAAAz+Z,KAAA2+a,EACAS,EAAA3gB,EAAAx+Z;KACU,cAAA8d,EACV8ga,EAAAD,EAAAzsb,KAAA6N,KACA4jQ,EAAA66J,EAAAz+Z,IACAo/a,EAAAR,EAAAngB,EAAAx+Z,QAAA0+a,EACAK,EAAAH,EAAAF,EACAO,EAAA/sb,KAAA6N,IAAAk4R;KACU,YAAAn6Q,EACV8ga,EAAAD,EAAAzsb,KAAAgO,OACA4+a,EAAA5sb,KAAAgO,MAAA+3R,EACA+mJ,EAAAJ,EAAAF,EACAj7K,EAAAk7K,EAAAngB,EAAA1+Z,MAAA4+a,EACAQ,EAAA1gB,EAAAt+Z;KACU,aAAA4d,EACV8ga,EAAAD,EAAAzsb,KAAA4N,MACA2jQ,EAAA+6J,EAAA1+Z,KACAo/a,EAAAP,EAAAngB,EAAAt+Z,OAAAw+a,EACAI,EAAAF,EAAAF,EACAM,EAAA9sb,KAAA4N,KAAAm4R;KACU,SAAArmR,EAAA,CACV,cAAAkM,EACA8ga,EAAAD,GAAAngB,EAAAz+Z,IAAAy+Z,EAAAx+Z,QAAA;KACc,GAAAuzZ,EAAAxsT,SAAAjpF,GAAA,CACd,MAAAsha,EAAAnla,OAAA2wB,KAAA9sB,GAAA,GACAjpB,EAAAipB,EAAAsha;AACAR,EAAAD,EAAAzsb,KAAA0ha,MAAAwE,OAAAgnB,GAAAxd,iBAAA/sa,GACA,CACA8uQ,EAAA66J,EAAAz+Z,IACAo/a,EAAA3gB,EAAAx+Z,OACA++a,EAAAH,EAAAF,EACAO,EAAAF,EAAA9mJ,CACA,MAAU,SAAArmR,EAAA,CACV,cAAAkM,EACA8ga,EAAAD,GAAAngB,EAAA1+Z,KAAA0+Z,EAAAt+Z,OAAA;KACc,GAAAqzZ,EAAAxsT,SAAAjpF,GAAA,CACd,MAAAsha,EAAAnla,OAAA2wB,KAAA9sB,GAAA,GACAjpB,EAAAipB,EAAAsha;AACAR,EAAAD,EAAAzsb,KAAA0ha,MAAAwE,OAAAgnB,GAAAxd,iBAAA/sa,GACA,CACAiqb,EAAAF,EAAAF,EACAM,EAAAF,EAAA7mJ,EACAx0B,EAAA+6J,EAAA1+Z,KACAo/a,EAAA1gB,EAAAt+Z,KACA,CACA,MAAAm/a,EAAA9rB,EAAA4G,eAAAjma,EAAA2ta,MAAA+T,cAAAD,GACA52S,EAAA9pI,KAAA+b,IAAA,EAAA/b,KAAAq3G,KAAAqpU,EAAA0J;AACA,IAAA7sb,EAAA,EAAmBA,EAAAmjb,EAAiBnjb,GAAAusI,EAAA,CACpC,MAAAj0G,EAAA54B,KAAAqqa,WAAA/pa,GACA8sb,EAAAr2L,EAAA6uL,WAAAhtZ,GACAy0Z,EAAAjrQ,EAAAwjQ,WAAAhtZ,GACA08Y,EAAA8X,EAAA9X,UACAgY,EAAAF,EAAA9nb,MACA2va,EAAAoY,EAAAE,MAAA,GACApY,EAAAkY,EAAAG,WACAnE,EAAA+D,EAAA/D,UACAoE,EAAAL,EAAAK,UACAC,EAAAN,EAAAM,gBAAA,GACAC,EAAAP,EAAAO;AACA1J,EAAAJ,GAAA7jb,KAAAM,EAAA0d,QACAyT,IAAAwyZ,IAGA0I,EAAAtrB,EAAA0qB,YAAArqB,EAAAuiB,EAAA3O,GACA/jE,EACAq7E,EAAAE,EAAAv7K,EAAAy7K,EAAAL,EAEAE,EAAAE,EAAAt7K,EAAAw7K,EAAAN,EAEA7wQ,EAAAl0K,KAAA,CACAglb,MACAC,MACAC,MACAC,MACAx7K,KACAE,KACAu7K,KACAC,KACAl/a,MAAAuna,EACAhwa,MAAAgob,EACArY,aACAE,mBACAkU,YACAoE,YACAC,iBACAC,yBAEA,CAGA,OAFA3tb,KAAAylb,aAAAhC,EACAzjb,KAAA0lb,aAAAgH,EACA5wQ,CACA,CACA,kBAAAuqQ,CAAA/Z,GACA,MAAA5sZ,EAAA1f,KAAA0f,KACA1d,EAAAhC,KAAAgC,SACA4pB,SAAgBA,EAAA+jZ,MAAAuc,GAAiClqb,EACjDuvW,EAAAvxW,KAAAuxW,eACAo+D,EAAA3va,KAAA2va,OACA+U,MAAgBA,EAAAkJ,aAAA7sa,UAAAquW,UAAyC88D,EACzDnmJ,EAAAm+I,GAAAlib,EAAA+0P,MACA82L,EAAA9nJ,EAAAhlR,EACA+sa,EAAA1+D,GAAAruW,EAAA8sa,EACAzZ,GAAA/S,EAAA0U,UAAA/1a,KAAA8kb,eACAhpQ,EAAA;AACA,IAAAx7K,EAAA+ja,EAAAhmQ,EAAAmJ,EAAAxgK,EAAAwK,EAAA+lZ,EAAAs0B,EAAAvH,EAAAE,EAAAuJ,EAAAC,EACAC,EAAA;AACA,WAAAria,EACApa,EAAAxR,KAAA8N,OAAAggb,EACAv2B,EAAAv3Z,KAAAkub;KACU,cAAAtia,EACVpa,EAAAxR,KAAA6N,IAAAigb,EACAv2B,EAAAv3Z,KAAAkub;KACU,YAAAtia,EAAA,CACV,MAAAgnP,EAAA5yQ,KAAAmub,wBAAApoJ;AACAwxH,EAAA3kJ,EAAA2kJ,UACAvwZ,EAAA4rQ,EAAA5rQ,CACA,MAAU,aAAA4kB,EAAA,CACV,MAAAgnP,EAAA5yQ,KAAAmub,wBAAApoJ;AACAwxH,EAAA3kJ,EAAA2kJ,UACAvwZ,EAAA4rQ,EAAA5rQ,CACA,MAAU,SAAA0Y,EAAA,CACV,cAAAkM,EACApa,GAAA86Z,EAAAz+Z,IAAAy+Z,EAAAx+Z,QAAA,EAAA+/a;KACc,GAAAxsB,EAAAxsT,SAAAjpF,GAAA,CACd,MAAAsha,EAAAnla,OAAA2wB,KAAA9sB,GAAA,GACAjpB,EAAAipB,EAAAsha;AACA17a,EAAAxR,KAAA0ha,MAAAwE,OAAAgnB,GAAAxd,iBAAA/sa,GAAAkrb,CACA,CACAt2B,EAAAv3Z,KAAAkub,yBACA,MAAU,SAAAxua,EAAA,CACV,cAAAkM,EACA5kB,GAAAsla,EAAA1+Z,KAAA0+Z,EAAAt+Z,OAAA,EAAA6/a;KACc,GAAAxsB,EAAAxsT,SAAAjpF,GAAA,CACd,MAAAsha,EAAAnla,OAAA2wB,KAAA9sB,GAAA,GACAjpB,EAAAipB,EAAAsha;AACAlmb,EAAAhH,KAAA0ha,MAAAwE,OAAAgnB,GAAAxd,iBAAA/sa,EACA,CACA40Z,EAAAv3Z,KAAAmub,wBAAApoJ,GAAAwxH,SACA,CACA,MAAA73Y,IACA,UAAAgla,EACAuJ,EAAA,MACc,QAAAvJ,IACduJ,EAAA;AAGA,MAAAzE,EAAAxpb,KAAAypb;AACA,IAAAnpb,EAAA,EAAA+ja,EAAAsL,EAAApva,OAAwCD,EAAA+ja,IAAU/ja,EAAA,CAClD+9J,EAAAsxQ,EAAArva,GACAknK,EAAAnJ,EAAAmJ;AACA,MAAA4lR,EAAAlB,EAAAtG,WAAA5lb,KAAAqqa,WAAA/pa;AACAurb,EAAA7rb,KAAA4va,gBAAAtva,GAAA4rb,EAAAkC,YACA9J,EAAAtkb,KAAAwrb,wBAAAlrb,GACAkkb,EAAAF,EAAAE,WACAuJ,EAAA1sB,EAAAlha,QAAAqnK,KAAAjnK,OAAA;AACA,MAAA8tb,EAAAN,EAAA,EACAzob,EAAA8nb,EAAA9nb,MACAgpb,EAAAlB,EAAAmB,gBACAC,EAAApB,EAAAqB;AACA,IAuCAC,EAvCAC,EAAAp3B;AAwCA,GAvCAhmD,GACAvqW,EAAA6kb,EACA,UAAAt0B,IAEAo3B,EADArub,IAAA+ja,EAAA,EACArka,KAAAgC,QAAAmP,QAAA,eACsB,IAAA7Q,EACtBN,KAAAgC,QAAAmP,QAAA,eAEA,UAKA68a,EAFA,QAAApia,EACA,SAAAgia,GAAA,IAAAxZ,GACA2Z,EAAAvJ,IAAA,EACsB,WAAAoJ,GACtBpE,EAAAK,QAAAvoa,OAAA,EAAA+sa,EAAA7J,KAEAgF,EAAAK,QAAAvoa,OAAAkja,EAAA,EAGA,SAAAoJ,GAAA,IAAAxZ,EACAoQ,EAAA,EACsB,WAAAoJ,EACtBpE,EAAAK,QAAAvoa,OAAA,EAAA+sa,EAAA7J,EAEAgF,EAAAK,QAAAvoa,OAAAysa,EAAAvJ,EAGAp1D,IACA4+D,IAAA,GAEA,IAAA5Z,GAAAgZ,EAAAwB,oBACA5nb,GAAAw9a,EAAA,EAAAzhb,KAAAi0a,IAAA5C,MAGA5ia,EAAAq6a,EACAmC,GAAA,EAAAD,GAAAvJ,EAAA,GAGA4I,EAAAwB,kBAAA,CACA,MAAAC,EAAAxtB,EAAAke,UAAA6N,EAAA0B,iBACAxta,EAAAkoa,EAAAyB,QAAA3qb,GACAyN,EAAAy7a,EAAAwB,OAAA1qb;AACA,IAAAuN,EAAAmgb,EAAAa,EAAAhhb,IACAD,EAAA,EAAAihb,EAAAjhb;AACA,OAAAqgb,GACA,aACApgb,GAAAyT,EAAA;AACA;AACA,aACAzT,GAAAyT,EAGA,OAAAi2Y,GACA,aACA3pZ,GAAAG,EAAA;AACA;AACA,YACAH,GAAAG;AACA;AACA,YACAzN,IAAA+ja,EAAA,EACAz2Z,GAAAG,EAC0BzN,EAAA,IAC1BsN,GAAAG,EAAA,GAIA2gb,EAAA,CACA9gb,OACAC,MACAE,QAAA8gb,EAAA9gb,MACAuT,SAAAuta,EAAAvta,OACAhc,MAAA8nb,EAAA2B,cAEA,CACAjzQ,EAAAl0K,KAAA,CACA4/J,QACA88Q,OACA0J,aACAhsb,QAAA,CACAoya,WACA9ua,QACAgpb,cACAE,cACAj3B,UAAAo3B,EACAV,eACAr7R,YAAA,CACA5rJ,EACAwK,GAEAk9a,aAGA,CACA,OAAA5yQ,CACA,CACA,uBAAAoyQ,GACA,MAAAtia,SAAgBA,EAAA+jZ,SAAoB3va,KAAAgC;AAEpC,IADAq/Z,EAAA0U,UAAA/1a,KAAA8kb,eAEA,cAAAl5Z,EAAA;AAEA,IAAA84Z,EAAA;AAQA,MAPA,UAAA/U,EAAA+U,MACAA,EAAA,OACU,QAAA/U,EAAA+U,MACVA,EAAA,QACU,UAAA/U,EAAA+U,QACVA,EAAA,SAEAA,CACA,CACA,uBAAAyJ,CAAApoJ,GACA,MAAAn6Q,SAAgBA,EAAA+jZ,OAAAie,WAAoBA,EAAAx+D,SAAAruW,YAAoC/gB,KAAAgC,QAExE6rb,EAAA9nJ,EAAAhlR,EACA4oa,EAFA3pb,KAAAypb,iBAEAE,OAAA57a;AACA,IAAAwpZ,EACAvwZ;AAoDA,MAnDA,SAAA4kB,EACAwjW,GACApoX,EAAAhH,KAAAgO,MAAA+S,EACA,SAAA6sa,EACAr2B,EAAA,OACkB,WAAAq2B,GAClBr2B,EAAA,SACAvwZ,GAAA2ib,EAAA,IAEApyB,EAAA,QACAvwZ,GAAA2ib,KAGA3ib,EAAAhH,KAAAgO,MAAA6/a,EACA,SAAAD,EACAr2B,EAAA,QACkB,WAAAq2B,GAClBr2B,EAAA,SACAvwZ,GAAA2ib,EAAA,IAEApyB,EAAA,OACAvwZ,EAAAhH,KAAA4N,OAGU,UAAAge,EACVwjW,GACApoX,EAAAhH,KAAA4N,KAAAmT,EACA,SAAA6sa,EACAr2B,EAAA,QACkB,WAAAq2B,GAClBr2B,EAAA,SACAvwZ,GAAA2ib,EAAA,IAEApyB,EAAA,OACAvwZ,GAAA2ib,KAGA3ib,EAAAhH,KAAA4N,KAAAigb,EACA,SAAAD,EACAr2B,EAAA,OACkB,WAAAq2B,GAClBr2B,EAAA,SACAvwZ,GAAA2ib,EAAA,IAEApyB,EAAA,QACAvwZ,EAAAhH,KAAAgO,QAIAupZ,EAAA,QAEA,CACAA,YACAvwZ,IAEA,CACA,iBAAAgob,GACA,GAAAhvb,KAAAgC,QAAA2ta,MAAAvgD,OACA;AAEA,MAAAsyC,EAAA1ha,KAAA0ha,MACA91Y,EAAA5rB,KAAAgC,QAAA4pB;AACA,eAAAA,GAAA,UAAAA,EACA,CACA/d,IAAA,EACAD,KAAA5N,KAAA4N,KACAE,OAAA4zZ,EAAApgZ,OACAtT,MAAAhO,KAAAgO,OAGA,QAAA4d,GAAA,WAAAA,EACA,CACA/d,IAAA7N,KAAA6N,IACAD,KAAA,EACAE,OAAA9N,KAAA8N,OACAE,MAAA0zZ,EAAA3zZ,YALA,CAQA,CACA,cAAAkhb,GACA,MAAAx0R,IAAgBA,EAAAz4J,SAAA+qU,gBAAiBA,GAAmBn/T,OAAAC,MAAAE,QAAAuT,UAAiCthB;AACrF+sU,IACAtyK,EAAAp4C,OACAo4C,EAAAq6Q,UAAA/nG,EACAtyK,EAAAy0R,SAAAthb,EAAAC,EAAAE,EAAAuT,GACAm5I,EAAA8M,UAEA,CACA,oBAAAgsQ,CAAA5wa,GACA,MAAAo0P,EAAA/2P,KAAAgC,QAAA+0P;AACA,IAAA/2P,KAAAupb,eAAAxyL,EAAA5xO,QACA;AAEA,MACApc,EADA/I,KAAA2va,MACApsN,UAAAzkN,KAAA6D;AACA,OAAAoG,GAAA,EACAguP,EAAA6uL,WAAA5lb,KAAAqqa,WAAAtha,IACAusa,UAEA,CACA,CACA,QAAA6Z,CAAA7iB,GACA,MAAAv1K,EAAA/2P,KAAAgC,QAAA+0P,KACAt8F,EAAAz6J,KAAAy6J,IACAqhB,EAAA97K,KAAAglb,iBAAAhlb,KAAAglb,eAAAhlb,KAAAqsb,sBAAA/f;AACA,IAAAhsa,EAAA+ja;AACA,MAAA+qB,EAAA,CAAAv2D,EAAAC,EAAAnrX,KACAA,EAAAI,OAAAJ,EAAArI,QAGAm1J,EAAAp4C,OACAo4C,EAAA66Q,UAAA3na,EAAAI,MACA0sJ,EAAA+6Q,YAAA7na,EAAArI,MACAm1J,EAAA40R,YAAA1hb,EAAAsna,YAAA,IACAx6Q,EAAAy6Q,eAAAvna,EAAAwna,iBACA16Q,EAAA60R,YACA70R,EAAA80R,OAAA12D,EAAA7xX,EAAA6xX,EAAArnX,GACAipJ,EAAA+0R,OAAA12D,EAAA9xX,EAAA8xX,EAAAtnX,GACAipJ,EAAAg1R,SACAh1R,EAAA8M;AAEA,GAAAwvF,EAAA5xO,QACA,IAAA7kB,EAAA,EAAA+ja,EAAAvoP,EAAAv7K,OAA4CD,EAAA+ja,IAAU/ja,EAAA,CACtD,MAAA83J,EAAA0jB,EAAAx7K;AACAy2P,EAAA24L,iBACAN,EAAA,CACApob,EAAAoxJ,EAAAm5G,GACA//P,EAAA4mJ,EAAAq5G,IACqB,CACrBzqQ,EAAAoxJ,EAAA40R,GACAx7a,EAAA4mJ,EAAA60R,IACqB70R,GAErB2+F,EAAAotL,WACAiL,EAAA,CACApob,EAAAoxJ,EAAAw0R,IACAp7a,EAAA4mJ,EAAAy0R,KACqB,CACrB7lb,EAAAoxJ,EAAA00R,IACAt7a,EAAA4mJ,EAAA20R,KACqB,CACrBznb,MAAA8yJ,EAAAq1R,UACA1/a,MAAAqqJ,EAAAixR,UACApU,WAAA78Q,EAAAs1R,eACAvY,iBAAA/8Q,EAAAu1R,sBAGA,CAEA,CACA,UAAAgC,GACA,MAAAjuB,MAAgBA,EAAAjnQ,MAAAz4J,SAAAogL,OAAyBA,EAAA20E,SAAoB/2P,KAC7Dssb,EAAAlqQ,EAAAwjQ,WAAA5lb,KAAAqqa,cACAkiB,EAAAnqQ,EAAAj9J,QAAAmna,EAAAv+a,MAAA;AACA,IAAAw+a,EACA;AAEA,MAAAqD,EAAA74L,EAAA6uL,WAAA5lb,KAAAqqa,WAAA,IAAAiL,UACAoX,EAAA1sb,KAAA0lb;AACA,IAAAn0K,EAAAy7K,EAAAv7K,EAAAw7K;AACAjtb,KAAAuxW,gBACAhgG,EAAA8vJ,EAAA0qB,YAAArqB,EAAA1ha,KAAA4N,KAAA2+a,KAAA,EACAS,EAAA3rB,EAAA0qB,YAAArqB,EAAA1ha,KAAAgO,MAAA4hb,KAAA,EACAn+K,EAAAw7K,EAAAP,IAEAj7K,EAAA4vJ,EAAA0qB,YAAArqB,EAAA1ha,KAAA6N,IAAA0+a,KAAA,EACAU,EAAA5rB,EAAA0qB,YAAArqB,EAAA1ha,KAAA8N,OAAA8hb,KAAA,EACAr+K,EAAAy7K,EAAAN,GAEAjyR,EAAAp4C,OACAo4C,EAAA66Q,UAAAgX,EAAAv+a,MACA0sJ,EAAA+6Q,YAAA8W,EAAAhnb,MACAm1J,EAAA60R,YACA70R,EAAA80R,OAAAh+K,EAAAE,GACAh3G,EAAA+0R,OAAAxC,EAAAC,GACAxyR,EAAAg1R,SACAh1R,EAAA8M,SACA,CACA,UAAAsoR,CAAAvjB,GAEA,IADAtsa,KAAAgC,QAAA2ta,MACAxqZ,QACA;AAEA,MAAAs1I,EAAAz6J,KAAAy6J,IACAglG,EAAAz/P,KAAAgvb;AACAvvL,GACA4hK,EAAAyuB,SAAAr1R,EAAAglG;AAEA,MAAA3jF,EAAA97K,KAAAomb,cAAA9Z;AACA,UAAAl0Q,KAAA0jB,EAAA,CACA,MAAAi0Q,EAAA33R,EAAAp2J,QACAmpb,EAAA/yR,EAAAksR,KACA98Q,EAAApP,EAAAoP,MACAh2J,EAAA4mJ,EAAA41R;AACA3sB,EAAAj4B,WAAA3uO,EAAA+M,EAAA,EAAAh2J,EAAA25a,EAAA4E,EACA,CACAtwL,GACA4hK,EAAA2uB,WAAAv1R,EAEA,CACA,SAAAw1R,GACA,MAAAx1R,IAAgBA,EAAAz4J,SAAA4pB,SAAiBA,EAAA2xI,QAAApsJ,YAAiCnR;AAClE,IAAAu9J,EAAAp4I,QACA;AAEA,MAAAm/Z,EAAAjjB,EAAAkjB,OAAAhnR,EAAA+mR,MACAvja,EAAAsgZ,EAAAke,UAAAhiR,EAAAx8I,SACA2ja,EAAAnnR,EAAAmnR;AACA,IAAA1ma,EAAAsma,EAAAE,WAAA;AACA,WAAA54Z,GAAA,WAAAA,GAAAy1Y,EAAAxsT,SAAAjpF,IACA5N,GAAA+C,EAAAjT,OACAuzZ,EAAAlha,QAAAo9J,EAAAl6J,QACA2a,GAAAsma,EAAAE,YAAAjnR,EAAAl6J,KAAA9C,OAAA,KAGAyd,GAAA+C,EAAAlT;AAEA,MAAAqib,OAAgBA,EAAAC,SAAAjzL,WAAAk3K,YAnlChB,SAAAluZ,EAAAlI,EAAA4N,EAAA84Z,GACA,MAAA72a,IAAYA,EAAAD,OAAAE,SAAAE,QAAA0zZ,SAAuCx7Y,GACnDomZ,UAAYA,EAAApG,UAAsBxE;AAClC,IACAxkK,EAAAgzL,EAAAC,EADA/b,EAAA;AAEA,MAAA9yZ,EAAAxT,EAAAD,EACAE,EAAAC,EAAAJ;AACA,GAAAsY,EAAAqrV,eAAA,CAEA,GADA2+E,EAAA7uB,EAAA+uB,eAAA1L,EAAA92a,EAAAI,GACAqzZ,EAAAxsT,SAAAjpF,GAAA,CACA,MAAAsha,EAAAnla,OAAA2wB,KAAA9sB,GAAA,GACAjpB,EAAAipB,EAAAsha;AACAiD,EAAAjqB,EAAAgnB,GAAAxd,iBAAA/sa,GAAA2e,EAAAtD,CACA,MACAmya,EADU,WAAAvka,GACV0gZ,EAAAx+Z,OAAAw+Z,EAAAz+Z,KAAA,EAAAyT,EAAAtD,EAEAula,GAAAr9Z,EAAA0F,EAAA5N;AAEAk/O,EAAAlvP,EAAAJ,CACA,KAAM,CACN,GAAAyzZ,EAAAxsT,SAAAjpF,GAAA,CACA,MAAAsha,EAAAnla,OAAA2wB,KAAA9sB,GAAA,GACAjpB,EAAAipB,EAAAsha;AACAgD,EAAAhqB,EAAAgnB,GAAAxd,iBAAA/sa,GAAAoL,EAAAiQ,CACA,MACAkya,EADU,WAAAtka,GACV0gZ,EAAA1+Z,KAAA0+Z,EAAAt+Z,OAAA,EAAAD,EAAAiQ,EAEAula,GAAAr9Z,EAAA0F,EAAA5N;AAEAmya,EAAA9uB,EAAA+uB,eAAA1L,EAAA52a,EAAAD,GACAuma,EAAA,SAAAxoZ,GAAAy1Y,EAAAmW,QAAAnW,EAAAmW,OACA,CACA,OACA0Y,SACAC,SACAjzL,WACAk3K,WAEA,CAtCA,CAmlCyDp0a,KAAAge,EAAA4N,EAAA84Z;AACzDrjB,EAAAj4B,WAAA3uO,EAAA8C,EAAAl6J,KAAA,IAAAihb,EAAA,CACAh/a,MAAAi4J,EAAAj4J,MACA43P,WACAk3K,WACA7c,UAAAktB,GAAAC,EAAA94Z,EAAAza,GACA88a,aAAA,SACAr7R,YAAA,CACAs9R,EACAC,IAGA,CACA,IAAApuB,CAAAuK,GACAtsa,KAAAupb,eAGAvpb,KAAAivb,iBACAjvb,KAAAmvb,SAAA7iB,GACAtsa,KAAA2vb,aACA3vb,KAAAiwb,YACAjwb,KAAA6vb,WAAAvjB,GACA,CACA,OAAA8S,GACA,MAAAnmY,EAAAj5C,KAAAgC,QACA8jS,EAAA7sP,EAAA02X,OAAA12X,EAAA02X,MAAA30Z,GAAA,EACAq1a,EAAAhvB,EAAA4G,eAAAhvX,EAAA89M,MAAA99M,EAAA89M,KAAA/7O,GAAA,GACAukR,EAAA8hI,EAAA4G,eAAAhvX,EAAAmpI,QAAAnpI,EAAAmpI,OAAApnK,EAAA;AACA,OAAAhb,KAAAupb,cAAAvpb,KAAA+ha,OAAA6iB,GAAA3/a,UAAA88Z,KAUA,CACA,CACA/mZ,EAAAq1a,EACAtuB,KAAAuK,IACAtsa,KAAAivb,iBACAjvb,KAAAmvb,SAAA7iB,GACAtsa,KAAAiwb,cAGA,CACAj1a,EAAAukR,EACAwiI,KAAA,KACA/ha,KAAA2vb,eAGA,CACA30a,EAAA8qR,EACAi8H,KAAAuK,IACAtsa,KAAA6vb,WAAAvjB,MA3BA,CACA,CACAtxZ,EAAA8qR,EACAi8H,KAAAuK,IACAtsa,KAAA+ha,KAAAuK,KA2BA,CACA,uBAAAjH,CAAAvha,GACA,MAAAkib,EAAAhmb,KAAA0ha,MAAA2a,+BACA3I,EAAA1za,KAAA0f,KAAA,SACAuH,EAAA;AACA,IAAA3mB,EAAA+ja;AACA,IAAA/ja,EAAA,EAAA+ja,EAAA2hB,EAAAzlb,OAAwCD,EAAA+ja,IAAU/ja,EAAA,CAClD,MAAAq5S,EAAAqsI,EAAA1lb;AACAq5S,EAAA+5H,KAAA1za,KAAAg/C,IAAAl7C,GAAA61S,EAAA71S,UACAmjB,EAAArf,KAAA+xS,EAEA,CACA,OAAA1yR,CACA,CACA,uBAAAuka,CAAAzib,GACA,MAAAkwC,EAAAj5C,KAAAgC,QAAA2ta,MAAAiW,WAAA5lb,KAAAqqa,WAAAtha;AACA,OAAAs4Z,EAAAkjB,OAAAtrY,EAAAqrY,KACA,CACA,UAAAgM,GACA,MAAAC,EAAAvwb,KAAAwrb,wBAAA,GAAAhH;AACA,OAAAxkb,KAAAuxW,eAAAvxW,KAAA+N,MAAA/N,KAAAshB,QAAAiva,CACA,EAGA,MAAAC,GACA,WAAAl1W,CAAAx3E,EAAAmyR,EAAAslJ,GACAv7a,KAAA8D,OACA9D,KAAAi2R,QACAj2R,KAAAu7a,WACAv7a,KAAA87K,MAAA/zJ,OAAAxjB,OAAA,KACA,CACA,SAAAksb,CAAA3sb,GACA,OAAAikB,OAAA9iB,UAAAyrb,cAAA9lb,KAAA5K,KAAA8D,KAAAmB,UAAAnB,EAAAmB,UACA,CACA,QAAA8yK,CAAA3f,GACA,MAAAoK,EAAAz6I,OAAAC,eAAAowI;AACA,IAAAu4R,YAiEAnuR,GACA,aAAAA,GAAA,aAAAA,CACA,EAnEAmuR,CACAnuR,KACAmuR,EAAA3wb,KAAA+3K,SAAAvV;AAEA,MAAAsZ,EAAA97K,KAAA87K,MACA98H,EAAAo5G,EAAAp5G,GACAi3O,EAAAj2R,KAAAi2R,MAAA,IAAAj3O;AACA,IAAAA,EACA,UAAAt+C,MAAA,2BAAA03J;AAEA,OAAAp5G,KAAA88H,IAGAA,EAAA98H,GAAAo5G,EAyBA,SAAAA,EAAA69H,EAAA06J,GACA,MAAAC,EAAAvvB,EAAApzG,MAAAlmS,OAAAxjB,OAAA,OACAosb,EAAAtvB,EAAA72W,SAAAl+B,IAAAqka,GAAA,GACAtvB,EAAA72W,SAAAl+B,IAAA2pQ,GACA79H,EAAA5tG;AAEA62W,EAAA72W,SAAA39B,IAAAopQ,EAAA26J,GACAx4R,EAAAy4R,eAOA,SAAA56J,EAAAt/Q,GACAoR,OAAA2wB,KAAA/hC,GAAA6D,QAAAkzH,IACA,MAAAojT,EAAApjT,EAAAz1H,MAAA,KACA84a,EAAAD,EAAAn/R,MACAq/R,EAAA,CACA/6J,GACAxjR,OAAAq+a,GAAAh5a,KAAA,KACAgwC,EAAAnxC,EAAA+2H,GAAAz1H,MAAA,KACAg5a,EAAAnpY,EAAA6pG,MACAu/R,EAAAppY,EAAAhwC,KAAA;AACAupZ,EAAA72W,SAAA1iD,MAAAkpb,EAAAD,EAAAG,EAAAD,IAEA,CAZA,CANAh7J,EAAA79H,EAAAy4R,eAEAz4R,EAAA+4R,aACA9vB,EAAA72W,SAAA4mY,SAAAn7J,EAAA79H,EAAA+4R,YAEA,CAbA,CAxBA/4R,EAAA69H,EAAA06J,GACA3wb,KAAAu7a,UACAla,EAAA72W,SAAA+wX,SAAAnjR,EAAAp5G,GAAAo5G,EAAA88J,YALAj/B,CAQA,CACA,GAAA3pQ,CAAA0yB,GACA,OAAAh/C,KAAA87K,MAAA98H,EACA,CACA,UAAAk5H,CAAA9f,GACA,MAAA0jB,EAAA97K,KAAA87K,MACA98H,EAAAo5G,EAAAp5G,GACAi3O,EAAAj2R,KAAAi2R;AACAj3O,KAAA88H,UACAA,EAAA98H,GAEAi3O,GAAAj3O,KAAAqiX,EAAA72W,SAAAyrO,YACAorI,EAAA72W,SAAAyrO,GAAAj3O,GACAh/C,KAAAu7a,iBACAla,EAAAnsG,UAAAl2Q,GAGA,EA6HA,IAAA0xM,GAAA,IA5FA,MACA,WAAAp1K,GACAt7E,KAAAo7a,YAAA,IAAAoV,GAAAjqB,EAAA,eACAvma,KAAAmiB,SAAA,IAAAqua,GAAA7ra,GAAA,YACA3kB,KAAAoqU,QAAA,IAAAomH,GAAAzoa,OAAA,WACA/nB,KAAAkma,OAAA,IAAAsqB,GAAA5L,GAAA,UACA5kb,KAAAqxb,iBAAA,CACArxb,KAAAo7a,YACAp7a,KAAAkma,OACAlma,KAAAmiB,SAEA,CACA,GAAAy1B,IAAAlf,GACA14B,KAAAsxb,MAAA,WAAA54Z,EACA,CACA,MAAAgjD,IAAAhjD,GACA14B,KAAAsxb,MAAA,aAAA54Z,EACA,CACA,cAAA64Z,IAAA74Z,GACA14B,KAAAsxb,MAAA,WAAA54Z,EAAA14B,KAAAo7a,YACA,CACA,WAAA3T,IAAA/uY,GACA14B,KAAAsxb,MAAA,WAAA54Z,EAAA14B,KAAAmiB,SACA,CACA,UAAAqva,IAAA94Z,GACA14B,KAAAsxb,MAAA,WAAA54Z,EAAA14B,KAAAoqU,QACA,CACA,SAAAqnH,IAAA/4Z,GACA14B,KAAAsxb,MAAA,WAAA54Z,EAAA14B,KAAAkma,OACA,CACA,aAAAwrB,CAAA1yY,GACA,OAAAh/C,KAAAs5G,KAAAt6D,EAAAh/C,KAAAo7a,YAAA,aACA,CACA,UAAA7uK,CAAAvtN,GACA,OAAAh/C,KAAAs5G,KAAAt6D,EAAAh/C,KAAAmiB,SAAA,UACA,CACA,SAAAwva,CAAA3yY,GACA,OAAAh/C,KAAAs5G,KAAAt6D,EAAAh/C,KAAAoqU,QAAA,SACA,CACA,QAAAjnT,CAAA67B,GACA,OAAAh/C,KAAAs5G,KAAAt6D,EAAAh/C,KAAAkma,OAAA,QACA,CACA,iBAAA0rB,IAAAl5Z,GACA14B,KAAAsxb,MAAA,aAAA54Z,EAAA14B,KAAAo7a,YACA,CACA,cAAAyW,IAAAn5Z,GACA14B,KAAAsxb,MAAA,aAAA54Z,EAAA14B,KAAAmiB,SACA,CACA,aAAA2va,IAAAp5Z,GACA14B,KAAAsxb,MAAA,aAAA54Z,EAAA14B,KAAAoqU,QACA,CACA,YAAA2nH,IAAAr5Z,GACA14B,KAAAsxb,MAAA,aAAA54Z,EAAA14B,KAAAkma,OACA,CACA,KAAAorB,CAAAt9W,EAAAt7C,EAAAs5Z,GACA,IACAt5Z,GACAle,QAAA8d,IACA,MAAA25Z,EAAAD,GAAAhyb,KAAAkyb,oBAAA55Z;AACA05Z,GAAAC,EAAAxB,UAAAn4Z,IAAA25Z,IAAAjyb,KAAAoqU,SAAA9xS,EAAA0mB,GACAh/C,KAAAmyb,MAAAn+W,EAAAi+W,EAAA35Z,GAEA+oY,EAAA2e,KAAA1nZ,EAAA8/H,IACA,MAAAg6R,EAAAJ,GAAAhyb,KAAAkyb,oBAAA95R;AACAp4J,KAAAmyb,MAAAn+W,EAAAo+W,EAAAh6R,MAIA,CACA,KAAA+5R,CAAAn+W,EAAA08K,EAAAz2E,GACA,MAAAo4Q,EAAAhxB,EAAAixB,YAAAt+W;AACAqtV,EAAA1nZ,SAAAsgK,EAAA,SAAAo4Q,GAAA,GAAAp4Q,GACAy2E,EAAA18K,GAAAimG,GACAonP,EAAA1nZ,SAAAsgK,EAAA,QAAAo4Q,GAAA,GAAAp4Q,EACA,CACA,mBAAAi4Q,CAAApub,GACA,QAAAxD,EAAA,EAAuBA,EAAAN,KAAAqxb,iBAAA9wb,OAAkCD,IAAA,CACzD,MAAA2xb,EAAAjyb,KAAAqxb,iBAAA/wb;AACA,GAAA2xb,EAAAxB,UAAA3sb,GACA,OAAAmub,CAEA,CACA,OAAAjyb,KAAAoqU,OACA,CACA,IAAA9wN,CAAAt6D,EAAAgzY,EAAAlub,GACA,MAAAs0J,EAAA45R,EAAA1la,IAAA0yB;AACA,QAAAvtB,IAAA2mI,EACA,UAAA13J,MAAA,IAAAs+C,EAAA,yBAAAl7C,EAAA;AAEA,OAAAs0J,CACA;AAIA,MAAAm6R,GACA,WAAAj3W,GACAt7E,KAAAi7P,WAAAxpO,CACA,CACA,MAAA+ga,CAAA9wB,EAAA+wB,EAAA/5Z,EAAAnS,GAKA,GAJA,eAAAksa,IACAzyb,KAAAi7P,MAAAj7P,KAAA0yb,mBAAAhxB,MACA1ha,KAAA++P,QAAA/+P,KAAAi7P,MAAAymK,EAAA,iBAEAjwY,IAAAzxB,KAAAi7P,MACA;AAEA,MAAAk2L,EAAA5qa,EAAAvmB,KAAA2yb,aAAAjxB,GAAAn7Y,UAAAvmB,KAAA2yb,aAAAjxB,GACAz6Y,EAAAjnB,KAAA++P,QAAAoyL,EAAAzvB,EAAA+wB,EAAA/5Z;AAMA,MALA,iBAAA+5Z,IACAzyb,KAAA++P,QAAAoyL,EAAAzvB,EAAA,QACA1ha,KAAA++P,QAAA/+P,KAAAi7P,MAAAymK,EAAA,aACA1ha,KAAAi7P,WAAAxpO,GAEAxK,CACA,CACA,OAAA83O,CAAAoyL,EAAAzvB,EAAA+wB,EAAA/5Z,GACAA,KAAA;AACA,UAAAyxB,KAAAgnY,EAAA,CACA,MAAApmD,EAAA5gV,EAAA4gV,OACA/2T,EAAA+2T,EAAA0nD,GACA79W,EAAA,CACA8sV,EACAhpY,EACAyxB,EAAAnoD;AAEA,QAAAq/Z,EAAA1nZ,SAAAq6D,EAAAY,EAAAm2T,IAAAryW,EAAAo+D,WACA,QAEA,CACA,QACA,CACA,UAAAs1J,GACAi1K,EAAAqQ,cAAA1xa,KAAAova,UACApva,KAAA4yb,UAAA5yb,KAAAova,OACApva,KAAAova,YAAA39Y,EAEA,CACA,YAAAkha,CAAAjxB,GACA,GAAA1ha,KAAAova,OACA,OAAApva,KAAAova;AAEA,MAAA+hB,EAAAnxb,KAAAova,OAAApva,KAAA0yb,mBAAAhxB;AAEA,OADA1ha,KAAA6yb,oBAAAnxB,GACAyvB,CACA,CACA,kBAAAuB,CAAAhxB,EAAAhiY,GACA,MAAAlI,EAAAkqY,KAAAlqY,OACAx1B,EAAAq/Z,EAAA4G,eAAAzwY,EAAAx1B,SAAAw1B,EAAAx1B,QAAAooU,QAAA,IACAA,EAWA,SAAA5yS,GACA,MAAAs7Z,EAAA,GACA1oH,EAAA,GACA1xR,EAAA3wB,OAAA2wB,KAAAg4M,GAAA05E,QAAAtuJ;AACA,QAAAx7K,EAAA,EAAmBA,EAAAo4C,EAAAn4C,OAAiBD,IACpC8pU,EAAAxiU,KAAA8oP,GAAAihM,UAAAj5Y,EAAAp4C;AAEA,MAAAyyb,EAAAv7Z,EAAA4yS,SAAA;AACA,QAAA9pU,EAAA,EAAmBA,EAAAyyb,EAAAxyb,OAAkBD,IAAA,CACrC,MAAAyqY,EAAAgoD,EAAAzyb,IACA,IAAA8pU,EAAAvgU,QAAAkhY,KACA3gE,EAAAxiU,KAAAmjY,GACA+nD,EAAA/nD,EAAA/rV,OAEA,CACA,OACAorR,UACA0oH,WAEA,CAnBA,CAXAt7Z;AACA,WAAAx1B,GAAA09B,EAuCA,SAAAgiY,GAAAt3F,QAAoCA,EAAA0oH,YAAqB9wb,EAAA09B,GACzD,MAAAzY,EAAA,GACA2R,EAAA8oY,EAAA2I;AACA,UAAAt/B,KAAA3gE,EAAA,CACA,MAAAprR,EAAA+rV,EAAA/rV,GACA/F,EAAA+5Y,GAAAhxb,EAAAg9C,GAAAtf;AACA,OAAAuZ,GAGAhyB,EAAArf,KAAA,CACAmjY,SACA/oY,QAAAixb,GAAAvxB,EAAAlqY,OAAA,CACAuzW,SACAgoD,MAAAD,EAAA9zY,IACa/F,EAAArgB,IAEb,CACA,OAAA3R,CACA,CAlBA,CAvCAy6Y,EAAAt3F,EAAApoU,EAAA09B,GAAA,EACA,CACA,mBAAAmzZ,CAAAnxB,GACA,MAAAwxB,EAAAlzb,KAAA4yb,WAAA,GACAzB,EAAAnxb,KAAAova,OACApjT,EAAA,CAAAlrH,EAAAma,IAAAna,EAAAylB,OAAAvf,IAAAiU,EAAAwI,KAAAjS,GAAAxK,EAAA+jY,OAAA/rV,KAAAxtC,EAAAu5X,OAAA/rV;AACAh/C,KAAA++P,QAAA/yI,EAAAknU,EAAA/B,GAAAzvB,EAAA,QACA1ha,KAAA++P,QAAA/yI,EAAAmlU,EAAA+B,GAAAxxB,EAAA,QACA,EAsBA,SAAAsxB,GAAAhxb,EAAA09B,GACA,OAAAA,QAAA19B,OAGAA,EACA,GAEAA,EALA,IAMA,CAoBA,SAAAixb,GAAAz7Z,GAAAuzW,OAA8BA,EAAAgoD,SAAiB95Y,EAAArgB,GAC/C,MAAA8f,EAAAlhB,EAAA27Z,gBAAApoD,GACAm/B,EAAA1yY,EAAA2yY,gBAAAlxX,EAAAP;AAIA,OAHAq6Y,GAAAhoD,EAAAvgV,UACA0/W,EAAAtia,KAAAmjY,EAAAvgV,UAEAhzB,EAAA4yY,eAAAF,EAAAtxY,EAAA,CACA,IACA,CACAw6Z,cACAC,aACAC,YAEA,CAEA,SAAAC,GAAAzvb,EAAA9B,GACA,MAAAwxb,EAAAnyB,EAAA72W,SAAAu+W,SAAAjla,IAAA;AAEA,QADA9B,EAAA+ma,UAAA,IAAkDjla,IAAA,IAClDwka,WAAAtma,EAAAsma,WAAAkrB,EAAAlrB,WAAA,GACA,CAaA,SAAAmrB,GAAAz0Y,GACA,SAAAA,GAAA,MAAAA,GAAA,MAAAA,EACA,OAAAA,CAEA,CACA,SAAA00Y,GAAA9na,GACA,cAAAA,GAAA,WAAAA,EACA,IAEA,SAAAA,GAAA,UAAAA,EACA,SADA,CAGA,CACA,SAAA+na,GAAA30Y,KAAA40Y,GACA,GAAAH,GAAAz0Y,GACA,OAAAA;AAEA,UAAA/F,KAAA26Y,EAAA,CACA,MAAAl0a,EAAAu5B,EAAAv5B,MAAAg0a,GAAAz6Y,EAAArtB,WAAAozB,EAAAz+C,OAAA,GAAAkzb,GAAAz0Y,EAAA,GAAA36B;AACA,GAAA3E,EACA,OAAAA,CAEA,CACA,UAAAhf,MAAA,6BAAiDs+C,uDACjD,CACA,SAAA60Y,GAAA70Y,EAAAt/B,EAAA+gE,GACA,GAAAA,EAAA/gE,EAAA,YAAAs/B,EACA,OACAt/B,OAGA,CAgEA,SAAAo0a,GAAAt8Z,GACA,MAAAx1B,EAAAw1B,EAAAx1B,UAAAw1B,EAAAx1B,QAAA;AACAA,EAAAooU,QAAAi3F,EAAA4G,eAAAjma,EAAAooU,QAAA,IACApoU,EAAAkka,OAzDA,SAAA1uY,EAAAx1B,GACA,MAAA+xb,EAAA1yB,EAAAnsG,UAAA19R,EAAA1zB,OAAA,CACAoia,OAAA,IAEA8tB,EAAAhyb,EAAAkka,QAAA,GACA+tB,EAAAV,GAAA/7Z,EAAA1zB,KAAA9B,GACAkka,EAAAn+Y,OAAAxjB,OAAA;AA8CA,OA7CAwjB,OAAA2wB,KAAAs7Y,GAAAx5a,QAAAwkC,IACA,MAAAk1Y,EAAAF,EAAAh1Y;AACA,IAAAqiX,EAAAxsT,SAAAq/U,GACA,OAAA3+a,QAAAwD,MAAA,0CAA2EimC;AAE3E,GAAAk1Y,EAAAhqK,OACA,OAAA30Q,QAAAC,KAAA,kDAAkFwpC;AAElF,MAAAt/B,EAAAi0a,GAAA30Y,EAAAk1Y,EAxBA,SAAAl1Y,EAAAxnB,GACA,GAAAA,EAAAvK,MAAAuK,EAAAvK,KAAA87Y,SAAA,CACA,MAAAorB,EAAA38Z,EAAAvK,KAAA87Y,SAAAxiZ,OAAA5mB,KAAAqoa,UAAAhpX,GAAAr/C,EAAAwoa,UAAAnpX;AACA,GAAAm1Y,EAAA5zb,OACA,OAAAszb,GAAA70Y,EAAA,IAAAm1Y,EAAA,KAAAN,GAAA70Y,EAAA,IAAAm1Y,EAAA,GAEA,CACA,QACA,CARA,CAwBAn1Y,EAAAxnB,GAAA6pY,EAAA72W,SAAA07W,OAAAguB,EAAApwb,OACAswb,EA5DA,SAAA10a,EAAA4oZ,GACA,OAAA5oZ,IAAA4oZ,EAAA,mBACA,CAFA,CA4DA5oZ,EAAAu0a,GACAI,EAAAN,EAAA7tB,QAAA;AACAA,EAAAlnX,GAAAqiX,EAAAizB,QAAAvsa,OAAAxjB,OAAA,OACA,CACAmb,QAEAw0a,EACAG,EAAA30a,GACA20a,EAAAD,OAGA58Z,EAAAvK,KAAA87Y,SAAAvuZ,QAAAimE,IACA,MAAA38E,EAAA28E,EAAA38E,MAAA0zB,EAAA1zB,KACAwka,EAAA7nV,EAAA6nV,WAAAirB,GAAAzvb,EAAA9B,GAEAqyb,GADAhzB,EAAAnsG,UAAApxT,IAAA,IACAoia,QAAA;AACAn+Y,OAAA2wB,KAAA27Y,GAAA75a,QAAA+5a,IACA,MAAA70a,EAtFA,SAAAs/B,EAAAspX,GACA,IAAA5oZ,EAAAs/B;AAMA,MALA,YAAAA,EACAt/B,EAAA4oZ,EACM,YAAAtpX,IACNt/B,EAAA,MAAA4oZ,EAAA,SAEA5oZ,CACA,CARA,CAsFA60a,EAAAjsB,GACAtpX,EAAAyhC,EAAA/gE,EAAA,WAAAA;AACAwmZ,EAAAlnX,GAAAknX,EAAAlnX,IAAAj3B,OAAAxjB,OAAA,MACA88Z,EAAAizB,QAAApuB,EAAAlnX,GAAA,CACA,CACAt/B,QAEAs0a,EAAAh1Y,GACAq1Y,EAAAE,SAIAxsa,OAAA2wB,KAAAwtX,GAAA1rZ,QAAAye,IACA,MAAA/S,EAAAggZ,EAAAjtY;AACAooY,EAAAizB,QAAApua,EAAA,CACAm7Y,EAAA72W,SAAA07W,OAAAhgZ,EAAApiB,MACAu9Z,EAAA72W,SAAAtkC,UAGAggZ,CACA,CArDA,CAyDA1uY,EAAAx1B,EACA,CACA,SAAAwyb,GAAAvna,GAIA,OAHAA,KAAA,IACA87Y,SAAA97Y,EAAA87Y,UAAA,GACA97Y,EAAA49Y,OAAA59Y,EAAA49Y,QAAA,GACA59Y,CACA,CAOA,MAAAwna,GAAA,IAAAp9Z,IACAq9Z,GAAA,IAAA3wa;AACA,SAAA4wa,GAAAp8Z,EAAAq8Z,GACA,IAAAl8Y,EAAA+7Y,GAAAnoa,IAAAiM;AAMA,OALAmgB,IACAA,EAAAk8Y,IACAH,GAAA5na,IAAA0L,EAAAmgB,GACAg8Y,GAAA98Y,IAAAc,IAEAA,CACA,CACA,MAAAm8Y,GAAA,CAAAhoa,EAAAglB,EAAA5Y,KACA,MAAAggB,EAAAooX,EAAA6J,iBAAAr5X,EAAA5Y;KACAxH,IAAAwnB,GACApsB,EAAA+qB,IAAAqB;AAGA,MAAA67Y,GACA,WAAAx5W,CAAA9jD,GACAx3B,KAAA+0b,QAzBA,SAAAv9Z,GAIA,OAHAA,KAAA,IACAvK,KAAAuna,GAAAh9Z,EAAAvK,MACA6ma,GAAAt8Z,GACAA,CACA,CALA,CAyBAA,GACAx3B,KAAAg1b,YAAA,IAAA39Z,IACAr3B,KAAAi1b,eAAA,IAAA59Z,GACA,CACA,YAAAnZ,GACA,OAAAle,KAAA+0b,QAAA72a,QACA,CACA,QAAApa,GACA,OAAA9D,KAAA+0b,QAAAjxb,IACA,CACA,QAAAA,IACA9D,KAAA+0b,QAAAjxb,MACA,CACA,QAAAmpB,GACA,OAAAjtB,KAAA+0b,QAAA9na,IACA,CACA,QAAAA,IACAjtB,KAAA+0b,QAAA9na,KAAAuna,GAAAvna,EACA,CACA,WAAAjrB,GACA,OAAAhC,KAAA+0b,QAAA/yb,OACA,CACA,WAAAA,IACAhC,KAAA+0b,QAAA/yb,SACA,CACA,WAAAooU,GACA,OAAApqU,KAAA+0b,QAAA3qH,OACA,CACA,MAAAz5T,GACA,MAAA6mB,EAAAx3B,KAAA+0b;AACA/0b,KAAAk1b,aACApB,GAAAt8Z,EACA,CACA,UAAA09Z,GACAl1b,KAAAg1b,YAAAx+W,QACAx2E,KAAAi1b,eAAAz+W,OACA,CACA,gBAAAyzV,CAAAkrB,GACA,OAAAR,GAAAQ,EAAA,KACA,CACA,YAAgCA,IAChC,KAGA,CACA,yBAAA/nB,CAAA+nB,EAAAtjR,GACA,OAAA8iR,GAAA,GAA6BQ,gBAA0BtjR,IAAW,KAClE,CACA,YAAgCsjR,iBAA2BtjR,IAC3D,eAAmCA,KAEnC,CACA,YAAgCsjR,IAChC,KAGA,CACA,uBAAAnoB,CAAAmoB,EAAAtoB,GACA,OAAA8nB,GAAA,GAA6BQ,KAAetoB,IAAY,KACxD,CACA,YAAgCsoB,cAAwBtoB,IACxD,YAAgCsoB,IAChC,YAAgCtoB,IAChC,KAGA,CACA,eAAAsmB,CAAApoD,GACA,MAAA/rV,EAAA+rV,EAAA/rV;AAEA,OAAA21Y,GAAA,GADA30b,KAAA8D,eAC4Ck7C,IAAG,KAC/C,CACA,WAA+BA,OAC/B+rV,EAAAqqD,wBAAA,KAGA,CACA,aAAAC,CAAAC,EAAAC,GACA,MAAAP,EAAAh1b,KAAAg1b;AACA,IAAA5oa,EAAA4oa,EAAA1oa,IAAAgpa;AAKA,OAJAlpa,IAAAmpa,IACAnpa,EAAA,IAAAiL,IACA29Z,EAAAnoa,IAAAyoa,EAAAlpa,IAEAA,CACA,CACA,eAAA+9Y,CAAAmrB,EAAAE,EAAAD,GACA,MAAAvzb,QAAgBA,EAAA8B,QAAkB9D,KAClCosB,EAAApsB,KAAAq1b,cAAAC,EAAAC,GACA/gS,EAAApoI,EAAAE,IAAAkpa;AACA,GAAAhhS,EACA,OAAAA;AAEA,MAAA01Q,EAAA,IAAAnmZ;AACAyxa,EAAAh7a,QAAAk+B,IACA48Y,IACAprB,EAAAtyX,IAAA09Y,GACA58Y,EAAAl+B,QAAAye,GAAA47Z,GAAA3qB,EAAAorB,EAAAr8Z,KAEAyf,EAAAl+B,QAAAye,GAAA47Z,GAAA3qB,EAAAloa,EAAAi3B,IACAyf,EAAAl+B,QAAAye,GAAA47Z,GAAA3qB,EAAA7I,EAAAnsG,UAAApxT,IAAA,GAAwFm1B,IACxFyf,EAAAl+B,QAAAye,GAAA47Z,GAAA3qB,EAAA7I,EAAA72W,SAAAvxB,IACAyf,EAAAl+B,QAAAye,GAAA47Z,GAAA3qB,EAAA7I,EAAA8vB,YAAAl4Z;AAEA,MAAA6gH,EAAAjmI,MAAA0Z,KAAA28Y;AAOA,OANA,IAAApwR,EAAAv5I,QACAu5I,EAAAlyI,KAAAmgB,OAAAxjB,OAAA,OAEAmwb,GAAA9ja,IAAA4ka,IACAppa,EAAAS,IAAA2oa,EAAA17S,GAEAA,CACA,CACA,iBAAA27S,GACA,MAAAzzb,QAAgBA,EAAA8B,QAAkB9D;AAClC,OACAgC,EACAq/Z,EAAAnsG,UAAApxT,IAAA,GACAu9Z,EAAA72W,SAAAu+W,SAAAjla,IAAA,GACA,CACAA,QAEAu9Z,EAAA72W,SACA62W,EAAA8vB,YAEA,CACA,mBAAAjkB,CAAAhD,EAAA5jO,EAAA1tK,EAAAq0Y,EAAA,CACA,KAEA,MAAAhmZ,EAAA,CACAy8Y,aAEAgyB,SAAgBA,EAAAC,eAA0BC,GAAA51b,KAAAi1b,eAAA/qB,EAAA+C;AAC1C,IAAAjra,EAAA0zb;AACA,GAqCA,SAAAvrP,EAAA7D,GACA,MAAAuvP,aAAYA,EAAAC,eAA8Bz0B,EAAAsxB,aAAAxoP;AAC1C,UAAAjf,KAAAob,EAAA,CACA,MAAA8sP,EAAAyC,EAAA3qQ,GACAmoQ,EAAAyC,EAAA5qQ,GACAvoL,GAAA0wb,GAAAD,IAAAjpP,EAAAjf;AACA,GAAAkoQ,IAAA/xB,EAAAt7T,WAAApjG,IAAAozb,GAAApzb,KAAA0wb,GAAAhyB,EAAAlha,QAAAwC,GACA,QAEA,CACA,QACA,CAXA,CArCA+yb,EAAApvP,GAAA,CACAr/K,EAAAy8Y,WACA9qY,EAAAyoY,EAAAt7T,WAAAntE;AACA,MAAAo9Z,EAAAh2b,KAAAoqa,eAAAF,EAAAtxY,EAAA+8Z;AACA3zb,EAAAq/Z,EAAA40B,eAAAP,EAAA98Z,EAAAo9Z,EACA,CACA,UAAA9qQ,KAAAob,EACAr/K,EAAAikK,GAAAlpL,EAAAkpL;AAEA,OAAAjkK,CACA,CACA,cAAAmjZ,CAAAF,EAAAtxY,EAAAq0Y,EAAA,CACA,IACAipB,GACA,MAAAR,SAAgBA,GAAYE,GAAA51b,KAAAi1b,eAAA/qB,EAAA+C;AAC5B,OAAA5L,EAAAxsT,SAAAj8E,GAAAyoY,EAAA40B,eAAAP,EAAA98Z,OAAAnH,EAAAyka,GAAAR,CACA,EAEA,SAAAE,GAAAO,EAAAjsB,EAAA+C,GACA,IAAA7gZ,EAAA+pa,EAAA7pa,IAAA49Y;AACA99Y,IACAA,EAAA,IAAAiL,IACA8+Z,EAAAtpa,IAAAq9Y,EAAA99Y;AAEA,MAAAmM,EAAA00Y,EAAAn1Z;AACA,IAAA08I,EAAApoI,EAAAE,IAAAiM;AASA,OARAi8H,IAEAA,EAAA,CACAkhS,SAFAr0B,EAAA+0B,gBAAAlsB,EAAA+C,GAGA0oB,YAAA1oB,EAAA1mZ,OAAA1hB,MAAAwf,cAAAtf,SAAA,WAEAqnB,EAAAS,IAAA0L,EAAAi8H,IAEAA,CACA,CACA,MAAAuhS,GAAApzb,GAAA0+Z,EAAAxsT,SAAAlyG,IAAAolB,OAAAs7F,oBAAA1gH,GAAA8gB,KAAAwV,GAAAooY,EAAAt7T,WAAApjG,EAAAs2B,KAgBAo9Z,GAAA,CACA,MACA,SACA,OACA,QACA;AAEA,SAAAC,GAAA1qa,EAAAlM,GACA,cAAAkM,GAAA,WAAAA,IAAA,IAAAyqa,GAAAxsb,QAAA+hB,IAAA,MAAAlM,CACA,CACA,SAAA62a,GAAAC,EAAAC,GACA,gBAAA31b,EAAAma,GACA,OAAAna,EAAA01b,KAAAv7a,EAAAu7a,GAAA11b,EAAA21b,GAAAx7a,EAAAw7a,GAAA31b,EAAA01b,GAAAv7a,EAAAu7a,EACA,CACA,CACA,SAAAE,GAAA99Z,GACA,MAAA8oY,EAAA9oY,EAAA8oY,MACA4B,EAAA5B,EAAA1/Z,QAAAuha;AACA7B,EAAAonB,cAAA,eACAznB,EAAA1nZ,SAAA2pZ,KAAAqzB,WAAA,CACA/9Z,GACA8oY,EACA,CACA,SAAAk1B,GAAAh+Z,GACA,MAAA8oY,EAAA9oY,EAAA8oY,MACA4B,EAAA5B,EAAA1/Z,QAAAuha;AACAlC,EAAA1nZ,SAAA2pZ,KAAAuzB,WAAA,CACAj+Z,GACA8oY,EACA,CACA,SAAAo1B,GAAA1+R,GASA,OARAipQ,EAAA4hB,mBAAA,iBAAA7qR,EACAA,EAAAzzJ,SAAA2hL,eAAAluB,GACMA,KAAA73J,SACN63J,IAAA,IAEAA,KAAAooR,SACApoR,IAAAooR,QAEApoR,CACA,CACA,MAAA2L,GAAA,GACAgzR,GAAA99Z,IACA,MAAAunZ,EAAAsW,GAAA79Z;AACA,OAAAlR,OAAAi/B,OAAA+8G,IAAAx9I,OAAApiB,KAAAq8a,YAAA7uR;AAEA,SAAAqlS,GAAAnlZ,EAAA3yB,EAAAg9O,GACA,MAAAxjN,EAAA3wB,OAAA2wB,KAAA7G;AACA,UAAA5Y,KAAAyf,EAAA,CACA,MAAAu+Y,GAAAh+Z;AACA,GAAAg+Z,GAAA/3a,EAAA,CACA,MAAAvc,EAAAkvC,EAAA5Y;OACA4Y,EAAA5Y,IACAijO,EAAA,GAAA+6L,EAAA/3a,KACA2yB,EAAAolZ,EAAA/6L,GAAAv5P,EAEA,CACA,CACA,CAUA,MAAAw+Z,GACAqF,gBAAAnF,EAAA72W;AACAg8W,iBAAAziQ;AACAyiQ,iBAAAnF,EAAAnsG;AACAsxG,gBAAA91K;AACA81K,eA3EA;AA4EAA,gBAAAuwB;AACA,eAAAh/Q,IAAA+D,GACA40E,GAAA94M,OAAAkkI,GACAo7Q,IACA,CACA,iBAAAh/Q,IAAA4D,GACA40E,GAAAh1K,UAAAogG,GACAo7Q,IACA,CACA,WAAA57W,CAAA88E,EAAA++R,GACA,MAAA3/Z,EAAAx3B,KAAAw3B,OAAA,IAAAs9Z,GAAAqC,GACAC,EAAAN,GAAA1+R,GACAi/R,EAAAN,GAAAK;AACA,GAAAC,EACA,UAAA32b,MAAA,4CAAA22b,EAAAr4Y,GAAA,kDAAAq4Y,EAAA7W,OAAAxhY,GAAA;AAEA,MAAAh9C,EAAAw1B,EAAA4yY,eAAA5yY,EAAAi+Z,oBAAAz1b,KAAAqqa;AACArqa,KAAAke,SAAA,IAAAsZ,EAAAtZ,UAAA8ka,GAAAoU,IACAp3b,KAAAke,SAAA2ia,aAAArpZ;AACA,MAAAoB,EAAA54B,KAAAke,SAAAqia,eAAA6W,EAAAp1b,EAAAi5R,aACAulJ,EAAA5nZ,KAAA4nZ,OACAl/Z,EAAAk/Z,KAAAl/Z,OACAvT,EAAAyya,KAAAzya;AACA/N,KAAAg/C,GAAAqiX,EAAAvvF,MACA9xU,KAAAy6J,IAAA7hI,EACA54B,KAAAwgb,SACAxgb,KAAA+N,QACA/N,KAAAshB,SACAthB,KAAAszI,SAAAtxI,EACAhC,KAAAs3b,aAAAt3b,KAAAi7R,YACAj7R,KAAAo/a,QAAA,GACAp/a,KAAAu3b,UAAA,GACAv3b,KAAAyla,aAAAh0Y,EACAzxB,KAAAy+a,MAAA,GACAz+a,KAAAgib,6BAAAvwZ,EACAzxB,KAAAssa,eAAA76Y,EACAzxB,KAAAgia,QAAA,GACAhia,KAAAw3b,gBAAA/la,EACAzxB,KAAA6zM,WAAA,GACA7zM,KAAAy3b,0BAAAhma,EACAzxB,KAAA03b,gBAAA,GACA13b,KAAAkma,OAAA,GACAlma,KAAA+4R,SAAA,IAAAw5J,GACAvyb,KAAA8ib,SAAA,GACA9ib,KAAA23b,eAAA,GACA33b,KAAA0/M,YACA1/M,KAAAyta,yBAAAh8Y,EACAzxB,KAAAmna,cAAA11Y,EACAzxB,KAAA43b,UAAAv2B,EAAA1mQ,SAAA9iJ,GAAA7X,KAAA2Q,OAAAkH,GAAA7V,EAAA61b,aAAA,GACA73b,KAAA4ua,aAAA,GACA7qQ,GAAA/jK,KAAAg/C,IAAAh/C,KACA44B,GAAA4nZ,GAIA//P,EAAAzlB,OAAAh7J,KAAA,WAAA02b,IACAj2Q,EAAAzlB,OAAAh7J,KAAA,WAAA42b,IACA52b,KAAA83b,cACA93b,KAAA0/M,UACA1/M,KAAA2Q,UAPA4E,QAAAwD,MAAA,oEASA,CACA,eAAAkiR,GACA,MAAgBj5R,SAAAi5R,YAAWA,EAAA88J,uBAAqChqb,QAAAuT,SAAAg2a,gBAAmCt3b;AACnG,OAAAqha,EAAAqQ,cAAAz2I,GAGA88J,GAAAT,EACAA,EAEAh2a,EAAAvT,EAAAuT,EAAA,KALA25Q,CAMA,CACA,QAAAhuQ,GACA,OAAAjtB,KAAAw3B,OAAAvK,IACA,CACA,QAAAA,IACAjtB,KAAAw3B,OAAAvK,MACA,CACA,WAAAjrB,GACA,OAAAhC,KAAAszI,QACA,CACA,WAAAtxI,IACAhC,KAAAw3B,OAAAx1B,SACA,CACA,YAAA0uP,GACA,OAAAA,EACA,CACA,WAAAonM,GASA,OARA93b,KAAA8ob,cAAA,cACA9ob,KAAAgC,QAAAg2b,WACAh4b,KAAAs6P,SAEA+mK,EAAA42B,YAAAj4b,UAAAgC,QAAA+/a,kBAEA/hb,KAAAggR,aACAhgR,KAAA8ob,cAAA,aACA9ob,IACA,CACA,KAAAw2E,GAEA,OADA6qV,EAAA62B,YAAAl4b,KAAAwgb,OAAAxgb,KAAAy6J,KACAz6J,IACA,CACA,IAAAkK,GAEA,OADAu2K,EAAAv2K,KAAAlK,MACAA,IACA,CACA,MAAAs6P,CAAAvsP,EAAAuT,GACAm/J,EAAAwuI,QAAAjvT,MAGAA,KAAAm4b,kBAAA,CACApqb,QACAuT,UAJAthB,KAAA0mV,QAAA34U,EAAAuT,EAOA,CACA,OAAAolU,CAAA34U,EAAAuT,GACA,MAAAtf,EAAAhC,KAAAgC,QACAw+a,EAAAxgb,KAAAwgb,OACAvlJ,EAAAj5R,EAAA+1b,qBAAA/3b,KAAAi7R,YACAm9J,EAAAp4b,KAAAke,SAAAyia,eAAAH,EAAAzya,EAAAuT,EAAA25Q,GACAo9J,EAAAr2b,EAAA+/a,kBAAA/hb,KAAAke,SAAAwia,sBACA7oa,EAAA7X,KAAA+N,MAAA;AACA/N,KAAA+N,MAAAqqb,EAAArqb,MACA/N,KAAAshB,OAAA82a,EAAA92a,OACAthB,KAAAs3b,aAAAt3b,KAAAi7R,YACAomI,EAAA42B,YAAAj4b,KAAAq4b,QAGAr4b,KAAA8ob,cAAA,UACAzqa,KAAA+5a,IAEA/2B,EAAA1nZ,SAAA3X,EAAAs2b,SAAA,CACAt4b,KACAo4b,GACAp4b,MACAA,KAAA0/M,UACA1/M,KAAA43b,UAAA//a,IACA7X,KAAAo+E,SAGA,CACA,mBAAAm6W,GACA,MACAC,EADAx4b,KAAAgC,QACAkka,QAAA;AACA7E,EAAA2e,KAAAwY,EAAA,CAAAC,EAAA/kB,KACA+kB,EAAAz5Y,GAAA00X,GAEA,CACA,mBAAAglB,GACA,MAAA12b,EAAAhC,KAAAgC,QACA22b,EAAA32b,EAAAkka,OACAA,EAAAlma,KAAAkma,OACAv6D,EAAA5jV,OAAA2wB,KAAAwtX,GAAAxnZ,OAAA,CAAAmzB,EAAAmN,KACAnN,EAAAmN,MACAnN,GACS;AACT,IAAAiqI,EAAA;AACA68Q,IACA78Q,IAAArpK,OAAAsV,OAAA2wB,KAAAigZ,GAAA/0a,IAAAo7B,IACA,MAAA40Y,EAAA+E,EAAA35Y,GACAt/B,EAAAi0a,GAAA30Y,EAAA40Y,GACAgF,EAAA,MAAAl5a,EACA6xV,EAAA,MAAA7xV;AACA,OACA1d,QAAA4xb,EACAiF,UAAAD,EAAA,YAAArnF,EAAA,gBACAunF,MAAAF,EAAA,eAAArnF,EAAA,yBAIA8vD,EAAA2e,KAAAlkQ,EAAA1jB,IACA,MAAAw7R,EAAAx7R,EAAAp2J,QACAg9C,EAAA40Y,EAAA50Y,GACAt/B,EAAAi0a,GAAA30Y,EAAA40Y,GACAmF,EAAA13B,EAAA4G,eAAA2rB,EAAA9vb,KAAAs0J,EAAA0gS;KACArna,IAAAmia,EAAAhoa,UAAA0qa,GAAA1C,EAAAhoa,SAAAlM,KAAA42a,GAAAl+R,EAAAygS,aACAjF,EAAAhoa,SAAAwsI,EAAAygS,WAEAltF,EAAA3sT;AACA,IAAA94B,EAAA;AACA84B,KAAAknX,KAAAlnX,GAAAl7C,OAAAi1b,EACA7ya,EAAAggZ,EAAAlnX,IAGA94B,EAAA,IADAwqO,GAAAvtO,SAAA41a,GACA,EACA/5Y,KACAl7C,KAAAi1b,EACAt+R,IAAAz6J,KAAAy6J,IACAinQ,MAAA1ha,OAEAkma,EAAAhgZ,EAAA84B,IAAA94B,GAEAA,EAAA6sD,KAAA6gX,EAAA5xb,KAEAq/Z,EAAA2e,KAAAr0E,EAAA,CAAAqtF,EAAAh6Y,KACAg6Y,UACA9yB,EAAAlnX,KAGAqiX,EAAA2e,KAAA9Z,EAAAhgZ,IACAg5Z,GAAA9yC,UAAApsY,KAAAkmB,IAAAlkB,SACAk9a,GAAAC,OAAAn/a,KAAAkmB,IAEA,CACA,eAAA+ya,GACA,MAAA90B,EAAAnka,KAAAu3b,UACAhpB,EAAAvua,KAAAitB,KAAA87Y,SAAAxoa,OACA+ta,EAAAnK,EAAA5ja;AAEA,GADA4ja,EAAAhyY,KAAA,CAAArxB,EAAAma,IAAAna,EAAAiI,MAAAkS,EAAAlS,OACAula,EAAAC,EAAA,CACA,QAAAjua,EAAAiua,EAAiCjua,EAAAgua,IAAahua,EAC9CN,KAAAk5b,oBAAA54b;AAEA6ja,EAAAr6Z,OAAAyka,EAAAD,EAAAC,EACA,CACAvua,KAAA03b,gBAAAvzB,EAAA/ja,MAAA,GAAA+xB,KAAAoka,GAAA,iBACA,CACA,2BAAA4C,GACA,MAAgB5B,UAAApzB,EAAAl3Y,MAAA87Y,SAA8BA,IAAe/oa;AAC7Dmka,EAAA5ja,OAAAwoa,EAAAxoa,eACAP,KAAAyla,QAEAtB,EAAA3pZ,QAAA,CAAAm/R,EAAA5wS,KACA,IAAAgga,EAAAxiZ,OAAAvf,OAAA2yS,EAAAk/H,UAAAt4a,QACAP,KAAAk5b,oBAAAnwb,IAGA,CACA,wBAAAqwb,GACA,MAAAC,EAAA,GACAtwB,EAAA/oa,KAAAitB,KAAA87Y;AACA,IAAAzoa,EAAA+ja;AAEA,IADArka,KAAAm5b,8BACA74b,EAAA,EAAA+ja,EAAA0E,EAAAxoa,OAA2CD,EAAA+ja,EAAU/ja,IAAA,CACrD,MAAAmgF,EAAAsoV,EAAAzoa;AACA,IAAAq5S,EAAA35S,KAAAgpa,eAAA1oa;AACA,MAAAwD,EAAA28E,EAAA38E,MAAA9D,KAAAw3B,OAAA1zB;AAWA,GAVA61S,EAAA71S,MAAA61S,EAAA71S,WACA9D,KAAAk5b,oBAAA54b,GACAq5S,EAAA35S,KAAAgpa,eAAA1oa,IAEAq5S,EAAA71S,OACA61S,EAAA2uH,UAAA7nV,EAAA6nV,WAAAirB,GAAAzvb,EAAA9D,KAAAgC,SACA23S,EAAA0+B,MAAA53P,EAAA43P,OAAA,EACA1+B,EAAA5wS,MAAAzI,EACAq5S,EAAAnyI,MAAA,GAAA/mF,EAAA+mF,MACAmyI,EAAAviO,QAAAp3E,KAAAm2a,iBAAA71a,GACAq5S,EAAA4rH,WACA5rH,EAAA4rH,WAAAqC,YAAAtna,GACAq5S,EAAA4rH,WAAAgC;IACc,CACd,MAAA+xB,EAAA5oM,GAAAghM,cAAA5tb,IACAuja,mBAAwBA,EAAAC,mBAAwCjG,EAAA72W,SAAAu+W,SAAAjla;AAChEikB,OAAA4rD,OAAA2lX,EAAA,CACAhyB,gBAAA52K,GAAA6b,WAAA+6J,GACAD,sBAAA32K,GAAA6b,WAAA86J,KAEA1tH,EAAA4rH,WAAA,IAAA+zB,EAAAt5b,KAAAM,GACA+4b,EAAAzxb,KAAA+xS,EAAA4rH,WACA,CACA,CAEA,OADAvla,KAAAi5b,kBACAI,CACA,CACA,cAAAE,GACAl4B,EAAA2e,KAAAhgb,KAAAitB,KAAA87Y,SAAA,CAAAtoV,EAAAgkV,KACAzka,KAAAgpa,eAAAvE,GAAAc,WAAA3zY,SACS5xB,KACT,CACA,KAAA4xB,GACA5xB,KAAAu5b,iBACAv5b,KAAA8ob,cAAA,QACA,CACA,MAAAn4a,CAAAkH,GACA,MAAA2f,EAAAx3B,KAAAw3B;AACAA,EAAA7mB;AACA,MAAA3O,EAAAhC,KAAAszI,SAAA97G,EAAA4yY,eAAA5yY,EAAAi+Z,oBAAAz1b,KAAAqqa,cACAmvB,EAAAx5b,KAAAyta,qBAAAzra,EAAAuha;AAKA,GAJAvja,KAAAy5b,gBACAz5b,KAAA05b,sBACA15b,KAAA25b,uBACA35b,KAAA+4R,SAAA3sC,kBACApsP,KAAA8ob,cAAA,gBACAjxa,OACAi/E,gBAEA;AAEA,MAAAuiW,EAAAr5b,KAAAo5b;AACAp5b,KAAA8ob,cAAA;AACA,IAAApzZ,EAAA;AACA,QAAAp1B,EAAA,EAAA+ja,EAAArka,KAAAitB,KAAA87Y,SAAAxoa,OAAyDD,EAAA+ja,EAAU/ja,IAAA,CACnE,MAAAila,WAAoBA,GAAcvla,KAAAgpa,eAAA1oa,GAClCsxB,GAAA4na,IAAA,IAAAH,EAAAxvb,QAAA07Z;AACAA,EAAAoE,sBAAA/3Y,GACA8D,EAAA3yB,KAAA+b,KAAAymZ,EAAA0G,iBAAAv2Y,EACA,CACAA,EAAA11B,KAAA45b,YAAA53b,EAAAwiQ,OAAAq1L,YAAAnka,EAAA,EACA11B,KAAA85b,cAAApka,GACA8ja,GACAn4B,EAAA2e,KAAAqZ,EAAA9zB,IACAA,EAAA3zY,UAGA5xB,KAAA+5b,gBAAAlib,GACA7X,KAAA8ob,cAAA,eACAjxa,SAEA7X,KAAAo/a,QAAAjtZ,KAAAoka,GAAA;AACA,MAAAv0B,QAAgBA,EAAAw1B,cAAwBx3b;AACxCw3b,EACAx3b,KAAAg6b,cAAAxC,MACUx1B,EAAAzha,QACVP,KAAAi6b,mBAAAj4B,QAEAhia,KAAAo+E,QACA,CACA,aAAAq7W,GACAp4B,EAAA2e,KAAAhgb,KAAAkma,OAAAhgZ,IACAg5Z,GAAAG,UAAAr/a,KAAAkmB,KAEAlmB,KAAAu4b,sBACAv4b,KAAA04b,qBACA,CACA,mBAAAgB,GACA,MAAA13b,EAAAhC,KAAAgC,QACAk4b,EAAA,IAAAn2a,IAAAgE,OAAA2wB,KAAA14C,KAAA6zM,aACAsmP,EAAA,IAAAp2a,IAAA/hB,EAAAk/F;AACAmgU,EAAA+4B,UAAAF,EAAAC,MAAAn6b,KAAAy3b,uBAAAz1b,EAAAg2b,aACAh4b,KAAAigR,eACAjgR,KAAAggR,aAEA,CACA,oBAAA25K,GACA,MAAAhC,eAAgBA,GAAkB33b,KAClCgrL,EAAAhrL,KAAAq6b,0BAAA;AACA,UAAArmX,OAAqBA,EAAA90D,QAAAihI,WAA0B6qC,EAE/CgsQ,GAAAW,EAAAz4a,EADA,oBAAA80D,GAAAmsE,IAGA,CACA,sBAAAk6S,GACA,MAAAzrB,EAAA5ua,KAAA4ua;AACA,IAAAA,MAAArua,OACA;AAEAP,KAAA4ua,aAAA;AACA,MAAA0rB,EAAAt6b,KAAAitB,KAAA87Y,SAAAxoa,OACAg6b,EAAA9rO,GAAA,IAAA1qM,IAAA6qZ,EAAAroZ,OAAApiB,KAAA,KAAAsqN,GAAA7qM,IAAA,CAAAzf,EAAA7D,MAAA,IAAA6D,EAAA2F,OAAA,GAAAgO,KAAA,OACA0ib,EAAAD,EAAA;AACA,QAAAj6b,EAAA,EAAuBA,EAAAg6b,EAAkBh6b,IACzC,IAAA+ga,EAAA+4B,UAAAI,EAAAD,EAAAj6b,IACA;AAGA,OAAAuT,MAAA0Z,KAAAita,GAAA52a,IAAAzf,KAAA8T,MAAA,MAAA2L,IAAA9iB,KACAkzE,OAAAlzE,EAAA,GACAoe,OAAApe,EAAA,GACAq/I,OAAAr/I,EAAA,KAEA,CACA,aAAAg5b,CAAApka,GACA,QAAA11B,KAAA8ob,cAAA,gBACAhyV,gBAEA;AAEAooV,GAAAvua,OAAA3Q,UAAA+N,MAAA/N,KAAAshB,OAAAoU;AACA,MAAA+pO,EAAAz/P,KAAAssa,UACAmuB,EAAAh7L,EAAA1xP,OAAA,GAAA0xP,EAAAn+O,QAAA;AACAthB,KAAAo/a,QAAA,GACA/d,EAAA2e,KAAAhgb,KAAAy+a,MAAA57K,IACA43L,GAAA,cAAA53L,EAAAj3O,WAGAi3O,EAAAupI,WACAvpI,EAAAupI,YAEApsY,KAAAo/a,QAAAx3a,QAAAi7P,EAAAu8K,aACSp/a,MACTA,KAAAo/a,QAAA5ka,QAAA,CAAA49I,EAAArvJ,KACAqvJ,EAAAsiS,KAAA3xb,IAEA/I,KAAA8ob,cAAA,cACA,CACA,eAAAiR,CAAAlib,GACA,QAAA7X,KAAA8ob,cAAA,wBACAjxa,OACAi/E,gBAFA,CAMA,QAAAx2F,EAAA,EAAA+ja,EAAArka,KAAAitB,KAAA87Y,SAAAxoa,OAAyDD,EAAA+ja,IAAU/ja,EACnEN,KAAAgpa,eAAA1oa,GAAAila,WAAAn5B;AAEA,QAAA9rY,EAAA,EAAA+ja,EAAArka,KAAAitB,KAAA87Y,SAAAxoa,OAAyDD,EAAA+ja,IAAU/ja,EACnEN,KAAA26b,eAAAr6b,EAAA+ga,EAAAt7T,WAAAluF,KAAA,CACA4sZ,aAAAnka,IACauX;AAEb7X,KAAA8ob,cAAA,uBACAjxa,QAVA,CAYA,CACA,cAAA8ib,CAAA5xb,EAAA8O,GACA,MAAA8hS,EAAA35S,KAAAgpa,eAAAjga,GACA2vB,EAAA,CACAihR,OACA5wS,QACA8O,OACAi/E;CAAA,IAEA92F,KAAA8ob,cAAA,sBAAApwZ,KAGAihR,EAAA4rH,WAAAn0Z,QAAAyG,GACA6gB,EAAAo+D,cACA92F,KAAA8ob,cAAA,qBAAApwZ,GACA,CACA,MAAA0lD,QACAp+E,KAAA8ob,cAAA,gBACAhyV,kBAIA2pF,EAAA7vJ,IAAA5wB,MACAA,KAAA0/M,WAAAj/B,EAAAwuI,QAAAjvT,OACAygL,EAAAvhK,MAAAlf,OAGAA,KAAA+ha,OACA20B,GAAA,CACAh1B,MAAA1ha,QAGA,CACA,IAAA+ha,GACA,IAAAzha;AACA,GAAAN,KAAAm4b,kBAAA,CACA,MAAApqb,MAAoBA,EAAAuT,UAAkBthB,KAAAm4b;AACtCn4b,KAAAm4b,kBAAA,KACAn4b,KAAA0mV,QAAA34U,EAAAuT,EACA,CAEA,GADAthB,KAAAw2E,QACAx2E,KAAA+N,OAAA,GAAA/N,KAAAshB,QAAA,EACA;AAEA,QAAAthB,KAAA8ob,cAAA,cACAhyV,gBAEA;AAEA,MAAA8jW,EAAA56b,KAAAo/a;AACA,IAAA9+a,EAAA,EAAmBA,EAAAs6b,EAAAr6b,QAAAq6b,EAAAt6b,GAAA0a,GAAA,IAAuC1a,EAC1Ds6b,EAAAt6b,GAAAyha,KAAA/ha,KAAAssa;AAGA,IADAtsa,KAAA66b,gBACcv6b,EAAAs6b,EAAAr6b,SAAmBD,EACjCs6b,EAAAt6b,GAAAyha,KAAA/ha,KAAAssa;AAEAtsa,KAAA8ob,cAAA,YACA,CACA,sBAAA1kB,CAAAF,GACA,MAAAC,EAAAnka,KAAA03b,gBACAzwa,EAAA;AACA,IAAA3mB,EAAA+ja;AACA,IAAA/ja,EAAA,EAAA+ja,EAAAF,EAAA5ja,OAA2CD,EAAA+ja,IAAU/ja,EAAA,CACrD,MAAAq5S,EAAAwqH,EAAA7ja;AACA4ja,IAAAvqH,EAAAviO,SACAnwD,EAAArf,KAAA+xS,EAEA,CACA,OAAA1yR,CACA,CACA,4BAAAo1Z,GACA,OAAAr8a,KAAAoka,0BACA,CACA,aAAAy2B,GACA,QAAA76b,KAAA8ob,cAAA,sBACAhyV,gBAEA;AAEA,MAAAqtU,EAAAnka,KAAAq8a;AACA,QAAA/7a,EAAA6ja,EAAA5ja,OAAA,EAAyCD,GAAA,IAAQA,EACjDN,KAAA86b,aAAA32B,EAAA7ja;AAEAN,KAAA8ob,cAAA,oBACA,CACA,YAAAgS,CAAAnhJ,GACA,MAAAl/I,EAAAz6J,KAAAy6J,IACA/hI,EAAA,CACAihR,OACA5wS,MAAA4wS,EAAA5wS,MACA+tF,eAEAu1U,EAAAhL,EAAA05B,mBAAA/6b,KAAA25S;CAAAA,IACA35S,KAAA8ob,cAAA,oBAAApwZ,KAGA2zY,GACAhL,EAAAyuB,SAAAr1R,EAAA4xQ,GAEA1yH,EAAA4rH,WAAAxD,OACAsK,GACAhL,EAAA2uB,WAAAv1R,GAEA/hI,EAAAo+D,cACA92F,KAAA8ob,cAAA,mBAAApwZ,GACA,CACA,aAAA+jZ,CAAA/mR,GACA,OAAA2rQ,EAAAqb,eAAAhnR,EAAA11J,KAAAssa,UAAAtsa,KAAA45b,YACA,CACA,yBAAAoB,CAAA36b,EAAAwX,EAAA7V,EAAAu6a,GACA,MAAAvoW,EAAA8/M,EAAAwkB,MAAAzgS;AACA,yBAAAm8D,EACAA,EAAAh0E,KAAAK,EAAA2B,EAAAu6a,GAEA,EACA,CACA,cAAAvT,CAAAvE,GACA,MAAAhkV,EAAAzgF,KAAAitB,KAAA87Y,SAAAtE,GACAN,EAAAnka,KAAAu3b;AACA,IAAA59I,EAAAwqH,EAAA59Y,OAAAvf,QAAA6xa,WAAAp4V,GAAAkxE;AAkBA,OAjBAgoJ,IACAA,EAAA,CACA71S,KAAA,KACAmpB,KAAA,GACAwzD,QAAA,KACA8kV,WAAA,KACAztE,OAAA,KACAkwE,QAAA,KACAG,QAAA,KACA9vF,MAAA53P,KAAA43P,OAAA,EACAtvU,MAAA07Z,EACAoU,SAAAp4V,EACA2lV,QAAA,GACAoE,YAEArG,EAAAv8Z,KAAA+xS,IAEAA,CACA,CACA,UAAA0wH,GACA,OAAArqa,KAAAmna,WAAAnna,KAAAmna,SAAA9F,EAAAzjH,cAAA,MACA8jH,MAAA1ha,KACA8D,KAAA,UAEA,CACA,sBAAAu2a,GACA,OAAAr6a,KAAAq8a,+BAAA97a,MACA,CACA,gBAAA41a,CAAA1R,GACA,MAAAhkV,EAAAzgF,KAAAitB,KAAA87Y,SAAAtE;AACA,IAAAhkV,EACA;AAEA,MAAAk5N,EAAA35S,KAAAgpa,eAAAvE;AACA,wBAAA9qH,EAAAm+C,QAAAn+C,EAAAm+C,QAAAr3Q,EAAAq3Q,MACA,CACA,oBAAAmjG,CAAAx2B,EAAArtV,GACAp3E,KAAAgpa,eAAAvE,GACA3sE,QAAA1gR,CACA,CACA,oBAAAs+V,CAAA3sa,GACA/I,KAAA23b,eAAA5ub,IAAA/I,KAAA23b,eAAA5ub,EACA,CACA,iBAAAkqa,CAAAlqa,GACA,OAAA/I,KAAA23b,eAAA5ub,EACA,CACA,iBAAAmyb,CAAAz2B,EAAAkI,EAAAv1V,GACA,MAAAv/D,EAAAu/D,EAAA,cACAuiO,EAAA35S,KAAAgpa,eAAAvE,GACA9C,EAAAhoH,EAAA4rH,WAAA4H,wBAAA17Y,EAAA5Z;AACAwpZ,EAAA0L,QAAAJ,IACAhzH,EAAA1sR,KAAA0/Y,GAAA70E,QAAA1gR,EACAp3E,KAAA2Q,WAEA3Q,KAAAi7b,qBAAAx2B,EAAArtV,GACAuqV,EAAAhxZ,OAAAgpS,EAAA,CACAviO,YAEAp3E,KAAA2Q,OAAA8pJ,KAAAgqQ,iBAAA5sZ,OAAA4Z,GAEA,CACA,IAAAxpB,CAAAw8Z,EAAAkI,GACA3sa,KAAAk7b,kBAAAz2B,EAAAkI,KACA,CACA,IAAA3ma,CAAAy+Z,EAAAkI,GACA3sa,KAAAk7b,kBAAAz2B,EAAAkI,KACA,CACA,mBAAAusB,CAAAz0B,GACA,MAAA9qH,EAAA35S,KAAAu3b,UAAA9yB;AACA9qH,KAAA4rH,YACA5rH,EAAA4rH,WAAA4D,kBAEAnpa,KAAAu3b,UAAA9yB,EACA,CACA,KAAA02B,GACA,IAAA76b,EAAA+ja;AAGA,IAFArka,KAAAkK,OACAu2K,EAAA/kG,OAAA17E,MACAM,EAAA,EAAA+ja,EAAArka,KAAAitB,KAAA87Y,SAAAxoa,OAAqDD,EAAA+ja,IAAU/ja,EAC/DN,KAAAk5b,oBAAA54b,EAEA,CACA,OAAA88E,GACAp9E,KAAA8ob,cAAA;AACA,MAAAtI,OAAgBA,EAAA/lR,OAAgBz6J;AAChCA,KAAAm7b,QACAn7b,KAAAw3B,OAAA09Z,aACA1U,IACAxgb,KAAAigR,eACAohJ,EAAA62B,YAAA1X,EAAA/lR,GACAz6J,KAAAke,SAAAuia,eAAAhmR,GACAz6J,KAAAwgb,OAAA,KACAxgb,KAAAy6J,IAAA,aAEAsJ,GAAA/jK,KAAAg/C,IACAh/C,KAAA8ob,cAAA,eACA,CACA,aAAAsS,IAAA1ia,GACA,OAAA14B,KAAAwgb,OAAA6a,aAAA3ia,EACA,CACA,UAAAsnP,GACAhgR,KAAAs7b,iBACAt7b,KAAAgC,QAAAg2b,WACAh4b,KAAAu7b,uBAEAv7b,KAAA0/M,WAEA,CACA,cAAA47O,GACA,MAAAt9R,EAAAh+J,KAAA6zM,WACA31L,EAAAle,KAAAke,SACAs9a,EAAA,CAAA13b,EAAA83J,KACA19I,EAAAiQ,iBAAAnuB,KAAA8D,EAAA83J,GACAoC,EAAAl6J,GAAA83J,GAEAA,EAAA,CAAAv7J,EAAA2G,EAAAwK,KACAnR,EAAAuwK,QAAA5pK,EACA3G,EAAAwwK,QAAAr/J,EACAxR,KAAAg6b,cAAA35b;AAEAgha,EAAA2e,KAAAhgb,KAAAgC,QAAAk/F,OAAAp9F,GAAA03b,EAAA13b,EAAA83J,GACA,CACA,oBAAA2/R,GACAv7b,KAAAy3b,uBACAz3b,KAAAy3b,qBAAA;AAEA,MAAAz5R,EAAAh+J,KAAAy3b,qBACAv5a,EAAAle,KAAAke,SACAs9a,EAAA,CAAA13b,EAAA83J,KACA19I,EAAAiQ,iBAAAnuB,KAAA8D,EAAA83J,GACAoC,EAAAl6J,GAAA83J,GAEA6/R,EAAA,CAAA33b,EAAA83J,KACAoC,EAAAl6J,KACAoa,EAAAsR,oBAAAxvB,KAAA8D,EAAA83J,UACAoC,EAAAl6J,KAGA83J,EAAA,CAAA7tJ,EAAAuT,KACAthB,KAAAwgb,QACAxgb,KAAAs6P,OAAAvsP,EAAAuT;AAGA,IAAAo6a;AACA,MAAAh8O,EAAA,KACA+7O,EAAA,SAAA/7O,GACA1/M,KAAA0/M,YACA1/M,KAAAs6P,SACAkhM,EAAA,SAAA5/R,GACA4/R,EAAA,SAAAE;AAEAA,EAAA,KACA17b,KAAA0/M,YACA+7O,EAAA,SAAA7/R,GACA57J,KAAAm7b,QACAn7b,KAAA0mV,QAAA,KACA80G,EAAA,SAAA97O,IAEAxhM,EAAA0ia,WAAA5gb,KAAAwgb,QACA9gO,IAEAg8O,GAEA,CACA,YAAAz7K,GACAohJ,EAAA2e,KAAAhgb,KAAA6zM,WAAA,CAAAj4C,EAAA93J,KACA9D,KAAAke,SAAAsR,oBAAAxvB,KAAA8D,EAAA83J,KAEA57J,KAAA6zM,WAAA,GACAwtN,EAAA2e,KAAAhgb,KAAAy3b,qBAAA,CAAA77R,EAAA93J,KACA9D,KAAAke,SAAAsR,oBAAAxvB,KAAA8D,EAAA83J,KAEA57J,KAAAy3b,0BAAAhma,CACA,CACA,gBAAAkqa,CAAA7/Q,EAAAjkK,EAAApD,GACA,MAAA0jC,EAAA1jC,EAAA;AACA,IAAAklS,EAAAvhJ,EAAA93J,EAAA+ja;AAKA,IAJA,YAAAxsZ,IACA8hS,EAAA35S,KAAAgpa,eAAAltP,EAAA,GAAA2oP,cACA9qH,EAAA4rH,WAAA,IAAAptX,EAAA,wBAEA73C,EAAA,EAAA+ja,EAAAvoP,EAAAv7K,OAAwCD,EAAA+ja,IAAU/ja,EAAA,CAClD83J,EAAA0jB,EAAAx7K;AACA,MAAAila,EAAAntQ,GAAAp4J,KAAAgpa,eAAA5wQ,EAAAqsQ,cAAAc;AACAA,GACAA,EAAAptX,EAAA,cAAAigH,EAAA11I,QAAA01I,EAAAqsQ,aAAArsQ,EAAArvJ,MAEA,CACA,CACA,iBAAA6yb,GACA,OAAA57b,KAAAgia,SAAA,EACA,CACA,iBAAA65B,CAAAC,GACA,MAAAC,EAAA/7b,KAAAgia,SAAA,GACAxiQ,EAAAs8R,EAAAl4a,IAAA,EAA6C6gZ,eAAA17Z,YAC7C,MAAA4wS,EAAA35S,KAAAgpa,eAAAvE;AACA,IAAA9qH,EACA,UAAAj5S,MAAA,6BAAA+ja;AAEA,OACAA,eACA/hZ,QAAAi3R,EAAA1sR,KAAAlkB,GACAA;CAGAs4Z,EAAA26B,eAAAx8R,EAAAu8R,KAEA/7b,KAAAgia,QAAAxiQ,EACAx/J,KAAAw3b,WAAA,KACAx3b,KAAAi6b,mBAAAz6R,EAAAu8R,GAEA,CACA,aAAAjT,CAAA2J,EAAA/5Z,EAAAnS,GACA,OAAAvmB,KAAA+4R,SAAAy5J,OAAAxyb,KAAAyyb,EAAA/5Z,EAAAnS,EACA,CACA,eAAAohZ,CAAAs0B,GACA,WAAAj8b,KAAA+4R,SAAAq2I,OAAA7oZ,OAAA1hB,KAAAkmY,OAAA/rV,KAAAi9Y,GAAA17b,MACA,CACA,kBAAA05b,CAAAz6R,EAAAu8R,EAAAG,GACA,MAAAC,EAAAn8b,KAAAgC,QAAAuvG,MACAya,EAAA,CAAAlrH,EAAAma,IAAAna,EAAAylB,OAAAvf,IAAAiU,EAAAwI,KAAAjS,GAAAxK,EAAAy9Z,eAAAjzZ,EAAAizZ,cAAAz9Z,EAAA+B,QAAAyI,EAAAzI,QACAqzb,EAAApwU,EAAA+vU,EAAAv8R,GACA68R,EAAAH,EAAA18R,EAAAxzC,EAAAwzC,EAAAu8R;AACAK,EAAA77b,QACAP,KAAA27b,iBAAAS,EAAAD,EAAAtkb,SAEAwkb,EAAA97b,QAAA47b,EAAAtkb,MACA7X,KAAA27b,iBAAAU,EAAAF,EAAAtkb,QAEA,CACA,aAAAmib,CAAA35b,EAAA67b,GACA,MAAAxja,EAAA,CACAhvB,MAAArJ,EACA67b,SACAplW,cACAwlW,YAAAt8b,KAAAy8a,cAAAp8a,IAEAk8b,EAAAxxD,MAAA/oY,QAAAk/F,QAAAlhG,KAAAgC,QAAAk/F,QAAAn8F,SAAA1E,EAAAuuG,OAAA9qG;AACA,QAAA9D,KAAA8ob,cAAA,cAAApwZ,EAAA6ja,GACA;AAEA,MAAAniS,EAAAp6J,KAAAw8b,aAAAn8b,EAAA67b,EAAAxja,EAAA4ja;AAMA,OALA5ja,EAAAo+D,cACA92F,KAAA8ob,cAAA,aAAApwZ,EAAA6ja,IACAniS,GAAA1hI,EAAA0hI,UACAp6J,KAAAo+E,SAEAp+E,IACA,CACA,YAAAw8b,CAAAn8b,EAAA67b,EAAAI,GACA,MAAgBt6B,QAAA+5B,EAAA,GAAA/5b,WAAsChC,KACtDu8a,EAAA2f,EACA18R,EAAAx/J,KAAAy8b,mBAAAp8b,EAAA07b,EAAAO,EAAA/f,GACAmgB,EAAAr7B,EAAAs7B,cAAAt8b,GACAu8b,EA1xBA,SAAAv8b,EAAAu8b,EAAAN,EAAAI,GACA,OAAAJ,GAAA,aAAAj8b,EAAAyD,KAGA44b,EACAE,EAEAv8b,EALA,IAMA,CARA,CA0xBAA,EAAAL,KAAAw3b,WAAA8E,EAAAI;AACAJ,IACAt8b,KAAAw3b,WAAA,KACAn2B,EAAA1nZ,SAAA3X,EAAA66b,QAAA,CACAx8b,EACAm/J,EACAx/J,MACAA,MACA08b,GACAr7B,EAAA1nZ,SAAA3X,EAAA0/E,QAAA,CACArhF,EACAm/J,EACAx/J,MACAA;AAGA,MAAAo6J,GAAAinQ,EAAA26B,eAAAx8R,EAAAu8R;AAMA,OALA3hS,GAAA8hS,KACAl8b,KAAAgia,QAAAxiQ,EACAx/J,KAAAi6b,mBAAAz6R,EAAAu8R,EAAAG,IAEAl8b,KAAAw3b,WAAAoF,EACAxiS,CACA,CACA,kBAAAqiS,CAAAp8b,EAAA07b,EAAAO,EAAA/f,GACA,gBAAAl8a,EAAAyD,KACA;AAEA,IAAAw4b,EACA,OAAAP;AAEA,MAAAI,EAAAn8b,KAAAgC,QAAAuvG;AACA,OAAAvxG,KAAAg7b,0BAAA36b,EAAA87b,EAAAtkb,KAAAskb,EAAA5f,EACA,EAEA,SAAA2a,KACA,OAAA71B,EAAA2e,KAAA7e,GAAAp9P,UAAA29P,KAAA3oI,SAAA3sC,aACA,CAgFA,SAAA0wM,GAAAj8b,EAAAk8b,EAAA/1b,EAAAwK,GACA,OACAxK,IAAAnG,EAAAkC,KAAAwyK,IAAAwnR,GACAvrb,IAAA3Q,EAAAkC,KAAAi0a,IAAA+lB,GAEA,CAcA,SAAAC,GAAAviS,EAAA/3I,EAAA1E,EAAAs2Z,EAAAn1Z,EAAA46Z,GACA,MAAA/ya,EAAYA,EAAAwK,IAAAo7Q,WAAA1tQ,EAAA+9a,cAAAtnB,YAAAunB,GAAiEx6a,EAC7EkzZ,EAAA7ya,KAAA+b,IAAA4D,EAAAkzZ,YAAAtB,EAAAt2Z,EAAAi/a,EAAA,GACAtnB,EAAAunB,EAAA,EAAAA,EAAA5oB,EAAAt2Z,EAAAi/a,EAAA;AACA,IAAAE,EAAA;AACA,MAAA35D,EAAArkX,EAAAD;AACA,GAAAo1Z,EAAA,CAIA,MAEA8oB,IAFAF,EAAA,EAAAA,EAAA5oB,EAAA,IACAsB,EAAA,EAAAA,EAAAtB,EAAA,IACA;AAEA6oB,GAAA35D,GADA,IAAA45D,EAAA55D,EAAA45D,KAAA9oB,GAAA9wC,IACA,CACA,CACA,MACA65D,GAAA75D,EADAzgY,KAAA+b,IAAA,KAAA0kX,EAAAoyC,EAAA53Z,EAAAqjZ,EAAA7rP,IAAAogQ,GACA,EACAhpJ,EAAA1tQ,EAAAm+a,EAAAF,EACAtmB,EAAA13Z,EAAAk+a,EAAAF,GACAG,WAAYA,EAAAC,WAAAC,aAAAC,YA/DZ,SAAArlB,EAAAzC,EAAAC,EAAA8nB,GACA,MAAA98b,GAXA+B,EAWAy1a,EAAAp2a,QAAA6ya,aAVAxT,EAAAs8B,kBAAAh7b,EAAA,CACA,aACA,WACA,aACA;AALA,IAAAA;AAYA,MAAAi7b,GAAAhoB,EAAAD,GAAA,EACAkoB,EAAA96b,KAAA8b,IAAA++a,EAAAF,EAAA/nB,EAAA,GAQAmoB,EAAA3qZ,IACA,MAAA4qZ,GAAAnoB,EAAA7ya,KAAA8b,IAAA++a,EAAAzqZ,IAAAuqZ,EAAA;AACA,OAAAr8B,EAAAyoB,YAAA32Y,EAAA,EAAApwC,KAAA8b,IAAA++a,EAAAG;AAEA,OACAT,WAAAQ,EAAAl9b,EAAA08b,YACAC,SAAAO,EAAAl9b,EAAA28b,UACAC,WAAAn8B,EAAAyoB,YAAAlpb,EAAA48b,WAAA,EAAAK,GACAJ,SAAAp8B,EAAAyoB,YAAAlpb,EAAA68b,SAAA,EAAAI,GAEA,CArBA,CA+D6Dn7a,EAAAizZ,EAAAC,EAAAiB,EAAAjqJ,GAC7DoxK,EAAApoB,EAAA0nB,EACAW,EAAAroB,EAAA2nB,EACAW,EAAAtxK,EAAA0wK,EAAAU,EACAG,EAAAtnB,EAAA0mB,EAAAU,EACAG,EAAAzoB,EAAA6nB,EACAa,EAAA1oB,EAAA8nB,EACAa,EAAA1xK,EAAA4wK,EAAAY,EACAG,EAAA1nB,EAAA4mB,EAAAY;AAEA,GADA5jS,EAAA60R,YACAvV,EAAA,CAEA,MAAAykB,GAAAN,EAAAC,GAAA;AAIA,GAHA1jS,EAAA29Q,IAAApxa,EAAAwK,EAAAoka,EAAAsoB,EAAAM,GACA/jS,EAAA29Q,IAAApxa,EAAAwK,EAAAoka,EAAA4oB,EAAAL,GAEAZ,EAAA,GACA,MAAAkB,EAAA3B,GAAAmB,EAAAE,EAAAn3b,EAAAwK;AACAipJ,EAAA29Q,IAAAqmB,EAAAz3b,EAAAy3b,EAAAjtb,EAAA+rb,EAAAY,EAAAtnB,EAAAxV,EAAAmW,QACA,CAEA,MAAAknB,EAAA5B,GAAAuB,EAAAxnB,EAAA7va,EAAAwK;AAGA,GAFAipJ,EAAA+0R,OAAAkP,EAAA13b,EAAA03b,EAAAltb,GAEAisb,EAAA,GACA,MAAAgB,EAAA3B,GAAAuB,EAAAE,EAAAv3b,EAAAwK;AACAipJ,EAAA29Q,IAAAqmB,EAAAz3b,EAAAy3b,EAAAjtb,EAAAisb,EAAA5mB,EAAAxV,EAAAmW,QAAA+mB,EAAAx7b,KAAAyyK,GACA,CAEA,MAAAmpR,GAAA9nB,EAAA4mB,EAAA9nB,GAAA/oJ,EAAA4wK,EAAA7nB,IAAA;AAIA,GAHAl7Q,EAAA29Q,IAAApxa,EAAAwK,EAAAmka,EAAAkB,EAAA4mB,EAAA9nB,EAAAgpB,MACAlkS,EAAA29Q,IAAApxa,EAAAwK,EAAAmka,EAAAgpB,EAAA/xK,EAAA4wK,EAAA7nB,MAEA6nB,EAAA,GACA,MAAAiB,EAAA3B,GAAAsB,EAAAE,EAAAt3b,EAAAwK;AACAipJ,EAAA29Q,IAAAqmB,EAAAz3b,EAAAy3b,EAAAjtb,EAAAgsb,EAAAc,EAAAv7b,KAAAyyK,GAAAo3G,EAAAy0I,EAAAmW,QACA,CAEA,MAAAonB,EAAA9B,GAAAkB,EAAApxK,EAAA5lR,EAAAwK;AAGA,GAFAipJ,EAAA+0R,OAAAoP,EAAA53b,EAAA43b,EAAAptb,GAEA8rb,EAAA,GACA,MAAAmB,EAAA3B,GAAAkB,EAAAE,EAAAl3b,EAAAwK;AACAipJ,EAAA29Q,IAAAqmB,EAAAz3b,EAAAy3b,EAAAjtb,EAAA8rb,EAAA1wK,EAAAy0I,EAAAmW,QAAA0mB,EACA,CACA,KAAM,CACNzjS,EAAA80R,OAAAvob,EAAAwK;AACA,MAAAqtb,EAAA97b,KAAAwyK,IAAA2oR,GAAAtoB,EAAA5ua,EACA83b,EAAA/7b,KAAAi0a,IAAAknB,GAAAtoB,EAAApka;AACAipJ,EAAA+0R,OAAAqP,EAAAC;AACA,MAAAC,EAAAh8b,KAAAwyK,IAAA4oR,GAAAvoB,EAAA5ua,EACAg4b,EAAAj8b,KAAAi0a,IAAAmnB,GAAAvoB,EAAApka;AACAipJ,EAAA+0R,OAAAuP,EAAAC,EACA,CACAvkS,EAAAwkS,WACA,CAsDA,MAAAC,WAAAv6a,GACA6hZ,UAAA;AACAA,gBAAA,CACA8R,YAAA,SACArrG,YAAA,OACAgoG,WAAA,GACAE,iBAAA,EACAE,qBAAA5jZ,EACAojZ,aAAA,EACAU,YAAA,EACAv3Z,OAAA,EACAs2Z,QAAA,EACA7nJ,WAAAh7P,EACAsoZ,YACAolB;AAEA34B,qBAAA,CACAz5F,gBAAA;AAEAy5F,mBAAA,CACA+N,eACAC,WAAApsa,GAAA,eAAAA;AAEAisa;AACAwC;AACAuoB;AACAzpB;AACAC;AACAqnB;AACArwK;AACA,WAAAtxM,CAAAmnV,GACAz/P,QACAhjK,KAAAgC,aAAAyvB,EACAzxB,KAAAq0a,mBAAA5iZ,EACAzxB,KAAA4sR,gBAAAn7P,EACAzxB,KAAA62a,cAAAplZ,EACAzxB,KAAA21a,iBAAAlkZ,EACAzxB,KAAA41a,iBAAAnkZ,EACAzxB,KAAAi9b,YAAA,EACAj9b,KAAAo/b,YAAA,EACA38B,GACA16Y,OAAA4rD,OAAA3zE,KAAAyia,EAEA,CACA,OAAA5nI,CAAAwkK,EAAAC,EAAA/iB,GACA,MAAA7mR,EAAA11J,KAAAk9a,SAAA,CACA,IACA,KACAX,IACA9vJ,MAAgBA,EAAApkR,YAAoBg5Z,EAAA8b,kBAAAznR,EAAA,CACpC1uJ,EAAAq4b,EACA7tb,EAAA8tb,KAEA1yK,WAAgBA,EAAAiqJ,WAAAlB,cAAAC,cAAAvB,iBAAqEr0a,KAAAk9a,SAAA,CACrF,aACA,WACA,cACA,cACA,iBACAX,GACAgjB,GAAAv/b,KAAAgC,QAAAsya,QAAAt0a,KAAAgC,QAAAuza,aAAA,EACAwC,EAAA1W,EAAA4G,eAAAoM,EAAAwC,EAAAjqJ,GACA4yK,EAAAn+B,EAAA+V,cAAA3qJ,EAAAG,EAAAiqJ,IAAAjqJ,IAAAiqJ,EACA4oB,EAAA1nB,GAAA1W,EAAA6U,KAAAspB,EACAE,EAAAr+B,EAAAs+B,WAAAt3b,EAAAsta,EAAA4pB,EAAA3pB,EAAA2pB;AACA,OAAAE,GAAAC,CACA,CACA,cAAAziB,CAAAV,GACA,MAAAv1a,EAAgBA,EAAAwK,IAAAo7Q,aAAAiqJ,WAAAlB,cAAAC,eAA6D51a,KAAAk9a,SAAA,CAC7E,IACA,IACA,aACA,WACA,cACA,eACAX,IACAv+Z,OAAgBA,EAAAs2Z,WAAoBt0a,KAAAgC,QACpC49b,GAAAhzK,EAAAiqJ,GAAA,EACAgpB,GAAAlqB,EAAAC,EAAAtB,EAAAt2Z,GAAA;AACA,OACAhX,IAAAjE,KAAAwyK,IAAAqqR,GAAAC,EACArub,IAAAzO,KAAAi0a,IAAA4oB,GAAAC,EAEA,CACA,eAAA1c,CAAA5G,GACA,OAAAv8a,KAAAi9a,eAAAV,EACA,CACA,IAAAxa,CAAAtnQ,GACA,MAAAz4J,QAAgBA,EAAAqya,iBAA2Br0a,KAC3Cge,GAAAhc,EAAAgc,QAAA,KACAs2Z,GAAAtya,EAAAsya,SAAA,KACAyF,EAAA/3a,EAAA+3a;AAGA,GAFA/5a,KAAAi9b,YAAA,UAAAj7b,EAAAs2a,YAAA,MACAt4a,KAAAo/b,YAAA/qB,EAAAhT,EAAA6U,IAAAnza,KAAAE,MAAAoxa,EAAAhT,EAAA6U,KAAA,EACA,IAAA7B,GAAAr0a,KAAA21a,YAAA,GAAA31a,KAAA41a,YAAA,EACA;AAEAn7Q,EAAAp4C;AACA,MAAAu9U,GAAA5/b,KAAA4sR,WAAA5sR,KAAA62a,UAAA;AACAp8Q,EAAAx0I,UAAAljB,KAAAwyK,IAAAqqR,GAAA5hb,EAAAjb,KAAAi0a,IAAA4oB,GAAA5hb;AACA,MACA8hb,EAAA9hb,GADA,EAAAjb,KAAAi0a,IAAAj0a,KAAA8b,IAAAwiZ,EAAA7rP,GAAA6+P,GAAA;AAEA55Q,EAAAq6Q,UAAA9ya,EAAA+qU,gBACAtyK,EAAA+6Q,YAAAxza,EAAAirU,YA5JA,SAAAxyK,EAAA/3I,EAAA1E,EAAAs2Z,EAAAyF,GACA,MAAAqlB,YAAYA,EAAAxyK,aAAAynJ,iBAA4C3xZ;AACxD,IAAAm0Z,EAAAn0Z,EAAAm0Z;AACA,GAAAuoB,EAAA,CACApC,GAAAviS,EAAA/3I,EAAA1E,EAAAs2Z,EAAAuC,EAAAkD;AACA,QAAAz5a,EAAA,EAAuBA,EAAA8+b,IAAiB9+b,EACxCm6J,EAAAitQ;AAEAzsV,MAAAo5V,KACAwC,EAAAjqJ,GAAAynJ,EAAAhT,EAAA6U,KAAA7U,EAAA6U,KAEA,CACA8mB,GAAAviS,EAAA/3I,EAAA1E,EAAAs2Z,EAAAuC,EAAAkD,GACAt/Q,EAAAitQ,MAEA,CAfA,CA6JAjtQ,EAAAz6J,KAAA8/b,EAAAxrB,EAAAyF,GA7IA,SAAAt/Q,EAAA/3I,EAAA1E,EAAAs2Z,EAAAyF,GACA,MAAAqlB,YAAYA,EAAAxyK,aAAAynJ,gBAAArya,WAAsD0gB,GAClE6yZ,YAAYA,EAAAF,kBAAAJ,aAAAE,mBAAAN,gBAAgF7ya,EAC5Fq4R,EAAA,UAAAr4R,EAAAs2a;AACA,IAAA/C,EACA;AAEA96Q,EAAA40R,YAAApa,GAAA,IACAx6Q,EAAAy6Q,eAAAC,EACA96I,GACA5/H,EAAA66Q,UAAA,EAAAC,EACA96Q,EAAA26Q,SAAAC,GAAA,UAEA56Q,EAAA66Q,UAAAC,EACA96Q,EAAA26Q,SAAAC,GAAA;AAEA,IAAAwB,EAAAn0Z,EAAAm0Z;AACA,GAAAuoB,EAAA,CACApC,GAAAviS,EAAA/3I,EAAA1E,EAAAs2Z,EAAAuC,EAAAkD;AACA,QAAAz5a,EAAA,EAAuBA,EAAA8+b,IAAiB9+b,EACxCm6J,EAAAg1R;AAEAx0W,MAAAo5V,KACAwC,EAAAjqJ,GAAAynJ,EAAAhT,EAAA6U,KAAA7U,EAAA6U,KAEA,CACA77I,GA3LA,SAAA5/H,EAAA/3I,EAAAm0Z,GACA,MAAAjqJ,WAAYA,EAAAqwK,cAAAj2b,IAAAwK,IAAAoka,cAAAD,eAAgEjzZ;AAC5E,IAAAq9a,EAAA9C,EAAArnB;AAGAn7Q,EAAA60R,YACA70R,EAAA29Q,IAAApxa,EAAAwK,EAAAoka,EAAAhpJ,EAAAmzK,EAAAlpB,EAAAkpB,GACApqB,EAAAsnB,GACA8C,EAAA9C,EAAAtnB,EACAl7Q,EAAA29Q,IAAApxa,EAAAwK,EAAAmka,EAAAkB,EAAAkpB,EAAAnzK,EAAAmzK,OAEAtlS,EAAA29Q,IAAApxa,EAAAwK,EAAAyrb,EAAApmB,EAAAxV,EAAAmW,QAAA5qJ,EAAAy0I,EAAAmW,SAEA/8Q,EAAAwkS,YACAxkS,EAAA4xQ,MACA,CAfA,CA4LA5xQ,EAAA/3I,EAAAm0Z,GAEA70a,EAAAm9b,UAAAtoB,EAAAjqJ,GAAAy0I,EAAA7rP,IAAA,IAAAq/P,GAAA,UAAAQ,GA1NA,SAAA56Q,EAAA/3I,EAAAm0Z,GACA,MAAAjqJ,WAAYA,EAAA5lR,IAAAwK,IAAAoka,cAAAD,cAAA3za,WAA4D0gB,GACxE6yZ,YAAYA,EAAAF,mBAAiCrza,EAC7Cg+b,EAAAj9b,KAAA8b,IAAA02Z,EAAAK,EAAAvU,EAAA4+B,gBAAArzK,EAAAiqJ;AAGA,GAFAp8Q,EAAA60R,YACA70R,EAAA29Q,IAAApxa,EAAAwK,EAAAoka,EAAAL,EAAA,EAAA3oJ,EAAAozK,EAAA,EAAAnpB,EAAAmpB,EAAA,GACArqB,EAAA,GACA,MAAAuqB,EAAAn9b,KAAA8b,IAAA02Z,EAAAI,EAAAtU,EAAA4+B,gBAAArzK,EAAAiqJ;AACAp8Q,EAAA29Q,IAAApxa,EAAAwK,EAAAmka,EAAAJ,EAAA,EAAAsB,EAAAqpB,EAAA,EAAAtzK,EAAAszK,EAAA,KACA,KAAM,CACN,MAAAC,EAAAp9b,KAAA8b,IAAA02Z,EAAA,EAAAK,EAAAvU,EAAA4+B,gBAAArzK,EAAAiqJ;AACA,aAAAxB,EACA56Q,EAAA29Q,IAAApxa,EAAAwK,EAAA2ub,EAAAtpB,EAAAxV,EAAA7rP,GAAA,EAAAo3G,EAAAy0I,EAAA7rP,GAAA;KACU,aAAA6/P,EAAA,CACV,MAAAx0a,EAAA,EAAAs/b,IACAlpB,GAAAp2a,EAAAkC,KAAAwyK,IAAAshQ,EAAAxV,EAAA7rP,GAAA,GAAAxuK,EACAkwa,GAAAr2a,EAAAkC,KAAAi0a,IAAAH,EAAAxV,EAAA7rP,GAAA,GAAAhkK,EACAsla,EAAAj2a,EAAAkC,KAAAwyK,IAAAq3G,EAAAy0I,EAAA7rP,GAAA,GAAAxuK,EACA+va,EAAAl2a,EAAAkC,KAAAi0a,IAAApqJ,EAAAy0I,EAAA7rP,GAAA,GAAAhkK;AACAipJ,EAAA+0R,OAAAvY,EAAAC,GACAz8Q,EAAA+0R,OAAA1Y,EAAAC,EACA,CACA,CACAt8Q,EAAAwkS,YACAxkS,EAAA80R,OAAA,KACA90R,EAAAp5I,KAAA,IAAAo5I,EAAA+lR,OAAAzya,MAAA0sJ,EAAA+lR,OAAAl/Z,QACAm5I,EAAA4xQ,KAAA,UACA,CA3BA,CA2NA5xQ,EAAA/3I,EAAAm0Z,GAEAuoB,IACApC,GAAAviS,EAAA/3I,EAAA1E,EAAAs2Z,EAAAuC,EAAAkD,GACAt/Q,EAAAg1R,SAEA,CApCA,CA8IAh1R,EAAAz6J,KAAA8/b,EAAAxrB,EAAAyF,GACAt/Q,EAAA8M,SACA,EAGA,SAAAuI,GAAArV,EAAAz4J,EAAA2L,EAAA3L,GACAy4J,EAAA2lS,QAAA/+B,EAAA4G,eAAAt6Z,EAAA0yb,eAAAr+b,EAAAq+b,gBACA5lS,EAAA40R,YAAAhuB,EAAA4G,eAAAt6Z,EAAAsna,WAAAjza,EAAAiza,aACAx6Q,EAAAy6Q,eAAA7T,EAAA4G,eAAAt6Z,EAAAwna,iBAAAnza,EAAAmza,kBACA16Q,EAAA26Q,SAAA/T,EAAA4G,eAAAt6Z,EAAA0na,gBAAArza,EAAAqza,iBACA56Q,EAAA66Q,UAAAjU,EAAA4G,eAAAt6Z,EAAA4na,YAAAvza,EAAAuza,aACA96Q,EAAA+6Q,YAAAnU,EAAA4G,eAAAt6Z,EAAAs/T,YAAAjrU,EAAAirU,YACA,CACA,SAAAuiH,GAAA/0R,EAAA/rF,EAAAllE,GACAixJ,EAAA+0R,OAAAhmb,EAAAxC,EAAAwC,EAAAgI,EACA,CAUA,SAAA8ub,GAAAjgC,EAAA8Y,EAAAvkW,EAAA,IACA,MAAAurE,EAAAkgR,EAAA9/Z,QACY2e,MAAAqhb,EAAA,EAAAphb,IAAAqhb,EAAArgT,EAAA,GAAuDvrE,GACvD11D,MAAAuhb,EAAAthb,IAAAuhb,GAAyCvnB,EACrDj6Z,EAAAnc,KAAA+b,IAAAyhb,EAAAE,GACAthb,EAAApc,KAAA8b,IAAA2hb,EAAAE,GACAC,EAAAJ,EAAAE,GAAAD,EAAAC,GAAAF,EAAAG,GAAAF,EAAAE;AACA,OACAvgT,QACAjhI,QACAk6Y,KAAA+f,EAAA/f,KACAiL,KAAAllZ,EAAAD,IAAAyhb,EAAAxgT,EAAAhhI,EAAAD,EAAAC,EAAAD,EAEA,CACA,SAAA0hb,GAAAnmS,EAAA5+I,EAAAs9Z,EAAAvkW,GACA,MAAAyrV,OAAYA,EAAAr+Z,WAAoB6Z,GAChCskI,MAAYA,EAAAjhI,QAAAk6Y,OAAAiL,QAA+Bi8B,GAAAjgC,EAAA8Y,EAAAvkW,GAC3CisX,EA1BA,SAAA7+b,GACA,OAAAA,EAAA8+b,QACAz/B,EAAA0/B,eAEA/+b,EAAAg/b,SAAA,aAAAh/b,EAAAi/b,uBACA5/B,EAAA6/B,eAEA1R,EACA,CARA,CA0BAxtb;AACA,IACA1B,EAAAo1J,EAAA+6G,GADAvU,KAAUA,KAAA/qP,WAAwByjE,GAAA;AAElC,IAAAt0E,EAAA,EAAeA,GAAA+ja,IAAW/ja,EAC1Bo1J,EAAA2qQ,GAAAnhZ,GAAA/N,EAAAkzZ,EAAA/ja,MAAA6/I,GACAuV,EAAA7mI,OAEUqtO,GACVzhG,EAAA80R,OAAA75R,EAAA1uJ,EAAA0uJ,EAAAlkJ,GACA0qP,MAEA2kM,EAAApmS,EAAAg2G,EAAA/6G,EAAAvkJ,EAAAnP,EAAA8+b,SAEArwL,EAAA/6G;AAMA,OAJA0jQ,IACA1jQ,EAAA2qQ,GAAAnhZ,GAAA/N,EAAAkzZ,EAAA,IAAAlkR,GACA0gT,EAAApmS,EAAAg2G,EAAA/6G,EAAAvkJ,EAAAnP,EAAA8+b,YAEA1nC,CACA,CACA,SAAA+nC,GAAA1mS,EAAA5+I,EAAAs9Z,EAAAvkW,GACA,MAAAyrV,EAAAxkZ,EAAAwkZ,QACAlgR,MAAYA,EAAAjhI,QAAAmlZ,QAAwBi8B,GAAAjgC,EAAA8Y,EAAAvkW,IACpCsnL,KAAYA,KAAA/qP,WAAwByjE,GAAA;AACpC,IAEAt0E,EAAAo1J,EAAA0rS,EAAAv9a,EAAA0zZ,EAAA8pB,EAFAC,EAAA,EACAC,EAAA;AAEA,MAAAC,EAAAz4b,IAAAmW,GAAA/N,EAAAkzZ,EAAAt7Z,MAAAo3I,EACAshT,EAAA,KACA59a,IAAA0zZ,IACA98Q,EAAA+0R,OAAA8R,EAAA/pB,GACA98Q,EAAA+0R,OAAA8R,EAAAz9a,GACA42I,EAAA+0R,OAAA8R,EAAAD;AAOA,IAJAnlM,IACAxmG,EAAA2qQ,EAAAmhC,EAAA,IACA/mS,EAAA80R,OAAA75R,EAAA1uJ,EAAA0uJ,EAAAlkJ,IAEAlR,EAAA,EAAeA,GAAA+ja,IAAW/ja,EAAA,CAE1B,GADAo1J,EAAA2qQ,EAAAmhC,EAAAlhc,IACAo1J,EAAA7mI,KACA;AAEA,MAAA7nB,EAAA0uJ,EAAA1uJ,EACAwK,EAAAkkJ,EAAAlkJ,EACAkwb,EAAA,EAAA16b;AACA06b,IAAAN,GACA5vb,EAAAqS,EACAA,EAAArS,EACcA,EAAA+la,IACdA,EAAA/la,GAEA8vb,GAAAC,EAAAD,EAAAt6b,KAAAu6b,IAEAE,IACAhnS,EAAA+0R,OAAAxob,EAAAwK,GACA4vb,EAAAM,EACAH,EAAA,EACA19a,EAAA0zZ,EAAA/la,GAEA6vb,EAAA7vb,CACA,CACAiwb,GACA,CACA,SAAAE,GAAA9lb,GACA,MAAAo9B,EAAAp9B,EAAA7Z,QACAiza,EAAAh8X,EAAAg8X,YAAAh8X,EAAAg8X,WAAA10a;AAEA,OADAsb,EAAAq9Z,YAAAr9Z,EAAAu9H,OAAAngG,EAAA+nZ,SAAA,aAAA/nZ,EAAAgoZ,wBAAAhoZ,EAAA6nZ,SAAA7rB,EACA2rB,GAAAO,EACA,CAoCA,MAAAS,GAAA,mBAAAC;AAQA,MAAAC,WAAAn9a,GACA6hZ,UAAA;AACAA,gBAAA,CACA65B,eAAA,OACAprB,WAAA,GACAE,iBAAA,EACAE,gBAAA,QACAE,YAAA,EACAwsB,mBACAd,uBAAA,UACAv5B,QACAkR,YACAkoB,WACAE,QAAA;AAEAx6B,qBAAA,CACAz5F,gBAAA,kBACAE,YAAA;AAEAu5F,mBAAA,CACA+N,eACAC,WAAApsa,GAAA,eAAAA,GAAA,SAAAA;AAEA,WAAAkzE,CAAAmnV,GACAz/P,QACAhjK,KAAAo5a,YACAp5a,KAAAgC,aAAAyvB,EACAzxB,KAAAoja,YAAA3xY,EACAzxB,KAAAo5I,WAAA3nH,EACAzxB,KAAAg7a,eAAAvpZ,EACAzxB,KAAAgic,WAAAvwa,EACAzxB,KAAAiic,aAAAxwa,EACAzxB,KAAAkic,eAAAzwa,EACAzxB,KAAAk5a,cACAl5a,KAAAmic,kBACAnic,KAAAi5a,mBAAAxnZ,EACAgxY,GACA16Y,OAAA4rD,OAAA3zE,KAAAyia,EAEA,CACA,mBAAAmX,CAAAtN,EAAAhE,GACA,MAAAtma,EAAAhC,KAAAgC;AACA,IAAAA,EAAAg/b,SAAA,aAAAh/b,EAAAi/b,0BAAAj/b,EAAA8+b,UAAA9gc,KAAAmic,eAAA,CACA,MAAA/oC,EAAAp3Z,EAAA42a,SAAA54a,KAAAo5I,MAAAp5I,KAAAg7a;AACA3Z,EAAA+gC,2BAAApic,KAAAiic,QAAAjgc,EAAAsqa,EAAAlT,EAAAkP,GACAtoa,KAAAmic,iBACA,CACA,CACA,UAAA9hC,IACArga,KAAAiic,QAAA5hC,SACArga,KAAAkic,iBACAlic,KAAAgic,MACAhic,KAAAmic,iBACA,CACA,UAAA9hC,GACA,OAAArga,KAAAiic,OACA,CACA,YAAAI,GACA,OAAAric,KAAAkic,YAAAlic,KAAAkic,UAAA7gC,EAAAihC,iBAAAtic,UAAAgC,QAAAm3a,SACA,CACA,KAAApnY,GACA,MAAAswZ,EAAAric,KAAAqic,SACAhiC,EAAArga,KAAAqga;AACA,OAAAgiC,EAAA9hc,QAAA8/Z,EAAAgiC,EAAA,GAAAnjb,MACA,CACA,IAAAgxK,GACA,MAAAmyQ,EAAAric,KAAAqic,SACAhiC,EAAArga,KAAAqga,OACAlgR,EAAAkiT,EAAA9hc;AACA,OAAA4/I,GAAAkgR,EAAAgiC,EAAAliT,EAAA,GAAAhhI,IACA,CACA,WAAAkkX,CAAA3tO,EAAAhoB,GACA,MAAA1rI,EAAAhC,KAAAgC,QACAW,EAAA+yJ,EAAAhoB,GACA2yR,EAAArga,KAAAqga,OACAgiC,EAAAhhC,EAAAkhC,eAAAvic,KAAA,CACA0tI,WACAxuH,MAAAvc,EACAwc,IAAAxc;AAEA,IAAA0/b,EAAA9hc,OACA;AAEA,MAAA0mB,EAAA,GACAu7a,EA/HA,SAAAxgc,GACA,OAAAA,EAAA8+b,QACAz/B,EAAAohC,sBAEAzgc,EAAAg/b,SAAA,aAAAh/b,EAAAi/b,uBACA5/B,EAAAqhC,qBAEArhC,EAAAshC,YACA,CARA,CA+HA3gc;AACA,IAAA1B,EAAA+ja;AACA,IAAA/ja,EAAA,EAAA+ja,EAAAg+B,EAAA9hc,OAA2CD,EAAA+ja,IAAU/ja,EAAA,CACrD,MAAA4e,MAAoBA,EAAAC,OAAekjb,EAAA/hc,GACnCu4X,EAAAwnC,EAAAnhZ,GACA45W,EAAAunC,EAAAlhZ;AACA,GAAA05W,IAAAC,EAAA,CACA7xW,EAAArf,KAAAixX;AACA,QACA,CACA,MACA+pE,EAAAJ,EAAA3pE,EAAAC,EADA/1X,KAAAqN,KAAAzN,EAAAk2X,EAAAnrP,KAAAorP,EAAAprP,GAAAmrP,EAAAnrP,KACA1rI,EAAA8+b;AACA8B,EAAAl1T,GAAAgoB,EAAAhoB,GACAzmH,EAAArf,KAAAg7b,EACA,CACA,WAAA37a,EAAA1mB,OAAA0mB,EAAA,GAAAA,CACA,CACA,WAAA25a,CAAAnmS,EAAA0+Q,EAAAvkW,GAEA,OADA+sX,GAAA3hc,KAAA2hc,CACAlnS,EAAAz6J,KAAAm5a,EAAAvkW,EACA,CACA,IAAAu7H,CAAA11C,EAAAv7I,EAAAihI,GACA,MAAAkiT,EAAAric,KAAAqic,SACAQ,EAAAlB,GAAA3hc;AACA,IAAAo5Z,EAAAp5Z,KAAAo5I;AACAl6H,KAAA,EACAihI,KAAAngJ,KAAAqga,OAAA9/Z,OAAA2e;AACA,UAAAi6Z,KAAAkpB,EACAjpC,GAAAypC,EAAApoS,EAAAz6J,KAAAm5a,EAAA,CACAj6Z,QACAC,IAAAD,EAAAihI,EAAA;AAGA,QAAAi5Q,CACA,CACA,IAAA2I,CAAAtnQ,EAAA6xQ,EAAAptZ,EAAAihI,GACA,MAAAn+I,EAAAhC,KAAAgC,SAAA,IACAhC,KAAAqga,QAAA,IACA9/Z,QAAAyB,EAAAuza,cACA96Q,EAAAp4C,OAlIA,SAAAo4C,EAAA5+I,EAAAqD,EAAAihI,GACAyhT,KAAA/lb,EAAA7Z,QAAAm3a,QA5BA,SAAA1+Q,EAAA5+I,EAAAqD,EAAAihI,GACA,IAAAgwD,EAAAt0L,EAAAmmb;AACA7xP,IACAA,EAAAt0L,EAAAmmb,MAAA,IAAAH,OACAhmb,EAAAs0L,OAAAjxL,EAAAihI,IACAgwD,EAAA8uP,aAGAnvR,GAAArV,EAAA5+I,EAAA7Z,SACAy4J,EAAAg1R,OAAAt/O,EACA,CAVA,CA6BA11C,EAAA5+I,EAAAqD,EAAAihI,GAlBA,SAAAsa,EAAA5+I,EAAAqD,EAAAihI,GACA,MAAAkiT,SAAYA,EAAArgc,WAAsB6Z,EAClCgnb,EAAAlB,GAAA9lb;AACA,UAAAs9Z,KAAAkpB,EACAvyR,GAAArV,EAAAz4J,EAAAm3a,EAAAxra,OACA8sJ,EAAA60R,YACAuT,EAAApoS,EAAA5+I,EAAAs9Z,EAAA,CACAj6Z,QACAC,IAAAD,EAAAihI,EAAA,KAEAsa,EAAAwkS,YAEAxkS,EAAAg1R,QAEA,CAdA,CAoBAh1R,EAAA5+I,EAAAqD,EAAAihI,EAEA,CANA,CAmIAsa,EAAAz6J,KAAAkf,EAAAihI,GACAsa,EAAA8M,WAEAvnK,KAAAo5a,WACAp5a,KAAAmic,kBACAnic,KAAAgic,WAAAvwa,EAEA,EAGA,SAAAqxa,GAAAphc,EAAA44C,EAAA56B,EAAA68Z,GACA,MAAAv6a,EAAAN,EAAAM,SACY0d,IAAA/c,GAAiBjB,EAAAw7a,SAAA,CAC7Bx9Z,GACA68Z;AACA,OAAAx5a,KAAAqN,IAAAkqC,EAAA33C,GAAAX,EAAAqD,OAAArD,EAAA+gc,SACA,CACA,MAAAC,WAAAr+a,GACA6hZ,UAAA;AACA73E;AACA9/T;AACA3kB;AAGAs8Z,gBAAA,CACA+O,YAAA,EACAwtB,UAAA,EACAxqB,iBAAA,EACA0qB,YAAA,EACAtuB,WAAA,SACAtva,OAAA,EACA+ua,SAAA;AAIA5N,qBAAA,CACAz5F,gBAAA,kBACAE,YAAA;AAEA,WAAA3xP,CAAAmnV,GACAz/P,QACAhjK,KAAAgC,aAAAyvB,EACAzxB,KAAA2uV,YAAAl9T,EACAzxB,KAAA6uB,UAAA4C,EACAzxB,KAAAkK,UAAAunB,EACAgxY,GACA16Y,OAAA4rD,OAAA3zE,KAAAyia,EAEA,CACA,OAAA5nI,CAAAqoK,EAAAC,EAAA5mB,GACA,MAAAv6a,EAAAhC,KAAAgC,SACAgF,EAAgBA,EAAAwK,KAASxR,KAAAk9a,SAAA,CACzB,IACA,KACAX;AACA,OAAAx5a,KAAAC,IAAAkgc,EAAAl8b,EAAA,GAAAjE,KAAAC,IAAAmgc,EAAA3xb,EAAA,GAAAzO,KAAAC,IAAAhB,EAAA+gc,UAAA/gc,EAAAqD,OAAA,EACA,CACA,QAAA+9b,CAAAF,EAAA3mB,GACA,OAAAumB,GAAA9ic,KAAAkjc,EAAA,IAAA3mB,EACA,CACA,QAAA8mB,CAAAF,EAAA5mB,GACA,OAAAumB,GAAA9ic,KAAAmjc,EAAA,IAAA5mB,EACA,CACA,cAAAU,CAAAV,GACA,MAAAv1a,EAAgBA,EAAAwK,KAASxR,KAAAk9a,SAAA,CACzB,IACA,KACAX;AACA,OACAv1a,IACAwK,IAEA,CACA,IAAA6M,CAAArc,GAEA,IAAAqD,GADArD,KAAAhC,KAAAgC,SAAA,IACAqD,QAAA;AAGA,OAFAA,EAAAtC,KAAA+b,IAAAzZ,KAAArD,EAAAihc,aAAA,GAEA,GAAA59b,GADAA,GAAArD,EAAAuza,aAAA,GAEA,CACA,IAAAxT,CAAAtnQ,EAAAglG,GACA,MAAAz9P,EAAAhC,KAAAgC;AACAhC,KAAA6uB,MAAA7sB,EAAAqD,OAAA,KAAAg8Z,EAAAqb,eAAA18a,KAAAy/P,EAAAz/P,KAAAqe,KAAArc,GAAA,KAGAy4J,EAAA+6Q,YAAAxza,EAAAirU,YACAxyK,EAAA66Q,UAAAtza,EAAAuza,YACA96Q,EAAAq6Q,UAAA9ya,EAAA+qU,gBACAs0F,EAAAiiC,UAAA7oS,EAAAz4J,EAAAhC,KAAAgH,EAAAhH,KAAAwR,GACA,CACA,QAAA2qa,GACA,MAAAn6a,EAAAhC,KAAAgC,SAAA;AAEA,OAAAA,EAAAqD,OAAArD,EAAA+gc,SACA,EAGA,SAAAQ,GAAAC,EAAAjnB,GACA,MAAAv1a,EAAYA,EAAAwK,IAAAm+Q,OAAA5hR,QAAAuT,UAAiCkib,EAAAtmB,SAAA,CAC7C,IACA,IACA,OACA,QACA,UACAX;AACA,IAAA3ua,EAAAI,EAAAH,EAAAC,EAAA21b;AAcA,OAbAD,EAAAlpS,YACAmpS,EAAAnib,EAAA,EACA1T,EAAA7K,KAAA8b,IAAA7X,EAAA2oR,GACA3hR,EAAAjL,KAAA+b,IAAA9X,EAAA2oR,GACA9hR,EAAA2D,EAAAiyb,EACA31b,EAAA0D,EAAAiyb,IAEAA,EAAA11b,EAAA,EACAH,EAAA5G,EAAAy8b,EACAz1b,EAAAhH,EAAAy8b,EACA51b,EAAA9K,KAAA8b,IAAArN,EAAAm+Q,GACA7hR,EAAA/K,KAAA+b,IAAAtN,EAAAm+Q,IAEA,CACA/hR,OACAC,MACAG,QACAF,SAEA,CACA,SAAA41b,GAAA70a,EAAAlsB,EAAAkc,EAAAC,GACA,OAAA+P,EAAA,EAAAwyY,EAAAyoB,YAAAnnb,EAAAkc,EAAAC,EACA,CAwDA,SAAA+7Q,GAAA2oK,EAAAx8b,EAAAwK,EAAA+qa,GACA,MAAAonB,EAAA,OAAA38b,EACA48b,EAAA,OAAApyb,EAEA6I,EAAAmpb,KADAG,GAAAC,IACAL,GAAAC,EAAAjnB;AACA,OAAAlia,IAAAspb,GAAAtiC,EAAAs+B,WAAA34b,EAAAqT,EAAAzM,KAAAyM,EAAArM,UAAA41b,GAAAviC,EAAAs+B,WAAAnub,EAAA6I,EAAAxM,IAAAwM,EAAAvM,QACA,CAIA,SAAA+1b,GAAAppS,EAAAp5I,GACAo5I,EAAAp5I,OAAAra,EAAAqa,EAAA7P,EAAA6P,EAAAxM,EAAAwM,EAAAtgB,EACA,CACA,SAAA+ic,GAAAzib,EAAAmtG,EAAAu1U,EAAA,IACA,MAAA/8b,EAAAqa,EAAAra,IAAA+8b,EAAA/8b,GAAAwnH,EAAA,EACAh9G,EAAA6P,EAAA7P,IAAAuyb,EAAAvyb,GAAAg9G,EAAA,EACA35G,GAAAwM,EAAAra,EAAAqa,EAAAxM,IAAAkvb,EAAA/8b,EAAA+8b,EAAAlvb,EAAA25G,EAAA,GAAAxnH,EACAjG,GAAAsgB,EAAA7P,EAAA6P,EAAAtgB,IAAAgjc,EAAAvyb,EAAAuyb,EAAAhjc,EAAAytH,EAAA,GAAAh9G;AACA,OACAxK,EAAAqa,EAAAra,IACAwK,EAAA6P,EAAA7P,IACAqD,EAAAwM,EAAAxM,IACA9T,EAAAsgB,EAAAtgB,IACAsE,OAAAgc,EAAAhc,OAEA,CACA,MAAA2+b,WAAAr/a,GACA6hZ,UAAA;AACAA,gBAAA,CACA+J,cAAA,QACAgF,YAAA,EACAV,aAAA,EACAjE,cAAA,OACA+D,gBAAAljZ;AAEA+0Y,qBAAA,CACAz5F,gBAAA,kBACAE,YAAA;AAEA,WAAA3xP,CAAAmnV,GACAz/P,QACAhjK,KAAAgC,aAAAyvB,EACAzxB,KAAAs6J,gBAAA7oI,EACAzxB,KAAA2vR,UAAAl+P,EACAzxB,KAAA+N,WAAA0jB,EACAzxB,KAAAshB,YAAAmQ,EACAzxB,KAAA4wa,mBAAAn/Y,EACAgxY,GACA16Y,OAAA4rD,OAAA3zE,KAAAyia,EAEA,CACA,IAAAV,CAAAtnQ,GACA,MAAAm2Q,cAAgBA,EAAA5ua,SAAAirU,YAA2BA,EAAAF,oBAAoC/sU,MAC/Eq6R,MAAgBA,EAAAC,SAjFhB,SAAAkpK,GACA,MAAAnpb,EAAAkpb,GAAAC,GACAz1b,EAAAsM,EAAArM,MAAAqM,EAAAzM,KACA0T,EAAAjH,EAAAvM,OAAAuM,EAAAxM,IACAu0K,EA/BA,SAAAohR,EAAA1hM,EAAAC,GACA,MAAAp/P,EAAA6gc,EAAAxhc,QAAAuza,YACA1mZ,EAAA20a,EAAAjzB,cACA3va,EAAAyga,EAAA4iC,OAAAthc;AACA,OACA7D,EAAA4kc,GAAA70a,EAAAhhB,IAAAjN,EAAAiN,IAAA,EAAAk0P,GACAlhQ,EAAA6ic,GAAA70a,EAAA7gB,MAAApN,EAAAoN,MAAA,EAAA8zP,GACA7mP,EAAAyob,GAAA70a,EAAA/gB,OAAAlN,EAAAkN,OAAA,EAAAi0P,GACAhlQ,EAAA2mc,GAAA70a,EAAAjhB,KAAAhN,EAAAgN,KAAA,EAAAk0P,GAEA,CAVA,CA+BA0hM,EAAAz1b,EAAA,EAAAuT,EAAA,GACAjc,EArBA,SAAAm+b,EAAA1hM,EAAAC,GACA,MAAAyuK,mBAAYA,GAAsBgzB,EAAAtmB,SAAA,CAClC,uBAEAv6a,EAAA6gc,EAAAxhc,QAAA6ya,aACAj0a,EAAAyga,EAAA6iC,cAAAvhc,GACAwhc,EAAAphc,KAAA8b,IAAAijP,EAAAC,GACAlzO,EAAA20a,EAAAjzB,cACA6zB,EAAA5zB,GAAAnP,EAAAxsT,SAAAlyG;AACA,OACA0hc,QAAAX,IAAAU,GAAAv1a,EAAAhhB,KAAAghB,EAAAjhB,KAAAhN,EAAAyjc,QAAA,EAAAF,GACAG,SAAAZ,IAAAU,GAAAv1a,EAAAhhB,KAAAghB,EAAA7gB,MAAApN,EAAA0jc,SAAA,EAAAH,GACAI,WAAAb,IAAAU,GAAAv1a,EAAA/gB,QAAA+gB,EAAAjhB,KAAAhN,EAAA2jc,WAAA,EAAAJ,GACAK,YAAAd,IAAAU,GAAAv1a,EAAA/gB,QAAA+gB,EAAA7gB,MAAApN,EAAA4jc,YAAA,EAAAL,GAEA,CAfA,CAqBAX,EAAAz1b,EAAA,EAAAuT,EAAA;AACA,OACAg5Q,MAAA,CACAtzR,EAAAqT,EAAAzM,KACA4D,EAAA6I,EAAAxM,IACAgH,EAAA9G,EACAhN,EAAAugB,EACAjc,UAEAg1R,MAAA,CACArzR,EAAAqT,EAAAzM,KAAAw0K,EAAArlL,EACAyU,EAAA6I,EAAAxM,IAAAu0K,EAAAtjL,EACA+V,EAAA9G,EAAAq0K,EAAArlL,EAAAqlL,EAAAvhL,EACAE,EAAAugB,EAAA8gK,EAAAtjL,EAAAsjL,EAAAnnK,EACA5V,OAAA,CACAg/b,QAAAthc,KAAA+b,IAAA,EAAAzZ,EAAAg/b,QAAAthc,KAAA+b,IAAAsjK,EAAAtjL,EAAAsjL,EAAArlL,IACAunc,SAAAvhc,KAAA+b,IAAA,EAAAzZ,EAAAi/b,SAAAvhc,KAAA+b,IAAAsjK,EAAAtjL,EAAAsjL,EAAAvhL,IACA0jc,WAAAxhc,KAAA+b,IAAA,EAAAzZ,EAAAk/b,WAAAxhc,KAAA+b,IAAAsjK,EAAAnnK,EAAAmnK,EAAArlL,IACAync,YAAAzhc,KAAA+b,IAAA,EAAAzZ,EAAAm/b,YAAAzhc,KAAA+b,IAAAsjK,EAAAnnK,EAAAmnK,EAAAvhL,MAIA,CA3BA,CAiFiCb,MACjCykc,GA/CAp/b,EA+CAi1R,EAAAj1R,QA9CAg/b,SAAAh/b,EAAAi/b,UAAAj/b,EAAAk/b,YAAAl/b,EAAAm/b,YA8CAnjC,EAAAqjC,mBAAAb;AA/CA,IAAAx+b;AAgDAo1J,EAAAp4C,OACAi4K,EAAAzlR,IAAAwlR,EAAAxlR,GAAAylR,EAAAv5R,IAAAs5R,EAAAt5R,IACA05J,EAAA60R,YACAmV,EAAAhqS,EAAAqpS,GAAAxpK,EAAAs2I,EAAAv2I,IACA5/H,EAAA4xQ,OACAo4B,EAAAhqS,EAAAqpS,GAAAzpK,GAAAu2I,EAAAt2I,IACA7/H,EAAAq6Q,UAAA7nG,EACAxyK,EAAAitQ,KAAA,YAEAjtQ,EAAA60R,YACAmV,EAAAhqS,EAAAqpS,GAAAzpK,EAAAu2I,IACAn2Q,EAAAq6Q,UAAA/nG,EACAtyK,EAAAitQ,OACAjtQ,EAAA8M,SACA,CACA,OAAAszH,CAAAqoK,EAAAC,EAAA5mB,GACA,OAAA1hJ,GAAA76R,KAAAkjc,EAAAC,EAAA5mB,EACA,CACA,QAAA6mB,CAAAF,EAAA3mB,GACA,OAAA1hJ,GAAA76R,KAAAkjc,EAAA,KAAA3mB,EACA,CACA,QAAA8mB,CAAAF,EAAA5mB,GACA,OAAA1hJ,GAAA76R,KAAA,KAAAmjc,EAAA5mB,EACA,CACA,cAAAU,CAAAV,GACA,MAAAv1a,EAAgBA,EAAAwK,IAAAm+Q,OAAAr1H,cAA6Bt6J,KAAAk9a,SAAA,CAC7C,IACA,IACA,OACA,cACAX;AACA,OACAv1a,EAAAszJ,GAAAtzJ,EAAA2oR,GAAA,EAAA3oR,EACAwK,EAAA8oJ,EAAA9oJ,KAAAm+Q,GAAA,EAEA,CACA,QAAAwsJ,CAAAz8Z,GACA,YAAAA,EAAA1f,KAAA+N,MAAA,EAAA/N,KAAAshB,OAAA,CACA,EAGA,IAAAa,GAAA4F,OAAA4jE,OAAA,CACAgQ,UAAA,KACAujW,cACA8E,cACAlC,eACAkB;AAGA,MAAA2B,GAAA,CACA,oBACA,oBACA,oBACA,oBACA,oBACA,qBACA,sBAGAC,GAAAD,GAAA/gb,IAAAte,KAAAmb,QAAA,gBAAAA,QAAA;AACA,SAAAokb,GAAAvkc,GACA,OAAAqkc,GAAArkc,EAAAqkc,GAAApkc,OACA,CACA,SAAAukc,GAAAxkc,GACA,OAAAskc,GAAAtkc,EAAAskc,GAAArkc,OACA,CA2BA,SAAAwkc,GAAA5T,GACA,IAAAz1a;AACA,IAAAA,KAAAy1a,EACA,GAAAA,EAAAz1a,GAAAuxT,aAAAkkH,EAAAz1a,GAAAqxT,gBACA;AAGA,QACA,CAOA,IAAAi4H,GAAA,CACAhmZ,GAAA,SACAwL,SAAA,CACA/1C,WACAwwb,kBAEA,YAAAhlB,CAAAve,EAAA37N,EAAA/jM,GACA,IAAAA,EAAAyS,QACA;AAEA,MAAgBwY,MAAA87Y,SAAQA,GAAY/ma,QAAAkjc,GAA2BxjC,EAAAlqY,QAC/DrV,SAAgBA,GAAY+ib,EAC5BC,EAAAJ,GAAAh8B,KAlBA5+W,EAkBA+6Y,KAjBA/6Y,EAAA8iR,aAAA9iR,EAAA4iR,kBAiBA5qT,GAAA4ib,GAAA5ib,IAdA,oBAAAk/Y,EAAA72W,SAAAyiR,aAAA,oBAAAo0F,EAAA72W,SAAAuiR;AAJA,IAAA5iR;AAmBA,IAAAnoD,EAAAijc,eAAAE,EACA;AAEA,MAAAC,EA5CA,SAAA1jC,GACA,IAAApha,EAAA;AACA,OAAAmgF,EAAAgkV,KACA,MAAAc,EAAA7D,EAAAsH,eAAAvE,GAAAc;AACAA,aAAAyO,EACA1za,EAbA,SAAAmgF,EAAAngF,GAEA,OADAmgF,EAAAssP,gBAAAtsP,EAAAxzD,KAAArJ,IAAA,IAAAihb,GAAAvkc,MACAA,CACA,CAHA,CAaAmgF,EAAAngF,GACUila,aAAAsU,EACVv5a,EAXA,SAAAmgF,EAAAngF,GAEA,OADAmgF,EAAAssP,gBAAAtsP,EAAAxzD,KAAArJ,IAAA,IAAAkhb,GAAAxkc,MACAA,CACA,CAHA,CAWAmgF,EAAAngF,GACUila,IACVjla,EAtBA,SAAAmgF,EAAAngF,GAGA,OAFAmgF,EAAAwsP,YAAA43H,GAAAvkc,GACAmgF,EAAAssP,gBAAA+3H,GAAAxkc,KACAA,CACA,CAJA,CAsBAmgF,EAAAngF,IAGA,CAZA,CA4CAoha;AACAqH,EAAAvuZ,QAAA4qb,EACA;AAmGA,SAAAC,GAAA5kX,GACA,GAAAA,EAAAy4V,WAAA,CACA,MAAAjsZ,EAAAwzD,EAAAmsK;OACAnsK,EAAAy4V,kBACAz4V,EAAAmsK,MACA7kO,OAAAmhC,eAAAu3B,EAAA,QACAp3B,gBACAD,cACAiyB,YACA14E,MAAAsqB,GAEA,CACA,CACA,SAAAq4a,GAAA5jC,GACAA,EAAAz0Y,KAAA87Y,SAAAvuZ,QAAAimE,IACA4kX,GAAA5kX,IAEA,CAoBA,IAAA8kX,GAAA,CACAvmZ,GAAA,aACAwL,SAAA,CACA9H,UAAA,UACAjuC,YAEA+wb,qBAAA,CAAA9jC,EAAAhpY,EAAA12B,KACA,IAAAA,EAAAyS,QAEA,YADA6wb,GAAA5jC;AAGA,MAAAhtY,EAAAgtY,EAAA3zZ;AACA2zZ,EAAAz0Y,KAAA87Y,SAAAvuZ,QAAA,CAAAimE,EAAAgkV,KACA,MAAA73K,MAAoBA,EAAA07K,aAAqB7nV,EACzCk5N,EAAA+nH,EAAAsH,eAAAvE,GACAx3Y,EAAA2/N,GAAAnsK,EAAAxzD;AACA,GAGA,MAHAo0Y,EAAArsV,QAAA,CACAszV,EACA5G,EAAA1/Z,QAAAsma,YAEA;AAEA,IAAA3uH,EAAA4rH,WAAA2B,mBACA;AAEA,MAAAu+B,EAAA/jC,EAAAwE,OAAAvsH,EAAAquH;AACA,cAAAy9B,EAAA3hc,MAAA,SAAA2hc,EAAA3hc,KACA;AAEA,GAAA49Z,EAAA1/Z,QAAAsoa,QACA;AAEA,IAoBAo7B,GApBAxmb,MAAkBA,EAAAihI,SAnDlB,SAAAw5J,EAAA0mH,GACA,MAAAslC,EAAAtlC,EAAA9/Z;AACA,IACA4/I,EADAjhI,EAAA;AAEA,MAAAwmZ,OAAYA,GAAU/rH,GACtB96R,IAAYA,EAAAC,MAAA8sZ,aAAAC,cAAuCnG,EAAAoG;AASnD,OARAF,IACA1sZ,EAAAmiZ,EAAAyoB,YAAAzoB,EAAA2a,aAAA3b,EAAAqF,EAAAhmZ,KAAAb,GAAA8qH,GAAA,EAAAg8T,EAAA,IAGAxlT,EADA0rR,EACAxK,EAAAyoB,YAAAzoB,EAAA2a,aAAA3b,EAAAqF,EAAAhmZ,KAAAZ,GAAA6/B,GAAA,EAAAz/B,EAAAymb,GAAAzmb,EAEAymb,EAAAzmb,EAEA,CACAA,QACAihI,QAEA,CAlBA,CAmDmCw5J,EAAA1sR;AAEnC,GAAAkzH,IADAn+I,EAAA8sB,WAAA,EAAA4F,GAEA2wa,GAAA5kX;IADA,CAmBA,OAfA4gV,EAAAqQ,cAAA9kL,KACAnsK,EAAAmsK,MAAA3/N,SACAwzD,EAAAxzD,KACAlF,OAAAmhC,eAAAu3B,EAAA,QACAp3B,gBACAD,cACA98B,IAAA,WACA,OAAAtsB,KAAAk5a,UACA,EACArsZ,IAAA,SAAAltB,GACAK,KAAA4sP,MAAAjtP,CACA,KAIAqC,EAAA0gD,WACA,WACAgjZ,EA5LA,SAAAz4a,EAAA/N,EAAAihI,EAAAzrH,EAAA1yB,GACA,MAAA4jc,EAAA5jc,EAAA4jc,SAAAlxa;AACA,GAAAkxa,GAAAzlT,EACA,OAAAlzH,EAAA7sB,MAAA8e,IAAAihI;AAEA,MAAAulT,EAAA,GACAG,GAAA1lT,EAAA,IAAAylT,EAAA;AACA,IAAAE,EAAA;AACA,MAAA/9G,EAAA7oU,EAAAihI,EAAA;AACA,IACA7/I,EAAAylc,EAAAC,EAAAvmM,EAAAwmM,EADAnlc,EAAAoe;AAGA,IADAwmb,EAAAI,KAAA74a,EAAAnsB,GACAR,EAAA,EAAeA,EAAAslc,EAAA,EAAiBtlc,IAAA,CAChC,IAEAqlF,EAFA27W,EAAA,EACA4E,EAAA;AAEA,MAAAC,EAAApjc,KAAAE,OAAA3C,EAAA,GAAAulc,GAAA,EAAA3mb,EACAknb,EAAArjc,KAAA8b,IAAA9b,KAAAE,OAAA3C,EAAA,GAAAulc,GAAA,EAAA1lT,GAAAjhI,EACAmnb,EAAAD,EAAAD;AACA,IAAAxgX,EAAAwgX,EAA+BxgX,EAAAygX,EAAiBzgX,IAChD27W,GAAAr0a,EAAA04D,GAAA3+E,EACAk/b,GAAAj5a,EAAA04D,GAAAn0E;AAEA8vb,GAAA+E,EACAH,GAAAG;AACA,MAAAC,EAAAvjc,KAAAE,MAAA3C,EAAAulc,GAAA,EAAA3mb,EACAqnb,EAAAxjc,KAAA8b,IAAA9b,KAAAE,OAAA3C,EAAA,GAAAulc,GAAA,EAAA1lT,GAAAjhI,GACgBlY,EAAAw/b,EAAAh1b,EAAAi1b,GAA2Bx5a,EAAAnsB;AAE3C,IADAklc,EAAAvmM,GAAA,EACA95K,EAAA2gX,EAA2B3gX,EAAA4gX,EAAa5gX,IACxC85K,EAAA,GAAA18P,KAAAqN,KAAAo2b,EAAAlF,IAAAr0a,EAAA04D,GAAAn0E,EAAAi1b,IAAAD,EAAAv5a,EAAA04D,GAAA3+E,IAAAk/b,EAAAO,IACAhnM,EAAAumM,IACAA,EAAAvmM,EACAsmM,EAAA94a,EAAA04D,GACAsgX,EAAAtgX;AAGA+/W,EAAAI,KAAAC,EACAjlc,EAAAmlc,CACA,CAEA,OADAP,EAAAI,KAAA74a,EAAA86T,GACA29G,CACA,CA1CA,CA4LAz4a,EAAA/N,EAAAihI,EAAAzrH,EAAA1yB;AACA;AACA,cACA0jc,EApJA,SAAAz4a,EAAA/N,EAAAihI,EAAAzrH,GACA,IAEAp0B,EAAAo1J,EAAA1uJ,EAAAwK,EAAA4vb,EAAAsF,EAAAC,EAAA/rO,EAAA/2M,EAAA0zZ,EAFA+pB,EAAA,EACAC,EAAA;AAEA,MAAAmE,EAAA,GACA39G,EAAA7oU,EAAAihI,EAAA,EACAymT,EAAA35a,EAAA/N,GAAAlY,EAEAujK,EADAt9I,EAAA86T,GAAA/gV,EACA4/b;AACA,IAAAtmc,EAAA4e,EAAmB5e,EAAA4e,EAAAihI,IAAmB7/I,EAAA,CACtCo1J,EAAAzoI,EAAA3sB,GACA0G,GAAA0uJ,EAAA1uJ,EAAA4/b,GAAAr8R,EAAA71I,EACAljB,EAAAkkJ,EAAAlkJ;AACA,MAAAkwb,EAAA,EAAA16b;AACA,GAAA06b,IAAAN,EACA5vb,EAAAqS,GACAA,EAAArS,EACAk1b,EAAApmc,GACckR,EAAA+la,IACdA,EAAA/la,EACAm1b,EAAArmc,GAEAghc,GAAAC,EAAAD,EAAA5rS,EAAA1uJ,KAAAu6b;IACU,CACV,MAAApvZ,EAAA7xC,EAAA;AACA,IAAA+ga,EAAAqQ,cAAAg1B,KAAArlC,EAAAqQ,cAAAi1B,GAAA,CACA,MAAAE,EAAA9jc,KAAA8b,IAAA6nb,EAAAC,GACAG,EAAA/jc,KAAA+b,IAAA4nb,EAAAC;AACAE,IAAAjsO,GAAAisO,IAAA10Z,GACAuzZ,EAAA99b,KAAA,IACAqlB,EAAA45a,GACA7/b,EAAAs6b,IAGAwF,IAAAlsO,GAAAksO,IAAA30Z,GACAuzZ,EAAA99b,KAAA,IACAqlB,EAAA65a,GACA9/b,EAAAs6b,GAGA,CACAhhc,EAAA,GAAA6xC,IAAAyoL,GACA8qO,EAAA99b,KAAAqlB,EAAAklB,IAEAuzZ,EAAA99b,KAAA8tJ,GACA0rS,EAAAM,EACAH,EAAA,EACA19a,EAAA0zZ,EAAA/la,EACAk1b,EAAAC,EAAA/rO,EAAAt6N,CACA,CACA,CACA,OAAAolc,CACA,CApDA,CAoJAz4a,EAAA/N,EAAAihI,EAAAzrH;AACA;AACA,QACA,UAAAh0B,MAAA,qCAAyEsB,EAAA0gD,cAEzE+9B,EAAAy4V,WAAAwsB,CA1BA,KA6BA,OAAAtoX,CAAAskV,GACA4jC,GAAA5jC,EACA;AAyCA,SAAAqlC,GAAAr5T,EAAA37F,EAAAm+I,EAAAkpO,GACA,GAAAA,EACA;AAEA,IAAAl6Y,EAAA6yB,EAAA27F,GACAvuH,EAAA+wK,EAAAxiD;AAKA,MAJA,UAAAA,IACAxuH,EAAAmiZ,EAAA4+B,gBAAA/gb,GACAC,EAAAkiZ,EAAA4+B,gBAAA9gb,IAEA,CACAuuH,WACAxuH,QACAC,MAEA,CA+BA,SAAA6nb,GAAA9nb,EAAAC,EAAAkhZ,GACA,KAAUlhZ,EAAAD,EAAaC,IAAA,CACvB,MAAAu2I,EAAA2qQ,EAAAlhZ;AACA,IAAA87D,MAAAy6E,EAAA1uJ,KAAAi0E,MAAAy6E,EAAAlkJ,GACA,KAEA,CACA,OAAA2N,CACA,CACA,SAAA8nb,GAAAnmc,EAAAma,EAAAiwK,EAAA56J,GACA,OAAAxvB,GAAAma,EACAqV,EAAAxvB,EAAAoqL,GAAAjwK,EAAAiwK,IAEApqL,IAAAoqL,GAAAjwK,IAAAiwK,GAAA,CACA,CAEA,SAAAg8Q,GAAA7kb,EAAAxG,GACA,IAAAwkZ,EAAA,GACAjnR;AAOA,OANAioR,EAAAlha,QAAAkiB,IACA+2H,KACAinR,EAAAh+Y,GAEAg+Y,EArDA,SAAAh+Y,EAAAxG,GACA,MAAA7U,EAAYA,EAAA,KAAAwK,IAAA,MAAqB6Q,GAAA,GACjC8kb,EAAAtrb,EAAAwkZ,OACAA,EAAA;AAyBA,OAxBAxkZ,EAAAwmb,SAAA7nb,QAAA,EAA6B0E,QAAAC,UAC7BA,EAAA6nb,GAAA9nb,EAAAC,EAAAgob;AACA,MAAAp1Z,EAAAo1Z,EAAAjob,GACAgxK,EAAAi3Q,EAAAhob;AACA,OAAA3N,GACA6uZ,EAAAz4Z,KAAA,CACAZ,EAAA+qC,EAAA/qC,EACAwK,MAEA6uZ,EAAAz4Z,KAAA,CACAZ,EAAAkpL,EAAAlpL,EACAwK,OAEU,OAAAxK,IACVq5Z,EAAAz4Z,KAAA,CACAZ,IACAwK,EAAAugC,EAAAvgC,IAEA6uZ,EAAAz4Z,KAAA,CACAZ,IACAwK,EAAA0+K,EAAA1+K,OAIA6uZ,CACA,CA7BA,CAqDAh+Y,EAAAxG,GAEAwkZ,EAAA9/Z,OAAA,IAAAuhc,GAAA,CACAzhC,SACAr+Z,QAAA,CACAg/b,QAAA,GAEA5nT,QACA4hS,UAAA5hS,IACK,IACL,CACA,SAAAguT,GAAA72Z,GACA,OAAAA,UAAAm3X,IACA,CAEA,SAAA2/B,GAAAt1L,EAAAhpQ,EAAAu+b,GAEA,IAAA5/B,EADA31J,EAAAhpQ,GACA2+Z;AACA,MAAA6/B,EAAA,CACAx+b;AAEA,IAAAS;AACA,IAAA89b,EACA,OAAA5/B;AAEA,UAAAA,IAAA,IAAA6/B,EAAA19b,QAAA69Z,IAAA,CACA,IAAArG,EAAAsD,eAAA+C,GACA,OAAAA;AAGA,GADAl+Z,EAAAuoQ,EAAA21J,IACAl+Z,EACA;AAEA,GAAAA,EAAA4tE,QACA,OAAAswV;AAEA6/B,EAAA3/b,KAAA8/Z,GACAA,EAAAl+Z,EAAAk+Z,IACA,CACA,QACA,CACA,SAAA8/B,GAAA3rb,EAAA9S,EAAAo3I,GACA,MAAAunR,EAmDA,SAAA7rZ,GACA,MAAA7Z,EAAA6Z,EAAA7Z,QACAylc,EAAAzlc,EAAA0la;AACA,IAAAA,EAAArG,EAAA4G,eAAAw/B,KAAAj+b,OAAAi+b;AAIA,YAHAh2a,IAAAi2Y,IACAA,IAAA1la,EAAA+qU,sBAEA26F,GAAA,OAAAA,SAGAA,EACA,SAEAA,EACA,CAdA,CAnDA7rZ;AACA,GAAAwlZ,EAAAxsT,SAAA6yT,GACA,OAAAzsV,MAAAysV,EAAA/ka,QAAA+ka;AAEA,IAAAl+Z,EAAA2e,WAAAu/Y;AACA,OAAArG,EAAAsD,eAAAn7Z,IAAAzG,KAAAE,MAAAuG,OAWA,SAAAk+b,EAAA3+b,EAAAS,EAAA22I,GAIA,MAHA,MAAAunT,GAAA,MAAAA,IACAl+b,EAAAT,EAAAS,KAEAA,IAAAT,GAAAS,EAAA,GAAAA,GAAA22I,IAGA32I,CACA,CARA,CAVAk+Z,EAAA,GAAA3+Z,EAAAS,EAAA22I,GAEA,CACA,SACA,QACA,MACA,QACA,SACAt2I,QAAA69Z,IAAA,GAAAA,CACA,CAuFA,SAAAigC,GAAAtnC,EAAAunC,EAAAC,GACA,MAAAC,EAAA;AACA,QAAAniX,EAAA,EAAmBA,EAAAkiX,EAAAtnc,OAAuBolF,IAAA,CAC1C,MAAA9pE,EAAAgsb,EAAAliX,IACA5zC,MAAgBA,EAAAm+I,OAAAx6B,SAAwBqyS,GAAAlsb,EAAA+rb,EAAA;AACxC,MAAAlyS,GAAA3jH,GAAAm+I,GAGA,GAAAn+I,EACA+1Z,EAAAzgS,QAAA3R;KAGA,GADA2qQ,EAAAz4Z,KAAA8tJ,IACAw6B,EACA,KAGA,CACAmwO,EAAAz4Z,QAAAkgc,EACA,CACA,SAAAC,GAAAlsb,EAAA+rb,EAAAl6T,GACA,MAAAgoB,EAAA75I,EAAAwnX,YAAAukE,EAAAl6T;AACA,IAAAgoB,EACA;AAEA,MAAAsyS,EAAAtyS,EAAAhoB,GACA20T,EAAAxmb,EAAAwmb,SACA8E,EAAAtrb,EAAAwkZ;AACA,IAAAtuX,KACAm+I;AACA,QAAA5vL,EAAA,EAAmBA,EAAA+hc,EAAA9hc,OAAqBD,IAAA,CACxC,MAAA64a,EAAAkpB,EAAA/hc,GACA2nc,EAAAd,EAAAhuB,EAAAj6Z,OAAAwuH,GACAg+D,EAAAy7P,EAAAhuB,EAAAh6Z,KAAAuuH;AACA,GAAA2zR,EAAAs+B,WAAAqI,EAAAC,EAAAv8P,GAAA,CACA35J,EAAAi2Z,IAAAC,EACA/3Q,EAAA83Q,IAAAt8P;AACA,KACA,CACA,CACA,OACA35J,QACAm+I,OACAx6B,QAEA,CAEA,MAAAwyS,GACA,WAAA5sX,CAAAriC,GACAj5C,KAAAgH,EAAAiyC,EAAAjyC,EACAhH,KAAAwR,EAAAynC,EAAAznC,EACAxR,KAAAqF,OAAA4zC,EAAA5zC,MACA,CACA,WAAAu7b,CAAAnmS,EAAApgJ,EAAA4+B,GACA,MAAAjyC,EAAgBA,EAAAwK,IAAAnM,UAAkBrF;AAMlC,OALAqa,KAAA,CACA6E,MAAA,EACAC,IAAAkiZ,EAAA6U,KAEAz7Q,EAAA29Q,IAAApxa,EAAAwK,EAAAnM,EAAAgV,EAAA8E,IAAA9E,EAAA6E,WACA+5B,EAAA5+B,MACA,CACA,WAAAgpX,CAAA3tO,GACA,MAAA1uJ,EAAgBA,EAAAwK,IAAAnM,UAAkBrF,KAClCysR,EAAA/2H,EAAA+2H;AACA,OACAzlR,IAAAjE,KAAAwyK,IAAAk3G,GAAApnR,EACAmM,IAAAzO,KAAAi0a,IAAAvqJ,GAAApnR,EACAonR,QAEA,EAiEA,SAAA07K,GAAA1tS,EAAAlqH,EAAAkvN,GACA,MAAAj2P,EA/DA,SAAA+mC,GACA,MAAAmxX,MAAYA,EAAAgG,OAAA7rZ,QAAuB00B;AACnC,GAAA8wX,EAAAsD,eAAA+C,GACA,OAcA,SAAAhG,EAAA34Z,GACA,MAAA4wS,EAAA+nH,EAAAsH,eAAAjga;AAEA,OADA4wS,GAAA+nH,EAAAyU,iBAAApta,GACA4wS,EAAAl5N,QAAA,IACA,CAJA,CAdAihV,EAAAgG;AAEA,aAAAA,EACA,OAjHA,SAAAn3X,GACA,MAAArqB,MAAYA,EAAAnd,QAAA8S,QAAwB00B,EACpC8vX,EAAA,GACAgiC,EAAAxmb,EAAAwmb,SACA+F,EAAAvsb,EAAAwkZ,OACAwnC,EAgBA,SAAA3hb,EAAAnd,GACA,MAAAs/b,EAAA,GACAriB,EAAA9/Z,EAAAm/Y,wBAAA;AACA,QAAA/ka,EAAA,EAAmBA,EAAA0lb,EAAAzlb,OAAkBD,IAAA,CACrC,MAAAq5S,EAAAqsI,EAAA1lb;AACA,GAAAq5S,EAAA5wS,UACA;AAEA4wS,EAAAm+C,QACAuwG,EAAAhhS,QAAAsyI,EAAAl5N,QAEA,CACA,OAAA4nX,CACA,CAbA,CAhBAnib,EAAAnd;AACA8+b,EAAAjgc,KAAAs/b,GAAA,CACAlgc,EAAA,KACAwK,EAAA0U,EAAApY,QACK+N;AACL,QAAAvb,EAAA,EAAmBA,EAAA+hc,EAAA9hc,OAAqBD,IAAA,CACxC,MAAA64a,EAAAkpB,EAAA/hc;AACA,QAAAqlF,EAAAwzV,EAAAj6Z,MAAmCymE,GAAAwzV,EAAAh6Z,IAAkBwmE,IACrDgiX,GAAAtnC,EAAA+nC,EAAAziX,GAAAkiX,EAEA,CACA,WAAA/F,GAAA,CACAzhC,SACAr+Z,QAAA,IAEA,CApBA,CAiHAuuC;AAEA,aAAAm3X,EACA;AAEA,MAAArlZ,EAWA,SAAAkuB,GAEA,OADAA,EAAArqB,OAAA,IACAg1Z,yBAiBA,SAAA3qY,GACA,MAAArqB,MAAYA,EAAAwhZ,QAAgBn3X,EAC5BvuC,EAAAkkB,EAAAlkB,QACAzB,EAAA2lB,EAAA4kZ,YAAAvqa,OACA2e,EAAAld,EAAAmP,QAAA+U,EAAApH,IAAAoH,EAAArH,IACAlc,EAtLA,SAAA+ka,EAAAxhZ,EAAA4pZ,GACA,IAAAnta;AAUA,OARAA,EADA,UAAA+ka,EACAoI,EACM,QAAApI,EACNxhZ,EAAAlkB,QAAAmP,QAAA+U,EAAArH,IAAAqH,EAAApH,IACMuiZ,EAAAxsT,SAAA6yT,GACNA,EAAA/ka,MAEAujB,EAAA+la,eAEAtpb,CACA,CAZA,CAsLA+ka,EAAAxhZ,EAAAhH,GACA1V,EAAA;AACA,GAAAxH,EAAA+0P,KAAAgjL,SAAA,CACA,MAAAlpa,EAAAqV,EAAAg1Z,yBAAA,EAAAh8Z;AACA,WAAAgpb,GAAA,CACAlhc,EAAA6J,EAAA7J,EACAwK,EAAAX,EAAAW,EACAnM,OAAA6gB,EAAA20Z,8BAAAl4a,IAEA,CACA,QAAArC,EAAA,EAAmBA,EAAAC,IAAYD,EAC/BkJ,EAAA5B,KAAAse,EAAAg1Z,yBAAA56a,EAAAqC;AAEA,OAAA6G,CACA,CAnBA,CAhBA+mC,GAIA,SAAAA,GACA,MAAArqB,MAAYA,EAAA,GAAUwhZ,QAAUn3X,EAChCs7Y,EApLA,SAAAnkB,EAAAxhZ,GACA,IAAA2la,EAAA;AAUA,MATA,UAAAnkB,EACAmkB,EAAA3la,EAAApY,OACM,QAAA45Z,EACNmkB,EAAA3la,EAAArY,IACMwzZ,EAAAxsT,SAAA6yT,GACNmkB,EAAA3la,EAAAwpZ,iBAAAhI,EAAA/ka,OACMujB,EAAAorZ,eACNua,EAAA3la,EAAAorZ,gBAEAua,CACA,CAZA,CAoLAnkB,EAAAxhZ;AACA,GAAAm7Y,EAAAsD,eAAAknB,GAAA,CACA,MAAAvxR,EAAAp0I,EAAAqrV;AACA,OACAvqW,EAAAszJ,EAAAuxR,EAAA,KACAr6a,EAAA8oJ,EAAA,KAAAuxR,EAEA,CACA,WACA,CAXA,CAFAt7Y,EACA,CANA,CAXAA;AACA,OAAAluB,aAAA6lb,GACA7lb,EAEA6kb,GAAA7kb,EAAAxG,EACA,CAhBA,CA+DA00B,IACAmxX,MAAYA,EAAA34Z,QAAA8S,OAAAqK,QAAAxG,QAAuC6wB,EACnD+3Z,EAAAzsb,EAAA7Z,QACAylc,EAAAa,EAAA5gC,KACApia,EAAAgjc,EAAAv7H,iBACAw7H,MAAYA,EAAAjjc,EAAA+ic,QAAA/ic,GAA+Bmic,GAAA,GAC3C9tJ,EAAA+nH,EAAAsH,eAAAjga,GACAsja,EAAAhL,EAAA05B,mBAAAr5B,EAAA/nH;AACAnwS,GAAAqS,EAAAwkZ,OAAA9/Z,SACA8ga,EAAAyuB,SAAAr1R,EAAAglG,GAcA,SAAAhlG,EAAAgoQ,GACA,MAAA5mZ,KAAYA,EAAArS,SAAA++b,QAAAF,QAAA5oM,OAAAv5O,QAAAmmZ,QAAuD5J,EACnE/0R,EAAA7xH,EAAAu9H,MAAA,QAAAqpR,EAAA/iZ;AACA+6I,EAAAp4C;AACA,IAAA98G,EAAA8ic;AACAA,IAAAE,IACA,MAAA76T,GACA86T,GAAA/tS,EAAAjxJ,EAAAi2P,EAAA5xP,KACA65Z,GAAAjtQ,EAAA,CACA5+I,OACArS,SACAlE,MAAAijc,EACArib,QACAwnH,WACA2+R,SAEA5xQ,EAAA8M,UACA9M,EAAAp4C,OACAmmV,GAAA/tS,EAAAjxJ,EAAAi2P,EAAA3xP,SACU,MAAA4/H,IACV+6T,GAAAhuS,EAAAjxJ,EAAAi2P,EAAA7xP,MACA85Z,GAAAjtQ,EAAA,CACA5+I,OACArS,SACAlE,MAAA+ic,EACAnib,QACAwnH,WACA2+R,SAEA5xQ,EAAA8M,UACA9M,EAAAp4C,OACAomV,GAAAhuS,EAAAjxJ,EAAAi2P,EAAAzxP,OACAzI,EAAAgjc,IAGA7gC,GAAAjtQ,EAAA,CACA5+I,OACArS,SACAlE,MAAAC,EACA2gB,QACAwnH,WACA2+R,SAEA5xQ,EAAA8M,SACA,CA5CA,CAbA9M,EAAA,CACA5+I,OACArS,SACA++b,QACAF,QACA5oM,OACAv5O,QACAxG,OACA2sZ,SAEAhL,EAAA2uB,WAAAv1R,GAEA,CA8CA,SAAA+tS,GAAA/tS,EAAAjxJ,EAAAk/b,GACA,MAAArG,SAAYA,EAAAhiC,UAAqB72Z;AACjC,IAAAuoC,KACA42Z;AACAluS,EAAA60R;AACA,UAAAnW,KAAAkpB,EAAA,CACA,MAAAnjb,MAAgBA,EAAAC,OAAeg6Z,EAC/BO,EAAArZ,EAAAnhZ,GACAy6Z,EAAAtZ,EAAA2mC,GAAA9nb,EAAAC,EAAAkhZ;AACAtuX,GACA0oH,EAAA80R,OAAA7V,EAAA1ya,EAAA0ya,EAAAloa,GACAugC,OAEA0oH,EAAA+0R,OAAA9V,EAAA1ya,EAAA0hc,GACAjuS,EAAA+0R,OAAA9V,EAAA1ya,EAAA0ya,EAAAloa,IAEAm3b,IAAAn/b,EAAAo3b,YAAAnmS,EAAA0+Q,EAAA,CACAj9K,KAAAysM,IAEAA,EACAluS,EAAAwkS,YAEAxkS,EAAA+0R,OAAA7V,EAAA3ya,EAAA0hc,EAEA,CACAjuS,EAAA+0R,OAAAhmb,EAAAuoC,QAAA/qC,EAAA0hc,GACAjuS,EAAAwkS,YACAxkS,EAAA4xQ,MACA,CACA,SAAAo8B,GAAAhuS,EAAAjxJ,EAAAo/b,GACA,MAAAvG,SAAYA,EAAAhiC,UAAqB72Z;AACjC,IAAAuoC,KACA42Z;AACAluS,EAAA60R;AACA,UAAAnW,KAAAkpB,EAAA,CACA,MAAAnjb,MAAgBA,EAAAC,OAAeg6Z,EAC/BO,EAAArZ,EAAAnhZ,GACAy6Z,EAAAtZ,EAAA2mC,GAAA9nb,EAAAC,EAAAkhZ;AACAtuX,GACA0oH,EAAA80R,OAAA7V,EAAA1ya,EAAA0ya,EAAAloa,GACAugC,OAEA0oH,EAAA+0R,OAAAoZ,EAAAlvB,EAAAloa,GACAipJ,EAAA+0R,OAAA9V,EAAA1ya,EAAA0ya,EAAAloa,IAEAm3b,IAAAn/b,EAAAo3b,YAAAnmS,EAAA0+Q,EAAA,CACAj9K,KAAAysM,IAEAA,EACAluS,EAAAwkS,YAEAxkS,EAAA+0R,OAAAoZ,EAAAjvB,EAAAnoa,EAEA,CACAipJ,EAAA+0R,OAAAoZ,EAAAp/b,EAAAuoC,QAAAvgC,GACAipJ,EAAAwkS,YACAxkS,EAAA4xQ,MACA,CACA,SAAA3E,GAAAjtQ,EAAAgoQ,GACA,MAAA5mZ,KAAYA,EAAArS,SAAAkkI,WAAApoI,QAAA4gB,QAAAmmZ,QAAmD5J,EAC/D4/B,EAlgBA,SAAAxmb,EAAArS,EAAAkkI,GACA,MAAA20T,EAAAxmb,EAAAwmb,SACAhiC,EAAAxkZ,EAAAwkZ,OACAwoC,EAAAr/b,EAAA62Z,OACAv4W,EAAA;AACA,UAAAqxX,KAAAkpB,EAAA,CACA,IAAAnjb,MAAcA,EAAAC,OAAeg6Z;AAC7Bh6Z,EAAA6nb,GAAA9nb,EAAAC,EAAAkhZ;AACA,MAAAhmZ,EAAA0sb,GAAAr5T,EAAA2yR,EAAAnhZ,GAAAmhZ,EAAAlhZ,GAAAg6Z,EAAA/f;AACA,IAAA5vZ,EAAA64b,SAAA,CACAv6Y,EAAAlgD,KAAA,CACA2oC,OAAA4oY,EACA3va,OAAA6Q,EACA6E,MAAAmhZ,EAAAnhZ,GACAC,IAAAkhZ,EAAAlhZ;AAEA,QACA,CACA,MAAA2pb,EAAAznC,EAAAkhC,eAAA/4b,EAAA6Q;AACA,UAAA0ub,KAAAD,EAAA,CACA,MAAAE,EAAAjC,GAAAr5T,EAAAm7T,EAAAE,EAAA7pb,OAAA2pb,EAAAE,EAAA5pb,KAAA4pb,EAAA3vC,MACA6vC,EAAA5nC,EAAA6nC,cAAA/vB,EAAA9Y,EAAA2oC;AACA,UAAAG,KAAAF,EACAnhZ,EAAAlgD,KAAA,CACA2oC,OAAA44Z,EACA3/b,OAAAu/b,EACA7pb,MAAA,CACAwuH,IAAAu5T,GAAA5sb,EAAA2ub,EAAA,QAAAjmc,KAAA+b,MAEAK,IAAA,CACAuuH,IAAAu5T,GAAA5sb,EAAA2ub,EAAA,MAAAjmc,KAAA8b,OAIA,CACA,CACA,OAAAipC,CACA,CArCA,CAkgBAjsC,EAAArS,EAAAkkI;AACA,UAAiBn9F,OAAA4kC,EAAA3rE,OAAAu/b,EAAA7pb,QAAAC,SAA2Ckjb,EAAA,CAC5D,MAAgB10b,OAAAo/T,gBAASA,EAAAznU,GAA0B,IAAQ6vE,EAC3Di0X,OAAA5/b;AACAixJ,EAAAp4C,OACAo4C,EAAAq6Q,UAAA/nG,EACAs8H,GAAA5uS,EAAAv0I,EAAAmmZ,EAAA+8B,GAAArC,GAAAr5T,EAAAxuH,EAAAC,IACAs7I,EAAA60R;AACA,MAAAqZ,IAAA9sb,EAAA+kb,YAAAnmS,EAAAtlF;AACA,IAAAikV;AACA,GAAAgwC,EAAA,CACAT,EACAluS,EAAAwkS,YAEAqK,GAAA7uS,EAAAjxJ,EAAA2V,EAAAuuH;AAEA,MAAA67T,IAAA//b,EAAAo3b,YAAAnmS,EAAAsuS,EAAA,CACA7sM,KAAAysM,EACAx3b;AAEAioZ,EAAAuvC,GAAAY,EACAnwC,GACAkwC,GAAA7uS,EAAAjxJ,EAAA0V,EAAAwuH,EAEA,CACA+sB,EAAAwkS,YACAxkS,EAAAitQ,KAAAtO,EAAA,qBACA3+P,EAAA8M,SACA,CACA,CACA,SAAA8hS,GAAA5uS,EAAAv0I,EAAAmmZ,EAAAhyZ,GACA,MAAAiyZ,EAAApmZ,EAAAw7Y,MAAA4K,WACA5+R,SAAYA,EAAAxuH,QAAAC,OAA0B9E,GAAA;AACtC,SAAAqzH,GAAA,MAAAA,EAAA,CACA,IAAA9/H,EAAAC,EAAAG,EAAAF;AACA,MAAA4/H,GACA9/H,EAAAsR,EACArR,EAAAy+Z,EAAAz+Z,IACAG,EAAAmR,EACArR,EAAAw+Z,EAAAx+Z,SAEAF,EAAA0+Z,EAAA1+Z,KACAC,EAAAqR,EACAlR,EAAAs+Z,EAAAt+Z,MACAF,EAAAqR,GAEAs7I,EAAA60R,YACAjjB,IACAz+Z,EAAA7K,KAAA+b,IAAAlR,EAAAy+Z,EAAAz+Z,MACAI,EAAAjL,KAAA8b,IAAA7Q,EAAAq+Z,EAAAr+Z,OACAH,EAAA9K,KAAA+b,IAAAjR,EAAAw+Z,EAAAx+Z,KACAC,EAAA/K,KAAA8b,IAAA/Q,EAAAu+Z,EAAAv+Z,SAEA2sJ,EAAAp5I,KAAAzT,EAAAC,EAAAG,EAAAJ,EAAAE,EAAAD,GACA4sJ,EAAA4xQ,MACA,CACA,CACA,SAAAi9B,GAAA7uS,EAAAjxJ,EAAAksJ,EAAAhoB,GACA,MAAA87T,EAAAhgc,EAAA65X,YAAA3tO,EAAAhoB;AACA87T,GACA/uS,EAAA+0R,OAAAga,EAAAxic,EAAAwic,EAAAh4b,EAEA,CAEA,IAAAzI,GAAA,CACAi2C,GAAA,SACA,mBAAAyqZ,CAAA/nC,EAAA37N,EAAA/jM,GACA,MAAAm+I,GAAAuhR,EAAAz0Y,KAAA87Y,UAAA,IAAAxoa,OACAwxQ,EAAA;AACA,IAAA4nC,EAAAr5S,EAAAub,EAAA00B;AACA,IAAAjwC,EAAA,EAAmBA,EAAA6/I,IAAW7/I,EAC9Bq5S,EAAA+nH,EAAAsH,eAAA1oa,GACAub,EAAA89R,EAAAl5N,QACAlwC,EAAA,KACA10B,KAAA7Z,SAAA6Z,aAAAimb,KACAvxZ,EAAA,CACA6mC,QAAAsqV,EAAAyU,iBAAA71a,GACAyI,MAAAzI,EACAona,KAAA8/B,GAAA3rb,EAAAvb,EAAA6/I,GACAuhR,QACAhiZ,KAAAi6R,EAAA4rH,WAAAvja,QAAAsma,UACApiZ,MAAAyzR,EAAAyrH,OACAvpZ,SAGA89R,EAAA+vJ,QAAAn5Z,EACAwhO,EAAAnqQ,KAAA2oC;AAEA,IAAAjwC,EAAA,EAAmBA,EAAA6/I,IAAW7/I,EAC9BiwC,EAAAwhO,EAAAzxQ,GACAiwC,UAAAm3X,OAGAn3X,EAAAm3X,KAAA2/B,GAAAt1L,EAAAzxQ,EAAA0B,EAAAslc,WAEA,EACA,UAAAqC,CAAAjoC,EAAA37N,EAAA/jM,GACA,MAAA+/Z,EAAA,eAAA//Z,EAAA4nc,SACAzlC,EAAAzC,EAAA2a,+BACA58K,EAAAiiK,EAAA4K;AACA,QAAAhsa,EAAA6ja,EAAA5ja,OAAA,EAAyCD,GAAA,IAAQA,EAAA,CACjD,MAAAiwC,EAAA4zX,EAAA7ja,GAAAopc;AACAn5Z,IAGAA,EAAA10B,KAAA+9Z,oBAAAn6K,EAAAlvN,EAAA7wB,MACAqiZ,GAAAxxX,EAAAm3X,MACAygC,GAAAzmC,EAAAjnQ,IAAAlqH,EAAAkvN,GAEA,CACA,EACA,kBAAAoqM,CAAAnoC,EAAA37N,EAAA/jM,GACA,0BAAAA,EAAA4nc,SACA;AAEA,MAAAzlC,EAAAzC,EAAA2a;AACA,QAAA/7a,EAAA6ja,EAAA5ja,OAAA,EAAyCD,GAAA,IAAQA,EAAA,CACjD,MAAAiwC,EAAA4zX,EAAA7ja,GAAAopc;AACAtC,GAAA72Z,IACA43Z,GAAAzmC,EAAAjnQ,IAAAlqH,EAAAmxX,EAAA4K,UAEA,CACA,EACA,iBAAAw9B,CAAApoC,EAAAhpY,EAAA12B,GACA,MAAAuuC,EAAA7X,EAAAihR,KAAA+vJ;AACAtC,GAAA72Z,IAAA,sBAAAvuC,EAAA4nc,UAGAzB,GAAAzmC,EAAAjnQ,IAAAlqH,EAAAmxX,EAAA4K,UACA,EACA9hX,SAAA,CACA88Y,aACAsC,SAAA;AAIA,MAAAG,GAAA,CAAAC,EAAAzZ,KACA,IAAA0Z,UAAUA,EAAA1Z,EAAA2Z,WAAA3Z,GAA4CyZ;AAKtD,OAJAA,EAAAG,gBACAF,EAAAlnc,KAAA8b,IAAAorb,EAAA1Z,GACA2Z,EAAAF,EAAAI,iBAAArnc,KAAA8b,IAAAqrb,EAAA3Z,IAEA,CACA2Z,WACAD,YACAI,WAAAtnc,KAAA+b,IAAAyxa,EAAA0Z;AAIA,MAAAK,WAAA3lb,GACA,WAAA22D,CAAA9jD,GACAwrI,QACAhjK,KAAAuqc,UACAvqc,KAAAwqc,eAAA,GACAxqc,KAAAyqc,aAAA,KACAzqc,KAAA0qc,gBACA1qc,KAAA0ha,MAAAlqY,EAAAkqY,MACA1ha,KAAAgC,QAAAw1B,EAAAx1B,QACAhC,KAAAy6J,IAAAjjI,EAAAijI,IACAz6J,KAAA2qc,iBAAAl5a,EACAzxB,KAAA4qc,iBAAAn5a,EACAzxB,KAAA6qc,gBAAAp5a,EACAzxB,KAAAo9P,eAAA3rO,EACAzxB,KAAAk9P,cAAAzrO,EACAzxB,KAAA6N,SAAA4jB,EACAzxB,KAAA8N,YAAA2jB,EACAzxB,KAAA4N,UAAA6jB,EACAzxB,KAAAgO,WAAAyjB,EACAzxB,KAAAshB,YAAAmQ,EACAzxB,KAAA+N,WAAA0jB,EACAzxB,KAAA6kb,cAAApzZ,EACAzxB,KAAA4rB,cAAA6F,EACAzxB,KAAAsK,YAAAmnB,EACAzxB,KAAA4+a,cAAAntZ,CACA,CACA,MAAA9gB,CAAAusP,EAAAE,EAAA8Q,GACAluQ,KAAAk9P,WACAl9P,KAAAo9P,YACAp9P,KAAA6kb,SAAA32K,EACAluQ,KAAA2mb,gBACA3mb,KAAA8qc,cACA9qc,KAAAuob,KACA,CACA,aAAA5B,GACA3mb,KAAAuxW,gBACAvxW,KAAA+N,MAAA/N,KAAAk9P,SACAl9P,KAAA4N,KAAA5N,KAAA6kb,SAAAj3a,KACA5N,KAAAgO,MAAAhO,KAAA+N,QAEA/N,KAAAshB,OAAAthB,KAAAo9P,UACAp9P,KAAA6N,IAAA7N,KAAA6kb,SAAAh3a,IACA7N,KAAA8N,OAAA9N,KAAAshB,OAEA,CACA,WAAAwpb,GACA,MAAAd,EAAAhqc,KAAAgC,QAAA6oa,QAAA;AACA,IAAA8/B,EAAAtpC,EAAA1nZ,SAAAqwb,EAAAt1B,eAAA,CACA10a,KAAA0ha,OACA1ha,OAAA;AACAgqc,EAAAzjb,SACAokb,IAAApkb,OAAA6xI,GAAA4xS,EAAAzjb,OAAA6xI,EAAAp4J,KAAA0ha,MAAAz0Y,QAEA+8a,EAAA73a,OACAw4a,IAAAx4a,KAAA,CAAArxB,EAAAma,IAAA+ub,EAAA73a,KAAArxB,EAAAma,EAAAjb,KAAA0ha,MAAAz0Y,QAEAjtB,KAAAgC,QAAAmP,SACAw5b,EAAAx5b,UAEAnR,KAAA2qc,aACA,CACA,GAAApiB,GACA,MAAAvmb,QAAgBA,EAAAy4J,OAAiBz6J;AACjC,IAAAgC,EAAAmjB,QAEA,YADAnlB,KAAA+N,MAAA/N,KAAAshB,OAAA;AAGA,MAAA0ob,EAAAhoc,EAAA6oa,OACAkgC,EAAA1pC,EAAAkjB,OAAAylB,EAAA1lB,MACAiM,EAAAwa,EAAA1sb,KACA8ra,EAAAnqb,KAAAgrc,uBACAd,SAAgBA,EAAAG,cAAyBN,GAAAC,EAAAzZ;AACzC,IAAAxib,EAAAuT;AACAm5I,EAAA6pR,KAAAymB,EAAAvyV,OACAx4G,KAAAuxW,gBACAxjW,EAAA/N,KAAAk9P,SACA57O,EAAAthB,KAAAirc,SAAA9gB,EAAAoG,EAAA2Z,EAAAG,GAAA,KAEA/ob,EAAAthB,KAAAo9P,UACArvP,EAAA/N,KAAAkrc,SAAA/gB,EAAA4gB,EAAAb,EAAAG,GAAA,IAEArqc,KAAA+N,MAAAhL,KAAA8b,IAAA9Q,EAAA/L,EAAAk7P,UAAAl9P,KAAAk9P,UACAl9P,KAAAshB,OAAAve,KAAA8b,IAAAyC,EAAAtf,EAAAo7P,WAAAp9P,KAAAo9P,UACA,CACA,QAAA6tM,CAAA9gB,EAAAoG,EAAA2Z,EAAAG,GACA,MAAA5vS,IAAgBA,EAAAyiG,WAAAl7P,SAA4B6oa,QAAA9pZ,QAAUA,KAAiB/gB,KACvEmrc,EAAAnrc,KAAAwqc,eAAA,GACAK,EAAA7qc,KAAA6qc,WAAA,CACA,GAEArmB,EAAA6lB,EAAAtpb;AACA,IAAAqqb,EAAAjhB;AACA1vR,EAAA88P,UAAA,OACA98P,EAAAwzR,aAAA;AACA,IAAA7pL,GAAA,EACAv2P,GAAA22a;AAkBA,OAjBAxkb,KAAA2qc,YAAAnwb,QAAA,CAAAi7Z,EAAAn1a,KACA,MAAA+qc,EAAAnB,EAAA3Z,EAAA,EAAA91R,EAAA6wS,YAAA71B,EAAApya,MAAA0K,OACA,IAAAzN,GAAAuqc,IAAAtqc,OAAA,GAAA8qc,EAAA,EAAAtqb,EAAAm8O,KACAkuM,GAAA5mB,EACAqmB,IAAAtqc,QAAAD,EAAA,UACAuN,GAAA22a,EACApgL,KAEA+mM,EAAA7qc,GAAA,CACAsN,KAAA,EACAC,MACAu2P,MACAr2P,MAAAs9b,EACA/pb,OAAA+ob,GAEAQ,IAAAtqc,OAAA,IAAA8qc,EAAAtqb,IAEAqqb,CACA,CACA,QAAAF,CAAA/gB,EAAA4gB,EAAAb,EAAAqB,GACA,MAAA9wS,IAAgBA,EAAA2iG,YAAAp7P,SAA6B6oa,QAAA9pZ,QAAUA,KAAiB/gB,KACxEmrc,EAAAnrc,KAAAwqc,eAAA,GACAI,EAAA5qc,KAAA4qc,YAAA,GACAY,EAAApuM,EAAA+sL;AACA,IAAAr2B,EAAA/yY,EACA0qb,EAAA,EACAC,EAAA,EACA99b,EAAA,EACA8jQ,EAAA;AA4BA,OA3BA1xQ,KAAA2qc,YAAAnwb,QAAA,CAAAi7Z,EAAAn1a,KACA,MAAA+qc,UAAoBA,EAAAhB,cAqRpB,SAAAH,EAAAa,EAAAtwS,EAAAg7Q,EAAA81B,GACA,MAAAF,EAOA,SAAA51B,EAAAy0B,EAAAa,EAAAtwS,GACA,IAAAkxS,EAAAl2B,EAAApya;AAIA,OAHAsoc,GAAA,iBAAAA,IACAA,IAAAjtb,OAAA,CAAA5d,EAAAma,IAAAna,EAAAP,OAAA0a,EAAA1a,OAAAO,EAAAma,IAEAivb,EAAAa,EAAA1sb,KAAA,EAAAo8I,EAAA6wS,YAAAK,GAAA59b,KACA,CANA,CAPA0na,EAAAy0B,EAAAa,EAAAtwS,GACA4vS,EAaA,SAAAkB,EAAA91B,EAAAm2B,GACA,IAAAvB,EAAAkB;AAIA,MAHA,iBAAA91B,EAAApya,OACAgnc,EAAAwB,GAAAp2B,EAAAm2B,IAEAvB,CACA,CANA,CAbAkB,EAAA91B,EAAAs1B,EAAAvmB;AACA,OACA6mB,YACAhB,aAEA,CAPA,CArR8CH,EAAAa,EAAAtwS,EAAAg7Q,EAAA81B;AAC9Cjrc,EAAA,GAAAorc,EAAArB,EAAA,EAAAtpb,EAAAyqb,IACA13C,GAAA23C,EAAA1qb,EACA6pb,EAAAhjc,KAAA,CACAmG,MAAA09b,EACAnqb,OAAAoqb,IAEA99b,GAAA69b,EAAA1qb,EACA2wP,IACA+5L,EAAAC,EAAA,GAEAP,EAAA7qc,GAAA,CACAsN,OACAC,IAAA69b,EACAh6L,MACA3jQ,MAAAs9b,EACA/pb,OAAA+ob,GAEAoB,EAAA1oc,KAAA+b,IAAA2sb,EAAAJ,GACAK,GAAArB,EAAAtpb,IAEA+yY,GAAA23C,EACAb,EAAAhjc,KAAA,CACAmG,MAAA09b,EACAnqb,OAAAoqb,IAEA53C,CACA,CACA,cAAAg4C,GACA,IAAA9rc,KAAAgC,QAAAmjB,QACA;AAEA,MAAAgla,EAAAnqb,KAAAgrc,uBACgBR,eAAAW,EAAAnpc,SAAA0ib,MAAsCA,EAAA7Z,QAAA9pZ,QAAkBA,GAAWd,QAAYjgB,KAC/F+rc,EAAA1qC,EAAA2qC,cAAA/rb,EAAAjgB,KAAA4N,KAAA5N,KAAA+N;AACA,GAAA/N,KAAAuxW,eAAA,CACA,IAAAntG,EAAA,EACAx2P,EAAAyzZ,EAAA+uB,eAAA1L,EAAA1kb,KAAA4N,KAAAmT,EAAA/gB,KAAAgO,MAAAhO,KAAA6qc,WAAAzmM;AACA,UAAA6nM,KAAAd,EACA/mM,IAAA6nM,EAAA7nM,MACAA,EAAA6nM,EAAA7nM,IACAx2P,EAAAyzZ,EAAA+uB,eAAA1L,EAAA1kb,KAAA4N,KAAAmT,EAAA/gB,KAAAgO,MAAAhO,KAAA6qc,WAAAzmM,KAEA6nM,EAAAp+b,KAAA7N,KAAA6N,IAAAs8a,EAAAppa,EACAkrb,EAAAr+b,KAAAm+b,EAAAG,WAAAH,EAAA/kc,EAAA4G,GAAAq+b,EAAAl+b,OACAH,GAAAq+b,EAAAl+b,MAAAgT,CAEA,KAAU,CACV,IAAA2wP,EAAA,EACA7jQ,EAAAwzZ,EAAA+uB,eAAA1L,EAAA1kb,KAAA6N,IAAAs8a,EAAAppa,EAAA/gB,KAAA8N,OAAA9N,KAAA4qc,YAAAl5L,GAAApwP;AACA,UAAA2qb,KAAAd,EACAc,EAAAv6L,UACAA,EAAAu6L,EAAAv6L,IACA7jQ,EAAAwzZ,EAAA+uB,eAAA1L,EAAA1kb,KAAA6N,IAAAs8a,EAAAppa,EAAA/gB,KAAA8N,OAAA9N,KAAA4qc,YAAAl5L,GAAApwP,SAEA2qb,EAAAp+b,MACAo+b,EAAAr+b,MAAA5N,KAAA4N,KAAAmT,EACAkrb,EAAAr+b,KAAAm+b,EAAAG,WAAAH,EAAA/kc,EAAAilc,EAAAr+b,MAAAq+b,EAAAl+b,OACAF,GAAAo+b,EAAA3qb,OAAAP,CAEA,CACA,CACA,YAAAwwV,GACA,cAAAvxW,KAAAgC,QAAA4pB,UAAA,WAAA5rB,KAAAgC,QAAA4pB,QACA,CACA,IAAAm2Y,GACA,GAAA/ha,KAAAgC,QAAAmjB,QAAA,CACA,MAAAs1I,EAAAz6J,KAAAy6J;AACA4mQ,EAAAyuB,SAAAr1R,EAAAz6J,MACAA,KAAAmsc,QACA9qC,EAAA2uB,WAAAv1R,EACA,CACA,CACA,KAAA0xS,GACA,MAAgBnqc,QAAAi3C,EAAA2xZ,cAAAC,aAAApwS,OAAkDz6J,MAClE0kb,MAAgBA,EAAA7Z,OAAAm/B,GAA6B/wZ,EAC7CmzZ,EAAA/qC,EAAA72W,SAAAllD,MACAymc,EAAA1qC,EAAA2qC,cAAA/yZ,EAAAh5B,IAAAjgB,KAAA4N,KAAA5N,KAAA+N,OACAg9b,EAAA1pC,EAAAkjB,OAAAylB,EAAA1lB,OACAvja,QAAgBA,GAAWipb,EAC3BzZ,EAAAwa,EAAA1sb,KACAgub,EAAA9b,EAAA;AACA,IAAAj/Q;AACAtxK,KAAAiwb,YACAx1R,EAAA88P,UAAAw0C,EAAAx0C,UAAA,QACA98P,EAAAwzR,aAAA,SACAxzR,EAAA66Q,UAAA,GACA76Q,EAAA6pR,KAAAymB,EAAAvyV;AACA,MAAA0xV,SAAgBA,EAAAD,YAAAI,cAAqCN,GAAAC,EAAAzZ,GAqDrDh/E,EAAAvxW,KAAAuxW,eACA44E,EAAAnqb,KAAAgrc;AAEA15R,EADAigM,EACA,CACAvqW,EAAAq6Z,EAAA+uB,eAAA1L,EAAA1kb,KAAA4N,KAAAmT,EAAA/gB,KAAAgO,MAAA68b,EAAA,IACAr5b,EAAAxR,KAAA6N,IAAAkT,EAAAopa,EACAtua,KAAA,GAGA,CACA7U,EAAAhH,KAAA4N,KAAAmT,EACAvP,EAAA6vZ,EAAA+uB,eAAA1L,EAAA1kb,KAAA6N,IAAAs8a,EAAAppa,EAAA/gB,KAAA8N,OAAA88b,EAAA,GAAAtpb,QACAzF,KAAA,GAGAwlZ,EAAAirC,sBAAAtsc,KAAAy6J,IAAAxhH,EAAAszZ;AACA,MAAA/nB,EAAA6lB,EAAAtpb;AACA/gB,KAAA2qc,YAAAnwb,QAAA,CAAAi7Z,EAAAn1a,KACAm6J,EAAA+6Q,YAAAC,EAAAV,UACAt6Q,EAAAq6Q,UAAAW,EAAAV;AACA,MAAAy3B,EAAA/xS,EAAA6wS,YAAA71B,EAAApya,MAAA0K,MACAwpZ,EAAAw0C,EAAAx0C,UAAAke,EAAAle,YAAAke,EAAAle,UAAAyyC,EAAAzyC,YACAxpZ,EAAAm8b,EAAAmC,EAAAG;AACA,IAAAxlc,EAAAsqK,EAAAtqK,EACAwK,EAAA8/J,EAAA9/J;AAiBA,GAhBAu6b,EAAAU,SAAAzsc,KAAA+N,OACAwjW,EACAjxW,EAAA,GAAA0G,EAAA+G,EAAAgT,EAAA/gB,KAAAgO,QACAwD,EAAA8/J,EAAA9/J,GAAAgza,EACAlzQ,EAAAz1J,OACA7U,EAAAsqK,EAAAtqK,EAAAq6Z,EAAA+uB,eAAA1L,EAAA1kb,KAAA4N,KAAAmT,EAAA/gB,KAAAgO,MAAA68b,EAAAv5R,EAAAz1J,QAEcvb,EAAA,GAAAkR,EAAAgza,EAAAxkb,KAAA8N,SACd9G,EAAAsqK,EAAAtqK,IAAA4jc,EAAAt5R,EAAAz1J,MAAA9N,MAAAgT,EACAuwJ,EAAAz1J,OACArK,EAAA8/J,EAAA9/J,EAAA6vZ,EAAA+uB,eAAA1L,EAAA1kb,KAAA6N,IAAAs8a,EAAAppa,EAAA/gB,KAAA8N,OAAA88b,EAAAt5R,EAAAz1J,MAAAyF,SAvFA,SAAAta,EAAAwK,EAAAika,GACA,GAAAx6V,MAAAivX,OAAA,GAAAjvX,MAAAgvX,MAAA,EACA;AAEAxvS,EAAAp4C;AACA,MAAAizT,EAAAjU,EAAA4G,eAAAwN,EAAAH,UAAA;AAQA,GAPA76Q,EAAAq6Q,UAAAzT,EAAA4G,eAAAwN,EAAAX,UAAAs3B,GACA3xS,EAAA2lS,QAAA/+B,EAAA4G,eAAAwN,EAAA2qB,QAAA,QACA3lS,EAAAy6Q,eAAA7T,EAAA4G,eAAAwN,EAAAP,eAAA,GACAz6Q,EAAA26Q,SAAA/T,EAAA4G,eAAAwN,EAAAL,SAAA,SACA36Q,EAAA66Q,YACA76Q,EAAA+6Q,YAAAnU,EAAA4G,eAAAwN,EAAAD,YAAA42B,GACA3xS,EAAA40R,YAAAhuB,EAAA4G,eAAAwN,EAAAT,SAAA,KACAg1B,EAAAG,cAAA,CACA,MAAAuC,EAAA,CACArnc,OAAA4kc,EAAAlnc,KAAA4pc,MAAA,EACAh4B,WAAAc,EAAAd,WACAP,SAAAqB,EAAArB,SACAmB,YAAAD,GAEA4C,EAAA6zB,EAAAa,MAAA5lc,EAAAkjc,EAAA,GACA/xB,EAAA3ma,EAAA66b;AACAhrC,EAAAwrC,gBAAApyS,EAAAiyS,EAAAx0B,EAAAC,EAAA6xB,EAAAI,iBAAAF,EACA,KAAc,CACd,MAAA4C,EAAAt7b,EAAAzO,KAAA+b,KAAAyxa,EAAA0Z,GAAA,KACA8C,EAAAhB,EAAAG,WAAAllc,EAAAkjc,GACAr1B,EAAAxT,EAAA6iC,cAAAzuB,EAAAZ;AACAp6Q,EAAA60R,YACAvna,OAAAi/B,OAAA6tX,GAAApxZ,KAAAnS,GAAA,IAAAA,GACA+vZ,EAAAqjC,mBAAAjqS,EAAA,CACAzzJ,EAAA+lc,EACAv7b,EAAAs7b,EACAj4b,EAAAq1b,EACAnpc,EAAAkpc,EACA5kc,OAAAwva,IAGAp6Q,EAAAp5I,KAAA0rb,EAAAD,EAAA5C,EAAAD,GAEAxvS,EAAAitQ,OACA,IAAA4N,GACA76Q,EAAAg1R,QAEA,CACAh1R,EAAA8M,SACA,CA7CA,CAyFAwkS,EAAA/kc,KACAwK,EAAAika,GACAzua,EAAAq6Z,EAAA2rC,OAAAz1C,EAAAvwZ,EAAAkjc,EAAAmC,EAAA96F,EAAAvqW,EAAA+G,EAAA/N,KAAAgO,MAAAirC,EAAAh5B,KA7CA,SAAAjZ,EAAAwK,EAAAika,GACApU,EAAAj4B,WAAA3uO,EAAAg7Q,EAAApya,KAAA2D,EAAAwK,EAAA64b,EAAA,EAAAU,EAAA,CACAkC,cAAAx3B,EAAA39E,OACAy/D,UAAAw0C,EAAAx0C,UAAAke,EAAAle,YAEA,CALA,CA8CAw0C,EAAA/kc,KAAAwK,EAAAika,GACAlkE,EACAjgM,EAAAtqK,GAAA+G,EAAAgT;KACc,oBAAA00Z,EAAApya,KAAA,CACd,MAAAuoc,EAAAb,EAAAvmB;AACAlzQ,EAAA9/J,GAAAq6b,GAAAp2B,EAAAm2B,GAAA7qb,CACA,MACAuwJ,EAAA9/J,GAAAgza,IAGAnjB,EAAA6rC,qBAAAltc,KAAAy6J,IAAAxhH,EAAAszZ,cACA,CACA,SAAAtc,GACA,MAAAh3Y,EAAAj5C,KAAAgC,QACAiob,EAAAhxY,EAAAskH,MACA4vS,EAAA9rC,EAAAkjB,OAAA0F,EAAA3F,MACA8oB,EAAA/rC,EAAAke,UAAA0K,EAAAlpa;AACA,IAAAkpa,EAAA9ka,QACA;AAEA,MAAA4mb,EAAA1qC,EAAA2qC,cAAA/yZ,EAAAh5B,IAAAjgB,KAAA4N,KAAA5N,KAAA+N,OACA0sJ,EAAAz6J,KAAAy6J,IACA7uI,EAAAq+Z,EAAAr+Z,SACAygb,EAAAc,EAAA9ub,KAAA,EACAgvb,EAAAD,EAAAv/b,IAAAw+b;AACA,IAAA76b,EACA5D,EAAA5N,KAAA4N,KACAsvP,EAAAl9P,KAAA+N;AACA,GAAA/N,KAAAuxW,eACAr0G,EAAAn6P,KAAA+b,OAAA9e,KAAA6qc,YACAr5b,EAAAxR,KAAA6N,IAAAw/b,EACAz/b,EAAAyzZ,EAAA+uB,eAAAn3Y,EAAAyrY,MAAA92a,EAAA5N,KAAAgO,MAAAkvP;IACU,CACV,MAAAE,EAAAp9P,KAAA4qc,YAAAlsb,OAAA,CAAAC,EAAAN,IAAAtb,KAAA+b,IAAAH,EAAAN,EAAAiD,QAAA;AACA9P,EAAA67b,EAAAhsC,EAAA+uB,eAAAn3Y,EAAAyrY,MAAA1kb,KAAA6N,IAAA7N,KAAA8N,OAAAsvP,EAAAnkN,EAAA4xX,OAAA9pZ,QAAA/gB,KAAAgrc,sBACA,CACA,MAAAhkc,EAAAq6Z,EAAA+uB,eAAAxka,EAAAhe,IAAAsvP;AACAziG,EAAA88P,UAAAw0C,EAAAx0C,UAAA8J,EAAAsjB,mBAAA/4Z,IACA6uI,EAAAwzR,aAAA,SACAxzR,EAAA+6Q,YAAAyU,EAAA3kb,MACAm1J,EAAAq6Q,UAAAmV,EAAA3kb,MACAm1J,EAAA6pR,KAAA6oB,EAAA30V,OACA6oT,EAAAj4B,WAAA3uO,EAAAwvR,EAAA5mb,KAAA2D,EAAAwK,EAAA27b,EACA,CACA,mBAAAnC,GACA,MAAA/gB,EAAAjqb,KAAAgC,QAAAu7J,MACA4vS,EAAA9rC,EAAAkjB,OAAA0F,EAAA3F,MACA8oB,EAAA/rC,EAAAke,UAAA0K,EAAAlpa;AACA,OAAAkpa,EAAA9ka,QAAAgob,EAAA3oB,WAAA4oB,EAAA9rb,OAAA,CACA,CACA,gBAAAgsb,CAAAtmc,EAAAwK,GACA,IAAAlR,EAAAitc,EAAAC;AACA,GAAAnsC,EAAAs+B,WAAA34b,EAAAhH,KAAA4N,KAAA5N,KAAAgO,QAAAqzZ,EAAAs+B,WAAAnub,EAAAxR,KAAA6N,IAAA7N,KAAA8N,QAEA,IADA0/b,EAAAxtc,KAAAwqc,eACAlqc,EAAA,EAAuBA,EAAAktc,EAAAjtc,SAAeD,EAEtC,GADAitc,EAAAC,EAAAltc,GACA+ga,EAAAs+B,WAAA34b,EAAAumc,EAAA3/b,KAAA2/b,EAAA3/b,KAAA2/b,EAAAx/b,QAAAszZ,EAAAs+B,WAAAnub,EAAA+7b,EAAA1/b,IAAA0/b,EAAA1/b,IAAA0/b,EAAAjsb,QACA,OAAAthB,KAAA2qc,YAAArqc;AAIA,WACA,CACA,WAAAmtc,CAAAptc,GACA,MAAA44C,EAAAj5C,KAAAgC;AACA,IAyDA,SAAA8B,EAAAm1C,GACA,sBAAAn1C,GAAA,aAAAA,IAAAm1C,EAAA4jZ,UAAA5jZ,EAAAy0Z,aAGAz0Z,EAAAyoC,SAAA,UAAA59E,GAAA,YAAAA,EAIA,CARA,CAzDAzD,EAAAyD,KAAAm1C,GACA;AAEA,MAAA00Z,EAAA3tc,KAAAstc,iBAAAjtc,EAAA2G,EAAA3G,EAAAmR;AACA,iBAAAnR,EAAAyD,MAAA,aAAAzD,EAAAyD,KAAA,CACA,MAAA4qE,EAAA1uE,KAAAyqc,aACAmD,GA3XA3yb,EA2XA0yb,EA3XA,QAAA7sc,EA2XA4tE,IA3XA,OAAAzzD,GAAAna,EAAA2ja,eAAAxpZ,EAAAwpZ,cAAA3ja,EAAAiI,QAAAkS,EAAAlS;AA4XA2lE,IAAAk/X,GACAvsC,EAAA1nZ,SAAAs/B,EAAAy0Z,QAAA,CACArtc,EACAquE,EACA1uE,MACAA,MAEAA,KAAAyqc,aAAAkD,EACAA,IAAAC,GACAvsC,EAAA1nZ,SAAAs/B,EAAA4jZ,QAAA,CACAx8b,EACAstc,EACA3tc,MACAA,KAEA,MAAU2tc,GACVtsC,EAAA1nZ,SAAAs/B,EAAAyoC,QAAA,CACArhF,EACAstc,EACA3tc,MACAA;AAhZA,IAAAc,EAAAma,CAkZA,EAwBA,SAAA4wb,GAAAp2B,EAAAm2B,GAEA,OAAAA,GADAn2B,EAAApya,KAAAoya,EAAApya,KAAA9C,OAAA,EAEA,CAUA,IAAAstc,GAAA,CACA7uZ,GAAA,SACAvuC,SAAA65b,GACA,KAAAprb,CAAAwiZ,EAAA37N,EAAA/jM,GACA,MAAAyya,EAAA/S,EAAA+S,OAAA,IAAA61B,GAAA,CACA7vS,IAAAinQ,EAAAjnQ,IACAz4J,UACA0/Z;AAEAwd,GAAA9yC,UAAAs1B,EAAA+S,EAAAzya,GACAk9a,GAAAC,OAAAzd,EAAA+S,EACA,EACA,IAAAvqa,CAAAw3Z,GACAwd,GAAAG,UAAA3d,IAAA+S,eACA/S,EAAA+S,MACA,EACA,YAAA6R,CAAA5kB,EAAA37N,EAAA/jM,GACA,MAAAyya,EAAA/S,EAAA+S;AACAyK,GAAA9yC,UAAAs1B,EAAA+S,EAAAzya,GACAyya,EAAAzya,SACA,EACA,WAAAymb,CAAA/mB,GACA,MAAA+S,EAAA/S,EAAA+S;AACAA,EAAAq2B,cACAr2B,EAAAq3B,gBACA,EACA,UAAAgC,CAAApsC,EAAAhpY,GACAA,EAAAwja,QACAx6B,EAAA+S,OAAAg5B,YAAA/0a,EAAAhvB,MAEA,EACA8gD,SAAA,CACArlC,WACAyG,SAAA,MACA84Z,MAAA,SACA9F,YACAzta,WACA7G,OAAA,IACA,OAAAo3E,CAAArhF,EAAAo1a,EAAAhB,GACA,MAAA1ra,EAAA0sa,EAAAhR,aACA3sJ,EAAA28J,EAAA/S;AACA5pJ,EAAAq+J,iBAAApta,IACA+uQ,EAAA7vQ,KAAAc,GACA0sa,EAAA39E,YAEAhgF,EAAA9xQ,KAAA+C,GACA0sa,EAAA39E,UAEA,EACA+kG,QAAA,KACA6Q,QAAA,KACA7iC,OAAA,CACAvla,MAAAm1J,KAAAinQ,MAAA1/Z,QAAAsD,MACA4kc,SAAA,GACAnpb,QAAA,GACA,cAAA2zZ,CAAAhT,GACA,MAAAqH,EAAArH,EAAAz0Y,KAAA87Y,UACwB8B,QAAAs/B,cAAUA,EAAAx1B,aAAApd,YAAAjyZ,QAAAsva,kBAAAC,iBAAsFnT,EAAA+S,OAAAzya;AACxH,OAAA0/Z,EAAA0C,yBAAAxgZ,IAAA+1R,IACA,MAAAhsS,EAAAgsS,EAAA4rH,WAAAiH,SAAA29B,EAAA,OAAA14a,GACA8jZ,EAAAlU,EAAAke,UAAA5xa,EAAA4na;AACA,OACAlya,KAAA0la,EAAApvH,EAAA5wS,OAAAy+J,MACAstQ,UAAAnna,EAAAo/T,gBACAgoG,UAAAzva,EACAwyV,QAAAn+C,EAAAviO,QACAgpX,QAAAzyb,EAAA0yb,eACArrB,SAAArna,EAAAsna,WACAC,eAAAvna,EAAAwna,iBACAC,SAAAzna,EAAA0na,gBACAC,WAAAC,EAAAxna,MAAAwna,EAAAj0Z,QAAA,EACAk0Z,YAAA7na,EAAAs/T,YACA0nG,cAAAhna,EAAAgna,WACAP,SAAAzma,EAAAyma,SACA7c,aAAA5pZ,EAAA4pZ,UACAsd,aAAAD,IAAAC,GAAAlna,EAAAkna,cACApQ,aAAA9qH,EAAA5wS,QAEiB/I,KACjB,GAEAu9J,MAAA,CACAj4J,MAAAm1J,KAAAinQ,MAAA1/Z,QAAAsD,MACA6f,WACAyG,SAAA,SACAvoB,KAAA,KAGA8tb,YAAA,CACA5c,YAAAnsa,MAAAwoC,WAAA,MACAi6X,OAAA,CACA0J,YAAAnsa,IAAA,CACA,iBACA,SACA,QACArD,SAAAqD;AAKA,MAAA2lc,WAAAppb,GACA,WAAA22D,CAAA9jD,GACAwrI,QACAhjK,KAAA0ha,MAAAlqY,EAAAkqY,MACA1ha,KAAAgC,QAAAw1B,EAAAx1B,QACAhC,KAAAy6J,IAAAjjI,EAAAijI,IACAz6J,KAAAguc,cAAAv8a,EACAzxB,KAAA6N,SAAA4jB,EACAzxB,KAAA8N,YAAA2jB,EACAzxB,KAAA4N,UAAA6jB,EACAzxB,KAAAgO,WAAAyjB,EACAzxB,KAAA+N,WAAA0jB,EACAzxB,KAAAshB,YAAAmQ,EACAzxB,KAAA4rB,cAAA6F,EACAzxB,KAAAsK,YAAAmnB,EACAzxB,KAAA4+a,cAAAntZ,CACA,CACA,MAAA9gB,CAAAusP,EAAAE,GACA,MAAAnkN,EAAAj5C,KAAAgC;AAGA,GAFAhC,KAAA4N,KAAA,EACA5N,KAAA6N,IAAA,GACAorC,EAAA9zB,QAEA,YADAnlB,KAAA+N,MAAA/N,KAAAshB,OAAAthB,KAAAgO,MAAAhO,KAAA8N,OAAA;AAGA9N,KAAA+N,MAAA/N,KAAAgO,MAAAkvP,EACAl9P,KAAAshB,OAAAthB,KAAA8N,OAAAsvP;AACA,MAAA2wL,EAAA1sB,EAAAlha,QAAA84C,EAAA51C,MAAA41C,EAAA51C,KAAA9C,OAAA;AACAP,KAAAguc,SAAA3sC,EAAAke,UAAAtmY,EAAAl4B;AACA,MAAAktb,EAAAlgB,EAAA1sB,EAAAkjB,OAAAtrY,EAAAqrY,MAAAE,WAAAxkb,KAAAguc,SAAA1sb;AACAthB,KAAAuxW,eACAvxW,KAAAshB,OAAA2sb,EAEAjuc,KAAA+N,MAAAkgc,CAEA,CACA,YAAA18F,GACA,MAAAj3T,EAAAt6C,KAAAgC,QAAA4pB;AACA,cAAA0uB,GAAA,WAAAA,CACA,CACA,SAAA4zZ,CAAAlwb,GACA,MAAAnQ,IAAgBA,EAAAD,OAAAE,SAAAE,QAAAhM,WAAyChC,KACzD0kb,EAAA1ib,EAAA0ib;AACA,IACAxnL,EAAAgzL,EAAAC,EADA/b,EAAA;AAkBA,OAhBAp0a,KAAAuxW,gBACA2+E,EAAA7uB,EAAA+uB,eAAA1L,EAAA92a,EAAAI,GACAmib,EAAAtib,EAAAmQ,EACAk/O,EAAAlvP,EAAAJ,IAEA,SAAA5L,EAAA4pB,UACAska,EAAAtib,EAAAoQ,EACAmya,EAAA9uB,EAAA+uB,eAAA1L,EAAA52a,EAAAD,GACAuma,GAAA,GAAA/S,EAAA7rP,KAEA06Q,EAAAlib,EAAAgQ,EACAmya,EAAA9uB,EAAA+uB,eAAA1L,EAAA72a,EAAAC,GACAsma,EAAA,GAAA/S,EAAA7rP,IAEA0nF,EAAApvP,EAAAD,GAEA,CACAqib,SACAC,SACAjzL,WACAk3K,WAEA,CACA,IAAArS,GACA,MAAAtnQ,EAAAz6J,KAAAy6J,IACAxhH,EAAAj5C,KAAAgC;AACA,IAAAi3C,EAAA9zB,QACA;AAEA,MAAAgpb,EAAA9sC,EAAAkjB,OAAAtrY,EAAAqrY,MAEAtma,EADAmwb,EAAA3pB,WACA,EAAAxkb,KAAAguc,SAAAngc,KACAqib,OAAgBA,EAAAC,SAAAjzL,WAAAk3K,YAAyCp0a,KAAAkuc,UAAAlwb;AACzDqjZ,EAAAj4B,WAAA3uO,EAAAxhH,EAAA51C,KAAA,IAAA8qc,EAAA,CACA7oc,MAAA2zC,EAAA3zC,MACA43P,WACAk3K,WACA7c,UAAA8J,EAAAsjB,mBAAA1rY,EAAAyrY,OACAuJ,aAAA,SACAr7R,YAAA,CACAs9R,EACAC,IAGA,EAYA,IAAAie,GAAA,CACApvZ,GAAA,QACAvuC,SAAAs9b,GACA,KAAA7ub,CAAAwiZ,EAAA37N,EAAA/jM,IAbA,SAAA0/Z,EAAAuoB,GACA,MAAA1sR,EAAA,IAAAwwS,GAAA,CACAtzS,IAAAinQ,EAAAjnQ,IACAz4J,QAAAiob,EACAvoB;AAEAwd,GAAA9yC,UAAAs1B,EAAAnkQ,EAAA0sR,GACA/K,GAAAC,OAAAzd,EAAAnkQ,GACAmkQ,EAAA2sC,WAAA9wS,CACA,CATA,CAcAmkQ,EAAA1/Z,EACA,EACA,IAAAkI,CAAAw3Z,GACA,MAAA2sC,EAAA3sC,EAAA2sC;AACAnvB,GAAAG,UAAA3d,EAAA2sC,UACA3sC,EAAA2sC,UACA,EACA,YAAA/nB,CAAA5kB,EAAA37N,EAAA/jM,GACA,MAAAu7J,EAAAmkQ,EAAA2sC;AACAnvB,GAAA9yC,UAAAs1B,EAAAnkQ,EAAAv7J,GACAu7J,EAAAv7J,SACA,EACAwoD,SAAA,CACAk6X,MAAA,SACAv/Z,WACAm/Z,KAAA,CACAh6a,OAAA,QAEAs0a,YACA79Z,QAAA,GACA6K,SAAA,MACAvoB,KAAA,GACAiH,OAAA,KAEAumb,cAAA,CACAvrb,MAAA,SAEA6rb,YAAA,CACA5c,eACAC;AAIA,MAAA5wZ,GAAA,IAAAuxF;AACA,IAAAm5V,GAAA,CACAtvZ,GAAA,WACA,KAAA9/B,CAAAwiZ,EAAA37N,EAAA/jM,GACA,MAAAu7J,EAAA,IAAAwwS,GAAA,CACAtzS,IAAAinQ,EAAAjnQ,IACAz4J,UACA0/Z;AAEAwd,GAAA9yC,UAAAs1B,EAAAnkQ,EAAAv7J,GACAk9a,GAAAC,OAAAzd,EAAAnkQ,GACA35I,GAAAiJ,IAAA60Y,EAAAnkQ,EACA,EACA,IAAArzJ,CAAAw3Z,GACAwd,GAAAG,UAAA3d,EAAA99Y,GAAA0I,IAAAo1Y,IACA99Y,GAAA0hE,OAAAo8U,EACA,EACA,YAAA4kB,CAAA5kB,EAAA37N,EAAA/jM,GACA,MAAAu7J,EAAA35I,GAAA0I,IAAAo1Y;AACAwd,GAAA9yC,UAAAs1B,EAAAnkQ,EAAAv7J,GACAu7J,EAAAv7J,SACA,EACAwoD,SAAA,CACAk6X,MAAA,SACAv/Z,WACAm/Z,KAAA,CACAh6a,OAAA,UAEAs0a,YACA79Z,QAAA,EACA6K,SAAA,MACAvoB,KAAA,GACAiH,OAAA,MAEAumb,cAAA,CACAvrb,MAAA,SAEA6rb,YAAA,CACA5c,eACAC;AAIA,MAAA+5B,GAAA,CACA,OAAAC,CAAA1yR,GACA,IAAAA,EAAAv7K,OACA;AAEA,IAAAD,EAAA02B,EACAy3a,EAAA,IAAA1qb,IACAvS,EAAA,EACA2uI,EAAA;AACA,IAAA7/I,EAAA,EAAA02B,EAAA8kJ,EAAAv7K,OAAuCD,EAAA02B,IAAS12B,EAAA,CAChD,MAAAoB,EAAAo6K,EAAAx7K,GAAAoiB;AACA,GAAAhhB,KAAAunH,WAAA,CACA,MAAA3uE,EAAA54C,EAAAyhb;AACAsrB,EAAA72Z,IAAA0C,EAAAtzC,GACAwK,GAAA8oC,EAAA9oC,IACA2uI,CACA,CACA,CACA,WAAAA,GAAA,IAAAsuT,EAAApwb,MAMA,CACArX,EAJA,IACAync,GACA/vb,OAAA,CAAA5d,EAAAma,IAAAna,EAAAma,GAAAwzb,EAAApwb,KAGA7M,IAAA2uI,EAEA,EACA,OAAAq9R,CAAA1hQ,EAAA4yR,GACA,IAAA5yR,EAAAv7K,OACA;AAEA,IAGAD,EAAA02B,EAAA23a,EAHA3nc,EAAA0nc,EAAA1nc,EACAwK,EAAAk9b,EAAAl9b,EACAm6H,EAAArgI,OAAAi9G;AAEA,IAAAjoH,EAAA,EAAA02B,EAAA8kJ,EAAAv7K,OAAuCD,EAAA02B,IAAS12B,EAAA,CAChD,MAAAoB,EAAAo6K,EAAAx7K,GAAAoiB;AACA,GAAAhhB,KAAAunH,WAAA,CACA,MAAAp4G,EAAAnP,EAAAu7a,iBACAt9a,EAAA0ha,EAAAutC,sBAAAF,EAAA79b;AACAlR,EAAAgsI,IACAA,EAAAhsI,EACAgvc,EAAAjtc,EAEA,CACA,CACA,GAAAitc,EAAA,CACA,MAAArsS,EAAAqsS,EAAAxrB;AACAn8a,EAAAs7J,EAAAt7J,EACAwK,EAAA8wJ,EAAA9wJ,CACA,CACA,OACAxK,IACAwK,IAEA;AAEA,SAAAq9b,GAAAl/K,EAAAm/K,GAQA,OAPAA,IACAztC,EAAAlha,QAAA2uc,GACAj7b,MAAA5O,UAAA2C,KAAA+K,MAAAg9Q,EAAAm/K,GAEAn/K,EAAA/nR,KAAAknc,IAGAn/K,CACA,CACA,SAAAo/K,GAAA9wa,GACA,wBAAAA,gBAAA0S,SAAA1S,EAAAp0B,QAAA,SACAo0B,EAAAhmB,MAAA,MAEAgmB,CACA,CACA,SAAA+wa,GAAAttC,EAAAtpQ,GACA,MAAA11I,QAAYA,EAAA+hZ,eAAA17Z,SAAkCqvJ,EAC9CmtQ,EAAA7D,EAAAsH,eAAAvE,GAAAc,YACA/9P,MAAYA,EAAA7kK,SAAiB4ia,EAAA2G,iBAAAnja;AAC7B,OACA24Z,QACAl6P,QACAmnL,OAAA42E,EAAA4F,UAAApia,GACAgmM,IAAA2yN,EAAAz0Y,KAAA87Y,SAAAtE,GAAAx3Y,KAAAlkB,GACAimS,eAAArsS,EACA89E,QAAA8kV,EAAAsC,aACA8E,UAAA5ja,EACA07Z,eACA/hZ,UAEA,CACA,SAAAusb,GAAAC,EAAAltc,GACA,MAAAy4J,EAAAy0S,EAAAxtC,MAAAjnQ,KACAltJ,KAAYA,EAAAyuT,SAAAz+J,SAAyB2xS,GACrChF,SAAYA,EAAAD,aAAwBjoc,EACpCmtc,EAAA9tC,EAAAkjB,OAAAvib,EAAAmtc,UACAhC,EAAA9rC,EAAAkjB,OAAAvib,EAAAmrc,WACAiC,EAAA/tC,EAAAkjB,OAAAvib,EAAAotc,YACAC,EAAA9xS,EAAAh9J,OACA+uc,EAAAtzI,EAAAz7T,OACAgvc,EAAAhic,EAAAhN,OACAwgB,EAAAsgZ,EAAAke,UAAAv9a,EAAA+e;AACA,IAAAO,EAAAP,EAAAO,OACAvT,EAAA,EACAyhc,EAAAjic,EAAAmR,OAAA,CAAAyhI,EAAAsvT,IAAAtvT,EAAAsvT,EAAAzyR,OAAAz8K,OAAAkvc,EAAAv8b,MAAA3S,OAAAkvc,EAAAxyR,MAAA18K,OAAA;AACAivc,GAAAN,EAAAQ,WAAAnvc,OAAA2uc,EAAAS,UAAApvc,OACA8uc,IACA/tb,GAAA+tb,EAAAlC,EAAA3oB,YAAA6qB,EAAA,GAAArtc,EAAA4tc,aAAA5tc,EAAA6tc,mBAEAL,IAEAlub,GAAAiub,GADAvtc,EAAA8tc,cAAA/sc,KAAA+b,IAAAmrb,EAAAkF,EAAA3qB,YAAA2qB,EAAA3qB,aACAgrB,EAAAD,GAAAJ,EAAA3qB,YAAAgrB,EAAA,GAAAxtc,EAAA+tc,aAEAT,IACAhub,GAAAtf,EAAAguc,gBAAAV,EAAAF,EAAA5qB,YAAA8qB,EAAA,GAAAttc,EAAAiuc;AAEA,IAAAC,EAAA;AACA,MAAAC,EAAA,SAAAt0b,GACA9N,EAAAhL,KAAA+b,IAAA/Q,EAAA0sJ,EAAA6wS,YAAAzvb,GAAA9N,MAAAmic,EACA;AAiBA,OAhBAz1S,EAAAp4C,OACAo4C,EAAA6pR,KAAA6oB,EAAA30V,OACA6oT,EAAA2e,KAAAkvB,EAAA3xS,MAAA4yS,GACA11S,EAAA6pR,KAAA6qB,EAAA32V,OACA6oT,EAAA2e,KAAAkvB,EAAAQ,WAAAj9b,OAAAy8b,EAAAS,WAAAQ,GACAD,EAAAluc,EAAA8tc,cAAA5F,EAAA,EAAAloc,EAAA+7a,WAAA,EACA1c,EAAA2e,KAAAzya,EAAAkic,IACApuC,EAAA2e,KAAAyvB,EAAAzyR,OAAAmzR,GACA9uC,EAAA2e,KAAAyvB,EAAAv8b,MAAAi9b,GACA9uC,EAAA2e,KAAAyvB,EAAAxyR,MAAAkzR,KAEAD,EAAA,EACAz1S,EAAA6pR,KAAA8qB,EAAA52V,OACA6oT,EAAA2e,KAAAkvB,EAAAlzI,OAAAm0I,GACA11S,EAAA8M,UACAx5J,GAAAgT,EAAAhT,MACA,CACAA,QACAuT,SAEA,CAoBA,SAAA8ub,GAAA1uC,EAAA1/Z,EAAAqc,EAAAgyb,GACA,MAAArpc,EAAYA,EAAA+G,SAAasQ,GACbtQ,MAAAuic,EAAAhkC,WAAA1+Z,KAAiCA,EAAAI,UAAmB0zZ;AAChE,IAAA6uC,EAAA;AAWA,MAVA,WAAAF,EACAE,EAAAvpc,IAAA4G,EAAAI,GAAA,iBACMhH,GAAA+G,EAAA,EACNwic,EAAA,OACMvpc,GAAAspc,EAAAvic,EAAA,IACNwic,EAAA,SAnBA,SAAAA,EAAA7uC,EAAA1/Z,EAAAqc,GACA,MAAArX,EAAYA,EAAA+G,SAAasQ,EACzBmyb,EAAAxuc,EAAAyuc,UAAAzuc,EAAA0uc;AACA,eAAAH,GAAAvpc,EAAA+G,EAAAyic,EAAA9uC,EAAA3zZ,OAGA,UAAAwic,GAAAvpc,EAAA+G,EAAAyic,EAAA,SAGA,CATA,CAqBAD,EAAA7uC,EAAA1/Z,EAAAqc,KACAkyb,EAAA,UAEAA,CACA,CACA,SAAAI,GAAAjvC,EAAA1/Z,EAAAqc,GACA,MAAAgyb,EAAAhyb,EAAAgyb,QAAAruc,EAAAquc,QApCA,SAAA3uC,EAAArjZ,GACA,MAAA7M,EAAYA,EAAA8P,UAAcjD;AAC1B,OAAA7M,EAAA8P,EAAA,EACA,MACM9P,EAAAkwZ,EAAApgZ,SAAA,EACN,SAEA,QACA,CARA,CAoCAogZ,EAAArjZ;AACA,OACAkyb,OAAAlyb,EAAAkyb,QAAAvuc,EAAAuuc,QAAAH,GAAA1uC,EAAA1/Z,EAAAqc,EAAAgyb,GACAA,SAEA,CAqBA,SAAAO,GAAA5uc,EAAAqc,EAAA6B,EAAAwhZ,GACA,MAAA+uC,UAAYA,EAAAC,eAAAG,gBAA2C7uc,GACvDuuc,OAAYA,EAAAF,UAAmBnwb,EAC/B4wb,EAAAL,EAAAC,GACArM,QAAYA,EAAAC,WAAAC,aAAAC,eAAiDnjC,EAAA6iC,cAAA2M;AAC7D,IAAA7pc,EAzBA,SAAAqX,EAAAkyb,GACA,IAAAvpc,EAAUA,EAAA+G,SAAasQ;AAMvB,MALA,UAAAkyb,EACAvpc,GAAA+G,EACM,WAAAwic,IACNvpc,GAAA+G,EAAA,GAEA/G,CACA,CARA,CAyBAqX,EAAAkyb;AACA,MAAA/+b,EAjBA,SAAA6M,EAAAgyb,EAAAS,GACA,IAAAt/b,EAAUA,EAAA8P,UAAcjD;AAQxB,MAPA,QAAAgyb,EACA7+b,GAAAs/b,EAEAt/b,GADM,WAAA6+b,EACN/ub,EAAAwvb,EAEAxvb,EAAA,EAEA9P,CACA,CAVA,CAiBA6M,EAAAgyb,EAAAS;AAYA,MAXA,WAAAT,EACA,SAAAE,EACAvpc,GAAA8pc,EACU,UAAAP,IACVvpc,GAAA8pc,GAEM,SAAAP,EACNvpc,GAAAjE,KAAA+b,IAAAulb,EAAAE,GAAAkM,EACM,UAAAF,IACNvpc,GAAAjE,KAAA+b,IAAAwlb,EAAAE,GAAAiM,GAEA,CACAzpc,EAAAq6Z,EAAAyoB,YAAA9ib,EAAA,EAAA06Z,EAAA3zZ,MAAAsQ,EAAAtQ,OACAyD,EAAA6vZ,EAAAyoB,YAAAt4a,EAAA,EAAAkwZ,EAAApgZ,OAAAjD,EAAAiD,QAEA,CACA,SAAAyvb,GAAA7B,EAAAxqB,EAAA1ib,GACA,MAAA+e,EAAAsgZ,EAAAke,UAAAv9a,EAAA+e;AACA,iBAAA2ja,EAAAwqB,EAAAloc,EAAAkoc,EAAAnhc,MAAA,YAAA22a,EAAAwqB,EAAAloc,EAAAkoc,EAAAnhc,MAAAgT,EAAA/S,MAAAkhc,EAAAloc,EAAA+Z,EAAAnT,IACA,CACA,SAAAojc,GAAAr3b,GACA,OAAAk1b,GAAA,GAAAE,GAAAp1b,GACA,CAQA,SAAAs3b,GAAAvrE,EAAA9sW,GACA,MAAA2iZ,EAAA3iZ,KAAA6nD,SAAA7nD,EAAA6nD,QAAAyuX,SAAAt2a,EAAA6nD,QAAAyuX,QAAAxpE;AACA,OAAA61C,EAAA71C,EAAA61C,YAAA71C,CACA,CACA,MAAAwrE,GAAA,CACAC,YAAA9vC,EAAAhkQ,KACA,KAAAE,CAAA6zS,GACA,GAAAA,EAAA7wc,OAAA,GACA,MAAA63J,EAAAg5S,EAAA,GACAvmC,EAAAzyQ,EAAAspQ,MAAAz0Y,KAAA49Y,OACAwmC,EAAAxmC,IAAAtqa,OAAA;AACA,GAAAP,WAAAgC,SAAA,YAAAhC,KAAAgC,QAAA6V,KACA,OAAAugJ,EAAA33E,QAAA+mF,OAAA;AACc,GAAApP,EAAAoP,MACd,OAAApP,EAAAoP;AACc,GAAA6pS,EAAA,GAAAj5S,EAAAu0Q,UAAA0kC,EACd,OAAAxmC,EAAAzyQ,EAAAu0Q,UAEA,CACA,QACA,EACA2kC,WAAAjwC,EAAAhkQ,KACAqyS,WAAAruC,EAAAhkQ,KACAk0S,YAAAlwC,EAAAhkQ,KACA,KAAAmK,CAAAgqS,GACA,GAAAxxc,WAAAgC,SAAA,YAAAhC,KAAAgC,QAAA6V,KACA,OAAA25b,EAAAhqS,MAAA,KAAAgqS,EAAAxiK,gBAAAwiK,EAAAxiK;AAEA,IAAAxnI,EAAAgqS,EAAA/wX,QAAA+mF,OAAA;AACAA,IACAA,GAAA;AAEA,MAAA7kK,EAAA6uc,EAAAxiK;AAIA,OAHAqyH,EAAAqQ,cAAA/ua,KACA6kK,GAAA7kK,GAEA6kK,CACA,EACA,UAAAiqS,CAAAD,GACA,MACAxvc,EADAwvc,EAAA9vC,MAAAsH,eAAAwoC,EAAA/sC,cACAc,WAAAiH,SAAAglC,EAAA7kC;AACA,OACA1/F,YAAAjrU,EAAAirU,YACAF,gBAAA/qU,EAAA+qU,gBACAwoG,YAAAvza,EAAAuza,YACAN,WAAAjza,EAAAiza,WACAE,iBAAAnza,EAAAmza,iBACAN,aAAA,EAEA,EACA,cAAA68B,GACA,OAAA1xc,KAAAgC,QAAA2vc,SACA,EACA,eAAAC,CAAAJ,GACA,MACAxvc,EADAwvc,EAAA9vC,MAAAsH,eAAAwoC,EAAA/sC,cACAc,WAAAiH,SAAAglC,EAAA7kC;AACA,OACAgI,WAAA3ya,EAAA2ya,WACAP,SAAApya,EAAAoya,SAEA,EACAy9B,WAAAxwC,EAAAhkQ,KACAsyS,UAAAtuC,EAAAhkQ,KACAy0S,aAAAzwC,EAAAhkQ,KACA2+J,OAAAqlG,EAAAhkQ,KACA00S,YAAA1wC,EAAAhkQ;AAEA,SAAA20S,GAAAtsE,EAAAt9X,EAAAqyJ,EAAAniI,GACA,MAAArR,EAAAy+W,EAAAt9X,GAAAwC,KAAA6vJ,EAAAniI;AACA,gBAAArR,EACAiqb,GAAA9oc,GAAAwC,KAAA6vJ,EAAAniI,GAEArR,CACA,CACA,MAAAgrb,WAAAttb,GACA6hZ,mBAAA+nC;AACA,WAAAjzX,CAAA9jD,GACAwrI,QACAhjK,KAAAwF,QAAA,EACAxF,KAAAgia,QAAA,GACAhia,KAAAkyc,oBAAAzgb,EACAzxB,KAAAq2M,WAAA5kL,EACAzxB,KAAAmyc,uBAAA1gb,EACAzxB,KAAAoyc,cAAA,GACApyc,KAAA2ja,iBAAAlyY,EACAzxB,KAAAmna,cAAA11Y,EACAzxB,KAAA0ha,MAAAlqY,EAAAkqY,MACA1ha,KAAAgC,QAAAw1B,EAAAx1B,QACAhC,KAAAqyc,gBAAA5gb,EACAzxB,KAAAu9J,WAAA9rI,EACAzxB,KAAA0vc,gBAAAj+a,EACAzxB,KAAAuN,UAAAkkB,EACAzxB,KAAA2vc,eAAAl+a,EACAzxB,KAAAg8T,YAAAvqS,EACAzxB,KAAAuwc,YAAA9+a,EACAzxB,KAAAqwc,YAAA5+a,EACAzxB,KAAAgH,OAAAyqB,EACAzxB,KAAAwR,OAAAigB,EACAzxB,KAAAshB,YAAAmQ,EACAzxB,KAAA+N,WAAA0jB,EACAzxB,KAAAsyc,YAAA7gb,EACAzxB,KAAAuyc,YAAA9gb,EACAzxB,KAAAwyc,iBAAA/gb,EACAzxB,KAAAyyc,sBAAAhhb,EACAzxB,KAAA0yc,qBAAAjhb,CACA,CACA,UAAA1xB,CAAAiC,GACAhC,KAAAgC,UACAhC,KAAAmyc,uBAAA1gb,EACAzxB,KAAAmna,cAAA11Y,CACA,CACA,kBAAA07Y,GACA,MAAA34Q,EAAAx0J,KAAAmyc;AACA,GAAA39S,EACA,OAAAA;AAEA,MAAAktQ,EAAA1ha,KAAA0ha,MACA1/Z,EAAAhC,KAAAgC,QAAA4jb,WAAA5lb,KAAAqqa,cACApxX,EAAAj3C,EAAAyS,SAAAitZ,EAAA1/Z,QAAAuha,WAAAvha,EAAA4ha,WACAA,EAAA,IAAAT,EAAAnja,KAAA0ha,MAAAzoX;AAIA,OAHAA,EAAAo0X,aACArta,KAAAmyc,kBAAApqb,OAAA4jE,OAAAi4U,IAEAA,CACA,CACA,UAAAyG,GACA,OAAArqa,KAAAmna,WAAAnna,KAAAmna,UArIAr/Y,EAqIA9nB,KAAA0ha,MAAA2I,aArIA+mC,EAqIApxc,KAAAoyc,cApIA/wC,EAAAzjH,cAAA91R,EAAA,CACAonb,QAmIAlvc,KAlIAoxc,eACAttc,KAAA;AAJA,IAAAgkB,EAAAspb,CAsIA,CACA,QAAAuB,CAAA/5a,EAAA52B,GACA,MAAA0jY,UAAgBA,GAAa1jY,EAC7Bmvc,EAAAa,GAAAtsE,EAAA,cAAA1lY,KAAA44B,GACA2kI,EAAAy0S,GAAAtsE,EAAA,QAAA1lY,KAAA44B,GACA04a,EAAAU,GAAAtsE,EAAA,aAAA1lY,KAAA44B;AACA,IAAA1lB,EAAA;AAIA,OAHAA,EAAA27b,GAAA37b,EAAA67b,GAAAoC,IACAj+b,EAAA27b,GAAA37b,EAAA67b,GAAAxxS,IACArqJ,EAAA27b,GAAA37b,EAAA67b,GAAAuC,IACAp+b,CACA,CACA,aAAA0/b,CAAAxB,EAAApvc,GACA,OAAAgvc,GAAAgB,GAAAhwc,EAAA0jY,UAAA,aAAA1lY,KAAAoxc,GACA,CACA,OAAAyB,CAAAzB,EAAApvc,GACA,MAAA0jY,UAAgBA,GAAa1jY,EAC7B8wc,EAAA;AAaA,OAZAzxC,EAAA2e,KAAAoxB,EAAAx4a,IACA,MAAA62a,EAAA,CACAzyR,OAAA,GACA9pK,MAAA,GACA+pK,MAAA,IAEA81R,EAAA9B,GAAAvrE,EAAA9sW;AACAi2a,GAAAY,EAAAzyR,OAAA+xR,GAAAiD,GAAAe,EAAA,cAAA/yc,KAAA44B,KACAi2a,GAAAY,EAAAv8b,MAAA8+b,GAAAe,EAAA,QAAA/yc,KAAA44B,IACAi2a,GAAAY,EAAAxyR,MAAA8xR,GAAAiD,GAAAe,EAAA,aAAA/yc,KAAA44B,KACAk6a,EAAAlrc,KAAA6nc,KAEAqD,CACA,CACA,YAAAE,CAAA5B,EAAApvc,GACA,OAAAgvc,GAAAgB,GAAAhwc,EAAA0jY,UAAA,YAAA1lY,KAAAoxc,GACA,CACA,SAAA6B,CAAA7B,EAAApvc,GACA,MAAA0jY,UAAgBA,GAAa1jY,EAC7B8vc,EAAAE,GAAAtsE,EAAA,eAAA1lY,KAAAoxc,GACAp1I,EAAAg2I,GAAAtsE,EAAA,SAAA1lY,KAAAoxc,GACAW,EAAAC,GAAAtsE,EAAA,cAAA1lY,KAAAoxc;AACA,IAAAl+b,EAAA;AAIA,OAHAA,EAAA27b,GAAA37b,EAAA67b,GAAA+C,IACA5+b,EAAA27b,GAAA37b,EAAA67b,GAAA/yI,IACA9oT,EAAA27b,GAAA37b,EAAA67b,GAAAgD,IACA7+b,CACA,CACA,YAAAggc,CAAAlxc,GACA,MAAAw9J,EAAAx/J,KAAAgia,QACA/0Y,EAAAjtB,KAAA0ha,MAAAz0Y,KACAulb,EAAA,GACAC,EAAA,GACAC,EAAA;AACA,IACApyc,EAAA02B,EADAo6a,EAAA;AAEA,IAAA9wc,EAAA,EAAA02B,EAAAwoI,EAAAj/J,OAAwCD,EAAA02B,IAAS12B,EACjD8wc,EAAAxpc,KAAAonc,GAAAhvc,KAAA0ha,MAAAliQ,EAAAl/J;AAkBA,OAhBA0B,EAAAukB,SACA6qb,IAAA7qb,OAAA,CAAA7D,EAAA3Z,EAAA+wI,IAAA93I,EAAAukB,OAAA7D,EAAA3Z,EAAA+wI,EAAA7sH,KAEAjrB,EAAAmxc,WACA/B,IAAAj/a,KAAA,CAAArxB,EAAAma,IAAAjZ,EAAAmxc,SAAAryc,EAAAma,EAAAgS,KAEAo0Y,EAAA2e,KAAAoxB,EAAAx4a,IACA,MAAAm6a,EAAA9B,GAAAjvc,EAAA0jY,UAAA9sW;AACA45a,EAAA5qc,KAAAoqc,GAAAe,EAAA,aAAA/yc,KAAA44B,IACA65a,EAAA7qc,KAAAoqc,GAAAe,EAAA,kBAAA/yc,KAAA44B,IACA85a,EAAA9qc,KAAAoqc,GAAAe,EAAA,iBAAA/yc,KAAA44B,MAEA54B,KAAAwyc,cACAxyc,KAAAyyc,mBACAzyc,KAAA0yc,kBACA1yc,KAAAqyc,WAAAjB,EACAA,CACA,CACA,MAAAzgc,CAAAypJ,EAAA8hS,GACA,MAAAl6b,EAAAhC,KAAAgC,QAAA4jb,WAAA5lb,KAAAqqa,cACA7qQ,EAAAx/J,KAAAgia;AACA,IAAA1rZ,EACA86b,EAAA;AACA,GAAA5xS,EAAAj/J,OAMU,CACV,MAAAqrB,EAAA2ib,GAAAvsc,EAAA4pB,UAAAhhB,KAAA5K,KAAAw/J,EAAAx/J,KAAAkyc;AACAd,EAAApxc,KAAAkzc,aAAAlxc,GACAhC,KAAAu9J,MAAAv9J,KAAA2yc,SAAAvB,EAAApvc,GACAhC,KAAA0vc,WAAA1vc,KAAA4yc,cAAAxB,EAAApvc,GACAhC,KAAAuN,KAAAvN,KAAA6yc,QAAAzB,EAAApvc,GACAhC,KAAA2vc,UAAA3vc,KAAAgzc,aAAA5B,EAAApvc,GACAhC,KAAAg8T,OAAAh8T,KAAAizc,UAAA7B,EAAApvc;AACA,MAAAqc,EAAAre,KAAAq2M,MAAA44P,GAAAjvc,KAAAgC,GACAoxc,EAAArrb,OAAA4rD,OAAA,GAAoD/nD,EAAAvN,GACpD6B,EAAAywb,GAAA3wc,KAAA0ha,MAAA1/Z,EAAAoxc,GACAC,EAAAzC,GAAA5uc,EAAAoxc,EAAAlzb,EAAAlgB,KAAA0ha;AACA1ha,KAAAuwc,OAAArwb,EAAAqwb,OACAvwc,KAAAqwc,OAAAnwb,EAAAmwb,OACA/5b,EAAA,CACA9Q,QAAA,EACAwB,EAAAqsc,EAAArsc,EACAwK,EAAA6hc,EAAA7hc,EACAzD,MAAAsQ,EAAAtQ,MACAuT,OAAAjD,EAAAiD,OACAgxb,OAAA1mb,EAAA5kB,EACAurc,OAAA3mb,EAAApa,EAEA,MA5BA,IAAAxR,KAAAwF,UACA8Q,EAAA,CACA9Q,QAAA;AA2BAxF,KAAAoyc,cAAAhB,EACApxc,KAAAmna,cAAA11Y,EACAnb,GACAtW,KAAAmta,qBAAAx8Z,OAAA3Q,KAAAsW,GAEA8jJ,GAAAp4J,EAAAsxc,UACAtxc,EAAAsxc,SAAA1oc,KAAA5K,KAAA,CACA0ha,MAAA1ha,KAAA0ha,MACAwtC,QAAAlvc,KACAk8b,UAGA,CACA,SAAAqX,CAAAC,EAAA/4S,EAAAp8I,EAAArc,GACA,MAAAyxc,EAAAzzc,KAAA0zc,iBAAAF,EAAAn1b,EAAArc;AACAy4J,EAAA+0R,OAAAikB,EAAAliM,GAAAkiM,EAAAhiM,IACAh3G,EAAA+0R,OAAAikB,EAAAzmB,GAAAymB,EAAAxmB,IACAxyR,EAAA+0R,OAAAikB,EAAAE,GAAAF,EAAAG,GACA,CACA,gBAAAF,CAAAF,EAAAn1b,EAAArc,GACA,MAAAuuc,OAAgBA,EAAAF,UAAmBrwc,MACnCywc,UAAgBA,EAAAI,gBAA4B7uc,GAC5Cqic,QAAgBA,EAAAC,WAAAC,aAAAC,eAAiDnjC,EAAA6iC,cAAA2M,IACjD7pc,EAAA6sc,EAAAric,EAAAsic,GAAmBN,GACnCzlc,MAAgBA,EAAAuT,UAAkBjD;AAClC,IAAAkzP,EAAAy7K,EAAA2mB,EAAAliM,EAAAw7K,EAAA2mB;AAoCA,MAnCA,WAAAvD,GACApjB,EAAA6mB,EAAAxyb,EAAA,EACA,SAAAivb,GACAh/L,EAAAsiM,EACA7mB,EAAAz7K,EAAAk/L,EACAh/L,EAAAw7K,EAAAwjB,EACAmD,EAAA3mB,EAAAwjB,IAEAl/L,EAAAsiM,EAAA9lc,EACAi/a,EAAAz7K,EAAAk/L,EACAh/L,EAAAw7K,EAAAwjB,EACAmD,EAAA3mB,EAAAwjB,GAEAkD,EAAApiM,IAGAy7K,EADA,SAAAujB,EACAsD,EAAA9wc,KAAA+b,IAAAulb,EAAAE,GAAAkM,EACc,UAAAF,EACdsD,EAAA9lc,EAAAhL,KAAA+b,IAAAwlb,EAAAE,GAAAiM,EAEAzwc,KAAAsyc,OAEA,QAAAjC,GACA5+L,EAAAqiM,EACA7mB,EAAAx7K,EAAAg/L,EACAl/L,EAAAy7K,EAAAyjB,EACAkD,EAAA3mB,EAAAyjB,IAEAh/L,EAAAqiM,EAAAxyb,EACA2ra,EAAAx7K,EAAAg/L,EACAl/L,EAAAy7K,EAAAyjB,EACAkD,EAAA3mB,EAAAyjB,GAEAmD,EAAAniM,GAEA,CACAF,KACAy7K,KACA2mB,KACAliM,KACAw7K,KACA2mB,KAEA,CACA,SAAA3jB,CAAAzub,EAAAi5J,EAAAz4J,GACA,MAAAu7J,EAAAv9J,KAAAu9J,MACAh9J,EAAAg9J,EAAAh9J;AACA,IAAA4sc,EAAAyC,EAAAtvc;AACA,GAAAC,EAAA,CACA,MAAAwrc,EAAA1qC,EAAA2qC,cAAAhqc,EAAAie,IAAAjgB,KAAAgH,EAAAhH,KAAA+N;AAQA,IAPAvM,EAAAwF,EAAA+pc,GAAA/wc,KAAAgC,EAAAyib,WAAAzib,GACAy4J,EAAA88P,UAAAw0C,EAAAx0C,UAAAv1Z,EAAAyib,YACAhqR,EAAAwzR,aAAA,SACAkf,EAAA9rC,EAAAkjB,OAAAvib,EAAAmrc,WACAyC,EAAA5tc,EAAA4tc,aACAn1S,EAAAq6Q,UAAA9ya,EAAA+xc,WACAt5S,EAAA6pR,KAAA6oB,EAAA30V,OACAl4G,EAAA,EAAuBA,EAAAC,IAAYD,EACnCm6J,EAAAu5S,SAAAz2S,EAAAj9J,GAAAyrc,EAAA/kc,EAAAxF,EAAAwF,GAAAxF,EAAAgQ,EAAA27b,EAAA3oB,WAAA,GACAhjb,EAAAgQ,GAAA27b,EAAA3oB,WAAAorB,EACAtvc,EAAA,IAAAC,IACAiB,EAAAgQ,GAAAxP,EAAA6tc,kBAAAD,EAGA,CACA,CACA,aAAAqE,CAAAx5S,EAAAj5J,EAAAlB,EAAAyrc,EAAA/pc,GACA,MAAAyvc,EAAAzxc,KAAAwyc,YAAAlyc,GACAsxc,EAAA5xc,KAAAyyc,iBAAAnyc,IACA2pc,UAAgBA,EAAAC,YAAwBloc,EACxCmtc,EAAA9tC,EAAAkjB,OAAAvib,EAAAmtc,UACA+E,EAAAnD,GAAA/wc,KAAA,OAAAgC,GACAmyc,EAAApI,EAAA/kc,EAAAktc,GACAE,EAAAnK,EAAAkF,EAAA3qB,YAAA2qB,EAAA3qB,WAAAylB,GAAA,IACAoK,EAAA7yc,EAAAgQ,EAAA4ic;AACA,GAAApyc,EAAAmoc,cAAA,CACA,MAAAuC,EAAA,CACArnc,OAAAtC,KAAA8b,IAAAqrb,EAAAD,GAAA,EACAt1B,WAAAi9B,EAAAj9B,WACAP,SAAAw9B,EAAAx9B,SACAmB,YAAA,GAEA2C,EAAA6zB,EAAAG,WAAAiI,EAAAjK,KAAA,EACA/xB,EAAAk8B,EAAApK,EAAA;AACAxvS,EAAA+6Q,YAAAxza,EAAAsyc,mBACA75S,EAAAq6Q,UAAA9ya,EAAAsyc,mBACAjzC,EAAAiiC,UAAA7oS,EAAAiyS,EAAAx0B,EAAAC,GACA19Q,EAAA+6Q,YAAAi8B,EAAAxkI,YACAxyK,EAAAq6Q,UAAA28B,EAAA1kI,gBACAs0F,EAAAiiC,UAAA7oS,EAAAiyS,EAAAx0B,EAAAC,EACA,KAAU,CACV19Q,EAAA66Q,UAAAjU,EAAAxsT,SAAA48V,EAAAl8B,aAAAxya,KAAA+b,OAAAiJ,OAAAi/B,OAAAyqZ,EAAAl8B,cAAAk8B,EAAAl8B,aAAA,EACA96Q,EAAA+6Q,YAAAi8B,EAAAxkI,YACAxyK,EAAA40R,YAAAoiB,EAAAx8B,YAAA,IACAx6Q,EAAAy6Q,eAAAu8B,EAAAt8B,kBAAA;AACA,MAAAo/B,EAAAxI,EAAAG,WAAAiI,EAAAjK,GACAsK,EAAAzI,EAAAG,WAAAH,EAAAa,MAAAuH,EAAA,GAAAjK,EAAA,GACAr1B,EAAAxT,EAAA6iC,cAAAuN,EAAA58B;AACA9sZ,OAAAi/B,OAAA6tX,GAAApxZ,KAAAnS,GAAA,IAAAA,IACAmpJ,EAAA60R,YACA70R,EAAAq6Q,UAAA9ya,EAAAsyc,mBACAjzC,EAAAqjC,mBAAAjqS,EAAA,CACAzzJ,EAAAutc,EACA/ic,EAAA6ic,EACAx/b,EAAAq1b,EACAnpc,EAAAkpc,EACA5kc,OAAAwva,IAEAp6Q,EAAAitQ,OACAjtQ,EAAAg1R,SACAh1R,EAAAq6Q,UAAA28B,EAAA1kI,gBACAtyK,EAAA60R,YACAjuB,EAAAqjC,mBAAAjqS,EAAA,CACAzzJ,EAAAwtc,EACAhjc,EAAA6ic,EAAA,EACAx/b,EAAAq1b,EAAA,EACAnpc,EAAAkpc,EAAA,EACA5kc,OAAAwva,IAEAp6Q,EAAAitQ,SAEAjtQ,EAAAq6Q,UAAA9ya,EAAAsyc,mBACA75S,EAAAy0R,SAAAqlB,EAAAF,EAAAnK,EAAAD,GACAxvS,EAAAg6S,WAAAF,EAAAF,EAAAnK,EAAAD,GACAxvS,EAAAq6Q,UAAA28B,EAAA1kI,gBACAtyK,EAAAy0R,SAAAslB,EAAAH,EAAA,EAAAnK,EAAA,EAAAD,EAAA,GAEA,CACAxvS,EAAAq6Q,UAAA90a,KAAA0yc,gBAAApyc,EACA,CACA,QAAAo0c,CAAAlzc,EAAAi5J,EAAAz4J,GACA,MAAAuL,KAAgBA,GAAQvN,MACxB+vc,YAAgBA,EAAA4E,YAAA7E,gBAAA7F,YAAAC,WAAAnsB,cAA+E/7a,EAC/Fmtc,EAAA9tC,EAAAkjB,OAAAvib,EAAAmtc;AACA,IAAAyF,EAAAzF,EAAA3qB,WACAqwB,EAAA;AACA,MAAA9I,EAAA1qC,EAAA2qC,cAAAhqc,EAAAie,IAAAjgB,KAAAgH,EAAAhH,KAAA+N,OACA+mc,EAAA,SAAAj5b,GACA4+I,EAAAu5S,SAAAn4b,EAAAkwb,EAAA/kc,EAAAxF,EAAAwF,EAAA6tc,GAAArzc,EAAAgQ,EAAAojc,EAAA,GACApzc,EAAAgQ,GAAAojc,EAAA7E,CACA,EACAgF,EAAAhJ,EAAAx0C,UAAAo9C;AACA,IAAAlF,EAAAtiI,EAAAj6T,EAAA5S,EAAAqlF,EAAA0+U,EAAA6mB;AAQA,IAPAzwR,EAAA88P,UAAAo9C,EACAl6S,EAAAwzR,aAAA,SACAxzR,EAAA6pR,KAAA6qB,EAAA32V,OACAh3G,EAAAwF,EAAA+pc,GAAA/wc,KAAA+0c,EAAA/yc,GACAy4J,EAAAq6Q,UAAA9ya,EAAA2vc,UACAtwC,EAAA2e,KAAAhgb,KAAA0vc,WAAAoF,GACAD,EAAA/E,GAAA,UAAAiF,EAAA,WAAAJ,EAAAzK,EAAA,EAAAnsB,EAAAmsB,EAAA,EAAAnsB,EAAA,EACAz9a,EAAA,EAAA+ja,EAAA92Z,EAAAhN,OAAuCD,EAAA+ja,IAAU/ja,EAAA,CAUjD,IATAmvc,EAAAlic,EAAAjN,GACA6sU,EAAAntU,KAAA0yc,gBAAApyc,GACAm6J,EAAAq6Q,UAAA3nG,EACAk0F,EAAA2e,KAAAyvB,EAAAzyR,OAAA83R,GACA5hc,EAAAu8b,EAAAv8b,MACA48b,GAAA58b,EAAA3S,SACAP,KAAAi0c,cAAAx5S,EAAAj5J,EAAAlB,EAAAyrc,EAAA/pc,GACA4yc,EAAA7xc,KAAA+b,IAAAqwb,EAAA3qB,WAAAylB,IAEAtkX,EAAA,EAAAulW,EAAAh4a,EAAA3S,OAA4ColF,EAAAulW,IAAUvlW,EACtDmvX,EAAA5hc,EAAAyyE,IACAivX,EAAAzF,EAAA3qB;AAEAnjB,EAAA2e,KAAAyvB,EAAAxyR,MAAA63R,EACA,CACAD,EAAA,EACAD,EAAAzF,EAAA3qB,WACAnjB,EAAA2e,KAAAhgb,KAAA2vc,UAAAmF,GACAtzc,EAAAgQ,GAAAu+b,CACA,CACA,UAAAiF,CAAAxzc,EAAAi5J,EAAAz4J,GACA,MAAAg6T,EAAAh8T,KAAAg8T,OACAz7T,EAAAy7T,EAAAz7T;AACA,IAAA6uc,EAAA9uc;AACA,GAAAC,EAAA,CACA,MAAAwrc,EAAA1qC,EAAA2qC,cAAAhqc,EAAAie,IAAAjgB,KAAAgH,EAAAhH,KAAA+N;AAQA,IAPAvM,EAAAwF,EAAA+pc,GAAA/wc,KAAAgC,EAAAizc,YAAAjzc,GACAR,EAAAgQ,GAAAxP,EAAAguc,gBACAv1S,EAAA88P,UAAAw0C,EAAAx0C,UAAAv1Z,EAAAizc,aACAx6S,EAAAwzR,aAAA,SACAmhB,EAAA/tC,EAAAkjB,OAAAvib,EAAAotc,YACA30S,EAAAq6Q,UAAA9ya,EAAAkzc,YACAz6S,EAAA6pR,KAAA8qB,EAAA52V,OACAl4G,EAAA,EAAuBA,EAAAC,IAAYD,EACnCm6J,EAAAu5S,SAAAh4I,EAAA17T,GAAAyrc,EAAA/kc,EAAAxF,EAAAwF,GAAAxF,EAAAgQ,EAAA49b,EAAA5qB,WAAA,GACAhjb,EAAAgQ,GAAA49b,EAAA5qB,WAAAxib,EAAAiuc,aAEA,CACA,CACA,cAAAhhB,CAAAztb,EAAAi5J,EAAA06S,EAAAnzc,GACA,MAAAuuc,OAAgBA,EAAAF,UAAmBrwc,MACnCgH,EAAgBA,EAAAwK,KAAShQ,GACzBuM,MAAgBA,EAAAuT,UAAkB6zb,GAClC9Q,QAAgBA,EAAAC,WAAAC,aAAAC,eAAiDnjC,EAAA6iC,cAAAlic,EAAA6uc;AACjEp2S,EAAAq6Q,UAAA9ya,EAAA+qU,gBACAtyK,EAAA+6Q,YAAAxza,EAAAirU,YACAxyK,EAAA66Q,UAAAtza,EAAAuza,YACA96Q,EAAA60R,YACA70R,EAAA80R,OAAAvob,EAAAq9b,EAAA7yb,GACA,QAAA6+b,GACArwc,KAAAuzc,UAAA/xc,EAAAi5J,EAAA06S,EAAAnzc,GAEAy4J,EAAA+0R,OAAAxob,EAAA+G,EAAAu2b,EAAA9yb,GACAipJ,EAAA26S,iBAAApuc,EAAA+G,EAAAyD,EAAAxK,EAAA+G,EAAAyD,EAAA8yb,GACA,WAAA+L,GAAA,UAAAE,GACAvwc,KAAAuzc,UAAA/xc,EAAAi5J,EAAA06S,EAAAnzc,GAEAy4J,EAAA+0R,OAAAxob,EAAA+G,EAAAyD,EAAA8P,EAAAkjb,GACA/pS,EAAA26S,iBAAApuc,EAAA+G,EAAAyD,EAAA8P,EAAAta,EAAA+G,EAAAy2b,EAAAhzb,EAAA8P,GACA,WAAA+ub,GACArwc,KAAAuzc,UAAA/xc,EAAAi5J,EAAA06S,EAAAnzc,GAEAy4J,EAAA+0R,OAAAxob,EAAAu9b,EAAA/yb,EAAA8P,GACAm5I,EAAA26S,iBAAApuc,EAAAwK,EAAA8P,EAAAta,EAAAwK,EAAA8P,EAAAijb,GACA,WAAA8L,GAAA,SAAAE,GACAvwc,KAAAuzc,UAAA/xc,EAAAi5J,EAAA06S,EAAAnzc,GAEAy4J,EAAA+0R,OAAAxob,EAAAwK,EAAA6yb,GACA5pS,EAAA26S,iBAAApuc,EAAAwK,EAAAxK,EAAAq9b,EAAA7yb,GACAipJ,EAAAwkS,YACAxkS,EAAAitQ,OACA1la,EAAAuza,YAAA,GACA96Q,EAAAg1R,QAEA,CACA,sBAAA4lB,CAAArzc,GACA,MAAA0/Z,EAAA1ha,KAAA0ha,MACAC,EAAA3ha,KAAA2ja,YACA2xC,EAAA3zC,KAAA36Z,EACAuuc,EAAA5zC,KAAAnwZ;AACA,GAAA8jc,GAAAC,EAAA,CACA,MAAA3pb,EAAA2ib,GAAAvsc,EAAA4pB,UAAAhhB,KAAA5K,UAAAgia,QAAAhia,KAAAkyc;AACA,IAAAtmb,EACA;AAEA,MAAAvN,EAAAre,KAAAq2M,MAAA44P,GAAAjvc,KAAAgC,GACAoxc,EAAArrb,OAAA4rD,OAAA,GAAoD/nD,EAAA5rB,KAAAq2M,OACpDn2L,EAAAywb,GAAAjvC,EAAA1/Z,EAAAoxc,GACA19S,EAAAk7S,GAAA5uc,EAAAoxc,EAAAlzb,EAAAwhZ;AACA4zC,EAAAngE,MAAAz/O,EAAA1uJ,GAAAuuc,EAAApgE,MAAAz/O,EAAAlkJ,IACAxR,KAAAuwc,OAAArwb,EAAAqwb,OACAvwc,KAAAqwc,OAAAnwb,EAAAmwb,OACArwc,KAAA+N,MAAAsQ,EAAAtQ,MACA/N,KAAAshB,OAAAjD,EAAAiD,OACAthB,KAAAsyc,OAAA1mb,EAAA5kB,EACAhH,KAAAuyc,OAAA3mb,EAAApa,EACAxR,KAAAmta,qBAAAx8Z,OAAA3Q,KAAA01J,GAEA,CACA,CACA,WAAA8/S,GACA,QAAAx1c,KAAAwF,OACA,CACA,IAAAu8Z,CAAAtnQ,GACA,MAAAz4J,EAAAhC,KAAAgC,QAAA4jb,WAAA5lb,KAAAqqa;AACA,IAAA7ka,EAAAxF,KAAAwF;AACA,IAAAA,EACA;AAEAxF,KAAAq1c,uBAAArzc;AACA,MAAAmzc,EAAA,CACApnc,MAAA/N,KAAA+N,MACAuT,OAAAthB,KAAAshB,QAEA9f,EAAA,CACAwF,EAAAhH,KAAAgH,EACAwK,EAAAxR,KAAAwR;AAEAhM,EAAAzC,KAAAqN,IAAA5K,GAAA,OAAAA;AACA,MAAAub,EAAAsgZ,EAAAke,UAAAv9a,EAAA+e,SACA00b,EAAAz1c,KAAAu9J,MAAAh9J,QAAAP,KAAA0vc,WAAAnvc,QAAAP,KAAAuN,KAAAhN,QAAAP,KAAA2vc,UAAApvc,QAAAP,KAAAg8T,OAAAz7T;AACAyB,EAAAyS,SAAAghc,IACAh7S,EAAAp4C,OACAo4C,EAAAi7S,YAAAlwc,EACAxF,KAAAivb,eAAAztb,EAAAi5J,EAAA06S,EAAAnzc,GACAq/Z,EAAAirC,sBAAA7xS,EAAAz4J,EAAAuqc,eACA/qc,EAAAgQ,GAAAuP,EAAAlT,IACA7N,KAAAiwb,UAAAzub,EAAAi5J,EAAAz4J,GACAhC,KAAA00c,SAAAlzc,EAAAi5J,EAAAz4J,GACAhC,KAAAg1c,WAAAxzc,EAAAi5J,EAAAz4J,GACAq/Z,EAAA6rC,qBAAAzyS,EAAAz4J,EAAAuqc,eACA9xS,EAAA8M,UAEA,CACA,iBAAAq0R,GACA,OAAA57b,KAAAgia,SAAA,EACA,CACA,iBAAA65B,CAAAC,EAAA4S,GACA,MAAA3S,EAAA/7b,KAAAgia,QACAxiQ,EAAAs8R,EAAAl4a,IAAA,EAA6C6gZ,eAAA17Z,YAC7C,MAAA4wS,EAAA35S,KAAA0ha,MAAAsH,eAAAvE;AACA,IAAA9qH,EACA,UAAAj5S,MAAA,kCAAA+ja;AAEA,OACAA,eACA/hZ,QAAAi3R,EAAA1sR,KAAAlkB,GACAA,WAGAqxJ,GAAAinQ,EAAA26B,eAAAD,EAAAv8R,GACAm2S,EAAA31c,KAAA41c,iBAAAp2S,EAAAkvS,IACAt0S,GAAAu7S,KACA31c,KAAAgia,QAAAxiQ,EACAx/J,KAAAkyc,eAAAxD,EACA1uc,KAAA61c,uBACA71c,KAAA2Q,WAEA,CACA,WAAA88b,CAAAptc,EAAA67b,EAAAI,MACA,GAAAJ,GAAAl8b,KAAA61c,oBACA;AAEA71c,KAAA61c;AACA,MAAA7zc,EAAAhC,KAAAgC,QACA+5b,EAAA/7b,KAAAgia,SAAA,GACAxiQ,EAAAx/J,KAAAy8b,mBAAAp8b,EAAA07b,EAAAG,EAAAI,GACAqZ,EAAA31c,KAAA41c,iBAAAp2S,EAAAn/J,GACA+5J,EAAA8hS,IAAA76B,EAAA26B,eAAAx8R,EAAAu8R,IAAA4Z;AAWA,OAVAv7S,IACAp6J,KAAAgia,QAAAxiQ,GACAx9J,EAAAyS,SAAAzS,EAAAsxc,YACAtzc,KAAAkyc,eAAA,CACAlrc,EAAA3G,EAAA2G,EACAwK,EAAAnR,EAAAmR,GAEAxR,KAAA2Q,UAAAurb,KAGA9hS,CACA,CACA,kBAAAqiS,CAAAp8b,EAAA07b,EAAAG,EAAAI,GACA,MAAAt6b,EAAAhC,KAAAgC;AACA,gBAAA3B,EAAAyD,KACA;AAEA,IAAAw4b,EACA,OAAAP,EAAAx1a,OAAAjmB,GAAAN,KAAA0ha,MAAAz0Y,KAAA87Y,SAAAzoa,EAAAmka,oBAAAhzY,IAAAzxB,KAAA0ha,MAAAsH,eAAA1oa,EAAAmka,cAAAc,WAAA4F,UAAA7qa,EAAAyI;AAEA,MAAAy2J,EAAAx/J,KAAA0ha,MAAAs5B,0BAAA36b,EAAA2B,EAAA6V,KAAA7V,EAAAk6b;AAIA,OAHAl6b,EAAAmP,SACAquJ,EAAAruJ,UAEAquJ,CACA,CACA,gBAAAo2S,CAAAp2S,EAAAn/J,GACA,MAAAiyc,OAAgBA,EAAAC,SAAAvwc,WAA6BhC,KAC7C4rB,EAAA2ib,GAAAvsc,EAAA4pB,UAAAhhB,KAAA5K,KAAAw/J,EAAAn/J;AACA,WAAAurB,IAAA0mb,IAAA1mb,EAAA5kB,GAAAurc,IAAA3mb,EAAApa,EACA,EAEA,IAAAskc,GAAA,CACA92Z,GAAA,UACAvuC,SAAAwhc,GACA1D,eACA,SAAAwH,CAAAr0C,EAAA37N,EAAA/jM,GACAA,IACA0/Z,EAAAwtC,QAAA,IAAA+C,GAAA,CACAvwC,QACA1/Z,YAGA,EACA,YAAAskb,CAAA5kB,EAAA37N,EAAA/jM,GACA0/Z,EAAAwtC,SACAxtC,EAAAwtC,QAAAnvc,WAAAiC,EAEA,EACA,KAAA4vB,CAAA8vY,EAAA37N,EAAA/jM,GACA0/Z,EAAAwtC,SACAxtC,EAAAwtC,QAAAnvc,WAAAiC,EAEA,EACA,SAAAg0c,CAAAt0C,GACA,MAAAwtC,EAAAxtC,EAAAwtC;AACA,GAAAA,KAAAsG,cAAA,CACA,MAAA98a,EAAA,CACAw2a;AAEA,QAAAxtC,EAAAonB,cAAA,wBACApwZ,EACAo+D,gBAEA;AAEAo4W,EAAAntC,KAAAL,EAAAjnQ,KACAinQ,EAAAonB,cAAA,mBAAApwZ,EACA,CACA,EACA,UAAAo1a,CAAApsC,EAAAhpY,GACA,GAAAgpY,EAAAwtC,QAAA,CACA,MAAA3yB,EAAA7jZ,EAAAwja;AACAx6B,EAAAwtC,QAAAzB,YAAA/0a,EAAAhvB,MAAA6ya,EAAA7jZ,EAAA4ja,eACA5ja,EAAA0hI,WAEA,CACA,EACA5vG,SAAA,CACA/1C,WACA6+b,SAAA,KACA1nb,SAAA,UACAmhT,gBAAA,kBACAgnI,WAAA,OACA5G,UAAA,CACA7ic,OAAA,QAEAslc,aAAA,EACAC,kBAAA,EACAprB,WAAA,OACAktB,UAAA,OACA5B,YAAA,EACAZ,SAAA,GACAwF,UAAA,OACAO,YAAA,OACAjF,cAAA,EACAD,gBAAA,EACAZ,WAAA,CACA9kc,OAAA,QAEA2qc,YAAA,OACAl0b,QAAA,EACA2vb,aAAA,EACAD,UAAA,EACAI,aAAA,EACA5G,UAAA,CAAAxvS,EAAAxhH,MAAAk2Z,SAAA9wb,KACA6rb,SAAA,CAAAzvS,EAAAxhH,MAAAk2Z,SAAA9wb,KACAi2b,mBAAA,OACAxE,iBACA/xB,WAAA,EACA9wG,YAAA,gBACAsoG,YAAA,EACAhS,UAAA,CACAvsZ,SAAA,IACA4+J,OAAA,gBAEAguP,WAAA,CACAqN,QAAA,CACAnta,KAAA,SACAwS,WAAA,CACA,IACA,IACA,QACA,SACA,SACA,WAGA9Q,QAAA,CACAowK,OAAA,SACA5+J,SAAA,MAGA0uX,UAAAwrE,IAEArgB,cAAA,CACAse,SAAA,OACAC,WAAA,OACAjC,UAAA,QAEAhc,YAAA,CACA5c,YAAAnsa,GAAA,WAAAA,GAAA,aAAAA,GAAA,aAAAA,EACAosa,cACA9uC,UAAA,CACA6uC,eACAC,eAEAjR,UAAA,CACA0yC,cAEAryC,WAAA,CACAqyC,UAAA,cAGA7gB,uBAAA,CACA,gBAIAhrH,GAAAriT,OAAA4jE,OAAA,CACAgQ,UAAA,KACAu6W,OAAAlR,GACAmR,WAAA5Q,GACA6Q,OAAArtc,GACAuhc,OAAAuD,GACAwI,SAAA/H,GACAP,MAAAK,GACA6D,QAAA6D;AAwBA,SAAAQ,GAAA3zc,GACA,MAAAkoa,EAAA7qa,KAAA8qa;AACA,OAAAnoa,GAAA,GAAAA,EAAAkoa,EAAAtqa,OACAsqa,EAAAloa,GAEAA,CACA,CACA,MAAA4zc,WAAA3xB,GACApe,UAAA;AACAA,gBAAA,CACAmJ,MAAA,CACAh2Z,SAAA28b;AAGA,WAAAh7X,CAAAmnV,GACAz/P,MAAAy/P,GACAzia,KAAAw2c,iBAAA/kb,EACAzxB,KAAAy2c,YAAA,EACAz2c,KAAA02c,aAAA,EACA,CACA,IAAA3jY,CAAA6gX,GACA,MAAA5/a,EAAAhU,KAAA02c;AACA,GAAA1ic,EAAAzT,OAAA,CACA,MAAAsqa,EAAA7qa,KAAA8qa;AACA,UAAA/ha,MAAyBA,EAAAy+J,WAAiBxzJ,EAC1C62Z,EAAA9ha,KAAAy+J,GACAqjQ,EAAA/ga,OAAAf,EAAA;AAGA/I,KAAA02c,aAAA,EACA,CACA1zS,MAAAjwF,KAAA6gX,EACA,CACA,KAAA19a,CAAA64L,EAAAhmM,GACA,GAAAs4Z,EAAAqQ,cAAA3iO,GACA;AAEA,MAAA87N,EAAA7qa,KAAA8qa;AAEA,MAxCA,EAAA/ha,EAAA+V,IAAA,OAAA/V,EAAA,KAAAs4Z,EAAAyoB,YAAA/mb,KAAAG,MAAA6F,GAAA,EAAA+V,GAAA,CAuCA/V,EAAA4f,SAAA5f,IAAA8ha,EAAA9ha,KAAAgmM,EAAAhmM,EA/CA,SAAA8ha,EAAA97N,EAAAhmM,EAAA4tc,GACA,MAAA5ka,EAAA84X,EAAAhha,QAAAklM;AACA,WAAAh9J,EAdA,EAAA84X,EAAA97N,EAAAhmM,EAAA4tc,KACA,iBAAA5nQ,GACAhmM,EAAA8ha,EAAAjja,KAAAmnM,GAAA,EACA4nQ,EAAAtvS,QAAA,CACAt+J,QACAy+J,MAAAunC,KAEM9zH,MAAA8zH,KACNhmM,EAAA,MAEAA,GAVA,CAeA8ha,EAAA97N,EAAAhmM,EAAA4tc,GAGA5ka,IADA84X,EAAAtwX,YAAAw0J,GACAhmM,EAAAgpC,CACA,CAPA,CA+CA84X,EAAA97N,EAAAsyN,EAAA4G,eAAAl/Z,EAAAgmM,GAAA/uM,KAAA02c,cACA7rC,EAAAtqa,OAAA,EACA,CACA,mBAAAumb,GACA,MAAAlb,WAAgBA,EAAAC,cAA2B7ra,KAAA8ra;AAC3C,IAAAjtZ,IAAcA,EAAAC,OAAa9e,KAAAura;AAC3B,UAAAvra,KAAAgC,QAAAqY,SACAuxZ,IACA/sZ,EAAA,GAEAgtZ,IACA/sZ,EAAA9e,KAAA8qa,YAAAvqa,OAAA,IAGAP,KAAA6e,MACA7e,KAAA8e,KACA,CACA,UAAAooa,GACA,MAAAroa,EAAA7e,KAAA6e,IACAC,EAAA9e,KAAA8e,IACAd,EAAAhe,KAAAgC,QAAAgc,OACA2xZ,EAAA;AACA,IAAA9E,EAAA7qa,KAAA8qa;AACAD,EAAA,IAAAhsZ,GAAAC,IAAA+rZ,EAAAtqa,OAAA,EAAAsqa,IAAAzqa,MAAAye,EAAAC,EAAA,GACA9e,KAAAy2c,YAAA1zc,KAAA+b,IAAA+rZ,EAAAtqa,QAAAyd,EAAA,QACAhe,KAAAw2c,YAAAx2c,KAAA6e,KAAAb,EAAA;AACA,QAAArb,EAAAkc,EAA6Blc,GAAAmc,EAAcnc,IAC3Cgta,EAAA/na,KAAA,CACAjF;AAGA,OAAAgta,CACA,CACA,gBAAAxD,CAAAxpa,GACA,OAAA2zc,GAAA1rc,KAAA5K,KAAA2C,EACA,CACA,SAAAypY,GACAppO,MAAAopO,YACApsY,KAAAuxW,iBACAvxW,KAAA87a,gBAAA97a,KAAA87a,eAEA,CACA,gBAAApM,CAAA/sa,GAIA,MAHA,iBAAAA,IACAA,EAAA3C,KAAAkW,MAAAvT,IAEA,OAAAA,EAAAg1F,IAAA33F,KAAAmza,oBAAAxwa,EAAA3C,KAAAw2c,aAAAx2c,KAAAy2c,YACA,CACA,eAAA7mC,CAAA7ma,GACA,MAAA4ma,EAAA3va,KAAA2va;AACA,OAAA5ma,EAAA,GAAAA,EAAA4ma,EAAApva,OAAA,EACA,KAEAP,KAAA0va,iBAAAC,EAAA5ma,GAAApG,MACA,CACA,gBAAA0wa,CAAAwY,GACA,OAAA9ob,KAAAG,MAAAlD,KAAAw2c,YAAAx2c,KAAAgsb,mBAAAH,GAAA7rb,KAAAy2c,YACA,CACA,YAAAnlC,GACA,OAAAtxa,KAAA8N,MACA,EAuGA,SAAA8oc,GAAAj0c,EAAAk0c,GAAAv8S,WAAgDA,EAAA6uR,gBAChD,MAAA9qB,EAAAgD,EAAA0U,UAAAoT,GACA/5Z,GAAAkrI,EAAAv3J,KAAAi0a,IAAA3Y,GAAAt7Z,KAAAwyK,IAAA8oP,KAAA,KACA99Z,EAAA,IAAAs2c,GAAA,GAAAl0c,GAAApC;AACA,OAAAwC,KAAA8b,IAAAg4b,EAAAznb,EAAA7uB,EACA,CACA,MAAAu2c,WAAAlyB,GACA,WAAAtpW,CAAAmnV,GACAz/P,MAAAy/P,GACAzia,KAAAkf,WAAAuS,EACAzxB,KAAAmf,SAAAsS,EACAzxB,KAAAw2c,iBAAA/kb,EACAzxB,KAAA+2c,eAAAtlb,EACAzxB,KAAAy2c,YAAA,CACA,CACA,KAAAvgc,CAAA64L,EAAAhmM,GACA,OAAAs4Z,EAAAqQ,cAAA3iO,KAGA,iBAAAA,gBAAAzjM,UAAAqd,UAAAomL,GAFA,MAKAA,CACA,CACA,sBAAAioQ,GACA,MAAA5lC,YAAgBA,GAAepxa,KAAAgC,SAC/B4pa,WAAgBA,EAAAC,cAA2B7ra,KAAA8ra;AAC3C,IAAAjtZ,IAAcA,EAAAC,OAAa9e;AAC3B,MAAAi3c,EAAA3lc,GAAAuN,EAAA+sZ,EAAA/sZ,EAAAvN,EACA4lc,EAAA5lc,GAAAwN,EAAA+sZ,EAAA/sZ,EAAAxN;AACA,GAAA8/Z,EAAA,CACA,MAAA+lC,EAAA91C,EAAAtpX,KAAAl5B,GACAu4b,EAAA/1C,EAAAtpX,KAAAj5B;AACAq4b,EAAA,GAAAC,EAAA,EACAF,EAAA,GACcC,EAAA,GAAAC,EAAA,GACdH,EAAA,EAEA,CACA,GAAAp4b,IAAAC,EAAA,CACA,IAAAd,EAAA,IAAAc,EAAA,EAAA/b,KAAAqN,IAAA,IAAA0O;AACAo4b,EAAAp4b,EAAAd,GACAozZ,GACA6lC,EAAAp4b,EAAAb,EAEA,CACAhe,KAAA6e,MACA7e,KAAA8e,KACA,CACA,YAAAu4b,GACA,MAAA7wB,EAAAxmb,KAAAgC,QAAA2ta;AACA,IACA2nC,GADA5zB,cAAcA,EAAA6zB,YAA4B/wB;AAe1C,OAbA+wB,GACAD,EAAAv0c,KAAAq3G,KAAAp6G,KAAA8e,IAAAy4b,GAAAx0c,KAAAE,MAAAjD,KAAA6e,IAAA04b,GAAA,EACAD,EAAA,MACA/hc,QAAAC,KAAA,UAAuCxV,KAAAg/C,sBAA2Bu4Z,mCAA0CD,8BAC5GA,EAAA,OAGAA,EAAAt3c,KAAAw3c,mBACA9zB,KAAA,IAEAA,IACA4zB,EAAAv0c,KAAA8b,IAAA6ka,EAAA4zB,IAEAA,CACA,CACA,gBAAAE,GACA,OAAAlsc,OAAAi9G,iBACA,CACA,UAAA2+T,GACA,MAAAjuY,EAAAj5C,KAAAgC,QACAwkb,EAAAvtY,EAAA02X;AACA,IAAA2nC,EAAAt3c,KAAAq3c;AACAC,EAAAv0c,KAAA+b,IAAA,EAAAw4b;AACA,MAcA3nC,EA9LA,SAAA8nC,EAAAC,GACA,MAAA/nC,EAAA,IAEAt1Z,OAAYA,EAAAwyH,OAAAhuH,MAAAC,MAAAiwD,YAAAoxE,QAAAm3T,WAAAK,YAAAC,iBAAwFH,EACpG70c,EAAAiqI,GAAA,EACAgrU,EAAAP,EAAA,GACYz4b,IAAAi5b,EAAAh5b,IAAAi5b,GAAyBL,EACrC9rC,GAAAvK,EAAAqQ,cAAA7yZ,GACAgtZ,GAAAxK,EAAAqQ,cAAA5yZ,GACAk5b,GAAA32C,EAAAqQ,cAAAvxR,GACA02T,GAAAkB,EAAAD,IAAAH,EAAA;AACA,IACAhpY,EAAAspY,EAAAC,EAAAC,EADA7jC,EAAAjT,EAAA+2C,SAAAL,EAAAD,GAAAD,EAAAj1c;AAEA,GAAA0xa,EAXA,QAWA1I,IAAAC,EACA,OACA,CACAlpa,MAAAm1c,GAEA,CACAn1c,MAAAo1c;AAIAI,EAAAp1c,KAAAq3G,KAAA29V,EAAAzjC,GAAAvxa,KAAAE,MAAA60c,EAAAxjC,GACA6jC,EAAAN,IACAvjC,EAAAjT,EAAA+2C,QAAAD,EAAA7jC,EAAAujC,EAAAj1c,MAEAy+Z,EAAAqQ,cAAA3iW,KACAJ,EAAA5rE,KAAAC,IAAA,GAAA+rE,GACAulW,EAAAvxa,KAAAq3G,KAAAk6T,EAAA3lW,MAEA,UAAAt0D,GACA49b,EAAAl1c,KAAAE,MAAA60c,EAAAxjC,KACA4jC,EAAAn1c,KAAAq3G,KAAA29V,EAAAzjC,OAEA2jC,EAAAH,EACAI,EAAAH,GAEAnsC,GAAAC,GAAAh/R,GAAAw0R,EAAAg3C,aAAAv5b,EAAAD,GAAAguH,EAAAynS,EAAA,MACA6jC,EAAAp1c,KAAAG,MAAAH,KAAA8b,KAAAC,EAAAD,GAAAy1Z,EAAAgjC,IACAhjC,GAAAx1Z,EAAAD,GAAAs5b,EACAF,EAAAp5b,EACAq5b,EAAAp5b,GACMk5b,GACNC,EAAArsC,EAAA/sZ,EAAAo5b,EACAC,EAAArsC,EAAA/sZ,EAAAo5b,EACAC,EAAAh4T,EAAA,EACAm0R,GAAA4jC,EAAAD,GAAAE,IAEAA,GAAAD,EAAAD,GAAA3jC,EAEA6jC,EADA92C,EAAAi3C,aAAAH,EAAAp1c,KAAAG,MAAAi1c,GAAA7jC,EAAA,KACAvxa,KAAAG,MAAAi1c,GAEAp1c,KAAAq3G,KAAA+9V;AAGA,MAAAn6W,EAAAj7F,KAAA+b,IAAAuiZ,EAAAk3C,eAAAjkC,GAAAjT,EAAAk3C,eAAAN;AACAtpY,EAAA5rE,KAAAC,IAAA,GAAAq+Z,EAAAqQ,cAAA3iW,GAAAivB,EAAAjvB,GACAkpY,EAAAl1c,KAAAG,MAAA+0c,EAAAtpY,KACAupY,EAAAn1c,KAAAG,MAAAg1c,EAAAvpY;AACA,IAAAgX,EAAA;AAgBA,IAfAimV,IACAgsC,GAAAK,IAAAp5b,GACA8wZ,EAAA/na,KAAA,CACAjF,MAAAkc,IAEAo5b,EAAAp5b,GACA8mE,IAEA07U,EAAAi3C,aAAAv1c,KAAAG,OAAA+0c,EAAAtyX,EAAA2uV,GAAA3lW,KAAA9vD,EAAA+3b,GAAA/3b,EAAAg4b,EAAAY,KACA9xX,KAEUsyX,EAAAp5b,GACV8mE,KAGUA,EAAAwyX,IAAexyX,EAAA,CACzB,MAAA6yX,EAAAz1c,KAAAG,OAAA+0c,EAAAtyX,EAAA2uV,GAAA3lW;AACA,GAAAk9V,GAAA2sC,EAAA15b,EACA;AAEA6wZ,EAAA/na,KAAA,CACAjF,MAAA61c,GAEA,CAcA,OAbA3sC,GAAA+rC,GAAAM,IAAAp5b,EACA6wZ,EAAApva,QAAA8ga,EAAAi3C,aAAA3oC,IAAApva,OAAA,GAAAoC,MAAAmc,EAAA83b,GAAA93b,EAAA+3b,EAAAY,IACA9nC,IAAApva,OAAA,GAAAoC,MAAAmc,EAEA6wZ,EAAA/na,KAAA,CACAjF,MAAAmc,IAGM+sZ,GAAAqsC,IAAAp5b,GACN6wZ,EAAA/na,KAAA,CACAjF,MAAAu1c,IAGAvoC,CACA,CAnGA,CAgLA,CACA2nC,WACAj9b,OAAA4+B,EAAA5+B,OACAwE,IAAAo6B,EAAAp6B,IACAC,IAAAm6B,EAAAn6B,IACAiwD,UAAAy3W,EAAAz3W,UACA89D,KAAA25S,EAAA+wB,SACAp3T,MAAAqmS,EAAArmS,MACAw3T,UAAA33c,KAAAswb,aACAh2R,WAAAt6J,KAAAuxW,eACA43E,YAAA3C,EAAA2C,aAAA,EACAyuB,mBAAApxB,EAAAoxB,eAEA53c,KAAA+kb,QAAA/kb;AAaA,MAXA,UAAAi5C,EAAA5+B,QACAgnZ,EAAAo3C,mBAAA9oC,EAAA3va,KAAA,SAEAi5C,EAAA9nC,SACAw+Z,EAAAx+Z,UACAnR,KAAAkf,MAAAlf,KAAA8e,IACA9e,KAAAmf,IAAAnf,KAAA6e,MAEA7e,KAAAkf,MAAAlf,KAAA6e,IACA7e,KAAAmf,IAAAnf,KAAA8e,KAEA6wZ,CACA,CACA,SAAAvjC,GACA,MAAAujC,EAAA3va,KAAA2va;AACA,IAAAzwZ,EAAAlf,KAAA6e,IACAM,EAAAnf,KAAA8e;AAEA,GADAkkJ,MAAAopO,YACApsY,KAAAgC,QAAAgc,QAAA2xZ,EAAApva,OAAA,CACA,MAAAyd,GAAAmB,EAAAD,GAAAnc,KAAA+b,IAAA6wZ,EAAApva,OAAA;AACA2e,GAAAlB,EACAmB,GAAAnB,CACA,CACAhe,KAAAw2c,YAAAt3b,EACAlf,KAAA+2c,UAAA53b,EACAnf,KAAAy2c,YAAAt3b,EAAAD,CACA,CACA,gBAAAitZ,CAAAxpa,GACA,OAAA0+Z,EAAAn8W,aAAAviD,EAAA3C,KAAA0ha,MAAA1/Z,QAAA+tC,OAAA/vC,KAAAgC,QAAA2ta,MAAAj2X,OACA,EAGA,MAAAg/Z,WAAA5B,GACAtwC,UAAA;AACAA,gBAAA,CACAmJ,MAAA,CACAh2Z,SAAA0nZ,EAAAs3C,MAAA7xZ,WAAA/D;AAGA,mBAAA+jY,GACA,MAAAjoa,IAAgBA,EAAAC,OAAa9e,KAAAura;AAC7Bvra,KAAA6e,IAAAwiZ,EAAAsD,eAAA9lZ,KAAA,EACA7e,KAAA8e,IAAAuiZ,EAAAsD,eAAA7lZ,KAAA,EACA9e,KAAAg3c,wBACA,CACA,gBAAAQ,GACA,MAAAl9S,EAAAt6J,KAAAuxW,eACAhxW,EAAA+5J,EAAAt6J,KAAA+N,MAAA/N,KAAAshB,OACA6na,EAAA9nB,EAAA0U,UAAA/1a,KAAAgC,QAAA2ta,MAAAwZ,aACA/5Z,GAAAkrI,EAAAv3J,KAAAi0a,IAAAmS,GAAApmb,KAAAwyK,IAAA4zQ,KAAA,KACAgC,EAAAnrb,KAAAwrb,wBAAA;AACA,OAAAzob,KAAAq3G,KAAA75G,EAAAwC,KAAA8b,IAAA,GAAAssa,EAAA3G,WAAAp1Z,GACA,CACA,gBAAAsgZ,CAAA/sa,GACA,cAAAA,EAAAg1F,IAAA33F,KAAAmza,oBAAAxwa,EAAA3C,KAAAw2c,aAAAx2c,KAAAy2c,YACA,CACA,gBAAApjC,CAAAwY,GACA,OAAA7rb,KAAAw2c,YAAAx2c,KAAAgsb,mBAAAH,GAAA7rb,KAAAy2c,WACA,EAGA,MAAAmC,GAAAtnc,GAAAvO,KAAAE,MAAAo+Z,EAAAw3C,MAAAvnc,IACAwnc,GAAA,CAAAxnc,EAAAnH,IAAApH,KAAAC,IAAA,GAAA41c,GAAAtnc,GAAAnH;AACA,SAAA4uc,GAAAC,GAEA,WADAA,EAAAj2c,KAAAC,IAAA,GAAA41c,GAAAI,GAEA,CACA,SAAA/jc,GAAA4J,EAAAC,EAAAm6b,GACA,MAAAC,EAAAn2c,KAAAC,IAAA,GAAAi2c,GACA/5b,EAAAnc,KAAAE,MAAA4b,EAAAq6b;AAEA,OADAn2c,KAAAq3G,KAAAt7F,EAAAo6b,GACAh6b,CACA,CAkDA,MAAAi6b,WAAAv0B,GACApe,UAAA;AACAA,gBAAA,CACAmJ,MAAA,CACAh2Z,SAAA0nZ,EAAAs3C,MAAA7xZ,WAAAsyZ,YACApxB,MAAA,CACAvza;AAIA,WAAA6mE,CAAAmnV,GACAz/P,MAAAy/P,GACAzia,KAAAkf,WAAAuS,EACAzxB,KAAAmf,SAAAsS,EACAzxB,KAAAw2c,iBAAA/kb,EACAzxB,KAAAy2c,YAAA,CACA,CACA,KAAAvgc,CAAA64L,EAAAhmM,GACA,MAAApG,EAAAm0c,GAAA7xc,UAAAiR,MAAAvD,MAAA3S,KAAA,CACA+uM,EACAhmM;AAEA,OAAApG,EAIA,OAAA0+Z,EAAAsD,eAAAhia,MAAA,EAAAA,EAAA;AAHA3C,KAAAq5c,QAIA,CACA,mBAAAvyB,GACA,MAAAjoa,IAAgBA,EAAAC,OAAa9e,KAAAura;AAC7Bvra,KAAA6e,IAAAwiZ,EAAAsD,eAAA9lZ,GAAA9b,KAAA+b,IAAA,EAAAD,GAAA,KACA7e,KAAA8e,IAAAuiZ,EAAAsD,eAAA7lZ,GAAA/b,KAAA+b,IAAA,EAAAA,GAAA,KACA9e,KAAAgC,QAAAova,cACApxa,KAAAq5c,UAEAr5c,KAAAq5c,OAAAr5c,KAAA6e,MAAA7e,KAAAwlb,gBAAAnkB,EAAAsD,eAAA3ka,KAAAslb,YACAtlb,KAAA6e,QAAAi6b,GAAA94c,KAAA6e,IAAA,GAAAi6b,GAAA94c,KAAA6e,KAAA,GAAAi6b,GAAA94c,KAAA6e,IAAA,IAEA7e,KAAAg3c,wBACA,CACA,sBAAAA,GACA,MAAAprC,WAAgBA,EAAAC,cAA2B7ra,KAAA8ra;AAC3C,IAAAjtZ,EAAA7e,KAAA6e,IACAC,EAAA9e,KAAA8e;AACA,MAAAm4b,EAAA3lc,GAAAuN,EAAA+sZ,EAAA/sZ,EAAAvN,EACA4lc,EAAA5lc,GAAAwN,EAAA+sZ,EAAA/sZ,EAAAxN;AACAuN,IAAAC,IACAD,GAAA,GACAo4b,EAAA,GACAC,EAAA,MAEAD,EAAA6B,GAAAj6b,GAAA,IACAq4b,EAAA4B,GAAAh6b,EAAA,MAGAD,GAAA,GACAo4b,EAAA6B,GAAAh6b,GAAA,IAEAA,GAAA,GACAo4b,EAAA4B,GAAAj6b,EAAA,IAEA7e,KAAA6e,MACA7e,KAAA8e,KACA,CACA,UAAAooa,GACA,MAAAjuY,EAAAj5C,KAAAgC,QAKA2ta,EA5GA,SAAA8nC,GAAA54b,IAA6CA,EAAAC,QAC7CD,EAAAwiZ,EAAA0kB,gBAAA0xB,EAAA54b;AACA,MAAA8wZ,EAAA,GACA2pC,EAAAV,GAAA/5b;AACA,IAAAq2Q,EAfA,SAAAr2Q,EAAAC,GAEA,IAAAm6b,EAAAL,GADA95b,EAAAD;AAEA,KAAA5J,GAAA4J,EAAAC,EAAAm6b,GAAA,IACAA;AAEA,KAAAhkc,GAAA4J,EAAAC,EAAAm6b,GAAA,IACAA;AAEA,OAAAl2c,KAAA8b,IAAAo6b,EAAAL,GAAA/5b,GACA,CAVA,CAeAA,EAAAC,GACAiwD,EAAAmmN,EAAA,EAAAnyR,KAAAC,IAAA,GAAAD,KAAAqN,IAAA8kR,IAAA;AACA,MAAAqiL,EAAAx0c,KAAAC,IAAA,GAAAkyR,GACAvF,EAAA2pL,EAAApkL,EAAAnyR,KAAAC,IAAA,GAAAs2c,GAAA,EACAp6b,EAAAnc,KAAAG,OAAA2b,EAAA8wQ,GAAA5gN,KACA/wD,EAAAjb,KAAAE,OAAA4b,EAAA8wQ,GAAA4nL,EAAA,IAAAA,EAAA;AACA,IAAAgC,EAAAx2c,KAAAE,OAAAic,EAAAlB,GAAAjb,KAAAC,IAAA,GAAAkyR,IACAvyR,EAAA0+Z,EAAA0kB,gBAAA0xB,EAAA54b,IAAA9b,KAAAG,OAAAysR,EAAA3xQ,EAAAu7b,EAAAx2c,KAAAC,IAAA,GAAAkyR,IAAAnmN;AACA,KAAApsE,EAAAmc,GACA6wZ,EAAA/na,KAAA,CACAjF,QACAqlb,MAAA+wB,GAAAp2c,GACA42c,gBAEAA,GAAA,GACAA,IAAA,SAEAA,IAEAA,GAAA,KACArkL,IACAqkL,EAAA,EACAxqY,EAAAmmN,GAAA,IAAAnmN,GAEApsE,EAAAI,KAAAG,OAAAysR,EAAA3xQ,EAAAu7b,EAAAx2c,KAAAC,IAAA,GAAAkyR,IAAAnmN;AAEA,MAAAyqY,EAAAn4C,EAAA0kB,gBAAA0xB,EAAA34b,IAAAnc;AAMA,OALAgta,EAAA/na,KAAA,CACAjF,MAAA62c,EACAxxB,MAAA+wB,GAAAS,GACAD,gBAEA5pC,CACA,CArCA,CAwGA,CACA9wZ,IAAA7e,KAAAslb,SACAxma,IAAA9e,KAAAqlb,UAEArlb;AAYA,MAXA,UAAAi5C,EAAA5+B,QACAgnZ,EAAAo3C,mBAAA9oC,EAAA3va,KAAA,SAEAi5C,EAAA9nC,SACAw+Z,EAAAx+Z,UACAnR,KAAAkf,MAAAlf,KAAA8e,IACA9e,KAAAmf,IAAAnf,KAAA6e,MAEA7e,KAAAkf,MAAAlf,KAAA6e,IACA7e,KAAAmf,IAAAnf,KAAA8e,KAEA6wZ,CACA,CACA,gBAAAxD,CAAAxpa,GACA,YAAA8uB,IAAA9uB,EAAA,IAAA0+Z,EAAAn8W,aAAAviD,EAAA3C,KAAA0ha,MAAA1/Z,QAAA+tC,OAAA/vC,KAAAgC,QAAA2ta,MAAAj2X,OACA,CACA,SAAA0yV,GACA,MAAAltX,EAAAlf,KAAA6e;AACAmkJ,MAAAopO,YACApsY,KAAAw2c,YAAAn1C,EAAAw3C,MAAA35b,GACAlf,KAAAy2c,YAAAp1C,EAAAw3C,MAAA74c,KAAA8e,KAAAuiZ,EAAAw3C,MAAA35b,EACA,CACA,gBAAAwwZ,CAAA/sa,GAIA,YAHA8uB,IAAA9uB,GAAA,IAAAA,IACAA,EAAA3C,KAAA6e,KAEA,OAAAlc,GAAAs4E,MAAAt4E,GACAg1F,IAEA33F,KAAAmza,mBAAAxwa,IAAA3C,KAAA6e,IAAA,GAAAwiZ,EAAAw3C,MAAAl2c,GAAA3C,KAAAw2c,aAAAx2c,KAAAy2c,YACA,CACA,gBAAApjC,CAAAwY,GACA,MAAA5zY,EAAAj4C,KAAAgsb,mBAAAH;AACA,OAAA9ob,KAAAC,IAAA,GAAAhD,KAAAw2c,YAAAv+Z,EAAAj4C,KAAAy2c,YACA,EAGA,SAAAgD,GAAAxga,GACA,MAAAutY,EAAAvtY,EAAA02X;AACA,GAAA6W,EAAArha,SAAA8zB,EAAA9zB,QAAA,CACA,MAAApE,EAAAsgZ,EAAAke,UAAAiH,EAAAsI;AACA,OAAAztB,EAAA4G,eAAAue,EAAAlC,MAAAkC,EAAAlC,KAAAjma,KAAAgjZ,EAAA72W,SAAA85X,KAAAjma,MAAA0C,EAAAO,MACA,CACA,QACA,CACA,SAAAo4b,GAAAj/S,EAAA6pR,EAAA98Q,GAIA,OAHAA,EAAA65P,EAAAlha,QAAAqnK,KAAA,CACAA,GAEA,CACA3yJ,EAAAwsZ,EAAAs4C,aAAAl/S,EAAA6pR,EAAA9rU,OAAAgvD,GACAzmK,EAAAymK,EAAAjnK,OAAA+jb,EAAAE,WAEA,CACA,SAAAo1B,GAAAntL,EAAAnyO,EAAAj8B,EAAAQ,EAAAC,GACA,OAAA2tQ,IAAA5tQ,GAAA4tQ,IAAA3tQ,EACA,CACAI,MAAAo7B,EAAAj8B,EAAA,EACAc,IAAAm7B,EAAAj8B,EAAA,GAEMouQ,EAAA5tQ,GAAA4tQ,EAAA3tQ,EACN,CACAI,MAAAo7B,EAAAj8B,EACAc,IAAAm7B,GAGA,CACAp7B,MAAAo7B,EACAn7B,IAAAm7B,EAAAj8B,EAEA,CA8BA,SAAAw7b,GAAAzgL,EAAAkuB,EAAA76B,EAAAqtL,EAAAC,GACA,MAAA/iC,EAAAj0a,KAAAqN,IAAArN,KAAAi0a,IAAAvqJ,IACAl3G,EAAAxyK,KAAAqN,IAAArN,KAAAwyK,IAAAk3G;AACA,IAAAzlR,EAAA,EACAwK,EAAA;AACAsoc,EAAA56b,MAAAooS,EAAAvqT,GACAiK,GAAAsgT,EAAAvqT,EAAA+8c,EAAA56b,OAAA83Z,EACA59I,EAAAr8R,EAAAgG,KAAA8b,IAAAu6Q,EAAAr8R,EAAAuqT,EAAAvqT,EAAAiK,IACM8yc,EAAA36b,IAAAmoS,EAAAzmT,IACNmG,GAAA8yc,EAAA36b,IAAAmoS,EAAAzmT,GAAAm2a,EACA59I,EAAAv4R,EAAAkC,KAAA+b,IAAAs6Q,EAAAv4R,EAAAymT,EAAAzmT,EAAAmG,IAEA+yc,EAAA76b,MAAAooS,EAAAxoT,GACA0S,GAAA81S,EAAAxoT,EAAAi7c,EAAA76b,OAAAq2J,EACA6jH,EAAAt6R,EAAAiE,KAAA8b,IAAAu6Q,EAAAt6R,EAAAwoT,EAAAxoT,EAAA0S,IACMuoc,EAAA56b,IAAAmoS,EAAArsS,IACNzJ,GAAAuoc,EAAA56b,IAAAmoS,EAAArsS,GAAAs6J,EACA6jH,EAAAn+Q,EAAAlY,KAAA+b,IAAAs6Q,EAAAn+Q,EAAAqsS,EAAArsS,EAAAzJ,GAEA,CACA,SAAAwoc,GAAA9zb,EAAAnd,EAAAkxc,GACA,MAAAC,EAAAh0b,EAAAi0b,aACAriP,MAAYA,EAAAsiP,kBAAAr5b,UAAA1C,QAA4C47b,EACxDI,EAAAn0b,EAAAo0b,iBAAAvxc,EAAAmxc,EAAApiP,EAAA/2M,EAAAq5b,GACA3tL,EAAA1pR,KAAAG,MAAAm+Z,EAAA0oB,UAAA1oB,EAAA4+B,gBAAAoa,EAAA5tL,MAAA40I,EAAAmW,WACAhma,EA0EA,SAAAA,EAAAzQ,EAAA0rR,GAMA,OALA,KAAAA,GAAA,MAAAA,EACAj7Q,GAAAzQ,EAAA,GACM0rR,EAAA,KAAAA,EAAA,MACNj7Q,GAAAzQ,GAEAyQ,CACA,CAPA,CA1EA6oc,EAAA7oc,EAAA6M,EAAAtd,EAAA0rR,GACA8qI,EAyDA,SAAA9qI,GACA,WAAAA,GAAA,MAAAA,EACA,SACMA,EAAA,IACN,OAEA,OACA,CAPA,CAzDAA,GACA7+Q,GAgEA5G,EAhEAqzc,EAAArzc,EAgEA6N,EAhEAwJ,EAAAxJ,EAiEA,WADA6va,EAhEAntB,GAkEAvwZ,GAAA6N,EACM,WAAA6va,IACN19a,GAAA6N,EAAA,GAEA7N;AANA,IAAAA,EAAA6N,EAAA6va;AA/DA,OACAttW,WACApwE,EAAAqzc,EAAArzc,EACAwK,IACA+lZ,YACA3pZ,OACAC,IAAA2D,EACAxD,MAAAJ,EAAAyQ,EAAAxJ,EACA/G,OAAA0D,EAAA6M,EAAAtd,EAEA,CACA,SAAAw5c,GAAAniT,EAAAqnG,GACA,IAAAA,EACA;AAEA,MAAA7xP,KAAYA,EAAAC,MAAAG,QAAAF,UAA+BsqJ;AAc3C,QAbAipQ,EAAAqb,eAAA,CACA11a,EAAA4G,EACA4D,EAAA3D,GACK4xP,IAAA4hK,EAAAqb,eAAA,CACL11a,EAAA4G,EACA4D,EAAA1D,GACK2xP,IAAA4hK,EAAAqb,eAAA,CACL11a,EAAAgH,EACAwD,EAAA3D,GACK4xP,IAAA4hK,EAAAqb,eAAA,CACL11a,EAAAgH,EACAwD,EAAA1D,GACK2xP,GAEL,CAiDA,SAAA+6M,GAAA//S,EAAAxhH,EAAAm/G,GACA,MAAAxqJ,KAAYA,EAAAC,MAAAG,QAAAF,UAA+BsqJ,GAC3C22R,cAAYA,GAAiB91Y;AAC7B,IAAAooX,EAAAqQ,cAAAqd,GAAA,CACA,MAAAla,EAAAxT,EAAA6iC,cAAAjrZ,EAAA47X,cACA9zZ,EAAAsgZ,EAAAke,UAAAtmY,EAAA61Y;AACAr0R,EAAAq6Q,UAAAia;AACA,MAAA0rB,EAAA7sc,EAAAmT,EAAAnT,KACA8sc,EAAA7sc,EAAAkT,EAAAlT,IACA8sc,EAAA3sc,EAAAJ,EAAAmT,EAAAhT,MACA6sc,EAAA9sc,EAAAD,EAAAkT,EAAAO;AACAyG,OAAAi/B,OAAA6tX,GAAApxZ,KAAAnS,GAAA,IAAAA,IACAmpJ,EAAA60R,YACAjuB,EAAAqjC,mBAAAjqS,EAAA,CACAzzJ,EAAAyzc,EACAjpc,EAAAkpc,EACA7lc,EAAA8lc,EACA55c,EAAA65c,EACAv1c,OAAAwva,IAEAp6Q,EAAAitQ,QAEAjtQ,EAAAy0R,SAAAurB,EAAAC,EAAAC,EAAAC,EAEA,CACA,CAmBA,SAAAC,GAAA30b,EAAA7gB,EAAA00a,EAAAs3B,GACA,MAAA52S,IAAYA,GAAOv0I;AACnB,GAAA6zZ,EACAt/Q,EAAA29Q,IAAAlyZ,EAAAo0Z,QAAAp0Z,EAAAq0Z,QAAAl1a,EAAA,EAAAg8Z,EAAA6U;IACM,CACN,IAAA+E,EAAA/0Z,EAAAo0b,iBAAA,EAAAj1c;AACAo1J,EAAA80R,OAAAtU,EAAAj0a,EAAAi0a,EAAAzpa;AACA,QAAAlR,EAAA,EAAuBA,EAAA+wc,EAAgB/wc,IACvC26a,EAAA/0Z,EAAAo0b,iBAAAh6c,EAAA+E,GACAo1J,EAAA+0R,OAAAvU,EAAAj0a,EAAAi0a,EAAAzpa,EAEA,CACA,CA0BA,MAAAspc,WAAAhE,GACAtwC,UAAA;AACAA,gBAAA,CACArhZ,WACA4vJ,WACAnpJ,SAAA,YACAkuZ,WAAA,CACA30Z,WACAmwZ,UAAA,EACAL,WAAA,GACAE,iBAAA,GAEAp+K,KAAA,CACAgjL,aAEAntJ,WAAA,EACA+iJ,MAAA,CACAif,qBACAj1a,SAAA0nZ,EAAAs3C,MAAA7xZ,WAAA/D,SAEAi3X,YAAA,CACA+U,mBAAAt9Z,EACAq9Z,gBAAA,EACA3pa,WACAm/Z,KAAA,CACAjma,KAAA,IAEA1E,SAAA6tJ,GACAA,EAEAzmJ,QAAA,EACAg6b;AAGAv0C,qBAAA,CACA,iCACA,4BACA;AAEAA,mBAAA,CACAsT,WAAA,CACAm8B,UAAA;AAGA,WAAA36X,CAAAmnV,GACAz/P,MAAAy/P,GACAzia,KAAAs6a,aAAA7oZ,EACAzxB,KAAAu6a,aAAA9oZ,EACAzxB,KAAAm6c,iBAAA1ob,EACAzxB,KAAAg7c,aAAA,GACAh7c,KAAAi7c,iBAAA,EACA,CACA,aAAAt0B,GACA,MAAA5la,EAAA/gB,KAAAguc,SAAA3sC,EAAAke,UAAAk6B,GAAAz5c,KAAAgC,SAAA,GACA6S,EAAA7U,KAAA+N,MAAA/N,KAAAk9P,SAAAn8O,EAAAhT,MACAhN,EAAAf,KAAAshB,OAAAthB,KAAAo9P,UAAAr8O,EAAAO;AACAthB,KAAAs6a,QAAAv3a,KAAAE,MAAAjD,KAAA4N,KAAAiH,EAAA,EAAAkM,EAAAnT,MACA5N,KAAAu6a,QAAAx3a,KAAAE,MAAAjD,KAAA6N,IAAA9M,EAAA,EAAAggB,EAAAlT,KACA7N,KAAAm6c,YAAAp3c,KAAAE,MAAAF,KAAA8b,IAAAhK,EAAA9T,GAAA,EACA,CACA,mBAAA+lb,GACA,MAAAjoa,IAAgBA,EAAAC,OAAa9e,KAAAura;AAC7Bvra,KAAA6e,IAAAwiZ,EAAAsD,eAAA9lZ,KAAAo8D,MAAAp8D,KAAA,EACA7e,KAAA8e,IAAAuiZ,EAAAsD,eAAA7lZ,KAAAm8D,MAAAn8D,KAAA,EACA9e,KAAAg3c,wBACA,CACA,gBAAAQ,GACA,OAAAz0c,KAAAq3G,KAAAp6G,KAAAm6c,YAAAV,GAAAz5c,KAAAgC,SACA,CACA,kBAAAgnb,CAAArZ,GACAmnC,GAAA7xc,UAAA+jb,mBAAAp+a,KAAA5K,KAAA2va,GACA3va,KAAAg7c,aAAAh7c,KAAA8qa,YAAAlnZ,IAAA,CAAAjhB,EAAAoG,KACA,MAAAy+J,EAAA65P,EAAA1nZ,SAAA3Z,KAAAgC,QAAAg4a,YAAArga,SAAA,CACAhX,EACAoG,GACA/I;AACA,OAAAwnK,GAAA,IAAAA,IAAA,KACSjhJ,OAAA,CAAAjV,EAAAhR,IAAAN,KAAA0ha,MAAAuR,kBAAA3ya,GACT,CACA,GAAAiob,GACA,MAAAtvY,EAAAj5C,KAAAgC;AACAi3C,EAAA9zB,SAAA8zB,EAAA+gY,YAAA70Z,QA3SA,SAAAe,GACA,MAAAohS,EAAA,CACAvqT,EAAAmpB,EAAAtY,KAAAsY,EAAA8nb,SAAApgc,KACA/M,EAAAqlB,EAAAlY,MAAAkY,EAAA8nb,SAAAhgc,MACAlP,EAAAonB,EAAArY,IAAAqY,EAAA8nb,SAAAngc,IACAoN,EAAAiL,EAAApY,OAAAoY,EAAA8nb,SAAAlgc,QAEAsrR,EAAArxQ,OAAA4rD,OAAA,GAAmC2zO,GACnCkiI,EAAA,GACAzoa,EAAA,GACAm6b,EAAAh1b,EAAA80b,aAAAz6c,OACA46c,EAAAj1b,EAAAlkB,QAAAg4a,YACAogC,EAAAe,EAAAJ,kBAAA15C,EAAA7rP,GAAA0lS,EAAA;AACA,QAAA56c,EAAA,EAAmBA,EAAA46c,EAAgB56c,IAAA,CACnC,MAAA24C,EAAAkia,EAAAv1B,WAAA1/Z,EAAAk1b,qBAAA96c;AACAygB,EAAAzgB,GAAA24C,EAAAl4B;AACA,MAAAk6Z,EAAA/0Z,EAAAo0b,iBAAAh6c,EAAA4lB,EAAAi0b,YAAAp5b,EAAAzgB,GAAA85c,GACAiB,EAAAh6C,EAAAkjB,OAAAtrY,EAAAqrY,MACA2pB,EAAAyL,GAAAxzb,EAAAu0I,IAAA4gT,EAAAn1b,EAAA80b,aAAA16c;AACAkpb,EAAAlpb,GAAA2tc;AACA,MAAA5jB,EAAAhpB,EAAA4+B,gBAAA/5a,EAAAu0Z,cAAAn6a,GAAA85c,GACA3tL,EAAA1pR,KAAAG,MAAAm+Z,EAAA0oB,UAAAM;AAGAwvB,GAAAzgL,EAAAkuB,EAAA+iI,EAFAuvB,GAAAntL,EAAAwuJ,EAAAj0a,EAAAinc,EAAAp5b,EAAA,OACA+kc,GAAAntL,EAAAwuJ,EAAAzpa,EAAAy8b,EAAAltc,EAAA,QAEA,CACAmlB,EAAAo1b,eAAAh0J,EAAAvqT,EAAAq8R,EAAAr8R,EAAAq8R,EAAAv4R,EAAAymT,EAAAzmT,EAAAymT,EAAAxoT,EAAAs6R,EAAAt6R,EAAAs6R,EAAAn+Q,EAAAqsS,EAAArsS,GACAiL,EAAA+0b,iBA6DA,SAAA/0b,EAAAsja,EAAAzoa,GACA,MAAA+6J,EAAA,GACAo/R,EAAAh1b,EAAA80b,aAAAz6c,OACA04C,EAAA/yB,EAAAlkB,SACA+4c,kBAAYA,EAAA51b,WAA+B8zB,EAAA+gY,YAC3CigC,EAAA,CACAniP,MAAA2hP,GAAAxga,GAAA,EACAmha,gBAAAW,EAAA15C,EAAA7rP,GAAA0lS,EAAA;AAEA,IAAAz7M;AACA,QAAAn/P,EAAA,EAAmBA,EAAA46c,EAAgB56c,IAAA,CACnC25c,EAAAl5b,UAAAzgB,GACA25c,EAAA57b,KAAAmra,EAAAlpb;AACA,MAAA83J,EAAA4hT,GAAA9zb,EAAA5lB,EAAA25c;AACAn+R,EAAAl0K,KAAAwwJ,GACA,SAAAjzI,IACAizI,EAAAhhF,QAAAmjY,GAAAniT,EAAAqnG,GACArnG,EAAAhhF,UACAqoL,EAAArnG,GAGA,CACA,OAAA0jB,CACA,CAvBA,CA7DA51J,EAAAsja,EAAAzoa,EACA,CA5BA,CA4SA/gB,MAEAA,KAAAs7c,eAAA,QAEA,CACA,cAAAA,CAAAC,EAAAC,EAAAC,EAAAC,GACA17c,KAAAs6a,SAAAv3a,KAAAE,OAAAs4c,EAAAC,GAAA,GACAx7c,KAAAu6a,SAAAx3a,KAAAE,OAAAw4c,EAAAC,GAAA,GACA17c,KAAAm6c,aAAAp3c,KAAA8b,IAAA7e,KAAAm6c,YAAA,EAAAp3c,KAAA+b,IAAAy8b,EAAAC,EAAAC,EAAAC,GACA,CACA,aAAAjhC,CAAA1xa,GACA,MAAA4yc,EAAAt6C,EAAA6U,KAAAl2a,KAAAg7c,aAAAz6c,QAAA,GACAqsR,EAAA5sR,KAAAgC,QAAA4qR,YAAA;AACA,OAAAy0I,EAAA4+B,gBAAAl3b,EAAA4yc,EAAAt6C,EAAA0U,UAAAnpJ,GACA,CACA,6BAAAiuJ,CAAAl4a,GACA,GAAA0+Z,EAAAqQ,cAAA/ua,GACA,OAAAg1F;AAEA,MAAAikX,EAAA57c,KAAAm6c,aAAAn6c,KAAA8e,IAAA9e,KAAA6e;AACA,OAAA7e,KAAAgC,QAAAmP,SACAnR,KAAA8e,IAAAnc,GAAAi5c,GAEAj5c,EAAA3C,KAAA6e,KAAA+8b,CACA,CACA,6BAAAC,CAAAxzc,GACA,GAAAg5Z,EAAAqQ,cAAArpa,GACA,OAAAsvF;AAEA,MAAAmkX,EAAAzzc,GAAArI,KAAAm6c,aAAAn6c,KAAA8e,IAAA9e,KAAA6e;AACA,OAAA7e,KAAAgC,QAAAmP,QAAAnR,KAAA8e,IAAAg9b,EAAA97c,KAAA6e,IAAAi9b,CACA,CACA,oBAAAV,CAAAryc,GACA,MAAAixa,EAAAh6a,KAAAg7c,cAAA;AACA,GAAAjyc,GAAA,GAAAA,EAAAixa,EAAAz5a,OAAA,CACA,MAAAw7c,EAAA/hC,EAAAjxa;AACA,OA7HA,SAAA+e,EAAA/e,EAAAy+J,GACA,OAAA65P,EAAAzjH,cAAA91R,EAAA,CACA0/I,QACAz+J,QACAjF,KAAA,cAEA,CANA,CA6HA9D,KAAAqqa,aAAAtha,EAAAgzc,EACA,CACA,CACA,gBAAAzB,CAAAvxc,EAAAizc,EAAA5B,EAAA,GACA,MAAA3tL,EAAAzsR,KAAAy6a,cAAA1xa,GAAAs4Z,EAAAmW,QAAA4iC;AACA,OACApzc,EAAAjE,KAAAwyK,IAAAk3G,GAAAuvL,EAAAh8c,KAAAs6a,QACA9oa,EAAAzO,KAAAi0a,IAAAvqJ,GAAAuvL,EAAAh8c,KAAAu6a,QACA9tJ,QAEA,CACA,wBAAAyuJ,CAAAnya,EAAApG,GACA,OAAA3C,KAAAs6c,iBAAAvxc,EAAA/I,KAAA66a,8BAAAl4a,GACA,CACA,eAAAs5c,CAAAlzc,GACA,OAAA/I,KAAAk7a,yBAAAnya,GAAA,EAAA/I,KAAAisb,eACA,CACA,qBAAAiwB,CAAAnzc,GACA,MAAA6E,KAAgBA,EAAAC,MAAAG,QAAAF,UAA+B9N,KAAAi7c,iBAAAlyc;AAC/C,OACA6E,OACAC,MACAG,QACAF,SAEA,CACA,cAAAmhb,GACA,MAAAliH,gBAAgBA,EAAAh2E,MAAAgjL,SAA0BA,IAAe/5a,KAAAgC;AACzD,GAAA+qU,EAAA,CACA,MAAAtyK,EAAAz6J,KAAAy6J;AACAA,EAAAp4C,OACAo4C,EAAA60R,YACAurB,GAAA76c,UAAA66a,8BAAA76a,KAAA+2c,WAAAh9B,EAAA/5a,KAAAg7c,aAAAz6c,QACAk6J,EAAAwkS,YACAxkS,EAAAq6Q,UAAA/nG,EACAtyK,EAAAitQ,OACAjtQ,EAAA8M,SACA,CACA,CACA,QAAA4nR,GACA,MAAA10R,EAAAz6J,KAAAy6J,IACAxhH,EAAAj5C,KAAAgC,SACA83a,WAAgBA,EAAA/iL,OAAA30E,UAA8BnpI,EAC9Co4Z,EAAArxc,KAAAg7c,aAAAz6c;AACA,IAAAD,EAAA0d,EAAA4N;AAeA,GAdAqtB,EAAA+gY,YAAA70Z,SA3NA,SAAAe,EAAAmrb,GACA,MAAA52S,IAAYA,EAAAz4J,SAAAg4a,YAAiBA,IAAkB9zZ;AAC/C,QAAA5lB,EAAA+wc,EAAA,EAAgC/wc,GAAA,EAAQA,IAAA,CACxC,MAAA83J,EAAAlyI,EAAA+0b,iBAAA36c;AACA,IAAA83J,EAAAhhF,QACA;AAEA,MAAAg2W,EAAApT,EAAA4L,WAAA1/Z,EAAAk1b,qBAAA96c;AACAk6c,GAAA//S,EAAA2yR,EAAAh1R;AACA,MAAAijT,EAAAh6C,EAAAkjB,OAAA6I,EAAA9I,OACAt9a,EAAgBA,EAAAwK,IAAA+lZ,aAAqBn/P;AACrCipQ,EAAAj4B,WAAA3uO,EAAAv0I,EAAA80b,aAAA16c,GAAA0G,EAAAwK,EAAA6pc,EAAA72B,WAAA,EAAA62B,EAAA,CACA/1c,MAAA8nb,EAAA9nb,MACAiyZ,YACA02B,aAAA,UAEA,CACA,CAjBA,CA4NAjub,KAAAqxc,GAEAt6M,EAAA5xO,SACAnlB,KAAA2va,MAAAn1Z,QAAA,CAAA6jJ,EAAAt1J,KACA,OAAAA,GAAA,IAAAA,GAAA/I,KAAA6e,IAAA,GACAb,EAAAhe,KAAA66a,8BAAAx8Q,EAAA17J;AACA,MAAAi2B,EAAA54B,KAAAqqa,WAAAtha,GACAqkb,EAAAr2L,EAAA6uL,WAAAhtZ,GACAy0Z,EAAAjrQ,EAAAwjQ,WAAAhtZ;CArMA,SAAA1S,EAAAi2b,EAAA92c,EAAAgsc,EAAA/kB,GACA,MAAA7xR,EAAAv0I,EAAAu0I,IACAs/Q,EAAAoiC,EAAApiC,UACAz0a,MAAYA,EAAAgwa,aAAqB6mC;CACjCpiC,IAAAs3B,IAAA/rc,IAAAgwa,GAAAjwa,EAAA,IAGAo1J,EAAAp4C,OACAo4C,EAAA+6Q,YAAAlwa,EACAm1J,EAAA66Q,YACA76Q,EAAA40R,YAAA/C,EAAAiB,MAAA,IACA9yR,EAAAy6Q,eAAAoX,EAAAkB,WACA/yR,EAAA60R,YACAurB,GAAA30b,EAAA7gB,EAAA00a,EAAAs3B,GACA52S,EAAAwkS,YACAxkS,EAAAg1R,SACAh1R,EAAA8M,UACA,CAjBA,CAsMAvnK,KAAAotb,EAAApva,EAAAqzb,EAAAhkB,EACA,IAGAvT,EAAA30Z,QAAA,CAEA,IADAs1I,EAAAp4C,OACA/hH,EAAA+wc,EAAA,EAAoC/wc,GAAA,EAAQA,IAAA,CAC5C,MAAA8sb,EAAAtT,EAAA8L,WAAA5lb,KAAAo7c,qBAAA96c,KACAgF,MAAwBA,EAAAgwa,aAAqB8X;AAC7C9X,GAAAhwa,IAGAm1J,EAAA66Q,YACA76Q,EAAA+6Q,YAAAlwa,EACAm1J,EAAA40R,YAAAjC,EAAAnY,YACAx6Q,EAAAy6Q,eAAAkY,EAAAjY,iBACAn3Z,EAAAhe,KAAA66a,8BAAA5hY,EAAA9nC,QAAAnR,KAAA6e,IAAA7e,KAAA8e,KACA8M,EAAA5rB,KAAAs6c,iBAAAh6c,EAAA0d,GACAy8I,EAAA60R,YACA70R,EAAA80R,OAAAvvb,KAAAs6a,QAAAt6a,KAAAu6a,SACA9/Q,EAAA+0R,OAAA5ja,EAAA5kB,EAAA4kB,EAAApa,GACAipJ,EAAAg1R,SACA,CACAh1R,EAAA8M,SACA,CACA,CACA,UAAAooR,GAAA,CACA,UAAAE,GACA,MAAAp1R,EAAAz6J,KAAAy6J,IACAxhH,EAAAj5C,KAAAgC,QACAwkb,EAAAvtY,EAAA02X;AACA,IAAA6W,EAAArha,QACA;AAEA,MAAAynQ,EAAA5sR,KAAAy6a,cAAA;AACA,IAAAz8Z,EAAAjQ;AACA0sJ,EAAAp4C,OACAo4C,EAAAx0I,UAAAjmB,KAAAs6a,QAAAt6a,KAAAu6a,SACA9/Q,EAAAt0I,OAAAymQ,GACAnyH,EAAA88P,UAAA,SACA98P,EAAAwzR,aAAA,SACAjub,KAAA2va,MAAAn1Z,QAAA,CAAA6jJ,EAAAt1J,KACA,OAAAA,GAAA/I,KAAA6e,KAAA,IAAAo6B,EAAA9nC,QACA;AAEA,MAAAi8a,EAAA5G,EAAAZ,WAAA5lb,KAAAqqa,WAAAtha,IACAoib,EAAA9pB,EAAAkjB,OAAA6I,EAAA9I;AAEA,GADAtma,EAAAhe,KAAA66a,8BAAA76a,KAAA2va,MAAA5ma,GAAApG,OACAyqb,EAAAwB,kBAAA,CACAn0R,EAAA6pR,KAAA6G,EAAA3yU,OACAzqG,EAAA0sJ,EAAA6wS,YAAAjtS,EAAAmJ,OAAAz5J,MACA0sJ,EAAAq6Q,UAAAsY,EAAA2B;AACA,MAAAhua,EAAAsgZ,EAAAke,UAAA6N,EAAA0B;AACAr0R,EAAAy0R,UAAAnhb,EAAA,EAAAgT,EAAAnT,MAAAoQ,EAAAmta,EAAA9sa,KAAA,EAAA0C,EAAAlT,IAAAE,EAAAgT,EAAAhT,MAAAo9a,EAAA9sa,KAAA0C,EAAAO,OACA,CACA+/Y,EAAAj4B,WAAA3uO,EAAA4D,EAAAmJ,MAAA,GAAAxpJ,EAAAmta,EAAA,CACA7lb,MAAA8nb,EAAA9nb,MACAgpb,YAAAlB,EAAAmB,gBACAC,YAAApB,EAAAqB,oBAGAh0R,EAAA8M,SACA,CACA,SAAA0oR,GAAA,EAGA,MAAAmsB,GAAA,CACA7iI,YAAA,CACA8iI,UACAh+b,KAAA,EACApJ,MAAA,KAEAuoB,OAAA,CACA6+a,UACAh+b,KAAA,IACApJ,MAAA,IAEAsoB,OAAA,CACA8+a,UACAh+b,KAAA,IACApJ,MAAA,IAEAqoB,KAAA,CACA++a,UACAh+b,KAAA,KACApJ,MAAA,IAEAioB,IAAA,CACAm/a,UACAh+b,KAAA,MACApJ,MAAA,IAEA+6G,KAAA,CACAqsV,UACAh+b,KAAA,OACApJ,MAAA,GAEAgoB,MAAA,CACAo/a,UACAh+b,KAAA,OACApJ,MAAA,IAEA86G,QAAA,CACAssV,UACAh+b,KAAA,OACApJ,MAAA,GAEA8nB,KAAA,CACAs/a,UACAh+b,KAAA,SAGAi+b,GAAAv0b,OAAA2wB,KAAA0ja;AACA,SAAAG,GAAAz7c,EAAAma,GACA,OAAAna,EAAAma,CACA,CACA,SAAA/E,GAAAgQ,EAAAtW,GACA,GAAAyxZ,EAAAqQ,cAAA9ha,GACA;AAEA,MAAA4sc,EAAAt2b,EAAAu2b,UACApjU,OAAYA,EAAAn2I,QAAAw5c,cAA+Bx2b,EAAAy2b;AAC3C,IAAAh6c,EAAAiN;AAOA,MANA,mBAAAypI,IACA12I,EAAA02I,EAAA12I,IAEA0+Z,EAAAsD,eAAAhia,KACAA,EAAA,iBAAA02I,EAAAmjU,EAAAtmc,MAAAvT,EAAA02I,GAAAmjU,EAAAtmc,MAAAvT,IAEA,OAAAA,EACA,MAEAO,IACAP,EAAA,SAAAO,IAAAm+Z,EAAA3sU,SAAAgoX,WAAAF,EAAAtkH,QAAAv1V,EAAAO,GAAAs5c,EAAAtkH,QAAAv1V,EAAA,UAAA+5c,KAEA/5c,EACA,CACA,SAAAi6c,GAAAC,EAAAh+b,EAAAC,EAAAg+b,GACA,MAAAz4C,EAAAi4C,GAAA/7c;AACA,QAAAD,EAAAg8c,GAAAzyc,QAAAgzc,GAAwCv8c,EAAA+ja,EAAA,IAAc/ja,EAAA,CACtD,MAAAosI,EAAA0vU,GAAAE,GAAAh8c,IACAquE,EAAA+9D,EAAAz3H,MAAAy3H,EAAAz3H,MAAA3J,OAAAk1G;AACA,GAAAksB,EAAA2vU,QAAAt5c,KAAAq3G,MAAAt7F,EAAAD,IAAA8vD,EAAA+9D,EAAAruH,QAAAy+b,EACA,OAAAR,GAAAh8c,EAEA,CACA,OAAAg8c,GAAAj4C,EAAA,EACA,CAiBA,SAAA04C,GAAAptC,EAAAnna,EAAAw0c,GACA,GAAAA,GAEM,GAAAA,EAAAz8c,OAAA,CACN,MAAAopI,GAAgBA,EAAAhrF,MAAW0iX,EAAA47C,QAAAD,EAAAx0c;AAE3Bmna,EADAqtC,EAAArzU,IAAAnhI,EAAAw0c,EAAArzU,GAAAqzU,EAAAr+Z,MAEA,OALAgxX,EAAAnna,KAMA,CAcA,SAAA00c,GAAAh3b,EAAA8gC,EAAAm2Z,GACA,MAAAxtC,EAAA,GACA/rZ,EAAA,GACAygZ,EAAAr9W,EAAAzmD;AACA,IAAAD,EAAAqC;AACA,IAAArC,EAAA,EAAeA,EAAA+ja,IAAU/ja,EACzBqC,EAAAqkD,EAAA1mD,GACAsjB,EAAAjhB,GAAArC,EACAqva,EAAA/na,KAAA,CACAjF,QACAqlb;AAGA,WAAA3jB,GAAA84C,EA1BA,SAAAj3b,EAAAypZ,EAAA/rZ,EAAAu5b,GACA,MAAAX,EAAAt2b,EAAAu2b,SACA1qa,GAAAyqa,EAAAtkH,QAAAy3E,EAAA,GAAAhta,MAAAw6c,GACAjtR,EAAAy/O,IAAApva,OAAA,GAAAoC;AACA,IAAAqlb,EAAAj/a;AACA,IAAAi/a,EAAAj2Y,EAAuBi2Y,GAAA93P,EAAe83P,GAAAw0B,EAAA5ka,IAAAowY,EAAA,EAAAm1B,GACtCp0c,EAAA6a,EAAAoka,GACAj/a,GAAA,IACA4ma,EAAA5ma,GAAAi/a;AAGA,OAAArY,CACA,CAZA,CA0BAzpZ,EAAAypZ,EAAA/rZ,EAAAu5b,GAAAxtC,CACA,CACA,MAAAytC,WAAAx4B,GACApe,UAAA;AACAA,gBAAA,CACAnsZ,OAAA,OACAqha,SAAA,GACAlza,KAAA,CACA6wI,UACAz2I,QACAM,SACAw5c,cACAG,QAAA,cACAQ,eAAA,IAEA1tC,MAAA,CACAp/X,OAAA,OACA52B,YACAqua,MAAA,CACAvza;AAIA,WAAA6mE,CAAAhxB,GACA04G,MAAA14G,GACAtqD,KAAAova,OAAA,CACAniZ,KAAA,GACA49Y,OAAA,GACAnrY,IAAA,IAEA1/B,KAAAs9c,MAAA,MACAt9c,KAAAu9c,gBAAA9rb,EACAzxB,KAAAw9c,SAAA,GACAx9c,KAAAy9c,eACAz9c,KAAA28c,gBAAAlrb,CACA,CACA,IAAAshD,CAAA4lX,EAAA1/Y,EAAA,IACA,MAAAzwC,EAAAmwb,EAAAnwb,OAAAmwb,EAAAnwb,KAAA,IACAg0c,EAAAx8c,KAAAy8c,SAAA,IAAA/gC,EAAA7lS,MAAA8iT,EAAAjd,SAAAhhZ;AACA8hb,EAAAzpY,KAAA95B,GACAooX,EAAAizB,QAAA9rb,EAAA60c,eAAAb,EAAAz1Z,WACA/mD,KAAA28c,WAAA,CACAtjU,OAAA7wI,EAAA6wI,OACAn2I,MAAAsF,EAAAtF,MACAw5c,WAAAl0c,EAAAk0c,YAEA15S,MAAAjwF,KAAA4lX,GACA34b,KAAAy9c,YAAAxka,EAAAyka,UACA,CACA,KAAAxnc,CAAA64L,EAAAhmM,GACA,YAAA0oB,IAAAs9K,EACA,KAEA74L,GAAAlW,KAAA+uM,EACA,CACA,YAAAkxO,GACAj9Q,MAAAi9Q,eACAjgb,KAAAova,OAAA,CACAniZ,KAAA,GACA49Y,OAAA,GACAnrY,IAAA,GAEA,CACA,mBAAAonZ,GACA,MAAA9kb,EAAAhC,KAAAgC,QACAw6c,EAAAx8c,KAAAy8c,SACA75c,EAAAZ,EAAAwG,KAAA5F,MAAA;AACA,IAAAic,IAAcA,EAAAC,MAAA8sZ,aAAAC,cAAuC7ra,KAAA8ra;AACrD,SAAA6xC,EAAAtjc,GACAuxZ,GAAA3wV,MAAA5gE,EAAAwE,OACAA,EAAA9b,KAAA8b,MAAAxE,EAAAwE,MAEAgtZ,GAAA5wV,MAAA5gE,EAAAyE,OACAA,EAAA/b,KAAA+b,MAAAzE,EAAAyE,KAEA,CACA8sZ,GAAAC,IACA8xC,EAAA39c,KAAA49c,mBACA,UAAA57c,EAAAqY,QAAA,WAAArY,EAAA2ta,MAAAp/X,QACAota,EAAA39c,KAAAura,gBAGA1sZ,EAAAwiZ,EAAAsD,eAAA9lZ,KAAAo8D,MAAAp8D,MAAA29b,EAAAtkH,QAAAv+S,KAAAmT,MAAAlqD,GACAkc,EAAAuiZ,EAAAsD,eAAA7lZ,KAAAm8D,MAAAn8D,MAAA09b,EAAA/gC,MAAA9hY,KAAAmT,MAAAlqD,GAAA,EACA5C,KAAA6e,IAAA9b,KAAA8b,MAAAC,EAAA,GACA9e,KAAA8e,IAAA/b,KAAA+b,IAAAD,EAAA,EAAAC,EACA,CACA,eAAA8+b,GACA,MAAAp8J,EAAAxhT,KAAA69c;AACA,IAAAh/b,EAAAvT,OAAAi9G,kBACAzpG,EAAAxT,OAAAk9G;AAKA,OAJAg5L,EAAAjhT,SACAse,EAAA2iS,EAAA,GACA1iS,EAAA0iS,IAAAjhT,OAAA,IAEA,CACAse,MACAC,MAEA,CACA,UAAAooa,GACA,MAAAllb,EAAAhC,KAAAgC,QACA87c,EAAA97c,EAAAwG,KACAg+a,EAAAxkb,EAAA2ta,MACAqtC,EAAA,WAAAx2B,EAAAj2Y,OAAAvwC,KAAA69c,qBAAA79c,KAAA+9c;AACA,UAAA/7c,EAAAqY,QAAA2ic,EAAAz8c,SACAP,KAAA6e,IAAA7e,KAAAslb,UAAA03B,EAAA,GACAh9c,KAAA8e,IAAA9e,KAAAqlb,UAAA23B,IAAAz8c,OAAA;AAEA,MAAAse,EAAA7e,KAAA6e,IACAC,EAAA9e,KAAA8e,IACA6wZ,EAAAtO,EAAA28C,eAAAhB,EAAAn+b,EAAAC;AAOA,OANA9e,KAAAs9c,MAAAQ,EAAAl7c,OAAA4jb,EAAAiB,SAAAm1B,GAAAkB,EAAAjB,QAAA78c,KAAA6e,IAAA7e,KAAA8e,IAAA9e,KAAAi+c,kBAAAp/b,IAnKA,SAAAqH,EAAAgja,EAAA2zB,EAAAh+b,EAAAC,GACA,QAAAxe,EAAAg8c,GAAA/7c,OAAA,EAAkCD,GAAAg8c,GAAAzyc,QAAAgzc,GAA6Bv8c,IAAA,CAC/D,MAAAsC,EAAA05c,GAAAh8c;AACA,GAAA87c,GAAAx5c,GAAAy5c,QAAAn2b,EAAAu2b,SAAAzwV,KAAAltG,EAAAD,EAAAjc,IAAAsmb,EAAA,EACA,OAAAtmb,CAEA,CACA,OAAA05c,GAAAO,EAAAP,GAAAzyc,QAAAgzc,GAAA,EACA,CARA,CAmKA78c,KAAA2va,EAAApva,OAAAu9c,EAAAjB,QAAA78c,KAAA6e,IAAA7e,KAAA8e,MACA9e,KAAAu9c,WAAA/2B,EAAAwB,MAAAvza,SAAA,SAAAzU,KAAAs9c,MA3JA,SAAA16c,GACA,QAAAtC,EAAAg8c,GAAAzyc,QAAAjH,GAAA,EAAAyha,EAAAi4C,GAAA/7c,OAA8DD,EAAA+ja,IAAU/ja,EACxE,GAAA87c,GAAAE,GAAAh8c,IAAA+7c,OACA,OAAAC,GAAAh8c,EAGA,CANA,CA2JAN,KAAAs9c,YAAA7rb,EACAzxB,KAAAk+c,YAAAlB,GACAh7c,EAAAmP,SACAw+Z,EAAAx+Z,UAEA+rc,GAAAl9c,KAAA2va,EAAA3va,KAAAu9c,WACA,CACA,aAAAl1B,GACArob,KAAAgC,QAAAm8c,qBACAn+c,KAAAk+c,YAAAl+c,KAAA2va,MAAA/rZ,IAAAy6I,MAAA17J,OAEA,CACA,WAAAu7c,CAAAlB,EAAA,IACA,IAEAjra,EAAAm+I,EAFAhxK,EAAA,EACAC,EAAA;AAEAnf,KAAAgC,QAAAgc,QAAAg/b,EAAAz8c,SACAwxC,EAAA/xC,KAAAo+c,mBAAApB,EAAA,IAEA99b,EADA,IAAA89b,EAAAz8c,OACA,EAAAwxC,GAEA/xC,KAAAo+c,mBAAApB,EAAA,IAAAjra,GAAA,EAEAm+I,EAAAlwL,KAAAo+c,mBAAApB,IAAAz8c,OAAA,IAEA4e,EADA,IAAA69b,EAAAz8c,OACA2vL,GAEAA,EAAAlwL,KAAAo+c,mBAAApB,IAAAz8c,OAAA;AAGA,MAAA4sb,EAAA6vB,EAAAz8c,OAAA;AACA2e,EAAAmiZ,EAAAyoB,YAAA5qa,EAAA,EAAAiua,GACAhua,EAAAkiZ,EAAAyoB,YAAA3qa,EAAA,EAAAgua,GACAntb,KAAAw9c,SAAA,CACAt+b,QACAC,MACAwvD,OAAA,GAAAzvD,EAAA,EAAAC,GAEA,CACA,SAAA4+b,GACA,MAAAvB,EAAAx8c,KAAAy8c,SACA59b,EAAA7e,KAAA6e,IACAC,EAAA9e,KAAA8e,IACA9c,EAAAhC,KAAAgC,QACA87c,EAAA97c,EAAAwG,KACA61c,EAAAP,EAAAl7c,MAAAg6c,GAAAkB,EAAAjB,QAAAh+b,EAAAC,EAAA9e,KAAAi+c,kBAAAp/b,IACA04b,EAAAl2C,EAAA4G,eAAAjma,EAAA2ta,MAAA4nC,SAAA,GACAp6a,EAAA,SAAAkhb,GAAAP,EAAApB,WACA4B,EAAAj9C,EAAA3sU,SAAAv3D,WACAwyY,EAAA;AACA,IACAnna,EAAA23I,EADApuG,EAAAlzB;AAMA,GAJAy/b,IACAvsa,GAAAyqa,EAAAtkH,QAAAnmT,EAAA,UAAA5U,IAEA4U,GAAAyqa,EAAAtkH,QAAAnmT,EAAAusa,EAAA,MAAAD,GACA7B,EAAAxwV,KAAAltG,EAAAD,EAAAw/b,GAAA,IAAA9G,EACA,UAAA72c,MAAAme,EAAA,QAAAC,EAAA,uCAAAy4b,EAAA,IAAA8G;AAEA,MAAArB,EAAA,SAAAh7c,EAAA2ta,MAAAp/X,QAAAvwC,KAAAu+c;AACA,IAAA/1c,EAAAupC,EAAAouG,EAAA,EAAqC33I,EAAAsW,EAAYtW,GAAAg0c,EAAA5ka,IAAApvC,EAAA+uc,EAAA8G,GAAAl+T,IACjD48T,GAAAptC,EAAAnna,EAAAw0c;AAKA,OAHAx0c,IAAAsW,GAAA,UAAA9c,EAAAqY,QAAA,IAAA8lI,GACA48T,GAAAptC,EAAAnna,EAAAw0c,GAEAj1b,OAAA2wB,KAAAi3X,GAAAx9Y,KAAAoqb,IAAA34b,IAAA5c,MACA,CACA,gBAAAmla,CAAAxpa,GACA,MAAA65c,EAAAx8c,KAAAy8c,SACAqB,EAAA99c,KAAAgC,QAAAwG;AACA,OAAAs1c,EAAAU,cACAhC,EAAA9ia,OAAA/2C,EAAAm7c,EAAAU,eAEAhC,EAAA9ia,OAAA/2C,EAAAm7c,EAAAT,eAAAoB,SACA,CACA,MAAA/ka,CAAA/2C,EAAA+2C,GACA,MACAqN,EADA/mD,KAAAgC,QACAwG,KAAA60c,eACAz6c,EAAA5C,KAAAs9c,MACAoB,EAAAhla,GAAAqN,EAAAnkD;AACA,OAAA5C,KAAAy8c,SAAA/ia,OAAA/2C,EAAA+7c,EACA,CACA,mBAAAC,CAAAn2c,EAAAO,EAAA4ma,EAAAj2X,GACA,MAAA13C,EAAAhC,KAAAgC,QACA2E,EAAA3E,EAAA2ta,MAAAh2Z;AACA,GAAAhT,EACA,OAAA06Z,EAAA1nZ,SAAAhT,EAAA,CACA6B,EACAO,EACA4ma,GACA3va;AAEA,MAAA+mD,EAAA/kD,EAAAwG,KAAA60c,eACAz6c,EAAA5C,KAAAs9c,MACAH,EAAAn9c,KAAAu9c,WACAqB,EAAAh8c,GAAAmkD,EAAAnkD,GACAi8c,EAAA1B,GAAAp2Z,EAAAo2Z,GACA9+S,EAAAsxQ,EAAA5ma,GACAi/a,EAAAm1B,GAAA0B,GAAAxgT,KAAA2pR;AACA,OAAAhob,KAAAy8c,SAAA/ia,OAAAlxC,EAAAkxC,IAAAsuY,EAAA62B,EAAAD,GACA,CACA,kBAAA51B,CAAArZ,GACA,IAAArva,EAAA+ja,EAAAhmQ;AACA,IAAA/9J,EAAA,EAAA+ja,EAAAsL,EAAApva,OAAwCD,EAAA+ja,IAAU/ja,EAClD+9J,EAAAsxQ,EAAArva,GACA+9J,EAAAmJ,MAAAxnK,KAAA2+c,oBAAAtgT,EAAA17J,MAAArC,EAAAqva,EAEA,CACA,kBAAAyuC,CAAAz7c,GACA,cAAAA,EAAAg1F,KAAAh1F,EAAA3C,KAAA6e,MAAA7e,KAAA8e,IAAA9e,KAAA6e,IACA,CACA,gBAAA6wZ,CAAA/sa,GACA,MAAA6oB,EAAAxrB,KAAAw9c,SACAlja,EAAAt6C,KAAAo+c,mBAAAz7c;AACA,OAAA3C,KAAAmza,oBAAA3nZ,EAAAtM,MAAAo7B,GAAA9uB,EAAAmjD,OACA,CACA,gBAAA0kW,CAAAwY,GACA,MAAArga,EAAAxrB,KAAAw9c,SACAlja,EAAAt6C,KAAAgsb,mBAAAH,GAAArga,EAAAmjD,OAAAnjD,EAAArM;AACA,OAAAnf,KAAA6e,IAAAy7B,GAAAt6C,KAAA8e,IAAA9e,KAAA6e,IACA,CACA,aAAAigc,CAAAt3S,GACA,MAAAu3S,EAAA/+c,KAAAgC,QAAA2ta,MACAqvC,EAAAh/c,KAAAy6J,IAAA6wS,YAAA9jS,GAAAz5J,MACA0+Q,EAAA40I,EAAA0U,UAAA/1a,KAAAuxW,eAAAwtG,EAAA31B,YAAA21B,EAAA51B,aACA81B,EAAAl8c,KAAAwyK,IAAAk3G,GACAyyL,EAAAn8c,KAAAi0a,IAAAvqJ,GACA0yL,EAAAn/c,KAAAwrb,wBAAA,GAAAnta;AACA,OACAxJ,EAAAmqc,EAAAC,EAAAE,EAAAD,EACAn+c,EAAAi+c,EAAAE,EAAAC,EAAAF,EAEA,CACA,iBAAAhB,CAAAmB,GACA,MAAAtB,EAAA99c,KAAAgC,QAAAwG,KACA60c,EAAAS,EAAAT,eACA3ja,EAAA2ja,EAAAS,EAAAl7c,OAAAy6c,EAAA9jI,YACA8lI,EAAAr/c,KAAA2+c,oBAAAS,EAAA,EAAAlC,GAAAl9c,KAAA,CACAo/c,GACAp/c,KAAAu9c,YAAA7ja,GACAr7B,EAAAre,KAAA8+c,cAAAO,GACAvC,EAAA/5c,KAAAE,MAAAjD,KAAAuxW,eAAAvxW,KAAA+N,MAAAsQ,EAAAxJ,EAAA7U,KAAAshB,OAAAjD,EAAAtd,GAAA;AACA,OAAA+7c,EAAA,EAAAA,EAAA,CACA,CACA,iBAAAyB,GACA,IACAj+c,EAAA+ja,EADA24C,EAAAh9c,KAAAova,OAAAniZ,MAAA;AAEA,GAAA+vb,EAAAz8c,OACA,OAAAy8c;AAEA,MAAAh3B,EAAAhmb,KAAAqla;AACA,GAAArla,KAAAy9c,aAAAz3B,EAAAzlb,OACA,OAAAP,KAAAova,OAAAniZ,KAAA+4Z,EAAA,GAAAzgB,WAAAyG,mBAAAhsa;AAEA,IAAAM,EAAA,EAAA+ja,EAAA2hB,EAAAzlb,OAAwCD,EAAA+ja,IAAU/ja,EAClD08c,IAAAvqc,OAAAuza,EAAA1lb,GAAAila,WAAAyG,mBAAAhsa;AAEA,OAAAA,KAAAova,OAAAniZ,KAAAjtB,KAAA+oS,UAAAi0K,EACA,CACA,kBAAAa,GACA,MAAAb,EAAAh9c,KAAAova,OAAAvE,QAAA;AACA,IAAAvqa,EAAA+ja;AACA,GAAA24C,EAAAz8c,OACA,OAAAy8c;AAEA,MAAAnyC,EAAA7qa,KAAA8qa;AACA,IAAAxqa,EAAA,EAAA+ja,EAAAwG,EAAAtqa,OAAyCD,EAAA+ja,IAAU/ja,EACnD08c,EAAAp1c,KAAAsO,GAAAlW,KAAA6qa,EAAAvqa;AAEA,OAAAN,KAAAova,OAAAvE,OAAA7qa,KAAAy9c,YAAAT,EAAAh9c,KAAA+oS,UAAAi0K,EACA,CACA,SAAAj0K,CAAA/hP,GACA,OAAAq6W,EAAAkO,aAAAvoX,EAAA70B,KAAAoqb,IACA,EAGA,SAAAl5E,GAAAqwB,EAAAvgX,EAAAhiC,GACA,IAEAmuc,EAAAC,EAAAC,EAAAC,EAFA91U,EAAA,EACAhrF,EAAA+0W,EAAAnzZ,OAAA;AAEA4Q,GACAgiC,GAAAugX,EAAA/pR,GAAArvF,KAAAnH,GAAAugX,EAAA/0W,GAAArE,OACeqvF,KAAAhrF,MAAW0iX,EAAA2a,aAAAtoB,EAAA,MAAAvgX,MAEfmH,IAAAgla,EAAA92c,KAAAg3c,GAAsC9rD,EAAA/pR,MACtCrvF,IAAAila,EAAA/2c,KAAAi3c,GAAsC/rD,EAAA/0W,MAEjDxL,GAAAugX,EAAA/pR,GAAAnhI,MAAA2qC,GAAAugX,EAAA/0W,GAAAn2C,QACemhI,KAAAhrF,MAAW0iX,EAAA2a,aAAAtoB,EAAA,OAAAvgX,MAEf3qC,KAAA82c,EAAAhla,IAAAkla,GAAsC9rD,EAAA/pR,MACtCnhI,KAAA+2c,EAAAjla,IAAAmla,GAAsC/rD,EAAA/0W;AAEjD,MAAAmzS,EAAAytH,EAAAD;AACA,OAAAxtH,EAAA0tH,GAAAC,EAAAD,IAAArsa,EAAAmsa,GAAAxtH,EAAA0tH,CACA,CACA,MAAAE,WAAAtC,GACA52C,UAAA;AACAA,gBAAA42C,GAAA5yZ;AACA,WAAA8wB,CAAAhxB,GACA04G,MAAA14G,GACAtqD,KAAA2/c,OAAA,GACA3/c,KAAA4/c,aAAAnub,EACAzxB,KAAA6/c,iBAAApub,CACA,CACA,WAAAysb,GACA,MAAAlB,EAAAh9c,KAAA8/c,yBACApsD,EAAA1zZ,KAAA2/c,OAAA3/c,KAAA+/c,iBAAA/C;AACAh9c,KAAA4/c,QAAAv8E,GAAAqwB,EAAA1zZ,KAAA6e,KACA7e,KAAA6/c,YAAAx8E,GAAAqwB,EAAA1zZ,KAAA8e,KAAA9e,KAAA4/c,QACA58S,MAAAk7S,YAAAlB,EACA,CACA,gBAAA+C,CAAA/C,GACA,MAAAn+b,IAAgBA,EAAAC,OAAa9e,KAC7B87K,EAAA,GACA43O,EAAA;AACA,IAAApzZ,EAAA+ja,EAAA5zJ,EAAAw7C,EAAAhzN;AACA,IAAA34F,EAAA,EAAA+ja,EAAA24C,EAAAz8c,OAA6CD,EAAA+ja,IAAU/ja,EACvD2rT,EAAA+wJ,EAAA18c,GACA2rT,GAAAptS,GAAAotS,GAAAntS,GACAg9J,EAAAl0K,KAAAqkT;AAGA,GAAAnwI,EAAAv7K,OAAA,EACA,OACA,CACAiI,KAAAqW,EACAy7B,IAAA,GAEA,CACA9xC,KAAAsW,EACAw7B,IAAA;AAIA,IAAAh6C,EAAA,EAAA+ja,EAAAvoP,EAAAv7K,OAAwCD,EAAA+ja,IAAU/ja,EAClD24F,EAAA6iF,EAAAx7K,EAAA,GACAmwQ,EAAA30F,EAAAx7K,EAAA,GACA2rT,EAAAnwI,EAAAx7K,GACAyC,KAAAG,OAAA+1F,EAAAw3K,GAAA,KAAAw7C,GACAynG,EAAA9rZ,KAAA,CACAY,KAAAyjT,EACA3xQ,IAAAh6C,GAAA+ja,EAAA;AAIA,OAAA3Q,CACA,CACA,SAAAqqD,GACA,MAAAl/b,EAAA7e,KAAA6e,IACAC,EAAA9e,KAAA8e;AACA,IAAAk+b,EAAAh6S,MAAAu7S;AAOA,OANAvB,EAAAj4c,SAAA8Z,IAAAm+b,EAAAz8c,QACAy8c,EAAAlzc,OAAA,IAAA+U,GAEAm+b,EAAAj4c,SAAA+Z,IAAA,IAAAk+b,EAAAz8c,QACAy8c,EAAAp1c,KAAAkX,GAEAk+b,EAAA7qb,KAAA,CAAArxB,EAAAma,IAAAna,EAAAma,EACA,CACA,sBAAA6kc,GACA,IAAA9C,EAAAh9c,KAAAova,OAAA1vY,KAAA;AACA,GAAAs9a,EAAAz8c,OACA,OAAAy8c;AAEA,MAAA/vb,EAAAjtB,KAAAu+c,oBACA/2S,EAAAxnK,KAAA69c;AAOA,OALAb,EADA/vb,EAAA1sB,QAAAinK,EAAAjnK,OACAP,KAAA+oS,UAAA97Q,EAAAxa,OAAA+0J,IAEAv6I,EAAA1sB,OAAA0sB,EAAAu6I,EAEAw1S,EAAAh9c,KAAAova,OAAA1vY,IAAAs9a,EACAA,CACA,CACA,kBAAAoB,CAAAz7c,GACA,OAAA0gY,GAAArjY,KAAA2/c,OAAAh9c,GAAA3C,KAAA4/c,SAAA5/c,KAAA6/c,WACA,CACA,gBAAAxsC,CAAAwY,GACA,MAAArga,EAAAxrB,KAAAw9c,SACAvla,EAAAj4C,KAAAgsb,mBAAAH,GAAArga,EAAAmjD,OAAAnjD,EAAArM;AACA,OAAAkkX,GAAArjY,KAAA2/c,OAAA1na,EAAAj4C,KAAA6/c,YAAA7/c,KAAA4/c,WACA,EAGA,IAAA15C,GAAAn+Y,OAAA4jE,OAAA,CACAgQ,UAAA,KACA46W,iBACAmC,eACAS,oBACA2B,qBACAsC,aACAsC;AAGA,MAAAt+C,GAAA,CACAga,EACAj5Z,GACAioT,GACA87F;AAGA7sX,EAAAs/Z,MAAat3C,EAAAs3C,MACbt/Z,EAAAmR,SAAgB62W,EAAA72W,SAChBnR,EAAAmpX,UAAiBA,EACjBnpX,EAAA8pX,WAAkBA,EAClB9pX,EAAA6lZ,WAAkBA,GAClB7lZ,EAAAw3X,cAAqBA,EACrBx3X,EAAA2qZ,WAAkBA,GAClB3qZ,EAAAinY,aAAoBA,GACpBjnY,EAAAynY,cAAqBA,GACrBznY,EAAAw6X,iBAAwBA,EACxBx6X,EAAAk9Z,cAAqBA,GACrBl9Z,EAAA8nX,MAAaA,GACb9nX,EAAA68Z,OAAclR,GACd3rZ,EAAAktX,kBAAyBA,EACzBltX,EAAA88Z,WAAkB5Q,GAClBlsZ,EAAAkpY,YAAmBA,GACnBlpY,EAAA26X,mBAA0BA,EAC1B36X,EAAA10B,QAAeA,GACf00B,EAAA+8Z,OAAcrtc,GACdswC,EAAAy6O,YAAmBA,EACnBz6O,EAAAixZ,OAAcuD,GACdx0Z,EAAAq/X,eAAsBA,EACtBr/X,EAAAyoZ,YAAmBA,GACnBzoZ,EAAAq/Z,YAAmBA,GACnBr/Z,EAAA8/Z,iBAAwBA,GACxB9/Z,EAAAyhY,cAAqBA,EACrBzhY,EAAA2pZ,aAAoBA,GACpB3pZ,EAAAwgY,oBAA2BA,EAC3BxgY,EAAA0hY,gBAAuBA,EACvB1hY,EAAAyha,kBAAyBA,GACzBzha,EAAAurY,MAAaA,GACbvrY,EAAA8hY,kBAAyBA,EACzB9hY,EAAAg9Z,SAAgB/H,GAChBj1Z,EAAA+ja,UAAiBA,GACjB/ja,EAAAqma,gBAAuBA,GACvBrma,EAAA00Z,MAAaK,GACb/0Z,EAAA44Z,QAAe6D,GACfz8Z,EAAA2ma,UAAiBtkC,EACjBriY,EAAA2pY,gBAAuBA,GACvB3pY,EAAAonI,SAAgBA,EAChBpnI,EAAA+hY,YAAmBA,EACnB/hY,EAAAl3B,SAAgBA,GAChBk3B,EAAA6lY,QAAeA,GACf7lY,EAAA+wR,QAAeA,GACf/wR,EAAA+nX,cAAqBA,GACrB/nX,EAAAq3M,SAAgBA,GAChBr3M,EAAA6sX,OAAcA;ACr3Wd,IAAA+5C,EAAcx0X,EAAQ;AAUtB,MAAAqmP,EAAA,MACA,IAAA9yR,EAAA;AACA,UAAAA,GACC,EAHD;AAQA,SAAA0yX,EAAA/ua,GACA,OAAAA,OACA,CAKA,SAAAxC,EAAAwC,GACA,GAAAkR,MAAA1T,SAAA0T,MAAA1T,QAAAwC,GACA;AAEA,MAAAmB,EAAAikB,OAAA9iB,UAAAoL,SAAAzF,KAAAjI;AACA,kBAAAmB,EAAA1D,MAAA,iBAAA0D,EAAA1D,OAAA,EAIA,CAKA,SAAAy0G,EAAAlyG,GACA,cAAAA,GAAA,oBAAAolB,OAAA9iB,UAAAoL,SAAAzF,KAAAjI,EACA,CAIA,SAAAgia,EAAAhia,GACA,wBAAAA,gBAAA2I,SAAAqd,UAAAhmB,EACA,CAYA,SAAAsla,EAAAtla,EAAA05S,GACA,gBAAA15S,EAAA05S,EAAA15S,CACA,CACA,MACA+0a,EAAA,CAAA/0a,EAAAu9c,IAAA,iBAAAv9c,KAAAkrZ,SAAA,KAAA1lY,WAAAxlB,GAAA,IAAAu9c,GAAAv9c;AAuDA,SAAAo2K,EAAAxoI,GACA,GAAApwC,EAAAowC,GACA,OAAAA,EAAA3sB,IAAAm1J;AAEA,GAAAlkE,EAAAtkE,GAAA,CACA,MAAA/mC,EAAAue,OAAAxjB,OAAA,MACAm0C,EAAA3wB,OAAA2wB,KAAAnI,GACA4va,EAAAzna,EAAAn4C;AACA,IAAAmb,EAAA;AACA,KAAcA,EAAAykc,IAAUzkc,EACxBlS,EAAAkvC,EAAAh9B,IAAAq9J,EAAAxoI,EAAAmI,EAAAh9B;AAEA,OAAAlS,CACA,CACA,OAAA+mC,CACA,CACA,SAAA62Q,EAAAnuR,GACA,OAIA,IAJA,CACA,YACA,YACA,eACApvB,QAAAovB,EACA,CAKA,SAAAmnb,EAAAnnb,EAAAzvB,EAAA+mC,EAAAvuC,GACA,IAAAolT,EAAAnuR,GACA;AAEA,MAAA4/O,EAAArvQ,EAAAyvB,GACAonb,EAAA9va,EAAAtX;AACA47E,EAAAgkK,IAAAhkK,EAAAwrW,GAEApyJ,EAAAp1C,EAAAwnM,EAAAr+c,GAEAwH,EAAAyvB,GAAA8/I,EAAAsnS,EAEA,CACA,SAAApyJ,EAAAzkT,EAAA+mC,EAAAvuC,GACA,MAAA+vQ,EAAA5xQ,EAAAowC,KAAA,CACAA,GAEA8zX,EAAAtyJ,EAAAxxQ;AACA,IAAAs0G,EAAArrG,GACA,OAAAA;AAGA,MAAA82c,GADAt+c,KAAA,IACAs+c,QAAAF;AACA,IAAA3xY;AACA,QAAAnuE,EAAA,EAAmBA,EAAA+ja,IAAU/ja,EAAA,CAE7B,GADAmuE,EAAAsjM,EAAAzxQ,IACAu0G,EAAApmC,GACA;AAEA,MAAA/1B,EAAA3wB,OAAA2wB,KAAA+1B;AACA,QAAA/yD,EAAA,EAAAykc,EAAAzna,EAAAn4C,OAA2Cmb,EAAAykc,IAAUzkc,EACrD4kc,EAAA5na,EAAAh9B,GAAAlS,EAAAilE,EAAAzsE,EAEA,CACA,OAAAwH,CACA,CACA,SAAA8qb,EAAA9qb,EAAA+mC,GAEA,OAAA09Q,EAAAzkT,EAAA+mC,EAAA,CACA+va,OAAAC,GAEA,CAIA,SAAAA,EAAAtnb,EAAAzvB,EAAA+mC,GACA,IAAA62Q,EAAAnuR,GACA;AAEA,MAAA4/O,EAAArvQ,EAAAyvB,GACAonb,EAAA9va,EAAAtX;AACA47E,EAAAgkK,IAAAhkK,EAAAwrW,GACA/rB,EAAAz7K,EAAAwnM,GACMt4b,OAAA9iB,UAAA4N,eAAAjI,KAAApB,EAAAyvB,KACNzvB,EAAAyvB,GAAA8/I,EAAAsnS,GAEA,CASA,MAAAG,EAAA,CAEA,GAAAlvc,KAEAtK,EAAApG,KAAAoG,EACAwK,EAAA5Q,KAAA4Q;AAIA,SAAAivc,EAAAxnb,GACA,MAAA6uB,EAAA7uB,EAAAhhB,MAAA,KACAygC,EAAA;AACA,IAAAmqV,EAAA;AACA,UAAA96U,KAAAD,EACA+6U,GAAA96U,EACA86U,EAAAgrB,SAAA,MACAhrB,IAAAziY,MAAA,WAEAs4C,EAAA9wC,KAAAi7X,GACAA,EAAA;AAGA,OAAAnqV,CACA,CAaA,SAAAwyX,EAAAr5X,EAAA5Y,GACA,MAAAy8Z,EAAA8qB,EAAAvnb,KAAAunb,EAAAvnb,GAbA,SAAAA,GACA,MAAAyf,EAAA+na,EAAAxnb;AACA,OAAA4Y,IACA,UAAAn2B,KAAAg9B,EAAA,CACA,QAAAh9B,EACA;AAEAm2B,OAAAn2B,EACA,CACA,OAAAm2B,EAEA,CAXA,CAaA5Y;AACA,OAAAy8Z,EAAA7jZ,EACA,CAGA,SAAAygZ,EAAAr0Z,GACA,OAAAA,EAAAl6B,OAAA,GAAAC,cAAAi6B,EAAA79B,MAAA,EACA,CACA,MACA2lG,EAAApjG,GAAA,mBAAAA,EAuBA6yK,EAAAzyK,KAAAyyK,GACA0gQ,EAAA,EAAA1gQ,EACAkrS,EAAAxqC,EAAA1gQ,EACAmrS,EAAAr1c,OAAAi9G,kBACAq4V,EAAAprS,EAAA,IACAgiQ,EAAAhiQ,EAAA,EACAqrS,EAAArrS,EAAA,EACAsrS,EAAA,EAAAtrS,EAAA,EACAqjS,EAAA91c,KAAA81c,MACA9ga,EAAAh1C,KAAAg1C;AACA,SAAAuga,EAAAtxc,EAAAwK,EAAAwya,GACA,OAAAjhb,KAAAqN,IAAApJ,EAAAwK,GAAAwya,CACA,CA4FA,SAAA4qB,EAAA7xB,EAAAC,GACA,OAAAj6a,KAAA0mR,KAAA1mR,KAAAC,IAAAg6a,EAAAh2a,EAAA+1a,EAAA/1a,EAAA,GAAAjE,KAAAC,IAAAg6a,EAAAxra,EAAAura,EAAAvra,EAAA,GACA,CAIA,SAAAuvc,EAAAjgd,EAAAma,GACA,OAAAna,EAAAma,EAAAylc,GAAAxqC,EAAA1gQ,CACA,CAIA,SAAAyqR,EAAAn/b,GACA,OAAAA,EAAAo1a,MACA,CAGA,SAAAkB,EAAA3qJ,EAAAvtQ,EAAAC,EAAA6hc,GACA,MAAAlgd,EAAAm/b,EAAAxzK,GACAjqR,EAAAy9b,EAAA/gb,GACA7e,EAAA4/b,EAAA9gb,GACA8hc,EAAAhhB,EAAAz9b,EAAA1B,GACAogd,EAAAjhB,EAAA5/b,EAAAS,GACAqgd,EAAAlhB,EAAAn/b,EAAA0B,GACA4+c,EAAAnhB,EAAAn/b,EAAAT;AACA,OAAAS,IAAA0B,GAAA1B,IAAAT,GAAA2gd,GAAAx+c,IAAAnC,GAAA4gd,EAAAC,GAAAC,EAAAC,CACA,CAOA,SAAAt3B,EAAAnnb,EAAAkc,EAAAC,GACA,OAAA/b,KAAA+b,IAAAD,EAAA9b,KAAA8b,IAAAC,EAAAnc,GACA,CAaA,SAAAg9b,EAAAh9b,EAAAuc,EAAAC,EAAA6ka,EAAA,MACA,OAAArhb,GAAAI,KAAA8b,IAAAK,EAAAC,GAAA6ka,GAAArhb,GAAAI,KAAA+b,IAAAI,EAAAC,GAAA6ka,CACA,CAEA,SAAAi5B,EAAAvpD,EAAA/wZ,EAAA+1U,GACAA,KAAA,CAAA3vU,GAAA2qZ,EAAA3qZ,GAAApG;AACA,IAEA0+c,EAFA1ia,EAAA+0W,EAAAnzZ,OAAA,EACAopI,EAAA;AAEA,KAAAhrF,EAAAgrF,EAAA,GACA03U,EAAA13U,EAAAhrF,GAAA,EACA+5R,EAAA2oI,GACA13U,EAAA03U,EAEA1ia,EAAA0ia;AAGA,OACA13U,KACAhrF,KAEA,CAQA,MAAAq9X,EAAA,CAAAtoB,EAAAz6X,EAAAt2B,EAAAutL,IAAA+sR,EAAAvpD,EAAA/wZ,EAAAutL,EAAAnnL,IACA,MAAAu4c,EAAA5tD,EAAA3qZ,GAAAkwB;AACA,OAAAqob,EAAA3+c,GAAA2+c,IAAA3+c,GAAA+wZ,EAAA3qZ,EAAA,GAAAkwB,KAAAt2B,GACMoG,GAAA2qZ,EAAA3qZ,GAAAkwB,GAAAt2B,GAyBN4+c,EAAA,CACA,OACA,MACA,QACA,SACA,WAmEAz/C,EACA,oBAAAr4Z,OACA,SAAAkQ,GACA,OAAAA,GACA,EAEAlQ,OAAAsmB,sBA+GAyxb,EAAA1id,GAAA,IAAAA,GAAA,IAAAA,EACA2id,EAAA,CAAA3id,EAAA0D,EAAAqC,KAAA9B,KAAAC,IAAA,MAAAlE,GAAA,IAAAiE,KAAAi0a,KAAAl4a,EAAA0D,GAAA0za,EAAArxa,GACA68c,EAAA,CAAA5id,EAAA0D,EAAAqC,IAAA9B,KAAAC,IAAA,MAAAlE,GAAAiE,KAAAi0a,KAAAl4a,EAAA0D,GAAA0za,EAAArxa,GAAA,EAKA+9Z,EAAA,CACAC,OAAA/ja,KACA6id,WAAA7id,OACA8id,YAAA9id,SAAA,GACA+id,cAAA/id,OAAA,SAAAA,KAAA,MAAAA,KAAA,MACAgjd,YAAAhjd,SACAijd,aAAAjjd,OAAA,GAAAA,IAAA,EACAkjd,eAAAljd,OAAA,SAAAA,MAAA,KAAAA,GAAA,GAAAA,IAAA,GACAmjd,YAAAnjd,WACAojd,aAAApjd,SAAA,GAAAA,MAAA,GACAqjd,eAAArjd,OAAA,SAAAA,SAAA,KAAAA,GAAA,GAAAA,MAAA,GACAsjd,YAAAtjd,aACAujd,aAAAvjd,OAAA,GAAAA,QAAA,EACAwjd,eAAAxjd,OAAA,SAAAA,UAAA,KAAAA,GAAA,GAAAA,QAAA,GACAyjd,WAAAzjd,GAAA,EAAAiE,KAAAwyK,IAAAz2K,EAAA04a,GACAgrC,YAAA1jd,GAAAiE,KAAAi0a,IAAAl4a,EAAA04a,GACAirC,cAAA3jd,IAAA,IAAAiE,KAAAwyK,IAAAC,EAAA12K,GAAA,GACA4jd,WAAA5jd,GAAA,IAAAA,EAAA,EAAAiE,KAAAC,IAAA,MAAAlE,EAAA,IACA6jd,YAAA7jd,GAAA,IAAAA,EAAA,IAAAiE,KAAAC,IAAA,MAAAlE,GACA8jd,cAAA9jd,GAAA0id,EAAA1id,OAAA,MAAAiE,KAAAC,IAAA,QAAAlE,EAAA,UAAAiE,KAAAC,IAAA,SAAAlE,EAAA,KACA+jd,WAAA/jd,MAAA,EAAAA,IAAAiE,KAAA0mR,KAAA,EAAA3qR,KAAA,GACAgkd,YAAAhkd,GAAAiE,KAAA0mR,KAAA,GAAA3qR,GAAA,GAAAA,GACAikd,cAAAjkd,OAAA,WAAAiE,KAAA0mR,KAAA,EAAA3qR,KAAA,OAAAiE,KAAA0mR,KAAA,GAAA3qR,GAAA,GAAAA,GAAA,GACAkkd,cAAAlkd,GAAA0id,EAAA1id,KAAA2id,EAAA3id,EAAA,SACAmkd,eAAAnkd,GAAA0id,EAAA1id,KAAA4id,EAAA5id,EAAA,SACA,gBAAAokd,CAAApkd,GACA,MAAA0D,EAAA;AAEA,OAAAg/c,EAAA1id,OAAA,MAAA2id,EAAA,EAAA3id,EAAA0D,EADA,KACA,MAAAk/c,EAAA,EAAA5id,EAAA,EAAA0D,EADA,IAEA,EACA,UAAA2gd,CAAArkd,GACA,MAAA0D,EAAA;AACA,OAAA1D,MAAA0D,EAAA,GAAA1D,EAAA0D,EACA,EACA,WAAA4gd,CAAAtkd,GACA,MAAA0D,EAAA;AACA,OAAA1D,GAAA,GAAAA,IAAA0D,EAAA,GAAA1D,EAAA0D,GAAA,CACA,EACA,aAAA6gd,CAAAvkd,GACA,IAAA0D,EAAA;AACA,OAAA1D,GAAA,MACAA,MAAA,GAAA0D,GAAA,QAAA1D,EAAA0D,GAAA,GAEA,KAAA1D,GAAA,GAAAA,IAAA,GAAA0D,GAAA,QAAA1D,EAAA0D,GAAA,EACA,EACA8gd,aAAAxkd,GAAA,EAAA8ja,EAAA2gD,cAAA,EAAAzkd,GACA,aAAAykd,CAAAzkd,GACA,MAAAqL,EAAA,OACAxK,EAAA;AACA,OAAAb,EAAA,EAAAa,EACAwK,EAAArL,IAEAA,EAAA,EAAAa,EACAwK,GAAArL,GAAA,IAAAa,GAAAb,EAAA,IAEAA,EAAA,IAAAa,EACAwK,GAAArL,GAAA,KAAAa,GAAAb,EAAA,MAEAqL,GAAArL,GAAA,MAAAa,GAAAb,EAAA,OACA,EACA0kd,gBAAA1kd,KAAA,MAAA8ja,EAAA0gD,aAAA,EAAAxkd,GAAA,GAAA8ja,EAAA2gD,cAAA,EAAAzkd,EAAA;AAGA,SAAA2kd,EAAA9gd,GACA,GAAAA,GAAA,iBAAAA,EAAA,CACA,MAAAmB,EAAAnB,EAAA0N;AACA,iCAAAvM,GAAA,4BAAAA,CACA,CACA,QACA,CAIA,SAAA4/c,EAAA/gd,GACA,OAAA8gd,EAAA9gd,KAAA,IAAAs9c,EAAAl9E,MAAApgY,GAAAohY,SAAA,IAAAD,OAAA,IAAA9L,WACA,CAEA,MAAAi5C,EAAA,CACA,IACA,IACA,cACA,SACA,WAEA0yC,EAAA,CACA,QACA,cACA,mBAgFAC,EAAA,IAAAvsb;AAWA,SAAA6tB,EAAA4hE,EAAA/2E,EAAA/tC,GACA,OAXA,SAAA+tC,EAAA/tC,GACAA,KAAA;AACA,MAAAu2B,EAAAwX,EAAA95B,KAAA8iB,UAAA/2B;AACA,IAAA2E,EAAAi9c,EAAAt3b,IAAAiM;AAKA,OAJA5xB,IACAA,EAAA,IAAA2yC,KAAAqJ,aAAA5S,EAAA/tC,GACA4hd,EAAA/2b,IAAA0L,EAAA5xB,IAEAA,CACA,CATA,CAWAopC,EAAA/tC,GAAA03C,OAAAotE,EACA,CAEA,MAAAhgE,EAAA,CACAE,OAAArkD,GACAxC,EAAAwC,KAAA,GAAAA,EAEA,OAAAogD,CAAAy1Z,EAAAzvc,EAAA4ma,GACA,OAAA6oC,EACA;AAEA,MAAAzoa,EAAA/vC,KAAA0ha,MAAA1/Z,QAAA+tC;AACA,IAAAnR,EACAq8G,EAAAu9T;AACA,GAAA7oC,EAAApva,OAAA,GACA,MAAAsjd,EAAA9gd,KAAA+b,IAAA/b,KAAAqN,IAAAu/Z,EAAA,GAAAhta,OAAAI,KAAAqN,IAAAu/Z,IAAApva,OAAA,GAAAoC,SACAkhd,EAAA,MAAAA,EAAA,QACAjlb,EAAA,cAEAq8G,EA8BA,SAAAu9T,EAAA7oC,GACA,IAAA10R,EAAA00R,EAAApva,OAAA,EAAAova,EAAA,GAAAhta,MAAAgta,EAAA,GAAAhta,MAAAgta,EAAA,GAAAhta,MAAAgta,EAAA,GAAAhta;AAIA,OAHAI,KAAAqN,IAAA6qI,IAAA,GAAAu9T,IAAAz1c,KAAAE,MAAAu1c,KACAv9T,EAAAu9T,EAAAz1c,KAAAE,MAAAu1c,IAEAv9T,CACA,CANA,CA9BAu9T,EAAA7oC,EACA,CACA,MAAAm0C,EAAAjL,EAAA91c,KAAAqN,IAAA6qI,IACA8oU,EAAA9oY,MAAA6oY,GAAA,EAAA/gd,KAAA+b,IAAA/b,KAAA8b,KAAA,EAAA9b,KAAAE,MAAA6gd,GAAA,OACA9hd,EAAA,CACA48B,WACAqB,sBAAA8jb,EACAxkb,sBAAAwkb;AAGA,OADAh8b,OAAA4rD,OAAA3xE,EAAAhC,KAAAgC,QAAA2ta,MAAAj2X,QACAwL,EAAAszZ,EAAAzoa,EAAA/tC,EACA,EACA,WAAAo3c,CAAAZ,EAAAzvc,EAAA4ma,GACA,OAAA6oC,EACA;AAEA,MAAAv1C,EAAA0M,EAAA5ma,GAAAwwc,aAAAf,EAAAz1c,KAAAC,IAAA,GAAAD,KAAAE,MAAA41c,EAAAL;AACA,OACA,EACA,EACA,EACA,EACA,GACA,IACAzzc,SAAAk+Z,IAAAl6Z,EAAA,GAAA4ma,EAAApva,OACAumD,EAAA/D,QAAAn4C,KAAA5K,KAAAw4c,EAAAzvc,EAAA4ma,GAEA,EACA;AASA,IAAAgpC,GAAA,CACA7xZ;AA2EA,MAAAouQ,GAAAntS,OAAAxjB,OAAA,MACA4sb,GAAAppa,OAAAxjB,OAAA;AACA,SAAAy/c,GAAA9/b,EAAA+U,GACA,IAAAA,EACA,OAAA/U;AAEA,MAAAw0B,EAAAzf,EAAAhhB,MAAA;AACA,QAAA3X,EAAA,EAAAE,EAAAk4C,EAAAn4C,OAAoCD,EAAAE,IAAOF,EAAA,CAC3C,MAAAob,EAAAg9B,EAAAp4C;AACA4jB,IAAAxI,KAAAwI,EAAAxI,GAAAqM,OAAAxjB,OAAA,MACA,CACA,OAAA2f,CACA,CACA,SAAA2I,GAAA2B,EAAAynQ,EAAAjvO,GACA,uBAAAivO,EACAg4B,EAAA+1J,GAAAx1b,EAAAynQ,GAAAjvO,GAEAinQ,EAAA+1J,GAAAx1b,EAAA,IAAAynQ,EACA,CAwFA,IAAAzrO,GAAA,IAvFA,MACA,WAAA8wB,CAAAq3W,EAAAsxB,GACAjkd,KAAAuja,eAAA9xY,EACAzxB,KAAA+sU,gBAAA,kBACA/sU,KAAAitU,YAAA,kBACAjtU,KAAAsF,MAAA,OACAtF,KAAA+oa,SAAA,GACA/oa,KAAA+hb,iBAAAnpZ,KAAA8oY,MAAAxjZ,SAAAwia,sBACA1gb,KAAAmiB,SAAA,GACAniB,KAAAkhG,OAAA,CACA,YACA,WACA,QACA,aACA,aAEAlhG,KAAAskb,KAAA,CACA4/B,OAAA,qDACA7lc,KAAA,GACA1Q,MAAA,SACA62a,WAAA,IACAl6a,OAAA,MAEAtK,KAAAuxG,MAAA,GACAvxG,KAAAmkd,qBAAA,CAAA1pT,EAAAz4J,IAAA0hd,EAAA1hd,EAAA+qU,iBACA/sU,KAAAokd,iBAAA,CAAA3pT,EAAAz4J,IAAA0hd,EAAA1hd,EAAAirU,aACAjtU,KAAAqkd,WAAA,CAAA5pT,EAAAz4J,IAAA0hd,EAAA1hd,EAAAsD,OACAtF,KAAAsoa,UAAA,IACAtoa,KAAAonR,YAAA,CACAvvQ,KAAA,UACA+ja,aACAY,qBAEAx8a,KAAA+3b,uBACA/3b,KAAA68b,QAAA,KACA78b,KAAA0hF,QAAA,KACA1hF,KAAAsqa,WACAtqa,KAAAoqU,QAAA,GACApqU,KAAAg4b,cACAh4b,KAAAkmB,WAAAuL,EACAzxB,KAAAkma,OAAA,GACAlma,KAAA24a,YACA34a,KAAAusa,2BACAvsa,KAAAoxb,SAAAuB,GACA3yb,KAAA2S,MAAAsxc,EACA,CACA,GAAAp3b,CAAAopQ,EAAAjvO,GACA,OAAAn6B,GAAA7sB,KAAAi2R,EAAAjvO,EACA,CACA,GAAA16B,CAAA2pQ,GACA,OAAA+tL,GAAAhkd,KAAAi2R,EACA,CACA,QAAAm7J,CAAAn7J,EAAAjvO,GACA,OAAAn6B,GAAAska,GAAAl7J,EAAAjvO,EACA,CACA,QAAAu0X,CAAAtlJ,EAAAjvO,GACA,OAAAn6B,GAAAqoS,GAAAj/B,EAAAjvO,EACA,CACA,KAAAl/C,CAAAmuR,EAAA7tR,EAAA8ob,EAAAD,GACA,MAAAqzB,EAAAN,GAAAhkd,KAAAi2R,GACAsuL,EAAAP,GAAAhkd,KAAAkxb,GACAszB,EAAA,IAAAp8c;AACA2f,OAAA6/K,iBAAA08Q,EAAA,CACAE,IAAA,CACA7hd,MAAA2hd,EAAAl8c,GACAizE,aAEAjzE,IAAA,CACAghD,cACA,GAAA98B,GACA,MAAAyma,EAAA/yb,KAAAwkd,GACAh7c,EAAA+6c,EAAAtzB;AACA,OAAAp8U,EAAAk+U,GACAhra,OAAA4rD,OAAA,GAA+CnqE,EAAAupb,GAE/C9qB,EAAA8qB,EAAAvpb,EACA,EACA,GAAAqjB,CAAAlqB,GACA3C,KAAAwkd,GAAA7hd,CACA,IAGA,CACA,KAAAgQ,CAAA8xc,GACAA,EAAAjqc,QAAA7H,KAAA3S,MACA,GAEA,CACAu0a,YAAAnsa,MAAAwoC,WAAA,MACA4jY,WAAApsa,GAAA,WAAAA,EACAmpG,MAAA,CACA0kW,UAAA,eAEA7uL,YAAA,CACAmtJ,eACAC,gBAEC,CAlVD,SAAAhqX,GACAA,EAAA39B,IAAA,aACAk1L,WAAAtwL,EACAza,SAAA,IACA4+J,OAAA,eACAtlJ,QAAAmB,EACAlE,UAAAkE,EACA2nY,UAAA3nY,EACAg7B,QAAAh7B,EACA3tB,UAAA2tB,IAEA+4B,EAAA4mY,SAAA,aACA6kB,aACAzhC,cACAD,YAAAnsa,GAAA,eAAAA,GAAA,eAAAA,GAAA,OAAAA,IAEAoiD,EAAA39B,IAAA,cACA82b,OAAA,CACA7/c,KAAA,QACAwS,WAAAqtc,GAEA1yC,QAAA,CACAnta,KAAA,SACAwS,WAAA26Z,KAGAzmX,EAAA4mY,SAAA,cACA6kB,UAAA,cAEAzrZ,EAAA39B,IAAA,eACA2yI,OAAA,CACA+jQ,UAAA,CACAvsZ,SAAA,MAGAsjP,OAAA,CACAipK,UAAA,CACAvsZ,SAAA,IAGAhR,KAAA,CACA49Z,WAAA,CACA+/C,OAAA,CACAp2b,KAAA,eAEA6pD,QAAA,CACAtzE,KAAA,UACAkT,SAAA,KAIA/O,KAAA,CACA27Z,WAAA,CACA+/C,OAAA,CACAl3Z,GAAA,eAEA2qB,QAAA,CACAtzE,KAAA,UACA8xK,OAAA,SACAtlJ,GAAAhf,GAAA,EAAAA,MAKA,EAEA,SAAAk5C,GACAA,EAAA39B,IAAA,UACAgta,eACA94a,QAAA,CACAlT,IAAA,EACAG,MAAA,EACAF,OAAA,EACAF,KAAA,IAGA,EA0EA,SAAA48C,GACAA,EAAA39B,IAAA,SACA1H,WACAnH,UACA7M,WACAiga,eACA/2Z,OAAA,QACAgyZ,QACAka,MAAA,EACAxvL,KAAA,CACA5xO,WACAmwZ,UAAA,EACAoa,mBACAvL,aACAC,WAAA,EACAiF,UAAA,CAAA5iB,EAAAzka,MAAAsza,UACAmY,UAAA,CAAAhnB,EAAAzka,MAAAsD,MACA0Y,WAEAokK,OAAA,CACAj9J,WACAooa,KAAA,GACAC,WAAA,EACAz/a,MAAA,GAEAwvJ,MAAA,CACAp4I,WACA9hB,KAAA,GACA0d,QAAA,CACAlT,IAAA,EACAC,OAAA,IAGA6ha,MAAA,CACAwZ,YAAA,EACAC,YAAA,GACAh6D,UACAq/D,gBAAA,EACAF,gBAAA,GACAxta,QAAA,EACAoE,WACAsia,YACA2E,gBAAA,EACAgC,YAAA,EACAz0a,SAAAg/b,GAAA7xZ,WAAAE,OACAq3Z,MAAA,GACAr2B,MAAA,GACAtD,MAAA,SACAkJ,WAAA,OACAgB,qBACAG,cAAA,4BACAD,gBAAA,KAGAtkY,EAAA1iD,MAAA,kCACA0iD,EAAA1iD,MAAA,uCACA0iD,EAAA1iD,MAAA,yCACA0iD,EAAA1iD,MAAA,kCACA0iD,EAAA4mY,SAAA,SACA6kB,aACA1hC,YAAAnsa,MAAAwoC,WAAA,YAAAxoC,EAAAwoC,WAAA,uBAAAxoC,GAAA,WAAAA,EACAosa,WAAApsa,GAAA,eAAAA,GAAA,mBAAAA,GAAA,SAAAA,IAEAoiD,EAAA4mY,SAAA,UACA6kB,UAAA,UAEAzrZ,EAAA4mY,SAAA,eACA7c,YAAAnsa,GAAA,oBAAAA,GAAA,aAAAA,EACAosa,WAAApsa,GAAA,oBAAAA,GAEA;AAiIA,SAAAs8c,GAAApgC,GACA,OAAAA,GAAA5S,EAAA4S,EAAAjma,OAAAqzZ,EAAA4S,EAAA4/B,QACA,MAEA5/B,EAAA32a,MAAA22a,EAAA32a,MAAA,SAAA22a,EAAAh6a,OAAAg6a,EAAAh6a,OAAA,QAAAg6a,EAAAjma,KAAA,MAAAima,EAAA4/B,MACA,CAGA,SAAAx4B,GAAAjxR,EAAAxtI,EAAAw+Z,EAAAk5B,EAAAnsW,GACA,IAAAg0V,EAAAv/a,EAAAurF;AAQA,OAPAg0V,IACAA,EAAAv/a,EAAAurF,GAAAiiD,EAAA6wS,YAAA9yV,GAAAzqG,MACA09a,EAAA7jb,KAAA4wG,IAEAg0V,EAAAmY,IACAA,EAAAnY,GAEAmY,CACA,CA4EA,SAAA9X,GAAApyS,EAAAz4J,EAAAgF,EAAAwK,EAAAqD,GACA,IAAA/Q,EAAA8gd,EAAAC,EAAAxmc,EAAAwyb,EAAA9ic,EAAA+2c,EAAAC;AACA,MAAAp3c,EAAA3L,EAAA2ya,WACAP,EAAApya,EAAAoya,SACA/ua,EAAArD,EAAAqD;AACA,IAAAg5Z,GAAA+V,GAAA,GAAAwsC;AACA,GAAAjzc,GAAA,iBAAAA,IACA7J,EAAA6J,EAAA0C,WACA,8BAAAvM,GAAA,+BAAAA,GAMA,OALA22J,EAAAp4C,OACAo4C,EAAAx0I,UAAAjf,EAAAwK,GACAipJ,EAAAt0I,OAAAk4Y,GACA5jQ,EAAAuqT,UAAAr3c,KAAAI,MAAA,GAAAJ,EAAA2T,OAAA,EAAA3T,EAAAI,MAAAJ,EAAA2T,aACAm5I,EAAA8M;AAIA,KAAAtsF,MAAA51E,OAAA,IAIA,OADAo1J,EAAA60R,YACA3hb,GAEA,QACAkH,EACA4lJ,EAAAwqT,QAAAj+c,EAAAwK,EAAAqD,EAAA,EAAAxP,EAAA,IAAA6wa,GAEAz7Q,EAAA29Q,IAAApxa,EAAAwK,EAAAnM,EAAA,EAAA6wa,GAEAz7Q,EAAAwkS;AACA;AACA,eACAlxb,EAAA8G,IAAA,EAAAxP,EACAo1J,EAAA80R,OAAAvob,EAAAjE,KAAAi0a,IAAA3Y,GAAAtwZ,EAAAyD,EAAAzO,KAAAwyK,IAAA8oP,GAAAh5Z,GACAg5Z,GAAAyiD,EACArmT,EAAA+0R,OAAAxob,EAAAjE,KAAAi0a,IAAA3Y,GAAAtwZ,EAAAyD,EAAAzO,KAAAwyK,IAAA8oP,GAAAh5Z,GACAg5Z,GAAAyiD,EACArmT,EAAA+0R,OAAAxob,EAAAjE,KAAAi0a,IAAA3Y,GAAAtwZ,EAAAyD,EAAAzO,KAAAwyK,IAAA8oP,GAAAh5Z,GACAo1J,EAAAwkS;AACA;AACA,kBAQA4R,EAAA,KAAAxrc,EACAgZ,EAAAhZ,EAAAwrc,EACA+T,EAAA7hd,KAAAwyK,IAAA8oP,EAAAwiD,GAAAxic,EACAymc,EAAA/hd,KAAAwyK,IAAA8oP,EAAAwiD,IAAAhsc,IAAA,EAAAg8b,EAAAxyb,GACAwmc,EAAA9hd,KAAAi0a,IAAA3Y,EAAAwiD,GAAAxic,EACA0mc,EAAAhid,KAAAi0a,IAAA3Y,EAAAwiD,IAAAhsc,IAAA,EAAAg8b,EAAAxyb,GACAo8I,EAAA29Q,IAAApxa,EAAA89c,EAAAtzc,EAAAqzc,EAAAhU,EAAAxyC,EAAA7oP,EAAA6oP,EAAAmZ,GACA/8Q,EAAA29Q,IAAApxa,EAAA+9c,EAAAvzc,EAAAozc,EAAA/T,EAAAxyC,EAAAmZ,EAAAnZ,GACA5jQ,EAAA29Q,IAAApxa,EAAA89c,EAAAtzc,EAAAqzc,EAAAhU,EAAAxyC,IAAAmZ,GACA/8Q,EAAA29Q,IAAApxa,EAAA+9c,EAAAvzc,EAAAozc,EAAA/T,EAAAxyC,EAAAmZ,EAAAnZ,EAAA7oP,GACA/a,EAAAwkS;AACA;AACA,WACA,IAAA7qB,EAAA,CACA/1Z,EAAAtb,KAAAmid,QAAA7/c,EACA0I,EAAA8G,IAAA,EAAAwJ,EACAo8I,EAAAp5I,KAAAra,EAAA+G,EAAAyD,EAAA6M,EAAA,EAAAtQ,EAAA,EAAAsQ;AACA,KACA,CACAggZ,GAAAwiD;AACA,cACAiE,EAAA/hd,KAAAwyK,IAAA8oP,IAAAxpZ,IAAA,EAAAxP,GACAu/c,EAAA7hd,KAAAwyK,IAAA8oP,GAAAh5Z,EACAw/c,EAAA9hd,KAAAi0a,IAAA3Y,GAAAh5Z,EACA0/c,EAAAhid,KAAAi0a,IAAA3Y,IAAAxpZ,IAAA,EAAAxP,GACAo1J,EAAA80R,OAAAvob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA+0R,OAAAxob,EAAA+9c,EAAAvzc,EAAAozc,GACAnqT,EAAA+0R,OAAAxob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA+0R,OAAAxob,EAAA+9c,EAAAvzc,EAAAozc,GACAnqT,EAAAwkS;AACA;AACA,eACA5gC,GAAAwiD;AACA,YACAiE,EAAA/hd,KAAAwyK,IAAA8oP,IAAAxpZ,IAAA,EAAAxP,GACAu/c,EAAA7hd,KAAAwyK,IAAA8oP,GAAAh5Z,EACAw/c,EAAA9hd,KAAAi0a,IAAA3Y,GAAAh5Z,EACA0/c,EAAAhid,KAAAi0a,IAAA3Y,IAAAxpZ,IAAA,EAAAxP,GACAo1J,EAAA80R,OAAAvob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA+0R,OAAAxob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA80R,OAAAvob,EAAA+9c,EAAAvzc,EAAAozc,GACAnqT,EAAA+0R,OAAAxob,EAAA+9c,EAAAvzc,EAAAozc;AACA;AACA,WACAE,EAAA/hd,KAAAwyK,IAAA8oP,IAAAxpZ,IAAA,EAAAxP,GACAu/c,EAAA7hd,KAAAwyK,IAAA8oP,GAAAh5Z,EACAw/c,EAAA9hd,KAAAi0a,IAAA3Y,GAAAh5Z,EACA0/c,EAAAhid,KAAAi0a,IAAA3Y,IAAAxpZ,IAAA,EAAAxP,GACAo1J,EAAA80R,OAAAvob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA+0R,OAAAxob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA80R,OAAAvob,EAAA+9c,EAAAvzc,EAAAozc,GACAnqT,EAAA+0R,OAAAxob,EAAA+9c,EAAAvzc,EAAAozc,GACAvmD,GAAAwiD,EACAiE,EAAA/hd,KAAAwyK,IAAA8oP,IAAAxpZ,IAAA,EAAAxP,GACAu/c,EAAA7hd,KAAAwyK,IAAA8oP,GAAAh5Z,EACAw/c,EAAA9hd,KAAAi0a,IAAA3Y,GAAAh5Z,EACA0/c,EAAAhid,KAAAi0a,IAAA3Y,IAAAxpZ,IAAA,EAAAxP,GACAo1J,EAAA80R,OAAAvob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA+0R,OAAAxob,EAAA89c,EAAAtzc,EAAAqzc,GACApqT,EAAA80R,OAAAvob,EAAA+9c,EAAAvzc,EAAAozc,GACAnqT,EAAA+0R,OAAAxob,EAAA+9c,EAAAvzc,EAAAozc;AACA;AACA,WACAA,EAAA/vc,IAAA,EAAA9R,KAAAwyK,IAAA8oP,GAAAh5Z,EACAw/c,EAAA9hd,KAAAi0a,IAAA3Y,GAAAh5Z,EACAo1J,EAAA80R,OAAAvob,EAAA49c,EAAApzc,EAAAqzc,GACApqT,EAAA+0R,OAAAxob,EAAA49c,EAAApzc,EAAAqzc;AACA;AACA,WACApqT,EAAA80R,OAAAvob,EAAAwK,GACAipJ,EAAA+0R,OAAAxob,EAAAjE,KAAAwyK,IAAA8oP,IAAAxpZ,IAAA,EAAAxP,GAAAmM,EAAAzO,KAAAi0a,IAAA3Y,GAAAh5Z;AACA;AACA,OACAo1J,EAAAwkS,YAGAxkS,EAAAitQ,OACA1la,EAAAuza,YAAA,GACA96Q,EAAAg1R,QA3GA,CA6GA,CAOA,SAAA/S,GAAAhnR,EAAA+pG,EAAAqL,GAEA,OADAA,KAAA,IACArL,GAAA/pG,KAAA1uJ,EAAAy4P,EAAA7xP,KAAAk9P,GAAAp1G,EAAA1uJ,EAAAy4P,EAAAzxP,MAAA88P,GAAAp1G,EAAAlkJ,EAAAiuP,EAAA5xP,IAAAi9P,GAAAp1G,EAAAlkJ,EAAAiuP,EAAA3xP,OAAAg9P,CACA,CAoDA,SAAAq6M,GAAA1qT,EAAAzzJ,EAAAwK,EAAAqK,EAAAo9B,GACA,GAAAA,EAAAg0Z,eAAAh0Z,EAAAmsa,UAAA,CAOA,MAAAC,EAAA5qT,EAAA6wS,YAAAzvb,GACAjO,EAAA5G,EAAAq+c,EAAAC,sBACAt3c,EAAAhH,EAAAq+c,EAAAE,uBACA13c,EAAA2D,EAAA6zc,EAAAG,wBACA13c,EAAA0D,EAAA6zc,EAAAI,yBACAC,EAAAzsa,EAAAg0Z,eAAAp/b,EAAAC,GAAA,EAAAA;AACA2sJ,EAAA+6Q,YAAA/6Q,EAAAq6Q,UACAr6Q,EAAA60R,YACA70R,EAAA66Q,UAAAr8X,EAAA0sa,iBAAA,EACAlrT,EAAA80R,OAAA3hb,EAAA83c,GACAjrT,EAAA+0R,OAAAxhb,EAAA03c,GACAjrT,EAAAg1R,QACA,CACA,CACA,SAAAm2B,GAAAnrT,EAAAxhH,GACA,MAAA4sa,EAAAprT,EAAAq6Q;AACAr6Q,EAAAq6Q,UAAA77X,EAAA3zC,MACAm1J,EAAAy0R,SAAAj2Y,EAAArrC,KAAAqrC,EAAAprC,IAAAorC,EAAAlrC,MAAAkrC,EAAA33B,QACAm5I,EAAAq6Q,UAAA+wC,CACA,CAwDA,MAAAC,GAAA,uCACAC,GAAA;AAWA,SAAAC,GAAArjd,EAAA0b,GACA,MAAAmH,GAAA,GAAA7iB,GAAAk6B,MAAAipb;AACA,IAAAtgc,GAAA,WAAAA,EAAA,GACA,WAAAnH;AAGA,OADA1b,GAAA6iB,EAAA,GACAA,EAAA,IACA,SACA,OAAA7iB;AACA,QACAA,GAAA,IAGA,OAAA0b,EAAA1b,CACA,CACA,MAAAsjd,GAAA30c,OAAA;AACA,SAAAqsb,GAAAh7b,EAAA2nD,GACA,MAAAsoN,EAAA,GACAszM,EAAArxW,EAAAvqD,GACA5R,EAAAwta,EAAAn+b,OAAA2wB,KAAA4R,KACAylJ,EAAAl7F,EAAAlyG,GAAAujd,EAAAh7R,GAAA+8O,EAAAtla,EAAAuoL,GAAAvoL,EAAA2nD,EAAA4gI,QAAAvoL,EAAAuoL,GAAA,IAAAvoL;AACA,UAAAuoL,KAAAxyI,EACAk6N,EAAA1nF,GAAA+6R,GAAAl2Q,EAAA7kB;AAEA,OAAA0nF,CACA,CAQA,SAAAqxL,GAAAthc,GACA,OAAAg7b,GAAAh7b,EAAA,CACAkL,IAAA,IACAG,MAAA,IACAF,OAAA,IACAF,KAAA,KAEA,CAyGA,SAAAgwS,GAAAuoK,EAAAvtb,GACA,OAAA7Q,OAAA4rD,OAAA5rD,OAAAxjB,OAAA4hd,GAAAvtb,EACA,CAWA,SAAAw9Z,GAAAlsB,EAAA+C,EAAA,CACA,IACAm5C,EAAAjwb,EAAAkwb,EAAA,IAAAn8C,EAAA,IACA,MAAAo8C,EAAAF,GAAAl8C;KACA,IAAA/zY,IACAA,EAAA8pR,GAAA,YAAAiqH;AAEA,MAAA99Y,EAAA,CACA,CAAA+uD,OAAA4kO,aAAA,SACAstH,cACAk5C,QAAAr8C,EACAs8C,YAAAF,EACArQ,UAAA9/a,EACAswb,WAAAJ,EACA9qC,SAAAtlJ,GAAAmgK,GAAA,CACAngK,KACAi0I,GACA+C,EAAAq5C,EAAAnwb;AAEA,WAAAi0K,MAAAh+K,EAAA,CAGA81R,eAAA,CAAA14S,EAAA0hL,YACA1hL,EAAA0hL,UACA1hL,EAAAk9c,aACAx8C,EAAA,GAAAh/O,OAKA5+J,IAAA,CAAA9iB,EAAA0hL,IACAy7R,GAAAn9c,EAAA0hL,EAAA,IAyOA,SAAAA,EAAA+hP,EAAA/C,EAAA//N,GACA,IAAAxnM;AACA,UAAAw1C,KAAA80X,EAEA,GADAtqa,EAAAs9S,GAAA2mK,GAAAzua,EAAA+yI,GAAAg/O,QACA,IAAAvna,EACA,OAAAkkd,GAAA37R,EAAAvoL,GAAAmkd,GAAA58C,EAAA//N,EAAAjf,EAAAvoL,IAGA,CARA,CAzOAuoL,EAAA+hP,EAAA/C,EAAA1ga,IAKAkyF,yBAAA,CAAAlyF,EAAA0hL,IACAx4C,QAAAh3C,yBAAAlyF,EAAA+8c,QAAA,GAAAr7R,GAIAljK,eAAA,IACA0qH,QAAA1qH,eAAAkiZ,EAAA,IAIAt5Y,IAAA,CAAApnB,EAAA0hL,IACA67R,GAAAv9c,GAAAzE,SAAAmmL,GAIAmf,QAAA7gM,GACAu9c,GAAAv9c,GAIA,GAAAqjB,CAAArjB,EAAA0hL,EAAAvoL,GACA,MAAA29S,EAAA92S,EAAAw9c,WAAAx9c,EAAAw9c,SAAAX;AAGA,OAFA78c,EAAA0hL,GAAAo1H,EAAAp1H,GAAAvoL,SACA6G,EAAAk9c,QAEA,GAEA,CAmEA,SAAA/zB,GAAAxoP,EAAA3/I,EAAA,CACA4oY,cACAC,eAEA,MAAA9e,YAAYA,EAAA/pX,EAAA4oY,WAAA5e,aAAAhqX,EAAA6oY,UAAA4zB,WAAAz8Z,EAAA8oY,SAAkGnpP;AAC9G,OACAmpP,QAAA2zB,EACA7zB,WAAA7e,EACA8e,UAAA7e,EACAqhB,aAAA9vV,EAAAwuU,KAAA,IAAAA,EACAuhB,YAAA/vV,EAAAyuU,KAAA,IAAAA,EAEA,CACA,MAAAoyC,GAAA,CAAAzua,EAAA/vC,IAAA+vC,IAAAm6Y,EAAAlqb,KACAy+c,GAAA,CAAA37R,EAAAvoL,IAAAkyG,EAAAlyG,IAAA,aAAAuoL,IAAA,OAAAnjK,OAAAC,eAAArlB,MAAA24E,cAAAvzD;AACA,SAAA4+b,GAAAn9c,EAAA0hL,EAAAl2G,GACA,GAAAjtD,OAAA9iB,UAAA4N,eAAAjI,KAAApB,EAAA0hL,IAAA,gBAAAA,EACA,OAAA1hL,EAAA0hL;AAEA,MAAAvoL,EAAAqyE;AAGA,OADAxrE,EAAA0hL,GAAAvoL,EACAA,CACA,CA+CA,SAAAukd,GAAA/wb,EAAA+0J,EAAAvoL,GACA,OAAAojG,EAAA5vE,KAAA+0J,EAAAvoL,GAAAwzB,CACA,CACA,MAAAgxb,GAAA,CAAAlub,EAAAnR,SAAAmR,EAAAnR,EAAA,iBAAAmR,EAAAiyY,EAAApjZ,EAAAmR,QAAAxH;AACA,SAAA21b,GAAAv6b,EAAAw6b,EAAApub,EAAAqub,EAAA3kd,GACA,UAAAmlB,KAAAu/b,EAAA,CACA,MAAApxL,EAAAkxL,GAAAlub,EAAAnR;AACA,GAAAmuQ,EAAA,CACAppQ,EAAA+qB,IAAAq+O;AACA,MAAA9/P,EAAA+wb,GAAAjxL,EAAAggL,UAAAh9a,EAAAt2B;AACA,YAAAwzB,OAAA8C,GAAA9C,IAAAmxb,EAGA,OAAAnxb,CAEA,MAAU,QAAA8/P,QAAA,IAAAqxL,GAAArub,IAAAqub,EAGV,WAEA,CACA,QACA,CACA,SAAAR,GAAAO,EAAA3xB,EAAAxqQ,EAAAvoL,GACA,MAAAyjd,EAAA1wB,EAAA8wB,YACArwb,EAAA+wb,GAAAxxB,EAAAugB,UAAA/qR,EAAAvoL,GACA4kd,EAAA,IACAF,KACAjB,GAEAv5b,EAAA,IAAA9I;AACA8I,EAAA+qB,IAAAj1C;AACA,IAAAs2B,EAAAuub,GAAA36b,EAAA06b,EAAAr8R,EAAA/0J,GAAA+0J,EAAAvoL;AACA,cAAAs2B,SAGA,IAAA9C,OAAA+0J,IACAjyJ,EAAAuub,GAAA36b,EAAA06b,EAAApxb,EAAA8C,EAAAt2B,GACA,OAAAs2B,KAIAm9Z,GAAAvib,MAAA0Z,KAAAV,GAAA,CACA,IACAu5b,EAAAjwb,EAAA,IAQA,SAAAu/Z,EAAAxqQ,EAAAvoL,GACA,MAAAmlB,EAAA4ta,EAAA+wB;AACAv7R,KAAApjK,IACAA,EAAAojK,GAAA;AAEA,MAAA1hL,EAAAse,EAAAojK;AACA,OAAA/qL,EAAAqJ,IAAAqrG,EAAAlyG,GAEAA,EAEA6G,GAAA,EACA,CAXA,CARAksb,EAAAxqQ,EAAAvoL,GACA,CACA,SAAA6kd,GAAA36b,EAAA06b,EAAAtub,EAAA9C,EAAAiiI,GACA,KAAAn/H,GACAA,EAAAmub,GAAAv6b,EAAA06b,EAAAtub,EAAA9C,EAAAiiI;AAEA,OAAAn/H,CACA,CAsBA,SAAAgnR,GAAAhnR,EAAAixY,GACA,UAAAj0I,KAAAi0I,EAAA,CACA,IAAAj0I,EACA;AAEA,MAAAtzR,EAAAszR,EAAAh9P;AACA,YAAAt2B,EACA,OAAAA,CAEA,CACA,CACA,SAAAokd,GAAAv9c,GACA,IAAAkvC,EAAAlvC,EAAAk9c;AAIA,OAHAhua,IACAA,EAAAlvC,EAAAk9c,MAIA,SAAAx8C,GACA,MAAAr9Y,EAAA,IAAA9I;AACA,UAAAkyQ,KAAAi0I,EACA,UAAAjxY,KAAAlR,OAAA2wB,KAAAu9O,GAAA1vQ,OAAA7K,MAAAk1B,WAAA,MACA/jB,EAAA+qB,IAAA3e;AAGA,OAAAplB,MAAA0Z,KAAAV,EACA,CARA,CAJArjB,EAAA+8c,UAEA7ta,CACA,CAyBA,MAAA+ua,GAAAn8c,OAAAm8c,SAAA,MACAC,GAAA,CAAArnD,EAAA//Z,MAAA+/Z,EAAA9/Z,SAAA8/Z,EAAA//Z,GAAAuuB,MAAAwxY,EAAA//Z,GACAqnd,GAAAr/C,GAAA,MAAAA,EAAA;AACA,SAAAs/C,GAAAluC,EAAAmuC,EAAAC,EAAAhpd,GAIA,MAAA4vE,EAAAgrW,EAAA7qZ,KAAAg5b,EAAAnuC,EACAjrW,EAAAo5Y,EACA5uX,EAAA6uX,EAAAj5b,KAAAg5b,EAAAC,EACAC,EAAAnZ,EAAAngY,EAAAC,GACAs5Y,EAAApZ,EAAA31W,EAAAxqB;AACA,IAAAw5Y,EAAAF,KAAAC,GACAE,EAAAF,GAAAD,EAAAC;AAEAC,EAAAhtY,MAAAgtY,GAAA,EAAAA,EACAC,EAAAjtY,MAAAitY,GAAA,EAAAA;AACA,MAAAprV,EAAAh+H,EAAAmpd,EACAE,EAAArpd,EAAAopd;AACA,OACAx5Y,SAAA,CACA1nE,EAAAynE,EAAAznE,EAAA81H,GAAA7jC,EAAAjyF,EAAA0nE,EAAA1nE,GACAwK,EAAAi9D,EAAAj9D,EAAAsrH,GAAA7jC,EAAAznF,EAAAk9D,EAAAl9D,IAEAynF,KAAA,CACAjyF,EAAAynE,EAAAznE,EAAAmhd,GAAAlvX,EAAAjyF,EAAA0nE,EAAA1nE,GACAwK,EAAAi9D,EAAAj9D,EAAA22c,GAAAlvX,EAAAznF,EAAAk9D,EAAAl9D,IAGA,CA2DA,SAAA42c,GAAA/nD,EAAAiI,EAAA,KACA,MAAA+/C,EAAAV,GAAAr/C,GACAggD,EAAAjoD,EAAA9/Z,OACAgod,EAAA10c,MAAAy0c,GAAA5gD,KAAA,GACA8gD,EAAA30c,MAAAy0c;AAEA,IAAAhod,EAAAmod,EAAAC,EACAC,EAAAjB,GAAArnD,EAAA;AACA,IAAA//Z,EAAA,EAAeA,EAAAgod,IAAehod,EAI9B,GAHAmod,EAAAC,EACAA,EAAAC,EACAA,EAAAjB,GAAArnD,EAAA//Z,EAAA,GACAood,EAAA,CAGA,GAAAC,EAAA,CACA,MAAAC,EAAAD,EAAArgD,GAAAogD,EAAApgD;AAEAigD,EAAAjod,GAAA,IAAAsod,GAAAD,EAAAN,GAAAK,EAAAL,IAAAO,EAAA,CACA,CACAJ,EAAAlod,GAAAmod,EAAAE,EAAA5wa,EAAAwwa,EAAAjod,EAAA,MAAAy3C,EAAAwwa,EAAAjod,IAAA,GAAAiod,EAAAjod,EAAA,GAAAiod,EAAAjod,IAAA,EAAAiod,EAAAjod,EAAA,GAAAiod,EAAAjod,EANA,EAtEA,SAAA+/Z,EAAAkoD,EAAAC,GACA,MAAAF,EAAAjoD,EAAA9/Z;AACA,IAAAsod,EAAAC,EAAAC,EAAAC,EAAAN,EACAC,EAAAjB,GAAArnD,EAAA;AACA,QAAA//Z,EAAA,EAAmBA,EAAAgod,EAAA,IAAmBhod,EACtCood,EAAAC,EACAA,EAAAjB,GAAArnD,EAAA//Z,EAAA,GACAood,GAAAC,IAGArQ,EAAAiQ,EAAAjod,GAAA,EAAAmnd,IACAe,EAAAlod,GAAAkod,EAAAlod,EAAA,MAGAuod,EAAAL,EAAAlod,GAAAiod,EAAAjod,GACAwod,EAAAN,EAAAlod,EAAA,GAAAiod,EAAAjod,GACA0od,EAAAjmd,KAAAC,IAAA6ld,EAAA,GAAA9ld,KAAAC,IAAA8ld,EAAA,GACAE,GAAA,IAGAD,EAAA,EAAAhmd,KAAA0mR,KAAAu/L,GACAR,EAAAlod,GAAAuod,EAAAE,EAAAR,EAAAjod,GACAkod,EAAAlod,EAAA,GAAAwod,EAAAC,EAAAR,EAAAjod,KAEA,CAxBA,CA8EA+/Z,EAAAkoD,EAAAC,GArDA,SAAAnoD,EAAAmoD,EAAAlgD,EAAA,KACA,MAAA+/C,EAAAV,GAAAr/C,GACAggD,EAAAjoD,EAAA9/Z;AACA,IAAA06I,EAAAwtU,EAAAC,EACAC,EAAAjB,GAAArnD,EAAA;AACA,QAAA//Z,EAAA,EAAmBA,EAAAgod,IAAehod,EAAA,CAIlC,GAHAmod,EAAAC,EACAA,EAAAC,EACAA,EAAAjB,GAAArnD,EAAA//Z,EAAA,IACAood,EACA;AAEA,MAAA50C,EAAA40C,EAAApgD,GACAyL,EAAA20C,EAAAL;AACAI,IACAxtU,GAAA64R,EAAA20C,EAAAngD,IAAA,EACAogD,EAAA,MAA+BpgD,KAAUwL,EAAA74R,EACzCytU,EAAA,MAA+BL,KAAUt0C,EAAA94R,EAAAutU,EAAAlod,IAEzCqod,IACA1tU,GAAA0tU,EAAArgD,GAAAwL,GAAA,EACA40C,EAAA,MAA+BpgD,KAAUwL,EAAA74R,EACzCytU,EAAA,MAA+BL,KAAUt0C,EAAA94R,EAAAutU,EAAAlod,GAEzC,CACA,CAzBA,CAsDA+/Z,EAAAmoD,EAAAlgD,EACA,CACA,SAAA2gD,GAAAznd,EAAAqd,EAAAC,GACA,OAAA/b,KAAA+b,IAAA/b,KAAA8b,IAAArd,EAAAsd,GAAAD,EACA,CAmDA,SAAAoka,KACA,0BAAAx5a,QAAA,oBAAA9E,QACA,CAGA,SAAAu9a,GAAAgnC,GACA,IAAAphc,EAAAohc,EAAA17c;AAIA,OAHAsa,GAAA,wBAAAA,EAAAzX,aACAyX,IAAAX,MAEAW,CACA,CAIA,SAAAqhc,GAAAC,EAAAllc,EAAAmlc,GACA,IAAAC;AAUA,MATA,iBAAAF,GACAE,EAAAz6c,SAAAu6c,EAAA,KACA,IAAAA,EAAAv/c,QAAA,OAEAy/c,IAAA,IAAAplc,EAAA1W,WAAA67c,KAGAC,EAAAF,EAEAE,CACA,CACA,MAAAlkc,GAAA1C,KAAA8B,cAAAC,YAAAW,iBAAA1C,EAAA;AACA,SAAA8pZ,GAAA9qa,EAAAgsI,GACA,OAAAtoH,GAAA1jB,GAAA2pF,iBAAAqiD,EACA,CACA,MAAAq9C,GAAA,CACA,MACA,QACA,SACA;AAEA,SAAAw+R,GAAAl/c,EAAAsD,EAAAi7F,GACA,MAAA3hF,EAAA;AACA2hF,IAAA,IAAAA,EAAA;AACA,QAAAtoG,EAAA,EAAmBA,EAAA,EAAOA,IAAA,CAC1B,MAAAg6C,EAAAywI,GAAAzqL;AACA2mB,EAAAqzB,GAAAnyB,WAAA9d,EAAAsD,EAAA,IAAA2sC,EAAAsuD,KAAA,CACA,CAGA,OAFA3hF,EAAAlZ,MAAAkZ,EAAArZ,KAAAqZ,EAAAjZ,MACAiZ,EAAA3F,OAAA2F,EAAApZ,IAAAoZ,EAAAnZ,OACAmZ,CACA,CA+EA,MAAAuic,GAAAl4c,GAAAvO,KAAAG,MAAA,GAAAoO,GAAA,GAkEAgwa,GAAA,WACA,IAAAmoC;AACA,IACA,MAAAznd,EAAA,CACA,WAAAmlL,GAEA,OADAsiS,MAAA,CAEA;AAEAxmC,OACAx5a,OAAA0kB,iBAAA,YAAAnsB,GACAyH,OAAA+lB,oBAAA,YAAAxtB,GAEA,CAAM,MAAA3B,GAEN,CACA,OAAAopd,CACA,CAjBA;AAkCA,SAAA9mB,GAAA9pE,EAAAC,EAAAh6X,EAAA+Y,GACA,OACA7Q,EAAA6xX,EAAA7xX,EAAAlI,GAAAg6X,EAAA9xX,EAAA6xX,EAAA7xX,GACAwK,EAAAqnX,EAAArnX,EAAA1S,GAAAg6X,EAAAtnX,EAAAqnX,EAAArnX,GAEA,CAyFA,SAAAk4c,GAAAh8U,GACA,gBAAAA,EACA,CACAi8U,QAAAvyC,EACAhkL,QAAA2tN,EACAh4K,UAAAk3J,GAGA,CACA0pB,QAAAhqB,EACAvsM,QAAA,CAAAtyP,EAAAma,IAAAna,EAAAma,EACA8tR,UAAA/hS,KAEA,CACA,SAAA4id,IAAA1qc,MAA4BA,EAAAC,MAAAghI,QAAAi5Q,OAAAzrZ,UAC5B,OACAuR,QAAAihI,EACAhhI,MAAAghI,EACAi5Q,SAAAj6Y,EAAAD,EAAA,GAAAihI,GAAA,EACAxyI,QAEA,CA8BA,SAAAu7b,GAAA/vB,EAAA9Y,EAAAhmZ,GACA,IAAAA,EACA,OACA8+Z;AAGA,MAAAzrS,SAAYA,EAAAxuH,MAAA2qc,EAAA1qc,IAAA2qc,GAAgDzvc,EAC5D8lI,EAAAkgR,EAAA9/Z,QACA6yP,QAAYA,EAAAu2N,UAAA5gL,aAAiC2gL,GAAAh8U,IAC7CxuH,MAAYA,EAAAC,MAAAi6Y,OAAAzrZ,SAtCZ,SAAAwra,EAAA9Y,EAAAhmZ,GACA,MAAAqzH,SAAYA,EAAAxuH,MAAA2qc,EAAA1qc,IAAA2qc,GAAgDzvc,GAC5Dsvc,QAAYA,EAAA5gL,aAAuB2gL,GAAAh8U,GACnCyS,EAAAkgR,EAAA9/Z;AACA,IACAD,EAAA+ja,GADAnlZ,MAAUA,EAAAC,MAAAi6Y,QAAsB+f;AAEhC,GAAA/f,EAAA,CAGA,IAFAl6Y,GAAAihI,EACAhhI,GAAAghI,EACA7/I,EAAA,EAAA+ja,EAAAlkR,EAAiC7/I,EAAA+ja,GACjCslD,EAAA5gL,EAAAs3H,EAAAnhZ,EAAAihI,GAAAzS,IAAAm8U,EAAAC,KAD2Cxpd,EAI3C4e,IACAC;AAEAD,GAAAihI,EACAhhI,GAAAghI,CACA,CAIA,OAHAhhI,EAAAD,IACAC,GAAAghI,GAEA,CACAjhI,QACAC,MACAi6Y,OACAzrZ,MAAAwra,EAAAxra,MAEA,CA5BA,CAsC0Cwra,EAAA9Y,EAAAhmZ,GAC1C4M,EAAA;AACA,IAEAtkB,EAAA+yJ,EAAAq0T,EAFAC,KACAC,EAAA;AAEA,MAEAC,EAAA,IAAAF,GAFAL,EAAAE,EAAAE,EAAApnd,IAAA,IAAAywP,EAAAy2N,EAAAE,GAGAI,EAAA,KAAAH,GAFA,IAAA52N,EAAA02N,EAAAnnd,IAAAgnd,EAAAG,EAAAC,EAAApnd;AAGA,QAAArC,EAAA4e,EAAAuxP,EAAAvxP,EAAqC5e,GAAA6e,IAAU7e,EAC/Co1J,EAAA2qQ,EAAA//Z,EAAA6/I,GACAuV,EAAA7mI,OAGAlsB,EAAAomS,EAAArzI,EAAAhoB,IACA/qI,IAAAond,IAGAC,EAAAL,EAAAhnd,EAAAknd,EAAAC,GACA,OAAAG,GAAAC,MACAD,EAAA,IAAA72N,EAAAzwP,EAAAknd,GAAAvpd,EAAAmwQ,GAEA,OAAAw5M,GAAAE,MACAljc,EAAArf,KAAAgid,GAAA,CACA1qc,MAAA+qc,EACA9qc,IAAA7e,EACA84Z,OACAj5Q,QACAxyI,WAEAs8c,EAAA,MAEAx5M,EAAAnwQ,EACAypd,EAAApnd;AAWA,OATA,OAAAsnd,GACAhjc,EAAArf,KAAAgid,GAAA,CACA1qc,MAAA+qc,EACA9qc,MACAi6Y,OACAj5Q,QACAxyI,WAGAsZ,CACA,CA6JA,SAAAmjc,GAAApod,GACA,OACA+qU,gBAAA/qU,EAAA+qU,gBACAszH,eAAAr+b,EAAAq+b,eACAprB,WAAAjza,EAAAiza,WACAE,iBAAAnza,EAAAmza,iBACAE,gBAAArza,EAAAqza,gBACAE,YAAAvza,EAAAuza,YACAtoG,YAAAjrU,EAAAirU,YAEA,CACA,SAAAo9I,GAAA18c,EAAA28c,GACA,IAAAA,EACA;AAEA,MAAAl+b,EAAA,GACA49D,EAAA,SAAA/wD,EAAAt2B,GACA,OAAA8gd,EAAA9gd,IAGAypB,EAAArnB,SAAApC,IACAypB,EAAAxkB,KAAAjF,GAEAypB,EAAAviB,QAAAlH,IALAA,CAMA;AACA,OAAAsT,KAAA8iB,UAAAprB,EAAAq8E,KAAA/zE,KAAA8iB,UAAAuxb,EAAAtgY,EACA,CAEA,SAAAugY,GAAArkc,EAAAomZ,EAAAl0F,GACA,OAAAlyT,EAAAlkB,QAAAqqa,KAAAnmZ,EAAAkyT,GAAAk0F,EAAAl0F,EACA,CA2BA/+R,EAAAm+X,QAAeA,EACfn+X,EAAAsna,SAAgBA,EAChBtna,EAAAm8H,GAAUA,EACVn8H,EAAAqna,MAAaA,EACbrna,EAAAwna,WAAkBA,EAClBxna,EAAAuna,YAAmBA,EACnBvna,EAAA68X,IAAWA,EACX78X,EAAAyna,cAAqBA,EACrBzna,EAAAs/Z,MAAaA,GACbt/Z,EAAA2tY,UAhoCA,SAAAwjC,EAAAjkC,EAAAnV,GACA,MAAAvyZ,IAAYA,EAAAC,OAAa0rc,EACzB37W,EAAA6oU,EAAA6O,GAAAzna,EAAAD,GAAA,GACA4rc,EAAA,CAAA9nd,EAAAi1C,IAAAw5X,GAAA,IAAAzua,EAAA,EAAAA,EAAAi1C;AACA,OACA/4B,IAAA4rc,EAAA5rc,GAAA9b,KAAAqN,IAAAy+F,IACA/vF,IAAA2rc,EAAA3rc,EAAA+vF,GAEA,EAynCAx1D,EAAA0yY,YA9jDA,SAAArqB,EAAAmqB,EAAA99a,GACA,MAAAg0a,EAAArgB,EAAAsgB,wBACA0oC,EAAA,IAAA38c,EAAAhL,KAAA+b,IAAA/Q,EAAA;AACA,OAAAhL,KAAAG,OAAA2ob,EAAA6+B,GAAA3oC,KAAA2oC,CACA,EA2jDArxa,EAAA+2Y,eAxoEA,CAAA1L,EAAAxla,EAAAC,IAAA,UAAAula,EAAAxla,EAAA,QAAAwla,EAAAvla,GAAAD,EAAAC,GAAA,EAyoEAk6B,EAAA+9X,cAAqBA,EACrB/9X,EAAA0na,WAAkBA,EAClB1na,EAAAk2X,aAvsEA,SAAAzzP,GACA,MAAAjvJ,EAAA,IAAA9I,IAAA+3J;AACA,OAAAjvJ,EAAAxO,OAAAy9J,EAAAv7K,OACAu7K,EAEAjoK,MAAA0Z,KAAAV,EACA,EAksEAwsB,EAAA48Y,eAziCA,SAAAA,EAAA9rP,EAAAvxK,EAAA+xb,EAAAz0B,GACA,MAAA9pa,EAAA,CACAihZ,cACAnjJ,OAAA//E,EACA8sF,SAAAr+P,EACAgyb,UAAAD,EACAt2Q,OAAA,IAAAtwL,IACA4ua,gBAAAxoP,EAAA+rP,GACAtQ,WAAAnrR,GAAAw7R,EAAA9rP,EAAA1vC,EAAAkwT,EAAAz0B,GACA3a,SAAAtlJ,GAAAggK,EAAA9rP,EAAAoxO,SAAAtlJ,GAAAr9P,EAAA+xb,EAAAz0B;AAEA,WAAA9rP,MAAAh+K,EAAA,CAGA81R,eAAA,CAAA14S,EAAA0hL,YACA1hL,EAAA0hL,UACAif,EAAAjf,OAKA5+J,IAAA,CAAA9iB,EAAA0hL,EAAA2/R,IACAlE,GAAAn9c,EAAA0hL,EAAA,IA6DA,SAAA1hL,EAAA0hL,EAAA2/R,GACA,MAAA3gM,OAAYA,EAAA+M,WAAA2zL,YAAAj4B,aAAAxB,GAA6D3nb;AACzE,IAAA7G,EAAAunR,EAAAh/F;AAYA,OAVAnlF,EAAApjG,IAAAwub,EAAA0E,aAAA3qQ,KACAvoL,EAWA,SAAAuoL,EAAApiE,EAAAt/G,EAAAqhd,GACA,MAAA3gM,OAAYA,EAAA+M,WAAA2zL,YAAAv2Q,UAA0C7qM;AACtD,GAAA6qM,EAAAzjL,IAAAs6J,GACA,UAAAxqL,MAAA,uBAAAmT,MAAA0Z,KAAA8mL,GAAAv8L,KAAA,WAAAozK;AAEAmpB,EAAAz8J,IAAAszI;AACA,IAAAvoL,EAAAmmH,EAAAmuK,EAAA2zL,GAAAC;AAMA,OALAx2Q,EAAA/uH,OAAA4lG,GACA27R,GAAA37R,EAAAvoL,KAEAA,EAAAmkd,GAAA58L,EAAAq8L,QAAAr8L,EAAAh/F,EAAAvoL,IAEAA,CACA,CAbA,CAXAuoL,EAAAvoL,EAAA6G,EAAAqhd,IAEA1qd,EAAAwC,MAAApC,SACAoC,EAsBA,SAAAuoL,EAAAvoL,EAAA6G,EAAAssb,GACA,MAAA5rK,OAAYA,EAAA+M,WAAA2zL,YAAAj4B,aAAAxB,GAA6D3nb;AACzE,YAAAytR,EAAAluR,OAAA+sb,EAAA5qQ,GACA,OAAAvoL,EAAAs0R,EAAAluR,MAAApG,EAAApC;AACM,GAAAs0G,EAAAlyG,EAAA,KAEN,MAAA6+S,EAAA7+S,EACAuna,EAAAhgJ,EAAAq8L,QAAAhgc,OAAA/jB,OAAAg/S;AACA7+S,EAAA;AACA,UAAAy1J,KAAAopJ,EAAA,CACA,MAAAk0I,EAAAoxB,GAAA58C,EAAAhgJ,EAAAh/F,EAAA9yB;AACAz1J,EAAAiF,KAAAqub,EAAAP,EAAAz+J,EAAA2zL,KAAA1/R,GAAAimQ,GACA,CACA,CACA,OAAAxub,CACA,CAfA,CAtBAuoL,EAAAvoL,EAAA6G,EAAA2nb,EAAA2E,cAEA+wB,GAAA37R,EAAAvoL,KAEAA,EAAAszb,EAAAtzb,EAAAs0R,EAAA2zL,KAAA1/R,GAAAimQ,IAEAxub,CACA,CAfA,CA7DA6G,EAAA0hL,EAAA2/R,IAKAnvX,yBAAA,CAAAlyF,EAAA0hL,IACA1hL,EAAAmpb,aAAAW,QAAA5gT,QAAA9hH,IAAAu5K,EAAAjf,GAAA,CACA9hI,cACAC,sBACc53B,EAAAihH,QAAAh3C,yBAAAyuG,EAAAjf,GAIdljK,eAAA,IACA0qH,QAAA1qH,eAAAmiL,GAIAv5K,IAAA,CAAApnB,EAAA0hL,IACAx4C,QAAA9hH,IAAAu5K,EAAAjf,GAIAmf,QAAA,IACA33D,QAAA23D,QAAAF,GAIAt9K,IAAA,CAAArjB,EAAA0hL,EAAAvoL,KACAwnM,EAAAjf,GAAAvoL,SACA6G,EAAA0hL,QAIA,EAk/BA7xI,EAAA6nZ,eAr4CA,SAAAzmS,EAAA/rF,EAAAllE,EAAA+T,GACA,IAAAmxD,EACA,OAAA+rF,EAAA+0R,OAAAhmb,EAAAxC,EAAAwC,EAAAgI;AAEAipJ,EAAAqwT,cAAAvtc,EAAAmxD,EAAAq8Y,KAAAr8Y,EAAAs8Y,KAAAztc,EAAAmxD,EAAAu8Y,KAAAv8Y,EAAAw8Y,KAAA3tc,EAAA/T,EAAAwhd,KAAAxhd,EAAAuhd,KAAAxtc,EAAA/T,EAAA0hd,KAAA1hd,EAAAyhd,KAAAzhd,EAAAxC,EAAAwC,EAAAgI,EACA,EAi4CA6nC,EAAAqpZ,qBA9ZA,SAAA7pE,EAAAC,EAAAh6X,EAAA+Y,GACA,MAAAszc,EAAA,CACAnkd,EAAA6xX,EAAAmyF,KACAx5c,EAAAqnX,EAAAqyF,MAEAE,EAAA,CACApkd,EAAA8xX,EAAAiyF,KACAv5c,EAAAsnX,EAAAmyF,MAEAnqd,EAAA6hc,GAAA9pE,EAAAsyF,EAAArsd,GACAmc,EAAA0nb,GAAAwoB,EAAAC,EAAAtsd,GACAqF,EAAAw+b,GAAAyoB,EAAAtyF,EAAAh6X,GACAa,EAAAgjc,GAAA7hc,EAAAma,EAAAnc,GACAuB,EAAAsic,GAAA1nb,EAAA9W,EAAArF;AACA,OAAA6jc,GAAAhjc,EAAAU,EAAAvB,EACA,EAgZAu6C,EAAA6vZ,cAAqBA,GACrB7vZ,EAAAkpZ,eAxOA,SAAA1mb,EAAAxB,GACA,MAAA4M,EAAA,GACAo7a,EAAAxmb,EAAAwmb;AACA,QAAA/hc,EAAA,EAAmBA,EAAA+hc,EAAA9hc,OAAqBD,IAAA,CACxC,MAAAgoI,EAAA4gU,GAAA7G,EAAA/hc,GAAAub,EAAAwkZ,OAAAhmZ;AACAiuH,EAAA/nI,QACA0mB,EAAArf,QAAA0gI,EAEA,CACA,OAAArhH,CACA,EA+NAoyB,EAAAi5Y,YAAmBA,EACnBj5Y,EAAAipZ,iBApKA,SAAAzmb,EAAAwvc,GACA,MAAAhrD,EAAAxkZ,EAAAwkZ,OACAuY,EAAA/8Z,EAAA7Z,QAAA42a,SACAz4R,EAAAkgR,EAAA9/Z;AACA,IAAA4/I,EACA;AAEA,MAAAi5Q,IAAAv9Y,EAAAu9H,OACAl6H,MAAYA,EAAAC,OAnEZ,SAAAkhZ,EAAAlgR,EAAAi5Q,EAAAwf,GACA,IAAA15Z,EAAA,EACAC,EAAAghI,EAAA;AACA,GAAAi5Q,IAAAwf,EACA,KAAA15Z,EAAAihI,IAAAkgR,EAAAnhZ,GAAA2P,MACA3P;AAGA,KAAAA,EAAAihI,GAAAkgR,EAAAnhZ,GAAA2P,MACA3P;AAMA,IAJAA,GAAAihI,EACAi5Q,IACAj6Y,GAAAD,GAEAC,EAAAD,GAAAmhZ,EAAAlhZ,EAAAghI,GAAAtxH,MACA1P;AAGA,OADAA,GAAAghI,EACA,CACAjhI,QACAC,MAEA,CAvBA,CAmE2BkhZ,EAAAlgR,EAAAi5Q,EAAAwf;AAC3B,OAaA,SAAA/8Z,EAAAwmb,EAAAhiC,EAAAgrD,GACA,OAAAA,KAAAzlC,YAAAvlB,EAKA,SAAAxkZ,EAAAwmb,EAAAhiC,EAAAgrD,GACA,MAAAC,EAAAzvc,EAAAunZ,OAAAiH,aACAkhD,EAAAnB,GAAAvuc,EAAA7Z,UACYi3a,cAAAxU,EAAAzia,SAAA42a,SAAyCA,IAAe/8Z,EACpEskI,EAAAkgR,EAAA9/Z,OACA0mB,EAAA;AACA,IAAAqjc,EAAAiB,EACArsc,EAAAmjb,EAAA,GAAAnjb,MACA5e,EAAA4e;AACA,SAAAssc,EAAAhpd,EAAAnC,EAAAtD,EAAA0oD,GACA,MAAA/hD,EAAAk1a,GAAA;AACA,GAAAp2a,IAAAnC,EAAA,CAIA,IADAmC,GAAA29I,EACAkgR,EAAA79Z,EAAA29I,GAAAtxH,MACArsB,GAAAkB;AAEA,KAAA28Z,EAAAhga,EAAA8/I,GAAAtxH,MACAxuB,GAAAqD;AAEAlB,EAAA29I,IAAA9/I,EAAA8/I,IACAl5H,EAAArf,KAAA,CACAsX,MAAA1c,EAAA29I,EACAhhI,IAAA9e,EAAA8/I,EACAi5Q,KAAAr8Z,EACA4Q,MAAA83C,IAEA6ka,EAAA7ka,EACAvmC,EAAA7e,EAAA8/I,EAhBA,CAkBA,CACA,UAAAg5R,KAAAkpB,EAAA,CACAnjb,EAAA05Z,EAAA15Z,EAAAi6Z,EAAAj6Z;AACA,IACAvR,EADA8iQ,EAAA4vJ,EAAAnhZ,EAAAihI;AAEA,IAAA7/I,EAAA4e,EAAA,EAA2B5e,GAAA64a,EAAAh6Z,IAAkB7e,IAAA,CAC7C,MAAAkB,EAAA6+Z,EAAA//Z,EAAA6/I;AACAxyI,EAAAy8c,GAAAiB,EAAAzlC,WAAAhoI,GAAA0tK,EAAA,CACAxnd,KAAA,UACA2nd,GAAAh7M,EACAooH,GAAAr3X,EACAkqd,aAAAprd,EAAA,GAAA6/I,EACAwrU,YAAArrd,EAAA6/I,EACAskR,mBAEA4lD,GAAA18c,EAAA28c,IACAkB,EAAAtsc,EAAA5e,EAAA,EAAA64a,EAAA/f,KAAAkxD,GAEA75M,EAAAjvQ,EACA8od,EAAA38c,CACA,CACAuR,EAAA5e,EAAA,GACAkrd,EAAAtsc,EAAA5e,EAAA,EAAA64a,EAAA/f,KAAAkxD,EAEA,CACA,OAAArjc,CACA,CAzDA,CAFApL,EAAAwmb,EAAAhiC,EAAAgrD,GAFAhpB,CAGA,CALA,CAZAxmb,OADA+8Z,EACA,CACA,CACA15Z,QACAC,MACAi6Y,SAjDA,SAAAiH,EAAAnhZ,EAAAJ,EAAAs6Y,GACA,MAAAj5Q,EAAAkgR,EAAA9/Z,OACA0mB,EAAA;AACA,IAEA9H,EAFA+wK,EAAAhxK,EACAuxP,EAAA4vJ,EAAAnhZ;AAEA,IAAAC,EAAAD,EAAA,EAAyBC,GAAAL,IAAYK,EAAA,CACrC,MAAAunJ,EAAA25P,EAAAlhZ,EAAAghI;AACAumB,EAAA73I,MAAA63I,EAAAx8J,KACAumQ,EAAA5hP,OACAuqY,KACAnyY,EAAArf,KAAA,CACAsX,QAAAihI,EACAhhI,OAAA,GAAAghI,EACAi5Q,SAEAl6Y,EAAAgxK,EAAAxpB,EAAAx8J,KAAAiV,EAAA,OAGA+wK,EAAA/wK,EACAsxP,EAAA5hP,OACA3P,EAAAC,IAGAsxP,EAAA/pG,CACA,CAQA,OAPA,OAAAwpB,GACAjpK,EAAArf,KAAA,CACAsX,QAAAihI,EACAhhI,IAAA+wK,EAAA/vC,EACAi5Q,SAGAnyY,CACA,CAlCA,CAuDAo5Y,EAAAnhZ,EAFAC,EAAAD,EAAAC,EAAAghI,EAAAhhI,IACAtD,EAAAm/Z,WAAA,IAAA97Z,GAAAC,IAAAghI,EAAA,GAHAkgR,EAAAgrD,EAKA,EAgJAhya,EAAA+8Y,gBAAuBA,GACvB/8Y,EAAAk/Z,eA94EA,SAAAvxc,GACA,IAAA29Z,EAAA39Z,GACA;AAEA,IAAA3G,EAAA,EACAwE,EAAA;AACA,KAAA9B,KAAAG,MAAA8D,EAAA3G,OAAA2G,GACA3G,GAAA,GACAwE;AAEA,OAAAA,CACA,EAo4EAw0C,EAAAuya,YAxiFA,SAAA31L,EAAAtzR,EAAA+rE,EAAAD,QACAh9C,IAAA9uB,GACA4S,QAAAC,KAAAygR,EAAA,MAAAvnN,EAAA,gCAAAD,EAAA,YAEA,EAqiFAp1B,EAAAs5Y,aAAoBA,GACpBt5Y,EAAA2iZ,eAjpFA,SAAApiH,EAAAzwN,GACA,IAAA7oH,EAAA+ja,EAAAhwI,EAAAw3B;AACA,IAAA+tB,IAAAzwN,GAAAywN,EAAAr5U,SAAA4oH,EAAA5oH,OACA;AAEA,IAAAD,EAAA,EAAA+ja,EAAAzqF,EAAAr5U,OAAiCD,EAAA+ja,IAAU/ja,EAG3C,GAFA+zR,EAAAulD,EAAAt5U,GACAurT,EAAA1iM,EAAA7oH,GACA+zR,EAAAowI,eAAA54G,EAAA44G,cAAApwI,EAAAtrR,QAAA8iT,EAAA9iT,MACA;AAGA,QACA,EAqoFAswC,EAAA8uY,WAt8EA,SAAAxlb,GACA,MAAAskB,EAAA,GACAwiQ,EAAA1mR,KAAA0mR,KAAA9mR;AACA,IAAArC;AACA,IAAAA,EAAA,EAAeA,EAAAmpR,EAAUnpR,IACzBqC,EAAArC,IAAA,IACA2mB,EAAArf,KAAAtH,GACA2mB,EAAArf,KAAAjF,EAAArC;AAOA,OAJAmpR,KAAA,EAAAA,IACAxiQ,EAAArf,KAAA6hR,GAEAxiQ,EAAAkL,KAAA,CAAArxB,EAAAma,IAAAna,EAAAma,GAAA02I,MACA1qI,CACA,EAw7EAoyB,EAAA2ka,eA3xEA,SAAAh3Z,EAAAnoC,EAAAC,GACA,IAAAI,EAAA,EACAC,EAAA6nC,EAAAzmD;AACA,KAAA2e,EAAAC,GAAA6nC,EAAA9nC,GAAAL,GACAK;AAEA,KAAAC,EAAAD,GAAA8nC,EAAA7nC,EAAA,GAAAL,GACAK;AAEA,OAAAD,EAAA,GAAAC,EAAA6nC,EAAAzmD,OAAAymD,EAAA5mD,MAAA8e,EAAAC,GAAA6nC,CACA,EAkxEA3N,EAAA6oY,eAAsBA,GACtB7oY,EAAA0/X,iCAhpEA,SAAAp/H,EAAA0mH,EAAAyY,GACA,MAAA6sB,EAAAtlC,EAAA9/Z;AACA,IAAA2e,EAAA,EACAihI,EAAAwlT;AACA,GAAAhsJ,EAAA6wH,QAAA,CACA,MAAA9E,OAAgBA,EAAAN,SAAAgB,WAA6BzsH,EAC7Ci/H,EAAAj/H,EAAAl5N,SAAAk5N,EAAAl5N,QAAAz+E,QAAA23S,EAAAl5N,QAAAz+E,QAAA42a,SAAA,KACAl5Z,EAAAgmZ,EAAAhmZ,MACAb,IAAgBA,EAAAC,MAAA8sZ,aAAAC,cAAuCnG,EAAAoG;AACvD,GAAAF,EAAA,CAIA,GAHA1sZ,EAAAnc,KAAA8b,IACAm9Z,EAAA5V,EAAA1mZ,EAAAb,GAAA8qH,GACAmvS,EAAA6sB,EAAA3pB,EAAA3b,EAAA3gZ,EAAAgmZ,EAAAgK,iBAAA7wZ,IAAA8qH,IACAivS,EAAA,CACA,MAAAqD,EAAA7V,EAAAhma,MAAA,EAAA8e,EAAA,GAAA/N,UAAAoyM,UAAA7tD,IAAAg8Q,EAAAh8Q,EAAA0vQ,EAAA1lZ;AACAR,GAAAnc,KAAA+b,IAAA,EAAAm9Z,EACA,CACA/8Z,EAAA4qa,EAAA5qa,EAAA,EAAAymb,EAAA,EACA,CACA,GAAA95B,EAAA,CACA,IAAA1sZ,EAAApc,KAAA+b,IACAk9Z,EAAA5V,EAAAV,EAAAhmZ,KAAAZ,MAAA6/B,GAAA,EACAm6X,EAAA,EAAAkD,EAAA3b,EAAA3gZ,EAAAgmZ,EAAAgK,iBAAA5wZ,OAAA6/B,GAAA;AACA,GAAAi6X,EAAA,CACA,MAAAsD,EAAA9V,EAAAhma,MAAA+e,EAAA,GAAAokM,UAAA7tD,IAAAg8Q,EAAAh8Q,EAAA0vQ,EAAA1lZ;AACAP,GAAApc,KAAA+b,IAAA,EAAAo9Z,EACA,CACA/7R,EAAA2pS,EAAA3qa,EAAAD,EAAAymb,GAAAzmb,CACA,MACAihI,EAAAwlT,EAAAzmb,CAEA,CACA,OACAA,QACAihI,QAEA,EA6mEA9mG,EAAAyyY,YAr1EA,SAAAnpb,GACA,OAAAmnb,EAAAnnb,GAAA,YACA,EAo1EA02C,EAAAsmZ,WAAkBA,EAClBtmZ,EAAAsjZ,cA7+EA,SAAAt8b,GACA,kBAAAA,EAAAyD,MAAA,UAAAzD,EAAAyD,MAAA,gBAAAzD,EAAAyD,IACA,EA4+EAu1C,EAAA4pY,gBAAuBA,GACvB5pY,EAAAqjY,eAAsBA,GACtBrjY,EAAAywY,YAAmBA,EACnBzwY,EAAAsga,aAzoDA,SAAAl/S,EAAA6pR,EAAAunC,EAAAz/b,GAEA,IAAAa,GADAb,KAAA,IACAa,KAAAb,EAAAa,MAAA,GACAw+Z,EAAAr/Z,EAAA0/b,eAAA1/b,EAAA0/b,gBAAA;AACA1/b,EAAAk4Z,WACAr3Z,EAAAb,EAAAa,KAAA,GACAw+Z,EAAAr/Z,EAAA0/b,eAAA,GACA1/b,EAAAk4Z,QAEA7pR,EAAAp4C,OACAo4C,EAAA6pR;AACA,IAAAqgC,EAAA;AACA,MAAAtgD,EAAAwnD,EAAAtrd;AACA,IAAAD,EAAAqlF,EAAAulW,EAAAtwR,EAAAmxT;AACA,IAAAzrd,EAAA,EAAeA,EAAA+ja,EAAU/ja,IAGzB,GAFAs6J,EAAAixT,EAAAvrd,GAEAs6J,SAAAz6J,EAAAy6J,IAEU,GAAAz6J,EAAAy6J,GAGV,IAAAj1E,EAAA,EAAAulW,EAAAtwR,EAAAr6J,OAA4ColF,EAAAulW,EAAUvlW,IACtDomY,EAAAnxT,EAAAj1E,GAEAomY,SAAA5rd,EAAA4rd,KACApH,EAAAj5B,GAAAjxR,EAAAxtI,EAAAw+Z,EAAAk5B,EAAAoH,SARApH,EAAAj5B,GAAAjxR,EAAAxtI,EAAAw+Z,EAAAk5B,EAAA/pT;AAaAH,EAAA8M;AACA,MAAAokR,EAAAF,EAAAlrb,OAAA;AACA,GAAAorb,EAAAkgC,EAAAtrd,OAAA,CACA,IAAAD,EAAA,EAAmBA,EAAAqrb,EAAWrrb,WAC9B2sB,EAAAw+Z,EAAAnrb;AAEAmrb,EAAA3hb,OAAA,EAAA6hb,EACA,CACA,OAAAg5B,CACA,EAkmDAtra,EAAA4ja,QAAeA,EACf5ja,EAAA2iY,aAAoBA,EACpB3iY,EAAAqyY,aAAoBA,GACpBryY,EAAA+ma,QAAeA,EACf/ma,EAAAkna,UAAiBA,EACjBlna,EAAA4mZ,gBAAuBA,EACvB5mZ,EAAA4gY,4BAj2BA,SAAAtgI,EAAA1sR,EAAA/N,EAAAihI,GACA,MAAAulR,OAAYA,GAAU/rH,GACtB1gR,IAAYA,EAAA,KAAYj5B,KAAA4ma,SACxBj4E,EAAA,IAAA96U,MAAAssI;AACA,IAAA7/I,EAAA+ja,EAAAt7Z,EAAAqvJ;AACA,IAAA93J,EAAA,EAAA+ja,EAAAlkR,EAA6B7/I,EAAA+ja,IAAU/ja,EACvCyI,EAAAzI,EAAA4e,EACAk5I,EAAAnrI,EAAAlkB,GACA4lV,EAAAruV,GAAA,CACAO,EAAA6ka,EAAAxvZ,MAAAg1Z,EAAA9yQ,EAAAn/H,GAAAlwB;AAGA,OAAA4lV,CACA,EAq1BAt1S,EAAAspZ,aAAoBA,GACpBtpZ,EAAAskZ,kBAAyBA,GACzBtkZ,EAAA0iY,cArzEA,CAAAroB,EAAAz6X,EAAAt2B,IAAAs6c,EAAAvpD,EAAA/wZ,EAAAoG,GAAA2qZ,EAAA3qZ,GAAAkwB,IAAAt2B,GAszEA02C,EAAA2/X,oBAxnEA,SAAAr/H,GACA,MAAAgvH,OAAYA,EAAAE,SAAAmjD,gBAAkCryK,EAC9CsyK,EAAA,CACAC,KAAAvjD,EAAA9pZ,IACAstc,KAAAxjD,EAAA7pZ,IACAstc,KAAAvjD,EAAAhqZ,IACAwtc,KAAAxjD,EAAA/pZ;AAEA,IAAAktc,EAEA,OADAryK,EAAAqyK,aAAAC;AAGA,MAAA7xT,EAAA4xT,EAAAE,OAAAvjD,EAAA9pZ,KAAAmtc,EAAAG,OAAAxjD,EAAA7pZ,KAAAktc,EAAAI,OAAAvjD,EAAAhqZ,KAAAmtc,EAAAK,OAAAxjD,EAAA/pZ;AAEA,OADAiJ,OAAA4rD,OAAAq4Y,EAAAC,GACA7xT,CACA,EA0mEA/gH,EAAAo/Z,mBA97EA,SAAA3+T,EAAAtwI,EAAAkkI,GACA,IAAAptI,EAAA+ja,EAAA1ha;AACA,IAAArC,EAAA,EAAA+ja,EAAAvqR,EAAAv5I,OAAoCD,EAAA+ja,EAAU/ja,IAC9CqC,EAAAm3I,EAAAx5I,GAAAotI,GACAzyD,MAAAt4E,KACA6G,EAAAqV,IAAA9b,KAAA8b,IAAArV,EAAAqV,IAAAlc,GACA6G,EAAAsV,IAAA/b,KAAA+b,IAAAtV,EAAAsV,IAAAnc,GAGA,EAs7EA02C,EAAAona,UAAiBA,EACjBpna,EAAAopZ,sBAxcA,SAAA5pE,EAAAC,EAAAh6X,EAAA+Y,GACA,OACA7Q,EAAA6xX,EAAA7xX,EAAAlI,GAAAg6X,EAAA9xX,EAAA6xX,EAAA7xX,GACAwK,EAAA,WAAAqG,EAAA/Y,EAAA,GAAA+5X,EAAArnX,EAAAsnX,EAAAtnX,EAAA,UAAAqG,EAAA/Y,EAAA,EAAA+5X,EAAArnX,EAAAsnX,EAAAtnX,EAAA1S,EAAA,EAAAg6X,EAAAtnX,EAAAqnX,EAAArnX,EAEA,EAocA6nC,EAAA0nZ,eA17CA,SAAAtmS,EAAA/rF,EAAAllE,EAAA+T,EAAA1F,GACA,IAAA62D,EACA,OAAA+rF,EAAA+0R,OAAAhmb,EAAAxC,EAAAwC,EAAAgI;AAEA,cAAAqG,EAAA,CACA,MAAAy0c,GAAA59Y,EAAA1nE,EAAAwC,EAAAxC,GAAA;AACAyzJ,EAAA+0R,OAAA88B,EAAA59Y,EAAAl9D,GACAipJ,EAAA+0R,OAAA88B,EAAA9id,EAAAgI,EACA,KAAM,UAAAqG,KAAA0F,EACNk9I,EAAA+0R,OAAA9gX,EAAA1nE,EAAAwC,EAAAgI,GAEAipJ,EAAA+0R,OAAAhmb,EAAAxC,EAAA0nE,EAAAl9D;AAEAipJ,EAAA+0R,OAAAhmb,EAAAxC,EAAAwC,EAAAgI,EACA,EA66CA6nC,EAAA2zZ,OA9qEA,CAAAtoB,EAAA92a,EAAAI,EAAAiS,IAEAyka,KADAzka,EAAA,gBACAjS,EAAA,WAAA02a,GAAA92a,EAAAI,GAAA,EAAAJ,EA6qEAyrC,EAAAsrY,mBAvrEAD,GAAA,UAAAA,EAAA,eAAAA,EAAA,iBAwrEArrY,EAAA+oZ,2BAltBA,SAAA/hC,EAAAr+Z,EAAAy9P,EAAA25J,EAAAkP,GACA,IAAAhoa,EAAA+ja,EAAA3uQ,EAAA62T;AAKA,GAHAvqd,EAAA42a,WACAvY,IAAA95Y,OAAA/kB,MAAAqtB,OAEA,aAAA7sB,EAAAi/b,uBACAmnB,GAAA/nD,EAAAiI;IACM,CACN,IAAA73J,EAAA2oJ,EAAAiH,IAAA9/Z,OAAA,GAAA8/Z,EAAA;AACA,IAAA//Z,EAAA,EAAA+ja,EAAAhE,EAAA9/Z,OAAyCD,EAAA+ja,IAAU/ja,EACnDo1J,EAAA2qQ,EAAA//Z,GACAisd,EAAA3E,GAAAn3M,EAAA/6G,EAAA2qQ,EAAAt9Z,KAAA8b,IAAAve,EAAA,EAAA+ja,GAAAjL,EAAA,MAAAiL,GAAAria,EAAAg/b,SACAtrS,EAAAq1T,KAAAwB,EAAA79Y,SAAA1nE,EACA0uJ,EAAAu1T,KAAAsB,EAAA79Y,SAAAl9D,EACAkkJ,EAAAs1T,KAAAuB,EAAAtzX,KAAAjyF,EACA0uJ,EAAAw1T,KAAAqB,EAAAtzX,KAAAznF,EACAi/P,EAAA/6G,CAEA,CACA1zJ,EAAA+/b,iBA3CA,SAAA1hC,EAAA5gK,GACA,IAAAn/P,EAAA+ja,EAAA3uQ,EAAA82T,EAAAC,EACAC,EAAAhwC,GAAArc,EAAA,GAAA5gK;AACA,IAAAn/P,EAAA,EAAA+ja,EAAAhE,EAAA9/Z,OAAqCD,EAAA+ja,IAAU/ja,EAC/Cmsd,EAAAD,EACAA,EAAAE,EACAA,EAAApsd,EAAA+ja,EAAA,GAAAqY,GAAArc,EAAA//Z,EAAA,GAAAm/P,GACA+sN,IAGA92T,EAAA2qQ,EAAA//Z,GACAmsd,IACA/2T,EAAAq1T,KAAA9B,GAAAvzT,EAAAq1T,KAAAtrN,EAAA7xP,KAAA6xP,EAAAzxP,OACA0nJ,EAAAu1T,KAAAhC,GAAAvzT,EAAAu1T,KAAAxrN,EAAA5xP,IAAA4xP,EAAA3xP,SAEA4+c,IACAh3T,EAAAs1T,KAAA/B,GAAAvzT,EAAAs1T,KAAAvrN,EAAA7xP,KAAA6xP,EAAAzxP,OACA0nJ,EAAAw1T,KAAAjC,GAAAvzT,EAAAw1T,KAAAzrN,EAAA5xP,IAAA4xP,EAAA3xP,SAGA,CApBA,CA4CAuyZ,EAAA5gK,EAEA,EA4rBApmN,EAAAqrZ,mBAv1CA,SAAAjqS,EAAAp5I,GACA,MAAAra,EAAYA,EAAAwK,IAAAqD,IAAA9T,IAAAsE,UAA0Bgc;AAEtCo5I,EAAA29Q,IAAApxa,EAAA3B,EAAAg/b,QAAA7yb,EAAAnM,EAAAg/b,QAAAh/b,EAAAg/b,QAAA,IAAA7uR,QAEA/a,EAAA+0R,OAAAxob,EAAAwK,EAAAzQ,EAAAsE,EAAAk/b,YAEA9pS,EAAA29Q,IAAApxa,EAAA3B,EAAAk/b,WAAA/yb,EAAAzQ,EAAAsE,EAAAk/b,WAAAl/b,EAAAk/b,WAAA/uR,EAAAgiQ,MAEA/8Q,EAAA+0R,OAAAxob,EAAA6N,EAAAxP,EAAAm/b,YAAAhzb,EAAAzQ,GAEA05J,EAAA29Q,IAAApxa,EAAA6N,EAAAxP,EAAAm/b,YAAAhzb,EAAAzQ,EAAAsE,EAAAm/b,YAAAn/b,EAAAm/b,YAAAhtB,EAAA,MAEA/8Q,EAAA+0R,OAAAxob,EAAA6N,EAAArD,EAAAnM,EAAAi/b,UAEA7pS,EAAA29Q,IAAApxa,EAAA6N,EAAAxP,EAAAi/b,SAAA9yb,EAAAnM,EAAAi/b,SAAAj/b,EAAAi/b,SAAA,GAAA9sB,MAEA/8Q,EAAA+0R,OAAAxob,EAAA3B,EAAAg/b,QAAA7yb,EACA,EAs0CA6nC,EAAAi/Z,aAAoBA,EACpBj/Z,EAAAg/Z,YA78EA,SAAArxc,EAAAg9a,GACA,MAAA2oC,EAAA5pd,KAAAG,MAAA8D;AACA,OAAA2ld,EAAA3oC,GAAAh9a,GAAA2ld,EAAA3oC,GAAAh9a,CACA,EA28EAqyC,EAAA1/B,SAjtFA,SAAA2W,EAAAoI,EAAA6oR,GACA,GAAAjxR,GAAA,mBAAAA,EAAA1lB,KACA,OAAA0lB,EAAA3d,MAAA4uS,EAAA7oR,EAEA,EA8sFA2gB,EAAA6+Y,YAzmDA,SAAA1X,EAAA/lR,IACAA,GAAA+lR,MAGA/lR,KAAA+lR,EAAAnW,WAAA,OACAhoT,OAGAo4C,EAAAmyT,iBACAnyT,EAAAoyT,UAAA,IAAArsC,EAAAzya,MAAAyya,EAAAl/Z,QACAm5I,EAAA8M,UACA,EA+lDAluH,EAAAy2Y,SA98CA,SAAAr1R,EAAAglG,GACAhlG,EAAAp4C,OACAo4C,EAAA60R,YACA70R,EAAAp5I,KAAAo+O,EAAA7xP,KAAA6xP,EAAA5xP,IAAA4xP,EAAAzxP,MAAAyxP,EAAA7xP,KAAA6xP,EAAA3xP,OAAA2xP,EAAA5xP,KACA4sJ,EAAA4xQ,MACA,EA08CAhzX,EAAA0/H,MAAaA,EACb1/H,EAAA/zC,MAziEA,SAAA3C,GACA,OAAA8gd,EAAA9gd,KAAA,IAAAs9c,EAAAl9E,MAAApgY,EACA,EAwiEA02C,EAAAukQ,cAAqBA,GACrBvkQ,EAAAshH,SAjtEA,SAAArqI,EAAAyxL,GACA,IAAA51M;AACA,mBAAAusB,GAOA,OANAqpL,GACA7yM,aAAA/C,GACAA,EAAAgD,WAAAmhB,EAAAyxL,EAAArpL,IAEApI,EAAA3d,MAAA3S,KAAA04B,GAEAqpL,CACA,CACA,EAusEA1oK,EAAAmR,SAAgBA,GAChBnR,EAAA0zX,QAhiFApqa,QAAA,IAAAA,EAiiFA02C,EAAA83Y,YAAmBA,GACnB93Y,EAAAu1Z,sBAA6BA,EAC7Bv1Z,EAAAiqZ,UAvmDA,SAAA7oS,EAAAz4J,EAAAgF,EAAAwK,GAEAq7b,GAAApyS,EAAAz4J,EAAAgF,EAAAwK,EAAA,KACA,EAqmDA6nC,EAAAwzZ,gBAAuBA,GACvBxzZ,EAAA2mY,KAztFA,SAAA8sC,EAAAx8b,EAAAixR,EAAApwS,GACA,IAAA7Q,EAAA02B,EAAA0hB;AACA,GAAAv4C,EAAA2sd,GAEA,GADA91b,EAAA81b,EAAAvsd,OACA4Q,EACA,IAAA7Q,EAAA02B,EAAA,EAA6B12B,GAAA,EAAQA,IACrCgwB,EAAA1lB,KAAA22S,EAAAurK,EAAAxsd;KAGA,IAAAA,EAAA,EAAuBA,EAAA02B,EAAS12B,IAChCgwB,EAAA1lB,KAAA22S,EAAAurK,EAAAxsd;KAGM,GAAAu0G,EAAAi4W,GAGN,IAFAp0a,EAAA3wB,OAAA2wB,KAAAo0a,GACA91b,EAAA0hB,EAAAn4C,OACAD,EAAA,EAAmBA,EAAA02B,EAAS12B,IAC5BgwB,EAAA1lB,KAAA22S,EAAAurK,EAAAp0a,EAAAp4C,IAAAo4C,EAAAp4C,GAGA,EAssFA+4C,EAAAupX,QAAeA,EACfvpX,EAAA0sY,gBAlvFA,SAAApjb,EAAA05S,GACA,OAAAsoH,EAAAhia,KAAA05S,CACA,EAivFAhjQ,EAAA+xY,WA5vEA,SAAA2hC,EAAAn8D,EAAA5B,GACA,OAAA4B,EAAA,IAAAm8D,EAAA,MAAA/9D,CACA,EA2vEA31W,EAAA6L,aAAoBA,EACpB7L,EAAA8jY,kBAv7EA,SAAA6vC,EAAAC,GACA,MAAAC,EAAAD,EAAAjmd,EAAAgmd,EAAAhmd,EACAmmd,EAAAF,EAAAz7c,EAAAw7c,EAAAx7c,EACA47c,EAAArqd,KAAA0mR,KAAAyjM,IAAAC;AACA,IAAA1gM,EAAA1pR,KAAA8mR,MAAAsjM,EAAAD;AAIA,OAHAzgM,GAAA,GAAAj3G,IACAi3G,GAAAypJ,GAEA,CACAzpJ,QACApkR,SAAA+kd,EAEA,EA46EA/za,EAAA0hZ,mBA5FA,SAAAr5B,EAAA/nH,GACA,MAAA0yH,EAAA1yH,EAAAyyH;AACA,GAAAC,EAAA38Z,SACA;AAEA,MAAA+vP,EAjBA,SAAAk6C,EAAA2yH,GACA,MAAA3D,OAAYA,EAAAE,UAAmBlvH;AAC/B,OAAAgvH,GAAAE,EACA,CACAj7Z,KAAA28c,GAAA5hD,EAAA2D,EAAA,QACAt+Z,MAAAu8c,GAAA5hD,EAAA2D,EAAA,SACAz+Z,IAAA08c,GAAA1hD,EAAAyD,EAAA,OACAx+Z,OAAAy8c,GAAA1hD,EAAAyD,EAAA,WAGAA,CACA,CAXA,CAiBA3yH,EAAA+nH,EAAA4K;AACA,OACA1+Z,UAAAy+Z,EAAAz+Z,KAAA,EAAA6xP,EAAA7xP,WAAAy+Z,EAAAz+Z,KAAA,EAAAy+Z,EAAAz+Z,MACAI,WAAAq+Z,EAAAr+Z,MAAA0zZ,EAAA3zZ,MAAA0xP,EAAAzxP,YAAAq+Z,EAAAr+Z,MAAA,EAAAq+Z,EAAAr+Z,OACAH,SAAAw+Z,EAAAx+Z,IAAA,EAAA4xP,EAAA5xP,UAAAw+Z,EAAAx+Z,IAAA,EAAAw+Z,EAAAx+Z,KACAC,YAAAu+Z,EAAAv+Z,OAAA4zZ,EAAApgZ,OAAAm+O,EAAA3xP,aAAAu+Z,EAAAv+Z,OAAA,EAAAu+Z,EAAAv+Z,QAEA,EAiFAurC,EAAAqqa,cAAqBA,EACrBrqa,EAAAsnY,eA/kBA,SAAAH,EAAA6sC,EAAAC,EAAAryL,GACA,MAAAttR,EAAAyX,GAAAo7Z,GACAtyK,EAAAq7M,GAAA57c,EAAA,UACAuvP,EAAAisN,GAAAx7c,EAAAuvP,SAAAsjL,EAAA,gBAAAmgC,EACAvjN,EAAA+rN,GAAAx7c,EAAAyvP,UAAAojL,EAAA,iBAAAmgC,EACA4M,EAhCA,SAAA/sC,EAAAzya,EAAAuT,GACA,IAAA47O,EAAAE;AACA,QAAA3rO,IAAA1jB,QAAA0jB,IAAAnQ,EAAA,CACA,MAAA3R,EAAA6wa,GAAA0B,GAAA1B;AACA,GAAA7wa,EAGU,CACV,MAAA0R,EAAA1R,EAAAvC,wBACAogd,EAAApoc,GAAAzV,GACA89c,EAAAlE,GAAAiE,EAAA,kBACAE,EAAAnE,GAAAiE,EAAA;AACAz/c,EAAAsT,EAAAtT,MAAA2/c,EAAA3/c,MAAA0/c,EAAA1/c,MACAuT,EAAAD,EAAAC,OAAAosc,EAAApsc,OAAAmsc,EAAAnsc,OACA47O,EAAAisN,GAAAqE,EAAAtwN,SAAAvtP,EAAA,eACAytP,EAAA+rN,GAAAqE,EAAApwN,UAAAztP,EAAA,eACA,MAXA5B,EAAAyya,EAAAh2Z,YACAlJ,EAAAk/Z,EAAA/1Z,YAWA,CACA,OACA1c,QACAuT,SACA47O,YAAAyjN,EACAvjN,aAAAujN,EAEA,CAxBA,CAgCAngC,EAAA6sC,EAAAC;AACA,IAAAv/c,MAAUA,EAAAuT,UAAkBisc;AAC5B,mBAAA5/c,EAAAy+W,UAAA,CACA,MAAAuhG,EAAApE,GAAA57c,EAAA,kBACAigd,EAAArE,GAAA57c,EAAA;AACAI,GAAA6/c,EAAA7/c,MAAA4/c,EAAA5/c,MACAuT,GAAAssc,EAAAtsc,OAAAqsc,EAAArsc,MACA,CAeA,OAdAvT,EAAAhL,KAAA+b,IAAA,EAAA/Q,EAAAmgQ,EAAAngQ,OACAuT,EAAAve,KAAA+b,IAAA,EAAAm8Q,EAAAltR,EAAAktR,EAAA35Q,EAAA4sP,EAAA5sP,QACAvT,EAAAy7c,GAAAzmd,KAAA8b,IAAA9Q,EAAAmvP,EAAAqwN,EAAArwN,WACA57O,EAAAkoc,GAAAzmd,KAAA8b,IAAAyC,EAAA87O,EAAAmwN,EAAAnwN,YACArvP,IAAAuT,IAGAA,EAAAkoc,GAAAz7c,EAAA,UAEA0jB,IAAA47b,QAAA57b,IAAA67b,IACAryL,GAAAsyL,EAAAjsc,UAAAisc,EAAAjsc,SACAA,EAAAisc,EAAAjsc,OACAvT,EAAAy7c,GAAAzmd,KAAAE,MAAAqe,EAAA25Q,KAEA,CACAltR,QACAuT,SAEA,EAijBA+3B,EAAAkkY,oBAjoBA,SAAA7za,EAAAg4Z,GACA,cAAAh4Z,EACA,OAAAA;AAEA,MAAA82a,OAAYA,EAAAwB,2BAAoCtgB,EAChD/zZ,EAAAyX,GAAAo7Z,GACAqtC,EAAA,eAAAlgd,EAAAy+W,UACAwhG,EAAArE,GAAA57c,EAAA,WACAggd,EAAApE,GAAA57c,EAAA,mBACA3G,EAAYA,EAAAwK,IAAAqxP,OAnCZ,SAAAxiQ,EAAAmgb,GACA,MAAAprR,EAAA/0J,EAAA+0J,QACA7kH,EAAA6kH,KAAA70J,OAAA60J,EAAA,GAAA/0J,GACAuwK,QAAYA,EAAAC,WAAqBtgI;AACjC,IACAvpC,EAAAwK,EADAqxP;AAEA,GAXA,EAAA77P,EAAAwK,EAAAhI,KAAAxC,EAAA,GAAAwK,EAAA,MAAAhI,MAAAq0M,YAAA,CAWAjtC,EAAAC,EAAAxwK,EAAAmJ,QACAxC,EAAA4pK,EACAp/J,EAAAq/J;IACM,CACN,MAAAxvJ,EAAAm/Z,EAAApza;AACApG,EAAAupC,EAAAuoH,QAAAz3I,EAAAzT,KACA4D,EAAA++B,EAAAwoH,QAAA13I,EAAAxT,IACAg1P,IACA,CACA,OACA77P,IACAwK,IACAqxP,MAEA,CApBA,CAmC2Bn5P,EAAA82a,GAC3BokC,EAAAgJ,EAAAhgd,MAAAi1P,GAAA8qN,EAAA//c,MACAi3c,EAAA+I,EAAA//c,KAAAg1P,GAAA8qN,EAAA9/c;AACA,IAAAE,MAAUA,EAAAuT,UAAkBogZ;AAK5B,OAJAmsD,IACA9/c,GAAA6/c,EAAA7/c,MAAA4/c,EAAA5/c,MACAuT,GAAAssc,EAAAtsc,OAAAqsc,EAAArsc,QAEA,CACAta,EAAAjE,KAAAG,OAAA8D,EAAA49c,GAAA72c,EAAAyya,EAAAzya,MAAAi0a,GACAxwa,EAAAzO,KAAAG,OAAAsO,EAAAqzc,GAAAvjc,EAAAk/Z,EAAAl/Z,OAAA0ga,GAEA,EA6mBA3oY,EAAA2yZ,cAvaA,SAAA/rb,EAAA6tc,EAAA//c,GACA,OAAAkS,EAxCA,SAAA6tc,EAAA//c,GACA,OACA/G,KACA8md,IAAA//c,EAAA/G,EAEA,QAAAylc,CAAA53b,GACA9G,EAAA8G,CACA,EACA0iZ,UAAAmtB,GACA,WAAAA,EACAA,EAEA,UAAAA,EAAA,eAEAkoB,MAAA,CAAA5lc,EAAArE,IACAqE,EAAArE,EAEAupc,WAAA,CAAAllc,EAAAqkc,IACArkc,EAAAqkc,EAGA,CArBA,CAwCAyiB,EAAA//c,GAjBA,CACA/G,KACAA,EAEA,QAAAylc,CAAA53b,GAAA,EACA0iZ,UAAAmtB,GACAA,EAEAkoB,MAAA,CAAA5lc,EAAArE,IACAqE,EAAArE,EAEAupc,WAAA,CAAAllc,EAAA+md,IACA/md,EAMA,EAsaAqyC,EAAAmzX,SAAgBA,GAChBnzX,EAAAl5C,QAAeA,EACfk5C,EAAA0sD,WAAkBA,EAClB1sD,EAAAq4X,cAAqBA,EACrBr4X,EAAAq7C,SA7+EA,SAAAl0F,GACA,OAJA,SAAAA,GACA,uBAAAA,GAAA,iBAAAA,GAAA,OAAAA,KAAA26E,OAAAC,eAAA56E,GAAA,aAAAA,GAAA,YAAAA,EACA,CAFA,CAIAA,KAAAy6E,MAAA9yD,WAAA3nB,KAAAmoB,SAAAnoB,EACA,EA4+EA64C,EAAAsrX,eAAsBA,EACtBtrX,EAAAw7D,SAAgBA,EAChBx7D,EAAAoqa,oBAA2BA,EAC3Bpqa,EAAAqwX,kBAx0EA,SAAA5vR,EAAA8hB,GACA9hB,EAAAk0U,SACAl0U,EAAAk0U,SAAAhwT,UAAAp2J,KAAAg0J,IAGA7zI,OAAAmhC,eAAA4wF,EAAA,YACAzwF,gBACAD,cACAzmD,MAAA,CACAq7J,UAAA,CACApC,MAIA2lT,EAAA/mc,QAAAye,IACA,MAAA+6C,EAAA,UAAAs+W,EAAAr5Z,GACA02P,EAAA71I,EAAA7gH;AACAlR,OAAAmhC,eAAA4wF,EAAA7gH,EAAA,CACAowB,gBACAD,cACA,KAAAzmD,IAAA+1B,GACA,MAAAkvI,EAAA+nH,EAAAh9Q,MAAA3S,KAAA04B;AAMA,OALAohH,EAAAk0U,SAAAhwT,UAAAxjJ,QAAA6sC,IACA,mBAAAA,EAAA2sB,IACA3sB,EAAA2sB,MAAAt7C,KAGAkvI,CACA,MAGA,EA0yEAvuH,EAAAw/Z,MAAaA,EACbx/Z,EAAA40Q,MAAaA,EACb50Q,EAAAi7Y,QAAeA,EACfj7Y,EAAA++Z,QArhFA,SAAAlgY,GACA,MAAA+1Y,EAAAlrd,KAAAG,MAAAg1E;AACAA,EAAAogY,EAAApgY,EAAA+1Y,EAAA/1Y,EAAA,KAAA+1Y,EAAA/1Y;AACA,MAAAg2Y,EAAAnrd,KAAAC,IAAA,GAAAD,KAAAE,MAAA41c,EAAA3gY,KACAi2Y,EAAAj2Y,EAAAg2Y;AAEA,OADAC,GAAA,IAAAA,GAAA,IAAAA,GAAA,QACAD,CACA,EA+gFA70a,EAAAgkH,KAtzFA,WACA,EAszFAhkH,EAAAizZ,sBAnbA,SAAA7xS,EAAA92J,GACA,IAAAgK,EAAA+/D;AACA,QAAA/pE,GAAA,QAAAA,IACAgK,EAAA8sJ,EAAA+lR,OAAA7ya,MACA+/D,EAAA,CACA//D,EAAA09E,iBAAA,aACA19E,EAAAygd,oBAAA,cAEAzgd,EAAA6jK,YAAA,YAAA7tK,EAAA,aACA82J,EAAA4zT,kBAAA3gZ,EAEA,EAyaAr0B,EAAA67Q,UAAiBA,GACjB77Q,EAAAspY,aAxgBA,SAAAjga,EAAAgrH,GACA,MAAA/qI,EAAA6pa,GAAA9pZ,EAAAgrH,GACAloH,EAAA7iB,KAAAk6B,MAAA;AACA,OAAArX,KAAA,QAAAiM,CACA,EAqgBA4nB,EAAA+vV,WAp6CA,SAAA3uO,EAAAp3J,EAAA2D,EAAAwK,EAAA8ya,EAAArrY,EAAA,IACA,MAAA/lC,EAAA/S,EAAAkD,KAAA,CACAA,GAEAosb,EAAAx2Y,EAAAu1Y,YAAA,QAAAv1Y,EAAAq1Y;AACA,IAAAhub,EAAAub;AAIA,IAHA4+I,EAAAp4C,OACAo4C,EAAA6pR,OAAA9rU,OAtDA,SAAAiiD,EAAAxhH,GACAA,EAAA25G,aACA6H,EAAAx0I,UAAAgzB,EAAA25G,YAAA,GAAA35G,EAAA25G,YAAA,IAEA8+Q,EAAAz4X,EAAAm7X,WACA35Q,EAAAt0I,OAAA8yB,EAAAm7X,UAEAn7X,EAAA3zC,QACAm1J,EAAAq6Q,UAAA77X,EAAA3zC,OAEA2zC,EAAAs+W,YACA98P,EAAA88P,UAAAt+W,EAAAs+W,WAEAt+W,EAAAg1Y,eACAxzR,EAAAwzR,aAAAh1Y,EAAAg1Y,aAEA,CAhBA,CAuDAxzR,EAAAxhH,GACA34C,EAAA,EAAeA,EAAA4S,EAAA3S,SAAkBD,EACjCub,EAAA3I,EAAA5S,GACA24C,EAAAy1Y,UACAk3B,GAAAnrT,EAAAxhH,EAAAy1Y,UAEAe,IACAx2Y,EAAAq1Y,cACA7zR,EAAA+6Q,YAAAv8X,EAAAq1Y,aAEA5c,EAAAz4X,EAAAu1Y,eACA/zR,EAAA66Q,UAAAr8X,EAAAu1Y,aAEA/zR,EAAA6zT,WAAAzyc,EAAA7U,EAAAwK,EAAAynC,EAAAikN,WAEAziG,EAAAu5S,SAAAn4b,EAAA7U,EAAAwK,EAAAynC,EAAAikN,UACAioN,GAAA1qT,EAAAzzJ,EAAAwK,EAAAqK,EAAAo9B,GACAznC,GAAAlG,OAAAg5a,EAAAE;AAEA/pR,EAAA8M,SACA,EAy4CAluH,EAAAyoX,iBAAwBA,EACxBzoX,EAAA27B,QA1vCA,SAAAohG,EAAAx9I,EAAA7vB,EAAAm6K,GACA,IACA5iL,EAAA+ja,EAAA1ha,EADA4rd;AAEA,IAAAjud,EAAA,EAAA+ja,EAAAjuP,EAAA71K,OAAqCD,EAAA+ja,IAAU/ja,EAE/C,GADAqC,EAAAyzK,EAAA91K,QACAmxB,IAAA9uB,SAGA8uB,IAAAmH,GAAA,mBAAAj2B,IACAA,IAAAi2B,GACA21b,WAEA98b,IAAA1oB,GAAA5I,EAAAwC,KACAA,IAAAoG,EAAApG,EAAApC,QACAgud,WAEA98b,IAAA9uB,GAIA,OAHAugL,IAAAqrS,IACArrS,EAAAqrS,cAEA5rd,CAGA,EAouCA02C,EAAA6xX,iBAAwBA,EACxB7xX,EAAA6zZ,qBA9aA,SAAAzyS,EAAA/sF,QACAj8C,IAAAi8C,WACA+sF,EAAA4zT,kBACA5zT,EAAA+lR,OAAA7ya,MAAA6jK,YAAA,YAAA9jG,EAAA,GAAAA,EAAA,IAEA,EA0aAr0B,EAAA4+Y,YAnkBA,SAAAv2B,EAAA8sD,EAAAC,GACA,MAAAC,EAAAF,GAAA,EACAG,EAAAnF,GAAA9nD,EAAApgZ,OAAAotc,GACAE,EAAApF,GAAA9nD,EAAA3zZ,MAAA2gd;AACAhtD,EAAApgZ,OAAAkoc,GAAA9nD,EAAApgZ,QACAogZ,EAAA3zZ,MAAAy7c,GAAA9nD,EAAA3zZ;AACA,MAAAyya,EAAA9e,EAAA8e;AAQA,OAJAA,EAAA7ya,QAAA8gd,IAAAjuC,EAAA7ya,MAAA2T,SAAAk/Z,EAAA7ya,MAAAI,SACAyya,EAAA7ya,MAAA2T,OAAA,GAAiCogZ,EAAApgZ,WACjCk/Z,EAAA7ya,MAAAI,MAAA,GAAgC2zZ,EAAA3zZ,YAEhC2zZ,EAAAsgB,0BAAA0sC,GAAAluC,EAAAl/Z,SAAAqtc,GAAAnuC,EAAAzya,QAAA6gd,KACAltD,EAAAsgB,wBAAA0sC,EACAluC,EAAAl/Z,OAAAqtc,EACAnuC,EAAAzya,MAAA6gd,EACAltD,EAAAjnQ,IAAAo0T,aAAAH,EAAA,IAAAA,EAAA,QAIA,EA8iBAr1a,EAAA+gZ,UApkFA,CAAAt5b,EAAAma,KACA,GAAAna,EAAAud,OAAApD,EAAAoD,KACA;AAEA,UAAA+5I,KAAAt3J,EACA,IAAAma,EAAA2V,IAAAwnI,GACA;AAGA,UA4jFA/+G,EAAAtB,KAAYA,EACZsB,EAAAuua,YAAmBA,GACnBvua,EAAA+ua,oBAA2BA,GAC3B/ua,EAAAioY,6BAAoCA,GACpCjoY,EAAA8oY,UAhxEA,SAAA7xZ,EAAAixR,GACA,IAAAutK,EAAA,GACAC;AACA,mBAAAr2b,GAEAo2b,EAAAp2b,EACAq2b,IACAA,KACAjtD,EAAAl3Z,KAAAnB,OAAA,KACAsld,KACAz+b,EAAA3d,MAAA4uS,EAAAutK,KAGA,CACA,EAmwEAz1a,EAAA0wY,UAh/EA,SAAA3rB,GACA,OAAAA,GAAA,IAAA5oP,EACA,EA++EAn8H,EAAAq+X,YAAmBA,EACnBr+X,EAAAkrY,OAvyCA,SAAAvib,EAAAm0B,GACAn0B,KAAA,GACAm0B,KAAAq0B,GAAA85X;AACA,IAAAjma,EAAA4pZ,EAAAjma,EAAAqc,KAAA8X,EAAA9X;AACA,iBAAAA,IACAA,EAAAxP,SAAAwP,EAAA;AAEA,IAAA1Q,EAAAs6Z,EAAAjma,EAAA2L,MAAAwoB,EAAAxoB;AACAA,KAAA,GAAAA,GAAAkvB,MAAAkpb,MACAxwc,QAAAC,KAAA,kCAAA7H,EAAA,KACAA,OAAA8jB;AAEA,MAAA6yZ,EAAA,CACA4/B,OAAAj8C,EAAAjma,EAAAkid,OAAA/tb,EAAA+tb,QACA1/B,WAAAwhC,GAAA/9C,EAAAjma,EAAAwib,WAAAruZ,EAAAquZ,YAAAnma,GACAA,OACA1Q,QACArD,OAAA29Z,EAAAjma,EAAAsI,OAAA6rB,EAAA7rB,QACAkuG,OAAA;AAGA,OADA8rU,EAAA9rU,OAAAksW,GAAApgC,GACAA,CACA,EAkxCAjrY,EAAAqra,aAAoBA,GACpBrra,EAAA2sa,aAAoBA,GACpB3sa,EAAAkmY,UAtzCA,SAAA58a,GACA,MAAAkvC,EAAAoyZ,GAAAthc;AAGA,OAFAkvC,EAAA9jC,MAAA8jC,EAAAjkC,KAAAikC,EAAA7jC,MACA6jC,EAAAvwB,OAAAuwB,EAAAhkC,IAAAgkC,EAAA/jC,OACA+jC,CACA,EAkzCAwH,EAAAm9X,aApxFA,CAAA7za,EAAAu9c,IAAA,iBAAAv9c,KAAAkrZ,SAAA,KAAA1lY,WAAAxlB,GAAA,KAAAA,EAAAu9c,EAqxFA7ma,EAAA08X,UA1/EA,SAAApY,GACA,OAAAA,GAAAnoP,EAAA,IACA,EAy/EAn8H,EAAA4qZ,OAAcA,GACd5qZ,EAAA6qZ,cAz0CA,SAAAvhc,GACA,OAAAg7b,GAAAh7b,EAAA,CACA,UACA,WACA,aACA,eAEA,EAm0CA02C,EAAAy4R,IAAWA,EACXz4R,EAAA22Y,WAtgDA,SAAAv1R,GACAA,EAAA8M,SACA,EAqgDAluH,EAAA+vX,oBAz0EA,SAAAtvR,EAAA8hB,GACA,MAAAozT,EAAAl1U,EAAAk0U;AACA,IAAAgB,EACA;AAEA,MAAAhxT,EAAAgxT,EAAAhxT,UACAj1J,EAAAi1J,EAAAn0J,QAAA+xJ,IACA,IAAA7yJ,GACAi1J,EAAAl0J,OAAAf,EAAA,GAEAi1J,EAAAz9J,OAAA,IAGAghd,EAAA/mc,QAAAye,WACA6gH,EAAA7gH,YAEA6gH,EAAAk0U,SACA,EAyzEA30a,EAAA4uX,eAAsBA;AC71FtB,SAAAgnD,EAAAxtY,GACAzhF,KAAAyhF,SACA,CAEAwtY,EAAAhqd,UAAA,CACAq2E,YAAA2zY,EAEA54b,KAAA,SAAA4C,GACA,QAAA34B,EAAA,EAAoBA,EAAAN,KAAAyhF,QAAAlhF,OAAyBD,GAAA,EAC7C,GAAAN,KAAAyhF,QAAAnhF,KAAA24B,EAAA,OAAA34B;AACA,QACA,EAKAgsB,IAAA,SAAA2M,GACA,IAAAihM,EAAAl6N,KAAAq2B,KAAA4C;AACA,UAAAihM,OAAAzoM,EAAAzxB,KAAAyhF,QAAAy4I,EAAA,EACA,EAMAvpN,OAAA,SAAAsoB,EAAAt2B,EAAAusd,GACA,IAAA30T,EAAA20T,MAAAj2b,EAAAj5B,KAAA07E,OAAAwzY,GAAAlvd,KACAk6N,EAAA3/D,EAAAlkI,KAAA4C,GAAAwoD,EAAA84E,EAAA94E,QAAArhF;AAOA,OANA,GAAA85N,EACAz4I,EAAA75E,KAAAsnd,GAAAj2b,EAAAt2B,IAEA8+E,EAAAy4I,EAAA,GAAAv3N,EACAusd,IAAAztY,EAAAy4I,GAAAg1P,IAEA,IAAAD,EAAAxtY,EACA,EAIA/F,OAAA,SAAAziD,GACA,IAAAihM,EAAAl6N,KAAAq2B,KAAA4C;AACA,OAAAihM,EAAA,OAAAl6N;AACA,IAAAyhF,EAAAzhF,KAAAyhF,QAAArhF;AAEA,OADAqhF,EAAA33E,OAAAowN,EAAA,GACA,IAAA+0P,EAAAxtY,EACA,EAIA0tY,WAAA,SAAAl2b,EAAAt2B,GACA,WAAAssd,EAAA,CAAAh2b,EAAAt2B,GAAA8P,OAAAzS,KAAA07E,OAAAziD,GAAAwoD,SACA,EAIA2tY,SAAA,SAAAn2b,EAAAt2B,GACA,IAAA8+E,EAAAzhF,KAAA07E,OAAAziD,GAAAwoD,QAAArhF;AAEA,OADAqhF,EAAA75E,KAAAqxB,EAAAt2B,GACA,IAAAssd,EAAAxtY,EACA,EAKA4tY,UAAA,SAAAC,EAAAr2b,EAAAt2B,GACA,IAAA4sd,EAAAvvd,KAAA07E,OAAAziD,GAAAwoD,EAAA8tY,EAAA9tY,QAAArhF,QACA85N,EAAAq1P,EAAAl5b,KAAAi5b;AAEA,OADA7tY,EAAA33E,QAAA,GAAAowN,EAAAz4I,EAAAlhF,OAAA25N,EAAA,EAAAjhM,EAAAt2B,GACA,IAAAssd,EAAAxtY,EACA,EAKAjnE,QAAA,SAAAtO,GACA,QAAA5L,EAAA,EAAoBA,EAAAN,KAAAyhF,QAAAlhF,OAAyBD,GAAA,EAC7C4L,EAAAlM,KAAAyhF,QAAAnhF,GAAAN,KAAAyhF,QAAAnhF,EAAA,GACA,EAKAurN,QAAA,SAAAjoM,GAEA,OADAA,EAAAqrc,EAAA1hc,KAAA3J,IACAvF,KACA,IAAA4wc,EAAArrc,EAAA69D,QAAAhvE,OAAAzS,KAAA6tV,SAAAjqU,GAAA69D,UADAzhF,IAEA,EAKAsxM,OAAA,SAAA1tL,GAEA,OADAA,EAAAqrc,EAAA1hc,KAAA3J,IACAvF,KACA,IAAA4wc,EAAAjvd,KAAA6tV,SAAAjqU,GAAA69D,QAAAhvE,OAAAmR,EAAA69D,UADAzhF,IAEA,EAKA6tV,SAAA,SAAAjqU,GACA,IAAAqD,EAAAjnB;AACA4jB,EAAAqrc,EAAA1hc,KAAA3J;AACA,QAAAtjB,EAAA,EAAoBA,EAAAsjB,EAAA69D,QAAAlhF,OAAwBD,GAAA,EAC5C2mB,IAAAy0D,OAAA93D,EAAA69D,QAAAnhF;AACA,OAAA2mB,CACA,EAIAuoc,SAAA,WACA,IAAAvoc,EAAA;AAEA,OADAjnB,KAAAwa,QAAA,SAAAye,EAAAt2B,GAAwCskB,EAAAgS,GAAAt2B,CAAA,GACxCskB,CACA,EAIA,QAAA5I,GACA,OAAAre,KAAAyhF,QAAAlhF,QAAA,CACA,GAOA0ud,EAAA1hc,KAAA,SAAA5qB,GACA,GAAAA,aAAAssd,EAAA,OAAAtsd;AACA,IAAA8+E,EAAA;AACA,GAAA9+E,EAAA,QAAAuoL,KAAAvoL,EAAA8+E,EAAA75E,KAAAsjL,EAAAvoL,EAAAuoL;AACA,WAAA+jS,EAAAxtY,EACA,EAEAvU,EAAA7zB,QAAA41a;ACxIA,IAAAjrC,EAAA,sBACAyrC,EAAA,UACAC,GAAA,IAAA1rC;AAGA,SAAAhuC,EAAA25E,EAAAtvd,EAAAuvd,EAAA1jd,EAAAnL,GACA,IAAA6wF,EAAAi+X,EAAA3lY,EAAA4lY,EACAC,EAAA1vd,EAAA,GACA2vd,EAAA9jd,EAAA,GACA+jd,EAAA,EACAC,EAAA;AACAF,EAAAD,GAAAC,GAAAD,GACAn+X,EAAAm+X,EACAA,EAAA1vd,IAAA4vd,KAEAr+X,EAAAo+X,EACAA,EAAA9jd,IAAAgkd;AAEA,IAAAC,EAAA;AACA,GAAAF,EAAAN,GAAAO,EAAAN,EAcA,IAbAI,EAAAD,GAAAC,GAAAD,GAEA7lY,EAAA0H,IADAi+X,EAAAE,EAAAn+X,GACAm+X,GACAA,EAAA1vd,IAAA4vd,KAGA/lY,EAAA0H,IADAi+X,EAAAG,EAAAp+X,GACAo+X,GACAA,EAAA9jd,IAAAgkd,IAEAt+X,EAAAi+X,EACA,IAAA3lY,IACAnpF,EAAAovd,KAAAjmY,GAEA+lY,EAAAN,GAAAO,EAAAN,GACAI,EAAAD,GAAAC,GAAAD,GAGA7lY,EAAA0H,IAFAi+X,EAAAj+X,EAAAm+X,IACAD,EAAAD,EAAAj+X,KACAm+X,EAAAD,GACAC,EAAA1vd,IAAA4vd,KAIA/lY,EAAA0H,IAFAi+X,EAAAj+X,EAAAo+X,IACAF,EAAAD,EAAAj+X,KACAo+X,EAAAF,GACAE,EAAA9jd,IAAAgkd,IAEAt+X,EAAAi+X,EACA,IAAA3lY,IACAnpF,EAAAovd,KAAAjmY;AAIA,KAAA+lY,EAAAN,GAGAzlY,EAAA0H,IAFAi+X,EAAAj+X,EAAAm+X,IACAD,EAAAD,EAAAj+X,KACAm+X,EAAAD,GACAC,EAAA1vd,IAAA4vd,GACAr+X,EAAAi+X,EACA,IAAA3lY,IACAnpF,EAAAovd,KAAAjmY;AAGA,KAAAgmY,EAAAN,GAGA1lY,EAAA0H,IAFAi+X,EAAAj+X,EAAAo+X,IACAF,EAAAD,EAAAj+X,KACAo+X,EAAAF,GACAE,EAAA9jd,IAAAgkd,GACAt+X,EAAAi+X,EACA,IAAA3lY,IACAnpF,EAAAovd,KAAAjmY;AAMA,OAHA,IAAA0H,GAAA,IAAAu+X,IACApvd,EAAAovd,KAAAv+X,GAEAu+X,CACA,CAQA,SAAAC,EAAA5vd,GACA,WAAA6vd,aAAA7vd,EACA,CAEA,IAIAs4B,EAAAs3b,EAAA,GACAE,EAAAF,EAAA,GACAG,EAAAH,EAAA,IACAr1Y,EAAAq1Y,EAAA,IACArud,EAAAqud,EAAA;AAgKA,SAAAI,EAAA9xL,EAAA+xL,EAAAC,EAAApxL,EAAArxH,EAAA5rB,GACA,IAAAsuU,GAAAF,EAAApuU,IAAAquU,EAAAziT,GACA2iT,GAAAlyL,EAAAzwH,IAAAqxH,EAAAj9I,GACAwuU,EAAAF,EAAAC,EAEAE,EAAA/td,KAAAqN,IAAAugd,EAAAC;AACA,OAAA7td,KAAAqN,IAAAygd,IA9KA,sBA8KAC,EAAkDD,GApKlD,SAAAnyL,EAAA+xL,EAAAC,EAAApxL,EAAArxH,EAAA5rB,EAAAyuU,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EACApB,EAAA3rd,EAAAgtd,EAAAC,EAAAC,EAAAC,EAAApyb,EAAAqyb,EAAAC,EAAAC,EAAAC,EAAAC,EAAAx/L,EAAAy/L,EAEAC,EAAAnzL,EAAAzwH,EACA6jT,EAAApB,EAAAziT,EACA8jT,EAAAtB,EAAApuU,EACA2vU,EAAA1yL,EAAAj9I;AAmBAytU,GAVA4B,GAJAN,EAAAS,GADAV,GADAhtd,EAAAsrd,EAAAoC,IACA1td,EAAA0td,MAIAP,EAAAU,GADAX,GADAltd,EAAAsrd,EAAAuC,IACA7td,EAAA6td,OALAP,EAAAI,EAAAG,GAOAb,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KASApyb,EAAAwyb,GADAv/L,GAJAi/L,EAAAW,GADAZ,GADAhtd,EAAAsrd,EAAAsC,IACA5td,EAAA4td,MAIAT,EAAAQ,GADAT,GADAltd,EAAAsrd,EAAAqC,IACA3td,EAAA2td,OALAH,EAAAI,EAAAD,GAOAX,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KAGAx4b,EAAA,GAAA44b,GAAAxyb,EAAA4wb,MAAA39L,GAKA29L,GAFA0B,EAAAC,IAFAF,EAAAE,EAAAvyb,IACA4wb,EAAAyB,EAAAE,KACAvyb,EAAA4wb,KACA5wb,EAAAsyb,EAAAG,GAEA74b,EAAA,GAAA04b,GAAAtyb,EAAA4wb,MAAA6B,GAEA7B,GADA8B,EAAAL,EAAAryb,GACAqyb,EACAz4b,EAAA,GAAAy4b,GAAAK,EAAA9B,IAAA5wb,EAAA4wb,GACAh3b,EAAA,GAAA84b;AAEA,IAAAf,EA3DA,SAAAlB,EAAAtvd,GAEA,IADA,IAAAuxF,EAAAvxF,EAAA,GACAC,EAAA,EAAoBA,EAyDpB,EAzD8BA,IAAOsxF,GAAAvxF,EAAAC;AACrC,OAAAsxF,CACA,CAJA,CA2DA,EAAA94D,GACAm5b,EAjDA,sBAiDAnB;AACA,GAAAD,GAAAoB,IAAApB,GAAAoB,EACA,OAAApB;AAYA,GARAE,EAAAryL,GAAAmzL,GADA/B,EAAApxL,EAAAmzL,KACA/B,EAAA7hT,GAEAgjT,EAAAP,GAAAoB,GADAhC,EAAAY,EAAAoB,KACAhC,EAAA7hT,GAEA+iT,EAAAP,GAAAsB,GADAjC,EAAAW,EAAAsB,KACAjC,EAAAztU,GAEA6uU,EAAA5xL,GAAA0yL,GADAlC,EAAAxwL,EAAA0yL,KACAlC,EAAAztU,GAEA,IAAA0uU,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,EACA,OAAAL;AAKA,GAFAoB,EAlEA,sBAkEAnB,EAAApB,EAAA3sd,KAAAqN,IAAAygd,IACAA,GAAAgB,EAAAX,EAAAc,EAAAjB,GAAAgB,EAAAd,EAAAa,EAAAd,KACAiB,IAAApB,GAAAoB,EAA+C,OAAApB;AAmB/Cf,GAVA4B,GAJAN,EAAAL,GADAI,GADAhtd,EAAAsrd,EAAAsB,IACA5sd,EAAA4sd,MAIAO,EAAAU,GADAX,GADAltd,EAAAsrd,EAAAuC,IACA7td,EAAA6td,OALAP,EAAAV,EAAAiB,GAOAb,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KASApyb,EAAAwyb,GADAv/L,GAJAi/L,EAAAJ,GADAG,GADAhtd,EAAAsrd,EAAAuB,IACA7sd,EAAA6sd,MAIAM,EAAAQ,GADAT,GADAltd,EAAAsrd,EAAAqC,IACA3td,EAAA2td,OALAH,EAAAX,EAAAc,GAOAX,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KAGAvvd,EAAA,GAAA2vd,GAAAxyb,EAAA4wb,MAAA39L,GAKA29L,GAFA0B,EAAAC,IAFAF,EAAAE,EAAAvyb,IACA4wb,EAAAyB,EAAAE,KACAvyb,EAAA4wb,KACA5wb,EAAAsyb,EAAAG,GAEA5vd,EAAA,GAAAyvd,GAAAtyb,EAAA4wb,MAAA6B,GAEA7B,GADA8B,EAAAL,EAAAryb,GACAqyb,EACAxvd,EAAA,GAAAwvd,GAAAK,EAAA9B,IAAA5wb,EAAA4wb,GACA/td,EAAA,GAAA6vd;AACA,IAAAM,EAAAl8E,EAAA,EAAAl9W,EAAA,EAAA/2B,EAAAuud;AAmBAR,GAVA4B,GAJAN,EAAAS,GADAV,GADAhtd,EAAAsrd,EAAAoC,IACA1td,EAAA0td,MAIAP,EAAAJ,GADAG,GADAltd,EAAAsrd,EAAAyB,IACA/sd,EAAA+sd,OALAO,EAAAI,EAAAX,GAOAC,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KASApyb,EAAAwyb,GADAv/L,GAJAi/L,EAAAW,GADAZ,GADAhtd,EAAAsrd,EAAAsC,IACA5td,EAAA4td,MAIAT,EAAAL,GADAI,GADAltd,EAAAsrd,EAAAwB,IACA9sd,EAAA8sd,OALAU,EAAAI,EAAAd,GAOAE,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KAGAvvd,EAAA,GAAA2vd,GAAAxyb,EAAA4wb,MAAA39L,GAKA29L,GAFA0B,EAAAC,IAFAF,EAAAE,EAAAvyb,IACA4wb,EAAAyB,EAAAE,KACAvyb,EAAA4wb,KACA5wb,EAAAsyb,EAAAG,GAEA5vd,EAAA,GAAAyvd,GAAAtyb,EAAA4wb,MAAA6B,GAEA7B,GADA8B,EAAAL,EAAAryb,GACAqyb,EACAxvd,EAAA,GAAAwvd,GAAAK,EAAA9B,IAAA5wb,EAAA4wb,GACA/td,EAAA,GAAA6vd;AACA,IAAAO,EAAAn8E,EAAAk8E,EAAA5B,EAAA,EAAAvud,EAAAwud;AAmBAT,GAVA4B,GAJAN,EAAAL,GADAI,GADAhtd,EAAAsrd,EAAAsB,IACA5sd,EAAA4sd,MAIAO,EAAAJ,GADAG,GADAltd,EAAAsrd,EAAAyB,IACA/sd,EAAA+sd,OALAO,EAAAV,EAAAG,GAOAC,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KASApyb,EAAAwyb,GADAv/L,GAJAi/L,EAAAJ,GADAG,GADAhtd,EAAAsrd,EAAAuB,IACA7sd,EAAA6sd,MAIAM,EAAAL,GADAI,GADAltd,EAAAsrd,EAAAwB,IACA9sd,EAAA8sd,OALAU,EAAAX,EAAAC,GAOAE,EAAAE,EAAAD,EAAAC,EAAAF,EAAAG,KAGAvvd,EAAA,GAAA2vd,GAAAxyb,EAAA4wb,MAAA39L,GAKA29L,GAFA0B,EAAAC,IAFAF,EAAAE,EAAAvyb,IACA4wb,EAAAyB,EAAAE,KACAvyb,EAAA4wb,KACA5wb,EAAAsyb,EAAAG,GAEA5vd,EAAA,GAAAyvd,GAAAtyb,EAAA4wb,MAAA6B,GAEA7B,GADA8B,EAAAL,EAAAryb,GACAqyb,EACAxvd,EAAA,GAAAwvd,GAAAK,EAAA9B,IAAA5wb,EAAA4wb,GACA/td,EAAA,GAAA6vd;AACA,IAAAQ,EAAAp8E,EAAAm8E,EAAA5B,EAAA,EAAAxud,EAAAg5E;AAEA,OAAAA,EAAAq3Y,EAAA,EACA,CA5JA,CAsKA1zL,EAAA+xL,EAAAC,EAAApxL,EAAArxH,EAAA5rB,EAAAyuU,EACA,CAuDA5jZ,EAAA7zB,QArDA,SAAAx0C,EAAAk4Z,GACA,IAAAz8Z,EACA+xd,EAEAnmd,EACAomd,EACAzmK,EACA0mK,EACA3mK,EACA4mK,EACAC,EAPA/2c,EAAA,EASA1U,EAAAnC,EAAA,GACA2M,EAAA3M,EAAA,GAEA6td,EAAA31D,EAAAx8Z;AACA,IAAAD,EAAA,EAAgBA,EAAAoyd,EAAiBpyd,IAAA,CACjC+xd,EAAA;AACA,IAAAM,EAAA51D,EAAAz8Z,GACAsyd,EAAAD,EAAApyd,OAAA;AAGA,IADAiyd,EAAAG,EAAA,IACA,KAAAA,EAAAC,GAAA,IACAJ,EAAA,KAAAG,EAAAC,GAAA,GACA,UAAAlyd,MAAA;AAMA,IAHA4xd,EAAAE,EAAA,GAAAxrd,EACA6kT,EAAA2mK,EAAA,GAAAhhd,EAEiB6gd,EAAAO,EAAiBP,IAAA,CAMlC,GAHAE,GAFAE,EAAAE,EAAAN,EAAA,IAEA,GAAArrd,EACA4kT,EAAA6mK,EAAA,GAAAjhd,EAEA,IAAAq6S,GAAA,IAAAD,GACA,GAAA2mK,GAAA,GAAAD,GAAA,GAAAA,GAAA,GAAAC,GAAA,EAAoE,cACtD,GAAA3mK,GAAA,GAAAC,GAAA,GAAAD,GAAA,GAAAC,GAAA,GAEd,QADA3/S,EAAAskd,EAAA8B,EAAAC,EAAA1mK,EAAAD,EAAA,MAC+B,UAC/B1/S,EAAA,GAAA0/S,EAAA,GAAAC,GAAA,GAAA3/S,EAAA,GAAA0/S,GAAA,GAAAC,EAAA,IAAoFnwS,GACpF,CACA82c,EAAAC,EACA5mK,EAAAD,EACA0mK,EAAAC,CACA,CACA,CAEA,OAAA72c,EAAA,IAEA,SAAArb,EAAAvB,EAAA0B,GAAA;AC7TA,IAAAqyd,EAA2BpnY,EAAQ,MACnCqnY,EAAuBrnY,EAAQ,OAC/BsnY,EAAuBtnY,EAAQ,OAC/BgvT,EAAA,SAAAx4X,EAAA6jQ,GACA,OAAA7jQ,EAAA8xF,UAAAzW,QACAwoL,KAAA7jQ,EAAAg9B,GAAAw7V,kBAAAF,qBAEA;AACA,SAAAy4E,EAAA/wc,EAAAo1D,GACA,IAAA00T,EAAA9pX,EAAA8xF,UAAAg4R;AACA,OAAAA,IAAA10T,KAAA47Y,eAAA,WAAAhxc,GAAA8pX,EAAAvB,aAAA,QACAuB,CACA,CACA,IAAA+P,EAAA,SAAA75X,EAAA6jQ,EAAAzuM,GACA,IAAA00T,EAAAinF,EAAA/wc,EAAAo1D;AACA,IAAA00T,EAAA;AACA,IAAAmnF,EAAAC,EAAApnF;AACA,IAAAmnF,EAAA,CACA,IAAAh7Y,EAAA6zT,EAAAuN,aACA9vY,EAAA0uE,GAAA26Y,EAAAr5E,WAAAthU;AACA,aAAA1uE,IACAs8Q,KAAA7jQ,EAAAg9B,GAAA26V,KAAA1hU,EAAA1uE,GAAA+wY,qBAEA,CACA,IAAAv9N,EAAAk2S,EAAAjoF;AACA,GAAAmoF,EAAAnxc,EAAAixc,EAAAptM,GAAA;AACA,MAAAimH,EAAAjkX,OAAA25D,QAAApjE,OAAAg1c,EAAAr2S,EAAA,QAAA+1S,EAAAj0E,cAAAyI,aAAAvqO,IACA,QAAA45N,EAAA7K,EAAA6K,OAAqCA,IAAA,CACrC,IAAA08E,EAAAT,EAAAU,YAAAtxc,EAAA0I,IAAAohX,EAAA/uN,OAAA45N,GAAA7K,EAAA9uN,MAAA25N,GAAAk8E,EAAA5yE,MAAA5iT;AACA,GAAAg2X,KAAAlzd,MAAAie,KAAAi1c,EAAA7ma,GAAA6ma,EAAA/lc,KAAA,CACA,GAAAu4P,EAAA,CACA,IAAA7mO,EAAAh9B,EAAAg9B,GAAA4tF,KAAAymV;AACAr0a,EAAAq2V,aAAA+9E,EAAAr2S,EAAA,OAAA+1S,EAAA7/E,UAAAsgF,SAAAv0a,EAAAt0B,IAAAqqD,QAAA/1B,EAAAogI,QAAAz7J,IAAAsvc,EAAA54a,KAAA,QAAAy4a,EAAAj0E,cAAAv6Y,OAAA06C,EAAAt0B,IAAAuoc,EAAA54a,IAAA0iI,EAAA01N,WACA5sH,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,CACA,MAAA3D,GAAA7K,EAAA7nX,KAAA0yX,EAAA,GAAAjE,WAAA,OACA,CAEA,SAAA31N,EAAA0tN,QAAAwoF,EAAAt8E,OAAA7K,EAAA6K,MAAA,IACA9wH,KAAA7jQ,EAAAg9B,GAAAqmC,OAAA4tY,EAAA54a,IAAA0iI,EAAA01N,SAAAwgF,EAAA54a,KAAAigW,kBACA,GAGA;AAaA,SAAAk5E,EAAAxxc,EAAAixc,EAAAptM,GAIA,IAHA,IACA4tM,EADAR,EAAAjoF,WAEAp1H,EAAAq9M,EAAA54a,IAAA,GACSo5a,EAAAjmF,YAAyB53H,IAAA,CAClC,GAAA69M,EAAA5vd,KAAAimW,KAAAg/B,UAAA;AACA,IAAAjiO,EAAA4sT,EAAA9yM;AACA,IAAA95G,EAAA;AACA4sT,EAAA5sT,CACA,CAIA,IAHA,IACA6sT,EADAT,EAAAhoF,UAEA0oF,EAAAV,EAAA54a,IAAA,GACSq5a,EAAAlmF,YAAwBmmF,IAAA,CACjC,GAAAD,EAAA7vd,KAAAimW,KAAAg/B,UAAA;AACA,IAAA8qF,EAAAF,EAAAltd;AACA,IAAAotd,EAAA;AACAF,EAAAE,CACA,CACA,IAAAhnV,EAAAgmV,EAAAU,YAAAtxc,EAAA0I,IAAAkrP,EAAA+9M,EAAAd,EAAA5yE,MAAA5iT;AACA,IAAAuvC,KAAAt/G,MAAAsoP,GAAAhpI,aAAAgmV,EAAA99E,aAAAloQ,EAAAzsI,MAAAie,MAAAu1c,EAAA/9M,EAAA;AACA,GAAAiQ,EAAA,CACA,IAAA7mO,EAAAh9B,EAAAg9B,GAAA4tF;AACA5tF,EAAAq2V,aAAAy9E,EAAAjgF,cAAAvuY,OAAA06C,EAAAt0B,IAAAkrP,IACAiQ,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,CACA,SAAA84E,EAAAnvc,EAAAtF,GAEA,IADA,IAAAw8R,EAAAxoS,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAkhd,EAAA5vc,EAAwB4vc,EAAMA,EAAA,SAAAl1c,EAAAk1c,EAAArtd,WAAAqtd,EAAAlzM,UAAA,CAC9B,GAAAkzM,EAAArmF,YAAA;AACA,GAAAryF,GAAA,GAAA04K,EAAAnhF,WAAA,QACA,CACA,QACA,CACA,IAAA0K,EAAA,SAAAp7X,EAAA6jQ,EAAAzuM,GACA,IAAA08Y,EAAA9xc,EAAA8xF,UACAuiS,EAAAy9E,EAAAz9E,MAEA48E,EAAA58E;AACA,IAFAy9E,EAAAz2X,MAEA;AACA,GAAAg5S,EAAAxuX,OAAA2lX,YAAA,CACA,GAAAp2T,KAAA47Y,eAAA,WAAAhxc,GAAAq0X,EAAA9L,aAAA;AACA0oF,EAAAC,EAAA78E,EACA,CACA,IAAApyX,EAAAgvc,KAAAjoF;AACA,SAAA/mX,IAAA6uc,EAAAj0E,cAAAyI,aAAArjY,KACA4hQ,KAAA7jQ,EAAAg9B,GAAAq2V,aAAAy9E,EAAAj0E,cAAAv6Y,OAAA0d,EAAA0I,IAAAuoc,EAAA54a,IAAAp2B,EAAAwuX,WAAA6H,kBACA,GACA;AACA,SAAA44E,EAAA9gF,GACA,IAAAA,EAAAvqX,OAAAhkB,KAAAimW,KAAAg/B,UAAA,QAAAzoY,EAAA+xY,EAAAuE,MAAA,EAAqEt2Y,GAAA,EAAQA,IAAA,CAC7E,GAAA+xY,EAAAtpY,MAAAzI,GAAA,SAAA+xY,EAAA1nX,IAAAqqD,QAAAq9T,EAAAr1N,OAAA18K,EAAA;AACA,GAAA+xY,EAAAnuX,KAAA5jB,GAAAwD,KAAAimW,KAAAg/B,UAAA,KACA,CACA,WACA,CACA,SAAAirF,EAAA/xc,EAAAo1D,GACA,IAAA00T,EAAA9pX,EAAA8xF,UAAAg4R;AACA,OAAAA,IAAA10T,KAAA47Y,eAAA,UAAAhxc,GAAA8pX,EAAAvB,aAAAuB,EAAAjkX,OAAA25D,QAAApjE,MAAA,KACA0tX,CACA,CACA,IAAAiQ,EAAA,SAAA/5X,EAAA6jQ,EAAAzuM,GACA,IAAA00T,EAAAioF,EAAA/xc,EAAAo1D;AACA,IAAA00T,EAAA;AACA,IAAAmnF,EAAAe,EAAAloF;AACA,IAAAmnF,EAAA;AACA,IAAAj2S,EAAAi2S,EAAAhoF;AACA,GAAAkoF,EAAAnxc,EAAAixc,EAAAptM,EAAA;AACA,MAAAimH,EAAAjkX,OAAA25D,QAAApjE,OAAAg1c,EAAAp2S,EAAA,UAAA81S,EAAAj0E,cAAAyI,aAAAtqO,IAAA,CACA,IAAAq2S,EAAAT,EAAAU,YAAAtxc,EAAA0I,IAAAohX,EAAA/uN,SAAA+uN,EAAA9uN,QAAA61S,EAAA5yE,MAAA5iT;AACA,GAAAg2X,KAAAlzd,MAAAie,KAAAi1c,EAAA7ma,GAAA6ma,EAAA/lc,KAAA,CACA,GAAAu4P,EAAA,CACA,IAAA7mO,EAAAh9B,EAAAg9B,GAAA4tF,KAAAymV;AACAr0a,EAAAq2V,aAAA+9E,EAAAp2S,EAAA,SAAA81S,EAAA7/E,UAAAsgF,SAAAv0a,EAAAt0B,IAAAqqD,QAAA/1B,EAAAogI,QAAAz7J,IAAAsvc,EAAA54a,MAAA,GAAAy4a,EAAAj0E,cAAAv6Y,OAAA06C,EAAAt0B,IAAAs0B,EAAAogI,QAAAz7J,IAAAsvc,EAAA54a,OACAwrO,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,CACA,CACA,SAAAt9N,EAAAytN,QAAAwoF,EAAAt8E,OAAA7K,EAAA6K,MAAA,IACA9wH,KAAA7jQ,EAAAg9B,GAAAqmC,OAAA4tY,EAAA54a,IAAA44a,EAAA54a,IAAA2iI,EAAAy1N,UAAA6H,kBACA,GAGA,EACA+C,EAAA,SAAAr7X,EAAA6jQ,EAAAzuM,GACA,IAAA68Y,EAAAjyc,EAAA8xF,UACAuiS,EAAA49E,EAAA59E,MAEA48E,EAAA58E;AACA,IAFA49E,EAAA52X,MAEA;AACA,GAAAg5S,EAAAxuX,OAAA2lX,YAAA,CACA,GAAAp2T,KAAA47Y,eAAA,UAAAhxc,GAAAq0X,EAAA9L,aAAA8L,EAAAxuX,OAAA25D,QAAApjE,KAAA;AACA60c,EAAAe,EAAA39E,EACA,CACA,IAAApyX,EAAAgvc,KAAAhoF;AACA,SAAAhnX,IAAA6uc,EAAAj0E,cAAAyI,aAAArjY,KACA4hQ,KAAA7jQ,EAAAg9B,GAAAq2V,aAAAy9E,EAAAj0E,cAAAv6Y,OAAA0d,EAAA0I,IAAAuoc,EAAA54a,MAAAigW,kBACA,GACA;AACA,SAAA05E,EAAA5hF,GACA,IAAAA,EAAAvqX,OAAAhkB,KAAAimW,KAAAg/B,UAAA,QAAAzoY,EAAA+xY,EAAAuE,MAAA,EAAqEt2Y,GAAA,EAAQA,IAAA,CAC7E,IAAAwnB,EAAAuqX,EAAAnuX,KAAA5jB;AACA,GAAA+xY,EAAAtpY,MAAAzI,GAAA,EAAAwnB,EAAA6qX,WAAA,OAAAN,EAAA1nX,IAAAqqD,QAAAq9T,EAAAp1N,MAAA38K,EAAA;AACA,GAAAwnB,EAAAhkB,KAAAimW,KAAAg/B,UAAA,KACA,CACA,WACA,CACA,IAyCAiU,EAAA,SAAA/6X,EAAA6jQ,GACA,IAAAquM,EAAAlyc,EAAA8xF,UACAuiS,EAAA69E,EAAA79E,MACAgE,EAAA65E,EAAA75E;AACA,SAAAhE,EAAAxuX,OAAAhkB,KAAAimW,KAAAtzV,OAAA6/X,EAAAoI,WAAApE,KACAx0H,KAAA7jQ,EAAAg9B,GAAA0tV,WAAA,MAAA4N,kBACA,GACA;AACA,SAAA/D,EAAA35W,GACA,QAAAv8B,EAAA,EAAkBA,EAAAu8B,EAAA45W,UAAqBn2Y,IAAA,CACvC,IACAwD,EADA+4B,EAAA8wV,KAAArtX,GACAwD;AACA,GAAAA,EAAA2pY,cAAA3pY,EAAA4yY,mBAAA,OAAA5yY,CACA,CACA,WACA,CACA,IAAA62Y,EAAA,SAAA14X,EAAA6jQ,GACA,IAAAsuM,EAAAnyc,EAAA8xF,UACAuiS,EAAA89E,EAAA99E,MACAgE,EAAA85E,EAAA95E;AACA,IAAAhE,EAAAxuX,OAAAhkB,KAAAimW,KAAAtzV,OAAA6/X,EAAAoI,WAAApE,GAAA;AACA,IAAAiuD,EAAAjyD,EAAApyX,MAAA,GACA+4J,EAAAq5N,EAAAgJ,YAAA,GACAx7Y,EAAA0yY,EAAA+xD,EAAA7uD,eAAAz8N;AACA,IAAAn5K,IAAAykc,EAAA/oD,eAAAviO,IAAAn5K,GAAA;AACA,GAAAgiR,EAAA,CACA,IAAAxrO,EAAAg8V,EAAAr5N,QACAh+H,EAAAh9B,EAAAg9B,GAAAmsV,YAAA9wV,IAAAx2C,EAAAm8Y;AACAhhW,EAAAq2V,aAAAy9E,EAAA7/E,UAAAqC,KAAAt2V,EAAAt0B,IAAAqqD,QAAA16B,GAAA,IACAwrO,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,EACAV,EAAA,SAAA53X,EAAA6jQ,GACA,IAAAq6H,EAAAl+X,EAAA8xF,UACAq2R,EAAA+V,EAAA/V,MACA2H,EAAAoO,EAAApO;AACA,GAAAoO,aAAA4yE,EAAA31E,cAAAhT,EAAAtiX,OAAAm2X,eAAAlM,EAAAjqX,OAAAm2X,cAAA;AACA,IAAAn6Y,EAAA0yY,EAAAzE,EAAAjqX,OAAA4xX,eAAA3H,EAAAuN;AACA,IAAAx7Y,MAAA2pY,YAAA;AACA,GAAA3nH,EAAA,CACA,IAAAlnQ,IAAAwrX,EAAAI,cAAAuH,EAAAhpY,QAAAgpY,EAAAjqX,OAAA6qX,WAAAvI,EAAA2H,GAAAz3V,IACA2E,EAAAh9B,EAAAg9B,GAAAm7V,OAAAx7X,EAAA9a,EAAAm8Y;AACAhhW,EAAAq2V,aAAAy9E,EAAAjgF,cAAAvuY,OAAA06C,EAAAt0B,IAAA/L,EAAA,IACAknQ,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,EACAuC,EAAA,SAAA76X,EAAA6jQ,GACA,IAAAimH,EAAA9pX,EAAA8xF,UAAAg4R;AACA,IAAAA,KAAAjkX,OAAA25D,QAAApjE,KAAA;AACA,GAAA0tX,EAAA6K,MAAA,GAAA7K,EAAA9uN,SAAA8uN,EAAA5sX,KAAA,IACA,IAAA69J,EAAA+uN,EAAA/uN;AACA,GAAA61S,EAAAzzE,SAAAn9X,EAAA0I,IAAAqyJ,GAEA,OADA8oG,KAAA7jQ,EAAAg9B,GAAAhnC,MAAA+kK,GAAAu9N,oBAGA,CACA,IAAAriU,EAAA6zT,EAAAuN,aACA9vY,EAAA0uE,GAAA26Y,EAAAr5E,WAAAthU;AACA,aAAA1uE,IACAs8Q,KAAA7jQ,EAAAg9B,GAAA26V,KAAA1hU,EAAA1uE,GAAA+wY,qBAEA;AACA,SAAA85E,EAAAC,GACA,gBAAAryc,EAAA6jQ,GACA,GAAA7jQ,EAAA8xF,qBAAAg/W,EAAAj0E,eAAA78X,EAAA8xF,UAAA7vF,KAAAmlJ,QAAA,CACA,IAAAkrT,EAAAtyc,EAAA8xF,UAAAq2R;AACA,SAAAmqF,EAAA/pF,eAAAqoF,EAAAzzE,SAAAn9X,EAAA0I,IAAA4pc,EAAAj6a,OACAwrO,KAAA7jQ,EAAAg9B,GAAAhnC,MAAAs8c,EAAAj6a,KAAAigW,kBACA,GACA,CACA,IAAAt4X,EAAA8xF,UAAAq2R,MAAAwM,MAAA;AACA,IAAA33V,EAAAh9B,EAAAg9B;CACAh9B,EAAA8xF,UAAAzW,QAAAr7E,EAAA8xF,qBAAAg/W,EAAAjgF,eAAA7wX,EAAA8xF,qBAAAg/W,EAAA31E,eAAAn+V,EAAAw7V;AAQA,IAPA,IAGA+5E,EACAn1E,EAJAjV,EAAAnrV,EAAA80D,UAAAq2R,MACAqqF,EAAAx1a,EAAAhqC,MAAA1U,OACA0zM,EAAA,GAGAo/L,KACAF,KACAxzY,EAAAyqY,EAAAwM,OAA+Bj3Y,IAAA,CAE/B,GADAyqY,EAAAlmX,KAAAvkB,GACA0pK,QAAA,CACAgqO,EAAAjJ,EAAAjrX,IAAAxf,IAAAyqY,EAAA9vV,KAAA8vV,EAAAwM,MAAAj3Y,GACAwzY,EAAA/I,EAAAlrX,MAAAvf,IAAAyqY,EAAA9vV,KAAA8vV,EAAAwM,MAAAj3Y,GACA0/Y,EAAA7I,EAAApM,EAAAlmX,KAAAvkB,EAAA,GAAA+5Y,eAAAtP,EAAAkV,WAAA3/Y,EAAA;AACA,IAAA+0d,EAAAJ,KAAAlqF,EAAAtiX,OAAAurX,EAAAjJ;AACAn2L,EAAA5sC,QAAAqtT,IAAArhF,GAAAgM,EAAA,CACAv7Y,KAAAu7Y,GACU,OACVm1E,EAAA70d;AACA,KACA,CACA,MAAAA,EAAA;AACAs0M,EAAA5sC,QAAA,KAEA,CACA,IAAAstT,EAAAvqF,EAAA9vV,IACA00I,EAAA6jS,EAAAzzE,SAAAngW,EAAAt0B,IAAAgqc,EAAA1gR,EAAA1zM,OAAA0zM;AAOA,GANAjlB,IACAilB,EAAA,GAAAorM,EAAA,CACAv7Y,KAAAu7Y,GACQ,KACRrwN,EAAA6jS,EAAAzzE,SAAAngW,EAAAt0B,IAAAgqc,EAAA1gR,EAAA1zM,OAAA0zM,KAEAjlB,EAAA;AAEA,GADA/vI,EAAAhnC,MAAA08c,EAAA1gR,EAAA1zM,OAAA0zM,IACAo/L,GAAAF,GAAA/I,EAAAlmX,KAAAswc,GAAA1wd,MAAAu7Y,EAAA,CACA,IAAAhgO,EAAApgI,EAAAogI,QAAAj/K,MAAAq0d,GACA1ib,EAAAstI,EAAAz7J,IAAAwmX,EAAAptN,OAAAw3S,IACAj1E,EAAAtgW,EAAAt0B,IAAAqqD,QAAAjjC;AACAstW,GAAAjV,EAAAlmX,KAAAswc,EAAA,GAAAh1E,eAAAD,EAAAx2Y,QAAAw2Y,EAAAx2Y,QAAA,EAAAs2Y,IAAApgW,EAAA06V,cAAAt6N,EAAAz7J,IAAAwmX,EAAAptN,OAAAw3S,IAAAn1E,EACA,CAEA,OADAv5H,KAAA7mO,EAAAs7V,oBAEA,CACA,CACA,IAAA2E,EAAAm1E,IAmBA7xW,EAAA,SAAAvgG,EAAA6jQ,GAEA,OADAA,KAAA7jQ,EAAAg9B,GAAAq2V,aAAA,IAAAy9E,EAAA31E,aAAAn7X,EAAA0I,SAEA;AAcA,SAAAyoc,EAAAnxc,EAAAixc,EAAAptM,EAAApiR,GACA,IAEAkxd,EACA/3b,EAHAmgJ,EAAAk2S,EAAAjoF,WACAhuN,EAAAi2S,EAAAhoF,UAGA2pF,EAAA73S,EAAAl5K,KAAAimW,KAAAg/B,WAAA9rN,EAAAn5K,KAAAimW,KAAAg/B;AACA,IAAA8rF,GAnBA,SAAA5yc,EAAAowX,EAAAvsH,GACA,IAAA9oG,EAAAq1N,EAAApH,WACAhuN,EAAAo1N,EAAAnH,UACAniY,EAAAspY,EAAAtpY;AACA,UAAAi0K,GAAAC,GAAAD,EAAAl5K,KAAAgxd,kBAAA73S,EAAAn5K,UACAk5K,EAAAv7F,QAAApjE,MAAAg0X,EAAAvqX,OAAAitc,WAAAhsd,EAAA,EAAAA,IACA+8Q,KAAA7jQ,EAAAg9B,GAAAqmC,OAAA+sT,EAAA/3V,IAAA0iI,EAAA01N,SAAAL,EAAA/3V,KAAAigW,kBACA,IAEAlI,EAAAvqX,OAAAitc,WAAAhsd,IAAA,KAAAk0K,EAAAwwN,cAAAolF,EAAA/5E,QAAA72X,EAAA0I,IAAA0nX,EAAA/3V,OACAwrO,KAAA7jQ,EAAAg9B,GAAAnnC,KAAAu6X,EAAA/3V,KAAAigW,kBACA,IACA,CAZA,CAmBAt4X,EAAAixc,EAAAptM,GAAA;AACA,IAAAkvM,GAAAH,GAAA3B,EAAAprc,OAAAitc,WAAA7B,EAAAnqd,QAAAmqd,EAAAnqd,QAAA;AACA,GAAAisd,IAAAJ,GAAA/3b,EAAAmgJ,EAAA08N,eAAA18N,EAAA21N,aAAA+Y,aAAAzuO,EAAAn5K,QAAA+4B,EAAAsrX,UAAAysE,EAAA,IAAA33S,EAAAn5K,MAAAmxd,SAAA,CACA,GAAAnvM,EAAA,CAGA,IAFA,IAAA3mQ,EAAA+zc,EAAA54a,IAAA2iI,EAAAy1N,SACAvrH,EAAA2rM,EAAA90K,SAAA1gN,MACAh9F,EAAAs0d,EAAAr0d,OAAA,EAAoCD,GAAA,EAAQA,IAAA6mR,EAAA2rM,EAAA90K,SAAAzwR,KAAAqnc,EAAAt0d,GAAAiE,OAAA,KAAA4iR;AAC5CA,EAAA2rM,EAAA90K,SAAAzwR,KAAAyvJ,EAAAnlB,KAAAsvH;AACA,IAAAloO,EAAAh9B,EAAAg9B,GAAA4tF,KAAA,IAAAgmV,EAAA79E,kBAAAk+E,EAAA54a,IAAA,EAAAn7B,EAAA+zc,EAAA54a,IAAAn7B,EAAA,IAAA2zc,EAAA5yE,MAAA/4H,EAAA,KAAAytM,EAAAr0d,YACA20d,EAAAj2a,EAAAt0B,IAAAqqD,QAAA71D,EAAA,EAAAy1c,EAAAr0d;AACA20d,EAAAhqF,WAAAgqF,EAAAhqF,UAAApnY,MAAAk5K,EAAAl5K,MAAA+ud,EAAA/5E,QAAA75V,EAAAt0B,IAAAuqc,EAAA56a,MAAA2E,EAAAnnC,KAAAo9c,EAAA56a,KACAwrO,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,CACA,IAAA46E,EAAAl4S,EAAAn5K,KAAAimW,KAAAg/B,WAAArlY,EAAA,GAAAmxd,EAAA,KAAA9B,EAAA7/E,UAAAsgF,SAAAN,EAAA,GACAh7Y,EAAAi9Y,KAAA/qF,MAAAkP,WAAA67E,EAAApjF,KACAvoY,EAAA0uE,GAAA26Y,EAAAr5E,WAAAthU;AACA,SAAA1uE,MAAA0pd,EAAAt8E,MAEA,OADA9wH,KAAA7jQ,EAAAg9B,GAAA26V,KAAA1hU,EAAA1uE,GAAA+wY;AAGA,GAAAy6E,GAAA3B,EAAAp2S,EAAA,aAAAo2S,EAAAr2S,EAAA,QAGA,IAFA,IAAAvvC,EAAAuvC,EACAo4S,EAAA,GAEAA,EAAAxtd,KAAA6lI,IACAA,EAAAggQ,aACAhgQ,IAAAmzI;AAIA,IAFA,IAAA+yM,EAAA12S,EACAo4S,EAAA,GACW1B,EAAAlmF,YAAwBkmF,IAAAltd,WAAA4ud;AACnC,GAAA5nV,EAAAsnV,WAAAtnV,EAAAklQ,WAAAllQ,EAAAklQ,WAAAghF,EAAAlyY,SAAA,CACA,GAAAqkM,EAAA,CAEA,IADA,IAAAwvM,EAAAxC,EAAA90K,SAAA1gN,MACAp+D,EAAAk2b,EAAA70d,OAAA,EAAwC2+B,GAAA,EAASA,IAAAo2b,EAAAxC,EAAA90K,SAAAzwR,KAAA6nc,EAAAl2b,GAAA24H,KAAAy9T;AAEjDxvM,EADA7jQ,EAAAg9B,GAAA4tF,KAAA,IAAAgmV,EAAA79E,kBAAAk+E,EAAA54a,IAAA86a,EAAA70d,OAAA2yd,EAAA54a,IAAA2iI,EAAAy1N,SAAAwgF,EAAA54a,IAAA+6a,EAAAnC,EAAA54a,IAAA2iI,EAAAy1N,SAAA2iF,EAAA,IAAAvC,EAAA5yE,MAAAo1E,EAAAF,EAAA70d,OAAA,UACAg6Y,iBACA,CACA,QACA,CACA,CACA,QACA,CACA,SAAAg7E,EAAA32c,GACA,gBAAAqD,EAAA6jQ,GAIA,IAHA,IAAAq6H,EAAAl+X,EAAA8xF,UACAs+R,EAAAzzX,EAAA,EAAAuhY,EAAA/V,MAAA+V,EAAApO,IACA6E,EAAAvE,EAAAuE,MACAvE,EAAAnuX,KAAA0yX,GAAAwH,UAAA,CACA,IAAAxH,EAAA;AACAA,GACA,CACA,QAAAvE,EAAAnuX,KAAA0yX,GAAAnJ,cACA3nH,KAAA7jQ,EAAAg9B,GAAAq2V,aAAAy9E,EAAAjgF,cAAAvuY,OAAA0d,EAAA0I,IAAA/L,EAAA,EAAAyzX,EAAAnzX,MAAA03X,GAAAvE,EAAAlzX,IAAAy3X,SAEA,CACA,CACA,IAAA6G,EAAA83E,GAAA,GACA/3E,EAAA+3E,EAAA;AAiMA,SAAAC,IACA,QAAAvhV,EAAArhI,UAAArS,OAAAwkY,EAAA,IAAAlxX,MAAAogI,GAAAC,EAAA,EAA0EA,EAAAD,EAAaC,IACvF6wP,EAAA7wP,GAAAthI,UAAAshI;AAEA,gBAAAjyH,EAAA6jQ,EAAAzuM,GACA,QAAA/2E,EAAA,EAAoBA,EAAAykY,EAAAxkY,OAAqBD,IAAA,GAAAykY,EAAAzkY,GAAA2hB,EAAA6jQ,EAAAzuM,GAAA;AACzC,QACA,CACA,CACA,IAAAo+Y,EAAAD,EAAA/6E,EAAAqB,EAAAuB,GACAq4E,EAAAF,EAAA/6E,EAAAuB,EAAAsB,GACAq4E,EAAA,CACA3oY,MAAAwoY,EAAAx4E,EAAAnD,EAAAiD,EAAAoC,GACA,YAAAvE,EACAhtT,UAAA8nY,EACA,gBAAAA,EACA,kBAAAA,EACAznY,OAAA0nY,EACA,aAAAA,EACA,QAAAlzW,GAEAozW,EAAA,CACA,SAAAD,EAAAhoY,UACA,gBAAAgoY,EAAA,iBACA,SAAAA,EAAA3nY,OACA,qBAAA2nY,EAAA,cACA,aAAAA,EAAA,cACA,QAAAA,EAAA,cACA,SAAAl4E,EACA,SAAAD;AAEA,QAAAvkX,KAAA08b,EAAAC,EAAA38b,GAAA08b,EAAA18b;AACA,IACA2pX,GADA,oBAAAx/T,UAAA,qBAAA/9D,KAAA+9D,UAAAllE,UAAA,oBAAA23c,OAAA33c,UAAA,UAAA23c,GAAA33c,YACA03c,EAAAD;AACAt8a,EAAAy8a,SA1CA,SAAA3wF,EAAA4wF,GACA,IAAAj9E,EAAAjlY,MAAA1T,QAAA41d,GAAA,SAAA7xc,GACA,OAAA6xc,EAAAlsd,QAAAqa,EAAApgB,KAAAsE,OAAA,CACA,EAAI2td;AACJ,gBAAA9zc,EAAA6jQ,EAAAzuM,GACA,OAAA8tT,EAAAljX,EAAA6jQ,GA1CA,SAAAA,EAAAiwM,GACA,gBAAA92a,GACA,IAAAA,EAAA+2a,UAAA,OAAAlwM,EAAA7mO;AAEA,IADA,IAAA2mD,EAAA,GACAtlG,EAAA,EAAoBA,EAAA2+C,EAAAogI,QAAA41N,KAAA10Y,OAA4BD,IAAA,CAEhD,IADA,IAAAsjB,EAAAq7B,EAAAogI,QAAA41N,KAAA30Y,GACAqlF,EAAA,EAAsBA,EAAAigB,EAAArlG,OAAmBolF,IAAAigB,EAAAjgB,GAAA/hE,MAAAgiF,EAAAjgB;AACzC/hE,EAAApJ,QAAA,SAAAysI,EAAAhpI,EAAAsP,EAAAk/B,GACA,OAAAm5C,EAAAh+F,KAAA2lB,EAAAk/B,EACA,EACA,CAEA,IADA,IAAAwpa,EAAA,GACAC,EAAA,EAAsBA,EAAAtwX,EAAArlG,OAAqB21d,GAAA,EAM3C,IALA,IAAA3oc,EAAAq4E,EAAAswX,GACAzpa,EAAAm5C,EAAAswX,EAAA,GACA9rF,EAAAnrV,EAAAt0B,IAAAqqD,QAAAznD,GACAqpX,EAAAxM,EAAA+rF,YAAA1pa,GACA3kC,EAAAsiX,EAAAlmX,KAAA0yX,GACA7tY,EAAAqhY,EAAAkV,WAAA1I,GAAAt8V,EAAA8vV,EAAAntN,MAAA25N,EAAA,GAA8Et8V,GAAAmS,IAAW1jD,EAAA,CACzF,IAAAk0K,EAAAn1J,EAAAsuc,WAAArtd;AACA,IAAAk0K,EAAA;AACA,GAAAl0K,IAAA,GAAAktd,EAAApsd,QAAAywC,GAAA,CACA,IAAA0iI,EAAAl1J,EAAAg/I,MAAA/9J,EAAA;AACAi0K,EAAAl5K,MAAAm5K,EAAAn5K,MAAAiyd,EAAA/4S,EAAAC,IAAAg5S,EAAArud,KAAA0yC,EACA,CACAA,GAAA2iI,EAAAy1N,QACA,CAEAujF,EAAA9jc,KAAA,SAAArxB,EAAAma,GACA,OAAAna,EAAAma,CACA;AACA,QAAAo7c,EAAAJ,EAAA11d,OAAA,EAAwC81d,GAAA,EAAUA,IAClDxD,EAAA/5E,QAAA75V,EAAAt0B,IAAAsrc,EAAAI,KAAAp3a,EAAAnnC,KAAAm+c,EAAAI;AAEAvwM,EAAA7mO,EACA,CACA,CApCA,CA0CA6mO,EAAAgzH,GAAAzhU,EACA,CACA,EAoCAh+B,EAAAupW,WAAkBA,EAClBvpW,EAAAm8a,cAAqBA,EACrBn8a,EAAAwgW,oBAA2BA,EAC3BxgW,EAAAohW,gBAAuBA,EACvBphW,EAAAshW,SAAgBA,EAChBthW,EAAAyiW,aAAoBA,EACpBziW,EAAA0iW,SA9dA,SAAA95X,EAAA6jQ,GACA,IACApwH,EADAyqP,EAAAl+X,EAAA8xF;AAEA,GAAAosS,aAAA4yE,EAAAj0E,cAAA,CACA,GAAAqB,EAAAj8X,KAAAupX,cAAAolF,EAAA/5E,QAAA72X,EAAA0I,IAAAw1X,EAAA1zV,IAAA;AACAipG,EAAAyqP,EAAA1zV,EACA,MAEA,UADAipG,EAAAm9T,EAAA32E,UAAAj6X,EAAA0I,IAAAw1X,EAAA1zV,GAAA,IACA;AAGA,OADAq5N,KAAA7jQ,EAAAg9B,GAAAnnC,KAAA49I,GAAA6kP,oBAEA,EAmdAlhW,EAAA2iW,YAAmBA,EACnB3iW,EAAA+iW,sBA5mBA,SAAAn6X,EAAA6jQ,EAAAzuM,GACA,IAAA00T,EAAAinF,EAAA/wc,EAAAo1D;AACA,IAAA00T,EAAA;AACA,IAAAmnF,EAAAC,EAAApnF;AACA,QAAAmnF,GAAAO,EAAAxxc,EAAAixc,EAAAptM,EACA,EAwmBAzsO,EAAAgjW,qBAvmBA,SAAAp6X,EAAA6jQ,EAAAzuM,GACA,IAAA00T,EAAAioF,EAAA/xc,EAAAo1D;AACA,IAAA00T,EAAA;AACA,IAAAmnF,EAAAe,EAAAloF;AACA,QAAAmnF,GAAAO,EAAAxxc,EAAAixc,EAAAptM,EACA,EAmmBAzsO,EAAAijW,OApfA,SAAAr6X,EAAA6jQ,GACA,IAEApwH,EAFAyqP,EAAAl+X,EAAA8xF,UACAuiX,EAAAn2E,aAAA4yE,EAAAj0E;AAEA,GAAAw3E,EAAA,CACA,GAAAn2E,EAAAj8X,KAAAupX,cAAAolF,EAAA/5E,QAAA72X,EAAA0I,IAAAw1X,EAAA5yX,MAAA;AACAmoI,EAAAyqP,EAAA5yX,IACA,MAEA,UADAmoI,EAAAm9T,EAAA32E,UAAAj6X,EAAA0I,IAAAw1X,EAAA5yX,MAAA,IACA;AAEA,GAAAu4P,EAAA,CACA,IAAA7mO,EAAAh9B,EAAAg9B,GAAAnnC,KAAA49I;AACA4gU,GAAAr3a,EAAAq2V,aAAAy9E,EAAAj0E,cAAAv6Y,OAAA06C,EAAAt0B,IAAA+qI,EAAAzzI,EAAA0I,IAAAqqD,QAAA0gF,GAAAu1O,WAAAyH,WACA5sH,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,EAoeAlhW,EAAAugW,KAtdA,SAAA33X,EAAA6jQ,GACA,IAAAywM,EAAAt0c,EAAA8xF,UACAq2R,EAAAmsF,EAAAnsF,MACA2H,EAAAwkF,EAAAxkF,IACA75T,EAAAkyT,EAAAkP,WAAAvH,GACAvoY,EAAA0uE,GAAA26Y,EAAAr5E,WAAAthU;AACA,aAAA1uE,IACAs8Q,KAAA7jQ,EAAAg9B,GAAA26V,KAAA1hU,EAAA1uE,GAAA+wY,qBAEA,EA8cAlhW,EAAAyjW,eAAsBA,EACtBzjW,EAAAu8a,cAAqBA,EACrBv8a,EAAA2jW,cAAqBA,EACrB3jW,EAAAs8a,aAAoBA,EACpBt8a,EAAAmpE,UAAiBA,EACjBnpE,EAAAgkW,mBAA0BA,EAC1BhkW,EAAAikW,kBAAyBA,EACzBjkW,EAAAkkW,iBArVA,SAAAt7X,EAAA6jQ,GACA,IAGAxrO,EAHAk8a,EAAAv0c,EAAA8xF,UACAq2R,EAAAosF,EAAApsF,MACA39U,EAAA+pa,EAAA/pa,GAEA+gN,EAAA48H,EAAA+rF,YAAA1pa;AACA,UAAA+gN,IACAlzN,EAAA8vV,EAAAptN,OAAAwwF,GACAsY,KAAA7jQ,EAAAg9B,GAAAq2V,aAAAy9E,EAAAj0E,cAAAv6Y,OAAA0d,EAAA0I,IAAA2vB,QAEA,EA4UAjB,EAAAmkW,mBAA0BA,EAC1BnkW,EAAAokW,qBAA4BA,EAC5BpkW,EAAAslW,aA5OA,SAAAvnT,GACA,IAAAtd,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,gBAAAqP,EAAA6jQ,GAEA,IADA,IAAA2wM,KACAn2d,EAAA,EAAoBA,EAAA2hB,EAAA8xF,UAAAnO,OAAArlG,SAAAk2d,EAAkDn2d,IAAA,CACtE,IAAAo2d,EAAAz0c,EAAA8xF,UAAAnO,OAAAtlG,GACAitB,EAAAmpc,EAAAtsF,MAAA9vV,IACAmS,EAAAiqa,EAAA3kF,IAAAz3V;AACAr4B,EAAA0I,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,SAAAvoC,EAAAo2B,GACA,GAAAm8a,EAAA;AACA,GAAAvyc,EAAAupX,cAAAvpX,EAAAyyc,UAAAv/X,EAAAtd,GACA,GAAA51D,EAAApgB,MAAAszF,EACAq/X;IACU,CACV,IAAApkF,EAAApwX,EAAA0I,IAAAqqD,QAAA16B,GACAvxC,EAAAspY,EAAAtpY;AACA0td,EAAApkF,EAAAvqX,OAAA03X,eAAAz2Y,IAAA,EAAAquF,EACA,CACA,EACA,CACA,IAAAq/X,EAAA;AACA,GAAA3wM,EAAA,CAEA,IADA,IAAA7mO,EAAAh9B,EAAAg9B,GACA23a,EAAA,EAAwBA,EAAA30c,EAAA8xF,UAAAnO,OAAArlG,OAAqCq2d,IAAA,CAC7D,IAAAC,EAAA50c,EAAA8xF,UAAAnO,OAAAgxX,GACA1hF,EAAA2hF,EAAAzsF,MAAA9vV,IACA66V,EAAA0hF,EAAA9kF,IAAAz3V;AACA2E,EAAA0/V,aAAAzJ,EAAAC,EAAA/9S,EAAAtd,EACA,CACAgsM,EAAA7mO,EAAAs7V,iBACA,CACA,QACA,CACA,EA4MAlhW,EAAA6lW,WAAkBA,EAClB7lW,EAAAg7a,aAAoBA,EACpBh7a,EAAAy9a,oBAlWA,SAAA70c,EAAA6jQ,GACA,OAAAo5H,EAAAj9X,EAAA6jQ,GAAA,SAAA7mO,GACA,IAAAypV,EAAAzmX,EAAAuiX,aAAAviX,EAAA8xF,UAAAg+R,IAAAvH,cAAAvoX,EAAA8xF,UAAAq2R,MAAA1B;AACAA,GAAAzpV,EAAAw5V,YAAA/P,GACA5iH,EAAA7mO,EACA,EACA,EA6VA5F,EAAAwnW,WArKA,SAAA3D,GACA,IAAApjU,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA5Q,EAAA4Q,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACAslc,QAAA/0d,KAAA+0d,mBACAC,QAAAh1d,KAAAi1d,kBACAC,IAAAl1d,KAAAm1d;AACA,gBAAAl1c,EAAA6jQ,GACA,IAAAsxM,EAAAn1c,EAAA8xF,UACAzW,EAAA85X,EAAA95X,MACAyuS,EAAAqrF,EAAArrF,QACAnmS,EAAAwxX,EAAAxxX;AACA,GAAAtI,IAAAyuS,IApDA,SAAAphX,EAAAi7E,EAAA9hG,EAAAkzd,GAeA,IAdA,IAaAp9U,EAbAR,EAAA,WACA,IAAAi+U,EAAAzxX,EAAAtlG,GACA8pY,EAAAitF,EAAAjtF,MACA2H,EAAAslF,EAAAtlF,IACA/iN,EAAA,GAAAo7M,EAAAwM,OAAAjsX,EAAAszX,eAAAtzX,EAAA7mB,KAAAo6Y,eAAAp6Y;AAKA,GAJA6mB,EAAA8/W,aAAAL,EAAA9vV,IAAAy3V,EAAAz3V,IAAA,SAAAp2B,EAAAo2B,GACA,GAAA00I,IAAAgoS,GAAA9yc,EAAAwmX,QAAAxmX,EAAAk6X,UAAA9jW,GAAA8vV,EAAA9vV,OAAAp2B,EAAAwuX,UAAAX,EAAAz3V,IAAA;AACA00I,EAAA9qK,EAAA+5X,eAAA/5X,EAAApgB,KAAAo6Y,eAAAp6Y,EACA,GACAkrL,EAAA,OACA19K,KAEA,EAEAhR,EAAA,EAAkBA,EAAAslG,EAAArlG,OAAmBD,IAErC,GADAs5I,EAAAR,IACA,OAAAQ,EAAAtoI;AAEA,QACA,CApBA,CAoDA2Q,EAAA0I,IAAAi7E,EAAAs3S,EAAA85E,GAAA;AACA,GAAAlxM,EACA,GAAAimH,EACAmR,EAAAa,QAAA97X,EAAAuiX,aAAAuH,EAAArD,SAAA5iH,EAAA7jQ,EAAAg9B,GAAAytV,iBAAAwQ,IAAkHp3H,EAAA7jQ,EAAAg9B,GAAA0+V,cAAAT,EAAA34Y,OAAAu1E;IAC1G,CACR,IAAAliC,EACAqH,EAAAh9B,EAAAg9B;AACA+3a,IAAApxX,EAtCA,SAAAA,GAeA,IAdA,IAAA3+E,EAAA,GACAqwc,EAAA,WACA,IAAAC,EAAA3xX,EAAAtlG,GACA8pY,EAAAmtF,EAAAntF,MACA2H,EAAAwlF,EAAAxlF;AACA3H,EAAAz/W,IAAA8/W,aAAAL,EAAA9vV,IAAAy3V,EAAAz3V,IAAA,SAAAp2B,EAAAo2B,GACA,GAAAp2B,EAAAwmX,QAAAxmX,EAAAu9D,QAAApjE,MAAA6F,EAAAk6X,UAAA9jW,GAAA8vV,EAAA9vV,OAAAp2B,EAAAwuX,UAAAX,EAAAz3V,IAGA,OAFAA,EAAA,EAAA8vV,EAAA9vV,KAAArzB,EAAArf,KAAA,IAAAmrd,EAAAyE,eAAAptF,IAAAz/W,IAAAqqD,QAAA16B,EAAA,KACA8vV,IAAAz/W,IAAAqqD,QAAA16B,EAAA,EAAAp2B,EAAAu9D,QAAApjE,QAGA,GACA+rX,EAAA9vV,IAAAy3V,EAAAz3V,KAAArzB,EAAArf,KAAA,IAAAmrd,EAAAyE,eAAAptF,EAAA2H,GACA,EACAzxY,EAAA,EAAkBA,EAAAslG,EAAArlG,OAAmBD,IACrCg3d;AAEA,OAAArwc,CACA,CAnBA,CAsCA2+E,IAEAhuD,EADAm/a,GACAnxX,EAAAniF,KAAA,SAAA5iB,GACA,OAAAohB,EAAA0I,IAAA8sc,aAAA52d,EAAAupY,MAAA9vV,IAAAz5C,EAAAkxY,IAAAz3V,IAAA4iW,EACA,IAEAt3S,EAAAvzE,MAAA,SAAAxxB,GACA,IAAA62d;AAKA,OAJAz4a,EAAAt0B,IAAA8/W,aAAA5pY,EAAAupY,MAAA9vV,IAAAz5C,EAAAkxY,IAAAz3V,IAAA,SAAAp2B,EAAAo2B,EAAAxyB,GACA,GAAA4vc,EAAA;AACAA,GAAAx6E,EAAAa,QAAA75X,EAAAwkX,UAAA5gX,KAAAhkB,KAAAo6Y,eAAAhB,MAAAh5X,EAAAymX,QAAA,QAAAtlX,KAAAnB,EAAA4pX,YAAA/qY,KAAA+b,IAAA,EAAAje,EAAAupY,MAAA9vV,OAAAv3C,KAAA8b,IAAAqF,EAAAwuX,SAAA7xY,EAAAkxY,IAAAz3V,SACA,IACAo9a,CACA;AAEA,QAAAp3d,EAAA,EAAwBA,EAAAslG,EAAArlG,OAAmBD,IAAA,CAC3C,IAAAq3d,EAAA/xX,EAAAtlG,GACA8pY,EAAAutF,EAAAvtF,MACA2H,EAAA4lF,EAAA5lF;AACA,GAAAn6V,EAEY,CACZ,IAAArqB,EAAA68W,EAAA9vV,IACAmS,EAAAslV,EAAAz3V,IACAp7B,EAAAkrX,EAAAc,UACA/rX,EAAA4yX,EAAA9G,WACA2sF,EAAAV,GAAAh4c,KAAAyrX,OAAA,OAAAlqY,KAAAye,EAAA7b,MAAA,GAAA9C,OAAA,EACAs3d,EAAAX,GAAA/3c,KAAAwrX,OAAA,OAAAlqY,KAAA0e,EAAA9b,MAAA,GAAA9C,OAAA;AACAgtB,EAAAqqc,EAAAnra,IACAl/B,GAAAqqc,EACAnra,GAAAora,GAEA54a,EAAAk+V,QAAA5vX,EAAAk/B,EAAAywV,EAAA34Y,OAAAu1E,GACA,MAbA76B,EAAAwtV,WAAArC,EAAA9vV,IAAAy3V,EAAAz3V,IAAA4iW,EAcA,CACAp3H,EAAA7mO,EAAAs7V,iBACA,CAEA,QACA,CACA,EA4GAlhW,EAAA+nW,OA9PA,SAAAhqT,GACA,IAAAtd,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,gBAAAqP,EAAA6jQ,GACA,IAAAgyM,EAAA71c,EAAA8xF,UACAq2R,EAAA0tF,EAAA1tF,MACA2H,EAAA+lF,EAAA/lF,IACA75T,EAAAkyT,EAAAkP,WAAAvH,GACA0Z,EAAAvzU,GAAA26Y,EAAAnnE,aAAAxzU,EAAAkf,EAAAtd;AACA,QAAA2xU,IACA3lI,KAAA7jQ,EAAAg9B,GAAAkoO,KAAAjvM,EAAAuzU,GAAAlR,qBAEA,CACA,SAAAl6Y,EAAAvB,EAAA0B,GAAA;AC3bA,SAAAwpI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAI/S,SAAAm3d,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAEtE,IAAA85b,EAAuBtnY,EAAQ,OAC/BonY,EAA2BpnY,EAAQ,MASnCwsY,EAAA,WACA,SAAAA,EAAAC,EAAAl2d,GACA,IAEAq+B,EAFAkmB,EAAAvmD;CAjBA,SAAAi0E,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAA5F,CAkBA7oD,KAAAi4d,GAEAj4d,KAAAk4d,aACAl4d,KAAAm1Q,UAAA,KACAn1Q,KAAA0iB,QAAA,KACA1iB,KAAAmM,SAAA,EACAnM,KAAAo4d,cAAA,KACAp4d,KAAA+N,MAAA,QAAAsyB,EAAAr+B,EAAA+L,aAAA,IAAAsyB,IAAA,EACArgC,KAAAsF,WAAAtD,EAAAsD,WAAAmsB,EAAAzvB,EAAAsD,OAAA,QACAtF,KAAA6lG,MAAA7jG,EAAA6jG,MACA7lG,KAAA4zM,SAAA,0CAAAhwL,IAAA,SAAAxb,GACA,IAAAu4J,EAAA,SAAAtgK,GACAkmD,EAAAn+C,GAAA/H,EACA;AAEA,OADA63d,EAAAlqF,IAAA7/W,iBAAA/lB,EAAAu4J,GACA,CACAv4J,OACAu4J,UAEA,EACA,CApCA,IAAAw3T,EAAAE;AA+LA,OA/LAF,EAqCAF,GArCAI,EAqCA,EACAp/b,IAAA,UACAt2B,MAAA,WACA,IAAAqxI,EAAAh0I;AACAA,KAAA4zM,SAAAp5L,QAAA,SAAAgH,GACA,IAAApZ,EAAAoZ,EAAApZ,KACAu4J,EAAAn/I,EAAAm/I;AACA,OAAA3sB,EAAAkkV,WAAAlqF,IAAAx+W,oBAAApnB,EAAAu4J,EACA,EACA,GACG,CACH1nI,IAAA,SACAt2B,MAAA,SAAAu1d,EAAAxyG,GACA,SAAA1lX,KAAAm1Q,WAAAuwG,EAAA/6V,KAAAutc,EAAAj2c,MAAA0I,IACA,GAAA3qB,KAAAo4d,cAAA,CACA,IAAA5ud,EAAAxJ,KAAAs4d,cAAAt4d,KAAAo4d;AACA5ud,GAAAxJ,KAAAm1Q,UAAAn1Q,KAAAu4d,gBAA6Dv4d,KAAAw4d,UAAAhvd,EAC7D,MACAxJ,KAAAu4d,eAGA,GACG,CACHt/b,IAAA,YACAt2B,MAAA,SAAA23C,GACAA,GAAAt6C,KAAAm1Q,YACAn1Q,KAAAm1Q,UAAA76N,EACA,MAAAA,GACAt6C,KAAA0iB,QAAAlV,WAAA1E,YAAA9I,KAAA0iB,SACA1iB,KAAA0iB,QAAA,MAEA1iB,KAAAu4d,gBAEA,GACG,CACHt/b,IAAA,gBACAt2B,MAAA,WACA,IAEA0e,EAFAgxX,EAAAryY,KAAAk4d,WAAAj2c,MAAA0I,IAAAqqD,QAAAh1E,KAAAm1Q,WACA9rG,GAAAgpO,EAAAvqX,OAAAm2X,cAEAw6E,EAAAz4d,KAAAk4d,WAAAlqF,IACA0qF,EAAAD,EAAArrd,wBACA6iK,EAAAyoT,EAAA3qd,MAAA0qd,EAAApwc,YACA6nJ,EAAAwoT,EAAAp3c,OAAAm3c,EAAAnwc;AACA,GAAA+gJ,EAAA,CACA,IAAA2T,EAAAq1N,EAAApH,WACAhuN,EAAAo1N,EAAAnH;AACA,GAAAluN,GAAAC,EAAA,CACA,IAAA/4J,EAAAlkB,KAAAk4d,WAAAS,QAAA34d,KAAAm1Q,WAAAn4F,IAAA01N,SAAA;AACA,GAAAxuX,EAAA,CACA,IAAA00c,EAAA10c,EAAA9W,wBACAS,EAAAmvK,EAAA47S,EAAA9qd,OAAA8qd,EAAA/qd;AACAmvK,GAAAC,IAAApvK,KAAA7N,KAAAk4d,WAAAS,QAAA34d,KAAAm1Q,WAAA/nQ,wBAAAS,KAAA;AACA,IAAA68c,EAAA1qd,KAAA+N,MAAA,EAAAmiK;AACA7uJ,EAAA,CACAzT,KAAAgrd,EAAAhrd,KACAI,MAAA4qd,EAAA5qd,MACAH,MAAA68c,EACA58c,OAAAD,EAAA68c,EAEA,CACA,CACA,CACA,IAAArpc,EAAA,CACA,IAAAU,EAAA/hB,KAAAk4d,WAAAjtE,YAAAjrZ,KAAAm1Q,WACA0jN,EAAA74d,KAAA+N,MAAA,EAAAkiK;AACA5uJ,EAAA,CACAzT,KAAAmU,EAAAnU,KAAAird,EACA7qd,MAAA+T,EAAAnU,KAAAird,EACAhrd,IAAAkU,EAAAlU,IACAC,OAAAiU,EAAAjU,OAEA,CACA,IAWAgrd,EAAAC,EAXAjxc,EAAA9nB,KAAAk4d,WAAAlqF,IAAAhrX;AAYA,GAXAhjB,KAAA0iB,UACA1iB,KAAA0iB,QAAAoF,EAAApjB,YAAAC,SAAAkvE,cAAA,QACA7zE,KAAA6lG,QAAA7lG,KAAA0iB,QAAAlS,UAAAxQ,KAAA6lG,OACA7lG,KAAA0iB,QAAA/U,MAAA44E,QAAA,yDACAvmF,KAAAsF,QACAtF,KAAA0iB,QAAA/U,MAAAo/T,gBAAA/sU,KAAAsF,QAGAtF,KAAA0iB,QAAAq3D,UAAA4I,OAAA,+BAAA0mF,GACArpK,KAAA0iB,QAAAq3D,UAAA4I,OAAA,iCAAA0mF,IAEAvhJ,MAAAnjB,SAAA4I,MAAA,UAAA6X,iBAAA0C,GAAA8D,SACAktc,GAAAzrd,YACA0rd,GAAArrd;IACQ,CACR,IAAA2yP,EAAAv4O,EAAA1a,wBACA4rd,EAAA34N,EAAAtyP,MAAA+Z,EAAAO,YACA4wc,EAAA54N,EAAA/+O,OAAAwG,EAAAQ;AACAwwc,EAAAz4N,EAAAzyP,KAAAka,EAAAra,WAAAurd,EACAD,EAAA14N,EAAAxyP,IAAAia,EAAA7d,UAAAgvd,CACA,CACAj5d,KAAA0iB,QAAA/U,MAAAC,MAAAyT,EAAAzT,KAAAkrd,GAAA7oT,EAAA,KACAjwK,KAAA0iB,QAAA/U,MAAAE,KAAAwT,EAAAxT,IAAAkrd,GAAA7oT,EAAA,KACAlwK,KAAA0iB,QAAA/U,MAAAI,OAAAsT,EAAArT,MAAAqT,EAAAzT,MAAAqiK,EAAA,KACAjwK,KAAA0iB,QAAA/U,MAAA2T,QAAAD,EAAAvT,OAAAuT,EAAAxT,KAAAqiK,EAAA,IACA,GACG,CACHj3I,IAAA,kBACAt2B,MAAA,SAAAwJ,GACA,IAAA+sd,EAAAl5d;AACAkP,aAAAlP,KAAAmM,SACAnM,KAAAmM,QAAAgD,WAAA,WACA,OAAA+pd,EAAAV,UAAA,KACA,EAAOrsd,EACP,GACG,CACH8sB,IAAA,gBACAt2B,MAAA,SAAA+G,GACA,IAAA4wC,EAAAt6C,KAAAk4d,WAAAiB,YAAA,CACAvrd,KAAAlE,EAAAovJ,QACAjrJ,IAAAnE,EAAAqvJ,UAEA70I,EAAAo2B,KAAA0va,QAAA,GAAAhqd,KAAAk4d,WAAAj2c,MAAA0I,IAAAkuX,OAAAv+V,EAAA0va,QACAoP,EAAAl1c,KAAApgB,KAAAimW,KAAAqvH,kBACA1pd,EAAA,mBAAA0pd,IAAAp5d,KAAAk4d,WAAA59a,EAAA5wC,GAAA0vd;AACA,IAAA9+a,GAAA5qC,EAAA;AACA,IAAAlG,EAAA8wC;AACA,GAAAt6C,KAAAk4d,WAAA/jd,UAAAnU,KAAAk4d,WAAA/jd,SAAA/T,MAAA,CACA,IAAAs1J,EAAAm9T,EAAAwG,UAAAr5d,KAAAk4d,WAAAj2c,MAAA0I,IAAAnhB,EAAAxJ,KAAAk4d,WAAA/jd,SAAA/T;AACA,MAAAs1J,IAAAlsJ,EAAAksJ,EACA,CACA,OAAAlsJ,CACA,GACG,CACHyvB,IAAA,WACAt2B,MAAA,SAAA+G,GACA,GAAA1J,KAAAk4d,WAAA5rJ,SAAA,CACAtsU,KAAAo4d,cAAA1ud;AACA,IAAAF,EAAAxJ,KAAAs4d,cAAA5ud;AACA,MAAAF,IACAxJ,KAAAw4d,UAAAhvd,GACAxJ,KAAAs5d,gBAAA,KALA,CAOA,GACG,CACHrgc,IAAA,UACAt2B,MAAA,WACA3C,KAAAs5d,gBAAA,GACA,GACG,CACHrgc,IAAA,OACAt2B,MAAA,WACA3C,KAAAs5d,gBAAA,GACA,GACG,CACHrgc,IAAA,YACAt2B,MAAA,SAAA+G,GACA1J,KAAAk4d,WAAAlqF,IAAAx3X,SAAA9M,EAAA0gR,gBAAApqR,KAAAw4d,UAAA,KACA,MA9LA,SAAAhvd,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EACjM8oF,CAAAklV,EAAAlzd,UAAAozd,GAAoItwc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cA+LpP48Y,CACA,CAnLA;AAoLA5+a,EAAAy1W,WA5LA,WACA,IAAA9sZ,EAAA4Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,WAAAmgd,EAAAxnF,OAAA,CACAl0T,KAAA,SAAA6gZ,GACA,WAAAD,EAAAC,EAAAl2d,EACA,GAEA,SAAA3B,EAAAvB,EAAA0B,GAAA;ACfA,SAAAwpI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAC/S,SAAAmyI,EAAA9+D,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAC5F,SAAAoqF,EAAAzpI,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EAC/P,SAAA+oF,EAAAilV,EAAAE,EAAAkB,GAAwQ,OAA1MlB,GAAAplV,EAAAklV,EAAAlzd,UAAAozd,GAAsEkB,GAAAtmV,EAAAklV,EAAAoB,GAA8Dxxc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cAAoB88Y,CAAA,CACxQ,SAAAJ,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAGtE,SAAAo5G,EAAAzxI,EAAAiE,GAAyK,OAAxIwtI,EAAAtqH,OAAAuqH,eAAAvqH,OAAAuqH,eAAA7vI,OAAA,SAAA7B,EAAAiE,GAA2H,OAAjBjE,EAAA+6F,UAAA92F,EAAiBjE,CAAA,EAAayxI,EAAAzxI,EAAAiE,EAAA,CAKzK,SAAA2tI,EAAA5xI,GAAwL,OAA1J4xI,EAAAzqH,OAAAuqH,eAAAvqH,OAAAC,eAAAvlB,OAAA,SAAA7B,GAAuG,OAAAA,EAAA+6F,WAAA5zE,OAAAC,eAAApnB,EAAA,EAAmD4xI,EAAA5xI,EAAA,CACxL,IAAA44d,EAAwB/tY,EAAQ,OAChCsnY,EAAuBtnY,EAAQ,OAC/BqnY,EAAuBrnY,EAAQ,OAC/BguY,EAAsBhuY,EAAQ,OAC9BiuY,EAAA,SAAAC,IAXA,SAAAC,EAAAC,GAA2C,sBAAAA,GAAA,OAAAA,EAA+D,UAAAhxa,UAAA;AAA6E+wa,EAAA30d,UAAA8iB,OAAAxjB,OAAAs1d,KAAA50d,UAAA,CAAyEq2E,YAAA,CAAe34E,MAAAi3d,EAAAv+Y,YAAAhyB,mBAA0DthC,OAAAmhC,eAAA0wa,EAAA,aAA+Cv+Y,cAAoBw+Y,GAAAxnV,EAAAunV,EAAAC,EAAA,CAA5Y,CAYAH,EAAAC;AACA,IAXAG,EAAiCC,EAWjC1za,GAXAyza,EAWAJ,EAXiCK,EAGjC,WAAuC,uBAAArnV,kBAAAC,UAAA;AAAwE,GAAAD,QAAAC,UAAAs0I,KAAA;AAA0C,sBAAA78E,MAAA;AAA8C,IAAsF,OAAhF3oJ,QAAAx8C,UAAA0rI,QAAA/lI,KAAA8nI,QAAAC,UAAAlxF,QAAA,oBAAgF,CAAe,MAAAphD,GAAY,UAAxT,GAH8F,WAAyC,IAAA4mB,EAAA6lE,EAAA0lD,EAAAsnV;AAA8C,GAAAC,EAAA,CAAiC,IAAAC,EAAAxnV,EAAAxyI,MAAAs7E;AAAmDr0D,EAAAyrH,QAAAC,UAAA7lD,EAAAl6E,UAAAond,EAAA,MAAkE/yc,EAAA6lE,EAAAn6E,MAAA3S,KAAA4S;AAAyC,OACpX,SAAA2nJ,EAAA3vJ,GAAkD,GAAAA,IAAA,WAAAo/H,EAAAp/H,IAAA,mBAAAA,GAA0E,OAAAA;AAAe,YAAAA,EAA4B,UAAAi+C,UAAA;AAAmF,OAC1P,SAAA0xG,GAAwC,YAAAA,EAAuB,UAAAnoB,eAAA;AAAyF,OAAAmoB,CAAA,CAAxJ,CAD0PA,EAAA,CAA1P,CADoXv6J,KAAAinB,EAAA;AAYpX,SAAAyyc,EAAArnF,GAEA,OADAt/P,EAAA/yI,KAAA05d,GACArza,EAAAz7C,KAAA5K,KAAAqyY,IACA,CAqFA,OApFAn/P,EAAAwmV,EAAA,EACAzgc,IAAA,MACAt2B,MAAA,SAAAgoB,EAAA00J,GACA,IAAAgzN,EAAA1nX,EAAAqqD,QAAAqqG,EAAAz7J,IAAA5jB,KAAAo1E;AACA,OAAAskZ,EAAAp1M,MAAA+tH,GAAA,IAAAqnF,EAAArnF,GAAA0gF,EAAA7/E,UAAAqC,KAAAlD,EACA,GACG,CACHp5W,IAAA,UACAt2B,MAAA,WACA,OAAAmwd,EAAA5yE,MAAA5iT,KACA,GACG,CACHrkE,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAAA,aAAA+xa,GAAA/xa,EAAAytB,MAAAp1E,KAAAo1E,IACA,GACG,CACHn8C,IAAA,SACAt2B,MAAA,WACA,OACAmB,KAAA,YACAw2C,IAAAt6C,KAAAo1E,KAEA,GACG,CACHn8C,IAAA,cACAt2B,MAAA,WACA,WAAAs3d,EAAAj6d,KAAA8xZ,OACA,IACG,EACH74X,IAAA,WACAt2B,MAAA,SAAAgoB,EAAAq6R,GACA,oBAAAA,EAAA1qQ,IAAA,UAAAtd,WAAA;AACA,WAAA08b,EAAA/uc,EAAAqqD,QAAAgwO,EAAA1qQ,KACA,GACG,CACHrhB,IAAA,QACAt2B,MAAA,SAAA0vY,GACA,IAAAvqX,EAAAuqX,EAAAvqX;AACA,GAAAA,EAAAm2X,gBAwEA,SAAA5L,GACA,QAAA1yY,EAAA0yY,EAAAuE,MAA2Bj3Y,GAAA,EAAQA,IAAA,CACnC,IAAAoJ,EAAAspY,EAAAtpY,MAAApJ,GACAmoB,EAAAuqX,EAAAnuX,KAAAvkB;AACA,MAAAoJ,EAIA,QAAAi0K,EAAAl1J,EAAAg/I,MAAA/9J,EAAA,IAAgDi0K,IAAA4jG,UAAA,CAChD,MAAA5jG,EAAA21N,aAAA31N,EAAAihO,eAAAi8E,EAAAl9S,EAAAl5K,MAAA;AACA,GAAAk5K,EAAAihO,cAAA,QACA,MANA,GAAAn2X,EAAAhkB,KAAAimW,KAAAg/B,UAAA,QAOA,CACA,QACA,CAdA,CAxEAsJ,KAuFA,SAAAA,GACA,QAAA1yY,EAAA0yY,EAAAuE,MAA2Bj3Y,GAAA,EAAQA,IAAA,CACnC,IAAAoJ,EAAAspY,EAAAiN,WAAA3/Y,GACAmoB,EAAAuqX,EAAAnuX,KAAAvkB;AACA,GAAAoJ,GAAA+e,EAAA6qX,WAIA,QAAA11N,EAAAn1J,EAAAg/I,MAAA/9J,IAA2Ck0K,IAAAx2K,WAAA,CAC3C,MAAAw2K,EAAA01N,aAAA11N,EAAAghO,eAAAi8E,EAAAj9S,EAAAn5K,MAAA;AACA,GAAAm5K,EAAAghO,cAAA,QACA,MANA,GAAAn2X,EAAAhkB,KAAAimW,KAAAg/B,UAAA,QAOA,CACA,QACA,CAdA,CAvFAsJ,GAAA;AACA,IAAAkpC,EAAAzzZ,EAAAhkB,KAAAimW,KAAAulD;AACA,SAAAisB,EAAA,OAAAA;AACA,IAAAl8B,EAAAv3X,EAAA4xX,eAAArH,EAAAtpY,SAAA0wY;AACA,OAAA4F,KAAA5R,WACA,GACG,CACHx0W,IAAA,oBACAt2B,MAAA,SAAA0vY,EAAA3uY,GACA,IAAAy2d,EAAAvnd,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AACA8+B,EAAA,OAAqB,CACrB,IAAAyob,GAAAT,EAAAp1M,MAAA+tH,GAAA,OAAAA;AAGA,IAFA,IAAA/3V,EAAA+3V,EAAA/3V,IACA2+C,EAAA,KACAt5F,EAAA0yY,EAAAuE,OAAkCj3Y,IAAA,CAClC,IAAAmoB,EAAAuqX,EAAAnuX,KAAAvkB;AACA,GAAA+D,EAAA,EAAA2uY,EAAAiN,WAAA3/Y,GAAAmoB,EAAA6qX,WAAAN,EAAAtpY,MAAApJ,GAAA,GACAs5F,EAAAnxE,EAAAg/I,MAAApjK,EAAA,EAAA2uY,EAAAiN,WAAA3/Y,GAAA0yY,EAAAtpY,MAAApJ,GAAA;AACA,KACA,CAAY,MAAAA,EACZ;AAEA26C,GAAA52C;AACA,IAAA02d,EAAA/nF,EAAA1nX,IAAAqqD,QAAA16B;AACA,GAAAo/a,EAAAp1M,MAAA81M,GAAA,OAAAA,CACA,CACA,OAAe,CACf,IAAApQ,EAAAtmd,EAAA,EAAAu1F,EAAAxyF,WAAAwyF,EAAA2nL;AACA,IAAAopM,EAAA,CACA,GAAA/wX,EAAAyxS,SAAAzxS,EAAA0xS,SAAAooF,EAAAj0E,cAAAyI,aAAAtuT,GAAA,CACAo5S,IAAA1nX,IAAAqqD,QAAA16B,EAAA2+C,EAAAy5S,SAAAhvY,GACAy2d;AACA,SAAAzob,CACA,CACA,KACA,CACAunD,EAAA+wX,EACA1va,GAAA52C;AACA,IAAA22d,EAAAhoF,EAAA1nX,IAAAqqD,QAAA16B;AACA,GAAAo/a,EAAAp1M,MAAA+1M,GAAA,OAAAA,CACA,CACA,WACA,CACA,KAEAX,CACA,CA5FA,CA4FC3G,EAAA7/E;AACDwmF,EAAAz0d,UAAAmyE,WACAsiZ,EAAAlG,SAAAkG,EAAAY,kBACAvH,EAAA7/E,UAAAqnF,OAAA,YAAAb;AACA,IAAAO,EAAA,WACA,SAAAA,EAAA3/a,GACAy4F,EAAA/yI,KAAAi6d,GACAj6d,KAAAs6C,KACA,CAaA,OAZA44F,EAAA+mV,EAAA,EACAhhc,IAAA,MACAt2B,MAAA,SAAA08K,GACA,WAAA46S,EAAA56S,EAAAz7J,IAAA5jB,KAAAs6C,KACA,GACG,CACHrhB,IAAA,UACAt2B,MAAA,SAAAgoB,GACA,IAAA0nX,EAAA1nX,EAAAqqD,QAAAh1E,KAAAs6C;AACA,OAAAo/a,EAAAp1M,MAAA+tH,GAAA,IAAAqnF,EAAArnF,GAAA0gF,EAAA7/E,UAAAqC,KAAAlD,EACA,KAEA4nF,CACA,CAlBA;AAmBA,SAAAC,EAAAp2d,GACA,OAAAA,EAAA4mY,QAAA5mY,EAAAimW,KAAAg/B,WAAAjlY,EAAAimW,KAAAywH,eACA,CA8CA,IAAAtuS,EAAAstS,EAAAiB,eAAA,CACAC,UAAA79c,EAAA,YACAkzX,WAAAlzX,EAAA,WACA89c,QAAA99c,EAAA,WACAixY,UAAAjxY,EAAA;AAEA,SAAAA,EAAA6C,EAAAhc,GACA,IAAAk3d,EAAA,QAAAl7c,EAAAhc,EAAA,cAAAA,EAAA;AACA,gBAAAue,EAAA6jQ,EAAAzuM,GACA,IAAA8oU,EAAAl+X,EAAA8xF,UACAw3S,EAAA7nZ,EAAA,EAAAy8Y,EAAApO,IAAAoO,EAAA/V,MACA+vF,EAAAh6E,EAAA7iT;AACA,GAAA6iT,aAAA4yE,EAAAjgF,cAAA,CACA,IAAAz7T,EAAA47Y,eAAA2H,IAAA,GAAArvE,EAAA3U,MAAA;AACAujF,KACA5uE,EAAAtpY,EAAA0I,IAAAqqD,QAAAtxE,EAAA,EAAA6nZ,EAAAtuO,QAAAsuO,EAAAvuO,SACA,CACA,IAAA69S,EAAAnB,EAAAY,kBAAA/uE,EAAA7nZ,EAAAy2d;AACA,QAAAU,IACA/0M,KAAA7jQ,EAAAg9B,GAAAq2V,aAAA,IAAAokF,EAAAmB,QAEA,CACA,CACA,SAAAv8Y,EAAAjH,EAAA/8B,EAAA5wC,GACA,IAAA2tE,MAAAi1P,SAAA;AACA,IAAA+lE,EAAAh7T,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B;AACA,IAAAo/a,EAAAp1M,MAAA+tH,GAAA;AACA,IAAAyoF,EAAAzjZ,EAAA8hZ,YAAA,CACAvrd,KAAAlE,EAAAovJ,QACAjrJ,IAAAnE,EAAAqvJ;AAEA,QAAA+hU,KAAA9Q,QAAA,GAAA+I,EAAAj0E,cAAAyI,aAAAlwU,EAAAp1D,MAAA0I,IAAAkuX,OAAAiiF,EAAA9Q,WACA3yY,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAq2V,aAAA,IAAAokF,EAAArnF,KACA,GACA,CACA,SAAA0oF,EAAA1jZ,EAAA3tE,GACA,4BAAAA,EAAAklS,aAAAv3N,EAAAp1D,MAAA8xF,qBAAA2lX,GAAA;AACA,IAAAtvF,EAAA/yT,EAAAp1D,MAAA8xF,UAAAq2R,MACAgQ,EAAAhQ,EAAAtiX,OAAA4xX,eAAAtP,EAAArhY,SAAA2iZ,aAAAr0U,EAAAp1D,MAAAgmG,OAAAk4F,MAAA98M;AACA,IAAA+2Y,EAAA;AAEA,IADA,IAAA4gF,EAAAlI,EAAA90K,SAAA1gN,MACAh9F,EAAA85Y,EAAA75Y,OAAA,EAAkCD,GAAA,EAAQA,IAAA06d,EAAAlI,EAAA90K,SAAAzwR,KAAA6sX,EAAA95Y,GAAA2/Y,cAAA,KAAA+6E;AAC1C,IAAA/7a,EAAAo4B,EAAAp1D,MAAAg9B,GAAAx+B,QAAA2pX,EAAA9vV,IAAA8vV,EAAA9vV,IAAA,IAAAw4a,EAAA5yE,MAAA86E,EAAA;AAGA,OAFA/7a,EAAAq2V,aAAAy9E,EAAAjgF,cAAAyC,KAAAt2V,EAAAt0B,IAAAqqD,QAAAo1T,EAAA9vV,IAAA,KACA+8B,EAAAyuM,SAAA7mO,KAEA,CACA,SAAAg8a,EAAAh5c,GACA,KAAAA,EAAA8xF,qBAAA2lX,GAAA;AACA,IAAAx1c,EAAAvf,SAAAkvE,cAAA;AAEA,OADA3vD,EAAA1T,UAAA,wBACAipd,EAAAtnE,cAAA5tZ,OAAA0d,EAAA0I,IAAA,CAAA8uc,EAAAvnE,WAAAjkF,OAAAhsT,EAAA8xF,UAAA3+B,KAAAlxD,EAAA,CACA+U,IAAA,eAEA,CACAogB,EAAAqgb,UAAiBA,EACjBrgb,EAAAg2W,UAvEA,WACA,WAAA0jE,EAAAxnF,OAAA,CACAjhV,MAAA,CACAsmV,YAAAqqF,EACAC,uBAAA,SAAA7sF,EAAAiM,EAAAhE,GACA,OAAAgE,EAAAhgW,KAAAg8V,EAAAh8V,KAAAo/a,EAAAp1M,MAAAgyH,GAAA,IAAAojF,EAAApjF,GAAA,IACA,EACAh4T,cACA4tG,gBACA2/M,gBAAA,CACAkvF,iBAIA,SAAA16d,EAAAvB,EAAA0B,GAAA;ACnLA,SAAAwpI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAC/S,SAAAmyI,EAAA9+D,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAC5F,SAAAoqF,EAAAzpI,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EAC/P,SAAA+oF,EAAAilV,EAAAE,EAAAkB,GAAwQ,OAA1MlB,GAAAplV,EAAAklV,EAAAlzd,UAAAozd,GAAsEkB,GAAAtmV,EAAAklV,EAAAoB,GAA8Dxxc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cAAoB88Y,CAAA,CACxQ,SAAAJ,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAEtE,IAAAkic,EAAmB1vY,EAAQ,OAC3BonY,EAA2BpnY,EAAQ,MACnCsnY,EAAuBtnY,EAAQ,OAE/B2vY,EAAA,WACA,SAAAA,EAAAt/S,EAAAu/S,GACAtoV,EAAA/yI,KAAAo7d,GACAp7d,KAAA87K,QACA97K,KAAAq7d,YACA,CAoLA,OAnLAnoV,EAAAkoV,EAAA,EACAnic,IAAA,WACAt2B,MAAA,SAAAsf,EAAAq5c,GACA,IAAA/0a,EAAAvmD;AACA,MAAAA,KAAAq7d,WAAA;AAEA,IADA,IAQAE,EAAA9G,EARAt1c,EAAAnf,KAAA87K,MAAAv7K,QACc4e,IAEd,GADAnf,KAAA87K,MAAAxvJ,IAAAnN,EAAA,GACA40F,UAAA,GACA50F;AACA,KACA,CAGAm8c,IACAC,EAAAv7d,KAAAw7d,UAAAr8c,EAAAnf,KAAA87K,MAAAv7K,QACAk0d,EAAA8G,EAAAtmF,KAAA10Y;AAEA,IACAwzG,EAAAygF,EADAxuK,EAAA/D,EAAAg9B,GAEAw8a,EAAA,GACApM,EAAA;AA8BA,OA7BArvd,KAAA87K,MAAAthK,QAAA,SAAA49I,EAAA93J,GACA,IAAA83J,EAAAvrB,KAOA,OANA0uV,IACAA,EAAAh1a,EAAAi1a,UAAAr8c,EAAA7e,EAAA,GACAm0d,EAAA8G,EAAAtmF,KAAA10Y,QAEAk0d,SACApF,EAAAznd,KAAAwwJ;AAGA,GAAAmjU,EAAA,CACAlM,EAAAznd,KAAA,IAAAw1J,EAAAhF,EAAAx0I;AACA,IACAA,EADAipH,EAAAurB,EAAAvrB,KAAAjpH,IAAA23c,EAAAn7d,MAAAq0d;AAEA5nV,GAAA7mH,EAAA62X,UAAAhwQ,GAAAliH,MACA/G,EAAAoC,EAAAq5J,QAAA41N,KAAAjvX,EAAAq5J,QAAA41N,KAAA10Y,OAAA,GACAk7d,EAAA7zd,KAAA,IAAAw1J,EAAAx5I,OAAA6N,SAAAgqc,EAAAl7d,OAAA8ud,EAAA9ud,UAEAk0d,IACA7wc,GAAA23c,EAAAG,UAAA93c,EAAA6wc,EACA,MACAzuc,EAAA62X,UAAAzkP,EAAAvrB;AAEA,OAAAurB,EAAArkD,WACAA,EAAAwnX,EAAAnjU,EAAArkD,UAAAnwF,IAAA23c,EAAAn7d,MAAAq0d,IAAAr8T,EAAArkD,UACAygF,EAAA,IAAA4mS,EAAA70a,EAAAu1H,MAAA17K,MAAA,EAAA+e,GAAAmyL,OAAA+9Q,EAAAl+c,UAAAsB,OAAAgpd,IAAAl1a,EAAA80a,WAAA,YAFA,CAKA,EAAOr7d,KAAA87K,MAAAv7K,OAAA,GACP,CACAi0L,YACAxuK,YACA+tF,YAEA,GACG,CACH96E,IAAA,eACAt2B,MAAA,SAAAqjB,EAAA+tF,EAAA4nX,EAAAL,GAKA,IAJA,IAAA7+S,EAAA,GACA4+S,EAAAr7d,KAAAq7d,WACAh/S,EAAAr8K,KAAA87K,MACA8/S,GAAAN,GAAAj/S,EAAA97K,OAAA87K,EAAA/vJ,IAAA+vJ,EAAA97K,OAAA,QACAD,EAAA,EAAsBA,EAAA0lB,EAAA/Q,MAAA1U,OAA4BD,IAAA,CAClD,IAEAsxT,EAFA/kL,EAAA7mH,EAAA/Q,MAAA3U,GAAAwtR,OAAA9nQ,EAAAy7X,KAAAnhZ,IACA83J,EAAA,IAAAgF,EAAAp3I,EAAAq5J,QAAA41N,KAAA30Y,GAAAusI,EAAA94B,IAEA69M,EAAAgqK,KAAA3tK,MAAA71J,MACAA,EAAAw5J,EACAtxT,EAAAm8K,EAAA9qB,MAAgC0qB,IAAAj8K,MAAA,EAAAi8K,EAAA97K,OAAA,IAEhCk8K,EAAA70K,KAAAwwJ,GACArkD,IACAsnX,IACAtnX,OAAAtiF,GAEA6pc,IAAAM,EAAAxjU,EACA,CACA,IAuGA0jB,EAAAt7K,EACAq7d,EAxGAt4c,EAAA83c,EAAAM,EAAA/kF;AAKA,OAJArzX,EAAAu4c,IAsGAt7d,EArGA+iB,GAqGAu4J,EArGAO,GAuGA7hK,QAAA,SAAA49I,EAAA93J,GACA,GAAA83J,EAAArkD,WAAA,GAAAvzG,IAEA,OADAq7d,EAAAv7d,IAGA,GA5GA+7K,EA6GAP,EAAA17K,MAAAy7d,GA5GAR,GAAA93c,GAEA,IAAA63c,EAAA/+S,EAAAi1B,OAAA70B,GAAA4+S,EACA,GACG,CACHpic,IAAA,YACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,IAAAwoV,EAAA,IAAA49E,EAAAkJ;AAKA,OAJA/7d,KAAA87K,MAAAthK,QAAA,SAAA49I,EAAA93J,GACA,IAAA07d,EAAA,MAAA5jU,EAAA6jU,cAAA37d,EAAA83J,EAAA6jU,cAAA1uc,EAAA0nX,OAAA10Y,OAAA63J,EAAA6jU,kBAAAxqc;AACAwjX,EAAAymF,UAAAtjU,EAAAx0I,IAAAo4c,EACA,EAAOzuc,EAAAk/B,GACPwoV,CACA,GACG,CACHh8W,IAAA,UACAt2B,MAAA,SAAAm3I,GACA,UAAA95I,KAAAq7d,WAAAr7d,KACA,IAAAo7d,EAAAp7d,KAAA87K,MAAAw1B,OAAAx3D,EAAAl2H,IAAA,SAAAA,GACA,WAAAw5I,EAAAx5I,EACA,IAAO5jB,KAAAq7d,WACP,GACG,CACHpic,IAAA,UACAt2B,MAAA,SAAAu5d,EAAAC,GACA,IAAAn8d,KAAAq7d,WAAA,OAAAr7d;AACA,IAAAo8d,EAAA,GACAl9c,EAAAnc,KAAA+b,IAAA,EAAA9e,KAAA87K,MAAAv7K,OAAA47d,GACA98S,EAAA68S,EAAA78S,QACAg9S,EAAAH,EAAAjnd,MAAA1U,OACA86d,EAAAr7d,KAAAq7d;AACAr7d,KAAA87K,MAAAthK,QAAA,SAAA49I,GACAA,EAAArkD,WAAAsnX,GACA,EAAOn8c;AACP,IAAAo9c,EAAAH;AACAn8d,KAAA87K,MAAAthK,QAAA,SAAA49I,GACA,IAAA99G,EAAA+kI,EAAAk9S,YAAAD;AACA,SAAAhib,EAAA,CACA+hb,EAAAt5d,KAAA8b,IAAAw9c,EAAA/hb;AACA,IAAA12B,EAAAy7J,EAAA41N,KAAA36V;AACA,GAAA89G,EAAAvrB,KAAA,CACA,IAAAA,EAAAqvV,EAAAjnd,MAAAqlC,GAAAwzO,OAAAouM,EAAAz6E,KAAAnnW,IACAy5D,EAAAqkD,EAAArkD,WAAAqkD,EAAArkD,UAAAnwF,IAAAy7J,EAAAj/K,MAAAk8d,EAAA,EAAAhib;AACAy5D,GAAAsnX,IACAe,EAAAx0d,KAAA,IAAAw1J,EAAAx5I,EAAAipH,EAAA94B,GACA,MACAqoX,EAAAx0d,KAAA,IAAAw1J,EAAAx5I,GATA,CAWA,EAAO1E;AAEP,IADA,IAAAs9c,EAAA,GACAl8d,EAAA67d,EAAiC77d,EAAA+7d,EAAc/7d,IAAAk8d,EAAA50d,KAAA,IAAAw1J,EAAAiiB,EAAA41N,KAAA30Y;AAC/C,IACAm8d,EAAA,IAAArB,EADAp7d,KAAA87K,MAAA17K,MAAA,EAAA8e,GAAAoyL,OAAAkrR,GAAAlrR,OAAA8qR,GACAf;AAEA,OADAoB,EAAAC,iBA9IA,MA8IAD,IAAAr1W,SAAApnH,KAAA87K,MAAAv7K,OAAA67d,EAAA77d,SACAk8d,CACA,GACG,CACHxjc,IAAA,iBACAt2B,MAAA,WACA,IAAAw9I,EAAA;AAIA,OAHAngJ,KAAA87K,MAAAthK,QAAA,SAAA49I,GACAA,EAAAvrB,MAAAsT,GACA,GACAA,CACA,GACG,CACHlnH,IAAA,WACAt2B,MAAA,WACA,IAAAg6d,EAAA/pd,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAA87K,MAAAv7K,OACAg7d,EAAAv7d,KAAAw7d,UAAA,EAAAmB,GACAlI,EAAA8G,EAAAtmF,KAAA10Y,OACAu7K,EAAA,GACA56E,EAAA;AAsBA,OArBAlhG,KAAA87K,MAAAthK,QAAA,SAAA49I,EAAA93J,GACA,GAAAA,GAAAq8d,EACA7gT,EAAAl0K,KAAAwwJ,GACAA,EAAArkD,WAAA7S;KACU,GAAAk3D,EAAAvrB,KAAA,CACV,IAAAA,EAAAurB,EAAAvrB,KAAAjpH,IAAA23c,EAAAn7d,MAAAq0d,IACA7wc,EAAAipH,KAAAo7Q;AAGA,GAFAwsE,IACA7wc,GAAA23c,EAAAG,UAAA93c,EAAA6wc,GACA5nV,EAAA,CACA,IAAA94B,EAAAqkD,EAAArkD,WAAAqkD,EAAArkD,UAAAnwF,IAAA23c,EAAAn7d,MAAAq0d;AACA1gX,GAAA7S;AACA,IACA0wN,EADA5nD,EAAA,IAAA5sG,EAAAx5I,EAAAkqQ,SAAAjhJ,EAAA94B,GAEAm8E,EAAApU,EAAAv7K,OAAA,GACAqxT,EAAA91I,EAAAv7K,QAAAu7K,EAAAoU,GAAA+9H,MAAAjkD,IAAAluF,EAAAoU,GAAA0hI,EAA0F91I,EAAAl0K,KAAAoiQ,EAC1F,CACA,MAAU5xG,EAAAx0I,KACV6wc,GAEA,EAAOz0d,KAAA87K,MAAAv7K,OAAA,GACP,IAAA66d,EAAAD,EAAA5tc,KAAAuuJ,EAAA3qK,WAAA+vF,EACA,KAEAk6X,CACA,CA1LA;AA2LAA,EAAA99X,MAAA,IAAA89X,EAAAD,EAAA79X,MAAA;AAWA,IAAA8/D,EAAA,WACA,SAAAA,EAAAx5I,EAAAipH,EAAA94B,EAAAkoX,GACAlpV,EAAA/yI,KAAAo9J,GACAp9J,KAAA4jB,MACA5jB,KAAA6sI,OACA7sI,KAAA+zG,YACA/zG,KAAAi8d,cACA,CAUA,OATA/oV,EAAAkqB,EAAA,EACAnkI,IAAA,QACAt2B,MAAA,SAAAglD,GACA,GAAA3nD,KAAA6sI,MAAAllF,EAAAklF,OAAAllF,EAAAosD,UAAA,CACA,IAAA84B,EAAAllF,EAAAklF,KAAAohL,MAAAjuT,KAAA6sI;AACA,GAAAA,EAAA,WAAAuwB,EAAAvwB,EAAAo7Q,SAAAn6H,SAAAjhJ,EAAA7sI,KAAA+zG,UACA,CACA,KAEAqpD,CACA,CAlBA,GAmBAw/T,EAAA1pV,EAAA,SAAA0pV,EAAAv2Y,EAAAw2Y,EAAAC,EAAA3uM,EAAA4uM,GACAhqV,EAAA/yI,KAAA48d,GACA58d,KAAAqmF,OACArmF,KAAA68d,SACA78d,KAAA88d,aACA98d,KAAAmuR,WACAnuR,KAAA+8d,iBACA,GACAjB,EAAA;AA+BA,SAAAkB,EAAA/nF,GAEA,IADA,IAAAhuX,EAAA,GACA3mB,EAAA20Y,EAAA10Y,OAAA,EAAgCD,GAAA,MAAA2mB,EAAA1mB,OAA8BD,IAAA20Y,EAAA30Y,GAAAka,QAAA,SAAA06X,EAAAC,EAAA5nX,EAAAk/B,GAC9D,OAAAxlC,EAAArf,KAAA2lB,EAAAk/B,EACA;AACA,OAAAxlC,CACA,CACA,SAAAg2c,EAAAr3X,EAAAy5E,GACA,IAAAz5E,EAAA;AAEA,IADA,IAAA3+E,EAAA,GACA3mB,EAAA,EAAkBA,EAAAslG,EAAArlG,OAAmBD,GAAA,GACrC,IAAAitB,EAAA8xJ,EAAAz7J,IAAAgiF,EAAAtlG,GAAA,GACAmsD,EAAA4yH,EAAAz7J,IAAAgiF,EAAAtlG,EAAA;AACAitB,GAAAk/B,GAAAxlC,EAAArf,KAAA2lB,EAAAk/B,EACA,CACA,OAAAxlC,CACA,CAcA,IAAAi2c,KACAC,EAAA;AACA,SAAAC,EAAAn7c,GACA,IAAAmoT,EAAAnoT,EAAAmoT;AACA,GAAA+yJ,GAAA/yJ,EAAA,CACA8yJ,KACAC,EAAA/yJ;AACA,QAAA9pU,EAAA,EAAoBA,EAAA8pU,EAAA7pU,OAAoBD,IAAA,GAAA8pU,EAAA9pU,GAAAypW,KAAAszH,qBAAA,CACxCH;AACA,KACA,CACA,CACA,OAAAA,CACA,CAIA,IAAAI,EAAA,IAAAvK,EAAAlhF,UAAA,WACA0rF,EAAA,IAAAxK,EAAAlhF,UAAA;AA+BA,SAAA2rF,EAAAvtE,EAAA/lY,GACA,gBAAAjI,EAAA6jQ,GACA,IAAA23M,EAAAH,EAAA/7E,SAAAt/X;AACA,IAAAw7c,GAAA,IAAAxtE,EAAAwtE,EAAAZ,OAAAY,EAAAp3Y,MAAAg1Y,WAAA;AACA,GAAAv1M,EAAA,CACA,IAAA7mO,EAnEA,SAAA4wW,EAAA5tY,EAAAguY,GACA,IAAAqrE,EAAA8B,EAAAn7c,GACA05c,EAAA2B,EAAAhxc,IAAArK,GAAA8nV,KAAAvyU,OACAm6H,GAAAs+P,EAAAJ,EAAAgtE,OAAAhtE,EAAAxpU,MAAAq3Y,SAAAz7c,EAAAq5c;AACA,IAAA3pU,EAAA;AACA,IAAA59C,EAAA49C,EAAA59C,UAAA/+B,QAAA28E,EAAA3rI,UAAA2E,KACA3W,GAAAi8Y,EAAAJ,EAAAxpU,KAAAwpU,EAAAgtE,QAAAc,aAAAhsU,EAAA3rI,UAAA/D,EAAA8xF,UAAA6pX,cAAAjC,EAAAL,GACAuC,EAAA,IAAAjB,EAAA3sE,EAAAj8Y,EAAA29I,EAAA6iC,UAAAy7N,EAAAt+P,EAAA6iC,UAAAxgL,EAAA;AACA,OAAA29I,EAAA3rI,UAAAsvX,aAAAvhS,GAAAs3R,QAAAiyF,EAAA,CACArtE,OACA6tE,aAAAD,GAEA,CAZA,CAmEAJ,EAAAx7c,EAAAguY;AACAhxW,GAAA6mO,EAAA57P,EAAA+0B,EAAAs7V,iBAAAt7V,EACA,CACA,QACA,CACA,CACA,IAAA+wW,EAAAwtE,MAAA,GACAvtE,EAAAutE,MAAA,GACAO,EAAAP,MAAA,GACAQ,EAAAR,MAAA;AAYAnkb,EAAA4kb,aA7DA,SAAAh/a,GACA,OAAAA,EAAAosV,QAAAkyF,KACA,EA4DAlkb,EAAAw2W,QAzDA,WACA,IAAAr4X,EAAA5kB,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AAKA,OAJA4kB,EAAA,CACAo/W,MAAAp/W,EAAAo/W,OAAA,IACAmZ,cAAAv4X,EAAAu4X,eAAA,KAEA,IAAAgjE,EAAAxnF,OAAA,CACAtyW,IAAAqkc,EACAr7c,MAAA,CACA8wD,KAAA,WACA,WAAA6pZ,EAAAxB,EAAA99X,MAAA89X,EAAA99X,MAAA,UACA,EACA3qF,MAAA,SAAAssC,EAAAw+a,EAAAx7c,GACA,OA5FA,SAAA4tY,EAAA5tY,EAAAg9B,EAAAj9C,GACA,IACAk8d,EADAC,EAAAl/a,EAAAmmV,QAAAk4F;AAEA,GAAAa,EAAA,OAAAA,EAAAL;AACA7+a,EAAAmmV,QAAAm4F,KAAA1tE,EAAA,IAAA+sE,EAAA/sE,EAAAxpU,KAAAwpU,EAAAgtE,OAAA;AACA,IAAAtlN,EAAAt4N,EAAAmmV,QAAA;AACA,MAAAnmV,EAAAhqC,MAAA1U,OACA,OAAAsvZ;AACI,GAAAt4I,KAAA6tH,QAAAk4F,GACJ,OAAA/lN,EAAA6tH,QAAAk4F,GAAArtE,KAAA,IAAA2sE,EAAA/sE,EAAAxpU,KAAAs3Y,aAAA1+a,OAAAxtB,EAAAzvB,EAAAo7d,EAAAn7c,IAAA4tY,EAAAgtE,OAAAG,EAAA/9a,EAAAogI,QAAA41N,MAAA4a,EAAA1hI,SAAA0hI,EAAAktE,iBAAuO,IAAAH,EAAA/sE,EAAAxpU,KAAAwpU,EAAAgtE,OAAAc,aAAA1+a,OAAAxtB,EAAAzvB,EAAAo7d,EAAAn7c,IAAA,KAAA4tY,EAAA1hI,SAAA0hI,EAAAktE;AACnO,QAAA99a,EAAAmmV,QAAA,iBAAA7tH,UAAA6tH,QAAA,gBAKA,OAAA84F,EAAAj/a,EAAAmmV,QAAA,YACJ,IAAAw3F,EAAA/sE,EAAAxpU,KAAA63Y,QAAAj/a,EAAAi/a,GAAAruE,EAAAgtE,OAAAqB,QAAAj/a,EAAAi/a,GAAAjB,EAAAptE,EAAAitE,WAAA79a,EAAAogI,SAAAwwO,EAAA1hI,SAAA0hI,EAAAktE,iBAEA,IAAAH,EAAA/sE,EAAAxpU,KAAA+3Y,QAAAn/a,EAAAogI,QAAA41N,MAAA4a,EAAAgtE,OAAAuB,QAAAn/a,EAAAogI,QAAA41N,MAAAgoF,EAAAptE,EAAAitE,WAAA79a,EAAAogI,SAAAwwO,EAAA1hI,SAAA0hI,EAAAktE;AAPA,IAAAsB,EAAAp/a,EAAAmmV,QAAA,eACAk5F,EAAA,GAAAzuE,EAAA1hI,WAAA5W,GAAAs4I,EAAAktE,iBAAAsB,IAAAxuE,EAAA1hI,UAAAlvO,EAAAz2C,MAAA,GAAAxG,EAAA+tZ,gBASA,SAAA/pY,EAAA82c,GACA,IAAAA,EAAA;AACA,IAAA92c,EAAA2lX,WAAA;AACA,IAAA4yF;AAIA,OAHAv4c,EAAAq5J,QAAA41N,KAAA,GAAAz6X,QAAA,SAAA0E,EAAAC,GACA,QAAA7e,EAAA,EAAoBA,EAAAw8d,EAAAv8d,OAAuBD,GAAA,EAAA4e,GAAA49c,EAAAx8d,EAAA,IAAA6e,GAAA29c,EAAAx8d,KAAAi+d,KAC3C,GACAA,CACA,CARA,CATAt/a,EAAA4wW,EAAAitE,aACAA,EAAAvlN,EAAA0lN,EAAAptE,EAAAitE,WAAA79a,EAAAogI,SAAA29S,EAAA/9a,EAAAogI,QAAA41N;AACA,WAAA2nF,EAAA/sE,EAAAxpU,KAAAs3Y,aAAA1+a,EAAAq/a,EAAAr8c,EAAA8xF,UAAA6pX,mBAAAnsc,EAAAzvB,EAAAo7d,EAAAn7c,IAAAm5c,EAAA99X,MAAAw/X,EAAA79a,EAAAz2C,KAAA61d,GAAAxuE,EAAAktE,gBAMA,CApBA,CA4FAU,EAAAx7c,EAAAg9B,EAAAznB,EACA,GAEAA,SACA8yB,MAAA,CACAuhV,gBAAA,CACAkvF,YAAA,SAAA1jZ,EAAAh3E,GACA,IAAAuuS,EAAAvuS,EAAAuuS,UACAu2F,EAAA,eAAAv2F,EAAAohH,EAAA,eAAAphH,EAAAqhH,EAAA;AACA,SAAA9qB,IAAA9tT,EAAAi1P,YACAjsU,EAAAiO,iBACA62X,EAAA9tT,EAAAp1D,MAAAo1D,EAAAyuM,UACA,KAIA,EA6BAzsO,EAAAmlb,qBALA,SAAAv/a,GACA,aAAAA,EAAAmmV,QAAAk4F,EACA,EAIAjkb,EAAA42W,KAAYA,EACZ52W,EAAAolb,UAXA,SAAAx8c,GACA,IAAAw7c,EAAAH,EAAA/7E,SAAAt/X;AACA,OAAAw7c,IAAAZ,OAAAxB,WAAA,CACA,EASAhib,EAAA2kb,aAAoBA,EACpB3kb,EAAA22W,KAAYA,EACZ32W,EAAAqlb,UAlBA,SAAAz8c,GACA,IAAAw7c,EAAAH,EAAA/7E,SAAAt/X;AACA,OAAAw7c,IAAAp3Y,KAAAg1Y,WAAA,CACA,EAgBAhib,EAAA0kb,aAAoBA;AC3XpB,IAAAY,EAAiBlzY,EAAQ,OACzBsnY,EAAuBtnY,EAAQ,OAC/BmzY,EAAA,oBAAAx7Y,WAAA,qBAAA/9D,KAAA+9D,UAAAllE,UACA2gd,EAAA,oBAAAz7Y,WAAA,MAAA/9D,KAAA+9D,UAAAllE;AACA,SAAA4gd,EAAA12d,GACA,IAGAm0Y,EAAAC,EAAA1oY,EAAA6lS,EAHA7xP,EAAA1/C,EAAA6P,MAAA,UACAgP,EAAA6gC,IAAAvnD,OAAA;AACA,SAAA0mB,MAAA;AAEA,QAAA3mB,EAAA,EAAkBA,EAAAwnD,EAAAvnD,OAAA,EAAsBD,IAAA,CACxC,IAAAi+R,EAAAz2O,EAAAxnD;AACA,qBAAA+kB,KAAAk5Q,GAAAob;KAAiD,eAAAt0R,KAAAk5Q,GAAAg+G;KAA2C,yBAAAl3X,KAAAk5Q,GAAAi+G;KAAsD,iBAAAn3X,KAAAk5Q,GAAAzqR;IAA+C,cAAAuR,KAAAk5Q,GAE3L,UAAA79R,MAAA,+BAAA69R;AADNqgM,EAAAjlL,KAA2B6iG,IACrB,CACN,CAKA,OAJAD,IAAAt1X,EAAA,OAAAA,GACAu1X,IAAAv1X,EAAA,QAAAA,GACA0yR,IAAA1yR,EAAA,QAAAA,GACAnT,IAAAmT,EAAA,SAAAA,GACAA,CACA,CAMA,SAAA8pQ,EAAA3oR,EAAAsB,GACA,IAAAoK,IAAAlB,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,KAAAA,UAAA;AAKA,OAJAlJ,EAAAwjG,SAAA9kG,EAAA,OAAAA,GACAsB,EAAA2lG,UAAAjnG,EAAA,QAAAA,GACAsB,EAAA+lG,UAAArnG,EAAA,QAAAA,GACA0L,GAAApK,EAAA4lG,WAAAlnG,EAAA,SAAAA,GACAA,CACA,CAQA,SAAAqyd,EAAAzqF,GACA,IAAApsX,EArBA,SAAAA,GACA,IAAAi0I,EAAA9vI,OAAAxjB,OAAA;AACA,QAAA2mL,KAAAtnK,EAAAi0I,EAAAinU,EAAA5zS,IAAAtnK,EAAAsnK;AACA,OAAArzB,CACA,CAJA,CAqBAm4O;AACA,gBAAA34T,EAAA3tE,GACA,IACAq1d,EADA32d,EAAAu2d,EAAA9yY,QAAAniF,GAEAs1d,EAAAp7c,EAAAmtQ,EAAA3oR,EAAAsB;AACA,GAAAs1d,KAAA3nZ,EAAAp1D,MAAAo1D,EAAAyuM,SAAAzuM,GAAA;AACA,MAAAjvE,EAAA7H,QAAA,KAAA6H,EAAA,CACA,GAAAsB,EAAA4lG,SAAA,CACA,IAAA96E,EAAA5Q,EAAAmtQ,EAAA3oR,EAAAsB;AACA,GAAA8qB,KAAA6iD,EAAAp1D,MAAAo1D,EAAAyuM,SAAAzuM,GAAA,QACA,CACA,IAAA3tE,EAAAwjG,QAAAxjG,EAAA+lG,SAAA/lG,EAAA2lG,YAAAwvX,GAAAn1d,EAAA2lG,SAAA3lG,EAAAwjG,UAAA6xX,EAAAJ,EAAAhvM,KAAAjmR,EAAAkF,WAAAmwd,GAAA32d,EAAA,CACA,IAAA62d,EAAAr7c,EAAAmtQ,EAAAguM,EAAAr1d;AACA,GAAAu1d,KAAA5nZ,EAAAp1D,MAAAo1D,EAAAyuM,SAAAzuM,GAAA,QACA,CACA,CACA,QACA,CACA,CACAh+B,EAAAohb,eAAsBA,EACtBphb,EAAA8qV,OA5BA,SAAA6L,GACA,WAAA+iF,EAAAxnF,OAAA,CACAjhV,MAAA,CACA4hI,cAAAuuS,EAAAzqF,KAGA,SAAA3vY,EAAAvB,EAAA0B,GAAA;ACtCA,SAAAsxI,EAAA0vK,EAAAxqR,IAAuC,MAAAA,KAAAwqR,EAAAjhT,UAAAy2B,EAAAwqR,EAAAjhT;AAAuD,QAAAD,EAAA,EAAA4+d,EAAA,IAAArrd,MAAAmjB,GAAuC12B,EAAA02B,EAAS12B,IAAA4+d,EAAA5+d,GAAAkhT,EAAAlhT;AAAuB,OAAA4+d,CAAA,CACrK,SAAA5lX,IAAoY,OAA7TA,EAArD,oBAAAo5B,iBAAApmH,IAAqDomH,QAAApmH,IAAA7pB,OAAoC,SAAA+G,EAAAkkI,EAAAm9U,GAAmD,IAAAl7L,EAC9J,SAAAtoO,EAAAqmF,GAA4C,MAAA3lH,OAAA9iB,UAAA4N,eAAAjI,KAAAy8C,EAAAqmF,IAAoG,QAAlCrmF,EAAAmrF,EAAAnrF,MAAgE,OAAAA,CAAA,CAA9K,CAD8J79C,EAAAkkI;AAA6C,GAAAiiJ,EAAA,CAAmB,IAAAjlF,EAAA3iL,OAAA2zE,yBAAAi0L,EAAAjiJ;AAA4D,OAAAg9D,EAAAp+K,IAAgBo+K,EAAAp+K,IAAA1hB,KAAAgI,UAAArS,OAAA,EAAAiJ,EAAAqhd,GAAkEngR,EAAA/nM,KAAjK,CAAiK,EAAwB22G,EAAA3mG,MAAA3S,KAAA4S,UAAA,CAEpY,SAAA2/H,EAAAqnV,EAAAC,GAA2C,sBAAAA,GAAA,OAAAA,EAA+D,UAAAhxa,UAAA;AAA6E+wa,EAAA30d,UAAA8iB,OAAAxjB,OAAAs1d,KAAA50d,UAAA,CAAyEq2E,YAAA,CAAe34E,MAAAi3d,EAAAv+Y,YAAAhyB,mBAA0DthC,OAAAmhC,eAAA0wa,EAAA,aAA+Cv+Y,cAAoBw+Y,GAAAxnV,EAAAunV,EAAAC,EAAA,CAC5Y,SAAAjnV,EAAAknV,GAAiC,IAAAC,EAAAtnV;AAA6D,kBAAyC,IAAAxrH,EAAA6lE,EAAA0lD,EAAAsnV;AAA8C,GAAAC,EAAA,CAAiC,IAAAC,EAAAxnV,EAAAxyI,MAAAs7E;AAAmDr0D,EAAAyrH,QAAAC,UAAA7lD,EAAAl6E,UAAAond,EAAA,MAAkE/yc,EAAA6lE,EAAAn6E,MAAA3S,KAAA4S;AAAyC,OACpX,SAAA2nJ,EAAA3vJ,GAAkD,GAAAA,IAAA,WAAAo/H,EAAAp/H,IAAA,mBAAAA,GAA0E,OAAAA;AAAe,YAAAA,EAA4B,UAAAi+C,UAAA;AAAmF,OAC1P,SAAA0xG,GAAwC,YAAAA,EAAuB,UAAAnoB,eAAA;AAAyF,OAAAmoB,CAAA,CAAxJ,CAD0PA,EAAA,CAA1P,CADoXv6J,KAAAinB,EAAA,EAGpX,SAAAk4c,EAAAt/d,GAAmC,IAAAuva,EAAA,mBAAA/3Y,IAAA,IAAAA,SAAA5F;AAAmrB,OAAnnB0tc,EAAA,SAAAt/d,GAAsD,UAAAA,IAGzJ,SAAAywB,GAAiC,IAAM,WAAAiuI,SAAAluJ,SAAAzF,KAAA0lB,GAAAzmB,QAAA,iBAAqE,MAAAxJ,GAAY,yBAAAiwB,CAAA,EAAxH,CAHyJzwB,GAAA,OAAAA;AAA+D,sBAAAA,EAAmC,UAAAgpD,UAAA;AAA6E,YAAAumX,EAAA,CAAqC,GAAAA,EAAAx+Y,IAAA/wB,GAAA,OAAAuva,EAAA9iZ,IAAAzsB;AAAiDuva,EAAAviZ,IAAAhtB,EAAAu/d,EAAA,CAA8B,SAAAA,IAAqB,OAAAC,EAAAx/d,EAAA+S,UAAA4/H,EAAAxyI,MAAAs7E,YAAA,CAA0N,OAAhJ8jZ,EAAAn6d,UAAA8iB,OAAAxjB,OAAA1E,EAAAoF,UAAA,CAAqDq2E,YAAA,CAAe34E,MAAAy8d,EAAAh2a,cAAAiyB,YAAAhyB,mBAA4EgpF,EAAA+sV,EAAAv/d,EAAA,EAA2Cs/d,EAAAt/d,EAAA,CACttB,SAAAw/d,EAAAC,EAAA5mc,EAAA74B,GAA8X,OAAhTw/d,EAAnC5sV,IAAmCC,QAAAC,UAAAlwI,OAAgD,SAAA68d,EAAA5mc,EAAA74B,GAAwD,IAAAiB,EAAA;AAAgBA,EAAA8G,KAAA+K,MAAA7R,EAAA43B;AAAuB,IAAkDu7C,EAAA,IAAlDsqF,SAAA97J,KAAAkQ,MAAA2sd,EAAAx+d;AAA2I,OAAvDjB,GAAAwyI,EAAAp+D,EAAAp0E,EAAAoF,WAAuDgvE,CAAA,EAAsBorZ,EAAA1sd,MAAA,KAAAC,UAAA,CAC9X,SAAA6/H,IAAuC,uBAAAC,kBAAAC,UAAA;AAAwE,GAAAD,QAAAC,UAAAs0I,KAAA;AAA0C,sBAAA78E,MAAA;AAA8C,IAAsF,OAAhF3oJ,QAAAx8C,UAAA0rI,QAAA/lI,KAAA8nI,QAAAC,UAAAlxF,QAAA,oBAAgF,CAAe,MAAAphD,GAAY,UAExT,SAAAgyI,EAAAzxI,EAAAiE,GAAyK,OAAxIwtI,EAAAtqH,OAAAuqH,eAAAvqH,OAAAuqH,eAAA7vI,OAAA,SAAA7B,EAAAiE,GAA2H,OAAjBjE,EAAA+6F,UAAA92F,EAAiBjE,CAAA,EAAayxI,EAAAzxI,EAAAiE,EAAA,CACzK,SAAA2tI,EAAA5xI,GAAwL,OAA1J4xI,EAAAzqH,OAAAuqH,eAAAvqH,OAAAC,eAAAvlB,OAAA,SAAA7B,GAAuG,OAAAA,EAAA+6F,WAAA5zE,OAAAC,eAAApnB,EAAA,EAAmD4xI,EAAA5xI,EAAA,CACxL,SAAAopI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAC/S,SAAAmyI,EAAA9+D,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAC5F,SAAAoqF,EAAAzpI,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EAC/P,SAAA+oF,EAAAilV,EAAAE,EAAAkB,GAAwQ,OAA1MlB,GAAAplV,EAAAklV,EAAAlzd,UAAAozd,GAAsEkB,GAAAtmV,EAAAklV,EAAAoB,GAA8Dxxc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cAAoB88Y,CAAA,CACxQ,SAAAJ,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAEtE,IAAAg2b,EAAiBxjY,EAAQ;AACzB,SAAA8zY,EAAAz+d,EAAAma,EAAAq/B,GACA,QAAAh6C,EAAA,GAAmBA,IAAA,CACnB,GAAAA,GAAAQ,EAAA6xY,YAAAryY,GAAA2a,EAAA03X,WAAA,OAAA7xY,EAAA6xY,YAAA13X,EAAA03X,WAAA,KAAAr4V;AACA,IAAAklb,EAAA1+d,EAAAgmK,MAAAxmK,GACAm/d,EAAAxkd,EAAA6rJ,MAAAxmK;AACA,GAAAk/d,GAAAC,EAAA,CAIA,IAAAD,EAAAE,WAAAD,GAAA,OAAAnlb;AACA,GAAAklb,EAAA70F,QAAA60F,EAAAn8d,MAAAo8d,EAAAp8d,KAAA,CAIA,IAHA,IAAAs8d,EAAAH,EAAAn8d,KACAu8d,EAAAH,EAAAp8d,KACAsiF,EAAA,EACag6Y,EAAAh6Y,IAAAi6Y,EAAAj6Y,GAAgBA,IAAArrC;AAE7B,OADAqrC,KAAAg6Y,EAAAp/d,QAAAolF,EAAAi6Y,EAAAr/d,QAAAs/d,EAAAF,EAAA3tb,WAAA2zC,EAAA,KAAAm6Y,EAAAH,EAAA3tb,WAAA2zC,KAAArrC,IACAA,CACA,CACA,GAAAklb,EAAA/9Y,QAAApjE,MAAAohd,EAAAh+Y,QAAApjE,KAAA,CACA,IAAAg8Q,EAAAklM,EAAAC,EAAA/9Y,QAAAg+Y,EAAAh+Y,QAAAnnC,EAAA;AACA,SAAA+/O,EAAA,OAAAA,CACA,CACA//O,GAAAklb,EAAA9sF,QAdA,MAFAp4V,GAAAklb,EAAA9sF,QAiBA,CACA,CACA,SAAAqtF,EAAAj/d,EAAAma,EAAA+kd,EAAAC,GACA,QAAAC,EAAAp/d,EAAA6xY,WAAAwtF,EAAAlld,EAAA03X,aAAiD,CACjD,MAAAutF,GAAA,GAAAC,EAAA,OAAAD,GAAAC,EAAA,MACAr/d,EAAAk/d,EACA/kd,EAAAgld;AAEA,IAAAT,EAAA1+d,EAAAgmK,QAAAo5T,GACAT,EAAAxkd,EAAA6rJ,QAAAq5T,GACA9hd,EAAAmhd,EAAA9sF;AACA,GAAA8sF,GAAAC,EAAA,CAKA,IAAAD,EAAAE,WAAAD,GAAA,OACA3+d,EAAAk/d,EACA/kd,EAAAgld;AAEA,GAAAT,EAAA70F,QAAA60F,EAAAn8d,MAAAo8d,EAAAp8d,KAAA,CAKA,IAJA,IAAAs8d,EAAAH,EAAAn8d,KACAu8d,EAAAH,EAAAp8d,KACA+8d,EAAAT,EAAAp/d,OACA8/d,EAAAT,EAAAr/d,OACA6/d,EAAA,GAAAC,EAAA,GAAAV,EAAAS,EAAA,IAAAR,EAAAS,EAAA,IACAD,IACAC,IACAL,IACAC;AAMA,OAJAG,GAAAC,GAAAD,EAAAT,EAAAp/d,QAAAs/d,EAAAF,EAAA3tb,WAAAoub,EAAA,KAAAN,EAAAH,EAAA3tb,WAAAoub,MACAJ,IACAC,KAEA,CACAn/d,EAAAk/d,EACA/kd,EAAAgld,EAEA,CACA,GAAAT,EAAA/9Y,QAAApjE,MAAAohd,EAAAh+Y,QAAApjE,KAAA,CACA,IAAAg8Q,EAAA0lM,EAAAP,EAAA/9Y,QAAAg+Y,EAAAh+Y,QAAAu+Y,EAAA,EAAAC,EAAA;AACA,GAAA5lM,EAAA,OAAAA,CACA,CACA2lM,GAAA3hd,EACA4hd,GAAA5hd,CA9BA,MAHA2hd,GAAA3hd,EACA4hd,GAAA5hd,CAiCA,CACA,CACA,SAAAyhd,EAAAnrb,GACA,OAAAA,GAAA,OAAAA,EAAA,KACA,CACA,SAAAkrb,EAAAlrb,GACA,OAAAA,GAAA,OAAAA,EAAA,KACA,CACA,IAAAqpQ,EAAA,WACA,SAAAA,EAAAv8N,EAAApjE,GAIA,GAHA00H,EAAA/yI,KAAAg+S,GACAh+S,KAAAyhF,UACAzhF,KAAAqe,QAAA,EACA,MAAAA,EAAA,QAAA/d,EAAA,EAAsCA,EAAAmhF,EAAAlhF,OAAoBD,IAAAN,KAAAqe,MAAAojE,EAAAnhF,GAAAoyY,QAC1D,CA+NA,OA9NAx/P,EAAA8qK,EAAA,EACA/kR,IAAA,eACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAAvgD,GAGA,IAFA,IAAAo0d,EAAA1td,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAkV,EAAAlV,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACAnxB,EAAA,EAAAg6C,EAAA,EAA+BA,EAAAmS,EAAUnsD,IAAA,CACzC,IAAAwmK,EAAA9mK,KAAAyhF,QAAAnhF,GACA6e,EAAAm7B,EAAAwsH,EAAA4rO;AACA,GAAAvzX,EAAAoO,QAAArhB,EAAA46J,EAAAw5T,EAAAhmb,EAAAxyB,GAAA,KAAAxnB,IAAAwmK,EAAArlF,QAAApjE,KAAA,CACA,IAAAa,EAAAo7B,EAAA;AACAwsH,EAAA2jO,aAAA1nY,KAAA+b,IAAA,EAAAyO,EAAArO,GAAAnc,KAAA8b,IAAAioJ,EAAArlF,QAAApjE,KAAAouC,EAAAvtC,GAAAhT,EAAAo0d,EAAAphd,EACA,CACAo7B,EAAAn7B,CACA,CACA,GACG,CACH8Z,IAAA,cACAt2B,MAAA,SAAAuJ,GACAlM,KAAAyqY,aAAA,EAAAzqY,KAAAqe,KAAAnS,EACA,GACG,CACH+sB,IAAA,cACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA+kV,EAAA+uF,GACA,IAAAl9d,EAAA,GACA0uC;AAQA,OAPA/xC,KAAAyqY,aAAAl9W,EAAAk/B,EAAA,SAAAvoC,EAAAo2B,GACA,IAAAkmb,EAAAt8c,EAAAymX,OAAAzmX,EAAA7gB,KAAAjD,MAAA2C,KAAA+b,IAAAyO,EAAA+sB,KAAAmS,EAAAnS,GAAAp2B,EAAA+zX,OAAAsoF,EAAA,mBAAAA,IAAAr8c,GAAAq8c,EAAAr8c,EAAApgB,KAAAimW,KAAAw2H,SAAAr8c,EAAApgB,KAAAimW,KAAAw2H,SAAAr8c,GAAA;AACAA,EAAAmlJ,UAAAnlJ,EAAA+zX,QAAAuoF,GAAAt8c,EAAAupX,cAAA+D,IACAz/V,OAAmC1uC,GAAAmuY,GAEnCnuY,GAAAm9d,CACA,EAAO,GACPn9d,CACA,GACG,CACH41B,IAAA,SACAt2B,MAAA,SAAAglD,GACA,IAAAA,EAAAtpC,KAAA,OAAAre;AACA,IAAAA,KAAAqe,KAAA,OAAAspC;AACA,IAAAuoI,EAAAlwL,KAAA4gR,UACA7uO,EAAA4V,EAAAlhD,WACAg7E,EAAAzhF,KAAAyhF,QAAArhF,QACAE,EAAA;AAKA,IAJA4vL,EAAAy6M,QAAAz6M,EAAAwvS,WAAA3tb,KACA0vC,IAAAlhF,OAAA,GAAA2vL,EAAAuwS,SAAAvwS,EAAA7sL,KAAA0uC,EAAA1uC,MACA/C,EAAA,GAEaA,EAAAqnD,EAAA85B,QAAAlhF,OAA0BD,IAAAmhF,EAAA75E,KAAA+/C,EAAA85B,QAAAnhF;AACvC,WAAA09S,EAAAv8N,EAAAzhF,KAAAqe,KAAAspC,EAAAtpC,KACA,GACG,CACH4a,IAAA,MACAt2B,MAAA,SAAA4qB,GACA,IAAAk/B,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAAqe;AACA,MAAAkP,GAAAk/B,GAAAzsD,KAAAqe,KAAA,OAAAre;AACA,IAAAinB,EAAA,GACA5I,EAAA;AACA,GAAAouC,EAAAl/B,EAAA,QAAAjtB,EAAA,EAAAg6C,EAAA,EAA8CA,EAAAmS,EAAUnsD,IAAA,CACxD,IAAAwmK,EAAA9mK,KAAAyhF,QAAAnhF,GACA6e,EAAAm7B,EAAAwsH,EAAA4rO;AACAvzX,EAAAoO,KACA+sB,EAAA/sB,GAAApO,EAAAstC,KACAq6G,IAAA6jO,OAAA7jO,EAAAgzO,IAAA/2Y,KAAA+b,IAAA,EAAAyO,EAAA+sB,GAAAv3C,KAAA8b,IAAAioJ,EAAAzjK,KAAA9C,OAAAksD,EAAAnS,IAAgHwsH,EAAAgzO,IAAA/2Y,KAAA+b,IAAA,EAAAyO,EAAA+sB,EAAA,GAAAv3C,KAAA8b,IAAAioJ,EAAArlF,QAAApjE,KAAAouC,EAAAnS,EAAA,KAEhHrzB,EAAArf,KAAAk/J,GACAzoJ,GAAAyoJ,EAAA4rO,UAEAp4V,EAAAn7B,CACA,CACA,WAAA6+R,EAAA/2R,EAAA5I,EACA,GACG,CACH4a,IAAA,aACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,OAAAl/B,GAAAk/B,EAAAuxP,EAAA1gN,MACA,GAAA/vE,GAAAk/B,GAAAzsD,KAAAyhF,QAAAlhF,OAAAP,KACA,IAAAg+S,EAAAh+S,KAAAyhF,QAAArhF,MAAAmtB,EAAAk/B,GACA,GACG,CACHxzB,IAAA,eACAt2B,MAAA,SAAAoG,EAAAmb,GACA,IAAAuqD,EAAAzuE,KAAAyhF,QAAA14E;AACA,GAAA0lE,GAAAvqD,EAAA,OAAAlkB;AACA,IAAA63J,EAAA73J,KAAAyhF,QAAArhF,QACAie,EAAAre,KAAAqe,KAAA6F,EAAAwuX,SAAAjkU,EAAAikU;AAEA,OADA76O,EAAA9uJ,GAAAmb,EACA,IAAA85R,EAAAnmJ,EAAAx5I,EACA,GACG,CACH4a,IAAA,aACAt2B,MAAA,SAAAuhB,GACA,WAAA85R,EAAA,CAAA95R,GAAAzR,OAAAzS,KAAAyhF,SAAAzhF,KAAAqe,KAAA6F,EAAAwuX,SACA,GACG,CACHz5W,IAAA,WACAt2B,MAAA,SAAAuhB,GACA,WAAA85R,EAAAh+S,KAAAyhF,QAAAhvE,OAAAyR,GAAAlkB,KAAAqe,KAAA6F,EAAAwuX,SACA,GACG,CACHz5W,IAAA,KACAt2B,MAAA,SAAAglD,GACA,GAAA3nD,KAAAyhF,QAAAlhF,QAAAonD,EAAA85B,QAAAlhF,OAAA;AACA,QAAAD,EAAA,EAAsBA,EAAAN,KAAAyhF,QAAAlhF,OAAyBD,IAAA,IAAAN,KAAAyhF,QAAAnhF,GAAAyzP,GAAApsM,EAAA85B,QAAAnhF,IAAA;AAC/C,QACA,GACG,CACH24B,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAAlhF,OAAAP,KAAAyhF,QAAA,OACA,GACG,CACHxoD,IAAA,YACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAAlhF,OAAAP,KAAAyhF,QAAAzhF,KAAAyhF,QAAAlhF,OAAA,OACA,GACG,CACH04B,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAAlhF,MACA,GACG,CACH04B,IAAA,QACAt2B,MAAA,SAAAoG,GACA,IAAAmxN,EAAAl6N,KAAAyhF,QAAA14E;AACA,IAAAmxN,EAAA,UAAAl9L,WAAA,SAAAj0B,EAAA,qBAAA/I;AACA,OAAAk6N,CACA,GACG,CACHjhM,IAAA,aACAt2B,MAAA,SAAAoG,GACA,OAAA/I,KAAAyhF,QAAA14E,IAAA,IACA,GACG,CACHkwB,IAAA,UACAt2B,MAAA,SAAAuJ,GACA,QAAA5L,EAAA,EAAAuE,EAAA,EAA6BvE,EAAAN,KAAAyhF,QAAAlhF,OAAyBD,IAAA,CACtD,IAAAwmK,EAAA9mK,KAAAyhF,QAAAnhF;AACA4L,EAAA46J,EAAAjiK,EAAAvE,GACAuE,GAAAiiK,EAAA4rO,QACA,CACA,GACG,CACHz5W,IAAA,gBACAt2B,MAAA,SAAAglD,GAEA,OAAA43a,EAAAv/d,KAAA2nD,EADA/0C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KAEA,GACG,CACHqmB,IAAA,cACAt2B,MAAA,SAAAglD,GAGA,OAAAo4a,EAAA//d,KAAA2nD,EAFA/0C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAAqe,KACAzL,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA+0C,EAAAtpC,KAEA,GACG,CACH4a,IAAA,YACAt2B,MAAA,SAAA23C,GACA,MAAAA,EAAA,OAAAomb,EAAA,EAAApmb;AACA,GAAAA,GAAAt6C,KAAAqe,KAAA,OAAAqid,EAAA1ge,KAAAyhF,QAAAlhF,OAAA+5C;AACA,GAAAA,EAAAt6C,KAAAqe,MAAAi8B,EAAA,YAAAtd,WAAA,YAAAvqB,OAAA6nC,EAAA,0BAAA7nC,OAAAzS,KAAA;AACA,QAAAM,EAAA,EAAAqge,EAAA,GAAmCrge,IAAA,CACnC,IACA6e,EAAAwhd,EADA3ge,KAAA8mK,MAAAxmK,GACAoyY;AACA,GAAAvzX,GAAAm7B,EACA,OAAAn7B,GAAAm7B,EAAAomb,EAAApge,EAAA,EAAA6e,GACAuhd,EAAApge,EAAAqge;AAEAA,EAAAxhd,CACA,CACA,GACG,CACH8Z,IAAA,WACAt2B,MAAA,WACA,UAAA3C,KAAA4ge,gBAAA,GACA,GACG,CACH3nc,IAAA,gBACAt2B,MAAA,WACA,OAAA3C,KAAAyhF,QAAA3pE,KAAA,KACA,GACG,CACHmhB,IAAA,SACAt2B,MAAA,WACA,OAAA3C,KAAAyhF,QAAAlhF,OAAAP,KAAAyhF,QAAA79D,IAAA,SAAApjB,GACA,OAAAA,EAAA2pK,QACA,GAAO,IACP,IACG,EACHlxI,IAAA,WACAt2B,MAAA,SAAAslH,EAAAtlH,GACA,IAAAA,EAAA,OAAAq7S,EAAA1gN;AACA,IAAAzpF,MAAA1T,QAAAwC,GAAA,UAAAq6B,WAAA;AACA,OAAAghR,EAAAk2F,UAAAvxY,EAAAihB,IAAAqkG,EAAAksR,cACA,GACG,CACHl7W,IAAA,YACAt2B,MAAA,SAAAm3I,GACA,IAAAA,EAAAv5I,OAAA,OAAAy9S,EAAA1gN;AAGA,IAFA,IAAAujY,EACAxid,EAAA,EACA/d,EAAA,EAAsBA,EAAAw5I,EAAAv5I,OAAkBD,IAAA,CACxC,IAAA4jB,EAAA41H,EAAAx5I;AACA+d,GAAA6F,EAAAwuX,SACApyY,GAAA4jB,EAAAymX,QAAA7wP,EAAAx5I,EAAA,GAAAo/d,WAAAx7c,IACA28c,MAAA/mV,EAAA15I,MAAA,EAAAE,IACAuge,IAAAtge,OAAA,GAAA2jB,EAAAu8c,SAAAI,IAAAtge,OAAA,GAAA8C,KAAA6gB,EAAA7gB,OACUw9d,GACVA,EAAAj5d,KAAAsc,EAEA,CACA,WAAA85R,EAAA6iL,GAAA/mV,EAAAz7H,EACA,GACG,CACH4a,IAAA,OACAt2B,MAAA,SAAAw9M,GACA,IAAAA,EAAA,OAAA69F,EAAA1gN;AACA,GAAA6iH,aAAA69F,EAAA,OAAA79F;AACA,GAAAtsM,MAAA1T,QAAAggN,GAAA,OAAAngN,KAAAk0Y,UAAA/zL;AACA,GAAAA,EAAArmI,MAAA,WAAAkkO,EAAA,CAAA79F,KAAAuyL;AACA,UAAA11W,WAAA,mBAAAmjL,EAAA,kBAAAA,EAAAsqL,aAAA,uEACA,KAEAzsF,CACA,CAtOA;AAuOAA,EAAA1gN,MAAA,IAAA0gN,EAAA;AACA,IAAA9jF,EAAA,CACAnxN,MAAA,EACAiV,OAAA;AAEA,SAAA0id,EAAA33d,EAAAiV,GAGA,OAFAk8M,EAAAnxN,QACAmxN,EAAAl8M,SACAk8M,CACA,CACA,SAAA4mQ,EAAAhge,EAAAma,GACA,GAAAna,IAAAma,EAAA;AACA,IAAAna,GAAA,UAAAkpI,EAAAlpI,KAAAma,GAAA,UAAA+uH,EAAA/uH,GAAA;AACA,IAAA6+H,EAAAjmI,MAAA1T,QAAAW;AACA,GAAA+S,MAAA1T,QAAA8a,IAAA6+H,EAAA;AACA,GAAAA,EAAA,CACA,GAAAh5I,EAAAP,QAAA0a,EAAA1a,OAAA;AACA,QAAAD,EAAA,EAAoBA,EAAAQ,EAAAP,OAAcD,IAAA,IAAAwge,EAAAhge,EAAAR,GAAA2a,EAAA3a,IAAA,QAClC,KAAI,CACJ,QAAAuE,KAAA/D,EAAA,KAAA+D,KAAAoW,KAAA6ld,EAAAhge,EAAA+D,GAAAoW,EAAApW,IAAA;AACA,QAAAw5L,KAAApjL,EAAA,KAAAojL,KAAAv9L,GAAA,QACA,CACA,QACA,CACA,IAAAorY,EAAA,WACA,SAAAA,EAAApoY,EAAAg2E,GACAi5D,EAAA/yI,KAAAksY,GACAlsY,KAAA8D,OACA9D,KAAA85E,OACA,CAqFA,OApFAo5D,EAAAg5P,EAAA,EACAjzW,IAAA,WACAt2B,MAAA,SAAAkqB,GAGA,IAFA,IAAAgrI,EACAmnR,KACA1+a,EAAA,EAAsBA,EAAAusB,EAAAtsB,OAAgBD,IAAA,CACtC,IAAAqnD,EAAA96B,EAAAvsB;AACA,GAAAN,KAAA+zP,GAAApsM,GAAA,OAAA96B;AACA,GAAA7sB,KAAA8D,KAAAylY,SAAA5hV,EAAA7jD,MACA+zJ,MAAAhrI,EAAAzsB,MAAA,EAAAE;IACU,IAAAqnD,EAAA7jD,KAAAylY,SAAAvpY,KAAA8D,MACV,OAAA+oB;CAEAmyZ,GAAAr3X,EAAA7jD,KAAAi9d,KAAA/ge,KAAA8D,KAAAi9d,OACAlpU,MAAAhrI,EAAAzsB,MAAA,EAAAE,IACAu3J,EAAAjwJ,KAAA5H,MACAg/a,MAEAnnR,KAAAjwJ,KAAA+/C,EACA,CACA,CAGA,OAFAkwG,MAAAhrI,EAAAzsB,SACA4+a,GAAAnnR,EAAAjwJ,KAAA5H,MACA63J,CACA,GACG,CACH5+H,IAAA,gBACAt2B,MAAA,SAAAkqB,GACA,QAAAvsB,EAAA,EAAsBA,EAAAusB,EAAAtsB,OAAgBD,IAAA,GAAAN,KAAA+zP,GAAAlnO,EAAAvsB,IAAA,OAAAusB,EAAAzsB,MAAA,EAAAE,GAAAmS,OAAAoa,EAAAzsB,MAAAE,EAAA;AACtC,OAAAusB,CACA,GACG,CACHoM,IAAA,UACAt2B,MAAA,SAAAkqB,GACA,QAAAvsB,EAAA,EAAsBA,EAAAusB,EAAAtsB,OAAgBD,IAAA,GAAAN,KAAA+zP,GAAAlnO,EAAAvsB,IAAA;AACtC,QACA,GACG,CACH24B,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,MAAA2nD,GAAA3nD,KAAA8D,MAAA6jD,EAAA7jD,MAAAg9d,EAAA9ge,KAAA85E,MAAAnyB,EAAAmyB,MACA,GACG,CACH7gD,IAAA,SACAt2B,MAAA,WACA,IAAAkvC,EAAA,CACA/tC,KAAA9D,KAAA8D,KAAAsE;AAEA,QAAAoH,KAAAxP,KAAA85E,MAAA,CACAjoC,EAAAioC,MAAA95E,KAAA85E;AACA,KACA,CACA,OAAAjoC,CACA,IACG,EACH5Y,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,IAAAA,EAAA,UAAAhoR,WAAA;AACA,IAAAl5B,EAAAmkH,EAAAygR,MAAA1jF,EAAAlhT;AACA,IAAAA,EAAA,UAAAk5B,WAAA,yBAAAvqB,OAAAuyS,EAAAlhT,KAAA;AACA,IAAAu6G,EAAAv6G,EAAAS,OAAAygT,EAAAlrO;AAEA,OADAh2E,EAAAk9d,WAAA3iX,EAAAvkC,OACAukC,CACA,GACG,CACHplF,IAAA,UACAt2B,MAAA,SAAA7B,EAAAma,GACA,GAAAna,GAAAma,EAAA;AACA,GAAAna,EAAAP,QAAA0a,EAAA1a,OAAA;AACA,QAAAD,EAAA,EAAsBA,EAAAQ,EAAAP,OAAcD,IAAA,IAAAQ,EAAAR,GAAAyzP,GAAA94O,EAAA3a,IAAA;AACpC,QACA,GACG,CACH24B,IAAA,UACAt2B,MAAA,SAAA+lY,GACA,IAAAA,GAAA70X,MAAA1T,QAAAuoY,IAAA,GAAAA,EAAAnoY,OAAA,OAAA2rY,EAAArjS;AACA,GAAA6/R,aAAAwD,EAAA,OAAAxD;AACA,IAAA7wO,EAAA6wO,EAAAtoY;AAIA,OAHAy3J,EAAA1lI,KAAA,SAAArxB,EAAAma,GACA,OAAAna,EAAAgD,KAAAi9d,KAAA9ld,EAAAnX,KAAAi9d,IACA,GACAlpU,CACA,KAEAq0O,CACA,CA3FA;AA4FAA,EAAArjS,KAAA;AACA,IAAAo4X,EAAA,SAAAC,GACA3uV,EAAA0uV,EAAAC;AACA,IAAA76a,EAAAusF,EAAAquV;AACA,SAAAA,IAEA,OADAluV,EAAA/yI,KAAAihe,GACA56a,EAAA1zC,MAAA3S,KAAA4S,UACA,CACA,OAAAsgI,EAAA+tV,EACA,CARA,CAQC9B,EAAAz+d,QACDw/Y,EAAA,WACA,SAAAA,EAAAz+T,EAAA0/Y,EAAAC,GACAruV,EAAA/yI,KAAAkgZ,GACAlgZ,KAAAyhF,UACAzhF,KAAAmhe,YACAnhe,KAAAohe,SACA,CA0DA,OAzDAluV,EAAAgtQ,EAAA,EACAjnX,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAApjE,KAAAre,KAAAmhe,UAAAnhe,KAAAohe,OACA,GACG,CACHnoc,IAAA,WACAt2B,MAAA,SAAA23C,EAAAwvV,GACA,IAAAroT,EAAA4/Y,EAAArhe,KAAAyhF,QAAAnnC,EAAAt6C,KAAAmhe,UAAAr3F,EAAA9pY,KAAAmhe,UAAA,EAAAnhe,KAAAohe,QAAA;AACA,OAAA3/Y,GAAA,IAAAy+T,EAAAz+T,EAAAzhF,KAAAmhe,UAAAnhe,KAAAohe,QACA,GACG,CACHnoc,IAAA,gBACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,WAAAyzV,EAAAohF,EAAAthe,KAAAyhF,QAAAl0D,EAAAvtB,KAAAmhe,UAAA10a,EAAAzsD,KAAAmhe,WAAAnhe,KAAAmhe,UAAAnhe,KAAAohe,QACA,GACG,CACHnoc,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,KAAAyhF,QAAAsyK,GAAApsM,EAAA85B,UAAAzhF,KAAAmhe,WAAAx5a,EAAAw5a,WAAAnhe,KAAAohe,SAAAz5a,EAAAy5a,OACA,GACG,CACHnoc,IAAA,WACAt2B,MAAA,WACA,OAAA3C,KAAAyhF,QAAA,IAAAzhF,KAAAmhe,UAAA,IAAAnhe,KAAAohe,QAAA,GACA,GACG,CACHnoc,IAAA,SACAt2B,MAAA,WACA,IAAA3C,KAAAyhF,QAAApjE,KAAA;AACA,IAAA2mS,EAAA,CACAvjO,QAAAzhF,KAAAyhF,QAAA0oF;AAIA,OAFAnqK,KAAAmhe,UAAA,IAAAn8K,EAAAm8K,UAAAnhe,KAAAmhe,WACAnhe,KAAAohe,QAAA,IAAAp8K,EAAAo8K,QAAAphe,KAAAohe,SACAp8K,CACA,IACG,EACH/rR,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,IAAAA,EAAA,OAAAk7F,EAAA5iT;AACA,IAAA6jY,EAAAn8K,EAAAm8K,WAAA,EACAC,EAAAp8K,EAAAo8K,SAAA;AACA,oBAAAD,GAAA,iBAAAC,EAAA,UAAApkc,WAAA;AACA,WAAAkjX,EAAAliG,EAAA6qG,SAAA5gS,EAAA+8L,EAAAvjO,SAAA0/Y,EAAAC,EACA,GACG,CACHnoc,IAAA,UACAt2B,MAAA,SAAAmnY,GAIA,IAHA,IAAAy3F,IAAA3ud,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,KAAAA,UAAA,GACAuud,EAAA,EACAC,EAAA,EACA5ge,EAAAspY,EAAArjY,WAAwCjG,MAAAy3Y,SAAAspF,IAAA/ge,EAAAsD,KAAAimW,KAAAg/B,WAA6DvoY,IAAAiG,WAAA06d;AACrG,QAAAlvV,EAAA63P,EAAAlpH,UAAwC3uI,MAAAgmQ,SAAAspF,IAAAtvV,EAAAnuI,KAAAimW,KAAAg/B,WAAgE92P,IAAA2uI,UAAAwgN;AACxG,WAAAlhF,EAAApW,EAAAq3F,EAAAC,EACA,KAEAlhF,CACA,CAjEA;AAmEA,SAAAohF,EAAA7/Y,EAAAl0D,EAAAk/B,GACA,IAAA+0a,EAAA//Y,EAAA8hI,UAAAh2L,GACAxkB,EAAAy4d,EAAAz4d,MACAiV,EAAAwjd,EAAAxjd,OACA8oJ,EAAArlF,EAAA20Y,WAAArtd,GACA04d,EAAAhgZ,EAAA8hI,UAAA92J,GACAi1a,EAAAD,EAAA14d,MACA44d,EAAAF,EAAAzjd;AACA,GAAAA,GAAAuP,GAAAu5I,EAAA6jO,OAAA,CACA,GAAAg3F,GAAAl1a,IAAAg1B,EAAAqlF,MAAA46T,GAAA/2F,OAAA,UAAA3tW,WAAA;AACA,OAAAykD,EAAAq4T,IAAA,EAAAvsX,GAAA+jL,OAAA7vH,EAAAq4T,IAAArtV,GACA,CACA,GAAA1jD,GAAA24d,EAAA,UAAA1kc,WAAA;AACA,OAAAykD,EAAAmgZ,aAAA74d,EAAA+9J,EAAAjP,KAAAypU,EAAAx6T,EAAArlF,QAAAl0D,EAAAvP,EAAA,EAAAyuC,EAAAzuC,EAAA,IACA,CACA,SAAAqjd,EAAA5/Y,EAAAogZ,EAAAznF,EAAA+mF,EAAAC,EAAAt5c,GACA,IAAAg6c,EAAArgZ,EAAA8hI,UAAAs+Q,GACA94d,EAAA+4d,EAAA/4d,MACAiV,EAAA8jd,EAAA9jd,OACA8oJ,EAAArlF,EAAA20Y,WAAArtd;AACA,GAAAiV,GAAA6jd,GAAA/6T,EAAA6jO,OACA,OAAA7iX,GAAAq5c,GAAA,GAAAC,GAAA,IAAAt5c,EAAAitc,WAAAhsd,IAAAqxY,GAAA,KACA34T,EAAAq4T,IAAA,EAAA+nF,GAAAvwR,OAAA8oM,GAAA9oM,OAAA7vH,EAAAq4T,IAAA+nF;AAEA,IAAAxnM,EAAAgnM,EAAAv6T,EAAArlF,QAAAogZ,EAAA7jd,EAAA,EAAAo8X,EAAA,GAAArxY,EAAAo4d,EAAA,IAAAp4d,GAAA04E,EAAAkxT,WAAA,EAAAyuF,EAAA,IAAAt6T;AACA,OAAAuzH,GAAA54M,EAAAmgZ,aAAA74d,EAAA+9J,EAAAjP,KAAAwiI,GACA,CACA,SAAA0nM,EAAA33F,EAAA2H,EAAA3xY,GACA,GAAAA,EAAA+ge,UAAA/2F,EAAAwM,MAAA,UAAAqqF,EAAA;AACA,GAAA72F,EAAAwM,MAAAx2Y,EAAA+ge,WAAApvF,EAAA6E,MAAAx2Y,EAAAghe,QAAA,UAAAH,EAAA;AACA,OAAAe,EAAA53F,EAAA2H,EAAA3xY,EAAA,EACA,CACA,SAAA4he,EAAA53F,EAAA2H,EAAA3xY,EAAAw2Y,GACA,IAAA7tY,EAAAqhY,EAAArhY,MAAA6tY,GACA1yX,EAAAkmX,EAAAlmX,KAAA0yX;AACA,GAAA7tY,GAAAgpY,EAAAhpY,MAAA6tY,MAAAxM,EAAAwM,MAAAx2Y,EAAA+ge,UAAA,CACA,IAAA9mM,EAAA2nM,EAAA53F,EAAA2H,EAAA3xY,EAAAw2Y,EAAA;AACA,OAAA1yX,EAAA2zI,KAAA3zI,EAAAu9D,QAAAmgZ,aAAA74d,EAAAsxR,GACA,CAAI,GAAAj6R,EAAAqhF,QAAApjE,KAEA,IAAAje,EAAA+ge,WAAA/ge,EAAAghe,SAAAh3F,EAAAwM,UAAA7E,EAAA6E,SAIA,CACJ,IAAAqrF,EAgEA,SAAA7he,EAAA8he,GAIA,IAHA,IAAApqQ,EAAAoqQ,EAAAtrF,MAAAx2Y,EAAA+ge,UAEAj9c,EADAg+c,EAAAh+c,KAAA4zM,GACAjgE,KAAAz3J,EAAAqhF,SACAnhF,EAAAw3N,EAAA,EAA0Bx3N,GAAA,EAAQA,IAAA4jB,EAAAg+c,EAAAh+c,KAAA5jB,GAAAu3J,KAAAmmJ,EAAAzwR,KAAArJ;AAClC,OACAhF,MAAAgF,EAAAi+c,eAAA/he,EAAA+ge,UAAArpQ,GACA34M,IAAA+E,EAAAi+c,eAAAj+c,EAAAu9D,QAAApjE,KAAAje,EAAAghe,QAAAtpQ,GAEA,CATA,CAhEA13N,EAAAgqY;AAGA,OAAAl9X,EAAAgX,EAAAk+c,EAAAh4F,EAFA63F,EAAA/id,MACA+id,EAAA9id,IACA4yX,EAAA6E,GACA,CARA,IAAA9uX,EAAAsiX,EAAAtiX,OACA25D,EAAA35D,EAAA25D;AACA,OAAAv0E,EAAA4a,EAAA25D,EAAAq4T,IAAA,EAAA1P,EAAAI,cAAAl5L,OAAAlxM,EAAAqhF,SAAA6vH,OAAA7vH,EAAAq4T,IAAA/H,EAAAvH,eAMA,CAVA,OAAAt9X,EAAAgX,EAAAm+c,EAAAj4F,EAAA2H,EAAA6E,GAWA,CACA,SAAA0rF,EAAAC,EAAAj6V,GACA,IAAAA,EAAAxkI,KAAAgxd,kBAAAyN,EAAAz+d,MAAA,UAAAm9d,EAAA,eAAA34V,EAAAxkI,KAAAsE,KAAA,SAAAm6d,EAAAz+d,KAAAsE,KACA,CACA,SAAA6td,EAAAuM,EAAAC,EAAA7rF,GACA,IAAA1yX,EAAAs+c,EAAAt+c,KAAA0yX;AAEA,OADA0rF,EAAAp+c,EAAAu+c,EAAAv+c,KAAA0yX,IACA1yX,CACA,CACA,SAAAk9O,EAAAt6F,EAAAt9J,GACA,IAAA0mL,EAAA1mL,EAAAjJ,OAAA;AACA2vL,GAAA,GAAAppB,EAAA6jO,QAAA7jO,EAAA44T,WAAAl2d,EAAA0mL,IAAA1mL,EAAA0mL,GAAAppB,EAAA25T,SAAAj3d,EAAA0mL,GAAA7sL,KAAAyjK,EAAAzjK,MAAiImG,EAAA5B,KAAAk/J,EACjI,CACA,SAAA5wE,EAAAq1T,EAAAm3E,EAAA9rF,EAAAptY,GACA,IAAA0a,GAAAw+c,GAAAn3E,GAAArnY,KAAA0yX,GACAh8K,EAAA,EACAmtH,EAAA26I,IAAA35d,MAAA6tY,GAAA1yX,EAAAyuX;AACA4Y,IACA3wL,EAAA2wL,EAAAxiZ,MAAA6tY,GACA2U,EAAA3U,QACAh8K,IACM2wL,EAAAyiC,aACN5sL,EAAAmqJ,EAAArgB,UAAA1hY,GACAoxN;AAGA,QAAAt6N,EAAAs6N,EAA2Bt6N,EAAAynV,EAAcznV,IAAA8gQ,EAAAl9O,EAAA4iJ,MAAAxmK,GAAAkJ;AACzCk5d,KAAA9rF,UAAA8rF,EAAA10C,YAAA5sL,EAAAshO,EAAAz3F,WAAAzhY,EACA,CACA,SAAA0D,EAAAgX,EAAAu9D,GACA,IAAAv9D,EAAApgB,KAAA48Y,aAAAj/T,GAAA,UAAAw/Y,EAAA,4BAAA/8c,EAAApgB,KAAAsE;AACA,OAAA8b,EAAA2zI,KAAAp2E,EACA,CACA,SAAA2gZ,EAAAh4F,EAAAmhB,EAAAm3E,EAAA3wF,EAAA6E,GACA,IAAAuqF,EAAA/2F,EAAAwM,SAAAq/E,EAAA7rF,EAAAmhB,EAAA3U,EAAA,GACAwqF,EAAArvF,EAAA6E,SAAAq/E,EAAAyM,EAAA3wF,EAAA6E,EAAA,GACAn1T,EAAA;AAWA,OAVAyU,EAAA,KAAAk0S,EAAAwM,EAAAn1T,GACA0/Y,GAAAC,GAAA71E,EAAAxiZ,MAAA6tY,IAAA8rF,EAAA35d,MAAA6tY,IACA0rF,EAAAnB,EAAAC,GACAhgO,EAAAl0P,EAAAi0d,EAAAiB,EAAAh4F,EAAAmhB,EAAAm3E,EAAA3wF,EAAA6E,EAAA,IAAAn1T,KAEA0/Y,GAAA//N,EAAAl0P,EAAAi0d,EAAAkB,EAAAj4F,EAAAmhB,EAAA3U,EAAA,IAAAn1T,GACAyU,EAAAq1T,EAAAm3E,EAAA9rF,EAAAn1T,GACA2/Y,GAAAhgO,EAAAl0P,EAAAk0d,EAAAiB,EAAAK,EAAA3wF,EAAA6E,EAAA,IAAAn1T,IAEAyU,EAAA67S,EAAA,KAAA6E,EAAAn1T,GACA,IAAAu8N,EAAAv8N,EACA,CACA,SAAA4gZ,EAAAj4F,EAAA2H,EAAA6E,GACA,IAAAn1T,EAAA;AAOA,OANAyU,EAAA,KAAAk0S,EAAAwM,EAAAn1T,GACA2oT,EAAAwM,SAEAx1I,EAAAl0P,EADA+od,EAAA7rF,EAAA2H,EAAA6E,EAAA,GACAyrF,EAAAj4F,EAAA2H,EAAA6E,EAAA,IAAAn1T,GAEAyU,EAAA67S,EAAA,KAAA6E,EAAAn1T,GACA,IAAAu8N,EAAAv8N,EACA,CA7GAy+T,EAAA5iT,MAAA,IAAA4iT,EAAAliG,EAAA1gN,MAAA;AAwHA,IAAAqlY,EAAA,WACA,SAAAA,EAAArob,EAAA61J,EAAAq6L,GACAz3P,EAAA/yI,KAAA2ie,GACA3ie,KAAAs6C,MACAt6C,KAAAmwM,OACAnwM,KAAAwqY,eACAxqY,KAAA42Y,MAAAzmM,EAAA5vM,OAAA,GACA,CAmMA,OAlMA2yI,EAAAyvV,EAAA,EACA1pc,IAAA,eACAt2B,MAAA,SAAAwwC,GACA,aAAAA,EAAAnzC,KAAA42Y,MACAzjW,EAAA,EAAAnzC,KAAA42Y,MAAAzjW,EACAA,CACA,GACG,CACHla,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAkkB,KAAAlkB,KAAA42Y,MACA,GACG,CACH39W,IAAA,MACA3M,IAAA,WACA,OAAAtsB,KAAAkkB,KAAA,EACA,GACG,CACH+U,IAAA,OACAt2B,MAAA,SAAAi0Y,GACA,OAAA52Y,KAAAmwM,KAAA,EAAAnwM,KAAA4ie,aAAAhsF,GACA,GACG,CACH39W,IAAA,QACAt2B,MAAA,SAAAi0Y,GACA,OAAA52Y,KAAAmwM,KAAA,EAAAnwM,KAAA4ie,aAAAhsF,GAAA,EACA,GACG,CACH39W,IAAA,aACAt2B,MAAA,SAAAi0Y,GAEA,OADAA,EAAA52Y,KAAA4ie,aAAAhsF,GACA52Y,KAAA+I,MAAA6tY,OAAA52Y,KAAA42Y,OAAA52Y,KAAAgub,WAAA,IACA,GACG,CACH/0Z,IAAA,QACAt2B,MAAA,SAAAi0Y,GAEA,WADAA,EAAA52Y,KAAA4ie,aAAAhsF,IACA,EAAA52Y,KAAAmwM,KAAA,EAAAymM,EAAA,IACA,GACG,CACH39W,IAAA,MACAt2B,MAAA,SAAAi0Y,GAEA,OADAA,EAAA52Y,KAAA4ie,aAAAhsF,GACA52Y,KAAAkf,MAAA03X,GAAA52Y,KAAAkkB,KAAA0yX,GAAAn1T,QAAApjE,IACA,GACG,CACH4a,IAAA,SACAt2B,MAAA,SAAAi0Y,GAEA,KADAA,EAAA52Y,KAAA4ie,aAAAhsF,IACA,UAAA55W,WAAA;AACA,OAAA45W,GAAA52Y,KAAA42Y,MAAA,EAAA52Y,KAAAs6C,IAAAt6C,KAAAmwM,KAAA,EAAAymM,EAAA,EACA,GACG,CACH39W,IAAA,QACAt2B,MAAA,SAAAi0Y,GAEA,KADAA,EAAA52Y,KAAA4ie,aAAAhsF,IACA,UAAA55W,WAAA;AACA,OAAA45W,GAAA52Y,KAAA42Y,MAAA,EAAA52Y,KAAAs6C,IAAAt6C,KAAAmwM,KAAA,EAAAymM,EAAA,GAAA52Y,KAAAmwM,KAAA,EAAAymM,GAAAlE,QACA,GACG,CACHz5W,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAs6C,IAAAt6C,KAAAmwM,KAAAnwM,KAAAmwM,KAAA5vM,OAAA,EACA,GACG,CACH04B,IAAA,YACA3M,IAAA,WACA,IAAAxE,EAAA9nB,KAAA8nB,OACA/e,EAAA/I,KAAA+I,MAAA/I,KAAA42Y;AACA,GAAA7tY,GAAA+e,EAAA6qX,WAAA;AACA,IAAAkwF,EAAA7ie,KAAAs6C,IAAAt6C,KAAAmwM,KAAAnwM,KAAAmwM,KAAA5vM,OAAA,GACAumK,EAAAh/I,EAAAg/I,MAAA/9J;AACA,OAAA85d,EAAA/6c,EAAAg/I,MAAA/9J,GAAA+wY,IAAA+oF,GAAA/7T,CACA,GACG,CACH7tI,IAAA,aACA3M,IAAA,WACA,IAAAvjB,EAAA/I,KAAA+I,MAAA/I,KAAA42Y,OACAisF,EAAA7ie,KAAAs6C,IAAAt6C,KAAAmwM,KAAAnwM,KAAAmwM,KAAA5vM,OAAA;AACA,OAAAsie,EAAA7ie,KAAA8nB,OAAAg/I,MAAA/9J,GAAA+wY,IAAA,EAAA+oF,GACA,GAAA95d,EAAA,KAAA/I,KAAA8nB,OAAAg/I,MAAA/9J,EAAA,EACA,GACG,CACHkwB,IAAA,aACAt2B,MAAA,SAAAoG,EAAA6tY,GACAA,EAAA52Y,KAAA4ie,aAAAhsF;AAGA,IAFA,IAAA1yX,EAAAlkB,KAAAmwM,KAAA,EAAAymM,GACAt8V,EAAA,GAAAs8V,EAAA,EAAA52Y,KAAAmwM,KAAA,EAAAymM,EAAA,KACAt2Y,EAAA,EAAsBA,EAAAyI,EAAWzI,IAAAg6C,GAAAp2B,EAAA4iJ,MAAAxmK,GAAAoyY;AACjC,OAAAp4V,CACA,GACG,CACHrhB,IAAA,QACAt2B,MAAA,WACA,IAAAmlB,EAAA9nB,KAAA8nB,OACA/e,EAAA/I,KAAA+I;AACA,MAAA+e,EAAA25D,QAAApjE,KAAA,OAAA6tX,EAAArjS;AACA,GAAA7oG,KAAAgub,WAAA,OAAAlma,EAAAg/I,MAAA/9J,GAAA2/X;AACA,IAAA65F,EAAAz6c,EAAAsuc,WAAArtd,EAAA,GACA4+C,EAAA7/B,EAAAsuc,WAAArtd;AACA,IAAAw5d,EAAA,CACA,IAAA1/F,EAAA0/F;AACAA,EAAA56a,EACAA,EAAAk7U,CACA,CAEA,IADA,IAAA6F,EAAA65F,EAAA75F,MACApoY,EAAA,EAAsBA,EAAAooY,EAAAnoY,OAAkBD,SAAAooY,EAAApoY,GAAAwD,KAAAimW,KAAA1+N,WAAA1jF,GAAA+gV,EAAApoY,GAAAy9Y,QAAAp2V,EAAA+gV,aAAApoY,KAAAwie,cAAAp6F;AACxC,OAAAA,CACA,GACG,CACHzvW,IAAA,cACAt2B,MAAA,SAAA+/d,GACA,IAAAzlT,EAAAj9K,KAAA8nB,OAAAsuc,WAAAp2d,KAAA+I;AACA,IAAAk0K,MAAAmhO,SAAA;AAGA,IAFA,IAAA1V,EAAAzrN,EAAAyrN,MACAzvS,EAAAypY,EAAA56c,OAAAsuc,WAAAsM,EAAA35d,SACAzI,EAAA,EAAsBA,EAAAooY,EAAAnoY,OAAkBD,SAAAooY,EAAApoY,GAAAwD,KAAAimW,KAAA1+N,WAAApyC,GAAAyvS,EAAApoY,GAAAy9Y,QAAA9kT,EAAAyvS,aAAApoY,KAAAwie,cAAAp6F;AACxC,OAAAA,CACA,GACG,CACHzvW,IAAA,cACAt2B,MAAA,SAAA23C,GACA,QAAAs8V,EAAA52Y,KAAA42Y,MAAmCA,EAAA,EAAWA,IAAA,GAAA52Y,KAAAkf,MAAA03X,IAAAt8V,GAAAt6C,KAAAmf,IAAAy3X,IAAAt8V,EAAA,OAAAs8V;AAC9C,QACA,GACG,CACH39W,IAAA,aACAt2B,MAAA,WACA,IAAAglD,EAAA/0C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KACA+ie,EAAAnwd,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AACA,GAAAk2B,EAAArN,IAAAt6C,KAAAs6C,IAAA,OAAAqN,EAAA2xV,WAAAt5Y;AACA,QAAAL,EAAAK,KAAA42Y,OAAA52Y,KAAA8nB,OAAAm2X,eAAAj+Y,KAAAs6C,KAAAqN,EAAArN,IAAA,KAA8F36C,GAAA,EAAQA,IAAA,GAAAgoD,EAAArN,KAAAt6C,KAAAmf,IAAAxf,MAAAoje,KAAA/ie,KAAAkkB,KAAAvkB,KAAA,WAAAqje,EAAAhje,KAAA2nD,EAAAhoD;AACtG,WACA,GACG,CACHs5B,IAAA,aACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,KAAAs6C,IAAAt6C,KAAAwqY,cAAA7iV,EAAArN,IAAAqN,EAAA6iV,YACA,GACG,CACHvxW,IAAA,MACAt2B,MAAA,SAAAglD,GACA,OAAAA,EAAArN,IAAAt6C,KAAAs6C,IAAAqN,EAAA3nD,IACA,GACG,CACHi5B,IAAA,MACAt2B,MAAA,SAAAglD,GACA,OAAAA,EAAArN,IAAAt6C,KAAAs6C,IAAAqN,EAAA3nD,IACA,GACG,CACHi5B,IAAA,WACAt2B,MAAA,WAEA,IADA,IAAAs7B,EAAA,GACA39B,EAAA,EAAsBA,GAAAN,KAAA42Y,MAAiBt2Y,IAAA29B,MAAA,QAAAj+B,KAAAkkB,KAAA5jB,GAAAwD,KAAAsE,KAAA,IAAApI,KAAA+I,MAAAzI,EAAA;AACvC,OAAA29B,EAAA,IAAAj+B,KAAAwqY,YACA,IACG,EACHvxW,IAAA,UACAt2B,MAAA,SAAAgoB,EAAA2vB,GACA,KAAAA,GAAA,GAAAA,GAAA3vB,EAAA82D,QAAApjE,MAAA,UAAA2e,WAAA,YAAAsd,EAAA;AAIA,IAHA,IAAA61J,EAAA,GACAjxL,EAAA,EACAsrX,EAAAlwV,EACAp2B,EAAAyG,IAA2B,CAC3B,IAAAs4c,EAAA/+c,EAAAu9D,QAAA8hI,UAAAinL,GACAzhY,EAAAk6d,EAAAl6d,MACAiV,EAAAild,EAAAjld,OACAszI,EAAAk5O,EAAAxsX;AAEA,GADAmyL,EAAAvoM,KAAAsc,EAAAnb,EAAAmW,EAAAlB,IACAszI,EAAA;AAEA,IADAptI,IAAA4iJ,MAAA/9J,IACA4hY,OAAA;AACAH,EAAAl5O,EAAA,EACApyI,GAAAlB,EAAA,CACA,CACA,WAAA2kd,EAAArob,EAAA61J,EAAAq6L,EACA,GACG,CACHvxW,IAAA,gBACAt2B,MAAA,SAAAgoB,EAAA2vB,GACA,IAAAluB,EAAA82c,EAAA52c,IAAA3B;AACA,GAAAyB,EACA,QAAA9rB,EAAA,EAAwBA,EAAA8rB,EAAA+2c,KAAA5ie,OAAuBD,IAAA,CAC/C,IAAAqoK,EAAAv8I,EAAA+2c,KAAA7ie;AACA,GAAAqoK,EAAAruH,OAAA,OAAAquH,CACA,MAEAu6T,EAAAr2c,IAAAlC,EAAAyB,EAAA,IAAAg3c;AAEA,IAAAn8c,EAAAmF,EAAA+2c,KAAA/2c,EAAA9rB,GAAAqie,EAAA3tZ,QAAArqD,EAAA2vB;AAEA,OADAluB,EAAA9rB,GAAA8rB,EAAA9rB,EAAA,GAAA+ie,EACAp8c,CACA,KAEA07c,CACA,CA3MA,GA4MAS,EAAAlwV,EAAA,SAAAkwV,IACArwV,EAAA/yI,KAAAoje,GACApje,KAAAmje,KAAA,GACAnje,KAAAM,EAAA,CACA,GACA+ie,EAAA,GACAH,EAAA,IAAA/tX,QACA6tX,EAAA,WACA,SAAAA,EAAA54F,EAAA2H,EAAA6E,GACA7jQ,EAAA/yI,KAAAgje,GACAhje,KAAAoqY,QACApqY,KAAA+xY,MACA/xY,KAAA42Y,OACA,CA2BA,OA1BA1jQ,EAAA8vV,EAAA,EACA/pc,IAAA,QACA3M,IAAA,WACA,OAAAtsB,KAAAoqY,MAAAptN,OAAAh9K,KAAA42Y,MAAA,EACA,GACG,CACH39W,IAAA,MACA3M,IAAA,WACA,OAAAtsB,KAAA+xY,IAAA90N,MAAAj9K,KAAA42Y,MAAA,EACA,GACG,CACH39W,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAoqY,MAAAlmX,KAAAlkB,KAAA42Y,MACA,GACG,CACH39W,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAoqY,MAAArhY,MAAA/I,KAAA42Y,MACA,GACG,CACH39W,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAA+xY,IAAAuN,WAAAt/Y,KAAA42Y,MACA,KAEAosF,CACA,CAlCA,GAmCAM,EAAAv7c,OAAAxjB,OAAA,MACAmgB,EAAA,WACA,SAAAA,EAAA5gB,EAAAg2E,EAAA2H,GACA,IAAAinT,EAAA91X,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAs5X,EAAArjS;AACAkqC,EAAA/yI,KAAA0kB,GACA1kB,KAAA8D,OACA9D,KAAA85E,QACA95E,KAAA0oY,QACA1oY,KAAAyhF,WAAAu8N,EAAA1gN,KACA,CAuTA,OAtTA41C,EAAAxuH,EAAA,EACAuU,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,eACA,GACG,CACHxoD,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAAi4Y,OAAA,IAAAj4Y,KAAAyhF,QAAApjE,IACA,GACG,CACH4a,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAAkxT,UACA,GACG,CACH15W,IAAA,QACAt2B,MAAA,SAAAoG,GACA,OAAA/I,KAAAyhF,QAAAqlF,MAAA/9J,EACA,GACG,CACHkwB,IAAA,aACAt2B,MAAA,SAAAoG,GACA,OAAA/I,KAAAyhF,QAAA20Y,WAAArtd,EACA,GACG,CACHkwB,IAAA,UACAt2B,MAAA,SAAAuJ,GACAlM,KAAAyhF,QAAAjnE,QAAAtO,EACA,GACG,CACH+sB,IAAA,eACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAAvgD,GACA,IAAAsmY,EAAA5/X,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA5S,KAAAyhF,QAAAgpT,aAAAl9W,EAAAk/B,EAAAvgD,EAAAsmY,EAAAxyY,KACA,GACG,CACHi5B,IAAA,cACAt2B,MAAA,SAAAuJ,GACAlM,KAAAyqY,aAAA,EAAAzqY,KAAAyhF,QAAApjE,KAAAnS,EACA,GACG,CACH+sB,IAAA,cACA3M,IAAA,WACA,OAAAtsB,KAAAi4Y,QAAAj4Y,KAAA8D,KAAAimW,KAAAw2H,SAAAvge,KAAA8D,KAAAimW,KAAAw2H,SAAAvge,WAAA8tY,YAAA,EAAA9tY,KAAAyhF,QAAApjE,KAAA,GACA,GACG,CACH4a,IAAA,cACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA+kV,EAAA+uF,GACA,OAAAvge,KAAAyhF,QAAAqsT,YAAAvgX,EAAAk/B,EAAA+kV,EAAA+uF,EACA,GACG,CACHtnc,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAAh7E,UACA,GACG,CACHwyB,IAAA,YACA3M,IAAA,WACA,OAAAtsB,KAAAyhF,QAAAm/L,SACA,GACG,CACH3nP,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,MAAA2nD,GAAA3nD,KAAA0/d,WAAA/3a,IAAA3nD,KAAAyhF,QAAAsyK,GAAApsM,EAAA85B,QACA,GACG,CACHxoD,IAAA,aACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,KAAA22d,UAAAhva,EAAA7jD,KAAA6jD,EAAAmyB,MAAAnyB,EAAA+gV,MACA,GACG,CACHzvW,IAAA,YACAt2B,MAAA,SAAAmB,EAAAg2E,EAAA4uT,GACA,OAAA1oY,KAAA8D,SAAAg9d,EAAA9ge,KAAA85E,SAAAh2E,EAAAy/d,cAAAD,IAAAp3F,EAAAs3F,QAAAxje,KAAA0oY,SAAAwD,EAAArjS,KACA,GACG,CACH5vE,IAAA,OACAt2B,MAAA,WACA,IAAA8+E,EAAA7uE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA6uE,GAAAzhF,KAAAyhF,QAAAzhF,KACA,IAAA0kB,EAAA1kB,KAAA8D,KAAA9D,KAAA85E,MAAA2H,EAAAzhF,KAAA0oY,MACA,GACG,CACHzvW,IAAA,OACAt2B,MAAA,SAAA+lY,GACA,OAAAA,GAAA1oY,KAAA0oY,MAAA1oY,KAAA,IAAA0kB,EAAA1kB,KAAA8D,KAAA9D,KAAA85E,MAAA95E,KAAAyhF,QAAAinT,EACA,GACG,CACHzvW,IAAA,MACAt2B,MAAA,SAAA4qB,GACA,IAAAk/B,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAAyhF,QAAApjE;AACA,UAAAkP,GAAAk/B,GAAAzsD,KAAAyhF,QAAApjE,KAAAre,KACAA,KAAA63J,KAAA73J,KAAAyhF,QAAAq4T,IAAAvsX,EAAAk/B,GACA,GACG,CACHxzB,IAAA,QACAt2B,MAAA,SAAA4qB,GACA,IAAAk/B,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAAyhF,QAAApjE,KACAold,EAAA7wd,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AACA,GAAA2a,GAAAk/B,EAAA,OAAAyzV,EAAA5iT;AACA,IAAA8sS,EAAApqY,KAAAg1E,QAAAznD,GACAwkX,EAAA/xY,KAAAg1E,QAAAvoB,GACAmqV,EAAA6sF,EAAA,EAAAr5F,EAAA+rF,YAAA1pa,GACAvtC,EAAAkrX,EAAAlrX,MAAA03X,GAEAn1T,EADA2oT,EAAAlmX,KAAA0yX,GACAn1T,QAAAq4T,IAAA1P,EAAA9vV,IAAAp7B,EAAA6yX,EAAAz3V,IAAAp7B;AACA,WAAAghY,EAAAz+T,EAAA2oT,EAAAwM,QAAA7E,EAAA6E,QACA,GACG,CACH39W,IAAA,UACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAArsD,GACA,OAAA2he,EAAA/he,KAAAg1E,QAAAznD,GAAAvtB,KAAAg1E,QAAAvoB,GAAArsD,EACA,GACG,CACH64B,IAAA,SACAt2B,MAAA,SAAA23C,GACA,QAAAp2B,EAAAlkB,OAA4B,CAC5B,IAAA0je,EAAAx/c,EAAAu9D,QAAA8hI,UAAAjpK,GACAvxC,EAAA26d,EAAA36d,MACAiV,EAAA0ld,EAAA1ld;AAEA,KADAkG,IAAAkyc,WAAArtd,IACA;AACA,GAAAiV,GAAAs8B,GAAAp2B,EAAAymX,OAAA,OAAAzmX;AACAo2B,GAAAt8B,EAAA,CACA,CACA,GACG,CACHib,IAAA,aACAt2B,MAAA,SAAA23C,GACA,IAAAqpb,EAAA3je,KAAAyhF,QAAA8hI,UAAAjpK,GACAvxC,EAAA46d,EAAA56d,MACAiV,EAAA2ld,EAAA3ld;AACA,OACAkG,KAAAlkB,KAAAyhF,QAAA20Y,WAAArtd,GACAA,QACAiV,SAEA,GACG,CACHib,IAAA,cACAt2B,MAAA,SAAA23C,GACA,MAAAA,EAAA,OACAp2B,KAAA,KACAnb,MAAA,EACAiV,OAAA;AAEA,IAAA4ld,EAAA5je,KAAAyhF,QAAA8hI,UAAAjpK,GACAvxC,EAAA66d,EAAA76d,MACAiV,EAAA4ld,EAAA5ld;AACA,GAAAA,EAAAs8B,EAAA,OACAp2B,KAAAlkB,KAAAyhF,QAAAqlF,MAAA/9J,GACAA,QACAiV;AAEA,IAAAkG,EAAAlkB,KAAAyhF,QAAAqlF,MAAA/9J,EAAA;AACA,OACAmb,OACAnb,QAAA,EACAiV,SAAAkG,EAAAwuX,SAEA,GACG,CACHz5W,IAAA,UACAt2B,MAAA,SAAA23C,GACA,OAAAqob,EAAAkB,cAAA7je,KAAAs6C,EACA,GACG,CACHrhB,IAAA,iBACAt2B,MAAA,SAAA23C,GACA,OAAAqob,EAAA3tZ,QAAAh1E,KAAAs6C,EACA,GACG,CACHrhB,IAAA,eACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA3oD,GACA,IAAAo2N;AAKA,OAJAztK,EAAAl/B,GAAAvtB,KAAAyqY,aAAAl9W,EAAAk/B,EAAA,SAAAvoC,GAEA,OADApgB,EAAAi6Y,QAAA75X,EAAAwkX,SAAAxuK,OACAA,CACA,GACAA,CACA,GACG,CACHjhM,IAAA,UACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAAulK,OACA,GACG,CACHpwI,IAAA,cACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAA2pY,WACA,GACG,CACHx0W,IAAA,gBACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAAm6Y,aACA,GACG,CACHhlX,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAAs6Y,QACA,GACG,CACHnlX,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAA6mY,MACA,GACG,CACH1xW,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAAm0Y,MACA,GACG,CACHh/W,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAA4mY,MACA,GACG,CACHzxW,IAAA,WACAt2B,MAAA,WACA,GAAA3C,KAAA8D,KAAAimW,KAAA+5H,cAAA,OAAA9je,KAAA8D,KAAAimW,KAAA+5H,cAAA9je;AACA,IAAAoI,EAAApI,KAAA8D,KAAAsE;AAEA,OADApI,KAAAyhF,QAAApjE,OAAAjW,GAAA,IAAApI,KAAAyhF,QAAAm/Y,gBAAA,KACAmD,EAAA/je,KAAA0oY,MAAAtgY,EACA,GACG,CACH6wB,IAAA,iBACAt2B,MAAA,SAAAoG,GACA,IAAA8zB,EAAA78B,KAAA8D,KAAAk8Y,aAAAgkF,cAAAhke,KAAAyhF,QAAA,EAAA14E;AACA,IAAA8zB,EAAA,UAAAn8B,MAAA;AACA,OAAAm8B,CACA,GACG,CACH5D,IAAA,aACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,IAAAw3a,EAAArxd,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAorS,EAAA1gN,MACAp+E,EAAAtM,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAuM,EAAAvM,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAqxd,EAAAtxF,WACApzR,EAAAv/G,KAAA05Y,eAAAnsX,GAAAy2c,cAAAC,EAAA/kd,EAAAC,GACAm3F,EAAAiJ,KAAAykX,cAAAhke,KAAAyhF,QAAAh1B;AACA,IAAA6pD,MAAA2+W,SAAA;AACA,QAAA30d,EAAA4e,EAA0B5e,EAAA6e,EAAS7e,IAAA,IAAAN,KAAA8D,KAAAoge,YAAAD,EAAAn9T,MAAAxmK,GAAAooY,OAAA;AACnC,QACA,GACG,CACHzvW,IAAA,iBACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA3oD,EAAA4kY,GACA,GAAAA,IAAA1oY,KAAA8D,KAAAoge,YAAAx7F,GAAA;AACA,IAAAxpX,EAAAlf,KAAA05Y,eAAAnsX,GAAA46X,UAAArkZ,GACAqb,EAAAD,KAAA8kd,cAAAhke,KAAAyhF,QAAAh1B;AACA,QAAAttC,KAAA81c,QACA,GACG,CACHh8b,IAAA,YACAt2B,MAAA,SAAAglD,GACA,OAAAA,EAAA85B,QAAApjE,KAAAre,KAAA+0d,WAAA/0d,KAAA2yY,WAAA3yY,KAAA2yY,WAAAhrV,EAAA85B,SAAsGzhF,KAAA8D,KAAAgxd,kBAAAnta,EAAA7jD,KACtG,GACG,CACHm1B,IAAA,QACAt2B,MAAA,WACA3C,KAAA8D,KAAAqge,aAAAnke,KAAAyhF,SACAzhF,KAAA8D,KAAAk9d,WAAAhhe,KAAA85E;AAEA,IADA,IAAA+9E,EAAAq0O,EAAArjS,KACAvoG,EAAA,EAAsBA,EAAAN,KAAA0oY,MAAAnoY,OAAuBD,IAAA,CAC7C,IAAA+9G,EAAAr+G,KAAA0oY,MAAApoY;AACA+9G,EAAAv6G,KAAAk9d,WAAA3iX,EAAAvkC,OACA+9E,EAAAx5C,EAAA+lX,SAAAvsU,EACA,CACA,IAAAq0O,EAAAs3F,QAAA3rU,EAAA73J,KAAA0oY,OAAA,UAAA1rW,WAAA,wCAAAvqB,OAAAzS,KAAA8D,KAAAsE,KAAA,MAAAqK,OAAAzS,KAAA0oY,MAAA9kX,IAAA,SAAAzZ,GACA,OAAAA,EAAArG,KAAAsE,IACA;AACApI,KAAAyhF,QAAAjnE,QAAA,SAAA0J,GACA,OAAAA,EAAAmqQ,OACA,EACA,GACG,CACHp1P,IAAA,SACAt2B,MAAA,WACA,IAAAkvC,EAAA,CACA/tC,KAAA9D,KAAA8D,KAAAsE;AAEA,QAAAoH,KAAAxP,KAAA85E,MAAA,CACAjoC,EAAAioC,MAAA95E,KAAA85E;AACA,KACA,CAKA,OAJA95E,KAAAyhF,QAAApjE,OAAAwzB,EAAA4vC,QAAAzhF,KAAAyhF,QAAA0oF,UACAnqK,KAAA0oY,MAAAnoY,SAAAsxC,EAAA62V,MAAA1oY,KAAA0oY,MAAA9kX,IAAA,SAAApjB,GACA,OAAAA,EAAA2pK,QACA,IACAt4H,CACA,IACG,EACH5Y,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,IAAAA,EAAA,UAAAhoR,WAAA;AACA,IAAA0rW,OAAAj3W;AACA,GAAAuzR,EAAA0jF,MAAA,CACA,IAAA70X,MAAA1T,QAAA6kT,EAAA0jF,OAAA,UAAA1rW,WAAA;AACA0rW,EAAA1jF,EAAA0jF,MAAA9kX,IAAAqkG,EAAAo8W,aACA,CACA,WAAAr/K,EAAAlhT,KAAA,CACA,oBAAAkhT,EAAA3hT,KAAA,UAAA25B,WAAA;AACA,OAAAirF,EAAA5kH,KAAA2hT,EAAA3hT,KAAAqlY,EACA,CACA,IAAAjnT,EAAAu8N,EAAA6qG,SAAA5gS,EAAA+8L,EAAAvjO,SACAv9D,EAAA+jG,EAAA7wB,SAAA4tN,EAAAlhT,MAAAS,OAAAygT,EAAAlrO,MAAA2H,EAAAinT;AAEA,OADAxkX,EAAApgB,KAAAk9d,WAAA98c,EAAA41D,OACA51D,CACA,KAEAQ,CACA,CAhUA;AAiUAA,EAAAzf,UAAA5B,UAAAouB;AACA,IAAA6yc,EAAA,SAAAC,GACAhyV,EAAA+xV,EAAAC;AACA,IAAAxwV,EAAAnB,EAAA0xV;AACA,SAAAA,EAAAxge,EAAAg2E,EAAA2H,EAAAinT,GACA,IAAAniV;AAGA,GAFAwsF,EAAA/yI,KAAAske,GACA/9a,EAAAwtF,EAAAnpI,KAAA5K,KAAA8D,EAAAg2E,EAAA,KAAA4uT,IACAjnT,EAAA,UAAAzkD,WAAA;AAEA,OADAupB,EAAAljD,KAAAo+E,EACAl7B,CACA,CAsDA,OArDA2sF,EAAAoxV,EAAA,EACArrc,IAAA,WACAt2B,MAAA,WACA,OAAA3C,KAAA8D,KAAAimW,KAAA+5H,cAAA9je,KAAA8D,KAAAimW,KAAA+5H,cAAA9je,MACA+je,EAAA/je,KAAA0oY,MAAAzyX,KAAA8iB,UAAA/4B,KAAAqD,MACA,GACG,CACH41B,IAAA,cACA3M,IAAA,WACA,OAAAtsB,KAAAqD,IACA,GACG,CACH41B,IAAA,cACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,OAAAzsD,KAAAqD,KAAAjD,MAAAmtB,EAAAk/B,EACA,GACG,CACHxzB,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAAqD,KAAA9C,MACA,GACG,CACH04B,IAAA,OACAt2B,MAAA,SAAA+lY,GACA,OAAAA,GAAA1oY,KAAA0oY,MAAA1oY,KAAA,IAAAske,EAAAtke,KAAA8D,KAAA9D,KAAA85E,MAAA95E,KAAAqD,KAAAqlY,EACA,GACG,CACHzvW,IAAA,WACAt2B,MAAA,SAAAU,GACA,OAAAA,GAAArD,KAAAqD,KAAArD,KACA,IAAAske,EAAAtke,KAAA8D,KAAA9D,KAAA85E,MAAAz2E,EAAArD,KAAA0oY,MACA,GACG,CACHzvW,IAAA,MACAt2B,MAAA,WACA,IAAA4qB,EAAA3a,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACA65C,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAAqD,KAAA9C;AACA,UAAAgtB,GAAAk/B,GAAAzsD,KAAAqD,KAAA9C,OAAAP,KACAA,KAAAyge,SAAAzge,KAAAqD,KAAAjD,MAAAmtB,EAAAk/B,GACA,GACG,CACHxzB,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,KAAA0/d,WAAA/3a,IAAA3nD,KAAAqD,MAAAskD,EAAAtkD,IACA,GACG,CACH41B,IAAA,SACAt2B,MAAA,WACA,IAAAgtR,EAAAr2K,EAAAk5B,EAAA8xV,EAAAr/d,WAAA,SAAAjF,MAAA4K,KAAA5K;AAEA,OADA2vR,EAAAtsR,KAAArD,KAAAqD,KACAssR,CACA,KAEA20M,CACA,CAjEA,CAiEC5/c;AACD,SAAAq/c,EAAAr7F,EAAAzqW,GACA,QAAA39B,EAAAooY,EAAAnoY,OAAA,EAAiCD,GAAA,EAAQA,IAAA29B,EAAAyqW,EAAApoY,GAAAwD,KAAAsE,KAAA,IAAA61B,EAAA;AACzC,OAAAA,CACA,CACA,IAAAumc,EAAA,WACA,SAAAA,EAAAvP,GACAliV,EAAA/yI,KAAAwke,GACAxke,KAAAi1d,WACAj1d,KAAAi5F,KAAA,GACAj5F,KAAAyke,UAAA,EACA,CA4IA,OA3IAvxV,EAAAsxV,EAAA,EACAvrc,IAAA,YACAt2B,MAAA,SAAAmB,GACA,QAAAxD,EAAA,EAAsBA,EAAAN,KAAAi5F,KAAA14F,OAAsBD,IAAA,GAAAN,KAAAi5F,KAAA34F,GAAAwD,QAAA,OAAA9D,KAAAi5F,KAAA34F,GAAA24F;AAC5C,WACA,GACG,CACHhgE,IAAA,gBACAt2B,MAAA,SAAAq4d,GAIA,IAHA,IAAA97c,EAAAtM,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAuM,EAAAvM,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAood,EAAAroF,WACAjsO,EAAA1mK,KACAM,EAAA4e,EAA0BwnJ,GAAApmK,EAAA6e,EAAgB7e,IAAAomK,IAAAyhP,UAAA6yE,EAAAl0T,MAAAxmK,GAAAwD;AAC1C,OAAA4iK,CACA,GACG,CACHztI,IAAA,gBACA3M,IAAA,WACA,UAAAtsB,KAAAi5F,KAAA14F,QAAAP,KAAAi5F,KAAA,GAAAn1F,KAAAs6Y,QACA,GACG,CACHnlX,IAAA,cACA3M,IAAA,WACA,QAAAhsB,EAAA,EAAsBA,EAAAN,KAAAi5F,KAAA14F,OAAsBD,IAAA,CAC5C,IAAAwD,EAAA9D,KAAAi5F,KAAA34F,GAAAwD;AACA,IAAAA,EAAA6mY,SAAA7mY,EAAA4yY,mBAAA,OAAA5yY,CACA,CACA,WACA,GACG,CACHm1B,IAAA,aACAt2B,MAAA,SAAAglD,GACA,QAAArnD,EAAA,EAAsBA,EAAAN,KAAAi5F,KAAA14F,OAAsBD,IAAA,QAAAqlF,EAAA,EAAqBA,EAAAh+B,EAAAsxC,KAAA14F,OAAuBolF,IAAA,GAAA3lF,KAAAi5F,KAAA34F,GAAAwD,MAAA6jD,EAAAsxC,KAAAtT,GAAA7hF,KAAA;AACxF,QACA,GACG,CACHm1B,IAAA,aACAt2B,MAAA,SAAAs6K,GACA,IAAAynT,EAAA9xd,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAgoN,EAAAhoN,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAwkY,EAAA,CAAAp3Y;AAkBA,OAjBA,SAAA0xC,EAAA7U,EAAAo3K,GACA,IAAA0wR,EAAA9nc,EAAAmnc,cAAA/mT,EAAA29C;AACA,GAAA+pQ,KAAAD,GAAAC,EAAA1P,UAAA,OAAAj3K,EAAAzwR,KAAA0mL,EAAArwL,IAAA,SAAA0+I,GACA,OAAAA,EAAA29O,eACA;AACA,QAAA3/Y,EAAA,EAAwBA,EAAAu8B,EAAAo8D,KAAA14F,OAAuBD,IAAA,CAC/C,IAAAske,EAAA/nc,EAAAo8D,KAAA34F,GACAwD,EAAA8ge,EAAA9ge,KACAm1F,EAAA2rY,EAAA3rY;AACA,IAAAn1F,EAAA6mY,SAAA7mY,EAAA4yY,qBAAA,GAAAU,EAAAvtY,QAAAovF,GAAA,CACAm+S,EAAAxvY,KAAAqxF;AACA,IAAA4rY,EAAAnzb,EAAAunD,EAAAg7G,EAAAxhM,OAAA3O;AACA,GAAA+ge,EAAA,OAAAA,CACA,CACA,CACA,WACA,CAhBA,CAiBA7ke,KAAA,GACA,GACG,CACHi5B,IAAA,eACAt2B,MAAA,SAAA6G,GACA,QAAAlJ,EAAA,EAAsBA,EAAAN,KAAAyke,UAAAlke,OAA2BD,GAAA,KAAAN,KAAAyke,UAAAnke,IAAAkJ,EAAA,OAAAxJ,KAAAyke,UAAAnke,EAAA;AACjD,IAAAoiK,EAAA1iK,KAAA8ke,gBAAAt7d;AAEA,OADAxJ,KAAAyke,UAAA78d,KAAA4B,EAAAk5J,GACAA,CACA,GACG,CACHzpI,IAAA,kBACAt2B,MAAA,SAAA6G,GAOA,IANA,IAAA4tY,EAAArvX,OAAAxjB,OAAA,MACAi7J,EAAA,EACA3iI,MAAA78B,KACA8D,KAAA,KACAihe,IAAA,OAEAvlU,EAAAj/J,QAAA,CACA,IAAAkuE,EAAA+wF,EAAA1rJ,QACA+oB,EAAA4xC,EAAA5xC;AACA,GAAAA,EAAAsrX,UAAA3+Y,GAAA,CAEA,IADA,IAAAyd,EAAA,GACA4qB,EAAA48B,EAAkC58B,EAAA/tC,KAAU+tC,IAAAkzb,IAAA99c,EAAArf,KAAAiqC,EAAA/tC;AAC5C,OAAAmjB,EAAA9V,SACA,CACA,QAAA7Q,EAAA,EAAwBA,EAAAu8B,EAAAo8D,KAAA14F,OAAuBD,IAAA,CAC/C,IAAA0ke,EAAAnoc,EAAAo8D,KAAA34F,GACAwD,EAAAkhe,EAAAlhe,KACAm1F,EAAA+rY,EAAA/rY;AACAn1F,EAAAm0Y,QAAAn0Y,EAAA4yY,oBAAA5yY,EAAAsE,QAAAgvY,GAAA3oU,EAAA3qE,OAAAm1F,EAAAg8X,WACAz1T,EAAA53J,KAAA,CACAi1B,MAAA/4B,EAAAk8Y,aACAl8Y,OACAihe,IAAAt2Z,IAEA2oU,EAAAtzY,EAAAsE,SAEA,CACA,CACA,WACA,GACG,CACH6wB,IAAA,YACA3M,IAAA,WACA,OAAAtsB,KAAAi5F,KAAA14F,MACA,GACG,CACH04B,IAAA,OACAt2B,MAAA,SAAAnC,GACA,GAAAA,GAAAR,KAAAi5F,KAAA14F,OAAA,UAAAy8B,WAAA,cAAAvqB,OAAAjS,EAAA;AACA,OAAAR,KAAAi5F,KAAAz4F,EACA,GACG,CACHy4B,IAAA,WACAt2B,MAAA,WACA,IAAAy0Y,EAAA;AAMA,OALA,SAAA08E,EAAA3pd,GACAitY,EAAAxvY,KAAAuC;AACA,QAAA7J,EAAA,EAAwBA,EAAA6J,EAAA8uF,KAAA14F,OAAmBD,KAAA,GAAA82Y,EAAAvtY,QAAAM,EAAA8uF,KAAA34F,GAAA24F,OAAA66X,EAAA3pd,EAAA8uF,KAAA34F,GAAA24F,KAC3C,CAHA,CAIAj5F,MACAo3Y,EAAAxzX,IAAA,SAAAzZ,EAAA7J,GAEA,IADA,IAAAy4P,EAAAz4P,GAAA6J,EAAA8qd,SAAA,aACA/1b,EAAA,EAAyBA,EAAA/0B,EAAA8uF,KAAA14F,OAAoB2+B,IAAA65N,IAAA75N,EAAA,SAAA/0B,EAAA8uF,KAAA/5D,GAAAp7B,KAAAsE,KAAA,KAAAgvY,EAAAvtY,QAAAM,EAAA8uF,KAAA/5D,GAAA+5D;AAC7C,OAAA8/J,CACA,GAAOjhP,KAAA,KACP,IACG,EACHmhB,IAAA,QACAt2B,MAAA,SAAA61G,EAAAysX,GACA,IAAAC,EAAA,IAAAC,EAAA3sX,EAAAysX;AACA,SAAAC,EAAAjsY,KAAA,OAAAurY,EAAAlnY;AACA,IAAA8nY,EAAAC,EAAAH;AACAA,EAAAjsY,MAAAisY,EAAAhyb,IAAA;AACA,IAAArW,EAsNA,SAAAyoc,GACA,IAAAC,EAAAx9c,OAAAxjB,OAAA;AACA,OACA,SAAAihe,EAAA5rS,GACA,IAAAm/D,EAAA;AACAn/D,EAAAp/K,QAAA,SAAA0J,GACAohd,EAAAphd,GAAA1J,QAAA,SAAAgH,GACA,IAAAqwM,EAAArwM,EAAAqwM,KACAplK,EAAAjrC,EAAAirC;AACA,GAAAolK,EAAA,CAEA,IADA,IAAAhlM,EACAvsB,EAAA,EAAwBA,EAAAy4P,EAAAx4P,OAAgBD,IAAAy4P,EAAAz4P,GAAA,IAAAuxN,IAAAhlM,EAAAksO,EAAAz4P,GAAA;AACxCmle,GAAAH,EAAA74a,GAAAjyC,QAAA,SAAA0J,GACA2I,GAAAksO,EAAAnxP,KAAA,CAAAiqN,EAAAhlM,EAAA,MACA,GAAAA,EAAAhjB,QAAAqa,IAAA2I,EAAAjlB,KAAAsc,EACA,EANA,CAOA,EACA;AAEA,IADA,IAAAjC,EAAAsjd,EAAA3rS,EAAA9hL,KAAA,UAAA0sd,EAAA5qS,EAAA/vL,QAAAy7d,EAAA/ke,OAAA,OACAD,EAAA,EAAoBA,EAAAy4P,EAAAx4P,OAAgBD,IAAA,CACpC,IAAAole,EAAA3sO,EAAAz4P,GAAA,GAAA6xB,KAAAumT;AACAz2T,EAAAg3E,KAAArxF,KAAA,CACA9D,KAAAi1P,EAAAz4P,GAAA,GACA24F,KAAAssY,EAAAG,EAAA5td,KAAA,OAAA0td,EAAAE,IAEA,CACA,OAAAzjd,CACA,CAxBA,CADAwjd,GAAAH,EAAA,GA0BA,CAlPAK,CA+HA,SAAAP,GACA,IAAAE,EAAA;AAEA,OADAjxZ,EAkBA,SAAAl9D,EAAAiud,EAAA73c,GACA,aAAA63c,EAAAthe,KACA,OAAAshe,EAAAQ,MAAAlnd,OAAA,SAAAq6O,EAAAqsO,GACA,OAAArsO,EAAAtmP,OAAA0E,EAAAiud,EAAA73c,GACA,EAAO;AACD,UAAA63c,EAAAthe,KAMA,YAAAshe,EAAAthe,KAAA,CACN,IAAAs1Z,EAAAl1Y;AAGA,OAFAypW,EAAApgW,EAAA6rY,GACA/kV,EAAAl9D,EAAAiud,OAAAhsE,MACA,CAAAzrC,EAAAyrC,GACA,CAAM,WAAAgsE,EAAAthe,KAAA,CACN,IAAAs1I,EAAAl1H;AAGA,OAFAmwD,EAAAl9D,EAAAiud,OAAA73c,GAAA6rH,GACA/kE,EAAAl9D,EAAAiud,OAAAhsV,MACA,CAAAu0O,EAAAv0O,GACA,CAAM,UAAAgsV,EAAAthe,KACN,OAAA6pX,EAAApgW,IAAA9a,OAAA0E,EAAAiud,OAAA73c;AACM,YAAA63c,EAAAthe,KAAA,CAEN,IADA,IAAA4iK,EAAAn5I,EACAqpc,EAAA,EAAwBA,EAAAwO,EAAAvmd,IAAgB+3c,IAAA,CACxC,IAAAiP,EAAA3hd;AACAmwD,EAAAl9D,EAAAiud,OAAA1+T,GAAAm/T,GACAn/T,EAAAm/T,CACA,CACA,OAAAT,EAAAtmd,IACAu1D,EAAAl9D,EAAAiud,OAAA1+T;KAEA,QAAAwvT,EAAAkP,EAAAvmd,IAAiCq3c,EAAAkP,EAAAtmd,IAAgBo3c,IAAA,CACjD,IAAA4P,EAAA5hd;AACAypW,EAAAjnN,EAAAo/T,GACAzxZ,EAAAl9D,EAAAiud,OAAA1+T,GAAAo/T,GACAp/T,EAAAo/T,CACA,CAEA,OAAAn4G,EAAAjnN,GACA,CAAM,WAAA0+T,EAAAthe,KACN,OAAA6pX,EAAApgW,OAAAkE,EAAA2zc,EAAAzie;AAEA,UAAAjC,MAAA,oBACA,CAvCA,QAAAJ,EAAA,GAAuBA,IAAA,CACvB,IAAA24F,EAAA9hF,EAAAiud,EAAAQ,MAAAtle,GAAAitB;AACA,GAAAjtB,GAAA8ke,EAAAQ,MAAArle,OAAA,SAAA04F;AACA5kB,EAAA4kB,EAAA1rE,EAAArJ,IACA,CAoCA,CA9CA,CAlBAkhd,EAAA,GAAAlhd,KACAohd;AACA,SAAAphd,IACA,OAAAohd,EAAA19d,KAAA,KACA,CACA,SAAA+lX,EAAApgW,EAAAk/B,EAAAolK,GACA,IAAA87J,EAAA,CACA97J,OACAplK;AAGA,OADA64a,EAAA/3c,GAAA3lB,KAAA+lX,GACAA,CACA,CACA,SAAAt5S,EAAAq5M,EAAAjhO,GACAihO,EAAAlzQ,QAAA,SAAAmzW,GACA,OAAAA,EAAAlhU,IACA,EACA,CAgDA,CAnEA,CA/HA24a;AAEA,OAiPA,SAAAvoc,EAAAqoc,GACA,QAAA5ke,EAAA,EAAAyle,EAAA,CAAAlpc,GAAkCv8B,EAAAyle,EAAAxle,OAAiBD,IAAA,CAInD,IAHA,IAAA2hB,EAAA8jd,EAAAzle,GACA0le,GAAA/jd,EAAAgzc,SACA90Q,EAAA,GACAx6H,EAAA,EAAoBA,EAAA1jE,EAAAg3E,KAAA14F,OAAuBolF,IAAA,CAC3C,IAAAsgZ,EAAAhkd,EAAAg3E,KAAAtT,GACA7hF,EAAAmie,EAAAnie,KACAm1F,EAAAgtY,EAAAhtY;AACAknH,EAAAv4M,KAAA9D,EAAAsE,OACA49d,GAAAlie,EAAA6mY,QAAA7mY,EAAA4yY,qBAAAsvF,OACA,GAAAD,EAAAl8d,QAAAovF,IAAA8sY,EAAAn+d,KAAAqxF,EACA,CACA+sY,GAAAd,EAAAhyb,IAAA,+BAAAitK,EAAAroM,KAAA,uFACA,CACA,CAfA,CAlPA+kB,EAAAqoc,GACAroc,CACA,KAEA2nc,CACA,CAnJA;AAoJAA,EAAAlnY,MAAA,IAAAknY;AACA,IAAAW,EAAA,WACA,SAAAA,EAAA3sX,EAAAysX,GACAlyV,EAAA/yI,KAAAmle,GACAnle,KAAAw4G,SACAx4G,KAAAile,YACAjle,KAAA4d,OAAA,KACA5d,KAAAs6C,IAAA,EACAt6C,KAAAi/B,OAAAu5E,EAAAvgG,MAAA,kBACA,IAAAjY,KAAAi/B,OAAAj/B,KAAAi/B,OAAA1+B,OAAA,IAAAP,KAAAi/B,OAAA0yH,MACA,IAAA3xJ,KAAAi/B,OAAA,IAAAj/B,KAAAi/B,OAAAnrB,OACA,CAiBA,OAhBAo/H,EAAAiyV,EAAA,EACAlsc,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAi/B,OAAAj/B,KAAAs6C,IACA,GACG,CACHrhB,IAAA,MACAt2B,MAAA,SAAAuje,GACA,OAAAlme,KAAAi5F,MAAAitY,IAAAlme,KAAAs6C,UACA,GACG,CACHrhB,IAAA,MACAt2B,MAAA,SAAAs7B,GACA,UAAAib,YAAAjb,EAAA,4BAAAj+B,KAAAw4G,OAAA,KACA,KAEA2sX,CACA,CA5BA;AA6BA,SAAAE,EAAAH,GACA,IAAAU,EAAA;AACA,GACAA,EAAAh+d,KAAAu+d,EAAAjB,UACIA,EAAAkB,IAAA;AACJ,UAAAR,EAAArle,OAAAqle,EAAA,IACA9he,KAAA,SACA8he,QAEA,CACA,SAAAO,EAAAjB,GACA,IAAAU,EAAA;AACA,GACAA,EAAAh+d,KAAAy+d,EAAAnB,UACIA,EAAAjsY,MAAA,KAAAisY,EAAAjsY,MAAA,KAAAisY,EAAAjsY;AACJ,UAAA2sY,EAAArle,OAAAqle,EAAA,IACA9he,KAAA,MACA8he,QAEA,CACA,SAAAS,EAAAnB,GAEA,IADA,IAAAE,EA+CA,SAAAF,GACA,GAAAA,EAAAkB,IAAA,MACA,IAAAhB,EAAAC,EAAAH;AAEA,OADAA,EAAAkB,IAAA,MAAAlB,EAAAhyb,IAAA,yBACAkyb,CACA,CAAI,SAAA//c,KAAA6/c,EAAAjsY,MAAA,CACJ,IAAA2sY,EAlBA,SAAAV,EAAA98d,GACA,IAAA6rM,EAAAixR,EAAAD,UACAnhe,EAAAmwM,EAAA7rM;AACA,GAAAtE,EAAA,OAAAA;AACA,IAAAmjB,EAAA;AACA,QAAAswX,KAAAtjM,EAAA,CACA,IAAA0yN,EAAA1yN,EAAAsjM;AACAovB,EAAA2/D,UAAAl+d,IAAA6e,EAAArf,KAAA++Z,EACA,CAEA,OADA,GAAA1/Y,EAAA1mB,QAAA2ke,EAAAhyb,IAAA,0BAAA9qC,EAAA,WACA6e,CACA,CAXA,CAkBAi+c,IAAAjsY,MAAAr1E,IAAA,SAAA9f,GAEA,OADA,MAAAohe,EAAAtnd,OAAAsnd,EAAAtnd,OAAA9Z,EAAAs6Y,SAA+D8mF,EAAAtnd,QAAA9Z,EAAAs6Y,UAAA8mF,EAAAhyb,IAAA,mCAC/D,CACApvC,KAAA,OACAnB,MAAAmB,EAEA;AAEA,OADAohe,EAAA5qb,MACA,GAAAsrb,EAAArle,OAAAqle,EAAA,IACA9he,KAAA,SACA8he,QAEA,CACAV,EAAAhyb,IAAA,qBAAAgyb,EAAAjsY,KAAA,IAEA,CArBA,CA/CAisY,KAEA,GAAAA,EAAAkB,IAAA,KAAAhB,EAAA,CACAthe,KAAA,OACAshe;KACM,GAAAF,EAAAkB,IAAA,KAAAhB,EAAA,CACNthe,KAAA,OACAshe;KACM,GAAAF,EAAAkB,IAAA,KAAAhB,EAAA,CACNthe,KAAA,MACAshe;IACM,KAAAF,EAAAkB,IAAA,KAA8D;AAAxChB,EAAAmB,GAAArB,EAAAE,EAAwC,CAEpE,OAAAA,CACA,CACA,SAAAoB,GAAAtB,GACA,KAAA7/c,KAAA6/c,EAAAjsY,OAAAisY,EAAAhyb,IAAA,yBAAAgyb,EAAAjsY,KAAA;AACA,IAAAhyE,EAAA3b,OAAA45d,EAAAjsY;AAEA,OADAisY,EAAA5qb,MACArzB,CACA,CACA,SAAAs/c,GAAArB,EAAAE,GACA,IAAAvmd,EAAA2nd,GAAAtB,GACApmd,EAAAD;AAKA,OAJAqmd,EAAAkB,IAAA,OACyBtnd,EAAzB,KAAAomd,EAAAjsY,KAAyButY,GAAAtB,IAA0B,GAEnDA,EAAAkB,IAAA,MAAoBlB,EAAAhyb,IAAA,yBACpB,CACApvC,KAAA,QACA+a,MACAC,MACAsmd,OAEA,CAuGA,SAAA1sJ,GAAA53U,EAAAma,GACA,OAAAA,EAAAna,CACA,CACA,SAAA2ke,GAAAH,EAAAphd,GACA,IAAA+C,EAAA;AAEA,OACA,SAAA6sc,EAAA5vc,GACA,IAAAwpQ,EAAA43M,EAAAphd;AACA,MAAAwpQ,EAAAntR,SAAAmtR,EAAA,GAAA77D,KAAA,OAAAiiQ,EAAApmM,EAAA,GAAAjhO;AACAxlC,EAAArf,KAAAsc;AACA,QAAA5jB,EAAA,EAAoBA,EAAAotR,EAAAntR,OAAkBD,IAAA,CACtC,IAAAmme,EAAA/4M,EAAAptR,GACAuxN,EAAA40Q,EAAA50Q,KACAplK,EAAAg6a,EAAAh6a;AACAolK,IAAA,GAAA5qM,EAAApd,QAAA4iD,IAAAqna,EAAArna,EACA,CACA,CAVA,CAFAvoC,GACA+C,EAAAkL,KAAAumT,GAYA,CA8CA,SAAA6qJ,GAAAzpZ,GACA,IAAAtvB,EAAAziC,OAAAxjB,OAAA;AACA,QAAA6pK,KAAAt0F,EAAA,CACA,IAAA4sZ,EAAA5sZ,EAAAs0F;AACA,IAAAs4T,EAAAC,WAAA;AACAn8a,EAAA4jH,GAAAs4T,EAAA9xd,OACA,CACA,OAAA41C,CACA,CACA,SAAAo8a,GAAA9sZ,EAAAn3E,GACA,IAAAkke,EAAA9+c,OAAAxjB,OAAA;AACA,QAAA6D,KAAA0xE,EAAA,CACA,IAAAgtZ,EAAAnke,KAAAyF;AACA,QAAAqpB,IAAAq1c,EAAA,CACA,IAAAJ,EAAA5sZ,EAAA1xE;AACA,IAAAs+d,EAAAC,WAAmD,UAAA3pc,WAAA,mCAAA50B;AAAnD0+d,EAAAJ,EAAA9xd,OACA,CACAiyd,EAAAz+d,GAAA0+d,CACA,CACA,OAAAD,CACA,CACA,SAAAE,GAAAjtZ,EAAA9yB,EAAAljD,EAAAsE,GACA,QAAAs+d,KAAA1/a,EAAA,KAAA0/a,KAAA5sZ,GAAA,UAAA98C,WAAA,yBAAAvqB,OAAAi0d,EAAA,SAAAj0d,OAAA3O,EAAA,aAAA2O,OAAArK;AACA,QAAA4+d,KAAAltZ,EACAA,EAAAktZ,GAAAnzX,UAAA/5B,EAAAktZ,GAAAnzX,SAAA7sD,EAAAggb,GAEA,CACA,SAAAC,GAAA1vF,EAAAz9T,GACA,IAAA7yD,EAAAc,OAAAxjB,OAAA;AACA,GAAAu1E,EAAA,QAAA1xE,KAAA0xE,EAAA7yD,EAAA7e,GAAA,IAAA8+d,GAAA3vF,EAAAnvY,EAAA0xE,EAAA1xE;AACA,OAAA6e,CACA,CACA,IAAAkgd,GAAA,WACA,SAAAA,EAAA/+d,EAAA6/G,EAAA8hP,GACAh3N,EAAA/yI,KAAAmne,GACAnne,KAAAoI,OACApI,KAAAioH,SACAjoH,KAAA+pW,OACA/pW,KAAAone,QAAA,KACApne,KAAAi2B,OAAA8zU,EAAA93M,MAAA83M,EAAA93M,MAAAh6I,MAAA,QACAjY,KAAA85E,MAAAmtZ,GAAA7+d,EAAA2hW,EAAAjwR,OACA95E,KAAAuje,gBAAAvje,KAAA85E,OACA95E,KAAAggZ,aAAA,KACAhgZ,KAAAi+Y,cAAA,KACAj+Y,KAAAqpK,UAAA0gM,EAAAnsV,QAAA,QAAAxV,GACApI,KAAA2qY,OAAA,QAAAviY,CACA,CA8IA,OA7IA8qI,EAAAi0V,EAAA,EACAluc,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAAqpK,OACA,GACG,CACHpwI,IAAA,cACA3M,IAAA,WACA,OAAAtsB,KAAAqpK,SAAArpK,KAAAi+Y,aACA,GACG,CACHhlX,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAggZ,cAAAwkF,EAAAlnY,KACA,GACG,CACHrkE,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAi4Y,UAAAj4Y,KAAA+pW,KAAA4+B,IACA,GACG,CACH1vW,IAAA,YACAt2B,MAAA,SAAAsvJ,GACA,OAAAjyJ,KAAAi2B,OAAApsB,QAAAooJ,IAAA,CACA,GACG,CACHh5H,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAA+pW,KAAA6+B,aAAA5oY,KAAA+pW,KAAAtzV,KAAA,eACA,GACG,CACHwiB,IAAA,mBACAt2B,MAAA,WACA,QAAAnC,KAAAR,KAAA85E,MAAA,GAAA95E,KAAA85E,MAAAt5E,GAAAmmY,WAAA;AACA,QACA,GACG,CACH1tW,IAAA,oBACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,MAAA2nD,GAAA3nD,KAAAggZ,aAAAqnF,WAAA1/a,EAAAq4V,aACA,GACG,CACH/mX,IAAA,eACAt2B,MAAA,SAAAm3E,GACA,OAAAA,GAAA95E,KAAAuje,aAAAvje,KAAAuje,aAAgEqD,GAAA5me,KAAA85E,QAChE,GACG,CACH7gD,IAAA,SACAt2B,MAAA,WACA,IAAAm3E,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA6uE,EAAA7uE,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACAi3W,EAAA91X,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AACA,GAAAzxB,KAAA2qY,OAAA,UAAAjqY,MAAA;AACA,WAAAgkB,EAAA1kB,UAAAsne,aAAAxtZ,GAAAkkO,EAAAzwR,KAAAk0D,GAAAyqT,EAAAq7F,QAAA7+F,GACA,GACG,CACHzvW,IAAA,gBACAt2B,MAAA,WACA,IAAAm3E,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA6uE,EAAA7uE,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACAi3W,EAAA91X,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AAGA,OAFAgwD,EAAAu8N,EAAAzwR,KAAAk0D,GACAzhF,KAAAmke,aAAA1iZ,GACA,IAAA/8D,EAAA1kB,UAAAsne,aAAAxtZ,GAAA2H,EAAAyqT,EAAAq7F,QAAA7+F,GACA,GACG,CACHzvW,IAAA,gBACAt2B,MAAA,WACA,IAAAm3E,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA6uE,EAAA7uE,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACAi3W,EAAA91X,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AAGA,GAFAqoD,EAAA95E,KAAAsne,aAAAxtZ,IACA2H,EAAAu8N,EAAAzwR,KAAAk0D,IACApjE,KAAA,CACA,IAAA2+J,EAAAh9K,KAAAggZ,aAAAwnF,WAAA/lZ;AACA,IAAAu7F,EAAA;AACAv7F,EAAAu7F,EAAAs0B,OAAA7vH,EACA,CACA,IAAAixC,EAAA1yH,KAAAggZ,aAAAgkF,cAAAviZ,GACAw7F,EAAAvqD,KAAA80W,WAAAxpL,EAAA1gN;AACA,OAAA2/E,EACA,IAAAv4J,EAAA1kB,KAAA85E,EAAA2H,EAAA6vH,OAAAr0B,GAAAivN,EAAAq7F,QAAA7+F,IADA,IAEA,GACG,CACHzvW,IAAA,eACAt2B,MAAA,SAAA8+E,GACA,IAAAx6D,EAAAjnB,KAAAggZ,aAAAgkF,cAAAviZ;AACA,IAAAx6D,MAAAguc,SAAA;AACA,QAAA30d,EAAA,EAAsBA,EAAAmhF,EAAAkxT,WAAwBryY,IAAA,IAAAN,KAAAkke,YAAAziZ,EAAAqlF,MAAAxmK,GAAAooY,OAAA;AAC9C,QACA,GACG,CACHzvW,IAAA,eACAt2B,MAAA,SAAA8+E,GACA,IAAAzhF,KAAA0gZ,aAAAj/T,GAAA,UAAAzkD,WAAA,4BAAAvqB,OAAAzS,KAAAoI,KAAA,MAAAqK,OAAAgvE,EAAApxE,WAAAjQ,MAAA,OACA,GACG,CACH64B,IAAA,aACAt2B,MAAA,SAAAm3E,GACAitZ,GAAA/me,KAAA85E,QAAA,OAAA95E,KAAAoI,KACA,GACG,CACH6wB,IAAA,iBACAt2B,MAAA,SAAAu6Y,GACA,aAAAl9Y,KAAAone,SAAApne,KAAAone,QAAAv9d,QAAAqzY,IAAA,CACA,GACG,CACHjkX,IAAA,cACAt2B,MAAA,SAAA+lY,GACA,SAAA1oY,KAAAone,QAAA;AACA,QAAA9me,EAAA,EAAsBA,EAAAooY,EAAAnoY,OAAkBD,IAAA,IAAAN,KAAAk+Y,eAAAxV,EAAApoY,GAAAwD,MAAA;AACxC,QACA,GACG,CACHm1B,IAAA,eACAt2B,MAAA,SAAA+lY,GACA,SAAA1oY,KAAAone,QAAA,OAAA1+F;AAEA,IADA,IAAA7wO,EACAv3J,EAAA,EAAsBA,EAAAooY,EAAAnoY,OAAkBD,IACxCN,KAAAk+Y,eAAAxV,EAAApoY,GAAAwD,MAEU+zJ,GACVA,EAAAjwJ,KAAA8gY,EAAApoY,IAFAu3J,MAAA6wO,EAAAtoY,MAAA,EAAAE;AAKA,OAAAu3J,IAAAt3J,OAAAs3J,EAAAq0O,EAAArjS,KAAA6/R,CACA,IACG,EACHzvW,IAAA,UACAt2B,MAAA,SAAAw9M,EAAAl4F,GACA,IAAAhhG,EAAAc,OAAAxjB,OAAA;AACA47M,EAAA3lM,QAAA,SAAApS,EAAA2hW,GACA,OAAA9iV,EAAA7e,GAAA,IAAA++d,EAAA/+d,EAAA6/G,EAAA8hP,EACA;AACA,IAAA09H,EAAAx/W,EAAA8hP,KAAAw+B,SAAA;AACA,IAAAthX,EAAAwgd,GAAA,UAAAzqc,WAAA,yCAAAyqc,EAAA;AACA,IAAAxgd,EAAA5jB,KAAA,UAAA25B,WAAA;AACA,QAAAxtB,KAAAyX,EAAA5jB,KAAAy2E,MAAA,UAAA98C,WAAA;AACA,OAAA/V,CACA,KAEAkgd,CACA,CA7JA,GAqKAD,GAAA,WACA,SAAAA,EAAA3vF,EAAAnpO,EAAApsK,GACA+wI,EAAA/yI,KAAAkne,GACAlne,KAAA2me,WAAA5+c,OAAA9iB,UAAA4N,eAAAjI,KAAA5I,EAAA,WACAhC,KAAA4U,QAAA5S,EAAA4S,QACA5U,KAAA6zG,SAAA,iBAAA7xG,EAAA6xG,SAZA,SAAA0jS,EAAAnpO,EAAAtqK,GACA,IAAAmwM,EAAAnwM,EAAAmU,MAAA;AACA,gBAAAtV,GACA,IAAAyF,EAAA,OAAAzF,EAAA,OAAAqnI,EAAArnI;AACA,GAAAsxM,EAAApqM,QAAAzB,GAAA,YAAA40B,WAAA,0BAAAvqB,OAAAwhM,EAAA,mBAAAxhM,OAAA27J,EAAA,aAAA37J,OAAA8kY,EAAA,UAAA9kY,OAAArK,GACA,CACA,CANA,CAYAmvY,EAAAnpO,EAAApsK,EAAA6xG,UAAA7xG,EAAA6xG,QACA,CAOA,OANAq/B,EAAAg0V,EAAA,EACAjuc,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAA2me,UACA,KAEAO,CACA,CAdA,GAeAQ,GAAA,WACA,SAAAA,EAAAt/d,EAAA24d,EAAA94W,EAAA8hP,GACAh3N,EAAA/yI,KAAA0ne,GACA1ne,KAAAoI,OACApI,KAAA+ge,OACA/ge,KAAAioH,SACAjoH,KAAA+pW,OACA/pW,KAAA85E,MAAAmtZ,GAAA7+d,EAAA2hW,EAAAjwR,OACA95E,KAAA8yQ,SAAA;AACA,IAAAtoN,EAAA+4a,GAAAvje,KAAA85E;AACA95E,KAAAi0E,SAAAzpB,EAAA,IAAA0hV,EAAAlsY,KAAAwqD,GAAA,IACA,CA2CA,OA1CA0oF,EAAAw0V,EAAA,EACAzuc,IAAA,SACAt2B,MAAA,WACA,IAAAm3E,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAAknE,GAAA95E,KAAAi0E,SAAAj0E,KAAAi0E,SACA,IAAAi4T,EAAAlsY,KAAA4me,GAAA5me,KAAA85E,SACA,GACG,CACH7gD,IAAA,gBACAt2B,MAAA,SAAAkqB,GACA,QAAAvsB,EAAA,EAAsBA,EAAAusB,EAAAtsB,OAAgBD,IAAAusB,EAAAvsB,GAAAwD,MAAA9D,OACtC6sB,IAAAzsB,MAAA,EAAAE,GAAAmS,OAAAoa,EAAAzsB,MAAAE,EAAA,IACAA;AAEA,OAAAusB,CACA,GACG,CACHoM,IAAA,UACAt2B,MAAA,SAAAkqB,GACA,QAAAvsB,EAAA,EAAsBA,EAAAusB,EAAAtsB,OAAgBD,IAAA,GAAAusB,EAAAvsB,GAAAwD,MAAA9D,KAAA,OAAA6sB,EAAAvsB,EACtC,GACG,CACH24B,IAAA,aACAt2B,MAAA,SAAAm3E,GACAitZ,GAAA/me,KAAA85E,QAAA,OAAA95E,KAAAoI,KACA,GACG,CACH6wB,IAAA,WACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,KAAA8yQ,SAAAjpQ,QAAA89C,IAAA,CACA,IACG,EACH1uB,IAAA,UACAt2B,MAAA,SAAA+lY,EAAAzgR,GACA,IAAAhhG,EAAAc,OAAAxjB,OAAA,MACAw8d,EAAA;AAIA,OAHAr4F,EAAAluX,QAAA,SAAApS,EAAA2hW,GACA,OAAA9iV,EAAA7e,GAAA,IAAAs/d,EAAAt/d,EAAA24d,IAAA94W,EAAA8hP,EACA,GACA9iV,CACA,KAEAygd,CACA,CAvDA,GAwDAj+F,GAAA,WACA,SAAAA,EAAA1/B,GACA,IAAA/1N,EAAAh0I;AACA+yI,EAAA/yI,KAAAypY,GACAzpY,KAAA6oY,qBAAA,KACA7oY,KAAAw0J,OAAAzsI,OAAAxjB,OAAA;AACA,IAAAoje,EAAA3ne,KAAA+pW,KAAA;AACA,QAAA7+K,KAAA6+K,EAAA49H,EAAAz8S,GAAA6+K,EAAA7+K;AACAy8S,EAAAxnR,MAAA8uQ,EAAA1hc,KAAAw8U,EAAA5pJ,OAAAwnR,EAAAj/F,MAAAumF,EAAA1hc,KAAAw8U,EAAA2+B,OAAA,IAA2G1oY,KAAAmgN,MAAAgnR,GAAAhwd,QAAAnX,KAAA+pW,KAAA5pJ,MAAAngN,MAC3GA,KAAA0oY,MAAAg/F,GAAAvwd,QAAAnX,KAAA+pW,KAAA2+B,MAAA1oY;AACA,IAAA4ne,EAAA7/c,OAAAxjB,OAAA;AACA,QAAAw+Z,KAAA/ia,KAAAmgN,MAAA,CACA,GAAA4iN,KAAA/ia,KAAA0oY,MAAA,UAAA1rW,WAAA+lY,EAAA;AACA,IAAAj/Z,EAAA9D,KAAAmgN,MAAA4iN,GACA8kE,EAAA/je,EAAAimW,KAAAtoR,SAAA,GACAqmZ,EAAAhke,EAAAimW,KAAA2+B;AAGA,GAFA5kY,EAAAk8Y,aAAA4nF,EAAAC,KAAAD,EAAAC,GAAArD,EAAAtud,MAAA2xd,EAAA7ne,KAAAmgN,QACAr8M,EAAAm6Y,cAAAn6Y,EAAAk8Y,aAAA/B,cACAn6Y,EAAAimW,KAAA8+B,qBAAA,CACA,GAAA7oY,KAAA6oY,qBAAA,UAAA7rW,WAAA;AACA,IAAAl5B,EAAAs6Y,WAAAt6Y,EAAAm0Y,OAAA,UAAAj7W,WAAA;AACAh9B,KAAA6oY,qBAAA/kY,CACA,CACAA,EAAAsje,QAAA,KAAAU,EAAA,KAAAA,EAAAC,GAAA/ne,KAAA8ne,EAAA7vd,MAAA,UAAA6vd,GAAAhke,EAAAm6Y,cAAA,OACA,CACA,QAAA+pF,KAAAhoe,KAAA0oY,MAAA,CACA,IAAAu/F,EAAAjoe,KAAA0oY,MAAAs/F,GACAE,EAAAD,EAAAl+H,KAAAw/B;AACA0+F,EAAAn1N,SAAA,MAAAo1N,EAAA,CAAAD,GAAA,IAAAC,EAAA,GAAAH,GAAA/ne,KAAAkoe,EAAAjwd,MAAA,KACA,CACAjY,KAAAm0Y,aAAA,SAAAnvF,GACA,OAAAtgS,EAAAmkY,SAAA70Q,EAAAgxK,EACA,EACAhlT,KAAAqke,aAAA,SAAAr/K,GACA,OAAAknF,EAAA2c,SAAA70Q,EAAAgxK,EACA,EACAhlT,KAAA2pZ,YAAA3pZ,KAAAmgN,MAAAngN,KAAA+pW,KAAAw+B,SAAA,OACAvoY,KAAAw0J,OAAA2zU,UAAApgd,OAAAxjB,OAAA,KACA,CA8BA,OA7BA2uI,EAAAu2P,EAAA,EACAxwW,IAAA,OACAt2B,MAAA,SAAAmB,GACA,IAAAg2E,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA6uE,EAAA7uE,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACAi3W,EAAA91X,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AACA,oBAAA3tB,IAAA9D,KAAAo3F,SAAAtzF;IAA8D,MAAAA,aAAAqje,IAAA,UAAAnqc,WAAA,sBAAAl5B;AAAyF,GAAAA,EAAAmkH,QAAAjoH,KAAA,UAAAg9B,WAAA,yCAAAl5B,EAAAsE,KAAA,KACvJ,OAAAtE,EAAA2wZ,cAAA36U,EAAA2H,EAAAinT,EACA,GACG,CACHzvW,IAAA,OACAt2B,MAAA,SAAAupJ,EAAAw8O,GACA,IAAA5kY,EAAA9D,KAAAmgN,MAAA98M;AACA,WAAAihe,EAAAxge,IAAAy/d,aAAAr3U,EAAAggP,EAAAq7F,QAAA7+F,GACA,GACG,CACHzvW,IAAA,OACAt2B,MAAA,SAAAmB,EAAAg2E,GAEA,MADA,iBAAAh2E,MAAA9D,KAAA0oY,MAAA5kY,IACAA,EAAAS,OAAAu1E,EACA,GACG,CACH7gD,IAAA,WACAt2B,MAAA,SAAAyF,GACA,IAAA8xN,EAAAl6N,KAAAmgN,MAAA/3M;AACA,IAAA8xN,EAAA,UAAAl9L,WAAA,sBAAA50B;AACA,OAAA8xN,CACA,KAEAuvK,CACA,CArEA;AAsEA,SAAAs+F,GAAA9/W,EAAAygR,GAEA,IADA,IAAAxuK,EAAA,GACA55N,EAAA,EAAkBA,EAAAooY,EAAAnoY,OAAkBD,IAAA,CACpC,IAAA8H,EAAAsgY,EAAApoY,GACA+9G,EAAA4J,EAAAygR,MAAAtgY,GACA8yQ,EAAA78J;AACA,GAAAA,EACA67G,EAAAtyN,KAAAy2G;KAEA,QAAA6sE,KAAAjjE,EAAAygR,MAAA,CACA,IAAA0/F,EAAAngX,EAAAygR,MAAAx9M,IACA,KAAA9iL,GAAAgge,EAAAr+H,KAAA93M,OAAAm2U,EAAAr+H,KAAA93M,MAAAh6I,MAAA,KAAApO,QAAAzB,IAAA,IAAA8xN,EAAAtyN,KAAAszQ,EAAAktN,EACA,CAEA,IAAAltN,EAAA,UAAAhiO,YAAA,uBAAAwvV,EAAApoY,GAAA,IACA,CACA,OAAA45N,CACA,CAOA,IAAA25K,GAAA,WACA,SAAAA,EAAA5rR,EAAA01D,GACA,IAAAu7S,EAAAl5d;AACA+yI,EAAA/yI,KAAA6zY,GACA7zY,KAAAioH,SACAjoH,KAAA29K,QACA39K,KAAAqoe,KAAA,GACAroe,KAAAqK,OAAA;AACA,IAAAi+d,EAAAtoe,KAAAsoe,cAAA;AACA3qT,EAAAnjK,QAAA,SAAAotC,GACA,GAhBA,SAAAA,GACA,aAAAA,EAAA/sB,GACA,CAFA,CAgBA+sB,GACAsxa,EAAAmP,KAAAzge,KAAAggD;KACQ,GAfR,SAAAA,GACA,aAAAA,EAAAj6C,KACA,CAFA,CAeQi6C,GAAA,CACR,IAAAsjI,EAAA,QAAAzqL,KAAAmnD,EAAAj6C,OAAA;AACA26d,EAAAz+d,QAAAqhL,GAAA,GAAAo9S,EAAA1ge,KAAAsjL,GACAguS,EAAA7ud,OAAAzC,KAAAggD,EACA,CACA,GACA5nD,KAAAuoe,gBAAAvoe,KAAAqoe,KAAA5kd,KAAA,SAAA5iB,GACA,iBAAAwkB,KAAAxkB,EAAAg6B,OAAAh6B,EAAAqjB,KAAA;AACA,IAAAA,EAAA+jG,EAAAk4F,MAAAt/M,EAAAqjB;AACA,OAAAA,EAAA87X,aAAAmI,UAAAjkY,EACA,EACA,CAyFA,OAxFAgvH,EAAA2gQ,EAAA,EACA56W,IAAA,QACAt2B,MAAA,SAAAqrY,GACA,IAAAhsY,EAAA4Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACAgmB,EAAA,IAAA4vc,GAAAxoe,KAAAgC;AAEA,OADA42B,EAAA6vc,OAAAz6F,EAAA9B,EAAArjS,KAAA7mG,EAAAurB,KAAAvrB,EAAAyqD,IACA7zB,EAAA8vc,QACA,GACG,CACHzvc,IAAA,aACAt2B,MAAA,SAAAqrY,GACA,IAAAhsY,EAAA4Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACAgmB,EAAA,IAAA4vc,GAAAxoe,KAAAgC;AAEA,OADA42B,EAAA6vc,OAAAz6F,EAAA9B,EAAArjS,KAAA7mG,EAAAurB,KAAAvrB,EAAAyqD,IACAyzV,EAAAyoF,QAAA/vc,EAAA8vc,SACA,GACG,CACHzvc,IAAA,WACAt2B,MAAA,SAAAqrY,EAAAp1W,EAAAqkJ,GACA,QAAA38K,EAAA28K,EAAAj9K,KAAAqoe,KAAAx+d,QAAAozK,GAAA,IAA6D38K,EAAAN,KAAAqoe,KAAA9ne,OAAsBD,IAAA,CACnF,IAAAsnD,EAAA5nD,KAAAqoe,KAAA/ne;AACA,GAAAklB,GAAAwoX,EAAApmV,EAAA/sB,YAAApJ,IAAAm2B,EAAAghb,WAAA56F,EAAA38N,cAAAzpH,EAAAghb,cAAAhhb,EAAAhvB,WAAAiwc,eAAAjhb,EAAAhvB,UAAA,CACA,GAAAgvB,EAAAqgV,SAAA,CACA,IAAAhhX,EAAA2gC,EAAAqgV,SAAA+F;AACA,QAAA/mX,EAAA;AACA2gC,EAAAkyB,MAAA7yD,QAAAwK,CACA,CACA,OAAAm2B,CACA,CACA,CACA,GACG,CACH3uB,IAAA,aACAt2B,MAAA,SAAAuoL,EAAAvoL,EAAAi2B,EAAAqkJ,GACA,QAAA38K,EAAA28K,EAAAj9K,KAAAqK,OAAAR,QAAAozK,GAAA,IAA+D38K,EAAAN,KAAAqK,OAAA9J,OAAwBD,IAAA,CACvF,IAAAsnD,EAAA5nD,KAAAqK,OAAA/J,GACAqN,EAAAi6C,EAAAj6C;AACA,QAAAA,EAAA9D,QAAAqhL,IAAAtjI,EAAAhvB,YAAAiwc,eAAAjhb,EAAAhvB,UAAAjrB,EAAApN,OAAA2qL,EAAA3qL,SAAA,IAAAoN,EAAAqkC,WAAAk5I,EAAA3qL,SAAAoN,EAAAvN,MAAA8qL,EAAA3qL,OAAA,IAAAoC,IAAA,CACA,GAAAilD,EAAAqgV,SAAA,CACA,IAAAhhX,EAAA2gC,EAAAqgV,SAAAtlY;AACA,QAAAskB,EAAA;AACA2gC,EAAAkyB,MAAA7yD,QAAAwK,CACA,CACA,OAAAm2B,CANA,CAOA,CACA,IACG,EACH3uB,IAAA,cACAt2B,MAAA,SAAAslH,GACA,IAAAhhG,EAAA;AACA,SAAAmzX,EAAAxyV,GAGA,IAFA,IAAA8rF,EAAA,MAAA9rF,EAAA8rF,SAAA,GAAA9rF,EAAA8rF,SACApzI,EAAA,EACeA,EAAA2mB,EAAA1mB,OAAmBD,IAAA,CAClC,IAAA24F,EAAAhyE,EAAA3mB;AAEA,IADA,MAAA24F,EAAAy6C,SAAA,GAAAz6C,EAAAy6C,UACAA,EAAA,KACA,CACAzsH,EAAAnd,OAAAxJ,EAAA,EAAAsnD,EACA,CACA,IAAA0va,EAAA,SAAAlvd,GACA,IAAAu1K,EAAA11D,EAAAygR,MAAAtgY,GAAA2hW,KAAAk/B;AACAtrN,KAAAnjK,QAAA,SAAAotC,GACAwyV,EAAAxyV,EAAAiwG,GAAAjwG,IACAA,EAAAy2D,MAAAz2D,EAAAkpD,QAAAlpD,EAAA6kW,YAAA7kW,EAAAy2D,KAAAj2G,EACA,EACA;AACA,QAAAA,KAAA6/G,EAAAygR,MACA4uF,EAAAlvd;AAEA,IAAA0ge,EAAA,SAAAxwR,GACA,IAAA36B,EAAA11D,EAAAk4F,MAAA7H,GAAAyxJ,KAAAk/B;AACAtrN,KAAAnjK,QAAA,SAAAotC,GACAwyV,EAAAxyV,EAAAiwG,GAAAjwG,IACAA,EAAA1jC,MAAA0jC,EAAAkpD,QAAAlpD,EAAAy2D,OAAAz2D,EAAA1jC,KAAAo0L,EACA,EACA;AACA,QAAAA,KAAArwF,EAAAk4F,MACA2oR,EAAAxwR;AAEA,OAAArxL,CACA,GACG,CACHgS,IAAA,aACAt2B,MAAA,SAAAslH,GACA,OAAAA,EAAAusC,OAAAu0U,YAAA9gX,EAAAusC,OAAAu0U,UAAA,IAAAl1F,EAAA5rR,EAAA4rR,EAAAm1F,YAAA/gX,IACA,KAEA4rR,CACA,CAjHA,GAkHAo1F,GAAA,CACAC,WACAC,WACAC,SACAltE,cACA3uZ,QACAiza,UACAl2V,MACA++Y,OACAC,MACAC,YACAC,cACAC,UACAztK,UACAxyN,QACAquR,MACAC,MACA4xG,MACAC,MACAC,MACAC,MACAvud,UACAwud,UACAzrb,MACA4kP,MACA8mM,YACAC,MACAn7Z,UACAhqE,KACAole,OACAjkI,WACA0tD,SACAw2E,SACAC,OAEAC,GAAA,CACAh1Z,QACA20Z,YACA1ib,UACAlG,UACAxzC,SACA4vJ,UAEA8sU,GAAA,CACAL,MACAG;AAKA,SAAAG,GAAAxme,EAAAw3Y,EAAA3rH,GACA,aAAA2rH,KAJA,EAIA,aAAAA,EAHA,EAGA,GACAx3Y,GAAA,OAAAA,EAAA8kY,WAAA2hG,GAAA,EAAA56M,CACA,CACA,IAAA66M,GAAA,WACA,SAAAA,EAAA1me,EAAAg2E,EAAA4uT,EAAA+hG,EAAA5tc,EAAA76B,GACA+wI,EAAA/yI,KAAAwqe,GACAxqe,KAAA8D,OACA9D,KAAA85E,QACA95E,KAAA0oY,QACA1oY,KAAAyqe,QACAzqe,KAAAgC,UACAhC,KAAAyhF,QAAA,GACAzhF,KAAA0qe,YAAAx+F,EAAArjS,KACA7oG,KAAA68B,UAfA,EAeA76B,EAAA,KAAA8B,EAAAk8Y,aACA,CA6CA,OA5CA9sQ,EAAAs3V,EAAA,EACAvxc,IAAA,eACAt2B,MAAA,SAAAuhB,GACA,IAAAlkB,KAAA68B,MAAA,CACA,IAAA78B,KAAA8D,KAAA;AACA,IAAA4ja,EAAA1na,KAAA8D,KAAAk8Y,aAAAwnF,WAAAxpL,EAAAzwR,KAAArJ;AACA,IAAAwjZ,EAEU,CACV,IACAvgJ,EADAjoQ,EAAAlf,KAAA8D,KAAAk8Y;AAEA,OAAA74H,EAAAjoQ,EAAAwsY,aAAAxnY,EAAApgB,QACA9D,KAAA68B,MAAA3d,EACAioQ,GAEA,IAEA,CAVAnnR,KAAA68B,MAAA78B,KAAA8D,KAAAk8Y,aAAAgkF,cAAAt8D,EAWA,CACA,OAAA1na,KAAA68B,MAAA6uX,aAAAxnY,EAAApgB,KACA,GACG,CACHm1B,IAAA,SACAt2B,MAAA,SAAAy+d,GACA,KA3CA,EA2CAphe,KAAAgC,SAAA,CACA,IACAmI,EADA+lL,EAAAlwL,KAAAyhF,QAAAzhF,KAAAyhF,QAAAlhF,OAAA;AAEA,GAAA2vL,KAAAy6M,SAAAxgY,EAAA,oBAAA1J,KAAAyvL,EAAA7sL,OAAA,CACA,IAAAA,EAAA6sL;AACAA,EAAA7sL,KAAA9C,QAAA4J,EAAA,GAAA5J,OAAAP,KAAAyhF,QAAAkwE,MAAkE3xJ,KAAAyhF,QAAAzhF,KAAAyhF,QAAAlhF,OAAA,GAAA8C,EAAAo9d,SAAAp9d,OAAAjD,MAAA,EAAAiD,OAAA9C,OAAA4J,EAAA,GAAA5J,QAClE,CACA,CACA,IAAAkhF,EAAAu8N,EAAAzwR,KAAAvtB,KAAAyhF;AAEA,OADA2/Y,GAAAphe,KAAA68B,QAAA4kD,IAAA6vH,OAAAtxM,KAAA68B,MAAA2qc,WAAAxpL,EAAA1gN,YACAt9F,KAAA8D,KAAA9D,KAAA8D,KAAAS,OAAAvE,KAAA85E,MAAA2H,EAAAzhF,KAAA0oY,OAAAjnT,CACA,GACG,CACHxoD,IAAA,gBACAt2B,MAAA,SAAAuhB,GACA,OAAAlkB,KAAA8D,KAAA9D,KAAA8D,KAAAm6Y,cACAj+Y,KAAAyhF,QAAAlhF,OAAAP,KAAAyhF,QAAA,GAAA28T,SACAl6X,EAAA1W,aAAAy7d,GAAAp2d,eAAAqR,EAAA1W,WAAA4W,SAAAC,cACA,KAEAmmd,CACA,CAzDA,GA0DAhC,GAAA,WACA,SAAAA,EAAAnvV,EAAAr3I,EAAAynL,GACA12C,EAAA/yI,KAAAwoe,GACAxoe,KAAAq5I,SACAr5I,KAAAgC,UACAhC,KAAAypL,SACAzpL,KAAAquE,KAAA,EACAruE,KAAA2qe;AACA,IACAC,EADAriG,EAAAvmY,EAAAumY,QAEAsiG,EAAAP,GAAA,KAAAtoe,EAAAs5Y,mBAAA,IAAA7xN,EAzEA,EAyEA;AACAmhT,EAAAriG,EAAA,IAAAiiG,GAAAjiG,EAAAzkY,KAAAykY,EAAAzuT,MAAAoyT,EAAArjS,QAAA7mG,EAAA8oe,UAAAviG,EAAAzkY,KAAAk8Y,aAAA6qF,GAAuJ,IAAAL,GAAA/gT,EAAA,KAA6FpwC,EAAApxB,OAAA0hS,YAA7F,KAAAzd,EAAArjS,QAAA,KAAAgiY,GACvJ7qe,KAAAmgN,MAAA,CAAAyqR,GACA5qe,KAAAq2B,KAAAr0B,EAAA+oe,cACA/qe,KAAAgre,aACA,CAoXA,OAnXA93V,EAAAs1V,EAAA,EACAvvc,IAAA,MACA3M,IAAA,WACA,OAAAtsB,KAAAmgN,MAAAngN,KAAAquE,KACA,GACG,CACHp1C,IAAA,SACAt2B,MAAA,SAAAqrY,EAAAtF,GACA,GAAAsF,EAAA52S,SAAAp3F,KAAAire,YAAAj9F,EAAAtF,GAA0D,GAAAsF,EAAA52S,UAAAp3F,KAAAkre,WAAAl9F,EAAAtF,EAC1D,GACG,CACHzvW,IAAA,cACAt2B,MAAA,SAAAqrY,EAAAtF,GACA,IAAA/lY,EAAAqrY,EAAAv2S,UACA5pF,EAAA7N,KAAA6N,IACAs9d,EA/FA,EA+FAt9d,EAAA7L,QAAA,OAAAhC,KAAA2qe,kBAhGA,EAgGA98d,EAAA7L,SAAA,EACAimH,EAAAjoH,KAAAq5I,OAAApxB;AACA,YAAAkjX,GAAAt9d,EAAAu9d,cAAAp9F,IAAA,mBAAA3oX,KAAA1iB,GAAA,CACA,GAAAwoe,EAOU,YAAAA,EACVxoe,IAAA8d,QAAA;KACU,GAAAwnG,EAAA4gR,sBAAA,SAAAxjX,KAAA1iB,IAAA3C,KAAA6N,IAAA69Y,aAAAzjS,EAAA4gR,qBAAAtkY,UAAA,CAEV,IADA,IAAA2O,EAAAvQ,EAAAsV,MAAA,YACA3X,EAAA,EAA0BA,EAAA4S,EAAA3S,OAAkBD,IAC5CA,GAAAN,KAAAqre,WAAApjX,EAAA4gR,qBAAAtkY,SAAAmkY,MACAx1X,EAAA5S,IAAAN,KAAAqre,WAAApjX,EAAA5kH,KAAA6P,EAAA5S,IAAAooY,GAAA,KAAArjX,KAAAnS,EAAA5S;AAEAqC,EAAA,EACA,MACAA,IAAA8d,QAAA;KAfA,GADA9d,IAAA8d,QAAA,yBACA,mBAAA4E,KAAA1iB,IAAA3C,KAAAquE,MAAAruE,KAAAmgN,MAAA5/M,OAAA,GACA,IAAA0qY,EAAAp9X,EAAA4zE,QAAA5zE,EAAA4zE,QAAAlhF,OAAA,GACA+qe,EAAAt9F,EAAAljH,kBACAmgH,GAAAqgG,GAAA,MAAAA,EAAAlnd,UAAA6mX,EAAAN,QAAA,mBAAAtlX,KAAA4lX,EAAA5nY,SAAAV,IAAAvC,MAAA,GACA,CAaAuC,GAAA3C,KAAAqre,WAAApjX,EAAA5kH,KAAAV,GAAA+lY,GAAA,KAAArjX,KAAA1iB,IACA3C,KAAAure,WAAAv9F,EACA,MACAhuY,KAAAwre,WAAAx9F,EAEA,GACG,CACH/0W,IAAA,aACAt2B,MAAA,SAAAqrY,EAAAtF,EAAA+iG,GACA,IAAAC,EAAA1re,KAAA2qe,gBACA98d,EAAA7N,KAAA6N,KACA,OAAAmgY,EAAAr6V,SAAA,MAAAtuB,KAAA2oX,EAAArgY,OAAAqgY,EAAArgY,MAAAg+d,eAAA3re,KAAA2qe;AACA,IACAiB,EADAxje,EAAA4lY,EAAA5pX,SAAAC;AAEAgmd,GAAAx3d,eAAAzK,IAAApI,KAAAq5I,OAAAkvV,gBAkUA,SAAAv6F,GACA,QAAAlnO,EAAAknO,EAAAvnY,WAAA+rS,EAAA,KAAoD1rI,EAAOA,IAAAj9E,YAAA,CAC3D,IAAAzhF,EAAA,GAAA0+J,EAAA1vE,SAAA0vE,EAAA1iJ,SAAAC,cAAA;AACAjc,GAAAiie,GAAAx3d,eAAAzK,IAAAoqS,GACAA,EAAA9tS,YAAAoiK,GACAA,EAAA0rI,GACM,MAAApqS,EACNoqS,EAAA1rI,EACM1+J,IACNoqS,EAAA,KAEA,CACA,CAZA,CAlUAw7F;AACA,IAAApmV,EAAA5nD,KAAAgC,QAAA6pe,cAAA7re,KAAAgC,QAAA6pe,aAAA79F,KAAA49F,EAAA5re,KAAAq5I,OAAAyyV,SAAA99F,EAAAhuY,KAAAyre;AACA1yO,EAAA,GAAAnxM,IAAAkpD,OAAAs5X,GAAAv3d,eAAAzK,GACApI,KAAAwre,WAAAx9F,GACAhuY,KAAA+re,eAAA/9F,EAAAtF;KACQ,IAAA9gV,KAAA/4B,MAAA+4B,EAAAokb,YAAA,CACRpkb,KAAAokb,YAAAhse,KAAAquE,KAAAtrE,KAAA+b,IAAA,EAAA9e,KAAAquE,KAAA,GAA6EzmB,KAAA/4B,KAAAuoE,WAAA42S,EAAApmV,EAAA/4B;AAC7E,IAAAo9c,EACAC,EAAAlse,KAAAgre;AACA,GAAA/B,GAAAp2d,eAAAzK,GACAyF,EAAA4zE,QAAAlhF,QAAAsN,EAAA4zE,QAAA,GAAA28T,UAAAp+Y,KAAAquE,OACAruE,KAAAquE,OACAxgE,EAAA7N,KAAA6N,KAEAo+d,KACAp+d,EAAA/J,OAAA9D,KAAAgre;KACU,IAAAh9F,EAAAvnY,WAAA,CACVzG,KAAAmse,aAAAn+F,EAAAtF;AACA,MAAA3vI,CACA,CACA,IAAAqzO,EAAAxkb,KAAA/4B,KAAA65W,EAAA1oY,KAAAqse,WAAAr+F,EAAAtF;AACA0jG,GAAApse,KAAAyoe,OAAAz6F,EAAAo+F,GACAH,GAAAjse,KAAAise,KAAAp+d,GACA7N,KAAAgre,WAAAkB,CACA,KAAQ,CACR,IAAAI,EAAAtse,KAAAqse,WAAAr+F,EAAAtF;AACA4jG,GAAAtse,KAAAuse,iBAAAv+F,EAAApmV,EAAA0kb,OAAA1kb,EAAAyqW,UAAAu5E,OAAAn6c,EACA,CACAzxB,KAAA2qe,gBAAAe,CACA,GACG,CACHzyc,IAAA,eACAt2B,MAAA,SAAAqrY,EAAAtF,GACA,MAAAsF,EAAA5pX,UAAApkB,KAAA6N,IAAA/J,MAAA9D,KAAA6N,IAAA/J,KAAAm6Y,eAAAj+Y,KAAAire,YAAAj9F,EAAAxpX,cAAA5f,eAAA,MAAA8jY,EACA,GACG,CACHzvW,IAAA,iBACAt2B,MAAA,SAAAqrY,EAAAtF,GACA,MAAAsF,EAAA5pX,UAAApkB,KAAA6N,IAAA/J,MAAA9D,KAAA6N,IAAA/J,KAAAm6Y,eAAAj+Y,KAAAwse,UAAAxse,KAAAq5I,OAAApxB,OAAA5kH,KAAA,KAAAqlY,KACA,GACG,CACHzvW,IAAA,aACAt2B,MAAA,SAAAqrY,EAAAtF,GACA,IAAA+jG,EAAAzse,KACAqK,EAAA2jY,EAAArgY;AACA,GAAAtD,KAAA9J,OAAA,QAAAD,EAAA,EAAmDA,EAAAN,KAAAq5I,OAAAivV,cAAA/ne,OAAsCD,IAAA,CACzF,IAAA8H,EAAApI,KAAAq5I,OAAAivV,cAAAhoe,GACAqC,EAAA0H,EAAAghF,iBAAAjjF;AACA,GAAAzF,EAoBA,IAnBA,IAkBAi3I,EAlBA8yV,EAAA,SAAAC,GACA,IAAA/kb,EAAA6kb,EAAApzV,OAAAuzV,WAAAxke,EAAAzF,EAAA8pe,EAAAE;AACA,OAAA/kb,EAIAA,EAAAkpD,OAAA,CACAx/F,EAAA,OAEAo3X,EAAA9gV,EAAA6kW,UAAA/jB,EAAAniX,OAAA,SAAApc,GACA,OAAAy9C,EAAA6kW,UAAAtiZ,EACA,GAAiBu+X,EAAAj2X,OAAAg6d,EAAApzV,OAAApxB,OAAAygR,MAAA9gV,EAAAy2D,MAAA95G,OAAAqjD,EAAAkyB,aACjBlyB,EAAAyqW,WACAp1O,EAAA0vT,EACA,QAEA1vT,EAJA0vT,EAAA/kb,KATAq1H,EAAA0vT,EACA,EAaA,EAEA1vT,OAAAxrJ,EAEA,KADAmoH,EAAA8yV,EAAAzvT,KAEA,GAAArjC,EAAA,OAAAA,EAAAtoI,CAGA,CACA,OAAAo3X,CACA,GACG,CACHzvW,IAAA,mBACAt2B,MAAA,SAAAqrY,EAAApmV,EAAA8gV,EAAAmkG,GACA,IACAZ,EAAA70Y,EADA01Y,EAAA9se;AAEA,GAAA4nD,EAAA1jC,KAEA,IADAkzE,EAAAp3F,KAAAq5I,OAAApxB,OAAAk4F,MAAAv4J,EAAA1jC,OACA+zX,OAMUj4Y,KAAAqre,WAAAj0Y,EAAA7yF,OAAAqjD,EAAAkyB,OAAA4uT,EAAA,MAAAsF,EAAA5pX,WACVpkB,KAAAmse,aAAAn+F,EAAAtF;IAPA,CACA,IAAAruG,EAAAr6R,KAAAuqR,MAAAnzL,EAAAxvC,EAAAkyB,OAAA,KAAA4uT,EAAA9gV,EAAA0zV;AACAjhH,IACA4xM,KACAvjG,EAAAruG,EAEA,KAGQ,CACR,IAAA6iH,EAAAl9Y,KAAAq5I,OAAApxB,OAAAygR,MAAA9gV,EAAAy2D;AACAqqR,IAAAj2X,OAAAyqY,EAAA34Y,OAAAqjD,EAAAkyB,OACA,CACA,IAAAizZ,EAAA/se,KAAA6N;AACA,GAAAupF,KAAA6gT,OACAj4Y,KAAAwre,WAAAx9F;KACQ,GAAA6+F,EACR7se,KAAAkre,WAAAl9F,EAAAtF,EAAAmkG;KACQ,GAAAjlb,EAAAmjW,WACR/qZ,KAAAwre,WAAAx9F,GACApmV,EAAAmjW,WAAA/c,EAAAhuY,KAAAq5I,OAAApxB,QAAAztG,QAAA,SAAA0J,GACA,OAAA4od,EAAAzB,WAAAnnd,EAAAwkX,KACA;IACQ,CACR,IAAAoe,EAAA9Y;AACA,iBAAApmV,EAAAolb,eAAAlmF,EAAA9Y,EAAAp0T,cAAAhyB,EAAAolb,gBAAwG,mBAAAplb,EAAAolb,eAAAlmF,EAAAl/V,EAAAolb,eAAAh/F,GAAyFpmV,EAAAolb,iBAAAlmF,EAAAl/V,EAAAolb,gBACjMhte,KAAAite,WAAAj/F,EAAA8Y,MACA9mZ,KAAAyoe,OAAA3hF,EAAApe,GACA1oY,KAAAite,WAAAj/F,EAAA8Y,KACA,CACAmlF,GAAAjse,KAAAise,KAAAc,IAAA/se,KAAAquE,MACA,GACG,CACHp1C,IAAA,SACAt2B,MAAA,SAAAmlB,EAAA4gX,EAAA9tK,EAAAmtH,GAEA,IADA,IAAAh/U,EAAA6xN,GAAA,EACAozK,EAAApzK,EAAA9yM,EAAAwlM,WAAAsN,GAAA9yM,EAAArhB,WAAA0Y,EAAA,MAAA4oU,EAAA,KAAAjgU,EAAAwlM,WAAAy6H,GAAkJimD,GAAA7uX,EAAY6uX,IAAAnkT,cAAA9gF,EAC9J/I,KAAAkte,YAAApld,EAAA/e,GACA/I,KAAAmte,OAAAn/F,EAAAtF;AAEA1oY,KAAAkte,YAAApld,EAAA/e,EACA,GACG,CACHkwB,IAAA,YACAt2B,MAAA,SAAAuhB,EAAAwkX,EAAA0kG,GAEA,IADA,IAAAtle,EAAAmke,EACAr1F,EAAA52Y,KAAAquE,KAAAg/Z,EAAA,EAA+Cz2F,GAAA,EAAYA,IAAA,CAC3D,IAAA3oO,EAAAjuK,KAAAmgN,MAAAy2L,GACA02F,EAAAr/T,EAAAy9O,aAAAxnY;AACA,GAAAopd,KAAAxle,KAAAvH,OAAA+se,EAAA/se,OAAA8se,KACAvle,EAAAwle,EACArB,EAAAh+T,GACAq/T,EAAA/se,QAAA;AAEA,GAAA0tK,EAAAw8T,MAAA,CACA,GAAA2C,EAAA;AACAC,GAAA,CACA,CACA,CACA,IAAAvle,EAAA;AACA9H,KAAAise;AACA,QAAA3re,EAAA,EAAsBA,EAAAwH,EAAAvH,OAAkBD,IAAAooY,EAAA1oY,KAAAute,WAAAzle,EAAAxH,GAAA,KAAAooY;AACxC,OAAAA,CACA,GACG,CACHzvW,IAAA,aACAt2B,MAAA,SAAAuhB,EAAAwkX,EAAA0kG,GACA,GAAAlpd,EAAAk6X,UAAAp+Y,KAAAgre,aAAAhre,KAAA6N,IAAA/J,KAAA,CACA,IAAAwlK,EAAAtpK,KAAAwte;AACAlkU,IAAAo/N,EAAA1oY,KAAAute,WAAAjkU,EAAA,KAAAo/N,GACA,CACA,IAAA0jG,EAAApse,KAAAwse,UAAAtod,EAAAwkX,EAAA0kG;AACA,GAAAhB,EAAA,CACApse,KAAAyte;AACA,IAAA5/d,EAAA7N,KAAA6N;AACAA,EAAAgvB,QAAAhvB,EAAAgvB,MAAAhvB,EAAAgvB,MAAAsrX,UAAAjkY,EAAApgB;AACA,IAEAi1I,EAFA20V,EAAAxhG,EAAArjS,KACAswC,EAj8EA,SAAAv4I,GAAyD,IAAAW,EAAA,oBAAA45E,QAAAv6E,EAAAu6E,OAAA2c,WAAAl3F,EAAA;AAAiF,IAAAW,EAAA,CAAW,GAAAsS,MAAA1T,QAAAS,KAAAW,EACrJ,SAAAX,EAAA+se,GAAkD,GAAA/se,EAAA,CAAgB,oBAAAA,EAAA,OAAAkxI,EAAAlxI,EAAA+se;AAAgE,IAAAnte,EAAAunB,OAAA9iB,UAAAoL,SAAAzF,KAAAhK,GAAAR,MAAA;AAAqH,MAA7D,WAAAI,GAAAI,EAAA06E,cAAA96E,EAAAI,EAAA06E,YAAAlzE,MAA6D,QAAA5H,GAAA,QAAAA,EAAAqT,MAAA0Z,KAAA3sB,GAAsD,cAAAJ,GAAA,2CAAA6kB,KAAA7kB,GAAAsxI,EAAAlxI,EAAA+se,QAAA,CAA3P,CAA2P,CAA7S,CADqJ/se,IAAA,CAAwHW,IAAAX,EAAAW;AAAgB,IAAAjB,EAAA,EAAWigF,EAAA;AAAyB,OAAS/9E,EAAA+9E,EAAA//E,EAAA,WAAwB,OAAAF,GAAAM,EAAAL,OAAA,CAA4B8lF,SAAc,CAASA,QAAA1jF,MAAA/B,EAAAN,KAAA,EAA+BD,EAAA,SAAA4d,GAAsB,MAAAA,CAAA,EAAW/R,EAAAq0E,EAAA,CAAY,UAAA13B,UAAA,yIAAgK,IAAA3V,EAAA06b,KAAAC;AAAkD,OAASrre,EAAA,WAAkBjB,IAAAqJ,KAAAhK,EAAA,EAAkBJ,EAAA,WAAoB,IAAAqsI,EAAAtrI,EAAA03F;AAAoD,OAA9B20Y,EAAA/gW,EAAAxmD,KAA8BwmD,CAAA,EAAcxsI,EAAA,SAAAyte,GAAuBD,KAAe36b,EAAA46b,CAAA,EAAY5he,EAAA,WAAoB,IAAM0he,GAAA,MAAArse,EAAA23F,QAAA33F,EAAA23F,QAAA,CAAiE,QAAU,GAAA20Y,EAAA,MAAA36b,CAAA,IAA78B,CAi8EAk5b,EAAA35d,OAAAyR,EAAAwkX;AAEA,IACA,IAAAvvP,EAAA32I,MAA8Bu2I,EAAAI,EAAA34I,KAAA6lF,MAA8B,CAC5D,IAAAl8E,EAAA4uI,EAAAp2I,OACAkL,EAAA/J,KAAA+J,EAAA/J,KAAAo6Y,eAAA/zY,EAAArG,MAAAiqe,GAAA5je,EAAArG,KAAAogB,EAAApgB,SAAA4pe,EAAAvje,EAAAi6d,SAAAsJ,GACA,CACA,CAAU,MAAAx6b,GACVimG,EAAA94I,EAAA6yC,EACA,CAAU,QACVimG,EAAAjtI,GACA,CAEA,OADA2B,EAAA4zE,QAAA75E,KAAAsc,EAAAm6F,KAAAqvX,MAEA,CACA,QACA,GACG,CACHz0c,IAAA,QACAt2B,MAAA,SAAAmB,EAAAg2E,EAAA4uT,EAAAyiG,GACA,IAAAiB,EAAApse,KAAAwse,UAAA1oe,EAAAS,OAAAu1E,GAAA4uT;AAEA,OADA0jG,MAAApse,KAAAute,WAAAzpe,EAAAg2E,EAAA4uT,KAAAyiG,IACAiB,CACA,GACG,CACHnzc,IAAA,aACAt2B,MAAA,SAAAmB,EAAAg2E,EAAA4uT,GACA,IAAA+hG,EAAA73d,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAu4d,EAAAv4d,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AACAzxB,KAAAyte;AACA,IAAA5/d,EAAA7N,KAAA6N;AACAA,EAAAgvB,MAAAhvB,EAAAgvB,OAAAhvB,EAAAgvB,MAAAsrX,UAAArkZ;AACA,IAAA9B,EAAAsoe,GAAAxme,EAAAqne,EAAAt9d,EAAA7L;AAnUA,EAoUA6L,EAAA7L,SAAA,GAAA6L,EAAA4zE,QAAAlhF,SAAAyB,GApUA;AAqUA,IAAAgse,EAAA9hG,EAAArjS;AAUA,OATA6/R,IAAAniX,OAAA,SAAApc,GACA,QAAA0D,EAAA/J,KAAA+J,EAAA/J,KAAAo6Y,eAAA/zY,EAAArG,MAAAiqe,GAAA5je,EAAArG,WACAkqe,EAAA7je,EAAAi6d,SAAA4J,MAIA,GACAhue,KAAAmgN,MAAAv4M,KAAA,IAAA4ie,GAAA1me,EAAAg2E,EAAAk0Z,EAAAvD,EAAA,KAAAzoe,IACAhC,KAAAquE,OACAq6T,CACA,GACG,CACHzvW,IAAA,aACAt2B,MAAA,WACA,IAAAy+d,EAAAxud,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAtS,EAAAN,KAAAmgN,MAAA5/M,OAAA;AACA,GAAAD,EAAAN,KAAAquE,KAAA,CACA,KAAe/tE,EAAAN,KAAAquE,KAAe/tE,IAAAN,KAAAmgN,MAAA7/M,EAAA,GAAAmhF,QAAA75E,KAAA5H,KAAAmgN,MAAA7/M,GAAAooe,OAAAtH;AAC9Bphe,KAAAmgN,MAAA5/M,OAAAP,KAAAquE,KAAA,CACA,CACA,GACG,CACHp1C,IAAA,SACAt2B,MAAA,WAGA,OAFA3C,KAAAquE,KAAA,EACAruE,KAAAyte,WAAAzte,KAAAypL,QACAzpL,KAAAmgN,MAAA,GAAAuoR,UAAA1oe,KAAAypL,SAAAzpL,KAAAgC,QAAAise,SACA,GACG,CACHh1c,IAAA,OACAt2B,MAAA,SAAA8pD,GACA,QAAAnsD,EAAAN,KAAAquE,KAA8B/tE,GAAA,EAAQA,IAAA,CACtC,GAAAN,KAAAmgN,MAAA7/M,IAAAmsD,EAEA,OADAzsD,KAAAquE,KAAA/tE;AAEUN,KAAA2qe,kBACV3qe,KAAAmgN,MAAA7/M,GAAA0B,SA5WA,EA8WA,CACA,QACA,GACG,CACHi3B,IAAA,aACA3M,IAAA,WACAtsB,KAAAyte;AAEA,IADA,IAAAnzb,EAAA,EACAh6C,EAAAN,KAAAquE,KAA8B/tE,GAAA,EAAQA,IAAA,CAEtC,IADA,IAAAmhF,EAAAzhF,KAAAmgN,MAAA7/M,GAAAmhF,QACAkE,EAAAlE,EAAAlhF,OAAA,EAAyColF,GAAA,EAAQA,IAAArrC,GAAAmnC,EAAAkE,GAAA+sT;AACjDpyY,GAAAg6C,GACA,CACA,OAAAA,CACA,GACG,CACHrhB,IAAA,cACAt2B,MAAA,SAAAmlB,EAAA9J,GACA,GAAAhe,KAAAq2B,KAAA,QAAA/1B,EAAA,EAAqCA,EAAAN,KAAAq2B,KAAA91B,OAAsBD,IAC3DN,KAAAq2B,KAAA/1B,GAAA4jB,MAAA4D,GAAA9nB,KAAAq2B,KAAA/1B,GAAA0d,YAAAhe,KAAAq2B,KAAA/1B,GAAAg6C,IAAAt6C,KAAAusY,WAEA,GACG,CACHtzW,IAAA,aACAt2B,MAAA,SAAAmlB,GACA,GAAA9nB,KAAAq2B,KAAA,QAAA/1B,EAAA,EAAqCA,EAAAN,KAAAq2B,KAAA91B,OAAsBD,IAC3D,MAAAN,KAAAq2B,KAAA/1B,GAAAg6C,KAAA,GAAAxyB,EAAAsvE,UAAAtvE,EAAAtR,SAAAxW,KAAAq2B,KAAA/1B,GAAA4jB,QAAAlkB,KAAAq2B,KAAA/1B,GAAAg6C,IAAAt6C,KAAAusY,WAEA,GACG,CACHtzW,IAAA,aACAt2B,MAAA,SAAAmlB,EAAA25D,EAAAu7F,GACA,GAAAl1J,GAAA25D,GAAAzhF,KAAAq2B,KAAA,QAAA/1B,EAAA,EAA0DA,EAAAN,KAAAq2B,KAAA91B,OAAsBD,IAChF,MAAAN,KAAAq2B,KAAA/1B,GAAAg6C,KAAA,GAAAxyB,EAAAsvE,UAAAtvE,EAAAtR,SAAAxW,KAAAq2B,KAAA/1B,GAAA4jB,OACAu9D,EAAAysZ,wBAAAlue,KAAAq2B,KAAA/1B,GAAA4jB,OACA84J,EAAA,OAAAh9K,KAAAq2B,KAAA/1B,GAAAg6C,IAAAt6C,KAAAusY,WAGA,GACG,CACHtzW,IAAA,aACAt2B,MAAA,SAAAsrZ,GACA,GAAAjuZ,KAAAq2B,KAAA,QAAA/1B,EAAA,EAAqCA,EAAAN,KAAAq2B,KAAA91B,OAAsBD,IAC3DN,KAAAq2B,KAAA/1B,GAAA4jB,MAAA+pY,IAAAjuZ,KAAAq2B,KAAA/1B,GAAAg6C,IAAAt6C,KAAAusY,YAAA0hB,EAAAx2T,UAAAl3F,OAAAP,KAAAq2B,KAAA/1B,GAAA0d,QAEA,GACG,CACHib,IAAA,iBACAt2B,MAAA,SAAAi2B,GACA,IAAAu1c,EAAAnue;AACA,GAAA44B,EAAA/uB,QAAA,eAAA+uB,EAAA3gB,MAAA,YAAAwL,KAAAzjB,KAAA6oe,eAAA7oe;AACA,IAAA8nD,EAAAlvB,EAAA3gB,MAAA,KACAs2M,EAAAvuN,KAAAgC,QAAA42B,QACAw1c,IAAApue,KAAAypL,QAAA8kC,KAAAzmM,OAAAhkB,MAAA9D,KAAAmgN,MAAA,GAAAr8M,MACAuqe,IAAA9/Q,IAAAqoL,MAAA,MAAAw3F,EAAA;AAgBA,OAfA,SAAAvxc,EAAAv8B,EAAAs2Y,GACA,KAAet2Y,GAAA,EAAQA,IAAA,CACvB,IAAAynD,EAAAD,EAAAxnD;AACA,OAAAynD,EAAA,CACA,GAAAznD,GAAAwnD,EAAAvnD,OAAA,MAAAD,EAAA;AACA,KAAmBs2Y,GAAAy3F,EAAmBz3F,IAAA,GAAA/5W,EAAAv8B,EAAA,EAAAs2Y,GAAA;AACtC,QACA,CACA,IAAA39S,EAAA29S,EAAA,MAAAA,GAAAw3F,EAAAD,EAAAhuR,MAAAy2L,GAAA9yY,KAAAyqN,GAAAqoL,GAAAy3F,EAAA9/Q,EAAArqM,KAAA0yX,EAAAy3F,GAAAvqe,KAAA;AACA,IAAAm1F,KAAA7wF,MAAA2/C,IAAAkxC,EAAAqtY,UAAAv+a,GAAA;AACA6uV,GAEA,CACA,QACA,CAdA,CAeA9uV,EAAAvnD,OAAA,EAAAP,KAAAquE,KACA,GACG,CACHp1C,IAAA,uBACAt2B,MAAA,WACA,IAAAwka,EAAAnna,KAAAgC,QAAA42B;AACA,GAAAuuY,EAAA,QAAAxna,EAAAwna,EAAAvwB,MAAiDj3Y,GAAA,EAAQA,IAAA,CACzD,IAAA0/Y,EAAA8nB,EAAAjjZ,KAAAvkB,GAAA+5Y,eAAAytB,EAAA7nB,WAAA3/Y,IAAA85Y;AACA,GAAA4F,KAAA5R,aAAA4R,EAAAkkF,aAAA,OAAAlkF,CACA,CACA,QAAAj3Y,KAAApI,KAAAq5I,OAAApxB,OAAAk4F,MAAA,CACA,IAAAr8M,EAAA9D,KAAAq5I,OAAApxB,OAAAk4F,MAAA/3M;AACA,GAAAtE,EAAA2pY,aAAA3pY,EAAAy/d,aAAA,OAAAz/d,CACA,CACA,KAEA0ke,CACA,CApYA;AAkZA,SAAAhjd,GAAAwoX,EAAAv2V,GACA,OAAAu2V,EAAAxoX,SAAAwoX,EAAArxL,mBAAAqxL,EAAApxL,uBAAAoxL,EAAAp2K,oBAAAhtN,KAAAojY,EAAAv2V,EACA,CACA,SAAAogH,GAAAhmH,GACA,IAAAgmH,EAAA;AACA,QAAAqzB,KAAAr5I,EAAAgmH,EAAAqzB,GAAAr5I,EAAAq5I;AACA,OAAArzB,CACA,CACA,SAAAk2U,GAAA7wF,EAAA9lT,GACA,IAmBAk3Y,EAnBAnuR,EAAA/oH,EAAA6wB,OAAAk4F,MACAouR,EAAA,WACA,IAAAzmd,EAAAq4L,EAAA/3M;AACA,IAAA0f,EAAAo2X,eAAAhB,GAAA;AACA,IAAA9F,EAAA;AAWA,OAVA,SAAA08E,EAAAj3b,GACAu6W,EAAAxvY,KAAAi1B;AACA,QAAAv8B,EAAA,EAA0BA,EAAAu8B,EAAA45W,UAAqBn2Y,IAAA,CAC/C,IAAAkue,EAAA3xc,EAAA8wV,KAAArtX,GACAwD,EAAA0qe,EAAA1qe,KACAm1F,EAAAu1Y,EAAAv1Y;AACA,GAAAn1F,GAAAszF,EAAA;AACA,GAAAggT,EAAAvtY,QAAAovF,GAAA,GAAA66X,EAAA76X,GAAA,QACA,CACA,CATA,CAUAnxE,EAAAk4X,cAAA,CACA1uY,WADA,CAGA;AAEA,QAAAlJ,KAAA+3M,EAEA,QADAmuR,EAAAC,MAEAD,EAAA,OAAAA,EAAAh9d,CAEA,CACA,IAAA04X,GAAA,WACA,SAAAA,EAAA7pL,EAAAuoL,GACA31P,EAAA/yI,KAAAgqY,GACAhqY,KAAAmgN,QACAngN,KAAA0oY,OACA,CAuGA,OAtGAx1P,EAAA82P,EAAA,EACA/wW,IAAA,oBACAt2B,MAAA,SAAAmnY,GACA,IAAA2kG,EAAAzue,KACAgC,EAAA4Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACApJ,EAAAoJ,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AACAjoB,MAAAmhB,GAAA3oB,GAAA0se;AACA,IAAA7ge,EAAArE,EACAg2J,EAAA;AA4BA,OA3BAsqO,EAAAtvX,QAAA,SAAA0J,GACA,GAAAs7I,EAAAj/J,QAAA2jB,EAAAwkX,MAAAnoY,OAAA,CAGA,IAFA,IAAAioG,EAAA,EACA+9R,EAAA,EACA/9R,EAAAg3D,EAAAj/J,QAAAgmY,EAAAriX,EAAAwkX,MAAAnoY,QAAA,CACA,IAAA04F,EAAA/0E,EAAAwkX,MAAAnC;AACA,GAAAkoG,EAAA/lG,MAAAzvS,EAAAn1F,KAAAsE,MAAA,CAIA,IAAA6wF,EAAA86J,GAAAv0F,EAAAh3D,GAAA,UAAAvP,EAAAn1F,KAAAimW,KAAAy/B,SAAA;AACAhhS,IACA+9R,GAHA,MAFAA,GAMA,CACA,KAAA/9R,EAAAg3D,EAAAj/J,QAAAsN,EAAA2xJ,EAAA7N,MAAA;AACA,KAAA40O,EAAAriX,EAAAwkX,MAAAnoY,QAAA,CACA,IAAAq3C,EAAA1zB,EAAAwkX,MAAAnC,KACAooG,EAAAF,EAAAG,cAAAh3b,EAAA1zB,EAAAk6X,SAAAp8Y;AACA2se,IACAnvU,EAAA53J,KAAA,CAAAgwC,EAAA/pC,IACAA,EAAAnJ,YAAAiqe,EAAA3gG,KACAngY,EAAA8ge,EAAA7nF,YAAA6nF,EAAA3gG,IAEA,CACA,CACAngY,EAAAnJ,YAAA+pe,EAAAI,mBAAA3qd,EAAAliB,GACA,GACAwH,CACA,GACG,CACHyvB,IAAA,qBACAt2B,MAAA,SAAAuhB,EAAAliB,GACA,GAAAkiB,EAAAymX,OAAA,OAAAhgX,GAAA3oB,GAAA4C,eAAAsf,EAAA7gB;AACA,IAAAyre,EAAAC,GAAApkd,GAAA3oB,GAAAhC,KAAAmgN,MAAAj8L,EAAApgB,KAAAsE,MAAA8b,GAAA,KAAAA,EAAA41D,OACAk0T,EAAA8gG,EAAA9gG,IACA8Y,EAAAgoF,EAAAhoF;AACA,GAAAA,EAAA,CACA,GAAA5iY,EAAA+zX,OAAA,UAAAj7W,WAAA;AACAh9B,KAAAkqY,kBAAAhmX,EAAAu9D,QAAAz/E,EAAA8kZ,EACA,CACA,OAAA9Y,CACA,GACG,CACH/0W,IAAA,gBACAt2B,MAAA,SAAAuhB,GAGA,IAFA,IAAAliB,EAAA4Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACAo7X,EAAAhuY,KAAA6ue,mBAAA3qd,EAAAliB,GACA1B,EAAA4jB,EAAAwkX,MAAAnoY,OAAA,EAA0CD,GAAA,EAAQA,IAAA,CAClD,IAAA6mR,EAAAnnR,KAAA4ue,cAAA1qd,EAAAwkX,MAAApoY,GAAA4jB,EAAAk6X,SAAAp8Y;AACAmlR,KACAA,EAAA2/H,YAAA3/H,EAAA6mH,KAAAtpY,YAAAspY,GACAA,EAAA7mH,EAAA6mH,IAEA,CACA,OAAAA,CACA,GACG,CACH/0W,IAAA,gBACAt2B,MAAA,SAAA07G,EAAAzgG,GACA,IAAA5b,EAAA4Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACAs2X,EAAAlpY,KAAA0oY,MAAArqR,EAAAv6G,KAAAsE;AACA,OAAA8gY,GAAA6lG,GAAApkd,GAAA3oB,GAAAknY,EAAA7qR,EAAAzgG,GAAA,KAAAygG,EAAAvkC,MACA,IACG,EACH7gD,IAAA,aACAt2B,MAAA,SAAAgoB,EAAAqkd,GACA,IAAAC,EAAAr8d,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACAs8d,EAAAt8d,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e;AACA,uBAAAu9c,EAAA,CACAhhG,IAAArjX,EAAA/lB,eAAAoqe,IAEAD,GAAApkd,EAAAqkd,EAAAC,EAAAC,EACA,GACG,CACHj2c,IAAA,aACAt2B,MAAA,SAAAslH,GACA,OAAAA,EAAAusC,OAAA26U,gBAAAlnX,EAAAusC,OAAA26U,cAAA,IAAAnlG,EAAAhqY,KAAAove,gBAAAnnX,GAAAjoH,KAAAqve,gBAAApnX,IACA,GACG,CACHhvF,IAAA,kBACAt2B,MAAA,SAAAslH,GACA,IAAAhhG,EAAAqod,GAAArnX,EAAAk4F;AAIA,OAHAl5L,EAAA5jB,OAAA4jB,EAAA5jB,KAAA,SAAA6gB,GACA,OAAAA,EAAA7gB,IACA,GACA4jB,CACA,GACG,CACHgS,IAAA,kBACAt2B,MAAA,SAAAslH,GACA,OAAAqnX,GAAArnX,EAAAygR,MACA,KAEAsB,CACA,CA7GA;AA8GA,SAAAslG,GAAAz9b,GACA,IAAA5qB,EAAA;AACA,QAAA7e,KAAAypC,EAAA,CACA,IAAAq3V,EAAAr3V,EAAAzpC,GAAA2hW,KAAAm/B;AACAA,IAAAjiX,EAAA7e,GAAA8gY,EACA,CACA,OAAAjiX,CACA,CACA,SAAA0D,GAAA3oB,GACA,OAAAA,EAAA2C,UAAA8E,OAAA9E,QACA,CACA,IAAA4qe,GAAA,IAAAp6X;AAyBA,SAAA45X,GAAApkd,EAAAqkd,EAAAC,EAAAC,GACA,MAAAF,EAAA53Y,SAAA,OACA42S,IAAAghG;AAEA,GAAAA,EAAAhhG,KAAA,GAAAghG,EAAAhhG,IAAA52S,SAAA,OAAA43Y;AACA,IACAQ,EADA77b,EAAAq7b,EAAA;AAEA,oBAAAr7b,EAAA,UAAA3W,WAAA;AACA,GAAAkyc,IAAAM,EAhCA,SAAA11Z,GACA,IAAAn3E,EAAA4se,GAAAjjd,IAAAwtD;AAEA,YADAroD,IAAA9uB,GAAA4se,GAAA1id,IAAAitD,EAAAn3E,EAGA,SAAAm3E,GACA,IAAA7yD,EAAA;AAgBA,OAfA,SAAA6sc,EAAAnxd,GACA,GAAAA,GAAA,UAAAqnI,EAAArnI,GACA,GAAAkR,MAAA1T,QAAAwC,GACA,oBAAAA,EAAA,GACAskB,MAAA,IACAA,EAAArf,KAAAjF;KAEA,QAAArC,EAAA,EAA0BA,EAAAqC,EAAApC,OAAkBD,IAAAwzd,EAAAnxd,EAAArC;KAG5C,QAAA4qL,KAAAvoL,EAAAmxd,EAAAnxd,EAAAuoL,GAGA,CAbA,CAcApxG,GACA7yD,CACA,CAlBA,CAHA6yD,IACAn3E,CACA,CAJA,CAgCAuse,KAAAM,EAAA3le,QAAAmle,IAAA,YAAAhyc,WAAA;AACA,IAKA8pX,EALA2oF,EAAA97b,EAAA9pC,QAAA;AACA4le,EAAA,IACAR,EAAAt7b,EAAAvzC,MAAA,EAAAqve,GACA97b,IAAAvzC,MAAAqve,EAAA;AAGA,IAAAzhG,EAAAihG,EAAAtkd,EAAA40R,gBAAA0vL,EAAAt7b,GAAAhpB,EAAAkpD,cAAAlgC,GACAmmC,EAAAk1Z,EAAA,GACA9vd,EAAA;AACA,GAAA46D,GAAA,UAAAkwD,EAAAlwD,IAAA,MAAAA,EAAAsd,WAAAvjF,MAAA1T,QAAA25E,GAEA,QAAA1xE,KADA8W,EAAA,EACA46D,EAAA,SAAAA,EAAA1xE,GAAA,CACA,IAAAsne,EAAAtne,EAAAyB,QAAA;AACA6le,EAAA,EAAA1hG,EAAA2hG,eAAAvne,EAAAhI,MAAA,EAAAsve,GAAAtne,EAAAhI,MAAAsve,EAAA,GAAA51Z,EAAA1xE,IAAqG,SAAAA,GAAA4lY,EAAArgY,MAAAqgY,EAAArgY,MAAA44E,QAAAzM,EAAA1xE,GAAuE4lY,EAAA5/X,aAAAhG,EAAA0xE,EAAA1xE,GAC5K,CAEA,QAAA9H,EAAA4e,EAAsB5e,EAAA0ue,EAAAzue,OAAsBD,IAAA,CAC5C,IAAAwmK,EAAAkoU,EAAA1ue;AACA,OAAAwmK,EAAA,CACA,GAAAxmK,EAAA0ue,EAAAzue,OAAA,GAAAD,EAAA4e,EAAA,UAAA8d,WAAA;AACA,OACAgxW,MACA8Y,WAAA9Y,EAEA,CAAM,oBAAAlnO,EACNknO,EAAAtpY,YAAAimB,EAAA/lB,eAAAkiK;IACM,CACN,IAAA8oU,EAAAb,GAAApkd,EAAAm8I,EAAAmoU,EAAAC,GACA70M,EAAAu1M,EAAA5hG,IACAvjD,EAAAmlJ,EAAA9oF;AAEA,GADA9Y,EAAAtpY,YAAA21R,GACAowD,EAAA,CACA,GAAAq8D,EAAA,UAAA9pX,WAAA;AACA8pX,EAAAr8D,CACA,CACA,CACA,CACA,OACAujD,MACA8Y,aAEA,CACAztW,EAAAmrb,aAAoBA,EACpBnrb,EAAAw6V,UAAiBA,GACjBx6V,EAAA2wV,cAAqBA,GACrB3wV,EAAA2kQ,SAAgBA,EAChB3kQ,EAAA6yV,KAAYA,EACZ7yV,EAAAqub,SAAgBA,GAChBrub,EAAA30B,KAAYA,EACZ20B,EAAA2pb,UAAiBA,EACjB3pb,EAAA8tb,SAAgBA,GAChB9tb,EAAA4nb,aAAoBA,EACpB5nb,EAAAspb,YAAmBA,EACnBtpb,EAAAowV,OAAcA,GACdpwV,EAAA6mW,MAAaA;ACn2Fb,IAAA2yE,EAA2BpnY,EAAQ,MACnCqnY,EAAuBrnY,EAAQ,OAC/BsnY,EAAuBtnY,EAAQ,OAC/BokZ,EAAA,SACAC,EAAA,SACAC,EAAA,SACAtzE,EAAA,CACA3iV,MAAA,CACAu+P,MAAA,CACAzjU,QAAA,EACAi/F,SAAA,WAGAo1R,SAAA,EACApuW,IAAA,KACAotW,SAAA,SAAA+F,GACA,OACA31D,MAAA21D,EAAAzkS,aAAA,UAAAykS,EAAAl/X,aAAA,WAEA,IAEAo6X,MAAA,SAAAhlX,GACA,UAAAA,EAAA41D,MAAAu+P,MAAAw3J,EAAA,OACA3wd,MAAAgF,EAAA41D,MAAAu+P,OACK,EACL,GAEA8jF,EAAA,CACAlzB,SAAA,EACApuW,IAAA,OAEAquW,MAAA,WACA,OAAA4mG,CACA,GAEApjM,EAAA,CACAu8F,SAAA,EACApuW,IAAA,OAEAquW,MAAA,WACA,OAAA6mG,CACA,EACAjnG;AAEA,SAAAlxV,EAAA/F,EAAAyY,GACA,IAAAutG,EAAA;AACA,QAAAqzB,KAAAr5I,EAAAgmH,EAAAqzB,GAAAr5I,EAAAq5I;AACA,QAAA63O,KAAAz4W,EAAAutG,EAAAkrQ,GAAAz4W,EAAAy4W;AACA,OAAAlrQ,CACA,CA8BA,SAAAm4U,EAAA/wb,EAAAi5B,EAAA0gU,GACA,IAAA9+T,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACAq9d,KACA1jJ,EAAAr0Q,EACAvtD,EAAAutD,EAAAkyT,MAAAz/W;AACA,GAAAutD,EAAA0+T,OAAA,GAAA1+T,EAAAkyT,MAAAlmX,KAAAg0D,EAAA0+T,MAAA,GAAA9yY,KAAAgxd,kBAAAl8E,IAAA,GAAA1gU,EAAA0iJ,WAAA,CACA,MAAA1iJ,EAAAkyT,MAAArhY,MAAAmvE,EAAA0+T,MAAA;AACA,IAAAs5F,EAAAvld,EAAAqqD,QAAAkD,EAAAh5D,MAAA;AACAqtU,EAAA,IAAAumI,EAAAkQ,UAAAkN,IAAAh4Z,EAAA0+T,OACA1+T,EAAA6vQ,SAAA7vQ,EAAApwD,OAAA6qX,aAAAz6T,EAAA,IAAA46Y,EAAAkQ,UAAA9qZ,EAAAkyT,MAAAz/W,EAAAqqD,QAAAkD,EAAA65T,IAAA5yX,IAAA+4D,EAAA0+T,QAAA1+T,EAAA0+T,QACAq5F,IACA,CACA,IAAA9oN,EAAA0rM,EAAAnnE,aAAAn/D,EAAAqsD,EAAA9+T,EAAA5B;AACA,QAAAivM,IACAloO,GAGA,SAAAA,EAAAi5B,EAAAi4Z,EAAAC,EAAAx3F,GAEA,IADA,IAAAn3T,EAAAqxY,EAAA90K,SAAA1gN,MACAh9F,EAAA6ve,EAAA5ve,OAAA,EAAoCD,GAAA,EAAQA,IAAAmhF,EAAAqxY,EAAA90K,SAAAzwR,KAAA4id,EAAA7ve,GAAAwD,KAAAS,OAAA4re,EAAA7ve,GAAAw5E,MAAA2H;AAC5CxiC,EAAA4tF,KAAA,IAAAgmV,EAAA79E,kBAAA98T,EAAAh5D,OAAAkxd,EAAA,KAAAl4Z,EAAA/4D,IAAA+4D,EAAAh5D,MAAAg5D,EAAA/4D,IAAA,IAAA2zc,EAAA5yE,MAAAz+T,EAAA,KAAA0uZ,EAAA5ve;AAEA,IADA,IAAA25N,EAAA,EACAh7L,EAAA,EAAmBA,EAAAixc,EAAA5ve,OAAsB2+B,IAAAixc,EAAAjxc,GAAAp7B,MAAA80Y,IAAA1+K,EAAAh7L,EAAA;AAIzC,IAHA,IAAAs1b,EAAA2b,EAAA5ve,OAAA25N,EACAy6P,EAAAz8Y,EAAAh5D,MAAAixd,EAAA5ve,QAAA6ve,EAAA,KACAtod,EAAAowD,EAAApwD,OACA8uc,EAAA1+Y,EAAA0iJ,WAAAv6N,EAAA63E,EAAA6vQ,SAAAh2S,KAAqE6kb,EAAAv2d,EAASu2d,IAAA7kb,MAC9EA,GAAA8gb,EAAAzzE,SAAAngW,EAAAt0B,IAAAgqc,EAAAH,KACAv1a,EAAAhnC,MAAA08c,EAAAH,GACAG,GAAA,EAAAH,GAEAG,GAAA7sc,EAAAg/I,MAAA8vT,GAAAlkF,QAGA,CAjBA,CAHAzzV,EAAAi5B,EAAAivM,EAAA8oN,EAAAr3F,MAEA,CAmBA,SAAA6G,EAAAe,EAAA6vF,GACA,gBAAApud,EAAA6jQ,GACA,IAAAouM,EAAAjyc,EAAA8xF,UACAq2R,EAAA8pF,EAAA9pF,MACA2H,EAAAmiF,EAAAniF,IACA7tX,EAAAgwc,EAAAhwc;AACA,GAAAA,KAAAmlJ,SAAA+gO,EAAAwM,MAAA,IAAAxM,EAAAsU,WAAA3M,GAAA;AACA,IAAA4N,EAAAvV,EAAAlmX,MAAA;AACA,GAAAy7X,EAAA77Y,MAAA08Y,EAAA;AACA,MAAApW,EAAAtiX,OAAA25D,QAAApjE,MAAA+rX,EAAAlmX,MAAA,GAAAyuX,YAAAvI,EAAAkV,YAAA,IACA,MAAAlV,EAAAwM,OAAAxM,EAAAlmX,MAAA,GAAApgB,MAAA08Y,GAAApW,EAAArhY,OAAA,IAAAqhY,EAAAlmX,MAAA,GAAAyuX,WAAA;AACA,GAAA7sH,EAAA,CAGA,IAFA,IAAAqB,EAAA2rM,EAAA90K,SAAA1gN,MACAsiT,EAAAxV,EAAArhY,OAAA,KAAAqhY,EAAArhY,OAAA,OACApJ,EAAAyqY,EAAAwM,MAAAgJ,EAAgDjgZ,GAAAyqY,EAAAwM,MAAA,EAAsBj3Y,IAAAwnR,EAAA2rM,EAAA90K,SAAAzwR,KAAA68W,EAAAlmX,KAAAvkB,GAAAk4J,KAAAsvH;AACtE,IAAA04H,EAAAzV,EAAAkV,YAAA,GAAAlV,EAAAlmX,MAAA,GAAAyuX,WAAA,EAAAvI,EAAAkV,YAAA,GAAAlV,EAAAlmX,MAAA,GAAAyuX,WAAA;AACAxrH,IAAA71E,OAAAwhR,EAAA90K,SAAAzwR,KAAAizX,EAAAP;AACA,IAAA/gY,EAAAkrX,EAAAptN,OAAAotN,EAAAwM,OAAAgJ,EAAA,IACA0wF,EAAArud,EAAAg9B,GAAAx+B,QAAAvB,EAAAkrX,EAAAntN,OAAA4iO,GAAA,IAAAizE,EAAA5yE,MAAA/4H,EAAA,EAAAy4H,EAAA,IACAO,GAAA;AACAmwF,EAAA3ld,IAAA8/W,aAAAvrX,EAAAoxd,EAAA3ld,IAAA82D,QAAApjE,KAAA,SAAA6F,EAAAo2B,GACA,GAAA6lW,GAAA;AACAj8X,EAAAupX,aAAA,GAAAvpX,EAAAu9D,QAAApjE,OAAA8hY,EAAA7lW,EAAA,EACA,GACA6lW,GAAA,GAAAmwF,EAAAh7F,aAAAy9E,EAAA7/E,UAAAqC,KAAA+6F,EAAA3ld,IAAAqqD,QAAAmrU,KACAr6H,EAAAwqN,EAAA/1F,iBACA,CACA,QACA,CACA,IAAAwF,EAAAhO,EAAAz3V,KAAA8vV,EAAAjrX,MAAAwgY,EAAAjG,eAAA,GAAAD,YAAA,KACAx6V,EAAAh9B,EAAAg9B,GAAAqmC,OAAA8kT,EAAA9vV,IAAAy3V,EAAAz3V,KACA25J,EAAA8rM,EAAA,CAAAswF,EAAA,CACAvse,KAAA08Y,EACA1mU,MAAAu2Z,GACM,MACNvse,KAAAi8Y,SACKtuX;AACL,QAAAohc,EAAAzzE,SAAAngW,EAAAt0B,IAAAy/W,EAAA9vV,IAAA,EAAA25J,KACA6xE,KAAA7mO,EAAAhnC,MAAAmyX,EAAA9vV,IAAA,EAAA25J,GAAAsmM,qBAEA,CACA,CAsFAlhW,EAAAk3b,aA/LA,SAAApwR,EAAAqwR,EAAAC,GACA,OAAAtwR,EAAA7O,OAAA,CACAo/R,aAAA94b,EAAA6kX,EAAA,CACAh7U,QAAA,aACAwwE,MAAAw+U,IAEAE,YAAA/4b,EAAAukX,EAAA,CACA16U,QAAA,aACAwwE,MAAAw+U,IAEAG,UAAAh5b,EAAA80P,EAAA,CACAjrN,QAAA+uZ,KAGA,EAkLAn3b,EAAA8iX,WAAkBA,EAClB9iX,EAAA0jW,aA7EA,SAAAyD,GACA,gBAAAv+X,EAAA6jQ,GACA,IAAAywM,EAAAt0c,EAAA8xF,UACAq2R,EAAAmsF,EAAAnsF,MACA2H,EAAAwkF,EAAAxkF,IACA75T,EAAAkyT,EAAAkP,WAAAvH,EAAA,SAAA7tX,GACA,OAAAA,EAAAyuX,WAAA,GAAAzuX,EAAAzd,WAAA3C,MAAA08Y,CACA;AACA,QAAAtoU,KACA4tM,IACAskH,EAAAlmX,KAAAg0D,EAAA0+T,MAAA,GAAA9yY,MAAA08Y,EAGA,SAAAv+X,EAAA6jQ,EAAA06H,EAAAtoU,GACA,IAAAj5B,EAAAh9B,EAAAg9B,GACA9/B,EAAA+4D,EAAA/4D,IACA0xd,EAAA34Z,EAAA65T,IAAA5yX,IAAA+4D,EAAA0+T;AACAz3X,EAAA0xd,IACA5xb,EAAA4tF,KAAA,IAAAgmV,EAAA79E,kBAAA71X,EAAA,EAAA0xd,EAAA1xd,EAAA0xd,EAAA,IAAA/d,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAizX,EAAAj8Y,OAAA,KAAA2zE,EAAApwD,OAAA+vI,SAAA,YACA3/E,EAAA,IAAA46Y,EAAAkQ,UAAA/jb,EAAAt0B,IAAAqqD,QAAAkD,EAAAkyT,MAAA9vV,KAAA2E,EAAAt0B,IAAAqqD,QAAA67Z,GAAA34Z,EAAA0+T;AAEA,IAAAptY,EAAAqpd,EAAAr5E,WAAAthU;AACA,SAAA1uE,EAAA;AACAy1C,EAAA26V,KAAA1hU,EAAA1uE;AACA,IAAAi5d,EAAAxjb,EAAAt0B,IAAAqqD,QAAA/1B,EAAAogI,QAAAz7J,IAAAzE,GAAA;AAGA,OAFA0zc,EAAA/5E,QAAA75V,EAAAt0B,IAAA83c,EAAAnob,MAAAmob,EAAAx3F,WAAAnnY,MAAA2+d,EAAAv3F,UAAApnY,MAAAm7C,EAAAnnC,KAAA2qd,EAAAnob,KACAwrO,EAAA7mO,EAAAs7V,oBAEA,CAfA,CAHAt4X,EAAA6jQ,EAAA06H,EAAAtoU,GAmBA,SAAAj2D,EAAA6jQ,EAAA5tM,GAGA,IAFA,IAAAj5B,EAAAh9B,EAAAg9B,GACA53B,EAAA6wD,EAAApwD,OACAwyB,EAAA49B,EAAA/4D,IAAA7e,EAAA43E,EAAA6vQ,SAAA,EAAA1nV,EAAA63E,EAAA0iJ,WAA0Et6N,EAAAD,EAAOC,IACjFg6C,GAAAjzB,EAAAy/I,MAAAxmK,GAAAoyY,SACAzzV,EAAAqmC,OAAAhrC,EAAA,EAAAA,EAAA;AAEA,IAAAixW,EAAAtsW,EAAAt0B,IAAAqqD,QAAAkD,EAAAh5D,OACAk5I,EAAAmzP,EAAArgB;AACA,GAAAjsV,EAAAogI,QAAAz7J,IAAAs0D,EAAA/4D,MAAA+4D,EAAAh5D,MAAAqsY,EAAArgB,UAAAwH,SAAA;AACA,IAAAS,EAAA,GAAAj7T,EAAA0iJ,WACAy4K,EAAAn7T,EAAA6vQ,UAAA1gU,EAAAsrX,WACA7qX,EAAAyjY,EAAArnY,MAAA,GACA4sd,EAAAvlF,EAAAxiZ,OAAA;AACA,IAAA+e,EAAAitc,WAAA+b,GAAA39F,EAAA,KAAA29F,EAAA,EAAA14U,EAAA32E,QAAA6vH,OAAA+hM,EAAAy/E,EAAA90K,SAAA1gN,MAAAw1X,EAAA90K,SAAAzwR,KAAAlG,KAAA;AACA,IAAAnI,EAAAqsY,EAAAjxW,IACAn7B,EAAAD,EAAAk5I,EAAAs6O;AAGA,OAFAzzV,EAAA4tF,KAAA,IAAAgmV,EAAA79E,kBAAA91X,GAAAi0X,EAAA,KAAAh0X,GAAAk0X,EAAA,KAAAn0X,EAAA,EAAAC,EAAA,MAAA2zc,EAAA5yE,OAAA/M,EAAA2/E,EAAA90K,SAAA1gN,MAAAw1X,EAAA90K,SAAAzwR,KAAAlG,EAAAwwI,KAAAi7T,EAAA90K,SAAA1gN,SAAAg0G,OAAA+hM,EAAAy/E,EAAA90K,SAAA1gN,MAAAw1X,EAAA90K,SAAAzwR,KAAAlG,EAAAwwI,KAAAi7T,EAAA90K,SAAA1gN,SAAA61S,EAAA,IAAAE,EAAA,KAAAF,EAAA,MACArtH,EAAA7mO,EAAAs7V,oBAEA,CApBA,CAnB+Gt4X,EAAA6jQ,EAAA5tM,IAC/G,CACA,EAkEA7+B,EAAAqzP,SAAgBA,EAChBrzP,EAAAojX,YAAmBA,EACnBpjX,EAAA4lW,aA9BA,SAAAuB,GACA,gBAAAv+X,EAAA6jQ,GACA,IAAAquM,EAAAlyc,EAAA8xF,UACAq2R,EAAA+pF,EAAA/pF,MACA2H,EAAAoiF,EAAApiF,IACA75T,EAAAkyT,EAAAkP,WAAAvH,EAAA,SAAA7tX,GACA,OAAAA,EAAAyuX,WAAA,GAAAzuX,EAAAzd,WAAA3C,MAAA08Y,CACA;AACA,IAAAtoU,EAAA;AACA,IAAA0iJ,EAAA1iJ,EAAA0iJ;AACA,MAAAA,EAAA;AACA,IAAA9yM,EAAAowD,EAAApwD,OACAmjX,EAAAnjX,EAAAg/I,MAAA8zD,EAAA;AACA,GAAAqwK,EAAAnnY,MAAA08Y,EAAA;AACA,GAAA16H,EAAA,CACA,IAAAirN,EAAA9lG,EAAArqH,WAAAqqH,EAAArqH,UAAA98Q,MAAAgkB,EAAAhkB,KACAu2R,EAAAy4L,EAAA90K,SAAAzwR,KAAAwjd,EAAAvwF,EAAAj8Y,SAAA,MACAnE,EAAA,IAAA0yd,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAizX,EAAAj8Y,OAAA,KAAAuud,EAAA90K,SAAAzwR,KAAAzF,EAAAhkB,KAAAS,OAAA,KAAA81R,MAAA02M,EAAA,OACA/zT,EAAA9kG,EAAAh5D,MACA+9J,EAAA/kG,EAAA/4D;AACA2mQ,EAAA7jQ,EAAAg9B,GAAA4tF,KAAA,IAAAgmV,EAAA79E,kBAAAh4N,GAAA+zT,EAAA,KAAA9zT,EAAAD,EAAAC,EAAA78K,EAAA,OAAAm6Y,iBACA,CACA,QACA,CACA,EAOAlhW,EAAAomW,cAAqBA,EACrBpmW,EAAA23b,uBA5FA,SAAAxwF,EAAA6vF,GACA,IAAAp4d,EAAAwnY,EAAAe,EAAA6vF;AACA,gBAAApud,EAAA6jQ,GACA,OAAA7tQ,EAAAgK,EAAA6jQ,GAAA,SAAA7mO,GACA,IAAAypV,EAAAzmX,EAAAuiX,aAAAviX,EAAA8xF,UAAAg+R,IAAAvH,cAAAvoX,EAAA8xF,UAAAq2R,MAAA1B;AACAA,GAAAzpV,EAAAw5V,YAAA/P,GACA5iH,EAAA7mO,EACA,EACA,CACA,EAoFA5F,EAAAunW,WAxLA,SAAAhI,GACA,IAAA9+T,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,gBAAAqP,EAAA6jQ,GACA,IAAAiuM,EAAA9xc,EAAA8xF,UACAq2R,EAAA2pF,EAAA3pF,MACA2H,EAAAgiF,EAAAhiF,IACA75T,EAAAkyT,EAAAkP,WAAAvH;AACA,IAAA75T,EAAA;AACA,IAAAj5B,EAAA6mO,EAAA7jQ,EAAAg9B,GAAA;AACA,QAAA+wb,EAAA/wb,EAAAi5B,EAAA0gU,EAAA9+T,KACAgsM,KAAA7mO,EAAAs7V,qBAEA,CACA,EA4KAlhW,EAAA22b,gBAAuBA;AC1PvB,SAAA12X,IAAoY,OAA7TA,EAArD,oBAAAo5B,iBAAApmH,IAAqDomH,QAAApmH,IAAA7pB,OAAoC,SAAA+G,EAAAkkI,EAAAm9U,GAAmD,IAAAl7L,EAC9J,SAAAtoO,EAAAqmF,GAA4C,MAAA3lH,OAAA9iB,UAAA4N,eAAAjI,KAAAy8C,EAAAqmF,IAAoG,QAAlCrmF,EAAAmrF,EAAAnrF,MAAgE,OAAAA,CAAA,CAA9K,CAD8J79C,EAAAkkI;AAA6C,GAAAiiJ,EAAA,CAAmB,IAAAjlF,EAAA3iL,OAAA2zE,yBAAAi0L,EAAAjiJ;AAA4D,OAAAg9D,EAAAp+K,IAAgBo+K,EAAAp+K,IAAA1hB,KAAAgI,UAAArS,OAAA,EAAAiJ,EAAAqhd,GAAkEngR,EAAA/nM,KAAjK,CAAiK,EAAwB22G,EAAA3mG,MAAA3S,KAAA4S,UAAA,CAEpY,SAAA2/H,EAAAqnV,EAAAC,GAA2C,sBAAAA,GAAA,OAAAA,EAA+D,UAAAhxa,UAAA;AAA6E+wa,EAAA30d,UAAA8iB,OAAAxjB,OAAAs1d,KAAA50d,UAAA,CAAyEq2E,YAAA,CAAe34E,MAAAi3d,EAAAv+Y,YAAAhyB,mBAA0DthC,OAAAmhC,eAAA0wa,EAAA,aAA+Cv+Y,cAAoBw+Y,GAAAxnV,EAAAunV,EAAAC,EAAA,CAC5Y,SAAAxnV,EAAAzxI,EAAAiE,GAAyK,OAAxIwtI,EAAAtqH,OAAAuqH,eAAAvqH,OAAAuqH,eAAA7vI,OAAA,SAAA7B,EAAAiE,GAA2H,OAAjBjE,EAAA+6F,UAAA92F,EAAiBjE,CAAA,EAAayxI,EAAAzxI,EAAAiE,EAAA,CACzK,SAAA+tI,EAAAknV,GAAiC,IAAAC,EAGjC,WAAuC,uBAAArnV,kBAAAC,UAAA;AAAwE,GAAAD,QAAAC,UAAAs0I,KAAA;AAA0C,sBAAA78E,MAAA;AAA8C,IAAsF,OAAhF3oJ,QAAAx8C,UAAA0rI,QAAA/lI,KAAA8nI,QAAAC,UAAAlxF,QAAA,oBAAgF,CAAe,MAAAphD,GAAY,UAAxT;AAH8F,kBAAyC,IAAA4mB,EAAA6lE,EAAA0lD,EAAAsnV;AAA8C,GAAAC,EAAA,CAAiC,IAAAC,EAAAxnV,EAAAxyI,MAAAs7E;AAAmDr0D,EAAAyrH,QAAAC,UAAA7lD,EAAAl6E,UAAAond,EAAA,MAAkE/yc,EAAA6lE,EAAAn6E,MAAA3S,KAAA4S;AAAyC,OACpX,SAAA2nJ,EAAA3vJ,GAAkD,GAAAA,IAAA,WAAAo/H,EAAAp/H,IAAA,mBAAAA,GAA0E,OAAAA;AAAe,YAAAA,EAA4B,UAAAi+C,UAAA;AAAmF,OAC1P,SAAA0xG,GAAwC,YAAAA,EAAuB,UAAAnoB,eAAA;AAAyF,OAAAmoB,CAAA,CAAxJ,CAD0PA,EAAA,CAA1P,CADoXv6J,KAAAinB,EAAA,EAIpX,SAAAurH,EAAA5xI,GAAwL,OAA1J4xI,EAAAzqH,OAAAuqH,eAAAvqH,OAAAC,eAAAvlB,OAAA,SAAA7B,GAAuG,OAAAA,EAAA+6F,WAAA5zE,OAAAC,eAAApnB,EAAA,EAAmD4xI,EAAA5xI,EAAA,CACxL,SAAAopI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAC/S,SAAAmyI,EAAA9+D,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAC5F,SAAAoqF,EAAAzpI,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EAC/P,SAAA+oF,EAAAilV,EAAAE,EAAAkB,GAAwQ,OAA1MlB,GAAAplV,EAAAklV,EAAAlzd,UAAAozd,GAAsEkB,GAAAtmV,EAAAklV,EAAAoB,GAA8Dxxc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cAAoB88Y,CAAA,CACxQ,SAAAJ,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAEtE,IAAA65b,EAAuBrnY,EAAQ,OAC/BonY,EAA2BpnY,EAAQ,MACnCwlZ,EAAAlpd,OAAAxjB,OAAA,MACA2uY,EAAA,WACA,SAAAA,EAAAoH,EAAAhE,EAAA1wS,GACAmtC,EAAA/yI,KAAAkzY,GACAlzY,KAAAs6Y,UACAt6Y,KAAAs2Y,QACAt2Y,KAAA4lG,UAAA,KAAA4xX,EAAAl9E,EAAAz7X,IAAAy3X,GAAAgE,EAAAx7X,IAAAw3X,IACA,CAsIA,OArIApjQ,EAAAggQ,EAAA,EACAj6W,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAs6Y,QAAAhgW,GACA,GACG,CACHrhB,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAs2Y,MAAAh8V,GACA,GACG,CACHrhB,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAoqY,MAAA9vV,GACA,GACG,CACHrhB,IAAA,KACA3M,IAAA,WACA,OAAAtsB,KAAA+xY,IAAAz3V,GACA,GACG,CACHrhB,IAAA,QACA3M,IAAA,WACA,OAAAtsB,KAAA4lG,OAAA,GAAAwkS,KACA,GACG,CACHnxW,IAAA,MACA3M,IAAA,WACA,OAAAtsB,KAAA4lG,OAAA,GAAAmsS,GACA,GACG,CACH94W,IAAA,QACA3M,IAAA,WAEA,IADA,IAAAs5E,EAAA5lG,KAAA4lG,OACAtlG,EAAA,EAAsBA,EAAAslG,EAAArlG,OAAmBD,IAAA,GAAAslG,EAAAtlG,GAAA8pY,MAAA9vV,KAAAsrD,EAAAtlG,GAAAyxY,IAAAz3V,IAAA;AACzC,QACA,GACG,CACHrhB,IAAA,UACAt2B,MAAA,WACA,OAAA3C,KAAAoqY,MAAAz/W,IAAAvqB,MAAAJ,KAAAutB,KAAAvtB,KAAAysD,MACA,GACG,CACHxzB,IAAA,UACAt2B,MAAA,SAAAs8C,GAIA,IAHA,IAAAwiC,EAAA7uE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAkgd,EAAA5yE,MAAA5iT,MACAwkE,EAAArgF,UAAAm/L,UACAswN,EAAA,KACA5we,EAAA,EAAsBA,EAAAmhF,EAAA2/Y,QAAqB9ge,IAC3C4we,EAAApvU,EACAA,IAAA8+G;AAIA,IAFA,IAAA6zM,EAAAx1a,EAAAhqC,MAAA1U,OACAqlG,EAAA5lG,KAAA4lG,OACA1mE,EAAA,EAAuBA,EAAA0mE,EAAArlG,OAAoB2+B,IAAA,CAC3C,IAAAiyc,EAAAvrY,EAAA1mE,GACAkrW,EAAA+mG,EAAA/mG,MACA2H,EAAAo/F,EAAAp/F,IACA1yN,EAAApgI,EAAAogI,QAAAj/K,MAAAq0d;AACAx1a,EAAAmyb,aAAA/xT,EAAAz7J,IAAAwmX,EAAA9vV,KAAA+kI,EAAAz7J,IAAAmuX,EAAAz3V,KAAApb,EAAA4zb,EAAA5yE,MAAA5iT,MAAA7b,GACA,GAAAviD,GAAA01W,EAAA31V,EAAAw1a,GAAA3yT,IAAAs8O,SAAA8yF,KAAAzjG,cAAA,IACA,CACA,GACG,CACHx0W,IAAA,cACAt2B,MAAA,SAAAs8C,EAAA/6B,GAGA,IAFA,IAAAuwc,EAAAx1a,EAAAhqC,MAAA1U,OACAqlG,EAAA5lG,KAAA4lG,OACAtlG,EAAA,EAAsBA,EAAAslG,EAAArlG,OAAmBD,IAAA,CACzC,IAAA+2d,EAAAzxX,EAAAtlG,GACA8pY,EAAAitF,EAAAjtF,MACA2H,EAAAslF,EAAAtlF,IACA1yN,EAAApgI,EAAAogI,QAAAj/K,MAAAq0d,GACAlnc,EAAA8xJ,EAAAz7J,IAAAwmX,EAAA9vV,KACAmS,EAAA4yH,EAAAz7J,IAAAmuX,EAAAz3V;AACAh6C,EACA2+C,EAAAkvV,YAAA5gX,EAAAk/B,IAEAxN,EAAAoyb,iBAAA9jd,EAAAk/B,EAAAvoC,GACA0wX,EAAA31V,EAAAw1a,EAAAvwc,EAAAk6X,UAAA,KAEA,CACA,GACG,CACHnlX,IAAA,cACAt2B,MAAA,WACA,OAAAmwY,EAAA62E,QAAA3pd,KAAAs6Y,QAAAt6Y,KAAAs2Y,OAAAsnF,aACA,IACG,EACH3kc,IAAA,WACAt2B,MAAA,SAAA0vY,EAAA3uY,GACA,IAAA4te,EAAA1+d,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAynR,EAAAg4G,EAAAvqX,OAAAm2X,cAAA,IAAAnL,EAAAT,GAAAk/F,EAAAl/F,EAAAnuX,KAAA,GAAAmuX,EAAAvqX,OAAAuqX,EAAA/3V,IAAA+3V,EAAAtpY,QAAArF,EAAA4te;AACA,GAAAj3M,EAAA,OAAAA;AACA,QAAAu8G,EAAAvE,EAAAuE,MAAA,EAAuCA,GAAA,EAAYA,IAAA,CACnD,IAAA18K,EAAAx2N,EAAA,EAAA6te,EAAAl/F,EAAAnuX,KAAA,GAAAmuX,EAAAnuX,KAAA0yX,GAAAvE,EAAAr1N,OAAA45N,EAAA,GAAAvE,EAAAtpY,MAAA6tY,GAAAlzY,EAAA4te,GAAAC,EAAAl/F,EAAAnuX,KAAA,GAAAmuX,EAAAnuX,KAAA0yX,GAAAvE,EAAAp1N,MAAA25N,EAAA,GAAAvE,EAAAtpY,MAAA6tY,GAAA,EAAAlzY,EAAA4te;AACA,GAAAp3Q,EAAA,OAAAA,CACA,CACA,WACA,GACG,CACHjhM,IAAA,OACAt2B,MAAA,SAAA0vY,GACA,IAAAyC,EAAAliY,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA5S,KAAAwzd,SAAAnhF,EAAAyC,IAAA90Y,KAAAwzd,SAAAnhF,GAAAyC,IAAA,IAAAsI,EAAA/K,EAAAnuX,KAAA,GACA,GACG,CACH+U,IAAA,UACAt2B,MAAA,SAAAgoB,GACA,OAAA4md,EAAA5md,IAAA,YAAAyyX,EAAAzyX,EACA,GACG,CACHsO,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,OAAA4md,EAAA5md,MAAA82D,QAAApjE,KAAAsM,EAAAgoX,YAAA,QAAAyK,EAAAzyX,EACA,GACG,CACHsO,IAAA,WACAt2B,MAAA,SAAAgoB,EAAAq6R,GACA,IAAAA,MAAAlhT,KAAA,UAAAk5B,WAAA;AACA,IAAAqxI,EAAA4iU,EAAAjsL,EAAAlhT;AACA,IAAAuqK,EAAA,UAAArxI,WAAA,qBAAAvqB,OAAAuyS,EAAAlhT,KAAA;AACA,OAAAuqK,EAAAw6O,SAAAl+X,EAAAq6R,EACA,GACG,CACH/rR,IAAA,SACAt2B,MAAA,SAAAq8C,EAAAwyb,GACA,GAAAxyb,KAAAiyb,EAAA,UAAAj0c,WAAA,sCAAAgiB;AAGA,OAFAiyb,EAAAjyb,GAAAwyb,EACAA,EAAAvse,UAAAs1d,OAAAv7a,EACAwyb,CACA,KAEAt+F,CACA,CA7IA;AA8IAA,EAAAjuY,UAAAmyE;AACA,IAAAogZ,EAAAtkV,EAAA,SAAAskV,EAAAptF,EAAA2H,GACAh/P,EAAA/yI,KAAAw3d,GACAx3d,KAAAoqY,QACApqY,KAAA+xY,KACA,GACA0/F;AACA,SAAAC,EAAAr/F,GACAo/F,GAAAp/F,EAAAvqX,OAAAm2X,gBACAwzF,KACAl8d,QAAAC,KAAA,wEAAA68X,EAAAvqX,OAAAhkB,KAAAsE,KAAA,KAEA,CACA,IAAA0qY,EAAA,SAAA6+F,GACAp/V,EAAAugQ,EAAA6+F;AACA,IAAAtrb,EAAAusF,EAAAkgQ;AACA,SAAAA,EAAAwH,GACA,IAAAhE,EAAA1jY,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA0nY;AAIA,OAHAvnQ,EAAA/yI,KAAA8yY,GACA4+F,EAAAp3F,GACAo3F,EAAAp7F,GACAjwV,EAAAz7C,KAAA5K,KAAAs6Y,EAAAhE,EACA,CA4EA,OA3EApjQ,EAAA4/P,EAAA,EACA75W,IAAA,UACA3M,IAAA,WACA,OAAAtsB,KAAAs6Y,QAAAhgW,KAAAt6C,KAAAs2Y,MAAAh8V,IAAAt6C,KAAAs2Y,MAAA,IACA,GACG,CACHr9W,IAAA,MACAt2B,MAAA,SAAAgoB,EAAA00J,GACA,IAAAi3N,EAAA3rX,EAAAqqD,QAAAqqG,EAAAz7J,IAAA5jB,KAAAo1E;AACA,IAAAkhU,EAAAxuX,OAAAm2X,cAAA,OAAA/K,EAAAqC,KAAAe;AACA,IAAAgE,EAAA3vX,EAAAqqD,QAAAqqG,EAAAz7J,IAAA5jB,KAAA8xZ;AACA,WAAAhf,EAAAwH,EAAAxyX,OAAAm2X,cAAA3D,EAAAhE,IACA,GACG,CACHr9W,IAAA,UACAt2B,MAAA,SAAAs8C,GACA,IAAAwiC,EAAA7uE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAkgd,EAAA5yE,MAAA5iT;AAEA,GADAgc,EAAAk5B,EAAAsgQ,EAAA7tY,WAAA,UAAAjF,MAAA4K,KAAA5K,KAAAi/C,EAAAwiC,GACAA,GAAAqxY,EAAA5yE,MAAA5iT,MAAA,CACA,IAAAorS,EAAA1oY,KAAAoqY,MAAAwnG,YAAA5xe,KAAA+xY;AACArJ,GAAAzpV,EAAAw5V,YAAA/P,EACA,CACA,GACG,CACHzvW,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAAA,aAAAmrV,GAAAnrV,EAAAmqW,QAAA9xZ,KAAA8xZ,QAAAnqW,EAAAytB,MAAAp1E,KAAAo1E,IACA,GACG,CACHn8C,IAAA,cACAt2B,MAAA,WACA,WAAAkve,EAAA7xe,KAAA8xZ,OAAA9xZ,KAAAo1E,KACA,GACG,CACHn8C,IAAA,SACAt2B,MAAA,WACA,OACAmB,KAAA,OACAguZ,OAAA9xZ,KAAA8xZ,OACA18U,KAAAp1E,KAAAo1E,KAEA,IACG,EACHn8C,IAAA,WACAt2B,MAAA,SAAAgoB,EAAAq6R,GACA,oBAAAA,EAAA8sG,QAAA,iBAAA9sG,EAAA5vO,KAAA,UAAAp4C,WAAA;AACA,WAAA81W,EAAAnoX,EAAAqqD,QAAAgwO,EAAA8sG,QAAAnnY,EAAAqqD,QAAAgwO,EAAA5vO,MACA,GACG,CACHn8C,IAAA,SACAt2B,MAAA,SAAAgoB,EAAAmnY,GACA,IAAA18U,EAAAxiE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAk/Y,EACAxX,EAAA3vX,EAAAqqD,QAAA88U;AACA,WAAA9xZ,KAAAs6Y,EAAAllU,GAAA08U,EAAAxX,EAAA3vX,EAAAqqD,QAAAI,GACA,GACG,CACHn8C,IAAA,UACAt2B,MAAA,SAAA23Y,EAAAhE,EAAAxB,GACA,IAAAg9F,EAAAx3F,EAAAhgW,IAAAg8V,EAAAh8V;AAEA,GADAw6V,IAAAg9F,IAAAh9F,EAAAg9F,GAAA,SACAx7F,EAAAxuX,OAAAm2X,cAAA,CACA,IAAA/jL,EAAAg5K,EAAAsgF,SAAAl9E,EAAAxB,OAAA5B,EAAAsgF,SAAAl9E,GAAAxB;AACA,IAAA56K,EAAuC,OAAAg5K,EAAAqC,KAAAe,EAAAxB;AAAvCwB,EAAAp8K,EAAAo8K,KACA,CASA,OARAgE,EAAAxyX,OAAAm2X,gBACA,GAAA6zF,IAGAx3F,GAAApH,EAAAsgF,SAAAl5E,GAAAxF,OAAA5B,EAAAsgF,SAAAl5E,EAAAxF,OAAAwF,SACAhgW,IAAAg8V,EAAAh8V,KAAAw3b,EAAA,KAHAx3F,EAAAhE,GAMA,IAAAxD,EAAAwH,EAAAhE,EACA,KAEAxD,CACA,CAtFA,CAsFCI;AACDA,EAAAqnF,OAAA,OAAAznF;AACA,IAAA++F,EAAA,WACA,SAAAA,EAAA//E,EAAA18U,GACA29D,EAAA/yI,KAAA6xe,GACA7xe,KAAA8xZ,SACA9xZ,KAAAo1E,MACA,CAYA,OAXA89D,EAAA2+V,EAAA,EACA54c,IAAA,MACAt2B,MAAA,SAAA08K,GACA,WAAAwyT,EAAAxyT,EAAAz7J,IAAA5jB,KAAA8xZ,QAAAzyO,EAAAz7J,IAAA5jB,KAAAo1E,MACA,GACG,CACHn8C,IAAA,UACAt2B,MAAA,SAAAgoB,GACA,OAAAmoX,EAAA62E,QAAAh/b,EAAAqqD,QAAAh1E,KAAA8xZ,QAAAnnY,EAAAqqD,QAAAh1E,KAAAo1E,MACA,KAEAy8Z,CACA,CAlBA,GAmBA/yF,EAAA,SAAAizF,GACAx/V,EAAAusQ,EAAAizF;AACA,IAAAh+V,EAAAnB,EAAAksQ;AACA,SAAAA,EAAAzM,GACA,IAAA9rV;AACAwsF,EAAA/yI,KAAA8+Y;AACA,IAAA56X,EAAAmuX,EAAAnH,UACAw3F,EAAArwF,EAAAnuX,KAAA,GAAA8wD,QAAAq9T,EAAA/3V,IAAAp2B,EAAAwuX;AAGA,OAFAnsV,EAAAwtF,EAAAnpI,KAAA5K,KAAAqyY,EAAAqwF,IACAx+c,OACAqiC,CACA,CAmDA,OAlDA2sF,EAAA4rQ,EAAA,EACA7lX,IAAA,MACAt2B,MAAA,SAAAgoB,EAAA00J,GACA,IAAA2yT,EAAA3yT,EAAA2oO,UAAAhoZ,KAAA8xZ,QACAhK,EAAAkqF,EAAAlqF,QACAxtW,EAAA03b,EAAA13b,IACA+3V,EAAA1nX,EAAAqqD,QAAA16B;AACA,OAAAwtW,EAAA5U,EAAAqC,KAAAlD,GACA,IAAAyM,EAAAzM,EACA,GACG,CACHp5W,IAAA,UACAt2B,MAAA,WACA,WAAAmwd,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAvtB,KAAAkkB,MAAA,IACA,GACG,CACH+U,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAAA,aAAAm3V,GAAAn3V,EAAAmqW,QAAA9xZ,KAAA8xZ,MACA,GACG,CACH74X,IAAA,SACAt2B,MAAA,WACA,OACAmB,KAAA,OACAguZ,OAAA9xZ,KAAA8xZ,OAEA,GACG,CACH74X,IAAA,cACAt2B,MAAA,WACA,WAAAsve,EAAAjye,KAAA8xZ,OACA,IACG,EACH74X,IAAA,WACAt2B,MAAA,SAAAgoB,EAAAq6R,GACA,oBAAAA,EAAA8sG,OAAA,UAAA90X,WAAA;AACA,WAAA8hX,EAAAn0X,EAAAqqD,QAAAgwO,EAAA8sG,QACA,GACG,CACH74X,IAAA,SACAt2B,MAAA,SAAAgoB,EAAA4C,GACA,WAAAuxX,EAAAn0X,EAAAqqD,QAAAznD,GACA,GACG,CACH0L,IAAA,eACAt2B,MAAA,SAAAuhB,GACA,OAAAA,EAAAymX,aAAAzmX,EAAApgB,KAAAimW,KAAAvlB,UACA,KAEAs6D,CACA,CA/DA,CA+DC5L;AACD4L,EAAA75Y,UAAAmyE,WACA87T,EAAAqnF,OAAA,OAAAz7E;AACA,IAAAmzF,EAAA,WACA,SAAAA,EAAAngF,GACA/+Q,EAAA/yI,KAAAiye,GACAjye,KAAA8xZ,QACA,CAkBA,OAjBA5+Q,EAAA++V,EAAA,EACAh5c,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA6yT,EAAA7yT,EAAA2oO,UAAAhoZ,KAAA8xZ,QACAhK,EAAAoqF,EAAApqF,QACAxtW,EAAA43b,EAAA53b;AACA,OAAAwtW,EAAA,IAAA+pF,EAAAv3b,KAAA,IAAA23b,EAAA33b,EACA,GACG,CACHrhB,IAAA,UACAt2B,MAAA,SAAAgoB,GACA,IAAA0nX,EAAA1nX,EAAAqqD,QAAAh1E,KAAA8xZ,QACA5tY,EAAAmuX,EAAAnH;AACA,OAAAhnX,GAAA46X,EAAAyI,aAAArjY,GAAA,IAAA46X,EAAAzM,GACAa,EAAAqC,KAAAlD,EACA,KAEA4/F,CACA,CAvBA,GAwBA70F,EAAA,SAAA+0F,GACA5/V,EAAA6qQ,EAAA+0F;AACA,IAAAC,EAAAx/V,EAAAwqQ;AACA,SAAAA,EAAAzyX,GAEA,OADAooH,EAAA/yI,KAAAo9Y,GACAg1F,EAAAxne,KAAA5K,KAAA2qB,EAAAqqD,QAAA,GAAArqD,EAAAqqD,QAAArqD,EAAA82D,QAAApjE,MACA,CAyCA,OAxCA60H,EAAAkqQ,EAAA,EACAnkX,IAAA,UACAt2B,MAAA,SAAAs8C,GACA,IAAAwiC,EAAA7uE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAkgd,EAAA5yE,MAAA5iT;AACA,GAAA7b,GAAAqxY,EAAA5yE,MAAA5iT,MAAA,CACAr+C,EAAAqmC,OAAA,EAAArmC,EAAAt0B,IAAA82D,QAAApjE;AACA,IAAA8hY,EAAAjN,EAAAC,QAAAl0V,EAAAt0B;AACAw1X,EAAApsJ,GAAA90M,EAAA80D,YAAA90D,EAAAq2V,aAAA6K,EACA,MACA7mS,EAAAk5B,EAAA4qQ,EAAAn4Y,WAAA,UAAAjF,MAAA4K,KAAA5K,KAAAi/C,EAAAwiC,EAEA,GACG,CACHxoD,IAAA,SACAt2B,MAAA,WACA,OACAmB,KAAA,MAEA,GACG,CACHm1B,IAAA,MACAt2B,MAAA,SAAAgoB,GACA,WAAAyyX,EAAAzyX,EACA,GACG,CACHsO,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAAA,aAAAy1V,CACA,GACG,CACHnkX,IAAA,cACAt2B,MAAA,WACA,OAAA0ve,CACA,IACG,EACHp5c,IAAA,WACAt2B,MAAA,SAAAgoB,GACA,WAAAyyX,EAAAzyX,EACA,KAEAyyX,CACA,CAhDA,CAgDClK;AACDA,EAAAqnF,OAAA,MAAAn9E;AACA,IAAAi1F,EAAA,CACAzud,IAAA,WACA,OAAA5jB,IACA,EACAg1E,QAAA,SAAArqD,GACA,WAAAyyX,EAAAzyX,EACA;AAEA,SAAA4md,EAAA5md,EAAAzG,EAAAo2B,EAAAvxC,EAAArF,GACA,IAAAL,EAAAuP,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AACA,GAAAsR,EAAA+5X,cAAA,OAAAnL,EAAAvuY,OAAAomB,EAAA2vB;AACA,QAAAh6C,EAAAyI,GAAArF,EAAA,OAA0CA,EAAA,EAAApD,EAAA4jB,EAAAyuX,WAAAryY,GAAA,EAAwCA,GAAAoD,EAAA,CAClF,IAAAojK,EAAA5iJ,EAAA4iJ,MAAAxmK;AACA,GAAAwmK,EAAA4jO,QAGM,IAAArnY,GAAAy7Y,EAAAyI,aAAAzgP,GACN,OAAAg4O,EAAAv6Y,OAAAomB,EAAA2vB,GAAA52C,EAAA,EAAAojK,EAAA4rO,SAAA,QAJA,CACA,IAAAr4G,EAAAk3M,EAAA5md,EAAAm8I,EAAAxsH,EAAA52C,IAAA,EAAAojK,EAAA6rO,WAAA,EAAAjvY,EAAAL;AACA,GAAAg3R,EAAA,OAAAA,CACA,CAGA//O,GAAAwsH,EAAA4rO,SAAAhvY,CACA,CACA,WACA,CACA,SAAAkxY,EAAA31V,EAAA41V,EAAAC,GACA,IAAA5kN,EAAAjxI,EAAAhqC,MAAA1U,OAAA;AACA,KAAA2vL,EAAA2kN,GAAA,CACA,IAGA11X,EAHA0tH,EAAA5tF,EAAAhqC,MAAAi7K,IACArjD,aAAAgmV,EAAA99E,aAAAloQ,aAAAgmV,EAAA79E,qBACA/1V,EAAAogI,QAAA41N,KAAA/kN,GAEA11K,QAAA,SAAA06X,EAAAC,EAAAC,EAAAC,GACA,MAAAl2X,MAAAk2X,EACA,GACAp2V,EAAAq2V,aAAApC,EAAAqC,KAAAt2V,EAAAt0B,IAAAqqD,QAAA71D,GAAA21X,IARA,CASA,CACA,IAGAw9F,EAAA,SAAAC,GACAhgW,EAAA+/V,EAAAC;AACA,IAAAC,EAAA5/V,EAAA0/V;AACA,SAAAA,EAAArwd,GACA,IAAA+xH;AASA,OARAjB,EAAA/yI,KAAAsye,IACAt+V,EAAAw+V,EAAA5ne,KAAA5K,KAAAiiB,EAAA0I,MACA8nd,gBAAA,EACAz+V,EAAA23N,QAAA,EACA33N,EAAA2lK,KAAA5xR,OAAAxjB,OAAA,MACAyvI,EAAAxrI,KAAAmxC,KAAAmT,MACAknF,EAAA0+V,aAAAzwd,EAAA8xF,UACAigC,EAAAwwP,YAAAviX,EAAAuiX,YACAxwP,CACA,CAwIA,OAvIAd,EAAAo/V,EAAA,EACAr5c,IAAA,YACA3M,IAAA,WAKA,OAJAtsB,KAAAyye,gBAAAzye,KAAAiV,MAAA1U,SACAP,KAAA0ye,aAAA1ye,KAAA0ye,aAAA9ud,IAAA5jB,KAAA2qB,IAAA3qB,KAAAq/K,QAAAj/K,MAAAJ,KAAAyye,kBACAzye,KAAAyye,gBAAAzye,KAAAiV,MAAA1U,QAEAP,KAAA0ye,YACA,GACG,CACHz5c,IAAA,eACAt2B,MAAA,SAAAoxG,GACA,GAAAA,EAAAq2R,MAAAz/W,KAAA3qB,KAAA2qB,IAAA,UAAAqS,WAAA;AAKA,OAJAh9B,KAAA0ye,aAAA3+X,EACA/zG,KAAAyye,gBAAAzye,KAAAiV,MAAA1U,OACAP,KAAA2rW,SAAA,EAAA3rW,KAAA2rW,QAjCA,EAkCA3rW,KAAAwkY,YAAA,KACAxkY,IACA,GACG,CACHi5B,IAAA,eACA3M,IAAA,WACA,OAxCA,EAwCAtsB,KAAA2rW,SAAA,CACA,GACG,CACH1yU,IAAA,iBACAt2B,MAAA,SAAA+lY,GAGA,OAFA1oY,KAAAwkY,YAAAkE,EACA1oY,KAAA2rW,SA7CA,EA8CA3rW,IACA,GACG,CACHi5B,IAAA,cACAt2B,MAAA,SAAA+lY,GAEA,OADAoqF,EAAA5mF,KAAAs3F,QAAAxje,KAAAwkY,aAAAxkY,KAAA+zG,UAAAq2R,MAAA1B,YAAA1oY,KAAAg7Y,eAAAtS,GACA1oY,IACA,GACG,CACHi5B,IAAA,gBACAt2B,MAAA,SAAA07G,GACA,OAAAr+G,KAAAy4Y,YAAAp6R,EAAA+lX,SAAApke,KAAAwkY,aAAAxkY,KAAA+zG,UAAAuiS,MAAA5N,SACA,GACG,CACHzvW,IAAA,mBACAt2B,MAAA,SAAA07G,GACA,OAAAr+G,KAAAy4Y,YAAAp6R,EAAAykX,cAAA9ie,KAAAwkY,aAAAxkY,KAAA+zG,UAAAuiS,MAAA5N,SACA,GACG,CACHzvW,IAAA,iBACA3M,IAAA,WACA,OAnEA,EAmEAtsB,KAAA2rW,SAAA,CACA,GACG,CACH1yU,IAAA,UACAt2B,MAAA,SAAAkqI,EAAAliH,GACA2uF,EAAAk5B,EAAA8/V,EAAArte,WAAA,UAAAjF,MAAA4K,KAAA5K,KAAA6sI,EAAAliH,GACA3qB,KAAA2rW,SAAA,EAAA3rW,KAAA2rW,QACA3rW,KAAAwkY,YAAA,IACA,GACG,CACHvrW,IAAA,UACAt2B,MAAA,SAAA6F,GAEA,OADAxI,KAAAwI,OACAxI,IACA,GACG,CACHi5B,IAAA,mBACAt2B,MAAA,SAAAvC,GAEA,OADAJ,KAAA+zG,UAAAtzF,QAAAzgB,KAAAI,GACAJ,IACA,GACG,CACHi5B,IAAA,uBACAt2B,MAAA,SAAAuhB,GACA,IAAAyud,IAAA//d,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,KAAAA,UAAA,GACAmhG,EAAA/zG,KAAA+zG;AAGA,OAFA4+X,IAAAzud,IAAAm6F,KAAAr+G,KAAAwkY,cAAAzwR,EAAAzW,MAAAyW,EAAAq2R,MAAA1B,QAAA30R,EAAAq2R,MAAAwnG,YAAA79X,EAAAg+R,MAAA+gF,EAAA5mF,KAAArjS,QACAkL,EAAAq3R,YAAAprY,KAAAkkB,GACAlkB,IACA,GACG,CACHi5B,IAAA,kBACAt2B,MAAA,WAEA,OADA3C,KAAA+zG,UAAAtzF,QAAAzgB,MACAA,IACA,GACG,CACHi5B,IAAA,aACAt2B,MAAA,SAAAU,EAAAkqB,EAAAk/B,GACA,IAAAw7D,EAAAjoH,KAAA2qB,IAAA7mB,KAAAmkH;AACA,SAAA16F,EACA,OAAAlqB,EACArD,KAAAkuZ,qBAAAjmS,EAAA5kH,YADArD,KAAAy6Y;AAIA,GADA,MAAAhuV,MAAAl/B,IACAlqB,EAAA,OAAArD,KAAAmuY,YAAA5gX,EAAAk/B;AACA,IAAAi8U,EAAA1oY,KAAAwkY;AACA,IAAAkE,EAAA,CACA,IAAA0B,EAAApqY,KAAA2qB,IAAAqqD,QAAAznD;AACAm7W,EAAAj8U,GAAAl/B,EAAA68W,EAAA1B,QAAA0B,EAAAwnG,YAAA5xe,KAAA2qB,IAAAqqD,QAAAvoB,GACA,CAGA,OAFAzsD,KAAAqxe,iBAAA9jd,EAAAk/B,EAAAw7D,EAAA5kH,OAAAqlY,IACA1oY,KAAA+zG,UAAAzW,OAAAt9F,KAAA+zG,UAAAtnD,IAAAl/B,EAAAlqB,EAAA9C,QAAAP,KAAAs1Y,aAAApC,EAAAqC,KAAAv1Y,KAAA+zG,UAAAg+R,MACA/xY,IAEA,GACG,CACHi5B,IAAA,UACAt2B,MAAA,SAAAs2B,EAAAt2B,GAEA,OADA3C,KAAA25S,KAAA,iBAAA1gR,WAAAt2B,EACA3C,IACA,GACG,CACHi5B,IAAA,UACAt2B,MAAA,SAAAs2B,GACA,OAAAj5B,KAAA25S,KAAA,iBAAA1gR,UACA,GACG,CACHA,IAAA,YACA3M,IAAA,WACA,QAAA9c,KAAAxP,KAAA25S,KAAA;AACA,QACA,GACG,CACH1gR,IAAA,iBACAt2B,MAAA,WAEA,OADA3C,KAAA2rW,SA9IA,EA+IA3rW,IACA,GACG,CACHi5B,IAAA,mBACA3M,IAAA,WACA,OApJA,EAoJAtsB,KAAA2rW,SAAA,CACA,KAEA2mI,CACA,CAvJA,CAuJCzf,EAAAzqT;AACD,SAAA3lK,EAAAyJ,EAAAquJ,GACA,OAAAA,GAAAruJ,IAAAzJ,KAAA83J,GAAAruJ,CACA,CACA,IAAA0me,EAAA1/V,EAAA,SAAA0/V,EAAAxqe,EAAAsiM,EAAAnwC,GACAxnB,EAAA/yI,KAAA4ye,GACA5ye,KAAAoI,OACApI,KAAA+yE,KAAAtwE,EAAAioM,EAAA33H,KAAAwnF,GACAv6J,KAAA2S,MAAAlQ,EAAAioM,EAAA/3L,MAAA4nJ,EACA,GACAs4U,EAAA,KAAAD,EAAA,OACA7/Z,KAAA,SAAAv7C,GACA,OAAAA,EAAA7M,KAAA6M,EAAAywF,OAAA0hS,YAAA1J,eACA,EACAttY,MAAA,SAAAssC,GACA,OAAAA,EAAAt0B,GACA,IACC,IAAAiod,EAAA,aACD7/Z,KAAA,SAAAv7C,EAAAy8C,GACA,OAAAz8C,EAAAu8E,WAAAm/R,EAAAC,QAAAl/T,EAAAtpD,IACA,EACAhY,MAAA,SAAAssC,GACA,OAAAA,EAAA80D,SACA,IACC,IAAA6+X,EAAA,eACD7/Z,KAAA,SAAAv7C,GACA,OAAAA,EAAAgtW,aAAA,IACA,EACA7xX,MAAA,SAAAssC,EAAA6zb,EAAAC,EAAA9wd,GACA,OAAAA,EAAA8xF,UAAAg4R,QAAA9sV,EAAAulV,YAAA,IACA,IACC,IAAAouG,EAAA,qBACD7/Z,KAAA,WACA,QACA,EACApgE,MAAA,SAAAssC,EAAAwxN,GACA,OAAAxxN,EAAA+zb,iBAAAviO,EAAA,EAAAA,CACA,KAEApkB,EAAAn5G,EAAA,SAAAm5G,EAAApkI,EAAAmiN,GACA,IAAA8uJ,EAAAl5d;AACA+yI,EAAA/yI,KAAAqsP,GACArsP,KAAAioH,SACAjoH,KAAAoqU,QAAA,GACApqU,KAAAize,aAAAlrd,OAAAxjB,OAAA,MACAvE,KAAAwoY,OAAAqqG,EAAAzye,QACAgqU,KAAA5vT,QAAA,SAAAuwX,GACA,GAAAmuF,EAAA+Z,aAAAloG,EAAA9xW,KAAA,UAAA+D,WAAA,iDAAA+tW,EAAA9xW,IAAA;AACAigc,EAAA9uJ,QAAAxiU,KAAAmjY,GACAmuF,EAAA+Z,aAAAloG,EAAA9xW,KAAA8xW,EACAA,EAAAhhC,KAAA9nV,OAAAi3c,EAAA1wF,OAAA5gY,KAAA,IAAAgre,EAAA7nG,EAAA9xW,IAAA8xW,EAAAhhC,KAAA9nV,MAAA8oX,GACA,EACA,GACA8a,EAAA,WACA,SAAAA,EAAAruX,GACAu7G,EAAA/yI,KAAA6lZ,GACA7lZ,KAAAw3B,QACA,CA4JA,OA3JA07G,EAAA2yQ,EAAA,EACA5sX,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAw3B,OAAAywF,MACA,GACG,CACHhvF,IAAA,UACA3M,IAAA,WACA,OAAAtsB,KAAAw3B,OAAA4yS,OACA,GACG,CACHnxS,IAAA,QACAt2B,MAAA,SAAAs8C,GACA,OAAAj/C,KAAAykY,iBAAAxlV,GAAAh9B,KACA,GACG,CACHgX,IAAA,oBACAt2B,MAAA,SAAAs8C,GAEA,IADA,IAAA6xD,EAAAl+F,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACAtS,EAAA,EAAsBA,EAAAN,KAAAw3B,OAAA4yS,QAAA7pU,OAAgCD,IAAA,GAAAA,GAAAwwG,EAAA,CACtD,IAAAi6R,EAAA/qY,KAAAw3B,OAAA4yS,QAAA9pU;AACA,GAAAyqY,EAAAhhC,KAAAmpI,oBAAAnoG,EAAAhhC,KAAAmpI,kBAAAtoe,KAAAmgY,EAAA9rV,EAAAj/C,MAAA,QACA,CACA,QACA,GACG,CACHi5B,IAAA,mBACAt2B,MAAA,SAAAwwe,GACA,IAAAnze,KAAAkze,kBAAAC,GAAA,OACAlxd,MAAAjiB,KACAuuY,aAAA;AAKA,IAHA,IAAA6kG,EAAA,CAAAD,GACArqK,EAAA9oU,KAAAqze,WAAAF,GACA/7F,EAAA,OACa,CAEb,IADA,IAAAk8F,KACAhze,EAAA,EAAwBA,EAAAN,KAAAw3B,OAAA4yS,QAAA7pU,OAAgCD,IAAA,CACxD,IAAAyqY,EAAA/qY,KAAAw3B,OAAA4yS,QAAA9pU;AACA,GAAAyqY,EAAAhhC,KAAAukC,kBAAA,CACA,IAAA9tY,EAAA42Y,IAAA92Y,GAAAE,EAAA,EACAguY,EAAA4I,IAAA92Y,GAAA2hB,MAAAjiB,KACAi/C,EAAAz+C,EAAA4ye,EAAA7ye,QAAAwqY,EAAAhhC,KAAAukC,kBAAA1jY,KAAAmgY,EAAAvqY,EAAA4ye,EAAAhze,MAAAI,GAAA4ye,EAAA5kG,EAAA1lE;AACA,GAAA7pR,GAAA6pR,EAAAoqK,kBAAAj0b,EAAA3+C,GAAA,CAEA,GADA2+C,EAAAosV,QAAA,sBAAA8nG,IACA/7F,EAAA,CACAA,EAAA;AACA,QAAAzxT,EAAA,EAAgCA,EAAA3lF,KAAAw3B,OAAA4yS,QAAA7pU,OAAgColF,IAAAyxT,EAAAxvY,KAAA+9E,EAAArlF,EAAA,CAChE2hB,MAAA6mT,EACAtoU,EAAA4ye,EAAA7ye,QACkB,CAClB0hB,MAAAjiB,KACAQ,EAAA,GAEA,CACA4ye,EAAAxre,KAAAq3C,GACA6pR,IAAAuqK,WAAAp0b,GACAq0b,IACA,CACAl8F,MAAA92Y,GAAA,CACA2hB,MAAA6mT,EACAtoU,EAAA4ye,EAAA7ye,QAEA,CACA,CACA,IAAA+ye,EAAA,OACArxd,MAAA6mT,EACAylE,aAAA6kG,EAEA,CACA,GACG,CACHn6c,IAAA,aACAt2B,MAAA,SAAAs8C,GACA,IAAAA,EAAA+9H,OAAA+2E,GAAA/zP,KAAA2qB,KAAA,UAAAqS,WAAA;AAGA,IAFA,IAAAu2c,EAAA,IAAA1tF,EAAA7lZ,KAAAw3B,QACAgxW,EAAAxoY,KAAAw3B,OAAAgxW,OACAloY,EAAA,EAAsBA,EAAAkoY,EAAAjoY,OAAmBD,IAAA,CACzC,IAAA83U,EAAAowD,EAAAloY;AACAize,EAAAn7J,EAAAhwU,MAAAgwU,EAAAzlU,MAAAssC,EAAAj/C,KAAAo4U,EAAAhwU,MAAApI,KAAAuze,EACA,CACA,OAAAA,CACA,GACG,CACHt6c,IAAA,KACA3M,IAAA,WACA,WAAAgmd,EAAAtye,KACA,GACG,CACHi5B,IAAA,cACAt2B,MAAA,SAAA60B,GAIA,IAHA,IAAAg8c,EAAA,IAAAnnP,EAAArsP,KAAAioH,OAAAzwF,EAAA4yS,SACAo+D,EAAAgrG,EAAAhrG,OACAv0T,EAAA,IAAA4xU,EAAA2tF,GACAlze,EAAA,EAAsBA,EAAAkoY,EAAAjoY,OAAmBD,IAAA,CACzC,IAAA8H,EAAAogY,EAAAloY,GAAA8H;AACA6rE,EAAA7rE,GAAApI,KAAA6S,eAAAzK,GAAApI,KAAAoI,GAAAogY,EAAAloY,GAAAyyE,KAAAv7C,EAAAy8C,EACA,CACA,OAAAA,CACA,GACG,CACHh7C,IAAA,SACAt2B,MAAA,SAAA8we,GACA,IAAAxsd,EAAA,CACA0D,IAAA3qB,KAAA2qB,IAAAw/I,SACAp2D,UAAA/zG,KAAA+zG,UAAAo2D;AAKA,GAHAnqK,KAAAwkY,cAAAv9W,EAAAu9W,YAAAxkY,KAAAwkY,YAAA5gX,IAAA,SAAAzZ,GACA,OAAAA,EAAAggK,QACA,IACAspU,GAAA,UAAAzpW,EAAAypW,GAAA,QAAAvoT,KAAAuoT,EAAA,CACA,UAAAvoT,GAAA,aAAAA,EAAA,UAAAluJ,WAAA;AACA,IAAA+tW,EAAA0oG,EAAAvoT,GACAjpK,EAAA8oX,EAAAhhC,KAAA9nV;AACAA,KAAAkoJ,SAAAljJ,EAAAikK,GAAAjpK,EAAAkoJ,OAAAv/J,KAAAmgY,EAAA/qY,KAAA+qY,EAAA9xW,MACA,CACA,OAAAhS,CACA,IACG,EACHgS,IAAA,SACAt2B,MAAA,SAAA60B,GAGA,IAFA,IAAAg8c,EAAA,IAAAnnP,EAAA70N,EAAA7M,IAAA6M,EAAA7M,IAAA7mB,KAAAmkH,OAAAzwF,EAAAywF,OAAAzwF,EAAA4yS,SACAn2P,EAAA,IAAA4xU,EAAA2tF,GACAlze,EAAA,EAAsBA,EAAAkze,EAAAhrG,OAAAjoY,OAA2BD,IAAA2zE,EAAAu/Z,EAAAhrG,OAAAloY,GAAA8H,MAAAore,EAAAhrG,OAAAloY,GAAAyyE,KAAAv7C,EAAAy8C;AACjD,OAAAA,CACA,GACG,CACHh7C,IAAA,WACAt2B,MAAA,SAAA60B,EAAAwtR,EAAAyuL,GACA,IAAAzuL,EAAA,UAAAhoR,WAAA;AACA,IAAAxF,EAAAywF,OAAA,UAAAjrF,WAAA;AACA,IAAAw2c,EAAA,IAAAnnP,EAAA70N,EAAAywF,OAAAzwF,EAAA4yS,SACAn2P,EAAA,IAAA4xU,EAAA2tF;AAoBA,OAnBAA,EAAAhrG,OAAAhuX,QAAA,SAAA49T,GACA,UAAAA,EAAAhwU,KACA6rE,EAAAtpD,IAAAmoc,EAAApuc,KAAAmkY,SAAArxX,EAAAywF,OAAA+8L,EAAAr6R;KACU,gBAAAytT,EAAAhwU,KACV6rE,EAAA8/B,UAAAm/R,EAAA2V,SAAA50U,EAAAtpD,IAAAq6R,EAAAjxM;KACU,kBAAAqkO,EAAAhwU,KACV48S,EAAAw/E,cAAAvwT,EAAAuwT,YAAAx/E,EAAAw/E,YAAA5gX,IAAA4T,EAAAywF,OAAAo8W;IACU,CACV,GAAAoP,EAAA,QAAAvoT,KAAAuoT,EAAA,CACA,IAAA1oG,EAAA0oG,EAAAvoT,GACAjpK,EAAA8oX,EAAAhhC,KAAA9nV;AACA,GAAA8oX,EAAA9xW,KAAAm/S,EAAAhwU,MAAA6Z,KAAA4mY,UAAA9gY,OAAA9iB,UAAA4N,eAAAjI,KAAAo6S,EAAA95H,GAEA,YADAj3G,EAAAmkQ,EAAAhwU,MAAA6Z,EAAA4mY,SAAAj+Y,KAAAmgY,EAAAvzW,EAAAwtR,EAAA95H,GAAAj3G,GAGA,CACAA,EAAAmkQ,EAAAhwU,MAAAgwU,EAAArlQ,KAAAv7C,EAAAy8C,EACA,CACA,GACAA,CACA,KAEA4xU,CACA,CAjKA;AAkKA,SAAA6tF,EAAA7hc,EAAA0oH,EAAA/wJ,GACA,QAAA0hL,KAAAr5I,EAAA,CACA,IAAAsB,EAAAtB,EAAAq5I;AACA/3I,aAAAorH,SAAAprH,IAAA1wC,KAAA83J,GAAsD,mBAAA2wB,IAAA/3I,EAAAugc,EAAAvgc,EAAAonH,EAAA,KACtD/wJ,EAAA0hL,GAAA/3I,CACA,CACA,OAAA3pC,CACA,CACA,IAAA+hY,EAAA,WACA,SAAAA,EAAAxhC,GACAh3N,EAAA/yI,KAAAurY,GACAvrY,KAAA+pW,OACA/pW,KAAAsqD,MAAA,GACAy/S,EAAAz/S,OAAAopb,EAAA3pI,EAAAz/S,MAAAtqD,UAAAsqD,OACAtqD,KAAAi5B,IAAA8wU,EAAA9wU,IAAA8wU,EAAA9wU,QAAA06c,EAAA,SACA,CAOA,OANAzgW,EAAAq4P,EAAA,EACAtyW,IAAA,WACAt2B,MAAA,SAAAsf,GACA,OAAAA,EAAAjiB,KAAAi5B,IACA,KAEAsyW,CACA,CAfA,GAgBA7yV,EAAA3wB,OAAAxjB,OAAA;AACA,SAAAove,EAAAvre,GACA,OAAAA,KAAAswC,EAAAtwC,EAAA,OAAAswC,EAAAtwC,IACAswC,EAAAtwC,GAAA,EACAA,EAAA,IACA,CACA,IAAAypY,EAAA,WACA,SAAAA,IACA,IAAAzpY,EAAAwK,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACAmgI,EAAA/yI,KAAA6xY,GACA7xY,KAAAi5B,IAAA06c,EAAAvre,EACA,CAYA,OAXA8qI,EAAA2+P,EAAA,EACA54W,IAAA,MACAt2B,MAAA,SAAAsf,GACA,OAAAA,EAAAuV,OAAAy7c,aAAAjze,KAAAi5B,IACA,GACG,CACHA,IAAA,WACAt2B,MAAA,SAAAsf,GACA,OAAAA,EAAAjiB,KAAAi5B,IACA,KAEA44W,CACA,CAlBA;AAmBAx4V,EAAA+jW,aAAoBA,EACpB/jW,EAAAwsW,YAAmBA,EACnBxsW,EAAAylW,cAAqBA,EACrBzlW,EAAAkyV,OAAcA,EACdlyV,EAAAw4V,UAAiBA,EACjBx4V,EAAA65V,UAAiBA,EACjB75V,EAAAm+a,eAAsBA,EACtBn+a,EAAAy5V,cAAqBA,EACrBz5V,EAAAi5b,YAAmBA,gBCn3BnB,IAOAsB,EACAC,EARAC,EAAwBroZ,EAAQ,OAChCsoZ,EAAwBtoZ,EAAQ,OAChCuoZ,EAAuBvoZ,EAAQ,OAC/BwoZ,EAAyBxoZ,EAAQ,OACjCyoZ,EAA4BzoZ,EAAQ;AAKpC,uBAAA0pB,QAAA,CACA,IAAA/oF,EAAA,IAAA+oF;AACAy+X,EAAA36c,GAAA7M,EAAAE,IAAA2M,GACA46c,EAAA,CAAA56c,EAAAt2B,KACAypB,EAAAS,IAAAoM,EAAAt2B,GACAA,EAEA,KAAE,CACF,MAAAypB,EAAA,GACA+nd,EAAA;AACA,IAAAC,EAAA;AACAR,EAAA36c,IACA,QAAA34B,EAAA,EAAkBA,EAAA8rB,EAAA7rB,OAAkBD,GAAA,KAAA8rB,EAAA9rB,IAAA24B,EAAA,OAAA7M,EAAA9rB,EAAA,IAEpCuze,EAAA,CAAA56c,EAAAt2B,KACAyxe,GAAAD,IAAAC,EAAA,GACAhod,EAAAgod,KAAAn7c,EACA7M,EAAAgod,KAAAzxe,EAEA,CASA,IAAA0xe,EAAA,MACA,WAAA/4Z,CAAAvtE,EAAAuT,EAAAsC,EAAA0wd,GACAt0e,KAAA+N,QACA/N,KAAAshB,SACAthB,KAAA4jB,MACA5jB,KAAAs0e,UACA,CACA,QAAAC,CAAAj6b,GACA,QAAAh6C,EAAA,EAAkBA,EAAAN,KAAA4jB,IAAArjB,OAAqBD,IAAA,CACvC,MAAAqge,EAAA3ge,KAAA4jB,IAAAtjB;AACA,GAAAqge,GAAArmb,EAAA;AACA,MAAA1sC,EAAAtN,EAAAN,KAAA+N,MACAF,EAAAvN,EAAAN,KAAA+N,MAAA;AACA,IAAAC,EAAAJ,EAAA,EACAE,EAAAD,EAAA;AACA,QAAA83E,EAAA,EAAmB33E,EAAAhO,KAAA+N,OAAA/N,KAAA4jB,IAAAtjB,EAAAqlF,IAAAg7Y,EAAiDh7Y,IAAA33E;AACpE,QAAA23E,EAAA,EAAmB73E,EAAA9N,KAAAshB,QAAAthB,KAAA4jB,IAAAtjB,EAAAN,KAAA+N,MAAA43E,IAAAg7Y,EAAgEh7Y,IAAA73E;AACnF,OACAF,OACAC,MACAG,QACAF,SAEA,CACA,UAAAkvB,WAAA,uBAA8Csd,UAC9C,CACA,QAAAk6b,CAAAl6b,GACA,QAAAh6C,EAAA,EAAkBA,EAAAN,KAAA4jB,IAAArjB,OAAqBD,IAAA,GAAAN,KAAA4jB,IAAAtjB,IAAAg6C,EAAA,OAAAh6C,EAAAN,KAAA+N;AACvC,UAAAivB,WAAA,uBAA8Csd,UAC9C,CACA,QAAAm6b,CAAAn6b,EAAA56B,EAAAhc,GACA,MAAAkK,KAAUA,EAAAI,QAAAH,MAAAC,UAA2B9N,KAAAu0e,SAAAj6b;AACrC,eAAA56B,GACAhc,EAAA,KAAAkK,EAAAI,GAAAhO,KAAA+N,OAAA,KACA/N,KAAA4jB,IAAA/V,EAAA7N,KAAA+N,OAAArK,EAAA,EAAAkK,EAAA,EAAAI,KAEAtK,EAAA,KAAAmK,EAAAC,GAAA9N,KAAAshB,QAAA,KACAthB,KAAA4jB,IAAAhW,EAAA5N,KAAA+N,OAAArK,EAAA,EAAAmK,EAAA,EAAAC,GAEA,CACA,WAAA4me,CAAA5ze,EAAAma,GACA,MAAUrN,KAAA+me,EAAA3me,MAAA4me,EAAA/me,IAAAgne,EAAA/me,OAAAgne,GAAyD90e,KAAAu0e,SAAAzze,IACzD8M,KAAAmne,EAAA/me,MAAAgne,EAAAnne,IAAAone,EAAAnne,OAAAone,GAAyDl1e,KAAAu0e,SAAAt5d;AACnE,OACArN,KAAA7K,KAAA8b,IAAA81d,EAAAI,GACAlne,IAAA9K,KAAA8b,IAAAg2d,EAAAI,GACAjne,MAAAjL,KAAA+b,IAAA81d,EAAAI,GACAlne,OAAA/K,KAAA+b,IAAAg2d,EAAAI,GAEA,CACA,WAAAC,CAAA9zd,GACA,MAAA4F,EAAA,GACAmwX,EAAA;AACA,QAAAhzI,EAAA/iP,EAAAxT,IAA2Bu2P,EAAA/iP,EAAAvT,OAAmBs2P,IAAA,QAAAsN,EAAArwP,EAAAzT,KAAiC8jQ,EAAArwP,EAAArT,MAAkB0jQ,IAAA,CACjG,MAAA3oQ,EAAAq7P,EAAApkQ,KAAA+N,MAAA2jQ,EACAp3N,EAAAt6C,KAAA4jB,IAAA7a;AACAquY,EAAA98V,KACA88V,EAAA98V,MACAo3N,GAAArwP,EAAAzT,MAAA8jQ,GAAA1xQ,KAAA4jB,IAAA7a,EAAA,IAAAuxC,GAAA8pN,GAAA/iP,EAAAxT,KAAAu2P,GAAApkQ,KAAA4jB,IAAA7a,EAAA/I,KAAA+N,QAAAusC,GACArzB,EAAArf,KAAA0yC,GACA,CACA,OAAArzB,CACA,CACA,UAAAmud,CAAAhxO,EAAAsN,EAAAgiJ,GACA,QAAApzZ,EAAA,EAAA+0e,EAAA,GAAiC/0e,IAAA,CACjC,MAAAg1e,EAAAD,EAAA3hF,EAAA5sP,MAAAxmK,GAAAoyY;AACA,GAAApyY,GAAA8jQ,EAAA,CACA,IAAAr7P,EAAA2oQ,EAAAtN,EAAApkQ,KAAA+N;AACA,MAAAwne,GAAAnxO,EAAA,GAAApkQ,KAAA+N;AACA,KAAAhF,EAAAwse,GAAAv1e,KAAA4jB,IAAA7a,GAAAsse,GAAAtse;AACA,OAAAA,GAAAwse,EAAAD,EAAA,EAAAt1e,KAAA4jB,IAAA7a,EACA,CACAsse,EAAAC,CACA,CACA,CACA,UAAAhpd,CAAAonY,GACA,OAAAkgF,EAAAlgF,IAAAmgF,EAAAngF,EAGA,SAAAA,GACA,YAAAA,EAAA5vZ,KAAAimW,KAAAqpD,UAAA,UAAAp2X,WAAA,qBAAA02X,EAAA5vZ,KAAAsE;AACA,MAAA2F,EA8DA,SAAA2lZ,GACA,IAAA3lZ,GAAA,EACAyne;AACA,QAAApxO,EAAA,EAAmBA,EAAAsvJ,EAAA/gB,WAAwBvuI,IAAA,CAC3C,MAAAqxO,EAAA/hF,EAAA5sP,MAAAs9F;AACA,IAAAsxO,EAAA;AACA,GAAAF,EAAA,QAAA7vZ,EAAA,EAAkCA,EAAAy+K,EAASz+K,IAAA,CAC3C,MAAAgwZ,EAAAjiF,EAAA5sP,MAAAnhF;AACA,QAAArlF,EAAA,EAAmBA,EAAAq1e,EAAAhjG,WAAwBryY,IAAA,CAC3C,MAAAykX,EAAA4wH,EAAA7uU,MAAAxmK;AACAqlF,EAAAo/R,EAAAjrS,MAAAo5U,QAAA9uJ,IAAAsxO,GAAA3wH,EAAAjrS,MAAAm5U,QACA,CACA,CACA,QAAA3yZ,EAAA,EAAkBA,EAAAm1e,EAAA9iG,WAAwBryY,IAAA,CAC1C,MAAAykX,EAAA0wH,EAAA3uU,MAAAxmK;AACAo1e,GAAA3wH,EAAAjrS,MAAAm5U,QACAluC,EAAAjrS,MAAAo5U,QAAA,IAAAsiF,KACA,EACA,GAAAzne,IAAA2ne,EACA3ne,GAAA2ne,IAAA3ne,EAAAhL,KAAA+b,IAAA/Q,EAAA2ne,GACA,CACA,OAAA3ne,CACA,CAtBA,CA9DA2lZ,GAAApyY,EAAAoyY,EAAA/gB,WACA/uX,EAAA;AACA,IAAAgyd,EAAA,EACAtB,EAAA;AACA,MAAAuB,EAAA;AACA,QAAAv1e,EAAA,EAAAD,EAAA0N,EAAAuT,EAAqChhB,EAAAD,EAAOC,IAAAsjB,EAAAtjB,GAAA;AAC5C,QAAA8jQ,EAAA,EAAA9pN,EAAA,EAA4B8pN,EAAA9iP,EAAc8iP,IAAA,CAC1C,MAAAqxO,EAAA/hF,EAAA5sP,MAAAs9F;AACA9pN;AACA,QAAAh6C,EAAA,GAAmBA,IAAA,CACnB,KAAAs1e,EAAAhyd,EAAArjB,QAAA,GAAAqjB,EAAAgyd;AACA,GAAAt1e,GAAAm1e,EAAA9iG,WAAA;AACA,MAAAmjG,EAAAL,EAAA3uU,MAAAxmK,IACA2yZ,QAAWA,EAAAC,UAAAC,YAA6B2iF,EAAAh8Z;AACxC,QAAA/4E,EAAA,EAAmBA,EAAAmyZ,EAAanyZ,IAAA,CAChC,GAAAA,EAAAqjQ,GAAA9iP,EAAA,EACAgzd,MAAA,KAAA1se,KAAA,CACA9D,KAAA,mBACAw2C,MACA95C,EAAA0yZ,EAAAnyZ;AAEA,KACA,CACA,MAAAme,EAAA02d,EAAA70e,EAAAgN;AACA,QAAA8G,EAAA,EAAoBA,EAAAo+Y,EAAap+Y,IAAA,CACjC,GAAA+O,EAAA1E,EAAArK,GAAA+O,EAAA1E,EAAArK,GAAAylC,GACAg6b,MAAA,KAAA1se,KAAA,CACA9D,KAAA,YACAsgQ,MACA9pN,MACA95C,EAAAyyZ,EAAAp+Y;AAEA,MAAAkhe,EAAA5iF,KAAAt+Y;AACA,GAAAkhe,EAAA,CACA,MAAAC,GAAA92d,EAAArK,GAAA9G,EAAA,EAAA0iQ,EAAAolO,EAAAG;AACA,MAAAvlO,MAAAslO,GAAA,GAAAF,EAAAG,EAAA,IACAH,EAAAG,GAAAD,EACAF,EAAAG,EAAA,MACQvlO,GAAAslO,GAAAF,EAAAG,EAAA,IACR,CACA,CACA,CACAJ,GAAA3iF,EACA34W,GAAAw7b,EAAApjG,QACA,CACA,MAAAujG,GAAA7xO,EAAA,GAAAr2P;AACA,IAAA2pd,EAAA;AACA,KAAAke,EAAAK,GAAA,GAAAryd,EAAAgyd,MAAAle;AACAA,IAAA4c,MAAA,KAAA1se,KAAA,CACA9D,KAAA,UACAsgQ,MACA5jQ,EAAAk3d,IAEAp9a,GACA,CACA,IAAAvsC,GAAA,IAAAuT,IAAAgzd,MAAA,KAAA1se,KAAA,CAAuE9D,KAAA;AACvE,MAAAoye,EAAA,IAAA7B,EAAAtme,EAAAuT,EAAAsC,EAAA0wd;AACA,IAAA6B;AACA,QAAA71e,EAAA,GAAiB61e,GAAA71e,EAAAu1e,EAAAt1e,OAAoCD,GAAA,QAAAu1e,EAAAv1e,IAAAu1e,EAAAv1e,EAAA,GAAAghB,IAAA60d;AAErD,OADAA,GA0BA,SAAAvyd,EAAAiyd,EAAAniF,GACA9vY,EAAA0wd,WAAA1wd,EAAA0wd,SAAA;AACA,MAAAl9F,EAAA;AACA,QAAA92Y,EAAA,EAAiBA,EAAAsjB,MAAArjB,OAAoBD,IAAA,CACrC,MAAAg6C,EAAA12B,MAAAtjB;AACA,GAAA82Y,EAAA98V,GAAA;AACA88V,EAAA98V;AACA,MAAAp2B,EAAAwvY,EAAA7a,OAAAv+V;AACA,IAAAp2B,EAAA,UAAA8Y,WAAA,uBAAyDsd;AACzD,IAAAqxT,EAAA;AACA,MAAA7xR,EAAA51D,EAAA41D;AACA,QAAA6L,EAAA,EAAkBA,EAAA7L,EAAAm5U,QAAmBttU,IAAA,CACrC,MAAAywZ,EAAAP,GAAAv1e,EAAAqlF,GAAA/hE,EAAA7V,MAAA;AACA,MAAAqoe,GAAAt8Z,EAAAq5U,UAAAr5U,EAAAq5U,SAAAxtU,IAAAywZ,KAAAzqI,MAAA0qI,EAAAv8Z,KAAA6L,GAAAywZ,EACA,CACAzqI,GAAA/nV,EAAA0wd,SAAAjtU,QAAA,CACAvjK,KAAA,oBACAw2C,MACA64W,SAAAxnD,GAEA,CACA,CArBA,CA1BAuqI,EAAAL,EAAAniF,GACAwiF,CACA,CA/DA,CAHAxiF,GACA;AA+GA,SAAA2iF,EAAAv8Z,GACA,GAAAA,EAAAq5U,SAAA,OAAAr5U,EAAAq5U,SAAA/yZ;AACA,MAAA6mB,EAAA;AACA,QAAA3mB,EAAA,EAAiBA,EAAAw5E,EAAAm5U,QAAmB3yZ,IAAA2mB,EAAArf,KAAA;AACpC,OAAAqf,CACA,CAIA,SAAAqvd,EAAAtoG,EAAAjmC,GACA,oBAAAimC,EAAA;AACA,MAAAuoG,EAAAvoG,EAAAl/X,aAAA,iBACAk8a,EAAAurD,GAAA,eAAAlxd,KAAAkxd,KAAAt+d,MAAA,KAAA2L,IAAAphB,GAAA8I,OAAA9I,IAAA,KACAywZ,EAAA3nZ,OAAA0iY,EAAAl/X,aAAA,eACAmY,EAAA,CACAgsY,UACAC,QAAA5nZ,OAAA0iY,EAAAl/X,aAAA,eACAqkZ,SAAA63B,KAAAzqb,QAAA0yZ,EAAA+3B,EAAA;AAEA,UAAA9/P,KAAA68K,EAAA,CACA,MAAA8tE,EAAA9tE,EAAA78K,GAAAsrT,WACA7ze,EAAAkza,KAAA7nC;AACA,MAAArrY,IAAAskB,EAAAikK,GAAAvoL,EACA,CACA,OAAAskB,CACA,CACA,SAAAwvd,EAAAvyd,EAAA6jV,GACA,MAAAjuR,EAAA;AACA,GAAA51D,EAAA41D,MAAAm5U,UAAAn5U,EAAAm5U,QAAA/uY,EAAA41D,MAAAm5U,SACA,GAAA/uY,EAAA41D,MAAAo5U,UAAAp5U,EAAAo5U,QAAAhvY,EAAA41D,MAAAo5U,SACAhvY,EAAA41D,MAAAq5U,WAAAr5U,EAAA,iBAAA51D,EAAA41D,MAAAq5U,SAAAr7Y,KAAA;AACA,UAAAozK,KAAA68K,EAAA,CACA,MAAAzzN,EAAAyzN,EAAA78K,GAAAwrT;AACApiW,KAAApwH,EAAA41D,MAAAoxG,GAAApxG,EACA,CACA,OAAAA,CACA,CACA,SAAA68Z,EAAAh0e,GACA,UAAAA,EAAA,CACA,IAAAkR,MAAA1T,QAAAwC,GAAA,UAAAkmD,UAAA;AACA,UAAAuvG,KAAAz1J,EAAA,oBAAAy1J,EAAA,UAAAvvG,UAAA,+CAFA,CAGA,CAwFA,SAAAisW,EAAA7sS,GACA,IAAAhhG,EAAAghG,EAAAusC,OAAAsgQ;AACA,IAAA7tY,EAAA,CACAA,EAAAghG,EAAAusC,OAAAsgQ,eAAA;AACA,UAAA1sZ,KAAA6/G,EAAAk4F,MAAA,CACA,MAAAr8M,EAAAmkH,EAAAk4F,MAAA/3M,GAAAsjS,EAAA5nS,EAAAimW,KAAAqpD;AACA1nH,IAAAzkR,EAAAykR,GAAA5nS,EACA,CACA,CACA,OAAAmjB,CACA,CAOA,MAAA2vd,EAAA,IAAA9C,EAAAjiG,UAAA;AAIA,SAAAglG,EAAAxkG,GACA,QAAA1yY,EAAA0yY,EAAAuE,MAAA,EAA8Bj3Y,EAAA,EAAOA,IAAA,UAAA0yY,EAAAnuX,KAAAvkB,GAAAmE,KAAAimW,KAAAqpD,UAAA,OAAA/gB,EAAAnuX,KAAA,GAAA8wD,QAAAq9T,EAAAr1N,OAAAr9K,EAAA;AACrC,WACA,CAWA,SAAAm3e,EAAA70d,GACA,MAAAq0X,EAAAr0X,EAAA8xF,UAAAuiS;AACA,QAAA32Y,EAAA22Y,EAAAM,MAA2Bj3Y,EAAA,EAAOA,IAAA,UAAA22Y,EAAApyX,KAAAvkB,GAAAmE,KAAAimW,KAAAqpD,UAAA;AAClC,QACA,CAIA,SAAA2jF,EAAA90d,GACA,MAAAk+X,EAAAl+X,EAAA8xF;AACA,mBAAAosS,KAAA62F,YAAA,OAAA72F,EAAA62F,YAAA18b,IAAA6lW,EAAA82F,UAAA38b,IAAA6lW,EAAA62F,YAAA72F,EAAA82F;AACA,YAAA92F,KAAAj8X,MAAA,QAAAi8X,EAAAj8X,KAAApgB,KAAAimW,KAAAqpD,UAAA,OAAAjT,EAAA7F;AACA,MAAA9+T,EAAAq7Z,EAAA12F,EAAA7J,QAAA4gG,EAAA/2F,EAAA7J;AACA,GAAA96T,EAAA,OAAAA;AACA,UAAAx+C,WAAA,iCAAuDmjX,EAAA/qU,OACvD,CAIA,SAAA8ha,EAAA7kG,GACA,QAAAp1N,EAAAo1N,EAAAnH,UAAA5wV,EAAA+3V,EAAA/3V,IAAkD2iI,EAAOA,IAAAx2K,WAAA6zC,IAAA,CACzD,MAAAoxP,EAAAzuH,EAAAn5K,KAAAimW,KAAAqpD;AACA,WAAA1nH,GAAA,eAAAA,EAAA,OAAA2mG,EAAA1nX,IAAAqqD,QAAA16B,EACA,CACA,QAAA0iI,EAAAq1N,EAAApH,WAAA3wV,EAAA+3V,EAAA/3V,IAAoD0iI,EAAQA,IAAA4jG,UAAAtmO,IAAA,CAC5D,MAAAoxP,EAAA1uH,EAAAl5K,KAAAimW,KAAAqpD;AACA,WAAA1nH,GAAA,eAAAA,EAAA,OAAA2mG,EAAA1nX,IAAAqqD,QAAA16B,EAAA0iI,EAAA01N,SACA,CACA,CAIA,SAAAykG,EAAA9kG,GACA,aAAAA,EAAAvqX,OAAAhkB,KAAAimW,KAAAqpD,aAAA/gB,EAAAnH,SACA,CAIA,SAAAksG,EAAA/kG,GACA,OAAAA,EAAAnuX,KAAA,GAAA8wD,QAAAq9T,EAAA/3V,IAAA+3V,EAAAnH,UAAAwH,SACA,CAIA,SAAA2kG,EAAAC,EAAAC,GACA,OAAAD,EAAA1gG,OAAA2gG,EAAA3gG,OAAA0gG,EAAAh9b,KAAAi9b,EAAAr4d,OAAA,IAAAo4d,EAAAh9b,KAAAi9b,EAAAp4d,KAAA,EACA,CAgBA,SAAAs1d,EAAApiG,EAAA3yX,EAAAhc,GACA,MAAAgwZ,EAAArhB,EAAAnuX,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAnlG,EAAAnzX,OAAA,GACAm7I,EAAAz2I,EAAA6wd,SAAApiG,EAAA/3V,IAAAk9b,EAAA93d,EAAAhc;AACA,aAAA22J,EAAA,KAAAg4O,EAAAnuX,KAAA,GAAA8wD,QAAAwia,EAAAn9U,EACA,CAIA,SAAAo9U,EAAA39Z,EAAAx/B,EAAA95C,EAAA,GACA,MAAAymB,EAAA,IACA6yD,EACAm5U,QAAAn5U,EAAAm5U,QAAAzyZ;AAOA,OALAymB,EAAAksY,WACAlsY,EAAAksY,SAAAlsY,EAAAksY,SAAA/yZ,QACA6mB,EAAAksY,SAAArpZ,OAAAwwC,EAAA95C,GACAymB,EAAAksY,SAAA1vY,KAAA5O,KAAA,KAAAoS,EAAAksY,SAAA,OAEAlsY,CACA,CAIA,SAAAywd,EAAA59Z,EAAAx/B,EAAA95C,EAAA,GACA,MAAAymB,EAAA,IACA6yD,EACAm5U,QAAAn5U,EAAAm5U,QAAAzyZ;AAEA,GAAAymB,EAAAksY,SAAA,CACAlsY,EAAAksY,SAAAlsY,EAAAksY,SAAA/yZ;AACA,QAAAE,EAAA,EAAkBA,EAAAE,EAAOF,IAAA2mB,EAAAksY,SAAArpZ,OAAAwwC,EAAA,IACzB,CACA,OAAArzB,CACA,CAIA,SAAA0wd,EAAA/zd,EAAA8vY,EAAAhiJ,GACA,MAAAujJ,EAAAH,EAAApB,EAAA5vZ,KAAAmkH,QAAAitS;AACA,QAAA9wJ,EAAA,EAAmBA,EAAAxgP,EAAAtC,OAAkB8iP,IAAA,GAAAsvJ,EAAA7a,OAAAj1X,MAAA8tP,EAAAtN,EAAAxgP,EAAA7V,QAAAjK,MAAAmxZ,EAAA;AACrC,QACA,CAaA,IAAAG,EAAA,MAAAA,UAAA0+E,EAAA5gG,UACA,WAAA53T,CAAA07Z,EAAAC,EAAAD,GACA,MAAAtjF,EAAAsjF,EAAA9yd,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAR,EAAA93d,OAAA,GACAmC,EAAAuC,EAAA8wd,YAAAsC,EAAA18b,IAAAk9b,EAAAP,EAAA38b,IAAAk9b,GACA7sd,EAAAqsd,EAAA9yd,KAAA,GACA+6D,EAAAr7D,EAAAuxd,YAAA9zd,GAAAkF,OAAA1hB,MAAAoye,EAAA38b,IAAAk9b;AACAv4Z,EAAAooF,QAAA4vU,EAAA38b,IAAAk9b;AACA,MAAA5xY,EAAA3mB,EAAAr7D,IAAA02B,IACA,MAAAyqU,EAAA2uC,EAAA7a,OAAAv+V;AACA,IAAAyqU,EAAA,UAAA/nV,WAAA,uBAA0Dsd;AAC1D,MAAA/sB,EAAAiqd,EAAAl9b,EAAA;AACA,WAAAw5b,EAAAtc,eAAA7sc,EAAAqqD,QAAAznD,GAAA5C,EAAAqqD,QAAAznD,EAAAw3V,EAAAtjS,QAAApjE;AAEA2kJ,MAAAp9D,EAAA,GAAAwkS,MAAAxkS,EAAA,GAAAmsS,IAAAnsS,GACA5lG,KAAAg3e,cACAh3e,KAAAi3e,WACA,CACA,GAAArzd,CAAA+G,EAAA00J,GACA,MAAA23T,EAAArsd,EAAAqqD,QAAAqqG,EAAAz7J,IAAA5jB,KAAAg3e,YAAA18b,MACA28b,EAAAtsd,EAAAqqD,QAAAqqG,EAAAz7J,IAAA5jB,KAAAi3e,UAAA38b;AACA,GAAA68b,EAAAH,IAAAG,EAAAF,IAAAI,EAAAL,EAAAC,GAAA,CACA,MAAAW,EAAA53e,KAAAg3e,YAAA9yd,MAAA,IAAA8yd,EAAA9yd,MAAA;AACA,OAAA0zd,GAAA53e,KAAA63e,iBAAAziF,EAAA0iF,aAAAd,EAAAC,GACAW,GAAA53e,KAAA+3e,iBAAA3iF,EAAA4iF,aAAAhB,EAAAC,GACA,IAAA7hF,EAAA4hF,EAAAC,EACA,CACA,OAAAnD,EAAAhhG,cAAA62E,QAAAqtB,EAAAC,EACA,CACA,OAAAx1Z,GACA,MAAAiyU,EAAA1zZ,KAAAg3e,YAAA9yd,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAx3e,KAAAg3e,YAAA93d,OAAA,GACAmC,EAAAuC,EAAA8wd,YAAA10e,KAAAg3e,YAAA18b,IAAAk9b,EAAAx3e,KAAAi3e,UAAA38b,IAAAk9b,GACApgG,EAAA,GACA9rI,EAAA;AACA,QAAAlH,EAAA/iP,EAAAxT,IAA2Bu2P,EAAA/iP,EAAAvT,OAAmBs2P,IAAA,CAC9C,MAAAi/F,EAAA;AACA,QAAAt6V,EAAAq7P,EAAAxgP,EAAA7V,MAAAsT,EAAAzT,KAAA8jQ,EAAArwP,EAAAzT,KAAkE8jQ,EAAArwP,EAAArT,MAAkB0jQ,IAAA3oQ,IAAA,CACpF,MAAAuxC,EAAA12B,MAAA7a;AACA,GAAAquY,EAAA98V,GAAA;AACA88V,EAAA98V;AACA,MAAA29b,EAAAr0d,EAAA2wd,SAAAj6b;AACA,IAAAyqU,EAAA2uC,EAAA7a,OAAAv+V;AACA,IAAAyqU,EAAA,UAAA/nV,WAAA,uBAA2Dsd;AAC3D,MAAA49b,EAAA72d,EAAAzT,KAAAqqe,EAAArqe,KACAuqe,EAAAF,EAAAjqe,MAAAqT,EAAArT;AACA,GAAAkqe,EAAA,GAAAC,EAAA,GACA,IAAAr+Z,EAAAirS,EAAAjrS;AAGA,GAFAo+Z,EAAA,IAAAp+Z,EAAA29Z,EAAA39Z,EAAA,EAAAo+Z,IACAC,EAAA,IAAAr+Z,EAAA29Z,EAAA39Z,IAAAm5U,QAAAklF,MACAF,EAAArqe,KAAAyT,EAAAzT,MAEA,GADAm3W,IAAAjhX,KAAAm8Y,cAAAnmU,IACAirS,EAAA,UAAA/nV,WAAA,oCAA0E/mB,KAAA8iB,UAAA+gD,WACnEirS,IAAAjhX,KAAAS,OAAAu1E,EAAAirS,EAAAtjS,QACP,CACA,GAAAw2Z,EAAApqe,IAAAwT,EAAAxT,KAAAoqe,EAAAnqe,OAAAuT,EAAAvT,OAAA,CACA,MAAAgsE,EAAA,IACAirS,EAAAjrS,MACAo5U,QAAAnwZ,KAAA8b,IAAAo5d,EAAAnqe,OAAAuT,EAAAvT,QAAA/K,KAAA+b,IAAAm5d,EAAApqe,IAAAwT,EAAAxT;AAEAk3W,EAAAkzH,EAAApqe,IAAAwT,EAAAxT,IAAAk3W,EAAAjhX,KAAAm8Y,cAAAnmU,GACAirS,EAAAjhX,KAAAS,OAAAu1E,EAAAirS,EAAAtjS,QACA,CACA4hR,EAAAz7V,KAAAm9W,EACA,CACAz5G,EAAA1jQ,KAAA8rZ,EAAA5sP,MAAAs9F,GAAAvsG,KAAAk8U,EAAA/1L,SAAAzwR,KAAA81U,IACA,CACA,MAAAymC,EAAA9pY,KAAA+3e,kBAAA/3e,KAAA63e,iBAAAnkF,EAAApoJ;AACA,WAAAyoO,EAAA7zF,MAAA6zF,EAAA/1L,SAAAzwR,KAAAu8W,GAAA,IACA,CACA,OAAArpX,CAAAw+B,EAAAwiC,EAAAsyZ,EAAA7zF,MAAA5iT,OACA,MAAAm3X,EAAAx1a,EAAAhqC,MAAA1U,OAAAqlG,EAAA5lG,KAAA4lG;AACA,QAAAtlG,EAAA,EAAkBA,EAAAslG,EAAArlG,OAAmBD,IAAA,CACrC,MAAA8pY,MAAWA,EAAA2H,OAAansS,EAAAtlG,GAAA++K,EAAApgI,EAAAogI,QAAAj/K,MAAAq0d;AACxBx1a,EAAAx+B,QAAA4+J,EAAAz7J,IAAAwmX,EAAA9vV,KAAA+kI,EAAAz7J,IAAAmuX,EAAAz3V,KAAAh6C,EAAAyze,EAAA7zF,MAAA5iT,MAAA7b,EACA,CACA,MAAA0+T,EAAA2zF,EAAA5gG,UAAAsgF,SAAAv0a,EAAAt0B,IAAAqqD,QAAA/1B,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA5jB,KAAAysD,MAAA;AACA0zV,GAAAlhW,EAAAq2V,aAAA6K,EACA,CACA,WAAA/U,CAAAnsV,EAAA/6B,GACAlkB,KAAAygB,QAAAw+B,EAAA,IAAA80b,EAAA7zF,MAAA6zF,EAAA/1L,SAAAzwR,KAAArJ,GAAA,KACA,CACA,WAAAk0d,CAAAlse,GACA,MAAAwnZ,EAAA1zZ,KAAAg3e,YAAA9yd,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAx3e,KAAAg3e,YAAA93d,OAAA,GACA+/D,EAAAr7D,EAAAuxd,YAAAvxd,EAAA8wd,YAAA10e,KAAAg3e,YAAA18b,IAAAk9b,EAAAx3e,KAAAi3e,UAAA38b,IAAAk9b;AACA,QAAAl3e,EAAA,EAAkBA,EAAA2+E,EAAA1+E,OAAkBD,IAAA4L,EAAAwnZ,EAAA7a,OAAA55T,EAAA3+E,IAAAk3e,EAAAv4Z,EAAA3+E,GACpC,CACA,cAAAy3e,GACA,MAAAM,EAAAr4e,KAAAg3e,YAAAjue,OAAA,GACAuve,EAAAt4e,KAAAi3e,UAAAlue,OAAA;AACA,GAAAhG,KAAA8b,IAAAw5d,EAAAC,GAAA;AACA,MAAAC,EAAAF,EAAAr4e,KAAAg3e,YAAA9rG,UAAApxT,MAAAo5U,QACAslF,EAAAF,EAAAt4e,KAAAi3e,UAAA/rG,UAAApxT,MAAAo5U;AACA,OAAAnwZ,KAAA+b,IAAAy5d,EAAAC,IAAAx4e,KAAAi3e,UAAA/yd,MAAA,GAAAyuX,UACA,CACA,mBAAAqlG,CAAAhB,EAAAC,EAAAD,GACA,MAAAtjF,EAAAsjF,EAAA9yd,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAR,EAAA93d,OAAA,GACAu5d,EAAA70d,EAAA2wd,SAAAyC,EAAA18b,IAAAk9b,GACAkB,EAAA90d,EAAA2wd,SAAA0C,EAAA38b,IAAAk9b,GACA7sd,EAAAqsd,EAAA9yd,KAAA;AAQA,OAPAu0d,EAAA5qe,KAAA6qe,EAAA7qe,KACA4qe,EAAA5qe,IAAA,IAAAmpe,EAAArsd,EAAAqqD,QAAAwia,EAAA5zd,MAAA60d,EAAA7qe,QACA8qe,EAAA5qe,OAAA8V,EAAAtC,SAAA21d,EAAAtsd,EAAAqqD,QAAAwia,EAAA5zd,QAAA7V,OAAA6V,EAAAtC,OAAA,GAAAo3d,EAAA1qe,MAAA,OAEA0qe,EAAA7qe,IAAA,IAAAope,EAAAtsd,EAAAqqD,QAAAwia,EAAA5zd,MAAA80d,EAAA9qe,QACA6qe,EAAA3qe,OAAA8V,EAAAtC,SAAA01d,EAAArsd,EAAAqqD,QAAAwia,EAAA5zd,QAAA7V,OAAA6V,EAAAtC,OAAA,GAAAm3d,EAAAzqe,MAAA,MAEA,IAAAonZ,EAAA4hF,EAAAC,EACA,CACA,cAAAY,GACA,MAAAnkF,EAAA1zZ,KAAAg3e,YAAA9yd,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAx3e,KAAAg3e,YAAA93d,OAAA,GACAy5d,EAAA/0d,EAAA4wd,SAAAx0e,KAAAg3e,YAAA18b,IAAAk9b,GACAoB,EAAAh1d,EAAA4wd,SAAAx0e,KAAAi3e,UAAA38b,IAAAk9b;AACA,GAAAz0e,KAAA8b,IAAA85d,EAAAC,GAAA;AACA,MAAAC,EAAAF,EAAA34e,KAAAg3e,YAAA9rG,UAAApxT,MAAAm5U,QACA6lF,EAAAF,EAAA54e,KAAAi3e,UAAA/rG,UAAApxT,MAAAm5U;AACA,OAAAlwZ,KAAA+b,IAAA+5d,EAAAC,IAAAl1d,EAAA7V,KACA,CACA,EAAAgmP,CAAApsM,GACA,OAAAA,aAAAytW,GAAAztW,EAAAqvb,YAAA18b,KAAAt6C,KAAAg3e,YAAA18b,KAAAqN,EAAAsvb,UAAA38b,KAAAt6C,KAAAi3e,UAAA38b,GACA,CACA,mBAAAw9b,CAAAd,EAAAC,EAAAD,GACA,MAAAtjF,EAAAsjF,EAAA9yd,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAR,EAAA93d,OAAA,GACAu5d,EAAA70d,EAAA2wd,SAAAyC,EAAA18b,IAAAk9b,GACAkB,EAAA90d,EAAA2wd,SAAA0C,EAAA38b,IAAAk9b,GACA7sd,EAAAqsd,EAAA9yd,KAAA;AAQA,OAPAu0d,EAAA7qe,MAAA8qe,EAAA9qe,MACA6qe,EAAA7qe,KAAA,IAAAope,EAAArsd,EAAAqqD,QAAAwia,EAAA5zd,MAAA60d,EAAA5qe,IAAA+V,EAAA7V,SACA2qe,EAAA1qe,MAAA4V,EAAA7V,QAAAkpe,EAAAtsd,EAAAqqD,QAAAwia,EAAA5zd,QAAA7V,OAAA2qe,EAAA7qe,IAAA,UAEA6qe,EAAA9qe,KAAA,IAAAqpe,EAAAtsd,EAAAqqD,QAAAwia,EAAA5zd,MAAA80d,EAAA7qe,IAAA+V,EAAA7V,SACA0qe,EAAAzqe,MAAA4V,EAAA7V,QAAAipe,EAAArsd,EAAAqqD,QAAAwia,EAAA5zd,QAAA7V,OAAA0qe,EAAA5qe,IAAA,SAEA,IAAAunZ,EAAA4hF,EAAAC,EACA,CACA,MAAA9sU,GACA,OACArmK,KAAA,OACAguZ,OAAA9xZ,KAAAg3e,YAAA18b,IACA86B,KAAAp1E,KAAAi3e,UAAA38b,IAEA,CACA,eAAAuuW,CAAAl+X,EAAAq6R,GACA,WAAAowG,EAAAzqY,EAAAqqD,QAAAgwO,EAAA8sG,QAAAnnY,EAAAqqD,QAAAgwO,EAAA5vO,MACA,CACA,aAAA7wE,CAAAomB,EAAAqsY,EAAAC,EAAAD,GACA,WAAA5B,EAAAzqY,EAAAqqD,QAAAgiV,GAAArsY,EAAAqqD,QAAAiiV,GACA,CACA,WAAA2mE,GACA,WAAAmb,EAAA/4e,KAAAg3e,YAAA18b,IAAAt6C,KAAAi3e,UAAA38b,IACA;AAEA86W,EAAAnwZ,UAAAmyE,WACA08Z,EAAA5gG,UAAAqnF,OAAA,OAAAnlE;AAIA,IAAA2jF,EAAA,MAAAA,EACA,WAAAz9Z,CAAAw2U,EAAA18U,GACAp1E,KAAA8xZ,SACA9xZ,KAAAo1E,MACA,CACA,GAAAxxD,CAAAy7J,GACA,WAAA05T,EAAA15T,EAAAz7J,IAAA5jB,KAAA8xZ,QAAAzyO,EAAAz7J,IAAA5jB,KAAAo1E,MACA,CACA,OAAAJ,CAAArqD,GACA,MAAAqsd,EAAArsd,EAAAqqD,QAAAh1E,KAAA8xZ,QAAAmlF,EAAAtsd,EAAAqqD,QAAAh1E,KAAAo1E;AACA,aAAA4ha,EAAAlvd,OAAAhkB,KAAAimW,KAAAqpD,WAAA,OAAA6jF,EAAAnvd,OAAAhkB,KAAAimW,KAAAqpD,WAAA4jF,EAAAjue,QAAAiue,EAAAlvd,OAAA6qX,YAAAskG,EAAAlue,QAAAkue,EAAAnvd,OAAA6qX,YAAA0kG,EAAAL,EAAAC,GAAA,IAAA7hF,EAAA4hF,EAAAC,GACAnD,EAAA5gG,UAAAqC,KAAA0hG,EAAA,EACA;AAEA,SAAA+B,EAAA/2d,GACA,KAAAA,EAAA8xF,qBAAAqhT,GAAA;AACA,MAAAn2U,EAAA;AAIA,OAHAh9D,EAAA8xF,UAAAqkY,YAAA,CAAAl0d,EAAAo2B,KACA2kC,EAAAr3E,KAAAose,EAAA9hF,WAAAhuY,KAAAo2B,IAAAp2B,EAAAwuX,SAAA,CAA0E7sS,MAAA,oBAE1EmuY,EAAA7hF,cAAA5tZ,OAAA0d,EAAA0I,IAAAs0D,EACA,CAwDA,MAAAg6Z,EAAA,IAAAnF,EAAAjiG,UAAA;AAQA,SAAAqnG,EAAA/vJ,EAAAziL,EAAA1oJ,EAAA9R,GACA,MAAAite,EAAAhwJ,EAAAwpD,WAAAymG,EAAA1yU,EAAAisO;AACAr4G,EAAA,QAAAh6R,EAAA,EAAAqlF,EAAA,EAA+BrlF,EAAA84e,EAAa94e,IAAA,CAC5C,MAAAwmK,EAAAJ,EAAAI,MAAAxmK;AACA,QAAAwzd,EAAAnuY,EAAAtlF,EAAA0C,KAAA8b,IAAAs6d,EAAA74e,EAAA,GAAmDwzd,EAAAzzd,EAAUyzd,IAAA,GAAA3qI,EAAAriL,MAAAgtT,IAAAhtT,EAAA,CAC7DnhF,EAAAmuY,EAAA,EACA91c,GAAA8oJ,EAAA4rO;AACA,SAAAp4G,CACA,CACApuR,EAAA46J,EAAA9oJ,GACA2nE,EAAAwzZ,GAAAhwJ,EAAAriL,MAAAnhF,GAAA+5Y,WAAA54T,GAAAoyU,EAAA/vJ,EAAAriL,MAAAnhF,GAAAmhF,EAAA9oJ,EAAA,EAAA9R,GACA46J,EAAA2jO,aAAA,EAAA3jO,EAAArlF,QAAApjE,KAAAnS,EAAA8R,EAAA,GACAA,GAAA8oJ,EAAA4rO,QACA,CACA,CAUA,SAAAokB,EAAA70Y,EAAAusX,GACA,IAAAvvV;AACA,MAAAovO,EAAA,CAAAnqQ,EAAAo2B,KACA,SAAAp2B,EAAApgB,KAAAimW,KAAAqpD,YAAAn0W,EAMA,SAAAh9B,EAAAyxY,EAAA2lF,EAAAp6b,GACA,MAAAr7B,EAAAywd,EAAA/nd,IAAAonY;AACA,IAAA9vY,EAAA0wd,SAAA,OAAAr1b;AACAA,MAAAh9B,EAAAg9B;AACA,MAAAq6b,EAAA;AACA,QAAAh5e,EAAA,EAAiBA,EAAAsjB,EAAAtC,OAAgBhhB,IAAAg5e,EAAA1xe,KAAA;AACjC,QAAAtH,EAAA,EAAiBA,EAAAsjB,EAAA0wd,SAAA/ze,OAAyBD,IAAA,CAC1C,MAAAi5e,EAAA31d,EAAA0wd,SAAAh0e;AACA,gBAAAi5e,EAAAz1e,KAAA,CACA,MAAAihX,EAAA2uC,EAAA7a,OAAA0gG,EAAAj/b;AACA,IAAAyqU,EAAA;AACA,MAAAjrS,EAAAirS,EAAAjrS;AACA,QAAA6L,EAAA,EAAmBA,EAAA7L,EAAAo5U,QAAmBvtU,IAAA2zZ,EAAAC,EAAAn1O,IAAAz+K,IAAA4zZ,EAAA/4e;AACtCy+C,EAAA06V,cAAA16V,EAAAogI,QAAAz7J,IAAAy1d,EAAA,EAAAE,EAAAj/b,KAAA,KAAAm9b,EAAA39Z,IAAAm5U,QAAAsmF,EAAA/4e,EAAA+4e,EAAA/4e,GACA,MAAI,cAAA+4e,EAAAz1e,KAAAw1e,EAAAC,EAAAn1O,MAAAm1O,EAAA/4e;KACJ,uBAAA+4e,EAAAz1e,KAAA,CACA,MAAAihX,EAAA2uC,EAAA7a,OAAA0gG,EAAAj/b;AACA,IAAAyqU,EAAA;AACA9lU,EAAA06V,cAAA16V,EAAAogI,QAAAz7J,IAAAy1d,EAAA,EAAAE,EAAAj/b,KAAA,SACAyqU,EAAAjrS,MACAo5U,QAAAnuC,EAAAjrS,MAAAo5U,QAAAqmF,EAAA/4e,GAEA,MAAI,wBAAA+4e,EAAAz1e,KAAA,CACJ,MAAAihX,EAAA2uC,EAAA7a,OAAA0gG,EAAAj/b;AACA,IAAAyqU,EAAA;AACA9lU,EAAA06V,cAAA16V,EAAAogI,QAAAz7J,IAAAy1d,EAAA,EAAAE,EAAAj/b,KAAA,SACAyqU,EAAAjrS,MACAq5U,SAAAomF,EAAApmF,UAEA,MAAI,iBAAAomF,EAAAz1e,KAAA,CACJ,MAAAw2C,EAAA2E,EAAAogI,QAAAz7J,IAAAy1d;AACAp6b,EAAAqmC,OAAAhrC,IAAAo5W,EAAAhhB,SACA,CACA,CACA,IAAA3gW,EAAAm+I;AACA,QAAA5vL,EAAA,EAAiBA,EAAAg5e,EAAA/4e,OAAoBD,IAAAg5e,EAAAh5e,KACrC,MAAAyxC,MAAAzxC,GACA4vL,EAAA5vL;AAEA,QAAAA,EAAA,EAAAg6C,EAAA++b,EAAA,EAAqC/4e,EAAAsjB,EAAAtC,OAAgBhhB,IAAA,CACrD,MAAA8jQ,EAAAsvJ,EAAA5sP,MAAAxmK,GACA6e,EAAAm7B,EAAA8pN,EAAAsuI,SACA96V,EAAA0hc,EAAAh5e;AACA,GAAAs3C,EAAA,GACA,IAAA8zP,EAAA;AACAtnC,EAAA39P,aAAAilS,EAAAtnC,EAAA39P,WAAA3C,KAAAimW,KAAAqpD;AACA,MAAAjzM,EAAA;AACA,QAAAx6H,EAAA,EAAmBA,EAAA/tC,EAAS+tC,IAAA,CAC5B,MAAAzhE,EAAA4wY,EAAA7yY,EAAAgmG,QAAAyjL,GAAAu0G;AACA/7X,GAAAi8L,EAAAv4M,KAAAsc,EACA,CACA,MAAAtF,EAAA,GAAAte,GAAAyxC,GAAAzxC,EAAA,GAAA4vL,GAAA5vL,EAAA6e,EAAA,EAAAm7B,EAAA;AACA2E,EAAAm7V,OAAAn7V,EAAAogI,QAAAz7J,IAAAhF,GAAAuhM,EACA,CACA7lK,EAAAn7B,CACA,CACA,OAAA8/B,EAAAosV,QAAA4tG,EAAA,CAAmCniF,cACnC,CAzDA,CANA70Y,EAAAiC,EAAAo2B,EAAA2E;AAIA,OAFAuvV,EACAA,EAAA7jX,KAAA1I,EAAA0I,KAAAuud,EAAA1qG,EAAA7jX,IAAA1I,EAAA0I,IAAA,EAAA0jQ,GADApsQ,EAAA0I,IAAA+9X,YAAAr6H,GAEApvO,CACA,CAuFA,SAAAu6b,EAAAC,GACA,MAAA71d,EAAAywd,EAAA/nd,IAAAmtd,GACAnuO,EAAA,GACAouO,EAAA91d,EAAAtC,OACAq4d,EAAA/1d,EAAA7V;AACA,QAAA6re,EAAA,EAAwBA,EAAAF,EAAqBE,IAAA,CAC7C,MAAAx1O,EAAA;AACA,QAAAy1O,EAAA,EAAyBA,EAAAF,EAAuBE,IAAA,CAChD,MAAAC,EAAAF,EAAAD,EAAAE,EACAE,EAAAn2d,MAAAk2d;AACA,GAAAF,EAAA,GACA,MAAAI,EAAAF,EAAAH;AACA,GAAAI,IAAAn2d,MAAAo2d,GAAA,CACA51O,EAAAx8P,KAAA;AACA,QACA,CACA,CACA,GAAAiye,EAAA,GACA,MAAAI,EAAAH,EAAA;AACA,GAAAC,IAAAn2d,MAAAq2d,GAAA,CACA71O,EAAAx8P,KAAA;AACA,QACA,CACA,CACAw8P,EAAAx8P,KAAA6xe,EAAA5gG,OAAAkhG,GACA,CACAzuO,EAAA1jQ,KAAAw8P,EACA,CACA,OAAAkH,CACA,CAMA,SAAA4uO,EAAAT,EAAAU,GACA,MAAAC,EAAA,GACAx2d,EAAAywd,EAAA/nd,IAAAmtd,GACAC,EAAA91d,EAAAtC,OACAq4d,EAAA/1d,EAAA7V;AACA,QAAA6re,EAAA,EAAwBA,EAAAF,EAAqBE,IAAA,CAC7C,MAAAS,EAAAZ,EAAA3yU,MAAA8yU,GACAU,EAAA;AACA,QAAAT,EAAA,EAAyBA,EAAAF,EAAuBE,IAAA,CAChD,MAAA90H,EAAAo1H,EAAAP,GAAAC;AACA,IAAA90H,EAAA;AACA,MAAAg1H,EAAAn2d,MAAAg2d,EAAAh2d,EAAA7V,MAAA8re,GACAU,EAAAd,EAAA5gG,OAAAkhG;AACA,IAAAQ,EAAA;AACA,MAAAC,EAAAD,EAAAz2e,KAAA2wZ,cAAA1vC,EAAAjrS,MAAAirS,EAAAtjS,QAAAsjS,EAAA2jB;AACA4xG,EAAA1ye,KAAA4ye,EACA,CACA,MAAAC,EAAAJ,EAAAv2e,KAAA2wZ,cAAA4lF,EAAAvga,MAAAwga,EAAAD,EAAA3xG;AACA0xG,EAAAxye,KAAA6ye,EACA,CACA,OAAAhB,EAAA31e,KAAA2wZ,cAAAglF,EAAA3/Z,MAAAsga,EAAAX,EAAA/wG,MACA,CASA,SAAAgyG,EAAApvO,EAAAqvO,EAAAC,EAAAC,GACA,MAAAl3e,EAAAg3e,EAAA,GAAAC,EAAA,QACAE,EAAAxvO,EAAAxhQ,OAAA6we,EAAA,GAAAA,EAAAp6e,QACAw6e,EAAAD,EAAAv6e,OAAA;AACA,IAAAiJ;AAKA,OAJAA,GAAA,IAAAqxe,GAAA,IAAAl3e,EAAAi3e,EAAA,KACA,IAAAC,IAAA,IAAAl3e,EAAAi3e,IAAAr6e,OAAA,GAAAw6e,EAAA,GACA,IAAAp3e,EAAAi3e,EAAA,GAAAA,IAAAr6e,OAAA,GAAAw6e,EACAzvO,EAAAxhQ,OAAAN,EAAA,KAAAsxe,GACAxvO,CACA,CAiBA,SAAA0vO,EAAA3oG,GACA,OAkCA,SAAAtzP,EAAAszP,GACA,QAAAuE,EAAAvE,EAAAuE,MAA8BA,GAAA,EAAYA,GAAA,GAC1C,MAAA1yX,EAAAmuX,EAAAnuX,KAAA0yX;AACA,GAAA73P,EAAA76H,GAAA,OACAA,OACAo2B,IAAA,IAAAs8V,EAAA,EAAAvE,EAAAr1N,OAAA45N,GACA13X,MAAAmzX,EAAAnzX,MAAA03X,GACAA,QAEA,CACA,WACA,CAXA,CAlCA1yX,GAAA,UAAAA,EAAApgB,KAAAimW,KAAAqpD,UAAA/gB,EACA,CAwBA,SAAA4oG,EAAAtwd,EAAA2vB,GACA,MAAA+3V,EAAA1nX,EAAAqqD,QAAA16B;AACA,OAAAu8b,EAAAxkG,IAAA6kG,EAAA7kG,EACA,CA0BA,SAAA6oG,EAAAC,EAAApnY,GACA,MAAA2/S,EAAAsnF,EAAAjnY,EAAAq2R;AACA,IAAAspB,EAAA;AACA,MAAA9vY,EAAAywd,EAAA/nd,IAAAonY,EAAAxvY;AACA,OAAAi3d,EAAA,GAAAA,EAAAv3d,EAAA7V,MAAA,SACA6V,EAAAuxd,YAAA,CACAvne,KAAAute,EACAnte,MAAAmte,EAAA,EACAtte,IAAA,EACAC,OAAA8V,EAAAtC,SACEsC,IAAAw3d,IACF,MAAAl3d,EAAAwvY,EAAAxvY,KAAA20X,OAAAuiG,GACA9gc,EAAA8gc,EAAA1nF,EAAAx0Y;AACA,OACAo7B,MACAp7B,MAAAo7B,EAAA,EACAp2B,OACA0yX,MAAA8c,EAAA9c,MAAA,IAGA,CAMA,SAAAykG,EAAAzB,EAAA7lY,GACA,MAAA2/S,EAAAsnF,EAAAjnY,EAAAq2R;AACA,IAAAspB,EAAA;AACA,MAAA9vY,EAAAywd,EAAA/nd,IAAAonY,EAAAxvY;AACA,OAAA01d,EAAA,GAAAA,EAAAh2d,EAAAtC,OAAA,SACAsC,EAAAuxd,YAAA,CACAvne,KAAA,EACAI,MAAA4V,EAAA7V,MACAF,IAAA+re,EACA9re,OAAA8re,EAAA,IACEh2d,IAAAw3d,IACF,MAAAl3d,EAAAwvY,EAAAxvY,KAAA20X,OAAAuiG,GACA9gc,EAAA8gc,EAAA1nF,EAAAx0Y;AACA,OACAo7B,MACAp7B,MAAAo7B,EAAA,EACAp2B,OACA0yX,MAAA8c,EAAA9c,MAAA,IAGA,CAcA,SAAA0kG,EAAAr8b,EAAAs8b,EAAAC,EAAAD,GACA,IAAA3gR,EAAA2gR,EACAxzJ,EAAAyzJ;AACA,QAAAl7e,EAAAi7e,EAA6Bj7e,GAAA,EAAQA,IAAA,CACrC,MAAA2+E,EAAAi8Z,EAAA56e,EAAA2+C,EAAA80D;AACA90B,KAAAzkE,QAAAuqW,IACA,MAAA02H,EAAA12H,EAAA7gW,KAAA41D,MAAAm5U,QAAA3yZ,EAAA;AACAm7e,GAAA7gR,MAAAt6N,GACAm7e,EAAA1zJ,MAAA0zJ,IAEA,CACA,QAAAn7e,EAAAi7e,EAA6Bj7e,GAAAynV,EAAeznV,IAAA,CAC5C,MAAA2+E,EAAAi8Z,EAAA56e,EAAA2+C,EAAA80D;AACA90B,KAAAzkE,QAAAuqW,IACA,MAAA02H,EAAA12H,EAAA7gW,KAAA41D,MAAAm5U,QAAA3yZ,EAAA;AACAykX,EAAA7gW,KAAA41D,MAAAm5U,QAAA,GAAAwoF,EAAA1zJ,MAAA0zJ,IAEA,CACA,MAAAC,EAAA;AACA,QAAAp7e,EAAAs6N,EAA0Bt6N,GAAAynV,EAAeznV,IAAA,CACzC,MAAAq7e,EAAAT,EAAA56e,EAAA2+C,EAAA80D;AACA4nY,KAAAp7e,OAAA,GAAAm7e,EAAA9ze,KAAAtH,EACA,CACAs6N,EAAA8gR,EAAA,GACA3zJ,EAAA2zJ,IAAAn7e,OAAA;AACA,MAAAq7e,EAAAV,EAAAtgR,EAAA37K,EAAA80D,WACA8nY,EAAAR,EAAA,EAAAp8b,EAAA80D;AACA,IAAA6nY,IAAAC,EAAA;AACA,MAAAvhG,EAAAr7V,EAAAt0B,IAAAqqD,QAAA4ma,IAAAr7e,OAAA,GAAA+5C;AACA,IAAA28W;AACA,QAAA32Z,EAAAynV,EAAwBznV,GAAAs6N,EAAiBt6N,IAAA,CACzC,MAAAw7e,EAAAZ,EAAA56e,EAAA2+C,EAAA80D;AACA,GAAA+nY,KAAAv7e,OAAA,GACA,QAAAolF,EAAAk2Z,EAAAt7e,OAAA,EAA0ColF,GAAA,EAAQA,IAAA,GAAAk2Z,EAAAl2Z,GAAArrC,MAAAwhc,EAAA,GAAAxhc,IAAA,CAClD28W,EAAA6kF,EAAA;AACA,KACA,CACA,GAAA7kF,EAAA,KACA,CACA,CACA,OAAAA,EACA,CACA3c,UACAhE,MAAAr3V,EAAAt0B,IAAAqqD,QAAAiiV,EAAA38W,KACAohc,gBAJA,CAMA,CAWA,SAAAK,EAAA98b,EAAA+8b,EAAAC,EAAAD,GACA,IAAAphR,EAAAohR,EACAj0J,EAAAk0J;AACA,QAAA37e,EAAA07e,EAA6B17e,GAAA,EAAQA,IAAA,CACrC,MAAA2+E,EAAAo8Z,EAAA/6e,EAAA2+C,EAAA80D;AACA90B,KAAAzkE,QAAAuqW,IACA,MAAA02H,EAAA12H,EAAA7gW,KAAA41D,MAAAo5U,QAAA5yZ,EAAA;AACAm7e,GAAA7gR,MAAAt6N,GACAm7e,EAAA1zJ,MAAA0zJ,IAEA,CACA,QAAAn7e,EAAA07e,EAA6B17e,GAAAynV,EAAeznV,IAAA,CAC5C,MAAA2+E,EAAAo8Z,EAAA/6e,EAAA2+C,EAAA80D;AACA90B,KAAAzkE,QAAAuqW,IACA,MAAA02H,EAAA12H,EAAA7gW,KAAA41D,MAAAo5U,QAAA5yZ,EAAA;AACAykX,EAAA7gW,KAAA41D,MAAAo5U,QAAA,GAAAuoF,EAAA1zJ,MAAA0zJ,IAEA,CACA,MAAAC,EAAA;AACA,QAAAp7e,EAAAs6N,EAA0Bt6N,GAAAynV,EAAeznV,IAAA,CACzC,MAAAq7e,EAAAN,EAAA/6e,EAAA2+C,EAAA80D;AACA4nY,KAAAp7e,OAAA,GAAAm7e,EAAA9ze,KAAAtH,EACA,CACAs6N,EAAA8gR,EAAA,GACA3zJ,EAAA2zJ,IAAAn7e,OAAA;AACA,MAAA27e,EAAAb,EAAAzgR,EAAA37K,EAAA80D,WACAooY,EAAAjB,EAAA,EAAAj8b,EAAA80D;AACA,IAAAmoY,IAAAC,EAAA;AACA,MAAA7hG,EAAAr7V,EAAAt0B,IAAAqqD,QAAAkna,IAAA37e,OAAA,GAAA+5C;AACA,IAAA28W;AACA,QAAA32Z,EAAAynV,EAAwBznV,GAAAs6N,EAAiBt6N,IAAA,CACzC,MAAA87e,EAAAf,EAAA/6e,EAAA2+C,EAAA80D;AACA,GAAAqoY,KAAA77e,OAAA,GACA,QAAAolF,EAAAw2Z,EAAA57e,OAAA,EAA6ColF,GAAA,EAAQA,IAAA,GAAAw2Z,EAAAx2Z,GAAArrC,MAAA8hc,EAAA,GAAA9hc,IAAA,CACrD28W,EAAAmlF,EAAA;AACA,KACA,CACA,GAAAnlF,EAAA,KACA,CACA,CACA,OAAAA,EACA,CACA3c,UACAhE,MAAAr3V,EAAAt0B,IAAAqqD,QAAAiiV,EAAA38W,KACAohc,gBAJA,CAMA,CA4BA,SAAAW,EAAAviW,GACA,OAAAA,EAAA,GAAAl2H,IAAA,CAAApU,EAAAlP,IACAw5I,EAAAl2H,IAAA2uB,KAAAjyC,IAEA,CAkFA,SAAAg8e,EAAAr6d,GACA,MAAAk+X,EAAAl+X,EAAA8xF,UACAs+R,EAAA0kG,EAAA90d,GACAyxY,EAAArhB,EAAAnuX,MAAA,GACAszd,EAAAnlG,EAAAnzX,OAAA,GACA0E,EAAAywd,EAAA/nd,IAAAonY;AACA,UACAvT,aAAAiV,EAAAxxY,EAAA8wd,YAAAv0F,EAAA62F,YAAA18b,IAAAk9b,EAAAr3F,EAAA82F,UAAA38b,IAAAk9b,GAAA5zd,EAAA2wd,SAAAliG,EAAA/3V,IAAAk9b,GACAA,aACA5zd,MACA8vY,QAEA,CAMA,SAAA6oF,EAAAt9b,GAAAr7B,IAAyBA,EAAA4zd,aAAA9jF,SAAwBhiJ,GACjD,IAAA8qO,EAAA9qO,EAAA;AACAimO,EAAA/zd,EAAA8vY,EAAAhiJ,EAAA8qO,OAAA,GAAA9qO,MAAA9tP,EAAA7V,MAAA;AACA,QAAAq2P,EAAA,EAAmBA,EAAAxgP,EAAAtC,OAAkB8iP,IAAA,CACrC,MAAAr7P,EAAAq7P,EAAAxgP,EAAA7V,MAAA2jQ;AACA,GAAAA,EAAA,GAAAA,EAAA9tP,EAAA7V,OAAA6V,MAAA7a,EAAA,IAAA6a,MAAA7a,GAAA,CACA,MAAAuxC,EAAA12B,MAAA7a,GACAg8W,EAAA2uC,EAAA7a,OAAAv+V;AACA2E,EAAA06V,cAAA16V,EAAAogI,QAAAz7J,IAAA4zd,EAAAl9b,GAAA,KAAAo9b,EAAA3yH,EAAAjrS,MAAA43L,EAAA9tP,EAAA4wd,SAAAl6b,KACA8pN,GAAA2gH,EAAAjrS,MAAAo5U,QAAA,CACA,KAAI,CACJ,MAAApvZ,EAAA,MAAA04e,EAAA1nF,EAAApB,EAAA5vZ,KAAAmkH,QAAA88P,KAAA2uC,EAAA7a,OAAAj1X,MAAA7a,EAAAyze,IAAA14e,KACAw2C,EAAA12B,EAAAwxd,WAAAhxO,EAAAsN,EAAAgiJ;AACAz0W,EAAAm7V,OAAAn7V,EAAAogI,QAAAz7J,IAAA4zd,EAAAl9b,GAAAx2C,EAAAm8Y,gBACA,CACA,CACA,OAAAhhW,CACA,CA8BA,SAAAw9b,EAAAx9b,GAAAr7B,IAA4BA,EAAA8vY,QAAA8jF,cAAwB9lO,GACpD,MAAAgrO,EAAAz9b,EAAAogI,QAAA41N,KAAA10Y;AACA,QAAA6jQ,EAAA,EAAmBA,EAAAxgP,EAAAtC,QAAiB,CACpC,MAAAvY,EAAAq7P,EAAAxgP,EAAA7V,MAAA2jQ,EACAp3N,EAAA12B,MAAA7a,GACAg8W,EAAA2uC,EAAA7a,OAAAv+V,GACAw/B,EAAAirS,EAAAjrS;AACA,GAAA43L,EAAA,GAAA9tP,MAAA7a,EAAA,IAAAuxC,GAAAo3N,EAAA9tP,EAAA7V,MAAA,GAAA6V,MAAA7a,EAAA,IAAAuxC,EAAA2E,EAAA06V,cAAA16V,EAAAogI,QAAAj/K,MAAAs8e,GAAA94d,IAAA4zd,EAAAl9b,GAAA,KAAAm9b,EAAA39Z,EAAA43L,EAAA9tP,EAAA4wd,SAAAl6b;IACA,CACA,MAAAp7B,EAAA+/B,EAAAogI,QAAAj/K,MAAAs8e,GAAA94d,IAAA4zd,EAAAl9b;AACA2E,EAAAqmC,OAAApmE,IAAA6lW,EAAA2tB,SACA,CACAtuI,GAAAtqL,EAAAo5U,OACA,CACA,CA2BA,SAAAypF,EAAA/4d,EAAA8vY,EAAAtvJ,GACA,IAAAw4O;AACA,MAAA3nF,EAAAH,EAAApB,EAAA5vZ,KAAAmkH,QAAAitS;AACA,QAAAxjJ,EAAA,EAAmBA,EAAA9tP,EAAA7V,MAAiB2jQ,IAAA,YAAAkrO,EAAAlpF,EAAA7a,OAAAj1X,MAAA8tP,EAAAtN,EAAAxgP,EAAA7V,eAAA,IAAA6ue,OAAA,EAAAA,EAAA94e,OAAAmxZ,EAAA;AACpC,QACA,CAIA,SAAA4nF,EAAA59b,GAAAr7B,IAAsBA,EAAA4zd,aAAA9jF,SAAwBtvJ,GAC9C,IAAA04O,EAAAtF;AACA,QAAAl3e,EAAA,EAAiBA,EAAA8jQ,EAAS9jQ,IAAAw8e,GAAAppF,EAAA5sP,MAAAxmK,GAAAoyY;AAC1B,MAAAzzT,EAAA;AACA,IAAA89Z,EAAA34O,EAAA;AACAu4O,EAAA/4d,EAAA8vY,EAAAtvJ,EAAA24O,OAAA,GAAA34O,MAAAxgP,EAAAtC,OAAA;AACA,QAAAowP,EAAA,EAAA3oQ,EAAA6a,EAAA7V,MAAAq2P,EAA4CsN,EAAA9tP,EAAA7V,MAAiB2jQ,IAAA3oQ,IAAA,GAAAq7P,EAAA,GAAAA,EAAAxgP,EAAAtC,QAAAsC,MAAA7a,IAAA6a,MAAA7a,EAAA6a,EAAA7V,OAAA,CAC7D,MAAAusC,EAAA12B,MAAA7a,GACA+wE,EAAA45U,EAAA7a,OAAAv+V,GAAAw/B;AACA76B,EAAA06V,cAAA69F,EAAAl9b,EAAA,SACAw/B,EACAo5U,QAAAp5U,EAAAo5U,QAAA,IAEAxhJ,GAAA53L,EAAAm5U,QAAA,CACA,KAAG,CACH,IAAA+pF;AACA,MAAAl5e,EAAA,MAAAi5e,EAAAjoF,EAAApB,EAAA5vZ,KAAAmkH,QAAA88P,KAAA,QAAAi4H,EAAAtpF,EAAA7a,OAAAj1X,MAAA7a,EAAAg0e,EAAAn5d,EAAA7V,eAAA,IAAAive,OAAA,EAAAA,EAAAl5e,KACAogB,EAAApgB,aAAA,EAAAA,EAAAm8Y;AACA/7X,GAAA+6D,EAAAr3E,KAAAsc,EACA,CAEA,OADA+6B,EAAAm7V,OAAA0iG,EAAAhoF,EAAApB,EAAA5vZ,KAAAmkH,QAAAm8I,IAAA7/P,OAAA,KAAA06E,IACAhgC,CACA,CA8BA,SAAAg+b,EAAAh+b,GAAAr7B,IAAyBA,EAAA8vY,QAAA8jF,cAAwBpzO,GACjD,IAAA04O,EAAA;AACA,QAAAx8e,EAAA,EAAiBA,EAAA8jQ,EAAS9jQ,IAAAw8e,GAAAppF,EAAA5sP,MAAAxmK,GAAAoyY;AAC1B,MAAAwqG,EAAAJ,EAAAppF,EAAA5sP,MAAAs9F,GAAAsuI,SACA+hF,EAAAx1a,EAAAogI,QAAA41N,KAAA10Y;AACA0+C,EAAAqmC,OAAAw3Z,EAAAtF,EAAA0F,EAAA1F;AACA,MAAApgG,EAAA,IAAArzX;AACA,QAAA2tP,EAAA,EAAA3oQ,EAAAq7P,EAAAxgP,EAAA7V,MAA4C2jQ,EAAA9tP,EAAA7V,MAAiB2jQ,IAAA3oQ,IAAA,CAC7D,MAAAuxC,EAAA12B,MAAA7a;AACA,IAAAquY,EAAAxmX,IAAA0pB,GAEA,GADA88V,EAAAx/V,IAAA0C,GACA8pN,EAAA,GAAA9pN,GAAA12B,MAAA7a,EAAA6a,EAAA7V,OAAA,CACA,MAAA+rE,EAAA45U,EAAA7a,OAAAv+V,GAAAw/B;AACA76B,EAAA06V,cAAA16V,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,EAAAk9b,GAAA,SACA19Z,EACAo5U,QAAAp5U,EAAAo5U,QAAA,IAEAxhJ,GAAA53L,EAAAm5U,QAAA,CACA,MAAI,GAAA7uJ,EAAAxgP,EAAAtC,QAAAg5B,GAAA12B,MAAA7a,EAAA6a,EAAA7V,OAAA,CACJ,MAAAg3W,EAAA2uC,EAAA7a,OAAAv+V,GACAw/B,EAAAirS,EAAAjrS,MACA+9E,EAAAktN,EAAAjhX,KAAAS,OAAA,IACAu1E,EACAo5U,QAAAnuC,EAAAjrS,MAAAo5U,QAAA,GACInuC,EAAAtjS,SACJ04T,EAAAv2X,EAAAwxd,WAAAhxO,EAAA,EAAAsN,EAAAgiJ;AACAz0W,EAAAm7V,OAAAn7V,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA4zd,EAAAr9F,GAAAtiP,GACA65G,GAAA53L,EAAAm5U,QAAA,CACA,CACA,CACA,CAuBA,SAAA1jN,EAAAw1K,GACA,MAAA5gX,EAAA4gX,EAAAtjS;AACA,UAAAt9E,EAAAwuY,YAAAxuY,EAAA2iK,MAAA,GAAA2mO,aAAA,GAAAtpY,EAAA2iK,MAAA,GAAA6rO,UACA,CAgFA,SAAAwqG,EAAAC,GACA,OAAAn7d,EAAA6jQ,KACA,MAAAq6H,EAAAl+X,EAAA8xF;AACA,IAAA+hY,EACAiE;AACA,GAAA55F,aAAAiV,EAKI,CACJ,GAAAjV,EAAA62F,YAAA18b,KAAA6lW,EAAA82F,UAAA38b,IAAA;AACAw7b,EAAA31F,EAAA62F,YAAA9rG,UACA6uG,EAAA55F,EAAA62F,YAAA18b,GACA,KATA,CACA,IAAA+ic;AAEA,GADAvH,EAjtCA,SAAAzjG,GACA,QAAA1yY,EAAA0yY,EAAAuE,MAA0Bj3Y,EAAA,EAAOA,IAAA,CACjC,MAAA+rS,EAAA2mG,EAAAnuX,KAAAvkB,GAAAmE,KAAAimW,KAAAqpD;AACA,YAAA1nH,GAAA,gBAAAA,EAAA,OAAA2mG,EAAAnuX,KAAAvkB,EACA,CACA,WACA,CANA,CAitCAwgZ,EAAA/V,QACA0rG,EAAA;AACAiE,EAAA,QAAAsD,EAAAxG,EAAA12F,EAAA/V,cAAA,IAAAizG,OAAA,EAAAA,EAAA/ic,GACA,CAKA,SAAAw7b,GAAA,MAAAiE,EAAA;AACA,MAAAjE,EAAAh8Z,MAAAm5U,SAAA,GAAA6iF,EAAAh8Z,MAAAo5U,QAAA;AACA,GAAAptI,EAAA,CACA,IAAAw3N,EAAAxH,EAAAh8Z;AACA,MAAAA,EAAA,GACAq5U,EAAAmqF,EAAAnqF;AACAmqF,EAAApqF,QAAA,IAAAoqF,EAAA,IACAA,EACApqF,QAAA,IAEAoqF,EAAArqF,QAAA,IAAAqqF,EAAA,IACAA,EACArqF,QAAA;AAEA,MAAA5xY,EAAAi7d,EAAAr6d,GAAAg9B,EAAAh9B,EAAAg9B;AACA,QAAA3+C,EAAA,EAAmBA,EAAA+gB,EAAArT,MAAAqT,EAAAzT,KAA4BtN,IAAAw5E,EAAAlyE,KAAAurZ,EAAA,IAC/CmqF,EACAnqF,cAAA7yZ,GAAA,CAAA6yZ,EAAA7yZ,IAAA,MACKg9e;AACL,IAAAC;AACA,QAAAn5O,EAAA/iP,EAAAxT,IAA4Bu2P,EAAA/iP,EAAAvT,OAAmBs2P,IAAA,CAC/C,IAAA9pN,EAAAj5B,EAAAuC,IAAAwxd,WAAAhxO,EAAA/iP,EAAAzT,KAAAyT,EAAAqyY;AACAtvJ,GAAA/iP,EAAAxT,MAAAysC,GAAAw7b,EAAApjG;AACA,QAAAhhI,EAAArwP,EAAAzT,KAAAtN,EAAA,EAAqCoxQ,EAAArwP,EAAArT,MAAkB0jQ,IAAApxQ,IACvDoxQ,GAAArwP,EAAAzT,MAAAw2P,GAAA/iP,EAAAxT,KACAoxC,EAAAm7V,OAAAmjG,EAAAt+b,EAAAogI,QAAAz7J,IAAA02B,EAAAj5B,EAAAm2d,WAAA,GAAA4F,EAAA,CACAl5d,KAAA4xd,EACA1xO,MACAsN,QACMuuI,cAAAnmU,EAAAx5E,IAEN,CACA2+C,EAAA06V,cAAAogG,EAAAqD,EAAA,CACAl5d,KAAA4xd,EACA1xO,IAAA/iP,EAAAxT,IACA6jQ,IAAArwP,EAAAzT,OACIksE,EAAA,IACJqmU,aAAAiV,GAAAn2W,EAAAq2V,aAAA,IAAA8f,EAAAn2W,EAAAt0B,IAAAqqD,QAAAmrU,EAAA62F,YAAA18b,KAAAijc,EAAAt+b,EAAAt0B,IAAAqqD,QAAAuoa,QAAA,IACAz3N,EAAA7mO,EACA,CACA,SAEA,CAuDA,SAAAu+b,EAAA15e,EAAAud,EAAA4yL,GACA,MAAAwpS,EAAAp8d,EAAAuC,IAAAuxd,YAAA,CACAvne,KAAA,EACAC,IAAA,EACAG,MAAA,OAAAlK,EAAAud,EAAAuC,IAAA7V,MAAA,EACAD,OAAA,UAAAhK,EAAAud,EAAAuC,IAAAtC,OAAA;AAEA,QAAAhhB,EAAA,EAAiBA,EAAAm9e,EAAAl9e,OAA0BD,IAAA,CAC3C,MAAAykX,EAAA1jW,EAAAqyY,MAAA7a,OAAA4kG,EAAAn9e;AACA,GAAAykX,KAAAjhX,OAAAmwM,EAAAihN,YAAA,QACA,CACA,QACA,CAOA,SAAAoB,EAAAxyZ,EAAA9B,GAEA,OADAA,KAAA,CAAwB07e,wBACxBA,mBA9CA,SAAA55e,GACA,gBAAAme,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAA7xE,EAAA6gN,EAAA7yY,EAAAgmG,QACA5mG,EAAAi7d,EAAAr6d,GAAAg9B,EAAAh9B,EAAAg9B,GACAggC,EAAA59D,EAAAuC,IAAAuxd,YAAA,UAAArxe,EAAA,CACA8J,KAAAyT,EAAAzT,KACAC,IAAA,EACAG,MAAAqT,EAAArT,MACAF,OAAAuT,EAAAuC,IAAAtC,QACK,OAAAxd,EAAA,CACL8J,KAAA,EACAC,IAAAwT,EAAAxT,IACAG,MAAAqT,EAAAuC,IAAA7V,MACAD,OAAAuT,EAAAvT,QACKuT,GACL8+L,EAAAlhI,EAAAr7D,IAAA02B,GAAAj5B,EAAAqyY,MAAA7a,OAAAv+V;AACA,QAAAh6C,EAAA,EAAmBA,EAAA2+E,EAAA1+E,OAAkBD,IAAA6/M,EAAA7/M,GAAAwD,MAAAmwM,EAAAihN,aAAAj2W,EAAA06V,cAAAt4X,EAAAm2d,WAAAv4Z,EAAA3+E,GAAA2zM,EAAA8wK,KAAA5kK,EAAA7/M,GAAAw5E;AACrC,OAAA76B,EAAAhqC,MAAA1U,OAAA,QAAAD,EAAA,EAA8CA,EAAA2+E,EAAA1+E,OAAkBD,IAAA2+C,EAAA06V,cAAAt4X,EAAAm2d,WAAAv4Z,EAAA3+E,GAAA2zM,EAAAihN,YAAA/0M,EAAA7/M,GAAAw5E;AAChEgsM,EAAA7mO,EACA,CACA,QACA,CACA,CAxBA,CA8CAn7C,GACA,SAAAme,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAA7xE,EAAA6gN,EAAA7yY,EAAAgmG,QACA5mG,EAAAi7d,EAAAr6d,GAAAg9B,EAAAh9B,EAAAg9B,GACA0+b,EAAAH,EAAA,MAAAn8d,EAAA4yL,GACA2pS,EAAAJ,EAAA,SAAAn8d,EAAA4yL,GACA4pS,GAAA,WAAA/5e,EAAA65e,EAAA,QAAA75e,GAAA85e,GAAA,IACAE,EAAA,UAAAh6e,EAAA,CACA8J,KAAA,EACAC,IAAAgwe,EACA7ve,MAAA,EACAF,OAAAuT,EAAAuC,IAAAtC,QACK,OAAAxd,EAAA,CACL8J,KAAAiwe,EACAhwe,IAAA,EACAG,MAAAqT,EAAAuC,IAAA7V,MACAD,OAAA,GACKuT,EACL08d,EAAA,UAAAj6e,EAAA85e,EAAA3pS,EAAA8wK,KAAA9wK,EAAAihN,YAAA,OAAApxZ,EAAA65e,EAAA1pS,EAAA8wK,KAAA9wK,EAAAihN,YAAAjhN,EAAA8wK;AACA1jW,EAAAuC,IAAAuxd,YAAA2I,GAAAtje,QAAAwje,IACA,MAAAjE,EAAAiE,EAAA38d,EAAAm2d,WACAzyH,EAAA9lU,EAAAt0B,IAAAkuX,OAAAkhG;AACAh1H,GAAA9lU,EAAA06V,cAAAogG,EAAAgE,EAAAh5H,EAAAjrS,SAEAgsM,EAAA7mO,EACA,CACA,QACA,CACA,CAMA,MAAAs3W,GAAAD,EAAA,OAA8ConF,wBAM9CrnF,GAAAC,EAAA,UAAoDonF,wBAMpDlnF,GAAAF,EAAA,QAAgDonF;AA0DhD,SAAAO,GAAAh8d,EAAA6jQ,GACA,MAAAq6H,EAAAl+X,EAAA8xF;AACA,KAAAosS,aAAAiV,GAAA;AACA,GAAAtvI,EAAA,CACA,MAAA7mO,EAAAh9B,EAAAg9B,GACAotQ,EAAAyoG,EAAA7yY,EAAAgmG,QAAA88P,KAAAk7B,gBAAAx+T;AACA0+T,EAAAi4F,YAAA,CAAArzH,EAAAzqU,KACAyqU,EAAAtjS,QAAAsyK,GAAAs4D,IAAAptQ,EAAAx+B,QAAAw+B,EAAAogI,QAAAz7J,IAAA02B,EAAA,GAAA2E,EAAAogI,QAAAz7J,IAAA02B,EAAAyqU,EAAA2tB,SAAA,OAAAqhG,EAAA7zF,MAAA7zF,EAAA,QAEAptQ,EAAA0sV,YAAA7lH,EAAA7mO,EACA,CACA,QACA,CAsDA,SAAAi/b,GAAA99e,GACA,OAAAA,EAAAie,KAAA;AACA,IAAAojE,QAAOA,EAAA0/Y,YAAAC,WAA8Bhhe;AACrC,QAAAqhF,EAAAkxT,aAAAwuF,EAAA,GAAAC,EAAA,YAAA3/Y,EAAAqlF,MAAA,GAAAhjK,KAAAimW,KAAAqpD,YACA+tE,IACAC,IACA3/Y,IAAAqlF,MAAA,GAAArlF;AAEA,MAAA1vC,EAAA0vC,EAAAqlF,MAAA,GACA4kI,EAAA35P,EAAAjuC,KAAAimW,KAAAqpD,UACAnrS,EAAAl2E,EAAAjuC,KAAAmkH,OAAAqjJ,EAAA;AACA,UAAAogC,EAAA,QAAAprS,EAAA,EAAoCA,EAAAmhF,EAAAkxT,WAAwBryY,IAAA,CAC5D,IAAA2+E,EAAAwC,EAAAqlF,MAAAxmK,GAAAmhF;AACA,MAAA7zE,EAAAtN,EAAA,EAAAyC,KAAA+b,IAAA,EAAAqid,EAAA,GACAnzd,EAAA1N,EAAAmhF,EAAAkxT,WAAA,IAAA5vY,KAAA+b,IAAA,EAAAsid,EAAA,IACAxzd,GAAAI,KAAAixE,EAAAk/Z,GAAArpF,EAAA7sS,GAAAm8I,IAAA,IAAA2vO,EAAA7zF,MAAAjhU,EAAArxE,EAAAI,IAAAyzE,SACA6pL,EAAA1jQ,KAAAq3E,EACA,KACA,YAAAysN,GAAA,eAAAA,EACA;AADApgC,EAAA1jQ,KAAAu5d,GAAAC,EAAA+c,GAAArpF,EAAA7sS,GAAAm8I,IAAA,IAAA2vO,EAAA7zF,MAAAz+T,EAAA0/Y,EAAAC,IAAA3/Y,UACA,CACA,OAEA,SAAAwmC,EAAAqjJ,GACA,MAAA0/K,EAAA;AACA,QAAA1qb,EAAA,EAAiBA,EAAAgrQ,EAAA/qQ,OAAiBD,IAAA,CAClC,MAAA8jQ,EAAAkH,EAAAhrQ;AACA,QAAAqlF,EAAAy+K,EAAAuuI,WAAA,EAAmChtT,GAAA,EAAQA,IAAA,CAC3C,MAAAutU,QAAWA,EAAAD,WAAmB7uJ,EAAAt9F,MAAAnhF,GAAA7L;AAC9B,QAAAj5E,EAAAP,EAAmBO,EAAAP,EAAA4yZ,EAAiBryZ,IAAAmqb,EAAAnqb,IAAAmqb,EAAAnqb,IAAA,GAAAoyZ,CACpC,CACA,CACA,IAAAllZ,EAAA;AACA,QAAAlN,EAAA,EAAiBA,EAAAmqb,EAAAzqb,OAAmBM,IAAAkN,EAAAhL,KAAA+b,IAAA/Q,EAAAi9a,EAAAnqb;AACpC,QAAAA,EAAA,EAAiBA,EAAAmqb,EAAAzqb,OAAmBM,IAEpC,GADAA,GAAAyqQ,EAAA/qQ,QAAA+qQ,EAAA1jQ,KAAAmse,EAAA/1L,SAAA1gN,OACA0tV,EAAAnqb,GAAAkN,EAAA,CACA,MAAAuvF,EAAAw3T,EAAA7sS,GAAA88P,KAAAk7B,gBACAhhU,EAAA;AACA,QAAA3+E,EAAA0qb,EAAAnqb,GAA2BP,EAAAyN,EAAWzN,IAAA2+E,EAAAr3E,KAAA01F;AACtCguK,EAAAzqQ,GAAAyqQ,EAAAzqQ,GAAAywM,OAAAyiS,EAAA/1L,SAAAzwR,KAAA0xD,GACA,CAEA,OACA39D,OAAAgqP,EAAA/qQ,OACAwN,QACAu9P,OAEA,CAzBA,CAFArjJ,EAAAqjJ,EACA,CA2BA,SAAA6yO,GAAA/mZ,EAAAh3F,GACA,MAAA8jB,EAAAkzE,EAAA6oT;AACA,WAAAi0F,EAAA9rU,UAAAlkJ,GAAAzD,QAAA,EAAAyD,EAAAu9D,QAAApjE,KAAAje,GAAAuqB,GACA,CAQA,SAAAyzd,IAAArwe,MAAqBA,EAAAuT,SAAAgqP,QAAqB2yK,EAAAE,GAC1C,GAAApwa,GAAAkwa,EAAA,CACA,MAAAjqa,EAAA,GACAome,EAAA;AACA,QAAAh2O,EAAA,EAAoBA,EAAAkH,EAAA/qQ,OAAmB6jQ,IAAA,CACvC,MAAA42N,EAAA1vN,EAAAlH,GAAAnlL,EAAA;AACA,QAAAyyL,EAAA19P,EAAAowP,IAAA,EAAA9jQ,EAAA,EAA0CoxQ,EAAAusK,EAAgB39a,IAAA,CAC1D,IAAAykX,EAAAi2G,EAAAl0T,MAAAxmK,EAAA06d,EAAAroF;AACAjhI,EAAAqzG,EAAAjrS,MAAAm5U,QAAAgrB,IAAAl5D,IAAAjhX,KAAA2wZ,cAAAgjF,EAAA1yH,EAAAjrS,MAAAirS,EAAAjrS,MAAAm5U,QAAAvhJ,EAAAqzG,EAAAjrS,MAAAm5U,QAAAgrB,GAAAl5D,EAAAtjS,UACAxC,EAAAr3E,KAAAm9W,GACArzG,GAAAqzG,EAAAjrS,MAAAm5U;AACA,QAAAttU,EAAA,EAAoBA,EAAAo/R,EAAAjrS,MAAAo5U,QAAwBvtU,IAAA3xE,EAAAowP,EAAAz+K,IAAA3xE,EAAAowP,EAAAz+K,IAAA,GAAAo/R,EAAAjrS,MAAAm5U,OAC5C,CACAmnF,EAAAxye,KAAAmse,EAAA/1L,SAAAzwR,KAAA0xD,GACA,CACAqsL,EAAA8uO,EACArse,EAAAkwa,CACA,CACA,GAAA38Z,GAAA68Z,EAAA,CACA,MAAAi8D,EAAA;AACA,QAAAh2O,EAAA,EAAA9jQ,EAAA,EAA2B8jQ,EAAA+5K,EAAiB/5K,IAAA9jQ,IAAA,CAC5C,MAAA2+E,EAAA,GAAA1uC,EAAA+6N,EAAAhrQ,EAAAghB;AACA,QAAAqkE,EAAA,EAAmBA,EAAAp1C,EAAAoiW,WAAuBhtT,IAAA,CAC1C,IAAAo/R,EAAAx0U,EAAAu2H,MAAAnhF;AACAy+K,EAAA2gH,EAAAjrS,MAAAo5U,QAAAirB,IAAAp5D,IAAAjhX,KAAAS,OAAA,IACAwgX,EAAAjrS,MACAo5U,QAAAnwZ,KAAA+b,IAAA,EAAAq/Z,EAAAp5D,EAAAjrS,MAAAo5U,UACKnuC,EAAAtjS,UACLxC,EAAAr3E,KAAAm9W,EACA,CACAq1H,EAAAxye,KAAAmse,EAAA/1L,SAAAzwR,KAAA0xD,GACA,CACAqsL,EAAA8uO,EACA94d,EAAA68Z,CACA,CACA,OACApwa,QACAuT,SACAgqP,OAEA,CA4BA,SAAA+yO,GAAAp/b,EAAAr7B,EAAA8vY,EAAAx0Y,EAAAtR,EAAAI,EAAAH,EAAA4md,GACA,MAAA5md,MAAA+V,EAAAtC,OAAA;AACA,IAAA44M;AACA,QAAAw3C,EAAA9jQ,EAAsB8jQ,EAAA1jQ,EAAa0jQ,IAAA,CACnC,MAAA3oQ,EAAA8E,EAAA+V,EAAA7V,MAAA2jQ,EAAAp3N,EAAA12B,MAAA7a;AACA,GAAA6a,MAAA7a,EAAA6a,EAAA7V,QAAAusC,EAAA,CACA4/K;AACA,MAAA6qJ,EAAA2uC,EAAA7a,OAAAv+V,IACWzsC,IAAAywe,EAAA1we,KAAA2we,GAA+B36d,EAAA2wd,SAAAj6b;AAC1C2E,EAAA06V,cAAA16V,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,EAAAp7B,GAAA,SACA6lW,EAAAjrS,MACAo5U,QAAArlZ,EAAAywe,IAEAr/b,EAAAm7V,OAAAn7V,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,MAAAwxd,WAAAvne,EAAA0we,EAAA7qF,IAAA3uC,EAAAjhX,KAAAm8Y,cAAA,IACAl7B,EAAAjrS,MACAo5U,QAAAorF,EAAAv5H,EAAAjrS,MAAAo5U,QAAArlZ,KAEA6jQ,GAAAqzG,EAAAjrS,MAAAm5U,QAAA,CACA,CACA,CACA,OAAA/4L,CACA,CACA,SAAAskR,GAAAv/b,EAAAr7B,EAAA8vY,EAAAx0Y,EAAArR,EAAAC,EAAAF,EAAA6md,GACA,MAAA7md,MAAAgW,EAAA7V,MAAA;AACA,IAAAmsN;AACA,QAAAkqC,EAAAv2P,EAAqBu2P,EAAAt2P,EAAcs2P,IAAA,CACnC,MAAAr7P,EAAAq7P,EAAAxgP,EAAA7V,MAAAH,EAAA0sC,EAAA12B,MAAA7a;AACA,GAAA6a,MAAA7a,EAAA,IAAAuxC,EAAA,CACA4/K;AACA,MAAA6qJ,EAAA2uC,EAAA7a,OAAAv+V,GACAikc,EAAA36d,EAAA4wd,SAAAl6b,GACA+lY,EAAAphY,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,EAAAp7B;AACA+/B,EAAA06V,cAAA0mC,EAAA,KAAAo3D,EAAA1yH,EAAAjrS,MAAAlsE,EAAA2we,EAAAx5H,EAAAjrS,MAAAm5U,SAAArlZ,EAAA2we,KACAt/b,EAAAm7V,OAAAimC,EAAAt7D,EAAA2tB,SAAA3tB,EAAAjhX,KAAAm8Y,cAAAw3F,EAAA1yH,EAAAjrS,MAAA,EAAAlsE,EAAA2we,KACAn6O,GAAA2gH,EAAAjrS,MAAAo5U,QAAA,CACA,CACA,CACA,OAAAh5L,CACA,CAOA,SAAAukR,GAAAx8d,EAAA6jQ,EAAA0xN,EAAAn2d,EAAA49D,GACA,IAAAy0U,EAAA8jF,EAAAv1d,EAAA0I,IAAAkuX,OAAA2+F,EAAA,GAAAv1d,EAAA0I;AACA,IAAA+oY,EAAA,UAAAhzZ,MAAA;AACA,IAAAkjB,EAAAywd,EAAA/nd,IAAAonY;AACA,MAAA7lZ,IAASA,EAAAD,QAAYyT,EACrBrT,EAAAJ,EAAAqxE,EAAAlxE,MAAAD,EAAAD,EAAAoxE,EAAA39D,OACA29B,EAAAh9B,EAAAg9B;AACA,IAAAw1a,EAAA;AACA,SAAAiqB,IAEA,GADAhrF,EAAA8jF,EAAAv4b,EAAAt0B,IAAAkuX,OAAA2+F,EAAA,GAAAv4b,EAAAt0B,KACA+oY,EAAA,UAAAhzZ,MAAA;AACAkjB,EAAAywd,EAAA/nd,IAAAonY,GACA+gE,EAAAx1a,EAAAogI,QAAA41N,KAAA10Y,MACA,WArFA0+C,EAAAr7B,EAAA8vY,EAAAx0Y,EAAAnR,EAAAuT,EAAAmzc,GACA,MACAxgR,EAAA6gN,EADA71W,EAAAt0B,IAAA7mB,KAAAmkH;AAEA,IAAA3qB,EACAqhZ;AACA,GAAA5we,EAAA6V,EAAA7V,MAAA,QAAAq2P,EAAA,EAAAkxO,EAAA,EAAsDlxO,EAAAxgP,EAAAtC,OAAkB8iP,IAAA,CACxE,MAAAqxO,EAAA/hF,EAAA5sP,MAAAs9F;AACAkxO,GAAAG,EAAA/iG;AACA,MAAAzzT,EAAA;AACA,IAAArnC;AACAA,EAAA,MAAA69b,EAAA70N,WAAA60N,EAAA70N,UAAA98Q,MAAAmwM,EAAA8wK,KAAAznR,MAAA22G,EAAA8wK,KAAAk7B,iBACA0+F,MAAA1qS,EAAAihN,YAAAjV;AACA,QAAA3/Y,EAAAsjB,EAAA7V,MAA0BzN,EAAAyN,EAAWzN,IAAA2+E,EAAAr3E,KAAAgwC;AACrCqH,EAAAm7V,OAAAn7V,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA0xd,EAAA,EAAAp2d,GAAA+/D,EACA,CACA,GAAA39D,EAAAsC,EAAAtC,OAAA,CACA,MAAA29D,EAAA;AACA,QAAA3+E,EAAA,EAAAs+e,GAAAh7d,EAAAtC,OAAA,GAAAsC,EAAA7V,MAA0DzN,EAAAyC,KAAA+b,IAAA8E,EAAA7V,SAAgCzN,IAAA,CAC1F,MAAAgb,IAAAhb,GAAAsjB,EAAA7V,QAAA2lZ,EAAA7a,OAAAj1X,MAAAg7d,EAAAt+e,IAAAwD,MAAAmwM,EAAAihN;AACAj2U,EAAAr3E,KAAA0T,EAAAqje,MAAA1qS,EAAAihN,YAAAjV,iBAAA3iT,MAAA22G,EAAA8wK,KAAAk7B,iBACA,CACA,MAAA4+F,EAAA5qS,EAAAmwD,IAAA7/P,OAAA,KAAAwve,EAAA/1L,SAAAzwR,KAAA0xD,IAAAqsL,EAAA;AACA,QAAAhrQ,EAAAsjB,EAAAtC,OAA2BhhB,EAAAghB,EAAYhhB,IAAAgrQ,EAAA1jQ,KAAAi3e;AACvC5/b,EAAAm7V,OAAAn7V,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA1E,EAAAw0Y,EAAAhhB,SAAA,GAAApnI,EACA,CACA,SAAAhuK,IAAAqhZ,EACA,EA2DA,CACA1/b,EAAAr7B,EAAA8vY,EAAA8jF,EAAAxpe,EAAAF,EAAA2md,IAAAiqB,IACAL,GAAAp/b,EAAAr7B,EAAA8vY,EAAA8jF,EAAA5pe,EAAAI,EAAAH,EAAA4md,IAAAiqB,IACAL,GAAAp/b,EAAAr7B,EAAA8vY,EAAA8jF,EAAA5pe,EAAAI,EAAAF,EAAA2md,IAAAiqB,IACAF,GAAAv/b,EAAAr7B,EAAA8vY,EAAA8jF,EAAA3pe,EAAAC,EAAAF,EAAA6md,IAAAiqB,IACAF,GAAAv/b,EAAAr7B,EAAA8vY,EAAA8jF,EAAA3pe,EAAAC,EAAAE,EAAAymd,IAAAiqB;AACA,QAAAt6O,EAAAv2P,EAAqBu2P,EAAAt2P,EAAcs2P,IAAA,CACnC,MAAA72O,EAAA3J,EAAAwxd,WAAAhxO,EAAAx2P,EAAA8lZ,GAAAjnW,EAAA7oC,EAAAwxd,WAAAhxO,EAAAp2P,EAAA0lZ;AACAz0W,EAAAx+B,QAAAw+B,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA2J,EAAAiqd,GAAAv4b,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA6oC,EAAA+qb,GAAA,IAAAzD,EAAA7zF,MAAAjhU,EAAAqsL,KAAAlH,EAAAv2P,GAAA,KACA,CACA6we,IACAz/b,EAAAq2V,aAAA,IAAA8f,EAAAn2W,EAAAt0B,IAAAqqD,QAAAwia,EAAA5zd,EAAAwxd,WAAAvne,EAAAD,EAAA8lZ,IAAAz0W,EAAAt0B,IAAAqqD,QAAAwia,EAAA5zd,EAAAwxd,WAAAtne,EAAA,EAAAE,EAAA,EAAA0lZ,MACA5tI,EAAA7mO,EACA,CAIA,MAAAitI,MAAA+nT,EAAAxZ,gBAAA,CACAC,UAAA79c,GAAA,YACAkzX,WAAAlzX,GAAA,WACA89c,QAAA99c,GAAA,WACAixY,UAAAjxY,GAAA,UACA,kBAAAiie,GAAA,YACA,mBAAAA,GAAA,WACA,gBAAAA,GAAA,WACA,kBAAAA,GAAA,UACAnxZ,UAAAswZ,GACA,gBAAAA,GACAjwZ,OAAAiwZ,GACA,aAAAA;AAEA,SAAAc,GAAA98d,EAAA6jQ,EAAA/xK,GACA,OAAAA,EAAAggJ,GAAA9xO,EAAA8xF,aACA+xK,KAAA7jQ,EAAAg9B,GAAAq2V,aAAAvhS,GAAAwmS,qBAEA,CAIA,SAAA19X,GAAA6C,EAAAhc,GACA,OAAAue,EAAA6jQ,EAAAzuM,KACA,IAAAA,EAAA;AACA,MAAA8oU,EAAAl+X,EAAA8xF;AACA,GAAAosS,aAAAiV,EAAA,OAAA2pF,GAAA98d,EAAA6jQ,EAAAguN,EAAA5gG,UAAAqC,KAAA4K,EAAA82F,UAAAvze;AACA,YAAAgc,IAAAygY,EAAA7iT,MAAA;AACA,MAAAn+E,EAAA6/d,GAAA3na,EAAA33D,EAAAhc;AACA,SAAAyb,EAAA;AACA,YAAAO,EAAA,OAAAq/d,GAAA98d,EAAA6jQ,EAAAguN,EAAA5gG,UAAAqC,KAAAtzX,EAAA0I,IAAAqqD,QAAAmrU,EAAA/qU,KAAA1xE;AACA,CACA,MAAA83E,EAAAv5D,EAAA0I,IAAAqqD,QAAA71D,GACA6hE,EAAAyzZ,EAAAj5Z,EAAA97D,EAAAhc;AACA,IAAAu7e;AAIA,OAHAA,EAAAj+Z,EAAA8yZ,EAAA5gG,UAAAqC,KAAAv0T,EAAA,GACAt9E,EAAA,EAAAowe,EAAA5gG,UAAAqC,KAAAtzX,EAAA0I,IAAAqqD,QAAAwG,EAAAwhG,QAAA,QACA82T,EAAA5gG,UAAAqC,KAAAtzX,EAAA0I,IAAAqqD,QAAAwG,EAAAyhG,OAAA,OACA8hU,GAAA98d,EAAA6jQ,EAAAm5N,EACA,EAEA,CACA,SAAAH,GAAAp/d,EAAAhc,GACA,OAAAue,EAAA6jQ,EAAAzuM,KACA,IAAAA,EAAA;AACA,MAAA8oU,EAAAl+X,EAAA8xF;AACA,IAAAmrY;AACA,GAAA/+F,aAAAiV,EAAA8pF,EAAA/+F;IACA,CACA,MAAAhhY,EAAA6/d,GAAA3na,EAAA33D,EAAAhc;AACA,SAAAyb,EAAA;AACA+/d,EAAA,IAAA9pF,EAAAnzY,EAAA0I,IAAAqqD,QAAA71D,GACA,CACA,MAAAm3X,EAAAm+F,EAAAyK,EAAAjI,UAAAv3d,EAAAhc;AACA,QAAA4yY,GACAyoG,GAAA98d,EAAA6jQ,EAAA,IAAAsvI,EAAA8pF,EAAAlI,YAAA1gG,IAEA,CACA,SAAA6oG,GAAA9na,EAAA/8B,GACA,MAAAkhC,EAAAq7Z,EAAAx/Z,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B;AACA,QAAAkhC,IACAnE,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAq2V,aAAA,IAAA8f,EAAA55U,QAEA,CAIA,SAAA2nU,GAAA9rU,EAAA7nE,EAAApP,GACA,IAAA02e,EAAAz/Z,EAAAp1D,OAAA;AACA,IAAAg9D,EAAAi/Z,GAAA99e;AACA,MAAA+/Y,EAAA9oU,EAAAp1D,MAAA8xF;AACA,GAAAosS,aAAAiV,EAAA,CACAn2U,MAAA,CACAlxE,MAAA,EACAuT,OAAA,EACAgqP,KAAA,CAAAyoO,EAAA/1L,SAAAzwR,KAAA4wd,GAAArpF,EAAAz9U,EAAAp1D,MAAAgmG,QAAA88P,KAAA3kX;AAEA,MAAAszZ,EAAAvT,EAAA62F,YAAA9yd,MAAA,GACAhF,EAAAihY,EAAA62F,YAAA93d,OAAA,GACAmC,EAAAgzd,EAAA/nd,IAAAonY,GAAAghF,YAAAv0F,EAAA62F,YAAA18b,IAAAp7B,EAAAihY,EAAA82F,UAAA38b,IAAAp7B;AAGA,OAFA+/D,EAAAm/Z,GAAAn/Z,EAAA59D,EAAArT,MAAAqT,EAAAzT,KAAAyT,EAAAvT,OAAAuT,EAAAxT,KACA4we,GAAApna,EAAAp1D,MAAAo1D,EAAAyuM,SAAA5mQ,EAAAmC,EAAA49D,KAEA,CAAG,GAAAA,EAAA,CACH,MAAAzD,EAAAu7Z,EAAA1/Z,EAAAp1D,OACA/C,EAAAs8D,EAAAt8D,OAAA;AAEA,OADAu/d,GAAApna,EAAAp1D,MAAAo1D,EAAAyuM,SAAA5mQ,EAAAm1d,EAAA/nd,IAAAkvD,EAAAt3D,MAAA,IAAAqwd,SAAA/4Z,EAAAlhC,IAAAp7B,GAAA+/D,KAEA,CAAG,QACH,CACA,SAAAmga,GAAA/na,EAAAilL,GACA,IAAA+iP;AACA,MAAA/iP,EAAAjnG,OAAA;AACA,GAAAinG,EAAAjtJ,SAAAitJ,EAAA7sJ,QAAA;AACA,MAAA6vY,EAAAC,GAAAloa,EAAAilL,EAAA9yP;AACA,IAAA8wY;AACA,GAAAh+I,EAAAhtJ,UAAAj4B,EAAAp1D,MAAA8xF,qBAAAqhT,EACA2B,EAAA1/U,EAAAp1D,MAAA8xF,UAAAijY,YAAA16O,GACAA,EAAAhuP;KACG,GAAAguP,EAAAhtJ,UAAAgwY,GAAA,OAAAhlG,EAAAu8F,EAAAx/Z,EAAAp1D,MAAA8xF,UAAAumS,YAAA,QAAA+kG,EAAAG,GAAAnoa,EAAAilL,UAAA,IAAA+iP,OAAA,EAAAA,EAAA/kc,MAAAggW,EAAAhgW,IACHy8W,EAAAzc,EAAAh+I,GACAA,EAAAhuP;KACG,IAAAgxe,EAAA;AACH,SAAAvoF,EAAA0oF,EAAA/1e,GACA,IAAA4sY,EAAAkpG,GAAAnoa,EAAA3tE;AACA,MAAAg2e,EAAA,MAAA9I,EAAAr1F,SAAAlqU,EAAAp1D;AACA,IAAAq0X,IAAA+gG,EAAAoI,EAAAnpG,GAAA,KAAAopG,EACA;AADAppG,EAAAmpG,CACA,CACA,MAAA1rY,EAAA,IAAAqhT,EAAAqqF,EAAAnpG;AACA,GAAAopG,IAAAroa,EAAAp1D,MAAA8xF,UAAAggJ,GAAAhgJ,GAAA,CACA,MAAA90D,EAAAo4B,EAAAp1D,MAAAg9B,GAAAq2V,aAAAvhS;AACA2rY,GAAAzgc,EAAAosV,QAAAurG,EAAA6I,EAAAnlc,KACA+8B,EAAAyuM,SAAA7mO,EACA,CACA,CACA,SAAA/0C,IACAmtE,EAAA7oD,KAAAgB,oBAAA,UAAAtlB,GACAmtE,EAAA7oD,KAAAgB,oBAAA,YAAAtlB,GACAmtE,EAAA7oD,KAAAgB,oBAAA,YAAA0sO,GACA,MAAA06O,EAAAr1F,SAAAlqU,EAAAp1D,QAAAo1D,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAosV,QAAAurG,GAAA,GACA,CACA,SAAA16O,EAAAmO,GACA,MAAA3gQ,EAAA2gQ,EACAynJ,EAAA8kF,EAAAr1F,SAAAlqU,EAAAp1D;AACA,IAAAw9d;AACA,SAAA3tF,EAAA2tF,EAAApoa,EAAAp1D,MAAA0I,IAAAqqD,QAAA88U;KACA,GAAAytF,GAAAloa,EAAA3tE,EAAAF,SAAA81e,IACAG,EAAAD,GAAAnoa,EAAAilL,IACAmjP,GAAA,OAAAv1e;AAEAu1e,GAAA1oF,EAAA0oF,EAAA/1e,EACA,CACA2tE,EAAA7oD,KAAAL,iBAAA,UAAAjkB,GACAmtE,EAAA7oD,KAAAL,iBAAA,YAAAjkB,GACAmtE,EAAA7oD,KAAAL,iBAAA,YAAA+tO,EACA,CACA,SAAA8iP,GAAA3na,EAAA33D,EAAAhc,GACA,KAAA2zE,EAAAp1D,MAAA8xF,qBAAA+/X,EAAAhhG,eAAA;AACA,MAAAwD,MAASA,GAAQj/T,EAAAp1D,MAAA8xF;AACjB,QAAAp0G,EAAA22Y,EAAAM,MAAA,EAA+Bj3Y,GAAA,EAAQA,IAAA,CACvC,MAAAmoB,EAAAwuX,EAAApyX,KAAAvkB;AACA,IAAA+D,EAAA,EAAA4yY,EAAAvtY,MAAApJ,GAAA22Y,EAAAgJ,WAAA3/Y,MAAA+D,EAAA,IAAAokB,EAAA6qX,YAAA;AACA,WAAA7qX,EAAAhkB,KAAAimW,KAAAqpD,WAAA,eAAAtrY,EAAAhkB,KAAAimW,KAAAqpD,UAAA,CACA,MAAA2mF,EAAAzjG,EAAAt5N,OAAAr9K,GACAi7d,EAAA,QAAAl7c,EAAAhc,EAAA,cAAAA,EAAA;AACA,OAAA2zE,EAAA47Y,eAAA2H,GAAAmf,EAAA,IACA,CACA,CACA,WACA,CACA,SAAAwF,GAAAloa,EAAA22T,GACA,KAAQA,MAAA32T,EAAA22T,IAAwBA,IAAAxgY,WAAA,SAAAwgY,EAAA5pX,UAAA,MAAA4pX,EAAA5pX,SAAA,OAAA4pX;AAChC,WACA,CACA,SAAAwxG,GAAAnoa,EAAA3tE,GACA,MAAAi2e,EAAAtoa,EAAA8hZ,YAAA,CACAvrd,KAAAlE,EAAAovJ,QACAjrJ,IAAAnE,EAAAqvJ;AAEA,IAAA4mV,EAAA;AACA,IAAA31B,OAAOA,EAAA1va,OAAcqlc;AACrB,OAAA31B,GAAA,GAAA6sB,EAAAx/Z,EAAAp1D,MAAA0I,IAAAqqD,QAAAg1Y,KAAA6sB,EAAAx/Z,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B,GACA,CAOA,IAAAqlU,GAAA,MACA,WAAArkS,CAAAp3D,EAAAizY,GACAn3Z,KAAAkkB,OACAlkB,KAAAm3Z,sBACAn3Z,KAAAguY,IAAArpY,SAAAkvE,cAAA,OACA7zE,KAAAguY,IAAAx9X,UAAA,eACAxQ,KAAA0zZ,MAAA1zZ,KAAAguY,IAAAtpY,YAAAC,SAAAkvE,cAAA,UACA7zE,KAAA0zZ,MAAA/lZ,MAAA6jK,YAAA,8BAA8D2lP,OAC9Dn3Z,KAAAyzZ,SAAAzzZ,KAAA0zZ,MAAAhvZ,YAAAC,SAAAkvE,cAAA,aACA+ra,GAAA17d,EAAAlkB,KAAAyzZ,SAAAzzZ,KAAA0zZ,MAAAyD,GACAn3Z,KAAA8mZ,WAAA9mZ,KAAA0zZ,MAAAhvZ,YAAAC,SAAAkvE,cAAA,SACA,CACA,MAAAljE,CAAAuT,GACA,OAAAA,EAAApgB,MAAA9D,KAAAkkB,KAAApgB,OACA9D,KAAAkkB,OACA07d,GAAA17d,EAAAlkB,KAAAyzZ,SAAAzzZ,KAAA0zZ,MAAA1zZ,KAAAm3Z,wBAEA,CACA,cAAAvQ,CAAA7gO,GACA,oBAAAA,EAAAjiL,OAAAiiL,EAAAv8K,QAAAxJ,KAAA0zZ,OAAA1zZ,KAAAyzZ,SAAAj9Y,SAAAuvK,EAAAv8K,QACA;AAKA,SAAAo2e,GAAA17d,EAAAuvY,EAAAC,EAAAyD,EAAAvD,EAAAC,GACA,IAAAC,EAAA,EACAC,KACAC,EAAAP,EAAAhtZ;AACA,MAAA29P,EAAAlgP,EAAAzd;AACA,GAAA29P,EAAA,CACA,QAAA9jQ,EAAA,EAAAoxQ,EAAA,EAA0BpxQ,EAAA8jQ,EAAAuuI,WAAoBryY,IAAA,CAC9C,MAAA2yZ,QAAUA,EAAAE,YAAoB/uJ,EAAAt9F,MAAAxmK,GAAAw5E;AAC9B,QAAA6L,EAAA,EAAkBA,EAAAstU,EAAattU,IAAA+rL,IAAA,CAC/B,MAAAuiJ,EAAAL,GAAAliJ,EAAAmiJ,EAAAV,KAAAxtU,GACAuuU,EAAAD,IAAA;AAGA,GAFAH,GAAAG,GAAAkD,EACAlD,IAAAF,MACAC,EAKAA,EAAArmZ,MAAAI,OAAAmmZ,IAAAF,EAAArmZ,MAAAI,MAAAmmZ,GACAF,IAAAnqU;IANA,CACA,MAAAg2Z,EAAAl7e,SAAAkvE,cAAA;AACAgsa,EAAAlye,MAAAI,MAAAmmZ,EACAT,EAAA/uZ,YAAAm7e,EACA,CAIA,CACA,CACA,KAAA7rF,GAAA,CACA,IAAA8rF;AACA,MAAA7iU,EAAA+2O,EAAAnqU;AACA,QAAAi2Z,EAAA9rF,EAAAxmZ,kBAAA,IAAAsye,KAAAh3e,YAAAkrZ,GACAA,EAAA/2O,CACA,CACA82O,GACAL,EAAA/lZ,MAAAI,MAAA+lZ,EAAA,KACAJ,EAAA/lZ,MAAAwvP,SAAA,KAEAu2J,EAAA/lZ,MAAAI,MAAA,GACA2lZ,EAAA/lZ,MAAAwvP,SAAA22J,EAAA,KA7BA,CA+BA,CAOA,MAAAisF,GAAA,IAAAjM,EAAAjiG,UAAA;AAiDA,IAAAmuG,GAAA,MAAAA,EACA,WAAA1ka,CAAA2ka,EAAA9re,GACAnU,KAAAigf,eACAjgf,KAAAmU,UACA,CACA,KAAAxB,CAAAssC,GACA,MAAAh9B,EAAAjiB,KACA0gF,EAAAzhC,EAAAmmV,QAAA26G;AACA,GAAAr/Z,GAAA,MAAAA,EAAAw/Z,UAAA,WAAAF,EAAAt/Z,EAAAw/Z;AACA,GAAAx/Z,QAAA,IAAAA,EAAAy/Z,YAAA,WAAAH,EAAA/9d,EAAAg+d,aAAAv/Z,EAAAy/Z;AACA,GAAAl+d,EAAAg+d,cAAA,GAAAhhc,EAAA0sV,WAAA,CACA,IAAAryO,EAAAr6G,EAAAogI,QAAAz7J,IAAA3B,EAAAg+d,cAAA;AAEA,OADA9I,EAAAl4b,EAAAt0B,IAAAqqD,QAAAskF,SAAA,GACA,IAAA0mV,EAAA1mV,EAAAr3I,EAAA9N,SACA,CACA,OAAA8N,CACA;AAoFA,SAAAm+d,GAAA/oa,EAAA3tE,EAAAkV,EAAA42Y,GACA,MAAAx3Y,EAAA,SAAAY,GAAA42Y,IACAt7L,EAAA7iJ,EAAA8hZ,YAAA,CACAvrd,KAAAlE,EAAAovJ,QAAA96I,EACAnQ,IAAAnE,EAAAqvJ;AAEA,IAAAmhE,EAAA;AACA,MAAA5/K,IAASA,GAAM4/K,EACf1+I,EAAAq7Z,EAAAx/Z,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B;AACA,IAAAkhC,EAAA;AACA,YAAA58D,EAAA,OAAA48D,EAAAlhC;AACA,MAAA12B,EAAAywd,EAAA/nd,IAAAkvD,EAAAt3D,MAAA,IAAAhF,EAAAs8D,EAAAt8D,OAAA,GACAnW,EAAA6a,MAAA/Z,QAAA2xE,EAAAlhC,IAAAp7B;AACA,OAAAnW,EAAA6a,EAAA7V,OAAA,KAAAmR,EAAA0E,MAAA7a,EAAA,EACA,CACA,SAAAs3e,GAAAlse,EAAAzK,EAAA42e,GACA,MAAAtie,EAAAtU,EAAAovJ,QAAA3kJ,EAAA2ia;AACA,OAAA/za,KAAA+b,IAAAwhe,EAAAnse,EAAAose,WAAAvie,EACA,CACA,SAAAwie,GAAAnpa,EAAA10E,GACA00E,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAosV,QAAA00G,GAAA,CAAgEG,UAAAv9e,IAChE,CAsBA,SAAA89e,GAAAppa,EAAA0tS,EAAAh3W,EAAAopZ,GACA,MAAA37U,EAAAnE,EAAAp1D,MAAA0I,IAAAqqD,QAAA+vS,GACA2uC,EAAAl4U,EAAAt3D,MAAA,GAAAhF,EAAAs8D,EAAAt8D,OAAA,GACAwyP,EAAA2iO,EAAA/nd,IAAAonY,GAAA8gF,SAAAh5Z,EAAAlhC,IAAAp7B,GAAAs8D,EAAA0vT,UAAApxT,MAAAm5U,QAAA;AACA,IAAAjlB,EAAA32T,EAAAmsU,SAAAhoU,EAAAt8D,OAAA,IAAAgF;AACA,KAAA8pX,GAAA,SAAAA,EAAA5pX,UAAA4pX,IAAAxgY;AACAwgY,GACA4xG,GAAAlsF,EAAA1lB,EAAAvnY,WAAAunY,EAAAmpB,EAAAzlJ,EAAA3jQ,EACA,CACA,SAAA2ye,GAAAlgf,GACA,OAAAqT,MAAArT,GAAAkna,KAAA,EACA,CAwEAruX,EAAA0/b,aAAoBA,EACpB1/b,EAAA+7W,cAAqBA,EACrB/7W,EAAA2mc,YAAmBA,GACnB3mc,EAAAg7b,SAAgBA,EAChBh7b,EAAAsmU,UAAiBA,GACjBtmU,EAAAsnc,YAAmBvC,GACnB/kc,EAAAunc,cAAqBnC,GACrBplc,EAAAwnc,cAAqB3C,GACrB7kc,EAAAq+b,WAAkBA,EAClBr+b,EAAAkjc,UAAiBA,EACjBljc,EAAAy8W,eA9vCA,SAAA7zY,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAAzkQ,EAAAi7d,EAAAr6d;AACA6jQ,EAAAy2N,EAAAt6d,EAAAg9B,GAAA59B,IAAArT,OACA,CACA,QACA,EAwvCAqrC,EAAAw8W,gBA5wCA,SAAA5zY,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAAzkQ,EAAAi7d,EAAAr6d;AACA6jQ,EAAAy2N,EAAAt6d,EAAAg9B,GAAA59B,IAAAzT,MACA,CACA,QACA,EAswCAyrC,EAAAwjc,OAAcA,EACdxjc,EAAA48W,YA3pCA,SAAAh0Y,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAAzkQ,EAAAi7d,EAAAr6d;AACA6jQ,EAAA+2N,EAAA56d,EAAAg9B,GAAA59B,IAAAvT,QACA,CACA,QACA,EAqpCAurC,EAAA28W,aAzqCA,SAAA/zY,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAAzkQ,EAAAi7d,EAAAr6d;AACA6jQ,EAAA+2N,EAAA56d,EAAAg9B,GAAA59B,IAAAxT,KACA,CACA,QACA,EAmqCAwrC,EAAAw9b,WAAkBA,EAClBx9b,EAAA69b,SAAgBA,EAChB79b,EAAAm7b,SAppEA,SAAAniG,GACA,OAAAgiG,EAAA/nd,IAAA+lX,EAAAnuX,MAAA,IAAAswd,SAAAniG,EAAA/3V,IAAA+3V,EAAAnzX,OAAA,GACA,EAmpEAm6B,EAAAs+b,eAAsBA,EACtBt+b,EAAA69W,eAlSA,UAAA1B,YAA0BA,EAAA,EAAA7B,eAAA,GAAAwD,sBAAA,IAAA1B,OAAA91C,GAAA+1C,0BAA8G,IACxI,MAAA3qB,EAAA,IAAA+oG,EAAAvoG,OAAA,CACAtyW,IAAA8md,GACA99d,MAAA,CACA,IAAA8wD,CAAAvjE,EAAAyS,GACA,IAAA6+d;AACA,MAAArwG,EAAA,QAAAqwG,EAAA/1G,EAAAhhC,YAAA,IAAA+2I,GAAA,QAAAA,IAAAx2b,aAAA,IAAAw2b,OAAA,EAAAA,EAAArwG,UACAswG,EAAAjsF,EAAA7yY,EAAAgmG,QAAAyrS,MAAAtrZ;AAIA,OAHAqtZ,GAAAhlB,MAAAswG,GAAA,CAAA78d,EAAAmzD,IACA,IAAAo+U,EAAAvxY,EAAAizY,EAAA9/U,IAEA,IAAA2oa,IAAA,KACA,EACArte,MAAA,CAAAssC,EAAAwxN,IACAA,EAAA99P,MAAAssC,IAGAqL,MAAA,CACAlO,WAAAn6B,IACA,MAAA++d,EAAAjB,GAAAx+F,SAAAt/X;AACA,OAAA++d,KAAAf,cAAA,GAA4Dp6Y,MAAA,iBAAyB,IAErFgmS,gBAAA,CACA52O,UAAA,CAAA59E,EAAA3tE,MAwCA,SAAA2tE,EAAA3tE,EAAA8rZ,EAAAE,GACA,IAAAr+U,EAAAi1P,SAAA;AACA,MAAA00K,EAAAjB,GAAAx+F,SAAAlqU,EAAAp1D;AACA,GAAA++d,IACAA,EAAA7se,SAAA,CACA,MAAA3K,EAyEA,SAAAA,GACA,KAAAA,GAAA,MAAAA,EAAA4a,UAAA,MAAA5a,EAAA4a,UAAA5a,IAAAuwE,WAAAvwE,EAAAuwE,UAAAvjE,SAAA,oBAAAhN,EAAAgE;AACA,OAAAhE,CACA,CAHA,CAzEAE,EAAAF;AACA,IAAAu7W,GAAA;AACA,GAAAv7W,EAAA,CACA,MAAAoE,KAAWA,EAAAI,SAAcxE,EAAA4D;AACzB1D,EAAAovJ,QAAAlrJ,GAAA4nZ,EAAAzwC,EAAAq7H,GAAA/oa,EAAA3tE,EAAA,OAAA8rZ,GACAxnZ,EAAAtE,EAAAovJ,SAAA08P,IAAAzwC,EAAAq7H,GAAA/oa,EAAA3tE,EAAA,QAAA8rZ,GACA,CACA,GAAAzwC,GAAAi8H,EAAAf,aAAA,CACA,IAAAvqF,IAAA,IAAA3wC,EAAA,CACA,MAAAvpS,EAAAnE,EAAAp1D,MAAA0I,IAAAqqD,QAAA+vS,GACA2uC,EAAAl4U,EAAAt3D,MAAA,GACAN,EAAAywd,EAAA/nd,IAAAonY,GACA8jF,EAAAh8Z,EAAAt8D,OAAA;AACA,GAAA0E,EAAA4wd,SAAAh5Z,EAAAlhC,IAAAk9b,GAAAh8Z,EAAA0vT,UAAApxT,MAAAm5U,QAAA,GAAArvY,EAAA7V,MAAA,QACA,CACAyye,GAAAnpa,EAAA0tS,EACA,CACA,CACA,CAvBA,CAvCA1tS,EAAA3tE,EAAA8rZ,EAAAE,IAEAurF,WAAA5pa,KA6DA,SAAAA,GACA,IAAAA,EAAAi1P,SAAA;AACA,MAAA00K,EAAAjB,GAAAx+F,SAAAlqU,EAAAp1D;AACA++d,KAAAf,cAAA,IAAAe,EAAA7se,UAAAqse,GAAAnpa,GAAA,EACA,CAJA,CA5DAA,IAEA29E,UAAA,CAAA39E,EAAA3tE,MA+DA,SAAA2tE,EAAA3tE,EAAAiqZ,EAAAwD,GACA,IAAA+pF;AACA,IAAA7pa,EAAAi1P,SAAA;AACA,MAAA5kT,EAAA,QAAAw5d,EAAA7pa,EAAA22T,IAAAxpX,cAAAC,mBAAA,IAAAy8d,IAAAz3e,OACAu3e,EAAAjB,GAAAx+F,SAAAlqU,EAAAp1D;AACA,IAAA++d,IAAA,GAAAA,EAAAf,cAAAe,EAAA7se,SAAA;AACA,MAAA4wW,EAAA1tS,EAAAp1D,MAAA0I,IAAAkuX,OAAAmoG,EAAAf,cACAlye,EA6BA,SAAAspE,EAAA0ia,GAAA9mF,QAA0CA,EAAAE,aAC1C,MAAAplZ,EAAAolZ,OAAA5yZ,OAAA;AACA,GAAAwN,EAAA,OAAAA;AACA,MAAAigY,EAAA32T,EAAAmsU,SAAAu2F;AACA,IAAAoH,EAAAnzG,EAAA9pX,KAAAopM,WAAA0gL,EAAAhwX,QAAAqK,YAAAy/B,EAAAmrW;AACA,GAAAE,EACA,QAAA7yZ,EAAA,EAAkBA,EAAA2yZ,EAAa3yZ,IAAA6yZ,EAAA7yZ,KAC/B6gf,GAAAhuF,EAAA7yZ,GACAwnD;AAGA,OAAAq5b,EAAAr5b,CACA,CAZA,CA7BAuvB,EAAA2pa,EAAAf,aAAAl7H,EAAAjrS;AAKA,SAAA4uZ,EAAA0Y,GACA15d,EAAA8H,oBAAA,UAAAk5c,GACAhhd,EAAA8H,oBAAA,YAAA0sO;AACA,MAAAmlP,EAAAtB,GAAAx+F,SAAAlqU,EAAAp1D,QACAo/d,aAAA,EAAAA,EAAAlte,YA2DA,SAAAkjE,EAAA0tS,EAAAh3W,GACA,MAAAytE,EAAAnE,EAAAp1D,MAAA0I,IAAAqqD,QAAA+vS,GACA2uC,EAAAl4U,EAAAt3D,MAAA,GAAAN,EAAAywd,EAAA/nd,IAAAonY,GAAAx0Y,EAAAs8D,EAAAt8D,OAAA,GACAwyP,EAAA9tP,EAAA4wd,SAAAh5Z,EAAAlhC,IAAAp7B,GAAAs8D,EAAA0vT,UAAApxT,MAAAm5U,QAAA,EACAh0W,EAAAo4B,EAAAp1D,MAAAg9B;AACA,QAAAmlN,EAAA,EAAmBA,EAAAxgP,EAAAtC,OAAkB8iP,IAAA,CACrC,MAAAk9O,EAAAl9O,EAAAxgP,EAAA7V,MAAA2jQ;AACA,GAAAtN,GAAAxgP,MAAA09d,IAAA19d,MAAA09d,EAAA19d,EAAA7V,OAAA;AACA,MAAAusC,EAAA12B,MAAA09d,GACAxna,EAAA45U,EAAA7a,OAAAv+V,GAAAw/B,MACA/wE,EAAA,GAAA+wE,EAAAm5U,QAAA,EAAAvhJ,EAAA9tP,EAAA4wd,SAAAl6b;AACA,GAAAw/B,EAAAq5U,UAAAr5U,EAAAq5U,SAAApqZ,IAAAgF,EAAA;AACA,MAAAolZ,EAAAr5U,EAAAq5U,SAAAr5U,EAAAq5U,SAAA/yZ,QAAAsgf,GAAA5ma,EAAAm5U;AACAE,EAAApqZ,GAAAgF,EACAkxC,EAAA06V,cAAAz6X,EAAAo7B,EAAA,SACAw/B,EACAq5U,YAEA,CACAl0W,EAAA0sV,YAAAt0T,EAAAyuM,SAAA7mO,EACA,CApBA,CA1DAo4B,EAAAgqa,EAAApB,aAAAI,GAAAgB,EAAAlte,SAAAite,EAAAztF,IACAt8U,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAosV,QAAA00G,GAAA,CAAkEI,YAAA,QAElE,CACA,SAAAjkP,EAAAklP,GACA,IAAAA,EAAAx8Z,MAAA,OAAA8jZ,EAAA0Y;AACA,MAAAC,EAAAtB,GAAAx+F,SAAAlqU,EAAAp1D;AACA,GAAAo/d,GACAA,EAAAlte,SAAA,CACA,MAAAote,EAAAlB,GAAAgB,EAAAlte,SAAAite,EAAAztF;AACA8sF,GAAAppa,EAAAgqa,EAAApB,aAAAsB,EAAApqF,EACA,CACA,CArBA9/U,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAosV,QAAA00G,GAAA,CAAgEI,YAAA,CAChErpE,OAAApta,EAAAovJ,QACAynV,WAAAxye,MAoBA0ye,GAAAppa,EAAA2pa,EAAAf,aAAAlye,EAAAopZ,GACAzvY,EAAAyG,iBAAA,UAAAu6c,GACAhhd,EAAAyG,iBAAA,YAAA+tO,GACAxyP,EAAA4E,gBAEA,CAnCA,CA9DA+oE,EAAA3tE,EAAAiqZ,EAAAwD,KAGAvmB,YAAA3uX,IACA,MAAA++d,EAAAjB,GAAAx+F,SAAAt/X;AACA,GAAA++d,KAAAf,cAAA,SAqKA,SAAAh+d,EAAA8iW,GACA,MAAA6rB,EAAA,GACAp1T,EAAAv5D,EAAA0I,IAAAqqD,QAAA+vS,GACA2uC,EAAAl4U,EAAAt3D,MAAA;AACA,IAAAwvY,EAAA,OAAAsgF,EAAA7hF,cAAA70T;AACA,MAAA15E,EAAAywd,EAAA/nd,IAAAonY,GACAx0Y,EAAAs8D,EAAAt8D,OAAA,GACAwyP,EAAA9tP,EAAA4wd,SAAAh5Z,EAAAlhC,IAAAp7B,GAAAs8D,EAAA0vT,UAAApxT,MAAAm5U,QAAA;AACA,QAAA7uJ,EAAA,EAAmBA,EAAAxgP,EAAAtC,OAAkB8iP,IAAA,CACrC,MAAAr7P,EAAA2oQ,EAAAtN,EAAAxgP,EAAA7V;AACA,KAAA2jQ,GAAA9tP,EAAA7V,MAAA,GAAA6V,MAAA7a,IAAA6a,MAAA7a,EAAA,OAAAq7P,GAAAxgP,MAAA7a,IAAA6a,MAAA7a,EAAA6a,EAAA7V,QAAA,CACA,IAAAyze;AACA,MAAAzH,EAAAn2d,MAAA7a,GACAuxC,EAAAp7B,EAAA66d,EAAArmF,EAAA7a,OAAAkhG,GAAArnG,SAAA,EACA1E,EAAArpY,SAAAkvE,cAAA;AACAm6T,EAAAx9X,UAAA,wBACA,QAAAgxe,EAAAzB,GAAAx+F,SAAAt/X,UAAA,IAAAu/d,OAAA,EAAAA,EAAArte,WAAAy8X,EAAAhpY,KAAAose,EAAA9hF,WAAAhuY,KAAAhF,EAAA66d,EAAA76d,EAAA66d,EAAArmF,EAAA7a,OAAAkhG,GAAArnG,SAAA,CAAwR7sS,MAAA,4BACxR+qS,EAAAhpY,KAAAose,EAAA9hF,WAAAjkF,OAAA3zR,EAAA0zV,GACA,CACA,CACA,OAAAgmG,EAAA7hF,cAAA5tZ,OAAA0d,EAAA0I,IAAAimX,EACA,CArBA,CArKA3uX,EAAA++d,EAAAf,eAEAxvG,UAAA;AAGA,OAAA1F,CACA,EA0PA1xV,EAAA0mc,wBAA+BA,GAC/B1mc,EAAA4kc,oBAA2BA,GAC3B5kc,EAAA08W,aA3uCA,SAAA9zY,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAAzkQ,EAAAi7d,EAAAr6d,GACAg9B,EAAAh9B,EAAAg9B;AACA,MAAA59B,EAAAzT,MAAAyT,EAAArT,OAAAqT,EAAAuC,IAAA7V,MAAA;AACA,QAAAzN,EAAA+gB,EAAArT,MAAA,EACAyue,EAAAx9b,EAAA59B,EAAA/gB,GACAA,GAAA+gB,EAAAzT,KAFgCtN,IAAA,CAGhC,MAAAozZ,EAAAryY,EAAAm2d,WAAAv4b,EAAAt0B,IAAAkuX,OAAAx3X,EAAAm2d,WAAA,GAAAv4b,EAAAt0B;AACA,IAAA+oY,EAAA,UAAA12X,WAAA;AACA3b,EAAAqyY,QACAryY,EAAAuC,IAAAywd,EAAA/nd,IAAAonY,EACA,CACA5tI,EAAA7mO,EACA,CACA,QACA,EA2tCA5F,EAAA68W,UAtnCA,SAAAj0Y,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,GAAA6jQ,EAAA,CACA,MAAAzkQ,EAAAi7d,EAAAr6d,GAAAg9B,EAAAh9B,EAAAg9B;AACA,MAAA59B,EAAAxT,KAAAwT,EAAAvT,QAAAuT,EAAAuC,IAAAtC,OAAA;AACA,QAAAhhB,EAAA+gB,EAAAvT,OAAA,EACAmve,EAAAh+b,EAAA59B,EAAA/gB,GACAA,GAAA+gB,EAAAxT,IAFiCvN,IAAA,CAGjC,MAAAozZ,EAAAryY,EAAAm2d,WAAAv4b,EAAAt0B,IAAAkuX,OAAAx3X,EAAAm2d,WAAA,GAAAv4b,EAAAt0B;AACA,IAAA+oY,EAAA,UAAA12X,WAAA;AACA3b,EAAAqyY,QACAryY,EAAAuC,IAAAywd,EAAA/nd,IAAAjL,EAAAqyY,MACA,CACA5tI,EAAA7mO,EACA,CACA,QACA,EAumCA5F,EAAAi8W,YAjzBA,SAAArzY,EAAA6jQ,GACA,MAAAusH,EAAApwX,EAAA8xF,UAAAumS;AACA,QAAA36Y,EAAA0yY,EAAAuE,MAA0Bj3Y,EAAA,EAAOA,IAAA,YAAA0yY,EAAAnuX,KAAAvkB,GAAAmE,KAAAimW,KAAAqpD,UAEjC,OADAttI,KAAA7jQ,EAAAg9B,GAAAqmC,OAAA+sT,EAAAr1N,OAAAr9K,GAAA0yY,EAAAp1N,MAAAt9K,IAAA46Y;AAGA,QACA,EA2yBAlhW,EAAAk7b,SAlqEA,SAAAliG,GACA,OAAAgiG,EAAA/nd,IAAA+lX,EAAAnuX,MAAA,IAAAqwd,SAAAliG,EAAA/3V,IAAA+3V,EAAAnzX,OAAA,GACA,EAiqEAm6B,EAAA4hc,YAAmBA,EACnB5hc,EAAAooc,cAvoDA,SAAA1tY,EAAA2tY,EAAAC,GACA,IAAAnge,EAAAmrG;AACA,SAAA+0X,GAAA,MAAAC,GAAA5tY,aAnBAqhT,EAmBA,OAAArhT,EAAAijY,YAAAjjY,EAAAkjY;AACA,MAAAnlF,EAAA,QAAAtwY,EAAAkge,UAAAC,SAAA,IAAAnge,IAAAuyF,EAAA+9S,OACA18U,EAAA,QAAAu3C,EAAAg1X,UAAAD,SAAA,IAAA/0X,IAAA5Y,EAAA3+B,KACAzqD,EAAAopF,EAAAuiS,MAAA3rX,IACAqsd,EAAAiE,EAAAtwd,EAAAmnY,GACAmlF,EAAAgE,EAAAtwd,EAAAyqD;AACA,OAAA4ha,GAAAC,GAAAI,EAAAL,EAAAC,GAAA,CAAAD,EAAAC,GACA,IACA,EA8nDA59b,EAAA2hc,UAAiBA,EACjB3hc,EAAAy9W,UAAiBA,EACjBz9W,EAAA4/b,aAAoBA,EACpB5/b,EAAAu9W,aAz0BA,SAAAjzZ,GACA,gBAAAse,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,MAAA8iW,EA9BA,SAAAvpS,EAAA93E,GACA,GAAAA,EAAA,GACA,MAAAs5K,EAAAxhG,EAAAyvT;AACA,GAAAjuN,EAAA,OAAAxhG,EAAAlhC,IAAA0iI,EAAA01N;AACA,QAAAtuI,EAAA5oL,EAAAzyE,OAAA,KAAAuse,EAAA95Z,EAAAwhG,SAA+DonF,GAAA,EAAUA,IAAA,CACzE,MAAAqxO,EAAAj6Z,EAAAt3D,MAAA,GAAA4iJ,MAAAs9F,GACAwc,EAAA60N,EAAA70N;AACA,GAAAA,EAAA,OAAA00N,EAAA,EAAA10N,EAAA8xH;AACA4iG,GAAAG,EAAA/iG,QACA,CACA,KAAG,CACH,GAAAl3T,EAAAzyE,QAAAyyE,EAAA1zD,OAAA6qX,WAAA,SAAAn3T,EAAAlhC,IAAAkhC,EAAA0vT,UAAAwH;AACA,MAAAghB,EAAAl4U,EAAAt3D,MAAA;AACA,QAAAkgP,EAAA5oL,EAAA8jU,YAAA,GAAA+1F,EAAA75Z,EAAAyhG,QAAiEmnF,EAAAsvJ,EAAA/gB,WAAwBvuI,IAAA,CACzF,MAAAqxO,EAAA/hF,EAAA5sP,MAAAs9F;AACA,GAAAqxO,EAAA9iG,WAAA,OAAA0iG,EAAA;AACAA,GAAAI,EAAA/iG,QACA,CACA,CACA,WACA,CApBA,CA8BAqkG,EAAA90d,GAAAte;AACA,SAAAohX,EAAA;AACA,GAAAj/F,EAAA,CACA,MAAAtqM,EAAAv5D,EAAA0I,IAAAqqD,QAAA+vS;AACAj/F,EAAA7jQ,EAAAg9B,GAAAq2V,aAAAw+F,EAAAhhG,cAAA62E,QAAAnuY,EAAA47Z,EAAA57Z,KAAA++T,iBACA,CACA,QACA,CACA,EA+zBAlhW,EAAA8pW,YAAmBA,GACnB9pW,EAAAg+b,YAAmBA,EACnBh+b,EAAAy9b,UAAiBA,EACjBz9b,EAAA88W,WAxlCA,SAAAl0Y,EAAA6jQ,GACA,MAAAq6H,EAAAl+X,EAAA8xF;AACA,KAAAosS,aAAAiV,IAAAjV,EAAA62F,YAAA18b,KAAA6lW,EAAA82F,UAAA38b,IAAA;AACA,MAAAj5B,EAAAi7d,EAAAr6d,IAAA2B,IAAqCA,GAAMvC;AAC3C,GAzBA,UAAAtT,MAAiCA,EAAAuT,SAAAsC,OAAoBvC,GACrD,IAAAuge,EAAAvge,EAAAxT,IAAAE,EAAAsT,EAAAzT,KAAAi0e,EAAAD,EACAE,GAAAzge,EAAAvT,OAAA,GAAAC,EAAAsT,EAAAzT,KAAAm0e,EAAAH,GAAAvge,EAAArT,MAAAqT,EAAAzT,KAAA;AACA,QAAAtN,EAAA+gB,EAAAxT,IAAwBvN,EAAA+gB,EAAAvT,OAAiBxN,IAAA,CACzC,GAAA+gB,EAAAzT,KAAA,GAAAgW,EAAAi+d,IAAAj+d,EAAAi+d,EAAA,IAAAxge,EAAArT,MAAAD,GAAA6V,EAAAm+d,IAAAn+d,EAAAm+d,EAAA;AACAF,GAAA9ze,EACAg0e,GAAAh0e,CACA,CACA,QAAAzN,EAAA+gB,EAAAzT,KAAyBtN,EAAA+gB,EAAArT,MAAgB1N,IAAA,CACzC,GAAA+gB,EAAAxT,IAAA,GAAA+V,EAAAg+d,IAAAh+d,EAAAg+d,EAAA7ze,IAAAsT,EAAAvT,OAAAwT,GAAAsC,EAAAk+d,IAAAl+d,EAAAk+d,EAAA/ze,GAAA;AACA6ze,IACAE,GACA,CACA,QACA,CAdA,CAyBAl+d,EAAAvC,GAAA;AACA,GAAAykQ,EAAA,CACA,MAAA7mO,EAAAh9B,EAAAg9B,GACAm4V,EAAA;AACA,IACA4qG,EACAC,EAFAxga,EAAAsyZ,EAAA/1L,SAAA1gN;AAGA,QAAA8mK,EAAA/iP,EAAAxT,IAA2Bu2P,EAAA/iP,EAAAvT,OAAmBs2P,IAAA,QAAAsN,EAAArwP,EAAAzT,KAAiC8jQ,EAAArwP,EAAArT,MAAkB0jQ,IAAA,CACjG,MAAAqoO,EAAAn2d,MAAAwgP,EAAAxgP,EAAA7V,MAAA2jQ,GACAqzG,EAAA1jW,EAAAqyY,MAAA7a,OAAAkhG;AACA,IAAA3iG,EAAA2iG,IAAAh1H,EAEA,GADAqyB,EAAA2iG,MACA,MAAAiI,EACAA,EAAAjI,EACAkI,EAAAl9H;IACK,CACLx1K,EAAAw1K,KAAAtjS,IAAA6vH,OAAAyzK,EAAAtjS;AACA,MAAAyga,EAAAjjc,EAAAogI,QAAAz7J,IAAAm2d,EAAA14d,EAAAm2d;AACAv4b,EAAAqmC,OAAA48Z,IAAAn9H,EAAA2tB,SACA,CACA,CACA,SAAAsvG,GAAA,MAAAC,EAAA;AAKA,GAJAhjc,EAAA06V,cAAAqoG,EAAA3ge,EAAAm2d,WAAA,SACAE,EAAAuK,EAAAnoa,MAAAmoa,EAAAnoa,MAAAm5U,QAAA5xY,EAAArT,MAAAqT,EAAAzT,KAAAq0e,EAAAnoa,MAAAm5U,SACAC,QAAA7xY,EAAAvT,OAAAuT,EAAAxT,MAEA4zE,EAAApjE,KAAA,GACA,MAAAc,EAAA6ie,EAAA,EAAAC,EAAAxga,QAAApjE,KACAa,EAAAqwL,EAAA0yS,GAAAD,EAAA,EAAA7ie;AACA8/B,EAAAmsV,YAAAlsX,EAAAmC,EAAAm2d,WAAAr4d,EAAAkC,EAAAm2d,WAAA/1Z,EACA,CACAxiC,EAAAq2V,aAAA,IAAA8f,EAAAn2W,EAAAt0B,IAAAqqD,QAAAgta,EAAA3ge,EAAAm2d,cACA1xN,EAAA7mO,EACA,CACA,QACA,EAkjCA5F,EAAA+9b,gBAAuBA,EACvB/9b,EAAA8oc,gBAzwBA,SAAAngf,GACA,OAAAigB,EAAA6jQ,KACA,MAAUv4P,KAAA60d,EAAA31b,GAAA41b,EAAA9ye,YAAA+qC,MAAAr4B,EAAA8xF,UAAAxmF,MAAgFvrB,EAC1Fi9C,EAAAh9B,EAAAg9B;AACA,QAnpBA,SAAAqjc,GACA,IAAAC,EAAAC;AACA,MAAAvjc,GAASA,EAAAmjc,cAAAC,cAAA9ye,SAAA+qC,OAA4Cgoc,EACrD5uF,EAAAsnF,EAAA/7b,EAAAt0B,IAAAqqD,QAAA16B;AACA,IAAAo5W,EAAA;AACA,MAAA+uF,EAAA,QAAAF,EAAAjH,EAAAr8b,EAAAmjc,UAAA,IAAAG,OAAA,EAAAA,EAAA7G,QACAgH,EAAA,QAAAF,EAAAlH,EAAAr8b,EAAAojc,UAAA,IAAAG,OAAA,EAAAA,EAAA9G;AACA,IAAA+G,IAAAC,EAAA;AACA,GAAAD,EAAA19e,SAAAs9e,GAAA;AACA,MAAAM,EAaA,SAAAjvF,EAAAinF,EAAAC,GACA,IAAAtvO,EAAA+wO,EAAA7C,EAAA9lF;AAGA,OAFApoJ,EAAAovO,EAAApvO,EAAAqvO,EAAAC,EAfA,GAgBAtvO,EAAA+wO,EAAA/wO,GACA4uO,EAAAxmF,EAAApoJ,EACA,CALA,CAbAooJ,EAAAxvY,KAAAu+d,EAAAC;AAEA,GADAzjc,EAAAmsV,YAAAsoB,EAAAp5W,IAAAo5W,EAAAp5W,IAAAo5W,EAAAxvY,KAAAwuX,SAAAiwG,IACApze,EAAA;AACA,MAAAqU,EAAAywd,EAAA/nd,IAAAq2d,GACAzje,EAAAw0Y,EAAAx0Y,MACAnW,EAAAs5e,EACA9E,EAAA35d,EAAAwxd,WAAAxxd,EAAAtC,OAAA,EAAAvY,EAAA45e,GACAC,EAAA3jc,EAAAt0B,IAAAqqD,QAAA91D,EAAAq+d,GACAsF,EAAAj/d,EAAAwxd,WAAA,EAAArse,EAAA45e,GACAG,EAAA7jc,EAAAt0B,IAAAqqD,QAAA91D,EAAA2je;AAEA,OADA5jc,EAAAq2V,aAAA8f,EAAA4iF,aAAA4K,EAAAE,MAEA,CArBA,CAmpBA,CACA7jc,KACAmjc,cACAC,cACA9ye,SACA+qC,UAEAwrO,WAAA7mO,OAKA,EA0vBA5F,EAAA0pc,aAhyBA,SAAA/gf,GACA,OAAAigB,EAAA6jQ,KACA,MAAUv4P,KAAA60d,EAAA31b,GAAA41b,EAAA9ye,YAAA+qC,MAAAr4B,EAAA8xF,UAAAxmF,MAAgFvrB,EAC1Fi9C,EAAAh9B,EAAAg9B;AACA,QAzlBA,SAAA+jc,GACA,IAAAC,EAAAC;AACA,MAAAjkc,GAASA,EAAAmjc,cAAAC,cAAA9ye,SAAA+qC,OAA4C0oc,EACrDtvF,EAAAsnF,EAAA/7b,EAAAt0B,IAAAqqD,QAAA16B;AACA,IAAAo5W,EAAA;AACA,MAAAyvF,EAAA,QAAAF,EAAAlH,EAAA98b,EAAAmjc,UAAA,IAAAa,OAAA,EAAAA,EAAAvH,QACA0H,EAAA,QAAAF,EAAAnH,EAAA98b,EAAAojc,UAAA,IAAAa,OAAA,EAAAA,EAAAxH;AACA,IAAAyH,IAAAC,EAAA;AACA,GAAAD,EAAAp+e,SAAAs9e,GAAA;AACA,MAAAM,EAaA,SAAAjvF,EAAAinF,EAAAC,GACA,IAAAtvO,EAAAkuO,EAAA9lF;AAEA,OADApoJ,EAAAovO,EAAApvO,EAAAqvO,EAAAC,EAfA,GAgBAV,EAAAxmF,EAAApoJ,EACA,CAJA,CAbAooJ,EAAAxvY,KAAAi/d,EAAAC;AAEA,GADAnkc,EAAAmsV,YAAAsoB,EAAAp5W,IAAAo5W,EAAAp5W,IAAAo5W,EAAAxvY,KAAAwuX,SAAAiwG,IACApze,EAAA;AACA,MAAAqU,EAAAywd,EAAA/nd,IAAAq2d,GACAzje,EAAAw0Y,EAAAx0Y,MACAnW,EAAAs5e,EACA9E,EAAA35d,EAAAwxd,WAAArse,EAAA6a,EAAA7V,MAAA,EAAA40e,GACAC,EAAA3jc,EAAAt0B,IAAAqqD,QAAA91D,EAAAq+d,GACAsF,EAAAj/d,EAAAwxd,WAAArse,EAAA,EAAA45e,GACAG,EAAA7jc,EAAAt0B,IAAAqqD,QAAA91D,EAAA2je;AAEA,OADA5jc,EAAAq2V,aAAA8f,EAAA0iF,aAAA8K,EAAAE,MAEA,CArBA,CAylBA,CACA7jc,KACAmjc,cACAC,cACA9ye,SACA+qC,UAEAwrO,WAAA7mO,OAKA,EAixBA5F,EAAAo7b,SAAgBA,EAChBp7b,EAAA89b,aAAoBA,EACpB99b,EAAAo+b,cAAqBA,EACrBp+b,EAAAojc,aAAoBA,EACpBpjc,EAAA4jc,UAAiBA,EACjB5jc,EAAAsjc,YAAmBA,EACnBtjc,EAAAijc,aAAoBA,EACpBjjc,EAAA09b,cAAqBA,EACrB19b,EAAAs9W,YAz+BA,SAAAvuZ,EAAAzF,GACA,gBAAAsf,EAAA6jQ,GACA,IAAAgxN,EAAA70d,GAAA;AACA,MAAAu5D,EAAAu7Z,EAAA90d;AACA,GAAAu5D,EAAA0vT,UAAApxT,MAAA1xE,KAAAzF,EAAA;AACA,GAAAmjR,EAAA,CACA,MAAA7mO,EAAAh9B,EAAAg9B;AACAh9B,EAAA8xF,qBAAAqhT,EAAAnzY,EAAA8xF,UAAAqkY,YAAA,CAAAl0d,EAAAo2B,KACAp2B,EAAA41D,MAAA1xE,KAAAzF,GAAAs8C,EAAA06V,cAAAr/V,EAAA,SACAp2B,EAAA41D,MACA1xE,IAAAzF,MAGAs8C,EAAA06V,cAAAn+T,EAAAlhC,IAAA,SACAkhC,EAAA0vT,UAAApxT,MACA1xE,IAAAzF,IAEAmjR,EAAA7mO,EACA,CACA,QACA,CACA,EAq9BA5F,EAAA+8W,UAvjCA,SAAAn0Y,EAAA6jQ,GACA,MAAAm/M,EAAAnwE,EAAA7yY,EAAAgmG;AACA,OAAAk1X,EAAA,EAA6Bj5d,UAC7B+gd,EAAA/gd,EAAApgB,KAAAimW,KAAAqpD,WADA+pF,CAEEl7d,EAAA6jQ,EACF,EAmjCAzsO,EAAA8jc,kBAAyBA,EACzB9jc,EAAA+9W,aAlFA,UAAAzB,wBAAwBA,MAAkC,IAC1D,WAAAm+E,EAAAvoG,OAAA,CACAtyW,IAAA29c,EACA30d,MAAA,CACA8wD,KAAA,IACA,KAEA,KAAApgE,CAAAssC,EAAAynH,GACA,MAAA75I,EAAAoyB,EAAAmmV,QAAAwxG;AACA,SAAA/pd,EAAA,UAAAA,EAAA,KAAAA;AACA,SAAA65I,IAAAznH,EAAA0sV,WAAA,OAAAjlO;AACA,MAAAohP,QAAYA,EAAAxtW,OAAe2E,EAAAogI,QAAA2oO,UAAAthP;AAC3B,OAAAohP,EAAA,KAAAxtW,CACA,GAEAgQ,MAAA,CACAsmV,YAAAooG,EACAntG,gBAAA,CAAsB72O,UAAAoqV,IACtBlkB,uBAAA7jZ,GACA,MAAAu/Z,EAAAr1F,SAAAlqU,EAAAp1D,OAAAo1D,EAAAp1D,MAAA8xF,UAAA,KAEAorY,qBACAjzT,iBACAi3N,gBAEA7U,kBAAA,CAAA9+X,EAAAg/X,EAAAvsX,IAr2DA,SAAAA,EAAAg9B,EAAA02W,GACA,MAAAxV,GAAAlhW,GAAAh9B,GAAA8xF,UACAppF,GAAAs0B,GAAAh9B,GAAA0I;AACA,IAAAo+Q,EACA2C;AACA,GAAAy0G,aAAA2zF,EAAAh1F,gBAAApzG,EAAAy0G,EAAAj8X,KAAApgB,KAAAimW,KAAAqpD,YACA,WAAA1nH,GAAA,eAAAA,EAAA3C,EAAAqsH,EAAA7wZ,OAAAomB,EAAAw1X,EAAA5yX;KACA,UAAAm+Q,EAAA,CACA,MAAAlwN,EAAA7wD,EAAAqqD,QAAAmrU,EAAA5yX,KAAA;AACAw7Q,EAAAqsH,EAAA0iF,aAAAt8Z,IACA,MAAI,IAAAm6U,EAAA,CACJ,MAAA/xY,EAAAywd,EAAA/nd,IAAA6zX,EAAAj8X,MACAhF,EAAAihY,EAAA5yX,KAAA,EACAgwd,EAAAr+d,EAAA0E,QAAA7V,MAAA6V,EAAAtC,OAAA;AACAynR,EAAAqsH,EAAA7wZ,OAAAomB,EAAAzL,EAAA,EAAAq+d,EACA,OACGp9F,aAAA2zF,EAAAhhG,eA5CH,UAAA1I,MAAmCA,EAAA2H,QACnC,GAAA3H,EAAA9vV,KAAAy3V,EAAAz3V,KAAA8vV,EAAA9vV,IAAAy3V,EAAAz3V,IAAA;AACA,IAAA+oc,EAAAj5G,EAAA9vV,IACAgpc,EAAAvxG,EAAAz3V,IACAs8V,EAAAxM,EAAAwM;AACA,KAAQA,GAAA,KAAYxM,EAAAntN,MAAA25N,EAAA,GAAAxM,EAAAjrX,IAAAy3X,QAAAysG,KACpB,QAAA1jf,EAAAoyY,EAAA6E,MAAyBj3Y,GAAA,KAAQoyY,EAAA/0N,OAAAr9K,EAAA,GAAAoyY,EAAA7yX,MAAAvf,QAAA2jf,KACjC,OAAAD,GAAAC,GAAA,YAAAj+d,KAAA+kX,EAAAlmX,KAAA0yX,GAAA9yY,KAAAimW,KAAAqpD,UACA,CARA,CA4CGjT,GAAAp3G,EAAA+qM,EAAAhhG,cAAAvuY,OAAAomB,EAAAw1X,EAAA5yX,MACH4yX,aAAA2zF,EAAAhhG,eApCA,UAAA1I,MAAsCA,EAAA2H,QACtC,IAAAwxG,EACAC;AACA,QAAAljf,EAAA8pY,EAAAwM,MAA2Bt2Y,EAAA,EAAOA,IAAA,CAClC,MAAA4jB,EAAAkmX,EAAAlmX,KAAA5jB;AACA,YAAA4jB,EAAApgB,KAAAimW,KAAAqpD,WAAA,gBAAAlvY,EAAApgB,KAAAimW,KAAAqpD,UAAA,CACAmwF,EAAAr/d;AACA,KACA,CACA,CACA,QAAA5jB,EAAAyxY,EAAA6E,MAAyBt2Y,EAAA,EAAOA,IAAA,CAChC,MAAA4jB,EAAA6tX,EAAA7tX,KAAA5jB;AACA,YAAA4jB,EAAApgB,KAAAimW,KAAAqpD,WAAA,gBAAAlvY,EAAApgB,KAAAimW,KAAAqpD,UAAA,CACAowF,EAAAt/d;AACA,KACA,CACA,CACA,OAAAq/d,IAAAC,GAAA,IAAAzxG,EAAAvH,YACA,CAlBA,CAoCA2V,KAAAp3G,EAAA+qM,EAAAhhG,cAAAvuY,OAAAomB,EAAAw1X,EAAA/V,MAAAlrX,QAAAihY,EAAA/V,MAAAjrX;AAEA,OADA4pR,IAAA9pP,MAAAh9B,EAAAg9B,KAAAq2V,aAAAvsG,GACA9pP,CACA,CApBA,CAs2DAh9B,EAAA60Y,EAAA70Y,EAAAusX,GAAAmnB,IAGA,EAsDAt8W,EAAAu9b,gBAAuBA,EACvBv9b,EAAAy7W,eAAsBA,EACtBz7W,EAAAoqc,WAj2EA,SAAAzhf,GACA,MAAA+lW,EAAA/lW,EAAA0hf,gBAAA,GACAC,EAAA,CACA1wF,QAAA,CACAr+Y,QAAA,EACAi/F,SAAA,UAEAq/S,QAAA,CACAt+Y,QAAA,EACAi/F,SAAA,UAEAs/S,SAAA,CACAv+Y,QAAA,KACAi/F,SAAA8iY;AAGA,UAAAzrT,KAAA68K,EAAA47I,EAAAz4T,GAAA,CACAt2K,QAAAmzV,EAAA78K,GAAAt2K,QACAi/F,SAAAk0P,EAAA78K,GAAAr3E;AAEA,OACA6/S,MAAA,CACAjyU,QAAA,aACA2xU,UAAA,QACArqB,aACA92O,MAAAjwJ,EAAA4hf,WACA36G,SAAA,EAAgBpuW,IAAA,UAChBquW,MAAA,IACA,uBAGA26G,UAAA,CACApia,QAAA,+BACA2xU,UAAA,MACAnqB,SAAA,EAAgBpuW,IAAA,OAChBquW,MAAA,IACA,UAGA46G,WAAA,CACAria,QAAAz/E,EAAAwyZ,YACA16U,MAAA6pa,EACAvwF,UAAA,OACArqB,aACAE,SAAA,EACApuW,IAAA,KACAotW,SAAA+F,GAAAsoG,EAAAtoG,EAAAjmC,KAEAmhC,MAAAhlX,GACA,CACA,KACAuyd,EAAAvyd,EAAA6jV,GACA,IAIAg8I,aAAA,CACAtia,QAAAz/E,EAAAwyZ,YACA16U,MAAA6pa,EACAvwF,UAAA,cACArqB,aACAE,SAAA,EACApuW,IAAA,KACAotW,SAAA+F,GAAAsoG,EAAAtoG,EAAAjmC,KAEAmhC,MAAAhlX,GACA,CACA,KACAuyd,EAAAvyd,EAAA6jV,GACA,IAKA,EAwxEA1uT,EAAAi9W,aAAoBA,EACpBj9W,EAAAm9W,iBAAwBA,GACxBn9W,EAAAg9W,mBAA0BA,GAC1Bh9W,EAAAk9W,gBAAuBA,GACvBl9W,EAAAumc,sBAA6BA;ACxnF7B,SAAAzgB,EAAAt/d,GAAmC,IAAAuva,EAAA,mBAAA/3Y,IAAA,IAAAA,SAAA5F;AAAmrB,OAAnnB0tc,EAAA,SAAAt/d,GAAsD,UAAAA,IAEzJ,SAAAywB,GAAiC,IAAM,WAAAiuI,SAAAluJ,SAAAzF,KAAA0lB,GAAAzmB,QAAA,iBAAqE,MAAAxJ,GAAY,yBAAAiwB,CAAA,EAAxH,CAFyJzwB,GAAA,OAAAA;AAA+D,sBAAAA,EAAmC,UAAAgpD,UAAA;AAA6E,YAAAumX,EAAA,CAAqC,GAAAA,EAAAx+Y,IAAA/wB,GAAA,OAAAuva,EAAA9iZ,IAAAzsB;AAAiDuva,EAAAviZ,IAAAhtB,EAAAu/d,EAAA,CAA8B,SAAAA,IAAqB,OAAAC,EAAAx/d,EAAA+S,UAAA4/H,EAAAxyI,MAAAs7E,YAAA,CAA0N,OAAhJ8jZ,EAAAn6d,UAAA8iB,OAAAxjB,OAAA1E,EAAAoF,UAAA,CAAqDq2E,YAAA,CAAe34E,MAAAy8d,EAAAh2a,cAAAiyB,YAAAhyB,mBAA4EgpF,EAAA+sV,EAAAv/d,EAAA,EAA2Cs/d,EAAAt/d,EAAA,CACttB,SAAAw/d,EAAAC,EAAA5mc,EAAA74B,GAA8X,OAAhTw/d,EAAnC5sV,IAAmCC,QAAAC,UAAAlwI,OAAgD,SAAA68d,EAAA5mc,EAAA74B,GAAwD,IAAAiB,EAAA;AAAgBA,EAAA8G,KAAA+K,MAAA7R,EAAA43B;AAAuB,IAAkDu7C,EAAA,IAAlDsqF,SAAA97J,KAAAkQ,MAAA2sd,EAAAx+d;AAA2I,OAAvDjB,GAAAwyI,EAAAp+D,EAAAp0E,EAAAoF,WAAuDgvE,CAAA,EAAsBorZ,EAAA1sd,MAAA,KAAAC,UAAA,CAE9X,SAAA2/H,EAAAqnV,EAAAC,GAA2C,sBAAAA,GAAA,OAAAA,EAA+D,UAAAhxa,UAAA;AAA6E+wa,EAAA30d,UAAA8iB,OAAAxjB,OAAAs1d,KAAA50d,UAAA,CAAyEq2E,YAAA,CAAe34E,MAAAi3d,EAAAv+Y,YAAAhyB,mBAA0DthC,OAAAmhC,eAAA0wa,EAAA,aAA+Cv+Y,cAAoBw+Y,GAAAxnV,EAAAunV,EAAAC,EAAA,CAC5Y,SAAAxnV,EAAAzxI,EAAAiE,GAAyK,OAAxIwtI,EAAAtqH,OAAAuqH,eAAAvqH,OAAAuqH,eAAA7vI,OAAA,SAAA7B,EAAAiE,GAA2H,OAAjBjE,EAAA+6F,UAAA92F,EAAiBjE,CAAA,EAAayxI,EAAAzxI,EAAAiE,EAAA,CACzK,SAAA+tI,EAAAknV,GAAiC,IAAAC,EAAAtnV;AAA6D,kBAAyC,IAAAxrH,EAAA6lE,EAAA0lD,EAAAsnV;AAA8C,GAAAC,EAAA,CAAiC,IAAAC,EAAAxnV,EAAAxyI,MAAAs7E;AAAmDr0D,EAAAyrH,QAAAC,UAAA7lD,EAAAl6E,UAAAond,EAAA,MAAkE/yc,EAAA6lE,EAAAn6E,MAAA3S,KAAA4S;AAAyC,OACpX,SAAA2nJ,EAAA3vJ,GAAkD,GAAAA,IAAA,WAAAo/H,EAAAp/H,IAAA,mBAAAA,GAA0E,OAAAA;AAAe,YAAAA,EAA4B,UAAAi+C,UAAA;AAAmF,OAC1P,SAAA0xG,GAAwC,YAAAA,EAAuB,UAAAnoB,eAAA;AAAyF,OAAAmoB,CAAA,CAAxJ,CAD0PA,EAAA,CAA1P,CADoXv6J,KAAAinB,EAAA,EAGpX,SAAAwrH,IAAuC,uBAAAC,kBAAAC,UAAA;AAAwE,GAAAD,QAAAC,UAAAs0I,KAAA;AAA0C,sBAAA78E,MAAA;AAA8C,IAAsF,OAAhF3oJ,QAAAx8C,UAAA0rI,QAAA/lI,KAAA8nI,QAAAC,UAAAlxF,QAAA,oBAAgF,CAAe,MAAAphD,GAAY,UACxT,SAAAmyI,EAAA5xI,GAAwL,OAA1J4xI,EAAAzqH,OAAAuqH,eAAAvqH,OAAAC,eAAAvlB,OAAA,SAAA7B,GAAuG,OAAAA,EAAA+6F,WAAA5zE,OAAAC,eAAApnB,EAAA,EAAmD4xI,EAAA5xI,EAAA,CACxL,SAAAopI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAC/S,SAAAmyI,EAAA9+D,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAC5F,SAAAoqF,EAAAzpI,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EAC/P,SAAA+oF,EAAAilV,EAAAE,EAAAkB,GAAwQ,OAA1MlB,GAAAplV,EAAAklV,EAAAlzd,UAAAozd,GAAsEkB,GAAAtmV,EAAAklV,EAAAoB,GAA8Dxxc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cAAoB88Y,CAAA,CACxQ,SAAAJ,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAEtE,IAAA65b,EAAuBrnY,EAAQ,OAE/Bu4Z,EAAAjhf,KAAAC,IAAA;AACA,SAAAihf,EAAAl7e,EAAAiV,GACA,OAAAjV,EAAAiV,EAAAgme,CACA,CACA,SAAAE,EAAAvhf,GACA,OANA,MAMAA,CACA,CAIA,IAIAwhf,EAAA,WACA,SAAAA,EAAA7pc,EAAA8pc,EAAAC,GACAtxW,EAAA/yI,KAAAmkf,GACAnkf,KAAAs6C,MACAt6C,KAAAokf,UACApkf,KAAAqkf,SACA,CAsBA,OArBAnxW,EAAAixW,EAAA,EACAlrd,IAAA,UACA3M,IAAA,WACA,OAXA,EAWAtsB,KAAAokf,SAAA,CACA,GACG,CACHnrd,IAAA,gBACA3M,IAAA,WACA,SAAAtsB,KAAAokf,SAAA,CACA,GACG,CACHnrd,IAAA,eACA3M,IAAA,WACA,SAAAtsB,KAAAokf,SAAA,CACA,GACG,CACHnrd,IAAA,gBACA3M,IAAA,WACA,OA3BA,EA2BAtsB,KAAAokf,SAAA,CACA,KAEAD,CACA,CA7BA,GA8BAG,EAAA,WACA,SAAAA,EAAA1+Y,GACA,IAAA2+Y,EAAA3xe,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AAIA,GAHAmgI,EAAA/yI,KAAAskf,GACAtkf,KAAA4lG,SACA5lG,KAAAukf,YACA3+Y,EAAArlG,QAAA+jf,EAAAhnZ,MAAA,OAAAgnZ,EAAAhnZ,KACA,CA8FA,OA7FA41C,EAAAoxW,EAAA,EACArrd,IAAA,UACAt2B,MAAA,SAAAA,GACA,IAAAqpH,EAAA,EACAjjH,EAAAm7e,EAAAvhf;AACA,IAAA3C,KAAAukf,SAAA,QAAAjkf,EAAA,EAA0CA,EAAAyI,EAAWzI,IAAA0rH,GAAAhsH,KAAA4lG,OAAA,EAAAtlG,EAAA,GAAAN,KAAA4lG,OAAA,EAAAtlG,EAAA;AACrD,OAAAN,KAAA4lG,OAAA,EAAA78F,GAAAijH,EAnDA,SAAArpH,GACA,OAAAA,GATA,MASAA,IAAAqhf,CACA,CAFA,CAmDArhf,EACA,GACG,CACHs2B,IAAA,YACAt2B,MAAA,SAAA23C,GACA,IAAAkqc,EAAA5xe,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA5S,KAAAqJ,KAAAixC,EAAAkqc,KACA,GACG,CACHvrd,IAAA,MACAt2B,MAAA,SAAA23C,GACA,IAAAkqc,EAAA5xe,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA5S,KAAAqJ,KAAAixC,EAAAkqc,KACA,GACG,CACHvrd,IAAA,OACAt2B,MAAA,SAAA23C,EAAAkqc,EAAAC,GAIA,IAHA,IAAAz4X,EAAA,EACA04X,EAAA1kf,KAAAukf,SAAA,IACAI,EAAA3kf,KAAAukf,SAAA,IACAjkf,EAAA,EAAsBA,EAAAN,KAAA4lG,OAAArlG,OAAwBD,GAAA,GAC9C,IAAA4e,EAAAlf,KAAA4lG,OAAAtlG,IAAAN,KAAAukf,SAAAv4X,EAAA;AACA,GAAA9sG,EAAAo7B,EAAA;AACA,IAAA6+b,EAAAn5e,KAAA4lG,OAAAtlG,EAAAokf,GACAtsD,EAAAp4b,KAAA4lG,OAAAtlG,EAAAqkf,GACAxle,EAAAD,EAAAi6d;AACA,GAAA7+b,GAAAn7B,EAAA,CACA,IACA8H,EAAA/H,EAAA8sG,IADAmtX,EAAA7+b,GAAAp7B,GAAA,EAAAo7B,GAAAn7B,EAAA,EAAAqle,KACA,IAAApsD;AACA,GAAAqsD,EAAA,OAAAx9d;AACA,IAAAo9d,EAAA/pc,IAAAkqc,EAAA,EAAAtle,EAAAC,GAAA,KAAA8ke,EAAA3jf,EAAA,EAAAg6C,EAAAp7B,GACAw2c,EAAAp7a,GAAAp7B,EA9EA,EA8EAo7B,GAAAn7B,EA/EA,EAEA;AA+EA,OADAqle,EAAA,EAAAlqc,GAAAp7B,EAAAo7B,GAAAn7B,KAAAu2c,GA7EA,GA8EA,IAAAyuB,EAAAl9d,EAAAyuc,EAAA2uB,EACA,CACAr4X,GAAAosU,EAAA+gD,CACA,CACA,OAAAsL,EAAAnqc,EAAA0xE,EAAA,IAAAm4X,EAAA7pc,EAAA0xE,EAAA,OACA,GACG,CACH/yF,IAAA,UACAt2B,MAAA,SAAA23C,EAAA+pc,GAKA,IAJA,IAAAr4X,EAAA,EACAjjH,EAAAm7e,EAAAG,GACAK,EAAA1kf,KAAAukf,SAAA,IACAI,EAAA3kf,KAAAukf,SAAA,IACAjkf,EAAA,EAAsBA,EAAAN,KAAA4lG,OAAArlG,OAAwBD,GAAA,GAC9C,IAAA4e,EAAAlf,KAAA4lG,OAAAtlG,IAAAN,KAAAukf,SAAAv4X,EAAA;AACA,GAAA9sG,EAAAo7B,EAAA;AACA,IAAA6+b,EAAAn5e,KAAA4lG,OAAAtlG,EAAAokf;AAEA,GAAApqc,GADAp7B,EAAAi6d,GACA74e,GAAA,EAAAyI,EAAA;AACAijH,GAAAhsH,KAAA4lG,OAAAtlG,EAAAqkf,GAAAxL,CACA,CACA,QACA,GACG,CACHlgd,IAAA,UACAt2B,MAAA,SAAAuJ,GAGA,IAFA,IAAAw4e,EAAA1kf,KAAAukf,SAAA,IACAI,EAAA3kf,KAAAukf,SAAA,IACAjkf,EAAA,EAAA0rH,EAAA,EAAgC1rH,EAAAN,KAAA4lG,OAAArlG,OAAwBD,GAAA,GACxD,IAAA4e,EAAAlf,KAAA4lG,OAAAtlG,GACA8oZ,EAAAlqY,GAAAlf,KAAAukf,SAAAv4X,EAAA,GACAk9R,EAAAhqY,GAAAlf,KAAAukf,SAAA,EAAAv4X,GACAmtX,EAAAn5e,KAAA4lG,OAAAtlG,EAAAokf,GACAtsD,EAAAp4b,KAAA4lG,OAAAtlG,EAAAqkf;AACAz4e,EAAAk9Y,IAAA+vF,EAAAjwF,IAAAkvC,GACApsU,GAAAosU,EAAA+gD,CACA,CACA,GACG,CACHlgd,IAAA,SACAt2B,MAAA,WACA,WAAA2hf,EAAAtkf,KAAA4lG,QAAA5lG,KAAAukf,SACA,GACG,CACHtrd,IAAA,WACAt2B,MAAA,WACA,OAAA3C,KAAAukf,SAAA,QAAAtue,KAAA8iB,UAAA/4B,KAAA4lG,OACA,IACG,EACH3sE,IAAA,SACAt2B,MAAA,SAAAnC,GACA,UAAAA,EAAA8jf,EAAAhnZ,MAAA,IAAAgnZ,EAAA9jf,EAAA,MAAAA,EAAA,QAAAA,GACA,KAEA8jf,CACA,CAtGA;AAuGAA,EAAAhnZ,MAAA,IAAAgnZ,EAAA;AACA,IAAAvoB,EAAA,WACA,SAAAA,EAAA9mF,EAAA7lB,GACA,IAAA7hW,EAAA3a,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACA65C,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAqiY,IAAA10Y,OAAA;AACAwyI,EAAA/yI,KAAA+7d,GACA/7d,KAAAovX,SACApvX,KAAAutB,OACAvtB,KAAAysD,KACAzsD,KAAA4kf,MAAA3vG,GAAA,GACAj1Y,KAAA6kf,UAAA5vG,GAAA7lB,EACA,CA6FA,OA5FAl8O,EAAA6oV,EAAA,EACA9ic,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAA4kf,KACA,GACG,CACH3rd,IAAA,QACAt2B,MAAA,WACA,IAAA4qB,EAAA3a,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACA65C,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA5S,KAAAi1Y,KAAA10Y;AACA,WAAAw7d,EAAA/7d,KAAA4kf,MAAA5kf,KAAAovX,OAAA7hW,EAAAk/B,EACA,GACG,CACHxzB,IAAA,YACAt2B,MAAA,SAAAihB,EAAAkhe,GACA9kf,KAAA6kf,UACA7kf,KAAA4kf,MAAA5kf,KAAA4kf,MAAAxkf,QACAJ,KAAAovX,OAAApvX,KAAAovX,QAAApvX,KAAAovX,OAAAhvX,QACAJ,KAAA6kf,YAEA7kf,KAAAysD,GAAAzsD,KAAA4kf,MAAAh9e,KAAAgc,GACA,MAAAkhe,GAAA9kf,KAAA+kf,UAAA/kf,KAAA4kf,MAAArkf,OAAA,EAAAukf,EACA,GACG,CACH7rd,IAAA,gBACAt2B,MAAA,SAAA08K,GACA,QAAA/+K,EAAA,EAAA0kf,EAAAhlf,KAAA4kf,MAAArkf,OAAqDD,EAAA++K,EAAAulU,MAAArkf,OAA0BD,IAAA,CAC/E,IAAA2kf,EAAA5lU,EAAAk9S,UAAAj8d;AACAN,KAAA07d,UAAAr8S,EAAAulU,MAAAtkf,GAAA,MAAA2kf,KAAA3kf,EAAA0kf,EAAAC,OAAAxzd,EACA,CACA,GACG,CACHwH,IAAA,YACAt2B,MAAA,SAAAnC,GACA,GAAAR,KAAAovX,OAAA,QAAA9uX,EAAA,EAAuCA,EAAAN,KAAAovX,OAAA7uX,OAAwBD,IAAA,GAAAN,KAAAovX,OAAA9uX,IAAAE,EAAA,OAAAR,KAAAovX,OAAA9uX,KAAA,QAC/D,GACG,CACH24B,IAAA,YACAt2B,MAAA,SAAAnC,EAAA2J,GACAnK,KAAAovX,SAAApvX,KAAAovX,OAAA,IACApvX,KAAAovX,OAAAxnX,KAAApH,EAAA2J,EACA,GACG,CACH8uB,IAAA,wBACAt2B,MAAA,SAAA08K,GACA,QAAA/+K,EAAA++K,EAAA41N,KAAA10Y,OAAA,EAAA2kf,EAAAllf,KAAA4kf,MAAArkf,OAAA8+K,EAAAulU,MAAArkf,OAAkGD,GAAA,EAAQA,IAAA,CAC1G,IAAA2kf,EAAA5lU,EAAAk9S,UAAAj8d;AACAN,KAAA07d,UAAAr8S,EAAAulU,MAAAtkf,GAAAwtR,SAAA,MAAAm3N,KAAA3kf,EAAA4kf,EAAAD,EAAA,OAAAxzd,EACA,CACA,GACG,CACHwH,IAAA,SACAt2B,MAAA,WACA,IAAAwif,EAAA,IAAAppB;AAEA,OADAopB,EAAAC,sBAAAplf,MACAmlf,CACA,GACG,CACHlsd,IAAA,MACAt2B,MAAA,SAAA23C,GACA,IAAAkqc,EAAA5xe,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,GAAA5S,KAAAovX,OAAA,OAAApvX,KAAAqJ,KAAAixC,EAAAkqc;AACA,QAAAlkf,EAAAN,KAAAutB,KAA8BjtB,EAAAN,KAAAysD,GAAansD,IAAAg6C,EAAAt6C,KAAA4kf,MAAAtkf,GAAAsjB,IAAA02B,EAAAkqc;AAC3C,OAAAlqc,CACA,GACG,CACHrhB,IAAA,YACAt2B,MAAA,SAAA23C,GACA,IAAAkqc,EAAA5xe,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA5S,KAAAqJ,KAAAixC,EAAAkqc,KACA,GACG,CACHvrd,IAAA,OACAt2B,MAAA,SAAA23C,EAAAkqc,EAAAC,GAEA,IADA,IAAAL,EAAA,EACA9jf,EAAAN,KAAAutB,KAA8BjtB,EAAAN,KAAAysD,GAAansD,IAAA,CAC3C,IACA2mB,EADAjnB,KAAA4kf,MAAAtkf,GACA0nZ,UAAA1tW,EAAAkqc;AACA,SAAAv9d,EAAAo9d,QAAA,CACA,IAAAgB,EAAArlf,KAAAu8d,UAAAj8d;AACA,SAAA+kf,KAAA/kf,GAAA+kf,EAAArlf,KAAAysD,GAAA,CACAnsD,EAAA+kf,EACA/qc,EAAAt6C,KAAA4kf,MAAAS,GAAAhB,QAAAp9d,EAAAo9d;AACA,QACA,CACA,CACAD,GAAAn9d,EAAAm9d,QACA9pc,EAAArzB,EAAAqzB,GACA,CACA,OAAAmqc,EAAAnqc,EAAA,IAAA6pc,EAAA7pc,EAAA8pc,EAAA,KACA,KAEAroB,CACA,CAxGA,GAyGAupB,EAAAv9d,OAAAxjB,OAAA,MACAghf,EAAA,WACA,SAAAA,IACAxyW,EAAA/yI,KAAAulf,EACA,CA4BA,OA3BAryW,EAAAqyW,EAAA,EACAtsd,IAAA,SACAt2B,MAAA,WACA,OAAA2hf,EAAAhnZ,KACA,GACG,CACHrkE,IAAA,QACAt2B,MAAA,SAAAglD,GACA,WACA,IACG,EACH1uB,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,IAAAA,MAAAwgM,SAAA,UAAAxod,WAAA;AACA,IAAAl5B,EAAAwhf,EAAAtgM,EAAAwgM;AACA,IAAA1hf,EAAA,UAAAk5B,WAAA,gBAAAvqB,OAAAuyS,EAAAwgM,SAAA;AACA,OAAA1hf,EAAA+kZ,SAAA5gS,EAAA+8L,EACA,GACG,CACH/rR,IAAA,SACAt2B,MAAA,SAAAq8C,EAAAymc,GACA,GAAAzmc,KAAAsmc,EAAA,UAAAtod,WAAA,iCAAAgiB;AAGA,OAFAsmc,EAAAtmc,GAAAymc,EACAA,EAAAxgf,UAAAs1d,OAAAv7a,EACAymc,CACA,KAEAF,CACA,CAhCA,GAiCAG,EAAA,WACA,SAAAA,EAAA/6d,EAAAg7d,GACA5yW,EAAA/yI,KAAA0lf,GACA1lf,KAAA2qB,MACA3qB,KAAA2lf,QACA,CAsBA,OArBAzyW,EAAAwyW,EAAA,OACAzsd,IAAA,KACAt2B,MAAA,SAAAgoB,GACA,WAAA+6d,EAAA/6d,EAAA,KACA,GACG,CACHsO,IAAA,OACAt2B,MAAA,SAAAkT,GACA,WAAA6ve,EAAA,KAAA7ve,EACA,GACG,CACHojB,IAAA,cACAt2B,MAAA,SAAAgoB,EAAA4C,EAAAk/B,EAAArsD,GACA,IACA,OAAAslf,EAAAxqO,GAAAvwP,EAAAlK,QAAA8M,EAAAk/B,EAAArsD,GACA,CAAQ,MAAAC,GACR,GAAAA,aAAAyyd,EAAAmO,aAAA,OAAAykB,EAAAzlY,KAAA5/G,EAAAwV;AACA,MAAAxV,CACA,CACA,KAEAqlf,CACA,CA5BA;AA6BA,SAAAE,EAAA97G,EAAA59X,EAAA4b,GAEA,IADA,IAAAo6d,EAAA,GACA5hf,EAAA,EAAkBA,EAAAwpY,EAAA6I,WAAyBryY,IAAA,CAC3C,IAAAwmK,EAAAgjO,EAAAhjO,MAAAxmK;AACAwmK,EAAArlF,QAAApjE,OAAAyoJ,IAAAjP,KAAA+tV,EAAA9+U,EAAArlF,QAAAv1E,EAAA46J,KACAA,EAAAs3O,WAAAt3O,EAAA56J,EAAA46J,EAAAh/I,EAAAxnB,IACA4hf,EAAAt6e,KAAAk/J,EACA,CACA,OAAAgsT,EAAA90K,SAAAk2F,UAAAguG,EACA,CACA,IAAA2D,EAAA,SAAAC,GACAvzW,EAAAszW,EAAAC;AACA,IAAAz/b,EAAAusF,EAAAizW;AACA,SAAAA,EAAAt4d,EAAAk/B,EAAA4xD,GACA,IAAA93D;AAMA,OALAwsF,EAAA/yI,KAAA6lf,IACAt/b,EAAAF,EAAAz7C,KAAA5K,OACAutB,OACAg5B,EAAAkG,KACAlG,EAAA83D,OACA93D,CACA,CAkDA,OAjDA2sF,EAAA2yW,EAAA,EACA5sd,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,IAAAqpH,EAAAh0I,KACA+lf,EAAAp7d,EAAAvqB,MAAAJ,KAAAutB,KAAAvtB,KAAAysD,IACA29U,EAAAz/W,EAAAqqD,QAAAh1E,KAAAutB,MACAzF,EAAAsiX,EAAAlmX,KAAAkmX,EAAA+rF,YAAAn2d,KAAAysD,KACArsD,EAAA,IAAA0yd,EAAA5yE,MAAA0lG,EAAAG,EAAAtka,QAAA,SAAAv9D,EAAA4D,GACA,OAAA5D,EAAAwmX,QAAA5iX,EAAAhkB,KAAAo6Y,eAAAlqQ,EAAA31B,KAAAv6G,MACAogB,EAAAm6F,KAAA21B,EAAA31B,KAAA+lX,SAAAlgd,EAAAwkX,QADAxkX,CAEA,EAAO4D,GAAAi+d,EAAA5kB,UAAA4kB,EAAA3kB;AACP,OAAAskB,EAAAM,YAAAr7d,EAAA3qB,KAAAutB,KAAAvtB,KAAAysD,GAAArsD,EACA,GACG,CACH64B,IAAA,SACAt2B,MAAA,WACA,WAAAsjf,EAAAjmf,KAAAutB,KAAAvtB,KAAAysD,GAAAzsD,KAAAq+G,KACA,GACG,CACHplF,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA9xJ,EAAA8xJ,EAAA2oO,UAAAhoZ,KAAAutB,KAAA,GACAk/B,EAAA4yH,EAAA2oO,UAAAhoZ,KAAAysD,IAAA;AACA,OAAAl/B,EAAAu6X,SAAAr7V,EAAAq7V,SAAAv6X,EAAA+sB,KAAAmS,EAAAnS,IAAA,KACA,IAAAurc,EAAAt4d,EAAA+sB,IAAAmS,EAAAnS,IAAAt6C,KAAAq+G,KACA,GACG,CACHplF,IAAA,QACAt2B,MAAA,SAAAglD,GACA,OAAAA,aAAAk+b,GAAAl+b,EAAA02D,KAAA01I,GAAA/zP,KAAAq+G,OAAAr+G,KAAAutB,MAAAo6B,EAAA8E,IAAAzsD,KAAAysD,IAAA9E,EAAAp6B,KAAA,IAAAs4d,EAAA9if,KAAA8b,IAAA7e,KAAAutB,KAAAo6B,EAAAp6B,MAAAxqB,KAAA+b,IAAA9e,KAAAysD,GAAA9E,EAAA8E,IAAAzsD,KAAAq+G,MACA,IACA,GACG,CACHplF,IAAA,SACAt2B,MAAA,WACA,OACA6if,SAAA,UACAnnY,KAAAr+G,KAAAq+G,KAAA8rD,SACA58I,KAAAvtB,KAAAutB,KACAk/B,GAAAzsD,KAAAysD,GAEA,IACG,EACHxzB,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAAz3R,MAAA,iBAAAy3R,EAAAv4P,GAAA,UAAAzvB,WAAA;AACA,WAAA6od,EAAA7gM,EAAAz3R,KAAAy3R,EAAAv4P,GAAAw7D,EAAAo8W,aAAAr/K,EAAA3mM,MACA,KAEAwnY,CACA,CA9DA,CA8DCN;AACDA,EAAAhrB,OAAA,UAAAsrB;AACA,IAAAI,EAAA,SAAAC,GACA3zW,EAAA0zW,EAAAC;AACA,IAAAnyW,EAAAnB,EAAAqzW;AACA,SAAAA,EAAA14d,EAAAk/B,EAAA4xD,GACA,IAAA66W;AAMA,OALAnmV,EAAA/yI,KAAAimf,IACA/sB,EAAAnlV,EAAAnpI,KAAA5K,OACAutB,OACA2rc,EAAAzsa,KACAysa,EAAA76W,OACA66W,CACA,CA+CA,OA9CAhmV,EAAA+yW,EAAA,EACAhtd,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,IAAA8hd,EAAAzse,KACA+lf,EAAAp7d,EAAAvqB,MAAAJ,KAAAutB,KAAAvtB,KAAAysD,IACArsD,EAAA,IAAA0yd,EAAA5yE,MAAA0lG,EAAAG,EAAAtka,QAAA,SAAAv9D,GACA,OAAAA,EAAAm6F,KAAAouX,EAAApuX,KAAAykX,cAAA5+c,EAAAwkX,OACA,EAAO/9W,GAAAo7d,EAAA5kB,UAAA4kB,EAAA3kB;AACP,OAAAskB,EAAAM,YAAAr7d,EAAA3qB,KAAAutB,KAAAvtB,KAAAysD,GAAArsD,EACA,GACG,CACH64B,IAAA,SACAt2B,MAAA,WACA,WAAAkjf,EAAA7lf,KAAAutB,KAAAvtB,KAAAysD,GAAAzsD,KAAAq+G,KACA,GACG,CACHplF,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA9xJ,EAAA8xJ,EAAA2oO,UAAAhoZ,KAAAutB,KAAA,GACAk/B,EAAA4yH,EAAA2oO,UAAAhoZ,KAAAysD,IAAA;AACA,OAAAl/B,EAAAu6X,SAAAr7V,EAAAq7V,SAAAv6X,EAAA+sB,KAAAmS,EAAAnS,IAAA,KACA,IAAA2rc,EAAA14d,EAAA+sB,IAAAmS,EAAAnS,IAAAt6C,KAAAq+G,KACA,GACG,CACHplF,IAAA,QACAt2B,MAAA,SAAAglD,GACA,OAAAA,aAAAs+b,GAAAt+b,EAAA02D,KAAA01I,GAAA/zP,KAAAq+G,OAAAr+G,KAAAutB,MAAAo6B,EAAA8E,IAAAzsD,KAAAysD,IAAA9E,EAAAp6B,KAAA,IAAA04d,EAAAljf,KAAA8b,IAAA7e,KAAAutB,KAAAo6B,EAAAp6B,MAAAxqB,KAAA+b,IAAA9e,KAAAysD,GAAA9E,EAAA8E,IAAAzsD,KAAAq+G,MACA,IACA,GACG,CACHplF,IAAA,SACAt2B,MAAA,WACA,OACA6if,SAAA,aACAnnY,KAAAr+G,KAAAq+G,KAAA8rD,SACA58I,KAAAvtB,KAAAutB,KACAk/B,GAAAzsD,KAAAysD,GAEA,IACG,EACHxzB,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAAz3R,MAAA,iBAAAy3R,EAAAv4P,GAAA,UAAAzvB,WAAA;AACA,WAAAipd,EAAAjhM,EAAAz3R,KAAAy3R,EAAAv4P,GAAAw7D,EAAAo8W,aAAAr/K,EAAA3mM,MACA,KAEA4nY,CACA,CA3DA,CA2DCV;AACDA,EAAAhrB,OAAA,aAAA0rB;AACA,IAAAE,EAAA,SAAAC,GACA7zW,EAAA4zW,EAAAC;AACA,IAAAhU,EAAAx/V,EAAAuzW;AACA,SAAAA,EAAA7rc,EAAA+jE,GACA,IAAAyuX;AAKA,OAJA/5V,EAAA/yI,KAAAmmf,IACArZ,EAAAsF,EAAAxne,KAAA5K,OACAs6C,MACAwyb,EAAAzuX,OACAyuX,CACA,CA4CA,OA3CA55V,EAAAizW,EAAA,EACAltd,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,IAAAzG,EAAAyG,EAAAkuX,OAAA74Y,KAAAs6C;AACA,IAAAp2B,EAAA,OAAAwhe,EAAAzlY,KAAA;AACA,IAAA0rP,EAAAznV,EAAApgB,KAAAS,OAAA2f,EAAA41D,MAAA,KAAA95E,KAAAq+G,KAAA+lX,SAAAlgd,EAAAwkX;AACA,OAAAg9G,EAAAM,YAAAr7d,EAAA3qB,KAAAs6C,IAAAt6C,KAAAs6C,IAAA,MAAAw4a,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAo+U,GAAA,EAAAznV,EAAA+zX,OAAA,KACA,GACG,CACHh/W,IAAA,SACAt2B,MAAA,SAAAgoB,GACA,IAAAzG,EAAAyG,EAAAkuX,OAAA74Y,KAAAs6C;AACA,GAAAp2B,EAAA,CACA,IAAAmie,EAAArmf,KAAAq+G,KAAA+lX,SAAAlgd,EAAAwkX;AACA,GAAA29G,EAAA9lf,QAAA2jB,EAAAwkX,MAAAnoY,OAAA,CACA,QAAAD,EAAA,EAA0BA,EAAA4jB,EAAAwkX,MAAAnoY,OAAuBD,IAAA,IAAA4jB,EAAAwkX,MAAApoY,GAAAy9Y,QAAAsoG,GAAA,WAAAF,EAAAnmf,KAAAs6C,IAAAp2B,EAAAwkX,MAAApoY;AACjD,WAAA6lf,EAAAnmf,KAAAs6C,IAAAt6C,KAAAq+G,KACA,CACA,CACA,WAAAioY,EAAAtmf,KAAAs6C,IAAAt6C,KAAAq+G,KACA,GACG,CACHplF,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA/kI,EAAA+kI,EAAA2oO,UAAAhoZ,KAAAs6C,IAAA;AACA,OAAAA,EAAAisc,aAAA,SAAAJ,EAAA7rc,MAAAt6C,KAAAq+G,KACA,GACG,CACHplF,IAAA,SACAt2B,MAAA,WACA,OACA6if,SAAA,cACAlrc,IAAAt6C,KAAAs6C,IACA+jE,KAAAr+G,KAAAq+G,KAAA8rD,SAEA,IACG,EACHlxI,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAA1qQ,IAAA,UAAAtd,WAAA;AACA,WAAAmpd,EAAAnhM,EAAA1qQ,IAAA2tE,EAAAo8W,aAAAr/K,EAAA3mM,MACA,KAEA8nY,CACA,CAvDA,CAuDCZ;AACDA,EAAAhrB,OAAA,cAAA4rB;AACA,IAAAG,EAAA,SAAAE,GACAj0W,EAAA+zW,EAAAE;AACA,IAAAhU,EAAA5/V,EAAA0zW;AACA,SAAAA,EAAAhsc,EAAA+jE,GACA,IAAA8vX;AAKA,OAJAp7V,EAAA/yI,KAAAsmf,IACAnY,EAAAqE,EAAA5ne,KAAA5K,OACAs6C,MACA6zb,EAAA9vX,OACA8vX,CACA,CAsCA,OArCAj7V,EAAAozW,EAAA,EACArtd,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,IAAAzG,EAAAyG,EAAAkuX,OAAA74Y,KAAAs6C;AACA,IAAAp2B,EAAA,OAAAwhe,EAAAzlY,KAAA;AACA,IAAA0rP,EAAAznV,EAAApgB,KAAAS,OAAA2f,EAAA41D,MAAA,KAAA95E,KAAAq+G,KAAAykX,cAAA5+c,EAAAwkX;AACA,OAAAg9G,EAAAM,YAAAr7d,EAAA3qB,KAAAs6C,IAAAt6C,KAAAs6C,IAAA,MAAAw4a,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAo+U,GAAA,EAAAznV,EAAA+zX,OAAA,KACA,GACG,CACHh/W,IAAA,SACAt2B,MAAA,SAAAgoB,GACA,IAAAzG,EAAAyG,EAAAkuX,OAAA74Y,KAAAs6C;AACA,OAAAp2B,GAAAlkB,KAAAq+G,KAAA0/R,QAAA75X,EAAAwkX,OACA,IAAAy9G,EAAAnmf,KAAAs6C,IAAAt6C,KAAAq+G,MADAr+G,IAEA,GACG,CACHi5B,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA/kI,EAAA+kI,EAAA2oO,UAAAhoZ,KAAAs6C,IAAA;AACA,OAAAA,EAAAisc,aAAA,SAAAD,EAAAhsc,MAAAt6C,KAAAq+G,KACA,GACG,CACHplF,IAAA,SACAt2B,MAAA,WACA,OACA6if,SAAA,iBACAlrc,IAAAt6C,KAAAs6C,IACA+jE,KAAAr+G,KAAAq+G,KAAA8rD,SAEA,IACG,EACHlxI,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAA1qQ,IAAA,UAAAtd,WAAA;AACA,WAAAspd,EAAAthM,EAAA1qQ,IAAA2tE,EAAAo8W,aAAAr/K,EAAA3mM,MACA,KAEAioY,CACA,CAjDA,CAiDCf;AACDA,EAAAhrB,OAAA,iBAAA+rB;AACA,IAAAvxG,EAAA,SAAA0xG,GACAl0W,EAAAwiQ,EAAA0xG;AACA,IAAAC,EAAA9zW,EAAAmiQ;AACA,SAAAA,EAAAxnX,EAAAk/B,EAAArsD,GACA,IAAAque,EACAO,EAAAp8d,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AAOA,OANAmgI,EAAA/yI,KAAA+0Y,IACA05F,EAAAiY,EAAA97e,KAAA5K,OACAutB,OACAkhd,EAAAhib,KACAgib,EAAArue,QACAque,EAAAO,YACAP,CACA,CA0DA,OAzDAv7V,EAAA6hQ,EAAA,EACA97W,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,OAAA3qB,KAAAgve,WAAA2X,EAAAh8d,EAAA3qB,KAAAutB,KAAAvtB,KAAAysD,IAAAi5b,EAAAzlY,KAAA,6CACAylY,EAAAM,YAAAr7d,EAAA3qB,KAAAutB,KAAAvtB,KAAAysD,GAAAzsD,KAAAI,MACA,GACG,CACH64B,IAAA,SACAt2B,MAAA,WACA,WAAA2hf,EAAA,CAAAtkf,KAAAutB,KAAAvtB,KAAAysD,GAAAzsD,KAAAutB,KAAAvtB,KAAAI,MAAAie,MACA,GACG,CACH4a,IAAA,SACAt2B,MAAA,SAAAgoB,GACA,WAAAoqX,EAAA/0Y,KAAAutB,KAAAvtB,KAAAutB,KAAAvtB,KAAAI,MAAAie,KAAAsM,EAAAvqB,MAAAJ,KAAAutB,KAAAvtB,KAAAysD,IACA,GACG,CACHxzB,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA5yH,EAAA4yH,EAAA2oO,UAAAhoZ,KAAAysD,IAAA,GACAl/B,EAAAvtB,KAAAutB,MAAAvtB,KAAAysD,IAAAsoV,EAAA6xG,SAAA,EAAAn6b,EAAA4yH,EAAA2oO,UAAAhoZ,KAAAutB,KAAA;AACA,OAAAA,EAAAs5d,eAAAp6b,EAAAo6b,cAAA,KACA,IAAA9xG,EAAAxnX,EAAA+sB,IAAAv3C,KAAA+b,IAAAyO,EAAA+sB,IAAAmS,EAAAnS,KAAAt6C,KAAAI,MAAAJ,KAAAgve,UACA,GACG,CACH/1c,IAAA,QACAt2B,MAAA,SAAAglD,GACA,KAAAA,aAAAotV,IAAAptV,EAAAqnb,WAAAhve,KAAAgve,UAAA;AACA,GAAAhve,KAAAutB,KAAAvtB,KAAAI,MAAAie,MAAAspC,EAAAp6B,MAAAvtB,KAAAI,MAAAghe,SAAAz5a,EAAAvnD,MAAA+ge,UAGQ,IAAAx5a,EAAA8E,IAAAzsD,KAAAutB,MAAAvtB,KAAAI,MAAA+ge,WAAAx5a,EAAAvnD,MAAAghe,QAIR;AAHA,IAAA0lB,EAAA9mf,KAAAI,MAAAie,KAAAspC,EAAAvnD,MAAAie,MAAA,EAAAy0c,EAAA5yE,MAAA5iT,MAAA,IAAAw1X,EAAA5yE,MAAAv4V,EAAAvnD,MAAAqhF,QAAA6vH,OAAAtxM,KAAAI,MAAAqhF,SAAA95B,EAAAvnD,MAAA+ge,UAAAnhe,KAAAI,MAAAghe;AACA,WAAArsF,EAAAptV,EAAAp6B,KAAAvtB,KAAAysD,GAAAq6b,EAAA9mf,KAAAgve,UAGA,CAPA,IAAA5ue,EAAAJ,KAAAI,MAAAie,KAAAspC,EAAAvnD,MAAAie,MAAA,EAAAy0c,EAAA5yE,MAAA5iT,MAAA,IAAAw1X,EAAA5yE,MAAAlgZ,KAAAI,MAAAqhF,QAAA6vH,OAAA3pJ,EAAAvnD,MAAAqhF,SAAAzhF,KAAAI,MAAA+ge,UAAAx5a,EAAAvnD,MAAAghe;AACA,WAAArsF,EAAA/0Y,KAAAutB,KAAAvtB,KAAAysD,IAAA9E,EAAA8E,GAAA9E,EAAAp6B,MAAAntB,EAAAJ,KAAAgve,UAOA,GACG,CACH/1c,IAAA,SACAt2B,MAAA,WACA,IAAAqiT,EAAA,CACAwgM,SAAA,UACAj4d,KAAAvtB,KAAAutB,KACAk/B,GAAAzsD,KAAAysD;AAIA,OAFAzsD,KAAAI,MAAAie,OAAA2mS,EAAA5kT,MAAAJ,KAAAI,MAAA+pK,UACAnqK,KAAAgve,YAAAhqL,EAAAgqL,cACAhqL,CACA,IACG,EACH/rR,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAAz3R,MAAA,iBAAAy3R,EAAAv4P,GAAA,UAAAzvB,WAAA;AACA,WAAA+3W,EAAA/vF,EAAAz3R,KAAAy3R,EAAAv4P,GAAAqma,EAAA5yE,MAAA2I,SAAA5gS,EAAA+8L,EAAA5kT,SAAA4kT,EAAAgqL,UACA,KAEAj6F,CACA,CAxEA,CAwECwwG;AACDxwG,EAAA6xG,SAAA,EACArB,EAAAhrB,OAAA,UAAAxlF;AACA,IAAAC,EAAA,SAAA+xG,GACAx0W,EAAAyiQ,EAAA+xG;AACA,IAAAC,EAAAp0W,EAAAoiQ;AACA,SAAAA,EAAAznX,EAAAk/B,EAAAw6b,EAAAC,EAAA9mf,EAAAg6Y,GACA,IAAA+sG,EACAnY,EAAAp8d,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AAUA,OATAmgI,EAAA/yI,KAAAg1Y,IACAmyG,EAAAH,EAAAp8e,KAAA5K,OACAutB,OACA45d,EAAA16b,KACA06b,EAAAF,UACAE,EAAAD,QACAC,EAAA/mf,QACA+mf,EAAA/sG,SACA+sG,EAAAnY,YACAmY,CACA,CAsDA,OArDAj0W,EAAA8hQ,EAAA,EACA/7W,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,GAAA3qB,KAAAgve,YAAA2X,EAAAh8d,EAAA3qB,KAAAutB,KAAAvtB,KAAAinf,UAAAN,EAAAh8d,EAAA3qB,KAAAknf,MAAAlnf,KAAAysD,KAAA,OAAAi5b,EAAAzlY,KAAA;AACA,IAAAmnY,EAAAz8d,EAAAvqB,MAAAJ,KAAAinf,QAAAjnf,KAAAknf;AACA,GAAAE,EAAAjmB,WAAAimB,EAAAhmB,QAAA,OAAAskB,EAAAzlY,KAAA;AACA,IAAA8/D,EAAA//K,KAAAI,MAAAw3F,SAAA53F,KAAAo6Y,OAAAgtG,EAAA3la;AACA,OAAAs+F,EACA2lU,EAAAM,YAAAr7d,EAAA3qB,KAAAutB,KAAAvtB,KAAAysD,GAAAszH,GADA2lU,EAAAzlY,KAAA,8BAEA,GACG,CACHhnF,IAAA,SACAt2B,MAAA,WACA,WAAA2hf,EAAA,CAAAtkf,KAAAutB,KAAAvtB,KAAAinf,QAAAjnf,KAAAutB,KAAAvtB,KAAAo6Y,OAAAp6Y,KAAAknf,MAAAlnf,KAAAysD,GAAAzsD,KAAAknf,MAAAlnf,KAAAI,MAAAie,KAAAre,KAAAo6Y,QACA,GACG,CACHnhX,IAAA,SACAt2B,MAAA,SAAAgoB,GACA,IAAAy8d,EAAApnf,KAAAknf,MAAAlnf,KAAAinf;AACA,WAAAjyG,EAAAh1Y,KAAAutB,KAAAvtB,KAAAutB,KAAAvtB,KAAAI,MAAAie,KAAA+oe,EAAApnf,KAAAutB,KAAAvtB,KAAAo6Y,OAAAp6Y,KAAAutB,KAAAvtB,KAAAo6Y,OAAAgtG,EAAAz8d,EAAAvqB,MAAAJ,KAAAutB,KAAAvtB,KAAAysD,IAAA46b,cAAArnf,KAAAinf,QAAAjnf,KAAAutB,KAAAvtB,KAAAknf,MAAAlnf,KAAAutB,MAAAvtB,KAAAinf,QAAAjnf,KAAAutB,KAAAvtB,KAAAgve,UACA,GACG,CACH/1c,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA9xJ,EAAA8xJ,EAAA2oO,UAAAhoZ,KAAAutB,KAAA,GACAk/B,EAAA4yH,EAAA2oO,UAAAhoZ,KAAAysD,IAAA,GACAw6b,EAAAjnf,KAAAutB,MAAAvtB,KAAAinf,QAAA15d,EAAA+sB,IAAA+kI,EAAAz7J,IAAA5jB,KAAAinf,SAAA,GACAC,EAAAlnf,KAAAysD,IAAAzsD,KAAAknf,MAAAz6b,EAAAnS,IAAA+kI,EAAAz7J,IAAA5jB,KAAAknf,MAAA;AACA,OAAA35d,EAAAs5d,eAAAp6b,EAAAo6b,eAAAI,EAAA15d,EAAA+sB,KAAA4sc,EAAAz6b,EAAAnS,IAAA,KACA,IAAA06V,EAAAznX,EAAA+sB,IAAAmS,EAAAnS,IAAA2sc,EAAAC,EAAAlnf,KAAAI,MAAAJ,KAAAo6Y,OAAAp6Y,KAAAgve,UACA,GACG,CACH/1c,IAAA,SACAt2B,MAAA,WACA,IAAAqiT,EAAA,CACAwgM,SAAA,gBACAj4d,KAAAvtB,KAAAutB,KACAk/B,GAAAzsD,KAAAysD,GACAw6b,QAAAjnf,KAAAinf,QACAC,MAAAlnf,KAAAknf,MACA9sG,OAAAp6Y,KAAAo6Y;AAIA,OAFAp6Y,KAAAI,MAAAie,OAAA2mS,EAAA5kT,MAAAJ,KAAAI,MAAA+pK,UACAnqK,KAAAgve,YAAAhqL,EAAAgqL,cACAhqL,CACA,IACG,EACH/rR,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAAz3R,MAAA,iBAAAy3R,EAAAv4P,IAAA,iBAAAu4P,EAAAiiM,SAAA,iBAAAjiM,EAAAkiM,OAAA,iBAAAliM,EAAAo1F,OAAA,UAAAp9W,WAAA;AACA,WAAAg4W,EAAAhwF,EAAAz3R,KAAAy3R,EAAAv4P,GAAAu4P,EAAAiiM,QAAAjiM,EAAAkiM,MAAAp0B,EAAA5yE,MAAA2I,SAAA5gS,EAAA+8L,EAAA5kT,OAAA4kT,EAAAo1F,SAAAp1F,EAAAgqL,UACA,KAEAh6F,CACA,CAvEA,CAuECuwG;AAED,SAAAoB,EAAAh8d,EAAA4C,EAAAk/B,GAIA,IAHA,IAAA29U,EAAAz/W,EAAAqqD,QAAAznD,GACAs0c,EAAAp1a,EAAAl/B,EACAqpX,EAAAxM,EAAAwM,MACAirF,EAAA,GAAAjrF,EAAA,GAAAxM,EAAAkV,WAAA1I,IAAAxM,EAAAlmX,KAAA0yX,GAAAjE,YACAiE,IACAirF;AAEA,GAAAA,EAAA,EAEA,IADA,IAAA5oY,EAAAmxS,EAAAlmX,KAAA0yX,GAAAw/E,WAAAhsF,EAAAkV,WAAA1I,IACAirF,EAAA,IACA,IAAA5oY,KAAAg/S,OAAA;AACAh/S,IAAAxyF,WACAo7d,GACA,CAEA,QACA,CAyEA,SAAAylB,EAAAroc,EAAA3E,EAAAitc,GAMA,IALA,IAAA1qd,EAAAjqB,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA20e,EAAAvnG,aACAwnG,IAAA50e,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,KAAAA,UAAA,GACAsR,EAAA+6B,EAAAt0B,IAAAkuX,OAAAv+V,GACAmtc,EAAA,GACA/gV,EAAApsH,EAAA,EACAh6C,EAAA,EAAkBA,EAAA4jB,EAAAyuX,WAAqBryY,IAAA,CACvC,IAAAwmK,EAAA5iJ,EAAA4iJ,MAAAxmK,GACA6e,EAAAunJ,EAAAI,EAAA4rO,SACAhkF,EAAA7xR,EAAAsrX,UAAArhP,EAAAhjK;AACA,GAAA4qT,EAEM,CACN7xR,EAAA6xR;AACA,QAAA/oO,EAAA,EAAsBA,EAAAmhF,EAAA4hO,MAAAnoY,OAAwBolF,IAAA4ha,EAAArpG,eAAAp3O,EAAA4hO,MAAA/iT,GAAA7hF,OAAAm7C,EAAA4tF,KAAA,IAAAo5W,EAAAv/U,EAAAvnJ,EAAA2nJ,EAAA4hO,MAAA/iT;AAC9C,GAAA6ha,GAAA1gV,EAAA6jO,QAAA,OAAA48G,EAAA3+G,WAIA,IAHA,IAAAz+X,OAAA,EACAu9e,EAAA,YACAtnf,OAAA,EACA+J,EAAAu9e,EAAAjnf,KAAAqmK,EAAAzjK,OACAjD,MAAA,IAAA0yd,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAg6d,EAAAt/X,OAAA5kH,KAAA,IAAAkkf,EAAAI,aAAA7gV,EAAA4hO,SAAA,MACA++G,EAAA7/e,KAAA,IAAAmtY,EAAAruO,EAAAv8J,EAAApB,MAAA29J,EAAAv8J,EAAApB,MAAAoB,EAAA,GAAA5J,OAAAH,GAGA,MAbAqnf,EAAA7/e,KAAA,IAAAmtY,EAAAruO,EAAAvnJ,EAAA2zc,EAAA5yE,MAAA5iT;AAcAopE,EAAAvnJ,CACA,CACA,IAAA0d,EAAAo4b,SAAA,CACA,IAAAvtD,EAAA7qY,EAAA2qc,WAAA1U,EAAA90K,SAAA1gN;AACAr+C,EAAAx+B,QAAAimJ,IAAA,IAAAosT,EAAA5yE,MAAAwnB,EAAA,KACA,CACA,QAAAxoY,EAAAuod,EAAAlnf,OAAA,EAAsC2+B,GAAA,EAASA,IAAA+f,EAAA4tF,KAAA46W,EAAAvod,GAC/C,CACA,SAAA0od,EAAA1je,EAAAhF,EAAAC,GACA,UAAAD,GAAAgF,EAAA6wc,WAAA71c,EAAAgF,EAAAyuX,eAAAxzX,GAAA+E,EAAAyuX,YAAAzuX,EAAA6wc,WAAA,EAAA51c,GACA,CAsDA,SAAA0oe,EAAA/jf,GACA,OACAA,OACAg2E,MAAA,KAEA,CA2DA,SAAAgua,EAAA7oc,EAAA/6B,EAAAo2B,EAAAm6a,GACAvwc,EAAA1J,QAAA,SAAAssJ,EAAA9oJ,GACA,GAAA8oJ,EAAA6jO,OAGA,IAFA,IAAAxgY,EACAu9e,EAAA,YACAv9e,EAAAu9e,EAAAjnf,KAAAqmK,EAAAzjK,OAAA,CACA,IAAA6b,EAAA+/B,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,EAAA,EAAAt8B,EAAA7T,EAAApB;AACAk2C,EAAAmsV,YAAAlsX,IAAA,EAAAgF,EAAApgB,KAAAmkH,OAAA4gR,qBAAAtkY,SACA,CAEA,EACA,CACA,SAAAwjf,EAAA9oc,EAAA/6B,EAAAo2B,EAAAm6a,GACAvwc,EAAA1J,QAAA,SAAAssJ,EAAA9oJ,GACA,GAAA8oJ,EAAAhjK,MAAAgjK,EAAAhjK,KAAAmkH,OAAA4gR,qBAAA,CACA,IAAA3pX,EAAA+/B,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,EAAA,EAAAt8B;AACAihC,EAAAmsV,YAAAlsX,IAAA,EAAAgF,EAAApgB,KAAAmkH,OAAA5kH,KAAA,MACA,CACA,EACA,CAmEA,SAAA4yd,EAAAn1d,EAAAma,GACA,SAAAna,IAAAma,GAAAna,EAAAm3Y,SAdA,SAAAn3Y,EAAAma,GACAA,EAAAwmE,QAAApjE,MAAAvd,EAAAgD,KAAAgxd,kBAAA75c,EAAAnX;AAGA,IAFA,IAAA+4B,EAAA/7B,EAAA44Y,eAAA54Y,EAAA6xY,YACA9J,EAAA/nY,EAAAgD,KAAAmkH,OAAA4gR,qBACAvoY,EAAA,EAAkBA,EAAA2a,EAAA03X,WAAkBryY,IAAA,CACpC,IAAAwmK,EAAA7rJ,EAAA6rJ,MAAAxmK,GACAwD,EAAAgjK,EAAAhjK,MAAA+kY,EAAA/nY,EAAAgD,KAAAmkH,OAAAk4F,MAAA98M,KAAAyjK,EAAAhjK;AAEA,KADA+4B,IAAAsrX,UAAArkZ,IACA;AACA,IAAAhD,EAAAgD,KAAAoge,YAAAp9T,EAAA4hO,OAAA,QACA,CACA,OAAA7rW,EAAAo4b,QACA,CAZA,CAcAn0d,EAAAma,GACA,CAiDA,SAAA+se,EAAAr9d,EAAA2vB,EAAA88C,GACA,IAAAi7S,EAAA1nX,EAAAqqD,QAAA16B;AACA,GAAA+3V,EAAAvqX,OAAA03X,eAAAnN,EAAAtpY,QAAAspY,EAAAtpY,QAAAquF,GAAA,OAAA98C;AACA,MAAA+3V,EAAA7H,aAAA,QAAA7qY,EAAA0yY,EAAAuE,MAAA,EAA2Dj3Y,GAAA,EAAQA,IAAA,CACnE,IAAAoJ,EAAAspY,EAAAtpY,MAAApJ;AACA,GAAA0yY,EAAAnuX,KAAAvkB,GAAA6/Y,eAAAz2Y,IAAAquF,GAAA,OAAAi7S,EAAAr1N,OAAAr9K,EAAA;AACA,GAAAoJ,EAAA,aACA,CACA,GAAAspY,EAAA7H,cAAA6H,EAAAvqX,OAAA25D,QAAApjE,KAAA,QAAA4pe,EAAA51G,EAAAuE,MAAA,EAAoFqxG,GAAA,EAAUA,IAAA,CAC9F,IAAAC,EAAA71G,EAAAiN,WAAA2oG;AACA,GAAA51G,EAAAnuX,KAAA+je,GAAAzoG,eAAA0oG,IAAA9wZ,GAAA,OAAAi7S,EAAAp1N,MAAAgrU,EAAA;AACA,GAAAC,EAAA71G,EAAAnuX,KAAA+je,GAAAt1G,WAAA,WACA,CACA,WACA,CAuBA,SAAA4gF,EAAA5oc,EAAA4C,GACA,IAAAk/B,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA2a,EACAntB,EAAAwS,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAkgd,EAAA5yE,MAAA5iT;AACA,GAAA/vE,GAAAk/B,IAAArsD,EAAAie,KAAA;AACA,IAAA+rX,EAAAz/W,EAAAqqD,QAAAznD,GACAwkX,EAAApnX,EAAAqqD,QAAAvoB;AACA,OAAA07b,EAAA/9G,EAAA2H,EAAA3xY,GAAA,IAAA20Y,EAAAxnX,EAAAk/B,EAAArsD,GACA,IAAAgof,EAAAh+G,EAAA2H,EAAA3xY,GAAAmob,KACA,CACA,SAAA4/D,EAAA/9G,EAAA2H,EAAA3xY,GACA,OAAAA,EAAA+ge,YAAA/ge,EAAAghe,SAAAh3F,EAAAlrX,SAAA6yX,EAAA7yX,SAAAkrX,EAAAtiX,OAAAitc,WAAA3qF,EAAArhY,QAAAgpY,EAAAhpY,QAAA3I,EAAAqhF,QACA,CA7aA8ja,EAAAhrB,OAAA,gBAAAvlF;AA8aA,IAAAozG,EAAA,WACA,SAAAA,EAAAh+G,EAAA2H,EAAAs2G,GACAt1W,EAAA/yI,KAAAoof,GACApof,KAAAoqY,QACApqY,KAAA+xY,MACA/xY,KAAAqof,WACArof,KAAAsof,SAAA,GACAtof,KAAAg/a,OAAA8zC,EAAA90K,SAAA1gN;AACA,QAAAh9F,EAAA,EAAoBA,GAAA8pY,EAAAwM,MAAkBt2Y,IAAA,CACtC,IAAA4jB,EAAAkmX,EAAAlmX,KAAA5jB;AACAN,KAAAsof,SAAA1gf,KAAA,CACA9D,KAAAogB,EAAApgB,KACA+4B,MAAA3Y,EAAAw1X,eAAAtP,EAAAkV,WAAAh/Y,KAEA,CACA,QAAAs2d,EAAAxsF,EAAAwM,MAAgCggF,EAAA,EAASA,IAAA52d,KAAAg/a,OAAA8zC,EAAA90K,SAAAzwR,KAAA68W,EAAAlmX,KAAA0yc,GAAA/+T,KAAA73J,KAAAg/a,QACzC,CAgOA,OA/NA9rS,EAAAk1W,EAAA,EACAnvd,IAAA,QACA3M,IAAA,WACA,OAAAtsB,KAAAsof,SAAA/nf,OAAA,CACA,GACG,CACH04B,IAAA,MACAt2B,MAAA,WACA,KAAA3C,KAAAqof,SAAAhqe,MAAA,CACA,IAAAkqa,EAAAvob,KAAAuof;AACAhgE,EAAAvob,KAAAwof,WAAAjgE,GAAsCvob,KAAAyof,YAAAzof,KAAA0of,UACtC,CACA,IAAAC,EAAA3of,KAAA4of,iBACAC,EAAA7of,KAAAg/a,OAAA3ga,KAAAre,KAAA42Y,MAAA52Y,KAAAoqY,MAAAwM,MACAxM,EAAApqY,KAAAoqY,MACA2H,EAAA/xY,KAAAkN,MAAAy7e,EAAA,EAAA3of,KAAA+xY,IAAA3H,EAAAz/W,IAAAqqD,QAAA2za;AACA,IAAA52G,EAAA;AAIA,IAHA,IAAAtwT,EAAAzhF,KAAAg/a,OACAmiD,EAAA/2F,EAAAwM,MACAwqF,EAAArvF,EAAA6E,MACAuqF,GAAAC,GAAA,GAAA3/Y,EAAAkxT,YACAlxT,IAAAh7E,WAAAg7E,QACA0/Y,IACAC;AAEA,IAAAhhe,EAAA,IAAA0yd,EAAA5yE,MAAAz+T,EAAA0/Y,EAAAC;AACA,OAAAunB,GAAA,MAAA3zG,EAAA5K,EAAA9vV,IAAAquc,EAAA3of,KAAA+xY,IAAAz3V,IAAAt6C,KAAA+xY,IAAA5yX,MAAA/e,EAAAyof,GACAzof,EAAAie,MAAA+rX,EAAA9vV,KAAAt6C,KAAA+xY,IAAAz3V,IAAA,IAAAy6V,EAAA3K,EAAA9vV,IAAAy3V,EAAAz3V,IAAAl6C,GACA,IACA,GACG,CACH64B,IAAA,eACAt2B,MAAA,WAEA,IADA,IAAAmmf,EAAA9of,KAAAqof,SAAAlnB,UACAz6T,EAAA1mK,KAAAqof,SAAA5ma,QAAA9hF,EAAA,EAAAyhe,EAAAphe,KAAAqof,SAAAjnB,QAAoFzhe,EAAAmpf,EAAgBnpf,IAAA,CACpG,IAAAukB,EAAAwiJ,EAAAjgK;AAEA,GADAigK,EAAAisO,WAAA,IAAAyuF,EAAA,GACAl9c,EAAApgB,KAAAimW,KAAAg/B,WAAAq4F,GAAAzhe,EAAA,CACAmpf,EAAAnpf;AACA,KACA,CACA+mK,EAAAxiJ,EAAAu9D,OACA,CACA,QAAAsna,EAAA,EAAyBA,GAAA,EAAWA,IACpC,QAAAC,EAAA,GAAAD,EAAAD,EAAA9of,KAAAqof,SAAAlnB,UAAgF6nB,GAAA,EAAiBA,IAUjG,IATA,IACAlhe,EAAA,KAOAiqB,GANAi3c,GACAlhe,EAAAmhe,EAAAjpf,KAAAqof,SAAA5ma,QAAAuna,EAAA,GAAAvif,YACAg7E,QAEAzhF,KAAAqof,SAAA5ma,SAEAh7E,WACAyif,EAAAlpf,KAAA42Y,MAA+CsyG,GAAA,EAAoBA,IAAA,CACnE,IAAAC,EAAAnpf,KAAAsof,SAAAY,GACAplf,EAAAqlf,EAAArlf,KACA+4B,EAAAssd,EAAAtsd,MACAu4b,OAAA,EACA3hT,EAAA;AACA,MAAAs1U,IAAAh3c,EAAAlV,EAAAsrX,UAAAp2W,EAAAjuC,QAAA2vK,EAAA52I,EAAA2qc,WAAA1U,EAAA90K,SAAAzwR,KAAAwkB,QAAAjqB,GAAAhkB,EAAAgxd,kBAAAhtc,EAAAhkB,OAAA,OACAklf,aACAE,gBACAphe,SACA2rJ;AACc,MAAAs1U,GAAAh3c,IAAAqjb,EAAAv4b,EAAA6uX,aAAA35W,EAAAjuC,OAAA,OACdklf,aACAE,gBACAphe,SACAq/P,KAAAiuM;AAEA,GAAAttc,GAAA+U,EAAAsrX,UAAArgY,EAAAhkB,MAAA,KACA,CAGA,GACG,CACHm1B,IAAA,WACAt2B,MAAA,WACA,IAAAymf,EAAAppf,KAAAqof,SACA5ma,EAAA2na,EAAA3na,QACA0/Y,EAAAioB,EAAAjoB,UACAC,EAAAgoB,EAAAhoB,QACA/mM,EAAA4uN,EAAAxna,EAAA0/Y;AACA,SAAA9mM,EAAAs4G,YAAAt4G,EAAA5zR,WAAAwxY,SACAj4Y,KAAAqof,SAAA,IAAAv1B,EAAA5yE,MAAAz+T,EAAA0/Y,EAAA,EAAAp+d,KAAA+b,IAAAsid,EAAA/mM,EAAAh8Q,KAAA8id,GAAA1/Y,EAAApjE,KAAA+id,EAAAD,EAAA,MACA,GACA,GACG,CACHloc,IAAA,WACAt2B,MAAA,WACA,IAAA0mf,EAAArpf,KAAAqof,SACA5ma,EAAA4na,EAAA5na,QACA0/Y,EAAAkoB,EAAAloB,UACAC,EAAAioB,EAAAjoB,QACA/mM,EAAA4uN,EAAAxna,EAAA0/Y;AACA,GAAA9mM,EAAAs4G,YAAA,GAAAwuF,EAAA,GACA,IAAAmoB,EAAA7na,EAAApjE,KAAA8id,KAAA9mM,EAAAh8Q;AACAre,KAAAqof,SAAA,IAAAv1B,EAAA5yE,MAAAqpG,EAAA9na,EAAA0/Y,EAAA,KAAAA,EAAA,EAAAmoB,EAAAnoB,EAAA,EAAAC,EACA,MACAphe,KAAAqof,SAAA,IAAAv1B,EAAA5yE,MAAAqpG,EAAA9na,EAAA0/Y,EAAA,GAAAA,EAAAC,EAEA,GACG,CACHnoc,IAAA,aACAt2B,MAAA,SAAA6e,GAMA,IALA,IAAAwne,EAAAxne,EAAAwne,WACAE,EAAA1ne,EAAA0ne,cACAphe,EAAAtG,EAAAsG,OACA2rJ,EAAAjyJ,EAAAiyJ,OACA0zG,EAAA3lQ,EAAA2lQ,KACAnnR,KAAA42Y,MAAAsyG,GAAAlpf,KAAAwpf;AACA,GAAAriO,EAAA,QAAA7mR,EAAA,EAAgCA,EAAA6mR,EAAA5mR,OAAiBD,IAAAN,KAAAypf,iBAAAtiO,EAAA7mR;AACjD,IAAAF,EAAAJ,KAAAqof,SACAv+G,EAAAhiX,IAAA25D,QAAArhF,EAAAqhF,QACA0/Y,EAAA/ge,EAAA+ge,UAAA6nB,EACAU,EAAA,EACA9xc,EAAA,GACA+xc,EAAA3pf,KAAAsof,SAAAY,GACArsd,EAAA8sd,EAAA9sd,MACA/4B,EAAA6lf,EAAA7lf;AACA,GAAA2vK,EAAA,CACA,QAAAyiT,EAAA,EAA0BA,EAAAziT,EAAAk/N,WAAyBujF,IAAAt+a,EAAAhwC,KAAA6rK,EAAA3M,MAAAovT;AACnDr5b,IAAAmnc,cAAAvwT,EACA,CAEA,IADA,IAAAm2U,EAAA9/G,EAAAzrX,KAAA2qe,GAAA5of,EAAAqhF,QAAApjE,KAAAje,EAAAghe,SACAsoB,EAAA5/G,EAAA6I,YAAA,CACA,IAAA15S,EAAA6wS,EAAAhjO,MAAA4iV,GACAlke,EAAAqX,EAAAsrX,UAAAlvT,EAAAn1F;AACA,IAAA0hB,EAAA,SACAkke,EACA,MAAAvoB,GAAAloY,EAAAxX,QAAApjE,QACAwe,EAAArX,EACAoyB,EAAAhwC,KAAAiif,EAAA5wZ,EAAAolB,KAAAv6G,EAAA6jf,aAAA1uZ,EAAAyvS,QAAA,GAAAghH,EAAAvoB,EAAA,EAAAuoB,GAAA5/G,EAAA6I,WAAAi3G,GAAA,IAEA,CACA,IAAAllB,EAAAglB,GAAA5/G,EAAA6I;AACA+xF,IAAAklB,GAAA,GACA5pf,KAAAg/a,OAAA8qE,EAAA9pf,KAAAg/a,OAAAkqE,EAAAp2B,EAAA90K,SAAAzwR,KAAAqqB,IACA53C,KAAAsof,SAAAY,GAAArsd,QACA6nc,GAAAklB,EAAA,GAAA9he,KAAAhkB,MAAA9D,KAAAsof,SAAAtof,KAAA42Y,OAAA9yY,MAAA9D,KAAAsof,SAAA/nf,OAAA,GAAAP,KAAAwpf;AACA,QAAAnzB,EAAA,EAAA3vT,EAAAojO,EAAwCusF,EAAAuzB,EAAoBvzB,IAAA,CAC5D,IAAAnyc,EAAAwiJ,EAAAk6G;AACA5gR,KAAAsof,SAAA1gf,KAAA,CACA9D,KAAAogB,EAAApgB,KACA+4B,MAAA3Y,EAAAw1X,eAAAx1X,EAAAyuX,cAEAjsO,EAAAxiJ,EAAAu9D,OACA,CACAzhF,KAAAqof,SAAA3jB,EAAA,GAAAskB,EAAAl2B,EAAA5yE,MAAA5iT,MAAA,IAAAw1X,EAAA5yE,MAAAqpG,EAAAnpf,EAAAqhF,QAAAuna,EAAA,KAAAA,EAAA,EAAAY,EAAA,EAAAxpf,EAAAghe,QAAA4nB,EAAA,OAAAl2B,EAAA5yE,MAAAqpG,EAAAnpf,EAAAqhF,QAAAuna,EAAAU,GAAAtpf,EAAA+ge,UAAA/ge,EAAAghe,QACA,GACG,CACHnoc,IAAA,iBACAt2B,MAAA,WACA,IAAA3C,KAAA+xY,IAAAjqX,OAAA2lX,YAAA;AACA,IACAr5B,EADAvmW,EAAA7N,KAAAsof,SAAAtof,KAAA42Y;AAEA,IAAA/oY,EAAA/J,KAAA2pY,cAAAs8G,EAAA/pf,KAAA+xY,IAAA/xY,KAAA+xY,IAAA6E,MAAA/oY,EAAA/J,KAAA+J,EAAAgvB,WAAA78B,KAAA+xY,IAAA6E,OAAA52Y,KAAA42Y,QAAAxiC,EAAAp0W,KAAAgqf,eAAAhqf,KAAA+xY,OAAA39B,EAAAwiC,OAAA52Y,KAAA42Y,MAAA;AAGA,IAFA,IAAAA,EAAA52Y,KAAA+xY,IAAA6E,MACA35N,EAAAj9K,KAAA+xY,IAAA90N,MAAA25N,GACAA,EAAA,GAAA35N,GAAAj9K,KAAA+xY,IAAA5yX,MAAAy3X,MAAA35N;AACA,OAAAA,CACA,GACG,CACHhkJ,IAAA,iBACAt2B,MAAA,SAAAovY,GACA+hF,EAAA,QAAAxzd,EAAAyC,KAAA8b,IAAA7e,KAAA42Y,MAAA7E,EAAA6E,OAA0Dt2Y,GAAA,EAAQA,IAAA,CAClE,IAAA2pf,EAAAjqf,KAAAsof,SAAAhof,GACAu8B,EAAAotd,EAAAptd,MACA/4B,EAAAmmf,EAAAnmf,KACAomf,EAAA5pf,EAAAyxY,EAAA6E,OAAA7E,EAAA5yX,IAAA7e,EAAA,IAAAyxY,EAAAz3V,KAAAy3V,EAAA6E,OAAAt2Y,EAAA,IACAiob,EAAAwhE,EAAAh4G,EAAAzxY,EAAAwD,EAAA+4B,EAAAqtd;AACA,GAAA3hE,EAAA,CACA,QAAA5ob,EAAAW,EAAA,EAA4BX,GAAA,EAAQA,IAAA,CACpC,IAAAwqf,EAAAnqf,KAAAsof,SAAA3of,GACAo5F,EAAAoxZ,EAAAttd,MAEArX,EAAAuke,EAAAh4G,EAAApyY,EADAwqf,EAAArmf,KACAi1F;AACA,IAAAvzE,KAAAmtX,WAAA,SAAAmhF,CACA,CACA,OACAl9E,MAAAt2Y,EACAiob,MACArsL,KAAAguP,EAAAn4G,EAAApnX,IAAAqqD,QAAA+8T,EAAA90N,MAAA38K,EAAA,IAAAyxY,EAXA,CAaA,CACA,GACG,CACH94W,IAAA,QACAt2B,MAAA,SAAAovY,GACA,IAAA7kY,EAAAlN,KAAAgqf,eAAAj4G;AACA,IAAA7kY,EAAA;AACA,KAAAlN,KAAA42Y,MAAA1pY,EAAA0pY,OAAA52Y,KAAAwpf;AACAt8e,EAAAq7a,IAAA51C,aAAA3yY,KAAAg/a,OAAA8qE,EAAA9pf,KAAAg/a,OAAA9xa,EAAA0pY,MAAA1pY,EAAAq7a,MACAx2C,EAAA7kY,EAAAgvP;AACA,QAAAv8P,EAAAuN,EAAA0pY,MAAA,EAAoCj3Y,GAAAoyY,EAAA6E,MAAgBj3Y,IAAA,CACpD,IAAAukB,EAAA6tX,EAAA7tX,KAAAvkB,GACAi4C,EAAA1zB,EAAApgB,KAAAk8Y,aAAAwnF,WAAAtjd,EAAAu9D,WAAAswT,EAAAhpY,MAAApJ;AACAK,KAAAypf,iBAAAvle,EAAApgB,KAAAogB,EAAA41D,MAAAliC,EACA,CACA,OAAAm6V,CACA,GACG,CACH94W,IAAA,mBACAt2B,MAAA,SAAAmB,GACA,IAAAg2E,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA6uE,EAAA7uE,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACA5jB,EAAA7N,KAAAsof,SAAAtof,KAAA42Y;AACA/oY,EAAAgvB,MAAAhvB,EAAAgvB,MAAAsrX,UAAArkZ,GACA9D,KAAAg/a,OAAA8qE,EAAA9pf,KAAAg/a,OAAAh/a,KAAA42Y,MAAAk8E,EAAA90K,SAAAzwR,KAAAzpB,EAAAS,OAAAu1E,EAAA2H,KACAzhF,KAAAsof,SAAA1gf,KAAA,CACA9D,OACA+4B,MAAA/4B,EAAAk8Y,cAEA,GACG,CACH/mX,IAAA,oBACAt2B,MAAA,WACA,IACAi1C,EADA53C,KAAAsof,SAAA32V,MACA90H,MAAA2qc,WAAA1U,EAAA90K,SAAA1gN;AACA1lD,EAAA+6V,aAAA3yY,KAAAg/a,OAAA8qE,EAAA9pf,KAAAg/a,OAAAh/a,KAAAsof,SAAA/nf,OAAAq3C,GACA,KAEAwwc,CACA,CAjPA;AAkPA,SAAAmB,EAAAz/G,EAAA8M,EAAAz2P,GACA,UAAAy2P,EAAA9M,EAAAsgH,WAAAjqW,EAAA2pP,EAAA6I,YACA7I,EAAA83F,aAAA,EAAA93F,EAAArjY,WAAAoxJ,KAAA0xV,EAAAz/G,EAAArjY,WAAAg7E,QAAAm1T,EAAA,EAAAz2P,IACA,CACA,SAAA2pW,EAAAhgH,EAAA8M,EAAAn1T,GACA,UAAAm1T,EAAA9M,EAAAx4L,OAAA7vH,GACAqoT,EAAA83F,aAAA93F,EAAA6I,WAAA,EAAA7I,EAAAlpH,UAAA/oH,KAAAiyV,EAAAhgH,EAAAlpH,UAAAn/L,QAAAm1T,EAAA,EAAAn1T,IACA,CACA,SAAAwna,EAAAn/G,EAAA8M,GACA,QAAAt2Y,EAAA,EAAkBA,EAAAs2Y,EAAWt2Y,IAAAwpY,IAAArjY,WAAAg7E;AAC7B,OAAAqoT,CACA,CACA,SAAA+/G,EAAA3le,EAAAi9c,EAAAC,GACA,GAAAD,GAAA,SAAAj9c;AACA,IAAA82c,EAAA92c,EAAAu9D;AAMA,OALA0/Y,EAAA,IAAAnG,IAAA4G,aAAA,EAAAioB,EAAA7uB,EAAAv0d,WAAA06d,EAAA,KAAAnG,EAAAroF,WAAAyuF,EAAA,OACAD,EAAA,IACAnG,EAAA92c,EAAApgB,KAAAk8Y,aAAAwnF,WAAAxM,GAAA1pR,OAAA0pR,GACAoG,GAAA,IAAApG,IAAA1pR,OAAAptL,EAAApgB,KAAAk8Y,aAAAgkF,cAAAhJ,GAAAwM,WAAA1U,EAAA90K,SAAA1gN,aAEAp5E,EAAA2zI,KAAAmjU,EACA,CACA,SAAA+uB,EAAAh4G,EAAA6E,EAAA9yY,EAAA+4B,EAAAwxC,GACA,IAAAnqD,EAAA6tX,EAAA7tX,KAAA0yX,GACA7tY,EAAAslE,EAAA0jU,EAAAuN,WAAA1I,GAAA7E,EAAAhpY,MAAA6tY;AACA,GAAA7tY,GAAAmb,EAAAyuX,aAAA7uY,EAAAgxd,kBAAA5wc,EAAApgB,MAAA;AACA,IAAAykb,EAAA1rZ,EAAA2qc,WAAAtjd,EAAAu9D,WAAA14E;AACA,OAAAw/a,IAEA,SAAAzkb,EAAAgmY,EAAA5qX,GACA,QAAA5e,EAAA4e,EAAsB5e,EAAAwpY,EAAA6I,WAAyBryY,IAAA,IAAAwD,EAAAoge,YAAAp6F,EAAAhjO,MAAAxmK,GAAAooY,OAAA;AAC/C,QACA,CAHA,CAFA5kY,EAAAogB,EAAAu9D,QAAA14E,GAAAw/a,EAAA,IACA,CAKA,SAAA8hE,EAAAvmf,GACA,OAAAA,EAAAimW,KAAA++B,UAAAhlY,EAAAimW,KAAAugJ,kBACA,CAuDA,SAAAC,EAAAzgH,EAAA8M,EAAA4zG,EAAAC,EAAA3ie,GACA,GAAA8uX,EAAA4zG,EAAA,CACA,IAAAz4c,EAAA+3V,EAAArjY;AACAqjY,IAAA83F,aAAA,EAAA7vb,EAAA8lH,KAAA0yV,EAAAx4c,EAAA0vC,QAAAm1T,EAAA,EAAA4zG,EAAAC,EAAA14c,IACA,CACA,GAAA6kW,EAAA6zG,EAAA,CACA,IAAA5td,EAAA/U,EAAA4xX,eAAA,GACAx6X,EAAA2d,EAAA2qc,WAAA19F,GAAAx4L,OAAAw4L;AACAA,EAAA5qX,EAAAoyL,OAAAz0K,EAAAmnc,cAAA9kd,GAAAsod,WAAA1U,EAAA90K,SAAA1gN,UACA,CACA,OAAAwsS,CACA,CAmCA,SAAA4gH,EAAAtgH,EAAA2H,GAGA,IAFA,IAAA9qX,EAAA,GAEAtnB,EADAoD,KAAA8b,IAAAurX,EAAAwM,MAAA7E,EAAA6E,OACyBj3Y,GAAA,EAAQA,IAAA,CACjC,IAAAuf,EAAAkrX,EAAAlrX,MAAAvf;AACA,GAAAuf,EAAAkrX,EAAA9vV,KAAA8vV,EAAAwM,MAAAj3Y,IAAAoyY,EAAA5yX,IAAAxf,GAAAoyY,EAAAz3V,KAAAy3V,EAAA6E,MAAAj3Y,IAAAyqY,EAAAlmX,KAAAvkB,GAAAmE,KAAAimW,KAAAg/B,WAAAgJ,EAAA7tX,KAAAvkB,GAAAmE,KAAAimW,KAAAg/B,UAAA,OACA7pX,GAAA6yX,EAAA7yX,MAAAvf,OAAAyqY,EAAAwM,OAAAj3Y,GAAAoyY,EAAA6E,OAAAxM,EAAAtiX,OAAAm2X,eAAAlM,EAAAjqX,OAAAm2X,eAAAt+Y,GAAAoyY,EAAA7yX,MAAAvf,EAAA,IAAAuf,EAAA,IAAA+H,EAAArf,KAAAjI,EACA,CACA,OAAAsnB,CACA,CACA,IAAA0je,EAAA,SAAAC,GACAr4W,EAAAo4W,EAAAC;AACA,IAAAC,EAAAj4W,EAAA+3W;AACA,SAAAA,EAAArwc,EAAAosb,EAAA/je,GACA,IAAAmof;AAMA,OALA/3W,EAAA/yI,KAAA2qf,IACAG,EAAAD,EAAAjgf,KAAA5K,OACAs6C,MACAwwc,EAAApkB,OACAokB,EAAAnof,QACAmof,CACA,CA6CA,OA5CA53W,EAAAy3W,EAAA,EACA1xd,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,IAAAzG,EAAAyG,EAAAkuX,OAAA74Y,KAAAs6C;AACA,IAAAp2B,EAAA,OAAAwhe,EAAAzlY,KAAA;AACA,IAAAnmC,EAAA/xD,OAAAxjB,OAAA;AACA,QAAA6D,KAAA8b,EAAA41D,QAAA1xE,GAAA8b,EAAA41D,MAAA1xE;AACA0xE,EAAA95E,KAAA0me,MAAA1me,KAAA2C;AACA,IAAAgpW,EAAAznV,EAAApgB,KAAAS,OAAAu1E,EAAA,KAAA51D,EAAAwkX;AACA,OAAAg9G,EAAAM,YAAAr7d,EAAA3qB,KAAAs6C,IAAAt6C,KAAAs6C,IAAA,MAAAw4a,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAo+U,GAAA,EAAAznV,EAAA+zX,OAAA,KACA,GACG,CACHh/W,IAAA,SACAt2B,MAAA,WACA,OAAA2hf,EAAAhnZ,KACA,GACG,CACHrkE,IAAA,SACAt2B,MAAA,SAAAgoB,GACA,WAAAgge,EAAA3qf,KAAAs6C,IAAAt6C,KAAA0me,KAAA/7c,EAAAkuX,OAAA74Y,KAAAs6C,KAAAw/B,MAAA95E,KAAA0me,MACA,GACG,CACHztc,IAAA,MACAt2B,MAAA,SAAA08K,GACA,IAAA/kI,EAAA+kI,EAAA2oO,UAAAhoZ,KAAAs6C,IAAA;AACA,OAAAA,EAAAisc,aAAA,SAAAoE,EAAArwc,MAAAt6C,KAAA0me,KAAA1me,KAAA2C,MACA,GACG,CACHs2B,IAAA,SACAt2B,MAAA,WACA,OACA6if,SAAA,OACAlrc,IAAAt6C,KAAAs6C,IACAosb,KAAA1me,KAAA0me,KACA/je,MAAA3C,KAAA2C,MAEA,IACG,EACHs2B,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAA1qQ,KAAA,iBAAA0qQ,EAAA0hL,KAAA,UAAA1pc,WAAA;AACA,WAAA2td,EAAA3lM,EAAA1qQ,IAAA0qQ,EAAA0hL,KAAA1hL,EAAAriT,MACA,KAEAgof,CACA,CAzDA,CAyDCpF;AACDA,EAAAhrB,OAAA,OAAAowB;AACA,IAAAI,EAAA,SAAAC,GACAz4W,EAAAw4W,EAAAC;AACA,IAAAC,EAAAr4W,EAAAm4W;AACA,SAAAA,EAAArkB,EAAA/je,GACA,IAAAuof;AAKA,OAJAn4W,EAAA/yI,KAAA+qf,IACAG,EAAAD,EAAArgf,KAAA5K,OACA0me,OACAwkB,EAAAvof,QACAuof,CACA,CAyCA,OAxCAh4W,EAAA63W,EAAA,EACA9xd,IAAA,QACAt2B,MAAA,SAAAgoB,GACA,IAAAmvD,EAAA/xD,OAAAxjB,OAAA;AACA,QAAA6D,KAAAuiB,EAAAmvD,QAAA1xE,GAAAuiB,EAAAmvD,MAAA1xE;AACA0xE,EAAA95E,KAAA0me,MAAA1me,KAAA2C;AACA,IAAAgpW,EAAAhhV,EAAA7mB,KAAAS,OAAAu1E,EAAAnvD,EAAA82D,QAAA92D,EAAA+9W;AACA,OAAAg9G,EAAAxqO,GAAAywF,EACA,GACG,CACH1yU,IAAA,SACAt2B,MAAA,WACA,OAAA2hf,EAAAhnZ,KACA,GACG,CACHrkE,IAAA,SACAt2B,MAAA,SAAAgoB,GACA,WAAAoge,EAAA/qf,KAAA0me,KAAA/7c,EAAAmvD,MAAA95E,KAAA0me,MACA,GACG,CACHztc,IAAA,MACAt2B,MAAA,SAAA08K,GACA,OAAAr/K,IACA,GACG,CACHi5B,IAAA,SACAt2B,MAAA,WACA,OACA6if,SAAA,UACA9e,KAAA1me,KAAA0me,KACA/je,MAAA3C,KAAA2C,MAEA,IACG,EACHs2B,IAAA,WACAt2B,MAAA,SAAAslH,EAAA+8L,GACA,oBAAAA,EAAA0hL,KAAA,UAAA1pc,WAAA;AACA,WAAA+td,EAAA/lM,EAAA0hL,KAAA1hL,EAAAriT,MACA,KAEAoof,CACA,CApDA,CAoDCxF;AACDA,EAAAhrB,OAAA,UAAAwwB,GACA1xc,EAAA8xc,eAAsB,SAAAjqB,GACtB3uV,EAAA44W,EAAAjqB;AACA,IAAAkqB,EAAAx4W,EAAAu4W;AACA,SAAAA,IAEA,OADAp4W,EAAA/yI,KAAAmrf,GACAC,EAAAz4e,MAAA3S,KAAA4S,UACA,CACA,OAAAsgI,EAAAi4W,EACA,CARsB,CAQrBhsB,EAAAz+d,QACD24C,EAAA8xc,eAAsB,SAAAA,EAAAt1e,GACtB,IAAAq9B,EAAAxyC,MAAAkK,KAAA5K,KAAA6V;AAEA,OADAq9B,EAAAyoD,UAAAwvZ,EAAAlmf,UACAiuC,CACA,EACAmG,EAAA8xc,eAAAlmf,UAAgC8iB,OAAAxjB,OAAA7D,MAAAuE,WAChCo0C,EAAA8xc,eAAAlmf,UAAAq2E,YAA4CjiC,EAAA8xc,eAC5C9xc,EAAA8xc,eAAAlmf,UAAAmD,KAAqC;AACrC,IAAAggK,EAAA,WACA,SAAAA,EAAAz9I,GACAooH,EAAA/yI,KAAAooK,GACApoK,KAAA2qB,MACA3qB,KAAAiV,MAAA,GACAjV,KAAAyhZ,KAAA,GACAzhZ,KAAAq/K,QAAA,IAAA08S,CACA,CAoMA,OAnMA7oV,EAAAk1B,EAAA,EACAnvI,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAyhZ,KAAAlhZ,OAAAP,KAAAyhZ,KAAA,GAAAzhZ,KAAA2qB,GACA,GACG,CACHsO,IAAA,OACAt2B,MAAA,SAAAo2I,GACA,IAAA9xH,EAAAjnB,KAAA68Y,UAAA9jQ;AACA,GAAA9xH,EAAA0+d,OAAA,UAAAtsc,EAAA8xc,eAAAlke,EAAA0+d;AACA,OAAA3lf,IACA,GACG,CACHi5B,IAAA,YACAt2B,MAAA,SAAAkqI,GACA,IAAA5lH,EAAA4lH,EAAAl6H,MAAA3S,KAAA2qB;AAEA,OADA1D,EAAA0+d,QAAA3lf,KAAAqrf,QAAAx+W,EAAA5lH,EAAA0D,KACA1D,CACA,GACG,CACHgS,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAAiV,MAAA1U,OAAA,CACA,GACG,CACH04B,IAAA,eACAt2B,MAAA,WAGA,IAFA,IAAA4qB,EAAA,IACAk/B,GAAA,IACAnsD,EAAA,EAAsBA,EAAAN,KAAAq/K,QAAA41N,KAAA10Y,OAA8BD,IAAA,CACpD,IAAAsjB,EAAA5jB,KAAAq/K,QAAA41N,KAAA30Y;AACAA,IACAitB,EAAA3J,MAAA2J,EAAA,GACAk/B,EAAA7oC,MAAA6oC,GAAA,IAEA7oC,EAAApJ,QAAA,SAAAwsY,EAAAtvR,EAAA4zX,EAAAC,GACAh+d,EAAAxqB,KAAA8b,IAAA0O,EAAA+9d,GACA7+b,EAAA1pD,KAAA+b,IAAA2tC,EAAA8+b,EACA,EACA,CACA,YAAAh+d,EAAA,MACAA,OACAk/B,KAEA,GACG,CACHxzB,IAAA,UACAt2B,MAAA,SAAAkqI,EAAAliH,GACA3qB,KAAAyhZ,KAAA75Y,KAAA5H,KAAA2qB,KACA3qB,KAAAiV,MAAArN,KAAAilI,GACA7sI,KAAAq/K,QAAAq8S,UAAA7uV,EAAAo7Q,UACAjoZ,KAAA2qB,KACA,GACG,CACHsO,IAAA,UACAt2B,MAAA,SAAA4qB,GACA,IAAAk/B,EAAA75C,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA2a,EACAntB,EAAAwS,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAkgd,EAAA5yE,MAAA5iT,MACAuvC,EAAA0mV,EAAAvzd,KAAA2qB,IAAA4C,EAAAk/B,EAAArsD;AAEA,OADAysI,GAAA7sI,KAAA6sI,QACA7sI,IACA,GACG,CACHi5B,IAAA,cACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAAg1B,GACA,OAAAzhF,KAAAygB,QAAA8M,EAAAk/B,EAAA,IAAAqma,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAk0D,GAAA,KACA,GACG,CACHxoD,IAAA,SACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,OAAAzsD,KAAAygB,QAAA8M,EAAAk/B,EAAAqma,EAAA5yE,MAAA5iT,MACA,GACG,CACHrkE,IAAA,SACAt2B,MAAA,SAAA23C,EAAAmnC,GACA,OAAAzhF,KAAAorY,YAAA9wV,IAAAmnC,EACA,GACG,CACHxoD,IAAA,eACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAArsD,GAEA,OAzUA,SAAA6+C,EAAA1xB,EAAAk/B,EAAArsD,GACA,IAAAA,EAAAie,KAAA,OAAA4gC,EAAAkvV,YAAA5gX,EAAAk/B;AACA,IAAA29U,EAAAnrV,EAAAt0B,IAAAqqD,QAAAznD,GACAwkX,EAAA9yV,EAAAt0B,IAAAqqD,QAAAvoB;AACA,GAAA07b,EAAA/9G,EAAA2H,EAAA3xY,GAAA,OAAA6+C,EAAA4tF,KAAA,IAAAkoQ,EAAAxnX,EAAAk/B,EAAArsD;AACA,IAAAorf,EAAAd,EAAAtgH,EAAA2H;AACA,GAAAy5G,IAAAjrf,OAAA,IAAAirf,EAAA75V;AACA,IAAA85V,IAAArhH,EAAAwM,MAAA;AACA40G,EAAAnkV,QAAAokV;AACA,QAAA9rf,EAAAyqY,EAAAwM,MAAAt8V,EAAA8vV,EAAA9vV,IAAA,EAAiD36C,EAAA,EAAOA,IAAA26C,IAAA,CACxD,IAAAyvT,EAAAqgC,EAAAlmX,KAAAvkB,GAAAmE,KAAAimW;AACA,GAAAA,EAAA++B,UAAA/+B,EAAA2hJ,mBAAA3hJ,EAAAg/B,UAAA;AACAyiH,EAAA3hf,QAAAlK,IAAA,EAAA8rf,EAAA9rf,EAA0DyqY,EAAAptN,OAAAr9K,IAAA26C,GAAAkxc,EAAA1hf,OAAA,KAAAnK,EAC1D,CAIA,IAHA,IAAAgsf,EAAAH,EAAA3hf,QAAA4hf,GACAG,EAAA,GACAC,EAAAzrf,EAAA+ge,UACA1/Y,EAAArhF,EAAAqhF,QAAAnhF,EAAA,GAA4CA,IAAA,CAC5C,IAAA4jB,EAAAu9D,EAAAh7E;AAEA,GADAmlf,EAAAhkf,KAAAsc,GACA5jB,GAAAF,EAAA+ge,UAAA;AACA1/Y,EAAAv9D,EAAAu9D,OACA,CACA,QAAAqqa,EAAAD,EAAA,EAAqCC,GAAA,EAAUA,IAAA,CAC/C,IAAAC,EAAAH,EAAAE,GACA7mT,EAAAolT,EAAA0B,EAAAjof;AACA,GAAAmhM,IAAA8mT,EAAArsB,WAAAt1F,EAAAlmX,KAAAnhB,KAAAqN,IAAAq7e,GAAA,IAAAI,EAAAC;KAAqG,GAAA7mT,IAAA8mT,EAAAjof,KAAA2pY,YAAA,KACrG,CACA,QAAA9nT,EAAAvlF,EAAA+ge,UAAgCx7Y,GAAA,EAAQA,IAAA,CACxC,IAAAqma,GAAArma,EAAAkma,EAAA,IAAAzrf,EAAA+ge,UAAA,GACA/mF,EAAAwxG,EAAAI;AACA,GAAA5xG,EACA,QAAA6xG,EAAA,EAAsBA,EAAAT,EAAAjrf,OAA2B0rf,IAAA,CACjD,IAAAC,EAAAV,GAAAS,EAAAN,GAAAH,EAAAjrf,QACAugU;AACAorL,EAAA,IACAprL,KACAorL;AAEA,IAAApke,EAAAsiX,EAAAlmX,KAAAgoe,EAAA,GACAnjf,EAAAqhY,EAAArhY,MAAAmjf,EAAA;AACA,GAAApke,EAAA03X,eAAAz2Y,IAAAqxY,EAAAt2Y,KAAAs2Y,EAAA1R,OAAA,OAAAzpV,EAAAx+B,QAAA2pX,EAAAptN,OAAAkvU,GAAAprL,EAAAixE,EAAA90N,MAAAivU,GAAAz/b,EAAA,IAAAqma,EAAA5yE,MAAAqqG,EAAAnqf,EAAAqhF,QAAA,EAAArhF,EAAA+ge,UAAA6qB,KAAA5rf,EAAAghe,SACA,CACA,CAEA,IADA,IAAA+qB,EAAAltc,EAAAhqC,MAAA1U,OACA6rf,EAAAZ,EAAAjrf,OAAA,EAA0C6rf,GAAA,IAC1Cntc,EAAAx+B,QAAA8M,EAAAk/B,EAAArsD,KACA6+C,EAAAhqC,MAAA1U,OAAA4rf,IAFoDC,IAAA,CAGpD,IAAAx1G,EAAA40G,EAAAY;AACAx1G,EAAA,IACArpX,EAAA68W,EAAAptN,OAAA45N,GACAnqV,EAAAslV,EAAA90N,MAAA25N,GACA,CACA,CArDA,CAwUA52Y,KAAAutB,EAAAk/B,EAAArsD,GACAJ,IACA,GACG,CACHi5B,IAAA,mBACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAAvoC,GAEA,OA7QA,SAAA+6B,EAAA1xB,EAAAk/B,EAAAvoC,GACA,IAAAA,EAAAk6X,UAAA7wX,GAAAk/B,GAAAxN,EAAAt0B,IAAAqqD,QAAAznD,GAAAzF,OAAA25D,QAAApjE,KAAA,CACA,IAAAq3I,EAAAsyV,EAAA/oc,EAAAt0B,IAAA4C,EAAArJ,EAAApgB;AACA,MAAA4xJ,IAAAnoI,EAAAk/B,EAAAipG,EACA,CACAz2G,EAAAmyb,aAAA7jd,EAAAk/B,EAAA,IAAAqma,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAArJ,GAAA,KACA,CANA,CA4QAlkB,KAAAutB,EAAAk/B,EAAAvoC,GACAlkB,IACA,GACG,CACHi5B,IAAA,cACAt2B,MAAA,SAAA4qB,EAAAk/B,GAEA,OA5QA,SAAAxN,EAAA1xB,EAAAk/B,GACA,IAAA29U,EAAAnrV,EAAAt0B,IAAAqqD,QAAAznD,GACAwkX,EAAA9yV,EAAAt0B,IAAAqqD,QAAAvoB;AACA,GAAA29U,EAAAtiX,OAAA2lX,aAAAsE,EAAAjqX,OAAA2lX,aAAArD,EAAAlrX,SAAA6yX,EAAA7yX,SAAA,GAAAkrX,EAAAI,cAAA,GAAAuH,EAAAvH,aAAA,CAGA,IAFA,IAAAh0N,EAAA4zN,EAAA+rF,YAAA1pa,GACAooa,KACAl1d,EAAAyqY,EAAAwM,MAA8Bj3Y,EAAA62K,EAAY72K,IAAAyqY,EAAAlmX,KAAAvkB,GAAAmE,KAAAimW,KAAAg/B,YAAA8rF;AAC1C,QAAAw3B,EAAAt6G,EAAA6E,MAA8By1G,EAAA71U,EAAc61U,IAAAt6G,EAAA7tX,KAAAmoe,GAAAvof,KAAAimW,KAAAg/B,YAAA8rF;AAC5C,IAAAA,EAAA,CACA,QAAAy3B,EAAAliH,EAAAwM,MAAkC01G,EAAA,GAAA/+d,GAAA68W,EAAAlrX,MAAAote,GAAqCA,IAAA/+d,EAAA68W,EAAAptN,OAAAsvU;AACvE,QAAAC,EAAAx6G,EAAA6E,MAAgC21G,EAAA,GAAA9/b,GAAAslV,EAAA7yX,MAAAqte,GAAiCA,IAAA9/b,EAAAslV,EAAA/0N,OAAAuvU;AACjEniH,EAAAnrV,EAAAt0B,IAAAqqD,QAAAznD,GACAwkX,EAAA9yV,EAAAt0B,IAAAqqD,QAAAvoB,EACA,CACA,CAEA,IADA,IAAA+/b,EAAA9B,EAAAtgH,EAAA2H,GACAzxY,EAAA,EAAkBA,EAAAksf,EAAAjsf,OAAoBD,IAAA,CACtC,IAAAs2Y,EAAA41G,EAAAlsf,GACA4vL,EAAA5vL,GAAAksf,EAAAjsf,OAAA;AACA,GAAA2vL,GAAA,GAAA0mN,GAAAxM,EAAAlmX,KAAA0yX,GAAA9yY,KAAAk8Y,aAAAi1E,SAAA,OAAAh2a,EAAAqmC,OAAA8kT,EAAAlrX,MAAA03X,GAAA7E,EAAA5yX,IAAAy3X;AACA,GAAAA,EAAA,IAAA1mN,GAAAk6M,EAAAlmX,KAAA0yX,EAAA,GAAAm+E,WAAA3qF,EAAArhY,MAAA6tY,EAAA,GAAA7E,EAAAuN,WAAA1I,EAAA,YAAA33V,EAAAqmC,OAAA8kT,EAAAptN,OAAA45N,GAAA7E,EAAA90N,MAAA25N,GACA,CACA,QAAA61G,EAAA,EAAoBA,GAAAriH,EAAAwM,OAAA61G,GAAA16G,EAAA6E,MAAwC61G,IAC5D,GAAAl/d,EAAA68W,EAAAlrX,MAAAute,IAAAriH,EAAAwM,MAAA61G,GAAAhgc,EAAA29U,EAAAjrX,IAAAste,IAAA16G,EAAA5yX,IAAAste,GAAAhgc,GAAAslV,EAAA6E,MAAA61G,GAAAriH,EAAAlrX,MAAAute,EAAA,IAAA16G,EAAA7yX,MAAAute,EAAA,IAAAriH,EAAAlmX,KAAAuoe,EAAA,GAAA13B,WAAA3qF,EAAArhY,MAAA0jf,EAAA,GAAA16G,EAAAhpY,MAAA0jf,EAAA,WAAAxtc,EAAAqmC,OAAA8kT,EAAAptN,OAAAyvU,GAAAhgc;AAEAxN,EAAAqmC,OAAA/3D,EAAAk/B,EACA,CA1BA,CA2QAzsD,KAAAutB,EAAAk/B,GACAzsD,IACA,GACG,CACHi5B,IAAA,OACAt2B,MAAA,SAAAu1E,EAAA1uE,GAEA,OAl5BA,SAAAy1C,EAAAi5B,EAAA1uE,GAUA,IATA,IAAA4gY,EAAAlyT,EAAAkyT,MACA2H,EAAA75T,EAAA65T,IACA6E,EAAA1+T,EAAA0+T,MACA81G,EAAAtiH,EAAAptN,OAAA45N,EAAA,GACA+1G,EAAA56G,EAAA90N,MAAA25N,EAAA,GACA13X,EAAAwte,EACAvte,EAAAwte,EACA3vU,EAAA81S,EAAA90K,SAAA1gN,MACA6jY,EAAA,EACAxhe,EAAAi3Y,EAAAg2G,KAAyCjtf,EAAA6J,EAAY7J,IAAAitf,GAAAxiH,EAAArhY,MAAApJ,GAAA,GACrDitf,KACA5vU,EAAA81S,EAAA90K,SAAAzwR,KAAA68W,EAAAlmX,KAAAvkB,GAAAk4J,KAAAmlB,IACAmkT,KAEAjid;AAIA,IAFA,IAAA+9J,EAAA61S,EAAA90K,SAAA1gN,MACA8jY,EAAA,EACA38R,EAAAmyM,EAAAi2G,KAA2CpoT,EAAAj7L,EAAai7L,IAAAooT,GAAA96G,EAAA90N,MAAAwnB,EAAA,GAAAstM,EAAA5yX,IAAAslL,IACxDooT,KACA5vU,EAAA61S,EAAA90K,SAAAzwR,KAAAwkX,EAAA7tX,KAAAugL,GAAA5sC,KAAAolB,IACAmkT,KAEAjid;AAEA8/B,EAAA4tF,KAAA,IAAAmoQ,EAAA91X,EAAAC,EAAAute,EAAAC,EAAA,IAAA75B,EAAA5yE,MAAAljO,EAAAs0B,OAAAr0B,GAAAkkT,EAAAC,GAAApkT,EAAA3+J,KAAA8id,MACA,CA3BA,CAi5BAnhe,KAAAk4E,EAAA1uE,GACAxJ,IACA,GACG,CACHi5B,IAAA,OACAt2B,MAAA,SAAA23C,GAGA,OAlsBA,SAAA2E,EAAA3E,EAAAs8V,GACA,IAAAk2G,EAAA,KACAjkH,EAAA5pV,EAAAt0B,IAAA7mB,KAAAmkH,OAAA4gR,qBACA25F,EAAAvjb,EAAAt0B,IAAAqqD,QAAA16B,EAAAs8V,GACAm2G,EAAAvqB,EAAAt+c,OAAApgB;AACA,GAAA+kY,GAAAkkH,EAAA9uG,cAAA,CACA,IAAAgsF,EAAA,OAAA8iB,EAAAnkH,WACAokH,IAAAD,EAAA/sG,aAAAmI,UAAAtf;AACAohG,IAAA+iB,EAAAF,MAA0D7iB,GAAA+iB,IAAAF,KAC1D,CACA,IAAAr4B,EAAAx1a,EAAAhqC,MAAA1U;AACA,QAAAusf,EAAA,CACA,IAAArqB,EAAAxjb,EAAAt0B,IAAAqqD,QAAA16B,EAAAs8V;AACAmxG,EAAA9oc,EAAAwjb,EAAAv+c,OAAAu+c,EAAAzlT,SAAAy3S,EACA,CACAs4B,EAAA9uG,eAAAqpG,EAAAroc,EAAA3E,EAAAs8V,EAAA,EAAAm2G,EAAAvqB,EAAAt+c,OAAAw1X,eAAA8oF,EAAAz5d,SAAA,MAAA+jf;AACA,IAAAztU,EAAApgI,EAAAogI,QAAAj/K,MAAAq0d,GACAv1c,EAAAmgK,EAAAz7J,IAAA02B,EAAAs8V;AAEA,GADA33V,EAAA4tF,KAAA,IAAAkoQ,EAAA71X,EAAAmgK,EAAAz7J,IAAA02B,EAAAs8V,GAAA,GAAAk8E,EAAA5yE,MAAA5iT,YAAA,IACAwvZ,EAAA,CACA,IAAAG,EAAAhuc,EAAAt0B,IAAAqqD,QAAA91D;AACA4oe,EAAA7oc,EAAAguc,EAAA/oe,OAAA+oe,EAAAjwU,SAAA/9H,EAAAhqC,MAAA1U,OACA,CAEA,CAxBA,CAisBAP,KAAAs6C,EADA1nC,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MAEA5S,IACA,GACG,CACHi5B,IAAA,OACAt2B,MAAA,SAAAu1E,EAAAi4Z,GAEA,OA51BA,SAAAlxb,EAAAi5B,EAAAi4Z,GAEA,IADA,IAAA1uZ,EAAAqxY,EAAA90K,SAAA1gN,MACAh9F,EAAA6ve,EAAA5ve,OAAA,EAAoCD,GAAA,EAAQA,IAAA,CAC5C,GAAAmhF,EAAApjE,KAAA,CACA,IAAAwe,EAAAszc,EAAA7ve,GAAAwD,KAAAk8Y,aAAAgkF,cAAAviZ;AACA,IAAA5kD,MAAAo4b,SAAA,UAAAj4b,WAAA,yFACA,CACAykD,EAAAqxY,EAAA90K,SAAAzwR,KAAA4id,EAAA7ve,GAAAwD,KAAAS,OAAA4re,EAAA7ve,GAAAw5E,MAAA2H,GACA,CACA,IAAAviE,EAAAg5D,EAAAh5D,MACAC,EAAA+4D,EAAA/4D;AACA8/B,EAAA4tF,KAAA,IAAAmoQ,EAAA91X,EAAAC,EAAAD,EAAAC,EAAA,IAAA2zc,EAAA5yE,MAAAz+T,EAAA,KAAA0uZ,EAAA5ve,WACA,CAZA,CA21BAP,KAAAk4E,EAAAi4Z,GACAnwe,IACA,GACG,CACHi5B,IAAA,eACAt2B,MAAA,SAAA4qB,GAKA,OAx1BA,SAAA0xB,EAAA1xB,EAAAk/B,EAAA3oD,EAAAg2E,GACA,IAAAh2E,EAAA2pY,YAAA,UAAAzwW,WAAA;AACA,IAAAy3b,EAAAx1a,EAAAhqC,MAAA1U;AACA0+C,EAAAt0B,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,SAAAvoC,EAAAo2B,GACA,IAAA4yc,EAAA,mBAAApza,IAAA51D,GAAA41D;AACA,GAAA51D,EAAAupX,cAAAvpX,EAAAyyc,UAAA7yd,EAAAopf,IAsCA,SAAAvie,EAAA2vB,EAAAx2C,GACA,IAAAuuY,EAAA1nX,EAAAqqD,QAAA16B,GACAvxC,EAAAspY,EAAAtpY;AACA,OAAAspY,EAAAvqX,OAAA03X,eAAAz2Y,IAAA,EAAAjF,EACA,CAJA,CAtCAm7C,EAAAt0B,IAAAs0B,EAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,GAAAx2C,GAAA,CACA,IAAAgpf,EAAA;AACA,GAAAhpf,EAAAmkH,OAAA4gR,qBAAA,CACA,IAAAohG,EAAA,OAAAnme,EAAA8kY,WACAokH,IAAAlpf,EAAAk8Y,aAAAmI,UAAArkZ,EAAAmkH,OAAA4gR;AACAohG,IAAA+iB,EAAAF,MAA8D7iB,GAAA+iB,IAAAF,KAC9D,MACAA,GAAA/E,EAAA9oc,EAAA/6B,EAAAo2B,EAAAm6a,GACA6yB,EAAAroc,IAAAogI,QAAAj/K,MAAAq0d,GAAA7wc,IAAA02B,EAAA,GAAAx2C,OAAA2tB,EAAA,OAAAq7d;AACA,IAAAztU,EAAApgI,EAAAogI,QAAAj/K,MAAAq0d,GACA04B,EAAA9tU,EAAAz7J,IAAA02B,EAAA,GACA8yc,EAAA/tU,EAAAz7J,IAAA02B,EAAAp2B,EAAAwuX,SAAA;AAGA,OAFAzzV,EAAA4tF,KAAA,IAAAmoQ,EAAAm4G,EAAAC,EAAAD,EAAA,EAAAC,EAAA,MAAAt6B,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAAzpB,EAAAS,OAAA2of,EAAA,KAAAhpe,EAAAwkX,QAAA,iBACAokH,GAAAhF,EAAA7oc,EAAA/6B,EAAAo2B,EAAAm6a,KAEA,CACA,EACA,CAtBA,CAu1BAz0d,KAAAutB,EAHA3a,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAA2a,EACA3a,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACA7e,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,SAEA5S,IACA,GACG,CACHi5B,IAAA,gBACAt2B,MAAA,SAAA23C,EAAAx2C,GAIA,OAhzBA,SAAAm7C,EAAA3E,EAAAx2C,EAAAg2E,EAAA4uT,GACA,IAAAxkX,EAAA+6B,EAAAt0B,IAAAkuX,OAAAv+V;AACA,IAAAp2B,EAAA,UAAA8Y,WAAA;AACAl5B,MAAAogB,EAAApgB;AACA,IAAAmnV,EAAAnnV,EAAAS,OAAAu1E,EAAA,KAAA4uT,GAAAxkX,EAAAwkX;AACA,GAAAxkX,EAAA+zX,OAAA,OAAAh5V,EAAAmsV,YAAA9wV,IAAAp2B,EAAAwuX,SAAAznD;AACA,IAAAnnV,EAAA48Y,aAAAx8X,EAAAu9D,SAAA,UAAAzkD,WAAA,iCAAAl5B,EAAAsE;AACA62C,EAAA4tF,KAAA,IAAAmoQ,EAAA16V,IAAAp2B,EAAAwuX,SAAAp4V,EAAA,EAAAA,EAAAp2B,EAAAwuX,SAAA,MAAAogF,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAA09T,GAAA,WACA,CARA,CA+yBAjrV,KAAAs6C,EAAAx2C,EAFA8O,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACAA,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,GAEAzxB,IACA,GACG,CACHi5B,IAAA,mBACAt2B,MAAA,SAAA23C,EAAAosb,EAAA/je,GAEA,OADA3C,KAAA6sI,KAAA,IAAA89W,EAAArwc,EAAAosb,EAAA/je,IACA3C,IACA,GACG,CACHi5B,IAAA,kBACAt2B,MAAA,SAAA+je,EAAA/je,GAEA,OADA3C,KAAA6sI,KAAA,IAAAk+W,EAAArkB,EAAA/je,IACA3C,IACA,GACG,CACHi5B,IAAA,cACAt2B,MAAA,SAAA23C,EAAA+jE,GAEA,OADAr+G,KAAA6sI,KAAA,IAAAs5W,EAAA7rc,EAAA+jE,IACAr+G,IACA,GACG,CACHi5B,IAAA,iBACAt2B,MAAA,SAAA23C,EAAA+jE,GACA,IAAAn6F,EAAAlkB,KAAA2qB,IAAAkuX,OAAAv+V;AACA,IAAAp2B,EAAA,UAAA8Y,WAAA,uBAAAsd;AACA,GAAA+jE,aAAAy0W,EAAA5mF,KACA7tR,EAAA0/R,QAAA75X,EAAAwkX,QAAA1oY,KAAA6sI,KAAA,IAAAy5W,EAAAhsc,EAAA+jE;IACQ,CAIR,IAHA,IACA67G,EADArtM,EAAA3I,EAAAwkX,MAEAzzX,EAAA,GACAilN,EAAA77G,EAAA0/R,QAAAlxX,IACA5X,EAAArN,KAAA,IAAA0+e,EAAAhsc,EAAA4/K,IACArtM,EAAAqtM,EAAA4oQ,cAAAj2c;AAEA,QAAAvsB,EAAA2U,EAAA1U,OAAA,EAAuCD,GAAA,EAAQA,IAAAN,KAAA6sI,KAAA53H,EAAA3U,GAC/C,CACA,OAAAN,IACA,GACG,CACHi5B,IAAA,QACAt2B,MAAA,SAAA23C,GAIA,OA/zBA,SAAA2E,EAAA3E,GAMA,IALA,IAAAs8V,EAAAhkY,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAy6e,EAAAz6e,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACA4gX,EAAApzV,EAAAt0B,IAAAqqD,QAAA16B,GACA0iI,EAAA81S,EAAA90K,SAAA1gN,MACA2/E,EAAA61S,EAAA90K,SAAA1gN,MACA39F,EAAA0yY,EAAAuE,MAAAv2Y,EAAAgyY,EAAAuE,QAAAt2Y,EAAAs2Y,EAAA,EAAkEj3Y,EAAAU,EAAOV,IAAAW,IAAA,CACzE08K,EAAA81S,EAAA90K,SAAAzwR,KAAA8kX,EAAAnuX,KAAAvkB,GAAAk4J,KAAAmlB;AACA,IAAAswU,EAAAD,KAAA/sf;AACA28K,EAAA61S,EAAA90K,SAAAzwR,KAAA+/d,IAAAxpf,KAAAS,OAAA+of,EAAAxza,MAAAmjG,GAAAo1N,EAAAnuX,KAAAvkB,GAAAk4J,KAAAolB,GACA,CACAh+H,EAAA4tF,KAAA,IAAAkoQ,EAAAz6V,IAAA,IAAAw4a,EAAA5yE,MAAAljO,EAAAs0B,OAAAr0B,GAAA25N,SACA,CAZA,CA8zBA52Y,KAAAs6C,EAFA1nC,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAA,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,GAEAzxB,IACA,GACG,CACHi5B,IAAA,UACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA4xD,GAEA,OA7lCA,SAAAp/D,EAAA1xB,EAAAk/B,EAAA4xD,GACA,IAEAkvY,EAAAC,EAFAvtU,EAAA,GACAjsK,EAAA;AAEAirC,EAAAt0B,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,SAAAvoC,EAAAo2B,EAAAxyB,GACA,GAAA5D,EAAAk6X,SAAA,CACA,IAAA1V,EAAAxkX,EAAAwkX;AACA,IAAArqR,EAAA0/R,QAAArV,IAAA5gX,EAAAhkB,KAAAo6Y,eAAA7/R,EAAAv6G,MAAA,CAIA,IAHA,IAAAob,EAAAnc,KAAA+b,IAAAw7B,EAAA/sB,GACApO,EAAApc,KAAA8b,IAAAy7B,EAAAp2B,EAAAwuX,SAAAjmV,GACA45b,EAAAhoY,EAAA+lX,SAAA17F,GACApoY,EAAA,EAAsBA,EAAAooY,EAAAnoY,OAAkBD,IACxCooY,EAAApoY,GAAAy9Y,QAAAsoG,KACAkH,KAAA9gc,IAAAvtC,GAAAque,EAAAlvY,KAAA01I,GAAA20I,EAAApoY,IAAAitf,EAAA9gc,GAAAttC,EAAgG8gK,EAAAr4K,KAAA2lf,EAAA,IAAAtH,EAAA/me,EAAAC,EAAAupX,EAAApoY;AAGhGktf,KAAA/gc,IAAAvtC,EAAAsue,EAAA/gc,GAAAttC,EAAwDnL,EAAApM,KAAA4lf,EAAA,IAAA3H,EAAA3me,EAAAC,EAAAk/F,GACxD,CAZA,CAaA,GACA4hE,EAAAzlK,QAAA,SAAAhY,GACA,OAAAy8C,EAAA4tF,KAAArqI,EACA,GACAwR,EAAAwG,QAAA,SAAAhY,GACA,OAAAy8C,EAAA4tF,KAAArqI,EACA,EACA,CAzBA,CA4lCAxC,KAAAutB,EAAAk/B,EAAA4xD,GACAr+G,IACA,GACG,CACHi5B,IAAA,aACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA4xD,GAEA,OAzkCA,SAAAp/D,EAAA1xB,EAAAk/B,EAAA4xD,GACA,IAAAqU,EAAA,GACAma,EAAA;AACA5tF,EAAAt0B,IAAA8/W,aAAAl9W,EAAAk/B,EAAA,SAAAvoC,EAAAo2B,GACA,GAAAp2B,EAAAk6X,SAAA,CACAvxQ;AACA,IAAA4gX,EAAA;AACA,GAAApvY,aAAAy0W,EAAA4U,SAGA,IAFA,IACAxtQ,EADArtM,EAAA3I,EAAAwkX,MAEAxuK,EAAA77G,EAAA0/R,QAAAlxX,KACA4ge,MAAA,KAAA7lf,KAAAsyN,GACArtM,EAAAqtM,EAAA4oQ,cAAAj2c;KAEMwxF,EACNA,EAAA0/R,QAAA75X,EAAAwkX,SAAA+kH,EAAA,CAAApvY,IAEAovY,EAAAvpe,EAAAwkX;AAEA,GAAA+kH,KAAAltf,OAEA,IADA,IAAA4e,EAAApc,KAAA8b,IAAAy7B,EAAAp2B,EAAAwuX,SAAAjmV,GACAnsD,EAAA,EAAsBA,EAAAmtf,EAAAltf,OAAqBD,IAAA,CAG3C,IAFA,IAAAqN,EAAA8/e,EAAAntf,GACAuke,OAAA,EACAl/Y,EAAA,EAAwBA,EAAA+sC,EAAAnyH,OAAoBolF,IAAA,CAC5C,IAAAx7E,EAAAuoH,EAAA/sC;AACAx7E,EAAA0iI,QAAA,GAAAl/H,EAAAomP,GAAArhI,EAAA/sC,GAAAh4E,SAAAk3d,EAAA16d,EACA,CACA06d,GACAA,EAAAp4a,GAAAttC,EACA0ld,EAAAh4V,QAEAna,EAAA9qH,KAAA,CACA+F,QACA4f,KAAAxqB,KAAA+b,IAAAw7B,EAAA/sB,GACAk/B,GAAAttC,EACA0tH,QAGA,CAnCA,CAqCA,GACAna,EAAAl4G,QAAA,SAAArQ,GACA,OAAA80C,EAAA4tF,KAAA,IAAAo5W,EAAA97e,EAAAojB,KAAApjB,EAAAsiD,GAAAtiD,EAAAwD,OACA,EACA,CA7CA,CAwkCA3N,KAAAutB,EAAAk/B,EAAA4xD,GACAr+G,IACA,GACG,CACHi5B,IAAA,oBACAt2B,MAAA,SAAA23C,EAAAitc,EAAA1qd,GAEA,OADAyqd,EAAAtnf,KAAAs6C,EAAAitc,EAAA1qd,GACA78B,IACA,KAEAooK,CACA,CA5MA;AA6MA/uH,EAAAwsc,YAAmBA,EACnBxsc,EAAA8sc,gBAAuBA,EACvB9sc,EAAAsxc,SAAgBA,EAChBtxc,EAAA0xc,YAAmBA,EACnB1xc,EAAA8qc,UAAiBA,EACjB9qc,EAAA0ib,QAAeA,EACf1ib,EAAA4sc,eAAsBA,EACtB5sc,EAAAitc,mBAA0BA,EAC1Bjtc,EAAA27V,kBAAyBA,EACzB37V,EAAA07V,YAAmBA,EACnB17V,EAAAksc,KAAYA,EACZlsc,EAAAirc,QAAeA,EACfjrc,EAAAqsc,WAAkBA,EAClBrsc,EAAA+uH,UAAiBA,EACjB/uH,EAAAy/V,QAv1BA,SAAAnuX,EAAA2vB,GACA,IAAA+3V,EAAA1nX,EAAAqqD,QAAA16B,GACAvxC,EAAAspY,EAAAtpY;AACA,OAAAktd,EAAA5jF,EAAApH,WAAAoH,EAAAnH,YAAAmH,EAAAvqX,OAAAitc,WAAAhsd,IAAA,EACA,EAo1BAswC,EAAA+lW,SA13BA,SAAAz0X,EAAA2vB,GACA,IAAAs8V,EAAAhkY,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAy6e,EAAAz6e,UAAArS,OAAA,EAAAqS,UAAA,QAAA6e,EACA4gX,EAAA1nX,EAAAqqD,QAAA16B,GACAq1O,EAAA0iH,EAAAuE,QACA82G,EAAAL,OAAA9sf,OAAA,IAAA8xY,EAAAvqX;AACA,GAAA6nQ,EAAA,GAAA0iH,EAAAvqX,OAAAhkB,KAAAimW,KAAAg/B,YAAAsJ,EAAAvqX,OAAAitc,WAAA1iF,EAAAtpY,QAAAspY,EAAAvqX,OAAA6qX,cAAA+6G,EAAA5pf,KAAA48Y,aAAArO,EAAAvqX,OAAA25D,QAAA2oa,WAAA/3G,EAAAtpY,QAAAspY,EAAAvqX,OAAA6qX,aAAA;AACA,QAAAhzY,EAAA0yY,EAAAuE,MAAA,EAAAt2Y,EAAAs2Y,EAAA,EAA8Cj3Y,EAAAgwR,EAAUhwR,IAAAW,IAAA,CACxD,IAAA4jB,EAAAmuX,EAAAnuX,KAAAvkB,GACAylM,EAAAitM,EAAAtpY,MAAApJ;AACA,GAAAukB,EAAApgB,KAAAimW,KAAAg/B,UAAA;AACA,IAAAx0P,EAAArwH,EAAAu9D,QAAA2oa,WAAAhlT,EAAAlhL,EAAAyuX,YACAg7G,EAAAN,KAAA/sf,EAAA;AACAqtf,IAAAp5W,IAAAqtV,aAAA,EAAA+rB,EAAA7pf,KAAAS,OAAAopf,EAAA7za;AACA,IAAAmjG,EAAAowU,KAAA/sf,IAAA4jB;AACA,IAAAA,EAAA6wc,WAAA3vR,EAAA,EAAAlhL,EAAAyuX,cAAA11N,EAAAn5K,KAAA48Y,aAAAnsQ,GAAA,QACA,CACA,IAAAxrI,EAAAspY,EAAAiN,WAAA3vH,GACAi+N,EAAAP,KAAA;AACA,OAAAh7G,EAAAnuX,KAAAyrQ,GAAA6vH,eAAAz2Y,IAAA6kf,IAAA9pf,KAAAuuY,EAAAnuX,KAAAyrQ,EAAA,GAAA7rR,KACA,EAu2BAu1C,EAAAggb,UArwBA,SAAA1uc,EAAA2vB,EAAAl6C,GACA,IAAAiyY,EAAA1nX,EAAAqqD,QAAA16B;AACA,IAAAl6C,EAAAqhF,QAAApjE,KAAA,OAAAi8B;AAEA,IADA,IAAAmnC,EAAArhF,EAAAqhF,QACAnhF,EAAA,EAAkBA,EAAAF,EAAA+ge,UAAqB7ge,IAAAmhF,IAAAh7E,WAAAg7E;AACvC,QAAAsna,EAAA,EAAqBA,IAAA,GAAA3of,EAAA+ge,WAAA/ge,EAAAie,KAAA,KAAsD0qe,IAC3E,QAAAppf,EAAA0yY,EAAAuE,MAA6Bj3Y,GAAA,EAAQA,IAAA,CACrC,IAAAm1Y,EAAAn1Y,GAAA0yY,EAAAuE,MAAA,EAAAvE,EAAA/3V,MAAA+3V,EAAAnzX,MAAAvf,EAAA,GAAA0yY,EAAAlzX,IAAAxf,EAAA,WACAkuf,EAAAx7G,EAAAtpY,MAAApJ,IAAAm1Y,EAAA,OACAhtX,EAAAuqX,EAAAnuX,KAAAvkB,GACAmuf;AACA,MAAA/E,EACA+E,EAAAhme,EAAAitc,WAAA84B,IAAApsa;IACQ,CACR,IAAAgqU,EAAA3jY,EAAA4xX,eAAAm0G,GAAAniG,aAAAjqU,EAAAh7E,WAAA3C;AACAgqf,EAAAriG,GAAA3jY,EAAA03X,eAAAquG,IAAApiG,EAAA,GACA,CACA,GAAAqiG,EAAA,UAAAh5G,EAAAzC,EAAA/3V,IAAAw6V,EAAA,EAAAzC,EAAAr1N,OAAAr9K,EAAA,GAAA0yY,EAAAp1N,MAAAt9K,EAAA,EACA,CAEA,WACA,EAivBA05C,EAAAqyW,aAz+BA,SAAAxzU,EAAAkf,GACA,IAAAtd,EAAAlnE,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACA45U,EAAA55U,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,GAAAslE,EACA61a,EAcA,SAAA71a,EAAAp0E,GACA,IAAAgkB,EAAAowD,EAAApwD,OACA8yM,EAAA1iJ,EAAA0iJ,WACAmtH,EAAA7vQ,EAAA6vQ,SACAgmK,EAAAjme,EAAA4xX,eAAA9+K,GAAA8wL,aAAA5nZ;AACA,IAAAiqf,EAAA;AACA,IAAAzzN,EAAAyzN,EAAAxtf,OAAAwtf,EAAA,GAAAjqf;AACA,OAAAgkB,EAAA03X,eAAA5kL,EAAAmtH,EAAAztD,GAAAyzN,EAAA,IACA,CARA,CAdA71a,EAAAkf,GACAijM,EAAA0zN,GAsBA,SAAA71a,EAAAp0E,GACA,IAAAgkB,EAAAowD,EAAApwD,OACA8yM,EAAA1iJ,EAAA0iJ,WACAmtH,EAAA7vQ,EAAA6vQ,SACA1tD,EAAAvyQ,EAAAg/I,MAAA8zD,GACAovP,EAAAlmd,EAAAk8Y,aAAA0L,aAAArxH,EAAAv2R;AACA,IAAAkmd,EAAA;AAGA,IAFA,IACAgkC,GADAhkC,EAAAzpd,OAAAypd,IAAAzpd,OAAA,GAAAuD,GACAk8Y,aACA1/Y,EAAAs6N,EAA2BozR,GAAA1tf,EAAAynV,EAA4BznV,IAAA0tf,IAAA7lG,UAAArgY,EAAAg/I,MAAAxmK,GAAAwD;AACvD,OAAAkqf,KAAA/4B,SACAjL,EADA,IAEA,CAZA,CAtBAx9H,EAAAp1P;AACA,OAAAijM,EACA0zN,EAAAnqe,IAAAike,GAAAp1e,OAAA,CACA3O,KAAAszF,EACAtd,UACGrnE,OAAA4nR,EAAAz2Q,IAAAike,IAJH,IAKA,EAg+BAxuc,EAAA2uc,YAAmBA,EACnB3uc,EAAA6iW,UAv0BA,SAAAvxX,EAAA2vB,GAGA,IAFA,IAAA52C,EAAAkP,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACAy/X,EAAA1nX,EAAAqqD,QAAA16B,GACA36C,EAAA0yY,EAAAuE,OAA4Bj3Y,IAAA,CAC5B,IAAAq9K,OAAA,EACAC,OAAA,EACAl0K,EAAAspY,EAAAtpY,MAAApJ;AAYA,GAXAA,GAAA0yY,EAAAuE,OACA55N,EAAAq1N,EAAApH,WACAhuN,EAAAo1N,EAAAnH,WACMxnY,EAAA,GACNs5K,EAAAq1N,EAAAnuX,KAAAvkB,EAAA,GACAoJ,IACAk0K,EAAAo1N,EAAAnuX,KAAAvkB,GAAAy2d,WAAArtd,KAEAi0K,EAAAq1N,EAAAnuX,KAAAvkB,GAAAy2d,WAAArtd,EAAA,GACAk0K,EAAAo1N,EAAAnuX,KAAAvkB,EAAA,IAEAq9K,MAAAywN,aAAAwoF,EAAAj5S,EAAAC,IAAAo1N,EAAAnuX,KAAAvkB,GAAAo1d,WAAAhsd,IAAA,UAAAuxC;AACA,MAAA36C,EAAA;AACA26C,EAAA52C,EAAA,EAAA2uY,EAAAr1N,OAAAr9K,GAAA0yY,EAAAp1N,MAAAt9K,EACA,CACA,EAkzBA05C,EAAAmgW,WAthCA,SAAAthU,GAGA,IAFA,IACAuJ,EADAvJ,EAAApwD,OACA25D,QAAA2oa,WAAAlya,EAAA0iJ,WAAA1iJ,EAAA6vQ,UACA6uD,EAAA1+T,EAAA0+T,MAAAq3G,EAAA,EAAAC,EAAA,KAAsEt3G,EAAA,CACtE,IAAA1yX,EAAAg0D,EAAAkyT,MAAAlmX,KAAA0yX,GACA7tY,EAAAmvE,EAAAkyT,MAAArhY,MAAA6tY,GAAAq3G,EACAlmK,EAAA7vQ,EAAA65T,IAAAuN,WAAA1I,GAAAs3G;AACA,GAAAt3G,EAAA1+T,EAAA0+T,OAAA1yX,EAAA6wc,WAAAhsd,EAAAg/U,EAAAtmQ,GAAA,OAAAm1T;AACA,MAAAA,GAAA1yX,EAAApgB,KAAAimW,KAAAg/B,YAAA6+G,EAAA1je,EAAAnb,EAAAg/U,GAAA;AACAh/U,IAAAklf,EAAA,GACAlmK,EAAA7jU,EAAAyuX,aAAAu7G,EAAA,EACA,CACA,WACA,EA0gCA70c,EAAAk6a,YAAmBA;AC12DnB,SAAA46B,EAAA3sM,EAAAlhT,GAAkC,OAGlC,SAAAkhT,GAAgC,GAAA3tS,MAAA1T,QAAAqhT,GAAA,OAAAA,CAAA,CAAhC,CAHkCA,IAElC,SAAA3gT,EAAA9D,GAAuC,IAAA+B,EAAA,MAAA+B,EAAA,yBAAAs6E,QAAAt6E,EAAAs6E,OAAA2c,WAAAj3F,EAAA;AAAkG,SAAA/B,EAAA,CAAiB,IAAAuB,EAAAG,EAAAF,EAAAyB,EAAAjB,EAAA,GAAAoL,KAAAtL;AAAwC,IAAM,GAAAN,GAAAxB,IAAA8L,KAAA/J,IAAAo4F,KAAA,IAAAl8F,EAAA,CAAyC,GAAAgrB,OAAAjpB,OAAA;AAA6BoN,IAAA,MAAU,OAAYA,GAAA7L,EAAAC,EAAAsK,KAAA9L,IAAAunF,QAAAvlF,EAAA8G,KAAAvH,EAAAsC,OAAA7B,EAAAP,SAAAxD,GAAkEmP,MAAA,CAAW,MAAArL,GAAYD,KAAAJ,EAAAK,CAAA,CAAiB,QAAU,IAAM,IAAAqL,GAAA,MAAApN,EAAAo6F,SAAAn3F,EAAAjD,EAAAo6F,SAAAnxE,OAAAhmB,QAAA,OAAiF,QAAU,GAAAnB,EAAA,MAAAJ,CAAA,EAAoB,OAAAM,CAAA,EAA7gB,CAFkC0gT,EAAAlhT,IAAA8tf,EAAA5sM,EAAAlhT,IAClC,WAA8B,UAAAuoD,UAAA,6IAA9B,EADkC,CAIlC,SAAAkpF,EAAAnxI,EAAAytf,GAAyD,IAAA9sf,EAAA,oBAAA45E,QAAAv6E,EAAAu6E,OAAA2c,WAAAl3F,EAAA;AAAiF,IAAAW,EAAA,CAAW,GAAAsS,MAAA1T,QAAAS,KAAAW,EAAA6sf,EAAAxtf,KAAAytf,GAAAztf,GAAA,iBAAAA,EAAAL,OAAA,CAAwHgB,IAAAX,EAAAW;AAAgB,IAAAjB,EAAA,EAAWigF,EAAA;AAAyB,OAAS/9E,EAAA+9E,EAAA//E,EAAA,WAAwB,OAAAF,GAAAM,EAAAL,OAAA,CAA4B8lF,SAAc,CAASA,QAAA1jF,MAAA/B,EAAAN,KAAA,EAA+BD,EAAA,SAAA4d,GAAsB,MAAAA,CAAA,EAAW/R,EAAAq0E,EAAA,CAAY,UAAA13B,UAAA,yIAAgK,IAAA3V,EAAA06b,KAAAC;AAAkD,OAASrre,EAAA,WAAkBjB,IAAAqJ,KAAAhK,EAAA,EAAkBJ,EAAA,WAAoB,IAAAqsI,EAAAtrI,EAAA03F;AAAoD,OAA9B20Y,EAAA/gW,EAAAxmD,KAA8BwmD,CAAA,EAAcxsI,EAAA,SAAAyte,GAAuBD,KAAe36b,EAAA46b,CAAA,EAAY5he,EAAA,WAAoB,IAAM0he,GAAA,MAAArse,EAAA23F,QAAA33F,EAAA23F,QAAA,CAAiE,QAAU,GAAA20Y,EAAA,MAAA36b,CAAA,IAC78B,SAAAk7c,EAAAxtf,EAAA+se,GAAkD,GAAA/se,EAAA,CAAgB,oBAAAA,EAAA,OAAAkxI,EAAAlxI,EAAA+se;AAAgE,IAAAnte,EAAAunB,OAAA9iB,UAAAoL,SAAAzF,KAAAhK,GAAAR,MAAA;AAAqH,MAA7D,WAAAI,GAAAI,EAAA06E,cAAA96E,EAAAI,EAAA06E,YAAAlzE,MAA6D,QAAA5H,GAAA,QAAAA,EAAAqT,MAAA0Z,KAAA3sB,GAAsD,cAAAJ,GAAA,2CAAA6kB,KAAA7kB,GAAAsxI,EAAAlxI,EAAA+se,QAAA,CAA3P,CAA2P,CAC7S,SAAA77V,EAAA0vK,EAAAxqR,IAAuC,MAAAA,KAAAwqR,EAAAjhT,UAAAy2B,EAAAwqR,EAAAjhT;AAAuD,QAAAD,EAAA,EAAA4+d,EAAA,IAAArrd,MAAAmjB,GAAuC12B,EAAA02B,EAAS12B,IAAA4+d,EAAA5+d,GAAAkhT,EAAAlhT;AAAuB,OAAA4+d,CAAA,CACrK,SAAA5lX,IAAoY,OAA7TA,EAArD,oBAAAo5B,iBAAApmH,IAAqDomH,QAAApmH,IAAA7pB,OAAoC,SAAA+G,EAAAkkI,EAAAm9U,GAAmD,IAAAl7L,EAC9J,SAAAtoO,EAAAqmF,GAA4C,MAAA3lH,OAAA9iB,UAAA4N,eAAAjI,KAAAy8C,EAAAqmF,IAAoG,QAAlCrmF,EAAAmrF,EAAAnrF,MAAgE,OAAAA,CAAA,CAA9K,CAD8J79C,EAAAkkI;AAA6C,GAAAiiJ,EAAA,CAAmB,IAAAjlF,EAAA3iL,OAAA2zE,yBAAAi0L,EAAAjiJ;AAA4D,OAAAg9D,EAAAp+K,IAAgBo+K,EAAAp+K,IAAA1hB,KAAAgI,UAAArS,OAAA,EAAAiJ,EAAAqhd,GAAkEngR,EAAA/nM,KAAjK,CAAiK,EAAwB22G,EAAA3mG,MAAA3S,KAAA4S,UAAA,CAEpY,SAAA2/H,EAAAqnV,EAAAC,GAA2C,sBAAAA,GAAA,OAAAA,EAA+D,UAAAhxa,UAAA;AAA6E+wa,EAAA30d,UAAA8iB,OAAAxjB,OAAAs1d,KAAA50d,UAAA,CAAyEq2E,YAAA,CAAe34E,MAAAi3d,EAAAv+Y,YAAAhyB,mBAA0DthC,OAAAmhC,eAAA0wa,EAAA,aAA+Cv+Y,cAAoBw+Y,GAAAxnV,EAAAunV,EAAAC,EAAA,CAC5Y,SAAAxnV,EAAAzxI,EAAAiE,GAAyK,OAAxIwtI,EAAAtqH,OAAAuqH,eAAAvqH,OAAAuqH,eAAA7vI,OAAA,SAAA7B,EAAAiE,GAA2H,OAAjBjE,EAAA+6F,UAAA92F,EAAiBjE,CAAA,EAAayxI,EAAAzxI,EAAAiE,EAAA,CACzK,SAAA+tI,EAAAknV,GAAiC,IAAAC,EAGjC,WAAuC,uBAAArnV,kBAAAC,UAAA;AAAwE,GAAAD,QAAAC,UAAAs0I,KAAA;AAA0C,sBAAA78E,MAAA;AAA8C,IAAsF,OAAhF3oJ,QAAAx8C,UAAA0rI,QAAA/lI,KAAA8nI,QAAAC,UAAAlxF,QAAA,oBAAgF,CAAe,MAAAphD,GAAY,UAAxT;AAH8F,kBAAyC,IAAA4mB,EAAA6lE,EAAA0lD,EAAAsnV;AAA8C,GAAAC,EAAA,CAAiC,IAAAC,EAAAxnV,EAAAxyI,MAAAs7E;AAAmDr0D,EAAAyrH,QAAAC,UAAA7lD,EAAAl6E,UAAAond,EAAA,MAAkE/yc,EAAA6lE,EAAAn6E,MAAA3S,KAAA4S;AAAyC,OACpX,SAAA2nJ,EAAA3vJ,GAAkD,GAAAA,IAAA,WAAAo/H,EAAAp/H,IAAA,mBAAAA,GAA0E,OAAAA;AAAe,YAAAA,EAA4B,UAAAi+C,UAAA;AAAmF,OAAAspF,EAAAooB,EAAA,CAA1P,CADoXv6J,KAAAinB,EAAA,EAEpX,SAAAkrH,EAAAooB,GAAwC,YAAAA,EAAuB,UAAAnoB,eAAA;AAAyF,OAAAmoB,CAAA,CAExJ,SAAA/nB,EAAA5xI,GAAwL,OAA1J4xI,EAAAzqH,OAAAuqH,eAAAvqH,OAAAC,eAAAvlB,OAAA,SAAA7B,GAAuG,OAAAA,EAAA+6F,WAAA5zE,OAAAC,eAAApnB,EAAA,EAAmD4xI,EAAA5xI,EAAA,CACxL,SAAAopI,EAAAppI,GAAiD,OAAAopI,EAAA,mBAAA7uD,QAAA,iBAAAA,OAAA2c,SAAA,SAAAl3F,GAAoG,cAAAA,CAAA,EAAmB,SAAAA,GAAiB,OAAAA,GAAA,mBAAAu6E,QAAAv6E,EAAA06E,cAAAH,QAAAv6E,IAAAu6E,OAAAl2E,UAAA,gBAAArE,CAAA,EAAsHopI,EAAAppI,EAAA,CAC/S,SAAAmyI,EAAA9+D,EAAAkkZ,GAAkD,KAAAlkZ,aAAAkkZ,GAA0C,UAAAtva,UAAA,qCAC5F,SAAAoqF,EAAAzpI,EAAA8gD,GAA4C,QAAAhqD,EAAA,EAAgBA,EAAAgqD,EAAA/pD,OAAkBD,IAAA,CAAO,IAAA6pD,EAAAG,EAAAhqD;AAA2B6pD,EAAAf,WAAAe,EAAAf,eAAwDe,EAAAd,gBAAgC,UAAAc,MAAAkxB,aAAuDtzD,OAAAmhC,eAAA1/C,EAAAuud,EAAA5ta,EAAAlxB,KAAAkxB,EAAA,EAC/P,SAAA+oF,EAAAilV,EAAAE,EAAAkB,GAAwQ,OAA1MlB,GAAAplV,EAAAklV,EAAAlzd,UAAAozd,GAAsEkB,GAAAtmV,EAAAklV,EAAAoB,GAA8Dxxc,OAAAmhC,eAAAiva,EAAA,aAAkD98Y,cAAoB88Y,CAAA,CACxQ,SAAAJ,EAAAz/b,GAA+B,IAAAW,EAC/B,SAAArpB,GAAqC,cAAAo6H,EAAAp6H,IAAA,OAAAA,EAAA,OAAAA;AAAiE,IAAAood,EAAApod,EAAAurE,OAAAC;AAAsC,QAAA3pD,IAAAumc,EAAA,CAA0B,IAAApwT,EAAAowT,EAAAptd,KAAAgF,EAAA0I;AAA+C,cAAA0xH,EAAA49B,GAAA,OAAAA;AAA2C,UAAA/+G,UAAA,gDAAuE,OAAAlY,OAAA/gC,EAAA,CAAvU,CAD+B0oB;AAAuC,iBAAA0xG,EAAA/wG,KAAA0X,OAAA1X,EAAA,CAEtE,IAAA85b,EAAuBtnY,EAAQ,OAC/BqnY,EAAuBrnY,EAAQ,OAC/BonY,EAA2BpnY,EAAQ,MACnC6ia,EAAA,SAAApqe,GACA,QAAAnb,EAAA,GAAuBA,IAEvB,KADAmb,IAAA4mQ,iBACA,OAAA/hR,CAEA,EACAyE,EAAA,SAAA0W,GACA,IAAA4D,EAAA5D,EAAAgD,cAAAhD,EAAA1W;AACA,OAAAsa,GAAA,IAAAA,EAAAsvE,SAAAtvE,EAAAX,KAAAW,CACA,EACAyme,EAAA,KACAC,EAAA,SAAAtqe,EAAAqJ,EAAAk/B,GACA,IAAAyrB,EAAAq2a,MAAA5pf,SAAAmxF;AAGA,OAFA5d,EAAA8d,OAAA9xE,EAAAuoC,GAAAvoC,EAAAuzE,UAAAl3F,QACA23E,EAAA6d,SAAA7xE,EAAAqJ,GAAA,GACA2qD,CACA,EAIAu2a,EAAA,SAAAvqe,EAAA7P,EAAAq6e,EAAAC,GACA,OAAAD,IAAAE,EAAA1qe,EAAA7P,EAAAq6e,EAAAC,GAAA,IAAAC,EAAA1qe,EAAA7P,EAAAq6e,EAAAC,EAAA,GACA,EACAE,EAAA;AACA,SAAAD,EAAA1qe,EAAA7P,EAAAq6e,EAAAC,EAAAjrf,GAEA,IADA,IAAA28B,IACS,CACT,GAAAnc,GAAAwqe,GAAAr6e,GAAAs6e,EAAA;AACA,GAAAt6e,IAAA3Q,EAAA,IAAAgvY,EAAAxuX,IAAA,CACA,IAAA4D,EAAA5D,EAAA1W;AACA,IAAAsa,GAAA,GAAAA,EAAAsvE,UAAA03Z,EAAA5qe,IAAA2qe,EAAAxpe,KAAAnB,EAAAE,WAAA,SAAAF,EAAA+xI,gBAAA;AACA5hJ,EAAAi6e,EAAApqe,IAAAxgB,EAAA,OACAwgB,EAAA4D,CACA,KAAM,OAAA5D,EAAAkzE,SASN;AARA,IAAA0vE,EAAA5iJ,EAAAopM,WAAAj5M,GAAA3Q,EAAA;AACA,MAAAojK,EAAA1vE,UAAA,SAAA0vE,EAAA7Q,gBAAA,CACA,aAAA51H,EAAAymI,EAAAioV,kBAAA,IAAA1ud,OAAA,EAAAA,EAAA2ud,oBAA2G;AAA3G36e,GAAA3Q,CACA,MACAwgB,EAAA4iJ,EACAzyJ,EAAA3Q,EAAA,EAAAgvY,EAAAxuX,GAAA,CAIA,CACA,CACA,CACA,SAAAwuX,EAAAxuX,GACA,UAAAA,EAAAkzE,SAAAlzE,EAAAuzE,UAAAl3F,OAAA2jB,EAAAopM,WAAA/sN,MACA,CAyCA,SAAAuuf,EAAA9gH,GAEA,IADA,IAAAtjM,EACAhkC,EAAAsnO,EAAsBtnO,KAAKgkC,EAAAhkC,EAAAqoV,YAAAroV,IAAAl5J,YAC3B,OAAAk9L,KAAAxmL,MAAAwmL,EAAAxmL,KAAAmlJ,UAAAqhC,EAAAsjM,QAAAtjM,EAAAo8M,YAAA9Y,EACA,CACA,IAAAihH,EAAA,SAAAC,GACA,OAAAA,EAAAC,WAAAV,EAAAS,EAAAC,UAAAD,EAAAvuO,YAAAuuO,EAAAE,WAAAF,EAAAxuO,aACA;AACA,SAAA2uO,EAAAzgf,EAAAqqB,GACA,IAAAvvB,EAAA/E,SAAAoyF,YAAA;AAIA,OAHArtF,EAAAsyJ,UAAA,iBACAtyJ,EAAAkF,UACAlF,EAAAuvB,IAAAvvB,EAAA+M,KAAAwiB,EACAvvB,CACA,CAwBA,IAAAm+E,EAAA,oBAAAzE,oBAAA,KACAz4D,EAAA,oBAAAhmB,kBAAA,KACA2qf,EAAAzna,KAAAxE,WAAA,GACAksa,EAAA,cAAA9uf,KAAA6uf,GACAE,EAAA,UAAA/uf,KAAA6uf,GACAG,EAAA,wCAAuChvf,KAAA6uf,GACvC5xe,KAAA8xe,GAAAC,GAAAF,GACAG,EAAAF,EAAA7qf,SAAAgrf,aAAAF,KAAA,GAAAF,KAAA,KACAK,GAAAlye,GAAA,gBAAA2H,KAAAiqe;AACAM,IAAA,iBAAAnvf,KAAA6uf,IAAA;AACA,IAAAO,GAAAnye,GAAA,gBAAAjd,KAAA6uf,GACAQ,IAAAD,EACAE,EAAAF,KAAA,KACAG,GAAAtye,KAAAmqE,GAAA,iBAAAxiE,KAAAwiE,EAAAooa,QACAC,EAAAF,IAAA,cAAA3qe,KAAAiqe,MAAAzna,KAAA21K,eAAA,GACAohO,EAAAsxB,KAAAroa,GAAA,MAAAxiE,KAAAwiE,EAAA3pE,UACA2gd,IAAAh3Y,GAAA,MAAAxiE,KAAAwiE,EAAA3pE,UACAiye,EAAA,aAAA9qe,KAAAiqe,GACAc,IAAAzle,GAAA,wBAAAA,EAAArd,gBAAAK,MACA0if,EAAAD,IAAA,uBAAA3vf,KAAA2iF,UAAAC,YAAA;AACA,SAAAita,EAAA3le,GACA,IAAA4le,EAAA5le,EAAAlG,aAAAkG,EAAAlG,YAAAoD;AACA,OAAA0oe,EAAA,CACA3if,KAAA,EACAI,MAAAuif,EAAAxif,MACAF,IAAA,EACAC,OAAAyif,EAAAjve,QAEA,CACA1T,KAAA,EACAI,MAAA2c,EAAArd,gBAAAkd,YACA3c,IAAA,EACAC,OAAA6c,EAAArd,gBAAAmd,aAEA,CACA,SAAAnL,EAAA3c,EAAAic,GACA,uBAAAjc,MAAAic,EACA,CACA,SAAAsK,EAAAhF,GACA,IAAA7C,EAAA6C,EAAA9W,wBACA6iK,EAAA5uJ,EAAAtT,MAAAmW,EAAAmE,aAAA,EACA6nJ,EAAA7uJ,EAAAC,OAAA4C,EAAAoE,cAAA;AACA,OACA1a,KAAAyT,EAAAzT,KACAI,MAAAqT,EAAAzT,KAAAsW,EAAAsG,YAAAylJ,EACApiK,IAAAwT,EAAAxT,IACAC,OAAAuT,EAAAxT,IAAAqW,EAAAuG,aAAAylJ,EAEA,CACA,SAAAsgV,GAAAn5a,EAAAh2D,EAAAove,GACA,GAAAC,GAAArve,IAAA,GAAAA,EAAAzT,KAIA,IAHA,IAAA+if,EAAAt5a,EAAAslU,SAAA,sBACAi0G,EAAAv5a,EAAAslU,SAAA,mBACAhyX,EAAA0sD,EAAA22T,IAAAxpX,cACAsD,EAAA2oe,GAAAp5a,EAAA22T,IACAlmX,GACA,MAAAA,EAAAsvE,SAAA,CAIA,IAAAuxE,EAAA7gJ,EACA+oe,EAAAloV,GAAAh+I,EAAApd,KACAujf,EAAAD,EAAAP,EAAA3le,GAAAzB,EAAAy/I,GACAooV,EAAA,EACAC,EAAA;AAGA,GAFA3ve,EAAAxT,IAAAijf,EAAAjjf,IAAAyR,EAAAqxe,EAAA,OAAAK,IAAAF,EAAAjjf,IAAAwT,EAAAxT,IAAAyR,EAAAsxe,EAAA,QAAqIvve,EAAAvT,OAAAgjf,EAAAhjf,OAAAwR,EAAAqxe,EAAA,YAAAK,EAAA3ve,EAAAvT,OAAAuT,EAAAxT,IAAAijf,EAAAhjf,OAAAgjf,EAAAjjf,IAAAwT,EAAAxT,IAAAyR,EAAAsxe,EAAA,OAAAE,EAAAjjf,IAAAwT,EAAAvT,OAAAgjf,EAAAhjf,OAAAwR,EAAAsxe,EAAA,WACrIvve,EAAAzT,KAAAkjf,EAAAljf,KAAA0R,EAAAqxe,EAAA,QAAAI,IAAAD,EAAAljf,KAAAyT,EAAAzT,KAAA0R,EAAAsxe,EAAA,SAA2Ivve,EAAArT,MAAA8if,EAAA9if,MAAAsR,EAAAqxe,EAAA,WAAAI,EAAA1ve,EAAArT,MAAA8if,EAAA9if,MAAAsR,EAAAsxe,EAAA,UAC3IG,GAAAC,EACA,GAAAH,EACAlme,EAAAlG,YAAA+sF,SAAAu/Y,EAAAC;IACQ,CACR,IAAAl6E,EAAAnuQ,EAAAl7J,WACAspa,EAAApuQ,EAAA1+J;AACA+mf,IAAAroV,EAAA1+J,WAAA+mf,GACAD,IAAApoV,EAAAl7J,YAAAsjf;AACA,IAAAE,EAAAtoV,EAAAl7J,WAAAqpa,EACAo6E,EAAAvoV,EAAA1+J,UAAA8sa;AACA11Z,EAAA,CACAzT,KAAAyT,EAAAzT,KAAAqjf,EACApjf,IAAAwT,EAAAxT,IAAAqjf,EACAljf,MAAAqT,EAAArT,MAAAijf,EACAnjf,OAAAuT,EAAAvT,OAAAojf,EAEA,CAEA,IAAA52c,EAAAu2c,EAAA,QAAAzre,iBAAA0C,GAAA8D;AACA,sBAAAvG,KAAAi1B,GAAA;AACAxyB,EAAA,YAAAwyB,EAAAxyB,EAAA9E,aAAAxV,EAAAsa,EA5BA,MAFAA,EAAAta,EAAAsa,EAgCA,CAqBA,SAAAqpe,GAAAnjH,GAGA,IAFA,IAAA/jV,EAAA,GACAt/B,EAAAqjX,EAAAxpX,cACAkiJ,EAAAsnO,EAAsBtnO,IACtBz8G,EAAAriD,KAAA,CACAomY,IAAAtnO,EACA74J,IAAA64J,EAAAz8J,UACA2D,KAAA84J,EAAAj5J,aAEAugY,GAAArjX,GAN2B+7I,EAAAl5J,EAAAk5J,IAQ3B,OAAAz8G,CACA,CAQA,SAAAmnc,GAAAnnc,EAAAonc,GACA,QAAA/wf,EAAA,EAAkBA,EAAA2pD,EAAA1pD,OAAkBD,IAAA,CACpC,IAAAgxf,EAAArnc,EAAA3pD,GACA0tY,EAAAsjH,EAAAtjH,IACAngY,EAAAyjf,EAAAzjf,IACAD,EAAA0jf,EAAA1jf;AACAogY,EAAA/jY,WAAA4D,EAAAwjf,IAAArjH,EAAA/jY,UAAA4D,EAAAwjf,GACArjH,EAAAvgY,YAAAG,IAAAogY,EAAAvgY,WAAAG,EACA,CACA,CACA,IAAA2jf,GAAA;AAkBA,SAAAC,GAAAtte,EAAAnC,GAQA,IAPA,IAAA+7D,EAEA2za,EAIAC,EAAAC,EALAC,EAAA,IAEA5ze,EAAA,EACA6ze,EAAA9ve,EAAAlU,IACAikf,EAAA/ve,EAAAlU,IAEAi5J,EAAA5iJ,EAAAzd,WAAAsrf,EAAA,EAAoDjrV,EAAOA,IAAAj9E,YAAAkoa,IAAA,CAC3D,IAAA/xe,OAAA;AACA,MAAA8mJ,EAAA1vE,SAAAp3E,EAAA8mJ,EAAAx5I;IAA4D,OAAAw5I,EAAA1vE,SAAwE;AAAxEp3E,EAAAwue,EAAA1nV,GAAAx5I,gBAAwE,CACpI,QAAAhtB,EAAA,EAAoBA,EAAA0f,EAAAzf,OAAkBD,IAAA,CACtC,IAAA+gB,EAAArB,EAAA1f;AACA,GAAA+gB,EAAAxT,KAAAgkf,GAAAxwe,EAAAvT,QAAAgkf,EAAA,CACAD,EAAA9uf,KAAA+b,IAAAuC,EAAAvT,OAAA+jf,GACAC,EAAA/uf,KAAA8b,IAAAwC,EAAAxT,IAAAikf;AACA,IAAAvnV,EAAAlpJ,EAAAzT,KAAAmU,EAAAnU,KAAAyT,EAAAzT,KAAAmU,EAAAnU,KAAAyT,EAAArT,MAAA+T,EAAAnU,KAAAmU,EAAAnU,KAAAyT,EAAArT,MAAA;AACA,GAAAu8J,EAAAqnV,EAAA,CACA9za,EAAAgpF,EACA8qV,EAAArnV,EACAknV,EAAAlnV,GAAA,GAAAzsF,EAAAsZ,SAAA,CACAxpF,KAAAyT,EAAArT,MAAA+T,EAAAnU,KAAAyT,EAAArT,MAAAqT,EAAAzT,KACAC,IAAAkU,EAAAlU,KACYkU,EACZ,GAAA+kJ,EAAA1vE,UAAAmzE,IAAAvsJ,EAAA+ze,GAAAhwe,EAAAnU,OAAAyT,EAAAzT,KAAAyT,EAAArT,OAAA;AACA,QACA,CACA,MAAQqT,EAAAxT,IAAAkU,EAAAlU,MAAA6jf,GAAArwe,EAAAzT,MAAAmU,EAAAnU,MAAAyT,EAAArT,OAAA+T,EAAAnU,OACR8jf,EAAA5qV,EACA6qV,EAAA,CACA/jf,KAAA7K,KAAA+b,IAAAuC,EAAAzT,KAAA7K,KAAA8b,IAAAwC,EAAArT,MAAA+T,EAAAnU,OACAC,IAAAwT,EAAAxT;CAGAiwE,IAAA/7D,EAAAnU,MAAAyT,EAAArT,OAAA+T,EAAAlU,KAAAwT,EAAAxT,KAAAkU,EAAAnU,MAAAyT,EAAAzT,MAAAmU,EAAAlU,KAAAwT,EAAAvT,UAAAkQ,EAAA+ze,EAAA,EACA,CACA,CAMA,OALAj0a,GAAA4za,IACA5za,EAAA4za,EACAD,EAAAE,EACAC,EAAA,GAEA9za,GAAA,GAAAA,EAAAsZ,SAOA,SAAAlzE,EAAAnC,GAIA,IAHA,IAEAkF,EAFA+P,EAAA9S,EAAAuzE,UAAAl3F,OACA23E,EAAAvzE,SAAAmxF,cAEAx1F,EAAA,EAAkBA,EAAA02B,EAAS12B,IAAA,CAC3B43E,EAAA8d,OAAA9xE,EAAA5jB,EAAA,GACA43E,EAAA6d,SAAA7xE,EAAA5jB;AACA,IAAA+gB,EAAA2we,GAAA95a,EAAA;AACA,GAAA72D,EAAAxT,KAAAwT,EAAAvT,QACAmkf,GAAAlwe,EAAAV,GAAA,CACA4F,EAAA,CACA/C,OACAlG,OAAA1d,GAAAyhB,EAAAnU,OAAAyT,EAAAzT,KAAAyT,EAAArT,OAAA;AAEA,KACA,CACA,CAEA,OADAkqE,EAAAuxQ,SACAxiU,GAAA,CACA/C,OACAlG,OAAA,EAEA,CAtBA,CAPA8/D,EAAA2za,IACA3za,GAAA8za,GAAA,GAAA9za,EAAAsZ,SAAA,CACAlzE,OACAlG,UAEAwze,GAAA1za,EAAA2za,EACA,CAwBA,SAAAQ,GAAAlwe,EAAAV,GACA,OAAAU,EAAAnU,MAAAyT,EAAAzT,KAAA,GAAAmU,EAAAnU,MAAAyT,EAAArT,MAAA,GAAA+T,EAAAlU,KAAAwT,EAAAxT,IAAA,GAAAkU,EAAAlU,KAAAwT,EAAAvT,OAAA,CACA,CAsCA,SAAA6nJ,GAAAjzI,EAAAX,EAAA8gP,GACA,IAAA7rO,EAAAtU,EAAA4qM,WAAA/sN;AACA,GAAAy2B,GAAA6rO,EAAAh1P,IAAAg1P,EAAA/0P,OACA,QAAAokf,EAAAnvf,KAAA+b,IAAA,EAAA/b,KAAA8b,IAAAmY,EAAA,EAAAj0B,KAAAE,MAAA+zB,GAAAjV,EAAAlU,IAAAg1P,EAAAh1P,MAAAg1P,EAAA/0P,OAAA+0P,EAAAh1P,MAAA,IAAAvN,EAAA4xf,IAAyI,CACzI,IAAAprV,EAAApkJ,EAAA4qM,WAAAhtN;AACA,MAAAwmK,EAAA1vE,SAEA,IADA,IAAAp3E,EAAA8mJ,EAAAx5I,iBACAq4D,EAAA,EAAwBA,EAAA3lE,EAAAzf,OAAkBolF,IAAA,CAC1C,IAAAtkE,EAAArB,EAAA2lE;AACA,GAAAssa,GAAAlwe,EAAAV,GAAA,OAAAs0I,GAAAmR,EAAA/kJ,EAAAV,EACA,CAEA,IAAA/gB,KAAA,GAAA02B,IAAAk7d,EAAA,KACA,CAEA,OAAAxve,CACA,CACA,SAAAyve,GAAA96a,EAAAt1D,GACA,IACAmC,EADAyG,EAAA0sD,EAAA22T,IAAAxpX,cAEAxG,EAAA,EACAwyb,EArTA,SAAA7lb,EAAA3jB,EAAAwK,GACA,GAAAmZ,EAAAyne,uBACA,IACA,IAAA93c,EAAA3vB,EAAAyne,uBAAAprf,EAAAwK;AACA,GAAA8oC,EAAA,OACAp2B,KAAAo2B,EAAA+3c,WACAr0e,OAAAjb,KAAA8b,IAAA6zX,EAAAp4V,EAAA+3c,YAAA/3c,EAAAt8B,QAEA,CAAM,MAAAxO,GAAA,CAEN,GAAAmb,EAAA2ne,oBAAA,CACA,IAAAp6a,EAAAvtD,EAAA2ne,oBAAAtrf,EAAAwK;AACA,GAAA0mE,EAAA,OACAh0D,KAAAg0D,EAAAq6a,eACAv0e,OAAAjb,KAAA8b,IAAA6zX,EAAAx6T,EAAAq6a,gBAAAr6a,EAAAhkC,aAEA,CACA,CAjBA,CAqTAvpB,EAAA5I,EAAAnU,KAAAmU,EAAAlU;AACA2ic,IACAtsb,EAAAssb,EAAAtsb,KACAlG,EAAAwyb,EAAAxyb;AAEA,IACAs8B,EADAquH,GAAAtxF,EAAA7oD,KAAAmnI,iBAAAt+E,EAAA7oD,KAAA7D,GAAAgrI,iBAAA5zI,EAAAnU,KAAAmU,EAAAlU;AAEA,IAAA86J,IAAAtxF,EAAA22T,IAAAx3X,SAAA,GAAAmyJ,EAAAvxE,SAAAuxE,EAAAn7J,WAAAm7J,GAAA,CACA,IAAAk6F,EAAAxrL,EAAA22T,IAAA5gY;AACA,IAAA6kf,GAAAlwe,EAAA8gP,GAAA;AAEA,KADAl6F,EAAAhT,GAAAt+E,EAAA22T,IAAAjsX,EAAA8gP,IACA,WACA,CACA,GAAAmtP,EACA,QAAAnrf,EAAA8jK,EAAsBzkJ,GAAArf,EAAWA,EAAA2I,EAAA3I,KAAAqN,YAAAgS,OAAAuN;AAGjC,GADAk3I,EA1EA,SAAAqlO,EAAAjsX,GACA,IAAA+F,EAAAkmX,EAAAxgY;AACA,OAAAsa,GAAA,QAAAzC,KAAAyC,EAAA1D,WAAArC,EAAAnU,KAAAogY,EAAA5gY,wBAAAQ,KAAAka,EACAkmX,CACA,CAJA,CA0EArlO,EAAA5mJ,GACAmC,EAAA,CACA,GAAA0re,GAAA,GAAA1re,EAAAkzE,WACAp5E,EAAAjb,KAAA8b,IAAAb,EAAAkG,EAAAopM,WAAA/sN,SACA2jB,EAAAopM,WAAA/sN,OAAA,CACA,IACAiyf,EADAv5Z,EAAA/0E,EAAAopM,WAAAtvM;AAEA,OAAAi7E,EAAA70E,WAAAoue,EAAAv5Z,EAAA7rF,yBAAAY,OAAA+T,EAAAnU,MAAA4kf,EAAA1kf,OAAAiU,EAAAlU,KAAAmQ,GACA,CAEA,IAAAyyP;AACA2/O,GAAApye,GAAA,GAAAkG,EAAAkzE,UAAA,IAAAq5K,EAAAvsP,EAAAopM,WAAAtvM,EAAA,IAAAo5E,UAAA,SAAAq5K,EAAAx6G,iBAAAw6G,EAAArjQ,wBAAAS,KAAAkU,EAAAlU,KAAAmQ,IACAkG,GAAAmzD,EAAA22T,KAAAhwX,GAAAkG,EAAAopM,WAAA/sN,OAAA,MAAA2jB,EAAA08P,UAAAxpL,UAAAr1E,EAAAlU,IAAAqW,EAAA08P,UAAAxzQ,wBAAAU,OAAAwsC,EAAA+8B,EAAAp1D,MAAA0I,IAAA82D,QAAApjE,KAAkM,GAAAL,GAAA,GAAAkG,EAAAkzE,UAAA,MAAAlzE,EAAAopM,WAAAtvM,EAAA,GAAAoG,WAAAk2B,EAtElM,SAAA+8B,EAAAnzD,EAAAlG,EAAA+D,GAEA,IADA,IAAA0we,GAAA,EACA/rV,EAAAxiJ,EAAAwue,KACAhsV,GAAArvF,EAAA22T,KADyC,CAEzC,IAAAtjM,EAAArzH,EAAAivU,QAAAqsG,YAAAjsV,MACArlJ,OAAA;AACA,IAAAqpL,EAAA;AACA,MAAAA,EAAAsjM,IAAA52S,WAAAszG,EAAAxmL,KAAAmlJ,SAAAqhC,EAAA5iL,SAAA4iL,EAAAo8M,eAAAzlY,EAAAqpL,EAAAsjM,IAAA5gY,yBAAAW,OAAAsT,EAAAC,UACAopL,EAAAxmL,KAAAmlJ,SAAAqhC,EAAA5iL,SAAA,wBAAAzC,KAAAqlL,EAAAsjM,IAAA5pX,aACAsue,GAAArxe,EAAAzT,KAAAmU,EAAAnU,MAAAyT,EAAAxT,IAAAkU,EAAAlU,IAAA4kf,EAAA/nT,EAAAkoT,YAAyGF,GAAArxe,EAAArT,MAAA+T,EAAAnU,MAAAyT,EAAAvT,OAAAiU,EAAAlU,OAAA4kf,EAAA/nT,EAAA6lN,UACzGmiG,OAEAhoT,EAAAo8M,YAAA2rG,EAAA,IAAA/nT,EAAAxmL,KAAAymX,QAEA,OADAjgM,EAAAxmL,KAAAmlJ,QAAAtnJ,EAAAlU,KAAAwT,EAAAxT,IAAAwT,EAAAvT,QAAA,EAAAiU,EAAAnU,MAAAyT,EAAAzT,KAAAyT,EAAArT,OAAA,GACA08L,EAAAkoT,UAAAloT,EAAA6lN;AAGA7pP,EAAAgkC,EAAAsjM,IAAAxgY,UACA,CACA,OAAAilf,GAAA,EAAAA,EAAAp7a,EAAAivU,QAAAusG,WAAA3ue,EAAAlG,GAAA,EACA,CApBA,CAsEkMq5D,EAAAnzD,EAAAlG,EAAA+D,GAClM,CACA,MAAAu4B,MAnFA,SAAA+8B,EAAAsxF,EAAA5mJ,GACA,IAAA+we,EAAAtB,GAAA7oV,EAAA5mJ,GACAmC,EAAA4ue,EAAA5ue,KACAlG,EAAA80e,EAAA90e,OACA82X,GAAA;AACA,MAAA5wX,EAAAkzE,WAAAlzE,EAAAzd,WAAA,CACA,IAAA4a,EAAA6C,EAAA9W;AACA0nY,EAAAzzX,EAAAzT,MAAAyT,EAAArT,OAAA+T,EAAAnU,MAAAyT,EAAAzT,KAAAyT,EAAArT,OAAA,MACA,CACA,OAAAqpE,EAAAivU,QAAAusG,WAAA3ue,EAAAlG,EAAA82X,EACA,CAVA,CAmFAz9T,EAAAsxF,EAAA5mJ;AACA,IAAA2oL,EAAArzH,EAAAivU,QAAAqsG,YAAAhqV;AACA,OACAruH,MACA0va,OAAAt/Q,IAAAqoT,WAAAroT,EAAAtoB,QAAA,EAEA,CACA,SAAAsuU,GAAArve,GACA,OAAAA,EAAAxT,IAAAwT,EAAAvT,QAAAuT,EAAAzT,KAAAyT,EAAArT,KACA,CACA,SAAAgkf,GAAAxof,EAAAsrY,GACA,IAAA90X,EAAAxW,EAAA8jB;AACA,GAAAtN,EAAAzf,OAAA,CACA,IAAAwxC,EAAA/xB,EAAA80X,EAAA,IAAA90X,EAAAzf,OAAA;AACA,GAAAmwf,GAAA3+c,GAAA,OAAAA,CACA,CACA,OAAAl+B,MAAA5O,UAAAoxB,KAAAzrB,KAAAoV,EAAA0we,KAAAlnf,EAAA4D,uBACA,CACA,IAAA4lf,GAAA;AACA,SAAAC,GAAA57a,EAAA/8B,EAAA17B,GACA,IAAAs0e,EAAA77a,EAAAivU,QAAA6sG,WAAA74c,EAAA17B,EAAA,QACAsF,EAAAgve,EAAAhve,KACAlG,EAAAk1e,EAAAl1e,OACA2qX,EAAAuqH,EAAAvqH,KACAyqH,EAAAhD,GAAAR;AACA,MAAA1re,EAAAkzE,SAAA,CACA,IAAAg8Z,IAAAJ,GAAA3te,KAAAnB,EAAAuzE,aAAA74E,EAAA,EAAAZ,KAAAkG,EAAAuzE,UAAAl3F,QAUM,CACN,IAAAgtB,EAAAvP,EACAyuC,EAAAzuC,EACAq1e,EAAAz0e,EAAA;AAYA,OAXAA,EAAA,IAAAZ,GACAyuC,IACA4mc,GAAA,GACQz0e,GAAA,GAAAZ,GAAAkG,EAAAuzE,UAAAl3F,QACRgtB,IACA8le,EAAA,GACQz0e,EAAA,EACR2O,IAEAk/B,IAEA6mc,GAAAtB,GAAAxD,EAAAtqe,EAAAqJ,EAAAk/B,GAAA4mc,KAAA,EACA,CAzBA,IAAAhye,EAAA2we,GAAAxD,EAAAtqe,EAAAlG,KAAAY;AACA,GAAAgxe,GAAA5xe,GAAA,KAAAqH,KAAAnB,EAAAuzE,UAAAz5E,EAAA,KAAAA,EAAAkG,EAAAuzE,UAAAl3F,OAAA,CACA,IAAAgzf,EAAAvB,GAAAxD,EAAAtqe,EAAAlG,EAAA,EAAAA,EAAA;AACA,GAAAu1e,EAAA1lf,KAAAwT,EAAAxT,IAAA,CACA,IAAA2lf,EAAAxB,GAAAxD,EAAAtqe,EAAAlG,IAAA;AACA,GAAAw1e,EAAA3lf,KAAAwT,EAAAxT,IAAA,OAAAylf,GAAAE,IAAA5lf,KAAA2lf,EAAA3lf,KACA,CACA,CACA,OAAAyT,CAkBA,CAEA,IADAg2D,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B,GAAAquV,GAAA,IACA7gX,OAAAm2X,cAAA,CACA,SAAAtV,GAAA3qX,IAAAY,EAAA,GAAAZ,GAAA00X,EAAAxuX,IAAA,CACA,IAAA84J,EAAA94J,EAAAopM,WAAAtvM,EAAA;AACA,MAAAg/J,EAAA5lF,SAAA,OAAAq8Z,GAAAz2U,EAAA5vK,2BACA,CACA,SAAAu7X,GAAA3qX,EAAA00X,EAAAxuX,GAAA,CACA,IAAA+4J,EAAA/4J,EAAAopM,WAAAtvM;AACA,MAAAi/J,EAAA7lF,SAAA,OAAAq8Z,GAAAx2U,EAAA7vK,2BACA,CACA,OAAAqmf,GAAAvve,EAAA9W,wBAAAwR,GAAA,EACA,CACA,SAAA+pX,GAAA3qX,IAAAY,EAAA,GAAAZ,GAAA00X,EAAAxuX,IAAA,CACA,IAAAwve,EAAAxve,EAAAopM,WAAAtvM,EAAA,GACAxU,EAAA,GAAAkqf,EAAAt8Z,SAAAo3Z,EAAAkF,EAAAhhH,EAAAghH,IAAAN,EAAA,SAAAM,EAAAt8Z,UAAA,MAAAs8Z,EAAAtve,UAAAsve,EAAA7pa,YAAA,KAAA6pa;AACA,GAAAlqf,EAAA,OAAA8pf,GAAAtB,GAAAxof,EAAA,MACA,CACA,SAAAm/X,GAAA3qX,EAAA00X,EAAAxuX,GAAA,CAEA,IADA,IAAAyod,EAAAzod,EAAAopM,WAAAtvM,GACA2ud,EAAAoiB,YAAApiB,EAAAoiB,WAAA4E,iBAAAhnB,IAAA9iZ;AACA,IAAA2iH,EAAAmgS,EAAA,GAAAA,EAAAv1Y,SAAAo3Z,EAAA7hB,EAAA,EAAAymB,EAAA,QAAAzmB,EAAAv1Y,SAAAu1Y,EAAA;AACA,GAAAngS,EAAA,OAAA8mT,GAAAtB,GAAAxlT,GAAA,MACA,CACA,OAAA8mT,GAAAtB,GAAA,GAAA9te,EAAAkzE,SAAAo3Z,EAAAtqe,MAAAtF,MAAA,EACA,CACA,SAAA00e,GAAAjye,EAAAzT,GACA,MAAAyT,EAAAtT,MAAA,OAAAsT;AACA,IAAAra,EAAA4G,EAAAyT,EAAAzT,KAAAyT,EAAArT;AACA,OACAH,IAAAwT,EAAAxT,IACAC,OAAAuT,EAAAvT,OACAF,KAAA5G,EACAgH,MAAAhH,EAEA,CACA,SAAAysf,GAAApye,EAAAxT,GACA,MAAAwT,EAAAC,OAAA,OAAAD;AACA,IAAA7P,EAAA3D,EAAAwT,EAAAxT,IAAAwT,EAAAvT;AACA,OACAD,IAAA2D,EACA1D,OAAA0D,EACA5D,KAAAyT,EAAAzT,KACAI,MAAAqT,EAAArT,MAEA,CACA,SAAA4lf,GAAAv8a,EAAAp1D,EAAA/V,GACA,IAAA2nf,EAAAx8a,EAAAp1D,MACAu9I,EAAAnoF,EAAA7oD,KAAAxf;AACA6kf,GAAA5xe,GAAAo1D,EAAA4tU,YAAAhjY,GACAu9I,GAAAnoF,EAAA22T,KAAA32T,EAAAhmE;AACA,IACA,OAAAnF,GACA,CAAI,QACJ2nf,GAAA5xe,GAAAo1D,EAAA4tU,YAAA4uG,GACAr0V,GAAAnoF,EAAA22T,KAAAxuO,KAAAnuJ,OACA,CACA,CA4BA,IAAAyif,GAAA,kBA+BAC,GAAA,KACAC,GAAA,KACA3ne,MAWA4ne,GAAA,WACA,SAAAA,EAAAnse,EAAAtM,EAAAwyX,EAAA8Y,GACA/zQ,EAAA/yI,KAAAi0f,GACAj0f,KAAA8nB,SACA9nB,KAAAwb,WACAxb,KAAAguY,MACAhuY,KAAA8mZ,aACA9mZ,KAAAk0f,MAXA,EAYAlmH,EAAA+gH,WAAA/uf,IACA,CAqaA,OApaAkzI,EAAA+gX,EAAA,EACAh7d,IAAA,gBACAt2B,MAAA,SAAAsrU,GACA,QACA,GACG,CACHh1S,IAAA,cACAt2B,MAAA,SAAA07G,GACA,QACA,GACG,CACHplF,IAAA,cACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,GACA,QACA,GACG,CACHn7d,IAAA,cACAt2B,MAAA,SAAAyhB,GACA,QACA,GACG,CACH6U,IAAA,YACAt2B,MAAA,SAAAsjL,GACA,WACA,GACG,CACHhtJ,IAAA,YACAt2B,MAAA,SAAA+G,GACA,QACA,GACG,CACHuvB,IAAA,OACA3M,IAAA,WAEA,IADA,IAAAjO,EAAA,EACA/d,EAAA,EAAsBA,EAAAN,KAAAwb,SAAAjb,OAA0BD,IAAA+d,GAAAre,KAAAwb,SAAAlb,GAAA+d;AAChD,OAAAA,CACA,GACG,CACH4a,IAAA,SACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,UACAt2B,MAAA,WACA3C,KAAA8nB,YAAA2J,EACAzxB,KAAAguY,IAAA+gH,YAAA/uf,YAAAguY,IAAA+gH,gBAAAt9d;AACA,QAAAnxB,EAAA,EAAsBA,EAAAN,KAAAwb,SAAAjb,OAA0BD,IAAAN,KAAAwb,SAAAlb,GAAA88E,SAChD,GACG,CACHnkD,IAAA,iBACAt2B,MAAA,SAAAmkK,GACA,QAAAxmK,EAAA,EAAAg6C,EAAAt6C,KAAA+yf,YAA8Czyf,IAAA,CAC9C,IAAAomK,EAAA1mK,KAAAwb,SAAAlb;AACA,GAAAomK,GAAAI,EAAA,OAAAxsH;AACAA,GAAAosH,EAAAroJ,IACA,CACA,GACG,CACH4a,IAAA,YACA3M,IAAA,WACA,OAAAtsB,KAAA8nB,OAAAuse,eAAAr0f,KACA,GACG,CACHi5B,IAAA,aACA3M,IAAA,WACA,OAAAtsB,KAAA8nB,OAAA9nB,KAAA8nB,OAAAuse,eAAAr0f,WAAAoiL,OAAA,CACA,GACG,CACHnpJ,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAA4yf,UAAA5yf,KAAAqe,IACA,GACG,CACH4a,IAAA,WACA3M,IAAA,WACA,OAAAtsB,KAAA+yf,WAAA/yf,KAAAqe,KAAA,EAAAre,KAAAoiL,MACA,GACG,CACHnpJ,IAAA,kBACAt2B,MAAA,SAAAqrY,EAAAhwX,EAAA82X,GACA,GAAA90Y,KAAA8mZ,YAAA9mZ,KAAA8mZ,WAAAtwY,SAAA,GAAAw3X,EAAA52S,SAAA42S,IAAAxgY,YAAA,CACA,GAAAsnY,EAAA,GACA,IAAAw/G,EAAA5pT;AACA,GAAAsjM,GAAAhuY,KAAA8mZ,WACAwtG,EAAAtmH,EAAA1gL,WAAAtvM,EAAA;IACY,CACZ,KAAAgwX,EAAAxgY,YAAAxN,KAAA8mZ,YAAA9Y,IAAAxgY;AACA8mf,EAAAtmH,EAAAljH,eACA,CACA,KAAAwpO,MAAA5pT,EAAA4pT,EAAAvF,aAAArkT,EAAA5iL,QAAA9nB,OAAAs0f,IAAAxpO;AACA,OAAAwpO,EAAAt0f,KAAAq0f,eAAA3pT,KAAArsL,KAAAre,KAAA+yf,UACA,CACA,IAAAwB,EAAAC;AACA,GAAAxmH,GAAAhuY,KAAA8mZ,WACAytG,EAAAvmH,EAAA1gL,WAAAtvM;IACY,CACZ,KAAAgwX,EAAAxgY,YAAAxN,KAAA8mZ,YAAA9Y,IAAAxgY;AACA+mf,EAAAvmH,EAAAnkT,WACA,CACA,KAAA0qa,MAAAC,EAAAD,EAAAxF,aAAAyF,EAAA1se,QAAA9nB,OAAAu0f,IAAA1qa;AACA,OAAA0qa,EAAAv0f,KAAAq0f,eAAAG,GAAAx0f,KAAAy0f,QAEA,CACA,IAAAphH;AACA,GAAArF,GAAAhuY,KAAAguY,KAAAhuY,KAAA8mZ,WACAzT,EAAAr1X,EAAAswe,EAAAtuf,KAAA8mZ;KACQ,GAAA9mZ,KAAA8mZ,YAAA9mZ,KAAA8mZ,YAAA9mZ,KAAAguY,KAAAhuY,KAAAguY,IAAAx3X,SAAAxW,KAAA8mZ,YACRzT,EAAA,EAAArF,EAAAkgG,wBAAAlue,KAAA8mZ;KACQ,GAAA9mZ,KAAAguY,IAAAvnY,WAAA,CACR,MAAAuX,EAAA,QAAA0zB,EAAAs8V,GAAiDt8V,IAAAlkC,WAAA,CACjD,GAAAkkC,GAAA1xC,KAAAguY,IAAA,CACAqF;AACA,KACA,CACA,GAAA3hW,EAAAo5O,gBAAA,KACA,CACA,SAAAuoH,GAAAr1X,GAAAgwX,EAAA1gL,WAAA/sN,OAAA,QAAA0wN,EAAA+8K,GAAuF/8K,IAAAzjN,WAAA,CACvF,GAAAyjN,GAAAjxN,KAAAguY,IAAA,CACAqF;AACA,KACA,CACA,GAAApiL,EAAApnI,YAAA,KACA,CACA,CACA,OAAAwpT,GAAAyB,EAAA,EAAA90Y,KAAAy0f,SAAAz0f,KAAA+yf,UACA,GACG,CACH95d,IAAA,cACAt2B,MAAA,SAAAqrY,GAEA,IADA,IAAA0mH,EAAA9hf,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAm/B,KAAA20H,EAAAsnO,EAAwCtnO,EAAKA,IAAAl5J,WAAA,CAC7C,IAAAk9L,EAAA1qM,KAAA20f,QAAAjuV,GACAiyT,OAAA;AACA,GAAAjuR,KAAAgqT,GAAAhqT,EAAAxmL,MAAA,CACA,IAAA6tB,KAAA4mb,EAAAjuR,EAAAiuR,WAAA,GAAAA,EAAAvhY,SAAAuhY,EAAAnid,SAAA,GAAAw3X,EAAA52S,SAAA42S,IAAAxgY,YAAAmrd,GAAA3qF,GAAyK,OAAAtjM;AAAzK34J,IACA,CACA,CACA,GACG,CACH9Y,IAAA,UACAt2B,MAAA,SAAAqrY,GAEA,IADA,IAAAtjM,EAAAsjM,EAAA+gH,WACAroV,EAAAgkC,EAA2BhkC,EAAKA,IAAA5+I,OAAA,GAAA4+I,GAAA1mK,KAAA,OAAA0qM,CAChC,GACG,CACHzxK,IAAA,aACAt2B,MAAA,SAAAqrY,EAAAhwX,EAAA82X,GACA,QAAAg/E,EAAA9lF,EAA2B8lF,EAAMA,IAAAtmd,WAAA,CACjC,IAAAk9L,EAAA1qM,KAAA20f,QAAA7gC;AACA,GAAAppR,EAAA,OAAAA,EAAAkqT,gBAAA5mH,EAAAhwX,EAAA82X,EACA,CACA,QACA,GACG,CACH77W,IAAA,SACAt2B,MAAA,SAAA23C,GACA,QAAAh6C,EAAA,EAAA0d,EAAA,EAAkC1d,EAAAN,KAAAwb,SAAAjb,OAA0BD,IAAA,CAC5D,IAAAwmK,EAAA9mK,KAAAwb,SAAAlb,GACA6e,EAAAnB,EAAA8oJ,EAAAzoJ;AACA,GAAAL,GAAAs8B,GAAAn7B,GAAAnB,EAAA,CACA,MAAA8oJ,EAAAsb,QAAAtb,EAAAtrJ,SAAAjb,QACA,QAAA2+B,EAAA,EAA6BA,EAAA4nI,EAAAtrJ,SAAAjb,OAA4B2+B,IAAA,CACzD,IAAAm7P,EAAAvzH,EAAAtrJ,SAAA0jB;AACA,GAAAm7P,EAAAh8Q,KAAA,CACAyoJ,EAAAuzH;AACA,KACA,CACA,CAEA,OAAAvzH,CACA,CACA,GAAAxsH,EAAAn7B,EAAA,OAAA2nJ,EAAA+tV,OAAAv6c,EAAAt8B,EAAA8oJ,EAAAsb;AACApkK,EAAAmB,CACA,CACA,GACG,CACH8Z,IAAA,aACAt2B,MAAA,SAAA23C,EAAA17B,GACA,IAAA5e,KAAA8mZ,WAAA,OACA5iY,KAAAlkB,KAAAguY,IACAhwX,OAAA,EACA2qX,KAAAruV,EAAA;AAIA,IAFA,IAYAm2N,EAZAnwQ,EAAA,EACA0d,EAAA,EACA2id,EAAA,EAA2Brge,EAAAN,KAAAwb,SAAAjb,OAA0BD,IAAA,CACrD,IAAAwmK,EAAA9mK,KAAAwb,SAAAlb,GACA6e,EAAAwhd,EAAA75T,EAAAzoJ;AACA,GAAAc,EAAAm7B,GAAAwsH,aAAAguV,GAAA,CACA92e,EAAAs8B,EAAAqmb;AACA,KACA,CACAA,EAAAxhd,CACA,CACA,GAAAnB,EAAA,OAAAhe,KAAAwb,SAAAlb,GAAA6yf,WAAAn1e,EAAAhe,KAAAwb,SAAAlb,GAAA8hL,OAAAxjK;AACA,KAAqBte,KAAAmwQ,EAAAzwQ,KAAAwb,SAAAlb,EAAA,IAAA+d,MAAAoyP,aAAAskP,IAAAtkP,EAAA7xP,MAAA,EAA8Fte,KACnH,GAAAse,GAAA,GAGA,IAFA,IAAAo2e,EACAzqO,MAEAyqO,EAAA10f,EAAAN,KAAAwb,SAAAlb,EAAA,UACA00f,EAAAhnH,IAAAxgY,YAAAxN,KAAA8mZ,WAFgBxmZ,IAAAiqR,MAIhB,OAAAyqO,GAAAp2e,GAAA2rQ,IAAAyqO,EAAA5yU,SAAA4yU,EAAAC,QAAAD,EAAA7B,WAAA6B,EAAA32e,KAAAO,GACA,CACAsF,KAAAlkB,KAAA8mZ,WACA9oY,OAAAg3e,EAAA1G,EAAA0G,EAAAhnH,KAAA,IAEA,CAGA,IAFA,IAAA/0S,EACAi8Z,MAEAj8Z,EAAA34F,EAAAN,KAAAwb,SAAAjb,OAAAP,KAAAwb,SAAAlb,GAAA,OACA24F,EAAA+0S,IAAAxgY,YAAAxN,KAAA8mZ,WAFgBxmZ,IAAA40f,MAIhB,OAAAj8Z,GAAAi8Z,IAAAj8Z,EAAAmpF,SAAAnpF,EAAAg8Z,QAAAh8Z,EAAAk6Z,WAAA,EAAAv0e,GACA,CACAsF,KAAAlkB,KAAA8mZ,WACA9oY,OAAAi7E,EAAAq1Z,EAAAr1Z,EAAA+0S,KAAAhuY,KAAA8mZ,WAAAx5L,WAAA/sN,OAGA,GACG,CACH04B,IAAA,aACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,IAAAkjO,EAAA/8Q,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,MAAA5S,KAAAwb,SAAAjb,OAAA,OACA2jB,KAAAlkB,KAAA8mZ,WACAv5X,OACAk/B,KACA0oc,WAAA,EACAC,SAAAp1f,KAAA8mZ,WAAAx5L,WAAA/sN;AAIA,IAFA,IAAA40f,GAAA,EACAC,GAAA,EACAp3e,EAAA2xQ,EAAArvR,EAAA,GAAsCA,IAAA,CACtC,IAAAwmK,EAAA9mK,KAAAwb,SAAAlb,GACA6e,EAAAnB,EAAA8oJ,EAAAzoJ;AACA,OAAA82e,GAAA5ne,GAAApO,EAAA,CACA,IAAAk2e,EAAAr3e,EAAA8oJ,EAAAsb;AACA,GAAA70J,GAAA8ne,GAAA5oc,GAAAttC,EAAA2nJ,EAAAsb,QAAAtb,EAAA5iJ,MAAA4iJ,EAAAggP,YAAA9mZ,KAAA8mZ,WAAAtwY,SAAAswJ,EAAAggP,YAAA,OAAAhgP,EAAAwuV,WAAA/ne,EAAAk/B,EAAA4oc;AACA9ne,EAAAvP;AACA,QAAA2nE,EAAArlF,EAA0BqlF,EAAA,EAAOA,IAAA,CACjC,IAAA8qL,EAAAzwQ,KAAAwb,SAAAmqE,EAAA;AACA,GAAA8qL,EAAApyP,MAAAoyP,EAAAu9H,IAAAxgY,YAAAxN,KAAA8mZ,aAAAr2I,EAAA8kP,aAAA,IACAJ,EAAA7G,EAAA79O,EAAAu9H,KAAA;AACA,KACA,CACAzgX,GAAAkjP,EAAApyP,IACA,EACA,GAAA82e,MAAA,EACA,CACA,GAAAA,GAAA,IAAAh2e,EAAAstC,GAAAnsD,GAAAN,KAAAwb,SAAAjb,OAAA,IACAksD,EAAAttC;AACA,QAAAoyc,EAAAjxd,EAAA,EAA+Bixd,EAAAvxd,KAAAwb,SAAAjb,OAA2Bgxd,IAAA,CAC1D,IAAAt4X,EAAAj5F,KAAAwb,SAAA+1c;AACA,GAAAt4X,EAAA56E,MAAA46E,EAAA+0S,IAAAxgY,YAAAxN,KAAA8mZ,aAAA7tT,EAAAs8Z,cAAA,IACAH,EAAA9G,EAAAr1Z,EAAA+0S;AACA,KACA,CACAvhV,GAAAwsC,EAAA56E,IACA,EACA,GAAA+2e,MAAAp1f,KAAA8mZ,WAAAx5L,WAAA/sN;AACA,KACA,CACAyd,EAAAmB,CACA,CACA,OACA+E,KAAAlkB,KAAA8mZ,WACAv5X,OACAk/B,KACA0oc,aACAC,WAEA,GACG,CACHn8d,IAAA,eACAt2B,MAAA,SAAAic,GACA,GAAA5e,KAAAoiL,SAAApiL,KAAA8mZ,aAAA9mZ,KAAAwb,SAAAjb,OAAA;AACA,IAAAumK,EAAA9mK,KAAAwb,SAAAoD,EAAA,IAAA5e,KAAAwb,SAAAjb,OAAA;AACA,UAAAumK,EAAAzoJ,MAAAyoJ,EAAAyuV,aAAA32e,EACA,GACG,CACHqa,IAAA,cACAt2B,MAAA,SAAA23C,GACA,IAAAk7c,EAAAx1f,KAAAmzf,WAAA74c,EAAA,GACAp2B,EAAAsxe,EAAAtxe,KACAlG,EAAAw3e,EAAAx3e;AACA,MAAAkG,EAAAkzE,UAAAp5E,GAAAkG,EAAAopM,WAAA/sN,OAAA,UAAAy8B,WAAA,qBAAAsd;AACA,OAAAp2B,EAAAopM,WAAAtvM,EACA,GACG,CACHib,IAAA,eACAt2B,MAAA,SAAAmvZ,EAAA18U,EAAAiC,GAIA,IAHA,IAAA+qP,EAAAxvT,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACA2a,EAAAxqB,KAAA8b,IAAAizY,EAAA18U,GACA3oB,EAAA1pD,KAAA+b,IAAAgzY,EAAA18U,GACA90E,EAAA,EAAA0d,EAAA,EAAkC1d,EAAAN,KAAAwb,SAAAjb,OAA0BD,IAAA,CAC5D,IAAAwmK,EAAA9mK,KAAAwb,SAAAlb,GACA6e,EAAAnB,EAAA8oJ,EAAAzoJ;AACA,GAAAkP,EAAAvP,GAAAyuC,EAAAttC,EAAA,OAAA2nJ,EAAAwuO,aAAAwc,EAAA9zY,EAAA8oJ,EAAAsb,OAAAhtG,EAAAp3D,EAAA8oJ,EAAAsb,OAAA/qG,EAAA+qP;AACApkT,EAAAmB,CACA,CACA,IAAAs2e,EAAAz1f,KAAAmzf,WAAArhG,KAAA,KACA4jG,EAAAtgb,GAAA08U,EAAA2jG,EAAAz1f,KAAAmzf,WAAA/9a,KAAA,KACA85a,EAAA73a,EAAA7oD,KAAAinE,eACAkga,EAAAt+a,EAAAu+a,oBACAC;AACA,IAAAjG,GAAAI,IAAAl+F,GAAA18U,EAAA,CACA,IAAA0gb,EAAAL,EACAvxe,EAAA4xe,EAAA5xe,KACA6xe,EAAAD,EAAA93e;AACA,MAAAkG,EAAAkzE,UAEA,IADAy+Z,KAAAE,GAAA,MAAA7xe,EAAAuzE,UAAAs+Z,EAAA,MACAA,GAAA7xe,EAAAuzE,UAAAl3F,OACA,QAAA08K,EAAA62S,EAAA5vc,EAAyC4vc,EAAMA,IAAAtmd,WAAA,CAC/C,GAAAyvK,EAAA62S,EAAAjqY,YAAA,CACA,MAAAozF,EAAA74J,WAAAqxe,EAAAC,EAAA,CACAxxe,KAAA+4J,EAAAzvK,WACAwQ,OAAAswe,EAAArxU,GAAA;AAEA,KACA,CACA,IAAAytB,EAAAopR,EAAAi7B;AACA,GAAArkT,KAAAxmL,MAAAwmL,EAAAxmL,KAAAmlJ,QAAA,KACA,MAEU,CACV,IAAAonG,EAAAvsP,EAAAopM,WAAAyoS,EAAA;AACAF,EAAAplP,IAAA,MAAAA,EAAArsP,UAAA,SAAAqsP,EAAAx6G,gBACA,CACA,CACA,GAAA25V,GAAA+F,EAAAxG,WAAAwG,EAAAxG,WAAAuG,EAAAxxe,MAAA,GAAAyxe,EAAAxG,UAAA/3Z,SAAA,CACA,IAAA4+Z,EAAAL,EAAAxG,UAAA7hS,WAAAqoS,EAAAh1O;AACAq1O,GAAA,SAAAA,EAAA//V,kBAAAmsK,KACA,CACA,GAAAA,GAAAyzL,GAAA7F,IAAAvB,EAAAgH,EAAAvxe,KAAAuxe,EAAAz3e,OAAA23e,EAAAvG,WAAAuG,EAAAj1O,gBAAA+tO,EAAAiH,EAAAxxe,KAAAwxe,EAAA13e,OAAA23e,EAAAxG,UAAAwG,EAAAh1O,aAAA,CACA,IAAAs1O;AACA,IAAA/G,EAAApvf,QAAAgyZ,GAAA18U,MAAAygb,IAAAjG,GAAA,CACAV,EAAAgH,SAAAT,EAAAvxe,KAAAuxe,EAAAz3e;AACA,IACA8zY,GAAA18U,GAAA85a,EAAApvf,OAAA41f,EAAAxxe,KAAAwxe,EAAA13e,QACAi4e,IACA,CAAU,MAAAzmf,GAAA,CACV,CACA,IAAAymf,EAAA,CACA,GAAAnkG,EAAA18U,EAAA,CACA,IAAAytT,EAAA4yH;AACAA,EAAAC,EACAA,EAAA7yH,CACA,CACA,IAAA3qT,EAAAvzE,SAAAmxF;AACA5d,EAAA8d,OAAA0/Z,EAAAxxe,KAAAwxe,EAAA13e,QACAk6D,EAAA6d,SAAA0/Z,EAAAvxe,KAAAuxe,EAAAz3e,QACAkxe,EAAAj5Z,kBACAi5Z,EAAAh5Z,SAAAhe,EACA,CApBA,CAqBA,GACG,CACHj/C,IAAA,iBACAt2B,MAAA,SAAAskN,GACA,OAAAjnN,KAAA8mZ,YAAA,aAAA7/L,EAAAnjN,IACA,GACG,CACHm1B,IAAA,cACA3M,IAAA,WACA,OAAAtsB,KAAA8mZ,YAAA9mZ,KAAA8mZ,YAAA9mZ,KAAAguY,MAAAhuY,KAAAguY,IAAAx3X,SAAAxW,KAAA8mZ,WACA,GACG,CACH7tX,IAAA,YACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,QAAAzuC,EAAA,EAAA1d,EAAA,EAAkCA,EAAAN,KAAAwb,SAAAjb,OAA0BD,IAAA,CAC5D,IAAAwmK,EAAA9mK,KAAAwb,SAAAlb,GACA6e,EAAAnB,EAAA8oJ,EAAAzoJ;AACA,GAAAL,GAAAmB,EAAAoO,GAAApO,GAAAstC,GAAAzuC,EAAAuP,EAAApO,GAAAstC,EAAAzuC,EAAA,CACA,IAAAm4e,EAAAn4e,EAAA8oJ,EAAAsb,OACAg0U,EAAAj3e,EAAA2nJ,EAAAsb;AACA,GAAA70J,GAAA4oe,GAAA1pc,GAAA2pc,EAGA,OAFAp2f,KAAAk0f,MAAA3me,GAAAvP,GAAAyuC,GAAAttC,EAvYA,EADA,OAyYAoO,GAAA4oe,GAAA1pc,GAAA2pc,IAAAtvV,EAAAuvV,aAAAvvV,EAAAknO,IAAAxgY,YAAAxN,KAAA8mZ,WAAmJhgP,EAAAwvV,UAAA/oe,EAAA4oe,EAAA1pc,EAAA0pc,GAAnJrvV,EAAAotV,MAvYA;AA0YAptV,EAAAotV,MAAAptV,EAAAknO,KAAAlnO,EAAAggP,YAAAhgP,EAAAknO,IAAAxgY,YAAAxN,KAAA8mZ,YAAAhgP,EAAAtrJ,SAAAjb,OA1YA,EADA,CA6YA,CACAyd,EAAAmB,CACA,CACAnf,KAAAk0f,MAhZA,CAiZA,GACG,CACHj7d,IAAA,mBACAt2B,MAAA,WAEA,IADA,IAAAyxW,EAAA,EACAlwV,EAAAlkB,KAAA8nB,OAAmC5D,EAAMA,IAAA4D,OAAAssV,IAAA,CACzC,IAAA8/I,EAAA,GAAA9/I,EAvZA,EADA;AAyZAlwV,EAAAgwe,UAAAhwe,EAAAgwe,QACA,CACA,GACG,CACHj7d,IAAA,UACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,kBACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,qBACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,SACAt2B,MAAA,SAAAU,GACA,QACA,KAEA4wf,CACA,CA/aA,GAgbAc,GAAA,SAAAwB,GACAhkX,EAAAwiX,EAAAwB;AACA,IAAAlwc,EAAAusF,EAAAmiX;AACA,SAAAA,EAAAjte,EAAAmmT,EAAA52P,EAAA/8B,GACA,IAAAiM;AACAwsF,EAAA/yI,KAAA+0f;AACA,IAAAx6V,EACAyzO,EAAA//D,EAAAnqU,KAAAolY;AAKA,GAJA,mBAAA8E,QAAA32T,EAAA,WACA,OAAAkjF,EACAA,EAAAzyI,OAAAyyI,EAAAzyI,OAAAuse,eAAA95V,QAAA,EADAjgH,CAEA,KACA2zR,EAAAnqU,KAAAimW,KAAAh7J,IAAA,CACA,MAAAi/L,EAAA52S,SAAA,CACA,IAAA+vL,EAAAxiR,SAAAkvE,cAAA;AACAszM,EAAAziR,YAAAspY,GACAA,EAAA7mH,CACA,CACA6mH,EAAA/3O,gBAAA,QACA+3O,EAAAj0T,UAAAniC,IAAA,qBACA,CAKA,OAJA2O,EAAAF,EAAAz7C,KAAA5K,KAAA8nB,EAAA,GAAAkmX,EAAA,OACA//D,SACA1nR,EAAA0nR,SACA1zK,EAAApoB,EAAA5rF,GACAA,CACA,CA8CA,OA7CA2sF,EAAA6hX,EAAA,EACA97d,IAAA,gBACAt2B,MAAA,SAAAsrU,GACA,OAldA,GAkdAjuU,KAAAk0f,OAAAjmL,EAAAnqU,KAAAiwP,GAAA/zP,KAAAiuU,OAAAnqU,KACA,GACG,CACHm1B,IAAA,YACAt2B,MAAA,WACA,OACAmuG,UAEA,GACG,CACH73E,IAAA,YACAt2B,MAAA,SAAA+G,GACA,IAAAQ,EAAAlK,KAAAiuU,OAAA87B,KAAA48C;AACA,QAAAz8Y,KAAAR,EACA,GACG,CACHuvB,IAAA,iBACAt2B,MAAA,SAAAskN,GACA,mBAAAA,EAAAnjN,MAAA9D,KAAAiuU,OAAA87B,KAAAysJ,eACA,GACG,CACHv9d,IAAA,UACAt2B,MAAA,WACA3C,KAAAiuU,OAAAnqU,KAAAs5E,QAAAp9E,KAAAguY,KACA10R,EAAAk5B,EAAAuiX,EAAA9vf,WAAA,UAAAjF,MAAA4K,KAAA5K,KACA,GACG,CACHi5B,IAAA,UACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,qBACA3M,IAAA,WACA,QAAAtsB,KAAAiuU,OAAAnqU,KAAAimW,KAAA0sJ,WACA,GACG,CACHx9d,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAiuU,OAAAnqU,KAAA8a,IACA,KAEAm2e,CACA,CAzEA,CAyECd,IACDyC,GAAA,SAAAC,GACApkX,EAAAmkX,EAAAC;AACA,IAAA5iX,EAAAnB,EAAA8jX;AACA,SAAAA,EAAA5ue,EAAAkmX,EAAA4oH,EAAAvzf,GACA,IAAA2wI;AAKA,OAJAjB,EAAA/yI,KAAA02f,IACA1iX,EAAAD,EAAAnpI,KAAA5K,KAAA8nB,EAAA,GAAAkmX,EAAA,OACA4oH,UACA5iX,EAAA3wI,OACA2wI,CACA,CA0BA,OAzBAd,EAAAwjX,EAAA,EACAz9d,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAqD,KAAA9C,MACA,GACG,CACH04B,IAAA,kBACAt2B,MAAA,SAAAqrY,EAAAhwX,GACA,OAAAgwX,GAAAhuY,KAAA42f,QAAA52f,KAAA+yf,YAAA/0e,EAAAhe,KAAAqe,KAAA,GACAre,KAAA+yf,WAAA/0e,CACA,GACG,CACHib,IAAA,aACAt2B,MAAA,SAAA23C,GACA,OACAp2B,KAAAlkB,KAAA42f,QACA54e,OAAAs8B,EAEA,GACG,CACHrhB,IAAA,iBACAt2B,MAAA,SAAAk0f,GACA,wBAAAA,EAAA/yf,MAAA+yf,EAAArtf,OAAAiuF,WAAAo/Z,EAAA/uZ,QACA,KAEA4uZ,CACA,CArCA,CAqCCzC,IACD6C,GAAA,SAAAC,GACAxkX,EAAAukX,EAAAC;AACA,IAAA3kB,EAAAx/V,EAAAkkX;AACA,SAAAA,EAAAhve,EAAAu2F,EAAA2vR,EAAA8Y,EAAA/8C,GACA,IAAAmvH;AAKA,OAJAnmV,EAAA/yI,KAAA82f,IACA59B,EAAAkZ,EAAAxne,KAAA5K,KAAA8nB,EAAA,GAAAkmX,EAAA8Y,IACAzoS,OACA66W,EAAAnvH,OACAmvH,CACA,CA2DA,OA1DAhmV,EAAA4jX,EAAA,EACA79d,IAAA,YACAt2B,MAAA,WACA,OA/iBA,EA+iBA3C,KAAAk0f,OAAAl0f,KAAAq+G,KAAAv6G,KAAAimW,KAAAitJ,cAAA,KACA,CACA34Y,KAAAr+G,KAAAq+G,KAAAv6G,KAAAsE,KACA0xE,MAAA95E,KAAAq+G,KAAAvkC,MACAkzZ,eAAAhte,KAAA8mZ,WAEA,GACG,CACH7tX,IAAA,cACAt2B,MAAA,SAAA07G,GACA,OAzjBA,GAyjBAr+G,KAAAk0f,OAAAl0f,KAAAq+G,KAAA01I,GAAA11I,EACA,GACG,CACHplF,IAAA,YACAt2B,MAAA,SAAA4qB,EAAAk/B,GAEA,GADA6sD,EAAAk5B,EAAAskX,EAAA7xf,WAAA,YAAAjF,MAAA4K,KAAA5K,KAAAutB,EAAAk/B,GAjkBA,GAkkBAzsD,KAAAk0f,MAAA,CAEA,IADA,IAAApse,EAAA9nB,KAAA8nB,QACAA,EAAA5D,MAAA4D;AACAA,EAAAose,MAAAl0f,KAAAk0f,QAAApse,EAAAose,MAAAl0f,KAAAk0f,OACAl0f,KAAAk0f,MAtkBA,CAukBA,CACA,GACG,CACHj7d,IAAA,QACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA4qB,GACA,IAAAwgF,EAAAi/V,EAAAvyf,OAAAvE,KAAA8nB,OAAA9nB,KAAAq+G,QAAAhnC,GACA8oI,EAAAngN,KAAAwb,SACA6C,EAAAre,KAAAqe;AACAouC,EAAApuC,IAAA8hM,EAAA82S,GAAA92S,EAAA1zJ,EAAApuC,EAAAg5D,IACA9pD,EAAA,IAAA4yL,EAAA82S,GAAA92S,EAAA,EAAA5yL,EAAA8pD;AACA,QAAA/2E,EAAA,EAAsBA,EAAA6/M,EAAA5/M,OAAkBD,IAAA6/M,EAAA7/M,GAAAwnB,OAAA+vI;AAExC,OADAA,EAAAr8I,SAAA2kM,EACAtoD,CACA,GACG,CACH5+H,IAAA,iBACAt2B,MAAA,SAAAskN,GACA,OAAAjnN,KAAA+pW,KAAA68C,eAAA5mZ,KAAA+pW,KAAA68C,eAAA3/L,GAAA3tG,EAAAk5B,EAAAskX,EAAA7xf,WAAA,iBAAAjF,MAAA4K,KAAA5K,KAAAinN,EACA,GACG,CACHhuL,IAAA,UACAt2B,MAAA,WACA3C,KAAA+pW,KAAA3sR,SAAAp9E,KAAA+pW,KAAA3sR,UACAk8B,EAAAk5B,EAAAskX,EAAA7xf,WAAA,UAAAjF,MAAA4K,KAAA5K,KACA,IACG,EACHi5B,IAAA,SACAt2B,MAAA,SAAAmlB,EAAAu2F,EAAAzgG,EAAAy5D,GACA,IAAAg5V,EAAAh5V,EAAAo5T,UAAApyR,EAAAv6G,KAAAsE,MACA2hW,EAAAsmE,KAAAhyT,EAAAhnC,EAAAz5D;AAEA,OADAmsV,KAAAikC,MAAAjkC,EAAA+oH,EAAA9oF,cAAAktH,WAAAvyf,SAAA05G,EAAAv6G,KAAAimW,KAAAm/B,MAAA7qR,EAAAzgG,GAAA,KAAAygG,EAAAvkC,QACA,IAAAg9a,EAAAhve,EAAAu2F,EAAA0rP,EAAAikC,IAAAjkC,EAAA+8C,YAAA/8C,EAAAikC,IAAAjkC,EACA,KAEA+sJ,CACA,CAtEA,CAsEC7C,IACDkD,GAAA,SAAAC,GACA7kX,EAAA4kX,EAAAC;AACA,IAAA5kB,EAAA5/V,EAAAukX;AACA,SAAAA,EAAArve,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA8Y,EAAA6xE,GACA,IAAA8T;AAOA,OANA15V,EAAA/yI,KAAAm3f,IACA1qB,EAAA+F,EAAA5ne,KAAA5K,KAAA8nB,EAAA,GAAAkmX,EAAA8Y,IACA5iY,OACAuod,EAAA0nB,YACA1nB,EAAA2nB,YACA3nB,EAAA9T,UACA8T,CACA,CAyMA,OAxMAv5V,EAAAikX,EAAA,EACAl+d,IAAA,YACAt2B,MAAA,SAAAsjL,GACA,IAAA6mT,EAAA9se;AACA,GAAAA,KAAAkkB,KAAApgB,KAAAimW,KAAAitJ,cAAA;AACA,IAAApvc,EAAA,CACA1jC,KAAAlkB,KAAAkkB,KAAApgB,KAAAsE,KACA0xE,MAAA95E,KAAAkkB,KAAA41D;AAGA,GADA,OAAA95E,KAAAkkB,KAAApgB,KAAA8kY,aAAAhhV,EAAA0zV,mBAAA,QACAt7Y,KAAA8mZ,WAIQ,GAAA9mZ,KAAAq2f,YAEA,CACR,QAAA/1f,EAAAN,KAAAwb,SAAAjb,OAAA,EAA+CD,GAAA,EAAQA,IAAA,CACvD,IAAAwmK,EAAA9mK,KAAAwb,SAAAlb;AACA,GAAAN,KAAAguY,IAAAx3X,SAAAswJ,EAAAknO,IAAAxgY,YAAA,CACAo6C,EAAAolb,eAAAlmU,EAAAknO,IAAAxgY;AACA,KACA,CACA,CACA,IAAAo6C,EAAAolb,eAAA,CACA,IAAA9yQ,EAAAj0C,KAAA5vJ,KAAA,SAAA71B,GACA,UAAAA,EAAA42F,UAAA6uF,EAAAp8K,QAAArJ,EAAAgN,YAAA,GAAAs/d,EAAA9+F,IAAAx3X,SAAAhW,EACA;AACA05N,EAAAtyK,EAAAolb,eAAA9yQ,EAAiDtyK,EAAAmjW,WAAA,WACjD,OAAA+nE,EAAA90K,SAAA1gN,KACA,CACA,CACA,MAjBA11C,EAAAolb,eAAAhte,KAAA8mZ;KAJAl/V,EAAAmjW,WAAA,WACA,OAAA+hF,EAAA5od,KAAAu9D,OACA;AAoBA,OAAA75B,CACA,GACG,CACH3uB,IAAA,cACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,GACA,OA9pBA,GA8pBAp0f,KAAAk0f,OAAAhwe,EAAA6vO,GAAA/zP,KAAAkkB,OAAAmze,GAAAlD,EAAAn0f,KAAAm0f,YAAAC,EAAArgQ,GAAA/zP,KAAAo0f,UACA,GACG,CACHn7d,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAAkkB,KAAAwuX,QACA,GACG,CACHz5W,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAAkkB,KAAA+zX,OAAA,GACA,GACG,CACHh/W,IAAA,iBACAt2B,MAAA,SAAA00E,EAAA/8B,GACA,IAAA6zb,EAAAnue,KACA4d,EAAA5d,KAAAkkB,KAAA+5X,cACA5pY,EAAAimC,EACA+jb,EAAAhnZ,EAAA2zT,UAAAhrY,KAAAs3f,qBAAAjgb,EAAA/8B,GAAA,KACAi9c,EAAAl5B,KAAA/jb,KAAA,EAAA+jb,EAAA,KACAm5B,EAAAn5B,KAAA/jb,IAAA,EACAm9c,EAAA,IAAAC,GAAA13f,KAAAu3f,KAAArze,KAAAmzD;CA+rBA,SAAAvvD,EAAA6ve,EAAAC,EAAAC,GACA,IAAAC,EAAAH,EAAAG,OAAAhwe,GACA9J,EAAA;AACA,MAAA85e,EAAAv3f,OAWA,IAHA,IAAAw3f,EAAA,EACAv4V,EAAA,GACAw4V,EAAA,KACAC,EAAA,IAA4B,CAG5B,IAFA,IAAAhqL,OAAA,EACAxR,OAAA,EACAs7L,EAAAD,EAAAv3f,QAAAu3f,EAAAC,GAAAtrc,IAAAzuC,GAAA,CACA,IAAAi7E,EAAA6+Z,EAAAC;AACA9+Z,EAAAg1O,SACAA,GAAmCxR,MAAA,CAAAwR,KAAArmU,KAAAqxF,GAAnCg1O,EAAAh1O,EAEA,CACA,GAAAg1O,EACA,GAAAxR,EAAA,CACAA,EAAAtqS,KAAA+le;AACA,QAAAhiC,EAAA,EAA0BA,EAAAz5J,EAAAl8T,OAAsB21d,IAAA0hC,EAAAn7L,EAAAy5J,GAAA+hC,IAAAD,EAChD,MACAJ,EAAA3pL,EAAAgqL,IAAAD;AAGA,IAAAnkC,OAAA,EACA9qd,OAAA;AACA,GAAAivf,EACAjvf,GAAA,EACA8qd,EAAAmkC,EACAA,EAAA;IACM,MAAAC,EAAAnwe,EAAA6qX,YAIN;AAHA5pY,EAAAkvf,EACApkC,EAAA/rc,EAAAg/I,MAAAmxV,IAGA,CACA,QAAA5hC,EAAA,EAAsBA,EAAA72T,EAAAj/J,OAAqB81d,IAAA72T,EAAA62T,GAAA5pa,IAAAzuC,GAAAwhJ,EAAA11J,OAAAusd,IAAA;AAC3C,KAAA0hC,EAAAD,EAAAv3f,QAAAu3f,EAAAC,GAAAxqe,MAAAvP,GAAA85e,EAAAC,GAAAtrc,GAAAzuC,GAAAwhJ,EAAA53J,KAAAkwf,EAAAC;AACA,IAAA54e,EAAAnB,EAAA61c,EAAAnhF;AACA,GAAAmhF,EAAAlpF,OAAA,CACA,IAAAwtH,EAAAh5e;AACA44e,EAAAD,EAAAv3f,QAAAu3f,EAAAC,GAAAxqe,KAAA4qe,MAAAL,EAAAC,GAAAxqe;AACA,QAAA0+d,EAAA,EAAwBA,EAAAzsV,EAAAj/J,OAAqB0rf,IAAAzsV,EAAAysV,GAAAx/b,GAAA0rc,MAAA34V,EAAAysV,GAAAx/b;AAC7C0rc,EAAAh5e,IACA64e,EAAAnkC,EAAA/5E,IAAAq+G,EAAAn6e,GACA61c,IAAA/5E,IAAA,EAAAq+G,EAAAn6e,GACAmB,EAAAg5e,EACApvf,GAAA,EAEA,MACA,KAAAgvf,EAAAD,EAAAv3f,QAAAu3f,EAAAC,GAAAtrc,GAAAttC,GAAA44e;AAKAF,EAAAhkC,EAHAA,EAAAz1E,WAAAy1E,EAAA57E,OAAAz4O,EAAAj5I,OAAA,SAAA5mB,GACA,OAAAA,EAAAie,MACA,GAAK4hJ,EAAAp/J,QACLu3f,EAAAS,SAAAp6e,EAAA61c,GAAA9qd,GACAiV,EAAAmB,CACA,MA5DA,QAAA7e,EAAA,EAAoBA,EAAAwnB,EAAA6qX,WAAuBryY,IAAA,CAC3C,IAAAwmK,EAAAh/I,EAAAg/I,MAAAxmK;AACAu3f,EAAA/wV,EAAAgxV,EAAAH,EAAAS,SAAAp6e,EAAA8oJ,GAAAxmK,GACA0d,GAAA8oJ,EAAA4rO,QACA,CAyDA,CAjEA,CA9rBA1yY,KAAAkkB,KAAAlkB,KAAAo0f,UAAA,SAAAnmL,EAAA3tU,EAAA+3f,GACApqL,EAAA87B,KAAA2+B,MAAA+uH,EAAAa,YAAArqL,EAAA87B,KAAA2+B,MAAA9qX,EAAAy5D,EAAA/2E,GAAuF2tU,EAAAnqU,KAAA8a,MAAA,IAAAy5e,GAAAZ,EAAAa,YAAAh4f,GAAA6te,EAAAjqd,KAAAyuX,WAAAmgF,EAAA5mF,KAAArjS,KAAAslY,EAAAjqd,KAAA4iJ,MAAAxmK,GAAAooY,MAAA9qX,EAAAy5D,EAAA/2E,GACvFm3f,EAAAc,YAAAtqL,EAAA52P,EAAAhjE,EACA,EAAO,SAAAyyJ,EAAAqtV,EAAAC,EAAA9zf,GAEP,IAAAk4f;AADAf,EAAAa,YAAAxxV,EAAA4hO,MAAA9qX,EAAAy5D,EAAA/2E,GAEAm3f,EAAAgB,cAAA3xV,EAAAqtV,EAAAC,EAAA9zf,IAAoEk3f,GAAAngb,EAAAp1D,MAAA8xF,UAAAxmF,KAAAlZ,GAAAgjE,EAAAp1D,MAAA8xF,UAAAtnD,GAAAp4C,EAAAyyJ,EAAA4rO,WAAA8lH,EAAAf,EAAAiB,mBAAAr6B,EAAAn6c,QAAA,GAAAuze,EAAAkB,aAAA7xV,EAAAqtV,EAAAC,EAAAoE,EAAAnhb,IAA4Pogb,EAAAmB,eAAA9xV,EAAAqtV,EAAAC,EAAA/8a,EAAA/2E,EAAA+T,IAChUojf,EAAAr2P,QAAAt6F,EAAAqtV,EAAAC,EAAA/8a,EAAAhjE,GAEAA,GAAAyyJ,EAAA4rO,QACA,GACA+kH,EAAAa,YAAA,GAAA16e,EAAAy5D,EAAA,GACAr3E,KAAAkkB,KAAAupX,aAAAgqH,EAAAoB,oBACApB,EAAAqB,eACArB,EAAAr9V,SAhsBA,GAgsBAp6J,KAAAk0f,SACAqD,GAAAv3f,KAAA+4f,wBAAA1hb,EAAAkgb,GACAyB,GAAAh5f,KAAA8mZ,WAAA9mZ,KAAAwb,SAAA67D,GACA64a,GA+uBA,SAAAliH,GACA,SAAAA,EAAA5pX,UAAA,MAAA4pX,EAAA5pX,SAAA,CACA,IAAA60e,EAAAjrH,EAAArgY,MAAA44E;AACAynT,EAAArgY,MAAA44E,QAAA0ya,EAAA,kCACAxvf,OAAA2b,iBAAA4oX,GAAAkrH,UACAlrH,EAAArgY,MAAA44E,QAAA0ya,CACA,CACA,CAPA,CA/uBAj5f,KAAAguY,KAEA,GACG,CACH/0W,IAAA,uBACAt2B,MAAA,SAAA00E,EAAA/8B,GACA,IAAA6+c,EAAA9hb,EAAAp1D,MAAA8xF,UACAxmF,EAAA4re,EAAA5re,KACAk/B,EAAA0sc,EAAA1sc;AACA,KAAA4qB,EAAAp1D,MAAA8xF,qBAAAg/W,EAAAjgF,gBAAAvlX,EAAA+sB,GAAAmS,EAAAnS,EAAAt6C,KAAAkkB,KAAAu9D,QAAApjE,KAAA;AACA,IAAA4vY,EAAA52U,EAAAznE,MAAAwpf;AACA,IAAAnrG,IAAAjuZ,KAAAguY,IAAAx3X,SAAAy3Y,EAAAzgZ,YAAA;AACA,GAAAxN,KAAAkkB,KAAA+5X,cAAA,CACA,IAAA56Y,EAAA4qZ,EAAAx2T,UACA4ha,EAyuBA,SAAAr+B,EAAA33d,EAAAkqB,EAAAk/B,GACA,QAAAnsD,EAAA,EAAAg6C,EAAA,EAA2Bh6C,EAAA06d,EAAAroF,YAAAr4V,GAAAmS,GAAiC,CAC5D,IAAAq6G,EAAAk0T,EAAAl0T,MAAAxmK,KACAg5f,EAAAh/c;AAEA,GADAA,GAAAwsH,EAAA4rO,SACA5rO,EAAA6jO,OAAA,CAEA,IADA,IAAA1sW,EAAA6oI,EAAAzjK,KACA/C,EAAA06d,EAAAroF,YAAA,CACA,IAAA15S,EAAA+hY,EAAAl0T,MAAAxmK;AAEA,GADAg6C,GAAA2+C,EAAAy5S,UACAz5S,EAAA0xS,OAAA;AACA1sW,GAAAg7D,EAAA51F,IACA,CACA,GAAAi3C,GAAA/sB,EAAA,CACA,GAAA+sB,GAAAmS,GAAAxuB,EAAA79B,MAAAqsD,EAAAppD,EAAA9C,OAAA+4f,EAAA7sc,EAAA6sc,IAAAj2f,EAAA,OAAAopD,EAAAppD,EAAA9C;AACA,IAAA25N,EAAAo/R,EAAA7sc,EAAAxuB,EAAAsc,YAAAl3C,EAAAopD,EAAA6sc,EAAA;AACA,GAAAp/R,GAAA,GAAAA,EAAA72N,EAAA9C,OAAA+4f,GAAA/re,EAAA,OAAA+re,EAAAp/R;AACA,GAAA3sM,GAAAk/B,GAAAxuB,EAAA19B,QAAAksD,EAAAppD,EAAA9C,OAAA+4f,GAAAr7d,EAAA79B,MAAAqsD,EAAA6sc,EAAA7sc,EAAA6sc,EAAAj2f,EAAA9C,SAAA8C,EAAA,OAAAopD,CACA,CAbA,CAcA,CACA,QACA,CArBA,CAzuBAzsD,KAAAkkB,KAAAu9D,QAAAp+E,EAAAkqB,EAAA+sB,EAAAmS,EAAAnS;AACA,OAAA++c,EAAA,QACAn1e,KAAA+pY,EACA3zW,IAAA++c,EACAh2f,OAEA,CACA,OACA6gB,KAAA+pY,EACA3zW,KAAA,EACAj3C,KAAA,GAGA,GACG,CACH41B,IAAA,0BACAt2B,MAAA,SAAA00E,EAAAs1C,GACA,IAAAzoG,EAAAyoG,EAAAzoG,KACAo2B,EAAAqyE,EAAAryE,IACAj3C,EAAAspH,EAAAtpH;AACA,IAAArD,KAAA20f,QAAAzwe,GAAA,CAEA,IADA,IAAAqkX,EAAArkX,EAEAqkX,EAAA/6X,YAAAxN,KAAA8mZ,WADcve,IAAA/6X,WAAA,CAEd,KAAA+6X,EAAAz9G,iBAAAy9G,EAAA/6X,WAAA1E,YAAAy/X,EAAAz9G;AACA,KAAAy9G,EAAA1+S,aAAA0+S,EAAA/6X,WAAA1E,YAAAy/X,EAAA1+S;AACA0+S,EAAAwmH,aAAAxmH,EAAAwmH,gBAAAt9d,EACA,CACA,IAAAi5K,EAAA,IAAAgsT,GAAA12f,KAAAuoY,EAAArkX,EAAA7gB;AACAg0E,EAAAznE,MAAA2pf,iBAAA3xf,KAAA8iM,GACA1qM,KAAAwb,SAAAy7e,GAAAj3f,KAAAwb,SAAA8+B,IAAAj3C,EAAA9C,OAAA82E,EAAAqzH,EAVA,CAWA,GACG,CACHzxK,IAAA,SACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAA/8a,GACA,QAnvBA,GAmvBAr3E,KAAAk0f,QAAAhwe,EAAAw7c,WAAA1/d,KAAAkkB,QACAlkB,KAAAw5f,YAAAt1e,EAAAiwe,EAAAC,EAAA/8a,GACA,GACA,GACG,CACHp+C,IAAA,cACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAA/8a,GACAr3E,KAAAy5f,gBAAAtF,GACAn0f,KAAAkkB,OACAlkB,KAAAo0f,YACAp0f,KAAA8mZ,YAAA9mZ,KAAA05f,eAAArib,EAAAr3E,KAAA+yf,YACA/yf,KAAAk0f,MAjwBA,CAkwBA,GACG,CACHj7d,IAAA,kBACAt2B,MAAA,SAAAwxf,GACA,IAAAkD,GAAAlD,EAAAn0f,KAAAm0f,WAAA,CACA,IAAAwF,EAAA,GAAA35f,KAAA24d,QAAAvhY,SACAwia,EAAA55f,KAAAguY;AACAhuY,KAAAguY,IAAA6rH,GAAA75f,KAAAguY,IAAAhuY,KAAA24d,QAAAmhC,GAAA95f,KAAAm0f,UAAAn0f,KAAAkkB,KAAAy1e,GAAAG,GAAA3F,EAAAn0f,KAAAkkB,KAAAy1e,IACA35f,KAAAguY,KAAA4rH,IACAA,EAAA7K,gBAAAt9d,EACAzxB,KAAAguY,IAAA+gH,WAAA/uf,MAEAA,KAAAm0f,WARA,CASA,GACG,CACHl7d,IAAA,aACAt2B,MAAA,WACA,GAAA3C,KAAA24d,QAAAvhY,WACAp3F,KAAA24d,QAAA5+Y,UAAAniC,IAAA,6BACA53C,KAAA8mZ,YAAA9mZ,KAAAkkB,KAAApgB,KAAAimW,KAAA73V,YAAAlS,KAAA24d,QAAAzmd,cAEA,GACG,CACH+mB,IAAA,eACAt2B,MAAA,WACA,GAAA3C,KAAA24d,QAAAvhY,WACAp3F,KAAA24d,QAAA5+Y,UAAA2B,OAAA,6BACA17E,KAAA8mZ,YAAA9mZ,KAAAkkB,KAAApgB,KAAAimW,KAAA73V,WAAAlS,KAAA24d,QAAAlvY,gBAAA,aAEA,GACG,CACHxwD,IAAA,UACA3M,IAAA,WACA,OAAAtsB,KAAAkkB,KAAAwmX,MACA,IACG,EACHzxW,IAAA,SACAt2B,MAAA,SAAAmlB,EAAA5D,EAAAiwe,EAAAC,EAAA/8a,EAAA/8B,GACA,IACAy/c,EADA1pF,EAAAh5V,EAAAo5T,UAAAvsX,EAAApgB,KAAAsE,MAEA2hW,EAAAsmE,KAAAnsZ,EAAAmzD,EAAA,WACA,OAAA0ib,EACAA,EAAAjye,OAAAiye,EAAAjye,OAAAuse,eAAA0F,QAAA,EADAz/c,CAEA,EAAO65c,EAAAC,GACPpmH,EAAAjkC,KAAAikC,IACA8Y,EAAA/8C,KAAA+8C;AACA,GAAA5iY,EAAAymX,OACA,GAAAqD,GAA2D,MAAAA,EAAA52S,SAAA,UAAAp6D,WAAA,iDAA3DgxW,EAAArpY,SAAAC,eAAAsf,EAAA7gB;KACQ,IAAA2qY,EAAA,CACR,IAAAgsH,EAAAlnC,EAAA9oF,cAAAktH,WAAAvyf,SAAAuf,EAAApgB,KAAAimW,KAAAm/B,MAAAhlX,GAAA,KAAAA,EAAA41D;AACAk0T,EAAAgsH,EAAAhsH,IACA8Y,EAAAkzG,EAAAlzG,UACA,CACAA,GAAA5iY,EAAAymX,QAAA,MAAAqD,EAAA5pX,WACA4pX,EAAAzkS,aAAA,qBAAAykS,EAAA/3O,gBAAA,SACA/xI,EAAApgB,KAAAimW,KAAA73V,YAAA87X,EAAA97X;AAEA,IAAAymd,EAAA3qF;AAEA,OADAA,EAAAisH,GAAAjsH,EAAAmmH,EAAAjwe,GACA6lV,EAAAgwJ,EAAA,IAAAG,GAAApye,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA8Y,GAAA,KAAA6xE,EAAA5uH,GAAoI7lV,EAAAymX,OAAA,IAAAwvH,GAAArye,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA2qF,GAAgG,IAAAw+B,EAAArve,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA8Y,GAAA,KAAA6xE,EACpO,KAEAw+B,CACA,CAtNA,CAsNClD;AACD,SAAAmG,GAAAzve,EAAAwpe,EAAAC,EAAApmH,EAAA32T,GACA4ib,GAAAjsH,EAAAmmH,EAAAxpe;AACA,IAAA27X,EAAA,IAAA6wG,QAAA1le,EAAA9G,EAAAwpe,EAAAC,EAAApmH;AAEA,OADAsY,EAAAQ,YAAAR,EAAAozG,eAAArib,EAAA,GACAivU,CACA,CACA,IAAA6zG,GAAA,SAAAE,GACA9nX,EAAA4nX,EAAAE;AACA,IAAA3T,EAAA9zW,EAAAunX;AACA,SAAAA,EAAArye,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA2qF,GAEA,OADA5lV,EAAA/yI,KAAAm6f,GACAzT,EAAA97e,KAAA5K,KAAA8nB,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA,KAAA2qF,EACA,CAyEA,OAxEAzlV,EAAAinX,EAAA,EACAlhe,IAAA,YACAt2B,MAAA,WAEA,IADA,IAAAksB,EAAA7uB,KAAA24d,QAAAnrd,WACAqhB,MAAA7uB,KAAAguY,MAAAn/W,EAAAyre,UAAAzre,IAAArhB;AACA,OACAqhB,WAEA,GACG,CACHoK,IAAA,SACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAA/8a,GACA,QAx1BA,GAw1BAr3E,KAAAk0f,OA31BA,GA21BAl0f,KAAAk0f,QAAAl0f,KAAAu6f,aAAAr2e,EAAAw7c,WAAA1/d,KAAAkkB,QACAlkB,KAAAy5f,gBAAAtF,GA51BA,GA61BAn0f,KAAAk0f,OAAAhwe,EAAA7gB,MAAArD,KAAAkkB,KAAA7gB,MAAA6gB,EAAA7gB,MAAArD,KAAA24d,QAAAlhY,YACAz3F,KAAA24d,QAAAlhY,UAAAvzE,EAAA7gB,KACAg0E,EAAAmjb,aAAAx6f,KAAA24d,UAAAthZ,EAAAmjb,YAAA,OAEAx6f,KAAAkkB,OACAlkB,KAAAk0f,MAl2BA,EAm2BA,GACA,GACG,CACHj7d,IAAA,WACAt2B,MAAA,WAEA,IADA,IAAA83f,EAAAz6f,KAAA8nB,OAAAg/X,WACAtmZ,EAAAR,KAAA24d,QAAiCn4d,EAAGA,IAAAgN,WAAA,GAAAhN,GAAAi6f,EAAA;AACpC,QACA,GACG,CACHxhe,IAAA,aACAt2B,MAAA,SAAA23C,GACA,OACAp2B,KAAAlkB,KAAA24d,QACA36c,OAAAs8B,EAEA,GACG,CACHrhB,IAAA,kBACAt2B,MAAA,SAAAqrY,EAAAhwX,EAAA82X,GACA,OAAA9G,GAAAhuY,KAAA24d,QAAA34d,KAAA+yf,WAAAhwf,KAAA8b,IAAAb,EAAAhe,KAAAkkB,KAAA7gB,KAAA9C,QACA+4G,EAAAk5B,EAAA2nX,EAAAl1f,WAAA,kBAAAjF,MAAA4K,KAAA5K,KAAAguY,EAAAhwX,EAAA82X,EACA,GACG,CACH77W,IAAA,iBACAt2B,MAAA,SAAAskN,GACA,uBAAAA,EAAAnjN,MAAA,aAAAmjN,EAAAnjN,IACA,GACG,CACHm1B,IAAA,QACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAA4hV,GACA,IAAAnqX,EAAAlkB,KAAAkkB,KAAA41X,IAAAvsX,EAAAk/B,GACAuhV,EAAArpY,SAAAC,eAAAsf,EAAA7gB;AACA,WAAA82f,EAAAn6f,KAAA8nB,OAAA5D,EAAAlkB,KAAAm0f,UAAAn0f,KAAAo0f,UAAApmH,IACA,GACG,CACH/0W,IAAA,YACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA6sD,EAAAk5B,EAAA2nX,EAAAl1f,WAAA,YAAAjF,MAAA4K,KAAA5K,KAAAutB,EAAAk/B,GACAzsD,KAAAguY,KAAAhuY,KAAA24d,SAAA,GAAAprc,GAAAk/B,GAAAzsD,KAAA24d,QAAAlhY,UAAAl3F,SAAAP,KAAAk0f,MAv4BA,EAw4BA,GACG,CACHj7d,IAAA,UACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,SACAt2B,MAAA,SAAAU,GACA,OAAArD,KAAAkkB,KAAA7gB,OACA,KAEA82f,CACA,CAhFA,CAgFChD,IACDrC,GAAA,SAAA4F,GACAnoX,EAAAuiX,EAAA4F;AACA,IAAA1T,EAAAp0W,EAAAkiX;AACA,SAAAA,IAEA,OADA/hX,EAAA/yI,KAAA80f,GACA9N,EAAAr0e,MAAA3S,KAAA4S,UACA,CAwBA,OAvBAsgI,EAAA4hX,EAAA,EACA77d,IAAA,YACAt2B,MAAA,WACA,OACAmuG,UAEA,GACG,CACH73E,IAAA,cACAt2B,MAAA,SAAAyhB,GACA,OA16BA,GA06BApkB,KAAAk0f,OAAAl0f,KAAAguY,IAAA5pX,WACA,GACG,CACH6U,IAAA,UACA3M,IAAA,WACA,QACA,GACG,CACH2M,IAAA,kBACA3M,IAAA,WACA,aAAAtsB,KAAAguY,IAAA5pX,QACA,KAEA0we,CACA,CA/BA,CA+BCb,IACDiG,GAAA,SAAAS,GACApoX,EAAA2nX,EAAAS;AACA,IAAA9P,EAAAj4W,EAAAsnX;AACA,SAAAA,EAAApye,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA8Y,EAAA6xE,EAAA5uH,GACA,IAAA0kI;AAIA,OAHA17V,EAAA/yI,KAAAk6f,IACAzrB,EAAAoc,EAAAjgf,KAAA5K,KAAA8nB,EAAA5D,EAAAiwe,EAAAC,EAAApmH,EAAA8Y,EAAA6xE,IACA5uH,OACA0kI,CACA,CA+CA,OA9CAv7V,EAAAgnX,EAAA,EACAjhe,IAAA,SACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAA/8a,GACA,GAn8BA,GAm8BAr3E,KAAAk0f,MAAA;AACA,GAAAl0f,KAAA+pW,KAAAp5V,SAAA3Q,KAAAkkB,KAAApgB,MAAAogB,EAAApgB,MAAA9D,KAAA+pW,KAAA6wJ,WAAA,CACA,IAAA3ze,EAAAjnB,KAAA+pW,KAAAp5V,OAAAuT,EAAAiwe,EAAAC;AAEA,OADAnte,GAAAjnB,KAAAw5f,YAAAt1e,EAAAiwe,EAAAC,EAAA/8a,GACApwD,CACA,CAAQ,SAAAjnB,KAAA8mZ,aAAA5iY,EAAA+zX,SAGR3+R,EAAAk5B,EAAA0nX,EAAAj1f,WAAA,SAAAjF,MAAA4K,KAAA5K,KAAAkkB,EAAAiwe,EAAAC,EAAA/8a,EAEA,GACG,CACHp+C,IAAA,aACAt2B,MAAA,WACA3C,KAAA+pW,KAAA8wJ,WAAA76f,KAAA+pW,KAAA8wJ,aAAAvhZ,EAAAk5B,EAAA0nX,EAAAj1f,WAAA,aAAAjF,MAAA4K,KAAA5K,KACA,GACG,CACHi5B,IAAA,eACAt2B,MAAA,WACA3C,KAAA+pW,KAAA+wJ,aAAA96f,KAAA+pW,KAAA+wJ,eAAAxhZ,EAAAk5B,EAAA0nX,EAAAj1f,WAAA,eAAAjF,MAAA4K,KAAA5K,KACA,GACG,CACHi5B,IAAA,eACAt2B,MAAA,SAAAmvZ,EAAA18U,EAAAiC,EAAA+qP,GACApiU,KAAA+pW,KAAAurC,aAAAt1Y,KAAA+pW,KAAAurC,aAAAwc,EAAA18U,EAAAiC,EAAA7oD,MAAA8qF,EAAAk5B,EAAA0nX,EAAAj1f,WAAA,eAAAjF,MAAA4K,KAAA5K,KAAA8xZ,EAAA18U,EAAAiC,EAAA+qP,EACA,GACG,CACHnpS,IAAA,UACAt2B,MAAA,WACA3C,KAAA+pW,KAAA3sR,SAAAp9E,KAAA+pW,KAAA3sR,UACAk8B,EAAAk5B,EAAA0nX,EAAAj1f,WAAA,UAAAjF,MAAA4K,KAAA5K,KACA,GACG,CACHi5B,IAAA,YACAt2B,MAAA,SAAA+G,GACA,QAAA1J,KAAA+pW,KAAA48C,WAAA3mZ,KAAA+pW,KAAA48C,UAAAj9Y,EACA,GACG,CACHuvB,IAAA,iBACAt2B,MAAA,SAAAskN,GACA,OAAAjnN,KAAA+pW,KAAA68C,eAAA5mZ,KAAA+pW,KAAA68C,eAAA3/L,GAAA3tG,EAAAk5B,EAAA0nX,EAAAj1f,WAAA,iBAAAjF,MAAA4K,KAAA5K,KAAAinN,EACA,KAEAizS,CACA,CAzDA,CAyDC/C;AACD,SAAA6B,GAAAyB,EAAAx4M,EAAA5qO,GAGA,IAFA,IAAA22T,EAAAysH,EAAAh0f,WACAs0f,KACAz6f,EAAA,EAAkBA,EAAA2hT,EAAA1hT,OAAkBD,IAAA,CACpC,IAAAoqM,EAAAu3G,EAAA3hT,GACA06f,EAAAtwT,EAAAsjM;AACA,GAAAgtH,EAAAxtf,YAAAitf,EAAA,CACA,KAAAO,GAAAhtH,GACAA,EAAAv5O,GAAAu5O,GACA+sH;AAEA/sH,IAAAnkT,WACA,MACAkxa,KACAN,EAAAj0f,aAAAw0f,EAAAhtH;AAEA,GAAAtjM,aAAAosT,GAAA,CACA,IAAAx8c,EAAA0zV,IAAAljH,gBAAA2vO,EAAA75O;AACAo4O,GAAAtuT,EAAAo8M,WAAAp8M,EAAAlvL,SAAA67D,GACA22T,EAAA1zV,IAAAuvC,YAAA4wa,EAAAh0f,UACA,CACA,CACA,KAAAunY,GACAA,EAAAv5O,GAAAu5O,GACA+sH;AAEAA,GAAA1jb,EAAAmjb,aAAAC,IAAApjb,EAAAmjb,YAAA,KACA,CACA,IAAAS,GAAA,SAAA72e,GACAA,IAAApkB,KAAAokB,WACA;AACA62e,GAAAh2f,UAAA8iB,OAAAxjB,OAAA;AACA,IAAA22f,GAAA,KAAAD;AACA,SAAAnB,GAAA3F,EAAAjwe,EAAAy1e,GACA,MAAAxF,EAAA5zf,OAAA,OAAA26f;AAGA,IAFA,IAAArtf,EAAA8rf,EAAAuB,GAAA,OAAAD,GACAh0e,EAAA,CAAApZ,GACAvN,EAAA,EAAkBA,EAAA6zf,EAAA5zf,OAAsBD,IAAA,CACxC,IAAAw5E,EAAAq6a,EAAA7zf,GAAAwD,KAAAg2E;AACA,GAAAA,EAEA,QAAA1xE,KADA0xE,EAAA11D,UAAA6C,EAAArf,KAAAiG,EAAA,IAAAotf,GAAAnhb,EAAA11D,WACA01D,EAAA,CACA,IAAA3mC,EAAA2mC,EAAA1xE;AACA,MAAA+qC,IACAwmd,GAAA,GAAA1ye,EAAA1mB,QAAA0mB,EAAArf,KAAAiG,EAAA,IAAAotf,GAAA/2e,EAAAk6X,SAAA,eACA,SAAAh2Y,EAAAyF,EAAAg4F,OAAAh4F,EAAAg4F,MAAAh4F,EAAAg4F,MAAA,QAAA1yD,EAAyF,SAAA/qC,EAAAyF,EAAAF,OAAAE,EAAAF,MAAAE,EAAAF,MAAA,IAAiE,IAAAwlC,EAAc,YAAA/qC,IAAAyF,EAAAzF,GAAA+qC,GACxK,CACA,CACA,OAAAlsB,CACA,CACA,SAAA4ye,GAAAsB,EAAAxiC,EAAAyiC,EAAAC,GACA,GAAAD,GAAAF,IAAAG,GAAAH,GAAA,OAAAviC;AAEA,IADA,IAAA2iC,EAAA3iC,EACAr4d,EAAA,EAAkBA,EAAA+6f,EAAA96f,OAAwBD,IAAA,CAC1C,IAAAq3f,EAAA0D,EAAA/6f,GACAmwQ,EAAA2qP,EAAA96f;AACA,GAAAA,EAAA,CACA,IAAAwnB,OAAA;AACA2oP,KAAArsP,UAAAuze,EAAAvze,UAAAk3e,GAAAH,IAAArze,EAAAwze,EAAA9tf,aAAAsa,EAAA1D,SAAAC,eAAAsze,EAAAvze,YAGA0D,EAAAnjB,SAAAkvE,cAAA8jb,EAAAvze,WACAk2e,YACAxye,EAAApjB,YAAA42f,GACA7qP,EAAAyqP,GAAA,IALAI,EAAAxze,CAQA,CACAyze,GAAAD,EAAA7qP,GAAAyqP,GAAA,GAAAvD,EACA,CACA,OAAA2D,CACA,CACA,SAAAC,GAAAvtH,EAAAv9H,EAAA/pG,GACA,QAAAt+J,KAAAqoQ,EAAA,SAAAroQ,GAAA,SAAAA,GAAA,YAAAA,QAAAs+J,GAAAsnO,EAAAvkT,gBAAArhF;AACA,QAAAkwM,KAAA5xC,EAAA,SAAA4xC,GAAA,SAAAA,GAAA,YAAAA,GAAA5xC,EAAA4xC,IAAAm4D,EAAAn4D,IAAA01L,EAAA5/X,aAAAkqM,EAAA5xC,EAAA4xC;AACA,GAAAm4D,EAAA5qK,OAAA6gE,EAAA7gE,MAAA,CAGA,IAFA,IAAA21Z,EAAA/qP,EAAA5qK,MAAA4qK,EAAA5qK,MAAA5tF,MAAA,KAAAsO,OAAAk7B,SAAA,GACAg6c,EAAA/0V,EAAA7gE,MAAA6gE,EAAA7gE,MAAA5tF,MAAA,KAAAsO,OAAAk7B,SAAA,GACAnhD,EAAA,EAAoBA,EAAAk7f,EAAAj7f,OAAqBD,KAAA,GAAAm7f,EAAA5xf,QAAA2xf,EAAAl7f,KAAA0tY,EAAAj0T,UAAA2B,OAAA8/a,EAAAl7f;AACzC,QAAAs2d,EAAA,EAAsBA,EAAA6kC,EAAAl7f,OAAsBq2d,KAAA,GAAA4kC,EAAA3xf,QAAA4xf,EAAA7kC,KAAA5oF,EAAAj0T,UAAAniC,IAAA6jd,EAAA7kC;AAC5C,GAAA5oF,EAAAj0T,UAAAx5E,QAAAytY,EAAAvkT,gBAAA,QACA,CACA,GAAAgnL,EAAA9iQ,OAAA+4J,EAAA/4J,MAAA,CACA,GAAA8iQ,EAAA9iQ,MAGA,IAFA,IACAxD,EADA+gL,EAAA,gFAEA/gL,EAAA+gL,EAAAzqL,KAAAgwQ,EAAA9iQ,QAAAqgY,EAAArgY,MAAAgmP,eAAAxpP,EAAA;AAEAu8J,EAAA/4J,QAAAqgY,EAAArgY,MAAA44E,SAAAmgF,EAAA/4J,MACA,CACA,CACA,SAAAssf,GAAAjsH,EAAA2pH,EAAAzze,GACA,OAAA21e,GAAA7rH,IAAAktH,GAAApB,GAAAnC,EAAAzze,EAAA,GAAA8pX,EAAA52S,UACA,CACA,SAAAiga,GAAAv2f,EAAAma,GACA,GAAAna,EAAAP,QAAA0a,EAAA1a,OAAA;AACA,QAAAD,EAAA,EAAkBA,EAAAQ,EAAAP,OAAcD,IAAA,IAAAQ,EAAAR,GAAAwD,KAAAiwP,GAAA94O,EAAA3a,GAAAwD,MAAA;AAChC,QACA,CACA,SAAA2wJ,GAAAu5O,GACA,IAAA/0S,EAAA+0S,EAAAnkT;AAEA,OADAmkT,EAAAxgY,WAAA1E,YAAAklY,GACA/0S,CACA,CACA,IAAAy+Z,GAAA,WACA,SAAAA,EAAA7pf,EAAA4hK,EAAAp4F,GACA07D,EAAA/yI,KAAA03f,GACA13f,KAAAyvK,OACAzvK,KAAAq3E,OACAr3E,KAAA+I,MAAA,EACA/I,KAAAiqD,MAAA,GACAjqD,KAAAo6J,WACAp6J,KAAA6N,MACA7N,KAAA07f,SAoOA,SAAA1gC,EAAA2gC,GACA,IAAAC,EAAAD,EACAE,EAAAD,EAAApgf,SAAAjb,OACAu7f,EAAA9gC,EAAAroF,WACAjgR,EAAA,IAAAr7F,IACA7R,EAAA;AACA80Q,EAAA,KAAAwhO,EAAA,IAEA,IADA,IAAApxT,OAAA,IAEA,GAAAmxT,EAAA,CACA,IAAA5ia,EAAA2ia,EAAApgf,SAAAqgf,EAAA;AACA,KAAA5ia,aAAA69Z,IAGU,CACVpsT,EAAAzxG,EACA4ia;AACA,KACA,CANAD,EAAA3ia,EACA4ia,EAAA5ia,EAAAz9E,SAAAjb,MAMA,KAAQ,IAAAq7f,GAAAD,EACR,MAAArhO;AAEAuhO,EAAAD,EAAA9ze,OAAAtM,SAAA3R,QAAA+xf,GACAA,IAAA9ze,MACA,CAEA,IAAA5D,EAAAwmL,EAAAxmL;AACA,GAAAA,EAAA,CACA,GAAAA,GAAA82c,EAAAl0T,MAAAg1V,EAAA,WACAA,EACAppY,EAAA7lG,IAAA69K,EAAAoxT,GACAt2e,EAAA5d,KAAA8iM,EAJA,CAKA,CACA,OACA3hM,MAAA+yf,EACAppY,UACAltG,UAAArU,UAEA,CAtCA,CApOAtD,EAAAqW,KAAAu9D,QAAA5zE,EACA,CAiOA,OAhOAqlI,EAAAwkX,EAAA,EACAz+d,IAAA,iBACAt2B,MAAA,SAAAuc,EAAAC,GACA,GAAAD,GAAAC,EAAA,CACA,QAAA7e,EAAA4e,EAA0B5e,EAAA6e,EAAS7e,IAAAN,KAAA6N,IAAA2N,SAAAlb,GAAA88E;AACnCp9E,KAAA6N,IAAA2N,SAAA1R,OAAAoV,EAAAC,EAAAD,GACAlf,KAAAo6J,UAHA,CAIA,GACG,CACHnhI,IAAA,cACAt2B,MAAA,WACA3C,KAAA+7f,eAAA/7f,KAAA+I,MAAA/I,KAAA6N,IAAA2N,SAAAjb,OACA,GACG,CACH04B,IAAA,cACAt2B,MAAA,SAAA+lY,EAAA9qX,EAAAy5D,EAAA4gb,GAIA,IAHA,IAAAzvZ,EAAA,EACAouS,EAAA52Y,KAAAiqD,MAAA1pD,QAAA,EACAy7f,EAAAj5f,KAAA8b,IAAA+3X,EAAAlO,EAAAnoY,QACAioG,EAAAwzZ,IAAAxzZ,GAAAouS,EAAA,EAAA52Y,KAAA6N,IAAA7N,KAAAiqD,MAAAu+C,EAAA,OAAAyzZ,YAAAvzH,EAAAlgS,UAAAkgS,EAAAlgS,GAAA1kG,KAAAimW,KAAAy/B,UAAAhhS;AACA,KAAAA,EAAAouS,GACA52Y,KAAA84f,cACA94f,KAAA6N,IAAAqmf,MA5nCA,EA6nCAl0f,KAAA+I,MAAA/I,KAAAiqD,MAAA0nG,MACA3xJ,KAAA6N,IAAA7N,KAAAiqD,MAAA0nG,MACAilP;AAEA,KAAAA,EAAAlO,EAAAnoY,QAAA,CACAP,KAAAiqD,MAAAriD,KAAA5H,KAAA6N,IAAA7N,KAAA+I,MAAA;AACA,IAAAmxN,GAAA,EACAgiS,EAAAl8f,KAAA6N,IAAA2N,SAAAjb;AACA03f,EAAAj4f,KAAA07f,SAAA3yf,QAAAmzf,EAAAn5f,KAAA8b,IAAA7e,KAAA+I,MAAA,EAAAmzf;AACA,QAAA57f,EAAAN,KAAA+I,MAAiCzI,EAAA47f,EAAY57f,IAAA,CAC7C,IAAA24F,EAAAj5F,KAAA6N,IAAA2N,SAAAlb;AACA,GAAA24F,EAAAgja,YAAAvzH,EAAAkO,MAAA52Y,KAAAm8f,SAAAlja,EAAA+0S,KAAA,CACA9zK,EAAA55N;AACA,KACA,CACA,CACA,GAAA45N,EAAA,GAAAl6N,KAAA+I,MAAA/I,KAAA6N,IAAA2N,SAAAjb,OAAA,CACA,IAAAmmK,EAAA1mK,KAAA6N,IAAA2N,SAAAxb,KAAA+I;AACA29J,aAAAowV,IA5oCA,GA4oCApwV,EAAAwtV,OAAAxtV,EAAAroD,KAAAv6G,MAAA4kY,EAAAkO,GAAA9yY,MAAA4iK,EAAAqjM,KAAAp5V,SAAA3Q,KAAAm8f,SAAAz1V,EAAAsnO,MAAAtnO,EAAAqjM,KAAAp5V,OAAA+3X,EAAAkO,MACAlwO,EAAAroD,KAAAqqR,EAAAkO,GACA18K,EAAAl6N,KAAA+I,MACA/I,KAAAo6J,WAEA,CACA,GAAA8/D,GAAA,EACAA,EAAAl6N,KAAA+I,QACA/I,KAAAo6J,WACAp6J,KAAA+7f,eAAA/7f,KAAA+I,MAAAmxN,IAEAl6N,KAAA6N,IAAA7N,KAAA6N,IAAA2N,SAAAxb,KAAA+I;IACU,CACV,IAAAqzf,EAAAtF,GAAAvyf,OAAAvE,KAAA6N,IAAA66X,EAAAkO,GAAAh5X,EAAAy5D;AACAr3E,KAAA6N,IAAA2N,SAAA1R,OAAA9J,KAAA+I,MAAA,EAAAqzf,GACAp8f,KAAA6N,IAAAuuf,EACAp8f,KAAAo6J,UACA,CACAp6J,KAAA+I,MAAA,EACA6tY,GACA,CACA,GACG,CACH39W,IAAA,gBACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAArrf,GACA,IACAszf,EADAniS,GAAA;AAEA,GAAAnxN,GAAA/I,KAAA07f,SAAA3yf,QAAAszf,EAAAr8f,KAAA07f,SAAAl2e,QAAAzc,EAAA/I,KAAA07f,SAAA3yf,QAAA+e,QAAA9nB,KAAA6N,KAAAwuf,EAAAC,YAAAp4e,EAAAiwe,EAAAC,GACAl6R,EAAAl6N,KAAA6N,IAAA2N,SAAA3R,QAAAwyf,EAAAr8f,KAAA+I;KAEA,QAAAzI,EAAAN,KAAA+I,MAAA1I,EAAA0C,KAAA8b,IAAA7e,KAAA6N,IAAA2N,SAAAjb,OAAAD,EAAA,GAAgFA,EAAAD,EAAOC,IAAA,CACvF,IAAAwmK,EAAA9mK,KAAA6N,IAAA2N,SAAAlb;AACA,GAAAwmK,EAAAw1V,YAAAp4e,EAAAiwe,EAAAC,KAAAp0f,KAAA07f,SAAAhpY,QAAA9hG,IAAAk2I,GAAA,CACAozD,EAAA55N;AACA,KACA,CACA,CAEA,QAAA45N,EAAA,IACAl6N,KAAA+7f,eAAA/7f,KAAA+I,MAAAmxN,GACAl6N,KAAA+I,QACA,GACA,GACG,CACHkwB,IAAA,eACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAArrf,EAAAsuE,GACA,IAAAyvF,EAAA9mK,KAAA6N,IAAA2N,SAAAzS;AAEA,OA5rCA,GA2rCA+9J,EAAAotV,OAAAptV,EAAAknO,KAAAlnO,EAAAggP,aAAAhgP,EAAAotV,MA5rCA,KA6rCAptV,EAAAn2J,OAAAuT,EAAAiwe,EAAAC,EAAA/8a,KACAr3E,KAAA+7f,eAAA/7f,KAAA+I,SACA/I,KAAA+I,WAEA,GACG,CACHkwB,IAAA,qBACAt2B,MAAA,SAAAumd,GACA,OAAa,CACb,IAAAphc,EAAAohc,EAAA17c;AACA,IAAAsa,EAAA;AACA,GAAAA,GAAA9nB,KAAA6N,IAAAi5Y,WAAA,CACA,IAAAp8M,EAAAw+Q,EAAA6lC;AACA,GAAArkT,EAAA,QAAApqM,EAAAN,KAAA+I,MAA6CzI,EAAAN,KAAA6N,IAAA2N,SAAAjb,OAA8BD,IAC3E,GAAAN,KAAA6N,IAAA2N,SAAAlb,IAAAoqM,EAAA,OAAApqM;AAEA,QACA,CACA4od,EAAAphc,CACA,CACA,GACG,CACHmR,IAAA,iBACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAA/8a,EAAAtuE,EAAAuxC,GACA,QAAAh6C,EAAAN,KAAA+I,MAA+BzI,EAAAN,KAAA6N,IAAA2N,SAAAjb,OAA8BD,IAAA,CAC7D,IAAA24F,EAAAj5F,KAAA6N,IAAA2N,SAAAlb;AACA,GAAA24F,aAAAk+Z,GAAA,CACA,IAAAoF,EAAAv8f,KAAA07f,SAAAhpY,QAAApmG,IAAA2sE;AACA,SAAAsja,MAAAxzf,EAAA;AACA,IAAAirZ,EAAA/6T,EAAA+0S,IACAriC,OAAA,EACA9rG,EAAA7/P,KAAAm8f,SAAAnoG,MAAA9vY,EAAAymX,QAAA1xS,EAAA/0E,MAAA+0E,EAAA/0E,KAAAymX,QAAA1xS,EAAA0/X,QAAAlhY,WAAAvzE,EAAA7gB,MA3tCA,GA2tCA41F,EAAAi7Z,OAAAmD,GAAAlD,EAAAl7Z,EAAAk7Z;AACA,IAAAt0P,GAAA5mK,EAAAtoF,OAAAuT,EAAAiwe,EAAAC,EAAA/8a,GAIA,OAHAr3E,KAAA+7f,eAAA/7f,KAAA+I,MAAAzI,GACA24F,EAAA+0S,KAAAgmB,IAAAh0Z,KAAAo6J,YACAp6J,KAAA+I;AAEY,IAAA82P,IAAA8rG,EAAA3rW,KAAAw8f,gBAAAvja,EAAA/0E,EAAAiwe,EAAAC,EAAA/8a,EAAA/8B,IAUZ,OATAt6C,KAAA+7f,eAAA/7f,KAAA+I,MAAAzI,GACAN,KAAA6N,IAAA2N,SAAAxb,KAAA+I,OAAA4iW,EACAA,EAAAm7C,aACAn7C,EAAAuoJ,MAtuCA,EAuuCAvoJ,EAAA+tJ,eAAArib,EAAA/8B,EAAA,GACAqxT,EAAAuoJ,MA1uCA,GA4uCAl0f,KAAAo6J,WACAp6J,KAAA+I;AAGA,KACA,CACA,CACA,QACA,GACG,CACHkwB,IAAA,kBACAt2B,MAAA,SAAAs2F,EAAA/0E,EAAAiwe,EAAAC,EAAA/8a,EAAA/8B,GACA,GAAA2+C,EAAAi7Z,OAAAhwe,EAAAwmX,SAAAzxS,EAAAz9E,SAAAjb,SAAA04F,EAAA/0E,KAAAu9D,QAAAsyK,GAAA7vO,EAAAu9D,WAAA41a,GAAAlD,EAAAl7Z,EAAAk7Z,aAAAC,EAAArgQ,GAAA96J,EAAAm7Z,WAAA;AACA,IAAA1gb,EAAAyjb,GAAA5yf,OAAAvE,KAAA6N,IAAAqW,EAAAiwe,EAAAC,EAAA/8a,EAAA/8B;AACA,GAAAo5B,EAAAozU,WAAA,CACApzU,EAAAl4D,SAAAy9E,EAAAz9E,SACAy9E,EAAAz9E,SAAA;AACA,IACAu9H,EADAI,EAAApH,EAAAr+D,EAAAl4D;AAEA,IACA,IAAA29H,EAAA32I,MAA8Bu2I,EAAAI,EAAA34I,KAAA6lF,MAC9B0yD,EAAAp2I,MACAmlB,OAAA4rD,CAEA,CAAU,MAAAxgC,GACVimG,EAAA94I,EAAA6yC,EACA,CAAU,QACVimG,EAAAjtI,GACA,CACA,CAEA,OADA+sF,EAAA7b,UACA1J,CACA,GACG,CACHz6C,IAAA,UACAt2B,MAAA,SAAAuhB,EAAAiwe,EAAAC,EAAA/8a,EAAA/8B,GACA,IAAAowJ,EAAAysT,GAAA5yf,OAAAvE,KAAA6N,IAAAqW,EAAAiwe,EAAAC,EAAA/8a,EAAA/8B;AACAowJ,EAAAo8M,YAAAp8M,EAAAgvT,eAAArib,EAAA/8B,EAAA,GACAt6C,KAAA6N,IAAA2N,SAAA1R,OAAA9J,KAAA+I,QAAA,EAAA2hM,GACA1qM,KAAAo6J,UACA,GACG,CACHnhI,IAAA,cACAt2B,MAAA,SAAAsrU,EAAA52P,EAAA/8B,GACA,IAAA2+C,EAAAj5F,KAAA+I,MAAA/I,KAAA6N,IAAA2N,SAAAjb,OAAAP,KAAA6N,IAAA2N,SAAAxb,KAAA+I,OAAA;AACA,IAAAkwF,MAAAwja,cAAAxuL,OAAAh1O,EAAAg1O,QAAAh1O,EAAAg1O,OAAAnqU,KAAAolY,MAAA17X,WAEQ,CACR,IAAAk9L,EAAA,IAAAqqT,GAAA/0f,KAAA6N,IAAAogU,EAAA52P,EAAA/8B;AACAt6C,KAAA6N,IAAA2N,SAAA1R,OAAA9J,KAAA+I,QAAA,EAAA2hM,GACA1qM,KAAAo6J,UACA,MALAp6J,KAAA+I,OAMA,GACG,CACHkwB,IAAA,oBACAt2B,MAAA,WAGA,IAFA,IAAAi+Q,EAAA5gR,KAAA6N,IAAA2N,SAAAxb,KAAA+I,MAAA,GACA+e,EAAA9nB,KAAA6N,IACA+yQ,aAAAk2O,IAEAl2O,GADA94P,EAAA84P,GACAplQ,SAAAsM,EAAAtM,SAAAjb,OAAA,KAEAqgR,kBAAAu5O,KAAA,MAAA90e,KAAAu7P,EAAA18P,KAAA7gB,OAAArD,KAAAq3E,KAAAqlb,uBAAA,MAAAr3e,KAAAu7P,EAAA18P,KAAA7gB,UACA2sf,GAAAF,IAAAlvO,GAAA,SAAAA,EAAAotH,IAAA/3O,iBAAAj2J,KAAA28f,YAAA,MAAA70e,GACA9nB,KAAA28f,YAAA,KAAA38f,KAAA6N,KAEA,GACG,CACHorB,IAAA,cACAt2B,MAAA,SAAAyhB,EAAA0D,GACA,GAAAA,GAAA9nB,KAAA6N,KAAA7N,KAAA+I,MAAA+e,EAAAtM,SAAAjb,QAAAunB,EAAAtM,SAAAxb,KAAA+I,OAAA6zf,YAAAx4e,GACApkB,KAAA+I;IACQ,CACR,IAAAilY,EAAArpY,SAAAkvE,cAAAzvD;AACA,OAAAA,IACA4pX,EAAAx9X,UAAA,wBACAw9X,EAAAuO,IAAA,IAEA,MAAAn4X,IAAA4pX,EAAAx9X,UAAA;AACA,IAAAqsf,EAAA,IAAA/H,GAAA90f,KAAA6N,IAAA,GAAAmgY,EAAA;AACAlmX,GAAA9nB,KAAA6N,IAAAia,EAAAtM,SAAA5T,KAAAi1f,GAA2D/0e,EAAAtM,SAAA1R,OAAA9J,KAAA+I,QAAA,EAAA8zf,GAC3D78f,KAAAo6J,UACA,CACA,GACG,CACHnhI,IAAA,WACAt2B,MAAA,SAAAuhB,GACA,OAAAlkB,KAAAyvK,OAAAvrJ,GAAAlkB,KAAAyvK,MAAA,GAAAvrJ,EAAAkzE,UAAAlzE,EAAA1N,SAAAxW,KAAAyvK,KAAAjiK,YACA,KAEAkqf,CACA,CA5OA;AAoRA,SAAAQ,GAAAp3f,EAAAma,GACA,OAAAna,EAAAgD,KAAA8a,KAAA3D,EAAAnX,KAAA8a,IACA,CAiGA,SAAAq4e,GAAA92S,EAAA5yL,EAAAk/B,EAAA4qB,EAAA4sZ,GAEA,IADA,IAAAh9c,EAAA,GACA3mB,EAAA,EAAA+T,EAAA,EAA2B/T,EAAA6/M,EAAA5/M,OAAkBD,IAAA,CAC7C,IAAAwmK,EAAAq5C,EAAA7/M,GACA4e,EAAA7K,EACA8K,EAAA9K,GAAAyyJ,EAAAzoJ;AACAa,GAAAutC,GAAAttC,GAAAoO,EACAtG,EAAArf,KAAAk/J,IAEA5nJ,EAAAqO,GAAAtG,EAAArf,KAAAk/J,EAAA1mK,MAAA,EAAAmtB,EAAArO,EAAAm4D,IACA4sZ,IACAh9c,EAAArf,KAAAq8d,GACAA,OAAAxyc,GAEAtS,EAAAstC,GAAAxlC,EAAArf,KAAAk/J,EAAA1mK,MAAAqsD,EAAAvtC,EAAA4nJ,EAAAzoJ,KAAAg5D,IAEA,CACA,OAAApwD,CACA,CACA,SAAA61e,GAAAzlb,GACA,IAAA4xF,EAAAr2J,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,QACAs8e,EAAA73a,EAAAu+a,oBACAjre,EAAA0sD,EAAAp1D,MAAA0I;AACA,IAAAuke,EAAAC,UAAA;AACA,IAAAwD,EAAAt7a,EAAAivU,QAAAqsG,YAAAzD,EAAAC,WACA4N,EAAApK,GAAA,GAAAA,EAAAt0e,KACA+2D,EAAAiC,EAAAivU,QAAAusG,WAAA3D,EAAAC,UAAAD,EAAAvuO,YAAA;AACA,GAAAvrM,EAAA;AACA,IACA08U,EACA/9S,EAFAuiS,EAAA3rX,EAAAqqD,QAAAI;AAGA,GAAA65a,EAAAC,GAAA,CAEA,IADAp9F,EAAA18U,EACAu9a,MAAAzue,MAAAyue,IAAA7qe;AACA,IAAAk1e,EAAArK,EAAAzue;AACA,GAAAyue,GAAAqK,EAAAtyH,QAAAqoF,EAAAj0E,cAAAyI,aAAAy1G,IAAArK,EAAA7qe,UAAAk1e,EAAA5+G,WAxhEA,SAAAl6X,EAAAlG,EAAA8J,GACA,QAAAqrX,EAAA,GAAAn1X,EAAAq1X,EAAAr1X,GAAA00X,EAAAxuX,GAAoEivX,GAAAE,GAAiB,CACrF,GAAAnvX,GAAA4D,EAAA;AACA,IAAA/e,EAAAulf,EAAApqe;AAEA,KADAA,IAAA1W,YACA;AACA2lY,KAAA,GAAApqY,EACAsqY,KAAAtqY,GAAA2pY,EAAAxuX,EACA,CACA,CATA,CAwhEAgre,EAAAC,UAAAD,EAAAvuO,YAAAgyO,EAAA3kH,MAAA,CACA,IAAA1zV,EAAAq4c,EAAAC;AACA7+Y,EAAA,IAAAg/W,EAAAj0E,cAAA1pU,GAAA96B,EAAAg8V,EAAA3rX,EAAAqqD,QAAA16B,GACA,CACA,KAAI,CACJ,GAAA40c,aAAA73a,EAAA22T,IAAAxpX,cAAAC,YAAAyuX,WAAAg8G,EAAA+N,WAAA,GAGA,IAFA,IAAAp+e,EAAAu2D,EACAt2D,EAAAs2D,EACA90E,EAAA,EAAsBA,EAAA4uf,EAAA+N,WAAuB38f,IAAA,CAC7C,IAAA43E,EAAAg3a,EAAAx5Z,WAAAp1F;AACAue,EAAA9b,KAAA8b,MAAAw4D,EAAAivU,QAAAusG,WAAA36a,EAAAq6a,eAAAr6a,EAAAhkC,YAAA,IACAp1B,EAAA/b,KAAA+b,MAAAu4D,EAAAivU,QAAAusG,WAAA36a,EAAAglb,aAAAhlb,EAAAljC,WAAA,GACA,CACA,GAAAn2B,EAAA;AACA,IACA6yG,EAAAy8X,EADArve,GAAAu4D,EAAAp1D,MAAA8xF,UAAA+9S,OAAA,CAAAhzY,EAAAD,GAAA,CAAAA,EAAAC,GACA;AACAgzY,EAAApgS,EAAA,GACAt8C,EAAAs8C,EAAA,GACA4kR,EAAA3rX,EAAAqqD,QAAAI,EACA,MACA08U,EAAAz6U,EAAAivU,QAAAusG,WAAA3D,EAAAE,WAAAF,EAAAxuO,aAAA;AAEA,GAAAoxI,EAAA,aACA,CACA,IAAAxX,EAAA3vX,EAAAqqD,QAAA88U;AAKA,OAJA/9S,IAEAA,EAAAopZ,GAAA9lb,EAAAijU,EAAAhE,EADA,WAAArtO,GAAA5xF,EAAAp1D,MAAA8xF,UAAA3+B,KAAAkhU,EAAAh8V,MAAAyid,EAAA,OAGAhpZ,CACA,CACA,SAAAqpZ,GAAA/lb,GACA,OAAAA,EAAAi1P,SAAAj1P,EAAAyjU,WAAAuiH,GAAAhmb,IAAA1yE,SAAAqK,eAAArK,SAAAqK,cAAAwH,SAAA6gE,EAAA22T,IACA,CACA,SAAAsvH,GAAAjmb,GACA,IAAA+qP,EAAAxvT,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA,GACAutY,EAAA9oU,EAAAp1D,MAAA8xF;AAEA,GADAwpZ,GAAAlmb,EAAA8oU,GACAi9G,GAAA/lb,GAAA,CACA,IAAAmmb,EAAAnmb,EAAAznE,MAAA4tf;AACA,IAAAp7L,GAAA0tL,GAAA0N,EAAA,CACA,IAAAtO,EAAA73a,EAAAu+a,oBACA6H,EAAApmb,EAAAqmb,YAAA9iM;AACA,GAAAs0L,EAAAE,YAAAqO,EAAArO,YAAAX,EAAAS,EAAAE,WAAAF,EAAAxuO,aAAA+8O,EAAArO,WAAAqO,EAAA/8O,eAAA88O,EAAAG,iBAEA,YADAtmb,EAAAqmb,YAAAE,iBAGA,CAEA,GADAvmb,EAAAqmb,YAAAG,sBACAxmb,EAAAymb,eAoEA,SAAAzmb,GACA,IAAA63a,EAAA73a,EAAA0mb;AACA,GAAA7O,EAAA,CACA,IAAAhre,EAAAmzD,EAAAymb,cAAA9vH,IACAgwH,EAAA,OAAA95e,EAAAE;AACA45e,EAAA9O,EAAAgH,SAAAhye,EAAA1W,WAAA8gf,EAAApqe,GAAA,GAAgEgre,EAAAgH,SAAAhye,EAAA,IAChE85e,IAAA3mb,EAAAp1D,MAAA8xF,UAAA38B,SAAA15D,GAAAgye,GAAA,KACAxre,EAAAxU,YACAwU,EAAAxU,YANA,CAQA,CAVA,CAnEA2nE;IACI,CACJ,IAEA4mb,EACAC,EAHApsG,EAAA3R,EAAA2R,OACA18U,EAAA+qU,EAAA/qU;CAGA+ob,IAAAh+G,aAAA4yE,EAAAjgF,gBACAqN,EAAA/V,MAAAtiX,OAAAm2X,gBAAAggH,EAAAG,GAAA/mb,EAAA8oU,EAAA5yX,OACA4yX,EAAA7iT,OAAA6iT,EAAA/V,MAAAtiX,OAAAm2X,gBAAAigH,EAAAE,GAAA/mb,EAAA8oU,EAAA1zV,MAEA4qB,EAAAivU,QAAAhR,aAAAwc,EAAA18U,EAAAiC,EAAA+qP,GACA+7L,KACAF,GAAAI,GAAAJ,GACAC,GAAAG,GAAAH,IAEA/9G,EAAA/oU,QACAC,EAAA22T,IAAAj0T,UAAA2B,OAAA,8BAEArE,EAAA22T,IAAAj0T,UAAAniC,IAAA,6BACA,sBAAAjzC,UAiCA,SAAA0yE,GACA,IAAA1sD,EAAA0sD,EAAA22T,IAAAxpX;AACAmG,EAAA6E,oBAAA,kBAAA6nD,EAAAznE,MAAA0uf;AACA,IAAApP,EAAA73a,EAAAu+a,oBACA1xe,EAAAgre,EAAAE,WACApxe,EAAAkxe,EAAAxuO;AACA/1P,EAAAwD,iBAAA,kBAAAkpD,EAAAznE,MAAA0uf,mBAAA,WACApP,EAAAE,YAAAlre,GAAAgre,EAAAxuO,cAAA1iQ,IACA2M,EAAA6E,oBAAA,kBAAA6nD,EAAAznE,MAAA0uf,oBACAnvf,WAAA,WACAiuf,GAAA/lb,OAAAp1D,MAAA8xF,UAAA38B,SAAAC,EAAA22T,IAAAj0T,UAAA2B,OAAA,4BACA,EAAO,IAEP,EACA,CAdA,CAjCArE,GAEA,CACAA,EAAAqmb,YAAAE,kBACAvmb,EAAAqmb,YAAAa,kBAnCA,CAoCA,CACA,IAAAJ,GAAAnO,GAAAF,GAAAC,EAAA;AACA,SAAAqO,GAAA/mb,EAAA/8B,GACA,IAAAkkd,EAAAnnb,EAAAivU,QAAA6sG,WAAA74c,EAAA,GACAp2B,EAAAs6e,EAAAt6e,KACAlG,EAAAwgf,EAAAxgf,OACAi/J,EAAAj/J,EAAAkG,EAAAopM,WAAA/sN,OAAA2jB,EAAAopM,WAAAtvM,GAAA,KACAg/J,EAAAh/J,EAAAkG,EAAAopM,WAAAtvM,EAAA;AACA,GAAAgye,GAAA/yU,GAAA,SAAAA,EAAAhnB,gBAAA,OAAAivP,GAAAjoO;AACA,KAAAA,GAAA,SAAAA,EAAAhnB,iBAAA+mB,GAAA,SAAAA,EAAA/mB,iBAAA,CACA,GAAAgnB,EAAA,OAAAioO,GAAAjoO;AAAyC,GAAAD,EAAA,OAAAkoO,GAAAloO,EACzC,CACA,CACA,SAAAkoO,GAAAxiY,GAMA,OALAA,EAAAuzI,gBAAA,OACA+5V,GAAAtte,EAAAxQ,YACAwQ,EAAAxQ,aACAwQ,EAAA+7e,iBAEA/7e,CACA,CACA,SAAA27e,GAAA37e,GACAA,EAAAuzI,gBAAA,QACAvzI,EAAA+7e,eACA/7e,EAAAxQ,aACAwQ,EAAA+7e,aAAA,KAEA,CA2BA,SAAAlB,GAAAlmb,EAAA8oU,GACA,GAAAA,aAAA4yE,EAAAj0E,cAAA,CACA,IAAAp0M,EAAArzH,EAAAivU,QAAAuuG,OAAA10G,EAAA5yX;AACAm9K,GAAArzH,EAAAqnb,uBACAC,GAAAtnb,GACAqzH,KAAAmwT,aACAxjb,EAAAqnb,qBAAAh0T,EAEA,MACAi0T,GAAAtnb,EAEA,CACA,SAAAsnb,GAAAtnb,GACAA,EAAAqnb,uBACArnb,EAAAqnb,qBAAA52e,QAAAuvD,EAAAqnb,qBAAA5D,eACAzjb,EAAAqnb,0BAAAjte,EAEA,CACA,SAAA0re,GAAA9lb,EAAAijU,EAAAhE,EAAAxB,GACA,OAAAz9T,EAAAslU,SAAA,kCAAAzwY,GACA,OAAAA,EAAAmrE,EAAAijU,EAAAhE,EACA,IAAGy8E,EAAAjgF,cAAA62E,QAAArvE,EAAAhE,EAAAxB,EACH,CACA,SAAA8pH,GAAAvnb,GACA,QAAAA,EAAAi1P,WAAAj1P,EAAAyjU,aACAuiH,GAAAhmb,EACA,CACA,SAAAgmb,GAAAhmb,GACA,IAAA8oU,EAAA9oU,EAAAu+a;AACA,IAAAz1G,EAAAivG,WAAA;AACA,IACA,OAAA/3a,EAAA22T,IAAAx3X,SAAA,GAAA2pY,EAAAivG,WAAAh4Z,SAAA+oT,EAAAivG,WAAA5hf,WAAA2yY,EAAAivG,cAAA/3a,EAAAi1P,UAAAj1P,EAAA22T,IAAAx3X,SAAA,GAAA2pY,EAAAgvG,UAAA/3Z,SAAA+oT,EAAAgvG,UAAA3hf,WAAA2yY,EAAAgvG,WACA,CAAI,MAAA3/e,GACJ,QACA,CACA,CAMA,SAAAqvf,GAAA58e,EAAAve,GACA,IAAAqwd,EAAA9xc,EAAA8xF,UACAumS,EAAAy5E,EAAAz5E,QACAhE,EAAAy9E,EAAAz9E,MACAwoH,EAAAp7f,EAAA,EAAA42Y,EAAAx7X,IAAAw3X,GAAAgE,EAAAz7X,IAAAy3X,GACAiV,EAAAuzG,EAAAh3e,OAAAm2X,cAAA6gH,EAAAloH,MAAA30X,EAAA0I,IAAAqqD,QAAAtxE,EAAA,EAAAo7f,EAAA7hV,QAAA6hV,EAAA9hV,UAAA,KAAA8hV;AACA,OAAAvzG,GAAAwnE,EAAA7/E,UAAAsgF,SAAAjoE,EAAA7nZ,EACA,CACA,SAAAiP,GAAA0kE,EAAA8oU,GAEA,OADA9oU,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAq2V,aAAA6K,GAAA5F,oBAEA,CACA,SAAAwkH,GAAA1nb,EAAA3zE,EAAAs7f,GACA,IAAA7+G,EAAA9oU,EAAAp1D,MAAA8xF;AACA,KAAAosS,aAAA4yE,EAAAjgF,eA4BI,IAAAqN,aAAA4yE,EAAAj0E,eAAAqB,EAAAj8X,KAAAk6X,SACJ,OAAAzrY,GAAA0kE,EAAA,IAAA07Y,EAAAjgF,cAAApvY,EAAA,EAAAy8Y,EAAApO,IAAAoO,EAAA/V;AAEA,IAAAy7F,EAAAg5B,GAAAxnb,EAAAp1D,MAAAve;AACA,QAAAmie,GAAAlzd,GAAA0kE,EAAAwuZ,EAEA,CAjCA,GAAAm5B,EAAAn1f,QAAA,SACA,IAAAysY,EAAA6J,EAAA7J,MACApyX,EAAAoyX,EAAA03C,WAAA,KAAAtqb,EAAA,EAAA4yY,EAAArL,WAAAqL,EAAApL;AACA,IAAAhnX,KAAAymX,SAAAzmX,EAAA+zX,OAAA;AACA,IAAAgnH,EAAA5nb,EAAAp1D,MAAA0I,IAAAqqD,QAAAshU,EAAAh8V,IAAAp2B,EAAAwuX,UAAAhvY,EAAA;AACA,OAAAiP,GAAA0kE,EAAA,IAAA07Y,EAAAjgF,cAAAqN,EAAA7F,QAAA2kH,GACA,CAAM,IAAA9+G,EAAA7iT,MACN;AACM,GAAAjmB,EAAA47Y,eAAAvvd,EAAA,yBACN,IAAAu1F,EAAA4la,GAAAxnb,EAAAp1D,MAAAve;AACA,SAAAu1F,gBAAA85X,EAAAj0E,gBAAAnsY,GAAA0kE,EAAA4hB,EAEA,CAAM,KAAA2lY,GAAAogC,EAAAn1f,QAAA,UACN,IAEA6gM,EAFAw0T,EAAA/+G,EAAA7J,MACA6oH,EAAAD,EAAAlxE,WAAA,KAAAtqb,EAAA,EAAAw7f,EAAAj0H,WAAAi0H,EAAAh0H;AAEA,IAAAi0H,KAAAx0H,OAAA;AACA,IAAAywG,EAAA13e,EAAA,EAAAw7f,EAAA5kd,IAAA6kd,EAAAzsH,SAAAwsH,EAAA5kd;AACA,SAAA6kd,EAAAz0H,SAAAhgM,EAAArzH,EAAAivU,QAAAuuG,OAAAzZ,MAAA1wS,EAAAo8M,cACAisE,EAAAj0E,cAAAyI,aAAA43G,GACAxsf,GAAA0kE,EAAA,IAAA07Y,EAAAj0E,cAAAp7Y,EAAA,EAAA2zE,EAAAp1D,MAAA0I,IAAAqqD,QAAAkqb,EAAA5kd,IAAA6kd,EAAAzsH,UAAAwsH,MACQ9O,GACRz9e,GAAA0kE,EAAA,IAAA07Y,EAAAjgF,cAAAz7T,EAAAp1D,MAAA0I,IAAAqqD,QAAAtxE,EAAA,EAAA03e,IAAA+jB,EAAAzsH,YAIA,CAQA,CACA,SAAA0sH,GAAAl7e,GACA,UAAAA,EAAAkzE,SAAAlzE,EAAAuzE,UAAAl3F,OAAA2jB,EAAAopM,WAAA/sN,MACA,CACA,SAAA8+f,GAAArxH,EAAAtqY,GACA,IAAAgnM,EAAAsjM,EAAA+gH;AACA,OAAArkT,GAAA,GAAAA,EAAArsL,OAAA3a,EAAA,GAAAsqY,EAAAnkT,aAAA,MAAAmkT,EAAA5pX,SACA,CACA,SAAAk7e,GAAAjob,EAAA3zE,GACA,OAAAA,EAAA,EAEA,SAAA2zE,GACA,IAAA8oU,EAAA9oU,EAAAu+a,oBACA1xe,EAAAi8X,EAAAgvG,UACAnxe,EAAAmiY,EAAAx/H;AACA,GAAAz8P,EAAA,CACA,IAAA47O,EACAy/P,EACAn9L;AAEA,IADAwtL,GAAA,GAAA1re,EAAAkzE,UAAAp5E,EAAAohf,GAAAl7e,IAAAm7e,GAAAn7e,EAAAopM,WAAAtvM,IAAA,KAAAokT,QAEA,GAAApkT,EAAA,GACA,MAAAkG,EAAAkzE,SACA;AAEA,IAAA4lF,EAAA94J,EAAAopM,WAAAtvM,EAAA;AACA,GAAAqhf,GAAAriV,GAAA,GACA8iF,EAAA57O,EACAq7e,IAAAvhf;IACU,OAAAg/J,EAAA5lF,SAGA;AADVp5E,GADAkG,EAAA84J,GACAvlF,UAAAl3F,MACU,CAEV,KAAM,IAAAi/f,GAAAt7e,GACN;AAGA,IADA,IAAAusP,EAAAvsP,EAAA4mQ,gBACAra,GAAA4uP,GAAA5uP,GAAA,IACA3Q,EAAA57O,EAAA1W,WACA+xf,EAAAjR,EAAA79O,GACAA,IAAAqa;AAEA,GAAAra,EAMAzyP,EAAAohf,GADAl7e,EAAAusP;IALA,CAEA,IADAvsP,IAAA1W,aACA6pE,EAAA22T,IAAA;AACAhwX,EAAA,CACA,CAIA,CAEAokT,EAAAq9L,GAAApob,EAAAnzD,EAAAlG,GAA6C8hP,GAAA2/P,GAAApob,EAAAyoL,EAAAy/P,EAtC7C,CAuCA,CA3CA,CAFAlob,GA8CA,SAAAA,GACA,IAAA8oU,EAAA9oU,EAAAu+a,oBACA1xe,EAAAi8X,EAAAgvG,UACAnxe,EAAAmiY,EAAAx/H;AACA,GAAAz8P,EAAA,CAGA,IAFA,IACA47O,EAAAy/P,EADAvoe,EAAAooe,GAAAl7e,KAGA,GAAAlG,EAAAgZ,EAAA,CACA,MAAA9S,EAAAkzE,SAAA;AAEA,IAAAioa,GADAn7e,EAAAopM,WAAAtvM,GACA,GAGQ;AAFR8hP,EAAA57O,EACAq7e,IAAAvhf,CAEA,KAAM,IAAAwhf,GAAAt7e,GACN;AAGA,IADA,IAAA+0E,EAAA/0E,EAAA2lE,YACAoP,GAAAoma,GAAApma,EAAA,IACA6mK,EAAA7mK,EAAAzrF,WACA+xf,EAAAjR,EAAAr1Z,GAAA,EACAA,IAAApP;AAEA,GAAAoP,EAMAj7E,EAAA,EACAgZ,EAAAooe,GAFAl7e,EAAA+0E;IALA,CAEA,IADA/0E,IAAA1W,aACA6pE,EAAA22T,IAAA;AACAhwX,EAAAgZ,EAAA,CACA,CAKA,CAEA8oO,GAAA2/P,GAAApob,EAAAyoL,EAAAy/P,EA/BA,CAgCA,CApCA,CA9CAlob,EACA,CAkFA,SAAAmob,GAAAxxH,GACA,IAAAtjM,EAAAsjM,EAAA+gH;AACA,OAAArkT,KAAAxmL,MAAAwmL,EAAAxmL,KAAAmlJ,OACA,CA2BA,SAAAo2V,GAAApob,EAAAnzD,EAAAlG,GAEA,IAAAg/J,EAAAC;AADA,GAAA/4J,EAAAkzE,YAEA6lF,EA7BA,SAAA/4J,EAAAlG,GACA,KAAAkG,GAAAlG,GAAAkG,EAAAopM,WAAA/sN,SAAAuuf,EAAA5qe,IACAlG,EAAAswe,EAAApqe,GAAA,EACAA,IAAA1W;AAEA,KAAA0W,GAAAlG,EAAAkG,EAAAopM,WAAA/sN,QAAA,CACA,IAAA04F,EAAA/0E,EAAAopM,WAAAtvM;AACA,MAAAi7E,EAAA7B,SAAA,OAAA6B;AACA,MAAAA,EAAA7B,UAAA,SAAA6B,EAAAg9D,gBAAA;AACA/xI,EAAA+0E,EACAj7E,EAAA,CACA,CACA,CAZA,CA6BAkG,EAAAlG,KACAkG,EAAA+4J,EACAj/J,EAAA,IACMg/J,EAnBN,SAAA94J,EAAAlG,GACA,KAAAkG,IAAAlG,IAAA8we,EAAA5qe,IACAlG,EAAAswe,EAAApqe,GACAA,IAAA1W;AAEA,KAAA0W,GAAAlG,GAAA,CACA,IAAAi7E,EAAA/0E,EAAAopM,WAAAtvM,EAAA;AACA,MAAAi7E,EAAA7B,SAAA,OAAA6B;AACA,MAAAA,EAAA7B,UAAA,SAAA6B,EAAAg9D,gBAAA;AAEAj4I,GADAkG,EAAA+0E,GACAq0H,WAAA/sN,MACA,CACA,CAZA,CAmBM2jB,EAAAlG,MACNkG,EAAA84J,EACAh/J,EAAAg/J,EAAAvlF,UAAAl3F;AAGA,IAAA4/Y,EAAA9oU,EAAA0mb;AACA,GAAA59G,EAAA,CACA,GAAA8uG,EAAA9uG,GAAA,CACA,IAAAjoU,EAAAvzE,SAAAmxF;AACA5d,EAAA8d,OAAA9xE,EAAAlG,GACAk6D,EAAA6d,SAAA7xE,EAAAlG,GACAmiY,EAAAlqT,kBACAkqT,EAAAjqT,SAAAhe,EACA,MAAIioU,EAAArgZ,QACJqgZ,EAAArgZ,OAAAokB,EAAAlG;AAEAq5D,EAAAqmb,YAAAE;AACA,IAAA37e,EAAAo1D,EAAAp1D;AACA9S,WAAA,WACAkoE,EAAAp1D,UAAAq7e,GAAAjmb,EACA,EAAG,GAdH,CAeA,CACA,SAAAqob,GAAArob,EAAA/8B,GACA,IAAA+3V,EAAAh7T,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B;AACA,IAAAw1c,IAAAjxB,GAAAxsF,EAAAvqX,OAAAm2X,cAAA,CACA,IAAAl8X,EAAAs1D,EAAA4zU,YAAA3wW;AACA,GAAAA,EAAA+3V,EAAAnzX,QAAA,CACA,IAAA89J,EAAA3lG,EAAA4zU,YAAA3wW,EAAA,GACA+ma,GAAArkS,EAAAnvK,IAAAmvK,EAAAlvK,QAAA;AACA,GAAAuzc,EAAAt/b,EAAAlU,KAAAwzc,EAAAt/b,EAAAjU,QAAA/K,KAAAqN,IAAA4sK,EAAApvK,KAAAmU,EAAAnU,MAAA,SAAAovK,EAAApvK,KAAAmU,EAAAnU,KAAA,WACA,CACA,GAAA0sC,EAAA+3V,EAAAlzX,MAAA,CACA,IAAA89J,EAAA5lG,EAAA4zU,YAAA3wW,EAAA,GACAqld,GAAA1iV,EAAApvK,IAAAovK,EAAAnvK,QAAA;AACA,GAAA6xf,EAAA59e,EAAAlU,KAAA8xf,EAAA59e,EAAAjU,QAAA/K,KAAAqN,IAAA6sK,EAAArvK,KAAAmU,EAAAnU,MAAA,SAAAqvK,EAAArvK,KAAAmU,EAAAnU,KAAA,WACA,CACA,CAEA,aADAwX,iBAAAiyD,EAAA22T,KAAArqY,UACA,WACA,CACA,SAAAi8f,GAAAvob,EAAA3zE,EAAAs7f,GACA,IAAA7+G,EAAA9oU,EAAAp1D,MAAA8xF;AACA,GAAAosS,aAAA4yE,EAAAjgF,gBAAAqN,EAAA7iT,OAAA0ha,EAAAn1f,QAAA;AACA,GAAA+0d,GAAAogC,EAAAn1f,QAAA;AACA,IAAAugY,EAAA+V,EAAA/V,MACA2H,EAAAoO,EAAApO;AACA,IAAA3H,EAAAtiX,OAAAm2X,eAAA5mU,EAAA47Y,eAAAvvd,EAAA,gBACA,IAAAu1F,EAAA4la,GAAAxnb,EAAAp1D,MAAAve;AACA,GAAAu1F,gBAAA85X,EAAAj0E,cAAA,OAAAnsY,GAAA0kE,EAAA4hB,EACA,CACA,IAAAmxS,EAAAtiX,OAAAm2X,cAAA,CACA,IAAAr/X,EAAAlb,EAAA,EAAA0mY,EAAA2H,EACA8tH,EAAA1/G,aAAA4yE,EAAA31E,aAAA21E,EAAA7/E,UAAAqC,KAAA32X,EAAAlb,GAAAqvd,EAAA7/E,UAAAsgF,SAAA50c,EAAAlb;AACA,QAAAm8f,GAAAltf,GAAA0kE,EAAAwob,EACA,CACA,QACA,CACA,SAAAC,GAAAzob,EAAA3zE,GACA,KAAA2zE,EAAAp1D,MAAA8xF,qBAAAg/W,EAAAjgF,eAAA;AACA,IAAAitH,EAAA1ob,EAAAp1D,MAAA8xF,UACAuiS,EAAAypH,EAAAzpH,MACAgE,EAAAylH,EAAAzlH,QACAh9S,EAAAyia,EAAAzia;AACA,IAAAg5S,EAAAoI,WAAApE,GAAA;AACA,IAAAh9S,EAAA;AACA,GAAAjmB,EAAA47Y,eAAAvvd,EAAA;AACA,IAAA6iN,GAAA+vL,EAAA03C,aAAAtqb,EAAA,EAAA4yY,EAAArL,WAAAqL,EAAApL;AACA,GAAA3kL,MAAAokL,OAAA,CACA,IAAA1rV,EAAAo4B,EAAAp1D,MAAAg9B;AAGA,OAFAv7C,EAAA,EAAAu7C,EAAAqmC,OAAAgxT,EAAAh8V,IAAAisK,EAAAmsL,SAAA4D,EAAAh8V,KAAwE2E,EAAAqmC,OAAAgxT,EAAAh8V,IAAAg8V,EAAAh8V,IAAAisK,EAAAmsL,UACxEr7T,EAAAyuM,SAAA7mO,KAEA,CACA,QACA,CACA,SAAA+gd,GAAA3ob,EAAAnzD,EAAAjC,GACAo1D,EAAAqmb,YAAAxzf,OACAga,EAAA+xI,gBAAAh0I,EACAo1D,EAAAqmb,YAAAx+e,OACA,CA+CA,SAAA+gf,GAAA5ob,EAAAj3E,GACAi3E,EAAAslU,SAAA,2BAAAzwY,GACA9L,EAAA8L,EAAA9L,EAAAi3E,EACA;AAMA,IALA,IAAAz+C,EAAA,GACAkud,EAAA1mf,EACAqhF,EAAAqla,EAAArla,QACA0/Y,EAAA2lB,EAAA3lB,UACAC,EAAA0lB,EAAA1lB,QACAD,EAAA,GAAAC,EAAA,MAAA3/Y,EAAAkxT,YAAA,GAAAlxT,EAAAh7E,WAAAksY,YAAA,CACAwuF,IACAC;AACA,IAAAl9c,EAAAu9D,EAAAh7E;AACAmyB,EAAAhxB,KAAAsc,EAAApgB,KAAAsE,KAAA8b,EAAA41D,OAAA51D,EAAApgB,KAAAy/d,aAAAr/c,EAAA41D,MAAA,MACA2H,EAAAv9D,EAAAu9D,OACA,CACA,IAAAvpD,EAAAm/C,EAAAslU,SAAA,wBAAAm2E,EAAA9oF,cAAAC,WAAA5yT,EAAAp1D,MAAAgmG,QACAt9F,EAAAu1e,KACA/4O,EAAAx8P,EAAAkpD,cAAA;AACAszM,EAAAziR,YAAAwzB,EAAAgyW,kBAAAzoT,EAAA,CACA98E,SAAAgmB;AAKA,IAHA,IACAgve,EADAlzf,EAAA0gR,EAAA1gR,WAEA0pe,EAAA,EACA1pe,GAAA,GAAAA,EAAA2wF,WAAAuia,EAAAwG,GAAA15f,EAAA2d,SAAAC,iBAAA,CACA,QAAA/jB,EAAAq5f,EAAAp5f,OAAA,EAAuCD,GAAA,EAAQA,IAAA,CAE/C,IADA,IAAAozE,EAAA/oD,EAAAkpD,cAAA8lb,EAAAr5f,IACA6mR,EAAA1gR,YAAAitE,EAAAhvE,YAAAyiR,EAAA1gR;AACA0gR,EAAAziR,YAAAgvE,GACAy8Z,GACA,CACA1pe,EAAA0gR,EAAA1gR,UACA,CAKA,OAJAA,GAAA,GAAAA,EAAA2wF,UAAA3wF,EAAA2H,aAAA,mBAAAqE,OAAA0ud,EAAA,KAAA1ud,OAAA2ud,GAAA3ud,OAAA09d,EAAA,KAAA19d,OAAA09d,GAAA,QAAA19d,OAAAwD,KAAA8iB,UAAAH,KAIA,CACAo1W,IAAA7mH,EACA9jR,KALAg0E,EAAAslU,SAAA,mCAAAzwY,GACA,OAAAA,EAAA9L,EAAAi3E,EACA,IAAGj3E,EAAAqhF,QAAAqsT,YAAA,EAAA1tY,EAAAqhF,QAAApjE,KAAA,QAIHje,QAEA,CACA,SAAAgggB,GAAA/ob,EAAAh0E,EAAAknB,EAAA81e,EAAAl5F,GACA,IACAn5B,EAAA5tY,EADAkggB,EAAAn5F,EAAAr/Y,OAAAhkB,KAAAimW,KAAAtzV;AAEA,IAAA8T,IAAAlnB,EAAA;AACA,IAAAk9f,IAAAl9f,IAAAg9f,GAAAC,IAAA/1e;AACA,GAAAg2e,EAAA,CAIA,GAHAlpb,EAAAslU,SAAA,+BAAAzwY,GACA7I,EAAA6I,EAAA7I,EAAAi9f,GAAAD,EAAAhpb,EACA,GACAipb,EAKA,OAJAlggB,EAAA,IAAA0yd,EAAA5yE,MAAA4yE,EAAA90K,SAAAzwR,KAAA8pD,EAAAp1D,MAAAgmG,OAAA5kH,OAAAod,QAAA,sBACA42D,EAAAslU,SAAA,2BAAAzwY,GACA9L,EAAA8L,EAAA9L,EAAAi3E,KACA,GACAj3E;AAEA,IAAAuuV,EAAAt3Q,EAAAslU,SAAA,+BAAAzwY,GACA,OAAAA,EAAA7I,EAAA8ja,EAAAk5F,EAAAhpb,EACA;AACA,GAAAs3Q,EACAvuV,EAAAuuV;IACM,CACN,IAAA+5C,EAAAy+B,EAAAz+B,QACAzgR,EAAA5wC,EAAAp1D,MAAAgmG,OACA/vF,EAAA46b,EAAA9oF,cAAAC,WAAAhiR;AACA+lR,EAAArpY,SAAAkvE,cAAA,OACAxwE,EAAA4U,MAAA,iBAAAuC,QAAA,SAAA8uJ,GACA,IAAAzkK,EAAAmpY,EAAAtpY,YAAAC,SAAAkvE,cAAA;AACAy1F,GAAAzkK,EAAAH,YAAAwzB,EAAAsoe,cAAAv4Y,EAAA5kH,KAAAimK,EAAAo/N,IACA,EACA,CACA,MACArxT,EAAAslU,SAAA,+BAAAzwY,GACAqe,EAAAre,EAAAqe,EAAA8sD,EACA,GACA22T,EAoIA,SAAAzjX,GACA,IAAAy7Z,EAAA,sBAAAvlb,KAAA8pB;AACAy7Z,IAAAz7Z,IAAAnqB,MAAA4lb,EAAA,GAAAzlb;AACA,IAGA4mR,EAHAx8P,EAAAu1e,KACAv3V,EAAAh+I,EAAApd,KACAkzf,EAAA,mBAAAhggB,KAAA8pB;AAQA,IANA48P,EAAAs5O,GAAAN,GAAAM,EAAA,GAAAp8e,kBAAAkG,EAAA48P,EAAAvjQ,IAAA,SAAApjB,GACA,UAAAA,EAAA,GACA,GAAGsX,KAAA,IAAAyS,EAAA48P,EAAAvjQ,IAAA,SAAApjB,GACH,WAAAA,EAAA,GACA,GAAG2Q,UAAA2G,KAAA,KACH6wJ,EAAAjgK,UAtBA,SAAA6hB,GACA,IAAAm2e,EAAAj3f,OAAAi3f;AACA,OAAAA,GACAC,QAAAD,EAAAE,eAAAF,EAAAG,aAAA,wBACAC,WAAA,SAAAt+f,GACA,OAAAA,CACA,KAEAm+f,GAAAG,WAAAv2e,IANAA,CAOA,CATA,CAsBAA,GACA48P,EAAA,QAAA7mR,EAAA,EAA4BA,EAAA6mR,EAAA5mR,OAAiBD,IAAAqoK,IAAA/uF,cAAAutM,EAAA7mR,KAAAqoK;AAC7C,QAAAyjV,EAAA,EAAoBA,EAAAzhe,EAAAo2e,YAAAxggB,OAA8B6rf,IAElD,IADA,IAAAz+e,EAAAgd,EAAAo2e,YAAA3U,GACAzma,EAAA,EAAoBA,EAAAh4E,EAAAgwK,MAAAp9K,OAAwBolF,IAAA,CAC5C,IAAA/9B,EAAAj6C,EAAAgwK,MAAAh4F;AACA,GAAA/9B,aAAAo5c,aAEA,IADA,IAAAx7e,EAAAmjJ,EAAA1zF,iBAAArtB,EAAAq5c,cACAvlf,EAAA,EAAwBA,EAAA8J,EAAAjlB,OAAoBmb,IAAA8J,EAAA9J,GAAA/N,MAAA44E,SAAA3+B,EAAAj6C,MAAA44E,OAE5C,CAEA,OAAAoiF,CACA,CAzBA,CApIAp+I,GACA6le,GA6JA,SAAApiH,GAEA,IADA,IAAA7tL,EAAA6tL,EAAA/4T,iBAAA66a,EAAA,+DACAxvf,EAAA,EAAkBA,EAAA6/M,EAAA5/M,OAAkBD,IAAA,CACpC,IAAA4jB,EAAAi8L,EAAA7/M;AACA,GAAA4jB,EAAAopM,WAAA/sN,QAAA,KAAA2jB,EAAAgzE,aAAAhzE,EAAA1W,YAAA0W,EAAA1W,WAAAo0d,aAAA5zF,EAAAxpX,cAAA5f,eAAA,KAAAsf,EACA,CACA,CANA,CA7JA8pX;AAEA,IAAAkzH,EAAAlzH,KAAAp0T,cAAA,mBACAunb,EAAAD,GAAA,gCAAAzggB,KAAAyggB,EAAApyf,aAAA;AACA,GAAAqyf,KAAA,WAAA7ggB,GAAA6ggB,EAAA,GAA6D7ggB,EAAA,EAAOA,IAAA,CAEpE,IADA,IAAAwmK,EAAAknO,EAAAvnY,WACAqgK,GAAA,GAAAA,EAAA1vE,UAAA0vE,IAAAj9E;AACA,IAAAi9E,EAAA;AACAknO,EAAAlnO,CACA,CACA,IAAA1mK,EAAA,CACA,IAAAi5I,EAAAhiE,EAAAslU,SAAA,oBAAAtlU,EAAAslU,SAAA,cAAAm2E,EAAAj/E,UAAA5J,WAAA5yT,EAAAp1D,MAAAgmG;AACA7nH,EAAAi5I,EAAAs7P,WAAA3G,EAAA,CACAsN,sBAAAilH,IAAAY,GACAvoe,QAAAuuY,EACA0kE,aAAA,SAAA79F,GACA,YAAAA,EAAA5pX,UAAA4pX,EAAAnkT,cAAAmkT,EAAAxgY,YAAA4zf,GAAA/7e,KAAA2oX,EAAAxgY,WAAA4W,UAGA,KAHA,CACA0sF,UAGA,GAEA,CACA,GAAAqwZ,EACA/ggB,EA4IA,SAAAA,EAAAw4B,GACA,IAAAx4B,EAAAie,KAAA,OAAAje;AACA,IACA05I,EADA7xB,EAAA7nH,EAAAqhF,QAAAh7E,WAAA3C,KAAAmkH;AAEA,IACA6xB,EAAA7jI,KAAAC,MAAA0iB,EACA,CAAI,MAAAv4B,GACJ,OAAAD,CACA,CAIA,IAHA,IAAAqhF,EAAArhF,EAAAqhF,QACA0/Y,EAAA/ge,EAAA+ge,UACAC,EAAAhhe,EAAAghe,QACA9ge,EAAAw5I,EAAAv5I,OAAA,EAAiCD,GAAA,EAAQA,GAAA,GACzC,IAAAwD,EAAAmkH,EAAAk4F,MAAArmE,EAAAx5I;AACA,IAAAwD,KAAA4yY,mBAAA;AACAj1T,EAAAqxY,EAAA90K,SAAAzwR,KAAAzpB,EAAAS,OAAAu1I,EAAAx5I,EAAA,GAAAmhF,IACA0/Y,IACAC,GACA,CACA,WAAAtO,EAAA5yE,MAAAz+T,EAAA0/Y,EAAAC,EACA,CApBA,CA5IAigC,GAAAjhgB,GAAA+ggB,EAAA,IAAAA,EAAA,IAAAA,EAAA;KAGA,GADA/ggB,EAAA0yd,EAAA5yE,MAAAyoF,QAeA,SAAA7+F,EAAAq9B,GACA,GAAAr9B,EAAA6I,WAAA,SAAA7I;AA0BA,IAzBA,IAwBAlwP,EAxBAR,EAAA,WACA,IAEAkoX,EADAzke,EADAsqY,EAAAjjZ,KAAAvkB,GACA+5Y,eAAAytB,EAAAp+Z,MAAApJ,IAEAsnB,EAAA;AAgBA,GAfA6iX,EAAAtvX,QAAA,SAAA0J,GACA,GAAA+C,EAAA,CACA,IACAs6e,EADAp6O,EAAAtqP,EAAA6uX,aAAAxnY,EAAApgB;AAEA,IAAAqjR,EAAA,OAAAlgQ,EAAA;AACA,GAAAs6e,EAAAt6e,EAAA1mB,QAAA+ggB,EAAA/ggB,QAAAihgB,GAAAr6O,EAAAm6O,EAAAp9e,EAAA+C,IAAA1mB,OAAA,MACA0mB,IAAA1mB,OAAA,GAAAghgB;IACU,CACVt6e,EAAA1mB,SAAA0mB,IAAA1mB,OAAA,GAAAkhgB,GAAAx6e,IAAA1mB,OAAA,GAAA+ggB,EAAA/ggB;AACA,IAAAmhgB,EAAAC,GAAAz9e,EAAAijQ;AACAlgQ,EAAArf,KAAA85f,GACA7ke,IAAAsrX,UAAAu5G,EAAA59f,MACAw9f,EAAAn6O,CACA,CAZA,CAaA,GACAlgQ,EAAA,OACA3V,EAAAwhd,EAAA90K,SAAAzwR,KAAAtG,GAEA,EAEAtnB,EAAAwna,EAAAvwB,MAA+Bj3Y,GAAA,EAAQA,IAEvC,GADAi6I,EAAAR,IACA,OAAAQ,EAAAtoI;AAEA,OAAAw4X,CACA,CAhCA,CAfA1pY,EAAAqhF,QAAA0lV,OACA/ma,EAAA+ge,WAAA/ge,EAAAghe,QAAA,CAGA,IAFA,IAAAD,EAAA,EACAC,EAAA,EACAl9c,EAAA9jB,EAAAqhF,QAAAh7E,WAAgD06d,EAAA/ge,EAAA+ge,YAAAj9c,EAAApgB,KAAAimW,KAAAg/B,UAA0Do4F,IAAAj9c,IAAAzd,YAC1G,QAAAm7f,EAAAxhgB,EAAAqhF,QAAAm/L,UAAiDwgN,EAAAhhe,EAAAghe,UAAAwgC,EAAA99f,KAAAimW,KAAAg/B,UAAwDq4F,IAAAwgC,IAAAhhP,WACzGxgR,EAAAihgB,GAAAjhgB,EAAA+ge,EAAAC,EACA,CAKA,OAHA/pZ,EAAAslU,SAAA,2BAAAzwY,GACA9L,EAAA8L,EAAA9L,EAAAi3E,EAAAkpb,EACA,GACAnggB,CACA,CACA,IAAAghgB,GAAA;AAkCA,SAAAO,GAAAz9e,EAAAijQ,GAEA,IADA,IAAA55P,EAAA3a,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KACAtS,EAAA6mR,EAAA5mR,OAAA,EAAgCD,GAAAitB,EAAWjtB,IAAA4jB,EAAAijQ,EAAA7mR,GAAAiE,OAAA,KAAAuud,EAAA90K,SAAAzwR,KAAArJ;AAC3C,OAAAA,CACA,CACA,SAAAs9e,GAAAr6O,EAAAm6O,EAAAp9e,EAAAkyI,EAAAwgP,GACA,GAAAA,EAAAzvH,EAAA5mR,QAAAq2Y,EAAA0qH,EAAA/ggB,QAAA4mR,EAAAyvH,IAAA0qH,EAAA1qH,GAAA,CACA,IAAAv8G,EAAAmnO,GAAAr6O,EAAAm6O,EAAAp9e,EAAAkyI,EAAAwqH,UAAAg2H,EAAA;AACA,GAAAv8G,EAAA,OAAAjkI,EAAAyB,KAAAzB,EAAA30E,QAAAmgZ,aAAAxrU,EAAAu8O,WAAA,EAAAt4G;AAEA,GADAjkI,EAAAsjP,eAAAtjP,EAAAu8O,YACAwV,UAAAvR,GAAAzvH,EAAA5mR,OAAA,EAAA2jB,EAAApgB,KAAAqjR,EAAAyvH,EAAA,WAAAxgP,EAAAyB,KAAAzB,EAAA30E,QAAA6vH,OAAAwhR,EAAA90K,SAAAzwR,KAAAo0e,GAAAz9e,EAAAijQ,EAAAyvH,EAAA,KACA,CACA,CACA,SAAA6qH,GAAAv9e,EAAA0yX,GACA,MAAAA,EAAA,OAAA1yX;AACA,IAAA4lX,EAAA5lX,EAAAu9D,QAAAmgZ,aAAA19c,EAAAyuX,WAAA,EAAA8uH,GAAAv9e,EAAA08P,UAAAg2H,EAAA,IACA8wB,EAAAxjZ,EAAAw1X,eAAAx1X,EAAAyuX,YAAA60F,WAAA1U,EAAA90K,SAAA1gN;AACA,OAAAp5E,EAAA2zI,KAAAiyO,EAAAx4L,OAAAo2N,GACA,CACA,SAAAm6F,GAAA/3H,EAAAlrX,EAAA2O,EAAAk/B,EAAAmqV,EAAAwqF,GACA,IAAAl9c,EAAAtF,EAAA,EAAAkrX,EAAArjY,WAAAqjY,EAAAlpH,UACAyZ,EAAAn2Q,EAAAu9D;AAIA,OAHAqoT,EAAA6I,WAAA,IAAAyuF,EAAA,GACAxqF,EAAAnqV,EAAA,IAAA4tO,EAAAwnO,GAAAxnO,EAAAz7Q,EAAA2O,EAAAk/B,EAAAmqV,EAAA,EAAAwqF,IACAxqF,GAAArpX,IAAA8sQ,EAAAz7Q,EAAA,EAAAsF,EAAAw1X,eAAA,GAAA8tF,WAAAntM,EAAA+mM,GAAAxqF,GAAAtlM,OAAA+oF,KAAA/oF,OAAAptL,EAAAw1X,eAAAx1X,EAAAyuX,YAAA60F,WAAA1U,EAAA90K,SAAA1gN,YACAwsS,EAAA83F,aAAAhjd,EAAA,IAAAkrX,EAAA6I,WAAA,EAAAzuX,EAAA2zI,KAAAwiI,GACA,CACA,SAAAgnO,GAAAjhgB,EAAA+ge,EAAAC,GAGA,OAFAD,EAAA/ge,EAAA+ge,YAAA/ge,EAAA,IAAA0yd,EAAA5yE,MAAA2hH,GAAAzhgB,EAAAqhF,SAAA,EAAA0/Y,EAAA/ge,EAAA+ge,UAAA,EAAA/ge,EAAAghe,SAAAD,EAAA/ge,EAAAghe,UACAA,EAAAhhe,EAAAghe,UAAAhhe,EAAA,IAAA0yd,EAAA5yE,MAAA2hH,GAAAzhgB,EAAAqhF,QAAA,EAAA2/Y,EAAAhhe,EAAAghe,QAAA,KAAAhhe,EAAA+ge,UAAAC,IACAhhe,CACA,CACA,IAAA+/f,GAAA,CACA2B,MAAA,UACAC,MAAA,UACA73B,MAAA,UACA83B,QAAA,UACAvuG,SAAA,UACA/hJ,IAAA,qBACAzyN,GAAA,kBACAohP,GAAA,uBACA/5I,GAAA;AAEA,SAAA45W,KACA,OAAAv7f,SAAAk/J,eAAA8kG,mBAAA,QACA,CACA,IAAAg4P,GAAA,KAiEA/sT,GAAA,GACAquT,GAAA,GACAC,GAAA,CACArsQ,cACAU,cAEA4rQ,GAAAjvX,EAAA,SAAAivX,IACApvX,EAAA/yI,KAAAmigB,GACAnigB,KAAAsvG,YACAtvG,KAAAw9f,UAAA,KACAx9f,KAAAoigB,YAAA,KACApigB,KAAAqigB,gBAAA,EACArigB,KAAAsigB,UAAA,CACA95f,KAAA,EACAxB,EAAA,EACAwK,EAAA,EACA1N,KAAA,GACAuxJ,OAAA,GAEAr1J,KAAAuigB,oBAAA,KACAvigB,KAAAwigB,kBAAA,EACAxigB,KAAAyigB,aAAA,EACAzigB,KAAA0igB,6BAAA,EACA1igB,KAAA2igB,UAAA,EACA3igB,KAAA4igB,UAAA,EACA5igB,KAAA6igB,iBAAA,EACA7igB,KAAAgrY,aACAhrY,KAAAo5f,gBAAA,KACAp5f,KAAA8igB,kBAAA,EACA9igB,KAAAu5f,iBAAA,GACAv5f,KAAA+igB,oBAAA,IACA/igB,KAAAgjgB,cAAA,EACAhjgB,KAAAijgB,wBACAjjgB,KAAAkjgB,0BAAA,EACAljgB,KAAAmjgB,eAAA,EACAnjgB,KAAAojgB,cAAAr7e,OAAAxjB,OAAA,MACAvE,KAAAs+f,mBAAA,IACA;AAkBA,SAAA+E,GAAAhsb,EAAA4xF,GACA5xF,EAAAznE,MAAA2yf,oBAAAt5V,EACA5xF,EAAAznE,MAAA4yf,kBAAA7od,KAAAmT,KACA,CAQA,SAAAw2c,GAAAjsb,GACAA,EAAAslU,SAAA,2BAAA4mH,GACA,QAAAz/f,KAAAy/f,EAAAlsb,EAAAznE,MAAAwzf,cAAAt/f,IAAAuzE,EAAA22T,IAAA7/W,iBAAArqB,EAAAuzE,EAAAznE,MAAAwzf,cAAAt/f,GAAA,SAAA4F,GACA,OAAA85f,GAAAnsb,EAAA3tE,EACA,EACA,EACA,CACA,SAAA85f,GAAAnsb,EAAA3tE,GACA,OAAA2tE,EAAAslU,SAAA,2BAAA/oM,GACA,IAAAjzC,EAAAizC,EAAAlqM,EAAA5F;AACA,QAAA68J,MAAAtpF,EAAA3tE,MAAAu9K,iBACA,EACA,CA6DA,SAAAw8U,GAAA/5f,GACA,OACAkE,KAAAlE,EAAAovJ,QACAjrJ,IAAAnE,EAAAqvJ,QAEA,CAMA,SAAA2qW,GAAArsb,EAAA47P,EAAA34R,EAAA0va,EAAAtgd,GACA,OAAAsgd,EAAA;AAUA,IATA,IAQAskB,EARAj8F,EAAAh7T,EAAAp1D,MAAA0I,IAAAqqD,QAAAg1Y,GACA8e,EAAA,SAAAxoe,GACA,GAAA+2E,EAAAslU,SAAA1pE,EAAA,SAAA/mU,GACA,OAAA5L,EAAA+xY,EAAAuE,MAAA1qY,EAAAmrE,EAAA/8B,EAAA+3V,EAAAnH,UAAAmH,EAAAr1N,OAAA18K,GAAAoJ,MAAAwC,EAAAmrE,EAAA/8B,EAAA+3V,EAAAnuX,KAAA5jB,GAAA+xY,EAAAr1N,OAAA18K,GAAAoJ,KACA,GAAO,OACP4H,KAEA,EAEAhR,EAAA+xY,EAAAuE,MAAA,EAA+Bt2Y,EAAA,EAAOA,IAEtC,GADAgue,EAAAxF,EAAAxoe,GACA,OAAAgue,EAAAh9d;AAEA,QACA,CACA,SAAAiqY,GAAAlkU,EAAA08B,EAAAk1D,GAEA,GADA5xF,EAAAoE,SAAApE,EAAAhmE,SACAgmE,EAAAp1D,MAAA8xF,UAAAggJ,GAAAhgJ,GAAA,CACA,IAAA90D,EAAAo4B,EAAAp1D,MAAAg9B,GAAAq2V,aAAAvhS;AACA,WAAAk1D,GAAAhqH,EAAAosV,QAAA,cACAh0T,EAAAyuM,SAAA7mO,EAHA,CAIA,CAqCA,SAAA0kd,GAAAtsb,EAAA/8B,EAAA0va,EAAAtgd,GACA,OAAAg6f,GAAArsb,EAAA,sBAAA/8B,EAAA0va,EAAAtgd,IAAA2tE,EAAAslU,SAAA,6BAAAzwY,GACA,OAAAA,EAAAmrE,EAAA/8B,EAAA5wC,EACA,EACA,CACA,SAAAy1e,GAAA9na,EAAA/8B,EAAA0va,EAAAtgd,GACA,OAAAg6f,GAAArsb,EAAA,sBAAA/8B,EAAA0va,EAAAtgd,IAAA2tE,EAAAslU,SAAA,6BAAAzwY,GACA,OAAAA,EAAAmrE,EAAA/8B,EAAA5wC,EACA,IAEA,SAAA2tE,EAAA2yY,EAAAtgd,GACA,MAAAA,EAAA2rJ,OAAA;AACA,IAAAthD,EAAA6vZ,GAAAvsb,EAAA2yY,MACAr/b,EAAA0sD,EAAAp1D,MAAA0I;AACA,QAAAopF,IACAwnS,GAAAlkU,EAAA08B,EAAA,WACAA,aAAAg/W,EAAAjgF,eAAAnoX,EAAAopO,GAAA18K,EAAAp1D,MAAA0I,OAAA0sD,EAAAznE,MAAA4tf,UAAA,IAAAqG,GAAAxsb,EAAA08B,OAEA,CARA,CAFG18B,EAAA2yY,EAAAtgd,EACH,CAUA,SAAAk6f,GAAAvsb,EAAA2yY,EAAA85C,GACA,IAAAn5e,EAAA0sD,EAAAp1D,MAAA0I;AACA,OAAAq/b,EAAA,OAAAr/b,EAAAszX,cAAA80E,EAAAjgF,cAAAvuY,OAAAomB,EAAA,EAAAA,EAAA82D,QAAApjE,MAAA;AAEA,IADA,IAAAg0X,EAAA1nX,EAAAqqD,QAAAg1Y,GACA1pd,EAAA+xY,EAAAuE,MAAA,EAA+Bt2Y,EAAA,EAAOA,IAAA,CACtC,IAAA4jB,EAAA5jB,EAAA+xY,EAAAuE,MAAAvE,EAAAnH,UAAAmH,EAAAnuX,KAAA5jB,GACA86e,EAAA/oG,EAAAr1N,OAAA18K;AACA,GAAA4jB,EAAA+5X,cAAA,OAAA80E,EAAAjgF,cAAAvuY,OAAAomB,EAAAywd,EAAA,EAAAA,EAAA,EAAAl3d,EAAAu9D,QAAApjE;AAA4H,GAAAylf,GAAA/wC,EAAAj0E,cAAAyI,aAAArjY,GAAA,OAAA6uc,EAAAj0E,cAAAv6Y,OAAAomB,EAAAywd,EAC5H,CACA,WACA,CACA,SAAA2oB,GAAA1sb,GACA,OAAA2sb,GAAA3sb,EACA,CA1JA4qb,GAAAgC,QAAA,SAAA5sb,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ;AAEA,GADAhzL,EAAAznE,MAAA0/F,SAAA,IAAA5lG,EAAAkF,SAAAlF,EAAA4lG,UACA40Z,GAAA7sb,KACAA,EAAAznE,MAAAwyf,YAAA14f,EAAAkF,QACAyoE,EAAAznE,MAAAyyf,gBAAA1od,KAAAmT,OACAqjc,IAAAL,GAAA,IAAApmf,EAAAkF,SAEA,GADA,KAAAlF,EAAAkF,SAAAyoE,EAAAqmb,YAAAyG,cACAjU,GAAA,IAAAxmf,EAAAkF,SAAAlF,EAAA2lG,SAAA3lG,EAAAwjG,QAAAxjG,EAAA+lG,QAWIp4B,EAAAslU,SAAA,yBAAAzwY,GACJ,OAAAA,EAAAmrE,EAAA3tE,EACA,IA9YA,SAAA2tE,EAAA3tE,GACA,IAAA+M,EAAA/M,EAAAkF,QACAowf,EAVA,SAAAt1f,GACA,IAAAud,EAAA;AAKA,OAJAvd,EAAA2lG,UAAApoF,GAAA,KACAvd,EAAA+lG,UAAAxoF,GAAA,KACAvd,EAAAwjG,SAAAjmF,GAAA,KACAvd,EAAA4lG,WAAAroF,GAAA,KACAA,CACA,CAPA,CAUAvd;AACA,MAAA+M,GAAAmod,GAAA,IAAAnod,GAAA,KAAAuof,EACA,OAAAc,GAAAzob,GAAA,IAAAiob,GAAAjob,GAAA;AACI,OAAA5gE,IAAA/M,EAAA4lG,UAAAsvX,GAAA,IAAAnod,GAAA,KAAAuof,EACJ,OAAAc,GAAAzob,EAAA,IAAAiob,GAAAjob,EAAA;AACI,OAAA5gE,GAAA,IAAAA,EACJ;AACI,OAAAA,GAAAmod,GAAA,IAAAnod,GAAA,KAAAuof,EAAA,CACJ,IAAAt7f,EAAA,IAAA+S,EAAA,OAAAipf,GAAArob,IAAAp1D,MAAA8xF,UAAAxmF,OAAA;AACA,OAAAwxe,GAAA1nb,EAAA3zE,EAAAs7f,IAAAM,GAAAjob,EAAA3zE,EACA,CAAI,OAAA+S,GAAAmod,GAAA,IAAAnod,GAAA,KAAAuof,EAAA,CACJ,IAAAoF,EAAA,IAAA3tf,EAAA,OAAAipf,GAAArob,IAAAp1D,MAAA8xF,UAAAxmF,MAAA;AACA,OAAAwxe,GAAA1nb,EAAA+sb,EAAApF,IAAAM,GAAAjob,EAAA+sb,EACA,CAAI,WAAA3tf,GAAAmod,GAAA,IAAAnod,GAAA,KAAAuof,EACJY,GAAAvob,GAAA,EAAA2nb,IAAAM,GAAAjob,GAAA,GACI,IAAA5gE,GAAAmod,GAAA,IAAAnod,GAAA,KAAAuof,EAvCJ,SAAA3nb,GACA,IAAA24a,GAAA34a,EAAAp1D,MAAA8xF,UAAAuiS,MAAA9L,aAAA;AACA,IAAA65H,EAAAhtb,EAAAu+a,oBACAzG,EAAAkV,EAAAlV,UACAxuO,EAAA0jP,EAAA1jP;AACA,GAAAwuO,GAAA,GAAAA,EAAA/3Z,UAAA,GAAAupL,GAAAwuO,EAAA1of,YAAA,SAAA0of,EAAA1of,WAAAwvJ,gBAAA,CACA,IAAA6Q,EAAAqoV,EAAA1of;AACAu5f,GAAA3ob,EAAAyvF,EAAA,QACA33J,WAAA,WACA,OAAA6wf,GAAA3ob,EAAAyvF,EAAA,QACA,EAAK,GACL,CACA,QACA,CAbA,CAwCAzvF,IAAAuob,GAAAvob,EAAA,EAAA2nb,IAAAM,GAAAjob,EAAA,GACI2nb,IAAApgC,EAAA,eAAAnod,GAAA,IAAAA,GAAA,IAAAA,GAAA,IAAAA,EAIJ,CAvBA,CA8YG4gE,EAAA3tE,GACHA,EAAA4E,iBAEA+0f,GAAAhsb,EAAA;IAhBA,CACA,IAAAvqB,EAAAnT,KAAAmT;AACAuqB,EAAAznE,MAAA6yf,aAAA31c,EACAuqB,EAAAznE,MAAA8yf,4BAAAvzf,WAAA,WACAkoE,EAAAznE,MAAA6yf,cAAA31c,IACAuqB,EAAAslU,SAAA,yBAAAzwY,GACA,OAAAA,EAAAmrE,EAAAg4a,EAAA,YACA,GACAh4a,EAAAznE,MAAA6yf,aAAA,EAEA,EAAK,IACL,CAOA,EACAR,GAAAqC,MAAA,SAAAjtb,EAAA3tE,GACA,IAAAA,EAAAkF,UAAAyoE,EAAAznE,MAAA0/F,YACA,EACA2yZ,GAAAsC,SAAA,SAAAltb,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ;AACA,KAAA65P,GAAA7sb,KAAA3tE,EAAA0oN,UAAA1oN,EAAA2lG,UAAA3lG,EAAAwjG,QAAA0xX,GAAAl1d,EAAA+lG,SACA,GAAAp4B,EAAAslU,SAAA,0BAAAzwY,GACA,OAAAA,EAAAmrE,EAAA3tE,EACA,GACAA,EAAA4E;IAHA,CAMA,IAAA6xY,EAAA9oU,EAAAp1D,MAAA8xF;AACA,KAAAosS,aAAA4yE,EAAAjgF,eAAAqN,EAAA/V,MAAAsU,WAAAyB,EAAApO,MAAA,CACA,IAAA1uY,EAAAstC,OAAAiB,aAAAloC,EAAA0oN,UACAitL,EAAA,WACA,OAAAhoU,EAAAp1D,MAAAg9B,GAAA0tV,WAAAtpY,GAAAk3Y,gBACA,EACA,SAAAl1X,KAAAhiB,IAAAg0E,EAAAslU,SAAA,2BAAAzwY,GACA,OAAAA,EAAAmrE,EAAA8oU,EAAA/V,MAAA9vV,IAAA6lW,EAAApO,IAAAz3V,IAAAj3C,EAAAg8Y,EACA,IAAKhoU,EAAAyuM,SAAAu5H,KACL31Y,EAAA4E,gBACA,CAXA,CAYA;AAyGA,IAAAk2f,GAAA5lC,EAAA;AACAhrR,GAAA5+C,UAAA,SAAA39E,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ;AACAhzL,EAAAznE,MAAA0/F,SAAA5lG,EAAA4lG;AACA,IAAAm1Z,EAAAV,GAAA1sb,GACAvqB,EAAAnT,KAAAmT,MACAhpD,EAAA;AACAgpD,EAAAuqB,EAAAznE,MAAA0yf,UAAA95f,KAAA,KAzGA,SAAAkB,EAAA+2Q,GACA,IAAAl2G,EAAAk2G,EAAAz5Q,EAAA0C,EAAAovJ,QACA0R,EAAAi2G,EAAAjvQ,EAAA9H,EAAAqvJ;AACA,OAAAwR,IAAAC,IAAA,GACA,CAJA,CAyGA9gK,EAAA2tE,EAAAznE,MAAA0yf,aAAA54f,EAAA86f,KAAAntb,EAAAznE,MAAA0yf,UAAAjtW,QAAA3rJ,EAAA2rJ,SACA,eAAAh+E,EAAAznE,MAAA0yf,UAAAx+f,OAAA,cAAyE,eAAAuzE,EAAAznE,MAAA0yf,UAAAx+f,SAAA,gBAEzEuzE,EAAAznE,MAAA0yf,UAAA,CACA95f,KAAAskD,EACA9lD,EAAA0C,EAAAovJ,QACAtnJ,EAAA9H,EAAAqvJ,QACAj1J,OACAuxJ,OAAA3rJ,EAAA2rJ,QAEAh+E,EAAAznE,MAAA4tf,WAAAnmb,EAAAznE,MAAA4tf,UAAAn3a;AACA,IAAA/rC,EAAA+8B,EAAA8hZ,YAAAsqC,GAAA/5f;AACA4wC,IACA,eAAAx2C,EACAuzE,EAAAznE,MAAA4tf,UAAA,IAAAkH,GAAArtb,EAAA/8B,EAAA5wC,IAAA+6f,IACI,eAAA3ggB,EAAA6/f,GAAAxkB,IAAA9na,EAAA/8B,QAAA0va,OAAAtgd,GACJA,EAAA4E,iBAEA+0f,GAAAhsb,EAAA,WAEA;AACA,IAAAstb,GAAA,WACA,SAAAA,EAAAttb,GACA07D,EAAA/yI,KAAA2kgB,GACA3kgB,KAAAq3E,OACAr3E,KAAA4kgB,UAAA,KACAvtb,EAAA7oD,KAAAL,iBAAA,UAAAnuB,KAAA8gF,GAAA9gF,KAAA8gF,GAAAr+E,KAAAzC,OACAq3E,EAAA7oD,KAAAL,iBAAA,YAAAnuB,KAAAk8P,KAAAl8P,KAAAk8P,KAAAz5P,KAAAzC,MACA,CAwBA,OAvBAkzI,EAAAyxX,EAAA,EACA1re,IAAA,KACAt2B,MAAA,SAAA+G,GACA1J,KAAAqmF,MACA,GACG,CACHptD,IAAA,OACAt2B,MAAA,SAAA+G,GACA,GAAAA,EAAA0uE,SAAAp4E,KAAAqmF,MACA,GACG,CACHptD,IAAA,OACAt2B,MAAA,WACA3C,KAAAq3E,KAAA7oD,KAAAgB,oBAAA,UAAAxvB,KAAA8gF,IACA9gF,KAAAq3E,KAAA7oD,KAAAgB,oBAAA,YAAAxvB,KAAAk8P,MACAl8P,KAAAq3E,KAAAznE,MAAA4tf,WAAAx9f,YAAAq3E,KAAAznE,MAAA4tf,UAAA,KACA,GACG,CACHvke,IAAA,iBACAt2B,MAAA,WACA,QACA,KAEAgigB,CACA,CAhCA,GAiCAD,GAAA,SAAAG,GACAtyX,EAAAmyX,EAAAG;AACA,IAAA5Z,EAAAr4W,EAAA8xX;AACA,SAAAA,EAAArtb,EAAA/8B,EAAA5wC,EAAA+6f,GACA,IAAAtd,EAUAuH,EAAA10G;AACA,GAVAjnQ,EAAA/yI,KAAA0kgB,IACAvd,EAAA8D,EAAArgf,KAAA5K,KAAAq3E,IACA/8B,MACA6sc,EAAAz9e,QACAy9e,EAAAsd,UACAtd,EAAA2d,wBACA3d,EAAA4d,SAAA1tb,EAAAp1D,MAAA0I,IACAw8d,EAAA0T,aAAAnxf,EAAA86f,IACArd,EAAA6d,aAAAt7f,EAAA4lG,SAEAh1D,EAAA0va,QAAA,EACA0kC,EAAAr3a,EAAAp1D,MAAA0I,IAAAkuX,OAAAv+V,EAAA0va,QACAhwE,EAAA1/V,EAAA0va;IACM,CACN,IAAA33E,EAAAh7T,EAAAp1D,MAAA0I,IAAAqqD,QAAA16B;AACAo0c,EAAAr8G,EAAAvqX,OACAkyX,EAAA3H,EAAAuE,MAAAvE,EAAAr1N,SAAA,CACA,CACA,IAAAxzK,EAAAi7f,EAAA,KAAA/6f,EAAAF,OACA6yf,EAAA7yf,EAAA6tE,EAAAivU,QAAAqsG,YAAAnpf,MAAA;AACA29e,EAAA39e,OAAA6yf,GAAA,GAAAA,EAAA1jC,QAAAvhY,SAAAila,EAAA1jC,QAAA;AACA,IAAA5kX,EAAA18B,EAAAp1D,MAAA8xF;AAgBA,OAfA,GAAArqG,EAAA2rJ,SAAAq5V,EAAA5qf,KAAAimW,KAAA73V,gBAAAw8e,EAAA5qf,KAAAimW,KAAAvlB,YAAAzwO,aAAAg/W,EAAAj0E,eAAA/qS,EAAAxmF,MAAAysX,GAAAjmS,EAAAtnD,GAAAutV,KAAAmtG,EAAAyd,UAAA,CACA1gf,KAAAwqe,EACAp0c,IAAA0/V,EACAirH,WAAA9d,EAAA39e,QAAA29e,EAAA39e,OAAA0I,WACAgzf,iBAAA/d,EAAA39e,SAAAomf,GAAAzI,EAAA39e,OAAA+/F,aAAA,sBAEA49Y,EAAA39e,QAAA29e,EAAAyd,YAAAzd,EAAAyd,UAAAK,SAAA9d,EAAAyd,UAAAM,iBACA/d,EAAA9va,KAAAqmb,YAAAxzf,OACAi9e,EAAAyd,UAAAK,UAAA9d,EAAA39e,OAAA0I,cACAi1e,EAAAyd,UAAAM,eAAA/1f,WAAA,WACAg4e,EAAA9va,KAAAznE,MAAA4tf,WAAArrX,EAAAg1W,MAAA39e,OAAA4E,aAAA,0BACA,EAAO,IACP+4e,EAAA9va,KAAAqmb,YAAAx+e,SAEAmkf,GAAAhsb,EAAA,WACA8va,CACA,CAuDA,OAtDAj0W,EAAAwxX,EAAA,EACAzre,IAAA,OACAt2B,MAAA,WACA,IAAAmof,EAAA9qf;AACAs5G,EAAAk5B,EAAAkyX,EAAAz/f,WAAA,OAAAjF,MAAA4K,KAAA5K,MACAA,KAAA4kgB,WAAA5kgB,KAAAwJ,SACAxJ,KAAAq3E,KAAAqmb,YAAAxzf,OACAlK,KAAA4kgB,UAAAK,SAAAjlgB,KAAAwJ,OAAAigF,gBAAA,aACAzpF,KAAA4kgB,UAAAM,eAAAllgB,KAAAwJ,OAAAigF,gBAAA,mBACAzpF,KAAAq3E,KAAAqmb,YAAAx+e,SAEAlf,KAAA8kgB,sBAAA31f,WAAA,WACA27e,EAAAzza,KAAAmQ,aAAA81a,GAAAxS,EAAAzza,KACA,EACA,GACG,CACHp+C,IAAA,KACAt2B,MAAA,SAAA+G,GAEA,GADA1J,KAAAqmF,OACArmF,KAAAq3E,KAAA22T,IAAAx3X,SAAA9M,EAAAF,QAAA,CACA,IAAA8wC,EAAAt6C,KAAAs6C;AACAt6C,KAAAq3E,KAAAp1D,MAAA0I,KAAA3qB,KAAA+kgB,WAAAzqd,EAAAt6C,KAAAq3E,KAAA8hZ,YAAAsqC,GAAA/5f,KACA1J,KAAAmlgB,mBAAAz7f,GACA1J,KAAAglgB,eAAA1qd,EACA+od,GAAArjgB,KAAAq3E,KAAA,WAvKA,SAAAA,EAAA/8B,EAAA0va,EAAAtgd,EAAAmxf,GACA,OAAA6I,GAAArsb,EAAA,gBAAA/8B,EAAA0va,EAAAtgd,IAAA2tE,EAAAslU,SAAA,uBAAAzwY,GACA,OAAAA,EAAAmrE,EAAA/8B,EAAA5wC,EACA,KAAGmxf,EAxBH,SAAAxjb,EAAA2yY,GACA,OAAAA,EAAA;AACA,IACAo7C,EACAC,EAFAllH,EAAA9oU,EAAAp1D,MAAA8xF;AAGAosS,aAAA4yE,EAAAj0E,gBAAAsmH,EAAAjlH,EAAAj8X;AAEA,IADA,IAAAmuX,EAAAh7T,EAAAp1D,MAAA0I,IAAAqqD,QAAAg1Y,GACA1pd,EAAA+xY,EAAAuE,MAAA,EAA+Bt2Y,EAAA,EAAOA,IAAA,CACtC,IAAA4jB,EAAA5jB,EAAA+xY,EAAAuE,MAAAvE,EAAAnH,UAAAmH,EAAAnuX,KAAA5jB;AACA,GAAAyyd,EAAAj0E,cAAAyI,aAAArjY,GAAA,CACAmhf,EAAAD,GAAAjlH,EAAA/V,MAAAwM,MAAA,GAAAt2Y,GAAA6/Y,EAAA/V,MAAAwM,OAAAvE,EAAAr1N,OAAAmjO,EAAA/V,MAAAwM,MAAA,IAAAuJ,EAAA/V,MAAA9vV,IAAA+3V,EAAAr1N,OAAAmjO,EAAA/V,MAAAwM,OAAoKvE,EAAAr1N,OAAA18K;AACpK,KACA,CACA,CACA,aAAA+kgB,IACA9pH,GAAAlkU,EAAA07Y,EAAAj0E,cAAAv6Y,OAAA8yE,EAAAp1D,MAAA0I,IAAA06e,GAAA,cAKA,CApBA,CAwBGhub,EAAA2yY,GAlCH,SAAA3yY,EAAA2yY,GACA,OAAAA,EAAA;AACA,IAAA33E,EAAAh7T,EAAAp1D,MAAA0I,IAAAqqD,QAAAg1Y,GACA9lc,EAAAmuX,EAAAnH;AACA,SAAAhnX,KAAAwmX,QAAAqoF,EAAAj0E,cAAAyI,aAAArjY,MACAq3X,GAAAlkU,EAAA,IAAA07Y,EAAAj0E,cAAAzM,GAAA,cAIA,CATA,CAkCGh7T,EAAA2yY,GACH,CAJA,CAwKQhqd,KAAAq3E,KAAA/8B,QAAA0va,OAAAtgd,EAAA1J,KAAA66f,YACRnxf,EAAA4E,iBACQ,GAAA5E,EAAA2rJ,SAAAr1J,KAAAykgB,SAAAzU,GAAAhwf,KAAA4kgB,YAAA5kgB,KAAA4kgB,UAAA1gf,KAAAwmX,QAAAolH,IAAA9vf,KAAAq3E,KAAAp1D,MAAA8xF,UAAA38B,SAAAr0E,KAAA8b,IAAA9b,KAAAqN,IAAAkqC,MAAAt6C,KAAAq3E,KAAAp1D,MAAA8xF,UAAAxmF,MAAAxqB,KAAAqN,IAAAkqC,MAAAt6C,KAAAq3E,KAAAp1D,MAAA8xF,UAAAtnD,MAAA,IACR8uV,GAAAv7Y,KAAAq3E,KAAA07Y,EAAA7/E,UAAAqC,KAAAv1Y,KAAAq3E,KAAAp1D,MAAA0I,IAAAqqD,QAAA16B,QAAA,WACA5wC,EAAA4E,kBAEA+0f,GAAArjgB,KAAAq3E,KAAA,UAZA,CAcA,GACG,CACHp+C,IAAA,OACAt2B,MAAA,SAAA+G,GACA1J,KAAAmlgB,mBAAAz7f,GACA25f,GAAArjgB,KAAAq3E,KAAA,WACAiiC,EAAAk5B,EAAAkyX,EAAAz/f,WAAA,OAAAjF,MAAA4K,KAAA5K,KAAA0J,EACA,GACG,CACHuvB,IAAA,qBACAt2B,MAAA,SAAA+G,IACA1J,KAAAglgB,eAAAjigB,KAAAqN,IAAApQ,KAAA0J,MAAA1C,EAAA0C,EAAAovJ,SAAA,GAAA/1J,KAAAqN,IAAApQ,KAAA0J,MAAA8H,EAAA9H,EAAAqvJ,SAAA,KAAA/4J,KAAAglgB,gBACA,GACG,CACH/re,IAAA,iBACAt2B,MAAA,WACA,QAAA3C,KAAAglgB,eACAhlgB,KAAA8kgB,yBAAA,EAEA,KAEAJ,CACA,CAnGA,CAmGCC,IACDd,GAAA,SAAAyB,GACA/yX,EAAAsxX,EAAAyB;AACA,IAAAla,EAAAx4W,EAAAixX;AACA,SAAAA,EAAAxsb,EAAAkub,GACA,IAAAra;AAKA,OAJAn4W,EAAA/yI,KAAA6jgB,IACA3Y,EAAAE,EAAAxgf,KAAA5K,KAAAq3E,IACAkub,iBACAra,EAAA6Z,SAAA1tb,EAAAp1D,MAAA0I,IACAuge,CACA,CAsBA,OArBAh4W,EAAA2wX,EAAA,EACA5qe,IAAA,OACAt2B,MAAA,SAAA+G,GACA,MAAAA,EAAA0uE,UAAAp4E,KAAAq3E,KAAAmQ,aAAAxnF,KAAAq3E,KAAAp1D,MAAA0I,IAAAopO,GAAA/zP,KAAA+kgB,UAAA,CAIAr7f,EAAA4E,iBACA+0f,GAAArjgB,KAAAq3E,KAAA;AACA,IAAA/8B,EAAAt6C,KAAAq3E,KAAA8hZ,YAAAsqC,GAAA/5f,IACAF,EAAA8wC,GAAAspd,GAAA5jgB,KAAAq3E,KAAA/8B,EAAA0va;AACA,GAAAxgd,EAAA,CACA,IAAAmhB,EAAA3qB,KAAAq3E,KAAAp1D,MAAA0I,IACAzL,EAAAlf,KAAAulgB,eAEAzzY,EAAAq8X,EADA3kf,EAAA+jB,KAAArO,EAAAqO,KAAA,CAAArO,EAAAutC,GAAAjjD,EAAA+jB,MAAA,CAAArO,EAAAqO,KAAA/jB,EAAAijD,IACA,GACAqlW,EAAAhgS,EAAA,GACA18C,EAAA08C,EAAA;AACAypR,GAAAv7Y,KAAAq3E,KAAA07Y,EAAAjgF,cAAAvuY,OAAAomB,EAAAmnY,EAAA18U,GAAA,UAPA,CALA,MAFAp1E,KAAAqmF,MAeA,KAEAw9a,CACA,CAjCA,CAiCCc;AAaD,SAAAT,GAAA7sb,EAAA3tE,GACA,QAAA2tE,EAAA2zT,cACAglH,GAAAjtf,KAAAqN,IAAAupC,KAAAmT,MAAAuqB,EAAAznE,MAAAmzf,oBAAA,OACA1rb,EAAAznE,MAAAmzf,oBAAA,OAIA,CAnBAnvT,GAAAiiD,WAAA,SAAAx+K,GACAA,EAAAznE,MAAAgzf,UAAAjpd,KAAAmT,MACAi3c,GAAA1sb,GACAgsb,GAAAhsb,EAAA,UACA,EACAu8H,GAAA2iD,UAAA,SAAAl/K,GACAA,EAAAznE,MAAAgzf,UAAAjpd,KAAAmT,MACAu2c,GAAAhsb,EAAA,UACA,EACAu8H,GAAA4xT,YAAA,SAAAnub,GACA,OAAA0sb,GAAA1sb,EACA;AASA,IAAAoub,GAAAtV,EAAA;AAuDA,SAAAuV,GAAArub,EAAA0qI,GACA7yM,aAAAmoE,EAAAznE,MAAAkzf,kBACA/gT,GAAA,IAAA1qI,EAAAznE,MAAAkzf,iBAAA3zf,WAAA,WACA,OAAA60f,GAAA3sb,EACA,EAAG0qI,GACH,CACA,SAAA4jT,GAAAtub,GAKA,IAJAA,EAAA2zT,YACA3zT,EAAAznE,MAAAo7X,aACA3zT,EAAAznE,MAAAmzf,mBAAAppd,KAAAmT,OAEAuqB,EAAAznE,MAAA2pf,iBAAAh5f,OAAA,GAAA82E,EAAAznE,MAAA2pf,iBAAA5nW,MAAAi0W,kBACA,CAmBA,SAAA5B,GAAA3sb,GACA,IAAAwub,EAAAjzf,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,IAAAA,UAAA;AACA,KAAAu9e,GAAA94a,EAAAqmb,YAAAoI,cAAA,IAGA,GAFAzub,EAAAqmb,YAAAyG,aACAwB,GAAAtub,GACAwub,GAAAxub,EAAAivU,SAAAjvU,EAAAivU,QAAA4tG,MAAA,CACA,IAAA/zG,EAAA28G,GAAAzlb,GACAqvF,EAAArvF,EAAAp1D,MAAA8xF;AAEA,OADAosS,MAAApsJ,GAAArtF,GAAArvF,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAq2V,aAAA6K,KAA4E9oU,EAAA0ub,aAAAF,GAAAn/V,EAAA0jO,MAAAlmX,KAAAwiJ,EAAA0jO,MAAA+rF,YAAAzvT,EAAAj6G,KAAAwxV,cAAyJ5mU,EAAA4tU,YAAA5tU,EAAAp1D,OAAzJo1D,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAw7V,qBAE5E,CACA,QATA,CAUA,CAjGAwnH,GAAA+D,iBAAA/D,GAAAgE,kBAAA,SAAA5ub,GACA,IAAAA,EAAA2zT,UAAA,CACA3zT,EAAAqmb,YAAAnkT;AACA,IAAAt3L,EAAAo1D,EAAAp1D,MACAowX,EAAApwX,EAAA8xF,UAAAg+R;AACA,GAAA9vX,EAAA8xF,qBAAAg/W,EAAAjgF,gBAAA7wX,EAAAuiX,cAAA6N,EAAA27C,YAAA37C,EAAA7H,cAAA6H,EAAApH,WAAAvC,MAAAjlX,KAAA,SAAAtZ,GACA,WAAAA,EAAArG,KAAAimW,KAAA1+N,SACA,IAAKykX,GAAAjxB,GA0BL,SAAAxnZ,GACA,IAAA6ub,EAAA7ub,EAAAu+a,oBACAzG,EAAA+W,EAAA/W,UACAxuO,EAAAulP,EAAAvlP;AACA,IAAAwuO,GAAA,GAAAA,EAAA/3Z,UAAAupL,GAAAwuO,EAAA7hS,WAAA/sN,OAAA;AACA,IAAA04F,EAAAk2Z,EAAA7hS,WAAAqzD;AACA,UAAA1nL,EAAA7B,UAAA,SAAA6B,EAAAg9D,eACA,CAPA,CA1BK5+E,IACLA,EAAA0ub,WAAA1ub,EAAAp1D,MAAAuiX,aAAA6N,EAAA3J,QACAs7H,GAAA3sb,MACAA,EAAA0ub,WAAA;KAGA,GADA/B,GAAA3sb,GAAAp1D,EAAA8xF,UAAAzW,OACAsyZ,GAAA3te,EAAA8xF,UAAAzW,OAAA+0S,EAAA7H,eAAA6H,EAAA27C,YAAA37C,EAAApH,WAAAvC,MAAAnoY,OAEA,IADA,IAAA4/Y,EAAA9oU,EAAAu+a,oBACA1xe,EAAAi8X,EAAAgvG,UAAAnxe,EAAAmiY,EAAAx/H,YAAiEz8P,GAAA,GAAAA,EAAAkzE,UAAA,GAAAp5E,GAA0C,CAC3G,IAAAg/J,EAAAh/J,EAAA,EAAAkG,EAAA08P,UAAA18P,EAAAopM,WAAAtvM,EAAA;AACA,IAAAg/J,EAAA;AACA,MAAAA,EAAA5lF,SAAA,CACA,IAAA+ua,EAAA9ub,EAAA0mb;AACAoI,KAAAjQ,SAAAl5U,IAAAvlF,UAAAl3F;AACA,KACA,CACA2jB,EAAA84J,EACAh/J,GAAA,CAEA,CAGAq5D,EAAAznE,MAAAo7X,YACA,CACA06H,GAAArub,EAAAoub,GACA,EASAxD,GAAAn2H,eAAA,SAAAz0T,EAAA3tE,GACA2tE,EAAA2zT,YACA3zT,EAAAznE,MAAAo7X,aACA3zT,EAAAznE,MAAAmzf,mBAAAppd,KAAAmT,MACAuqB,EAAAznE,MAAAszf,0BAAA7rb,EAAAqmb,YAAA0I,iBAAA7lgB,OAAA82E,EAAAznE,MAAAozf,cAAA,EACA3rb,EAAAznE,MAAAwpf,gBAAA,KACA/hb,EAAAznE,MAAAqzf,qBAAA5rb,EAAAqmb,YAAAyG,aAAuE9sb,EAAAznE,MAAAszf,2BAAA7vb,QAAA2B,UAAAvB,KAAA,WACvE,OAAA4D,EAAAqmb,YAAAnkT,OACA,GACAliI,EAAAznE,MAAAozf,gBACA0C,GAAArub,EAAA,IAEA;AA6DA,IAAAgvb,GAAA3of,GAAAgye,EAAA,IAAAQ,GAAAG,EAAA;AAsCA,SAAAiW,GAAAjvb,EAAAh0E,EAAAknB,EAAAg8e,EAAA78f,GACA,IAAAtJ,EAAAgggB,GAAA/ob,EAAAh0E,EAAAknB,EAAAg8e,EAAAlvb,EAAAp1D,MAAA8xF,UAAAq2R;AACA,GAAA/yT,EAAAslU,SAAA,uBAAAzwY,GACA,OAAAA,EAAAmrE,EAAA3tE,EAAAtJ,GAAA0yd,EAAA5yE,MAAA5iT,MACA,GAAG;AACH,IAAAl9F,EAAA;AACA,IAAAomgB,EAvBA,SAAApmgB,GACA,UAAAA,EAAA+ge,WAAA,GAAA/ge,EAAAghe,SAAA,GAAAhhe,EAAAqhF,QAAAkxT,WAAAvyY,EAAAqhF,QAAAh7E,WAAA,IACA,CAFA,CAuBArG,GACA6+C,EAAAund,EAAAnvb,EAAAp1D,MAAAg9B,GAAAivW,qBAAAs4G,EAAAD,GAAAlvb,EAAAp1D,MAAAg9B,GAAAwnd,iBAAArmgB;AAEA,OADAi3E,EAAAyuM,SAAA7mO,EAAAs7V,iBAAAlP,QAAA,YAAAA,QAAA,sBAEA,CACA,SAAAyL,GAAA3mS,GACA,IAAA9sG,EAAA8sG,EAAAC,QAAA,eAAAD,EAAAC,QAAA;AACA,GAAA/sG,EAAA,OAAAA;AACA,IAAAqjgB,EAAAv2Z,EAAAC,QAAA;AACA,OAAAs2Z,IAAAjmf,QAAA,gBACA,CArDAmzL,GAAA/7C,KAAAoqW,GAAAnoH,IAAA,SAAAziU,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ,EACA81I,EAAA9oU,EAAAp1D,MAAA8xF,UACA+lS,EAAA,OAAApwY,EAAA5F;AACA,IAAAq8Y,EAAA7iT,MAAA,CACA,IAAArwE,EAAAo5e,GAAA,KAAA38f,EAAAymG,cAEAw2Z,EAAA1G,GAAA5ob,EADA8oU,EAAA1+T,WAEAusT,EAAA24H,EAAA34H,IACA3qY,EAAAsjgB,EAAAtjgB;AACA4pB,GACAvjB,EAAA4E,iBACA2e,EAAA25e,YACA35e,EAAA4hX,QAAA,YAAAb,EAAAtlY,WACAukB,EAAA4hX,QAAA,aAAAxrY,IA/BA,SAAAg0E,EAAA22T,GACA,GAAA32T,EAAA22T,IAAAxgY,WAAA,CACA,IAAA25Q,EAAA9vM,EAAA22T,IAAAxgY,WAAA9I,YAAAC,SAAAkvE,cAAA;AACAszM,EAAAziR,YAAAspY,GACA7mH,EAAAx5Q,MAAA44E,QAAA;AACA,IAAA45T,EAAA1qT,eACAvd,EAAAvzE,SAAAmxF;AACA5d,EAAA2ub,mBAAA74H,GACA32T,EAAA22T,IAAAt/X,OACAyxY,EAAAlqT,kBACAkqT,EAAAjqT,SAAAhe,GACA/oE,WAAA,WACAg4Q,EAAA35Q,YAAA25Q,EAAA35Q,WAAA1E,YAAAq+Q,GACA9vM,EAAAhmE,OACA,EAAG,GAbH,CAcA,CAfA,CAiCAgmE,EAAA22T,GAEA8L,GAAAziU,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAw7V,kBAAAF,iBAAAlP,QAAA,iBAdA,CAeA,EAmCA42H,GAAA7zH,MAAA,SAAA/2T,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ;AACA,IAAAhzL,EAAA2zT,WAAAmlH,EAAA,CACA,IAAAlje,EAAAo5e,GAAA,KAAA38f,EAAAymG,cACA22Z,EAAAzvb,EAAAznE,MAAA0/F,UAAA,IAAAj4B,EAAAznE,MAAAwyf;AACAn1e,GAAAq5e,GAAAjvb,EAAAy/T,GAAA7pX,KAAAmjF,QAAA,aAAA02Z,EAAAp9f,KAAA4E,iBApCA,SAAA+oE,EAAA3tE,GACA,GAAA2tE,EAAA22T,IAAAxgY,WAAA,CACA,IAAA6yf,EAAAhpb,EAAAznE,MAAA0/F,UAAAj4B,EAAAp1D,MAAA8xF,UAAAq2R,MAAAtiX,OAAAhkB,KAAAimW,KAAAtzV,KACAjN,EAAA6tE,EAAA22T,IAAAxgY,WAAA9I,YAAAC,SAAAkvE,cAAAwsb,EAAA;AACAA,IAAA72f,EAAAysJ,gBAAA,QACAzsJ,EAAAmE,MAAA44E,QAAA,6CACA/8E,EAAA6H;AACA,IAAAy1f,EAAAzvb,EAAAznE,MAAA0/F,UAAA,IAAAj4B,EAAAznE,MAAAwyf;AACAjzf,WAAA,WACAkoE,EAAAhmE,QACA7H,EAAAgE,YAAAhE,EAAAgE,WAAA1E,YAAAU,GACA62f,EAAAiG,GAAAjvb,EAAA7tE,EAAA7G,MAAA,KAAAmkgB,EAAAp9f,GAAmE48f,GAAAjvb,EAAA7tE,EAAA0tF,YAAA1tF,EAAAd,UAAAo+f,EAAAp9f,EACnE,EAAG,GAXH,CAYA,CAbA,CAoC4G2tE,EAAA3tE,EAH5G,CAIA;AACA,IAAAq9f,GAAA7zX,EAAA,SAAA6zX,EAAA3mgB,EAAA87P,EAAAh4O,GACA6uH,EAAA/yI,KAAA+mgB,GACA/mgB,KAAAI,QACAJ,KAAAk8P,OACAl8P,KAAAkkB,MACA,GACA8if,GAAApoC,EAAA;AACA,SAAAqoC,GAAA5vb,EAAA3tE,GACA,IAAAmuJ;AAIA,OAHAxgF,EAAAslU,SAAA,sBAAAt3X,GACAwyI,KAAAxyI,EAAA3b,EACA,GACA,MAAAmuJ,MAAAnuJ,EAAAs9f,GACA,CAgIA,QAAA97U,MA/HA0oB,GAAAszT,UAAA,SAAA7vb,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ,EACAmzP,EAAAnmb,EAAAznE,MAAA4tf;AAEA,GADAA,KAAAn3a,OACA38E,EAAAkoG,aAAA,CACA,IAEA1tF,EAFAi8X,EAAA9oU,EAAAp1D,MAAA8xF,UACAz5D,EAAA6lW,EAAA7iT,MAAA,KAAAjmB,EAAA8hZ,YAAAsqC,GAAA/5f;AAEA,GAAA4wC,UAAA6lW,EAAA5yX,MAAA+sB,QAAA6lW,aAAA4yE,EAAAj0E,cAAAqB,EAAA1zV,GAAA,EAAA0zV,EAAA1zV,UAAuH,GAAA+wc,KAAAoH,UACvH1gf,EAAA6uc,EAAAj0E,cAAAv6Y,OAAA8yE,EAAAp1D,MAAA0I,IAAA6ye,EAAAoH,UAAAtqd;KACI,GAAA5wC,EAAAF,QAAA,GAAAE,EAAAF,OAAA4tF,SAAA,CACJ,IAAAszG,EAAArzH,EAAAivU,QAAAqsG,YAAAjpf,EAAAF;AACAkhM,KAAAxmL,KAAApgB,KAAAimW,KAAA73V,WAAAw4L,GAAArzH,EAAAivU,UAAApiY,EAAA6uc,EAAAj0E,cAAAv6Y,OAAA8yE,EAAAp1D,MAAA0I,IAAA+/K,EAAAkoT,WACA,CACA,IACAuU,EAAAlH,GAAA5ob,GADAnzD,GAAAmzD,EAAAp1D,MAAA8xF,WAAAtyB,WAEAusT,EAAAm5H,EAAAn5H,IACA3qY,EAAA8jgB,EAAA9jgB,KACAjD,EAAA+mgB,EAAA/mgB,QACAsJ,EAAAkoG,aAAAohG,MAAAzyM,SAAAuvf,GAAAC,EAAA,MAAArmf,EAAAkoG,aAAAg1Z,YACAl9f,EAAAkoG,aAAAi9R,QAAAw3H,GAAA,mBAAAr4H,EAAAtlY,WACAgB,EAAAkoG,aAAAw1Z,cAAA,WACAf,IAAA38f,EAAAkoG,aAAAi9R,QAAA,aAAAxrY,GACAg0E,EAAAljE,SAAA,IAAA4yf,GAAA3mgB,EAAA6mgB,GAAA5vb,EAAA3tE,GAAAwa,EAnBA,CAoBA,EACA0vL,GAAAyzT,QAAA,SAAAhwb,GACA,IAAAljE,EAAAkjE,EAAAljE;AACA1K,OAAA0F,WAAA,WACAkoE,EAAAljE,cAAAkjE,EAAAljE,SAAA,KACA,EAAG,GACH,EACA8tf,GAAAzuT,SAAAyuT,GAAA3uT,UAAA,SAAA9jM,EAAAnP,GACA,OAAAA,EAAAiO,gBACA,EACA2zf,GAAA1oW,KAAA,SAAAliF,EAAA3tE,GACA,KAMA,SAAA2tE,EAAA3tE,EAAAyK,GACA,GAAAzK,EAAAkoG,aAAA,CACA,IAAA01Z,EAAAjwb,EAAA8hZ,YAAAsqC,GAAA/5f;AACA,GAAA49f,EAAA,CACA,IAAAC,EAAAlwb,EAAAp1D,MAAA0I,IAAAqqD,QAAAsyb,EAAAhtd,KACAl6C,EAAA+T,KAAA/T;AACAA,EACAi3E,EAAAslU,SAAA,2BAAAzwY,GACA9L,EAAA8L,EAAA9L,EAAAi3E,KACA,GAEAj3E,EAAAgggB,GAAA/ob,EAAAy/T,GAAAptY,EAAAkoG,cAAAy0Z,GAAA,KAAA38f,EAAAkoG,aAAAxB,QAAA,gBAAAm3Z;AAEA,IAAArrQ,KAAA/nP,IAAA8yf,GAAA5vb,EAAA3tE;AACA,GAAA2tE,EAAAslU,SAAA,sBAAAzwY,GACA,OAAAA,EAAAmrE,EAAA3tE,EAAAtJ,GAAA0yd,EAAA5yE,MAAA5iT,MAAA4+J,EACA,GACAxyP,EAAA4E;KAGA,GAAAlO,EAAA,CACAsJ,EAAA4E;AACA,IAAAu/e,EAAAztf,EAAAyyd,EAAAwG,UAAAhiZ,EAAAp1D,MAAA0I,IAAA48e,EAAAjtd,IAAAl6C,GAAAmngB,EAAAjtd;AACA,MAAAuzc,MAAA0Z,EAAAjtd;AACA,IAAA2E,EAAAo4B,EAAAp1D,MAAAg9B;AACA,GAAAi9M,EAAA,CACA,IAAAh4O,EAAA/P,EAAA+P;AACAA,IAAAzD,QAAAw+B,GAA+BA,EAAAw7V,iBAC/B,CACA,IAAAngW,EAAA2E,EAAAogI,QAAAz7J,IAAAiqe,GACA1pe,EAAA,GAAA/jB,EAAA+ge,WAAA,GAAA/ge,EAAAghe,SAAA,GAAAhhe,EAAAqhF,QAAAkxT,WACA60H,EAAAvod,EAAAt0B;AAEA,GADAxG,EAAA86B,EAAAoyb,iBAAA/2b,IAAAl6C,EAAAqhF,QAAAh7E,YAAsEw4C,EAAAmyb,aAAA92b,IAAAl6C,IACtE6+C,EAAAt0B,IAAAopO,GAAAyzQ,GAAA,CACA,IAAAn1H,EAAApzV,EAAAt0B,IAAAqqD,QAAA16B;AACA,GAAAn2B,GAAA4uc,EAAAj0E,cAAAyI,aAAAnnZ,EAAAqhF,QAAAh7E,aAAA4rY,EAAAnH,WAAAmH,EAAAnH,UAAAw0F,WAAAt/d,EAAAqhF,QAAAh7E,YACAw4C,EAAAq2V,aAAA,IAAAy9E,EAAAj0E,cAAAzM;IACI,CACJ,IAAAlzX,EAAA8/B,EAAAogI,QAAAz7J,IAAAiqe;AACA5uc,EAAAogI,QAAA41N,KAAAh2V,EAAAogI,QAAA41N,KAAA10Y,OAAA,GAAAia,QAAA,SAAA06X,EAAAC,EAAAC,EAAAC,GACA,OAAAl2X,EAAAk2X,CACA,GACAp2V,EAAAq2V,aAAA6nH,GAAA9lb,EAAAg7T,EAAApzV,EAAAt0B,IAAAqqD,QAAA71D,IACA,CACAk4D,EAAAhmE,QACAgmE,EAAAyuM,SAAA7mO,EAAAosV,QAAA,kBAZA,CAbA,CAjBA,CAFA,CA6CA,CA9CA,CALAh0T,EAAA3tE,EAAA2tE,EAAAljE,SACA,CAAI,QACJkjE,EAAAljE,SAAA,IACA,CACA,EAgDAy/L,GAAAviM,MAAA,SAAAgmE,GACAA,EAAAznE,MAAA+yf,UAAAhpd,KAAAmT,MACAuqB,EAAAoE,UACApE,EAAAqmb,YAAAxzf,OACAmtE,EAAA22T,IAAAj0T,UAAAniC,IAAA,uBACAy/B,EAAAqmb,YAAAx+e,QACAm4D,EAAAoE,WACAtsE,WAAA,WACAkoE,EAAAivU,SAAAjvU,EAAAyjU,aAAAzjU,EAAAqmb,YAAA9iM,iBAAA7mE,GAAA18K,EAAAu+a,sBAAA0H,GAAAjmb,EACA,EAAK,IAEL,EACAu8H,GAAAllM,KAAA,SAAA2oE,EAAAgzL,GACA,IAAA3gQ,EAAA2gQ;AACAhzL,EAAAoE,UACApE,EAAAqmb,YAAAxzf,OACAmtE,EAAA22T,IAAAj0T,UAAA2B,OAAA,uBACArE,EAAAqmb,YAAAx+e,QACAxV,EAAA0gR,eAAA/yM,EAAA22T,IAAAx3X,SAAA9M,EAAA0gR,gBAAA/yM,EAAAqmb,YAAA9iM,iBAAApkP,QACAa,EAAAoE,WAEA,EACAm4H,GAAAmnR,YAAA,SAAA1jZ,EAAAgzL,GAEA,GAAA8lP,GAAA,yBADA9lP,EACAukC,UAAA,CACAv3N,EAAAqmb,YAAA+J;AACA,IAAAtE,EAAA9rb,EAAAznE,MAAAuzf;AACAh0f,WAAA,WACA,GAAAkoE,EAAAznE,MAAAuzf,oBACA9rb,EAAA22T,IAAAt/X,OACA2oE,EAAAhmE,SACAgmE,EAAAslU,SAAA,yBAAAzwY,GACA,OAAAA,EAAAmrE,EAAAg4a,EAAA,eACA,IAFA,CAGA,IAAAtjH,EAAA10T,EAAAp1D,MAAA8xF,UAAAg4R;AACAA,KAAAzxV,IAAA,GAAA+8B,EAAAyuM,SAAAzuM,EAAAp1D,MAAAg9B,GAAAqmC,OAAAymT,EAAAzxV,IAAA,EAAAyxV,EAAAzxV,KAAAigW,iBAFO,CAGP,EAAK,GACL,CACA,EACA0nH,GAAAruT,GAAA1oB,IAAA+2U,GAAA/2U;AACA,SAAAo8J,GAAAxmV,EAAAma,GACA,GAAAna,GAAAma,EAAA;AACA,QAAApW,KAAA/D,EAAA,GAAAA,EAAA+D,KAAAoW,EAAApW,GAAA;AACA,QAAAw5L,KAAApjL,EAAA,KAAAojL,KAAAv9L,GAAA;AACA,QACA,CACA,IAAA4mgB,GAAA,WACA,SAAAA,EAAAx+H,EAAAn/B,GACAh3N,EAAA/yI,KAAA0ngB,GACA1ngB,KAAAkpY,QACAlpY,KAAA+pW,QAAA49J,GACA3ngB,KAAA4e,KAAA5e,KAAA+pW,KAAAnrV,MAAA,CACA,CAyBA,OAxBAs0H,EAAAw0X,EAAA,EACAzue,IAAA,MACAt2B,MAAA,SAAA08K,EAAAyyK,EAAA9zU,EAAA4pf,GACA,IAAA51B,EAAA3yT,EAAA2oO,UAAAl2D,EAAAvkU,KAAAq6e,EAAA5ngB,KAAA4e,KAAA,QACA07B,EAAA03b,EAAA13b;AAEA,OADA03b,EAAAlqF,QACA,SAAAoK,GAAA53W,EAAAt8B,EAAAs8B,EAAAt8B,EAAAhe,KACA,GACG,CACHi5B,IAAA,QACAt2B,MAAA,WACA,QACA,GACG,CACHs2B,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,MAAA2nD,gBAAA+/c,IAAA1ngB,KAAA+pW,KAAA9wU,KAAAj5B,KAAA+pW,KAAA9wU,KAAA0uB,EAAAoiT,KAAA9wU,KAAAj5B,KAAAkpY,OAAAvhV,EAAAuhV,OAAA5hD,GAAAtnV,KAAA+pW,KAAApiT,EAAAoiT,MACA,GACG,CACH9wU,IAAA,UACAt2B,MAAA,SAAAuhB,GACAlkB,KAAA+pW,KAAA3sR,SAAAp9E,KAAA+pW,KAAA3sR,QAAAl5D,EACA,KAEAwjf,CACA,CAhCA,GAiCAG,GAAA,WACA,SAAAA,EAAA/tb,EAAAiwR,GACAh3N,EAAA/yI,KAAA6ngB,GACA7ngB,KAAA85E,QACA95E,KAAA+pW,QAAA49J,EACA,CA2BA,OA1BAz0X,EAAA20X,EAAA,EACA5ue,IAAA,MACAt2B,MAAA,SAAA08K,EAAAyyK,EAAA9zU,EAAA4pf,GACA,IAAAr6e,EAAA8xJ,EAAAz7J,IAAAkuU,EAAAvkU,KAAAq6e,EAAA5ngB,KAAA+pW,KAAA+9J,gBAAA,KAAA9pf,EACAyuC,EAAA4yH,EAAAz7J,IAAAkuU,EAAArlS,GAAAm7c,EAAA5ngB,KAAA+pW,KAAAg+J,aAAA,MAAA/pf;AACA,OAAAuP,GAAAk/B,EAAA,SAAAylW,GAAA3kY,EAAAk/B,EAAAzsD,KACA,GACG,CACHi5B,IAAA,QACAt2B,MAAA,SAAA6M,EAAAsiV,GACA,OAAAA,EAAAvkU,KAAAukU,EAAArlS,EACA,GACG,CACHxzB,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,MAAA2nD,gBAAAkgd,GAAAvgL,GAAAtnV,KAAA85E,MAAAnyB,EAAAmyB,QAAAwtQ,GAAAtnV,KAAA+pW,KAAApiT,EAAAoiT,KACA,GACG,CACH9wU,IAAA,UACAt2B,MAAA,eACG,EACHs2B,IAAA,KACAt2B,MAAA,SAAAmvV,GACA,OAAAA,EAAAhuV,gBAAA+jgB,CACA,KAEAA,CACA,CAjCA,GAkCA1gC,GAAA,WACA,SAAAA,EAAArtZ,EAAAiwR,GACAh3N,EAAA/yI,KAAAmne,GACAnne,KAAA85E,QACA95E,KAAA+pW,QAAA49J,EACA,CA4BA,OA3BAz0X,EAAAi0V,EAAA,EACAluc,IAAA,MACAt2B,MAAA,SAAA08K,EAAAyyK,EAAA9zU,EAAA4pf,GACA,IAAAr6e,EAAA8xJ,EAAA2oO,UAAAl2D,EAAAvkU,KAAAq6e,EAAA;AACA,GAAAr6e,EAAAu6X,QAAA;AACA,IAAAr7V,EAAA4yH,EAAA2oO,UAAAl2D,EAAArlS,GAAAm7c,GAAA;AACA,OAAAn7c,EAAAq7V,SAAAr7V,EAAAnS,KAAA/sB,EAAA+sB,IAAA,KACA,IAAA43W,GAAA3kY,EAAA+sB,IAAAt8B,EAAAyuC,EAAAnS,IAAAt8B,EAAAhe,KACA,GACG,CACHi5B,IAAA,QACAt2B,MAAA,SAAAuhB,EAAA4tU,GACA,IAGAhrL,EAHAm8T,EAAA/+c,EAAAu9D,QAAA8hI,UAAAuuI,EAAAvkU,MACAxkB,EAAAk6d,EAAAl6d,MACAiV,EAAAild,EAAAjld;AAEA,OAAAA,GAAA8zU,EAAAvkU,QAAAu5I,EAAA5iJ,EAAA4iJ,MAAA/9J,IAAA4hY,QAAA3sX,EAAA8oJ,EAAA4rO,UAAA5gD,EAAArlS,EACA,GACG,CACHxzB,IAAA,KACAt2B,MAAA,SAAAglD,GACA,OAAA3nD,MAAA2nD,gBAAAw/a,GAAA7/I,GAAAtnV,KAAA85E,MAAAnyB,EAAAmyB,QAAAwtQ,GAAAtnV,KAAA+pW,KAAApiT,EAAAoiT,KACA,GACG,CACH9wU,IAAA,UACAt2B,MAAA,gBAEAwke,CACA,CAlCA,GAmCAj1E,GAAA,WACA,SAAAA,EAAA3kY,EAAAk/B,EAAA3oD,GACAivI,EAAA/yI,KAAAkyZ,GACAlyZ,KAAAutB,OACAvtB,KAAAysD,KACAzsD,KAAA8D,MACA,CAgDA,OA/CAovI,EAAAg/Q,EAAA,EACAj5X,IAAA,OACAt2B,MAAA,SAAA4qB,EAAAk/B,GACA,WAAAylW,EAAA3kY,EAAAk/B,EAAAzsD,KAAA8D,KACA,GACG,CACHm1B,IAAA,KACAt2B,MAAA,SAAAglD,GACA,IAAA3pC,EAAApL,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA5S,KAAA8D,KAAAiwP,GAAApsM,EAAA7jD,OAAA9D,KAAAutB,KAAAvP,GAAA2pC,EAAAp6B,MAAAvtB,KAAAysD,GAAAzuC,GAAA2pC,EAAA8E,EACA,GACG,CACHxzB,IAAA,MACAt2B,MAAA,SAAA08K,EAAArhK,EAAA4pf,GACA,OAAA5ngB,KAAA8D,KAAA8f,IAAAy7J,EAAAr/K,KAAAge,EAAA4pf,EACA,GACG,CACH3ue,IAAA,OACA3M,IAAA,WACA,OAAAtsB,KAAA8D,KAAAimW,IACA,GACG,CACH9wU,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAA8D,gBAAA+jgB,EACA,GACG,CACH5ue,IAAA,SACA3M,IAAA,WACA,OAAAtsB,KAAA8D,gBAAA4jgB,EACA,IACG,EACHzue,IAAA,SACAt2B,MAAA,SAAA23C,EAAA4uV,EAAAn/B,GACA,WAAAmoD,EAAA53W,IAAA,IAAAotd,GAAAx+H,EAAAn/B,GACA,GACG,CACH9wU,IAAA,SACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAAqtB,EAAAiwR,GACA,WAAAmoD,EAAA3kY,EAAAk/B,EAAA,IAAAo7c,GAAA/tb,EAAAiwR,GACA,GACG,CACH9wU,IAAA,OACAt2B,MAAA,SAAA4qB,EAAAk/B,EAAAqtB,EAAAiwR,GACA,WAAAmoD,EAAA3kY,EAAAk/B,EAAA,IAAA06a,GAAArtZ,EAAAiwR,GACA,KAEAmoD,CACA,CAvDA,GAwDArpT,GAAA,GACA8+Z,GAAA,GACAx1G,GAAA,WACA,SAAAA,EAAA4gC,EAAAv3a,GACAu3H,EAAA/yI,KAAAmyZ,GACAnyZ,KAAA+yb,QAAAxyb,OAAAwyb,EAAAlqV,GACA7oG,KAAAwb,WAAAjb,OAAAib,EAAAqtF,EACA,CAsKA,OArKAqqC,EAAAi/Q,EAAA,EACAl5X,IAAA,OACAt2B,MAAA,SAAAuc,EAAAC,EAAA4/H,GACA,IAAA93H,EAAA;AAEA,OADAjnB,KAAAgogB,UAAA9of,GAAA,EAAAC,GAAA,IAAA8H,EAAA,EAAA83H,GACA93H,CACA,GACG,CACHgS,IAAA,YACAt2B,MAAA,SAAAuc,EAAAC,EAAA8H,EAAAjJ,EAAA+gI,GACA,QAAAz+I,EAAA,EAAsBA,EAAAN,KAAA+yb,MAAAxyb,OAAuBD,IAAA,CAC7C,IAAAwxV,EAAA9xV,KAAA+yb,MAAAzyb;AACAwxV,EAAAvkU,MAAApO,GAAA2yU,EAAArlS,IAAAvtC,KAAA6/H,KAAA+yM,EAAAiY,QAAA9iV,EAAArf,KAAAkqV,EAAAj6L,KAAAi6L,EAAAvkU,KAAAvP,EAAA8zU,EAAArlS,GAAAzuC,GACA,CACA,QAAAiqf,EAAA,EAAwBA,EAAAjogB,KAAAwb,SAAAjb,OAA4B0ngB,GAAA,EACpD,GAAAjogB,KAAAwb,SAAAysf,GAAA9of,GAAAnf,KAAAwb,SAAAysf,EAAA,GAAA/of,EAAA,CACA,IAAAgpf,EAAAlogB,KAAAwb,SAAAysf,GAAA;AACAjogB,KAAAwb,SAAAysf,EAAA,GAAAD,UAAA9of,EAAAgpf,EAAA/of,EAAA+of,EAAAjhf,EAAAjJ,EAAAkqf,EAAAnpX,EACA,CAEA,GACG,CACH9lH,IAAA,MACAt2B,MAAA,SAAA08K,EAAA10J,EAAA3oB,GACA,OAAAhC,MAAAs9F,IAAA,GAAA+hF,EAAA41N,KAAA10Y,OAAAP,KACAA,KAAAmogB,SAAA9oV,EAAA10J,EAAA,IAAA3oB,GAAA2lgB,GACA,GACG,CACH1ue,IAAA,WACAt2B,MAAA,SAAA08K,EAAAn7J,EAAAlG,EAAA4pf,EAAA5lgB,GAEA,IADA,IAAAomgB,EACA9ngB,EAAA,EAAsBA,EAAAN,KAAA+yb,MAAAxyb,OAAuBD,IAAA,CAC7C,IAAA4hf,EAAAlif,KAAA+yb,MAAAzyb,GAAAsjB,IAAAy7J,EAAArhK,EAAA4pf;AACA1lB,KAAAp+e,KAAAwgR,MAAApgQ,EAAAg+d,IAAAkmB,MAAA,KAAAxggB,KAAAs6e,GAAkGlgf,EAAAsF,UAAAtF,EAAAsF,SAAAtH,KAAA+yb,MAAAzyb,GAAAypW,KAClG,CACA,OAAA/pW,KAAAwb,SAAAjb,OAmNA,SAAA67K,EAAAgsV,EAAA/oV,EAAAn7J,EAAAlG,EAAA4pf,EAAA5lgB,GAsBA,IArBA,IAAAwZ,EAAA4gK,EAAAh8K,QACAsse,EAAA,SAAA27B,GACA,IAAAhuW,EAAA;AACAglB,EAAA41N,KAAA30Y,GAAAka,QAAA,SAAA4uY,EAAAC,EAAAH,EAAAC,GAEA,IADA,IAAAm/G,EAAAn/G,EAAAD,GAAAG,EAAAD,GACAm/G,EAAA,EAAyBA,EAAA/sf,EAAAjb,OAAwBgogB,GAAA,GACjD,IAAAppf,EAAA3D,EAAA+sf,EAAA;AACA,KAAAppf,EAAA,GAAAiqY,EAAAjqY,EAAAkpf,EAAAhuW,GAAA,CACA,IAAAn7I,EAAA1D,EAAA+sf,GAAAF,EAAAhuW;AACAgvP,GAAAnqY,EACA1D,EAAA+sf,EAAA,GAAAn/G,GAAAlqY,GAAA,KACUkqY,GAAAi/G,GAAAC,IACV9sf,EAAA+sf,IAAAD,EACA9sf,EAAA+sf,EAAA,IAAAD,EANA,CAQA,CACAjuW,GAAAiuW,CACA,GACAD,EAAAhpV,EAAA41N,KAAA30Y,GAAAsjB,IAAAykf,GAAA,GACAG,EAAAH,CACA,EACA/ngB,EAAA,EAAAkogB,EAAAZ,EAA0CtngB,EAAA++K,EAAA41N,KAAA10Y,OAAyBD,IACnEose,EAAA87B;AAGA,IADA,IAAAC,KACAC,EAAA,EAAqBA,EAAAltf,EAAAjb,OAAwBmogB,GAAA,KAAAltf,EAAAktf,EAAA,MAC7C,OAAAltf,EAAAktf,EAAA,IACAD,KACAjtf,EAAAktf,EAAA;AACA,QACA,CACA,IAAAn7e,EAAA8xJ,EAAAz7J,IAAAw4J,EAAAssV,GAAAd,GACAe,EAAAp7e,EAAAvP;AACA,GAAA2qf,EAAA,GAAAA,GAAAzkf,EAAAu9D,QAAApjE,KAAA,CACAoqf;AACA,QACA,CACA,IACAG,EADAvpV,EAAAz7J,IAAAw4J,EAAAssV,EAAA,GAAAd,GAAA,GACA5pf,EACA0ld,EAAAx/c,EAAAu9D,QAAA8hI,UAAAolT,GACA5/f,EAAA26d,EAAA36d,MACA8/f,EAAAnlC,EAAA1ld,OACA2qS,EAAAzkS,EAAAkyc,WAAArtd;AACA,GAAA4/S,GAAAkgN,GAAAF,GAAAE,EAAAlgN,EAAA+pF,UAAAk2H,EAAA,CACA,IAAA1mB,EAAA1me,EAAAktf,EAAA,GAAAP,SAAA9oV,EAAAspI,EAAAp7R,EAAA,EAAA6uJ,EAAAssV,GAAAd,EAAA,EAAA5lgB;AACAkgf,GAAA5kZ,IACA9hF,EAAAktf,GAAAC,EACAntf,EAAAktf,EAAA,GAAAE,EACAptf,EAAAktf,EAAA,GAAAxmB,IAEA1me,EAAAktf,EAAA,MACAD,KAEA,MACAA,IAEA,CACA,GAAAA,EAAA,CACA,IAAA73H,EAwBA,SAAAp1X,EAAA4gK,EAAAw0N,EAAAvxN,EAAArhK,EAAA4pf,EAAA5lgB,GACA,SAAA8mgB,EAAAj8e,EAAA+6e,GACA,QAAAtngB,EAAA,EAAoBA,EAAAusB,EAAAkma,MAAAxyb,OAAsBD,IAAA,CAC1C,IAAA4hf,EAAAr1d,EAAAkma,MAAAzyb,GAAAsjB,IAAAy7J,EAAArhK,EAAA4pf;AACA1lB,EAAAtxG,EAAAhpY,KAAAs6e,GAA2Clgf,EAAAsF,UAAAtF,EAAAsF,SAAAulB,EAAAkma,MAAAzyb,GAAAypW,KAC3C,CACA,QAAAg/J,EAAA,EAAuBA,EAAAl8e,EAAArR,SAAAjb,OAA4BwogB,GAAA,EAAAD,EAAAj8e,EAAArR,SAAAutf,EAAA,GAAAl8e,EAAArR,SAAAutf,GAAAnB,EAAA,EACnD,CACA,QAAAtngB,EAAA,EAAkBA,EAAAkb,EAAAjb,OAAqBD,GAAA,MAAAkb,EAAAlb,EAAA,IAAAwogB,EAAAttf,EAAAlb,EAAA,GAAA87K,EAAA97K,GAAAsngB,EAAA;AACvC,OAAAh3H,CACA,CAVA,CAxBAp1X,EAAA4gK,EAAAgsV,EAAA/oV,EAAArhK,EAAA4pf,EAAA5lgB,GACA6ke,EAAAmiC,GAAAp4H,EAAA1sX,EAAA,EAAAliB;AACAomgB,EAAAvhC,EAAA9zC;AACA,QAAAk2E,EAAA,EAAuBA,EAAAztf,EAAAjb,OAAwB0ogB,GAAA,EAAAztf,EAAAytf,EAAA,OAC/Cztf,EAAA1R,OAAAm/f,EAAA,GACAA,GAAA;AAEA,QAAAC,EAAA,EAAAvjb,EAAA,EAA8Bujb,EAAAriC,EAAArrd,SAAAjb,OAA8B2ogB,GAAA,GAE5D,IADA,IAAAC,EAAAtiC,EAAArrd,SAAA0tf,GACAvjb,EAAAnqE,EAAAjb,QAAAib,EAAAmqE,GAAAwjb,GAAAxjb,GAAA;AACAnqE,EAAA1R,OAAA67E,EAAA,EAAAkhZ,EAAArrd,SAAA0tf,GAAAriC,EAAArrd,SAAA0tf,EAAA,GAAAriC,EAAArrd,SAAA0tf,EAAA,GACA,CACA,CACA,WAAA/2G,GAAAi2G,EAAAj2e,KAAAi3e,IAAA5tf,EACA,CA5RA6tf,CAAArpgB,KAAAwb,SAAA4sf,GAAA,GAAA/oV,EAAAn7J,EAAAlG,EAAA4pf,EAAA5lgB,GAA6HomgB,EAAA,IAAAj2G,EAAAi2G,EAAAj2e,KAAAi3e,IAAAvga,IAAAvL,EAC7H,GACG,CACHrkE,IAAA,MACAt2B,MAAA,SAAAgoB,EAAAimX,GACA,OAAAA,EAAArwY,OACAP,MAAAs9F,GAAA60T,EAAA5tZ,OAAAomB,EAAAimX,GACA5wY,KAAAspgB,SAAA3+e,EAAAimX,EAAA,GAFA5wY,IAGA,GACG,CACHi5B,IAAA,WACAt2B,MAAA,SAAAgoB,EAAAimX,EAAA5yX,GACA,IACAxC,EADA+tf,EAAAvpgB,KAEA+xf,EAAA;AACApne,EAAAnQ,QAAA,SAAAmuS,EAAAkgN,GACA,IACA3uS,EADAsuS,EAAAK,EAAA7qf;AAEA,GAAAk8M,EAAAsvS,GAAA54H,EAAAjoF,EAAA6/M,GAAA,CAEA,IADAhtf,MAAA+tf,EAAA/tf,SAAApb,SACA2xf,EAAAv2e,EAAAjb,QAAAib,EAAAu2e,GAAA8W,GAAA9W,GAAA;AACAv2e,EAAAu2e,IAAA8W,EAAArtf,EAAAu2e,EAAA,GAAAv2e,EAAAu2e,EAAA,GAAAuX,SAAA3gN,EAAAzuF,EAAAsuS,EAAA,GAAgJhtf,EAAA1R,OAAAiof,EAAA,EAAA8W,IAAAlgN,EAAA+pF,SAAAs2H,GAAA9uS,EAAAyuF,EAAA6/M,EAAA,EAAAb,KAChJ5V,GAAA,CAJA,CAKA;AAEA,IADA,IAAAh/D,EAAA02E,GAAA1X,EAAA2X,GAAA94H,MAAA5yX,GACA1d,EAAA,EAAsBA,EAAAyyb,EAAAxyb,OAAkBD,IAAAyyb,EAAAzyb,GAAAwD,KAAAwgR,MAAA35P,EAAAooa,EAAAzyb,KAAAyyb,EAAAjpb,OAAAxJ,IAAA;AACxC,WAAA6xZ,EAAA4gC,EAAAxyb,OAAAP,KAAA+yb,MAAAtgb,OAAAsgb,GAAA5ga,KAAAi3e,IAAAppgB,KAAA+yb,MAAAv3a,GAAAxb,KAAAwb,SACA,GACG,CACHyd,IAAA,SACAt2B,MAAA,SAAAiuY,GACA,UAAAA,EAAArwY,QAAAP,MAAAs9F,GAAAt9F,KACAA,KAAA2pgB,YAAA/4H,EAAA,EACA,GACG,CACH33W,IAAA,cACAt2B,MAAA,SAAAiuY,EAAA5yX,GAGA,IAFA,IAAAxC,EAAAxb,KAAAwb,SACAu3a,EAAA/yb,KAAA+yb,MACAzyb,EAAA,EAAsBA,EAAAkb,EAAAjb,OAAqBD,GAAA,GAI3C,IAHA,IAGAwxV,EAHA53H,OAAA,EACA3sM,EAAA/R,EAAAlb,GAAA0d,EACAyuC,EAAAjxC,EAAAlb,EAAA,GAAA0d,EACA2nE,EAAA,EAA8BA,EAAAirT,EAAArwY,OAAwBolF,KAAAmsQ,EAAA8+C,EAAAjrT,KACtDmsQ,EAAAvkU,QAAAukU,EAAArlS,OACAmkV,EAAAjrT,GAAA,MACAu0I,MAAA,KAAAtyN,KAAAkqV;AAGA,GAAA53H,EAAA,CACA1+M,GAAAxb,KAAAwb,aAAAxb,KAAAwb,SAAApb;AACA,IAAA6/K,EAAAzkK,EAAAlb,EAAA,GAAAqpgB,YAAAzvS,EAAA3sM,EAAA;AACA0yJ,GAAA3iF,GACA9hF,EAAAlb,EAAA,GAAA2/K,GAEAzkK,EAAA1R,OAAAxJ,EAAA,GACAA,GAAA,EAPA,CASA,CACA,GAAAyyb,EAAAxyb,OAAA,QAAAqpgB,EAAAC,EAAA,EAAiDA,EAAAj5H,EAAArwY,OAA0BspgB,IAAA,GAAAD,EAAAh5H,EAAAi5H,GAC3E,QAAAC,EAAA,EAA0BA,EAAA/2E,EAAAxyb,OAAoBupgB,IAAA/2E,EAAA+2E,GAAA/1Q,GAAA61Q,EAAA5rf,KAC9C+0a,GAAA/yb,KAAA+yb,UAAA/yb,KAAA+yb,MAAA3yb,SACA2yb,EAAAjpb,OAAAgggB,IAAA;AAGA,OAAAtuf,GAAAxb,KAAAwb,UAAAu3a,GAAA/yb,KAAA+yb,MAAA/yb,KACA+yb,EAAAxyb,QAAAib,EAAAjb,OAAA,IAAA4xZ,EAAA4gC,EAAAv3a,GAAA8hF,EACA,GACG,CACHrkE,IAAA,WACAt2B,MAAA,SAAAqb,EAAAkG,GACA,GAAAlkB,MAAAs9F,GAAA,OAAAt9F;AACA,GAAAkkB,EAAA+zX,OAAA,OAAAka,EAAA70T;AAEA,IADA,IAAAwpE,EAAAisR,EACAzyb,EAAA,EAAsBA,EAAAN,KAAAwb,SAAAjb,OAA0BD,GAAA,KAAAN,KAAAwb,SAAAlb,IAAA0d,EAAA,CAChDhe,KAAAwb,SAAAlb,IAAA0d,IAAA8oJ,EAAA9mK,KAAAwb,SAAAlb,EAAA;AACA,KACA,CAGA,IAFA,IAAA4e,EAAAlB,EAAA,EACAmB,EAAAD,EAAAgF,EAAAu9D,QAAApjE,KACA0rf,EAAA,EAAwBA,EAAA/pgB,KAAA+yb,MAAAxyb,OAAyBwpgB,IAAA,CACjD,IAAAC,EAAAhqgB,KAAA+yb,MAAAg3E;AACA,GAAAC,EAAAz8e,KAAApO,GAAA6qf,EAAAv9c,GAAAvtC,GAAA8qf,EAAAlmgB,gBAAA+jgB,GAAA,CACA,IAAAt6e,EAAAxqB,KAAA+b,IAAAI,EAAA8qf,EAAAz8e,MAAArO,EACAutC,EAAA1pD,KAAA8b,IAAAM,EAAA6qf,EAAAv9c,IAAAvtC;AACAqO,EAAAk/B,IAAAsmY,MAAA,KAAAnrb,KAAAoigB,EAAAnyW,KAAAtqI,EAAAk/B,GACA,CACA,CACA,GAAAsmY,EAAA,CACA,IAAAk3E,EAAA,IAAA93G,EAAA4gC,EAAA5ga,KAAAi3e,IAAAvga;AACA,OAAAi+D,EAAA,IAAAojW,GAAA,CAAAD,EAAAnjW,IAAAmjW,CACA,CACA,OAAAnjW,GAAAxpE,EACA,GACG,CACHrkE,IAAA,KACAt2B,MAAA,SAAAglD,GACA,GAAA3nD,MAAA2nD,EAAA;AACA,KAAAA,aAAAwqW,IAAAnyZ,KAAA+yb,MAAAxyb,QAAAonD,EAAAorY,MAAAxyb,QAAAP,KAAAwb,SAAAjb,QAAAonD,EAAAnsC,SAAAjb,OAAA;AACA,QAAAD,EAAA,EAAsBA,EAAAN,KAAA+yb,MAAAxyb,OAAuBD,IAAA,IAAAN,KAAA+yb,MAAAzyb,GAAAyzP,GAAApsM,EAAAorY,MAAAzyb,IAAA;AAC7C,QAAA6pgB,EAAA,EAAyBA,EAAAnqgB,KAAAwb,SAAAjb,OAA6B4pgB,GAAA,KAAAnqgB,KAAAwb,SAAA2uf,IAAAxid,EAAAnsC,SAAA2uf,IAAAnqgB,KAAAwb,SAAA2uf,EAAA,IAAAxid,EAAAnsC,SAAA2uf,EAAA,KAAAnqgB,KAAAwb,SAAA2uf,EAAA,GAAAp2Q,GAAApsM,EAAAnsC,SAAA2uf,EAAA;AACtD,QACA,GACG,CACHlxe,IAAA,SACAt2B,MAAA,SAAAuhB,GACA,OAAAkmf,GAAApqgB,KAAAqqgB,YAAAnmf,GACA,GACG,CACH+U,IAAA,cACAt2B,MAAA,SAAAuhB,GACA,GAAAlkB,MAAAs9F,GAAA,OAAAuL;AACA,GAAA3kF,EAAA+5X,gBAAAj+Y,KAAA+yb,MAAAtva,KAAAokf,GAAArjX,IAAA,OAAAxkJ,KAAA+yb;AAEA,IADA,IAAA9ra,EAAA,GACA3mB,EAAA,EAAsBA,EAAAN,KAAA+yb,MAAAxyb,OAAuBD,IAC7CN,KAAA+yb,MAAAzyb,GAAAwD,gBAAA+jgB,IAAA5gf,EAAArf,KAAA5H,KAAA+yb,MAAAzyb;AAEA,OAAA2mB,CACA,GACG,CACHgS,IAAA,aACAt2B,MAAA,SAAAuJ,GACAA,EAAAlM,KACA,IACG,EACHi5B,IAAA,SACAt2B,MAAA,SAAAgoB,EAAAimX,GACA,OAAAA,EAAArwY,OAAAyogB,GAAAp4H,EAAAjmX,EAAA,EAAAg9e,IAAArqa,EACA,KAEA60T,CACA,CA5KA;AA6KAA,GAAA70T,MAAA,IAAA60T,GAAA,OACAA,GAAAi4G;AACA,IAAA9sa,GAAA60T,GAAA70T,MACA4sa,GAAA,WACA,SAAAA,EAAA1uF,GACAzoS,EAAA/yI,KAAAkqgB,GACAlqgB,KAAAw7a,SACA,CAsEA,OArEAtoS,EAAAg3X,EAAA,EACAjxe,IAAA,MACAt2B,MAAA,SAAA08K,EAAA10J,GACA,IAAA2/e,EAAAtqgB,KAAAw7a,QAAA53Z,IAAA,SAAA2mf,GACA,OAAAA,EAAA3mf,IAAAy7J,EAAA10J,EAAAg9e,GACA;AACA,OAAAuC,EAAA38e,KAAA+8e,EACA,GACG,CACHrxe,IAAA,WACAt2B,MAAA,SAAAqb,EAAA8oJ,GACA,GAAAA,EAAAmxO,OAAA,OAAAka,GAAA70T;AAEA,IADA,IAAA48H,EAAA,GACA55N,EAAA,EAAsBA,EAAAN,KAAAw7a,QAAAj7a,OAAyBD,IAAA,CAC/C,IAAA2mB,EAAAjnB,KAAAw7a,QAAAl7a,GAAA83f,SAAAp6e,EAAA8oJ;AACA7/I,GAAAq2E,KACAr2E,aAAAijf,EAAAhwS,IAAAznN,OAAAwU,EAAAu0Z,SAAoFthN,EAAAtyN,KAAAqf,GACpF,CACA,OAAAijf,EAAA38e,KAAA2sM,EACA,GACG,CACHjhM,IAAA,KACAt2B,MAAA,SAAAglD,GACA,KAAAA,aAAAuid,IAAAvid,EAAA6zX,QAAAj7a,QAAAP,KAAAw7a,QAAAj7a,OAAA;AACA,QAAAD,EAAA,EAAsBA,EAAAN,KAAAw7a,QAAAj7a,OAAyBD,IAAA,IAAAN,KAAAw7a,QAAAl7a,GAAAyzP,GAAApsM,EAAA6zX,QAAAl7a,IAAA;AAC/C,QACA,GACG,CACH24B,IAAA,SACAt2B,MAAA,SAAAuhB,GAGA,IAFA,IAAA+C,EACAsjZ,KACAjqa,EAAA,EAAsBA,EAAAN,KAAAw7a,QAAAj7a,OAAyBD,IAAA,CAC/C,IAAAw3f,EAAA93f,KAAAw7a,QAAAl7a,GAAA+pgB,YAAAnmf;AACA,GAAA4ze,EAAAv3f,OACA,GAAA0mB,EAEU,CACVsjZ,IACAtjZ,IAAA7mB,QACAmqa;AAEA,QAAA5kV,EAAA,EAA0BA,EAAAmya,EAAAv3f,OAAmBolF,IAAA1+D,EAAArf,KAAAkwf,EAAAnya,GAC7C,MAPA1+D,EAAA6we,CAQA,CACA,OAAA7we,EAAAmjf,GAAA7/F,EAAAtjZ,IAAAkL,KAAAi3e,KAAAvga,EACA,GACG,CACH5vE,IAAA,aACAt2B,MAAA,SAAAuJ,GACA,QAAA5L,EAAA,EAAsBA,EAAAN,KAAAw7a,QAAAj7a,OAAyBD,IAAAN,KAAAw7a,QAAAl7a,GAAAkqgB,WAAAt+f,EAC/C,IACG,EACH+sB,IAAA,OACAt2B,MAAA,SAAA64a,GACA,OAAAA,EAAAj7a,QACA,OACA,OAAA+8F;AACA,OACA,OAAAk+U,EAAA;AACA,QACA,WAAA0uF,EAAA1uF,EAAAnpZ,MAAA,SAAAloB,GACA,OAAAA,aAAAgoZ,EACA,GAAWqpB,IAAA98Z,OAAA,SAAA7d,EAAAsJ,GACX,OAAAtJ,EAAA4R,OAAAtI,aAAAgoZ,GAAAhoZ,IAAAqxa,QACA,EAAW,KAEX,KAEA0uF,CACA,CA3EA;AAsJA,SAAAT,GAAAgB,EAAAzsf,GACA,IAAAA,IAAAysf,EAAAlqgB,OAAA,OAAAkqgB;AAEA,IADA,IAAAxjf,EAAA,GACA3mB,EAAA,EAAkBA,EAAAmqgB,EAAAlqgB,OAAkBD,IAAA,CACpC,IAAAwxV,EAAA24K,EAAAnqgB;AACA2mB,EAAArf,KAAA,IAAAsqZ,GAAApgE,EAAAvkU,KAAAvP,EAAA8zU,EAAArlS,GAAAzuC,EAAA8zU,EAAAhuV,MACA,CACA,OAAAmjB,CACA,CAYA,SAAAuif,GAAAiB,EAAAvmf,EAAAlG,GACA,GAAAkG,EAAA+zX,OAAA;AAGA,IAFA,IAEAnmD,EAFA3yU,EAAAnB,EAAAkG,EAAAwuX,SACAx4K,EAAA,KACA55N,EAAA,EAAwBA,EAAAmqgB,EAAAlqgB,OAAkBD,KAC1CwxV,EAAA24K,EAAAnqgB,KAAAwxV,EAAAvkU,KAAAvP,GAAA8zU,EAAArlS,GAAAttC,KACA+6M,MAAA,KAAAtyN,KAAAkqV,GACA24K,EAAAnqgB,GAAA;AAGA,OAAA45N,CACA,CACA,SAAAwvS,GAAA5vX,GAEA,IADA,IAAA7yH,EAAA,GACA3mB,EAAA,EAAkBA,EAAAw5I,EAAAv5I,OAAkBD,IAAA,MAAAw5I,EAAAx5I,IAAA2mB,EAAArf,KAAAkyI,EAAAx5I;AACpC,OAAA2mB,CACA,CACA,SAAA+hf,GAAAyB,EAAAvmf,EAAAlG,EAAAhc,GACA,IAAAwZ,EAAA,GACAkvf;AACAxmf,EAAA1J,QAAA,SAAAmuS,EAAAgiN,GACA,IAAAzwS,EAAAsvS,GAAAiB,EAAA9hN,EAAAgiN,EAAA3sf;AACA,GAAAk8M,EAAA,CACAwwS;AACA,IAAAtkV,EAAA4iV,GAAA9uS,EAAAyuF,EAAA3qS,EAAA2sf,EAAA,EAAA3ogB;AACAokL,GAAA9oF,IAAA9hF,EAAA5T,KAAA+igB,IAAAhiN,EAAA+pF,SAAAtsN,EACA,CACA;AAEA,IADA,IAAA0xU,EAAA2R,GAAAiB,EAAAhB,GAAAe,MAAAzsf,GAAAmU,KAAAi3e,IACA9ogB,EAAA,EAAkBA,EAAAw3f,EAAAv3f,OAAmBD,IAAAw3f,EAAAx3f,GAAAwD,KAAAwgR,MAAApgQ,EAAA4ze,EAAAx3f,MACrC0B,EAAAsF,UAAAtF,EAAAsF,SAAAwwf,EAAAx3f,GAAAypW,MACA+tJ,EAAAhuf,OAAAxJ,IAAA;AAEA,OAAAw3f,EAAAv3f,QAAAib,EAAAjb,OAAA,IAAA4xZ,GAAA2lG,EAAAt8e,GAAA8hF,EACA,CACA,SAAA8ra,GAAAtogB,EAAAma,GACA,OAAAna,EAAAysB,KAAAtS,EAAAsS,MAAAzsB,EAAA2rD,GAAAxxC,EAAAwxC,EACA,CACA,SAAA29c,GAAAK,GAEA,IADA,IAAAG,EAAAH,EACAnqgB,EAAA,EAAkBA,EAAAsqgB,EAAArqgB,OAAA,EAAwBD,IAAA,CAC1C,IAAAwxV,EAAA84K,EAAAtqgB;AACA,GAAAwxV,EAAAvkU,MAAAukU,EAAArlS,GAAA,QAAAk5B,EAAArlF,EAAA,EAAkDqlF,EAAAilb,EAAArqgB,OAAoBolF,IAAA,CACtE,IAAAsT,EAAA2xa,EAAAjlb;AACA,GAAAsT,EAAA1rE,MAAAukU,EAAAvkU,KAAA,CAQA0rE,EAAA1rE,KAAAukU,EAAArlS,KACAm+c,GAAAH,IAAAG,EAAAH,EAAArqgB,SACAwqgB,EAAAtqgB,GAAAwxV,EAAAj6L,KAAAi6L,EAAAvkU,KAAA0rE,EAAA1rE,MACAs9e,GAAAD,EAAAjlb,EAAAmsQ,EAAAj6L,KAAA5+D,EAAA1rE,KAAAukU,EAAArlS;AAEA,KACA,CAbAwsC,EAAAxsC,IAAAqlS,EAAArlS,KACAm+c,GAAAH,IAAAG,EAAAH,EAAArqgB,SACAwqgB,EAAAjlb,GAAAsT,EAAA4+D,KAAA5+D,EAAA1rE,KAAAukU,EAAArlS,IACAo+c,GAAAD,EAAAjlb,EAAA,EAAAsT,EAAA4+D,KAAAi6L,EAAArlS,GAAAwsC,EAAAxsC,KAWA,CACA,CACA,OAAAm+c,CACA,CACA,SAAAC,GAAA/wX,EAAAx5I,EAAAq3f,GACA,KAAAr3f,EAAAw5I,EAAAv5I,QAAA6ogB,GAAAzR,EAAA79W,EAAAx5I,IAAA,GAAAA;AACAw5I,EAAAhwI,OAAAxJ,EAAA,EAAAq3f,EACA,CACA,SAAAmT,GAAAzzb,GACA,IAAA6iJ,EAAA;AAMA,OALA7iJ,EAAAslU,SAAA,uBAAAzwY,GACA,IAAA+a,EAAA/a,EAAAmrE,EAAAp1D;AACAgF,MAAAq2E,IAAA48H,EAAAtyN,KAAAqf,EACA,GACAowD,EAAAymb,eAAA5jS,EAAAtyN,KAAAuqZ,GAAA5tZ,OAAA8yE,EAAAp1D,MAAA0I,IAAA,CAAA0sD,EAAAymb,cAAAnG,QACAuS,GAAA38e,KAAA2sM,EACA,CACA,IAAA6wS,GAAA,CACA5kV,aACA6kV,iBACAC,yBACA7ud,cACA8ud,qBACA9kV,YAEA+kV,GAAAztf,GAAAgye,GAAA,GACA0b,GAAA,WACA,SAAAA,IACAr4X,EAAA/yI,KAAAorgB,GACAprgB,KAAAovf,WAAA,KACApvf,KAAA0gR,aAAA,EACA1gR,KAAAmvf,UAAA,KACAnvf,KAAA2gR,YAAA,CACA,CAoBA,OAnBAztI,EAAAk4X,EAAA,EACAnye,IAAA,MACAt2B,MAAA,SAAAw9Y,GACAngZ,KAAAovf,WAAAjvG,EAAAivG,WACApvf,KAAA0gR,aAAAy/H,EAAAz/H,aACA1gR,KAAAmvf,UAAAhvG,EAAAgvG,UACAnvf,KAAA2gR,YAAAw/H,EAAAx/H,WACA,GACG,CACH1nP,IAAA,QACAt2B,MAAA,WACA3C,KAAAovf,WAAApvf,KAAAmvf,UAAA,IACA,GACG,CACHl2d,IAAA,KACAt2B,MAAA,SAAAw9Y,GACA,OAAAA,EAAAivG,YAAApvf,KAAAovf,YAAAjvG,EAAAz/H,cAAA1gR,KAAA0gR,cAAAy/H,EAAAgvG,WAAAnvf,KAAAmvf,WAAAhvG,EAAAx/H,aAAA3gR,KAAA2gR,WACA,KAEAyqP,CACA,CA5BA,GA6BAC,GAAA,WACA,SAAAA,EAAAh0b,EAAAi0b,GACA,IAAAC,EAAAvrgB;AACA+yI,EAAA/yI,KAAAqrgB,GACArrgB,KAAAq3E,OACAr3E,KAAAsrgB,kBACAtrgB,KAAA+8J,MAAA,GACA/8J,KAAA8lgB,cAAA,EACA9lgB,KAAAyhb,SAAA,KACAzhb,KAAA46T,iBAAA,IAAAwwM,GACAprgB,KAAAwrgB,WAAA,KACAxrgB,KAAAyrgB,+BACAzrgB,KAAA0rgB,oBAAA,KACA1rgB,KAAAyhb,SAAAh4a,OAAAm8K,kBAAA,IAAAn8K,OAAAm8K,iBAAA,SAAAC,GACA,QAAAvlL,EAAA,EAAsBA,EAAAulL,EAAAtlL,OAAsBD,IAAAirgB,EAAAxuW,MAAAn1J,KAAAi+K,EAAAvlL;AAC5Cod,GAAAgye,GAAA,IAAA7pU,EAAApiK,KAAA,SAAAtZ,GACA,mBAAAA,EAAArG,MAAAqG,EAAA+7K,aAAA3lL,QAAA,iBAAA4J,EAAArG,MAAAqG,EAAA29F,SAAAvnG,OAAA4J,EAAAX,OAAAiuF,UAAAl3F,MACA,GACAgrgB,EAAA9D,YACQzX,GAAA34a,EAAA2zT,WAAAnlN,EAAApiK,KAAA,SAAAtZ,GACR,mBAAAA,EAAArG,MAAA,MAAAqG,EAAAX,OAAA4a,QACA,IACAizD,EAAAznE,MAAAqzf,wBACAsI,EAAA9D,aAEA8D,EAAAhyT,OAEA,GACA4xT,KACAnrgB,KAAAwrgB,WAAA,SAAAnrgB,GACAkrgB,EAAAxuW,MAAAn1J,KAAA,CACA4B,OAAAnJ,EAAAmJ,OACA1F,KAAA,gBACAgkG,SAAAznG,EAAA0pd,YAEAwhD,EAAA9D,WACA,GAEAzngB,KAAA2rgB,kBAAA3rgB,KAAA2rgB,kBAAAlpgB,KAAAzC,KACA,CA0QA,OAzQAkzI,EAAAm4X,EAAA,EACApye,IAAA,YACAt2B,MAAA,WACA,IAAAipgB,EAAA5rgB;AACAA,KAAA8lgB,aAAA,IAAA9lgB,KAAA8lgB,aAAAr8f,OAAA0F,WAAA,WACAy8f,EAAA9F,cAAA,EACA8F,EAAAryT,OACA,EAAO,IACP,GACG,CACHtgL,IAAA,aACAt2B,MAAA,WACA3C,KAAA8lgB,cAAA,IACAr8f,OAAAyF,aAAAlP,KAAA8lgB,cACA9lgB,KAAA8lgB,cAAA,EACA9lgB,KAAAu5M,QAEA,GACG,CACHtgL,IAAA,QACAt2B,MAAA,WACA3C,KAAAyhb,WACAzhb,KAAAyhb,SAAAoqF,cACA7rgB,KAAAyhb,SAAAnyZ,QAAAtvB,KAAAq3E,KAAA22T,IAAA+8H,KAEA/qgB,KAAAwrgB,YAAAxrgB,KAAAq3E,KAAA22T,IAAA7/W,iBAAA,2BAAAnuB,KAAAwrgB,YACAxrgB,KAAAu+f,kBACA,GACG,CACHtle,IAAA,OACAt2B,MAAA,WACA,IAAAmpgB,EAAA9rgB;AACA,GAAAA,KAAAyhb,SAAA,CACA,IAAA19H,EAAA/jT,KAAAyhb,SAAAoqF;AACA,GAAA9nN,EAAAxjT,OAAA,CACA,QAAAD,EAAA,EAA0BA,EAAAyjT,EAAAxjT,OAAiBD,IAAAN,KAAA+8J,MAAAn1J,KAAAm8S,EAAAzjT;AAC3CmJ,OAAA0F,WAAA,WACA,OAAA28f,EAAAvyT,OACA,EAAW,GACX,CACAv5M,KAAAyhb,SAAA9yZ,YACA,CACA3uB,KAAAwrgB,YAAAxrgB,KAAAq3E,KAAA22T,IAAAx+W,oBAAA,2BAAAxvB,KAAAwrgB,YACAxrgB,KAAA69f,qBACA,GACG,CACH5ke,IAAA,mBACAt2B,MAAA,WACA3C,KAAAq3E,KAAA22T,IAAAxpX,cAAA2J,iBAAA,kBAAAnuB,KAAA2rgB,kBACA,GACG,CACH1ye,IAAA,sBACAt2B,MAAA,WACA3C,KAAAq3E,KAAA22T,IAAAxpX,cAAAgL,oBAAA,kBAAAxvB,KAAA2rgB,kBACA,GACG,CACH1ye,IAAA,2BACAt2B,MAAA,WACA,IAAAopgB,EAAA/rgB;AACAA,KAAAyrgB,+BACAt8f,WAAA,WACA,OAAA48f,EAAAN,8BACA,EAAO,GACP,GACG,CACHxye,IAAA,oBACAt2B,MAAA,WACA,GAAAi8f,GAAA5+f,KAAAq3E,MAAA,CACA,GAAAr3E,KAAAyrgB,4BAAA,OAAAnO,GAAAt9f,KAAAq3E;AACA,GAAA35D,GAAAgye,GAAA,KAAA1vf,KAAAq3E,KAAAp1D,MAAA8xF,UAAAzW,MAAA,CACA,IAAA6iT,EAAAngZ,KAAAq3E,KAAAu+a;AACA,GAAAz1G,EAAAgvG,WAAAV,EAAAtuG,EAAAgvG,UAAAhvG,EAAAx/H,YAAAw/H,EAAAivG,WAAAjvG,EAAAz/H,cAAA,OAAA1gR,KAAAyngB,WACA,CACAzngB,KAAAu5M,OANA,CAOA,GACG,CACHtgL,IAAA,kBACAt2B,MAAA,WACA3C,KAAA46T,iBAAA/tS,IAAA7sB,KAAAq3E,KAAAu+a,oBACA,GACG,CACH38d,IAAA,wBACAt2B,MAAA,SAAAw9Y,GACA,IAAAA,EAAAgvG,UAAA;AAGA,IAFA,IACAx/e,EADAue,EAAA,IAAAnK,IAEA+vc,EAAA3zE,EAAAgvG,UAAqCr7B,EAAMA,EAAAtmd,EAAAsmd,GAAA5lc,EAAA0pB,IAAAk8a;AAC3C,QAAAk4C,EAAA7rH,EAAAivG,WAAuC4c,EAAOA,EAAAx+f,EAAAw+f,GAAA,GAAA99e,EAAA0C,IAAAo7e,GAAA,CAC9Cr8f,EAAAq8f;AACA,KACA,CACA,IAAAthU,EAAA/6L,GAAA3P,KAAAq3E,KAAAivU,QAAAqsG,YAAAhjf;AACA,OAAA+6L,KAAAk8M,eAAA,CACA9iZ,KAAA,YACA0F,OAAA,GAAAmG,EAAAynF,SAAAznF,EAAAnC,WAAAmC,KAEA3P,KAAA49f,2BAJA,CAOA,GACG,CACH3ke,IAAA,iBACAt2B,MAAA,WACA,GAAA3C,KAAAyhb,SAAA,CACA,IACAznS,EADAC,EAAAlI,EAAA/xI,KAAAyhb,SAAAoqF;AAEA,IACA,IAAA5xX,EAAAz3I,MAA+Bw3I,EAAAC,EAAAz5I,KAAA6lF,MAAgC,CAC/D,IAAAwwa,EAAA78W,EAAAr3I;AACA3C,KAAA+8J,MAAAn1J,KAAAivf,EACA,CACA,CAAU,MAAA3jd,GACV+mG,EAAA55I,EAAA6yC,EACA,CAAU,QACV+mG,EAAA/tI,GACA,CACA,CACA,OAAAlM,KAAA+8J,KACA,GACG,CACH9jI,IAAA,QACAt2B,MAAA,WACA,IAAA00E,EAAAr3E,KAAAq3E;AACA,GAAAA,EAAAivU,WAAAtmZ,KAAA8lgB,cAAA,IACA,IAAAjgV,EAAA7lL,KAAAomgB;AACAvgV,EAAAtlL,SAAAP,KAAA+8J,MAAA;AACA,IAAAojP,EAAA9oU,EAAAu+a,oBACA3W,GAAAj/e,KAAAyrgB,8BAAAzrgB,KAAA46T,iBAAA7mE,GAAAosJ,IAAAy+G,GAAAvnb,KAAAr3E,KAAAisgB,sBAAA9rH,GACA5yX,GAAA,EACAk/B,GAAA,EACAy/c,KACAl4f,EAAA;AACA,GAAAqjE,EAAAi1P,SACA,QAAAhsU,EAAA,EAAwBA,EAAAulL,EAAAtlL,OAAsBD,IAAA,CAC9C,IAAA2mB,EAAAjnB,KAAAmsgB,iBAAAtmV,EAAAvlL,GAAA0T;AACAiT,IACAsG,IAAA,EAAAtG,EAAAsG,KAAAxqB,KAAA8b,IAAAoI,EAAAsG,QACAk/B,IAAA,EAAAxlC,EAAAwlC,GAAA1pD,KAAA+b,IAAAmI,EAAAwlC,MACAxlC,EAAAilf,iBAEA,CAEA,GAAAl4f,EAAAyP,KAAA,SAAAjjB,GACA,YAAAA,EAAA4jB,QACA,KAAO,GAAAizD,EAAAznE,MAAAwyf,aAAA,IAAA/qb,EAAAznE,MAAAwyf,aAAAtS,IAAAz4a,EAAA2zT,WAAA3zT,EAAAznE,MAAAmzf,mBAAAppd,KAAAmT,MAAA,KAAA+4H,EAAApiK,KAAA,SAAAtZ,GACP,mBAAAA,EAAArG,MAAAqG,EAAA+7K,aAAA3lL,MACA,IAAO,CACP,IACA6rgB,EADAC,EAAAt6X,EAAA/9H;AAEA,IACA,IAAAq4f,EAAA7pgB,MAA+B4pgB,EAAAC,EAAA7rgB,KAAA6lF,MAAgC,CAC/D,IAAAniE,EAAAkof,EAAAzpgB;AACA,SAAAuhB,EAAAE,UAAAF,EAAA1W,WAEA,IADA,IAAAyvK,EAAA/4J,EAAA2lE,YACAozF,GAAA,GAAAA,EAAA7lF,UAAA,CACA,YAAA6lF,EAAAhnB,gBAAA,CACA/xI,EAAA1W,WAAA1E,YAAAob;AACA,KACA,CACA+4J,IAAAx2K,UACA,CAEA,CACA,CAAU,MAAAysC,GACVm5d,EAAAhsgB,EAAA6yC,EACA,CAAU,QACVm5d,EAAAnggB,GACA,CACA,MAAQ,GAAA0jf,GAAA57e,EAAAzT,OAAA,CACR,IAAA+rgB,EAAAt4f,EAAAuS,OAAA,SAAA/lB,GACA,YAAAA,EAAA4jB,QACA;AACA,MAAAkof,EAAA/rgB,OAAA,CACA,IAAAgsgB,EAAApe,EAAAme,EAAA,GACAxrgB,EAAAyrgB,EAAA,GACAtxf,EAAAsxf,EAAA;AACAzrgB,EAAA0M,YAAA1M,EAAA0M,uBAAAyN,EAAAzN,WAAAyN,EAAAygE,SAAkF56E,EAAA46E,QAClF,KAAU,CACV,IAEA8wb,EAFArd,EAAAnvf,KAAA46T,iBAAAu0L,UACAsd,EAAA16X,EAAAu6X;AAEA,IACA,IAAAG,EAAAjqgB,MAAiCgqgB,EAAAC,EAAAjsgB,KAAA6lF,MAAgC,CACjE,IAAA28C,EAAAwpY,EAAA7pgB,MACAmlB,EAAAk7G,EAAAx1H;CACAsa,GAAA,MAAAA,EAAA1D,UAAA+qe,GAAAud,GAAAr1b,EAAA83a,IAAArne,GAAAk7G,EAAAtnD,QACA,CACA,CAAY,MAAAxoC,GACZu5d,EAAApsgB,EAAA6yC,EACA,CAAY,QACZu5d,EAAAvggB,GACA,CACA,CACA,CACA,IAAAyggB,EAAA;AACAp/e,EAAA,GAAA0xd,GAAA5na,EAAAznE,MAAA+yf,UAAAhpd,KAAAmT,MAAA,KAAA/pD,KAAA+b,IAAAu4D,EAAAznE,MAAAgzf,UAAAvrb,EAAAznE,MAAA0yf,UAAA95f,MAAAmxC,KAAAmT,MAAA,KAAAmic,EAAA9uG,KAAAwsH,EAAA7P,GAAAzlb,KAAAs1b,EAAA54Q,GAAAg/N,EAAA7/E,UAAAqC,KAAAl+T,EAAAp1D,MAAA0I,IAAAqqD,QAAA,QACAqC,EAAAznE,MAAA+yf,UAAA,EACArF,GAAAjmb,GACAr3E,KAAA46T,iBAAA/tS,IAAAszX,GACA9oU,EAAAu1b,sBACQr/e,GAAA,GAAA0xd,KACR1xd,GAAA,IACA8pD,EAAAivU,QAAAgwG,UAAA/oe,EAAAk/B,GAmEA,SAAA4qB,GACA,IAAAw1b,GAAAj8e,IAAAymD,KACAw1b,GAAAhgf,IAAAwqD,EAAA,OACA,mCAAAxtE,QAAAub,iBAAAiyD,EAAA22T,KAAA29F,aAAA,CAEA,GADAt0Z,EAAAqlb,sBAAA9M,EACAkd,GAAA;AACAv3f,QAAAC,KAAA,4KACAs3f,KACA,CACA,CATA,CAlEAz1b,IAEAA,EAAAznE,MAAAqzf,uBACA5rb,EAAAznE,MAAAqzf,wBAoHA,SAAA5rb,EAAA4uG,GACA,IAAA5lJ,EAKA0se,EAJAC,EAAA31b,EAAAu+a,oBACAzG,EAAA6d,EAAA7d,UACAxuO,EAAAqsP,EAAArsP,YACAssP,EAAAl7X,EAAAk0C;AAEA,IACA,IAAAgnV,EAAAzqgB,MAAyBuqgB,EAAAE,EAAAzsgB,KAAA6lF,MAAgC,CACzD,IAAAniE,EAAA6of,EAAApqgB;AACA,kBAAA09B,EAAAnc,EAAA1W,kBAAA,IAAA6yB,OAAA,EAAAA,EAAAjc,UAAA,CAEA,IADA,IAAAqwd,EAAAvwd,EAAA2lE,YACA4qZ,GAAA,MAAAA,EAAArwd,UAAA,MAAAqwd,EAAArwd,UAAAqwd,IAAA5qZ;AACA,GAAA4qZ,EAAA,CAEA,IADA,IAAA3sd,EAAA2sd,IACiB,CACjB,IAAA1ic,EAAAjqB,EAAArhB;AACA,IAAAsrC,GAAA,GAAAA,EAAAqlD,UAAA,SAAArlD,EAAAkkH,iBAAA,aAAA5wI,KAAA0sB,EAAA3tB,UAAA;AACA0D,EAAAiqB,CACA,CACAjqB,EAAAthB,aAAA0d,EAAA4D,EAAArhB,YACA0of,GAAAjre,GAAAmzD,EAAA0mb,eAAA7H,SAAAhye,EAAAy8P,EACA,MACAz8P,EAAA1W,WAAA1E,YAAAob,EAEA,CACA,CACA,CAAI,MAAAgvB,GACJ+5d,EAAA5sgB,EAAA6yC,EACA,CAAI,QACJ+5d,EAAA/ggB,GACA,CACA,CAhCA,CAnHAmrE,EAAArjE,IAEAhU,KAAAsrgB,gBAAA/9e,EAAAk/B,EAAAy/c,EAAAl4f,GACAqjE,EAAAivU,SAAAjvU,EAAAivU,QAAA4tG,MAAA78a,EAAA4tU,YAAA5tU,EAAAp1D,OAA6EjiB,KAAA46T,iBAAA7mE,GAAAosJ,IAAAm9G,GAAAjmb,GAC7Er3E,KAAA46T,iBAAA/tS,IAAAszX,GAxFA,CA0FA,GACG,CACHlnX,IAAA,mBACAt2B,MAAA,SAAAk0f,EAAA7if,GACA,GAAAA,EAAAnK,QAAAgtf,EAAArtf,SAAA;AACA,IAAAkhM,EAAA1qM,KAAAq3E,KAAAivU,QAAAqsG,YAAAkE,EAAArtf;AACA,iBAAAqtf,EAAA/yf,OAAA4mM,GAAA1qM,KAAAq3E,KAAAivU,SAAA,mBAAAuwG,EAAAqW,eAAA,SAAArW,EAAAqW,gBAAArW,EAAA/uZ,WAAA+uZ,EAAArtf,OAAAsF,aAAA;AACA,IAAA47L,KAAAk8M,eAAAiwG,GAAA;AACA,gBAAAA,EAAA/yf,KAAA,CACA,QAAAxD,EAAA,EAAwBA,EAAAu2f,EAAA5wU,WAAA1lL,OAA2BD,IAAA,CACnD,IAAA4jB,EAAA2ye,EAAA5wU,WAAA3lL;AACA0T,EAAApM,KAAAsc,GACA,GAAAA,EAAAkzE,WAAAp3F,KAAA0rgB,oBAAAxnf,EACA,CACA,GAAAwmL,EAAAo8M,YAAAp8M,EAAAo8M,YAAAp8M,EAAAsjM,MAAAtjM,EAAAo8M,WAAAtwY,SAAAqgf,EAAArtf,QAAA,OACA+jB,KAAAm9K,EAAAkoT,UACAnmc,GAAAi+I,EAAA6lN;AAEA,IAAA9/I,EAAAomP,EAAA/rO,gBACA7xL,EAAA49Z,EAAAhta;AACA,GAAAnsE,GAAAgye,GAAA,IAAAmH,EAAA5wU,WAAA1lL,OACA,QAAA4sgB,EAAA,EAA6BA,EAAAtW,EAAA5wU,WAAA1lL,OAA8B4sgB,IAAA,CAC3D,IAAAC,EAAAvW,EAAA5wU,WAAAknV,GACAriP,EAAAsiP,EAAAtiP,gBACAjhM,EAAAujb,EAAAvjb,cACAihM,GAAAj3Q,MAAA5O,UAAA4E,QAAAe,KAAAisf,EAAA5wU,WAAA6kG,GAAA,KAAAra,EAAAqa,KACAjhM,GAAAh2E,MAAA5O,UAAA4E,QAAAe,KAAAisf,EAAA5wU,WAAAp8F,GAAA,KAAAoP,EAAApP,EACA,CAEA,IAAAsra,EAAA1kP,KAAAjjQ,YAAAqpf,EAAArtf,OAAA8kf,EAAA79O,GAAA,IACAljP,EAAAm9K,EAAAkqT,gBAAAiC,EAAArtf,OAAA2rf,GAAA,GACAC,EAAAn8Z,KAAAzrF,YAAAqpf,EAAArtf,OAAA8kf,EAAAr1Z,GAAA49Z,EAAArtf,OAAA8jN,WAAA/sN;AAEA,OACAgtB,OACAk/B,GAHAi+I,EAAAkqT,gBAAAiC,EAAArtf,OAAA4rf,EAAA,GAKA,CAAQ,oBAAAyB,EAAA/yf,KACR,CACAypB,KAAAm9K,EAAAqoT,WAAAroT,EAAAtoB,OACA31H,GAAAi+I,EAAA+pT,SAAA/pT,EAAAtoB,SAGApiL,KAAA0rgB,oBAAA7U,EAAArtf,OACA,CACA+jB,KAAAm9K,EAAAqoT,WACAtmc,GAAAi+I,EAAA+pT,SACAyX,SAAArV,EAAArtf,OAAAiuF,WAAAo/Z,EAAA/uZ,UAGA,KAEAuja,CACA,CAlTA,GAmTAwB,GAAA,IAAA13Z,QACA23Z;AAWA,SAAAO,GAAAh2b,EAAAa,GACA,IAAAk3a,EAAAl3a,EAAAq6a,eACA7xO,EAAAxoM,EAAAhkC,YACAi7c,EAAAj3a,EAAAglb,aACAv8O,EAAAzoM,EAAAljC,UACAs4d,EAAAj2b,EAAAmsU,SAAAnsU,EAAAp1D,MAAA8xF,UAAA+9S;AACA,GAAA28F,EAAA6e,EAAAppf,KAAAopf,EAAAtvf,OAAAmxe,EAAAxuO,GAAA,CACA,IAAA5uJ,EAAA,CAAAo9X,EAAAxuO,EAAAyuO,EAAA1uO;AACA0uO,EAAAr9X,EAAA,GACA2uJ,EAAA3uJ,EAAA,GACAo9X,EAAAp9X,EAAA,GACA4uJ,EAAA5uJ,EAAA,EACA,CACA,OACAq9X,aACA1uO,eACAyuO,YACAxuO,cAEA,CAiBA,SAAA+rP,GAAAr1b,EAAAnzD,GACA,QAAArf,EAAAqf,EAAA1W,WAAgC3I,MAAAwyE,EAAA22T,IAAoBnpY,IAAA2I,WAAA,CACpD,IAAAk9L,EAAArzH,EAAAivU,QAAAqsG,YAAA9tf;AACA,GAAA6lM,KAAAxmL,KAAAmlJ,QAAA,OAAAxkK,CACA,CACA,WACA,CAgGA,IAyBAu5Y,GAAA;AAoJA,SAAAmvH,GAAAl2b,EAAA1sD,EAAA6if,GACA,OAAAzqgB,KAAA+b,IAAA0uf,EAAA17G,OAAA07G,EAAAp4b,MAAAzqD,EAAA82D,QAAApjE,KAAA,KACA8+e,GAAA9lb,EAAA1sD,EAAAqqD,QAAAw4b,EAAA17G,QAAAnnY,EAAAqqD,QAAAw4b,EAAAp4b,MACA,CA6CA,SAAAq4b,GAAAp7H,EAAAq7H,EAAAC,GAGA,IAFA,IAAA/2H,EAAAvE,EAAAuE,MACAz3X,EAAAuuf,EAAAr7H,EAAAlzX,MAAAkzX,EAAA/3V,IACAs8V,EAAA,IAAA82H,GAAAr7H,EAAAiN,WAAA1I,IAAAvE,EAAAnuX,KAAA0yX,GAAAjE,aACAiE,IACAz3X,IACAuuf;AAEA,GAAAC,EAEA,IADA,IAAA10a,EAAAo5S,EAAAnuX,KAAA0yX,GAAAw/E,WAAA/jF,EAAAiN,WAAA1I,IACA39S,MAAAg/S,QACAh/S,IAAAxyF,WACA0Y;AAGA,OAAAA,CACA,CA8BA,IAAAyuf,GAAAxN,GACAyN,GAAA7J,GACAr+G,GAAA,WACA,SAAAA,EAAA2pE,EAAAhla,GACA,IAAAwjd,EAAA9tgB;AACA+yI,EAAA/yI,KAAA2lZ,GACA3lZ,KAAA+tgB,MAAA,KACA/tgB,KAAAy7E,WACAz7E,KAAAw6f,YAAA,KACAx6f,KAAAgugB,WACAhugB,KAAA+lgB,WAAA,KACA/lgB,KAAA89f,cAAA,KACA99f,KAAA0+f,0BAAAjte,EACAzxB,KAAA4P,MAAA,IAAAuyf,GACAnigB,KAAAiugB,kBAAA,GACAjugB,KAAAkugB,YAAA,GACAlugB,KAAA08f,yBACA18f,KAAAmU,SAAA,KACAnU,KAAAkpV,OAAA5+R,EACAtqD,KAAAiiB,MAAAqoC,EAAAroC,MACAjiB,KAAAmugB,cAAA7jd,EAAA8/Q,SAAA,GACApqU,KAAAmugB,cAAA3zf,QAAA4zf,IACApugB,KAAA8lR,SAAA9lR,KAAA8lR,SAAArjR,KAAAzC,MACAA,KAAAguY,IAAAshF,KAAAzoE,OAAAliZ,SAAAkvE,cAAA,OACAy7Y,IACAA,EAAA5qd,YAAA4qd,EAAA5qd,YAAA1E,KAAAguY,KAAyD,mBAAAshF,IAAAtvd,KAAAguY,KAAqDshF,EAAAzoE,QAAA7mZ,KAAAgugB,aAE9GhugB,KAAAssU,SAAA+hM,GAAArugB,MACAsugB,GAAAtugB,MACAA,KAAAywY,UAAA89H,GAAAvugB,MACAA,KAAAsmZ,QAAA8zG,GAAAp6f,KAAAiiB,MAAA0I,IAAA6jf,GAAAxugB,MAAA8qgB,GAAA9qgB,WAAAguY,IAAAhuY,MACAA,KAAA09f,YAAA,IAAA2N,GAAArrgB,KAAA,SAAAutB,EAAAk/B,EAAAy/c,EAAAl4f,GACA,OAjRA,SAAAqjE,EAAA9pD,EAAAk/B,EAAAy/c,EAAAjmV,GACA,IAAA+8U,EAAA3rb,EAAAznE,MAAAszf,4BAAA7rb,EAAA2zT,UAAA3zT,EAAAznE,MAAAozf,cAAA;AAEA,GADA3rb,EAAAznE,MAAAszf,0BAAA,EACA31e,EAAA,GACA,IAAA07I,EAAA5xF,EAAAznE,MAAA4yf,kBAAA7od,KAAAmT,MAAA,GAAAuqB,EAAAznE,MAAA2yf,oBAAA,KACAtjB,EAAA6d,GAAAzlb,EAAA4xF;AACA,GAAAg2U,IAAA5na,EAAAp1D,MAAA8xF,UAAAggJ,GAAAkrP,GAAA,CACA,GAAA6Q,GAAAK,GAAA,KAAA94a,EAAAznE,MAAAwyf,aAAAzod,KAAAmT,MAAA,IAAAuqB,EAAAznE,MAAAyyf,iBAAAhrb,EAAAslU,SAAA,yBAAAzwY,GACA,OAAAA,EAAAmrE,EAAAg4a,EAAA,YACA,GAAO;AACP,IAAApwc,EAAAo4B,EAAAp1D,MAAAg9B,GAAAq2V,aAAA2pG;AACA,WAAAh2U,EAAAhqH,EAAAosV,QAAA,cAA2D,OAAApiO,GAAAhqH,EAAAs7V,iBAC3DyoH,GAAA/jd,EAAAosV,QAAA,cAAA23H,GACA3rb,EAAAyuM,SAAA7mO,EACA,CAEA,KAbA,CAcA,IAAAujb,EAAAnrZ,EAAAp1D,MAAA0I,IAAAqqD,QAAAznD,GACAipJ,EAAAgsT,EAAArM,YAAA1pa;AACAl/B,EAAAi1c,EAAAxlT,OAAAxG,EAAA,GACA/pH,EAAA4qB,EAAAp1D,MAAA0I,IAAAqqD,QAAAvoB,GAAAwwH,MAAAzG,EAAA;AACA,IAIAi4V,EAAAC,EAJAvuH,EAAA9oU,EAAAp1D,MAAA8xF,UACA79F,EA9GA,SAAAmhE,EAAAs3b,EAAAC,EAAA3oV,GACA,IAOA5vJ,EAPAw4e,EAAAx3b,EAAAivU,QAAAgvG,WAAAqZ,EAAAC,GACA9mf,EAAA+mf,EAAA3qf,KACAixe,EAAA0Z,EAAA1Z,WACAC,EAAAyZ,EAAAzZ,SACA7ne,EAAAshf,EAAAthf,KACAk/B,EAAAoid,EAAApid,GACAyic,EAAA73a,EAAAu+a,oBAEA9jG,EAAAo9F,EAAAE;AAWA,GAVAt9F,GAAAz6U,EAAA22T,IAAAx3X,SAAA,GAAAs7Y,EAAA16T,SAAA06T,IAAAtkZ,cACA6oB,EAAA,EACAnS,KAAA4tY,EACA9zY,OAAAkxe,EAAAxuO,eAEAuuO,EAAAC,IAAA74d,EAAAzuB,KAAA,CACAsc,KAAAgre,EAAAC,UACAnxe,OAAAkxe,EAAAvuO,eAGAmvO,GAAA,IAAAz4a,EAAAznE,MAAAwyf,YACA,QAAA/tf,EAAA+gf,EAA6B/gf,EAAA8gf,EAAkB9gf,IAAA,CAC/C,IAAA6P,EAAA4D,EAAAwlM,WAAAj5M,EAAA,GACAq2L,EAAAxmL,EAAA6qe;AACA,SAAA7qe,EAAAE,WAAAsmL,EAAA,CACA0qT,EAAA/gf;AACA,KACA,CACA,IAAAq2L,KAAArsL,KAAA,KACA,CAEA,IA+BArK,EA/BA+wf,EAAA1tb,EAAAp1D,MAAA0I,IACA0uH,EAAAhiE,EAAAslU,SAAA,cAAAm2E,EAAAj/E,UAAA5J,WAAA5yT,EAAAp1D,MAAAgmG,QACAmiR,EAAA26H,EAAA/vb,QAAAznD,GACA4yX,EAAA,KACAx1X,EAAA0uH,EAAAnjI,MAAA4R,EAAA,CACAygX,QAAA6B,EAAAtiX,OACAgjd,SAAA1gG,EAAAtiX,OAAA4xX,eAAAtP,EAAArhY,SACAkle,WACA1gd,KAAA4ne,EACA1oc,GAAA2oc,EACA95G,mBAAA,OAAAlR,EAAAtiX,OAAAhkB,KAAA8kY,YAAA,OACAmiG,cAAA10c,EACAw1c,cAmBA73d,EAnBAiyK,EAoBA,SAAA+nN,GACA,IAAAtjM,EAAAsjM,EAAA+gH;AACA,GAAArkT,EACA,OAAAA,EAAAs9L,UAAAh0X;AACM,SAAAg6X,EAAA5pX,UAAA4pX,EAAAxgY,WAAA,CACN,GAAAwif,GAAA,aAAA3qe,KAAA2oX,EAAAxgY,WAAA4W,UAAA,CACA,IAAAyK,EAAAlqB,SAAAkvE,cAAA;AAEA,OADAhlD,EAAAnqB,YAAAC,SAAAkvE,cAAA,OACA,CACAhlD,OAEA,CAAQ,GAAAm/W,EAAAxgY,WAAAozQ,WAAAotH,GAAAgiH,GAAA,gBAAA3qe,KAAA2oX,EAAAxgY,WAAA4W,UACR,OACA0sF,UAGA,MAAM,UAAAk9R,EAAA5pX,UAAA4pX,EAAAl/X,aAAA,oBACN,OACAgiG;AAGA,WACA,GAzCAl4E,QAAAwxW;AAEA,GAAA/zW,GAAA,MAAAA,EAAA,GAAAikB,IAAA,CACA,IAAAw0d,EAAAz4e,EAAA,GAAAikB,IACA86B,EAAA/+C,EAAA,IAAAA,EAAA,GAAAikB;AACA,MAAA86B,MAAA05b,GACA3uH,EAAA,CACA2R,OAAAg9G,EAAAvhf,EACA6nD,OAAA7nD,EAEA,CACA,OACA5C,MACAw1X,MACA5yX,OACAk/B,KAEA,CA7DA,CA8GA4qB,EAAA9pD,EAAAk/B,EAAAw5H,GACAt7J,EAAA0sD,EAAAp1D,MAAA0I,IACAyoO,EAAAzoO,EAAAvqB,MAAA8V,EAAAqX,KAAArX,EAAAu2C;AAEA,IAAA4qB,EAAAznE,MAAAwyf,aAAAzod,KAAAmT,MAAA,IAAAuqB,EAAAznE,MAAAyyf,iBACAoM,EAAAp3b,EAAAp1D,MAAA8xF,UAAAtnD,GACAiid,EAAA,QAEAD,EAAAp3b,EAAAp1D,MAAA8xF,UAAAxmF,KACAmhf,EAAA,SAEAr3b,EAAAznE,MAAAwyf,YAAA;AACA,IAAAvzZ,EAkLA,SAAA/tG,EAAAma,EAAAq/B,EAAAm0d,EAAAC,GACA,IAAAxvf,EAAApe,EAAAguY,cAAA7zX,EAAAq/B,GACAy0d,EAAAz0d,EAAAx5C,EAAAud,KACA2wf,EAAA10d,EAAAr/B,EAAAoD;AACA,SAAAa,EAAA;AACA,IAAA+vf,EAAAnugB,EAAAiuY,YAAA9zX,EAAA8zf,EAAAC,GACAE,EAAAD,EAAAnugB,EACAqugB,EAAAF,EAAAh0f;AAgBA,MAfA,OAAAyzf,IAEAD,GAAAS,EADAnsgB,KAAA+b,IAAA,EAAAI,EAAAnc,KAAA8b,IAAAqwf,EAAAC,IACAjwf,GAEAgwf,EAAAhwf,GAAA6vf,EAAAC,GAGAG,GADAjwf,GADAuvf,GAAAvvf,GAAAuvf,GAAAS,EAAAhwf,EAAAuvf,EAAA,IAEAU,EAAAD,GACAA,EAAAhwf,GACIiwf,EAAAjwf,IAGJgwf,GADAhwf,GADAuvf,GAAAvvf,GAAAuvf,GAAAU,EAAAjwf,EAAAuvf,EAAA,IAEAS,EAAAC,GACAA,EAAAjwf,GAEA,CACAA,QACAgwf,OACAC,OAEA,CA5BA,CAlLA/7Q,EAAA3xK,QAAAvrE,EAAAyU,IAAA82D,QAAAvrE,EAAAqX,KAAAkhf,EAAAC;AAEA,GADA7/Z,GAAAx3B,EAAAznE,MAAAuzf,kBACAjT,GAAA74a,EAAAznE,MAAA6yf,aAAA9od,KAAAmT,MAAA,KAAAqjc,IAAAlqU,EAAAxiK,KAAA,SAAAjjB,GACA,UAAAA,EAAA42F,WAAAgnT,GAAA/4X,KAAA7kB,EAAA4jB,SACA,MAAGyqF,KAAAqga,MAAArga,EAAAsga,OAAA93b,EAAAslU,SAAA,yBAAAzwY,GACH,OAAAA,EAAAmrE,EAAAg4a,EAAA,YACA,GACAh4a,EAAAznE,MAAA6yf,aAAA;IALA,CAQA,IAAA5zZ,EAAA,CACA,KAAAq9Z,GAAA/rH,aAAA4yE,EAAAjgF,gBAAAqN,EAAA7iT,OAAA6iT,EAAA7J,MAAAoI,WAAAyB,EAAA7F,WAAAjjU,EAAA2zT,WAAA90X,EAAAiqY,KAAAjqY,EAAAiqY,IAAA2R,QAAA57Y,EAAAiqY,IAAA/qU,KAMM,CACN,GAAAl/D,EAAAiqY,IAAA,CACA,IAAAivH,EAAA7B,GAAAl2b,IAAAp1D,MAAA0I,IAAAzU,EAAAiqY;AACA,GAAAivH,MAAAr7Q,GAAA18K,EAAAp1D,MAAA8xF,WAAA,CACA,IAAAu8X,EAAAj5Z,EAAAp1D,MAAAg9B,GAAAq2V,aAAA85H;AACApM,GAAA1yB,EAAAjlG,QAAA,cAAA23H,GACA3rb,EAAAyuM,SAAAwqN,EACA,CACA,CACA,MACA,CAfAzhY,EAAA,CACA3vF,MAAAihY,EAAA5yX,KACA2hf,KAAA/uH,EAAA1zV,GACA0id,KAAAhvH,EAAA1zV,GAaA,CACA4qB,EAAAp1D,MAAA8xF,UAAAxmF,KAAA8pD,EAAAp1D,MAAA8xF,UAAAtnD,IAAAoiD,EAAA3vF,OAAA2vF,EAAAsga,MAAA93b,EAAAp1D,MAAA8xF,qBAAAg/W,EAAAjgF,gBACAjkS,EAAA3vF,MAAAm4D,EAAAp1D,MAAA8xF,UAAAxmF,MAAAshF,EAAA3vF,OAAAm4D,EAAAp1D,MAAA8xF,UAAAxmF,KAAA,GAAA8pD,EAAAp1D,MAAA8xF,UAAAxmF,MAAArX,EAAAqX,KACAshF,EAAA3vF,MAAAm4D,EAAAp1D,MAAA8xF,UAAAxmF,KACMshF,EAAAqga,KAAA73b,EAAAp1D,MAAA8xF,UAAAtnD,IAAAoiD,EAAAqga,MAAA73b,EAAAp1D,MAAA8xF,UAAAtnD,GAAA,GAAA4qB,EAAAp1D,MAAA8xF,UAAAtnD,IAAAv2C,EAAAu2C,KACNoiD,EAAAsga,MAAA93b,EAAAp1D,MAAA8xF,UAAAtnD,GAAAoiD,EAAAqga,KACArga,EAAAqga,KAAA73b,EAAAp1D,MAAA8xF,UAAAtnD,KAGA/uC,GAAAgye,GAAA,IAAA7gZ,EAAAsga,MAAAtga,EAAA3vF,MAAA,GAAA2vF,EAAAqga,MAAArga,EAAA3vF,OAAA2vF,EAAA3vF,MAAAhJ,EAAAqX,MAAA,MAAArX,EAAAyU,IAAAmjX,YAAAj/R,EAAA3vF,MAAAhJ,EAAAqX,KAAA,EAAAshF,EAAA3vF,MAAAhJ,EAAAqX,KAAA,KACAshF,EAAA3vF,QACA2vF,EAAAqga,OACArga,EAAAsga;AAEA,IAAA/kI,EAAAl0X,EAAAyU,IAAAw3c,eAAAtzX,EAAA3vF,MAAAhJ,EAAAqX,MACAwkX,EAAA77X,EAAAyU,IAAAw3c,eAAAtzX,EAAAsga,KAAAj5f,EAAAqX,MACA8hf,EAAA1kf,EAAAqqD,QAAA65B,EAAA3vF,OACAowf,EAAAllI,EAAAsU,WAAA3M,IAAA3H,EAAAtiX,OAAAm2X,eAAAoxH,EAAAlwf,OAAA0vF,EAAAqga;AACA,IAAAhf,GAAA74a,EAAAznE,MAAA6yf,aAAA9od,KAAAmT,MAAA,OAAAwid,GAAArpV,EAAAxiK,KAAA,SAAAjjB,GACA,aAAAA,EAAA4jB,UAAA,KAAA5jB,EAAA4jB,QACA,MAAGkrf,GAAAllI,EAAA9vV,IAAApkC,EAAAyU,IAAA82D,QAAApjE,QAAA+rX,EAAAsU,WAAA3M,KAAA3H,EAAAtiX,OAAAm2X,gBAAA7T,EAAA9vV,IAAAy3V,EAAAz3V,MAAA,KAAAj1B,KAAAnP,EAAAyU,IAAAmjX,YAAA1D,EAAA9vV,IAAAy3V,EAAAz3V,IAAA,UAAA+8B,EAAAslU,SAAA,yBAAAzwY,GACH,OAAAA,EAAAmrE,EAAAg4a,EAAA,YACA,GACAh4a,EAAAznE,MAAA6yf,aAAA;KAGA,GAAAprb,EAAAp1D,MAAA8xF,UAAA+9S,OAAAjjT,EAAA3vF,OA+FA,SAAAiqU,EAAAjqU,EAAAC,EAAAowf,EAAAC,GACA,GAAArwf,EAAAD,GAAAswf,EAAAl1d,IAAAi1d,EAAAj1d,KAAAmzd,GAAA8B,MAAA,GAAAC,EAAAl1d,IAAA;AACA,IAAAixW,EAAApiE,EAAAn0Q,QAAA91D;AACA,IAAAqwf,EAAAznf,OAAA2lX,YAAA,CACA,IAAAxwN,EAAAsuO,EAAArgB;AACA,aAAAjuN,GAAA99J,GAAAD,EAAA+9J,EAAAy1N,QACA,CACA,GAAA6Y,EAAA/gB,aAAA+gB,EAAAzjY,OAAA25D,QAAApjE,OAAAktY,EAAAzjY,OAAA2lX,YAAA;AACA,IAAAzsT,EAAAmoQ,EAAAn0Q,QAAAy4b,GAAAliH,MAAA;AACA,SAAAvqU,EAAAl5D,OAAA2lX,aAAAzsT,EAAA1mC,IAAAn7B,GAAAsuf,GAAAzsb,MAAA,GAAA7hE,IACAowf,EAAAznf,OAAA25D,QAAAq4T,IAAAy1H,EAAA/kI,cAAAz2I,GAAA/yK,EAAAl5D,OAAA25D,QACA,CAXA,CA/FA92D,EAAAkkF,EAAA3vF,MAAA2vF,EAAAqga,KAAA9kI,EAAA2H,IAAA16T,EAAAslU,SAAA,yBAAAzwY,GACA,OAAAA,EAAAmrE,EAAAg4a,EAAA,eACA,GACAc,GAAAL,GAAAz4a,EAAAqmb,YAAA+R;IAHA,CAMA3f,GAAAjhZ,EAAAsga,MAAAtga,EAAA3vF,QAAAm4D,EAAAznE,MAAAizf,iBAAAlpd,KAAAmT,OACAqjc,IAAAmf,GAAAllI,EAAAlrX,SAAA6yX,EAAA7yX,SAAA,GAAA6yX,EAAAvH,cAAAJ,EAAAwM,OAAA7E,EAAA6E,OAAA1gY,EAAAiqY,KAAAjqY,EAAAiqY,IAAA2R,QAAA57Y,EAAAiqY,IAAA/qU,MAAAl/D,EAAAiqY,IAAA/qU,MAAAy5B,EAAAqga,OACArga,EAAAsga,MAAA,EACAp9H,EAAA77X,EAAAyU,IAAAw3c,eAAAtzX,EAAAsga,KAAAj5f,EAAAqX,MACApe,WAAA,WACAkoE,EAAAslU,SAAA,yBAAAzwY,GACA,OAAAA,EAAAmrE,EAAAg4a,EAAA,YACA,EACA,EAAK;AAEL,IAWAqgB,EAXAC,EAAA9ga,EAAA3vF,MACA0wf,EAAA/ga,EAAAqga,KACAW,EAAA,SAAAlgP,GACA,IAAA1wO,EAAA0wO,GAAAt4M,EAAAp1D,MAAAg9B,GAAAx+B,QAAAkvf,EAAAC,EAAA15f,EAAAyU,IAAAvqB,MAAAyuG,EAAA3vF,MAAAhJ,EAAAqX,KAAAshF,EAAAsga,KAAAj5f,EAAAqX;AACA,GAAArX,EAAAiqY,IAAA,CACA,IAAA2vH,EAAAvC,GAAAl2b,EAAAp4B,EAAAt0B,IAAAzU,EAAAiqY;AACA2vH,KAAAhgB,GAAAz4a,EAAA2zT,WAAA8kI,EAAAxya,QAAAuR,EAAA3vF,OAAA2vF,EAAAsga,MAAA93b,EAAAznE,MAAAizf,iBAAAlpd,KAAAmT,MAAA,OAAAgjd,EAAA16b,MAAAu6b,GAAAG,EAAA16b,MAAAn2B,EAAAogI,QAAAz7J,IAAAgsf,GAAA,IAAAlyf,GAAAoyf,EAAAxya,OAAAwya,EAAA16b,MAAAu6b,IAAA1wd,EAAAq2V,aAAAw6H,EACA,CAEA,OADA9M,GAAA/jd,EAAAosV,QAAA,cAAA23H,GACA/jd,EAAAs7V,gBACA;AAEA,GAAA+0H,EACA,GAAAllI,EAAA9vV,KAAAy3V,EAAAz3V,IAAA,CACA58B,GAAAgye,GAAA,OAAAtlH,EAAAI,eACAnzT,EAAAqmb,YAAA+R,2BACAtggB,WAAA,WACA,OAAAmuf,GAAAjmb,EACA,EAAS;AAET,IAAA04b,EAAAF,EAAAx4b,EAAAp1D,MAAAg9B,GAAAqmC,OAAAqqb,EAAAC,IACAlnI,EAAA/9W,EAAAqqD,QAAA65B,EAAA3vF,OAAA0yd,YAAAjnd,EAAAqqD,QAAA65B,EAAAqga;AACAxmI,GAAAqnI,EAAAt3H,YAAA/P,GACArxT,EAAAyuM,SAAAiqP,EACA,MAAM,GAAAlha,EAAAqga,MAAArga,EAAAsga,OAAAO,EAuBN,SAAAhpW,EAAA+pG,GAQA,IAPA,IAIA3sQ,EACAu6G,EACA1tG,EANAq/f,EAAAtpW,EAAAjgK,WAAAiiY,MACAunI,EAAAx/P,EAAAhqQ,WAAAiiY,MACA10X,EAAAg8f,EACA/vV,EAAAgwV,EAIA3vgB,EAAA,EAAkBA,EAAA2vgB,EAAA1vgB,OAAsBD,IAAA0T,EAAAi8f,EAAA3vgB,GAAAwie,cAAA9ud;AACxC,QAAAk8f,EAAA,EAAqBA,EAAAF,EAAAzvgB,OAAwB2vgB,IAAAjwV,EAAA+vV,EAAAE,GAAAptC,cAAA7iT;AAC7C,MAAAjsK,EAAAzT,QAAA,GAAA0/K,EAAA1/K,OACA89G,EAAArqG,EAAA,GACAlQ,EAAA,MACA6M,EAAA,SAAAuT,GACA,OAAAA,EAAAm6F,OAAA+lX,SAAAlgd,EAAAwkX,OACA;IACI,OAAA10X,EAAAzT,QAAA,GAAA0/K,EAAA1/K,OAOJ;AANA89G,EAAA4hE,EAAA,GACAn8K,EAAA,SACA6M,EAAA,SAAAuT,GACA,OAAAA,EAAAm6F,OAAAykX,cAAA5+c,EAAAwkX,OACA,CAGA,CAEA,IADA,IAAA/8B,EAAA,GACAwkK,EAAA,EAAqBA,EAAA1/P,EAAAkiI,WAAwBw9H,IAAAxkK,EAAA/jW,KAAA+I,EAAA8/P,EAAA3pG,MAAAqpW;AAC7C,GAAAr9C,EAAA90K,SAAAzwR,KAAAo+U,GAAA53G,GAAArtF,GAAA,OACAroD,OACAv6G,OAEA,CA/BA,CAvBMsmY,EAAAtiX,OAAA25D,QAAAq4T,IAAA1P,EAAAI,aAAAuH,EAAAvH,cAAA6kI,EAAAvnf,OAAA25D,QAAAq4T,IAAAu1H,EAAA7kI,aAAA37R,EAAAqga,KAAAG,EAAAnwf,WAAA,CACN,IAAAkxf,EAAAP,EAAAx4b,EAAAp1D,MAAAg9B;AACA,OAAAywd,EAAA5rgB,KAAAssgB,EAAAjzH,QAAAwyH,EAAAC,EAAAF,EAAArxZ,MAAgF+xZ,EAAA3jI,WAAAkjI,EAAAC,EAAAF,EAAArxZ,MAChFhnC,EAAAyuM,SAAAsqP,EACA,MAAM,GAAAhmI,EAAAtiX,OAAAg/I,MAAAsjO,EAAArhY,SAAA4hY,QAAAP,EAAArhY,SAAAgpY,EAAAhpY,SAAAgpY,EAAAi8C,WAAA,MACN,IAAA3qb,EAAA+mY,EAAAtiX,OAAAgmX,YAAA1D,EAAAI,aAAAuH,EAAAvH,cACA6U,EAAA,WACA,OAAAwwH,EAAAx4b,EAAAp1D,MAAAg9B,GAAA0tV,WAAAtpY,EAAAssgB,EAAAC,GACA;AACAv4b,EAAAslU,SAAA,2BAAAzwY,GACA,OAAAA,EAAAmrE,EAAAs4b,EAAAC,EAAAvsgB,EAAAg8Y,EACA,IAAOhoU,EAAAyuM,SAAAu5H,IACP,MACAhoU,EAAAyuM,SAAA+pP;KAGAx4b,EAAAyuM,SAAA+pP,IAnDA,CAlDA,CA3BA,CAkIA,CAlJA,CAiRA/B,EAAAvgf,EAAAk/B,EAAAy/c,EAAAl4f,EACA,GACAhU,KAAA09f,YAAAx+e,QA3kEA,SAAAm4D,GACA,IAAAigZ,EAAA,WACA,IAAA32T,EAAAizC,GAAAlqM;AACA2tE,EAAA22T,IAAA7/W,iBAAAzkB,EAAA2tE,EAAAznE,MAAAwzf,cAAA15f,GAAA,SAAAA,IAsCA,SAAA2tE,EAAA3tE,GACA,IAAAA,EAAAmtF,QAAA;AACA,GAAAntF,EAAAu9K,iBAAA;AACA,QAAA/iK,EAAAxa,EAAAF,OAAgC0a,GAAAmzD,EAAA22T,IAAkB9pX,IAAA1W,WAAA,IAAA0W,GAAA,IAAAA,EAAAkzE,UAAAlzE,EAAA6qe,YAAA7qe,EAAA6qe,WAAApoG,UAAAj9Y,GAAA;AAClD,QACA,CALA,CArCA2tE,EAAA3tE,IAAA85f,GAAAnsb,EAAA3tE,KAAA2tE,EAAAi1P,UAAA5iU,EAAA5F,QAAAm+f,IAAAthW,EAAAtpF,EAAA3tE,EACA,EAAKw4f,GAAAx4f,GAAA,CACLy9K,iBACM11J,EACN;AACA,QAAA/nB,KAAAkqM,GACA0jR;AAEA04B,GAAA34a,EAAA22T,IAAA7/W,iBAAA,mBACA,WACA,GACAm1e,GAAAjsb,EACA,CAhBA,CA4kEAr3E,MACAA,KAAAqwgB,mBACA,CAoUA,OAnUAn9X,EAAAyyQ,EAAA,EACA1sX,IAAA,YACA3M,IAAA,WACA,OAAAtsB,KAAA4P,MAAAo7X,SACA,GACG,CACH/xW,IAAA,QACA3M,IAAA,WACA,GAAAtsB,KAAAkpV,OAAAjnU,OAAAjiB,KAAAiiB,MAAA,CACA,IAAAwuP,EAAAzwQ,KAAAkpV;AAEA,QAAA9gV,KADApI,KAAAkpV,OAAA,GACAz4E,EAAAzwQ,KAAAkpV,OAAA9gV,GAAAqoQ,EAAAroQ;AACApI,KAAAkpV,OAAAjnU,MAAAjiB,KAAAiiB,KACA,CACA,OAAAjiB,KAAAkpV,MACA,GACG,CACHjwT,IAAA,SACAt2B,MAAA,SAAA2nD,GACAA,EAAAuhV,iBAAA7rY,KAAAkpV,OAAA2iD,iBAAAy3H,GAAAtjgB;AACA,IAAAkzU,EAAAlzU,KAAAkpV;AACAlpV,KAAAkpV,OAAA5+R,EACAA,EAAA8/Q,UACA9/Q,EAAA8/Q,QAAA5vT,QAAA4zf,IACApugB,KAAAmugB,cAAA7jd,EAAA8/Q,SAEApqU,KAAAswgB,iBAAAhmd,EAAAroC,MAAAixT,EACA,GACG,CACHj6S,IAAA,WACAt2B,MAAA,SAAA2nD,GACA,IAAAqhT,EAAA;AACA,QAAAvjW,KAAApI,KAAAkpV,OAAAyiB,EAAAvjW,GAAApI,KAAAkpV,OAAA9gV;AAEA,QAAAmogB,KADA5kK,EAAA1pV,MAAAjiB,KAAAiiB,MACAqoC,EAAAqhT,EAAA4kK,GAAAjmd,EAAAimd;AACAvwgB,KAAA2Q,OAAAg7V,EACA,GACG,CACH1yU,IAAA,cACAt2B,MAAA,SAAAsf,GACAjiB,KAAAswgB,iBAAAruf,EAAAjiB,KAAAkpV,OACA,GACG,CACHjwT,IAAA,mBACAt2B,MAAA,SAAAsf,EAAAixT,GACA,IAAA7yS,EACAowO,EAAAzwQ,KAAAiiB,MACAuuf,KACAC;AACAxuf,EAAAuiX,aAAAxkY,KAAAgrY,YACA26H,GAAA3lgB,MACAywgB,MAEAzwgB,KAAAiiB;AACA,IAAAyuf,EAAAjgQ,EAAA25D,SAAAnoT,EAAAmoT,SAAApqU,KAAAkpV,OAAA9e,SAAA8I,EAAA9I;AACA,GAAAsmM,GAAA1wgB,KAAAkpV,OAAA9e,SAAA8I,EAAA9I,SAAApqU,KAAAkpV,OAAAunD,WAAAv9D,EAAAu9D,UAAA,CACA,IAAAA,EAAA89H,GAAAvugB,gBAiUAc,EAAAma,GACA,IAAA01f,EAAA,EACAC,EAAA;AACA,QAAAC,KAAA/vgB,EAAA,CACA,GAAAA,EAAA+vgB,IAAA51f,EAAA41f,GAAA;AACAF,GACA,CACA,QAAAnhgB,KAAAyL,EAAA21f;AACA,OAAAD,GAAAC,CACA,EA1UA5wgB,CACAywY,EAAAzwY,KAAAywY,aACAzwY,KAAAywY,YACA+/H,KAEA,EACAE,GAAAx9L,EAAA24D,iBAAA7rY,KAAAkpV,OAAA2iD,kBACAy3H,GAAAtjgB,MAEAA,KAAAssU,SAAA+hM,GAAArugB,MACAsugB,GAAAtugB;AACA,IAAAo0f,EAAA0W,GAAA9qgB,MACAm0f,EAAAqa,GAAAxugB,MACAkqB,EAAAumP,EAAA25D,SAAAnoT,EAAAmoT,SAAA35D,EAAA9lP,IAAAopO,GAAA9xO,EAAA0I,KAAA1I,EAAA2qf,kBAAAn8P,EAAAm8P,kBAAA,kCACAkE,EAAAN,IAAAxwgB,KAAAsmZ,QAAAg2G,YAAAr6e,EAAA0I,IAAAwpe,EAAAC;CACA0c,GAAA7uf,EAAA8xF,UAAAggJ,GAAA0c,EAAA18J,aAAA08Z;AACA,IA1vFAp5b,EACAo+a,EACAvG,EA4hGA6hB,EAAAC,EACAp6H,EAhjKAp1X,EACAyvf,EACAC,EAEAC,EAuwJAC,EAAA,YAAAlnf,GAAAumf,GAAA,MAAAzwgB,KAAAguY,IAAArgY,MAAA0jgB,gBA5yJA,SAAAh6b,GAIA,IAHA,IAEA45b,EAAAC,EAFA7vf,EAAAg2D,EAAA22T,IAAA5gY,wBACA2pa,EAAAh0a,KAAA+b,IAAA,EAAAuC,EAAAxT,KAEA7G,GAAAqa,EAAAzT,KAAAyT,EAAArT,OAAA,EAAAwD,EAAAula,EAAA,EAA6Dvla,EAAAzO,KAAA8b,IAAA+uK,YAAAvsK,EAAAvT,QAAwC0D,GAAA,GACrG,IAAAw8X,EAAA32T,EAAA7oD,KAAAmnI,iBAAA3uJ,EAAAwK;AACA,GAAAw8X,MAAA32T,EAAA22T,KAAA32T,EAAA22T,IAAAx3X,SAAAw3X,GAAA,CACA,IAAAsjI,EAAAtjI,EAAA5gY;AACA,GAAAkkgB,EAAAzjgB,KAAAkpa,EAAA,IACAk6F,EAAAjjI,EACAkjI,EAAAI,EAAAzjgB;AACA,KACA,CANA,CAOA,CACA,OACAojgB,SACAC,SACAjnd,MAAAknc,GAAA95a,EAAA22T,KAEA,CAnBA,CA4yJAhuY;AACA,GAAAywgB,EAAA,CACAzwgB,KAAA09f,YAAAxzf;AACA,IAAAqngB,EAAAT,IAAApzf,GAAAoye,KAAA9vf,KAAAgrY,YAAAv6H,EAAA18J,UAAAzW,QAAAr7E,EAAA8xF,UAAAzW,QAiSAyza,EAjSAtgQ,EAAA18J,UAiSAi9Z,EAjSA/uf,EAAA8xF,UAkSA6iS,EAAA7zY,KAAA8b,IAAAkyf,EAAAz2H,QAAA67E,YAAA46C,EAAA37b,MAAA47b,EAAA12H,QAAA67E,YAAA66C,EAAA57b,OACA27b,EAAAz2H,QAAAp7X,MAAA03X,IAAAo6H,EAAA12H,QAAAp7X,MAAA03X;AAlSA,GAAAk6H,EAAA,CACA,IAAAU,EAAA1hB,EAAA9vf,KAAAw6f,YAAAx6f,KAAA41f,oBAAAzG,UAAA;AACAnvf,KAAAgrY,YAAAhrY,KAAA4P,MAAAwpf,gBArrDA,SAAA/hb,GACA,IAAA8oU,EAAA9oU,EAAAu+a;AACA,IAAAz1G,EAAAgvG,UAAA;AACA,IAAA7kH,EAxyGA,SAAApmX,EAAAlG,GACA,OAAS,CACT,MAAAkG,EAAAkzE,UAAAp5E,EAAA,OAAAkG;AACA,MAAAA,EAAAkzE,UAAAp5E,EAAA,GACA,YAAAkG,EAAA+xI,gBAAA;AAEAj4I,EAAA00X,EADAxuX,IAAAopM,WAAAtvM,EAAA,GAEA,KAAM,KAAAkG,EAAA1W,YAAAshf,EAAA5qe,GAIN;AAHAlG,EAAAswe,EAAApqe,GACAA,IAAA1W,UAGA,CACA,CACA,CAdA,CAwyGA2yY,EAAAgvG,UAAAhvG,EAAAx/H,aACA8wP,EA1xGA,SAAAvtf,EAAAlG,GACA,OAAS,CACT,MAAAkG,EAAAkzE,UAAAp5E,EAAAkG,EAAAuzE,UAAAl3F,OAAA,OAAA2jB;AACA,MAAAA,EAAAkzE,UAAAp5E,EAAAkG,EAAAopM,WAAA/sN,OAAA,CACA,YAAA2jB,EAAA+xI,gBAAA;AACA/xI,IAAAopM,WAAAtvM,GACAA,EAAA,CACA,KAAM,KAAAkG,EAAA1W,YAAAshf,EAAA5qe,GAIN;AAHAlG,EAAAswe,EAAApqe,GAAA,EACAA,IAAA1W,UAGA,CACA,CACA,CAdA,CA0xGA2yY,EAAAgvG,UAAAhvG,EAAAx/H;AACA,GAAA2pH,GAAAmnI,GAAAnnI,GAAAmnI,EAAA,CACA,IAAAC,EAAAD,EAAA1iB,WACA4iB,EAAAt6b,EAAAqmb,YAAAgO;AACA,GAAAphI,GAAAqnI,GAAAF,GAAAE,EAAA,OAAAA;AACA,IAAAD,MAAA/mI,OAAA8mI,EAAAh6a,WACA,OAAAg6a;AACM,GAAAp6b,EAAAznE,MAAAwpf,iBAAAqY,EAAA,CACN,IAAAG,EAAAtnI,EAAAykH;AACA,GAAA6iB,KAAAjnI,OAAAL,EAAA7yS,WAAA,OAAAg6a,CACA,CACA,CACA,OAAAnnI,GAAAmnI,CACA,CAjBA,CAqrDAzxgB,QACAwwgB,GAAAxwgB,KAAAsmZ,QAAA31Y,OAAAsR,EAAA0I,IAAAwpe,EAAAC,EAAAp0f,QACAA,KAAAsmZ,QAAAmzG,gBAAAtF,GACAn0f,KAAAsmZ,QAAAlpU,UACAp9E,KAAAsmZ,QAAA8zG,GAAAn4e,EAAA0I,IAAAwpe,EAAAC,EAAAp0f,KAAAguY,IAAAhuY,QAEAwxgB,GAAAxxgB,KAAAw6f,aAAAx6f,KAAAguY,IAAAx3X,SAAAxW,KAAAw6f,eAAA+W,KACA,CACA,IAAA/T,EAAAx9f,KAAA4P,MAAA4tf;AACA+T,KAAA/T,GAAAx9f,KAAA09f,YAAA9iM,iBAAA7mE,GAAA/zP,KAAA41f,uBAzwFAv+a,EAywFAr3E,KAxwFAy1f,EAAAp+a,EAAAivU,QAAA6sG,WAAA97a,EAAAp1D,MAAA8xF,UAAA+9S,OAAA,GACAo9F,EAAA73a,EAAAu+a,oBACAnH,EAAAgH,EAAAvxe,KAAAuxe,EAAAz3e,OAAAkxe,EAAAE,WAAAF,EAAAxuO,gBAswFA88O,EAAAG,kBACAL,GAAAt9f,KAAAuxgB,IAEAhU,GAAAv9f,KAAAiiB,EAAA8xF,WACA/zG,KAAA09f,YAAAE,mBAEA59f,KAAA09f,YAAAx+e,OACA,CACAlf,KAAAqwgB,kBAAA5/P,IACA,QAAApwO,EAAArgC,KAAAmU,gBAAA,IAAAksB,OAAA,EAAAA,EAAAnc,QAAAusP,EAAA9lP,IAAAopO,GAAA9xO,EAAA0I,MAAA3qB,KAAA6xgB,kBAAA7xgB,KAAAmU,SAAAs8P,GACA,SAAAvmP,EACAlqB,KAAAguY,IAAA/jY,UAAA,EACQ,gBAAAigB,EACRlqB,KAAA4sgB,oBACQwE,IAvyJRH,GADAzvf,EAyyJA4vf,GAxyJAH,OACAC,EAAA1vf,EAAA0vf,OAGA9f,GAFA5ve,EAAAyoC,MAEA,IADAknd,EAAAF,IAAA7jgB,wBAAAS,IAAA,GACA,EAAAsjgB,EAAAD,GAsyJA,GACG,CACHj4e,IAAA,oBACAt2B,MAAA,WACA,IAAAmvgB,EAAA9xgB,KACAywf,EAAAzwf,KAAA41f,oBAAAzG;AACA,GAAAsB,GAAAzwf,KAAAguY,IAAAx3X,SAAA,GAAAi6e,EAAAr5Z,SAAAq5Z,IAAAjjf,YAAqG,GAAAxN,KAAA28Y,SAAA,mCAAAzwY,GACrG,OAAAA,EAAA4lgB,EACA,SAAW,GAAA9xgB,KAAAiiB,MAAA8xF,qBAAAg/W,EAAAj0E,cAAA,CACX,IAAAt1Y,EAAAxJ,KAAAsmZ,QAAAyrH,YAAA/xgB,KAAAiiB,MAAA8xF,UAAAxmF;AACA,GAAA/jB,EAAA4tF,UAAAo5Z,GAAAxwf,KAAAwJ,EAAA4D,wBAAAqjf,EACA,MACAD,GAAAxwf,UAAAirZ,YAAAjrZ,KAAAiiB,MAAA8xF,UAAA3+B,KAAA,GAAAq7a,EAEA,GACG,CACHx3d,IAAA,qBACAt2B,MAAA,WAEA,IADA,IAAA00E,EACAA,EAAAr3E,KAAAkugB,YAAAv8W,OAAAt6E,EAAA+F,SAAA/F,EAAA+F,SACA,GACG,CACHnkD,IAAA,oBACAt2B,MAAA,SAAA+iX,GACA,GAAAA,KAAAt7C,SAAApqU,KAAAiiB,MAAAmoT,SAAApqU,KAAAmugB,eAAAnugB,KAAAiugB,kBAYA,QAAA+D,EAAA,EAA2BA,EAAAhygB,KAAAkugB,YAAA3tgB,OAAgCyxgB,IAAA,CAC3D,IAAAC,EAAAjygB,KAAAkugB,YAAA8D;AACAC,EAAAthgB,QAAAshgB,EAAAthgB,OAAA3Q,KAAA0lX,EACA,KAfA,CACA1lX,KAAAiugB,kBAAAjugB,KAAAmugB,cACAnugB,KAAAkygB;AACA,QAAA5xgB,EAAA,EAAwBA,EAAAN,KAAAmugB,cAAA5tgB,OAA+BD,IAAA,CACvD,IAAAyqY,EAAA/qY,KAAAmugB,cAAA7tgB;AACAyqY,EAAAhhC,KAAA1yR,MAAAr3E,KAAAkugB,YAAAtmgB,KAAAmjY,EAAAhhC,KAAA1yR,KAAAr3E,MACA,CACA,QAAAmygB,EAAA,EAA2BA,EAAAnygB,KAAAiiB,MAAAmoT,QAAA7pU,OAAkC4xgB,IAAA,CAC7D,IAAAC,EAAApygB,KAAAiiB,MAAAmoT,QAAA+nM;AACAC,EAAAroK,KAAA1yR,MAAAr3E,KAAAkugB,YAAAtmgB,KAAAwqgB,EAAAroK,KAAA1yR,KAAAr3E,MACA,CACA,CAMA,GACG,CACHi5B,IAAA,oBACAt2B,MAAA,SAAAwR,EAAAs8P,GACA,IAAA0vI,EAAAhsY,EAAA+P,KACAg2M,GAAA;AACA,GAAAimL,EAAA5yX,KAAAvtB,KAAAiiB,MAAA0I,IAAA82D,QAAApjE,MAAAre,KAAAiiB,MAAA0I,IAAAkuX,OAAAsH,EAAA5yX,OAAA4yX,EAAAj8X,KACAg2M,EAAAimL,EAAA5yX;IACQ,CACR,IAAA8kf,EAAAlyH,EAAA5yX,MAAAvtB,KAAAiiB,MAAA0I,IAAA82D,QAAApjE,KAAAoyP,EAAA9lP,IAAA82D,QAAApjE,OACAg0f,EAAA,GAAAA,EAAArygB,KAAAiiB,MAAA0I,IAAA82D,QAAApjE,MAAAre,KAAAiiB,MAAA0I,IAAAkuX,OAAAw5H,KACAlyH,EAAAj8X,OAAAg2M,EAAAm4S,EACA,CACArygB,KAAAmU,SAAA,IAAA4yf,GAAA5yf,EAAA/T,MAAA+T,EAAA+nP,KAAAhiC,EAAA,OAAAzoM,EAAAshc,EAAAj0E,cAAAv6Y,OAAAvE,KAAAiiB,MAAA0I,IAAAuvM,GACA,GACG,CACHjhM,IAAA,WACAt2B,MAAA,SAAAswU,EAAA/mU,GACA,IACAvJ,EADAuoL,EAAAlrL,KAAAkpV,QAAAlpV,KAAAkpV,OAAAjW;AAEA,SAAA/nJ,IAAAvoL,EAAAuJ,IAAAg/K,MAAA,OAAAvoL;AACA,QAAArC,EAAA,EAAsBA,EAAAN,KAAAmugB,cAAA5tgB,OAA+BD,IAAA,CACrD,IAAAyia,EAAA/ia,KAAAmugB,cAAA7tgB,GAAAgqD,MAAA2oR;AACA,SAAA8vF,IAAApga,EAAAuJ,IAAA62Z,MAAA,OAAApga,CACA,CACA,IAAAynU,EAAApqU,KAAAiiB,MAAAmoT;AACA,GAAAA,EAAA,QAAAkoM,EAAA,EAAsCA,EAAAloM,EAAA7pU,OAAuB+xgB,IAAA,CAC7D,IAAAtqC,EAAA59J,EAAAkoM,GAAAhod,MAAA2oR;AACA,SAAA+0J,IAAArle,EAAAuJ,IAAA87d,MAAA,OAAArle,CACA,CACA,GACG,CACHs2B,IAAA,WACAt2B,MAAA,WACA,GAAA+a,EAAA,CACA,IAAAwG,EAAAlkB,KAAAwuB,KAAAxf;AACA,GAAAkV,GAAAlkB,KAAAguY,IAAA;AACA,IAAA9pX,IAAAlkB,KAAAguY,IAAAx3X,SAAA0N,GAAA;AACA,KAAAA,GAAAlkB,KAAAguY,KAAA9pX,GAAAlkB,KAAAguY,IAAAx3X,SAAA0N,IAAA,CACA,YAAAA,EAAA+xI,gBAAA;AACA/xI,IAAAta,aACA,CACA,QACA,CACA,OAAA5J,KAAAwuB,KAAAxf,eAAAhP,KAAAguY,GACA,GACG,CACH/0W,IAAA,QACAt2B,MAAA,WACA3C,KAAA09f,YAAAxzf,OACAlK,KAAAssU,UAp3JA,SAAA0hE,GACA,GAAAA,EAAAukI,UAAA,OAAAvkI,EAAAukI;AACA,GAAAhhB,GAAA,OAAAvjH,EAAA38X,MAAAkgf;AACA,IAAA/lH,EAAA2lH,GAAAnjH;AACAA,EAAA38X,MAAA,MAAAkgf,GAAA,CACA,iBAAA5qU,GAIA,OAHA4qU,GAAA,CACA5qU,mBAAA,CAGA,QACIl1J,GACJ8/d,KACAA,MACAH,GAAA5lH,EAAA,GAEA,CAhBA,CAo3JAxrY,KAAAguY,KACAsvH,GAAAt9f,MACAA,KAAA09f,YAAAx+e,OACA,GACG,CACH+Z,IAAA,OACA3M,IAAA,WACA,IAAAkmf,EAAAxygB,KACAw0J,EAAAx0J,KAAA+tgB;AACA,SAAAv5W,EAYA,IAXA,IAUAi+W,EAVAlkC,EAAA,SAAA78b,GACA,MAAAA,EAAA0lD,UAAA,IAAA1lD,EAAA0lD,UAAA1lD,EAAAvqB,KAIA,OAHAuqB,EAAA+jD,eAAA1tE,OAAAC,eAAA0pB,GAAA+jD,aAAA,WACA,OAAA/jD,EAAAltB,cAAAixE,cACA,GACA,CACAnkF,EAAAkhgB,EAAAzE,MAAAr8d,EAGA,EAEAA,EAAA1xC,KAAAguY,IAAAxgY,WAA+CkkC,EAAQA,IAAAlkC,WAEvD,GADAilgB,EAAAlkC,EAAA78b,GACA,OAAA+ge,EAAAnhgB;AAGA,OAAAkjJ,GAAA7vJ,QACA,GACG,CACHs0B,IAAA,aACAt2B,MAAA,WACA3C,KAAA+tgB,MAAA,IACA,GACG,CACH90e,IAAA,cACAt2B,MAAA,SAAAof,GACA,OAAAowe,GAAAnyf,KAAA+hB,EACA,GACG,CACHkX,IAAA,cACAt2B,MAAA,SAAA23C,GAEA,OAAA24c,GAAAjzf,KAAAs6C,EADA1nC,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,KAEA,GACG,CACHqmB,IAAA,WACAt2B,MAAA,SAAA23C,GACA,IAAA17B,EAAAhM,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA;AACA,OAAA5S,KAAAsmZ,QAAA6sG,WAAA74c,EAAA17B,EACA,GACG,CACHqa,IAAA,UACAt2B,MAAA,SAAA23C,GACA,IAAAowJ,EAAA1qM,KAAAsmZ,QAAAuuG,OAAAv6c;AACA,OAAAowJ,IAAAiuR,QAAA,IACA,GACG,CACH1/b,IAAA,WACAt2B,MAAA,SAAAuhB,EAAAlG,GACA,IAAA82X,EAAAliY,UAAArS,OAAA,QAAAkxB,IAAA7e,UAAA,GAAAA,UAAA,MACA0nC,EAAAt6C,KAAAsmZ,QAAAusG,WAAA3ue,EAAAlG,EAAA82X;AACA,SAAAx6V,EAAA,UAAAtd,WAAA;AACA,OAAAsd,CACA,GACG,CACHrhB,IAAA,iBACAt2B,MAAA,SAAAe,EAAAue,GACA,OAvlJA,SAAAo1D,EAAAp1D,EAAAve,GACA,OAAAqwf,IAAA9xe,GAAA+xe,IAAAtwf,EAAA2oB,IACA0ne,GAAA9xe,EACA+xe,GAAAtwf,EACA2oB,GAAA,MAAA3oB,GAAA,QAAAA,EAjEA,SAAA2zE,EAAAp1D,EAAAve,GACA,IAAAy8Y,EAAAl+X,EAAA8xF,UACAs+R,EAAA,MAAA3uY,EAAAy8Y,EAAA/V,MAAA+V,EAAApO;AACA,OAAA6hH,GAAAv8a,EAAAp1D,EAAA,WAGA,IAFA,IACA+rX,EADA32T,EAAAivU,QAAA6sG,WAAA9gH,EAAA/3V,IAAA,MAAA52C,GAAA,KACAwgB,OACW,CACX,IAAAs5Z,EAAAnmW,EAAAivU,QAAAqsG,YAAA3kH;AACA,IAAAwvC,EAAA;AACA,GAAAA,EAAAt5Z,KAAAmlJ,QAAA,CACA2kO,EAAAwvC,EAAA12B,YAAA02B,EAAAxvC;AACA,KACA,CACAA,EAAAwvC,EAAAxvC,IAAAxgY,UACA,CAEA,IADA,IAAAuU,EAAAkxe,GAAA57a,EAAAg7T,EAAA/3V,IAAA,GACAwsH,EAAAknO,EAAAvnY,WAAqCqgK,EAAOA,IAAAj9E,YAAA,CAC5C,IAAA40V,OAAA;AACA,MAAA33Q,EAAA1vE,SAAAqnV,EAAA33Q,EAAAx5I;IAA8D,OAAAw5I,EAAA1vE,SAAmG;AAAnGqnV,EAAA+vE,EAAA1nV,EAAA,EAAAA,EAAArvE,UAAAl3F,QAAA+sB,gBAAmG,CACjK,QAAAhtB,EAAA,EAAsBA,EAAAm+a,EAAAl+a,OAAkBD,IAAA,CACxC,IAAAuiQ,EAAA47K,EAAAn+a;AACA,GAAAuiQ,EAAA/0P,OAAA+0P,EAAAh1P,IAAA,UAAAnK,EAAAqe,EAAAlU,IAAAg1P,EAAAh1P,IAAA,GAAAg1P,EAAA/0P,OAAAiU,EAAAlU,KAAAg1P,EAAA/0P,OAAAiU,EAAAjU,OAAA,GAAAiU,EAAAjU,OAAA+0P,EAAAh1P,MAAA,QACA,CACA,CACA,QACA,EACA,CA1BA,CAiEAwpE,EAAAp1D,EAAAve,GArCA,SAAA2zE,EAAAp1D,EAAAve,GACA,IAAA4yY,EAAAr0X,EAAA8xF,UAAAuiS;AACA,IAAAA,EAAAxuX,OAAA2lX,YAAA;AACA,IAAAzvX,EAAAs4X,EAAA9L,aACA2I,GAAAn1X,EACAq1X,EAAAr1X,GAAAs4X,EAAAxuX,OAAA25D,QAAApjE,KACA8hY,EAAA9oU,EAAA0mb;AACA,OAAA59G,EACA2zG,GAAAzue,KAAAixX,EAAAxuX,OAAAovE,cAAAipT,EAAAz0N,OACAkoU,GAAAv8a,EAAAp1D,EAAA,WACA,IAAAywf,EAAAr7b,EAAAu+a,oBACA+c,EAAAD,EAAAvjB,UACAyjB,EAAAF,EAAA/xP,YACAyuO,EAAAsjB,EAAAtjB,WACA1uO,EAAAgyP,EAAAhyP,aACAmyP,EAAA1yH,EAAA2yH;AACA3yH,EAAAz0N,OAAA,OAAAhoL,EAAA;AACA,IAAA+2f,EAAAnkH,EAAAM,MAAAv/T,EAAAivU,QAAAyrH,YAAAz7H,EAAAt5N,UAAA3lG,EAAA22T,IACA+kI,EAAA17b,EAAAu+a,oBACA3qK,EAAA8nL,EAAA5jB,UACA6jB,EAAAD,EAAApyP,YACA15P,EAAAgkU,IAAAwvK,EAAAjkf,SAAA,GAAAy0U,EAAA7zP,SAAA6zP,IAAAz9U,aAAAmlgB,GAAA1nL,GAAA2nL,GAAAI;AACA,IACA7yH,EAAA+1G,SAAA9G,EAAA1uO,GACAiyP,OAAAvjB,GAAAwjB,GAAAlyP,IAAAy/H,EAAArgZ,QAAAqgZ,EAAArgZ,OAAA6ygB,EAAAC,EACA,CAAM,MAAApjgB,GAAA,CAEN,OADA,MAAAqjgB,IAAA1yH,EAAA2yH,eAAAD,GACA5rf,CACA,GApBA,QAAAvjB,GAAA,YAAAA,EAAAyvY,EAAAE,EADAiD,EAAAh8V,KAAAg8V,EAAAp3X,SAAAo3X,EAAAh8V,KAAAg8V,EAAAn3X,KAsBA,CA7BA,CAqCAk4D,EAAAp1D,EAAAve,GACA,CALA,CAulJA1D,KAAAiiB,GAAAjiB,KAAAiiB,MAAAve,EACA,GACG,CACHu1B,IAAA,YACAt2B,MAAA,SAAA4nB,EAAA7gB,GACA,OAAA48f,GAAAtmgB,KAAA,GAAAuqB,KAAA7gB,GAAA,IAAA0jY,eAAA,SACA,GACG,CACHn0W,IAAA,YACAt2B,MAAA,SAAAU,EAAAqG,GACA,OAAA48f,GAAAtmgB,KAAAqD,EAAA,QAAAqG,GAAA,IAAA0jY,eAAA,SACA,GACG,CACHn0W,IAAA,wBACAt2B,MAAA,SAAAvC,GACA,OAAA6/f,GAAAjggB,KAAAI,EACA,GACG,CACH64B,IAAA,UACAt2B,MAAA,WACA3C,KAAAsmZ,UAp1EA,SAAAjvU,GAGA,QAAAvzE,KAFAuzE,EAAAznE,MAAA4tf,WAAAnmb,EAAAznE,MAAA4tf,UAAAn3a,OACAhP,EAAAqmb,YAAAxzf,OACAmtE,EAAAznE,MAAAwzf,cAAA/rb,EAAA22T,IAAAx+W,oBAAA1rB,EAAAuzE,EAAAznE,MAAAwzf,cAAAt/f;AACAoL,aAAAmoE,EAAAznE,MAAAkzf,kBACA5zf,aAAAmoE,EAAAznE,MAAA8yf,4BACA,CANA,CAq1EA1igB,MACAA,KAAAkygB,qBACAlygB,KAAAgugB,SACAhugB,KAAAsmZ,QAAA31Y,OAAA3Q,KAAAiiB,MAAA0I,IAAA,GAAAmgf,GAAA9qgB,YACAA,KAAAguY,IAAA92S,YAAA,IACQl3F,KAAAguY,IAAAxgY,YACRxN,KAAAguY,IAAAxgY,WAAA1E,YAAA9I,KAAAguY,KAEAhuY,KAAAsmZ,QAAAlpU,UACAp9E,KAAAsmZ,QAAA,KA/sKAioG,EAAA,KAitKA,GACG,CACHt1d,IAAA,cACA3M,IAAA,WACA,aAAAtsB,KAAAsmZ,OACA,GACG,CACHrtX,IAAA,gBACAt2B,MAAA,SAAA+G,GACA,OA/0EA,SAAA2tE,EAAA3tE,GACA85f,GAAAnsb,EAAA3tE,KAAAkqM,GAAAlqM,EAAA5F,QAAAuzE,EAAAi1P,UAAA5iU,EAAA5F,QAAAm+f,IAAAruT,GAAAlqM,EAAA5F,MAAAuzE,EAAA3tE,EACA,CAFA,CA+0EA1J,KAAA0J,EACA,GACG,CACHuvB,IAAA,oBACAt2B,MAAA,WACA,IAAAw9Y,EAAAngZ,KAAA+9f;AACA,OAAA59G,EAMA6vG,GAAA,KAAAhwf,KAAAwuB,KAAA4oE,UAhpKA,SAAAzsE,GAEA,IADA,IAAAg+I,EAAAh+I,EAAA3b,cACA25J,KAAAk1C,YAAAl1C,IAAAk1C,WAAA7uM;AACA,OAAA25J,CACA,CAJA,CAgpKA3oK,KAAAguY,IAAAxpX,gBAAAxkB,KAAAguY,KAluBA,SAAA32T,EAAA08B,GACA,GAAAA,EAAAk/Z,kBAAA,CACA,IAAA/6b,EAAA67B,EAAAk/Z,kBAAA57b,EAAA7oD,MAAA;AACA,GAAA0pD,EAAA,OAAAm1b,GAAAh2b,EAAAa,EACA,CACA,IAAAgiJ;AACA,SAAAnqB,EAAArmM,GACAA,EAAA4E,iBACA5E,EAAA88M,2BACA0T,EAAAxwN,EAAAwpgB,kBAAA,EACA,CAIA,OAHA77b,EAAA22T,IAAA7/W,iBAAA,cAAA4hL,MACAprM,SAAAwugB,YAAA,UACA97b,EAAA22T,IAAAx+W,oBAAA,cAAAugL,MACAmqB,EAAAmzS,GAAAh2b,EAAA6iJ,GAAA,IACA,CAfA,CAkuBAl6N,KAAAmgZ,MANA,CACAgvG,UAAA,KACAxuO,YAAA,EACAyuO,WAAA,KACA1uO,aAAA,EAGA,GACG,CACHznP,IAAA,eACAt2B,MAAA,WACA,OAAA3C,KAAAwuB,KAAAinE,cACA,KAEAkwT,CACA,CAxWA;AA6WA,SAAA6oH,GAAAn3b,GACA,IAAAyC,EAAA/xD,OAAAxjB,OAAA;AAUA,OATAu1E,EAAA+rB,MAAA,cACA/rB,EAAAs5b,gBAAAzie,OAAA0mC,EAAAi1P,UACAj1P,EAAAslU,SAAA,sBAAAh6Y,GAEA,GADA,mBAAAA,QAAA00E,EAAAp1D,QACAtf,EAAA,QAAA+je,KAAA/je,EACA,SAAA+je,EAAA5sZ,EAAA+rB,OAAA,IAAAljG,EAAA+je,GAA+D,SAAAA,EAAA5sZ,EAAAnsE,OAAAmsE,EAAAnsE,MAAAmsE,EAAAnsE,MAAA,IAAuE,IAAAhL,EAAA+je,GAAsB5sZ,EAAA4sZ,IAAA,mBAAAA,GAAA,YAAAA,IAAA5sZ,EAAA4sZ,GAAA/1b,OAAAhuC,EAAA+je,IAE5J,GACA5sZ,EAAA7zD,YAAA6zD,EAAA7zD,UAAA,MACA,CAAAisY,GAAAhuY,KAAA,EAAAmzD,EAAAp1D,MAAA0I,IAAA82D,QAAApjE,KAAAy7D,GACA,CACA,SAAAw0b,GAAAj3b,GACA,GAAAA,EAAA0ub,WAAA,CACA,IAAA/3H,EAAArpY,SAAAkvE,cAAA;AACAm6T,EAAAx9X,UAAA,wBACAw9X,EAAA5/X,aAAA,2BACA4/X,EAAA5/X,aAAA,UACAipE,EAAAymb,cAAA,CACA9vH,MACA2pH,KAAAzlG,GAAAjkF,OAAA52P,EAAAp1D,MAAA8xF,UAAAxmF,KAAAygX,EAAA,CACAj/L,OACA25L,MAAArxT,EAAA0ub,aAGA,MACA1ub,EAAAymb,cAAA,IAEA,CACA,SAAAuQ,GAAAh3b,GACA,OAAAA,EAAAslU,SAAA,oBAAAh6Y,GACA,WAAAA,EAAA00E,EAAAp1D,MACA,EACA,CAKA,SAAAssf,GAAAl3b,GACA,IAAApwD,EAAAc,OAAAxjB,OAAA;AACA,SAAAqzC,EAAA/F,GACA,QAAAwhe,KAAAxhe,EAAA9pB,OAAA9iB,UAAA4N,eAAAjI,KAAAqc,EAAAosf,KAAApsf,EAAAosf,GAAAxhe,EAAAwhe,GACA,CAGA,OAFAh8b,EAAAslU,SAAA,YAAA/kW,GACAy/B,EAAAslU,SAAA,YAAA/kW,GACA3wB,CACA,CAWA,SAAAmnf,GAAArjI,GACA,GAAAA,EAAAhhC,KAAA9nV,OAAA8oX,EAAAhhC,KAAAmpI,mBAAAnoG,EAAAhhC,KAAAukC,kBAAA,UAAAtxW,WAAA,sEACA,CAhEA2oX,GAAA1gZ,UAAA6gR,SAAA,SAAA7mO,GACA,IAAA2mW,EAAA5lZ,KAAAkpV,OAAA08D;AACAA,IAAAh7Y,KAAA5K,KAAAi/C,GAA8Dj/C,KAAAilZ,YAAAjlZ,KAAAiiB,MAAAtP,MAAAssC,GAC9D,EA8DA5F,EAAA64W,WAAkBA,GAClB74W,EAAA84W,cAAqBA,GACrB94W,EAAAssW,WAAkBA,GAClBtsW,EAAAw0d,iBAAwBA,GACxBx0d,EAAAu0d,qBAA4BA;ACh2K5B,IAAA0F,EAAA,IAKAn4C,EAAA;AAEAA,EAAAl2d,UAAAqsM,OAAA,SAAA3pJ,GACA,OAAAA,EAAApnD,QACAonD,EAAAwza,EAAA5tc,KAAAo6B,IAEA3nD,KAAAO,QAAAonD,GACAA,EAAApnD,OAAA+ygB,GAAAtzgB,KAAAuzgB,WAAA5rd,IACA3nD,KAAAO,OAAA+ygB,GAAA3rd,EAAA6rd,YAAAxzgB,OACAA,KAAAyzgB,YAAA9rd,IANuB3nD,IAOvB,EAIAm7d,EAAAl2d,UAAA4mN,QAAA,SAAAlkK,GACA,OAAAA,EAAApnD,OACA46d,EAAA5tc,KAAAo6B,GAAA2pJ,OAAAtxM,MADuBA,IAEvB,EAEAm7d,EAAAl2d,UAAAwugB,YAAA,SAAA9rd,GACA,WAAA+rd,EAAA1zgB,KAAA2nD,EACA,EAIAwza,EAAAl2d,UAAA7E,MAAA,SAAAmtB,EAAAk/B,GAIA,YAHA,IAAAl/B,MAAA,QACA,IAAAk/B,MAAAzsD,KAAAO,QAEAgtB,GAAAk/B,EAAoB0ua,EAAA79X,MACpBt9F,KAAA2zgB,WAAA5wgB,KAAA+b,IAAA,EAAAyO,GAAAxqB,KAAA8b,IAAA7e,KAAAO,OAAAksD,GACA,EAIA0ua,EAAAl2d,UAAAqnB,IAAA,SAAAhsB,GACA,KAAAA,EAAA,GAAAA,GAAAN,KAAAO,QACA,OAAAP,KAAA4zgB,SAAAtzgB,EACA,EAOA66d,EAAAl2d,UAAAuV,QAAA,SAAAtO,EAAAqhB,EAAAk/B,QACA,IAAAl/B,MAAA,QACA,IAAAk/B,MAAAzsD,KAAAO,QAEAgtB,GAAAk/B,EACMzsD,KAAA6zgB,aAAA3ngB,EAAAqhB,EAAAk/B,EAAA,GAEAzsD,KAAA8zgB,qBAAA5ngB,EAAAqhB,EAAAk/B,EAAA,EACN,EAKA0ua,EAAAl2d,UAAA2e,IAAA,SAAA1X,EAAAqhB,EAAAk/B,QACA,IAAAl/B,MAAA,QACA,IAAAk/B,MAAAzsD,KAAAO;AAEA,IAAA0mB,EAAA;AAEA,OADAjnB,KAAAwa,QAAA,SAAAmuJ,EAAAroK,GAAmC,OAAA2mB,EAAArf,KAAAsE,EAAAy8J,EAAAroK,GAAA,EAAgCitB,EAAAk/B,GACnExlC,CACA,EAKAk0c,EAAA5tc,KAAA,SAAAy5B,GACA,OAAAA,aAAAm0a,EAAwCn0a,EACxCA,KAAAzmD,OAAA,IAAAwzgB,EAAA/sd,GAAAm0a,EAAA79X,KACA;AAEA,IAAAy2a,EAAA,SAAA54C,GACA,SAAA44C,EAAA/sd,GACAm0a,EAAAvwd,KAAA5K,MACAA,KAAAgnD,QACA,CAEAm0a,IAAA44C,EAAAp4a,UAAAw/X,GACA44C,EAAA9ugB,UAAA8iB,OAAAxjB,OAAA42d,KAAAl2d,WACA8ugB,EAAA9ugB,UAAAq2E,YAAAy4b;AAEA,IAAAC,EAAA,CAA6BzzgB,OAAA,CAAU8oD,iBAAoButV,MAAA,CAAUvtV;AAyCrE,OAvCA0qd,EAAA9ugB,UAAA04M,QAAA,WACA,OAAA39M,KAAAgnD,MACA,EAEA+sd,EAAA9ugB,UAAA0ugB,WAAA,SAAApmf,EAAAk/B,GACA,UAAAl/B,GAAAk/B,GAAAzsD,KAAAO,OAA0CP,KAC1C,IAAA+zgB,EAAA/zgB,KAAAgnD,OAAA5mD,MAAAmtB,EAAAk/B,GACA,EAEAsnd,EAAA9ugB,UAAA2ugB,SAAA,SAAAtzgB,GACA,OAAAN,KAAAgnD,OAAA1mD,EACA,EAEAyzgB,EAAA9ugB,UAAA4ugB,aAAA,SAAA3ngB,EAAAqhB,EAAAk/B,EAAAvtC,GACA,QAAA5e,EAAAitB,EAAuBjtB,EAAAmsD,EAAQnsD,IACvB,QAAA4L,EAAAlM,KAAAgnD,OAAA1mD,GAAA4e,EAAA5e,GAA8C,QACtD,EAEAyzgB,EAAA9ugB,UAAA6ugB,qBAAA,SAAA5ngB,EAAAqhB,EAAAk/B,EAAAvtC,GACA,QAAA5e,EAAAitB,EAAA,EAA2BjtB,GAAAmsD,EAASnsD,IAC5B,QAAA4L,EAAAlM,KAAAgnD,OAAA1mD,GAAA4e,EAAA5e,GAA8C,QACtD,EAEAyzgB,EAAA9ugB,UAAAsugB,WAAA,SAAA5rd,GACA,GAAA3nD,KAAAO,OAAAonD,EAAApnD,QAAA+ygB,EACQ,WAAAS,EAAA/zgB,KAAAgnD,OAAAv0C,OAAAk1C,EAAAg2J,WACR,EAEAo2T,EAAA9ugB,UAAAuugB,YAAA,SAAA7rd,GACA,GAAA3nD,KAAAO,OAAAonD,EAAApnD,QAAA+ygB,EACQ,WAAAS,EAAApsd,EAAAg2J,UAAAlrM,OAAAzS,KAAAgnD,QACR,EAEAgtd,EAAAzzgB,OAAA+rB,IAAA,WAAgD,OAAAtsB,KAAAgnD,OAAAzmD,MAAA,EAEhDyzgB,EAAAp9H,MAAAtqX,IAAA,WAA+C,UAE/CvE,OAAA6/K,iBAAAmsU,EAAA9ugB,UAAA+ugB,GAEAD,CACA,CApDA,CAoDC54C;AAIDA,EAAA79X,MAAA,IAAAy2a,EAAA;AAEA,IAAAL,EAAA,SAAAv4C,GACA,SAAAu4C,EAAA9lgB,EAAAI,GACAmtd,EAAAvwd,KAAA5K,MACAA,KAAA4N,OACA5N,KAAAgO,QACAhO,KAAAO,OAAAqN,EAAArN,OAAAyN,EAAAzN,OACAP,KAAA42Y,MAAA7zY,KAAA+b,IAAAlR,EAAAgpY,MAAA5oY,EAAA4oY,OAAA,CACA,CA0DA,OAxDAukF,IAAAu4C,EAAA/3a,UAAAw/X,GACAu4C,EAAAzugB,UAAA8iB,OAAAxjB,OAAA42d,KAAAl2d,WACAyugB,EAAAzugB,UAAAq2E,YAAAo4b,EAEAA,EAAAzugB,UAAA04M,QAAA,WACA,OAAA39M,KAAA4N,KAAA+vM,UAAAlrM,OAAAzS,KAAAgO,MAAA2vM,UACA,EAEA+1T,EAAAzugB,UAAA2ugB,SAAA,SAAAtzgB,GACA,OAAAA,EAAAN,KAAA4N,KAAArN,OAAAP,KAAA4N,KAAA0e,IAAAhsB,GAAAN,KAAAgO,MAAAse,IAAAhsB,EAAAN,KAAA4N,KAAArN,OACA,EAEAmzgB,EAAAzugB,UAAA4ugB,aAAA,SAAA3ngB,EAAAqhB,EAAAk/B,EAAAvtC,GACA,IAAA+0f,EAAAj0gB,KAAA4N,KAAArN;AACA,QAAAgtB,EAAA0mf,QACAj0gB,KAAA4N,KAAAimgB,aAAA3ngB,EAAAqhB,EAAAxqB,KAAA8b,IAAA4tC,EAAAwnd,GAAA/0f,OAEAutC,EAAAwnd,QACAj0gB,KAAAgO,MAAA6lgB,aAAA3ngB,EAAAnJ,KAAA+b,IAAAyO,EAAA0mf,EAAA,GAAAlxgB,KAAA8b,IAAA7e,KAAAO,OAAAksD,GAAAwnd,EAAA/0f,EAAA+0f,UADA,CAGA,EAEAP,EAAAzugB,UAAA6ugB,qBAAA,SAAA5ngB,EAAAqhB,EAAAk/B,EAAAvtC,GACA,IAAA+0f,EAAAj0gB,KAAA4N,KAAArN;AACA,QAAAgtB,EAAA0mf,QACAj0gB,KAAAgO,MAAA8lgB,qBAAA5ngB,EAAAqhB,EAAA0mf,EAAAlxgB,KAAA+b,IAAA2tC,EAAAwnd,KAAA/0f,EAAA+0f,OAEAxnd,EAAAwnd,QACAj0gB,KAAA4N,KAAAkmgB,qBAAA5ngB,EAAAnJ,KAAA8b,IAAA0O,EAAA0mf,GAAAxnd,EAAAvtC,UADA,CAGA,EAEAw0f,EAAAzugB,UAAA0ugB,WAAA,SAAApmf,EAAAk/B,GACA,MAAAl/B,GAAAk/B,GAAAzsD,KAAAO,OAA0C,OAAAP;AAC1C,IAAAi0gB,EAAAj0gB,KAAA4N,KAAArN;AACA,OAAAksD,GAAAwnd,EAAyBj0gB,KAAA4N,KAAAxN,MAAAmtB,EAAAk/B,GACzBl/B,GAAA0mf,EAA2Bj0gB,KAAAgO,MAAA5N,MAAAmtB,EAAA0mf,EAAAxnd,EAAAwnd,GAC3Bj0gB,KAAA4N,KAAAxN,MAAAmtB,EAAA0mf,GAAA3iU,OAAAtxM,KAAAgO,MAAA5N,MAAA,EAAAqsD,EAAAwnd,GACA,EAEAP,EAAAzugB,UAAAsugB,WAAA,SAAA5rd,GACA,IAAA0yO,EAAAr6R,KAAAgO,MAAAulgB,WAAA5rd;AACA,GAAA0yO,EAAiB,WAAAq5O,EAAA1zgB,KAAA4N,KAAAysR,EACjB,EAEAq5O,EAAAzugB,UAAAuugB,YAAA,SAAA7rd,GACA,IAAA0yO,EAAAr6R,KAAA4N,KAAA4lgB,YAAA7rd;AACA,GAAA0yO,EAAiB,WAAAq5O,EAAAr5O,EAAAr6R,KAAAgO,MACjB,EAEA0lgB,EAAAzugB,UAAAwugB,YAAA,SAAA9rd,GACA,OAAA3nD,KAAA4N,KAAAgpY,OAAA7zY,KAAA+b,IAAA9e,KAAAgO,MAAA4oY,MAAAjvV,EAAAivV,OAAA,EACQ,IAAA88H,EAAA1zgB,KAAA4N,KAAA,IAAA8lgB,EAAA1zgB,KAAAgO,MAAA25C,IACR,IAAA+rd,EAAA1zgB,KAAA2nD,EACA,EAEA+rd,CACA,CAlEA,CAkECv4C;AAEDjuZ,EAAA7zB,QAAA8hb;AC9MApzc,OAAAmhC,eAAA7P,EAAA,cAA+C12C;AAwF/C,IAtFA,IAAAgtR,EAAA,CACA,cACA,QACA,WACA,aACA,WACA,WACA,aACA,SACA,cACA,YACA,OACA,YACA,cACA,SACA,UACA,eACA,aACA,gBACA,eACA,iBACA,YACA,YACA,OACA,OACA,UACA,UACA,QACA,QACA,QACA,QACA,QACA,QACA,cACA,iBACA,YACA,YACA,cACA,cACA,UACA,UACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,SAGA77Q,EAAA,CACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAGA8qd,EAAA,oBAAAx7Y,WAAA,MAAA/9D,KAAA+9D,UAAAllE,UACAR,EAAA,oBAAA0lE,WAAA,gDAA6E3iF,KAAA2iF,UAAAC,WAG7E/iF,EAAA,EAAgBA,EAAA,GAAQA,IAAAqvR,EAAA,GAAArvR,GAAAqvR,EAAA,GAAArvR,GAAAqwC,OAAArwC;AAGxB,IAAAA,EAAA,EAAgBA,GAAA,GAASA,IAAAqvR,EAAArvR,EAAA,SAAAA;AAGzB,IAAAA,EAAA,GAAiBA,GAAA,GAASA,IAC1BqvR,EAAArvR,GAAAqwC,OAAAiB,aAAAtxC,EAAA,IACAwT,EAAAxT,GAAAqwC,OAAAiB,aAAAtxC;AAIA,QAAAmW,KAAAk5Q,EAAA77Q,EAAAjB,eAAA4D,KAAA3C,EAAA2C,GAAAk5Q,EAAAl5Q;AAsBA4iC,EAAAs2O,KAAYA,EACZt2O,EAAAwyC,QArBA,SAAAniF,GAGA,IAGAtB,IAHAw2d,GAAAl1d,EAAA+lG,SAAA/lG,EAAA4lG,WAAA5lG,EAAA2lG,UAAA3lG,EAAAwjG,QACAxvF,GAAAhU,EAAA4lG,UAAA5lG,EAAAuvB,KAAA,GAAAvvB,EAAAuvB,IAAA14B,QACA,gBAAAmJ,EAAAuvB,MACAvvB,EAAAuvB,MACAvvB,EAAA4lG,SAAAx7F,EAAA67Q,GAAAjmR,EAAAkF,UACAlF,EAAAuvB,KAAA;AASA,MAPA,OAAA7wB,MAAA,UACA,OAAAA,MAAA,UAEA,QAAAA,MAAA,aACA,MAAAA,MAAA,WACA,SAAAA,MAAA,cACA,QAAAA,MAAA,aACAA,CACA,EAIAixC,EAAAvlC,MAAaA;AC9Hb,SAASk2H,EAAQppI,GAGf,OAAOopI,EAAU,mBAAqB7uD,QAAU,iBAAmBA,OAAO2c,SAAW,SAAUl3F,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBu6E,QAAUv6E,EAAE06E,cAAgBH,QAAUv6E,IAAMu6E,OAAOl2E,UAAY,gBAAkBrE,CACpH,EAAGopI,EAAQppI,EACb,CAAAJ,EAAAb,EAAAb,EAAA,CAAAslF,EAAA,IAAA9jF,GAAA,QAAAD,EAAAvB,EAAA0B,GAAA;AAAAA,EAAAK,EAAA/B,GAAA0B,EAAAb,EAAAb,EAAA,CAAAo1gB,QAAA,IAAAC,GAAArgP,YAAA,IAAAsgP,GAAAC,KAAA,IAAAC,GAAAC,iBAAA,IAAAzwO,GAAA0wO,iBAAA,IAAAC,GAAAC,SAAA,IAAAC,GAAAC,eAAA,IAAAC,GAAAC,gBAAA,IAAAC;ACNO,IAAIC,EAAWnhgB,MAAM1T,QACjB80gB,EAAWphgB,MAAM5O,UAAU4E,QAC3B9E,EAAW8O,MAAM5O,UAAUF,SAC3BmwgB,EAAarhgB,MAAM0Z,KACnB4nf,EAAcptf,OAAO2wB,KACrB08d,EAAkBrtf,OAAOmhC,eACzBmsd,EAAiBttf,OAAO2zE,yBACxB45a,EAAkBvtf,OAAOg5L,0BACzBw0T,EAAmBxtf,OAAO9iB,UAC1BuwgB,EAAkB3hgB,MAAM5O,UACxBwwgB,EAAmB1tf,OAAOC,eAC1B0tf,EAAgB3tf,OAAO0hZ;AACJ1hZ,OAAO9iB,UAAU4N;AAUxC,MAAMwqJ,EAAOA;AA8Bb,SAASs4W,IAEf,IAAI3gc,EAGA1B;AASJ,MAAO,CAAEotF,QANK,IAAIrtF,QAAQ,CAACu0F,EAAKC,KAC/B7yF,EAAU4yF,EACVt0F,EAASu0F,IAIQ7yF,UAAS1B,SAC5B,UAAAhiE,EAAAjR,EAAAvB,EAAA0B,GAAA,OAAA1B,EAAA,SAAAuB,GAAA,IAAAvB,EAAA,SAAAuB,GAAA,oBAAAA,MAAA,OAAAA;AAAA,IAAAvB,EAAAuB,EAAA86E,OAAAC;AAAA,YAAAt8E,EAAA,KAAA0B,EAAA1B,EAAA8L,KAAAvK,EAAA;AAAA,oBAAAG,EAAA,OAAAA;AAAA,UAAAqoD,UAAA,uDAAAlY,OAAAtwC,EAAA,EAAAA;AAAA,uBAAAvB,MAAA,IAAAA,MAAAuB,EAAA0nB,OAAAmhC,eAAA7oD,EAAAvB,EAAA,CAAA6D,MAAAnC,EAAA4oD,YAAA,EAAAC,cAAA,EAAAgyB,UAAA,IAAAh7E,EAAAvB,GAAA0B,EAAAH,CAAA,CCpEO,MA+BMu1gB,EAAa,GAAK,GAYlBC,EAAmB,GAAK,GAYxBC,EAAuB,GAAK,GAG5BC,EAAc,GAAK,GAEnBC,EAAe76b,OAAO,UACtB86b,EAAe96b,OAAO,gBACtB+6b,EAAsB/6b,OAAO,IAE7Bg7b,GADoBh7b,OAAO,cACRA,OAAO,eAC1Bi7b,EAAcj7b,OAAO,SACrBk7b,EAAcl7b,OAAO,SACrBm7b,EAAan7b,OAAO,QAMpBo7b,GALqBp7b,OAAO,cAEfA,OAAO,cAGH,IAAK,cAAiCz6E,MAAM46E,eAAA5iD,GAAAsqI,SAAAtqI,GAAAy6G,EAAAnzI,KAAA,OAClE,sBAAoBmzI,EAAAnzI,KAAA,UACjB,sEAAqE,IAGnEw2gB,IAEVzvP,WAAWpiR,UAAUiyM,aACPmwE,WAAWpiR,SAASiyM,YAAY7xM,SAAS,OCtD7C0xgB,EAAkB,CAAC,EAMnBluV,EAAgBptG,OAAO,iBAMvBu7b,GAHWv7b,OAAO,YACZA,OAAO,OAEI;AC4GvB,SAASw7b,EAAmBx+f,GAUjC5C,QAAQC,KAAK,0CAEf,CChJO,IAcIohgB,EAdAC;AAGJ,SAASC,EAAcn0gB,GAC7Bk0gB,EAAYl0gB,CACb,CAYO,SAASo0gB,EAAiB7yf,GAChC,GAAa,OAATA,EAEH,MADArP,IACM4hgB;AAGP,OAAQG,EAAe1yf,CACxB,CAEO,SAAS8yf,IACf,OAAOD,EAAiBE,GAAiBL,GAC1C,CAGO,SAAShlf,EAAM1N,GACrB,GAAK2yf,EAAL,CAGA,GAAuC,OAAnCI,GAAiBL,GAEpB,MADA/hgB,IACM4hgB;AAGPG,EAAe1yf,CARC,CASjB,CA6BO,SAASgzf,EAAWx7b,MAI1B,IAHA,IAAIk7T,EAAQ,EACR1yX,EAAO0yf,IAEE,CACZ,GAAsBO,IAAlBjzf,EAAKkzE,SAA2B,CACnC,IAAInqE,EAA+B/I,EAAM+I;AAEzC,GAAamqf,MAATnqf,EAAwB,CAC3B,GAAc,IAAV2pX,EAAa,OAAO1yX;AACxB0yX,GAAS,CACV,MACUygI,MAATpqf,GACSqqf,OAATrqf,GAEa,MAAZA,EAAK,KAAeguD,MAAM3vE,OAAO2hB,EAAK7sB,MAAM,QAE7Cw2Y,GAAS,EAEX,CAEA,IAAI39S,EAAoCg+a,GAAiB/yf;AACrDw3D,GAAQx3D,EAAKw3D,SACjBx3D,EAAO+0E,CACR,CACD,CAMO,SAASs+a,EAA2Brzf,GAC1C,IAAKA,GAA0Bizf,IAAlBjzf,EAAKkzE,SAEjB,MADAviF,IACM4hgB;AAGP,OAA+Bvyf,EAAM+I,IACtC,CCzHO,SAASuqf,EAAO70gB,GACtB,OAAOA,IAAU3C,KAAKsR,CACvB,CAuBO,SAASmmgB,EAAY90gB,GAC3B,OAjB8B7B,EAiBP6B,EAjBUsY,EAiBHjb,KAAKsR,IAhB5BxQ,GAAKA,EACTma,GAAKA,EACLna,IAAMma,GAAY,OAANna,GAA2B,iBAANA,GAAgC,mBAANA;AAHxD,IAAwBA,EAAGma,CAkBlC,CC6CO,SAASy8f,EAA4BtvgB,GAQ1C,MAAM,IAAI1H,MAAM,mDAElB,CC3EO,IAAIi3gB,EAAoB;AAGxB,SAASC,EAAsBh/e,GACrC++e,EAAoB/+e,CACrB,CA0FO,SAASyxY,EAAWpxY,GAG1B,OAFoB4+e,IACyBvrf,IAAI2M,EAElD,CAgBO,SAAS2sZ,EAAW3sZ,EAAKL,GAiB/B,OAhBoBi/e,IAeRhrf,IAAIoM,EAAKL,GACdA,CACR,CAiCO,SAAShxB,EAAK0iD,EAAOwtd,KAAexnf,GAC1Cqnf,EAAoB,CACnB9ygB,EAAG8ygB,EACHr3gB,KACA6D,EAAG,KACH9D,EAAG,KACHmC,EAAG8nD,EACHtjD,EAAG,KACHnG,EAACo8R,GACDlgS,EAA8D,KAQhE,CAOO,SAAS40J,EAAIsoB,GACnB,IAAIrhJ,EAA2C++e,EAC3C/0G,EAAUhqY,EAAQv4B;AAEtB,GAAgB,OAAZuia,EAGH,IAAK,IAAItyY,KAFTsI,EAAQv4B,EAAI,KAEGuia,GACdm1G,GAAmBznf;AAgBrB,YAZkBmB,IAAdwoJ,IACHrhJ,EAAQ5xB,EAAIizK,GAGbrhJ,EAAQt4B,KAERq3gB,EAAoB/+e,EAAQ/zB,EAMrBo1K,GAAS,CAAwB,CACzC,CAWA,SAAS49V,EAAwBzvgB,GAKhC,OAJ0B,OAAtBuvgB,GACHt3gB,IAGOs3gB,EAAkBxzgB,IAAM,IAAIkzB,IAOrC,SAA4Bsgf,GAC3B,IAAI7vf,EAAS6vf,EAAkB9ygB;AAC/B,KAAkB,OAAXijB,GAAiB,CACvB,MAAMkwf,EAAclwf,EAAO3jB;AAC3B,GAAoB,OAAhB6zgB,EACH,OAAOA;AAERlwf,EAASA,EAAOjjB,CACjB,CACA,OAAO,IACR,CAVA,CAP4D8ygB,SAAsBlmf,EAClF,CC9OA,IAAIwmf,EAAc;AAElB,SAASC,KACR,IAAI5rU,EAAQ2rU;AACZA,EAAc,GRoCR,SAAiBz2N,GACvB,IAAK,IAAIlhT,EAAI,EAAGA,EAAIkhT,EAAIjhT,OAAQD,IAC/BkhT,EAAIlhT,IAEN,CAJO,CQnCEgsM,EACT,CAKO,SAAS6rU,GAAiB7nf,GAChC,GAA2B,IAAvB2nf,EAAY13gB,SAAiB63gB,GAAkB,CAClD,IAAI9rU,EAAQ2rU;AACZI,eAAe,KASV/rU,IAAU2rU,GAAaC,MAE7B,CAEAD,EAAYrwgB,KAAK0oB,EAClB,CAKO,SAASgof,KACf,KAAOL,EAAY13gB,OAAS,GAC3B23gB,IAEF,CC3BO,SAASK,GAAax/f,GAC5B,IAAIy/f,EAASC;AAGb,GAAe,OAAXD,EAEH,OADwBE,GAAiBxsgB,GAAK6pgB,EACvCh9f;AAUR,KAAgB4/f,MAAXH,EAAOtsgB,GAAuC0sgB,EAAXJ,EAAOtsgB,GAK9C,MAAM6M;AAIP8/f,GAAsB9/f,EAAOy/f,EAC9B,CAMO,SAASK,GAAsB9/f,EAAOy/f,GAC5C,KAAe,OAAXA,GAA+BM,MAAXN,EAAOtsgB,GAA/B,CAIA,KAAkB,OAAXssgB,GAAiB,CACvB,GAAgBO,IAAXP,EAAOtsgB,EAA4B,CACvC,KAAgBysgB,MAAXH,EAAOtsgB,GAEX,MAAM6M;AAGP,IAEC,YADyBy/f,EAAOv9f,EAAGlC,MAAMA,EAE1C,CAAE,MAAO1Y,GACR0Y,EAAQ1Y,CACT,CACD,CAEAm4gB,EAASA,EAAO1wf,MACjB,CAMA,MAAM/O,CAxBN,CAyBD,CCjEO,SAASiggB,GAAkBC,EAAQrjgB,GACzCqjgB,EAAO/sgB,GAPY,KAOP+sgB,EAAO/sgB,EAAmB0J,CACvC,CAMO,SAASsjgB,GAAsBC,GAEpBC,IAAZD,EAAQjtgB,GAAyC,OAAjBitgB,EAAQ91W,KAC5C21W,GAAkBG,EAASE,MAE3BL,GAAkBG,EAASG,KAE7B,CCjBA,SAASC,GAAal2W,GACrB,GAAa,OAATA,EAEJ,IAAK,MAAMuY,KAAOvY,EACJm2W,EAAR59V,EAAI1vK,GAA+ButgB,MAAR79V,EAAI1vK,IAIpC0vK,EAAI1vK,GAAKutgB,MAETF,GAAqC39V,EAAKvY,MAE5C,CAOO,SAASq2W,GAAalB,EAAQmB,EAAeC,GACnCC,KAAXrB,EAAOtsgB,EACXytgB,EAAc/he,IAAI4ge,GACIc,KAAXd,EAAOtsgB,GAClB0tgB,EAAoBhie,IAAI4ge,GAKzBe,GAAaf,EAAOn1W,MAGpB21W,GAAkBR,EAAQa,KAC3B,CF9BoB,IAAIlka;AGKjB,IAOH2ka;ACiBG,SAASC,GAAyBzpf,GACxC,IAAI0pf,EAAoBtB,GACpBuB,EAAkBxB;AACtByB,GAAoB,MACpBC,GAAkB;AAClB,IACC,OAAO7pf,GACR,CAAC,QACA4pf,GAAoBF,GACpBG,GAAkBF,EACnB,CACD,UAAAh5gB,GAAAZ,EAAAvB,EAAA0B,GAAA84B,GAAAj5B,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAA84B,GAAAj5B,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,2EAAAq5F,GAAA7hJ,EAAAvB,EAAA0B,GAAA,OAAA1B,EAAA,SAAAuB,GAAA,IAAAvB,EAAA,SAAAuB,GAAA,oBAAAA,MAAA,OAAAA;AAAA,IAAAvB,EAAAuB,EAAA86E,OAAAC;AAAA,YAAAt8E,EAAA,KAAA0B,EAAA1B,EAAA8L,KAAAvK,EAAA;AAAA,oBAAAG,EAAA,OAAAA;AAAA,UAAAqoD,UAAA,uDAAAlY,OAAAtwC,EAAA,EAAAA;AAAA,uBAAAvB,MAAA,IAAAA,MAAAuB,EAAA0nB,OAAAmhC,eAAA7oD,EAAAvB,EAAA,CAAA6D,MAAAnC,EAAA4oD,YAAA,EAAAC,cAAA,EAAAgyB,UAAA,IAAAh7E,EAAAvB,GAAA0B,EAAAH,CAAA,UAAAi0H,GAAAj0H,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAAqkQ,GAAAtwR,EAAAvB,GAAA,UAAA21H,GAAAp0H,EAAAvB,EAAA0B,GAAA,OAAAH,EAAAwsB,IAAA8jQ,GAAAtwR,EAAAvB,GAAA0B,IAAA,UAAAmwR,GAAAtwR,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDD1BmBsyB,OAAO;AEwCzB,IAAA2zb,GAAA,IAAA35Z,QAAAila,GAAA,IAAAjla,QAAA+zO,GAAA,IAAA/zO,QAAAkla,GAAA,IAAAlla,QAAAmla,GAAA,IAAAnla,QAAAola,GAAA,IAAApla,QAAAqla,GAAA,IAAArla,QAAAsla,GAAA,IAAAtla,QAAAula,GAAA,IAAAvla,QAAAwla,GAAA,IAAAxla,QAAAyla,GAAA,IAAAzla,QAAA0la,GAAA,IAAA1la,QAAA2la,GAAA,IAAA3la,QAAA4la,GAAA,IAAA5la,QAAA6la,GAAA,IAAA7la,QAAA8la,GAAA,IAAA9la,QAAA+la,GAAA,IAAAxzW;AAEM,MAAMyzW,GA6EZ7/b,YAAYp3D,EAAMomC,EAAO9uC,EAAU4/f;AAAAA,GAAiBp7gB,OAAAk7gB,UAAAl7gB,MA5EpDmzI,GAAAnzI,KAAA,iBAAAq7gB,GAAAr7gB,KAAA,iBAKAmzI,GAAAnzI,KAAA,0BAQA0jL,GAAA1jL,KAAA8ugB,QAAO,GAGPprV,GAAA1jL,KAAAo6gB,GAAgBvD,EAAYD,EAAe,MAG3ClzV,GAAA1jL,KAAAkpV,QAAM,GAGNxlK,GAAA1jL,KAAAq6gB,QAAS,GAGT32V,GAAA1jL,KAAAs6gB,QAAO,GAGP52V,GAAA1jL,KAAAu6gB,GAAe,MAGf72V,GAAA1jL,KAAAw6gB,GAAkB,MAGlB92V,GAAA1jL,KAAAy6gB,GAAiB,MAGjB/2V,GAAA1jL,KAAA06gB,GAAsB,MAEtBh3V,GAAA1jL,KAAA26gB,GAAuB,GACvBj3V,GAAA1jL,KAAA46gB,GAAiB,GACjBl3V,GAAA1jL,KAAA66gB,OAGAn3V,GAAA1jL,KAAA86gB,GAAiB,IAAI/2f,KAGrB2/J,GAAA1jL,KAAA+6gB,GAAuB,IAAIh3f,KAS3B2/J,GAAA1jL,KAAAg7gB,GAAkB,MAElBt3V,GAAA1jL,KAAAi7gB,GCvEM,SAA0B/7f,GAChC,IAGIhV,EAHAoxgB,EAAc,EACdtmb,EAAUzkD,GAAO;AAQrB,MAAO,KACFgre,OACHjvf,GAAI0oE,GAEJwmb,GAAc,KACO,IAAhBF,IACHpxgB,EAAOuxgB,GAAQ,IAAMv8f,MAGtBo8f,GAAe,EAER,KACNnD,GAAiB,KAIhBmD,GAAe,EAEK,IAAhBA,IACHpxgB,MACAA,OAAOunB,EAIPi4X,GAAU10T,UAOjB,CAzCO,CDuEwC,KAC7CshH,GAAK0kU,GAALh7gB,KAAuBuwC,GAAOgmK,GAAKokU,GAAL36gB,QAMvB,KACNs2M,GAAK0kU,GAALh7gB,KAAuB,UAWxBs2M,GAAKw4T,GAAL9ugB,KAAekkB,GACfoyL,GAAK4yI,GAALlpV,KAAcsqD,GAEdgsJ,GAAK+jU,GAALr6gB,KAAkB8xZ,IACjB,IAAI0mH,EAAgCC;AAEpCD,EAAOv9f,EAAIjb,KACXw4gB,EAAOtsgB,GAAK6sgB,IAEZv9f,EAASs2Y,KAGV9xZ,KAAK8nB,OAAgC2wf,GAAex9f,EAGpDjb,KAAKo7gB,gBAAkBA,GAAmBp7gB,KAAK8nB,QAAQszf,iBAAe,CAAM/6gB,GAAMA,GAElFi2M,GAAKgkU,GAALt6gB,KAAespK,GAAM,KACpB,GAAIutW,EAAW,CACd,MAAM6E,EAAkCnlU,GAAK6jU,GAALp6gB;AACxCg3gB;AAEA,MAAM2E,EAA2CrE,OAAjBoE,EAAQzuf;AAGxC,GAF+Byuf,EAAQzuf,KAAK2jB,WAAWgre,MAE3B,CAG3B,MAAMC,EAAmB5lgB,KAAKC,MAAMwlgB,EAAQzuf,KAAK7sB,MAAMw7gB;AACvDE,GAAAZ,GAAAl7gB,KAAK+7gB,IAAuBnxgB,KAA5B5K,KAA6B67gB,EAC9B,MAAWF,EACVG,GAAAZ,GAAAl7gB,KAAKg8gB,IAAwBpxgB,KAA7B5K,MAEA87gB,GAAAZ,GAAAl7gB,KAAKi8gB,IAAyBrxgB,KAA9B5K,KAEF,MACC87gB,GAAAZ,GAAAl7gB,KAAKk8gB,IAAOtxgB,KAAZ5K,OA/HQm8gB,SAmINtF,GACHvgU,GAAKw4T,GAAL9ugB,KAAe42gB,EAEjB,CAkJA8C,aAAalB,GACZkB,GAAalB,EAAQjiU,GAAKukU,GAAL96gB,MAAqBu2M,GAAKwkU,GAAL/6gB,MAC3C,CAMAo8gB,cACC,OAAQp8gB,KAAKq8gB,cAAgBr8gB,KAAK8nB,QAAU9nB,KAAK8nB,OAAOs0f,cACzD,CAEAE,sBACC,QAAS/lU,GAAK2yI,GAALlpV,MAAY4zR,OACtB,CAqEA2oP,qBAAqB58gB,EAAG68gB,GACvBV,GAAAZ,GAAAl7gB,KAAKy8gB,IAAqB7xgB,KAA1B5K,KAA2BL,EAAG68gB,GAE9BlmU,GAAKqkU,GAAL36gB,KAAAu2M,GAAKokU,GAAL36gB,MAA6BL,GAExB42M,GAAKykU,GAALh7gB,QAAwBu2M,GAAKskU,GAAL76gB,QAC7Bs2M,GAAKukU,GAAL76gB,SAEAm4gB,GAAiB,KAChB7hU,GAAKukU,GAAL76gB,SACIu2M,GAAKykU,GAALh7gB,OACH08gB,GAAanmU,GAAKykU,GAALh7gB,MAAsBu2M,GAAKokU,GAAL36gB,SAGtC,CAEA28gB,qBAEC,OADApmU,GAAK0kU,GAALj7gB,MAA+B4K,KAA/B5K,MACOssB,GAAmCiqL,GAAKykU,GAALh7gB,MAC3C,CAGA+Y,MAAMA,GAGL,IAAKw9L,GAAK2yI,GAALlpV,MAAYguE,UAAYuoI,GAAK2yI,GAALlpV,MAAY2lf,OACxC,MAAM5se;AAGH6jgB,IAAeC,SACdtmU,GAAKgkU,GAALv6gB,OAAmB48gB,GAAcE,YAAYvmU,GAAKgkU,GAALv6gB,OAC7Cu2M,GAAKikU,GAALx6gB,OAAsB48gB,GAAcE,YAAYvmU,GAAKikU,GAALx6gB,OAChDu2M,GAAKkkU,GAALz6gB,OAAqB48gB,GAAcE,YAAYvmU,GAAKkkU,GAALz6gB,OAEnD48gB,GAAcG,SAAS,KACtBjB,GAAAZ,GAAAl7gB,KAAKg9gB,IAAapygB,KAAlB5K,KAAmB+Y,MAGpB+igB,GAAAZ,GAAAl7gB,KAAKg9gB,IAAapygB,KAAlB5K,KAAmB+Y,EAErB,EAwFA,SAAAkjgB,KAlWC,IACC3lU,GAAKikU,GAALv6gB,KAAoBy8d,GAAO,IAAMlmR,GAAK8jU,GAALr6gB,MAAc4K,KAAd5K,KAAeu2M,GAAKu4T,GAAL9ugB,QACjD,CAAE,MAAO+Y,GACR/Y,KAAK+Y,MAAMA,EACZ,CACD,CAEA,SAAAgjgB,GAGwBhjgB,GACvB,MAAM4se,EAASpvS,GAAK2yI,GAALlpV,MAAY2lf,QACrB/zd,MAAEA,EAAKqrf,eAAEA,GAAmBnB,GAAAZ,GAAAl7gB,KAAKk9gB,IAAatygB,KAAlB5K,KAAmB+Y;AAGrDo/f,GAAiB8E,GAEZt3B,GAELrvS,GAAKmkU,GAALz6gB,KAAsBy8d,GAAO,KAC5BkpB,EACCpvS,GAAKu4T,GAAL9ugB,MACA,IAAM+Y,EACN,IAAM6Y,KAGT,CAEA,SAAAsrf,GAMcnkgB,GACb,IAAIokgB,KACAC;AAEJ,MAAMxrf,EAAQA,KACTurf,EXuCL5ngB,QAAQC,KAAK,oDWlCZ2ngB,KAEIC,GEwQA,WAQL,MAAM,IAAI18gB,MAAM,qDAElB,CAVO,GFpQwB,OAAxB61M,GAAKkkU,GAALz6gB,OACHq9gB,GAAa9mU,GAAKkkU,GAALz6gB,MAAqB,KACjCs2M,GAAKmkU,GAALz6gB,KAAsB,QAIxB87gB,GAAAZ,GAAAl7gB,KAAK40K,IAAIhqK,KAAT5K,KAAU,KACT87gB,GAAAZ,GAAAl7gB,KAAKk8gB,IAAOtxgB,KAAZ5K;AAcF,MAAO,CAAE4xB,QAAOqrf,eAVOA,KACtB,IACCG,KACA7mU,GAAK2yI,GAALlpV,MAAYguE,UAAUj1D,EAAO6Y,GAC7Bwrf,IACD,CAAE,MAAOlqe,GACR2le,GAAsB3le,EAAKqjK,GAAK+jU,GAALt6gB,OAAgBu2M,GAAK+jU,GAALt6gB,MAAa8nB,OACzD,GAIF,CAAC,SAAAk0f,KAGA,MAAMpoP,EAAUr9E,GAAK2yI,GAALlpV,MAAY4zR;AACvBA,IAEL5zR,KAAKq8gB,cACL/lU,GAAKkkU,GAALx6gB,KAAuBy8d,GAAO,IAAM7oM,EAAQr9E,GAAKu4T,GAAL9ugB,SAE5Cm4gB,GAAiB,KAChB,IAAIruI,EAAYxzL,GAAKokU,GAAL16gB,KAA2B2E,SAAS+pe,0BAChD58E,EAASwrH;AAEbxzI,EAASx4L,OAAOwgN,GAEhBx7M,GAAKikU,GAALv6gB,KAAoB87gB,GAAAZ,GAAAl7gB,KAAK40K,IAAIhqK,KAAT5K,KAAU,IACtBy8d,GAAO,IAAMlmR,GAAK8jU,GAALr6gB,MAAc4K,KAAd5K,KAAe8xZ,MAGR,IAAxBv7M,GAAKqkU,GAAL56gB,QACHu2M,GAAKu4T,GAAL9ugB,MAAag9K,OAAO8sN,GACpBxzL,GAAKokU,GAAL16gB,KAA2B,MAE3Bq9gB,GAAoC9mU,GAAKikU,GAALx6gB,MAAuB,KAC1Ds2M,GAAKkkU,GAALx6gB,KAAuB,QAGxB87gB,GAAAZ,GAAAl7gB,KAAKigT,IAAQr1S,KAAb5K,KAAoC48gB,OAGvC,CAAC,SAAAV,KAGA,IASC,GARAl8gB,KAAKq8gB,WAAar8gB,KAAKs8gB,sBACvBhmU,GAAKskU,GAAL56gB,KAAsB,GACtBs2M,GAAKqkU,GAAL36gB,KAA4B,GAE5Bs2M,GAAKikU,GAALv6gB,KAAoBy8d,GAAO,KAC1BlmR,GAAK8jU,GAALr6gB,MAAc4K,KAAd5K,KAAeu2M,GAAKu4T,GAAL9ugB,UAGZu2M,GAAKqkU,GAAL56gB,MAAsB,EAAG,CAC5B,IAAI8pY,EAAYxzL,GAAKokU,GAAL16gB,KAA2B2E,SAAS+pe;AACpD6uC,GAAYhnU,GAAKgkU,GAALv6gB,MAAmB8pY;AAE/B,MAAMl2G,EAAiDr9E,GAAK2yI,GAALlpV,MAAY4zR;AACnEt9E,GAAKkkU,GAALx6gB,KAAuBy8d,GAAO,IAAM7oM,EAAQr9E,GAAKu4T,GAAL9ugB,QAC7C,MACC87gB,GAAAZ,GAAAl7gB,KAAKigT,IAAQr1S,KAAb5K,KAAoC48gB,GAEtC,CAAE,MAAO7jgB,GACR/Y,KAAK+Y,MAAMA,EACZ,CACD,CAEA,SAAAknS,GAGSu8N,GACRx8gB,KAAKq8gB,cAILG,EAAMgB,iBAAiBjnU,GAAKukU,GAAL96gB,MAAqBu2M,GAAKwkU,GAAL/6gB,MAC7C,CAAC,SAAA40K,GA0BItkJ,GACJ,IAAI2pf,EAAkBxB,GAClBuB,EAAoBtB,GACpB+E,EAAe9F;AAEnBwC,GAAkB5jU,GAAK+jU,GAALt6gB,OAClBk6gB,GAAoB3jU,GAAK+jU,GAALt6gB,OACpB43gB,EAAsBrhU,GAAK+jU,GAALt6gB,MAAay6J;AAEnC,IAEC,OADAijX,GAAMC,SACCrtf,GACR,CAAE,MAAOjwB,GAER,OADAk4gB,GAAal4gB,GACN,IACR,CAAC,QACA85gB,GAAkBF,GAClBC,GAAoBF,GACpBpC,EAAsB6F,EACvB,CACD,CAEA,SAAAhB,GAMsB98gB,EAAG68gB,GAEN,IAAAoB;AADb59gB,KAAKs8gB,uBASVhmU,GAAKskU,GAAL56gB,KAAAu2M,GAAKqkU,GAAL56gB,MAAuBL,GAEK,IAAxB42M,GAAKqkU,GAAL56gB,QACH87gB,GAAAZ,GAAAl7gB,KAAKigT,IAAQr1S,KAAb5K,KAAcw8gB,GAEVjmU,GAAKikU,GAALx6gB,OACHq9gB,GAAa9mU,GAAKikU,GAALx6gB,MAAsB,KAClCs2M,GAAKkkU,GAALx6gB,KAAuB,QAIrBu2M,GAAKmkU,GAAL16gB,QACHu2M,GAAKu4T,GAAL9ugB,MAAag9K,OAAOu5B,GAAKmkU,GAAL16gB,OACpBs2M,GAAKokU,GAAL16gB,KAA2B,SArBxBA,KAAK8nB,QACRg0f,GAAAZ,GAAA0C,EAAA59gB,KAAK8nB,OAAO20f,IAAqB7xgB,KAAAgzgB,EAACj+gB,EAAG68gB,EAuBxC,CAAC,SAAAQ,GAsDajkgB,GACTw9L,GAAKgkU,GAALv6gB,QACH69gB,GAAetnU,GAAKgkU,GAALv6gB,OACfs2M,GAAKikU,GAALv6gB,KAAoB,OAGjBu2M,GAAKikU,GAALx6gB,QACH69gB,GAAetnU,GAAKikU,GAALx6gB,OACfs2M,GAAKkkU,GAALx6gB,KAAuB,OAGpBu2M,GAAKkkU,GAALz6gB,QACH69gB,GAAetnU,GAAKkkU,GAALz6gB,OACfs2M,GAAKmkU,GAALz6gB,KAAsB,OAGnB62gB,IACHE,EAA8CxgU,GAAK6jU,GAALp6gB,OVxZ1C,SAAcmgJ,EAAQ,GAC5B,GAAI02X,EAAW,CAId,IAHA,IAAIv2gB,EAAI6/I,EACJj8H,EAAO0yf,EAEJt2gB,KACN4jB,EAAoC+yf,GAAiB/yf;AAGtD0yf,EAAe1yf,CAChB,CACD,CAXO,GU0ZJ6yf,EAAiBG;AAGlB,IAAIvxB,EAASpvS,GAAK2yI,GAALlpV,MAAY2lf;AAGzB,MAAMm4B,EAAuBC,IAC5B,MAAMnsf,MAAEA,EAAKqrf,eAAEA,GAAmBnB,GAAAZ,GAAAl7gB,KAAKk9gB,IAAatygB,KAAlB5K,KAAmB+9gB;AAErDd,IAEIt3B,GACHrvS,GAAKmkU,GAALz6gB,KAAsB87gB,GAAAZ,GAAAl7gB,KAAK40K,IAAIhqK,KAAT5K,KAAU,KAC/B,IACC,OAAOy8d,GAAO,KAGb,IAAI+7C,EAAgCC;AAEpCD,EAAOv9f,EAAIjb,KACXw4gB,EAAOtsgB,GAAK6sgB,IAEZpzB,EACCpvS,GAAKu4T,GAAL9ugB,MACA,IAAM+9gB,EACN,IAAMnsf,IAGT,CAAE,MAAO7Y,GAER,OADA8/f,GAAsB9/f,EAA8Bw9L,GAAK+jU,GAALt6gB,MAAa8nB,QAC1D,IACR;AAKHqwf,GAAiB,KAGhB,IAAIlxf;AACJ,IACCA,EAASjnB,KAAKo7gB,gBAAgBrigB,EAC/B,CAAE,MAAO1Y,GAER,YADAw4gB,GAAsBx4gB,EAAGk2M,GAAK+jU,GAALt6gB,OAAgBu2M,GAAK+jU,GAALt6gB,MAAa8nB,OAEvD,CAGY,OAAXb,GACkB,iBAAXA,GACuC,mBAAlBA,EAAYwsD,KAGpBxsD,EAAQwsD,KAC3Bqqc,EAECz9gB,GAAMw4gB,GAAsBx4gB,EAAGk2M,GAAK+jU,GAALt6gB,OAAgBu2M,GAAK+jU,GAALt6gB,MAAa8nB,SAI9Dg2f,EAAoB72f,IAGvB,CGhRM,SAAS+2f,GAAcC,MAC7B9D,GAAkB,MAClBD,GAAoB,MACpBtC,EAAsB,MAClBqG,GAAkBrB,IAAe32T,YAMtC,CAuFO,SAASi4T,KACf,IAAI1F,EAAgCC,GAChCp2f,EAAWm2f,EAAOv9f,EAClBuhgB,EAA8BI,GAC9BuB,IAAa97f,GAAU+5f;AAK3B,OAHA/5f,GAAUk6f,qBAAqB,EAAGC,GAClCA,EAAM9yH,UAAUy0H,EAAU3F,GAEnB,KACNn2f,GAAUk6f,sBAAsB,EAAGC,GACnCA,EAAM4B,UAAUD,EAAU3F,GAE5B,CCrTO,SAASW,GAAQ7of,GA6BvB,OA1BsB,OAAlBmof,KAGHA,GAAcvsgB,GAAKmygB,QAIL,CACd5jX,IAAKk9W,EACLt0W,KAAM,KACNu/P,QAAS,KACT40G,OAAMA,EACNtrgB,EAdWstgB,KAeXlpf,KACAguf,UAAW,KACXC,GAAI,EACJjtgB,EAAC+yE,EACDm6b,GAAI,EACJ12f,OAAQ2wf,GACRrxO,GAAI,KAQN,CAtCqC,IAAIrjR;AAwClC,MAAM06f,GAAWtjc,OAAO;AA4LxB,SAASujc,GAAapuf,GAC5B,MAAM3wB,EAAIw5gB,GAAQ7of;AAIlB,OAFsBquf,GAAoBh/gB,GAEnCA,CACR,CAQO,SAASi/gB,GAAmBtuf,GAClC,MAAM2of,EAASE,GAAQ7of;AAEvB,OADA2of,EAAOzB,OAASC,EACTwB,CACR,CA8BO,SAAS4F,GAAgB1F,GAC/B,IAAIx2gB,EACAm8gB,EAAqBrG,GACrB3wf,EAASqxf,EAAQrxf;AAErB,IACEi3f,IACU,OAAXj3f,GACAqxf,EAAQ7ngB,IAAMi3K,GACL,MAARzgK,EAAO5b,EAIR,Of7QAqJ,QAAQC,KAAK,sCe6QN2jgB,EAAQ7ngB;AAGhB6ogB,GAAkBryf;AAqBjB,IACCqxf,EAAQjtgB,IAAK,MA9DT,SAAiCitgB,GACvC,IAAIv2G,EAAUu2G,EAAQv2G;AAEtB,GAAgB,OAAZA,EAAkB,CACrBu2G,EAAQv2G,QAAU;AAElB,IAAK,IAAItia,EAAI,EAAGA,EAAIsia,EAAQria,OAAQD,GAAK,EACxCu9gB,GAAsCj7G,EAAQtia,GAEhD,CACD,CAVO,CA+DoB64gB,GACxBx2gB,EAAQq8gB,GAAgB7F,EACzB,CAAC,QACAgB,GAAkB2E,EACnB,CAGD,OAAOn8gB,CACR,CAMO,SAASs8gB,GAAe9F,GAC9B,IAAIx2gB,EAAQk8gB,GAAgB1F;AAEvBA,EAAQ3B,OAAO70gB,KACnBw2gB,EAAQqF,GAAKU,KAMRtC,IAAeC,SAA4B,OAAjB1D,EAAQ91W,OAChB,OAAlBu5W,IAOHA,GAAc11V,QAAQiyV,EAASx2gB,MAC/Bw8gB,IAAgBj4V,QAAQiyV,EAASx2gB,OAEjCw2gB,EAAQ7ngB,EAAI3O,EAIQ,OAAjBw2gB,EAAQ91W,OASV07W,KAMiB,OAAjBK,IAGC7D,MAAqBqB,IAAeC,UACvCuC,GAAavyf,IAAIssf,EAASx2gB,GAG3Bu2gB,GAAsBC,IArBpBH,GAAkBG,EAASE,KAuB/B,CAkCO,SAASgG,GAAyBlG,GACxC,GAAwB,OAApBA,EAAQv2G,QAEZ,IAAK,MAAMvia,KAAK84gB,EAAQv2G,QAGnBvia,EAAE+qN,UAAqB,OAAT/qN,EAAEiwB,IACnBgvf,GAAcj/gB,EAGjB,KAAA8+C;AAAA,SAAAw3E,GAAAt2H,EAAAvB,EAAA0B,GAAAwkD,GAAA3kD,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAAwkD,GAAA3kD,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,2EAAAtnD,GAAAlB,EAAAvB,EAAA0B,GAAA,OAAA1B,EAAA,SAAAuB,GAAA,IAAAvB,EAAA,SAAAuB,GAAA,oBAAAA,MAAA,OAAAA;AAAA,IAAAvB,EAAAuB,EAAA86E,OAAAC;AAAA,YAAAt8E,EAAA,KAAA0B,EAAA1B,EAAA8L,KAAAvK,EAAA;AAAA,oBAAAG,EAAA,OAAAA;AAAA,UAAAqoD,UAAA,uDAAAlY,OAAAtwC,EAAA,EAAAA;AAAA,uBAAAvB,MAAA,IAAAA,MAAAuB,EAAA0nB,OAAAmhC,eAAA7oD,EAAAvB,EAAA,CAAA6D,MAAAnC,EAAA4oD,YAAA,EAAAC,cAAA,EAAAgyB,UAAA,IAAAh7E,EAAAvB,GAAA0B,EAAAH,CAAA,UAAAotI,GAAAptI,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAAq+H,GAAAtqJ,EAAAvB,GAAA,UAAAymD,GAAAllD,EAAAvB,EAAA0B,GAAA,OAAAH,EAAAwsB,IAAA89H,GAAAtqJ,EAAAvB,GAAA0B,IAAA,UAAAmqJ,GAAAtqJ,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDCvbA,IAAI02d,GAAc,KAGdC,GAAa,KAGN5C,GAAgB,KAMhBuC,GAAiB,KAQjBC,GAAe,KAGtBK,GAAwB,KAEjBrH,MACPsH,MAQOC,GAAoB,KASpBC,GAAiB;AAE5B,IAAIC,GAAc;AAGE,IAAI97f;AAExB,IAAI+tT,GAAM;AAAE,IAAAguM,GAAA,IAAA3qa,QAAA6/Y,GAAA,IAAA7/Y,QAAA0wX,GAAA,IAAA1wX,QAAA4qa,GAAA,IAAA5qa,QAAA6qa,GAAA,IAAA7qa,QAAA8qa,GAAA,IAAA9qa,QAAA+qa,GAAA,IAAA/qa,QAAAgra,GAAA,IAAAhra,QAAAira,GAAA,IAAAjra,QAAAkra,GAAA,IAAAlra,QAAA2la,GAAA,IAAA3la,QAAA4la,GAAA,IAAA5la,QAAAmra,GAAA,IAAAnra,QAAAora,GAAA,IAAApra,QAAAqra,GAAA,IAAArra,QAAAsra,GAAA,IAAA/4W;AAEL,MAAMg2W,GA0GZpic;AAAAA,GAAct7E,OAAAyghB,UAAAzghB,MAAA0ghB,GAAA1ghB,KAAA,KAzGT8xU,MAGLpuJ,GAAA1jL,KAAA8/gB,OAAiB3sY,GAAAnzI,KAAA,aAKjB0jL,GAAA1jL,KAAAg1f,GAAQ,MAGRtxU,GAAA1jL,KAAA6le,GAAQ,MAER1yV,GAAAnzI,KAAA,iBACiB,IAAIq3B,KAErB87G,GAAAnzI,KAAA,UAMU,IAAIq3B,KAEd87G,GAAAnzI,KAAA,WAKW,IAAIq3B,KAOfqsJ,GAAA1jL,KAAA+/gB,GAAoB,IAAIh8f,KAMxB2/J,GAAA1jL,KAAAgghB,GAAqB,IAAIj8f,KAKzB2/J,GAAA1jL,KAAAighB,GAAW,GAMXv8V,GAAA1jL,KAAAkghB,GAAoB,IAAI7of,KAOxBqsJ,GAAA1jL,KAAAmghB,GAAY,MAMZz8V,GAAA1jL,KAAAoghB,GAAS,IAMT18V,GAAA1jL,KAAAqghB,GAAe,IAMf38V,GAAA1jL,KAAA86gB,GAAiB,IAAI/2f,KAMrB2/J,GAAA1jL,KAAA+6gB,GAAuB,IAAIh3f,KAS3B2/J,GAAA1jL,KAAAsghB,GAAoB,IAAIjpf,KAMxBqsJ,GAAA1jL,KAAAughB,GAAsB,IAAIx8f,KAAMovH,GAAAnzI,KAAA,cAIhC0jL,GAAA1jL,KAAAwghB,OAIoB,OAAfhB,GACHD,GAAcC,GAAax/gB,MAE3Bs2M,GAAWuvR,GAAX25C,GAAmBx/gB,MACnBs2M,GAAK0+S,GAALh1f,KAAaw/gB,KAGdA,GAAax/gB,IACd,CA8BA88gB,YAAYtE,GACNjiU,GAAK+pU,GAALtghB,MAAuB4wB,IAAI4nf,IAC/BjiU,GAAK+pU,GAALtghB,MAAuB6sB,IAAI2rf,EAAQ,CAAE74gB,EAAG,GAAIwK,EAAG,KAEhDosM,GAAKgqU,GAALvghB,MAAyBslF,OAAOkzb,EACjC,CAQAmI,cAAcnI,EAAQ7+f,EAAYtZ,GAAML,KAAKuhK,SAASlhK,IACrD,IAAI0nL,EAAUwuB,GAAK+pU,GAALtghB,MAAuBssB,IAAIksf;AACzC,GAAIzwV,EAAS,CAGZ,IAAK,IAAI1nL,KAFTk2M,GAAK+pU,GAALtghB,MAAuBslF,OAAOkzb,GAEhBzwV,EAAQpoL,GACrBq5gB,GAAkB34gB,EAAGw5gB,MACrBlggB,EAAStZ;AAGV,IAAKA,KAAK0nL,EAAQ59K,EACjB6ugB,GAAkB34gB,EAAGi5gB,MACrB3/f,EAAStZ,EAEX,CACAk2M,GAAKgqU,GAALvghB,MAAyB43C,IAAI4ge,EAC9B,CAsTAtxV,QAAQ32I,EAAQ5tC,EAAOi+gB,MAClBrwe,EAAOj/B,IAAMi3K,GAAkBvoL,KAAK0uE,SAAS99C,IAAI2f,IACpDvwC,KAAK0uE,SAAS7hD,IAAI0jB,EAAQA,EAAOj/B,GAID,KAA5Bi/B,EAAOrkC,EAAI6pgB,KACf/1gB,KAAKyuE,QAAQ5hD,IAAI0jB,EAAQ,CAAC5tC,EAAOi+gB,IACjCxB,IAAcvyf,IAAI0jB,EAAQ5tC,IAGtB3C,KAAK68gB,UACTtse,EAAOj/B,EAAI3O,EAEb,CAEAwkN,WACCy1T,GAAgB58gB,IACjB,CAEAimN,aACC22T,GAAgB,KAChBwC,GAAe,IAChB,CAEA7lU,QACC,IAKCmmU,MACA9C,GAAgB58gB,KAEhB87gB,GAAA2E,GAAAzghB,KAAK6ghB,IAAQj2gB,KAAb5K,KACD,CAAC,QACA6/gB,GAAc,EACdJ,GAAwB,KACxBE,GAAoB,KACpBC,GAAiB,KACjBF,MAEA9C,GAAgB,KAChBwC,GAAe,KAEf0B,GAAWtqc,OAOZ,CACD,CAEAuqc,UACC,IAAK,MAAMzwf,KAAMimL,GAAKypU,GAALhghB,MAAyBswB,EAAGtwB;AAC7Cu2M,GAAKypU,GAALhghB,MAAwBw2E;AAExB,IAAK,MAAMm/b,KAAY31gB,KAAKghhB,eAAeh6d,SAC1C2ud,EAASric,OAAOmrc;AAGjB3C,GAAA2E,GAAAzghB,KAAKihhB,IAAOr2gB,KAAZ5K,MACAu2M,GAAK4pU,GAALnghB,OAAgBg1E,SACjB,CAKAksc,wBAAwB1I,GACvBjiU,GAAK8pU,GAALrghB,MAAkB4H,KAAK4wgB,EACxB,CAqIA9uH,UAAUy0H,EAAU3F,GAGnB,GAFAliU,GAAK2pU,GAALjghB,KAAAu2M,GAAK0pU,GAALjghB,MAAiB,GAEbm+gB,EAAU,CACb,IAAIgD,EAAyB5qU,GAAK2pU,GAALlghB,MAAuBssB,IAAIksf,IAAW;AACnEjiU,GAAK2pU,GAALlghB,MAAuB6sB,IAAI2rf,EAAQ2I,EAAyB,EAC7D,CACD,CAMA/C,UAAUD,EAAU3F,GAGnB,GAFAliU,GAAK2pU,GAALjghB,KAAAu2M,GAAK0pU,GAALjghB,MAAiB,GAEbm+gB,EAAU,CACb,IAAIgD,EAAyB5qU,GAAK2pU,GAALlghB,MAAuBssB,IAAIksf,IAAW;AAEpC,IAA3B2I,EACH5qU,GAAK2pU,GAALlghB,MAAuBslF,OAAOkzb,GAE9BjiU,GAAK2pU,GAALlghB,MAAuB6sB,IAAI2rf,EAAQ2I,EAAyB,EAE9D,CAEI5qU,GAAKiqU,GAALxghB,QACJs2M,GAAKkqU,GAALxghB,SAEAm4gB,GAAiB,KAChB7hU,GAAKkqU,GAALxghB,SAEIA,KAAK6mK,QACR7mK,KAAKu5M,UAGR,CAMAikU,iBAAiB7D,EAAeC,GAC/B,IAAK,MAAMv5gB,KAAKs5gB,EACfpjU,GAAKukU,GAAL96gB,MAAoB43C,IAAIv3C;AAGzB,IAAK,MAAMA,KAAKu5gB,EACfrjU,GAAKwkU,GAAL/6gB,MAA0B43C,IAAIv3C;AAG/Bs5gB,EAAcnjc,QACdojc,EAAoBpjc,OACrB,CAGAumc,SAASzsf,GACRimL,GAAKwpU,GAAL//gB,MAAuB43C,IAAItnB,EAC5B,CAGA8wf,UAAU9wf,GACTimL,GAAKypU,GAALhghB,MAAwB43C,IAAItnB,EAC7B,CAEA+wf,UACC,OAAQ9qU,GAAK4pU,GAALnghB,OAAAs2M,GAAK6pU,GAALnghB,KAAmB21gB,MAAYj1W,OACxC,CAEA,aAAAi9W,GACC,GAAsB,OAAlBf,GAAwB,CAC3B,MAAMJ,EAASI,GAAgB,IAAIc;AAE9BgC,IAAkBtH,IACtBD,GAAiB,KACX5hU,GAAMupU,GAANtD,IACJA,EAAMjjU,SAIV,CAEA,OAAOqjU,EACR,CAEAjqgB,QAEEysgB,GAAe,IA6CjB,CAMA79W,SAASi3W,GAKR,GAJAiH,GAAwBjH,IAKvBA,EAAOv9f,GAAGohgB,YACD,SAAR7D,EAAOtsgB,IACIysgB,MAAXH,EAAOtsgB,EAHT,CAWA,IAFA,IAAI7L,EAAIm4gB,EAEY,OAAbn4gB,EAAEynB,QAAiB,CAEzB,IAAI8rH,GADJvzI,EAAIA,EAAEynB,QACQ5b;AAKd,GAA0B,OAAtByzgB,IAA8Bt/gB,IAAMo4gB,MAUjB,OAApBC,IAAiDc,EAApBd,GAAgBxsgB,GAG9C;AAIF,GAAU,GAAL0nI,EAA8C,CAClD,KAAaylY,KAARzlY,GAEJ;AAGDvzI,EAAE6L,GAAKmtgB,IACR,CACD,CAEA9iU,GAAK6pU,GAALpghB,MAAY4H,KAAKvH,EAtCjB,MAFCm4gB,EAAOv9f,EAAEy+f,aAAalB,EAyCxB,EA/2BiB,SAAA8I,KAuHhB,GAAIthhB,KAAK68gB,QAAS;AAElB,IAAK,MAAMrE,KAAUjiU,GAAK2pU,GAALlghB,MAAuB04C,OAAQ,CAInD,IAHA,IAAIr4C,EAAIm4gB,EACJ+I,KAEgB,OAAblhhB,EAAEynB,QAAiB,CACzB,GAAIyuL,GAAK+pU,GAALtghB,MAAuB4wB,IAAIvwB,GAAI,CAClCkhhB;AACA,KACD,CAEAlhhB,EAAIA,EAAEynB,MACP,CAEA,IAAKy5f,EACJ,QAEF,CAEA,QACD,CAAC,SAAAV,KAsCAvqU,GAAKwpU,GAAL9/gB,SAEI6/gB,KAAgB,MACnB/D,GAAA2E,GAAAzghB,KAAKihhB,IAAOr2gB,KAAZ5K,MAyvBH,WAyBC,KH3zBM,WAQL,MAAM,IAAIU,MAAM,oDAElB,CAVO,EG6zBN,CAAE,MAAOqY,GAQR8/f,GAAsB9/f,EAAO0mgB,GAC9B,CACD,CArCA;AAzuBE,IAAK,MAAMp/gB,KAAKk2M,GAAKukU,GAAL96gB,MACfu2M,GAAKwkU,GAAL/6gB,MAA0BslF,OAAOjlF,GACjC24gB,GAAkB34gB,EAAGw5gB,MACrB75gB,KAAKuhK,SAASlhK;AAGf,IAAK,MAAMA,KAAKk2M,GAAKwkU,GAAL/6gB,MACfg5gB,GAAkB34gB,EAAGi5gB,MACrBt5gB,KAAKuhK,SAASlhK;AAGf,MAAMmhhB,EAAQjrU,GAAK6pU,GAALpghB;AACds2M,GAAK8pU,GAALpghB,KAAc,IAEdA,KAAK2S;AAGL,IAAIiwZ,EAAW+8G,GAAoB,GAG/B8B,EAAiB,GAMjBC,EAAW9B,GAAiB;AAEhC,IAAK,MAAMpxf,KAAQgzf,EAClB,IACC1F,GAAA2E,GAAAzghB,KAAK2hhB,IAAS/2gB,KAAd5K,KAAewuB,EAAMo0Y,EAAS6+G,EAC/B,CAAE,MAAOphhB,GAQR,MAPAuhhB,GAAUpzf,GAMLstf,GAAA2E,GAAAzghB,KAAKshhB,IAAY12gB,KAAjB5K,OAAqBA,KAAK+ghB,UACzB1ghB,CACP,CAMD,GAFAu8gB,GAAgB,KAEZ8E,EAAQnhhB,OAAS,EAAG,CACvB,IAAIi8gB,EAAQkB,GAAMC;AAClB,IAAK,MAAMt9gB,KAAKqhhB,EACflF,EAAMj7W,SAASlhK,EAEjB,CAMA,GAJAs/gB,GAAoB,KACpBC,GAAiB,KAGb9D,GAAA2E,GAAAzghB,KAAKshhB,IAAY12gB,KAAjB5K,MAAqB,CACxB87gB,GAAA2E,GAAAzghB,KAAK6hhB,IAAcj3gB,KAAnB5K,KAAoByhhB,GACpB3F,GAAA2E,GAAAzghB,KAAK6hhB,IAAcj3gB,KAAnB5K,KAAoB4ia;AAEpB,IAAK,MAAOvia,EAAGvB,KAAMy3M,GAAK+pU,GAALtghB,MACpB8hhB,GAAazhhB,EAAGvB;AAGO,IAAAijhB;AAIxB,YAJIL,EAAQnhhB,OAAS,GACCu7gB,GAAA2E,GAAAsB,EAAyBnF,GAAgBiE,IAAQj2gB,KAAAm3gB,GAIxE,CAEA,MAAMC,EAAgBlG,GAAA2E,GAAAzghB,KAAKiihB,IAAmBr3gB,KAAxB5K;AAEtB,GAAIgihB,EAMH,OAHAlG,GAAA2E,GAAAzghB,KAAK6hhB,IAAcj3gB,KAAnB5K,KAAoByhhB,GACpB3F,GAAA2E,GAAAzghB,KAAK6hhB,IAAcj3gB,KAAnB5K,KAAoB4ia,QACpBk5G,GAAA2E,GAAAuB,EAAcE,IAAMt3gB,KAApBo3gB,EAAqBhihB;AAKtBu2M,GAAKukU,GAAL96gB,MAAoBw2E,QACpB+/H,GAAKwkU,GAAL/6gB,MAA0Bw2E;AAG1B,IAAK,MAAMlmD,KAAMimL,GAAKwpU,GAAL//gB,MAAwBswB,EAAGtwB;AAC5Cu2M,GAAKwpU,GAAL//gB,MAAuBw2E,QAEvB2oc,GAAiBn/gB,KACjBmihB,GAAqBV,GACrBU,GAAqBv/G,GACrBu8G,GAAiB,KAEjB5oU,GAAK4pU,GAALnghB,OAAgBg1E;AAEhB,IA4ByBotc,EA5BrBC,EAAkEzF;AAmBtE,GAjBsB,IAAlBrmU,GAAK0pU,GAALjghB,OAA+C,IAAvBu2M,GAAK6pU,GAALpghB,MAAYO,QAA+B,OAAf8hhB,GACvDvG,GAAA2E,GAAAzghB,KAAKihhB,IAAOr2gB,KAAZ5K,MAgBGu2M,GAAK6pU,GAALpghB,MAAYO,OAAS,EACxB,GAAmB,OAAf8hhB,EAAqB,CACxB,MAAM7F,EAAQ6F;AACd9rU,GAAM6pU,GAAN5D,GAAa50gB,QAAQ2uM,GAAK6pU,GAALpghB,MAAYumB,OAAQ1lB,IAAO01M,GAAM6pU,GAAN5D,GAAaz3gB,SAASlE,IACvE,MACCwhhB,EAAarihB;AAII,OAAfqihB,GACHvG,GAAA2E,GAAA2B,EAAAC,EAAWxB,IAAQj2gB,KAAAw3gB,EAErB,CAEA,SAAAT,GAOUnzf,EAAMo0Y,EAAS6+G,GACxBjzf,EAAKtiB,GAAKmtgB;AAIV,IAFA,IAAIb,EAAShqf,EAAKujB,MAEA,OAAXyme,GAAiB,CACvB,IAAI5kY,EAAQ4kY,EAAOtsgB,EACfo2gB,KAAkB,GAAL1uY;AAKjB,KAJ0B0uY,GAAsBjJ,KAARzlY,GAEG2uY,KAAR3uY,GAAwB2iE,GAAK+pU,GAALtghB,MAAuB4wB,IAAI4nf,KAE3D,OAAdA,EAAOlof,GAAa,CAC5Bgyf,EACH9J,EAAOtsgB,GAAKmtgB,KACOT,EAARhlY,EACXgvR,EAAQh7Z,KAAK4wgB,GAGHgK,GAAShK,KACNiK,GAAR7uY,GAA6B2iE,GAAKwkU,GAAL/6gB,MAA0B43C,IAAI4ge,GAChE8G,GAAc9G;AAGf,IAAI1xW,EAAQ0xW,EAAOzme;AAEnB,GAAc,OAAV+0H,EAAgB,CACnB0xW,EAAS1xW;AACT,QACD,CACD,CAEA,KAAkB,OAAX0xW,GAAiB,CACvB,IAAIv/a,EAAOu/a,EAAOv/a;AAElB,GAAa,OAATA,EAAe,CAClBu/a,EAASv/a;AACT,KACD,CAEAu/a,EAASA,EAAO1wf,MACjB,CACD,CACD,CAAC,SAAAm6f,KAKA,IAFA,IAAIzF,EAAQjmU,GAAKy+S,GAALh1f,MAEK,OAAVw8gB,GAAgB,CACtB,IAAKA,EAAMK,QAEV,IAAK,MAAOl6gB,GAAO,CAAGi+gB,MAAgB5ghB,KAAKyuE,QAC1C,GAAI+tc,EAAM/tc,QAAQ79C,IAAIjuB,KAAWi+gB,EAChC,OAAOpE;AAKVA,EAAQjmU,GAAMy+S,GAANwnB,EACT,CAEA,OAAO,IACR,CAEA,SAAA0F,GAGO1F,GACN,IAAK,MAAOjse,EAAQ5tC,KAAU65gB,EAAM/tc,SAC9BzuE,KAAK0uE,SAAS99C,IAAI2f,IAAWise,EAAM9tc,SAAS99C,IAAI2f,IACpDvwC,KAAK0uE,SAAS7hD,IAAI0jB,EAAQise,EAAM9tc,SAASpiD,IAAIikB,IAG9CvwC,KAAKyuE,QAAQ5hD,IAAI0jB,EAAQ5tC;AAG1B,IAAK,MAAO61gB,EAAQ7C,KAAa6G,EAAMwE,eAAgB,CACtD,MAAMrhhB,EAAIK,KAAKghhB,eAAe10f,IAAIksf;AAC9B74gB,GAAGg2gB,EAASj1W,QAAQjtF,KAAK9zE,EAAEq1E,SAASM,MAAM31E,EAAE2zE,OACjD,CAIAkpc,EAAMwE,eAAexqc,QAGrBx2E,KAAKw9gB,iBAAiBjnU,GAAMukU,GAAN0B,GAAsBjmU,GAAMwkU,GAANyB;AAU5C,MAAMn+Z,EAAQ17G,IACb,IAAI27gB,EAAY37gB,EAAM27gB;AACtB,GAAkB,OAAdA,MAIW9E,EAAV72gB,EAAMuJ,IAA8B,KAAPvJ,EAAMuJ,GAIxC,IAAK,MAAMw2gB,KAAYpE,EAAW,CACjC,IAAI1qY,EAAQ8uY,EAASx2gB;AAErB,GAAastgB,EAAR5lY,EACJv1B,EAA6Bqka;IACvB,CACN,IAAIlK,EAAgCkK;AAE3B,QAAL9uY,IAAmC5zI,KAAKghhB,eAAepwf,IAAI4nf,KAC9DjiU,GAAKwkU,GAAL/6gB,MAA0BslF,OAAOkzb,GACjCQ,GAAkBR,EAAQqB,MAC1B75gB,KAAKuhK,SAASi3W,GAEhB,CACD;AAGD,IAAK,MAAMjoe,KAAUvwC,KAAKyuE,QAAQ/1B,OACjC2lE,EAAK9tE;AAGNvwC,KAAK+8gB,SAAS,IAAMP,EAAMuE,WAC1BjF,GAAA2E,GAAAjE,EAAMyE,IAAOr2gB,KAAb4xgB,GAEAI,GAAgB58gB,KAChB87gB,GAAA2E,GAAAzghB,KAAK6ghB,IAAQj2gB,KAAb5K,KACD,CAEA,SAAA6hhB,GAGej/G,GACd,IAAK,IAAItia,EAAI,EAAGA,EAAIsia,EAAQria,OAAQD,GAAK,EACxCo5gB,GAAa92G,EAAQtia,GAAIi2M,GAAKukU,GAAL96gB,MAAqBu2M,GAAKwkU,GAAL/6gB,MAEhD,CAgNC,SAAAihhB,KAwMA,GAAKjhhB,KAAK6mK,OAAV,CAEA,IAAI4pG,EAAOl6D,GAAKy+S,GAALh1f,MACPi5F,EAAOs9G,GAAKsvR,GAAL7le;AAEE,OAATywQ,EACH8uQ,GAActmb,EAEdq9G,GAAKuvR,GAALp1N,EAAax3K,GAGD,OAATA,EACHumb,GAAa/uQ,EAEbn6D,GAAK0+S,GAAL/7Z,EAAaw3K,GAGdzwQ,KAAK6mK,SAjBa,CAkBnB,CAWM,SAASy3I,GAAUhuR,GACzB,IAAIqyf,EAAoBvK;AACxBA;AAEA,IACC,IAAInxf;AAUJ,IARIqJ,IACmB,OAAlBssf,IAA2BA,GAAcC,SAC5CD,GAAcrjU,QAGftyL,EAASqJ,OAGG,CAGZ,GAFAgof,KAEsB,OAAlBsE,GACH,OAAyB31f;AAG1B21f,GAAcrjU,OACf,CACD,CAAC,QACA6+T,GAAmBuK,CACpB,CACD,CAlCAC,GA14BalF;AAs9BN,IAAImF,GAAsB;AAMjC,SAASV,GAAqBv/G,GAC7B,IAAIria,EAASqia,EAAQria;AACrB,GAAe,IAAXA,EAAJ,CAIA,IAFA,IAAID,EAAI,EAEDA,EAAIC,GAAQ,CAClB,IAAIi4gB,EAAS51G,EAAQtia;AAErB,KAAa,MAARk4gB,EAAOtsgB,IAAkCs2gB,GAAShK,KACtDqK,GAAsB,IAAI9+f,IAE1Bu7f,GAAc9G,GAQG,OAAhBA,EAAOn1W,MACU,OAAjBm1W,EAAOzme,OACU,OAAjByme,EAAOr4T,OACa,OAApBq4T,EAAOptT,UACO,OAAdotT,EAAOpxO,IAGP07O,GAActK,GAKXqK,IAAqBxkgB,KAAO,GAAG,CAClCyigB,GAAWtqc;AAEX,IAAK,MAAMn2E,KAAKwihB,GAAqB,CAEpC,GAAQ,MAAHxihB,EAAE6L,EAAgC;AAIvC,MAAM62gB,EAAkB,CAAC1ihB;AACzB,IAAIusB,EAAWvsB,EAAEynB;AACjB,KAAoB,OAAb8E,GACFi2f,GAAoBjyf,IAAIhE,KAC3Bi2f,GAAoBv9b,OAAO14D,GAC3Bm2f,EAAgBn7gB,KAAKglB,IAEtBA,EAAWA,EAAS9E;AAGrB,IAAK,IAAI69D,EAAIo9b,EAAgBxihB,OAAS,EAAGolF,GAAK,EAAGA,IAAK,CACrD,MAAMtlF,EAAI0ihB,EAAgBp9b;AAElB,MAAHtlF,EAAE6L,GACPozgB,GAAcj/gB,EACf,CACD,CAEAwihB,GAAoBrsc,OACrB,CAEF,CAEAqsc,GAAsB,IA9DJ,CA+DnB,CAsFO,SAASG,GAAgBxK,GACToE,GAAer7W,SAASi3W,EAC/C,CAiFA,SAASsJ,GAAatJ,EAAQzwV,GAE7B,KAAgBk7V,GAAXzK,EAAOtsgB,GAAwCmtgB,KAAXb,EAAOtsgB,GAAhD,CAIgB2tgB,KAAXrB,EAAOtsgB,EACX67K,EAAQpoL,EAAEiI,KAAK4wgB,GACOc,KAAXd,EAAOtsgB,GAClB67K,EAAQ59K,EAAEvC,KAAK4wgB,GAGhBQ,GAAkBR,EAAQa;AAG1B,IADA,IAAIh5gB,EAAIm4gB,EAAOzme,MACF,OAAN1xC,GACNyhhB,GAAazhhB,EAAG0nL,GAChB1nL,EAAIA,EAAE44F,IAbP,CAeD,CAMA,SAAS2ob,GAAUpJ,GAClBQ,GAAkBR,EAAQa;AAG1B,IADA,IAAIh5gB,EAAIm4gB,EAAOzme,MACF,OAAN1xC,GACNuhhB,GAAUvhhB,GACVA,EAAIA,EAAE44F,IAER,CAlGkB,IAAI5hE;ACtrCf,IAAI6rf,GAAgB,IAAIn/f;AAGxB,MAAM+8f,GAAa,IAAIzpf;AAS9B,IAAI8rf;AAaG,SAAS5ye,GAAOj/B,EAAG24C,GAkBzB,MAhBa,CACZ/9C,EAAG,EACHoF,IACAgtgB,UAAW,KACX9G,OAAMA,EACN+G,GAAI,EACJC,GAAI,EAWN,CAQO,SAASv8f,GAAM3Q,EAAG24C,GACxB,MAAMznD,EAAI+tC,GAAOj/B;AAIjB,OAFAqtgB,GAAoBn8gB,GAEbA,CACR,CASO,SAAS4ghB,GAAeC,EAAeC,KAAmBC,MAChE,MAAM/ghB,EAAI+tC,GAAO8ye;AAWjB,OAVKC,IACJ9ghB,EAAEg1gB,OAASC,GASLj1gB,CACR,CAsBO,SAASqqB,GAAI0jB,EAAQ5tC,EAAO6ghB,MAmBlC,OAjBqB,OAApB9K,MAGE+K,IAAmCC,OAApBhL,GAAgBxsgB,IAEf,QAAjBwsgB,GAAgBxsgB,IACI,OAApBy3gB,KAA6BA,GAAgB/yf,IAAI2f,KJoU7C,WAQL,MAAM,IAAI7vC,MAAM,6CAElB,CAVO,GIzTCg8gB,GAAanse,EANJize,EAAer5U,GAAMxnM,GAASA,EAMPi9gB,GACxC,CASO,SAASlD,GAAanse,EAAQ5tC,EAAOihhB,EAA2B,MACtE,IAAKrze,EAAOine,OAAO70gB,GAAQ,CAC1Bm+gB,GAAWj0f,IAAI0jB,EAAQwue,GAAuBp8gB,EAAQ4tC,EAAOj/B;AAE7D,IAAIkrgB,EAAQkB,GAAMC;AAiClB,GAhCAnB,EAAMt1V,QAAQ32I,EAAQ5tC,GAgCN62gB,EAAXjpe,EAAOrkC,EAAoB,CAC/B,MAAMitgB,EAAkC5oe;AAGxBspe,KAAXtpe,EAAOrkC,GACX2ygB,GAAgB1F,GAKI,OAAjBiG,IACHlG,GAAsBC,EAExB,CAEA5oe,EAAOiue,GAAKU,KAIZ2E,GAAetze,EAAQspe,KAAO+J,GAQX,OAAlBnL,IACmBY,KAAlBZ,GAAcvsgB,KACC,GAAfusgB,GAAcvsgB,KAEU,OAArB43gB,GC3HA,SAA8BnhhB,GACpCmhhB,GAAmBnhhB,CACpB,CAFO,CD4HkB,CAAC4tC,IAEtBuze,GAAiBl8gB,KAAK2oC,KAInBise,EAAMK,SAAWqG,GAAc7kgB,KAAO,IAAM8kgB,IAQ5C,WACNA;AAEA,IAAK,MAAM3K,KAAU0K,GAAe,CAOnC,IAAIhvB;AAJYmlB,KAAXb,EAAOtsgB,GACX8sgB,GAAkBR,EAAQc;AAK3B,IACCplB,EAAQsuB,GAAShK,EAClB,CAAE,MAIDtkB,IACD,CAEIA,GACHorB,GAAc9G,EAEhB,CAEA0K,GAAc1sc,OACf,CA3BO,EALN,CAEA,OAAO7zE,CACR,CAiEO,SAAS+mZ,GAAUn5W,GACzB1jB,GAAI0jB,EAAQA,EAAOj/B,EAAI,EACxB,CAQA,SAASuygB,GAAe5K,EAAQrjgB,EAAQgugB,GACvC,IAAItF,EAAYrF,EAAOqF;AACvB,GAAkB,OAAdA,EAKJ,IAHA,IACI/9gB,EAAS+9gB,EAAU/9gB,OAEdD,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAChC,IAAIoihB,EAAWpE,EAAUh+gB,GACrBszI,EAAQ8uY,EAASx2gB,EAKjB63gB,IAAqBlK,KAARjmY;AAOjB,GAJImwY,GACH/K,GAAkB0J,EAAU9sgB,GAGhB8tgB,OAAR9vY,EAIJsvY,GAActre,IAA2B8qe;KACnC,GAAalJ,EAAR5lY,EAAwB,CACnC,IAAIulY,EAAkCuJ;AAEtCtD,IAAc95b,OAAO6zb,GAERM,MAAR7lY,IAGKwlY,IAARxlY,IACmB,OAAlB6kY,IAAuE,KAA5CA,GAAcvsgB,EAAI4pgB,MAE9C4M,EAASx2gB,GAAKutgB,OAGfoK,GAAe1K,EAASG,KAAasK,GAEvC,MAAO,GAAIG,EAAW,CACrB,IAAIvL,EAAgCkK;AAEvBD,GAAR7uY,GAAuD,OAAxBivY,IACnCA,GAAoBjre,IAAI4ge,GAGQ,OAA7BoL,EACHA,EAAyBh8gB,KAAK4wgB,GAE9BwK,GAAgBxK,EAElB,CACD,CACD,CEjWO,SAASruU,GAAMxnM,GAErB,GAAqB,iBAAVA,GAAgC,OAAVA,GAAkBqzgB,KAAgBrzgB,EAClE,OAAOA;AAGR,MAAMsC,EAAYwwgB,EAAiB9ygB;AAEnC,GAAIsC,IAAcswgB,GAAoBtwgB,IAAcuwgB,EACnD,OAAO7ygB;AAIR,IAAIovQ,EAAU,IAAI16O,IACd2sf,EAAmBhP,EAASrygB,GAC5BqyF,EAAUzkD,GAAO,GAGjB0ze,EAAiBC,GAOjBC,EAAe7zf,IAClB,GAAI4zf,KAAmBD,EACtB,OAAO3zf;AAKR,IAAIoyf,EAAWhK,GACX1jb,EAAUkvb;AAEdhK,GAAoB,MACpBkK,GAAmBH;AAEnB,IAAIh9f,EAASqJ;AAKb,OAHA4pf,GAAoBwI,GACpB0B,GAAmBpvb,GAEZ/tE;AA8BR,OA3BI+8f,GAGHjyQ,EAAQllP,IAAI,SAAU0jB,GAA6B5tC,EAAOpC,SAwBpD,IAAI6pM,MAA0BznM,EAAQ,CAC5CumD,eAAe15C,EAAG07K,EAAM/gI,GAEpB,UAAWA,QACbA,EAAWd,mBACXc,EAAWf,iBACXe,EAAWkxB,UN6UR,WAQL,MAAM,IAAI36E,MAAM,+CAElB,CAVO;AMrUJ,IAAI8B,EAAIuvQ,EAAQzlP,IAAI4+J;AAcpB,YAbUz5J,IAANjvB,EACH2hhB,EAAY,KACX,IAAI3hhB,EAAI+tC,GAAO4Z,EAAWxnD;AAK1B,OAJAovQ,EAAQllP,IAAIq+J,EAAM1oL,GAIXA,IAGRqqB,GAAIrqB,EAAG2nD,EAAWxnD,WAAO,CAI3B,EAEAu/S,eAAe14S,EAAQ0hL,GACtB,IAAI1oL,EAAIuvQ,EAAQzlP,IAAI4+J;AAEpB,QAAUz5J,IAANjvB,GACH,GAAI0oL,KAAQ1hL,EAAQ,CACnB,MAAMhH,EAAI2hhB,EAAY,IAAM5ze,GAAOg4I;AACnCwpF,EAAQllP,IAAIq+J,EAAM1oL,GAClBknZ,GAAU10T,EAKX,OAEAnoE,GAAIrqB,EAAG+lL,GACPmhO,GAAU10T;AAGX,QACD,EAEA1oE,IAAI9iB,EAAQ0hL,EAAM2/R,GACjB,GAAI3/R,IAAS8qV,EACZ,OAAOrzgB;AAOR,IAAIH,EAAIuvQ,EAAQzlP,IAAI4+J,GAChB2lB,EAAS3lB,KAAQ1hL;AAkBrB,QAfUioB,IAANjvB,GAAqBquM,IAAUwkU,EAAe7rgB,EAAQ0hL,IAAO7vG,WAChE74E,EAAI2hhB,EAAY,IAEP5ze,GADA45J,GAAM0G,EAASrnM,EAAO0hL,GAAQ3C,KAUvCwpF,EAAQllP,IAAIq+J,EAAM1oL,SAGTivB,IAANjvB,EAAiB,CACpB,IAAI8O,EAAIgb,GAAI9pB;AACZ,OAAO8O,IAAMi3K,OAAgB92J,EAAYngB,CAC1C,CAEA,OAAOohI,QAAQpmH,IAAI9iB,EAAQ0hL,EAAM2/R,EAClC,EAEAnvX,yBAAyBlyF,EAAQ0hL,GAChC,IAAI/gI,EAAauoF,QAAQh3C,yBAAyBlyF,EAAQ0hL;AAE1D,GAAI/gI,GAAc,UAAWA,EAAY,CACxC,IAAI3nD,EAAIuvQ,EAAQzlP,IAAI4+J;AAChB1oL,IAAG2nD,EAAWxnD,MAAQ2pB,GAAI9pB,GAC/B,MAAO,QAAmBivB,IAAf04B,EAA0B,CACpC,IAAI5Z,EAASwhO,EAAQzlP,IAAI4+J,GACrBvoL,EAAQ4tC,GAAQj/B;AAEpB,QAAemgB,IAAX8e,GAAwB5tC,IAAU4lL,EACrC,MAAO,CACNn/H,cACAC,gBACA1mD,QACA04E,YAGH,CAEA,OAAOlxB,CACR,EAEAv5B,IAAIpnB,EAAQ0hL,GACX,GAAIA,IAAS8qV,EACZ;AAGD,IAAIxzgB,EAAIuvQ,EAAQzlP,IAAI4+J,GAChBt6J,OAAaa,IAANjvB,GAAmBA,EAAE8O,IAAMi3K,GAAkB71C,QAAQ9hH,IAAIpnB,EAAQ0hL;AAE5E,cACOz5J,IAANjvB,GACmB,OAAlBi2gB,MAA4B7nf,GAAOykf,EAAe7rgB,EAAQ0hL,IAAO7vG,kBAExD5pD,IAANjvB,IACHA,EAAI2hhB,EAAY,IAEP5ze,GADA3f,EAAMu5K,GAAM3gM,EAAO0hL,IAAS3C,IAUrCwpF,EAAQllP,IAAIq+J,EAAM1oL,IAGP8pB,GAAI9pB,KACF+lL,KAKR33J,CACR,EAEA/D,IAAIrjB,EAAQ0hL,EAAMvoL,EAAOkod,GACxB,IAAIrod,EAAIuvQ,EAAQzlP,IAAI4+J,GAChBt6J,EAAMs6J,KAAQ1hL;AAGlB,GAAIw6gB,GAA6B,WAAT94V,EACvB,IAAK,IAAI5qL,EAAIqC,EAAOrC,EAAmCkC,EAAG8O,EAAGhR,GAAK,EAAG,CACpE,IAAI+jhB,EAAUtyQ,EAAQzlP,IAAIhsB,EAAI;KACdmxB,IAAZ4yf,EACHx3f,GAAIw3f,EAAS97V,GACHjoL,KAAKkJ,IAIf66gB,EAAUF,EAAY,IAAM5ze,GAAOg4I,IACnCwpF,EAAQllP,IAAIvsB,EAAI,GAAI+jhB,GAMtB,MAOS5yf,IAANjvB,EACEouB,IAAOykf,EAAe7rgB,EAAQ0hL,IAAO7vG,WAMzCxuD,GALArqB,EAAI2hhB,EAAY,IAAM5ze,QAAO9e,IAKtB04K,GAAMxnM,IAEbovQ,EAAQllP,IAAIq+J,EAAM1oL,KAGnBouB,EAAMpuB,EAAE8O,IAAMi3K,EAGd17J,GAAIrqB,EADI2hhB,EAAY,IAAMh6U,GAAMxnM;AAIjC,IAAIwnD,EAAauoF,QAAQh3C,yBAAyBlyF,EAAQ0hL;AAO1D,GAJI/gI,GAAYt9B,KACfs9B,EAAWt9B,IAAIjiB,KAAKigd,EAAUlod,IAG1BiuB,EAAK,CAKT,GAAIozf,GAAoC,iBAAT94V,EAAmB,CACjD,IAAI63G,EAAoChxB,EAAQzlP,IAAI,UAChD9rB,EAAI8K,OAAO4/K;AAEX5/K,OAAOwrP,UAAUt2P,IAAMA,GAAKuiS,EAAGzxR,GAClCub,GAAIk2Q,EAAIviS,EAAI,EAEd,CAEAkpZ,GAAU10T,EACX,CAEA,QACD,EAEAq1G,QAAQ7gM,GACP8iB,GAAI0oE;AAEJ,IAAIsvb,EAAW5xY,QAAQ23D,QAAQ7gM,GAAQ+c,OAAQ0S,IAC9C,IAAIsX,EAASwhO,EAAQzlP,IAAI2M;AACzB,YAAkBxH,IAAX8e,GAAwBA,EAAOj/B,IAAMi3K;AAG7C,IAAK,IAAKtvJ,EAAKsX,KAAWwhO,EACrBxhO,EAAOj/B,IAAMi3K,GAAmBtvJ,KAAOzvB,GAC1C86gB,EAAS18gB,KAAKqxB;AAIhB,OAAOqrf,CACR,EAEAhyY,kBNsHK,WAQL,MAAM,IAAI5xI,MAAM,6CAElB,CAVO,EMpHL,GAEF,KC7UW6jhB,GAMAC,GAGPC,GAEAC;AAMG,SAASC,KACf,QAAgBlzf,IAAZ8yf,GAAJ,CAIAA,GAAU96gB,OACE9E,SACZ6/gB,GAAa,UAAUn/f,KAAK+9D,UAAUC;AAEtC,IAAIuhc,EAAoBjggB,QAAQ1f,UAC5B4/gB,EAAiBnggB,KAAKzf,UACtB6/gB,EAAiB7sH,KAAKhzZ;AAG1Bw/gB,GAAqBpP,EAAewP,EAAgB,cAAcv4f,IAElEo4f,GAAsBrP,EAAewP,EAAgB,eAAev4f,IAEhEopf,EAAckP,KAEGA,EAAmBxO,QAAe3kf,EAClCmzf,EAAmBzO,GAAoB,KACvCyO,EAAmBvO,QAAe5kf,EAEtDmzf,EAAkB7pO,SAAMtpR,GAGrBikf,EAAcoP,KACGA,EAAgBxO,QAAc7kf,EAzBnD,CAkCD,CAMO,SAAS6rf,GAAY36gB,EAAQ,IACnC,OAAOgC,SAASC,eAAejC,EAChC,CAOO,SAASoihB,GAAgB7ggB,GAC/B,OAA2CuggB,GAAmB75gB,KAAKsZ,EACpE,CAOO,SAAS+yf,GAAiB/yf,GAChC,OAA2CwggB,GAAoB95gB,KAAKsZ,EACrE,CASO,SAAS4iJ,GAAM5iJ,EAAM8ggB,GAC3B,IAAKnO,EACJ,OAAOkO,GAAgB7ggB;AAGxB,IAAI4iJ,EAAQi+W,GAAgBnO;AAG5B,GAAc,OAAV9vW,EACHA,EAAQ8vW,EAAalygB,YAAY44gB;KAC3B,GAAI0H,GAA8Bxtb,IAAnBsvE,EAAM1vE,SAAwB,CACnD,IAAI/zF,EAAOi6gB;AAGX,OAFAx2W,GAAOkW,OAAO35K,GACd0zgB,EAAiB1zgB,GACVA,CACR,CAOA,OALI2hhB,GACHC,GAAsCn+W,GAGvCiwW,EAAiBjwW,GACVA,CACR,CAQO,SAASo+W,GAAYhhgB,EAAM8ggB,MACjC,IAAKnO,EAAW,CACf,IAAI9ke,EAAQgze,GAAgB7ggB;AAG5B,OAAI6tB,aAAiBoze,SAA0B,KAAfpze,EAAM9kB,KAAoBgqf,GAAiBlle,GAEpEA,CACR,CAEA,GAAIize,EAAS,CAGZ,GAA+Bxtb,IAA3Bo/a,GAAcx/a,SAAwB,CACzC,IAAI/zF,EAAOi6gB;AAIX,OAFA1G,GAAc55V,OAAO35K,GACrB0zgB,EAAiB1zgB,GACVA,CACR,CAEA4hhB,GAAsCrO,EACvC,CAEA,OAAOA,CACR,CASO,SAASxgX,GAAQlyI,EAAMi8H,EAAQ,EAAG6kY,MACxC,IAAII,EAAevO,EAAYD,EAAe1yf;AAG9C,IAFA,IAAImhgB,EAEGllY,KACNklY,EAAeD,EACfA,EAA4CnO,GAAiBmO;AAG9D,IAAKvO,EACJ,OAAOuO;AAGR,GAAIJ,EAAS,CAGZ,GAA+Bxtb,IAA3B4tb,GAAchub,SAAwB,CACzC,IAAI/zF,EAAOi6gB;AAUX,OANqB,OAAjB8H,EACHC,GAAcpoW,MAAM55K,GAEpB+hhB,EAAapoW,OAAO35K,GAErB0zgB,EAAiB1zgB,GACVA,CACR,CAEA4hhB,GAAsCG,EACvC,CAGA,OADArO,EAAiBqO,GACVA,CACR,CAOO,SAASE,GAAmBphgB,GAClCA,EAAKgzE,YAAc,EACpB,CA6BO,SAASqub,GAAe1qf,EAAK+tc,EAAWpkV,GAC9C,OAAiB,MAAbokV,GAAqBA,IAAc8tC,EAErClyX,EAAK7/I,SAASkvE,cAAch5C,EAAK,CAAE2pH,OAAQ7/I,SAASkvE,cAAch5C,GAInE2pH,EAAK7/I,SAAS46S,gBAAgBqpL,EAAW/tc,EAAK,CAAE2pH,OAAQ7/I,SAAS46S,gBAAgBqpL,EAAW/tc,EAE9F,CAiCO,SAASoqf,GAAiB5hhB,GAChC,GAA2BA,EAAKo0F,UAAWl3F,OAAS,MACnD;AAGD,IAAI04F,EAAO51F,EAAKwmF;AAEhB,KAAgB,OAAToP,GAAmCzB,IAAlByB,EAAK7B,UAC5B6B,EAAKvd,SAEkBr4E,EAAKo0F,WAAqCwB,EAAKxB,UAEtEwB,EAAO51F,EAAKwmF,WAEd,CC5PO,SAAS27b,GAAgBC,GACT,OAAlBhN,KACqB,OAApBC,IRyJC,WAQL,MAAM,IAAIh4gB,MAAM,qCAElB,CAVO,GAjBA,WAQL,MAAM,IAAIA,MAAM,iDAElB,CAVO,IQjIFq+gB,IRiHE,WAQL,MAAM,IAAIr+gB,MAAM,0CAElB,CAVO,EQ9GP,CAsBA,SAASglhB,GAAc5hhB,EAAMwsB,GAC5B,IAAIxI,EAAS2wf;AASE,OAAX3wf,GAA+By6f,KAAXz6f,EAAO5b,IAC9BpI,GAAQy+gB;AAIT,IAAI/J,EAAS,CACZ/9W,IAAKk9W,EACLt0W,KAAM,KACN88C,MAAO,KACPj0M,EAAU2tgB,KAAP/1gB,EACHiuC,MAAO,KACPzhB,KACA4/J,KAAM,KACNj3F,KAAM,KACNnxE,SACA7M,EAAG6M,GAAUA,EAAO7M,EACpBw1P,KAAM,KACNrlD,SAAU,KACVozT,GAAI,EACJp3O,GAAI;AAOLw1O,IAAesE,wBAAwB1I;AAGvC,IAAIn4gB,EAAIm4gB;AAER,GAAYI,EAAP90gB,EACsB,OAAtB67gB,GAEHA,GAAkB/3gB,KAAK4wgB,GAGvBkF,GAAMC,SAASp8W,SAASi3W;KAEnB,GAAW,OAAPlof,EAAa,CACvB,IACCgvf,GAAc9G,EACf,CAAE,MAAOn4gB,GAER,MADAw9gB,GAAerF,GACTn4gB,CACP,CAMY,OAAXA,EAAEgjK,MACa,OAAfhjK,EAAE+qN,UACU,OAAZ/qN,EAAE8/M,OACF9/M,EAAE0xC,QAAU1xC,EAAE6vL,MACPmuV,OAANh+gB,EAAE6L,IAEH7L,EAAIA,EAAE0xC,MACM0we,GAAP3+gB,GAAsCq4gB,MAAPr4gB,GAA0C,OAANzD,IACvEA,EAAE6L,GAAKiwgB,OAGV,CAEA,GAAU,OAAN97gB,IACHA,EAAEynB,OAASA,EAEI,OAAXA,GA7FN,SAAqB0wf,EAAQmN,GAC5B,IAAIC,EAAcD,EAAcz1V;AACZ,OAAhB01V,EACHD,EAAcz1V,KAAOy1V,EAAc5ze,MAAQyme,GAE3CoN,EAAY3sb,KAAOu/a,EACnBA,EAAO/nQ,KAAOm1Q,EACdD,EAAcz1V,KAAOsoV,EAEvB,CATA,CA8Fen4gB,EAAGynB,GAKK,OAApB4wf,IACqBc,EAApBd,GAAgBxsgB,KACT25gB,GAAP/hhB,IACA,CACD,IAAIq1gB,EAAkCT,IACrCS,EAAQv2G,UAAY,IAAIh7Z,KAAKvH,EAC/B,CAGD,OAAOm4gB,CACR,CAMO,SAAS+C,KACf,OAA2B,OAApB7C,KAA6B+K,EACrC,CAKO,SAASr4T,GAAS96L,GACxB,MAAMkof,EAASkN,GAAcI,EAAe;AAG5C,OAFA9M,GAAkBR,EAAQa,MAC1Bb,EAAOptT,SAAW96L,EACXkof,CACR,CAMO,SAASuN,GAAYz1f,GAC3Bk1f;AAUA,IAAI5xY,EAA+B6kY,GAAevsgB;AAOlD,GALEwsgB,MACQuK,GAARrvY,IACqB,OAAtB+jY,GACCA,EAAkBr3gB,EAQnB,OAAOy3gB,GAAmBznf;AAJ1B,IAAIsI,EAA2C++e,GAC9C/+e,EAAQv4B,IAAM,IAAIuH,KAAK0oB,EAK1B,CAKO,SAASynf,GAAmBznf,GAClC,OAAOo1f,GAAc9M,QAAsBtof,EAC5C,CAOO,SAAS01f,GAAgB11f,GAO/B,OANAk1f,KAMOE,GAAcI,QAA6Bx1f,EACnD,CAiDO,SAASkof,GAAOlof,GACtB,OAAOo1f,GAAc9M,EAAQtof,EAC9B,CA4EO,SAASkrf,GAAclrf,EAAIsjH,EAAQ,GACzC,OAAO8xY,GAAcI,EAAgBlyY,EAAOtjH,EAC7C,CAQO,SAAS21f,GAAgB31f,EAAI27c,EAAO,GAAIjqd,EAAQ,GAAIkkgB,EAAW,KPhW/D,SAAiBA,EAAUj6C,EAAMjqd,EAAOsO,GAC9C,MAAM3wB,EAAiBw5gB;AAGvB,IAAIvlP,EAAUsyP,EAAS3/f,OAAQtL,IAAOA,EAAEomgB,SAEpC8E,EAAWl6C,EAAKrod,IAAIjkB;AAcxB,GAAqB,IAAjBqiB,EAAMzhB,QAAmC,IAAnBqzR,EAAQrzR,OAAlC,CAKA,IAAIunB,EAAgC2wf,GAEhClxW,EAmEE,WACN,IAAI0yW,EAAyCxB,GACzCuB,EAAoBtB,GACpB0N,EAA6BzO,EAC7BwH,EAAuCvC;AAM3C,OAAO,SAAiByJ,MACvBlM,GAAkBF,GAClBC,GAAoBF,GACpBpC,EAAsBwO,IAElBC,GAAuCvN,MAApBmB,EAAgB/tgB,IAGtCizgB,GAAgBh4T,WAChBg4T,GAAgBxsgB,QAOlB,CACD,CA3BO,GAlEF2zgB,EACgB,IAAnB1yP,EAAQrzR,OACLqzR,EAAQ,GAAGlzH,QACXkzH,EAAQrzR,OAAS,EAChB8yE,QAAQ3zC,IAAIk0P,EAAQhwQ,IAAK3I,GAAMA,EAAEylJ,UACjC,KAqBD6lX,EAAoBrI;AAGH,IAAjBl8f,EAAMzhB,OAaN+lhB,EACHA,EAAgB7yc,KAAK,KACpB8zF,IACA5tB,IACAqkY,OAGDrkY,IAnB6B2sY,EAAiB7yc,KAAK,IAAMi1Z,EAAO,KAAKpjS,QAAQihV,EAnC9E,MAFCj2f,EAAG61f;AAiBJ,SAASz9C,EAAO1md,GACf,KAAgB82f,MAAXhxf,EAAO5b,GAAZ,CAIAq7J;AAEA,IACCj3I,EAAG,IAAI61f,KAAankgB,GACrB,CAAE,MAAOjJ,GACR8/f,GAAsB9/f,EAAO+O,EAC9B,CAEAk2f,IAVA,CAWD,CAWA,SAASrkY,IACRtmE,QAAQ3zC,IAAI1d,EAAM4B,IAAK4igB,GCclB,SAAuBl2f,GAC7B,IAAIxI,EAAuC2wf;AAE5B,OAAX3wf,GF1GE,WAQL,MAAM,IAAIpnB,MAAM,4CAElB,CAVO;AE8GN,IAAIggK,OAA6DjvI,EAC7Dwnf,EAAS1oe,GAAyBg4I,GAKlCk+V,GAAkB/N,GAGlBgO,EAAY,IAAI3igB;AAwIpB,OMwGM,SAAsBuM,GACrBo1f,GAAciB,QAA0Br2f,EAChD,CAFO,CN9OO,KACZ,IAAIkof,EAAgCC,GAOhC94gB,EAAIg2gB;AACRj1W,EAAU/gK,EAAE+gK;AAEZ,IAICrtF,QAAQ2B,QAAQ1kD,KACdmjD,KAAK9zE,EAAEq1E,QAAU30E,IAGbA,IAAMk2gB,GAAgB52gB,EAAE2zE,OAAOjzE,KAEnCilM,QAAQ04U,GACX,CAAE,MAAOjlgB,GACRpZ,EAAE2zE,OAAOv6D,GACTilgB,IACD,CAwBA,IAAIxB,EAA8BI;AAElC,GAAI6J,EAAgB,CAInB,GAAgB9N,MAAXH,EAAOtsgB,EACX,IAAIq6gB,EAAoBrI;AAGzB,GAECp2f,EAAO7M,GAAGmhgB,cAEVI,EAAMwE,eAAe10f,IAAIksf,IAASllc,OAAOmrc;KAIzC,IAAK,MAAM9+gB,KAAK+mhB,EAAU1/d,SACzBrnD,EAAE2zE,OAAOmrc;AAIXiI,EAAU9ue,IAAIj4C,GACd68gB,EAAMwE,eAAen0f,IAAI2rf,EAAQ74gB,EAClC,CAMA,MAAMghK,EAAUA,CAACh+J,EAAOoW,OAAQ0Y,KAK/B80f,MACAG,EAAUphc,OAAO3lF,GAEboZ,IAAU0lgB,KAEdjC,EAAMr1T,WAEFpuM,GACHkggB,EAAO/sgB,GAAK6pgB,EAGZ2G,GAAazD,EAAQlggB,KAEY,KAA5BkggB,EAAO/sgB,EAAI6pgB,KACfkD,EAAO/sgB,GAAK6pgB,GAcb2G,GAAazD,EAAQt2gB,IAGtB65gB,EAAMv2T;AAGPtmN,EAAE+gK,QAAQjtF,KAAKktF,EAAUtgK,GAAMsgK,EAAQ,KAAMtgK,GAAK,cAGnD+qN,GAAS,KACR,IAAK,MAAMzrN,KAAK+mhB,EACf/mhB,EAAE2zE,OAAOmrc,MAUJ,IAAIprc,QAASuzc,KAEnB,SAAS3tb,EAAKp0F,GACb,SAASmuJ,IACJnuJ,IAAM67J,EACTkmX,EAAO3N,GAIPhgb,EAAKynE,EAEP,CAEA77J,EAAE4uE,KAAKu/E,EAAIA,EACZ,CAZA,CAcK0N,IAEP,CA1KO,CDd+C8lX,KAClD/yc,KAAKi1Z,GACLpzZ,MAAOv8D,GAAU8/f,GAAsB9/f,EAAO+O,IAC9Cw9K,QAAQihV,EACX,CAWD,EOkRC5oU,CAAQuoU,EAAUj6C,EAAMjqd,EAAQglC,IAC/B0+d,GAAcI,EAAe,KAC5Bx1f,KAAM02B,EAAOpjC,IAAI0I,QAGpB,CAmBO,SAASg9I,GAAMh5I,EAAIsjH,EAAQ,GAKjC,OAJa8xY,GAAcjD,GAAe7uY,EAAOtjH,EAKlD,CAiBO,SAASmsc,GAAOnsc,GACtB,OAAOo1f,GAAczC,OAAkC3yf,EACxD,CAKO,SAASu2f,GAAwBrO,GACvC,IAAIptT,EAAWotT,EAAOptT;AACtB,GAAiB,OAAbA,EAAmB,CACtB,MAAM07T,EAA+B/H,GAC/B/E,EAAoBtB;AAC1BqO,OACA7M,GAAoB;AACpB,IACC9uT,EAASxgN,KAAK,KACf,CAAC,QACAm8gB,GAAyBD,GACzB5M,GAAoBF,EACrB,CACD,CACD,CAOO,SAASgN,GAAwB/N,EAAQgO,MAC/C,IAAIzO,EAASS,EAAOlne;AAGpB,IAFAkne,EAAOlne,MAAQkne,EAAO/oV,KAAO,KAEX,OAAXsoV,GAAiB,CACvB,MAAMjzG,EAAaizG,EAAOpxO;AAEP,OAAfm+H,GACHw0G,GAAyB,KACxBx0G,EAAWzvZ,MAAMyggB;AAInB,IAAIt9a,EAAOu/a,EAAOv/a;AAEF4sb,GAAXrN,EAAOtsgB,EAEXssgB,EAAO1wf,OAAS,KAEhB+1f,GAAerF,EAAQyO,GAGxBzO,EAASv/a,CACV,CACD,CAuBO,SAAS4kb,GAAerF,EAAQyO,MACtC,IAAIhnW,MAGFgnW,GAA0BC,OAAX1O,EAAOtsgB,IACN,OAAjBssgB,EAAOr4T,OACc,OAArBq4T,EAAOr4T,MAAMhhM,MAqDR,SAA2B+E,EAAM/E,GACvC,KAAgB,OAAT+E,GAAe,CAErB,IAAI+0E,EAAO/0E,IAAS/E,EAAM,KAAO83f,GAAiB/yf;AAElDA,EAAKw3D,SACLx3D,EAAO+0E,CACR,CACD,CARO,CAnDau/a,EAAOr4T,MAAMjhM,MAAoCs5f,EAAOr4T,MAAMhhM,KAChF8gK,MAGDu4V,EAAOtsgB,GAAK0pgB,EACZoR,GAAwBxO,EAAQyO,IAAehnW,GAC/CknW,GAAiB3O,EAAQ;AAEzB,IAAI4O,EAAc5O,EAAOr4T,OAASq4T,EAAOr4T,MAAMrhN;AAE/C,GAAoB,OAAhBsohB,EACH,IAAK,MAAMv1W,KAAcu1W,EACxBv1W,EAAW3nK;AAIb28gB,GAAwBrO,GAExBA,EAAOtsgB,GAAK0pgB,EACZ4C,EAAOtsgB,GAAK4sgB;AAEZ,IAAIhxf,EAAS0wf,EAAO1wf;AAGL,OAAXA,GAAoC,OAAjBA,EAAOiqB,OAC7B+we,GAActK,GASfA,EAAOv/a,KACNu/a,EAAO/nQ,KACP+nQ,EAAOptT,SACPotT,EAAO/9W,IACP+9W,EAAOn1W,KACPm1W,EAAOlof,GACPkof,EAAOr4T,MACPq4T,EAAOpxO,GACPoxO,EAAOv9f,EACN,IACH,CAsBO,SAAS6ngB,GAActK,GAC7B,IAAI1wf,EAAS0wf,EAAO1wf,OAChB2oP,EAAO+nQ,EAAO/nQ,KACdx3K,EAAOu/a,EAAOv/a;AAEL,OAATw3K,IAAeA,EAAKx3K,KAAOA,GAClB,OAATA,IAAeA,EAAKw3K,KAAOA,GAEhB,OAAX3oP,IACCA,EAAOiqB,QAAUyme,IAAQ1wf,EAAOiqB,MAAQknD,GACxCnxE,EAAOooK,OAASsoV,IAAQ1wf,EAAOooK,KAAOugF,GAE5C,CAYO,SAAS4sQ,GAAa7E,EAAQ7+f,EAAUyjE,MAE9C,IAAIgqc,EAAc;AAElBC,GAAe7O,EAAQ4O;AAEvB,IAAI92f,EAAKA,KACJ8sD,GAASygc,GAAerF,GACxB7+f,GAAUA,KAGX66K,EAAY4yV,EAAY7mhB;AAC5B,GAAIi0L,EAAY,EAAG,CAClB,IAAI65F,EAAQA,MAAQ75F,GAAalkK;AACjC,IAAK,IAAIuhJ,KAAcu1W,EACtBv1W,EAAWknF,IAAIs1B,EAEjB,MACC/9P,GAEF,CAOA,SAAS+2f,GAAe7O,EAAQ4O,EAAar0F,GAC5C,KAAgBwvF,KAAX/J,EAAOtsgB,GAAZ,CACAssgB,EAAOtsgB,GAAKq2gB;AAEZ,IAAIzjhB,EAAI05gB,EAAOr4T,OAASq4T,EAAOr4T,MAAMrhN;AAErC,GAAU,OAANA,EACH,IAAK,MAAM+yK,KAAc/yK,GACpB+yK,EAAWy1W,WAAav0F,IAC3Bq0F,EAAYx/gB,KAAKiqK;AAOpB,IAFA,IAAI/K,EAAQ0xW,EAAOzme,MAEF,OAAV+0H,GAAgB,CACtB,IAAI1Q,EAAU0Q,EAAM7tE;AAIL4sb,GAAV/+W,EAAM56J,GAUVm7gB,GAAevgX,EAAOsgX,KARVjL,MAAVr1W,EAAM56J,GAIK+2gB,GAAVn8W,EAAM56J,GAAwCu2gB,GAAXjK,EAAOtsgB,IAII6mb,GAGlDjsR,EAAQ1Q,CACT,CAlC8B,CAmC/B,CAOO,SAASmxX,GAAc/O,GAC7BgP,GAAgBhP,KACjB,CAMA,SAASgP,GAAgBhP,EAAQzlF,GAChC,GAAgBwvF,KAAX/J,EAAOtsgB,EAAZ,CACAssgB,EAAOtsgB,GAAKq2gB,KAMIlJ,KAAXb,EAAOtsgB,IACX8sgB,GAAkBR,EAAQqB,MAC1B6D,GAAMC,SAASp8W,SAASi3W;AAKzB,IAFA,IAAI1xW,EAAQ0xW,EAAOzme,MAEF,OAAV+0H,GAAgB,CACtB,IAAI1Q,EAAU0Q,EAAM7tE;AAKpBuub,GAAgB1gX,KAJaq1W,MAAVr1W,EAAM56J,GAA4C+2gB,GAAVn8W,EAAM56J,IAI5B6mb,GACrCjsR,EAAQ1Q,CACT,CAEA,IAAIt3J,EAAI05gB,EAAOr4T,OAASq4T,EAAOr4T,MAAMrhN;AAErC,GAAU,OAANA,EACH,IAAK,MAAM+yK,KAAc/yK,GACpB+yK,EAAWy1W,WAAav0F,IAC3BlhR,EAAWxe,IA7BgB,CAiC/B,CAUO,SAASkqX,GAAY/E,EAAQ1uI,GACnC,GAAK0uI,EAAOr4T,MAMZ,IAHA,IAAIj8L,EAAOs0f,EAAOr4T,MAAMjhM,MACpBC,EAAMq5f,EAAOr4T,MAAMhhM,IAEP,OAAT+E,GAAe,CAErB,IAAI+0E,EAAO/0E,IAAS/E,EAAM,KAAO83f,GAAiB/yf;AAElD4lX,EAASx4L,OAAOptL,GAChBA,EAAO+0E,CACR,CACD,CF9V+B,IAAIl1E,IAAI,CACtC,aACA,OACA,MACA,OACA,UACA,QACA,OACA,SACA;AG3YM,IJ0DH0jgB,MAEO1I;AAGJ,SAASgI,GAAyBpkhB,GACxCo8gB,GAAuBp8gB,CACxB,CAGO,IAAI+1gB,GAAkB,KAElB+K;AAGJ,SAASvJ,GAAoBwI,GACnChK,GAAkBgK,CACnB,CAGO,IAAIjK,GAAgB;AAGpB,SAAS0B,GAAkB3B,GACjCC,GAAgBD,CACjB,CAOO,IAAImL,GAAkB;AAGtB,SAAShF,GAAoBh8gB,GACX,OAApB+1gB,KACFiL,KAAoB,IAAI5/f,KAAO6zB,IAAIj1C,EAEtC,CAQO,IAAI+khB,GAAW,KAEXC,GAAe,EAOf7D,GAAmB,KAWnB8D,GAAgB,EAGvBC,GAAe,EAER3D,GAAiB2D;AAGrB,SAASzD,GAAmBzhhB,GAClCuhhB,GAAiBvhhB,CAClB,CAEO,SAASu8gB,KACf,QAAS0I,EACV,CAQO,SAASpF,GAASE,GACxB,IAAI9uY,EAAQ8uY,EAASx2gB;AAErB,GAAa2tgB,KAARjmY,EACJ;AAOD,GAJY4lY,EAAR5lY,IACH8uY,EAASx2gB,IAAK,OAGFotgB,KAAR1lY,EAA4B,CAIhC,IAHA,IAAIk0Y,EAAuCpF,EAASr/W,KAChD9iK,EAASunhB,EAAavnhB,OAEjBD,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAChC,IAAIynhB,EAAaD,EAAaxnhB;AAM9B,GAJIkihB,GAAiCuF,IACpC9I,GAAuC8I,GAGpCA,EAAWvJ,GAAKkE,EAASlE,GAC5B,QAEF,CAGUpF,IAARxlY,GAGgB,OAAjBwrY,IAEApG,GAAkB0J,EAAUrJ,KAE9B,CAEA,QACD,CAOA,SAAS2O,GAA2C/O,EAAQT,EAAQhqf,MACnE,IAAI8vf,EAAYrF,EAAOqF;AACvB,GAAkB,OAAdA,IAEwC,OAApBqF,KAA4BA,GAAgB/yf,IAAIqof,IAIxE,IAAK,IAAI34gB,EAAI,EAAGA,EAAIg+gB,EAAU/9gB,OAAQD,IAAK,CAC1C,IAAIoihB,EAAWpE,EAAUh+gB;AAEPk5gB,EAAbkJ,EAASx2gB,EACb87gB,GAAmEtF,EAAWlK,MACpEA,IAAWkK,IACjBl0f,EACHwqf,GAAkB0J,EAAU7I,MACJR,KAAbqJ,EAASx2gB,GACpB8sgB,GAAkB0J,EAAUpJ,MAE7B0J,GAAuCN,GAEzC,CACD,CAGO,SAAS1D,GAAgB0D,GAC/B,IAAIuF,EAAgBP,GAChBQ,EAAwBP,GACxBQ,EAA4BrE,GAC5B9J,EAAoBtB,GACpB0P,EAAmBzE,GACnByC,EAA6BzO,EAC7B0Q,EAAsB5E,GACtB6E,EAA0BpE,GAE1BtwY,EAAQ8uY,EAASx2gB;AAErBw7gB,GAA0C,KAC1CC,GAAe,EACf7D,GAAmB,KACnBpL,GAAwB,GAAL9kY,EAA0D,KAAX8uY,EAElEiB,GAAkB,KAClB/L,EAAsB8K,EAASjoX,KAC/BgpX,MACAS,KAAmB2D,GAEC,OAAhBnF,EAASt7O,KACZ2yO,GAAyB,KACQ2I,EAASt7O,GAAItxR,MAAMyggB,KAGpDmM,EAASt7O,GAAK;AAGf,IACCs7O,EAASx2gB,GAAK4pgB;AACd,IACI7uf,KAD8By7f,EAASpyf;AAE3Coyf,EAASx2gB,GAAKysgB;AACd,IAAIt1W,EAAOq/W,EAASr/W,KAIhBw5W,EAAUD,IAAeC;AAE7B,GAAiB,OAAb6K,GAAmB,CACtB,IAAIpnhB;AAMJ,GAJKu8gB,GACJsK,GAAiBzE,EAAUiF,IAGf,OAATtkX,GAAiBskX,GAAe,EAEnC,IADAtkX,EAAK9iK,OAASonhB,GAAeD,GAASnnhB,OACjCD,EAAI,EAAGA,EAAIonhB,GAASnnhB,OAAQD,IAChC+iK,EAAKskX,GAAernhB,GAAKonhB,GAASpnhB;KAGnCoihB,EAASr/W,KAAOA,EAAOqkX;AAGxB,GAAInM,MAAmCnC,IAAbsJ,EAASx2gB,EAClC,IAAK5L,EAAIqnhB,GAAcrnhB,EAAI+iK,EAAK9iK,OAAQD,KACtC+iK,EAAK/iK,GAAGg+gB,YAAc,IAAI12gB,KAAK86gB,EAGnC,MAAY7F,GAAoB,OAATx5W,GAAiBskX,GAAetkX,EAAK9iK,SAC3D4mhB,GAAiBzE,EAAUiF,IAC3BtkX,EAAK9iK,OAASonhB;AAMf,KAEsB,OAArB7D,IACCL,IACQ,OAATpgX,GACW,KAAVq/W,EAASx2gB,GAEV,IAAK5L,EAAI,EAAGA,EAA6BwjhB,GAAkBvjhB,OAAQD,IAClE0nhB,GACClE,GAAiBxjhB,GACMoihB;AAS1B,GAA0B,OAAtB1I,GAA8BA,IAAsB0I,EAAU,CAKjE,GAJAmF,KAI+B,OAA3B7N,EAAkB32W,KACrB,IAAK,IAAI/iK,EAAI,EAAGA,EAAI4nhB,EAAuB5nhB,GAAK,EAC/C05gB,EAAkB32W,KAAK/iK,GAAGi+gB,GAAKsJ;AAIjC,GAAsB,OAAlBI,EACH,IAAK,MAAMrsW,KAAOqsW,EACjBrsW,EAAI2iW,GAAKsJ;AAIc,OAArB/D,KAC+B,OAA9BqE,EACHA,EAA4BrE,GAE5BqE,EAA0BvghB,QAAKs8I,IAGlC,CAMA,OAJmC,KAA9Bw+X,EAASx2gB,EAAI6pgB,KACjB2M,EAASx2gB,GAAK6pgB,GAGR9uf,CACR,CAAE,MAAOlO,GACR,OAAOw/f,GAAax/f,EACrB,CAAC,QACA2pgB,EAASx2gB,GAAK4pgB,EACd4R,GAAWO,EACXN,GAAeO,EACfpE,GAAmBqE,EACnBzP,GAAkBsB,EAClB2J,GAAkByE,EAClBxQ,EAAsBwO,GACtB3C,GAAa4E,EACbnE,GAAiBoE,CAClB,CACD,CAQA,SAASC,GAAgBtP,EAAQ8O,GAChC,IAAIzJ,EAAYyJ,EAAWzJ;AAC3B,GAAkB,OAAdA,EAAoB,CACvB,IAAIv1gB,EAAQksgB,EAASrqgB,KAAK0zgB,EAAWrF;AACrC,IAAe,IAAXlwgB,EAAc,CACjB,IAAIy/gB,EAAalK,EAAU/9gB,OAAS;AACjB,IAAfiohB,EACHlK,EAAYyJ,EAAWzJ,UAAY,MAGnCA,EAAUv1gB,GAASu1gB,EAAUkK,GAC7BlK,EAAU3sX,MAEZ,CACD,CAIA,GACe,OAAd2sX,GACgB9E,EAAfuO,EAAW77gB,IAIE,OAAbw7gB,KAAsB3ihB,EAAS6F,KAAK88gB,GAAUK,IAC9C,CACD,IAAI5O,EAAkC4O;AAIrB3O,IAAZD,EAAQjtgB,IACZitgB,EAAQjtgB,GAAKktgB,IACbD,EAAQjtgB,IAAK,OAQVitgB,EAAQ7ngB,IAAMi3K,GACjB2wV,GAAsBC,GAIJ,OAAfA,EAAQ/xO,IACX2yO,GAAyB,KACQZ,EAAQ/xO,GAAItxR,MAAMyggB,GAClD4C,EAAQ/xO,GAAK,KAEb4xO,GAAkBG,EAASU,QH8BxB,SAAgCV,GACtC,GAAwB,OAApBA,EAAQv2G,QAEZ,IAAK,MAAMvia,KAAK84gB,EAAQv2G,SAEnBvia,EAAE+qN,UAAY/qN,EAAE+mS,MACnB/mS,EAAE+qN,aACW,OAAT/qN,EAAE+mS,IACL2yO,GAAyB,KACQ15gB,EAAE+mS,GAAItxR,MAAMyggB,GAC5Cl2gB,EAAE+mS,GAAK,OAQI,OAAT/mS,EAAEiwB,KAAajwB,EAAE+qN,SAAW/tD,GAEhC8pX,GAAiB9mhB,EAAG,GACpB2mhB,GAAwB3mhB,GAG3B,CAxBO,CGzBkB84gB,GAGvBgO,GAAiBhO,EAAS,EAC3B,CACD,CAOO,SAASgO,GAAiBlO,EAAQwP,GACxC,IAAIX,EAAe7O,EAAO51W;AAC1B,GAAqB,OAAjBykX,EAEJ,IAAK,IAAIxnhB,EAAImohB,EAAanohB,EAAIwnhB,EAAavnhB,OAAQD,IAClDiohB,GAAgBtP,EAAQ6O,EAAaxnhB,GAEvC,CAMO,SAASg/gB,GAAc9G,GAC7B,IAAI5kY,EAAQ4kY,EAAOtsgB;AAEnB,KAAa4sgB,MAARllY,GAAL,CAIAolY,GAAkBR,EAAQa;AAE1B,IAAIY,EAAkBxB,GAClBiQ,EAAsBjB;AAE1BhP,GAAgBD,EAChBiP,KAA2B,GAAL7zY;AAUtB,IACW,SAALA,EGuBA,SAAuCqlY,GAG7C,IAFA,IAAIT,EAASS,EAAOlne,MAEF,OAAXyme,GAAiB,CACvB,IAAIv/a,EAAOu/a,EAAOv/a;AACFgqb,GAAXzK,EAAOtsgB,GACX2xgB,GAAerF,GAEhBA,EAASv/a,CACV,CACD,CAVO,CHtB0Bu/a,GAE9BwO,GAAwBxO,GAGzBqO,GAAwBrO;AACxB,IAAIptT,EAAW4zT,GAAgBxG;AAC/BA,EAAOptT,SAA+B,mBAAbA,EAA0BA,EAAW,KAC9DotT,EAAOgG,GAAKoJ,EAYb,CAAC,QACAH,GAAqBiB,EACrBjQ,GAAgBwB,CAMjB,CAhDA,CAiDD,CAMOj4f,eAAeq8I,WAWfhrF,QAAQ2B,UAIdspO,IACD,CAiBO,SAAShyR,GAAI2sf,GACnB,IACI2H,KAAsBpH,EADdP,EAAO/sgB;AAMnB,GAAwB,OAApBwsgB,KAA6B+K,MAIE,OAAlBhL,IAA6CK,MAAlBL,GAAcvsgB,GAElB,OAApBy3gB,IAA6BA,GAAgB/yf,IAAIqof,IAAU,CAC7E,IAAI51W,EAAOq1W,GAAgBr1W;AAE3B,GAAmD,KAA9Cq1W,GAAgBxsgB,EAAI4pgB,GAEpBmD,EAAOsF,GAAKsJ,KACf5O,EAAOsF,GAAKsJ,GAKK,OAAbH,IAA8B,OAATrkX,GAAiBA,EAAKskX,MAAkB1O,EAChE0O,KACuB,OAAbD,GACVA,GAAW,CAACzO,GAEZyO,GAAS9/gB,KAAKqxgB;IAGV,CAMNP,GAAgBr1W,OAAS,GACpBt+J,EAAS6F,KAAK8tgB,GAAgBr1W,KAAM41W,IACxCP,GAAgBr1W,KAAKz7J,KAAKqxgB;AAG3B,IAAIqF,EAAYrF,EAAOqF;AAEL,OAAdA,EACHrF,EAAOqF,UAAY,CAAC5F,IACT3zgB,EAAS6F,KAAK0zgB,EAAW5F,KACpC4F,EAAU12gB,KAAK8wgB,GAEjB,CACD,CA4DD,GAAIqG,IAAwB+B,GAAWlwf,IAAIqof,GAC1C,OAAO6H,GAAWx0f,IAAI2sf;AAGvB,GAAI2H,EAAY,CACf,IAAIzH,EAAkCF;AAEtC,GAAI8F,GAAsB,CACzB,IAAIp8gB,EAAQw2gB,EAAQ7ngB;AAapB,OARe+ngB,KAAZF,EAAQjtgB,GAA0C,OAAtBitgB,EAAQmF,aACtCqK,GAAsBxP,KAEtBx2gB,EAAQk8gB,GAAgB1F,IAGzB2H,GAAWj0f,IAAIssf,EAASx2gB,GAEjBA,CACR,CAIA,IAAIimhB,IACUxP,IAAZD,EAAQjtgB,KACRu3gB,IACmB,OAApB/K,KACC+O,OAA2CrO,IAApBV,GAAgBxsgB,IAErC28gB,IAAsBlQ,MAAZQ,EAAQjtgB;AAElBs2gB,GAASrJ,KACRyP,IAGHzP,EAAQjtgB,GAAKktgB,KAGd6F,GAAe9F,IAGZyP,IAAmBC,IACtBxJ,GAAyBlG,GACzB2P,GAAU3P,GAEZ,CAEA,GAAIiG,IAAcxuf,IAAIqof,GACrB,OAAOmG,GAAa9yf,IAAI2sf;AAGzB,GAAiC,KAA5BA,EAAO/sgB,EAAI6pgB,GACf,MAAMkD,EAAO3ngB;AAGd,OAAO2ngB,EAAO3ngB,CACf,CAOA,SAASw3gB,GAAU3P,GAGlB,GAFAA,EAAQjtgB,GAAKktgB,IAEQ,OAAjBD,EAAQ91W,KAEZ,IAAK,MAAMuY,KAAOu9V,EAAQ91W,MACxBuY,EAAI0iW,YAAc,IAAI12gB,KAAKuxgB,GAEfK,EAAR59V,EAAI1vK,KAA+BktgB,IAARx9V,EAAI1vK,KACnCmzgB,GAAiDzjW,GACjDktW,GAAkCltW,GAGrC,CAGA,SAAS+sW,GAAsBxP,GAC9B,GAAIA,EAAQ7ngB,IAAMi3K,EAAe;AACjC,GAAqB,OAAjB4wV,EAAQ91W,KAAe;AAE3B,IAAK,MAAMuY,KAAOu9V,EAAQ91W,KAAM,CAC/B,GAAIy9W,GAAWlwf,IAAIgrJ,GAClB;AAGD,GAAa49V,EAAR59V,EAAI1vK,GAAsBy8gB,GAA8C/sW,GAC5E,QAEF,CAEA,QACD,CA4BO,SAAS6/V,GAAQnrf,GACvB,IAAI+3f,EAAsB5E;AAC1B,IAEC,OADAA,MACOnzf,GACR,CAAC,QACAmzf,GAAa4E,CACd,CACD,CK7nBA,MAkHMU,GAAiB,CAAC,aAAc;AAM/B,SAASC,GAAiB5ghB,GAChC,OAAO2ghB,GAAehkhB,SAASqD,EAChC,CC3QiB,IAAIivB;ACiBd,MAAM4xf,GAAe9tc,OAAO,UAGtB+tc,GAAwB,IAAInlgB,IAG5BolgB,GAAqB,IAAIplgB;AA4F/B,SAASra,GAAM0/gB,EAAYp7I,EAAKrtO,EAASumB,EAASC,GACxD,IAAInlL,EAAU,CAAEklL,UAASC,WACrBkiW,EA/DE,SAAsBD,EAAYp7I,EAAKrtO,EAAS3+J,EAAU,CAAC,GAIjE,SAASqnhB,EAAoC3/gB,GAK5C,GAJK1H,EAAQklL,SAEZoiW,GAAyB1+gB,KAAKojY,EAAKtkY,IAE/BA,EAAMiyJ,aACV,OAAOo+W,GAAyB,IACxBp5W,GAAS/1J,KAAK5K,KAAM0J,GAG9B,CAkBA,OAXC0/gB,EAAWx4e,WAAW,YACtBw4e,EAAWx4e,WAAW,UACP,UAAfw4e,EAEAjR,GAAiB,KAChBnqI,EAAI7/W,iBAAiBi7f,EAAYC,EAAgBrnhB,KAGlDgsY,EAAI7/W,iBAAiBi7f,EAAYC,EAAgBrnhB,GAG3CqnhB,CACR,CAjCO,CA+D4BD,EAAYp7I,EAAKrtO,EAAS3+J,IAG3DgsY,IAAQrpY,SAAS4I,MAEjBygY,IAAQvkY,QAERukY,IAAQrpY,UAERqpY,aAAeu7I,mBAEfn+T,GAAS,KACR4iL,EAAIx+W,oBAAoB45f,EAAYC,EAAgBrnhB,IAGvD,CAQO,SAASwnhB,GAAUJ,EAAY1mgB,EAASi+I,IAE7Cj+I,EAAQumgB,MAAkB,CAAC,GAAGG,GAAczoX,CAC9C,CAMO,SAAS8oX,GAASvob,GACxB,IAAK,IAAI5gG,EAAI,EAAGA,EAAI4gG,EAAO3gG,OAAQD,IAClC4ohB,GAAsBtxe,IAAIspD,EAAO5gG;AAGlC,IAAK,IAAIgwB,KAAM64f,GACd74f,EAAG4wE,EAEL,CAOA,IAAIwob,GAAwB;AAOrB,SAASJ,GAAyB5/gB,GACxC,IAAIighB,EAAkB3phB,KAClB4phB,EAAsCD,EAAiBnlgB,cACvD4kgB,EAAa1/gB,EAAM5F,KACnBqsM,EAAOzmM,EAAM06K,kBAAoB,GACjCylW,EAAgD15U,EAAK,IAAMzmM,EAAMF;AAErEkghB,GAAwBhghB;AAMxB,IAAIoghB,EAAW,EAMXC,EAAaL,KAA0BhghB,GAASA,EAAMu/gB;AAE1D,GAAIc,EAAY,CACf,IAAIC,EAAS75U,EAAKtmM,QAAQkghB;AAC1B,IACa,IAAZC,IACCL,IAAoBhlhB,UAAYglhB,IAAelghB,QAOhD,YADAC,EAAMu/gB,IAAgBU;AASvB,IAAIM,EAAc95U,EAAKtmM,QAAQ8/gB;AAC/B,IAAqB,IAAjBM,EAGH;AAGGD,GAAUC,IACbH,EAAWE,EAEb,CAMA,IAJAH,EAAyC15U,EAAK25U,IAAapghB,EAAMF,UAI1CmghB,EAAvB,CAGAvU,EAAgB1rgB,EAAO,gBAAiB,CACvC2/C,gBACA/8B,IAAGA,IACKu9f,GAAkBD;AAS3B,IAAI5P,EAAoBtB,GACpBuB,EAAkBxB;AACtByB,GAAoB,MACpBC,GAAkB;AAElB,IAUC,IANA,IAAI+P,EAIAC,EAAe,GAEO,OAAnBN,GACFA,IAAmBF,GADQ,CAG/B,IAEC,IAAIH,EAAYK,EAAeZ,MAAgBG;AAGjC,MAAbI,GACuBK,EAAwBn6gB,UAG9ChG,EAAMF,SAAWqghB,GAElBL,EAAU5+gB,KAAKi/gB,EAAgBnghB,EAEjC,CAAE,MAAOqP,GACJmxgB,EACHC,EAAavihB,KAAKmR,GAElBmxgB,EAAcnxgB,CAEhB,CACA,GAAIrP,EAAMiyJ,aAAc;AAExBmuX,IACAD,EAAiBC,EAAW35U,EAAK5vM,OAAiC4vM,EAAK25U,GAAa,IACrF,CAEA,GAAII,EAAa,CAChB,IAAK,IAAInxgB,KAASoxgB,EAEjB9R,eAAe,KACd,MAAMt/f;AAGR,MAAMmxgB,CACP,CACD,CAAC,QAEAxghB,EAAMu/gB,IAAgBU,SAEfjghB,EAAMogR,cACbowP,GAAoBF,GACpBG,GAAkBF,EACnB,CA3EwC,CA4EzC,CC9SA,MAAM/1W,GAEL6iH,YAAYt9Q,QAAQi3f,cACJ35O,WAAWt9Q,OAAOi3f,aAAaG,aAAa,sBAAuB,CAElFC,WAAav2e,GACLA;AC+BH,SAAS6/f,GAAalrgB,EAAOC,GACnC,IAAIq5f,EAAgCC;AACf,OAAjBD,EAAOr4T,QACVq4T,EAAOr4T,MAAQ,CAAEjhM,QAAOC,MAAKre,EAAG,KAAMhC,EAAG,MAE3C,CAQO,SAASurhB,GAAU5oc,EAASmyD,GAClC,IAII1vH,EAJAomgB,KAAuBC,EAAR32Y,GACf42Y,KAA2BC,EAAR72Y,GASnB82Y,GAAajpc,EAAQ7wC,WAAW;AAEpC,MAAO,KACN,GAAIime,EAEH,OADAuT,GAAaxT,EAAc,MACpBA;ADhDH,IAAmCrsf,EACrCoggB;KCkDUl5f,IAATvN,IDnDoCqG,ECoDNmggB,EAAYjpc,EAAU,MAAQA,GDnD7Dkpc,EAAOpF,GAAe,aACrB78gB,UATC,SAA6B6hB,GACnC,OAA8B25I,IAAQ48V,WAAWv2e,IAASA,CAC3D,CAFO,CAS+BA,EAAK0vY,WAAW,MAAO,kBCkD1D/1Y,EDjDKymgB,EAAKlpc,QCkDL6oc,IAAapmgB,EAAoC6ggB,GAAgB7ggB;AAGvE,IAAI60J,EACHyxW,GAAmBhG,GAAa7/gB,SAASimhB,WAAW1mgB,MAAcA,EAAKi1I;AAYxE,OATImxX,EAIHF,GAHyCrF,GAAgBhsW,GAClBA,EAAM6nG,WAI7CwpQ,GAAarxW,EAAOA,GAGdA,EAET,CAmPO,SAAS2iW,KAEf,GAAI7E,EAEH,OADAuT,GAAaxT,EAAc,MACpBA;AAGR,IAAI57C,EAAOr2d,SAAS+pe,yBAChBxvd,EAAQva,SAASkmhB,cAAc,IAC/B/4H,EAASwrH;AAKb,OAJAtiD,EAAK1pR,OAAOpyL,EAAO4yY,GAEnBs4H,GAAalrgB,EAAO4yY,GAEbkpE,CACR,CAQO,SAAS1pR,GAAOwgN,EAAQ9jB,GAC9B,GAAI6oI,EAAW,CACd,IAAI2B,EAAyDC;AAU7D,OALgBE,MAAXH,EAAOtsgB,GAAgD,OAArBssgB,EAAOr4T,MAAMhhM,MACnDq5f,EAAOr4T,MAAMhhM,IAAMy3f,QAGpBI,GAED,CAEe,OAAXllH,GAKJA,EAAO90O,OAA4BgxN,EACpC,CCzVO,IAAI88I;AAYJ,SAASC,GAAS1nhB,EAAMV,GAE9B,IAAIs7B,EAAe,MAATt7B,EAAgB,GAAsB,iBAAVA,EAAqB,GAAGA,IAAUA;AAEpEs7B,KAA6B56B,EAAMizgB,KAAgBjzgB,EAAKo0F,aACvCp0F,EAAMizgB,GAAcr4e,EACxC56B,EAAKo0F,UAAY,GAAGx5D,IAEtB,CAYO,SAAS4oX,GAAM5sO,EAAWj4K,GAChC,OAAOgphB,GAAO/wW,EAAWj4K,EAC1B,CA2BO,SAASy7S,GAAQxjI,EAAWj4K,GAClC2ihB,KACA3ihB,EAAQiphB,MAAQjphB,EAAQiphB;AACxB,MAAMzhhB,EAASxH,EAAQwH,OACjB0hhB,EAAgBrU,EAChBsU,EAAwBvU;AAE9B,IAGC,IAFA,IAAI9kH,EAASizH,GAAgBv7gB,GAG5BsoZ,IACqBqlH,IAApBrlH,EAAO16T,UAAsEigb,MAAjBvlH,EAAQ7kY,OAErE6kY,EAASmlH,GAAiBnlH;AAG3B,IAAKA,EACJ,MAAM2kH;AAGPK,MACAC,EAAyCjlH;AAEzC,MAAM79U,EAAW+2c,GAAO/wW,EAAW,IAAKj4K,EAAS8vZ;AAIjD,OAFAglH,MAEgC7ic,CACjC,CAAE,MAAOl7D,GAER,GACCA,aAAiBrY,OACjBqY,EAAMlD,QAAQoC,MAAM,MAAMwL,KAAM5H,GAASA,EAAK+0B,WAAW,0BAEzD,MAAM73B;AAgBP,OAdIA,IAAU09f,GAEblhgB,QAAQC,KAAK,sBAAuBuD,QAGjC/W,EAAQqif,SfuMP,WAQL,MAAM,IAAI3jf,MAAM,wCAElB,CAVO,GelMLikhB,KACAW,GAAmB97gB,GAEnBstgB,MACOjwH,GAAM5sO,EAAWj4K,EACzB,CAAC,QACA80gB,EAAcoU,GACdnU,EAAiBoU,EAClB,CACD,CAGA,MAAMntX,GAAY,IAAI3mI;AAQtB,SAAS2zf,GACRh3W,GACAxqK,OAAEA,EAAMsoZ,OAAEA,EAAMxnW,MAAEA,EAAQ,CAAC,EAAC42C,OAAEA,EAAMtoE,QAAEA,EAAOqyf,MAAEA,KAAYG,eAAEA,IAE7DzG;AAIA,IAAI1qW,OAAYxoJ,EAEZyoR,EPyGE,WACNwjO,GAAMC;AACN,MAAMnF,EAASkN,GAAcG,OO3GA,KAC5B,IjB/GoCrqgB,EiB+GhC6vgB,EAAcv5H,GAAUtoZ,EAAO9E,YAAY44gB;AjB/GX9hgB,EiBsHlC6vgB,IAmBA,GAlBAzjhB,EAAK,CAAC,GAEFgxB,IADuC++e,EAC1BxzgB,EAAIy0B,GAEjBsoE,IAEiB52C,EAAOghe,SAAWpqb,GAGnC21a,GACHuT,GAA0CiB,EAAc,MAGzDP,GAAeG,EAEfhxW,EAAYjG,EAAUq3W,EAAa/ge,IAAU,CAAC,EAC9Cwge,MAEIjU,IAC6C4B,GAAet4T,MAAMhhM,IAAMy3f,EAGzD,OAAjBA,GAC0BO,IAA1BP,EAAax/a,UACkCggb,MAAvBR,EAAc3pf,MAGtC,MADApY,IACM4hgB;AAIR9kX,KjBrJH,IAAIwpX,GiBiH2BkQ,EAC7B,CACCz3P,QAASA,QjBnHcp4Q,EiBuJxB4vgB;AAKD,IAAIG,EAAoB,IAAIxngB,IAGxByngB,EAAgBtqb,IACnB,IAAK,IAAI5gG,EAAI,EAAGA,EAAI4gG,EAAO3gG,OAAQD,IAAK,CACvC,IAAI8ohB,EAAalob,EAAO5gG;AAExB,IAAIirhB,EAAkB36f,IAAIw4f,GAA1B,CACAmC,EAAkB3ze,IAAIwxe;AAEtB,IAAIjiW,EAAU6hW,GAAiBI;AAQ/B,IAAK,MAAMllgB,IAAQ,CAAC1a,EAAQ7E,UAAW,CACtC,IAAI8mhB,EAASztX,GAAU1xI,IAAIpI;KAEZuN,IAAXg6f,IACHA,EAAS,IAAIp0f,IACb2mI,GAAUnxI,IAAI3I,EAAMungB;AAGrB,IAAItrY,EAAQsrY,EAAOn/f,IAAI88f;KAET33f,IAAV0uH,GACHj8H,EAAKiK,iBAAiBi7f,EAAYE,GAA0B,CAAEniW,YAC9DskW,EAAO5+f,IAAIu8f,EAAY,IAEvBqC,EAAO5+f,IAAIu8f,EAAYjpY,EAAQ,EAEjC,CA3BuC,CA4BxC;AAMD,OAHAqrY,EAAatW,EAAWgU,KACxBC,GAAmBvxe,IAAI4ze,GAEhB,KACN,IAAK,IAAIpC,KAAcmC,EACtB,IAAK,MAAMrngB,IAAQ,CAAC1a,EAAQ7E,UAAW,CACtC,IAAI8mhB,EAA6CztX,GAAU1xI,IAAIpI,GAC3Di8H,EAA+BsrY,EAAOn/f,IAAI88f;AAE/B,KAATjpY,GACLj8H,EAAKsL,oBAAoB45f,EAAYE,IACrCmC,EAAOnmc,OAAO8jc,GAEM,IAAhBqC,EAAOptgB,MACV2/I,GAAU14E,OAAOphE,IAGlBungB,EAAO5+f,IAAIu8f,EAAYjpY,EAEzB,CAGDgpY,GAAmB7jc,OAAOkmc,GAEtBH,IAAgBv5H,GACnBu5H,EAAY79gB,YAAY1E,YAAYuihB;APDvC,MAAO,CAACrphB,EAAU,CAAC,IACX,IAAIqxE,QAASuzc,IACf5khB,EAAQ0phB,MACXrO,GAAa7E,EAAQ,KACpBqF,GAAerF,GACfoO,OAAOn1f,MAGRosf,GAAerF,GACfoO,OAAOn1f,KAIX,CAjBO;AOWN,OADAk6f,GAAmB9+f,IAAIotJ,EAAWigI,GAC3BjgI,CACR,CAMA,IAAI0xW,GAAqB,IAAIx2a;AAsBtB,SAAS+kM,GAAQjgI,EAAWj4K,GAClC,MAAMsuB,EAAKq7f,GAAmBr/f,IAAI2tJ;AAElC,OAAI3pJ,GACHq7f,GAAmBrmc,OAAO20F,GACnB3pJ,EAAGtuB,IAWJqxE,QAAQ2B,SAChB,UAAA42c,GAAAvrhB,EAAAvB,EAAA0B,IAAA,SAAAH,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,oEAAAxoD,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAA6uJ,GAAAhvJ,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAAu/f,GAAAxrhB,EAAAvB,GAAA,UAAA+shB,GAAAxrhB,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDC3TA,ICkJIije,GDlJJC,GAAA,IAAA52a,QAAA62a,GAAA,IAAA72a,QAAA82a,GAAA,IAAA92a,QAAA+2a,GAAA,IAAA/2a,QAAAg3a,GAAA,IAAAh3a,QAAAi3a,GAAA,IAAAj3a,QAAAk3a,GAAA,IAAAl3a;AAGO,MAAMm3a,GA8CZhxc,YAAYw2U,EAAQjgP,OAAa,SAAAxxK,EAAAvB,EAAA0B,IAAA1B,EAAA,SAAAuB,GAAA,IAAAvB,EAAA,SAAAuB,GAAA,oBAAAA,MAAA,OAAAA;AAAA,IAAAvB,EAAAuB,EAAA86E,OAAAC;AAAA,YAAAt8E,EAAA,KAAA0B,EAAA1B,EAAA8L,KAAAvK,EAAA;AAAA,oBAAAG,EAAA,OAAAA;AAAA,UAAAqoD,UAAA,uDAAAlY,OAAAtwC,EAAA,EAAAA;AAAA,uBAAAvB,MAAA,IAAAA,MAAAuB,EAAA0nB,OAAAmhC,eAAA7oD,EAAAvB,EAAA,CAAA6D,MAAAnC,EAAA4oD,YAAA,EAAAC,cAAA,EAAAgyB,UAAA,IAAAh7E,EAAAvB,GAAA0B,CAAA,GA7CjCR,KAAA,iBAIA0jL,GAAA1jL,KAAA+rhB,GAAW,IAAI10f,KAgBfqsJ,GAAA1jL,KAAAgshB,GAAY,IAAI30f,KAOhBqsJ,GAAA1jL,KAAAishB,GAAa,IAAI50f,KAMjBqsJ,GAAA1jL,KAAAkshB,GAAY,IAAInogB,KAMhB2/J,GAAA1jL,KAAAmshB,OAcAzoW,GAAA1jL,KAAAoshB,GAAW5P,IAEV,GAAKjmU,GAAKw1U,GAAL/rhB,MAAc4wB,IAAI4rf,GAAvB,CAEA,IAAIvjf,EAA0Bs9K,GAAKw1U,GAAL/rhB,MAAcssB,IAAIkwf,GAE5C+P,EAAWh2U,GAAKy1U,GAALhshB,MAAessB,IAAI2M;AAElC,GAAIszf,EAEHhF,GAAcgF,GACdh2U,GAAK21U,GAALlshB,MAAeslF,OAAOrsD;IAChB,CAEN,IAAIuzf,EAAYj2U,GAAK01U,GAALjshB,MAAgBssB,IAAI2M;AAEhCuzf,IAEHjF,GAAciF,EAAUhU,QACxBjiU,GAAKy1U,GAALhshB,MAAe6sB,IAAIoM,EAAKuzf,EAAUhU,QAClCjiU,GAAK01U,GAALjshB,MAAgBslF,OAAOrsD,GASMuzf,EAAU1iJ,SAASlpH,UAAWllM,SAG3D17E,KAAK8xZ,OAAO90O,OAAOwvW,EAAU1iJ,UAC7ByiJ,EAAWC,EAAUhU,OAEvB,CAEA,IAAK,MAAOv9f,EAAGS,KAAM66L,GAAKw1U,GAAL/rhB,MAAe,CAGnC,GAFAu2M,GAAKw1U,GAAL/rhB,MAAcslF,OAAOrqE,GAEjBA,IAAMuhgB,EAET;AAGD,MAAMgQ,EAAYj2U,GAAK01U,GAALjshB,MAAgBssB,IAAI5Q;AAElC8wgB,IAGH3O,GAAe2O,EAAUhU,QACzBjiU,GAAK01U,GAALjshB,MAAgBslF,OAAO5pE,GAEzB,CAGA,IAAK,MAAOA,EAAG88f,KAAWjiU,GAAKy1U,GAALhshB,MAAgB,CAGzC,GAAI0b,IAAMud,GAAOs9K,GAAK21U,GAALlshB,MAAe4wB,IAAIlV,GAAI;AAExC,MAAM+wgB,EAAaA,KAGlB,GAFa54gB,MAAM0Z,KAAKgpL,GAAKw1U,GAAL/rhB,MAAcgnD,UAE7BjiD,SAAS2W,GAAI,CAErB,IAAIouX,EAAWnlY,SAAS+pe;AACxB6uC,GAAY/E,EAAQ1uI,GAEpBA,EAASx4L,OAAOgsU,MAEhB/mU,GAAK01U,GAALjshB,MAAgB6sB,IAAInR,EAAG,CAAE88f,SAAQ1uI,YAClC,MACC+zI,GAAerF;AAGhBjiU,GAAK21U,GAALlshB,MAAeslF,OAAO5pE,GACtB66L,GAAKy1U,GAALhshB,MAAeslF,OAAO5pE;AAGnB66L,GAAK41U,GAALnshB,QAAqBushB,GACxBh2U,GAAK21U,GAALlshB,MAAe43C,IAAIl8B,GACnB2hgB,GAAa7E,EAAQiU,OAErBA,GAEF,CApF+B,IA0FhC/oW,GAAA1jL,KAAAqshB,GAAY7P,IACXjmU,GAAKw1U,GAAL/rhB,MAAcslF,OAAOk3b;AAErB,MAAM9je,EAAO7kC,MAAM0Z,KAAKgpL,GAAKw1U,GAAL/rhB,MAAcgnD;AAEtC,IAAK,MAAOtrC,EAAG+gd,KAAWlmR,GAAK01U,GAALjshB,MACpB04C,EAAK3zC,SAAS2W,KAClBmigB,GAAephD,EAAO+7C,QACtBjiU,GAAK01U,GAALjshB,MAAgBslF,OAAO5pE,MA3GzB1b,KAAK8xZ,OAASA,oCACTq6H,GAALnshB,KAAmB6xK,EACpB,CAmHA8rW,OAAO1kf,EAAK3I,GACX,IAAIksf,EAA8BI;CAG9Btsf,GAAOimL,GAAKy1U,GAALhshB,MAAe4wB,IAAIqI,IAASs9K,GAAK01U,GAALjshB,MAAgB4wB,IAAIqI,IAYzDs9K,GAAKy1U,GAALhshB,MAAe6sB,IACdoM,EACAwjc,GAAO,IAAMnsc,EAAGtwB,KAAK8xZ,UAKxBv7M,GAAKw1U,GAAL/rhB,MAAc6sB,IAAI2vf,EAAOvjf,GAsBpB49e,IACH72gB,KAAK8xZ,OAAS8kH,GAGfrgU,GAAK61U,GAALpshB,MAAY4K,KAAZ5K,KAAaw8gB,EAEf,EExNM,SAASkQ,GAASxogB,EAAMoM,EAAIq8f,MAElC,IAAIx6gB;AACA0kgB,IACH1kgB,EAASykgB,EACTI;AAGD,IAAI4V,EAAW,IAAIN,GAAcpogB;AAOjC,SAAS2ogB,EAAc5zf,EAAK3I,GAC3B,GAAIumf,EAAW,CACd,IAAI5pf,EAAOsqf,EAAwDplgB;AAGnE,GAAI8mB,IAAQpqB,SAASoe,EAAKhpB,UAAU,IAAK,CAGxC,IAAI6tZ,EAASolH;AASb,OAPAH,EAAiBjlH,GACjB86H,EAAS96H,OAASA,EAElBglH,MACA8V,EAASjP,OAAO1kf,EAAK3I,QACrBwmf,KAGD,CACD,CAEA8V,EAASjP,OAAO1kf,EAAK3I,EACtB,CAEAg5I,GAAM,KACL,IAAIwjX;AAEJx8f,EAAG,CAACA,EAAI2I,EAAM,KACb6zf,KACAD,EAAc5zf,EAAK3I,KAGfw8f,GACJD,GAAe,EAAG,OAvCRF,EAASxQ,MAAqB,EA0C3C,CDjBO,SAASpzgB,GAAMyG,EAAGlP,GACxB,OAAOA,CACR,CA8EA,SAASyshB,GAAgB9qgB,EAAO+qgB,EAAY/F,MAE3C,IAAIgG;AAGJ,GAAIhrgB,EAAM2xQ,QAAQv1Q,KAAO,EAAG,CAC3B4ugB,EAAoB,IAAIlpgB;AAExB,IAAK,MAAM20B,KAAQz2B,EAAM2xQ,QAAQ5sO,SAChC,IAAK,MAAM/tB,KAAOyf,EACjBu0e,EAAkBr1e,IAA6B31B,EAAM65J,MAAMxvJ,IAAI2M,GAAM54B,EAGxE,CAEA,IAAK,IAAIC,EAAI,EAAGA,EAAI0shB,EAAWzshB,OAAQD,IAAK,CAC3C,IAAID,EAAI2shB,EAAW1shB;AAEf2shB,GAAmBr8f,IAAIvwB,IAC1BA,EAAE6L,GAAK2pgB,EAGP0H,GAAYl9gB,EADKsE,SAAS+pe,2BAG1BmvC,GAAemP,EAAW1shB,GAAI2mhB,EAEhC,CACD,CAeO,SAASjnG,GAAK97Z,EAAM0vH,EAAOs5Y,EAAgBC,EAASC,EAAWC,EAAc,MACnF,IAAIv7H,EAAS5tY,EAGT43J,EAAQ,IAAIzkJ;AAIhB,GAF6Bi2f,EAAR15Y,EAEF,CAClB,IAAI25Y,EAAsCrpgB;AAE1C4tY,EAAS+kH,EACNE,EAAiBgO,GAAgBwI,IACjCA,EAAY7ohB,YAAY44gB,KAC5B,CAEIzG,GACHG;AAID,IAkBIl9X,EAlBA3jH,EAAW,KAKXq3f,EAAa5O,GAAmB,KACnC,IAAI7nT,EAAam2T;AAEjB,OACClY,EAASj+S,GAAcA,EAA2B,MAAdA,EAAqB,GAAKm+S,EAAWn+S,KAYvE68D,EAAU,IAAIv8P,IAEdo2f;AAKJ,SAAS98Q,EAAO6rQ,GACO1D,MAAjB72f,EAAMu2f,OAAOtsgB,IAIlB+V,EAAM2xQ,QAAQtuM,OAAOk3b,GAErBv6f,EAAMkU,SAAWA,EAmMnB,SAAmBlU,EAAO63H,EAAOg4Q,EAAQl+Q,EAAOu5Y,GAC/C,IAOI/1I,EAMAs2I,EAYAz0f,EAGAu/e,EAGAl4gB,EA/BAqthB,KAAuBC,EAARh6Y,GAEfrzI,EAASu5I,EAAMv5I,OACfu7K,EAAQ75J,EAAM65J,MACdrtG,EAAUo/c,GAAe5rgB,EAAMu2f,OAAOzme,OAMtC0+N,EAAO,KAMP/9I,EAAU,GAGVo7Z,EAAU;AAcd,GAAIH,EACH,IAAKrthB,EAAI,EAAGA,EAAIC,EAAQD,GAAK,EAE5B24B,EAAMk0f,EADErzY,EAAMx5I,GACOA,GAKiB,MAJtCk4gB,EAAkC18V,EAAMxvJ,IAAI2M,GAAM54B,GAItC6L,EAAI2pgB,KACf2C,EAAOr4T,OAAOr/M,GAAGithB,WAChBL,IAAe,IAAI3pgB,KAAO6zB,IAAI4ge;AAKlC,IAAKl4gB,EAAI,EAAGA,EAAIC,EAAQD,GAAK,EAAG,CAM/B,GAJA24B,EAAMk0f,EADErzY,EAAMx5I,GACOA,GAErBk4gB,EAAkC18V,EAAMxvJ,IAAI2M,GAAM54B,EAExB,OAAtB4hB,EAAM+rgB,YACT,IAAK,MAAM/7X,KAAShwI,EAAM+rgB,YACzB/7X,EAAM2hI,QAAQtuM,OAAOkzb,GACrBvmX,EAAM5rE,KAAKf,OAAOkzb;AAYpB,GARgB+J,KAAX/J,EAAOtsgB,IACXq7gB,GAAc/O,GACVmV,IACHnV,EAAOr4T,OAAOr/M,GAAGmthB,SAChBP,IAAe,IAAI3pgB,KAAOuhE,OAAOkzb,KAIE,KAAjCA,EAAOtsgB,EAAI2pgB,GAAyB,CAGxC,GAFA2C,EAAOtsgB,GAAK2pgB,EAER2C,IAAW/pc,EAER,CACN,IAAIwqB,EAAOw3K,EAAOA,EAAKx3K,KAAOxqB;AAE1B+pc,IAAWv2f,EAAMu2f,OAAOtoV,OAC3BjuK,EAAMu2f,OAAOtoV,KAAOsoV,EAAO/nQ,MAGxB+nQ,EAAO/nQ,OAAM+nQ,EAAO/nQ,KAAKx3K,KAAOu/a,EAAOv/a,MACvCu/a,EAAOv/a,OAAMu/a,EAAOv/a,KAAKw3K,KAAO+nQ,EAAO/nQ,MAC3Cy9Q,GAAKjsgB,EAAOwuP,EAAM+nQ,GAClB0V,GAAKjsgB,EAAOu2f,EAAQv/a,GAEpBijK,GAAKs8Q,EAAQv/a,EAAM64T,GAGnBp/R,EAAU,GACVo7Z,EAAU,GAEVr/c,EAAUo/c,IALVp9Q,EAAO+nQ,GAKuBv/a;AAC9B,QACD,CArBCijK,GAAKs8Q,EAAQ,KAAM1mH,EAsBrB,CAEA,GAAI0mH,IAAW/pc,EAAS,CACvB,QAAah9C,IAAT2lX,GAAsBA,EAAKxmX,IAAI4nf,GAAS,CAC3C,GAAI9lZ,EAAQnyH,OAASuthB,EAAQvthB,OAAQ,CAEpC,IACIolF,EADAzmE,EAAQ4ugB,EAAQ;AAGpBr9Q,EAAOvxP,EAAMuxP;AAEb,IAAI3vQ,EAAI4xH,EAAQ,GACZz3G,EAAIy3G,EAAQA,EAAQnyH,OAAS;AAEjC,IAAKolF,EAAI,EAAGA,EAAI+sC,EAAQnyH,OAAQolF,GAAK,EACpCu2K,GAAKxpI,EAAQ/sC,GAAIzmE,EAAO4yY;AAGzB,IAAKnsU,EAAI,EAAGA,EAAImoc,EAAQvthB,OAAQolF,GAAK,EACpCyxT,EAAK9xT,OAAOwoc,EAAQnoc;AAGrBuoc,GAAKjsgB,EAAOnhB,EAAE2vQ,KAAMx1P,EAAEg+E,MACtBi1b,GAAKjsgB,EAAOwuP,EAAM3vQ,GAClBothB,GAAKjsgB,EAAOhH,EAAGiE,GAEfuvD,EAAUvvD,EACVuxP,EAAOx1P,EACP3a,GAAK,EAELoyH,EAAU,GACVo7Z,EAAU,EACX,MAEC12I,EAAK9xT,OAAOkzb,GACZt8Q,GAAKs8Q,EAAQ/pc,EAASqjV,GAEtBo8H,GAAKjsgB,EAAOu2f,EAAO/nQ,KAAM+nQ,EAAOv/a,MAChCi1b,GAAKjsgB,EAAOu2f,EAAiB,OAAT/nQ,EAAgBxuP,EAAMu2f,OAAOzme,MAAQ0+N,EAAKx3K,MAC9Di1b,GAAKjsgB,EAAOwuP,EAAM+nQ,GAElB/nQ,EAAO+nQ;AAGR,QACD,CAKA,IAHA9lZ,EAAU,GACVo7Z,EAAU,GAES,OAAZr/c,GAAoBA,IAAY+pc,IACrCphI,IAAS,IAAIrzX,KAAO6zB,IAAI62B,GACzBq/c,EAAQlmhB,KAAK6mE,GACbA,EAAUo/c,GAAep/c,EAAQwqB;AAGlC,GAAgB,OAAZxqB,EACH,QAEF,CAEsC,KAAjC+pc,EAAOtsgB,EAAI2pgB,IACfnjZ,EAAQ9qH,KAAK4wgB,GAGd/nQ,EAAO+nQ,EACP/pc,EAAUo/c,GAAerV,EAAOv/a,KACjC,CAEA,GAA0B,OAAtBh3E,EAAM+rgB,YAAsB,CAC/B,IAAK,MAAM/7X,KAAShwI,EAAM+rgB,YACE,IAAvB/7X,EAAM2hI,QAAQv1Q,OACjB0ugB,GAAgB9qgB,EAAOizf,EAAWjjX,EAAM5rE,OACxCpkE,EAAM+rgB,aAAa1oc,OAAO2sE;AAIG,IAA3BhwI,EAAM+rgB,YAAY3vgB,OACrB4D,EAAM+rgB,YAAc,KAEtB,CAEA,GAAgB,OAAZv/c,QAA6Bh9C,IAAT2lX,EAAoB,CAE3C,IAAI41I,EAAa;AAEjB,QAAav7f,IAAT2lX,EACH,IAAKohI,KAAUphI,EACEmrI,KAAX/J,EAAOtsgB,GACX8ghB,EAAWplhB,KAAK4wgB;AAKnB,KAAmB,OAAZ/pc,GAEW8zc,KAAZ9zc,EAAQviE,GAAoBuiE,IAAYxsD,EAAMkU,UAClD62f,EAAWplhB,KAAK6mE,GAGjBA,EAAUo/c,GAAep/c,EAAQwqB;AAGlC,IAAIk1b,EAAiBnB,EAAWzshB;AAEhC,GAAI4thB,EAAiB,EAAG,CACvB,IAAIC,EAA6Bd,EAAR15Y,GAAgD,IAAXrzI,EAAeuxZ,EAAS;AAEtF,GAAI67H,EAAa,CAChB,IAAKrthB,EAAI,EAAGA,EAAI6thB,EAAgB7thB,GAAK,EACpC0shB,EAAW1shB,GAAG6/M,OAAOr/M,GAAGithB;AAGzB,IAAKzthB,EAAI,EAAGA,EAAI6thB,EAAgB7thB,GAAK,EACpC0shB,EAAW1shB,GAAG6/M,OAAOr/M,GAAGuthB,KAE1B,EA9jBH,SAAuBpsgB,EAAO+qgB,EAAYoB,GASzC,IAPA,IAIIn8X,EAHA1xJ,EAASyshB,EAAWzshB,OAIpBi0L,EAAYw4V,EAAWzshB,OAElBD,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAChC,IAAIk4gB,EAASwU,EAAW1shB;AAExB+8gB,GACC7E,EACA,KACC,GAAIvmX,GAIH,GAHAA,EAAM2hI,QAAQtuM,OAAOkzb,GACrBvmX,EAAM5rE,KAAKzuC,IAAI4ge,GAEY,IAAvBvmX,EAAM2hI,QAAQv1Q,KAAY,CAC7B,IAAI4X,EAA6ChU,EAAM+rgB;AAEvDjB,GAAgB9qgB,EAAOizf,EAAWjjX,EAAM5rE,OACxCpwD,EAAOqvD,OAAO2sE,GAEM,IAAhBh8H,EAAO5X,OACV4D,EAAM+rgB,YAAc,KAEtB,OAEAx5V,GAAa,MAKjB,CAEA,GAAkB,IAAdA,EAAiB,CAIpB,IAAI85V,EAA8D,OAAtBF;AAE5C,GAAIE,EAAW,CACd,IAAIx8H,EAAiCs8H,EACjCb,EAAsCz7H,EAAOtkZ;AAEjD83gB,GAAmBiI,GACnBA,EAAYj8U,OAAOwgN,GAEnB7vY,EAAM65J,MAAMtlG,OACb,CAEAu2c,GAAgB9qgB,EAAO+qgB,GAAasB,EACrC,MACCr8X,EAAQ,CACP2hI,QAAS,IAAI7vQ,IAAIipgB,GACjB3mc,KAAM,IAAItiE,MAGV9B,EAAM+rgB,cAAgB,IAAIjqgB,KAAO6zB,IAAIq6G,EAExC,CA9DA,CAgkBiBhwI,EAAO+qgB,EAAYoB,EAClC,CACD,CAEIT,GACHxV,GAAiB,KAChB,QAAmB1mf,IAAfi8f,EACJ,IAAKlV,KAAUkV,EACdlV,EAAOr4T,OAAOr/M,GAAG6R,SAIrB,CAlOA,CAlMYsP,EAAO63H,EAAOg4Q,EAAQl+Q,EAAOu5Y,GAEtB,OAAbh3f,IACkB,IAAjB2jH,EAAMv5I,OAC+B,KAAnC41B,EAASjqB,EAAI2pgB,GACjB0R,GAAcpxf,IAEdA,EAASjqB,GAAK2pgB,EACd35Q,GAAK/lO,EAAU,KAAM27X,IAGtBurH,GAAalnf,EAAU,KAItBA,EAAW,QAIf,CASA,IAAIqif,EAASlvW,GAAM,KAElB,IAAI/oK,GADJu5I,EAA4BxtH,GAAIkhgB,IACbjthB;AAGnB,IAAIguhB;AAEA1X,GACkDS,OAAvCC,EAA2BzlH,KAEb,IAAXvxZ,KAIhBw2gB,EAFAjlH,EAASolH,KAGTJ,MACAyX;AAQF,IAJA,IAAI71e,EAAO,IAAI30B,IACXy4f,EAA8BI,GAGzB7zgB,EAAQ,EAAGA,EAAQxI,EAAQwI,GAAS,EAAG,CAE9C8tgB,GAC0BM,IAA1BP,EAAax/a,UACkCggb,MAAvBR,EAAc3pf,OAItC6kY,EAAiC8kH,EACjC2X,KACAzX;AAGD,IAAIn0gB,EAAQm3I,EAAM/wI,GACdkwB,EAAMk0f,EAAQxqhB,EAAOoG,GAUrBqvJ,EAAOq1X,EAAY,KAAO3xW,EAAMxvJ,IAAI2M;AAEpCm/H,GAECA,EAAK9mJ,GAAGorgB,GAAatkX,EAAK9mJ,EAAG3O,GAC7By1J,EAAK93J,GAAGo8gB,GAAatkX,EAAK93J,EAAGyI,KAMjCqvJ,EAAOo2X,GACN1yW,EACA2xW,EAAY37H,EAAUg6H,KAAqBxO,KAC3C36gB,EACAs2B,EACAlwB,EACAqkhB,EACAx5Y,EACAs5Y,GAGIO,IACJr1X,EAAK/3J,EAAE6L,GAAK2pgB,GAGb/5V,EAAMjvJ,IAAIoM,EAAKm/H,IAGhB1/G,EAAKd,IAAI3e,EACV,CAEe,IAAX14B,GAAgB8shB,IAAgBl3f,IAC/Bs3f,EACHt3f,EAAWsmc,GAAO,IAAM4wD,EAAYv7H,KAEpC37X,EAAWsmc,GAAO,IAAM4wD,EAAavB,KAAqBxO,QACjDpxgB,GAAK2pgB,GAIZt1gB,EAASm4C,EAAKr6B,MjBvNb,WAUL,MAAM,IAAI3d,MAAM,0CAElB,CAZO,GiBiODm2gB,GAAat2gB,EAAS,GACzBw2gB,EAAiBG,KAGbuW,IACJ75P,EAAQ/mQ,IAAI2vf,EAAO9je,GAYlBi4N,EAAO6rQ,IAIL+R,GAEHzX,MASDxqf,GAAIkhgB,KAIDvrgB,EAAQ,CAAEu2f,SAAQ5kY,QAAOkoC,QAAO83G,UAASo6P,YAAa,KAAM73f;AAEhEs3f,KAEI5W,IACH/kH,EAAS8kH,EAEX,CAOA,SAASiX,GAAerV,GACvB,KAAkB,OAAXA,KAA+ByK,GAAXzK,EAAOtsgB,IACjCssgB,EAASA,EAAOv/a;AAEjB,OAAOu/a,CACR,CA4PA,SAASgW,GAAY1yW,EAAOg2O,EAAQnvZ,EAAOs2B,EAAKlwB,EAAOqkhB,EAAWx5Y,EAAOs5Y,GACxE,IAAI57gB,EACMm9gB,EAAR76Y,EACW86Y,GAAR96Y,EAEArjG,GAAO5tC,GADPyghB,GAAezghB,MAAO,GAEvB,KAEArC,EAAaquhB,EAAR/6Y,EAAqCrjG,GAAOxnC,GAAS;AAW9D,MAAO,CACNuI,IACAhR,IACAD,EAAGo8d,GAAO,KACT2wD,EAAUt7H,EAAQxgZ,GAAK3O,EAAOrC,GAAKyI,EAAOmkhB,GAEnC,KACNpxW,EAAMx2F,OAAOrsD,MAIjB,CAOA,SAASijO,GAAKs8Q,EAAQv/a,EAAM64T,GAC3B,GAAK0mH,EAAOr4T,MAUZ,IARA,IAAIj8L,EAAOs0f,EAAOr4T,MAAMjhM,MACpBC,EAAMq5f,EAAOr4T,MAAMhhM,IAEnB+nU,EACHjuP,GAAwC,KAA/BA,EAAK/sF,EAAI2pgB,GACa58a,EAAKknH,MAAOjhM,MACxC4yY,EAEY,OAAT5tY,GAAe,CACrB,IAAI0qgB,EAAyC3X,GAAiB/yf;AAG9D,GAFAgjU,EAAKlqK,OAAO94J,GAERA,IAAS/E,EACZ;AAGD+E,EAAO0qgB,CACR,CACD,CAOA,SAASV,GAAKjsgB,EAAOwuP,EAAMx3K,GACb,OAATw3K,EACHxuP,EAAMu2f,OAAOzme,MAAQknD,EAErBw3K,EAAKx3K,KAAOA,EAGA,OAATA,EACHh3E,EAAMu2f,OAAOtoV,KAAOugF,EAEpBx3K,EAAKw3K,KAAOA,CAEd,CE9sBO,SAASo+Q,GAAQ3qgB,EAAM4qgB,KAAgBp2f,GAC7C,IAAIk0f,EAAW,IAAIN,GAAcpogB;AAEjColJ,GAAM,KACL,MAAMulX,EAAUC,KAAiB;AAMjClC,EAASjP,OAAOkR,EAASA,GAAO,CAAM/8H,GAAW+8H,EAAQ/8H,KAAWp5X,MAClEyjf,MACJ,CCfO,SAASliW,GAAU/1J,EAAM6qgB,EAAe3B,GAE9C,IAAI4B;AAEAnY,IACHmY,EAAuBpY,EACvBI;AAGD,IAAI4V,EAAW,IAAIN,GAAcpogB;AAEjColJ,GAAM,KACL,IAAI2Q,EAAY80W,KAAmB;AAEnC,GAAIlY,GAGiCQ,MAFzBE,EAAwDyX,KAG1B,OAAd/0W,GAEwB,CAElD,IAAI63O,EAASolH;AASb,OAPAH,EAAiBjlH,GACjB86H,EAAS96H,OAASA,EAElBglH,MACA8V,EAASjP,OAAO1jW,EAAWA,GAAS,CAAMzwK,GAAW4jhB,EAAU5jhB,EAAQywK,UACvE68V,KAGD,CAGD8V,EAASjP,OAAO1jW,EAAWA,GAAS,CAAMzwK,GAAW4jhB,EAAU5jhB,EAAQywK,MACrEkiW,MACJ,CCjDO,SAASp5F,GAAO7+Z,EAAM+qgB,GAE5B,IAGI5uhB,EAHAiwB,OAAKmB;Cb2ZH,SAAiBnB,EAAIsjH,EAAQ,GACtB8xY,GvBjagB,SuBiae9xY,EAAOtjH,EAKpD,CANO,CatZE,KACHA,KAAQA,EAAK2+f,OACZ5uhB,IACHw9gB,GAAex9gB,GACfA,EAAI,MAGDiwB,IACHjwB,EAAIo8d,GAAO,KACV+7C,GAAO,IAA8Clof,EAAIpM,SAK9D,CChCA,SAASrjB,GAAER,GAAG,IAAIvB,EAAEoN,EAAE1L,EAAE;AAAG,GAAG,iBAAiBH,GAAG,iBAAiBA,EAAEG,GAAGH;KAAO,GAAG,iBAAiBA,EAAE,GAAGwT,MAAM1T,QAAQE,GAAG,CAAC,IAAIO,EAAEP,EAAEE;AAAO,IAAIzB,EAAE,EAAEA,EAAE8B,EAAE9B,IAAIuB,EAAEvB,KAAKoN,EAAErL,GAAER,EAAEvB,OAAO0B,IAAIA,GAAG,KAAKA,GAAG0L,EAAE,MAAM,IAAIA,KAAK7L,EAAEA,EAAE6L,KAAK1L,IAAIA,GAAG,KAAKA,GAAG0L;AAAG,OAAO1L,CAAC,CCyCzO,SAAS0uhB,GAAKvshB,GACpB,MAAqB,iBAAVA,ED1C4O,WAAgB,IAAI,IAAItC,EAAEvB,EAAEoN,EAAE,EAAE1L,EAAE,GAAGI,EAAEgS,UAAUrS,OAAO2L,EAAEtL,EAAEsL,KAAK7L,EAAEuS,UAAU1G,MAAMpN,EAAE+B,GAAER,MAAMG,IAAIA,GAAG,KAAKA,GAAG1B;AAAG,OAAO0B,CAAC,CAAvH,CC2CzOmC,GAENA,GAAS,EAElB,CCzCYw4E,OAAO,OCQX,IAAIp3D,IFHA,IAAIsT,IAAI,CAClB,IAAO,OACP,IAAQ;AAoCV,MAAMuxW,GAAa,IAAI;AA+CvB,SAASumJ,GAAc9khB,EAAQ+khB,MAC9B,IAAI5/Y,EAAY4/Y,EAAY,eAAiB,IACzCrpgB,EAAM;AAEV,IAAK,IAAIkT,KAAOlR,OAAO2wB,KAAKruC,GAAS,CACpC,IAAI1H,EAAQ0H,EAAO4uB;AACN,MAATt2B,GAA2B,KAAVA,IACpBojB,GAAO,IAAMkT,EAAM,KAAOt2B,EAAQ6sI,EAEpC,CAEA,OAAOzpH,CACR,CAMA,SAASspgB,GAAYjnhB,GACpB,MAAgB,MAAZA,EAAK,IAA0B,MAAZA,EAAK,GACpBA,EAAKic,cAENjc,CACR,CG1GO,SAASknhB,GAAUthJ,EAAKuhJ,EAAS5shB,EAAOqjM,EAAMwpV,EAAcC,GAClE,IAAIh/Q,EAA2Bu9H,EAAKooI;AAEpC,GACCS,GACApmQ,IAAS9tQ,QACA8uB,IAATg/O,EACC,CACD,IAAIi/Q,EHoCC,SAAkB/shB,EAAOqjM,EAAM2pV,GACrC,IAAIC,EAAqB,MAATjthB,EAAgB,GAAK,GAAKA;AAM1C,GAJIqjM,IACH4pV,EAAYA,EAAYA,EAAY,IAAM5pV,EAAOA,GAG9C2pV,EACH,IAAK,IAAI12f,KAAOlR,OAAO2wB,KAAKi3e,GAC3B,GAAIA,EAAW12f,GACd22f,EAAYA,EAAYA,EAAY,IAAM32f,EAAMA;KAC1C,GAAI22f,EAAUrvhB,OAIpB,IAHA,IAAIy2B,EAAMiC,EAAI14B,OACVO,EAAI,GAEAA,EAAI8uhB,EAAU/lhB,QAAQovB,EAAKn4B,KAAO,GAAG,CAC5C,IAAIma,EAAIna,EAAIk2B;AAGJ,IAANl2B,IAAW8nY,GAAW7jY,SAAS6qhB,EAAU9uhB,EAAI,KAC7Cma,IAAM20gB,EAAUrvhB,SAAUqoY,GAAW7jY,SAAS6qhB,EAAU30gB,IAIzDna,EAAIma,EAFJ20gB,GAAmB,IAAN9uhB,EAAU,GAAK8uhB,EAAU3rhB,UAAU,EAAGnD,IAAM8uhB,EAAU3rhB,UAAUgX,EAAI,EAInF,CAKH,MAAqB,KAAd20gB,EAAmB,KAAOA,CAClC,CAhCO,CGpC0BjthB,EAAOqjM,EAAMypV;AAEvC5Y,GAAa6Y,IAAoB1hJ,EAAIl/X,aAAa,WAK/B,MAAnB4ghB,EACH1hJ,EAAIvkT,gBAAgB,SACV8lc,EACVvhJ,EAAIx9X,UAAYk/gB,EAEhB1hJ,EAAI5/X,aAAa,QAASshhB,IAIR1hJ,EAAKooI,GAAezzgB,CACzC,MAAO,GAAI8shB,GAAgBD,IAAiBC,EAC3C,IAAK,IAAIx2f,KAAOw2f,EAAc,CAC7B,IAAII,IAAeJ,EAAax2f;AAEZ,MAAhBu2f,GAAwBK,MAAiBL,EAAav2f,IACzD+0W,EAAIj0T,UAAU4I,OAAO1pD,EAAK42f,EAE5B,CAGD,OAAOJ,CACR,CCvCA,SAASK,GAAc9hJ,EAAKv9H,EAAO,CAAC,EAAGx3K,EAAMy6C,GAC5C,IAAK,IAAIz6G,KAAOggE,EAAM,CACrB,IAAIt2F,EAAQs2F,EAAKhgE;AAEbw3O,EAAKx3O,KAASt2B,IACA,MAAbs2F,EAAKhgE,GACR+0W,EAAIrgY,MAAMgmP,eAAe16N,GAEzB+0W,EAAIrgY,MAAM6jK,YAAYv4I,EAAKt2B,EAAO+wI,GAGrC,CACD,CAQO,SAASq8Y,GAAU/hJ,EAAKrrY,EAAOqthB,EAAaC,GAClD,IAAIx/Q,EAA2Bu9H,EAAKqoI;AAEpC,GAAIQ,GAAapmQ,IAAS9tQ,EAAO,CAChC,IAAIuthB,EJ4FC,SAAkBvthB,EAAO0H,GAC/B,GAAIA,EAAQ,CACX,IAGI8lhB,EAGAC,EANAC,EAAY;AAehB,GAPIx8gB,MAAM1T,QAAQkK,IACjB8lhB,EAAgB9lhB,EAAO,GACvB+lhB,EAAmB/lhB,EAAO,IAE1B8lhB,EAAgB9lhB,EAGb1H,EAAO,CACVA,EAAQguC,OAAOhuC,GACbs3Z,WAAW,qBAAsB,IACjC3nT;AAGF,IAAIg+a,KACAC,EAAS,EACTC,KAEAC,EAAiB;AAEjBN,GACHM,EAAe7ohB,QAAQmgB,OAAO2wB,KAAKy3e,GAAevsgB,IAAIyrgB,KAEnDe,GACHK,EAAe7ohB,QAAQmgB,OAAO2wB,KAAK03e,GAAkBxsgB,IAAIyrgB;AAG1D,IAAI5G,EAAc,EACdiI,GAAc;AAElB,MAAM15f,EAAMr0B,EAAMpC;AAClB,IAAK,IAAID,EAAI,EAAGA,EAAI02B,EAAK12B,IAAK,CAC7B,IAAI6D,EAAIxB,EAAMrC;AAoBd,GAlBIkwhB,EACO,MAANrshB,GAA8B,MAAjBxB,EAAMrC,EAAI,KAC1BkwhB,MAESF,EACNA,IAAWnshB,IACdmshB,MAEe,MAANnshB,GAA8B,MAAjBxB,EAAMrC,EAAI,GACjCkwhB,KACgB,MAANrshB,GAAmB,MAANA,EACvBmshB,EAASnshB,EACO,MAANA,EACVoshB,IACgB,MAANpshB,GACVoshB,KAGIC,QAAcF,GAA+B,IAAXC,EACtC,GAAU,MAANpshB,IAA6B,IAAhBushB,EAChBA,EAAapwhB;KACP,GAAU,MAAN6D,GAAa7D,IAAM02B,EAAM,EAAG,CACtC,IAAoB,IAAhB05f,EAAmB,CACtB,IAAItohB,EAAOinhB,GAAY1shB,EAAMsB,UAAUwkhB,EAAaiI,GAAYp+a;AAE3Dm+a,EAAe1rhB,SAASqD,KAClB,MAANjE,GACH7D,IAID+vhB,GAAa,IADE1thB,EAAMsB,UAAUwkhB,EAAanohB,GAAGgyG,OACjB,IAEhC,CAEAm2a,EAAcnohB,EAAI,EAClBowhB,GAAc,CACf,CAEF,CACD,CAWA,OATIP,IACHE,GAAalB,GAAcgB,IAGxBC,IACHC,GAAalB,GAAciB,OAIP,MADrBC,EAAYA,EAAU/9a,QACI,KAAO+9a,CAClC,CAEA,OAAgB,MAAT1thB,EAAgB,KAAOguC,OAAOhuC,EACtC,CAlGO,CI5F0BA,EAAOsthB;AAEjCpZ,GAAaqZ,IAAoBliJ,EAAIl/X,aAAa,WAC/B,MAAnBohhB,EACHliJ,EAAIvkT,gBAAgB,SAEpBukT,EAAIrgY,MAAM44E,QAAU2pc,GAIFliJ,EAAKqoI,GAAe1zgB,CACzC,MAAWsthB,IACNp8gB,MAAM1T,QAAQ8vhB,IACjBH,GAAc9hJ,EAAKgiJ,IAAc,GAAIC,EAAY,IACjDH,GAAc9hJ,EAAKgiJ,IAAc,GAAIC,EAAY,GAAI,cAErDH,GAAc9hJ,EAAKgiJ,EAAaC;AAIlC,OAAOA,CACR,CCxBqB90c,OAAO,SACPA,OAAO;AADrB,MAGDw1c,GAAoBx1c,OAAO,qBAC3By1c,GAAUz1c,OAAO,WAEjB01c,GAAWra,EAAW,OAAS;AAsI9B,SAASsa,GAAcpugB,EAASokX,EAAWnkY,EAAOouhB,GACxD,IAAI30e,EAkZL,SAAwB15B,GACvB,OACqBA,EAASyzf,KAAsB,CAClDwa,CAACA,IAAoBjugB,EAAQ0B,SAASrf,SAAS,KAC/C6rhB,CAACA,IAAUlugB,EAAQ2uJ,eAAiBqlW,EAGvC,CAPA,CAlZiCh0f;AAE5Bm0f,IACHz6d,EAAW0qV,GAAapkX,EAAQ5T,aAAag4X,GAG9B,QAAdA,GACc,WAAdA,GACe,SAAdA,GAAwBpkX,EAAQ0B,WAAaysgB,KAc5Cz0e,EAAW0qV,MAAgB1qV,EAAW0qV,GAAankY,KAErC,YAAdmkY,IAEHpkX,EAAQwzf,GAAuBvzgB,GAGnB,MAATA,EACH+f,EAAQ+mE,gBAAgBq9S,GACG,iBAAVnkY,GAgYnB,SAAqB+f,GACpB,IAKIyua,EALA6/F,EAAYtugB,EAAQ5T,aAAa,OAAS4T,EAAQ0B,SAClD60H,EAAUg4Y,GAAc3kgB,IAAI0kgB;AAChC,GAAI/3Y,EAAS,OAAOA;AACpBg4Y,GAAcpkgB,IAAImkgB,EAAY/3Y,EAAU;AAQxC,IALA,IAAIupB,EAAQ9/I,EACRwugB,EAAgBvsgB,QAAQ1f,UAIrBishB,IAAkB1uX,GAAO,CAG/B,IAAK,IAAIvpI,KAFTk4Z,EAAcmkF,EAAgB9yW,GAI5B2uR,EAAYl4Z,GAAKpM,KAET,cAARoM,GACQ,gBAARA,GACQ,cAARA,GAEAggH,EAAQrxI,KAAKqxB;AAIfupI,EAAQizW,EAAiBjzW,EAC1B,CAEA,OAAOvpB,CACR,CA/BA,CAhYqDv2H,GAAS3d,SAAS+hY,GAErEpkX,EAAQokX,GAAankY,EAErB+f,EAAQtU,aAAa04X,EAAWnkY,GAElC,CAuXA,IAAAq7H,GAAIizZ,GAAgB,IAAI55f;AAAAA;AAAAA,qEC5cR,IAAItT;ACzHpB,IAAA8vL,GAAA,IAAA1+F,QAAAg8a,GAAA,IAAAh8a,QAAAm+B,GAAA,IAAAn+B,QAAAi8a,GAAA,IAAA1pX;AAIA,MAAM2pX,GAcL/1c,YAAYt5E;AAAAA,GAAShC,OAAAoxhB,UAAApxhB,MAZrB0jL,GAAA1jL,KAAA6zM,GAAa,IAAI1+F,SAGjBuuE,GAAA1jL,KAAAmxhB,QAAS,GAGTztW,GAAA1jL,KAAAszI,QAAQ,GAOPgjE,GAAKhjE,GAALtzI,KAAgBgC,EACjB,CAMAstB,QAAQ5M,EAASk5I,GAChB,IAAIoC,EAAYu4C,GAAK1C,GAAL7zM,MAAgBssB,IAAI5J,IAAY,IAAIqB;AAMpD,OALAi6I,EAAUpmH,IAAIgkH,GAEd26C,GAAK1C,GAAL7zM,MAAgB6sB,IAAInK,EAASs7I,GAC7B89W,GAAAsV,GAAApxhB,KAAKsxhB,IAAY1mhB,KAAjB5K,MAAoBsvB,QAAQ5M,EAAS6zL,GAAKjjE,GAALtzI,OAE9B,KACN,IAAIg+J,EAAYu4C,GAAK1C,GAAL7zM,MAAgBssB,IAAI5J;AACpCs7I,EAAU14E,OAAOs2E,GAEM,IAAnBoC,EAAU3/I,OACbk4L,GAAK1C,GAAL7zM,MAAgBslF,OAAO5iE,GACQ6zL,GAAK46U,GAALnxhB,MAAgB6vB,UAAUnN,IAG5D,EAtC4B,SAAA4ugB,KAyC3B,OACC/6U,GAAK46U,GAALnxhB,OACCs2M,GAAK66U,GAALnxhB,KAAiB,IAAI6tB,eACQsB,IAC5B,IAAK,IAAIutB,KAASvtB,EAEjB,IAAK,IAAIysI,KADTy1X,GAAwBligB,QAAQtC,IAAI6vB,EAAMlzC,OAAQkzC,GAC7B65J,GAAK1C,GAAL7zM,MAAgBssB,IAAIowB,EAAMlzC,SAAW,IACzDoyJ,EAASl/G,KAMf,CACA60e,GAvDKF;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,mIAAuB,UAWX,IAAIl8a;AA8CtB,IAIIq8a,GAA6C,IAAIH,GAAwB,CAC5ExuR,IAAK;AA6BC,SAAS4uR,GAAkB/ugB,EAAS5e,EAAM+oB,GAChD,IAAI6kgB,EAAQF,GAA2BligB,QAAQ5M,EAAS,IAAMmK,EAAInK,EAAQ5e;AAE1E00gB,GAAO,KAENiD,GAAQ,IAAM5uf,EAAInK,EAAQ5e,KACnB4thB,GAET,CC/FA,SAASC,GAAcC,EAAaC,GACnC,OACCD,IAAgBC,GAAwBD,IAAc5b,KAAkB6b,CAE1E,CAUO,SAASC,GAAUD,EAAuB,CAAC,EAAGlhhB,EAAQohhB,EAAWC,GACvE,IAAIC,EAAoDta,EAAmB92gB,EACvEinB,EAAgC2wf;AAiDpC,OA/CAD,GAAO,KAEN,IAAI0Z,EAGApqe;AAmBJ,OAjBA0zd,GAAc,KACb0W,EAAYpqe,EAEZA,EAAQkqe,OAAiB,GAEzBvW,GAAQ,KACFkW,GAAcI,KAAajqe,GAAQ+pe,KACvClhhB,EAAOkhhB,KAAyB/pe,GAG5Boqe,GAAaP,GAAcI,KAAaG,GAAYL,IACvDlhhB,EAAO,QAASuhhB,QAMb,KAMN,IAAIrthB,EAAIijB;AACR,KAAOjjB,IAAMothB,GAAiC,OAAbpthB,EAAEijB,QAAmBjjB,EAAEijB,OAAO5b,EAAI0pgB,GAClE/wgB,EAAIA,EAAEijB;AAEP,MAKMqqgB,EAAoBtthB,EAAEumN;AAC5BvmN,EAAEumN,SAAW,KALRtjK,GAAS6pe,GAAcI,KAAajqe,GAAQ+pe,IAC/ClhhB,EAAO,QAASm3C,GAMjBqqe,UAKIN,CACR,CCxBA,MAAMO,GAAqB,CAC1B9lgB,IAAI9iB,EAAQyvB,GACX,IAAIzvB,EAAOgzG,QAAQ5rF,IAAIqI,GACvB,OAAOzvB,EAAO8gD,MAAMrxB,EACrB,EACApM,IAAGA,CAACrjB,EAAQyvB,OAQZyiE,yBAAyBlyF,EAAQyvB,GAChC,IAAIzvB,EAAOgzG,QAAQ5rF,IAAIqI,GACvB,OAAIA,KAAOzvB,EAAO8gD,MACV,CACNlB,cACAC,gBACA1mD,MAAO6G,EAAO8gD,MAAMrxB,SAJtB,CAOD,EACArI,IAAGA,CAACpnB,EAAQyvB,KACPzvB,EAAOgzG,QAAQ5rF,IAAIqI,IAChBA,KAAOzvB,EAAO8gD,MAEtB+/I,QAAQ7gM,GACAkpI,QAAQ23D,QAAQ7gM,EAAO8gD,OAAO/jC,OAAQ0S,IAASzvB,EAAOgzG,QAAQ5rF,IAAIqI;AAkMpE,SAASiyJ,GAAK5gI,EAAOrxB,EAAK26G,EAAOz9G,GACvC,IACIk8f,KAAoBC,EAAR1+Y,GACZ2lI,KAAgBg5Q,GAAR3+Y,GAER4+Y,EAAmCr8f,EACnCs8f,KACAC,OAAyDjhgB,EAEzDkhgB,EAAeA,IACdp5Q,GACHm5Q,IAAoBvZ,GAAgChjf,GAC7C7J,GAAIomgB,KAGRD,IACHA,KAEAD,EAAiBj5Q,EACdkiQ,GAAgCtlf,GAAU71B,GAIvCkyhB;AAIR,IAAIl+Y;AAEJ,GAAI+9Y,EAAU,CAGb,IAAIO,EAAiB5c,KAAgB1rd,GAAS2rd,KAAgB3rd;AAE9DgqF,EACC+gY,EAAe/qd,EAAOrxB,IAAMpM,MAC3B+lgB,GAAkB35f,KAAOqxB,EAASh5C,GAAOg5C,EAAMrxB,GAAO3nB,OAAKmgB,EAC9D,CAGA,IAAI4xf,EAmBAxtG,EAlBAg9G;AA4CJ,GA1CIR,GACFhP,EAAewP,GpCzGX,WACN,IAAIC,EAA4BhZ;AAEhC,IAEC,OADAA,MACO,CoCoGuExvd,EAAMrxB,GpCpGtE6gf,GACf,CAAC,QACAA,GAAmBgZ,CACpB,CACD,CATO,GoC2GLzP,EAAkC/4d,EAAMrxB,QAGnBxH,IAAlB4xf,QAA4C5xf,IAAb0E,IAClCktf,EAAgBsP,IAEZr+Y,IhC0DC,WAQL,MAAM,IAAI5zI,MAAM,2CAElB,CAVO,GgCxDJ4zI,EAAO+uY,KAQRxtG,EAASA,KACR,IAAIlza,EAA0B2nD,EAAMrxB;AACpC,YAAcxH,IAAV9uB,EAA4BgwhB,KAChCF,KACO9vhB,MAmBaowhB,EAARn/Y,GACb,OAAOiiS;AAKR,GAAIvhS,EAAQ,CACX,IAAI0+Y,EAAgB1oe,EAAM2oe;AAC1B,OACC,SAA2BtwhB,EAA8BskN,GACxD,OAAIr0M,UAAUrS,OAAS,GAKP0mN,IAAY+rU,IAAiBH,GAClBv+Y,EAAQ2yE,EAAW4uN,IAAWlza,GAGjDA,GAGDkza,GACR,CAEF,CAMA,IAAIq9G,KAEAvzhB,GAAcwzhB,EAARv/Y,EAAoCulY,GAAUyF,IAAoB,KAC3EsU,KACOr9G;AAQJw8G,GAAU/lgB,GAAI3sB;AAElB,IAAIgmhB,EAAuClN;AAE3C,OACC,SAA6B91gB,EAA8BskN,GAC1D,GAAIr0M,UAAUrS,OAAS,EAAG,CACzB,MAAM6yhB,EAAYnsU,EAAW36L,GAAI3sB,GAAc0yhB,EAAWloV,GAAMxnM,GAASA;AASzE,OAPAkqB,GAAIltB,EAAGyzhB,GACPF,UAEuBzhgB,IAAnB+ggB,IACHA,EAAiBY,GAGXzwhB,CACR,CAKA,OAAKo8gB,IAAwBmU,GAAkCpa,MAAlB6M,EAAcz5gB,EACnDvM,EAAE2R,EAGHgb,GAAI3sB,EACZ,CAEF,UAAAm7I,GAAAz6I,EAAAvB,EAAA0B,IAAA,SAAAH,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,oEAAAxoD,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAAgxJ,GAAAnxJ,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAA+mgB,GAAAhzhB,EAAAvB,GAAA,UAAAw0hB,GAAAjzhB,EAAAvB,EAAA0B,GAAA,OAAAH,EAAAwsB,IAAAwmgB,GAAAhzhB,EAAAvB,GAAA0B,IAAA,UAAA6yhB,GAAAhzhB,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDClXA,IAAA2rJ,GAAA,IAAAr/F,QAAAg+O,GAAA,IAAAh+O;AAKA,MAAMo+a,GAYLj4c,YAAYt5E,GAVZ0hL,GAAA1jL,KAAAw0M,QAAO,GAGP9wB,GAAA1jL,KAAAmzV,QAAS;AAQR,IAAIphF,EAAU,IAAI16O,IAMdm8f,EAAaA,CAACv6f,EAAKt2B,KACtB,IAAIH,EAAI4ghB,GAAezghB,MAAO;AAE9B,OADAovQ,EAAQllP,IAAIoM,EAAKz2B,GACVA;AAMR,MAAM8nD,EAAQ,IAAI8/I,MACjB,IAAMpoM,EAAQsoD,OAAS,CAAC,EAAIghe,SAAU,CAAC,GACvC,CACCh/f,IAAGA,CAAC9iB,EAAQ0hL,IACJ5+J,GAAIylP,EAAQzlP,IAAI4+J,IAASsoW,EAAWtoW,EAAMx4C,QAAQpmH,IAAI9iB,EAAQ0hL,KAEtEt6J,IAAGA,CAACpnB,EAAQ0hL,IAEPA,IAAS+qV,IAEb3pf,GAAIylP,EAAQzlP,IAAI4+J,IAASsoW,EAAWtoW,EAAMx4C,QAAQpmH,IAAI9iB,EAAQ0hL,KACvDx4C,QAAQ9hH,IAAIpnB,EAAQ0hL,IAE5Br+J,IAAGA,CAACrjB,EAAQ0hL,EAAMvoL,KACjBkqB,GAAIklP,EAAQzlP,IAAI4+J,IAASsoW,EAAWtoW,EAAMvoL,GAAQA,GAC3C+vI,QAAQ7lH,IAAIrjB,EAAQ0hL,EAAMvoL;AAKpC2zM,GAAK68I,GAALnzV,MAAkBgC,EAAQy7S,QAAUA,GAAUopG,IAAO7kZ,EAAQi4K,UAAW,CACvEzwK,OAAQxH,EAAQwH,OAChBsoZ,OAAQ9vZ,EAAQ8vZ,OAChBxnW,QACA1xB,QAAS52B,EAAQ42B,QACjBqyf,MAAOjphB,EAAQiphB,UACf5mC,QAASrif,EAAQqif,QACjB+mC,eAAgBpphB,EAAQophB,kBAKCpphB,GAASsoD,OAAOmpe,aAAUzxhB,EAAQiqe,MAC3D3tL,KAGDhoG,GAAK9B,GAALx0M,KAAesqD,EAAMghe;AAErB,IAAK,MAAMryf,KAAOlR,OAAO2wB,KAAK69J,GAAK48I,GAALnzV,OACjB,SAARi5B,GAA0B,aAARA,GAA8B,QAARA,GAC5Cm8e,EAAgBp1gB,KAAMi5B,EAAK,CAC1B3M,MACC,OAAOiqL,GAAK48I,GAALnzV,MAAei5B,EACvB,EAEApM,IAAIlqB,GACH4zM,GAAK48I,GAALnzV,MAAei5B,GAAOt2B,CACvB,EACAymD;AAIFmtJ,GAAK48I,GAALnzV,MAAe0zhB,KAAiDz6b,IAC/DlxE,OAAO4rD,OAAOrpB,EAAO2uC,IAGtBs9G,GAAK48I,GAALnzV,MAAe2zhB,SAAW,KACzBz5O,GAAQ3jG,GAAK48I,GAALnzV,OAEV,CAGA0zhB,KAAKppe,GACJisJ,GAAK48I,GAALnzV,MAAe0zhB,KAAKppe,EACrB,CAOAspe,IAAIlqhB,EAAOiQ,GACV48L,GAAK/B,GAALx0M,MAAa0J,GAAS6sM,GAAK/B,GAALx0M,MAAa0J,IAAU;AAG7C,MAAMi/G,EAAKA,IAAIjwF,IAAS/e,EAAS/O,KAAK5K,QAAS04B;AAE/C,OADA69K,GAAK/B,GAALx0M,MAAa0J,GAAO9B,KAAK+gH,GAClB,KACN4tF,GAAK/B,GAALx0M,MAAa0J,GAAS6sM,GAAK/B,GAALx0M,MAAa0J,GAAO6c,OAA+B+J,GAAOA,IAAOq4F,GAEzF,CAEAgra,WACCp9U,GAAK48I,GAALnzV,MAAe2zhB,UAChB,WAAA/yZ,GAAAvgI,EAAAvB,EAAA0B,GAAA,OAAA1B,EAAA,SAAAuB,GAAA,IAAAvB,EAAA,SAAAuB,GAAA,oBAAAA,MAAA,OAAAA;AAAA,IAAAvB,EAAAuB,EAAA86E,OAAAC;AAAA,YAAAt8E,EAAA,KAAA0B,EAAA1B,EAAA8L,KAAAvK,EAAA;AAAA,oBAAAG,EAAA,OAAAA;AAAA,UAAAqoD,UAAA,uDAAAlY,OAAAtwC,EAAA,EAAAA;AAAA,uBAAAvB,MAAA,IAAAA,MAAAuB,EAAA0nB,OAAAmhC,eAAA7oD,EAAAvB,EAAA,CAAA6D,MAAAnC,EAAA4oD,YAAA,EAAAC,cAAA,EAAAgyB,UAAA,IAAAh7E,EAAAvB,GAAA0B,EAAAH,CAAA,CCrKD,IAAIwzhB;AA2NJ,SAASC,GAAyB5oW,EAAMvoL,EAAOoxhB,EAAkB/tgB,GAChE,MAAMliB,EAAOiwhB,EAAiB7oW,IAAOpnL;AAErC,GADAnB,EAAiB,YAATmB,GAAuC,kBAAVnB,EAA+B,MAATA,EAAgBA,GACtEqjB,IAAc+tgB,EAAiB7oW,GACnC,OAAOvoL;AACD,GAAkB,gBAAdqjB,EACV,OAAQliB,GACP,IAAK,SACL,IAAK,QACJ,OAAgB,MAATnB,EAAgB,KAAOsT,KAAK8iB,UAAUp2B;AAC9C,IAAK,UACJ,OAAOA,EAAQ,GAAK;AACrB,IAAK,SACJ,OAA8BA,GAAP;AACxB,QACC,OAAOA,OAGT,OAAQmB,GACP,IAAK,SACL,IAAK,QACJ,OAAOnB,GAASsT,KAAKC,MAAMvT;AAC5B,IAAK,UAIL,QACC,OAAOA;AAHR,IAAK,SACJ,OAAgB,MAATA,GAAiBA,EAAQA,EAKpC,KAAAy+H;ACnMO,SAAS4yZ,KAKf,OAJwB,OAApBtb,InCyOE,WAQL,MAAM,IAAIh4gB,MAAM,yDAElB,CAVO,ImCrOEg4gB,GAAgBtxO,KAAO,IAAI6sP,iBAAmBhb,MACvD,CAgBO,SAASib,GAAQ5jgB,GACG,OAAtBqnf,GACHt3gB,IAMA0lhB,GAAY,KACX,MAAMt3f,EAAUgtf,GAAQnrf;AACxB,GAAuB,mBAAZ7B,EAAwB,OAAkCA,GAGxE,UAAAmzG,GAAAvhI,EAAAvB,EAAA0B,GAAAshI,GAAAzhI,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAAshI,GAAAzhI,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,2EAAA5J,GAAA5+C,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAA21G,GAAA5hI,EAAAvB,GAAA,UAAAmjI,GAAA5hI,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDDvF2B,mBAAhBhkC,cACVgvgB,GAAgB,cAAchvgB,YA6B7By2D,YAAY64c,EAAiBC,EAASC,GACrCrxX,QA7BD7vB,GAAAnzI,KAAA,iBAEAmzI,GAAAnzI,KAAA,cAEAmzI,GAAAnzI,KAAA,cAEAmzI,GAAAnzI,KAAA,WAEAmzI,GAAAnzI,KAAA,MACM,CAAC,GACPmzI,GAAAnzI,KAAA,UAEAmzI,GAAAnzI,KAAA,QACQ,CAAC,GACTmzI,GAAAnzI,KAAA,MACM,CAAC,GACPmzI,GAAAnzI,KAAA,QACQ,IAAIq3B,KACZ87G,GAAAnzI,KAAA,eAEAmzI,GAAAnzI,KAAA,eACe,MASdA,KAAKs0hB,OAASH,EACdn0hB,KAAKu0hB,IAAMH,EAEPC,IAGHr0hB,KAAKw0hB,aAAex0hB,KAAKy0hB,aAAaJ,GAExC,CAOAlmgB,iBAAiBrqB,EAAM83J,EAAU55J,GAMhC,GAFAhC,KAAK00hB,IAAI5whB,GAAQ9D,KAAK00hB,IAAI5whB,IAAS,GACnC9D,KAAK00hB,IAAI5whB,GAAM8D,KAAKg0J,GAChB57J,KAAK20hB,IAAK,CACb,MAAMjD,EAAQ1xhB,KAAK20hB,IAAIf,IAAI9vhB,EAAM83J;AACjC57J,KAAK40hB,MAAM/ngB,IAAI+uI,EAAU81X,EAC1B,CACA1uX,MAAM70I,iBAAiBrqB,EAAM83J,EAAU55J,EACxC,CAOAwtB,oBAAoB1rB,EAAM83J,EAAU55J,GAEnC,GADAghK,MAAMxzI,oBAAoB1rB,EAAM83J,EAAU55J,GACtChC,KAAK20hB,IAAK,CACb,MAAMjD,EAAQ1xhB,KAAK40hB,MAAMtogB,IAAIsvI;AACzB81X,IACHA,IACA1xhB,KAAK40hB,MAAMtvc,OAAOs2E,GAEpB,CACD,CAEA,uBAAAi5X,GAEC,GADA70hB,KAAK80hB,SACA90hB,KAAK20hB,IAAK,CAGd,SADMthd,QAAQ2B,WACTh1E,KAAK80hB,MAAQ90hB,KAAK20hB,IACtB;AAGD,SAASI,EAAY3shB,GAIpB,OAAQ0pZ,IACP,MAAMkjI,EAAOzP,GAAe;AACf,YAATn9gB,IAAoB4shB,EAAK5shB,KAAOA,GAEpCkpM,GAAOwgN,EAAQkjI,GAEjB,CAEA,MAAMZ,EAAU,CAAC,EACXa,EA0JV,SAAmCvygB,GAElC,MAAMuE,EAAS,CAAC;AAIhB,OAHAvE,EAAQ4qM,WAAW9yM,QAAS0J,IAC3B+C,EAAoC/C,EAAM8wgB,MAAQ,gBAE5C/tgB,CACR,CAPA,CA1JqDjnB;AACjD,IAAK,MAAMoI,KAAQpI,KAAKu0hB,IACnBnshB,KAAQ6shB,IACE,YAAT7shB,GAAuBpI,KAAKk1hB,IAAI15gB,SAInC44gB,EAAQhshB,GAAQ2shB,EAAY3shB,IAH5BpI,KAAKk1hB,IAAI15gB,SAAWu5gB,EAAY3shB,GAChCgshB,EAAQx/gB;AAMX,IAAK,MAAMkyX,KAAa9mY,KAAKo8C,WAAY,CAExC,MAAMh0C,EAAOpI,KAAKm1hB,MAAMruJ,EAAU1+X;AAC5BA,KAAQpI,KAAKk1hB,MAClBl1hB,KAAKk1hB,IAAI9shB,GAAQ0rhB,GAAyB1rhB,EAAM0+X,EAAUnkY,MAAO3C,KAAKo1hB,MAAO,UAE/E,CAEA,IAAK,MAAMn8f,KAAOj5B,KAAKo1hB,MAEhBn8f,KAAOj5B,KAAKk1hB,UAAsBzjgB,IAAdzxB,KAAKi5B,KAE9Bj5B,KAAKk1hB,IAAIj8f,GAAOj5B,KAAKi5B,UAEdj5B,KAAKi5B;AAGdj5B,KAAK20hB,KD/G4B3yhB,EC+GD,CAC/Bi4K,UAAWj6K,KAAKs0hB,OAChB9qhB,OAAQxJ,KAAKw0hB,cAAgBx0hB,KAC7BsqD,MAAO,IACHtqD,KAAKk1hB,IACRd,UACAX,OAAQzzhB,ODnHN,IAAIuzhB,GAAiBvxhB,ICwHzBhC,KAAKq1hB,K1B6GF,SAAqB/kgB,GAC3Botf,GAAMC;AACN,MAAMnF,EAASkN,GAAcG,OAAgCv1f;AAE7D,MAAO,KACNutf,GAAerF,GAEjB,CAPO,C0B7GqB,KACvBgD,GAAc,KACbx7gB,KAAKs1hB;AACL,IAAK,MAAMr8f,KAAOk8e,EAAYn1gB,KAAK20hB,KAAM,CACxC,IAAK30hB,KAAKo1hB,MAAMn8f,IAAMs8f,QAAS;AAC/Bv1hB,KAAKk1hB,IAAIj8f,GAAOj5B,KAAK20hB,IAAI17f;AACzB,MAAMu8f,EAAkB1B,GACvB76f,EACAj5B,KAAKk1hB,IAAIj8f,GACTj5B,KAAKo1hB,MACL;AAEsB,MAAnBI,EACHx1hB,KAAKypF,gBAAgBzpF,KAAKo1hB,MAAMn8f,GAAK6tW,WAAa7tW,GAElDj5B,KAAKoO,aAAapO,KAAKo1hB,MAAMn8f,GAAK6tW,WAAa7tW,EAAKu8f,EAEtD,CACAx1hB,KAAKs1hB;AAIP,IAAK,MAAMxxhB,KAAQ9D,KAAK00hB,IACvB,IAAK,MAAM94X,KAAY57J,KAAK00hB,IAAI5whB,GAAO,CACtC,MAAM4thB,EAAQ1xhB,KAAK20hB,IAAIf,IAAI9vhB,EAAM83J;AACjC57J,KAAK40hB,MAAM/ngB,IAAI+uI,EAAU81X,EAC1B,CAED1xhB,KAAK00hB,IAAM,CAAC,CACb,CDvJI,IAA8B1yhB,CCwJnC,CAUAyzhB,yBAAyB/uD,EAAMgvD,EAAWt0b,GACrCphG,KAAKs1hB,MACT5uD,EAAO1me,KAAKm1hB,MAAMzuD,GAClB1me,KAAKk1hB,IAAIxuD,GAAQotD,GAAyBptD,EAAMtlY,EAAUphG,KAAKo1hB,MAAO,UACtEp1hB,KAAK20hB,KAAKjB,KAAK,CAAEhtD,CAACA,GAAO1me,KAAKk1hB,IAAIxuD,KACnC,CAEAivD,uBACC31hB,KAAK80hB,QAELzhd,QAAQ2B,UAAUvB,KAAK,MACjBzzE,KAAK80hB,MAAQ90hB,KAAK20hB,MACtB30hB,KAAK20hB,IAAIhB,WACT3zhB,KAAKq1hB,OACLr1hB,KAAK20hB,SAAMljgB,IAGd,CAKA0jgB,MAAMS,GACL,OACCzgB,EAAYn1gB,KAAKo1hB,OAAO/+f,KACtB4C,GACAj5B,KAAKo1hB,MAAMn8f,GAAK6tW,YAAc8uJ,IAC5B51hB,KAAKo1hB,MAAMn8f,GAAK6tW,WAAa7tW,EAAI5U,gBAAkBuxgB,IAClDA,CAEP,IE7NoB,oBAAXnshB,UAERA,OAAOoshB,WAAa,CAAC,GAAGvkhB,IAAM,IAAIyS,KAAO6zB,IAAIk+e;ACGhD,IAAA3zZ,GAAIl5C,MAEJ8sc,GAAA,IAAA5gb,QAAA6gb,GAAA,IAAA7gb,QAAA8gb,GAAA,IAAA9gb,QAAA+gb,GAAA,IAAAxuX;AAgCO,MAAMyuX,WAAmBx8e,KAS/B2hC,eAAe1G;AAEdouF,SAASpuF,MAAQ50E,OAAAk2hB,UAAAl2hB,MAVlB0jL,GAAA1jL,KAAA+1hB,GAAQ9zgB,GAAM+gJ,MAAMnoF,YAGpB6oG,GAAA1jL,KAAAg2hB,GAAY,IAAI3+f,KAEhBqsJ,GAAA1jL,KAAAi2hB,GAAYvd,IAWNzvb,IAAQ6yb,GAAAoa,GAAAl2hB,KAAKi7P,IAAKrwP,KAAV5K,KACd,EAlBsB,SAAAi7P,KAqBrBhyK;AAEA,IAAIu5E,EAAQ2zX,GAAWlxhB,UACnBmxhB,EAAaz8e,KAAK10C,UAElB8uE,EACHhsD,OAAOs7F,oBAAoB+ya;AAG5B,IAAK,MAAMpid,KAAUD,GAChBC,EAAOpjC,WAAW,QAAUojC,EAAOpjC,WAAW,OAAoB,YAAXojC,KAE1DwuF,EAAMxuF,GAAU,YAAat7C,GAG5B,GAAIA,EAAKn4B,OAAS,EAGjB,OAFA+rB,GAAIiqL,GAAKw/U,GAAL/1hB,OAEGo2hB,EAAWpid,GAAQrhE,MAAM3S,KAAM04B;AAGvC,IAAI/4B,EAAI42M,GAAKy/U,GAALh2hB,MAAessB,IAAI0nD;AAE3B,QAAUviD,IAAN9xB,EAAiB,CAGpB,MAAM+ihB,EAAWhK;AACjBwB,GAAoB3jU,GAAK0/U,GAALj2hB,OAEpBL,EAAIw5gB,GAAQ,KACX7sf,GAAIiqL,GAAKw/U,GAAL/1hB,OAEGo2hB,EAAWpid,GAAQrhE,MAAM3S,KAAM04B,KAOvC69K,GAAKy/U,GAALh2hB,MAAe6sB,IAAImnD,EAAQr0E,GAE3Bu6gB,GAAoBwI,EACrB,CAEA,OAAOp2f,GAAI3sB,EACZ,GAGGq0E,EAAOpjC,WAAW,SAErB4xH,EAAMxuF,GAAU,YAAat7C,GAE5B,IAAIzR,EAASmvgB,EAAWpid,GAAQrhE,MAAM3S,KAAM04B;AAE5C,OADA7L,GAAI0pL,GAAKw/U,GAAL/1hB,MAAYo2hB,EAAWv7c,QAAQjwE,KAAK5K,OACjCinB,CACR,EAGH,UAAAu+H,GAAAnlJ,EAAAvB,EAAA0B,GAAA69C,GAAAh+C,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAA69C,GAAAh+C,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,2EAAAvnD,GAAAjB,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAAm3Q,GAAApjS,EAAAvB,GAAA,UAAA2kS,GAAApjS,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDACAwte,GAhFYF;ACnCb,IAAAzwY,GAAI4wY,GAAe,CAAC,UAAW,iBAAkB,aAAc,gBAC3DC,GAAmB,CAAC,aAAc,eAAgB,sBAAuB,SAEzEttc,MAEJutc,GAAA,IAAArhb,QAAAshb,GAAA,IAAAthb,QAAAkhG,GAAA,IAAAlhG,QAAAuhb,GAAA,IAAAvhb,QAAAwhb,GAAA,IAAAjvX;AAmCO,MAAMkvX,WAAkB7ygB,IAU9Bu3D,YAAY34E,GAWX,GAVAqgK,WAoBDhjK,OAAA22hB,UAAA32hB,MA7BA0jL,GAAA1jL,KAAAw2hB,GAAW,IAAIn/f,KACfqsJ,GAAA1jL,KAAAy2hB,GAAWx0gB,GAAM,IACjByhK,GAAA1jL,KAAAq2M,GAAQp0L,GAAM,IACdyhK,GAAA1jL,KAAA02hB,GAAkBxS,KAAmB,GAgBhCvhhB,EAAO,CACV,IAAK,IAAI+f,KAAW/f,EACnBqgK,MAAMprH,IAAIl1B;AAEX6zL,GAAKF,GAALr2M,MAAWsR,EAAI0xJ,MAAM3kJ,IACtB,KAAA/d;AAEK2oF,IAAQ6yb,GAAA6a,GAAA32hB,KAAKi7P,IAAKrwP,KAAV5K,KACd,CA2CA4wB,IAAIjuB,GACH,IAAIiuB,EAAMoyI,MAAMpyI,IAAIjuB,GAChBovQ,EAAUx7D,GAAKigV,GAALx2hB,MACVwC,EAAIuvQ,EAAQzlP,IAAI3pB;AAEpB,QAAU8uB,IAANjvB,EAAiB,CACpB,IAAKouB,EAIJ,OADAtE,GAAIiqL,GAAKkgV,GAALz2hB;AAILwC,EAAIs5gB,GAAA6a,GAAA32hB,KAAK62J,IAAOjsJ,KAAZ5K,SAMJ+xQ,EAAQllP,IAAIlqB,EAAOH,EACpB,CAGA,OADA8pB,GAAI9pB,GACGouB,CACR,CAGAgnB,IAAIj1C,GAOH,OANKqgK,MAAMpyI,IAAIjuB,KACdqgK,MAAMprH,IAAIj1C,GACVkqB,GAAI0pL,GAAKF,GAALr2M,MAAYgjK,MAAM3kJ,MACtBqrY,GAAUnzM,GAAKkgV,GAALz2hB,QAGJA,IACR,CAGAslF,OAAO3iF,GACN,IAAImlZ,EAAU9kP,MAAM19E,OAAO3iF,GACvBovQ,EAAUx7D,GAAKigV,GAALx2hB,MACVwC,EAAIuvQ,EAAQzlP,IAAI3pB;AAYpB,YAVU8uB,IAANjvB,IACHuvQ,EAAQzsL,OAAO3iF,GACfkqB,GAAIrqB,OAGDslZ,IACHj7X,GAAI0pL,GAAKF,GAALr2M,MAAYgjK,MAAM3kJ,MACtBqrY,GAAUnzM,GAAKkgV,GAALz2hB,QAGJ8nZ,CACR,CAEAtxU,QACC,GAAmB,IAAfwsF,MAAM3kJ,KAAV,CAIA2kJ,MAAMxsF;AACN,IAAIu7L,EAAUx7D,GAAKigV,GAALx2hB;AAEd,IAAK,IAAIwC,KAAKuvQ,EAAQ/qN,SACrBn6B,GAAIrqB;AAGLuvQ,EAAQv7L,QACR3pD,GAAI0pL,GAAKF,GAALr2M,MAAY,GAChB0pZ,GAAUnzM,GAAKkgV,GAALz2hB,MAXV,CAYD,CAEA04C,OACC,OAAO14C,KAAKgnD,QACb,CAEAA,SAEC,OADA16B,GAAIiqL,GAAKkgV,GAALz2hB,OACGgjK,MAAMh8G,QACd,CAEA73B,UAEC,OADA7C,GAAIiqL,GAAKkgV,GAALz2hB,OACGgjK,MAAM7zI,SACd,CAEA,CAACgsD,OAAO2c,YACP,OAAO93F,KAAK04C,MACb,CAEA,QAAAr6B,GACC,OAAOiO,GAAIiqL,GAAKF,GAALr2M,MACZ,EArKqB,SAAA62J,GAwCbl0J,GACP,OAAOuhhB,KAAmB3tU,GAAKmgV,GAAL12hB,MAAuBiiB,GAAMtf,GAAS4tC,GAAO5tC,EACxE,CAEA,SAAAs4P,KAEChyK;AAEA,IAAIu5E,EAAQo0X,GAAU3xhB,UAClB4xhB,EAAY9ygB,IAAI9e;AAEpB,IAAK,MAAM+uE,KAAUsid,GAEpB9zX,EAAMxuF,GAAU,YAAa1iE,GAG5B,OAFAgb,GAAIiqL,GAAKkgV,GAALz2hB,OAEG62hB,EAAU7id,GAAQrhE,MAAM3S,KAAMsR,EACtC;AAGD,IAAK,MAAM0iE,KAAUuid,GAEpB/zX,EAAMxuF,GAAU,YAAa1iE,GAC5Bgb,GAAIiqL,GAAKkgV,GAALz2hB;AAEJ,IAAI6sB,EAA6BgqgB,EAAU7id,GAAQrhE,MAAM3S,KAAMsR;AAC/D,OAAO,IAAIslhB,GAAU/pgB,EACtB,CAEF,UAAAo3G,KAAA,OAAAA,GAAA,oBAAAyO,iBAAApmH,IAAAomH,QAAApmH,IAAA7pB,OAAA,SAAApC,EAAAvB,EAAA0B,GAAA,IAAAF,EAAA,SAAAD,EAAAvB,GAAA,SAAA+T,eAAAjI,KAAAvK,EAAAvB,IAAA,QAAAuB,EAAA8jI,GAAA9jI,MAAA,OAAAA,CAAA,EAAAA,EAAAvB;AAAA,GAAAwB,EAAA,KAAAQ,EAAAinB,OAAA2zE,yBAAAp7F,EAAAxB;AAAA,OAAAgC,EAAAwrB,IAAAxrB,EAAAwrB,IAAA1hB,KAAAgI,UAAArS,OAAA,EAAAF,EAAAG,GAAAM,EAAA6B,KAAA,GAAAshI,GAAAtxH,MAAA,KAAAC,UAAA,UAAAuxH,GAAA9jI,GAAA,OAAA8jI,GAAAp8G,OAAAuqH,eAAAvqH,OAAAC,eAAAvlB,OAAA,SAAApC,GAAA,OAAAA,EAAAs7F,WAAA5zE,OAAAC,eAAA3nB,EAAA,EAAA8jI,GAAA9jI,EAAA,UAAAgkI,GAAAhkI,EAAAvB,EAAA0B,GAAAskI,GAAAzkI,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAAskI,GAAAzkI,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,2EAAAm8E,GAAA3kI,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAA44G,GAAA7kI,EAAAvB,GAAA,UAAAomI,GAAA7kI,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDAiGAiue,GAtKYF;ACxCb,ICA8B9wZ,GAAAG,GAAAC,GAAAG,GAAAE,GAAAE,GAAAE,GAAAE,GAAAG,GAAAW,GAAAE,GAAAQ,GAAAY,GAAAV,GAAA97E,GAAAxO,GAAA1vB,GAAA46G,GAAAE,GAAAE,GAAAE,GAAAE,GAAAE,GAAAE,GAAAgpB,GAAAyuI,GAAA17I,GAAAixY,GAAA/jY,GAAAgkY,GAAAjxY,GAAA25I,GAAAzsI,GAAA5N,GAAAW,GAAAixY,GAAA9jY,GAAA+jY,GAAAhxY,GAAAixY,GAAAC,GAAAhkY,GAAAikY,GAAAlxY,GAAAmxY,GAAA/jY,GAAAgkY,GAAAnxY,GAAAu8I,GAAAnvI,GDA9BgjY,GAAA,IAAArhb,QAAAshb,GAAA,IAAAthb,QAAAkhG,GAAA,IAAAlhG,QAAAuhb,GAAA,IAAAvhb,QAAAqib,GAAA,IAAA9vX;AA8CO,MAAM+vX,WAAkBpggB,IAU9BikD,YAAY34E,GAWX,GAVAqgK,WAkBDhjK,OAAAw3hB,UAAAx3hB,MA3BA0jL,GAAA1jL,KAAAw2hB,GAAW,IAAIn/f,KACfqsJ,GAAA1jL,KAAAy2hB,GAAWx0gB,GAAM,IACjByhK,GAAA1jL,KAAAq2M,GAAQp0L,GAAM,IACdyhK,GAAA1jL,KAAA02hB,GAAkBxS,KAAmB,GAgBhCvhhB,EAAO,CACV,IAAK,IAAKs2B,EAAK3nB,KAAM3O,EACpBqgK,MAAMn2I,IAAIoM,EAAK3nB;AAEhBilM,GAAKF,GAALr2M,MAAWsR,EAAI0xJ,MAAM3kJ,IACtB,KAAAvd,CACD,CAgBA8vB,IAAIqI,GACH,IAAI84O,EAAUx7D,GAAKigV,GAALx2hB,MACVwC,EAAIuvQ,EAAQzlP,IAAI2M;AAEpB,QAAUxH,IAANjvB,EAAiB,CACpB,IAAIwgK,MAAMpyI,IAAIqI,GAYb,OADA3M,GAAIiqL,GAAKkgV,GAALz2hB;AAVJwC,EAAIs5gB,GAAA0b,GAAAx3hB,KAAK62J,IAAOjsJ,KAAZ5K,KAAa,GAMjB+xQ,EAAQllP,IAAIoM,EAAKz2B,EAOnB,CAGA,OADA8pB,GAAI9pB,KAEL,CAMAgY,QAAQk9gB,EAAYC,GACnB7b,GAAA0b,GAAAx3hB,KAAK43hB,IAAShthB,KAAd5K,MACAgjK,MAAMxoJ,QAAQk9gB,EAAYC,EAC3B,CAGArrgB,IAAI2M,GACH,IAAI84O,EAAUx7D,GAAKigV,GAALx2hB,MACVwC,EAAIuvQ,EAAQzlP,IAAI2M;AAEpB,QAAUxH,IAANjvB,EAAiB,CACpB,IAAIwgK,MAAMpyI,IAAIqI,GAYb,YADA3M,GAAIiqL,GAAKkgV,GAALz2hB;AAVJwC,EAAIs5gB,GAAA0b,GAAAx3hB,KAAK62J,IAAOjsJ,KAAZ5K,KAAa,GAMjB+xQ,EAAQllP,IAAIoM,EAAKz2B,EAOnB,CAGA,OADA8pB,GAAI9pB,GACGwgK,MAAM12I,IAAI2M,EAClB,CAMApM,IAAIoM,EAAKt2B,GACR,IAAIovQ,EAAUx7D,GAAKigV,GAALx2hB,MACVwC,EAAIuvQ,EAAQzlP,IAAI2M,GAChB4+f,EAAW70X,MAAM12I,IAAI2M,GACrB2uI,EAAM5E,MAAMn2I,IAAIoM,EAAKt2B,GACrBqyF,EAAUuhH,GAAKkgV,GAALz2hB;AAEd,QAAUyxB,IAANjvB,EACHA,EAAIs5gB,GAAA0b,GAAAx3hB,KAAK62J,IAAOjsJ,KAAZ5K,KAAa,GAMjB+xQ,EAAQllP,IAAIoM,EAAKz2B,GACjBqqB,GAAI0pL,GAAKF,GAALr2M,MAAYgjK,MAAM3kJ,MACtBqrY,GAAU10T;KACJ,GAAI6ic,IAAal1hB,EAAO,CAC9B+mZ,GAAUlnZ;AAGV,IAAIs1hB,EAAoC,OAAtB9ic,EAAQspb,UAAqB,KAAO,IAAIv6f,IAAIixE,EAAQspb,WAClEyZ,EACa,OAAhBD,IACCt1hB,EAAE87gB,WAAWjsf,MAAOxxB,GAC4Bi3hB,EAAalngB,IAAI/vB;AAE/Dk3hB,GACHruI,GAAU10T,EAEZ,CAEA,OAAO4yE,CACR,CAGAtiF,OAAOrsD,GACN,IAAI84O,EAAUx7D,GAAKigV,GAALx2hB,MACVwC,EAAIuvQ,EAAQzlP,IAAI2M,GAChB2uI,EAAM5E,MAAM19E,OAAOrsD;AAYvB,YAVUxH,IAANjvB,IACHuvQ,EAAQzsL,OAAOrsD,GACfpM,GAAIrqB,GAAI,IAGLolK,IACH/6I,GAAI0pL,GAAKF,GAALr2M,MAAYgjK,MAAM3kJ,MACtBqrY,GAAUnzM,GAAKkgV,GAALz2hB,QAGJ4nK,CACR,CAEApxF,QACC,GAAmB,IAAfwsF,MAAM3kJ,KAAV,CAIA2kJ,MAAMxsF;AACN,IAAIu7L,EAAUx7D,GAAKigV,GAALx2hB;AAEd,IAAK,IAAIwC,KADTqqB,GAAI0pL,GAAKF,GAALr2M,MAAY,GACF+xQ,EAAQ/qN,UACrBn6B,GAAIrqB,GAAI;AAETknZ,GAAUnzM,GAAKkgV,GAALz2hB,OACV+xQ,EAAQv7L,OATR,CAUD,CAwBA99B,OAEC,OADApsB,GAAIiqL,GAAKkgV,GAALz2hB,OACGgjK,MAAMtqH,MACd,CAEAsO,SAEC,OADA80d,GAAA0b,GAAAx3hB,KAAK43hB,IAAShthB,KAAd5K,MACOgjK,MAAMh8G,QACd,CAEA73B,UAEC,OADA2sf,GAAA0b,GAAAx3hB,KAAK43hB,IAAShthB,KAAd5K,MACOgjK,MAAM7zI,SACd,CAEA,CAACgsD,OAAO2c,YACP,OAAO93F,KAAKmvB,SACb,CAEA,QAAA9Q,GAEC,OADAiO,GAAIiqL,GAAKF,GAALr2M,OACGgjK,MAAM3kJ,IACd,EA5NqB,SAAAw4I,GAsCbl0J,GACP,OAAOuhhB,KAAmB3tU,GAAKmgV,GAAL12hB,MAAuBiiB,GAAMtf,GAAS4tC,GAAO5tC,EACxE,CAAC,SAAAi1hB,KAyIAtrgB,GAAIiqL,GAAKkgV,GAALz2hB;AAEJ,IAAI+xQ,EAAUx7D,GAAKigV,GAALx2hB;AACd,GAAIu2M,GAAKF,GAALr2M,MAAWsR,IAAMygQ,EAAQ1zP,KAC5B,IAAK,IAAI4a,oCAAG,OAAAz4B;AAAA,yBAAAF,EAAA,SAAAD,GAAA,OAAAC,EAAAqS,MAAAnS,EAAAH,EAAA,EAAAC,CAAA,CAAH24B,CAAG++f,GAAA/yhB,UAAA,EAAAjF,KAAHi5B,CAAG,IACX,IAAK84O,EAAQnhP,IAAIqI,GAAM,CACtB,IAAIz2B,EAAIs5gB,GAAA0b,GAAAx3hB,KAAK62J,IAAOjsJ,KAAZ5K,KAAa;AAKrB+xQ,EAAQllP,IAAIoM,EAAKz2B,EAClB,CAIF,KAAK,CAAGA,KAAM+zM,GAAKigV,GAALx2hB,MACbssB,GAAI9pB,EAEN,CClP6B,SAAAy1hB,GAAA53hB,EAAAvB,GAAA20J,GAAApzJ,EAAAvB,KAAA84C,IAAAv3C,EAAA,UAAAgmJ,GAAAhmJ,EAAAvB,EAAA0B,GAAA,OAAA1B,EAAA,SAAAuB,GAAA,IAAAvB,EAAA,SAAAuB,GAAA,oBAAAA,MAAA,OAAAA;AAAA,IAAAvB,EAAAuB,EAAA86E,OAAAC;AAAA,YAAAt8E,EAAA,KAAA0B,EAAA1B,EAAA8L,KAAAvK,EAAA;AAAA,oBAAAG,EAAA,OAAAA;AAAA,UAAAqoD,UAAA,uDAAAlY,OAAAtwC,EAAA,EAAAA;AAAA,uBAAAvB,MAAA,IAAAA,MAAAuB,EAAA0nB,OAAAmhC,eAAA7oD,EAAAvB,EAAA,CAAA6D,MAAAnC,EAAA4oD,YAAA,EAAAC,cAAA,EAAAgyB,UAAA,IAAAh7E,EAAAvB,GAAA0B,EAAAH,CAAA,UAAA63hB,GAAA73hB,EAAAvB,EAAA0B,GAAAizJ,GAAApzJ,EAAAvB,KAAA+tB,IAAAxsB,EAAAG,EAAA,UAAAizJ,GAAApzJ,EAAAvB,GAAA,GAAAA,EAAA8xB,IAAAvwB,GAAA,UAAAwoD,UAAA,2EAAAsve,GAAA93hB,EAAAvB,EAAA0B,GAAA,OAAAH,EAAAwsB,IAAAurgB,GAAA/3hB,EAAAvB,GAAA0B,IAAA,UAAA+lJ,GAAAlmJ,EAAAvB,GAAA,OAAAuB,EAAAisB,IAAA8rgB,GAAA/3hB,EAAAvB,GAAA,UAAAs5hB,GAAA/3hB,EAAAvB,EAAA0B,GAAA,sBAAAH,MAAAvB,EAAAuB,EAAAuwB,IAAA9xB,GAAA,OAAA8T,UAAArS,OAAA,EAAAzB,EAAA0B;AAAA,UAAAqoD,UAAA,iDCG9B,SAASwve,GAAS/ngB,EAAIi2B,OAAa,GAClC,OAAO,SAASlmD,GACf,MAAiB,UAAVA,EAAE44B,KAA6B,MAAV54B,EAAE44B,MAAgB54B,EAAEiO,iBAAmBgiB,EAAG1lB,KAAK27C,EAAOlmD,QAAU,CAC7F,CACD,CAGA,SAASi4hB,GAAY72c,EAASotc,GAC7B,OAAIA,EAAgB,KACZnthB,IACe,iBAAX+/E,EAAqB//E,EAAG62hB,UAAY92c,EACtCA,GAASiqL,SAAUhqQ,EAAG82hB,mBAAmB/2c,EAAQiqL,UACjDjqL,GAASl3D,OAAM7oB,EAAGgH,UAAY+4E,EAAQl3D,MAEjD,CAaA,SAASoF,GAAehW,GACvB,OAAQjY,IACP,IAAI+/a,EAAW,IAAI5zZ,eAAgBsB,IAClC,IAAK,IAAIutB,KAASvtB,EAASxV,EAASjY,EAAIg7C;AAGzC,OADA+kY,EAASnyZ,QAAQ5tB,GACV,KACN+/a,EAAS5xZ,UAAUnuB,IAGtB,CACA,SAAS+2hB,GAAqB9+gB,EAAU3X,GACvC,OAAQN,IACP,IAAI+/a,EAAW,IAAI1zZ,qBAAsBoB,IACxC,IAAK,IAAIutB,KAASvtB,EAASxV,EAASjY,EAAIg7C,IACtC16C;AAEH,OADAy/a,EAASnyZ,QAAQ5tB,GACV,KACN+/a,EAAS5xZ,UAAUnuB,IAGtB,CAGA,SAASiyE,MAAUj7C,GAClB,OAAO3Q,OAAO4rD,UAAUj7C,EACzB,CACA,SAASggB,GAAK2O,GACb,OAAOt/B,OAAO2wB,KAAK2O,EACpB,CAIA,SAASqxe,GAAOrxe,EAAQqmF,GACvB,OAAO3lH,OAAO2wgB,OAAOrxe,EAAQqmF,EAC9B,CACA,SAASzqI,GAAMN,GACd,OAAOI,KAAKE,MAAMN,EACnB,CAIA,SAASkc,MAAO6Z,GACf,OAAO31B,KAAK8b,OAAO6Z,EACpB,CACA,SAAS5Z,MAAO4Z,GACf,OAAO31B,KAAK+b,OAAO4Z,EACpB,CAIA,SAASn4B,GAAOu5I,GACf,OAAOA,EAAMv5I,MACd,CACA,SAAS+8F,GAAMw8C,GACd,OAAQv5I,GAAOu5I,EAChB,CACA,SAAS5K,GAASx0G,EAAuB,IAAIif,MAC5C,OAAQjf,EAAKi2F,mBACd,CACA,SAASxwH,GAAQwC,GAChB,OAAOkR,MAAM1T,QAAQwC,EACtB,CACA,SAASojG,GAAWpjG,GACnB,MAAwB,mBAAVA,CACf,CAMA,SAASu4H,GAAOv4H,GACf,OAAOA,aAAiBg3C,IACzB,CACA,SAASggG,GAAIrpH,GACZ,OAAOA,GACR,CAIA,SAAS+sI,KAAQ,CF6JhB26X,GA7NYP,GC9CUt8c,OAAO,WA4Ba2iS,gBAmJzC3iS,OAAO2c,SE5IsBgiU,ICzBI,IAAI/1Y,IAAI,CAAC,MAAO,QAAS,SAAU,MAAO,KAAM,MAAO;AFqG1F,IAAIk+I,GAAYj7J,GAAMA;AACtB,SAAS21T,KACR,MAAuE,QAAhElzT,OAAO2b,iBAAiBzgB,SAAS2I,iBAAiB3J,SAC1D,CACA,SAASg1hB,GAAYrogB,GACpB,OAAQ1gB,QAAyB,IAAfA,OAAwB,EAAI0gB,EAAG1gB,EAClD,CAQA,SAASgphB,GAAcrqU,EAAQj2L,EAAKnC,EAAU04f,GAC7C,OAAIA,EAAgB,CACnBA,UACAv2f,IAAKA,OAEC,CAAEmpD,SAAUskB,GAAWwoH,GAAUA,EAAOj2L,OAAWi2L,KAAYxoH,GAAW5vE,GAAYA,IAAaA,GAC3G,CAGA,IAAI0igB,GAAiB;AACrB,SAASC,GAAWlphB,EAAwB,IAAI+pC,KAAQ37B,OAAc,GACrE,OAAOk9G,GAAOtrH,GAqJf,SAAwB8qB,EAAM1c,GAC7B,IAAIiJ,EAAS,IAAI0yB,KAAKA,KAAK6xE,IAAI9wF,EAAKs/C,cAAet/C,EAAKu/C,WAAYv/C,EAAKw/C,UAAWx/C,EAAKy/C,WAAYz/C,EAAKigD,aAAcjgD,EAAK+wF;AAG7H,OAFAsta,GAAgB9xgB,EAAQjJ,EAASA,EAASkxH,GAASjoH,GAAU,GAC7D+xgB,GAAU/xgB,EAAQjJ,GAAUkxH,GAASjoH,IAC9BA,CACR,CALA,CArJuCrX,EAAOoO,GA2J9C,SAAwBigB,EAAKjgB,GAC5B,IAAI6e,EAAQ,CAAC,EACTo8f,EAAcC,GAAYj7f,EAAKpB;KACV,IAArBo8f,IAAwBh7f,EAAMA,EAAIh6B,UAAU,EAAG44B,EAAM9zB;AACzD,IAAI++C,EAAQ7pB,EAAIpB,MAAM,QAClB5V,EAAS,IAAI0yB,KAAKA,KAAK6xE,KAAK1jE,EAAM,IAAKA,EAAM,GAAK,GAAIA,EAAM,IAAKA,EAAM,IAAM,GAAIA,EAAM,IAAM,GAAIA,EAAM,IAAM;AAGjH,YAFoB,IAAhB9pC,QAA0C,IAArBi7gB,GAAwBF,GAAgB9xgB,EAAQjJ,EAASi7gB,GAClFD,GAAU/xgB,EAAQjJ,GAAUi7gB,GACrBhygB,CACR,CATA,CA3JuErX,EAAOoO,EAC9E,CACA,SAASi5S,GAAernT,GACvB,GAAqB,iBAAVA,EAAoBA,EAAQ,CAAElQ,QAASkQ;KAC7C,GAAqB,iBAAVA,EAAoB,CACnC,IAAIlQ,EAAU,EAAGw1R,EAAM;AACvB,IAAK,IAAIntO,KAAQn4C,EAAMqI,MAAM,IAAK,GAAIvY,GAAWmP,SAASk5C,EAAM,IAAMhlD,KAAKC,IAAI,GAAIkyR;AACnFtlR,EAAQ,CAAElQ,UACX,MAAWw7H,GAAOtrH,KAAQA,EAAQ,CACjCpQ,MAAOoQ,EAAM46G,cACb/qH,QAASmQ,EAAM66G,gBACf/qH,QAASkQ,EAAM86G;AAEhB,IAAIuf,EAAQr6H,EAAMq6H,OAASr6H,EAAMogH,MAAQ;AACzC,MAAO,CACNv6C,MAAO7lE,EAAM6lE,OAAS7lE,EAAMmtB,MAAQ,EACpCy4C,OAAQ5lE,EAAM4lE,QAAU5lE,EAAMqtB,OAAS,EACvCs4C,KAAc,EAAR00D,GAAar6H,EAAM2lE,MAAQ3lE,EAAMstB,KAAO,GAC9Cx9B,QAA4C,IAAlCkQ,EAAMpQ,OAASoQ,EAAM0tB,MAAQ,GAAU,GAA4C,IAAtC1tB,EAAMnQ,SAAWmQ,EAAM2tB,QAAU,IAAW3tB,EAAMlQ,SAAWkQ,EAAM4tB,QAAU,GACpI27f,UAAWlvZ,EAEb,CACA,SAASmvZ,GAAU1+f,GAClB,IAAIzT,EAAS,IAAI0yB,KAAKjf,EAAKmgD;AAE3B,OADAm+c,GAAU/xgB,EAAQoygB,GAAU3+f,IACrBzT,CACR,CACA,SAASqygB,GAAY5+f,EAAM1jB,EAAUhQ,EAAI,GACxC0zB,EAAKixF,eAAejxF,EAAK0vF,iBAAmBpjH,EAAIgQ,EAASy+D;AACzD,IAAIx4C,EAAQvC,EAAK2vF,cAAgBrjH,EAAIgQ,EAASw+D;AAI9C,IAHA96C,EAAKy1F,YAAYlzF,GACjBA,GAAS,GACLA,EAAQ,IAAGA,GAAS,IACjBvC,EAAK2vF,gBAAkBptF,GAAOs8f,GAAY7+f;AAGjD,OAFAA,EAAKwzF,WAAWxzF,EAAK4vF,aAAetjH,EAAIgQ,EAASu+D,MACjD76C,EAAKw9G,cAAcx9G,EAAKgwF,gBAAkB1jH,EAAIgQ,EAAStX,SAChDg7B,CACR,CACA,SAAS8+f,GAAiB9+f,EAAM1jB,EAAUhQ,EAAI,GAC7C,OAAOsyhB,GAAY5+f,EAAM1jB,GAAWhQ,EACrC,CACA,SAASyyhB,GAAO/+f,EAAM1zB,EAAI,GAEzB,OADA0zB,EAAKwzF,WAAWxzF,EAAK4vF,aAAetjH,GAC7B0zB,CACR,CACA,SAAS6+f,GAAY7+f,EAAM1zB,EAAI,GAC9B,OAAOyyhB,GAAO/+f,GAAO1zB,EACtB,CACA,SAAS0yhB,GAAYh/f,GAEpB,OADAA,EAAK0xF,YAAY,EAAG,EAAG,EAAG,GACnB1xF,CACR,CACA,SAASi/f,GAAYj/f,GACpB,OAAO,IAAIif,KAAKjf,EAAK0vF,iBAAkB1vF,EAAK2vF,cAAe3vF,EAAK4vF,aAAc5vF,EAAK8vF,cAAe9vF,EAAK+vF,gBAAiB/vF,EAAKgwF,gBAC9H,CACA,SAAS06L,GAAY1qR,EAAM1D,EAAM,IAChC,OAAO0D,EAAK0qR,cAAcnhT,UAAU,EAAG+yB,EACxC,CACA,SAAS4igB,GAAWxlO,KAAUylO,GAC7B,OAAOA,EAAOxngB,MAAOyngB,GAAU1lO,EAAMv5O,YAAci/c,EAAMj/c,UAC1D,CACA,SAASk/c,GAAer/f,EAAMwC,GAC7B,IAAI8uF,EAAO9uF,EAAMxC,EAAKuzF;AAEtB,OADAvzF,EAAKwzF,WAAWxzF,EAAK4vF,cAAgB0B,GAAQ,EAAIA,EAAOA,EAAO,IACxDtxF,CACR,CACA,SAASs/f,GAAet/f,EAAMwC,GAC7B,IAAI8uF,EAAO9uF,EAAMxC,EAAKuzF;AAEtB,OADAvzF,EAAKwzF,WAAWxzF,EAAK4vF,cAAgB0B,GAAQ,EAAIA,EAAOA,EAAO,IACxDtxF,CACR,CAIA,SAASu/f,GAAWv/f,GACnB,MAAuB,iBAATA,GAAqBA,EAAKn6B,QAAU,EACnD,CAIA,SAAS25hB,GAASnua,EAAQoua,GAEzB,OADApua,EAAOK,YAAY+ta,EAAS3va,cAAe2va,EAAS1va,gBAAiB0va,EAASzva,gBAAiB,GACxFqB,CACR,CAIA,SAASqua,GAAUpjhB,GAClB,OAAOA,EAAStX,OACjB,CAIA,SAASmtW,GAASnyU,EAAM1jB,EAAUq0T,GAGjC,OAFAiuN,GAAY5+f,EAAM1jB,GAClBqjhB,GAAgB3/f,EAAM2wS,EAAYouN,IAC3B/+f,CACR,CAIA,SAASkyU,GAASlyU,EAAM1jB,EAAUq0T,GAGjC,OAFAmuN,GAAiB9+f,EAAM1jB,GACvBqjhB,GAAgB3/f,EAAM2wS,EAAYkuN,IAC3B7+f,CACR,CAMA,SAAS4/f,GAAc5/f,EAAMi8C,GAC5Bj8C,EAAO0+f,GAAU1+f,GACA,IAAbi8C,EAAgBj8C,EAAKwzF,WAAWxzF,EAAK4vF,aAAe,EAAI5vF,EAAKuzF,aAC5DvzF,EAAKwzF,WAAWxzF,EAAK4vF,aAAe,GAAK5vF,EAAKuzF,aAAe;AAClE,IAAIssa,EAAY,IAAI5gf,KAAKA,KAAK6xE,IAAI9wF,EAAK0vF,iBAAkB,EAAG;AAC5D,OAAOrnH,KAAKq3G,OAAO1/E,EAAO6/f,GAAa,IAAM1B,GAAiB,GAAK,EACpE,CACA,SAAS2B,GAAwBxqa,EAAMt1F,EAAMsmT,EAAmB6tM,GAC/D,OAAO+J,GAAc53M,EAAmB,MACvCtmT,KAAMi/f,GAAYj/f,GAClBs1F,SACG,IAAM,IAAMr/E,OAAOq/E,GAAMivJ,SAAS,EAAG,KAAM4vQ,EAChD,CACA,SAASqK,GAAYj7f,EAAKpB,EAAQ,CAAC,GAClC,IAAIirB,EAAQ7pB,EAAIpB,MAAM;AACtB,GAAIirB,EAEH,OADA6rB,GAAO92C,EAAOirB,KACLA,EAAM,GAAK,MAAoB,IAAXA,EAAM,KAAWA,EAAM,GAEtD,CAIA,SAASixe,GAAgBr+f,EAAM+/f,GAE9B,OADIA,GAAY//f,EAAKs9G,cAAct9G,EAAK+vF,gBAAkBgwa,GACnD//f,CACR,CACA,IAAIgggB,GAAev/c,OAAO;AAC1B,SAAS69c,GAAUt+f,EAAM1c,GAExB,OADA0c,EAAKgggB,IAAgB18gB,EACd0c,CACR,CACA,SAAS2+f,GAAU3+f,GAClB,OAAOA,EAAKgggB,GACb,CAoBA,SAASL,GAAgB3/f,EAAM2wS,EAAYsvN,GAC1C,GAAItvN,EAAW9qU,QAAU8qU,EAAW9qU,OAAS,EAAG,KAAO8qU,EAAWtmU,SAAS21B,EAAKuzF,cAAc0sa,EAAOjggB,EACtG,CAGA,IAAIkggB,GAnOIz/c,OAAO;AAoOf,SAAS0/c,GAAWhpf,EAAKipf,GACxBjpf,EAAI+of,IAAeE,CACpB,CACA,SAASC,GAAWlpf,GACnB,QAASA,IAAM+of,GAChB,CACA,SAASI,GAAWnpf,GACnB,OAAOA,EAAI+of,GACZ,CAGA,SAAS/md,GAAch5C,EAAKrqB,EAAWixE,EAAS3H,EAAQ,IACvD,IAAIp4E,EAAKiD,SAASkvE,cAAch5C;AAChCn5B,EAAG8O,UAAYA,EACO,iBAAXixE,EAAqB//E,EAAG62hB,UAAY92c,EACtCA,EAAQiqL,SAAUhqQ,EAAG82hB,mBAAmB/2c,EAAQiqL,UAChDjqL,EAAQl3D,OAAM7oB,EAAGgH,UAAY+4E,EAAQl3D;AAC9C,IAAK,IAAIm8c,KAAQ5sZ,EAAOp4E,EAAG0M,gBAAgBs4d;AAC3C,OAAOhle,CACR,CACA,SAAS2f,GAAK3f,GACb,OAAOA,EAAG0L,uBACX,CACA,SAASwf,GAASlrB,EAAIo/E,GACrB,KAAOA,KAAMp/E,EAAKA,EAAGkI;AACrB,OAAOlI,CACR,CACA,SAAS4f,GAAO5f,GACf,OAAO2f,GAAK3f,GAAI4f,MACjB,CACA,SAAS25gB,GAAsBj0hB,EAAGwK,EAAGgd,EAAO7pB,SAAUgqG,EAAY,IACjEA,EAAU/mG,KAAK4mB;AACf,IAAK,IAAI9sB,KAAM8sB,EAAK0sgB,kBAAkBl0hB,EAAGwK,GAAI,CAC5C,GAAIuphB,GAAWr5hB,GAAK,OAAOA;AAE3B,GAAIA,EAAGm8M,aAAelvG,EAAU5pG,SAASrD,EAAGm8M,YAAa,CACxD,IAAIs9U,EAAWF,GAAsBj0hB,EAAGwK,EAAG9P,EAAGm8M,WAAYlvG;AAC1D,GAAIwsb,EAAU,OAAOA,CACtB,CACD,CACA,OAAO,IACR,CACA,SAASngY,GAAO92I,EAAMxa,EAAOi3J,EAAS3+J,GAErC,OADAkiB,EAAKiK,iBAAiBzkB,EAAOi3J,EAAS3+J,GAC/B,IAAMkiB,EAAKsL,oBAAoB9lB,EAAOi3J,EAAS3+J,EACvD,CACA,SAASqF,GAAgBipB,EAAIi2B,OAAa,GACzC,OAAO,SAASgqR,GACfA,EAAQlpU,kBACJipB,GAAIA,EAAG1lB,KAAK27C,EAAOgqR,EACxB,CACD,CAcA,SAAS6qN,GAAqB/jd,GAM7B,OALAA,EAAO1D,GAAO,CAAC,EAAG0D,IACbmnP,aAAem7N,GAAYtid,EAAKmnP,cACrCnnP,EAAKqnP,WAAai7N,GAAYtid,EAAKqnP,YACnCrnP,EAAK+mP,YAAcu7N,GAAYtid,EAAK+mP,aACpC/mP,EAAKknP,UAAYo7N,GAAYtid,EAAKknP,WAC3BlnP,CACR,CAGA,IAAIgkd,GAAU;AACd,SAASC,GAAa1rhB,EAAOoO,OAAc,GAC1C,OAAOpO,EAAMgU,IAAKla,IACjB,IAAIud,EAAS,CACZ+3B,GAAI,OAAQt1C,EAAQinC,OAAOjnC,EAAMs1C,IAAM,cAAcq8e,QACrDE,YAAaC,GAAY9xhB,EAAO,cAAcka,IAAI+sB,QAClDolS,OAAQrsU,EAAMqsU,SAAWkkN,GAAWvwhB,EAAMwV,QAAU+6gB,GAAWvwhB,EAAMyV,MACrED,MAAO45gB,GAAWpvhB,EAAMwV,MAAOlB,GAC/BmB,IAAK25gB,GAAWpvhB,EAAMyV,IAAKnB,GAC3Bu/I,MAAO7zJ,EAAM6zJ,OAAS,GACtB+uK,SAAU5iU,EAAM4iU,SAChBC,cAAe7iU,EAAM6iU,cACrBE,iBAAkB/iU,EAAM+iU,iBACxBtnT,QAASzb,EAAMyb,SAAW,OAC1BgpU,cAAezkV,EAAMykV,eAAiB,CAAC,EACvCphB,gBAAiBrjU,EAAMqjU,iBAAmBrjU,EAAMpE,MAChD6nU,UAAWzjU,EAAMyjU,UACjBvuJ,WAAY48W,GAAY9xhB,EAAO,aAC/BW,OAAQmxhB,GAAY9xhB,EAAO;AAE5B,GAAIud,EAAO8uT,OAAQ,CAClB2jN,GAAYzygB,EAAO/H;AACnB,IAAIC,EAAMi6gB,GAAUnygB,EAAO9H;AAC3Bu6gB,GAAYzygB,EAAO9H,KACdy6gB,GAAW3ygB,EAAO9H,IAAKA,KAAQy6gB,GAAW3ygB,EAAO9H,IAAK8H,EAAO/H,QAAQu6gB,GAAOxygB,EAAO9H,IACzF,CACA,OAAO8H,GAET,CACA,SAASu0gB,GAAY5rhB,EAAOqjU,GAC3B,IAAIhsT,EAASrX,EAAMqjU,EAAW,MAAQrjU,EAAMqjU,IAAa;AACzD,OAAO9yU,GAAQ8mB,GAAUA,EAAS,CAACA,EACpC,CACA,SAASw0gB,GAAmB7rhB,GAC3B,OAAOA,EAAMgU,IAAK2sB,KACjB2wD,OAAQ3wD,EAAO2wD,OACf/qF,IAAKo6B,EAAOp6B,KAAOo6B,EAAOp6B,IAAIm7B,QAAQ,MAAQ,GAC9C0iC,OAAQzjC,EAAOyjC,QAAUzjC,EAAOyjC,OAAOhwE,eAAiB,MACxDo7T,YAAa7uR,EAAO6uR,aAAe,CAAC,IAEtC,CAiBA,SAASs8N,GAAkBn1L,EAAUjsF,EAAOshD,GAC3C,OAAO/nP,GAAc,OAAQ+nP,EAAM+/N,UAAWp1L,EAAU,CAAC,CAAC,WAAYnhD,GAAY9qC,EAAMp7P,SACzF,CAYA,SAAS08gB,GAAsBlyhB,GAC9B,OAAOmyhB,GAAYnyhB,EAAOiwhB,GAC3B,CACA,SAASmC,GAAWpyhB,GACnB,OAAOmyhB,GAAYnyhB,EAAO0vhB,GAC3B,CACA,SAASyC,GAAYnyhB,EAAOixhB,GAI3B,OAHAjxhB,EAAQiqE,GAAO,CAAC,EAAGjqE,IACbwV,MAAQy7gB,EAAOjxhB,EAAMwV,OAC3BxV,EAAMyV,IAAMw7gB,EAAOjxhB,EAAMyV,KAClBzV,CACR,CACA,SAASqyhB,GAAcC,EAAM/ugB,GAC5B+ugB,EAAKz7hB,OAAS0sB,EAAK1sB;AACnB,IAAK,IAAI0+J,KAAO+8X,EAAM/8X,GAAKomB,YAC5B,CASA,SAAS42W,GAAgBvyhB,EAAOwV,EAAOC,EAAK+8gB,OAAgB,GAC3D,QAASA,GAAYxyhB,EAAM6xhB,YAAYx2hB,SAASm3hB,EAASl9e,MAAQt1C,EAAMwV,MAAQC,GAAOzV,EAAMyV,IAAMD,CACnG,CACA,SAASi9gB,GAAYh3gB,GACpB,OAKD,SAAsBA,GACrB,MAAmB,YAAZA,CACR,CAFA,CALqBA,IAQrB,SAAoBA,GACnB,MAAmB,UAAZA,CACR,CAFA,CAR4CA,IAW5C,SAAsBA,GACrB,MAAmB,YAAZA,CACR,CAFA,CAXqEA,EACrE,CACA,SAASi3gB,GAAQj3gB,GAChB,MAAmB,eAAZA,CACR,CAoCA,SAASk3gB,GAAiB3yhB,EAAOwV,EAAOC,GAGvC,MAAO,CACND,MAHDA,EAAQxV,EAAMwV,MAAQA,EAAQxV,EAAMwV,MAAQA,EAI3CC,IAHDA,EAAMzV,EAAMyV,IAAMA,EAAMzV,EAAMyV,IAAMA,EAInCzV,QACA4yhB,aAAc1C,GAAW16gB,EAAOC,GAElC,CAIA,SAASo9gB,GAAmB7yhB,EAAO6rE,EAAMind,MACxC,IACIC,EACAC,EACAC,EACAT,EAJAtvZ,EAAQ;AAKZ,IAAK,IAAM8vZ,WAAYnqf,EAAQoqf,QAASv4R,EAAK83R,SAAUU,EAAW/hN,SAAEA,EAAQgiN,OAAEA,EAAMnthB,SAAEA,KAAc6lE,GAAW7lE,GAAYushB,GAAgBvyhB,EAAOmxU,EAAUgiN,EAAQD,KACnKhwZ,EAAMhlI,KAAKizU,GACX4hN,EAAUI,EACLH,IACJA,EAAanqf,EACboqf,EAAUv4R,EACV83R,EAAWU;AAGb,GAAIhwZ,EAAMrsI,OAAQ,CACjB,IAAI+5Q,EAAQ+hR,GAAiB3yhB,EAAOkjI,EAAM,GAAI6vZ;AAQ9C,OAPA9od,GAAO2mM,EAAO,CACboiR,aACAC,UACAT,WACAtvZ,UAEG4vZ,GAAQM,GAAcxiR,GACnB,CAACA,EACT,CACA,MAAO,EACR,CAIA,SAASyiR,GAAoBr1e,GAC5B,IAAIs1e,EAAa,CAAC,EACdC,EAAa,CAAC;AAClB,IAAK,IAAI3iR,KAAS5yN,EAAQ,CACzB,IAAIg1e,WAAEA,EAAUC,QAAEA,GAAYriR;AAC9B,IAAK,IAAIh6Q,EAAI,EAAGA,EAAIg6Q,EAAM1tI,MAAMrsI,SAAUD,EAAG,CAC5C,IAAI24B,EAAM,GAAG0jgB,KAAWD,EAAap8hB;AACjC28hB,EAAWhkgB,GAAMgkgB,EAAWhkgB,GAAKyuB,OAAO9/C,KAAK0yQ,GAC5C2iR,EAAWhkgB,GAAO,CACtBsxY,UACA7iX,OAAQ,CAAC4yN,GAEX,CACA,IAAIrhP,EAAM,GAAG0jgB,KAAWD;AACxBpiR,EAAM7wN,KAAOwze,EAAWhkgB,GACxBqhP,EAAM7J,KAAOusR,EAAW/jgB,GACxB+jgB,EAAW/jgB,GAAOqhP,CACnB,CACD,CACA,SAAS4iR,GAAkB5iR,EAAOh5P,EAAQzT,EAAM,EAAGu5e,EAAM,GACpD9sO,EAAM7J,OAAM5iQ,EAAMysQ,EAAM7J,KAAK3iQ,OAASs5e;AAC1C,IAAIt5e,EAASD,EAAMyT;AACnB,GAAIg5P,EAAM7wN,KAAM,CACf,IAAIwze,EAAa3iR,EAAM7wN;AAClBwze,EAAW1yH,SACf0yH,EAAWv1e,OAAOv1B,KAAK,CAACrxB,EAAGma,IAAMna,EAAE+M,IAAMoN,EAAEpN,KAC3CovhB,EAAW1yH;AAEZ,IAAK,IAAI4yH,KAAaF,EAAWv1e,OAAQ,GAAI75C,EAAMsvhB,EAAUrvhB,QAAUA,EAASqvhB,EAAUtvhB,IAAK,CAC9F,IAAImQ,EAASm/gB,EAAUrvhB,OAASD,EAAMu5e;AACtCv5e,GAAOmQ,EACPlQ,GAAUkQ,CACX,CACD,CAKA,OAJA21D,GAAO2mM,EAAO,CACbzsQ,MACAC,WAEMD,CACR,CACA,IAAIuvhB,GAAsB,IAAIjob,QAC1Bkob,GAAY;AAChB,SAASP,GAAcxiR,GACtB,IAAI5wQ,MAAEA,EAAKgzhB,WAAEA,EAAUC,QAAEA,GAAYriR,EACjCt7N,EAAKo+e,GAAI9wgB,IAAI5iB;AACZs1C,IACJA,EAAKq+e,KACLD,GAAIvwgB,IAAInjB,EAAOs1C,IAEhBs7N,EAAMt7N,GAAK,GAAGA,KAAM09e,KAAcC,GACnC,CAGA,SAASW,GAAKC,EAAWhvU,GACxB,MAAO,KACN,IAEI+uU,GAFEt7hB,SAAS+tC,OAAEA,IAAawtf,EAC1B7jf,EAAS6jf,EAAUv7hB,QAAQusN;AAK/B,OAHAktT,GAAQ,KACP6hB,EAAOv3b,GAAWrsD,GAAU,CAAEA,UAAW,IAAIJ,KAAKC,eAAexJ,EAAQ2J,KAEnE,CAAEA,OAAShf,GAAS4igB,EAAK5jf,OAAOigf,GAAYj/f,KAErD,CACA,SAAS8igB,GAAUD,EAAWhvU,GAC7B,MAAO,KACN,IAEI7hK,GAFE1qD,SAAS+tC,OAAEA,IAAawtf,EAC1B7jf,EAAS6jf,EAAUv7hB,QAAQusN;AA4B/B,OA1BAktT,GAAQ,KACP,GAAI11a,GAAWrsD,GAASgT,EAAchT;IACjC,CACJ,IAAI4jf,EAAO,IAAIhkf,KAAKC,eAAexJ,EAAQ2J;AAC3CgT,EAAcA,CAACxtC,EAAOC,KACrB,GAAID,GAASC,EAAK,OAAOm+gB,EAAK5we,YAAYxtC,EAAOC;AAC5C,CAEJ,IAAI2oC,EAAQw1e,EAAKG,mBAAmBt+gB,EAAKD,GACrC+H,EAAS,GACT8qP,EAAU,CAAC,aAAc,YACzBpjK,EAAY,KAAC;AACjB,IAAK,IAAI5mD,KAAQD,EAAO,CACvB,IAAIxnD,EAAIyxQ,EAAQloQ,QAAQk+C,EAAKxX;AACzBjwC,GAAK,EACHquG,EAAUruG,KACd2mB,GAAUy2gB,GAAU3rR,EAAQ,EAAIzxQ,GAAIwnD,GACpC6mD,EAAUruG,OAEL2mB,GAAU8gC,EAAKplD,KACvB,CACA,OAAOskB,CACR,EAEF,IAEM,CAAEylC,YAAaA,CAACxtC,EAAOC,IAAQutC,EAAYite,GAAYz6gB,GAAQy6gB,GAAYx6gB,KAEpF,CACA,SAASu+gB,GAAUntf,EAAQuX,GAC1B,IAAI7gC,EAAS;AACb,IAAK,IAAI8gC,KAAQD,EAAWC,EAAKxX,QAAUA,IAAQtpB,GAAU8gC,EAAKplD;AAClE,OAAOskB,CACR,CAGA,SAAS02gB,GAAWt6hB,GACnB,OAAOu6hB,GAAQv6hB,EAAM,MACtB,CACA,SAASw6hB,GAAYx6hB,GACpB,OAAOu6hB,GAAQv6hB,EAAM,OACtB,CACA,SAASy6hB,GAAaz6hB,GACrB,OAAOu6hB,GAAQv6hB,EAAM,QACtB,CACA,SAAS06hB,GAAY16hB,GACpB,OAAOu6hB,GAAQv6hB,EAAM,OACtB,CACA,SAASu6hB,GAAQv6hB,EAAM26hB,GACtB,MAAO,IACH36hB,EACH41F,KAAM,QAAU+kc,EAChBvtR,KAAM,YAAcutR,EAEtB,CACA,SAASC,GAAU5md,GAClB,OAAQukP,QACJA,EACHvkP,QAEF,CAGA,SAAS6md,GAAgBtuhB,GACxB,IAAIsP,EAAOC;AAMX,OALIvP,MACDsP,QAAOC,OAAOvP,GACZsP,IAAOA,EAAQw6gB,GAAYZ,GAAW55gB,KACtCC,IAAKA,EAAMu6gB,GAAYZ,GAAW35gB,MAEhC,CACND,QACAC,MAEF,CACA,SAASg/gB,GAAazjgB,EAAMw9C,GAC3B,OAAOA,EAAMh5D,OAASwb,EAAOw9C,EAAMh5D,OAASg5D,EAAM/4D,KAAOub,EAAOw9C,EAAM/4D,GACvE,CAGA,SAASi/gB,GAAgBxuhB,GACxB,IAAIqX,EAAS;AAEb,OADAo3gB,GAAiBzuhB,EAAO,KAAUqX,GAC3BA,CACR,CACA,SAASo3gB,GAAiBzuhB,EAAOwkW,EAAOtc,EAAQlkG,GAC/C,IAAI3sO,EAAS;AACb,IAAK,IAAImxI,KAAQxoJ,EAAO,CACvB,IAAIsshB,EAAWoC,GAAelmY;AAC9BnxI,EAAOrf,KAAKs0hB,GACZtoS,EAAKhsP,KAAKs0hB;AACV,IAAIpB,EAAU,CACb1mL,QACA54V,SAAU,GACVs8U;AAED+iM,GAAWqB,EAAUpB,GACjB1iY,EAAK58I,WAAUs/gB,EAAQt/gB,SAAW6ihB,GAAiBjmY,EAAK58I,SAAU44V,EAAQ,EAAGtc,IAAWokM,EAASqC,SAAU3qS,GAChH,CACA,OAAO3sO,CACR,CACA,SAASq3gB,GAAe1uhB,GACvB,MAAO,CACNovC,GAAIrO,OAAO/gC,EAAMovC,IACjBu+G,MAAO3tJ,EAAM2tJ,OAAS,GACtByvK,qBAAsBA,GAAqBp9T,GAC3Cw9T,eAAgBA,GAAex9T,GAC/B2uhB,SAAU3uhB,EAAM2uhB,aAChBpwM,cAAev+U,EAAMu+U,eAAiB,CAAC,EAEzC,CACA,SAASnhB,GAAqBkvN,GAC7B,OAAOA,GAAUlvN,oBAClB,CACA,SAASI,GAAe8uN,GACvB,OAAOA,GAAU9uN,cAClB,CACA,SAASoxN,GAAkB90hB,EAAOo9U,GACjC,OAAOxpP,GAAM5zF,EAAM6xhB,kBAAoB,EAAIz0M,EAAUzwT,KAAM6lgB,GAAaxyhB,EAAM6xhB,YAAYx2hB,SAASm3hB,EAASl9e,IAC7G,CAGA,SAASy/e,GAAY/jgB,EAAMulT,EAAcy+M,EAAsBC,EAAgBC,GAC9E,IAAIC,EAAQ;AACZnkgB,EAAO0+f,GAAU1+f;AACjB,IAAIvb,EAAMi6gB,GAAU1+f;AAGpB,IAFA4+f,GAAY5+f,EAAMikgB,EAAe9/gB,KACjCy6gB,GAAYn6gB,EAAKw/gB,EAAe7/gB,KACzB4b,EAAOvb,GACb0/gB,EAAMj3hB,KAAK,CAACw9S,GAAY1qR,GAAOkkgB,EAAcllf,OAAOhf,KACpD4+f,GAAY5+f,EAAMulT,EAAcy+M;AAEjC,IAAI5sM,EAAO7uV,IAAOy3B,EAAOvb,GAAO,IAAMi7gB,GAAUn6M;AAEhD,OADI6R,GAAQA,IAAS4sM,IAAsBG,EAAMpxZ,IAAI,GAAG,GAAKixZ,EAAuB5sM,GAC7E+sM,CACR,CACA,SAASC,GAAqB/zN,EAAaC,EAAa+zN,EAAwBC,EAAWC,GAC1F,IAAIC,EAAQjoO,GAAe8T,GACvBo0N,EAAQloO,GAAe+T;AAC3B,GAAI+zN,EAAwB,CAC3B,IAAIK,EAASnoO,GAAep4S,GAAIu7gB,GAAU8E,GAAQpghB,GAAI,EAAGs7gB,GAAU+E,GAAStG,MACxEwG,EAASpoO,GAAen4S,GAAIs7gB,GAAU+E,GAAQ/E,GAAUgF,GAAUvG,KAClEtygB,EAASw/E,GAAWg5b,GAAwBxiG,aAAewiG,EAAuBxiG,YAAe7yb,IAAW0yhB,GAAQ1yhB,EAAMyb;AAC9Hi0Y,EAAM,IAAK,IAAI1+X,KAAQskgB,EAAW,CACjC,IAAI9/gB,EAAQo6gB,GAAYF,GAAU1+f,GAAOwkgB,GACrC//gB,EAAMm6gB,GAAYF,GAAU1+f,GAAOykgB,GACnCG,EAAWhG,GAAYF,GAAU1+f,GAAO0kgB,GACxCG,EAASjG,GAAYF,GAAU1+f,GAAO2kgB;AAC1C,IAAK,IAAI31hB,KAASu1hB,EAAgB,IAAKv1hB,EAAMqsU,QAAUxvT,EAAO7c,IAAUA,EAAMwV,MAAQqghB,GAAU71hB,EAAMyV,IAAMmghB,EAAU,CACrH,GAAI51hB,EAAMwV,MAAQA,EAAO,CACxB,IAAIxf,EAAUof,IAAKpV,EAAMwV,MAAQwb,GAAQ,IAAK0/f,GAAUgF;AACpD1/hB,EAAU06hB,GAAU8E,KAAQA,EAAMx/hB,QAAUA,EACjD,CACA,GAAIgK,EAAMyV,IAAMA,EAAK,CACpB,IAAIzf,EAAUmf,IAAKnV,EAAMyV,IAAMub,GAAQ,IAAK0/f,GAAUiF;AAClD3/hB,EAAU06hB,GAAU+E,KAAQA,EAAMz/hB,QAAUA,EACjD,CACA,GAAI06hB,GAAU8E,KAAW9E,GAAUgF,IAAWhF,GAAU+E,KAAW/E,GAAUiF,GAAS,MAAMjmI,CAC7F,CACD,CACD,CACA,MAAO,CACNv6Y,IAAKqghB,EACLpghB,IAAKqghB,EAEP,CAGA,SAASK,GAAW1lZ,GACnB,IAAI8/E,EAAU,EACV5kI,EAAUxsE,GAAQA,GAAQoxM;AAC9B,OAAOzvB,GAAMrwD,EAAO,IAAMtxH,GAAMwsE,GAAU,OAAY,IAAMxsE,GAAMwsE,IAAW4kI,MAC9E,CASA,SAASzvB,GAAM3gM,EAAQi2hB,EAAeC,EAAWC,GAChD,OAAO,IAAIv1V,MAAM5gM,EAAQ,CACxB8iB,IAAGA,CAAC9iB,EAAQ0hL,EAAM2/R,KACb6tE,GAAOlvhB,EAAQ0hL,IAAOu0W,EAAcv0W,GACjCx4C,QAAQpmH,IAAI9iB,EAAQ0hL,EAAM2/R,IAElCh+b,IAAIrjB,EAAQ0hL,EAAMvoL,EAAOkod,GACxB,IAAIj6b,EAAM8ugB,EAAUl2hB,EAAO0hL,GAAOvoL,GAC9BskB,EAASyrH,QAAQ7lH,IAAIrjB,EAAQ0hL,EAAMvoL,EAAOkod;AAE9C,OADIj6b,GAAK+ugB,EAAaz0W,GACfjkK,CACR,GAEF,CAiIA,IAAI24gB,GAAiB,CACpB,aACA,gBACA,QACA;AAiDD,SAAS5rJ,GAAa/6V,EAAMw/F,GAC3B,IAAIxxH,EAAS,IAAKgyB;AAClB,IAAK,IAAIhgB,KAAOyf,GAAK+/F,GAAcx/G,KAAOhS,IAAQA,EAAOgS,GAAOw/G,EAAQx/G,GAAKhS,EAAOgS;AACpF,GAAIggB,EAAKmuC,MAAO,CACfngE,EAAOmgE,MAAQ,CAAC;AAChB,IAAK,IAAI/P,KAAQ3+B,GAAKO,EAAKmuC,OAAQngE,EAAOmgE,MAAM/P,GAAQ28T,GAAa/6V,EAAKmuC,MAAM/P,GAAOohE,EACxF,CACA,OAAOxxH,CACR,CACA,SAAS44gB,GAAc79hB,EAASoG,GAC/B,IAAI03hB,EAAY99hB,EAAQoG;AAExB,cADOpG,EAAQoG,GACR03hB,CACR,CACA,SAASC,MAAarngB,GACrB,IAAIzR,EAAS,CAAC;AACd,IAAK,IAAIgyB,KAAQvgB,EAAM,CACtB,IAAI6iZ,EAAW,CAAC;AAChB,IAAK,IAAItiZ,KAAO2mgB,GAAoB75b,GAAW9sD,EAAKhgB,MAAOsiZ,EAAStiZ,GAAOggB,EAAKhgB,GAAKhS,EAAOgS;AAC5FhS,EAAS,IACLA,KACAgyB,KACAsiY,EAEL,CACA,OAAOt0Z,CACR,CAmCA,SAASulO,GAAKulB,EAASiuR,EAAetmZ,EAAaumZ,EAAat1e,EAAU2zQ,EAAa4hO,EAAclB,EAAWmB,EAAmB5mO,EAAclmG,GAChJ,IAAI/1H,GAAM0hc,GACV,GAAI1hc,GAAMy0K,GACTkuR,EAAYD;KAGb,IAAKG,IAAsBD,EAAahhhB,UAAYq6S,IAAiB2mO,EAAahhhB,OAASghhB,EAAahhhB,MAAQo/S,EAAYp/S,OAASghhB,EAAa/ghB,IAAMm/S,EAAYn/S,KAAO+ghB,EAAav1e,WAAaA,GAAW,CAC/M,IAAI1jC,EAAS,GACTuzS,EAAWn6T,GAAMgzN,EAAQnpN,OACzB2uC,EAAW5rB,IACdhG,EAASA,EAAOxU,OAAOinI,EAAYzsH,IACnCgzgB,EAAYh5gB,GACZosM,EAAQnpN,QAELoqV,EAAWlvC,GAAYkZ,EAAYp/S,OACnCs1U,EAASpvC,GAAYkZ,EAAYn/S;AACrC,IAAK,IAAIoxB,KAAUwhO,EAElB,GADA1+C,EAAQn0M,QACJ6mF,GAAWx1D,GAAS,CACvB,IAAItpB,EAASspB,EAAO4vf,EAAoB,CACvCjhhB,MAAOy6gB,GAAYr7N,EAAYp/S,OAC/BC,IAAKw6gB,GAAYr7N,EAAYn/S,KAC7Bm1U,WACAE,SACA7pS,YACG,CAAC,EAAG9R,EAAS2hR;KACG,IAAhBvzS,GAAmBosD,QAAQ2B,QAAQ/tD,GAAQwsD,KAAK56B,EAAS2hR,EAC9D,KAAO,CACN,IAAI5lP,EAASmxB,GAAWx1D,EAAO6uR,aAAe7uR,EAAO6uR,cAAgBzrP,GAAO,CAAC,EAAGpjC,EAAO6uR;AACnF+gO,IACHvrd,EAAO11D,MAAQo1U,EACf1/Q,EAAOz1D,IAAMq1U,EACI,UAAb7pS,IAAsBiqB,EAAOjqB,SAAWA,IAE7CiqB,EAAS,IAAIkpS,gBAAgBlpS;AAC7B,IAAoCrnE,EAAhC4I,EAAMo6B,EAAOp6B,IAAK+6L,EAAU,CAAC,EAC7B,CAAC,MAAO,QAAQnsM,SAASwrC,EAAOyjC,QAAS79D,IAAQA,EAAIpR,SAAS,KAAO,IAAM,KAAO6vE,GAErFs8H,EAAQ,gBAAkB,kDAC1B3jM,EAAOojC,OAAOikC,IAEfulP,MAAMhkT,EAAK,CACV69D,OAAQzjC,EAAOyjC,OACfk9H,UACA3jM,OACA0rgB,OAAQ+a,KACRoM,YAAa,gBACX3sd,KAAMw9H,GAAaA,EAAS+zG,QAAQvxO,KAAK56B,GAASy8B,MAAMklP,EAC5D,CAED7mP,GAAOusd,EAAc,IACjB5hO,EACH3zQ,YAEF,CACD,CA8LA,IAAI01e,IAAKC,GAAA,IAAAnrb,QAAA4gZ,GAAA,IAAA5gZ,QAAAorb,GAAA,IAAAprb,QAAAqrb,GAAA,IAAArrb,QAAAsrb,GAAA,IAAAtrb,QAAAq/F,GAAA,IAAAr/F,QAAAurb,GAAA,IAAAvrb,QAAAwrb,GAAA,IAAAxrb,QAAAs+K,GAAA,IAAAt+K,QAAAyrb,GAAA,IAAAzrb,QAAA0rb,GAAA,IAAA1rb,QAAA2rb,GAAA,IAAA3rb,QAAA4rb,GAAA,IAAA5rb,QAAA6rb,GAAA,IAAA7rb,QAAA8rb,GAAA,IAAA9rb,QAAA+rb,GAAA,IAAA/rb,QAAAgsb,GAAA,IAAAhsb,QAAAisb,GAAA,IAAAjsb,QAAAksb,GAAA,IAAAlsb,QAAAmsb,GAAA,IAAAnsb,QAAAosb,GAAA,IAAApsb,QAAAqsb,GAAA,IAAArsb,QAAA80K,GAAA,IAAA90K,QAAAssb,GAAA,IAAAtsb,QAAAusb,GAAA,IAAAvsb,QAAAwsb,GAAA,IAAAj6X,QAAG,MAEX,iBAAAk6X,GACC,OAAOp5gB,GAAM+tL,GAAK+pV,GAALtgiB,MACd,CACA,iBAAA4hiB,CAAkBj/hB,GACjB6lB,GAAM+tL,GAAK+pV,GAALtgiB,MAAqB2C,KAC5B,CAEA,UAAAqb,GACC,OAAOwK,GAAM+tL,GAAKw/S,GAAL/1f,MACd,CACA,UAAAge,CAAWrb,GACV6lB,GAAM+tL,GAAKw/S,GAAL/1f,MAAc2C,EACrB,CAEA,gBAAA87T,GACC,OAAOj2S,GAAM+tL,GAAKgqV,GAALvgiB,MACd,CACA,gBAAAy+T,CAAiB97T,GAChB6lB,GAAM+tL,GAAKgqV,GAALvgiB,MAAoB2C,EAC3B,CAEA,eAAA27T,GACC,OAAO91S,GAAM+tL,GAAKiqV,GAALxgiB,MACd,CACA,eAAAs+T,CAAgB37T,GACf6lB,GAAM+tL,GAAKiqV,GAALxgiB,MAAmB2C,EAC1B,CAEA,gBAAAu9hB,GACC,OAAO13gB,GAAM+tL,GAAKkqV,GAALzgiB,MACd,CACA,gBAAAkgiB,CAAiBv9hB,GAChB6lB,GAAM+tL,GAAKkqV,GAALzgiB,MAAoB2C,KAC3B,CAEA,UAAAu+F,GACC,OAAO14E,GAAM+tL,GAAK/B,GAALx0M,MACd,CACA,UAAAkhG,CAAWv+F,GACV6lB,GAAM+tL,GAAK/B,GAALx0M,MAAc2C,EACrB,CAEA,kBAAAs8hB,GACC,OAAOz2gB,GAAM+tL,GAAKmqV,GAAL1giB,MACd,CACA,kBAAAi/hB,CAAmBt8hB,GAClB6lB,GAAM+tL,GAAKmqV,GAAL1giB,MAAsB2C,EAC7B,CAEA,UAAAk/hB,GACC,OAAOr5gB,GAAM+tL,GAAKoqV,GAAL3giB,MACd,CACA,UAAA6hiB,CAAWl/hB,GACV6lB,GAAM+tL,GAAKoqV,GAAL3giB,MAAc2C,KACrB,CAEA,OAAAmqD,GACC,OAAOtkC,GAAM+tL,GAAKk9E,GAALzzR,MACd,CACA,OAAA8sD,CAAQnqD,GACP6lB,GAAM+tL,GAAKk9E,GAALzzR,MAAW2C,KAClB,CAEA,aAAAmkV,GACC,OAAOt+T,GAAM+tL,GAAKqqV,GAAL5giB,MACd,CACA,aAAA8mV,CAAcnkV,GACb6lB,GAAM+tL,GAAKqqV,GAAL5giB,MAAiB2C,EACxB,CAEA,cAAAm/hB,GACC,OAAOt5gB,GAAM+tL,GAAKsqV,GAAL7giB,MACd,CACA,cAAA8hiB,CAAen/hB,GACd6lB,GAAM+tL,GAAKsqV,GAAL7giB,MAAkB2C,KACzB,CAEA,SAAA4zE,GACC,OAAO/tD,GAAM+tL,GAAKuqV,GAAL9giB,MACd,CACA,SAAAu2E,CAAU5zE,GACT6lB,GAAM+tL,GAAKuqV,GAAL9giB,MAAa2C,KACpB,CAEA,iBAAAo/hB,GACC,OAAOv5gB,GAAM+tL,GAAKwqV,GAAL/giB,MACd,CACA,iBAAA+hiB,CAAkBp/hB,GACjB6lB,GAAM+tL,GAAKwqV,GAAL/giB,MAAqB2C,EAC5B,CAEA,iBAAAq/hB,GACC,OAAOx5gB,GAAM+tL,GAAKyqV,GAALhhiB,MACd,CACA,iBAAAgiiB,CAAkBr/hB,GACjB6lB,GAAM+tL,GAAKyqV,GAALhhiB,MAAqB2C,EAC5B,CAEA,mBAAAs/hB,GACC,OAAOz5gB,GAAM+tL,GAAK0qV,GAALjhiB,MACd,CACA,mBAAAiiiB,CAAoBt/hB,GACnB6lB,GAAM+tL,GAAK0qV,GAALjhiB,MAAuB2C,EAC9B,CAEA,aAAAu/hB,GACC,OAAO15gB,GAAM+tL,GAAK2qV,GAALlhiB,MACd,CACA,aAAAkiiB,CAAcv/hB,GACb6lB,GAAM+tL,GAAK2qV,GAALlhiB,MAAiB2C,EACxB,CAEA,aAAAq8hB,GACC,OAAOx2gB,GAAM+tL,GAAK4qV,GAALnhiB,MACd,CACA,aAAAg/hB,CAAcr8hB,GACb6lB,GAAM+tL,GAAK4qV,GAALnhiB,MAAiB2C,EACxB,CAEA,aAAAw7T,GACC,OAAO31S,GAAM+tL,GAAK6qV,GAALphiB,MACd,CACA,aAAAm+T,CAAcx7T,GACb6lB,GAAM+tL,GAAK6qV,GAALphiB,MAAiB2C,EACxB,CAEA,QAAA00E,GACC,OAAO7uD,GAAM+tL,GAAK8qV,GAALrhiB,MACd,CACA,QAAAq3E,CAAS10E,GACR6lB,GAAM+tL,GAAK8qV,GAALrhiB,MAAY2C,EACnB,CAEA,iBAAAw/hB,GACC,OAAO35gB,GAAM+tL,GAAK+qV,GAALthiB,MACd,CACA,iBAAAmiiB,CAAkBx/hB,GACjB6lB,GAAM+tL,GAAK+qV,GAALthiB,MAAqB2C,KAC5B,CAEA,cAAAojY,GACC,OAAOv9W,GAAM+tL,GAAKgrV,GAALvhiB,MACd,CACA,cAAA+lY,CAAepjY,GACd6lB,GAAM+tL,GAAKgrV,GAALvhiB,MAAkB2C,KACzB,CAEA,YAAAo8Z,GACC,OAAOv2Y,GAAM+tL,GAAKirV,GAALxhiB,MACd,CACA,YAAA++Z,CAAap8Z,GACZ6lB,GAAM+tL,GAAKirV,GAALxhiB,MAAgB2C,KACvB,CAEA,eAAAykR,GACC,OAAO5+P,GAAM+tL,GAAK0zE,GAALjqR,MACd,CACA,eAAAonR,CAAgBzkR,GACf6lB,GAAM+tL,GAAK0zE,GAALjqR,MAAmB2C,KAC1B,CAEA,YAAAy/hB,GACC,OAAO55gB,GAAM+tL,GAAKkrV,GAALzhiB,MACd,CACA,YAAAoiiB,CAAaz/hB,GACZ6lB,GAAM+tL,GAAKkrV,GAALzhiB,MAAgB2C,KACvB,CAEA,UAAA0/hB,GACC,OAAO75gB,GAAM+tL,GAAKmrV,GAAL1hiB,MACd,CACA,UAAAqiiB,CAAW1/hB,GACV6lB,GAAM+tL,GAAKmrV,GAAL1hiB,MAAc2C,KACrB,CAIA24E,YAAY8uP,EAASpoU,GAzOtB,IAAgBu7hB;AAyOe+E,GAAAtiiB,KAAA2hiB,IAlL9Bj+W,GAAA1jL,KAAAsgiB,QAAc,GAOd58W,GAAA1jL,KAAA+1f,QAAO,GAOPryU,GAAA1jL,KAAAugiB,QAAa,GAOb78W,GAAA1jL,KAAAwgiB,QAAY,GAOZ98W,GAAA1jL,KAAAygiB,QAAa,GAOb/8W,GAAA1jL,KAAAw0M,QAAO,GAOP9wB,GAAA1jL,KAAA0giB,QAAe,GAOfh9W,GAAA1jL,KAAA2giB,QAAO,GAOPj9W,GAAA1jL,KAAAyzR,QAAI,GAOJ/vG,GAAA1jL,KAAA4giB,QAAU,GAOVl9W,GAAA1jL,KAAA6giB,QAAW,GAOXn9W,GAAA1jL,KAAA8giB,QAAM,GAONp9W,GAAA1jL,KAAA+giB,QAAc,GAOdr9W,GAAA1jL,KAAAghiB,QAAc,GAOdt9W,GAAA1jL,KAAAihiB,QAAgB,GAOhBv9W,GAAA1jL,KAAAkhiB,QAAU,GAOVx9W,GAAA1jL,KAAAmhiB,QAAU,GAOVz9W,GAAA1jL,KAAAohiB,QAAU,GAOV19W,GAAA1jL,KAAAqhiB,QAAK,GAOL39W,GAAA1jL,KAAAshiB,QAAc,GAOd59W,GAAA1jL,KAAAuhiB,QAAW,GAOX79W,GAAA1jL,KAAAwhiB,QAAS,GAOT99W,GAAA1jL,KAAAiqR,QAAY,GAOZvmG,GAAA1jL,KAAAyhiB,QAAS,GAOT/9W,GAAA1jL,KAAA0hiB,QAAO,GAACvuZ,GAAAnzI,KAAA,kBAAAuiiB,GAAAviiB,KAAA,oBAAAuiiB,GAAAviiB,KAAA,0BAWNA,KAAKgC,QAAShC,KAAK4pW,UAAW5pW,KAAKwiiB,gBArhBtC,SAAsBp4N,EAAS/wO,GAC9B,IAAIopc,EArIL,SAAuBr4N,GACtB,IAAIpoU,EAAU,CACb8tT,WAAY,CAAEv5O,MAAO,SACrBsmP,cAAe,CAAC,EAChB6lO,oBACAhogB,KAAsB,IAAIif,KAC1ByxR,mBAAoB,EACpBua,cAAe,EACfhF,oBAAqB,EACrBN,gBAAiB,CAChBljT,QAAS,QACTF,MAAO,UACPC,IAAK,WAENylgB,yBAA0B,CAAElpf,UAAW,QACvCgpS,mBACAzrU,SAAU,CAAEizH,MAAO,GACnB/oC,OAAQ,GACR0hc,qBAAsB,EACtB51N,0BAA2B,EAC3B8V,qBAAsB,EACtBmD,gBAAiB,EACjB5Y,gBAAiB,EACjB0V,kBAAmB,EACnBC,mBAAoB,EACpBu5G,iBAAkB,EAClBsmG,SAAU,EACV38M,qBAAsB,EACtBC,qBAAsB,EACtBlE,gBAAiB,EACjBC,oBACAvpB,aAAc,GACdyU,oBAAqB,EACrBkX,gBAAiB,CAChBhnT,KAAM,UACNC,OAAQ,WAETulgB,6BACAnsd,SAAU,EACVmlP,cAAe,CACd58S,MAAO,QACPrO,OAAQ,GACRsO,IAAK,mBAENmC,YAAa,EACb+pT,WAAY,GACZ03N,iBAAkB,GAClB/1d,MAAO,CAAC,EACRusP,gBACAlmG,aAAc,EACdtjL,YAAa,EACbizf,8BACAl8M,UAAW,GACXtC,cACA5oB,MAAO,CACNp8J,OAAQ,YACR48X,QAAS,cACT6G,SAAU,eACV11hB,KAAM,UACN8nJ,OAAQ,YACR6iK,YAAa,kBACbgG,SAAU,KACVglO,QAAS,cACTR,iBAAkB,uBAClBxlgB,IAAK,SACLimgB,QAAS,cACTzzhB,SAAU,cACV0zhB,WAAY,iBACZ15hB,MAAO,WACP25hB,UAAW,gBACX1H,UAAW,gBACX2H,WAAY,iBACZpic,OAAQ,YACR61J,KAAM,UACNz7O,OAAQ,YACRw8U,OAAQ,YACR5mI,UAAW,eACXvjK,KAAM,UACN40a,KAAM,UACNghE,MAAO,YACPC,MAAO,YACPC,aAAc,mBACdltd,MAAO,WACPgnF,MAAO,WACPmmY,QAAS,aACTrsd,KAAM,GACNyxE,SAAU,CACT,SACA,SACA,SACA,SACA,SACA,SACA,UAED66Y,WAAY,kBAEbh5e,SAAU,QACVg4Q,YAAa,CACZ5lS,KAAM,UACNE,MAAO,QACPC,IAAK,WAENquS,gBAAiB,EACjBl0P,UAAW,EACX+pQ,kBAAmB,EACnBh6P,MAAO,CAAC;AAET,IAAK,IAAI2jT,KAAU3gE,EAAS2gE,EAAO64J,gBAAgB5hiB;AACnD,OAAOA,CACR,CA9GA,CAqIgCooU,GAC3B3xL,EAvBL,SAAuB2xL,GACtB,IAAI3xL,EAAU,CACb/9G,KAAO9qB,GAAU8phB,GAAYZ,GAAWlphB,IACxCw7T,cAAeutN,GAAY1hO,IAC3BjgT,SAAUigT,GACV/1N,OAAQo6b,GACR3iO,aAAc8iO,GACdpwN,WAAaz7T,GAAU,IAAI,IAAImU,IAAInU,IACnCmzhB,iBAAmBnzhB,GAAUA,EAAMgU,IAAKw0I,GAASshY,GAAYZ,GAAW1gY,KACxE0uL,UAAYl3U,GAAUzP,GAAQyP,GAASwuhB,GAAgBxuhB,GAASA,EAChE27T,WAAY2yN;AAEb,IAAK,IAAInzJ,KAAU3gE,EAAS2gE,EAAO84J,gBAAgBprZ;AACnD,OAAOA,CACR,CAdA,CAuB6B2xL;AAC5Bq4N,EAAazuJ,GAAayuJ,EAAYhqZ,GACtCp/C,EAAc26S,GAAa36S,EAAao/C;AACxC,IAAIqrZ,EAAWjE,GAAc4C,EAAY,UAAY,CAAC,EAClDsB,EAAYlE,GAAcxmc,EAAa,UAAY,CAAC,EACpDr3F,EAhKL,WACC,IAAI43N,EAAU,EACVj8D,EAAWn1I,GAAQ,CAAC;AACxB,OAAO2hL,GA6JmB,CAAC,EA7JLjf,GAASvtB,EAASutB,GAAO,CAACpqL,EAAGma,IAAMna,IAAMma,EAAIiwK,GAASvtB,EAASutB,KAAU0uC,EAChG,CAJA;AAiKCjmJ,GAAO3xE,EAASygiB,GACZppc,EAAYhiB,OAAMr1E,EAAQq1E,KAAOgiB,EAAYhiB;AACjD,IAAI4hE,EAAU,CAAC,EACXupL,EAAc,CAAC,EACfwhO,EAAiB,CAAC,EAClB58c,EAAwB,IAAIrjE,IAAI,IAAI20B,GAAKorf,MAAcprf,GAAKqrf;AAChE,IAAK,IAAI1sd,KAAQ+P,EAAO,CACvB,IAAI68c,EAAkBF,EAAU1sd,IAAS,CAAC,EACtC6sd,EAAUnE,GAAU0C,EAAYqB,EAASzsd,IAASysd,EAASG,EAAgBngiB,OAAS,CAAC,GACrFm1C,EAAO8mf,GAAUmE,EAAS7qc,EAAa4qc,GACvChqX,EAAY4lX,GAAc5mf,EAAM;OAC7BA,EAAKo+B;AACZ,IAAK,IAAIp+C,KAAOyf,GAAKO,GAAWy/e,GAAO12hB,EAASi3B,IAC/CggH,EAAQhgH,KAAS,GACjBggH,EAAQhgH,GAAKrxB,KAAKg4hB,GAAe76hB,SAASk0B,GAAQt2B,GAAUs2C,EAAKhgB,GAAO8sE,GAAWpjG,GAASA,EAAMuhiB,EAAQjrgB,IAAQt2B,EAASA,GAAUs2C,EAAKhgB,GAAOt2B,WACpIs2C,EAAKhgB;AACnBupS,EAAYnrP,GAAQp+B,EACpB+qf,EAAe3sd,GAAQ4iG,CACxB,CAEA,OADAtmG,GAAO3xE,EAASwgU,EAAYxgU,EAAQq1E,OAC7B,CACNr1E,EACA,SAAmBi3B,EAAKt2B,EAAOgsV,MAC1B+pM,GAAO12hB,EAASi3B,KACd01T,IACA11T,KAAOw/G,EAAS91I,EAAQ81I,EAAQx/G,GAAKt2B,GAp4B9C,SAAuBA,GACtB,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB;AACjD,MAAMsC,EAAY8iB,OAAOC,eAAerlB;AACxC,OAAqB,OAAdsC,GAAsBA,IAAc8iB,OAAO9iB,SACnD,CAJA,CAq4B4BtC,GAAQA,EAAQ,IAAKA,GACnCxC,GAAQwC,KAAQA,EAAQ,IAAIA,KAEtCs2I,EAAQhgH,IAAMze,QAASqS,GAAQA,EAAIlqB,IACnCX,EAAQi3B,GAAOt2B,EAEjB,EACA,SAAwB00E,GAEvB,OADA1D,GAAO3xE,EAASwgU,EAAYnrP,IACrB2sd,EAAe3sd,EACvB,EAEF,CA9CA,CAqhBqE+yP,EAASpoU,GAC5Es0M,GAAKgqV,GAALtgiB,KAAsBwoB,GAAQA,GAAQ,MACtC8tL,GAAKy/S,GAAL/1f,KAAewoB,IA5OD+0gB,EA4OkBv9hB,KA3O1B,KACN,IACIge,GADEhc,SAAS2oD,SAAEA,IAAe4ye;AAKhC,OAHA9hB,GAAQ,KACPz9f,EAAsB,UAAb2sC,EAAuBukF,KAA0B,QAAbvkF,EAAqB,EAAIuue,GAAYvue,IAAaukF,OAEzFlxH,MAsOPs4L,GAAKiqV,GAALvgiB,KAAqBwoB,GApSvB,SAAsB+0gB,GACrB,MAAO,KACN,IACIr+gB,EAAOC,GADLnd,SAAS04B,KAAEA,EAAI1jB,SAAEA,EAAQ2/D,SAAEA,IAAe4md;AAWhD,OATA9hB,GAAQ,KACPv8f,EAAQk6gB,GAAU1+f,GACd1jB,EAASy+D,OACZv2D,EAAMixG,YAAY,GAClBjxG,EAAMgvG,WAAW,IACPl3G,EAASw+D,OAAQt2D,EAAMgvG,WAAW,GACpCl3G,EAASmihB,SAASa,GAAe96gB,EAAOy3D,GACjDx3D,EAAMm6gB,GAAYF,GAAUl6gB,GAAQlI,KAE9B,CACNkI,QACAC,OAGH,CAlBA,CAoS8Cnf,QAC5Cs2M,GAAKkqV,GAALxgiB,KAAoBwoB,GAlRtB,SAAqB+0gB,GACpB,MAAO,KACN,IACIr+gB,EAAOC,GADPs/S,aAAEA,EAAcsnE,YAAYznE,YAAEA,IAAkBi/N;AAMpD,OAJA9hB,GAAQ,KACPv8f,EAAQk6gB,GAAU36N,EAAav/S,OAC/BC,EAAMi6gB,GAAU36N,EAAat/S,OAEvBm/S,EAAcA,EAAYp/S,EAAOC,GAAO,CAC9CD,QACAC,OAGH,CAbA,CAkR4Cnf,QAC1Cs2M,GAAKmqV,GAALzgiB,KAAqBwoB,GAAQA,GAAQ,CACpC04E,OAAQ,CAAC,EACT4lP,UAAW,CAAC,MAEbxwI,GAAK9B,GAALx0M,KAAewoB,GAAQg3gB,GAAWx/hB,KAAKgC,QAAQk/F,UAC/Co1G,GAAKoqV,GAAL1giB,KAAuBwoB,GA1QzB,SAAwB+0gB,GACvB,MAAO,KACN,IAAIr8b,OAAEA,EAAQl/F,SAASu6b,YAAEA,EAAWt6G,WAAEA,EAAU6gN,0BAAEA,EAAyBh8M,UAAEA,EAASzvQ,KAAEA,IAAWkmd,EAC/Ft2gB,EAAS,IAAIi6E;AAgBjB,OAfAu6a,GAAQ,KACP,GAAI11a,GAAWw2V,GAAc,CAC5B,IAAI4nG,EAAUjjc,EAAOt9E,IAAIg4gB,IACrBvkd,EAAO+jd,GAAqBmC,EAAUlmd;AAC1CpwD,EAASA,EAAOV,OAAO,CAAC7c,EAAOX,IAAUwzb,EAAY,CACpD7yb,MAAOkyhB,GAAsBlyhB,GAC7BX,QACAm4F,OAAQijc,EACR9sd,SAEF,CACIyrd,IAA2B77gB,EAASA,EAAOV,OAAQ7c,GAAUo9U,EAAUrjU,KAAMy4gB,GAAaxyhB,EAAM6xhB,YAAYx2hB,SAASm3hB,EAASl9e,OAC9H+mD,GAAWk8O,GAAah7T,EAAOkL,KAAK,CAACrxB,EAAGma,IAAMgnU,EAAW25M,GAAsB96hB,GAAI86hB,GAAsB3ghB,KACxGgM,EAAOkL,KAAK,CAACrxB,EAAGma,IAAMna,EAAEoe,MAAQjE,EAAEiE,OAASjE,EAAE86T,OAASj1U,EAAEi1U,UAEvD9uT,EAET,CArBA,CA0QkDjnB,QAChDs2M,GAAKqqV,GAAL3giB,KAAewoB,MACf8tL,GAAKm9E,GAALzzR,KAAYwoB,GAAQA,GAAQswgB,QAAgB,EAAG94hB,KAAKge,WACpDs4L,GAAKsqV,GAAL5giB,KAAkBwoB,GAAQg3gB,GAAWr/hB,GAAQH,KAAKgC,QAAQ8kV,WAAa9mV,KAAKgC,QAAQ8kV,UAAY,MAChGxwI,GAAKuqV,GAAL7giB,KAAmBwoB,MACnB8tL,GAAKwqV,GAAL9giB,KAAcwoB,GAAQA,GAAQkxgB,GAAYN,GAAUp5hB,KAAK8sD,SACzDwpJ,GAAKyqV,GAAL/giB,KAAsBwoB,GAAUg1gB,GAAUx9hB,KAAM,qBAChDs2M,GAAK0qV,GAALhhiB,KAAsBwoB,GAAU80gB,GAAKt9hB,KAAM,qBAC3Cs2M,GAAK2qV,GAALjhiB,KAAwBwoB,GAAU80gB,GAAKt9hB,KAAM,8BAC7Cs2M,GAAK4qV,GAALlhiB,KAAkBwoB,GAAUg1gB,GAAUx9hB,KAAM,iBAC5Cs2M,GAAK6qV,GAALnhiB,KAAkBwoB,GApPpB,SAAmB+0gB,GAClB,MAAO,KACN,IAAIv7hB,QAAEA,EAAOs8T,YAAEA,GAAgBi/N,GAC3BlyN,WAAEA,GAAerpU,EACjB4qI,EAAQ;AAeZ,OAdA6uY,GAAQ,KACP,IAAI/gf,EAAOg/f,GAAYN,GAAU96N,EAAYp/S,QACzCC,EAAMu6gB,GAAYN,GAAU96N,EAAYn/S;AAC5C,KAAOub,EAAOvb,GACRksT,EAAWtmU,SAAS21B,EAAKuzF,cAAc2e,EAAMhlI,KAAKwxhB,GAAU1+f,IACjE++f,GAAO/+f;AAER,IAAKkyG,EAAMrsI,QAAU8qU,EAAW9qU,QAAU8qU,EAAW9qU,OAAS,EAAG,CAChE,KAAO8qU,EAAWtmU,SAAS21B,EAAKuzF,cAAcwra,GAAO/+f;AACrD2jI,KAAO5qF,KAAK,KACX8pd,EAAU3zL,UAAU,OAAQlvU,IAE9B,IAEMkyG,EAET,CArBA,CAoPwC5sI,QACtCs2M,GAAK8qV,GAALphiB,KAAkBwoB,GA/NpB,SAAmB+0gB,GAClB,MAAO,KACN,IACIhgY,GADAkhK,aAAEA,EAAYyjO,UAAEA,GAAc3E;AAKlC,OAHA9hB,GAAQ,KACPl+W,EAAQ2kY,EAAUx1e,YAAY+xQ,EAAav/S,MAAOq6gB,GAAYH,GAAU36N,EAAat/S,SAE/Eo+I,EAET,CATA,CA+NwCv9J,QACtCs2M,GAAK+qV,GAALrhiB,KAAawoB,GAtNf,SAAc+0gB,GACb,MAAO,KACN,IACI6G,GADA9lO,YAAEA,EAAWG,aAAEA,EAAYN,UAAEA,EAAWn8T,SAASq1E,KAAEA,IAAWkmd;AAKlE,OAHA9hB,GAAQ,KACP2oB,EAp7BH,SAAoB/sd,EAAMgtd,EAAYC,EAAeC,GACpD,MAAO,CACNzgiB,KAAMuzE,EACNkmF,MAAO8mY,EACP7lO,aAAc8lO,EAAcplhB,MAC5Bw/S,WAAY4lO,EAAcnlhB,IAC1Bi/S,YAAammO,EAAarlhB,MAC1Bq/S,UAAWgmO,EAAaplhB,IACxB++S,cAAe,EAEjB,CAVA,CAo7BwB7mP,EAAM8mP,EAAWM,EAAcH,KAE9C8lO,EAET,CATA,CAsN8BpkiB,QAC5Bs2M,GAAKgrV,GAALthiB,KAAsBwoB,MACtB8tL,GAAKirV,GAALvhiB,KAAmBwoB,GAAQA,GAAQ,CAAC,KACpC8tL,GAAKkrV,GAALxhiB,KAAiBwoB,GAAQA,GAAQ,MACjCxoB,KAAKwkiB,SAAW,CAAC,EACjBluV,GAAK2zE,GAALjqR,KAAoBwoB,GAAQA,GAAQ,CAAC,KACrCxoB,KAAKykiB,QAAU,IAAIhN,GACnBnhV,GAAKmrV,GAALzhiB,KAAiBwoB,GAAQA,GAAQy5I,MACjCq0C,GAAKorV,GAAL1hiB,KAAewoB;AACf,IAAK,IAAIuiX,KAAU3gE,EAAS2gE,EAAO25J,YAAY1kiB;AAC/C87gB,GAAA6lB,GAAA3hiB,KAAK2kiB,IAAY/5hB,KAAjB5K,KACD;AAcD,SAAA2kiB,KAZE,IAAItxU,EApZN,SAA8BkqU,GAC7B,IAAI3jU,EAAU;AACd,SAASgrU,EAAOjiiB,GACf,IAAMX,SAASqxN,QAAEA,IAAckqU;AAC3Bx3b,GAAWstH,IAAUA,EAAQ1wN,EAClC,CACA,MAAO,CACNuc,MAAOA,IAAoB,MAAZ06M,GAAiBgrU,MAChC16hB,KAAMA,IAAoB,MAAZ0vN,GAAiBgrU,MAEjC,CAVA,CAoZqC5kiB;AAverC,IAAoBu9hB;AAwelB/0gB,IAxekB+0gB,EAweWv9hB,KAvevB,KACN,IAAMgC,SAASq1E,KAAEA,IAAWkmd;AAC5B9hB,GAAQ,KACP,IAAIopB,EAAgBtH,EAAUiF,eAAenrd;AAC7Ckmd,EAAUx3J,WAAa,CAAC,EACxBw3J,EAAUx+H,SAAW,GACrBw+H,EAAU4E,cAAgB0C,EAActH,QAkezC/0gB,GA/XF,SAA8B+0gB,GAC7B,MAAO,KACN,IAAIv/gB,OAAEA,EAAMhc,QAAEA,GAAYu7hB;AAC1B9hB,GAAQ,KACP,IAAK,IAAI/xgB,KAAS6zhB,EAAUr8b,OAAQ,IAAKx3F,EAAMqsU,OAAQ,IAAK,IAAI7qJ,IAAQ,CAAC,QAAS,OAAQ,CACzF,IAAI45W,EAAazL,GAAU3vhB,EAAMwhL;KACT,IAApB45W,GAAuB/L,GAAgBrvhB,EAAMwhL,GAAOltK,EAAS8mhB,GACjE9L,GAAUtvhB,EAAMwhL,GAAOltK,EACxB,CACA,IAAI8mhB,EAAazL,GAAUr3hB,EAAQ04B;AACnC,QAAwB,IAApBoqgB,EAAuB,CAC1B,IAAI94a,EAAO8sa,QAAgB,EAAG96gB,GAAQiwG,YAAc6qa,QAAgB,EAAGgM,GAAY72a,YAC/EvzF,EAAO++f,GAAOL,GAAUp3hB,EAAQ04B,MAAOsxF;AAC3Cuxa,EAAU3zL,UAAU,OAAQlvU,EAC7B,CACAs+f,GAAUh3hB,EAAQ04B,KAAM1c,KAG3B,CAlBA,CA+XyChe,OACvCwoB,GA5YF,SAAwB+0gB,GACvB,MAAO,KACN,IAAIv/gB,OAAEA,GAAWu/gB,EACb7wZ,EAAWoyB,YAAY,KAC1B,IAAIhyG,EAAMgse,QAAgB,EAAG96gB,GACzBu4D,EAAQmjd,GAAYN,GAAUtse;AAClCywe,EAAUzwe,IAAMA,EACX8se,GAAW2D,EAAUhnd,MAAOA,KAAQgnd,EAAUhnd,MAAQA,IACzD;AACH,MAAO,IAAMwoF,cAAcryB,GAE7B,CAXA,CA4YmC1sI,OACjCwoB,GAheF,SAAoB+0gB,EAAWwH,GAC9B,MAAO,KACN,IAAIzmO,YAAEA,EAAa4hO,cAAgBh/b,OAAQg/b,GAAclihB,OAAEA,EAAMghhB,UAAEA,EAAWh9hB,SAASk/F,OAAEA,EAAMy3N,aAAEA,EAAYY,aAAEA,EAAY5uQ,SAAEA,IAAe4ye;AAC5I9hB,GAAQ,KACPjvR,GAAKmsE,EAAa/0S,IAAK2sB,GAAWw1D,GAAWx1D,EAAO2wD,QAAU3wD,EAAO2wD,OAAS3wD,GAAS2wD,EAAStxF,GAAU0rhB,GAAa1rhB,EAAOoO,GAAUiJ,GAAWs2gB,EAAUr8b,OAASs+b,GAAWv4gB,GAAS0jC,EAAU2zQ,EAAa4hO,EAAclB,KAAiBzlO,EAAcwrO,KAGjQ,CAPA,CAge2B/kiB,KAAMqzN,IAC/B7qM,GAzdF,SAAuB+0gB,EAAWwH,GACjC,MAAO,KACN,IAAIzmO,YAAEA,EAAa4hO,cAAgBp5M,UAAWo5M,GAAclB,UAAEA,EAAWh9hB,SAASu3T,aAAEA,EAAYypO,2BAAEA,EAA0Bl8M,UAAEA,EAASn8R,SAAEA,IAAe4ye;AACxJ9hB,GAAQ,KACPjvR,GAAKrsP,GAAQ2mV,GAAa,GAAK,CAACA,GAAYA,EAAWs3M,GAAkBn3gB,GAAWs2gB,EAAUz2M,UAAY04M,GAAWv4gB,GAAS0jC,EAAU2zQ,EAAa4hO,EAAclB,EAAWgE,EAA4BzpO,EAAcwrO,KAG3N,CAPA,CAyd8B/kiB,KAAMqzN,IAClC7qM,GAhXF,SAAqB+0gB,GACpB,MAAO,KACN,IAAIj/N,YAAEA,EAAat8T,SAAS2jV,SAAEA,IAAe43M;AAC7C9hB,GAAQ,KACH11a,GAAW4/O,IAAWA,EAAS,CAClCzmU,MAAOy6gB,GAAYr7N,EAAYp/S,OAC/BC,IAAKw6gB,GAAYr7N,EAAYn/S,KAC7Bm1U,SAAUlvC,GAAYkZ,EAAYp/S,OAClCs1U,OAAQpvC,GAAYkZ,EAAYn/S,KAChCk4D,KAAM+jd,GAAqBmC,EAAUlmd,UAIzC,CAbA,CAgX4Br3E,OAC1BwoB,GAnWF,SAA4B+0gB,GAC3B,IAAIhpW;AACJ,MAAO,KACN,IAAI0qW,eAAEA,EAAgBj9hB,SAAS4giB,gBAAEA,IAAsBrF;AACvD9hB,GAAQ,KACH11a,GAAW68b,KACTruW,IAAOA,EAAQplL,WAAW,KAC9BolL,EAAQ,KACRquW,EAAgB,CAAEvrd,KAAM+jd,GAAqBmC,EAAUlmd,cAK5D,CAbA,CAmWmCr3E,OACjCwoB,GAtVF,SAAyB+0gB,GACxB,MAAO,KACN,IAAMv7hB,SAASq1E,KAAEA,EAAI+pQ,aAAEA,IAAmBm8M;AAC1C9hB,GAAQ,KACH11a,GAAWq7O,IAAe/iL,KAAO5qF,KAAK,IAAM2tQ,EAAa,CAAE/pQ,KAAM+jd,GAAqBmC,EAAUlmd,WAGvG,CAPA,CAsVgCr3E,MAC/B,CAID,IAAIgliB,GAAUx8gB,GAAY,aACtBy8gB,GAAWz8gB,GAAY,4BACvB08gB,GAAW18gB,GAAY,sBACvB28gB,GAAW38gB,GAAY;AAC3B,SAAS48gB,GAAQC,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAI/H,EAAYlzH,EAAW,SACvB5rG,EAAej2S,GAAU,IAAM+0gB,EAAU9+N,cAAeloP,EAAQ/tD,GAAU,IAAM+0gB,EAAUhnd,OAAQ4nP,EAAY31S,GAAU,IAAM+0gB,EAAUp/N,WAAY6gO,EAAYx2gB,GAAU,IAAM+0gB,EAAUyB,WAAYlvO,EAAatnS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ8tT,YAAa+M,EAAgBr0S,GAAU,IAAM+0gB,EAAUv7hB,QAAQ66T,eAAgBniS,EAAOlS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ04B,MAAO0wS,EAAgB5iT,GAAU,IAAM+0gB,EAAUv7hB,QAAQopU,eAAgBp0T,EAAWwR,GAAU,IAAM+0gB,EAAUv7hB,QAAQgV,UAAWq0T,EAAa7iT,GAAU,IAAM+0gB,EAAUv7hB,QAAQqpU,YAAazP,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OAAQ2P,EAAa/iT,GAAU,IAAM+0gB,EAAUv7hB,QAAQupU,YAAal0P,EAAO7uD,GAAU,IAAM+0gB,EAAUv7hB,QAAQq1E,MACjsBkud,EAAe/8gB,OACfg9gB,EAAeh9gB,OACfi9gB,EAAgBj9gB,OAChBymS;AAwBJ,SAAS5pS,EAAKiL,GACb,IAAIk7G,EAAchjH,GAAMkS;AACxBpK;AACA,IAAIrJ,EAASuB,GAAMw2gB,GAAW3sgB,MAAOqI,GAASyjgB,GAAazjgB,EAAMlS,GAAM+iT;AAEvE,OADAgyN,EAAU3zL,UAAU,OAAQp+N,GACrBvkH,CACR,CACA,SAASwpP,IACR8sR,EAAU3zL,UAAU,OAAQgD,GAASwsL,GAAU5wgB,GAAMkS,IAAQlS,GAAM4iT,IAAkB5iT,GAAMxR,GAAWwR,GAAM6iT,IAC7G,CACA,SAASpyO,IACRskc,EAAU3zL,UAAU,OAAQiD,GAASusL,GAAU5wgB,GAAMkS,IAAQlS,GAAM4iT,IAAkB5iT,GAAMxR,GAAWwR,GAAM6iT,IAC7G,CACA,SAASq6N,IACRnI,EAAU3zL,UAAU,OAAQwvL,GAAU5wgB,GAAM+tD,IAC7C,CAtCA/tD,GAAkB,KACjBA,GAAMw2gB,GACNx2gB,GAAM+iT,GACN+5N,EAAQltd,QACRqjc,GAAQ,KACFxsN,IACJA,KACIq2O,EAAQltd,QAAQrzE,SAAS,UAC5ByjB,GAAM+8gB,MACF/8gB,GAAM+iT,GAAYrsT,OAAOsJ,GAAM+8gB,EAAclghB,EAAKorP,QAEnD60R,EAAQltd,QAAQrzE,SAAS,UAC5ByjB,GAAMg9gB,MACFh9gB,GAAM+iT,GAAYpsT,KAAKqJ,GAAMg9gB,EAAcnghB,EAAK4zE,QAEjDqsc,EAAQltd,QAAQrzE,SAAS,WAC5ByjB,GAAMi9gB,EAAej9gB,GAAM+tD,IAAU/tD,GAAMi2S,GAAcv/S,OAASsJ,GAAM+tD,GAAS/tD,GAAMi2S,GAAct/S,QAChGqJ,GAAMi9gB,KAAmBj9gB,GAAM+iT,GAAYrsT,QAASsJ,GAAM+iT,GAAYpsT,KAAMqJ,GAAMi9gB,EAAepghB,EAAKqghB,QAE5GrnY,KAAO5qF,KAAK,IAAMw7O;AAoBrB,IAAI66E,EAAWthX;AAEfA,GADWA,GAAcshX,GACZ,GAAI,IAAMw7J,EAAQltd,QAAS5vD,GAAS,CAAC68gB,EAAUhwY,KAC3D,IAAIswY,EAAan9gB,KACbo9gB,EAASp9gB,GAAcm9gB,GACvBE,EAAcR,IACjB,IAAIvtK,EAAKktK;AACTx8gB,GAASsvW,EAAI,IAAMwgK,GAAY9vgB,GAAM21S,KACrC31S,GAAkB,IAAMA,GAAYsvW,EAAI,EAAGtvW,GAAMozS,GAAOr+J,QACxD/0I,GAAS68gB,EAAUvtK,IAEhBguK,EAAgBT,IACnB,IAAIU,EAAWd,KACX3kiB,EAAIkoB,GAAQu9gB;AAChBv9gB,EAAQu9gB,GACRv9gB,GAAkB,KACjBA,GAAYu9gB,EAAU,EAAG,GAAGv9gB,GAAMozS,GAAOvmK,QAAU,SAAS7sI,GAAM6sI,IAAW,MAC7E7sI,GAAgBu9gB,EAAU,aAAcv9gB,GAAMsnS,GAAYr/C,MAC1DjoP,GAAgBu9gB,EAAU,QAASv9gB,GAAMsnS,GAAYr/C,MACrDs1R,EAASr2hB,SAAW8Y,GAAM+8gB,GAC1B/8gB,GAAYloB,EAAG,EAAG,GAAGkoB,GAAMozS,GAAOjuQ,MAAQ,SAASnlC,GAAM6sI,IAAW,QAErE7sI,GAAY,QAASu9gB,EAAUt1R,GAC/BjoP,GAAS68gB,EAAUU,IAEhBC,EAAgBX,IACnB,IAAIY,EAAWhB,KACXiB,EAAM19gB,GAAQy9gB;AAClBz9gB,EAAQy9gB,GACRz9gB,GAAkB,KACjBA,GAAYy9gB,EAAU,EAAG,GAAGz9gB,GAAMozS,GAAOvmK,QAAU,SAAS7sI,GAAM6sI,IAAW,MAC7E7sI,GAAgBy9gB,EAAU,aAAcz9gB,GAAMsnS,GAAY72N,MAC1DzwE,GAAgBy9gB,EAAU,QAASz9gB,GAAMsnS,GAAY72N,MACrDgtc,EAASv2hB,SAAW8Y,GAAMg9gB,GAC1Bh9gB,GAAY09gB,EAAK,EAAG,GAAG19gB,GAAMozS,GAAOjuQ,MAAQ,SAASnlC,GAAM6sI,IAAW,QAEvE7sI,GAAY,QAASy9gB,EAAUhtc,GAC/BzwE,GAAS68gB,EAAUY,IAEhBE,EAAgBd,IACnB,IAAIe,EAAWlB,KACX7hiB,EAAOmlB,GAAQ49gB;AACnB59gB,EAAQ49gB,GACR59gB,GAAkB,KACjBA,GAAY49gB,EAAU,EAAG,GAAG59gB,GAAMozS,GAAOvmK,QAAU,SAAS7sI,GAAM6sI,IAAW,MAC7E+wY,EAAS12hB,SAAW8Y,GAAMi9gB,GAC1Bj9gB,GAAWnlB,EAAMmlB,GAAMsnS,GAAYtnS,GAAM6sI,OAE1C7sI,GAAY,QAAS49gB,EAAUV,GAC/Bl9gB,GAAS68gB,EAAUe,IAEhBC,EAAgBhB,IACnB,IAAIiB,EAAWnB;AACf38gB,GAAS89gB,EAAU,IAAMhO,GAAY9vgB,GAAMq0S,GAAer0S,GAAM6sI,IAAShyJ,OACzEmlB,GAAkB,IAAMA,GAAY89gB,EAAU,EAAG99gB,GAAO,CACvDA,GAAMozS,GAAOvmK,OACb,MAAM7sI,GAAM6sI,KACZ7sI,GAAMq0S,GAAer0S,GAAM6sI,IAASmK,QAAUh3I,GAAMozS,GAAOp8J,WAE5Dh3I,GAAY,QAAS89gB,EAAU,YAAYC,GAC1C/9gB,GAAMq0S,GAAer0S,GAAM6sI,IAASorH,OAAO9tQ,MAAM3S,KAAMumiB,EACxD,GACA/9gB,GAAS68gB,EAAUiB,IAEhBE,EAAgBnB,IACnB,IAAIoB,EAAWvB,KACXwB,EAASl+gB,GAAQi+gB;AACrBj+gB,EAAQi+gB,GACRj+gB,GAAkB,KACjBA,GAAYi+gB,EAAU,EAAGj+gB,GAAO,CAC/BA,GAAMozS,GAAOvmK,OACb,MAAM7sI,GAAM6sI,KACZ7sI,GAAM6uD,KAAU7uD,GAAM6sI,IAAW7sI,GAAMozS,GAAOp8J,UAE/Ch3I,GAAWk+gB,EAAQl+gB,GAAMsnS,GAAYtnS,GAAM6sI,OAE5C7sI,GAAY,QAASi+gB,EAAU,IAAMlJ,EAAU3zL,UAAU,OAAQphV,GAAM6sI,KACvE7sI,GAAS68gB,EAAUoB;AAEpBj+gB,GAAKo9gB,EAASe,IACS,UAAlBn+gB,GAAM6sI,GAAqBsxY,EAASd,GACb,SAAlBr9gB,GAAM6sI,GAAoBsxY,EAASb,EAAc,GAC/B,SAAlBt9gB,GAAM6sI,GAAoBsxY,EAASX,EAAc,GAC/B,UAAlBx9gB,GAAM6sI,GAAqBsxY,EAASR,EAAc,GAClD39gB,GAAMq0S,GAAer0S,GAAM6sI,IAAUsxY,EAASN,EAAc,GAC1C,KAAlB79gB,GAAM6sI,IAAgBsxY,EAASH,EAAc,KAEvDh+gB,GAAS68gB,EAAUM,KAEpBn9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CACAA,GAAW,CAAC;AAGZ,IAAIo+gB,GAAUp+gB,GAAY,kBACtBq+gB,GAAWr+gB,GAAY,eACvBs+gB,GAAWt+gB,GAAY,eAkDvBu+gB,GAAgC,IAAIhjhB,IAAI,CAC3C,UACA,WACA,WACA,UACA,YAEGijhB,GAAUx+gB,GAAY;AAC1B,SAASmrT,GAAS0xN,EAAUC,GAC3B98gB,EAAO88gB;AACP,IAAIl7N,EAAU5hT,GAAO88gB,EAAS,UAAW,GAAI,IAAM,IAAKtjiB,EAAUwmB,GAAO88gB,EAAS,UAAW,GAAI,MAAS,IAAId,ETjoDvG,IAAIp6V,MAAuC,CAAE9/I,MSioDkFg7e,ETjoD3E9ob,QSioDoFuqb,ITjoDzE3U,ISkoDlEmL,EAAY,IAAI8C,GAAMj2N,IAAWpoU;AACrCu7hB,EAAUiH,SAAWA,EACrB5+G,EAAW,QAAS23G;AACpB,IAAIqE,EAAgBp5gB,GAAU,IAAM+0gB,EAAUqE,eAAgB7iI,EAAWv2Y,GAAU,IAAM+0gB,EAAUx+H,UAAW79T,EAAS14E,GAAU,IAAM+0gB,EAAUr8b,QAASkmL,EAAc5+P,GAAU,IAAM+0gB,EAAUn2Q,aAAci7Q,EAAS75gB,GAAU,IAAM+0gB,EAAU8E,QAASrkhB,EAASwK,GAAU,IAAM+0gB,EAAUv/gB,QAASq5D,EAAO7uD,GAAU,IAAM+0gB,EAAUlmd,MAAOo+U,EAAOjtY,GAAU,IAAM+0gB,EAAU4E,eAAgBzngB,EAAOlS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ04B,MAAO0wS,EAAgB5iT,GAAU,IAAM+0gB,EAAUv7hB,QAAQopU,eAAgBp0T,EAAWwR,GAAU,IAAM+0gB,EAAUv7hB,QAAQgV,UAAWsK,EAASkH,GAAU,IAAM+0gB,EAAUv7hB,QAAQsf,QAAS+pT,EAAa7iT,GAAU,IAAM+0gB,EAAUv7hB,QAAQqpU,YAAaq3N,EAAmBl6gB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ0giB,kBAAmB9mO,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OACzwBqrO,EAAc,IAAKjliB;AAOvB,SAAS4nW,EAAUxhW,EAAMzF,GAExB,OADA46hB,EAAU3zL,UAAUxhW,EAAMzF,MACnB3C,IACR,CATAwoB,GAAkB,KACjB,IAAK,IAAKpgB,EAAMzF,KAltBlB,SAAcX,EAASiliB,GACtB,IAAIj7a,EAAO;AACX,IAAK,IAAI/yF,KAAOyf,GAAK12C,GAAcA,EAAQi3B,KAASgugB,EAAYhugB,IAAM+yF,EAAKpkH,KAAK,CAACqxB,EAAKj3B,EAAQi3B;AAC9F,OAAO+yF,CACR,CAJA,CAktBiChqH,IAAWiliB,GAAcxrB,GAAQ,KAC/D7xK,EAAUxhW,EAAMzF;AAEjBgxE,GAAOszd,EAAajliB;AA6ErB,IAAIkliB,EAAY,CACft9L,YACA1mJ,UAzED,SAAmB96M,GAClB,IAAIzF,EAAQ46hB,EAAUv7hB,QAAQoG;AAC9B,OAAO8yH,GAAOv4H,GAASg3hB,GAAYh3hB,GAASA,CAC7C,EAuECwkiB,iBAtED,WAEC,OADA5J,EAAU2C,aAAap5M,UAAY,CAAC,EAC7B9mV,IACR,EAoECorW,cAnED,WAEC,OADAmyL,EAAU2C,aAAah/b,OAAS,CAAC,EAC1BlhG,IACR,EAiEC+qW,UAhED,WACC,OAAOviV,GAAM04E,GAAQt9E,IAAIg4gB,GAC1B,EA+DC9wL,aA9DD,SAAsB9rT,GACrBA,EAAKrO,OAAOqO;AACZ,IAAK,IAAIt1C,KAAS8e,GAAM04E,GAAS,GAAIx3F,EAAMs1C,KAAOA,EAAI,OAAO48e,GAAsBlyhB;AACnF,OAAO,IACR,EA2DCyxJ,SA1DD,SAAkBzxJ,GAGjB,OAFAA,EAAQ4xhB,GAAa,CAAC5xhB,GAAQ8e,GAAMxK,IAAS,GAC7CwK,GAAM04E,GAAQt5F,KAAK8B,GACZkyhB,GAAsBlyhB,EAC9B,EAuDC09hB,YAtDD,SAAqB19hB,GACpB,IAAIs1C,EAAKrO,OAAOjnC,EAAMs1C,IAClByvK,EAAMjmM,GAAM04E,GAAQqiH,UAAW75M,GAAUA,EAAMs1C,KAAOA;AAC1D,OAAIyvK,GAAO,GACV/kN,EAAQ4xhB,GAAa,CAAC5xhB,GAAQ8e,GAAMxK,IAAS,GAC7CwK,GAAM04E,GAAQutH,GAAO/kN,EACdkyhB,GAAsBlyhB,IAEvB,IACR,EA8CC29hB,gBA7CD,SAAyBrof,GACxBA,EAAKrO,OAAOqO;AACZ,IAAIyvK,EAAMjmM,GAAM04E,GAAQqiH,UAAW75M,GAAUA,EAAMs1C,KAAOA;AAE1D,OADIyvK,GAAO,GAAGjmM,GAAM04E,GAAQp3F,OAAO2kN,EAAK,GACjCzuN,IACR,EAyCCsniB,QAxCD,WACC,OAAOlM,GAAqB5ygB,GAAM6uD,GACnC,EAuCC+uQ,SAtCD,WAEC,OADA59T,GAAM4+P,GAAa1mM,QAAQ0lQ,WACpBpmV,IACR,EAoCCuniB,cAnCD,SAAuBvgiB,EAAGwK,GACzB,IAAIq3V,EAAQoyL,GAAsBj0hB,EAAGwK;AACrC,GAAIq3V,EAAO,CACV,IAAI3lL,EAAO83W,GAAWnyL,EAAXmyL,CAAkBh0hB,EAAGwK;AAEhC,OADA0xK,EAAKxoJ,KAAOi/f,GAAYz2W,EAAKxoJ,MACtBwoJ,CACR,CACA,OAAO,IACR,EA4BCgnL,SA3BD,SAAkBxvU,GAIjB,OAHAA,EAAOg/f,GAAYZ,GAAWp+f,IAC9B6igB,EAAU3zL,UAAU,OAAQwvL,GAAU1+f,IACtC6igB,EAAUuE,WAAapngB,EAChB16B,IACR,EAuBCi5F,KAtBD,WAEC,OADAskc,EAAU3zL,UAAU,OAAQiD,GAASusL,GAAU5wgB,GAAMkS,IAAQlS,GAAM4iT,IAAkB5iT,GAAMxR,GAAWwR,GAAM6iT,KACrGrrU,IACR,EAoBCywQ,KAnBD,WAEC,OADA8sR,EAAU3zL,UAAU,OAAQgD,GAASwsL,GAAU5wgB,GAAMkS,IAAQlS,GAAM4iT,IAAkB5iT,GAAMxR,GAAWwR,GAAM6iT,KACrGrrU,IACR,GAkBIqpe,EAAM29D;AACV,IAAI38hB;AACJ,IAAI6Z,EAAOsE,GAAQ6gd;CArKpB,SAAiBg8D,GAChB78gB,EAqKc,CAAC;AApKf,IAAI0sgB,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWvuG,EAAgBtzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ85T,eAAgBF,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OAC1JkpC,EAAWt8U,GAAU,KACxB,IAAIs8U,EAAW,CAAC;AAChB,IAAK,IAAI7rU,IAAO,CACf,QACA,SACA,OACE6rU,EAAS7rU,GAAOzQ,GAAMszS,GAAe7iS,IAAMhhB,MAAM,KAAK2L,IAAKquI,GAAUA,EAAMh6I,MAAM,OAAS;AAC7F,OAAO6sV;AAER,IAAIj9Q,EAAMi/c;AACVt+gB,GAAOq/D,EAAK,GAAI,IAAMnvC,GAAKlwB,GAAMs8U,IAAYt8U,GAAS,CAAC68gB,EAAUpsgB,KAChE,IAAIowc,EAAMw9D;AACVr+gB,GAAO6gd,EAAK,GAAI,IAAM7gd,GAAMs8U,GAAUt8U,GAAMyQ,IAAOzQ,GAAS,CAAC68gB,EAAUjtd,KACtE,IAAI0xT,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrB+7J,EAAcR,IACjB,IAAImC,EAAQZ;AACZxB,GAAQ58gB,GAAQg/gB,GAAQ,CAAE,WAAApvd,GACzB,OAAO5vD,GAAM4vD,EACd,IACA5vD,EAAQg/gB,GACRh/gB,GAAkB,IAAMA,GAAYg/gB,EAAO,EAAGh/gB,GAAMozS,GAAO1D,cAC3D1vS,GAAS68gB,EAAUmC,IAEhBC,EAAapC,IAChBD,GAAQC,EAAU,CAAE,WAAAjtd,GACnB,OAAO5vD,GAAM4vD,EACd;AAED5vD,GAAKtE,EAAOyihB,IACPn+gB,GAAM4vD,GAAS73E,OAAS,EAAGomiB,EAASd,GACnCc,EAASc,GAAY,KAE3Bj/gB,GAAS68gB,EAAUv7J,KAEpBthX,EAAQ6gd,GACR7gd,GAAkB,IAAMA,GAAY6gd,EAAK,EAAG,MAAM7gd,GAAMyQ,IAAQ,OAChEzQ,GAAS68gB,EAAUh8D,KAEpB7gd,EAAQq/D,GACRr/D,GAAkB,IAAMA,GAAYq/D,EAAK,EAAGr/D,GAAMozS,GAAO8nO,UACzDl7gB,GAAS68gB,EAAUx9c,GACnBr/D,GACD,CA9CA,CAsKStE;AACR,IAAI0hhB,EAASp9gB,GAAUtE,EAAM;AAyB7B,OAxBAsE,GAAYo9gB,EAAQ,IAAMp9gB,GAAMitY,GAAO,CAAC4vI,EAAUqC,KACjDA,EAAOrC,EAAU,CAAC,KAGnB78gB,GADaA,GAAUo9gB,EAAQ,GAChB,GAAI,IAAMp9gB,GAAMo5gB,GAAgBp5gB,GAAS,CAAC68gB,EAAUsC,KAClE,IAAI79J,EAAWthX;AAEfA,GADaA,GAAcshX,GACP,IAAMthX,GAAMm/gB,GAAe,CAACtC,EAAUuC,KACzDA,EAAevC,EAAU,CAAC,KAE3B78gB,GAAS68gB,EAAUv7J,KAEpBthX,EAAQ6gd,GACR7gd,GAAmBq/gB,IAClBr/gB,GAAY6gd,EAAK,EAAG7gd,GAAO,CAC1BA,GAAMozS,GAAOsC,SACb11S,GAAMozS,GAAOvkP,KACb7uD,GAAM65gB,IAAW75gB,GAAMozS,GAAOpzS,GAAM65gB,IACpC75gB,GAAMk6gB,IAAqBl6gB,GAAMozS,GAAO8mO,oBAEzCl6gB,GAAgB6gd,EAAK,OAAQw+D,GAC7Bx9hB,EAASme,GAAY6gd,EAAK,GAAIh/d,EAAQ,CAAEiX,OAAQkH,GAAMlH,MACpD,CAAC,IAAMkH,GAAMu2Y,GAAUh6Z,SAAS,QAAU,OAAS,UACtDyjB,GAAS68gB,EAAUh8D,GACZ7gd,EAAM0+gB,EACd,CAMA,SAASY,GAAgB9liB,GAClB,gBAAiBA,GAAU2xE,GAAO3xE,EAAS,CAChD8+U,eACAE,uBAAwB,GAE1B,CA4EA,IAAI+mN,IAAWC,GAAA,IAAA7yb,QAAA8yb,GAAA,IAAA9yb,QAAA+yb,GAAA,IAAA/yb,QAAAgzb,GAAA,IAAAhzb,QAAAizb,GAAA,IAAAjzb,QAAAkzb,GAAA,IAAAlzb,QAAAmzb,GAAA,IAAAnzb,QAAAozb,GAAA,IAAApzb,QAAAqzb,GAAA,IAAArzb,QAAG,MAEjB,aAAAy/S,GACC,OAAOpsY,GAAM+tL,GAAKyxV,GAALhoiB,MACd,CACA,aAAA40Z,CAAcjyZ,GACb6lB,GAAM+tL,GAAKyxV,GAALhoiB,MAAiB2C,EACxB,CAEA,QAAAo0P,GACC,OAAOvuO,GAAM+tL,GAAK0xV,GAALjoiB,MACd,CACA,QAAA+2P,CAASp0P,GACR6lB,GAAM+tL,GAAK0xV,GAALjoiB,MAAY2C,EACnB,CAEA,UAAA8liB,GACC,OAAOjghB,GAAM+tL,GAAK2xV,GAALloiB,MACd,CACA,UAAAyoiB,CAAW9liB,GACV6lB,GAAM+tL,GAAK2xV,GAALloiB,MAAc2C,KACrB,CAEA,UAAA+kD,GACC,OAAOl/B,GAAM+tL,GAAK4xV,GAALnoiB,MACd,CACA,UAAA0nD,CAAW/kD,GACV6lB,GAAM+tL,GAAK4xV,GAALnoiB,MAAc2C,EACrB,CAEA,YAAA+liB,GACC,OAAOlghB,GAAM+tL,GAAK6xV,GAALpoiB,MACd,CACA,YAAA0oiB,CAAa/liB,GACZ6lB,GAAM+tL,GAAK6xV,GAALpoiB,MAAgB2C,EACvB,CAEA,WAAAgmiB,GACC,OAAOnghB,GAAM+tL,GAAK8xV,GAALroiB,MACd,CACA,WAAA2oiB,CAAYhmiB,GACX6lB,GAAM+tL,GAAK8xV,GAALroiB,MAAe2C,EACtB,CAEA,eAAAimiB,GACC,OAAOpghB,GAAM+tL,GAAK+xV,GAALtoiB,MACd,CACA,eAAA4oiB,CAAgBjmiB,GACf6lB,GAAM+tL,GAAK+xV,GAALtoiB,MAAmB2C,EAC1B,CAEA,kBAAAkmiB,GACC,OAAOrghB,GAAM+tL,GAAKgyV,GAALvoiB,MACd,CACA,kBAAA6oiB,CAAmBlmiB,GAClB6lB,GAAM+tL,GAAKgyV,GAALvoiB,MAAsB2C,EAC7B,CAEA,YAAAmmiB,GACC,OAAOtghB,GAAM+tL,GAAKiyV,GAALxoiB,MACd,CACA,YAAA8oiB,CAAanmiB,GACZ6lB,GAAM+tL,GAAKiyV,GAALxoiB,MAAgB2C,KACvB,CACA24E,YAAYiid,GA/DZ75W,GAAA1jL,KAAAgoiB,QAAU,GAOVtkX,GAAA1jL,KAAAioiB,QAAK,GAOLvkX,GAAA1jL,KAAAkoiB,QAAO,GAOPxkX,GAAA1jL,KAAAmoiB,QAAO,GAOPzkX,GAAA1jL,KAAAooiB,QAAS,GAOT1kX,GAAA1jL,KAAAqoiB,QAAQ,GAOR3kX,GAAA1jL,KAAAsoiB,QAAY,GAOZ5kX,GAAA1jL,KAAAuoiB,QAAe,GAOf7kX,GAAA1jL,KAAAwoiB,QAAS,GAQRlyV,GAAK0xV,GAALhoiB,KAAkBwoB,GA1IpB,SAAmB+0gB,GAClB,MAAO,KACN,IACIp9Y,GADA6+Y,UAAEA,EAAWh9hB,SAASgV,SAAEA,EAAQq0T,WAAEA,IAAiBkyN;AAGvD,OADA9hB,GAAQ,IAAMt7X,EAAQnpI,EAASw+D,QAAUx+D,EAASmihB,QAAU,EAAI9tN,EAAW9qU,OAASy+hB,EAAUz+hB,QACvF4/I,EAET,CAPA,CA0IwCo9Y,KACtCjnV,GAAK2xV,GAALjoiB,KAAawoB,GAnIf,SAAgB+0gB,EAAW1pC,GAC1B,MAAO,KACN,IAAM7xf,SAAS+giB,iBAAEA,EAAgBx3N,WAAEA,GAAYyzN,UAAEA,GAAczB,GAC3D3oI,UAAEA,GAAci/F,EAChB98P,EAAO;AAwBX,OAvBA0kR,GAAQ,KACP,IAAIlmc,EAAO,GACPmnd,EAAa,EACbC,EAAU;AACd,IAAK,IAAIjigB,KAAQskgB,EAChBzpd,EAAK3tE,KAAK,CACT80hB,aACAC,UACAT,cAAe,EACfrhN,SAAUngT,EACVmigB,OAAQpD,GAAOL,GAAU1+f,IACzBhrB,SAAUyuhB,GAAazjgB,EAAM6wS,GAC7Br6G,UAAW6xU,EAAiBt/gB,KAAM9jB,GAAMi6hB,GAAWj6hB,EAAG+6B,MAEnDgigB,IAAe9nI,IAClB79J,EAAKnvP,KAAK2tE,GACVA,EAAO,GACPmnd,EAAa,IACXC,KAEDD,IAGG3lS,EAET,CA9BA,CAmIgCwmS,EAAWv9hB,QACzCs2M,GAAK4xV,GAALloiB,KAAewoB;AACf,IAAI0sgB,EAAM1sgB,GAtGZ,SAAuB+0gB,EAAW1pC,GACjC,MAAO,KACN,IAAIorC,eAAEA,GAAmB1B,GACrBxmS,KAAEA,GAAS88P,EACXnsc,EAAS,GACTghf,EAAW;AAOf,OANAjtB,GAAQ,KACP,IAAK,IAAI/xgB,KAASu1hB,EAAgB,IAAK,IAAI1pd,KAAQwhL,EAAUqlS,GAAQ1yhB,EAAMyb,SACtEzb,EAAMqsU,SAAQ2yN,EAAWA,EAASj2hB,OAAO8phB,GAAmB7yhB,EAAO6rE,KACjE7tB,EAASA,EAAOj1C,OAAO8phB,GAAmB7yhB,EAAO6rE;AACxDwnd,GAAoBr1e,KAEd,CACNA,SACAghf,YAGH,CAjBA,CAsGoCnL,EAAWv9hB,OAAQ0nD,EAASl/B,GAAU,IAAMA,GAAM0sgB,GAAKxte,QAASghf,EAAWlghB,GAAU,IAAMA,GAAM0sgB,GAAKwT;AACxIpyV,GAAK6xV,GAALnoiB,KAAewoB,GAAU,IAAMA,GAAMk/B,KACrC4uJ,GAAK8xV,GAALpoiB,KAAiBwoB,GAAU,IAAMA,GAAMkghB,KACvCpyV,GAAK+xV,GAALroiB,KAAgBwoB,GAvFlB,SAAwB+0gB,EAAW1pC,GAClC,MAAO,KACN,IAAI4wC,QAAEA,GAAYlH,GACdxmS,KAAEA,GAAS88P,EACX80C,EAAU;AACd,IAAK,IAAI,CAAGj/hB,KAAU+6hB,EAChB/6hB,GACL+xgB,GAAQ,KACP,IAAK,IAAIlmc,KAAQwhL,EAAM4xS,EAAUA,EAAQl2hB,OAAO8phB,GAAmB7yhB,EAAO6rE;AAG5E,OAAOozd,EAET,CAbA,CAuF2CpL,EAAWv9hB,QACpDA,KAAK+oiB,aAAe,IAAItR,GACxBnhV,GAAKgyV,GAALtoiB,KAAoBwoB,GAAU80gB,GAAKC,EAAW,mBAC9CjnV,GAAKiyV,GAALvoiB,KAAuBwoB,GAAU80gB,GAAKC,EAAW,sBACjDjnV,GAAKkyV,GAALxoiB,KAAiBwoB,GAAQ,MAC1B,IAIGwghB,GAAUxghB,GAAY;AAC1B,SAASyghB,GAAQ5D,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAI5jiB,EAAK8mB,GAAO88gB,EAAS,KAAM,IAAKvvN,EAASvtT,GAAO88gB,EAAS,SAAU,MAAWpJ,EAAW1zgB,GAAO88gB,EAAS,WAAY,OAAQ,GAAIiC,EAAgB/+gB,GAAO88gB,EAAS,gBAAiB,EAAG,IAAMA,EAAQ5qgB,MAAOy7C,EAAU3tD,GAAO88gB,EAAS,UAAW,EAAGrjY,IAAWvyJ,EAAW8Y,GAAO88gB,EAAS,WAAY,MAAWp0U,EAAY1oM,GAAO88gB,EAAS,YAAa,MAAW55P,EAAOljR,GAAO88gB,EAAS,OAAQ,EAAG,QAAS9B,EAAQh7gB,GAAO88gB,EAAS,QAAS,MAAW/B,EAAQ/6gB,GAAO88gB,EAAS,QAAS,MAAW4D,EAAiB1ghB,GAAO88gB,EAAS,iBAAkB,OAAQ,GACjiBpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW9zV,EAAQ/tD,GAAU,IAAMA,GAAM0sgB,GAAK3+c,OAAQiud,EAAWh8gB,GAAU,IAAMA,GAAM0sgB,GAAKsP,UAAW9jd,EAASl4D,GAAU,IAAMA,GAAM0sgB,GAAK9tQ,YAAY1mM,QAASigQ,EAAiBn4T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ2+U,gBAAiB/kB,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OACjTutO,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgB9uI,EAAO/yQ,GAAU,IAAMA,GAAM2ghB,GAAO5tQ,MACvF78J,EAAUl2G,GAAU,IAAMoxgB,GAAW0L,EAAQ5qgB,KAAMlS,GAAM+tD,KACzD6yd,EAAU5ghB,GAAU,IAAMowgB,GAAcpwgB,GAAMm4T,GAAiB,MAClE5K,OAAQA,IACRr7S,KAAMi/f,GAAY2L,EAAQ5qgB,MAC1BgkG,QAASl2G,GAAMk2G,GACfw9Z,SAAUA,MACPgN,IAAkB1ghB,GAAMg8gB,GAAU7jN,iBAClC/hK,EAAap2J,GAAU,IAAM2tD,IAAU,CAC1C3tD,GAAMozS,GAAO1+R,IACb1U,GAAMozS,GAAO9yK,WAAWw8Y,EAAQ5qgB,KAAKuzF,aACrCzlG,GAAMk2G,IAAYl2G,GAAMozS,GAAOrlP,MAC/B26I,KAAe1oM,GAAMozS,GAAO1qG,UAC5BxhN,KAAc8Y,GAAMozS,GAAOlsT,SAC3B8zhB,KAAWh7gB,GAAMozS,GAAO4nO,MACxBD,KAAW/6gB,GAAMozS,GAAO2nO;AAEzBrP,GAAQ,KACP2G,GAAWn5hB,IAAM,CAACsF,EAAGwK,MAEnBukU,OAAQA,IACRr7S,KAAM6sgB,IAAgBvgiB,EAAGwK,GACzB0qhB,SAAUA,IACVrzL,MAAOnnW,IACPgO,SAAUA;AAIb,IAAI25hB,EAAgB7ghB,GAAU,KAAO9Y,KAAc8Y,GAAMk4D,GAAW6vP,GAAY/nT,GAAMk4D,GAAQnxE,OAAOghU,EAAS/nT,GAAM+yQ,SAAc;AAClI,IAAI8tM,EAAM2/D,KACN9khB,EAAOsE,GAAQ6gd,GACfw8D,EAAcR,IACjB,IAAIv7J,EAAWthX;AAEfA,GADaA,GAAcshX,GACT,IAAMw7J,EAAQ7jd,QAAS,IAAMj5D,GAAM4ghB,IACrD5ghB,GAAS68gB,EAAUv7J,IAEhB29J,EAAapC,IAChB,IAAIM,EAAan9gB;AAEjBA,GADaA,GAAcm9gB,GACT,IAAMn9gB,GAAM4ghB,GAASva,SAAWrmgB,EAAQ,IAAMA,GAAM4ghB,GAAS9wgB,KAC/E9P,GAAS68gB,EAAUM;AAEpBn9gB,GAAKtE,EAAOyihB,IACPrB,EAAQ7jd,QAASkld,EAASd,GACzBc,EAASc,GAAY,KAE3Bj/gB,EAAQ6gd,GACR7gd,GAAY6gd,EAAMigE,GAAY5niB,EAAG4niB,GAAU,IAAM5niB,KACjD8mB,GAAS6gd,EAAK,IAAMi8D,EAAQ7jd,QAAU,KAAO62c,GAAY9vgB,GAAM4ghB,GAAS3nd,QAASj5D,GAAM4ghB,GAASva,UAChGrmgB,GAAkB,KACjBA,GAAY6gd,EAAK,EAAG7gd,GAAOA,GAAMo2J,KACjCp2J,GAAgB6gd,EAAK,OAAQ39L,OAE9BljR,GAAY,cAAe6gd,EAAK,YAAYk9D,GAC3C/9gB,GAAM6ghB,IAAgB12hB,MAAM3S,KAAMumiB,EACnC,GACA/9gB,GAAS68gB,EAAUh8D,GACnB7gd,GACD,CACAA,GAAW,CAAC;AAGZ,IAAI+ghB,GAAU/ghB,GAAY,kBACtBghhB,GAAWhhhB,GAAY;AAC3B,SAASihhB,GAAUpE,EAAUC,GAC5B98gB,EAAO88gB;AACP,IAAI5jiB,EAAK8mB,GAAO88gB,EAAS,KAAM,IAAKnvd,EAAU3tD,GAAO88gB,EAAS,UAAW,EAAGrjY,IAAW53J,EAASme,GAAO88gB,EAAS,SAAU,EAAGrjY,IACzHizX,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW03H,EAAgBv5gB,GAAU,IAAMA,GAAM0sgB,GAAK6M,eAAgBj7M,EAAYt+T,GAAU,IAAMA,GAAM0sgB,GAAKpuM,WAAY09M,EAAWh8gB,GAAU,IAAMA,GAAM0sgB,GAAKsP,UAAWntd,EAAO7uD,GAAU,IAAMA,GAAM0sgB,GAAK79c,MAAOorQ,EAAkBj6T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQygV,iBAAkBinN,EAAyBlhhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQgrU,sBAAuBK,EAAa7kT,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQqrU,YAAa0V,EAAev6T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ+gV,cAAekD,EAAaz9T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQikV,YAAajD,EAAgBx6T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQghV,eAAgBF,EAAkBt6T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ8gV,iBAAkBoD,EAAkB19T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQkkV,iBAAkBC,EAAkB39T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQmkV,iBAAkBwjN,EAAmBnhhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQorU,gBAAiBxR,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OACn9BlyT,EAAQ8e,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,OACtCyb,EAAUqD,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,MAAMyb,SAC9CykhB,EAAUphhB,GAAU,IAAMA,GAAM9e,GAAOqjU,iBAAmBC,GAAqBs4N,EAAQhrR,MAAM4hR,UAAYsC,GAAkBh2gB,GAAM9e,GAAQ8e,GAAMs+T,MAAgBt+T,GAAMkhhB,IAA2BlhhB,GAAM6kT,IACtMw8N,EAAWrhhB,GAAU,IAAMA,GAAM9e,GAAOyjU,WAAaC,GAAek4N,EAAQhrR,MAAM4hR,UAAYsC,GAAkBh2gB,GAAM9e,GAAQ8e,GAAMs+T,MAAgBt+T,GAAMmhhB,IAC1Jh8hB,EAAQ6a,GAAU,KAAM2G,OAvhEZk4B,EAuhEoBh9C,IAAS,CAC5C,mBAAoBme,GAAMohhB,GAC1BtkiB,MAASkjB,GAAMqhhB,KAxhET9hhB,OAAOoH,QAAQk4B,IAyhElBzjC,IAAK84B,GAAU,GAAGA,EAAM,MAAMA,EAAM,MAAMjqC,OAAO+V,GAAM9e,GAAOW,QAAQyN,KAAK;AA1hEhF,IAAiBuvC,IA2hEZu3H,EAAap2J,GAAU,KAC1B,IAAIo2J,EAAa,CAACw9W,GAAQ5zgB,GAAMrD,IAAYqD,GAAMozS,GAAOwgO,QAAU5zgB,GAAMozS,GAAOlyT;AAChF,GAAI8e,GAAM9e,GAAOqsU,OAAQ,CACnB6jN,GAAWF,GAAYN,GAAUkM,EAAQhrR,MAAMp7P,QAASsJ,GAAM9e,GAAOwV,QAAQ0/J,EAAWh3K,KAAK4gB,GAAMozS,GAAO6nO;AAC/G,IAAIqG,EAAO1Q,GAAUkM,EAAQhrR,MAAMn7P,KAC/B4qhB,EAAO3Q,GAAU5wgB,GAAM9e,GAAOyV;AAClC2qhB,EAAK5xZ,cAAc4xZ,EAAKp/a,gBAAkB,GAC1Cq/a,EAAK7xZ,cAAc6xZ,EAAKr/a,gBAAkB,GACrCkva,GAAWF,GAAYoQ,GAAOpQ,GAAYqQ,KAAQnrX,EAAWh3K,KAAK4gB,GAAMozS,GAAOwnO,WACrF,MACMxJ,GAAW0L,EAAQhrR,MAAMp7P,MAAOsJ,GAAM9e,GAAOwV,QAAQ0/J,EAAWh3K,KAAK4gB,GAAMozS,GAAO6nO,cAClF7J,GAAW0L,EAAQhrR,MAAMn7P,IAAKqJ,GAAM9e,GAAOyV,MAAMy/J,EAAWh3K,KAAK4gB,GAAMozS,GAAOwnO;AAEpF,OAAOjtd,IAAUyoG,EAAWnsK,OA1qD9B,SAA4BqwU,EAAiBp5U,EAAO2kY,GACnD,IAAIpnX,EAASvd,EAAMk1K;AAQnB,OAPIkkK,IACC/8O,GAAW+8O,KAAkBA,EAAkBA,EAAgB,CAClEp5U,MAAOkyhB,GAAsBlyhB,GAC7B2tE,KAAM+jd,GAAqB/sJ,MAE5BpnX,EAAS,IAAI9mB,GAAQ2iV,GAAmBA,EAAkB,CAACA,MAAqB77T,IAE1EA,CACR,CAVA,CA0qDwDuB,GAAMs6T,GAAkBt6T,GAAM9e,GAAQ8e,GAAM6uD,QAE/FkvR,EAAW/9U,GAAU,IA/rD1B,SAA6B8xP,EAAOmoE,EAAiBunN,GACpD,OAAOA,EAAet9e,YAAY4tN,EAAMp7P,MAAOujU,GAA2C,YAAxBnoE,EAAM5wQ,MAAMyb,UAA0Bm1P,EAAMgiR,aAAepC,GAASd,GAAU9+Q,EAAMp7P,OAAQo7P,EAAMn7P,KAAOm7P,EAAMp7P,MAClL,CAFA,CA+rDoDomhB,EAAQhrR,MAAO9xP,GAAMi6T,GAAkBj6T,GAAMu5gB,KAC5Ftgd,EAAUj5D,GAAU,IAAMowgB,GAAcpwgB,GAAMu6T,GAAe,MAChEr5U,MAAOkyhB,GAAsBpzgB,GAAM9e,IACnC68V,SAAU/9U,GAAM+9U,GAChBlvR,KAAM+jd,GAAqB5ygB,GAAM6uD,MAC9B,IAjsDL,SAAmCijM,EAAOisF,EAAU3qC,GACnD,IAAIlwD;AACJ,OAAQ4O,EAAM5wQ,MAAMyb,SACnB,IAAK,aACJumP,EAAW;AACX;AACD,IAAK,UACJA,EAAW4O,EAAM5wQ,MAAMqsU,OAAS,GAAK,CAAC2lN,GAAkBn1L,EAAUjsF,EAAOshD;AACzE;AACD,QAASlwD,EAAW,IAAI4O,EAAM5wQ,MAAMqsU,OAAS,GAAK,CAAC2lN,GAAkBn1L,EAAUjsF,EAAOshD,IAAS/nP,GAAc,KAAM+nP,EAAM0nO,WAAYhpR,EAAM5wQ,MAAM6zJ,QAElJ,MAAO,CAAEmuG,WACV,CAZA,CAisDqC45R,EAAQhrR,MAAO9xP,GAAM+9U,GAAW/9U,GAAMozS,IAASpzS,GAAMg8gB,GAAUzhN;AASnG,SAASknN,EAAc35gB,EAAInL,GAC1B,OAAO4gF,GAAWz1E,KAAQ6rgB,GAAYh3gB,GAAYorT,GAAYjgT,EAAG,CAChE5mB,MAAOkyhB,GAAsBpzgB,GAAM9e,IACnChI,GAAIA,IACJ6uU,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD,WACxB,CACX,CAfA68c,GAAQ,KACHnub,GAAWv9E,GAAMw6T,KAAiBx6T,GAAMw6T,EAANx6T,CAAqB,CAC1D9e,MAAOkyhB,GAAsBpzgB,GAAM9e,IACnC68V,SAAU/9U,GAAM+9U,GAChB7kW,GAAIA,IACJ21E,KAAM+jd,GAAqB5ygB,GAAM6uD;AAWnC,IAAI6yd,EAAU1hhB,GAAU,KAAO4zgB,GAAQ5zgB,GAAMrD,KAAa8khB,EAAczhhB,GAAMy9T,GAAaz9T,GAAMrD,UAAkB,GAC/GglhB,EAAY3hhB,GAAU,IAAMA,GAAM0hhB,IAAY7R,GAAS7vgB,GAAM0hhB,KAC7DE,EAAe5hhB,GAAU,IAAMyhhB,EAAczhhB,GAAM09T,GAAkB19T,GAAMrD,KAC3EklhB,EAAe7hhB,GAAU,IAAMyhhB,EAAczhhB,GAAM29T,GAAkB39T,GAAMrD;AAC/E,IAAIgkd,EAAUqgE;AACd,CACC,MAAMc,EAAejF,IACpB,IAAIh8D,EAAMkgE;AAEV/ghB,GADWA,GAAQ6gd,GACH,IAAM7gd,GAAMi5D,GAASotc,SAAWrmgB,EAAQ,IAAMA,GAAMi5D,GAASnpD,KAC7E9P,EAAQ6gd,GACR7gd,GAAS6gd,EAAK,IAAMivD,GAAY9vgB,GAAMi5D,GAASA,QAASj5D,GAAMi5D,GAASotc,UACvErmgB,GAAkB,IAAMA,GAAY6gd,EAAK,EAAG7gd,GAAOA,GAAMozS,GAAOynO,aAChE76gB,GAAS68gB,EAAUh8D;AAEpB,IAAIu8D,EAASp9gB,GAAQ2gd,GACjB08D,EAAcR,IACjB,IAAIv7J,EAAWthX;AAEfA,GADaA,GAAcshX,GACT,IAAMw7J,EAAQ/3hB,KAAM,IAAM+8hB,EAAa,IAAM9hhB,GAAMohhB,GAAU,IAAMphhB,GAAMqhhB,IAC3FrhhB,GAAS68gB,EAAUv7J,IAEhB29J,EAAapC,IAChBiF,EAAYjF;AAEb78gB,GAAKo9gB,EAASe,IACTrB,EAAQ/3hB,KAAMo5hB,EAASd,GACtBc,EAASc,GAAY,KAE3Bj/gB,EAAQ2gd,GACR3gd,GAAY2gd,EAAUmgE,GAAY5niB,EAAG4niB,GAAU,IAAM5niB,IACtD,CACA8mB,GAAkB,KACjBA,GAAY2gd,EAAS,EAAG3gd,GAAOA,GAAMo2J,KACrCp2J,GAAY2gd,EAAS3gd,GAAM7a,IAC3B6a,GAAgB2gd,EAAS,OAAQ3gd,GAAM0hhB,GAAW,cAAgB,GAClE1hhB,GAAgB2gd,EAAS,WAAY3gd,GAAM0hhB,GAAW,OAAS,KAEhE1hhB,GAAY,QAAS2gd,EAAS,YAAYo9D,GACzC/9gB,GAAM0hhB,IAAUv3hB,MAAM3S,KAAMumiB,EAC7B,GACA/9gB,GAAY,UAAW2gd,EAAS,YAAYo9D,GAC3C/9gB,GAAM2hhB,IAAYx3hB,MAAM3S,KAAMumiB,EAC/B,GACA/9gB,GAAQ,aAAc2gd,EAAS,YAAYo9D,GAC1C/9gB,GAAM4hhB,IAAez3hB,MAAM3S,KAAMumiB,EAClC,GACA/9gB,GAAQ,aAAc2gd,EAAS,YAAYo9D,GAC1C/9gB,GAAM6hhB,IAAe13hB,MAAM3S,KAAMumiB,EAClC,GACA/9gB,GAAY,cAAe2gd,EAAS,YAAYo9D,GAC/CjB,EAAQ+D,eAAe12hB,MAAM3S,KAAMumiB,EACpC,GACA/9gB,GAAS68gB,EAAUl8D,GACnB3gd,GACD,CACAA,GAAW,CACV,QACA,UACA;AAID,IAAI+hhB,GAAU/hhB,GAAY;AAC1B,SAASgihB,GAAQnF,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAInogB,EAAU3U,GAAO88gB,EAAS,UAAW,MAAUznM,EAAUr1U,GAAO88gB,EAAS,UAAW,EAAG,GAAIn8U,EAAa3gM,GAAO88gB,EAAS,aAAc,MAAW51hB,EAAW8Y,GAAO88gB,EAAS,WAAY,MAAWp0U,EAAY1oM,GAAO88gB,EAAS,YAAa,MAAWmF,EAAUjihB,GAAO88gB,EAAS,UAAW,MAC5RpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW9zV,EAAQ/tD,GAAU,IAAMA,GAAM0sgB,GAAK3+c,OAAQqlP,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T;AACtI,IAAIytK,EAAMkhE;AACV,IAAIlgiB;AAEJme,GADWA,GAAQ6gd,GACH,IAAMi8D,EAAQ9phB,UAC9BgN,EAAQ6gd,GACR7gd,GAAmBq/gB,IAClBr/gB,GAAY6gd,EAAK,EAAGw+D,GACpBr/gB,GAAgB6gd,EAAK,OAAQlgR,IAAe,KAAO,gBACnD3gM,GAAgB6gd,EAAK,eAAgBlgR,KAAgB00I,KAAa,EAAI,KAAOA,KAC7Er1U,GAAgB6gd,EAAK,gBAAiBlgR,IAAe,KAAOm8U,EAAQzrD,UACpErxd,GAAgB6gd,EAAK,cAAelgR,IAAe,OAAS,MAC5D9+M,EAASme,GAAY6gd,EAAK,GAAIh/d,EAAQ,CAAE,sBAAuBogiB,IAAY5sM,SAAiB,KAC1F,CAAC,IAAMr1U,GAAO,CAChB88gB,EAAQ90hB,WAAagY,GAAMozS,GAAOsnO,QAClC/lgB,KAAa3U,GAAMozS,GAAO9yK,WAAWw8Y,EAAQ5qgB,KAAKuzF,aAClD9wF,KAAay8f,GAAW0L,EAAQ5qgB,KAAMlS,GAAM+tD,KAAW/tD,GAAMozS,GAAOrlP,MACpE26I,KAAe1oM,GAAMozS,GAAO1qG,UAC5BxhN,KAAc8Y,GAAMozS,GAAOlsT,aAE5B8Y,GAAS68gB,EAAUh8D,GACnB7gd,GACD,CAGA,IAAIkihB,GAAUlihB,GAAY;AAC1B,SAAS6lV,GAAUg3L,EAAUC,GAC5B98gB,EAAO88gB;AACP,IAAIqF,EAAWnihB,GAAO88gB,EAAS,WAAY,EAAG,IAC1CpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW23H,EAAgBx5gB,GAAU,IAAMA,GAAM0sgB,GAAK8M,eAAgBC,EAAkBz5gB,GAAU,IAAMA,GAAM0sgB,GAAK+M;AACxJ,IAAIz5hB,EAAOkiiB;AACXlihB,GAAShgB,EAAM,IAAM8vhB,GAAY9vgB,GAAMw5gB,GAAetof,OAAO4rf,EAAQ5qgB,QACrElS,GAAkB,CAACq/gB,EAAI+C,KACtBpihB,GAAgBhgB,EAAM,WAAYq/hB,GAClCr/gB,GAAgBhgB,EAAM,aAAc,GAAGmiiB,KAAc,KAAKC,GAAM,OAC9D,CAAC,IAAMxlP,GAAYkgP,EAAQ5qgB,KAAM,IAAK,IAAMlS,GAAMy5gB,GAAiBvof,OAAO4rf,EAAQ5qgB,QACrFlS,GAAS68gB,EAAU78hB,GACnBggB,GACD,CAGA,SAASqihB,GAAkBxF,EAAUC,GACpC98gB,EAAO88gB;AACP,IAAI5jiB,EAAK8mB,GAAO88gB,EAAS,KAAM,IAC3BpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW+3H,EAAW55gB,GAAU,IAAMA,GAAM0sgB,GAAKkN,UAAW1hd,EAASl4D,GAAU,IAAMA,GAAM0sgB,GAAK9tQ,YAAY1mM,QAASoqd,EAAUtihB,GAAU,IAAMA,GAAM0sgB,GAAK9tQ,YAAY2jR,SACvM5B,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgB9uI,EAAO/yQ,GAAU,IAAMA,GAAM2ghB,GAAO5tQ,MACvF7xR,EAAQ8e,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,OACtCyb,EAAUqD,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,MAAMyb,SAC9CgxD,EAAU3tD,GAAU,IAAOo2J,GAAep2J,GAAM45gB,EAAN55gB,CAAgBo2J,EAAYp2J,GAAM9e,KAI5E2/hB,EAAgB7ghB,GAAU,IAAO4zgB,GAAQ5zgB,GAAMrD,KAAcg3gB,GAAY3zgB,GAAMrD,SAAmD,EAHtI,SAA2Bzb,GAC1B,OAAO8e,GAAMk4D,IAASxuE,UAAUxI,GAAU6mU,GAAY/nT,GAAMk4D,GAAQ04E,KAAK1vJ,EAAO6mU,EAAS+0N,EAAQ0F,UAAW1F,EAAQ2F,YAAazihB,GAAM+yQ,IAAS/yQ,GAAMk4D,IAASwqd,QAChK,CAFA,CAGiH1ihB,GAAM9e;AACvH,CACC,MAAM6D,EAAOA,CAAC83hB,EAAUiF,EAAc9hhB,KACrC,IAAIm9gB,EAAan9gB,KACbtE,EAAOsE,GAAcm9gB,GACrBE,EAAcR,IACjB,IAAI8F,EAAa3ihB;AAEjBA,GADaA,GAAc2ihB,GACP,IAAM3ihB,GAAMsihB,GAAU,CAACzF,EAAU+F,KACpDA,EAAU/F,EAAU,CACnB,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,QAAA56P,GACC,OAAO4lhB,EAAQ5lhB,IAChB,EACA,aAAAsrhB,GACC,OAAO1F,EAAQ0F,SAChB,EACA,eAAAC,GACC,OAAO3F,EAAQ2F,WAChB,EACAzvhB,SAAUA,CAAC6phB,EAAUgG,KACpB,IAAIC,EAAa9ihB;AAEjBA,GADaA,GAAc8ihB,GACThB,GAClB9hhB,GAAS68gB,EAAUiG,IAEpBlX,QAAS,CAAEx/gB,gBAGb4T,GAAS68gB,EAAU8F,IAEhB1D,EAAapC,IAChB,IAAIkG,EAAa/ihB;AAEjBA,GADaA,GAAc+ihB,GACTjB,GAClB9hhB,GAAS68gB,EAAUkG;AAEpB/ihB,GAAKtE,EAAOyihB,IACPn+gB,GAAMsihB,GAAUnE,EAASd,GACxBc,EAASc,GAAY,KAE3Bj/gB,GAAS68gB,EAAUM;AAEpB8D,GAAUpE,EAAU,CACnB,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,WAAAnkM,GACC,OAAO3tD,GAAM2tD,EACd,EACA,UAAA9rE,GACC,OAAOi7hB,EAAQj7hB,MAChB,EACA,iBAAAg/hB,GACC,OAAO7ghB,GAAM6ghB,EACd,EACA,MAAA3niB,GACC,OAAOA,GACR,EACA,MAAAA,CAAO4niB,GACN5niB,EAAG4niB,EACJ,EACA/7hB,OACA6mhB,QAAS,CAAE7mhB,UAEb,CACAib,GACD,CAGA,IAAIgjhB,GAAUhjhB,GAAY,oBACtBijhB,GAAWjjhB,GAAY,gEACvBkjhB,GAAWljhB,GAAY,iDAAkD;AAoH7E,SAASmjhB,GAAQtG,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAIsG,EAAUpjhB,GAAO88gB,EAAS,UAAW,MACrCpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWzmF,EAAep7T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ4hV,cAAei/M,EAAWr6gB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ6giB,UAC3JsG,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgBzV,EAAYpsY,GAAU,IAAMA,GAAM2ghB,GAAOv0I,WAAY6zI,EAASjghB,GAAU,IAAMA,GAAM2ghB,GAAOV,QAASM,EAAevghB,GAAU,IAAMA,GAAM2ghB,GAAOJ,cAAeD,EAAWtghB,GAAU,IAAMA,GAAM2ghB,GAAOL,UAC1PpniB,EAAK8mB,QAAa,GAClBsiP,EAAStiP,GAAQ,GACjBsvU,EAAStvU,OACT9e,EAAQ8e,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,OACtCyb,EAAUqD,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,MAAMyb,SAC9C0jV,EAAQrgV,GAAU,IAAMA,GAAMighB,GAAQjthB,SAAS48I,MAAMktY,EAAQhrR,MAAMqiR,QAAU,GAAKn0gB,GAAMosY,GAAa0wI,EAAQhrR,MAAMoiR,WAAa;AACpIl0gB,GAAc,KACRojhB,KAAWpjhB,GAAMsiP,EAAQxpP,GAAOkH,GAAMqgV,GAAOrmL,oBAAsB;AAEzE,IAAIn4K,EAASme,GAAU,IAAO7a,IAG7B,GAFAA,EAAM,eAAiB,GAAG23hB,EAAQhrR,MAAMoiR,qBAAqB4I,EAAQhrR,MAAM1tI,MAAMrsI,SACjFoN,EAAM,YAAc23hB,EAAQhrR,MAAMqiR,SAC7BP,GAAQ5zgB,GAAMrD,IAAW,CAC7B,IAAI0lP,EAAY+gS,IAAY,EAAIpjhB,GAAMsiP;AACtC,GAAItiP,GAAM9e,GAAOmiiB,QAAS,CACzB,IAAKA,EAASC,GAAYtjhB,GAAM9e,GAAOmiiB;AACnCA,EAAUhhS,GAAay6R,EAAQhrR,MAAMqiR,UAAYmP,IAAUjhS,EAAYghS,EAC5E,CACAl+hB,EAAM,sBAAwB,GAAGk9P,KAClC,CAEA,OADIriP,GAAMsvU,KAASnqV,EAAkB8N,WAAI,UAClC9N;AA8BR,IAAIu5hB,EAAY,CACf7hX,WA7BD,WACC78J,GAAMsiP,EAAQoyR,GAAkBoI,EAAQhrR,MAAOh5P,GAAOkH,GAAM9mB,IAAM4f,GAAOkH,GAAMqgV,GAAOrmL,oBAAsB,EAAGh6J,GAAMq6gB,OACtH,EA4BC56hB,KA3BD,WACC,QAAIugB,GAAMo7T,GAAwB,CACjC,IAAI7iV,EAAIugB,GAAOkH,GAAMqgV,IAcvB,SAAoBA,GACnB,IAAI9nW,EAAI;AACR,IAAK,IAAIT,EAAI,EAAGA,EAAIgliB,EAAQhrR,MAAM1tI,MAAMrsI,SACvCQ,EAAI+d,GAAI/d,EAAGugB,GAAOunV,EAAMh3D,mBACxBg3D,EAAQA,EAAM1yM,sBAFmC71J,GAKlD,OAAOS,CACR,CARA,CAd4CynB,GAAMqgV;AAEhD,GADArgV,GAAMsvU,EAAQwtM,EAAQhrR,MAAMxsQ,OAAS/M,GACjCynB,GAAMsvU,GAAS,IAAK,IAAIp9T,KAAQ4qgB,EAAQhrR,MAAM1tI,MAAO,CACxD,IAAI3zG,EAAMyB,EAAKmgD;AACf,GAAIryD,GAAMughB,GAAcn4gB,IAAIqI,GAAM,CACjC,IAAIyuB,EAASl/B,GAAMughB,GAAcz8gB,IAAI2M;AAChCyuB,EAAO3iD,SAASugiB,EAAQhrR,QAAQ9xP,GAAMughB,GAAcl8gB,IAAIoM,EAAK,IAAIyuB,EAAQ49e,EAAQhrR,OACvF,MAAO9xP,GAAMughB,GAAcl8gB,IAAIoM,EAAK,CAACqsgB,EAAQhrR,OAC9C,CACD,MACC9xP,GAAMsvU,MACFtvU,GAAMughB,GAAc1qhB,MAAMmK,GAAMughB,GAAcvyd,OAEpD;AAcA,CACC,IAAIqxd,EAAKr/gB,GAAU,IAAMojhB,KAAapjhB,GAAMsghB,GAAUjuN,UAClD+vN,EAAKpihB,GAAU,IAAM,CAACA,GAAMsiP,GAASw6R,EAAQhrR,MAAMqiR;AACvDkO,GAAkBxF,EAAU,CAC3B,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,UAAAjwQ,GACC,OAAOme,GAAMne,EACd,EACAqV,KAAM,IACN,aAAAsrhB,GACC,OAAOxihB,GAAMq/gB,EACd,EACA,eAAAoD,GACC,OAAOzihB,GAAMoihB,EACd,EACA,MAAAlpiB,GACC,OAAO8mB,GAAM9mB,EACd,EACA,MAAAA,CAAO4niB,GACN9ghB,GAAM9mB,EAAI4niB,KACX,GAEF,CACA,OAAO9ghB,EAAM0+gB,EACd,CA7FA1+gB,GAAW,CACV,QACA,UACA;AA6FD,IAAIujhB,GAAUvjhB,GAAY;AAmG1BA,GAAW,CAAC,QAAS;AAGrB,IAAIwjhB,GAAUxjhB,GAAY,gDACtByjhB,GAAWzjhB,GAAY;AAC3B,SAAS0jhB,GAAO7G,EAAUC,GACzB98gB,EAAO88gB;AACP,IAAI/H,EAAYlzH,EAAW,SACvBwpF,EAAY,IAAIk0C,GAAYxK;AAChC33G,EAAW,aAAciuE;AACzB,IAAImuC,EAAgBx5gB,GAAU,IAAM+0gB,EAAUyE,eAAgBC,EAAkBz5gB,GAAU,IAAM+0gB,EAAU0E,iBAAkBr+M,EAAep7T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ4hV,cAAei/M,EAAWr6gB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ6giB,UAAWjnO,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OAC1R7kE,EAAOvuO,GAAU,IAAMqre,EAAU98P,MAAOrvM,EAASl/B,GAAU,IAAMqre,EAAUnsc,QAASghf,EAAWlghB,GAAU,IAAMqre,EAAU60C,UAAWC,EAAUnghB,GAAU,IAAMqre,EAAU80C,SAAUI,EAAevghB,GAAU,IAAMqre,EAAUk1C,cAAeD,EAAWtghB,GAAU,IAAMqre,EAAUi1C,UAC/Q9M,EAAO;AACX,SAAS32W,IACR02W,GAAcC,EAAMxzgB,GAAMk/B,IAC1Bl/B,GAAMughB,GAAcvyd,QACpB6nF,KAAO5qF,KAAKxrE,EACb,CACA,SAASA,IACRugB,GAAMughB,GAAc1qhB,KACpB29gB,EAAKxhhB,QAASykJ,GAAQA,GAAKh3J,OAC5B,CACAugB,GAAc,KACbA,GAAMq6gB,GACNx9W,MAED78J,GAAcvgB;AACd,IAAI6hY,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrBg8J,EAAgBT,IACnB,IAAIr/L,EAAUimM;AACd,IAAI5hiB;AACJ,IAAIiR,EAASkN,GAAQw9U,GACjBqjI,EAAM7gd,GAAQlN;AAClBkN,GAAO6gd,EAAK,GAAI,IAAM7gd,GAAMuuO,GAAM,GAAIvuO,GAAS,CAAC68gB,EAAU8G,EAAQ7riB,KACjE,IAAIu6U,EAAWA,IAAMryT,GAAM2jhB,GAAQtxN;AACnC,IAAI2sN,EAAQwE;AACZxjhB,GAAgBg/gB,EAAO,gBAAiB,EAAIlniB;AAC5C,IAAIwxV,EAAOtpU,GAAQg/gB;AACnBh/gB,GAASspU,EAAM,IAAMwmM,GAAY9vgB,GAAMw5gB,GAAetof,OAAOmhS,OAC7DryT,EAAQg/gB,GACRh/gB,GAAkB,CAACq/gB,EAAI+C,KACtBpihB,GAAYg/gB,EAAO,EAAGK,GACtBr/gB,GAAgBspU,EAAM,aAAc84M,IAClC,CAAC,IAAMpihB,GAAO,CAACA,GAAMozS,GAAOsnO,QAAS16gB,GAAMozS,GAAO9yK,WAAW+xL,IAAW5sN,eAAgB,IAAMzlG,GAAMy5gB,GAAiBvof,OAAOmhS,OAC/HryT,GAAS68gB,EAAUmC,KAEpBh/gB,EAAQ6gd,GACR7gd,EAAQlN;AACR,IAAI8whB,EAAQ5jhB,GAAUlN,EAAQ,GAC1B+whB,EAAQ7jhB,GAAQ4jhB;AACpB5jhB,GAAO6jhB,EAAO,GAAI,IAAM7jhB,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,EAAMj1E,KAC9D,IAAIqliB,EAAan9gB;AAEjBA,GADaA,GAAcm9gB,GACZ,GAAI,IAAMn9gB,GAAM+sD,GAAO/sD,GAAS,CAAC68gB,EAAUnogB,EAAKyoD,KAC9D,CACC,IAAIkid,EAAKr/gB,GAAU,IAAMm9D,EAAI,IAAMplF,GAAOioB,GAAM+sD,KAC5Cq1d,EAAKpihB,GAAU,IAAMloB,EAAI,IAAMC,GAAOioB,GAAMuuO;CAxWrD,SAAesuS,EAAUC,GACxB98gB,EAAO88gB;AACP,IAAI/H,EAAYlzH,EAAW,SACvBwpF,EAAYxpF,EAAW;AAC3B7hZ,GAAU,IAAM+0gB,EAAUx+H;AAC1B,IAAIylI,EAAWh8gB,GAAU,IAAM+0gB,EAAUiH,UAAW9pgB,EAAOlS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ04B,MAAOi8C,EAAWnuD,GAAU,IAAM+0gB,EAAUv7hB,QAAQ20E,UAAWyuQ,EAAkB58T,GAAU,IAAM+0gB,EAAUv7hB,QAAQojV,iBAAkBxpB,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OAAQklB,EAAct4T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ8+U,aAAcE,EAAoBx4T,GAAU,IAAM+0gB,EAAUv7hB,QAAQg/U,mBACpY+nN,EAAevghB,GAAU,IAAMqre,EAAUk1C,cAAeH,EAAcpghB,GAAU,IAAMqre,EAAU+0C,aAChG/tN,EAAWryT,GAAU,IAAM88gB,EAAQpogB,IAAI29S,UAAWnrU,EAAW8Y,GAAU,IAAM88gB,EAAQpogB,IAAIxtB,UAAWwhN,EAAY1oM,GAAU,IAAM88gB,EAAQpogB,IAAIg0L,WAC5Io7U,EAAa9jhB,GAAU,IAAMA,GAAMqyT,GAAUxwN,gBAAkB7hG,GAAMkS,GAAM2vF,eAC3El0C,EAAU3tD,GAAU,IAAOo2J,GAAe,IAAIA,EAAYp2J,GAAM8jhB,IAAe9jhB,GAAMozS,GAAO0wO,aAC5F1qL,EAAiBp5V,GAAU,IAAMA,GAAMs4T,IAAgBt4T,GAAMqyT,GAAU5sN,eAAiBzlG,GAAMmuD,GAAY,EAAI,IAC9Ggtd,EAAan7gB,GAAU,IAAMA,GAAMo5V,GAAkB44K,GAAwBF,GAAc9xgB,GAAMqyT,GAAWryT,GAAMmuD,IAAYnuD,GAAMqyT,GAAWryT,GAAMw4T,GAAoBx4T,GAAMg8gB,GAAUxjN,mBAAqB,CAAC,GAC/MurN,EAAkB/jhB,GAAU,IAAMA,GAAMughB,GAAcz8gB,IAAI9D,GAAMqyT,GAAUhgQ,YAC1E2xd,EAAWhkhB,GAAU,KACxB,IAAKA,GAAM+jhB,GAAkB,MAAO,CAAC;AACrC,IAAIzlb,EAAMt+F,GAAM+jhB,GAAiBhsiB,OAC7B8C,EAAO,IAAMyjH,EAAM;AACvB,OAAO8xa,GAAcpwgB,GAAM48T,GAAkB,MAC5Ct+N,MACAzjH,SACGA,EAAMmlB,GAAMg8gB,GAAUp/M;AAE3B,SAASqnN,IACR54C,EAAUi1C,SAAWxD,EAAQpogB,GAC9B,CACA,CACC,MAAMukD,EAAUA,CAAC4jd,EAAU+D,EAAU5ghB,KACpC,IAAIm9gB,EAAa+F,KACbriE,EAAM7gd,GAAcm9gB,GACpBn9hB,EAAOggB,GAAQ6gd;AAEnB7gd,GADWA,GAAQhgB,GACH,IAAM4giB,IAAUva,SAAWrmgB,EAAQ,IAAM4ghB,IAAU9wgB,KACnE9P,EAAQhgB,GACRggB,GAAShgB,EAAM,IAAM8vhB,GAAY8Q,IAAU3nd,QAAS2nd,IAAUva;AAC9D,IAAI+W,EAASp9gB,GAAUhgB,EAAM,GACzBq9hB,EAAcR,IACjB,IAAIvzM,EAAO05M;AAEXhjhB,GADaA,GAAQspU,GACH,IAAMtpU,GAAMm7gB,GAAY9U,SAAWrmgB,EAAQ,IAAMA,GAAMm7gB,GAAYrrgB,KACrF9P,EAAQspU,GACRtpU,GAASspU,EAAM,IAAMwmM,GAAY9vgB,GAAMm7gB,GAAYlid,QAASj5D,GAAMm7gB,GAAY9U,UAC9ErmgB,GAAkB,IAAMA,GAAYspU,EAAM,EAAGtpU,GAAMozS,GAAO+nO,aAC1Dn7gB,GAAS68gB,EAAUvzM;AAEpBtpU,GAAKo9gB,EAASe,IACTn+gB,GAAMo5V,IAAiB+kL,EAASd,KAErCr9gB,EAAQ6gd;AACR,IAAIm+D,EAAQh/gB,GAAU6gd,EAAK,GACvBqjE,EAASlkhB,GAAQg/gB,GACjB1B,EAAgBT,IACnB,IAAIvkiB,EAAI2qiB,KACJkB,EAAgBnkhB,GAAU,IAAMnhB,GAAgBoliB,IAChDG,EAAkBpkhB,GAAU,IAAM6vgB,GAASoU,IAC3CI,EAAkBrkhB,GAAUnhB;AAEhCmhB,GADaA,GAAQ1nB,GACH,IAAM0nB,GAAMgkhB,GAAU3d,SAAWrmgB,EAAQ,IAAMA,GAAMgkhB,GAAUl0gB,KACjF9P,EAAQ1nB,GACR0nB,GAAS1nB,EAAG,IAAMw3hB,GAAY9vgB,GAAMgkhB,GAAU/qd,QAASj5D,GAAMgkhB,GAAU3d,UACvErmgB,GAAY,QAAS1nB,EAAG,YAAYyliB,GACnC/9gB,GAAMmkhB,IAAgBh6hB,MAAM3S,KAAMumiB,EACnC,GACA/9gB,GAAY,UAAW1nB,EAAG,YAAYyliB,GACrC/9gB,GAAMokhB,IAAkBj6hB,MAAM3S,KAAMumiB,EACrC,GACA/9gB,GAAY,cAAe1nB,EAAG,YAAYyliB,GACzC/9gB,GAAMqkhB,IAAkBl6hB,MAAM3S,KAAMumiB,EACrC,GACA/9gB,GAAS68gB,EAAUvkiB;AAEpB0nB,GAAKkkhB,EAAS/F,IACTn+gB,GAAM+jhB,IAAkB5F,EAASb,KAEtCt9gB,EAAQg/gB,GACRh/gB,GAAmBq/gB,IAClBr/gB,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAOunO,SACjC36gB,GAAgBhgB,EAAM,WAAYq/hB,GAClCr/gB,GAAYg/gB,EAAO,EAAGh/gB,GAAMozS,GAAOkxO,UACjC,CAAC,IAAM1nP,GAAY58R,GAAMqyT,GAAW,MACvCryT,GAAS68gB,EAAUM;AAEpBsD,GAAQ5D,EAAU,CACjB,QAAA3qgB,GACC,OAAOlS,GAAMqyT,EACd,EACA9E,UACA,WAAA5/P,GACC,OAAO3tD,GAAM2tD,EACd,EACA,YAAAzmE,GACC,OAAO8Y,GAAM9Y,EACd,EACA,aAAAwhN,GACC,OAAO1oM,GAAM0oM,EACd,EACA,SAAAsyU,GACC,OAAO8B,EAAQ9B,KAChB,EACA,SAAAD,GACC,OAAO+B,EAAQ/B,KAChB,EACA2F,eAAgBA,IAAM1ghB,GAAMoghB,GAAalvf,OAAOlxB,GAAMqyT,IACtDp5P,UACA2yc,QAAS,CAAE3yc,aAEb,CACAj5D,GACD,CA3GA,CAyWW68gB,EAAU,CACf,OAAAnogB,GACC,OAAO1U,GAAM0U,EACd,EACA,SAAAsmgB,GACC,OAAOh7gB,GAAMq/gB,EACd,EACA,SAAAtE,GACC,OAAO/6gB,GAAMoihB,EACd,GAEF,IAEDpihB,GAAS68gB,EAAUM,KAEpBn9gB,EAAQ6jhB,GACR7jhB,GAAY6jhB,EAAQ/C,GAAYz1C,EAAU40C,OAASa,EAAS,IAAMz1C,GAAW40C;AAC7E,IAAIsE,EAAQvkhB,GAAU6jhB,EAAO,GACzBW,EAASxkhB,GAAQukhB;AACrBvkhB,GAAOwkhB,EAAQ,GAAI,IAAMxkhB,GAAMk/B,GAAU4yN,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,EAAOh6Q,KAC9EkoB,GAAYmjhB,GAAQtG,EAAU,CAAE,SAAA/qR,GAC/B,OAAO9xP,GAAM8xP,EACd,IAAM,CAACgvR,EAAShpiB,IAAM07hB,EAAK17hB,GAAKgpiB,EAAUhpiB,GAAM07hB,IAAO17hB,GAAI,IAAM,CAACkoB,GAAMloB;AAEzE,IAAIosiB,EAASlkhB,GAAUwkhB,EAAQ;AAC/BxkhB,GAAOkkhB,EAAQ,GAAI,IAAMlkhB,GAAMkghB,GAAYpuR,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,KACzEqxR,GAAQtG,EAAU,CAAE,SAAA/qR,GACnB,OAAO9xP,GAAM8xP,EACd,MAGD9xP,GADaA,GAAUkkhB,EAAQ,GAChB,GAAI,IAAMlkhB,GAAMmghB,GAAUnghB,GAAS,CAAC68gB,EAAU/qR,KAC5DqxR,GAAQtG,EAAU,CAAE,SAAA/qR,GACnB,OAAO9xP,GAAM8xP,EACd,MAED9xP,EAAQukhB,GACRvkhB,EAAQ4jhB;AACR,IAAIa,EAASzkhB,GAAU4jhB,EAAO,GAC1BvG,EAAcR,KAnMpB,SAAeA,GACd78gB,EAmMkB,CAAC,GAnMZ88gB;AACP,IAAIzxC,EAAYxpF,EAAW,cACvB6qH,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWjjJ,EAAc5+P,GAAU,IAAMA,GAAM0sgB,GAAK9tQ,aAAc0oC,EAAatnS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ8tT,YAAa8L,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OAC3Mg5F,EAAYpsY,GAAU,IAAMqre,EAAUj/F,WAAYltW,EAASl/B,GAAU,IAAMqre,EAAUnsc,QAAS+gf,EAASjghB,GAAU,IAAMqre,EAAU40C,QAASI,EAAiBrghB,GAAU,IAAMqre,EAAUg1C,gBAAiBC,EAAWtghB,GAAU,IAAMqre,EAAUi1C,UAC3OpniB,EAAK8mB,QAAa,GAClB7a,EAAQ6a,GAAQ,IAChBk0gB,EAAal0gB,GAAU,IAAMA,GAAMsghB,GAAUpM,YAAaC,EAAUn0gB,GAAU,IAAMA,GAAMsghB,GAAUnM,SAAU9hN,EAAWryT,GAAU,IAAMA,GAAMsghB,GAAUjuN,UAAWgiN,EAASr0gB,GAAU,IAAMA,GAAMsghB,GAAUjM,QAC7MqQ,EAAc1khB,GAAU,KAC3B,IAAIvB,EAAS;AACb,IAAK,IAAIqzP,KAAS9xP,GAAMk/B,GAAa4yN,EAAMqiR,UAAYn0gB,GAAMm0gB,IAAYriR,EAAMoiR,YAAcl0gB,GAAMk0gB,IAAepiR,EAAMoiR,WAAapiR,EAAM1tI,MAAMrsI,OAASioB,GAAMk0gB,IAAaz1gB,EAAOrf,KAAK+rE,GAAO,CAAC,EAAG2mM,EAAO+hR,GAAiB/hR,EAAM5wQ,MAAO8e,GAAMqyT,GAAWryT,GAAMq0gB;AAEhQ,OADA51gB,EAAOkL,KAAK,CAACrxB,EAAGma,IAAMna,EAAE+M,IAAMoN,EAAEpN,KACzBoZ;AASR,SAAS2E,IACR,IAKIhe,EAWAC,EAhBAg7V,EAAQrgV,GAAMighB,GAAQjthB,SAAS48I,MAAM5vI,GAAMm0gB,GAAW,GAAKn0gB,GAAMosY,GAAapsY,GAAMk0gB,GAAc,GAClGyQ,EAAY9rhB,GAAKmH,GAAM9mB,IACvB0riB,EAAU/rhB,GAAKwnV,GACfwkM,EAAWhshB,GAAKmH,GAAMighB;AAG1B,GAFAjghB,GAAM7a,EAAO,IAETw/hB,EAAUp/hB,OAASs/hB,EAASt/hB,MAAO,CACtCH,EAAOy/hB,EAASz/hB,KAAOw/hB,EAAQx/hB;AAC/B,IAAII,EAAQo/hB,EAAQp/hB,MAAQq/hB,EAASr/hB;AACrCwa,GAAM7a,EAAO6a,GAAM7a,GAAS,oBAAoBK,OACjD,MACCJ,GAAQw/hB,EAAQr/hB,MAAQo/hB,EAAUp/hB,OAAS,EACvCq/hB,EAAQx/hB,KAAOA,EAAOy/hB,EAASz/hB,KAAMA,EAAOy/hB,EAASz/hB,KAAOw/hB,EAAQx/hB,KAC/Dw/hB,EAAQx/hB,KAAOA,EAAOu/hB,EAAUp/hB,MAAQs/hB,EAASr/hB,QAAOJ,EAAOy/hB,EAASr/hB,MAAQo/hB,EAAQx/hB,KAAOu/hB,EAAUp/hB;AAEnHya,GAAM7a,EAAO6a,GAAM7a,GAAS,sBAAsBC,QAE9Cu/hB,EAAU7rhB,QAAU+rhB,EAAS/rhB,QAChCzT,EAAMw/hB,EAASx/hB,IAAMu/hB,EAAQv/hB,IAC7B2a,GAAM7a,EAAO6a,GAAM7a,GAAS,cAAc0/hB,EAAS/rhB,eAEnDzT,GAAOu/hB,EAAQ9rhB,OAAS6rhB,EAAU7rhB,QAAU,EACxC8rhB,EAAQv/hB,IAAMA,EAAMw/hB,EAASx/hB,IAAKA,EAAMw/hB,EAASx/hB,IAAMu/hB,EAAQv/hB,IAC1Du/hB,EAAQv/hB,IAAMA,EAAMs/hB,EAAU7rhB,OAAS+rhB,EAASv/hB,SAAQD,EAAMw/hB,EAASv/hB,OAASs/hB,EAAQv/hB,IAAMs/hB,EAAU7rhB,SAElHkH,GAAM7a,EAAO6a,GAAM7a,GAAS,qBAAqBE,OAClD,CACA,SAASX,IACR2mf,EAAUi1C,SAAW,IACtB,CArCA5U,GAAQ,KACP1rgB,GAAM9mB,GAAIsE,SAEXwiB,GAAc,KACTA,GAAM0khB,GAAa3siB,OAAQk7gB,GAAQ7vf,GAClC1e;AAqCN,IAAIogiB,EAASvB;AACb,IAAI1hiB;AACJ,IAAIiR,EAASkN,GAAQ8khB,GACjB9kiB,EAAOggB,GAAQlN;AACnBkN,GAAShgB,EAAM,IAAM8vhB,GAAY9vgB,GAAMqghB,GAAgBnvf,OAAOlxB,GAAMqyT;AACpE,IAAI0yN,EAAM/khB,GAAUhgB,EAAM;CGpkFpB,SAAmBwlY,GACd,CACV,MAAMzgY,EAAO5I,SAAS4I;AACtBygY,EAAI52K,aAEJ+gT,GAAiB,KACZxzgB,SAASqK,gBAAkBzB,GAC9BygY,EAAI38X,SAGP,CACD,CAXO,CHqkFMk8hB;AACZ,IAAIZ,EAAgBnkhB,GAAU,IAAMnhB,GAAgB6F,IAChD0/hB,EAAkBpkhB,GAAU,IAAM6vgB,GAASnrhB;AAC/Csb,EAAQlN;AACR,IAAI+td,EAAM7gd,GAAUlN,EAAQ;AAC5BkN,GAAO6gd,EAAK,GAAI,IAAM7gd,GAAM0khB,GAAc1khB,GAAS,CAAC68gB,EAAU/qR,KAC7DqxR,GAAQtG,EAAU,CACjB,SAAA/qR,GACC,OAAO9xP,GAAM8xP,EACd,EACAsxR,eAGFpjhB,EAAQ6gd,GACR7gd,EAAQ8khB,GACR9khB,GAAY8khB,EAAShE,GAAY9ghB,GAAM9mB,EAAI4niB,GAAU,IAAM9ghB,GAAM9mB,IACjE8mB,GAAS8khB,EAAQ,KAAME,OAtkFF1piB,EAskFe,cArkF5BpC,IACP,IAAIk6J,EAAY20K,IACX7uU,IAAOA,EAAG8U,SAAS+5T,EAAQ/mU,SAAS9H,EAAGglF,cAAc,IAAIiQ,YAAY7yF,EAAO,UAAW,CAAE8yF,OAAQ,CAAE25O;AAGxG,OADA5rU,SAASwpB,iBAAiBrqB,EAAM83J,MACzB,KACNj3J,SAAS6qB,oBAAoB1rB,EAAM83J;AAPtC,IAAsB93J,IAukFrB0kB,GAAmBq/gB,IAClBr/gB,GAAY8khB,EAAQ,EAAG9khB,GAAMozS,GAAO6xO,OACpCpjiB,EAASme,GAAY8khB,EAAQ9khB,GAAM7a,GAAQtD,EAAQ,CAAE,YAAa,GAAGme,GAAMm0gB,GAAW,OAAOn0gB,GAAMk0gB,OACnGl0gB,GAAYlN,EAAQ,EAAGkN,GAAMozS,GAAOunO,SACpC36gB,GAAgBhgB,EAAM,WAAYq/hB,GAClCr/gB,GAAgB+khB,EAAK,aAAc/khB,GAAMsnS,GAAY5iT,OACrDsb,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO16N,SAC/B,CAAC,IAAMkkN,GAAY58R,GAAMqyT,GAAW,MACvCryT,GAAQ,qBAAsB8khB,EAnC9B,WACCpgiB,IACAsb,GAAM4+P,GAAa1mM,QAAQgtd,SAC5B,GAiCAllhB,GAAQ,QAAS8khB,EAAQpgiB,GACzBsb,GAAY,QAAS+khB,EAAK,YAAYhH,GACrC/9gB,GAAMmkhB,IAAgBh6hB,MAAM3S,KAAMumiB,EACnC,GACA/9gB,GAAY,UAAW+khB,EAAK,YAAYhH,GACvC/9gB,GAAMokhB,IAAkBj6hB,MAAM3S,KAAMumiB,EACrC,GACA/9gB,GAAS68gB,EAAUiI,GACnB9khB,GACD,CAjGA,CAoMS68gB;AAEP78gB,GAAKykhB,EAAStG,IACTn+gB,GAAMsghB,IAAWnC,EAASd,KAE/Br9gB,EAAQw9U,GACRx9U,GAAYw9U,EAAUsjM,GAAY/L,EAAUsE,OAASyH,EAAS,IAAM/L,GAAWsE,QAC/Er5gB,GAASw9U,EAAS,IAAMr2U,GAAe01J,IACvC78J,GAAmBq/gB,IAClBr/gB,GAAYw9U,EAAS,EAAGx9U,GAAO,CAACA,GAAMozS,GAAO2mK,UAAM/5c,GAAMo7T,IAA0Bp7T,GAAMozS,GAAO+xO,WAChGtjiB,EAASme,GAAYw9U,EAAS,GAAI37V,EAAQw9hB,GAC1Cr/gB,GAAYlN,EAAQ,EAAGkN,GAAMozS,GAAOtgT,QACpCkN,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO7kE,MACjCvuO,GAAY4jhB,EAAO,EAAG5jhB,GAAMozS,GAAOruT,MACnCib,GAAY6jhB,EAAO,EAAG7jhB,GAAMozS,GAAO7kE,MACnCvuO,GAAYukhB,EAAO,EAAGvkhB,GAAMozS,GAAO16N,SACjC,CAAC,MACH,iBAAkB3gG,GAAOioB,GAAMuuO,GAAM,IACrC,iBAAkBx2P,GAAOioB,GAAMuuO,QAEhCvuO,GAAS68gB,EAAUr/L,IAEhBrmW,EAAI6oB,GAAU,KAAO80E,GAAM90E,GAAMuuO,MAAWz5J,GAAM90E,GAAMuuO,GAAM;AAClEvuO,GAAKtE,EAAOyihB,IACPn+gB,GAAM7oB,IAAIgniB,EAASb,KAExBt9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CAGA,IAAIolhB,GAAmB,CAAEhK,cAAc5hiB,GACtC8liB,GAAgB9liB,GAChB2xE,GAAO3xE,EAAS,CACf4hV,gBACAiqN,cAAe,CAAE3wgB,IAAK,WACtB8iT,iBAAkB,CACjB/iT,MAAO,OACPC,IAAK,UACLH,KAAM,WAEPqoT,qBAAsB,EACtB/tQ,KAAM,iBAEP1D,GAAO3xE,EAAQ8tT,WAAY,CAC1BuvD,WAAY,MACZE,aAAc,QACdD,YAAa,OACbpyW,MAAO,UAERymE,GAAO3xE,EAAQ45T,MAAO,CACrB+xO,QAAS,aACTb,QAAS,cACTR,WAAY,iBACZmB,MAAO,aAER95d,GAAO3xE,EAAQolF,MAAO,CACrBi4R,WAAY,CACXvvD,WAAY6tO,GACZ1jX,UAAWA,IAAMiyX,GACjB7rN,gBAAiB,CAAEljT,QAAS,QAC5BslT,mBACAzrU,SAAU,CAAEu+D,KAAM,GAClBqmP,MAAOqiO,GAAU,4BAElB3+K,YAAa,CACZxvD,WAAY+tO,GACZ5jX,UAAWA,IAAMiyX,GACjBzpN,mBACA7mB,MAAOqiO,GAAU,6BAElB1+K,aAAc,CACbzvD,WAAYguO,GACZ7jX,UAAW6zX,GACXztN,gBAAiB,CAAEljT,QAAS,SAC5BwlgB,yBAA0B,CAAExlgB,QAAS,QACrCslT,mBACAzrU,SAAU,CAAEw+D,OAAQ,GACpBomP,MAAOqiO,GAAU,6BACjBt7N,YAAa,CACZ5lS,KAAM,UACNE,MAAO,UAIX;AACA,SAAS6wgB,GAAyBvQ,GASjC,OARAA,EAAUx+H,SAAW,CAAC,aACtBw+H,EAAUx3J,WAAWznE,YAAc,CAACp/S,EAAOC,KAC1C,IAAMnd,SAAS20E,SAAEA,IAAe4md;AAChC,MAAO,CACNr+gB,MAAO86gB,GAAe96gB,EAAOy3D,GAC7Bx3D,IAAK46gB,GAAe56gB,EAAKw3D,KAGpBu1d,EACR,CAGA,SAAS6B,GAAerkiB,EAAOskiB,EAAqBC,GACnD,OAAOvkiB,EAAM6iU,eAAiByhO,GAAuBtkiB,EAAM4iU,UAAY2hO,CACxE,CAMA,IAAIC;AAUJ,SAAS/gH,GAAMxqb,EAAOwriB,EAAUC,GAC/B,OAAOtvhB,GAAIqvhB,EAAUtvhB,GAAIuvhB,EAAUzriB,GACpC,CAuBA,IAAI0riB,IAAQC,GAAA,IAAA5mY,QAAG,MACdpsF,YAAYiid,GAAW+E,GAAAtiiB,KAAAsuiB,IACtBxyB,GAAAwyB,GAAAtuiB,KAAKuuiB,IAAa3jiB,KAAlB5K,KAAmBu9hB,EACpB;AAOD,SAAAgR,GANehR,GACb/0gB,GAzBF,SAAqB+0gB,GACpB,MAAO,KACN,IAAMv7hB,SAASsqU,SAAEA,EAAQE,mBAAEA,EAAkB5Q,MAAEA,IAAY2hO;AAC3DA,EAAU6E,SAAW,CAACxjX,EAAYl1K,KACjC,IAAIyb,QAAEA,GAAYzb;AAClB,MAAO,IAAIk1K,EAAYu9W,GAAYh3gB,GAAW,CAACy2S,EAAMz2S,KAAai3gB,GAAQj3gB,IAAY4ohB,GAAerkiB,EAAO8iU,EAAoBF,GAAY,CAAC1Q,EAAM1pT,WAAa,KAGnK,CARA,CAyBgCqrhB,IAC9B/0gB,GAjBF,SAAsB+0gB,GACrB,MAAO,KACN,IAAIn2Q,YAAEA,EAAWy6Q,OAAEA,GAAWtE;AAC9B,GAAIsE,EAAQ,OAAO7mY,GAAO6mY,EAAQ,SAAU,KAC3Cz6Q,EAAY1mM,OAAO+pS,eACnBrjG,EAAYzlG,SAAS8oM,iBAGxB,CARA,CAiB6B8yK,GAC5B,CAID,SAASiR,GAAOnJ,EAAUC,GACzB98gB,EAAO88gB;AACP,IAQI5kd,EACA6tM,EACA7kR,EACA+9Q,EACAtiQ,EACAuV,EACA+zgB,EACAvS,EACAwS,EACAC,EACAC,EACAC,EACAC,EACArG,EACAsG,EACA9zZ,EACA86L,EACAssN,EACA2M,EACAC,EACAtzd,EACAuzd,EACA36W,EACA46W,EACArkS,EACAo1E,EACAkvN,EAlCA7R,EAAYlzH,EAAW,SACvBnpU,EAAS14E,GAAU,IAAM+0gB,EAAUr8b,QAASujc,EAAUj8gB,GAAU,IAAM+0gB,EAAUkH,SAAU1lI,EAAWv2Y,GAAU,IAAM+0gB,EAAUx+H,UAAW1nV,EAAO7uD,GAAU,IAAM+0gB,EAAUlmd,MAAOwqd,EAASr5gB,GAAU,IAAM+0gB,EAAUsE,QAAS1sK,EAAY3sW,GAAU,IAAM+0gB,EAAUv7hB,QAAQmzX,WAAYk6K,EAAiB7mhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQqtiB,gBAAiBxtN,EAAar5T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ6/U,YAAavV,EAAW9jT,GAAU,IAAM+0gB,EAAUv7hB,QAAQsqU,UAAWE,EAAqBhkT,GAAU,IAAM+0gB,EAAUv7hB,QAAQwqU,oBAAqB4V,EAAuB55T,GAAU,IAAM+0gB,EAAUv7hB,QAAQogV,sBAAuBgzC,EAAiB5sW,GAAU,IAAM+0gB,EAAUv7hB,QAAQozX,gBAAiBC,EAAgB7sW,GAAU,IAAM+0gB,EAAUv7hB,QAAQqzX,eAAgBC,EAAY9sW,GAAU,IAAM+0gB,EAAUv7hB,QAAQszX,WAAY5wC,EAAsBl8T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ0iV,qBAAsB6wC,EAAmB/sW,GAAU,IAAM+0gB,EAAUv7hB,QAAQuzX,kBAAmBC,EAAkBhtW,GAAU,IAAM+0gB,EAAUv7hB,QAAQwzX,iBAAkB1tD,EAAct/S,GAAU,IAAM+0gB,EAAUv7hB,QAAQ8lU,aAAcqa,EAAiB35T,GAAU,IAAM+0gB,EAAUv7hB,QAAQmgV,gBAAiBmtN,EAAmB9mhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQstiB,kBAAmB9qN,EAAah8T,GAAU,IAAM+0gB,EAAUv7hB,QAAQwiV,YAAa+qN,GAAW/mhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQuN,QAASigiB,GAAwBhnhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQwtiB,uBAAwBliO,GAAmB9kT,GAAU,IAAM+0gB,EAAUv7hB,QAAQsrU,kBAAmBmX,GAAuBj8T,GAAU,IAAM+0gB,EAAUv7hB,QAAQyiV,sBAAuBF,GAAoB/7T,GAAU,IAAM+0gB,EAAUv7hB,QAAQuiV,mBAAoBkrN,GAAajnhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQokV,UAAWrE,GAAev5T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ+/U,cAAemB,GAAiB16T,GAAU,IAAM+0gB,EAAUv7hB,QAAQkhV,gBAAiB3X,GAAa/iT,GAAU,IAAM+0gB,EAAUv7hB,QAAQupU;AAgHz2D,SAAS8wI,GAAO9rI,EAASh1C,GACxB9xR,OAAOgsF,eAAeQ,kBACtB04c,EAAQE,EAAMt+N,EAAQz3K,QACtB81Y,EAAQE,EAAMv+N,EAAQx3K,QACtBmnL,EAAe3kD,GAAMvkR;AACrB,IAAI6xV,EAAQoyL,GAAsB4T,EAAKC,KACrC/4N,SAAQr7S,OAAMwhgB,YAAYlB,GAAWnyL,EAAXmyL,CAAkB6T,EAAKC,IACnDC,EAAavmhB,GAAMq5gB,KAAYj1gB,GAASi8U,EAAO,GAC/C4/L,EAAS77gB,GAASi8U,EAAO,GACzB6mM,KAC4B,UAAxBn/N,EAAQxoD,cAAyBxzF,EAAQplL,WAAW,KACnDuxE,IACH6tM,KACAryB,GAAKq0E,MAEHo/N,KAAcnnhB,GAAMi8T,IAAwBj8T,GAAMk8T,KAAyBl8T,GAAM25T,IACtF,CACA,SAASjmF,GAAKq0E,GACb,GAAIhiD,GAAegiD,GAAmC,UAAxBA,EAAQxoD,aAmQ/BhlR,KAAK0mR,KAAK1mR,KAAKC,IAAI6riB,EAAMF,EAAO,GAAK5riB,KAAKC,IAAI8riB,EAAMF,EAAO,MAnQce,KAAcnnhB,GAAM+7T,IAAqB/7T,GAAM45T,IAAwB,CACtJ7zD,KACA63D,GAAS7V,GACTgtN,EAAU8E,OAASA,EACd56Q,IAAYkoR,KA4LlBloR,EAAS,CACRzoO,GAAI,WACJ+2R,OAAQrsU,EAAMqsU,OACd72T,MAAOxV,EAAMwV,MACbq+I,MAAO,GACPp4I,QAAS,UACTgpU,cAAe,CAAC,EAChBphB,gBAAiBvkT,GAAMgnhB,IACvBjU,YAAa7xhB,EAAM6xhB,YACnB38W,WAAY,GACZv0K,OAAQ,IAzBV,SAAsBkmU,EAAS52T,GAC1BosF,GAAWpsF,IAAWA,EAAS,CAClCjQ,MAAOkyhB,GAAsBlyhB,GAC7B6mU,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD,MAElClyD,EAAUzb,EAAMyb,QAChBzb,EAAMyb,QAAU,UAChBsiQ,EAASq0Q,GAAWpyhB,QACA,IAAhBohQ,IAAmB2c,EAAOokR,QAAU/gS,GACpCskS,GAAe9V,GAAY7xQ,EAAOtoQ,IAAKiwhB,GAC3C1liB,EAAMyb,QAAU,QAChBqD,GAAM04E,GAAQ3gG,OAASioB,GAAM04E,GAAQ3gG,MACtC,CAbA,CA5KoBgwU,EAAS9uE,KAAaj5O,GAAM+sW,GAAoB/sW,GAAM4sW;AACxE,IAAI0lK,EAAU8U,GA8IR3U,GAAsB9tG,GAAM0hH,EAAKM,EAASvhiB,KAAMuhiB,EAASnhiB,OAAQm/a,GAAM2hH,EAAKK,EAASthiB,IAAKshiB,EAASrhiB;AA7IzG,GAAIgthB,EAAS,CACZ,IAAI+U;AAEJ,KADE95N,OAAQ85N,EAAWn1gB,KAAM+zgB,EAASvS,SAAUwS,GAAe5T,GACzD+U,IAAc95N,EAAQ,CACzB,IAAI17R,EAAYy1f,GAAe,CAAC,EAAGroR,GAC/BsoR,EAAevnhB,GAAM8mhB;AACzBr0Z,EAAQg8K,IAAgBw3O,EAAU/zgB,GAAQ,KACtCs1gB,MACH31f,EAAUn7B,MAAQo6gB,GAAYF,GAAU1vhB,EAAMwV,OAAQ+7H,GAClD5gG,EAAUn7B,MAAQ8vhB,IACrB30f,EAAUn7B,MAAQ8vhB,EAClB/zZ,EAAQg8K,IAAgB+3O,EAAYtliB,EAAMwV,OAAS,QAGpDm7B,EAAUl7B,IAAMm6gB,GAAYF,GAAU1vhB,EAAMyV,KAAM87H,GAC9Cm0Z,GAAe9V,GAAYj/e,EAAUl7B,IAAKiwhB,GAC1C3tS,KACCpnN,EAAUl7B,IAAM6vhB,IACnB30f,EAAUl7B,IAAM6vhB,EAChB/zZ,EAAQg8K,IAAgB+3O,EAAYtliB,EAAMyV,KAAO,MAExCwwhB,MACNt1f,EAAUl7B,IAAMzV,EAAMyV,KACzBk7B,EAAUn7B,MAAQs6gB,GAAiBn/e,EAAUl7B,IAAK8vhB,GAClD50f,EAAUl7B,IAAMzV,EAAMyV,KAChBk7B,EAAUn7B,MAAQxV,EAAMwV,MAC/B6whB,EAAevnhB,GAAM8kT,MAErBjzR,EAAUn7B,MAAQo6gB,GAAYF,GAAU1vhB,EAAMwV,OAAQ+7H,GAClDihZ,IACH7hf,EAAUkhf,YAAc7xhB,EAAM6xhB,YAAYh1gB,OAAQy4B,GAAOA,IAAOk9e,EAASl9e,IACzE3E,EAAUkhf,YAAY3zhB,KAAK8miB,EAAY1vf,KAExC+wf,EAAevnhB,GAAM6mhB;AAGvB,EAAG,CACF,QAA0B,IAAtBU,IACH11f,EAAYy1f,GAAehU,GAAWpyhB,GAAQ2wC,QAC1C01f,EAAaJ,KAAcM,GAAyB51f,EAAWk2R,GAAW2/N,GAAmB71f,EAAW3wC,EAAO6mU,KAAqB,CACvI4/N,GAAazmiB;AACb,KACD,CAEDymiB,GAAa91f,EACd,OAAS,EACV,CACD,CACD,CACA,GAAI7xB,GAAMq5T,GAAa,CACtB,IAAIuuN,EAAa,GACbC,EAAa;AA5OH//gB,EA6ON,KACH6+gB,IACEJ,IACAD,EAAMK,EAASthiB,IAAMuiiB,IAAY5nhB,GAAMq5gB,GAAQ53hB,WAAa6U,IAAK,GAAIgwhB,EAAMK,EAASthiB,IAAMuiiB,GAAc,IACxGtB,EAAMK,EAASrhiB,OAASsiiB,IAAY5nhB,GAAMq5gB,GAAQ53hB,WAAa4U,GAAI,GAAIiwhB,EAAMK,EAASrhiB,OAASsiiB,GAAc,KAE9GvB,EAAMM,EAASvhiB,KAAOyiiB,IAAY7nhB,GAAMq5gB,GAAQp0hB,YAAcqR,IAAK,GAAI+vhB,EAAMM,EAASvhiB,KAAOyiiB,GAAc,IAC3GxB,EAAMM,EAASnhiB,MAAQqiiB,IAAY7nhB,GAAMq5gB,GAAQp0hB,YAAcoR,GAAI,GAAIgwhB,EAAMM,EAASnhiB,MAAQqiiB,GAAc,IAC5GvB,EAAMsB,GAAY3miB,OAAO+nG,SAAS,EAAG1yF,IAAK,GAAIgwhB,EAAMsB,GAAc,IAClEtB,EAAMrliB,OAAOmkL,YAAcwiX,GAAY3miB,OAAO+nG,SAAS,EAAG3yF,GAAI,GAAIiwhB,EAAMrliB,OAAOmkL,YAAcwiX,GAAc,MArP9GlC,KACJA,MACAzkiB,OAAOsmB,sBAAsB,KAC5BO,IACA49gB,QAoPD,CAzPF,IAAiB59gB,CA0PhB,CACA,SAASm6V,KACJ6lL,OACHZ,KACAxzS,KAEF,CA4DA,SAASq0S,KACRhiR,KACA7tM,EAASiud,EAAQC,EAAQC,EAAMC,EAAMpliB,EAAQyb,EAAUuV,EAAO+zgB,EAAUvS,EAAWwS,EAAczzZ,EAAQm0Z,EAAgBr5N,EAASi5N,EAAYC,EAAankS,EAAS29R,EAAS0G,EAAWjvN,OAAoB,EAC5Mq9M,EAAU8E,YAAc,EACpB9tW,IACHrlL,aAAaqlL,GACbA,OAAa,EAEf,CAIA,SAASq7W,GAAY/mM,GACpB,GAAIA,EAAO,CACV,IAAIiyL,EAAUE,GAAWnyL,EAAXmyL,CAAkB6T,EAAKC;AACrC,IAAIhU,EAAQprhB,SAIX,OAAKigiB,OAAeluS,OAAeq5R,EAAQoB,UAAaz0Q,EAAO8zQ,YAAYx2hB,SAAS+1hB,EAAQoB,SAASl9e,KAAQx2B,GAAMu2Y,GAAUh6Z,SAAS,YAE/H+1hB,EAFoK8U,GAApBf,EAAMF,EAA0B9lM,EAAMj3D,uBACrKi3D,EAAM1yM;AAJ9B,IAAK3tI,GAAM+iT,IAAYpsT,KAAO27gB,EAAQpggB,KAAOlS,GAAM+iT,IAAYpsT,IAAK,OAAOywhB,GAAY/mM,EAAM1yM;AAC7F,IAAK3tI,GAAM+iT,IAAYrsT,OAAS47gB,EAAQpggB,KAAOlS,GAAM+iT,IAAYrsT,MAAO,OAAO0whB,GAAY/mM,EAAMj3D,uBAMnG,CACA,OAAO,IACR,CACA,SAAS89P,KACR,IAAIc,EAAWnvhB,GAAKmH,GAAMq5gB,IACtBwL,EAAWhshB,GAAKonhB,GAChBx4X,EAASugY,EAASziiB,MAAQya,GAAMq5gB,GAAQx5gB,YACxC6nJ,EAASsgY,EAASlvhB,OAASkH,GAAMq5gB,GAAQv5gB,aACzCrI,EAAM08S;AACVwyO,EAAW,CACVvhiB,KAAMkR,GAAI,EAAGmB,EAAMuwhB,EAASxiiB,MAAQwa,GAAMq5gB,GAAQr3gB,YAAcylJ,EAASo9X,EAASz/hB,KAAO4a,GAAMq5gB,GAAQp0hB,WAAawiK,GACpHjiK,MAAO6Q,GAAIla,SAAS2I,gBAAgBkd,YAAavK,EAAMothB,EAASr/hB,MAAQwa,GAAMq5gB,GAAQp0hB,WAAawiK,EAASugY,EAAS5iiB,KAAO4a,GAAMq5gB,GAAQr3gB,YAAcylJ,GAAU,EAClKpiK,IAAKiR,GAAI,EAAGuuhB,EAASx/hB,KAAQkhiB,EAAuC,EAA1BvmhB,GAAMq5gB,GAAQ53hB,WAAiBimK,GACzEpiK,OAAQ+Q,GAAIla,SAAS2I,gBAAgBmd,aAAeskhB,EAAkE1B,EAASv/hB,OAA9D0iiB,EAAS3iiB,IAAM2a,GAAMq5gB,GAAQp3gB,aAAeylJ,GAA4B,EAE3I,CA6BA,SAASugY,KACRhpR,OAAc,EACdj/P,GAAMi8gB,GAASn/c,OAAO,SACvB,CACA,SAASwqd,GAAetmiB,EAAQ+mC,GAI/B,OAHA/mC,EAAO0V,MAAQqxB,EAAOrxB,MACtB1V,EAAO2V,IAAMoxB,EAAOpxB,IACpB3V,EAAO+xhB,YAAchrf,EAAOgrf,YACrB,IAAK/xhB,EACb,CACA,SAAS49hB,GAAY59hB,EAAQ+mC,GAC5Bu/f,GAAetmiB,EAAQ+mC,GACvB/nB,GAAM04E,GAAQ3gG,OAASioB,GAAM04E,GAAQ3gG,MACtC,CACA,SAAS4viB,GAAa5/f,GACrBk3O,EAASqoR,GAAeroR,EAAQl3O,GAChC/nB,GAAMi8gB,GAAS53gB,IAAI,SAAU46P,EAC9B,CACA,SAASwoR,GAAyBvmiB,EAAO6mU,GACxC,IAAIrxT,MAAEA,EAAKC,IAAEA,GAAQy8gB,GAAsBlyhB;AAC3C,MAAO,CACNwV,QACAC,MACAm1U,SAAUlvC,GAAY17S,EAAMwV,OAC5Bs1U,OAAQpvC,GAAY17S,EAAMyV,KAC1B42T,SACA1+P,KAAM+jd,GAAqB5ygB,GAAM6uD,IACjC6kd,WACA3rN,UAEF,CACA,SAAS2/N,GAAmBxmiB,EAAOwqV,EAAU3jB,GAC5C,IAAIrtJ;AAmBJ,OAlBgBA,EAAZu+E,KAAmBuuS,KAAkB,CACxCp/Q,WAAY31I,EACZw3M,SAAUx7B,GAAe,IACtB,CACHrmC,WAAYqmC,GAAe,GAC3Bw7B,SAAUx3M,GAEC,CACXA,QACAy1Z,YAAaxU,IAAawS,EAAcxS,OAAgB,EACxDwS,YAAaxS,IAAawS,EAAcA,OAAmB,GAE5D/6d,GAAOuvG,EAAM,CACZx5K,MAAOkyhB,GAAsBlyhB,GAC7BwqV,SAAU0nM,GAAsB1nM,GAChC78Q,KAAM+jd,GAAqB5ygB,GAAM6uD,IACjCk5P,YAEMrtJ,CACR,CAIA,SAASu+E,KACR,OAtYyB,IAsYlB/gL,GAAgCsvd,IACxC,CACA,SAASA,KACR,OAxY2B,IAwYpBtvd,CACR,CAIA,SAASivd,KACR,OA7YqB,IA6Ydjvd,CACR,CACA,SAAS4vd,KACR,OAAO5vd,GAAUA,EA/YG,CAgZrB,CACA,SAASiwd,GAAapgO,GACrB,OAAOA,EAAQqgO,YAAsC,UAAxBrgO,EAAQxoD,aAA6C,EAAlBwoD,EAAQn4P,QACzE,CACA,SAASguQ,GAAS7V,GACb50P,IACHA,KACA80d,KACI1qc,GAAWv9E,GAAMinhB,MAAcjnhB,GAAMinhB,GAANjnhB,CAAkB,CACpD+nT,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD,MAGpC,CAkBA,SAASw5d,GAA4B/vf,GACpC,OAAQyvR,IACHzvR,KAAayvR,EAAQjiU,iBAE3B,CArBAka,GAAkB,KACjBA,GAAM6uD,GACN+uQ,OAoBD8tM,GAAQ,IAAMl5X,GAAOvxJ,OAAQ,YAAa4zJ,GAAM,CAAE8pB;AAClD,IAAI+/W,GAAY,CACfh1hB,UAzZD,SAAmBxI,GAClB,OAAOqkiB,GAAerkiB,EAAO8e,GAAMgkT,GAAqBhkT,GAAM8jT,GAC/D,EAwZClzK,KAvZD,SAAc03Y,EAAavgO,EAASy6N,EAAWC,EAAa1vQ,GACtD76M,IACJA,EAASiwd,GAAapgO,GAtCJ,EAKK,EAkCnB+/N,OACH5miB,EAAQoniB,EACRz0F,GAAO9rI,EAASh1C,GACZyvQ,IAAWtwgB,EAAOswgB,GAClBC,IAAangS,EAASmgS,GAC1B5I,EAAS,WACTnmS,GAAKq0E,IAGR,EA4YCj2E,OA3YD,SAAgBggB,EAAOi2D,EAASrxT,EAAOQ,EAAMsrhB,EAAWC,EAAa1vQ,GACpE,IAAK76M,IACJA,EAASiwd,GAAapgO,GAAWrxT,EAjDP,EADF,EAID,EA+CnBoxhB,MAAiB,CACpB,IAAIhU,aAAEA,GAAiBhiR;AACvB5wQ,EAAQ4wQ,EAAM5wQ,MACd2yc,GAAO9rI,EAASh1C,GACZ0vQ,IAAangS,EAASmgS,GAC1B5I,EAAkB,MAAT3ihB,EAAe,YAAc,YAClCswhB,MACHhB,EAAY5V,GAAU1vhB,EAAMyV,KACxB42T,GACHmkN,GAAS8U,EAAWtliB,EAAMwV,OACtB8vhB,GAAatliB,EAAMyV,KAAKo6gB,GAAYyV,KAExCxV,GAAiBwV,EAAW9uN,GACxB8uN,EAAYtliB,EAAMwV,QAAO8vhB,EAAYtliB,EAAMwV,QAEhDwb,EAAOq7S,EAAS2jN,GAAYN,GAAU1vhB,EAAMwV,QAAUxV,EAAMwV,QAE5D8vhB,EAAY5V,GAAU1vhB,EAAMwV,OACxB62T,GACHmkN,GAAS8U,EAAWtliB,EAAMyV,KACtB6vhB,GAAatliB,EAAMwV,QAAUo9gB,GAAc7C,GAAOuV,KAEtD1V,GAAY0V,EAAW9uN,GACnB8uN,EAAYtliB,EAAMyV,MAAK6vhB,EAAYtliB,EAAMyV,MAE1C42T,GACHr7S,EAAOg/f,GAAYN,GAAU1vhB,EAAMyV,OAC9Bm9gB,GAAgB1C,GAAWl/f,EAAMhxB,EAAMyV,MAAMo6gB,GAAY7+f,KAE9DA,EAAOhxB,EAAMyV,IACRm9gB,IAAc5hgB,EAAO8+f,GAAiBJ,GAAU1+f,GAAOwlT,KAEzDo8M,IAAiBvmN,IAAQq5N,EAAgBlvN,IAE1C8qN,IAAWtwgB,EAAOswgB,GACtB9uS,GAAKq0E,EACN,CAEF,EAmWChhU,OAlWD,SAAgBghU,EAASh1C,GACnB76M,IACJA,EAASiwd,GAAapgO,GAAW/nT,GAAMg8T,KAAgBh8T,GAAMu2Y,GAAUh6Z,SAAS,QA1F5D,EACD,EACI,EAyFnBuriB,OACHj0F,GAAO9rI,EAASh1C,GAChB8mQ,EAAS,YACT4M,EAAal5N,EAAS9e,GAAe,CAAE/5R,IAAK,IAAOgjT,EACnDx2U,EAAQ,CACPqsU,SACA72T,MAAOwb,EACPvb,IAAKm6gB,GAAYF,GAAU1+f,GAAOu0gB,GAClC1T,YAAaW,EAAW,CAACA,EAASl9e,IAAM,IAEzCk9M,GAAKq0E,IAGR,EAmVC26N,SAlVD,WACMxqd,IAAQA,EAxGW,EAyGzB,EAiVC+pS,gBACArkC,YACAsnN,QA3BD,WACCwB,IACD;AA2BA1mhB,GAAQ,cAAeA,GAnPvB,SAA2B+nT,GACtB+/N,MAAmB//N,EAAQqgO,YAC9B/B,EAAMt+N,EAAQz3K,QACdg2Y,EAAMv+N,EAAQx3K,QACdmjG,GAAKq0E,GAEP,GA8OA/nT,GAAQ,YAAaA,GA7OrB,SAAyB+nT,GAExB,IADI50P,IAAYnzD,GAAMu5T,KAAmBv5T,GAAM06T,KAAmB3S,EAAQ/mU,OAAOs0E,QAAQt1D,GAAM06T,MAAmBkD,GAAS7V,GACvH7vP,GAAU6vP,EAAQqgO,UAAW,CAChC,GAAIriR,EAAa,GAAIohR,MAEpB,GADAh0d,KACIoqB,GAAWv9E,GAAM+mhB,KAAY,CAChC,IAAIrsX,EAAO+sX,GAAyBxoR,EAAQ8oD;AAC5C/nT,GAAM+mhB,GAAN/mhB,CAAgB06J,EACjB,MACM,CACNx5K,EAAMyb,QAAUA;AAChB,IAAIxL,EAAW8nP,KAAaj5O,GAAMgtW,GAAmBhtW,GAAM6sW;AACvDtvR,GAAWpsF,IAAWA,EAAS,CAClCjQ,MAAOkyhB,GAAsBlyhB,GAC7B6mU,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD;AAElC,IAAI68Q,EAAW4nM,GAAWpyhB;AAI1B,GAHA09hB,GAAY19hB,EAAO+9Q,GACnBgpR,KACA92hB,EAAW8nP,KAAaj5O,GAAMs/S,GAAet/S,GAAM8sW,GAC/CvvR,GAAWpsF,GAAW,CACzB,IAAIo3hB,EAAWrniB;AAEfiQ,EAASg6D,GADEu8d,GAAmBxmiB,EAAOwqV,EAAU3jB,GACzB,CAAE32K,SACvBwtY,GAAY2J,EAAU78M,EACvB,IACD,CACD,MACK,IAhPc,IAyYbxzQ,GAzJiBivd,OAClB5pc,GAAWv9E,GAAM2sW,MAAgB+5K,EAAa,CACjDL,EAAMt+N,EAAQz3K,QACdg2Y,EAAMv+N,EAAQx3K;AACd,IAAI8vM,EAAQoyL,GAAsB4T,EAAKC;AACvC,GAAIjmM,EAAO,CACV,IAAI9yB,OAAEA,EAAMr7S,KAAEA,EAAIwhgB,SAAEA,GAAalB,GAAWnyL,EAAXmyL,CAAkB6T,EAAKC;AACxDtmhB,GAAM2sW,EAAN3sW,CAAiB,CAChButT,SACAr7S,KAAMi/f,GAAYj/f,GAClB0+T,QAASh0C,GAAY1qR,GACrBmuU,QACAt4B,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD,IACjC6kd,YAEF,CACD,CAEDqU,IACD,CACArB,IACD,GA2LA1mhB,GAAQ,gBAAiBA,GAAU+nhB,IACnC/nhB,GAAQ,SAAUA,GAAUiiW;AAC5B,IAAIkiL,GAAgBnkhB,GAAU,IAAMqohB,GAA4BP;AAChE9nhB,GAAQ,cAAeA,GAAU,YAAY+9gB,GAC5C/9gB,GAAMmkhB,KAAgBh6hB,MAAM3S,KAAMumiB,EACnC;AACA,IAAIqG,GAAkBpkhB,GAAU,IAAMqohB,GAA4B,IAAMt8W;AAKxE,OAJA/rK,GAAQ,cAAeA,GAAU,YAAY+9gB,GAC5C/9gB,GAAMokhB,KAAkBj6hB,MAAM3S,KAAMumiB,EACrC,GACA/9gB,GAAQ,aAAcA,GAtCtB,SAA0B+nT,GACzB,GAAI+/N,KAAiB,CACpB,IAAI9miB,EAAS+mU,EAAQ/mU,OACjBwniB,EAAQ,GACR9miB,EAAOA,KAAa8miB,EA7qGtBx2hB,QAAQm/H;AA8qGVq3Z,EAAMppiB,KAAKozJ,GAAOxxJ,EAAQ,YAAaqniB,GAA4B,IAAMtiR,KACzEyiR,EAAMppiB,KAAKozJ,GAAOxxJ,EAAQ,WAAYU,IACtC8miB,EAAMppiB,KAAKozJ,GAAOxxJ,EAAQ,cAAeU,GAC1C,CACD,OA6BuD,MAChDse,EAAM0+gB,GACd,CA4DA,IAAI+J,GAAUzohB,GAAY,eACtB0ohB,GAAW1ohB,GAAY,cAAe;AAC1C,SAASsihB,GAAQzF,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAI0F,EAAYxihB,GAAO88gB,EAAS,YAAa,OAAQ,GAAI2F,EAAczihB,GAAO88gB,EAAS,cAAe,OAAQ,GAC1GpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW3pV,EAASl4D,GAAU,IAAMA,GAAM0sgB,GAAK9tQ,YAAY1mM,QAAS4rP,EAAW9jT,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQsqU,UAAWI,EAAwBlkT,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ0qU,uBAAwB6V,EAA0B/5T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQugV,yBAA0B3mB,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OACnXutO,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgB9uI,EAAO/yQ,GAAU,IAAMA,GAAM2ghB,GAAO5tQ,MACvF7xR,EAAQ8e,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,OACtCyb,EAAUqD,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,MAAMyb,SAC9C60O,EAAYxxO,GAAU,KAAO4zgB,GAAQ5zgB,GAAMrD,MAAcg3gB,GAAY3zgB,GAAMrD,KA7kBhF,SAAwBzb,EAAOyniB,EAAwBlD,GACtD,OAAOvkiB,EAAM+iU,kBAAoB0kO,GAA0BzniB,EAAM4iU,UAAY2hO,CAC9E,CAFA,CA6kB4GzlhB,GAAM9e,GAAQ8e,GAAMkkT,GAAwBlkT,GAAM8jT;AAC7J,SAAS8kO,EAAoBlyhB,GAC5B,OAAQqxT,GAAY/nT,GAAMk4D,GAAQ45K,OAAOgrS,EAAQhrR,MAAOi2D,EAASrxT,EAAOomhB,EAAQ5lhB,KAAMsrhB,IAAaC,IAAezihB,GAAM+yQ,GACzH,CACA,IAAIuuG,EAAWonK,KACXhthB,EAAOsE,GAAcshX,GACrB+7J,EAAcR,IACjB,IAAIh8D,EAAM4nE,KACNtE,EAAgBnkhB,GAAU,IAAM4ohB;AACpC5ohB,GAAkB,IAAMA,GAAY6gd,EAAK,EAAG,GAAG7gd,GAAMozS,GAAOmvO,SAAW,MAAMvihB,GAAMozS,GAAO18S,OAAS,OACnGsJ,GAAY,cAAe6gd,EAAK,YAAYk9D,GAC3C/9gB,GAAMmkhB,IAAgBh6hB,MAAM3S,KAAMumiB,EACnC,GACA/9gB,GAAS68gB,EAAUh8D;AAEpB7gd,GAAKtE,EAAOyihB,IACPn+gB,GAAMwxO,IAAcxxO,GAAM+5T,IAA0BokN,EAASd;AAElE,IAAID,EAASp9gB,GAAUtE,EAAM;AAC7BsE,GAAUo9gB,EAAQ,IAAMN,EAAQ9phB;AAChC,IAAIwxhB,EAASxkhB,GAAUo9gB,EAAQ,GAC3BE,EAAgBT,IACnB,IAAImC,EAAQyJ,KACRrE,EAAkBpkhB,GAAU,IAAM4ohB;AACtC5ohB,GAAkB,IAAMA,GAAYg/gB,EAAO,EAAGh/gB,GAAMozS,GAAOmvO,UAC3DvihB,GAAY,cAAeg/gB,EAAO,YAAYjB,GAC7C/9gB,GAAMokhB,IAAkBj6hB,MAAM3S,KAAMumiB,EACrC,GACA/9gB,GAAS68gB,EAAUmC;AAEpBh/gB,GAAKwkhB,EAASrG,IACTn+gB,GAAMwxO,IAAY2sS,EAASb,KAEhCt9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CACAA,GAAW,CAAC;AAGZ,IAAI6ohB,GAAU7ohB,GAAY,UAAW;AACrC,SAAS8ohB,GAAUjM,EAAUC,GAC5B98gB,EAAO88gB;AACP,IAAI/H,EAAYlzH,EAAW;AAC3B,IAAIgkI,GAAS9Q;AACb,IAAIn2Q,EAAc5+P,GAAU,IAAM+0gB,EAAUn2Q,aAAczlG,EAAUn5J,GAAU,IAAM+0gB,EAAUv7hB,QAAQ2/K;AACtGn5J,GAAM4+P,GAAa2jR,QAAUD;AAC7B,IAAIhhK,EAAWunK,KACXnthB,EAAOsE,GAAcshX;AACzBthX,GAAYgmhB,GAAOtqhB,EAAM,CAAC,GAAKolhB,GAAY9ghB,GAAM4+P,GAAa1mM,OAAS4od,EAAS,IAAM9ghB,GAAM4+P,IAAc1mM;AAC1G,IAAIkld,EAASp9gB,GAAUtE,EAAM,GACzB2hhB,EAAcR,IACjB78gB,GArHF,WACCA,EAoH+B,CAAC,GApHzB88gB;AACP,IAGI79Q,EAHAytQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWo6H,EAAUj8gB,GAAU,IAAMA,GAAM0sgB,GAAKuP,SAAUxkN,EAAez3T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQi+U,cAC7Ij5U,EAAI,EACJwK,EAAI;AAER,SAAS0qP,IACR,IAAI2sG,EAAQoyL,GAAsBj0hB,EAAGwK;AACrC,GAAIq3V,IAAUrgV,GAAMi8gB,GAAS7zgB,IAAI,UAAW,CAC3C,IAAImlT,OAAEA,EAAMr7S,KAAEA,EAAIwhgB,SAAEA,EAAQxshB,SAAEA,GAAasrhB,GAAWnyL,EAAXmyL,CAAkBh0hB,EAAGwK;AAChE,IAAK9B,EAOJ,OANK+3Q,IAsBPA,EAAS,CACRzoO,GAAI,YACJu+G,MAAO,GACPp4I,QAAS,UACTgpU,cAAe,CAAC,EAChBphB,gBAAiB,cACjBnuJ,WAAY,GACZv0K,OAAQ,KA5BPo9Q,EAAOsuD,OAASA,EAChBtuD,EAAOvoQ,MAAQwb,EACf+sP,EAAOtoQ,IAAMm6gB,GAAYF,GAAU1+f,GAAOlS,GAAMy3T,IAChDx4D,EAAO8zQ,YAAcW,EAAW,CAACA,EAASl9e,IAAM,QAChDx2B,GAAMi8gB,GAAS53gB,IAAI,UAAW,IAAK46P,GAGrC,CAyBAA,OAAc,EACdj/P,GAAMi8gB,GAASn/c,OAAO,UAxBvB,CACA,SAASmlS,IACRvuH,GACD,CA0BA,IAAIgrS,EAAY,CAAEz8K;AAGlB,OAFAjiW,GAAQ,cAAeA,GA1BvB,SAA2B+nT,aAsBPA,GACnB,OAAOA,EAAQqgO,WAAqC,UAAxBrgO,EAAQxoD,WACrC,EAxB2BwoD,CACXA,KACdvpU,EAAIupU,EAAQz3K,QACZtnJ,EAAI++T,EAAQx3K,QACZmjG,IAEF,GAqBA1zO,GAAQ,SAAUA,GAAUiiW,GACrBjiW,EAAM0+gB,EACd,CAtDA,GAqHsCoC,GAAY9ghB,GAAM4+P,GAAazlG,QAAU2nX,EAAS,IAAM9ghB,GAAM4+P,IAAczlG;AAEjHn5J,GAAKo9gB,EAASe,IACTn+gB,GAAMm5J,IAAUglX,EAASd,KAE9Br9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CAGA,IAAI+ohB,GAAsB,CACzB3N,cAAc5hiB,GACb2xE,GAAO3xE,EAAS,CACfmzX,eAAgB,EAChBk6K,oBAAqB,EACrBxtN,cACAvV,YACA8V,qBAAsB,EACtBgzC,oBAAqB,EACrBC,mBAAoB,EACpBC,eAAgB,EAChB5oD,yBACAgY,yBAA0B,EAC1BnC,2BACAgzC,sBAAuB,EACvBC,qBAAsB,EACtB1tD,iBAAkB,EAClB0E,sBACA2V,eAAgB,IAChBxgK,WACA2tX,sBAAuB,EACvB//hB,YAAa,EACbigiB,2BAA4B,EAC5BliO,sBAAuB,EACvBmX,0BAA2B,EAC3BF,kBAAmB,EACnBrE,kBAAmB,EACnBkG,cAAe,EACfrE,gBACAmB,eAAgB,KAEjBvvQ,GAAO3xE,EAAQ45T,MAAO,CACrB1pT,UAAW,eACXs/hB,MAAO,WACPC,QAAS,aACT9vX,QAAS,aACTopX,QAAS,aACT7rhB,MAAO,WACP/K,SAAU,cACVu9hB,UAAW,gBACXC,UAAW,gBACXhC,UAAW,gBAEb,EACAjL,UAAUnH,GACTA,EAAUqE,cAAch6hB,KAAK0piB,GAC9B,GAIGM,IAAWC,GAAA,IAAA18b,QAAA28b,GAAA,IAAA38b,QAAG,MAEjB,eAAA48b,GACC,OAAOvphB,GAAM+tL,GAAKs7V,GAAL7xiB,MACd,CACA,eAAA+xiB,CAAgBpviB,GACf6lB,GAAM+tL,GAAKs7V,GAAL7xiB,MAAmB2C,EAC1B,CAEA,mBAAAqviB,GACC,OAAOxphB,GAAM+tL,GAAKu7V,GAAL9xiB,MACd,CACA,mBAAAgyiB,CAAoBrviB,GACnB6lB,GAAM+tL,GAAKu7V,GAAL9xiB,MAAuB2C,EAC9B,CACA24E,YAAYiid,GAdZ75W,GAAA1jL,KAAA6xiB,QAAY,GAOZnuX,GAAA1jL,KAAA8xiB,QAAgB,GAQfx7V,GAAKu7V,GAAL7xiB,KAAoBwoB,GAAU80gB,GAAKC,EAAW,mBAC9CjnV,GAAKw7V,GAAL9xiB,KAAwBwoB,GAAU80gB,GAAKC,EAAW,sBACnD,IAIG0U,GAASzphB,GAAY,kBAAmB,GAyCxC0phB,GAAS1phB,GAAY,8CAA+C,GA2EpE2phB,GAAS3phB,GAAY,kBACrB4phB,GAAW5phB,GAAY;AAC3B,SAAS6phB,GAAOhN,EAAUC,GACzB98gB,EAAO88gB;AACP,IAAI/H,EAAYlzH,EAAW;AAC3Bub,EAAW,aAAc,IAAIgsH,GAAYrU;AACzC,IAAI0B,EAAiBz2gB,GAAU,IAAM+0gB,EAAU0B,gBAAiBuF,EAAWh8gB,GAAU,IAAM+0gB,EAAUiH,UAAWntd,EAAO7uD,GAAU,IAAM+0gB,EAAUlmd,MAAO2nd,EAAYx2gB,GAAU,IAAM+0gB,EAAUyB,WAAYsT,EAAgB9phB,GAAU,IAAM+0gB,EAAUv7hB,QAAQswiB,eAAgBC,EAAkB/phB,GAAU,IAAM+0gB,EAAUv7hB,QAAQuwiB,iBAAkB32O,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OACxXr8N,EAAW/2E,GAAU,KACxB,IAAI+2E;AACJ,IAAKjC,GAAM90E,GAAMw2gB,IAAa,CAC7B,IAAI9/gB,EAAQsJ,GAAMw2gB,GAAW,GACzB7/gB,EAAMs6gB,GAAOL,GAAU5wgB,GAAMw2gB,GAAWvxZ,IAAI;AAChD,IAAK,IAAI/jI,KAAS8e,GAAMy2gB,GAAiB,IAAK7C,GAAQ1yhB,EAAMyb,UAAYzb,EAAMwV,MAAQC,GAAOzV,EAAMyV,IAAMD,EAAO,CAC/GqgF;AACA,KACD,CACD,CACA,OAAOA,IAEJ9d,EAAUj5D,GAAU,IAAMowgB,GAAcpwgB,GAAM+phB,QAAuB,OAAQ,EAAG/phB,GAAMg8gB,GAAU+N;AACpG,SAASrI,EAAQ35N,GACZxqO,GAAWv9E,GAAM8phB,KAAiB9phB,GAAM8phB,EAAN9phB,CAAqB,CAC1D+nT,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD,KAEnC,CACA,IAAI2uR,EAAUosM,KACVluhB,EAAOsE,GAAQw9U,GACf6/L,EAAcR,IACjB,IAAIh8D,EAAM8oE;AAEV3phB,GADaA,GAAQ6gd,GACH,IAAM7gd,GAAMi5D,GAASotc,SAAWrmgB,EAAQ,IAAMA,GAAMi5D,GAASnpD,KAC/E9P,EAAQ6gd,GACR7gd,GAAS6gd,EAAK,IAAMivD,GAAY9vgB,GAAMi5D,GAASA,QAASj5D,GAAMi5D,GAASotc,UACvErmgB,GAAkB,IAAMA,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAOr8N,WACzD/2E,GAAY,QAAS6gd,EAAK6gE,GAC1B1hhB,GAAS68gB,EAAUh8D,IAEhBo+D,EAAapC,IAChB,IAAIv7J,EAAWthX;AAEfA,GADaA,GAAcshX,GACZ,GAAI,IAAMthX,GAAMw2gB,GAAYx2gB,GAAS,CAAC68gB,EAAU3qgB,MAnHjE,SAAe2qgB,EAAUC,GACxB98gB,EAAO88gB;AACP,IAAIpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW40H,EAAiBz2gB,GAAU,IAAMA,GAAM0sgB,GAAK+J,gBAAiB8D,EAAmBv6gB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ+giB,kBAAmBnnO,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OAAQ2P,EAAa/iT,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQupU,YACrR49N,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgB0nI,EAAcvphB,GAAU,IAAMA,GAAM2ghB,GAAO4I,aAAcC,EAAkBxphB,GAAU,IAAMA,GAAM2ghB,GAAO6I,iBAC3J9gV,EAAY1oM,GAAU,IAAMA,GAAMu6gB,GAAkBt/gB,KAAM9jB,GAAMi6hB,GAAWj6hB,EAAG2liB,EAAQ5qgB,QACtFhrB,EAAW8Y,GAAU,IAAM21gB,GAAamH,EAAQ5qgB,KAAMlS,GAAM+iT,KAC5DkzI,EAAWj2b,GAAU,IAAM48R,GAAYkgP,EAAQ5qgB,KAAM,KACrDgtB,EAASl/B,GAAU,KACtB,IAAIk/B,EAAS;AACb,IAAKl/B,GAAM9Y,GAAW,CACrB,IAAIwP,EAAQomhB,EAAQ5qgB,KAChBvb,EAAMs6gB,GAAOL,GAAUkM,EAAQ5qgB;AACnC,IAAK,IAAIhxB,KAAS8e,GAAMy2gB,GAAiB,IAAK7C,GAAQ1yhB,EAAMyb,UAAY82gB,GAAgBvyhB,EAAOwV,EAAOC,GAAM,CAC3G,IAAIm7P,EAAQ+hR,GAAiB3yhB,EAAOwV,EAAOC;AAC3CuoC,EAAO9/C,KAAK0yQ,EACb,CACD,CACA,OAAO5yN;AAER,IAAIoiV,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrB+7J,EAAcR,IACjB,CACC,MAAM5jd,EAAUA,CAAC4jd,EAAU+D,EAAU5ghB,KACpC,IAAI2ihB,EAAa+G,KACbvoE,EAAKnhd,GAAc2ihB,GACnB3iiB,EAAOggB,GAAQmhd;AAEnBnhd,GADaA,GAAQhgB,GACH,IAAM4giB,IAAUva,SAAWrmgB,EAAQ,IAAM4ghB,IAAU9wgB,KACrE9P,EAAQhgB,GACRggB,GAAShgB,EAAM,IAAM8vhB,GAAY8Q,IAAU3nd,QAAS2nd,IAAUva;AAC9D,IAAI2jB,EAAShqhB,GAAUhgB,EAAM;AAC7BggB,GAASgqhB,EAAQ,IAAMla,GAAY9vgB,GAAMwphB,GAAiBt4f,OAAO4rf,EAAQ5qgB,QACzElS,EAAQmhd,GAERnhd,GADaA,GAAUmhd,EAAI,GACZ,GAAI,IAAMnhd,GAAMk/B,GAAU4yN,GAAUA,EAAM5wQ,MAAO,CAAC27hB,EAAU/qR,MA5E/E,SAAiB+qR,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAIpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWjjJ,EAAc5+P,GAAU,IAAMA,GAAM0sgB,GAAK9tQ,aAAcw0C,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OAC9IvxT,EAASme,GAAU,IAAO7a,WACtBA,EAAM,2BACNA,EAAarI,MACbqI;AAER,CACC,MAAMJ,EAAOA,CAAC83hB,EAAUiF,EAAc9hhB,EAAQohhB,EAAUphhB,EAAQqhhB,EAAWrhhB,KAC1E,IAAIm9gB,EAAasM,KACb5oE,EAAM7gd,GAAcm9gB;AACxB,IAAI8M;AAEJjqhB,GADWA,GAAU6gd,EAAK,GACVihE,GAChB9hhB,GAAkB,KACjBA,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO82O,UACjCD,EAAWjqhB,GAAY6gd,EAAK,GAAIopE,EAAU,CAAE,mBAAoB7I,QAEjEphhB,GAAS68gB,EAAUM;AAEpB,IAAIkC,EAAKr/gB,GAAU,IAAMA,GAAM4+P,GAAa1mM,QAAQwqd;AACpDzB,GAAUpE,EAAU,CACnB,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,UAAAjwQ,GACC,OAAOme,GAAMne,EACd,EACA,iBAAAg/hB,GACC,OAAO7ghB,GAAMq/gB,EACd,EACAt6hB,OACA6mhB,QAAS,CAAE7mhB,UAEb,CACAib,GACD,CArCA,CA6Ea68gB,EAAU,CAAE,SAAA/qR,GACnB,OAAO9xP,GAAM8xP,EACd,MAED9xP,GAAkB,KACjBA,GAAYmhd,EAAI,EAAGnhd,GAAMozS,GAAOunO,SAChC36gB,GAAgBhgB,EAAM,WAAYggB,GAAMi2b,IACxCj2b,GAAYgqhB,EAAQ,EAAGhqhB,GAAMozS,GAAO+2O,SACpCnqhB,GAAgBgqhB,EAAQ,WAAYhqhB,GAAMi2b,MAE3Cj2b,GAAS68gB,EAAU8F;AAEpBlC,GAAQ5D,EAAU,CACjB,QAAA3qgB,GACC,OAAO4qgB,EAAQ5qgB,IAChB,EACAq7S,UACArqC,KAAM,WACN,YAAAh8R,GACC,OAAO8Y,GAAM9Y,EACd,EACA,aAAAwhN,GACC,OAAO1oM,GAAM0oM,EACd,EACAg4U,eAAgBA,IAAM1ghB,GAAMuphB,GAAar4f,OAAO4rf,EAAQ5qgB,MACxD+mD,UACA2yc,QAAS,CAAE3yc,aAEb;AAEDj5D,GAAKtE,EAAOyihB,IACPn+gB,GAAMk/B,GAAQnnD,QAAQomiB,EAASd,KAEpCr9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CAvEA,CAoHS68gB,EAAU,CAAE,QAAA3qgB,GACjB,OAAOlS,GAAMkS,EACd,MAEDlS,GAAS68gB,EAAUv7J;AAEpBthX,GAAKtE,EAAOyihB,IACPn+gB,GAAM+2E,GAAWonc,EAASd,GACzBc,EAASc,GAAY,KAE3Bj/gB,EAAQw9U,GACRx9U,GAAYw9U,EAAUsjM,GAAY/L,EAAUsE,OAASyH,EAAS,IAAM/L,GAAWsE,QAC/Er5gB,GAAkB,IAAMA,GAAYw9U,EAAS,EAAGx9U,GAAMozS,GAAO2mK,OAC7D/5c,GAAS68gB,EAAUr/L,GACnBx9U,GACD,CACAA,GAAW,CAAC;AAGZ,IAAIoqhB,GAAe,CAAEhP,cAAc5hiB,GAClC2xE,GAAO3xE,EAAS,CACf6wiB,cAAe,CAAE11gB,QAAS,QAC1B21gB,kBAAmB,CAClB/1gB,KAAM,UACNE,MAAO,OACPC,IAAK,WAENo1gB,mBAAoB,EACpBC,gBAAiB,YACjBl7d,KAAM,aAEP1D,GAAO3xE,EAAQ8tT,WAAY,CAC1BijP,QAAS,MACTC,SAAU,OACVC,UAAW,QACXC,SAAU,SAEXv/d,GAAO3xE,EAAQ45T,MAAO,CACrB+2O,QAAS,cACTD,SAAU,eACVnzc,SAAU,iBAEX5rB,GAAO3xE,EAAQolF,MAAO,CACrB2rd,QAAS,CACRjjP,WAAY6tO,GACZ1jX,UAAWk5X,GACXn8hB,SAAU,CAAEu+D,KAAM,GAClBqmP,MAAOqiO,GAAU,uBACjBt7N,YAAa,CACZ5lS,KAAM,UACNE,MAAO,OACPC,IAAK,YAGP81gB,SAAU,CACTljP,WAAY+tO,GACZ5jX,UAAWk5X,GACXn8hB,SAAU,CAAEizH,MAAO,GACnB2xL,MAAOqiO,GAAU,yBAElBgV,UAAW,CACVnjP,WAAYguO,GACZ7jX,UAAWk5X,GACXn8hB,SAAU,CAAEw+D,OAAQ,GACpBomP,MAAOqiO,GAAU,yBACjBt7N,YAAa,CACZ5lS,KAAM,UACNE,MAAO,SAGTi2gB,SAAU,CACTpjP,WAAYiuO,GACZ9jX,UAAWk5X,GACXn8hB,SAAU,CAAEy+D,MAAO,GACnBmmP,MAAOqiO,GAAU,wBACjBt7N,YAAa,CAAE5lS,KAAM,aAGxB;AACA,SAASo2gB,GAAoB5V,GAE5B,OADAA,EAAUx+H,SAAW,CAAC,QACfszI,EACR,CAGA,SAASe,GAAe1piB,EAAO6rE,EAAMind,MACpC,IAAI90e,EAAS;AACb,IAAK,IAAIg1e,WAAEA,EAAUC,QAAEA,EAAOT,SAAEA,EAAQh9gB,MAAEA,EAAKC,IAAEA,EAAGzP,SAAEA,KAAc6lE,EAAM,IAAK7lE,GAAYushB,GAAgBvyhB,EAAOwV,EAAOC,EAAK+8gB,GAAW,CACxI,IAAI5hR,EAAQ+hR,GAAiB3yhB,EAAOwV,EAAOC;AAC3Cw0D,GAAO2mM,EAAO,CACboiR,aACAC,UACAT,WACAruhB,KAAMysQ,EAAMp7P,MAAQA,GAAS,IAC7BoC,QAASg5P,EAAMn7P,IAAMm7P,EAAMp7P,OAAS,IACpCk+O,WAAYj+O,EAAMm7P,EAAMp7P,OAAS,MAE9Bs9gB,GAAQM,GAAcxiR,GAC1B5yN,EAAO9/C,KAAK0yQ,EACb,CACA,OAAO5yN,CACR,CA2BA,SAAS2rf,GAAc9V,GACtBA,EAAUx3J,WAAWznE,YAAc,CAACp/S,EAAOC,KAC1C,IAAMnd,SAASgpU,YAAEA,IAAkBuyN;AACnC,GAAIvyN,EAAYz1P,MAAQy1P,EAAYtrU,QAAU,MAAO,CACpD45hB,GAAYC,GAAYp6gB,GAAM6rT;AAC9B,IAAIsoO,EAAS/Z,GAAYH,GAAUj6gB;AAC/Bm0hB,EAASp0hB,IAAOA,EAAQo0hB,EAC7B,CACA,MAAO,CACNp0hB,QACAC,OAGH,CAMA,SAASo0hB,GAAiBvxiB,GACnB,eAAgBA,IACrB2xE,GAAO3xE,EAAS,CACfqqQ,iBAAkB,EAClB0yR,0BACAz9M,gBACAxB,WAAY,WACZG,aAAc,WACduzN,WAAY,GACZzvN,uBAAwB,EACxBZ,gBAAiB,CAChB7lT,KAAM,UACNC,OAAQ,WAETytS,YAAa,WACbD,YAAa,WACbmV,kBAAmB,IAEpBvsQ,GAAO3xE,EAAQ45T,MAAO,CACrB0lB,aAAc,mBACdmyN,QAAS,aACTze,KAAM,YAGT,CAIA,SAAS0e,GAAgB1xiB,GAClB,eAAgBA,IACrB2xE,GAAO3xE,EAAS,CACfiiV,mBAAoB,EACpB8qN,cACA/pN,sBAEDrxQ,GAAO3xE,EAAQ45T,MAAO,CAAEma,OAAQ,eAElC,CAIA,SAAS49N,GAAiBl7Z,GACnB,eAAgBA,GAAU9kE,GAAO8kE,EAAS,CAC/CqnM,WAAY7oB,GACZgpB,aAAchpB,GACd8sB,kBAAmB40M,GAAY1hO,IAC/B+T,YAAa/T,GACb8T,YAAa9T,GACbipB,aAAcy4M,GAAY1hO,KAE5B,CAMA,SAAS28O,GAAgB5xiB,GAClB,yBAA0BA,IAC/BA,EAAQ6xiB,6BACR7xiB,EAAQ8xiB,0BAA4B,EACpC9xiB,EAAQ+xiB,2BAA6B,EACrC/xiB,EAAQ45T,MAAMo4O,SAAW,eAE3B,CAmHA,SAASC,KAAW,IAAAC,EAAAC,EAAAC,EAAAC;AACnB,OAAAH,EAAA,IAAA/+b,QAAAg/b,EAAA,IAAAh/b,QAAAi/b,EAAA,IAAAj/b,QAAAk/b,EAAA,IAAAl/b,QAAO,MAEN,iBAAAypb,GACC,OAAOp2gB,GAAM+tL,GAAK29V,EAALl0iB,MACd,CACA,iBAAA4+hB,CAAkBj8hB,GACjB6lB,GAAM+tL,GAAK29V,EAALl0iB,MAAqB2C,EAC5B,CAEA,wBAAA+7hB,GACC,OAAOl2gB,GAAM+tL,GAAK49V,EAALn0iB,MACd,CACA,wBAAA0+hB,CAAyB/7hB,GACxB6lB,GAAM+tL,GAAK49V,EAALn0iB,MAA4B2C,EACnC,CAEA,gBAAA2xiB,GACC,OAAO9rhB,GAAM+tL,GAAK69V,EAALp0iB,MACd,CACA,gBAAAs0iB,CAAiB3xiB,GAChB6lB,GAAM+tL,GAAK69V,EAALp0iB,MAAoB2C,KAC3B,CAEA,QAAA44R,GACC,OAAO/yQ,GAAM+tL,GAAK89V,EAALr0iB,MACd,CACA,QAAAu7R,CAAS54R,GACR6lB,GAAM+tL,GAAK89V,EAALr0iB,MAAY2C,EACnB,CACA24E,YAAYiid,GA5BZ75W,GAAA1jL,KAAAk0iB,OAAc,GAOdxwX,GAAA1jL,KAAAm0iB,OAAqB,GAOrBzwX,GAAA1jL,KAAAo0iB,OAAa,GAOb1wX,GAAA1jL,KAAAq0iB,OAAK,GAQJ/9V,GAAK49V,EAALl0iB,KAAsBwoB,GAAU80gB,GAAKC,EAAW,qBAChDjnV,GAAK69V,EAALn0iB,KAA6BwoB,GAjEhC,SAA8B+0gB,GAC7B,MAAO,KACN,IACIgX,GADEvyiB,SAASi+U,aAAEA,EAAY8D,kBAAEA,IAAwBw5M;AAKvD,OAHA9hB,GAAQ,KAx4HV,IAAc94gB;AAy4HX4xiB,OAAyC,IAA3BxwN,EAA+Bq2M,GAAUn6M,GAAgB,KAAO,EAAI,GAz4HvEt9U,EAy4HgFy3hB,GAAUr2M,GAAqBq2M,GAAUn6M,GAx4H/Hl9U,KAAKq3G,KAAKz3G,IAw4HuI,KAEhJ4xiB,EAET,CATA,CAiE+DhX,KAC5DjnV,GAAK89V,EAALp0iB,KAAqBwoB,GAAQ,IAC7B8tL,GAAK+9V,EAALr0iB,KAAawoB,GA9ChB,SAAc+0gB,GACb,MAAO,KACN,IAAMv7hB,SAASi+U,aAAEA,EAAYC,aAAEA,IAAmBq9M;AAElD,OADAr9M,IAAiBD,EACV,CACNjpU,SAAUkpU,EACV9wT,MAAOgrgB,GAAUl6M,GAAgBk6M,GAAUn6M,IAG9C,CATA,CA8C+Bs9M,IAC7B,EAEF,CAIA,SAASiX,GAAQ9hT,GAAM,IAAA+hT,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC;AACtB,OAAAP,EAAA,IAAAt/b,QAAAu/b,EAAA,IAAAv/b,QAAAw/b,EAAA,IAAAx/b,QAAAy/b,EAAA,IAAAz/b,QAAA0/b,EAAA,IAAA1/b,QAAA2/b,EAAA,IAAA3/b,QAAA4/b,EAAA,IAAA5/b,QAAA6/b,EAAA,IAAA7/b,QAAO,cAAcu9I,EAEpB,kBAAAisS,GACC,OAAOn2gB,GAAM+tL,GAAKk+V,EAALz0iB,MACd,CACA,kBAAA2+hB,CAAmBh8hB,GAClB6lB,GAAM+tL,GAAKk+V,EAALz0iB,MAAsB2C,EAC7B,CAEA,SAAAk8hB,GACC,OAAOr2gB,GAAM+tL,GAAKm+V,EAAL10iB,MACd,CACA,SAAA6+hB,CAAUl8hB,GACT6lB,GAAM+tL,GAAKm+V,EAAL10iB,MAAa2C,EACpB,CAEA,UAAA+kD,GACC,OAAOl/B,GAAM+tL,GAAKo+V,EAAL30iB,MACd,CACA,UAAA0nD,CAAW/kD,GACV6lB,GAAM+tL,GAAKo+V,EAAL30iB,MAAc2C,EACrB,CAEA,YAAA+liB,GACC,OAAOlghB,GAAM+tL,GAAKq+V,EAAL50iB,MACd,CACA,YAAA0oiB,CAAa/liB,GACZ6lB,GAAM+tL,GAAKq+V,EAAL50iB,MAAgB2C,EACvB,CAEA,gBAAAsyiB,GACC,OAAOzshB,GAAM+tL,GAAKs+V,EAAL70iB,MACd,CACA,gBAAAi1iB,CAAiBtyiB,GAChB6lB,GAAM+tL,GAAKs+V,EAAL70iB,MAAoB2C,EAC3B,CAEA,kBAAAuyiB,GACC,OAAO1shB,GAAM+tL,GAAKu+V,EAAL90iB,MACd,CACA,kBAAAk1iB,CAAmBvyiB,GAClB6lB,GAAM+tL,GAAKu+V,EAAL90iB,MAAsB2C,EAC7B,CAEA,WAAAgmiB,GACC,OAAOnghB,GAAM+tL,GAAKw+V,EAAL/0iB,MACd,CACA,WAAA2oiB,CAAYhmiB,GACX6lB,GAAM+tL,GAAKw+V,EAAL/0iB,MAAe2C,EACtB,CAEA,iBAAAwyiB,GACC,OAAO3shB,GAAM+tL,GAAKy+V,EAALh1iB,MACd,CACA,iBAAAm1iB,CAAkBxyiB,GACjB6lB,GAAM+tL,GAAKy+V,EAALh1iB,MAAqB2C,EAC5B,CACA24E,YAAYiid,GACXv6X,MAAMu6X,GAzDP75W,GAAA1jL,KAAAy0iB,OAAe,GAOf/wX,GAAA1jL,KAAA00iB,OAAM,GAONhxX,GAAA1jL,KAAA20iB,OAAO,GAOPjxX,GAAA1jL,KAAA40iB,OAAS,GAOTlxX,GAAA1jL,KAAA60iB,OAAa,GAObnxX,GAAA1jL,KAAA80iB,OAAe,GAOfpxX,GAAA1jL,KAAA+0iB,OAAQ,GAORrxX,GAAA1jL,KAAAg1iB,OAAc,GASb1+V,GAAKm+V,EAALz0iB,KAAuBwoB,GAhJ1B,SAAwB+0gB,GACvB,MAAO,KACN,IACInkQ,GADA6lQ,eAAEA,EAAcD,UAAEA,EAAWh9hB,SAAS+8hB,uBAAEA,EAAsBh0N,YAAEA,EAAWC,YAAEA,IAAkBuyN;AAKnG,OAHA9hB,GAAQ,KACPriP,EAAS0lQ,GAAqB/zN,EAAaC,EAAa+zN,EAAwBC,EAAWC,KAErF7lQ,EAET,CATA,CAgJmDmkQ,KAChDjnV,GAAKo+V,EAAL10iB,KAAcwoB,GA7HjB,SAAe+0gB,EAAW1pC,GACzB,MAAO,KACN,IAEIgrC,GAFA7ghB,OAAEA,EAAQhc,SAASi+U,aAAEA,IAAmBs9M,GACxCqB,cAAEA,EAAaF,qBAAEA,EAAoBC,eAAEA,GAAmB9qC;AAK9D,OAHA4nB,GAAQ,KACPojB,EAAQJ,GAAY/E,GAAYZ,QAAgB,EAAG96gB,IAAUiiU,EAAcy+M,EAAsBC,EAAgBC,KAE3GC,EAET,CAVA,CA6HiCtB,EAAWv9hB;AACzC,IAAIk1hB,EAAM1sgB,GA9Lb,SAAuB+0gB,EAAW1pC,GACjC,MAAO,KACN,IAAIorC,eAAEA,GAAmB1B,GACrBxmS,KAAEA,GAAS88P,EACXnsc,EAAS,GACTghf,EAAW,GACXuM,EAAe,GACfC,EAAiB;AAUrB,OATAz5B,GAAQ,KACP,IAAK,IAAI/xgB,KAASu1hB,EAAgB,IAAK,IAAI1pd,KAAQwhL,EAAUqlS,GAAQ1yhB,EAAMyb,UAC1EujhB,EAAWA,EAASj2hB,OAAO2giB,GAAe1piB,EAAO6rE,IAC7C7rE,EAAMqsU,SAAQm/N,EAAiBA,EAAeziiB,OAAO8phB,GAAmB7yhB,EAAO6rE,MACzE7rE,EAAMqsU,OAAQk/N,EAAeA,EAAaxiiB,OAAO8phB,GAAmB7yhB,EAAO6rE,IACjF7tB,EAASA,EAAOj1C,OAAO2giB,GAAe1piB,EAAO6rE;CArJrD,SAAqB7tB,GACpB,IAAIzxB,EAAS,CAAC;AACd,IAAK,IAAIqkP,KAAS5yN,EAAQ,CACzB,IAAIg1e,WAAEA,GAAepiR,EACjBroH,EAAQh8H,EAAOymgB,GACfnqf,EAAS;AACb,GAAI0/G,GAASqoH,EAAMp7P,MAAQ+yI,EAAM9yI,IAAK,CACrC,KAAOozB,EAAS0/G,EAAMmjZ,QAAQ70iB,UAAsB0xJ,EAAMmjZ,QAAQ7igB,GAAQk7F,IAAI,GAAGtuH,KAAOm7P,EAAMp7P,SAAtDqzB,GACpC+nO,EAAMn7P,IAAM8yI,EAAM9yI,MAAK8yI,EAAM9yI,IAAMm7P,EAAMn7P,IAC9C,MAAO8yI,EAAQ,CACdmjZ,QAAS,GACTj2hB,IAAKm7P,EAAMn7P;AAER8yI,EAAMmjZ,QAAQ70iB,OAASgyC,EAAS,GAAG0/G,EAAMmjZ,QAAQxtiB,KAAK,IAC1DqqJ,EAAMmjZ,QAAQ7igB,GAAQ3qC,KAAK0yQ,GAC3BrkP,EAAOymgB,GAAczqY,EACrBqoH,EAAMroH,MAAQA,EACdqoH,EAAM+6R,YAAc9igB,CACrB,CACD,CAnBA,CAsJemV,GACZq1e,GAAoBkY,KAEd,CACNvtf,SACAghf,WACAuM,eACAC,kBAGH,CAxBA,CA8LqC3X,EAAWv9hB,OAAQ0nD,EAASl/B,GAAU,IAAMA,GAAM0sgB,GAAKxte,QAASghf,EAAWlghB,GAAU,IAAMA,GAAM0sgB,GAAKwT,UAAWuM,EAAezshB,GAAU,IAAMA,GAAM0sgB,GAAK+f,cAAeC,EAAiB1shB,GAAU,IAAMA,GAAM0sgB,GAAKggB;AACxP5+V,GAAKq+V,EAAL30iB,KAAewoB,GAAU,IAAMA,GAAMk/B,KACrC4uJ,GAAKs+V,EAAL50iB,KAAiBwoB,GAAU,IAAMA,GAAMkghB,KACvCpyV,GAAKu+V,EAAL70iB,KAAqBwoB,GAAU,IAAMA,GAAMyshB,KAC3C3+V,GAAKw+V,EAAL90iB,KAAuBwoB,GAAU,IAAMA,GAAM0shB;AAC7C,IAAI/L,EAAQ3ghB,GA1Kf,SAAwB+0gB,EAAW1pC,GAClC,MAAO,KACN,IAAI4wC,QAAEA,GAAYlH,GACdxmS,KAAEA,GAAS88P,EACX80C,EAAU,GACVwM,EAAgB;AACpB,IAAK,IAAI,CAAGzriB,KAAU+6hB,EAChB/6hB,GACL+xgB,GAAQ,KACP,IAAK,IAAIlmc,KAAQwhL,EAAUrtP,EAAMqsU,OAAQo/N,EAAgBA,EAAc1iiB,OAAO8phB,GAAmB7yhB,EAAO6rE,OACnGozd,EAAUA,EAAQl2hB,OAAO2giB,GAAe1piB,EAAO6rE;AAGtD,MAAO,CACNozd,UACAwM,iBAGH,CAlBA,CA0KwC5X,EAAWv9hB,OAAQ2oiB,EAAUnghB,GAAU,IAAMA,GAAM2ghB,GAAOR,SAAUwM,EAAgB3shB,GAAU,IAAMA,GAAM2ghB,GAAOgM;AACtJ7+V,GAAKy+V,EAAL/0iB,KAAgBwoB,GAAU,IAAMA,GAAMmghB,KACtCryV,GAAK0+V,EAALh1iB,KAAsBwoB,GAAU,IAAMA,GAAM2shB,IAC7C,EAEF,CACA,IAAIG,IAAWC,GAAA,IAAApgc,QAAG,cAAcq/b,GAAQP,OAEvC,QAAAl9S,GACC,OAAOvuO,GAAM+tL,GAAKg/V,GAALv1iB,MACd,CACA,QAAA+2P,CAASp0P,GACR6lB,GAAM+tL,GAAKg/V,GAALv1iB,MAAY2C,EACnB,CACA24E,YAAYiid,GACXv6X,MAAMu6X,GARP75W,GAAA1jL,KAAAu1iB,QAAK,GASJj/V,GAAKi/V,GAALv1iB,KAAawoB,GA5Of,SAAgB+0gB,EAAW1pC,GAC1B,MAAO,KACN,IAAImrC,UAAEA,EAAWh9hB,SAAS+giB,iBAAEA,EAAgBx3N,WAAEA,IAAiBgyN,GAC3DoB,eAAEA,GAAmB9qC,EACrBt+a,EAAO;AAkBX,OAjBAkmc,GAAQ,KACP,IAAIihB,EAAa;AACjB,IAAK,IAAIhigB,KAAQskgB,EAChBzpd,EAAK3tE,KAAK,CACT80hB,aACAC,QAAS,EACTT,cAAe,EACfh9gB,MAAOo6gB,GAAYF,GAAU1+f,GAAOikgB,EAAe9/gB,KACnDM,IAAKm6gB,GAAYF,GAAU1+f,GAAOikgB,EAAe7/gB,KACjD+7T,SAAUngT,EACVmigB,OAAQpD,GAAOL,GAAU1+f,IACzBhrB,SAAUyuhB,GAAazjgB,EAAM6wS,GAC7Br6G,UAAW6xU,EAAiBt/gB,KAAM9jB,GAAMi6hB,GAAWj6hB,EAAG+6B,QAErDgigB,IAGG,CAACnnd,GAEV,CAxBA,CA4OgCgod,EAAWv9hB,OAC1C;AAiDD,SAASw1iB,GAAQ9iT,GAAM,IAAA+iT;AACtB,OAAAA,EAAA,IAAAtgc,QAAO,cAAcu9I,EAEpB,iBAAAgjT,GACC,OAAOlthB,GAAM+tL,GAAKk/V,EAALz1iB,MACd,CACA,iBAAA01iB,CAAkB/yiB,GACjB6lB,GAAM+tL,GAAKk/V,EAALz1iB,MAAqB2C,EAC5B,CACA24E,YAAYiid,GACXv6X,MAAMu6X,GARP75W,GAAA1jL,KAAAy1iB,OAAc,GASbn/V,GAAKm/V,EAALz1iB,KAAsBwoB,GAxDzB,SAAuB+0gB,GACtB,MAAO,KACN,IAAIj/N,YAAEA,EAAW2gO,eAAEA,EAAcn4M,UAAEA,EAAW9kV,SAAS6xiB,0BAAEA,GAA6B9tK,YAAY2vK,cAAEA,IAAoBnY,EACpHt2gB,EAASyuhB,EAAgBA,EAAc5uN,GAAaA;AAKxD,OAJA20L,GAAQ,KACHo4B,IAA2B5shB,EAAS6/T,EAAUvgU,OAAQ21gB,GAAa+C,EAAex7gB,KAAM/Z,IAAW0yhB,GAAQ1yhB,EAAMyb,UAAY82gB,GAAgBvyhB,EAAO40T,EAAYp/S,MAAOo/S,EAAYn/S,IAAK+8gB,MACvLj1gB,EAAO1mB,SAAQ0mB,EAASm3gB,GAAgB,CAAC,CAAC,OAEzCn3gB,EAET,CAVA,CAwDiDs2gB,IAC/C,EAEF,CACA,IAAIoY,IAAWC,GAAA,IAAAzgc,QAAG,cAAcqgc,GAAQhB,GAAQP,QAE/C,QAAAl9S,GACC,OAAOvuO,GAAM+tL,GAAKq/V,GAAL51iB,MACd,CACA,QAAA+2P,CAASp0P,GACR6lB,GAAM+tL,GAAKq/V,GAAL51iB,MAAY2C,EACnB,CACA24E,YAAYiid,GACXv6X,MAAMu6X,GARP75W,GAAA1jL,KAAA41iB,QAAK,GASJt/V,GAAKs/V,GAAL51iB,KAAawoB,GA3Df,SAAgB+0gB,EAAW1pC,GAC1B,MAAO,KACN,IAAImrC,UAAEA,EAAWh9hB,SAAS6ziB,oBAAEA,EAAmB9S,iBAAEA,EAAgBx3N,WAAEA,IAAiBgyN,GAChFoB,eAAEA,EAAc+W,cAAEA,GAAkB7hD,EACpC98P,EAAO;AAyBX,OAxBA0kR,GAAQ,KACP,IAAIihB,EAAa,EACbtjI,EAAOy8I,EAAsB,CAAC7W,EAAW0W,GAAiB,CAACA,EAAe1W;AAC9E,IAAK,IAAIvuM,KAAS2oE,EAAK,GAAI,CAC1B,IAAI7jV,EAAO;AACX,IAAK,IAAIm7Q,KAAS0oE,EAAK,GAAI,CAC1B,IAAI1+X,EAAOm7gB,EAAsBplN,EAAQC,EACrCwrM,EAAW2Z,EAAsBnlN,EAAQD;AAC7Cl7Q,EAAK3tE,KAAK,CACT80hB,aACAC,QAAS,EACTT,WACAh9gB,MAAOo6gB,GAAYF,GAAU1+f,GAAOikgB,EAAe9/gB,KACnDM,IAAKm6gB,GAAYF,GAAU1+f,GAAOikgB,EAAe7/gB,KACjD+7T,SAAUngT,EACVmigB,OAAQpD,GAAOL,GAAU1+f,IACzBhrB,SAAUyuhB,GAAazjgB,EAAM6wS,GAC7Br6G,UAAW6xU,EAAiBt/gB,KAAM9jB,GAAMi6hB,GAAWj6hB,EAAG+6B,QAErDgigB,CACH,CACA3lS,EAAKnvP,KAAK2tE,EACX,IAEMwhL,EAET,CA/BA,CA2DgCwmS,EAAWv9hB,OAC1C,IAIG81iB,GAAStthB,GAAY;AACzB,SAASuthB,GAAM1Q,EAAUC,GACxB98gB,EAAO88gB;AACP,IAAI5qgB,EAAOlS,GAAO88gB,EAAS,OAAQ,OAAQ,GAAI0Q,EAAWxthB,GAAO88gB,EAAS,WAAY,OAAQ,GAC1FpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAW43H,EAAkBz5gB,GAAU,IAAMA,GAAM0sgB,GAAK+M,iBAAkBuC,EAAWh8gB,GAAU,IAAMA,GAAM0sgB,GAAKsP,UAAWsP,EAAuBtrhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ8xiB,sBAAuBC,EAAwBvrhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ+xiB,uBACxSryiB,EAAK8mB,QAAa,GAClBi5D,EAAUj5D,GAAU,IAAMowgB,GAAcpwgB,GAAMsrhB,GAAuB,MACxE5X,SAAUoJ,EAAQpJ,SAClBxhgB,KAAMA,IAASi/f,GAAYj/f,UAAe,IACvC,IAAM4qgB,EAAQpJ,SAAS3+X,MAAO/0I,GAAMg8gB,GAAUsP,uBAC9CmC,EAAYzthB,QAAa;AAC7BA,GAAc,KACbA,GAAMi5D,GACN6jd,EAAQpJ,SACRxhgB,IACA+gf,GAAQ,KACH/gf,IAAQ2jI,KAAO5qF,KAAK,IAAMjrD,GAAM9mB,IAAO8mB,GAAMythB,EAAWzthB,GAAMy5gB,GAAiBvof,OAAOhf,KAAU,KAAOlS,GAAM9mB,GAAI62hB,YAC5Gyd,MACRxthB,GAAMythB,OAAgB,GACtB53Y,KAAO5qF,KAAK,IAAMjrD,GAAM9mB,IAAOs0iB,IAAWxthB,GAAM9mB,GAAI62hB,iBAIvDrE,GAAQ,KACHnub,GAAWv9E,GAAMurhB,KAAyBvrhB,GAAMurhB,EAANvrhB,CAA6B,CAC1E0zgB,SAAUoJ,EAAQpJ,SAClBxhgB,KAAMA,IAASi/f,GAAYj/f,UAAe,EAC1Ch5B,GAAI8mB,GAAM9mB;AAGZ,IAAIowV,EAAOgkN;AAEXtthB,GADWA,GAAQspU,GACH,IAAMtpU,GAAMi5D,GAASotc,SAAWrmgB,EAAQ,IAAMA,GAAMi5D,GAASnpD,KAC7E9P,EAAQspU,GACRtpU,GAAYspU,EAAOw3M,GAAY9ghB,GAAM9mB,EAAI4niB,GAAU,IAAM9ghB,GAAM9mB,IAC/D8mB,GAASspU,EAAM,IAAMwmM,GAAY9vgB,GAAMi5D,GAASA,QAASj5D,GAAMi5D,GAASotc,UACxErmgB,GAAkB,IAAMA,GAAgBspU,EAAM,aAActpU,GAAMythB,KAClEzthB,GAAS68gB,EAAUvzM,GACnBtpU,GACD,CAGA,SAAS0thB,GAAM7Q,EAAUC,GACxB98gB,EAAO88gB;AACP,IAAIvvN,EAASvtT,GAAO88gB,EAAS,SAAU,MACnCpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWmpI,EAAahrhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQwxiB,YAC5FrK,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgB9uI,EAAO/yQ,GAAU,IAAMA,GAAM2ghB,GAAO5tQ,MACvF7gQ,EAAOlS,GAAU,IAAM88gB,EAAQpogB,IAAI29S,UAAW37T,EAAQsJ,GAAU,IAAM88gB,EAAQpogB,IAAIhe,OAAQg9gB,EAAW1zgB,GAAU,IAAM88gB,EAAQpogB,IAAIg/f,UAAWxshB,EAAW8Y,GAAU,IAAM88gB,EAAQpogB,IAAIxtB,UAAWwhN,EAAY1oM,GAAU,IAAM88gB,EAAQpogB,IAAIg0L,WACtOxvN,EAAK8mB,QAAa;AAStByghB,GAAQ5D,EAAU,CACjB,QAAA3qgB,GACC,OAAOlS,GAAMkS,EACd,EACA,UAAAq7S,GACC,OAAOA,GACR,EACA,YAAAmmN,GACC,OAAO1zgB,GAAM0zgB,EACd,EACAqL,cAlBD,SAAuBvgiB,EAAGwK,GACzB,GAAIukU,IAAU,OAAOvtT,GAAMkS;AACtB,CACJ,IAAI0ygB,EAAU/rhB,GAAKmH,GAAM9mB,IACrBwuK,EAASk9X,EAAQ9rhB,OAASkH,GAAM9mB,GAAI4mB;AACxC,OAAOgxgB,GAAYF,GAAU5wgB,GAAMtJ,IAASsJ,GAAM+yQ,GAAMvkR,SAAU/T,IAAOuO,EAAI47hB,EAAQv/hB,MAAQ2a,GAAMgrhB,GAAchrhB,GAAM+yQ,GAAMnsQ,MAAQ8gJ,IACtI,CACD,EAYC,YAAAxgK,GACC,OAAO8Y,GAAM9Y,EACd,EACA,aAAAwhN,GACC,OAAO1oM,GAAM0oM,EACd,EACA,SAAAsyU,GACC,OAAO8B,EAAQ9B,KAChB,EACA,SAAAD,GACC,OAAO+B,EAAQ/B,KAChB,EACA,MAAA7hiB,GACC,OAAO8mB,GAAM9mB,EACd,EACA,MAAAA,CAAO4niB,GACN9ghB,GAAM9mB,EAAI4niB,KACX,IAED9ghB,GACD,CAGA,SAAS2thB,GAAQ9Q,EAAUC,GAC1B98gB,EAAO88gB;AACP,IAAIpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWrlF,EAAmBx8T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQgjV,kBAAmB/E,EAAez3T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQi+U,cAAeuzN,EAAahrhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQwxiB,YACtOnpiB,EAASme,GAAU,IAAO7a,IAC7B,IAAIk/H,EAAOutZ,GAAU5xgB,GAAMy3T,IACvBpyU,EAAMy3hB,EAAQhrR,MAAMzsQ,IAAMg/H,EAAOrkH,GAAMgrhB,GACvClyhB,EAASgkhB,EAAQhrR,MAAMh5P,OAASurH,EAAOrkH,GAAMgrhB,IAAehrhB,GAAMgrhB,GAClEp2S,EAAYkoS,EAAQhrR,MAAMld,UAAYvwH,EAAOrkH,GAAMgrhB;AACvD7liB,EAAM,eAAiB23hB,EAAQhrR,MAAMoiR,WACrC/uhB,EAAM,qBAAuB,GAAGE,MAChCF,EAAM,kBAAoB,GAAG2T,MAC7B3T,EAAM,cAAgB,GAAG2T,MACzB3T,EAAM,kBAAoB,GAAGyvP;AAC7B,IAAIF,EAAW;AACf,GAAIooS,EAAQhrR,MAAMroH,MAAO,CACxB,IAAImkZ,EAAe9Q,EAAQhrR,MAAMroH,MAAMmjZ,QAAQ70iB;AAC/CoN,EAAM,WAAa,GAAG23hB,EAAQhrR,MAAM+6R,YAAc,IAClD1niB,EAAM,sBAAwB,SAASuvP,QAAek5S,OAAkB9Q,EAAQhrR,MAAM+6R,eACtF1niB,EAAM,eAAiB,SAASuvP,QAAek5S,OAAkB5thB,GAAMw8T,GAAoB,IAAM,EAAIoxN,EAAe9Q,EAAQhrR,MAAM+6R,aAAe,IAClJ,CACA,OAAO1niB;AAERk9hB,GAAkBxF,EAAU,CAC3B,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,UAAAjwQ,GACC,OAAOme,GAAMne,EACd,EACAqV,KAAM,MAEP8I,GACD,CAGA,SAAS6thB,GAAYhR,EAAUC,GAC9B98gB,EAAO88gB;AACP,IAAIpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWw4H,EAAWr6gB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ6giB,UAC1FnhiB,EAAK8mB,QAAa,GAClBsiP,EAAStiP,GAAQ,GACjB9e,EAAQ8e,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,OACtCW,EAASme,GAAU,IAAO7a,IAC7BA,EAAM,eAAiB,GAAG23hB,EAAQhrR,MAAMoiR,qBAAqB4I,EAAQhrR,MAAM1tI,MAAMrsI,UAC7EioB,GAAMsiP,IAAWtiP,GAAM9e,GAAOmiiB,WAASl+hB,EAAM,sBAAwB,GAAG6a,GAAM9e,GAAOmiiB,SAAWrjhB,GAAMsiP,QACnGn9P;AAKR,IAAIu5hB,EAAY,CAAE7hX,WAHlB,WACC78J,GAAMsiP,EAAQoyR,GAAkBoI,EAAQhrR,MAAOh5P,GAAOkH,GAAM9mB,IAAM,EAAG8mB,GAAMq6gB,OAC5E;AAoBA,OAlBAgI,GAAkBxF,EAAU,CAC3B,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,UAAAjwQ,GACC,OAAOme,GAAMne,EACd,EACAqV,KAAM,IACN,eAAAurhB,GACC,OAAOzihB,GAAMsiP,EACd,EACA,MAAAppQ,GACC,OAAO8mB,GAAM9mB,EACd,EACA,MAAAA,CAAO4niB,GACN9ghB,GAAM9mB,EAAI4niB,KACX,IAEM9ghB,EAAM0+gB,EACd,CAGA,IAAIoP,GAAS9thB,GAAY;AACzB,SAAS+thB,GAAelR,EAAUC,GACjC98gB,EAAO88gB;AACP,IAAIxzM,EAAOtpU,GAAO88gB,EAAS,OAAQ,EAAG,GAClCpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWw3H,EAASr5gB,GAAU,IAAMA,GAAM0sgB,GAAK2M,QAAS/0e,EAAMtkC,GAAU,IAAMA,GAAM0sgB,GAAKpoe,KAAMypB,EAAQ/tD,GAAU,IAAMA,GAAM0sgB,GAAK3+c,OAAQ0pQ,EAAez3T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQi+U,cAAeuzN,EAAahrhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQwxiB,YAAa53O,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OACpVutO,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgBiqI,EAAe9rhB,GAAU,IAAMA,GAAM2ghB,GAAOmL,cAC/FkC,EAAQhuhB,GAAU,KACrB,IAAK,IAAI0U,KAAOoogB,EAAQ/vd,KAAM,GAAIqkd,GAAW18f,EAAI29S,SAAUryT,GAAM+tD,IAAS,OAAOr5C;AACjF,MAAO,CAAC,IACLw/f,EAAal0gB,GAAU,IAAMA,GAAMguhB,GAAO9Z,YAAax9gB,EAAQsJ,GAAU,IAAMA,GAAMguhB,GAAOt3hB,OAAQC,EAAMqJ,GAAU,IAAMA,GAAMguhB,GAAOr3hB,KACvItR,EAAM2a,GAAU,KACnB,GAAIA,GAAMskC,GAAOtkC,GAAMtJ,IAAUsJ,GAAMskC,GAAOtkC,GAAMrJ,GAAM,OAAO;AACjE,IAAI0tH,EAAOutZ,GAAU5xgB,GAAMy3T;AAC3B,OAAQz3T,GAAMskC,GAAOtkC,GAAMtJ,IAAU,IAAM2tH,EAAOrkH,GAAMgrhB,KAErDiD,EAAkBjuhB,GAAU,MAC/BgG,KAAMhG,GAAMq5gB,GACZ7ygB,WAAY2tS,KAAU,QAAQn0S,GAAM8rhB,GAAgB,gBAAkB,gBAAgB9rhB,GAAM8rhB,GAAgB,QAC5GxlhB,UAAW;AAEZ,SAAS4nhB,EAAYh1iB,EAAIg7C,GACxBh7C,EAAGq4E,UAAU4I,OAAOn6D,GAAMozS,GAAOk8B,QAASp7S,EAAMi6f,eACjD,CACA,IAAI7sK,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrB+7J,EAAcR,IACjB,IAAIh8D,EAAMitE;AACV,IAAIjsiB;AACJme,GAAS6gd,EAAK,IAAMovD,GAAqBie,EAAaluhB,GAAMiuhB,KAC5DjuhB,GAAkB,KACjBA,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO0lB,cACjCj3U,EAASme,GAAY6gd,EAAK,GAAIh/d,EAAQ,CACrC,cAAe,GAAGme,GAAMk0gB,GAAc,YAAY5qM,KAAU,KAC5D,oBAAqB,GAAGtpU,GAAM3a,IAAQ,WAGxC2a,GAAS68gB,EAAUh8D;AAEpB7gd,GAAKtE,EAAOyihB,IACPn+gB,GAAMk0gB,IAA8B,OAAfl0gB,GAAM3a,IAAe84hB,EAASd,KAExDr9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CAGA,IAAIouhB,GAASpuhB,GAAY,+EACrBquhB,GAAWruhB,GAAY,4BACvBsuhB,GAAWtuhB,GAAY;AAC3B,SAASuuhB,GAAO1R,EAAUC,GACzB98gB,EAAO88gB;AACP,IAAIzxC,EAAYrre,GAAO88gB,EAAS,YAAa,GACzC/H,EAAYlzH,EAAW;AACtBwpF,KAAaA,EAAU,IAAIyhD,GAAY/X,IAC5C33G,EAAW,aAAciuE;AACzB,IAAIguC,EAASr5gB,GAAU,IAAM+0gB,EAAUsE,QAAS2C,EAAWh8gB,GAAU,IAAM+0gB,EAAUiH,UAAWxF,EAAYx2gB,GAAU,IAAM+0gB,EAAUyB,WAAY/6M,EAAgBz7T,GAAU,IAAM+0gB,EAAUv7hB,QAAQiiV,eAAgB8qN,EAAavmhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ+siB,YAAa1iS,EAAc7jP,GAAU,IAAM+0gB,EAAUv7hB,QAAQqqQ,aAAcw2R,EAAWr6gB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ6giB,UAAWmU,EAAmBxuhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQs/U,cAAexB,EAAat3T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ89U,YAAa0zN,EAAahrhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQwxiB,YAAavzN,EAAez3T,GAAU,IAAM+0gB,EAAUv7hB,QAAQi+U,cAAerkB,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OACxqBq5O,EAAezshB,GAAU,IAAMqre,IAAYohD,cAAeC,EAAiB1shB,GAAU,IAAMqre,IAAYqhD,gBAAiBC,EAAgB3shB,GAAU,IAAMqre,IAAYshD,eAAgBzM,EAAWlghB,GAAU,IAAMqre,IAAY60C,UAAWhhf,EAASl/B,GAAU,IAAMqre,IAAYnsc,QAASihf,EAAUnghB,GAAU,IAAMqre,IAAY80C,SAAU5xS,EAAOvuO,GAAU,IAAMqre,IAAY98P,MAAOu9S,EAAe9rhB,GAAU,IAAMqre,IAAYygD,cAAezV,EAAQr2gB,GAAU,IAAMqre,IAAYgrC,OAAQH,EAAuBl2gB,GAAU,IAAMqre,IAAY6qC,sBAAuBC,EAAiBn2gB,GAAU,IAAMqre,IAAY8qC,gBAC3kBsY,EAAezuhB,GAAQ,GACvButT,EAASvtT,GAAU,IApnBxB,SAA6By7T,EAAe4qM,GAC3C,IAAIxrhB,EAAO,UACP0yU,EAAS6iN,GAAc30M,EAAe,MAAS5gV,SAAS,CAAEknB,KAAMlnB,GAAQwrhB;AAE5E,MAD8B,iBAAnB94M,EAAOt0P,UAAsBs0P,EAAOt0P,QAAU,CAAEl3D,KAAMwrT,EAAOt0P,UACjEs0P,CACR,CALA,CAonBkDvtT,GAAMy7T,GAAgBz7T,GAAMg8gB,GAAUvgN;AAKvF,SAASonB,IACR7iV,GAAMq5gB,GAAQ53hB,YAAcmwhB,GAAU5xgB,GAAMs3T,IAAes6M,GAAU5xgB,GAAMm2gB,GAAgB9/gB,MAAQu7gB,GAAU5xgB,GAAMy3T,IAAiB,IAAMz3T,GAAMgrhB,EACjJ,CANAhrhB,GAAc,KACbA,GAAMs3T,GACDxiP,GAAM90E,GAAMw2gB,KAAa3gY,KAAO5qF,KAAK43R;AAK3C,IAAI2wL,EAAO;AACX,SAAS32W,IACR02W,GAAcC,EAAMxzgB,GAAMyshB,GAC3B,CACAzshB,GAAc,KACbA,GAAMq6gB,GACNx9W;AAED,IAAIykN,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrBu8J,EAAgBhB,IACnB,IAAIr/L,EAAU8wM;AACd,IAAIzsiB;AACJ,IAAI6siB,EAAW1uhB,GAAQw9U,GACnBojI,EAAQ5gd,GAAQ0uhB,GAChB7tE,EAAM7gd,GAAU4gd,EAAO,GACvBw8D,EAASp9gB,GAAQ6gd,GACjBw8D,EAAcR,IACjB,IAAIM,EAAan9gB;AAEjBA,GADaA,GAAcm9gB,GACT,IAAML,EAAQhqhB,QAChCkN,GAAS68gB,EAAUM,IAEhB8B,EAAapC,IAChB,IAAI8F,EAAa3ihB;AAEjBA,GADaA,GAAc2ihB,GACZ,GAAI,IAAM3ihB,GAAMuuO,GAAM,GAAIvuO,GAAS,CAAC68gB,EAAU8G,EAAQ7riB,KACpE,IAAIo6B,EAAOA,IAAMlS,GAAM2jhB,GAAQtxN;AAG/B2vN,GAAQnF,EAAU,CACjB,QAAA3qgB,GACC,OAAOA,GACR,EACAm/c,SAAU,EAAIv5e,EACd,YAAAoP,GACC,OARmB8Y,GAAM2jhB,GAAQz8hB,QASlC,EACA,aAAAwhN,GACC,OAVoB1oM,GAAM2jhB,GAAQj7U,SAWnC,EACA11M,SAAUA,CAAC6phB,EAAUgG,KACpBh9L,GAAUg3L,EAAU,CAAE,QAAA3qgB,GACrB,OAAOA,GACR,KAED05f,QAAS,CAAEx/gB,gBAGb4T,GAAS68gB,EAAU8F;AAEpB3ihB,GAAKo9gB,EAASe,IACTrB,EAAQhqhB,OAAQqrhB,EAASd,GACxBc,EAASc,GAAY,KAE3Bj/gB,EAAQ6gd;AACR,IAAI8tE,EAAS3uhB,GAAU6gd,EAAK,GACxBy8D,EAAgBT,IACnB,IAAImC,EAAQoP,KACRQ,EAAU5uhB,GAAQg/gB;AAEtBh/gB,GADaA,GAAQ4uhB,GACH,IAAM5uhB,GAAMutT,GAAQ84M,SAAWrmgB,EAAQ,IAAMA,GAAMutT,GAAQz9S,KAC7E9P,EAAQ4uhB,GACR5uhB,GAAS4uhB,EAAS,IAAM9e,GAAY9vgB,GAAMutT,GAAQt0P,QAASj5D,GAAMutT,GAAQ84M;AACzE,IAAIud,EAAQ5jhB,GAAU4uhB,EAAS;AAC/B5uhB,GAAO4jhB,EAAO,GAAI,IAAM5jhB,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,EAAMj1E,KAC9D,IAAI+2iB,EAAa7uhB;AAEjBA,GADaA,GAAc6uhB,GACZ,GAAI,IAAM7uhB,GAAM+sD,GAAO/sD,GAAS,CAAC68gB,EAAUnogB,EAAKyoD,KAC9D,CACC,IAAIkid,EAAKr/gB,GAAU,IAAMloB,EAAI,IAAMC,GAAOioB,GAAMuuO,KAAUpxK,EAAI,IAAMplF,GAAOioB,GAAM+sD;AACjF2ge,GAAM7Q,EAAU,CACf,OAAAnogB,GACC,OAAO1U,GAAM0U,EACd,EACA64S,UACA,SAAAytN,GACC,OAAOh7gB,GAAMq/gB,EACd,GAEF,IAEDr/gB,GAAS68gB,EAAUgS,KAEpB7uhB,EAAQ4jhB;AACR,IAAIC,EAAQ7jhB,GAAU4jhB,EAAO,GACzBkL,EAAS9uhB,GAAQ6jhB;AACrB7jhB,GAAO8uhB,EAAQ,GAAI,IAAM9uhB,GAAMyshB,GAAgB36R,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,EAAOh6Q,KACpFkoB,GAAY6thB,GAAYhR,EAAU,CAAE,SAAA/qR,GACnC,OAAO9xP,GAAM8xP,EACd,IAAM,CAACgvR,EAAShpiB,IAAM07hB,EAAK17hB,GAAKgpiB,EAAUhpiB,GAAM07hB,IAAO17hB,GAAI,IAAM,CAACkoB,GAAMloB;AAEzE,IAAIi3iB,EAAS/uhB,GAAU8uhB,EAAQ;AAC/B9uhB,GAAO+uhB,EAAQ,GAAI,IAAM/uhB,GAAM0shB,GAAkB56R,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,KAC/E+7R,GAAYhR,EAAU,CAAE,SAAA/qR,GACvB,OAAO9xP,GAAM8xP,EACd,MAGD9xP,GADaA,GAAU+uhB,EAAQ,GAChB,GAAI,IAAM/uhB,GAAM2shB,GAAgB3shB,GAAS,CAAC68gB,EAAU/qR,KAClE+7R,GAAYhR,EAAU,CAAE,SAAA/qR,GACvB,OAAO9xP,GAAM8xP,EACd,MAED9xP,EAAQ6jhB,GACR7jhB,EAAQg/gB,GACRh/gB,GAAkB,KACjBA,GAAYg/gB,EAAO,EAAGh/gB,GAAMozS,GAAOma,QACnCvtT,GAAY4uhB,EAAS,EAAG5uhB,GAAMozS,GAAO63O,SACrCjrhB,GAAY4jhB,EAAO,EAAG5jhB,GAAMozS,GAAO7kE,MACnCvuO,GAAY6jhB,EAAO,EAAG7jhB,GAAMozS,GAAO16N,UAEpC14E,GAAS68gB,EAAUmC;AAEpBh/gB,GAAK2uhB,EAASxQ,IACTn+gB,GAAMumhB,IAAapI,EAASb,KAEjCt9gB,EAAQ0uhB;AACR,IAAInK,EAAQvkhB,GAAU0uhB,EAAU,GAC5BM,EAAUhvhB,GAAQukhB;AACtBvkhB,GAAOgvhB,EAAS,GAAI,IAAMhvhB,GAAMq2gB,GAAQr2gB,GAAS,CAAC68gB,EAAUrQ,EAAM10hB,KACjE,IAAIm3iB,EAAQZ;AACZ,IAAIpE;AACJ,IAAIjqiB,EAAOggB,GAAQivhB;AACnBjvhB,GAAShgB,EAAM,IAAM8vhB,GAAY9vgB,GAAMwsgB,GAAM,KAC7CxsgB,EAAQivhB,GACRjvhB,GAAkB,KACjBA,GAAYivhB,EAAO,EAAGjvhB,GAAO,CAACA,GAAMozS,GAAOo5N,MAAO10hB,GAAKkoB,GAAMozS,GAAOk8B,UACpE26M,EAAWjqhB,GAAYivhB,EAAO,GAAIhF,EAAU,CAAE,8BAA+BjqhB,GAAMwsgB,GAAM,KACzFxsgB,GAAgBhgB,EAAM,WAAYggB,GAAMwsgB,GAAM,MAE/CxsgB,GAAS68gB,EAAUoS,KAEpBjvhB,EAAQgvhB;AACR,IAAIE,EAAQlvhB,GAAUgvhB,EAAS;AAC/BhvhB,GAAOkvhB,EAAO,GAAI,IAAMlvhB,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,EAAMj1E,KAC9D,IAAIq3iB,EAAcnvhB;AAElBA,GADcA,GAAcmvhB,GACZ,GAAI,IAAMnvhB,GAAM+sD,GAAO/sD,GAAS,CAAC68gB,EAAUnogB,EAAKyoD,KAC/D,CACC,IAAIkid,EAAKr/gB,GAAU,IAAMloB,EAAI,IAAMC,GAAOioB,GAAMuuO,KAAUpxK,EAAI,IAAMplF,GAAOioB,GAAM+sD;AACjF2ge,GAAM7Q,EAAU,CACf,OAAAnogB,GACC,OAAO1U,GAAM0U,EACd,EACA,SAAAsmgB,GACC,OAAOh7gB,GAAMq/gB,EACd,EACAtE,UAEF,IAED/6gB,GAAS68gB,EAAUsS,KAEpBnvhB,EAAQkvhB;AACR,IAAIE,EAAQpvhB,GAAUkvhB,EAAO,GACzBG,EAAUrvhB,GAAQovhB;AACtBpvhB,GAAOqvhB,EAAS,GAAI,IAAMrvhB,GAAMk/B,GAAU4yN,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,KACxE67R,GAAQ9Q,EAAU,CAAE,SAAA/qR,GACnB,OAAO9xP,GAAM8xP,EACd;AAED,IAAIw9R,EAAUtvhB,GAAUqvhB,EAAS;AACjCrvhB,GAAOsvhB,EAAS,GAAI,IAAMtvhB,GAAMkghB,GAAYpuR,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,KAC1E67R,GAAQ9Q,EAAU,CAAE,SAAA/qR,GACnB,OAAO9xP,GAAM8xP,EACd,MAGD9xP,GADcA,GAAUsvhB,EAAS,GACjB,GAAI,IAAMtvhB,GAAMmghB,GAAUnghB,GAAS,CAAC68gB,EAAU/qR,KAC7D67R,GAAQ9Q,EAAU,CAAE,SAAA/qR,GACnB,OAAO9xP,GAAM8xP,EACd,MAED9xP,EAAQovhB,GACRpvhB,EAAQukhB;AACR,IAAIgL,EAAUvvhB,GAAUukhB,EAAO,GAC3B5G,EAAgBd,IACnB,IAAI2S,EAAcxvhB,KACdyvhB,EAAUzvhB,GAAcwvhB,GACxBhS,EAAgBX,IACnB,IAAI6S,EAAc1vhB;AAElBA,GADcA,GAAc0vhB,GACT,IAAM5S,EAAQhkN,cACjC94T,GAAS68gB,EAAU6S,IAEhBC,EAAe9S,IAClBkR,GAAelR,EAAU,CAAE,QAAA9vd,GAC1B,OAAO/sD,GAAMuuO,GAAM,EACpB;AAEDvuO,GAAKyvhB,EAAUtR,IACVrB,EAAQhkN,aAAcqlN,EAASX,GAC9BW,EAASwR,GAAc,KAE7B3vhB,GAAS68gB,EAAU2S;AAEpBxvhB,GAAKuvhB,EAAUpR,IACVn+gB,GAAMwuhB,IAAmBrQ,EAASR,KAEvC39gB,EAAQw9U,GACRx9U,GAAYw9U,EAAUsjM,GAAY/L,EAAUsE,OAASyH,EAAS,IAAM/L,GAAWsE,QAC/Er5gB,GAASw9U,EAAS,IAAMr2U,GAAe01J,IACvC78J,GAAmBq/gB,IAClBr/gB,GAAYw9U,EAAS,EAAGx9U,GAAMozS,GAAO2mK,MACrCl4d,EAASme,GAAYw9U,EAAS,GAAI37V,EAAQw9hB,GAC1Cr/gB,GAAY0uhB,EAAU,EAAG1uhB,GAAMozS,GAAOtgT,QACtCkN,GAAY4gd,EAAO,EAAG5gd,GAAMozS,GAAO63O,SACnCjrhB,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO7kE,MACjCvuO,GAAYukhB,EAAO,EAAGvkhB,GAAMozS,GAAOruT,MACnCib,GAAYgvhB,EAAS,EAAGhvhB,GAAMozS,GAAO63O,SACrCjrhB,GAAYkvhB,EAAO,EAAGlvhB,GAAMozS,GAAO7kE,MACnCvuO,GAAYovhB,EAAO,EAAGpvhB,GAAMozS,GAAO16N,SACjC,CAAC,MACH,iBAAkB3gG,GAAOioB,GAAMuuO,IAASx2P,GAAOioB,GAAMuuO,GAAM,IAC3D,sBAAuBx2P,GAAOioB,GAAMuuO,GAAM,IAC1C,iBAAkBvuO,GAAM6jP,IAAgB,iBACxC,8BAA+B7jP,GAAMk2gB,GACrC,mBAAoB,GAAGl2gB,GAAMgrhB,IAAe,OAC5C,qBAAsB,GAAGhrhB,GAAMyuhB,IAAiB,OAChD,qBAAsB,GAAGzuhB,GAAM8rhB,IAAiB,WAEjD9rhB,GAAoB4gd,EAAO,cAAgBkgE,GAAYz1C,IAAYygD,aAAehL,GAClF9ghB,GAAoB0uhB,EAAU,eAAiB5N,GAAY9ghB,GAAMyuhB,EAAc3N,IAC/E9ghB,GAAS68gB,EAAUr/L,IAEhBrmW,EAAI6oB,GAAU,KAAO80E,GAAM90E,GAAMuuO,MAAWz5J,GAAM90E,GAAMuuO,GAAM;AAClEvuO,GAAKtE,EAAOyihB,IACPn+gB,GAAM7oB,IAAIgniB,EAASN,KAExB79gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CAGA,IAAI4vhB,GAAS5vhB,GAAY,UAAW;AACpC,SAASk/gB,GAAOrC,EAAUC,GACzB98gB,EAAO88gB;AACP,IAKI+S,EALA9a,EAAYlzH,EAAW,SACvBwpF,EAAY,IAAI8hD,GAAYpY,GAC5Bhnd,EAAQ/tD,GAAU,IAAM+0gB,EAAUhnd,OAAQsrd,EAASr5gB,GAAU,IAAM+0gB,EAAUsE,QAASC,EAAat5gB,GAAU,IAAM+0gB,EAAUuE,YAAa9C,EAAYx2gB,GAAU,IAAM+0gB,EAAUyB,WAAYl/M,EAAat3T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ89U,YAAa+1N,EAAsBrthB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ6ziB,qBAAsBj6O,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OAChX7kE,EAAOvuO,GAAU,IAAMqre,EAAU98P,MAAOu9S,EAAe9rhB,GAAU,IAAMqre,EAAUygD,cACjFgE,EAAiB9vhB,GAAQ;AAU7B,SAAS6iV,IACR,IAAI7hW,EAASgf,GAAMs5gB,IAAet5gB,GAAMs5gB,KAAgBuW,EAAa7vhB,GAAMs5gB,GAAct5gB,GAAM+tD;AAE/F,GADA8he,EAAa7vhB,GAAMs5gB,GACft4hB,GAAUgf,GAAMw2gB,GAAW,IAAMx1hB,GAAUgf,GAAMw2gB,GAAWvxZ,IAAI,GAAI,IAAK,IAAIl4D,KAAQ/sD,GAAMuuO,GAAO,CACrG,IAAI75N,EAAMq4C,EAAK;AACf,GAAIr4C,EAAI29S,UAAYrxU,EAAQ,CAC3Bgf,GAAMq5gB,GAAQp0hB,YAAc+a,GAAMq5gB,GAAQz2gB,YAAc5C,GAAM8rhB,KAAkB/ziB,GAAOioB,GAAMuuO,IAASx2P,GAAOg1E,KAAUr4C,EAAIw/f,WAAa,IAAM//N,MAAW,EAAI;AAC7J,KACD,CACD,CACD,CAlBAn0S,GAAc,KACTA,GAAMqthB,KACTrthB,GAAMw2gB,GACNx2gB,GAAMs3T,GACNt3T,GAAMs5gB,GACNzjY,KAAO5qF,KAAK43R;AAcd,CACC,MAAM/vV,EAAU+phB,IACf,IAAIM,EAAayS,KACbl0hB,EAAOsE,GAAcm9gB;AACzBn9gB,GAAOtE,EAAM,GAAI,IAAMsE,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,EAAMj1E,KAC7D,MAAMi4iB,EAAiB/vhB,GAAU,KAChC,MAAQqyT,SAAUngT,EAAIwhgB,SAAEA,EAAQxshB,SAAEA,EAAQwhN,UAAEA,GAAc1oM,GAAM+sD,GAAM;AACtE,MAAO,CACN76C,OACAwhgB,WACAxshB,WACAwhN;AAGF,CACC,IAAI22U,EAAKr/gB,GAAU,IAAMjoB,GAAOioB,GAAMuuO,GAAM,IAAM,EAAIvuO,GAAMozS,GAAOo4O,cAAgB,GAC/EpJ,EAAKpihB,GAAU,IAAMjoB,GAAOioB,GAAM+sD,KAClCije,EAAKhwhB,GAAU,IAAM,EAAIloB,EAAIC,GAAOioB,GAAM+sD,KAC1Ckje,EAAKjwhB,GAAU,IAAMA,GAAMqthB,IAAwBrthB,GAAM+vhB,GAAgB7oiB,UACzEgpiB,EAAKlwhB,GAAU,IAAMA,GAAMqthB,IAAwBrthB,GAAM+vhB,GAAgBrnV;AAC7Es5U,GAAQnF,EAAU,CACjB,QAAA3qgB,GACC,OAAOlS,GAAM+vhB,GAAgB79gB,IAC9B,EACA,aAAAlqB,GACC,OAAOgY,GAAMq/gB,EACd,EACA,WAAA1qgB,GACC,OAAO3U,GAAMqthB,EACd,EACA,WAAAh4M,GACC,OAAOr1U,GAAMoihB,EACd,EACA,YAAA/wD,GACC,OAAOrxd,GAAMgwhB,EACd,EACA,YAAA9oiB,GACC,OAAO8Y,GAAMiwhB,EACd,EACA,aAAAvnV,GACC,OAAO1oM,GAAMkwhB,EACd,EACAl9hB,SAAUA,CAAC6phB,EAAUgG,KACpB,IAAIC,EAAa9ihB,KACbo9gB,EAASp9gB,GAAc8ihB,GACvBzF,EAAcR,IACjBh3L,GAAUg3L,EAAU,CAAE,QAAA3qgB,GACrB,OAAOlS,GAAM+vhB,GAAgB79gB,IAC9B,KAEG+sgB,EAAapC,IAChB0Q,GAAM1Q,EAAU,CACf,YAAAnJ,GACC,OAAO1zgB,GAAM+vhB,GAAgBrc,QAC9B,EACA8Z,SAAWxuY,GAAU8wY,EAAeh4iB,GAAKknK,EAAQ;AAGnDh/I,GAAKo9gB,EAASe,IACTn+gB,GAAMqthB,GAAsBlP,EAASd,GACpCc,EAASc,GAAY,KAE3Bj/gB,GAAS68gB,EAAUiG,IAEpBlX,QAAS,CAAEx/gB,aAEb;AAED,IAAIo4hB,EAASxkhB,GAAUtE,EAAM,GACzB8hhB,EAAgBX,IACnB,IAAIsT,EAAanwhB;AAEjBA,GADaA,GAAcmwhB,GACZ,GAAI,IAAMnwhB,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,EAAMj1E,KAC/D,IAAIs4iB,EAAapwhB;AAEjBA,GADaA,GAAcowhB,GACZ,GAAI,IAAMpwhB,GAAM+sD,GAAO/sD,GAAS,CAAC68gB,EAAUnogB,EAAKyoD,KAC9D,MAAMkzd,EAAmBrwhB,GAAU,KAClC,MAAQqyT,SAAUngT,EAAIwhgB,SAAEA,EAAQxshB,SAAEA,EAAQwhN,UAAEA,GAAc1oM,GAAM0U;AAChE,MAAO,CACNxC,OACAwhgB,WACAxshB,WACAwhN;AAGF,CACC,IAAI22U,EAAKr/gB,GAAU,IAAM,EAAIm9D,EAAIrlF,EAAIC,GAAOioB,GAAM+sD;AAClDi1d,GAAQnF,EAAU,CACjB,QAAA3qgB,GACC,OAAOlS,GAAMqwhB,GAAkBn+gB,IAChC,EACA,YAAAm/c,GACC,OAAOrxd,GAAMq/gB,EACd,EACA,YAAAn4hB,GACC,OAAO8Y,GAAMqwhB,GAAkBnpiB,QAChC,EACA,aAAAwhN,GACC,OAAO1oM,GAAMqwhB,GAAkB3nV,SAChC,EACA11M,SAAUA,CAAC6phB,EAAUgG,KACpB,IAAIyN,EAAatwhB,KACbykhB,EAASzkhB,GAAcswhB,GACvBhT,EAAgBT,IACnB0Q,GAAM1Q,EAAU,CACf,YAAAnJ,GACC,OAAO1zgB,GAAMqwhB,GAAkB3c,QAChC,EACA,QAAAxhgB,GACC,OAAOlS,GAAMqwhB,GAAkBn+gB,IAChC,KAGEy9gB,EAAe9S,IAClBh3L,GAAUg3L,EAAU,CACnB,QAAA3qgB,GACC,OAAOlS,GAAMqwhB,GAAkBn+gB,IAChC,EACA,YAAAiwgB,GACC,OAAO2N,EAAeh4iB,EACvB;AAGFkoB,GAAKykhB,EAAStG,IACTn+gB,GAAMqthB,GAAsBlP,EAASb,GACpCa,EAASwR,GAAc,KAE7B3vhB,GAAS68gB,EAAUyT,IAEpB1kB,QAAS,CAAEx/gB,aAEb,IAED4T,GAAS68gB,EAAUuT,KAEpBpwhB,GAAS68gB,EAAUsT,IAEhBh5iB,EAAI6oB,GAAU,IAAMjoB,GAAOioB,GAAMuuO,GAAM,IAAM;AACjDvuO,GAAKwkhB,EAASrG,IACTn+gB,GAAM7oB,IAAIgniB,EAASX,KAExBx9gB,GAAS68gB,EAAUM,IAEdrkN,EAAgB+jN,IACrB,IAAI0T,EAAcvwhB,KACdwwhB,EAASxwhB,GAAcuwhB,GACvB5S,EAAgBd,IACnB,CACC,IAAIwC,EAAKr/gB,GAAU,IAAMA,GAAMuuO,GAAMnD,QACjCg3S,EAAKpihB,GAAU,IAAMjoB,GAAOioB,GAAMuuO,GAAM;AAC5Cw/S,GAAelR,EAAU,CACxB,QAAA9vd,GACC,OAAO/sD,GAAMq/gB,EACd,EACA,QAAA/1M,GACC,OAAOtpU,GAAMoihB,EACd,GAEF,GAEGqO,EAAe5T,IAClB,IAAI6T,EAAc1whB,KACd8uhB,EAAS9uhB,GAAc0whB,GACvB7S,EAAgBhB,IACnB,IAAI2S,EAAcxvhB;AAElBA,GADaA,GAAcwvhB,GACZ,GAAI,IAAMxvhB,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,KACzDghe,GAAelR,EAAU,CAAE,QAAA9vd,GAC1B,OAAO/sD,GAAM+sD,EACd,MAED/sD,GAAS68gB,EAAU2S,IAEhBmB,EAAM3whB,GAAU,IAAMjoB,GAAOioB,GAAMuuO,GAAM,IAAM,GAC/CqiT,EAAe/T,IAClB,CACC,IAAIwC,EAAKr/gB,GAAU,IAAMA,GAAMuuO,GAAMnD,QACjCg3S,EAAKpihB,GAAU,IAAMjoB,GAAOioB,GAAMuuO;AACtCw/S,GAAelR,EAAU,CACxB,QAAA9vd,GACC,OAAO/sD,GAAMq/gB,EACd,EACA,QAAA/1M,GACC,OAAOtpU,GAAMoihB,EACd,GAEF;AAEDpihB,GAAK8uhB,EAAS3Q,IACTn+gB,GAAM2whB,GAAMxS,EAASN,GACpBM,EAASyS,GAAc,KAE7B5whB,GAAS68gB,EAAU6T;AAEpB1whB,GAAKwwhB,EAASrS,IACTn+gB,GAAMqthB,GAAsBlP,EAASR,GACpCQ,EAASsS,GAAc,KAE7BzwhB,GAAS68gB,EAAU0T;AAEpBhC,GAAO1R,EAAU,CAChB,aAAAxxC,GACC,OAAOA,CACR,EACAv4e,SACAgmU,eACA8yM,QAAS,CACR94gB,UACAgmU,kBAGH,CACA94T,GACD,CAGA,IAAI6whB,GAA6B,CAChCzV,cAAc5hiB,GACb0xiB,GAAgB1xiB,GAChBuxiB,GAAiBvxiB,GACjB4xiB,GAAgB5xiB,GAChB2xE,GAAO3xE,EAAS,CACf6ziB,uBACAx+d,KAAM,yBAEP1D,GAAO3xE,EAAQ8tT,WAAY,CAC1BwpP,oBAAqB,MACrBC,qBAAsB,SAEvB5le,GAAO3xE,EAAQolF,MAAO,CACrBkyd,oBAAqB,CACpBxpP,WAAY6tO,GACZ1jX,UAAWu/X,GACXn5N,gBAAiB,CAAEljT,QAAS,QAC5BnmB,SAAU,CAAEu+D,KAAM,GAClBqmP,MAAOqiO,GAAU,yCAElBsb,qBAAsB,CACrBzpP,WAAY+tO,GACZ5jX,UAAWu/X,GACXxiiB,SAAU,CAAEizH,MAAO,GACnB2xL,MAAOqiO,GAAU,2CAGpB,EACA4F,cAAcprZ,GACbk7Z,GAAiBl7Z,EAClB;AAED,SAAS+ga,GAAoBjc,GAE5B,OADA8V,GAAc9V,GACPmK,EACR,CAGA,SAAS+R,GAAa/viB,EAAO6rE,EAAMmke,EAAWld,MAC7C,IACImd,EACAld,EACAC,EACAC,EACAT,EACAtuhB,EANAg/H,EAAQ,GAOR7+H,EAAQ;AACZ,IAAK,IAAM2uhB,WAAYnqf,EAAQoqf,QAASv4R,EAAK83R,SAAUU,EAAW/hN,SAAEA,EAAQgiN,OAAEA,EAAM39gB,MAAEA,EAAKC,IAAEA,EAAGzP,SAAEA,KAAc6lE,EAAW7lE,IACtHgqiB,EACCzd,GAAgBvyhB,EAAOmxU,EAAUgiN,EAAQD,KACvChwZ,EAAMrsI,SACVo5iB,EAAa9+N,EACb6hN,EAAanqf,EACboqf,EAAUv4R,EACV83R,EAAWU,GAEZhwZ,EAAMhlI,KAAKizU,GACX4hN,EAAUI,GAEDZ,GAAgBvyhB,EAAOwV,EAAOC,EAAKy9gB,KACxChwZ,EAAMrsI,SACVo5iB,EAAaz6hB,EACbw9gB,EAAanqf,EACboqf,EAAUv4R,EACV83R,EAAWU,EACXhvhB,EAAOkR,GAAIpV,EAAMwV,MAAQA,EAAO,GAAK,KAEtC0tH,EAAMhlI,KAAKizU,GACX4hN,EAAUt9gB,EACVpR,IAAU8Q,GAAIM,EAAKzV,EAAMyV,KAAOL,GAAII,EAAOxV,EAAMwV,QAAU;AAG7D,GAAI0tH,EAAMrsI,OAAQ,CACjB,IAAI+5Q,EAAQ+hR,GAAiB3yhB,EAAOiwiB,EAAYld;AAUhD,OATA9od,GAAO2mM,EAAO,CACboiR,aACAC,UACAT,WACAtvZ,QACAh/H,OACAG,UAEGyuhB,GAAQM,GAAcxiR,GACnB,CAACA,EACT,CACA,MAAO,EACR,CAiDA,SAASs/R,GAAkBC,EAAen/gB,GACzC,OAAOm/gB,EAAcn/gB,EAAKmgD,YAAc,CACvCh8D,IAAKo4S,GAAe,GACpBn4S,IAAKm4S,GAAe,YAEtB,CAyJA,IAAI6iP,IAASC,GAAA,IAAA5kc,QAAA6kc,GAAA,IAAA7kc,QAAA8kc,GAAA,IAAA9kc,QAAA+kc,GAAA,IAAA/kc,QAAAglc,GAAA,IAAAhlc,QAAAilc,GAAA,IAAAjlc,QAAAklc,GAAA,IAAAllc,QAAAmlc,GAAA,IAAAnlc,QAAAolc,GAAA,IAAAplc,QAAAqlc,GAAA,IAAArlc,QAAG,cAAcqgc,GAAQvB,OAErC,iBAAA4F,GACC,OAAOrxhB,GAAM+tL,GAAKwjW,GAAL/5iB,MACd,CACA,iBAAA65iB,CAAkBl3iB,GACjB6lB,GAAM+tL,GAAKwjW,GAAL/5iB,MAAqB2C,EAC5B,CAEA,YAAA83iB,GACC,OAAOjyhB,GAAM+tL,GAAKyjW,GAALh6iB,MACd,CACA,YAAAy6iB,CAAa93iB,GACZ6lB,GAAM+tL,GAAKyjW,GAALh6iB,MAAgB2C,EACvB,CAEA,QAAAo0P,GACC,OAAOvuO,GAAM+tL,GAAK0jW,GAALj6iB,MACd,CACA,QAAA+2P,CAASp0P,GACR6lB,GAAM+tL,GAAK0jW,GAALj6iB,MAAY2C,EACnB,CAEA,cAAA+3iB,GACC,OAAOlyhB,GAAM+tL,GAAK2jW,GAALl6iB,MACd,CACA,cAAA06iB,CAAe/3iB,GACd6lB,GAAM+tL,GAAK2jW,GAALl6iB,MAAkB2C,EACzB,CAEA,mBAAAg4iB,GACC,OAAOnyhB,GAAM+tL,GAAK4jW,GAALn6iB,MACd,CACA,mBAAA26iB,CAAoBh4iB,GACnB6lB,GAAM+tL,GAAK4jW,GAALn6iB,MAAuB2C,EAC9B,CAEA,aAAA+2iB,GACC,OAAOlxhB,GAAM+tL,GAAK6jW,GAALp6iB,MACd,CACA,aAAA05iB,CAAc/2iB,GACb6lB,GAAM+tL,GAAK6jW,GAALp6iB,MAAiB2C,EACxB,CAEA,UAAA+kD,GACC,OAAOl/B,GAAM+tL,GAAK8jW,GAALr6iB,MACd,CACA,UAAA0nD,CAAW/kD,GACV6lB,GAAM+tL,GAAK8jW,GAALr6iB,MAAc2C,EACrB,CAEA,YAAA+liB,GACC,OAAOlghB,GAAM+tL,GAAK+jW,GAALt6iB,MACd,CACA,YAAA0oiB,CAAa/liB,GACZ6lB,GAAM+tL,GAAK+jW,GAALt6iB,MAAgB2C,EACvB,CAEA,WAAAgmiB,GACC,OAAOnghB,GAAM+tL,GAAKgkW,GAALv6iB,MACd,CACA,WAAA2oiB,CAAYhmiB,GACX6lB,GAAM+tL,GAAKgkW,GAALv6iB,MAAe2C,EACtB,CAEA,mBAAAi4iB,GACC,OAAOpyhB,GAAM+tL,GAAKikW,GAALx6iB,MACd,CACA,mBAAA46iB,CAAoBj4iB,GACnB6lB,GAAM+tL,GAAKikW,GAALx6iB,MAAuB2C,EAC9B,CACA24E,YAAYiid,GACXv6X,MAAMu6X,GAvEP75W,GAAA1jL,KAAA+5iB,QAAc,GAOdr2X,GAAA1jL,KAAAg6iB,QAAS,GAOTt2X,GAAA1jL,KAAAi6iB,QAAK,GAOLv2X,GAAA1jL,KAAAk6iB,QAAW,GAOXx2X,GAAA1jL,KAAAm6iB,QAAgB,GAOhBz2X,GAAA1jL,KAAAo6iB,QAAU,GAOV12X,GAAA1jL,KAAAq6iB,QAAO,GAOP32X,GAAA1jL,KAAAs6iB,QAAS,GAOT52X,GAAA1jL,KAAAu6iB,QAAQ,GAOR72X,GAAA1jL,KAAAw6iB,QAAgB,GASflkW,GAAKyjW,GAAL/5iB,KAAsBwoB,GAvHxB,SAAuB+0gB,GACtB,MAAO,KACN,IAAI0B,eAAEA,EAAcD,UAAEA,EAAWh9hB,SAAS+8hB,uBAAEA,EAAsBh0N,YAAEA,EAAWC,YAAEA,IAAkBuyN,EAC/Fsc,EAAgB,CAAC;AAIrB,OAHAp+B,GAAQ,KACP,IAAK,IAAI/gf,KAAQskgB,EAAW6a,EAAcn/gB,EAAKmgD,WAAaikd,GAAqB/zN,EAAaC,EAAa+zN,EAAwB,CAACrkgB,GAAOukgB,KAErI4a,EAET,CATA,CAuHgDtc,KAC9CjnV,GAAK0jW,GAALh6iB,KAAiBwoB,GA9GnB,SAAkB+0gB,EAAW1pC,GAC5B,MAAO,KACN,IAAImrC,UAAEA,EAAWh9hB,SAASi+U,aAAEA,IAAmBs9M,GAC3Csc,cAAEA,EAAajb,cAAEA,EAAaF,qBAAEA,GAAyB7qC,EACzDgrC,EAAQ,CAAC;AAOb,OANApjB,GAAQ,KACP,IAAK,IAAI/gf,KAAQskgB,EAAW,CAC3B,IAAI/lgB,EAAMyB,EAAKmgD;AACfgkd,EAAM5lgB,GAAOA,KAAO4ghB,EAAgBpb,GAAY/jgB,EAAMulT,EAAcy+M,EAAsBmb,EAAc5ghB,GAAM2lgB,GAAiB,EAChI,IAEMC,EAET,CAbA,CA8GsCtB,EAAWv9hB,QAC/Cs2M,GAAK2jW,GAALj6iB,KAAawoB,GAjOf,SAAc+0gB,EAAW1pC,GACxB,MAAO,KACN,IAAImrC,UAAEA,EAAWh9hB,SAAS+giB,iBAAEA,EAAgBx3N,WAAEA,IAAiBgyN,GAC3Dsc,cAAEA,EAAanE,cAAEA,GAAkB7hD,EACnC98P,EAAO;AAyBX,OAxBA0kR,GAAQ,KACP,IAAIkhB,EAAU;AACd,IAAK,IAAIT,KAAYwZ,EAAe,CACnC,IAAInge,EAAO,GACPmnd,EAAa;AACjB,IAAK,IAAIhigB,KAAQskgB,EAAW,CAC3B,IAAIL,EAAiBkb,EAAcn/gB,EAAKmgD;AACxCtF,EAAK3tE,KAAK,CACT80hB,aACAC,UACAT,WACAh9gB,MAAOo6gB,GAAYF,GAAU1+f,GAAOikgB,EAAe9/gB,KACnDM,IAAKm6gB,GAAYF,GAAU1+f,GAAOikgB,EAAe7/gB,KACjD+7T,SAAUngT,EACVmigB,OAAQpD,GAAOL,GAAU1+f,IACzBhrB,SAAUyuhB,GAAazjgB,EAAM6wS,GAC7Br6G,UAAW6xU,EAAiBt/gB,KAAM9jB,GAAMi6hB,GAAWj6hB,EAAG+6B,QAErDgigB,CACH,CACA3lS,EAAKnvP,KAAK2tE,KACRond,CACH,IAEM5lS,EAET,CA/BA,CAiO8BwmS,EAAWv9hB,QACvCs2M,GAAK4jW,GAALl6iB,KAAmBwoB,GAlMrB,SAAoB+0gB,EAAW1pC,GAC9B,MAAO,KACN,IAAI90F,SAAEA,EAAU/8Z,SAAS20E,SAAEA,EAAQmqQ,YAAEA,IAAkBy8M,GACnDxmS,KAAEA,GAAS88P,EACXr+a,EAAS,GACTy0D,EAAQ;AA6BZ,OA5BAwxY,GAAQ,KACP,IAAIx+e,EACA+yF;AACJ,IAAK1yB,GAAMy5J,GAAO,IAAK,IAAI8jF,SAAEA,EAAQ6hN,WAAEA,KAAgB3lS,EAAK,GAU3D,GATIgoK,EAASh6Z,SAAS,WAAck4B,GAASA,EAAMvC,KAAK2vF,gBAAkBwwN,EAASxwN,gBAAiBptF,EAAM60T,MAEzG70T,EAAQ,CACPvC,KAAMmgT,EACN6hN,aACA5qM,KAAM,GAEPt8Q,EAAO5tE,KAAKq1B,KAET6jT,EAAa,CAChB,IAAIrmT,EAAS6/f,GAAcz/M,EAAUlkQ;AACjCq5C,GAAQA,EAAKv1F,SAAWA,IAAUu1F,EAAK8hO,MAE1C9hO,EAAO,CACNv1F,SACAC,KAAMmgT,EACN6hN,aACA5qM,KAAM,GAEP7nN,EAAMriI,KAAKooH,GAEb,IAGK,CACNx6C,SACAy0D,SAGH,CAvCA,CAkM0CszZ,EAAWv9hB,QACnDs2M,GAAK6jW,GAALn6iB,KAAwBwoB,GAAU80gB,GAAKC,EAAW,uBAClDjnV,GAAK8jW,GAALp6iB,KAAkBwoB,GA1FpB,SAAmB+0gB,GAClB,MAAO,KACN,IACImc,GADE13iB,SAASi+U,aAAEA,IAAmBs9M;AAKpC,OAHA9hB,GAAQ,KACPi+B,GAAatf,GAAUn6M,KAEjBy5N,EAET,CATA,CA0FwCnc;AACtC,IAAIrI,EAAM1sgB,GA7JZ,SAAqB+0gB,EAAW1pC,GAC/B,MAAO,KACN,IAAIorC,eAAEA,EAAgBj9hB,SAASkgV,iBAAEA,IAAuBq7M,GACpDxmS,KAAEA,EAAI2iT,UAAEA,GAAc7lD,EACtBnsc,EAAS,GACTghf,EAAW;AAOf,OANAjtB,GAAQ,KACP,IAAK,IAAI/xgB,KAASu1hB,EAAgB,IAAK,IAAI1pd,KAAQwhL,EAAUqlS,GAAQ1yhB,EAAMyb,SACrEu0hB,IAAahwiB,EAAMqsU,SAAQ2yN,EAAWA,EAASj2hB,OAAOgniB,GAAa/viB,EAAO6rE,EAAMmke,KAC/Ehyf,EAASA,EAAOj1C,OAAOgniB,GAAa/viB,EAAO6rE,EAAMmke;CAzI3D,SAAuBhyf,EAAQw9P,GAC9B,IAAI21P,EAAY,CAAC;AACjB,IAAK,IAAIv6iB,EAAI,EAAGA,EAAIonD,EAAOnnD,SAAUD,EAAG,CACvC,IAAIg6Q,EAAQ5yN,EAAOpnD,IACfo8hB,WAAEA,EAAUC,QAAEA,GAAYriR;AAC9BA,EAAM+9D,MAAQ/3U;AACd,IAAK,IAAIqlF,EAAI,EAAGA,EAAI20L,EAAM1tI,MAAMrsI,SAAUolF,EAAG,CAC5C,IAAI1sD,EAAM,GAAG0jgB,KAAWD,EAAa/2c;AACjCk1d,EAAU5hhB,GAAM4hhB,EAAU5hhB,GAAKrxB,KAAK0yQ,GACnCugS,EAAU5hhB,GAAO,CAACqhP,EACxB,CACAA,EAAMp9O,IAAM29gB,EAAU,GAAGle,KAAWD,IACrC,CACA,GAAIx3O,EAAQ,IAAK,IAAI5qC,KAAS5yN,EAAQ,CACrC,IAAIg1e,WAAEA,EAAUC,QAAEA,GAAYriR,EAC1B88H,EAAuB,IAAIrzX,IAAI,CAACu2P,IAChCroH,EAAQ;AACZ,IAAK,IAAItsE,EAAI,EAAGA,EAAI20L,EAAM1tI,MAAMrsI,SAAUolF,EAAG,IAAK,IAAIh+B,KAASkzf,EAAU,GAAGle,KAAWD,EAAa/2c,KAAWyxT,EAAKxmX,IAAI+2B,KACvHyvV,EAAKx/V,IAAI+P,GACTsqG,EAAMrqJ,KAAK+/C;AAEZ2yN,EAAMroH,MAAQA,CACf,CACD,CAvBA,CA0IiBvqG,EAAQw6R,KAEhB,CACNx6R,SACAghf,YAGH,CAjBA,CA6JkCnL,EAAWv9hB,OAAQ0nD,EAASl/B,GAAU,IAAMA,GAAM0sgB,GAAKxte,QAASghf,EAAWlghB,GAAU,IAAMA,GAAM0sgB,GAAKwT;AACtIpyV,GAAK+jW,GAALr6iB,KAAewoB,GAAU,IAAMA,GAAMk/B,KACrC4uJ,GAAKgkW,GAALt6iB,KAAiBwoB,GAAU,IAAMA,GAAMkghB,KACvCpyV,GAAKikW,GAALv6iB,KAAgBwoB,GA9IlB,SAAsB+0gB,EAAW1pC,GAChC,MAAO,KACN,IAAI4wC,QAAEA,GAAYlH,GACdxmS,KAAEA,EAAI2iT,UAAEA,GAAc7lD,EACtB80C,EAAU;AACd,IAAK,IAAI,CAAGj/hB,KAAU+6hB,EAChB/6hB,GACL+xgB,GAAQ,KACP,IAAK,IAAIlmc,KAAQwhL,EAAM4xS,EAAUA,EAAQl2hB,OAAOgniB,GAAa/viB,EAAO6rE,EAAMmke;AAG5E,OAAO/Q,EAET,CAbA,CA8IyCpL,EAAWv9hB,QAClDs2M,GAAKkkW,GAALx6iB,KAAwBwoB,GAzG1B,SAAyB+0gB,GACxB,MAAO,KACN,IACIh+R,GADAunF,UAAEA,GAAcy2M;AAKpB,OAHA9hB,GAAQ,KACPl8Q,EAASunF,EAAUrjU,KAAMy4gB,GAAalB,GAAWkB,GAAU1ghB,SAASjb,UAE9Dg/P,EAET,CATA,CAyGoDg+R,IACnD;AAoDD,SAAS52c,GAAM0+c,EAAUC,GACxB98gB,EAAO88gB;AACP,IAAIpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWw4H,EAAWr6gB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ6giB,UAAW3gN,EAAmB15T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQkgV,kBAAmBjC,EAAez3T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQi+U,cAAe66N,EAAYtyhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ84iB,WAC9R3R,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgBqvI,EAAYlxhB,GAAU,IAAMA,GAAM2ghB,GAAOuQ,WAC5Fh4iB,EAAK8mB,QAAa,GAClBsiP,EAAStiP,GAAQ,GACjB9e,EAAQ8e,GAAU,IAAM88gB,EAAQhrR,MAAM5wQ,OACtCW,EAASme,GAAU,IAAO7a,IAC7BA,EAAM,eAAiB,GAAG23hB,EAAQhrR,MAAMoiR,qBAAqB4I,EAAQhrR,MAAM1tI,MAAMrsI,SACjFoN,EAAM,YAAc23hB,EAAQhrR,MAAMqiR,QAC7Bn0gB,GAAMkxhB,KACV/riB,EAAM,sBAA2B23hB,EAAQhrR,MAAM1sQ,KAAOwshB,GAAU5xgB,GAAMy3T,IAAiBz3T,GAAMsyhB,GAA/D,KAC9BntiB,EAAM,eAAoB23hB,EAAQhrR,MAAMvsQ,MAAQqshB,GAAU5xgB,GAAMy3T,IAAiBz3T,GAAMsyhB,GAAhE;AAExB,IAAIjwS,EAAYriP,GAAMsiP;AACtB,GAAItiP,GAAM9e,GAAOmiiB,QAAS,CACzB,IAAKA,EAASC,GAAYtjhB,GAAM9e,GAAOmiiB;AACnCvG,EAAQhrR,MAAMqiR,UAAYmP,IAAUjhS,EAAYghS,EACrD,CAEA,OADAl+hB,EAAM,sBAAwB,GAAGk9P,MAC1Bl9P;AAKR,IAAIu5hB,EAAY,CAAE7hX,WAHlB,WACC78J,GAAMsiP,EArVR,SAAyBwP,EAAOh5P,EAAQo4hB,EAAWtyD,EAAM,EAAGliM,MAC3D,IAAIr3S,EAAM,EACNC,EAASD,EAAMyT;AACnB,GAAI4jS,EAAQ,CACX,IAAK,IAAIv9P,KAAS2yN,EAAMroH,MAAWtqG,EAAM0wR,MAAQ/9D,EAAM+9D,OAAS,QAAS1wR,GAASA,EAAM75C,OAASs5e,EAAMv5e,IAAKA,EAAM85C,EAAM75C,OAASs5e;AACjIt5e,EAASD,EAAMyT,CAChB,KAAO,CACN,IAAIu5hB,EAAYvgS,EAAMp9O;AACtB29gB,EAAU1ohB,KAAK,CAACrxB,EAAGma,KAAOna,EAAE+M,KAAOvC,OAAOi9G,oBAAsBttG,EAAEpN,KAAOvC,OAAOi9G;AAChF,IAAK,IAAIwyb,KAAYF,EACpB,GAAIE,IAAazgS,GAAW,QAASygS,IAChCrB,GAAap/R,EAAMp7P,MAAQ67hB,EAAS57hB,KAAOm7P,EAAMn7P,IAAM47hB,EAAS77hB,QAAUrR,EAAMktiB,EAASjtiB,QAAUA,EAASitiB,EAASltiB,IAAK,CAC9H,IAAImQ,EAAS+8hB,EAASjtiB,OAASD,EAAMu5e;AACrCv5e,GAAOmQ,EACPlQ,GAAUkQ,CACX,CAEF,CAKA,OAJA21D,GAAO2mM,EAAO,CACbzsQ,MACAC,WAEMD,CACR,CAvBA,CAqVgCy3hB,EAAQhrR,MAAOh5P,GAAOkH,GAAM9mB,IAAM8mB,GAAMkxhB,GAAYlxhB,GAAMq6gB,GAAWr6gB,GAAM05T,OAC1G;AAEA,CACC,IAAI2lN,EAAKr/gB,GAAU,IAAM,CAACA,GAAMsiP,GAASw6R,EAAQhrR,MAAMqiR;AACvDkO,GAAkBxF,EAAU,CAC3B,SAAA/qR,GACC,OAAOgrR,EAAQhrR,KAChB,EACA,UAAAjwQ,GACC,OAAOme,GAAMne,EACd,EACAqV,KAAM,IACN,eAAAurhB,GACC,OAAOzihB,GAAMq/gB,EACd,EACA,MAAAnmiB,GACC,OAAO8mB,GAAM9mB,EACd,EACA,MAAAA,CAAO4niB,GACN9ghB,GAAM9mB,EAAI4niB,KACX,GAEF,CACA,OAAO9ghB,EAAM0+gB,EACd,CAGA,IAAI8T,GAASxyhB,GAAY,iBACrByyhB,GAAWzyhB,GAAY,qBACvB0yhB,GAAW1yhB,GAAY,uBAAwB;AACnD,SAAS2yhB,GAAS9V,EAAUC,GAC3B98gB,EAAO88gB;AACP,IAAIpJ,EAAW1zgB,GAAO88gB,EAAS,WAAY,GACvCpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWvjF,EAAYt+T,GAAU,IAAMA,GAAM0sgB,GAAKpuM,WAAYzvQ,EAAO7uD,GAAU,IAAMA,GAAM0sgB,GAAK79c,MAAOy4O,EAAatnS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ8tT,YAAa9iP,EAAQxkD,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQgrE,OAAQoue,EAAiB5yhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQo5iB,gBAAiBx/O,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OACxWk/N,EAAUtygB,GAAQ,CAAC,GACnB+1gB,EAAW/1gB,GAAU,IAAM0zgB,IAAWqC,UACtChhY,EAAQ/0I,GAAU,IAAMA,GAAMsnS,GAAYtnS,GAAM+1gB,GAAY,WAAa;AAI7E,SAAS2L,EAAQ35N,GAChB2rN,IAAWqC,SAAW/1gB,GAAM+1gB,GAAW/1gB,GAAM+1gB,IAC7C57c,EAAOn6D,GAAMsygB,GAASt/gB,UACtBgN,GAAMs+T,GAAWvmV,OAASioB,GAAMs+T,GAAWvmV,OACvCwlG,GAAWv9E,GAAM4yhB,KAAkB5yhB,GAAM4yhB,EAAN5yhB,CAAsB,CAC5D0zgB,SAAUA,IACV3rN,UACAl5P,KAAM+jd,GAAqB5ygB,GAAM6uD,KAEnC,CACA,SAASsL,EAAOnnE,GACf,IAAK,IAAIsrJ,KAAStrJ,EAAU,CAC3B,IAAIs/gB,EAAUE,GAAWl0X;AACzBg0X,EAAQhjM,QAAUtvU,GAAM+1gB,GACpBz3X,EAAMy3X,UAAU57c,EAAOm4c,EAAQt/gB,SACpC,CACD,CAnBAgN,GAAkB,KACjBA,GAAMsygB,EAASE,GAAWkB;AAmB3B,IAAIpyJ,EAAWoxK,KACXh3hB,EAAOsE,GAAcshX;AACzBthX,GAAOtE,EAAM,GAAI,IAAMrQ,MAAM2U,GAAMsygB,GAAS1mL,OAAQ5rV,GAAS,CAAC68gB,EAAUjxL,KACvE,IAAItiB,EAAOkpN;AACXxyhB,GAAkB,IAAMA,GAAYspU,EAAM,EAAGtpU,GAAMozS,GAAOy/O,WAC1D7yhB,GAAS68gB,EAAUvzM;AAEpB,IAAIwpN,EAAS9yhB,GAAUtE,EAAM,GACzB0hhB,EAASp9gB,GAAQ8yhB,GACjBzV,EAAcR,IACjB,IAAIhwY,EAAS4lZ;AACbzyhB,GAAS6sI,EAAQ,IAAMijY,GAAY9vgB,GAAMwkD,GAAOxkD,GAAM+1gB,GAAY,WAAa,YAC/E/1gB,GAAkB,KACjBA,GAAY6sI,EAAQ,EAAG7sI,GAAMozS,GAAOvmK,QACpC7sI,GAAgB6sI,EAAQ,aAAc7sI,GAAM+0I,IAC5C/0I,GAAgB6sI,EAAQ,QAAS7sI,GAAM+0I,MAExC/0I,GAAY,QAAS6sI,EAAQ60Y,GAC7B1hhB,GAAS68gB,EAAUhwY;AAEpB7sI,GAAKo9gB,EAASe,IACTn+gB,GAAMsygB,GAASt/gB,UAAUjb,QAAQomiB,EAASd,KAE/Cr9gB,EAAQ8yhB,GACR9yhB,GAAkB,IAAMA,GAAY8yhB,EAAQ,EAAG9yhB,GAAMozS,GAAOy/O,WAC5D7yhB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CACAA,GAAW,CAAC;AAGZ,IAAI+yhB,GAAS/yhB,GAAY,eA8CrBgG,GAAOhG,GAAY,iBACnBgzhB,GAAShzhB,GAAY,oBACrBizhB,GAASjzhB,GAAY,4BACrBkzhB,GAASlzhB,GAAY,uCACrBmzhB,GAASnzhB,GAAY;AACzB,SAASitY,GAAK4vI,EAAUC,GACvB98gB,EAAO88gB;AACP,IAAI/H,EAAYlzH,EAAW,SACvBwpF,EAAY,IAAIimD,GAAUvc;AAC9B33G,EAAW,aAAciuE;AACzB,IAGIwkD,EAHAxW,EAASr5gB,GAAU,IAAM+0gB,EAAUsE,QAASC,EAAat5gB,GAAU,IAAM+0gB,EAAUuE,YAAa0C,EAAWh8gB,GAAU,IAAM+0gB,EAAUiH,UAAWjud,EAAQ/tD,GAAU,IAAM+0gB,EAAUhnd,OAAQyod,EAAYx2gB,GAAU,IAAM+0gB,EAAUyB,WAAY3yR,EAAc7jP,GAAU,IAAM+0gB,EAAUv7hB,QAAQqqQ,aAAcw2R,EAAWr6gB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ6giB,UAAWvhN,EAAe94T,GAAU,IAAM+0gB,EAAUv7hB,QAAQs/U,cAAexB,EAAat3T,GAAU,IAAM+0gB,EAAUv7hB,QAAQ89U,YAAaG,EAAez3T,GAAU,IAAM+0gB,EAAUv7hB,QAAQi+U,cAAeuzN,EAAahrhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQwxiB,YAAasH,EAAYtyhB,GAAU,IAAM+0gB,EAAUv7hB,QAAQ84iB,WAAYl/O,EAAQpzS,GAAU,IAAM+0gB,EAAUv7hB,QAAQ45T,OAAQolB,EAAoBx4T,GAAU,IAAM+0gB,EAAUv7hB,QAAQg/U,mBAC5vBt5R,EAASl/B,GAAU,IAAMqre,EAAUnsc,QAASghf,EAAWlghB,GAAU,IAAMqre,EAAU60C,UAAWC,EAAUnghB,GAAU,IAAMqre,EAAU80C,SAAU8R,EAAWjyhB,GAAU,IAAMqre,EAAU4mD,UAAWZ,EAAgBrxhB,GAAU,IAAMqre,EAAUgmD,eAAgB9iT,EAAOvuO,GAAU,IAAMqre,EAAU98P,MAAO2jT,EAAalyhB,GAAU,IAAMqre,EAAU6mD,YAAaC,EAAkBnyhB,GAAU,IAAMqre,EAAU8mD,iBAAkBjB,EAAYlxhB,GAAU,IAAMqre,EAAU6lD,WAAYkB,EAAkBpyhB,GAAU,IAAMqre,EAAU+mD,iBAAkBtG,EAAe9rhB,GAAU,IAAMqre,EAAUygD,cAAe5V,EAAuBl2gB,GAAU,IAAMqre,EAAU6qC,sBAAuBgX,EAAgBlthB,GAAU,IAAMqre,EAAU6hD,eACxqBuB,EAAezuhB,GAAQ;AAO3B,SAAS6iV,IACR,IAAI59V,EAAa,EACbjE,EAASgf,GAAMs5gB,IAAet5gB,GAAMs5gB,KAAgBuW,EAAa7vhB,GAAMs5gB,GAAct5gB,GAAM+tD;AAC/F8he,EAAa7vhB,GAAMs5gB;AACnB,IAAI8Z,EAAkBpyiB,EAASgf,GAAMw2gB,GAAW,IAAMx1hB,EAASgf,GAAMw2gB,GAAWvxZ,IAAI;AACpF,GAAIjlH,GAAMkxhB,IACT,IAAKkC,EAAiB,CACrB,IAAIrme,EAAO/sD,GAAMuuO,GAAM;AACvB,IAAK,IAAI75N,KAAOq4C,EAAM,GAAIr4C,EAAI29S,UAAYrxU,EAAQ,CACjDgf,GAAMq5gB,GAAQp0hB,YAAc+a,GAAMq5gB,GAAQz2gB,YAAc5C,GAAM8rhB,IAAiB/ziB,GAAOg1E,IAASr4C,EAAIw/f,WAAa,IAAM//N,MAAW,EAAI;AACrI,KACD,CACD,MACM,CACN,IAAK,IAAIjiS,KAAQlS,GAAMw2gB,GAAY,CAClC,IAAIL,EAAiBib,GAAkBpxhB,GAAMqxhB,GAAgBn/gB;AAC7D,GAAIkhhB,GAAmBlhhB,GAAQlxB,EAAQ,CACtCiE,GAAcqR,GAAID,GAAIu7gB,GAAU5xgB,GAAMs3T,IAAcs6M,GAAUuE,EAAe7/gB,MAAQs7gB,GAAUuE,EAAe9/gB,KAAM;AACpH,KACD,CAAOpR,GAAc2shB,GAAUuE,EAAe7/gB,KAAOs7gB,GAAUuE,EAAe9/gB,IAC/E,CACA2J,GAAMq5gB,GAAQp0hB,WAAaA,EAAa2shB,GAAU5xgB,GAAMy3T,IAAiBz3T,GAAMsyhB,IAAcn+O,MAAW,EAAI,EAC7G,CACD,CA5BAn0S,GAAc,KACbA,GAAMs3T,GACNt3T,GAAMs5gB,GACDxkc,GAAM90E,GAAMw2gB,KAAa3gY,KAAO5qF,KAAK43R;AA0B3C,IAAI2wL,EAAO;AACX,SAAS32W,IACR02W,GAAcC,EAAMxzgB,GAAMk/B,GAC3B,CACAl/B,GAAc,KACbA,GAAMq6gB,GACNx9W;AAED,IAAIykN,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrB08J,EAAgBnB,IACnB,IAAIr/L,EAAU21M;AACd,IAAItxiB;AACJ,IAAIiR,EAASkN,GAAQw9U,GACjBojI,EAAQ5gd,GAAQlN,GAChB+td,EAAM7gd,GAAU4gd,EAAO,GACvBw8D,EAASp9gB,GAAQ6gd,GACjBw8D,EAAcR,IACjB,IAAIM,EAAan9gB;AAEjBA,GADaA,GAAcm9gB,GACZ,GAAI,IAAMn9gB,GAAMkyhB,GAAYlle,OAAQhtD,GAAS,CAAC68gB,EAAU8G,KACtE,IAAIzxgB,EAAOA,IAAMlS,GAAM2jhB,GAAQzxgB;AAG/B8vgB,GAAQnF,EAAU,CACjB,aAAA70hB,GACC,OAAOgY,GAAMozS,GAAOo4O,QACrB,EACA,YAAAn6D,GACC,OAPqBrxd,GAAM2jhB,GAAQzP,UAQpC,EACA,WAAA7+L,GACC,OATer1U,GAAM2jhB,GAAQr6M,IAU9B,EACA24M,WACAttgB,WACA3hB,SAAUA,CAAC6phB,EAAUgG,KACpB,IAAI7iiB,EAAOgmB;AACXhG,GAAShgB,EAAM,IAAM8vhB,GAAY9vgB,GAAMmyhB,GAAiBjhgB,OAAOhf,OAC/DlS,GAAmBq/gB,GAAOr/gB,GAAgBhgB,EAAM,WAAYq/hB,GAAK,CAAC,IAAMziP,GAAY1qR,IAAQ,MAC5FlS,GAAS68gB,EAAU78hB,IAEpB4rhB,QAAS,CAAEx/gB,gBAGb4T,GAAS68gB,EAAUM,IAEhBhmiB,EAAI6oB,GAAU,IAAMjoB,GAAOioB,GAAMkyhB,GAAYlle,QAAU;AAC3DhtD,GAAKo9gB,EAASe,IACTn+gB,GAAM7oB,IAAIgniB,EAASd;AAExB,IAAI6G,EAASlkhB,GAAUo9gB,EAAQ,GAC3BE,EAAgBT,IACnB,IAAIiG,EAAa9ihB;AAEjBA,GADaA,GAAc8ihB,GACZ,GAAI,IAAM9ihB,GAAMkyhB,GAAYzwa,MAAOzhH,GAAS,CAAC68gB,EAAU8G,KAKrE,MAAMxI,EAAan7gB,GAAU,IAAMgygB,GAJhBhygB,GAAM2jhB,GAAQ1xgB,OAChBjS,GAAM2jhB,GAAQzxgB,KAG8ClS,GAAMw4T,GAAoBx4T,GAAMg8gB,GAAUxjN;AACvHwpN,GAAQnF,EAAU,CACjB,aAAA70hB,GACC,OAAOgY,GAAMozS,GAAOo4O,QACrB,EACA,YAAAn6D,GACC,OARqBrxd,GAAM2jhB,GAAQzP,UASpC,EACA,WAAA7+L,GACC,OAVer1U,GAAM2jhB,GAAQr6M,IAW9B,EACA24M,WACAttgB,WACA3hB,SAAUA,CAAC6phB,EAAUgG,KACpB,IAAIiQ,EAASE;AAEbhzhB,GADaA,GAAQ8yhB,GACH,IAAM9yhB,GAAMm7gB,GAAY9U,SAAWrmgB,EAAQ,IAAMA,GAAMm7gB,GAAYrrgB,KACrF9P,EAAQ8yhB,GACR9yhB,GAAS8yhB,EAAQ,IAAMhjB,GAAY9vgB,GAAMm7gB,GAAYlid,QAASj5D,GAAMm7gB,GAAY9U,UAChFrmgB,GAAkB,IAAMA,GAAY8yhB,EAAQ,EAAG9yhB,GAAMozS,GAAO+nO,aAC5Dn7gB,GAAS68gB,EAAUiW,IAEpBlnB,QAAS,CAAEx/gB,gBAGb4T,GAAS68gB,EAAUiG,IAEhB6N,EAAM3whB,GAAU,IAAMjoB,GAAOioB,GAAMkyhB,GAAYzwa,OAAS;AAC5DzhH,GAAKkkhB,EAAS/F,IACTn+gB,GAAM2whB,IAAMxS,EAASb;AAE1B,IAAIkT,EAASxwhB,GAAUkkhB,EAAQ;AAC/BlkhB,GAAOwwhB,EAAQ,GAAI,IAAMxwhB,GAAMuuO,GAAM,GAAIvuO,GAAS,CAAC68gB,EAAU8G,EAAQ7riB,KACpE,IAAIo6B,EAAOA,IAAMlS,GAAM2jhB,GAAQtxN;AAG/B2vN,GAAQnF,EAAU,CACjB,QAAA3qgB,GACC,OAAOA,GACR,EACAm/c,SAAU,EAAIv5e,EACd,YAAAoP,GACC,OARmB8Y,GAAM2jhB,GAAQz8hB,QASlC,EACA,aAAAwhN,GACC,OAVoB1oM,GAAM2jhB,GAAQj7U,SAWnC,EACA11M,SAAUA,CAAC6phB,EAAUgG,KACpBh9L,GAAUg3L,EAAU,CAAE,QAAA3qgB,GACrB,OAAOA,GACR,KAED05f,QAAS,CAAEx/gB;AAGb,IAAI0iiB,EAAS9uhB,GAAUwwhB,EAAQ,GAC3BhT,EAAgBX,IACnB,IAAIuT,EAAapwhB;AAEjBA,GADaA,GAAcowhB,GACZ,GAAI,IAAMpwhB,GAAMuuO,GAAM,GAAIvuO,GAAS,CAAC68gB,EAAU8G,KAC5D,IAAIzxgB,EAAOA,IAAMlS,GAAM2jhB,GAAQtxN;AAG/B2vN,GAAQnF,EAAU,CACjB,QAAA3qgB,GACC,OAAOA,GACR,EACA,aAAAlqB,GACC,OAAOgY,GAAMozS,GAAOijO,KACrB,EACA,YAAAnvhB,GACC,OAVmB8Y,GAAM2jhB,GAAQz8hB,QAWlC,EACA,aAAAwhN,GACC,OAZoB1oM,GAAM2jhB,GAAQj7U,SAanC,EACA/H,cACA3tM,SAAUA,CAAC6phB,EAAUgG,KACpB,IAAIyN,EAAatwhB;AAEjBA,GADaA,GAAcswhB,GACZ,GAAI,IAAMtwhB,GAAMiyhB,GAAU//gB,IAAOmgD,WAAYryD,GAAS,CAAC68gB,EAAUrQ,KAC/E,IAAIwS,EAAQiU;AACZ,IAAIhJ;AACJ,IAAID,EAAShqhB,GAAQg/gB;AACrBh/gB,GAASgqhB,EAAQ,IAAMla,GAAY9vgB,GAAMwsgB,GAAM,KAC/CxsgB,EAAQg/gB,GACRh/gB,GAAkB,KACjBA,GAAYg/gB,EAAO,EAAGh/gB,GAAMozS,GAAOo5N,MACnCyd,EAAWjqhB,GAAYg/gB,EAAO,GAAIiL,EAAU,CAAE,8BAA+BjqhB,GAAMwsgB,GAAM,KACzFxsgB,GAAgBgqhB,EAAQ,WAAYhqhB,GAAMwsgB,GAAM,MAEjDxsgB,GAAS68gB,EAAUmC,KAEpBh/gB,GAAS68gB,EAAUyT,IAEpB1kB,QAAS,CAAEx/gB,gBAGb4T,GAAS68gB,EAAUuT;AAEpBpwhB,GAAK8uhB,EAAS3Q,IACRn+gB,GAAMkxhB,IAAY/S,EAASX,KAEjCx9gB,EAAQ6gd,GACR7gd,EAAQlN;AACR,IAAI8whB,EAAQ5jhB,GAAUlN,EAAQ,GAC1B87hB,EAAU5uhB,GAAQ4jhB;AACtB5jhB,GAAO4uhB,EAAS,GAAI,IAAM5uhB,GAAMkthB,GAAgBlthB,GAAS,CAAC68gB,EAAUnJ,KACnE,IAAImQ,EAAQqP,KACRG,EAAUrzhB,GAAQ6jhB,GAClBlG,EAAgBd,IACnB8V,GAAS9V,EAAU,CAAE,YAAAnJ,GACpB,OAAO1zgB,GAAM0zgB,EACd;AAED1zgB,GAAKqzhB,EAAUlV,IACVn+gB,GAAMoyhB,IAAkBjU,EAASR,KAEtC4P,GAAMvthB,GAAUqzhB,EAAS,GAAI,CAAE,YAAA3f,GAC9B,OAAO1zgB,GAAM0zgB,EACd,IACA1zgB,EAAQ6jhB,GACR7jhB,GAAkB,IAAMA,GAAY6jhB,EAAO,EAAG7jhB,GAAMozS,GAAOkgP,UAC3DtzhB,GAAS68gB,EAAUgH,KAEpB7jhB,EAAQ4uhB;AACR,IAAIrK,EAAQvkhB,GAAU4uhB,EAAS;AAC/B5uhB,GAAOukhB,EAAO,GAAI,IAAMvkhB,GAAMuuO,GAAOvuO,GAAS,CAAC68gB,EAAU9vd,EAAMj1E,KAC9D,IAAIy7iB,EAAcvzhB;AAElBA,GADcA,GAAcuzhB,GACZ,GAAI,IAAMvzhB,GAAM+sD,GAAO/sD,GAAS,CAAC68gB,EAAUnogB,EAAKyoD,KAC/D,CACC,IAAIkid,EAAKr/gB,GAAU,IAAMm9D,EAAI,IAAMplF,GAAOioB,GAAM+sD,KAC5Cq1d,EAAKpihB,GAAU,IAAMloB,EAAI,IAAMC,GAAOioB,GAAMuuO;CA1brD,SAAasuS,EAAUC,GACtB98gB,EAAO88gB;AACP,IAAIpQ,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWywI,EAAYtyhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ84iB,WAC3F3R,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgBqvI,EAAYlxhB,GAAU,IAAMA,GAAM2ghB,GAAOuQ,WAAYn+Q,EAAO/yQ,GAAU,IAAMA,GAAM2ghB,GAAO5tQ,MAC5I7gQ,EAAOlS,GAAU,IAAM88gB,EAAQpogB,IAAI29S,UAAW37T,EAAQsJ,GAAU,IAAM88gB,EAAQpogB,IAAIhe,OAAQg9gB,EAAW1zgB,GAAU,IAAM88gB,EAAQpogB,IAAIg/f,UAAWxshB,EAAW8Y,GAAU,IAAM88gB,EAAQpogB,IAAIxtB,UAAWwhN,EAAY1oM,GAAU,IAAM88gB,EAAQpogB,IAAIg0L,WACtOxvN,EAAK8mB,QAAa;AAStByghB,GAAQ5D,EAAU,CACjB,UAAAtvN,GACC,OAAOvtT,GAAMkxhB,EACd,EACA,QAAAh/gB,GACC,OAAOlS,GAAMkS,EACd,EACA,YAAAwhgB,GACC,OAAO1zgB,GAAM0zgB,EACd,EACAqL,cAlBD,SAAuBvgiB,EAAGwK,GACzB,GAAIgX,GAAMkxhB,GAAY,OAAOlxhB,GAAMkS;AAC9B,CACJ,IAAI0ygB,EAAU/rhB,GAAKmH,GAAM9mB,IACrBuuK,EAASm9X,EAAQr/hB,MAAQya,GAAM9mB,GAAI2mB;AACvC,OAAOixgB,GAAYF,GAAU5wgB,GAAMtJ,IAASsJ,GAAM+yQ,GAAMvkR,SAAU/T,IAAO05T,KAAUywO,EAAQp/hB,MAAQhH,EAAIA,EAAIomiB,EAAQx/hB,OAAS4a,GAAMsyhB,GAAatyhB,GAAM+yQ,GAAMnsQ,MAAQ6gJ,IACpK,CACD,EAYC,YAAAvgK,GACC,OAAO8Y,GAAM9Y,EACd,EACA,aAAAwhN,GACC,OAAO1oM,GAAM0oM,EACd,EACA,SAAAsyU,GACC,OAAO8B,EAAQ9B,KAChB,EACA,SAAAD,GACC,OAAO+B,EAAQ/B,KAChB,EACA,MAAA7hiB,GACC,OAAO8mB,GAAM9mB,EACd,EACA,MAAAA,CAAO4niB,GACN9ghB,GAAM9mB,EAAI4niB,KACX,IAED9ghB,GACD,CA7CA,CA2bS68gB,EAAU,CACb,OAAAnogB,GACC,OAAO1U,GAAM0U,EACd,EACA,SAAAsmgB,GACC,OAAOh7gB,GAAMq/gB,EACd,EACA,SAAAtE,GACC,OAAO/6gB,GAAMoihB,EACd,GAEF,IAEDpihB,GAAS68gB,EAAU0W,KAEpBvzhB,EAAQukhB;AACR,IAAI0K,EAAQjvhB,GAAUukhB,EAAO,GACzBiP,EAAUxzhB,GAAQivhB;AACtBjvhB,GAAOwzhB,EAAS,GAAI,IAAMxzhB,GAAMk/B,GAAU4yN,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,EAAOh6Q,KAC/EkoB,GAAYm+D,GAAM0+c,EAAU,CAAE,SAAA/qR,GAC7B,OAAO9xP,GAAM8xP,EACd,IAAM,CAACgvR,EAAShpiB,IAAM07hB,EAAK17hB,GAAKgpiB,EAAUhpiB,GAAM07hB,IAAO17hB,GAAI,IAAM,CAACkoB,GAAMloB;AAEzE,IAAIy3iB,EAAUvvhB,GAAUwzhB,EAAS;AACjCxzhB,GAAOuvhB,EAAS,GAAI,IAAMvvhB,GAAMkghB,GAAYpuR,GAAUA,EAAMt7N,GAAI,CAACqmf,EAAU/qR,KAC1E3zL,GAAM0+c,EAAU,CAAE,SAAA/qR,GACjB,OAAO9xP,GAAM8xP,EACd,MAGD9xP,GADcA,GAAUuvhB,EAAS,GACjB,GAAI,IAAMvvhB,GAAMmghB,GAAUnghB,GAAS,CAAC68gB,EAAU/qR,KAC7D3zL,GAAM0+c,EAAU,CAAE,SAAA/qR,GACjB,OAAO9xP,GAAM8xP,EACd,MAED9xP,EAAQivhB,GACRjvhB,EAAQ4jhB;AACR,IAAI6P,EAAUzzhB,GAAU4jhB,EAAO,GAC3B/F,EAAgBhB,KAhUtB,SAAsBA,GACrB78gB,EAgUyB,CAAC;AA/T1B,IAAI0sgB,EAAM1sgB,GAAU,IAAM6hZ,EAAW,UAAWw3H,EAASr5gB,GAAU,IAAMA,GAAM0sgB,GAAK2M,QAAS/0e,EAAMtkC,GAAU,IAAMA,GAAM0sgB,GAAKpoe,KAAMypB,EAAQ/tD,GAAU,IAAMA,GAAM0sgB,GAAK3+c,OAAQ0pQ,EAAez3T,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQi+U,cAAe66N,EAAYtyhB,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ84iB,WAAYl/O,EAAQpzS,GAAU,IAAMA,GAAM0sgB,GAAKlzhB,QAAQ45T,OAClVutO,EAAQ3ghB,GAAU,IAAM6hZ,EAAW,eAAgBtzK,EAAOvuO,GAAU,IAAMA,GAAM2ghB,GAAOpyS,MAAOu9S,EAAe9rhB,GAAU,IAAMA,GAAM2ghB,GAAOmL,cAC1IkC,EAAQhuhB,GAAU,KACrB,IAAK,IAAI0U,KAAO1U,GAAMuuO,GAAM,GAAI,GAAI6iS,GAAW18f,EAAI29S,SAAUryT,GAAM+tD,IAAS,OAAOr5C;AACnF,MAAO,CAAC,IACLw/f,EAAal0gB,GAAU,IAAMA,GAAMguhB,GAAO9Z,YAAax9gB,EAAQsJ,GAAU,IAAMA,GAAMguhB,GAAOt3hB,OAAQC,EAAMqJ,GAAU,IAAMA,GAAMguhB,GAAOr3hB,KACvIvR,EAAO4a,GAAU,KACpB,GAAIA,GAAMskC,GAAOtkC,GAAMtJ,IAAUsJ,GAAMskC,GAAOtkC,GAAMrJ,GAAM,OAAO;AACjE,IAAI0tH,EAAOutZ,GAAU5xgB,GAAMy3T;AAC3B,OAAQz3T,GAAMskC,GAAOtkC,GAAMtJ,IAAU,IAAM2tH,EAAOrkH,GAAMsyhB,KAErDrE,EAAkBjuhB,GAAU,MAC/BgG,KAAMhG,GAAMq5gB,GACZ7ygB,WAAY2tS,KAAU,QAAQn0S,GAAM8rhB,GAAgB,cAAgB,gBAAgB9rhB,GAAM8rhB,GAAgB,MAC1GxlhB,UAAW;AAEZ,SAAS4nhB,EAAYh1iB,EAAIg7C,GACxBh7C,EAAGq4E,UAAU4I,OAAOn6D,GAAMozS,GAAOk8B,QAASp7S,EAAMi6f,eACjD,CACA,IAAI7sK,EAAWthX,KACXtE,EAAOsE,GAAcshX,GACrB+7J,EAAcR,IACjB,IAAIh8D,EAAMkyE;AACV,IAAIlxiB;AACJme,GAAS6gd,EAAK,IAAMovD,GAAqBie,EAAaluhB,GAAMiuhB,KAC5DjuhB,GAAkB,KACjBA,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO0lB,cACjCj3U,EAASme,GAAY6gd,EAAK,GAAIh/d,EAAQ,CACrC,cAAeme,GAAMk0gB,GAAc,EACnC,WAAY,YAAYl0gB,GAAMuuO,GAAMx2P,QAAU,KAC9C,qBAAsB,GAAGioB,GAAM5a,IAAS,WAG1C4a,GAAS68gB,EAAUh8D;AAEpB7gd,GAAKtE,EAAOyihB,IACPn+gB,GAAMk0gB,IAA+B,OAAhBl0gB,GAAM5a,IAAgB+4hB,EAASd,KAEzDr9gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CA1CA,CAiUgB68gB;AAEd78gB,GAAKyzhB,EAAUtV,IACVn+gB,GAAM84T,KAAkB94T,GAAMkxhB,IAAY/S,EAASN,KAExD79gB,EAAQw9U,GACRx9U,GAAYw9U,EAAUsjM,GAAY/L,EAAUsE,OAASyH,EAAS,IAAM/L,GAAWsE,QAC/Er5gB,GAASw9U,EAAS,IAAMr2U,GAAe01J,IACvC78J,GAAmBq/gB,IAClBr/gB,GAAYw9U,EAAS,EAAGx9U,GAAMozS,GAAO2mK,MACrCl4d,EAASme,GAAYw9U,EAAS,GAAI37V,EAAQw9hB,GAC1Cr/gB,GAAYlN,EAAQ,EAAGkN,GAAMozS,GAAOtgT,QACpCkN,GAAY4gd,EAAO,EAAG5gd,GAAMozS,GAAO63O,SACnCjrhB,GAAY6gd,EAAK,EAAG7gd,GAAMozS,GAAO7kE,MACjCvuO,GAAY4jhB,EAAO,EAAG5jhB,GAAMozS,GAAOruT,MACnCib,GAAY4uhB,EAAS,EAAG5uhB,GAAMozS,GAAO63O,SACrCjrhB,GAAYukhB,EAAO,EAAGvkhB,GAAMozS,GAAO7kE,MACnCvuO,GAAYivhB,EAAO,EAAGjvhB,GAAMozS,GAAO16N,SACjC,CAAC,MACH,iBAAkB3gG,GAAOioB,GAAMuuO,GAAM,IACrC,kBAAqBx2P,GAAOioB,GAAMuuO,IAAS,EAAI,UAAUx2P,GAAOioB,GAAMuuO,IAAS,WAAa,IAA1E,OAClB,iBAAkBvuO,GAAM6jP,IAAgB,mBACxC,8BAA+B7jP,GAAMk2gB,GACrC,mBAAoB,GAAGl2gB,GAAMgrhB,IAAe,OAC5C,kBAAmB,GAAGhrhB,GAAMsyhB,IAAc,OAC1C,qBAAsB,GAAGtyhB,GAAMyuhB,IAAiB,OAChD,qBAAsB,GAAGzuhB,GAAM8rhB,IAAiB,WAEjD9rhB,GAAoB4gd,EAAO,cAAgBkgE,GAAYz1C,EAAUygD,aAAehL,GAChF9ghB,GAAoBlN,EAAQ,eAAiBguhB,GAAY9ghB,GAAMyuhB,EAAc3N,IAC7E9ghB,GAAS68gB,EAAUr/L,IAEhBk2M,EAAM1zhB,GAAU,KAAO80E,GAAM90E,GAAMuuO,MAAWz5J,GAAM90E,GAAMuuO,GAAM;AACpEvuO,GAAKtE,EAAOyihB,IACPn+gB,GAAM0zhB,IAAMvV,EAASH,KAE1Bh+gB,GAAS68gB,EAAUv7J,GACnBthX,GACD,CAGA,IAAI2zhB,GAA4B,CAC/BvY,cAAc5hiB,GACbuxiB,GAAiBvxiB,GACjB4xiB,GAAgB5xiB,GAChB8liB,GAAgB9liB,GAChB2xE,GAAO3xE,EAAS,CACfo6iB,kBAAmB,CAAEn/gB,MAAO,QAC5Bm+gB,oBAAqB,EACrBN,UAAW,GACXzje,KAAM,yBAEP1D,GAAO3xE,EAAQ8tT,WAAY,CAC1BgR,OAAQ,SACRo1L,SAAU,WACVmmD,oBAAqB,MACrBC,qBAAsB,OACtBC,sBAAuB,QACvBC,qBAAsB,SAEvB7oe,GAAO3xE,EAAQgrE,MAAO,CACrBkpb,SAAU,CAAE3re,KAAM,WAClBu2S,OAAQ,CAAEv2S,KAAM,YAEjBopD,GAAO3xE,EAAQ45T,MAAO,CACrBy/O,SAAU,cACVS,QAAS,cACTjd,MAAO,aAERlrd,GAAO3xE,EAAQolF,MAAO,CACrBi1d,oBAAqB,CACpBvsP,WAAY6tO,GACZ1jX,UAAWwiY,GACXh6N,mBACApC,gBAAiB,CAAEljT,QAAS,QAC5BnmB,SAAU,CAAEu+D,KAAM,GAClBqmP,MAAOqiO,GAAU,uCACjBt7N,YAAa,CACZ5lS,KAAM,UACNE,MAAO,OACPC,IAAK,YAGPo/gB,qBAAsB,CACrBxsP,WAAY+tO,GACZ5jX,UAAWwiY,GACXh6N,mBACAzrU,SAAU,CAAEizH,MAAO,GACnB2xL,MAAOqiO,GAAU,yCAElBse,sBAAuB,CACtBzsP,WAAYguO,GACZ7jX,UAAWyiY,GACXj6N,mBACApC,gBAAiB,CAChBljT,QAAS,QACTD,IAAK,WAENlmB,SAAU,CAAEw+D,OAAQ,GACpByqQ,aAAc,CAAE1qQ,KAAM,GACtBqmP,MAAOqiO,GAAU,yCACjBt7N,YAAa,CACZ5lS,KAAM,UACNE,MAAO,SAGTu/gB,qBAAsB,CACrB1sP,WAAYiuO,GACZ9jX,UAAWyiY,GACXj6N,mBACApC,gBAAiB,CAChBljT,QAAS,QACTD,IAAK,WAENlmB,SAAU,CAAEy+D,MAAO,GACnBwqQ,aAAc,CAAE1qQ,KAAM,GACtBqmP,MAAOqiO,GAAU,wCACjBt7N,YAAa,CAAE5lS,KAAM,aAGxB,EACA8mgB,cAAcprZ,GACbk7Z,GAAiBl7Z,EAClB;AAED,SAASgka,GAAoBlf,GAE5B,OADA8V,GAAc9V,GACPof,GAAmBpf,EAC3B,CACA,SAASmf,GAAuBnf,GAC/B,OAAOof,GAAmBpf,EAAW,CAAC,SACvC,CACA,SAASof,GAAmBpf,EAAWqf,EAAgB,IAGtD,OAFArf,EAAUx+H,SAAW,CAAC,cAAe69I,GACrCrf,EAAUx3J,WAAW2vK,cAAiB5uN,GAAcA,EAAUvgU,OAAQ21gB,IAAclB,GAAWkB,GAAUpkM,QAClG29D,EACR,CAGA,IAAIonJ,GAAoB,CACvBjZ,cAAc5hiB,GACbuxiB,GAAiBvxiB,GACjB0xiB,GAAgB1xiB,GAChB2xE,GAAO3xE,EAAQ8tT,WAAY,CAC1BgtP,YAAa,MACbC,aAAc,SAEfppe,GAAO3xE,EAAS,CAAEq1E,KAAM,iBACxB1D,GAAO3xE,EAAQolF,MAAO,CACrB01d,YAAa,CACZhtP,WAAY6tO,GACZ1jX,UAAW+iY,GACX38N,gBAAiB,CAAEljT,QAAS,QAC5BnmB,SAAU,CAAEu+D,KAAM,GAClBqmP,MAAOqiO,GAAU,4BACjBt7N,YAAa,CACZ5lS,KAAM,UACNE,MAAO,OACPC,IAAK,YAGP6/gB,aAAc,CACbjtP,WAAY+tO,GACZ5jX,UAAW+iY,GACXhmiB,SAAU,CAAEizH,MAAO,GACnB2xL,MAAOqiO,GAAU,+BAGpB,EACA4F,cAAcprZ,GACbk7Z,GAAiBl7Z,EAClB;AAED,SAASuka,GAAkBzf,GAE1B,OADA8V,GAAc9V,GACPwZ,EACR,CAGA,SAASniC,GAAeprgB,EAAQ4gU,EAASpoU,GACxC,OAAO6kZ,GAAMlzE,GAAU,CACtBnqU,SACA8gD,MAAO,CACN8/Q,UACApoU,YAGH,CACA,SAAS8ygB,GAAgB52M,GACxB,OAAOhkB,GAAQgkB,EAChB,SAAA79T,EAAAvB,EAAA0B,GAAA;AI95LA,SAAS6pM,EAAQhjJ,EAAQ41f,GACvB,IAAIvkgB,EAAO3wB,OAAO2wB,KAAK2O;AAEvB,GAAIt/B,OAAOmgJ,sBAAuB,CAChC,IAAIg1Y,EAAUn1hB,OAAOmgJ,sBAAsB7gH;AAC3C41f,IAAmBC,EAAUA,EAAQ32hB,OAAO,SAAU42hB,GACpD,OAAOp1hB,OAAO2zE,yBAAyBr0C,EAAQ81f,GAAK/zf,UACtD,IAAK1Q,EAAK9wC,KAAK+K,MAAM+lC,EAAMwkgB,EAC7B,CAEA,OAAOxkgB,CACT,CAEA,SAAS0pK,EAAe54M,GACtB,IAAK,IAAIlJ,EAAI,EAAGA,EAAIsS,UAAUrS,OAAQD,IAAK,CACzC,IAAIiwC,EAAS,MAAQ39B,UAAUtS,GAAKsS,UAAUtS,GAAK,CAAC;AACpDA,EAAI,EAAI+pM,EAAQtiL,OAAOwoB,OAAa/1B,QAAQ,SAAUye,GACpDk6G,EAAgB3pI,EAAQyvB,EAAKsX,EAAOtX,GACtC,GAAKlR,OAAOg5L,0BAA4Bh5L,OAAO6/K,iBAAiBp+L,EAAQue,OAAOg5L,0BAA0BxwK,IAAW85J,EAAQtiL,OAAOwoB,IAAS/1B,QAAQ,SAAUye,GAC5JlR,OAAOmhC,eAAe1/C,EAAQyvB,EAAKlR,OAAO2zE,yBAAyBnrD,EAAQtX,GAC7E,EACF,CAEA,OAAOzvB,CACT,CAEA,SAASwgI,EAAQn4F,GAGf,OAAOm4F,EAAU,mBAAqB7uD,QAAU,iBAAmBA,OAAO2c,SAAW,SAAUjmD,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBspC,QAAUtpC,EAAIypC,cAAgBH,QAAUtpC,IAAQspC,OAAOl2E,UAAY,gBAAkB4sC,CAC1H,EAAGm4F,EAAQn4F,EACb,CA2EA,SAASshG,EAAgBthG,EAAK5Y,EAAKt2B,GAYjC,OAXIs2B,KAAO4Y,EACT9pB,OAAOmhC,eAAerX,EAAK5Y,EAAK,CAC9Bt2B,MAAOA,EACPymD,cACAC,gBACAgyB,cAGFxpC,EAAI5Y,GAAOt2B,EAGNkvC,CACT,CA6BA,SAASs8c,EAAe3sM,EAAKlhT,GAC3B,OAWF,SAAyBkhT,GACvB,GAAI3tS,MAAM1T,QAAQqhT,GAAM,OAAOA,CACjC,CAFA,CAXyBA,IAmBzB,SAA+BA,EAAKlhT,GAClC,IAAI4+B,EAAY,MAAPsiR,EAAc,KAAyB,oBAAXrmO,QAA0BqmO,EAAIrmO,OAAO2c,WAAa0pN,EAAI;AAE3F,GAAU,MAANtiR,EAAJ,CACA,IAII+nH,EAAIhpI,EAJJm/hB,EAAO,GACPnra,KACAwyD;AAIJ,IACE,IAAKvlK,EAAKA,EAAGt0B,KAAK42S,KAAQvvK,GAAMgV,EAAK/nH,EAAG+5D,QAAQ5S,QAC9C+2d,EAAKx1iB,KAAKq/I,EAAGtkJ,QAETrC,GAAK88iB,EAAK78iB,SAAWD,GAH4B2xI,MAKzD,CAAE,MAAO/+F,GACPuxJ,KACAxmL,EAAKi1B,CACP,CAAC,QACC,IACO++F,GAAsB,MAAhB/yG,EAAWg6D,QAAWh6D,EAAWg6D,QAC9C,CAAC,QACC,GAAIurG,EAAI,MAAMxmL,CAChB,CACF,CAEA,OAAOm/hB,CAxBS,CAyBlB,CA5BA,CAnBuD57P,EAAKlhT,IAAM8tf,EAA4B5sM,EAAKlhT,IAsEnG,WACE,MAAM,IAAIuoD,UAAU,4IACtB,CAFA,EArEA,CAEA,SAASw0f,EAAmB77P,GAC1B,OAGF,SAA4BA,GAC1B,GAAI3tS,MAAM1T,QAAQqhT,GAAM,OAAO1vK,EAAkB0vK,EACnD,CAFA,CAH4BA,IAW5B,SAA0B87P,GACxB,GAAsB,oBAAXnie,QAAmD,MAAzBmie,EAAKnie,OAAO2c,WAA2C,MAAtBwld,EAAK,cAAuB,OAAOzpiB,MAAM0Z,KAAK+vhB,EACtH,CAFA,CAXqD97P,IAAQ4sM,EAA4B5sM,IA8DzF,WACE,MAAM,IAAI34P,UAAU,uIACtB,CAFA,EA7DA,CA4CA,SAASulc,EAA4Bxtf,EAAG+se,GACtC,GAAK/se,EAAL,CACA,GAAiB,iBAANA,EAAgB,OAAOkxI,EAAkBlxI,EAAG+se;AACvD,IAAInte,EAAIunB,OAAO9iB,UAAUoL,SAASzF,KAAKhK,GAAGR,MAAM,GAAI;AAEpD,MADU,WAANI,GAAkBI,EAAE06E,cAAa96E,EAAII,EAAE06E,YAAYlzE,MAC7C,QAAN5H,GAAqB,QAANA,EAAoBqT,MAAM0Z,KAAK3sB,GACxC,cAANJ,GAAqB,2CAA2C6kB,KAAK7kB,GAAWsxI,EAAkBlxI,EAAG+se,QAAzG,CALQ,CAMV,CAEA,SAAS77V,EAAkB0vK,EAAKxqR,IACnB,MAAPA,GAAeA,EAAMwqR,EAAIjhT,UAAQy2B,EAAMwqR,EAAIjhT;AAE/C,IAAK,IAAID,EAAI,EAAG4+d,EAAO,IAAIrrd,MAAMmjB,GAAM12B,EAAI02B,EAAK12B,IAAK4+d,EAAK5+d,GAAKkhT,EAAIlhT;AAEnE,OAAO4+d,CACT,CAAA1+d,EAAAK,EAAA/B,GAAA0B,EAAAb,EAAAb,EAAA,CAAAy+iB,IAAA,IAAAl4f,GAAA7tB,OAAA,IAAAikG,GAAAm+F,QAAA,IAAAz3E,GAAA6rP,IAAA,IAAAnyQ,GAAA2hb,mBAAA,IAAA39f,GAAA8N,KAAA,IAAAtO,GAAAypT,MAAA,IAAAzlN,GAAAo6Z,QAAA,IAAA9hb,GAAA+hb,OAAA,IAAAnib,GAAArlH,MAAA,IAAAoa,GAAAjtB,KAAA,IAAAspJ,GAAAgxZ,OAAA,IAAAzra;AAUA,IAAImrB,EAAO,WAAiB,EAExBugZ,EAAU,CAAC,EACXC,EAAY,CAAC,EACbC,EAAqB,KACrBC,EAAe,CACjB1/b,KAAMg/C,EACN0wX,QAAS1wX;AAGX,IACwB,oBAAX5zJ,SAAwBm0iB,EAAUn0iB,QACrB,oBAAb9E,WAA0Bk5iB,EAAYl5iB,UACjB,oBAArBihL,mBAAkCk4X,EAAqBl4X,kBACvC,oBAAhBmnM,cAA6BgxL,EAAehxL,YACzD,CAAE,MAAO1sX,GAAI,CAEb,IAWI29iB,EAAcC,EAAeC,EAAeC,EAAeC,EAV3DC,GADOT,EAAQx6d,WAAa,CAAC,GACPC,UACtBA,OAAoC,IAAxBg7d,EAA4B,GAAKA,EAC7CC,EAASV,EACTW,EAAWV,EACXW,EAAoBV,EACpBW,EAAcV,EAEdW,GADeJ,EAAO35iB,WACX45iB,EAASjxiB,mBAAqBixiB,EAASnpe,MAA6C,mBAA9Bmpe,EAASpwhB,kBAAqE,mBAA3BowhB,EAAS1qe,eAC7H8qe,GAASt7d,EAAUx5E,QAAQ,UAAYw5E,EAAUx5E,QAAQ,YAIzD+0iB,EAAuB,qBAGvBC,EAA4B,iBAC5BC,EAAgB,gBAChBC,EAAyB,yBAEzBC,EAAc,cACdC,EAAY,YACZC,EAA8B,oBAE9BC,EAAsC,CAAC,OAAQ,OAAQ,QAAS,UAChEC,EAAa,WACf,IACE,QACF,CAAE,MAAO/+iB,GACP,QACF,CACF,CANiB,GAObg/iB,EAAiB,UACjBC,EAAe,QACfC,EAAW,CAACF,EAAgBC;AAEhC,SAASE,EAAY3tgB,GAEnB,OAAO,IAAIu4J,MAAMv4J,EAAK,CACpBvlB,IAAK,SAAa9iB,EAAQ0hL,GACxB,OAAOA,KAAQ1hL,EAASA,EAAO0hL,GAAQ1hL,EAAO61iB,EAChD,GAEJ,CACA,IAAII,EAAkBD,GAAgCrsa,EAAnB6qa,EAAe,CAAC,EAAiCqB,EAAgB,CAClGvib,GAAM,QACN4ib,IAAO,QACP,WAAY,QACZC,IAAO,UACP,aAAc,UACdC,IAAO,QACP,WAAY,QACZC,IAAO,OACP,UAAW,OACXC,IAAO,UACP,aAAc,UACd7ye,IAAO,SACP,YAAa,SACb8ye,IAAO,MACP,SAAU,QACR5sa,EAAgB6qa,EAAcsB,EAAc,CAC9Cxib,GAAM,QACNkjb,KAAQ,QACR,WAAY,QACZC,KAAQ,UACR,aAAc,UACdC,KAAQ,QACR,WAAY,UACVlC,IACAmC,EAAkBX,GAAiCrsa,EAApB8qa,EAAgB,CAAC,EAAkCoB,EAAgB,CACpG50E,MAAS,MACTliV,QAAW,MACX63Z,MAAS,MACTC,KAAQ,MACRC,QAAW,MACXC,OAAU,MACVC,IAAO,QACLrta,EAAgB8qa,EAAeqB,EAAc,CAC/C70E,MAAS,OACTliV,QAAW,OACX63Z,MAAS,SACPnC,IACAwC,EAAuBjB,GAAiCrsa,EAApB+qa,EAAgB,CAAC,EAAkCmB,EAAgB,CACzGpye,IAAO,YACP6ye,IAAO,aACPC,IAAO,SACPH,IAAO,WACPD,IAAO,aACPD,IAAO,WACPG,IAAO,YACL1sa,EAAgB+qa,EAAeoB,EAAc,CAC/CU,KAAQ,WACRC,KAAQ,aACRC,KAAQ,aACNhC,IACAwC,EAAuBlB,GAAiCrsa,EAApBgra,EAAgB,CAAC,EAAkCkB,EAAgB,CACzG,YAAa,MACb,aAAc,MACd,SAAU,MACV,WAAY,MACZ,aAAc,MACd,WAAY,MACZ,UAAW,QACTlsa,EAAgBgra,EAAemB,EAAc,CAC/C,WAAY,OACZ,aAAc,OACd,WAAY,SACVnB,IACAwC,EAAgC,oCAEhCC,EAAwB,iBACxBC,EAAsB,0FACtBC,EAAwBtB,GAAiCrsa,EAApBira,EAAgB,CAAC,EAAkCiB,EAAgB,CAC1G,IAAO,MACP,IAAO,MACP0B,OAAU,MACV,IAAO,MACP,IAAO,QACL5ta,EAAgBira,EAAekB,EAAc,CAC/C,IAAO,OACP,IAAO,OACP,IAAO,SACLlB,IACA4C,EAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACvCC,EAAcD,EAASvuiB,OAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KACnEyuiB,EAAkC,CAAC,QAAS,cAAe,YAAa,oBAAqB,gBAC7FC,EACK,gBADLA,GAGO,UAHPA,GAIS,YAETl0I,GAAW,IAAIlpZ;AACnBgE,OAAO2wB,KAAKyngB,EAAgBd,IAAiBz7hB,IAAIqpZ,GAASr1X,IAAIn1C,KAAKwqa,KACnEllZ,OAAO2wB,KAAKyngB,EAAgBb,IAAe17hB,IAAIqpZ,GAASr1X,IAAIn1C,KAAKwqa;AACjE,IAAIm0I,GAAmB,GAAG3uiB,OAAO8siB,EAAUlC,EAAmBpwI,IAAW,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,OAAQ,SAAU,OAAQ,YAAa,SAAU,YAAa,kBAAmB,gBAAiB,OAAQ,KAAM,UAAW,iBAAkB,cAAe,SAAU,KAAM,YAAa,aAAc,QAAS,aAAc,aAAc,YAAa,YAAa,QAAS,aAAc,eAAgB,OAAQ,WAAY,WAAY,QAAS,KAAMk0I,EAP5b,eAOifA,GAAyBA,KAA4B1uiB,OAAOuuiB,EAASp9hB,IAAI,SAAUpjB,GACllB,MAAO,GAAGiS,OAAOjS,EAAG,IACtB,IAAIiS,OAAOwuiB,EAAYr9hB,IAAI,SAAUpjB,GACnC,MAAO,KAAKiS,OAAOjS,EACrB,IAEIs5J,GAAUwkZ,EAAO+C,mBAAqB,CAAC;AAmBvC9C,GAA8C,mBAA3BA,EAAS3ke,eAClB,CAAC,CAAC,qBAAsB,gBAAiB,CAAC,kBAAmB,aAAc,CAAC,sBAAuB,iBAAkB,CAAC,qBAAsB,gBAAiB,CAAC,yBAA0B,oBAAqB,CAAC,wBAAyB,kBAAmB,CAAC,oBAAqB,cAAe,CAAC,iBAAkB,YAAa,CAAC,8BAA+B,wBAAyB,CAAC,yBAA0B,oBAAqB,CAAC,uBAAwB,kBAAmB,CAAC,4BAA6B,sBAAuB,CAAC,2BAA4B,sBAAuB,CAAC,0BAA2B,qBAC/lBp/D,QAAQ,SAAUgH,GACtB,IAAImrG,EAAQwhY,EAAe3se,EAAM,GAC7Bkld,EAAO/5W,EAAM,GACb1zF,EAAM0zF,EAAM,GAEZx5E,EAhBR,SAAgBA,GAGd,MAAY,KAARA,GACQ,UAARA,IACQ,SAARA,GACGA,EACT,CAPA,CARA,SAAuBuzb,GACrB,IAAIhkd,EAAU67hB,EAAS3ke,cAAc,UAAY8sZ,EAAO;AAExD,GAAIhkd,EACF,OAAOA,EAAQ5T,aAAa43d,EAEhC,CANA,CAwBmCA;AAE3Bvzb,UACF2mH,GAAQ7gI,GAAOka,EAEnB;AAGF,IAAImugB,GAAW,CACbC,aAAc,QACdC,cAAe,UACfC,UAnKuB,KAoKvBC,iBAAkB7C,EAClB8C,kBACAC,cACAC,YACAC,wBACAC,oBACAC,eAAgB,QAChBC,sBACAC,sBACAC;AAGEroZ,GAAQsoZ,eACVtoZ,GAAQ2nZ,UAAY3nZ,GAAQsoZ;AAG9B,IAAIrtH,GAAU3yO,EAAeA,EAAe,CAAC,EAAGk/V,IAAWxnZ;AAEtDi7R,GAAQ4sH,iBAAgB5sH,GAAQgtH;AACrC,IAAIvqhB,GAAS,CAAC;AACdzP,OAAO2wB,KAAK4ogB,IAAU9miB,QAAQ,SAAUye,GACtClR,OAAOmhC,eAAe1xB,GAAQyB,EAAK,CACjCmwB,cACAv8B,IAAK,SAAasmB,GAChB4hZ,GAAQ97Z,GAAOka,EAEfkvgB,GAAY7niB,QAAQ,SAAUmuG,GAC5B,OAAOA,EAAGnxF,GACZ,EACF,EACAlL,IAAK,WACH,OAAOyoa,GAAQ97Z,EACjB,GAEJ,GAEAlR,OAAOmhC,eAAe1xB,GAAQ,eAAgB,CAC5C4xB,cACAv8B,IAAK,SAAasmB,GAChB4hZ,GAAQ0sH,UAAYtugB,EAEpBkvgB,GAAY7niB,QAAQ,SAAUmuG,GAC5B,OAAOA,EAAGnxF,GACZ,EACF,EACAlL,IAAK,WACH,OAAOyoa,GAAQ0sH,SACjB,IAEFnD,EAAO+C,kBAAoB7phB;AAC3B,IAAI6qhB,GAAc,GASd1ijB,GAhOgB,GAiOhB2ijB,GAAuB,CACzBjkiB,KAAM,GACNrX,EAAG,EACHwK,EAAG,EACH2U,OAAQ,EACRo8hB,SACAC;AA0BF,SAASC,KAIP,IAHA,IAAIpkiB,EAAO,GACP2gC,EAAK,GAEF3gC,KAAS,GACd2gC,GANS,iEAMoB,GAAhBj8C,KAAKk0F,SAAgB;AAGpC,OAAOj4C,CACT,CACA,SAAS2oE,GAAQ91E,GAGf,IAFA,IAAIioG,EAAQ,GAEHx5I,GAAKuxC,GAAO,IAAItxC,SAAW,EAAGD,KACrCw5I,EAAMx5I,GAAKuxC,EAAIvxC;AAGjB,OAAOw5I,CACT,CACA,SAAS4oa,GAAWx+hB,GAClB,OAAIA,EAAK61D,UACA4tC,GAAQzjG,EAAK61D,YAEZ71D,EAAKpV,aAAa,UAAY,IAAImJ,MAAM,KAAKsO,OAAO,SAAUjmB,GACpE,OAAOA,CACT,EAEJ,CACA,SAASqijB,GAAW1khB,GAClB,MAAO,GAAGxrB,OAAOwrB,GAAKxd,QAAQ,KAAM,SAASA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,OAClI,CAMA,SAASmiiB,GAAWv4iB,GAClB,OAAO0d,OAAO2wB,KAAKruC,GAAU,CAAC,GAAGqU,OAAO,SAAUC,EAAKkkiB,GACrD,OAAOlkiB,EAAM,GAAGlM,OAAOowiB,EAAW,MAAMpwiB,OAAOpI,EAAOw4iB,GAAWvwc,OAAQ,IAC3E,EAAG,GACL,CACA,SAASwwc,GAAsB98hB,GAC7B,OAAOA,EAAU3H,OAASikiB,GAAqBjkiB,MAAQ2H,EAAUhf,IAAMs7iB,GAAqBt7iB,GAAKgf,EAAUxU,IAAM8wiB,GAAqB9wiB,GAAKwU,EAAUG,SAAWm8hB,GAAqBn8hB,QAAUH,EAAUu8hB,OAASv8hB,EAAUw8hB,KAC9N,CAgDA,SAASz8hB,KACP,IAAIg9hB,EA5VmB,KA6VnBC,EAAMnE,EACNoE,EAAKzrhB,GAAOiqhB,UACZyB,EAAK1rhB,GAAOkqhB,iBACZl/iB,EAPW;AASf,GAAIygjB,IAAOF,GAAOG,IAAOF,EAAK,CAC5B,IAAIG,EAAQ,IAAI7ygB,OAAO,MAAM79B,OAAOswiB,EAAK,OAAQ,KAC7CK,EAAiB,IAAI9ygB,OAAO,OAAO79B,OAAOswiB,EAAK,OAAQ,KACvDM,EAAQ,IAAI/ygB,OAAO,MAAM79B,OAAOuwiB,GAAM;AAC1CxgjB,EAAIA,EAAEie,QAAQ0iiB,EAAO,IAAI1wiB,OAAOwwiB,EAAI,MAAMxiiB,QAAQ2iiB,EAAgB,KAAK3wiB,OAAOwwiB,EAAI,MAAMxiiB,QAAQ4iiB,EAAO,IAAI5wiB,OAAOywiB,GACpH,CAEA,OAAO1gjB,CACT,CAEA,IAAI8gjB;AAEJ,SAASC,KACH/rhB,GAAOoqhB,aAAe0B,KAvI5B,SAAmBv9hB,GACjB,GAAKA,GAAQ24hB,EAAb,CAIA,IAAI/wiB,EAAQ4wiB,EAAS1qe,cAAc;AACnClmE,EAAMS,aAAa,OAAQ,YAC3BT,EAAMjF,UAAYqd;AAIlB,IAHA,IAAIy9hB,EAAejF,EAASnpe,KAAKk4I,WAC7Bm2V,EAAc,KAETnjjB,EAAIkjjB,EAAajjjB,OAAS,EAAGD,GAAK,EAAGA,IAAK,CACjD,IAAIwmK,EAAQ08Y,EAAaljjB,GACrBqzC,GAAWmzH,EAAMnzH,SAAW,IAAI3vC,cAEhC,CAAC,QAAS,QAAQ6F,QAAQ8pC,IAAY,IACxC8vgB,EAAc38Y,EAElB,CAEAy3Y,EAASnpe,KAAK5uE,aAAamH,EAAO81iB,EAjBlC,CAmBF,CAtBA,CAwIc19hB,MACVu9hB,MAEJ,CAEA,IAAII,GAAY,CACdC,OAAQ,WACN,MAAO,CACL31K,IAAK,CACHjoX,IAAKA,GACL69hB,UAAWL,IAGjB,EACA9+O,MAAO,WACL,MAAO,CACLo/O,yBAA0B,WACxBN,IACF,EACAO,YAAa,WACXP,IACF,EAEJ,GAGE1uiB,GAAIypiB,GAAU,CAAC;AACdzpiB,GAAE+piB,KAAuB/piB,GAAE+piB,GAAwB,CAAC,GACpD/piB,GAAE+piB,GAAsBv0iB,SAAQwK,GAAE+piB,GAAsBv0iB,OAAS,CAAC,GAClEwK,GAAE+piB,GAAsBn6O,QAAO5vT,GAAE+piB,GAAsBn6O,MAAQ,CAAC,GAChE5vT,GAAE+piB,GAAsBmF,QAAOlviB,GAAE+piB,GAAsBmF,MAAQ;AACpE,IAAIn7E,GAAY/zd,GAAE+piB,GAEdoF,GAAY,GAUZp2e;AAYJ,SAAS+ve,GAAOsG,GACd,IAAIpphB,EAAMophB,EAAcpphB,IACpBqphB,EAAwBD,EAAc7ngB,WACtCA,OAA4C,IAA/B8ngB,EAAmC,CAAC,EAAIA,EACrDC,EAAwBF,EAAczoiB,SACtCA,OAA0C,IAA/B2oiB,EAAmC,GAAKA;AAEvD,MAA6B,iBAAlBF,EACFtB,GAAWsB,GAEX,IAAIxxiB,OAAOooB,EAAK,KAAKpoB,OAlJhC,SAAwB2pC,GACtB,OAAOr0B,OAAO2wB,KAAK0D,GAAc,CAAC,GAAG19B,OAAO,SAAUC,EAAKuuf,GACzD,OAAOvuf,EAAM,GAAGlM,OAAOy6f,EAAe,MAAOz6f,OAAOkwiB,GAAWvmgB,EAAW8wd,IAAiB,KAC7F,EAAG,IAAI56Z,MACT,CAJA,CAkJsDl2D,GAAa,KAAK3pC,OAAO+I,EAASoI,IAAI+5hB,IAAQ7liB,KAAK,IAAK,MAAMrF,OAAOooB,EAAK,IAEhI,CAEA,SAASuphB,GAAgB/kY,EAASlnI,EAAQuV,GACxC,GAAI2xH,GAAWA,EAAQlnI,IAAWknI,EAAQlnI,GAAQuV,GAChD,MAAO,CACLvV,OAAQA,EACRuV,SAAUA,EACVC,KAAM0xH,EAAQlnI,GAAQuV,GAG5B,CAhCIgxf,KACF9we,IAAU2we,EAASjxiB,gBAAgB+2iB,SAAW,aAAe,iBAAiBh/hB,KAAKk5hB,EAASxwe,cAC/Ewwe,EAASpwhB,iBAAiB,mBAZ1B,SAASytI,IACtB2iZ,EAAS/uhB,oBAAoB,mBAAoBosI,GACjDhuF,GAAS,EACTo2e,GAAUpgiB,IAAI,SAAU0M,GACtB,OAAOA,GACT,EACF;AA2CA,IAmBI5R,GAAS,SAA0B4liB,EAASh0hB,EAAI8oE,EAAci4P,GAChE,IAGI/wV,EACA24B,EACAhS,EALAyxB,EAAO3wB,OAAO2wB,KAAK4rgB,GACnB/jjB,EAASm4C,EAAKn4C,OACdu3F,OAA2BrmE,IAAhB4/T,EAtBG,SAAuBn/E,EAAMm/E,GAC/C,OAAO,SAAUvwV,EAAGma,EAAG9W,EAAGxE,GACxB,OAAOuyQ,EAAKtnQ,KAAKymV,EAAavwV,EAAGma,EAAG9W,EAAGxE,EACzC,CACF,CAJoB,CAsBuC2wB,EAAI+gU,GAAe/gU;AAa5E,SARqBmB,IAAjB2nE,GACF94F,EAAI,EACJ2mB,EAASq9hB,EAAQ5rgB,EAAK,MAEtBp4C,EAAI,EACJ2mB,EAASmyE,GAGJ94F,EAAIC,EAAQD,IAEjB2mB,EAAS6wE,EAAS7wE,EAAQq9hB,EAD1BrrhB,EAAMyf,EAAKp4C,IAC6B24B,EAAKqrhB;AAG/C,OAAOr9hB,CACT;AAoDA,SAASs9hB,GAAMC,GACb,IAAIC,EA3BN,SAAoBjsc,GAKlB,IAJA,IAAI3pC,EAAS,GACT+qJ,EAAU,EACVr5N,EAASi4G,EAAOj4G,OAEbq5N,EAAUr5N,GAAQ,CACvB,IAAIoC,EAAQ61G,EAAOxmE,WAAW4nL;AAE9B,GAAIj3N,GAAS,OAAUA,GAAS,OAAUi3N,EAAUr5N,EAAQ,CAC1D,IAAIu3N,EAAQt/G,EAAOxmE,WAAW4nL;AAEN,QAAX,MAAR9B,GAEHjpJ,EAAOjnE,OAAe,KAARjF,IAAkB,KAAe,KAARm1N,GAAiB,QAExDjpJ,EAAOjnE,KAAKjF,GACZi3N,IAEJ,MACE/qJ,EAAOjnE,KAAKjF,EAEhB,CAEA,OAAOksE,CACT,CAxBA,CA2B2B21e;AACzB,OAA0B,IAAnBC,EAAQlkjB,OAAekkjB,EAAQ,GAAGp0iB,SAAS,IAAM,IAC1D,CAiBA,SAASq0iB,GAAe13e,GACtB,OAAOjlD,OAAO2wB,KAAKs0B,GAAOtuD,OAAO,SAAUC,EAAK+uC,GAC9C,IAAIC,EAAOqf,EAAMtf;AASjB,OARiBC,EAAKA,KAGpBhvC,EAAIgvC,EAAKD,UAAYC,EAAKA,KAE1BhvC,EAAI+uC,GAAYC,EAGXhvC,CACT,EAAG,CAAC,EACN,CAEA,SAASgmiB,GAAYxsgB,EAAQ60B,GAC3B,IACI43e,GADShyiB,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,GACnDiyiB,UAC3BA,OAAuC,IAA3BD,GAAuCA,EACnDlnG,EAAagnG,GAAe13e;AAEO,mBAA5B47Z,GAAUnkK,MAAMqgP,SAA2BD,EAGpDj8E,GAAUv+d,OAAO8tC,GAAUiqK,EAAeA,EAAe,CAAC,EAAGwmR,GAAUv+d,OAAO8tC,IAAW,CAAC,GAAIula,GAF9FkrB,GAAUnkK,MAAMqgP,QAAQ3sgB,EAAQusgB,GAAe13e,IAYlC,QAAX70B,GACFwsgB,GAAY,KAAM33e,EAEtB,CAEA,IAaI+3e,GAAaC,GAAWC,GAlZVt8b,GAmZdt+G,GAASu+d,GAAUv+d,OACnB05iB,GAAQn7E,GAAUm7E,MAClBmB,IAAgC/xa,EAAlB4xa,GAAc,CAAC,EAAgC1F,EAAgBt3hB,OAAOi/B,OAAOy5f,EAAqBpB,KAAmBlsa,EAAgB4xa,GAAazF,EAAcv3hB,OAAOi/B,OAAOy5f,EAAqBnB,KAAiByF,IAClOI,GAAuB,KACvBC,GAAa,CAAC,EACdC,GAAc,CAAC,EACfC,GAAa,CAAC,EACdC,GAAgB,CAAC,EACjBC,GAAW,CAAC,EACZC,IAA4Btya,EAAhB6xa,GAAY,CAAC,EAA8B3F,EAAgBt3hB,OAAO2wB,KAAK+mgB,EAAgBJ,KAAmBlsa,EAAgB6xa,GAAW1F,EAAcv3hB,OAAO2wB,KAAK+mgB,EAAgBH,KAAiB0F,IAiB5Ml+O,GAAQ,WACV,IAAI53H,EAAS,SAAgB9X,GAC3B,OAAO14K,GAAOrU,GAAQ,SAAUzJ,EAAG+M,EAAOwqC,GAExC,OADAv3C,EAAEu3C,GAAUz5B,GAAO/Q,EAAOypL,EAAS,CAAC,GAC7Bx2L,CACT,EAAG,CAAC,EACN;AAEAwkjB,GAAal2W,EAAO,SAAUvwL,EAAKgvC,EAAMD,GAcvC,OAbIC,EAAK,KACPhvC,EAAIgvC,EAAK,IAAMD,GAGbC,EAAK,IACOA,EAAK,GAAGpnC,OAAO,SAAUzlB,GACrC,MAAoB,iBAANA,CAChB,GACQ0Z,QAAQ,SAAU88J,GACxB34J,EAAI24J,EAAMjnK,SAAS,KAAOq9C,CAC5B,GAGK/uC,CACT,GACA0miB,GAAcn2W,EAAO,SAAUvwL,EAAKgvC,EAAMD,GAYxC,OAXA/uC,EAAI+uC,GAAYA,EAEZC,EAAK,IACOA,EAAK,GAAGpnC,OAAO,SAAUzlB,GACrC,MAAoB,iBAANA,CAChB,GACQ0Z,QAAQ,SAAU88J,GACxB34J,EAAI24J,GAAS5pH,CACf,GAGK/uC,CACT,GACA6miB,GAAWt2W,EAAO,SAAUvwL,EAAKgvC,EAAMD,GACrC,IAAIg4f,EAAU/3f,EAAK;AAKnB,OAJAhvC,EAAI+uC,GAAYA,EAChBg4f,EAAQlriB,QAAQ,SAAU88J,GACxB34J,EAAI24J,GAAS5pH,CACf,GACO/uC,CACT;AAGA,IAAIgniB,EAAa,QAASt7iB,IAAUmtB,GAAOouhB,aACvCC,EAAcnniB,GAAOqliB,GAAO,SAAUpliB,EAAKmniB,GAC7C,IAAIC,EAAwBD,EAAK,GAC7B3tgB,EAAS2tgB,EAAK,GACdp4f,EAAWo4f,EAAK;AAoBpB,MAlBe,QAAX3tgB,GAAqBwtgB,IACvBxtgB,EAAS,OAG0B,iBAA1B4tgB,IACTpniB,EAAI2nL,MAAMy/W,GAAyB,CACjC5tgB,OAAQA,EACRuV,SAAUA,IAIuB,iBAA1Bq4f,IACTpniB,EAAIqniB,SAASD,EAAsB11iB,SAAS,KAAO,CACjD8nC,OAAQA,EACRuV,SAAUA,IAIP/uC,CACT,EAAG,CACD2nL,MAAO,CAAC,EACR0/W,SAAU,CAAC;AAEbV,GAAaO,EAAYv/W,MACzBi/W,GAAgBM,EAAYG,SAC5Bb,GAAuBc,GAAmBzuhB,GAAO+phB,aAAc,CAC7Dr9F,OAAQ1sb,GAAOgqhB,eAEnB;AAOA,SAAS0E,GAAU/tgB,EAAQqsgB,GACzB,OAAQY,GAAWjtgB,IAAW,CAAC,GAAGqsgB,EACpC,CAIA,SAAS2B,GAAQhugB,EAAQm/H,GACvB,OAAQkuY,GAASrtgB,IAAW,CAAC,GAAGm/H,EAClC,CACA,SAAS8uY,GAAUh+iB,GACjB,OAAOk9iB,GAAWl9iB,IAAS,CACzB+vC,OAAQ,KACRuV,SAAU,KAEd,CAYA,SAAS24f,KACP,OAAOlB,EACT,CAQA,SAASc,GAAmBK,GAC1B,IACIC,GADS3ziB,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,GACtDsxc,OACxBA,OAAiC,IAAxBqiG,EAA4BlH,EAAiBkH,EACtD54iB,EAAQ8xiB,EAAgBv7F,GAAQoiG,GAChCnugB,EAASgogB,EAAgBj8F,GAAQoiG,IAAkBnG,EAAgBj8F,GAAQv2c,GAC3Eo/Z,EAAUu5I,KAAiB19E,GAAUv+d,OAASi8iB,EAAgB;AAClE,OAAOnugB,GAAU40X,GAAW,IAC9B,CAljBkBpkT,GAggBT,SAAUxkH,GACjBghjB,GAAuBc,GAAmB9hjB,EAAEo9iB,aAAc,CACxDr9F,OAAQ1sb,GAAOgqhB,eAEnB,EAngBEa,GAAYz6iB,KAAK+gH,IAogBnBm+M;AA8CA,IAAI0/O,IAAkDrza,EAA3B8xa,GAAuB,CAAC,EAAyC5F,EAAgBt3hB,OAAO2wB,KAAK+ngB,EAAqBpB,KAAmBlsa,EAAgB8xa,GAAsB3F,EAAcv3hB,OAAO2wB,KAAK+ngB,EAAqBnB,KAAiB2F;AACtQ,SAASwB,GAAiBz/f,GACxB,IAAI0/f,EAGAC,GADS/ziB,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,GACjDg0iB,YAC7BA,OAA2C,IAA7BD,GAAyCA,EACvDE,GAA4B1za,EAAhBuza,EAAY,CAAC,EAA8BrH,EAAgB,GAAG5siB,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAO4siB,IAAkBlsa,EAAgBuza,EAAWpH,EAAc,GAAG7siB,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAO6siB,IAAgBoH,GAClOI,EAAc,KACd5iG,EAASm7F,GAETr4f,EAAOjiD,SAAS8hjB,EAASxH,KAAoBr4f,EAAOvjC,KAAK,SAAUnS,GACrE,OAAOk1iB,GAAoBnH,GAAgBt6iB,SAASuM,EACtD,MACE4yc,EAASm7F,IAGPr4f,EAAOjiD,SAAS8hjB,EAASvH,KAAkBt4f,EAAOvjC,KAAK,SAAUnS,GACnE,OAAOk1iB,GAAoBlH,GAAcv6iB,SAASuM,EACpD,MACE4yc,EAASo7F;AAGX,IAAIyH,EAAY//f,EAAOtoC,OAAO,SAAUC,EAAK0vJ,GAC3C,IAAI3gH,EAzKR,SAAqB+zf,EAAWpzY,GAC9B,IALkBjmK,EAKd0/C,EAAQumH,EAAIp2J,MAAM,KAClBkgC,EAAS2P,EAAM,GACf4F,EAAW5F,EAAM1nD,MAAM,GAAG0X,KAAK;AAEnC,OAAIqgC,IAAWspgB,GAA0B,KAAb/zf,IATVtlD,EASyCslD,GARnD0zf,GAAiBv3iB,QAAQzB,IAWxB,KAFAslD,CAIX,CAVA,CAyK+Bl2B,GAAOiqhB,UAAWpzY;AAiB7C,GAfIhkK,GAAOgkK,IACTA,EAAM62Y,GAAWhhG,GAAQn/c,SAASspK,GAAOqyY,EAAqBx8F,GAAQ71S,GAAOA,EAC7Ey4Y,EAAcz4Y,EACd1vJ,EAAIw5B,OAASk2H,GACJo3Y,GAASvhG,GAAQr6c,QAAQwkK,IAAQ,GAC1Cy4Y,EAAcz4Y,EACd1vJ,EAAIw5B,OAAS8tgB,GAAmB53Y,EAAK,CACnC61S,OAAQA,KAEDx2Z,EACT/uC,EAAI+uC,SAAWA,EACN2gH,IAAQ72I,GAAOkqhB,kBAAoBrzY,IAAQw4Y,EAASxH,IAAmBhxY,IAAQw4Y,EAASvH,IACjG3giB,EAAI41H,KAAK3sI,KAAKymK,IAGXu4Y,GAAejoiB,EAAIw5B,QAAUx5B,EAAI+uC,SAAU,CAC9C,IAAIo4f,EAAuB,OAAhBgB,EAAuBV,GAAUzniB,EAAI+uC,UAAY,CAAC,EACzDs5f,EAAgBb,GAAQxniB,EAAIw5B,OAAQx5B,EAAI+uC;AAExCo4f,EAAK3tgB,SACP2ugB,EAAc,MAGhBnoiB,EAAI+uC,SAAWo4f,EAAKp4f,UAAYs5f,GAAiBroiB,EAAI+uC,SACrD/uC,EAAIw5B,OAAS2tgB,EAAK3tgB,QAAUx5B,EAAIw5B,OAEb,QAAfx5B,EAAIw5B,QAAqB9tC,GAAYs1iB,MAAKt1iB,GAAYq1iB,KAAMlohB,GAAOouhB,eAGrEjniB,EAAIw5B,OAAS,MAEjB,CAEA,OAAOx5B,CACT,EA3EO,CACLw5B,OAAQ,KACRuV,SAAU,KACV6mF,KAAM;AA6FR,OAnBIvtF,EAAOjiD,SAAS,cAAgBiiD,EAAOjiD,SAAS,UAClDgijB,EAAU5ugB,OAAS,QAGjB6O,EAAOjiD,SAAS,eAAiBiiD,EAAOjiD,SAAS,UACnDgijB,EAAU5ugB,OAAS,OAGhB4ugB,EAAU5ugB,QAAU+ra,IAAWo7F,IAAiBj1iB,GAAa21iB,OAAKxohB,GAAOouhB,eAC5EmB,EAAU5ugB,OAAS,OACnB4ugB,EAAUr5f,SAAWy4f,GAAQY,EAAU5ugB,OAAQ4ugB,EAAUr5f,WAAaq5f,EAAUr5f,UAGzD,OAArBq5f,EAAU5ugB,QAAmC,OAAhB2ugB,IAG/BC,EAAU5ugB,OAASkugB,MAA4B,OAG1CU,CACT,CAEA,IAAIE,GAAuB,WACzB,SAASA,KA7gCX,SAAyBhze,EAAUkkZ,GACjC,KAAMlkZ,aAAoBkkZ,GACxB,MAAM,IAAItva,UAAU,oCAExB,CAJA,CA8gCoB7oD,KAAMinjB,GAEtBjnjB,KAAKg8Q,YAAc,CAAC,CACtB,CAjgCF,IAAsBm8M,EAAaE;AAujCjC,OAvjCoBF,EAmgCP8uF,EAngCoB5uF,EAmgCX,CAAC,CACrBp/b,IAAK,MACLt2B,MAAO,WAGL,IAFA,IAAI4jD,EAAQvmD,KAEHi0I,EAAOrhI,UAAUrS,OAAQy7Q,EAAc,IAAInoQ,MAAMogI,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IACtF8nI,EAAY9nI,GAAQthI,UAAUshI;AAGhC,IAAIgza,EAAYlrS,EAAYt9P,OAAO1e,KAAKmnjB,iBAAkB,CAAC;AAC3Dp/hB,OAAO2wB,KAAKwugB,GAAW1siB,QAAQ,SAAUye,GACvCstB,EAAMy1N,YAAY/iP,GAAOmpL,EAAeA,EAAe,CAAC,EAAG77J,EAAMy1N,YAAY/iP,IAAQ,CAAC,GAAIiuhB,EAAUjuhB,IACpG0rhB,GAAY1rhB,EAAKiuhB,EAAUjuhB;AAE3B,IAAImuhB,EAAa3G,EAAqBpB,GAAgBpmhB;AAClDmuhB,GAAYzC,GAAYyC,EAAYF,EAAUjuhB,IAClD6tS,IACF,EACF,GACC,CACD7tS,IAAK,QACLt2B,MAAO,WACL3C,KAAKg8Q,YAAc,CAAC,CACtB,GACC,CACD/iP,IAAK,mBACLt2B,MAAO,SAA0BukjB,EAAWG,GAC1C,IAAI3pG,EAAa2pG,EAAWlvgB,QAAUkvgB,EAAW35f,UAAY25f,EAAW15f,KAAO,CAC7E,EAAG05f,GACDA;AAmBJ,OAlBAt/hB,OAAO2wB,KAAKgla,GAAY95b,IAAI,SAAUqV,GACpC,IAAIquhB,EAAkB5pG,EAAWzkb,GAC7Bkf,EAASmvgB,EAAgBnvgB,OACzBuV,EAAW45f,EAAgB55f,SAC3BC,EAAO25f,EAAgB35f,KACvB+3f,EAAU/3f,EAAK;AACdu5f,EAAU/ugB,KAAS+ugB,EAAU/ugB,GAAU,CAAC,GAEzCutgB,EAAQnljB,OAAS,GACnBmljB,EAAQlriB,QAAQ,SAAU88J,GACH,iBAAVA,IACT4vY,EAAU/ugB,GAAQm/H,GAAS3pH,EAE/B,GAGFu5f,EAAU/ugB,GAAQuV,GAAYC,CAChC,GACOu5f,CACT,IAnjCE7uF,GAXN,SAA2B7ud,EAAQ8gD,GACjC,IAAK,IAAIhqD,EAAI,EAAGA,EAAIgqD,EAAM/pD,OAAQD,IAAK,CACrC,IAAI6pD,EAAaG,EAAMhqD;AACvB6pD,EAAWf,WAAae,EAAWf,eACnCe,EAAWd,gBACP,UAAWc,IAAYA,EAAWkxB,aACtCtzD,OAAOmhC,eAAe1/C,EAAQ2gD,EAAWlxB,IAAKkxB,EAChD,CACF,CAGkB8oF,CAAkBklV,EAAYlzd,UAAWozd,GAEzDtwc,OAAOmhC,eAAeiva,EAAa,YAAa,CAC9C98Y,cAmjCK4re,CACT,CA5D2B,GA8DvBluR,GAAW,GACXwuR,GAAS,CAAC,EACVC,GAAY,CAAC,EACbC,GAAsB1/hB,OAAO2wB,KAAK8ugB;AA+CtC,SAASE,GAAWj1H,EAAM7pR,GACxB,IAAK,IAAI30B,EAAOrhI,UAAUrS,OAAQm4B,EAAO,IAAI7kB,MAAMogI,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClGx7G,EAAKw7G,EAAO,GAAKthI,UAAUshI;AAO7B,OAJcqza,GAAO90H,IAAS,IACtBj4a,QAAQ,SAAUmtiB,GACxB/+Y,EAAc++Y,EAAOh1iB,MAAM,KAAM,CAACi2J,GAAan2J,OAAOimB,GACxD,GACOkwI,CACT,CACA,SAASg/Y,GAAUn1H,GACjB,IAAK,IAAIo1H,EAAQj1iB,UAAUrS,OAAQm4B,EAAO,IAAI7kB,MAAMg0iB,EAAQ,EAAIA,EAAQ,EAAI,GAAIx2Z,EAAQ,EAAGA,EAAQw2Z,EAAOx2Z,IACxG34H,EAAK24H,EAAQ,GAAKz+I,UAAUy+I,IAGhBk2Z,GAAO90H,IAAS,IACtBj4a,QAAQ,SAAUmtiB,GACxBA,EAAOh1iB,MAAM,KAAM+lB,EACrB,EAEF,CACA,SAASovhB,KACP,IAAIr1H,EAAO7/a,UAAU,GACjB8lB,EAAO7kB,MAAM5O,UAAU7E,MAAMwK,KAAKgI,UAAW;AACjD,OAAO40iB,GAAU/0H,GAAQ+0H,GAAU/0H,GAAM9/a,MAAM,KAAM+lB,QAAQjH,CAC/D,CAEA,SAAS+rhB,GAAmBuK,GACA,OAAtBA,EAAW5vgB,SACb4vgB,EAAW5vgB,OAAS;AAGtB,IAAIuV,EAAWq6f,EAAWr6f,SACtBvV,EAAS4vgB,EAAW5vgB,QAAUkugB;AAClC,GAAK34f,EAEL,OADAA,EAAWy4f,GAAQhugB,EAAQuV,IAAaA,EACjC02f,GAAgB3G,GAAQzhS,YAAa7jO,EAAQuV,IAAa02f,GAAgBx7E,GAAUv+d,OAAQ8tC,EAAQuV,EAC7G,CACA,IAAI+vf,GAAU,IAAIwJ,GAMdj5K,GAAM,CACRg6K,MAAO,WACL,IAAIpze,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC;AAElF,OAAI8riB,GACFkJ,GAAU,cAAehze,GACzBkze,GAAa,qBAAsBlze,GAC5Bkze,GAAa,QAASlze,IAEtBvB,QAAQC,OAAO,yCAE1B,EACA6vC,MAAO,WACL,IAtmBe7yF,EAsmBXskD,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9Eq1iB,EAAqBrze,EAAOqze;CAAAA,IAE5BzwhB,GAAOmqhB,iBACTnqhB,GAAOmqhB,mBAGTnqhB,GAAOuqhB,oBA7mBQzxhB,EA8mBN,WACP43hB,GAAY,CACVD,mBAAoBA,IAEtBL,GAAU,QAAShze,EACrB,EAlnBG8pe,IACL9we,GAASz+D,WAAWmhB,EAAI,GAAK0zhB,GAAUp8iB,KAAK0oB,GAknB5C,GA4CEithB,GAAM,CACRG,OA7EW,WACXlmhB,GAAOmqhB,kBACPnqhB,GAAOuqhB,oBACP6F,GAAU,SACZ,EA0EEpwhB,OAAQA,GACRw2W,IAAKA,GACL93X,MA9CU,CACVy3C,KAAM,SAAcw6f,GAClB,GAAc,OAAVA,EACF,OAAO;AAGT,GAAuB,WAAnBn+a,EAAQm+a,IAAuBA,EAAMhwgB,QAAUgwgB,EAAMz6f,SACvD,MAAO,CACLvV,OAAQgwgB,EAAMhwgB,OACduV,SAAUy4f,GAAQgC,EAAMhwgB,OAAQgwgB,EAAMz6f,WAAay6f,EAAMz6f;AAI7D,GAAI75C,MAAM1T,QAAQgojB,IAA2B,IAAjBA,EAAM5njB,OAAc,CAC9C,IAAImtD,EAAuC,IAA5By6f,EAAM,GAAGt+iB,QAAQ,OAAes+iB,EAAM,GAAG/njB,MAAM,GAAK+njB,EAAM,GACrEhwgB,EAAS8tgB,GAAmBkC,EAAM;AACtC,MAAO,CACLhwgB,OAAQA,EACRuV,SAAUy4f,GAAQhugB,EAAQuV,IAAaA,EAE3C,CAEA,GAAqB,iBAAVy6f,IAAuBA,EAAMt+iB,QAAQ,GAAG4I,OAAO+kB,GAAOiqhB,UAAW,OAAS,GAAK0G,EAAMtrhB,MAAM8jhB,IAAiC,CACrI,IAAIyH,EAAgB3B,GAAiB0B,EAAMlwiB,MAAM,KAAM,CACrD2uiB;AAEF,MAAO,CACLzugB,OAAQiwgB,EAAcjwgB,QAAUkugB,KAChC34f,SAAUy4f,GAAQiC,EAAcjwgB,OAAQiwgB,EAAc16f,WAAa06f,EAAc16f,SAErF,CAEA,GAAqB,iBAAVy6f,EAAoB,CAC7B,IAAIE,EAAUhC;AAEd,MAAO,CACLlugB,OAAQkwgB,EACR36f,SAAUy4f,GAAQkC,EAASF,IAAUA,EAEzC,CACF,GAOA1K,QAASA,GACTD,mBAAoBA,GACpBG,OAAQA,IAGNuK,GAAc,WAChB,IACII,GADS11iB,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,GAC/Cq1iB,mBAC/BA,OAAoD,IAA/BK,EAAmC/J,EAAW+J,GAClEvgiB,OAAO2wB,KAAKkwb,GAAUv+d,QAAQ9J,OAAS,GAAKi3B,GAAOouhB,eAAiBlH,GAAUlnhB,GAAOmqhB,gBAAgBpE,GAAIvvK,IAAIg6K,MAAM,CACtH9jiB,KAAM+jiB,GAEV;AAEA,SAASM,GAAYp1gB,EAAKq1gB,GAmBxB,OAlBAzgiB,OAAOmhC,eAAe/V,EAAK,WAAY,CACrC7mB,IAAKk8hB,IAEPzgiB,OAAOmhC,eAAe/V,EAAK,OAAQ,CACjC7mB,IAAK,WACH,OAAO6mB,EAAIkoY,SAASz3Z,IAAI,SAAU9iB,GAChC,OAAO68iB,GAAO78iB,EAChB,EACF,IAEFinB,OAAOmhC,eAAe/V,EAAK,OAAQ,CACjC7mB,IAAK,WACH,GAAKoyhB,EAAL,CACA,IAAI/uiB,EAAY4uiB,EAAS1qe,cAAc;AAEvC,OADAlkE,EAAUjH,UAAYyqC,EAAI5oB,KACnB5a,EAAU6L,QAHJ,CAIf,IAEK23B,CACT,CAmDA,SAASs1gB,GAAsB7ze,GAC7B,IAAI8ze,EAAgB9ze,EAAO5H,MACvBu1Z,EAAOmmF,EAAcnmF,KACrB5pN,EAAO+vS,EAAc/vS,KACrBxgO,EAASy8B,EAAOz8B,OAChBuV,EAAWknB,EAAOlnB,SAClB1nC,EAAY4uD,EAAO5uD,UACnB+xE,EAASnjB,EAAOmjB,OAChBwlE,EAAQ3oF,EAAO2oF,MACforZ,EAAS/ze,EAAO+ze,OAChBz6O,EAAUt5P,EAAOs5P,QACjBp2G,EAAQljJ,EAAOkjJ,MACf8wV,EAAoBh0e,EAAOi0e,UAC3BA,OAAuC,IAA3BD,GAAuCA,EAEnDpniB,EAAOm3P,EAAKz+C,MAAQy+C,EAAO4pN,EAC3Bx0d,EAAQyT,EAAKzT,MACbuT,EAASE,EAAKF,OAEdwniB,EAA4B,QAAX3wgB,EACjB4wgB,EAAY,CAACvxhB,GAAOkqhB,iBAAkBh0f,EAAW,GAAGj7C,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAOi7C,GAAY,IAAInnC,OAAO,SAAUpiB,GAC5H,OAAqC,IAA9B2zN,EAAM3hJ,QAAQtsE,QAAQ1F,EAC/B,GAAGoiB,OAAO,SAAUpiB,GAClB,MAAa,KAANA,KAAcA,CACvB,GAAGsO,OAAOqlN,EAAM3hJ,SAASr+D,KAAK,KAC1B2pE,EAAU,CACZjmE,SAAU,GACV4gC,WAAYgmK,EAAeA,EAAe,CAAC,EAAG0V,EAAM17K,YAAa,CAAC,EAAG,CACnE,cAAejE,EACf,YAAauV,EACbm4C,MAASkjd,EACTr9Q,KAAQ5zE,EAAM17K,WAAWsvP,MAAQ,MACjCs9Q,MAAS,6BACTC,QAAW,OAAOx2iB,OAAO1E,EAAO,KAAK0E,OAAO6O,MAG5C4niB,EAAyBJ,KAAoBhxV,EAAM3hJ,QAAQtsE,QAAQ,SAAW,CAChFkE,MAAO,GAAG0E,OAAO1E,EAAQuT,EAAS,GAAK,MAAQ,OAC7C,CAAC;AAEDuniB,IACFpne,EAAQrlC,WAAW0igB,GAAiB,IAGlCvhZ,IACF97E,EAAQjmE,SAAS5T,KAAK,CACpBizB,IAAK,QACLuhB,WAAY,CACV4C,GAAIyiC,EAAQrlC,WAAW,oBAAsB,SAAS3pC,OAAOy7T,GAAWu0O,OAE1EjniB,SAAU,CAAC+hJ,YAEN97E,EAAQrlC,WAAWmhH;AAG5B,IAAI7kI,EAAO0pL,EAAeA,EAAe,CAAC,EAAG3gI,GAAU,CAAC,EAAG,CACzDtpC,OAAQA,EACRuV,SAAUA,EACV60a,KAAMA,EACN5pN,KAAMA,EACNgwS,OAAQA,EACR3iiB,UAAWA,EACX+xE,OAAQA,EACR1tF,OAAQ+3M,EAAeA,EAAe,CAAC,EAAG8mW,GAAyBpxV,EAAMztN,UAGvEsiH,EAAQgsJ,EAAKz+C,OAASqoQ,EAAKroQ,MAAQ4tV,GAAa,uBAAwBpvhB,IAAS,CACnFld,SAAU,GACV4gC,WAAY,CAAC,GACX0rgB,GAAa,uBAAwBpvhB,IAAS,CAChDld,SAAU,GACV4gC,WAAY,CAAC,GAEX5gC,EAAWmxG,EAAMnxG,SACjB4gC,EAAauwE,EAAMvwE;AAKvB,OAHA1jB,EAAKld,SAAWA,EAChBkd,EAAK0jB,WAAaA,EAEd27C,EArGN,SAAmBv2E,GACjB,IAAI22B,EAAS32B,EAAK22B,OACduV,EAAWlsC,EAAKksC,SAChBlyC,EAAWgG,EAAKhG,SAChB4gC,EAAa56B,EAAK46B,WAClB27C,EAASv2E,EAAKu2E,OACd/4C,OAAK+4C,EAAkB,GAAGtlF,OAAO0lC,EAAQ,KAAK1lC,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAOi7C,GAAYqqC;AACnG,MAAO,CAAC,CACNl9D,IAAK,MACLuhB,WAAY,CACVzuC,MAAO,kBAET6N,SAAU,CAAC,CACTqf,IAAK,SACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGhmK,GAAa,CAAC,EAAG,CAC7D4C,GAAIA,IAENxjC,SAAUA,KAGhB,CApBA,CAsGoBkd,GAjIpB,SAAiBlX,GACf,IAAIhG,EAAWgG,EAAKhG,SAChB+md,EAAO/gd,EAAK+gd,KACZ5pN,EAAOn3P,EAAKm3P,KACZv8N,EAAa56B,EAAK46B,WAClB/xC,EAASmX,EAAKnX,OACd2b,EAAYxE,EAAKwE;AAErB,GAAI88hB,GAAsB98hB,IAAcu8c,EAAKroQ,QAAUy+C,EAAKz+C,MAAO,CACjE,IAEIl8M,EAAS,CACXhX,EAHUu7d,EAAKx0d,MACJw0d,EAAKjhd,OAEI,EACpB9P,EAAG;AAEL4qC,EAAkBzuC,MAAIi1iB,GAAWxgW,EAAeA,EAAe,CAAC,EAAG/3M,GAAS,CAAC,EAAG,CAC9E,mBAAoB,GAAGoI,OAAOuL,EAAOhX,EAAIgf,EAAUhf,EAAI,GAAI,OAAOyL,OAAOuL,EAAOxM,EAAIwU,EAAUxU,EAAI,GAAI,QAE1G,CAEA,MAAO,CAAC,CACNqpB,IAAK,MACLuhB,WAAYA,EACZ5gC,SAAUA,GAEd,CAzBA,CAmIkBkd,EAElB,CACA,SAASywhB,GAAuBv0e,GAC9B,IAAI6M,EAAU7M,EAAO6M,QACjB1zE,EAAQ6mE,EAAO7mE,MACfuT,EAASszD,EAAOtzD,OAChB0E,EAAY4uD,EAAO5uD,UACnBu3I,EAAQ3oF,EAAO2oF,MACfu6D,EAAQljJ,EAAOkjJ,MACfsxV,EAAqBx0e,EAAOi0e,UAC5BA,OAAwC,IAA5BO,GAAwCA,EAEpDhtgB,EAAagmK,EAAeA,EAAeA,EAAe,CAAC,EAAG0V,EAAM17K,YAAamhH,EAAQ,CAC3FA,MAASA,GACP,CAAC,GAAI,CAAC,EAAG,CACX13D,MAASiyH,EAAM3hJ,QAAQr+D,KAAK;AAG1B+wiB,IACFzsgB,EAAW0igB,GAAiB;AAG9B,IAAIz0iB,EAAS+3M,EAAe,CAAC,EAAG0V,EAAMztN;AAElCy4iB,GAAsB98hB,KACxB3b,EAAkB2b,UAt8BtB,SAAyB2mG,GACvB,IAAI3mG,EAAY2mG,EAAM3mG,UAClBqjiB,EAAc18b,EAAM5+G,MACpBA,OAA6B,IAArBs7iB,EAtUM,GAsUmCA,EACjDC,EAAe38b,EAAMrrG,OACrBA,OAA+B,IAAtBgoiB,EAxUK,GAwUqCA,EACnDC,EAAsB58b,EAAM68b,cAC5BA,OAA6C,IAA7BD,GAAyCA,EACzDp2gB,EAAM;AAYV,OATEA,GADEq2gB,GAAiB7K,EACZ,aAAalsiB,OAAOuT,EAAUhf,EAAIrH,GAAIoO,EAAQ,EAAG,QAAQ0E,OAAOuT,EAAUxU,EAAI7R,GAAI2hB,EAAS,EAAG,QAC5FkoiB,EACF,yBAAyB/2iB,OAAOuT,EAAUhf,EAAIrH,GAAG,qBAAqB8S,OAAOuT,EAAUxU,EAAI7R,GAAG,SAE9F,aAAa8S,OAAOuT,EAAUhf,EAAIrH,GAAG,QAAQ8S,OAAOuT,EAAUxU,EAAI7R,GAAG,SAG9EwzC,GAAO,SAAS1gC,OAAOuT,EAAU3H,KAAO1e,IAAKqmB,EAAUu8hB,OAAS,EAAI,GAAI,MAAM9viB,OAAOuT,EAAU3H,KAAO1e,IAAKqmB,EAAUw8hB,OAAS,EAAI,GAAI,OAC/H,UAAU/viB,OAAOuT,EAAUG,OAAQ,QAE5C,CArBA,CAs8B0C,CACpCH,UAAWA,EACXwjiB,iBACAz7iB,MAAOA,EACPuT,OAAQA,IAEVjX,EAAO,qBAAuBA,EAAkB2b;AAGlD,IAAIyjiB,EAAc7G,GAAWv4iB;AAEzBo/iB,EAAYlpjB,OAAS,IACvB67C,EAAkBzuC,MAAI87iB;AAGxB,IAAIt2gB,EAAM;AAiBV,OAhBAA,EAAIvrC,KAAK,CACPizB,IAAK,OACLuhB,WAAYA,EACZ5gC,SAAU,CAACimE,KAGT87E,GACFpqH,EAAIvrC,KAAK,CACPizB,IAAK,OACLuhB,WAAY,CACVypD,MAAO,WAETrqF,SAAU,CAAC+hJ,KAIRpqH,CACT,CAsCA,IAAIu2gB,GAAW9gF,GAAUv+d;AACzB,SAASs/iB,GAAYh8f,GACnB,IAAI5/C,EAAQ4/C,EAAK,GACbrsC,EAASqsC,EAAK,GAIdi8f,EADez7D,EADDxgc,EAAKvtD,MAAM,GACkB,GACjB;AAoC9B,MAAO,CACL85N,SACAnsN,MAAOA,EACPuT,OAAQA,EACRqsC,KApCE95C,MAAM1T,QAAQypjB,GACN,CACR/uhB,IAAK,IACLuhB,WAAY,CACVypD,MAAO,GAAGpzF,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAO0uiB,IAEjD3liB,SAAU,CAAC,CACTqf,IAAK,OACLuhB,WAAY,CACVypD,MAAO,GAAGpzF,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAO0uiB,IAC/Cz5I,KAAM,eACN/na,EAAGiqjB,EAAW,KAEf,CACD/uhB,IAAK,OACLuhB,WAAY,CACVypD,MAAO,GAAGpzF,OAAO+kB,GAAOiqhB,UAAW,KAAKhviB,OAAO0uiB,IAC/Cz5I,KAAM,eACN/na,EAAGiqjB,EAAW,OAKV,CACR/uhB,IAAK,OACLuhB,WAAY,CACVsrX,KAAM,eACN/na,EAAGiqjB,IAWX,CACA,IAAIC,GAA6B,CAC/B3vV,SACAnsN,MAAO,IACPuT,OAAQ;AASV,SAASwoiB,GAASp8f,EAAUvV,GAC1B,IAAI2ugB,EAAc3ugB;AAMlB,MAJe,OAAXA,GAA2C,OAAxB3gB,GAAO+phB,eAC5BppgB,EAASkugB,MAGJ,IAAIhze,QAAQ,SAAU2B,EAAS1B,GAQpC,GAHQw0e,GAAa,uBAGD,OAAhBhB,EAAsB,CACxB,IAAIhB,EAAOM,GAAU14f,IAAa,CAAC;AACnCA,EAAWo4f,EAAKp4f,UAAYA,EAC5BvV,EAAS2tgB,EAAK3tgB,QAAUA,CAC1B,CAEA,GAAIuV,GAAYvV,GAAUuxgB,GAASvxgB,IAAWuxgB,GAASvxgB,GAAQuV,GAE7D,OAAOsnB,EAAQ20e,GADJD,GAASvxgB,GAAQuV;CA5BlC,SAA4BA,EAAUvV,GAC/BingB,GAAe5nhB,GAAO2qhB,mBAAoBz0f,GAC7Cn4C,QAAQwD,MAAM,mBAAoBtG,OAAOi7C,EAAU,kBAAoBj7C,OAAO0lC,EAAQ,iBAE1F,CAJA,CAgCuBuV,EAAUvV,GAC7B68B,EAAQotI,EAAeA,EAAe,CAAC,EAAGynW,IAA6B,CAAC,EAAG,CACzEl8f,KAAMn2B,GAAO2qhB,kBAAoBz0f,GAAWo6f,GAAa,wBAA+B,CAAC,IAE7F,EACF,CAEA,IAAIiC,GAAS,WAAiB,EAE1BlljB,GAAI2yB,GAAO0qhB,oBAAsBzD,GAAeA,EAAYpgc,MAAQogc,EAAY1wB,QAAU0wB,EAAc,CAC1Gpgc,KAAM0rc,GACNh8B,QAASg8B,IAEPC,GAAW,aAcXC,GAZQ,SAAe7hjB,GAEzB,OADAvD,GAAEw5G,KAAK,GAAG5rG,OAAOu3iB,GAAU,KAAKv3iB,OAAOrK,EAAM,YACtC,WACL,OAIM,SAAaA,GACrBvD,GAAEw5G,KAAK,GAAG5rG,OAAOu3iB,GAAU,KAAKv3iB,OAAOrK,EAAM,UAC7CvD,GAAEkphB,QAAQ,GAAGt7gB,OAAOu3iB,GAAU,KAAKv3iB,OAAOrK,GAAO,GAAGqK,OAAOu3iB,GAAU,KAAKv3iB,OAAOrK,EAAM,WAAY,GAAGqK,OAAOu3iB,GAAU,KAAKv3iB,OAAOrK,EAAM,SAC3I,CAHU,CAJKA,EACb,CACF,EAYI8hjB,GAAS,WAAiB;AAE9B,SAASC,GAAUjmiB,GAEjB,MAAwB,iBADZA,EAAKpV,aAAeoV,EAAKpV,aAAagwiB,GAAiB,KAErE,CAqBA,SAASv/P,GAAgB1kR,GACvB,OAAO0jhB,EAASh/P,gBAAgB,6BAA8B1kR,EAChE,CAEA,SAASg5C,GAAch5C,GACrB,OAAO0jhB,EAAS1qe,cAAch5C,EAChC,CAEA,SAASuvhB,GAAWC,GAClB,IACIC,GADS13iB,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,GACxD23iB,KACtBA,OAA6B,IAAtBD,EAA8C,QAApBD,EAAYxvhB,IAAgB0kR,GAAkB1rO,GAAgBy2e;AAEnG,GAA2B,iBAAhBD,EACT,OAAO9L,EAAS35iB,eAAeyljB;AAGjC,IAAIxvhB,EAAM0vhB,EAAKF,EAAYxvhB;AAU3B,OATA9S,OAAO2wB,KAAK2xgB,EAAYjugB,YAAc,IAAI5hC,QAAQ,SAAUye,GAC1D4B,EAAIzsB,aAAa6qB,EAAKoxhB,EAAYjugB,WAAWnjB,GAC/C,IACeoxhB,EAAY7uiB,UAAY,IAC9BhB,QAAQ,SAAUssJ,GACzBjsI,EAAIn2B,YAAY0ljB,GAAWtjZ,EAAO,CAChCyjZ,KAAMA,IAEV,GACO1vhB,CACT,CAYA,IAAI2vhB,GAAW,CACb/piB,QAAS,SAAiBwmM,GACxB,IAAI/iM,EAAO+iM,EAAS;AAEpB,GAAI/iM,EAAK1W,WAKP,GAJAy5M,EAAS,GAAGzsM,QAAQ,SAAUiwiB,GAC5BvmiB,EAAK1W,WAAWhH,aAAa4jjB,GAAWK,GAAYvmiB,EACtD,GAEyC,OAArCA,EAAKpV,aAAagwiB,IAA2BtnhB,GAAOyqhB,mBAAoB,CAC1E,IAAIvmC,EAAU6iC,EAAS1zB,cApB/B,SAAuB3mgB,GACrB,IAAIw3f,EAAU,IAAIjpgB,OAAOyR,EAAKwwX,UAAW;AAMzC,MAHU,GAAGjiY,OAAOipgB,EAAS,gCAI/B,CARA,CAoB2Dx3f;AACnDA,EAAK1W,WAAWo0d,aAAa85C,EAASx3f,EACxC,MACEA,EAAKw3D,QAGX,EACAgve,KAAM,SAAczjW,GAClB,IAAI/iM,EAAO+iM,EAAS,GAChB0jW,EAAa1jW,EAAS;AAG1B,IAAKy7V,GAAWx+hB,GAAMra,QAAQ2tB,GAAOkqhB,kBACnC,OAAO8I,GAAS/piB,QAAQwmM;AAG1B,IAAI2jW,EAAS,IAAIt6gB,OAAO,GAAG79B,OAAO+kB,GAAOiqhB,UAAW;AAGpD,UAFOkJ,EAAW,GAAGvugB,WAAW4C,GAE5B2rgB,EAAW,GAAGvugB,WAAWypD,MAAO,CAClC,IAAIgld,EAAeF,EAAW,GAAGvugB,WAAWypD,MAAM5tF,MAAM,KAAKyG,OAAO,SAAUC,EAAK0vJ,GAOjF,OANIA,IAAQ72I,GAAOkqhB,kBAAoBrzY,EAAIxxI,MAAM+thB,GAC/CjsiB,EAAImsiB,MAAMljjB,KAAKymK,GAEf1vJ,EAAIosiB,OAAOnjjB,KAAKymK,GAGX1vJ,CACT,EAAG,CACDosiB,OAAQ,GACRD,MAAO;AAGTH,EAAW,GAAGvugB,WAAWypD,MAAQgld,EAAaC,MAAMhziB,KAAK,KAEtB,IAA/B+yiB,EAAaE,OAAOxqjB,OACtB2jB,EAAKulE,gBAAgB,SAErBvlE,EAAK9V,aAAa,QAASy8iB,EAAaE,OAAOjziB,KAAK,KAExD,CAEA,IAAIkziB,EAAeL,EAAW/miB,IAAI,SAAU9iB,GAC1C,OAAO68iB,GAAO78iB,EAChB,GAAGgX,KAAK;AAERoM,EAAK9V,aAAa0wiB,EAAe,IACjC56hB,EAAKxb,UAAYsijB,CACnB;AAGF,SAASC,GAAqBp2Z,GAC5BA,GACF,CAEA,SAASmP,GAAQ6hB,EAAWlsK,GAC1B,IAAIuxiB,EAAuC,mBAAbvxiB,EAA0BA,EAAWuwiB;AAEnE,GAAyB,IAArBrkY,EAAUtlL,OACZ2qjB;IACK,CACL,IAAIC,EAAQF;AAxkDc,UA0kDtBzzhB,GAAOwqhB,iBACTmJ,EAAQ7M,EAAOvuhB,uBAAyBk7hB,IAG1CE,EAAM,WACJ,IAAIC,OA9HJ5zhB,GAAOmqhB,eACF6I,GAAS/piB,QAGJ+piB,GAAShzhB,GAAOmqhB,iBACZ6I,GAAS/piB,QA0HnB49F,EAAO4rc,GAAW;AACtBpkY,EAAUjiK,IAAIwniB,GACd/sc,IACA6sc,GACF,EACF,CACF,CACA,IAAIx7iB;AACJ,SAAS27iB,KACP37iB,KACF,CACA,SAAS47iB,KACP57iB,KACF,CACA,IAAIo2I,GAAK;AACT,SAASx2H,GAAQttB,GACf,GAAKw8iB,GAIAhnhB,GAAOuqhB,iBAAZ,CAIA,IAAIwJ,EAAwBvpjB,EAAQwpjB,aAChCA,OAA8C,IAA/BD,EAAmCrB,GAASqB,EAC3DE,EAAwBzpjB,EAAQ0pjB,aAChCA,OAA8C,IAA/BD,EAAmCvB,GAASuB,EAC3DE,EAAwB3pjB,EAAQ4pjB,uBAChCA,OAAwD,IAA/BD,EAAmCzB,GAASyB,EACrEE,EAAwB7pjB,EAAQ8pjB,qBAChCA,OAAsD,IAA/BD,EAAmCtN,EAAWsN;AACzE/la,GAAK,IAAI04Z,EAAkB,SAAU53P,GACnC,IAAIl3S,GAAJ,CACA,IAAIq8iB,EAAgB1F;AACpB1+b,GAAQi/L,GAASpsS,QAAQ,SAAUwxiB,GAajC,GAZ4B,cAAxBA,EAAelojB,MAAwBkojB,EAAe/lY,WAAW1lL,OAAS,IAAM4pjB,GAAU6B,EAAe/lY,WAAW,MAClHzuJ,GAAOsqhB,sBACT8J,EAAuBI,EAAexijB,QAGxCgijB,EAAaQ,EAAexijB,SAGF,eAAxBwijB,EAAelojB,MAAyBkojB,EAAexijB,OAAOgE,YAAcgqB,GAAOsqhB,sBACrF8J,EAAuBI,EAAexijB,OAAOgE,YAGnB,eAAxBw+iB,EAAelojB,MAAyBqmjB,GAAU6B,EAAexijB,UAAY03iB,EAAgCr3iB,QAAQmijB,EAAe9+C,eACtI,GAAqC,UAAjC8+C,EAAe9+C,eA3L3B,SAA0Bhpf,GACxB,IAAIi0B,EAASj0B,EAAKpV,aAAeoV,EAAKpV,aAAakwiB,GAAe,KAC9Drxf,EAAOzpC,EAAKpV,aAAeoV,EAAKpV,aAAamwiB,GAAa;AAC9D,OAAO9mgB,GAAUwV,CACnB,CAJA,CA2LyEq+f,EAAexijB,QAAS,CACvF,IAAIyijB,EAAoBxF,GAAiB/D,GAAWsJ,EAAexijB,SAC/D2uC,EAAS8zgB,EAAkB9zgB,OAC3BuV,EAAWu+f,EAAkBv+f;AAEjCs+f,EAAexijB,OAAO4E,aAAa4wiB,EAAa7mgB,GAAU4zgB,GACtDr+f,GAAUs+f,EAAexijB,OAAO4E,aAAa6wiB,EAAWvxf,EAC9D,MA5LiBxpC,EA4LU8niB,EAAexijB,SA3LjC0a,EAAK61D,WAAa71D,EAAK61D,UAAUvjE,UAAY0N,EAAK61D,UAAUvjE,SAASghB,GAAOkqhB,mBA4LnFgK,EAAaM,EAAexijB;AA7LtC,IAAyB0a,CAgMrB,EA3Bc,CA4BhB,GACKw6hB,GACL54Z,GAAGx2H,QAAQw8hB,EAAsB,CAC/B3lY,aACA/pI,cACA4ud,iBACA5kV,YA7CF,CA+CF,CAqGA,SAASw4I,GAAU16S,GACjB,IAAIm1H,EAASzmI,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAC/Es5iB,gBAGEC,EA/EN,SAAsBjoiB,GACpB,IAz9BkBi0B,EAAQi0gB,EAy9BtBC,EAAiBnoiB,EAAKpV,aAAa,eACnCw9iB,EAAmBpoiB,EAAKpV,aAAa,aACrCyphB,OAA+B9mgB,IAAnBvN,EAAKq0gB,UAA0Br0gB,EAAKq0gB,UAAUjmb,OAAS,GACnEn/D,EAAMszgB,GAAiB/D,GAAWx+hB;AAWtC,OATKivB,EAAIgF,SACPhF,EAAIgF,OAASkugB,MAGXgG,GAAkBC,IACpBn5gB,EAAIgF,OAASk0gB,EACbl5gB,EAAIua,SAAW4+f,GAGbn5gB,EAAIua,UAAYva,EAAIgF,SAIpBhF,EAAIgF,QAAUogf,EAAUh4hB,OAAS,IACnC4yC,EAAIua,UA5+BYvV,EA4+BUhF,EAAIgF,OA5+BNi0gB,EA4+BcloiB,EAAKq0gB,WA3+BrC8sB,GAAYltgB,IAAW,CAAC,GAAGi0gB,IA2+BwBlG,GAAU/ygB,EAAIgF,OAAQosgB,GAAMrgiB,EAAKq0gB,eAGvFplf,EAAIua,UAAYl2B,GAAOouhB,cAAgB1hiB,EAAKzd,YAAcyd,EAAKzd,WAAW2wF,WAAa1yE,KAAK8yE,YAC/FrkD,EAAIua,SAAWxpC,EAAKzd,WAAWwmB,OARxBkmB,CAYX,CA5BA,CA+EiCjvB,GAC3BwpC,EAAWy+f,EAAaz+f,SACxBvV,EAASg0gB,EAAah0gB,OACtB6zP,EAAemgR,EAAa53a,KAE5Bg4a,EAtDN,SAA2BroiB,GACzB,IAAIqoiB,EAAkB5kc,GAAQzjG,EAAKk4B,YAAY19B,OAAO,SAAUC,EAAK+nd,GAKnE,MAJiB,UAAb/nd,EAAIvW,MAAiC,UAAbuW,EAAIvW,OAC9BuW,EAAI+nd,EAAKt+d,MAAQs+d,EAAK/je,OAGjBgc,CACT,EAAG,CAAC,GACA4+I,EAAQr5I,EAAKpV,aAAa,SAC1Bo/T,EAAUhqT,EAAKpV,aAAa;AAWhC,OATI0oB,GAAOqqhB,WACLtkZ,EACFgvZ,EAAgB,mBAAqB,GAAG95iB,OAAO+kB,GAAOkqhB,iBAAkB,WAAWjviB,OAAOy7T,GAAWu0O,OAErG8J,EAAgB,eAAiB,OACjCA,EAA2BC,UAAI,UAI5BD,CACT,CArBA,CAsDyCroiB,GACnCuoiB,EAAa/E,GAAW,sBAAuB,CAAC,EAAGxjiB,GACnDwoiB,EAAcrza,EAAO6ya,YA3G3B,SAAsBhoiB,GACpB,IAAIvW,EAAQuW,EAAKpV,aAAa,SAC1BqkC,EAAM;AAgBV,OAdIxlC,IACFwlC,EAAMxlC,EAAMsK,MAAM,KAAKyG,OAAO,SAAUC,EAAKhR,GAC3C,IAAItD,EAASsD,EAAMsK,MAAM,KACrBizK,EAAO7gL,EAAO,GACd1H,EAAQ0H,EAAOjK,MAAM;AAMzB,OAJI8qL,GAAQvoL,EAAMpC,OAAS,IACzBoe,EAAIusK,GAAQvoL,EAAMmV,KAAK,KAAKw6F,QAGvB3zF,CACT,EAAG,CAAC,IAGCw0B,CACT,CAnBA,CA2GqDjvB,GAAQ;AAC3D,OAAOk+L,EAAe,CACpB10J,SAAUA,EACV6vG,MAAOr5I,EAAKpV,aAAa,SACzBo/T,QAAShqT,EAAKpV,aAAa,oBAC3BqpC,OAAQA,EACRnyB,UAAWs8hB,GACX3pS,KAAM,CACJjrN,SAAU,KACVvV,OAAQ,KACRo8F,KAAM,IAERo0a,OAAQ,KACR5wd,UACA+/H,MAAO,CACL3hJ,QAAS61N,EACT3hS,OAAQqijB,EACRtwgB,WAAYmwgB,IAEbE,EACL,CAEA,IAAIE,GAAW/jF,GAAUv+d;AAEzB,SAASuijB,GAAiB1oiB,GACxB,IAAI2oiB,EAAqC,SAA1Br1hB,GAAOmqhB,eAA4B/iP,GAAU16S,EAAM,CAChEgoiB,iBACGttP,GAAU16S;AAEf,OAAK2oiB,EAAS/0V,MAAM3hJ,QAAQtsE,QAAQ+2iB,GAC3BkH,GAAa,qBAAsB5jiB,EAAM2oiB,GAEzC/E,GAAa,iCAAkC5jiB,EAAM2oiB,EAEhE,CAEA,IAAIC,GAAgB,IAAI/oiB;AAQxB,SAASgpiB,GAAOv+hB,GACd,IAAI7U,EAAW/G,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK;AACnF,IAAK8riB,EAAQ,OAAOrre,QAAQ2B;AAC5B,IAAIg4e,EAAgBzO,EAASjxiB,gBAAgBysE,UAEzCkze,EAAS,SAAgBrkd,GAC3B,OAAOokd,EAAcp1gB,IAAI,GAAGnlC,OAAOysiB,EAA6B,KAAKzsiB,OAAOm2F,GAC9E,EAEIskd,EAAY,SAAmBtkd,GACjC,OAAOokd,EAActxe,OAAO,GAAGjpE,OAAOysiB,EAA6B,KAAKzsiB,OAAOm2F,GACjF,EAEIqkU,EAAWz1Y,GAAOouhB,aAAekH,GAAgBvN,EAAS37hB,IAAI,SAAU1X,GAC1E,MAAO,MAAMuG,OAAOvG,EACtB,GAAGuG,OAAOsV,OAAO2wB,KAAKi0gB;AAEjB1/I,EAASloa,SAAS,OACrBkoa,EAASrla,KAAK;AAGhB,IAAIuljB,EAAmB,CAAC,IAAI16iB,OAAOmuiB,EAAuB,UAAUnuiB,OAAOqsiB,EAAe,OAAOrsiB,OAAOw6Z,EAASrpZ,IAAI,SAAU/e,GAC7H,MAAO,IAAI4N,OAAO5N,EAAG,UAAU4N,OAAOqsiB,EAAe,KACvD,IAAIhniB,KAAK;AAET,GAAgC,IAA5Bq1iB,EAAiB5sjB,OACnB,OAAO8yE,QAAQ2B;AAGjB,IAAIqoI,EAAa;AAEjB,IACEA,EAAa11F,GAAQn5F,EAAKymD,iBAAiBk4e,GAC7C,CAAE,MAAO9sjB,GAAI,CAGb,KAAIg9M,EAAW98M,OAAS,GAItB,OAAO8yE,QAAQ2B;AAHfi4e,EAAO,WACPC,EAAU;AAKZ,IAAI7uc,EAAO4rc,GAAW,UAClBpkY,EAAYw3B,EAAW3+L,OAAO,SAAUC,EAAKuF,GAC/C,IACE,IAAI+iM,EAAW2lW,GAAiB1oiB;AAE5B+iM,GACFtoM,EAAI/W,KAAKq/M,EAEb,CAAE,MAAO5mN,GACF++iB,GACY,gBAAX/+iB,EAAE+H,MACJmN,QAAQwD,MAAM1Y,EAGpB,CAEA,OAAOse,CACT,EAAG;AACH,OAAO,IAAI00D,QAAQ,SAAU2B,EAAS1B,GACpCD,QAAQ3zC,IAAImmJ,GAAWpyG,KAAK,SAAU25e,GACpCppZ,GAAQopZ,EAAmB,WACzBH,EAAO,UACPA,EAAO,YACPC,EAAU,WACc,mBAAbvziB,GAAyBA,IACpC0kG,IACArpC,GACF,EACF,GAAGM,MAAM,SAAUj1E,GACjBg+G,IACA/qC,EAAOjzE,EACT,EACF,EACF,CAEA,SAASw3f,GAAO3ze,GACd,IAAIvK,EAAW/G,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK;AACnFg6iB,GAAiB1oiB,GAAMuvD,KAAK,SAAUwzI,GAChCA,GACFjjD,GAAQ,CAACijD,GAAWttM,EAExB,EACF,CA5FA4liB,EAAS37hB,IAAI,SAAUsgc,GACrB4oG,GAAcl1gB,IAAI,MAAMnlC,OAAOyxc,GACjC,GACAn8b,OAAO2wB,KAAK+mgB,EAAgBJ,IAAiBz7hB,IAAIkpiB,GAAcl1gB,IAAIn1C,KAAKqqjB,KACxE/kiB,OAAO2wB,KAAK+mgB,EAAgBH,IAAe17hB,IAAIkpiB,GAAcl1gB,IAAIn1C,KAAKqqjB,KACtEA,GAAgBzP,EAAmByP;AAyGnC,IAAI1ue,GAAS,SAAgBive,GAC3B,IAAIz4e,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9E06iB,EAAoB14e,EAAO5uD,UAC3BA,OAAuC,IAA3BsniB,EAA+BhL,GAAuBgL,EAClEC,EAAiB34e,EAAOmjB,OACxBA,OAAiC,IAAxBw1d,GAAoCA,EAC7CC,EAAe54e,EAAO+jM,KACtBA,OAA6B,IAAtB60S,EAA0B,KAAOA,EACxCC,EAAiB74e,EAAO+ze,OACxBA,OAAiC,IAAxB8E,EAA4B,KAAOA,EAC5CC,EAAgB94e,EAAO2oF,MACvBA,OAA+B,IAAvBmwZ,EAA2B,KAAOA,EAC1CC,EAAkB/4e,EAAOs5P,QACzBA,OAAmC,IAAzBy/O,EAA6B,KAAOA,EAC9CC,EAAkBh5e,EAAOuB,QACzBA,OAAmC,IAAzBy3e,EAA6B,GAAKA,EAC5CC,EAAqBj5e,EAAOx4B,WAC5BA,OAAyC,IAA5ByxgB,EAAgC,CAAC,EAAIA,EAClDC,EAAiBl5e,EAAOvqE,OACxBA,OAAiC,IAAxByjjB,EAA4B,CAAC,EAAIA;AAC9C,GAAKT,EAAL,CACA,IAAIl1gB,EAASk1gB,EAAel1gB,OACxBuV,EAAW2/f,EAAe3/f,SAC1BC,EAAO0/f,EAAe1/f;AAC1B,OAAO46f,GAAYnmW,EAAe,CAChCt+M,KAAM,QACLupjB,GAAiB,WAelB,OAdAzF,GAAU,2BAA4B,CACpCyF,eAAgBA,EAChBz4e,OAAQA,IAGNp9C,GAAOqqhB,WACLtkZ,EACFnhH,EAAW,mBAAqB,GAAG3pC,OAAO+kB,GAAOkqhB,iBAAkB,WAAWjviB,OAAOy7T,GAAWu0O,OAEhGrmgB,EAAW,eAAiB,OAC5BA,EAAsBowgB,UAAI,UAIvB/D,GAAsB,CAC3Bz7e,MAAO,CACLu1Z,KAAMonF,GAAYh8f,GAClBgrN,KAAMA,EAAOgxS,GAAYhxS,EAAKhrN,MAAQ,CACpCusK,SACAnsN,MAAO,KACPuT,OAAQ,KACRqsC,KAAM,CAAC,IAGXxV,OAAQA,EACRuV,SAAUA,EACV1nC,UAAWo8L,EAAeA,EAAe,CAAC,EAAGkgW,IAAuBt8hB,GACpE+xE,OAAQA,EACRwlE,MAAOA,EACPorZ,OAAQA,EACRz6O,QAASA,EACTp2G,MAAO,CACL17K,WAAYA,EACZ/xC,OAAQA,EACR8rE,QAASA,IAGf,EA5CqB,CA6CvB,EACI43e,GAAkB,CACpBpK,OAAQ,WACN,MAAO,CACLh2f,MArFgBsrC,EAqFG7a,GApFhB,SAAU4ve,GACf,IAAIp5e,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9Ey6iB,GAAkBW,GAAuB,CAAC,GAAGrggB,KAAOqggB,EAAsBxQ,GAAmBwQ,GAAuB,CAAC,GACrHr1S,EAAO/jM,EAAO+jM;AAMlB,OAJIA,IACFA,GAAQA,GAAQ,CAAC,GAAGhrN,KAAOgrN,EAAO6kS,GAAmB7kS,GAAQ,CAAC,IAGzD1/K,EAAKo0d,EAAgBjrW,EAAeA,EAAe,CAAC,EAAGxtI,GAAS,CAAC,EAAG,CACzE+jM,KAAMA,IAEV;AAbF,IAAsB1/K,CAuFpB,EACAwrO,MAAO,WACL,MAAO,CACLwpP,0BAA2B,SAAmCrlZ,GAG5D,OAFAA,EAAY4iZ,aAAeuB,GAC3BnkZ,EAAY8iZ,aAAe7zD,GACpBjvV,CACT,EAEJ,EACAslZ,SAAU,SAAkBC,GAC1BA,EAAanG,MAAQ,SAAUpze,GAC7B,IAAIw5e,EAAex5e,EAAO1wD,KACtBA,OAA6B,IAAtBkqiB,EAA0B7P,EAAW6P,EAC5CC,EAAmBz5e,EAAOj7D;AAE9B,OAAOoziB,GAAO7oiB,OAD2B,IAA1BmqiB,EAA8B,WAAa,EAAIA,EAEhE,EAEAF,EAAaG,+BAAiC,SAAUpqiB,EAAM2oiB,GAC5D,IAAIn/f,EAAWm/f,EAASn/f,SACpB6vG,EAAQsvZ,EAAStvZ,MACjB2wK,EAAU2+O,EAAS3+O,QACnB/1R,EAAS00gB,EAAS10gB,OAClBnyB,EAAY6miB,EAAS7miB,UACrB+xE,EAAS80d,EAAS90d,OAClB4gL,EAAOk0S,EAASl0S,KAChBgwS,EAASkE,EAASlE,OAClB7wV,EAAQ+0V,EAAS/0V;AACrB,OAAO,IAAIzkJ,QAAQ,SAAU2B,EAAS1B,GACpCD,QAAQ3zC,IAAI,CAACoqhB,GAASp8f,EAAUvV,GAASwgO,EAAKjrN,SAAWo8f,GAASnxS,EAAKjrN,SAAUirN,EAAKxgO,QAAUk7B,QAAQ2B,QAAQ,CAC9GklJ,SACAnsN,MAAO,IACPuT,OAAQ,IACRqsC,KAAM,CAAC,MACJ8lB,KAAK,SAAUjyD,GAClB,IAAImrG,EAAQwhY,EAAe3se,EAAM,GAC7B+gd,EAAO51W,EAAM,GACbgsJ,EAAOhsJ,EAAM;AAEjB33C,EAAQ,CAAC9wD,EAAMukiB,GAAsB,CACnCz7e,MAAO,CACLu1Z,KAAMA,EACN5pN,KAAMA,GAERxgO,OAAQA,EACRuV,SAAUA,EACV1nC,UAAWA,EACX+xE,OAAQA,EACR4wd,OAAQA,EACRprZ,MAAOA,EACP2wK,QAASA,EACTp2G,MAAOA,EACP+wV,gBAEJ,GAAGvze,MAAMhC,EACX,EACF,EAEA66e,EAAaI,qBAAuB,SAAU3hc,GAC5C,IAWI4hc,EAXAhziB,EAAWoxG,EAAMpxG,SACjB4gC,EAAawwE,EAAMxwE,WACnBmmb,EAAO31W,EAAM21W,KACbv8c,EAAY4mG,EAAM5mG,UAElByjiB,EAAc7G,GADLh2b,EAAMviH;AAmBnB,OAhBIo/iB,EAAYlpjB,OAAS,IACvB67C,EAAkBzuC,MAAI87iB,GAKpB3G,GAAsB98hB,KACxBwoiB,EAAY1G,GAAa,oCAAqC,CAC5DvlF,KAAMA,EACNv8c,UAAWA,EACXyoiB,eAAgBlsF,EAAKx0d,MACrB2gjB,UAAWnsF,EAAKx0d,SAIpByN,EAAS5T,KAAK4mjB,GAAajsF,EAAK50a,MACzB,CACLnyC,SAAUA,EACV4gC,WAAYA,EAEhB,CACF,GAGEuygB,GAAS,CACXhL,OAAQ,WACN,MAAO,CACL76M,MAAO,SAAe8lN,GACpB,IAAIh6e,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9Eg7iB,EAAkBh5e,EAAOuB,QACzBA,OAAmC,IAAzBy3e,EAA6B,GAAKA;AAChD,OAAOrF,GAAY,CACjBzkjB,KAAM,SACL,WACD8jjB,GAAU,2BAA4B,CACpCgH,UAAWA,EACXh6e,OAAQA;AAEV,IAAIp5D,EAAW;AAMf,OALAoziB,EAAU,SAAUl2hB,GAClB7kB,MAAM1T,QAAQu4B,GAAQA,EAAK9U,IAAI,SAAU9iB,GACvC0a,EAAWA,EAAS/I,OAAO3R,EAAEu6a,SAC/B,GAAK7/Z,EAAWA,EAAS/I,OAAOimB,EAAK2iZ,SACvC,GACO,CAAC,CACNxgZ,IAAK,OACLuhB,WAAY,CACVypD,MAAO,CAAC,GAAGpzF,OAAO+kB,GAAOiqhB,UAAW,YAAYhviB,OAAO4qiB,EAAmBlne,IAAUr+D,KAAK,MAE3F0D,SAAUA,GAEd,EACF,EAEJ,GAGEqziB,GAAgB,CAClBlL,OAAQ,WACN,MAAO,CACL/pV,QAAS,SAAiBn4I,GACxB,IAAI7M,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9E86iB,EAAgB94e,EAAO2oF,MACvBA,OAA+B,IAAvBmwZ,EAA2B,KAAOA,EAC1CE,EAAkBh5e,EAAOuB,QACzBA,OAAmC,IAAzBy3e,EAA6B,GAAKA,EAC5CC,EAAqBj5e,EAAOx4B,WAC5BA,OAAyC,IAA5ByxgB,EAAgC,CAAC,EAAIA,EAClDC,EAAiBl5e,EAAOvqE,OACxBA,OAAiC,IAAxByjjB,EAA4B,CAAC,EAAIA;AAC9C,OAAOvF,GAAY,CACjBzkjB,KAAM,UACN29E,QAASA,GACR,WAKD,OAJAmme,GAAU,2BAA4B,CACpCnme,QAASA,EACT7M,OAAQA,IA70BpB,SAAmCA,GACjC,IAAI6M,EAAU7M,EAAO6M,QACjB87E,EAAQ3oF,EAAO2oF,MACfu6D,EAAQljJ,EAAOkjJ,MAEf17K,EAAagmK,EAAeA,EAAeA,EAAe,CAAC,EAAG0V,EAAM17K,YAAamhH,EAAQ,CAC3FA,MAASA,GACP,CAAC,GAAI,CAAC,EAAG,CACX13D,MAASiyH,EAAM3hJ,QAAQr+D,KAAK,OAG1B2xiB,EAAc7G,GAAW9qV,EAAMztN;AAE/Bo/iB,EAAYlpjB,OAAS,IACvB67C,EAAkBzuC,MAAI87iB;AAGxB,IAAIt2gB,EAAM;AAiBV,OAhBAA,EAAIvrC,KAAK,CACPizB,IAAK,OACLuhB,WAAYA,EACZ5gC,SAAU,CAACimE,KAGT87E,GACFpqH,EAAIvrC,KAAK,CACPizB,IAAK,OACLuhB,WAAY,CACVypD,MAAO,WAETrqF,SAAU,CAAC+hJ,KAIRpqH,CACT,CAnCA,CA+0B2C,CAC/BsuC,QAASA,EAAQpxE,WACjBktJ,MAAOA,EACPu6D,MAAO,CACL17K,WAAYA,EACZ/xC,OAAQA,EACR8rE,QAAS,CAAC,GAAG1jE,OAAO+kB,GAAOiqhB,UAAW,oBAAoBhviB,OAAO4qiB,EAAmBlne,MAG1F,EACF,EAEJ,GAGE24e,GAAa,CACfnL,OAAQ,WACN,MAAO,CACLtgjB,KAAM,SAAco+E,GAClB,IAAI7M,EAAShiE,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9E06iB,EAAoB14e,EAAO5uD,UAC3BA,OAAuC,IAA3BsniB,EAA+BhL,GAAuBgL,EAClEI,EAAgB94e,EAAO2oF,MACvBA,OAA+B,IAAvBmwZ,EAA2B,KAAOA,EAC1CE,EAAkBh5e,EAAOuB,QACzBA,OAAmC,IAAzBy3e,EAA6B,GAAKA,EAC5CC,EAAqBj5e,EAAOx4B,WAC5BA,OAAyC,IAA5ByxgB,EAAgC,CAAC,EAAIA,EAClDC,EAAiBl5e,EAAOvqE,OACxBA,OAAiC,IAAxByjjB,EAA4B,CAAC,EAAIA;AAC9C,OAAOvF,GAAY,CACjBzkjB,KAAM,OACN29E,QAASA,GACR,WAKD,OAJAmme,GAAU,2BAA4B,CACpCnme,QAASA,EACT7M,OAAQA,IAEHu0e,GAAuB,CAC5B1ne,QAASA,EACTz7D,UAAWo8L,EAAeA,EAAe,CAAC,EAAGkgW,IAAuBt8hB,GACpEu3I,MAAOA,EACPu6D,MAAO,CACL17K,WAAYA,EACZ/xC,OAAQA,EACR8rE,QAAS,CAAC,GAAG1jE,OAAO+kB,GAAOiqhB,UAAW,iBAAiBhviB,OAAO4qiB,EAAmBlne,MAGvF,EACF,EAEJ,EACA+3e,SAAU,SAAkBC,GAC1BA,EAAaY,mBAAqB,SAAU7qiB,EAAM2oiB,GAChD,IAAItvZ,EAAQsvZ,EAAStvZ,MACjBv3I,EAAY6miB,EAAS7miB,UACrB8xM,EAAQ+0V,EAAS/0V,MACjB/pN,EAAQ,KACRuT,EAAS;AAEb,GAAIq9hB,EAAO,CACT,IAAIqQ,EAAmBngjB,SAASuW,iBAAiBlB,GAAMqsa,SAAU,IAC7D0+H,EAAqB/qiB,EAAK9W;AAC9BW,EAAQkhjB,EAAmBlhjB,MAAQihjB,EACnC1tiB,EAAS2tiB,EAAmB3tiB,OAAS0tiB,CACvC,CAMA,OAJIx3hB,GAAOqqhB,WAAatkZ,IACtBu6D,EAAM17K,WAAW,eAAiB,QAG7Bi3B,QAAQ2B,QAAQ,CAAC9wD,EAAMiliB,GAAuB,CACnD1ne,QAASv9D,EAAKxb,UACdqF,MAAOA,EACPuT,OAAQA,EACR0E,UAAWA,EACXu3I,MAAOA,EACPu6D,MAAOA,EACP+wV,gBAEJ,CACF,GAGEqG,GAAwB,IAAI5+gB,OAAO,IAAM,MACzC6+gB,GAA0B,CAAC,QAAS;AAYxC,SAASC,GAAmBlriB,EAAM0H,GAChC,IAAIyjiB,EAAmB,GAAG58iB,OAvtES,kCAutE8BA,OAAOmZ,EAASnL,QAAQ,IAAK;AAC9F,OAAO,IAAI4yD,QAAQ,SAAU2B,EAAS1B,GACpC,GAA4C,OAAxCpvD,EAAKpV,aAAaugjB,GAEpB,OAAOr6e;AAGT,IAt/CkBwve,EAChB8K,EACAC,EAq/CEC,EADW7nc,GAAQzjG,EAAK1I,UACiB+K,OAAO,SAAUpiB,GAC5D,OAAOA,EAAE2K,aAAaiwiB,KAA4BnzhB,CACpD,GAAG,GACCvhB,EAASi0iB,EAAOl5hB,iBAAiBlB,EAAM0H,GACvCojY,EAAa3kZ,EAAOghF,iBAAiB,eAAexuD,MAAMgkhB,GAC1Dr0J,EAAaniZ,EAAOghF,iBAAiB,eACrC5J,EAAUp3E,EAAOghF,iBAAiB;AAEtC,GAAImke,IAAkCxgK,EAKpC,OADA9qY,EAAKpb,YAAY0mjB,GACVx6e;AACF,GAAIg6U,GAA0B,SAAZvtU,GAAkC,KAAZA,EAAgB,CAC7D,IAAIgue,EAAWpljB,EAAOghF,iBAAiB,WAEnC64X,GAAU,CAAC,SAASr6c,QAAQmlZ,EAAW,IAAMswJ,EAAeD,EAC5DlngB,GAAU,CAAC,QAAS,UAAW,QAAS,OAAQ,UAAW,SAAU,OAAOtuC,QAAQmlZ,EAAW,IAAMmxJ,EAAgBj8F,GAAQl1D,EAAW,GAAG3qY,eAAiBy8hB,EAAsB58F,GAAQ13D,GAE1LkjK,EAxCV,SAA6Bjue,GAC3B,IA3qDmB+2B,EAGfh7E,EAFAnf,EACA0zB,EAyqDA49gB,EAAUlue,EAAQhhE,QAAQyuiB,GAAuB,IACjDU,GA3qDAvxiB,GADem6F,EA4qDSm3c,GA3qDVpvjB,QACdwxC,EAAQymE,EAAOxmE,WA0qDkB,KAvqDxB,OAAUD,GAAS,OAAU1zB,EAAOtV,IAC/Cy0B,EAASg7E,EAAOxmE,WAAWjpC,KAEb,OAAUy0B,GAAU,MACN,MAAlBuU,EAAQ,OAAkBvU,EAAS,MAAS,MAIjDuU,GAgqDH89gB,EAAeD,GAAaT,GAAwB,IAAMS,GAAaT,GAAwB,GAC/FW,EAA+B,IAAnBH,EAAQpvjB,QAAeovjB,EAAQ,KAAOA,EAAQ;AAC9D,MAAO,CACLhtjB,MAAmB4hjB,GAAZuL,EAAkBH,EAAQ,GAAYA,GAC7CI,YAAaF,GAAgBC,EAEjC,CATA,CAwCqDL,GAC3CO,EAAWN,EAAqB/sjB,MAChCotjB,EAAcL,EAAqBK,YAEnCE,EAAOjhK,EAAW,GAAGp+W,WAAW,eAChC8c,EAAWw4f,GAAU/tgB,EAAQ63gB,GAC7BE,EAAiBxigB;AAErB,GAAIuigB,EAAM,CACR,IAAIE,GAnhDNb,EAAa/J,GADGf,EAohDewL,GAlhD/BT,EAAarJ,GAAU,MAAO1B,GAC3B8K,IAAeC,EAAa,CACjCp3gB,OAAQ,MACRuV,SAAU6hgB,GACR,OAAS,CACXp3gB,OAAQ,KACRuV,SAAU;AA8gDFyigB,EAAUzigB,UAAYyigB,EAAUh4gB,SAClCuV,EAAWyigB,EAAUzigB,SACrBvV,EAASg4gB,EAAUh4gB,OAEvB,CAIA,IAAIuV,GAAaqigB,GAAiBP,GAAiCA,EAA8B1gjB,aAAakwiB,KAAiB7mgB,GAAUq3gB,EAA8B1gjB,aAAamwiB,KAAeiR,EAsCjMl7e;IAtCkN,CAClN9wD,EAAK9V,aAAaihjB,EAAkBa,GAEhCV,GAEFtriB,EAAKpb,YAAY0mjB;AAGnB,IAAI71Q,EApiBH,CACLjsP,SAAU,KACV6vG,MAAO,KACP2wK,QAAS,KACT/1R,OAAQ,KACRnyB,UAAWs8hB,GACXvqd,UACA4gL,KAAM,CACJjrN,SAAU,KACVvV,OAAQ,KACRo8F,KAAM,IAERo0a,OAAQ,KACR7wV,MAAO,CACL3hJ,QAAS,GACT9rE,OAAQ,CAAC,EACT+xC,WAAY,CAAC,IAqhBP07K,EAAQ6hF,EAAK7hF;AACjBA,EAAM17K,WAAW2igB,GAA0BnzhB,EAC3Ck+hB,GAASp8f,EAAUvV,GAAQs7B,KAAK,SAAU8uZ,GACxC,IAAIkoF,EAAYhC,GAAsBrmW,EAAeA,EAAe,CAAC,EAAGu3F,GAAO,CAAC,EAAG,CACjF3sO,MAAO,CACLu1Z,KAAMA,EACN5pN,KA9hDL,CACLxgO,OAAQ,KACRuV,SAAU,KACV6mF,KAAM,KA6hDEp8F,OAAQA,EACRuV,SAAUwigB,EACVp4V,MAAOA,EACP+wV,gBAGEnmiB,EAAU67hB,EAAS1qe,cAAc;AAEpB,aAAbjoD,EACF1H,EAAK1d,aAAakc,EAASwB,EAAKzd,YAEhCyd,EAAKxf,YAAYge,GAGnBA,EAAQgyX,UAAY+1K,EAAU7miB,IAAI,SAAU9iB,GAC1C,OAAO68iB,GAAO78iB,EAChB,GAAGgX,KAAK,MACRoM,EAAKulE,gBAAgB4le,GACrBr6e,GACF,GAAGM,MAAMhC,EACX,CAGF,MACE0B,GAEJ,EACF,CAEA,SAASv0D,GAAQyD,GACf,OAAOmvD,QAAQ3zC,IAAI,CAAC0vhB,GAAmBlriB,EAAM,YAAakriB,GAAmBlriB,EAAM,YACrF,CAEA,SAASksiB,GAAYlsiB,GACnB,QAAOA,EAAK1W,aAAe7I,SAASywE,OAAU+pe,EAAoCt1iB,QAAQqa,EAAKyvB,QAAQ3vC,gBAAmBkgB,EAAKpV,aAAaiwiB,IAA6B76hB,EAAK1W,YAA0C,QAA5B0W,EAAK1W,WAAWmmC,QAC9M,CAEA,SAASmugB,GAAqBtzhB,GAC5B,GAAKkwhB,EACL,OAAO,IAAIrre,QAAQ,SAAU2B,EAAS1B,GACpC,IAAI+8e,EAAa1oc,GAAQn5F,EAAKymD,iBAAiB,MAAM1uD,OAAO6piB,IAAaxsiB,IAAInD,IACzEtB,EAAM8qiB,GAAW;AACrBoB,KACAh4e,QAAQ3zC,IAAI2whB,GAAY58e,KAAK,WAC3Bt0D,IACAmsiB,KACAt2e,GACF,GAAGM,MAAM,WACPn2D,IACAmsiB,KACAh4e,GACF,EACF,EACF,CAEA,IAqBIg9e,MAmCAC,GAAuB,SAA8BC,GASvD,OAAOA,EAAgBnsiB,cAAcpM,MAAM,KAAKyG,OAAO,SAAUC,EAAKne,GACpE,IAAIsnD,EAAQtnD,EAAE6jB,cAAcpM,MAAM,KAC9B85B,EAAQ+V,EAAM,GACdysF,EAAOzsF,EAAM1nD,MAAM,GAAG0X,KAAK;AAE/B,GAAIi6B,GAAkB,MAATwiG,EAEX,OADA51H,EAAI4jiB,SACG5jiB;AAGT,GAAIozB,GAAkB,MAATwiG,EAEX,OADA51H,EAAI6jiB,SACG7jiB;AAKT,GAFA41H,EAAOpsH,WAAWosH,GAEdt5D,MAAMs5D,GACR,OAAO51H;AAGT,OAAQozB,GACN,IAAK,OACHpzB,EAAIN,KAAOM,EAAIN,KAAOk2H;AACtB;AAEF,IAAK,SACH51H,EAAIN,KAAOM,EAAIN,KAAOk2H;AACtB;AAEF,IAAK,OACH51H,EAAI3X,EAAI2X,EAAI3X,EAAIutI;AAChB;AAEF,IAAK,QACH51H,EAAI3X,EAAI2X,EAAI3X,EAAIutI;AAChB;AAEF,IAAK,KACH51H,EAAInN,EAAImN,EAAInN,EAAI+iI;AAChB;AAEF,IAAK,OACH51H,EAAInN,EAAImN,EAAInN,EAAI+iI;AAChB;AAEF,IAAK,SACH51H,EAAIwH,OAASxH,EAAIwH,OAASouH,EAI9B,OAAO51H,CACT,EA5DgB,CACdN,KAAM,GACNrX,EAAG,EACHwK,EAAG,EACH+wiB,SACAC,SACAr8hB,OAAQ,GAuDZ,EACIsqiB,GAAkB,CACpB9M,OAAQ,WACN,MAAO,CACLztiB,MAAO,CACL8P,UAAW,SAAmBwqiB,GAC5B,OAAOD,GAAqBC,EAC9B,GAGN,EACA/rP,MAAO,WACL,MAAO,CACLisP,oBAAqB,SAA6B9nZ,EAAa1kJ,GAC7D,IAAIssiB,EAAkBtsiB,EAAKpV,aAAa;AAMxC,OAJI0hjB,IACF5nZ,EAAY5iJ,UAAYuqiB,GAAqBC,IAGxC5nZ,CACT,EAEJ,EACAslZ,SAAU,SAAkB1G,GAC1BA,EAAUmJ,kCAAoC,SAAUnviB,GACtD,IAAI+gd,EAAO/gd,EAAK+gd,KACZv8c,EAAYxE,EAAKwE,UACjByoiB,EAAiBjtiB,EAAKitiB,eACtBC,EAAYltiB,EAAKktiB,UACjBp0R,EAAQ,CACVt0Q,UAAW,aAAavT,OAAOg8iB,EAAiB,EAAG,UAEjDmC,EAAiB,aAAan+iB,OAAqB,GAAduT,EAAUhf,EAAQ,MAAMyL,OAAqB,GAAduT,EAAUxU,EAAQ,MACtFq/iB,EAAa,SAASp+iB,OAAOuT,EAAU3H,KAAO,IAAM2H,EAAUu8hB,OAAS,EAAI,GAAI,MAAM9viB,OAAOuT,EAAU3H,KAAO,IAAM2H,EAAUw8hB,OAAS,EAAI,GAAI,MAC9IsO,EAAc,UAAUr+iB,OAAOuT,EAAUG,OAAQ,SAOjDkqiB,EAAa,CACf/1R,MAAOA,EACPD,MARU,CACVr0Q,UAAW,GAAGvT,OAAOm+iB,EAAgB,KAAKn+iB,OAAOo+iB,EAAY,KAAKp+iB,OAAOq+iB,IAQzE3gX,KANS,CACTnqL,UAAW,aAAavT,OAAOi8iB,EAAY,GAAK,EAAG;AAOrD,MAAO,CACL7zhB,IAAK,IACLuhB,WAAYgmK,EAAe,CAAC,EAAGiuW,EAAW/1R,OAC1C9+Q,SAAU,CAAC,CACTqf,IAAK,IACLuhB,WAAYgmK,EAAe,CAAC,EAAGiuW,EAAWh2R,OAC1C7+Q,SAAU,CAAC,CACTqf,IAAK0nc,EAAK50a,KAAK9yB,IACfrf,SAAU+md,EAAK50a,KAAKnyC,SACpB4gC,WAAYgmK,EAAeA,EAAe,CAAC,EAAGmgR,EAAK50a,KAAKvR,YAAai0gB,EAAWlgX,UAIxF,CACF,GAGE4gX,GAAY,CACd/pjB,EAAG,EACHwK,EAAG,EACHzD,MAAO,OACPuT,OAAQ;AAGV,SAAS0viB,GAAUvG,GACjB,IAAIroP,IAAQxvT,UAAUrS,OAAS,QAAsBkxB,IAAjB7e,UAAU,KAAmBA,UAAU;AAM3E,OAJI63iB,EAAUrugB,aAAequgB,EAAUrugB,WAAWsrX,MAAQtlG,KACxDqoP,EAAUrugB,WAAWsrX,KAAO,SAGvB+iJ,CACT,CAUA,IAhoDM54gB,GAgoDFo/gB,GAAQ,CACVxsP,MAAO,WACL,MAAO,CACLisP,oBAAqB,SAA6B9nZ,EAAa1kJ,GAC7D,IAAIgtiB,EAAWhtiB,EAAKpV,aAAa,gBAC7B6pQ,EAAQu4S,EAAkCzK,GAAiByK,EAASj5iB,MAAM,KAAK2L,IAAI,SAAUtjB,GAC/F,OAAOA,EAAEgyG,MACX,IA7yDC,CACLn6D,OAAQ,KACRuV,SAAU,KACV6mF,KAAM;AAkzDF,OANKokI,EAAKxgO,SACRwgO,EAAKxgO,OAASkugB,MAGhBz9Y,EAAY+vG,KAAOA,EACnB/vG,EAAY+/Y,OAASzkiB,EAAKpV,aAAa,mBAChC85J,CACT,EAEJ,EACAslZ,SAAU,SAAkB1G,GAC1BA,EAAU2J,qBAAuB,SAAU3viB,GACzC,IA7BWmpiB,EA6BPnviB,EAAWgG,EAAKhG,SAChB4gC,EAAa56B,EAAK46B,WAClBmmb,EAAO/gd,EAAK+gd,KACZ5pN,EAAOn3P,EAAKm3P,KACZy4S,EAAiB5viB,EAAKmniB,OACtB3iiB,EAAYxE,EAAKwE,UACjBqriB,EAAY9uF,EAAKx0d,MACjBujjB,EAAW/uF,EAAK50a,KAChB4jgB,EAAY54S,EAAK5qQ,MACjByjjB,EAAW74S,EAAKhrN,KAChB8jgB,EApxEV,SAAyBjwiB,GACvB,IAAIwE,EAAYxE,EAAKwE,UAEjB0oiB,EAAYltiB,EAAKktiB,UACjBp0R,EAAQ,CACVt0Q,UAAW,aAAavT,OAHL+O,EAAKitiB,eAGwB,EAAG,UAEjDmC,EAAiB,aAAan+iB,OAAqB,GAAduT,EAAUhf,EAAQ,MAAMyL,OAAqB,GAAduT,EAAUxU,EAAQ,MACtFq/iB,EAAa,SAASp+iB,OAAOuT,EAAU3H,KAAO,IAAM2H,EAAUu8hB,OAAS,EAAI,GAAI,MAAM9viB,OAAOuT,EAAU3H,KAAO,IAAM2H,EAAUw8hB,OAAS,EAAI,GAAI,MAC9IsO,EAAc,UAAUr+iB,OAAOuT,EAAUG,OAAQ;AAOrD,MAAO,CACLm0Q,MAAOA,EACPD,MARU,CACVr0Q,UAAW,GAAGvT,OAAOm+iB,EAAgB,KAAKn+iB,OAAOo+iB,EAAY,KAAKp+iB,OAAOq+iB,IAQzE3gX,KANS,CACTnqL,UAAW,aAAavT,OAAOi8iB,EAAY,GAAK,EAAG,WAOvD,CArBA,CAoxEkC,CAC1B1oiB,UAAWA,EACXyoiB,eAAgB8C,EAChB7C,UAAW2C,IAETK,EAAW,CACb72hB,IAAK,OACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAG2uW,IAAY,CAAC,EAAG,CAC5DrpJ,KAAM,WAGNiqJ,EAA8BL,EAAS91iB,SAAW,CACpDA,SAAU81iB,EAAS91iB,SAASoI,IAAIotiB,KAC9B,CAAC,EACDY,EAAiB,CACnB/2hB,IAAK,IACLuhB,WAAYgmK,EAAe,CAAC,EAAGqvW,EAAMp3R,OACrC7+Q,SAAU,CAACw1iB,GAAU5uW,EAAe,CAClCvnL,IAAKy2hB,EAASz2hB,IACduhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGkvW,EAASl1gB,YAAaq1gB,EAAMthX,OACzEwhX,MAEDE,EAAiB,CACnBh3hB,IAAK,IACLuhB,WAAYgmK,EAAe,CAAC,EAAGqvW,EAAMn3R,OACrC9+Q,SAAU,CAACo2iB,IAETjJ,EAAS,QAAQl2iB,OAAO2+iB,GAAkB3O,MAC1CqP,EAAS,QAAQr/iB,OAAO2+iB,GAAkB3O,MAC1CsP,EAAU,CACZl3hB,IAAK,OACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAG2uW,IAAY,CAAC,EAAG,CAC5D/xgB,GAAI2pgB,EACJqJ,UAAW,iBACXC,iBAAkB,mBAEpBz2iB,SAAU,CAACk2iB,EAAUG,IAEnB31S,EAAO,CACTrhP,IAAK,OACLrf,SAAU,CAAC,CACTqf,IAAK,WACLuhB,WAAY,CACV4C,GAAI8ygB,GAENt2iB,UApFOmviB,EAoFW6G,EAnFH,MAAnB7G,EAAW9vhB,IACN8vhB,EAAWnviB,SAEX,CAACmviB,KAiFDoH;AAUL,OARAv2iB,EAAS5T,KAAKs0Q,EAAM,CAClBrhP,IAAK,OACLuhB,WAAYgmK,EAAe,CACzBslN,KAAM,eACN,YAAa,QAAQj1Z,OAAOq/iB,EAAQ,KACpCn5S,KAAM,QAAQlmQ,OAAOk2iB,EAAQ,MAC5BoI,MAEE,CACLv1iB,SAAUA,EACV4gC,WAAYA,EAEhB,CACF,GAGE81gB,GAAuB,CACzBhE,SAAU,SAAkB1G,GAC1B,IAAI2K;AAEA7T,EAAO8T,aACTD,EAAe7T,EAAO8T,WAAW,oCAAoC5siB,SAGvEgiiB,EAAU6K,oBAAsB,WAC9B,IAAIC,EAAY,GACZC,EAAO,CACT7qJ,KAAM,gBAEJ8qJ,EAAiB,CACnBC,cAAe,MACfC,YAAa,aACbh5O,IAAK;AAGP44O,EAAU1qjB,KAAK,CACbizB,IAAK,OACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGmwW,GAAO,CAAC,EAAG,CACvD5yjB,EAAG;AAIP,IAAIgzjB,EAAkBvwW,EAAeA,EAAe,CAAC,EAAGowW,GAAiB,CAAC,EAAG,CAC3EtlD,cAAe,YAGbt3Z,EAAM,CACR/6E,IAAK,SACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGmwW,GAAO,CAAC,EAAG,CACvDtkZ,GAAI,MACJ5rB,GAAI,MACJxhJ,EAAG,OAEL2a,SAAU;AAkDZ,OA/CK22iB,GACHv8c,EAAIp6F,SAAS5T,KAAK,CAChBizB,IAAK,UACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGowW,GAAiB,CAAC,EAAG,CACjEtlD,cAAe,IACflmd,OAAQ,wBAET,CACDnsB,IAAK,UACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGuwW,GAAkB,CAAC,EAAG,CAClE3rgB,OAAQ,mBAKdsrgB,EAAU1qjB,KAAKguG,GACf08c,EAAU1qjB,KAAK,CACbizB,IAAK,OACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGmwW,GAAO,CAAC,EAAG,CACvD/sjB,QAAS,IACT7F,EAAG,ySAEL6b,SAAU22iB,EAAe,GAAK,CAAC,CAC7Bt3hB,IAAK,UACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGuwW,GAAkB,CAAC,EAAG,CAClE3rgB,OAAQ,qBAKTmrgB,GAEHG,EAAU1qjB,KAAK,CACbizB,IAAK,OACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGmwW,GAAO,CAAC,EAAG,CACvD/sjB,QAAS,IACT7F,EAAG,gJAEL6b,SAAU,CAAC,CACTqf,IAAK,UACLuhB,WAAYgmK,EAAeA,EAAe,CAAC,EAAGuwW,GAAkB,CAAC,EAAG,CAClE3rgB,OAAQ,qBAMT,CACLnsB,IAAK,IACLuhB,WAAY,CACVypD,MAAS,WAEXrqF,SAAU82iB,EAEd,CACF;AA9zDIzghB,GAg1DmB,CACvB+ghB,UAAWrV,IAj1DIqV,UACf75R,GA60DY,CAAC2qR,GAAWqK,GAAiBY,GAAQE,GAAeC,GA7Z7C,CACnBrqP,MAAO,WACL,MAAO,CACLwpP,0BAA2B,SAAmCrlZ,GAE5D,OADAA,EAAYgjZ,uBAAyB9J,GAC9Bl5Y,CACT,EAEJ,EACAslZ,SAAU,SAAkBC,GAC1BA,EAAa0E,mBAAqB,SAAUj+e,GAC1C,IAAIw5e,EAAex5e,EAAO1wD,KACtBA,OAA6B,IAAtBkqiB,EAA0B7P,EAAW6P;AAE5C52hB,GAAOsqhB,sBACTA,GAAqB59hB,EAEzB,CACF,GAIuB,CACvBy/hB,OAAQ,WACN,MAAO,CACL31K,IAAK,CACH8kL,QAAS,WACPzH,KACAiF,KACF,GAGN,EACA7rP,MAAO,WACL,MAAO,CACLsuP,UAAW,WACTzjiB,GAAQo4hB,GAAW,4BAA6B,CAAC,GACnD,EACAhK,OAAQ,WAztBP53Z,IACLA,GAAGn3H,YA0tBC,EACAw0F,MAAO,SAAevuC,GACpB,IAAIk3e,EAAuBl3e,EAAOk3e;AAE9BwE,GACFhF,KAEAh8hB,GAAQo4hB,GAAW,4BAA6B,CAC9CoE,qBAAsBA,IAG5B,EAEJ,GAwWgH2E,GAAiBQ,GAAOiB,GAbzH,CACfztP,MAAO,WACL,MAAO,CACLisP,oBAAqB,SAA6B9nZ,EAAa1kJ,GAC7D,IAAI8uiB,EAAa9uiB,EAAKpV,aAAa,kBAC/BipF,EAAwB,OAAfi7d,IAA6C,KAAfA,GAA2BA;AAEtE,OADApqZ,EAAoB7wE,OAAIA,EACjB6wE,CACT,EAEJ,IAz0DA2+Y,GAAS,CAAC,EACVx/hB,OAAO2wB,KAAK8ugB,IAAWhtiB,QAAQ,SAAUkB,IACC,IAApC+riB,GAAoB59iB,QAAQ6R,WACvB8riB,GAAU9riB,EAErB,GAEAq9Q,GAASv+Q,QAAQ,SAAUuwX,GACzB,IAAI44K,EAAS54K,EAAO44K,OAAS54K,EAAO44K,SAAW,CAAC;AAiBhD,GAhBA57hB,OAAO2wB,KAAKirgB,GAAQnpiB,QAAQ,SAAUyrR,GACV,mBAAf09Q,EAAO19Q,KAChBp0P,GAAIo0P,GAAM09Q,EAAO19Q,IAGS,WAAxBj8J,EAAQ25a,EAAO19Q,KACjBl+Q,OAAO2wB,KAAKirgB,EAAO19Q,IAAKzrR,QAAQ,SAAU/Y,GACnCowC,GAAIo0P,KACPp0P,GAAIo0P,GAAM,CAAC,GAGbp0P,GAAIo0P,GAAIxkS,GAAMkijB,EAAO19Q,GAAIxkS,EAC3B,EAEJ,GAEIspY,EAAOtmE,MAAO,CAChB,IAAIA,EAAQsmE,EAAOtmE;AACnB18S,OAAO2wB,KAAK+rR,GAAOjqT,QAAQ,SAAUi4a,GAC9B80H,GAAO90H,KACV80H,GAAO90H,GAAQ,IAGjB80H,GAAO90H,GAAM7qb,KAAK68T,EAAMguH,GAC1B,EACF,CAEI1nD,EAAOmjL,UACTnjL,EAAOmjL,SAAS1G,GAEpB;AA0yDF,IAAIyL,GAAW1V,GAAIG,OACfwV,GAAW3V,GAAI/lhB,OACf27hB,GAAY5V,GAAIE,QAChB2V,GAAQ7V,GAAIvvK,IACZqlL,GAAU9V,GAAIrniB,MACdo9iB,GAAuB/V,GAAIC,mBAC3B+V,GAAWhW,GAAII,OACfhwf,GAAO4vf,GAAI5vf,KACXm7S,GAAQy0M,GAAIz0M,MACZzlW,GAAOk6iB,GAAIl6iB,KACXu2N,GAAU2jV,GAAI3jV;AAAAA;ACz+FlB,MAAM+7S,EAAA,IAGExga;AAsCR,SAASq+c,EACPvujB,EACAimL,EACAuoY,EACAppZ,GAEA,IAAIqgC,EAAmB,CACrBrhJ,gBACAD,cACAiyB,YACAgvF,YAAa;AAEXA,IACFqgC,EAAKrgC,YAAcA;AAErB,QAASqpZ,KAAaD,EACpB/oX,EAAOgpX,EAAUzujB,EAAWimL,EAAMwf,IAASA;KAEpB,IAArBA,EAAKrgC,YACPtiJ,OAAOmhC,eAAejkD,EAAWimL,EAAMwf,GAvD3C,SACEloC,EACA0oB,EACAwf,GAEA,IAAI9mL,EAAM+xf,EAASrpf,IAAIk2I;AAClB5+I,IACHA,EAAA,IAAUyT,IACVs+e,EAAS9of,IAAI21I,EAAO5+I,IAEtBA,EAAIiJ,IAAIq+J,EAAMwf,EAChB,CAXA,CAyDmBzlM,EAAWimL,EAAMwf,EAEpC,CAUA,SAASipX,EACP1ujB,EACAimL,EACAuoY,GAGA,IAAI/oX,EAAmB,IADN3iL,OAAO2zE,yBAAyBz2F,EAAWimL;AAE5D,QAASwoY,KAAaD,EACpB/oX,EAAOgpX,EAAUzujB,EAAWimL,EAAMwf,IAASA;KAEpB,IAArBA,EAAKrgC,cACPqgC,EAAK/nM,MAAQ+nM,EAAKrgC,YAAcqgC,EAAKrgC,YAAYz/J,KAAK3F,QAAa,EACnEylM,EAAKrgC,iBAAc,GAErBtiJ,OAAOmhC,eAAejkD,EAAWimL,EAAMwf,EACzC,CAEA,SAASkpX,EACPpqjB,EACA0hL,GAEA,IAAIwf,EA7EN,SACElhM,EACA0hL,GApBF,IAAA7qJ;AAsBE,IAAIixI,EAAkB9nK,EAAevE;AACrC,KAAOqsK,GAAQ,CACb,IAAIo5B,EAAO,OAAArqK,EAAAs1e,EAASrpf,IAAIglJ,SAAb,EAAAjxI,EAAsB/T,IAAI4+J;AACrC,GAAIwf,EACF,OAAOA;AAETp5B,EAASvpJ,OAAOC,eAAespJ,EACjC,CACF,CAZA,CA6EmC9nK,EAAO8xE,YAAa4vG;AACjDwf,GACF3iL,OAAOmhC,eAAe1/C,EAAQ0hL,EAAM,CAClC9hI,WAAYshJ,EAAKthJ,WACjBC,aAAcqhJ,EAAKrhJ,aACnBgyB,SAAUqvH,EAAKrvH,SACf14E,MAAO+nM,EAAKrgC,YAAcqgC,EAAKrgC,YAAYz/J,KAAKpB,QAAU,GAGhE,CAAA2xE,OAAA4kO,WAAA,QAAA1/S,EAAAvB,EAAA0B,GAAA;AAAAA,EAAAK,EAAA/B,GAAA0B,EAAAb,EAAAb,EAAA,CAAA2jK,MAAA,IAAA1gK;AC/HA,IAAI8vF,EAAE9pE,OAAOmhC,eAAmB1O,EAAEzyB,OAAO9iB,UAAU4N,eAAmB9R,EAAEgnB,OAAOmgJ,sBAAsBpvI,EAAE/Q,OAAO9iB,UAAU6iT,qBAAyB57S,EAAEA,CAAC1L,EAAEI,EAAE9B,IAAI8B,KAAKJ,EAAEqxF,EAAErxF,EAAEI,EAAE,CAACwoD,cAAcC,gBAAgBgyB,YAAY14E,MAAM7D,IAAI0B,EAAEI,GAAG9B,EAAEuB,EAAEA,CAACG,EAAEI,KAAK,IAAI,IAAI9B,KAAK8B,IAAIA,EAAE,CAAC,GAAG45C,EAAE5vC,KAAKhK,EAAE9B,IAAIoN,EAAE1L,EAAE1B,EAAE8B,EAAE9B;AAAI,GAAGiC,EAAE,IAAI,IAAIjC,KAAKiC,EAAEH,GAAGk4B,EAAEluB,KAAKhK,EAAE9B,IAAIoN,EAAE1L,EAAE1B,EAAE8B,EAAE9B;AAAI,OAAO0B;AAAG,SAAS+X,EAAE/X,GAA6O,SAASF,EAAEshF,GAAG,OAAO,IAAItxC,OAAO,SAASsxC,EAAE3pE,MAAM,KAAKH,KAAK,WAAW,CAAC,IAA+BmD,EAAE,yBAAyBna,EAAE,eAAe4kF,EAAE3oF,EAAE82jB,OAAO/yjB,EAAE,8BAA8B/D,EAAE0V,OAAO3R,EAAE,KAAK,KAAKA,IAAIiB,EAAE,iEAAiEoI,EAAE,IAAImmC,OAAOvzC,EAAE82jB,OAAO,UAAU,IAAI,UAAU,IAAI,UAAU,YAAY1vjB,EAAE,CAAC,8BAA8B,CAACkyC,QAAQ,eAAex1C,EAAE,CAACizjB,YAAY,CAAC,CAACz9gB,QAAQ,oCAAoC,CAACA,QAAQ,KAAKihI,MAAM,eAAe,CAACjhI,QAAQ,UAAUh5C,EAAE,CAAC,gBAAgB,CAAC,CAACg5C,QAAQ,IAAI/F,OAAje,QAA0er1B,GAAG84iB,eAAe,CAAC19gB,QAAQ,IAAI/F,OAA/f,eAAwgBr1B,GAAG84iB,iBAAiBvkjB,EAAE,CAACwkjB,QAAQ1zjB,EAAE,CAA3rB,YAAc,eAAvG,eAApC,mCAAk0BwX,KAAK,MAAMqkC,QAAQ77C,EAAE,CAAlyB,sEAAuG,6BAAisBwX,KAAK,MAAMm8iB,SAAS3zjB,EAAE,CAA/5B,SAAW,gBAAkB,aAAy4B,MAAMwX,KAAK,OAAO6tE,EAAE,CAACuue,SAAS,CAACC,UAAU99gB,QAAQ,gBAAgB2za,OAAO3pd,EAAEA,EAAEA,EAAE,CAAC,EAAEQ,GAAGxD,GAAGmS,KAAKquE,EAAE,CAAC,kBAAkB,CAACxnC,QAAQ,cAAc09gB,cAAcI,UAAUnqG,OAAO3pd,EAAEA,EAAE,CAAC,EAAEQ,GAAG,CAAC+ne,UAAU,OAAOl7V,SAAS,YAAYryH,EAAE,CAAC,oBAAoB,CAACg7B,QAAQ,eAAe09gB,cAAcI,UAAUnqG,OAAO3pd,EAAEA,EAAE,CAAC,EAAEQ,GAAG,CAACuzjB,SAAS,QAAQ1mb,SAAS,YAAY7oI,EAAExE,EAAEA,EAAEA,EAAEA,EAAEA,EAAEA,EAAEA,EAAEA,EAAEA,EAAE,CAAC,EAAEslF,GAAG9kF,GAAGg9E,GAAGxiE,GAAGlX,GAAG,CAACs2B,OAAO14B,EAAEuga,QAAQ,uBAAuB9yZ,GAAGnS,GAAG,CAAC,YAAY,UAAUm7G,OAAOruG,EAAEkqjB,SAAS,uBAAuB7xjB,EAAE,CAAC8xjB,SAAS,CAACj+gB,QAAQ,0BAA0B09gB,cAAcz8Y,MAAM,cAAc68Y,UAAUnqG,OAAO3pd,EAAEA,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAACi3K,MAAM,cAAcjhI,QAAQ,YAAY09gB,cAAcI,UAAUnqG,OAAOnld,KAAKA,KAAKlF,EAAE,CAAC64G,OAAO,CAACniE,QAAQlsC,EAAE6/c,OAAOxnd;AAAIqC,EAAE2zG,OAAO74G,EAAE64G;AAAO,IAAIr7G,EAAEqD,EAAE81S,UAAUi+Q;AAAO,IAAIp3jB,EAAE,MAAM,IAAIuD,MAAM;AAA4BF,EAAE81S,UAAUk+Q,QAAQn0jB,EAAEA,EAAE,CAACq7gB,QAAQ,CAAC,CAACrle,QAAQ,yBAAyB,CAACA,QAAQ,sBAAsB5b,OAAO14B,GAAGS,GAAG,CAACq4B,IAAIx6B,EAAEA,EAAE,CAAC,EAAElD,EAAE09B,KAAK,CAACmvb,OAAO3pd,EAAEA,EAAEA,EAAEA,EAAEA,EAAE,CAACo6B,OAAO14B,GAAGoC,GAAG3B,GAAG,CAACq4B,IAAIx6B,EAAEA,EAAE,CAAC,EAAElD,EAAE09B,IAAImvb,OAAOnvb,KAAK,CAACmvb,OAAO3pd,EAAEA,EAAE,CAAC,EAAEQ,GAAG,CAAC,aAAa,IAAIyvC,OAAOo1C,OAAO,YAAY,CAACrvC,QAAQ,aAAa2za,OAAO3pd,EAAEA,EAAEA,EAAEA,EAAE,CAAC,EAAEV,GAAGkB,GAAGsD,GAAG3B,MAAM3B,GAAGlB,MAAM,CAAwE,SAAS0P,KAAK7O,GAAG,OAAOA,EAAEojB,IAAI9kB,GAAG7B,EAAE6B,IAAIgZ,KAAK,GAAG,CAAyD,SAAS7a,EAAEuD,GAAG,OAAOA,EAAY,iBAAHA,EAAYA,EAAEA,EAAE+vC,OAAO,IAAI,CAAC,IAAIxzC,EAAE,CAAC03jB,UAAhP,SAAWj0jB,GAAG,OAAO6O,EAAE,MAAM7O,EAAE,IAAI,EAAyNqzjB,OAArI,YAAcrzjB,GAAG,MAAM,IAAIA,EAAEojB,IAAI9kB,GAAG7B,EAAE6B,IAAIgZ,KAAK,KAAK,GAAG,EAAuF48iB,SAAjO,SAAWl0jB,GAAG,OAAO6O,EAAE,IAAI7O,EAAE,KAAK,EAA0MiS,OAAOpD;AAAAA;ACgBnqF,IAAIsljB,EAAgB,SAASh1jB,EAAGsb,GAI9B,OAHA05iB,EAAgB5siB,OAAOuqH,gBAClB,CAAE32C,UAAW,cAAgB9nF,OAAS,SAAUlU,EAAGsb,GAAKtb,EAAEg8F,UAAY1gF,CAAG,GAC1E,SAAUtb,EAAGsb,GAAK,IAAK,IAAIpW,KAAKoW,EAAO8M,OAAO9iB,UAAU4N,eAAejI,KAAKqQ,EAAGpW,KAAIlF,EAAEkF,GAAKoW,EAAEpW,GAAI,EAC7F8vjB,EAAch1jB,EAAGsb,EAC1B;AAEO,SAASurC,EAAU7mD,EAAGsb,GAC3B,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI4tC,UAAU,uBAAyBlY,OAAO11B,GAAK;AAE7D,SAASo/R,IAAOr6S,KAAKs7E,YAAc37E,CAAG,CADtCg1jB,EAAch1jB,EAAGsb,GAEjBtb,EAAEsF,UAAkB,OAANgW,EAAa8M,OAAOxjB,OAAO0W,IAAMo/R,EAAGp1S,UAAYgW,EAAEhW,UAAW,IAAIo1S,EACjF,CAEO,IAAI56Q,EAAW,WAQpB,OAPAA,EAAW1X,OAAO4rD,QAAU,SAAkB70E,GAC1C,IAAK,IAAI0D,EAAGlC,EAAI,EAAGE,EAAIoS,UAAUrS,OAAQD,EAAIE,EAAGF,IAE5C,IAAK,IAAIuE,KADTrC,EAAIoQ,UAAUtS,GACOynB,OAAO9iB,UAAU4N,eAAejI,KAAKpI,EAAGqC,KAAI/F,EAAE+F,GAAKrC,EAAEqC;AAE9E,OAAO/F,CACX,EACO2gC,EAAS9sB,MAAM3S,KAAM4S,UAC9B;AAEO,SAASm2C,EAAOvmD,EAAGnC,GACxB,IAAIvB,EAAI,CAAC;AACT,IAAK,IAAI+F,KAAKrC,EAAOulB,OAAO9iB,UAAU4N,eAAejI,KAAKpI,EAAGqC,IAAMxE,EAAEwJ,QAAQhF,GAAK,IAC9E/F,EAAE+F,GAAKrC,EAAEqC;AACb,GAAS,MAALrC,GAAqD,mBAAjCulB,OAAOmgJ,sBACtB,KAAI5nK,EAAI;AAAb,IAAgBuE,EAAIkjB,OAAOmgJ,sBAAsB1lK,GAAIlC,EAAIuE,EAAEtE,OAAQD,IAC3DD,EAAEwJ,QAAQhF,EAAEvE,IAAM,GAAKynB,OAAO9iB,UAAU6iT,qBAAqBl9S,KAAKpI,EAAGqC,EAAEvE,MACvExB,EAAE+F,EAAEvE,IAAMkC,EAAEqC,EAAEvE,IAF4B,CAItD,OAAOxB,CACT,CAEO,SAAS81jB,EAAWnB,EAAYjqjB,EAAQyvB,EAAKyxK,GAClD,IAA2H/qM,EAAvHwE,EAAIyO,UAAUrS,OAAQM,EAAIsD,EAAI,EAAIqF,EAAkB,OAATkhM,EAAgBA,EAAO3iL,OAAO2zE,yBAAyBlyF,EAAQyvB,GAAOyxK;AACrH,GAAuB,iBAAZh4D,SAAoD,mBAArBA,QAAQmib,SAAyBh0jB,EAAI6xI,QAAQmib,SAASpB,EAAYjqjB,EAAQyvB,EAAKyxK;KACpH,IAAK,IAAIpqM,EAAImzjB,EAAWlzjB,OAAS,EAAGD,GAAK,EAAGA,KAASX,EAAI8zjB,EAAWnzjB,MAAIO,GAAKsD,EAAI,EAAIxE,EAAEkB,GAAKsD,EAAI,EAAIxE,EAAE6J,EAAQyvB,EAAKp4B,GAAKlB,EAAE6J,EAAQyvB,KAASp4B;AAChJ,OAAOsD,EAAI,GAAKtD,GAAKknB,OAAOmhC,eAAe1/C,EAAQyvB,EAAKp4B,GAAIA,CAC9D,CAEO,SAASi0jB,EAAQC,EAAYrB,GAClC,OAAO,SAAUlqjB,EAAQyvB,GAAOy6hB,EAAUlqjB,EAAQyvB,EAAK87hB,EAAa,CACtE,CAEO,SAASC,EAAaC,EAAMC,EAAczB,EAAY0B,EAAWC,EAAcC,GACpF,SAASp8T,EAAO/sP,GAAK,QAAe,IAAXA,GAA6B,mBAANA,EAAkB,MAAM,IAAI28C,UAAU;AAAsB,OAAO38C,CAAG,CAKtH,IAJA,IAGIsD,EAHA0oC,EAAOi9gB,EAAUj9gB,KAAMjf,EAAe,WAATif,EAAoB,MAAiB,WAATA,EAAoB,MAAQ,QACrF1uC,GAAU0rjB,GAAgBD,EAAOE,EAAkB3uJ,OAAIyuJ,EAAOA,EAAKhwjB,UAAY,KAC/EklD,EAAa+qgB,IAAiB1rjB,EAASue,OAAO2zE,yBAAyBlyF,EAAQ2rjB,EAAU/sjB,MAAQ,CAAC,GAC/Fi+E,KACE/lF,EAAImzjB,EAAWlzjB,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC7C,IAAIs4B,EAAU,CAAC;AACf,IAAK,IAAI/zB,KAAKswjB,EAAWv8hB,EAAQ/zB,GAAW,WAANA,EAAiB,CAAC,EAAIswjB,EAAUtwjB;AACtE,IAAK,IAAIA,KAAKswjB,EAAUG,OAAQ18hB,EAAQ08hB,OAAOzwjB,GAAKswjB,EAAUG,OAAOzwjB;AACrE+zB,EAAQ28hB,eAAiB,SAAUrpjB,GAAK,GAAIm6E,EAAM,MAAM,IAAIx9B,UAAU;AAA2DwsgB,EAAkBztjB,KAAKqxP,EAAO/sP,GAAK,MAAQ;AAC5K,IAAI+a,KAAawsiB,EAAWnzjB,IAAa,aAAT43C,EAAsB,CAAE5rB,IAAK69B,EAAW79B,IAAKO,IAAKs9B,EAAWt9B,KAAQs9B,EAAWlxB,GAAML;AACtH,GAAa,aAATsf,EAAqB,CACrB,QAAoB,IAAhBjxB,EAAmB;AACvB,GAAe,OAAXA,GAAqC,iBAAXA,EAAqB,MAAM,IAAI4hC,UAAU,oBACnEr5C,EAAIypP,EAAOhyO,EAAOqF,QAAM69B,EAAW79B,IAAM9c,IACzCA,EAAIypP,EAAOhyO,EAAO4F,QAAMs9B,EAAWt9B,IAAMrd,IACzCA,EAAIypP,EAAOhyO,EAAO8rD,QAAOqif,EAAa/tZ,QAAQ73J,EACtD,MACSA,EAAIypP,EAAOhyO,MACH,UAATixB,EAAkBk9gB,EAAa/tZ,QAAQ73J,GACtC26C,EAAWlxB,GAAOzpB,EAE/B,CACIhG,GAAQue,OAAOmhC,eAAe1/C,EAAQ2rjB,EAAU/sjB,KAAM+hD,GAC1Dk8B,IACF,CAEO,SAASmve,EAAkBj0Q,EAAS6zQ,EAAczyjB,GAEvD,IADA,IAAI8yjB,EAAW7ijB,UAAUrS,OAAS,EACzBD,EAAI,EAAGA,EAAI80jB,EAAa70jB,OAAQD,IACrCqC,EAAQ8yjB,EAAWL,EAAa90jB,GAAGsK,KAAK22S,EAAS5+S,GAASyyjB,EAAa90jB,GAAGsK,KAAK22S;AAEnF,OAAOk0Q,EAAW9yjB,OAAa,CACjC,CAEO,SAAS+yjB,EAAU1ujB,GACxB,MAAoB,iBAANA,EAAiBA,EAAI,GAAGyL,OAAOzL,EAC/C,CAEO,SAAS2ujB,EAAkBzpjB,EAAG9D,EAAM+vC,GAEzC,MADoB,iBAAT/vC,IAAmBA,EAAOA,EAAKiiD,YAAc,IAAI53C,OAAOrK,EAAKiiD,YAAa,KAAO,IACrFtiC,OAAOmhC,eAAeh9C,EAAG,OAAQ,CAAEm9C,gBAAoB1mD,MAAOw1C,EAAS,GAAG1lC,OAAO0lC,EAAQ,IAAK/vC,GAAQA,GAC/G,CAEO,SAASwtjB,EAAWC,EAAaC,GACtC,GAAuB,iBAAZpjb,SAAoD,mBAArBA,QAAQqjb,SAAyB,OAAOrjb,QAAQqjb,SAASF,EAAaC,EAClH,CAEO,SAASE,EAAUz0Q,EAAS00Q,EAAYvwe,EAAGq/E,GAEhD,OAAO,IAAKr/E,IAAMA,EAAIrS,UAAU,SAAU2B,EAAS1B,GAC/C,SAAS4xF,EAAUviK,GAAS,IAAMkqI,EAAKk4B,EAAU9rE,KAAKt2F,GAAS,CAAE,MAAOtC,GAAKizE,EAAOjzE,EAAI,CAAE,CAC1F,SAASiqR,EAAS3nR,GAAS,IAAMkqI,EAAKk4B,EAAiBI,MAAExiK,GAAS,CAAE,MAAOtC,GAAKizE,EAAOjzE,EAAI,CAAE,CAC7F,SAASwsI,EAAK5lH,GAJlB,IAAetkB;AAIaskB,EAAOo/D,KAAOrR,EAAQ/tD,EAAOtkB,QAJ1CA,EAIyDskB,EAAOtkB,MAJhDA,aAAiB+iF,EAAI/iF,EAAQ,IAAI+iF,EAAE,SAAU1Q,GAAWA,EAAQryE,EAAQ,IAIjB8wE,KAAKyxF,EAAWolH,EAAW,CAC7Gz9I,GAAMk4B,EAAYA,EAAUpyJ,MAAM4uS,EAAS00Q,GAAc,KAAKh9d,OAClE,EACF,CAEO,SAASi9d,EAAY30Q,EAASh0S,GACnC,IAAsGrB,EAAGsF,EAAG1S,EAAxG0Q,EAAI,CAAEg4J,MAAO,EAAGp6F,KAAM,WAAa,GAAW,EAAPtuE,EAAE,GAAQ,MAAMA,EAAE;AAAI,OAAOA,EAAE,EAAI,EAAGq3jB,KAAM,GAAIzsT,IAAK,IAAer6P,EAAI0Y,OAAOxjB,QAA4B,mBAAb6xjB,SAA0BA,SAAWruiB,QAAQ9iB;AACtL,OAAOoK,EAAE4pF,KAAOo9d,EAAK,GAAIhnjB,EAAS81J,MAAIkxZ,EAAK,GAAIhnjB,EAAU6pF,OAAIm9d,EAAK,GAAsB,mBAAXl7e,SAA0B9rE,EAAE8rE,OAAO2c,UAAY,WAAa,OAAO93F,IAAM,GAAIqP;AAC1J,SAASgnjB,EAAK71jB,GAAK,OAAO,SAAU8Q,GAAK,OACzC,SAAcujJ,GACV,GAAI3oJ,EAAG,MAAM,IAAI28C,UAAU;AAC3B,KAAOx5C,IAAMA,EAAI,EAAGwlJ,EAAG,KAAOrlJ,EAAI,IAAKA,OACnC,GAAItD,EAAI,EAAGsF,IAAM1S,EAAY,EAAR+1J,EAAG,GAASrjJ,EAAU0nF,OAAI27D,EAAG,GAAKrjJ,EAAS2zJ,SAAOrmK,EAAI0S,EAAU0nF,SAAMp6F,EAAE8L,KAAK4G,GAAI,GAAKA,EAAEynF,SAAWn6F,EAAIA,EAAE8L,KAAK4G,EAAGqjJ,EAAG,KAAKxuE,KAAM,OAAOvnF;AAE3J,OADI0S,EAAI,EAAG1S,IAAG+1J,EAAK,CAAS,EAARA,EAAG,GAAQ/1J,EAAE6D,QACzBkyJ,EAAG,IACP,KAAK,EAAG,KAAK,EAAG/1J,EAAI+1J;AAAI;AACxB,KAAK,EAAc,OAAXrlJ,EAAEg4J,QAAgB,CAAE7kK,MAAOkyJ,EAAG,GAAIxuE;AAC1C,KAAK,EAAG72E,EAAEg4J,QAASh2J,EAAIqjJ,EAAG,GAAIA,EAAK,CAAC;AAAI;AACxC,KAAK,EAAGA,EAAKrlJ,EAAEk6P,IAAI/3G,MAAOniJ,EAAE2mjB,KAAKxka;AAAO;AACxC,QACI,MAAkB7yJ,GAAZA,EAAI0Q,EAAE2mjB,MAAY51jB,OAAS,GAAKzB,EAAEA,EAAEyB,OAAS,KAAkB,IAAVs0J,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAErlJ,EAAI;AAAG,QAAU,CAC3G,GAAc,IAAVqlJ,EAAG,MAAc/1J,GAAM+1J,EAAG,GAAK/1J,EAAE,IAAM+1J,EAAG,GAAK/1J,EAAE,IAAM,CAAE0Q,EAAEg4J,MAAQ3S,EAAG;AAAI,KAAO,CACrF,GAAc,IAAVA,EAAG,IAAYrlJ,EAAEg4J,MAAQ1oK,EAAE,GAAI,CAAE0Q,EAAEg4J,MAAQ1oK,EAAE,GAAIA,EAAI+1J;AAAI,KAAO,CACpE,GAAI/1J,GAAK0Q,EAAEg4J,MAAQ1oK,EAAE,GAAI,CAAE0Q,EAAEg4J,MAAQ1oK,EAAE,GAAI0Q,EAAEk6P,IAAI9hQ,KAAKitJ;AAAK,KAAO,CAC9D/1J,EAAE,IAAI0Q,EAAEk6P,IAAI/3G,MAChBniJ,EAAE2mjB,KAAKxka;AAAO,SAEtBkD,EAAKtnJ,EAAK3C,KAAK22S,EAAS/xS,EAC5B,CAAE,MAAOnP,GAAKw0J,EAAK,CAAC,EAAGx0J,GAAImR,EAAI,CAAG,CAAC,QAAWtF,EAAIpN,EAAI,CAAG,CACzD,GAAY,EAAR+1J,EAAG,GAAQ,MAAMA,EAAG;AAAI,MAAO,CAAElyJ,MAAOkyJ,EAAG,GAAKA,EAAG,QAAU,EAAGxuE,QACxE,CArBA,CADqD,CAAC7lF,EAAG8Q,GAAK,CAAG,CAuBnE,CAEO,IAAI6zP,EAAkBp9O,OAAOxjB,OAAU,SAAS3D,EAAGuJ,EAAGuR,EAAG46iB,QACnD7kiB,IAAP6kiB,IAAkBA,EAAK56iB;AAC3B,IAAIgvL,EAAO3iL,OAAO2zE,yBAAyBvxF,EAAGuR;AACzCgvL,KAAS,QAASA,GAAQvgM,EAAEisU,WAAa1rI,EAAKrvH,UAAYqvH,EAAKrhJ,gBAChEqhJ,EAAO,CAAEthJ,cAAkB98B,IAAK,WAAa,OAAOniB,EAAEuR,EAAI,IAE9DqM,OAAOmhC,eAAetoD,EAAG01jB,EAAI5rX,EAC/B,EAAM,SAAS9pM,EAAGuJ,EAAGuR,EAAG46iB,QACX7kiB,IAAP6kiB,IAAkBA,EAAK56iB,GAC3B9a,EAAE01jB,GAAMnsjB,EAAEuR,EACZ;AAEO,SAAS0pP,EAAaj7P,EAAGvJ,GAC9B,IAAK,IAAIiE,KAAKsF,EAAa,YAANtF,GAAoBkjB,OAAO9iB,UAAU4N,eAAejI,KAAKhK,EAAGiE,IAAIsgQ,EAAgBvkQ,EAAGuJ,EAAGtF,EAC7G,CAEO,SAAS0xjB,EAAS31jB,GACvB,IAAI4B,EAAsB,mBAAX24E,QAAyBA,OAAO2c,SAAU3tF,EAAI3H,GAAK5B,EAAE4B,GAAIlC,EAAI;AAC5E,GAAI6J,EAAG,OAAOA,EAAES,KAAKhK;AACrB,GAAIA,GAAyB,iBAAbA,EAAEL,OAAqB,MAAO,CAC1C04F,KAAM,WAEF,OADIr4F,GAAKN,GAAKM,EAAEL,SAAQK,OAAS,GAC1B,CAAE+B,MAAO/B,GAAKA,EAAEN,KAAM+lF,MAAOzlF,EACxC;AAEJ,MAAM,IAAIioD,UAAUrmD,EAAI,0BAA4B,kCACtD,CAEO,SAASg0jB,EAAO51jB,EAAGJ,GACxB,IAAI2J,EAAsB,mBAAXgxE,QAAyBv6E,EAAEu6E,OAAO2c;AACjD,IAAK3tF,EAAG,OAAOvJ;AACf,IAAmBC,EAAYR,EAA3BC,EAAI6J,EAAES,KAAKhK,GAAOk+C,EAAK;AAC3B,IACI,WAAmB,IAAXt+C,GAAgBA,KAAM,MAAQK,EAAIP,EAAE24F,QAAQ5S,MAAMvnC,EAAGl3C,KAAK/G,EAAE8B,MACxE,CACA,MAAOoW,GAAS1Y,EAAI,CAAE0Y,MAAOA,EAAS,CAAC,QAEnC,IACQlY,IAAMA,EAAEwlF,OAASl8E,EAAI7J,EAAU44F,SAAI/uF,EAAES,KAAKtK,EAClD,CAAC,QACS,GAAID,EAAG,MAAMA,EAAE0Y,KAAO,CACpC,CACA,OAAO+lC,CACT,CAGO,SAAS23gB,IACd,IAAK,IAAI33gB,EAAK,GAAIx+C,EAAI,EAAGA,EAAIsS,UAAUrS,OAAQD,IAC3Cw+C,EAAKA,EAAGrsC,OAAO+jjB,EAAO5jjB,UAAUtS;AACpC,OAAOw+C,CACT,CAGO,SAAS43gB,IACd,IAAK,IAAIl0jB,EAAI,EAAGlC,EAAI,EAAGkiS,EAAK5vR,UAAUrS,OAAQD,EAAIkiS,EAAIliS,IAAKkC,GAAKoQ,UAAUtS,GAAGC;AACxE,IAAIM,EAAIgT,MAAMrR,GAAIkZ,EAAI;AAA3B,IAA8Bpb,EAAI,EAAGA,EAAIkiS,EAAIliS,IACzC,IAAK,IAAIQ,EAAI8R,UAAUtS,GAAIqlF,EAAI,EAAGgxe,EAAK71jB,EAAEP,OAAQolF,EAAIgxe,EAAIhxe,IAAKjqE,IAC1D7a,EAAE6a,GAAK5a,EAAE6kF;AACjB,OAAO9kF,CACT,CAEO,SAASygD,EAAcmL,EAAIl/B,EAAMqyO,GACtC,GAAIA,GAA6B,IAArBhtP,UAAUrS,OAAc,IAAK,IAA4Bu+C,EAAxBx+C,EAAI,EAAGvD,EAAIwwB,EAAKhtB,OAAYD,EAAIvD,EAAGuD,KACxEw+C,GAAQx+C,KAAKitB,IACRuxB,IAAIA,EAAKjrC,MAAM5O,UAAU7E,MAAMwK,KAAK2iB,EAAM,EAAGjtB,IAClDw+C,EAAGx+C,GAAKitB,EAAKjtB;AAGrB,OAAOmsD,EAAGh6C,OAAOqsC,GAAMjrC,MAAM5O,UAAU7E,MAAMwK,KAAK2iB,GACpD,CAEO,SAASqpiB,EAAQtljB,GACtB,OAAOtR,gBAAgB42jB,GAAW52jB,KAAKsR,EAAIA,EAAGtR,MAAQ,IAAI42jB,EAAQtljB,EACpE,CAEO,SAASuljB,EAAiBt1Q,EAAS00Q,EAAYlxZ,GACpD,IAAK5pF,OAAO27e,cAAe,MAAM,IAAIjugB,UAAU;AAC/C,IAAoDvoD,EAAhD+O,EAAI01J,EAAUpyJ,MAAM4uS,EAAS00Q,GAAc,IAAQz7gB,EAAI;AAC3D,OAAOl6C,EAAIynB,OAAOxjB,QAAiC,mBAAlBwyjB,cAA+BA,cAAgBhviB,QAAQ9iB,WAAYoxjB,EAAK,QAASA,EAAK,SAAUA,EAAK,SACtI,SAAqBnqjB,GAAK,OAAO,SAAUoF,GAAK,OAAO+hE,QAAQ2B,QAAQ1jE,GAAGmiE,KAAKvnE,EAAGonE,EAAS,CAAG,GADgEhzE,EAAE66E,OAAO27e,eAAiB,WAAc,OAAO92jB,IAAM,EAAGM;AAEtN,SAAS+1jB,EAAK71jB,EAAG0L,GAASmD,EAAE7O,KAAMF,EAAEE,GAAK,SAAU8Q,GAAK,OAAO,IAAI+hE,QAAQ,SAAUvyE,EAAGma,GAAKu/B,EAAE5yC,KAAK,CAACpH,EAAG8Q,EAAGxQ,EAAGma,IAAM,GAAKq6Q,EAAO90R,EAAG8Q,EAAI,EAAI,EAAOpF,IAAG5L,EAAEE,GAAK0L,EAAE5L,EAAEE,KAAO,CACvK,SAAS80R,EAAO90R,EAAG8Q,GAAK,KACVzQ,EADqBwO,EAAE7O,GAAG8Q,IACnB3O,iBAAiBi0jB,EAAUvjf,QAAQ2B,QAAQn0E,EAAE8B,MAAM2O,GAAGmiE,KAAKujf,EAAS1jf,GAAU2jf,EAAOz8gB,EAAE,GAAG,GAAI35C,EADtE,CAAE,MAAOR,GAAK42jB,EAAOz8gB,EAAE,GAAG,GAAIn6C,EAAI,CAC/E,IAAcQ,CADmE,CAEjF,SAASm2jB,EAAQr0jB,GAAS2yR,EAAO,OAAQ3yR,EAAQ,CACjD,SAAS2wE,EAAO3wE,GAAS2yR,EAAO,QAAS3yR,EAAQ,CACjD,SAASs0jB,EAAO/qjB,EAAGoF,GAASpF,EAAEoF,GAAIkpC,EAAE1mC,QAAS0mC,EAAEj6C,QAAQ+0R,EAAO96O,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAK,CACnF,CAEO,SAAS08gB,EAAiBt2jB,GAC/B,IAAIN,EAAGuE;AACP,OAAOvE,EAAI,CAAC,EAAG+1jB,EAAK,QAASA,EAAK,QAAS,SAAUh2jB,GAAK,MAAMA,CAAG,GAAIg2jB,EAAK,UAAW/1jB,EAAE66E,OAAO2c,UAAY,WAAc,OAAO93F,IAAM,EAAGM;AAC1I,SAAS+1jB,EAAK71jB,EAAG0L,GAAK5L,EAAEE,GAAKI,EAAEJ,GAAK,SAAU8Q,GAAK,OAAQzM,GAAKA,GAAK,CAAElC,MAAOi0jB,EAAQh2jB,EAAEJ,GAAG8Q,IAAK+0E,SAAgBn6E,EAAIA,EAAEoF,GAAKA,CAAG,EAAIpF,CAAG,CACvI,CAEO,SAASirjB,EAAcv2jB,GAC5B,IAAKu6E,OAAO27e,cAAe,MAAM,IAAIjugB,UAAU;AAC/C,IAAiCvoD,EAA7B6J,EAAIvJ,EAAEu6E,OAAO27e;AACjB,OAAO3sjB,EAAIA,EAAES,KAAKhK,IAAMA,EAAqC21jB,EAAS31jB,GAA2BN,EAAI,CAAC,EAAG+1jB,EAAK,QAASA,EAAK,SAAUA,EAAK,UAAW/1jB,EAAE66E,OAAO27e,eAAiB,WAAc,OAAO92jB,IAAM,EAAGM;AAC9M,SAAS+1jB,EAAK71jB,GAAKF,EAAEE,GAAKI,EAAEJ,IAAM,SAAU8Q,GAAK,OAAO,IAAI+hE,QAAQ,SAAU2B,EAAS1B,IACvF,SAAgB0B,EAAS1B,EAAQ3zE,EAAG2R,GAAK+hE,QAAQ2B,QAAQ1jE,GAAGmiE,KAAK,SAASniE,GAAK0jE,EAAQ,CAAEryE,MAAO2O,EAAG+0E,KAAM1mF,GAAM,EAAG2zE,EAAS,CAA3H,CADqH0B,EAAS1B,GAA7BhiE,EAAI1Q,EAAEJ,GAAG8Q,IAA8B+0E,KAAM/0E,EAAE3O,MAAQ,EAAI,CAAG,CAEjK,CAEO,SAASy0jB,EAAqBC,EAAQtoX,GAE3C,OADIhnL,OAAOmhC,eAAkBnhC,OAAOmhC,eAAemugB,EAAQ,MAAO,CAAE10jB,MAAOosM,IAAiBsoX,EAAOtoX,IAAMA,EAClGsoX,CACT,CAEA,IAAIC,EAAqBvviB,OAAOxjB,OAAU,SAAS3D,EAAG0Q,GACpDyW,OAAOmhC,eAAetoD,EAAG,UAAW,CAAEwoD,cAAkBzmD,MAAO2O,GACjE,EAAK,SAAS1Q,EAAG0Q,GACf1Q,EAAWgU,QAAItD,CACjB,EAEI+4L,EAAU,SAASzpM,GAMrB,OALAypM,EAAUtiL,OAAOs7F,qBAAuB,SAAUziH,GAChD,IAAIk+C,EAAK;AACT,IAAK,IAAIpjC,KAAK9a,EAAOmnB,OAAO9iB,UAAU4N,eAAejI,KAAKhK,EAAG8a,KAAIojC,EAAGA,EAAGv+C,QAAUmb;AACjF,OAAOojC,CACT,EACOurJ,EAAQzpM,EACjB;AAEO,SAAS22jB,EAAah5R,GAC3B,GAAIA,GAAOA,EAAI63C,WAAY,OAAO73C;AAClC,IAAIt3Q,EAAS,CAAC;AACd,GAAW,MAAPs3Q,EAAa,IAAK,IAAI7iR,EAAI2uL,EAAQk0F,GAAMj+R,EAAI,EAAGA,EAAIob,EAAEnb,OAAQD,IAAkB,YAATob,EAAEpb,IAAkB6kQ,EAAgBl+O,EAAQs3Q,EAAK7iR,EAAEpb;AAE7H,OADAg3jB,EAAmBrwiB,EAAQs3Q,GACpBt3Q,CACT,CAEO,SAASuwiB,EAAgBj5R,GAC9B,OAAQA,GAAOA,EAAI63C,WAAc73C,EAAM,CAAE3pR,QAAS2pR,EACpD,CAEO,SAASk5R,EAAuB5sG,EAAU5oc,EAAOi2B,EAAMhsC,GAC5D,GAAa,MAATgsC,IAAiBhsC,EAAG,MAAM,IAAI28C,UAAU;AAC5C,GAAqB,mBAAV5mC,EAAuB4oc,IAAa5oc,IAAU/V,GAAK+V,EAAM2O,IAAIi6b,GAAW,MAAM,IAAIhia,UAAU;AACvG,MAAgB,MAAT3Q,EAAehsC,EAAa,MAATgsC,EAAehsC,EAAEtB,KAAKigd,GAAY3+c,EAAIA,EAAEvJ,MAAQsf,EAAMqK,IAAIu+b,EACtF,CAEO,SAAS6sG,EAAuB7sG,EAAU5oc,EAAOtf,EAAOu1C,EAAMhsC,GACnE,GAAa,MAATgsC,EAAc,MAAM,IAAI2Q,UAAU;AACtC,GAAa,MAAT3Q,IAAiBhsC,EAAG,MAAM,IAAI28C,UAAU;AAC5C,GAAqB,mBAAV5mC,EAAuB4oc,IAAa5oc,IAAU/V,GAAK+V,EAAM2O,IAAIi6b,GAAW,MAAM,IAAIhia,UAAU;AACvG,MAAiB,MAAT3Q,EAAehsC,EAAEtB,KAAKigd,EAAUlod,GAASuJ,EAAIA,EAAEvJ,MAAQA,EAAQsf,EAAM4K,IAAIg+b,EAAUlod,GAASA,CACtG,CAEO,SAASg1jB,EAAsB11iB,EAAO4oc,GAC3C,GAAiB,OAAbA,GAA0C,iBAAbA,GAA6C,mBAAbA,EAA0B,MAAM,IAAIhia,UAAU;AAC/G,MAAwB,mBAAV5mC,EAAuB4oc,IAAa5oc,EAAQA,EAAM2O,IAAIi6b,EACtE,CAEO,SAAS+sG,EAAwBn6Z,EAAK96J,EAAOqf,GAClD,GAAIrf,QAAoC,CACtC,GAAqB,iBAAVA,GAAuC,mBAAVA,EAAsB,MAAM,IAAIkmD,UAAU;AAClF,IAAIu3I,EAASi6F;AACb,GAAIr4Q,EAAO,CACT,IAAKm5D,OAAO08e,aAAc,MAAM,IAAIhvgB,UAAU;AAC9Cu3I,EAAUz9L,EAAMw4E,OAAO08e,aACzB,CACA,QAAqB,IAAjBz3X,EAAoB,CACtB,IAAKjlH,OAAOilH,QAAS,MAAM,IAAIv3I,UAAU;AACzCu3I,EAAUz9L,EAAMw4E,OAAOilH,SACnBp+K,IAAOq4Q,EAAQj6F,EACrB,CACA,GAAuB,mBAAZA,EAAwB,MAAM,IAAIv3I,UAAU;AACnDwxO,IAAOj6F,EAAU,WAAa,IAAMi6F,EAAMzvR,KAAK5K,KAAO,CAAE,MAAOK,GAAK,OAAOgzE,QAAQC,OAAOjzE,EAAI,CAAE,GACpGo9J,EAAIxzG,MAAMriD,KAAK,CAAEjF,MAAOA,EAAOy9L,QAASA,EAASp+K,MAAOA,GAC1D,MACSA,GACPy7I,EAAIxzG,MAAMriD,KAAK,CAAEoa;AAEnB,OAAOrf,CACT,CAEA,IAAIm1jB,EAA8C,mBAApBC,gBAAiCA,gBAAkB,SAAUh/iB,EAAOi/iB,EAAYnijB,GAC5G,IAAIxV,EAAI,IAAIK,MAAMmV;AAClB,OAAOxV,EAAE+H,KAAO,kBAAmB/H,EAAE0Y,MAAQA,EAAO1Y,EAAE23jB,WAAaA,EAAY33jB,CACjF;AAEO,SAAS43jB,EAAmBx6Z,GACjC,SAASx9C,EAAK5/G,GACZo9J,EAAI1kJ,MAAQ0kJ,EAAIy6Z,SAAW,IAAIJ,EAAiBz3jB,EAAGo9J,EAAI1kJ,MAAO,4CAA8C1Y,EAC5Go9J,EAAIy6Z,WACN,CACA,IAAIr3jB,EAAG2B,EAAI;AAkBX,OAjBA,SAASy2F,IACP,KAAOp4F,EAAI48J,EAAIxzG,MAAM0nG,OACnB,IACE,IAAK9wJ,EAAEmhB,OAAe,IAANxf,EAAS,OAAOA,EAAI,EAAGi7J,EAAIxzG,MAAMriD,KAAK/G,GAAIwyE,QAAQ2B,UAAUvB,KAAKwlB;AACjF,GAAIp4F,EAAEu/L,QAAS,CACb,IAAIn5K,EAASpmB,EAAEu/L,QAAQx1L,KAAK/J,EAAE8B;AAC9B,GAAI9B,EAAEmhB,MAAO,OAAOxf,GAAK,EAAG6wE,QAAQ2B,QAAQ/tD,GAAQwsD,KAAKwlB,EAAM,SAAS54F,GAAc,OAAT4/G,EAAK5/G,GAAW44F,GAAQ,EACvG,MACKz2F,GAAK,CACZ,CACA,MAAOnC,GACL4/G,EAAK5/G,EACP,CAEF,GAAU,IAANmC,EAAS,OAAOi7J,EAAIy6Z,SAAW7kf,QAAQC,OAAOmqF,EAAI1kJ,OAASs6D,QAAQ2B;AACvE,GAAIyoF,EAAIy6Z,SAAU,MAAMz6Z,EAAI1kJ,KAC9B,CAhBA,EAkBF,CAEO,SAASo/iB,EAAiChoX,EAAMioX,GACrD,MAAoB,iBAATjoX,GAAqB,WAAW9qL,KAAK8qL,GACrCA,EAAK1vL,QAAQ,mDAAoD,SAAUtW,EAAGkujB,EAAK14jB,EAAG+lZ,EAAK1lH,GAC9F,OAAOq4R,EAAMD,EAAc,OAAS,OAAQz4jB,GAAO+lZ,GAAQ1lH,EAAWrgS,EAAI+lZ,EAAM,IAAM1lH,EAAG37Q,cAAgB,KAAxCla,CACrE,GAEGgmM,CACT,CAEA,MAAA5kH,EAAA,CACE/kC,YACA/mB,WACAspB,SACA6rgB,aACAE,UACAE,eACAQ,oBACAE,YACAC,oBACAC,aACAI,YACAE,cACA/wT,kBACAC,eACAmxT,WACAC,SACAC,WACAC,iBACAp1gB,gBACAs1gB,UACAC,mBACAK,mBACAC,gBACAC,uBACAG,eACAC,kBACAC,yBACAC,yBACAC,wBACAC,0BACAK,qBACAE;AAAAA;AAAAA;AC3YF,IAAIG,EACW,SACXC,EAAmB,KAAMC,EAAe,KAExCC,EAAa,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAE9FC,EAAS,CACL,EAAa,KACb,EAAY,MACZ,EAAY,MACZ,GAAY,IACZ,IAAc,IACd,IAAc,IACd,IAAa,KACb,IAAc,IACd,IAAc,IACd,IAAa,KACb,IAAa,KACb,IAAa,KACb,IAAa,KACb,IAAa,KACb,IAAa,KACb,IAAa,KACb,IAAc,IACd,IAAa,KACb,IAAa,KACb,GAAa,MAGjBC,EAAW,SAASp2Z,IAA+C,GAA3Bk2Z,EAAW5ujB,QAAQ04J,KAAmBi2Z,EAAeE,EAAM,GAAKn2Z,EAAI,EAG5Gq2Z,EAAS,SAASr2Z,GAAiBg2Z,EAAmBh2Z,EAAIo2Z,EAASp2Z,EAAK;AAC5E,SAASs2Z,IAAaD,EAAO,MAHLD,EAAS,KAGiB,CAElD,SAASG,EAAW7riB,GAAmE,IAA9B,IAAIrsB,EAAsB,GAAYN,EAAI,EAAG02B,EAAM/J,EAAK1sB,OAAQD,EAAI02B,IAAO12B,EAAGM,EAAEN,GAAK2sB,EAAK+kB,WAAW1xC;AAAI,OAAOM,CAAG,CAO5K,SAASm4jB,EAAY9riB,GAEpB,IADA,IAAIrsB,EAAsB,GAClBN,EAAI,EAAGA,EAAK2sB,EAAK1sB,QAAQ,IAAMD,EAAGM,EAAEN,GAAKqwC,OAAOiB,aAAa3kB,EAAK+kB,WAAW,EAAE1xC,EAAE,IAAM2sB,EAAK+kB,WAAW,EAAE1xC,IAAI;AACrH,OAAOM,EAAEkX,KAAK,GACf,CAEA,IAWIkhjB,EAXAC,EAAQ,SAAShsiB,GACpB,IAAI+7B,EAAK/7B,EAAK+kB,WAAW,GAAIiX,EAAKh8B,EAAK+kB,WAAW;AAClD,OAAS,KAANgX,GAAoB,KAANC,EAblB,SAAqBh8B,GAEpB,IADA,IAAIrsB,EAAsB,GAClBN,EAAI,EAAGA,EAAK2sB,EAAK1sB,QAAQ,IAAMD,EAAGM,EAAEN,GAAKqwC,OAAOiB,aAAa3kB,EAAK+kB,WAAW,EAAE1xC,IAAM2sB,EAAK+kB,WAAW,EAAE1xC,EAAE,IAAI;AACrH,OAAOM,EAAEkX,KAAK,GACf,CAJA,CAaiDmV,EAAK7sB,MAAM,IAClD,KAAN4oD,GAAoB,KAANC,EAAmB8vgB,EAAY9riB,EAAK7sB,MAAM,IAClD,OAAN4oD,EAAqB/7B,EAAK7sB,MAAM,GAC5B6sB,CACR,EAEIisiB,EAAW,SAAclyjB,GAA2B,OAAO2pC,OAAOiB,aAAa5qC,EAAI,EACnFmyjB,EAAW,SAAcnyjB,GAA2B,OAAO2pC,OAAOiB,aAAa5qC,EAAI;AAGvF,SAASoyjB,EAAYC,GACpBL,EAAWK,EACXT,EAAS,SAASr2Z,GAAiBg2Z,EAAmBh2Z,EAAIo2Z,EAASp2Z,EAAK,EACxE02Z,EAAQ,SAAShsiB,GAChB,OAA0B,MAAvBA,EAAK+kB,WAAW,IAAsC,MAAvB/kB,EAAK+kB,WAAW,GAAsBgnhB,EAASjrR,MAAM71R,OAAO,KAAM4gjB,EAAW7riB,EAAK7sB,MAAM,KACnH6sB,CACR,EACAisiB,EAAW,SAAclyjB,GACxB,OAAwB,OAArBuxjB,EAAkC5nhB,OAAOiB,aAAa5qC,GAClDgyjB,EAASjrR,MAAM71R,OAAOqgjB,EAAkB,CAAG,IAAFvxjB,EAAMA,GAAG,IAAI,EAC9D,EACAmyjB,EAAW,SAAcnyjB,GACxB,OAAOgyjB,EAASjrR,MAAM71R,OAAOsgjB,EAAc,CAACxxjB,IAAI,EACjD,EACAsyjB,IACD,CAEA,IAEIC,EAAa;AACjB,SAASC,EAAc5pjB,GAGrB,IAFA,IAAIhP,EAAI,GACJooD,EAAK,EAAGC,EAAK,EAAGwwgB,EAAK,EAAGvrQ,EAAK,EAAGC,EAAK,EAAGurQ,EAAK,EAAGC,EAAK,EAChDr5jB,EAAI,EAAGA,EAAIsP,EAAMrP,QAExB2tT,GADAllQ,EAAKp5C,EAAMoiC,WAAW1xC,OACX,EAEX6tT,GAAW,EAALnlQ,IAAW,GADjBC,EAAKr5C,EAAMoiC,WAAW1xC,OACK,EAE3Bo5jB,GAAW,GAALzwgB,IAAY,GADlBwwgB,EAAK7pjB,EAAMoiC,WAAW1xC,OACM,EAC5Bq5jB,EAAU,GAALF,EACDx+e,MAAMhyB,GACRywgB,EAAKC,EAAK,GACD1+e,MAAMw+e,KACfE,EAAK,IAEP/4jB,GAAK24jB,EAAWx1jB,OAAOmqT,GAAMqrQ,EAAWx1jB,OAAOoqT,GAAMorQ,EAAWx1jB,OAAO21jB,GAAMH,EAAWx1jB,OAAO41jB;AAEjG,OAAO/4jB,CACT,CACA,SAASg5jB,EAAchqjB,GACrB,IAAIhP,EAAI,GACJooD,EAAK,EAAGC,EAAK,EAAGwwgB,EAAK,EAAWtrQ,EAAK,EAAGurQ,EAAK,EAAGC,EAAK;AACzD/pjB,EAAQA,EAAM6Q,QAAQ,eAAgB;AACtC,IAAK,IAAIngB,EAAI,EAAGA,EAAIsP,EAAMrP,QAGxByoD,EAFKuwgB,EAAW1vjB,QAAQ+F,EAAM7L,OAAOzD,OAE1B,GADX6tT,EAAKorQ,EAAW1vjB,QAAQ+F,EAAM7L,OAAOzD,QAChB,EACrBM,GAAK+vC,OAAOiB,aAAaoX,GAEzBC,GAAW,GAALklQ,IAAY,GADlBurQ,EAAKH,EAAW1vjB,QAAQ+F,EAAM7L,OAAOzD,QACT,EACjB,KAAPo5jB,IACF94jB,GAAK+vC,OAAOiB,aAAaqX,IAG3BwwgB,GAAW,EAALC,IAAW,GADjBC,EAAKJ,EAAW1vjB,QAAQ+F,EAAM7L,OAAOzD,OAE1B,KAAPq5jB,IACF/4jB,GAAK+vC,OAAOiB,aAAa6nhB;AAG7B,OAAO74jB,CACT,CACA,IAAIi5jB,EAA8D,oBAAXC,QAA6C,oBAAZr9Z,cAAuD,IAArBA,QAAQkB,YAA8BlB,QAAQkB,SAASz5I,KAE7K61iB,EAA4B,WAC/B,GAAqB,oBAAXD,OAAwB,CACjC,IAAIE,GAAQF,OAAOvsiB;AACnB,IAAIysiB,EAAM,IAAMF,OAAOvsiB,KAAK,MAAO,OAAS,CAAE,MAAMltB,GAAK25jB,IAAa,CACtE,OAAOA,EAAO,SAASC,EAAKC,GAAO,OAAQA,EAAO,IAAIJ,OAAOG,EAAKC,GAAO,IAAIJ,OAAOG,EAAM,EAAIH,OAAOvsiB,KAAK9qB,KAAKq3jB,OAChH,CACA,OAAO,WAAY,CACpB,CAPgC;AAUhC,SAASK,EAAYnjiB,GAEpB,OAAG6iiB,EAAgBC,OAAOM,MAAQN,OAAOM,MAAMpjiB,GAAO,IAAI8iiB,OAAO9iiB,GACrC,oBAAdkhL,WAA4B,IAAIA,WAAWlhL,GAAO,IAAInjB,MAAMmjB,EAE3E,CAEA,SAASqjiB,EAAerjiB,GAEvB,OAAG6iiB,EAAgBC,OAAOQ,YAAcR,OAAOQ,YAAYtjiB,GAAO,IAAI8iiB,OAAO9iiB,GACjD,oBAAdkhL,WAA4B,IAAIA,WAAWlhL,GAAO,IAAInjB,MAAMmjB,EAE3E,CAEA,IAAIujiB,EAAM,SAAa/3jB,GACtB,OAAGq3jB,EAAgBE,EAAYv3jB,EAAG,UAC3BA,EAAEyV,MAAM,IAAI2L,IAAI,SAAS5c,GAA0B,OAAyB,IAAlBA,EAAEgrC,WAAW,EAAW,EAC1F;AAEA,SAASwohB,EAAKh4jB,GACb,GAA0B,oBAAhBi4jB,YAA6B,OAAOF,EAAI/3jB;AAElD,IADA,IAAIy3jB,EAAM,IAAIQ,YAAYj4jB,EAAEjC,QAAS82E,EAAO,IAAI6gI,WAAW+hX,GAClD35jB,EAAE,EAAGA,GAAGkC,EAAEjC,SAAUD,EAAG+2E,EAAK/2E,GAAuB,IAAlBkC,EAAEwvC,WAAW1xC;AACvD,OAAO25jB,CACR,CAEA,SAASS,EAAIztiB,GACZ,GAAGpZ,MAAM1T,QAAQ8sB,GAAO,OAAOA,EAAKrJ,IAAI,SAASzf,GAAK,OAAOwsC,OAAOiB,aAAaztC,EAAI,GAAG2T,KAAK;AAC/D,IAA9B,IAAIlX,EAAsB,GAAYN,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAGM,EAAEN,GAAKqwC,OAAOiB,aAAa3kB,EAAK3sB;AAAK,OAAOM,EAAEkX,KAAK,GACvH,CAOA,SAAS6ijB,EAAK1tiB,GACb,GAAyB,oBAAfwtiB,YAA4B,MAAM,IAAI/5jB,MAAM;AACtD,GAAGusB,aAAgBwtiB,YAAa,OAAOE,EAAK,IAAIziX,WAAWjrL;AAG3D,IADA,IAAIrsB,EAAI,IAAIiT,MAAMoZ,EAAK1sB,QACfD,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAGM,EAAEN,GAAK2sB,EAAK3sB;AACjD,OAAOM,CACR,CAEA,IAAIg6jB,EAAUf,EAAU,SAASgB,GAAQ,OAAOf,OAAOrnjB,OAAOoojB,EAAKj3iB,IAAI,SAASq2iB,GAAO,OAAOH,OAAOgB,SAASb,GAAOA,EAAMF,EAAYE,EAAM,GAAK,EAAI,SAASY,GAC9J,GAAyB,oBAAf3iX,WAA4B,CACrC,IAAI53M,EAAI,EAAGy6jB,EAAS;AACpB,IAAIz6jB,EAAI,EAAGA,EAAIu6jB,EAAKt6jB,SAAUD,EAAGy6jB,GAAUF,EAAKv6jB,GAAGC;AACnD,IAAIK,EAAI,IAAIs3M,WAAW6iX,GACnB/jiB,EAAM;AACV,IAAI12B,EAAI,EAAGy6jB,EAAS,EAAGz6jB,EAAIu6jB,EAAKt6jB,OAAQw6jB,GAAU/jiB,IAAO12B,EAExD,GADA02B,EAAM6jiB,EAAKv6jB,GAAGC,OACXs6jB,EAAKv6jB,aAAc43M,WAAYt3M,EAAEisB,IAAIguiB,EAAKv6jB,GAAIy6jB;IAC5C,IAAqB,iBAAXF,EAAKv6jB,GAAkB,KAAM;AACvCM,EAAEisB,IAAI,IAAIqrL,WAAW2iX,EAAKv6jB,IAAKy6jB,EAAO,CAE5C,OAAOn6jB,CACR,CACA,MAAO,GAAG6R,OAAOE,MAAM,GAAIkojB,EAAKj3iB,IAAI,SAASq2iB,GAAO,OAAOpmjB,MAAM1T,QAAQ85jB,GAAOA,EAAM,GAAG75jB,MAAMwK,KAAKqvjB,EAAM,GAC3G,EAkCIe,EAAO,UAAWC,EAAO;AAqB7B,SAASC,EAAQl0jB,GAAuD,IAA5B,IAAIpG,EAAI,GAAIN,EAAI0G,EAAEzG,OAAO,EAASD,GAAG,GAAGM,GAAKoG,EAAEjD,OAAOzD;AAAM,OAAOM,CAAG,CAClH,SAASu6jB,EAAK7pjB,EAAU3R,GAAyB,IAAIb,EAAE,GAAGwS;AAAG,OAAOxS,EAAEyB,QAAQZ,EAAEb,EAAE4oa,GAAK,IAAI/na,EAAEb,EAAEyB,QAAQzB,CAAE,CACzG,SAASs8jB,EAAK9pjB,EAAU3R,GAAyB,IAAIb,EAAE,GAAGwS;AAAE,OAAOxS,EAAEyB,QAAQZ,EAAEb,EAAE4oa,GAAK,IAAI/na,EAAEb,EAAEyB,QAAQzB,CAAE,CACxG,SAASu8jB,EAAM/pjB,EAAU3R,GAAyB,IAAIb,EAAE,GAAGwS;AAAG,OAAOxS,EAAEyB,QAAQZ,EAAEb,EAAEA,EAAE4oa,GAAK,IAAI/na,EAAEb,EAAEyB,OAAQ,CAG1G,IAAI+6jB,EAAqBv4jB,KAAKC,IAAI,EAAE;AACpC,SAASu4jB,EAAMjqjB,EAAU3R,GAAyB,OAAG2R,EAAEgqjB,GAAOhqjB,GAAGgqjB,EAHjE,SAAgBhqjB,EAAU3R,GAAyB,IAAIb,EAAE,GAAGiE,KAAKG,MAAMoO;AAAI,OAAOxS,EAAEyB,QAAQZ,EAAEb,EAAE4oa,GAAK,IAAI/na,EAAEb,EAAEyB,QAAQzB,CAAE,CAAvH,CAGsFwS,EAAE3R,GAFxF,SAAgB2R,EAAU3R,GAAyB,IAAIb,EAAE,GAAGwS;AAAG,OAAOxS,EAAEyB,QAAQZ,EAAEb,EAAE4oa,GAAK,IAAI/na,EAAEb,EAAEyB,QAAQzB,CAAE,CAA3G,CAEoGiE,KAAKG,MAAMoO,GAAoB3R,EAAI,CAEvI,SAAS67jB,EAAch5jB,EAAclC,GAAyC,OAAZA,EAAIA,GAAK,EAAUkC,EAAEjC,QAAU,EAAID,GAA8B,MAAR,GAAhBkC,EAAEwvC,WAAW1xC,KAA6C,MAAR,GAAlBkC,EAAEwvC,WAAW1xC,EAAE,KAA6C,MAAR,GAAlBkC,EAAEwvC,WAAW1xC,EAAE,KAA6C,MAAR,GAAlBkC,EAAEwvC,WAAW1xC,EAAE,KAA6C,MAAR,GAAlBkC,EAAEwvC,WAAW1xC,EAAE,KAA6C,KAAR,GAAlBkC,EAAEwvC,WAAW1xC,EAAE,KAA4C,MAAR,GAAlBkC,EAAEwvC,WAAW1xC,EAAE,GAAgB,CACnV,IAAIi1E,EAAiC,CACpC,CAAC,MAAO,UACR,CAAC,MAAO,UACR,CAAC,MAAO,WACR,CAAC,MAAO,aACR,CAAC,MAAO,YACR,CAAC,MAAO,UACR,CAAC,MAAO,aAELC,EAAmC,CACtC,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,OACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,UACb,CAAC,IAAK,MAAO,aACb,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,aAoCVimf,EAAY,CACf,EAAI,UACJ,EAAI,IACJ,EAAI,OACJ,EAAI,QACJ,EAAI,WACJ,EAAI,KACJ,GAAI,QACJ,GAAI,WACJ,GAAI,QACJ,GAAI,UACJ,GAAI,SACJ,GAAI,WACJ,GAAI,QACJ,GAAI,SACJ,GAAI,aACJ,GAAI,gBACJ,GAAI,OACJ,GAAI,UACJ,GAAI,cACJ,GAAI,iBACJ,GAAI,sBACJ,GAAI,sBACJ,GAAI,2BACJ,GAAI,QACJ,GAAI,YACJ,GAAI,SACJ,GAAI,WACJ,GAAI,IACJ,GAAI,4BAMDC,EAAkB,CACrB,EAAI,GAAI,EAAI,GAAI,EAAI,GAAI,EAAI,GAE5B,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAE7B,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAEpC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5B,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAE7B,GAAK,EAAG,GAAI,GACZ,GAAI,GAAI,GAAI,GAAI,GAAI,GACpB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5B,GAAI,GAAI,GAAI,GAAI,GAAI,GACpB,GAAI,GAAI,GAAI,GAAI,GAAI,GACpB,GAAI,GAKDC,EAAkB,CAErB,EAAI,4BACJ,GAAI,4BAGJ,EAAI,iCACJ,GAAI,iCAGJ,EAAI,kCACJ,GAAI,kCAGJ,EAAI,uCACJ,GAAI,uCAGJ,GAAI,8CAGJ,GAAI,uDAGJ,GAAI,sDAGJ,GAAI;AAGL,SAASC,EAAS50jB,EAAc+zE,EAAc8gf,GAM7C,IALA,IAAIC,EAAM90jB,EAAI,GAAK,EAAI,EACnB8xB,EAAI9xB,EAAI80jB,EACRC,EAAM,EAAGC,EAAM,EAAGt2e,EAAI,EACtBu2e,EAAM,EAAGC,EAAM,EAAGtqe,EAAI,EACtBxN,EAAIrhF,KAAKE,MAAM61B,GACbojiB,EAAMnhf,IAEX2K,GADAtB,EAAIrhF,KAAKE,MAAM61B,IACPkjiB,EAAMD,EACdnqe,EAAIxN,EAAI83e,EAAMD,IACVnjiB,EAAIsrD,EAAK,QACbtrD,EAAI,GAAKA,EAAIsrD,GACb23e,EAAMC,EAAKA,EAAMt2e,EACjBu2e,EAAMC,EAAKA,EAAMtqe;AAGlB,GADGA,EAAI7W,IAAQmhf,EAAMnhf,GAAK6W,EAAIqqe,EAAKv2e,EAAIq2e,IAAcnqe,EAAIsqe,EAAKx2e,EAAIs2e,KAC9DH,EAAO,MAAO,CAAC,EAAGC,EAAMp2e,EAAGkM;AAC/B,IAAIp3C,EAAIz3C,KAAKE,MAAM64jB,EAAMp2e,EAAEkM;AAC3B,MAAO,CAACp3C,EAAGshhB,EAAIp2e,EAAIlrC,EAAEo3C,EAAGA,EACzB,CACA,SAASuqe,EAAoB7qjB,EAAa2nC,EAAcmjhB,GACvD,GAAG9qjB,EAAI,SAAWA,EAAI,EAAG,OAAO;AAChC,IAAIopB,EAAU,EAAFppB,EAAM9I,EAAOzF,KAAKE,MAAM,OAASqO,EAAIopB,IAAQk1R,EAAI,EACzDysQ,EAAK,GACLtjU,EAAI,CAACh+K,EAAErgD,EAAMmjD,EAAEr1E,EAAMzG,EAAE,OAAOuP,EAAEopB,GAAMlyB,EAAKgJ,EAAE,EAAErH,EAAE,EAAExK,EAAE,EAAEiiF,EAAE,EAAEhE,EAAE,EAAEvgF,EAAE,EAAEm9C,EAAE;AAOzE,GANGz3C,KAAKqN,IAAI2oP,EAAIh3P,GAAK,OAAMg3P,EAAIh3P,EAAI,GAChCk3C,GAAQA,EAAKqjhB,WAAU5hiB,GAAQ,MAC/Bq+N,EAAIh3P,EAAI,QACVg3P,EAAIh3P,EAAI,EACK,SAARyG,IAAiBuwP,EAAIl7K,EAAIr1E,EAAO,IAAKkyB,IAAQq+N,EAAIh+K,IAE3C,KAATrgD,EAAc2hiB,EAAOD,EAAK,CAAC,KAAK,GAAG,IAAM,CAAC,KAAK,EAAE,IAAKxsQ,EAAI;KACxD,GAAY,IAATl1R,EAAa2hiB,EAAOD,EAAK,CAAC,KAAK,EAAE,IAAM,CAAC,KAAK,EAAE,GAAIxsQ,EAAI;IAC1D,CACDl1R,EAAO,MAAMA;AAEhB,IAAI/6B,EAAI,IAAIg6C,KAAK,KAAM,EAAG;AAC1Bh6C,EAAE8uH,QAAQ9uH,EAAEu6E,UAAYx/C,EAAO,GAC/B2hiB,EAAO,CAAC18jB,EAAEq6E,cAAer6E,EAAEs6E,WAAW,EAAEt6E,EAAEu6E,WAC1C01O,EAAMjwT,EAAE46E,SACL7/C,EAAO,KAAIk1R,GAAOA,EAAM,GAAK,GAC7BwsQ,IAAIxsQ,EAgFT,SAAuBl1R,EAAe95B,GAEpCA,EAAE,IAAM;AACR,IAAIgvT,EAAMl1R,EAAK6/C;AAEf,OADG7/C,EAAO,KAAIk1R,GAAOA,EAAM,GAAK,GACzBA,CACT,CANA,CAhF6BjwT,EAAG08jB,GAC/B,CAMA,OALAtjU,EAAIvnP,EAAI6qjB,EAAK,GAAItjU,EAAI5uP,EAAIkyjB,EAAK,GAAItjU,EAAIp5P,EAAI08jB,EAAK,GAC/CtjU,EAAI17P,EAAImL,EAAO,GAAIA,EAAOzF,KAAKE,MAAMuF,EAAO,IAC5CuwP,EAAIn7K,EAAIp1E,EAAO,GAAIA,EAAOzF,KAAKE,MAAMuF,EAAO,IAC5CuwP,EAAIn3K,EAAIp5E,EACRuwP,EAAIv+M,EAAIo1Q,EACD72D,CACR,CACA,IAAIwjU,EAA2B,IAAI5ihB,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG,GACxD6ihB,EAA2BD,EAAY1hf,UACvC4hf,EAA2B,IAAI9ihB,KAAK,KAAM,EAAG,EAAG,EAAG,EAAG;AAC1D,SAAS+ihB,EAAcprjB,EAAYgrjB,GAClC,IAAIK,EAAqBrrjB,EAAEupE;AAG3B,OAFGyhf,EAAUK,GAAS,UACdrrjB,GAAKmrjB,IAAaE,GAAS,QAC3BA,GAASH,EAAoG,KAAxElrjB,EAAEq/G,oBAAmC4rc,EAAY5rc,uBAA6B,KAC5H,CAIA,SAASisc,EAAkBh8jB,GAC1B,OAA2B,GAAnBA,EAAEiJ,QAAQ,KAAcjJ,EAAIA,EAAE6f,QAAQ,2BAA4B,KAC3E,CAsBA,SAASo8iB,EAAgBvrjB,GACxB,IAAuD1Q,EAAnD4/E,EAAIz9E,KAAKE,MAAMF,KAAKm4E,IAAIn4E,KAAKqN,IAAIkB,IAAIvO,KAAK+5jB;AAO9C,OALuBl8jB,EAApB4/E,IAAM,GAAKA,IAAM,EAAOlvE,EAAEyrjB,YAAY,GAAGv8e,GACpCz9E,KAAKqN,IAAIowE,IAAM,EAjBxB,SAAuBlvE,GACtB,IAAIuD,EAAKvD,EAAE,EAAE,GAAG,GACZ1Q,EAAIg8jB,EAAkBtrjB,EAAEzO,QAAQ;AAAM,OAAGjC,EAAEL,QAAUsU,IACzDjU,EAAI0Q,EAAEyrjB,YAAY,KAAUx8jB,QAAUsU,EAD6BjU,EAE5D0Q,EAAE0rjB,cAAc,EACxB,CALA,CAiB6C1rjB,GAC9B,KAANkvE,EAAclvE,EAAEzO,QAAQ,IAAIwyF,OAAO,EAAE,IAV9C,SAAuB/jF,GACtB,IAAI1Q,EAAIg8jB,EAAkBtrjB,EAAEzO,QAAQ;AACpC,OAAQjC,EAAEL,QAAU+Q,EAAE,EAAE,GAAG,KAAa,MAAN1Q,GAAmB,OAANA,EAAc0Q,EAAEyrjB,YAAY,GAAKn8jB,CACjF,CAHA,CAWwB0Q,GAEhBsrjB,EA3BR,SAA2Bh8jB,GAC1B,OAAsB,GAAnBA,EAAEiJ,QAAQ,KAAmBjJ,EACzBA,EAAE6f,QAAQ,8BAA8B,OAAOA,QAAQ,eAAe,QAC9E,CAHA,CA2B4C7f,EAAEoD,eAC9C,CAaA,SAASi5jB,EAAY3rjB,EAAW2nC,GAC/B,cAAc3nC,GACb,IAAK,SAAU,OAAOA;AACtB,IAAK,UAAW,OAAOA,EAAI,OAAS;AACpC,IAAK,SAAU,OAAU,EAAFA,KAASA,EAAIA,EAAEjB,SAAS,IAAMwsjB,EAAgBvrjB;AACrE,IAAK,YAAa,MAAO;AACzB,IAAK,SACJ,GAAQ,MAALA,EAAW,MAAO;AACrB,GAAGA,aAAaqoC,KAAM,OAAOujhB,GAAW,GAAIR,EAAcprjB,EAAG2nC,GAAQA,EAAKqjhB,UAAWrjhB,GAEvF,MAAM,IAAIv4C,MAAM,wCAA0C4Q,EAC3D,CAUA,SAAS6rjB,GAAer5jB,EAAiB46c,EAAgBvra,EAAKiqhB,GAC7D,IAAiCrkU,EAA7Bn4P,EAAE,GAAIizJ,EAAG,EAAGl9B,EAAG,EAAGnlH,EAAI2hC,EAAI3hC,EAAQ6rjB,EAAO;AAC7C,OAAOv5jB,GACN,KAAK,GACJ0N,EAAI2hC,EAAI3hC,EAAI;AAEb,KAAK,IACL,OAAOktc,EAAIn+c,QACV,KAAK,EAAG,KAAK,EAAGw4P,EAAMvnP,EAAI,IAAK6rjB,EAAO;AAAG;AACzC,QAAStkU,EAAMvnP,EAAI,IAAO6rjB,EAAO,EAChC;AACF,KAAK,IACL,OAAO3+G,EAAIn+c,QACV,KAAK,EAAG,KAAK,EAAGw4P,EAAM5lN,EAAIhpC,EAAGkzjB,EAAO3+G,EAAIn+c;AAAQ;AAChD,KAAK,EAAG,OAAOi1E,EAAOriC,EAAIhpC,EAAE,GAAG;AAC/B,KAAK,EAAG,OAAOqrE,EAAOriC,EAAIhpC,EAAE,GAAG;AAC/B,QAAS,OAAOqrE,EAAOriC,EAAIhpC,EAAE,GAAG,GAC/B;AACF,KAAK,IACL,OAAOu0c,EAAIn+c,QACV,KAAK,EAAG,KAAK,EAAGw4P,EAAM5lN,EAAIxzC,EAAG09jB,EAAO3+G,EAAIn+c;AAAQ;AAChD,KAAK,EAAG,OAAOg1E,EAAKpiC,EAAIqH,GAAG;AAC3B,QAAS,OAAO+6B,EAAKpiC,EAAIqH,GAAG,GAC3B;AACF,KAAK,IACL,OAAOkka,EAAIn+c,QACV,KAAK,EAAG,KAAK,EAAGw4P,EAAM,GAAG5lN,EAAIyuC,EAAE,IAAI,GAAIy7e,EAAO3+G,EAAIn+c;AAAQ;AAC1D,QAAS,KAAM,oBAAsBm+c,EACpC;AACF,KAAK,GACL,OAAOA,EAAIn+c,QACV,KAAK,EAAG,KAAK,EAAGw4P,EAAM5lN,EAAIyuC,EAAGy7e,EAAO3+G,EAAIn+c;AAAQ;AAChD,QAAS,KAAM,oBAAsBm+c,EACpC;AACF,KAAK,GACL,OAAOA,EAAIn+c,QACV,KAAK,EAAG,KAAK,EAAGw4P,EAAM5lN,EAAIyqC,EAAGy/e,EAAO3+G,EAAIn+c;AAAQ;AAChD,QAAS,KAAM,sBAAwBm+c,EACtC;AACF,KAAK,IACJ,GAAU,KAAPA,GAAqB,MAAPA,GAAsB,MAAPA,GAAsB,OAAPA,GAAuB,QAAPA,EAAe,KAAM,sBAAwBA;AAC5G,OAAa,IAAVvra,EAAIpxC,GAAmB,KAAP28c,GAAqB,MAAPA,GAEpB/nV,EAAVymc,GAAO,EAAgB,IAARA,EAAY,IAAO,IACnB,IAARA,EAAY,GAAK,GAC3Bvpa,EAAK9wJ,KAAKG,MAAOyzH,GAAKxjF,EAAI91C,EAAI81C,EAAIpxC,MACzB,GAAG40H,IAAIk9B,EAAK,GACV,MAAR6qT,EAA2B,IAAP7qT,EAAW,IAAM,GAAGA,EAAGl9B,GAC9C/1H,EAAIu6jB,EAAKtna,EAAG,EAAIupa,GACL,OAAR1+G,EAAqB99c,EAAEy0F,OAAO,EAAE,GAC5B,IAAMz0F,EAAEy0F,OAAO,EAAEqpX,EAAIn+c,OAAO,KATmB46jB,EAAKhohB,EAAI91C,EAAGqhd,EAAIn+c;AAUvE,KAAK,GACL,OAAOm+c,GACN,IAAK,MAAO,IAAK,OAAQ3lN,EAAY,GAAN5lN,EAAI4nC,EAAK5nC,EAAIyuC;AAAG;AAC/C,IAAK,MAAO,IAAK,OAAQm3K,EAAuB,IAAV,GAAN5lN,EAAI4nC,EAAK5nC,EAAIyuC,GAAMzuC,EAAIyqC;AAAG;AAC1D,IAAK,MAAO,IAAK,OAAQm7K,EAAkC,IAAV,IAAV,GAAN5lN,EAAI4nC,EAAK5nC,EAAIyuC,GAAMzuC,EAAIyqC,GAAM76E,KAAKG,MAAMiwC,EAAI91C,EAAE81C,EAAIpxC;AAAI;AACvF,QAAS,KAAM,uBAAyB28c,EACvC2+G,EAAsB,IAAf3+G,EAAIn+c,OAAe,EAAI;AAAG;AACnC,KAAK,IACJw4P,EAAMvnP,EAAG6rjB,EAAO,EAGlB,OADaA,EAAO,EAAIlC,EAAKpiU,EAAKskU,GAAQ,EAE3C,CAKA,SAASC,GAAS96jB,GAEjB,GAAGA,EAAEjC,QADG,EACU,OAAOiC;AAEzB,IADA,IAAImjF,EAAKnjF,EAAEjC,OAFH,EAEgBK,EAAI4B,EAAE6yF,OAAO,EAAE1P,GACjCA,GAAGnjF,EAAEjC,OAAQolF,GAHX,EAGiB/kF,IAAIA,EAAEL,OAAS,EAAI,IAAM,IAAMiC,EAAE6yF,OAAO1P,EAHzD;AAIR,OAAO/kF,CACR,CACA,IAAI28jB,GAAO;AAYX,SAASC,GAAc9+G,EAAgBvra,GACtC,IAAIvyC,EACA6tN,EAAMiwP,EAAI70c,QAAQ,KAAO60c,EAAI70c,QAAQ,KAAO;AAChD,GAAG60c,EAAI7hb,MAAM,eAAgB,CAC5B,GAAU,GAAPsW,EAAU,MAAO;AACf,GAAGA,EAAM,EAAG,MAAO,IAAMqqhB,GAAc9+G,GAAMvra;AAClD,IAAI6qf,EAASt/E,EAAI70c,QAAQ,MAAqB,IAAZm0hB,IAAeA,EAAOt/E,EAAI70c,QAAQ;AACpE,IAAIy5G,EAAKvgH,KAAKE,MAAMF,KAAKm4E,IAAI/nC,GAAKpwC,KAAK+5jB,QAAQ9+B;AAG/C,GAFG16a,EAAK,IAAGA,GAAM06a,IAEM,KADvBp9hB,GAAKuyC,EAAIpwC,KAAKC,IAAI,GAAGsgH,IAAKy5c,YAAYtuW,EAAI,GAAGuvU,EAAO16a,GAAI06a,IACnDn0hB,QAAQ,KAAa,CACzB,IAAI4zjB,EAAQ16jB,KAAKE,MAAMF,KAAKm4E,IAAI/nC,GAAKpwC,KAAK+5jB;AAG1C,KAFuB,IAApBl8jB,EAAEiJ,QAAQ,KAAajJ,EAAIA,EAAEmD,OAAO,GAAK,IAAMnD,EAAEy0F,OAAO,GAAK,MAAQooe,EAAQ78jB,EAAEL,OAAO+iH,GACpF1iH,GAAK,MAAQ68jB,EAAQn6c,GACF,OAAlB1iH,EAAEy0F,OAAO,EAAE,IAEhBz0F,GADAA,EAAIA,EAAEmD,OAAO,GAAKnD,EAAEy0F,OAAO,EAAE2oc,GAAU,IAAMp9hB,EAAEy0F,OAAO,EAAE2oc,IAClDv9gB,QAAQ,aAAa,MAAMA,QAAQ,QAAQ;AAElD7f,EAAIA,EAAE6f,QAAQ,MAAM,IACrB,CACA7f,EAAIA,EAAE6f,QAAQ,2BAA2B,SAASi9iB,EAAG9yB,EAAG4N,EAAGC,GAAM,OAAO7N,EAAK4N,EAAKC,EAAGpjd,OAAO,GAAG2oc,EAAO16a,GAAI06a,GAAU,IAAMya,EAAGpjd,OAAOiuB,GAAM,GAAK,EAChJ,MAAO1iH,EAAIuyC,EAAI6phB,cAAcvuW;AAG7B,OAFGiwP,EAAI7hb,MAAM,WAAaj8B,EAAEi8B,MAAM,cAAaj8B,EAAIA,EAAEy0F,OAAO,EAAEz0F,EAAEL,OAAO,GAAK,IAAMK,EAAEmD,OAAOnD,EAAEL,OAAO,IACjGm+c,EAAI7hb,MAAM,QAAUj8B,EAAEi8B,MAAM,SAAQj8B,EAAIA,EAAE6f,QAAQ,MAAM,MACpD7f,EAAE6f,QAAQ,IAAI,IACtB,CACA,IAAIk9iB,GAAQ,yBASRC,GAAO,iBACPC,GAAa,WACbrxR,GAAQ;AACZ,SAASsxR,GAAM7/hB,GAEd,IADA,IAAYsiQ,EAAR3/R,EAAI,GACAN,EAAI,EAAGA,GAAK29B,EAAI19B,SAAUD,EAAG,OAAQigS,EAAGtiQ,EAAI+T,WAAW1xC,IAC9D,KAAK,GAAI;AACT,KAAK,GAAIM,GAAI;AAAK;AAClB,KAAK,GAAIA,GAAI;AAAK;AAClB,QAASA,GAAI+vC,OAAOiB,aAAa2uP,GAElC,OAAO3/R,CACR,CACA,SAASm9jB,GAAI5qhB,EAAgBxzC,GAA2B,IAAI2qF,EAAKvnF,KAAKC,IAAI,GAAGrD;AAAI,MAAO,GAAIoD,KAAKG,MAAMiwC,EAAMm3C,GAAIA,CAAK,CACtH,SAAS0/a,GAAI72d,EAAgBxzC,GAC5B,IAAIq+jB,EAAQ7qhB,EAAMpwC,KAAKE,MAAMkwC,GAAMm3C,EAAKvnF,KAAKC,IAAI,GAAGrD;AACpD,OAAIA,GAAK,GAAKoD,KAAKG,MAAM86jB,EAAQ1ze,IAAK/pF,OAAe,EAC9CwC,KAAKG,MAAM86jB,EAAQ1ze,EAC3B,CAWA,SAAS2ze,GAAcn6jB,EAAiB46c,EAAgBvra,GACvD,GAA0B,KAAvBrvC,EAAKkuC,WAAW,KAAc0sa,EAAI7hb,MAAMghiB,IAAa,CACvD,IAAIK,EAAOx/G,EAAIj+b,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK;AACjE,OAAG0yB,GAAO,EAAU8qhB,GAAc,IAAKC,EAAM/qhB,GACtC,IAAM8qhB,GAAc,IAAKC,GAAO/qhB,GAAO,GAC/C,CACA,GAAsC,KAAnCura,EAAI1sa,WAAW0sa,EAAIn+c,OAAS,GAAW,OA5E3C,SAAsBuD,EAAiB46c,EAAgBvra,GAEtD,IADA,IAAIs7K,EAAMiwP,EAAIn+c,OAAS,EACS,KAA1Bm+c,EAAI1sa,WAAWy8K,EAAI,MAAaA;AACtC,OAAO0vW,GAAUr6jB,EAAM46c,EAAIrpX,OAAO,EAAEo5H,GAAMt7K,EAAMpwC,KAAKC,IAAI,GAAG,GAAG07c,EAAIn+c,OAAOkuN,IAC3E,CAJA,CA4E+D3qN,EAAM46c,EAAKvra;AACzE,IAAyB,IAAtBura,EAAI70c,QAAQ,KAAa,OAlF7B,SAAuB/F,EAAiB46c,EAAgBvra,GACvD,IAAIirhB,EAAO1/G,EAAIj+b,QAAQ88iB,GAAK,IAAKc,EAAM3/G,EAAIn+c,OAAS69jB,EAAK79jB;AACzD,OAAO49jB,GAAUr6jB,EAAMs6jB,EAAMjrhB,EAAMpwC,KAAKC,IAAI,GAAG,EAAEq7jB,IAAQ32J,GAAK,IAAI22J,EACnE,CAHA,CAkFkDv6jB,EAAM46c,EAAKvra;AAC5D,IAAyB,IAAtBura,EAAI70c,QAAQ,KAAa,OAAO2zjB,GAAc9+G,EAAKvra;AACtD,GAAyB,KAAtBura,EAAI1sa,WAAW,GAAW,MAAO,IAAIishB,GAAcn6jB,EAAK46c,EAAIrpX,OAAsB,KAAfqpX,EAAI36c,OAAO,GAAQ,EAAE,GAAGovC;AAC9F,IAAIvyC,EACAC,EAAsBy9jB,EAAIl/gB,EAAIm/gB,EAAOx7jB,KAAKqN,IAAI+iC,GAAM4E,EAAO5E,EAAM,EAAI,IAAM;AAC/E,GAAGura,EAAI7hb,MAAM,SAAU,OAAOkb,EAAOwjhB,EAAMgD,EAAK7/G,EAAIn+c;AACpD,GAAGm+c,EAAI7hb,MAAM,WAEZ,MAD2B,OAA3Bj8B,EAAI26jB,EAAMpohB,EAAI,MAAkBvyC,EAAI,IAC7BA,EAAEL,OAASm+c,EAAIn+c,OAASK,EAAIk9jB,GAAMp/G,EAAIrpX,OAAO,EAAEqpX,EAAIn+c,OAAOK,EAAEL,SAAWK;AAE/E,GAAIC,EAAI69c,EAAI7hb,MAAM8giB,IAAS,OAtD5B,SAAsB98jB,EAAqB09jB,EAAiBxmhB,GAC3D,IAAIymhB,EAAM3vjB,SAAShO,EAAE,GAAG,IAAKyhI,EAAKv/H,KAAKG,MAAMq7jB,EAAOC,GAAM7uS,EAAO5sR,KAAKE,MAAMq/H,EAAGk8b,GAC3EC,EAAOn8b,EAAKqtJ,EAAK6uS,EAAME,EAAMF;AACjC,OAAOzmhB,GAAiB,IAAT43O,EAAa,GAAK,GAAGA,GAAQ,KAAe,IAAR8uS,EAAY/2J,GAAK,IAAK7ma,EAAE,GAAGN,OAAS,EAAIM,EAAE,GAAGN,QAAU66jB,EAAKqD,EAAI59jB,EAAE,GAAGN,QAAUM,EAAE,GAAK,IAAMA,EAAE,GAAKs6jB,EAAKuD,EAAI79jB,EAAE,GAAGN,QACrK,CAJA,CAsDgDM,EAAG09jB,EAAMxmhB;AACxD,GAAG2ma,EAAI7hb,MAAM,UAAW,OAAOkb,EAAOwjhB,EAAMgD,EAAK7/G,EAAIn+c,OAASm+c,EAAI70c,QAAQ;AAC1E,GAAIhJ,EAAI69c,EAAI7hb,MAAM+giB,IAEjB,OADAh9jB,EAAIm9jB,GAAI5qhB,EAAKtyC,EAAE,GAAGN,QAAQkgB,QAAQ,aAAa,MAAMq9iB,GAAMj9jB,EAAE,KAAK4f,QAAQ,MAAM,IAAIq9iB,GAAMj9jB,EAAE,KAAK4f,QAAQ,WAAW,SAASi9iB,EAAI9yB,GAAM,MAAO,IAAMA,EAAKljI,GAAK,IAAKo2J,GAAaj9jB,EAAe,IAAIN,OAAOqqiB,EAAGrqiB,OAAS,IACxL,IAAvBm+c,EAAI70c,QAAQ,MAAejJ,EAAIA,EAAE6f,QAAQ,OAAO;AAGxD,GADAi+b,EAAMA,EAAIj+b,QAAQ,YAAa,MAC3B5f,EAAI69c,EAAI7hb,MAAM,gBACjB,OAAOkb,EAAOgmhB,GAAIQ,EAAM19jB,EAAE,GAAGN,QAAQkgB,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAO5f,EAAE,GAAGN,OAAO,KAAK;AAElI,GAAIM,EAAI69c,EAAI7hb,MAAM,qBAAuB,OAAOkb,EAAOulhB,GAAS/B,EAAMgD,EAAK;AAC3E,GAAI19jB,EAAI69c,EAAI7hb,MAAM,qBACjB,OAAOsW,EAAM,EAAI,IAAM8qhB,GAAcn6jB,EAAM46c,GAAMvra,GAAOmqhB,GAAS,IAAIv6jB,KAAKE,MAAMkwC,GAvClF,SAAeA,EAAgBxzC,GAC9B,OAAIA,GAAK,GAAKoD,KAAKG,OAAOiwC,EAAIpwC,KAAKE,MAAMkwC,IAAMpwC,KAAKC,IAAI,GAAGrD,KAAKY,OACxD,EAED,CACR,CALA,CAuC+F4yC,EAAKtyC,EAAE,GAAGN,UAAY,IAAM46jB,EAAKnxD,GAAI72d,EAAKtyC,EAAE,GAAGN,QAAQM,EAAE,GAAGN;AAE1J,GAAIM,EAAI69c,EAAI7hb,MAAM,YAAc,OAAOohiB,GAAcn6jB,EAAK46c,EAAIj+b,QAAQ,SAAS,IAAI0yB;AACnF,GAAItyC,EAAI69c,EAAI7hb,MAAM,2BAGjB,OAFAj8B,EAAIs6jB,EAAQ+C,GAAcn6jB,EAAM46c,EAAIj+b,QAAQ,SAAS,IAAK0yB,IAC1DmrhB,EAAK,EACEpD,EAAQA,EAAQx8G,EAAIj+b,QAAQ,MAAM,KAAKA,QAAQ,QAAQ,SAASzZ,GAAG,OAAOs3jB,EAAG19jB,EAAEL,OAAOK,EAAEmD,OAAOu6jB,KAAU,MAAJt3jB,EAAQ,IAAI,EAAG;AAE5H,GAAG03c,EAAI7hb,MAAM2vQ,IAEZ,MAAO,KADP5rS,EAAIq9jB,GAAcn6jB,EAAM,aAAcqvC,IACvBkiD,OAAO,EAAE,GAAK,KAAOz0F,EAAEy0F,OAAO,EAAG,GAAK,IAAMz0F,EAAEy0F,OAAO;AAErE,IAAIgnC,EAAK;AACT,GAAIx7H,EAAI69c,EAAI7hb,MAAM,+BAUjB,OATAyhiB,EAAKv7jB,KAAK8b,IAAiBhe,EAAE,GAAUN,OAAO,GAC9C6+C,EAAKw8gB,EAAS2C,EAAMx7jB,KAAKC,IAAI,GAAGs7jB,GAAI,MACpC19jB,EAAI,GAAKm3C,EAEoB,MAD7BskF,EAAK8hc,GAAU,IAAkBt9jB,EAAE,GAAWu+C,EAAG,KAC3Cr7C,OAAOs4H,EAAG97H,OAAO,KAAW87H,EAAKA,EAAGhnC,OAAO,EAAEgnC,EAAG97H,OAAO,GAAK,KAClEK,GAAKy7H,EAAkBx7H,EAAE,GAAY,IAAmBA,EAAE,IAC1Dw7H,EAAKg/b,EAAMj8gB,EAAG,GAAGk/gB,IACX/9jB,OAASM,EAAE,GAAGN,SAAQ87H,EAAKyhc,GAAMj9jB,EAAE,GAAGw0F,OAAOx0F,EAAE,GAAGN,OAAO87H,EAAG97H,SAAW87H,GAC7Ez7H,GAAKy7H;AAGN,GAAIx7H,EAAI69c,EAAI7hb,MAAM,iCAGjB,OAFAyhiB,EAAKv7jB,KAAK8b,IAAI9b,KAAK+b,IAAIje,EAAE,GAAGN,OAAQM,EAAE,GAAGN,QAAQ,GAE1Cw3C,IADPqH,EAAKw8gB,EAAS2C,EAAMx7jB,KAAKC,IAAI,GAAGs7jB,GAAI,OAClB,KAAKl/gB,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAKg8gB,EAAKh8gB,EAAG,GAAGk/gB,GAAMz9jB,EAAE,GAAK,IAAMA,EAAE,GAAKw6jB,EAAMj8gB,EAAG,GAAGk/gB,GAAK52J,GAAK,IAAK,EAAE42J,EAAG,EAAIz9jB,EAAE,GAAGN,OAASM,EAAE,GAAGN;AAExJ,GAAIM,EAAI69c,EAAI7hb,MAAM,YAEjB,OADAj8B,EAAI26jB,EAAMpohB,EAAK,GACZura,EAAIn+c,QAAUK,EAAEL,OAAeK,EAC3Bk9jB,GAAMp/G,EAAIrpX,OAAO,EAAEqpX,EAAIn+c,OAAOK,EAAEL,SAAWK;AAEnD,GAAIC,EAAI69c,EAAI7hb,MAAM,uBAAyB,CAC1Cj8B,EAAI,GAAKuyC,EAAItwC,QAAQE,KAAK8b,IAAIhe,EAAE,GAAGN,OAAO,KAAKkgB,QAAQ,YAAY,MACnE69iB,EAAK19jB,EAAEiJ,QAAQ;AACf,IAAI80jB,EAAOjgH,EAAI70c,QAAQ,KAAOy0jB,EAAIM,EAAOlgH,EAAIn+c,OAASK,EAAEL,OAASo+jB;AACjE,OAAOb,GAAMp/G,EAAIrpX,OAAO,EAAEspe,GAAQ/9jB,EAAI89c,EAAIrpX,OAAOqpX,EAAIn+c,OAAOq+jB,GAC7D,CACA,GAAI/9jB,EAAI69c,EAAI7hb,MAAM,sBAEjB,OADAyhiB,EAAKt0D,GAAI72d,EAAKtyC,EAAE,GAAGN,QACZ4yC,EAAM,EAAI,IAAM8qhB,GAAcn6jB,EAAM46c,GAAMvra,GAAOmqhB,GA5E1D,SAAanqhB,GACZ,OAAGA,EAAM,YAAcA,GAAO,WAAmB,IAAIA,GAAO,EAAS,EAAJA,EAAUA,EAAI,EAAE,GAC1E,GAAGpwC,KAAKE,MAAMkwC,EACtB,CAHA,CA4EuEA,IAAM1yB,QAAQ,aAAa,OAAOA,QAAQ,QAAQ,SAASi9iB,GAAM,MAAO,OAASA,EAAGn9jB,OAAS,EAAI46jB,EAAK,EAAE,EAAEuC,EAAGn9jB,QAAU,IAAMm9jB,CAAI,GAAK,IAAMvC,EAAKmD,EAAGz9jB,EAAE,GAAGN;AAE/N,OAAOm+c,GACN,IAAK,aAAc,OAAOu/G,GAAcn6jB,EAAM,WAAYqvC;AAC1D,IAAK,UACL,IAAK,SACL,IAAK,QAAS,IAAInsC,EAAIs2jB,GAAS/B,EAAMgD,EAAK;AAAK,MAAa,MAANv3jB,EAAY+wC,EAAO/wC,EAAI;AAC7E,IAAK,aAAc,OAAOi3jB,GAAcn6jB,EAAM,aAAaqvC,GAAK1yB,QAAQ,OAAO;AAC/E,IAAK,WAAY,OAAOw9iB,GAAcn6jB,EAAM,WAAWqvC,GAAK1yB,QAAQ,OAAO,KAG5E,MAAM,IAAI/f,MAAM,uBAAyBg+c,EAAM,IAChD,CAUA,SAASmgH,GAAengH,EAAgBvra,GACvC,IAAIvyC,EACA6tN,EAAMiwP,EAAI70c,QAAQ,KAAO60c,EAAI70c,QAAQ,KAAO;AAChD,GAAG60c,EAAI7hb,MAAM,eAAgB,CAC5B,GAAU,GAAPsW,EAAU,MAAO;AACf,GAAGA,EAAM,EAAG,MAAO,IAAM0rhB,GAAengH,GAAMvra;AACnD,IAAI6qf,EAASt/E,EAAI70c,QAAQ,MAAqB,IAAZm0hB,IAAeA,EAAOt/E,EAAI70c,QAAQ;AACpE,IAAIy5G,EAAKvgH,KAAKE,MAAMF,KAAKm4E,IAAI/nC,GAAKpwC,KAAK+5jB,QAAQ9+B;AAG/C,GAFG16a,EAAK,IAAGA,GAAM06a,KACjBp9hB,GAAKuyC,EAAIpwC,KAAKC,IAAI,GAAGsgH,IAAKy5c,YAAYtuW,EAAI,GAAGuvU,EAAO16a,GAAI06a,IAClDnhgB,MAAM,QAAS,CACpB,IAAI4giB,EAAQ16jB,KAAKE,MAAMF,KAAKm4E,IAAI/nC,GAAKpwC,KAAK+5jB,SACnB,IAApBl8jB,EAAEiJ,QAAQ,KAAajJ,EAAIA,EAAEmD,OAAO,GAAK,IAAMnD,EAAEy0F,OAAO,GAAK,MAAQooe,EAAQ78jB,EAAEL,OAAO+iH,GACpF1iH,GAAK,MAAQ68jB,EAAQn6c,GAC1B1iH,EAAIA,EAAE6f,QAAQ,MAAM,IACrB,CACA7f,EAAIA,EAAE6f,QAAQ,2BAA2B,SAASi9iB,EAAG9yB,EAAG4N,EAAGC,GAAM,OAAO7N,EAAK4N,EAAKC,EAAGpjd,OAAO,GAAG2oc,EAAO16a,GAAI06a,GAAU,IAAMya,EAAGpjd,OAAOiuB,GAAM,GAAK,EAChJ,MAAO1iH,EAAIuyC,EAAI6phB,cAAcvuW;AAG7B,OAFGiwP,EAAI7hb,MAAM,WAAaj8B,EAAEi8B,MAAM,cAAaj8B,EAAIA,EAAEy0F,OAAO,EAAEz0F,EAAEL,OAAO,GAAK,IAAMK,EAAEmD,OAAOnD,EAAEL,OAAO,IACjGm+c,EAAI7hb,MAAM,QAAUj8B,EAAEi8B,MAAM,SAAQj8B,EAAIA,EAAE6f,QAAQ,MAAM,MACpD7f,EAAE6f,QAAQ,IAAI,IACtB,CACA,SAASq+iB,GAAch7jB,EAAiB46c,EAAgBvra,GACvD,GAA0B,KAAvBrvC,EAAKkuC,WAAW,KAAc0sa,EAAI7hb,MAAMghiB,IAAa,CACvD,IAAIK,EAAOx/G,EAAIj+b,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK;AACjE,OAAG0yB,GAAO,EAAU2rhB,GAAc,IAAKZ,EAAM/qhB,GACtC,IAAM2rhB,GAAc,IAAKZ,GAAO/qhB,GAAO,GAC/C,CACA,GAAsC,KAAnCura,EAAI1sa,WAAW0sa,EAAIn+c,OAAS,GAAW,OArC3C,SAAuBuD,EAAiB46c,EAAgBvra,GAEvD,IADA,IAAIs7K,EAAMiwP,EAAIn+c,OAAS,EACS,KAA1Bm+c,EAAI1sa,WAAWy8K,EAAI,MAAaA;AACtC,OAAO0vW,GAAUr6jB,EAAM46c,EAAIrpX,OAAO,EAAEo5H,GAAMt7K,EAAMpwC,KAAKC,IAAI,GAAG,GAAG07c,EAAIn+c,OAAOkuN,IAC3E,CAJA,CAqCgE3qN,EAAM46c,EAAKvra;AAC1E,IAAyB,IAAtBura,EAAI70c,QAAQ,KAAa,OAjC7B,SAAwB/F,EAAiB46c,EAAgBvra,GACxD,IAAIirhB,EAAO1/G,EAAIj+b,QAAQ88iB,GAAK,IAAKc,EAAM3/G,EAAIn+c,OAAS69jB,EAAK79jB;AACzD,OAAO49jB,GAAUr6jB,EAAMs6jB,EAAMjrhB,EAAMpwC,KAAKC,IAAI,GAAG,EAAEq7jB,IAAQ32J,GAAK,IAAI22J,EACnE,CAHA,CAiCmDv6jB,EAAM46c,EAAKvra;AAC7D,IAAyB,IAAtBura,EAAI70c,QAAQ,KAAa,OAAOg1jB,GAAengH,EAAKvra;AACvD,GAAyB,KAAtBura,EAAI1sa,WAAW,GAAW,MAAO,IAAI8shB,GAAch7jB,EAAK46c,EAAIrpX,OAAsB,KAAfqpX,EAAI36c,OAAO,GAAQ,EAAE,GAAGovC;AAC9F,IAAIvyC,EACAC,EAAsBy9jB,EAAIl/gB,EAAIm/gB,EAAOx7jB,KAAKqN,IAAI+iC,GAAM4E,EAAO5E,EAAM,EAAI,IAAM;AAC/E,GAAGura,EAAI7hb,MAAM,SAAU,OAAOkb,EAAOojhB,EAAKoD,EAAK7/G,EAAIn+c;AACnD,GAAGm+c,EAAI7hb,MAAM,WAEZ,OADAj8B,EAAK,GAAGuyC,EAAiB,IAARA,IAAWvyC,EAAI,IACzBA,EAAEL,OAASm+c,EAAIn+c,OAASK,EAAIk9jB,GAAMp/G,EAAIrpX,OAAO,EAAEqpX,EAAIn+c,OAAOK,EAAEL,SAAWK;AAE/E,GAAIC,EAAI69c,EAAI7hb,MAAM8giB,IAAS,OArK5B,SAAsB98jB,EAAqB09jB,EAAiBxmhB,GAC3D,OAAOA,GAAiB,IAATwmhB,EAAa,GAAK,GAAGA,GAAQ72J,GAAK,IAAK7ma,EAAE,GAAGN,OAAS,EAAIM,EAAE,GAAGN,OAC9E,CAFA,CAqKgDM,EAAG09jB,EAAMxmhB;AACxD,GAAG2ma,EAAI7hb,MAAM,UAAW,OAAOkb,EAAOojhB,EAAKoD,EAAK7/G,EAAIn+c,OAASm+c,EAAI70c,QAAQ;AACzE,GAAIhJ,EAAI69c,EAAI7hb,MAAM+giB,IAMjB,OAHAh9jB,GADAA,GAAK,GAAGuyC,GAAK1yB,QAAQ,aAAa,MAAMq9iB,GAAMj9jB,EAAE,KAAK4f,QAAQ,MAAM,IAAIq9iB,GAAMj9jB,EAAE,MACzE4f,QAAQ,WAAW,SAASi9iB,EAAI9yB,GAErC,MAAO,IAAMA,EAAKljI,GAAK,IAAKo2J,GAAMj9jB,EAAE,IAAIN,OAAOqqiB,EAAGrqiB,OAAS,IAC9B,IAAvBm+c,EAAI70c,QAAQ,MAAejJ,EAAIA,EAAE6f,QAAQ,OAAO;AAGxD,GADAi+b,EAAMA,EAAIj+b,QAAQ,YAAa,MAC3B5f,EAAI69c,EAAI7hb,MAAM,gBACjB,OAAOkb,GAAQ,GAAGwmhB,GAAM99iB,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAO5f,EAAE,GAAGN,OAAO,KAAK;AAErH,GAAIM,EAAI69c,EAAI7hb,MAAM,qBAAuB,OAAOkb,EAAOulhB,GAAU,GAAGiB;AACpE,GAAI19jB,EAAI69c,EAAI7hb,MAAM,qBACjB,OAAOsW,EAAM,EAAI,IAAM2rhB,GAAch7jB,EAAM46c,GAAMvra,GAAOmqhB,GAAU,GAAGnqhB,GAAQ,IAAMu0X,GAAK,IAAI7ma,EAAE,GAAGN;AAElG,GAAIM,EAAI69c,EAAI7hb,MAAM,YAAc,OAAOiiiB,GAAch7jB,EAAK46c,EAAIj+b,QAAQ,SAAS,IAAI0yB;AACnF,GAAItyC,EAAI69c,EAAI7hb,MAAM,2BAGjB,OAFAj8B,EAAIs6jB,EAAQ4D,GAAch7jB,EAAM46c,EAAIj+b,QAAQ,SAAS,IAAK0yB,IAC1DmrhB,EAAK,EACEpD,EAAQA,EAAQx8G,EAAIj+b,QAAQ,MAAM,KAAKA,QAAQ,QAAQ,SAASzZ,GAAG,OAAOs3jB,EAAG19jB,EAAEL,OAAOK,EAAEmD,OAAOu6jB,KAAU,MAAJt3jB,EAAQ,IAAI,EAAG;AAE5H,GAAG03c,EAAI7hb,MAAM2vQ,IAEZ,MAAO,KADP5rS,EAAIk+jB,GAAch7jB,EAAM,aAAcqvC,IACvBkiD,OAAO,EAAE,GAAK,KAAOz0F,EAAEy0F,OAAO,EAAG,GAAK,IAAMz0F,EAAEy0F,OAAO;AAErE,IAAIgnC,EAAK;AACT,GAAIx7H,EAAI69c,EAAI7hb,MAAM,+BAUjB,OATAyhiB,EAAKv7jB,KAAK8b,IAAiBhe,EAAE,GAAUN,OAAO,GAC9C6+C,EAAKw8gB,EAAS2C,EAAMx7jB,KAAKC,IAAI,GAAGs7jB,GAAI,MACpC19jB,EAAI,GAAKm3C,EAEoB,MAD7BskF,EAAK8hc,GAAU,IAAkBt9jB,EAAE,GAAWu+C,EAAG,KAC3Cr7C,OAAOs4H,EAAG97H,OAAO,KAAW87H,EAAKA,EAAGhnC,OAAO,EAAEgnC,EAAG97H,OAAO,GAAK,KAClEK,GAAKy7H,EAAkBx7H,EAAE,GAAY,IAAmBA,EAAE,IAC1Dw7H,EAAKg/b,EAAMj8gB,EAAG,GAAGk/gB,IACX/9jB,OAASM,EAAE,GAAGN,SAAQ87H,EAAKyhc,GAAMj9jB,EAAE,GAAGw0F,OAAOx0F,EAAE,GAAGN,OAAO87H,EAAG97H,SAAW87H,GAC7Ez7H,GAAKy7H;AAGN,GAAIx7H,EAAI69c,EAAI7hb,MAAM,iCAGjB,OAFAyhiB,EAAKv7jB,KAAK8b,IAAI9b,KAAK+b,IAAIje,EAAE,GAAGN,OAAQM,EAAE,GAAGN,QAAQ,GAE1Cw3C,IADPqH,EAAKw8gB,EAAS2C,EAAMx7jB,KAAKC,IAAI,GAAGs7jB,GAAI,OAClB,KAAKl/gB,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAKg8gB,EAAKh8gB,EAAG,GAAGk/gB,GAAMz9jB,EAAE,GAAK,IAAMA,EAAE,GAAKw6jB,EAAMj8gB,EAAG,GAAGk/gB,GAAK52J,GAAK,IAAK,EAAE42J,EAAG,EAAIz9jB,EAAE,GAAGN,OAASM,EAAE,GAAGN;AAExJ,GAAIM,EAAI69c,EAAI7hb,MAAM,YAEjB,OADAj8B,EAAI,GAAKuyC,EACNura,EAAIn+c,QAAUK,EAAEL,OAAeK,EAC3Bk9jB,GAAMp/G,EAAIrpX,OAAO,EAAEqpX,EAAIn+c,OAAOK,EAAEL,SAAWK;AAEnD,GAAIC,EAAI69c,EAAI7hb,MAAM,sBAAwB,CACzCj8B,EAAI,GAAKuyC,EAAItwC,QAAQE,KAAK8b,IAAIhe,EAAE,GAAGN,OAAO,KAAKkgB,QAAQ,YAAY,MACnE69iB,EAAK19jB,EAAEiJ,QAAQ;AACf,IAAI80jB,EAAOjgH,EAAI70c,QAAQ,KAAOy0jB,EAAIM,EAAOlgH,EAAIn+c,OAASK,EAAEL,OAASo+jB;AACjE,OAAOb,GAAMp/G,EAAIrpX,OAAO,EAAEspe,GAAQ/9jB,EAAI89c,EAAIrpX,OAAOqpX,EAAIn+c,OAAOq+jB,GAC7D,CACA,GAAI/9jB,EAAI69c,EAAI7hb,MAAM,sBACjB,OAAOsW,EAAM,EAAI,IAAM2rhB,GAAch7jB,EAAM46c,GAAMvra,GAAOmqhB,GAAS,GAAGnqhB,GAAK1yB,QAAQ,aAAa,OAAOA,QAAQ,QAAQ,SAASi9iB,GAAM,MAAO,OAASA,EAAGn9jB,OAAS,EAAI46jB,EAAK,EAAE,EAAEuC,EAAGn9jB,QAAU,IAAMm9jB,CAAI,GAAK,IAAMvC,EAAK,EAAEt6jB,EAAE,GAAGN;AAE5N,OAAOm+c,GACN,IAAK,UACL,IAAK,SACL,IAAK,QAAS,IAAI13c,EAAIs2jB,GAAS,GAAGiB;AAAO,MAAa,MAANv3jB,EAAY+wC,EAAO/wC,EAAI;AACvE,QACC,GAAG03c,EAAI7hb,MAAM,aAAc,OAAOiiiB,GAAch7jB,EAAM46c,EAAIt+c,MAAM,EAAEs+c,EAAInka,YAAY,MAAOpH,GAAO2qhB,GAAMp/G,EAAIt+c,MAAMs+c,EAAInka,YAAY,OAElI,MAAM,IAAI75C,MAAM,uBAAyBg+c,EAAM,IAChD,CACA,SAASy/G,GAAUr6jB,EAAiB46c,EAAgBvra,GACnD,OAAY,EAAJA,KAAWA,EAAM2rhB,GAAch7jB,EAAM46c,EAAKvra,GAAO8qhB,GAAcn6jB,EAAM46c,EAAKvra,EACnF,CAkBA,IAAI4rhB,GAAc;AAClB,SAASC,GAAYtgH,GAEpB,IADA,IAAIp+c,EAAI,EAAe6D,EAAI,GAAIvD,EAAI,GAC7BN,EAAIo+c,EAAIn+c,QACb,OAAQ4D,EAAIu6c,EAAI36c,OAAOzD,IACtB,IAAK,IAAQk7jB,EAAc98G,EAAKp+c,KAAIA,GAAI,GAAGA;AAAK;AAChD,IAAK,IAAK,KAAsC,KAAzBo+c,EAAI1sa,aAAa1xC,IAAcA,EAAIo+c,EAAIn+c,WAAsBD;AAAG;AACvF,IAAK,KACL,IAAK,IAAKA,GAAG;AAAG;AAChB,IAAK,MAAOA;AAAG;AACf,IAAK,IAAK,IAAK,IACd,GAAuB,MAApBo+c,EAAI36c,OAAOzD,EAAE,IAAkC,MAApBo+c,EAAI36c,OAAOzD,EAAE,GAAY;AAExD,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAEvD,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK;AACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,GAAsC,QAAnCo+c,EAAIrpX,OAAO/0F,EAAG,GAAG0D,cAAyB;AAC7C,GAAsC,UAAnC06c,EAAIrpX,OAAO/0F,EAAG,GAAG0D,cAA2B;AAC/C,GAAsC,UAAnC06c,EAAIrpX,OAAO/0F,EAAG,GAAG0D,cAA2B,WAC7C1D;AAAG;AACN,IAAK,IAEJ,IADAM,EAAIuD,EACsB,MAApBu6c,EAAI36c,OAAOzD,MAAgBA,EAAIo+c,EAAIn+c,QAAQK,GAAK89c,EAAI36c,OAAOzD;AACjE,GAAGM,EAAEi8B,MAAMkiiB,IAAc;AACzB;AACD,IAAK,IAEL,IAAK,IAAK,IAAK,IACd,KAAMz+jB,EAAIo+c,EAAIn+c,SAAW,YAAYsJ,QAAQ1F,EAAEu6c,EAAI36c,SAASzD,KAAO,GAAS,MAAH6D,GAA8B,KAAnBu6c,EAAI36c,OAAOzD,EAAE,IAAa,KAAKuJ,QAAQ60c,EAAI36c,OAAOzD,EAAE,KAAK,KAC7I;AACD,IAAK,IAAK,KAAMo+c,EAAI36c,SAASzD,KAAO6D,IAAgB;AACpD,IAAK,MAAO7D,EAAuB,KAAjBo+c,EAAI36c,OAAOzD,IAA8B,KAAjBo+c,EAAI36c,OAAOzD,MAAaA;AAAG;AACrE,IAAK,IAAK,IAAK,MAAOA;AAAG;AACzB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpF,KAAMA,EAAIo+c,EAAIn+c,QAAU,aAAasJ,QAAQ60c,EAAI36c,SAASzD,KAAO,IAAgB;AAElF,UAAWA,EAGb,QACD,CAkNA,IAAI2+jB,GAAW;AACf,SAASC,GAAQ5tjB,EAAGgxH,GACnB,GAAS,MAANA,EAAY;AACf,IAAI68b,EAASh3iB,WAAWm6G,EAAG;AAC3B,OAAOA,EAAG,IACT,IAAK,IAAM,GAAGhxH,GAAK6tjB,EAAQ;AAAa;AACxC,IAAK,IAAM,GAAG7tjB,EAAK6tjB,EAAQ;AAAa;AACxC,IAAK,IAAM,GAAG7tjB,EAAK6tjB,EAAQ;AAAa;AACxC,IAAK,KAAM,GAAG7tjB,GAAK6tjB,EAAQ;AAAa;AACxC,IAAK,KAAM,GAAG7tjB,GAAK6tjB,EAAQ;AAAa;AACxC,IAAK,KAAM,GAAG7tjB,GAAK6tjB,EAAQ,SAE5B,QACD,CAsBA,SAASjC,GAAWx+G,EAAsBptc,EAAU1Q,GAC3C,MAALA,IAAWA,EAAI,CAAC;AACnB,IAAIw9jB,EAAO;AACX,cAAc1/G,GACb,IAAK,SAC4B0/G,EAAtB,UAAP1/G,GAAmB99c,EAAEw+jB,OAAex+jB,EAAEw+jB,OAC7B1gH;AACZ;AACD,IAAK,SAGO,OAFe0/G,EAAhB,IAAP1/G,GAAa99c,EAAEw+jB,OAAex+jB,EAAEw+jB,QACX,MAAXx+jB,EAAE8yZ,MAAiB9yZ,EAAE8yZ,MAAiB+nK,GAAW/8G,MAC7C0/G,EAAQx9jB,EAAE8yZ,OAAS9yZ,EAAE8yZ,MAAMgoK,EAAgBh9G,KAAU+8G,EAAUC,EAAgBh9G,KACrF,MAAR0/G,IAAcA,EAAOzC,EAAgBj9G,IAAQ,WAGlD,GAAG88G,EAAc4C,EAAK,GAAI,OAAOnB,EAAY3rjB,EAAG1Q;AAC7C0Q,aAAaqoC,OAAMroC,EAAIorjB,EAAcprjB,EAAG1Q,EAAE07jB;AAC7C,IAAIpwjB,EAtCL,SAAoBA,EAAcoF,GACjC,IAAIotc,EA3RL,SAAuBA,GAGtB,IAFA,IAAI3lN,EAAwB,GACxBu3R,KACIhwhB,EAAI,EAAGqlF,EAAI,EAAGrlF,EAAIo+c,EAAIn+c,SAAUD,EAAG,OAAeo+c,EAAI1sa,WAAW1xC,IACxE,KAAK,GACJgwhB,GAAUA;AAAQ;AACnB,KAAK,GAAI,KAAK,GAAI,KAAK,KACpBhwhB;AAAG;AACN,KAAK,GACJy4P,EAAIA,EAAIx4P,QAAUm+c,EAAIrpX,OAAO1P,EAAErlF,EAAEqlF,GACjCA,EAAIrlF,EAAE,EAGR,GADAy4P,EAAIA,EAAIx4P,QAAUm+c,EAAIrpX,OAAO1P,QAC1B2qc,EAAiB,MAAM,IAAI5vhB,MAAM,WAAag+c,EAAM;AACvD,OAAO3lN,CACR,CAfA,CA2RyB7sP,GACpBnP,EAAI2hd,EAAIn+c,OAAQ2P,EAAMwuc,EAAI3hd,EAAE,GAAG8M,QAAQ;AAE3C,GADG9M,EAAE,GAAKmT,GAAK,KAAKnT,EACjB2hd,EAAIn+c,OAAS,EAAG,MAAM,IAAIG,MAAM,iCAAmCg+c,EAAI5mc,KAAK,KAAO;AACtF,GAAgB,iBAANxG,EAAgB,MAAO,CAAC,EAAkB,IAAfotc,EAAIn+c,QAAgB2P,GAAK,EAAEwuc,EAAIA,EAAIn+c,OAAO,GAAG;AAClF,OAAOm+c,EAAIn+c,QACV,KAAK,EAAGm+c,EAAMxuc,GAAK,EAAI,CAAC,UAAW,UAAW,UAAWwuc,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI;AAAM;AAClG,KAAK,EAAGA,EAAMxuc,GAAK,EAAI,CAACwuc,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI;AAAM;AACzF,KAAK,EAAGA,EAAMxuc,GAAK,EAAI,CAACwuc,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAGpF,IAAIt/Z,EAAK9tC,EAAI,EAAIotc,EAAI,GAAKptc,EAAI,EAAIotc,EAAI,GAAKA,EAAI;AAC/C,IAA4B,IAAzBA,EAAI,GAAG70c,QAAQ,OAAwC,IAAzB60c,EAAI,GAAG70c,QAAQ,KAAa,MAAO,CAAC9M,EAAGqiD;AACxE,GAA8B,MAA3Bs/Z,EAAI,GAAG7hb,MAAM,YAAiD,MAA3B6hb,EAAI,GAAG7hb,MAAM,WAAoB,CACtE,IAAIu9S,EAAKskI,EAAI,GAAG7hb,MAAMoiiB,IAClBI,EAAK3gH,EAAI,GAAG7hb,MAAMoiiB;AACtB,OAAOC,GAAQ5tjB,EAAG8oU,GAAM,CAACr9U,EAAG2hd,EAAI,IAAMwgH,GAAQ5tjB,EAAG+tjB,GAAM,CAACtikB,EAAG2hd,EAAI,IAAM,CAAC3hd,EAAG2hd,EAAU,MAANtkI,GAAoB,MAANilP,EAAa,EAAI,GAC7G,CACA,MAAO,CAACtikB,EAAGqiD,EACZ,CApBA,CAsCoBg/gB,EAAM9sjB;AACzB,GAAGkqjB,EAActvjB,EAAE,IAAK,OAAO+wjB,EAAY3rjB,EAAG1Q;AAC9C,QAAG0Q,EAAYA,EAAI;KAAa,QAAGA,EAAaA,EAAI;KAC/C,GAAS,KAANA,GAAiB,MAALA,EAAW,MAAO;AACtC,OAxQD,SAAkBotc,EAAgBptc,EAAW2nC,EAAc22a,GAI1D,IAHA,IAA8Cvqa,EAAIsgC,EAAG46M,EAAjDxnC,EAAM,GAAIn4P,EAAI,GAAIN,EAAI,EAAG6D,EAAI,GAAIm7jB,EAAI,IACrCjhhB,EAAG,IAED/9C,EAAIo+c,EAAIn+c,QACb,OAAQ4D,EAAIu6c,EAAI36c,OAAOzD,IACtB,IAAK,IACJ,IAAIk7jB,EAAc98G,EAAKp+c,GAAI,MAAM,IAAII,MAAM,0BAA4ByD,EAAI,OAAQu6c;AACnF3lN,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE,WAAYhR,GAAG;AAAG;AAC/C,IAAK,IACJ,IAAIM,EAAE,GAAgC,MAA5B2/R,EAAGm+K,EAAI1sa,aAAa1xC,KAAcA,EAAIo+c,EAAIn+c,QAASK,GAAK+vC,OAAOiB,aAAa2uP;AACtFxnC,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE1Q,KAAMN;AAAG;AACtC,IAAK,KAAM,IAAIuU,EAAI6pc,EAAI36c,SAASzD,GAAIxB,EAAW,MAAN+V,GAAmB,MAANA,EAAaA,EAAI;AACtEkkP,EAAIA,EAAIx4P,QAAU,CAACzB,EAAEA,EAAGwS,EAAEuD,KAAMvU;AAAG;AACpC,IAAK,IAAKy4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE,KAAMhR,GAAG;AAAG;AAClD,IAAK,IACJy4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAEA,KAAMhR;AAAG;AACtC,IAAK,IAAK,IAAK,IACd,GAAuB,MAApBo+c,EAAI36c,OAAOzD,EAAE,IAAkC,MAApBo+c,EAAI36c,OAAOzD,EAAE,GAAY,CACtD,GAAO,MAAJ+kD,GAA6E,OAAjEA,EAAG82gB,EAAoB7qjB,EAAG2nC,EAA0B,MAApByla,EAAI36c,OAAOzD,EAAE,KAA0B,MAAO;AAC7Fy4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAEotc,EAAIrpX,OAAO/0F,EAAE,IAAKg/jB,EAAMn7jB,EAAG7D,GAAG;AAAG,KAC9D,CAED,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtD6D,EAAIA,EAAEkgB;AAEP,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAChE,GAAG/S,EAAI,EAAG,MAAO;AACjB,GAAO,MAAJ+zC,GAAoD,OAAxCA,EAAG82gB,EAAoB7qjB,EAAG2nC,IAAoB,MAAO;AAC7D,IAAPr4C,EAAIuD,IAAW7D,EAAIo+c,EAAIn+c,QAAUm+c,EAAI36c,OAAOzD,GAAG+jB,gBAAkBlgB,GAAGvD,GAAGuD;AAC9D,MAANA,GAAmC,MAAtBm7jB,EAAIj7iB,gBAAuBlgB,EAAI,KACtC,MAANA,IAAWA,EAAIk6C,GAClB06M,EAAIA,EAAIx4P,QAAU,CAACzB,EAAEqF,EAAGmN,EAAE1Q,GAAI0+jB,EAAMn7jB;AAAG;AACxC,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,IAAIq2C,EAAE,CAAC17C,EAAEqF,EAAGmN,EAAEnN;AAMd,GALO,MAAJkhD,IAAUA,EAAG82gB,EAAoB7qjB,EAAG2nC,IACD,QAAnCyla,EAAIrpX,OAAO/0F,EAAG,GAAG0D,eAAkC,MAAJqhD,IAAU7K,EAAElpC,EAAI+zC,EAAGu8B,GAAK,GAAK,IAAM,KAAKpnC,EAAE17C,EAAI,IAAKu/C,EAAG,IAAI/9C,GAAG,GACrE,UAAlCo+c,EAAIrpX,OAAO/0F,EAAE,GAAG0D,eAAoC,MAAJqhD,IAAU7K,EAAElpC,EAAI+zC,EAAGu8B,GAAK,GAAK,KAAO,MAAMpnC,EAAE17C,EAAI,IAAKwB,GAAG,EAAG+9C,EAAG,KAC5E,UAAlCqga,EAAIrpX,OAAO/0F,EAAE,GAAG0D,eAAoC,MAAJqhD,IAAU7K,EAAElpC,EAAI+zC,EAAGu8B,GAAK,GAAK,KAAO,MAAMpnC,EAAE17C,EAAI,IAAKwB,GAAG,EAAG+9C,EAAG,MAC/G7D,EAAE17C,EAAI,MAAOwB,GACb,MAAJ+kD,GAAoB,MAAR7K,EAAE17C,EAAW,MAAO;AACnCi6P,EAAIA,EAAIx4P,QAAUi6C,EAAG8khB,EAAMn7jB;AAAG;AAC/B,IAAK,IAEJ,IADAvD,EAAIuD,EACsB,MAApBu6c,EAAI36c,OAAOzD,MAAgBA,EAAIo+c,EAAIn+c,QAAQK,GAAK89c,EAAI36c,OAAOzD;AACjE,GAAmB,MAAhBM,EAAER,OAAO,GAAY,KAAM,4BAA8BQ,EAAI;AAChE,GAAGA,EAAEi8B,MAAMkiiB,IAAc,CACxB,GAAO,MAAJ15gB,GAAoD,OAAxCA,EAAG82gB,EAAoB7qjB,EAAG2nC,IAAoB,MAAO;AACpE8/M,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE1Q,EAAEyjB,eAC9Bi7iB,EAAM1+jB,EAAEmD,OAAO,EAChB,MAAUnD,EAAEiJ,QAAQ,MAAQ,IAC3BjJ,GAAKA,EAAEi8B,MAAM,kBAAkB,IAAI,IAAI,IACnCmiiB,GAAYtgH,KAAM3lN,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAIwS,EAAE1Q;AAElD;AAED,IAAK,IACJ,GAAS,MAANykD,EAAY,CACP,IAAPzkD,EAAIuD,IAAW7D,EAAIo+c,EAAIn+c,QAAgC,OAArB4D,EAAEu6c,EAAI36c,OAAOzD,KAAaM,GAAKuD;AACjE40P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE1Q;AAAI,KACjC,CAED,IAAK,IAAK,IAAK,IACP,IAAPA,EAAIuD,IAAW7D,EAAIo+c,EAAIn+c,QAAU,YAAYsJ,QAAQ1F,EAAEu6c,EAAI36c,OAAOzD,KAAO,GAAGM,GAAKuD;AACjF40P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE1Q;AAAI;AACjC,IAAK,IACG,IAAPA,EAAIuD,EAASu6c,EAAI36c,SAASzD,KAAO6D,GAAGvD,GAAGuD;AACvC40P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAEqF,EAAGmN,EAAE1Q,GAAI0+jB,EAAMn7jB;AAAG;AACxC,IAAK,MAAO7D,EAAuB,KAAjBo+c,EAAI36c,OAAOzD,IAA8B,KAAjBo+c,EAAI36c,OAAOzD,MAAaA;AAAG;AACrE,IAAK,IAAK,IAAK,IAAKy4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAU,IAAP8wd,EAAS,IAAIzrd,EAAImN,EAAEnN,KAAM7D;AAAG;AACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7E,IAAPM,EAAIuD,EAAS7D,EAAIo+c,EAAIn+c,QAAU,aAAasJ,QAAQ60c,EAAI36c,SAASzD,KAAO,GAAGM,GAAG89c,EAAI36c,OAAOzD;AACzFy4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE1Q;AAAI;AACjC,IAAK,IAAKm4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAEqF,EAAGmN,EAAEnN,KAAM7D;AAAG;AAC7C,IAAK,IAAKy4P,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAE,OAAQhR;AAAG;AACjD,QACC,IAA2D,IAAxD,wCAAwCuJ,QAAQ1F,GAAW,MAAM,IAAIzD,MAAM,0BAA4ByD,EAAI,OAASu6c;AACvH3lN,EAAIA,EAAIx4P,QAAU,CAACzB,EAAE,IAAKwS,EAAEnN,KAAM7D,EAKrC,IAAqBi/jB,EAAjB/nc,EAAK,EAAG4lc,EAAM;AAClB,IAAI98jB,EAAEy4P,EAAIx4P,OAAO,EAAG++jB,EAAI,IAAKh/jB,GAAK,IAAKA,EACtC,OAAOy4P,EAAIz4P,GAAGxB,GACb,IAAK,IAAK,IAAK,IAAKi6P,EAAIz4P,GAAGxB,EAAIu/C,EAAIihhB,EAAI,IAAQ9nc,EAAK,IAAGA,EAAK;AAAG;AAC/D,IAAK,KACA+nc,EAAIxmU,EAAIz4P,GAAGgR,EAAEurB,MAAM,YAAWugiB,EAAIr6jB,KAAK+b,IAAIs+iB,EAAImC,EAAI,GAAGh/jB,OAAO,IAC9Di3H,EAAK,IAAGA,EAAK;AAEjB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK8nc,EAAIvmU,EAAIz4P,GAAGxB;AAAG;AACtD,IAAK,IAAgB,MAARwgkB,IAAevmU,EAAIz4P,GAAGxB,EAAI,IAAQ04H,EAAK,IAAGA,EAAK;AAAK;AACjE,IAAK,IACJ;AACD,IAAK,IACDA,EAAK,GAAKuhI,EAAIz4P,GAAGgR,EAAEurB,MAAM,UAAS26F,EAAK,GACvCA,EAAK,GAAKuhI,EAAIz4P,GAAGgR,EAAEurB,MAAM,UAAS26F,EAAK,GACvCA,EAAK,GAAKuhI,EAAIz4P,GAAGgR,EAAEurB,MAAM,UAAS26F,EAAK,GAI7C,OAAOA,GACN,KAAK,EAAG;AACR,KAAK,EAEDnyE,EAAGtjD,GAAK,KAAOsjD,EAAGtjD,EAAI,IAAKsjD,EAAGhoD,GAC9BgoD,EAAGhoD,GAAM,KAAMgoD,EAAGhoD,EAAI,IAAKgoD,EAAGu4B,GAC9Bv4B,EAAGu4B,GAAM,KAAMv4B,EAAGu4B,EAAI,IAAKv4B,EAAGu8B;AACjC;AACD,KAAK,EAEDv8B,EAAGtjD,GAAK,KAAOsjD,EAAGtjD,EAAI,IAAKsjD,EAAGhoD,GAC9BgoD,EAAGhoD,GAAM,KAAMgoD,EAAGhoD,EAAI,IAAKgoD,EAAGu4B,GAKnC,IAAe4hf,EAAXC,EAAO;AACX,IAAIn/jB,EAAE,EAAGA,EAAIy4P,EAAIx4P,SAAUD,EAC1B,OAAOy4P,EAAIz4P,GAAGxB,GACb,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK;AACxC,IAAK,IAAKi6P,EAAIz4P,GAAGgR,EAAI,GAAIynP,EAAIz4P,GAAGxB,EAAI;AAAK;AACzC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAE9Fi6P,EAAIz4P,GAAGgR,EAAI6rjB,GAAepkU,EAAIz4P,GAAGxB,EAAEkzC,WAAW,GAAI+mN,EAAIz4P,GAAGgR,EAAG+zC,EAAI+3gB,GAChErkU,EAAIz4P,GAAGxB,EAAI;AAAK;AACjB,IAAK,IAAK,IAAK,IAEd,IADA0gkB,EAAKl/jB,EAAE,EACU,MAAXy4P,EAAIymU,KACS,OAAjBr7jB,EAAE40P,EAAIymU,GAAI1gkB,IAAoB,MAANqF,IACjB,MAANA,GAAmB,MAANA,IAA2B,MAAb40P,EAAIymU,EAAG,KAA+B,MAAhBzmU,EAAIymU,EAAG,GAAG1gkB,GAA6B,MAAhBi6P,EAAIymU,EAAG,GAAG1gkB,GAA6B,MAAhBi6P,EAAIymU,EAAG,GAAGlujB,IAC7F,MAAbynP,EAAIz4P,GAAGxB,IAAoB,MAANqF,GAAmB,MAANA,GAAmB,MAANA,IACzC,MAANA,IAA4B,MAAd40P,EAAIymU,GAAIlujB,GAA2B,MAAdynP,EAAIymU,GAAIlujB,GAA0B,MAAbynP,EAAIymU,EAAG,IAA6B,KAAfzmU,EAAIymU,EAAG,GAAG1gkB,KAExFi6P,EAAIz4P,GAAGgR,GAAKynP,EAAIymU,GAAIlujB,EACpBynP,EAAIymU,GAAM,CAAClujB,EAAE,GAAIxS,EAAE,OAAQ0gkB;AAE5BC,GAAQ1mU,EAAIz4P,GAAGgR,EACfhR,EAAIk/jB,EAAG;AAAG;AACX,IAAK,IAAKzmU,EAAIz4P,GAAGxB,EAAI,IAAKi6P,EAAIz4P,GAAGgR,EAAI2rjB,EAAY3rjB,EAAE2nC,GAGrD,IAAaymhB,EAAKC,EAAdC,EAAK;AACT,GAAGH,EAAKl/jB,OAAS,EAAG,CACM,IAAtBk/jB,EAAKzthB,WAAW,IAClB0thB,EAAOpujB,EAAE,GAA0B,KAAvBmujB,EAAKzthB,WAAW,IAAa1gC,EAAIA,EAC7CqujB,EAAOxB,GAAU,IAAKsB,EAAMC,KAG5BC,EAAOxB,GAAU,IAAKsB,EADtBC,EAAOpujB,EAAE,GAAKs+c,EAAO,GAAKt+c,EAAIA,GAE3BoujB,EAAM,GAAK3mU,EAAI,IAAkB,KAAZA,EAAI,GAAGj6P,IAC9B6gkB,EAAOA,EAAKtqe,OAAO,GACnB0jK,EAAI,GAAGznP,EAAI,IAAMynP,EAAI,GAAGznP,IAG1BkujB,EAAGG,EAAKp/jB,OAAO;AACf,IAAIs/jB,EAAQ9mU,EAAIx4P;AAChB,IAAID,EAAE,EAAGA,EAAIy4P,EAAIx4P,SAAUD,EAAG,GAAa,MAAVy4P,EAAIz4P,IAA0B,KAAZy4P,EAAIz4P,GAAGxB,GAAYi6P,EAAIz4P,GAAGgR,EAAEzH,QAAQ,MAAQ,EAAG,CAAEg2jB,EAAQv/jB;AAAG,KAAO,CACtH,IAAIw/jB,EAAM/mU,EAAIx4P;AACd,GAAGs/jB,IAAU9mU,EAAIx4P,SAAiC,IAAvBo/jB,EAAK91jB,QAAQ,KAAa,CACpD,IAAIvJ,EAAEy4P,EAAIx4P,OAAO,EAAGD,GAAI,IAAIA,EACd,MAAVy4P,EAAIz4P,KAA0C,IAA5B,KAAKuJ,QAAQkvP,EAAIz4P,GAAGxB,KACtC0gkB,GAAIzmU,EAAIz4P,GAAGgR,EAAE/Q,OAAO,GAAKi/jB,GAAMzmU,EAAIz4P,GAAGgR,EAAE/Q,OAAQw4P,EAAIz4P,GAAGgR,EAAIqujB,EAAKtqe,OAAOmqe,EAAG,EAAGzmU,EAAIz4P,GAAGgR,EAAE/Q,SACjFi/jB,EAAK,EAAGzmU,EAAIz4P,GAAGgR,EAAI,IACpBynP,EAAIz4P,GAAGgR,EAAIqujB,EAAKtqe,OAAO,EAAGmqe,EAAG,GAAIA,GAAM,GAC9CzmU,EAAIz4P,GAAGxB,EAAI,IACXghkB,EAAQx/jB;AAENk/jB,GAAI,GAAKM,EAAM/mU,EAAIx4P,SAAQw4P,EAAI+mU,GAAOxujB,EAAIqujB,EAAKtqe,OAAO,EAAEmqe,EAAG,GAAKzmU,EAAI+mU,GAAOxujB,EAC/E,MACK,GAAGuujB,IAAU9mU,EAAIx4P,SAAiC,IAAvBo/jB,EAAK91jB,QAAQ,KAAa,CAEzD,IADA21jB,EAAKG,EAAK91jB,QAAQ,KAAK,EACnBvJ,EAAEu/jB,EAAOv/jB,GAAI,IAAKA,EACrB,GAAa,MAAVy4P,EAAIz4P,KAA0C,IAA5B,KAAKuJ,QAAQkvP,EAAIz4P,GAAGxB,GAAzC,CAGA,IAFA6mF,EAAEozK,EAAIz4P,GAAGgR,EAAEzH,QAAQ,MAAM,GAAGvJ,IAAIu/jB,EAAM9mU,EAAIz4P,GAAGgR,EAAEzH,QAAQ,KAAK,EAAEkvP,EAAIz4P,GAAGgR,EAAE/Q,OAAO,EAC9Eq/jB,EAAK7mU,EAAIz4P,GAAGgR,EAAE+jF,OAAO1P,EAAE,GACjBA,GAAG,IAAKA,EACV65e,GAAI,IAA6B,MAAvBzmU,EAAIz4P,GAAGgR,EAAEvN,OAAO4hF,IAAqC,MAAvBozK,EAAIz4P,GAAGgR,EAAEvN,OAAO4hF,MAAai6e,EAAKD,EAAK57jB,OAAOy7jB,KAAQI;AAElG7mU,EAAIz4P,GAAGgR,EAAIsujB,EACX7mU,EAAIz4P,GAAGxB,EAAI,IACXghkB,EAAQx/jB,CAR4C,CAYrD,IAFGk/jB,GAAI,GAAKM,EAAM/mU,EAAIx4P,SAAQw4P,EAAI+mU,GAAOxujB,EAAIqujB,EAAKtqe,OAAO,EAAEmqe,EAAG,GAAKzmU,EAAI+mU,GAAOxujB,GAC9EkujB,EAAKG,EAAK91jB,QAAQ,KAAK,EACnBvJ,EAAEu/jB,EAAOv/jB,EAAEy4P,EAAIx4P,SAAUD,EAC5B,GAAa,MAAVy4P,EAAIz4P,MAA4C,IAA7B,MAAMuJ,QAAQkvP,EAAIz4P,GAAGxB,IAAawB,IAAMu/jB,GAA9D,CAGA,IAFAl6e,EAAEozK,EAAIz4P,GAAGgR,EAAEzH,QAAQ,MAAM,GAAGvJ,IAAIu/jB,EAAM9mU,EAAIz4P,GAAGgR,EAAEzH,QAAQ,KAAK,EAAE,EAC9D+1jB,EAAK7mU,EAAIz4P,GAAGgR,EAAE+jF,OAAO,EAAE1P,GACjBA,EAAEozK,EAAIz4P,GAAGgR,EAAE/Q,SAAUolF,EACvB65e,EAAGG,EAAKp/jB,SAAQq/jB,GAAMD,EAAK57jB,OAAOy7jB;AAEtCzmU,EAAIz4P,GAAGgR,EAAIsujB,EACX7mU,EAAIz4P,GAAGxB,EAAI,IACXghkB,EAAQx/jB,CAR8D,CAUxE,CACD,CACA,IAAIA,EAAE,EAAGA,EAAEy4P,EAAIx4P,SAAUD,EAAgB,MAAVy4P,EAAIz4P,IAAc,KAAKuJ,QAAQkvP,EAAIz4P,GAAGxB,IAAI,IACxE4gkB,EAAO9vG,EAAM,GAAKt+c,EAAI,GAAKhR,EAAE,GAAoB,MAAfy4P,EAAIz4P,EAAE,GAAGgR,GAAaA,EAAEA,EAC1DynP,EAAIz4P,GAAGgR,EAAI6sjB,GAAUplU,EAAIz4P,GAAGxB,EAAGi6P,EAAIz4P,GAAGgR,EAAGoujB,GACzC3mU,EAAIz4P,GAAGxB,EAAI;AAEZ,IAAIihkB,EAAS;AACb,IAAIz/jB,EAAE,EAAGA,IAAMy4P,EAAIx4P,SAAUD,EAAgB,MAAVy4P,EAAIz4P,KAAYy/jB,GAAUhnU,EAAIz4P,GAAGgR;AACpE,OAAOyujB,CACR,CA9MA,CAwQiB7zjB,EAAE,GAAIoF,EAAG1Q,EAAGsL,EAAE,GAC/B,CACA,SAAS8zjB,GAASthH,EAAgBjwP,GACjC,GAAiB,iBAAPA,EAAiB,CAC1BA,GAAOA,IAAQ;AAEf,IAAI,IAAInuN,EAAI,EAAGA,EAAI,MAAUA,EAE5B,GAAmBmxB,MAAhBgqiB,EAAUn7jB,IACb,GAAGm7jB,EAAUn7jB,IAAMo+c,EAAK,CAAEjwP,EAAMnuN;AAAG,KAAO,OADPmuN,EAAM,IAAGA,EAAMnuN;AAIhDmuN,EAAM,IAAGA,EAAM,IACnB,CAGA,OADAgtW,EAAUhtW,GAAOiwP,EACVjwP,CACR,CACA,SAASwxW,GAAeC,GACvB,IAAI,IAAI5/jB,EAAE,EAAM,KAAHA,IAAaA,OACXmxB,IAAXyuiB,EAAI5/jB,IAAkB0/jB,GAASE,EAAI5/jB,GAAIA,EAC5C,CAEA,SAAS6/jB,KAx7BT,IAAwBrhkB;AACnBA,IAAGA,EAAI,CAAC,GACZA,EAAE,GAAK,UACPA,EAAE,GAAK,IACPA,EAAE,GAAK,OACPA,EAAE,GAAK,QACPA,EAAE,GAAK,WACPA,EAAE,GAAK,KACPA,EAAE,IAAK,QACPA,EAAE,IAAK,WACPA,EAAE,IAAK,QACPA,EAAE,IAAK,UACPA,EAAE,IAAK,SACPA,EAAE,IAAK,WACPA,EAAE,IAAK,QACPA,EAAE,IAAK,SACPA,EAAE,IAAK,aACPA,EAAE,IAAK,gBACPA,EAAE,IAAK,OACPA,EAAE,IAAK,UACPA,EAAE,IAAK,cACPA,EAAE,IAAK,iBACPA,EAAE,IAAK,sBACPA,EAAE,IAAK,sBACPA,EAAE,IAAK,2BACPA,EAAE,IAAK,QACPA,EAAE,IAAK,YACPA,EAAE,IAAK,SACPA,EAAE,IAAK,WACPA,EAAE,IAAK,IACPA,EAAE,IAAK,2BA25BP28jB,EA15BO38jB,CA25BR,CAEA,IAAIshkB,GAAM,CACT1mhB,OAAQwjhB,GACR1wU,KAAMwzU,GACNrgH,OAAQ87G,EACR4E,WAAYJ,GACZK,gBAAiBnE,EACjBoE,QAASvB,GACTwB,UAAW,WAAuB,OAAOJ,GAAIzgH,OAAS87G,CAAW,GAG9DgF,GAAoC,CACvC,EAAK,4BACL,EAAK,iCACL,EAAK,kCACL,EAAK,uCACL,GAAM,UAAW,GAAM,UAAW,GAAM,UAAW,GAAM,UACzD,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtE,GAAM,UAAW,GAAM,UAAW,GAAM,UAAW,GAAM,UACzD,GAAM,SACN,GAAM,0CACN,GAAM,mDACN,GAAM,kDACN,GAAM,2DACN,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtE,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtD,GAAM,IACN,GAAM,OACN,GAAM,QACN,GAAM,WACN,GAAM,4BACN,GAAM,iCACN,GAAM,kCACN,GAAM,uCACN,GAAM,KACN,GAAM,QACN,GAAM,QACN,GAAM,UACN,GAAM,SACN,GAAM,SACN,GAAM,WACN,GAAM,QACN,GAAM,SACN,GAAM,OACN,GAAM,UACN,GAAM,cACN,GAAM,QACN,GAAM,YACN,GAAM,UAIHC,GAAc,mCAmEdC,GAAsB,WAC1B,IAAIA,EAAQ,CACZA,QAAgB,SAsBZC,EAnBJ,WAGC,IAFA,IAAIz8jB,EAAI,EAAGuvZ,EAA0B,IAAI7/Y,MAAM,KAEvCrT,EAAG,EAAQ,KAALA,IAAYA,EASzB2D,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAI3D,IACW,UAAa2D,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,EAC/CuvZ,EAAMlzZ,GAAK2D;AAGZ,MAA6B,oBAAf08jB,WAA6B,IAAIA,WAAWntK,GAASA,CACpE,CAjBA,GAgCIplX,EAZJ,SAA4BuvC,GAC3B,IAAI15E,EAAI,EAAGmN,EAAI,EAAG9Q,EAAI,EAAGkzZ,EAAgD,oBAAfmtK,WAA6B,IAAIA,WAAW,MAAQ,IAAIhtjB,MAAM;AAExH,IAAIrT,EAAI,EAAQ,KAALA,IAAYA,EAAGkzZ,EAAMlzZ,GAAKq9E,EAAEr9E;AACvC,IAAIA,EAAI,EAAQ,KAALA,IAAYA,EAEtB,IADA8Q,EAAIusE,EAAEr9E,GACF2D,EAAI,IAAM3D,EAAG2D,EAAI,KAAMA,GAAK,IAAKmN,EAAIoiZ,EAAMvvZ,GAAMmN,IAAM,EAAKusE,EAAM,IAAJvsE;AAEnE,IAAIynP,EAAM;AACV,IAAIv4P,EAAI,EAAQ,IAALA,IAAWA,EAAGu4P,EAAIv4P,EAAI,GAA2B,oBAAfqgkB,WAA6BntK,EAAMotK,SAAa,IAAJtgkB,EAAa,IAAJA,EAAU,KAAOkzZ,EAAMtzZ,MAAU,IAAJI,EAAa,IAAJA,EAAU;AAClJ,OAAOu4P,CACR,CAXA,CAY4B6nU,GACxBG,EAAKzyhB,EAAG,GAAK0yhB,EAAK1yhB,EAAG,GAAK2yhB,EAAK3yhB,EAAG,GAAK4yhB,EAAK5yhB,EAAG,GAAK6yhB,EAAK7yhB,EAAG,GAC5D8yhB,EAAK9yhB,EAAG,GAAK+yhB,EAAK/yhB,EAAG,GAAKgzhB,EAAKhzhB,EAAG,GAAKizhB,EAAKjzhB,EAAG,GAAKywF,EAAKzwF,EAAG,GAC5DkzhB,EAAKlzhB,EAAG,IAAKmzhB,EAAKnzhB,EAAG,IAAKozhB,EAAKpzhB,EAAG,IAAKzwB,EAAKywB,EAAG,IAAKqzhB,EAAKrzhB,EAAG;AAiDhE,OAJAqyhB,EAAMjtK,MAAQktK,EACdD,EAAMiB,KA7CN,SAAoBA,EAAiBC,GAEpC,IADA,IAAIxmjB,GAA2B,EAAvBwmjB,EACAvhkB,EAAI,EAAGV,EAAIgikB,EAAKrhkB,OAAQD,EAAIV,GAAIyb,EAAKA,IAAI,EAAKuljB,EAA4B,KAAxBvljB,EAAEumjB,EAAK5vhB,WAAW1xC;AAC5E,OAAQ+a,CACT,EA0CAsljB,EAAM1G,IAxCN,SAAmBnhiB,EAAgC+oiB,GAElD,IADA,IAAIxmjB,GAA2B,EAAvBwmjB,EAA0BjikB,EAAIk5B,EAAEv4B,OAAS,GAAID,EAAI,EACnDA,EAAIV,GAAIyb,EACbsmjB,EAAG7oiB,EAAEx4B,KAAY,IAAJ+a,GACbwC,EAAGib,EAAEx4B,KAAS+a,GAAK,EAAK,KACxBqmjB,EAAG5oiB,EAAEx4B,KAAS+a,GAAK,GAAM,KACzBomjB,EAAG3oiB,EAAEx4B,KAAQ+a,IAAM,IACnBmmjB,EAAG1oiB,EAAEx4B,MAAQy+H,EAAGjmG,EAAEx4B,MAAQihkB,EAAGzoiB,EAAEx4B,MAAQghkB,EAAGxoiB,EAAEx4B,MAC5C+gkB,EAAGvoiB,EAAEx4B,MAAQ8gkB,EAAGtoiB,EAAEx4B,MAAQ6gkB,EAAGroiB,EAAEx4B,MAAQ4gkB,EAAGpoiB,EAAEx4B,MAC5C2gkB,EAAGnoiB,EAAEx4B,MAAQ0gkB,EAAGloiB,EAAEx4B,MAAQygkB,EAAGjoiB,EAAEx4B,MAAQsgkB,EAAG9niB,EAAEx4B;AAE7C,IADAV,GAAK,GACCU,EAAIV,GAAGyb,EAAKA,IAAI,EAAKuljB,EAAc,KAAVvljB,EAAEyd,EAAEx4B;AACnC,OAAQ+a,CACT,EA4BAsljB,EAAM1iiB,IA1BN,SAAmBA,EAAgB4jiB,GAElC,IADA,IAAIxmjB,GAAY,EAARwmjB,EACAvhkB,EAAI,EAAGV,EAAIq+B,EAAI19B,OAAQ4D,EAAI,EAAGxE,EAAI,EAAGW,EAAIV,IAChDuE,EAAI85B,EAAI+T,WAAW1xC,MACZ,IACN+a,EAAKA,IAAI,EAAKuljB,EAAS,KAALvljB,EAAElX,IACXA,EAAI,KAEbkX,GADAA,EAAKA,IAAI,EAAKuljB,EAA2B,KAAvBvljB,GAAK,IAAMlX,GAAG,EAAG,SAC1B,EAAKy8jB,EAAsB,KAAlBvljB,GAAK,IAAO,GAAFlX,KACnBA,GAAK,OAAUA,EAAI,OAC5BA,EAAa,IAAN,KAAFA,GAAYxE,EAAwB,KAApBs+B,EAAI+T,WAAW1xC,KAIpC+a,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAKuljB,EAA0B,KAAtBvljB,GAAK,IAAMlX,GAAG,EAAG,QAC1B,EAAKy8jB,EAA2B,KAAvBvljB,GAAK,IAAMlX,GAAG,EAAG,SAC1B,EAAKy8jB,EAAsC,KAAlCvljB,GAAK,IAAM1b,GAAG,EAAG,IAAQ,EAAFwE,IAAM,QACtC,EAAKy8jB,EAAsB,KAAlBvljB,GAAK,IAAO,GAAF1b,MAI5B0b,GADAA,GADAA,EAAKA,IAAI,EAAKuljB,EAA4B,KAAxBvljB,GAAK,IAAMlX,GAAG,GAAI,SAC3B,EAAKy8jB,EAA2B,KAAvBvljB,GAAK,IAAMlX,GAAG,EAAG,SAC1B,EAAKy8jB,EAAsB,KAAlBvljB,GAAK,IAAO,GAAFlX;AAG9B,OAAQkX,CACT,EAKOsljB,CACP,CA1F0B,GA4FtBmB,GAAoB,WACxB,IAuFIh7a,EAvFAztG,EAAU,CAAC;AAWf,SAAS0ohB,EAAQl9jB,GAChB,GAA6B,KAA1BA,EAAEd,OAAOc,EAAEtE,OAAS,GAAW,OAAwC,IAAhCsE,EAAEzE,MAAM,GAAG,GAAGyJ,QAAQ,KAAehF,EAAIk9jB,EAAQl9jB,EAAEzE,MAAM,GAAI;AACvG,IAAI+D,EAAIU,EAAE01C,YAAY;AACtB,OAAe,IAAPp2C,EAAYU,EAAIA,EAAEzE,MAAM,EAAG+D,EAAE,EACtC,CAEA,SAAS69jB,EAASn9jB,GACjB,GAA6B,KAA1BA,EAAEd,OAAOc,EAAEtE,OAAS,GAAW,OAAOyhkB,EAASn9jB,EAAEzE,MAAM,GAAI;AAC9D,IAAI+D,EAAIU,EAAE01C,YAAY;AACtB,OAAe,IAAPp2C,EAAYU,EAAIA,EAAEzE,MAAM+D,EAAE,EACnC,CASA,SAAS89jB,EAAehI,EAAgBv/hB,GACpB,iBAATA,IAAmBA,EAAO,IAAIif,KAAKjf;AAC7C,IAAIwniB,EAAiBxniB,EAAKy/C;AAE1B+nf,GADAA,EAAMA,GAAO,EAAIxniB,EAAKigD,eACT,EAAKjgD,EAAK+wF,eAAe,EACtCwuc,EAAIkI,YAAY,EAAGD;AACnB,IAAIE,EAAkB1niB,EAAKs/C,cAAgB;AAE3Coof,GADAA,EAAMA,GAAO,EAAK1niB,EAAKu/C,WAAW,IACrB,EAAIv/C,EAAKw/C,UACtB+/e,EAAIkI,YAAY,EAAGC,EACpB,CAoBA,SAASC,EAAkB9qX,GAC1B+qX,GAAU/qX,EAAM;AAGhB,IAFA,IAAI32M,EAAW,CAAC,EACZgzI,EAAQ,EACN2jE,EAAKx6M,GAAKw6M,EAAKh3M,OAAS,GAAG,CAChC,IAAIuD,EAAOyzM,EAAKgrX,WAAW,GACvBjhS,EAAK/pF,EAAKgrX,WAAW,GAAIx5H,EAAMxxP,EAAKx6M,EAAIukS,EACxCz8R,EAAI,CAAC;AAGH,QAFCf,IAIM,GADX8vI,EAAQ2jE,EAAKgrX,WAAW,MACV19jB,EAAE29jB,MAAQjrX,EAAKgrX,WAAW,IAErCjhS,EAAK,IACI,EAAR1tJ,IAAW/uI,EAAE49jB,MAAQlrX,EAAKgrX,WAAW,IAC7B,EAAR3ub,IAAW/uI,EAAE69jB,MAAQnrX,EAAKgrX,WAAW,KAEtC19jB,EAAE29jB,QAAO39jB,EAAEu/C,GAAK,IAAIzK,KAAa,IAAR90C,EAAE29jB,SAIhCjrX,EAAKx6M,EAAIgsc,EACTnoc,EAAEkD,GAAQe,CACX,CACA,OAAOjE,CACR,CAEA,SAAS+hkB,IAAW,OAAO77a,IAAOA,EAAK,CAAC,EAAI,CAC5C,SAAS5wI,EAAM4/L,EAAmB9zM,GAClC,GAAc,IAAX8zM,EAAK,IAAyB,IAAXA,EAAK,GAAY,OAAO8sX,GAAU9sX,EAAM9zM;AAC9D,GAAuB,MAAT,GAAV8zM,EAAK,KAAwC,MAAT,GAARA,EAAK,IAAkB,OAy6CvD,SAAmBA,EAAmB9zM,GACrC,GAA0C,iBAAvC04jB,EAAI5kX,EAAK11M,MAAM,EAAE,KAAKikB,cAAkC,MAAM,IAAI3jB,MAAM;AAC3E,IAAI8tB,EAAQxsB,GAAWA,EAAQwsB,MAAQ,GAEnCvB,GAAQ4siB,GAAWC,OAAOgB,SAAShlX,GAAQA,EAAKzlM,SAAS,UAAYqqjB,EAAI5kX,IAAO79L,MAAM,QACtF4qjB,EAAK,EAAGz+T,EAAM;AAGlB,IAAIy+T,EAAK,EAAGA,EAAK51iB,EAAK1sB,SAAUsikB,EAE/B,GADAz+T,EAAMn3O,EAAK41iB,GACP,sBAAsBx9iB,KAAK++O,KAC/BA,EAAMA,EAAIhkQ,MAAMgkQ,EAAIv6P,QAAQ,SACxB2kB,IAAMA,EAAO41O,EAAIhkQ,MAAM,EAAGgkQ,EAAI7pN,YAAY,KAAO,IAClD6pN,EAAIhkQ,MAAM,EAAGouB,EAAKjuB,SAAWiuB,GAChC,KAAMA,EAAKjuB,OAAS,IAEnBiuB,GADAA,EAAOA,EAAKpuB,MAAM,EAAGouB,EAAKjuB,OAAS,IACvBH,MAAM,EAAGouB,EAAK+rB,YAAY,KAAO,GAC1C6pN,EAAIhkQ,MAAM,EAAEouB,EAAKjuB,SAAWiuB,KAIjC,IAAIs0iB,GAAa71iB,EAAK,IAAM,IAAI4P,MAAM;AACtC,IAAIimiB,EAAW,MAAM,IAAIpikB,MAAM;AAC/B,IAAI2hB,EAAW,MAAQygjB,EAAU,IAAM,IAGnClikB,EAAI,CACPmikB,UAFgC,GAGhCC,UAHkE;AAKnEC,EAASrikB;AACT,IAAIsikB,EAAUC,EAAO;AACrB,IAAIN,EAAK,EAAGA,EAAK51iB,EAAK1sB,SAAUsikB,EAAI,CACnC,IAAIhnjB,EAAOoR,EAAK41iB;AACbhnjB,IAASwG,GAAYxG,IAASwG,EAAW,OACzC8gjB,KAAQC,GAAWxikB,EAAGqsB,EAAK7sB,MAAM8ikB,EAAUL,GAAKr0iB,GACnD00iB,EAAWL,EACZ,CACA,OAAOjikB,CACR,CAvCA,CAz6CwEk1M,EAAM9zM;AAC9E,GAAG8zM,EAAKv1M,OAAS,IAAK,MAAM,IAAIG,MAAM,iBAAmBo1M,EAAKv1M,OAAS;AACvE,IAAI8ikB,EAEAC,EACAC,EACAC,EACAC,EACAC,EALAC,EAAM,IAONC,EAA8B,GAG9BrsX,EAAyBzB,EAAK11M,MAAM,EAAE;AAC1CkikB,GAAU/qX,EAAM;AAGhB,IAAI8rF,EAmFJ,SAAwB9rF,GACvB,GAAmB,IAAhBA,EAAKA,EAAKx6M,IAAkC,IAApBw6M,EAAKA,EAAKx6M,EAAI,GAAY,MAAO,CAAC,EAAG;AAEhEw6M,EAAKssX,IAAIC,EAAkB,sBAI3BvsX,EAAKx6M,GAAK;AAGV,IAAIsmkB,EAAkB9rX,EAAKgrX,WAAW,EAAG;AAEzC,MAAO,CAAChrX,EAAKgrX,WAAW,EAAE,KAAMc,EACjC,CAbA,CAnFwB9rX;AAExB,OADA8rX,EAAOhgS,EAAG,IAET,KAAK,EAAGsgS,EAAM;AAAK;AAAO,KAAK,EAAGA,EAAM;AAAM;AAC9C,KAAK,EAAG,GAAY,GAATtgS,EAAG,GAAS,OAAOu/R,GAAU9sX,EAAM9zM;AAE9C,QAAS,MAAM,IAAItB,MAAM,sCAAwC2ikB,GAIvD,MAARM,GAA4DrB,GAA7C/qX,EAAczB,EAAK11M,MAAM,EAAEujkB,GAAkC;AAE/E,IAAIrojB,EAAsBw6L,EAAK11M,MAAM,EAAEujkB;CAqFvC,SAAsBpsX,EAAiB8rX,GACtC,IAAIvvjB;AAOJ,OAHAyjM,EAAKx6M,GAAK,EAGF+W,EAAQyjM,EAAKgrX,WAAW,IAC/B,KAAK,EAAM,GAAW,GAARc,EAAW,MAAM,IAAI3ikB,MAAM,gCAAkCoT;AAAQ;AACnF,KAAK,GAAM,GAAW,GAARuvjB,EAAW,MAAM,IAAI3ikB,MAAM,iCAAmCoT;AAAQ;AACpF,QAAS,MAAM,IAAIpT,MAAM,sCAAwCoT,GAIlEyjM,EAAKssX,IAAI,OAAQ,uBAGjBtsX,EAAKssX,IAAI,eAAgB,aAC1B,CAnBA,CAnFatsX,EAAM8rX;AAGnB,IAAIU,EAAqBxsX,EAAKgrX,WAAW,EAAG;AAC5C,GAAY,IAATc,GAA0B,IAAZU,EAAe,MAAM,IAAIrjkB,MAAM,uCAAyCqjkB;AAGzFxsX,EAAKx6M,GAAK,EAGVymkB,EAAYjsX,EAAKgrX,WAAW,EAAG,KAG/BhrX,EAAKx6M,GAAK,EAGVw6M,EAAKssX,IAAI,WAAY,6BAGrBJ,EAAgBlsX,EAAKgrX,WAAW,EAAG,KAGnCe,EAAO/rX,EAAKgrX,WAAW,EAAG,KAG1BmB,EAAcnsX,EAAKgrX,WAAW,EAAG,KAGjCgB,EAAgBhsX,EAAKgrX,WAAW,EAAG;AAGnC,IAAI,IAAI/nhB,GAAK,EAAGmrC,EAAI,EAAGA,EAAI,QAC1BnrC,EAAI+8J,EAAKgrX,WAAW,EAAG,MAClB,KAF4B58e,EAGjCi+e,EAAUj+e,GAAKnrC;AAIhB,IAAIwphB,EAmEJ,SAAmBluX,EAAmB6tX,GAGrC,IAFA,IAAIM,EAAWlhkB,KAAKq3G,KAAK07F,EAAKv1M,OAAOojkB,GAAK,EACtCK,EAA8B,GAC1B1jkB,EAAE,EAAGA,EAAI2jkB,IAAY3jkB,EAAG0jkB,EAAQ1jkB,EAAE,GAAKw1M,EAAK11M,MAAME,EAAEqjkB,GAAKrjkB,EAAE,GAAGqjkB;AAEtE,OADAK,EAAQC,EAAS,GAAKnuX,EAAK11M,MAAM6jkB,EAASN,GACnCK,CACR,CANA,CAnE4CluX,EAAM6tX;AAElDO,EAAWR,EAAaH,EAAeS,EAASL,EAAKC;AAGrD,IAAIO,EA+JJ,SAA0BH,EAA6BR,EAAsBI,EAA6BD,GACzG,IAAI99a,EAAKm+a,EAAQzjkB,OAAQ4jkB,EAA8B,GACnDC,EAA0B,GAAInK,EAAwB,GAAIoK,EAAgC,GAC1FC,EAAUX,EAAM,EAAGrjkB,EAAE,EAAGqlF,EAAE,EAAGjqE,EAAE,EAAG8jjB,EAAG;AACzC,IAAIl/jB,EAAE,EAAGA,EAAIulJ,IAAMvlJ,EAGlB,GAFA25jB,EAAO,IACPv+iB,EAAKpb,EAAIkjkB,IAAoB39a,IAAInqI,GAAGmqI,IACjCu+a,EAAK1ojB,GAAR,CACA2ojB,EAAY;AACZ,IAAIjtL,EAAO;AACX,IAAIzxT,EAAEjqE,EAAGiqE,GAAG,GAAI,CACfyxT,EAAKzxT,MACLy+e,EAAKz+e,MACLs0e,EAAIA,EAAI15jB,QAAUolF,EAClB0+e,EAAUz8jB,KAAKo8jB,EAAQr+e;AACvB,IAAI4+e,EAAkBX,EAAU7gkB,KAAKE,MAAQ,EAAF0iF,EAAIg+e;AAE/C,GAAGA,EAAM,GADTnE,EAAS,EAAF75e,EAAO2+e,GACG,MAAM,IAAI5jkB,MAAM,yBAA2BilF,EAAI,MAAMg+e;AACtE,IAAIK,EAAQO,GAAO;AAEnB,GAAGntL,EADHzxT,EAAI6+e,GAAcR,EAAQO,GAAO/E,IACrB,KACb,CACA2E,EAAYzojB,GAAM,CAACykM,MAAO85W,EAAKhtiB,KAAKw3iB,GAAW,CAACJ,IAfpC,CAiBb,OAAOF,CACR,CAzBA,CA/JkDH,EAASR,EAAWI,EAAWD;AAEjFQ,EAAYX,GAAWp7jB,KAAO,aAC3Bk7jB,EAAO,GAAKG,IAAkBiB,IAAYP,EAAYV,GAAer7jB,KAAO,YAC/E+7jB,EAAYP,EAAU,IAAIx7jB,KAAO,OACjC+7jB,EAAYP,UAAYA,EACxBO,EAAYR,IAAMA;AAGlB,IAA6BgB,EAA0B,GAAI5B,EAA6B,GAAIC,EAA8B;CAkL1H,SAAwBQ,EAAsBW,EAA4BH,EAA6BW,EAAyBrB,EAAMtwX,EAAO+vX,EAAW6B,GAIvJ,IAHA,IAEwBx8jB,EAFpBy8jB,EAAgB,EAAGhjkB,EAAM8ikB,EAAMpkkB,OAAO,EAAE,EACxCukkB,EAASX,EAAYX,GAAWv2iB,KAChC3sB,EAAI,EAAGykkB,EAAU,EACfzkkB,EAAIwkkB,EAAOvkkB,OAAQD,GAAI,IAAK,CACjC,IAAIi3M,EAAyButX,EAAO1kkB,MAAME,EAAGA,EAAE;AAC/CgikB,GAAU/qX,EAAM,IAChBwtX,EAAUxtX,EAAKgrX,WAAW,GAC1Bn6jB,EAAO48jB,GAAUztX,EAAK,EAAEwtX,EAAQljkB,GAChC8ikB,EAAM/8jB,KAAKQ;AACX,IAAIxH,EAAkB,CACrBwH,KAAOA,EACPtE,KAAOyzM,EAAKgrX,WAAW,GACvBj9jB,MAAOiyM,EAAKgrX,WAAW,GACvB3ikB,EAAO23M,EAAKgrX,WAAW,EAAG,KAC1BhqjB,EAAOg/L,EAAKgrX,WAAW,EAAG,KAC1BlnjB,EAAOk8L,EAAKgrX,WAAW,EAAG,KAC1B0C,MAAO1tX,EAAKgrX,WAAW,IACvBtgjB,MAAOs1L,EAAKgrX,WAAW,EAAG,KAC1BrjjB,MAAO,EACPb,KAAM;AAGM,IADUk5L,EAAKgrX,WAAW,GAAKhrX,EAAKgrX,WAAW,GAAKhrX,EAAKgrX,WAAW,GAAKhrX,EAAKgrX,WAAW,KACtF3hkB,EAAEukD,GAAK+/gB,EAAU3tX,EAAMA,EAAKx6M,EAAE,IAEjC,IADUw6M,EAAKgrX,WAAW,GAAKhrX,EAAKgrX,WAAW,GAAKhrX,EAAKgrX,WAAW,GAAKhrX,EAAKgrX,WAAW,KACtF3hkB,EAAEwjD,GAAK8ghB,EAAU3tX,EAAMA,EAAKx6M,EAAE,IAC9C6D,EAAEse,MAAQq4L,EAAKgrX,WAAW,EAAG,KAC7B3hkB,EAAEyd,KAAOk5L,EAAKgrX,WAAW,EAAG,KACzB3hkB,EAAEyd,KAAO,GAAKzd,EAAEse,MAAQ,IAAKte,EAAEyd,KAAOzd,EAAEkD,KAAO,EAAGlD,EAAEse,MAAQwljB,EAAY9jkB,EAAEwH,KAAO,IACtE,IAAXxH,EAAEkD,MACJ+gkB,EAAgBjkkB,EAAEse,MACfokjB,EAAO,GAAKuB,IAAkBH,IAAYP,EAAYU,GAAez8jB,KAAO,gBAEtExH,EAAEyd,MAAQ,MACnBzd,EAAE0/S,QAAU,WACgB7uR,IAAzB0yiB,EAAYvjkB,EAAEse,SAAsBiljB,EAAYvjkB,EAAEse,OAASimjB,EAAgBnB,EAASpjkB,EAAEse,MAAOiljB,EAAYP,UAAWO,EAAYR,MACnIQ,EAAYvjkB,EAAEse,OAAO9W,KAAOxH,EAAEwH,KAC9BxH,EAAE6gF,QAAW0if,EAAYvjkB,EAAEse,OAAO+N,KAAK7sB,MAAM,EAAEQ,EAAEyd,QAEjDzd,EAAE0/S,QAAU,UACT1/S,EAAEyd,KAAO,EAAGzd,EAAEyd,KAAO,EAChBwmjB,IAAkBH,GAAc9jkB,EAAEse,QAAUwljB,GAAcP,EAAYU,KAC7EjkkB,EAAE6gF,QAAU2jf,EAAexkkB,EAAGujkB,EAAYU,GAAe53iB,MAAOk3iB,EAAYS,IAAO,CAAC,GAAG33iB,QAGtFrsB,EAAE6gF,SAAS6gf,GAAU1hkB,EAAE6gF,QAAS,GACnCuxH,EAAM5qM,GAAQxH,EACdmikB,EAAUn7jB,KAAKhH,EAChB,CACD,CAjDA,CAjLe4ikB,EAAWW,EAAaH,EAASW,EAAOrB,EAD9B,CAAC,EAC0CP,EAAWU,GA6D/E,SAA0B3+hB,EAAqBugiB,EAAsBV,GAIpE,IAHA,IAAIrkkB,EAAI,EAAGV,EAAI,EAAG2Y,EAAI,EAAG8C,EAAI,EAAGsqE,EAAI,EAAG9jF,EAAK8ikB,EAAMpkkB,OAC9C+kkB,EAAwB,GAAI9qhB,EAAsB,GAEhDl6C,EAAIuB,IAAMvB,EAAKglkB,EAAIhlkB,GAAGk6C,EAAEl6C,GAAGA,EAAG+kkB,EAAG/kkB,GAAGqkkB,EAAMrkkB;AAEhD,KAAMqlF,EAAInrC,EAAEj6C,SAAUolF,EAErB/lF,EAAIklC,EADJxkC,EAAIk6C,EAAEmrC,IACI/lF,EAAG2Y,EAAIusB,EAAGxkC,GAAGiY,EAAG8C,EAAIypB,EAAGxkC,GAAG+a,EACjCiqjB,EAAIhlkB,KAAOA,KACH,IAAPV,GAAyB0lkB,EAAI1lkB,KAAOA,IAAG0lkB,EAAIhlkB,GAAKglkB,EAAI1lkB,KAC7C,IAAP2Y,GAAY+sjB,EAAI/sjB,KAAOA,IAAG+sjB,EAAIhlkB,GAAKglkB,EAAI/sjB,MAEjC,IAAP8C,IAAuBiqjB,EAAIjqjB,GAAK/a,IACzB,IAAPV,GAAYU,GAAKglkB,EAAIhlkB,KAAMglkB,EAAI1lkB,GAAK0lkB,EAAIhlkB,GAAOk6C,EAAED,YAAY36C,GAAK+lF,GAAGnrC,EAAE5yC,KAAKhI,KACrE,IAAP2Y,GAAYjY,GAAKglkB,EAAIhlkB,KAAMglkB,EAAI/sjB,GAAK+sjB,EAAIhlkB,GAAOk6C,EAAED,YAAYhiC,GAAKotE,GAAGnrC,EAAE5yC,KAAK2Q;AAEhF,IAAIjY,EAAE,EAAGA,EAAIuB,IAAMvB,EAAMglkB,EAAIhlkB,KAAOA,KACzB,IAAPiY,GAAyB+sjB,EAAI/sjB,KAAOA,EAAG+sjB,EAAIhlkB,GAAKglkB,EAAI/sjB,IACxC,IAAP3Y,GAAY0lkB,EAAI1lkB,KAAOA,IAAG0lkB,EAAIhlkB,GAAKglkB,EAAI1lkB;AAGhD,IAAIU,EAAE,EAAGA,EAAIuB,IAAMvB,EAClB,GAAkB,IAAfwkC,EAAGxkC,GAAGwD,KAAT,CAEA,IADA6hF,EAAIrlF,IACIglkB,EAAI3/e,GAAI,GACfA,EAAI2/e,EAAI3/e,GACR0/e,EAAG/kkB,GAAK+kkB,EAAG1/e,GAAK,IAAM0/e,EAAG/kkB,SACX,IAANqlF,IAAY,IAAM2/e,EAAI3/e,IAAMA,GAAK2/e,EAAI3/e;AAC9C2/e,EAAIhlkB,IAAM,CANyB,CAUpC,IADA+kkB,EAAG,IAAM,IACL/kkB,EAAE,EAAGA,EAAIuB,IAAMvB,EACA,IAAfwkC,EAAGxkC,GAAGwD,OAAyBuhkB,EAAG/kkB,IAAM,IAE7C,CApCA,CA3DiByikB,EAAWC,EAAW2B,GACvCA,EAAM7wjB;AAEN,IAAIlT,EAAI,CACPmikB,UAAWA,EACXC,UAAWA;AAKZ,OADGhhkB,GAAWA,EAAQ+sM,MAAKnuM,EAAEmuM,IAAM,CAACzzL,OAAQA,EAAQ0ojB,QAASA,IACtDpjkB,CACP,CAsFA,SAASwkkB,EAAe1ohB,EAAoBo+e,EAAsB8pC,GAKjE,IAJA,IAAI1ljB,EAAQw9B,EAAMx9B,MAAOb,EAAOq+B,EAAMr+B,KAElCzd,EAAI,GACJ6tN,EAAMvvM,EACJ0ljB,GAAQvmjB,EAAO,GAAKowM,GAAO,GAChC7tN,EAAEgH,KAAKkzhB,EAAQ16hB,MAAMquN,EAAM82W,EAAM92W,EAAM82W,EAAOA,IAC9ClnjB,GAAQknjB,EACR92W,EAAM+1W,GAAcI,EAAY,EAANn2W;AAE3B,OAAgB,IAAb7tN,EAAEL,OAAsBilkB,GAAQ,GAC3B5K,EAAQh6jB,GAAGR,MAAM,EAAGs8C,EAAMr+B,KACnC,CAIA,SAAS6ljB,EAAWz1W,EAAgB+/I,EAAgBw1N,EAA6BL,EAAgBC,GAChG,IAAIpphB,EAAekqhB;AACnB,GAAGj2W,IAAQi2W,GACV,GAAW,IAARl2N,EAAW,MAAM,IAAI9tW,MAAM,0CACxB,IAAY,IAAT+tN,EAAyB,CAClC,IAAIq2W,EAASd,EAAQv1W,GAAMtkN,GAAKw5jB,IAAM,GAAG;AACzC,IAAImB,EAAQ;AACZ,IAAI,IAAIxkkB,EAAI,EAAGA,EAAI6J,IACdqwC,EAAIgqhB,GAAcM,EAAS,EAAFxkkB,MAAUokkB,IADhBpkkB,EAEvBsjkB,EAAUh8jB,KAAK4yC;AAEhB0phB,EAAWM,GAAcM,EAAOnB,EAAI,GAAGn1N,EAAM,EAAGw1N,EAASL,EAAKC,EAC/D,CACD,CAGA,SAASuB,EAAgBnB,EAA6B9kjB,EAAkB0kjB,EAA6BD,EAAgBS,GACpH,IAAInK,EAAwB,GAAIoK,EAA2B;AACvDD,IAAMA,EAAO;AACjB,IAAIE,EAAUX,EAAM,EAAGh+e,EAAI,EAAG65e,EAAK;AACnC,IAAI75e,EAAEzmE,EAAOymE,GAAG,GAAI,CACnBy+e,EAAKz+e,MACLs0e,EAAIA,EAAI15jB,QAAUolF,EAClB0+e,EAAUz8jB,KAAKo8jB,EAAQr+e;AACvB,IAAI4+e,EAAOX,EAAU7gkB,KAAKE,MAAQ,EAAF0iF,EAAIg+e;AAEpC,GAAGA,EAAM,GADTnE,EAAS,EAAF75e,EAAO2+e,GACG,MAAM,IAAI5jkB,MAAM,yBAA2BilF,EAAI,MAAMg+e;AACtE,IAAIK,EAAQO,GAAO;AACnB5+e,EAAI6+e,GAAcR,EAAQO,GAAO/E,EAClC,CACA,MAAO,CAACr/W,MAAO85W,EAAKhtiB,KAAKw3iB,GAAW,CAACJ,IACtC,CAkFA,SAASa,EAAU3tX,EAA0Bv5L,GAC5C,OAAO,IAAI27B,KAA6G,KAAnG8rhB,GAAeluX,EAAKv5L,EAAO,GAAG,IAAKjb,KAAKC,IAAI,EAAE,IAAIyikB,GAAeluX,EAAKv5L,GAAQ,IAAQ,aAC5G,CAoBA,SAASiljB,EAASyC,EAAsBzshB,GACvC,IAAIr4C,EAAIq4C,GAAQ,CAAC,EAAGzqB,EAAO5tB,EAAE4tB,MAAQ;AAGrC,GAFIk3iB,EAAI1C,YAAW0C,EAAI1C,UAAY,IAC/B0C,EAAI3C,YAAW2C,EAAI3C,UAAY,IAChC2C,EAAI1C,UAAUzikB,SAAWmlkB,EAAI3C,UAAUxikB,OAAQ,MAAM,IAAIG,MAAM;AACtC,IAAzBglkB,EAAI1C,UAAUzikB,SAChBmlkB,EAAI1C,UAAU,GAAKx0iB,EAAO,IAC1Bk3iB,EAAI3C,UAAU,GAAM,CAAE36jB,KAAMomB,EAAM1qB,KAAM,IAEtClD,EAAE+kkB,QAAOD,EAAI3C,UAAU,GAAGkC,MAAQrkkB,EAAE+kkB,OAGxC,SAAkBD,GACjB,IAAIE,EAAK;AACT,IAAG9D,GAAIzriB,KAAKqviB,EAAK,IAAME,GAAvB,CACA,IAAI/gkB,EAAI2gkB,GAAQ;AAAI3gkB,EAAE,GAAK,GAAIA,EAAE,GAAKA,EAAE,GAAK,GAAIA,EAAE,GAAK,GACxD6gkB,EAAI3C,UAAUn7jB,KAAM,CAAEQ,KAAMw9jB,EAAI9hkB,KAAM,EAAG29E,QAAQ58E,EAAGwZ,KAAK,EAAGze,EAAE,GAAI2Y,EAAE,GAAI8C,EAAE,KAC1EqqjB,EAAI1C,UAAUp7jB,KAAK89jB,EAAI1C,UAAU,GAAK4C,GACtCC,EAAYH,EAJgB,CAK7B,CAPA,CAFUA,EACV,CASA,SAASG,EAAYH,EAAsBx5jB,GAC1C+2jB,EAASyC;AAET,IADA,IAAIj6I,KAAYjpb,KACRlC,EAAIolkB,EAAI1C,UAAUzikB,OAAS,EAAGD,GAAK,IAAKA,EAAG,CAClD,IAAIwlkB,EAAQJ,EAAI3C,UAAUzikB;AAC1B,OAAOwlkB,EAAMhikB,MACZ,KAAK,EACDtB,EAAGipb,MACCi6I,EAAI3C,UAAUpxa,MAAO+za,EAAI1C,UAAUrxa;AAC1C;AACD,KAAK,EAAG,KAAK,EAAG,KAAK,EACpBnvJ,KACGy4E,MAAM6qf,EAAMvtjB,EAAIutjB,EAAMlmkB,EAAIkmkB,EAAMzqjB,KAAIowa,MACpCq6I,EAAMvtjB,GAAK,GAAKutjB,EAAMlmkB,GAAK,GAAKkmkB,EAAMvtjB,GAAKutjB,EAAMlmkB,IAAG6rb;AACvD;AACD,QAASA,KAEX,CACA,GAAIA,GAAOv/a,EAAX,CAEA,IAAI4gD,EAAM,IAAInT,KAAK,KAAM,EAAG,IAAKgsC,EAAI,EAEjCogf,EAAYh+iB,OAAOxjB,OAASwjB,OAAOxjB,OAAO,MAAQ,CAAC,EACnD0oB,EAAqC;AACzC,IAAI3sB,EAAI,EAAGA,EAAIolkB,EAAI1C,UAAUzikB,SAAUD,EACtCylkB,EAAUL,EAAI1C,UAAU1ikB,OACK,IAA1BolkB,EAAI3C,UAAUzikB,GAAGwD,MACpBmpB,EAAKrlB,KAAK,CAAC89jB,EAAI1C,UAAU1ikB,GAAIolkB,EAAI3C,UAAUzikB;AAE5C,IAAIA,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAG,CAChC,IAAIglkB,EAAMvD,EAAQ90iB,EAAK3sB,GAAG,KAC1BkC,EAAIujkB,EAAUT,MAEbr4iB,EAAKrlB,KAAK,CAAC09jB,EAAM,CAChBl9jB,KAAM45jB,EAASsD,GAAK7kjB,QAAQ,IAAI,IAChC3c,KAAM,EACNmhkB,MAAOe,EACP7ghB,GAAI2H,EAAK1I,GAAI0I,EACb20B,QAAS,QAGVskf,EAAUT,MAEZ,CAIA,IAFAr4iB,EAAKkF,KAAK,SAASnrB,EAAEwK,GAAK,OAve3B,SAAiBzU,EAAc8D,GAE9B,IADA,IAAIjB,EAAI7C,EAAEkb,MAAM,KAAMM,EAAI1X,EAAEoX,MAAM,KAC1B3X,EAAI,EAAG6D,EAAI,EAAG6tF,EAAIjvF,KAAK8b,IAAIjf,EAAEW,OAAQgY,EAAEhY,QAASD,EAAI0xF,IAAK1xF,EAAG,CACnE,GAAI6D,EAAIvE,EAAEU,GAAGC,OAASgY,EAAEjY,GAAGC,OAAS,OAAO4D;AAC3C,GAAGvE,EAAEU,IAAMiY,EAAEjY,GAAI,OAAOV,EAAEU,GAAKiY,EAAEjY,IAAM,EAAI,CAC5C,CACA,OAAOV,EAAEW,OAASgY,EAAEhY,MACrB,CAPA,CAue0CyG,EAAE,GAAIwK,EAAE,GAAK,GACtDk0jB,EAAI1C,UAAY,GAAI0C,EAAI3C,UAAY,GAChCzikB,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAKolkB,EAAI1C,UAAU1ikB,GAAK2sB,EAAK3sB,GAAG,GAAIolkB,EAAI3C,UAAUzikB,GAAK2sB,EAAK3sB,GAAG;AAC7F,IAAIA,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAG,CAChC,IAAIqoK,EAAM+8Z,EAAI3C,UAAUzikB,GACpBslkB,EAAKF,EAAI1C,UAAU1ikB;AAOvB,GALAqoK,EAAIvgK,KAAQ45jB,EAAS4D,GAAInljB,QAAQ,IAAI,IACrCkoJ,EAAI/oK,EAAI+oK,EAAIpwJ,EAAIowJ,EAAIttJ,IAAMstJ,EAAIrjK,MAAQ,GACtCqjK,EAAItqJ,KAAOsqJ,EAAIlnF,QAAUknF,EAAIlnF,QAAQlhF,OAAS,EAC9CooK,EAAIzpJ,MAAQ,EACZypJ,EAAIs8Z,MAASt8Z,EAAIs8Z,OAASe,EACjB,IAAN1lkB,EACFqoK,EAAIttJ,EAAI4R,EAAK1sB,OAAS,EAAI,GAAK,EAC/BooK,EAAItqJ,KAAO,EACXsqJ,EAAI7kK,KAAO;KACL,GAAmB,KAAhB8hkB,EAAGxlkB,OAAO,GAAW,CAC9B,IAAIulF,EAAErlF,EAAE,EAAEqlF,EAAI14D,EAAK1sB,QAAgBwhkB,EAAQ2D,EAAI1C,UAAUr9e,KAAKigf,IAAjCjgf,GAE7B,IADAgjF,EAAIttJ,EAAIsqE,GAAK14D,EAAK1sB,QAAU,EAAIolF,EAC5BA,EAAErlF,EAAE,EAAEqlF,EAAI14D,EAAK1sB,QAAgBwhkB,EAAQ2D,EAAI1C,UAAUr9e,KAAKo8e,EAAQ6D,KAAzCjgf,GAC7BgjF,EAAIpwJ,EAAIotE,GAAK14D,EAAK1sB,QAAU,EAAIolF,EAChCgjF,EAAI7kK,KAAO,CACZ,MACIi+jB,EAAQ2D,EAAI1C,UAAU1ikB,EAAE,IAAI,KAAOyhkB,EAAQ6D,KAAKj9Z,EAAIpwJ,EAAIjY,EAAI,GAC/DqoK,EAAI7kK,KAAO,CAEb,CArDc,CAuDf,CAEA,SAASusP,EAAOq1U,EAAsB1jkB,GACrC,IAAIikkB,EAAQjkkB,GAAW,CAAC;AAExB,GAAqB,OAAlBikkB,EAAMC,SAAmB,OAkiC7B,SAAmBR,EAAsB1jkB,GAcxC,IAbA,IAAIi3C,EAAOj3C,GAAW,CAAC,EACnBqgB,EAAW42B,EAAK52B,UAAY,UAG5B02O,EAAM,CACT,oBACA,+CAJD12O,EAAW,UAAYA,GAImCjiB,MAAM,GAAK,IACpE,GACA,GACA,IAGGouB,EAAOk3iB,EAAI1C,UAAU,GAAI/f,EAAKz0hB,EAAM20H,EAAKuib,EAAI3C,UAAU,GACnDzikB,EAAI,EAAGA,EAAIolkB,EAAI1C,UAAUzikB,SAAUD,EAG1C,GAFA2ijB,EAAKyiB,EAAI1C,UAAU1ikB,GAAGF,MAAMouB,EAAKjuB,SACjC4iJ,EAAKuib,EAAI3C,UAAUzikB,IACZ+d,MAAS8kI,EAAG1hE,SAAiB,YAANwhe,EAA9B,CAGAA,EAAKA,EAAGxiiB,QAAQ,yCAA0C,SAAStc,GAClE,MAAO,KAAOA,EAAE6tC,WAAW,GAAG3hC,SAAS,IAAM,GAC9C,GAAGoQ,QAAQ,mBAAoB,SAAS1e,GACvC,MAAO,KAAOA,EAAEiwC,WAAW,GAAG3hC,SAAS,IAAM,GAC9C;AASA,IANA,IAAI1O,EAAKwhJ,EAAG1hE,QAER0kf,EAAOtM,GAAWC,OAAOgB,SAASn5jB,GAAMA,EAAG0O,SAAS,UAAYqqjB,EAAI/4jB,GAGpEykkB,EAAU,EAAGxmkB,EAAImD,KAAK8b,IAAI,KAAMsnjB,EAAK5lkB,QAASggS,EAAK,EAC/C8lS,EAAM,EAAGA,GAAOzmkB,IAAKymkB,GAAS9lS,EAAG4lS,EAAKn0hB,WAAWq0hB,KAAS,IAAQ9lS,EAAK,OAAQ6lS;AACvF,IAAIE,EAAKF,GAAe,EAAJxmkB,EAAQ;AAE5Bm5P,EAAInxP,KAAKya,GACT02O,EAAInxP,KAAK,sBAAwBqxC,EAAKzqB,MAAQ,uBAAyBy0hB,GACvElqT,EAAInxP,KAAK,+BAAiC0+jB,EAAK,mBAAqB,WACpEvtU,EAAInxP,KAAK,iBAAmB2+jB,GAAiBpjb,EAAI8/Z,IACjDlqT,EAAInxP,KAAK,IAETmxP,EAAInxP,KAAK0+jB,EAAKE,GAAuBL,GAAQM,GAAgBN,GAzBR,CA4BtD,OADAptU,EAAInxP,KAAKya,EAAW,UACb02O,EAAIjhP,KAAK,OACjB,CA9CA,CAliC8C4tjB,EAAKO;AAElD,GADAJ,EAAYH,GAEN,QADCO,EAAMC,SACA,OAuxBd,SAAmBR,EAAsB1jkB,GACxC,IAAIikkB,EAAQjkkB,GAAW,CAAC,EACpB+2P,EAAM,GAAI2tU,EAAQ,GAClB9lkB,EAAe4kkB,GAAQ,GACvBxxf,EAAUiyf,EAAMU,YAAc,EAAI,EAGlCrmkB,EAAI,EAAGqlF,EAAI,EAEXihf,EAAW,EAAGzD,EAAO,EACrB30iB,EAAOk3iB,EAAI1C,UAAU,GAAI/f,EAAKz0hB,EAAM20H,EAAKuib,EAAI3C,UAAU,GACvD8D,EAAO,GACPC,EAAQ;AAEZ,IAAIxmkB,EAAI,EAAGA,EAAIolkB,EAAI1C,UAAUzikB,SAAUD,EAEtC,GADA2ijB,EAAKyiB,EAAI1C,UAAU1ikB,GAAGF,MAAMouB,EAAKjuB,SAAS4iJ,EAAKuib,EAAI3C,UAAUzikB,IACtD+d,MAAS8kI,EAAG1hE,SAAiB,YAANwhe,EAA9B,CACA,IAAI/jiB,EAAQ0njB,EAGRG,EAAUvB,GAAQviB,EAAG1ijB;AACzB,IAAIolF,EAAI,EAAGA,EAAIs9d,EAAG1ijB,SAAUolF,EAAGohf,EAAQ5E,YAAY,EAAsB,IAAnBlf,EAAGjxgB,WAAW2zC;AACpEohf,EAAUA,EAAQ3mkB,MAAM,EAAG2mkB,EAAQhqkB,GACnC8pkB,EAAK1D,GAAQxC,GAAM1G,IAAY92a,EAAG1hE,QAAyB;AAE3D,IAAIulf,EAAS7jb,EAAG1hE;AACH,GAAVzN,IAAagzf,EAASC,EAAgBD,KAGzCpmkB,EAAI4kkB,GAAQ,KACVrD,YAAY,EAAG,UACjBvhkB,EAAEuhkB,YAAY,EAAG,IACjBvhkB,EAAEuhkB,YAAY,EA5BmC,GA6BjDvhkB,EAAEuhkB,YAAY,EAAGnuf,GAEdmvE,EAAG/+F,GAAI69gB,EAAerhkB,EAAGuiJ,EAAG/+F,IAC1BxjD,EAAEuhkB,YAAY,EAAG,GACtBvhkB,EAAEuhkB,aAAa,EAAqB0E,EAAK1D,IACzCvikB,EAAEuhkB,YAAY,EAAsB6E,EAAOzmkB,QAC3CK,EAAEuhkB,YAAY,EAA6Bh/a,EAAG1hE,QAAmBlhF,QACjEK,EAAEuhkB,YAAY,EAAG4E,EAAQxmkB,QACzBK,EAAEuhkB,YAAY,EAAG,GAEjByE,GAAYhmkB,EAAEL,OACdw4P,EAAInxP,KAAKhH,GACTgmkB,GAAYG,EAAQxmkB,OACpBw4P,EAAInxP,KAAKm/jB,GAMTH,GAAYI,EAAOzmkB,OACnBw4P,EAAInxP,KAAKo/jB,IAaTpmkB,EAAI4kkB,GAAQ,KACVrD,YAAY,EAAG,UACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,IACjBvhkB,EAAEuhkB,YAAY,EAlEmC,GAmEjDvhkB,EAAEuhkB,YAAY,EAAGnuf,GACjBpzE,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,aAAa,EAAG0E,EAAK1D,IAEvBvikB,EAAEuhkB,YAAY,EAAG6E,EAAOzmkB,QACxBK,EAAEuhkB,YAAY,EAAUh/a,EAAG1hE,QAAmBlhF,QAC9CK,EAAEuhkB,YAAY,EAAG4E,EAAQxmkB,QACzBK,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAGjjjB,GAEjB4njB,GAASlmkB,EAAE7D,EACX2pkB,EAAM9+jB,KAAKhH,GACXkmkB,GAASC,EAAQxmkB,OACjBmmkB,EAAM9+jB,KAAKm/jB,KACT5D,CAzEmD,CAuFtD,OAVAvikB,EAAI4kkB,GAAQ,KACVrD,YAAY,EAAG,WACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAGgB,GACjBvikB,EAAEuhkB,YAAY,EAAGgB,GACjBvikB,EAAEuhkB,YAAY,EAAG2E,GACjBlmkB,EAAEuhkB,YAAY,EAAGyE,GACjBhmkB,EAAEuhkB,YAAY,EAAG,GAEVvH,EAAS,CAACA,EAAS7hU,GAAe6hU,EAAQ8L,GAAQ9lkB,GAC1D,CAxGA,CAvxB+B8kkB,EAAKO;AAGnC,IAAIrmkB,EAAK,SAAS8lkB,GAEjB,IADA,IAAIwB,EAAY,EAAGC,EAAW,EACtB7mkB,EAAI,EAAGA,EAAIolkB,EAAI3C,UAAUxikB,SAAUD,EAAG,CAC7C,IAAIw1M,EAAO4vX,EAAI3C,UAAUzikB;AACzB,GAAIw1M,EAAKr0H,QAAT,CAEA,IAAImuY,EAAO95Q,EAAKr0H,QAAQlhF;AACrBqvd,EAAO,IACNA,EAAO,KAAQs3G,GAAct3G,EAAO,IAAS,EAC3Cu3G,GAAav3G,EAAO,KAAW,EALnB,CAOnB,CAOA,IANA,IAAIm0G,EAAW2B,EAAI1C,UAAUzikB,OAAQ,GAAM,EAEvC6mkB,EAAYF,EAAY,KAAS,EACjCG,GAFYH,EAAY,GAAM,GAERC,EAAWpD,EAAUqD,EAC3CE,EAAWD,EAAW,KAAS,EAC/BE,EAAYD,GAAW,IAAM,EAAIvkkB,KAAKq3G,MAAMktd,EAAQ,KAAK,KACrDD,EAAWC,EAAUC,EAAY,KAAS,EAAKD,GAASC,IAAcD,GAAW,IAAM,EAAIvkkB,KAAKq3G,MAAMktd,EAAQ,KAAK;AAC3H,IAAI1nkB,EAAK,CAAC,EAAG2nkB,EAAWD,EAASF,EAAUrD,EAASoD,EAAUD,EAAW;AAGzE,OAFAxB,EAAI3C,UAAU,GAAG1kjB,KAAO6ojB,GAAa,EACrCtnkB,EAAE,IAAM8lkB,EAAI3C,UAAU,GAAG7jjB,MAAMtf,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAMA,EAAE,GAAG,GAAM,GACpEA,CACR,CAvBS,CAuBN8lkB,GACC9kkB,EAAI4kkB,GAAQ5lkB,EAAE,IAAM,GACpBU,EAAI,EAAGu9E,EAAI;AAEd,IAAIv9E,EAAI,EAAGA,EAAI,IAAKA,EAAGM,EAAEuhkB,YAAY,EAAGqF,EAAWlnkB;AACnD,IAAIA,EAAI,EAAGA,EAAI,IAAKA,EAAGM,EAAEuhkB,YAAY,EAAG;AAMxC,IALAvhkB,EAAEuhkB,YAAY,EAAG,IACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,OACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACb7hkB,EAAI,EAAGA,EAAI,IAAKA,EAAGM,EAAEuhkB,YAAY,EAAG;AAUxC,IATAvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAGvikB,EAAE,IACnBgB,EAAEuhkB,YAAY,EAAGvikB,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,GAC7CgB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,MACjBvhkB,EAAEuhkB,YAAY,EAAGvikB,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,EAAG8kkB,GAChD9jkB,EAAEuhkB,YAAY,EAAGvikB,EAAE,IACnBgB,EAAEuhkB,aAAa,EAAGvikB,EAAE,GAAKA,EAAE,GAAK,EAAG8kkB,GACnC9jkB,EAAEuhkB,YAAY,EAAGvikB,EAAE,IACfU,EAAI,EAAGA,EAAI,MAAOA,EAAGM,EAAEuhkB,aAAa,EAAG7hkB,EAAIV,EAAE,GAAKA,EAAE,GAAKU,GAAK;AAEnE,GAAGV,EAAE,GACJ,IAAIi+E,EAAI,EAAGA,EAAIj+E,EAAE,KAAMi+E,EAAG,CACzB,KAAMv9E,EAAI,IAAU,IAAJu9E,IAAWv9E,EAAGM,EAAEuhkB,aAAa,EAAG7hkB,EAAIV,EAAE,GAAKA,EAAE,GAAKU,GAAK;AACvEM,EAAEuhkB,aAAa,EAAGtkf,IAAMj+E,EAAE,GAAK,EAAI8kkB,EAAa7mf,EAAI,EACrD,CAED,IAAI4pf,EAAU,SAAS5yjB,GACtB,IAAIgpE,GAAKhpE,EAAGvU,EAAEu9E,EAAE,IAAKv9E,EAAGM,EAAEuhkB,aAAa,EAAG7hkB,EAAE;AACzCuU,MAAOvU,EAAGM,EAAEuhkB,aAAa,EAAGuC,GAChC;AAEA,IADA7mf,EAAIv9E,EAAI,EACJu9E,GAAGj+E,EAAE,GAAIU,EAAEu9E,IAAKv9E,EAAGM,EAAEuhkB,aAAa,EAAGuF,EAAOC;AAChD,IAAI9pf,GAAGj+E,EAAE,GAAIU,EAAEu9E,IAAKv9E,EAAGM,EAAEuhkB,aAAa,EAAGuF,EAAOE;AAChDH,EAAQ7nkB,EAAE,IACV6nkB,EAAQ7nkB,EAAE;AAGV,IAFA,IAAI+lF,EAAe,EAAGiqY,EAAkB,EACpC95Q,EAAoB4vX,EAAI3C,UAAU,GAChCp9e,EAAI+/e,EAAI3C,UAAUxikB,SAAUolF,GACjCmwH,EAAO4vX,EAAI3C,UAAUp9e,IACZlE,WAETmuY,EAAO95Q,EAAKr0H,QAAQlhF,QACV,OACVu1M,EAAK52L,MAAQ2+D,EACb4pf,EAAS73G,EAAO,KAAW;AAG5B,IADA63G,EAAS7nkB,EAAE,GAAK,GAAM,GACV,IAANgB,EAAE7D,GAAW6D,EAAEuhkB,aAAa,EAAGuF,EAAOhD;AAE5C,IADA7mf,EAAIv9E,EAAI,EACJqlF,EAAI,EAAGA,EAAI+/e,EAAI3C,UAAUxikB,SAAUolF,GACtCmwH,EAAO4vX,EAAI3C,UAAUp9e,IACZlE,YAETmuY,EAAO95Q,EAAKr0H,QAAQlhF,SACRqvd,GAAQ,OACpB95Q,EAAK52L,MAAQ2+D,EACb4pf,EAAS73G,EAAO,IAAS;AAE1B,KAAY,IAANhvd,EAAE7D,GAAW6D,EAAEuhkB,aAAa,EAAGuF,EAAOhD;AAC5C,IAAIpkkB,EAAI,EAAGA,EAAIV,EAAE,IAAI,IAAKU,EAAG,CAC5B,IAAIslkB,EAAKF,EAAI1C,UAAU1ikB;AACvB,GAAIslkB,GAAoB,IAAdA,EAAGrlkB,OAAb,CAMAu1M,EAAO4vX,EAAI3C,UAAUzikB,GACZ,IAANA,IAASw1M,EAAK52L,MAAQ42L,EAAKz3L,KAAOy3L,EAAK52L,MAAQ,EAAIwljB;AACtD,IAAImD,EAAwB,IAANvnkB,GAAW2lkB,EAAMz3iB,MAASsnL,EAAK1tM;AASrD,GARAwnd,EAAO,GAAGi4G,EAAItnkB,OAAO,GACrBK,EAAEuhkB,YAAY,GAAI0F,EAAK,WACvBjnkB,EAAEuhkB,YAAY,EAAGvyG,GACjBhvd,EAAEuhkB,YAAY,EAAGrsX,EAAKhyM,MACtBlD,EAAEuhkB,YAAY,EAAGrsX,EAAKxwM,OACtB1E,EAAEuhkB,aAAa,EAAGrsX,EAAKl2M,GACvBgB,EAAEuhkB,aAAa,EAAGrsX,EAAKv9L,GACvB3X,EAAEuhkB,aAAa,EAAGrsX,EAAKz6L,GACnBy6L,EAAKmvX,MACJrkkB,EAAEuhkB,YAAY,GAAIrsX,EAAKmvX,MAAO;KADnB,IAAIt/e,EAAI,EAAGA,EAAI,IAAKA,EAAG/kF,EAAEuhkB,YAAY,EAAG;AAExDvhkB,EAAEuhkB,YAAY,EAAGrsX,EAAK7zL,OAAS,GAC/BrhB,EAAEuhkB,YAAY,EAAG,GAAIvhkB,EAAEuhkB,YAAY,EAAG,GACtCvhkB,EAAEuhkB,YAAY,EAAG,GAAIvhkB,EAAEuhkB,YAAY,EAAG,GACtCvhkB,EAAEuhkB,YAAY,EAAGrsX,EAAK52L,OACtBte,EAAEuhkB,YAAY,EAAGrsX,EAAKz3L,MAAOzd,EAAEuhkB,YAAY,EAAG,EAlB9C,KALA,CACC,IAAIx8e,EAAI,EAAGA,EAAI,KAAMA,EAAG/kF,EAAEuhkB,YAAY,EAAG;AACzC,IAAIx8e,EAAI,EAAGA,EAAI,IAAKA,EAAG/kF,EAAEuhkB,YAAY,GAAI;AACzC,IAAIx8e,EAAI,EAAGA,EAAI,KAAMA,EAAG/kF,EAAEuhkB,YAAY,EAAG,EAE1C,CAmBD,CACA,IAAI7hkB,EAAI,EAAGA,EAAIolkB,EAAI3C,UAAUxikB,SAAUD,EAGtC,IAFAw1M,EAAO4vX,EAAI3C,UAAUzikB,IAEb+d,MAAQ,KAEf,GADAzd,EAAE7D,EAAK+4M,EAAK52L,MAAM,GAAM,EACpB26iB,GAAWC,OAAOgB,SAAShlX,EAAKr0H,SACnCq0H,EAAKr0H,QAAQo2E,KAAKj3J,EAAGA,EAAE7D,EAAG,EAAG+4M,EAAKz3L,MAElCzd,EAAE7D,GAAM+4M,EAAKz3L,KAAO,KAAQ;IACtB,CACN,IAAIsnE,EAAI,EAAGA,EAAImwH,EAAKz3L,OAAQsnE,EAAG/kF,EAAEuhkB,YAAY,EAAGrsX,EAAKr0H,QAAQkE;AAC7D,KAAU,IAAJA,IAAaA,EAAG/kF,EAAEuhkB,YAAY,EAAG,EACxC,CAGF,IAAI7hkB,EAAI,EAAGA,EAAIolkB,EAAI3C,UAAUxikB,SAAUD,EAGtC,IAFAw1M,EAAO4vX,EAAI3C,UAAUzikB,IAEb+d,KAAO,GAAKy3L,EAAKz3L,KAAO,KAC/B,GAAIw7iB,GAAWC,OAAOgB,SAAShlX,EAAKr0H,SACnCq0H,EAAKr0H,QAAQo2E,KAAKj3J,EAAGA,EAAE7D,EAAG,EAAG+4M,EAAKz3L,MAElCzd,EAAE7D,GAAM+4M,EAAKz3L,KAAO,IAAO;IACrB,CACN,IAAIsnE,EAAI,EAAGA,EAAImwH,EAAKz3L,OAAQsnE,EAAG/kF,EAAEuhkB,YAAY,EAAGrsX,EAAKr0H,QAAQkE;AAC7D,KAAU,GAAJA,IAAYA,EAAG/kF,EAAEuhkB,YAAY,EAAG,EACvC,CAGF,GAAItI,EACHj5jB,EAAE7D,EAAI6D,EAAEL;KAGR,KAAMK,EAAE7D,EAAI6D,EAAEL,QAAQK,EAAEuhkB,YAAY,EAAG;AAExC,OAAOvhkB,CACR,CApqBAy4C,EAAQ27C,QAAU;AA0rBlB,IAmDI8ye,EAnDAvC,EAAO,GAGPb,GAAc,EAEdZ,EAAmB,mBACnB0D,EAAa,CAAC,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,KACxDxB,EAAe,mCACf0B,EAAS,CAEZK,YAAa,EACbJ,SAAU,EACVC,SAAU,EACVlD,WAAYA,EACZsD,UAAW,EAEXlE,iBAAkBA,EAClBmE,qBAAsB,OACtBC,WAAY,EACZC,UAAW,EACXnC,aAAcA,EAEdoC,WAAY,CAAC,UAAU,UAAU,SAAS,YAAY,WAAW;AAUlE,SAAS1N,EAAI95jB,GAEZ,IADA,IAAIm4P,EAAM,IAAIllP,MAAMjT,EAAEL,QACdD,EAAI,EAAGA,EAAIM,EAAEL,SAAUD,EAAGy4P,EAAIz4P,GAAKqwC,OAAOiB,aAAahxC,EAAEN;AACjE,OAAOy4P,EAAIjhP,KAAK,GACjB,CAiCA,SAASmvjB,EAAgBnsC,GACxB,OAAOgtC,EAAQA,EAAMO,eAAevtC,GAAWwtC,GAASxtC,EACzD,CACA,IAAIytC,EAAa,CAAE,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAG7EC,EAAS,CAAI,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAI,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,KAGvJC,EAAS,CAAG,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO;AAE7J,SAASC,EAAWlokB,GAAK,IAAI1B,EAA0B,QAAjB0B,GAAG,EAAIA,GAAG,IAAsC,QAAjBA,GAAG,EAAIA,GAAG;AAAmB,OAA6B,KAApB1B,GAAG,GAAOA,GAAG,EAAIA,EAAS,CAKrI,IAHA,IAAI6pkB,EAAyC,oBAAfzwX,WAE1B0wX,EAAWD,EAAmB,IAAIzwX,WAAW,KAAQ,GACjD19J,EAAI,EAAGA,EAAK,MAASA,EAAGouhB,EAASpuhB,GAAKkuhB,EAAWluhB;AAEzD,SAASquhB,EAAWrokB,EAAGya,GACtB,IAAIm2P,EAAMw3T,EAAa,IAAJpokB;AACnB,OAAGya,GAAK,EAAUm2P,IAAS,EAAEn2P,GAC7Bm2P,EAAOA,GAAO,EAAKw3T,EAAUpokB,GAAG,EAAG,KAChCya,GAAK,GAAWm2P,IAAS,GAAGn2P,GAC/Bm2P,EAAOA,GAAO,EAAKw3T,EAAUpokB,GAAG,GAAI,QACpB,GAAGya,EACpB,CAGA,SAAS6tjB,EAAY7O,EAAK50R,GAAM,IAAIxwR,EAAQ,EAAHwwR,EAAOtkS,EAAKskS,IAAK;AAAI,OAAS40R,EAAIl5jB,IAAI8T,GAAK,EAAI,EAAIoljB,EAAIl5jB,EAAE,IAAI,MAAM8T,EAAI,CAAM,CACtH,SAASk0jB,EAAY9O,EAAK50R,GAAM,IAAIxwR,EAAQ,EAAHwwR,EAAOtkS,EAAKskS,IAAK;AAAI,OAAS40R,EAAIl5jB,IAAI8T,GAAK,EAAI,EAAIoljB,EAAIl5jB,EAAE,IAAI,MAAM8T,EAAI,CAAM,CAEtH,SAASm0jB,EAAY/O,EAAK50R,GAAM,IAAIxwR,EAAQ,EAAHwwR,EAAOtkS,EAAKskS,IAAK;AAAI,OAAS40R,EAAIl5jB,IAAI8T,GAAK,EAAI,EAAIoljB,EAAIl5jB,EAAE,IAAI,MAAM8T,EAAI,EAAM,CACtH,SAASo0jB,EAAYhP,EAAK50R,GAAM,IAAIxwR,EAAQ,EAAHwwR,EAAOtkS,EAAKskS,IAAK;AAAI,OAAS40R,EAAIl5jB,IAAI8T,GAAK,EAAI,EAAIoljB,EAAIl5jB,EAAE,IAAI,MAAM8T,EAAI,GAAM,CAGtH,SAASq0jB,EAAYjP,EAAK50R,EAAI7kS,GAC7B,IAAIqU,EAAQ,EAAHwwR,EAAOtkS,EAAKskS,IAAK,EAAIn5R,GAAM,GAAG1L,GAAG,EACtC8Q,EAAI2ojB,EAAIl5jB,KAAO8T;AACnB,OAAGrU,EAAI,EAAIqU,EAAUvD,EAAIpF,GACzBoF,GAAK2ojB,EAAIl5jB,EAAE,IAAK,EAAE8T,EACfrU,EAAI,GAAKqU,EAAUvD,EAAIpF,GAC1BoF,GAAK2ojB,EAAIl5jB,EAAE,IAAK,GAAG8T,EAChBrU,EAAI,GAAKqU,EAAUvD,EAAIpF,GAC1BoF,GAAK2ojB,EAAIl5jB,EAAE,IAAK,GAAG8T,GACR3I,GACZ,CAGA,SAASi9jB,EAAalP,EAAK50R,EAAI/zR,GAAK,IAAIuD,EAAS,EAALwwR,EAAQtkS,EAAIskS,IAAO;AAM9D,OALGxwR,GAAK,EAAGoljB,EAAIl5jB,KAAW,EAAJuQ,IAAUuD,GAE/BoljB,EAAIl5jB,IAAOuQ,GAAKuD,EAAK,IACrBoljB,EAAIl5jB,EAAE,IAAQ,EAAFuQ,IAAS,EAAEuD,GAEjBwwR,EAAK,CACb,CAEA,SAAS+jS,EAAanP,EAAK50R,EAAI/zR,GAI9B,OAFAA,GAAO,EAAFA,KADQ,EAAL+zR,GAER40R,EAFoB50R,IAAO,IAEjB/zR,EACH+zR,EAAK,CACb,CACA,SAASgkS,EAAapP,EAAK50R,EAAI/zR,GAC9B,IAAgBvQ,EAAIskS,IAAO;AAI3B,OAHA/zR,IADa,EAAL+zR,EAER40R,EAAIl5jB,IAAW,IAAJuQ,EAAUA,KAAO,EAC5B2ojB,EAAIl5jB,EAAE,GAAKuQ,EACJ+zR,EAAK,CACb,CACA,SAASikS,EAAcrP,EAAK50R,EAAI/zR,GAC/B,IAAgBvQ,EAAIskS,IAAO;AAK3B,OAJA/zR,IADa,EAAL+zR,EAER40R,EAAIl5jB,IAAW,IAAJuQ,EAAUA,KAAO,EAC5B2ojB,EAAIl5jB,EAAE,GAAS,IAAJuQ,EACX2ojB,EAAIl5jB,EAAE,GAAKuQ,IAAM,EACV+zR,EAAK,EACb,CAGA,SAASkkS,EAAQtujB,EAAGqmR,GACnB,IAAI1hS,EAAIqb,EAAE1a,OAAQq9E,EAAI,EAAEh+E,EAAI0hS,EAAK,EAAE1hS,EAAI0hS,EAAK,EAAGhhS,EAAI;AACnD,GAAGV,GAAK0hS,EAAI,OAAOrmR;AACnB,GAAG4+iB,EAAS,CACX,IAAIj5jB,EAAIy5jB,EAAez8e;AAEvB,GAAG3iE,EAAE48I,KAAM58I,EAAE48I,KAAKj3J;KACb,KAAMN,EAAI2a,EAAE1a,SAAUD,EAAGM,EAAEN,GAAK2a,EAAE3a;AACvC,OAAOM,CACR,CAAO,GAAG+nkB,EAAkB,CAC3B,IAAI7nkB,EAAI,IAAIo3M,WAAWt6H;AACvB,GAAG98E,EAAE+rB,IAAK/rB,EAAE+rB,IAAI5R;KACX,KAAM3a,EAAIV,IAAKU,EAAGQ,EAAER,GAAK2a,EAAE3a;AAChC,OAAOQ,CACR,CAEA,OADAma,EAAE1a,OAASq9E,EACJ3iE,CACR,CAGA,SAASuujB,EAAgBhpkB,GAExB,IADA,IAAII,EAAI,IAAIiT,MAAMrT,GACVF,EAAI,EAAGA,EAAIE,IAAKF,EAAGM,EAAEN,GAAK;AAClC,OAAOM,CACR,CAGA,SAAS6okB,EAAWC,EAAOC,EAAMC,GAChC,IAAI7O,EAAS,EAAGlmjB,EAAI,EAAGvU,EAAI,EAAGqlF,EAAI,EAAGkkf,EAAQ,EAAGjqkB,EAAI8pkB,EAAMnpkB,OAEtDupkB,EAAYnB,EAAmB,IAAIoB,YAAY,IAAMP,EAAgB;AACzE,IAAIlpkB,EAAI,EAAGA,EAAI,KAAMA,EAAGwpkB,EAASxpkB,GAAK;AAEtC,IAAIA,EAAIV,EAAGU,EAAIspkB,IAAOtpkB,EAAGopkB,EAAMppkB,GAAK;AACpCV,EAAI8pkB,EAAMnpkB;AAEV,IAAIypkB,EAAQrB,EAAmB,IAAIoB,YAAYnqkB,GAAK4pkB,EAAgB5pkB;AAGpE,IAAIU,EAAI,EAAGA,EAAIV,IAAKU,EACnBwpkB,EAAUj1jB,EAAI60jB,EAAMppkB,MACjBy6jB,EAASlmjB,IAAGkmjB,EAASlmjB,GACxBm1jB,EAAM1pkB,GAAK;AAGZ,IADAwpkB,EAAS,GAAK,EACVxpkB,EAAI,EAAGA,GAAKy6jB,IAAUz6jB,EAAGwpkB,EAASxpkB,EAAE,IAAOupkB,EAASA,EAAQC,EAASxpkB,EAAE,IAAK;AAChF,IAAIA,EAAI,EAAGA,EAAIV,IAAKU,EAEP,IADZupkB,EAAQH,EAAMppkB,MACC0pkB,EAAM1pkB,GAAKwpkB,EAASD,EAAM;AAI1C,IAAII,EAAQ;AACZ,IAAI3pkB,EAAI,EAAGA,EAAIV,IAAKU,EAEnB,GAAY,IADZ2pkB,EAAQP,EAAMppkB,IAGb,IADAupkB,EAAQhB,EAAWmB,EAAM1pkB,GAAIy6jB,IAAUA,EAAOkP,EAC1Ctkf,GAAK,GAAIo1e,EAAS,EAAIkP,GAAU,EAAGtkf,GAAG,IAAKA,EAC9Cgkf,EAAKE,EAAOlkf,GAAGskf,GAAiB,GAANA,EAAa3pkB,GAAG;AAG7C,OAAOy6jB,CACR,CAGA,IAAImP,GAAWvB,EAAmB,IAAIoB,YAAY,KAAOP,EAAgB,KACrEW,GAAWxB,EAAmB,IAAIoB,YAAY,IAAOP,EAAgB;AACzE,IAAIb,EAAkB,CACrB,IAAI,IAAIrokB,GAAI,EAAGA,GAAI,MAAOA,GAAG4pkB,GAAS5pkB,IAAK;AAC3C,IAAIA,GAAI,EAAGA,GAAI,KAAMA,GAAG6pkB,GAAS7pkB,IAAK,CACvC,EACA,WAGC,IAFA,IAAI8pkB,EAA0B,GAC1B9pkB,EAAI,EACHA,EAAE,GAAIA,IAAK8pkB,EAAMxikB,KAAK;AAC3B6hkB,EAAWW,EAAOD,GAAU;AAE5B,IAAIT,EAA0B;AAE9B,IADAppkB,EAAI,EACEA,GAAG,IAAKA,IAAKopkB,EAAM9hkB,KAAK;AAC9B,KAAMtH,GAAG,IAAKA,IAAKopkB,EAAM9hkB,KAAK;AAC9B,KAAMtH,GAAG,IAAKA,IAAKopkB,EAAM9hkB,KAAK;AAC9B,KAAMtH,GAAG,IAAKA,IAAKopkB,EAAM9hkB,KAAK;AAC9B6hkB,EAAWC,EAAOQ,GAAU,IAC5B,CAbD;AAaK,IAAIG,GAA4B,WAGpC,IAFA,IAAIC,EAAY3B,EAAmB,IAAIzwX,WAAW,OAAU,GACxDvyH,EAAI,EAAGjqE,EAAI,EACTiqE,EAAI8if,EAAOlokB,OAAS,IAAKolF,EAC9B,KAAMjqE,EAAI+sjB,EAAO9if,EAAE,KAAMjqE,EAAG4ujB,EAAU5ujB,GAAKiqE;AAE5C,KAAKjqE,EAAI,QAASA,EAAG4ujB,EAAU5ujB,GAAK;AAEpC,IAAI6ujB,EAAY5B,EAAmB,IAAIzwX,WAAW,KAAS;AAC3D,IAAIvyH,EAAI,EAAGjqE,EAAI,EAAGiqE,EAAI6if,EAAOjokB,OAAS,IAAKolF,EAC1C,KAAMjqE,EAAI8sjB,EAAO7if,EAAE,KAAMjqE,EAAG6ujB,EAAU7ujB,GAAKiqE;AAgG5C,OAAO,SAAqB14D,EAAM8rO,GACjC,OAAG9rO,EAAK1sB,OAAS,EA9FlB,SAAsB0sB,EAAM8rO,GAE3B,IADA,IAAIyxU,EAAO,EACLA,EAAOv9iB,EAAK1sB,QAAQ,CACzB,IAAIX,EAAImD,KAAK8b,IAAI,MAAQoO,EAAK1sB,OAASiqkB,GACnCzpkB,EAAIypkB,EAAO5qkB,GAAKqtB,EAAK1sB;AAIzB,IAHAw4P,EAAIopU,YAAY,GAAIphkB,GACpBg4P,EAAIopU,YAAY,EAAGvikB,GACnBm5P,EAAIopU,YAAY,EAAU,OAALvikB,GACfA,KAAM,GAAGm5P,EAAIA,EAAIh8P,KAAOkwB,EAAKu9iB,IACpC,CACA,OAAOzxU,EAAIh8P,CACZ,CAXA,CA8FyCkwB,EAAM8rO,GAhF/C,SAA0B9rO,EAAM8rO,GAI/B,IAHA,IAAIssC,EAAK,EACLmlS,EAAO,EACPC,EAAQ9B,EAAmB,IAAIoB,YAAY,OAAU,GACnDS,EAAOv9iB,EAAK1sB,QAAQ,CACzB,IAAIX,EAA8BmD,KAAK8b,IAAI,MAAQoO,EAAK1sB,OAASiqkB;AAGjE,GAAG5qkB,EAAI,GAAP,CAMC,IAJQ,GADRylS,EAAK8jS,EAAapwU,EAAKssC,KAAQmlS,EAAO5qkB,GAAKqtB,EAAK1sB,YACrC8kS,GAAM,GAAU,EAALA,IACtBtsC,EAAIh8P,EAAKsoS,EAAK,EAAK,EACnBtsC,EAAIopU,YAAY,EAAGvikB,GACnBm5P,EAAIopU,YAAY,EAAU,OAALvikB,GACfA,KAAM,GAAGm5P,EAAIA,EAAIh8P,KAAOkwB,EAAKu9iB;AACnCnlS,EAAa,EAARtsC,EAAIh8P,CAEV,KATA,CAWAsoS,EAAK8jS,EAAapwU,EAAKssC,KAAQmlS,EAAO5qkB,GAAKqtB,EAAK1sB,QAAU;AAE1D,IADA,IAAIylM,EAAO,EACLpmM,KAAM,GAAG,CACd,IAAID,EAAIstB,EAAKu9iB,GAGT3tiB,GAAS,EAAG6tiB,EAAO;AAEvB,IAAI7tiB,EAAQ4tiB,EAJZzkY,EAA2B,OAAlBA,GAAQ,EAAKrmM,QAKrBk9B,IAAgB,MAAP2tiB,GACEA,IAAM3tiB,GAAS,OACvBA,EAAQ2tiB,GAAM,KAAMv9iB,EAAK4P,EAAQ6tiB,IAASz9iB,EAAKu9iB,EAAOE,IAASA,EAAO,OAAOA;AAGjF,GAAGA,EAAO,EAAG,EAEZ/qkB,EAAI4qkB,EAAUG,KACN,GAAIrlS,EAAKgkS,EAAatwU,EAAKssC,EAAIujS,EAASjpkB,EAAE,IAAI,GAAK,GAE1D0pkB,EAAatwU,EAAKssC,EAAI,GAEtBgkS,EAAatwU,EADbssC,GAAM,EACgBujS,EAASjpkB,EAAE,KAAK,GACtC0lS,GAAM;AAEP,IAAIslS,EAAUhrkB,EAAI,EAAK,EAAMA,EAAI,GAAI;AAClCgrkB,EAAS,IACXrB,EAAcvwU,EAAKssC,EAAIqlS,EAAOlC,EAAO7okB,IACrC0lS,GAAMslS,GAGPhrkB,EAAI2qkB,EAAUE,EAAO3tiB,GACrBwoQ,EAAKgkS,EAAatwU,EAAKssC,EAAIujS,EAASjpkB,IAAI,GACxC0lS,GAAM;AAEN,IAAIulS,EAASjrkB,EAAI,EAAI,EAAKA,EAAE,GAAI;AAC7BirkB,EAAS,IACXtB,EAAcvwU,EAAKssC,EAAImlS,EAAO3tiB,EAAQ4riB,EAAO9okB,IAC7C0lS,GAAMulS;AAEP,IAAI,IAAIpwhB,EAAI,EAAGA,EAAIkwhB,IAAQlwhB,EAC1BiwhB,EAAMzkY,GAAe,MAAPwkY,EACdxkY,EAAoC,OAA3BA,GAAQ,EAAK/4K,EAAKu9iB,MACzBA;AAEH5qkB,GAAI8qkB,EAAO,CACZ,MAEI/qkB,GAAK,IAAKA,GAAQ,GAChB0lS,EAAK+jS,EAAarwU,EAAKssC,EAAI,GAChCA,EAAKgkS,EAAatwU,EAAKssC,EAAIujS,EAASjpkB,IACpC8qkB,EAAMzkY,GAAe,MAAPwkY,IACZA,CAEJ,CAEAnlS,EAAKgkS,EAAatwU,EAAKssC,EAAI,GAAK,CAzDhC,CA0DD,CAEA,OADAtsC,EAAIh8P,GAAMsoS,EAAK,GAAG,EAAG,EACdtsC,EAAIh8P,CACZ,CA9EA,CAiFyBkwB,EAAM8rO,EAC/B,CACD,CA9GqC;AAgHrC,SAASuvU,GAASr7iB,GACjB,IAAIgtiB,EAAMuL,GAAQ,GAAGzikB,KAAKE,MAAkB,IAAZgqB,EAAK1sB,SACjC8T,EAAMg2jB,GAAYp9iB,EAAMgtiB;AAC5B,OAAOA,EAAI75jB,MAAM,EAAGiU,EACrB,CAGA,IAAIw2jB,GAAWlC,EAAmB,IAAIoB,YAAY,OAASP,EAAgB,OACvEsB,GAAWnC,EAAmB,IAAIoB,YAAY,OAASP,EAAgB,OACvEuB,GAAWpC,EAAmB,IAAIoB,YAAY,KAASP,EAAgB,KACvEwB,GAAY,EAAGC,GAAY;AAG/B,SAASC,GAAIj+iB,EAAMu9iB,GAElB,IAAIW,EAAQnC,EAAY/7iB,EAAMu9iB,GAAQ,IAClCY,EAASpC,EAAY/7iB,EADkBu9iB,GAAQ,GACZ,EACnCa,EAvQL,SAAqBpR,EAAK50R,GAAM,IAAIxwR,EAAQ,EAAHwwR,EAAOtkS,EAAKskS,IAAK;AAAI,OAAS40R,EAAIl5jB,IAAI8T,GAAK,EAAI,EAAIoljB,EAAIl5jB,EAAE,IAAI,MAAM8T,EAAI,EAAM,CAAtH,CAuQ0BoY,EADiBu9iB,GAAQ,GACX;AAAGA,GAAQ;AAUlD,IATA,IAAI31jB,EAAI,EAGJ60jB,EAAQf,EAAmB,IAAIzwX,WAAW,IAAMsxX,EAAgB,IAChEQ,EAAQ,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChEjP,EAAS,EACT+O,EAAYnB,EAAmB,IAAIzwX,WAAW,GAAKsxX,EAAgB,GACnE8B,EAAY3C,EAAmB,IAAIzwX,WAAW,GAAKsxX,EAAgB,GACnE5pkB,EAAI8pkB,EAAMnpkB,OACND,EAAI,EAAGA,EAAI+qkB,IAAU/qkB,EAC5BopkB,EAAMnB,EAAWjokB,IAAMuU,EAAIk0jB,EAAY97iB,EAAMu9iB,GAC1CzP,EAASlmjB,IAAGkmjB,EAASlmjB,GACxBi1jB,EAASj1jB,KACT21jB,GAAQ;AAIT,IAAIX,EAAQ;AAEZ,IADAC,EAAS,GAAK,EACVxpkB,EAAI,EAAGA,GAAKy6jB,IAAUz6jB,EAAGgrkB,EAAUhrkB,GAAKupkB,EAASA,EAAQC,EAASxpkB,EAAE,IAAK;AAC7E,IAAIA,EAAI,EAAGA,EAAIV,IAAKU,EAA4B,IAArBupkB,EAAQH,EAAMppkB,MAAU0pkB,EAAM1pkB,GAAKgrkB,EAAUzB;AAExE,IAAII,EAAQ;AACZ,IAAI3pkB,EAAI,EAAGA,EAAIV,IAAKU,EAEnB,GAAY,IADZ2pkB,EAAQP,EAAMppkB,IACC,CACdupkB,EAAQjB,EAASoB,EAAM1pkB,KAAM,EAAE2pkB;AAC/B,IAAI,IAAItkf,GAAK,GAAI,EAAEskf,GAAQ,EAAGtkf,GAAG,IAAKA,EAAGolf,GAASlB,EAAOlkf,GAAGskf,GAAiB,EAANA,EAAY3pkB,GAAG,CACvF,CAID,IAAIirkB,EAA2B;AAE/B,IADAxQ,EAAS,EACHwQ,EAAOhrkB,OAAS4qkB,EAAQC,GAG7B,OADAZ,GAAgB,GADhBX,EAAQkB,GAAS9B,EAAYh8iB,EAAMu9iB,KAE3BX,KAAW,GAClB,KAAK,GAGJ,IAFAh1jB,EAAI,EAAIi0jB,EAAY77iB,EAAMu9iB,GAAOA,GAAQ,EACzCX,EAAQ0B,EAAOA,EAAOhrkB,OAAS,GACzBsU,KAAM,GAAG02jB,EAAO3jkB,KAAKiikB;AAC3B;AACD,KAAK,GAEJ,IADAh1jB,EAAI,EAAIk0jB,EAAY97iB,EAAMu9iB,GAAOA,GAAQ,EACnC31jB,KAAM,GAAG02jB,EAAO3jkB,KAAK;AAC3B;AACD,KAAK,GAEJ,IADAiN,EAAI,GAAKo0jB,EAAYh8iB,EAAMu9iB,GAAOA,GAAQ,EACpC31jB,KAAO,GAAG02jB,EAAO3jkB,KAAK;AAC5B;AACD,QACC2jkB,EAAO3jkB,KAAKiikB,GACT9O,EAAS8O,IAAO9O,EAAS8O,GAM/B,IAAIhyM,EAAK0zM,EAAOnrkB,MAAM,EAAG+qkB,GAAQrzM,EAAKyzM,EAAOnrkB,MAAM+qkB;AACnD,IAAI7qkB,EAAI6qkB,EAAO7qkB,EAAI,MAAOA,EAAGu3X,EAAGv3X,GAAK;AACrC,IAAIA,EAAI8qkB,EAAQ9qkB,EAAI,KAAMA,EAAGw3X,EAAGx3X,GAAK;AAGrC,OAFA0qkB,GAAYvB,EAAW5xM,EAAIgzM,GAAU,KACrCI,GAAYxB,EAAW3xM,EAAIgzM,GAAU,IAC9BN,CACR,CAiFA,SAASgB,GAAS1wC,EAAS2wC,GAC1B,IACI1yU,EAhFL,SAAiB9rO,EAAMw+iB,GAEtB,GAAc,GAAXx+iB,EAAK,MAAuB,EAAVA,EAAK,IAAa,MAAO,CAACktiB,EAAYsR,GAAM;AAajE,IAVA,IAAIjB,EAAO,EAGPlvjB,EAAS,EAET0rjB,EAAS3M,EAAeoR,GAAa,GAAG,IACxCC,EAAO,EACPC,EAAK3E,EAAOzmkB,SAAS,EACrBqrkB,EAAY,EAAGC,EAAY,IAEjB,EAAPvwjB,IAEN,GADAA,EAASytjB,EAAY97iB,EAAMu9iB,GAAOA,GAAQ,EACtClvjB,IAAW,GAAM,EAoBrB,IARWA,GAAU,GAAM,GAE1BswjB,EAAY,EAAGC,EAAY,IAG3BrB,EAAOU,GAAIj+iB,EAAMu9iB,GACjBoB,EAAYZ,GAAWa,EAAYZ,MAE5B,EACHQ,GAAQE,EAAKD,EAAO,QAAkDC,GAAxC3E,EAASuC,EAAQvC,EAAQ0E,EAAO,QAAoBnrkB;AAEtF,IAAIurkB,EAAO5C,EAAYj8iB,EAAMu9iB,EAAMoB,GAC/Bn1jB,EAAQ6E,IAAS,GAAM,EAAI4ujB,GAAS4B,GAAQjB,GAASiB;AAGzD,GAFAtB,GAAe,GAAP/zjB,GAAWA,KAAU,KAEjB,EAAG,IACV,IAAW,KAARA,EAAa;AAGpB,IAAIk0jB,GADJl0jB,GAAQ,KACa,EAAK,EAAMA,EAAK,GAAI;AAAOk0jB,EAAS,IAAGA,EAAS;AACrE,IAAI5hI,EAAM2iI,EAAOlD,EAAO/xjB;AAErBk0jB,EAAS,IACX5hI,GAAOmgI,EAAYj8iB,EAAMu9iB,EAAMG,GAC/BH,GAAQG,GAITmB,EAAO5C,EAAYj8iB,EAAMu9iB,EAAMqB,GAE/BrB,GAAe,IADf/zjB,EAAQ6E,IAAS,GAAM,EAAI6ujB,GAAS2B,GAAQhB,GAASgB;AAErD,IAAIlB,GADen0jB,KAAU,GACR,EAAI,EAAKA,EAAK,GAAI,EACnCs1jB,EAAMtD,EAAOhyjB;AASjB,IAPGm0jB,EAAS,IACXmB,GAAO7C,EAAYj8iB,EAAMu9iB,EAAMI,GAC/BJ,GAAQI,IAILa,GAAOE,EAAK5iI,IAA4C4iI,GAArC3E,EAASuC,EAAQvC,EAAQj+H,EAAM,MAAkBxoc,QAClEmrkB,EAAO3iI,GAAOi+H,EAAO0E,GAAQ1E,EAAO0E,EAAOK,KAAQL,CAC1D,MA3B4B1E,EAAO0E,KAAUj1jB,CA4B9C,KAvDA,CAEW,EAAP+zjB,IAAUA,GAAQ,GAAU,EAALA;AAE1B,IAAIlpS,EAAKr0Q,EAAKu9iB,IAAO,GAAKv9iB,GAAMu9iB,IAAO,GAAG,IAAI;AAG9C,GAFAA,GAAQ,GAELlpS,EAAK,EAEP,KADImqS,GAAOE,EAAKD,EAAOpqS,IAA2CqqS,GAArC3E,EAASuC,EAAQvC,EAAQ0E,EAAOpqS,IAAiB/gS,QACxE+gS,KAAO,GAAK0lS,EAAO0E,KAAUz+iB,EAAKu9iB,IAAO,GAAIA,GAAQ,CAU7D,CAsCD,OAAGiB,EAAY,CAACzE,EAASwD,EAAK,IAAK,GAC5B,CAACxD,EAAO5mkB,MAAM,EAAGsrkB,GAAQlB,EAAK,IAAK,EAC3C,CA5EA,CA+EY1vC,EAAQ16hB,MAAM06hB,EAAQ/9hB,GAAG,GACZ0ukB;AAExB,OADA3wC,EAAQ/9hB,GAAKg8P,EAAI,GACVA,EAAI,EACZ,CAEA,SAASizU,GAAcC,EAAK3lhB,GAC3B,IAAG2lhB,EACE,MAAM,IAAIvrkB,MAAM4lD;AADW,oBAAZ/wC,SAAyBA,QAAQwD,MAAMutC,EAE5D,CAEA,SAASs8gB,GAAU9sX,EAAmB9zM,GACrC,IAAIu1M,EAAyBzB;AAC7BwsX,GAAU/qX,EAAM;AAEhB,IACI32M,EAAI,CACPmikB,UAFgC,GAGhCC,UAHkE;AAKnEC,EAASrikB,EAAG,CAAE4tB,KAAMxsB,EAAQwsB;AAI5B,IADA,IAAIluB,EAAIi3M,EAAKh3M,OAAS,GACJ,IAAXg3M,EAAKj3M,IAA2B,IAAbi3M,EAAKj3M,EAAE,IAA2B,GAAbi3M,EAAKj3M,EAAE,IAA2B,GAAbi3M,EAAKj3M,EAAE,KAAeA,GAAK,KAAKA;AACpGi3M,EAAKx6M,EAAIuD,EAAI,EAGbi3M,EAAKx6M,GAAK;AACV,IAAIomkB,EAAO5rX,EAAKgrX,WAAW;AAC3BhrX,EAAKx6M,GAAK;AACV,IAAI6pkB,EAAWrvX,EAAKgrX,WAAW;AAK/B,IAFAhrX,EAAKx6M,EAAI6pkB,EAELtmkB,EAAI,EAAGA,EAAI6ikB,IAAQ7ikB,EAAG,CAEzBi3M,EAAKx6M,GAAK;AACV,IAAImvkB,EAAM30X,EAAKgrX,WAAW,GACtBkJ,EAAMl0X,EAAKgrX,WAAW,GACtBwC,EAAUxtX,EAAKgrX,WAAW,GAC1B4J,EAAO50X,EAAKgrX,WAAW,GACvB6J,EAAO70X,EAAKgrX,WAAW;AAC3BhrX,EAAKx6M,GAAK;AACV,IAAIihB,EAASu5L,EAAKgrX,WAAW,GACzB8J,EAAKhK,EAAyB9qX,EAAKn3M,MAAMm3M,EAAKx6M,EAAEgokB,EAASxtX,EAAKx6M,EAAEgokB,EAAQoH;AAC5E50X,EAAKx6M,GAAKgokB,EAAUoH,EAAOC;AAE3B,IAAIxskB,EAAI23M,EAAKx6M;AACbw6M,EAAKx6M,EAAIihB,EAAS,EAClBsujB,GAAiB/0X,EAAM20X,EAAKT,EAAK7qkB,EAAGyrkB,GACpC90X,EAAKx6M,EAAI6C,CACV,CACA,OAAOgB,CACR,CAIA,SAAS0rkB,GAAiB/0X,EAAiB20X,EAAgBT,EAAgB7qkB,EAAoByrkB,GAE9F90X,EAAKx6M,GAAK;AACV,IAAI62I,EAAQ2jE,EAAKgrX,WAAW,GACxBgK,EAAOh1X,EAAKgrX,WAAW,GACvB7niB,EA9sCL,SAAwBu/hB,GACvB,IAAIiI,EAA0B,MAApBjI,EAAIsI,WAAW,GACrBH,EAA0B,MAApBnI,EAAIsI,WAAW,GACrBpvhB,EAAM,IAAIwG,KACVh6C,EAAU,GAANyikB,EACJj4jB,EAAU,IADMi4jB,KAAS;AACTA,KAAS,EAC7BjvhB,EAAI6yF,gBAAgB,GACpB7yF,EAAI67E,YAAYozc,EAAM,MACtBjvhB,EAAI47E,SAAS5kH,EAAE,GACfgpC,EAAIs7E,QAAQ9uH;AACZ,IAAItC,EAAU,GAAN6kkB,EACJtkf,EAAU,IADMskf,KAAS;AAK7B,OAJoBA,KAAS,EAC7B/uhB,EAAI2nC,SAASonf,GACb/uhB,EAAIwrC,WAAWf,GACfzqC,EAAImzF,WAAWjpI,GAAG,GACX81C,CACR,CAhBA,CA8sC2BokK;AAE1B,GAAW,KAAR3jE,EAAgB,MAAM,IAAIlzI,MAAM;AACvB62M,EAAKgrX,WAAW;AAQb,IARf,IACIiK,EAAOj1X,EAAKgrX,WAAW,GACvBkK,EAAOl1X,EAAKgrX,WAAW,GAEvBwC,EAAUxtX,EAAKgrX,WAAW,GAC1B4J,EAAO50X,EAAKgrX,WAAW,GAGvBn6jB,EAAO,GAAY9H,EAAI,EAAGA,EAAIykkB,IAAWzkkB,EAAG8H,GAAQuoC,OAAOiB,aAAa2lK,EAAKA,EAAKx6M;AACtF,GAAGovkB,EAAM,CACR,IAAI3+c,EAAK60c,EAAyB9qX,EAAKn3M,MAAMm3M,EAAKx6M,EAAGw6M,EAAKx6M,EAAIovkB,KAC1D3+c,EAAG,QAAS,CAAC,GAAGppE,KAAI1pB,EAAO8yF,EAAG,OAAQppE,MACrCiohB,GAAI,CAAC,GAAG,QAAS,CAAC,GAAGjohB,KAAI1pB,EAAO2xiB,EAAG,OAAQjohB,GACjD,CACAmzJ,EAAKx6M,GAAKovkB;AAKV,IAAIl/iB,EAAOsqL,EAAKn3M,MAAMm3M,EAAKx6M,EAAGw6M,EAAKx6M,EAAIyvkB;AACvC,OAAOD,GACN,KAAK,EAAGt/iB,EA1hBV,SAAyB6tgB,EAAS2wC,GACjC,IAAI3D,EAAO,OAAO0D,GAAS1wC,EAAS2wC;AACpC,IACIiB,EAAU,MADG5E,EAAM6E,YAEnB5zU,EAAM2zU,EAAQE,cAAc9xC,EAAQ16hB,MAAM06hB,EAAQ/9hB,GAAI2vkB,EAAQG;AAElE,OADA/xC,EAAQ/9hB,GAAK2vkB,EAAQI,UACd/zU,CACR,CAPA,CA0hBiCxhD,EAAMk1X;AAAO;AAC5C,KAAK,EAAG;AACR,QAAS,MAAM,IAAI/rkB,MAAM,sCAAwC6rkB,GAIlE,IAAIN;AACO,EAARr4b,IAEU,WADJ2jE,EAAKgrX,WAAW,KACUhrX,EAAKgrX,WAAW,GAAI0J,MACtDO,EAAOj1X,EAAKgrX,WAAW,GACvBkK,EAAOl1X,EAAKgrX,WAAW,IAGrBiK,GAAQN,GAAKF,GAAcC,EAAK,wBAA0BC,EAAM,OAASM,GACzEC,GAAQhB,GAAKO,GAAcC,EAAK,0BAA4BR,EAAM,OAASgB,GAG9EM,GAAQnskB,EAAGwH,EAAM6kB,EAAM,CAAC+/iB,UAAc5ohB,GAAI1pB,GAC3C,CA0GA,IAAIuyiB,GAAkB,CACrBC,IAAO,YACPC,IAAO,WAEPC,IAAO,YACPC,IAAO,aACPC,IAAO,YAEPC,IAAO,oBACPC,KAAQ,iCACRC,QAAW;AAGZ,SAASlH,GAAiBpjb,EAAiB8/Z,GAC1C,GAAG9/Z,EAAGuqb,MAAO,OAAOvqb,EAAGuqb;AAEvB,IAAIhoL,EAAMviQ,EAAG/6I,MAAQ,GAAI+B,EAAIu7Y,EAAI7oX,MAAM;AACvC,OAAG1yB,GAAK8ikB,GAAe9ikB,EAAE,KAEtB84iB,IACF94iB,GAAKu7Y,EAAMu9J,GAAIpmhB,MAAM,uBACbowiB,GAAe9ikB,EAAE,IAJW8ikB,GAAe9ikB,EAAE,IAO/C,0BACR,CAGA,SAASs8jB,GAAgB7E,GAGxB,IAFA,IAAI30iB,EAAOusiB,EAAcoI,GACrBhhkB,EAAI,GACAN,EAAI,EAAGA,EAAI2sB,EAAK1sB,OAAQD,GAAI,GAAIM,EAAEgH,KAAKqlB,EAAK7sB,MAAME,EAAGA,EAAE;AAC/D,OAAOM,EAAEkX,KAAK,QAAU,MACzB,CAgBA,SAAS0ujB,GAAuBnjkB,GAC/B,IAAIsqkB,EAAUtqkB,EAAKod,QAAQ,0CAA2C,SAAStc,GAC9E,IAAI0Q,EAAI1Q,EAAE6tC,WAAW,GAAG3hC,SAAS,IAAIrM;AACrC,MAAO,KAAmB,GAAZ6Q,EAAEtU,OAAc,IAAMsU,EAAIA,EACzC;AAIwB,OAFxB84jB,EAAUA,EAAQltjB,QAAQ,OAAQ,OAAOA,QAAQ,QAAS,QAE/C1c,OAAO,KAAY4pkB,EAAU,MAAQA,EAAQvtkB,MAAM;AAI9D,IADA,IAAIQ,EAAsB,GAAIqX,GAF9B01jB,EAAUA,EAAQltjB,QAAQ,aAAc,OAAOA,QAAQ,SAAU,SAASA,QAAQ,gBAAiB,UAErDxI,MAAM,QAC5C4lQ,EAAK,EAAGA,EAAK5lQ,EAAM1X,SAAUs9Q,EAAI,CACxC,IAAI5/O,EAAMhmB,EAAM4lQ;AAChB,GAAiB,GAAd5/O,EAAI19B,OACP,IAAI,IAAID,EAAI,EAAGA,EAAI29B,EAAI19B,QAAS,CAC/B,IAAI4e,EAAM,GACN0jX,EAAM5kW,EAAI79B,MAAME,EAAGA,EAAI6e;AACD,KAAvB0jX,EAAI9+X,OAAOob,EAAM,GAAWA,IACA,KAAvB0jX,EAAI9+X,OAAOob,EAAM,GAAWA,GAAO,EACZ,KAAvB0jX,EAAI9+X,OAAOob,EAAM,KAAWA,GAAO,GAC3C0jX,EAAM5kW,EAAI79B,MAAME,EAAGA,EAAI6e,IACvB7e,GAAK6e,GACE8e,EAAI19B,SAAQsiY,GAAO,KAC1BjiY,EAAEgH,KAAKi7X,EACR,MAXsBjiY,EAAEgH,KAAK,GAY9B,CAEA,OAAOhH,EAAEkX,KAAK,OACf,CAiBA,SAASsrjB,GAAWsC,EAAsBz4iB,EAAwBuB,GAGjE,IAFA,IAAsCo/iB,EAAlCC,EAAQ,GAAIC,EAAM,GAAIJ,EAAQ,GAC9B7K,EAAK,EACJA,EAAK,KAAMA,EAAI,CACnB,IAAIhnjB,EAAOoR,EAAK41iB;AAChB,IAAIhnjB,GAAQA,EAAKghB,MAAM,SAAU;AACjC,IAAI1yB,EAAI0R,EAAKghB,MAAM;AACnB,GAAG1yB,EAAG,OAAOA,EAAE,GAAGka,eACjB,IAAK,mBAAoBwpjB,EAAQ1jkB,EAAE,GAAGmoG;AAAQ;AAC9C,IAAK,eAAgBo7d,EAAQvjkB,EAAE,GAAGmoG;AAAQ;AAC1C,IAAK,4BAA6Bw7d,EAAM3jkB,EAAE,GAAGmoG,OAE/C,CAEA,SADEuwd,EACKiL,EAAIzpjB,eACV,IAAK,SAAUupjB,EAAQrT,EAAIX,EAAc3siB,EAAK7sB,MAAMyikB,GAAI/qjB,KAAK;AAAO;AACpE,IAAK,mBAAoB81jB,EAhC3B,SAAgC3gjB,GAI/B,IAHA,IAAIrsB,EAAI,GAGAiikB,EAAK,EAAGA,EAAK51iB,EAAK1sB,SAAUsikB,EAAI,CAEvC,IADA,IAAIhnjB,EAAOoR,EAAK41iB,GACVA,GAAM51iB,EAAK1sB,QAA0C,KAAhCsb,EAAK9X,OAAO8X,EAAKtb,OAAS,IAAWsb,EAAOA,EAAKzb,MAAM,EAAGyb,EAAKtb,OAAS,GAAK0sB,IAAO41iB;AAC/GjikB,EAAEgH,KAAKiU,EACR,CAGA,IAAI,IAAIkyjB,EAAK,EAAGA,EAAKntkB,EAAEL,SAAUwtkB,EAAIntkB,EAAEmtkB,GAAMntkB,EAAEmtkB,GAAIttjB,QAAQ,qBAAsB,SAASi9iB,GAAM,OAAO/shB,OAAOiB,aAAa/iC,SAAS6ujB,EAAGt9jB,MAAM,GAAI,IAAM;AACvJ,OAAOm6jB,EAAI35jB,EAAEkX,KAAK,QACnB,CAbA,CAgC0DmV,EAAK7sB,MAAMyikB;AAAM;AACzE,QAAS,MAAM,IAAInikB,MAAM,yCAA2CotkB,GAErE,IAAIh4X,EAAOi3X,GAAQrH,EAAKmI,EAAMztkB,MAAMouB,EAAKjuB,QAASqtkB,EAAO,CAACZ;AACvDU,IAAO53X,EAAK43X,MAAQA,EACxB,CAgGA,SAASX,GAAQrH,EAAsBt9jB,EAAiBq5E,EAAuBxoC,GAC9E,IAAI+zhB,EAAS/zhB,GAAQA,EAAK+zhB;AACtBA,GAAQ/J,EAASyC;AACrB,IAAI5vX,GAAQk3X,GAAUlL,GAAIzriB,KAAKqviB,EAAKt9jB;AACpC,IAAI0tM,EAAM,CACT,IAAIk4X,EAAmBtI,EAAI1C,UAAU;AAClC56jB,EAAKhI,MAAM,EAAG4tkB,EAAMztkB,SAAWytkB,EAAOA,EAAQ5lkB,GAE1B,KAAnB4lkB,EAAM5tkB,OAAO,KAAW4tkB,GAAS,KACpCA,GAASA,EAAQ5lkB,GAAMqY,QAAQ,KAAK,MAErCq1L,EAAQ,CAAC1tM,KAAM45jB,EAAS55jB,GAAOtE,KAAM,GACrC4hkB,EAAI3C,UAAUn7jB,KAAKkuM,GACnB4vX,EAAI1C,UAAUp7jB,KAAKomkB,GACfhB,GAAQlL,GAAI/zR,MAAMkgS,OAAOvI,EAC9B,CASA,OAPA5vX,EAAKr0H,QAAWA,EAChBq0H,EAAKz3L,KAAOojE,EAAUA,EAAQlhF,OAAS,EACpC04C,IACCA,EAAK0shB,QAAO7vX,EAAKmvX,MAAQhshB,EAAK0shB,OAC9B1shB,EAAKmL,KAAI0xJ,EAAK1xJ,GAAKnL,EAAKmL,IACxBnL,EAAKkM,KAAI2wJ,EAAK3wJ,GAAKlM,EAAKkM,KAErB2wJ,CACR,CA+CA,OArBAz8J,EAAQhjB,KA9+BR,SAAcqviB,EAAsBv1X,GACnC,IAAI+9X,EAAgCxI,EAAI1C,UAAUp/iB,IAAI,SAAS5c,GAAK,OAAOA,EAAEhD,aAAe,GACxFmqkB,EAA4BD,EAAYtqjB,IAAI,SAAS5c,GAAK,IAAIwK,EAAIxK,EAAEiR,MAAM;AAAM,OAAOzG,EAAEA,EAAEjR,QAAyB,KAAfyG,EAAE5G,OAAO,GAAY,EAAI,GAAK,GACnIsb;AACsB,KAAvBy0L,EAAKn+J,WAAW,IAAuBt2B,KAAUy0L,EAAO+9X,EAAY,GAAG9tkB,MAAM,GAAI,GAAK+vM,GACpFz0L,GAA2B,IAAvBy0L,EAAKtmM,QAAQ;AACtB,IAAIukkB,EAAoBj+X,EAAKnsM,cACzB6Q,OAAe6G,EAAawyjB,EAAYrkkB,QAAQukkB,GAAUD,EAAQtkkB,QAAQukkB;AAC9E,IAAU,IAAPv5jB,EAAU,OAAO6wjB,EAAI3C,UAAUlujB;AAElC,IAAI1K,GAAKikkB,EAAOvxiB,MAAMo+hB;AAGtB,IAFAmT,EAASA,EAAO3tjB,QAAQu6iB,EAAK,IAC1B7wjB,IAAGikkB,EAASA,EAAO3tjB,QAAQw6iB,EAAK,MAC/BpmjB,EAAI,EAAGA,EAAIq5jB,EAAY3tkB,SAAUsU,EAAG,CACvC,IAAI1K,EAAI+jkB,EAAYr5jB,GAAG4L,QAAQw6iB,EAAK,KAAOiT,EAAYr5jB,IAAI4L,QAAQu6iB,EAAK,KAAOoT,EAAQ,OAAO1I,EAAI3C,UAAUlujB;AAC5G,IAAI1K,EAAIgkkB,EAAQt5jB,GAAG4L,QAAQw6iB,EAAK,KAAOkT,EAAQt5jB,IAAI4L,QAAQu6iB,EAAK,KAAOoT,EAAQ,OAAO1I,EAAI3C,UAAUlujB,EACrG,CACA,OAAO,IACR,EA69BAwkC,EAAQ02J,KA1vCR,SAAcwH,EAA0Bv1M,GACvC,IAAI8B,EAAO9B,GAAWA,EAAQ8B;AAI9B,OAHIA,GACA+1jB,GAAWC,OAAOgB,SAASvjX,KAAOzzM,EAAO,UAEtCA,GAAQ,UACd,IAAK,OAA2F,OAXlG,SAAmBk+jB,EAAqBhgkB,GAEvC,OADA2gkB,IACOzsjB,EAAM4wI,EAAGunb,aAAarM,GAAWhgkB,EACzC,CAHA,CAWmHu1M,EAAMv1M;AACvH,IAAK,SAAiH,OAAOkU,EAAMqkjB,EAAIX,EAAcriX,IAAQv1M;AAC7J,IAAK,SAAkG,OAAOkU,EAAMqkjB,EAAIhjX,GAAOv1M,GAEhI,OAAOkU,EAAkEqhM,EAAMv1M,EAChF,EAgvCAq3C,EAAQnjC,MAAQA,EAChBmjC,EAAQkpI,MAv7BR,SAAemjZ,EAAsB1jkB,GACpC,IAAIpB,EAAIyvP,EAAOq1U,EAAK1jkB;AACpB,OAAOA,GAAWA,EAAQ8B,MAAQ,UACjC,IAAK,OAAmE,OAA3D6+jB,IAAU77a,EAAGwnb,cAActskB,EAAQggkB,SAAWphkB,GAAoBA;AAC/E,IAAK,SAAU,MAAmB,iBAALA,EAAgBA,EAAI85jB,EAAI95jB;AACrD,IAAK,SAAU,OAAO44jB,EAA0B,iBAAL54jB,EAAgBA,EAAI85jB,EAAI95jB;AACnE,IAAK,SAAU,GAAGi5jB,EAAS,OAAOC,OAAOgB,SAASl6jB,GAAKA,EAAIm5jB,EAAYn5jB;AAEvE,IAAK,QAAS,MAAmB,iBAALA,EAAgB25jB,EAAI35jB,GAAKA,EAEtD,OAAOA,CACR,EA66BAy4C,EAAQk1hB,UAr8BR,SAAoB7I,EAAsB1D,EAAqBhgkB,GAC9D2gkB;AACA,IAAI/hkB,EAAIyvP,EAAOq1U,EAAK1jkB;AAEpB8kJ,EAAGwnb,cAActM,EAAUphkB,EAC5B,EAi8BAy4C,EAAQ00P,MAAQ,CACfygS,QA/DD,SAAiBv1hB,GAChB,IAAIr4C,EAAsB,CAAC;AAE3B,OADAqikB,EAASrikB,EAAGq4C,GACLr4C,CACR,EA4DCmskB,QAASA,GACT0B,QAhCD,SAAiB/I,EAAsBt9jB,GACtC66jB,EAASyC;AACT,IAAI5vX,EAAOgsX,GAAIzriB,KAAKqviB,EAAKt9jB;AACzB,GAAG0tM,EAAM,IAAI,IAAInwH,EAAI,EAAGA,EAAI+/e,EAAI3C,UAAUxikB,SAAUolF,EAAG,GAAG+/e,EAAI3C,UAAUp9e,IAAMmwH,EAG7E,OAFA4vX,EAAI3C,UAAUj5jB,OAAO67E,EAAG,GACxB+/e,EAAI1C,UAAUl5jB,OAAO67E,EAAG;AAGzB,QACD,EAwBC+of,QAtBD,SAAiBhJ,EAAsBiJ,EAAqBC,GAC3D3L,EAASyC;AACT,IAAI5vX,EAAOgsX,GAAIzriB,KAAKqviB,EAAKiJ;AACzB,GAAG74X,EAAM,IAAI,IAAInwH,EAAI,EAAGA,EAAI+/e,EAAI3C,UAAUxikB,SAAUolF,EAAG,GAAG+/e,EAAI3C,UAAUp9e,IAAMmwH,EAG7E,OAFA4vX,EAAI3C,UAAUp9e,GAAGv9E,KAAO45jB,EAAS4M,GACjClJ,EAAI1C,UAAUr9e,GAAKipf;AAGpB,QACD,EAcCX,OAZD,SAAgBvI,GAAiCG,EAAYH,KAAY,EAaxEmJ,UAAWA,GACXC,WAAYA,GACZxM,UAAWA,GACX1H,QAASA,EACTmU,SAr7BD,SAAkBC,GAAQ,IACzB,IACItC,EAAU,MADGsC,EAAKrC;AAGtB,GADAD,EAAQE,cAAc,IAAI10X,WAAW,CAAC,EAAG,IAAKw0X,EAAQG,mBACnDH,EAAQI,UACN,MAAM,IAAIpskB,MAAM;AADConkB,EAAQkH,CAE/B,CAAE,MAAM3ukB,GAAIkV,QAAQwD,MAAM,4BAA8B1Y,EAAEwV,SAAWxV,GAAK,CAAE,EAg7B3EgqkB,YAAa/B,GACb2G,YAAazD,GACb9D,OAAQA,GAGFruhB,CACP,CA5qDwB;AA8qDxB,IAAI61hB;AACJ,SAASC,GAAOrob,GAAMoob,GAAMpob,CAAI,CAIhC,SAASsob,GAAQnijB,GAChB,MAAmB,iBAATA,EAA0ButiB,EAAKvtiB,GACtCpZ,MAAM1T,QAAQ8sB,GAx7FlB,SAAaA,GACZ,GAAyB,oBAAfirL,WAA4B,MAAM,IAAIx3M,MAAM;AACtD,OAAO,IAAIw3M,WAAWjrL,EACvB,CAHA,CAw7FoCA,GAC5BA,CACR,CAEA,SAASoijB,GAASxB,EAAkB/yC,EAAiBo/B,GAEpD,QAAkB,IAARgV,IAAuBA,GAAIZ,cAAe,OAAOpU,EAAMgV,GAAIZ,cAAcT,EAAO/yC,EAASo/B,GAAOgV,GAAIZ,cAAcT,EAAO/yC;AACnI,GAAmB,oBAATw0C,KAAsB,CAE/B,GAAGpV,GAAyB,iBAAXp/B,EAAqB,OAAOo/B,GAC5C,IAAK,OAAQp/B,EAAU,IAAIy0C,YAAYrV,GAAK1rf,OAAOssd;AAAU;AAC7D,IAAK,SAAUA,EAAU0/B,EAAK1/B;AAAU;AAExC,QAAS,MAAM,IAAIp6hB,MAAM,wBAA0Bw5jB,GAEpD,OAAOoV,KAAKhB,cAAcT,EAAO/yC,EAClC,CACA,IAAI7tgB,EAAe,QAAPitiB,EAAiBsV,GAAU10C,GAAWA;AAElD,GAA0B,oBAAhB20C,YAA6B,OAAOA,YAAYxijB,EAAM4gjB;AAChE,GAAmB,oBAATr2X,KAAsB,CAC/B,IAAID,EAAO,IAAIC,KAAK,CAAC43X,GAAQnijB,IAAQ,CAACnpB,KAAK;AAE3C,GAAwB,oBAAds/E,WAA6BA,UAAUssf,WAAY,OAAOtsf,UAAUssf,WAAWn4X,EAAMs2X;AAE/F,GAAqB,oBAAX8B,OAAwB,OAAOA,OAAOp4X,EAAMs2X;AACtD,GAAkB,oBAAR/zK,KAA2C,oBAAbn1Z,UAA4BA,SAASkvE,eAAiBimV,IAAI81K,gBAAiB,CAClH,IAAIz5jB,EAAM2jZ,IAAI81K,gBAAgBr4X;AAE9B,GAAqB,iBAAXu4S,QAAiE,mBAAlCA,OAAO+/E,WAAW,CAAC,GAAGC,SAE9D,OADGh2K,IAAIi2K,iBAAyC,oBAAf5gkB,YAA4BA,WAAW,WAAa2qZ,IAAIi2K,gBAAgB55jB,EAAM,EAAG,KAC3G25e,OAAO+/E,UAAUC,SAAS,CAAE35jB,IAAKA,EAAK6rjB,SAAU6L,EAAO8B;AAE/D,IAAI7ukB,EAAI6D,SAASkvE,cAAc;AAC/B,GAAiB,MAAd/yE,EAAEgvkB,SAKJ,OAHAhvkB,EAAEgvkB,SAAWjC,EAAO/skB,EAAEsvU,KAAOj6T,EAAKxR,SAAS4I,KAAK7I,YAAY5D,GAAIA,EAAE2/Q,QACA97Q,SAAS4I,KAAKzE,YAAYhI,GACzFg5Z,IAAIi2K,iBAAyC,oBAAf5gkB,YAA4BA,WAAW,WAAa2qZ,IAAIi2K,gBAAgB55jB,EAAM,EAAG,KAC3GA,CAET,CACD,CAEA,GAAgB,oBAANqS,GAAqC,oBAATutL,MAA0C,oBAAXi6X,OAAwB,IAE5F,IAAIj3U,EAAMhjD,KAAK83X;AAEkB,OAFV90U,EAAI1qL,KAAK,KAAM0qL,EAAIk3U,SAAW,SAClDp8jB,MAAM1T,QAAQ26hB,KAAUA,EAAU4/B,EAAI5/B,IACzC/hS,EAAIx2E,MAAMu4W,GAAU/hS,EAAI7rP,QAAgB4thB,CACzC,CAAE,MAAMz6hB,GAAK,IAAIA,EAAEwV,UAAYxV,EAAEwV,QAAQgnB,MAAM,YAAa,MAAMx8B,CAAG,CACrE,MAAM,IAAIK,MAAM,oBAAsBmtkB,EACvC,CAeA,SAASn1hB,GAAK93C,GAEb,IADA,IAAIkuT,EAAK/mS,OAAO2wB,KAAK93C,GAAIsvkB,EAAK,GACtB5vkB,EAAI,EAAGA,EAAIwuT,EAAGvuT,SAAUD,EAAMynB,OAAO9iB,UAAU4N,eAAejI,KAAKhK,EAAGkuT,EAAGxuT,KAAK4vkB,EAAGtokB,KAAKknT,EAAGxuT;AACjG,OAAO4vkB,CACR,CAEA,SAASC,GAAUt+hB,EAAa5Y,GAE/B,IADA,IAAIr4B,EAAK,GAAa0qF,EAAI5yC,GAAK7G,GACvBvxC,EAAI,EAAGA,IAAMgrF,EAAE/qF,SAAUD,EAA2B,MAArBM,EAAEixC,EAAIy5C,EAAEhrF,IAAI24B,MAAer4B,EAAEixC,EAAIy5C,EAAEhrF,IAAI24B,IAAQqyD,EAAEhrF;AACxF,OAAOM,CACR,CAEA,SAASwvkB,GAAMv+hB,GAEd,IADA,IAAIjxC,EAAK,GAAa0qF,EAAI5yC,GAAK7G,GACvBvxC,EAAI,EAAGA,IAAMgrF,EAAE/qF,SAAUD,EAAGM,EAAEixC,EAAIy5C,EAAEhrF,KAAOgrF,EAAEhrF;AACrD,OAAOM,CACR,CAEA,SAASyvkB,GAAUx+hB,GAElB,IADA,IAAIjxC,EAAK,GAAa0qF,EAAI5yC,GAAK7G,GACvBvxC,EAAI,EAAGA,IAAMgrF,EAAE/qF,SAAUD,EAAGM,EAAEixC,EAAIy5C,EAAEhrF,KAAOuO,SAASy8E,EAAEhrF,GAAG;AACjE,OAAOM,CACR,CAWA,IAAI0vkB,GAAwB,IAAI32hB,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG;AACzD,SAAS42hB,GAAQj/jB,EAAYgrjB,GAC5B,IAAIK,EAAqBrrjB,EAAEupE;AAG3B,OAFGyhf,IAAUK,GAAS,YAEdA,GADoB2T,GAASz1f,UAA+F,KAArEvpE,EAAEq/G,oBAAmC2/c,GAAS3/c,uBACrF,KACzB,CACA,IAAI6/c,GAAuB,IAAI72hB,KAC3B82hB,GAAwBH,GAASz1f,UAAqG,KAA3E21f,GAAQ7/c,oBAAmC2/c,GAAS3/c,qBAC/G+/c,GAAyBF,GAAQ7/c;AACrC,SAASggd,GAAQr/jB,GAChB,IAAIynP,EAAM,IAAIp/M;AAKd,OAJAo/M,EAAIz2K,QAAY,GAAJhxE,EAAS,GAAK,GAAK,IAAOm/jB,IAClC13U,EAAIpoI,sBAAwB+/c,IAC/B33U,EAAIz2K,QAAQy2K,EAAIl+K,UAAoD,KAAvCk+K,EAAIpoI,oBAAsB+/c,KAEjD33U,CACR,CAGA,SAAS63U,GAAapukB,GACrB,IAAIqukB,EAAM,EAAGzshB,EAAK,EAAG57C,KACjB2B,EAAI3H,EAAEq6B,MAAM;AAChB,IAAI1yB,EAAG,MAAM,IAAIzJ,MAAM,IAAM8B,EAAI;AACjC,IAAI,IAAIlC,EAAI,EAAGA,GAAK6J,EAAE5J,SAAUD,EAC/B,GAAI6J,EAAE7J,GAAN,CAGA,OAFA8jD,EAAK,EACF9jD,EAAI,IAAGkI,MACH2B,EAAE7J,GAAGF,MAAM+J,EAAE7J,GAAGC,OAAO,IAC7B,IAAK,IACJ,MAAM,IAAIG,MAAM,mCAAqCyJ,EAAE7J,GAAGF,MAAM+J,EAAE7J,GAAGC,OAAO;AAC7E,IAAK,IAAK6jD,GAAM;AAEhB,IAAK,IAAKA,GAAM;AAEhB,IAAK,IACJ,IAAI57C,EAAM,MAAM,IAAI9H,MAAM;AACrB0jD,GAAM,GAIbyshB,GAAOzshB,EAAKv1C,SAAS1E,EAAE7J,GAAI,GAhBjB,CAkBX,OAAOuwkB,CACR,CAEA,IAAIC,GAA8B,IAAIn3hB,KAAK,4BACvCo3hB,GAA4B91f,MAAmB61f,GAAe92f,eAA8B,IAAIrgC,KAAK,WAAam3hB,GAClHE,GAAqD,MAA9BD,GAAa/2f;AAExC,SAASi3f,GAAUhziB,EAAqBiziB,GACvC,IAAIvxkB,EAAI,IAAIg6C,KAAK1b;AACjB,GAAG+yiB,GAIF,OAFGE,EAAU,EAAGvxkB,EAAE2iF,QAAQ3iF,EAAEk7E,UAAoC,GAAxBl7E,EAAEgxH,oBAA2B,KAC7Dugd,EAAU,GAAGvxkB,EAAE2iF,QAAQ3iF,EAAEk7E,UAAoC,GAAxBl7E,EAAEgxH,oBAA2B,KACnEhxH;AAER,GAAGs+B,aAAe0b,KAAM,OAAO1b;AAC/B,GAAiC,MAA9B8yiB,GAAa/2f,gBAA0BiB,MAAMt7E,EAAEq6E,eAAgB,CACjE,IAAIx3E,EAAI7C,EAAEq6E;AACV,OAAG/7C,EAAIp0B,QAAQ,GAAKrH,IAAM,GAC1B7C,EAAEqvH,YAAYrvH,EAAEq6E,cAAgB,KADIr6E,CAErC,CACA,IAAIa,EAAIy9B,EAAIpB,MAAM,SAAS,CAAC,OAAO,IAAI,KAAK,IAAI,IAAI,KAChDk8N,EAAM,IAAIp/M,MAAMn5C,EAAE,IAAKA,EAAE,GAAK,GAAIA,EAAE,IAAMA,EAAE,IAAI,GAAMA,EAAE,IAAI,GAAMA,EAAE,IAAI;AAE5E,OADGy9B,EAAIp0B,QAAQ,MAAQ,IAAGkvP,EAAM,IAAIp/M,KAAKo/M,EAAIl+K,UAAsC,GAA1Bk+K,EAAIpoI,oBAA2B,MACjFooI,CACR,CAEA,SAASo4U,GAAO3vR,EAAuB4vR,GACtC,GAAGvX,GAAWC,OAAOgB,SAASt5Q,GAAM,CACnC,GAAG4vR,EAAS,CACX,GAAa,KAAV5vR,EAAI,IAAwB,KAAVA,EAAI,GAAY,OAAOguR,GAAUhuR,EAAIphT,MAAM,GAAGiQ,SAAS;AAC5E,GAAa,KAAVmxS,EAAI,IAAwB,KAAVA,EAAI,GAAY,OAAOguR,GAAUzW,EAAYv3Q,EAAIphT,MAAM,GAAGiQ,SAAS,WACzF,CACA,OAAOmxS,EAAInxS,SAAS,SACrB,CAEA,GAA0B,oBAAhBghkB,YAA6B,IACtC,GAAGD,EAAS,CACX,GAAa,KAAV5vR,EAAI,IAAwB,KAAVA,EAAI,GAAY,OAAOguR,GAAU,IAAI6B,YAAY,YAAYn5jB,OAAOspS,EAAIphT,MAAM;AACnG,GAAa,KAAVohT,EAAI,IAAwB,KAAVA,EAAI,GAAY,OAAOguR,GAAU,IAAI6B,YAAY,YAAYn5jB,OAAOspS,EAAIphT,MAAM,IACpG,CACA,IAAIgxQ,EAAM,CACT,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAChE,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAChE,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAChE,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAChE,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAChE,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAAQ,IAAU,IAChE,IAAU,IAAQ,IAAU,IAAQ,IAAU;AAG/C,OADGv9P,MAAM1T,QAAQqhT,KAAMA,EAAM,IAAItpG,WAAWspG,IACrC,IAAI6vR,YAAY,UAAUn5jB,OAAOspS,GAAK/gS,QAAQ,iCAAkC,SAAStc,GAAK,OAAOitQ,EAAIjtQ,IAAMA,CAAG,EAC1H,CAAE,MAAM9D,GAAI,CAGZ,IADA,IAAIO,EAAI,GACAN,EAAI,EAAGA,GAAKkhT,EAAIjhT,SAAUD,EAAGM,EAAEgH,KAAK+oC,OAAOiB,aAAa4vQ,EAAIlhT;AACpE,OAAOM,EAAEkX,KAAK,GACf,CAEA,SAASw5jB,GAAI1wkB,GACZ,GAAkB,oBAARqV,OAAwBpC,MAAM1T,QAAQS,GAAI,OAAOqV,KAAKC,MAAMD,KAAK8iB,UAAUn4B;AACrF,GAAe,iBAALA,GAAsB,MAALA,EAAW,OAAOA;AAC7C,GAAGA,aAAa+4C,KAAM,OAAO,IAAIA,KAAK/4C,EAAEi6E;AACxC,IAAIk+K,EAAM,CAAC;AACX,IAAI,IAAIr9O,KAAK9a,EAAMmnB,OAAO9iB,UAAU4N,eAAejI,KAAKhK,EAAG8a,KAAIq9O,EAAIr9O,GAAK41jB,GAAI1wkB,EAAE8a;AAC9E,OAAOq9O,CACR,CAEA,SAAS2uK,GAAKvja,EAAapH,GAAuC,IAAZ,IAAI6D,EAAI,GAAUA,EAAEL,OAASxD,GAAG6D,GAAGuD;AAAG,OAAOvD,CAAG,CAGtG,SAAS2wkB,GAAS/ukB,GACjB,IAAI8O,EAAehG,OAAO9I;AAC1B,IAAIy4E,MAAM3pE,GAAI,OAAOqX,SAASrX,GAAKA,EAAIqmF;AACvC,IAAI,KAAKtyE,KAAK7iB,GAAI,OAAO8O;AACzB,IAAIuxI,EAAK,EACLgR,EAAKrxJ,EAAEie,QAAQ,iBAAiB,QAAQA,QAAQ,OAAO,IAAIA,QAAQ,OAAQ,WAAwB,OAAXoiI,GAAM,IAAY,EAAG;AACjH,OAAI5nE,MAAM3pE,EAAIhG,OAAOuoJ,KACrBA,EAAKA,EAAGpzI,QAAQ,aAAa,SAASi9iB,EAAI9yB,GAAgB,OAAV/nZ,GAAMA,EAAW+nZ,CAAG,GAChE3vd,MAAM3pE,EAAIhG,OAAOuoJ,IACdviJ,EAD2BA,EAAIuxI,GAFJvxI,EAAIuxI,CAIvC,CACA,IAAI2ub,GAAe,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY;AAClI,SAASC,GAAUjvkB,GAClB,IAAI5B,EAAI,IAAI+4C,KAAKn3C,GAAIhC,EAAI,IAAIm5C,KAAKg+C,KAC9BnmF,EAAI5Q,EAAEs5H,UAAW/vH,EAAIvJ,EAAEq5E,WAAYt6E,EAAIiB,EAAEs5E;AAC7C,GAAGe,MAAMt7E,GAAI,OAAOa;AACpB,IAAIkxkB,EAAQlvkB,EAAE6hB;AACd,GAAGqtjB,EAAM70iB,MAAM,oDAEd,IADA60iB,EAAQA,EAAMjxjB,QAAQ,UAAU,IAAIA,QAAQ,6BAA6B,KAChElgB,OAAS,IAAqC,GAAhCixkB,GAAa3nkB,QAAQ6nkB,GAAc,OAAOlxkB,OAC3D,GAAGkxkB,EAAM70iB,MAAM,SAAU,OAAOr8B;AACvC,OAAGgR,EAAI,GAAKA,EAAI,KAAahR,GACzB2J,EAAI,GAAKxK,EAAI,IAAW,KAAL6R,EAAiB5Q,EACrC4B,EAAEq6B,MAAM,iBAAyBr8B,EAC7BI,CACR,CAEA,IAAI+wkB,GAA4B,WAC/B,IAAIC,EAAuD,GAApC,UAAU35jB,MAAM,UAAU1X;AACjD,OAAO,SAAqB09B,EAAgBwlF,EAAIwhF,GAC/C,GAAG2sY,GAAiC,iBAANnud,EAAgB,OAAOxlF,EAAIhmB,MAAMwrG;AAE/D,IADA,IAAI5+G,EAAIo5B,EAAIhmB,MAAMwrG,GAAK7iH,EAAI,CAACiE,EAAE,IACtBvE,EAAI,EAAGA,EAAIuE,EAAEtE,SAAUD,EAAKM,EAAEgH,KAAKq9L,GAAMrkM,EAAEgH,KAAK/C,EAAEvE;AAC1D,OAAOM,CACR,CACD,CARgC;AAShC,SAASixkB,GAAW5kjB,GACnB,OAAIA,EACDA,EAAKw0D,SAAWx0D,EAAKnpB,KAAaqtkB,GAAOlkjB,EAAKw0D,YAC9Cx0D,EAAKA,KAAagsiB,EAAMhsiB,EAAKA,MAC7BA,EAAK6kjB,cAAgBjY,EAAgBZ,EAAMhsiB,EAAK6kjB,eAAezhkB,SAAS,WACxE4c,EAAK8kjB,SAAiB9Y,EAAMhsiB,EAAK8kjB,YACjC9kjB,EAAK2/N,OAAS3/N,EAAK2/N,MAAMm+J,WAAmBkuK,EAAMkY,GAAOt9jB,MAAM5O,UAAU7E,MAAMwK,KAAKqiB,EAAK2/N,MAAMm+J,aAAa,KACxG,KANU,IAOlB,CAEA,SAASinL,GAAW/kjB,GACnB,IAAIA,EAAM,OAAO;AACjB,GAAGA,EAAKA,KAAM,OAAO6riB,EAAW7riB,EAAKA;AACrC,GAAGA,EAAK6kjB,cAAgBjY,EAAS,OAAO5siB,EAAK6kjB;AAC7C,GAAG7kjB,EAAK2/N,OAAS3/N,EAAK2/N,MAAMm+J,WAAY,CACvC,IAAInqZ,EAAIqsB,EAAK2/N,MAAMm+J;AACnB,MAAe,iBAALnqZ,EAAsBk4jB,EAAWl4jB,GACpCiT,MAAM5O,UAAU7E,MAAMwK,KAAKhK,EACnC,CACA,OAAGqsB,EAAKw0D,SAAWx0D,EAAKnpB,KAAampB,EAAKw0D,QACnC,IACR,CAMA,SAASwwf,GAAeC,EAAKp8X,GAG5B,IAFA,IAAIp6L,EAAIw2jB,EAAIlP,WAAatqhB,GAAKw5hB,EAAIl/X,OAC9B9mM,EAAI4pM,EAAKzxL,cAAc5D,QAAQ,QAAS,MAAOpR,EAAInD,EAAEuU,QAAQ,MAAM,KAC/DngB,EAAE,EAAGA,EAAEob,EAAEnb,SAAUD,EAAG,CAC7B,IAAIE,EAAIkb,EAAEpb,GAAGmgB,QAAQ,kBAAkB,IAAI4D;AAC3C,GAAGnY,GAAK1L,GAAK6O,GAAK7O,EAAG,OAAO0xkB,EAAIl/X,MAAQk/X,EAAIl/X,MAAMt3L,EAAEpb,IAAM4xkB,EAAInP,UAAUzikB,EACzE,CACA,OAAO,IACR,CAEA,SAAS6xkB,GAAWD,EAAKp8X,GACxB,IAAIl1M,EAAIqxkB,GAAeC,EAAKp8X;AAC5B,GAAQ,MAALl1M,EAAW,MAAM,IAAIF,MAAM,oBAAsBo1M,EAAO;AAC3D,OAAOl1M,CACR,CAEA,SAASwxkB,GAAWF,EAAKp8X,EAAiBu8X,GACzC,IAAIA,EAAM,OArBMpljB,EAqBSkljB,GAAWD,EAAKp8X,KArBuB,SAAxB7oL,EAAK7kB,KAAKhI,OAAO,GAAiB4xkB,GAAW/kjB,GAAQ4kjB,GAAW5kjB;AAAzG,IAAiBA;AAsBhB,IAAI6oL,EAAM,OAAO;AACjB,IAAM,OAAOs8X,GAAWF,EAAKp8X,EAAO,CAAE,MAAMz1M,GAAK,OAAO,IAAM,CAC/D,CAEA,SAASiykB,GAAUJ,EAAKp8X,EAAiBu8X,GACxC,IAAIA,EAAM,OAAOR,GAAWM,GAAWD,EAAKp8X;AAC5C,IAAIA,EAAM,OAAO;AACjB,IAAM,OAAOw8X,GAAUJ,EAAKp8X,EAAO,CAAE,MAAMz1M,GAAK,OAAO,IAAM,CAC9D,CAEA,SAASkykB,GAAUL,EAAKp8X,EAAiBu8X,GACxC,IAAIA,EAAM,OAAOL,GAAWG,GAAWD,EAAKp8X;AAC5C,IAAIA,EAAM,OAAO;AACjB,IAAM,OAAOy8X,GAAUL,EAAKp8X,EAAO,CAAE,MAAMz1M,GAAK,OAAO,IAAM,CAC9D,CAEA,SAASmykB,GAAWN,GAEnB,IADA,IAAIx2jB,EAAIw2jB,EAAIlP,WAAatqhB,GAAKw5hB,EAAIl/X,OAAQpyM,EAAI,GACtCN,EAAI,EAAGA,EAAIob,EAAEnb,SAAUD,EAAwB,KAAlBob,EAAEpb,GAAGF,OAAO,IAAWQ,EAAEgH,KAAK8T,EAAEpb,GAAGmgB,QAAQ,kBAAmB;AACnG,OAAO7f,EAAEuxB,MACV,CAEA,SAASsgjB,GAAaP,EAAK/hY,EAAM1uH,GAChC,GAAGywf,EAAIlP,UAAW,CAEhB,IAAIp7Z;AADL,GAAqB,iBAAXnmF,EAMT,OAJYmmF,EAATiyZ,EAAeE,EAAYt4e,GAztGjC,SAAoBA,GAGnB,IAFA,IAAIs3K,EAAM,GAAI25U,EAAO,EAAG9ykB,EAAI6hF,EAAQlhF,OAAS,IACzCK,EAAIu5jB,EAAY14e,EAAQlhF,OAAS,KAC7BoykB,EAAO,EAAGA,EAAOlxf,EAAQlhF,SAAUoykB,EAAM,CAChD,IAAIxukB,EAAIs9E,EAAQzvC,WAAW2giB;AAC3B,GAAGxukB,EAAI,IAAMvD,EAAE8xkB,KAAUvukB;KACpB,GAAGA,EAAI,KACXvD,EAAE8xkB,KAAW,IAAMvukB,GAAG,EAAG,GACzBvD,EAAE8xkB,KAAW,IAAO,GAAFvukB;KACZ,GAAGA,GAAK,OAAUA,EAAI,MAAQ,CACpCA,EAAa,IAAN,KAAFA;AACL,IAAIxE,EAA+B,KAA3B8hF,EAAQzvC,aAAa2giB;AAC7B/xkB,EAAE8xkB,KAAW,IAAMvukB,GAAG,EAAG,EACzBvD,EAAE8xkB,KAAW,IAAMvukB,GAAG,EAAG,GACzBvD,EAAE8xkB,KAAW,IAAM/ykB,GAAG,EAAG,IAAQ,EAAFwE,IAAM,EACrCvD,EAAE8xkB,KAAW,IAAO,GAAF/ykB,CACnB,MACCiB,EAAE8xkB,KAAW,IAAMvukB,GAAG,GAAI,GAC1BvD,EAAE8xkB,KAAW,IAAMvukB,GAAG,EAAG,GACzBvD,EAAE8xkB,KAAW,IAAO,GAAFvukB;AAEhBuukB,EAAO9ykB,IACTm5P,EAAInxP,KAAKhH,EAAER,MAAM,EAAGsykB,IACpBA,EAAO,EACP9xkB,EAAIu5jB,EAAY,OAChBv6jB,EAAI,MAEN,CAEA,OADAm5P,EAAInxP,KAAKhH,EAAER,MAAM,EAAGsykB,IACb9X,EAAQ7hU,EAChB,CA9BA,CA4tGyBt3K,GACfqgf,GAAI/zR,MAAMg/R,QAAQmF,EAAK/hY,EAAMvoC;AAErCk6Z,GAAI/zR,MAAMg/R,QAAQmF,EAAK/hY,EAAM1uH,EAC9B,MACKywf,EAAIp8X,KAAK3F,EAAM1uH,EACrB,CAEA,SAASmxf,KAAY,OAAO9Q,GAAI/zR,MAAMygS,SAAW,CAEjD,SAASqE,GAASlzkB,EAAGiB,GACpB,OAAOA,EAAEkD,MACR,IAAK,SAAU,OAAOg+jB,GAAI/xX,KAAKpwM,EAAG,CAAEmE,KAAM;AAC1C,IAAK,SAAU,OAAOg+jB,GAAI/xX,KAAKpwM,EAAG,CAAEmE,KAAM;AAC1C,IAAK,SAAU,IAAK,QAAS,OAAOg+jB,GAAI/xX,KAAKpwM,EAAG,CAAEmE,KAAM,WAEzD,MAAM,IAAIpD,MAAM,qBAAuBE,EAAEkD,KAC1C,CAEA,SAASgvkB,GAAa3iY,EAAiBw/E,GACtC,GAAqB,KAAlBx/E,EAAKpsM,OAAO,GAAW,OAAOosM,EAAK/vM,MAAM;AAC5C,IAAI6mB,EAAS0oQ,EAAK13Q,MAAM;AACH,KAAlB03Q,EAAKvvR,OAAO,IAAW6mB,EAAO0qI;AAEjC,IADA,IAAInoJ,EAAS2mM,EAAKl4L,MAAM,KACC,IAAlBzO,EAAOjJ,QAAc,CAC3B,IAAIssI,EAAOrjI,EAAOsK;AACL,OAAT+4H,EAAe5lH,EAAO0qI,MACR,MAAT9kB,GAAc5lH,EAAOrf,KAAKilI,EACpC,CACA,OAAO5lH,EAAOnP,KAAK,IACpB,CACA,IAAIi7jB,GAAa,8DACbC,GAAU,yEACVC,GAAU,+FACVC,GAAwBH,GAAWl2iB,MAAMo2iB,IAAaA,GADgE,WAEtHE,GAAQ,QAASC,GAAW;AAChC,SAASC,GAAYx4iB,EAAgBy4iB,EAAwBC,GAG5D,IAFA,IAAIv4jB,EAAK,CAAC,EACN+4O,EAAK,EAAG5vP,EAAI,EACV4vP,IAAOl5N,EAAIt6B,QAA8C,MAA5B4D,EAAI02B,EAAImX,WAAW+hN,KAAqB,KAAN5vP,GAAkB,KAANA,IAAtD4vP,GAE3B,GADIu/U,IAAWt4jB,EAAE,GAAK6f,EAAIz6B,MAAM,EAAG2zP,IAChCA,IAAOl5N,EAAIt6B,OAAQ,OAAOya;AAC7B,IAAI7Q,EAAI0wB,EAAIgC,MAAMm2iB,IAAYrtf,EAAE,EAAGr0E,EAAE,GAAIhR,EAAE,EAAGk6C,EAAE,GAAI+lP,EAAG,GAAIizS,EAAO;AAClE,GAAGrpkB,EAAG,IAAI7J,EAAI,EAAGA,GAAK6J,EAAE5J,SAAUD,EAAG,CAEpC,IADAigS,EAAKp2R,EAAE7J,GACH6D,EAAE,EAAGA,GAAKo8R,EAAGhgS,QAAqC,KAArBggS,EAAGvuP,WAAW7tC,KAApBA,GAE3B,IADAq2C,EAAI+lP,EAAGngS,MAAM,EAAE+D,GAAGmuG,OACU,IAAtBiuL,EAAGvuP,WAAW7tC,EAAE,MAAYA;AAGlC,IAFAqvkB,EAAmC,KAA1Bz/U,EAAGwsC,EAAGvuP,WAAW7tC,EAAE,KAAmB,IAAN4vP,EAAY,EAAI,EACzDziP,EAAIivR,EAAGngS,MAAM+D,EAAE,EAAEqvkB,EAAMjzS,EAAGhgS,OAAOizkB,GAC7B7tf,EAAE,EAAEA,GAAGnrC,EAAEj6C,QAAmC,KAApBi6C,EAAExI,WAAW2zC,KAAnBA,GACtB,GAAGA,IAAInrC,EAAEj6C,OACLi6C,EAAE3wC,QAAQ,KAAO,IAAG2wC,EAAIA,EAAEp6C,MAAM,EAAGo6C,EAAE3wC,QAAQ,OAChDmR,EAAEw/B,GAAKlpC,EACHiikB,IAASv4jB,EAAEw/B,EAAEn2B,eAAiB/S;IAE9B,CACJ,IAAIoK,GAAS,IAAJiqE,GAAwB,UAAfnrC,EAAEp6C,MAAM,EAAE,GAAa,QAAQ,IAAIo6C,EAAEp6C,MAAMulF,EAAE;AAC/D,GAAG3qE,EAAEU,IAAwB,OAAlB8+B,EAAEp6C,MAAMulF,EAAE,EAAEA,GAAa;AACpC3qE,EAAEU,GAAKpK,EACHiikB,IAASv4jB,EAAEU,EAAE2I,eAAiB/S,EACnC,CACD,CACA,OAAO0J,CACR,CACA,SAASy4jB,GAASzskB,GAA2B,OAAOA,EAAEyZ,QAAQ2yjB,GAAU,MAAQ,CAEhF,IAAIM,GAAY,CACf,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,QAAS,KAENC,GAAyBvD,GAAMsD,IAI/BE,GAA2C,WAE9C,IAAIC,EAAW,+CAAgDC,EAAY;AAC3E,OAAO,SAASF,EAAYvwkB,GAC3B,IAAIb,EAAIa,EAAO,GAAI/C,EAAIkC,EAAEqH,QAAQ;AACjC,IAAS,GAANvJ,EAAS,OAAOkC,EAAEie,QAAQozjB,EAAU,SAASnW,EAAI9yB,GAAM,OAAO8oC,GAAUhW,IAAK/shB,OAAOiB,aAAa/iC,SAAS+7hB,EAAG8yB,EAAG7zjB,QAAQ,MAAM,EAAE,GAAG,MAAM6zjB,CAAI,GAAGj9iB,QAAQqzjB,EAAU,SAAS3pkB,EAAEhG,GAAI,OAAOwsC,OAAOiB,aAAa/iC,SAAS1K,EAAE,IAAK;AAC/N,IAAIwhF,EAAInjF,EAAEqH,QAAQ;AAClB,OAAO+pkB,EAAYpxkB,EAAEpC,MAAM,EAAGE,IAAMkC,EAAEpC,MAAME,EAAE,EAAEqlF,GAAKiuf,EAAYpxkB,EAAEpC,MAAMulF,EAAE,GAC5E,CACD,CAT+C,GAW3Couf,GAAS,WAAYC,GAAW;AACpC,SAASC,GAAU5wkB,GAElB,OADQA,EAAO,IACNod,QAAQszjB,GAAU,SAASvikB,GAAK,OAAOmikB,GAAUnikB,EAAI,GAAGiP,QAAQuzjB,GAAS,SAASxxkB,GAAK,MAAO,MAAQ,MAAMA,EAAEwvC,WAAW,GAAG3hC,SAAS,KAAKjQ,OAAO,GAAK,GAAI,EACpK,CACA,SAAS8zkB,GAAa7wkB,GAA6B,OAAO4wkB,GAAU5wkB,GAAMod,QAAQ,KAAK,UAAY,CAEnG,IAAI0zjB,GAAe;AACnB,SAASC,GAAW/wkB,GAEnB,OADQA,EAAO,IACNod,QAAQszjB,GAAU,SAASvikB,GAAK,OAAOmikB,GAAUnikB,EAAI,GAAGiP,QAAQ,MAAO,SAASA,QAAQ0zjB,GAAa,SAAS3xkB,GAAK,MAAO,OAAS,MAAMA,EAAEwvC,WAAW,GAAG3hC,SAAS,KAAKjQ,OAAO,GAAK,GAAK,EAClM,CAQA,IAAIi0kB,GAA2C,WAC9C,IAAIC,EAAW;AACf,SAASC,EAAQ7W,EAAc9yB,GAA4B,OAAOj6f,OAAOiB,aAAa/iC,SAAS+7hB,EAAG,IAAM,CACxG,OAAO,SAAqB3sgB,GAA6B,OAAOA,EAAIxd,QAAQ6zjB,EAASC,EAAU,CAChG,CAJ+C;AAO/C,SAASC,GAAa7xkB,GACrB,OAAOA,GACN,KAAK,EAAG,OAAW,IAAK,IAAK,IAAK,OAAQ,IAAK,OAAQ;AAEvD,QAAS,SAEX,CAEA,SAAS8xkB,GAAUntR,GAElB,IADA,IAAIvuD,EAAM,GAAIz4P,EAAI,EAAG6D,EAAI,EAAGxE,EAAI,EAAGU,EAAI,EAAG6L,EAAI,EAAG2I,EAAI,EAC9CvU,EAAIgnT,EAAK/mT,SACf4D,EAAImjT,EAAKt1Q,WAAW1xC,MACZ,IAAOy4P,GAAOpoN,OAAOiB,aAAaztC,IAC1CxE,EAAI2nT,EAAKt1Q,WAAW1xC,KAChB6D,EAAE,KAAOA,EAAE,KAAO+H,GAAU,GAAJ/H,IAAW,EAAI+H,GAAU,GAAJvM,EAASo5P,GAAOpoN,OAAOiB,aAAa1lC,KACrF7L,EAAIinT,EAAKt1Q,WAAW1xC,KAChB6D,EAAI,IAAO40P,GAAOpoN,OAAOiB,cAAmB,GAAJztC,IAAW,IAAY,GAAJxE,IAAW,EAAU,GAAJU,IAEhFwU,IAAW,EAAJ1Q,IAAU,IAAY,GAAJxE,IAAW,IAAY,GAAJU,IAAW,EAAU,IADjE6L,EAAIo7S,EAAKt1Q,WAAW1xC,OACkD,MACtEy4P,GAAOpoN,OAAOiB,aAAa,OAAW/8B,IAAI,GAAI,OAC9CkkP,GAAOpoN,OAAOiB,aAAa,OAAY,KAAF/8B;AAEtC,OAAOkkP,CACR,CAEA,SAAS27U,GAAUznjB,GAClB,IAAsCpY,EAAGvU,EAAuB6D,EAA5D40P,EAAMohU,EAAY,EAAEltiB,EAAK1sB,QAAeolF,EAAI,EAAGjqE,EAAI,EAAGi5jB,EAAG;AAC7D,IAAIr0kB,EAAI,EAAGA,EAAI2sB,EAAK1sB,OAAQD,GAAGqlF,EAC9BA,EAAI,GACAxhF,EAAE8oB,EAAK+kB,WAAW1xC,IAAM,IAAKuU,EAAI1Q,EAC7BA,EAAI,KAAO0Q,EAAW,IAAJ,GAAF1Q,IAA+B,GAArB8oB,EAAK+kB,WAAW1xC,EAAE,IAAQqlF,EAAE,GACtDxhF,EAAI,KAAO0Q,EAAS,MAAJ,GAAF1Q,GAAqC,IAAJ,GAArB8oB,EAAK+kB,WAAW1xC,EAAE,KAAgC,GAArB2sB,EAAK+kB,WAAW1xC,EAAE,IAAQqlF,EAAE,IACpFA,EAAI,EACV9wE,EAAY,QAAH,EAAJ1Q,GAAwC,MAAJ,GAArB8oB,EAAK+kB,WAAW1xC,EAAE,IAAsC,IAAJ,GAArB2sB,EAAK+kB,WAAW1xC,EAAE,KAAgC,GAArB2sB,EAAK+kB,WAAW1xC,EAAE,IACtFq0kB,EAAK,QAAjB9/jB,GAAK,SAA2B,GAAI,MAAOA,EAAI,OAAY,KAAFA,IAEhD,IAAP8/jB,IAAY57U,EAAIr9O,KAAU,IAAHi5jB,EAAQ57U,EAAIr9O,KAAOi5jB,IAAK,EAAGA,EAAK,GAC1D57U,EAAIr9O,KAAO7G,EAAE,IAAKkkP,EAAIr9O,KAAO7G,IAAI;AAElC,OAAOkkP,EAAI34P,MAAM,EAAEsb,GAAGrL,SAAS,OAChC,CAEA,SAASukkB,GAAU3njB,GAAQ,OAAO8siB,EAAY9siB,EAAM,UAAU5c,SAAS,OAAS,CAEhF,IAAIwkkB,GAAa,qBACbC,GAAWjb,IAAyB+a,GAAUC,KAA4BJ,GAAUI,KAAeD,IAA0BF,GAAUG,KAA4BJ,GAAUI,KAAeH,KAAcD,GAE1MjF,GAA2B3V,EAAU,SAAS5siB,GAAQ,OAAO8siB,EAAY9siB,EAAM,QAAQ5c,SAAS,SAAW,EAAI,SAASi3S,GAE3H,IADA,IAAIvuD,EAAwB,GAAIz4P,EAAI,EAAG6D,EAAI,EAAGxE,EAAI,EAC5CW,EAAIgnT,EAAK/mT,QAEd,OADA4D,EAAImjT,EAAKt1Q,WAAW1xC,SAEnB,KAAK6D,EAAI,IAAK40P,EAAInxP,KAAK+oC,OAAOiB,aAAaztC;AAAK;AAChD,KAAKA,EAAI,KACR40P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAOztC,GAAK,KACzC40P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAW,GAAJztC;AACpC;AACD,KAAKA,GAAK,OAASA,EAAI,MACtBA,GAAK,MAAOxE,EAAI2nT,EAAKt1Q,WAAW1xC,KAAO,OAAS6D,GAAG,IACnD40P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAQjyC,GAAI,GAAM,KAC/Co5P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAQjyC,GAAI,GAAM,MAC/Co5P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAQjyC,GAAK,EAAK,MAC/Co5P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAW,GAAJjyC;AACpC;AACD,QACCo5P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAOztC,GAAK,MACzC40P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAQztC,GAAK,EAAK,MAC/C40P,EAAInxP,KAAK+oC,OAAOiB,aAAa,KAAW,GAAJztC,KAGvC,OAAO40P,EAAIjhP,KAAK,GACjB,EAGIi9jB,GAAyB,WAC5B,IAAIC,EAAmC,CAAC;AACxC,OAAO,SAAkB9okB,EAAamD,GACrC,IAAIvQ,EAAIoN,EAAE,KAAKmD,GAAG;AAClB,OAAG2lkB,EAAQl2kB,GAAWk2kB,EAAQl2kB,GACtBk2kB,EAAQl2kB,GAAK,IAAIwxC,OAAO,cAAcpkC,EAAE,+DAA+DA,EAAE,IAAMmD,GAAG,GAC3H,CACD,CAP6B,GASzB4lkB,GAAmD,WACtD,IAAIC,EAAuC,CAC1C,CAAC,OAAQ,KAAM,CAAC,SAAU,KAC1B,CAAC,OAAQ,KAAM,CAAC,OAAQ,KAAM,CAAC,KAAQ,KAAM,CAAC,KAAQ,KAAM,CAAC,MAAQ,MACpEtxjB,IAAI,SAAS5c,GAA0B,MAAO,CAAC,IAAIspC,OAAO,IAAMtpC,EAAE,GAAK,IAAK,MAAOA,EAAE,GAAK;AAC5F,OAAO,SAAoBi3B,GAc1B,IAbA,IAAIr9B,EAAIq9B,EAELxd,QAAQ,cAAe,IAEvBA,QAAQ,cAAc,IAEtBA,QAAQ,QAAQ,KAAKA,QAAQ,QAAQ,KAErCA,QAAQ,cAAe,KAEvBA,QAAQ,uBAAuB,MAE/BA,QAAQ,WAAW,IACdngB,EAAI,EAAGA,EAAI40kB,EAAS30kB,SAAUD,EAAGM,EAAIA,EAAE6f,QAAQy0jB,EAAS50kB,GAAG,GAAI40kB,EAAS50kB,GAAG;AACnF,OAAOM,CACR,CACD,CAtBuD,GAwBnDu0kB,GAAwB,WAAY,IAAIC,EAAW,CAAC;AACvD,OAAO,SAAkB59c,GACxB,YAAoB/lG,IAAjB2jjB,EAAS59c,GAA0B49c,EAAS59c,GACvC49c,EAAS59c,GAAM,IAAIlnF,OAAO,YAAcknF,EAAK,0BAA4BA,EAAK,IAAK,IAC7F,CAAE,CAJ0B,GAKxB69c,GAAW,wBAAyBC,GAAW;AACnD,SAASC,GAAYtojB,EAAiBgsB,GACrC,IAAIl4C,EAAIsykB,GAAYpmjB,GAEhBzH,EAA4ByH,EAAK4P,MAAMs4iB,GAAQp0kB,EAAE6sf,YAAY,GAC7DhmV,EAAqB;AACzB,GAAGpiJ,EAAQjlB,QAAUQ,EAAEsd,KAAM,CAC5B,GAAG46B,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,4BAA8B8kB,EAAQjlB,OAAS,OAASQ,EAAEsd;AACvF,OAAOupJ,CACR,CAKA,OAJApiJ,EAAQhL,QAAQ,SAASxT,GACxB,IAAIsK,EAAItK,EAAEyZ,QAAQ40jB,GAAS,IAAIx4iB,MAAMy4iB;AAClChkkB,GAAGs2J,EAAIhgK,KAAK,CAAC0J,EAAEwjkB,GAASxjkB,EAAE,IAAKxS,EAAEwS,EAAE,IACvC,GACOs2J,CACR,CAEA,IAAI6ta,GAAU;AACd,SAASC,GAASxpkB,EAAamD,GAA2B,MAAO,IAAMnD,GAAKmD,EAAEwtB,MAAM44iB,IAAS,wBAA0B,IAAM,IAAMpmkB,EAAI,KAAOnD,EAAI,GAAK,CAEvJ,SAASypkB,GAAW50kB,GAAgB,OAAO23C,GAAK33C,GAAG6iB,IAAI,SAASlI,GAAK,MAAO,IAAMA,EAAI,KAAO3a,EAAE2a,GAAK,GAAI,GAAG5D,KAAK,GAAK,CACrH,SAAS89jB,GAAU1pkB,EAAamD,EAActO,GAAK,MAAO,IAAMmL,GAAW,MAALnL,EAAa40kB,GAAW50kB,GAAK,KAAa,MAALsO,GAAcA,EAAEwtB,MAAM44iB,IAAS,wBAA0B,IAAM,IAAMpmkB,EAAI,KAAOnD,EAAI,KAAO,GAAI,CAE1M,SAAS2pkB,GAAal2kB,EAAYb,GAA6B,IAAM,OAAOa,EAAEylT,cAAc3kS,QAAQ,QAAQ,GAAK,CAAE,MAAMpgB,GAAK,GAAGvB,EAAG,MAAMuB,CAAG,CAAE,MAAO,EAAI,CAe1J,SAASy1kB,GAAen2kB,GACvB,GAAGk6jB,GAAqFC,OAAOgB,SAASn7jB,GAAI,OAAOA,EAAE0Q,SAAS;AAC9H,GAAgB,iBAAN1Q,EAAgB,OAAOA;AAEjC,GAAyB,oBAAfu4M,YAA8Bv4M,aAAau4M,WAAY,OAAO48X,GAASpa,EAAIC,EAAKh7jB;AAC1F,MAAM,IAAIe,MAAM,8CACjB,CAEA,IAAIq1kB,GAAY,6DAGZC,GAIC,+DAJDA,GAMI,0EANJA,GAWE,sEAXFA,GAaG,uEAbHA,GAcI,4CAIJC,GAAa,CAChB,4DACA,gDACA,sDACA,oDAGGC,GACK,0CADLA,GAEK,yCAFLA,GAGK,+CAiCLC,GAAc,SAAStb,GAAmE,IAAlB,IAAI7zjB,EAAE,GAAoB1G,EAAE,EAAEA,EAAEu6jB,EAAK,GAAGt6jB,SAASD,EAAG,GAAGu6jB,EAAK,GAAGv6jB,GAAI,IAAI,IAAIqlF,EAAE,EAAE/lF,EAAEi7jB,EAAK,GAAGv6jB,GAAGC,OAAOolF,EAAE/lF,EAAE+lF,GAA5F,MAAkG3+E,EAAEY,KAAK+K,MAAM3L,EAAG6zjB,EAAK,GAAGv6jB,GAAGF,MAAMulF,EAAEA,EAArI;AAA4I,OAAO3+E,CAAG,EACzOy9jB,GAAa5K,EAAU,SAASgB,GAAQ,OAAQA,EAAK,GAAGt6jB,OAAS,GAAKu5jB,OAAOgB,SAASD,EAAK,GAAG,IAAOf,OAAOrnjB,OAAOoojB,EAAK,GAAGj3iB,IAAI,SAAS5c,GAAK,OAAO8yjB,OAAOgB,SAAS9zjB,GAAKA,EAAI+yjB,EAAY/yjB,EAAI,IAAMmvkB,GAAYtb,EAAM,EAAIsb,GAEzNC,GAAa,SAASn7jB,EAAsBzY,EAAanC,GAAwD,IAA7B,IAAIwzJ,EAAqB,GAAYvzJ,EAAEkC,EAAGlC,EAAED,EAAGC,GAAG,EAAGuzJ,EAAGjsJ,KAAK+oC,OAAOiB,aAAaykiB,GAAep7jB,EAAE3a;AAAM,OAAOuzJ,EAAG/7I,KAAK,IAAI2I,QAAQu6iB,EAAK,GAAK,EACjOgK,GAAYnL,EAAU,SAAS5+iB,EAAsBzY,EAAanC,GAA2B,OAAIy5jB,OAAOgB,SAAS7/iB,GAAqEA,EAAE5K,SAAS,UAAU7N,EAAEnC,GAAGogB,QAAQu6iB,EAAK,IAAjEob,GAAWn7jB,EAAEzY,EAAEnC,EAA6E,EAAI+1kB,GAE5PE,GAAa,SAASr7jB,EAAsBzY,EAAazF,GAAwD,IAA7B,IAAI82J,EAAqB,GAAYvzJ,EAAEkC,EAAGlC,EAAEkC,EAAEzF,IAAKuD,EAAGuzJ,EAAGjsJ,MAAM,IAAMqT,EAAE3a,GAAG+P,SAAS,KAAKjQ,OAAO;AAAK,OAAOyzJ,EAAG/7I,KAAK,GAAK,EAC5My+jB,GAAY1c,EAAU,SAAS5+iB,EAAsBzY,EAAazF,GAA2B,OAAO+8jB,OAAOgB,SAAS7/iB,GAAkCA,EAAE5K,SAAS,MAAM7N,EAAEA,EAAEzF,GAAKu5kB,GAAWr7jB,EAAEzY,EAAEzF,EAAI,EAAIu5kB,GAEvME,GAAU,SAASv7jB,EAAsBzY,EAAanC,GAA2B,IAAX,IAAIwzJ,EAAG,GAAYvzJ,EAAEkC,EAAGlC,EAAED,EAAGC,IAAKuzJ,EAAGjsJ,KAAK+oC,OAAOiB,aAAa6kiB,GAAYx7jB,EAAE3a;AAAM,OAAOuzJ,EAAG/7I,KAAK,GAAK,EAC5K4+jB,GAAS7c,EAAU,SAAgB5+iB,EAAuBzY,EAAcnC,GAAgB,OAAQy5jB,OAAOgB,SAAS7/iB,GAAqCA,EAAE5K,SAAS,OAAO7N,EAAEnC,GAAKm2kB,GAAQv7jB,EAAEzY,EAAEnC,EAAI,EAAIm2kB,GAElMG,GAAW,SAAS17jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAI0/iB,GAAOz7jB,EAAG3a,EAAE,EAAEA,EAAE,EAAE02B,EAAI,GAAK,EAAG,EACxI4/iB,GAAUD,GAEVE,GAAW,SAAS57jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAI0/iB,GAAOz7jB,EAAG3a,EAAE,EAAEA,EAAE,EAAE02B,EAAI,GAAK,EAAG,EACxI8/iB,GAAUD,GAEVE,GAAY,SAAS97jB,EAAsB3a,GAAgB,IAAI02B,EAAM,EAAEyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAI0/iB,GAAOz7jB,EAAG3a,EAAE,EAAEA,EAAE,EAAE02B,EAAI,GAAK,EAAG,EAC3IggjB,GAAWD,GAEXE,GAAU,SAAeh8jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAIguiB,GAAU/pjB,EAAG3a,EAAE,EAAEA,EAAE,EAAE02B,GAAO,EAAG,EAC9IkgjB,GAASD,GAETE,GAAW,SAASl8jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAI0/iB,GAAOz7jB,EAAG3a,EAAE,EAAEA,EAAE,EAAE02B,GAAO,EAAG,EACtIogjB,GAAUD,GAEVE,GAAY,SAASp8jB,EAAuBwzM,GAAkB,OAtDlE,SAAwBxzM,EAAuBwzM,GAI9C,IAHA,IAAIjsN,EAAI,EAAI,GAAKyY,EAAEwzM,EAAM,KAAO,GAC5BpuN,IAAmB,IAAb4a,EAAEwzM,EAAM,KAAc,IAAOxzM,EAAEwzM,EAAM,KAAO,EAAK,IACvDtkN,EAAc,GAAT8Q,EAAEwzM,EAAI,GACPnuN,EAAI,EAAGA,GAAK,IAAKA,EAAG6J,EAAQ,IAAJA,EAAU8Q,EAAEwzM,EAAMnuN;AAClD,OAAQ,MAALD,EAAwB,GAAL8J,EAAU3H,QAAgBm1F,KACxC,GAALt3F,EAAQA,GAAK,MACTA,GAAK,KAAM8J,GAAKpH,KAAKC,IAAI,EAAE,KAC3BR,EAAIO,KAAKC,IAAI,EAAG3C,EAAI,IAAM8J,EAClC,CATA,CAsDwF8Q,EAAGwzM,EAAK,EAC5F6oX,GAAWD,GAEXE,GAAS,SAAkBz2kB,GAAK,OAAO+S,MAAM1T,QAAQW,IAA6B,oBAAfo3M,YAA8Bp3M,aAAao3M,UAAa;AAa/H,SAASohX,KACR0L,GAAY,SAAS/pjB,EAAsBzY,EAAanC,GAAgB,OAAO24jB,EAASjrR,MAAM71R,OAAO,KAAM+C,EAAE7a,MAAMoC,EAAEnC,IAAIogB,QAAQu6iB,EAAM,GAAK,EAC5I0b,GAAS,SAASz7jB,EAAsBzY,EAAanC,GAAgB,OAAO24jB,EAASjrR,MAAM71R,OAAO,MAAO+C,EAAE7a,MAAMoC,EAAEnC,GAAK,EACxHu2kB,GAAU,SAAS37jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAIgiiB,EAASjrR,MAAM71R,OAAOsgjB,EAAcv9iB,EAAE7a,MAAME,EAAE,EAAGA,EAAE,EAAE02B,EAAI,IAAM,EAAG,EAC3K8/iB,GAAU,SAAS77jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAIgiiB,EAASjrR,MAAM71R,OAAOqgjB,EAAkBt9iB,EAAE7a,MAAME,EAAE,EAAGA,EAAE,EAAE02B,EAAI,IAAM,EAAG,EAC/KggjB,GAAW,SAAS/7jB,EAAsB3a,GAAgB,IAAI02B,EAAM,EAAEyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAIgiiB,EAASjrR,MAAM71R,OAAO,KAAM+C,EAAE7a,MAAME,EAAE,EAAEA,EAAE,EAAE02B,EAAI,IAAM,EAAG,EACrKkgjB,GAAS,SAASj8jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAIgiiB,EAASjrR,MAAM71R,OAAO,KAAM+C,EAAE7a,MAAME,EAAE,EAAEA,EAAE,EAAE02B,IAAQ,EAAG,EAC/JogjB,GAAU,SAASn8jB,EAAsB3a,GAAgB,IAAI02B,EAAMyuiB,GAAexqjB,EAAE3a;AAAI,OAAO02B,EAAM,EAAIgiiB,EAASjrR,MAAM71R,OAAO,MAAO+C,EAAE7a,MAAME,EAAE,EAAEA,EAAE,EAAE02B,IAAQ,EAAG,CAClK,CAnBG6iiB,IACF+c,GAAU,SAAiB37jB,EAAuB3a,GAAgB,IAAIw5jB,OAAOgB,SAAS7/iB,GAAoC,OAAO07jB,GAAS17jB,EAAG3a;AAAI,IAAI02B,EAAM/b,EAAEu8jB,aAAal3kB;AAAI,OAAO02B,EAAM,EAAI/b,EAAE5K,SAAS,OAAO/P,EAAE,EAAEA,EAAE,EAAE02B,EAAI,GAAK,EAAG,EACrO8/iB,GAAU,SAAiB77jB,EAAuB3a,GAAgB,IAAIw5jB,OAAOgB,SAAS7/iB,GAAoC,OAAO47jB,GAAS57jB,EAAG3a;AAAI,IAAI02B,EAAM/b,EAAEu8jB,aAAal3kB;AAAI,OAAO02B,EAAM,EAAI/b,EAAE5K,SAAS,OAAO/P,EAAE,EAAEA,EAAE,EAAE02B,EAAI,GAAK,EAAG,EACrOggjB,GAAW,SAAkB/7jB,EAAuB3a,GAAgB,IAAIw5jB,OAAOgB,SAAS7/iB,GAAoC,OAAO87jB,GAAU97jB,EAAG3a;AAAI,IAAI02B,EAAM,EAAE/b,EAAEu8jB,aAAal3kB;AAAI,OAAO2a,EAAE5K,SAAS,UAAU/P,EAAE,EAAEA,EAAE,EAAE02B,EAAI,EAAG,EAC9NkgjB,GAAS,SAAgBj8jB,EAAuB3a,GAAgB,IAAIw5jB,OAAOgB,SAAS7/iB,GAAoC,OAAOg8jB,GAAQh8jB,EAAG3a;AAAI,IAAI02B,EAAM/b,EAAEu8jB,aAAal3kB;AAAI,OAAO2a,EAAE5K,SAAS,UAAU/P,EAAE,EAAEA,EAAE,EAAE02B,EAAK,EACpNogjB,GAAU,SAAiBn8jB,EAAuB3a,GAAgB,IAAIw5jB,OAAOgB,SAAS7/iB,GAAoC,OAAOk8jB,GAASl8jB,EAAG3a;AAAI,IAAI02B,EAAM/b,EAAEu8jB,aAAal3kB;AAAI,OAAO2a,EAAE5K,SAAS,OAAO/P,EAAE,EAAEA,EAAE,EAAE02B,EAAK,EACpNsgjB,GAAW,SAAiBr8jB,EAAuB3a,GAAgB,OAAGw5jB,OAAOgB,SAAS7/iB,GAAuCA,EAAEw8jB,aAAan3kB,GAAW+2kB,GAAUp8jB,EAAE3a,EAAI,EACvKi3kB,GAAS,SAAkBz2kB,GAAK,OAAOg5jB,OAAOgB,SAASh6jB,IAAM+S,MAAM1T,QAAQW,IAA6B,oBAAfo3M,YAA8Bp3M,aAAao3M,UAAa,QAa3H,IAAb8gX,GAA0BM;AAEpC,IAAImd,GAAc,SAASx7jB,EAAuBwzM,GAA6B,OAAOxzM,EAAEwzM,EAAM,EAC1F4nX,GAAiB,SAASp7jB,EAAuBwzM,GAA6B,OAAgB,IAARxzM,EAAEwzM,EAAI,GAAWxzM,EAAEwzM,EAAM,EAC/GipX,GAAgB,SAASz8jB,EAAuBwzM,GAA6B,IAAI1sN,EAAa,IAARkZ,EAAEwzM,EAAI,GAAWxzM,EAAEwzM;AAAM,OAAQ1sN,EAAI,MAAUA,GAAyB,GAAnB,MAASA,EAAI,EAAU,EAClK0jkB,GAAiB,SAASxqjB,EAAuBwzM,GAA6B,OAAOxzM,EAAEwzM,EAAI,IAAI,GAAG,KAAKxzM,EAAEwzM,EAAI,IAAI,KAAKxzM,EAAEwzM,EAAI,IAAI,GAAGxzM,EAAEwzM,EAAM,EAC3I+1W,GAAgB,SAASvpjB,EAAuBwzM,GAA6B,OAAQxzM,EAAEwzM,EAAI,IAAI,GAAKxzM,EAAEwzM,EAAI,IAAI,GAAKxzM,EAAEwzM,EAAI,IAAI,EAAGxzM,EAAEwzM,EAAM,EACxIkpX,GAAgB,SAAS18jB,EAAuBwzM,GAA6B,OAAQxzM,EAAEwzM,IAAM,GAAKxzM,EAAEwzM,EAAI,IAAI,GAAKxzM,EAAEwzM,EAAI,IAAI,EAAGxzM,EAAEwzM,EAAI,EAAI;AAE5I,SAASogX,GAAUxwjB,EAAiBvf,GACnC,IAAU84kB,EAAsBC,EAAWhjkB,EAAG+qjB,EAAIt/jB,EAAGw3kB,EAAjDl3kB,EAAE,GAA8B2oI,EAAG;AACvC,OAAOzqI,GACN,IAAK,OAEJ,GADAg5kB,EAAM93kB,KAAKjD,EACR88jB,GAAWC,OAAOgB,SAAS96jB,MAAOY,EAAIZ,KAAKI,MAAMJ,KAAKjD,EAAGiD,KAAKjD,EAAE,EAAEshB,GAAMhO,SAAS;KAC/E,IAAI/P,EAAI,EAAGA,EAAI+d,IAAQ/d,EAAKM,GAAG+vC,OAAOiB,aAAaykiB,GAAer2kB,KAAM83kB,IAAOA,GAAK;AACzFz5jB,GAAQ;AACR;AAED,IAAK,OAAQzd,EAAI81kB,GAAO12kB,KAAMA,KAAKjD,EAAGiD,KAAKjD,EAAIshB;AAAO;AACtD,IAAK,UAAWA,GAAQ,EAAGzd,EAAIokkB,GAAUhlkB,KAAMA,KAAKjD,EAAGiD,KAAKjD,EAAIshB;AAAO;AAEvE,IAAK,OACJ,QAAuB,IAAb26iB,EACL,OAAO6V,GAAUjkkB,KAAK5K,KAAMqe,EAAM;AADHzd,EAAIo4jB,EAASjrR,MAAM71R,OAAOqgjB,EAAkBv4jB,KAAKI,MAAMJ,KAAKjD,EAAGiD,KAAKjD,EAAE,EAAEshB,IAE5GA,GAAO;AAAU;AAGlB,IAAK,aAAczd,EAAIg2kB,GAAQ52kB,KAAMA,KAAKjD,GAAIshB,EAAO,EAAIonjB,GAAezlkB,KAAMA,KAAKjD;AAAI;AACvF,IAAK,WAAY6D,EAAIk2kB,GAAQ92kB,KAAMA,KAAKjD,GAAIshB,EAAO,EAAIonjB,GAAezlkB,KAAMA,KAAKjD;AAAI;AAErF,IAAK,SAAU6D,EAAIo2kB,GAASh3kB,KAAMA,KAAKjD,GAAIshB,EAAO,EAAI,EAAIonjB,GAAezlkB,KAAMA,KAAKjD;AAAI;AAExF,IAAK,OAAQshB,EAAO,EAAKonjB,GAAezlkB,KAAMA,KAAKjD,GAAI6D,EAAIs2kB,GAAOl3kB,KAAMA,KAAKjD,GAAc,EAAPshB,IAAaA,GAAQ;AAAG;AAE5G,IAAK,QAASA,EAAO,EAAKonjB,GAAezlkB,KAAMA,KAAKjD,GAAI6D,EAAIw2kB,GAAQp3kB,KAAMA,KAAKjD,GAAc,EAAPshB,IAAaA,GAAQ,GAAY,EAAPA;AAAc;AAE9H,IAAK,OACJ,IADYA,EAAO,EAAGzd,EAAI,GACqB,KAAxCiU,EAAE4hkB,GAAYz2kB,KAAMA,KAAKjD,EAAIshB,OAAckrH,EAAG3hI,KAAKsxjB,EAASrkjB;AACnEjU,EAAI2oI,EAAGzxH,KAAK;AAAK;AAClB,IAAK,QACJ,IADauG,EAAO,EAAGzd,EAAI,GACmB,KAAvCiU,EAAEwhkB,GAAer2kB,KAAKA,KAAKjD,EAAGshB,KAAYkrH,EAAG3hI,KAAKsxjB,EAASrkjB,IAAIwJ,GAAM;AAC5EA,GAAM,EAAGzd,EAAI2oI,EAAGzxH,KAAK;AAAK;AAG3B,IAAK,YACJ,IADiBlX,EAAI,GAAIk3kB,EAAM93kB,KAAKjD,EAChCuD,EAAI,EAAGA,EAAI+d,IAAQ/d,EAAG,CACzB,GAAGN,KAAK+3kB,OAAoC,IAA5B/3kB,KAAK+3kB,KAAKlukB,QAAQiukB,GAIjC,OAHAjjkB,EAAI4hkB,GAAYz2kB,KAAM83kB,GACtB93kB,KAAKjD,EAAI+6kB,EAAM,EACflY,EAAKiP,GAAUjkkB,KAAK5K,KAAMqe,EAAK/d,EAAGuU,EAAI,YAAc,aAC7C00H,EAAGzxH,KAAK,IAAM8njB;AAEtBr2b,EAAG3hI,KAAKsxjB,EAASmd,GAAer2kB,KAAM83kB,KACtCA,GAAK,CACN,CAAEl3kB,EAAI2oI,EAAGzxH,KAAK,IAAKuG,GAAQ;AAAG;AAE/B,IAAK,QACJ,QAAuB,IAAb26iB,EAA0B,CACnCp4jB,EAAIo4jB,EAASjrR,MAAM71R,OAAOqgjB,EAAkBv4jB,KAAKI,MAAMJ,KAAKjD,EAAGiD,KAAKjD,EAAIshB;AACxE,KACD,CAED,IAAK,YACJ,IADiBzd,EAAI,GAAIk3kB,EAAM93kB,KAAKjD,EAChCuD,EAAI,EAAGA,GAAK+d,IAAQ/d,EAAG,CAC1B,GAAGN,KAAK+3kB,OAAoC,IAA5B/3kB,KAAK+3kB,KAAKlukB,QAAQiukB,GAIjC,OAHAjjkB,EAAI4hkB,GAAYz2kB,KAAM83kB,GACtB93kB,KAAKjD,EAAI+6kB,EAAM,EACflY,EAAKiP,GAAUjkkB,KAAK5K,KAAMqe,EAAK/d,EAAGuU,EAAI,YAAc,aAC7C00H,EAAGzxH,KAAK,IAAM8njB;AAEtBr2b,EAAG3hI,KAAKsxjB,EAASud,GAAYz2kB,KAAM83kB,KACnCA,GAAK,CACN,CAAEl3kB,EAAI2oI,EAAGzxH,KAAK;AAAK;AAEpB,QACD,OAAOuG,GACN,KAAK,EAA6C,OAA1Cu5jB,EAAKnB,GAAYz2kB,KAAMA,KAAKjD,GAAIiD,KAAKjD,IAAY66kB;AACzD,KAAK,EAAiF,OAA9EA,GAAY,MAAN94kB,EAAY44kB,GAAgBrB,IAAgBr2kB,KAAMA,KAAKjD,GAAIiD,KAAKjD,GAAK,EAAU66kB;AAC7F,KAAK,EAAG,KAAM,EACb,MAAS,MAAN94kB,GAAgC,IAAjBkB,KAAKA,KAAKjD,EAAE,IACvB86kB,EAAKpS,GAAezlkB,KAAMA,KAAKjD,GAAIiD,KAAKjD,GAAK,EAAY86kB,IADfD,GAAOv5jB,EAAO,EAAKmmjB,GAAgBmT,IAAe33kB,KAAMA,KAAKjD,GAAIiD,KAAKjD,GAAK,EAAU66kB;AAEvI,KAAK,EAAG,KAAM,EACb,GAAS,MAAN94kB,EAGW,OAFC+4kB,EAAH,GAARx5jB,EAAgBi5jB,GAASt3kB,KAAMA,KAAKjD,GAC7Bu6kB,GAAS,CAACt3kB,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,GAAGiD,KAAKA,KAAKjD,EAAE,IAAK,GAC9IiD,KAAKjD,GAAK,EAAU86kB;AACdx5jB,EAAO;AAEf,KAAK,GAAIzd,EAAI21kB,GAAUv2kB,KAAMA,KAAKjD,EAAGshB,IAExB,OAAdre,KAAKjD,GAAGshB,EAAazd,CACtB,CAEA,IAEIo3kB,GAAkB,SAAS/8jB,EAAuBk4B,EAAgBs7K,GAA2BxzM,EAAEwzM,GAAc,IAANt7K,EAAal4B,EAAEwzM,EAAI,GAAOt7K,IAAQ,EAAK,GAAO;AAEzJ,SAAS8kiB,GAAWn5kB,EAAcq0C,EAAuBjnC,GACxD,IAAImS,EAAO,EAAG/d,EAAI;AAClB,GAAS,SAAN4L,EAAc,CAEhB,IAAI5L,EAAI,EAAGA,GAAK6yC,EAAI5yC,SAAUD,EAAG03kB,GAAgBh4kB,KAAMmzC,EAAInB,WAAW1xC,GAAIN,KAAKjD,EAAI,EAAIuD;AACvF+d,EAAO,EAAI80B,EAAI5yC,MAChB,MAAO,GAAS,SAAN2L,EAAc,CACvB,QAAuB,IAAb8sjB,GAA4C,KAAhBR,EAGrC,IAAIl4jB,EAAI,EAAGA,GAAK6yC,EAAI5yC,SAAUD,EAAG,CAChC,IAAI43kB,EAAYlf,EAASjrR,MAAMv/N,OAAOgqf,EAAcrlhB,EAAIpvC,OAAOzD;AAC/DN,KAAKA,KAAKjD,EAAIuD,GAAK43kB,EAAU,EAC9B,MAKA,IAFA/kiB,EAAMA,EAAI1yB,QAAQ,gBAAiB,KAE/BngB,EAAI,EAAGA,GAAK6yC,EAAI5yC,SAAUD,EAAGN,KAAKA,KAAKjD,EAAIuD,GAA0B,IAApB6yC,EAAInB,WAAW1xC;AAErE+d,EAAO80B,EAAI5yC,MACZ,KAAO,IAAS,QAAN2L,EAAa,CACtB,KAAM5L,EAAIxB,IAAKwB,EAEdN,KAAKA,KAAKjD,KAAQ8R,SAASskC,EAAI/yC,MAAM,EAAEE,EAAG,EAAEA,EAAE,GAAI,KAAK;AACtD,OAAON,IACV,CAAO,GAAS,YAANkM,EAAiB,CAEzB,IAAIiT,EAAiBpc,KAAK8b,IAAI7e,KAAKjD,EAAI+B,EAAGkB,KAAKO;AAC/C,IAAID,EAAI,EAAGA,EAAIyC,KAAK8b,IAAIs0B,EAAI5yC,OAAQzB,KAAMwB,EAAG,CAC5C,IAAIigS,EAAKptP,EAAInB,WAAW1xC;AACxBN,KAAKA,KAAKjD,KAAa,IAALwjS,EAClBvgS,KAAKA,KAAKjD,KAAQwjS,GAAM,CACzB,CACA,KAAMvgS,KAAKjD,EAAIoiB,GAAKnf,KAAKA,KAAKjD,KAAO;AACrC,OAAOiD,IACT,CAA2C,OAAOlB,GACjD,KAAM,EAAGuf,EAAO,EAAGre,KAAKA,KAAKjD,GAAS,IAAJo2C;AAAU;AAC5C,KAAM,EAAG90B,EAAO,EAAGre,KAAKA,KAAKjD,GAAS,IAAJo2C,EAAUA,KAAS,EAAGnzC,KAAKA,KAAKjD,EAAE,GAAS,IAAJo2C;AAAU;AACnF,KAAM,EAAG90B,EAAO,EAAGre,KAAKA,KAAKjD,GAAS,IAAJo2C,EAAUA,KAAS,EAAGnzC,KAAKA,KAAKjD,EAAE,GAAS,IAAJo2C,EAAUA,KAAS,EAAGnzC,KAAKA,KAAKjD,EAAE,GAAS,IAAJo2C;AAAU;AAC1H,KAAM,EAAG90B,EAAO,EA5CI,SAASpD,EAAuBk4B,EAAgBs7K,GAA2BxzM,EAAEwzM,GAAc,IAANt7K,EAAal4B,EAAEwzM,EAAI,GAAOt7K,IAAQ,EAAK,IAAOl4B,EAAEwzM,EAAI,GAAOt7K,IAAQ,GAAM,IAAOl4B,EAAEwzM,EAAI,GAAOt7K,IAAQ,GAAM,GAAO,CAAvM,CA4CenzC,KAAMmzC,EAAKnzC,KAAKjD;AAAI;AACvD,KAAM,EAAa,GAAVshB,EAAO,EAAY,MAANnS,EAAW,EA/MnC,SAAyB+O,EAAuB3J,EAAcm9M,GAC7D,IAAIrwK,GAAS9sC,EAAI,GAAO,EAAEA,QAAmB,EAAI,IAAM,EAAIjR,EAAI,EAAG8J,EAAI,EAClEgukB,EAAK/5hB,GAAO9sC,EAAKA;AACjBqX,SAASwvjB,GACC,GAANA,EAAS93kB,EAAI8J,EAAI,GAExB9J,EAAI0C,KAAKE,MAAMF,KAAKm4E,IAAIi9f,GAAMp1kB,KAAKq1kB,KACnCjukB,EAAIgukB,EAAKp1kB,KAAKC,IAAI,EAAG,GAAK3C,GACtBA,IAAM,QAAWsoB,SAASxe,IAAOA,EAAIpH,KAAKC,IAAI,EAAE,KAAS3C,GAAK,MAC3D8J,GAAKpH,KAAKC,IAAI,EAAE,IAAK3C,GAAG,QANZA,EAAI,KAAO8J,EAAI8wE,MAAM3pE,GAAK,MAAS;AAQvD,IAAI,IAAIhR,EAAI,EAAGA,GAAK,IAAKA,EAAG6J,GAAG,IAAK8Q,EAAEwzM,EAAMnuN,GAAS,IAAJ6J;AACjD8Q,EAAEwzM,EAAM,IAAW,GAAJpuN,IAAa,EAAU,GAAJ8J,EAClC8Q,EAAEwzM,EAAM,GAAMpuN,GAAK,EAAK+9C,CACzB,CAdA,CA+MqDp+C,KAAMmzC,EAAKnzC,KAAKjD;AAAI,KAAO,CAE9E,KAAK,GAAI;AACT,KAAM,EAAGshB,EAAO,EA/CI,SAASpD,EAAuBk4B,EAAgBs7K,GAA2BxzM,EAAEwzM,GAAc,IAANt7K,EAAal4B,EAAEwzM,EAAI,GAAOt7K,GAAO,EAAK,IAAOl4B,EAAEwzM,EAAI,GAAOt7K,GAAO,GAAM,IAAOl4B,EAAEwzM,EAAI,GAAOt7K,GAAO,GAAM,GAAO,CAApM,CA+CcnzC,KAAMmzC,EAAKnzC,KAAKjD,GACnD,CACgB,OAAhBiD,KAAKjD,GAAKshB,EAAare,IACxB,CAEA,SAAS8ukB,GAAWuJ,EAAmBC,GACtC,IAAInukB,EAAIoskB,GAAUv2kB,KAAKA,KAAKjD,EAAEs7kB,EAAO93kB,QAAQ;AAC7C,GAAG4J,IAAMkukB,EAAQ,MAAM,IAAI33kB,MAAM43kB,EAAM,YAAcD,EAAS,QAAUlukB;AACxEnK,KAAKjD,GAAKs7kB,EAAO93kB,QAAQ,CAC1B,CAEA,SAAS+hkB,GAAU/qX,EAAMj9J,GACxBi9J,EAAKx6M,EAAIu9C,EACTi9J,EAAKgrX,WAAoBsM,GACzBt3X,EAAKssX,IAAMiL,GACXv3X,EAAK4qX,YAAc8V,EACpB,CAEA,SAASM,GAAUhhY,EAAMh3M,GAAoCg3M,EAAKx6M,GAAKwD,CAAQ,CAE/E,SAASilkB,GAAQlkS,GAChB,IAAI1gS,EAAIu5jB,EAAY74R;AAEpB,OADAghS,GAAU1hkB,EAAG,GACNA,CACR,CAGA,SAAS43kB,GAAavrjB,EAAM07F,EAAuB1vE,GAClD,GAAIhsB,EAAJ,CACA,IAAIwrjB,EAASC,EAASn4kB;AACtB+hkB,GAAUr1iB,EAAMA,EAAKlwB,GAAK;AAE1B,IADA,IAAI6C,EAAIqtB,EAAK1sB,OAAQo4kB,EAAK,EAAG5vI,EAAM,EAC7B97a,EAAKlwB,EAAI6C,GAAG,CAET,KADR+4kB,EAAK1rjB,EAAKs1iB,WAAW,MACPoW,GAAW,IAALA,KAAoC,IAArB1rjB,EAAKs1iB,WAAW,KAAY;AAC/D,IAAIhqjB,EAAIqgkB,GAAeD,IAAOC,GAAe;AAG7C,IADAr4kB,EAAmB,KADnBk4kB,EAAUxrjB,EAAKs1iB,WAAW,IAEtBmW,EAAU,EAAGA,EAAS,GAAgB,IAAVD,IAAmBC,EAASn4kB,IAA4C,KAAhCk4kB,EAAUxrjB,EAAKs1iB,WAAW,MAAc,EAAEmW;AAClH3vI,EAAM97a,EAAKlwB,EAAIwD;AACf,IAAIZ,EAAI4Y,EAAErM,GAAKqM,EAAErM,EAAE+gB,EAAM1sB,EAAQ04C;AAEjC,GADAhsB,EAAKlwB,EAAIgsc,EACNpgV,EAAGhpH,EAAG4Y,EAAGogkB,GAAK,MAClB,CAfU,CAgBX,CAGA,SAASE,KACR,IAAIhe,EAAwB,GAAIie,EAAQjf,EAAU,IAAM,KACpDkf,EAAS,SAAmBz3S,GAC/B,IAAI1gS,EAAe4kkB,GAAQlkS;AAE3B,OADAghS,GAAU1hkB,EAAG,GACNA,CACR,EAEIo4kB,EAAmBD,EAAOD,GAE1BG,EAAS,WACRD,IACDA,EAAOz4kB,OAASy4kB,EAAOj8kB,KAAKi8kB,EAASA,EAAO54kB,MAAM,EAAG44kB,EAAOj8kB,IAAWA,EAAIi8kB,EAAOz4kB,QAClFy4kB,EAAOz4kB,OAAS,GAAGs6jB,EAAKjzjB,KAAKoxkB,GAChCA,EAAS,KACV,EAEI//e,EAAO,SAAiBqoM,GAC3B,OAAG03S,GAAW13S,EAAM03S,EAAOz4kB,OAASy4kB,EAAOj8kB,EAAYi8kB,GACvDC,IACQD,EAASD,EAAOh2kB,KAAK+b,IAAIwiR,EAAG,EAAGw3S,IACxC;AASA,MAAQ,CAAE7/e,KAAKA,EAAMrxF,KAFV,SAAiBqyjB,GAAOgf,IAAuC,OAA7BD,EAAS/e,GAAel9jB,IAAWi8kB,EAAOj8kB,EAAIi8kB,EAAOz4kB,QAAQ04F,EAAK6/e,EAAQ,EAEvF35jB,IAPtB,WAET,OADA85jB,IACOre,EAAQC,EAChB,EAIyCqe,MAAMre,EAChD,CAEA,SAASse,GAAav7c,EAAiB95H,EAAiBg3hB,EAASv6hB,GAChE,IAA0BxD,EAAtB+B,GAAgBgF;AACpB,IAAGm3E,MAAMn8E,GAAT,CACIyB,IAAQA,EAASq4kB,GAAe95kB,GAAG+F,IAAMi2hB,GAAS,IAAIv6hB,QAAU,GACpExD,EAAI,GAAK+B,GAAK,IAAO,EAAI,GAAK,EAC3ByB,GAAU,OAAQxD,EAAMwD,GAAU,SAAUxD,EAAMwD,GAAU,WAAYxD;AAC3E,IAAI6D,EAAIg9H,EAAG3kC,KAAKl8F;AACb+B,GAAK,IAAM8B,EAAEuhkB,YAAY,EAAGrjkB,IAE9B8B,EAAEuhkB,YAAY,EAAgB,KAAR,IAAJrjkB,IAClB8B,EAAEuhkB,YAAY,EAAIrjkB,GAAK;AAExB,IAAI,IAAIwB,EAAI,EAAQ,GAALA,IAAUA,EAAG,CAC3B,KAAGC,GAAU,KACR,CAAEK,EAAEuhkB,YAAY,EAAG5hkB;AAAS,KAAO,CADnBK,EAAEuhkB,YAAY,EAAmB,KAAN,IAAT5hkB,IAAsBA,IAAW,CAEzE,CAC2BA,EAAS,GAAKg3kB,GAAOz8C,IAAUl9Z,EAAGh2H,KAAKkzhB,EAdrD,CAed,CAEA,SAASs+C,GAAer0N,EAAsBgkF,EAAa9vZ,GAC1D,IAAI8/M,EAAMu4U,GAAIvsN;AAQd,GAPGgkF,EAAIvmc,GACHu2P,EAAIsgV,OAAMtgV,EAAI50P,GAAK4kc,EAAIvmc,EAAE2B,GACzB40P,EAAIugV,OAAMvgV,EAAIl4P,GAAKkoc,EAAIvmc,EAAE3B,KAEzBk4P,EAAIsgV,OAAMtgV,EAAI50P,GAAK4kc,EAAI5kc,GACvB40P,EAAIugV,OAAMvgV,EAAIl4P,GAAKkoc,EAAIloc,KAEvBo4C,GAAQA,EAAKsgiB,KAAO,GAAI,CAC3B,KAAMxgV,EAAI50P,GAAK,KAAO40P,EAAI50P,GAAK;AAC/B,KAAM40P,EAAIl4P,GAAK,OAASk4P,EAAIl4P,GAAK,KAClC,CACA,OAAOk4P,CACR,CAEA,SAASygV,GAAgBz0N,EAAM7sS,EAAOj/B,GACrC,IAAI8/M,EAAMu4U,GAAIvsN;AAGd,OAFAhsH,EAAIv2P,EAAI42kB,GAAergV,EAAIv2P,EAAG01E,EAAM11E,EAAGy2C,GACvC8/M,EAAI14P,EAAI+4kB,GAAergV,EAAI14P,EAAG63E,EAAM11E,EAAGy2C,GAChC8/M,CACR,CAEA,SAAS0gV,GAAgBt1kB,EAAmBo1kB,GAC3C,GAAGp1kB,EAAEk1kB,MAAQl1kB,EAAEA,EAAI,EAAiB,IAAZA,EAAImtkB,GAAIntkB,GAAUA,EAAEA,EAAI,GAAGA,EAAEA,GAAMo1kB,EAAO,EAAK,MAAS;AAChF,GAAGp1kB,EAAEm1kB,MAAQn1kB,EAAEtD,EAAI,EAAiB,IAAZsD,EAAImtkB,GAAIntkB,GAAUA,EAAEtD,EAAI,GAAGsD,EAAEtD,GAAM04kB,EAAO,EAAK,QAAaA,EAAO,EAAK,MAAU;AAC1G,IAAI/2kB,EAAIk3kB,GAAYv1kB;AAGpB,OAFIA,EAAEk1kB,MAAkB,MAAVl1kB,EAAEk1kB,OAAc72kB,EAAYA,EAyBgBie,QAAQ,WAAW,SAxBzEtc,EAAEm1kB,MAAkB,MAAVn1kB,EAAEm1kB,OAAc92kB,EAAYA,EAmBgBie,QAAQ,kBAAkB,WAlB7Eje,CACR,CAEA,SAASm3kB,GAAiB94kB,EAAGo4C,GAC5B,OAAY,GAATp4C,EAAE2B,EAAE3B,GAAWA,EAAE2B,EAAE82kB,MAClBz4kB,EAAER,EAAEQ,IAAMo4C,EAAKsgiB,MAAQ,GAAK,QAAWtgiB,EAAKsgiB,MAAQ,EAAI,MAAU,QAAa14kB,EAAER,EAAEi5kB,KAI3E,GAATz4kB,EAAE2B,EAAE2B,GAAWtD,EAAE2B,EAAE62kB,MAClBx4kB,EAAER,EAAE8D,IAAM80C,EAAKsgiB,MAAQ,GAAK,MAAS,MAAU14kB,EAAER,EAAEg5kB,KAIhDI,GAAgB54kB,EAAE2B,EAAGy2C,EAAKsgiB,MAAQ,IAAME,GAAgB54kB,EAAER,EAAG44C,EAAKsgiB,OAH/D14kB,EAAE2B,EAAE82kB,KAAO,GAAK,KAAOM,GAAW/4kB,EAAE2B,EAAE3B,GAAK,KAAOA,EAAER,EAAEi5kB,KAAO,GAAK,KAAOM,GAAW/4kB,EAAER,EAAEQ,IALxFA,EAAE2B,EAAE62kB,KAAO,GAAK,KAAOQ,GAAWh5kB,EAAE2B,EAAE2B,GAAK,KAAOtD,EAAER,EAAEg5kB,KAAO,GAAK,KAAOQ,GAAWh5kB,EAAER,EAAE8D,EASnG,CACA,SAAS21kB,GAAWC,GAAgC,OAAOlrkB,SAAmBkrkB,EAGjBt5jB,QAAQ,WAAW,MAHM,IAAM,CAAG,CAC/F,SAASm5jB,GAAWx1U,GAA6B,MAAO,IAAMA,EAAM,EAAI,CAIxE,SAAS41U,GAAWC,GAAyE,IAAzC,IAAI91kB,EAAc81kB,EAGTx5jB,QAAQ,aAAa,MAHH9gB,EAAI,EAAGW,EAAI,EAASA,IAAM6D,EAAE5D,SAAUD,EAAGX,EAAI,GAAGA,EAAIwE,EAAE6tC,WAAW1xC,GAAK;AAAI,OAAOX,EAAI,CAAG,CACvK,SAASk6kB,GAAWnoU,GAA6B,GAAGA,EAAM,EAAG,MAAM,IAAIhxQ,MAAM,kBAAoBgxQ;AAAM,IAAIlvQ,EAAE;AAAI,MAAMkvQ,EAAKA,EAAKA,EAAI3uQ,KAAKE,OAAOyuQ,EAAI,GAAG,IAAKlvQ,EAAImuC,OAAOiB,cAAe8/N,EAAI,GAAG,GAAM,IAAMlvQ;AAAG,OAAOA,CAAG,CAMvN,SAAS03kB,GAAY/T,GAEpB,IADA,IAAI5tjB,EAAI,EAAG8C,EAAI,EACP/a,EAAI,EAAGA,EAAI6lkB,EAAK5lkB,SAAUD,EAAG,CACpC,IAAIigS,EAAK4lS,EAAKn0hB,WAAW1xC;AACtBigS,GAAM,IAAMA,GAAM,GAAIhoR,EAAI,GAAKA,GAAKgoR,EAAK,IACpCA,GAAM,IAAMA,GAAM,KAAIllR,EAAI,GAAKA,GAAKklR,EAAK,IAClD,CACA,MAAO,CAAEp8R,EAAGkX,EAAI,EAAGxa,EAAE0X,EAAI,EAC1B,CAEA,SAASmhkB,GAAY30N,GAGpB,IAFA,IAAIrzG,EAAMqzG,EAAK5gX,EAAI,EACf3B,EAAE,GACAkvQ,EAAKA,GAAMA,EAAI,GAAG,GAAI,EAAGlvQ,EAAImuC,OAAOiB,cAAe8/N,EAAI,GAAG,GAAM,IAAMlvQ;AAC5E,OAAOA,GAAKuiX,EAAKlkX,EAAI,EACtB,CACA,SAASs5kB,GAAajigB,GACrB,IAAIu2I,EAAMv2I,EAAMruE,QAAQ;AACxB,OAAW,GAAR4kN,EAAkB,CAAEjsN,EAAG03kB,GAAYhigB,GAAQ73E,EAAG65kB,GAAYhigB,IACtD,CAAE11E,EAAG03kB,GAAYhigB,EAAM93E,MAAM,EAAGquN,IAAOpuN,EAAG65kB,GAAYhigB,EAAM93E,MAAMquN,EAAM,IAChF,CAEA,SAAS2rX,GAAah4b,EAA0Bra,GAC/C,YAAiB,IAAPA,GAAoC,iBAAPA,EAE/Bqyc,GAAah4b,EAAG5/I,EAAG4/I,EAAG/hJ,IAGb,iBAAP+hJ,IAAiBA,EAAKs3b,GAAat3b,IAC5B,iBAAPra,IAAiBA,EAAK2xc,GAAa3xc,IAGtCqa,GAAMra,EAAKqa,EAAKA,EAAK,IAAMra,EACnC,CAEA,SAASsyc,GAAkBnigB,GAC1B,IAAIt3E,EAAI,CAAC4B,EAAE,CAAC2B,EAAE,EAAEtD,EAAE,GAAGR,EAAE,CAAC8D,EAAE,EAAEtD,EAAE,IAC1B4tN,EAAM,EAAGnuN,EAAI,EAAGigS,EAAK,EACrBvpQ,EAAMkhD,EAAM33E;AAChB,IAAIkuN,EAAM,EAAGnuN,EAAI02B,MACZupQ,EAAGroN,EAAMlmC,WAAW1xC,GAAG,IAAM,GAAKigS,EAAK,MADpBjgS,EAEvBmuN,EAAM,GAAGA,EAAM8xE;AAIhB,IAFA3/R,EAAE4B,EAAE2B,IAAMsqN,EAENA,EAAM,EAAGnuN,EAAI02B,MACZupQ,EAAGroN,EAAMlmC,WAAW1xC,GAAG,IAAM,GAAKigS,EAAK,KADpBjgS,EAEvBmuN,EAAM,GAAGA,EAAM8xE;AAIhB,GAFA3/R,EAAE4B,EAAE3B,IAAM4tN,EAEPnuN,IAAM02B,GAAa,IAANupQ,EAAsC,OAA1B3/R,EAAEP,EAAE8D,EAAEvD,EAAE4B,EAAE2B,EAAGvD,EAAEP,EAAEQ,EAAED,EAAE4B,EAAE3B,EAAUD;AAG7D,MAFEN,EAEEmuN,EAAM,EAAGnuN,GAAK02B,MACbupQ,EAAGroN,EAAMlmC,WAAW1xC,GAAG,IAAM,GAAKigS,EAAK,MADnBjgS,EAExBmuN,EAAM,GAAGA,EAAM8xE;AAIhB,IAFA3/R,EAAEP,EAAE8D,IAAMsqN,EAENA,EAAM,EAAGnuN,GAAK02B,MACbupQ,EAAGroN,EAAMlmC,WAAW1xC,GAAG,IAAM,GAAKigS,EAAK,KADnBjgS,EAExBmuN,EAAM,GAAGA,EAAM8xE;AAGhB,OADA3/R,EAAEP,EAAEQ,IAAM4tN,EACH7tN,CACR,CAQA,SAAS05kB,GAAYv1N,EAAezzW,EAAW1Q,GAC9C,OAAW,MAARmkX,GAA0B,MAAVA,EAAKjmX,GAAuB,KAAVimX,EAAKjmX,EAAiB,QAC7C2yB,IAAXszV,EAAKlwW,EAAwBkwW,EAAKlwW,GACxB,KAAVkwW,EAAKjmX,IAAaimX,EAAK/pW,GAAKpa,GAAKA,EAAEw+jB,SAAQr6M,EAAK/pW,EAAIpa,EAAEw+jB,QAC5C,KAAVr6M,EAAKjmX,EAAiBy7kB,GAAKx1N,EAAKzzW,IAAMyzW,EAAKzzW,EAV/C,SAA0ByzW,EAAezzW,GACxC,IAAIkpC,EAAe,KAAVuqU,EAAKjmX,GAAYwS,aAAaqoC;AACvC,GAAa,MAAVorU,EAAK/pW,EAAW,IAAM,OAAQ+pW,EAAKlwW,EAAIqojB,GAAWn4M,EAAK/pW,EAAGw/B,EAAI+1hB,GAAQj/jB,GAAKA,EAAK,CAAE,MAAMjR,GAAK,CAChG,IAAM,OAAQ0kX,EAAKlwW,EAAIqojB,IAAYn4M,EAAKy1N,IAAI,CAAC,GAAGC,WAAWjgiB,EAAI,GAAK,GAAKA,EAAI+1hB,GAAQj/jB,GAAKA,EAAK,CAAE,MAAMjR,GAAK,MAAO,GAAGiR,CAAG,CAC1H,CAJA,CAW4CyzW,EACbzzW,GADmByzW,EAAKzzW,GAEvD,CAEA,SAASopkB,GAAkB9oU,EAAqB34N,GAC/C,IAAIz4C,EAAIy4C,GAAQA,EAAK24N,MAAQ34N,EAAK24N,MAAQ,SACtC+oU,EAAS,CAAC;AACd,OADiBA,EAAOn6kB,GAAKoxQ,EACtB,CAAEgpU,WAAY,CAACp6kB,GAAIq6kB,OAAQF,EACnC,CAEA,SAASG,GAAcC,EAAoB9tjB,EAAcgsB,GACxD,IAAIr4C,EAAIq4C,GAAQ,CAAC,EACb+hiB,EAAQD,EAAMlnkB,MAAM1T,QAAQ46kB,GAAOn6kB,EAAEo6kB,MAErCl2S,EAAmBi2S,IAAQC,EAAS,GAAe,CAAC,GACpDC,EAAK,EAAGC,EAAK;AACjB,GAAGp2S,GAAkB,MAAZlkS,EAAEqoK,OAAgB,CAC1B,GAAsB,iBAAZroK,EAAEqoK,OAAoBgya,EAAKr6kB,EAAEqoK;IAClC,CACJ,IAAIkya,EAA6C,iBAAZv6kB,EAAEqoK,OAAqBixa,GAAYt5kB,EAAEqoK,QAAUroK,EAAEqoK;AACtFgya,EAAKE,EAAQt6kB,EAAGq6kB,EAAKC,EAAQh3kB,CAC9B,CACI2gS,EAAG,UAASA,EAAG,QAAU,QAC9B,CACA,IAAI5sN,EAAmB,CAAC11E,EAAG,CAAC2B,EAAE,IAAUtD,EAAE,KAAWR,EAAG,CAAC8D,EAAE,EAAGtD,EAAE;AAChE,GAAGikS,EAAG,QAAS,CACd,IAAIigJ,EAASs1J,GAAkBv1S,EAAG;AAClC5sN,EAAM11E,EAAE2B,EAAI4gb,EAAOvib,EAAE2B,EACrB+zE,EAAM11E,EAAE3B,EAAIkkb,EAAOvib,EAAE3B,EACrBq3E,EAAM73E,EAAE8D,EAAIpB,KAAK+b,IAAIo5D,EAAM73E,EAAE8D,EAAG4gb,EAAO1kb,EAAE8D,GACzC+zE,EAAM73E,EAAEQ,EAAIkC,KAAK+b,IAAIo5D,EAAM73E,EAAEQ,EAAGkkb,EAAO1kb,EAAEQ,IAC/B,GAAPo6kB,IAAU/igB,EAAM73E,EAAEQ,EAAIo6kB,EAAKl2J,EAAO1kb,EAAEQ,EAAI,EAC5C,CACA,IAAI,IAAI0X,EAAI,EAAGA,GAAK0U,EAAK1sB,SAAUgY,EAClC,GAAI0U,EAAK1U,GAAT,CACA,IAAI1E,MAAM1T,QAAQ8sB,EAAK1U,IAAK,MAAM,IAAI7X,MAAM;AAC5C,IAAI,IAAI2a,EAAI,EAAGA,GAAK4R,EAAK1U,GAAGhY,SAAU8a,EACrC,QAAyB,IAAf4R,EAAK1U,GAAG8C,GAAlB,CACA,IAAI0pW,EAAiB,CAACzzW,EAAG2b,EAAK1U,GAAG8C,IAC7BogS,EAAMw/R,EAAK1ikB,EAAG6ikB,EAAMF,EAAK7/jB;AAK7B,GAJG68D,EAAM11E,EAAE3B,EAAI46S,IAAKvjO,EAAM11E,EAAE3B,EAAI46S,GAC7BvjO,EAAM11E,EAAE2B,EAAIi3kB,IAAKljgB,EAAM11E,EAAE2B,EAAIi3kB,GAC7BljgB,EAAM73E,EAAEQ,EAAI46S,IAAKvjO,EAAM73E,EAAEQ,EAAI46S,GAC7BvjO,EAAM73E,EAAE8D,EAAIi3kB,IAAKljgB,EAAM73E,EAAE8D,EAAIi3kB,IAC7BnujB,EAAK1U,GAAG8C,IAA4B,iBAAf4R,EAAK1U,GAAG8C,IAAoBxH,MAAM1T,QAAQ8sB,EAAK1U,GAAG8C,KAAS4R,EAAK1U,GAAG8C,aAAcs+B,KAGxG,GADG9lC,MAAM1T,QAAQ4kX,EAAKzzW,KAAMyzW,EAAK74W,EAAI+gB,EAAK1U,GAAG8C,GAAG,GAAI0pW,EAAKzzW,EAAIyzW,EAAKzzW,EAAE,IACtD,OAAXyzW,EAAKzzW,EACP,GAAGyzW,EAAK74W,EAAG64W,EAAKjmX,EAAI;KACf,GAAG8B,EAAEy6kB,UAAat2N,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAI;IACzC,KAAI1Q,EAAE06kB,WAAY;AAClBv2N,EAAKjmX,EAAI,GAAG,KAEQ,iBAAXimX,EAAKzzW,EAAgByzW,EAAKjmX,EAAI,IACnB,kBAAXimX,EAAKzzW,EAAiByzW,EAAKjmX,EAAI,IACtCimX,EAAKzzW,aAAaqoC,MACzBorU,EAAK/pW,EAAIpa,EAAEw+jB,QAAU3D,EAAU,IAC5B76jB,EAAE26kB,WAAax2N,EAAKjmX,EAAI,IAAKimX,EAAKlwW,EAAIqojB,GAAWn4M,EAAK/pW,EAAGu1jB,GAAQxrN,EAAKzzW,MAClEyzW,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAIi/jB,GAAQxrN,EAAKzzW,GAAIyzW,EAAKlwW,EAAIqojB,GAAWn4M,EAAK/pW,EAAG+pW,EAAKzzW,KAE5EyzW,EAAKjmX,EAAI;KAhBiGimX,EAAO93V,EAAK1U,GAAG8C;AAkB/H,GAAG2/jB,EACEl2S,EAAG2W,KAAM3W,EAAG2W,GAAO,IACpB3W,EAAG2W,GAAK2/R,IAAQt2S,EAAG2W,GAAK2/R,GAAKpgkB,IAAG+pW,EAAK/pW,EAAI8pR,EAAG2W,GAAK2/R,GAAKpgkB,GACzD8pR,EAAG2W,GAAK2/R,GAAOr2N;IACT,CACN,IAAIy2N,EAAW9B,GAAa,CAACv1kB,EAAEi3kB,EAAIv6kB,EAAE46S;AAClC3W,EAAG02S,IAAa12S,EAAG02S,GAAUxgkB,IAAG+pW,EAAK/pW,EAAI8pR,EAAG02S,GAAUxgkB,GACzD8pR,EAAG02S,GAAYz2N,CAChB,CAjCsC,CAH1B,CAwCd,OADG7sS,EAAM11E,EAAE2B,EAAI,MAAU2gS,EAAG,QAAUs1S,GAAaligB,IAC5C4sN,CACR,CACA,SAAS22S,GAAaxujB,EAAcgsB,GAA+B,OAAO6hiB,GAAc,KAAM7tjB,EAAMgsB,EAAO,CAK3G,SAASyiiB,GAAe10kB,EAAcpG,GAGrC,OAFKA,IAAGA,EAAI4kkB,GAAQ,IACpB5kkB,EAAEuhkB,YAAY,EAAGn7jB,GACVpG,CACR,CAGA,SAAS+6kB,GAAmB1ujB,GAC3B,IAAI2ujB,EAAgB3ujB,EAAKs1iB,WAAW;AACpC,OAAyB,IAAlBqZ,EAAsB,GAAK3ujB,EAAKs1iB,WAAWqZ,EAAe,OAClE,CACA,SAASC,GAAmB5ujB,EAAiBrsB,GAC5C,IAAIk7kB;AAGJ,OAH4B,MAALl7kB,IAAak7kB,KAAcl7kB,EAAI4kkB,GAAQ,EAAI,EAAIv4iB,EAAK1sB,SAC3EK,EAAEuhkB,YAAY,EAAGl1iB,EAAK1sB,QAClB0sB,EAAK1sB,OAAS,GAAGK,EAAEuhkB,YAAY,EAAGl1iB,EAAM,QACrC6ujB,EAAQl7kB,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,CAClC,CASA,SAASm7kB,GAAa9ujB,GACrB,MAAO,CAAE+ujB,IAAK/ujB,EAAKs1iB,WAAW,GAAI0Z,KAAMhvjB,EAAKs1iB,WAAW,GACzD,CASA,SAAS2Z,GAAcjvjB,EAAM1sB,GAC5B,IAAI2e,EAAQ+N,EAAKlwB,EACb62I,EAAQ3mH,EAAKs1iB,WAAW,GACxBtkiB,EAAM09iB,GAAmB1ujB,GACzBkvjB,EAAY,GACZnhkB,EAAK,CAAElc,EAAGm/B,EAAKl9B,EAAGk9B;AACtB,GAAa,EAAR21G,EAAkB,CAGtB,IADA,IAAIwoc,EAAenvjB,EAAKs1iB,WAAW,GAC1BjikB,EAAI,EAAGA,GAAK87kB,IAAgB97kB,EAAG67kB,EAAUv0kB,KAAKm0kB,GAAa9ujB;AACpEjS,EAAEna,EAAIs7kB,CACP,MACKnhkB,EAAEna,EAAI,CAAC,CAAEm7kB,IAAK,EAAGC,KAAM;AAK5B,OADAhvjB,EAAKlwB,EAAImiB,EAAQ3e,EACVya,CACR,CASA,IAAIqhkB,GAAuBH;AAY3B,SAASI,GAAervjB,GACvB,IAAIykP,EAAMzkP,EAAKs1iB,WAAW,GACtBga,EAAYtvjB,EAAKs1iB,WAAW;AAGhC,OAFAga,GAAatvjB,EAAKs1iB,WAAW,IAAM,GACnCt1iB,EAAKlwB,IACE,CAAEoH,EAAGutQ,EAAK6qU,UAAWA,EAC7B,CACA,SAASC,GAAez3N,EAAcnkX,GAKrC,OAJS,MAALA,IAAWA,EAAI4kkB,GAAQ,IAC3B5kkB,EAAEuhkB,aAAa,EAAGp9M,EAAK5gX,GACvBvD,EAAEuhkB,YAAY,EAAGp9M,EAAKw3N,WAAax3N,EAAKviX,GACxC5B,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAGA,SAAS67kB,GAAoBxvjB,GAC5B,IAAIsvjB,EAAYtvjB,EAAKs1iB,WAAW;AAGhC,OAFAga,GAAatvjB,EAAKs1iB,WAAW,IAAK,GAClCt1iB,EAAKlwB,IACE,CAAEoH,GAAG,EAAGo4kB,UAAWA,EAC3B,CACA,SAASG,GAAoB33N,EAAcnkX,GAI1C,OAHQ,MAALA,IAAWA,EAAI4kkB,GAAQ,IAC1B5kkB,EAAEuhkB,YAAY,EAAGp9M,EAAKw3N,WAAax3N,EAAKviX,GACxC5B,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAGA,IAAI+7kB,GAAqBhB,GACrBiB,GAAqBf;AAGzB,SAASgB,GAA2B5vjB,GACnC,IAAI2ujB,EAAgB3ujB,EAAKs1iB,WAAW;AACpC,OAAyB,IAAlBqZ,GAAyC,aAAlBA,EAA+B,GAAK3ujB,EAAKs1iB,WAAWqZ,EAAe,OAClG,CACA,SAASkB,GAA2B7vjB,EAAiBrsB,GACpD,IAAIk7kB;AAGJ,OAH4B,MAALl7kB,IAAak7kB,KAAcl7kB,EAAI4kkB,GAAQ,MAC9D5kkB,EAAEuhkB,YAAY,EAAGl1iB,EAAK1sB,OAAS,EAAI0sB,EAAK1sB,OAAS,YAC7C0sB,EAAK1sB,OAAS,GAAGK,EAAEuhkB,YAAY,EAAGl1iB,EAAM,QACrC6ujB,EAAQl7kB,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,CAClC,CAGA,IAAIm8kB,GAAyBpB,GAIzBqB,GAAcH,GACdI,GAAcH;AAIlB,SAASI,GAAejwjB,GACvB,IAAIhS,EAAIgS,EAAK7sB,MAAM6sB,EAAKlwB,EAAGkwB,EAAKlwB,EAAI,GAChCoglB,EAAgB,EAAPlikB,EAAE,GAASmikB,EAAe,EAAPnikB,EAAE;AAClCgS,EAAKlwB,GAAK;AACV,IAAIsglB,EAAc,IAATD,EAAa9F,GAAS,CAAC,EAAG,EAAG,EAAG,EAAW,IAAPr8jB,EAAE,GAAYA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAAK,GAAKupjB,GAAcvpjB,EAAG,IAAM;AAC1G,OAAOkikB,EAASE,EAAK,IAAOA,CAC7B,CACA,SAASC,GAAerwjB,EAAiBrsB,GAC/B,MAALA,IAAWA,EAAI4kkB,GAAQ;AAC3B,IAAI2X,EAAQ,EAAGC,EAAO,EAAGG,EAAc,IAAPtwjB;AAGhC,GAFKA,IAAgB,EAAPA,IAAeA,KAAU,GAAK,KAASA,EAAQ,GAAK,GAAQmwjB,EAAO,EACvEG,IAAgB,EAAPA,IAAeA,KAAU,GAAK,KAASA,EAAQ,GAAK,KAAQH,EAAO,EAAGD,EAAQ,IAC7FC,EACC,MAAM,IAAI18kB,MAAM,wBAA0BusB;AADrCrsB,EAAEuhkB,aAAa,IAAKgb,EAAQI,EAAOtwjB,IAAS,IAAMkwjB,EAAQ,GAErE,CAIA,SAASK,GAAUvwjB,GAClB,IAAI83V,EAAkB,CAAEviX,EAAG,CAAC,EAAGnC,EAAG,CAAC;AAKnC,OAJA0kX,EAAKviX,EAAE3B,EAAIosB,EAAKs1iB,WAAW,GAC3Bx9M,EAAK1kX,EAAEQ,EAAIosB,EAAKs1iB,WAAW,GAC3Bx9M,EAAKviX,EAAE2B,EAAI8oB,EAAKs1iB,WAAW,GAC3Bx9M,EAAK1kX,EAAE8D,EAAI8oB,EAAKs1iB,WAAW,GACpBx9M,CACR,CAWA,IAAI04N,GAAqBD,GACrBE,GAXJ,SAAmB78kB,EAAaD,GAM/B,OALKA,IAAGA,EAAI4kkB,GAAQ,KACpB5kkB,EAAEuhkB,YAAY,EAAGthkB,EAAE2B,EAAE3B,GACrBD,EAAEuhkB,YAAY,EAAGthkB,EAAER,EAAEQ,GACrBD,EAAEuhkB,YAAY,EAAGthkB,EAAE2B,EAAE2B,GACrBvD,EAAEuhkB,YAAY,EAAGthkB,EAAER,EAAE8D,GACdvD,CACR;AA4BA,SAAS+8kB,GAAW1wjB,GACnB,GAAGA,EAAK1sB,OAAS0sB,EAAKlwB,EAAI,EAAG,KAAM;AACnC,OAAOkwB,EAAKs1iB,WAAW,EAAG,IAC3B,CACA,SAASqb,GAAW3wjB,EAAMrsB,GAAK,OAAQA,GAAK4kkB,GAAQ,IAAIrD,YAAY,EAAGl1iB,EAAM,IAAM,CAmCnF,SAAS4wjB,GAAev4kB,EAAO1E,GAE9B,GADKA,IAAGA,EAAI4kkB,GAAQ,KACflgkB,GAASA,EAAMu2P,KAAkD,OAA1Cj7P,EAAEuhkB,YAAY,EAAG,GAAIvhkB,EAAEuhkB,YAAY,EAAG,GAAWvhkB;AAC1D,MAAf0E,EAAMyD,OACTnI,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG78jB,EAAMyD,QACE,MAAfzD,EAAMs2T,OAChBh7T,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG78jB,EAAMs2T,SAEvBh7T,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG;AAElB,IAAI2b,EAAMx4kB,EAAMy4kB,MAAQ;AAIxB,GAHID,EAAM,EAAGA,GAAO,MACXA,EAAM,IAAGA,GAAO,OACzBl9kB,EAAEuhkB,YAAY,EAAG2b,GACZx4kB,EAAM+yX,KAAsB,MAAf/yX,EAAMs2T,MAIjB,CACN,IAAIy8D,EAAO/yX,EAAM+yX,KAAO;AACN,iBAAPA,IAAiBA,GAAO,SAAWA,EAAIhoX,SAAS,KAAKjQ,OAAO,IACvEQ,EAAEuhkB,YAAY,EAAGtzjB,SAASwpX,EAAIj4X,MAAM,EAAG,GAAI,KAC3CQ,EAAEuhkB,YAAY,EAAGtzjB,SAASwpX,EAAIj4X,MAAM,EAAG,GAAI,KAC3CQ,EAAEuhkB,YAAY,EAAGtzjB,SAASwpX,EAAIj4X,MAAM,EAAG,GAAI,KAC3CQ,EAAEuhkB,YAAY,EAAG,IAClB,MAVCvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG;AASlB,OAAOvhkB,CACR,CAiCA,SAASo9kB,GAA8Bp9kB,EAAGiU,GAEzC,IACI1K,EAAevJ,EAAE2hkB,WAAW;AAChC,OAAQp4jB,GACP,KAAK,EAAY,MAAO;AACxB,KAAK,WAAY,KAAK,WAAY,MAJrB,CAAE,EAAG,SAAU,EAAG,eAAgB,EAAG,MAAO,GAAI,eAIZvJ,EAAE2hkB,WAAW,KAAO,GAEtE,GAAIp4jB,EAAI,IAAO,MAAM,IAAIzJ,MAAM,0BAA4ByJ,EAAEkG,SAAS;AAEtE,OADAzP,EAAE7D,GAAK,EACA6D,EAAE2hkB,WAAW,EAAQ,GAAL1tjB,EAAS,QAAU,SAC3C,CAQA,IAoCIopkB,GAAc,GAEdC,GAAc,CAACD,GADD,IAIdE,GAAmB,CACf,EAAa,CAAE39kB,EAAG,WAAY1B,EA1CpB,GA2CV,EAAa,CAAE0B,EAAG,WAAY1B,EAAGm/kB,IACjC,EAAa,CAAEz9kB,EAAG,qBAAsB1B,EAAGm/kB,IAC3C,EAAa,CAAEz9kB,EAAG,YAAa1B,EA5CrB,GA6CV,EAAa,CAAE0B,EAAG,YAAa1B,EA7CrB,GA8CV,EAAa,CAAE0B,EAAG,iBAAkB1B,EA9C1B,GA+CV,EAAa,CAAE0B,EAAG,aAAc1B,EA/CtB,GAgDV,EAAa,CAAE0B,EAAG,YAAa1B,EAhDrB,GAiDV,EAAa,CAAE0B,EAAG,cAAe1B,EAjDvB,GAkDV,GAAa,CAAE0B,EAAG,sBAAuB1B,EAlD/B,GAmDV,GAAa,CAAE0B,EAAG,YAAa1B,EA5CrB,IA6CV,GAAa,CAAE0B,EAAG,eAAgB1B,EArBlB,MAsBhB,GAAa,CAAE0B,EAAG,gBAAiB1B,EArBnB,MAsBhB,GAAa,CAAE0B,EAAG,UAAW1B,EAAGm/kB,IAChC,GAAa,CAAEz9kB,EAAG,UAAW1B,EAAGm/kB,IAChC,GAAa,CAAEz9kB,EAAG,gBAAiB1B,EAjDzB,IAkDV,GAAa,CAAE0B,EAAG,iBAAkB1B,EAzD1B,GA0DV,GAAa,CAAE0B,EAAG,YAAa1B,EAnDrB,IAoDV,GAAa,CAAE0B,EAAG,oBAAqB1B,EApD7B,IAqDV,GAAa,CAAE0B,EAAG,aAAc1B,EA5DtB,EA4DgC+F,EAAG,WAC7C,GAAa,CAAErE,EAAG,SAAU1B,EAxClB,IAyCV,GAAa,CAAE0B,EAAG,cAAe1B,EAAGm/kB,IACpC,GAAa,CAAEz9kB,EAAG,gBAAiB1B,EAAGm/kB,IACtC,GAAa,CAAEz9kB,EAAG,WAAY1B,EAAGm/kB,IACjC,GAAa,CAAEz9kB,EAAG,UAAW1B,EAAGm/kB,IAChC,IAAa,CAAC,EAEd,WAAmB,CAAEz9kB,EAAG,SAAU1B,EAvDxB,IAwDV,WAAmB,CAAE0B,EAAG,WAAY1B,EAxD1B,IAyDV,WAAmB,CAAC,GAIxBs/kB,GAAe,CACX,EAAa,CAAE59kB,EAAG,WAAY1B,EA5EpB,GA6EV,EAAa,CAAE0B,EAAG,QAAS1B,EAAGm/kB,IAC9B,EAAa,CAAEz9kB,EAAG,UAAW1B,EAAGm/kB,IAChC,EAAa,CAAEz9kB,EAAG,SAAU1B,EAAGm/kB,IAC/B,EAAa,CAAEz9kB,EAAG,WAAY1B,EAAGm/kB,IACjC,EAAa,CAAEz9kB,EAAG,WAAY1B,EAAGm/kB,IACjC,EAAa,CAAEz9kB,EAAG,WAAY1B,EAAGm/kB,IACjC,EAAa,CAAEz9kB,EAAG,aAAc1B,EAAGm/kB,IACnC,EAAa,CAAEz9kB,EAAG,YAAa1B,EAAGm/kB,IAClC,GAAa,CAAEz9kB,EAAG,WAAY1B,EAhEpB,IAiEV,GAAa,CAAE0B,EAAG,cAAe1B,EAjEvB,IAkEV,GAAa,CAAE0B,EAAG,cAAe1B,EAlEvB,IAmEV,GAAa,CAAE0B,EAAG,eAAgB1B,EAnExB,IAoEV,GAAa,CAAE0B,EAAG,YAAa1B,EAxFrB,GAyFV,GAAa,CAAE0B,EAAG,YAAa1B,EAzFrB,GA0FV,GAAa,CAAE0B,EAAG,YAAa1B,EA1FrB,GA2FV,GAAa,CAAE0B,EAAG,YAAa1B,EAhErB,IAiEV,GAAa,CAAE0B,EAAG,cAAe1B,EAAGm/kB,IACpC,GAAa,CAAEz9kB,EAAG,cAAe1B,EA7FvB,GA8FV,IAAa,CAAC,EAEd,WAAmB,CAAE0B,EAAG,SAAU1B,EAnFxB,IAoFV,WAAmB,CAAE0B,EAAG,WAAY1B,EApF1B,IAqFV,WAAmB,CAAC,GAIxBu/kB,GAAc,CACV,EAAe,KACf,EAAe,KACf,EAAe,GACf,EAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,MAAe,MAInBC,GAAiB,CACpB,KACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA;AAOD,IA4FIC,GAAsBjN,GAhG1B,SAAgB9vR,GAA6D,OAAOA,EAAI59R,IAAI,SAAS5c,GAAK,MAAO,CAAEA,GAAG,GAAI,IAAKA,GAAG,EAAG,IAAM,IAAFA,EAAQ,EAAI,CAIzHw3kB,CAAO,CAElC,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAGA,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAEA,QACA,MACA,IACA,QACA,QACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,MACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAKGjE,GAAO,CACH,EAAa,SACb,EAAa,UACb,GAAa,UACb,GAAa,QACb,GAAa,SACb,GAAa,QACb,GAAa,OACb,GAAa,gBACb,IAAa,SAGjBkE,GAAQ,CACX,SAAiB,EACjB,UAAiB,EACjB,UAAiB,GACjB,QAAiB,GACjB,SAAiB,GACjB,QAAiB,GACjB,OAAiB,GACjB,gBAAiB,GACjB,QAAiB,KAOdC,GAAgC,CAEnC,6EAA8E,YAC9E,uDAAwD,YACxD,0DAA2D,YAC3D,uDAAwD,YACxD,gFAAiF,YAGjF,4EAA6E,SAC7E,qCAAsC,SACtC,sCAAuC,OAGvC,6EAA8E,SAC9E,sCAAuC,SAGvC,0CAA2C,SAC3C,sCAAuC,SACvC,0CAA2C,OAC3C,sCAAuC,OAGvC,8EAA+E,UAC/E,uCAAwC,UAGxC,gFAAiF,OACjF,yCAA0C,OAG1C,yEAA0E,SAC1E,kCAAmC,SAGnC,6DAA8D,YAC9D,sEAAuE,YACvE,wEAAyE,WAGzE,wEAAyE,OACzE,6EAA8E,OAG9E,2EAA4E,WAC5E,oCAAqC,WACrC,gDAAiD,mBACjD,sCAAuC,SAGvC,gFAAiF,WACjF,yCAA0C,WAG1C,sCAAuC,OACvC,6EAA8E,OAG9E,oEAAqE,OAGrE,gDAAiD,OAGjD,2CAA4C,OAG5C,wCAAyC,OAGzC,qCAAsC,aACtC,4EAA6E,aAG7E,8EAA+E,OAG/E,oCAAqC,OACrC,wCAAyC,OAGzC,4CAA6C,OAG7C,uCAAwC,OACxC,8EAA+E,OAG/E,wCAAyC,QACzC,+EAAgF,QAGhF,gDAAiD,OACjD,6CAA8C,OAC9C,uFAAwF,OACxF,oFAAqF,OAGrF,sCAAuC,OACvC,6EAA8E,OAG9E,qCAAsC,OACtC,2CAA4C,OAC5C,uCAAwC,OACxC,kFAAmF,OACnF,8EAA+E,OAC/E,4EAA6E,OAG7E,4CAA6C,OAC7C,mFAAoF,OAGpF,kCAAmC,OACnC,uCAAwC,OACxC,sCAAuC,OACvC,2CAA4C,OAG5C,qCAAsC,OAGtC,iCAAkC,OAClC,wEAAyE,OAGzE,0DAA2D,SAG3D,kEAAmE,OAGnE,wCAAyC,OACzC,6CAA8C,OAG9C,uCAAwC,MACxC,gDAAiD,OAGjD,iDAAkD,OAClD,uFAAwF,OAGxF,iDAAkD,OAGlD,2DAA4D,OAG5D,sCAAuC,OAGvC,4DAA6D,WAC7D,0EAA2E,OAC3E,4EAA6E,OAC7E,0EAA2E,OAC3E,4EAA6E,OAC7E,2EAA4E,OAG5E,2DAA4D,OAE5D,2DAA4D,OAC5D,0DAA2D,OAG3D,YAAa,OAEb9sU,MAAS,MAGN+sU,GAAU,CACZC,UAAW,CACVC,KAAM,6EACNC,KAAM,uDACNC,KAAM,0DACNC,KAAM,uDACNC,KAAM,iFAEPC,KAAM,CACLL,KAAM,gFACNE,KAAM,0CAEPI,SAAU,CACTN,KAAM,2EACNE,KAAM,qCAEPpE,OAAQ,CACPkE,KAAM,4EACNE,KAAM,sCAEP58K,OAAQ,CACP08K,KAAM,6EACNE,KAAM,uCAEPK,QAAS,CACRP,KAAM,8EACNE,KAAM,wCAEPM,OAAQ,CACPR,KAAM,0CACNE,KAAM,uCAEPhpB,SAAU,CACT8oB,KAAM,gFACNE,KAAM,0CAEP10kB,OAAQ,CACPw0kB,KAAM,yEACNE,KAAM;AAqCT,SAASO,GAASn6hB,EAAIlM,GACrB,IAE8B3nC,EAF1BiukB,EA55DL,SAAmB1tiB,GAElB,IADA,IAAIjxC,EAAsB,GAAa0qF,EAAI5yC,GAAK7G,GACxCvxC,EAAI,EAAGA,IAAMgrF,EAAE/qF,SAAUD,EACb,MAAhBM,EAAEixC,EAAIy5C,EAAEhrF,OAAcM,EAAEixC,EAAIy5C,EAAEhrF,KAAO,IACxCM,EAAEixC,EAAIy5C,EAAEhrF,KAAKsH,KAAK0jF,EAAEhrF;AAErB,OAAOM,CACR,CAPA,CA45DqD89kB,IAEhD99kB,EAAsB;AAC1BA,EAAEA,EAAEL,QAAWwykB,GACfnykB,EAAEA,EAAEL,QAAUq1kB,GAAU,QAAS,KAAM,CACtC5sB,MAASgtB,GACT,YAt5CM,mCAu5CN,YAAaA,KAGdp1kB,EAAIA,EAAE6R,OAAO,CACZ,CAAC,MAAO,mBACR,CAAC,MAAO,2DACR,CAAC,MAAO,4DACR,CAAC,OAAQ,4DAET,CAAC,MAAO,aACR,CAAC,MAAO,aACR,CAAC,MAAO,aACR,CAAC,MAAO,eACR,CAAC,MAAO,eACR,CAAC,MAAO,cAAe,CAAC,OAAQ,cAChC,CAAC,MAAO,cAAe,CAAC,OAAQ,cAChC,CAAC,MAAO,mBACR,CAAC,OAAQ,6DACRmR,IAAI,SAAS5c,GACd,OAAO4ukB,GAAU,UAAW,KAAM,CAACvkM,UAAYrqY,EAAE,GAAIw4kB,YAAex4kB,EAAE,IACvE;AAGA,IAAI+kD,EAAK,SAASl3C,GACdswC,EAAGtwC,IAAMswC,EAAGtwC,GAAGtU,OAAS,IAC1B+Q,EAAI6zC,EAAGtwC,GAAG,GACVjU,EAAEA,EAAEL,QAAWq1kB,GAAU,WAAY,KAAM,CAC1C6J,UAAqB,KAARnukB,EAAE,GAAY,GAAG,KAAOA,EACrCkukB,YAAeb,GAAQ9pkB,GAAGokC,EAAKymiB,WAAaf,GAAQ9pkB,GAASgqkB,OAGhE,EAGIc,EAAK,SAAS9qkB,IAChBswC,EAAGtwC,IAAI,IAAI2F,QAAQ,SAASlJ,GAC5B1Q,EAAEA,EAAEL,QAAWq1kB,GAAU,WAAY,KAAM,CAC1C6J,UAAqB,KAARnukB,EAAE,GAAY,GAAG,KAAOA,EACrCkukB,YAAeb,GAAQ9pkB,GAAGokC,EAAKymiB,WAAaf,GAAQ9pkB,GAASgqkB,MAE/D,EACD,EAGIe,EAAK,SAAS9glB,IAChBqmD,EAAGrmD,IAAI,IAAI0b,QAAQ,SAASlJ,GAC5B1Q,EAAEA,EAAEL,QAAWq1kB,GAAU,WAAY,KAAM,CAC1C6J,UAAqB,KAARnukB,EAAE,GAAY,GAAG,KAAOA,EACrCkukB,YAAeD,EAAQzglB,GAAG,IAE5B,EACD;AAeA,OAbAitD,EAAG,aACH4zhB,EAAG,UACHA,EAAG,UACHC,EAAG,UACH,CAAC,OAAQ,UAAUplkB,QAAQuxC,GAC3B,CAAC,YAAa,WAAY,aAAavxC,QAAQolkB,GAC/CA,EAAG,OACHA,EAAG,YACHA,EAAG,oBACHA,EAAG,YACHD,EAAG,YACHC,EAAG,UACAh/kB,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAW,WAAaK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MAC5D7f,EAAEkX,KAAK,GACf,CAEA,IAAI+nkB,GAAQ,CACXC,GAAI,qFACJC,MAAO,qFACPC,MAAO,gFACPC,IAAK,iFACLC,MAAO,uFACPC,MAAO,0FACPC,MAAO,mFACPC,KAAM,gFACNC,MAAO,qFACPC,KAAM,+EACNC,WAAY,wFACZC,UAAW,0FACXC,WAAY,wFACZC,IAAK,oFACLC,IAAK,6EACLC,MAAO,4EACPC,MAAO,4EACPC,QAAS,iEACTC,GAAI,iFACJzxiB,GAAI,CACH,gFACA,qEAED0xiB,GAAI,kFACJn3iB,GAAI,sEACJo3iB,IAAK,4EACLC,KAAM,8EACNC,OAAQ,oFACRC,MAAO,4EACPC,OAAQ,mEACRC,IAAK;AAKN,SAASC,GAAc1rY,GACtB,IAAIt1M,EAAIs1M,EAAKv7J,YAAY;AACzB,OAAOu7J,EAAK11M,MAAM,EAAEI,EAAE,GAAK,SAAWs1M,EAAK11M,MAAMI,EAAE,GAAK,OACzD,CAEA,SAASihlB,GAAWx0jB,EAAkBy0jB,GACrC,IAAIC,EAAO,CAAC,MAAM,CAAC;AACnB,IAAK10jB,EAAM,OAAO00jB;AACgB,MAA9BD,EAAgB39kB,OAAO,KAC1B29kB,EAAkB,IAAIA;AAEvB,IAAI17Y,EAAO,CAAC;AAaZ,OAXC/4K,EAAK4P,MAAMq2iB,KAAW,IAAI14jB,QAAQ,SAASxT,GAC3C,IAAIwK,EAAI6hkB,GAAYrskB;AAEpB,GAAa,kBAATwK,EAAE,GAAwB,CAC7B,IAAIioZ,EAAM,CAAC;AAAGA,EAAImoL,KAAOpwkB,EAAEowkB,KAAMnoL,EAAIooL,OAASrwkB,EAAEqwkB,OAAQpoL,EAAIqoL,GAAKtwkB,EAAEswkB,GAAOtwkB,EAAEuwkB,aAAYtoL,EAAIsoL,WAAavwkB,EAAEuwkB;AAC3G,IAAIC,EAAiC,aAAjBxwkB,EAAEuwkB,WAA4BvwkB,EAAEqwkB,OAAS/O,GAAathkB,EAAEqwkB,OAAQH;AACpFC,EAAKK,GAAiBvoL,EACtBzzN,EAAKx0L,EAAEswkB,IAAMroL,CACd,CACD,GACAkoL,EAAK,OAAS37Y,EACP27Y,CACR,CAIA,SAASM,GAAWN,GACnB,IAAI/glB,EAAI,CAACmykB,GAAY6C,GAAU,gBAAiB,KAAM,CAErD5sB,MA1iDK;AAgjDN,OAJAtwgB,GAAKipiB,EAAK,QAAQnnkB,QAAQ,SAAS4tZ,GAClCxna,EAAEA,EAAEL,QAAWq1kB,GAAU,eAAgB,KAAM+L,EAAK,OAAOv5K,GAC5D,GACGxna,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAW,mBAAqBK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MACpE7f,EAAEkX,KAAK,GACf,CAEA,SAASoqkB,GAASP,EAAMQ,EAAgBj2kB,EAAGpI,EAAMs+kB,EAAQC,GAIxD,GAHID,IAAQA,EAAS,CAAC,GAClBT,EAAK,SAAQA,EAAK,OAAS,CAAC,GAC5BA,EAAK,UAASA,EAAK,QAAU,GAC9BQ,EAAM,EAAG,IAAIA,EAAMR,EAAK,QAASA,EAAK,OAAO,MAAQQ,KAAQA,GAOhE,GANAR,EAAK,QAAUQ,EAAM,EACrBC,EAAON,GAAK,MAAQK,EACpBC,EAAOR,KAAO99kB,EACds+kB,EAAOP,OAAS31kB,EACbm2kB,EAAYD,EAAOL,WAAaM,EAC3B,CAACxC,GAAKG,MAAOH,GAAKK,MAAOL,GAAKM,OAAOt2kB,QAAQu4kB,EAAOR,OAAS,IAAGQ,EAAOL,WAAa,YACzFJ,EAAK,OAAOS,EAAON,IAAK,MAAM,IAAIphlB,MAAM,sBAAwByhlB;AAGnE,OAFAR,EAAK,OAAOS,EAAON,IAAMM,EACzBT,GAAM,IAAMS,EAAOP,QAAQphkB,QAAQ,KAAK,MAAQ2hkB,EACzCD,CACR,CAiCA,SAASG,GAAexsY,EAAiBluC,EAAgB/sI,GACxD,MAAO,CACN,iCAAmCi7K,EAAO,OAC1C,8EAAgFj7K,GAAO,OAAS,IAAM+sI,EAAM,QAC5G,0BACC9vJ,KAAK,GACR,CACA,SAASyqkB,GAAc5yT,EAAiB75E,GACvC,MAAO,CACN,iCAAmC65E,EAAO,OAC1C,iGAAmG75E,EAAO,QAC1G,0BACCh+L,KAAK,GACR,CAaA,SAAS0qkB,KACR,MAAO,sSAA6SlqB,EAAe,wDACpU,CAIA,IAAIkoB,GAAuC,CAC1C,CAAC,cAAe,YAChB,CAAC,mBAAoB,iBACrB,CAAC,cAAe,YAChB,CAAC,oBAAqB,cACtB,CAAC,iBAAkB,eACnB,CAAC,cAAe,aAChB,CAAC,aAAc,WACf,CAAC,aAAc,UACf,CAAC,iBAAkB,YACnB,CAAC,gBAAiB,cAClB,CAAC,cAAe,YAChB,CAAC,aAAc,WACf,CAAC,WAAY,SACb,CAAC,kBAAmB,cAAe,QACnC,CAAC,mBAAoB,eAAgB,SAGlCiC,GAAmD,WAEtD,IADA,IAAI5hlB,EAAI,IAAIgT,MAAM2skB,GAAWjglB,QACrBD,EAAI,EAAGA,EAAIkglB,GAAWjglB,SAAUD,EAAG,CAC1C,IAAI4L,EAAIs0kB,GAAWlglB,GACf+O,EAAI,MAAOnD,EAAE,GAAG9L,MAAM,EAAE8L,EAAE,GAAGrC,QAAQ,MAAO,KAAMqC,EAAE,GAAG9L,MAAM8L,EAAE,GAAGrC,QAAQ,KAAK;AACnFhJ,EAAEP,GAAK,IAAIgwC,OAAO,IAAMjhC,EAAI,uBAA0BA,EAAI,IAC3D,CACA,OAAOxO,CACR,CARuD;AAUvD,SAAS6hlB,GAAiBz1jB,GACzB,IAAIpoB,EAAI,CAAC;AACTooB,EAAO6njB,GAAS7njB;AAEhB,IAAI,IAAI3sB,EAAI,EAAGA,EAAIkglB,GAAWjglB,SAAUD,EAAG,CAC1C,IAAI4L,EAAIs0kB,GAAWlglB,GAAIomK,EAAMz5I,EAAK4P,MAAM4ljB,GAAiBnilB;AAC/C,MAAPomK,GAAeA,EAAInmK,OAAS,IAAGsE,EAAEqH,EAAE,IAAM0nkB,GAAYlta,EAAI,KAChD,SAATx6J,EAAE,IAAiBrH,EAAEqH,EAAE,MAAKrH,EAAEqH,EAAE,IAAM+kkB,GAAUpskB,EAAEqH,EAAE,KACxD,CAEA,OAAOrH,CACR,CAEA,SAAS89kB,GAAQz2kB,EAAGmD,EAAGtO,EAAGH,EAAGiE,GACjB,MAARA,EAAEqH,IAAmB,MAALmD,GAAmB,KAANA,IAChCxK,EAAEqH,GAAKmD,EACPA,EAAI4kkB,GAAU5kkB,GACdzO,EAAEA,EAAEL,QAAWQ,EAAI60kB,GAAU1pkB,EAAEmD,EAAEtO,GAAK20kB,GAASxpkB,EAAEmD,GAClD,CAEA,SAASuzkB,GAAiBrgb,EAAI0ja,GAC7B,IAAIhthB,EAAOgthB,GAAS,CAAC,EACjBrlkB,EAAI,CAACmykB,GAAY6C,GAAU,oBAAqB,KAAM,CAEzD,WA3rDW,0EA4rDX,WAtrDK,mCAurDL,gBAtrDU,4BAurDV,iBAtrDW,+BAurDX,YAAaI,MACTnxkB,EAAI,CAAC;AACV,IAAI09J,IAAOtpH,EAAKk2C,MAAO,OAAOvuF,EAAEkX,KAAK;AAElCyqJ,IACmB,MAAlBA,EAAGsgb,aAAqBF,GAAQ,kBAA6C,iBAAnBpgb,EAAGsgb,YAA2Btgb,EAAGsgb,YAAchN,GAAatza,EAAGsgb,YAAa5piB,EAAKu8hB,KAAM,CAAC,WAAW,kBAAmB50kB,EAAGiE,GAChK,MAAnB09J,EAAGugb,cAAsBH,GAAQ,mBAA+C,iBAApBpgb,EAAGugb,aAA4Bvgb,EAAGugb,aAAejN,GAAatza,EAAGugb,aAAc7piB,EAAKu8hB,KAAM,CAAC,WAAW,kBAAmB50kB,EAAGiE;AAG5L,IAAI,IAAIvE,EAAI,EAAGA,GAAKkglB,GAAWjglB,SAAUD,EAAG,CAC3C,IAAI4L,EAAIs0kB,GAAWlglB,GACfgR,EAAI2nC,EAAKk2C,OAA6B,MAApBl2C,EAAKk2C,MAAMjjF,EAAE,IAAc+sC,EAAKk2C,MAAMjjF,EAAE,IAAMq2J,EAAKA,EAAGr2J,EAAE,IAAM;CAAA,IACjFoF,EAAYA,EAAI,SACXA,EAAaA,EAAI,IACL,iBAALA,IAAeA,EAAIq/B,OAAOr/B,IACjC,MAALA,GAAWqxkB,GAAQz2kB,EAAE,GAAIoF,EAAG,KAAM1Q,EAAGiE,EACzC,CAEA,OADGjE,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAW,uBAAyBK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MACxE7f,EAAEkX,KAAK,GACf,CAGA,IAAI2okB,GAAsC,CACzC,CAAC,cAAe,cAAe,UAC/B,CAAC,aAAc,aAAc,UAC7B,CAAC,UAAW,UAAW,UACvB,CAAC,cAAe,cAAe,UAC/B,CAAC,UAAW,UAAW,UACvB,CAAC,oBAAqB,oBAAqB,QAC3C,CAAC,YAAa,YAAa,QAC3B,CAAC,gBAAiB,gBAAiB,QACnC,CAAC,YAAa,YAAa,QAC3B,CAAC,eAAgB,eAAgB,OACjC,CAAC,gBAAiB,gBAAiB,QAGhCsC,GAAmB,CACtB,aAAe,aACf,cAAe,eACf,cAAe;AAEhB,SAASC,GAAiBC,EAAiCC,EAAK54hB,EAAOrR,GACtE,IAAI3nC,EAAI;AACR,GAAgB,iBAAN2xkB,EAAgB3xkB,EAAIikkB,GAAY0N,EAAIhqiB;KACzC,IAAI,IAAI0sC,EAAI,EAAGA,EAAIs9f,EAAG1ilB,SAAUolF,EAAGr0E,EAAIA,EAAEmB,OAAOwwkB,EAAGt9f,GAAG/hE,IAAI,SAASu/jB,GAAM,MAAO,CAAC7xkB,EAAE6xkB,EAAK;AAC7F,IAAIr7hB,EAAuB,iBAAPo7hB,EAAmB3N,GAAY2N,EAAKjqiB,GAAMr1B,IAAI,SAAU5c,GAAK,OAAOA,EAAEsK,CAAG,GAAK4xkB,EAC9Fz0X,EAAM,EAAGz3L,EAAM;AACnB,GAAG8wB,EAAMvnD,OAAS,EAAG,IAAI,IAAID,EAAI,EAAGA,IAAMgR,EAAE/Q,OAAQD,GAAK,EAAG,CAE3D,OADA02B,GAAQ1lB,EAAEhR,EAAE,GAAGgR,EACRA,EAAEhR,GAAGgR,GACX,IAAK,aACL,IAAK,MACL,IAAK,QACL,IAAK,cACL,IAAK,SACL,IAAK,gBACL,IAAK,iBACL,IAAK,oBACL,IAAK,qBACL,IAAK,kBACL,IAAK,oBACL,IAAK,YACL,IAAK,WACL,IAAK,mBACL,IAAK,aACJg5C,EAAM84hB,WAAapsjB,EACnBszB,EAAMswhB,WAAa9yhB,EAAM1nD,MAAMquN,EAAKA,EAAMz3L;AAC1C;AAED,IAAK,eACL,IAAK,oBACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACJszB,EAAM+4hB,YAAcrsjB,EACpBszB,EAAMg5hB,aAAex7hB,EAAM1nD,MAAMquN,EAAKA,EAAMz3L;AAC5C;AAED,IAAK,SACL,IAAK,YACJszB,EAAMi5hB,YAAcvsjB,EACpBszB,EAAMk5hB,WAAa17hB,EAAM1nD,MAAMquN,EAAKA,EAAMz3L,GAG5Cy3L,GAAOz3L,CACR,CACD,CAuBA,SAASysjB,GAAgBlhb,GACxB,IAAI3hK,EAAsB,GAAIrD,EAAIq4kB;AAuBlC,OAtBIrza,IAAIA,EAAK,CAAC,GACdA,EAAGmhb,YAAc,UACjB9ilB,EAAEA,EAAEL,QAAWwykB,GACfnykB,EAAEA,EAAEL,QAAWq1kB,GAAU,aAAc,KAAM,CAC5C5sB,MAhzDU,4EAizDV,WAAYgtB,KAGbyK,GAAUjmkB,QAAQ,SAAStO,GAC1B,QAAgBulB,IAAb8wI,EAAGr2J,EAAE,IAAR,CACA,IAAIoF;AACJ,OAAOpF,EAAE,IACR,IAAK,SAAUoF,EAAI2ikB,GAAUtjiB,OAAO4xH,EAAGr2J,EAAE;AAAO;AAChD,IAAK,OAAQoF,EAAIixJ,EAAGr2J,EAAE,IAAM,OAAS,aAE7BulB,IAANngB,IAAiB1Q,EAAEA,EAAEL,QAAWhD,EAAE2O,EAAE,GAAIoF,GANhB,CAO5B,GAGA1Q,EAAEA,EAAEL,QAAWhD,EAAE,eAAgBA,EAAE,YAAaA,EAAE,aAAc,mCAAmCA,EAAE,aAAcA,EAAE,QAASozC,OAAO4xH,EAAG6gb,cAAe,CAAC/kkB,KAAK,EAAGuve,SAAS,aACzKhtf,EAAEA,EAAEL,QAAWhD,EAAE,gBAAiBA,EAAE,YAAaglK,EAAGq4a,WAAWh3jB,IAAI,SAASphB,GAAK,MAAO,aAAeyxkB,GAAUzxkB,GAAK,aAAe,GAAGsV,KAAK,IAAK,CAACuG,KAAMkkJ,EAAG6gb,WAAYx1F,SAAS,WAC9Khtf,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAW,gBAAkBK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MACjE7f,EAAEkX,KAAK,GACf,CAEA,IAAI6rkB,GAAY;AA6ChB,SAASC,GAAiBrhb,GACzB,IAAI3hK,EAAI,CAACmykB,GAAY6C,GAAU,aAAc,KAAM,CAClD5sB,MAr3DW,0EAs3DX,WAAYgtB;AAEb,IAAIzza,EAAI,OAAO3hK,EAAEkX,KAAK;AACtB,IAAI+rkB,EAAM;AASV,OARAnriB,GAAK6pH,GAAI/nJ,QAAQ,SAAkBkB,KAAOmokB,EACzCjjlB,EAAEA,EAAEL,QAAWq1kB,GAAU,WAr5D3B,SAAkBpzkB,GACjB,cAAcA,GACb,IAAK,SACJ,IAAI5B,EAAIg1kB,GAAU,YAAa3B,GAAUzxkB;AAEzC,OADa5B,EAAE6f,QAAQ,UAAW;AAEnC,IAAK,SAAU,OAAOm1jB,IAAa,EAAFpzkB,IAAMA,EAAE,QAAQ,QAASyxkB,GAAUtjiB,OAAOnuC;AAC3E,IAAK,UAAW,OAAOozkB,GAAU,UAAUpzkB,EAAE,OAAO,SAErD,GAAGA,aAAam3C,KAAM,OAAOi8hB,GAAU,cAAeC,GAAarzkB;AACnE,MAAM,IAAI9B,MAAM,uBAAyB8B,EAC1C,CAXA,CAq5DgD+/J,EAAG7mJ,IAAW,CAC3DookB,MAAS,yCACTD,IAAOA,EACPz7kB,KAAQ6rkB,GAAUv4jB,IAEpB,GACG9a,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAU,gBAAiBK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MAC/D7f,EAAEkX,KAAK,GACf,CAEA,IAgCIiskB,GAhCAC,GAAkB,CACrBj2I,MAAO,QACPk2I,QAAS,UACTC,OAAQ,SACRC,SAAU,WACVC,SAAU,cACVC,WAAY,aACZC,UAAW,WACXZ,YAAa,UAEba,YAAa,cACb1B,YAAa,UACbC,aAAc,YAId0B,SAAU,WAEVC,QAAS,UACTC,QAAS,UAOTC,WAAY,UAEZC,cAAe,gBACfC,WAAY,aACZC,SAAU;AAIX,SAASC,GAAc51f,EAAOt0D,EAAgBsY,GACzC4wiB,KAAeA,GAAgB3T,GAAM4T,KAEzC70f,EADAt0D,EAAMkpjB,GAAclpjB,IAAQA,GACfsY,CACd,CAwDA,SAAS6xiB,GAAeztY,GACvB,IAAI0tY,EAAgB1tY,EAAKgrX,WAAW,GAAI2iB,EAAiB3tY,EAAKgrX,WAAW;AACzE,OAAO,IAAI5ohB,KAA6E,KAAtEuriB,EAAe,IAAInilB,KAAKC,IAAI,EAAE,IAAMiilB,EAAc,IAAO,cAAmB7/R,cAAc3kS,QAAQ,QAAQ,GAC7H,CAYA,SAAS0kkB,GAAY5tY,EAAMzzM,EAAMshlB,GAChC,IAAIlmkB,EAAQq4L,EAAKx6M,EACbkhC,EAAMs5K,EAAKgrX,WAAW,EAAG;AAC7B,GAAG6iB,EAAK,KAAO7tY,EAAKx6M,EAAImiB,EAAS,KAAKq4L,EAAKx6M;AAC3C,OAAOkhC,CACR,CAGA,SAASonjB,GAAa9tY,EAAMzzM,EAAMshlB,GACjC,IAAInnjB,EAAMs5K,EAAKgrX,WAAW,EAAG;AAE7B,OADG6iB,IAAK7tY,EAAKx6M,GAAM,GAAMkhC,EAAI19B,OAAO,EAAK,GAAM,GACxC09B,CACR,CAKA,SAASqnjB,GAAmB/tY,EAAMguY,EAAYH,GAC7C,OAAkB,KAAfG,EAA0CF,GAAa9tY,GACnD4tY,GAAY5tY,EAAMguY,EAAYH,EACtC,CAEA,SAASI,GAAejuY,EAAMz4M,EAAcsmlB,GAAoB,OAAOE,GAAmB/tY,EAAMz4M,OAAGsmlB,EAAgB,EAAG,EAAI,CAyB1H,SAASK,GAAoBluY,GAC5B,IAAIr4L,EAAQq4L,EAAKx6M,EACb2olB,EAAgBC,GAAyBpuY,EA7oC5B;AAgpCjB,OAFmB,GAAhBA,EAAKA,EAAKx6M,IAAgC,GAAlBw6M,EAAKA,EAAKx6M,EAAE,IAAgBw6M,EAAKx6M,EAAImiB,EAAS,IAAOq4L,EAAKx6M,GAAK,GAEnF,CAAC2olB,EADUC,GAAyBpuY,EAnrC1B,GAqrClB,CAWA,SAASquY,GAAiBruY,EAAKsuY,GAG9B,IAFA,IAAIr3O,EAAMj3J,EAAKgrX,WAAW,GACtBujB,EAA8B,CAAC,EAC3BnggB,EAAI,EAAGA,GAAK6oR,IAAO7oR,EAAG,CAC7B,IAAIk+f,EAAMtsY,EAAKgrX,WAAW,GACtBvriB,EAAMugL,EAAKgrX,WAAW;AAC1BujB,EAAKjC,GAAOtsY,EAAKgrX,WAAWvriB,EAAmB,OAAb6ujB,EAAoB,UAAU,QAASplkB,QAAQu6iB,EAAK,IAAIv6iB,QAAQw6iB,EAAK,KACvF,OAAb4qB,GAAuB7ujB,EAAM,IAAIugL,EAAKx6M,GAAK,EAC/C,CAEA,OADY,EAATw6M,EAAKx6M,IAAOw6M,EAAKx6M,EAAKw6M,EAAKx6M,GAAG,GAAM,GAChC+olB,CACR,CAGA,SAASC,GAAWxuY,GACnB,IAAIl5L,EAAOk5L,EAAKgrX,WAAW,GACvByjB,EAAQzuY,EAAKn3M,MAAMm3M,EAAKx6M,EAAEw6M,EAAKx6M,EAAEshB;AAGrC,OAFAk5L,EAAKx6M,GAAKshB,GACC,EAAPA,GAAY,IAAGk5L,EAAKx6M,GAAM,GAAY,EAAPshB,GAAa,GACzC2nkB,CACR,CAaA,SAASL,GAAyBpuY,EAAMzzM,EAAiBmikB,GACxD,IAA4BrzT,EAAxB9zQ,EAAIy4M,EAAKgrX,WAAW,GAAStphB,EAAOgthB,GAAO,CAAC;AAEhD,GADA1uX,EAAKx6M,GAAK,EA3tCO,KA4tCd+G,GACAhF,IAAMgF,IAAmC,IAA3Bo6kB,GAAUr0kB,QAAQ/F,KAAmC,OAAX,MAAPA,IAA4C,OAAX,MAAJhF,IAAwB,MAAM,IAAI4B,MAAM,iBAAmBoD,EAAO,QAAUhF;AAC7J,OA9tCiB,KA8tCVgF,EAAsBhF,EAAIgF,GAChC,KAAK,EAA0E,OAA1D8uQ,EAAMr7D,EAAKgrX,WAAW,EAAG,KAAUtphB,EAAK81J,MAAKwI,EAAKx6M,GAAK,GAAU61Q;AACtF,KAAK,EAA+C,OAAzBr7D,EAAKgrX,WAAW,EAAG;AAC9C,KAAK,GAAkB,OAA8B,IAAvBhrX,EAAKgrX,WAAW;AAC9C,KAAK,GAA2C,OAApBhrX,EAAKgrX,WAAW;AAC5C,KAAK,GAAmB,OAAO4iB,GAAY5tY,EAAMz4M,EAAG,GAAG2hB,QAAQu6iB,EAAK;AACpE,KAAK,GAAoB,OAAOqqB,GAAa9tY;AAC7C,KAAK,GAAsB,OAAOytY,GAAeztY;AACjD,KAAK,GAAkB,OAAOwuY,GAAWxuY;AACzC,KAAK,GAAgB,OAxBvB,SAA6BA,GAE5B,IAAI32M,EAAI,CAAC;AAIT,OAHAA,EAAEqllB,KAAO1uY,EAAKgrX,WAAW,GAEzBhrX,EAAKx6M,GAAK6D,EAAEqllB,KAAO,GAAKrllB,EAAEqllB,KAAO,GAAK,EAC/BrllB,CACR,CAPA,CAwBkD22M;AAChD,KAAK,GAAoB,OAAOiuY,GAAejuY,EAAMz4M,GAAIm6C,EAAK81J,KAAKtuL,QAAQu6iB,EAAK;AAChF,KAAK,GAAkB,OA1FzB,SAAiCzjX,EAAMz4M,GAAgB,IAAIA,EAAG,MAAM,IAAI4B,MAAM;AAAgD,OAAO4klB,GAAmB/tY,EAAMz4M,EAAG,EAAI,CAArK,CA0FwDy4M,EAAMz4M,GAAU2hB,QAAQu6iB,EAAK;AACnF,KAAK,KAAiC,OA1DxC,SAAqCzjX,GAGpC,IAFA,IAAI2uY,EAAY3uY,EAAKgrX,WAAW,GAC5BxpU,EAAM,GACFz4P,EAAI,EAAGA,EAAI4llB,EAAY,IAAK5llB,EAAGy4P,EAAInxP,KAAK69kB,GAAoBluY;AACpE,OAAOwhD,CACR,CALA,CA0D2ExhD;AACzE,KAAK,KACL,KAAK,KACJ,OAAY,MAALz4M,EA3FV,SAAgCy4M,GAG/B,IAFA,IAAIh3M,EAASg3M,EAAKgrX,WAAW,GACzB3vT,EAAwB,GACpBtyQ,EAAI,EAAGA,GAAKC,IAAUD,EAAG,CAChC,IAAI4e,EAAQq4L,EAAKx6M;AACjB61Q,EAAItyQ,GAAKi3M,EAAKgrX,WAAW,EAAG,UAAU9hjB,QAAQu6iB,EAAK,IAC/CzjX,EAAKx6M,EAAImiB,EAAS,IAAMq4L,EAAKx6M,GAAK,EACvC,CACA,OAAO61Q,CACR,CATA,CA2F+Cr7D,GA/E/C,SAAwCA,GAGvC,IAFA,IAAIh3M,EAASg3M,EAAKgrX,WAAW,GACzB3vT,EAAwB,GACpBtyQ,EAAI,EAAGA,GAAKC,IAAUD,EAAGsyQ,EAAItyQ,GAAKi3M,EAAKgrX,WAAW,EAAG,YAAY9hjB,QAAQu6iB,EAAK;AACtF,OAAOpoT,CACR,CALA,CA+EsFr7D;AACpF,QAAS,MAAM,IAAI72M,MAAM,wCAA0CoD,EAAO,IAAMhF,GAElF,CACA,SAASqnlB,GAAyBrilB,EAAiBnB,GAClD,IAAI/B,EAAI4kkB,GAAQ,GAAI3gkB,EAAI2gkB,GAAQ;AAEhC,OADA5kkB,EAAEuhkB,YAAY,EAAW,IAARr+jB,EAAe,GAAOA,GAChCA,GACN,KAAK,EAAgBe,EAAEs9jB,aAAa,EAAGx/jB;AAAQ;AAC/C,KAAK,GAAgBkC,EAAI2gkB,GAAQ,IAAMrD,YAAY,EAAGx/jB,EAAO;AAAM;AACnE,KAAK,GAAkBkC,EAAEs9jB,YAAY,EAAGx/jB,EAAQ,EAAO;AAAO;AAC9D,KAAK,GAA6GkC,EA3IpH,SAAwB2D,GACvB,IACI1J,GADuB,iBAAR0J,EAAoB,IAAImxC,KAAKA,KAAKzjC,MAAM1N,IAASA,GACvDqyE,UAAY,IAAO,YAC5B99E,EAAI+B,EAAIiE,KAAKC,IAAI,EAAE,IAAKjC,GAAKjC,EAAI/B,GAAKgG,KAAKC,IAAI,EAAE;AAC3CjC,GAAK;AACf,IAAI8T,GADJ9X,GAAK,KACQgG,KAAKC,IAAI,EAAE,IAAO;AAC5B6R,EAAI,IAAK9X,GAAQgG,KAAKC,IAAI,EAAE,IAAKjC,GAAK8T;AACzC,IAAIjU,EAAI4kkB,GAAQ;AAA8C,OAA1C5kkB,EAAEuhkB,YAAY,EAAGplkB,GAAI6D,EAAEuhkB,YAAY,EAAGphkB,GAAWH,CACtE,CARA,CA2IuI+B;AAAQ;AAC7I,KAAK,GACL,KAAK,GAKJ,KAHAkC,EAAI2gkB,GAAQ,EAAI,GAAK7ikB,EAAMpC,OAAS,IAAMoC,EAAMpC,OAAS,EAAI,EAAI,KAC/D4hkB,YAAY,EAAGx/jB,EAAMpC,OAAS,GAChCsE,EAAEs9jB,YAAY,EAAGx/jB,EAAO,QAClBkC,EAAE9H,GAAK8H,EAAEtE,QAAQsE,EAAEs9jB,YAAY,EAAG;AACxC;AACD,QAAS,MAAM,IAAIzhkB,MAAM,wCAA0CoD,EAAO,IAAMnB,GAEjF,OAAOi4jB,EAAQ,CAACh6jB,EAAGiE,GACpB,CAGA,SAASuhlB,GAAkB7uY,EAAM8uY,GAChC,IAAIC,EAAa/uY,EAAKx6M,EAClBshB,EAAOk5L,EAAKgrX,WAAW,GACvBgkB,EAAWhvY,EAAKgrX,WAAW,GAC3Bpze,EAAQ,GAAI7uF,EAAI,EAChBullB,EAAW,EACXW,GAAc,EAAGC,EAAiC,CAAC;AACvD,IAAInmlB,EAAI,EAAGA,GAAKimlB,IAAYjmlB,EAAG,CAC9B,IAAIomlB,EAASnvY,EAAKgrX,WAAW,GACzBokB,EAASpvY,EAAKgrX,WAAW;AAC7Bpze,EAAM7uF,GAAK,CAAComlB,EAAQC,EAASL,EAC9B,CACAn3f,EAAMh9D,KAAK,SAASnrB,EAAEwK,GAAK,OAAOxK,EAAE,GAAKwK,EAAE,EAAI;AAC/C,IAAIo1kB,EAAQ,CAAC;AACb,IAAItmlB,EAAI,EAAGA,GAAKimlB,IAAYjmlB,EAAG,CAC9B,GAAGi3M,EAAKx6M,IAAMoyF,EAAM7uF,GAAG,GAAI,CAC1B,IAAI2/G;AACJ,GAAG3/G,EAAE,GAAK+llB,EAAO,OAAOA,EAAMl3f,EAAM7uF,EAAE,GAAG,IAAIxB,GAC5C,KAAK,EAAmBy4M,EAAKx6M,EAAE,IAAMoyF,EAAM7uF,GAAG,KAAMi3M,EAAKx6M,GAAG,EAAGkjH;AAAgB;AAC/E,KAAK,GACL,KAAK,KAAoCs3F,EAAKx6M,GAAKoyF,EAAM7uF,GAAG,KAAMi3M,EAAKx6M,EAAEoyF,EAAM7uF,GAAG,GAAI2/G,MAGvF,KADKome,GAAU,GAAH/llB,IAASi3M,EAAKx6M,GAAKoyF,EAAM7uF,GAAG,KAAM2/G,KAAYs3F,EAAKx6M,EAAIoyF,EAAM7uF,GAAG,IACzE2/G,EAAM,MAAM,IAAIv/G,MAAM,gCAAkCyuF,EAAM7uF,GAAG,GAAK,OAASi3M,EAAKx6M,EAAI,KAAOuD,EACnG,CACA,GAAG+llB,EAAO,CACT,IAAIQ,EAASR,EAAMl3f,EAAM7uF,GAAG;AAG5B,GAFAsmlB,EAAMC,EAAOrmlB,GAAKmllB,GAAyBpuY,EAAMsvY,EAAO/nlB,EAAG,CAACiwM,SAC5C,YAAb83Y,EAAOhilB,IAAiB+hlB,EAAMC,EAAOrmlB,GAAKmwC,OAAOi2iB,EAAMC,EAAOrmlB,IAAM,IAAM,KAAO,OAASmwC,OAAyB,MAAlBi2iB,EAAMC,EAAOrmlB,KAAcJ,OAAO,IACvH,YAAZymlB,EAAOrmlB,EAAiB,OAAOomlB,EAAMC,EAAOrmlB,IAC9C,KAAK,EAAGomlB,EAAMC,EAAOrmlB,GAAK;AAE1B,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KAAO,KAAM,IAClB,KAAK,MAAO,KAAM,IACjBo4jB,EAAOitB,EAAYe,EAAMC,EAAOrmlB,KAAK,EAAK;AAAS;AACpD,QAAS,MAAM,IAAIE,MAAM,yBAA2BkmlB,EAAMC,EAAOrmlB,IAEnE,MACC,GAAmB,IAAhB2uF,EAAM7uF,GAAG,IAGX,GAFAullB,EAAWe,EAAMf,SAAYF,GAAyBpuY,EAx0CxC,GAy0CdqhX,EAAOitB,IACY,IAAhBW,EAAmB,CACrB,IAAIM,EAASvvY,EAAKx6M;AAClBw6M,EAAKx6M,EAAIoyF,EAAMq3f,GAAY,GAC3BC,EAAUb,GAAiBruY,EAAKsuY,GAChCtuY,EAAKx6M,EAAI+plB,CACV,OACM,GAAmB,IAAhB33f,EAAM7uF,GAAG,GAAU,CAC5B,GAAgB,IAAbullB,EAAgB,CAAEW,EAAalmlB,EAAGi3M,EAAKx6M,EAAIoyF,EAAM7uF,EAAE,GAAG;AAAI,QAAU,CACvEmmlB,EAAUb,GAAiBruY,EAAKsuY,EACjC,KAAO,CACN,IACI1yiB,EADA/qC,EAAOq+kB,EAAQt3f,EAAM7uF,GAAG;AAG5B,OAAOi3M,EAAKA,EAAKx6M,IAChB,KAAK,GAAkBw6M,EAAKx6M,GAAK,EAAGo2C,EAAM4yiB,GAAWxuY;AAAO;AAC5D,KAAK,GACL,KAAK,GAAoBA,EAAKx6M,GAAK,EAAGo2C,EAAMqyiB,GAAejuY,EAAMA,EAAKA,EAAKx6M,EAAE,IAAI0jB,QAAQ,WAAW;AAAK;AACzG,KAAK,EAAgB82L,EAAKx6M,GAAK,EAAGo2C,EAAMokK,EAAKgrX,WAAW,EAAG;AAAM;AACjE,KAAK,GAAiBhrX,EAAKx6M,GAAK,EAAGo2C,EAAMokK,EAAKgrX,WAAW;AAAI;AAC7D,KAAK,EAAgBhrX,EAAKx6M,GAAK,EAAGo2C,EAAMokK,EAAKgrX,WAAW,EAAG;AAAM;AACjE,KAAK,GAAkBhrX,EAAKx6M,GAAK,EAAGo2C,EAAM4ziB,GAAUxvY,EAAM;AAAI;AAC9D,KAAK,GAAsBA,EAAKx6M,GAAK,EAAGo2C,EAAM89hB,GAAU+T,GAAeztY;AAAQ;AAC/E,QAAS,MAAM,IAAI72M,MAAM,mBAAqB62M,EAAKA,EAAKx6M,IAEzD6plB,EAAMx+kB,GAAQ+qC,CACf,CAEF,CAEA,OADAokK,EAAKx6M,EAAIuplB,EAAajokB,EACfuokB,CACR,CACA,IAAII,GAAY,CAAE,WAAY,YAAa,gBAAiB,cAAe,mBAAoB;AAC/F,SAASC,GAAoB9ziB,GAC5B,cAAcA,GACb,IAAK,UAAW,OAAO;AACvB,IAAK,SAAU,OAAa,EAAJA,IAAQA,EAAO,EAAO;AAC9C,IAAK,SAAU,OAAO;AACtB,IAAK,SAAU,GAAGA,aAAewG,KAAM,OAAO,GAE/C,OAAQ,CACT,CACA,SAASutiB,GAAkB/3jB,EAAS8c,EAAIo6iB,GACvC,IAAIc,EAAM3hB,GAAQ,GAAI4hB,EAAO,GAAIl8Z,EAAO,GACpCo2G,EAAK,EAAGhhS,EAAI,EAEZolJ,EAAK8/a,GAAQ,GAAI6hB,EAAM7hB,GAAQ;AAOnC,GANA9/a,EAAGy8a,YAAY,EAAG,GAClBz8a,EAAGy8a,YAAY,EAAG,MAClBklB,EAAIllB,YAAY,EAAG,GACnBj3Y,EAAKtjL,KAAK89I,GAAK0hc,EAAKx/kB,KAAKy/kB,GACzB/lT,GAAM,EAAI57I,EAAGnlJ,QAET0rC,EAAI,EACPo7iB,EAAM7hB,GAAQ,IACVrD,YAAY,EAAG,GACnBilB,EAAK//a,QAAQggb;AAEb,IAAIxsB,EAAO,CAAC2K,GAAQ;AAEpB,IADA3K,EAAK,GAAGsH,YAAY,EAAGhziB,EAAQ5uB,QAC3BD,EAAI,EAAGA,EAAI6uB,EAAQ5uB,SAAUD,EAAG,CACnC,IAAIqC,EAAQwsB,EAAQ7uB,GAAG;AAKvB,KAJAolJ,EAAK8/a,GAAQ,EAAQ,GAAK7ikB,EAAMpC,OAAS,IAAMoC,EAAMpC,OAAS,EAAI,EAAI,KACnE4hkB,YAAY,EAAG7hkB,EAAE,GACpBolJ,EAAGy8a,YAAY,EAAGx/jB,EAAMpC,OAAS,GACjCmlJ,EAAGy8a,YAAY,EAAGx/jB,EAAO,QACnB+iJ,EAAG3oJ,GAAK2oJ,EAAGnlJ,QAAQmlJ,EAAGy8a,YAAY,EAAG;AAC3CtH,EAAKjzjB,KAAK89I,EACX,CACAA,EAAKk1a,EAAQC,GACb3vY,EAAK7jB,QAAQ3hB,GACb47I,GAAM,EAAI57I,EAAGnlJ,MACd,CAEA,IAAID,EAAI,EAAGA,EAAI6uB,EAAQ5uB,SAAUD,EAChC,KAAG2rC,GAAOA,EAAG9c,EAAQ7uB,GAAG,QACrB0mlB,GAAUn9kB,QAAQslB,EAAQ7uB,GAAG,KAAO,GAAKyilB,GAAiBl5kB,QAAQslB,EAAQ7uB,GAAG,KAAO,IACnE,MAAjB6uB,EAAQ7uB,GAAG,GAAd,CAEA,IAAI6yC,EAAMhkB,EAAQ7uB,GAAG,GAAImuN,EAAM;AAC/B,GAAGxiL,EAAI,CAEN,IAAIq7iB,EAASjB,EADb53X,GAAOxiL,EAAG9c,EAAQ7uB,GAAG;AAErB,GAAc,WAAXgnlB,EAAMzilB,GAAgC,iBAAPsuC,EAAiB,CAElD,IAAIquQ,EAAMruQ,EAAIl7B,MAAM;AACpBk7B,IAASquQ,EAAI,IAAK,MAASA,EAAI,IAAK,EACrC,CACA97J,EAAKygc,GAAyBmB,EAAMxolB,EAAGq0C,EACxC,KAAO,CACN,IAAI0qC,EAAIopgB,GAAoB9ziB,IACnB,GAAN0qC,IAAWA,EAAI,GAAM1qC,EAAMxC,OAAOwC,IACrCuyG,EAAKygc,GAAyBtogB,EAAG1qC,EAClC,CACA+3I,EAAKtjL,KAAK89I,IAEV2hc,EAAM7hB,GAAQ,IACVrD,YAAY,EAAIl2hB,EAAWwiL,EAAN,EAAEnuN,GAC3B8mlB,EAAKx/kB,KAAKy/kB,GAEV/lT,GAAM,EAAI57I,EAAGnlJ,MAvBa,CA0B3B,IAAIsU,EAAI,GAAKq2K,EAAK3qL,OAAS;AAC3B,IAAID,EAAI,EAAGA,EAAI4qL,EAAK3qL,SAAUD,EAAK8mlB,EAAK9mlB,GAAG6hkB,YAAY,EAAGttjB,GAAIA,GAAKq2K,EAAK5qL,GAAGC;AAG3E,OAFA4mlB,EAAIhlB,YAAY,EAAG7gS,GACnB6lT,EAAIhlB,YAAY,EAAGj3Y,EAAK3qL,QACjBq6jB,EAAQ,CAACusB,GAAK10kB,OAAO20kB,GAAM30kB,OAAOy4K,GAC1C,CAGA,SAASq8Z,GAAwBzxY,EAAMuwY,EAAOphB,GAC7C,IAAI1tX,EAAOzB,EAAKr0H;AAChB,IAAI81H,EAAM,MAAQ,CAAC;AACnB+qX,GAAU/qX,EAAM;AAEhB,IAAIiwY,EAASC,EAAQC,EAAQC,EAASC,EAAU;AAChDrwY,EAAKssX,IAAI,OAAQ,gBAEFtsX,EAAKgrX,WAAW;AAC/B,IAAIslB,EAAmBtwY,EAAKgrX,WAAW,GACnCoD,EAAQpuX,EAAKgrX,WAAW;AAC5B,GAAGoD,IAAU7D,GAAI/zR,MAAM25R,OAAO1B,cAAgBL,IAAUV,EAAO,MAAM,IAAIvkkB,MAAM,yBAA2BilkB;AAE1G,GAAe,KADf6hB,EAAUjwY,EAAKgrX,WAAW,KACM,IAAZilB,EAAe,MAAM,IAAI9mlB,MAAM,uBAAyB8mlB;AAG5E,GAFAC,EAASlwY,EAAKgrX,WAAW,IAAKolB,EAAUpwY,EAAKgrX,WAAW,GAEzC,IAAZilB,GAAiBG,IAAYpwY,EAAKx6M,EAAG,MAAM,IAAI2D,MAAM,oBAAsBinlB,EAAU,QAAUpwY,EAAKx6M;AACnF,IAAZyqlB,IAAiBE,EAASnwY,EAAKgrX,WAAW,IAAKqlB,EAAUrwY,EAAKgrX,WAAW;AACjF,IAUIulB,EAVAC,EAAQ3B,GAAkB7uY,EAAM8uY,GAEhC2B,EAAQ,CAAEH,iBAAkBA;AAChC,IAAI,IAAIr2kB,KAAKu2kB,EAAOC,EAAKx2kB,GAAKu2kB,EAAMv2kB;AAIpC,GAFAw2kB,EAAKC,MAAQR,EAEE,IAAZD,EAAe,OAAOQ;AAEzB,GADGJ,EAAUrwY,EAAKx6M,GAAK,IAAGw6M,EAAKx6M,GAAK,GACjCw6M,EAAKx6M,IAAM6qlB,EAAS,MAAM,IAAIlnlB,MAAM,sBAAwB62M,EAAKx6M,EAAI,QAAU6qlB;AAElF,IAAME,EAAQ1B,GAAkB7uY,EAAM,KAAO,CAAE,MAAMl3M,GAAI,CACzD,IAAImR,KAAKs2kB,EAAOE,EAAKx2kB,GAAKs2kB,EAAMt2kB;AAEhC,OADAw2kB,EAAKC,MAAQ,CAACR,EAAQC,GACfM,CACR,CACA,SAASE,GAAwB/4jB,EAAS81iB,EAAOh5hB,EAAIo6iB,EAAqC8B,EAAmBC,GAC5G,IAAIjB,EAAM3hB,GAAQ2iB,EAAW,GAAK,IAC9BttB,EAAO,CAACssB;AACZA,EAAIhlB,YAAY,EAAG,OACnBglB,EAAIhlB,YAAY,EAAG,GACnBglB,EAAIhlB,YAAY,EAAG,WACnBglB,EAAIhlB,YAAY,GAAIL,GAAI/zR,MAAM25R,OAAO1B,aAAc,OACnDmhB,EAAIhlB,YAAY,EAAIgmB,EAAW,EAAI,GACnChB,EAAIhlB,YAAY,GAAI8C,EAAO,OAC3BkiB,EAAIhlB,YAAY,EAAIgmB,EAAW,GAAK;AACpC,IAAIE,EAAMnB,GAAkB/3jB,EAAS8c,EAAIo6iB;AAGzC,GAFAxrB,EAAKjzjB,KAAKyglB,GAEPF,EAAU,CACZ,IAAIG,EAAMpB,GAAkBiB,EAAU,KAAM;AAC5ChB,EAAIhlB,YAAY,GAAIimB,EAAQ,OAC5BjB,EAAIhlB,YAAY,EAAG,GAAKkmB,EAAI9nlB,QAC5Bs6jB,EAAKjzjB,KAAK0glB,EACX,CACA,OAAO1tB,EAAQC,EAChB,CAEA,SAAS0tB,GAAWhxY,EAAMh3M,GAAmC,OAAzBg3M,EAAKgrX,WAAWhikB,GAAgB,IAAM,CAU1E,SAASwmlB,GAAUxvY,EAAMh3M,GAAqB,OAAmC,IAA5Bg3M,EAAKgrX,WAAWhikB,EAAiB,CACtF,SAASiolB,GAAUl3kB,EAAW1Q,GAAkD,OAAzCA,IAAGA,EAAE4kkB,GAAQ,IAAI5kkB,EAAEuhkB,YAAY,KAAM7wjB,GAAW1Q,CAAG,CAE1F,SAAS6nlB,GAAYlxY,GAAyC,OAAOA,EAAKgrX,WAAW,EAAG,IAAM,CAC9F,SAASmmB,GAAYp3kB,EAAc1Q,GAA+C,OAAtCA,IAAGA,EAAE4kkB,GAAQ,IAAI5kkB,EAAEuhkB,YAAY,EAAG7wjB,GAAW1Q,CAAG,CAC5F,SAAS+nlB,GAAapxY,EAAMh3M,GAAoC,OAZhE,SAAkBg3M,EAAMh3M,EAAQooH,GAE/B,IADA,IAAI64L,EAAM,GAAIh4S,EAAS+tM,EAAKx6M,EAAIwD,EAC1Bg3M,EAAKx6M,EAAIyM,GAAQg4S,EAAI55S,KAAK+gH,EAAG4uF,EAAM/tM,EAAS+tM,EAAKx6M;AACvD,GAAGyM,IAAW+tM,EAAKx6M,EAAG,MAAM,IAAI2D,MAAM;AACtC,OAAO8gT,CACR,CALA,CAYgFjqG,EAAKh3M,EAAOkolB,GAAa,CASzG,SAASG,GAAUt3kB,EAAGxS,EAAc8B,GAInC,OAHIA,IAAGA,EAAI4kkB,GAAQ,IACnB5kkB,EAAEuhkB,YAAY,EAAU,KAALrjkB,GAAawS,KAAOA,GACvC1Q,EAAEuhkB,YAAY,EAAU,KAALrjkB,EAAY,EAAI,GAC5B8B,CACR,CAGA,SAASiolB,GAA2BtxY,EAAMh3M,EAAQ04C,GACjD,IAAI6viB,EAAMvxY,EAAKgrX,WAAWtphB,GAAQA,EAAKsgiB,MAAQ,GAAK,EAAI,GACpDtJ,EAAW,YACX1ta,EAAKg2Z;AACNt/gB,GAAQA,EAAKsgiB,MAAQ,IAAGhhB,EAAmB,MAC1Ct/gB,GAAqB,GAAbA,EAAKsgiB,KAGM,IAAbtgiB,EAAKsgiB,OACdtJ,EAAW,QAHK14X,EAAKgrX,WAAW,KAChB0N,EAAW,aAIzBh3hB,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,MAAQ,IAAGtJ,EAAW;AAChD,IAAIrvkB,EAAIkolB,EAAMvxY,EAAKgrX,WAAWumB,EAAK7Y,GAAY;AAE/C,OADA1X,EAAmBh2Z,EACZ3hK,CACR,CAGA,SAASmolB,GAAkCxxY,GAC1C,IAAIh1C,EAAKg2Z;AACTA,EAAmB;AACnB,IAGcywB,EAHVF,EAAMvxY,EAAKgrX,WAAW,GAAI3ub,EAAQ2jE,EAAKgrX,WAAW,GACrB0mB,EAAiB,EAARr1c,EAAas1c,EAAkB,EAARt1c,EAC7D7lI,EAAQ,GAAa,EAAR6lI,GACbu1c,EAAO,EACPnukB,EAAI,CAAC;AACNkukB,IAASC,EAAO5xY,EAAKgrX,WAAW,IAChC0mB,IAAQD,EAAWzxY,EAAKgrX,WAAW;AACtC,IAAI0N,EAAoB,GAATlikB,EAAa,YAAc,YACtCu4C,EAAc,IAARwiiB,EAAY,GAAKvxY,EAAKgrX,WAAWumB,EAAK7Y;AAMhD,OALGiZ,IAAS3xY,EAAKx6M,GAAK,EAAIoslB,GACvBF,IAAQ1xY,EAAKx6M,GAAKislB,GACrBhukB,EAAElc,EAAIwnD,EACF4iiB,IAAWlukB,EAAE+zL,IAAM,MAAQ/zL,EAAElc,EAAI,OAAQkc,EAAEna,EAAIma,EAAElc,GACrDy5jB,EAAmBh2Z,EACZvnJ,CACR,CACA,SAASoukB,GAAkCC,GAC1C,IAAIprjB,EAAOorjB,EAAMvqlB,GAAG,GAEhBqolB,EAAM3hB,GAAQ;AAClB2hB,EAAIhlB,YAAY,EAAGlkiB,EAAI19B,QACvB4mlB,EAAIhlB,YAAY,EAA+B;AAG/C,IAAImnB,EAAQ9jB,GAAQ,EAAIvniB,EAAI19B;AAK5B,OAJA+olB,EAAMnnB,YAAY,EAAIlkiB,EAAI19B,OAAQ09B,EAAK,WAIhC28hB,EAFG,CAACusB,EAAKmC,GAGjB,CAGA,SAASC,GAA2BhyY,EAAMuxY,EAAK7viB,GAE9C,GAAGA,EAAM,CACR,GAAGA,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,MAAQ,EAAG,OAAOhiY,EAAKgrX,WAAWumB,EAAK;AACjE,GAAG7viB,EAAKsgiB,MAAQ,GAAI,OAAOhiY,EAAKgrX,WAAWumB,EAAK,YACjD,CAIA,OAFe,IADCvxY,EAAKgrX,WAAW,GACHhrX,EAAKgrX,WAAWumB,EAAK,aAClCvxY,EAAKgrX,WAAWumB,EAAK,YAEtC,CAGA,SAASU,GAAsBjyY,EAAMh3M,EAAQ04C,GAC5C,IAAI6viB,EAAMvxY,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI;AACvD,OAAW,IAARuP,GAAavxY,EAAKx6M,IAAY,IAC1BwslB,GAA2BhyY,EAAMuxY,EAAK7viB,EAC9C,CAEA,SAASwwiB,GAAuBlyY,EAAMh3M,EAAQ04C,GAC7C,GAAGA,EAAKsgiB,KAAO,EAAG,OAAOiQ,GAAsBjyY,EAAMh3M,EAAQ04C;AAC7D,IAAI6viB,EAAMvxY,EAAKgrX,WAAW;AAC1B,OAAW,IAARumB,GAAavxY,EAAKx6M,IAAY,IAC1Bw6M,EAAKgrX,WAAWumB,EAAM7viB,EAAKsgiB,MAAQ,IAAMhiY,EAAKwgY,KAAS,QAAU,YACzE,CAEA,SAAS2R,GAAsBzrjB,EAAKgb,EAAMr4C,GAKzC,OAJIA,IAAGA,EAAI4kkB,GAAQ,EAAI,EAAIvniB,EAAI19B,SAC/BK,EAAEuhkB,YAAY,EAAGlkiB,EAAI19B,QACrBK,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,GAAIlkiB,EAAK,WAChBr9B,CACR,CAoDA,SAAS+olB,GAAsBpyY,GAC9B,IAAIvgL,EAAMugL,EAAKgrX,WAAW;AAE1B,OADQvriB,EAAM,EAAIugL,EAAKgrX,WAAWvriB,EAAK,WAAWvW,QAAQu6iB,EAAM,IAAM,EAEvE,CACA,SAAS4uB,GAAsB3rjB,EAAgBr9B,GAC1CA,IAAGA,EAAI4kkB,GAAQ,EAAiB,EAAbvniB,EAAI19B,SAC3BK,EAAEuhkB,YAAY,EAAG,EAAIlkiB,EAAI19B;AACzB,IAAI,IAAID,EAAI,EAAGA,EAAI29B,EAAI19B,SAAUD,EAAGM,EAAEuhkB,YAAY,EAAGlkiB,EAAI+T,WAAW1xC;AAEpE,OADAM,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CA4BA,SAASiplB,GAAgBC,GACxB,IAAI/wV,EAAMysU,GAAQ,KAAMllkB,EAAI,EACxBuhlB,EAASiI,EAAGjI;AACQ,WAArBA,EAAOzhlB,MAAM,EAAE,KAAiByhlB,EAASA,EAAOzhlB,MAAM;AACzD,IAAI2plB,EAAUlI,EAAOh4kB,QAAQ,KACzB02E,EAAIwpgB,GAAW,EAAI,GAAO;AAC9B,OAAOlI,EAAO99kB,OAAO,IAAM,IAAK,IAAKw8E,EAAE;AAAM;AAAO,IAAK,IAAKA,IAAG,EACjEw4K,EAAIopU,YAAY,EAAE,GAAIppU,EAAIopU,YAAY,EAAG5hf;AACzC,IAAItzD,EAAO,CAAC,EAAE,QAAQ,QAAQ,QAAQ;AAAK,IAAI3sB,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAGy4P,EAAIopU,YAAY,EAAGl1iB,EAAK3sB;AACpG,GAAQ,IAALigF,EAEFqpgB,GADA/H,EAASA,EAAOzhlB,MAAM,GACQ24P;KACxB,GAAO,EAAJx4K,EAAU,CAEnB,IADAtzD,EAAO,kDAAkDhV,MAAM,KAC3D3X,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAGy4P,EAAIopU,YAAY,EAAGtzjB,SAASoe,EAAK3sB,GAAI;AACtE,IAAI0plB,EAAYD,GAAW,EAAIlI,EAAOzhlB,MAAM,EAAG2plB,GAAWlI;AAE1D,IADA9oV,EAAIopU,YAAY,EAAG,GAAG6nB,EAAUzplB,OAAS,IACrCD,EAAI,EAAGA,EAAI0plB,EAAUzplB,SAAUD,EAAGy4P,EAAIopU,YAAY,EAAG6nB,EAAUh4iB,WAAW1xC;AAC9Ey4P,EAAIopU,YAAY,EAAG,GACZ,EAAJ5hf,GAAUqpgB,GAAsBG,GAAW,EAAIlI,EAAOzhlB,MAAM2plB,EAAQ,GAAI,GAAIhxV,EAChF,KAAO,CAEN,IADA9rO,EAAO,kDAAkDhV,MAAM,KAC3D3X,EAAI,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAGy4P,EAAIopU,YAAY,EAAGtzjB,SAASoe,EAAK3sB,GAAI;AAEtE,IADA,IAAIolF,EAAI,EACuB,OAAzBm8f,EAAOzhlB,MAAQ,EAAFslF,EAAM,EAAFA,EAAI,IAAoC,QAAzBm8f,EAAOzhlB,MAAQ,EAAFslF,EAAM,EAAFA,EAAI,MAAcA;AAGzE,IAFAqzK,EAAIopU,YAAY,EAAGz8e,GACnBqzK,EAAIopU,YAAY,EAAG0f,EAAOthlB,OAAS,EAAImlF,EAAI,GACvCplF,EAAI,EAAGA,EAAIuhlB,EAAOthlB,OAAS,EAAImlF,IAAKplF,EAAGy4P,EAAIopU,YAAY,EAAkC,IAA/B0f,EAAO7viB,WAAW1xC,EAAI,EAAIolF;AAIxF,IAHAqzK,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,OACnBppU,EAAIopU,YAAY,EAAG,OACf7hkB,EAAI,EAAGA,EAAI,IAAKA,EAAGy4P,EAAIopU,YAAY,EAAG,EAC3C,CACA,OAAOppU,EAAI34P,MAAM,EAAG24P,EAAIh8P,EACzB,CAGA,SAASktlB,GAAe1yY,GAA0H,MAAO,CAAnGA,EAAKgrX,WAAW,GAAQhrX,EAAKgrX,WAAW,GAAQhrX,EAAKgrX,WAAW,GAAQhrX,EAAKgrX,WAAW,GAAsB,CAGpK,SAAS2nB,GAAc3yY,EAAMh3M,GAAU,IAAIyG,EAAIijlB,GAAe1yY;AAAyB,OAAVvwM,EAAE,GAAK,EAAUA,CAAG,CAIjG,SAASmjlB,GAAc5yY,GAItB,MAAQ,CAAC12M,EAHA02M,EAAKgrX,WAAW,GAGVp+jB,EAFLozM,EAAKgrX,WAAW,GAEJ6nB,KADX7yY,EAAKgrX,WAAW,GAE5B,CACA,SAAS8nB,GAAc9xkB,EAAc8C,EAAc+ukB,EAAkBxplB,GAKpE,OAJIA,IAAGA,EAAI4kkB,GAAQ,IACnB5kkB,EAAEuhkB,YAAY,EAAG5pjB,GACjB3X,EAAEuhkB,YAAY,EAAG9mjB,GACjBza,EAAEuhkB,YAAY,EAAGioB,GAAM,GAChBxplB,CACR,CAeA,SAAS0plB,GAAU/yY,EAAMh3M,EAAQ04C,GAChC,IAAIpkC,EAAIokC,EAAKsgiB,KAAO,EAAI,EAAI;AAE5B,MAAO,CADQhiY,EAAKgrX,WAAW1tjB,GAAgB0iM,EAAKgrX,WAAW1tjB,EAAE,KAAiB0iM,EAAKgrX,WAAW1tjB,EAAE,KAErG,CAGA,SAAS01kB,GAAYhzY,GAGpB,MAAO,CAFIA,EAAKgrX,WAAW,GAClB2a,GAAe3lY,GAEzB,CAeA,SAASizY,GAAYjzY,GACpB,IAAIkzY,EAAUlzY,EAAKgrX,WAAW,GAC1BmoB,EAASnzY,EAAKgrX,WAAW;AAG7B,MAAO,CAAC//jB,EAAE,CAAC2B,EAFIozM,EAAKgrX,WAAW,GAER1hkB,EAAE4plB,GAAUpqlB,EAAE,CAAC8D,EADxBozM,EAAKgrX,WAAW,GACkB1hkB,EAAE6plB,GACnD,CACA,SAASC,GAAY9plB,EAAaD,GAMjC,OALIA,IAAGA,EAAI4kkB,GAAQ,IACnB5kkB,EAAEuhkB,YAAY,EAAGthkB,EAAE2B,EAAE3B,GACrBD,EAAEuhkB,YAAY,EAAGthkB,EAAER,EAAEQ,GACrBD,EAAEuhkB,YAAY,EAAGthkB,EAAE2B,EAAE2B,GACrBvD,EAAEuhkB,YAAY,EAAGthkB,EAAER,EAAE8D,GACdvD,CACR,CAGA,SAASgqlB,GAAWrzY,GACnB,IAAIkzY,EAAUlzY,EAAKgrX,WAAW,GAC1BmoB,EAASnzY,EAAKgrX,WAAW;AAG7B,MAAO,CAAC//jB,EAAE,CAAC2B,EAFIozM,EAAKgrX,WAAW,GAER1hkB,EAAE4plB,GAAUpqlB,EAAE,CAAC8D,EADxBozM,EAAKgrX,WAAW,GACkB1hkB,EAAE6plB,GACnD,CAGA,IAAIG,GAAYD;AAGhB,SAASE,GAAYvzY,GACpBA,EAAKx6M,GAAK;AACV,IAAI4tJ,EAAK4sD,EAAKgrX,WAAW,GACrBvjhB,EAAKu4J,EAAKgrX,WAAW,GACrB3ub,EAAQ2jE,EAAKgrX,WAAW;AAE5B,OADAhrX,EAAKx6M,GAAG,GACD,CAACiiD,EAAI2rG,EAAI/W,EACjB,CAqBA,SAASm3c,GAAaxzY,GAAQA,EAAKx6M,GAAK,EAAGw6M,EAAKx6M,GAAKw6M,EAAKgrX,WAAW,EAAI,CACzE,IAAIyoB,GAAQ,CACJ,EAAaD,GACb,EAAaA,GACb,EAAaA,GACb,EAAaA,GACb,EAdR,SAAoBxzY,GAInB,OAFAA,EAAKx6M,GAAK,EACVw6M,EAAK6oF,GAAK7oF,EAAKgrX,WAAW,GAFhB,CAAC,CAIZ,EAUQ,EAAawoB,GACb,EAAaA,GACb,GAAaA,GACb,GAAaA,GACb,GAAaA,GACb,GA9BR,SAAqBxzY,GACpB,IAAIwhD,EAAM,CAAC;AAKX,OAJAxhD,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK,GACVg8P,EAAIkyV,YAAc1zY,EAAKgrX,WAAW,GAClChrX,EAAKx6M,GAAK,EACHg8P,CACR,EAwBQ,GAAagyV,GACb,GAAaA,GACb,GAAaA,GACb,GAAaA,GACb,GAAaA,GACb,GAAaA,GACb,GAAaA,GACb,GAAaD;AAmBrB,SAASI,GAAU3zY,EAAMh3M,GACxB,IAAIK,EAAI,CAACuqlB,QAAQ,EAAG9liB,GAAG;AAGvB,OAFAzkD,EAAEuqlB,QAAU5zY,EAAKgrX,WAAW,IAAIhikB,GAAU,IAC7B,IAAKK,EAAEykD,GAAKkyJ,EAAKgrX,WAAW,GAAIhrX,EAAKx6M,GAAK,GAChD6D,EAAEuqlB,SACR,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,IACL,KAAK,IACL,KAAK,EAAQ,KAAK,EACjB;AACD,QAAS,GAAG5qlB,EAAS,EAAG,MAAM,IAAIG,MAAM,uBAAyBE,EAAEuqlB,SAIpE,OADA5zY,EAAKgrX,WAAWhikB,GACTK,CACR,CACA,SAASwqlB,GAAUC,EAAiBvslB,EAAc8B,GACjD,IAAIG,EAAI,KAAQ8T,EAAI;AACpB,OAAOjU,EAAE8+kB,UACR,IAAK,QAKL,IAAK,MAAO;AAJZ,IAAK,QAAS3+kB,EAAI,KAAQ8T,EAAI;AAAG;AACjC,IAAK,QAAS9T,EAAI,EAAQ8T,EAAI;AAAG;AACjC,IAAK,QAAS9T,EAAI,EAAQ8T,EAAI;AAAG;AACjC,IAAK,QAAS9T,EAAI,EAAQ8T,EAAI;AAAG;AAEjC,QAAS,MAAM,IAAInU,MAAM,4BAE1B,IAAIq4P,EAAMysU,GAAQ3wjB;AAWlB,OAVAkkP,EAAIopU,YAAY,EAAGphkB,GACnBg4P,EAAIopU,YAAY,EAAGrjkB,GAChB+V,EAAI,GAAGkkP,EAAIopU,YAAY,EAAG,OAC1BttjB,EAAI,GAAGkkP,EAAIopU,YAAY,EAAG,MAC1BttjB,EAAI,IACNkkP,EAAIopU,YAAY,EAAG,OACnBppU,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,MACnBppU,EAAIopU,YAAY,EAAG,IAEbppU,CACR,CAoDA,SAASuyV,GAAkBr+jB,EAAMgsB,GAChC,IAAIpkC,GAAMokC,GAAQA,EAAKsgiB,MAAQ,EAAI,EAAI,EACnC34kB,EAAI4kkB,GAAQ,EAAI3wjB,EAAIoY,EAAK7kB,KAAK7H;AAClCK,EAAEuhkB,YAAY,EAAGl1iB,EAAKqtB,KACtB15C,EAAEuhkB,YAAY,EAAGl1iB,EAAKs+jB,IAAM,GAC5B3qlB,EAAEuhkB,YAAY,EAAGl1iB,EAAKo4B,IACtBzkD,EAAEuhkB,YAAY,EAAGl1iB,EAAK7kB,KAAK7H,QACxB04C,EAAKsgiB,MAAQ,GAAG34kB,EAAEuhkB,YAAY,EAAG,GACpCvhkB,EAAEuhkB,YAAYttjB,EAAIoY,EAAK7kB,KAAK7H,OAAQ0sB,EAAK7kB,KAAM6wC,EAAKsgiB,KAAO,EAAI,OAAS;AACxE,IAAIxgV,EAAMn4P,EAAER,MAAM,EAAGQ,EAAE7D;AACV,OAAbg8P,EAAIh8P,EAAI6D,EAAE7D,EAAUg8P,CACrB,CAuEA,SAASyyV,GAAuBj0Y,EAAMh3M,EAAQ04C,GAC7C,IAAI/sC,EAAI;AACH+sC,GAAqB,GAAbA,EAAKsgiB,OACjBrtkB,EAAIqrM,EAAKgrX,WAAW;AAErB,IAAIkpB,EAAQl0Y,EAAKgrX,WAAW;AAK5B,OAJItphB,GAAqB,GAAbA,EAAKsgiB,OAChBrtkB,EAAI,GAAKu/kB,GAAS,IAAKA,GAAS,OAG1B,CADE,CAACC,SAAW,EAAFx/kB,EAAIy/kB,QAAU,EAAFz/kB,IAAM,EAAE0/kB,OAAS,EAAF1/kB,IAAM,EAAE2/kB,OAAS,EAAF3/kB,IAAM,GACvDu/kB,EACb,CAiHA,SAASK,GAAaxrlB,EAAc4L,EAAc+sC,EAAMr4C,GACvD,IAAImrlB,EAAM9yiB,GAAsB,GAAbA,EAAKsgiB;AACpB34kB,IAAGA,EAAI4kkB,GAAQumB,EAAM,EAAI7/kB,EAAE3L,OAAW,EAAI,EAAI2L,EAAE3L,SACpDK,EAAEuhkB,YAAY,EAAG7hkB,GACjBM,EAAEuhkB,YAAa4pB,EAAK,EAAI,EAAI7/kB,EAAE3L,QAC1BwrlB,GAAInrlB,EAAEuhkB,YAAY,EAAG,GACzBvhkB,EAAEuhkB,aAAa4pB,EAAK,EAAI,GAAK7/kB,EAAE3L,OAAQ2L,EAAI6/kB,EAAK,OAAS;AACzD,IAAIhzV,EAAOn4P,EAAEL,OAASK,EAAE7D,EAAK6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D;AAE/C,OADY,MAATm4P,EAAIh8P,IAAWg8P,EAAIh8P,EAAIg8P,EAAIx4P,QACvBw4P,CACR,CACA,IAAIizV,GAAoBvC;AAGxB,SAASwC,GAAiB10Y,EAAMh3M,EAAQ04C,GACvC,IAAI95B,EAAMo4L,EAAKx6M,EAAIwD,EACfsU,EAAiB,GAAbokC,EAAKsgiB,MAActgiB,EAAKsgiB,KAAW,EAAJ,EACnC14kB,EAAI02M,EAAKgrX,WAAW1tjB,GAAI0D,EAAIg/L,EAAKgrX,WAAW1tjB,GAC5C1Q,EAAIozM,EAAKgrX,WAAW,GAAIlnjB,EAAIk8L,EAAKgrX,WAAW;AAEhD,OADAhrX,EAAKx6M,EAAIoiB,EACF,CAAC3c,EAAG,CAAC3B,IAAKsD,EAAEA,GAAI9D,EAAG,CAACQ,EAAE0X,EAAGpU,EAAEkX,GACnC,CA+FA,SAAS6wkB,GAASj/jB,EAAMk/jB,EAAOlziB,EAAMr4C,GACpC,IAAImrlB,EAAM9yiB,GAAsB,GAAbA,EAAKsgiB;AACpB34kB,IAAGA,EAAI4kkB,GAAQumB,EAAK,GAAK,KAC7BnrlB,EAAEuhkB,YAAY,EAAG,GACdl1iB,EAAKtf,OACP/M,EAAEuhkB,YAAY,EAAIl1iB,EAAKwtjB,UAAU,GACjC75kB,EAAEuhkB,YAAY,EAAG,SAEjBvhkB,EAAEuhkB,YAAY,EAAIl1iB,EAAKwtjB,UAAU,GACjC75kB,EAAEuhkB,YAAY,EAAIgqB,GAAO;AAE1B,IAAIjglB,EAAI;AAMR,OALG+gB,EAAKwtjB,SAAW,GAAKsR,IAAI7/kB,GAAK,MACjCtL,EAAEuhkB,YAAY,EAAGj2jB,GACjBtL,EAAEuhkB,YAAY,EAAG,GACb4pB,GAAInrlB,EAAEuhkB,YAAY,EAAG,GACzBvhkB,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAoBA,SAASwrlB,GAAc70Y,EAAMh3M,EAAQ04C,GACpC,IAAI8rU,EAAOolO,GAAc5yY;AACT,GAAbt+J,EAAKsgiB,MAAuB,GAAVh5kB,KAAeg3M,EAAKx6M;AACzC,IAAIo2C,EAt0BL,SAAmBokK,GAClB,IAAIjmM,EAAIimM,EAAKgrX,WAAW;AACxB,OAAa,IADmBhrX,EAAKgrX,WAAW,GAC5BjxjB,EAAU,IAANA,CACzB,CAHA,CAs0BqBimM;AAGpB,OAFAwtK,EAAK5xU,IAAMA,EACX4xU,EAAKjmX,OAAKq0C,QAAgBA,EAAiB,IAAM,IAC1C4xU,CACR,CAuBA,IAAIsnO,GAhmBJ,SAAkC90Y,EAAMh3M,EAAQ04C,GAAQ,OAAkB,IAAX14C,EAAe,GAAKkplB,GAAuBlyY,EAAMh3M,EAAQ04C,EAAO;AAknB/H,SAASqziB,GAAiB/0Y,EAAMh3M,EAAQ04C,GACvC,IACI1rC,EADAqmI,EAAQ2jE,EAAKgrX,WAAW,GAExB3hkB,EAAK,CACR2rlB,SAAkB,EAAR34c,EACV44c,YAAc54c,IAAU,EAAK,EAC7B64c,UAAY74c,IAAU,EAAK,EAC3B84c,KAAO94c,IAAU,EAAK,EACtB+4c,SAAW/4c,IAAU,EAAK,EAC1BwsJ,GAAKxsJ,IAAU,EAAK,KACpBg5c,MAAOh5c,IAAU,GAAK;AAMvB,OAJkB,QAAf36F,EAAK4ziB,QAAkBt/kB,EA7mB3B,SAAwBgqM,EAAMh3M,EAAQ04C,GACrCs+J,EAAKx6M,GAAK,EAAGwD,GAAU;AACvB,IAAIxD,EAAIw6M,EAAKx6M,EAAIwD,EACbuslB,EAAUjE,GAA2BtxY,EAAMh3M,EAAQ04C,GACnD0vE,EAAK4uF,EAAKgrX,WAAW;AAEzB,GAAG55c,KADH5rH,GAAKw6M,EAAKx6M,GACG,MAAM,IAAI2D,MAAM,iCAAmC3D,EAAI,OAAS4rH;AAE7E,OADA4uF,EAAKx6M,GAAK4rH,EACHmke,CACR,CATA,CA6mBiDv1Y,EAAMh3M,EAAO,EAAG04C,IAEhEr4C,EAAE2M,KAAOA,GAAQgqM,EAAKgrX,WAAWhikB,EAAO,GACrB,iBAATgN,IAAmB3M,EAAEmslB,KAAOx/kB,GAC/B3M,CACR,CAGA,IAAIoslB,GAAgB,CACnB,yBACA,kBACA,mBACA,gBACA,iBACA,iBACA,mBACA,qBACA,iBACA,kBACA,sBACA,wBACA,oBACA;AAED,SAASC,GAAU11Y,EAAMh3M,EAAQ04C,GAChC,IAAIzvC,EAAS+tM,EAAKx6M,EAAIwD,EAClBqzI,EAAQ2jE,EAAKgrX,WAAW,GACxBn4Q,EAAQ7yG,EAAKgrX,WAAW,GACxBumB,EAAMvxY,EAAKgrX,WAAW,GACtB2qB,EAAM31Y,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GACnD4T,EAAO,IACPl0iB,GAAQA,EAAKsgiB,MAAQ,KACR,GAAbtgiB,EAAKsgiB,OAAWhiY,EAAKx6M,GAAK,GAC7BowlB,EAAO51Y,EAAKgrX,WAAW,GACP,GAAbtphB,EAAKsgiB,OAAWhiY,EAAKx6M,GAAK,GAC7Bw6M,EAAKx6M,GAAK;AAEX,IAAIqL,EAAOmhlB,GAA2BhyY,EAAMuxY,EAAK7viB;AACtC,GAAR26F,IAAcxrI,EAAO4klB,GAAc5klB,EAAK4pC,WAAW;AACtD,IAAIo7iB,EAAS5jlB,EAAS+tM,EAAKx6M;AAAMk8C,GAAqB,GAAbA,EAAKsgiB,QAAa6T;AAE3D,IAAIC,EAAQ7jlB,GAAU+tM,EAAKx6M,GAAa,IAARmwlB,GAAeE,EAAS,EAu7LzD,SAAiC71Y,EAAMh3M,EAAQ04C,EAAMi0iB,GACpD,IAEII,EAFA9jlB,EAAS+tM,EAAKx6M,EAAIwD,EAClB8slB,EAAOE,GAAWh2Y,EAAM21Y,EAAKj0iB;AAGjC,OADGzvC,IAAW+tM,EAAKx6M,IAAGuwlB,EAAOE,GAAej2Y,EAAM/tM,EAAS+tM,EAAKx6M,EAAGswlB,EAAMp0iB,IAClE,CAACo0iB,EAAMC,EACf,CANA,CAv7L4F/1Y,EAAM61Y,EAAQn0iB,EAAMi0iB,GAAjD;AAE9D,MAAO,CACN9iS,MAAOA,EACP2iS,KAAM3klB,EACN+klB,KAAMA,EACNE,KAAMA,EAER,CAGA,SAASI,GAAkBl2Y,EAAMh3M,EAAQ04C,GACxC,GAAGA,EAAKsgiB,KAAO,EAAG,OAOnB,SAAgChiY,EAAMh3M,EAAQ04C,GACtB,GAApBs+J,EAAKA,EAAKx6M,EAAI,IAAYw6M,EAAKA,EAAKx6M;AACvC,IAAI6D,EAAIiolB,GAA2BtxY,EAAMh3M,EAAQ04C;AACjD,OAA0B,GAAnBr4C,EAAEoxC,WAAW,GAAapxC,EAAER,MAAM,GAAKQ,CAC/C,CAJA,CAPiD22M,EAAMh3M,EAAQ04C;AAE9D,IADA,IAAIr4C,EAAI,GAAI4I,EAAS+tM,EAAKx6M,EAAIwD,EAAQy2B,EAAMugL,EAAKgrX,WAAWtphB,EAAKsgiB,KAAO,EAAI,EAAI,GAChE,IAAVvijB,KAAap2B,EAAEgH,KAAK0ilB,GAAU/yY,EAAMt+J,EAAKsgiB,KAAmBtgiB;AAElE,GAAGs+J,EAAKx6M,GAAKyM,EAAQ,MAAM,IAAI9I,MAAM,oBAAsB62M,EAAKx6M,EAAI,OAASyM;AAC7E,OAAO5I,CACR,CA2BA,SAAS8slB,GAAYn2Y,EAAMh3M,EAAQ04C,GAClC,IAAIgmH,EAAM4rb,GAAUtzY,EAAM;AAE1B,OAAOt+J,EAAKsgiB,MACX,KAAK,EAAGhiY,EAAKx6M,IAAMwD,GAAU;AAAG;AAChC,KAAK,EAAG,KAAK,EAAGg3M,EAAKx6M,GAAK,EAAGwD,GAAU;AAAG;AAC1C,QAASg3M,EAAKx6M,GAAK,EAAGwD,GAAU,GAEjC,MAAO,CAAC0+J,EAAK0ub,GAAyBp2Y,EAAMh3M,EAAQ04C,GACrD,CAgDA,IAAI20iB,GAAgB,CACpB,EAAM,SAASr2Y,EAAMh3M,GACpB,IAAIwoc,EAAMxxP,EAAKx6M,EAAIwD;AACnBg3M,EAAKx6M,GAAK;AACV,IAAIqjS,EAAK7oF,EAAKgrX,WAAW;AACzBhrX,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK;AACV,IAAI8wlB,EAAUt2Y,EAAKgrX,WAAW;AAG9B,OAFAhrX,EAAKx6M,GAAK8wlB,EACVt2Y,EAAKx6M,EAAIgsc,EACF,CAAE2V,IAAIt+K,EACd;AAuEA,SAAS0tT,GAAYhE,GACpB,IAAIzlgB,EAAImhf,GAAQ,IACZvma,EAAMi7a,GAAY4P,EAAG;AACzBzlgB,EAAE89e,YAAY,EAAGlja,EAAIp+J,GAAIwjF,EAAE89e,YAAY,EAAGlja,EAAIp+J,GAC9CwjF,EAAE89e,YAAY,EAAGlja,EAAI96J,GAAIkgF,EAAE89e,YAAY,EAAGlja,EAAI96J;AAE9C,IADA,IAAI8gkB,EAAQ,kDAAkDhtjB,MAAM,KAC5D3X,EAAI,EAAGA,EAAI,KAAMA,EAAG+jF,EAAE89e,YAAY,EAAGtzjB,SAASo2jB,EAAM3kkB,GAAI;AAChE,OAAOs6jB,EAAQ,CAACv2e,EAAGwlgB,GAAgBC,EAAG,KACvC,CAWA,SAASiE,GAAmBjE,GAC3B,IAAIx7iB,EAAKw7iB,EAAG,GAAG73I,QACX5tX,EAAImhf,GAAQ,GAAK,GAAKl3hB,EAAG/tC,OAAS;AACtC8jF,EAAE89e,YAAY,EAAG;AACjB,IAAIlja,EAAMi7a,GAAY4P,EAAG;AACzBzlgB,EAAE89e,YAAY,EAAGlja,EAAIp+J,GAAIwjF,EAAE89e,YAAY,EAAGlja,EAAIp+J,GAC9CwjF,EAAE89e,YAAY,EAAGlja,EAAI96J,GAAIkgF,EAAE89e,YAAY,EAAGlja,EAAI96J;AAC9C,IAAI,IAAI7D,EAAI,EAAGA,EAAIguC,EAAG/tC,SAAUD,EAAG+jF,EAAE89e,YAAY,EAAG7zhB,EAAG0D,WAAW1xC;AAElE,OADA+jF,EAAE89e,YAAY,EAAG,GACV99e,CACR,CA2CA,SAAS2pgB,GAAcz2Y,EAAMh3M,EAAQ04C,GACpC,IAAIA,EAAKg1iB,WAAY,OAAO1V,GAAUhhY,EAAMh3M;AAC5C,IAAIsU,EAAIokC,GAAQA,EAAKsgiB,MAAQ,GAAK,EAAI,EAClC2U,EAAW32Y,EAAKgrX,WAAW1tjB,GAC3Bs5kB,EAAU52Y,EAAKgrX,WAAW1tjB,GAC1Bu5kB,EAAQ72Y,EAAKgrX,WAAW1tjB,GACxBu1kB,EAAO7yY,EAAKgrX,WAAW1tjB,GACvB++H,EAAQ2jE,EAAKgrX,WAAW;AACpB,GAAL1tjB,IAAQ0iM,EAAKx6M,GAAK;AACrB,IAAI6D,EAAK,CAAC4B,EAAE0rlB,EAAU7tlB,EAAE8tlB,EAASt5kB,EAAEu5kB,EAAOhE,KAAKA,EAAMx2c,MAAMA;AAE3D,OADG36F,EAAKsgiB,MAAQ,IAAMtgiB,EAAKsgiB,QAAM34kB,EAAEwzW,MAASxgO,GAAS,EAAK,GACnDhzI,CACR,CA2CA,IAAIytlB,GAAclE,GACdmE,GAAY3F,GACZ4F,GAAe/E,GAiFfgF,GAAyB,CAAC,EAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,KACpEC,GAAoB,WACxB,IAAIC,EAAmB,CAEf,EAAe,IAAsB,EAAe,IACpD,EAAc,KAAuB,EAAa,IAClD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAc,KACnD,IAAc,KAAuB,IAAa,MAClD,IAAa,MAAwB,IAAa,MAClD,IAAc,KAAuB,IAAc,KACnD,IAAc,KAAuB,IAAc,KAGnD,EAAa,MAAwB,EAAe,IACpD,EAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAe,IAAsB,GAAe,IACpD,GAAc,KAAuB,GAAc,KACnD,GAAc,KAAuB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAc,KAEnD,IAAa,OAEjBC,EAAkBve,GAAM,CACpB,EAAe,IAAsB,EAAe,IACpD,EAAc,KAAuB,EAAa,IAClD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAe,IACpD,IAAe,IAAsB,IAAc,KACnD,IAAc,KAAuB,IAAa,MAClD,IAAa,MAAwB,IAAa,MAClD,IAAc,KAAuB,IAAc,KACnD,IAAc,KAAuB,IAAc,KACnD,EAAa;AAsKrB,SAASwe,EAAa30B,EAAKhhhB,GAC1B,IAAIr4C,EAAIq4C,GAAQ,CAAC;AACbr4C,EAAEw+jB,SAAQx+jB,EAAEw+jB,OAAS;AACzB,IAAIt6R,EAAK22S,GAtKV,SAAoBxhB,EAAKhhhB,GACxB,IAAI8/M,EAAc,GACdp5P,EAAew6jB,EAAY;AAC/B,OAAOlhhB,EAAKn1C,MACX,IAAK,SAAUnE,EAAI46jB,EAAIX,EAAcK;AAAO;AAC5C,IAAK,SAAUt6jB,EAAI46jB,EAAIN;AAAM;AAC7B,IAAK,SACL,IAAK,QAASt6jB,EAAIs6jB,EAEnBqI,GAAU3ikB,EAAG;AAGb,IAAI2kD,EAAK3kD,EAAE4ikB,WAAW,GAClBnkR,KAAe,IAAL95P,GACVuqiB,KAAaC;AACjB,OAAOxqiB,GACN,KAAK,EACL,KAAK,EAKL,KAAK,IACL,KAAK,IAGL,KAAK,IAAM;AARX,KAAK,GACL,KAAK,GAAMuqiB,KAAYzwS;AAAa;AAKpC,KAAK,IAAM0wS;AAAW;AAItB,QAAS,MAAM,IAAIpulB,MAAM,4BAA8B4jD,EAAGj0C,SAAS,KAGpE,IAAI0+kB,EAAO,EAAGC,EAAO;AACZ,GAAN1qiB,IAAYyqiB,EAAOpvlB,EAAE4ikB,WAAW,IACnC5ikB,EAAE5C,GAAK,EACE,GAANunD,IAAYyqiB,EAAOpvlB,EAAE4ikB,WAAW,IAChCwsB,EAAO,UAASA,EAAO,KAEjB,GAANzqiB,IAAY0qiB,EAAOrvlB,EAAE4ikB,WAAW;AACnC,IAAI0sB,EAAOtvlB,EAAE4ikB,WAAW,GAEL2sB,EAAaj2iB,EAAKk2iB,UAAY;AACxC,GAAN7qiB,IACF3kD,EAAE5C,GAAG,GACO4C,EAAE4ikB,WAAW,GAIX,IAAX5ikB,EAAEA,EAAE5C,KAAUmylB,EAAaR,EAAiB/ulB,EAAEA,EAAE5C,KACnD4C,EAAE5C,GAAG,EAEL4C,EAAE5C,GAAG,GAEH+xlB,IAAInvlB,EAAE5C,GAAK;AAMd,IAHA,IAAIyrY,EAA6B,GAAIpwD,EAAsB,CAAC,EACxDg3Q,EAAOrslB,KAAK8b,IAAIlf,EAAEY,OAAe,GAAN+jD,EAAa,IAAS0qiB,EAAO,IAAMH,EAAM,IAAM,IAC1Ela,EAAKma,EAAK,GAAK,GACbnvlB,EAAE5C,EAAIqylB,GAAkB,IAAVzvlB,EAAEA,EAAE5C,IAWvB,QAVAq7U,EAAS,CAAC,GACJhwU,KAAO4wjB,EAASjrR,MAAM71R,OAAOg3kB,EAAYvvlB,EAAES,MAAMT,EAAE5C,EAAG4C,EAAE5C,EAAE43kB,IAAKl0jB,QAAQ,mBAAmB,IAChG9gB,EAAE5C,GAAK43kB,EACPv8P,EAAMt0U,KAAO6sC,OAAOiB,aAAajyC,EAAE4ikB,WAAW,IACrC,GAANj+gB,GAAewqiB,IAAI12Q,EAAMp6T,OAASre,EAAE4ikB,WAAW,IAClDnqP,EAAMphT,IAAMr3B,EAAE4ikB,WAAW,GAChB,GAANj+gB,IAAY8zR,EAAMp6T,OAASre,EAAE4ikB,WAAW,IAC3CnqP,EAAM4xL,IAAMrqgB,EAAE4ikB,WAAW,GACtBnqP,EAAMhwU,KAAK7H,QAAQioY,EAAO5gY,KAAKwwU,GACzB,GAAN9zR,IAAY3kD,EAAE5C,GAAK+xlB,EAAK,GAAK,IACzB12Q,EAAMt0U,MACZ,IAAK,IACC+qlB,GAAoB,GAAbz2Q,EAAMphT,MAAaiiB,EAAKu8hB,KAAKjgkB,QAAQ2lE,IAAI,YAAck9P,EAAMhwU,KAAO,IAAMgwU,EAAMt0U;AAC5F;AACD,IAAK,IACL,IAAK,IACDm1C,EAAKu8hB,KAAKjgkB,QAAQ2lE,IAAI,YAAck9P,EAAMhwU,KAAO,IAAMgwU,EAAMt0U;AAChE;AACD,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACJ;AACD,QAAS,MAAM,IAAIpD,MAAM,uBAAyB03U,EAAMt0U,MAK1D,GADc,KAAXnE,EAAEA,EAAE5C,KAAa4C,EAAE5C,EAAIiylB,EAAK,GACR,KAApBrvlB,EAAE4ikB,WAAW,GAAa,MAAM,IAAI7hkB,MAAM,4BAA8Bf,EAAE5C,EAAI,IAAM4C,EAAEA,EAAE5C;AAC3F4C,EAAE5C,EAAIiylB;AAGN,IAAIz2kB,EAAI,EAAG8C,EAAI;AAEf,IADA09O,EAAI,GAAK,GACL19O,EAAI,EAAGA,GAAKmtX,EAAOjoY,SAAU8a,EAAG09O,EAAI,GAAG19O,GAAKmtX,EAAOntX,GAAGjT;AAC1D,KAAM2mlB,KAAS,GACd,GAAc,KAAXpvlB,EAAEA,EAAE5C,GAOP,MAFE4C,EAAE5C,EACJg8P,IAAMxgP,GAAK,GAAI8C,EAAI,EACfA,EAAI,EAAGA,GAAKmtX,EAAOjoY,SAAU8a,EAAG,CACnC,IAAIivE,EAAK3qF,EAAES,MAAMT,EAAE5C,EAAG4C,EAAE5C,EAAEyrY,EAAOntX,GAAG2b;AAAMr3B,EAAE5C,GAAGyrY,EAAOntX,GAAG2b,IACzDsriB,GAAUh4e,EAAI;AACd,IAAI9nF,EAAIw2jB,EAASjrR,MAAM71R,OAAOg3kB,EAAY5kgB;AAC1C,OAAOk+S,EAAOntX,GAAGvX,MAChB,IAAK,IAEDtB,EAAE8vG,OAAO/xG,SAAQw4P,EAAIxgP,GAAG8C,GAAK7Y,EAAEie,QAAQ,OAAO;AACjD;AACD,IAAK,IACY,IAAbje,EAAEjC,OAAcw4P,EAAIxgP,GAAG8C,GAAK,IAAIs+B,MAAMn3C,EAAEpC,MAAM,EAAE,IAAKoC,EAAEpC,MAAM,EAAE,GAAG,GAAIoC,EAAEpC,MAAM,EAAE,IAC9E24P,EAAIxgP,GAAG8C,GAAK7Y;AACjB;AACD,IAAK,IAAKu2P,EAAIxgP,GAAG8C,GAAK8M,WAAW3lB,EAAE8vG;AAAS;AAC5C,IAAK,IAAK,IAAK,IAAKymJ,EAAIxgP,GAAG8C,GAAKyzkB,EAA8B,WAAzBxkgB,EAAGi4e,YAAY,EAAG,KAAoBj4e,EAAGi4e,WAAW,EAAG;AAAM;AAClG,IAAK,IAAK,OAAO//jB,EAAE8vG,OAAOtuG,eACzB,IAAK,IAAK,IAAK,IAAK+0P,EAAIxgP,GAAG8C;AAAW;AACtC,IAAK,IAAK,IAAK,IAAK09O,EAAIxgP,GAAG8C;AAAY;AACvC,IAAK,GAAI,IAAK,IAAK;AACnB,QAAS,MAAM,IAAI3a,MAAM,uBAAyB8B,EAAI,KACpD;AACH,IAAK,IACJ,IAAI47S,EAAM,MAAM,IAAI19S,MAAM,gCAAkC4jD,EAAGj0C,SAAS;AACxE0oP,EAAIxgP,GAAG8C,GAAK,YAAcyzkB,EAAKjglB,SAASrM,EAAE8vG,OAAQ,IAAKhoB,EAAGi4e,WAAW;AACrE;AACD,IAAK,KACJ//jB,EAAIA,EAAEie,QAAQ,UAAU,IAAI6xF,SAEf,KAAL9vG,IAAUu2P,EAAIxgP,GAAG8C,IAAM7Y,GAAK;AAAG;AACxC,IAAK,IAEJu2P,EAAIxgP,GAAG8C,GAAK,IAAIs+B,KAAK2wC,EAAGi4e,YAAY,EAAG,KAAO;AAC9C;AACD,IAAK,IAAKxpU,EAAIxgP,GAAG8C,GAAK,IAAIs+B,KAAqC,OAA/B2wC,EAAGi4e,WAAW,GAAK,SAAwBj4e,EAAGi4e,WAAW;AAAK;AAC9F,IAAK,IAAKxpU,EAAIxgP,GAAG8C,GAAKivE,EAAGi4e,WAAW,EAAE,KAAK,IAAOj4e,EAAGi4e,WAAW,EAAG,KAAK,IAAKx/jB,KAAKC,IAAI,EAAE;AAAK;AAC7F,IAAK,IAAK+1P,EAAIxgP,GAAG8C,IAAMivE,EAAGi4e,YAAY,EAAG;AAAM;AAC/C,IAAK,IAAK,GAAGssB,GAAwB,GAAjBrmN,EAAOntX,GAAG2b,IAAU,CAAE+hO,EAAIxgP,GAAG8C,GAAKivE,EAAGi4e,WAAW,EAAE;AAAM,KAAO,CAEnF,IAAK,IAAK,IAAK,IAAKj4e,EAAGvtF,GAAKyrY,EAAOntX,GAAG2b;AAAK;AAC3C,IAAK,IACJ,GAAsB,eAAnBwxW,EAAOntX,GAAGjT,KAAuB;AAErC,QAAS,MAAM,IAAI1H,MAAM,6BAA+B8nY,EAAOntX,GAAGvX,MAEpE,MAjDCnE,EAAE5C,GAAGkylB;AAmDP,GAAS,GAAN3qiB,GAAe3kD,EAAE5C,EAAI4C,EAAEY,QAAsB,IAAZZ,EAAEA,EAAE5C,KAAc,MAAM,IAAI2D,MAAM,2BAA6Bf,EAAE5C,EAAE,GAAK,OAAS4C,EAAEY,OAAS,IAAMZ,EAAEA,EAAE5C,EAAE,GAAGsT,SAAS;AAGxJ,OAFG4oC,GAAQA,EAAKo2iB,YAAWt2V,EAAMA,EAAI34P,MAAM,EAAG64C,EAAKo2iB,YACnDp2iB,EAAKw1iB,IAAMjmN,EACJzvI,CACR,CAjKA,CAsKkCkhU,EAAKr5jB,GAAIA;AAM1C,OALAkkS,EAAG,SAAWlkS,EAAE6tlB,IAAI7qkB,IAAI,SAASw0T,GAAS,MAAO,CAChDk3Q,IAAKl3Q,EAAMphT,IACXy3jB,IAAKr2Q,EACJ,UACKx3U,EAAE6tlB,IACF3pT,CACR,CAQA,IAAIyqT,EAAQ,CAAEz2jB,EAAK,EAAGzd,EAAK,IAAKzb,EAAK,EAAGm7E,EAAK,EAAG,IAAK,EAAG,GAAI;AAsH3D,MAAO,CACNy0gB,YA7HF,SAAyBv1B,EAAKhhhB,GAC7B,IAAM,OAAOyhiB,GAAkBkU,EAAa30B,EAAKhhhB,GAAOA,EAAO,CAC/D,MAAM54C,GAAK,GAAG44C,GAAQA,EAAKu8hB,IAAK,MAAMn1kB,CAAG,CACzC,MAAQ,CAACu6kB,WAAW,GAAGC,OAAO,CAAC,EAChC,EA0HE4U,SAAUb,EACVc,WAxHF,SAAsB5qT,EAAkB7rP,GACvC,IAAIr4C,EAAIq4C,GAAQ,CAAC;AAEjB,IADIr4C,EAAEuulB,UAAY,GAAGv2B,GAAQh4jB,EAAEuulB,UAClB,UAAVvulB,EAAEkD,KAAkB,MAAM,IAAIpD,MAAM;AACvC,IAAIk9H,EAAKi7c,KACL8W,EAAcC,GAAc9qT,EAAI,CAACxpR,OAAO,EAAGyzL,OAAUwsY,eACrDrqY,EAAUy+Y,EAAI,GAAI1ikB,EAAO0ikB,EAAIvvlB,MAAM,GAAIsjW,EAAO5+D,EAAG,UAAY,GAC7DxkS,EAAI,EAAGqlF,EAAI,EAAGkqgB,EAAO,EAAGZ,EAAO;AACnC,IAAI3ulB,EAAI,EAAGA,EAAI4wM,EAAQ3wM,SAAUD,EAChC,KAAKojW,EAAKpjW,IAAI,CAAC,GAAGmulB,KAAK,CAAC,GAAGrmlB,KAAQ8oM,EAAQ5wM,GAAKojW,EAAKpjW,GAAGmulB,IAAIrmlB,OAAQynlB;KACpE,GAAiB,MAAd3+Y,EAAQ5wM,GAAX,CAGA,KAFEuvlB,EACuB,iBAAf3+Y,EAAQ5wM,KAAiB4wM,EAAQ5wM,GAAK4wM,EAAQ5wM,GAAG+P,SAAS,KAC3C,iBAAf6gM,EAAQ5wM,GAAiB,MAAM,IAAII,MAAM,2BAA6BwwM,EAAQ5wM,GAAK,YAAe4wM,EAAQ5wM,GAAM;AAC1H,GAAG4wM,EAAQrnM,QAAQqnM,EAAQ5wM,MAAQA,EAAG,IAAIqlF,EAAE,EAAGA,EAAE,OAAOA,EACvD,IAA6C,GAA1CurH,EAAQrnM,QAAQqnM,EAAQ5wM,GAAK,IAAMqlF,GAAU,CAAEurH,EAAQ5wM,IAAM,IAAMqlF;AAAG,KAAO,CAL1D,CAOxB,IAAIzN,EAAQmigB,GAAkBv1S,EAAG,SAC7BgrT,EAA6B,GAC7BC,EAA8B,GAC9BC,EAAgC;AACpC,IAAI1vlB,EAAI,EAAGA,GAAK43E,EAAM73E,EAAE8D,EAAI+zE,EAAM11E,EAAE2B,IAAK7D,EAAG,CAC3C,IAAI2vlB,EAAQ,GAAIC,EAAS,GAAIn1B,EAAS,EAClCrpT,EAAqB;AACzB,IAAI/rL,EAAE,EAAGA,EAAI14D,EAAK1sB,SAAUolF,EACV,MAAd14D,EAAK04D,GAAGrlF,IAAYoxQ,EAAI9pQ,KAAKqlB,EAAK04D,GAAGrlF;AAEzC,GAAiB,GAAdoxQ,EAAInxQ,QAA6B,MAAd2wM,EAAQ5wM,GAA9B,CACA,IAAIqlF,EAAI,EAAGA,EAAI+rL,EAAInxQ,SAAUolF,EAAG,CAC/B,cAAc+rL,EAAI/rL,IAEjB,IAAK,SAAUuqgB,EAAS;AAAK;AAC7B,IAAK,SAGL,QAASA,EAAS;AAAA;AAFlB,IAAK,UAAWA,EAAS;AAAK;AAC9B,IAAK,SAAUA,EAASx+U,EAAI/rL,aAAchsC,KAAO,IAAM,IAGxDohhB,EAASh4jB,KAAK+b,IAAIi8iB,EAAQpqhB,OAAO+gO,EAAI/rL,IAAIplF,QACzC0vlB,EAAQA,GAASA,GAASC,EAAS,IAAMA,CAE1C,CACGn1B,EAAS,MAAKA,EAAS,KAGb,MAFbm1B,IAAWxsP,EAAKpjW,IAAI,CAAC,GAAGmulB,KAAK,CAAC,GAAG3qlB,OAG7B4/V,EAAKpjW,GAAGmulB,IAAIz3jB,IAAM+jiB,IAAQA,EAASr3N,EAAKpjW,GAAGmulB,IAAIz3jB,KAEvC,KAATi5jB,GAA0B,KAAVC,IAClBD,EAAQ,IACRD,EAAY1vlB,GAAKojW,EAAKpjW,GAAGmulB,IAAIzkF,IAC7B+wD,EAASr3N,EAAKpjW,GAAGmulB,IAAIz3jB,KAEtB+4jB,EAAUzvlB,GAAc,KAAT2vlB,GAA0B,KAAVC,EAAgBn1B,EAAUw0B,EAAMU,IAAU,EACzEhB,GAAQc,EAAUzvlB,GAClBwvlB,EAASxvlB,GAAK2vlB,CA3B2D,MAA7BH,EAASxvlB,GAAK,GA4B3D,CAEA,IAAIS,EAAI68H,EAAG3kC,KAAK;AAKhB,IAJAl4F,EAAEohkB,YAAY,EAAG,WACjBphkB,EAAEohkB,YAAY,EAAGl1iB,EAAK1sB,QACtBQ,EAAEohkB,YAAY,EAAG,IAAM,GAAK0tB,GAC5B9ulB,EAAEohkB,YAAY,EAAG8sB,GACb3ulB,EAAE,EAAGA,EAAI,IAAKA,EAAGS,EAAEohkB,YAAY,EAAG;AAGtC,IAFAphkB,EAAEohkB,YAAY,IAAmBwsB,EAA6Bn2B,IAAwB,IAAO,GAEzFl4jB,EAAI,EAAGqlF,EAAI,EAAGrlF,EAAI4wM,EAAQ3wM,SAAUD,EACvC,GAAiB,MAAd4wM,EAAQ5wM,GAAX,CACA,IAAI6vlB,EAAKvyd,EAAG3kC,KAAK,IACb+tT,GAAM91M,EAAQ5wM,GAAGF,OAAO,IAAM,0BAAgDA,MAAM,EAAG;AAC3F+vlB,EAAGhuB,YAAY,EAAGn7K,EAAI,QACtBmpM,EAAGhuB,YAAY,EAAkB,KAAf2tB,EAASxvlB,GAAY,IAAMwvlB,EAASxvlB,GAAI,QAC1D6vlB,EAAGhuB,YAAY,EAAGx8e,GAClBwqgB,EAAGhuB,YAAY,EAAG4tB,EAAUzvlB,IAAMivlB,EAAMO,EAASxvlB,KAAO,GACxD6vlB,EAAGhuB,YAAY,EAAG6tB,EAAY1vlB,IAAM,GACpC6vlB,EAAGhuB,YAAY,EAAG,GAClBguB,EAAGhuB,YAAY,EAAG,GAClBguB,EAAGhuB,YAAY,EAAG,GAClBguB,EAAGhuB,YAAY,EAAG,GAClBguB,EAAGhuB,YAAY,EAAG,GAClBx8e,GAAMoqgB,EAAUzvlB,IAAMivlB,EAAMO,EAASxvlB,KAAO,CAbrB,CAgBxB,IAAI8vlB,EAAKxyd,EAAG3kC,KAAK;AAEjB,IADAm3f,EAAGjuB,YAAY,EAAG,IACd7hkB,EAAE,EAAGA,EAAI,KAAKA,EAAG8vlB,EAAGjuB,YAAY,EAAG;AACvC,IAAI7hkB,EAAE,EAAGA,EAAI2sB,EAAK1sB,SAAUD,EAAG,CAC9B,IAAI+vlB,EAAOzyd,EAAG3kC,KAAKg2f;AAEnB,IADAoB,EAAKluB,YAAY,EAAG,GAChBx8e,EAAE,EAAGA,EAAEurH,EAAQ3wM,SAAUolF,EAC5B,GAAiB,MAAdurH,EAAQvrH,GACX,OAAOmqgB,EAASnqgB,IACf,IAAK,IAAK0qgB,EAAKluB,YAAY,EAAiB,MAAdl1iB,EAAK3sB,GAAGqlF,GAAa,GAAO14D,EAAK3sB,GAAGqlF,GAAK,GAAO;AAAO;AACrF,IAAK,IAAK0qgB,EAAKluB,YAAY,EAAGl1iB,EAAK3sB,GAAGqlF,IAAI,EAAG;AAAM;AACnD,IAAK,IACJ,IAAIssD,EAAK;AAET,IADwB,iBAAdhlH,EAAK3sB,GAAGqlF,KAAgBssD,EAAKhlH,EAAK3sB,GAAGqlF,GAAG9iF,QAAQmtlB,EAAYrqgB,IAAI,IACtEkqgB,EAAK,EAAGA,EAAOE,EAAUpqgB,GAAGssD,EAAG1xI,SAAUsvlB,EAAMQ,EAAKluB,YAAY,EAAG;AACvEkuB,EAAKluB,YAAY,EAAGlwb,EAAI;AACxB;AACD,IAAK,IACAhlH,EAAK3sB,GAAGqlF,IAEX0qgB,EAAKluB,YAAY,GAAI,OAAOl1iB,EAAK3sB,GAAGqlF,GAAG3L,eAAe55E,OAAO,GAAI,QACjEiwlB,EAAKluB,YAAY,GAAI,MAAMl1iB,EAAK3sB,GAAGqlF,GAAG1L,WAAW,IAAI75E,OAAO,GAAI,QAChEiwlB,EAAKluB,YAAY,GAAI,KAAKl1iB,EAAK3sB,GAAGqlF,GAAGzL,WAAW95E,OAAO,GAAI,SAJ5CiwlB,EAAKluB,YAAY,EAAG,WAAY;AAK9C;AACH,IAAK,IACJ,IAAIl7a,EAAKt2G,OAAqB,MAAd1jB,EAAK3sB,GAAGqlF,GAAa14D,EAAK3sB,GAAGqlF,GAAK,IAAIvlF,MAAM,EAAG2vlB,EAAUpqgB;AAEzE,IADA0qgB,EAAKluB,YAAY,EAAGl7a,EAAI,QACpB4oc,EAAK,EAAGA,EAAOE,EAAUpqgB,GAAGshE,EAAG1mJ,SAAUsvlB,EAAMQ,EAAKluB,YAAY,EAAG,IAI3E,CAEA,OADAvkc,EAAG3kC,KAAK,GAAGkpe,YAAY,EAAG,IACnBvkc,EAAGz+G,KACX,EAMA,CA3WwB,GA6WpBmxkB,GAAqB,WAExB,IAAIC,EAAgB,CACnBnmgB,GAAG,IAAK7oD,GAAG,IAAKoB,GAAG,IAAK6tjB,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAC3CjwjB,GAAG,IAAKiB,GAAG,IAAKivjB,GAAG,IAAaC,GAAG,IACnChwjB,GAAG,IAAKkB,GAAG,IAAKmB,GAAG,IAAa4tjB,GAAG,IACnC9vjB,GAAG,IAAKoB,GAAG,IAAKmB,GAAG,IAAKc,GAAG,IAAK0sjB,GAAG,IACnC3vjB,GAAG,IAAK4vjB,GAAG,IAAKttjB,GAAG,IAAagD,GAAG,IACnCg4F,GAAG,IAAK60Z,GAAG,IAAK/0Z,GAAG,IAAKY,GAAG,IAAK2b,GAAG,IAAKtZ,GAAG,IAC3CljH,GAAG,IAAK6pH,GAAG,IAAK3qH,GAAG,IAAasoC,GAAG,IACnCkriB,GAAG,IAAKnlE,GAAG,IAAKolE,GAAG,IAAarlE,GAAG,IACnC1lY,GAAG,IAAKiyY,GAAG,IAAKjB,GAAG,IAAK/wY,GAAG,IAAK+xY,GAAG,IACnCg5D,GAAG,IAAK58E,GAAG,IAAK68E,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAK92iB,EAAE,IAAMx/B,EAAE,IAAMla,EAAE,IAAM6kF,EAAE,IAC1C4rgB,GAAG,IAAKh3T,GAAG,IAAKi3T,GAAG,IACnBn0lB,EAAE,IAAM8G,EAAE,IAAMoU,EAAE,IAAM,KAAK,IACtB,EAAS,IAAe,EAAS,IAAa,EAAS,IACvD,EAAS,IAAe,EAAS,IAAa,EAAS,IACvD,EAAS,IAAQq5E,EAAE,IAAMl2E,EAAE,IAAMT,EAAE,IAAM3a,EAAE,IAAMvD,EAAE,IAAMyF,EAAE,IAAMgP,EAAE,IAC1E,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAC3D,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,KAEvDiglB,EAAkB,IAAInhjB,OAAO,MAAaoI,GAAK63iB,GAAcz4kB,KAAK,KAAK2I,QAAQ,SAAU,SAASA,QAAQ,YAAY,QAAU,QAAS,MACzIixkB,EAAe,SAASlilB,EAAGo7hB,GAAK,IAAIhqiB,EAAI2vlB,EAAa3lD;AAAK,MAAmB,iBAALhqiB,EAAgBu4jB,EAASv4jB,GAAKA,CAAG,EACzG+wlB,EAAmB,SAASj0B,EAAI9yB,EAAI4N,GAAM,IAAIo5C,EAAUhnD,EAAG54f,WAAW,GAAK,IAAO,EAAMwmgB,EAAGxmgB,WAAW,GAAK;AAAO,OAAgB,IAAT4/iB,EAAcl0B,EAAKvE,EAASy4B,EAAQ;AAYjK,SAASC,EAAgB5zjB,EAAgBgb,GACxC,IAIc0sC,EAJVmsgB,EAAU7zjB,EAAIhmB,MAAM,WAAYM,GAAK,EAAG8C,GAAK,EAAGijjB,EAAK,EAAGyzB,EAAK,EAAGvwS,EAAc,GAC9Ez6P,EAA4B,GAC5BiriB,EAAmC,KACnCC,EAAM,CAAC,EAAGC,EAA6B,GAAIC,EAA6B,GAAItxT,EAAuB,GACnGuxT,EAAO;AAEX,KADIn5iB,EAAKk2iB,UAAY,GAAGv2B,GAAQ3/gB,EAAKk2iB,UAC9B7wB,IAAOwzB,EAAQvxlB,SAAU+9jB,EAAI,CACnC8zB,EAAO;AACP,IAEkBj/iB,EAFdk/iB,EAAKP,EAAQxzB,GAAIhsd,OAAO7xF,QAAQ,kCAAmCkxkB,GAAkBlxkB,QAAQgxkB,EAAiBC,GAC9G3ra,EAAOssa,EAAK5xkB,QAAQ,MAAO,MAAUxI,MAAM,KAAK2L,IAAI,SAAS5c,GAAK,OAAOA,EAAEyZ,QAAQ,UAAW,IAAM,GACpGk4jB,EAAG5yZ,EAAO;AACd,GAAGssa,EAAK9xlB,OAAS,EAAG,OAAOo4kB,GAC3B,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAAK;AACV,IAAK,IACsB,KAAvB5yZ,EAAO,GAAGhiL,OAAO,IACnBgjD,EAAQn/C,KAAKyqlB,EAAKjylB,MAAM,GAAGqgB,QAAQ,MAAO;AAC3C;AACD,IAAK,IACL,IAAI6xkB,KAAkBC,KAAkBC,KAAkBC,KAAkBxX,GAAM,EAAGC,GAAM;AAC3F,IAAI6W,EAAG,EAAGA,EAAGhsa,EAAOxlL,SAAUwxlB,EAAI,OAAOhsa,EAAOgsa,GAAIhulB,OAAO,IAC1D,IAAK,IA6BL,IAAK,IAAK;AA5BV,IAAK,IAAKsX,EAAIxM,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI,EAAGmylB;AAAiB;AAChE,IAAK,IAEJ,IADAh6kB,EAAI1J,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI,EAAOmylB,IAAUl3kB,EAAI,GACnDsqE,EAAI67N,EAAIjhT,OAAQolF,GAAKptE,IAAKotE,EAAG67N,EAAI77N,GAAK;AAC1C;AACD,IAAK,IAEiB,OADrBxyC,EAAM4yI,EAAOgsa,GAAI3xlB,MAAM,IAChB2D,OAAO,GAAYovC,EAAMA,EAAI/yC,MAAM,EAAE+yC,EAAI5yC,OAAS,GACzC,SAAR4yC,EAAgBA,KACR,UAARA,EAAiBA,KAChB8nC,MAAMs2f,GAASp+hB,IAGb8nC,MAAMw2f,GAAUt+hB,GAAK+mC,aAC/B/mC,EAAM89hB,GAAU99hB,KAHhBA,EAAMo+hB,GAASp+hB,GACS,OAArB6+iB,GAA6BhzB,GAAYgzB,KAAmB7+iB,EAAMw9hB,GAAQx9hB,UAIvD,IAAb6lhB,GAA0C,iBAAP7lhB,GAAuC,WAAlB8F,GAAM,CAAC,GAAGn1C,OAAsBm1C,GAAM,CAAC,GAAGk2iB,WAAUh8iB,EAAM6lhB,EAASjrR,MAAM71R,OAAO+gC,EAAKk2iB,SAAUh8iB,IACjKm/iB;AACA;AACD,IAAK,IACJG;AACA,IAAI1kf,EAAU2kf,GAAS3sa,EAAOgsa,GAAI3xlB,MAAM,GAAI,CAACS,EAAE0X,EAAEpU,EAAEkX;AACnDmmS,EAAIjpS,GAAG8C,GAAK,CAACmmS,EAAIjpS,GAAG8C,GAAI0yF;AACxB;AACD,IAAK,IACJykf,KACAhxS,EAAIjpS,GAAG8C,GAAK,CAACmmS,EAAIjpS,GAAG8C,GAAI;AACxB;AAED,IAAK,IAAK4/jB,EAAKpskB,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI;AAAG;AAChD,IAAK,IAAK86kB,EAAKrskB,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI;AAAG;AAChD,QAAS,GAAG64C,GAAQA,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,mBAAqB2xlB,GAOpE,GALGC,IACC9wS,EAAIjpS,GAAG8C,IAA0B,GAApBmmS,EAAIjpS,GAAG8C,GAAG9a,OAAaihT,EAAIjpS,GAAG8C,GAAG,GAAK83B,EACjDquQ,EAAIjpS,GAAG8C,GAAK83B,EACjB6+iB,EAAmB,MAEjBQ,EAAU,CACZ,GAAGC,EAAU,MAAM,IAAI/xlB,MAAM;AAC7B,IAAIiylB,EAAU1X,GAAM,GAAKz5R,EAAIy5R,GAAIC;AACjC,IAAIyX,IAAYA,EAAQ,GAAI,MAAM,IAAIjylB,MAAM;AAC5C8gT,EAAIjpS,GAAG8C,GAAG,GAAKu3kB,GAAkBD,EAAQ,GAAI,CAAC9xlB,EAAG0X,EAAI0ikB,EAAI92kB,EAAGkX,EAAI6/jB,GACjE,CACA;AACA,IAAK,IACL,IAAI2X,EAAS;AACb,IAAId,EAAG,EAAGA,EAAGhsa,EAAOxlL,SAAUwxlB,EAAI,OAAOhsa,EAAOgsa,GAAIhulB,OAAO,IAC1D,IAAK,IAAKsX,EAAIxM,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI,IAAKyylB;AAAQ;AACzD,IAAK,IAEJ,IADAt6kB,EAAI1J,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI,EAC9BulF,EAAI67N,EAAIjhT,OAAQolF,GAAKptE,IAAKotE,EAAG67N,EAAI77N,GAAK;AAC1C;AACD,IAAK,IAAKysgB,EAAOvjlB,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAM;AAAI;AACrD,IAAK,IACL,IAAK,IAIL,IAAK,IACL,IAAK,IACL,IAAK,IAAK;AALV,IAAK,IACJ4xlB,EAAmBjriB,EAAQl4C,SAASk3K,EAAOgsa,GAAI3xlB,MAAM;AACrD;AAID,IAAK,IAEJ,IADAygS,EAAK96G,EAAOgsa,GAAI3xlB,MAAM,GAAG6X,MAAM,KAC3B0tE,EAAI92E,SAASgyR,EAAG,GAAI,IAAKl7M,GAAK92E,SAASgyR,EAAG,GAAI,MAAOl7M,EACxDysgB,EAAOvjlB,SAASgyR,EAAG,GAAI,IACvBsxT,EAAQxsgB,EAAE,GAAc,IAATysgB,EAAa,CAACt6P,WAAc,CAACw3P,IAAI8C,GAAOU,GAAYX,EAAQxsgB,EAAE;AAC5E;AACH,IAAK,IAEAwsgB,EADJ92kB,EAAIxM,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI,KAClB+xlB,EAAQ92kB,GAAK,CAAC;AAC9B;AACD,IAAK,IAEA62kB,EADJ35kB,EAAI1J,SAASk3K,EAAOgsa,GAAI3xlB,MAAM,IAAI,KAClB8xlB,EAAQ35kB,GAAK,CAAC,GAC3B65kB,EAAO,GAAKF,EAAQ35kB,GAAGw6kB,IAAMX,EAAMF,EAAQ35kB,GAAGy6kB,IAAMC,GAAMb,IAC5C,IAATA,IAAYF,EAAQ35kB,GAAGu/U;AAC/B;AACD,QAAS,GAAG7+S,GAAQA,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,mBAAqB2xlB,GAEjEQ,EAAS,IAAGb,EAAmB;AAAM;AACxC,QAAS,GAAG/4iB,GAAQA,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,mBAAqB2xlB,GAEpE,CAIA,OAHGH,EAAQ3xlB,OAAS,IAAG0xlB,EAAI,SAAWC,GACnCC,EAAQ5xlB,OAAS,IAAG0xlB,EAAI,SAAWE,GACnCl5iB,GAAQA,EAAKo2iB,YAAW7tS,EAAMA,EAAIphT,MAAM,EAAG64C,EAAKo2iB,YAC5C,CAAC7tS,EAAKywS,EACd,CAEA,SAASiB,EAAcvzlB,EAAes5C,GACrC,IAAIk6iB,EA9HL,SAAqBxzlB,EAAes5C,GACnC,OAAOA,EAAKn1C,MACX,IAAK,SAAU,OAAO+tlB,EAAgBj4B,EAAcj6jB,GAAIs5C;AACxD,IAAK,SAAU,OAAO44iB,EAAgBlylB,EAAGs5C;AACzC,IAAK,SAAU,OAAO44iB,EAAgBh4B,GAAWC,OAAOgB,SAASn7jB,GAAKA,EAAE0Q,SAAS,UAAYqqjB,EAAI/6jB,GAAIs5C;AACrG,IAAK,QAAS,OAAO44iB,EAAgB1gB,GAAOxxkB,GAAIs5C,GAEjD,MAAM,IAAIv4C,MAAM,qBAAuBu4C,EAAKn1C,KAC7C,CARA,CA8H0BnE,EAAGs5C,GACxB02iB,EAAMwD,EAAO,GAAIruT,EAAKquT,EAAO,GAC7BvylB,EAAI66kB,GAAakU,EAAK12iB;AAE1B,OADAP,GAAKosP,GAAItqR,QAAQ,SAASkB,GAAK9a,EAAE8a,GAAKopR,EAAGppR,EAAI,GACtC9a,CACR,CAIA,SAASwylB,EAAmBruO,EAAejgF,EAAkBvsR,EAAc8C,GAC1E,IAAIza,EAAI,OAAS2X,EAAE,GAAK,MAAQ8C,EAAE,GAAK;AACvC,OAAO0pW,EAAKjmX,GACX,IAAK,IACJ8B,GAAMmkX,EAAKzzW,GAAG,EACXyzW,EAAK74W,IAAM64W,EAAKxkS,IAAG3/E,GAAK,KAAOyylB,GAAStuO,EAAK74W,EAAG,CAACrL,EAAE0X,EAAGpU,EAAEkX;AAAK;AACjE,IAAK,IAAKza,GAAKmkX,EAAKzzW,EAAI,OAAS;AAAS;AAC1C,IAAK,IAAK1Q,GAAKmkX,EAAKlwW,GAAKkwW,EAAKzzW;AAAG;AACjC,IAAK,IAAK1Q,GAAK,KAAOmkX,EAAKlwW,GAAKkwW,EAAKzzW,GAAK;AAAK;AAC/C,IAAK,IAAK1Q,GAAK,IAAMmkX,EAAKzzW,EAAEmP,QAAQ,KAAK,IAAIA,QAAQ,KAAM,MAAQ,IAEpE,OAAO7f,CACR,CAgDA,OArMA2vlB,EAAa,KAAO,IAqMb,CACNf,YA/DD,SAA0B7vlB,EAAes5C,GAAqB,OAAOyhiB,GAAkBwY,EAAcvzlB,EAAGs5C,GAAOA,EAAO,EAgErHw2iB,SAAUyD,EACVxD,WA1BD,SAAuB5qT,EAAkB7rP,GACxC,IACuC8rU,EAzBZhsH,EAwBvBixT,EAA6B,CAAC,eAAgBppjB,EAAsB,GACpEC,EAAIw5kB,GAAkBv1S,EAAG,SACzBk2S,EAAQnnkB,MAAM1T,QAAQ2kS,GACtB34P,EAAK;AAET69gB,EAASpijB,KAAK,cACdoijB,EAASpijB,KAAK,mBACXk9R,EAAG,WA/BqB/rC,EA+BQixT,EAAUllR,EAAG,SA9B3CtqR,QAAQ,SAASk3P,EAAKpxQ,GAC1B,IAAIgzlB,EAAM,OAAShzlB,EAAE,GAAK,KAAOA,EAAE,GAAK;AACrCoxQ,EAAIomF,OAAQw7P,GAAO,KAEE,iBAAb5hV,EAAI3jQ,OAAsB2jQ,EAAI6hV,MAAK7hV,EAAI6hV,IAAMC,GAAS9hV,EAAI3jQ,QAC/C,iBAAX2jQ,EAAI6hV,KAAoB7hV,EAAI49U,MAAK59U,EAAI49U,IAAMmE,GAAQ/hV,EAAI6hV,MAC5C,iBAAX7hV,EAAI49U,MAAiBgE,GAAOvwlB,KAAKG,MAAMwuQ,EAAI49U,OAErB,KAA9BgE,EAAIvvlB,OAAOuvlB,EAAI/ylB,OAAS,IAAWw4P,EAAInxP,KAAK0rlB,EAChD,IAsBGxuT,EAAG,UAnBP,SAA4B/rC,EAAuBuS,GAClDA,EAAK9wP,QAAQ,SAAS4pP,EAAK9jQ,GAC1B,IAAIgzlB,EAAM;AACPlvV,EAAI0zF,OAAQw7P,GAAO,MACdlvV,EAAI2uV,IAAKO,GAAO,IAAM,GAAKlvV,EAAI2uV,IAAM,IACrC3uV,EAAI4uV,MAAKM,GAAO,IAAM,GAAKI,GAAMtvV,EAAI4uV,KAAO,KACjDM,EAAI/ylB,OAAS,GAAGw4P,EAAInxP,KAAK0rlB,EAAM,KAAOhzlB,EAAE,GAC5C,EACD,CARA,CAmBoC0pjB,EAAUllR,EAAG,UAEhDklR,EAASpijB,KAAK,OAAS/G,EAAER,EAAEQ,EAAIA,EAAE2B,EAAE3B,EAAI,GAAK,MAAQA,EAAER,EAAE8D,EAAItD,EAAE2B,EAAE2B,EAAI,GAAK,KAAO,CAACtD,EAAE2B,EAAE2B,EAAEtD,EAAE2B,EAAE3B,EAAEA,EAAER,EAAE8D,EAAEtD,EAAER,EAAEQ,GAAGiX,KAAK;AAC/G,IAAI,IAAIS,EAAI1X,EAAE2B,EAAE3B,EAAG0X,GAAK1X,EAAER,EAAEQ,IAAK0X,EAChC,IAAI,IAAI8C,EAAIxa,EAAE2B,EAAE2B,EAAGkX,GAAKxa,EAAER,EAAE8D,IAAKkX,EAAG,CACnC,IAAIuX,EAAQ8mjB,GAAY,CAAC74kB,EAAE0X,EAAEpU,EAAEkX,KAC/B0pW,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAIypR,EAAGlyQ,MACX,MAAVmyV,EAAKzzW,GAAeyzW,EAAK74W,IAAK64W,EAAKxkS,IAChD3/E,EAAEgH,KAAKwrlB,EAAmBruO,EAAMjgF,EAAIvsR,EAAG8C,GACxC,CAED,OAAO2uiB,EAASlyiB,KAAKq0B,GAAMA,EAAKvrC,EAAEkX,KAAKq0B,GAAMA,EAAK,IAAMA,CACzD,EAOD,CAnOyB,GAqOrBwnjB,GAAoB,WAUvB,SAASC,EAAe31jB,EAAgBgb,GAEvC,IADA,IAAI64iB,EAAU7zjB,EAAIhmB,MAAM,MAAOM,GAAK,EAAG8C,GAAK,EAAGijjB,EAAK,EAAG98Q,EAAc,GAC9D88Q,IAAOwzB,EAAQvxlB,SAAU+9jB,EAC/B,GAA2B,QAAvBwzB,EAAQxzB,GAAIhsd,QAChB,KAAI/5F,EAAI,GAAR,CAKA,IAJA,IAAIw9iB,EAAW+7B,EAAQxzB,GAAIhsd,OAAOr6F,MAAM,KACpCnU,EAAOiyjB,EAAS,GAAIpzjB,EAAQozjB,EAAS,GAErC9oiB,EAAO6kkB,IADTxzB,IACwB,GACe,GAAjCrxiB,EAAK4P,MAAM,SAAS,IAAIt8B,QAAe+9jB,EAAKwzB,EAAQvxlB,OAAS,GAAG0sB,GAAQ,KAAO6kkB,IAAUxzB;AAEjG,OADArxiB,EAAOA,EAAKqlF,QACHxuG,GACR,KAAM,EACL,GAAa,QAATmpB,EAAgB,CAAEu0R,IAAMjpS,GAAK,GAAI8C,EAAI;AAAG,QAAU,CACjD,GAAa,QAAT4R,EAAgB,MAAM,IAAIvsB,MAAM,oCAAsCusB;AAC/E;AACD,KAAK,EACQ,SAATA,EAAiBu0R,EAAIjpS,GAAG8C,MACV,UAAT4R,EAAkBu0R,EAAIjpS,GAAG8C,MACxB4/D,MAAMs2f,GAAS5ukB,IACfs4E,MAAMw2f,GAAU9ukB,GAAOu3E,WAC3BsnO,EAAIjpS,GAAG8C,GAAK1Y,EAD2B6+S,EAAIjpS,GAAG8C,GAAK41jB,GAAUtukB,GADjC6+S,EAAIjpS,GAAG8C,GAAKk2jB,GAAS5ukB,KAGpD0Y;AAAG;AACN,KAAK,GAEJ4R,GADAA,EAAOA,EAAK7sB,MAAM,EAAE6sB,EAAK1sB,OAAO,IACpBkgB,QAAQ,MAAO,OACNwM,EAAK4P,MAAM,aAAY5P,EAAOA,EAAK7sB,MAAM,GAAI,IAClEohT,EAAIjpS,GAAG8C,KAAgB,KAAT4R,EAAcA,EAAO,KAGrC,GAAa,QAATA,EAAgB,KA1BT,OADyBu0R,IAAMjpS,GAAK,GAAI8C,EAAI;AA8BxD,OADG49B,GAAQA,EAAKo2iB,YAAW7tS,EAAMA,EAAIphT,MAAM,EAAG64C,EAAKo2iB,YAC5C7tS,CACR,CAEA,SAASqyS,EAAa51jB,EAAgBgb,GAAsB,OAAOwiiB,GA7CnE,SAAoB97kB,EAAes5C,GAClC,OAAOA,EAAKn1C,MACX,IAAK,SAAU,OAAO8vlB,EAAeh6B,EAAcj6jB,GAAIs5C;AACvD,IAAK,SAAU,OAAO26iB,EAAej0lB,EAAGs5C;AACxC,IAAK,SAAU,OAAO26iB,EAAe/5B,GAAWC,OAAOgB,SAASn7jB,GAAKA,EAAE0Q,SAAS,UAAYqqjB,EAAI/6jB,GAAIs5C;AACpG,IAAK,QAAS,OAAO26iB,EAAeziB,GAAOxxkB,GAAIs5C,GAEhD,MAAM,IAAIv4C,MAAM,qBAAuBu4C,EAAKn1C,KAC7C,CARA,CA6C2Fm6B,EAAKgb,GAAOA,EAAO,CA2D9G,MAAO,CACNu2iB,YA3DD,SAAyBvxjB,EAAgBgb,GAAqB,OAAOyhiB,GAAkBmZ,EAAa51jB,EAAKgb,GAAOA,EAAO,EA4DtHw2iB,SAAUoE,EACVnE,WA3DgC,WAChC,IAAIoE,EAAa,SAAYlzlB,EAAqBmzlB,EAAkBzilB,EAAc9Q,EAAcgC,GAC/F5B,EAAEgH,KAAKmslB,GACPnzlB,EAAEgH,KAAK0J,EAAI,IAAM9Q,GACjBI,EAAEgH,KAAK,IAAMpF,EAAEie,QAAQ,KAAK,MAAQ,IACrC,EACIuzkB,EAAa,SAAYpzlB,EAAqBkD,EAAiBwN,EAAW9O,GAC7E5B,EAAEgH,KAAK9D,EAAO,IAAMwN,GACpB1Q,EAAEgH,KAAa,GAAR9D,EAAY,IAAMtB,EAAEie,QAAQ,KAAK,MAAQ,IAAMje,EACvD;AACA,OAAO,SAAsBsiS,GAC5B,IACuCigF,EADnCnkX,EAAsB,GACtBC,EAAIw5kB,GAAkBv1S,EAAG,SACzBk2S,EAAQnnkB,MAAM1T,QAAQ2kS;AAC1BgvT,EAAWlzlB,EAAG,QAAS,EAAG,EAAG,WAC7BkzlB,EAAWlzlB,EAAG,UAAW,EAAGC,EAAER,EAAEQ,EAAIA,EAAE2B,EAAE3B,EAAI,EAAE,IAC9CizlB,EAAWlzlB,EAAG,SAAU,EAAGC,EAAER,EAAE8D,EAAItD,EAAE2B,EAAE2B,EAAI,EAAE,IAC7C2vlB,EAAWlzlB,EAAG,OAAQ,EAAG,EAAE;AAC3B,IAAI,IAAI2X,EAAI1X,EAAE2B,EAAE3B,EAAG0X,GAAK1X,EAAER,EAAEQ,IAAK0X,EAAG,CACnCy7kB,EAAWpzlB,GAAI,EAAG,EAAG;AACrB,IAAI,IAAIya,EAAIxa,EAAE2B,EAAE2B,EAAGkX,GAAKxa,EAAER,EAAE8D,IAAKkX,EAAG,CACnC,IAAIuX,EAAQ8mjB,GAAY,CAAC74kB,EAAE0X,EAAEpU,EAAEkX;AAE/B,GADA0pW,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAKypR,EAAGlyQ,GAEnC,OAAOmyV,EAAKjmX,GACX,IAAK,IACJ,IAAIq0C,EAAe4xU,EAAKlwW;AACpBs+B,GAAiB,MAAV4xU,EAAKzzW,IAAW6hC,EAAM4xU,EAAKzzW,GAC5B,MAAP6hC,EACW4xU,EAAK74W,IAAM64W,EAAKxkS,EAAGyzgB,EAAWpzlB,EAAG,EAAG,EAAG,IAAMmkX,EAAK74W,GAC1D8nlB,EAAWpzlB,EAAG,EAAG,EAAG,IAErBozlB,EAAWpzlB,EAAG,EAAGuyC,EAAK;AAC3B;AACD,IAAK,IACJ6gjB,EAAWpzlB,EAAG,EAAGmkX,EAAKzzW,EAAI,EAAI,EAAGyzW,EAAKzzW,EAAI,OAAS;AACnD;AACD,IAAK,IACJ0ilB,EAAWpzlB,EAAG,EAAG,EAAeq6E,MAAM8pS,EAAKzzW,GAAMyzW,EAAKzzW,EAAI,KAAOyzW,EAAKzzW,EAAI;AAC1E;AACD,IAAK,IACAyzW,EAAKlwW,IAAGkwW,EAAKlwW,EAAIqojB,GAAWn4M,EAAK/pW,GAAKygjB,EAAU,IAAK8U,GAAQU,GAAUlsN,EAAKzzW,MACrE0ilB,EAAWpzlB,EAAG,EAAGmkX,EAAKlwW,EAAG;AAEpC;AACD,QAASm/kB,EAAWpzlB,EAAG,EAAG,EAAG,SAtBlBozlB,EAAWpzlB,EAAG,EAAG,EAAG,GAwBjC,CACD,CAKA,OAJAozlB,EAAWpzlB,GAAI,EAAG,EAAG,OAEZA,EAAEkX,KADF,OAIV,CACD,CAvDiC,GA6DlC,CA9GwB,GAgHpBm8kB,GAAoB,WACvB,SAAS/7kB,EAAO1V,GAA2B,OAAOA,EAAEie,QAAQ,OAAO,MAAMA,QAAQ,OAAO,KAAKA,QAAQ,OAAO,KAAO,CACnH,SAAS+tD,EAAOhsE,GAA2B,OAAOA,EAAEie,QAAQ,MAAO,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,MAAM,MAAQ,CA2BrH,SAASyzkB,EAAav0lB,EAAcs5C,GAAsB,OAAOwiiB,GAzBjE,SAAoBx9iB,EAAgBgb,GAEnC,IADA,IAAI64iB,EAAU7zjB,EAAIhmB,MAAM,MAAOM,GAAK,EAAG8C,GAAK,EAAGijjB,EAAK,EAAG98Q,EAAc,GAC9D88Q,IAAOwzB,EAAQvxlB,SAAU+9jB,EAAI,CACnC,IAAIv4Y,EAAS+ra,EAAQxzB,GAAIhsd,OAAOr6F,MAAM;AACtC,GAAiB,SAAd8tK,EAAO,GAAV,CACA,IAAIw+Y,EAAO2V,GAAYn0Z,EAAO;AAC9B,GAAGy7H,EAAIjhT,QAAUgkkB,EAAK1jkB,EAAG,IAAI0X,EAAIipS,EAAIjhT,OAAQgY,GAAKgsjB,EAAK1jkB,IAAK0X,EAAOipS,EAAIjpS,KAAIipS,EAAIjpS,GAAK;AAEpF,OADAA,EAAIgsjB,EAAK1jkB,EAAGwa,EAAIkpjB,EAAKpgkB,EACd4hL,EAAO,IACb,IAAK,IAAKy7H,EAAIjpS,GAAG8C,GAAKnD,EAAO6tK,EAAO;AAAK;AACzC,IAAK,IAAKy7H,EAAIjpS,GAAG8C,IAAM0qK,EAAO;AAAI;AAClC,IAAK,MAAO,IAAIihO,EAAKjhO,EAAOA,EAAOxlL,OAAS;AAE5C,IAAK,MAEE,OADCwlL,EAAO,GACFy7H,EAAIjpS,GAAG8C,MAAM0qK,EAAO,GACtBy7H,EAAIjpS,GAAG8C,IAAM0qK,EAAO,GAEd,OAAbA,EAAO,KAAay7H,EAAIjpS,GAAG8C,GAAK,CAACmmS,EAAIjpS,GAAG8C,GAAI2rY,IAdxB,CAgB1B,CAEA,OADG/tW,GAAQA,EAAKo2iB,YAAW7tS,EAAMA,EAAIphT,MAAM,EAAG64C,EAAKo2iB,YAC5C7tS,CACR,CAvBA,CAyByF7hT,EAAGs5C,GAAOA,EAAO,CAG1G,IAAI39B,EAAS,CACZ,yBACA,oBACA,4EACCxD,KAAK,MAEHq8kB,EAAM,CACT,qCACA,2CACCr8kB,KAAK,MAAQ,KAGX6hS,EAAO,CACV,wCACA,cACC7hS,KAAK,MAEHqH,EAAM;AAEV,SAASi1kB,EAAkBtvT,GAC1B,IAAIA,IAAOA,EAAG,QAAS,MAAO;AAI9B,IAHA,IAAyDigF,EAArDnkX,EAAsB,GAAI2oI,EAAuB,GAAU32G,EAAQ,GACnE/xB,EAAIs5kB,GAAar1S,EAAG,SACpBk2S,EAAQnnkB,MAAM1T,QAAQ2kS,GAClBvsR,EAAI1X,EAAE2B,EAAE3B,EAAG0X,GAAK1X,EAAER,EAAEQ,IAAK0X,EAChC,IAAI,IAAI8C,EAAIxa,EAAE2B,EAAE2B,EAAGkX,GAAKxa,EAAER,EAAE8D,IAAKkX,EAGhC,GAFAuX,EAAQ8mjB,GAAY,CAAC74kB,EAAE0X,EAAEpU,EAAEkX,KAC3B0pW,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAKypR,EAAGlyQ,KACb,MAAVmyV,EAAKzzW,GAAwB,MAAXyzW,EAAKjmX,EAAnC,CAEA,OADAyqI,EAAK,CAAC,OAAQ32G,EAAO,KACdmyV,EAAKjmX,GACX,IAAK,IAAK,IAAK,MAAOyqI,EAAG3hI,KAAK4mE,EAAOu2S,EAAKzzW;AAAK;AAC/C,IAAK,IACAyzW,EAAK74W,GACFq9H,EAAG,GAAG,MAAOA,EAAG,GAAG,IAAKA,EAAG,GAAGw7O,EAAKzzW,EAAGi4H,EAAG,GAAG/6D,EAAOu2S,EAAK74W,KADjDq9H,EAAG,GAAG,IAAKA,EAAG,GAAGw7O,EAAKzzW;AAEpC;AACD,IAAK,IACJi4H,EAAG,GAAK,MAAMw7O,EAAK74W,EAAE,IAAI,KAAMq9H,EAAG,GAAG,KAAMA,EAAG,GAAGw7O,EAAKzzW,EAAE,IAAI,IAC5Di4H,EAAG,GAAK/6D,EAAOu2S,EAAK74W,IAAI64W,EAAKzzW,EAAE,OAAO;AACtC;AACD,IAAK,IACJ,IAAIxS,EAAIyxkB,GAAQU,GAAUlsN,EAAKzzW;AAC/Bi4H,EAAG,GAAK,MAAOA,EAAG,GAAK,KAAMA,EAAG,GAAK,GAAGzqI,EACxCyqI,EAAG,GAAKw7O,EAAKlwW,GAAKqojB,GAAWn4M,EAAK/pW,GAAKygjB,EAAU,IAAK38jB;AACtD;AACD,IAAK,IAAK,SAEX8B,EAAEgH,KAAK2hI,EAAGzxH,KAAK,KAnB+B,CAyBhD,OAHAlX,EAAEgH,KAAK,YAAc/G,EAAER,EAAE8D,EAAEtD,EAAE2B,EAAE2B,EAAE,GAAK,OAAStD,EAAER,EAAEQ,EAAEA,EAAE2B,EAAE3B,EAAE,GAAK,UAChED,EAAEgH,KAAK,2BAEAhH,EAAEkX,KAAK,KACf,CAOA,MAAO,CACN03kB,YAhED,SAAyB7vlB,EAAcs5C,GAAqB,OAAOyhiB,GAAkBwZ,EAAav0lB,EAAGs5C,GAAOA,EAAO,EAiElHw2iB,SAAUyE,EACVxE,WARD,SAAsB5qT,GACrB,MAAO,CAACxpR,EAAQ64kB,EAAKx6S,EAAMw6S,EAAKC,EAAkBtvT,GAAK3lR,GAAKrH,KAAK,KAElE,EAOD,CAlGwB,GAoGpBu8kB,GAAoB,WACvB,SAASC,EAAarnkB,EAAiBu0R,EAAajpS,EAAc8C,EAAcza,GAC5EA,EAAEmuM,IAAKyyG,EAAIjpS,GAAG8C,GAAK4R,EACL,KAATA,IACS,SAATA,EAAiBu0R,EAAIjpS,GAAG8C,MACf,UAAT4R,EAAkBu0R,EAAIjpS,GAAG8C,MACxB4/D,MAAMs2f,GAAStkjB,IACfguD,MAAMw2f,GAAUxkjB,GAAMitD,WAC1BsnO,EAAIjpS,GAAG8C,GAAK4R,EAD0Bu0R,EAAIjpS,GAAG8C,GAAK41jB,GAAUhkjB,GADjCu0R,EAAIjpS,GAAG8C,GAAKk2jB,GAAStkjB,GAGtD,CA6BA,IAAIsnkB,EAAa,CACT,GAAa,IACb,EAAa,KACb,GAAa,IACb,IAAa,KAIjBC,EAAoB,CAChB,GAAa,EACb,EAAa,EACb,GAAa,EACb,IAAa;AAGrB,SAASC,EAAUx2jB,GAElB,IADA,IAAIuwU,EAAM,CAAC,EAAGkmP,KAAev1kB,EAAM,EAAGohR,EAAK,EACtCphR,EAAM8e,EAAI19B,SAAS4e,EACQ,KAA3BohR,EAAGtiQ,EAAI+T,WAAW7yB,IAAeu1kB,GAASA,GACrCA,GAASn0T,KAAMg0T,IAAY/lP,EAAIjuE,IAAOiuE,EAAIjuE,IAAK,GAAG;AAI5D,IAAIphR,KADJohR,EAAK,GACMiuE,EAAUzmV,OAAO9iB,UAAU4N,eAAejI,KAAK4jW,EAAKrvV,IAC9DohR,EAAG34R,KAAK,CAAE4mW,EAAIrvV,GAAMA;AAGrB,IAAMohR,EAAGhgS,OAER,IAAI4e,KADJqvV,EAAMgmP,EACezskB,OAAO9iB,UAAU4N,eAAejI,KAAK4jW,EAAKrvV,IAC9DohR,EAAG34R,KAAK,CAAE4mW,EAAIrvV,GAAMA;AAMtB,OAFAohR,EAAGpuQ,KAAK,SAASrxB,EAAGma,GAAK,OAAOna,EAAE,GAAKma,EAAE,IAAMu5kB,EAAkB1zlB,EAAE,IAAM0zlB,EAAkBv5kB,EAAE,GAAK,GAE3Fs5kB,EAAWh0T,EAAG5uI,MAAM,KAAO,EACnC,CAEA,SAASgjc,EAAiB12jB,EAAgBgb,GACzC,IAAIr4C,EAAIq4C,GAAQ,CAAC,EACbk7iB,EAAM,GAENrvT,EAAmBlkS,EAAEo6kB,MAAS,GAAe,CAAC,EAC9C9igB,EAAmB,CAAC11E,EAAG,CAAC2B,EAAE,EAAGtD,EAAE,GAAIR,EAAG,CAAC8D,EAAE,EAAGtD,EAAE;AAE7B,QAAlBo9B,EAAI79B,MAAM,EAAE,GAEU,IAArB69B,EAAI+T,WAAW,IAAiC,IAArB/T,EAAI+T,WAAW,IAC5CmijB,EAAMl2jB,EAAIl6B,OAAO,GAAIk6B,EAAMA,EAAI79B,MAAM,IAGT,IAArB69B,EAAI+T,WAAW,IAAiC,IAArB/T,EAAI+T,WAAW,IACjDmijB,EAAMl2jB,EAAIl6B,OAAO,GAAIk6B,EAAMA,EAAI79B,MAAM,IAEjC+zlB,EAAMM,EAAUx2jB,EAAI79B,MAAM,EAAE,OAEf+zlB,EAAXvzlB,GAAKA,EAAEg0lB,GAAUh0lB,EAAEg0lB,GAChBH,EAAUx2jB,EAAI79B,MAAM,EAAE;AACjC,IAAImY,EAAI,EAAG8C,EAAI,EAAG/J,EAAI,EAClB4N,EAAQ,EAAGC,EAAM,EAAG01kB,EAAQV,EAAInijB,WAAW,GAAI0ijB,KAAen0T,EAAG,EAAGu0T,EAAQ72jB,EAAI+T,WAAW;AAC/F/T,EAAMA,EAAIxd,QAAQ,SAAU;AAC5B,IAj+NoB2+iB,EACjB1gH,EAg+NCq2I,EAA8B,MAAZn0lB,EAAEw+jB,QA/9NzB1gH,GADIA,EAAuB,iBADN0gH,EAi+NkCx+jB,EAAEw+jB,QAh+NnB3D,EAAU2D,GAAUA,GAChD3+iB,QAAQigjB,GAAa,UACxB,IAAIpwhB,OAAO,IAAMoua,EAAM,MA89NqC;AAClE,SAASs2I,IACR,IAAIxylB,EAAIy7B,EAAI79B,MAAM8e,EAAOC,GACrB4lW,EAAQ,CAAC;AAEb,GADkB,KAAfviX,EAAEuB,OAAO,IAAuC,KAA1BvB,EAAEuB,OAAOvB,EAAEjC,OAAS,KAAWiC,EAAIA,EAAEpC,MAAM,GAAG,GAAGqgB,QAAQ,MAAM,MACxE,IAAbje,EAAEjC,OAAcwkX,EAAKjmX,EAAI;KACvB,GAAG8B,EAAEmuM,IAAOg2K,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAI9O;KACnC,GAAuB,IAApBA,EAAE8vG,OAAO/xG,OAAgBwkX,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAI9O;KACnD,GAAsB,IAAnBA,EAAEwvC,WAAW,GACE,IAAnBxvC,EAAEwvC,WAAW,IAA4C,IAA9BxvC,EAAEwvC,WAAWxvC,EAAEjC,OAAS,IAAcwkX,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAI9O,EAAEpC,MAAM,GAAG,GAAGqgB,QAAQ,MAAM,MAqmH3G,GApmHMje,EAomHhBjC,QApmHsBwkX,EAAKjmX,EAAI,IAAKimX,EAAK74W,EAAI1J,EAAEpC,MAAM,KAChD2kX,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAI9O;KAC1B,GAAQ,QAALA,EAAeuiX,EAAKjmX,EAAI,IAAKimX,EAAKzzW;KACrC,GAAQ,SAAL9O,EAAgBuiX,EAAKjmX,EAAI,IAAKimX,EAAKzzW;KACtC,GAAI2pE,MAAM3pE,EAAIigkB,GAAS/ukB,IACvB,IAAIy4E,MAAMw2f,GAAUjvkB,GAAG03E,YAAc66gB,GAAOvylB,EAAEq6B,MAAMk4jB,GAAM,CAC9DhwO,EAAK/pW,EAAIpa,EAAEw+jB,QAAU3D,EAAU;AAC/B,IAAI//iB,EAAI;AACLq5kB,GAAOvylB,EAAEq6B,MAAMk4jB,KAAOvylB,EA9+N7B,SAAoBy7B,EAAgBmhiB,EAAmBviiB,GACtD,IAAIk1D,GAAK,EAAG5nF,GAAK,EAAGxK,GAAK,EAAGiiF,GAAK,EAAGhE,GAAK,EAAGvgF,GAAK,GAChD+hkB,EAAOviiB,MAAM6jiB,KAAc,IAAIlmjB,QAAQ,SAASha,EAAGF,GACnD,IAAIgR,EAAIzC,SAASguB,EAAMv8B,EAAE,GAAI;AAC7B,OAAOE,EAAE6jB,cAActgB,OAAO,IAC7B,IAAK,IAAKguF,EAAIzgF;AAAG;AAAO,IAAK,IAAK3R,EAAI2R;AAAG;AACzC,IAAK,IAAKswE,EAAItwE;AAAG;AAAO,IAAK,IAAKjU,EAAIiU;AAAG;AACzC,IAAK,IAAQswE,GAAK,EAAGhE,EAAItsE,EAAQnH,EAAImH,EAEvC,GACGjU,GAAK,IAAW,GAANugF,GAAWzzE,GAAK,IAAKyzE,EAAIzzE,EAAGA,GAAK;AAC9C,IAAI8qlB,GAAY,IAAMljgB,GAAG,EAAEA,OAAOp4C,MAAOqgC,gBAAgB55E,OAAO,GAAK,KAAO,MAAQ+J,GAAG,EAAEA,EAAE,IAAI/J,OAAO,GAAK,KAAO,MAAQT,GAAG,EAAEA,EAAE,IAAIS,OAAO;AACvH,GAAlB60lB,EAAQ10lB,SAAa00lB,EAAU,IAAMA,GACnB,GAAlBA,EAAQ10lB,SAAa00lB,EAAU,KAAOA;AACzC,IAAIC,GAAY,MAAQtzgB,GAAG,EAAEA,EAAE,IAAIxhF,OAAO,GAAK,KAAO,MAAQw9E,GAAG,EAAEA,EAAE,IAAIx9E,OAAO,GAAK,KAAO,MAAQ/C,GAAG,EAAEA,EAAE,IAAI+C,OAAO;AACtH,OAAS,GAANwhF,IAAiB,GAANhE,IAAiB,GAANvgF,EAAgB43lB,GAChC,GAANljgB,IAAiB,GAAN5nF,IAAiB,GAANxK,EAAgBu1lB,EAClCD,EAAU,IAAMC,CACxB,CAlBA,CA8+N0C1ylB,EAAG5B,EAAEw+jB,OAAS58jB,EAAEq6B,MAAMk4jB,IAAM,IAAMr5kB,EAAE,GACvE9a,EAAE26kB,WAAax2N,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAI2/jB,GAAUzukB,EAAGkZ,KAC/CqpW,EAAKjmX,EAAI,IAAKimX,EAAKzzW,EAAIi/jB,GAAQU,GAAUzukB,EAAGkZ,UAChD9a,EAAEu0lB,WAAoBpwO,EAAKlwW,EAAIqojB,GAAWn4M,EAAK/pW,EAAG+pW,EAAKzzW,aAAaqoC,KAAO42hB,GAAQxrN,EAAKzzW,GAAGyzW,EAAKzzW,IAC/F1Q,EAAEw0lB,eAAerwO,EAAK/pW,CAC3B,MACC+pW,EAAKjmX,EAAI,IACTimX,EAAKzzW,EAAI9O;KAXyBuiX,EAAKjmX,EAAI,SAAQ8B,EAAEu0lB,WAAoBpwO,EAAKlwW,EAAIrS,GAAGuiX,EAAKzzW,EAAIA;AAmB/F,GANa,KAAVyzW,EAAKjmX,IACA8B,EAAEo6kB,OAAal2S,EAAGvsR,KAAIusR,EAAGvsR,GAAK,IAAIusR,EAAGvsR,GAAG8C,GAAK0pW,GAChDjgF,EAAG40S,GAAY,CAACv1kB,EAAEkX,EAAExa,EAAE0X,KAAOwsW,GAClC7lW,EAAQC,EAAI,EAAG21kB,EAAU72jB,EAAI+T,WAAW9yB,GACrCg5D,EAAM73E,EAAE8D,EAAIkX,IAAG68D,EAAM73E,EAAE8D,EAAIkX,GAC3B68D,EAAM73E,EAAEQ,EAAI0X,IAAG2/D,EAAM73E,EAAEQ,EAAI0X,GAC3BgoR,GAAMs0T,IAASx5kB;KAAsB,GAAZA,EAAI,IAAK9C,EAAM3X,EAAEyulB,WAAazulB,EAAEyulB,WAAa92kB,EAAG,QAC7E,CACA+hR,EAAO,KAAKn7Q,EAAM8e,EAAI19B,SAAS4e,EAAK,OAAQohR,EAAGtiQ,EAAI+T,WAAW7yB,IAC7D,KAAK,GAAqB,KAAZ21kB,IAAkBJ,GAASA;AAAO;AAChD,KAAKG,EAAO,KAAK,GAAM,KAAK,GAAM,IAAIH,GAASM,IAAe,MAAM16T,EAMrE,OAHGn7Q,EAAMD,EAAQ,GAAG81kB,IAEpBlwT,EAAG,QAAUs1S,GAAaligB,GACnB4sN,CACR,CAUA,SAASuwT,EAAa11lB,EAAes5C,GACpC,IAAIhb,EAAM,GAAI+njB,EAAqB,UAAb/siB,EAAKn1C,KAAmB,CAAC,EAAE,EAAE,EAAE,GAAKwxlB,GAAU31lB,EAAGs5C;AACvE,OAAOA,EAAKn1C,MACX,IAAK,SAAUm6B,EAAM27hB,EAAcj6jB;AAAI;AACvC,IAAK,SAOL,IAAK,SAAUs+B,EAAMt+B;AAAG;AANxB,IAAK,SACuBs+B,EAAP,OAAjBgb,EAAKk2iB,SAAyBxvlB,EAAE0Q,SAAS,QACpC4oC,EAAKk2iB,eAAgC,IAAbn2B,EAAgCA,EAASjrR,MAAM71R,OAAO+gC,EAAKk2iB,SAAUxvlB,GAC1Fk6jB,GAAWC,OAAOgB,SAASn7jB,GAAKA,EAAE0Q,SAAS,UAAYqqjB,EAAI/6jB;AACtE;AACD,IAAK,QAASs+B,EAAMkziB,GAAOxxkB;AAAI;AAE/B,QAAS,MAAM,IAAIe,MAAM,qBAAuBu4C,EAAKn1C,MAKtD,OAHe,KAAZkilB,EAAM,IAA0B,KAAZA,EAAM,IAA0B,KAAZA,EAAM,GAAY/njB,EAAM62iB,GAAS72iB,EAAI79B,MAAM,IACjE,UAAb64C,EAAKn1C,MAAiC,UAAbm1C,EAAKn1C,MAAqC,OAAjBm1C,EAAKk2iB,SAAmBlxjB,EAAM62iB,GAAS72iB,GAC3E,UAAbgb,EAAKn1C,WAAyC,IAAbk1jB,GAA4B//gB,EAAKk2iB,WAAWlxjB,EAAM+6hB,EAASjrR,MAAM71R,OAAO+gC,EAAKk2iB,SAAUn2B,EAASjrR,MAAMv/N,OAAO,MAAMvwC,KACvI,uBAAnBA,EAAI79B,MAAM,EAAE,IAAqC6zlB,GAAIxE,SAAsB,UAAbx2iB,EAAKn1C,KAAmBm6B,EAAM62iB,GAAS72iB,GAAMgb,GAzB/G,SAA0Bhb,EAAgBgb,GACzC,OAAKA,GAAQA,EAAKo7iB,IACfp7iB,EAAK27iB,IACa,QAAlB32jB,EAAI79B,MAAM,EAAE,IACZ69B,EAAIp0B,QAAQ,OAAS,GAAKo0B,EAAIp0B,QAAQ,MAAQ,GAAKo0B,EAAIp0B,QAAQ,MAAQ,EAFvD8qlB,EAAiB12jB,EAAKgb,GAGlCwiiB,GA5IR,SAAwBvvkB,EAAc+sC,GACrC,IAAIr4C,EAAIq4C,GAAQ,CAAC,EACbuoQ,EAAe;AACnB,IAAIt1S,GAAkB,IAAbA,EAAE3L,OAAc,OAAOihT;AAGhC,IAFA,IAAItuS,EAAQhH,EAAE+L,MAAM,UAChBrY,EAAIsT,EAAM3S,OAAS,EACjBX,GAAK,GAAyB,IAApBsT,EAAMtT,GAAGW,UAAgBX;AAGzC,IAFA,IAAIsf,EAAQ,GAAIuvM,EAAM,EAClBl2M,EAAI,EACFA,GAAK3Y,IAAK2Y,GAEJ,IADXk2M,EAAMv7M,EAAMqF,GAAG1O,QAAQ,MACT4kN,EAAMv7M,EAAMqF,GAAGhY,OAAakuN,IAC1CvvM,EAAQnc,KAAK+b,IAAII,EAAOuvM;AAEzB,IAAIl2M,EAAI,EAAGA,GAAK3Y,IAAK2Y,EAAG,CACvBipS,EAAIjpS,GAAK;AAET,IAAI8C,EAAI;AAER,IADAi5kB,EAAaphlB,EAAMqF,GAAGnY,MAAM,EAAG8e,GAAOozF,OAAQkvM,EAAKjpS,EAAG8C,EAAGza,GACrDya,EAAI,EAAGA,IAAMnI,EAAMqF,GAAGhY,OAAS2e,GAAO,GAAK,IAAK7D,EACnDi5kB,EAAaphlB,EAAMqF,GAAGnY,MAAM8e,EAAY,IAAL7D,EAAE,GAAM6D,EAAQ,GAAF7D,GAAMi3F,OAAOkvM,EAAIjpS,EAAE8C,EAAEza,EACxE,CAEA,OADGA,EAAEyulB,YAAW7tS,EAAMA,EAAIphT,MAAM,EAAGQ,EAAEyulB,YAC9B7tS,CACR,CAxBA,CA4IoCvjR,EAAKgb,GAAOA,GAJhB07iB,EAAiB12jB,EAAKgb,EAKtD,CANA,CA0ByBhb,EAAKgb,EAC9B,CAuBA,MAAO,CACNu2iB,YAtBD,SAAyB7vlB,EAAes5C,GAAqB,OAAOyhiB,GAAkB2a,EAAa11lB,EAAGs5C,GAAOA,EAAO,EAuBnHw2iB,SAAU4F,EACV3F,WAtBD,SAAsB5qT,GAIrB,IAHA,IACuCigF,EADnCnkX,EAAsB,GACtBC,EAAIw5kB,GAAkBv1S,EAAG,SACzBk2S,EAAQnnkB,MAAM1T,QAAQ2kS,GAClBvsR,EAAI1X,EAAE2B,EAAE3B,EAAG0X,GAAK1X,EAAER,EAAEQ,IAAK0X,EAAG,CAEnC,IADA,IAAIgxH,EAAuB,GACnBluH,EAAIxa,EAAE2B,EAAE2B,EAAGkX,GAAKxa,EAAER,EAAE8D,IAAKkX,EAAG,CACnC,IAAIuX,EAAQ8mjB,GAAY,CAAC74kB,IAAIsD,EAAEkX;AAE/B,IADA0pW,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAKypR,EAAGlyQ,KACb,MAAVmyV,EAAKzzW,EAAjB,CAEA,IADA,IAAIuD,GAAKkwW,EAAKlwW,IAAMylkB,GAAYv1N,GAAOA,EAAKlwW,IAAM,IAAIzU,MAAM,EAAE,IACxDyU,EAAEtU,OAAS,IAAIsU,GAAK;AAC1B00H,EAAG3hI,KAAKiN,GAAW,IAANwG,EAAU,IAAM,IAHkC,MAAjCkuH,EAAG3hI,KAAK,aAIvC,CACAhH,EAAEgH,KAAK2hI,EAAGzxH,KAAK,IAChB,CACA,OAAOlX,EAAEkX,KAAK,KACf,EAOD,CAzMwB,GAyNpBy9kB,GAAoB,WACvB,SAASC,EAAYvokB,EAAM07F,EAAuB1vE,GACjD,GAAIhsB,EAAJ,CACAq1iB,GAAUr1iB,EAAMA,EAAKlwB,GAAK;AAE1B,IADA,IAAI04lB,EAAOx8iB,EAAKw8iB,MAAQC,EAClBzokB,EAAKlwB,EAAIkwB,EAAK1sB,QAAQ,CAC3B,IAAIo4kB,EAAK1rjB,EAAKs1iB,WAAW,GACrBhqjB,EAAIk9kB,EAAK9c,IAAO8c,EAAK,OACrBl1lB,EAAS0sB,EAAKs1iB,WAAW,GACzBx5H,EAAM97a,EAAKlwB,EAAIwD,EACfZ,EAAI4Y,EAAErM,GAAKqM,EAAErM,EAAE+gB,EAAM1sB,EAAQ04C;AAEjC,GADAhsB,EAAKlwB,EAAIgsc,EACNpgV,EAAGhpH,EAAG4Y,EAAGogkB,GAAK,MAClB,CAXU,CAYX,CAYA,SAASgd,EAAsBh2lB,EAAGs5C,GACjC,IAAIt5C,EAAG,OAAOA;AACd,IAAIiB,EAAIq4C,GAAQ,CAAC,EAEbz2C,EAAoB5B,EAAEo6kB,MAAQ,GAAK,CAAC,EAAax6kB,EAAI,SAAUo1lB,EAAS,GAAIC,EAAO,EACnFlb,EAAS,CAAC,EAAGmb,EAAS,GAAIC,EAAY,GAEtCC,EAAW,CAACxzlB,EAAG,CAAC3B,EAAE,EAAGsD,EAAE,GAAI9D,EAAG,CAACQ,EAAE,EAAGsD,EAAE,IACtCkrlB,EAAYzulB,EAAEyulB,WAAa;AAE/B,GAAW,GAAR1vlB,EAAE,KACO,GAARA,EAAE,IAAsB,GAARA,EAAE,KACjBA,EAAEY,QAAU,IAAe,GAATZ,EAAE,KAAyB,MAAVA,EAAE,IAAc,MAAM,IAAIe,MAAM;AAIxE,GAAW,GAARf,EAAE,GACJiB,EAAE60lB,KAAOC,EACTF,EAAY71lB,EAAG,SAASwzC,EAAK56B,EAAGogkB,GAAM,OAAOA,GAC5C,KAAK,EACJ/3kB,EAAEq1lB,KAAO9ijB,EACNA,GAAO,OAAQvyC,EAAEs1lB;AACpB;AACD,KAAK,EAAMF,EAAW7ijB;AAAK;AAC3B,KAAK,IAASA,IAAKyijB,EAASzijB;AAAK;AACjC,KAAK,IAAMyijB,EAASzijB;AAAK;AACzB,KAAK,GACL,KAAK,GACAvyC,EAAEs1lB,OAAM/ijB,EAAI,GAAG7hC,EAAI6hC,EAAI,GAAG7hC,EAAElR,MAAM;AAEvC,KAAK,GACL,KAAK,GACL,KAAK,GAEK,IAANu4kB,KAAiC,KAAlBxliB,EAAI,MAAgC,GAATA,EAAI,IAAa,IAAe,GAATA,EAAI,IAAa,KACpFA,EAAI,GAAGn4B,EAAIpa,EAAEw+jB,QAAU3D,EAAU,IAC9B76jB,EAAE26kB,YAAapoiB,EAAI,GAAGr0C,EAAI,IAAKq0C,EAAI,GAAG7hC,EAAIq/jB,GAAQx9hB,EAAI,GAAG7hC,KAG1D1Q,EAAEs1lB,MACD/ijB,EAAI,GAAK0ijB,IACXrzlB,EAAE,QAAU43kB,GAAa4b,GACzBrb,EAAOn6kB,GAAKgC,EACZszlB,EAAOlulB,KAAKpH,GACZgC,EAAK5B,EAAEo6kB,MAAQ,GAAK,CAAC,EACrBgb,EAAW,CAACxzlB,EAAG,CAAC3B,EAAE,EAAGsD,EAAE,GAAI9D,EAAG,CAACQ,EAAE,EAAGsD,EAAE,IACtC0xlB,EAAO1ijB,EAAI,GAAI3yC,EAAIo1lB,GAAU,SAAWC,EAAO,GAAID,EAAS;AAI9D,IAAIO,EAAUv1lB,EAAEo6kB,OAASx4kB,EAAE2wC,EAAI,GAAGtyC,IAAI,IAAIsyC,EAAI,GAAGhvC,GAAK3B,EAAEk3kB,GAAYvmiB,EAAI;AACxE,GAAGgjjB,EAAS,CACXA,EAAQr3lB,EAAIq0C,EAAI,GAAGr0C,EAAGq3lB,EAAQ7klB,EAAI6hC,EAAI,GAAG7hC,EAC1B,MAAZ6hC,EAAI,GAAGn4B,IAAWm7kB,EAAQn7kB,EAAIm4B,EAAI,GAAGn4B,GACzB,MAAZm4B,EAAI,GAAGjnC,IAAWiqlB,EAAQjqlB,EAAIinC,EAAI,GAAGjnC;AACxC,KACD,CACGtL,EAAEo6kB,OACAx4kB,EAAE2wC,EAAI,GAAGtyC,KAAI2B,EAAE2wC,EAAI,GAAGtyC,GAAK,IAC/B2B,EAAE2wC,EAAI,GAAGtyC,GAAGsyC,EAAI,GAAGhvC,GAAKgvC,EAAI,IACtB3wC,EAAEk3kB,GAAYvmiB,EAAI,KAAOA,EAAI,GAGrC,EAAGvyC;IACE,IAAW,IAARjB,EAAE,IAAsB,IAARA,EAAE,GAqCrB,MAAM,IAAIe,MAAM,0BAA4Bf,EAAE;AApCpDiB,EAAE60lB,KAAOW,EACE,IAARz2lB,EAAE,KAAciB,EAAEs1lB,QAAav2lB,EAAE5C,EAAI,GACxCy4lB,EAAY71lB,EAAG,SAASwzC,EAAK56B,EAAGogkB,GAAM,OAAOA,GAC5C,KAAK,IAAMn4kB,EAAI2yC;AAAK;AACpB,KAAK,GACJA,EAAI,GAAG7hC,EAAI6hC,EAAI,GAAG7hC,EAAElR,MAAM;AAE3B,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GASJ,GARG+yC,EAAI,GAAK0ijB,IACXrzlB,EAAE,QAAU43kB,GAAa4b,GACzBrb,EAAOn6kB,GAAKgC,EACZszlB,EAAOlulB,KAAKpH,GACZgC,EAAK5B,EAAEo6kB,MAAQ,GAAK,CAAC,EACrBgb,EAAW,CAACxzlB,EAAG,CAAC3B,EAAE,EAAGsD,EAAE,GAAI9D,EAAG,CAACQ,EAAE,EAAGsD,EAAE,IACtC0xlB,EAAO1ijB,EAAI,GAAI3yC,EAAI,SAAWq1lB,EAAO,IAEnCxG,EAAY,GAAKl8iB,EAAI,GAAGtyC,GAAKwulB,EAAW;AACxCzulB,EAAEo6kB,OACAx4kB,EAAE2wC,EAAI,GAAGtyC,KAAI2B,EAAE2wC,EAAI,GAAGtyC,GAAK,IAC/B2B,EAAE2wC,EAAI,GAAGtyC,GAAGsyC,EAAI,GAAGhvC,GAAKgvC,EAAI,IACtB3wC,EAAEk3kB,GAAYvmiB,EAAI,KAAOA,EAAI,GACjC6ijB,EAAS31lB,EAAE8D,EAAIgvC,EAAI,GAAGhvC,IAAG6xlB,EAAS31lB,EAAE8D,EAAIgvC,EAAI,GAAGhvC,GAC/C6xlB,EAAS31lB,EAAEQ,EAAIsyC,EAAI,GAAGtyC,IAAGm1lB,EAAS31lB,EAAEQ,EAAIsyC,EAAI,GAAGtyC;AAClD;AACD,KAAK,GACDsyC,EAAI,QAAS4ijB,EAAU5ijB,EAAI,MAAQ,IAAMA,EAAI,MAAQ;AACxD;AACD,KAAK,KACJ4ijB,EAAU5ijB,EAAI,IAAMA,EAAI,GAAOA,EAAI,IAAM0ijB,IAAMr1lB,EAAI2yC,EAAI,IAExD,EAAGvyC,EACmD,CAIxD,GAHA4B,EAAE,QAAU43kB,GAAa4b,GACzBrb,EAAOib,GAAUp1lB,GAAKgC,EACtBszlB,EAAOlulB,KAAKgulB,GAAUp1lB,IAClBu1lB,EAAUx1lB,OAAQ,MAAO,CAAEq6kB,WAAYkb,EAAQjb,OAAQF;AAG3D,IAFA,IAAI0b,EAAU,CAAC,EAAGC,EAAS,GAEnBh2lB,EAAI,EAAGA,EAAIy1lB,EAAUx1lB,SAAUD,EAAMq6kB,EAAOmb,EAAOx1lB,KAC1Dg2lB,EAAO1ulB,KAAKmulB,EAAUz1lB,IAAMw1lB,EAAOx1lB,IACnC+1lB,EAAQN,EAAUz1lB,IAAMq6kB,EAAOob,EAAUz1lB,KAAOq6kB,EAAOmb,EAAOx1lB,MAE9Dg2lB,EAAO1ulB,KAAKmulB,EAAUz1lB,IACtB+1lB,EAAQN,EAAUz1lB,IAAO,CAAE,OAAQ;AAEpC,MAAO,CAAEs6kB,WAAY0b,EAAQzb,OAAQwb,EACtC,CA8IA,SAASE,EAAWh/Y,EAAMh3M,EAAQ04C,GACjC,IAAIr4C,EAAI,CAAC,CAACuD,EAAE,EAAEtD,EAAE,GAAI,CAAC/B,EAAE,IAAIwS,EAAE,GAAI,EAAG;AAUpC,OATG2nC,EAAKi9iB,MAAqB,OAAbj9iB,EAAKg9iB,MACpBr1lB,EAAE,GAAGuD,EAAIozM,EAAKgrX,WAAW,GACzB3hkB,EAAE,GAAK22M,EAAKgrX,WAAW,GACvB3hkB,EAAE,GAAGC,EAAI02M,EAAKgrX,WAAW,GACzBhrX,EAAKx6M,GAAG,IAER6D,EAAE,GAAK22M,EAAKgrX,WAAW,GACvB3hkB,EAAE,GAAGuD,EAAIozM,EAAKgrX,WAAW,GAAI3hkB,EAAE,GAAGC,EAAI02M,EAAKgrX,WAAW,IAEhD3hkB,CACR,CAEA,SAAS41lB,EAAYj/Y,EAAMh3M,EAAQ04C,GAClC,IAAI8vZ,EAAMxxP,EAAKx6M,EAAIwD,EACfK,EAAI21lB,EAAWh/Y,EAAMh3M,EAAQ04C;AAEjC,GADAr4C,EAAE,GAAG9B,EAAI,IACO,OAAbm6C,EAAKg9iB,KAAgB,CACvB1+Y,EAAKx6M;AACL,IAAIi6B,EAAMugL,EAAKgrX,WAAW;AAE1B,OADA3hkB,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAWvriB,EAAK,QACvBp2B,CACR,CAGA,OAFGq4C,EAAKi9iB,MAAM3+Y,EAAKx6M,IACnB6D,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAWx5H,EAAMxxP,EAAKx6M,EAAG,QAChC6D,CACR,CACA,SAAS61lB,EAAYl+kB,EAAG8C,EAAG7Y,GAE1B,IAAI5B,EAAI4kkB,GAAQ,EAAIhjkB,EAAEjC;AACtBK,EAAEuhkB,YAAY,EAAG,KACjBvhkB,EAAEuhkB,YAAY,EAAG9mjB,GACjBza,EAAEuhkB,YAAY,EAAG5pjB,GACjB3X,EAAEuhkB,YAAY,EAAG;AACjB,IAAI,IAAI7hkB,EAAI,EAAGA,EAAIM,EAAEL,SAAUD,EAAG,CACjC,IAAIigS,EAAK/9R,EAAEwvC,WAAW1xC;AACtBM,EAAEuhkB,YAAY,EAAG5hS,GAAM,IAAO,GAAOA,EACtC,CAEA,OADA3/R,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAOA,SAAS81lB,EAAcn+kB,EAAG8C,EAAG/J,GAC5B,IAAI1Q,EAAI4kkB,GAAQ;AAKhB,OAJA5kkB,EAAEuhkB,YAAY,EAAG,KACjBvhkB,EAAEuhkB,YAAY,EAAG9mjB,GACjBza,EAAEuhkB,YAAY,EAAG5pjB,GACjB3X,EAAEuhkB,YAAY,EAAG7wjB,EAAG,KACb1Q,CACR,CAOA,SAAS+1lB,EAAap+kB,EAAG8C,EAAG/J,GAC3B,IAAI1Q,EAAI4kkB,GAAQ;AAKhB,OAJA5kkB,EAAEuhkB,YAAY,EAAG,KACjBvhkB,EAAEuhkB,YAAY,EAAG9mjB,GACjBza,EAAEuhkB,YAAY,EAAG5pjB,GACjB3X,EAAEuhkB,YAAY,EAAG7wjB,EAAG,KACb1Q,CACR,CAgBA,SAASg2lB,EAAa99jB,EAAG0nD,EAAGkxL,GAC3B,IAAI+nJ,EAAU,MAAJj5U;AAGV,OADAA,GAAKi5U,EAAM3gY,EAAI,KADf0nD,IAAK,QACsB,KAAUA,EAAI,MAASA,IAC1Ci5U,EAAM,GAAK,MAAQ/nJ,EAAMmoU,GAAWr5f,GAAKo5f,GAAWp5f,GAC7D,CAMA,IAAIq2gB,EAAU,CACb,GAAM,CAAC,QAAS,GAChB,GAAM,CAAC,OAAQ,GACf,GAAM,CAAC,MAAO,GACd,GAAM,CAAC,MAAO,IACd,GAAM,CAAC,WAAY,IACnB,GAAM,CAAC,SAAU,IACjB,GAAM,CAAC,OAAQ,IACf,GAAM,CAAC,OAAQ,IACf,IAAM,CAAC,IAAK,IAETC,EAAW,CACZ,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,GAAK,IAAM,IAAM,IAAM,IAAM,IAAM,IAAK,KAC1C,KAAM,KAAO,IAAM,IAAO,GAAM,GAAM,GAAM,GAC3C,IAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM;AAmE7C,SAASC,EAAax/Y,GACrB,IAAI32M,EAAI,CAAC,CAACuD,EAAE,EAAEtD,EAAE,GAAI,CAAC/B,EAAE,IAAIwS,EAAE,GAAI;AAEjC,OADA1Q,EAAE,GAAGC,EAAI02M,EAAKgrX,WAAW,GAAI3hkB,EAAE,GAAK22M,EAAKA,EAAKx6M,KAAM6D,EAAE,GAAGuD,EAAIozM,EAAKA,EAAKx6M,KAChE6D,CACR,CAQA,SAASo2lB,EAAez+kB,EAAG8C,EAAG47kB,EAAOz0lB,GAEpC,IAAI5B,EAAI4kkB,GAAQ,EAAIhjkB,EAAEjC;AACtBK,EAAEuhkB,YAAY,EAAG5pjB,GACjB3X,EAAEuhkB,YAAY,EAAG80B,GACjBr2lB,EAAEuhkB,YAAY,EAAG9mjB,GACjBza,EAAEuhkB,YAAY,EAAG;AACjB,IAAI,IAAI7hkB,EAAI,EAAGA,EAAIkC,EAAEjC,SAAUD,EAAG,CACjC,IAAIigS,EAAK/9R,EAAEwvC,WAAW1xC;AACtBM,EAAEuhkB,YAAY,EAAG5hS,GAAM,IAAO,GAAOA,EACtC,CAEA,OADA3/R,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAsBA,SAASs2lB,EAAgB3/Y,EAAMh3M,GAC9B,IAAIK,EAAIm2lB,EAAax/Y,GACjBs0G,EAAKt0G,EAAKgrX,WAAW,GACrB32Q,EAAKr0G,EAAKgrX,WAAW,GACrBlikB,EAAIk3M,EAAKgrX,WAAW;AACxB,GAAQ,OAALlikB,EAIF,OAHU,IAAPwrT,GAAmB,aAAPD,GAAqBhrT,EAAE,GAAG9B,EAAI,IAAK8B,EAAE,GAAG0Q,EAAI,IAC5C,IAAPu6S,GAAmB,aAAPD,GAAqBhrT,EAAE,GAAG9B,EAAI,IAAK8B,EAAE,GAAG0Q,EAAI,IAC3D1Q,EAAE,GAAG0Q,EAAI,EACP1Q;AAER,IAAI4B,EAAQ,MAAJnC;AAER,OAFoBA,GAAO,MAAFA,GAAY,MACrCO,EAAE,GAAG0Q,GAAK,EAAM,EAAF9O,IAAQopT,EAAK7oT,KAAKC,IAAI,EAAG3C,EAAE,IAAMwrT,EAAK9oT,KAAKC,IAAI,EAAG3C,IACzDO,CACR,CACA,SAASu2lB,EAAgB5+kB,EAAG8C,EAAG47kB,EAAO3llB,GACrC,IAAI1Q,EAAI4kkB,GAAQ;AAIhB,GAHA5kkB,EAAEuhkB,YAAY,EAAG5pjB,GACjB3X,EAAEuhkB,YAAY,EAAG80B,GACjBr2lB,EAAEuhkB,YAAY,EAAG9mjB,GACT,GAAL/J,EAIF,OAHA1Q,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,OACVvhkB;AAER,IAAkBirT,EAAdrpT,EAAI,EAAGnC,EAAI,EAAWurT,EAAK;AAe/B,OAdGt6S,EAAI,IAAK9O,EAAI,EAAG8O,GAAKA,GACxBjR,EAAmB,EAAf0C,KAAKq0lB,KAAK9llB,GAGP,YADPs6S,GADAt6S,GAAKvO,KAAKC,IAAI,EAAG3C,EAAE,OACR,OACwBA,EAAGurT,GAAXt6S,GAAG,KAAmB,GACjDA,GAAKs6S,EACLA,GAAM,WACNA,KAAQ,EAERC,GADAv6S,GAAKvO,KAAKC,IAAI,EAAG,OACR,EACTpC,EAAEuhkB,YAAY,EAAGt2Q,GACjBjrT,EAAEuhkB,YAAY,EAAGv2Q,GACjBvrT,GAAK,OAAUmC,EAAI,MAAS,GAC5B5B,EAAEuhkB,YAAY,EAAG9hkB,GACVO,CACR,CAeA,SAASy2lB,EAAgB9/Y,EAAMh3M,GAC9B,IAAIK,EAAIm2lB,EAAax/Y,GACjBs0G,EAAKt0G,EAAKgrX,WAAW,EAAE;AAE3B,OADA3hkB,EAAE,GAAG0Q,EAAIu6S,EACFjrT,CACR,CAQA,SAAS02lB,EAAkB//Y,EAAMh3M,GAChC,OAAoC,GAA7Bg3M,EAAKA,EAAKx6M,EAAIwD,EAAS,GAAUg3M,EAAKgrX,WAAWhikB,EAAQ,QAAU,EAC3E,CAgCA,SAASg3lB,EAAwBnvlB,EAAM6ulB,GACtC,IAAIl+V,EAAMysU,GAAQ,EAAIp9jB,EAAK7H;AAC3Bw4P,EAAIopU,YAAY,EAAG,MACnBppU,EAAIopU,YAAY,EAAG80B;AACnB,IAAI,IAAI32lB,EAAI,EAAGA,EAAI8H,EAAK7H,SAAUD,EAAG,CACpC,IAAIigS,EAAKn4R,EAAK4pC,WAAW1xC;AACzBy4P,EAAIA,EAAIh8P,KAAOwjS,EAAK,IAAO,GAAOA,CACnC,CAEA,OADAxnC,EAAIA,EAAIh8P,KAAO,EACRg8P,CACR,CAEA,IAAI28V,EAAU,CACN,EAAe,CAAEl1lB,EAAE,MAAO0L,EAAEu8kB,IAC5B,EAAe,CAAEjolB,EAAE,OACnB,EAAe,CAAEA,EAAE,YACnB,EAAe,CAAEA,EAAE,aACnB,EAAe,CAAEA,EAAE,SACnB,EAAe,CAAEA,EAAE,QACnB,EAAe,CAAEA,EAAE,QAAS0L,EAzXpC,SAAqBqrM,EAAMh3M,EAAQ04C,GAClC,IAAIr4C,EAAI,CAAC4B,EAAE,CAAC2B,EAAE,EAAEtD,EAAE,GAAGR,EAAE,CAAC8D,EAAE,EAAEtD,EAAE;AAC9B,OAAa,GAAVN,GAAe04C,EAAKi9iB,MACtBt1lB,EAAE4B,EAAE2B,EAAIozM,EAAKgrX,WAAW,GACxBhrX,EAAKx6M,IACL6D,EAAE4B,EAAE3B,EAAI02M,EAAKgrX,WAAW,GACxB3hkB,EAAEP,EAAE8D,EAAIozM,EAAKgrX,WAAW,GACxBhrX,EAAKx6M,IACL6D,EAAEP,EAAEQ,EAAI02M,EAAKgrX,WAAW,GACjB3hkB,IAERA,EAAE4B,EAAE2B,EAAIozM,EAAKgrX,WAAW,GACxB3hkB,EAAE4B,EAAE3B,EAAI02M,EAAKgrX,WAAW,GACX,IAAVhikB,GAAgB04C,EAAKi9iB,OAAM3+Y,EAAKx6M,GAAK,GACxC6D,EAAEP,EAAE8D,EAAIozM,EAAKgrX,WAAW,GACxB3hkB,EAAEP,EAAEQ,EAAI02M,EAAKgrX,WAAW,GACX,IAAVhikB,GAAgB04C,EAAKi9iB,OAAM3+Y,EAAKx6M,GAAK,GAC5B,OAAT6D,EAAE4B,EAAE2B,IAAavD,EAAE4B,EAAE2B,EAAIvD,EAAEP,EAAE8D,EAAIvD,EAAE4B,EAAE3B,EAAID,EAAEP,EAAEQ,EAAI,GAC7CD,EACR,GAuWQ,EAAe,CAAEJ,EAAE,WACnB,EAAe,CAAEA,EAAE,SACnB,EAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,QACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,UAAW0L,EAxTtC,SAAuBqrM,EAAMh3M,EAAQ04C,GACpC,IAAIr4C,EAAI21lB,EAAWh/Y,EAAMh3M,EAAQ04C;AAEjC,OADAr4C,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAW,EAAG,KACrB3hkB,CACR,GAqTQ,GAAe,CAAEJ,EAAE,SAAU0L,EA3SrC,SAAsBqrM,EAAMh3M,EAAQ04C,GACnC,IAAIr4C,EAAI21lB,EAAWh/Y,EAAMh3M,EAAQ04C;AAEjC,OADAr4C,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAW,EAAG,KACrB3hkB,CACR,GAwSQ,GAAe,CAAEJ,EAAE,QAAS0L,EAAEsqlB,GAC9B,GAAe,CAAEh2lB,EAAE,UAAW0L,EA/RtC,SAAuBqrM,EAAMh3M,EAAQ04C,GACpC,IAAI8vZ,EAAMxxP,EAAKx6M,EAAIwD,EACfK,EAAI21lB,EAAWh/Y,EAAMh3M,EAAQ04C;AAGjC,GADAr4C,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAW,EAAG,KACzBtphB,EAAKi9iB,KAAM3+Y,EAAKx6M,EAAIgsc;IAClB,CACJ,IAAI6mB,EAAOr4Q,EAAKgrX,WAAW;CAoC7B,SAAyBhrX,EAAM32M,GAC9B0hkB,GAAU/qX,EAAM;AAEhB,IADA,IAAIwhD,EAAM,GAAIy+V,EAAO,EAAGj/kB,EAAI,GAAI8C,EAAI,GAAIo8kB,EAAO,GAAIC,EAAO,GACpDngZ,EAAKx6M,EAAIw6M,EAAKh3M,QAAQ,CAC3B,IAAIggS,EAAKhpF,EAAKA,EAAKx6M;AACnB,OAAOwjS,GACN,KAAK,EAAMxnC,EAAInxP,KAAK2vM,EAAKgrX,WAAW,EAAG;AAAO;AAC9C,KAAK,EACJlnjB,EAAIu7kB,EAAah2lB,EAAE,GAAGuD,EAAGozM,EAAKgrX,WAAW,OACzChqjB,EAAIq+kB,EAAah2lB,EAAE,GAAGC,EAAG02M,EAAKgrX,WAAW,OACzCxpU,EAAInxP,KAAKyT,EAAI9C;AACZ;AACF,KAAK,EACJ,IAAIpU,EAAIyylB,EAAah2lB,EAAE,GAAGuD,EAAGozM,EAAKgrX,WAAW,OACzC1hkB,EAAI+1lB,EAAah2lB,EAAE,GAAGC,EAAG02M,EAAKgrX,WAAW;AAC7ClnjB,EAAIu7kB,EAAah2lB,EAAE,GAAGuD,EAAGozM,EAAKgrX,WAAW,OACzChqjB,EAAIq+kB,EAAah2lB,EAAE,GAAGC,EAAG02M,EAAKgrX,WAAW,OACzCxpU,EAAInxP,KAAKzD,EAAItD,EAAI,IAAMwa,EAAI9C;AAC1B;AACF,KAAK,EACJ,GAAGg/L,EAAKx6M,EAAIw6M,EAAKh3M,OAAsD,YAA5CgV,QAAQwD,MAAM;AACzC;AACD,KAAK,EAAMggP,EAAInxP,KAAK,IAAMmxP,EAAIpnG,MAAQ;AAAM;AAC5C,KAAK,EAAMonG,EAAInxP,KAAK2vM,EAAKgrX,WAAW;AAAK;AACzC,KAAK,EAEQ,IAAZ,IAAIvwe,EAAI,GAAWuuM,EAAKhpF,EAAKA,EAAKx6M,MAAOi1F,GAAKrhD,OAAOiB,aAAa2uP;AAClExnC,EAAInxP,KAAK,IAAMoqF,EAAEvxE,QAAQ,KAAM,MAAQ;AACtC;AAEF,KAAK,EAAMs4O,EAAInxP,KAAK,IAAMmxP,EAAIpnG;AAAQ;AACtC,KAAK,GAAMonG,EAAInxP,KAAK,IAAMmxP,EAAIpnG;AAAQ;AACtC,KAAK,GAAMonG,EAAInxP,KAAK,OAASmxP,EAAIpnG,MAAQ;AAAM;AAE/C,KAAK,GAAM,KAAK,GACf+lc,EAAO3+V,EAAIpnG,MAAO8lc,EAAO1+V,EAAIpnG,MAC7BonG,EAAInxP,KAAK,CAAC,MAAO,MAAM24R,EAAK,IAAQ,IAAMk3T,EAAO,IAAMC,EAAO;AAC7D;AAEF,QACC,GAAGn3T,EAAK,IAAQu2T,EAASv2T,GACxBm3T,EAAO3+V,EAAIpnG,MAAO8lc,EAAO1+V,EAAIpnG,MAC7BonG,EAAInxP,KAAK6vlB,EAAOX,EAASv2T,GAAMm3T;IACzB,KAAGb,EAAQt2T,GAQb,OAAGA,GAAM,EAAahrR,QAAQwD,MAAM,sBAAwBwnR,EAAGlwR,SAAS,KACrEkwR,GAAM,GAAahrR,QAAQwD,MAAM,sBAAwBwnR,EAAGlwR,SAAS,KACrEkwR,GAAM,GAAahrR,QAAQwD,MAAM,sBAAwBwnR,EAAGlwR,SAAS,KACrEkwR,GAAM,IAAahrR,QAAQwD,MAAM,mCAAqCwnR,EAAGlwR,SAAS,KAE9EkF,QAAQwD,MAAM,2BAA6BwnR,EAAGlwR,SAAS;AAVlE,GADW,KADXmnlB,EAAOX,EAAQt2T,GAAI,MACJi3T,EAAOjgZ,EAAKA,EAAKx6M,MAC7By6lB,EAAOz+V,EAAIx4P,OAAoG,YAA1FgV,QAAQwD,MAAM,2BAA6BwnR,EAAGlwR,SAAS,IAAM,KAAO0oP,EAAIjhP,KAAK,KAAO;AAC5G,IAAI4gB,EAAOqgO,EAAI34P,OAAOo3lB;AACtBz+V,EAAIx4P,QAAUi3lB,EACdz+V,EAAInxP,KAAKivlB,EAAQt2T,GAAI,GAAK,IAAM7nQ,EAAK5gB,KAAK,KAAO,IAOqB,EAE1E,CACiB,GAAdihP,EAAIx4P,OAAaK,EAAE,GAAGsL,EAAI,GAAK6sP,EAAI,GACjCxjP,QAAQwD,MAAM,0BAA4BggP,EAAIjhP,KAAK,KAAO,IAChE,CA7DA,CAnCkBy/L,EAAKn3M,MAAMm3M,EAAKx6M,EAAGw6M,EAAKx6M,EAAI6yd,GAAOhvd,GACnD22M,EAAKx6M,GAAK6yd,CACX,CACA,OAAOhvd,CACR,GAoRQ,GAAe,CAAEJ,EAAE,SACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,WACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,WACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,WACnB,GAAe,CAAEA,EAAE,YACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,WACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,SAAU0L,EAAEsqlB,GAC/B,GAAe,CAAEh2lB,EAAE,YACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,QACnB,GAAe,CAAEA,EAAE,YACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,SACnB,IAAe,CAAEA,EAAE,aACnB,IAAe,CAAEA,EAAE,aACnB,IAAe,CAAEA,EAAE,WACnB,IAAe,CAAEA,EAAE,aACnB,IAAe,CAAEA,EAAE,cAAe0L,EAAEorlB,GACpC,IAAe,CAAE92lB,EAAE,cAAe0L,EAzG1C,SAA2BqrM,EAAMh3M,GAChC,IAAIy2B,EAAMugL,EAAKA,EAAKx6M;AACjBi6B,EAAMz2B,EAAS,IAAGy2B,EAAMz2B,EAAS;AACxB,IAAZ,IAAIK,EAAI,GAAUA,EAAEL,OAASy2B,GAAKp2B,GAAK+vC,OAAOiB,aAAa2lK,EAAKA,EAAKx6M;AACrE,OAAO6D,CACR,GAqGQ,MAAe,CAAEJ,EAAE,KAGvB41lB,EAAU,CACN,EAAe,CAAE51lB,EAAE,OACnB,EAAe,CAAEA,EAAE,OACnB,EAAe,CAAEA,EAAE,YACnB,EAAe,CAAEA,EAAE,WACnB,EAAe,CAAEA,EAAE,aACnB,EAAe,CAAEA,EAAE,gBACnB,EAAe,CAAEA,EAAE,eACnB,EAAe,CAAEA,EAAE,eACnB,EAAe,CAAEA,EAAE,gBACnB,EAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,cACnB,GAAe,CAAEA,EAAE,YACnB,GAAe,CAAEA,EAAE,gBACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,aACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,MACnB,GAAe,CAAEA,EAAE,WACnB,GAAe,CAAEA,EAAE,UACnB,GAAe,CAAEA,EAAE,UAAW0L,EAvPtC,SAAwBqrM,EAAMh3M,GAC7B,IAAIK,EAAIm2lB,EAAax/Y;AAGrB,OAFA32M,EAAE,GAAG9B,EAAI,IACT8B,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAWhikB,EAAS,EAAG,QAC9BK,CACR,GAmPQ,GAAe,CAAEJ,EAAE,WAAY0L,KAC/B,GAAe,CAAE1L,EAAE,WAAY0L,EApOvC,SAAyBqrM,EAAMh3M,GAC9B,IAAIK,EAAIm2lB,EAAax/Y;AACrB32M,EAAE,GAAG0Q,EAAIimM,EAAKgrX,WAAW;AACzB,IAAIjxjB,EAAI1Q,EAAE,GAAG0Q,GAAK;AAClB,GAAY,EAAT1Q,EAAE,GAAG0Q,EACP,OAAW,EAAJA,GACN,KAAK,EAAGA,EAAe,KAAVA,GAAK;AAAW;AAC7B,KAAK,EAAGA,EAAe,KAAVA,GAAK;AAAU;AAC5B,KAAK,EAAGA,GAAKA,GAAK,GAAK;AAAI;AAC3B,KAAK,EAAGA,GAAKA,GAAK,GAAK;AAAK;AAC5B,KAAK,EAAGA,GAAKA,GAAK,GAAK;AAAM;AAC7B,KAAK,EAAGA,GAAKA,GAAK,GAAK;AAAO;AAC9B,KAAK,EAAGA,GAAKA,GAAK,GAAK;AAAI;AAC3B,KAAK,EAAGA,GAAKA,GAAK,GAAK,GAIzB,OADA1Q,EAAE,GAAG0Q,EAAIA,EACF1Q,CACR,GAmNQ,GAAe,CAAEJ,EAAE,YAAa0L,EArKxC,SAA0BqrM,EAAMh3M,GAC/B,IAAIK,EAAIs2lB,EAAgB3/Y;AAExB,OADAA,EAAKx6M,GAAKwD,EAAS,GACZK,CACR,GAkKQ,GAAe,CAAEJ,EAAE,aACnB,GAAe,CAAEA,EAAE,UAAW0L,EAxHtC,SAAuBqrM,EAAMh3M,GAE5B,IADA,IAAIK,EAAI,CAAC,EAAGmoc,EAAMxxP,EAAKx6M,EAAIwD,EACrBg3M,EAAKx6M,EAAIgsc,GAAK,CACnB,IAAI1jZ,EAAKkyJ,EAAKgrX,WAAW;AACzB,GAAS,MAANl9gB,EAAc,CAGhB,IAFAzkD,EAAEykD,GAAM,CAAC,EAAG,IACZzkD,EAAEykD,GAAI,GAAKkyJ,EAAKgrX,WAAW,GACrBhrX,EAAKA,EAAKx6M,IAAM6D,EAAEykD,GAAI,IAAM1U,OAAOiB,aAAa2lK,EAAKA,EAAKx6M,IAAKw6M,EAAKx6M;AAAOw6M,EAAKx6M,GACvF,CAED,CACA,OAAO6D,CACR,GA6GQ,GAAe,CAAEJ,EAAE,eACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,OACnB,GAAe,CAAEA,EAAE,WACnB,GAAe,CAAEA,EAAE,SACnB,GAAe,CAAEA,EAAE,eACnB,GAAe,CAAEA,EAAE,MACnB,GAAe,CAAEA,EAAE,WAAY0L,EA1KvC,SAAyBqrM,EAAMh3M,GAC9B,IAAIK,EAAIm2lB,EAAax/Y,GACjBs0G,EAAKt0G,EAAKgrX,WAAW;AAEzB,OADA3hkB,EAAE,GAAG0Q,EAAIu6S,GAAM,EACRjrT,CACR,GAsKQ,GAAe,CAAEJ,EAAE,MACnB,GAAe,CAAEA,EAAE,WAAY0L,EAAEmrlB,GACjC,GAAe,CAAE72lB,EAAE,YAAa0L,EA/JxC,SAA0BqrM,EAAMh3M,GAC/B,IAAIK,EAAIy2lB,EAAgB9/Y;AAExB,OADAA,EAAKx6M,GAAKwD,EAAS,GACZK,CACR,GA4JQ,IAAe,CAAEJ,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,cAAe0L,EAAEorlB,GACpC,IAAe,CAAE92lB,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,cAAe0L,EAjN1C,SAA2BqrM,EAAMh3M,EAAQ04C,GACxC,GAAIA,EAAKi9iB,QAAQ31lB,EAAS,IAA1B,CACA,IAAIy+C,EAAKu4J,EAAKgrX,WAAW;AAKzB,OAJAhrX,EAAKx6M,GAAK,GACVw6M,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK,EAEH,CAACiiD,EADCu4J,EAAKgrX,WAAWhikB,EAAS,GAAI,QALR,CAO/B,GA0MQ,KAAe,CAAEC,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,KAAe,CAAEA,EAAE,MACnB,MAAe,CAAEA,EAAE,MACnB,MAAe,CAAEA,EAAE,MACnB,MAAe,CAAEA,EAAE,MACnB,MAAe,CAAEA,EAAE,MACnB,MAAe,CAAEA,EAAE;AAE3B,MAAO,CACNm3lB,aAlqBD,SAAsB7yT,EAAkB7rP,GACvC,IAAIr4C,EAAIq4C,GAAQ,CAAC;AAEjB,IADIr4C,EAAEuulB,UAAY,GAAGv2B,GAAQh4jB,EAAEuulB,UAClB,UAAVvulB,EAAEkD,KAAkB,MAAM,IAAIpD,MAAM;AACvC,IA0EIq4P,EA1EAn7H,EAAKi7c,KACL3ggB,EAAQmigB,GAAkBv1S,EAAG,SAC7Bk2S,EAAQnnkB,MAAM1T,QAAQ2kS,GACtB4+D,EAAO;AAEXk0P,GAAeh6d,EAAI,IAqEfm7H,EAAMysU,GAAQ,IACdrD,YAAY,EAtEuB,MAuEhCppU,IAtEP6+V,GAAeh6d,EAAI,EAyHpB,SAAqB1lD,GACpB,IAAI6gL,EAAMysU,GAAQ;AAKlB,OAJAzsU,EAAIopU,YAAY,EAAGjqf,EAAM11E,EAAE2B,GAC3B40P,EAAIopU,YAAY,EAAGjqf,EAAM11E,EAAE3B,GAC3Bk4P,EAAIopU,YAAY,EAAGjqf,EAAM73E,EAAE8D,GAC3B40P,EAAIopU,YAAY,EAAGjqf,EAAM73E,EAAEQ,GACpBk4P,CACR,CAPA,CAzHsC7gL;AAErC,IADA,IAAI2/gB,EAAQ90lB,KAAK8b,IAAIq5D,EAAM73E,EAAEQ,EAAG,MACxB0X,EAAI2/D,EAAM11E,EAAE3B,EAAG0X,GAAKs/kB,IAASt/kB,EAEpC,IADA,IAAI+pH,EAAKs3c,GAAWrhkB,GACZ8C,EAAI68D,EAAM11E,EAAE2B,EAAGkX,GAAK68D,EAAM73E,EAAE8D,IAAKkX,EAAG,CACxC9C,IAAM2/D,EAAM11E,EAAE3B,IAAG6iW,EAAKroV,GAAKw+jB,GAAWx+jB;AACzC,IAAI4jJ,EAAMykM,EAAKroV,GAAKinH,EAChByiP,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAKypR,EAAG7lI;AACnC8lN,GAAkB,KAAVA,EAAKjmX,IAEJ,KAAVimX,EAAKjmX,GACI,EAAPimX,EAAKzzW,IAAMyzW,EAAKzzW,GAAKyzW,EAAKzzW,IAAM,OAASyzW,EAAKzzW,GAAK,MAAOsmlB,GAAeh6d,EAAI,GAAM84d,EAAcn+kB,EAAG8C,EAAG0pW,EAAKzzW,IAC3GsmlB,GAAeh6d,EAAI,GAAM+4d,EAAap+kB,EAAG8C,EAAG0pW,EAAKzzW,IAGtDsmlB,GAAeh6d,EAAI,GAAM64d,EAAYl+kB,EAAG8C,EAD9Bi/jB,GAAYv1N,GACyB3kX,MAAM,EAAG,OAE1D,CAID,OADAw3lB,GAAeh6d,EAAI,GACZA,EAAGz+G,KACX,EAmoBC24kB,YAjoBD,SAAqBzM,EAAiBpyiB,GACrC,IAAIr4C,EAAIq4C,GAAQ,CAAC;AAEjB,IADIr4C,EAAEuulB,UAAY,GAAGv2B,GAAQh4jB,EAAEuulB,UAClB,UAAVvulB,EAAEkD,KAAkB,MAAM,IAAIpD,MAAM;AACvC,IAAIk9H,EAAKi7c;AAET+e,GAAeh6d,EAAI,EA2CpB,SAAuBytd,GACtB,IAAItyV,EAAMysU,GAAQ;AAClBzsU,EAAIopU,YAAY,EAAG,MACnBppU,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG;AAEnB,IADA,IAAI72T,EAAO,EAAGo4F,EAAO,EAAGq0P,EAAQ,EACxBz3lB,EAAI,EAAGA,EAAI+qlB,EAAGzQ,WAAWr6kB,SAAUD,EAAG,CAC7C,IAAI8H,EAAOijlB,EAAGzQ,WAAWt6kB,GACrBwkS,EAAKumT,EAAGxQ,OAAOzykB;AACnB,GAAI08R,GAAOA,EAAG,QAAd,GACEizT;AACF,IAAI7/gB,EAAQiigB,GAAar1S,EAAG;AACzBx5B,EAAOpzL,EAAM73E,EAAEQ,IAAGyqQ,EAAOpzL,EAAM73E,EAAEQ,GACjC6iW,EAAOxrR,EAAM73E,EAAE8D,IAAGu/V,EAAOxrR,EAAM73E,EAAE8D,EAJb,CAKxB,CAWA,OAVGmnQ,EAAO,OAAMA,EAAO,MACvBvS,EAAIopU,YAAY,EAAG72T,GACnBvS,EAAIopU,YAAY,EAAG41B,GACnBh/V,EAAIopU,YAAY,EAAGz+N,GACnB3qG,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,GACnBppU,EAAIopU,YAAY,EAAG,GACZppU,CACR,CA1BA,CA3CwCsyV;AAEvC,IAAI,IAAI/qlB,EAAI,EAAGkuW,EAAM,EAAGluW,EAAI+qlB,EAAGzQ,WAAWr6kB,SAAUD,GAAO+qlB,EAAGxQ,OAAOwQ,EAAGzQ,WAAWt6kB,KAAO,CAAC,GAAG,SAASs3lB,GAAeh6d,EAAI,GAAM25d,EAAwBlM,EAAGzQ,WAAWt6kB,GAAIkuW;AAE1K,IAAIyoP,EAAQ;AACZ,IAAI32lB,EAAI,EAAGA,EAAI+qlB,EAAGzQ,WAAWr6kB,SAAUD,EAAG,CACzC,IAAIwkS,EAAKumT,EAAGxQ,OAAOwQ,EAAGzQ,WAAWt6kB;AACjC,GAAIwkS,GAAOA,EAAG,QAAd,CAKA,IAJA,IAAI5sN,EAAQmigB,GAAkBv1S,EAAG,SAC7Bk2S,EAAQnnkB,MAAM1T,QAAQ2kS,GACtB4+D,EAAO,GACPm0P,EAAQ90lB,KAAK8b,IAAIq5D,EAAM73E,EAAEQ,EAAG,MACxB0X,EAAI2/D,EAAM11E,EAAE3B,EAAG0X,GAAKs/kB,IAASt/kB,EAEpC,IADA,IAAI+pH,EAAKs3c,GAAWrhkB,GACZ8C,EAAI68D,EAAM11E,EAAE2B,EAAGkX,GAAK68D,EAAM73E,EAAE8D,IAAKkX,EAAG,CACxC9C,IAAM2/D,EAAM11E,EAAE3B,IAAG6iW,EAAKroV,GAAKw+jB,GAAWx+jB;AACzC,IAAI4jJ,EAAMykM,EAAKroV,GAAKinH,EAChByiP,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAKypR,EAAG7lI;AACnC8lN,GAAkB,KAAVA,EAAKjmX,IAEJ,KAAVimX,EAAKjmX,EACP84lB,GAAeh6d,EAAI,GAAMu5d,EAAgB5+kB,EAAG8C,EAAG47kB,EAAOlyO,EAAKzzW,IAI3DsmlB,GAAeh6d,EAAI,GAAMo5d,EAAez+kB,EAAG8C,EAAG47kB,EAFpC3c,GAAYv1N,GAEmC3kX,MAAM,EAAG,OAEpE,GAEC62lB,CAtBqB,CAuBxB,CAGA,OADAW,GAAeh6d,EAAI,GACZA,EAAGz+G,KACX,EA0lBCqwkB,YApyBD,SAA2B7vlB,EAAes5C,GACzC,OAAOA,EAAKn1C,MACX,IAAK,SAAU,OAAO6xlB,EAAsBp7B,EAAIX,EAAcj6jB,IAAKs5C;AACnE,IAAK,SAAU,OAAO08iB,EAAsBp7B,EAAI56jB,GAAIs5C;AACpD,IAAK,SACL,IAAK,QAAS,OAAO08iB,EAAsBh2lB,EAAGs5C,GAE/C,KAAM,oBAAsBA,EAAKn1C,IAClC,EA8xBD,CAtzBwB,GAm6BpBk0lB,GAAyB,WAC5B,IAAIC,EAASljB,GAAS,KAAMmjB,EAAUnjB,GAAS;AAE/C,SAASojB,EAAQt3lB,GAEhB,IAAI/B,EAAI+B,EAAEg8B,MAAMo7jB;AAChB,IAAIn5lB,EAAG,MAAO,CAACA,EAAE,IAAKwS,EAAE;AAExB,IAAI1Q,EAAc,CAAC9B,EAAE,IAAKwS,EAAEsikB,GAAY90kB,EAAE,KACtCs5lB,EAAMv3lB,EAAEg8B,MAAMq7jB;AAElB,OADGE,IAAKx3lB,EAAE4B,EArHZ,SAAmB41lB,GAClB,IAAI9zK,EAAO,CAAC,EAAGn6a,EAAIiulB,EAAIv7jB,MAAMq2iB,IAAW5ykB,EAAI,EACxCyof;AACJ,GAAG5+e,EAAG,KAAK7J,GAAG6J,EAAE5J,SAAUD,EAAG,CAC5B,IAAIkR,EAAI6hkB,GAAYlpkB,EAAE7J;AACtB,OAAOkR,EAAE,GAAGiP,QAAQ,QAAQ,KAG3B,IAAK,YAGL,IAAK,UAAW;AAGhB,IAAK,UACJ,IAAIjP,EAAE2hC,IAAK;AAEZ,IAAK,WACL,IAAK,YAAamxY,EAAK+zK,OAAS;AAAG;AACnC,IAAK,YAAa;AAGlB,IAAK,WACJ,GAAY,KAAT7mlB,EAAE2hC,IAAY;AACjBmxY,EAAK/hR,GAAKm2Z,EAAM7pjB,SAAS2C,EAAE2hC,IAAK;AAChC;AAGD,IAAK,WACJ,IAAI3hC,EAAE2hC,IAAK;AAEZ,IAAK,YACL,IAAK,aAAcmxY,EAAKg0K,QAAU;AAAG;AACrC,IAAK,aAAc;AAGnB,IAAK,SAAUh0K,EAAKl8a,KAAOoJ,EAAE2hC;AAAK;AAGlC,IAAK,MAAOmxY,EAAKhjJ,GAAK9vR,EAAE2hC;AAAK;AAG7B,IAAK,UACJ,IAAI3hC,EAAE2hC,IAAK;AAEZ,IAAK,WACL,IAAK,YAAamxY,EAAK3nB,OAAS;AAAG;AACnC,IAAK,YAAa;AAGlB,IAAK,KACJ,IAAInrZ,EAAE2hC,IAAK;AACX,OAAO3hC,EAAE2hC,KACR,IAAK,SAAUmxY,EAAKi0K,KAAO;AAAU;AACrC,IAAK,mBAAoBj0K,EAAKi0K,KAAO;AAAqB;AAC1D,IAAK,mBAAoBj0K,EAAKi0K,KAAO,oBAGvC,IAAK,MACL,IAAK,OAAQj0K,EAAKvib,EAAI;AAAG;AACzB,IAAK,OAAQ;AAGb,IAAK,KACJ,GAAY,KAATyP,EAAE2hC,IAAY;AAElB,IAAK,MACL,IAAK,OAAQmxY,EAAKrpa,EAAI;AAAG;AACzB,IAAK,OAAQ;AAGb,IAAK,KACJ,GAAY,KAATzJ,EAAE2hC,IAAY;AAElB,IAAK,MACL,IAAK,OAAQmxY,EAAKhkb,EAAI;AAAG;AACzB,IAAK,OAAQ;AAGb,IAAK,SACDkR,EAAE6mX,MAAKisD,EAAKh/a,MAAQkM,EAAE6mX,IAAIj4X,MAAM,EAAE;AACrC;AACD,IAAK,UAAW,IAAK,WAAY,IAAK,WAAY;AAGlD,IAAK,UAAWkkb,EAAK4/B,OAAS1yc,EAAE2hC;AAAK;AACrC,IAAK,WAAY,IAAK,YAAa,IAAK,YAAa;AAGrD,IAAK,aAAcmxY,EAAKk0K,OAAShnlB,EAAE2hC;AAAK;AACxC,IAAK,cAAe,IAAK,eAAgB,IAAK,eAG9C,IAAK,UACL,IAAK,WAAY,IAAK,YAAa,IAAK,YAGxC,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa;AACnD,IAAK,OAAQ41c;AAAa;AAC1B,IAAK,SAAUA;AAAc;AAC7B,QACC,GAA0B,KAAvBv3e,EAAE,GAAGwgC,WAAW,KAAc+2c,EAAM,MAAM,IAAIrof,MAAM,4BAA8B8Q,EAAE,IAE1F,CACA,OAAO8ya,CACR,CAzGA,CAqH0B8zK,EAAI,KACrBx3lB,CACR,CACA,IAAI63lB,EAAS,gBAAiBC,EAAO;AACrC,OAAO,SAAkB/xc,GACxB,OAAOA,EAAGlmI,QAAQg4kB,EAAO,IAAIxglB,MAAMyglB,GAAM90kB,IAAIu0kB,GAAS5xkB,OAAO,SAAS1lB,GAAK,OAAOA,EAAEyQ,CAAG,EACxF,CACD,CAjB6B,GAqBzBqnlB,GAA2B,WAC9B,IAAIC,EAAU;AAyBd,SAASC,EAAUh4lB,GAClB,IAAIi4lB,EAAmD,CAAC,GAAGj4lB,EAAEyQ,EAAE;AAC/D,OAAIzQ,EAAEyQ,GAEHzQ,EAAE2B,GA5BN,SAAoB8hb,EAAM2mG,EAAOS,GAChC,IAAI/9gB,EAA0B;AAE3B22a,EAAKvib,GAAG4L,EAAM/F,KAAK,+BACnB08a,EAAKi0K,MAAM5qlB,EAAM/F,KAAK,wBAA0B08a,EAAKi0K,KAAO,KAC5Dj0K,EAAKhjJ,IAAI3zR,EAAM/F,KAAK,aAAe08a,EAAKhjJ,GAAK,OAC7CgjJ,EAAKg0K,SAAS3qlB,EAAM/F,KAAK,yBACzB08a,EAAK+zK,QAAQ1qlB,EAAM/F,KAAK,sBAC3BqjhB,EAAMrjhB,KAAK,gBAAkB+F,EAAMmK,KAAK,IAAM,MAE3Cwsa,EAAKrpa,IAAKgwgB,EAAMrjhB,KAAK,OAAQ8jhB,EAAM9jhB,KAAK,SACxC08a,EAAKhkb,IAAK2qhB,EAAMrjhB,KAAK,OAAQ8jhB,EAAM9jhB,KAAK,SACxC08a,EAAK3nB,SAAUsuH,EAAMrjhB,KAAK,OAAQ8jhB,EAAM9jhB,KAAK;AAEhD,IAAI88a,EAAQJ,EAAKk0K,QAAU;AACf,eAAT9zK,GAAmC,SAATA,EAAkBA,EAAQ,MACtC,aAATA,IAAsBA,EAAQ,OAC1B,IAATA,IAAeumG,EAAMrjhB,KAAK,IAAM88a,EAAQ,KAAMgnG,EAAM9jhB,KAAK,KAAO88a,EAAQ,MAE3EgnG,EAAM9jhB,KAAK,UAEZ,CArBA,CA4BoB/G,EAAE2B,EAAGs2lB,EAAM,GAAIA,EAAM,IAEjCA,EAAM,GAAGhhlB,KAAK,IAAMghlB,EAAM,GAAGr4kB,QAAQm4kB,EAAQ,SAAWE,EAAM,GAAGhhlB,KAAK,KAJ7D,EAKjB,CAEA,OAAO,SAAkB6uI,GACxB,OAAOA,EAAG/iI,IAAIi1kB,GAAW/glB,KAAK,GAC/B,CACD,CAtC+B,GAyC3BihlB,GAAW,0CAA2CC,GAAW,eACjEC,GAAa;AACjB,SAASC,GAASlylB,EAAGiyC,GACpB,IAAI1uB,GAAO0uB,GAAOA,EAAKkgjB,SACnBn+kB,EAAI,CAAC;AACT,OAAIhU,GAIDA,EAAE61B,MAAM,0BACV7hB,EAAElc,EAAI80kB,GAAYkB,GAAS9tkB,EAAE5G,MAAM4G,EAAE6C,QAAQ,KAAK,GAAGoO,MAAM,kBAAkB,IAAI,KACjF+C,EAAEna,EAAIi0kB,GAAS9tkB,GACZujB,IAAMvP,EAAEja,EAAIqzkB,GAAWp5jB,EAAElc,KAGZkI,EAAE61B,MAAMm8jB,MACxBh+kB,EAAEna,EAAIi0kB,GAAS9tkB,GACfgU,EAAElc,EAAI80kB,GAAYkB,IAAU9tkB,EAAEyZ,QAAQw4kB,GAAY,IAAIp8jB,MAAMk8jB,KAAW,IAAIjhlB,KAAK,IAAI2I,QAAQyyjB,GAAS,MAClG3ojB,IAAMvP,EAAEja,EAAI43lB,GAAWX,GAASh9kB,EAAEna,MAI/Bma,GAjBO,CAAElc,EAAG,GAkBpB,CAGA,IAAIs6lB,GAAQ,iDACRC,GAAQ,6BACRC,GAAQ,8BAiBRC,GAAe;AACnB,SAASC,GAAcC,EAAaxgjB,GACnC,IAAIA,EAAKygjB,QAAS,MAAO;AACzB,IAAI94lB,EAAI,CAACmykB;AACTnykB,EAAEA,EAAEL,QAAWq1kB,GAAU,MAAO,KAAM,CACrC5sB,MAAOitB,GAAW,GAClB91b,MAAOs5c,EAAIE,MACXC,YAAaH,EAAII;AAElB,IAAI,IAAIv5lB,EAAI,EAAGA,GAAKm5lB,EAAIl5lB,SAAUD,EAAK,GAAa,MAAVm5lB,EAAIn5lB,GAAP,CACtC,IAAIkC,EAAiBi3lB,EAAIn5lB,GACrBw5lB,EAAQ;AACTt3lB,EAAE3B,EAAGi5lB,GAASt3lB,EAAE3B,GAElBi5lB,GAAS,KACLt3lB,EAAE1D,IAAG0D,EAAE1D,EAAI,IACZ0D,EAAE1D,EAAE+9B,MAAM08jB,MAAeO,GAAS,yBACrCA,GAAS,IAAM7lB,GAAUzxkB,EAAE1D,GAAK,QAEjCg7lB,GAAS,QACTl5lB,EAAEA,EAAEL,QAAWu5lB,CAX0C,CAc1D,OADGl5lB,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAW,SAAWK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MAC1D7f,EAAEkX,KAAK,GACf,CAuCA,IAAIiilB,GAvoKJ,SAAuB97jB,EAAkBr9B,GAExC,IAAIk7kB;AAGJ,OAH4B,MAALl7kB,IAAak7kB,KAAcl7kB,EAAI4kkB,GAAQ,GAAK,EAAIvniB,EAAIn/B,EAAEyB,SAC7EK,EAAEuhkB,YAAY,EAAG,GACjB0Z,GAAmB59iB,EAAIn/B,EAAG8B,GACnBk7kB,EAAQl7kB,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,CAClC;AAmoKA,SAASo5lB,GAAcP,GACtB,IAAI77d,EAAKi7c;AACTM,GAAav7c,EAAI,IAXlB,SAA2B67d,EAAK74lB,GAI/B,OAHIA,IAAGA,EAAI4kkB,GAAQ,IACnB5kkB,EAAEuhkB,YAAY,EAAGs3B,EAAIE,OACrB/4lB,EAAEuhkB,YAAY,EAAGs3B,EAAII,QACdj5lB,CACR,CALA,CAW8D64lB;AAC7D,IAAI,IAAIn5lB,EAAI,EAAGA,EAAIm5lB,EAAIl5lB,SAAUD,EAAG64kB,GAAav7c,EAAI,GAAyBm8d,GAAiBN,EAAIn5lB;AAGnG,OADA64kB,GAAav7c,EAAI,KACVA,EAAGz+G,KACX,CACA,SAAS86kB,GAASh8jB,GACjB,QAAuB,IAAb+6hB,EAA0B,OAAOA,EAASjrR,MAAMv/N,OAAOgqf,EAAcv6hB;AAE/E,IADA,IAAIr9B,EAAsB,GAAI2oI,EAAKtrG,EAAIhmB,MAAM,IACrC3X,EAAI,EAAGA,EAAIipI,EAAGhpI,SAAUD,EAAGM,EAAEN,GAAKipI,EAAGjpI,GAAG0xC,WAAW;AAC3D,OAAOpxC,CACR,CAGA,SAASs5lB,GAAoB3iZ,EAAMh3M,GAClC,IAAIK,EAAY,CAAC;AAKjB,OAJAA,EAAEu5lB,MAAQ5iZ,EAAKgrX,WAAW,GAC1B3hkB,EAAEw5lB,MAAQ7iZ,EAAKgrX,WAAW,GAEvBhikB,GAAU,IAAGg3M,EAAKx6M,GAAKwD,EAAS,GAC5BK,CACR,CAaA,SAASy5lB,GAAwB9iZ,GAOhC,IANA,IAAIvgL,EAAMugL,EAAKgrX,WAAW,GACtBpjjB,EAAMo4L,EAAKx6M,EAAIi6B,EAAM,EACrBp2B,EAAI,CAAC,EACL4tW,EAAMj3J,EAAKgrX,WAAW,GACtB+3B,EAAwC,GAEtC9rP,KAAQ,GAAG8rP,EAAM1ylB,KAAK,CAAE9I,EAAGy4M,EAAKgrX,WAAW,GAAIjxjB,EAAGimM,EAAKgrX,WAAW,EAAG;AAG3E,GAFA3hkB,EAAEwH,KAAOmvM,EAAKgrX,WAAW,EAAG,QAC5B3hkB,EAAE05lB,MAAQA,EACP/iZ,EAAKx6M,GAAKoiB,EAAK,MAAM,IAAIze,MAAM,0BAA4B62M,EAAKx6M,EAAI,OAASoiB;AAChF,OAAOve,CACR,CA6CA,SAAS25lB,GAAuBhjZ,EAAMh3M,GACrC,IAAIwoc,EAAMxxP,EAAKx6M,EAAIwD,EACfK,EAAI,CAAC;AACTA,EAAE45lB,MAA8B,GAArBjjZ,EAAKgrX,WAAW,GAC3BhrX,EAAKx6M,GAAK,EACV6D,EAAE65lB,MAAQljZ,EAAKgrX,WAAW;AAC1B,IAAIj+S;AACJ,OAAO1jR,EAAE65lB,OACR,KAAK,MAAQ,KAAK,MAAQ,KAAK,MAAQn2U,EAAoB,IAAX1jR,EAAE45lB;AAAgB;AAClE,KAAK,MAAQl2U,EAAoB,GAAX1jR,EAAE45lB;AAAgB;AACxC,KAAK,EAAGl2U,EAAoB,IAAX1jR,EAAE45lB,OAA4B,GAAX55lB,EAAE45lB,OAA4B,IAAX55lB,EAAE45lB;AAAgB;AACzE,QAAS,KAAM,sCAAwC55lB,EAAE65lB,MAE1D,IAAIn2U,EAAO,MAAM,IAAI5jR,MAAM;AAO3B,OANAE,EAAE85lB,UAAYnjZ,EAAKgrX,WAAW,GAC9B3hkB,EAAE+5lB,QAAUpjZ,EAAKgrX,WAAW,GAC5B3hkB,EAAEg6lB,aAAerjZ,EAAKgrX,WAAW,GACjChrX,EAAKx6M,GAAK,EACV6D,EAAEi6lB,QAAUtjZ,EAAKgrX,WAAYx5H,EAAIxxP,EAAKx6M,GAAI,EAAG,WAC7Cw6M,EAAKx6M,EAAIgsc,EACFnoc,CACR,CAGA,SAASk6lB,GAAyBvjZ,EAAMh3M,GACvC,IAAIK,EAAI,CAAC,EAAGmoc,EAAMxxP,EAAKx6M,EAAIwD;AAM3B,OALAg3M,EAAKx6M,GAAK,EACV6D,EAAEm6lB,KAAOxjZ,EAAKn3M,MAAMm3M,EAAKx6M,EAAGw6M,EAAKx6M,EAAE,IAAKw6M,EAAKx6M,GAAK,GAClD6D,EAAEo6lB,SAAWzjZ,EAAKn3M,MAAMm3M,EAAKx6M,EAAGw6M,EAAKx6M,EAAE,IAAKw6M,EAAKx6M,GAAK,GACzCw6M,EAAKgrX,WAAW,GAC7B3hkB,EAAEq6lB,aAAe1jZ,EAAKn3M,MAAMm3M,EAAKx6M,EAAGgsc,GAAMxxP,EAAKx6M,EAAIgsc,EAC5Cnoc,CACR,CAcA,SAASs6lB,GAAiB3jZ,GAEzB,GAAqB,KAAT,GADAA,EAAKgrX,WAAW,IACD,MAAM,IAAI7hkB,MAAM;AAC3C,IAAI4gS,EAAK/pF,EAAKgrX,WAAW;AAIzB,MAAO,CAAEzjkB,EAAE,MAAOiC,EAFRw5lB,GAAuBhjZ,EAAM+pF,GAEdhwR,EADVwplB,GAAyBvjZ,EAAMA,EAAKh3M,OAASg3M,EAAKx6M,GAElE,CAEA,SAASo+lB,KAAqC,MAAM,IAAIz6lB,MAAM,kDAAoD,CAElH,SAAS06lB,GAAiB7jZ,GACzB,IAAI8jZ,EAAU,CAAC,WAAW,YAAY,UAAU,WAAW,kBAAkB,iBAAiB,gBAAgB;AAC9G9jZ,EAAKx6M,GAAG;AACR,IAAIowkB,EAAM51X,EAAKgrX,WAAWhrX,EAAKh3M,OAASg3M,EAAKx6M,EAAG,QAC5C6D,EAAI,CAAC;AAiBT,OAhBAuskB,EAAI1sjB,QAAQyyjB,GAAU,SAAmBlskB,GACxC,IAAIwK,EAAY6hkB,GAAYrskB;AAC5B,OAAOyskB,GAASjikB,EAAE,KACjB,IAAK,QACL,IAAK,cAAe,IAAK,gBAIzB,IAAK,mBAGL,IAAK,kBAAmB;AANxB,IAAK,WAAY6plB,EAAQ7glB,QAAQ,SAASkB,GAAK9a,EAAE8a,GAAKlK,EAAEkK,EAAI;AAAI;AAChE,IAAK,iBAAkB9a,EAAE06lB,iBAAmB9plB,EAAE8plB,iBAAkB16lB,EAAE26lB,mBAAqB/plB,EAAE+plB;AAAoB;AAC7G,IAAK,kBAAmB,IAAK,iBAAkB36lB,EAAE46lB,KAAO;AAAI;AAG5D,IAAK,gBAAiB56lB,EAAE66lB,IAAMjqlB,EAAEiqlB;AAAK;AAErC,IAAK,gBAAiB76lB,EAAE46lB,KAAK5zlB,KAAK4J;AAAI;AACtC,QAAS,MAAMA,EAAE,GAEnB,GACO5Q,CACR,CA0BA,SAAS86lB,GAAsCC,GAC9C,IAAuBC,EAEet7lB,EAFlC06lB,EAAW,EACXa,EAAkB5B,GAAS0B,GAC3B3kkB,EAAM6kkB,EAAgBt7lB,OAAS;AAInC,KAFAq7lB,EAAgBzhC,EAAYnjiB,IACd,GAAK6kkB,EAAgBt7lB,OAC/BD,EAAI,EAAGA,GAAK02B,IAAO12B,EAAGs7lB,EAAct7lB,GAAKu7lB,EAAgBv7lB,EAAE;AAC/D,IAAIA,EAAI02B,EAAI,EAAG12B,GAAK,IAAKA,EAKxB06lB,IAH6B,MAAXA,EAAqC,EAAJ,GAClCA,GAAY,EAAK,OAFnBY,EAAct7lB;AAM9B,OAAkB,MAAX06lB,CACR,CAGA,IAAIc,GAA8C,WACjD,IAAIC,EAAW,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAChGC,EAAc,CAAC,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,OAC/HC,EAAY,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,KAAQ,KAAQ,OAE70BC,EAAS,SAASC,EAAOC,GAAS,OADsB,MAAzCC,EAC8BF,EAAQC,GADhB,EAAW,IAALC;AAArC,IAASA,CAC8C;AAajE,OAAO,SAASvhZ,GAKf,IAJA,IAKIwhZ,EAAMC,EAAkBC,EALxBb,EAAW1B,GAASn/Y,GACpB2hZ,EAdsB,SAASd,GAGnC,IAFA,IAAIc,EAAST,EAAYL,EAASp7lB,OAAS,GACvCm8lB,EAAiB,IACbp8lB,EAAIq7lB,EAASp7lB,OAAO,EAAGD,GAAK,IAAKA,EAExC,IADA,IAAIq8lB,EAAOhB,EAASr7lB,GACZqlF,EAAI,EAAQ,GAALA,IAAUA,EACd,GAAPg3gB,IAAaF,GAAUR,EAAUS,IACpCC,GAAQ,IAAKD;AAGf,OAAOD,CACR,CAX2B,CAcQd,GAC9BiB,EAAQjB,EAASp7lB,OACjBs8lB,EAAmB1iC,EAAY,IAC3B75jB,EAAI,EAAQ,IAALA,IAAWA,EAAGu8lB,EAAiBv8lB,GAAK;AAUnD,IARmB,GAAfs8lB,IACHN,EAAOG,GAAU,EACjBI,EAAiBD,GAASV,EAAOH,EAAS,GAAIO,KAC5CM,EACFN,EAAgB,IAATG,EACPF,EAAmBZ,EAASA,EAASp7lB,OAAS,GAC9Cs8lB,EAAiBD,GAASV,EAAOK,EAAkBD,IAE9CM,EAAQ,GAEbN,EAAOG,GAAU,EACjBI,IAFED,GAEwBV,EAAOP,EAASiB,GAAQN,GAElDA,EAAgB,IAATG,EACPI,IAFED,GAEwBV,EAAOP,EAASiB,GAAQN;AAInD,IAFAM,EAAQ,GACRJ,EAAW,GAAKb,EAASp7lB,OACnBi8lB,EAAW,GAChBF,EAAOG,GAAU,EACjBI,EAAiBD,GAASV,EAAOH,EAASS,GAAWF,KAEnDE,EACFF,EAAgB,IAATG,EACPI,IAHED,GAGwBV,EAAOP,EAASiB,GAAQN,KAChDM,IACAJ;AAEH,OAAOK,CACR,CACD,CAvDkD,GA0G9CC,GAAoB,WACvB,SAASC,EAAap9lB,EAAes5C,GACpC,OAAOA,EAAKn1C,MACX,IAAK,SAAU,OAAOk5lB,EAAiBpjC,EAAcj6jB,GAAIs5C;AACzD,IAAK,SAAU,OAAO+jjB,EAAiBr9lB,EAAGs5C;AAC1C,IAAK,SAAU,OAAO+jjB,EAAiBnjC,GAAWC,OAAOgB,SAASn7jB,GAAKA,EAAE0Q,SAAS,UAAYqqjB,EAAI/6jB,GAAIs5C;AACtG,IAAK,QAAU,OAAO+jjB,EAAiB7rB,GAAOxxkB,GAAIs5C,GAEnD,MAAM,IAAIv4C,MAAM,qBAAuBu4C,EAAKn1C,KAC7C,CAGA,SAASk5lB,EAAiB/+jB,EAAgBgb,GACzC,IACI6rP,GADI7rP,GAAQ,CAAC,GACQ+hiB,MAAS,GAAe,CAAC,EAE9C1vU,EAAOrtO,EAAIpB,MAAM;AACrB,IAAIyuO,EAAK/qQ,OAAQ,MAAM,IAAIG,MAAM;AACjC,IAAIw3E,EAAmB,CAAC11E,EAAG,CAAC2B,EAAE,EAAGtD,EAAE,GAAIR,EAAG,CAAC8D,EAAE,EAAGtD,EAAEyqQ,EAAK/qQ,OAAS;AA0BhE,OAzBA+qQ,EAAK9wP,QAAQ,SAASyilB,EAAO1klB,GACzB1E,MAAM1T,QAAQ2kS,KAAKA,EAAGvsR,GAAK;AAK9B,IAJA,IAEIqvJ,EAFAs1b,EAAQ,WACRC,EAAa,EAEb9hlB,GAAK,EACFusJ,EAAMs1b,EAAMz8lB,KAAKw8lB,IAAS,CAChC,GACM,WADCr1b,EAAI,GACV,CACC,IAAI36I,EAAOgwkB,EAAM78lB,MAAM+8lB,EAAYD,EAAM/qjB,UAAYy1H,EAAI,GAAGrnK;AAG5D,GAFc,KAAX0sB,EAAK,KAAWA,EAAOA,EAAK7sB,MAAM,MACnCib,EACC4R,EAAK1sB,OAAQ,CAEf,IAAIwkX,EAAO,CAACzzW,EAAG2b,EAAMnuB,EAAE;AACpB+U,MAAM1T,QAAQ2kS,GAAKA,EAAGvsR,GAAG8C,GAAK0pW,EAC5BjgF,EAAG40S,GAAY,CAAC74kB,EAAE0X,EAAGpU,EAAEkX,KAAO0pW,CACpC,CACA,CAEFo4O,EAAaD,EAAM/qjB,SACpB,CACG92B,EAAI68D,EAAM73E,EAAE8D,IAAG+zE,EAAM73E,EAAE8D,EAAIkX,EAC/B,GACAypR,EAAG,QAAUs1S,GAAaligB,GACnB4sN,CACR,CAyBA,MAAO,CACN0qT,YAxBD,SAAyB7vlB,EAAes5C,GAAqB,OAAOyhiB,GAAkBqiB,EAAap9lB,EAAGs5C,GAAOA,EAAO,EAyBnHw2iB,SAAUsN,EACVrN,WAvBD,SAAsB5qT,GAIrB,IAHA,IACuCigF,EADnCnkX,EAAI,CAAC,iBACLC,EAAIw5kB,GAAkBv1S,EAAG,SACzBk2S,EAAQnnkB,MAAM1T,QAAQ2kS,GAClBvsR,EAAI1X,EAAE2B,EAAE3B,EAAG0X,GAAK1X,EAAER,EAAEQ,IAAK0X,EAAG,CACnC3X,EAAEgH,KAAK;AACP,IAAI,IAAIyT,EAAIxa,EAAE2B,EAAE2B,EAAGkX,GAAKxa,EAAER,EAAE8D,IAAKkX,EAAGza,EAAEgH,KAAK,WAAayT,EAAE;AAE1D,IADAza,EAAEgH,KAAK,iBACHyT,EAAIxa,EAAE2B,EAAE2B,EAAGkX,GAAKxa,EAAER,EAAE8D,IAAKkX,EAAG,CAC/B,IAAIuX,EAAQ8mjB,GAAY,CAAC74kB,IAAIsD,EAAEkX,KAC/B0pW,EAAOi2N,GAASl2S,EAAGvsR,IAAI,IAAI8C,GAAIypR,EAAGlyQ,MACZ,MAAVmyV,EAAKzzW,GAAeyzW,EAAK74W,IAAK64W,EAAKxkS,KAC/C3/E,EAAEgH,KAAK,KAAOm9W,EAAKlwW,IAAMylkB,GAAYv1N,GAAOA,EAAKlwW,KACjDjU,EAAEgH,KAAK,UACR,CACAhH,EAAEgH,KAAK,qBACR,CACA,OAAOhH,EAAEkX,KAAK,IAAM,GACrB,EAOD,CA3EwB;AAgFxB,SAASsllB,GAAQ/kO,GAChB,IAAI,IAAI/3X,EAAE,EAAEM,EAAE,EAAM,GAAHN,IAAQA,EAAGM,EAAM,IAAFA,GAASy3X,EAAI/3X,GAAG,IAAI,IAAI+3X,EAAI/3X,GAAG,EAAE,EAAE+3X,EAAI/3X;AACvE,OAAOM,EAAEyP,SAAS,IAAIrM,cAAc5D,MAAM,EAC3C,CAoCA,SAASi9lB,GAASzlO,EAAKmmN,GACtB,GAAY,IAATA,EAAY,OAAOnmN;AACtB,IA7CgB72X,EACZH,EA4CA08lB,EApCL,SAAiBjlO,GAChB,IAAI9/W,EAAI8/W,EAAI,GAAG,IAAK3mS,EAAI2mS,EAAI,GAAG,IAAKv/V,EAAEu/V,EAAI,GAAG,IACzCz6S,EAAI76E,KAAK+b,IAAIvG,EAAGm5E,EAAG54D,GAAI3uB,EAAIpH,KAAK8b,IAAItG,EAAGm5E,EAAG54D,GAAIzd,EAAIuiE,EAAIzzE;AAC1D,GAAS,IAANkR,EAAS,MAAO,CAAC,EAAG,EAAG9C;AAE1B,IAAYlb,EAARkgmB,EAAK,EAAUC,EAAM5/gB,EAAIzzE;AAE7B,OADA9M,EAAIge,GAAKmilB,EAAK,EAAI,EAAIA,EAAKA,GACpB5/gB,GACN,KAAKrlE,EAAGgllB,IAAO7rgB,EAAI54D,GAAKzd,EAAI,GAAG;AAAG;AAClC,KAAKq2E,EAAG6rgB,GAAOzkkB,EAAIvgB,GAAK8C,EAAI;AAAI;AAChC,KAAKyd,EAAGykkB,GAAOhllB,EAAIm5E,GAAKr2E,EAAI,EAE7B,MAAO,CAACkilB,EAAK,EAAGlgmB,EAAGmgmB,EAAK,EACzB,CAbA,EARK58lB,GADYG,EA6CU62X,GA5ChBx3X,MAAa,MAAPW,EAAE,GAAS,EAAE,GAAGX,MAAM,EAAE,GACjC,CAACyO,SAASjO,EAAER,MAAM,EAAE,GAAG,IAAIyO,SAASjO,EAAER,MAAM,EAAE,GAAG,IAAIyO,SAASjO,EAAER,MAAM,EAAE,GAAG;AA8ClF,OAFck9lB,EAAI,GAAdvf,EAAO,EAAYuf,EAAI,IAAM,EAAIvf,GACvB,GAAK,EAAIuf,EAAI,KAAO,EAAIvf,GAC/Bqf,GAxBR,SAAiBE,GAChB,IAIIxrgB,EAJAlQ,EAAI07gB,EAAI,GAAIjgmB,EAAIigmB,EAAI,GAAI19lB,EAAI09lB,EAAI,GAChCjilB,EAAQ,EAAJhe,GAASuC,EAAI,GAAMA,EAAI,EAAIA,GAAIuK,EAAIvK,EAAIyb,EAAE,EAC7Cg9W,EAAM,CAACluX,EAAEA,EAAEA,GAAI0/d,EAAK,EAAEjoZ;AAG1B,GAAS,IAANvkF,EAAS,OAAU,EAAHwse,GAClB,KAAK,EAAG,KAAK,EAAG/3Y,EAAIz2E,EAAIwud,EAAIxxG,EAAI,IAAMh9W,EAAGg9W,EAAI,IAAMvmS;AAAG;AACtD,KAAK,EAAGA,EAAIz2E,GAAK,EAAIwud,GAAOxxG,EAAI,IAAMvmS,EAAGumS,EAAI,IAAMh9W;AAAG;AACtD,KAAK,EAAGy2E,EAAIz2E,GAAKwud,EAAK,GAAMxxG,EAAI,IAAMh9W,EAAGg9W,EAAI,IAAMvmS;AAAG;AACtD,KAAK,EAAGA,EAAIz2E,GAAK,EAAIwud,GAAOxxG,EAAI,IAAMvmS,EAAGumS,EAAI,IAAMh9W;AAAG;AACtD,KAAK,EAAGy2E,EAAIz2E,GAAKwud,EAAK,GAAMxxG,EAAI,IAAMh9W,EAAGg9W,EAAI,IAAMvmS;AAAG;AACtD,KAAK,EAAGA,EAAIz2E,GAAK,EAAIwud,GAAOxxG,EAAI,IAAMvmS,EAAGumS,EAAI,IAAMh9W,EAEpD,IAAI,IAAI/a,EAAI,EAAQ,GAALA,IAAUA,EAAG+3X,EAAI/3X,GAAKyC,KAAKG,MAAa,IAAPm1X,EAAI/3X;AACpD,OAAO+3X,CACR,CAhBA,CAwBwBilO,GACxB,CAIA,IAA4CG,GAA9B;AACd,SAASjK,GAASzllB,GAAS,OAAOhL,KAAKE,OAAQ8K,EAAShL,KAAKG,MAAM,IAAIu6lB,IAAM,KAAOA,GAAO,CAC3F,SAAShK,GAAQiK,GAAM,OAAQ36lB,KAAKE,OAAOy6lB,EAAK,GAAGD,GAAM,IAAM,IAAM,GAAK,CAC1E,SAASE,GAAWC,GAAO,OAAQ76lB,KAAKG,OAAO06lB,EAAMH,GAAM,GAAGA,GAAI,KAAM,GAAK,CAG7E,SAASI,GAAYC,GAAS,OAAOH,GAAWlK,GAAQD,GAASsK,IAAU,CAE3E,SAASC,GAAcD,GACtB,IAAI7id,EAAQl4I,KAAKqN,IAAI0tlB,EAAQD,GAAYC,IAASE,EAAOP;AACzD,GAAGxid,EAAQ,KAAO,IAAIwid,GAVkB,EAULA,GAVT,KAUwBA,GAAQ16lB,KAAKqN,IAAI0tlB,EAAQD,GAAYC,KAAW7id,IAASA,EAAQl4I,KAAKqN,IAAI0tlB,EAAQD,GAAYC,IAASE,EAAOP;AAChKA,GAAMO,CACP,CAaA,SAASlL,GAAY97X,GACjBA,EAAKjpN,OACPipN,EAAKu8X,IAAMC,GAASx8X,EAAKjpN,OACzBipN,EAAKs4X,IAAMmE,GAAQz8X,EAAKu8X,KACxBv8X,EAAKymY,IAAMA,IACFzmY,EAAKu8X,KACdv8X,EAAKs4X,IAAMmE,GAAQz8X,EAAKu8X,KACxBv8X,EAAKjpN,MAAQ4vlB,GAAW3mY,EAAKs4X,KAC7Bt4X,EAAKymY,IAAMA,IACiB,iBAAZzmY,EAAKs4X,MACrBt4X,EAAKjpN,MAAQ4vlB,GAAW3mY,EAAKs4X,KAC7Bt4X,EAAKu8X,IAAMC,GAASx8X,EAAKjpN,OACzBipN,EAAKymY,IAAMA,IAETzmY,EAAKinY,oBAAoBjnY,EAAKinY,WAClC,CAGA,SAASvK,GAAMgK,GAAM,OAAY,GAALA,EADd,EAC6B,CAC3C,SAASzK,GAAMzxlB,GAAM,OAFP,GAEcA,EAAW,EAAI,CAG3C,IAAI08lB,GAAqB,CACxBC,KAAQ,OACRC,MAAS,QACTC,OAAU,aACVC,OAAU,WACVC,OAAU,YACVC,WAAc,iBACdC,WAAc,eACdC,kBAAqB,WACrBC,WAAc,SACdC,UAAa,WACbC,eAAkB,cAClBC,eAAkB,kBAClBC,eAAkB,gBAClBC,sBAAyB,YACzBC,cAAiB,aAgTdC,GAAc,CAAE,WAAY,SAAU,SAAU,WAAY,QAC5DC,GAAc,CAAE,iBAAkB,cAAe,YAAa,YAAa,oBAAqB,kBAAmB,cAAe,eAqElIC,GAA6B,WACjC,IAAIC,EAAc,wDACdC,EAAc,wDACdC,EAAa,oDACbC,EAAa,oDACbC,EAAe;AAEnB,OAAO,SAAuBxykB,EAAMyykB,EAAQzmjB,GAC3C,IAIIn6C,EAJAuL,EAAS,CAAC;AACd,OAAI4iB,IAMAnuB,GALJmuB,EAAOA,EAAKxM,QAAQ,sBAAsB,IAAIA,QAAQ,+BAA+B,KAK1Eoc,MAAMwikB,KA5HlB,SAAuBvgmB,EAAGuL,EAAQ4uC,GACjC5uC,EAAOs1lB,UAAY;AAEnB,IADA,IAAIjklB,EAAsBg9B,GAAK+ihB,GACvBn7jB,EAAE,EAAGA,EAAIob,EAAEnb,SAAUD,EAAG+J,EAAOs1lB,UAAUjklB,EAAEpb,IAAMm7jB,EAAU//iB,EAAEpb;AACrE,IAAI6J,EAAIrL,EAAE,GAAG+9B,MAAMq2iB;AACnB,GAAI/okB,EACJ,IAAI7J,EAAE,EAAGA,EAAI6J,EAAE5J,SAAUD,EAAG,CAC3B,IAAIkR,EAAI6hkB,GAAYlpkB,EAAE7J;AACtB,OAAOmzkB,GAASjikB,EAAE,KACjB,IAAK,WAAY,IAAK,aAAc,IAAK,aAAc,IAAK,YAY5D,IAAK,YAAa;AAXlB,IAAK,UACJ,IAAItF,EAAE0nkB,GAAYkB,GAAStjkB,EAAEoulB,aAAcj6gB,EAAE92E,SAAS2C,EAAEipkB,SAAS;AAEjE,GADApwkB,EAAOs1lB,UAAUh6gB,GAAKz5E,EACnBy5E,EAAE,EAAG,CACP,GAAGA,EAAI,IAAO,CACb,IAAIA,EAAI,IAAOA,EAAI,IAAqC,MAAvBt7E,EAAOs1lB,UAAUh6gB,KAAvBA,GAC3Bt7E,EAAOs1lB,UAAUh6gB,GAAKz5E,CACvB,CACA8zjB,GAAS9zjB,EAAEy5E,EACZ,CACC;AAEF,QAAS,GAAG1sC,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,gBAAkB8Q,EAAE,GAAK,eAEjE,CACD,CAzBA,CA4H+C1S,EAAGuL,EAAQ4uC,IAGrDn6C,EAAEmuB,EAAK4P,MAAM2ikB,KAvPlB,SAAqB1gmB,EAAGuL,EAAQq1lB,EAAQzmjB,GACvC5uC,EAAOw1lB,MAAQ;AACf,IAAIv7K,EAAO,CAAC,EACRykE,MACHjqf,EAAE,GAAG+9B,MAAMq2iB,KAAW,IAAI14jB,QAAQ,SAASxT,GAC3C,IAAIwK,EAAI6hkB,GAAYrskB;AACpB,OAAOyskB,GAASjikB,EAAE,KACjB,IAAK,SAAU,IAAK,UAAW,IAAK,WAGpC,IAAK,QAAS,IAAK,SAQnB,IAAK,UAAW,IAAK,UA2CrB,IAAK,QAAS,IAAK,QAInB,IAAK,eAAgB,IAAK,eAI1B,IAAK,YAAa,IAAK,YAIvB,IAAK,YAAa,IAAK,YA6BvB,IAAK,WAAY,IAAK,WAOtB,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa;AAlGnD,IAAK,UAAW,IAAK,UACpBnH,EAAOw1lB,MAAMj4lB,KAAK08a,GAClBA,EAAO,CAAC;AACR;AAGD,IAAK,QAAY9ya,EAAE2hC,MAAKmxY,EAAKl8a,KAAO0skB,GAAStjkB,EAAE2hC;AAAM;AAIrD,IAAK,KAAMmxY,EAAKroB,KAAOzqZ,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AACxD,IAAK,OAAQmxY,EAAKroB,KAAO;AAAG;AAG5B,IAAK,KAAMqoB,EAAK9nB,OAAShrZ,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AAC1D,IAAK,OAAQmxY,EAAK9nB,OAAS;AAAG;AAG9B,IAAK,KACJ,OAAOhrZ,EAAE2hC,KACR,IAAK,OAAQmxY,EAAK8gC,UAAY;AAAM;AACpC,IAAK,SAAU9gC,EAAK8gC,UAAY;AAAM;AACtC,IAAK,SAAU9gC,EAAK8gC,UAAY;AAAM;AACtC,IAAK,mBAAoB9gC,EAAK8gC,UAAY;AAAM;AAChD,IAAK,mBAAoB9gC,EAAK8gC,UAAY,GACzC;AACH,IAAK,OAAQ9gC,EAAK8gC,UAAY;AAAG;AAGjC,IAAK,UAAW9gC,EAAK3nB,OAASnrZ,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AAC/D,IAAK,YAAamxY,EAAK3nB,OAAS;AAAG;AAGnC,IAAK,WAAY2nB,EAAKg0K,QAAU9mlB,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AACjE,IAAK,aAAcmxY,EAAKg0K,QAAU;AAAG;AAGrC,IAAK,UAAWh0K,EAAK+zK,OAAS7mlB,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AAC/D,IAAK,YAAamxY,EAAK+zK,OAAS;AAAG;AAGnC,IAAK,YAAa/zK,EAAKw7K,SAAWtulB,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AACnE,IAAK,cAAemxY,EAAKw7K,SAAW;AAAG;AAGvC,IAAK,UAAWx7K,EAAKxkb,OAAS0R,EAAE2hC,IAAMqhiB,GAAahjkB,EAAE2hC,KAAO;AAAG;AAC/D,IAAK,YAAamxY,EAAKxkb,OAAS;AAAG;AAGnC,IAAK,MAAU0R,EAAE2hC,MAAKmxY,EAAKhjJ,IAAM9vR,EAAE2hC;AAAK;AAIxC,IAAK,aAAiB3hC,EAAE2hC,MAAKmxY,EAAKy7K,UAAYvulB,EAAE2hC;AAAK;AAIrD,IAAK,UAAc3hC,EAAE2hC,MAAKmxY,EAAK4/B,OAASr1c,SAAS2C,EAAE2hC,IAAI;AAAK;AAI5D,IAAK,UAAc3hC,EAAE2hC,MAAKmxY,EAAKt8R,OAASx2I,EAAE2hC;AAAK;AAI/C,IAAK,WACJ,GAAY,KAAT3hC,EAAE2hC,IAAY;AACjB3hC,EAAE29kB,SAAWz2B,EAAM7pjB,SAAS2C,EAAE2hC,IAAK;AACnC;AAGD,IAAK,SAIJ,GAHImxY,EAAKh/a,QAAOg/a,EAAKh/a,MAAQ,CAAC,GAC3BkM,EAAEqqP,OAAMyoL,EAAKh/a,MAAMu2P,KAAO24U,GAAahjkB,EAAEqqP,OAEzCrqP,EAAE6mX,IAAKisD,EAAKh/a,MAAM+yX,IAAM7mX,EAAE6mX,IAAIj4X,OAAO;KACnC,GAAGoR,EAAEwulB,QAAS,CAClB17K,EAAKh/a,MAAMyD,MAAQ8F,SAAS2C,EAAEwulB,QAAS;AACvC,IAAIC,EAAM1hB,GAAOj6J,EAAKh/a,MAAMyD;AACL,IAApBu7a,EAAKh/a,MAAMyD,QAAak3lB,EAAM1hB,GAAO,IACpC0hB,IAAKA,EAAM1hB,GAAO,IACtBj6J,EAAKh/a,MAAM+yX,IAAM4nO,EAAI,GAAG5vlB,SAAS,IAAM4vlB,EAAI,GAAG5vlB,SAAS,IAAM4vlB,EAAI,GAAG5vlB,SAAS,GAC9E,MAAUmB,EAAEoqT,QACX0oH,EAAKh/a,MAAMs2T,MAAQ/sT,SAAS2C,EAAEoqT,MAAO,IAClCpqT,EAAEuskB,OAAMz5J,EAAKh/a,MAAMy4kB,KAAO51jB,WAAW3W,EAAEuskB,OACvCvskB,EAAEoqT,OAAS8jS,EAAOQ,eAAiBR,EAAOQ,cAAcC,YAC1D77K,EAAKh/a,MAAM+yX,IAAMglO,GAASqC,EAAOQ,cAAcC,UAAU77K,EAAKh/a,MAAMs2T,OAAOy8D,IAAKisD,EAAKh/a,MAAMy4kB,MAAQ;AAIrG;AAID,IAAK,oBAKL,IAAK,OAAQh1F;AAAa;AAJ1B,IAAK,sBAKL,IAAK,SAAUA;AAAc;AAC7B,QAAS,GAAG9vc,GAAQA,EAAKu8hB,MACpBzsF,EAAM,MAAM,IAAIrof,MAAM,gBAAkB8Q,EAAE,GAAK,aAGtD,EACD,CArHA,CAuP4C1S,EAAGuL,EAAQq1lB,EAAQzmjB,IAG1Dn6C,EAAEmuB,EAAK4P,MAAM0ikB,KA5TlB,SAAqBzgmB,EAAGuL,EAAQq1lB,EAAQzmjB,GACvC5uC,EAAO+1lB,MAAQ;AACf,IAAI14L,EAAO,CAAC,EACRqhF,MACHjqf,EAAE,GAAG+9B,MAAMq2iB,KAAW,IAAI14jB,QAAQ,SAASxT,GAC3C,IAAIwK,EAAI6hkB,GAAYrskB;AACpB,OAAOyskB,GAASjikB,EAAE,KACjB,IAAK,SAAU,IAAK,UAAW,IAAK,WAKpC,IAAK,UAGL,IAAK,iBAQL,IAAK,iBAAkB,IAAK,iBAW5B,IAAK,aAAc,IAAK,aAUxB,IAAK,aAAc,IAAK,aAGxB,IAAK,QAAS,IAAK,UACnB,IAAK,UAGL,IAAK,SAAU,IAAK,WACpB,IAAK,WAGL,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa;AA7CnD,IAAK,SAAU,IAAK,QAAS,IAAK,UACjCk2Z,EAAO,CAAC,EAAGr9Z,EAAO+1lB,MAAMx4lB,KAAK8/Z;AAAO;AAKrC,IAAK,gBACL,IAAK,kBAAmBr9Z,EAAO+1lB,MAAMx4lB,KAAK8/Z,GAAOA,EAAO,CAAC;AAAG;AAG5D,IAAK,eAAgB,IAAK,gBACtBl2Z,EAAE6ulB,cAAa34L,EAAK24L,YAAc7ulB,EAAE6ulB;AACvC;AAID,IAAK,WACA34L,EAAKkiI,UAASliI,EAAKkiI,QAAU,CAAC,GAC/Bp4hB,EAAEwulB,UAASt4L,EAAKkiI,QAAQo2D,QAAUnxlB,SAAS2C,EAAEwulB,QAAS,KACtDxulB,EAAEoqT,QAAO8rG,EAAKkiI,QAAQhuO,MAAQ/sT,SAAS2C,EAAEoqT,MAAO,KAChDpqT,EAAEuskB,OAAMr2K,EAAKkiI,QAAQm0C,KAAO51jB,WAAW3W,EAAEuskB,OAEzCvskB,EAAE6mX,MAAKqvC,EAAKkiI,QAAQvxK,IAAM7mX,EAAE6mX,IAAIj4X,OAAO;AAC1C;AAID,IAAK,WACAsna,EAAK44L,UAAS54L,EAAK44L,QAAU,CAAC,GAC/B9ulB,EAAEoqT,QAAO8rG,EAAK44L,QAAQ1kS,MAAQ/sT,SAAS2C,EAAEoqT,MAAO,KAChDpqT,EAAEuskB,OAAMr2K,EAAK44L,QAAQviB,KAAO51jB,WAAW3W,EAAEuskB,OAEhC,MAATvskB,EAAE6mX,MAAaqvC,EAAK44L,QAAQjoO,IAAM7mX,EAAE6mX,IAAIj4X,OAAO;AAClD;AAaD,IAAK,OAAQ2of;AAAa;AAC1B,IAAK,SAAUA;AAAc;AAC7B,QAAS,GAAG9vc,GAAQA,EAAKu8hB,MACpBzsF,EAAM,MAAM,IAAIrof,MAAM,gBAAkB8Q,EAAE,GAAK,aAGtD,EACD,CA/DA,CA4T4C1S,EAAGuL,EAAQq1lB,EAAQzmjB,IAG1Dn6C,EAAEmuB,EAAK4P,MAAM4ikB,KA1YlB,SAAuB3gmB,EAAGuL,EAAQq1lB,EAAQzmjB,GACzC5uC,EAAOk2lB,QAAU;AACjB,IAAIn+a,EAAS,CAAC,EACV2mU,MACHjqf,EAAE,GAAG+9B,MAAMq2iB,KAAW,IAAI14jB,QAAQ,SAASxT,GAC3C,IAAIwK,EAAI6hkB,GAAYrskB;AACpB,OAAOyskB,GAASjikB,EAAE,KACjB,IAAK,WAAY,IAAK,YAAa,IAAK,aASxC,IAAK,YAGL,IAAK,UACL,IAAK,QAAS,IAAK,SACnB,IAAK,UAGL,IAAK,WACL,IAAK,SAAU,IAAK,UACpB,IAAK,WAGL,IAAK,SACL,IAAK,OAAQ,IAAK,QAClB,IAAK,SAGL,IAAK,YACL,IAAK,UAAW,IAAK,WACrB,IAAK,YAGL,IAAK,YAAa,IAAK,aAAc,IAAK,cAC1C,IAAK,cAGL,IAAK,cAAe,IAAK,eAAgB,IAAK,gBAC9C,IAAK,gBAGL,IAAK,YAAa,IAAK,aAAc,IAAK,cAC1C,IAAK,cAGL,IAAK,SAAU,IAAK,UAAW,IAAK,WACpC,IAAK,WAGL,IAAK,OAAQ,IAAK,QAAS,IAAK,SAChC,IAAK,SAGL,IAAK,SAAU,IAAK,UAEpB,IAAK,WAAY,IAAK,WAGtB,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa;AAtDnD,IAAK,UAAW,IAAK,WAAY,IAAK,YACrC4wK,EAAgB,CAAC,EACd5wK,EAAEgvlB,aAAYp+a,EAAOo+a,WAAahsB,GAAahjkB,EAAEgvlB,aACjDhvlB,EAAEivlB,eAAcr+a,EAAOq+a,aAAejsB,GAAahjkB,EAAEivlB,eACxDp2lB,EAAOk2lB,QAAQ34lB,KAAKw6K;AACpB;AAkDD,IAAK,OAAQ2mU;AAAa;AAC1B,IAAK,SAAUA;AAAc;AAC7B,QAAS,GAAG9vc,GAAQA,EAAKu8hB,MACpBzsF,EAAM,MAAM,IAAIrof,MAAM,gBAAkB8Q,EAAE,GAAK,eAGtD,EACD,CAxEA,CA0YgD1S,EAAGuL,EAAQq1lB,EAAQzmjB,IAM9Dn6C,EAAEmuB,EAAK4P,MAAMyikB,KAlGlB,SAAuBxgmB,EAAGuL,EAAQ4uC,GAEjC,IAAIynjB;AADJr2lB,EAAOs2lB,OAAS;AAEhB,IAAI53G,MACHjqf,EAAE,GAAG+9B,MAAMq2iB,KAAW,IAAI14jB,QAAQ,SAASxT,GAC3C,IAAIwK,EAAI6hkB,GAAYrskB,GAAI1G,EAAI;AAC5B,OAAOmzkB,GAASjikB,EAAE,KACjB,IAAK,WAAY,IAAK,YAAa,IAAK,aAAc,IAAK,aAc3D,IAAK,QAYL,IAAK,eAGL,IAAK,cAEL,IAAK,gBAAiB,IAAK,gBAO3B,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa;AAnCnD,IAAK,MAAO,IAAK,QAGhB,WAFAkvlB,EAAKlvlB,GACK,GACNlR,EAAI,EAAGA,EAAI4+lB,GAAY3+lB,SAAUD,EAAMogmB,EAAGxB,GAAY5+lB,MACzDogmB,EAAGxB,GAAY5+lB,IAAMuO,SAAS6xlB,EAAGxB,GAAY5+lB,IAAK;AACnD,IAAIA,EAAI,EAAGA,EAAI6+lB,GAAY5+lB,SAAUD,EAAMogmB,EAAGvB,GAAY7+lB,MACzDogmB,EAAGvB,GAAY7+lB,IAAMk0kB,GAAaksB,EAAGvB,GAAY7+lB;AAClD,GAAG+J,EAAOs1lB,WAAae,EAAGjmB,SAAW,IACpC,IAAIn6kB,EAAI,IAAOA,EAAI,KAAQA,EAAG,GAAG+J,EAAOs1lB,UAAUe,EAAGjmB,WAAapwkB,EAAOs1lB,UAAUr/lB,GAAI,CAAEogmB,EAAGjmB,SAAWn6kB;AAAG,KAAO,CAElH+J,EAAOs2lB,OAAO/4lB,KAAK84lB;AAAK;AAIzB,IAAK,aAAc,IAAK,eACvB,IAAIxglB,EAAY,CAAC;AACd1O,EAAEqua,WAAU3/Z,EAAU2/Z,SAAWrua,EAAEqua,UACnCrua,EAAE8oJ,aAAYp6I,EAAUo6I,WAAa9oJ,EAAE8oJ,YACrB,MAAlB9oJ,EAAEovlB,eAAsB1glB,EAAU0glB,aAAepvlB,EAAEovlB,cACnDpvlB,EAAEqvlB,SAAQ3glB,EAAU2glB,OAASrvlB,EAAEqvlB,QAC/BrvlB,EAAEsvlB,WAAU5glB,EAAU4glB,SAAWtsB,GAAahjkB,EAAEsvlB,WACnDJ,EAAGxglB,UAAYA;AACf;AASD,IAAK,oBAKL,IAAK,OAAQ6oe;AAAa;AAJ1B,IAAK,sBAKL,IAAK,SAAUA;AAAc;AAC7B,QAAS,GAAG9vc,GAAQA,EAAKu8hB,MACpBzsF,EAAM,MAAM,IAAIrof,MAAM,gBAAkB8Q,EAAE,GAAK,eAGtD,EACD,CArDA,CAkG+C1S,EAAGuL,EAAQ4uC,GAOlD5uC,GA5BUA,CA6BlB,CACA,CAvCiC;AAyCjC,SAAS02lB,GAAc1V,EAAiBpyiB,GACvC,IAGKpkC,EAHDjU,EAAI,CAACmykB,GAAY6C,GAAU,aAAc,KAAM,CAClD5sB,MAASitB,GAAW,GACpB,WAAYD;AAab,OAXGqV,EAAGjrB,KAAsC,OAA9BvrjB,EAhIf,SAAuB21B,GACtB,IAAI5pC,EAAI,CAAC;AAIT,MAHA,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAM4Z,QAAQ,SAAS3Z,GACpE,IAAI,IAAIP,EAAIO,EAAE,GAAIP,GAAKO,EAAE,KAAMP,EAAe,MAATkqC,EAAGlqC,KAAYM,EAAEA,EAAEL,QAAWq1kB,GAAU,SAAS,KAAK,CAAC6E,SAASn6kB,EAAEs/lB,WAAW3rB,GAAUzpiB,EAAGlqC,MAChI,GACgB,IAAbM,EAAEL,OAAqB,IAC1BK,EAAEA,EAAEL,QAAW,aACfK,EAAE,GAAKg1kB,GAAU,UAAW,KAAM,CAAEz1b,MAAMv/I,EAAEL,OAAO,IAAKkgB,QAAQ,KAAM,KAC/D7f,EAAEkX,KAAK,IACf,CATA,CAgIiCuzkB,EAAGjrB,QAAex/jB,EAAEA,EAAEL,QAAUsU,GAChEjU,EAAEA,EAAEL,QAAW,oIACfK,EAAEA,EAAEL,QAAW,2HACfK,EAAEA,EAAEL,QAAW,0FACfK,EAAEA,EAAEL,QAAW,gGACXsU,EAhEL,SAAuBmslB,GACtB,IAAIpgmB,EAAsB;AAM1B,OALAA,EAAEA,EAAEL,QAAWq1kB,GAAU,UAAU,MACnCorB,EAAQxmlB,QAAQ,SAASrW,GACxBvD,EAAEA,EAAEL,QAAWq1kB,GAAU,KAAM,KAAMzxkB,EACtC,GACAvD,EAAEA,EAAEL,QAAW,aACC,IAAbK,EAAEL,OAAqB,IAC1BK,EAAE,GAAKg1kB,GAAU,UAAU,KAAM,CAACz1b,MAAMv/I,EAAEL,OAAO,IAAIkgB,QAAQ,KAAK,KAC3D7f,EAAEkX,KAAK,IACf,CAVA,CAgEuBmhC,EAAK+njB,YAAWpgmB,EAAEA,EAAEL,QAAWsU,GACrDjU,EAAEA,EAAEL,QAAW,uFACfK,EAAEA,EAAEL,QAAW,oBACfK,EAAEA,EAAEL,QAAW,uGAEZK,EAAEL,OAAO,IAAIK,EAAEA,EAAEL,QAAW,gBAAkBK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MACjE7f,EAAEkX,KAAK,GACf,CAOA,SAASmplB,GAAa3gmB,EAAc4L,EAActL,GAC7CA,IAAGA,EAAI4kkB,GAAQ,EAAI,EAAIt5jB,EAAE3L,SAC7BK,EAAEuhkB,YAAY,EAAG7hkB,GACjBu7kB,GAAmB3vkB,EAAGtL;AACtB,IAAIm4P,EAAOn4P,EAAEL,OAASK,EAAE7D,EAAK6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D;AAE/C,OADU,MAAPA,EAAE7D,IAAW6D,EAAE7D,EAAI6D,EAAEL,QACjBw4P,CACR,CAsEA,IAqBImoW,GArBAC,GAAkB,CACrB,OACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,YAIGC,GAAgB7oB;AACpB,SAAS8oB,GAAc35L,EAAM9ma,GACxBA,IAAGA,EAAI4kkB,GAAQ,KACf07B,KAAqBA,GAAuB9wB,GAAM+wB;AACtD,IAAIG,EAAiBJ,GAAoBx5L,EAAK24L;AACpC,MAAPiB,IAAaA,EAAM,IACtB1gmB,EAAEuhkB,YAAY,EAAGm/B;AACjB,IAAI37gB,EAAI;AACR,GAAU,IAAP27gB,EAMF,IAJAzjB,GAAe,CAAChiV,KAAK,GAAIj7P,GAEzBi9kB,GAAe,CAAChiV,KAAK,GAAIj7P,GAEnB+kF,EAAI,KAAMA,EAAG/kF,EAAEuhkB,YAAY,EAAG;IAC9B,CACN,KAAMx8e,EAAI,IAAKA,EAAG/kF,EAAEuhkB,YAAY,EAAG;AAEnC,KAAMx8e,EAAI,KAAMA,EAAG/kF,EAAEuhkB,YAAY,EAAG,EASrC,CACA,OAAOvhkB,EAAEL,OAASK,EAAE7D,EAAI6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,CAC3C,CAUA,SAAS2gmB,GAAYt0kB,EAAMk/jB,EAAOvrlB,GAcjC,OAbIA,IAAGA,EAAI4kkB,GAAQ,KACnB5kkB,EAAEuhkB,YAAY,EAAGgqB,GAAO,GACxBvrlB,EAAEuhkB,YAAY,EAAGl1iB,EAAKwtjB,UAAU,GAChC75kB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GAEjBvhkB,EAAEuhkB,YAAY,EADH,GAEXvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAGA,SAAS4gmB,GAAWv0kB,EAAMrsB,GAMzB,OALIA,IAAGA,EAAI4kkB,GAAQ,KACnB5kkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CAEA,IAAI6gmB,GAAkBlpB;AA4MtB,SAASmpB,GAAcrW,EAAIpyiB,GAC1B,IAAI2kF,EAAKi7c;AAcT,OAbAM,GAAav7c,EAAI,KA/GlB,SAAwBA,EAAIpzF,GAC3B,GAAIA,EAAJ,CACA,IAAIgkU,EAAM,EACV,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAMh0V,QAAQ,SAAS3Z,GAEpE,IAAI,IAAIP,EAAIO,EAAE,GAAIP,GAAKO,EAAE,KAAMP,EAAe,MAATkqC,EAAGlqC,MAAckuW,CACvD,GAEU,GAAPA,IACH2qO,GAAav7c,EAAI,IAA2B89c,GAAeltO,IAC3D,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAMh0V,QAAQ,SAAS3Z,GAEpE,IAAI,IAAIP,EAAIO,EAAE,GAAIP,GAAKO,EAAE,KAAMP,EAAe,MAATkqC,EAAGlqC,IAAY64kB,GAAav7c,EAAI,GAAqBqje,GAAa3gmB,EAAGkqC,EAAGlqC,IAC9G,GACA64kB,GAAav7c,EAAI,KAbT,CAcT,CAfA,CAgHgBA,EAAIytd,EAAGjrB,KA/FvB,SAAyBxic,GAIxBu7c,GAAav7c,EAAI,IAA4B89c,GAHnC,IAIVvC,GAAav7c,EAAI,GArOlB,SAAuB0mT,EAAc1jb,GAChCA,IAAGA,EAAI4kkB,GAAQ,MACnB5kkB,EAAEuhkB,YAAY,EAAa,GAAV79I,EAAKhjJ,IA55LvB,SAAyBgjJ,EAAM1jb,GACzBA,IAAGA,EAAI4kkB,GAAQ;AACpB,IAAIm8B,GACFr9K,EAAK9nB,OAAS,EAAO,IACrB8nB,EAAK3nB,OAAS,EAAO,IACrB2nB,EAAKg0K,QAAU,GAAO,IACtBh0K,EAAK+zK,OAAS,GAAO,IACrB/zK,EAAKw7K,SAAW,GAAO,IACvBx7K,EAAKxkb,OAAS,IAAO;AACvBc,EAAEuhkB,YAAY,EAAGw/B,GACjB/gmB,EAAEuhkB,YAAY,EAAG,EAElB,CAZA,CA65LiB79I,EAAM1jb,GACtBA,EAAEuhkB,YAAY,EAAG79I,EAAKroB,KAAO,IAAS;AACtC,IAAI2lM,EAAM;AACW,eAAlBt9K,EAAKy7K,UAA4B6B,EAAM,EAChB,aAAlBt9K,EAAKy7K,YAA0B6B,EAAM,GAC7ChhmB,EAAEuhkB,YAAY,EAAGy/B,GACjBhhmB,EAAEuhkB,YAAY,EAAG79I,EAAK8gC,WAAa,GACnCxkd,EAAEuhkB,YAAY,EAAG79I,EAAK4/B,QAAU,GAChCtjd,EAAEuhkB,YAAY,EAAG79I,EAAKu9K,SAAW,GACjCjhmB,EAAEuhkB,YAAY,EAAG,GACjB0b,GAAev5J,EAAKh/a,MAAO1E;AAC3B,IAAIonJ,EAAS;AAKb,MAJkB,SAAfs8R,EAAKt8R,SAAmBA,EAAS,GAClB,SAAfs8R,EAAKt8R,SAAmBA,EAAS,GACpCpnJ,EAAEuhkB,YAAY,EAAGn6a,GACjB6zb,GAAmBv3J,EAAKl8a,KAAMxH,GACvBA,EAAEL,OAASK,EAAE7D,EAAI6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,CAC3C,CApBA,CAqOsD,CACpD0gS,GAAG,GACHh8R,MAAO,CAACs2T,MAAM,GACdxzT,KAAM,UACN87c,OAAQ,EACRl8T,OAAQ,WAGTmxb,GAAav7c,EAAI,IAClB,CAdA,CAgGiBA,GAhFjB,SAAyBA,GAIxBu7c,GAAav7c,EAAI,IAA4B89c,GAHnC,IAIVvC,GAAav7c,EAAI,GAAsByje,GAAc,CAAChB,YAAY,UAClElnB,GAAav7c,EAAI,GAAsByje,GAAc,CAAChB,YAAY,aAElElnB,GAAav7c,EAAI,IAClB,CATA,CAiFiBA,GAtEjB,SAA2BA,GAC1B,IA3IgCh9H;AA8IhCu4kB,GAAav7c,EAAI,IAA8B89c,GAHrC,IAIVvC,GAAav7c,EAAI,IA9Ibh9H,IAAGA,EAAI4kkB,GAAQ,KACnB5kkB,EAAEuhkB,YAAY,EAAG,GACjBq/B,GAAW,EAAM5gmB,GACjB4gmB,GAAW,EAAM5gmB,GACjB4gmB,GAAW,EAAM5gmB,GACjB4gmB,GAAW,EAAM5gmB,GACjB4gmB,GAAW,EAAM5gmB,GACVA,EAAEL,OAASK,EAAE7D,EAAI6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,IAyI1Cu4kB,GAAav7c,EAAI,IAClB,CARA,CAuEmBA,GA7DnB,SAAgCA,GAE/Bu7c,GAAav7c,EAAI,IAAmC89c,GAD1C,IAEVvC,GAAav7c,EAAI,GAAoB2je,GAAY,CAChD9mB,SAAU,EACVqnB,OAAU,EACVC,OAAU,EACVC,SAAU,GACR,QAEH7oB,GAAav7c,EAAI,IAClB,CAXA,CA8DwBA,GAjDxB,SAA2BA,EAAI3wG,GAC9BksjB,GAAav7c,EAAI,IAA8B89c,GAAezujB,EAAK1sB,SACnE0sB,EAAKzS,QAAQ,SAASrW,GAAKg1kB,GAAav7c,EAAI,GAAoB2je,GAAYp9lB,EAAE,GAAK,GAEnFg1kB,GAAav7c,EAAI,IAClB,CALA,CAkDmBA,EAAI3kF,EAAK+njB,SA3C5B,SAA0Bpje,GACzB,IA7JuBjwH,EAAO/M;AA+J9Bu4kB,GAAav7c,EAAI,IAA6B89c,GAFpC,IAGVvC,GAAav7c,EAAI,IAhKMjwH,EAgKgC,CACtDs0lB,KAAK,EACLC,UAAU,EACV95lB,KAAK,UAlKFxH,IAAGA,EAAI4kkB,GAAQ,KACnB5kkB,EAAEuhkB,YAAY,EAAGx0jB,EAAMs0lB,MACvBrhmB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,GAAIx0jB,EAAMu0lB,WACxBthmB,EAAEuhkB,YAAY,EAAG,GACjB2a,GAA2BnvkB,EAAMvF,MAAQ,GAAIxH,GACtCA,EAAEL,OAASK,EAAE7D,EAAI6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,IA+J1Cu4kB,GAAav7c,EAAI,IAClB,CAXA,CA4CkBA,GA/BlB,SAAwBA,GAGvBu7c,GAAav7c,EAAI,IAA2B89c,GAFlC,IAIVvC,GAAav7c,EAAI,IAClB,CANA,CAgCgBA,GAxBhB,SAA+BA,GAtK/B,IACKh9H;AAwKJu4kB,GAAav7c,EAAI,MAxKbh9H,EAAI4kkB,GAAQ,OACdrD,YAAY,EAqKJ,GApKV2a,GAsKkF,oBAtKxCl8kB,GAC1Ck8kB,GAqKuG,oBArK7Dl8kB,GACnCA,EAAEL,OAASK,EAAE7D,EAAI6D,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,IAsK1Cu4kB,GAAav7c,EAAI,IAClB,CANA,CAyBuBA,GAGtBu7c,GAAav7c,EAAI,KACVA,EAAGz+G,KACX,CAEA,IAAIgjlB,GAAqB,CACxB,WAAY,WAAY,WAAY,WACpC,eAAgB,eAAgB,eAChC,eAAgB,eAAgB,eAChC,aAAc;AAGf,SAASC,GAAgBtjmB,EAAG4gmB,EAAQzmjB,GACnCymjB,EAAOQ,cAAcC,UAAY;AACjC,IAAI76lB,EAAQ,CAAC,GACZxG,EAAE,GAAG+9B,MAAMq2iB,KAAW,IAAI14jB,QAAQ,SAASxT,GAC3C,IAAIwK,EAAI6hkB,GAAYrskB;AACpB,OAAOwK,EAAE,IAER,IAAK,eAAgB,IAAK,iBAAkB;AAG5C,IAAK,aACJlM,EAAM+yX,IAAM7mX,EAAE2hC;AAAK;AAGpB,IAAK,YACJ7tC,EAAM+yX,IAAM7mX,EAAE6wlB;AAAS;AAcxB,IAAK,UAAW,IAAK,WACrB,IAAK,UAAW,IAAK,WACrB,IAAK,UAAW,IAAK,WACrB,IAAK,UAAW,IAAK,WACrB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,YAAa,IAAK,aACvB,IAAK,eAAgB,IAAK,gBACF,MAAnB7wlB,EAAE,GAAGzN,OAAO,IACf27lB,EAAOQ,cAAcC,UAAUgC,GAAmBt4lB,QAAQ2H,EAAE,KAAOlM,EACnEA,EAAQ,CAAC,GAETA,EAAM8C,KAAOoJ,EAAE,GAAGpR,MAAM,EAAGoR,EAAE,GAAGjR,OAAS;AAE1C;AAED,QAAS,GAAG04C,GAAQA,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,gBAAkB8Q,EAAE,GAAK,iBAEzE,EACD,CAGA,SAAS8wlB,KAA0C,CAGnD,SAASC,KAAyC,CAElD,IAAIC,GAAY,6CACZC,GAAY,+CACZC,GAAY,6CAqBZC,GAAe;AAGnB,SAASC,GAAgB31kB,EAAiBgsB,GAIzC,IAAIn6C;AAFAmuB,GAAwB,IAAhBA,EAAK1sB,SAAc0sB,EAAO41kB;AAGtC,IAAInD,EAAS,CAAC;AAGd,KAAK5gmB,EAAEmuB,EAAK4P,MAAM8lkB,KAAgB,MAAM,IAAIjimB,MAAM;AAGlD,OAhCD,SAA6BusB,EAAMyykB,EAAQzmjB,GAG1C,IAAIn6C;AAFJ4gmB,EAAOQ,cAAgB,CAAC,EAIxB,CAEC,CAAC,YAAasC,GAAWJ,IAEzB,CAAC,aAAcK,GAAWH,IAE1B,CAAC,YAAaI,GAAWH,KACxB/nlB,QAAQ,SAASrQ,GAClB,KAAKrL,EAAEmuB,EAAK4P,MAAM1yB,EAAE,KAAM,MAAM,IAAIzJ,MAAMyJ,EAAE,GAAK;AACjDA,EAAE,GAAGrL,EAAG4gmB,EAAQzmjB,EACjB,EACD,CAhBA,CA8BqBn6C,EAAE,GAAI4gmB,EAAQzmjB,GAClCymjB,EAAO3wZ,IAAM9hL,EACNyykB,CACR,CAEA,SAASmD,GAAYC,EAAQ7pjB,GAC5B,GAAGA,GAAQA,EAAK8pjB,UAAW,OAAO9pjB,EAAK8pjB;AACvC,GAAGD,GAA+B,iBAAdA,EAAO/zZ,IAAiB,OAAO+zZ,EAAO/zZ;AAC1D,IAAInuM,EAAI,CAACmykB;AAsKT,OArKAnykB,EAAEA,EAAEL,QAAU,gGACdK,EAAEA,EAAEL,QAAW,oBAEfK,EAAEA,EAAEL,QAAY,8BAChBK,EAAEA,EAAEL,QAAa,+DACjBK,EAAEA,EAAEL,QAAa,2DACjBK,EAAEA,EAAEL,QAAa,2CACjBK,EAAEA,EAAEL,QAAa,2CACjBK,EAAEA,EAAEL,QAAa,mDACjBK,EAAEA,EAAEL,QAAa,mDACjBK,EAAEA,EAAEL,QAAa,mDACjBK,EAAEA,EAAEL,QAAa,mDACjBK,EAAEA,EAAEL,QAAa,mDACjBK,EAAEA,EAAEL,QAAa,mDACjBK,EAAEA,EAAEL,QAAa,+CACjBK,EAAEA,EAAEL,QAAa,qDACjBK,EAAEA,EAAEL,QAAY,iBAEhBK,EAAEA,EAAEL,QAAY,+BAChBK,EAAEA,EAAEL,QAAa,gBACjBK,EAAEA,EAAEL,QAAc,gCAClBK,EAAEA,EAAEL,QAAc,sBAClBK,EAAEA,EAAEL,QAAc,sBAClBK,EAAEA,EAAEL,QAAc,8CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,wCAClBK,EAAEA,EAAEL,QAAc,0CAClBK,EAAEA,EAAEL,QAAc,qDAClBK,EAAEA,EAAEL,QAAc,qDAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,+CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,8CAClBK,EAAEA,EAAEL,QAAc,0DAClBK,EAAEA,EAAEL,QAAc,wDAClBK,EAAEA,EAAEL,QAAc,wDAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,uDAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,+CAClBK,EAAEA,EAAEL,QAAc,kDAClBK,EAAEA,EAAEL,QAAc,qDAClBK,EAAEA,EAAEL,QAAc,qDAClBK,EAAEA,EAAEL,QAAc,sDAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAa,iBACjBK,EAAEA,EAAEL,QAAa,gBACjBK,EAAEA,EAAEL,QAAc,gCAClBK,EAAEA,EAAEL,QAAc,sBAClBK,EAAEA,EAAEL,QAAc,sBAClBK,EAAEA,EAAEL,QAAc,8CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,wCAClBK,EAAEA,EAAEL,QAAc,0CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,8CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,8CAClBK,EAAEA,EAAEL,QAAc,0DAClBK,EAAEA,EAAEL,QAAc,wDAClBK,EAAEA,EAAEL,QAAc,wDAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,4CAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,uDAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAc,+CAClBK,EAAEA,EAAEL,QAAc,kDAClBK,EAAEA,EAAEL,QAAc,qDAClBK,EAAEA,EAAEL,QAAc,2CAClBK,EAAEA,EAAEL,QAAc,sDAClBK,EAAEA,EAAEL,QAAc,6CAClBK,EAAEA,EAAEL,QAAa,iBACjBK,EAAEA,EAAEL,QAAY,kBAEhBK,EAAEA,EAAEL,QAAY,8BAChBK,EAAEA,EAAEL,QAAa,mBACjBK,EAAEA,EAAEL,QAAc,wDAClBK,EAAEA,EAAEL,QAAc,gCAClBK,EAAEA,EAAEL,QAAe,YACnBK,EAAEA,EAAEL,QAAgB,4GACpBK,EAAEA,EAAEL,QAAgB,gHACpBK,EAAEA,EAAEL,QAAgB,iHACpBK,EAAEA,EAAEL,QAAe,aACnBK,EAAEA,EAAEL,QAAe,qCACnBK,EAAEA,EAAEL,QAAc,gBAClBK,EAAEA,EAAEL,QAAc,gCAClBK,EAAEA,EAAEL,QAAe,YACnBK,EAAEA,EAAEL,QAAgB,oIACpBK,EAAEA,EAAEL,QAAgB,wIACpBK,EAAEA,EAAEL,QAAe,aACnBK,EAAEA,EAAEL,QAAe,qCACnBK,EAAEA,EAAEL,QAAc,gBAClBK,EAAEA,EAAEL,QAAa,oBACjBK,EAAEA,EAAEL,QAAa,iBACjBK,EAAEA,EAAEL,QAAc,mMAClBK,EAAEA,EAAEL,QAAc,yIAClBK,EAAEA,EAAEL,QAAc,yIAClBK,EAAEA,EAAEL,QAAa,kBACjBK,EAAEA,EAAEL,QAAa,qBACjBK,EAAEA,EAAEL,QAAc,kBAClBK,EAAEA,EAAEL,QAAe,gBACnBK,EAAEA,EAAEL,QAAgB,oJACpBK,EAAEA,EAAEL,QAAe,iBACnBK,EAAEA,EAAEL,QAAc,mBAClBK,EAAEA,EAAEL,QAAc,kBAClBK,EAAEA,EAAEL,QAAe,gBACnBK,EAAEA,EAAEL,QAAgB,oJACpBK,EAAEA,EAAEL,QAAe,iBACnBK,EAAEA,EAAEL,QAAc,mBAClBK,EAAEA,EAAEL,QAAc,kBAClBK,EAAEA,EAAEL,QAAe,gBACnBK,EAAEA,EAAEL,QAAgB,oJACpBK,EAAEA,EAAEL,QAAe,iBACnBK,EAAEA,EAAEL,QAAe,6LACnBK,EAAEA,EAAEL,QAAe,mDACnBK,EAAEA,EAAEL,QAAc,mBAClBK,EAAEA,EAAEL,QAAa,sBACjBK,EAAEA,EAAEL,QAAa,qBACjBK,EAAEA,EAAEL,QAAc,wDAClBK,EAAEA,EAAEL,QAAc,gCAClBK,EAAEA,EAAEL,QAAe,YACnBK,EAAEA,EAAEL,QAAgB,4GACpBK,EAAEA,EAAEL,QAAgB,sIACpBK,EAAEA,EAAEL,QAAgB,kHACpBK,EAAEA,EAAEL,QAAe,aACnBK,EAAEA,EAAEL,QAAe,2FACnBK,EAAEA,EAAEL,QAAc,gBAClBK,EAAEA,EAAEL,QAAc,gCAClBK,EAAEA,EAAEL,QAAe,YACnBK,EAAEA,EAAEL,QAAgB,4GACpBK,EAAEA,EAAEL,QAAgB,kHACpBK,EAAEA,EAAEL,QAAe,aACnBK,EAAEA,EAAEL,QAAe,yFACnBK,EAAEA,EAAEL,QAAc,gBAClBK,EAAEA,EAAEL,QAAa,sBACjBK,EAAEA,EAAEL,QAAY,iBAChBK,EAAEA,EAAEL,QAAW,qBAEfK,EAAEA,EAAEL,QAAW,qBACfK,EAAEA,EAAEL,QAAY,YAChBK,EAAEA,EAAEL,QAAa,mSACjBK,EAAEA,EAAEL,QAAY,aAChBK,EAAEA,EAAEL,QAAY,YAChBK,EAAEA,EAAEL,QAAa,mSACjBK,EAAEA,EAAEL,QAAY,aAChBK,EAAEA,EAAEL,QAAW,sBACfK,EAAEA,EAAEL,QAAW,yBACfK,EAAEA,EAAEL,QAAU,aACPK,EAAEkX,KAAK,GACf,CA6CA,SAASkrlB,GAAczrZ,GACtB,IAAI0rZ,EAAU1rZ,EAAKgrX,WAAW,GAC1B55c,EAAK4uF,EAAKgrX,WAAW,GAAK,EAC1B3hkB,EAAI,CAACqimB;AACT,OAAOA,GACN,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EACtC,KAAK,EAAM,KAAK,GAAM,KAAK,GAAM,KAAK,GACrCrimB,EAAE,GAjCL,SAA4B22M,GAC3B,IAAI32M,EAAI,CAAC;AAGT,OAFAA,EAAEsimB,SAAW3rZ,EAAKgrX,WAAW,GAC7B3hkB,EAAEuimB,WAAa5rZ,EAAKgrX,WAAW,GACxB3hkB,EAAEsimB,UACR,KAAK,EAIL,KAAK,EAAG3rZ,EAAKx6M,GAAK;AAAG;AAHrB,KAAK,EAAG6D,EAAEwimB,UAUZ,SAAqB7rZ,GACpB,OAAOghY,GAAUhhY,EAXwB,EAY1C,CAFA,CAVoCA;AAAU;AAC5C,KAAK,EAAG32M,EAAEwimB,UAAYnZ,GAAe1yY;AAAU;AAC/C,KAAK,EAAG32M,EAAEwimB,UAXZ,SAA0B7rZ,GAAsB,OAAOA,EAAKgrX,WAAW,EAAI,CAA3E,CAWyChrX,GAIxC,OADAA,EAAKx6M,GAAK,EACH6D,CACR,CAbA,CAiC6B22M;AAAW;AACtC,KAAK,EAAM32M,EAAE,GAbf,SAA6B22M,EAAMh3M,GAClC,OAAOg4kB,GAAUhhY,EAAMh3M,EACxB,CAFA,CAawCg3M,EAAM5uF;AAAK;AACjD,KAAK,GAAM,KAAK,GAAM/nH,EAAE,GAAK22M,EAAKgrX,WAAkB,IAAP55c,EAAW,EAAI;AAAI;AAChE,QAAS,MAAM,IAAIjoH,MAAM,8BAAgCuimB,EAAU,IAAMt6e,GAE1E,OAAO/nH,CACR,CAeA,SAASyimB,GAAa3C,EAAI4C,GACzBA,EAAM9olB,QAAQ,SAAS+olB,GACfA,EAAI,EAcZ,EACD,CAyFA,SAASC,KACP,IAjFwBv2kB,EACpBrsB,EAgFAg9H,EAAKi7c;AAqBT,OApBAM,GAAav7c,EAAI,KACjBu7c,GAAav7c,EAAI,IAAK89c,GAAe,IACrCvC,GAAav7c,EAAI,MAnFbh9H,EAAI4kkB,GAAQ,GAAK,GADGv4iB,EAoFe,CACrC7kB,KAAM,SACN4sF,QAAS,KACT4+C,MAAO,aAtFqBxrI,KAAK7H,SACjC4hkB,YAAY,EAAGl1iB,EAAK2mH,OACtBhzI,EAAEuhkB,YAAY,EAAGl1iB,EAAK+nE,SACtB6mf,GAAmB5ujB,EAAK7kB,KAAMxH,GACvBA,EAAER,MAAM,EAAGQ,EAAE7D,KAoFpBo8kB,GAAav7c,EAAI,KACjBu7c,GAAav7c,EAAI,IAnEnB,WACE,IAAIh9H,EAAI4kkB,GAAQ;AAGhB,OAFA5kkB,EAAEuhkB,YAAY,EAiE4B,GAhE1C0Z,GAgE6C,SAhEpBj7kB,GAClBA,EAAER,MAAM,EAAGQ,EAAE7D,EACtB,CALA,IAoEEo8kB,GAAav7c,EAAI,IACjBu7c,GAAav7c,EAAI,GAAI89c,GAAe,MACpCvC,GAAav7c,EAAI,KAAM89c,GAAe,IACtCvC,GAAav7c,EAAI,KAAM8qd,GAAY,IACnCvP,GAAav7c,EAAI,IACjBu7c,GAAav7c,EAAI,IACjBu7c,GAAav7c,EAAI,KACjBu7c,GAAav7c,EAAI,IAjEnB,WACE,IAAIh9H,EAAI4kkB,GAAQ;AAGhB,OAFA5kkB,EAAEuhkB,YAAY,EA+D4B,GA9D1CvhkB,EAAEuhkB,YAAY,EAAQ,GACfvhkB,CACT,CALA,IAkEEu4kB,GAAav7c,EAAI,GArFnB,SAAsB6le,GACpB,IAAI7imB,EAAI4kkB,GAAQ,EAAI,EAAIi+B,EAAIljmB;AAC5BK,EAAEuhkB,YAAY,EAAGshC,EAAIljmB;AACrB,IAAK,IAAID,EAAI,EAAGA,EAAImjmB,EAAIljmB,SAAUD,EAChCM,EAAEuhkB,YAAY,EAAGshC,EAAInjmB,GAAG,IACxBM,EAAEuhkB,YAAY,EAAGshC,EAAInjmB,GAAG;AAE1B,OAAOM,CACT,CARA,CAqFoC,CAAC,CAAC,EAAG,MACvCu4kB,GAAav7c,EAAI,KACjBu7c,GAAav7c,EAAI,KACVA,EAAGz+G,KACZ,CAiFA,SAASuklB,KACP,IAAI9imB,EAAI,CAACmykB;AAET,OADAnykB,EAAEgH,KAAK,q2BACAhH,EAAEkX,KAAK,GAChB,CA4HA,IAAI6rlB,GAAW;AACf,SAASC,GAAmBzhB,EAAgBhD,GAY3C,IAXA,IAAI0kB,EAAQ,CAAC,MAAO,OAEhB3mM,EAAO,CAAC,SAAS2mM,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAG,OAAO/rlB,KAAK,KACjElX,EAAI,CACPg1kB,GAAU,MAAO,KAAM,CAAE,UAhtPlB,gCAgtPuC,UAAWM,GAAU,UAAWA,GAAU,WAjtPjF,2BAitP0Gz1jB,QAAQ,MAAM,KAC/Hm1jB,GAAU,gBAAiBA,GAAU,UAAW,KAAM,CAAC,QAAQ,OAAQ3ojB,KAAOk1jB,IAAO,CAAC,QAAQ,SAC9FvM,GAAU,cAAe,CACxBA,GAAU,WAAY,KAAM,CAACkuB,UAAU,UACvCluB,GAAU,SAAU,KAAM,CAACmuB,gBAAgB,IAAK,gBAAgB,UAC/DjslB,KAAK,IAAK,CAACknC,GAAG,cAAe,QAAQ,IAAKgljB,UAAUH,EAAM/rlB,KAAK,KAAKq4L,KAAK+sN,KAEtEymM,GAAiB,IAANxhB,GAAYwhB,IAAY;AAqCzC,OAnCAxkB,EAAS3kkB,QAAQ,SAASxT,GAC1B,IAAI7C,EAAI+1kB,GAAYlzkB,EAAE,IAClBi9lB,EAAkB,CAACC,OAAS,UAAWpgmB,KAAO;AAC9B,YAAjBmgmB,EAASngmB,OAAoBmgmB,EAASx3U,MAAQ;AACjD,IAAI03U,EAA4B,YAAjBF,EAASngmB,KAAqB8xkB,GAAU,SAAU,KAAM,CAAC9xkB,KAAK,mBAAoB,QAAQ,SAAW,KAChHsgmB,EAAUxuB,GAAU,SAAUuuB,EAAUF,KAG1CN,GAEF/imB,EAAIA,EAAE6R,OAAO,CACb,WAAakjkB,GAAW,CACvB32hB,GAAG,WAAa2kjB,GAChB7/lB,KAAK,eACL6J,MAAM,yFAA2F3G,EAAE,GAAG8wV,OAAS,qBAAuB,IACtIusQ,UAAU,UACVC,YAAY,YACR,IACJF,EACAxuB,GAAU,WAAY,KAZR,CAACvvkB,GAAG,IAAKk+lB,SAAW,MAalC3uB,GAAU,SAAU,KAAM,CAAC,gBAAgB,SAC3C,6DACA,mCACC,qBACA,qBAEAF,GAAS,WAAY,CAACvxkB,EAAEA,EAAE,EAAG,EAAGA,EAAEtD,EAAE,EAAG,EAAGsD,EAAEA,EAAE,EAAG,GAAIA,EAAEtD,EAAE,EAAG,IAAIiX,KAAK,MACrE49jB,GAAS,aAAc,SACvBA,GAAS,QAAS/kiB,OAAOxsC,EAAEtD,IAC3B60kB,GAAS,WAAY/kiB,OAAOxsC,EAAEA,IAC9B6C,EAAE,GAAG8wV,OAAS,GAAK,eACpB,kBACD,cACI,GACJl3V,EAAEgH,KAAK,UACAhH,EAAEkX,KAAK,GACf,CACA,SAAS0slB,GAAsB5yV,EAAOutU,EAAgCslB,EAAsBC,GAC3F,IACI3/O,EADAi2N,EAAQnnkB,MAAM1T,QAAQyxQ;AAE1ButU,EAAS3kkB,QAAQ,SAASkhgB,GACzB,IAAI76gB,EAAIq5kB,GAAYx+D,EAAQz8W;AAK5B,GAJG+7a,GACEppU,EAAM/wQ,EAAEA,KAAI+wQ,EAAM/wQ,EAAEA,GAAK,IAC7BkkX,EAAOnzG,EAAM/wQ,EAAEA,GAAGA,EAAEsD,IACd4gX,EAAOnzG,EAAM8pQ,EAAQz8W,MACvB8lN,EAAM,CACVA,EAAQ,CAACjmX,EAAE,KACRk8kB,EAAOppU,EAAM/wQ,EAAEA,GAAGA,EAAEsD,GAAK4gX,EACvBnzG,EAAM8pQ,EAAQz8W,KAAO8lN;AAC1B,IAAI7sS,EAAQmigB,GAAkBzoU,EAAM,SAAS;AAC1C15L,EAAM11E,EAAE3B,EAAIA,EAAEA,IAAGq3E,EAAM11E,EAAE3B,EAAIA,EAAEA,GAC/Bq3E,EAAM73E,EAAEQ,EAAIA,EAAEA,IAAGq3E,EAAM73E,EAAEQ,EAAIA,EAAEA,GAC/Bq3E,EAAM11E,EAAE2B,EAAItD,EAAEsD,IAAG+zE,EAAM11E,EAAE2B,EAAItD,EAAEsD,GAC/B+zE,EAAM73E,EAAE8D,EAAItD,EAAEsD,IAAG+zE,EAAM73E,EAAE8D,EAAItD,EAAEsD;AAClC,IAAIwpkB,EAAUyM,GAAaligB;AACvBy1f,IAAY/7T,EAAM,UAASA,EAAM,QAAU+7T,EAChD,CAEK5oN,EAAK5gX,IAAG4gX,EAAK5gX,EAAI;AACtB,IAAIvD,EAAiB,CAACE,EAAG46gB,EAAQipF,OAAQ7lmB,EAAG48gB,EAAQ58gB,EAAG+B,EAAG66gB,EAAQ76gB,EAAGg9E,EAAG4mhB;AACrE/oF,EAAQ36gB,IAAGH,EAAEG,EAAI26gB,EAAQ36gB;AAG5B,IAAI,IAAIT,EAAIykX,EAAK5gX,EAAE5D,OAAS,EAAGD,GAAK,IAAKA,EAAG,CAC3C,IAAImkmB,GAAY1/O,EAAK5gX,EAAE7D,GAAGu9E,EAAG;AAC1B4mhB,IAAa1/O,EAAK5gX,EAAE7D,GAAGu9E,GAAGknS,EAAK5gX,EAAE2F,OAAOxJ,EAAG,EAC/C,CACA,GAAGmkmB,GAAYC,EAAQ,IAAIpkmB,EAAI,EAAGA,EAAIokmB,EAAOnkmB,SAAUD,EACtD,GAAGM,EAAEE,GAAK4jmB,EAAOpkmB,GAAG0+C,GAAI,CAAEp+C,EAAEE,EAAI4jmB,EAAOpkmB,GAAG8H,MAAQxH,EAAEE;AAAG,KAAO,CAE/DikX,EAAK5gX,EAAEyD,KAAKhH,EACb,EACD,CAkCA,SAASgkmB,GAAmB33kB,GAC3B,IAAIrsB,EAAI,CAACmykB,GAAY6C,GAAU,WAAY,KAAM,CAAE5sB,MAASitB,GAAW,MAEnE4uB,EAA4B;AAmChC,OAlCAjkmB,EAAEgH,KAAK,aACPqlB,EAAKzS,QAAQ,SAASxT,GAAKA,EAAE,GAAGwT,QAAQ,SAAS3F,GAAK,IAAI/T,EAAImzkB,GAAUp/jB,EAAE/T,IAC/C,GAAvB+jmB,EAAQh7lB,QAAQ/I,KAClB+jmB,EAAQj9lB,KAAK9G,GACbF,EAAEgH,KAAK,WAAa9G,EAAI,cAEtB+T,EAAEgpE,GAAKhpE,EAAE8xB,KAAwC,GAAlCk+jB,EAAQh7lB,QAAQ,MAAQgL,EAAE8xB,MAC3Ck+jB,EAAQj9lB,KAAK,MAAQiN,EAAE8xB,IACvB/lC,EAAEgH,KAAK,cAAqBiN,EAAE8xB,GAAK,aAErC,EAAI,GACiB,GAAlBk+jB,EAAQtkmB,SAAeskmB,EAAQj9lB,KAAK,WAAYhH,EAAEgH,KAAK,6BAC1DhH,EAAEgH,KAAK,cACPhH,EAAEgH,KAAK,iBACPqlB,EAAKzS,QAAQ,SAAS7a,GAErB,IAAImlmB,EAAa,EAAGlxc,EAAK;AAOzB,GANGj0J,EAAE,GAAG,IAAMA,EAAE,GAAG,GAAGk+E,GAAKl+E,EAAE,GAAG,GAAGgnC,GAAIm+jB,EAAaD,EAAQh7lB,QAAQ,MAAQlK,EAAE,GAAG,GAAGgnC,IAC/EhnC,EAAE,GAAG6a,QAAQ,SAASrW,GACvBA,EAAErD,IAAGgkmB,EAAaD,EAAQh7lB,QAAQoqkB,GAAU9vkB,EAAErD,KACjD8yJ,EAAGhsJ,KAAKzD,EAAErF,GAAG,GACd,GACA8B,EAAEgH,KAAK,iBAAmBjI,EAAE,GAAK,eAAiBmlmB,EAAa,YAC5Dlxc,EAAGrzJ,QAAU,EAAGK,EAAEgH,KAAK8tkB,GAAS,IAAKzB,GAAUrgb,EAAG,IAAI;IACpD,CAGJ,IADA,IAAI90J,EAAI,iBAAoB80J,EAAG,GAAM,KAC7BtzJ,EAAI,EAAGA,EAAIszJ,EAAGrzJ,SAAUD,EAAGxB,GAAK,eAAiB80J,EAAGtzJ,GAAK;AACjEM,EAAEgH,KAAK8tkB,GAAS,IAAKzB,GAAUn1kB,IAChC,CACA8B,EAAEgH,KAAK,oBACR,GACAhH,EAAEgH,KAAK,kBACJhH,EAAEL,OAAO,IAAKK,EAAEA,EAAEL,QAAW,cAAgBK,EAAE,GAAGA,EAAE,GAAG6f,QAAQ,KAAK,MAChE7f,EAAEkX,KAAK,GACf,CAyCA,SAASitlB,GAAgB5lB,EAAUulB,EAAQzrjB,GAC1C,IAAIr4C,EAAI,CAACmykB,GAAY6C,GAAU,mBAAoB,KAAM,CAAE5sB,MAASgtB,KAAev1jB,QAAQ,QAAS;AAkBpG,OAjBA0+jB,EAAS3kkB,QAAQ,SAASwqlB,GACzB,IAAIC,EAAS,IACZD,EAAK,IAAM,IAAIxqlB,QAAQ,SAASrW,EAAGsqN,GACnC,GAAItqN,EAAE05E,EAAN,CACG15E,EAAErD,IAA6B,GAAxB4jmB,EAAO76lB,QAAQ1F,EAAErD,IAAU4jmB,EAAO98lB,KAAKzD,EAAErD;AACnD,IAAIokmB,EAAS,CACZjmc,IAAK+lc,EAAK,GACVhmjB,GAAI,6BAA+B,eAAiB/F,EAAKksjB,QAAQ/kmB,OAAO,IAAM;AAErE,GAAPquN,EAAUw2Y,EAASC,EAAOlmjB,GACxBkmjB,EAAOE,SAAWH,EACvB9gmB,EAAEwiC,GAAKu+jB,EAAOlmjB,GACX76C,EAAErD,IAAGokmB,EAAOG,SAAW,6BAA+B,eAAiBX,EAAO76lB,QAAQ1F,EAAErD,IAAIV,OAAO,IAAM,KAC5GQ,EAAEgH,KAAKgukB,GAAU,kBAAmBF,GAAS,OAAQvxkB,EAAErF,GAAG,IAAKommB,GAV/B,aAAd/gmB,EAAEwiC,EAWrB,EACD,GACA/lC,EAAEgH,KAAK,uBACAhH,EAAEkX,KAAK,GACf,CAqEA,IAAIwtlB,GAAyB3pB;AA2C7B,SAAS4pB,GAAmBt4kB,GAC3B,IAAI2wG,EAAKi7c,KACLgsB,EAA4B;AA2BhC,OA1BA1rB,GAAav7c,EAAI,KAEjBu7c,GAAav7c,EAAI,KACjB3wG,EAAKzS,QAAQ,SAASkhgB,GACrBA,EAAQ,GAAGlhgB,QAAQ,SAASrW,GACxB0gmB,EAAQh7lB,QAAQ1F,EAAErD,IAAM,IAC3B+jmB,EAAQj9lB,KAAKzD,EAAErD,EAAEV,MAAM,EAAE,KACzB+4kB,GAAav7c,EAAI,IApDpB,SAAgC3wG,GAAQ,OAAO4ujB,GAAmB5ujB,EAAK7sB,MAAM,EAAG,IAAM,CAAtF,CAoD0E+D,EAAErD,IAC1E,EACD,GACAq4kB,GAAav7c,EAAI,KAEjBu7c,GAAav7c,EAAI,KACjB3wG,EAAKzS,QAAQ,SAASkhgB,GACrBA,EAAQ,GAAGlhgB,QAAQ,SAASrW,GAC3BA,EAAE0gmB,QAAUA,EAAQh7lB,QAAQ1F,EAAErD;AAC9B,IA/8O2Bm9B,EAAkBr9B,EAE3Ck7kB,EA68OE5jgB,EAAQ,CAAC11E,EAAE03kB,GAAYx+D,EAAQ,IAAIr7gB,EAAE65kB,GAAYx+D,EAAQ;AAC7Dy9D,GAAav7c,EAAI,IA3EpB,SAA+B3wG,EAAMrsB,GAQpC,OAPQ,MAALA,IAAWA,EAAI4kkB,GAAQ,KAC1B5kkB,EAAEuhkB,YAAY,EAAGl1iB,EAAK,GAAG43kB,SACzBnnB,GAAoBzwjB,EAAK,GAAarsB,GACtCA,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACjBvhkB,EAAEuhkB,YAAY,EAAG,GACVvhkB,CACR,CATA,CA2EwE,CAACs3E,EAAO/zE,KAC1EA,EAAErF,GAAKqF,EAAErF,EAAEyB,OAAS,GAAG44kB,GAAav7c,EAAI,KAj9OhB3/F,EAi9OkE95B,EA/8O3F23kB,KAAwB,MAALl7kB,IAAak7kB,KAAcl7kB,EAAI4kkB,GAAQ,GAAK,EAAIvniB,EAAIn/B,EAAEyB,SAC7EK,EAAEuhkB,YAAY,EAAG,GACjB0Z,GAAmB59iB,EAAIn/B,EAAG8B,GAC1BA,EAAEuhkB,YAAY,EAAG,GAzClB,SAAsBxob,EAAK/4I,GACrBA,IAAGA,EAAI4kkB,GAAQ,IACpB5kkB,EAAEuhkB,YAAY,EAAGxob,EAAIqic,KAAO,GAC5Bp7kB,EAAEuhkB,YAAY,EAAGxob,EAAIsic,MAAQ,EAE9B,CALA,CA0Cc,CAAED,IAAK,EAAGC,KAAM,GAAKr7kB,GAC3Bk7kB,EAAQl7kB,EAAER,MAAM,EAAGQ,EAAE7D,GAAK6D,IA28O/Bu4kB,GAAav7c,EAAI,YACVz5H,EAAE0gmB,OACV,EACD,GACA1rB,GAAav7c,EAAI,KAEjBu7c,GAAav7c,EAAI,KACVA,EAAGz+G,KACX,CAqBA,IAAIqmlB,GAAU,CAAC,OAAQ,OAAQ,OAAQ,QAAS,OAO5C9S,GAAyB,WAC5B,IAAI+S,EAAU,gFACVC,EAAmB,CAAC7kmB,EAAE,EAAEsD,EAAE;AAC9B,SAASwhmB,EAAOjoC,EAAG9yB,EAAG4N,EAAGC,GACxB,IAAI4gC,KAAcC;AAEF,GAAb9gC,EAAGj4iB,OAAa+4kB,KACK,KAAhB9gC,EAAGz0iB,OAAO,KAAau1kB,KAAa9gC,EAAKA,EAAGp4iB,MAAM,GAAI,IAE9C,GAAbq4iB,EAAGl4iB,OAAa84kB,KACK,KAAhB5gC,EAAG10iB,OAAO,KAAas1kB,KAAa5gC,EAAKA,EAAGr4iB,MAAM,GAAI;AAE9D,IAAImY,EAAIigiB,EAAGj4iB,OAAO,EAAkB,EAAhBsO,SAAS2piB,EAAG,IAAM,EAAGn9hB,EAAIo9hB,EAAGl4iB,OAAO,EAAkB,EAAhBsO,SAAS4piB,EAAG,IAAM;AAI3E,OAFG4gC,EAAMh+jB,GAAKqqlB,EAAOvhmB,IAAUkX,EAC5Bi+jB,EAAM/gkB,GAAKmtlB,EAAO7kmB,IAAU0X,EACxBqyhB,GAAMyuC,EAAO,GAAK,KAAOQ,GAAWx+jB,IAAMi+jB,EAAO,GAAK,KAAOM,GAAWrhkB,EAChF,CACA,OAAO,SAAkBqtlB,EAAiBj2U,GAEzC,OADA+1U,EAAS/1U,EACFi2U,EAAKnllB,QAAQgllB,EAASE,EAC9B,CACD,CAtB6B,GAwBzBE,GAAY,iLACZxS,GACI,SAAkBuS,EAAiBj2U,GACzC,OAAOi2U,EAAKnllB,QAAQollB,GAAW,SAASh+D,EAAI+C,EAAI4N,EAAIC,EAAIC,EAAIotD,GAC3D,IAAI3hmB,EAAI61kB,GAAWvhC,IAAOD,EAAK,EAAI7oR,EAAKxrR,GACpCtD,EAAIi5kB,GAAWgsB,IAAOptD,EAAK,EAAI/oR,EAAK9uR;AAGxC,OAAO+piB,EAAK,KAFE,GAAL/piB,EAAS,GAAM63iB,EAAsB73iB,EAAE,EAAnB,IAAMA,EAAI,KAEjB,KADR,GAALsD,EAAS,GAAMq0iB,EAAsBr0iB,EAAE,EAAnB,IAAMA,EAAI,IAExC,EACD;AAID,SAASyulB,GAAkB1mlB,EAAc+uI,GACxC,OAAO/uI,EAAEuU,QAAQollB,GAAW,SAASh+D,EAAI+C,EAAI4N,EAAIC,EAAIC,EAAIotD,GACxD,OAAOl7D,GAAQ,KAAJ4N,EAAUA,EAAGC,EAAKohC,GAAWG,GAAWvhC,GAAIx9Z,EAAM92I,KAAS,KAAJu0iB,EAAUA,EAAGotD,EAAKlsB,GAAWE,GAAWgsB,GAAM7qd,EAAMp6I,GACvH,EACD,CAEA,SAASklmB,GAAmB75lB,EAAcgsE,EAAkB6sS,GAC3D,IAA6BviX,EAArB23kB,GAAajigB,GAAc11E,EAAG2B,EAAI+1kB,GAAYn1N;AAEtD,OAAO6tO,GAAkB1mlB,EADb,CAACrL,EAAEsD,EAAEtD,EAAI2B,EAAE3B,EAAGsD,EAAEA,EAAEA,EAAI3B,EAAE2B,GAErC,CAQA,SAAS6hmB,GAAM95lB,GACd,OAAOA,EAAEuU,QAAQ,WAAW,GAC7B,CACA,SAASwllB,GAAW1uZ,GAAQA,EAAKx6M,GAAG,CAAW,CAG/C,SAASmpmB,GAAc3uZ,EAAMh3M,GAC5B,IAAI4D,EAAIozM,EAAKgrX,WAAqB,GAAVhikB,EAAc,EAAI;AAC1C,MAAO,CAAK,MAAJ4D,EAAaA,GAAK,GAAM,EAAIA,GAAK,GAAM,EAChD,CAGA,SAASgimB,GAAe5uZ,EAAMh3M,EAAQ04C,GACrC,IAAIpkC,EAAI;AACR,GAAGokC,EAAM,CACR,GAAGA,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,MAAQ,EAAG,OAAO6sB,GAAqB7uZ;AAC5C,IAAbt+J,EAAKsgiB,OAAY1kkB,EAAI,EAC9B,CACA,IAAIhU,EAAE02M,EAAKgrX,WAAW1tjB,GAAI0D,EAAEg/L,EAAKgrX,WAAW1tjB,GACxC1Q,EAAE+hmB,GAAc3uZ,EAAM,GACtBl8L,EAAE6qlB,GAAc3uZ,EAAM;AAC1B,MAAO,CAAE/0M,EAAE,CAAC3B,EAAEA,EAAGsD,EAAEA,EAAE,GAAIk1kB,KAAKl1kB,EAAE,GAAIm1kB,KAAKn1kB,EAAE,IAAK9D,EAAE,CAACQ,IAAKsD,EAAEkX,EAAE,GAAIg+jB,KAAKh+jB,EAAE,GAAIi+jB,KAAKj+jB,EAAE,IACnF,CAEA,SAAS+qlB,GAAqB7uZ,GAC7B,IAAI12M,EAAEqlmB,GAAc3uZ,EAAM,GAAIh/L,EAAE2tlB,GAAc3uZ,EAAM,GAChDpzM,EAAEozM,EAAKgrX,WAAW,GAClBlnjB,EAAEk8L,EAAKgrX,WAAW;AACtB,MAAO,CAAE//jB,EAAE,CAAC3B,EAAEA,EAAE,GAAIsD,EAAEA,EAAGk1kB,KAAKx4kB,EAAE,GAAIy4kB,KAAKz4kB,EAAE,IAAKR,EAAE,CAACQ,EAAE0X,EAAE,GAAIpU,EAAEkX,EAAGg+jB,KAAK9gkB,EAAE,GAAI+gkB,KAAK/gkB,EAAE,IACnF,CAYA,SAAS8tlB,GAAc9uZ,EAAMh3M,EAAQ04C,GACpC,GAAGA,GAAQA,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,MAAQ,EAAG,OAK9C,SAA6BhiY,GAC5B,IAAI12M,EAAIqlmB,GAAc3uZ,EAAM,GACxBpzM,EAAIozM,EAAKgrX,WAAW;AACxB,MAAO,CAAC1hkB,EAAEA,EAAE,GAAIsD,EAAEA,EAAGk1kB,KAAKx4kB,EAAE,GAAIy4kB,KAAKz4kB,EAAE,GACxC,CAJA,CALyE02M;AACxE,IAAI12M,EAAI02M,EAAKgrX,WAAWtphB,GAAqB,IAAbA,EAAKsgiB,KAAa,EAAI,GAClDp1kB,EAAI+hmB,GAAc3uZ,EAAM;AAC5B,MAAO,CAAC12M,EAAEA,EAAGsD,EAAEA,EAAE,GAAIk1kB,KAAKl1kB,EAAE,GAAIm1kB,KAAKn1kB,EAAE,GACxC,CAQA,SAASmimB,GAAiB/uZ,GACzB,IAAI12M,EAAI02M,EAAKgrX,WAAW,GACpBp+jB,EAAIozM,EAAKgrX,WAAW;AACxB,MAAO,CAAC1hkB,EAAEA,EAAGsD,EAAM,IAAJA,EAAUoimB,WAAe,MAAJpimB,GAAak1kB,KAAKl1kB,GAAG,GAAIm1kB,KAAKn1kB,GAAG,GACtE,CA8EA,SAASqimB,GAAoBjvZ,GAC5B,IAAIkvZ,EAA2B,EAAjBlvZ,EAAKA,EAAKx6M,EAAE;AAG1B,OADAw6M,EAAKx6M,GAAK,EACH,CAAC0pmB,EAFQ,EAGjB,CAyCA,SAASC,GAAuBnvZ,GAE/B,MAAO,CADIA,EAAKgrX,WAAW,GAAUhrX,EAAKgrX,WAAW,GAEtD,CA4FA,SAASokC,GAAYpvZ,EAAMgiY,GAC1B,IAAIpmiB,EAAM,CAACokK,EAAKgrX,WAAW;AAC3B,GAAW,IAARgX,EAAY,OAAOpmiB,EAAI,IACzB,KAAK,EAAMA,EAAI,GAAK;AAAM;AAC1B,KAAK,EAAMA,EAAI,GAAK;AAAM;AAC1B,KAAK,EAAMA,EAAI,GAAK;AAAM;AAC1B,KAAK,EAAMA,EAAI,GAAK,EAErB,OAAOA,EAAI,IACV,KAAK,EACJA,EAAI,GAAK4ziB,GAAUxvY,EAAM,GAAK,OAAS,QAC5B,IAARgiY,IAAYhiY,EAAKx6M,GAAK;AAAG;AAC7B,KAAK,GACL,KAAK,GACJo2C,EAAI,GAAKoniB,GAAKhjY,EAAKA,EAAKx6M,IACxBw6M,EAAKx6M,GAAe,IAARw8kB,EAAc,EAAI;AAAI;AACnC,KAAK,EACJhiY,EAAKx6M,GAAK;AAAG;AACd,KAAK,EACJo2C,EAAI,GAAKwqiB,GAAWpmY;AAAU;AAC/B,KAAK,EACJpkK,EAAI,GAAKs2iB,GAAuBlyY,EAAM,EAAG,CAACgiY,KAAKA,EAAO,GAAKA,EAAO,EAAI,EAAIA;AAAQ;AACnF,QAAS,MAAM,IAAI74kB,MAAM,cAAgByyC,EAAI,IAE9C,OAAOA,CACR,CAGA,SAASyzjB,GAAkBrvZ,EAAM21Y,EAAKj0iB,GAGrC,IAFA,IAAIknG,EAAQo3D,EAAKgrX,WAAyB,IAAbtphB,EAAKsgiB,KAAc,EAAI,GAChDxgV,EAAuB,GACnBz4P,EAAI,EAAGA,GAAK6/I,IAAS7/I,EAAGy4P,EAAInxP,MAAoB,IAAbqxC,EAAKsgiB,KAAckE,GAAqB+M,IAAajzY,EAAM;AACtG,OAAOwhD,CACR,CAGA,SAAS8tW,GAAoBtvZ,EAAMh3M,EAAQ04C,GAC1C,IAAIqyN,EAAO,EAAGo4F,EAAO;AACL,IAAbzqT,EAAKsgiB,MACPjuU,EAAO/zD,EAAKgrX,WAAW,GACvB7+N,EAAOnsJ,EAAKgrX,WAAW,KAEvB7+N,EAAO,EAAInsJ,EAAKgrX,WAAW,GAC3Bj3T,EAAO,EAAI/zD,EAAKgrX,WAAW,IAEzBtphB,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,KAAO,MAAOjuU,EAAmB,KAARo4F,IAAWA,EAAO;AAErE,IAAI,IAAIpjW,EAAI,EAAGM,EAA0B,GAAIN,GAAKgrQ,IAAS1qQ,EAAEN,GAAK,MAAOA,EACxE,IAAI,IAAIqlF,EAAI,EAAGA,GAAK+9Q,IAAQ/9Q,EAAG/kF,EAAEN,GAAGqlF,GAAKghhB,GAAYpvZ,EAAMt+J,EAAKsgiB;AACjE,OAAO34kB,CACR,CA6EA,SAASkmmB,GAAgBvvZ,EAAMh3M,EAAQ04C,GAEtC,OADAs+J,EAAKx6M,GAAK,EACH,CAACupmB,GAAiB/uZ,GAC1B,CACA,SAASwvZ,GAAiBxvZ,GAEzB,OADAA,EAAKx6M,GAAK,EACH,EACR,CAUA,SAASiqmB,GAAgBzvZ,GAExB,OADAA,EAAKx6M,GAAK,EACH,CAAC0rlB,GAAYlxY,GAA4B,EAArBA,EAAKgrX,WAAW,GAC5C,CAEA,IAWI0kC,GAAY,CACf,OACA,MACA,UACA,KACA,SACA,KACA,eACA,KACA,SACA,KACA,KACA,KACA,cACA,KACA,KACA,KACA,YA6CGC,GAAW,CACP,EAAa,CAAE1mmB,EAAE,SAAU0L,EAxPnC,SAAsBqrM,EAAMh3M,EAAQ04C,GAEnC,OADAs+J,EAAKx6M,IACFk8C,GAAqB,IAAbA,EAAKsgiB,KAAmB,CAAChiY,EAAKgrX,WAAW,EAAG,KAAM,GAGtD,CAFGhrX,EAAKgrX,WAAW,GAChBhrX,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GAExD,GAmPQ,EAAa,CAAE/4kB,EAAE,SAAU0L,EAnGhBqskB,IAoGX,EAAa,CAAE/3kB,EAAE,SAAU0L,EAAE+5lB,IAC7B,EAAa,CAAEzlmB,EAAE,SAAU0L,EAAE+5lB,IAC7B,EAAa,CAAEzlmB,EAAE,SAAU0L,EAAE+5lB,IAC7B,EAAa,CAAEzlmB,EAAE,SAAU0L,EAAE+5lB,IAC7B,EAAa,CAAEzlmB,EAAE,WAAY0L,EAAE+5lB,IAC/B,EAAa,CAAEzlmB,EAAE,YAAa0L,EAAE+5lB,IAChC,EAAa,CAAEzlmB,EAAE,QAAS0L,EAAE+5lB,IAC5B,GAAa,CAAEzlmB,EAAE,QAAS0L,EAAE+5lB,IAC5B,GAAa,CAAEzlmB,EAAE,QAAS0L,EAAE+5lB,IAC5B,GAAa,CAAEzlmB,EAAE,QAAS0L,EAAE+5lB,IAC5B,GAAa,CAAEzlmB,EAAE,QAAS0L,EAAE+5lB,IAC5B,GAAa,CAAEzlmB,EAAE,QAAS0L,EAAE+5lB,IAC5B,GAAa,CAAEzlmB,EAAE,WAAY0L,EAAE+5lB,IAC/B,GAAa,CAAEzlmB,EAAE,WAAY0L,EAAE+5lB,IAC/B,GAAa,CAAEzlmB,EAAE,WAAY0L,EAAE+5lB,IAC/B,GAAa,CAAEzlmB,EAAE,WAAY0L,EAAE+5lB,IAC/B,GAAa,CAAEzlmB,EAAE,YAAa0L,EAAE+5lB,IAChC,GAAa,CAAEzlmB,EAAE,aAAc0L,EAAE+5lB,IACjC,GAAa,CAAEzlmB,EAAE,WAAY0L,EAAE+5lB,IAC/B,GAAa,CAAEzlmB,EAAE,aAAc0L,EAAE+5lB,IACjC,GAAa,CAAEzlmB,EAAE,SAAU0L,EAzPnC,SAAsBqrM,EAAMh3M,EAAQ04C,GAAkB,OAAVs+J,EAAKx6M,IAAY8rlB,GAA2BtxY,EAAMh3M,EAAU04C,EAAO,GA0PvG,GAAa,CAAEz4C,EAAE,WAAY0L,EAlDrC,SAAwBqrM,EAAMh3M,EAAQ04C,GAIrC,OAHAs+J,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAK,EACVw6M,EAAKx6M,GAAmB,GAAbk8C,EAAKsgiB,KAAY,EAAI,EACzB,CAAC,WACT,GA8CQ,GAAa,CAAE/4kB,EAAE,cAAe0L,EA7CxC,SAA2BqrM,EAAMh3M,EAAQ04C,GAExC,OADAs+J,EAAKx6M,GAAmB,GAAbk8C,EAAKsgiB,KAAY,EAAI,EACzB,CAAC,cACT,GA2CQ,GAAa,CAAE/4kB,EAAE,SAAU0L,EAxQnC,SAAsBqrM,GAAkB,OAAVA,EAAKx6M,IAAYw9kB,GAAKhjY,EAAKgrX,WAAW,GAAK,GAyQjE,GAAa,CAAE/hkB,EAAE,UAAW0L,EAnQpC,SAAuBqrM,GAAkB,OAAVA,EAAKx6M,IAAiC,IAArBw6M,EAAKgrX,WAAW,EAAO,GAoQ/D,GAAa,CAAE/hkB,EAAE,SAAU0L,EAvQnC,SAAsBqrM,GAAkB,OAAVA,EAAKx6M,IAAYw6M,EAAKgrX,WAAW,EAAI,GAwQ3D,GAAa,CAAE/hkB,EAAE,SAAU0L,EAlQnC,SAAsBqrM,GAAkB,OAAVA,EAAKx6M,IAAY4glB,GAAWpmY,EAAU,GAmQ5D,GAAa,CAAE/2M,EAAE,WAAY0L,EAhZrC,SAAwBqrM,EAAMh3M,EAAQ04C,GACrC,IAAIn1C,GAAyB,GAAjByzM,EAAKA,EAAKx6M,OAAgB;AAEtC,OADAw6M,EAAKx6M,GAAkB,GAAbk8C,EAAKsgiB,KAAY,EAAiB,IAAbtgiB,EAAKsgiB,KAAa,GAAK,EAC/C,CAACz1kB,EACT,GA6YQ,GAAa,CAAEtD,EAAE,UAAW0L,EA9SpC,SAAuBqrM,EAAMh3M,EAAQ04C,GAEpC,IAAIn1C,GAAuB,GAAfyzM,EAAKA,EAAKx6M,KAAY;AAClCw6M,EAAKx6M,GAAK;AACV,IAAIoqmB,EAAQ5vZ,EAAKgrX,WAAWtphB,GAAQA,EAAKsgiB,MAAQ,EAAI,EAAI;AACzD,MAAO,CAAC6tB,GAASD,GAAQE,GAAKF,GAAQrjmB,EACvC,GAySQ,GAAa,CAAEtD,EAAE,aAAc0L,EAvSvC,SAA0BqrM,EAAMh3M,EAAQ04C,GACvC,IAAIn1C,EAAOyzM,EAAKA,EAAKx6M,KACjBuqmB,EAAU/vZ,EAAKgrX,WAAW,GAAIglC,EAAMtujB,GAAQA,EAAKsgiB,MAAQ,EAAI,CAAU,IAARz1kB,GAAgB,EAAI,EAAIyzM,EAAKgrX,WAAW,IAI5G,SAAkBhrX,GACjB,MAAO,CAACA,EAAKA,EAAKx6M,EAAE,IAAI,EAAwB,MAArBw6M,EAAKgrX,WAAW,GAC5C,CAFA,CAJ0HhrX;AACzH,MAAO,CAAC+vZ,GAAqB,IAAXC,EAAI,GAAWF,GAAOG,IAAOD,EAAI,IACpD,GAoSQ,GAAa,CAAE/mmB,EAAE,UAAW0L,EA1MpC,SAAuBqrM,EAAMh3M,EAAQ04C,GACpC,IAAIn1C,EAAQyzM,EAAKgrX,WAAW,KAAO,EAAK,EACpC1tjB,GAAMokC,GAASA,EAAKsgiB,MAAQ,EAAM,EAAI,EACtCkuB,EAAYlwZ,EAAKgrX,WAAW1tjB;AAChC,OAAOokC,EAAKsgiB,MACX,KAAK,EAAGhiY,EAAKx6M,GAAK;AAAG;AACrB,KAAK,EAAG,KAAK,EAAGw6M,EAAKx6M,GAAK;AAAG;AAC7B,KAAK,EAAGw6M,EAAKx6M,GAAK,GAEnB,MAAO,CAAC+G,EAAM,EAAG2jmB,EAClB,GAiMQ,GAAa,CAAEjnmB,EAAE,SAAU0L,EA7UnC,SAAsBqrM,EAAMh3M,EAAQ04C,GAEnC,IAAIn1C,GAAuB,GAAfyzM,EAAKA,EAAKx6M,KAAY;AAGlC,OAFAw6M,EAAKx6M,GAAK,EAEH,CAAC+G,EADEuimB,GAAc9uZ,EAAM,EAAGt+J,GAElC,GAwUQ,GAAa,CAAEz4C,EAAE,UAAW0L,EAncpC,SAAuBqrM,EAAMh3M,EAAQ04C,GAGpC,MAAO,EAFsB,GAAjBs+J,EAAKA,EAAKx6M,OAAgB,EAC3BopmB,GAAe5uZ,EAAMt+J,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,KAAmBtgiB,GAE3E,GAgcQ,GAAa,CAAEz4C,EAAE,aAAc0L,EA/KvC,SAA0BqrM,EAAMh3M,EAAQ04C,GACvC,IAAIn1C,EAAQyzM,EAAKgrX,WAAW,KAAO,EAAK;AAGxC,OAFAhrX,EAAKx6M,GAAMk8C,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,EAEjC,CAACz1kB,EADEyzM,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GAExD,GA2KQ,GAAa,CAAE/4kB,EAAE,YAAa0L,EA1IhBqskB,IA2Id,GAAa,CAAE/3kB,EAAE,cAAe0L,EAzIhBqskB,IA0IhB,GAAa,CAAE/3kB,EAAE,aAAc0L,EA1KvC,SAA0BqrM,EAAMh3M,EAAQ04C,GAGvC,MAAO,CAFKs+J,EAAKgrX,WAAW,KAAO,EAAK,EAC9BhrX,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GAExD,GAuKQ,GAAa,CAAE/4kB,EAAE,YAAa0L,EAnKtC,SAAyBqrM,EAAMh3M,EAAQ04C,GACtC,IAAIn1C,EAAQyzM,EAAKgrX,WAAW,KAAO,EAAK;AAIxC,OAHAhrX,EAAKx6M,GAAK,EACPk8C,EAAKsgiB,KAAO,GAAGhiY,EAAKx6M,IACP,IAAbk8C,EAAKsgiB,OAAYhiY,EAAKx6M,GAAK,GACvB,CAAC+G,EACT,GA8JQ,GAAa,CAAEtD,EAAE,aAAc0L,EArbvC,SAA0BqrM,EAAMh3M,EAAQ04C,GACvC,IAAIn1C,GAAyB,GAAjByzM,EAAKA,EAAKx6M,OAAgB;AAEtC,OADAw6M,EAAKx6M,GAAKk8C,GAASA,EAAKsgiB,KAAO,EAAK,GAAMtgiB,EAAKsgiB,KAAO,EAAI,EAAI,EACvD,CAACz1kB,EACT,GAkbQ,GAAa,CAAEtD,EAAE,UAAW0L,EA5UpC,SAAuBqrM,EAAMh3M,EAAQ04C,GACpC,IAAIn1C,GAAuB,GAAfyzM,EAAKA,EAAKx6M,KAAY;AAClCw6M,EAAKx6M,GAAK;AACV,IAAI+6kB,EAvJL,SAA0BvgY,EAAMh3M,EAAQ04C,GACvC,IAAIsgiB,EAAOtgiB,GAAQA,EAAKsgiB,KAAOtgiB,EAAKsgiB,KAAO;AAC3C,GAAGA,GAAQ,GAAKA,GAAQ,EAAG,OAS5B,SAAgChiY,GAC/B,IAAImwZ,EAAKnwZ,EAAKgrX,WAAW,GACrBp+jB,EAAIozM,EAAKgrX,WAAW,GACpB+W,GAAa,MAALouB,IAAgB,GAAIruB,GAAa,MAALquB,IAAgB;AAIxD,OAHAA,GAAM,MACK,GAARpuB,GAAaouB,GAAM,OAAQA,GAAU,OAC7B,GAARruB,GAAal1kB,GAAK,MAAMA,GAAQ,KAC5B,CAACtD,EAAE6mmB,EAAGvjmB,EAAEA,EAAEk1kB,KAAKA,EAAKC,KAAKA,EACjC,CARA,CAT0D/hY;AACzD,IAAI12M,EAAI02M,EAAKgrX,WAAWgX,GAAQ,GAAK,EAAI,GACrCj5S,EAAK/oF,EAAKgrX,WAAW,GACrB8W,GAAa,MAAL/4S,IAAgB,GAAIg5S,GAAa,MAALh5S,IAAgB;AAExD,GADAA,GAAM,MACK,GAARg5S,EAAW,KAAMz4kB,EAAI,QAASA,GAAK;AACtC,GAAW,GAARw4kB,EAAW,KAAM/4S,EAAK,MAAQA,GAAU;AAC3C,MAAO,CAACz/R,EAAEA,EAAEsD,EAAEm8R,EAAG+4S,KAAKA,EAAKC,KAAKA,EACjC,CAVA,CAuJ4B/hY,EAAM,EAAGt+J;AACpC,MAAO,CAACn1C,EAAMg0kB,EACf,GAwUQ,GAAa,CAAEt3kB,EAAE,WAAY0L,EAparC,SAAwBqrM,EAAMh3M,EAAQ04C,GACrC,IAAIn1C,GAAyB,GAAjByzM,EAAKA,EAAKx6M,OAAgB,EAClC0iQ,EA5FL,SAA2BloD,EAAMh3M,EAAQ04C,GACxC,GAAGA,EAAKsgiB,KAAO,EAAG,OAAO6sB,GAAqB7uZ;AAC9C,IAAI12M,EAAE02M,EAAKgrX,WAAwB,IAAbtphB,EAAKsgiB,KAAa,EAAI,GAAIhhkB,EAAEg/L,EAAKgrX,WAAwB,IAAbtphB,EAAKsgiB,KAAa,EAAI,GACpFp1kB,EAAE+hmB,GAAc3uZ,EAAM,GACtBl8L,EAAE6qlB,GAAc3uZ,EAAM;AAC1B,MAAO,CAAE/0M,EAAE,CAAC3B,EAAEA,EAAGsD,EAAEA,EAAE,GAAIk1kB,KAAKl1kB,EAAE,GAAIm1kB,KAAKn1kB,EAAE,IAAK9D,EAAE,CAACQ,EAAE0X,EAAGpU,EAAEkX,EAAE,GAAIg+jB,KAAKh+jB,EAAE,GAAIi+jB,KAAKj+jB,EAAE,IACnF,CANA,CA4F8Bk8L,EAAMh3M,EAAY04C;AAC/C,MAAO,CAACn1C,EAAM27P,EACf,GAiaQ,GAAa,CAAEj/P,EAAE,cAAe0L,EA5DxC,SAA2BqrM,GAG1B,MAAO,CAFKA,EAAKgrX,WAAW,KAAO,EAAK,EAC9BhrX,EAAKgrX,WAAW,GAE3B,GAyDQ,GAAa,CAAE/hkB,EAAE,eAAgB0L,EAxDzC,SAA4BqrM,GAG3B,MAAO,CAFKA,EAAKgrX,WAAW,KAAO,EAAK,EAC9BhrX,EAAKgrX,WAAW,GAE3B,GAqDQ,GAAa,CAAE/hkB,EAAE,WAAY0L,EA1MrC,SAAwBqrM,EAAMh3M,EAAQ04C,GACrC,OAAgB,GAAbA,EAAKsgiB,KAMT,SAA8BhiY,GAC7B,IAAIzzM,EAAQyzM,EAAKgrX,WAAW,KAAO,EAAK,EACpColC,EAAOpwZ,EAAKgrX,WAAW,EAAG;AAC9BhrX,EAAKx6M,GAAK;AACV,IAAI0qmB,EAAYlwZ,EAAKgrX,WAAW;AAEhC,OADAhrX,EAAKx6M,GAAK,GACH,CAAC+G,EAAM6jmB,EAAMF,EACrB,CAPA,CANgDlwZ,GAIxC,CAHKA,EAAKgrX,WAAW,KAAO,EAAK,EAC7BhrX,EAAKgrX,WAAW,GACXhrX,EAAKgrX,WAAW,GAEjC,GAqMQ,GAAa,CAAE/hkB,EAAE,WAAY0L,EAzUrC,SAAwBqrM,EAAMh3M,EAAQ04C,GACrC,IAAIn1C,GAAuB,GAAfyzM,EAAKA,EAAKx6M,KAAY;AAClCw6M,EAAKx6M,GAAK;AACV,IAAI4qmB,EAAOpwZ,EAAKgrX,WAAW;AAG3B,OAFGtphB,GAAqB,GAAbA,EAAKsgiB,OAAWhiY,EAAKx6M,GAAK,IAE9B,CAAC+G,EAAM6jmB,EADJtB,GAAc9uZ,EAAM,EAAGt+J,GAElC,GAmUQ,GAAa,CAAEz4C,EAAE,YAAa0L,EAzctC,SAAyBqrM,EAAMh3M,EAAQ04C,GACtC,IAAIn1C,GAAyB,GAAjByzM,EAAKA,EAAKx6M,OAAgB,EAClC4qmB,EAAOpwZ,EAAKgrX,WAAW,EAAG;AAO9B,OALGtphB,GACG,IADUA,EAAKsgiB,OACZhiY,EAAKx6M,GAAK,IAIZ,CAAC+G,EAAM6jmB,EADHxB,GAAe5uZ,EAAM1iM,EAAGokC,GAEpC,GAgcQ,GAAa,CAAEz4C,EAAE,cAAe0L,EAnKxC,SAA2BqrM,EAAMh3M,EAAQ04C,GACxC,IAAIn1C,GAAyB,GAAjByzM,EAAKA,EAAKx6M,OAAgB,EAClC4qmB,EAAOpwZ,EAAKgrX,WAAW,GACvB1tjB,EAAI;AACR,GAAGokC,EAAM,OAAOA,EAAKsgiB,MACpB,KAAK,EAAG1kkB,EAAI;AAAI;AAChB,KAAK,GAAIA,EAAI,EAGd,OADA0iM,EAAKx6M,GAAK8X,EACH,CAAC/Q,EAAM6jmB,EACf,GA0JQ,GAAa,CAAEnnmB,EAAE,eAAgB0L,EAxbzC,SAA4BqrM,EAAMh3M,EAAQ04C,GACzC,IAAIn1C,GAAyB,GAAjByzM,EAAKA,EAAKx6M,OAAgB,EAClC4qmB,EAAOpwZ,EAAKgrX,WAAW,GACvB1tjB,EAAI;AACR,GAAGokC,EAAM,OAAOA,EAAKsgiB,MACpB,KAAK,EAAGhiY,EAAKx6M,GAAK,GAAI8X,EAAI;AAAG;AAC7B,KAAK,GAAIA,EAAI,GAGd,OADA0iM,EAAKx6M,GAAK8X,EACH,CAAC/Q,EAAM6jmB,EACf,GA+aQ,IAAa,CAAC,GAGlBC,GAAW,CACP,GAAa,GAAa,GAAa,GACvC,GAAa,GAAa,GAAa,GACvC,GAAa,GAAa,GAAa,GACvC,GAAa,GAAa,GAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,GACvC,GAAa,GAAa,IAAa,IAG3CC,GAAQ,CACJ,EAAa,CAAErnmB,EAAE,YAAa0L,EAAE86lB,IAChC,EAAa,CAAExmmB,EAAE,WAAY0L,EApJhB46lB,IAqJb,EAAa,CAAEtmmB,EAAE,YAAa0L,EAxKhB46lB,IAyKd,EAAa,CAAEtmmB,EAAE,YAAa0L,EApJhB46lB,IAqJd,EAAa,CAAEtmmB,EAAE,aAAc0L,EApKhB46lB,IAqKf,GAAa,CAAEtmmB,EAAE,gBAAiB0L,EA9JhB46lB,IA+JlB,GAAa,CAAEtmmB,EAAE,iBAAkB0L,EA3JhB66lB,IA4JnB,GAAa,CAAEvmmB,EAAE,aAAc0L,EA3KhB66lB,IA4Kf,GAAa,CAAEvmmB,EAAE,cAAe0L,EA1KhB66lB,IA2KhB,GAAa,CAAEvmmB,EAAE,mBAAoB0L,EAhKhB86lB,IAiKrB,GAAa,CAAExmmB,EAAE,UAAW0L,EArIpC,SAAuBqrM,GACtBA,EAAKx6M,GAAK;AACV,IAAI4qmB,EAAOpwZ,EAAKgrX,WAAW,GACvB3ub,EAAQ2jE,EAAKgrX,WAAW,GACxB9zW,EAAMlX,EAAKgrX,WAAW,GACtBp+jB,EAAIozM,EAAKgrX,WAAW,GACpBlnjB,EAAIk8L,EAAKgrX,WAAW;AAExB,MAAO,CAAColC,KAAMA,EAAMG,QAAe,EAANl0d,EAAYruF,GADhC0hjB,GAAWrzd,GAAS,EAAK,IACc66E,IAAIA,EAAKtqN,EAAEA,EAAGkX,EAAEA,EACjE,GA6HQ,GAAa,CAAE7a,EAAE,YAAa0L,EA3HtC,SAAyBqrM,GAExB,OADAA,EAAKx6M,GAAK,EACH,CAACw6M,EAAKgrX,WAAW,GACzB,GAyHQ,IAAa,CAAC,GAElBwlC,GAAQ,CACJ,EAAa,CAAEvnmB,EAAE,cAAe0L,EArGxC,SAA2BqrM,GAE1B,OADAA,EAAKx6M,GAAK,EACH,CAAC,EAAG,EACZ,GAmGQ,EAAa,CAAEyD,EAAE,cAAe0L,EApaxC,SAA2BqrM,EAAMh3M,EAAQ04C,GACxC,IAAIwtjB,EAA4B,IAAjBlvZ,EAAKA,EAAKx6M,EAAE,GAAa,EAAI;AAE5C,OADAw6M,EAAKx6M,GAAKk8C,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,EAChC,CAACktB,EACT,GAiaQ,EAAa,CAAEjmmB,EAAE,YAAa0L,EAnbtC,SAAyBqrM,EAAMh3M,EAAQ04C,GACtC,IAAI+ujB,EAA0B,IAAjBzwZ,EAAKA,EAAKx6M,EAAE,GAAa,EAAI;AAE1C,OADAw6M,EAAKx6M,GAAK,EACH,CAACirmB,EAAOzwZ,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GAC7D,GAgbQ,EAAa,CAAE/4kB,EAAE,gBAAiB0L,EArc1C,SAA6BqrM,EAAMh3M,EAAQ04C,GAC1Cs+J,EAAKx6M,GAAI;AAIT,IAHA,IAAIihB,EAASu5L,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GACtD34kB,EAAsB,GAElBN,EAAI,EAAGA,GAAK0d,IAAU1d,EAAGM,EAAEgH,KAAK2vM,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI;AACrF,OAAO34kB,CACR,GA+bQ,EAAa,CAAEJ,EAAE,cAAe0L,EA5bxC,SAA2BqrM,EAAMh3M,EAAQ04C,GACxC,IAAIgvjB,EAA4B,IAAjB1wZ,EAAKA,EAAKx6M,EAAE,GAAa,EAAI;AAE5C,OADAw6M,EAAKx6M,GAAK,EACH,CAACkrmB,EAAS1wZ,EAAKgrX,WAAWtphB,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,GAC/D,GAybQ,GAAa,CAAE/4kB,EAAE,aAAc0L,EAhWvC,SAA0BqrM,EAAMh3M,EAAQ04C,GACvCs+J,EAAKx6M,GAAKk8C,GAAqB,GAAbA,EAAKsgiB,KAAY,EAAI,CACxC,GA+VQ,GAAa,CAAE/4kB,EAAE,gBAAiB0L,EAAEs6lB,IACpC,GAAa,CAAEhmmB,EAAE,gBAAiB0L,EAAEs6lB,IACpC,GAAa,CAAEhmmB,EAAE,eAAgB0L,EA9ZzC,SAA4BqrM,GAE3B,OADAA,EAAKgrX,WAAW,GACTmkC,GAAuBnvZ,EAC/B,GA4ZQ,GAAa,CAAE/2M,EAAE,mBAAoB0L,EAzZ7C,SAAgCqrM,GAE/B,OADAA,EAAKgrX,WAAW,GACTmkC,GAAuBnvZ,EAC/B,GAuZQ,IAAa,CAAE/2M,EAAE,iBAAkB0L,EApb3C,SAA8BqrM,GAC7B,IAAIywZ,EAA0B,IAAjBzwZ,EAAKA,EAAKx6M,EAAE,GAAa,EAAI;AAE1C,OADAw6M,EAAKx6M,GAAK,EACH,CAACirmB,EAAOzwZ,EAAKgrX,WAAW,GAChC,GAibQ,IAAa,CAAC;AAItB,SAASirB,GAAej2Y,EAAMh3M,EAAQ8slB,EAAMp0iB,GAC3C,GAAGA,EAAKsgiB,KAAO,EAAG,OAAOhB,GAAUhhY,EAAMh3M;AAGzC,IAFA,IAAIiJ,EAAS+tM,EAAKx6M,EAAIwD,EAClBK,EAAI,GACAN,EAAI,EAAGA,IAAM+slB,EAAK9slB,SAAUD,EACnC,OAAO+slB,EAAK/slB,GAAG,IACd,IAAK,WACJ+slB,EAAK/slB,GAAG,GAAKummB,GAAoBtvZ,EAAM,EAAGt+J,GAC1Cr4C,EAAEgH,KAAKyllB,EAAK/slB,GAAG;AACf;AACD,IAAK,aACJ+slB,EAAK/slB,GAAG,GAAKsmmB,GAAkBrvZ,EAAM81Y,EAAK/slB,GAAG,GAAI24C,GACjDr4C,EAAEgH,KAAKyllB,EAAK/slB,GAAG;AACf;AACD,IAAK,SACD24C,GAAqB,IAAbA,EAAKsgiB,OACf8T,EAAK/slB,GAAG,GAAG,GAAKi3M,EAAKgrX,WAAW,GAChC3hkB,EAAEgH,KAAKyllB,EAAK/slB,GAAG;AACd;AACH,IAAK,UACL,IAAK,iBACL,IAAK,aACL,IAAK,cACJ,KAAM,eAAiB+slB,EAAK/slB,GAAG,GAQlC,OADc,KAHdC,EAASiJ,EAAS+tM,EAAKx6M,IAGN6D,EAAEgH,KAAK2wkB,GAAUhhY,EAAMh3M,IACjCK,CACR,CAGA,SAAS2slB,GAAWh2Y,EAAMh3M,EAAQ04C,GAGjC,IAFA,IACI1gC,EAAGymC,EADHx1C,EAAS+tM,EAAKx6M,EAAIwD,EACX2nmB,EAAO,GACZ1+lB,GAAU+tM,EAAKx6M,GACpBwD,EAASiJ,EAAS+tM,EAAKx6M,EACvBiiD,EAAKu4J,EAAKA,EAAKx6M,GACfwb,EAAI2ulB,GAASlojB,IAAOkojB,GAASU,GAAS5ojB,IAC5B,KAAPA,GAAsB,KAAPA,IAAazmC,GAAY,KAAPymC,EAAc6ojB,GAAQE,IAAOxwZ,EAAKA,EAAKx6M,EAAI,KAC3Ewb,GAAMA,EAAErM,EACLg8lB,EAAKtgmB,KAAK,CAAC2Q,EAAE/X,EAAG+X,EAAErM,EAAEqrM,EAAMh3M,EAAQ04C,KADVs/hB,GAAUhhY,EAAMh3M;AAGhD,OAAO2nmB,CACR,CAEA,SAASC,GAAgBj8lB,GAExB,IADA,IAAItL,EAAsB,GAClBN,EAAI,EAAGA,EAAI4L,EAAE3L,SAAUD,EAAG,CAEjC,IADA,IAAI0G,EAAIkF,EAAE5L,GAAIO,EAAsB,GAC5B8kF,EAAI,EAAGA,EAAI3+E,EAAEzG,SAAUolF,EAAG,CACjC,IAAIn0E,EAAIxK,EAAE2+E;AACPn0E,EAEG,IAFOA,EAAE,GAIb3Q,EAAE+G,KAAK,IAAM4J,EAAE,GAAGiP,QAAQ,KAAK,MAAQ,KAC/B5f,EAAE+G,KAAK4J,EAAE,IACZ3Q,EAAE+G,KAAK,GACf,CACAhH,EAAEgH,KAAK/G,EAAEiX,KAAK,KACf,CACA,OAAOlX,EAAEkX,KAAK,IACf,CAGA,IAAIswlB,GAAW,CACdC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,MAAO,IACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,SAAU,IACVC,OAAQ;AAST,SAASC,GAAaC,EAAUvB,EAAiB1ujB,GAChD,IAAIiwjB,EAAU,MAAO;AACrB,GAAGjwjB,EAAKsgiB,KAAO,KAAO2vB,EAASC,MAAQD,EAASC,IAAIxB,IAAQ,OAAOuB,EAAStuB,WAAW+sB;AACvF,IAAIuB,EAASC,IAAK,MAAO;AACzB,IAAIA,EAAMD,EAASC,IAAIxB;AACvB,GAAG1ujB,EAAKsgiB,KAAO,EAGd,OAFGouB,EAAO,MAAOA,GAAO,OACrBA,EAAO,IAAGA,GAAQA,GACN,GAARA,EAAY,GAAKuB,EAASC,IAAIxB,EAAO;AAE7C,IAAIwB,EAAK,MAAO;AAChB,IAAIvomB,EAAI;AACR,GAAGq4C,EAAKsgiB,KAAO,EAAG,OAAO2vB,EAASC,EAAI,IAAI,IACzC,KAAK,IAEJ,OADAvomB,GAAe,GAAXuomB,EAAI,GAAW,OAASD,EAAStuB,WAAWuuB,EAAI,IAC7CA,EAAI,IAAMA,EAAI,GAAKvomB,EAAIA,EAAI,IAAMsomB,EAAStuB,WAAWuuB,EAAI;AACjE,KAAK,IACJ,OAAe,MAAZlwjB,EAAKmwjB,IAAoBF,EAAStuB,WAAW3hiB,EAAKmwjB,KAC9C,cAAgBF,EAASC,EAAI,IAAI;AAGzC,QAAS,MAAO,aAAeD,EAASC,EAAI,IAAI,GAEjD,OAAOD,EAASC,EAAI,IAAI,GAAG,IAC1B,KAAK,KAEJ,OADAvomB,GAAe,GAAXuomB,EAAI,GAAW,OAAUD,EAAStuB,WAAWuuB,EAAI,KAAO,cACrDA,EAAI,IAAMA,EAAI,GAAKvomB,EAAIA,EAAI,IAAMsomB,EAAStuB,WAAWuuB,EAAI;AACjE,KAAK,MAAQ,OAAOD,EAASC,EAAI,IAAI/omB,MAAM,GAAGwjB,IAAI,SAASxb,GAAQ,OAAOA,EAAK2klB,IAAM,GAAGj1kB,KAAK;AAC7F,QACC,OAAIoxlB,EAASC,EAAI,IAAI,GAAG,IACxBvomB,GAAe,GAAXuomB,EAAI,GAAW,OAAUD,EAASC,EAAI,IAAI,GAAG,GAAGA,EAAI,KAAO,cACxDA,EAAI,IAAMA,EAAI,GAAKvomB,EAAIA,EAAI,IAAMsomB,EAASC,EAAI,IAAI,GAAG,GAAGA,EAAI,KAFhC,cAItC,CACA,SAASE,GAASH,EAAUvB,EAAiB1ujB,GAC5C,IAAIqwjB,EAAUL,GAAaC,EAAUvB,EAAM1ujB;AAC3C,MAAkB,QAAXqwjB,EAAoBA,EAzC5B,SAAkCC,EAAkBtwjB,GACnD,KAAIswjB,GAAWtwjB,GAAQA,EAAKsgiB,MAAQ,GAAKtgiB,EAAKsgiB,MAAQ,GAAI,MAAM,IAAI74kB,MAAM;AAC1E,MAAI,kCAAkC2kB,KAAKkklB,GAAe,IAAMA,EAAQ,IACjEA,CACR,CAJA,CAyC+DD,EAASrwjB,EACxE,CACA,SAASuwjB,GAAkBz7f,EAAuB71B,EAAO6sS,EAAcmkP,EAAUjwjB,GAChF,IAEkCi1Q,EAAIC,EAAgBhqT,EAAsCtD,EAFxF04kB,EAAQtgiB,GAAQA,EAAKsgiB,MAAS,EAC9Bx0J,EAAqC,CAACvib,EAAE,CAAC2B,EAAE,EAAGtD,EAAE,GAAGR,EAAE,CAAC8D,EAAE,EAAGtD,EAAE,IAC7DopD,EAA0B,GAA2C09iB,EAAK,EAAG8B,EAAQ,EAAMF,EAAM;AACrG,IAAIx7f,EAAQ,KAAOA,EAAQ,GAAG,GAAI,MAAO;AAEzC,IADA,IAAI27f,GAAW,EAAGtomB,EAAK,GACfg+C,EAAK,EAAGuqjB,EAAQ57f,EAAQ,GAAGxtG,OAAQ6+C,EAAKuqjB,IAASvqjB,EAAI,CAC5D,IAAIlzC,EAAI6hG,EAAQ,GAAG3uD;AACnB,OAAOlzC,EAAE,IACR,IAAK,YACJ+9C,EAAMriD,KAAK,IAAMqiD,EAAM0nG;AAAQ;AAChC,IAAK,WACJ1nG,EAAMriD,KAAK,IAAMqiD,EAAM0nG;AAAQ;AAChC,IAAK,aACJ1nG,EAAMriD,KAAKqiD,EAAM0nG,MAAQ;AAAM;AAEhC,IAAK,SACL,IAAK,YACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,SAEJ,GADAu8J,EAAKjkQ,EAAM0nG,MAAOw8J,EAAKlkQ,EAAM0nG,MAC1B+3c,GAAW,EAAG,CAChB,OAAO37f,EAAQ,GAAG27f,GAAS,GAAG,IAC7B,KAAK,EAEJtomB,EAAKsma,GAAK,IAAK35T,EAAQ,GAAG27f,GAAS,GAAG;AAAK;AAC5C,KAAK,EAEJtomB,EAAKsma,GAAK,KAAM35T,EAAQ,GAAG27f,GAAS,GAAG;AAAK;AAC7C,QAGC,GAFAtomB,EAAK,GAEF63C,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,+BAAiCqtG,EAAQ,GAAG27f,GAAS,GAAG,IAEvFv7S,GAAU/sT,EACVsomB,GAAW,CACZ,CACAz/iB,EAAMriD,KAAKumT,EAAGi6S,GAASl8lB,EAAE,IAAIgiT;AAC7B;AAED,IAAK,WACJA,EAAKjkQ,EAAM0nG,MAAOw8J,EAAKlkQ,EAAM0nG,MAC7B1nG,EAAMriD,KAAKumT,EAAG,IAAID;AAClB;AACD,IAAK,WACJA,EAAKjkQ,EAAM0nG,MAAOw8J,EAAKlkQ,EAAM0nG,MAC7B1nG,EAAMriD,KAAKumT,EAAG,IAAID;AAClB;AACD,IAAK,WACJA,EAAKjkQ,EAAM0nG,MAAOw8J,EAAKlkQ,EAAM0nG,MAC7B1nG,EAAMriD,KAAKumT,EAAG,IAAID;AAClB;AAED,IAAK,gBAEL,IAAK,cAEL,IAAK,YAEL,IAAK,iBA2DL,IAAK,gBACL,IAAK,cA+FL,IAAK,aASL,IAAK,SAGL,IAAK,YAkBL,IAAK,cACL,IAAK,eACL,IAAK,cACL,IAAK,WACL,IAAK,cAGL,IAAK,aAEL,IAAK,cACJ;AA/LD,IAAK,SACkB/pT,EAAIi1kB,GAAgBltkB,EAAE,GAAG,GAAa64a,EAAQ9rY,GACpEgR,EAAMriD,KAAK6xkB,GAAgBt1kB,EAAGo1kB;AAC9B;AACD,IAAK,UACkBp1kB,EAAI4gX,EAAOq0N,GAAgBltkB,EAAE,GAAG,GAAa64W,EAAM9rU,GAAS/sC,EAAE,GAAG,GACvF+9C,EAAMriD,KAAK6xkB,GAAgBt1kB,EAAGo1kB;AAC9B;AACD,IAAK,WACkBouB,EAAoBz7lB,EAAE,GAAG,GAAW/H,EAAIi1kB,GAAgBltkB,EAAE,GAAG,GAAa64a,EAAQ9rY,GACxGswjB,EAAQF,GAASH,EAAUvB,EAAM1ujB,GAEjCgR,EAAMriD,KAAK2hmB,EAAQ,IAAM9vB,GAAgBt1kB,EAAGo1kB;AAC5C;AAED,IAAK,UACL,IAAK,aAEJ,IAAIie,EAAmBtrlB,EAAE,GAAG,GAAagmQ,EAAmBhmQ,EAAE,GAAG;AAC7DsrlB,IAAMA,EAAO;AAEjB,IAAI9+jB,EAAe,IADnB8+jB,GAAQ,KACe,GAAKvtiB,EAAM7pD,OAAOo3lB;AACzCvtiB,EAAM1pD,QAAUi3lB,EACJ,SAATtlV,IAAiBA,EAAOx5O,EAAK5kB,SAChCm2C,EAAMriD,KAAKsqQ,EAAO,IAAMx5O,EAAK5gB,KAAK,KAAO;AACzC;AAED,IAAK,UACJmyC,EAAMriD,KAAKsE,EAAE,GAAK,OAAS;AAAU;AACtC,IAAK,SAOL,IAAK,SACJ+9C,EAAMriD,KAAkBsE,EAAE;AAAY;AANvC,IAAK,SACJ+9C,EAAMriD,KAAK+oC,OAAOzkC,EAAE;AAAM;AAC3B,IAAK,SAEJ+9C,EAAMriD,KAAK,IAAMsE,EAAE,GAAGuU,QAAQ,KAAM,MAAQ;AAAM;AAGnD,IAAK,WACkB5f,EAAI24kB,GAAgBttkB,EAAE,GAAG,GAAI64W,EAAO,CAACviX,EAAEuiX,GAAQggE,EAAQ9rY,GAC7EgR,EAAMriD,KAAK+xkB,GAAkB94kB,EAAYo4C;AACzC;AACD,IAAK,UACkBp4C,EAAI24kB,GAAgBttkB,EAAE,GAAG,GAAI64a,EAAQ9rY,GAC3DgR,EAAMriD,KAAK+xkB,GAAkB94kB,EAAYo4C;AACzC;AACD,IAAK,YACkB0ujB,EAAoBz7lB,EAAE,GAAG,GAAWrL,EAAIqL,EAAE,GAAG,GACnEq9lB,EAAQF,GAASH,EAAUvB,EAAM1ujB,GACjCgR,EAAMriD,KAAK2hmB,EAAQ,IAAM5vB,GAAkB94kB,EAAYo4C;AACvD;AACD,IAAK,aACJgR,EAAMriD,KAAK,OAASqiD,EAAM0nG,MAAQ;AAClC;AAMD,IAAK,UAEJ83c,EAAWv9lB,EAAE,GAAG;AAChB,IAAI09lB,GAAOV,EAAS5ia,OAAO,IAAImja,EAAQ,KAAOP,EAAS,IAAI,IAAIO,GAC3DrhmB,EAAOwhmB,EAAMA,EAAI7c,KAAO,cAAgBp8iB,OAAO84jB;AAEhDrhmB,GAA2B,UAAnBA,EAAKhI,MAAM,EAAE,KAAmB64C,EAAK4wjB,OAAMzhmB,EAAOA,EAAKhI,MAAM,IACxE6pD,EAAMriD,KAAKQ;AACX;AAED,IAAK,WAEJ,IAA6E0hmB,EAAzEC,EAAsB79lB,EAAE,GAAG;AAE/B,GAF4Cu9lB,EAAWv9lB,EAAE,GAAG,KAEzD+sC,EAAKsgiB,MAAQ,GAGT,CACN,IAAI34kB,EAAI;AAQR,GAP0C,SAArCsomB,EAASa,IAAU,IAAI,IAAI,IAAI,KACW,QAArCb,EAASa,IAAU,IAAI,IAAI,IAAI,GACrCb,EAASa,GAASN,IAAYP,EAASa,GAASN,GAAStc,KAAO,IAClEvslB,EAAIsomB,EAAStuB,WAAWsuB,EAASa,GAASN,GAAStc,KAAK,GAAK,KAG1DvslB,EAAIsomB,EAAStuB,WAAW6uB,EAAQ,GAAI,KACtCP,EAASa,IAAYb,EAASa,GAASN,GAAU7omB,GAAKsomB,EAASa,GAASN,GAAS1c;KAC/E,GAAGmc,EAAS,IAAMA,EAAS,GAAGO,GAAU7omB,GAAKsomB,EAAS,GAAGO,GAAS1c;IAClE,CACJ,IAAIid,GAAYf,GAAaC,EAAUa,EAAS9wjB,IAAO,IAAIhhC,MAAM;AAC9D+xlB,EAASP,EAAU,GAAI7omB,EAAIopmB,EAASP,EAAU,GAC5C7omB,GAAK,aACX,CACAqpD,EAAMriD,KAAKhH;AACX,KACD,CApBImpmB,EAAU,IAAGA,GAAWA,GACxBb,EAASa,KAAUD,EAAaZ,EAASa,GAASN,IAoBlDK,IAAYA,EAAa,CAAC/c,KAAM,gBACpC9iiB,EAAMriD,KAAKkimB,EAAW/c;AACtB;AAED,IAAK,WACJ,IAAIkd,EAAK,IAAKC,EAAK;AACnB,GAAGR,GAAW,EAAG,CAEhB,OADAtomB,EAAK,GACE2sG,EAAQ,GAAG27f,GAAS,GAAG,IAE7B,KAAK,EAAGO,EAAKviM,GAAK,IAAK35T,EAAQ,GAAG27f,GAAS,GAAG,IAAMO;AAAI;AAExD,KAAK,EAAGA,EAAKviM,GAAK,KAAM35T,EAAQ,GAAG27f,GAAS,GAAG,IAAMO;AAAI;AAEzD,KAAK,EAAGC,EAAKxiM,GAAK,IAAK35T,EAAQ,GAAG27f,GAAS,GAAG,IAAMQ;AAAI;AAExD,KAAK,EAAGA,EAAKxiM,GAAK,KAAM35T,EAAQ,GAAG27f,GAAS,GAAG,IAAMQ;AAAI;AACzD,QAEC,GAAGjxjB,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,+BAAiCqtG,EAAQ,GAAG27f,GAAS,GAAG,IAEvFA,GAAW,CACZ,CACAz/iB,EAAMriD,KAAKqimB,EAAKhgjB,EAAM0nG,MAAQu4c;AAAK;AAEpC,IAAK,YAGL,IAAK,cA+CL,IAAK,aAGL,IAAK,eACJjgjB,EAAMriD,KAAK;AAAU;AAhDtB,IAAK,SACJzD,EAAI,CAACA,EAAG+H,EAAE,GAAG,GAAYrL,EAAGqL,EAAE,GAAG;AACjC,IAAIsuC,EAAK,CAACr2C,EAAG4gX,EAAK5gX,EAAGtD,EAAEkkX,EAAKlkX;AAC5B,GAAGqomB,EAASiB,QAAQzwB,GAAYv1kB,IAAK,CACpC,IAAIimmB,EAAWlB,EAASiB,QAAQzwB,GAAYv1kB;AAC5C8lD,EAAMriD,KAAK4hmB,GAAkBY,EAASrlL,EAAQvqY,EAAG0ujB,EAAUjwjB,GAC5D,KAAO,CACN,IAAIoxjB;AACJ,IAAIn8S,EAAG,EAAEA,GAAIg7S,EAASoB,OAAO/pmB,SAAU2tT,EAGtC,GADAC,EAAK+6S,EAASoB,OAAOp8S,KAClB/pT,EAAEA,EAAIgqT,EAAG,GAAG3rT,EAAE2B,GAAKA,EAAEA,EAAIgqT,EAAG,GAAG9tT,EAAE8D,GACjCA,EAAEtD,EAAIstT,EAAG,GAAG3rT,EAAE3B,GAAKsD,EAAEtD,EAAIstT,EAAG,GAAG9tT,EAAEQ,GAApC,CACAopD,EAAMriD,KAAK4hmB,GAAkBr7S,EAAG,GAAI42H,EAAQvqY,EAAG0ujB,EAAUjwjB,IACzDoxjB;AACA,KAHuC,CAKpCA,GAAKpgjB,EAAMriD,KAAkBsE,EAAE,GACpC,CACA;AAED,IAAK,WACJ+9C,EAAMriD,KAAK,IAAMugmB,GAAuBj8lB,EAAE,IAAkB;AAC5D;AAMD,IAAK,eACL,IAAK,mBACJw9lB,EAAUtqjB;AACV;AAQD,IAAK,aACJ6K,EAAMriD,KAAK;AACX;AAQD,IAAK,UAEJqiD,EAAMriD,KAAK,QAAUsE,EAAE,GAAGuiN,IAAM,KAAOviN,EAAE,GAAGq5C,GAAK;AACjD;AAcD,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,aACL,IAAK,YACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,WACL,IAAK,YACJ,MAAM,IAAI7kD,MAAM;AAIjB,QAAS,MAAM,IAAIA,MAAM,+BAAiCiwC,OAAOzkC,IAGlE,GAAgB,GAAb+sC,EAAKsgiB,MAAcmwB,GAAW,IAA+C,GAD/D,CAAC,eAAgB,mBAAoB,eACL7/lB,QAAQkkG,EAAQ,GAAG3uD,GAAI,IAAW,CAElF,IAAIwpI;AACJ,QAFA18K,EAAI6hG,EAAQ,GAAG27f,IAEN,GAAG,IAEX,KAAK,EAAG9gb;AAER,KAAK,EAEJxnL,EAAKsma,GAAK,IAAKx7Z,EAAE,GAAG;AAAK;AAC1B,KAAK,EAAG08K;AAER,KAAK,EAEJxnL,EAAKsma,GAAK,KAAMx7Z,EAAE,GAAG;AAAK;AAC3B,QAGC,GAFA9K,EAAK,GAEF63C,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM,+BAAiCwL,EAAE,GAAG,IAErE+9C,EAAMriD,MAAMghL,EAAQxnL,EAAK,IAAM6oD,EAAM0nG,OAASi3B,EAAQ,GAAKxnL,IAC3DsomB,GAAW,CACZ,CACD,CACA,GAAGz/iB,EAAM1pD,OAAS,GAAK04C,EAAKu8hB,IAAK,MAAM,IAAI90kB,MAAM;AACjD,OAAOupD,EAAM,EACd,CAGA,SAAS0jiB,GAAyBp2Y,EAAMh3M,EAAQ04C,GAC/C,IACIq0iB,EADA9jlB,EAAS+tM,EAAKx6M,EAAIwD,EAAQy2B,EAAmB,GAAbiiB,EAAKsgiB,KAAY,EAAI,EAC/C2T,EAAM31Y,EAAKgrX,WAAWvriB;AAChC,GAAU,OAAPk2jB,EAAe,MAAO,CAAC,GAAG3U,GAAUhhY,EAAMh3M,EAAO;AACpD,IAAI8slB,EAAOE,GAAWh2Y,EAAM21Y,EAAKj0iB;AAGjC,OAFG14C,IAAW2slB,EAAMl2jB,IAAKs2jB,EAAOE,GAAej2Y,EAAMh3M,EAAS2slB,EAAMl2jB,EAAKq2jB,EAAMp0iB,IAC/Es+J,EAAKx6M,EAAIyM,EACF,CAAC6jlB,EAAMC,EACf,CAuBA,SAASid,GAA0BhzZ,EAAMh3M,EAAQ04C,GAChD,IACIq0iB,EADA9jlB,EAAS+tM,EAAKx6M,EAAIwD,EACZ2slB,EAAM31Y,EAAKgrX,WAAW,GAC5B8qB,EAAOE,GAAWh2Y,EAAM21Y,EAAKj0iB;AACjC,OAAU,OAAPi0iB,EAAsB,CAAC,GAAG3U,GAAUhhY,EAAMh3M,EAAO,KACjDA,IAAW2slB,EAAM,IAAGI,EAAOE,GAAej2Y,EAAM/tM,EAAS0jlB,EAAM,EAAGG,EAAMp0iB,IACpE,CAACo0iB,EAAMC,GACf,CA6BA,SAASkd,GAAcjzZ,EAAMh3M,EAAQ04C,GACpC,IAAI95B,EAAMo4L,EAAKx6M,EAAIwD,EACfwkX,EAAOolO,GAAc5yY;AACT,GAAbt+J,EAAKsgiB,QAAahiY,EAAKx6M;AAC1B,IAAIo2C,EA9BL,SAA4BokK,GAC3B,IAAIt8L;AACJ,GAAuC,QAApCo7jB,GAAe9+X,EAAKA,EAAKx6M,EAAI,GAAe,MAAO,CAAC4glB,GAAWpmY,GAAM;AACxE,OAAOA,EAAKA,EAAKx6M,IAChB,KAAK,EAAmB,OAAbw6M,EAAKx6M,GAAK,EAAU,CAAC,SAAU;AAC1C,KAAK,EAA+C,OAAzCke,EAAuB,IAAnBs8L,EAAKA,EAAKx6M,EAAE,GAAYw6M,EAAKx6M,GAAK,EAAU,CAACke,EAAE;AAC9D,KAAK,EAAuC,OAAjCA,EAAIs8L,EAAKA,EAAKx6M,EAAE,GAAIw6M,EAAKx6M,GAAK,EAAU,CAACke,EAAE;AACtD,KAAK,EAAmB,OAAbs8L,EAAKx6M,GAAK,EAAU,CAAC,GAAG,KAEpC,MAAO,EACR,CAVA,CA8B8Bw6M,GACzB3jE,EAAQ2jE,EAAKgrX,WAAW;AACZ,GAAbtphB,EAAKsgiB,OACPhiY,EAAKgrX,WAAW,GACbtphB,EAAKsgiB,MAAQ,GACDhiY,EAAKgrX,WAAW;AAGhC,IAAIkoC,EApEL,SAAoClzZ,EAAMh3M,EAAQ04C,GACjD,IACIq0iB,EADA9jlB,EAAS+tM,EAAKx6M,EAAIwD,EAAQy2B,EAAmB,GAAbiiB,EAAKsgiB,KAAY,EAAI,EAC/C2T,EAAM31Y,EAAKgrX,WAAWvriB;AAChC,GAAU,OAAPk2jB,EAAe,MAAO,CAAC,GAAG3U,GAAUhhY,EAAMh3M,EAAO;AACpD,IAAI8slB,EAAOE,GAAWh2Y,EAAM21Y,EAAKj0iB;AAGjC,OAFG14C,IAAW2slB,EAAMl2jB,IAAKs2jB,EAAOE,GAAej2Y,EAAMh3M,EAAS2slB,EAAMl2jB,EAAKq2jB,EAAMp0iB,IAC/Es+J,EAAKx6M,EAAIyM,EACF,CAAC6jlB,EAAMC,EACf,CARA,CAoEsC/1Y,EAAMp4L,EAAMo4L,EAAKx6M,EAAGk8C;AACzD,MAAO,CAAC8rU,KAAKA,EAAM5xU,IAAIA,EAAI,GAAI46D,QAAQ08f,EAAKj0b,OAAS5iC,GAAS,EAAK,EAAGjd,GAAGxjF,EAAI,GAC9E,CAwBA,SAASu3jB,GAAwBz9kB,EAAM1sB,EAAQ04C,GAC9C,IAAIi0iB,EAAMjgkB,EAAKs1iB,WAAW,GACtB8qB,EAAOE,GAAWtgkB,EAAMigkB,EAAKj0iB,GAC7B0vE,EAAK17F,EAAKs1iB,WAAW;AAEzB,MAAO,CAAC8qB,EADG1ke,EAAK,EAAI6ke,GAAevgkB,EAAM07F,EAAI0ke,EAAMp0iB,GAAQ,KAE5D,CAGA,IAAI0xjB,GAA+BD,GAE/BE,GAA8BF,GAM9BG,GAA8BH,GAE9BI,GAAgCJ,GAChClD,GAAQ,CACV,EAAG,OACH,EAAG,OACH,EAAG,aACH,EAAG,YACH,EAAG,OACH,EAAG,UACH,EAAG,cACH,EAAG,aACH,EAAG,QACH,EAAG,gBACH,GAAI,OACJ,GAAI,aACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,OACJ,GAAI,QACJ,GAAI,MACJ,GAAI,iBACJ,GAAI,mBACJ,GAAI,iBACJ,GAAI,oBACJ,GAAI,OACJ,GAAI,UACJ,GAAI,mBACJ,GAAI,YACJ,GAAI,UACJ,GAAI,gBACJ,GAAI,cACJ,GAAI,YACJ,GAAI,UACJ,GAAI,cACJ,GAAI,eACJ,GAAI,eACJ,GAAI,OACJ,GAAI,cACJ,GAAI,QACJ,GAAI,gBACJ,GAAI,YACJ,GAAI,QACJ,GAAI,SACJ,GAAI,kBACJ,GAAI,eACJ,GAAI,OACJ,GAAI,MACJ,GAAI,OACJ,GAAI,QACJ,GAAI,QACJ,GAAI,gBACJ,GAAI,cACJ,GAAI,SACJ,GAAI,aACJ,GAAI,YACJ,GAAI,cACJ,GAAI,eACJ,GAAI,eACJ,GAAI,eACJ,GAAI,mBACJ,GAAI,mBACJ,GAAI,eACJ,GAAI,cACJ,GAAI,iBACJ,GAAI,eACJ,GAAI,cACJ,GAAI,kBACJ,GAAI,cACJ,GAAI,YACJ,GAAI,cACJ,GAAI,YACJ,GAAI,gBACJ,GAAI,OACJ,GAAI,SACJ,GAAI,cACJ,GAAI,YACJ,GAAI,eACJ,GAAI,mBACJ,GAAI,WACJ,GAAI,aACJ,GAAI,UACJ,GAAI,QACJ,GAAI,gBACJ,GAAI,cACJ,GAAI,cACJ,GAAI,QACJ,GAAI,UACJ,GAAI,OACJ,GAAI,SACJ,GAAI,YACJ,GAAI,UACJ,GAAI,eACJ,GAAI,gBACJ,GAAI,iBACJ,IAAK,iBACL,IAAK,oBACL,IAAK,oBACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,IAAK,gBACL,IAAK,gBACL,IAAK,eACL,IAAK,SACL,IAAK,cACL,IAAK,gBACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,cACL,IAAK,iBACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,eACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,kBACL,IAAK,YACL,IAAK,iBACL,IAAK,cACL,IAAK,eACL,IAAK,eACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,gBACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,OACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,iBACL,IAAK,cACL,IAAK,oBACL,IAAK,gBACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,cACL,IAAK,qBACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,eACL,IAAK,eACL,IAAK,iBACL,IAAK,eACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,gBACL,IAAK,cACL,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,SACL,IAAK,cACL,IAAK,UACL,IAAK,oBACL,IAAK,kBACL,IAAK,QACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,eACL,IAAK,aACL,IAAK,eACL,IAAK,gBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,iBACL,IAAK,YACL,IAAK,cACL,IAAK,eACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,qBACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,kBACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,iBACL,IAAK,qBACL,IAAK,YACL,IAAK,oBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,eACL,IAAK,cACL,IAAK,YACL,IAAK,kBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,aACL,IAAK,oBACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,mBACL,IAAK,qBACL,IAAK,yBACL,IAAK,cACL,IAAK,aACL,IAAK,mBACL,IAAK,sBACL,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,kBACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,2BACL,IAAK,eACL,IAAK,iBACL,IAAK,aACL,IAAK,iBACL,IAAK,YACL,IAAK,mBACL,IAAK,cACL,IAAK,wBACL,IAAK,kBACL,IAAK,qBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,iBACL,IAAK,eACL,IAAK,mBACL,IAAK,aACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,iBACL,IAAK,uBACL,IAAK,0BACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,cACL,IAAK,mBACL,IAAK,uBACL,IAAK,mBACL,IAAK,kBACL,IAAK,mBACL,IAAK,cACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,eACL,IAAK,oBACL,IAAK,sBACL,IAAK,sBACL,IAAK,mBACL,IAAK,qBACL,IAAK,qBACL,IAAK,gBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,gBACL,IAAK,wBACL,IAAK,qBACL,IAAK,SACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,mBACL,IAAK,oBACL,IAAK,eACL,IAAK,oBACL,IAAK,uBACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,qBACL,IAAK,yBACL,IAAK,mBACL,IAAK,WACL,IAAK,iBACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,mBACL,IAAK,mBACL,IAAK,iBACL,IAAK,kBACL,IAAK,oBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,SACL,IAAK,SACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,IAAK,cACL,IAAK,iBACL,IAAK,iBACL,IAAK,oBACL,IAAK,sBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,oBACL,IAAK,eACL,IAAK,gBACL,IAAK,qBAEHH,GAAO,CACT,EAAG,QACH,EAAG,KACH,EAAG,OACH,EAAG,UACH,EAAG,MACH,EAAG,UACH,EAAG,MACH,EAAG,MACH,EAAG,MACH,EAAG,SACH,GAAI,KACJ,GAAI,MACJ,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,GAAI,OACJ,GAAI,KACJ,GAAI,OACJ,GAAI,MACJ,GAAI,KACJ,GAAI,QACJ,GAAI,MACJ,GAAI,MACJ,GAAI,OACJ,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,MACJ,GAAI,QACJ,GAAI,OACJ,GAAI,QACJ,GAAI,MACJ,GAAI,KACJ,GAAI,MACJ,GAAI,MACJ,GAAI,SACJ,GAAI,OACJ,GAAI,WACJ,GAAI,OACJ,GAAI,OACJ,GAAI,SACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,SACJ,GAAI,QACJ,GAAI,SACJ,GAAI,SACJ,GAAI,OACJ,GAAI,OACJ,GAAI,SACJ,GAAI,KACJ,GAAI,KACJ,GAAI,OACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MACJ,GAAI,OACJ,GAAI,QACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MACJ,GAAI,QACJ,GAAI,OACJ,GAAI,UACJ,GAAI,OACJ,GAAI,SACJ,GAAI,SACJ,GAAI,MACJ,GAAI,QACJ,GAAI,OACJ,GAAI,UACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,WACJ,GAAI,SACJ,GAAI,YACJ,GAAI,QACJ,GAAI,OACJ,GAAI,OACJ,GAAI,OACJ,GAAI,WACJ,GAAI,SACJ,GAAI,QACJ,GAAI,UACJ,GAAI,SACJ,GAAI,YACJ,GAAI,cACJ,GAAI,YACJ,GAAI,SACJ,GAAI,QACJ,GAAI,OACJ,GAAI,OACJ,IAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,cACL,IAAK,WACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,UACL,IAAK,aACL,IAAK,OACL,IAAK,QACL,IAAK,YACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,IACL,IAAK,IACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,WACL,IAAK,SACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,gBACL,IAAK,iBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,iBACL,IAAK,aACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,WACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,aACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,SACL,IAAK,aACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,aACL,IAAK,KACL,IAAK,QACL,IAAK,SACL,IAAK,YACL,IAAK,cACL,IAAK,iBACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,cACL,IAAK,WACL,IAAK,iBACL,IAAK,aACL,IAAK,YACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,aACL,IAAK,YACL,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,cACL,IAAK,SACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,MACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,YACL,IAAK,cACL,IAAK,QACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,oBACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,QACL,IAAK,cACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,YACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,cACL,IAAK,WACL,IAAK,MACL,IAAK,YACL,IAAK,aACL,IAAK,qBACL,IAAK,mBACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,cACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,SACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,OACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,aACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,MACL,IAAK,cACL,IAAK,MACL,IAAK,aACL,IAAK,gBACL,IAAK,UACL,IAAK,eACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,YACL,IAAK,cAEHD,GAAW,CACb,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAA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","ignoreList":[]}